FreeBSD kernel compile でも紹介した通り、常に kernel 再構築によりカスタムカーネルで稼動させています。
私はカスタムカーネルの名称を `hostname -s` にする習慣があり、
# cat /etc/motd | head -1 FreeBSD 9.1-RELEASE (hs0) #0: Wed Oct 30 16:18:09 JST 2013 # sysctl kern.version kern.version: FreeBSD 9.1-RELEASE #0: Wed Oct 30 16:18:09 JST 2013 root@hs0.drive.ne.jp:/sys/amd64/compile/hs0 # cat /var/run/dmesg.boot | head -n 6 Copyright (c) 1992-2012 The FreeBSD Project. Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD is a registered trademark of The FreeBSD Foundation. FreeBSD 9.1-RELEASE #0: Wed Oct 30 16:18:09 JST 2013 root@hs0.drive.ne.jp:/sys/amd64/compile/hs0 amd64
上記の例では hs0 ですが、数ヶ所に反映されます。
ホスト名を変更した場合、カスタムカーネルファイルをリネームした後通常通りに
# cd /sys/`uname -p`/conf/ # config `hostname -s` # cd ../compile/`hostname -s` # make cleandepend ; make depend ; make ; make install
で再構築すると 30 分程掛かります。機器構成が変わった訳でもなくこの時間と機器への負荷を掛けることに抵抗を感じていましたが、もう少し簡単に変更出来る方法が分かりました。
以下の例では hs0 -> hs1 と名称変更する場合を例とします。
# cd /sys/amd64/compile/ # mv hs0 hs1 ; cd hs1 # sed -i'.s' -e 's/hs0/hs1/g' vers.c # find ./ -name ".depend" -exec sed -i'.s' -e 's/hs0/hs1/g' {} \; # make
.depend をすべて書き換えないと、make の時点で必要なファイルがないとエラーが出て失敗します。
# make install thiskernel=`sysctl -n kern.bootfile` ; if [ ! "`dirname "$thiskernel"`" -ef /boot/kernel ] ; then chflags -R noschg /boot/kernel ; rm -rf /boot/kernel ; else if [ -d /boot/kernel.old ] ; then chflags -R noschg /boot/kernel.old ; rm -rf /boot/kernel.old ; fi ; mv /boot/kernel /boot/kernel.old ; sysctl kern.bootfile=/boot/kernel.old/"`basename "$thiskernel"`" ; fi kern.bootfile: /boot/kernel/kernel -> /boot/kernel.old/kernel mkdir -p /boot/kernel install -p -m 555 -o root -g wheel kernel /boot/kernel install -p -m 555 -o root -g wheel kernel.symbols /boot/kernel cd ../../../modules; MAKEOBJDIRPREFIX=/usr/src/sys/amd64/compile/hs1/modules KMODDIR=/boot/kernel MACHINE_CPUARCH=amd64 DEBUG_FLAGS="-g" MACHINE=amd64 KERNBUILDDIR="/usr/src/sys/amd64/compile/hs1" SYSDIR="/usr/src/sys/amd64/compile/hs1/../../.." make install
上記の様に続いて正常に終了する場合は、5 分程度で終了します。デバイス毎にコンパイルされる訳ではないので、負荷もほぼなく終了することを確認しました。