先週、FreeBSD 6.2-RELEASEをインストールして、使い出してみたものの、
ということで、Intel High Definition Audio(HDA)というオーディオデバイスが、6.2Rでは未サポートだったため、カーネルだけ、FreeBSD 7.0のsnapshot版に入れ替えて使っていました(注意:FreeBSDでは、ふつうはカーネルだけ差し替えて使う、ってことはやりません。あくまでもテストしてみた、ということ)。
数日間使っていて、それほど大きな不具合はなさそうだったので、カーネル以外のものもすべてひっくるめて、FreeBSD 7.0-CURRENT-200701に移行してみることにしました。
カーネルを入れ替えたときは、
ftp://ftp2.jp.freebsd.org/pub/FreeBSD/snapshots/200701/
から、7.0-CURRENT-200701-i386-bootonly.isoをダウンロードして、mdconfigして、ISOイメージファイルから/boot以下をごっそり抜き出してきました。
この/bootには、mfsrootなども含まれているので、FreeBSDブート時のメニューで、いったんコマンド形式のboot loaderに抜けてから、「boot -a」でブートし、途中でルートパーティションを聞いてくるので、「ufs:md0a」と入力すれば、mfsrootをルートパーティションとしてマウントし、インストーラ(sysinstall)が起動します。
そして、いつもと同じようにネットワークインストール(proxy経由のHTTPで)をしたのですが・・・配布元ファイルが見つからないといわれて、インストールできません。
あっ!
ftp://ftp2.jp.freebsd.org/pub/FreeBSD/snapshots/200701
snapshot版って、FTPサイトにはISOイメージファイルしか置いてないのですね・・・
ネットワークインストールの場合は、たとえば、
ftp://ftp2.jp.freebsd.org/pub/FreeBSD/releases/i386/6.2-RELEASE/
の中にある、base, dict, doc, games, info, kernels, manpagesといったディレクトリから、ファイルをダウンロードしながら展開していきます。snapshot版の場合、それらがFTPサーバ上には置いてありませんので、ネットワークインストールもできません。
しかたないので、bootonlyじゃないほうのISOイメージファイルをダウンロード。
ftp://ftp2.jp.freebsd.org/pub/FreeBSD/snapshots/200701/
ftp://ftp2.jp.freebsd.org/pub/FreeBSD/snapshots/200701/7.0-CURRENT-200701-i386-disc1.iso
CDを焼くのは嫌なので、ローカルファイルシステムからインストールしよう、という作戦です。
さっきと同様にして、ISOイメージをマウントし、その中の7.0-CURRENT-200701というような名前のディレクトリを、とりあえず/var/へコピーしました。
リブートして、boot -a、ufs:md0a、でインストーラを起動。
アップグレードインストールを開始し、適切にあれこれ指定。
最後に、ファイルの配布元として、ローカルなファイルシステムの/var/FreeBSD/7.0-CURRENT-200701を指定。これで、インストールがはじまりました。
インストール作業はあっというまに完了し、新しい、FreeBSD 7.0-CURRENT-200701でブート。
とくに問題なく、ログインできました。で、Xを起動するため、startx・・・灰色の画面のままですねぇ あれ?
どうやら、.xinitrcで起動するプログラムのいくつかか、すんなり起動しなくて(scim -dとからしかった)、けっこう長いこと待っていたら、あがってきました。
ログをみると、signal 11で、たくさんのプロセスが落っこちてます。
あぁ、やっぱりライブラリが変わったりして、だめなのかなぁ
と思ったのですが、でも、カーネルだけ差し替えたときは動いていたので、システムコールは問題ないのでは?という気がします。 じゃあ、ライブラリのバージョン番号が同じままで、ライブラリの中身の実装は変わっちゃってるのでしょうか。
まあ、あれこれ原因を考えても仕方が無い。CURRENTを使う以上、何が起きても自己責任
ということで、次に進みましょうか。
てゆーか、src/UPDATINGとかまったくチェックしてないし・・・無謀すぎるといえるかも。でも、FreeBSDって、こういうむちゃくちゃをやっちゃっても、それなりになんとか動かせちゃう、そういうシンプルさがいいんです。うん、うん。
というわけで、portupgrade -faで、portsでインストールしたアプリを全部再コンパイルしましょうか・・・あらあら、rubyがsignal 11で落ちて、portupgradeを実行できません。
うーん、そうきたか。
pkg_deleteで。portupgradeと、portupgradeが依存するruby、その他もろもろをアンインストール。
その後、portupgradeをmake install。
ちょうど、最近、portupgradeまわりで変化がおきているので、rm /var/db/pkg/pkgdb.dbしたり。
それと、これまでFreeBSD7はまったく使っていなかったため、/usr/ports/INDEX-7* がなかったので、/usr/portsを持っているファイルサーバ上で、
cd /usr/ports/
/usr/bin/make INDEXFILE=INDEX-7 fetchindex
/usr/bin/env PORTS_INDEX=/usr/ports/INDEX-7 /usr/local/sbin/portsdb -u
を実行しました。
これで、ようやく、FreeBSD 7.0-CURRENT-200701なマシンで、portupgrade -afができるようになりました。
時間がかかるので、vncserverの中でportupgradeを実行したままにしました。BATCHをつけてportupgradeするという方法もあるけど、INTERACTIVEなやつをリビルドしなくていいというわけでもないし、まあときどき、VNCでつないでみて、続行させればいいだけなので。
この作業と並行して、別マシンではCURRENTのソースコードをcvsupで取り出してあります。ひさびさに、CURRENTをmake buildworldして使う、日常生活がはじまりそうです。
(2007/2/9)
今日の夕方までかかって、ようやく、thunderbirdとfirefoxを実行できるところまできました。これで、ほぼ以前と同様な使い方ができるようになりました。
最後までやってしまって思ったのですが、portupgradeを使うんじゃなくて、pkg_deleteしてしまってから、make installすればよかったのだ、と。
あと、結局、diablo-jdkはsignal 11かなんかで動きませんでした。まあ、いいや。