ようやくFreeBSD 13.0がリリースされた。13.0からarm64もtier 1になるので、
12.2からの更新もfreebsd-updateコマンドで簡単にできると期待していたのだが、実際試してみると、
freebsd-update upgrade -r 13.0-RELEASE src component not installed, skipped Looking up update.FreeBSD.org mirrors... 3 mirrors found. Fetching public key from update4.freebsd.org... failed. Fetching public key from update1.freebsd.org... failed. Fetching public key from update2.freebsd.org... failed. No mirrors remaining, giving up. This may be because upgrading from this platform (arm64) or release (12.2-RELEASE) is unsupported by freebsd-update. Only platforms with Tier 1 support can be upgraded by freebsd-update. See https://www.freebsd.org/platforms/index.html for more info. If unsupported, FreeBSD must be upgraded by source.
12.2からの更新はサポートされていないと言われる。これは盲点だった。12.2に更新するときに、セルフビルドするのに飽き飽きしていたので、Build Your Own FreeBSD Update Server | FreeBSD Documentation Portalを参考に、クロス環境で自家ビルドし、更新していたのだが、もう一度このサイクルを実施しなければならないようだ。13.0-p1からはfreebsd-updateで更新できることを期待するしかない。
2021年4月19日追記
今回はABIも更新されたことだし、u-bootを更新したboot専用SDカードを作り直した。実は12.2の時は12.1の時のものでブートできたので、そのままにしていた。13.0でも12.1のものでブートできてはいるが、今後どうなるかわからないので、更新しておいた。
13.0のSDカードのイメージファイルのディスクのパーティションがMBRからGPTに変わっていたので、以前のスクリプトでは対応できなく、変更しなければならなかった。
2021年12月25日
ftd_overlaysを更新した。
#!/bin/sh DISK_SIZE=1 GO=0 ORIG="" UBOOT="" NEW="" case $# in 3) GO=1 ORIG=$1 UBOOT=$2 NEW=$3 ;; *) ;; esac if [ ${GO} -eq 0 ]; then echo "boot_sd.sh <original sd image> <u-boot binary> <new boot sd image>" exit 1 fi # create dummy memory file dd if=/dev/zero of=${NEW} bs=1G count=${DISK_SIZE} # attach image SOURCE=`mdconfig -a -f ${ORIG}` DEST=`mdconfig -a -f ${NEW}` # write u-boot dd if=${UBOOT} of=/dev/${DEST} bs=128k seek=1 conv=notrunc,sync # FAT_SIZE="54m -b 1m" FAT_TYPE="16" # create partitions gpart create -s GPT /dev/${DEST} gpart add -t efi -l efi -a 512k -s ${FAT_SIZE} /dev/${DEST} newfs_msdos -L efi -F ${FAT_TYPE} /dev/${DEST}p1 gpart add -t freebsd-ufs -l rootfs -a 64k /dev/${DEST} newfs -U -L rootfs /dev/${DEST}p2 # copy files DSOURCE=/media/source DDEST=/media/dest CONT=0 mkdir -p ${DSOURCE} mkdir -p ${DDEST} mount /dev/${SOURCE}p2 ${DSOURCE} mount /dev/${DEST}p2 ${DDEST} mkdir -p ${DDEST}/boot mkdir -p ${DDEST}/boot/efi mkdir -p ${DDEST}/boot/msdos if [ -d ${DSOURCE}/boot/efi ]; then mount -t msdos /dev/${SOURCE}p1 ${DSOURCE}/boot/efi mount -t msdos /dev/${DEST}p1 ${DDEST}/boot/efi CONT=1 fi if [ ${CONT} -eq 0 -a -d ${DSOURCE}/boot/msdos ]; then mount -t msdos /dev/${SOURCE}p1 ${DSOURCE}/boot/msdos mount -t msdos /dev/${DEST}p1 ${DDEST}/boot/msdos CONT=1 fi if [ ${CONT} -eq 0 ]; then echo "Abort. No FreeBSD loader directory is detected" exit 2 fi cd ${DSOURCE}/boot tar cf - * | (cd ${DDEST}/boot; tar xvf -) touch ${DDEST}/boot/kernel/.freebsd-update cp /boot/dtb/overlays/nanopi-neo2-ext-usb.dtbo ${DDEST}/boot/dtb/overlays cp /boot/dtb/overlays/nanopi-neo2-ext-usb.dtbo ${DDEST}/boot/efi/dtb/overlays # modifiy config file(s) cat >> ${DDEST}/boot/loader.conf <<HERE fdt_overlays="sun50i-h5-opp,sun50i-h5-nanopi-neo2-opp,nanopi-neo2-ext-usb" vfs.root.mountfrom="ufs:/dev/da0p1" pf_load="YES" nullfs_load="YES" #kern.maxswzone="3072000" #vm.pfault_oom_attempts="-1" #vm.pfault_oom_wait="30" HERE # unmount and detach cd / umount /dev/${SOURCE}p1 umount /dev/${SOURCE}p2 umount /dev/${DEST}p1 umount /dev/${DEST}p2 mdconfig -d -u ${SOURCE} mdconfig -d -u ${DEST} rmdir ${DSOURCE} rmdir ${DDEST}
/boot/loader.confに関してはSDカードに書き込んでから、編集して微調整する必要がある。また、ディスク上の/etc/fstabも修正する必要がある。
/dev/da0p1 / ufs rw,noatime 1 1 /dev/da0p2 none swap sw 0 0 /dev/da0p3 /mnt/disk1 ufs rw,noatime 1 1 /dev/mmcsd0p2 /mnt/sdcard ufs rw,noatime 1 1 /mnt/sdcard/boot /boot nullfs rw 0 0 /dev/mmcsd0p1 /boot/msdos msdosfs rw,noatime 1 1 proc /proc procfs rw 0 0
SDカードのサイズを変更するときは、mmcsd0をすべてアンマウントして、
gpart recover mmcsd0 gpart resize -i 2 mmcsd0 growfs /dev/mmcsd0p2
を実行する。リサイズ後、mount -aで問題なくマウントできれば、OK。
2021年5月28日追記
FreeBSD-13.0p1がリリースされた。今度はfreebsd-updateで更新できた。
root@xxxxxx: freebsd-update fetch src component not installed, skipped Looking up update.FreeBSD.org mirrors... 2 mirrors found. Fetching public key from update2.freebsd.org... done. Fetching metadata signature for 13.0-RELEASE from update2.freebsd.org... done. Fetching metadata index... done. Fetching 2 metadata patches.. done. Applying metadata patches... done. Fetching 2 metadata files... done. Inspecting system... done. Preparing to download files... done. Fetching 14 patches.....10.. done. Applying patches... done. Fetching 2 files... . done. The following files will be updated as part of updating to 13.0-RELEASE-p1: /bin/freebsd-version /boot/kernel/ipdivert.ko /boot/kernel/kernel /boot/kernel/kernel.bin /boot/kernel/mpt.ko /boot/kernel/virtio_pci.ko /usr/bin/bc /usr/bin/dc /usr/lib/debug/boot/kernel/ipdivert.ko.debug /usr/lib/debug/boot/kernel/kernel.debug /usr/lib/debug/boot/kernel/mpt.ko.debug /usr/lib/debug/boot/kernel/virtio_pci.ko.debug /usr/lib/debug/usr/bin/bc.debug /usr/lib/debug/usr/lib/libradius.so.4.debug /usr/lib/libradius.a /usr/lib/libradius.so.4 /usr/lib/libradius_p.a root@xxxxxx:~ # freebsd-update install src component not installed, skipped Installing updates...cp: ///boot/kernel.old/./.freebsd-update: File exists Scanning //usr/share/certs/blacklisted for certificates... Scanning //usr/share/certs/trusted for certificates... Scanning //usr/local/share/certs for certificates... done.
リブート後freebsd-versonで確認すると、期待通り更新されている。