Pacman

Материал из OpenWiki
Перейти к: навигация, поиск

Общее

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

Pacman может держать систему в новейшем состоянии, синхронизируя пакеты с главным сервером, тем самым позволяя сознательному администратору поддерживать систему. Клиент-серверная модель позволяет скачивать/устанавливать пакеты одной командой со всеми требуемыми зависимостями (похоже на apt-get от Debian).

Pacman был написан на языке C и поэтому он быстрый, легкий. Он использует .tar.gz формат пакетов, эти пакеты извлекаются быстрее.

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

Pacman является универсальным менеджером пакетов, способным скачивать, устанавливать и обновлять пакеты и из репозитория, и собственные локальные, удалять и искать их. Вам только необходимо знать, какой ключ используется функцией для желаемых действий. Вот несколько наиболее часто используемых:

Установка и удаление пакетов

Перед установкой и обновлением пакетов полезно синхронизировать базу данных локально установленных пакетов с удалёнными репозиториями

pacman -Sy

или эквивалент:

pacman --sync --refresh


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

pacman -S package_name1 package_name2

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

pacman -S extra/package_name

или

pacman -S testing/package_name

Вы можете совмещать параметры, например, эта команда синхронизирует базы данных и установит пакет:

pacman -Sy package_name

Удалить пакет (оставляя все зависимости в системе):

pacman -R package_name

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

pacman -Rs package_name

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

pacman -Rn package_name

Конечно, это может быть дополнено -s, чтобы также удалить ненужные теперь зависимости. Таким образом, команда полностью удалит пакет, его конфигурации и все зависимости, которые больше не нужны:

pacman -Rsn package_name

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

Pacman может обновить все пакеты системы одной командой. Количество пакетов зависит от того, насколько ваша система современна.

pacman -Su

NB: вы можете синхронизировать базы данных репозиториев И обновить все установленные пакеты одной командой:

pacman -Syu

Хорошо выполнять эту команду каждые несколько дней.

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

Если ваша система упала и ее сложно восстановить то неплохо бы иметь список пакетов которые были установлены в ней.

Сохранить в файл pkglist список пакетов установленных в системе:

pacman -Qqe > pkglist

Сохраните этот файл на флешке или еще где-нибудь.

Если вдруг с вашей системой случится что-либо неприятное то установленые пакеты легко можно восстановить:

pacman -S $(cat pkglist)


Запросы к базе данных пакетов

  • Поиск пакетов в репозиториях, вы можете указать только часть названия:
pacman -Ss package
  • Поиск среди установленных пакетов:
pacman -Qs package
  • Вывод информации о пакете:
pacman -Si package
pacman -Qi package
  • Вывод списка файлов пакета:
pacman -Ql package
  • Какой пакет является владельцем файла?
pacman -Qo /path/to/a/file
  • Перечислите все пакеты, больше не требуемые как зависимости(сироты):
pacman -Qdt
  • Удалить всех сирот: (Проверьте сначала вывод команды pacman -Qdt.)
pacman -Rsn $(pacman -Qdtq)

Одновременный поиск в репозитории и среди установленных пакетов

Вы можете использовать следующий bash скрипт в качестве эквивалента для одновременного вызова pacman -Ss foo и pacman -Qs foo, для того чтобы узнать, какие из пакетов в выводе установлены на вашей системе. Последние будут помечены звёздочкой.

#!/bin/bash

if [ -z "$1" ]; then
echo "usage: pacsearch [regex pattern]"
echo "usage: pacsearch -h|--help"
exit 0
fi

if [ "$1" = "-h" -o "$1" = "--help" ]; then
echo "usage: pacsearch [regex pattern]"
echo "	Like pacman -Ss [regex pattern] but installed packages are flagged with a *"
echo "usage: pacsearch -h|--help"
echo "	Prints this message. No other options allowed"
exit 0
fi

