FreeBSD 12.1がリリースされたので、早速ソースコードをsvn経由で取得して、ビルドしようとしたのだが、メモリー不足でビルドにてまどった。12.0の時は特に何も考えずに、
# make -j2 buildworld # make -j2 kernel
でユーザーランドも、カーネルもビルドできたのだが、12.1では-j2をつけると、メモリ不足でビルドできなかった。それと、FreeBSDのTest Suiteをビルドすると、それも大量のメモリを要求するようで、ビルドできなかった。なので、/etc/src.confに
KERNCONF=NANOPINEO2 WITHOUT_TESTS=yes WITHOUT_LLVM_TARGET_MIPS=yes WITHOUT_LLVM_TARGET_POWERPC=yes WITHOUT_LLVM_TARGET_SPARC=yes WITHOUT_LLVM_TARGET_X86=yes
以上の設定を書かなければならなかった。以前からmipsとかpowerpc向けにllvmがコンパイルされていて、無駄だと感じていたので、ついでに追加した。
しかし、これでもカーネルのリンクでもメモリ不足で失敗した。それで、カーネルの設定であるGENERICの内容からNanoPi NEO2には関係なさそうなものを削除したNanoPi NEO2を作ってそれを使うようにした(src.confのKERNCONFに指定)。
2019/11/18更新 option passを削除して、smartctlが使えなくなっていたのを修正。更に必要のなさそうなものを削除。
include GENERIC ident NANOPINEO2 nooptions GEOM_RAID # Soft RAID functionality. nooptions SOC_CAVM_THUNDERX nooptions SOC_HISI_HI6220 nooptions SOC_BRCM_BCM2837 nooptions SOC_BRCM_BCM2838 nooptions SOC_MARVELL_8K nooptions SOC_ROCKCHIP_RK3328 nooptions SOC_ROCKCHIP_RK3399 nooptions SOC_XILINX_ZYNQ nodevice qcom_gcc # Global Clock Controller nodevice iflib nodevice em # Intel PRO/1000 Gigabit Ethernet Family nodevice ix # Intel 10Gb Ethernet Family nodevice axgbe # AMD Opteron A1100 integrated NIC nodevice msk # Marvell/SysKonnect Yukon II Gigabit Ethernet nodevice neta # Marvell Armada 370/38x/XP/3700 NIC nodevice smc # SMSC LAN91C111 nodevice vnic # Cavium ThunderX NIC nodevice al_eth # Annapurna Alpine Ethernet NIC nodevice dwc_rk # Rockchip Designware nodevice nvme # base NVMe driver nooptions NVME_USE_NVD # = 0 prefer the cam(4) based nda(4) driver nodevice nvd # expose NVMe namespaces as disks, depends on nvme nodevice sdhci_xenon # Marvell Xenon SD/MMC controller nodevice rk_emmcphy nodevice uart_msm # Qualcomm MSM UART driver nodevice uart_mu # RPI3 aux port nodevice uart_mvebu # Armada 3700 UART driver nodevice uart_ns8250 # ns8250-type UART driver nodevice rk_usb2phy # Rockchip USB2PHY nodevice rk_typec_phy # Rockchip TypeC PHY nodevice ehci_mv # Marvell EHCI USB interface nodevice xhci # XHCI PCI->USB interface (USB 3.0) nodevice rk_dwc3 # Rockchip DWC3 controller nodevice ukbd # Keyboard nodevice muge nodevice smcphy nodevice smsc nodevice a37x0_gpio # Marvell Armada 37x0 GPIO controller nodevice mv_gpio # Marvell GPIO controller nodevice mvebu_pinctrl # Marvell Pinmux Controller nodevice rk_gpio # RockChip GPIO Controller nodevice rk_pinctrl # RockChip Pinmux Controller nodevice bcm2835_bsc # Broadcom BCM283x I2C bus nodevice syr827 # Silergy SYR827 PMIC nodevice rk_i2c # RockChip I2C controller nodevice mv_cp110_icu # Marvell CP110 ICU nodevice mv_ap806_gicp # Marvell AP806 GICP nodevice mv_rtc # Marvell Real-time Clock nodevice axp81x # X-Powers AXP81x PMIC nodevice rk805 # RockChip RK805 PMIC nodevice mv_thermal # Marvell Thermal Sensor Controller nodevice bcm2835_spi # Broadcom BCM283x SPI bus nodevice rk_spi # RockChip SPI controller nodevice rk_pwm nodevice evdev # input event device support nooptions EVDEV_SUPPORT # evdev support in legacy drivers nodevice uinput # install /dev/uinput cdev nodevice rk_iodomain nooptions THUNDERX_PASS_1_1_ERRATA nodevice al_ccu # Alpine Cache Coherency Unit nodevice al_nb_service # Alpine North Bridge Service nodevice al_iofic # I/O Fabric Interrupt Controller nodevice al_serdes # Serializer/Deserializer nodevice al_udma # Universal DMA nodevice al_pci # Annapurna Alpine PCI-E nodevice al_eth # Annapurna Alpine Ethernet NIC
これでようやくビルドできて、インストールできた。ユーザーランドのビルドには2日以上かかる。やはり"make -j2"の効果はかなりあったのだろう。-j2をつけると1日かからないでビルドできていたのだから。
再起動すると立ち上がってきたので、とりあえずは動作は問題なさそうだ。
2019/11/18追記
12.0から12.1に更新するには/usr/srcの下にある新しllvm(8.0.1)を使わなければならないが、一旦12.1に更新したならば、既にインストール済みのllvmが使えるので、/etc/src.confに
WITHOUT_CROSS_COMPILER=yes
を追加し、
setenv CROSS_BINUTILS_PREFIX /usr/bin
を設定することで、ビルド時間が1.5日程度に短縮できた。