Наши партнеры

UnixForum





Библиотека сайта 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, вот что получится, если вызвать ее без аргументов:

Мы предлагаем вам немного поиграть с aptitude, в том числе с версией на базе curses, чтобы увидеть все доступные команды и опции.

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. Заключение

В данном обзоре мы рассмотрели только базовые функции основных систем управления пакетами. Мы оставили большое поле деятельности любопытному пользователю, так как эти утилиты имеют очень мощную функциональность. Например, они позволяют просматривать список установленных программ, определять, какому пакету принадлежит заданный файл, и многое другое. Мы рекомендуем поработать с выбранным вами менеджером пакетов на тестовой машине, возможно виртуальной. Это лучший способ изучить его достоинства и недостатки.