こんにちは、habrachitateli。
Ubuntuのサーバーに新しいパッケージをインストールするとき、仕事で困難な夜がありました。突然依存関係が壊れたというメッセージが表示されました。libc6のバージョンはおそらく同じではありません。 自動依存関係の修正は、システムの半分を破壊することを提案しましたが、それは当然私には合いませんでした。 私は自分でこのlibc6を削除し、適切なバージョンをインストールすればすべてがうまくいくと決めました。
単純な
sudo apt-get remove libc6
できなかったため、
sudo dpkg --remove --force-all libc6
を適用しましたが、エラー
sudo dpkg --remove --force-all libc6
発生し
sudo dpkg --remove --force-all libc6
た。 このエラーの後、私は何もできませんでした(
ls
、
dir
、
sudo
、およびその他のコマンドは見つかりませんでした
cd
のみが機能しました)。 それから、特に
この記事のパラグラフ24を読んだとき、私はひどいことをしたという疑念が私の魂に忍び寄った。
猫の下で石膏がどのように塗布されたかを誰が気にしますか。
Googlingは、libc6がシステムコールとopen、malloc、printfなどの基本機能を提供するCライブラリであり、動的にリンクされたすべてのプログラムにも使用されるという
Wikipediaの記事に私を導きました。 その後、ほとんどのチームが機能しなかった理由がすぐに明らかになりました。 幸いなことに、すでに実行されていたすべてのサーバーサービスが機能していたため、企業のすべての従業員は落ち着いて通常モードで作業を続けました。 サーバーがオフになっている場合、システムが起動しないだけで(スイッチからプラグや電源を引き出すためにスタッフを掃除するのが好きです)、sshを使用してセッションを複製できなかったため、ネットワーク接続の切断がクラッシュすることは明らかでした。
営業日の終わりまで、私はまだ問題の解決策を見つけることができなかったので、家に帰ると、古いラップトップを持ち、同じシステム(Ubuntu Server 12.04)を転がし、libc6を再度アンインストールして、激しく整理し始めました。
私の検索中に、私はライブラリがその場所にあることで十分であることがわかりました、どこでそれらを入手し、どのようにそれらを落とすかを理解することは残っています。 Ubuntuでは、デフォルトのコマンドは
static-sh
、これはBusyBoxを起動しますが、これは役立ちますが、私の場合、sshセッションはルートではなく、sudoコマンドは機能しませんでした。
何もする必要はありません。Ubuntuで起動可能なUSBフラッシュドライブを作成し、そこからラップトップを起動しました。
すべてのハードドライブを調べて、システムにドライブをマウントしました。
fdisk -l mount /dev/hda1 /mnt/
殺されたシステムのファイルへのアクセスを得ることがたまたまありました。 その後、debパッケージは
ここで簡単に見つけられるため、ライブラリファイル自体が必要になり
ました (オペレーティングシステムの独自のエディションを選択することを忘れないでください)。
私はtmpフォルダに行き、そこにパッケージをダウンロードし(システムのビット深度を観察して)、それを解凍し、受け取ったファイルをそれぞれの場所に置きました
cd /mnt/tmp wget http://security.ubuntu.com/ubuntu/pool/main/e/eglibc/libc6_2.15-0ubuntu10.5_amd64.deb dpkg -x libc6_2.15-0ubuntu10.5_amd64.deb libc6_files cp -R libc6_files/* /
システムを再起動すると、私は安のため息をついたが、今はそれが始まった。
サーバー上でこれらの手順を繰り返して、壊れた依存関係に再び遭遇しました。 しかし、私は必要なバージョンを解凍したことを知っていましたが、これをシステムにどのように説明するのですか? どのパッケージがインストールされ、どのバージョンを自分で編集するかを登録したファイルを見つけようとしましたが、見つかりませんでした(もしあれば、教えてください)。
最近ダウンロードしたパッケージを再度インストールしようとしましたが、次の内容を受け取りました。
A copy of the C library was found in an unexpected directory: '/lib/x86_64-linux-gnu/libc-2.15.so' It is not safe to upgrade the C library in this situation; please remove that copy of the C library or get it out of '/lib/x86_64-linux-gnu' and try again.
私は先に行かなければなりませんでした:パッケージを再構築し、チェックを微調整します。
その後、正しいバージョンのlibc6がシステムに表示されました。
PS投稿は短いように見えるかもしれませんが、RuNetでこの問題の解決策を見つけられませんでした。英語のインターネットにもこのトピックに関する少量の情報が含まれています。