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についてあまり知りません)ので、助けが必要です。
質問:
dpkg
で古いカーネルをアンインストールできないのはなぜですか?
その質問を直接解決できない場合、最終的に知りたいと思います:新しいパッケージを再度インストールできる状態になるために何をする必要がありますか?
私が試した他のこと:
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" から移行しました
uname -r
を使用して、現在実行中のカーネルを表示します。このバージョン番号のあるものは削除しないでください。
/boot
のカーネルが属するパッケージを見つけることができます:
for i in /boot/vmlinuz* ; do
dpkg -S $i| egrep -v $(uname -r)
done
これらのパッケージは、Sudo apt-get purge
packagename ...で削除できます。
同じバージョン番号を持つ他のパッケージを探すことで、削除するカーネルに関連するパッケージをさらに見つけることができます。
バージョン番号を抽出するには:
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*
にスペースを作ることができます。