apt-get autoremove не хочет ничего удалять

Knoppix

Модераторы: Warderer, Модераторы разделов

Аватара пользователя
sgfault
Сообщения: 586
Статус: -

apt-get autoremove не хочет ничего удалять

Сообщение sgfault »

У меня был установлен пакет 'xserver-xorg-video-all', который притащил с собой много всякого

Код: Выделить всё

root@shilvana:~# apt-cache depends 'xserver-xorg-video-all'
xserver-xorg-video-all
  Depends: xserver-xorg-video-apm
  Depends: xserver-xorg-video-ark
  Depends: xserver-xorg-video-ati
  Depends: xserver-xorg-video-chips
  Depends: xserver-xorg-video-cirrus
  Depends: xserver-xorg-video-fbdev
  Depends: xserver-xorg-video-geode
  Depends: xserver-xorg-video-i128
  Depends: xserver-xorg-video-i740
  Depends: xserver-xorg-video-intel
  Depends: xserver-xorg-video-mga
  Depends: xserver-xorg-video-neomagic
  Depends: xserver-xorg-video-nouveau
  Depends: xserver-xorg-video-nv
  Depends: xserver-xorg-video-rendition
  Depends: xserver-xorg-video-s3
  Depends: xserver-xorg-video-s3virge
  Depends: xserver-xorg-video-savage
  Depends: xserver-xorg-video-siliconmotion
  Depends: xserver-xorg-video-sis
  Depends: xserver-xorg-video-sisusb
  Depends: xserver-xorg-video-tdfx
  Depends: xserver-xorg-video-trident
  Depends: xserver-xorg-video-tseng
  Depends: xserver-xorg-video-vesa
  Depends: xserver-xorg-video-openchrome
  Depends: xserver-xorg-video-voodoo
  Depends: xserver-xorg-video-vmware
  Conflicts: <xserver-xorg-driver-all>
  Replaces: <xserver-xorg-driver-all>

, но теперь я его стер

Код: Выделить всё

root@shilvana:~# dpkg -l '*xorg-video-all'
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                                          Version                                       Description
+++-=============================================-=============================================-================================================================================
==========================
un  xserver-xorg-video-all                        <none>                                        (no description available)

и хочу соответственно стереть все ненужное, что он за собой притащил.

Рассмортим, например, 'xserver-xorg-video-mga'. Он сейчас установлен

Код: Выделить всё

root@shilvana:~# dpkg -l '*xorg-video-mga'
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                                          Version                                       Description
+++-=============================================-=============================================-================================================================================
==========================
ii  xserver-xorg-video-mga                        1:1.4.11.dfsg-4+squeeze1                      X.Org X server -- MGA display driver


но пакетов, зависящих от него уже нету

Код: Выделить всё

root@shilvana:~# apt-cache rdepends 'xserver-xorg-video-mga'
xserver-xorg-video-mga
Reverse Depends:
  xserver-xorg-video-all
  xserver-xorg-video-all

и он отмечен, как установленный автоматически

Код: Выделить всё

root@shilvana:~# grep -A2 -e'xserver-xorg-video-mga' /var/lib/apt/extended_states
Package: xserver-xorg-video-mga
Architecture: i386
Auto-Installed: 1

Те, насколько я понимаю, все условия, чтобы он был удален командой 'apt-get autoremove' выполнены, но

Код: Выделить всё

root@shilvana:~# apt-get autoremove
Reading package lists... Done
Building dependency tree
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.


Где же я ошибся?

ЗЫ. debian squeeze,

Код: Выделить всё

root@shilvana:~# apt-get  --version
apt 0.8.10.3 for i386 compiled on Apr 15 2011 21:02:20
Supported modules:
*Ver: Standard .deb
*Pkg:  Debian dpkg interface (Priority 30)
 S.L: 'deb' Standard Debian binary tree
 S.L: 'deb-src' Standard Debian source tree
 Idx: Debian Source Index
 Idx: Debian Package Index
 Idx: Debian Translation Index
 Idx: Debian dpkg status file

Код: Выделить всё

