Как работает apt-get purge? Почему не удалось удалить сломанную упаковку за один проход?
Я попытался установить droidcam, чтобы решить другой вопрос, следуя инструкции ниже: Установите клиент DroidCam (беспроводная веб-камера Android) в Ubuntu через PPA.
Установка завершается с ошибкой после сценария, полный журнал находится здесь.
Теперь я хочу очистить его и полностью удалить. Итак, я бегу sudo apt-get purge droidcam
, Но я был удивлен, что мне нужно запустить его 3 раза, чтобы полностью очистить его установку.
$ sudo apt-get purge droidcam
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
linux-headers-3.19.0-15 linux-headers-3.19.0-15-generic linux-image-3.19.0-15-generic linux-image-extra-3.19.0-15-generic
Use 'apt-get autoremove' to remove them.
The following packages will be REMOVED:
droidcam*
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
1 not fully installed or removed.
After this operation, 1,529 kB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 239094 files and directories currently installed.)
Removing droidcam (1.3-0ubuntu0) ...
rmmod: ERROR: Module v4l2loopback_dc is not currently loaded
dpkg: error processing package droidcam (--purge):
subprocess installed post-removal script returned error exit status 1
Processing triggers for gnome-menus (3.10.1-0ubuntu5) ...
Processing triggers for bamfdaemon (0.5.1+15.04.20150202-0ubuntu1) ...
Rebuilding /usr/share/applications/bamf-2.index...
Processing triggers for desktop-file-utils (0.22-1ubuntu3) ...
Processing triggers for mime-support (3.58ubuntu1) ...
Processing triggers for hicolor-icon-theme (0.14-0ubuntu1) ...
Errors were encountered while processing:
droidcam
E: Sub-process /usr/bin/dpkg returned an error code (1)
$ sudo apt-get purge droidcam
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
linux-headers-3.19.0-15 linux-headers-3.19.0-15-generic linux-image-3.19.0-15-generic linux-image-extra-3.19.0-15-generic
Use 'apt-get autoremove' to remove them.
The following packages will be REMOVED:
droidcam
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
1 not fully installed or removed.
After this operation, 1,529 kB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 239088 files and directories currently installed.)
Removing droidcam (1.3-0ubuntu0) ...
$ sudo apt-get purge droidcam
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
linux-headers-3.19.0-15 linux-headers-3.19.0-15-generic linux-image-3.19.0-15-generic linux-image-extra-3.19.0-15-generic
Use 'apt-get autoremove' to remove them.
The following packages will be REMOVED:
droidcam*
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] y
(Reading database ... 239087 files and directories currently installed.)
Removing droidcam (1.3-0ubuntu0) ...
Purging configuration files for droidcam (1.3-0ubuntu0) ...
dpkg: warning: while removing droidcam, directory '/opt' not empty so not removed
$ sudo apt-get purge droidcam
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package 'droidcam' is not installed, so not removed
The following packages were automatically installed and are no longer required:
linux-headers-3.19.0-15 linux-headers-3.19.0-15-generic linux-image-3.19.0-15-generic linux-image-extra-3.19.0-15-generic
Use 'apt-get autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Что я хочу знать:
- Почему мне нужно запустить его несколько раз?
- Как
apt-get purge work
? Хотя яapt-get purge
удалит все установленные файлы за один проход.
Мое первое ожидание, может быть, droidcam не очень хорошо упакован.
1 ответ
Этот и многие другие пакеты имеют проблемы, которые необходимо удалить после проблем во время установки. Мое решение, если скрипт не удается, посмотрите в папку /var/lib/dpkg/info/
, Есть четыре типа сценариев
package_name.preinst
- предустановочный скриптpackage_name.postinst
- скрипт после установкиpackage_name.prerm
- скрипт предварительного удаленияpackage_name.postrm
- скрипт после удаления
Посмотрите на сценарии: обычно очень легко сразу найти проблему. Часто это просто служба, которую нельзя запустить или остановить. Или, как в вашем случае, ненагруженный модуль. Если вы хотите удалить только пакет, удалите нарушающий код и начните удаление снова.
В очень проблемных случаях Иногда единственный способ удалить весь скрипт до строки exit 0
в настоящее время, например, nginx
:(
И, как говорит kos, удалите строку set -e
, Но я никогда не проверял.
И начать петицию для более надежных сценариев =)
Некоторые примеры
Как я могу удалить dpkg, поврежденный драйвером Brother MFC-8840 deb?