firstchar=`echo "$1" | cut -c1`
if [ $firstchar = "-" ]; then
echo "Sorry, $1 is not a valid option!"
echo "usage: pacsearch [regex pattern]"
echo "usage: pacsearch -h|--help"
exit 0
fi

instpkg=`pacman -Qs $1 | egrep '^[^ ]' | sed 's|^local/||' | sed 's/ .\+$//'` 
syncdump=`mktemp`
pacman -Ss $1 > $syncdump

for pkg in $instpkg; do
	sed -i "s@^\(.\+/$pkg\) @\*\1 @" $syncdump
done

cat $syncdump

Сохраните этот скрипт в каталоге, включенном в переменную PATH (например, ~/bin/), и назовите его pacsearch. Сделайте его исполняемым с помощью

chmod a+x pacsearch

Теперь если вы напишете, например:

pacsearch ^qt

вывод может выглядеть так:

extra/qca 1.0-1
   QT Cryptography Architecture
extra/qsynth 0.2.5-1
   Qt GUI for fluidsynth
*extra/qt 3.3.5-8
   The QT gui toolkit.
extra/qt-doc 3.3.5-1
   The QT gui toolkit documentation.
extra/qtella 0.6.5-1
   Qtella is a Gnutella client for Linux using QT
extra/qtiplot 0.7.7-1
   Data analysis and scientific plotting - free clone of Origin
extra/qtparted 0.4.5-3
   A Partition Magic clone written in C++ using the Qt toolkit
extra/qwt 4.2.0-3
   Qt Widgets for Technical Applications
extra/qwtplot3d 0.2.6-2
   Qt/OpenGL-based C++ programming library containing 3d-widgets

В этом случае вы узнаете, что ни один из вышеперечисленных пакетов (кроме самого qt) на вашей системе не установлен.

NB1: был добавлен запрос на flyspray с предложением интегрировать вышеуказанную функциональность в сам pacman, чтобы 'грязные' хитрости bash стали стать ненужными с последующими версиями pacman.

NB2: вы можете изменить этот bash скрипт с помощью этого wiki, для того чтобы установленные пакеты были выделены различными цветами в выводе.

Другое использование

  • Скачать пакет, но не устанавливать его:
pacman -Sw package_name
  • Установить локальный пакет (не из репозитория):
pacman -U /путь/к/пакету/package_name-version.pkg.tar.gz

Вы можете ввести ссылку:

pacman -U http://www.examplepackage/repo/examplepkg.tar.gz
  • Очистка кэша pacman`а (/var/cache/pacman/pkg):
pacman -Scc
  • Для того, чтобы переустановить все пакеты в вашей системе (которые доступны в репозитории):
pacman -S $(pacman -Qq | grep -v "$(pacman -Qmq)")

Для более детальной информацией о возможных ключах обратитесь к pacman --help или man pacman.

Настройка

Настройки pacman`a находятся в /etc/pacman.conf. Важными секциями являются:

Основные опции

Основные опции находятся в секции [options]. Есть одна полезная опция IgnorePkg. Например, если вы изменяли или накладывали патч на пакет, добавление его в IgnorePkg укажет pacman'у не обновлять его при выходе следующей версии пакета. Но pacman всё же предупредит вас о том, что доступна более свежая версия, так что в итоге вы можете обновить ваш изменённый пакет. Опция также полезна для БОЛЬШИХ пакетов (например, openoffice-base), если вы хотите избежать скачивания и обновления всего пакета каждый раз, когда в репозитории появляется маленькое изменение. Поскольку pacman всё равно предупредит вас о последней версии, вы можете обновить пакет вручную.

Репозитории

В этой секции вы указываете используемые репозитории. Они могут быть указаны напрямую или как файл, содержащий список серверов. Последнее удобно для официальных репозиториев, имеющих множество зеркал.

[repository-name]
Server = ftp://server.net/repo
[current]
Include = /etc/pacman.d/current

За более подробной информацией обратитесь к man pacman.