Библиотека сайта rus-linux.net
Сравнение основных систем управления пакетами в Linux
Оригинал: Comparison of major Linux package management systemsАвтор: Rares Aioanei
Дата публикации: 18 ноября 2011 года
Перевод: А. Кривошей
Дата перевода: февраль 2013 г.
1. Введение
Одним из самых существенных различий между различными дистрибутивами Linux является управление пакетами. Во многих случаях это является причиной перехода пользователя с одного дистрибутива на другой, так как ему не нравится способ установки программ, или требуемого программного обеспечения нет в репозиториях дистрибутива. Если вы новичок в мире Linux, и вас волнует выбор дистрибутива с наиболее удовлетворяющей вашим потребностям системой управления пакетами, данное руководство может служить хорошим подспорьем в этом вопросе. Если вы в течение долгого времени пользовались только одним или двумя дистрибутивами, и хотели бы узнать, что могут предложить другие, эта статья также может быть полезной для вас. И наконец, если вы хотите сравнить наиболее популярные системы управления пакетами, вы также найдете здесь кое-что интересное.
2. Подход
Мы выбрали для сравнения несколько систем управления пакетами из популярных дистрибутивов, и это будут dpkg/apt*, rpm/yum, pacman и Portage. Первый используется в системах на базе Debian, rpm - в Fedora, OpenSUSE или Red Hat, но yum используется только в Fedora/Red Hat. Gentoo - это дистрибутив, собираемый из исходного кода, поэтому вы сможете увидеть и работу систем, основанных на бинарных пакетах, и на исходном коде. Имейте в виду, что мы будем говорить о высокоуровневых интерфейсах для управления пакетами, то есть о yum вместо rpm, и об apt* вместо dpkg, но не будем рассматривать графические инструменты типа Synaptic, поскольку полагаем, что инструменты командной строки более мощные и дают больше возможностей. Кроме того, их можно использовать в любом окружении, даже если у вас вообще нет графичеcкой оболочки.
3. Системы управления пакетами
3.1. Семейство apt
На самом деле apt должен писаться прописными буквами, так как это аббревиатура, означающая Advanced Packaging Tool, но так как названия утилит всегда пишут в нижнем регистре, то и мы будем поступать так же. Семейство apt - это фронтенд к dpkg в дистрибутивах на базе Debian, кроме того он используется в некоторых ответвлениях OpenSolaris. Среди членов этого семейства утилиты apt-get, apt-cache, apt-cdrom и apt-file. Это только наиболее часто используемые программы. Кроме того, есть aptitude, которая может работать в интерактивном режиме как с помощью меню (на базе curses или GTK), так и с помощью аргументов командной строки. Хотя в различных производных от Debian дистрибутивах состав приложений отличается, но все они управляются одними и теми же инструментами, которые можно найти в стандартном Debian.
3.1.1. apt vs aptitude
Так как мы говорим о чистом Debian, я рекомендовал бы aptitude вместо of apt-*. Но другие посоветуют обратное, поэтому я порекомендовал бы попробовать обе утилиты и самому определить, какая из них лучше. Сначала вы не почувствуете особой разницы между ними, но со временем поймете, что одна из них вам нравится больше. Мы покажем, как использовать обе утилиты, чтобы вам легче было выбрать.
3.1.2. Установка программ
Программы устанавливаются очень просто. Все, что вам нужно, ввести команду:
$ apt-get install $software
или, если вы выбираете aptitude:
$ aptitude install $software
Если вы увидите сообщения о том, что требуемый пакет не найден, убедитесь, что вы обновили список пакетов с помощью команды update:
$ apt-get update
или
$ aptitude update
Я не буду тратить время на подробное описание, так как команды для apt-get и aptitude одни и те же. Если говорить об aptitude, вот что получится, если вызвать ее без аргументов:
3.1.3. Обновление программ
В отличии от других систем управления пакетами, обновление программ с использованием утилит семейства apt производится в два этапа, первый из которых мы уже показывали. Сторонники apt считают это преимуществом, а скептики - напрасной тратой времени, полагая, что одна команда проще. Мы, как обычно, не будем принимать ничью сторону и оставим это на ваше усмотрение. Итак, обновление системы Debian осуществляется следующим образом:
$ apt-get update && apt-get upgrade
Некоторые тонкости: имеется также команда dist-upgrade, а в aptitude поддерживается full-upgrade, которые отличаются от upgrade, тем что они более интеллектуальны и, если можно так выразиться, более агрессивны. Например, они могут удалить старые пакеты, если доступны новые важные обновления. Это также зависит от того, какой тип Debian вы используете. В стабильной ветви можно прекрасно жить с upgrade, но в смешанной стабильной/нестабильной системе мы рекомендуем использовать dist-upgrade.
3.1.4. Поиск программ
Вы не знаете точное название пакета, который хотите установить? В таком случае вы можете либо использовать автодополнение по клавише Tab, либо воспользоваться поисковыми функциями, предоставляемыми утилитами apt:
$ apt-cache search $search_term
или, в случае с aptitude:
$ aptitude search $search_term
3.1.5. Удаление программ
aptitude, как и apt-get, имеет команды remove и purge для удаления и чистки. В то время как remove обеспечивает удаление самой программы, purge идет дальше и удаляет также конфигурационные файлы программы. Пользователь сам решает, какую команду использовать, в зависимости от стоящей перед ним задачи.
3.2. yum
Некоторые из вас еще может быть помнят старые мрачные времена ада зависимостей RPM. Сегодня, благодаря yum, они остались в прошлом, и установка программ стала проще. Как и другие менеджеры пакетов, yum поддерживает все базовые функции, такие как установка и удаление программ, плюс большое количество полезных опций.
3.2.1. Установка программ
Базовые команды управления пакетами более менее однинаковы во всех системах. Например, если хотите установить текстовый редактор jed, вы вводите команду:
$ yum install jed Loaded plugins: auto-update-debuginfo, langpacks, presto, refresh-packagekit Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package jed.i686 0:0.99.19-3.fc15 will be installed --> Processing Dependency: slang-slsh for package: jed-0.99.19-3.fc15.i686 --> Running transaction check ---> Package slang-slsh.i686 0:2.2.4-1.fc16 will be installed --> Processing Dependency: libonig.so.2 for package: slang-slsh-2.2.4-1.fc16.i686 --> Running transaction check ---> Package oniguruma.i686 0:5.9.2-2.fc15 will be installed --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: jed i686 0.99.19-3.fc15 fedora 795 k Installing for dependencies: oniguruma i686 5.9.2-2.fc15 fedora 125 k slang-slsh i686 2.2.4-1.fc16 fedora 165 k Transaction Summary ================================================================================ Install 3 Packages Total download size: 1.1 M Installed size: 1.1 M Is this ok [y/N]: y Downloading Packages: (1/3): jed-0.99.19-3.fc15.i686.rpm | 795 kB 00:02 (2/3): oniguruma-5.9.2-2.fc15.i686.rpm | 125 kB 00:00 (3/3): slang-slsh-2.2.4-1.fc16.i686.rpm | 165 kB 00:00 -------------------------------------------------------------------------------- Total 268 kB/s | 1.1 MB 00:04 Running Transaction Check Running Transaction Test Transaction Test Succeeded Running Transaction Installing : oniguruma-5.9.2-2.fc15.i686 1/3 Installing : slang-slsh-2.2.4-1.fc16.i686 2/3 Installing : jed-0.99.19-3.fc15.i686 3/3 Installed: jed.i686 0:0.99.19-3.fc15 Dependency Installed: oniguruma.i686 0:5.9.2-2.fc15 slang-slsh.i686 0:2.2.4-1.fc16
Так выглядит полный вывод на моей машине под управлением Fedora 16. yum также поддерживает команду localinstall, которая полезна, если у вас есть уже скачанный пакет в формате RPM и вы хотите установить его. Мы рекомендуем использовать localinstall вместо "rpm -i $package", поскольку в этом случае установленный пакет будет добавлен в базу данных yum.
3.2.2. Обновление программ
Как уже говорилось, команды менеджеров пакетов очень похожи, но в данном случае yum не имеет двух команд для обновления, как apt. Одна команда "yum update" обновляет данные репозиториев и, если доступны новые версии пакетов, устанавливает их. Новой для вас может оказаться лишь команда check-update, которая действует примерно как "aptitude update", то есть обновляет только данные репозиториев, но не обновляет пакеты.
3.2.3. Поиск программ
До недавнего времения мне не нравилась команда search от yum, потому что она выдавала слишком много результатов, многие из которых были совершенно не связаны с предметом запроса. Многие пользователи сталкивались с этой проблемой, поэтому разработчики изменили функцию search, чтобы она выдавала только релевантные результаты, и добавили команду "search all", эмулирующую старое поведение.
3.2.4. Удаление программ
Если я хочу удалить программу, для этого конечно есть команда "yum remove". Она удаляет сам пакет и его зависимости. Если вы не хотите идти этим путем, и желаете сохранить зависимости (здесь необходимо действовать осторожно), вы можете ввести:
$ yum --nodeps remove jed
yum wiki также сообщает, что с опцией --nodeps необходимо работать осторожно: она используется только в том случае, когда пакет или система серьезно повреждены. Главное правило: если вы не можете закрутить винт отверткой, не нужно забивать его молотком. Конечно лучше прочитать руководство yum, чтобы узнать о всех опциях, которые вы можете использовать. Как и текстовые редакторы, менеджер пакетов используется часто, поэтому важно знать все тонкости работы с ним.
3.3. pacman
У Arch Linux есть свой менеджер пакетов, достаточно молодой по сравнению с другими (поскольку сам дистрибутив появился не так давно), но это не значит, что он уступает по функциональности yum или zypper. Одно из отличий pacman от описанных выше менеджеров пакетов то, что он не имеет команд, таких как update или remove. Вместо этого используются аргументы из одного символа (конечно, вы можете применять и длинные опции, отделяемые двумя дефисами, но короткие более популярны). Кроме того, pacman определенно является самым быстрым менеджером пакетов, поэтому на своих старых компьютерах я всегда использую Arch.
3.3.1. Установка программ
Чтобы установить jed в Arch, введите:
$ pacman -S jed
Ключ -S отвечает за синхронизацию, а также используется для других функций, таких как поиск программ или обновление. Сначала это может показаться нелогичным, но в руководстве эти моменты разъясняются.
3.3.2. Обновление программ
pacman позволяет выбрать обновление только данных из репозиториев, или обновление установленных программ. Для этого используются опции -y (обновить репозитории) и -u (обновить программы), причем обе эти опции необходимо использовать вместе с -S. Например, чтобы обновить установленные программы, мы используем следующую команду:
$ pacman -Syu
Вы можете сначала проверить обновления, пропустив -u.
3.3.3. Поиск программ
Для поиска вам снова понадобится -S, к которой добавляется s в нижнем регистре:
$ pacman -Ss jed
3.3.4. Удаление программ
Здесь -S нам уже не понадобится, вместо нее используется -R плюс имя пакета, который вы хотите удалить. Также имеется флаг --nodeps (-d в короткой форме записи). Кроме того, pacman имеет достаточно много специфических опций, о которых можно узнать, почитав man-страницу утилиты.
3.4. Portage
Некоторые могут сказать, что Portage не относится к основным системам управления пакетами, но я думаю иначе. Хотя Gentoo не так популярен, как мог бы быть, он прочно занимает свое место в мире Linux и не собирается сдаваться, имея свою, достаточно большую армию преданных пользователей. Хотя он, как и pacman, не столь прост в использовании, как yum, но имеет мощную функциональность, не требуя слишком много времени для изучения его возможностей.
3.4.1. Установка программ
Во-первых, если вы новичек в мире Gentoo и Portage, мы рекомендуем использовать длинные опции вместо коротких, так как они более информативны. Далее, в то время, как мы говорили только о Portage как о менеджере пакетов, на самом деле этим именем обозначается целое семейство утилит, связанных с пакетами. В качестве главной утилиты для работы с пакетами вы будете использовать emerge, но время от времени придется задействовать и другие, полный список которых можно найти в man-странице. Убедитесь, что перед установкой первого пакета вы воспользовались опцией --sync, так как она эквивалентна команде update из aptitude. Для установки программы используется команда:
$ emerge jed
Выглядит просто, но самом деле emerge - это действительно сложный и мощный инструмент, поэтому мы покажем здесь только самые главные ее опции и возможности.
3.4.2. Обновление программ
Как и apt* или pacman, emerge выполняет обновление в два этапа: сначала обновляются данные о пакетах с удаленного хоста с помощью --sync, затем обновляются установленные программы с помощью команды:
$ emerge --update --deep world
Приведенная выше команда - это самый простой вариант, но имеется еще немало опций, которые вам придется использовать в разных ситуациях, особенно если Gentoo у вас собран из исходного кода. Например, если после последнего обновления вы изменяли какие-либо флаги USE, настоятельно рекомендуется использовать опцию --newuse, чобы emerge знала о таких изменениях и, возможно, перекомпилировала некоторые (или все) пакеты. Вы также можете использовать опцию --ask, чтобы перед выполнением обновления запрашивалось подтверждение, или --verbose для получения более подробного вывода. Все описанные выше команды и опции можно писать и в краткой форме:
$ emerge -uDNav world
Portage - не только мощный, но и хорошо документированный инструмент. Здесь изложены только самые основные функции, а об остальном можно узнать из руководства Portage.
3.4.3. Поиск программ
emerge имеет опции --search и --searhdesc для выполнения этой задачи, и мы объясним, чем они отличаются. Пример: поиск jed с помощью опции --search выдаст категорию, в которой находится jed (app-editors, а также похожие категории в портах), информацию о лицензии, доступных версиях и т.д. Поиск с помощью --searchdesc выдаст намного больше результатов, так как в этом случае будет он будет производиться и в описаниях, но займет намного больше времени.
3.4.4. Удаление программ
Так как установка программ на языке Gentoo называется emerge, логично предположить, что удаление - это unmerge. По умолчанию при удалении программы ее зависимости не удаляются (аналогично поведению yum/rpm с опцией --nodeps). Имеется опция --depclean, которая удаляет все зависимости, но перед ее использованием рекомендуем ознакомиться с руководством, так как вы можете удалить какую-либо важную программу, если не будете представлять, что вы делаете.
4. Заключение
В данном обзоре мы рассмотрели только базовые функции основных систем управления пакетами. Мы оставили большое поле деятельности любопытному пользователю, так как эти утилиты имеют очень мощную функциональность. Например, они позволяют просматривать список установленных программ, определять, какому пакету принадлежит заданный файл, и многое другое. Мы рекомендуем поработать с выбранным вами менеджером пакетов на тестовой машине, возможно виртуальной. Это лучший способ изучить его достоинства и недостатки.