28 декабря 2009 г.

Надпакеты

Вступление
Один из первых вопросов, которые задают люди, увидев Ubuntu - "А чем отличаются Ubuntu, Kubuntu, Xubuntu, ... ***buntu?". Как-то неудобно сразу рассказывать им про DE, WM и прочие тонкости пользовательского интерфейса, но до недавнего времени я и сам до конца не знал, какая между ними разница. Теперь знаю и с гордостью сообщаю вам: никакой!

Вступление №2
Как вы могли заметить, я ругал debian и его потомков за отсутствие нормального управления зависимостями. И ярчайшим примером здесь служил такой - "а вот как мне от новой убунты оторвать GNOME и установить KDE? Да так, чтоб не осталось гномовского мусора, а получилась kubuntu." Решение удалить пакет ubuntu-desktop и установить kubuntu-desktop не прокатывало, так как после удаления ubuntu-desktop ничего из системы не исчезало - ни гном, ни его свита.
И вот, однажды вечером, когда я находился вдали от дома, пишущего дисковода и нормального интернета, возникла необходимость проинсталлировать сервер. Ну, то есть систему без свистелок и перделок. А под рукой были только фирменные Ubuntu 9.10 и Kubuntu той же версии. Не буду описывать все мои телодвижения, а изложу полезные моменты, найденные в сети и испытанные на практике.

Выше я уже упоминал странные названия ubuntu-desktop и kubuntu-desktop. Для тех, кто не совсем понял, о чём это я, поясню. Это метапакеты. Сами они не содержат ни единого файла для установки в систему. Зато в зависимостях имеют тематические наборы обычных пакетов. Как понятно из названий, этим двум пакетам соответствуют наборы, реализующие рабочий стол для Ubuntu или Kubuntu. Для примера, помотрим, какие пакеты "тянет" за собой ubuntu-desktop:

boh@nout:~$ sudo aptitude show ubuntu-desktop
[sudo] password for boh:
Пакет: ubuntu-desktop
Состояние: не установлен
Версия: 1.175
Приоритет: необязательный
Раздел: metapackages
Сопровождающий: Matt Zimmerman
Размер в распакованном виде: 57,3k
Зависимости: alacarte, alsa-base, alsa-utils, anacron, bc, ca-certificates,
checkbox-gtk, consolekit, cups, cups-bsd, cups-client,
cups-driver-gutenprint, dc, dcraw, desktop-file-utils,
doc-base, eog, evince, file-roller, foomatic-db,
foomatic-db-engine, foomatic-filters, gcalctool,
gconf-editor, gdebi, gdm, gedit, genisoimage,
ghostscript-x, gnome-about, gnome-applets,
gnome-control-center, gnome-icon-theme, gnome-media,
gnome-menus, gnome-nettool, gnome-panel,
gnome-power-manager, gnome-session,
gnome-session-canberra, gnome-system-monitor,
gnome-system-tools, gnome-terminal,
gnome-themes-selected, gnome-themes-ubuntu, gnome-utils,
gstreamer0.10-alsa, gstreamer0.10-plugins-base-apps,
gstreamer0.10-pulseaudio, gtk2-engines,
gtk2-engines-pixbuf, gucharmap,
indicator-applet-session, inputattach,
language-selector, launchpad-integration, lftp,
libgd2-xpm, libgl1-mesa-glx, libgnome2-perl,
libpam-ck-connector, libsasl2-modules, libxp6, metacity,
nautilus, nautilus-sendto, notify-osd,
openprinting-ppds, pnm2ppa, pulseaudio,
pulseaudio-esound-compat, rarian-compat, screen,
screensaver-default-images, seahorse, smbclient,
software-center, software-properties-gtk, sreadahead,
ssh-askpass-gnome, synaptic,
system-config-printer-gnome, ttf-dejavu-core,
ttf-freefont, ubuntu-artwork, ubuntu-sounds, unzip,
update-manager, update-notifier, usplash,
usplash-theme-ubuntu, wireless-tools, wpasupplicant,
x-ttcidfont-conf, xdg-user-dirs, xdg-user-dirs-gtk,
xkb-data, xorg, xscreensaver-data, xscreensaver-gl,
xsplash, xterm, yelp, zenity, zip
Рекомендует: acpi-support, app-install-data-partner, apport-gtk, avahi-autoipd,
avahi-daemon, bluez-cups, bluez-utils, bogofilter,
brasero, brltty, brltty-x11, cdparanoia, compiz,
computer-janitor-gtk, dvd+rw-tools, empathy, espeak,
evolution, evolution-couchdb, evolution-exchange,
evolution-indicator, evolution-plugins,
evolution-webcal, example-content, f-spot, firefox,
firefox-gnome-support, foo2zjs, gcc, gdm-guest-session,
gimp, gnome-accessibility-themes, gnome-bluetooth,
gnome-codec-install, gnome-disk-utility, gnome-games,
gnome-mag, gnome-orca, gnome-screensaver,
gnome-user-guide, gvfs-fuse, hplip, ibus, ibus-gtk,
ibus-m17n, ibus-table, im-switch, indicator-messages,
jockey-gtk, kerneloops-daemon, laptop-detect,
libgl1-mesa-dri, libnss-mdns, libpam-gnome-keyring,
libwmf0.2-7-gtk, linux-headers-generic, make, min12xxw,
mousetweaks, nautilus-share, network-manager-gnome,
onboard, openoffice.org-calc, openoffice.org-gnome,
openoffice.org-help-en-us, openoffice.org-impress,
openoffice.org-math, openoffice.org-style-human,
openoffice.org-writer, pcmciautils,
pulseaudio-module-bluetooth, pulseaudio-module-gconf,
pulseaudio-module-x11, pxljr, rhythmbox,
speech-dispatcher, splix, telepathy-idle, tomboy, totem,
totem-mozilla, transmission-gtk, tsclient,
ttf-indic-fonts-core, ttf-kacst, ttf-lao, ttf-thai-tlwg,
ttf-unfonts-core, ttf-vlgothic, ttf-wqy-zenhei, ubufox,
ubuntu-docs, ubuntuone-client-gnome, usb-creator-gtk,
vinagre, vino, wodim, xcursor-themes, xdg-utils, xsane

