2006年5月18日木曜日

FreeBSD 5.xから6.1Rへのアップグレード・インストールは・・・

OSのアップデート作業は気をつけてやろうね、って話。





FreeBSDのバージョン6系は、バージョン4、5と比べて出来がいいという、~~~ちょっと眉唾な気がしないでもないのですが~~~そんなレポートを見てしまったので、先日、仕事で使っているFreeBSDマシンを、バージョン5.5-PRERELEASEから6.1-RELEASEへ、make buildworld&installworldしてアップデートしました(実際には、あらかじめ別マシンでbuildworldしておいたのをinstallworldしただけなので、楽ちん)。



これまで、バージョン番号の一番上の桁が上がるときは、まっさらの状態からインストールしていたのですが、6.0がでたときに、あまっているマシンでmake buildworldでアップデートして、とくに問題なくうまくいった記憶があったもので・・・



で、そうそう、うまくはいきませんでした(笑)。



X Window Systemで、日本語表示をするアプリは、軒並み日本語で表示できなくなったり、perlでは、ja_JP.eucJPというlocaleがサポートされてないとかいうwarningメッセージが連発・・・



あ、そういや、前回も、そんなことがあって、portsをほぼ全部コンパイルしなおしたんだったっけ・・・



6.0Rは数ヶ月前のことだったので、すっかり忘れてました。



このへんに
http://journal.mycom.co.jp/articles/2005/11/07/freebsd/003.html



そういったトラブルの話がのってました。



portsmisc/compat5xをインストールしてやればいいらしいのですが、結局、なんかよくわからないけど、うまくいかなかったです。それに、



  • 互換性ライブラリをいれるのって、なんか後ろ向きじゃない?


  • やっぱり男なら、たとえシステムダウンしたとしても、前のめりにぶっ倒れよう!


ってことで、やっぱり今回も、「portupgrade -f ~」で、ガシガシとコンパイルしなおしてしまいました。



もっとも、OSアップデート後、ぜんぜん動かなくなってしまうってことはなくて、どこかちょっと変かも・・・って程度には動くので、動かしながら直していく、ってことができます。ここが、FreeBSDのいいところかな~って個人的には思っています。

この前、Fedora Core3からCore 5へアップデート作業をやってみたのですが、まずはOSのアップデートに2時間ほどかかり、その間は、まったくマシンは使えません。さらにそのあと、もう一度、インストール済みソフトのアップデート作業が1時間ほどかかりました(これは動かしながらできた)。

FreeBSDだったら、使えない時間って、10分くらいですみますからね。あとは、動かしながらアップデートできちゃいます(たまたま運が悪いとハマりますけど)。自己責任で好き勝手にやりたいならFreeBSD、失敗したくないならFedora、ってところでしょうか(いやFedoraも、そういうもんじゃないと思う・・・)。





あとで思ったのですが、/libや/usr/libに古いライブラリが残っているので、そっちのライブラリが使われてしまったため、せっかくいれたcompat5xが使われなかったのではないかと???



make buildworldでOSのバージョンを更新したり、インストーラを使ってupgrade installをした場合、基本的に、古いファイルは削除してくれず、単に上書きインストールするだけなんですよね・・・トホホ



というわけで、FreeBSDでOSをアップデートしたときは(upgrade installしたときも、buildworldしたときも両方)



  • /lib /usr/libとかから古いライブラリを削除


  • /usr/includeとかからも、古いヘッダファイルを削除


する必要があります。ライブラリが古いかどうかの判断は、ファイルのタイムスタンプで判断しているのですが(新しいファイルはアップデートしたときの日付になってるので区別できる?)、ヘッダファイルってどうなってましたっけ???



(2006年5月25日 追記)



make buildworld & installworldした場合、ヘッダファイルが変更されていないときは、タイムスタンプは変化しないみたいなので、古いからって、削除しちゃだめみたいです。installworldするまえに、

mv /usr/include /usr/include.old

しちゃうのはどうでしょう?



共有ライブラリに関してですが、

portsclean -Ln

というコマンドを実行すると、古いライブラリや同一バージョンのライブラリの重複などをレポートしてくれるようです。

** /usr/local/lib/compat/libradius.so.1 is shadowed by /usr/lib/libradius.so.1
        /usr/lib/libradius.so.1 <- ?
        /usr/local/lib/compat/libradius.so.1    <- compat5x-i386-5.4.0.8_5
--> This may be an undesirable situation
Leave /usr/lib/libradius.so.1 (specify -i to ask on this)



なお、ファイルを移動・削除したあと、/etc/rc.d/ldconfig restartを実行しても、/usr/local/lib/compatを参照してもらえないので、

/usr/local/etc/rc.d/000.compat5x start

を実行するといいらしいです。





0 件のコメント:

コメントを投稿