root@shilvana:~# dpkg --version
Debian `dpkg' package management program version 1.15.8.11 (i386).
This is free software; see the GNU General Public License version 2 or
later for copying conditions. There is NO warranty.

Спасибо сказали:
Аватара пользователя
sgfault
Сообщения: 586
Статус: -

Re: apt-get autoremove не хочет ничего удалять

Сообщение sgfault »

Хм.. стоило мне написать, как тут нашлись некоторые недостающие части.

Включим debug

Код: Выделить всё

root@shilvana:~# cat /etc/apt/apt.conf.d/02debug
Debug {
    pkgAutoRemove   "true";
};

и попробуем еще раз

Код: Выделить всё

root@shilvana:~# apt-get autoremove 2>&1 | grep -ne'xserver-xorg-video-mga'
252:Auto-Installed : xserver-xorg-video-mga:i386
1470:AutoDep: xserver-xorg-video-mga:i386
11227:Following dep: xserver-xorg:i386 1:7.5+8 Depends xserver-xorg-video-6:i386 , provided by xserver-xorg-video-mga:i386 1:1.4.11.dfsg-4+squeeze1
11228:Marking: xserver-xorg-video-mga:i386 1:1.4.11.dfsg-4+squeeze1, Curr=1:1.4.11.dfsg-4+squeeze1, Inst=1:1.4.11.dfsg-4+squeeze1
11229:Following dep: xserver-xorg-video-mga:i386 1:1.4.11.dfsg-4+squeeze1 Depends libc6:i386 (>= 2.7)
11230:Following dep: xserver-xorg-video-mga:i386 1:1.4.11.dfsg-4+squeeze1 Depends libc6:i386 (>= 2.7)
11231:Following dep: xserver-xorg-video-mga:i386 1:1.4.11.dfsg-4+squeeze1 Depends libc6:i386 (>= 2.7)
11232:Following dep: xserver-xorg-video-mga:i386 1:1.4.11.dfsg-4+squeeze1 Depends xorg-video-abi-6.0:i386 , provided by xserver-xorg-core:i386 2:1.7.7-13
11233:Following dep: xserver-xorg-video-mga:i386 1:1.4.11.dfsg-4+squeeze1 Depends xserver-xorg-core:i386 (>= 2:1.7.6.901)
11234:Following dep: xserver-xorg-video-mga:i386 1:1.4.11.dfsg-4+squeeze1 Depends xserver-xorg-core:i386 (>= 2:1.7.6.901)
<..>

Фраза

Код: Выделить всё

Depends xserver-xorg-video-6:i386 , provided by xserver-xorg-video-mga:i386 1:1.4.11.dfsg-4+squeeze1

выглядит весьма интересно.

Посмотрим еще раз

Код: Выделить всё

root@shilvana:~# apt-cache show xserver-xorg-video-mga | grep Provides
Provides: xorg-driver-video, xserver-xorg-video-6

посмотрим, что такое 'xserver-xorg-video-6'

Код: Выделить всё

root@shilvana:~# apt-cache show xserver-xorg-video-6
N: Can't select versions from package 'xserver-xorg-video-6' as it purely virtual
N: No packages found

И теперь посмотрим, кто его использует

Код: Выделить всё

root@shilvana:~# apt-cache showpkg xserver-xorg-video-6 | grep -A5 'Reverse Depends'
Reverse Depends:
  xserver-xorg-core,xserver-xorg-video-6
  xserver-xorg,xserver-xorg-video-6
Dependencies:
Provides:

и остается последняя проверка

Код: Выделить всё

oot@shilvana:~# apt-cache depends xserver-xorg | grep video-6
  Depends: <xserver-xorg-video-6>


Те, я так понимаю, virtual 'xserver-xorg-video-6', который предоставляет (в том числе) пакет 'xserver-xorg-video-mga', используется пакетом 'xserver-xorg' и поэтому не может быть удален. Если мои рассуждения правильные, то можно считать это ответом на вопрос.

Вот только проблема-то по-существу осталась: как же стереть пакеты, установленные по зависимостям метапакета (metapackage), если все они предоставляеют используемый на данный момент virtual ? Предложения интересны были бы.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21422
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: apt-get autoremove не хочет ничего удалять

Сообщение Bizdelnick »

Вообще есть замечательная команда aptitude why, так что можно было и без всех этих бубнов обойтись.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
sgfault
Сообщения: 586
Статус: -

Re: apt-get autoremove не хочет ничего удалять

Сообщение sgfault »

Bizdelnick писал(а):
31.07.2011 17:59
Вообще есть замечательная команда aptitude why, так что можно было и без всех этих бубнов обойтись.

Спасибо, конечно, за совет, может когда и пригодится (если бубны не справятся, хотя это маловероятно), но эти бубны имеют свои преимущества. И в первую очередь - в надежности. Чего нельзя сказать, полистав багтрекер дебиана, об aptitude. Да и, вообще, не нравится мне aptitude -) Но, как бы там ни было, спор apt vs aptitude я продолжать не буду.

Ну, и все равно вне зависимости от того, каким способом был получен результат, проблема с удалением ненужных частей метапакета, которые по мнению apt используются, остается. Конечно, всегда остается вариант вручную, но это как-то. .не тру.

UPD. Ответ на следующий пост
Bizdelnick писал(а):
31.07.2011 18:35
sgfault писал(а):
31.07.2011 18:33
Но, как бы там ни было, спор apt vs aptitude я продолжать не буду.

А его кто-то начинал? (-:

Ну, пока что нет. Это я просто на всякий случай ^)
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21422
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: apt-get autoremove не хочет ничего удалять

Сообщение Bizdelnick »

sgfault писал(а):
31.07.2011 18:33
Но, как бы там ни было, спор apt vs aptitude я продолжать не буду.

А его кто-то начинал? (-:
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
sgfault
Сообщения: 586
Статус: -

Re: apt-get autoremove не хочет ничего удалять

Сообщение sgfault »

Итак, часть 3-я, заключительная.

Ничего хорошего я так и не придумал, кроме вот такой трехэтажной команды (может ее можно написать короче?):

Код: Выделить всё

        apt-cache depends xserver-xorg-video-all \
            | cut -d' ' -f4 \
            | xargs dpkg-query  -W -f='${Package} ${Status}\n' 2>/dev/null \
            | sed -ne'/install ok installed/s/ .*//p' \
            | xargs -L1 bash -c '
                                    echo "$1:";
                                    grep -w -A2 "$1" /var/lib/apt/extended_states \
                                            | grep "Auto-Installed: 1" \
                                        && apt-get -s purge "$1" \
                                        || echo "Not removing $1";
                                    echo;
                                    echo
                                ' bash


Вначале я ищу все зависимости метапакета, оставляю только имена, смотрю их статус и фильтрую только корректно установленные ('install ok installed'). Затем для каждого из них я проверяю установлен ли auto-installed флаг, и если да, то удаляю (точнее, чтобы эта команда и правда удалила, надо заменить у apt-get опцию '-s' на '--assume-yes').

На всякий случай: если кто-то захочет потестить, проверяйте вывод перед тем, как разрешить ей стирать на самом деле (особенно, какие еще пакеты будут удалены вместе с указанным ^).
Спасибо сказали: