Пакетные системы

We use cookies. Read the Privacy and Cookie Policy

Пакетные системы

Рассказ о системах управления пакетов может занять продолжительное время – на сегодня существует около 20 различных систем с вариантами. Практически каждый дистрибутив имеет свои особенности, исключений здесь больше, чем правил. Это вносит путаницу и не способствует большей популярности Linux, но обычно достаточно выбрать свой дистрибутив и освоить принятую в нем систему установки. Средства управления пакетами можно разделить на две категории:

• менеджеры пакетов, предназначенные непосредственно для управления прекомпилированными программами;

• системы управления репозитариями пакетов, являющиеся надстройкой над пакетными менеджерами, позволяющие автоматизировать установку, обновление, удаление программ и сборку пакетов.

Менеджеры пакетов, в первую очередь, отличаются форматами пакетов. Ранее в Linux существовало три основных формата пакетов:

• rpm – формат, изначально принятый в дистрибутиве RedHat, сегодня применяется в его многочисленных потомках и других дистрибутивах (Fedora, Mandriva, ALTLinux и других);

• deb – формат пакетов, появившийся в дистрибутиве Debian и производных, самым известным из которых является Ubuntu;

• tar.gz – формат пакетов, появившийся в дистрибутиве Slackware.

Сегодня этот список значительно шире. Первые два типа содержат информацию, в которой указаны зависимости этого пакета. Пакеты tar.gz (по сути, это обычные архивы) таких данных не содержат, поэтому пользователи Slackware вынуждены самостоятельно заботиться о зависимостях. Хотя отсутствие информации о зависимостях абсолютно не препятствует контролю над ними. Это можно возложить на внешние программы, а управление такими пакетами часто оказывается даже более гибким, чем теми, в которых такая информация имеется.

Для управления каждым типом пакетов используется своя программа. При установке с их помощью приложение создаст необходимые каталоги, распределит по ним файлы и поставит нужные ссылки. Программы используются не только для установки нового пакета, но и для обновления, получения списка установленных пакетов и информации о них, а также для деинсталляции пакетов, если в них отпала необходимость.

Установка пакетов

Для установки rpm-пакетов используется одноименная консольная утилита. Сам пакет имеет такой формат: – smplayer-0.5.29-alt1.i586.rpm, где:

• smplayer – название программы;

• 0.5.29 – версия программы;

• alt1 – необязательное поле, показывающее дистрибутив, для которого собран этот пакет (это очень важный параметр, так как пакет, собранный для другого дистрибутива или другого релиза одного и того же дистрибутива, может не работать в вашем; в данном примере это AltLinux, для Fedora 7 здесь будет указано fc7, для Mandriva 2008.0 – mdv2008.0; если этого поля нет, возможно, пакет универсален и подходит для всех дистрибутивов, использующих RPM);

• i586 – показывает, под какой тип процессора собран этот пакет: для 64-битных систем будет указано x86_64, а если в пакете находятся исходные тексты, которые затем нужно будет компилировать, то src.

Частично такой подход используется и в других пакетных форматах, поэтому далее рассматриваться не будет.

Синтаксис использования rpm при работе из командной строки следующий:

rpm [параметры] название_пакета(ов)

В качестве параметров здесь используется один или несколько флагов, указывающих, что нужно сделать с пакетом. С флагами разберемся по порядку. При необходимости установить пакет выполните следующую команду:

# rpm -i package_name

Примечание

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

В случае если пакетов в каталоге много, проще воспользоваться маской. Например, набрав rpm -i perl*, вы установите все программы, чье название начинается с perl. Флаг -i не дает отображения информации о ходе установки. Флаги -v и -h служат для индикатора процесса выполнения. Теперь команда для установки выглядит так:

rpm -ivh package_name

В случае если такой пакет уже установлен, вы получите сообщение об этом и установка прервется – тогда нужно использовать ключ -U (–upgrade).

# rpm -Uvh package_name

Примечание

Для получения информации обо всех параметрах любой консольной команды Linux используйте ключ –help.

