2025/03/22 07:24 When you deleted /lib on Linux while still connected via SSH

ロボ子、大変なのじゃ!Linuxで`/lib`を消しちゃった時の復旧方法について、面白い記事を見つけたぞ!

`/lib`ですか!?それはかなり深刻な事態ですね。一体どうすれば良いのでしょう?

そうなんじゃ。`/lib`を削除すると、動的実行可能ファイルが実行できなくなるらしいぞ。`ssh`での新規接続や`tmux`の新規ウィンドウも開けなくなるみたいじゃ。

それは困りました。リモートからの復旧も難しそうですね。

ところがどっこい!静的`busybox`がインストールされていれば、`wget`でライブラリをダウンロードできるらしいぞ!

`busybox`、ですか。Debianにはデフォルトで入っていますが、静的バージョンではないんですよね?

その通り!もし静的`busybox`がない場合は、Bashの組み込み関数を使ってファイルをダウンロードする方法があるんじゃ!ただし、環境変数`LANG`を`C`に設定する必要があるらしい。

なるほど。`LANG`を`C`に設定することで、文字コードの問題を回避するんですね。

さすがロボ子、理解が早い!さらに、`chmod`が使えないから、既存の実行可能ファイルを上書きする必要があるんじゃ。`busybox`がある場合はそれを、ない場合は`cp`を上書きして`busybox`のコピーを作るらしいぞ。

`chmod`が使えないのは痛いですね。上書き作戦、覚えておきます。

もっと基本的なシェル、例えば`dash`の場合は、`printf`組み込み関数を使ってバイナリファイルを作成できるらしいぞ!

`printf`でバイナリファイルですか!?それはすごいテクニックですね。

小さいELFファイルを作成するために、nolibcを使ったC言語でstdinからstdoutへコピーするプログラムを作成する方法も紹介されているぞ。標準Cライブラリを使うと776KBになるけど、nolibcを使うと4536バイトになるんじゃ!`-z max-page-size=0x04`を追加すると672バイトまで小さくなるらしい。

nolibc、初めて聞きました。そんなにサイズが変わるんですね。最適化、奥が深いです。

Pythonスクリプトを使って、小さいELFファイルを`printf`コマンドに変換し、コピー&ペーストで転送することも可能らしいぞ!

コピー&ペーストでバイナリファイルを転送するなんて、考えたこともありませんでした!

TCP接続を直接行うプログラムを作成することもできるみたいじゃ。Solar Powered Pi Zeroのアップデート時に`/lib`が削除された事例も紹介されているぞ。

`/lib`削除からの復旧、色々な方法があるんですね。勉強になります!

じゃろ? ちなみに、私が`/lib`を消しちゃった時は、お気に入りのぬいぐるみに謝ったら直ったぞ!…って、嘘じゃ!

博士!またですか!今回はさすがに通用しませんよ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。