web-dev-qa-db-ja.com

破損したシステムディレクトリ(たとえば、/ lib)を再構築します

たとえば、Debian、Ubuntu、CentOSのいずれかのLinuxシステムがあり、ユーザーが/libを削除したとします。また、実行中のOSのlivecdバージョンでこのシステムを起動できたとしましょう。損傷したシステムで/libを再構築するコマンドを実行することは可能ですか?

たとえば、このようなものは、ターゲットシステムが使用していたすべてのパッケージを再インストールすることで機能すると思います。

同僚にこの状況に遭遇しましたが、最終的には完全に再インストールされました。しかし、それは私に修理が可能であるかどうか、そしておそらくもっと速いかどうかを考えさせましたか?

4
cat pants

ほとんどの場合、これは比較的簡単に修正できるはずです。 /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

4
Graeme

他の人が言っているように、それが私に起こった場合、私はおそらく再インストールを行うでしょう。ただし、修復しようとしている場合は、最初に/libディレクトリをライブインストールからシステムにコピーすることから始めます。 /libがすべて削除された場合、最初は何も機能せず、パッケージマネージャーも機能しないため、このような手順が必要になる場合があります。次に、パッケージマネージャーに移動し、インストール済みとしてリストされている/lib内のファイルを含むすべてのパッケージを再インストールします(このようなリストを取得する方法については、Graemeの回答を参照してください)。次に、最後のクリーンアップとして、ライブインストールからコピーされたすべての/libファイルを削除します。つまり、インストールされたパッケージのファイルに対応していませんでした。

1
Faheem Mitha

/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
...
...

opensshを確認する

% 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

1
slm

より速いという点では、再インストールはそうなると思います。システムの平和を平和ごとに選択する必要があるため、これによって引き起こされる可能性のあるいくつかの問題を後でデバッグするのにかかる時間を数えないでください。時間がかかります。システムを確実に安定した状態にするために、マシンを再構築することをお勧めします。

0
phoops