Давным-давно, когда еще весь цивилизованный мир не знал про пакетные менеджеры, установка ПО в Linux была длительная и мучительная. Представьте себе, как только не матюкались пользователи, особенно не опытные, когда пытаешься ставить один пакет, но он этого не хочет, ибо сначала нужно поставить второй пакет. Ставишь второй — он требует в зависимостях третьего, третий четвертого и так далее. И каждый пакет нужно было искать вручную, часто в интернете, тогда еще ооооочень медленном. Десятки нерешенных зависимостей заставили разработчиков задуматься: «А не написать ли нам такую программу, которая сама решает что ставить, как и куда?». И в светлейших головах хороших людей родился первый пакетный менеджер. От человека требовалось всего лишь знать название нужного пакета, доступ к хранилищу пакетов (репозиторию) и права для самой установки. С тех пор основные принципы
не изменились, но сами они значительно обросли новыми функциями, невероятной мощью и гибкостью. На сегодня самые популярные это: yum, urpmi — ставят пакеты rpm; apt — ставят в основном deb-пакеты, но иногда к ней прикручивают rpm. Сегодня я хочу немного рассказать про менеджер urpmi, который используется в любимой мной Mandriva Linux. Команда rpm предоставляет нам очень большие возможности работы с пакетами, но самая большая проблема в том, что она сама не умеет ставить зависимости. Для решения этой проблемы в недрах компании Mandriva был разработан программный комплект urpmi, который работает поверх стандартной rpm как оболочка. В состав пакета входят несколько утилит для работы с пакетами и их источниками. Ниже мы подробно рассмотрим работу каждого составляющего.
Инсталляция пакетов — urpmi [имя_пакета].
Для установки пакета, как я уже говорил, нужно знать его название. Для примера попробуем поставить программу для создания меню DVD-дисков
2mandvd:
[root'0'@mandrivka keed]$ urpmi 2mandvd
Наступні пакунки буде встановлено для задоволення залежностей:
Пакунок Версія Випуск Арх.
(носій «Contrib media»)
2mandvd 1.3.3 4mdv2010.1 i586
dvdauthor 0.6.18 1mdv2010.1 i586
ffmpegthumbnailer 2.0.1 1mdv2010.1 i586
libffmpegthumbnailer4 2.0.1 1mdv2010.1 i586
Буде використано 4.7МБ додаткового місця на диску.
Буде отримано 2.4МБ пакунків.
Продовжити встановлення 4 пакунків? (Y/n) (Т/н)
Как видим, программа подробно информирует нас о том, что будет делать. Для обеспечения работы нашего пакета требуется еще три дополнительных. Если нас все устраивает, то отвечаем на запрос положительно, нажимая клавишу «у» и пакеты установятся. Можно таким же образом устанавливать одиночные rpm-пакеты, указав их расположение. Как вы уже догадались, все зависимости решаются, в отличии от обычной
rpm -Uvh [package.rpm]. Установим таким образом программу для чистки ненужных эскизов —
clean:
[root'0'@mandrivka keed]$ urpmi ~/clean-0.2-1.noarch.rpm'
встановлюється clean-0.2-1.noarch.rpm з /home/keed/
Підготовка... #############################################
1/1: clean #############################################
[root'0'@mandrivka keed]$
Удаление пакетов — urpme [имя_пакета].
Удаление также не сложно. Принцип работы такой же, как и в urpmi, только результат обратный. Для примера давайте удалим пакет
clean, который мы установили минутой раньше:
[root'0'@mandrivka keed]$ urpme clean
вилучається clean-0.2-1.i586
вилучається пакунок clean-1:0.2-1.i586
[root'0'@mandrivka keed]$
Как бы тоже не очень сложно. Но тут иногда нужно быть осторожным, иначе по тем же зависимостям можно снести пол-системы. Для ясности попробуем удалить пакет
libgnome-desktop-2_17, к которому много чего привязано:
[root'0'@linux.local keed]$ urpme libgnome-desktop-2_17
Щоб задовольнити залежності, буде вилучено 23 пакунків (170МБ):
eog-2.30.1-1mdv2010.1.i586
(через відсутність libgnome-desktop-2.so.17)
evolution-2.30.2-1mdv2010.1.i586
(через відсутність libgnome-desktop-2.so.17)
gdm-2.30.2-12mdv2010.1.i586
(через відсутність gnome-settings-daemon)
gnome-applets-2.30.0-1mdv2010.1.i586
(через відсутність libgnome-desktop-2.so.17,
через відсутність gnome-python-applet)
gnome-control-center-2.30.1-5mdv2010.1.i586
(через відсутність libgnome-desktop-2.so.17,
через незадоволеність gnome-settings-daemon >= 2.21.5,
через відсутність libgnome-window-settings.so.1)
gnome-panel-2.30.2-1mdv2010.1.i586
(через відсутність libgnome-desktop-2.so.17,
через відсутність gnome-screensaver,
через відсутність gnome-session)
[ *=*=*= урезано для экономии места =*=*=* ]
Вилучити 23 пакунки? (Т/н)
Программа не дура, она знает, что без главных библиотек среды
GNOME аж 23 пакета не смогут работать и будут просто занимать такое ценное место на диске. Поэтому и их удалить — это все-таки мудрое решение. Но мы нажимаем «n» для отмены.
Поиск пакетов — urpmq [имя_пакета].
Поиск в БД пакетов происходит по таким критериям: по названию пакета (
urpmq [имя_пакета]), по файлу в нем содержащегося (
urpmf [имя_файла]) и в описании пакетов по ключевым словам (
urpmq --fuzzy [ключевое_слово]). Последние два пункта требуют в наличии закэшированого файла
xml-info, который должен находиться в папке с подключенным репозиторием. Где это, смотрите ниже.
Добавление источников пакетов — urpmi.addmedia [название_источника] [путь]. Эта команда позволяет добавлять новые репозитории для установки пакетов. Добавлять можно как локальные носители, так и сетевые. Для просмотра уже добавленых можно воспользоваться этой документированной командой:
[root'0'@mandrivka ~]$ urpmq --list-media
Main media
Contrib media
distrib
У меня на данный момент подключено аж три источника — это для примера, на самом деле их больше. Хотя есть еще один, более хитрый способ получить этот список:
[root'0'@mandrivka ~]$ find /var/lib/urpmi/ -type d
/var/lib/urpmi/
/var/lib/urpmi/Main media
/var/lib/urpmi/distrib
/var/lib/urpmi/Contrib media
Как вы уже могли догадаться, каждый добавленный носитель предоставляет собой папку в директории
/var/lib/urpmi/, в которой лежит список пакетов, место, где эти пакеты брать и MD5-суммы для проверки целостности. Так давайте добавим источник с названием Contrib local media из локального cdrom:
[root'0'@mandrivka ~]$ urpmi.addmedia Contrib\ local\ media cdrom://i586/media/contrib
додавання носія "Contrib local media"
[root'0'@mandrivka ~]$
После добавления желательно обновить центральную БД пакетов командой
urpmi.update -a. Только после этого действия пакеты с новых источников станут видимыми и доступными для установки.
Удаление источников — urpmi.removemedia [название_источника] [путь].
Принцип действия обратно пропорциональный предыдущей команде, и синтаксис похож. Поэтому долго зацикливаться на этом не буду, просто приведу пример:
[keed'0'@mandrivka ~]$ sudo urpmi.removemedia "Contrib local media"
вилучається носій "Contrib local media"
[keed'0'@mandrivka ~]$
И удалять можно сразу несколько источников.
Rpmdrake. Это официальная «морда» для urpmi, написанная на связке
perl+gtk. Довольно удобная оболочка, но по-моему еще не так функциональна, как, например,
synaptic. Пакеты удобно собраны в группы и отображаются в левой колонке. Правая же колонка горизонтально поделена на две части. В верхней выбираем интересующий нас пакет, а снизу читаем информацию про него. Запутаться трудно, но возможно — я один раз долго не мог понять, почему rpmdrake никак не находил mplayer. А дело было в том, что сразу после установки системы он настроен на отображение пакетов с GUI. Просто в спадающем списке над левой колонкой выбираем «Все» и будет вам счастье :)
В завершение приведу русифицированную табличку, которую я бессовестно стащил с сайта
http://distrowatch.com/. В ней можно найти основную информацию о командах и их применении. А также используйте ее как словарь-переводчик с других пакетных менеджеров.
Задача | Пакетный менеджер |
apt (deb) Debian, Ubuntu |
zypp (rpm) openSUSE |
yum (rpm) Fedora, CentOS |
urpmi (rpm) Mandriva |
Управление пакетами |
Установить пакет с репозитория |
apt-get install pkg |
zypper install pkg |
yum install pkg |
urpmi pkg |
Установить ПО с файла |
dpkg -i pkg |
zypper install pkg |
yum localinstall pkg |
urpmi pkg |
Обновить версию ПО |
apt-get install pkg |
zypper update -t package pkg |
yum update pkg |
urpmi pkg |
Удалить ненужное ПО |
apt-get remove pkg |
zypper remove pkg |
yum erase pkg |
urpme pkg |
Обновить список пакетов |
apt-get update
aptitude update |
zypper refresh |
yum check-update |
urpmi.update -a |
Обновить систему |
apt-get upgrade
aptitude safe-upgrade |
zypper update |
yum update |
urpmi --auto-select |
Поиск в БД пакетов |
Поиск пакета по имени |
apt-cache search pkg |
zypper search pkg |
yum list pkg |
urpmq pkg |
Поиск по содержимому |
apt-cache search pattern |
zypper search -t pattern pattern |
yum search pattern |
urpmq --fuzzy pkg |
Поиск по файлу |
apt-file search path |
zypper wp file |
yum provides file |
urpmf file |
Список установленных пакетов |
dpkg -l |
zypper search -is |
rpm -qa |
rpm -qa |
Работа с репозиториями |
Вывести список |
cat /etc/apt/sources.list |
zypper repos |
yum repolist |
urpmq --list-media |
Добавить источник |
(edit /etc/apt/sources.list) |
zypper addrepo path name |
(add repo to /etc/yum.repos.d/) |
urpmi.addmedia name path |
Удалить источник |
(edit /etc/apt/sources.list) |
zypper removerepo name |
(remove repo from /etc/yum.repos.d/) |
urpmi.removemedia media |
P.S. Учите консольные команды. У меня один раз в самый ответственный момент
rpmdrake просто рухнул и до сих пор не запускается. И где гарантия того, что это с вами не случится? Если изложенной мной информации вам мало, то просто запустите любую команду без параметров и получите хорошее, толковое руководство. Благо оно локализирована и легкая для понимания. И вы поймете, насколько мощным инструментом наградили разработчики мандриву!