Управление пакетами в Arch Linux с помощью ABS и pacman

2 ноября 2016

Сегодня мы поговорим об основах управления пакетами в Arch Linux. В общем и целом, идея напоминает ports и packages из мира FreeBSD. То есть, можно как компилировать софт из исходников, так и ставить бинарные пакеты. Но есть ряд существенных отличий. Итак, давайте же во всем разберемся!

Использование pacman

Pacman (название означает package manager) — это местная утилита для управления бинарными пакетами, аналог apt-get из мира Debian / Ubuntu или yum из мира RHEL / CentOS / Fedora. Пользоваться им очень просто.

Получение общей справки или справки по конкретным командам:

pacman --help
pacman -S --help

Флаги с буквами в верхнем регистре означают команды. Из них основные — это -S (sync), -Q (query) и -R (remove). Все они имеют дополнительные флаги, которые пишутся в нижнем регистре. Например, s означает search. Зная типичные дополнительные флаги, получаем сравнительно простую и понятную схему. Например, -Ss означает поиск по всем пакетам, а -Qs означает поиск только по установленным пакетам. В итоге, основные действия с пакетами выполняются следующим образом.

Установить пакеты:

pacman -S gimp gpicview

Поиск пакетов по регулярному выражению:

pacman -Ss ^ssh

Установка группы пакетов:

pacman -S --needed base-devel

Список пакетов, входящих в группу:

pacman -Sg base-devel

Список всех доступных групп:

# группы и пакеты в них
pacman -Sgg
# только имена групп
pacman -Sgg | cut -d ' ' -f 1 | uniq

Обновить базу данных пакетов:

pacman -Sy

Обновить установленные пакеты:

pacman -Su

Список пакетов, для которых есть обновления:

pacman -Qu

Список установленных пакетов:

pacman -Qi
pacman -Qi | grep Name

Поиск установленного пакета по регулярному выражению:

pacman -Qs ^ssh

Список файлов, принадлежащих пакету:

pacman -Ql mutt

Определить, к какому пакету относится заданный файл:

pacman -Qo /usr/bin/mutt

Удалить пакет:

pacman -R xorg-xbacklight

Удаление пакетов, установленных, как зависимости, и ставших ненужными (autoremove):

pacman -R `pacman -Qdtq`

Некоторые пакетные менеджеры умеют «замораживать» пакеты, то есть, не обновлять их при наличии обновлений (hold в Debian и деривативах, lock во FreeBSD). Для достижения того же эффекта в Arch Linux в файле /etc/pacman.conf в секцию [options] нужно дописать что-то вроде:

IgnorePkg = systemd mutt

Заканчивая рассказ про pacman, хочется отметить, что список серверов с пакетами находится в /etc/pacman.d/mirrorlist, а кэш загруженных пакетов следует искать в /var/cache/pacman/pkg/. Для очистки кэша используйте команду:

pacman -Sc

Логи пишутся в /var/log/pacman.log. В них вы всегда найдете, что, на что, и когда было обновлено.

Пример использования AUR

AUR (аббревиатура от Arch User Repository) — это каталог пакетов для Arch Linux, поддерживаемых пользователями (типа как PPA в мире Ubuntu). На сайте aur.archlinux.org есть поиск, комментарии к пакетам, и многое другое.

Для примера рассмотрим установку пакета ttf-ms-fonts, который содержит шрифты от Microsoft, и по более-менее понятным причинам доступен только в AUR:

# пакеты из группы base-devel - это типичные пакеты,
# необходимые для сборки других пакетов
pacman -S --needed base-devel
# адрес репозитория есть на странице пакета
git clone https://aur.archlinux.org/ttf-ms-fonts.git
cd ttf-ms-fonts

Перекрестная ссылка: Моя шпаргалка по работе с Git.

В репозитории вы найдете файл PKGBUILD (используется синтаксис bash), и плюс к нему, возможно, какие-то патчи и подобные вещи. Файл PKGBUILD содержит информацию о том, откуда качать исходники пакета и какие контрольные суммы у этих исходников, с какими флагами их собирать, и так далее. Таким образом, немного подправив PKGBUILD, можно собрать пакет со своими флагами. Хорошей практикой считается держать репозитории AUR-пакетов где-нибудь в ~/packages, время от времени делая им git pull и обновляясь на новую версию.

