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
グーグルで調べてみたら、これはブートパーティションのスペース不足が原因である可能性があります(そして案の定、 100% とdf
表示されます)。ただし、そこで受け入れられた回答のコマンド/boot
を実行しようとすると、上記と同じエラーが発生します。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
(望ましいパージ、状態は次のようにインストール済み)にあることを示しています。これ)
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
ガーグ!もう途方に暮れていて、手に負えない状態です(dpkg や apt-get についてはあまり詳しくありません)。だから助けが必要です。
質問:
なぜ古いカーネルをアンインストールできないのですか
dpkg
?その質問が直接解決できない場合、最終的に私が知りたいのは次のことだと思います。新しいパッケージを再度インストールできる状態にするには、何をする必要がありますか?
私が試した他のもの:
sudo apt-get autoremove
: 満たされていない依存関係に関する元のエラーが発生しますsudo apt-get -f autoremove
: 結果:
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-generic' から抽出したデータを '/boot/vmlinuz-3.16.0-70-generic.dpkg-new' にコピーできません: 書き込みに失敗しました (デバイスに空き容量がありません) エラーメッセージにディスクがいっぱいのエラーが示されているため、apport レポートは書き込まれません dpkg-deb: エラー: サブプロセス paste がシグナルによって強制終了されました (パイプが壊れています) /etc/kernel/postrm.d を調べています。 run-parts: /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 スタック エクスチェンジ」
答え1
現在実行中のカーネルを表示するために使用しますuname -r
。このバージョン番号のものは削除しないでください。
カーネルがどのパッケージ/boot
に属しているかを確認できます。
for i in /boot/vmlinuz* ; do
dpkg -S $i| egrep -v $(uname -r)
done
これらのパッケージを削除するにはsudo apt-get purge
パッケージ名 ...。
同じバージョン番号を持つ他のパッケージを探すことで、削除するカーネルに関連する他のパッケージを見つけることができます。
バージョン番号を抽出するには:
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
現在のカーネル以外のすべてのカーネルと、削除されたカーネルとバージョンが一致するすべてのパッケージの削除を自動化するには(デンジャー、ウィル・ロビンソン):
追加するだけ
| awk '{print $2}' | xargs sudo apt-get --dry-run purge
を前のコード フラグメントに追加します。目的の動作が確実に実行されたら、 を削除します--dry-run
。
がいっぱいでパッケージを削除できない場合は、最も古いファイルを削除して/boot
空き容量を確保できます。/boot
/boot/initrd.img*