SLEDopit писал(а): ↑12.09.2013 19:58
Rootlexx писал(а): ↑12.09.2013 19:37
aptitude, к слову, я тоже не рекомендовал бы пользоваться, но это уже другая история.
А что с ним не так?
Дело в том, что aptitude уже давно заброшен своим автором и долгое время никем толком не поддерживался, и в результате в нём
накопилось большое количество ошибок.
Решатель конфликтов ныне скорее предложит снести полсистемы, нежели обновить пару пакетов. Да, есть r и a, но даже с ними это уже не так просто [
1]. Пример:
Spoiler
Дано: Debian 8.0 (stable), KDE. Задача: обновить vlc из unstable.¹
Добавляем репозиторий unstable и выбираем stable основной веткой (чтобы ненароком не превратить всю систему в unstable):
root
root@debian:~# echo deb
http://httpredir.debian.org/debian/ unstable main >> /etc/apt/sources.list
root@debian:~# echo 'APT::Default-Release "stable";' > /etc/apt/apt.conf.d/dr.conf
root@debian:~# apt-get update
...
root@debian:~#
Попытаемся обновить vlc с помощью aptitude:
root
root@debian:~# aptitude install vlc/unstable
The following packages will be REMOVED:
libfreerdp-rail1.1{u} vlc-plugin-notify{u} vlc-plugin-samba{u}
The following packages will be upgraded:
vlc{b}
1 packages upgraded, 0 newly installed, 3 to remove and 17 not upgraded.
Need to get 1,466 kB of archives. After unpacking 276 kB will be freed.
The following packages have unmet dependencies:
vlc : Depends: vlc-nox (= 2.2.1-1+b1) but 2.2.0~rc2-2 is installed.
open: 102; closed: 161; defer: 26; conflict: 64 .The following actions will resolve these dependencies:
Remove the following packages:
1) akregator
2) apper
3) ark
4) dolphin
5) dragonplayer
6) gwenview
7) jovie
8) juk
9) k3b
10) k3b-i18n
11) kaccessible
12) kaddressbook
13) kate
14) kcalc
15) kde-baseapps
16) kde-baseapps-bin
17) kde-plasma-desktop
18) kde-runtime
19) kde-standard
20) kde-style-oxygen
21) kde-window-manager
22) kde-workspace
23) kde-workspace-bin
24) kdeaccessibility
25) kdepasswd
26) kdepim-kresources
27) kdepim-runtime
28) kdeplasma-addons
29) kdesudo
30) kdm
31) kfind
32) khelpcenter4
33) kinfocenter
34) klipper
35) kmag
36) kmail
37) kmenuedit
38) kmix
39) kmousetool
40) kmouth
41) knotes
42) konq-plugins
43) konqueror
44) konqueror-nsplugins
45) konsole
46) kopete
47) korganizer
48) kscreen
49) kscreensaver
50) ksnapshot
51) ksysguard
52) kwalletmanager
53) kwrite
54) libakonadi-calendar4
55) libakonadi-contact4
56) libcalendarsupport4
57) libeventviews4
58) libincidenceeditorsng4
59) libk3b6
60) libk3b6-extracodecs
61) libkateinterfaces4
62) libkcddb4
63) libkcompactdisc4
64) libkdepim4
65) libkdepimdbusinterfaces4
66) libkonq-common
67) libkonq5abi1
68) libkopete4
69) libksieveui4
70) libmailcommon4
71) libmailimporter4
72) libmarblewidget19
73) libmessagecomposer4
74) libmessagecore4
75) libmessagelist4
76) libmessageviewer4
77) libnoteshared4
78) libokularcore5
79) libpimcommon4
80) libreoffice-kde
81) libsmokekdecore4-3
82) libsmokekdeui4-3
83) libsmokekfile3
84) libsmokekhtml3
85) libsmokekio3
86) libsmokeknewstuff2-3
87) libsmokeknewstuff3-3
88) libsmokekparts3
89) libsmokektexteditor3
90) libsmokekutils3
91) libsmokeplasma3
92) libtemplateparser4
93) marble-plugins
94) okular
95) phonon
96) phonon-backend-vlc
97) plasma-dataengines-workspace
98) plasma-desktop
99) plasma-nm
100 plasma-runners-addons
101 plasma-scriptengine-python
102 plasma-scriptengine-ruby
103 plasma-scriptengine-superkaramba
104 plasma-scriptengines
105 plasma-wallpapers-addons
106 plasma-widget-folderview
107 plasma-widget-lancelot
108 plasma-widget-networkmanagement
109 plasma-widgets-addons
110 plasma-widgets-workspace
111 polkit-kde-1
112 python-kde4
113 python3-pykde4
114 qapt-batch
115 ruby-kde4
116 ruby-plasma
117 software-properties-kde
118 sweeper
119 systemsettings
120 task-kde-desktop
121 vlc
122 vlc-plugin-pulse
Leave the following dependencies unresolved:
123 konqueror recommends dolphin
124 konqueror recommends kfind
125 kdm recommends kde-workspace | x-session-manager | x-window-manager
126 plasma-desktop recommends kde-workspace
127 kdelibs5-plugins recommends kde-runtime
128 kscreensaver recommends kde-window-manager
129 korganizer recommends kdepim-kresources
130 plasma-widgets-addons recommends plasma-widget-lancelot
131 libkopete4 recommends kopete (= 4:4.14.1-2)
132 kde-plasma-desktop recommends kdm (>= 4:4.11.3)
133 kde-standard recommends konq-plugins (>= 4:4.11.3)
134 phonon-backend-vlc recommends vlc
135 plasma-nm recommends kwalletmanager
136 task-desktop recommends task-gnome-desktop | task-xfce-desktop | task-kd
137 task-kde-desktop recommends kdeaccessibility
138 task-kde-desktop recommends k3b
139 task-kde-desktop recommends k3b-i18n
140 task-kde-desktop recommends plasma-widget-networkmanagement
141 task-kde-desktop recommends kdesudo
142 task-kde-desktop recommends apper
Accept this solution? [Y/n/q/?]
То есть для установки новой версии vlc aptitude ничтоже сумняшеся предлагает
удалить vlc, а заодно и полсистемы.
Хорошо, давайте укажем aptitude, что удалять vlc нельзя:
root
Accept this solution? [Y/n/q/?] r 121
...
Accept this solution? [Y/n/q/?] n
The following actions will resolve these dependencies:
Keep the following packages at their current version:
1) libfreerdp-rail1.1 [1.1.0~git20140921.1.440916e+dfsg1-4 (now, stable, uns
2) vlc [2.2.0~rc2-2 (now, stable)]
3) vlc-plugin-samba [2.2.0~rc2-2 (now, stable)]
Leave the following dependencies unresolved:
4) vlc recommends vlc-plugin-notify (= 2.2.0~rc2-2)
Accept this solution? [Y/n/q/?]
Теперь aptitude предлагает ничего не делать вместо запрошенного обновления vlc.
Ладно, давайте напомним aptitude, что оставление текущей версии vlc нас не устраивает:
root
Accept this solution? [Y/n/q/?] r 2
...
Accept this solution? [Y/n/q/?] n
The following actions will resolve these dependencies:
Install the following packages:
1) libx265-51 [1.6-1 (unstable)]
Upgrade the following packages:
2) vlc-nox [2.2.0~rc2-2 (now, stable) -> 2.2.1-1+b1 (unstable)]
Accept this solution? [Y/n/q/?]
Вот, наконец вроде вменяемое решение. Соглашаемся и...
root
Accept this solution? [Y/n/q/?] y
The following NEW packages will be installed:
libx265-51{a}
The following packages will be REMOVED:
libfreerdp-rail1.1{u} vlc-plugin-notify{u} vlc-plugin-samba{u}
The following packages will be upgraded:
vlc vlc-nox
2 packages upgraded, 1 newly installed, 3 to remove and 17 not upgraded.
Need to get 4,290 kB of archives. After unpacking 1,315 kB will be used.
Do you want to continue? [Y/n/?]
Что? Почему удалить vlc-plugin-notify и vlc-plugin-samba? Не надо:
root
Do you want to continue? [Y/n/?] +vlc-plugin-notify vlc-plugin-samba
The following NEW packages will be installed:
libx265-51{a}
The following packages will be REMOVED:
libfreerdp-rail1.1{u}
The following packages will be upgraded:
vlc vlc-nox
2 packages upgraded, 1 newly installed, 1 to remove and 17 not upgraded.
Need to get 4,290 kB of archives. After unpacking 1,341 kB will be used.
The following packages have unmet dependencies:
vlc-plugin-samba : Depends: vlc-nox (= 2.2.0~rc2-2) but 2.2.1-1+b1 is to be installed.
vlc-plugin-notify : Depends: vlc-nox (= 2.2.0~rc2-2) but 2.2.1-1+b1 is to be installed.
The following actions will resolve these dependencies:
Remove the following packages:
1) vlc-plugin-notify
2) vlc-plugin-samba
Accept this solution? [Y/n/q/?]
Опять двадцать пять... Снова укажем aptitude, что эти пакеты удалять не надо:
root
Accept this solution? [Y/n/q/?] r 1
...
Accept this solution? [Y/n/q/?] r 2
...
Accept this solution? [Y/n/q/?] n
The following actions will resolve these dependencies:
Remove the following packages:
1) akregator
2) apper
3) ark
4) dolphin
5) dragonplayer
6) gwenview
7) jovie
8) juk
9) k3b
10) k3b-i18n
11) kaccessible
12) kaddressbook
13) kate
14) kcalc
15) kde-baseapps
16) kde-baseapps-bin
17) kde-plasma-desktop
18) kde-runtime
19) kde-standard
20) kde-style-oxygen
21) kde-window-manager
22) kde-workspace
23) kde-workspace-bin
24) kdeaccessibility
25) kdepasswd
26) kdepim-kresources
27) kdepim-runtime
28) kdeplasma-addons
29) kdesudo
30) kdm
31) kfind
32) khelpcenter4
33) kinfocenter
34) klipper
35) kmag
36) kmail
37) kmenuedit
38) kmix
39) kmousetool
40) kmouth
41) knotes
42) konq-plugins
43) konqueror
44) konqueror-nsplugins
45) konsole
46) kopete
47) korganizer
48) kscreen
49) kscreensaver
50) ksnapshot
51) ksysguard
52) kwalletmanager
53) kwrite
54) libakonadi-calendar4
55) libakonadi-contact4
56) libcalendarsupport4
57) libeventviews4
58) libincidenceeditorsng4
59) libk3b6
60) libk3b6-extracodecs
61) libkateinterfaces4
62) libkcddb4
63) libkcompactdisc4
64) libkdepim4
65) libkdepimdbusinterfaces4
66) libkonq-common
67) libkonq5abi1
68) libkopete4
69) libksieveui4
70) libmailcommon4
71) libmailimporter4
72) libmarblewidget19
73) libmessagecomposer4
74) libmessagecore4
75) libmessagelist4
76) libmessageviewer4
77) libnoteshared4
78) libokularcore5
79) libpimcommon4
80) libreoffice-kde
81) libsmokekdecore4-3
82) libsmokekdeui4-3
83) libsmokekfile3
84) libsmokekhtml3
85) libsmokekio3
86) libsmokeknewstuff2-3
87) libsmokeknewstuff3-3
88) libsmokekparts3
89) libsmokektexteditor3
90) libsmokekutils3
91) libsmokeplasma3
92) libtemplateparser4
93) marble-plugins
94) okular
95) phonon
96) phonon-backend-vlc
97) plasma-dataengines-workspace
98) plasma-desktop
99) plasma-nm
100 plasma-runners-addons
101 plasma-scriptengine-python
102 plasma-scriptengine-ruby
103 plasma-scriptengine-superkaramba
104 plasma-scriptengines
105 plasma-wallpapers-addons
106 plasma-widget-folderview
107 plasma-widget-lancelot
108 plasma-widget-networkmanagement
109 plasma-widgets-addons
110 plasma-widgets-workspace
111 polkit-kde-1
112 python-kde4
113 python3-pykde4
114 qapt-batch
115 ruby-kde4
116 ruby-plasma
117 software-properties-kde
118 sweeper
119 systemsettings
120 task-kde-desktop
121 vlc
122 vlc-plugin-pulse
Install the following packages:
123 wm2 [4+svn20090216-3 (stable, unstable)]
Keep the following packages at their current version:
124 vlc-nox [2.2.0~rc2-2 (now, stable)]
Leave the following dependencies unresolved:
125 konqueror recommends dolphin
126 konqueror recommends kfind
127 plasma-desktop recommends kde-workspace
128 kdelibs5-plugins recommends kde-runtime
129 kscreensaver recommends kde-window-manager
130 korganizer recommends kdepim-kresources
131 plasma-widgets-addons recommends plasma-widget-lancelot
132 libkopete4 recommends kopete (= 4:4.14.1-2)
133 kde-plasma-desktop recommends kdm (>= 4:4.11.3)
134 kde-standard recommends konq-plugins (>= 4:4.11.3)
135 phonon-backend-vlc recommends vlc
136 plasma-nm recommends kwalletmanager
137 task-desktop recommends task-gnome-desktop | task-xfce-desktop | task-kd
138 task-kde-desktop recommends kdeaccessibility
139 task-kde-desktop recommends k3b
140 task-kde-desktop recommends k3b-i18n
141 task-kde-desktop recommends plasma-widget-networkmanagement
142 task-kde-desktop recommends kdesudo
143 task-kde-desktop recommends apper
Accept this solution? [Y/n/q/?]
Что?! Опять предлагается удалить vlc и полсистемы впридачу?!
Для сравнения:
root
root@debian:~# apt-get install vlc/unstable
Reading package lists... Done
Building dependency tree
Reading state information... Done
Selected version '2.2.1-1+b1' (Debian:unstable [i386]) for 'vlc'
Selected version '2.2.1-1+b1' (Debian:unstable [i386]) for 'vlc-nox' because of 'vlc'
Selected version '2.2.1-1+b1' (Debian:unstable [i386]) for 'vlc-plugin-notify' because of 'vlc'
Selected version '2.2.1-1+b1' (Debian:unstable [i386]) for 'vlc-plugin-samba' because of 'vlc'
The following package was automatically installed and is no longer required:
libfreerdp-rail1.1
Use 'apt-get autoremove' to remove it.
The following extra packages will be installed:
libx265-51 vlc-nox vlc-plugin-notify vlc-plugin-samba
Suggested packages:
libx265-51-dbg videolan-doc libdvdcss2
The following NEW packages will be installed:
libx265-51
The following packages will be upgraded:
vlc vlc-nox vlc-plugin-notify vlc-plugin-samba
4 upgraded, 1 newly installed, 0 to remove and 17 not upgraded.
Need to get 4,301 kB of archives.
After this operation, 1,595 kB of additional disk space will be used.
Do you want to continue? [Y/n]
Сразу получили самое адекватное решение: сделать то, что просят, и обновить то, что нужно.
¹ Примечание: описанное поведение наблюдалось на момент выхода Debian 8.0. Через некоторое время в unstable произошёл переход на libstdc++ из состава GCC 5, в связи с чем обновление vlc из unstable без удаления значительной части KDE стало невозможным.
И это ещё не самое плохое. Самое плохое впереди.
aptitude приобрёл склонность "забывать" флаг "установлен автоматически". Причём это наблюдалось ещё в squeeze [
2]. (Я лично испытал это на себе, когда заметил исчезновение этого флага с нескольких десятков пакетов, включая библиотеки xine и hal - в результате после обновления до wheezy эти более не нужные ни одной программе пакеты остались висеть в системе мёртвым грузом.) А в wheezy эта проблема только стала масштабнее (и всё ещё присутствует в jessie). Пример:
Spoiler
Установим какой-нибудь пакет:
root
root@debian:~# apt-get install extremetuxracer
...
The following extra packages will be installed:
extremetuxracer-data extremetuxracer-extras libmikmod2 libsdl-mixer1.2
tcl8.5
...
Do you want to continue [Y/n]? y
...
root@debian:~#
Как видим, для разрешения зависимостей было автоматически установлено несколько дополнительных пакетов. Проверим с помощью aptitude, что они получили флаг "установлен автоматически":
root
root@debian:~# aptitude show extremetuxracer-data | grep Auto
Automatically installed: yes
root@debian:~#
Отлично, проверим ещё раз:
root
root@debian:~# aptitude show extremetuxracer-data | grep Auto
Automatically installed: yes
root@debian:~#
Никаких изменений. Пока что всё хорошо.
Теперь удалим только что установленный пакет:
root
root@debian:~# apt-get remove extremetuxracer
...
The following packages were automatically installed and are no longer required:
extremetuxracer-data extremetuxracer-extras libmikmod2 libsdl-mixer1.2
tcl8.5
Use 'apt-get autoremove' to remove them.
The following packages will be REMOVED:
extremetuxracer
...
Do you want to continue [Y/n]? y
...
root@debian:~#
Убедимся, что установленные ранее дополнительные пакеты встали в очередь на удаление (но не будем их удалять):
root
root@debian:~# apt-get autoremove
...
The following packages will be REMOVED:
extremetuxracer-data extremetuxracer-extras libmikmod2 libsdl-mixer1.2
tcl8.5
...
Do you want to continue [Y/n]? n
Abort.
root@debian:~#
Снова проверим наличие флага "установлен автоматически":
root
root@debian:~# aptitude show extremetuxracer-data | grep Auto
Automatically installed: yes
root@debian:~#
Отлично, проверим ещё раз:
root
root@debian:~# aptitude show extremetuxracer-data | grep Auto
Automatically installed: no
root@debian:~#
Что?! Флаг "установлен автоматически" пропал?! Убедимся, что это так:
root
root@debian:~# apt-get autoremove
Reading package lists... Done
Building dependency tree
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 114 not upgraded.
root@debian:~#
Выходит, команда
aptitude show, которая по определению должна лишь выводить информацию о пакете, изменила его состояние! Причём флаг "установлен автоматически" был снят со всех установленных ранее дополнительных пакетов, а не только с того, информацию о котором мы просматривали!
На эту тему отправлено множество отчётов [
3], но воз и ныне там. Уверен, если внимательно просмотреть список по команде
apt-mark showmanual, можно найти ещё примеры.
Что касается функциональности, то раньше aptitude выгодно выделялась как раз умением запоминать автоматически установленные пакеты и удалять их, если они более не нужны, а также устанавливать те самые рекомендованные пакеты. Но apt-get уже давно всё это умеет, причём без подобных неприятностей. Да и его простой решатель, как я уже показал выше, часто выдаёт результаты, значительно более вменяемые, чем aptitude.
Если помните, aptitude в своё время рекомендовалась для всех операций с пакетами, включая даже обновление на новый выпуск. Но из-за неоднозначности её решателя конфликтов, а также из-за улучшения работы apt-get, для данной операции стал рекомендоваться последний [
4]. А с августа 2010 года именно apt-get, а не aptitude, является рекомендованной программой для установки, удаления и вообще всех операций с пакетами [
5], что находит своё подтверждение в
официальной документации, где сказано буквально следующее:
Currently, we recommend the following.
- apt-get(8) for all commandline operations, including package installation and removal, and dist-upgrades.
Более того, пакеты, ранее использовавшие aptitude (например, tasksel), были переведены на использование apt-get, а сама aptitude была исключена из базовой системы понижением приоритета до standard [
6].
Кроме того, судя по
статистике popcon, сами пользователи Debian в основном используют apt-get, а не aptitude.
Так что, подытоживая, рекомендую пользоваться aptitude лишь в случаях крайней необходимости, а в остальных - старым-добрым надёжным apt-get.
Обновление от 24.06.2017:
Версия aptitude 0.8.7 в stretch, похоже, излечилась от проблем с "забыванием" флага "установлен автоматически". По крайней мере, мне воспроизвести эту ошибку более не удаётся. Однако, проблема с неадекватными вариантами разрешения зависимостей осталась. Поэтому я снимаю свою рекомендацию не использовать aptitude для управления пакетами, но продолжаю использовать и рекомендовать apt.