Будучи в репозитории говорим:

makepkg -s

Здесь ключ -s означает необходимость установить недостающие зависимости с помощью pacman. Настройки makepkg хранятся в файле /etc/makepkg.conf. Это местный аналог /etc/make.conf из мира FreeBSD. В нем можно указать CFLAGS, CXXFLAGS и подобные вещи. Очень рекомендуется указать в параметре PACKAGER свое имя и email. Это позволит отличать пакеты, собранные вами, от всех остальных.

Наконец, ставим собранный пакет:

pacman -U ttf-ms-fonts-2.0-10-any.pkg.tar.xz

Кстати, с помощью pacman -U также можно откатываться к более ранним версиям пакетов. Где искать кэш со скаченными пакетами, вы уже знаете. Если же пакета нет в кэше, его всегда можно найти на archive.archlinux.org.

Дополнение: На случай, если пакет из AUR зависит от других пакетов из AUR, предусмотрено ряд утилит, благодаря которым не придется ставить все эти пакеты вручную, как описано выше. Методом тыка я решил попробовать yaourt и оказался им вполне доволен. Утилита работает в точности, как pacman, только дополнительно позволяет устанавливать пакеты из AUR.

Единственная неприятная особенность этой утилиты заключается в том, что при сборке пакетов из AUR она задает кучу разных вопросов в стиле:

Edit PKGBUILD ? [Y/n] ("A" to abort)

Исправить такое поведение можно, прописав в ~/.bashrc:

alias yaourt='yaourt --noconfirm'

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

Собираем пакеты из исходников с помощью ABS

Под аббревиатурой ABS (Arch Build System) понимается сразу несколько довольно разных вещей. Это (1) сам механизм сборки пакетов в Arch Linux, с файлами PKGBUILD, утилитой makepkg и прочим, как было описано выше. ABS называется и (2) аналог дерева портов из мира FreeBSD, использующий (1), и о котором пойдет речь в этом параграфе. Также (3) ABS может означать утилиту abs, предназначенную для работы с (2). Наконец, (4) поскольку официальные пакеты собираются из ABS в смысле (2), аббревиатуру ABS часто используют в смысле «противоположность AUR». Несмотря на всю эту неразбериху, значение «ABS» обычно легко понять по контексту.

Итак, для работы с ABS в смысле (2) первым делом ставим утилиту abs:

sudo pacman -S abs

С помощью этой утилиты скачиваем ABS:

sudo abs

Все исходники сваливаются в /var/abs. У меня они заняли около 82 Мб. Далее работа с ABS осуществляется точно так же, как с AUR. Интересно, что makepkg не позволяет запускать себя из под рута, в связи с чем приходится копировать исходники пакетов из /var/abs к себе в ~/packages, и держать их там вместе с AUR. Это разумно сразу по нескольким причинам. Во-первых, вы всегда точно знаете, какие пакеты вы собираете из исходников, а какие — нет. Во-вторых, сборка пакетов из ABS часто означает их сборку со своими параметрами, то есть, с изменением PKGBUILD. Чтобы эти изменения не терялись при обновлении ABS, вы можете держать у себя в ~/packages не только измененный PKGBUILD, но и патч к нему.

В файле /etc/abs.conf можно указать, что утилита abs должна тянуть, а что нет. Например, можно не тянуть каталог core и дополнительно тянуть testing.

Обновление ABS производится так:

# обновить все дерево
sudo abs
# обновить конкретный пакет
sudo abs extra/mutt

Чтобы при следующем обновлении бинарных пакетов pacman не затер пакеты, собранное из исходников, в PKGBUILD следует дописать:

groups=('modified')

… а в /etc/pacman.conf:

IgnoreGroup = modified

Помимо прочего, при помощи ABS можно собрать кастомное ядро Linux. Сорцы соответствующего пакета вы найдете в /var/abs/core/linux.

Заключение

Увы, невозможно рассказать все в рамках одного поста. Например, мы не рассмотрели создание собственных пакетов и их заливку на AUR или такую интересную возможность pacman, как хуки. Надеюсь, что мне удалось дать вам 10% информации, которая помогает решить 90% всех проблем. Остальные 90% информации ищите в официальной вики и манах. Повторюсь, у Arch Linux они действительно классные.

Метки: .


Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.