たとえば、Debian、Ubuntu、CentOSのいずれかのLinuxシステムがあり、ユーザーが/lib
を削除したとします。また、実行中のOSのlivecdバージョンでこのシステムを起動できたとしましょう。損傷したシステムで/lib
を再構築するコマンドを実行することは可能ですか?
たとえば、このようなものは、ターゲットシステムが使用していたすべてのパッケージを再インストールすることで機能すると思います。
同僚にこの状況に遭遇しましたが、最終的には完全に再インストールされました。しかし、それは私に修理が可能であるかどうか、そしておそらくもっと速いかどうかを考えさせましたか?
ほとんどの場合、これは比較的簡単に修正できるはずです。 /lib
ディレクトリを使用して、インストールされているすべてのパッケージのリストを生成できます。
dpkg -S /lib | awk -F': ' '{ print $1 }' | tr -d ,
これらのパッケージを再インストールすると、問題が修正されるはずです。
apt-get --reinstall $(dpkg -S /lib | awk -F': ' '{ print $1 }' | tr -d ,)
もちろん、これは、削除されたディレクトリがapt-get
にとって重要ではないことに依存します。 apt-get
が機能するために必要なパッケージは、おそらくdpkg
がなくても、手動でインストールする必要があります。この場合、パッケージを別のマシンで抽出し、ファイルを所定の場所にコピーすると、後でapt
を使用して再インストールされるため、他の問題が発生することはありません。
ファイルを/lib
に入れるパッケージの私自身のリストを見ると、主要なものはカーネル(すべてのモジュールは/lib/modules
に移動します)とlibc
であることがわかります。これらは、システムを起動可能にするためにほぼ確実に再インストールする必要がある2つです。これを行う1つの方法は、ライブのDebianベースのシステムからインストールすることです。必要なパッケージをダウンロードしてターゲットシステムのルートをマウントする場合は、そこにあるdpkg
に--root
オプションを追加してインストールできます。例:
dpkg --root=/path/to/target/root -i package1.deb package2.deb ...
--root
オプションは、必要に応じて最初のdpkg
コマンドで使用することもできます。もちろん、十分な忍耐力とスキルがあれば、オンラインで修復できるはずです。 dpkg
コマンドが機能しない場合は、いつでも/var/lib/dpkg/info
でパッケージの依存関係を直接検索し、/lib
の.list
ファイルを介して/var/lib/dpkg/info
にファイルを配置するパッケージを検索できます。 。
何が達成できるかについてのアイデアを与えるために、allパッケージがアンインストールされた実行中のGentooシステムを回復することに成功した誰かについてのブログがあります。それは興味深い読み物になります、そして使用されたテクニックのいくつか(またはコメントで提案されたもの)はこの種の状況に適用されるかもしれません http://fakeguido.blogspot.co.uk/2010/08/ rescuing-hosed-system-using-only-bash.html
他の人が言っているように、それが私に起こった場合、私はおそらく再インストールを行うでしょう。ただし、修復しようとしている場合は、最初に/lib
ディレクトリをライブインストールからシステムにコピーすることから始めます。 /lib
がすべて削除された場合、最初は何も機能せず、パッケージマネージャーも機能しないため、このような手順が必要になる場合があります。次に、パッケージマネージャーに移動し、インストール済みとしてリストされている/lib
内のファイルを含むすべてのパッケージを再インストールします(このようなリストを取得する方法については、Graemeの回答を参照してください)。次に、最後のクリーンアップとして、ライブインストールからコピーされたすべての/lib
ファイルを削除します。つまり、インストールされたパッケージのファイルに対応していませんでした。
/lib
ディレクトリが機能していない場合、ほとんどの場合、修復ジョブを実行するために必要なアプリケーションの多くは存在しなくなると思います。私は弾丸を噛んで、ただ再インストールします。
とにかく試してみたい場合は、RedHatベースのディストリビューションをどうするかを次に示します。
CentOS/Fedora/RHELなどのRedhatベースのディストリビューションの場合、RPMを使用して、インストールされているパッケージのいくつかの側面を検証および修復できます。
% rpm -qVav
......... /usr/bin/rdesktop
......... /usr/share/doc/rdesktop-1.6.0
......... d /usr/share/doc/rdesktop-1.6.0/AUTHORS
......... d /usr/share/doc/rdesktop-1.6.0/COPYING
......... d /usr/share/doc/rdesktop-1.6.0/ChangeLog
......... d /usr/share/doc/rdesktop-1.6.0/HACKING
......... d /usr/share/doc/rdesktop-1.6.0/README
......... d /usr/share/doc/rdesktop-1.6.0/TODO
......... d /usr/share/doc/rdesktop-1.6.0/ipv6.txt
......... d /usr/share/doc/rdesktop-1.6.0/keymap-names.txt
......... d /usr/share/doc/rdesktop-1.6.0/keymapping.txt
...
...
% rpm -qVv openssh
......... /etc/ssh
..?...... c /etc/ssh/moduli
......... /usr/bin/ssh-keygen
......... /usr/libexec/openssh
......... /usr/libexec/openssh/ssh-keysign
......... /usr/share/doc/openssh-5.5p1
......... d /usr/share/doc/openssh-5.5p1/CREDITS
......... d /usr/share/doc/openssh-5.5p1/ChangeLog
......... d /usr/share/doc/openssh-5.5p1/INSTALL
......... d /usr/share/doc/openssh-5.5p1/LICENCE
......... d /usr/share/doc/openssh-5.5p1/OVERVIEW
...
...
% rpm --setperms {packagename}
% rpm --setugids {packagename}
注:man rpm
出力の詳細については、-V|--verify
を参照してください。
詳細については、この記事を参照してください: http://www.cyberciti.biz/tips/reset-rhel-centos-Fedora-package-file-permission.html 。
より速いという点では、再インストールはそうなると思います。システムの平和を平和ごとに選択する必要があるため、これによって引き起こされる可能性のあるいくつかの問題を後でデバッグするのにかかる時間を数えないでください。時間がかかります。システムを確実に安定した状態にするために、マシンを再構築することをお勧めします。