今時の FreeBSD 8-Stable をアップデート
永らく FreeBSD のソースを取り込むには cvsup が使われて来ましたが、subversion に完全移行となり cvs サーバも停止されてしまいました。一般的には freebsd-update が整備されて安定して動くようになったので、Release バージョンを使用する人はこちらを使えばよいのですが、「-STABLE へ」あるいは「-STABLE から」ソースを同期するのには使えません。
そこで、cvsup の代わりに subversion を手元にインストールしてソースコードの同期を行うことになります。
参考ページ: http://www.freebsd.org/doc/ja/books/handbook/svn.html
まず cvsup 時代にもってきたソースを削除しておきます。普通は /usr/src だと思いますが、私は以下の場所に置いてました
# rm -rf /export/cvsup8
# mkdir /export/svn-stable8
で、subversionのミラーサイトがどこにあるか調べたのですが。
http://www.freebsd.org/doc/handbook/svn.html#svn-mirrors
によればアジア圏にはなさそうなので本家でいいか.
# svn checkout https://svn0.us-west.FreeBSD.org/base/stable/8 /export/svn-stable8
HTTPS なのでフィンガープリントの確認を求められますが、ハンドブックに誤記がありますね。「フィンガープリントが一致したら、 サーバのセキュリティ証明書を一時的 (temporarily) もしくは恒久的 (permanently) に受け入れてください。」
# ls /export/svn-stable8/
.svn cddl release
COPYRIGHT contrib rescue
LOCKS crypto sbin
MAINTAINERS etc secure
Makefile games share
Makefile.inc1 gnu sys
ObsoleteFiles.inc include tools
README kerberos5 usr.bin
UPDATING lib usr.sbin
bin libexec
さて、世界を作るわけですが、FreeBSDハンドブックに、昔ながらの手順では危険だよと断り書きがあります。
http://www.freebsd.org/doc/ja/books/handbook/makeworld.html
まず、/etc/make.conf を確認しておかないと。
PERL_VERSION=5.10.1
CFLAGS+=-O2 -fno-strict-aliasing -pipe
NO_PROFILE=true
USA_RESIDENT=NO
perl はパッケージを入れたときに追加されたものなのでそのままに。他は諸先輩の情報にならっておきます。また、/usr/obj を全削除しておきます。続いて buildworld してから buildkernel するのが今の方法なんだそうです
rm -rf /usr/obj
cd /export/svn-stable8
make buildworld
make buildkernel
shutdown -r now
先にカーネルをインストールして再起動。本当はシングルユーザモードで起動するのがいいんだけど、面倒臭がりの私は大抵マルチユーザのまま起動しています。セキュリティを気にしなくていいのもあるのですがね。
install world の前に mergemaster をするようにとのこと。「installworld に成功するために本質的なファイルのみを比較します」なるほど。make installworld が終わったら改めて残りをmergemaster
cd /export/svn-stable8
mergemaster -iF
make installworld
mergemaster -p
make delete-old
shutdown -r now
mergemaster ではうっかり i (install) ばっかり押していると自分のユーザを消すことになってしまうんで、master.passwd の diff をテキストエディタに貼っておいて、後からOSデフォルトで追加されたユーザの行を vipw で貼り付けてます。今回はこんな感じ。
smmsp:*:25:25::0:0:Sendmail Submission User:/var/spool/clientmqueue:/usr/sbin/nologin
mailnull:*:26:26::0:0:Sendmail Default User:/var/spool/mqueue:/usr/sbin/nologin
bind:*:53:53::0:0:Bind Sandbox:/:/usr/sbin/nologin
+unbound:*:59:59::0:0:Unbound DNS Resolver:/var/unbound:/usr/sbin/nologin
proxy:*:62:62::0:0:Packet Filter pseudo-user:/nonexistent:/usr/sbin/nologin
_pflogd:*:64:64::0:0:pflogd privsep user:/var/empty:/usr/sbin/nologin
_dhcp:*:65:65::0:0:dhcp programs:/var/empty:/usr/sbin/nologin
uucp:*:66:66::0:0:UUCP pseudo-user:/var/spool/uucppublic:/usr/local/libexec/uucp/uucico
pop:*:68:6::0:0:Post Office Owner:/nonexistent:/usr/sbin/nologin
+auditdistd:*:78:77::0:0:Auditdistd unprivileged user:/var/empty:/usr/sbin/nologin
www:*:80:80::0:0:World Wide Web Owner:/nonexistent:/usr/sbin/nologin
+hast:*:845:845::0:0:HAST unprivileged user:/var/empty:/usr/sbin/nologin
nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/usr/sbin/nologin
問題なければ、必要にあわせて ports などを更新することになります。
root@mymachine:~ # uname -ar
FreeBSD mymachine.expamle.local 8.4-STABLE FreeBSD 8.4-STABLE #0 r269775: Sat Aug 16 15:31:14 JST 2014 root@mymachine.expamle.local:/usr/obj/export/svn-stable8/sys/GENERIC i386