2008-01-29

FreeSBIEでNO_COMPRESSEDFS=YESにするとsuid/sgidができない

VMwareの仮想ディスクイメージを複数ユーザで共有したかったが、read onlyなvmdkはどうも作れなさそうである。そこで、read onlyなLiveCDイメージを作り、これを共有することにした。

最初、sysutils/livecdを試してみたが、これはFreeBSD 4以前が前提っぽく断念。もう消してもいいんじゃないか?次に、sysutils/freesbieを試すと、こちらは設定もわかりやすく、素直にisoイメージを作ることができる。

FreeSBIEは、デフォルトではgeom_uzipを使って/usrを圧縮し、isoのサイズを小さくしている。しかし、速度を測ってみると、やはりNO_COMPRESSEDFS=YESにして圧縮をしない方が速いようで、起動時間が1割くらい短縮される。イメージを実際にCDやDVDに焼くわけではないので、サイズは重要ではなく、速い方を採用しようと考えた。

しかし、起動してしばらく使ってみると、sendmailが文句を言うようになり、よく調べてみると、/usr以下の各バイナリのsuid/sgidビットがすべて落ちてしまっていることがわかった。これは、iso9660のファイルシステムにそのような属性がないためで、当然の結果である。geom_uzipを使った場合は、ufsの圧縮イメージをマウントするので素のFreeSBIEでは大丈夫だったわけだ。/sbinにあるsuidバイナリはどうしているのか見てみると、/usr/sbinに移動してリンクされていた。conf/freesbie.confファイルでEXTRAにsuidを加えておくと、このリンクが作成される。

というわけで、現状では、ちゃんと動くLiveCDを作ろうとすると、NO_COMPRESSEDFSは利用できないことになる。圧縮なしのufsのイメージを置いて、それをマウントするようにすれば、このsuid/sgidの問題は解決するかと思う。いつかやろう。


追記(1/31)

やってみた。結論からいうと、効果がなかった。

scripts/clonefs.shでusr.uzipを作っているが、その前段階でusr.ufsというまさに欲しいものを作っていた。これを適当な名前で残すようにし、conf/rc.d/uzipと同じようなものも作って、NO_COMPRESSEDFS=YESでisoを作り、起動してみた。当然ながらsuidは確かに効いている。しかし、速度はuzip版より数%前後遅い感じになってしまった。

これは、ファイルシステムが二重になっているのが原因なのだろうか?uzipを伸長する時間よりも圧縮されていないデータを物理的に入出力する時間の方が効くということか。HDDが遅いマシンだからなおさらだろう。

なので、今後は圧縮版のみ採用。

0 件のコメント: