2. 如何使用 NanoBSD

2.1. NanoBSD 的設計

一旦將映像檔存入嵌入式硬體,就可以用它來引導 NanoBSD 了。 預設情況下,隨身碟會劃分為三部分:

  • 兩個映像檔分割區: code#1code#2

  • 一個設定檔分割區,在運行環境中, 可以將其掛載(mount)到 /cfg 目錄下。

這些分割區,在預設情況下是以唯讀方式掛載。

/etc/var 目錄均為 md(4)(malloc)磁碟。

設定檔的分割區則是在 /cfg 目錄。 它包含了用於 /etc 目錄的檔案,在啟動之後暫時以唯讀方式掛載。 因此,若想要重開機保留新的設定, 那麼要記得從 /etc 把改過的檔案複製回 /cfg 目錄才行。

範例 1. 把修改過 /etc/resolv.conf 設定保存起來
# vi /etc/resolv.conf
[...]
# mount /cfg
# cp /etc/resolv.conf /cfg
# umount /cfg

注意:

只有在系統啟動過程中,以及需要修改設定檔的時候,才需要掛載含有 /cfg 的那個分割區。

一直都掛載 /cfg 不是一個好主意,特別是當您把 NanoBSD 放在不適合進行大量寫入動作的分割區時 (比如:由於檔案系統的同步化會定期在系統碟內寫入資料)。

2.2. 打造 NanoBSD 映像檔

NanoBSD 映像檔是透過使用非常簡單的 nanobsd.sh shell script 來打造的,這個 script 可以在 /usr/src/tools/tools/nanobsd 目錄中找到。 這個 script 建立的映像檔,可以用 dd(1) 工具來複製到隨身碟上。

打造 NanoBSD 映像檔所需的指令是:

# cd /usr/src/tools/tools/nanobsd 1
# sh nanobsd.sh 2
# cd /usr/obj/nanobsd.full 3
# dd if=_.disk.full of=/dev/da0 bs=64k 4

1

進入 NanoBSD 打造 script 的主目錄。

2

開始打造過程。

3

進入打造好的映像檔所在的目錄。

4

在隨身碟上安裝 NanoBSD

2.3. 自行打造 NanoBSD 映像檔

這可能是 NanoBSD 最為重要, 同時也是您最感興趣的功能。 同時,在開發 NanoBSD 應用程式時,這也是相當耗時的過程。

執行下面的指令將會 nanobsd.sh 讀取目前所在目錄的 myconf.nano 檔的設定:

# sh nanobsd.sh -c myconf.nano

自行打造的流程,只需兩個步驟:

  • 自訂選項

  • 自訂功能

2.3.1. 自訂選項

透過修改設定,可以設定用於 NanoBSD 打造過程中 buildworldinstallworld 階段的編譯、安裝選項,以及 NanoBSD 主要打造過程中的選項。 透過使用這些選項可以削減系統的尺寸,使之能夠放入 64 MB 的隨身碟。 您還可以進一步透過這些選項來削減 FreeBSD, 直到它只包含 kernel 以及兩三個 userland 檔案為止。

設定檔案中包含用以代替預設值的設定選項。簡介最重要的幾項設定如下:

  • NANO_NAME —— 本次打造的名稱(所建立工作目錄的名稱)。

  • NANO_SRC —— 用以編譯、打造映像檔的 source tree 的位置。

  • NANO_KERNEL —— 設定用來編譯的 kernel 設定檔檔名。

  • CONF_BUILD —— 用於 buildworld 打造階段的選項。

  • CONF_INSTALL —— 用於 installworld 打造階段的選項。

  • CONF_WORLD —— 用於 buildworldinstallworld 這兩個打造階段的選項。

  • FlashDevice —— 定義所用的嵌入式硬體類型。 詳情請參考 FlashDevice.sub 檔。

2.3.2. 自訂功能

透過在設定檔案中使用 shell 函數,可以進一步微調 NanoBSD。 舉例說明一下自行打造函數的基本方式:

cust_foo()(
	echo "bar=topless" > \
		${NANO_WORLDDIR}/etc/foo
)
customize_cmd cust_foo

下面舉更實際點的例子,它會把預設的 /etc 目錄大小,從 5MB 調整為 30MB:

cust_etc_size()(
	cd ${NANO_WORLDDIR}/conf
	echo 30000 > default/etc/md_size
)
customize_cmd cust_etc_size

