web-dev-qa-db-ja.com

不要なlinux-image-extra *パッケージを強制的に削除する

長い話 を短くするために、私が取り除こうとしている少数の望ましくない、半分設定された画像パッケージに固執しています:

$ dpkg -l |grep linux-im
iF  linux-image-3.13.0-100-generic       3.13.0-100.147 i386 Linux kernel image for version 3.13.0 on 32 bit x86 SMP
iF  linux-image-3.13.0-101-generic       3.13.0-101.148 i386 Linux kernel image for version 3.13.0 on 32 bit x86 SMP
iF  linux-image-3.13.0-92-generic        3.13.0-92.139  i386 Linux kernel image for version 3.13.0 on 32 bit x86 SMP
iF  linux-image-3.13.0-93-generic        3.13.0-93.140  i386 Linux kernel image for version 3.13.0 on 32 bit x86 SMP
iF  linux-image-3.13.0-96-generic        3.13.0-96.143  i386 Linux kernel image for version 3.13.0 on 32 bit x86 SMP
iH  linux-image-extra-3.13.0-100-generic 3.13.0-100.147 i386 Linux kernel extra modules for version 3.13.0 on 32 bit x86 SMP
iH  linux-image-extra-3.13.0-101-generic 3.13.0-101.148 i386 Linux kernel extra modules for version 3.13.0 on 32 bit x86 SMP
iH  linux-image-extra-3.13.0-92-generic  3.13.0-92.139  i386 Linux kernel extra modules for version 3.13.0 on 32 bit x86 SMP
iH  linux-image-extra-3.13.0-93-generic  3.13.0-93.140  i386 Linux kernel extra modules for version 3.13.0 on 32 bit x86 SMP
iH  linux-image-extra-3.13.0-96-generic  3.13.0-96.143  i386 Linux kernel extra modules for version 3.13.0 on 32 bit x86 SMP

私の32ビット14.04システムはカーネルのみを担当するOpenVZコンテナーに存在するため、これらのイメージは実際には役に立ちません。あなたが見ることができるように、はるかに古いもの:

$ uname -r
2.6.32-042stab116.2

したがって、定期的なアップグレード後にoldカーネルイメージを削除する方法に焦点を当てた同様の質問とは異なり、ここでやろうとしているのはCOMPLETELY PURGEこれらすべての3.13パッケージ。そもそも存在しないはずです。


これまでの私の試みの要約です。

パッケージを通常の方法(apt-getaptaptitude、重要ではない)で削除/パージしようとしても、明らかに悪循環のため、動作しないようです。

Sudo apt-get purge linux-image-3.13.0-100-generic linux-image-3.13.0-101-generic linux-image-3.13.0-92-generic linux-image-3.13.0-93-generic linux-image-3.13.0-96-generic linux-image-extra-3.13.0-100-generic linux-image-extra-3.13.0-101-generic linux-image-extra-3.13.0-92-generic linux-image-extra-3.13.0-93-generic linux-image-extra-3.13.0-96-generic

output からわかるように、実際には何も削除されません。一方、aptitudeは、もう少し先に進んでいます。

Sudo aptitude purge linux-image-3.13.0-100-generic linux-image-3.13.0-101-generic linux-image-3.13.0-92-generic linux-image-3.13.0-93-generic linux-image-3.13.0-96-generic linux-image-extra-3.13.0-100-generic linux-image-extra-3.13.0-101-generic linux-image-extra-3.13.0-92-generic linux-image-extra-3.13.0-93-generic linux-image-extra-3.13.0-96-generic

このプロセス の終わりに、*image-3.13*/bootに通常見られる一致するファイルとフォルダーとともに/lib/modulesがなくなりますが、image-extrasは、まだインストールされていないとして報告されます(dpkg -L...によって検証されるように、ファイルが含まれていないように見えても)

さらに、この段階でパージを繰り返すと、aptが/bootおよび/lib/modulesのファイル/フォルダーの欠落について不平を言うため、依存関係が壊れています。 ここで推奨 のように、ダミーファイルを予想される場所に配置しようとしましたが、最終的には元のエラーに遭遇しました。以下が重要な抜粋だと思います:

[...]
Removing linux-image-extra-3.13.0-101-generic (3.13.0-101.148) ...
run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 3.13.0-101-generic /boot/vmlinuz-3.13.0-101-generic
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.13.0-101-generic /boot/vmlinuz-3.13.0-101-generic
update-initramfs: Generating /boot/initrd.img-3.13.0-101-generic
E: /usr/share/initramfs-tools/hooks/fixrtc failed with return 1.
update-initramfs: failed for /boot/initrd.img-3.13.0-101-generic with 1.
run-parts: /etc/kernel/postinst.d/initramfs-tools exited with return code 1
dpkg: error processing package linux-image-extra-3.13.0-101-generic (--purge):
subprocess installed post-removal script returned error exit status 1
[...]

試みた後、失敗しました おそらく核オプション

Sudo dpkg --remove --force-remove-reinstreq package_name

アイデアが尽きました。

6
Giuseppe

とすれば:

  • linux-image-3.13.0-XXX-genericは正常に削除されました
  • linux-image-extra-3.13.0-XXX-genericはまだ半分インストールされていると報告されます
  • 現在インストールされているパッケージはこれらのimage-extrasに依存しません
  • これらのイメージはいずれもそもそも存在しないはずです(2.6カーネルはHost OpenVZコンテナーによって提供されるため)
  • 従来の試みはどれもシステムのクリーニングに成功しませんでした

次に、可能性のあるアプローチは、 ここで推奨 のように、dpkgデータベースからそれらのダングリングエントリを強制的にパージすることです。

注意:これは、ハッキングされた低レベルの潜在的に危険な操作です。

  • 削除するパッケージに属するファイルを探し($ dpkg -L linux-image-extra-3.13.0-XXX-genericを試してください)、削除します
  • ファイル/var/lib/dpkg/statusを開き、dpkgに忘れさせたいパッケージを説明するテキストブロックを見つけて削除します。
  • パッケージ記述子間の空白行、行頭のスペースなどの保存に特に注意してください。彼らは、aptデータベースはタイプミスを許さないと言っています。
  • ステータスファイルを保存すると、dpkgおよびすべてのapt関連のプログラムが通常に戻ります。
2
Giuseppe

ls /bootを実行すると、いくつかのvmlinuz-X.XX.XXファイルが表示されるはずです。それぞれapt-get purge linux-image-X.XX.XX-genericを実行しますが、削除しないでください実行中のカーネル。 uname -rでどれを確認できます。

0
user595510

Bashスクリプトで次を使用して、アクティブカーネル以外のすべてを破棄します。

dpkg -l linux-* | awk '/^ii/{ print $2}' | grep -v -e "$(uname -r | cut -f1,2 -d"-")" | grep -e "[0-9]" | grep -E "(image|headers)" | xargs Sudo apt-get -y purge

呼び出した内容に非常に近いですが、おそらくdpkgが必要な違いです。

興味があればスクリプトの完全なセットはここにあります:
https://github.com/mtompkins/linux-kernel-utilities

0
Mark