Менеджер пакетов pacman - является одной из основных особенностей Arch Linux. Он сочетает в себе простой формат бинарных пакетов и легкую в использовании систему сборки (смотрите Arch Build System и makepkg). Pacman позволяет пользователям с легкостью управлять и настраивать под себя пакеты, вне зависимости от того, из официального ли они репозитария Arch или собранные самостоятельно.

Pacman, синхронизируя пакеты с главным сервером, поддерживает систему в актуальном состоянии. Такая клиент-серверная модель, позволяет скачивать/устанавливать пакеты со всеми требуемыми зависимостями всего одной командой.

Pacman написан на языке C и использует формат пакетов .pkg.tar.xz. Официальный пакет pacman включает в себя много дополнительных полезных инсрументов, таких как makepkg, pactree, vercomp и другие. Весь перечень можно получить с помощью команды:

 # pacman -Ql pacman | grep bin

Конфигурация

Основные настройки pacman находятся в /etc/pacman.conf. В этом файле, пользователь может указать все нужные ему настройки программы. Подробнее о конфигурировании можно прочесть в man pacman.conf.

Основные Параметры

Основные параметры находятся в секции [options]. Для получения дополнительной информации о параметрах - прочтите страницу man или изучите установленный по умолчанию файл pacman.conf.

Пропуск обновления пакетов

Для пропуска обновления какого-либо пакета, добавьте его название в строку:

 IgnorePkg=имя_пакета

В случае, если необходимо в строке IgnorePkg перечислить несколько пакетов - разделяйте имена пакетов пробелами:

 IgnorePkg=имя_пакета1 имя_пакета2 имя_пакета3

Пропуск обновления группы пакетов

Как и в случае с пакетом, вы также можете запретить обновления группы пакетов, например так:

 IgnoreGroup=имя_группы

Репозитории

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

Все официальные репозитории перечислены в одном файле - /etc/pacman.d/mirrorlist, для доступа к ним используется переменная $repo, таким образом достаточно поддерживать в актуальном состоянии только один список.

Далее приведен пример использования зеркал официальных репозиториев, которые перечислены в /etc/pacman.d/mirrorlist.

[core]
# Добавьте свои предпочитаемые сервера сюда и они будут использоваться в первую очередь
Include=/etc/pacman.d/mirrorlist
 
[extra]
# Добавьте свои предпочитаемые сервера сюда и они будут использоваться в первую очередь
Include=/etc/pacman.d/mirrorlist
 
[community]
# Добавьте свои предпочитаемые сервера сюда и они будут использоваться в первую очередь
Include=/etc/pacman.d/mirrorlist

