Менеджер пакетов //[[https://archlinux.org/pacman/|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. В этом файле, пользователь может указать все нужные ему настройки программы. Подробнее о конфигурировании можно прочесть в [[https://www.archlinux.org/pacman/pacman.conf.5.html|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 имя_пакета) - могут возникнуть проблемы с зависимостями. В первую очередь, перед установкой новых пакетов, выполняйте полное [[#Upgrading packages|обновление]] системы. === Установка пакетов из файлов === В некоторых случаях (в основном, когда система сломалась или есть неразрешённые зависимости) требуется скачать с репозитория файлы пакетов и сделать непосредственную установку. В этом случае используется ключ //-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 является мощным инструментом по управлению пакетами, но он не сможет обработать все возможные ситуации. Если вас это смущает - прочтите [[The Arch Way|Путь Arch Linux]]. Пользователь должен быть внимателен и сам заниматься обеспечением работоспособности своей системы. //При выполнении обновления системы, крайне важно, читать и осмысливать всю информацию которую выводит pacman.// Если конфигурационный файл, измененный вами, для новой версии пакета нуждается в обновлении - pacman предложит вам объединить его с файлом pacnew. Не забывайте, что вывод pacman заноситься в /var/log/pacman.log. Перед обновлением желательно посетить [[https://www.archlinux.org/|главную страницу Arch Linux]], [[https://www.archlinux.org.ru/| главную страницу русскоязычного сообщества 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 часов, прежде чем обновления станут доступны вам. В качестве решения можно посоветовать сменить зеркало. На [[https://www.archlinux.de/?page=MirrorStatus|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). Почитайте, о скрипте, проверяющем файловую систему на наличие //брошенных// файлов. * **//Мне нужен пакет с определенным файлом. Как узнать какому пакету это файл принадлежит?//**\\ Установите pkgtools, в его состав входит pkgfile, использующий отдельную базу данных со всеми файлами и связанными с ними пакетами. * **//pacman полностью не работоспособен! Как мне его переустановить?//**\\ Если pacman не работает и не получается его восстановить - скачайте вручную пакеты (openssl, libarchive, libfetch и pacman) и распакуйте их в корневой раздел. Бинарный pacman будет восстановлен вместе с конфигурационным файлом по умолчанию. Затем, для поддержания целостности базы данных пакетов, переустановите скачанные пакеты стандартными средствами pacman. Дополнительную информацию и пример (устарел) скрипта, автоматизирующего этот процесс, можно найти в [[https://bbs.archlinux.org/viewtopic.php?id=95007|этом]] сообщении форума. ===== Смотрите также ===== * [[http://www.nixzeya.ru.net/forum/index.php?topic=179.0|Обсуждение статьи на форуме]] * [[https://wiki.archlinux.org/index.php/Pacman|Версию страницы на http://wiki.archlinux.org на английском]] * [[https://wiki.archlinux.org/index.php/Pacman_%28%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%29|Версию страницы на http://wiki.archlinux.org на русском]]