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が遅いマシンだからなおさらだろう。

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

2008-01-23

ブログのレイアウトを微調整

アクセス解析で検索キーワードなどをながめていると、右のアーカイブ欄の記事タイトルやラベルにヒットしてしまうせいで、もっとジャストフィットする記事があるのにとか、そのキーワード群に該当するような記事は書いてないとか、無駄骨を折らせてしまっている例が散見される。

なので、ブログのアーカイブの欄から、ブログタイトルはすべて削除。ラベル一覧の欄も完全削除。むりやりGoogleにひっかけさせて期待しないページビューが増えても意味なし。

万一、全部読みたいなどという酔狂な方がいらっしゃっいましたら、アーカイブから年ごとあるいは月ごとに全部表示してください。

2008-01-22

xfceで一般ユーザにシャットダウンをさせるための自分用メモ

そろそろモダンなウィンドウマネージャを本格的に使おうかと、xfceを試してみる。

Terminalの動いているワークスペースにページャーやキーで移るのに何かワンテンポ遅れる感じがする。ktermやxtermだと何ともないのに。

最近のウィンドウマネージャには、ユーザがPCのシャットダウンや再起動ができるようなメニュー項目があったりするが、どうも選択できなかったので調べてみると、sudoの設定が必要なようだ。xfceの場合、/usr/local/libexec/xfsm-shutdown-helper がsudoできなければならない。sudoersに

%mygroup ALL = NOPASSWD: /usr/local/libexec/xfsm-shutdown-helper
を追加。

参考サイトでは NOPASSWD: の : が抜けていたので、フィードバックしておく。

追記(2009/3/24)

最近、Xを7.4に上げ、haldを動かし、xfceも4.6に上げたあたりで、「再起動」や「電源を切る」を選択すると、
シャットダウンの実行ができません
org.freedesktop.hal.power-management.reboot no <--
(action, result)
のような表示が出て、ログアウトするしかできなくなっていた。

xfce4-sessionのコードを読むと、halが動いているときはそっちを使うっぽい。なので、/usr/local/etc/PolicyKit/PolicyKit.confに、
<match action="org.freedesktop.hal.power-management.*">
<return result="yes"/>
</match>
というコードを挿入して解決。

この場合は、sudoもなくてもOK。

2008-01-15

moodleを1.8.4に更新

moodleのセキュリティアラートが来て、loginas機能に権限昇格の脆弱性があるとのこと。
とりあえず1.8.4+に更新。ついでにNWikiを2.0 20080114版にアップグレード。

特に問題なく完了。

2008-01-10

RealTekのデバイスはFreeBSD 6.3(RC2)なら問題なし

ちょうど去年の今ごろ導入したPC (FreeBSD 6.2)で、pkg_info -g が一部のパッケージで

pkg_info: (null)/libdata/ldconfig/gcc42 doesn't exist
みたいな変なエラーを出すようになり、+CONTENTSの@cwdしかない行の後がちゃんと読めてなさそうな雰囲気があったので、ここらで潮時と6.3(ただしRC2)を入れてみた。

ビルドとインストールは特に問題なく完了した。6.2ではモジュールを入れ直さないとALC883が動かなかったが、6.3ではsnd_hdaがサポートされるということで大丈夫だろうと期待。RTL8110SCももしかすると動くようになるかもと淡い期待をいだきながら再起動。

音は出た。問題なし。

そしてイーサネットの負荷試験をしてみたところ、これまでのところ問題なさそうで、
re0: watchdog timeout
は一度も出ない。

pkg_info -g もエラーなし。

めでたし。

2008-01-04

DynaBook SS 3480でのGParted LiveCDの利用

使わずに何年もほったらかしておいたDynaBook SS 3480でちょっと遊ぼうと、起動してみたら、起動しなくなっていた。

HDDも酷使しつくした20GBのMK2016GAPだったし、ここらできっちり復活させようと、まずはHDDを120GBのMK1234GAXに換装。裏のネジをはずして、パームレストをはずして、ケーブルを慎重にはずすと、HDDには簡単にアクセスできた。34xx系列では80GBまでとかいう情報もあったが、問題なく認識して、リカバリもPC Cardタイプの純正CD-ROMドライブであっさりできた。

と思ったら、リカバリ後のWindows 2000が途中までしか起動しない。そのポイントも一定でない。メモリが怪しい雰囲気だったが、本体側64MBと増設128Mがあり、本体側だと絶望的だと思いながら増設RAMをはずしてみると、幸運にも問題なく起動することがわかった。

増設RAMはBuffaloのMS100-A128Mというもので、既に廃番。後継品のMS133-A128Mも販売終了。で、よくよく保証期間を見ると6年もあることがわかり、購入時期を逆算するともう過ぎているだろうななど考えつつ保証書を探すと、期限切れまであと2週間ほどということが判明。非常に幸運なことに、無償交換となった。

次の問題は、時計がまったく合わなくなったこと。時計用のバッテリーが死んでしまったためと考えられるので、チチブデンキあたりで買うしかないだろう。ちょっと遊ぶだけの目的には致命的な問題ではないので、とりあえず後回し。いつかやろう。

最後の問題は、リカバリCDが勝手に切るパーティションがCドライブ4GBだけであること。パーティションを分ける理由が特にないのと、Cが4GBではあまりにも使い勝手がよくないので、パーティションをまとめることにする。このためのツールとしては、GPartedが有名だったので、今後の練習も兼ねてLiveCDを使ってみることにした。最新の0.3.4-11のLiveCDを焼き、例の純正ドライブで起動してみると、

!!Invalid loop location: /gparted.dat
と言われて、起動しない。探すとGPartedのフォーラムでこの問題が出ていて、そこのアドバイスに従ってみると、どうやらPC CardのCD-ROMデバイスが起動したLinuxに見えていないという問題らしい。かといって、SS 3480はUSBのデバイスからは起動しないのでちょっと悩んだが、デバイスを認識してマウントする段階でLiveCDをUSBのCD-ROMドライブに入れ直せばいいと考えた。が、そのタイミングを計るのも面倒なので、もう1枚同じLiveCDを作ってしまうことにした。PCの左右にドライブを二つ並べてそれらのLiveCDを入れ、ようやく起動に成功。

GParted自体は、日本語モードにするとGUIの漢字が全部化けるので、英語モードを選ばないと何も操作できない。しかしGUIは使いやすく、ドキュメントなどは見ずにすぐにGUIでパーティションを変更できた。Windowsを再起動するとCHKDSKが走り始めて少しあせったが、ほどなく終了して起動し、目的を達成できた。