FreeBSD i386 to amd64

今後i386の環境が非推奨環境となる模様

qiita.com

手持ちの古いi386をなんとかせねば。マイグレーション手順が以下に書いてあるがさすがに今の環境とはあまりあってなさそう。

wiki.freebsd.org

i386zfsな環境はあるのだがいわゆる最近のBoot Environmentにはなっていない。

freebsd.seirios.org

WindowsVirtualBoxに13.3を入れていろいろ試してみたところ、bectlを使える環境であれば上記のマイグレーション手順を参考にi386=>amd64にできそうな感じ。以下ちょいとうろ覚え手順

make buildworld TARGET=amd64 TARGET_ARCH=amd64
make buildkernel TARGET=amd64 TARGET_ARCH=amd64

この辺は問題なし。swapデバイスを新しいrootにする部分は

bectl create amd64amd64
bectl mount amd64amd64 /mnt

で現環境を/mntに作った後中身を消して

cd /usr/src && make installworld TARGET=amd64 TARGET_ARCH=amd64 DESTDIR=/mnt
cd /usr/src/etc && make distribution TARGET=amd64 TARGET_ARCH=amd64 DESTDIR=/mnt
cp /etc/fstab /mnt/etc/.

で問題なさげ。カーネルzfs.koを /boot/kernel.amd64 /boot/zfs.koにコピーして再起動。loaderから3でプロンプトに入って

unload
load boot/kernel.amd64
load boot/zfs.ko
boot -as

シングルユーザ起動でrootパーティションzfs:zroot/ROOT/amd64amd64にして起動

bectl mount default /mnt
chflags -R noschg /mnt/*bin /mnt/lib* /mnt/usr/*bin /mnt/usr/lib*
cd / && find *bin lib* usr/*bin usr/lib* | cpio -dumpv /mnt

この後chrootからのinstallがうまくいかず。(/usr/srcがない)64bitカーネルで再起動シングルユーザーでrootをdefultにして

zfs mount -a
zfs set readonly=off zroot
cd /usr/src && make installkernel installworld
mkdir /usr/local/lib32
mv /usr/local/lib/* /usr/local/lib32/.

でrc.confにldconfig32_paths="/usr/lib32 /usr/local/lib32"追加後再起動でそれっぽい感じにできてそう。実機のzpoolをインポートして再度やってみる