Pacman
Материал из Nix.zeya.org
Менеджер пакетов 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, для своевременного получения информации рекомендуется подписаться на список рассылки arch-dev-public.
Использование
Чтобы узнать обо всех возможностях pacman - изучите 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, то при установке группы будут переустановлены все ранее установленные в систему и принадлежащие этой группе пакеты (даже если установленные в системе пакеты будут иметь последнюю доступную версию).
| Внимание! При установке не достаточно одного обновления списка пакетов (например 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" ("записи в базу данных"):
- Загрузитесь используя Arch live CD
- Смонтируйте корневую файловую систему
- Обновите базу данных pacman с помощью pacman -Syy
- Переустановите сломанный пакет через pacman -r /путь/к/корневому_разделу -S package
- Я установил программу используя make install; теперь эти файлы не принадлежат ни одному из пакетов!
При обнаружении "конфликтующих файлов", чтобы их не перезаписывать вручную, можно использовать pacman с ключом -f (pacman -Sf).
Почитайте pacman Tips#Getting a list of files not owned by any package, о скрипте, проверяющем файловую систему на наличие брошенных файлов.
- Мне нужен пакет с определенным файлом. Как узнать какому пакету это файл принадлежит?
Установите pkgtools, в его состав входит pkgfile, использующий отдельную базу данных со всеми файлами и связанными с ними пакетами.
- pacman полностью не работоспособен! Как мне его переустановить?
Если pacman не работает и не получается его восстановить - скачайте вручную пакеты (openssl, libarchive, libfetch и pacman) и распакуйте их в корневой раздел. Бинарный pacman будет восстановлен вместе с конфигурационным файлом по умолчанию. Затем, для поддержания целостности базы данных пакетов, переустановите скачанные пакеты стандартными средствами pacman. Дополнительную информацию и пример (устарел) скрипта, автоматизирующего этот процесс, можно найти в этом сообщении форума.