Будьте осторожны при использовании репозитория testing. Пакеты в нём активно разрабатываются и обновляются, это может сказаться на стабильности и работоспособности других пакетов или системы в целом. Людям, использующим репозиторий testing, для своевременного получения информации рекомендуется подписаться на [https://mailman.archlinux.org/mailman/listinfo/arch-dev-public список рассылки arch-dev-public].

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

Чтобы узнать обо всех возможностях pacman - изучите [https://archlinux.org/pacman/pacman.8.html man pacman]. Примеры ниже - это только небольшая подборка доступных операций.

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

Установка определенных пакетов

Для установки одного пакета или группы пакетов (включая зависимости), используйте следующую команду:

 # pacman -S имя_пакета1 имя_пакета2 ...

Если пакет имеет несколько версий в разных репозиториях (например в extra и testing). Можно указать, откуда именно следует установить пакет:

 # pacman -S extra/имя_пакета
 # pacman -S testing/имя_пакета

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

Некоторые пакеты принадлежат к группе пакетов, которые могут быть установлены одновременно. Например, при выполнении команды:

 # pacman -S gnome

будут установлены все пакеты входящие в группу gnome. Чтобы увидеть список пакетов принадлежащих к группе gnome, выполните:

 # pacman -Sg gnome

Перечень доступных групп пакетов можно изучить посетив https://www.archlinux.org/groups/.

Если не будет использована опция --needed, то при установке группы будут переустановлены все ранее установленные в систему и принадлежащие этой группе пакеты (даже если установленные в системе пакеты будут иметь последнюю доступную версию). {{внимание|1=При установке не достаточно одного обновления списка пакетов (например pacman -Sy имя_пакета) - могут возникнуть проблемы с зависимостями. В первую очередь, перед установкой новых пакетов, выполняйте полное обновление системы.

Установка пакетов из файлов

В некоторых случаях (в основном, когда система сломалась или есть неразрешённые зависимости) требуется скачать с репозитория файлы пакетов и сделать непосредственную установку. В этом случае используется ключ -U . Пример:

 # ls 
   gcc-4.6.2-7-i686.pkg.tar.xz      gcc-libs-4.6.2-7-i686.pkg.tar.xz
   gcc-4.6.2-7-i686.pkg.tar.xz.sig  gcc-libs-4.6.2-7-i686.pkg.tar.xz.sig
 # pacman -U gcc-4.6.2-7-i686.pkg.tar.xz gcc-libs-4.6.2-7-i686.pkg.tar.xz

Если pacman найдёт зависимости для данного файла, то 1) либо начнёт скачивать из репозитория (при условии что информация о пакетах обновлена), либо 2) попросит сперва установить недостающие пакеты. Недостающие пакеты также можно скачать вручную.

Удаление Пакетов

Для удаления пакета, без удаления установленных зависимостей:

 # pacman -R имя_пакета

Для удаления пакета со всеми зависимостями, не используемыми другими установленными пакетами:

 # pacman -Rs имя_пакета

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

 # pacman -Rsc имя_пакета

По умолчанию pacman создает резервные копии конфигурационных файлов удаляемых приложений с помощью добавления к ним расширения: .pacsave. Если вы хотите удалить и эти файлы - используйте ключ -n:

 # pacman -Rn имя_пакета

pacman не удаляет конфигурационных файлов, созданных самими приложениями (например "dot-файлы" в вашей домашней папке).

Обновление Системы

pacman может обновить все пакеты системы одной командой. Количество пакетов зависит от того, насколько свежие пакеты стоят в вашей системе. Лучший вариант - синхронизация базы данных репозиториев И обновление вашей системы одной командой:

 # pacman -Syu

Внимание! В связи с тем, что Arch является постоянно-обновляемым дистрибутивом, пользователям следует помнить, что после или в процессе обновления могут возникнуть непредвиденные трудности. Поэтому обновляться следует с осторожностью. Это означает, что если, например, ожидаются большие изменения или нововведения в обновляемых пакетах, то обновлять систему лучше тогда, когда у пользователя будет достаточно свободного времени и он будет готов к решению возможных проблем.

pacman является мощным инструментом по управлению пакетами, но он не сможет обработать все возможные ситуации. Если вас это смущает - прочтите Путь Arch Linux. Пользователь должен быть внимателен и сам заниматься обеспечением работоспособности своей системы. При выполнении обновления системы, крайне важно, читать и осмысливать всю информацию которую выводит pacman. Если конфигурационный файл, измененный вами, для новой версии пакета нуждается в обновлении - pacman предложит вам объединить его с файлом pacnew.

Не забывайте, что вывод pacman заноситься в /var/log/pacman.log.

Перед обновлением желательно посетить главную страницу Arch Linux, главную страницу русскоязычного сообщества Arch Linux и проверить там последние новости (или подписаться на канал RSS): для обновлений требующих дополнительного вмешательства (если выполнения указанных pacman-ом действий не достаточно) будут добавлены соответствующие новости.

Если решить проблемы согласно инструкциям не удаётся - поищите подобные сообщения на форуме. Вполне возможно, что другие пользователи столкнувшиеся с подобными проблемами уже предоставили варианты по её решению.

Запросы к Базе Данных Пакетов

pacman, с помощью флага -Q, может искать пакеты в локальной базе данных; см.:

 $ pacman -Q --help

и, с помощью флага -S, в базе данных (репозитариях); см.:

 $ pacman -S --help

pacman умеет искать пакеты в базе данных, как по названиям, так и по описаниям:

 $ pacman -Ss условие1 условие2 ...

Поиск пакета по имени в базе данных (вывод без дополнительной информации):

 $ pacman -Sqs  условие1 условие2 ...

Для поиска среди установленных пакетов:

 $ pacman -Qs условие1 условие2 ...

Для отображения обширной информации о данном пакете:

 $ pacman -Si имя_пакета

для установленных пакетов:

 $ pacman -Qi имя_пакета

Использование сдвоенного флага -i позволит просмотреть список резервных копий файлов и список измененных файлов:

 $ pacman -Qii имя_пакета

Для получения списка файлов установленного пакета:

 $ pacman -Ql имя_пакета

Для получения списка файлов неустановленного пакета можно использовать утилиту pkgfile, из состава пакета pkgtools, или nosr, входящую в пакет nosr-git, который расположен в AUR.

Чтобы узнать какому пакету принадлежит нужный файл:

 $ pacman -Qo /путь/к/файлу/имя_файла

Для получения списка пакетов, которые больше не требуются как зависимости (пакеты, которые могут быть безопасно удалены или сироты):

 $ pacman -Qdt

Для отображения зависимостей в виде дерева:

 $ pactree имя_пакета

Для получения списка установленных пакетов, которые зависят от вашего пакета - можно воспользоваться утилитой whoneeds из состава пакета pkgtools:

 $ whoneeds имя_пакета

Получение Списка Установленных Пакетов для Быстрого Восстановления Системы

Хорошей практикой явлется сохранение списка всех установленых пакетов. Если ваша система "упала" и её сложно восстановить, pacman может легко переустановить эти пакеты.

Сначала, сохраните в список пакетов (доступных в репозитории):

 pacman -Qqe | grep -v "$(pacman -Qmq)" > pkglist
 # безопасная, но и более сложная альтернатива (во избежание удаления частичных совпадений)
 # comm -13 <(pacman -Qmq | sort) <(pacman -Qqe | sort) > pkglist

Сохраните этот файл на флешке или на другом носителе.

Скопируйте файл pkglist в новую систему, перейдите в эту папку.

Для восстановления используйте команду:

 # pacman -S $(cat pkglist)

Получение Списка Файлов не Принадлежащих Любому Пакету

Если вы всегда хотите держать свою систему в чистоте и уважаете Путь Arch, вы должны иногда проверять файлы отсутствующие в базе данных pacman. Эти файлы, зачастую установлены сторонними приложениями с использованием ./configure; make; make install и т.п. Вы можете найти все эти установленные файлы (или симлинки) используя этот простой скрипт:


 #!/bin/bash
 time /usr/bin/pacman -Ql | cut -d ' ' -f 2- | sort -u > db.txt
 time find /arch /bin /boot /etc /lib /opt /sbin /usr 2>/dev/null | while read i; do
 	if [ ! -d "$i" ]; then
 		echo "$i"
 	fi;
 done | sort -u > fs.txt
 time comm -23 fs.txt db.txt > non-db.txt
 
 #для проверки:
 #cat non-db.txt | while read i; do pacman -Qo "$i" 2>&1; done | tee test.txt

заметьте - все файлы указанные в non-db.txt НЕ БУДУТ удалены без подтверждения. Здесь могут находиться конфигурационные файлы, журналы и др. Используйте этот список только если знаете, что вы делаете.

Дополнительные команды

Обновление системы и установка списка пакетов (за одну операцию):

 # pacman -Syu имя_пакета1 имя_пакета2 ...

Скачать пакет, но не устанавливать его:

 # pacman -Sw имя_пакета

Установить локальный пакет (не из репозитория):

 # pacman -U /путь/к/пакету/имя_пакета-version.pkg.tar.xz

Установить не локальный пакет (не из репозитория):

 # pacman -U http://www.example.com/repo/example.pkg.tar.xz

Удалить из кэша (/var/cache/pacman/pkg) неустановленные пакеты: Внимание! Будут удалены все пакеты из кэша. Поэтому, в случае возникновения проблем после обновлениий - появятся дополнительные трудности, связанные с откатом версий пакетов.

 # pacman -Sc

Полная очистка кэша пакетов: Внимание! Будут удалены все пакеты из кэша. Выполняйте это только в том случае, если у вас всё нормально работает и вам не придётся откатывать любой пакет.

 # pacman -Scc

В качестве альтернативы ключам -Sc и -Scc - можно использовать пакет Cacheclean, доступный в AUR. Это скрипт на python, который позволяет выборочно очищать кэш pacman'а от старых версий пакетов.

Частичные обновления официально не поддерживаются

Arch Linux постоянно обновляемый дистрибутив и это значит, что в репозиториях всегда находятся новые версии библиотек. Разработчики и доверенные пользователи собирают пакеты для репозиториев с использованием этих библиотек. Для пакетов установленных локально (например пакеты из AUR), нужно самостоятельно решать вопрос с зависимостями согласно данным soname.

Именно поэтому частичное обновление не поддерживается. Не используйте pacman -Sy package или другие эквиваленты pacman -Sy и pacman -S package. Всегда перед установкой пакетов синхронизируйте репозитории и обновляйте систему полностью. По той же самой причине нужно быть осторожными при использовании IgnorePkg и IgnoreGroup.

Если после частичного обновления оказалось, что бинарные файлы не могут найти нужных версий библиотек и проблему не возможно "решить" созданием символической ссылки (библиотеки не имеют обратной совместимости) - выполните pacman -Syu, как правило этого будет достаточно для устранения проблемы.

Устранение проблем

  • Обновление пакета XYZ сломало мою систему!

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

Запомните основное правило - не обновляйте систему "вслепую". Всегда внимательно изучайте список обновляемых пакетов. Обращайте внимание на обновление "критически важных" компонентов (linux, xorg-server, и т.д.). Если такие пакеты есть - проверьте наличие новостей на https://www.archlinux.org/ и просмотрите последние сообщения на форуме, возможно кто-то уже столкнулся с проблемами при обновлении.

Если известно/ожидается, что после обновления могут возникнуть проблемы - pacman выведет соответствующее сообщение. Если вы упустили какую-то информацию, которую вывел pacman, то её можно еще раз просмотреть в (/var/log/pacman.log).

Теперь, если не было никаких предупреждений от pacman, отсутствуют соответствующие новости на https://www.archlinux.org/ и нет сообщений относительно обновлений на форуме, имеет смысл обратиться за помощью на форум, IRC-канал, или откатить пакет к работающей версии.

Перечитайте последний абзац.

  • Я знаю что для пакета ABC доступны обновления, но pacman сообщает мне, что система в актуальном состоянии!

Зеркала pacman синхронизируются не мгновенно. Иногда может пройти более 24 часов, прежде чем обновления станут доступны вам.

В качестве решения можно посоветовать сменить зеркало. На MirrorStatus можно посмотреть состояние зеркал.

  • При обновлении появляется сообщение об ошибке: "file exists in filesystem" ("файл существует в файловой системе")!
 error: could not prepare transaction
 error: failed to commit transaction (conflicting files)
 package: /path/to/file exists in filesystem
 Errors occurred, no packages were upgraded.

Почему это происходит: pacman при обнаружении конфликтующих файлов, по умолчанию, не будет их перезаписывать автоматически. Это не ошибка, так сделано специально. (узнать какому пакету принадлежит файл, если таковой имеется, можно с помощью pacman -Qo.)

Вопрос решается тривиально. Сначала проверьте не принадлежит ли файл другому пакету: (pacman -Qo /path/to/file). Если принадлежит - создайте отчет об ошибке]]. Если проблемный файл не нужен другим пакетам - переименуйте его и перезапустите команду обновления. Если в дальнейшем проблем не возникнет, то старый файл можно удалить.

  • При установке пакета я получаю сообщение об ошибке: "not found in sync db"

