На этот вопрос уже есть ответ:
Я использую 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 | хвост -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
Garrg! Я на грани своего остроумия и не в себе (на самом деле мало что знаю о dpkg или apt-get), поэтому мне нужна помощь.
Вопросы:
Почему я не могу удалить старые ядра с помощью dpkg
?
Если этот вопрос не может быть решен напрямую, я думаю, в конечном итоге я хочу знать: Что мне нужно сделать, чтобы снова установить новые пакеты?
Другие вещи, которые я пробовал :
sudo apt-get autoremove
: приводит к исходной ошибке о неудовлетворении dependencies sudo apt-get -f autoremove
: приводит к: Unpacking linux-image-3.16.0-70-generic (3.16.0-70.90~14.04.1) ... dpkg: error processing archive /var/cache/apt/archives/linux-image-3.16.0-70-generic_3.16.0-70.90~14.04.1_amd64.deb (--unpack): cannot copy extracted data for './boot/vmlinuz-3.16.0-70-generic' to '/boot/vmlinuz-3.16.0-70-generic.dpkg-new': failed to write (No space left on device) No apport report written because the error message indicates a disk full error dpkg-deb: error: subprocess paste was killed by signal (Broken pipe) Examining /etc/kernel/postrm.d . run-parts: executing /etc/kernel/postrm.d/initramfs-tools 3.16.0-70-generic /boot/vmlinuz-3.16.0-70-generic run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.16.0-70-generic /boot/vmlinuz-3.16.0-70-generic Errors were encountered while processing: /var/cache/apt/archives/linux-image-3.16.0-70-generic_3.16.0-70.90~14.04.1_amd64.deb E: Sub-process /usr/bin/dpkg returned an error code (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
Для автоматизации удаления всех ядер кроме текущего ядра и всех пакетов, версии которых соответствуют удаленным ядрам ( Опасность, Wil Robinson ):
Просто добавляют
| awk '{print $2}' | xargs sudo apt-get --dry-run purge
к предыдущему фрагменту кода. Когда Вы уверены, что это делает то, что Вы хотите, удаляете --dry-run
.
, Если Ваш /boot
так полно, что Вы не можете удалить пакеты, можно сделать некоторое пространство на /boot
путем удаления самого старого /boot/initrd.img*
файл,