久しぶりにNanoBSD

FreeBSD

10年以上前に構築した NanoBSDを再構築してみた。
作り方は以前の変わってないと思う。最近やってないので思い出せない。https://ikata.co/archives/144 このサイトを参考にさせてもらった。
場所は、/usr/src/tools/tools/nanobsd にある。defaults.sh をコピーして使う。 本当はいろいろ出きることはわかっているけど、CONF_WORLD とサイズの設定だけを行った。

NANO_PMAKE="make -j 4"

CONF_WORLD='
WITHOUT_ASSERT_DEBUG=YES
WITHOUT_ATM=YES
WITHOUT_AUDIT=YES
WITHOUT_AUTHPF=YES
WITHOUT_BIND_DNSSEC=YES
WITHOUT_BLUETOOTH=YES
WITHOUT_CALENDAR=YES
WITHOUT_GAMES=YES
WITHOUT_GCOV=YES
WITHOUT_GPIB=YES
WITHOUT_HTML=YES
#WITHOUT_I4B=YES
#WITHOUT_INET6=YES
#WITHOUT_INET6_SUPPORT=YES
#WITHOUT_KVM=YES
#WITHOUT_KVM_SUPPORT=YES
#WITHOUT_LOCALES=YES
WITHOUT_NCP=YES
WITHOUT_NIS=YES
WITHOUT_NLS=YES
WITHOUT_NLS_CATALOGS=YES
WITHOUT_OBJC=YES
WITHOUT_SHAREDOCS=YES
WITHOUT_SSP=YES
XCC=/usr/bin/cc
XCXX=/usr/bin/c++
XCPP=/usr/bin/cpp
XAS=/usr/bin/as
XAR=/usr/bin/ar
XLD=/usr/bin/ld
XNM=/usr/bin/nm
XOBJDUMP=/usr/bin/objdump
XRANLIB=/usr/bin/ranlib
XSTRINGS=/usr/bin/strings
XSTRIPBIN=/usr/bin/strip
COMPILER_TYPE=clang
WITHOUT_BIND=YES
WITHOUT_INFO=YES
WITHOUT_GAMES=YES
WITHOUT_KERBEROS=YES
'
NANO_MODULES="geom udf zfs ahci"
NANO_DRIVE=da0
NANO_IMAGES=1
NANO_MEDIASIZE=15133248
#NANO_MEDIASIZE=31129600

NANO_CONFSIZE=204800
NANO_RAM_ETCSIZE=204800
NANO_RAM_TMPVARSIZE=204800

イメージは2つ入れて切替られるけど手持ちのUSBの容量がギリギリだから1つ。カーネルモジュールは抜き出しているけど150MBほどなので、NANO_MODULES=”default”でも良い。

root@nano:~ # df -m
Filesystem     1M-blocks Used  Avail Capacity  Mounted on
/dev/da0s1a         7052 3243   3244    50%    /
devfs                  0    0      0   100%    /dev
tmpfs                100    8     91     8%    /etc
tmpfs                100    2     97     3%    /var
/dev/gpt/home      99181   15  91231     0%    /home

色々入れても3.5Gbに収まっている。

./nanobsd.sh -c mynano.sh 

clang をビルドしてから buildworldが走るから数時間かかる。(環境によるけど) 容量は8GBのUSBで、設定領域の ETCやCFGを100MBづつにしてみた。通常は 1MBだったかな。

USBのサイズを変えたり、ETCのサイズを変えた場合は、 buildworld しない。

./nanobsd.sh -b -c mynano.sh 

nanobsdのディレクトリーにあるpcengines/Files/root は Filesにコピーしておくと良い。この他にも後から追加したいファイルや設定Patchがある場合はフルパスで Filesに配置する。最後に nanobsd.sh の install_etcの下あたりにcust_install_filesを追加してビルドすると上記の Filesが配置される。
とくに root配下の save_cfg は重要で、cmp してるだけだけど良くできたスクリプトだ。 

すっかり忘れていたのは、/usr/local/etc は/etc/local に作られリンクされている。/ は readonly でマウントされるけど /etcは tmpfsだから読み書きできる。ただ tmpfsなのでリブートで消えてしまう。 そして /etc/local/etcももちろん読み書きできる。
起動してから設定を変更した場合は、/dev/da0s3 を /cfgにマウントして保存する。変更したら、

# pushd ~/
# sh save_cfg
# popd

これで変更したファイルはすべて保存される。NanoBSDの流儀のパッケージ追加は行っていない。 よく使うPKGは Jail上でビルドしてPKG化している。

  pkg create -f tgz  -o /usr/ports/packages/All -a
  pkg repo /usr/ports/packages/All

ビルドされたイメージにPKGを入れるには、

mdconfig -a -t vnode -f /usr/obj/nanobsd.mynano/_.disk.full -u 0

mkdir /mnt

mount /dev/md0s1a  /mnt
mkdir /mnt/cfg 
mkdir /mnt/pkg 
mount  /dev/md0s3 /mnt/cfg
mount -t devfs dev /mnt/dev

mount -t nullfs -o ro /jails/pkg13/usr/ports/packages/All /mnt/pkg
chroot /mnt 

あとは /usr/local/etc/pkg/repos/localpkg.conf を書けば自由に入れられる。save_cfg は mountとumountを行うからchroot環境では動かない。
ローカルにマウントしたイメージ上では、パッケージの入れ直しは簡単だ、消せば良い。

# pkg delete -f 

手持ちのUSBメモリーは8GBだったから1イメージにしたけど、16GBだったら 2イメージが便利かも知れない。iOSは上位に移行すると戻れないけど、イメージを継承するわけじゃないから、行ったり来たりできる。自由にアクティブパーティションを切替できる。
SAMBAは便利だけど、sshfsで十分かもしれない。あとは、ZFSが動けば zfs sendも使えるし自由度が高い。

そして、USBブートのNanoBSDですが.RaspberryPiに拘る必要もなく使えて良いですね。ZFS切り出したディスクをiSCSIでマウント使うのも単純で便利でした。




コメント

タイトルとURLをコピーしました