我正在運行 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
狀態(需要清除,狀態是根據安裝的這)
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」:寫入失敗(裝置上沒有剩餘空間) 未寫入批准報告,因為錯誤訊息指示磁碟已滿錯誤 dpkg-deb:錯誤:子程序貼上被訊號終止(管道損壞) 檢查 /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*
檔案來騰出一些空間,