pacman (Русский)
| Описание |
|---|
| pacman - пакетный менеджер Arch Linux. Менеджеры пакетов используются для установки, обновления и удаления программного обеспечения. В данной статье рассматриваются основные приемы и советы по устранению неполадок. |
| Обзор |
| Packages in Arch Linux are built using makepkg and a custom build script for each package (known as a PKGBUILD). Once packaged, software can be installed and managed with pacman. PKGBUILDs for software in the official repositories are available from the ABS tree; thousands more are available from the (unsupported) Arch User Repository. |
| Дополнительно |
| Downgrading Packages (Русский) |
| Improve Pacman Performance (Русский) |
| pacman GUI Frontends (Русский) |
| pacman Rosetta |
| pacman Tips |
| Pacman package signing |
| FAQ_(Русский)#Управление_пакетами |
| pacman-key (Русский) |
| Pacnew and Pacsave Files |
| Полезные ссылки |
| libalpm(3) Manual Page |
| pacman(8) Manual Page |
| pacman.conf(5) Manual Page |
| repo-add(8) Manual Page |
Система управления пакетами pacman является одной из основных особенностей Arch Linux. Он сочетает в себе простой формат бинарных пакетов и легкую в использовании систему сборки (смотрите Arch Build System и makepkg). Pacman позволяет пользователям с легкостью управлять и настраивать под себя пакеты, вне зависимости от того, из официального ли они репозитория Arch или собраны самостоятельно.
Pacman, синхронизируя пакеты с главным сервером, поддерживает систему в актуальном состоянии. Такая клиент-серверная модель позволяет скачивать/устанавливать пакеты со всеми требуемыми зависимостями всего одной командой.
Pacman написан на языке C и использует формат пакетов .pkg.tar.xz.
Конфигурация
Основные настройки pacman находятся в /etc/pacman.conf. В этом файле пользователь может указать все нужные ему настройки программы. Подробнее о конфигурировании можно прочесть в man pacman.conf.
Есть пасхалка: при добавлении в # Misc options параметра ILoveCandy скучные решетки превращаются в пакмена и точки, которые он ест :D
Основные параметры
Основные параметры находятся в секции [options]. Для получения дополнительной информации о параметрах прочтите страницу man или изучите установленный по умолчанию файл pacman.conf.
Пропуск обновления пакетов
Для пропуска обновления какого-либо пакета добавьте его название в строку:
IgnorePkg=имя_пакета
В случае, если необходимо в строке IgnorePkg перечислить несколько пакетов, разделяйте их имена пробелами:
IgnorePkg=имя_пакета1 имя_пакета2 имя_пакета3
Пропуск обновления группы пакетов
Как и в случае с пакетом, вы также можете запретить обновления группы пакетов, например так:
IgnoreGroup=имя_группы
Игнорирование установки файлов в систему
Для пропуска каталогов, в которые должны будут устанавливаться файлы, перечислите эти каталоги в NoExtract. Например, для игнорирования установки юнитов systemd:
NoExtract=usr/lib/systemd/system/*
Репозитории
В этом разделе файла pacman.conf указываются репозитории, которые будут использоваться. Их можно указать прямо здесь или подключить из другого файла.
Все официальные репозитории перечислены в одном файле - /etc/pacman.d/mirrorlist, для доступа к ним используется переменная $repo; таким образом достаточно поддерживать в актуальном состоянии только один список.
Далее приведен пример использования зеркал официальных репозиториев, которые перечислены в /etc/pacman.d/mirrorlist.
#[testing] #SigLevel = PackageRequired #Include = /etc/pacman.d/mirrorlist [core] #SigLevel = PackageRequired Include=/etc/pacman.d/mirrorlist [extra] #SigLevel = PackageOptional Include = /etc/pacman.d/mirrorlist #[community-testing] #SigLevel = PackageRequired #Include = /etc/pacman.d/mirrorlist [community] #SigLevel = PackageOptional Include = /etc/pacman.d/mirrorlist #Если в вашей x86_64 системе необходимо запускать 32-битные программы, #раскоментируйте нужные multilib репозитории. #[multilib-testing] #SigLevel = PackageRequired #Include = /etc/pacman.d/mirrorlist [multilib] #SigLevel = PackageOptional Include = /etc/pacman.d/mirrorlist # Использование собственного репозитория. Обратитесь к справочной странице pacman для # получения дополнительной информации по созданию собственных репозиториев. #[custom] #SigLevel = Optional TrustAll #Server = file:///home/custompkgs
Безопасность пакетов
В Pacman 4 реализован дополнительный уровень безопасности устанавливаемых пакетов - подписи пакетов. Для включения проверки подписей перейдите сюда.
Использование
Чтобы узнать обо всех возможностях pacman, изучите man pacman. Примеры ниже - это только небольшая подборка доступных операций.
Установка пакетов
Установка определенных пакетов
Для установки одного пакета или группы пакетов (включая зависимости) используйте следующую команду:
# pacman -S имя_пакета1 имя_пакета2 ...
Если пакет имеет несколько версий в разных репозиториях (например в [extra] и [testing]), можно указать, откуда именно следует установить пакет:
# pacman -S extra/имя_пакета
Установка группы пакетов
Некоторые пакеты принадлежат к группе пакетов, которые могут быть установлены одновременно. Например, при выполнении команды:
# pacman -S gnome
будут установлены все пакеты, входящие в группу gnome. Чтобы увидеть список пакетов, принадлежащих к группе gnome, выполните:
# pacman -Sg gnome
Перечень доступных групп пакетов можно изучить, посетив https://www.archlinux.org/groups/.
Удаление пакетов
Для удаления пакета без удаления установленных зависимостей:
# pacman -R имя_пакета
Для удаления пакета со всеми зависимостями, не используемыми другими установленными пакетами:
# pacman -Rs имя_пакета
Для удаления пакета, его зависимостей и всех пакетов, зависящих от целевого пакета:
# pacman -Rsc имя_пакета
Для удаления пакета, который требуется другому пакету, без удаления зависимого пакета:
# pacman -Rdd package_name
По умолчанию pacman создает резервные копии конфигурационных файлов удаляемых приложений с помощью добавления к ним расширения .pacsave. Если вы хотите удалить и эти файлы, используйте ключ -n:
# pacman -Rn имя_пакета
Обновление системы
pacman может обновить все пакеты системы одной командой. Количество пакетов зависит от того, насколько свежие пакеты стоят в вашей системе. Лучший вариант - синхронизация базы данных репозиториев И обновление вашей системы одной командой (не будут обновлены пакеты из 'локальных' и не настроенных репозиториев):
# pacman -Syu
pacman является мощным инструментом по управлению пакетами, но он не сможет обработать все возможные ситуации. Если вас это смущает - прочтите Путь Arch Linux. Пользователь должен быть внимателен и сам заниматься обеспечением работоспособности своей системы. При выполнении обновления системы крайне важно читать и осмысливать всю информацию, которую выводит pacman. Если вы изменяли конфигурационный файл, то при обновлении, во избежание перезаписи, будет создан новый конфигурационный файл .pacnew. pacman предложит объединить его с вашим конфигурационным файлом. Выполнять объединение файлов придется вручную и, лучше всего, сразу после обновления. Для получения дополнительной информации обратитесь к руководству Pacnew and Pacsave Files.
Перед обновлением желательно посетить главную страницу 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
Частичные обновления официально не поддерживаются
Arch Linux - постоянно обновляемый дистрибутив, и это значит, что в репозиториях всегда находятся новые версии библиотек. Разработчики и доверенные пользователи собирают пакеты для репозиториев с использованием этих библиотек. Для пакетов, установленных локально (например, пакеты из AUR), нужно самостоятельно решать вопрос с зависимостями согласно данным soname.
Именно поэтому частичное обновление не поддерживается. Не используйте pacman -Sy package или другие эквиваленты pacman -Sy и pacman -S package. Всегда перед установкой пакетов синхронизируйте репозитории и обновляйте систему полностью. По той же самой причине нужно быть осторожными при использовании IgnorePkg и IgnoreGroup.
Если после частичного обновления оказалось, что бинарные файлы не могут найти нужных версий библиотек и проблему невозможно "решить" созданием символической ссылки (библиотеки не имеют обратной совместимости), выполните pacman -Syu, как правило, этого будет достаточно для устранения проблемы.
Устранение проблем
Q: Мне нужно запустить pacman-key --init, но отсутствуют ssh / X или генераторы случайных чисел. Как мне получить энтропию?
updatedb. Будьте терпеливы, процесс может затянуться на длительное время. При этом переход в другую консоль, по Alt+F2-6, временно работать не будет.Q: Мне нужно запустить pacman-key --init через ssh. Как мне получить энтропию?
# sed -i 's/0/10/' /etc/conf.d/rngd # rngd -f -r /dev/urandom & # pacman-key --init
После успешного выполнения pacman-key просто остановите rngd и удалите пакет.
# killall rngd # pacman -Rns rng-tools
Q: Pacman не находит PGP ключи для импорта и не обновляет пакеты. Как можно это исправить?
# sed -i '/keyserver/ s,keys.gnupg.net,pgp.mit.edu,' /etc/pacman.d/gnupg/gpg.confPacman4 теперь готов к использованию.
Q: Обновление пакета XYZ сломало мою систему!
Запомните основное правило: не обновляйте систему "вслепую". Всегда внимательно изучайте список обновляемых пакетов. Обращайте внимание на обновление "критически важных" компонентов (linux, xorg-server и т.д.). Если такие пакеты есть, проверьте наличие новостей на https://www.archlinux.org/ и просмотрите последние сообщения на форуме, возможно, кто-то уже столкнулся с проблемами при обновлении.
Если известно/ожидается, что после обновления могут возникнуть проблемы, pacman выведет соответствующее сообщение. Если вы упустили какую-то информацию, которую вывел pacman, то её можно еще раз просмотреть в /var/log/pacman.log.
Теперь, если не было никаких предупреждений от pacman, отсутствуют соответствующие новости на https://www.archlinux.org/ и нет сообщений относительно обновлений на форуме, имеет смысл обратиться за помощью на форум, IRC-канал, или откатить пакет к работающей версии.
Перечитайте последний абзац.Q: Я знаю, что для пакета ABC доступны обновления, но pacman сообщает мне, что система в актуальном состоянии!
Q: При обновлении появляется сообщение об ошибке: "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 /path/to/file). Если принадлежит, создайте отчет об ошибке. Если проблемный файл не нужен другим пакетам, переименуйте его и перезапустите команду обновления. Если в дальнейшем проблем не возникнет, то старый файл можно удалить.
Если программа была установлена вручную, без использования pacman или его оболочек, вам нужно будет удалить программу и все ее файлы, а затем выполнить установку при помощи pacman.
Информация о каждом установленном файле хранится в файле с метаданными пакета /var/lib/pacman/local/$package-$version/files. При повреждении этого файла (он может быть пустым или отсутствовать) во время обновления пакета и будет получена ошибка "file exists in filesystem" ("файл существует в файловой системе").
Обычно такие ошибки возникают во время установки или обновления всего лишь одного пакета, поэтому вместо ручного переименования или удаления конфликтующих файлов, принадлежащих данному пакету, выполните pacman -S --force $package. После этой команды pacman принудительно перезапишет эти файлы.
pacman -Syu --force.Q: При установке пакета я получаю сообщение об ошибке: "not found in sync db"
pacman -Syy.Q: pacman несколько раз обновляет один и тот же пакет!
/var/lib/pacman/local/, К примеру, имеется два экземпляра linux. pacman -Qi выведет правильную версию, а pacman -Qu покажет её как устаревшую и, следовательно, требующую обновления.
Решение: удалить лишнюю запись из /var/lib/pacman/local/.
Q: pacman сбоит при обновлении!
- Загрузитесь, используя Arch live CD
- Смонтируйте корневую файловую систему
- Обновите базу данных pacman с помощью
pacman -Syy - Переустановите сломанный пакет через
pacman -r /путь/к/корневому_разделу -S package
Q: Я установил программу, используя make install; теперь эти файлы не принадлежат ни одному из пакетов!
--force (pacman -S --force).
Почитайте pacman Tips#Identify files not owned by any package о скрипте, проверяющем файловую систему на наличие брошенных файлов.Q: Мне нужен пакет с определенным файлом. Как узнать, какому пакету это файл принадлежит?
pkgfile, использующий отдельную базу данных со всеми файлами и связанными с ними пакетами.Q: pacman полностью неработоспособен! Как мне его переустановить?
Q: После обновления системы получаю следующее сообщение об ошибке: "unable to find root device". После перезагрузки система не загружается.
--force). Для восстановления работоспособности выполните следующие действия.
Загрузитесь с Arch live-cd. После загрузки выполните:
# mkdir /mnt/arch # mount /dev/sdaX /mnt/arch (ваш корневой раздел) # cd /mnt/arch # mount -t proc proc proc/ # mount -t sysfs sys sys/ # mount -o bind /dev dev/ # mount /dev/sdaX boot/ (ваш раздел /boot) # chroot . # pacman -Syu udev mkinitcpio # mkinitcpio -p linuxЗатем отмонтируйте смонтированные разделы и перезагрузитесь.