除此之外,還有幾個預設的功能定義可以用來自訂:

  • cust_comconsole —— 在預設 VGA 顯示卡上停用 getty(8) (/dev/ttyv*)並啟用 serial port 的 COM1 以作為系統 console。

  • cust_allow_ssh_root —— 允許 sshd(8) 可以用 root 帳號登入。

  • cust_install_files —— 從 nanobsd/Files 目錄中安裝檔案,這包含一些實用的系統管理 script 。

2.3.3. 設定檔案舉例

下面是用於自行打造的 NanoBSD 映像檔的完整例子:

NANO_NAME=custom
NANO_SRC=/usr/src
NANO_KERNEL=MYKERNEL
NANO_IMAGES=2

CONF_BUILD='
NO_KLDLOAD=YES
NO_NETGRAPH=YES
NO_PAM=YES
'

CONF_INSTALL='
NO_ACPI=YES
NO_BLUETOOTH=YES
NO_CVS=YES
NO_FORTRAN=YES
NO_HTML=YES
NO_LPR=YES
NO_MAN=YES
NO_SENDMAIL=YES
NO_SHAREDOCS=YES
NO_EXAMPLES=YES
NO_INSTALLLIB=YES
NO_CALENDAR=YES
NO_MISC=YES
NO_SHARE=YES
'

CONF_WORLD='
NO_BIND=YES
NO_MODULES=YES
NO_KERBEROS=YES
NO_GAMES=YES
NO_RESCUE=YES
NO_LOCALES=YES
NO_SYSCONS=YES
NO_INFO=YES
'

FlashDevice SanDisk 1G

cust_nobeastie()(
	touch ${NANO_WORLDDIR}/boot/loader.conf
	echo "beastie_disable=\"YES\"" >> ${NANO_WORLDDIR}/boot/loader.conf
)

customize_cmd cust_comconsole
customize_cmd cust_install_files
customize_cmd cust_allow_ssh_root
customize_cmd cust_nobeastie

2.4. 更新 NanoBSD

更新 NanoBSD 相對 FreeBSD 而言較為簡單:

  1. 和之前一樣打造新的 NanoBSD 映像檔。

  2. 將新的映像檔放入正運行的 NanoBSD 中未用的分割區之一。

    與之前最初安裝 NanoBSD 的步驟相比, 這一步驟最重要的區別在於:這次不用 _.disk.full 檔(它包含整個磁碟的映像檔), 而應安裝 _.disk.image 映像檔(這個檔案中,只包含一個系統分割區)。

  3. 重新啟動,並從新安裝的分割區中啟動系統。

  4. 如果一切順利的話,升級工作就完成了。

  5. 如果發生了任何問題,則可以從先前的分割區啟動 (其中包含了舊的、 可用的映像檔),來盡快恢復系統功能。 接下來可以修正新編譯的版本中存在的問題,並重複前述步驟。

要在正在運行的 NanoBSD 系統中安裝新的映像檔,可以使用位於 /root 目錄的 updatep1updatep2 script , 實際上要用哪一個 script,則取決於正在運行的系統是位於哪個分割區而定。

隨時提供新 NanoBSD 映像檔所提供的服務, 以及採用的傳輸方法的不同,您可以參考並使用下列三種方式之一:

2.4.1. 使用 ftp(1)

如果傳輸速度是第一要求的話,請採用下面例子:

# ftp myhost
get _.disk.image "| sh updatep1"

2.4.2. 使用 ssh(1)

如果想更安全的話,應參考下面例子:

# ssh myhost cat _.disk.image.gz | zcat | sh updatep1

2.4.3. 使用 nc(1)

如果遠程主機既不提供 ftp(1) 服務,也不提供 sshd(8) 服務的話:

  1. 首先,在提供映像檔的主機上開啟 TCP listen,並讓它把映像檔傳給 client:

    myhost# nc -l 2222 < _.disk.image

    注意:

    請確認您所使用的 port 沒有被防火牆阻止來自 NanoBSD client 的連線請求。

  2. 連到提供新映像檔服務的主機,並執行 updatep1 這支 script:

    # nc myhost 2222 | sh updatep1

本文及其他文件,可由此下載: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/

若有 FreeBSD 方面疑問,請先閱讀 FreeBSD 相關文件,如不能解決的話,再洽詢 <questions@FreeBSD.org>。

關於本文件的問題,請洽詢 <doc@FreeBSD.org>。