Сайт ubuntu имеет специальную страницу, где описаны все основные метапакеты системы.

Кульминация
У вас должен появиться закономерный вопрос - "Если всё так хорошо, то почему же возникают проблемы с удалением зависимостей ubuntu-desktop?". Дело в том, что в Ubuntu есть некие флаги, которые присваиваются пакетам. В частности, тем пакетам, которые apt установил по зависимостям, присваивается флаг auto. В случае удаления их "потребителя" они тоже будут номинированы на удаление. Если же мы ставим пакет вручную (например через Synaptic), флага auto он иметь не будет, а значит, всю ответственность за его судьбу система перекладывает на нас. Казалось бы, система хороша. Даже похожа на Gentoo с её миром (/var/lib/portage/world). Только вот разработчики решили, что их ubuntu-desktop очень важен любому пользователю. Поэтому, ВСЕ пакеты, которые попали в систему при её установке (а это и ubuntu-desktop со своими зависимостями), флага auto НЕ ИМЕЮТ. Поэтому поведение менеджера пакетов при удалении метапакета ubuntu-desktop вполне логично - "вы ставили, вы и разгребайте!". Если, например, подобным образом установить kubuntu-desktop, а потом его удалить, то все его зависимости нормально удалятся.

Развязка
И здесь на сцену выходит звезда - пакет debfoster. Он мастерски находит пакеты установленные по зависимости для других пакетов и проходит по этим "помещикам", предлагая удалить их со всеми их "крепостными" или без.
Приведу пример своей системы. Как можно заметить из прошлого листинга, вместо гнома я уже установил KDE4. Так вот, если теперь запустить debfoster, первым и наиболее "зажиточным" кандидатом станет метапакет kubuntu-desktop.

boh@nout:~$ sudo debfoster
[sudo] password for boh:

kubuntu-desktop is keeping the following 397 packages installed:
acpi-support acpid akonadi-server akregator alsa-base alsa-utils amarok
amarok-common amarok-utils anacron app-install-data apport apport-kde
apport-symptoms apt-xapian-index apturl-common apturl-kde ark avahi-autoipd
avahi-daemon bc bcmwl-modaliases bluetooth bluez bluez-alsa bluez-cups
bluez-gstreamer bluez-utils bogofilter bogofilter-bdb bogofilter-common
brltty byobu cdparanoia cdrdao cups cups-bsd cups-client cups-common
cups-driver-gutenprint dc dnsmasq-base dolphin dragonplayer dvd+rw-tools
ethtool fglrx-modaliases finger foo2zjs foomatic-db foomatic-db-engine
foomatic-db-gutenprint foomatic-filters gdb gdebi-core gdebi-kde
genisoimage ghostscript-cups gnupg-agent gtk2-engines-qtcurve gwenview
hpijs hpijs-ppds hplip hplip-data ibus-qt4 ijsgutenprint inputattach
install-package jockey-common jockey-kde k3b k3b-data kaddressbook kamera
kate kcm-gtk kde-style-qtcurve kde-window-manager kde-zeroconf kdebase-bin
kdebase-data kdebase-plasma kdebase-workspace-bin kdebase-workspace-data
kdebase-workspace-kgreet-plugins kdebase-workspace-libs4+5 kdebluetooth
kdegraphics-strigi-plugins kdemultimedia-kio-plugins kdepasswd
kdepim-groupware kdepim-kresources kdepim-runtime kdepim-runtime-data
kdepim-runtime-libs4 kdepim-strigi-plugins kdepim-wizards kdepimlibs-data
kdepimlibs5 kdesudo kdm kerneloops-daemon kfind kipi-plugins klipper kmag
kmail kmix kmousetool knotes konq-plugins konq-plugins-l10n konqueror
konqueror-nsplugins konqueror-plugin-searchbar konqueror-plugins konsole
kontact kopete korganizer kpackagekit kppp krdc krfb ksnapshot ksysguard
ksysguardd ksystemlog ktimetracker ktorrent ktorrent-data
kubuntu-artwork-usplash kubuntu-default-settings kubuntu-docs
kubuntu-firefox-installer kubuntu-konqueror-shortcuts kvkbd kwalletmanager
kwin-style-qtcurve language-selector-common language-selector-qt
laptop-mode-tools lftp libakonadiprivate1 libao2 libavahi-core6
libboost-program-options1.38.0 libbrlapi0.5 libcupscgi1 libcupsdriver1
libcupsmime1 libcupsppdc1 libdaemon0 libepub0 libfs6 libgpgme11
libgpod-common libgpod4 libgsl0ldbl libgutenprint2 libieee1284-3
libijs-0.35 libindicate-qt0 libiw29 libjpeg-progs libkabcommon4 libkdcraw7
libkdecorations4 libkdepim4 libkexiv2-7 libkipi6 libkleo4 libkonq5
libkonq5-templates libkonqsidebarplugin4 libkontactinterfaces4 libkopete4
libkorundum4-ruby1.8 libkpgp4 libksane0 libksieve4 libkwineffects1
liblancelot0 liblastfm0 libloudmouth1-0 libmimelib4 libmsn0.1 libmtp8
libnl1 libnm-glib2 libnm-util1 libnss-mdns libokularcore1 libotr2
libpackagekit-glib11 libpackagekit-qt11 libpcsclite1 libpoppler-qt4-3
libpth20 libqca2 libqca2-plugin-ossl libqimageblitz4 libqscintilla2-5
libqt4-assistant libqt4-help libqt4-ruby1.8 libqt4-scripttools
libqt4-sql-sqlite libqt4-test libqt4-xmlpatterns libqtscript4-core
libqtscript4-gui libqtscript4-network libqtscript4-sql libqtscript4-uitools
libqtscript4-xml libsane libscim8c2a libsensors3 libsmokekde4-2
libsmokeqt4-2 libsnmp-base libsnmp15 libstrigiqtdbusclient0 libtag-extras1
libtidy-0.99-0 libusplash0 libvncserver0 libwpg-0.1-1 libxkbfile1
libxklavier15 libzip1 linux-headers-2.6.31-17
linux-headers-2.6.31-17-generic linux-headers-generic linux-sound-base
lp-solve min12xxw modemmanager mscompress mtools mysql-server-core-5.1
network-manager nvidia-173-modaliases nvidia-185-modaliases
nvidia-96-modaliases nvidia-common okular okular-extra-backends
openoffice.org-calc openoffice.org-draw openoffice.org-impress
openoffice.org-kde openoffice.org-style-oxygen openprinting-ppds
oxygen-cursor-theme packagekit packagekit-backend-apt pcmciautils
pinentry-gtk2 pinentry-qt4 plasma-dataengines-addons
plasma-dataengines-workspace plasma-scriptengine-python
plasma-widget-facebook plasma-widget-folderview
plasma-widget-googlecalendar plasma-widget-indicatordisplay
plasma-widget-kimpanel plasma-widget-kubuntu-qa-feedback
plasma-widget-lancelot plasma-widget-networkmanagement
plasma-widget-quickaccess plasma-widgets-addons plasma-widgets-workspace
pnm2ppa policykit printer-applet pxljr python-apport python-cups
python-cupshelpers python-debian python-httplib2 python-imaging python-kde4
python-launchpadlib python-lazr-restfulclient python-lazr-uri python-newt
python-oauth python-packagekit python-pkg-resources python-problem-report
python-qt4 python-qt4-dbus python-simplejson python-sip4 python-smbc
python-software-properties python-wadllib python-xapian python-xkit
python-zope.interface quassel quassel-data rdesktop sane-utils screen
smbclient software-properties-kde speedcrunch splix ssl-cert syslinux
system-config-printer-common system-config-printer-kde
system-config-printer-udev systemsettings tcl8.4 tk8.4 toshset
ttf-arphic-uming ttf-freefont ttf-indic-fonts-core ttf-kacst ttf-lao
ttf-thai-tlwg ttf-unfonts-core ttf-vlgothic ttf-wqy-zenhei
unattended-upgrades update-manager-kde update-notifier-common
update-notifier-kde usb-creator-common usb-creator-kde userconfig usplash
wireless-tools wodim wpasupplicant x11-apps x11-session-utils x11-xfs-utils
x11-xkb-utils xcursor-themes xfonts-100dpi xfonts-75dpi xfonts-base
xfonts-scalable xinit xinput xorg xorg-docs-core xserver-common
xserver-xorg xserver-xorg-core xserver-xorg-input-all
xserver-xorg-input-evdev xserver-xorg-input-mouse
xserver-xorg-input-synaptics xserver-xorg-input-vmmouse
xserver-xorg-input-wacom xserver-xorg-video-all xserver-xorg-video-apm
xserver-xorg-video-ark xserver-xorg-video-ati xserver-xorg-video-chips
xserver-xorg-video-cirrus xserver-xorg-video-fbdev xserver-xorg-video-geode
xserver-xorg-video-i128 xserver-xorg-video-i740 xserver-xorg-video-intel
xserver-xorg-video-mach64 xserver-xorg-video-mga
xserver-xorg-video-neomagic xserver-xorg-video-nv
xserver-xorg-video-openchrome xserver-xorg-video-r128
xserver-xorg-video-radeon xserver-xorg-video-rendition
xserver-xorg-video-s3 xserver-xorg-video-s3virge xserver-xorg-video-savage
xserver-xorg-video-siliconmotion xserver-xorg-video-sis
xserver-xorg-video-sisusb xserver-xorg-video-tdfx
xserver-xorg-video-trident xserver-xorg-video-tseng xserver-xorg-video-v4l
xserver-xorg-video-vesa xserver-xorg-video-vmware xserver-xorg-video-voodoo
Keep kubuntu-desktop? [Ynpsiuqx?], [H]elp:

Его легко можно удалить с всеми принадлежащими ему мелочами (вариант p). Поверьте, то же самое происходит на чистой системе Ubuntu, естественно на снос номинируется ubuntu-desktop. Для этого молодца (который debfoster) флаги - не помеха.

Вот так вот. Теперь для меня apt сравним с pacman или portage. Хотя, нужно признать, что debfoster, всё же, сторонняя утилита. Ну да ладно. В Ubuntu есть жизнь!

Комментариев нет: