/ (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 とその内蔵コマンドのハードリンクが配置される。