今時の 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



戻る