Для начала убедитесь, что пакет вообще существует (и вы нигде не опечатались!). Если пакет не существует, то проблема может быть в том, что ваша база пакетов не синхронизирована с репозиториями или репозитории неправильно настроены. Для принудительного обновления списка пакетов попробуйте выполнить pacman -Syy.

  • pacman несколько раз обновляет один и тот же пакет!

Это может быть связано с дублированием записей в /var/lib/pacman/local/, к примеру имеется два экземпляра linux. pacman -Qi выведет правильную версию, а pacman -Qu покажет её как устаревшую и, следовательно, требующую обновления.

Решение: удалить лишнюю запись из /var/lib/pacman/local/.

pacman версии 3.4, в случае обнаружения повторяющихся записей, должен вывести сообщение об ошибке.

  • pacman сбоит при обновлении!

Если при попытке удаления, переустановки или обновления пакетов pacman падает с ошибкой "database write" ("записи в базу данных"):

  1. Загрузитесь используя Arch live CD
  2. Смонтируйте корневую файловую систему
  3. Обновите базу данных pacman с помощью pacman -Syy
  4. Переустановите сломанный пакет через pacman -r /путь/к/корневому_разделу -S package
  • Я установил программу используя make install; теперь эти файлы не принадлежат ни одному из пакетов!

При обнаружении "конфликтующих файлов", чтобы их не перезаписывать вручную, можно использовать pacman с ключом -f (pacman -Sf).

Почитайте, о скрипте, проверяющем файловую систему на наличие брошенных файлов.

  • Мне нужен пакет с определенным файлом. Как узнать какому пакету это файл принадлежит?

Установите pkgtools, в его состав входит pkgfile, использующий отдельную базу данных со всеми файлами и связанными с ними пакетами.

  • pacman полностью не работоспособен! Как мне его переустановить?

Если pacman не работает и не получается его восстановить - скачайте вручную пакеты (openssl, libarchive, libfetch и pacman) и распакуйте их в корневой раздел. Бинарный pacman будет восстановлен вместе с конфигурационным файлом по умолчанию. Затем, для поддержания целостности базы данных пакетов, переустановите скачанные пакеты стандартными средствами pacman. Дополнительную информацию и пример (устарел) скрипта, автоматизирующего этот процесс, можно найти в этом сообщении форума.

Смотрите также

Печать/экспорт