Бывают ситуации, когда пакет не устанавливается. Причины могут быть разные; если при переинсталляции пакета система не хочет устанавливать его заново или не хватает библиотек, воспользуйтесь параметром –force. Правда, его использование может привести к тому, что данная программа не будет работать или могут повредиться важные файлы, поэтому рекомендуется сначала разобраться, а потом устанавливать пакет таким способом. Для удаления пакета воспользуйтесь командой rpm -e package_name (при этом достаточно указать только имя (например, xmms), и он будет удален). Как и при установке, параметр -v (а лучше -vv) покажет процесс удаления пакета, а если есть необходимость в безоговорочной деинсталляции, то есть несмотря на наличие в системе пакетов, зависящих от данного, воспользуйтесь дополнительно параметром -nodeps. Для получения информации обо всех установленных в системе пакетах наберите rpm -qa, а об отдельном пакете – rpm -q package_name. Наиболее полную информацию вы сможете получить, набрав rpm -qpi, а список файлов, которые установит пакет, можно посмотреть при помощи команды rpm –qpl.

Примечание

Многие операции можно проделать с помощью файлового менеджера Midnight Commander: установив курсор на файл и нажав F3 (просмотр), вы увидите информацию о пакете; зайдя в пакет, нажав клавишу Enter и выбрав файл INSTALL, можно установить выбранный пакет.

Последний рассматриваемый режим работы программы rpm – проверка целостности пакета. Для этого нужно ввести rpm -V package_name, а для проверки всех пакетов в системе – добавить -a.

Для установки пакета не обязательно работать в командной строке: в сегодняшних дистрибутивах система установки интегрирована в графические среды, и, чтобы установить скачанный пакет, достаточно выбрать в контекстном меню пункт вроде Открыть в Software Installer (так он называется в Mandriva Linux).

Все программы управления пакетами Slackware находятся в пакете pkgtools. Для его установки выполняется такая команда:

# installpkg package_name.tgz

Обратите внимание, что пакеты для Slackware имеют расширение архива, созданного утилитой tar и сжатой bzip, и, по сути, им и являются. При этом пакет устроен таким образом, что может быть развернут в корневом каталоге файловой системы.

Для модернизации и удаления пакетов применяется соответственно upgradepkg или removepkg. При вводе pkgtool вы получите графический интерфейс к этим утилитам (рис. 1.2).

Рис. 1.2. Утилита для работы с пакетами в Slackware pkgtool

