/ (root filesystem) に rescure bin を配置する

/usr を削除してしまったり、あるいはそのパーティションをマウントできなくなったり、libcを壊してしまったりして、あらゆるコマンドが実行できなくなった経験はないだろうか。

非常に困った事態であるが、時折発生することだ。今日やらかした。

little off topic

これの復旧作業中、ふとかつての SunOS の面白い仕様が脳裏をよぎった。Network is The Computer™ を標榜していたあの Sun Microsystems の UNIX® だ。

SunOS は /usr や /home などのあらゆる共有可能なディレクトリは、リモートサーバ上のものをNFSマウントして利用できるように設計されていた。 当時はまだディスクレス・ワークステーション(今風に言えばThin Client)の需要も大きく、NFS自体がSunによる発明であったので、このようなファイルシステムの共有文化はSunOSのデザインと密接に関わっていた。

従ってSunOSは /usr 配下のファイルが一切存在しない (当然 dynamically-linked なバイナリは使えない) 環境でinit スクリプトを実行し、NFSマウントが可能になる時点まで起動を進めなければならない。これが可能となるように、 /sbin に必要最小限の statically-linked なユーティリティが存在していた。

詳細はぜひ 謎の処理系 SunOS 4.1.4 を読んでいただきたい。

main theme

遠回りしたが、この /sbin の思想を現代の Linux に持ち込んでみよう。 ......というよりも、 /static に statically-linked な busybox による一連のコマンドを配置しておこうという平凡な発想だ。

Void Linux では busybox-static というパッケージをインストールすると /usr/bin/busybox.static という形で busybox を導入できる。これを /static に展開する。

ざっとこんなところだろうか。 このスクリプトを実行すると、 /static 配下に busybox.static とその内蔵コマンドのハードリンクが配置される。