web-dev-qa-db-ja.com

古いカーネルをパージすることはできません(依存関係の問題)が、/ bootの容量が不足しています

Ubuntu 14.04.4 LTSを実行しています。apt-getを使用して新しいパッケージをインストールしようとしています。残念ながら、私が試みるたびに次のようなメッセージが表示されます:

The following packages have unmet dependencies:
 linux-image-extra-3.16.0-70-generic : Depends: linux-image-3.16.0-70-generic but it is not going to be installed
 linux-image-generic-lts-utopic : Depends: linux-image-3.16.0-70-generic but it is not going to be installed
 linux-signed-image-3.16.0-70-generic : Depends: linux-image-3.16.0-70-generic (= 3.16.0-70.90~14.04.1) but it is not going to be installed

グーグルで調べてみると、 これはブートパーティションのスペース不足が原因である可能性があります (そして、確かに、df/bootを100%で示しています)。ただし、受け入れられた回答でapt-getコマンドを実行しようとすると、上記と同じエラーが表示されます。

apt-getを使用しない別のソリューションを探していましたが、 この投稿 に出会いました。これは、古い未使用のカーネルでSudo dpkg --purge linux-image-4.2.0-15-genericなどの使用を推奨しています。

dpkg -l | tail -n +6 | grep -E 'linux-image-[0-9]+' | grep -Fv $(uname -r)(前述の投稿から)は、pi状態にあるいくつかの古いカーネルがあることを示しています(削除が望ましい、状態は this に従ってインストールされます)

uname -rは、実行中のカーネルが3.16.0-62-genericであることを示しているため、これらの古いカーネルを削除しても安全であると考えました。ただし、Sudo dpkg --purge linux-image-3.16.0-49-genericのようなものでそうしようとすると、次のようになります。

dpkg: error processing package linux-image-3.16.0-49-generic (--purge):
 dependency problems - not removing
Errors were encountered while processing:
 linux-image-3.16.0-49-generic

Garrg!私は機知に富んでいて、深みのないところにいます(dpkgやapt-getについてあまり知りません)ので、助けが必要です。

質問:

  1. dpkgで古いカーネルをアンインストールできないのはなぜですか?

  2. その質問を直接解決できない場合、最終的に知りたいと思います:新しいパッケージを再度インストールできる状態になるために何をする必要がありますか?


私が試した他のこと

  • Sudo apt-get autoremove:満たされていない依存関係に関する元のエラーが発生します
  • Sudo apt-get -f autoremove:結果:
 unpacking linux-image-3.16.0-70-generic(3.16.0-70.90〜14.04.1)... 
 dpkg:エラー処理アーカイブ/ var/cache/apt/archives/linux-image-3.16.0-70-generic_3.16.0-70.90〜14.04.1_AMD64.deb(--unpack):
は、 '。/ boot/vmlinuz-3.16.0-70-の抽出データをコピーできません「/boot/vmlinuz-3.16.0-70-generic.dpkg-new」への汎用」:書き込みに失敗しました(デバイス上にスペースが残っていません)
エラーメッセージがディスクのフルエラーを示しているため、apportレポートが書き込まれません
 dpkg-deb:エラー:サブプロセスのペーストがシグナルによって中断されました(パイプが破損している)
 Examning /etc/kernel/postrm.d。
 run-parts:running/etc/kernel /postrm.d/initramfs-tools 3.16.0-70-generic /boot/vmlinuz-3.16.0-70-generic
run-parts:/etc/kernel/postrm.d/zz-update-の実行grub 3.16.0-70-generic /boot/vmlinuz-3.16.0-70-generic
処理中にエラーが発生しました:
 /var/cache/apt/archives/linux-image-3.16 .0-70-generic_3.16.0- 70.90〜14.04.1_AMD64.deb 
 E:サブプロセス/ usr/bin/dpkgがエラーコードを返しました(1)

:この質問を "Unix&Linux Stack Exchange" から移行しました

5
augray

uname -rを使用して、現在実行中のカーネルを表示します。このバージョン番号のあるものは削除しないでください。

/bootのカーネルが属するパッケージを見つけることができます:

for i in /boot/vmlinuz* ; do 
    dpkg -S $i| egrep -v $(uname -r)
done

これらのパッケージは、Sudo apt-get purgepackagename ...で削除できます。

同じバージョン番号を持つ他のパッケージを探すことで、削除するカーネルに関連するパッケージをさらに見つけることができます。

バージョン番号を抽出するには:

for i in /boot/vmlinuz* ; do 
    dpkg -S $i | egrep -v $(uname -r)
done |cut -d- -f3-4  

同じバージョン番号を持つ他のパッケージを見つけるには:

for j in $(
    for i in /boot/vmlinuz* ; do 
        dpkg -S $i| egrep -v $(uname -r)
    done |cut -d- -f3-4 ) ; 
do 
     dpkg -l "*$j*" | egrep '^ii|^rc'
done  

現在のカーネル以外のすべてのカーネル、および削除されたカーネルとバージョンが一致するすべてのパッケージの削除を自動化するには(Danger、Wil Robinson):

単に追加する

| awk '{print $2}' | xargs Sudo apt-get --dry-run purge

前のコードの断片に。希望どおりに動作することを確認したら、--dry-runを削除します。

/bootがいっぱいでパッケージを削除できない場合、最も古い/bootファイルを削除することで/boot/initrd.img*にスペースを作ることができます。

3
waltinator