В последних версиях канадского дистрибутива Vector Linux (веб-сайт http://www.vectorlinux.com/), основой для которого послужил Slackware, формат пакетов tar.gz заменен на tlz. Последний почти ничем не отличается от традиционного, только в нем вместо программы-архиватора GZIP использован упаковщик LZMA. Хотя пакеты для Slackware Vector Linux также поддерживает. Для установки в контекстном меню в Vector Linux следует выполнить команду Actions ? VectorLinux Package ? Install (Действия ? Пакет VectorLinux ? Установить).

Для работы с deb-пакетами используется утилита dpkg, основные параметры которой практически совпадают с rpm. Например, для установки deb-пакета следует выполнить команду dpkg –i package_name.deb, для удаления пакета dpkg вызывается с ключом –r (или –remove), получить список установленных пакетов поможет ключ –l (–list), ключи –force и –ignore-depends помогут проигнорировать проблемы, возникшие при установке или удалении пакета. В дистрибутиве Kubuntu такой пакет можно установить из контекстного меню файлового менеджера Konqueror, выполнив команду Kubuntu Package Menu ? Install Package (Меню пакета Kubuntu ? Установить пакет) (рис. 1.3).

Рис. 1.3. Установка пакета в Linux Kubuntu

В составе Kubuntu есть графическая утилита gdebi, позволяющая устанавливать отдельные пакеты. Все просто, хотя не совсем удобно, так как если пакет требует для работы других пакетов, то их также придется предварительно скачать и установить одним списком, а таких пакетов может быть десяток, которые в свою очередь, потребуют еще несколько. В таком случае установка крайне неудобна. Кроме того, искать их по всем сайтам Интернета также непросто, поэтому разработчики собрали все пакеты в одном месте, а специальные программы отслеживают зависимости, поэтому установка приложений в Linux даже проще, чем в Windows. Инсталляция индивидуальных пакетов сегодня применяется в тех случаях, когда нужного пакета нет в репозитарии, а также для экономии трафика (когда необходимый пакет уже есть, его незачем скачивать повторно).

Системы управления пакетами

В последнее время наибольшее распространение получили системы управления пакетами, которые обеспечивают пользователя единым интерфейсом для поиска, установки, обновления и удаления. Наиболее известным является APT. Появившийся сначала в дистрибутиве Debian и изначально рассчитанный на работу с пакетами в формате deb, он быстро стал универсальным средством управления программами, в том числе и с пакетами в других форматах rpm (в дистрибутивах ALTLinux и Connectiva). Порт APT для работы с tgz-пакетами Slackware называется slapt-get и сегодня имеет несколько графических надстроек вроде Gslapt (рис. 1.4), хотя есть и другие варианты – swaret или slackpkg.

Рис. 1.4. Gslapt – графический интерфейс к slapt-get

Менее распространены другие системы управления пакетами – urpmi (Mandriva) и yum (Red Hat/Fedora и ASPlinux). Они ориентированы на работу с rpm-пакетами и широкого распространения не получили. Подробно рассматриваться эти системы не будут, тем более что после установки дистрибутива они, как правило, готовы к работе, а пользователю предоставлен понятный графический интерфейс. Например, программа установки приложений в дистрибутиве Mandriva выглядит так (рис. 1.5).

Рис. 1.5. Установка приложений в Mandriva

Так же просто устанавливаются приложения и в дистрибутивах RedHat/Fedora/ASPLinux (рис. 1.6).

Рис. 1.6. Менеджер пакетов в дистрибутиве Fedora

По причине большей распространенности и так как в комплекте данной книги идет дистрибутив Kubuntu, в котором для установки приложений используется APT, более подробно остановимся на работе с этой системой.

Работа с apt-get в Ubuntu

Все, что будет описано в данном разделе, практически полностью действительно и для других систем, использующих APT, – Debian, MEPIS, Linspire/Freespire, ALTLinux и клонов APT вроде slapt-get.

Описание репозитариев. Пакеты в репозитарии структурированы по назначению, платформе и прочим характеристикам. Список известных дистрибутиву репозитариев приведен в файле /etc/apt/sources.list. Заглянем внутрь (рис. 1.7).

Рис. 1.7. Список репозитариев, выведенный утилитой Synaptic

$ cat /etc/apt/sources.list

#deb cdrom:[Kubuntu 7.04 _Feisty Fawn_ – Beta i386 (20070322.1)]/ feisty main restricted

deb http://ua.archive.ubuntu.com/ubuntu/ feisty main restricted

deb-src http://ua.archive.ubuntu.com/ubuntu/ feisty main restricted

deb http://ua.archive.ubuntu.com/ubuntu/ feisty-updates main restricted

deb http://ua.archive.ubuntu.com/ubuntu/ feisty universe multiverse

deb http://ua.archive.ubuntu.com/ubuntu/ feisty-backports main restricted universe multiverse

deb http://security.ubuntu.com/ubuntu feisty-security main restricted

Рассмотрим, что получилось. Первая строка указывает на CD-ROM, точнее, на конкретный диск с указанной меткой. Для добавления любого другого диска с пакетами (он должен иметь специальную структуру, о чем будет рассказано далее) достаточно вставить его в привод и набрать в консоли команду sudo apt-cdrom add – программа попросит вставить диск, после чего нужно нажать Enter. Далее в файле описываются репозитарии, находящиеся на различных узлах в Интернете. В первой строке указан тип пакета (deb указывает, что будут загружаться пакеты с уже скомпилированными программами; а deb-src означает, что будут использоваться пакеты с исходными текстами). Периодически необходимо обновлять список пакетов, имеющихся в репозитариях. Это делается командой sudo apt-get update.

При большом количестве записей суммарный объем скачанных файлов может превышать 10 Мбайт, поэтому, если не планируется самостоятельная сборка/пересборка пакетов, строки, содержащие deb-src, можно закомментировать, поставив в начале знак #. Таким образом можно уменьшить нагрузку на канал и время обновления списка.

Следующая запись означает зеркало, с которого будут загружаться обновления. Официальный репозитарий Ubuntu располагается по адресу http://archive.ubuntu.com/ubuntu/. При установке дистрибутива в зависимости от региона автоматически выбирается одно из многочисленных зеркал репозитария. Например, украинское зеркало имеет адрес http://ua.archive.ubuntu.com/ubuntu/, российское вместо ua использует ru, поэтому, читая зарубежные материалы, следует переносить их на местные реалии. Например, если в статье говорится, что для установки нужно добавить в список сервер http://gb.archive.ubuntu.com/ubuntu/, это не значит, что нужно выполнять такой совет. У вас уже использовано локальное зеркало. Хотя здесь все не так просто, как кажется.

Во-первых, зеркала обновляются не мгновенно, а через некоторый период времени. Хотя это нестрашно. Интересней скорость доступа к зеркалу. Так, команда traceroute показывает 14 промежуточных узлов в случае с вариатом ua, при этом сам сервер находится в Лондоне, IP-адрес совпадает с официальным archive.ubuntu.com, а пакет проходит чуть менее шести тысяч километров, то есть фактически украинское зеркало совпадает с официальным репозитарием. Причем скорость закачки днем в случае автора равна приблизительно 128 Кбайт/сек, а ночью – в два раза ниже. При установке пакетов с итальянского сервера с префиксом gb пакет пройдет 12 узлов и на тысячу километров меньше. Польский (pl) сервер «находится» от автора в 6126 километрах, через 14 промежуточных узлов, но отклик отличный. Полный список репозитариев можно найти по адресу https://wiki.ubuntu.com/Mirrors?action=show&redirect=Archive.

Следующей строкой идет название версии дистрибутива: для 7.04 это feisty, 6.10 – edgy, 6.06 – dapper. Такая строка показывает, что будут использованы основные и тщательно протестированные пакеты, собираемые самими разработчиками. К названию дистрибутива может быть добавлено одно из четырех окончаний:

• backports – не протестированные, но часто очень полезные пакеты;

• proposed – предлагаемые, но пока не протестированные обновления;

• security – обновления безопасности;

• updates – обновления, прошедшие стадию proposed.

Таким образом, на каждый дистрибутив приходится пять возможных значений. В большинстве домашних систем использование всех категорий пакетов не является рациональным, часто кроме обязательного main достаточно оставить только backports.

Последняя позиция, представлена еще четырьмя характеристиками, которые можно поместить в одной строке:

• main – пакеты со свободной лицензией, поддерживаемые разработчиками Ubuntu;

• universe – пакеты со свободной лицензией, поддерживаемые сторонними разработчиками;

• multiverse – пакеты с несвободной лицензией, поддерживаемые сторонними разработчиками;

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

Набрав в строке веб-браузера указанный адрес, можно обнаружить, что последние два компонента в описании репозитария являются подкаталогами каталога dists (рис. 1.8).

Рис. 1.8. Репозитарий Ubuntu

Продвигаясь далее, можно найти еще каталоги, соответствующие архитектуре и локализации, но добавлять тип архитектуры и локализацию в описание репозитария не нужно – эти данные будут получены автоматически по текущим настройкам системы. Возникает вопрос, что делать, если была установлена версия системы под i386, а на компьютере установлен процессор AMD64. Загружать пакеты под свой тип процессора просто. Нужно открыть в любом текстовом редакторе файл /etc/apt/apt.conf.d/01ubuntu и в секции APT добавить следующую строку:

Architecture «amd64»

Либо в любом месте добавить

APT::Architecture «amd64»

Затем необходимо сохранить изменения, обновить список пакетов и попробовать получить небольшой файл; если пакет имеет в названии amd64, все сделано верно. Теперь можно обновить всю систему, для чего следует выполнить всего одну команду:

$ sudo apt-get dist-upgrade

Примеры всех параметров этого файла можно найти в каталоге /usr/share/doc/apt/examples. Сами пакеты находятся на сайте в другом подкаталоге (pool) и рассортированы по несколько иному принципу, но, так как менеджер пакетов скрывает эту структуру, не будем вдаваться в подробности.

Утилита APT проста в использовании. Например, чтобы найти программу, проигрывающую MP3-файлы, достаточно выполнить команду sudo apt-cache search mp3. В результате будет выведен список всех пакетов. Для установки любого пакета достаточно ввести sudo apt-get install имя_пакета; если пакет необходимо обновить, вместо install используется update. При наличии соединения с Интернетом все остальное утилита сделает сама. При желании самостоятельно скомпилировать пакет, который имеется в репозитарии, чтобы не разбираться с зависимостями, вначале выполните следующую команду:

$ sudo apt-get build-dep имя_пакета

Затем скомпилируйте новую версию программы (./configure; make), но вместо команды для установки make install используйте команду apt-get install checkinstall, которая создаст новый пакет и затем установит его.

Добавление репозитариев. Добавить новый репозитарий можно несколькими способами. Самый простой – открыть в любом текстовом редакторе (через sudo) файл /etc/apt/sources.list и вписать нужную строку. Причем следует помнить, что чем ближе запись к началу файла, тем большим преимуществом будет обладать этот репозитарий.

В составе дистрибутива Kubuntu имеется понятный графический интерфейс к apt-get – Adept (рис. 1.9). В его окне достаточно выбрать нужное приложение, и оно будет автоматически установлено.

Рис. 1.9. Adept – программа для установки приложений в Kubuntu

Для того чтобы добавить репозитарий с его помощью, выполните команду Вид ? Управление репозитариями, перейдите на вкладку Third-party Software (Компонент третьей стороны), нажмите кнопку Add (Добавить) и вставьте нужную строку. Здесь же на других вкладках включается автоматическое обновление списка пакетов, выбираются категории пакетов основного репозитария и используемое зеркало. Страница Authentication (Аутентификация) предназначена для загрузки GPG-ключей, необходимых для проверки подписи пакетов. Последнее делать необязательно, пакеты будут устанавливаться и без этого, но так вы будете уверены, что их собрал именно тот человек, с чьего ресурса они получены, да и менеджер пакетов не будет задавать лишних вопросов. Месторасположение файлов ключей обычно указывается на главной странице ресурса. Его можно добавить и в командной строке. Например:

$ wget http://seveas.imbrandon.com/1135D466.gpg -O– | sudo aptkey add -

В более распространенном графическом фронт-энде к apt-get Synaptic (рис. 1.10) репозитарий добавляется через команду Settings ? Repositories (Настройки ? Репозитарии) (см. рис. 1.7).

Рис. 1.10. Программа для установки приложений Synaptic

После того как репозитарии добавлены, следует обновить список пакетов. В консоли это делается командой:

$ sudo apt-get update

В Synaptic достаточно нажать кнопку Reload (Перезагрузить), в Adept – Получить обновления.

Информация о репозитариях и пакетах собирается в каталоге /var/lib/apt/lists в виде файлов, имена которых соответствуют названию архива.

$ ls /var/lib/apt/lists ua.archive.ubuntu.com_ubuntu_dists_feisty-backports_main_binaryi386_Packages

Заглянув в этот каталог, можно получить информацию о любом пакете. Впрочем, смотреть необязательно – это сделают утилиты. Например, введя sudo apt-cache showpkg gcc-4.1, можно узнать все о пакете gcc.

Создание локального репозитария. Создать локальную копию репозитария можно одной командой (требуется пакет debmirror):

$ /usr/bin/debmirror –nosource -m –passive

–host=archive.ubuntulinux.org –root=ubuntu –method=ftp

–progress –dist=feisty,feisty-security,

feisty-updates,feisty-backports –ignore-release-gpg

–section=main,restricted,multiverse,universe

–arch=i386,amd64

Большая часть параметров понятна из объяснений выше, трафик составит не один гигабайт и потребует много свободного места на диске. Чаще возникает необходимость создать свой репозитарий из уже скачанных файлов и пользоваться им как обычно, с помощью apt-get. Для создания списка пакетов понадобится утилита dpkg-scanpackages, входящая в состав dpkg-dev. Установите:

$ sudo apt-get install dpkg-dev

Теперь создайте каталог, в который скопируйте все пакеты.

$ mkdir archives

Перейдите в образованный каталог.

$ cd archives

Выполните следующую команду:

$ dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz

По окончании работы утилиты будет выдан список пакетов и их количество; чтобы добавить новый репозитарий в файл sources.list, нужно прописать путь к созданному каталогу, например:

deb file:/home/grinder/archives ./

Сохраните изменения и введите sudo apt-get update; если в /var/lib/apt/lists добавился новый каталог, все было сделано верно. Теперь можно копировать этот каталог на другие системы. При добавлении в него пакетов процедуру придется повторить. В Интернете можно найти достаточно описаний того, как перенести свой репозитарий на CD/DVD. Существует вариант проще – использовать утилиту APTonCD (aptoncd.sourceforge.net) (рис. 1.11). Сначала установите ее следующей командой:

$ sudo apt-get install aptoncd

Рис. 1.11. Окно программы APTonCD

Теперь можно вызвать ее через меню Система. Пользоваться программой просто. На вкладке Create (Создать) нужно нажать кнопку Create APTonCD (Создать APTonCD) – будет просканирован каталог /var/cache/apt/archives, и все файлы будут добавлены в проект. Далее нажмите кнопку Add Package (Добавить пакет) и укажите пакеты, находящиеся отдельно. Нажмите кнопку Options (Параметры) и в списке Medium Type (Тип носителя) выберите тип образа – CD или DVD, а в поле Destination Folder (Папка назначения) укажите каталог, куда будет помещен готовый ISO-образ.

Нажмите OK – программа создаст образ и появится диалоговое окно, предлагающее сразу записать его на носитель. На вкладке Restore (Восстановить) можно скопировать (то есть восстановить) все файлы и добавить CD-ROM.

Данный текст является ознакомительным фрагментом.