Управление пакетами в Arch Linux с помощью ABS и pacman
2 ноября 2016
Сегодня мы поговорим об основах управления пакетами в Arch Linux. В общем и целом, идея напоминает ports и packages из мира FreeBSD. То есть, можно как компилировать софт из исходников, так и ставить бинарные пакеты. Но есть ряд существенных отличий. Итак, давайте же во всем разберемся!
Использование pacman
Pacman (название означает package manager) — это местная утилита для управления бинарными пакетами, аналог apt-get из мира Debian / Ubuntu или yum из мира RHEL / CentOS / Fedora. Пользоваться им очень просто.
Получение общей справки или справки по конкретным командам:
pacman -S --help
Флаги с буквами в верхнем регистре означают команды. Из них основные — это -S
(sync), -Q
(query) и -R
(remove). Все они имеют дополнительные флаги, которые пишутся в нижнем регистре. Например, s
означает search. Зная типичные дополнительные флаги, получаем сравнительно простую и понятную схему. Например, -Ss
означает поиск по всем пакетам, а -Qs
означает поиск только по установленным пакетам. В итоге, основные действия с пакетами выполняются следующим образом.
Установить пакеты:
Поиск пакетов по регулярному выражению:
Установка группы пакетов:
Список пакетов, входящих в группу:
Список всех доступных групп:
pacman -Sgg
# только имена групп
pacman -Sgg | cut -d ' ' -f 1 | uniq
Обновить базу данных пакетов:
Обновить установленные пакеты:
Список пакетов, для которых есть обновления:
Список установленных пакетов:
pacman -Qi | grep Name
Поиск установленного пакета по регулярному выражению:
Список файлов, принадлежащих пакету:
Определить, к какому пакету относится заданный файл:
Удалить пакет:
Удаление пакетов, установленных, как зависимости, и ставших ненужными (autoremove):
Некоторые пакетные менеджеры умеют «замораживать» пакеты, то есть, не обновлять их при наличии обновлений (hold в Debian и деривативах, lock во FreeBSD). Для достижения того же эффекта в Arch Linux в файле /etc/pacman.conf в секцию [options]
нужно дописать что-то вроде:
Заканчивая рассказ про pacman, хочется отметить, что список серверов с пакетами находится в /etc/pacman.d/mirrorlist, а кэш загруженных пакетов следует искать в /var/cache/pacman/pkg/. Для очистки кэша используйте команду:
Логи пишутся в /var/log/pacman.log. В них вы всегда найдете, что, на что, и когда было обновлено.
Пример использования AUR
AUR (аббревиатура от Arch User Repository) — это каталог пакетов для Arch Linux, поддерживаемых пользователями (типа как PPA в мире Ubuntu). На сайте aur.archlinux.org есть поиск, комментарии к пакетам, и многое другое.
Для примера рассмотрим установку пакета ttf-ms-fonts, который содержит шрифты от Microsoft, и по более-менее понятным причинам доступен только в AUR:
# необходимые для сборки других пакетов
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
и обновляясь на новую версию.
Будучи в репозитории говорим:
Здесь ключ -s
означает необходимость установить недостающие зависимости с помощью pacman. Настройки makepkg хранятся в файле /etc/makepkg.conf. Это местный аналог /etc/make.conf из мира FreeBSD. В нем можно указать CFLAGS, CXXFLAGS и подобные вещи. Очень рекомендуется указать в параметре PACKAGER свое имя и email. Это позволит отличать пакеты, собранные вами, от всех остальных.
Наконец, ставим собранный пакет:
Кстати, с помощью pacman -U
также можно откатываться к более ранним версиям пакетов. Где искать кэш со скаченными пакетами, вы уже знаете. Если же пакета нет в кэше, его всегда можно найти на archive.archlinux.org.
Дополнение: На случай, если пакет из AUR зависит от других пакетов из AUR, предусмотрено ряд утилит, благодаря которым не придется ставить все эти пакеты вручную, как описано выше. Методом тыка я решил попробовать yaourt и оказался им вполне доволен. Утилита работает в точности, как pacman, только дополнительно позволяет устанавливать пакеты из AUR.
Единственная неприятная особенность этой утилиты заключается в том, что при сборке пакетов из AUR она задает кучу разных вопросов в стиле:
Исправить такое поведение можно, прописав в ~/.bashrc:
Из интересных фишек 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:
С помощью этой утилиты скачиваем 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 следует дописать:
… а в /etc/pacman.conf:
Помимо прочего, при помощи ABS можно собрать кастомное ядро Linux. Сорцы соответствующего пакета вы найдете в /var/abs/core/linux.
Заключение
Увы, невозможно рассказать все в рамках одного поста. Например, мы не рассмотрели создание собственных пакетов и их заливку на AUR или такую интересную возможность pacman, как хуки. Надеюсь, что мне удалось дать вам 10% информации, которая помогает решить 90% всех проблем. Остальные 90% информации ищите в официальной вики и манах. Повторюсь, у Arch Linux они действительно классные.
Метки: Linux.
Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.