pacman (Русский)

Ссылки по теме
pacman/Подпись пакета
pacman (Русский)/Pacnew и Pacsave
pacman/Восстановление локальной базы данных
pacman/Rosetta
pacman/Советы и приёмы
Пользовательский репозиторий Arch
Создание пакетов
Откат пакетов
ЧаВо#Управление пакетами
Обслуживание системы
Состояние перевода:
На этой странице представлен перевод статьи
pacman
. Дата последней синхронизации: 6 августа 2025. Вы можете
помочь
синхронизировать перевод, если в английской версии произошли
изменения
.
Пакетный менеджер
pacman
— одна из важнейших отличительных особенностей Arch Linux. Он объединил в себе двоичный формат пакетов и лёгкую в использовании
систему сборки
. Цель
pacman
— удобное управление пакетами вне зависимости от того, взяты они из
официальных репозиториев
или же собраны самостоятельно.
Pacman
поддерживает систему в актуальном состоянии, синхронизируя пакеты с мастер-сервером. Эта клиент-серверная модель позволяет пользователю скачивать/устанавливать пакеты со всеми необходимыми зависимостями всего одной командой.
Pacman
написан на языке
Си
и работает с
tar
-пакетами в формате
bsdtar(1)
.
Совет
Пакет
pacman
содержит также утилиты
makepkg
и
vercmp(8)
. В пакет
pacman-contrib
вошли другие полезные программы, например,
pactree
и
checkupdates
, которые
раньше
были частью
pacman
. Команда
pacman -Ql pacman pacman-contrib | grep -E 'bin/.+'
выведет полный список доступных утилит.
Использование
В этом разделе приведена небольшая подборка доступных возможностей
pacman
. Больше примеров можно найти в руководстве
pacman(8)
.
Совет
Если раньше вы использовали другой дистрибутив Linux, то будет полезно ознакомиться со статьёй
pacman/Rosetta
.
Установка пакетов
Пакет представляет собой архив, в котором содержатся:
все (скомпилированные) файлы приложения;
метаданные о приложении (имя приложения, версия, зависимости и т.д.);
установочные файлы и директивы для
pacman
;
Pacman, менеджер пакетов Arch Linux, может устанавливать, обновлять и удалять пакеты. Использование пакетов имеет ряд преимуществ по сравнению с альтернативным подходом — ручной компиляцией и установкой программ:
удобное обновление:
pacman
будет устанавливать обновления по мере их появления;
проверка зависимостей:
pacman
самостоятельно отслеживает зависимости, вам нужно только указать целевую программу, и
pacman
установит её вместе с неоходимыми дополнительными пакетами;
чистое удаление:
pacman
хранит список файлов всех пакетов. При удалении пакета в системе не остаётся лишнего "мусора".
Примечание
Часто у пакетов есть
опциональные зависимости
, которые не являются обязательными, но предоставляют дополнительную функциональность. Во время установки
pacman
выведет список опциональных зависимостей, но в файле
pacman.log
упоминаний о них не будет. Чтобы получить информацию об опциональных зависимостях пакета, используйте
#Запросы к базам данных пакетов
.
При установке пакета, который нужен только в качестве (опциональной) зависимости для другого пакета и который не будет использоваться вами напрямую, рекомендуется использовать параметр
--asdeps
. Подробнее смотрите раздел
#Причина установки
.
Важно
При установке пакетов старайтесь не синхронизировать базу данных пакетов без последующего
обновления системы
(например, на случай, если пакета
уже нет
в официальных репозиториях). В частности, не используйте команду
pacman -Sy
название_пакета
вместо
pacman -Sy
u
название_пакета
, потому что это может привести к проблемам с зависимостями. Подробнее смотрите статью
System maintenance#Частичные обновления не поддерживаются
и ветку форума
BBS#89328
.
Установка отдельных пакетов
Для установки одного пакета или списка пакетов (включая зависимости) используйте следующую команду:
# pacman -S
название_пакета1
название_пакета2
...
Для установки списка пакетов при помощи поиска по регулярному выражению (смотрите
эту ветку форума
) выполните:
# pacman -S $(pacman -Ssq
регулярное_выражение
)
Если пакет имеет несколько версий в разных репозиториях (например, в
extra
и
extra-testing
), можно указать, откуда именно следует установить пакет:
# pacman -S extra/
имя_пакета
Чтобы установить несколько пакетов с частично совпадающими названиями, используйте фигурные скобки:
# pacman -S plasma-{desktop,mediacenter,nm}
Можно использовать несколько уровней вложенных фигурных скобок:
# pacman -S plasma-{workspace{,-wallpapers},pa}
Виртуальные пакеты
Виртуальным называется такой пакет, который сам по себе не существует, но
предоставляется
другими пакетами. "Виртуальность" позволяет другим пакетам не объявлять зависимостью какой-то конкретный пакет, если есть возможность выбора из нескольких кандидатов. Виртуальный пакет нельзя установить по имени, он добавляется в систему только при установке пакета, который
предоставляет
его. Примером может служить пакет
dbus-units
.
Совет
При наличии нескольких кандидатов представленный список вариантов сначала будет отсортирован по
репозиториям
в порядке их появления в
pacman.conf
, затем в алфавитном порядке, если в одном репозитории существует несколько результатов.
Установка группы пакетов
Некоторые пакеты объединены в
группы
и могут устанавливаться одной командой. Например, после команды
# pacman -S gnome
вам будет предложено выбрать пакеты из группы
gnome
, которые вы хотели бы установить.
Некоторые группы содержат большое количество пакетов, и среди них могут быть всего несколько нужных или ненужных вам. Вместо того, чтобы вводить все необходимые вам номера, иногда удобнее выбрать или исключить отдельные числа или диапазоны чисел при помощи приведенного ниже синтаксиса:
Enter a selection (default=all): 1-10 15
— будут выбраны все пакеты в диапазоне с 1 по 10, а также 15;
Enter a selection (default=all): ^5-8 ^2
— будут выбраны все пакеты, кроме входящих в диапазон с 5 по 8, а также 2.
Чтобы увидеть список пакетов, принадлежащих к группе gnome, выполните:
$ pacman -Sg gnome
Перечень групп можно найти на странице
https://archlinux.org/groups/
.
Примечание
Установлены будут все пакеты из списка, в том числе и те, которые уже были установлены в систему ранее — даже если они последней версии и не нуждаются в обновлении. Чтобы не устанавливать такие пакеты заново, укажите параметр
--needed
.
Удаление пакетов
Удалить пакет, не удаляя его зависимости:
# pacman -R
название_пакета
Удалить пакет и те его зависимости, которые не нужны никаким другим пакетам:
# pacman -Rs
название_пакета
Важно
При удалении группы пакетов (вроде
gnome
), причина установки отдельных пакетов, входящих в группу, игнорируется. Причина установки пакетов-зависимостей, тем не менее, по-прежнему учитывается.
Команда выше может не сработать при удалении группы с другими необходимыми пакетами. В этом случае используйте команду:
# pacman -Rsu
название_пакета
Удалить пакет, его зависимости, а также все пакеты, для которых он сам является зависимостью:
Важно
Эта операция рекурсивна. Используйте её с осторожностью — есть риск удалить нужные пакеты.
# pacman -Rsc
название_пакета
Удалить пакет, который требуется другому пакету, без удаления зависимостей:
Важно
Этой операции следует избегать, так как она может нанести тяжелый вред системе. Подробнее смотрите статью
System maintenance#Избегайте определенных команд pacman
.
# pacman -Rdd
название_пакета
Pacman
создает резервные копии конфигурационных файлов удаляемых приложений и добавляет к ним расширение
.pacsave
. Если вы хотите удалить и эти файлы, используйте ключ
-n
:
# pacman -Rn
название_пакета
Примечание
Pacman
не удаляет файлы настроек, которые созданы самими приложениями — например, скрытые файлы (имя которых начинается с точки) в домашнем каталоге).
Обновление пакетов
Важно
Обновление системы следует выполнять регулярно, следуя рекомендациям в статье
System maintenance#Обновление системы
. При этом пользователь должен понимать смысл выполняемых действий, а не слепо повторять предложенные команды.
Arch поддерживает только полные обновления системы. Смотрите статьи
System maintenance#Частичные обновления не поддерживаются
и
#Установка пакетов
.
Pacman полностью обновляет систему всего одной командой. Если система давно не обновлялась, процесс может занять довольно длительное время. Приведённая ниже команда одновременно синхронизирует базы данных репозиториев
и
выполняет обновление системы — при этом пакеты, которых нет в подключённых репозиториях, обновлены не будут:
# pacman -Syu
Запросы к базам данных пакетов
Для взаимодействия с базами данных в
pacman
предусмотрены флаги
-Q
(база данных пакетов),
-S
(база данных синхронизации) и
-F
(база данных файлов). Команды
pacman -Q --help
,
pacman -S --help
и
pacman -F --help
выведут список возможных опций для этих флагов.
Note
Синхронизируйте базу данных файлов перед запросом к ней для получения актуальных результатов:
# pacman -Fy
Совет
Вы можете
запустить/включить
юнит
pacman-filesdb-refresh.timer
(входящий в пакет
pacman-contrib
), чтобы еженедельно обновлять базу данных файлов
pacman
.
Pacman
может выполнять поиск в базе данных как среди названий пакетов, так и по их описаниям:
$ pacman -Ss
условие1
условие2
...
Иногда поиск с параметром
-s
выдаёт много ненужных результатов, поэтому имеет смысл ограничить поиск только названиями пакетов, отключив поиск по описаниям и другим полям. Для этого можно использовать регулярные выражения:
$ pacman -Ss '^vim-'
Искать среди установленных пакетов:
$ pacman -Qs
условие1
условие2
...
Искать пакет в репозиториях по названию файла:
$ pacman -F
условие1
условие2
...
Показать подробную информацию о пакете в репозитории (например о его зависимостях):
$ pacman -Si
название_пакета
То же самое — для установленного пакета:
$ pacman -Qi
название_пакета
Если указать сразу два флага
-i
, то будет также выведен список резервных копий файлов и их состояние (модифицирован/нет):
$ pacman -Qii
название_пакета
Вывести список файлов установленного пакета:
$ pacman -Ql
название_пакета
Вывести список файлов пакета в репозитории:
$ pacman -Fl
название_пакета
Проверить наличие файлов установленного пакета:
$ pacman -Qk
название_пакета
С двумя флагами
-k
проверка будет более тщательной.
Узнать, какому пакету принадлежит файл:
$ pacman -Qo
/путь/к/файлу/имя_файла
Узнать, какому пакету в репозиториях принадлежит файл:
$ pacman -F
/путь/к/файлу/имя_файла
Вывести список пакетов, которые больше не требуются как зависимости ("пакеты-сироты"):
$ pacman -Qdt
Вывести список пакетов, установленных явно (explicitly) и не являющихся зависимостями для других пакетов:
$ pacman -Qet
Другие полезные команды можно найти в статье
pacman/Советы и приёмы
.
Для получения расширенной функциональности установите
pkgfile
, который использует отдельную базу данных со всеми файлами и связанными с ними пакетами.
Pactree
Примечание
pactree(8)
больше не является частью пакета
pacman
. Теперь он входит в состав
pacman-contrib
.
Дерево зависимостей пакета можно узнать командой
$ pactree
название_пакета
Чтобы увидеть "обратное" дерево зависимостей, т.е. список пакетов, которые сами зависят от указанного, используйте флаг
pactree
-r
.
Структура базы данных
Базы данных
pacman
обычно размещаются в каталоге
/var/lib/pacman/sync
. Для каждого подключённого в файле
/etc/pacman.conf
репозитория в этом каталоге находится соответствующий файл базы данных. Сам файл представляет собой gzip-сжатый tar-архив (с расширением
.db
), содержащий по одному каталогу для каждого пакета. Например, для пакета
which
содержимое каталога имеет вид:
$ tree which-2.21-5
which-2.21-5
|-- desc
В файле
desc
хранятся мета-данные пакета — описание, список зависимостей, размер, хэш-сумма MD5 и т.д.
Очистка кэша пакетов
Pacman
сохраняет скачиваемые пакеты в каталог
/var/cache/pacman/pkg/
. Старые версии пакетов и пакеты, удалённые из системы, не удаляются из этого каталога автоматически. Такой подход обладает следующими преимуществами:
Можно выполнить
откат пакета
без необходимости искать где-то (например, в
архиве Arch Linux
) его старую версию;
Удалённый по ошибке пакет можно заново установить из кэша, не скачивая из репозитория.
Тем не менее, это означает, что время от времени необходимо чистить этот каталог самостоятельно, чтобы предотвратить его разрастание.
Скрипт
paccache(8)
из пакета
pacman-contrib
удаляет из кэша старые версии пакетов, как установленных в системе, так и уже удалённых, по умолчанию оставляя только три самые свежие:
# paccache -r
Включите
и
запустите
paccache.timer
, чтобы очистка кэша выполнялась каждую неделю автоматически.
Совет
Также можно создать
хук
, чтобы очистка запускалась после каждого действия
pacman
.
Установите
paccache-hook
AUR
и посмотрите
другие примеры
.
}}
При необходимости можно задать количество последних версий, которые нужно оставить. Команда для удаления всех версий, кроме последней:
# paccache -rk1
Флаг
-u
/
--uninstalled
позволяет ограничить действие
paccache
только версиями пакетов, которых в системе уже нет. Например, команда удаления всех кэшированных версий удалённых пакетов:
# paccache -ruk0
Список возможных опций выводится командой
paccache -h
.
В
pacman
есть встроеный функционал очистки кэша и удаления баз данных репозиториев, которые были заблокированы в файле
/etc/pacman.conf
. Однако
pacman
гораздо менее гибок по сравнению с
paccache
и не даёт возможности сохранить некоторое количество последних версий, просто очищая каталог кэша.
Чтобы удалить все кэшированные версии удалённых пакетов и неиспользуемые базы данных, выполните:
# pacman -Sc
Чтобы удалить вообще все файлы из кэша, укажите флаг очистки дважды:
# pacman -Scc
Важно
Следует избегать полной очистки кэша, кроме случая, когда вам очень нужно освободить дисковое пространство. Очистка сделает невозможным откат пакетов или их переустановку без повторного скачивания.
pkgcacheclean
AUR
и
pacleaner
AUR
— две альтернативные программы для очистки кэша.
Дополнительные команды
Скачать пакет без установки:
# pacman -Sw
название_пакета
Установить пакет не из удалённого репозитория, а хранящийся локально (например, предварительно скачанный из
AUR
):
# pacman -U
/путь/к/пакету/имя_пакета-версия.pkg.tar.zst
Сохранить копию локально устанавливаемого пакета в кэше
pacman
:
# pacman -U file:
///путь/к/пакету/имя_пакета-версия.pkg.tar.zst
Скачать и установить пакет из удаленного источника (но и не из репозиториев, перечисленных в конфигурационном файле
pacman
):
# pacman -U http:
//www.example.com/repo/example.pkg.tar.zst
dry run
Pacman
всегда
выводит список пакетов, которые будут установлены или удалены, и спрашивает разрешение пользователя перед выполнением действия.
Чтобы получить список в удобном для обработки формате и предотвратить действия
-S
,
-U
и
-R
, вы можете использовать
-p
, сокращение от
--print
.
--print-format
можно добавить для форматирования этого списка различными способами.
--print-format %n
вернет список без указания версий пакета.
Причина установки
Для
pacman
с точки зрения причины установки пакет относится к одной из двух категорий:
установлен явно
(explicitly-installed): установлен пользователем командами
pacman -S
или
pacman -U
;
зависимость
(dependency): установлен автоматически в процессе установки другого пакета, поскольку являлся его
зависимостью
.
При явной установке пакета можно принудительно изменить причину установки на
зависимость
:
# pacman -S --asdeps
название_пакета
Эта команда обычно используется в случае, когда явно установленные пакеты предлагают установить
дополнительные пакеты
для поддержки дополнительных функций, которые пользователь может выбирать по своему усмотрению.
Совет
При установке опциональных зависимостей вручную стоит всегда указывать флаг
--asdeps
. Тогда при
удалении пакетов-сирот
ненужные опциональные зависимости тоже будут удаляться.
При
пере
установке пакета текущая причина установки не меняется.
Список явно установленных пакетов выводится командой
pacman -Qe
, а пакетов-зависимостей — командой
pacman -Qd
.
Чтобы изменить причину установки уже установленного пакета, выполните:
# pacman -D --asdeps
название_пакета
Для противоположной операции используйте флаг
--asexplicit
.
Примечание
Не стоить использовать опции
--asdeps
и
--asexplicit
в команде обновления системы, например
pacman -Syu
название_пакета
--asdeps
. Это изменит причину установки не только для устанавливаемого пакета, но и для всех обновляемых.
Процесс установки/обновления/удаления пакета
Каждая операция ("транзакция")
pacman
состоит из пяти последовательных шагов, включая пред- и пост-транзакционные хуки:
Если база данных не заблокирована, то транзакция инициализируется.
Определяются пакеты, над которыми будут выполняться действия.
В зависимости от заданных флагов выполняется подготовка транзакции, проверяется целостность базы данных, а также пакеты и их зависимости.
Транзакция выполняется:
Загружаются пакеты (
_alpm_sync_load
), если это необходимо.
Выполняются
PreTransaction
-хуки, которые возможно применить.
Удаляются пакеты, которые должны быть заменены, конфликтуют или явно указаны для удаления.
Добавляются пакеты.
Если пакет содержит установочный сценарий, выполняется функция
pre_install
(
pre_upgrade
/
pre_remove
для обновляемых и удаляемых пакетов соответственно).
Удаляются существующие файлы пакета (при обновлении или удалении пакета). Сохраняются только файлы настроек (смотрите
/Pacnew and Pacsave
).
Распаковывается архив с новыми файлами пакета; файлы размещаются в нужные места файловой системы (при установке или обновлении пакета). Изменённые пользователем файлы настроек, которые нельзя просто перезаписать, остаются без изменений; новые файлы настроек сохраняются с суффиксом
.pacnew
(смотрите предыдущий шаг).
Если пакет содержит установочный сценарий, выполняется функция
post_install
(
post_upgrade
/
post_remove
для обновляемых и удаляемых пакетов соответственно).
Выполняются
PostTransaction
-хуки, которые возможно применить.
Завершение транзакции и освобождение ресурсов (например, разблокирование базы данных).
Настройка
Настройки
pacman
находятся в файле
/etc/pacman.conf
. Подробную информацию о файле настроек можно найти в руководстве
pacman.conf(5)
.
Глобальные параметры
Глобальные настройки
pacman
указываются в разделе
[options]
. Помимо руководства
pacman.conf(5)
некоторая информация о настройках из этого раздела содержится в комментариях самого файла
pacman.conf
.
Сравнение версий пакетов перед обновлением
Чтобы увидеть сравнение старых и новых версий доступных для обновления пакетов, раскомментируйте строку
VerbosePkgLists
в файле
pacman.conf
. Теперь команда
pacman -Syu
будет выводить примерно следующее:
Пакет (6)               Старая версия  Новая версия  Изменение размера  Размер загрузки

extra/libmariadbclient  10.1.9-4       10.1.10-1              0,03 MiB         4,35 MiB
extra/libpng            1.6.19-1       1.6.20-1               0,00 MiB         0,23 MiB
extra/mariadb           10.1.9-4       10.1.10-1              0,26 MiB        13,80 MiB
Параллельная загрузка
Количество пакетов, загружаемых параллельно (в одно и то же время), настраивается в
/etc/pacman.conf
с помощью параметра
ParallelDownloads
в разделе
[options]
. В пакете
/etc/pacman.conf
, поставляемом с пакетом
pacman
, для этого параметра установлено значение
5
. В противном случае, если опция не задана, то пакеты будут загружаться последовательно.
Запрет на обновление отдельных пакетов
Важно
Будьте осторожны при использовании этой настройки, потому что частичные обновления
не поддерживаются
.
Чтобы пропустить пакет во время
обновления
системы добавьте его название в параметр
IgnorePkg
в разделе
[options]
:
IgnorePkg=linux
Если необходимо пропустить обновление для нескольких пакетов, укажите названия, разделив их пробелами, или используйте несколько строк
IgnorePkg
. Также можно использовать
шаблоны поиска
. Если нужно пропустить обновление пакета всего один раз, то лучше использовать опцию командной строки
--ignore
— здесь в качестве разделителя для названий пакетов используется запятая.
При необходимости обновить пакет из списка исключений всё же можно, командой
pacman -S
название_пакета
:
pacman
при этом выведет напоминание, что пакет указан в
IgnorePkg
.
Запрет на обновление группы пакетов
Важно
Будьте осторожны при использовании этой настройки, потому что частичные обновления
не поддерживаются
.
Аналогично запрету на обновление отдельного пакета, можно запретить обновление сразу для целой группы, например:
IgnoreGroup=gnome
Запрет на обновление файлов
Файлы, указанные в параметре
NoUpgrade
, не будут изменяться в процессе установки/обновления; новые версии этих файлов будут сохраняться с расширением
.pacnew
.
NoUpgrade=
путь/к/файлу
Указать несколько файлов можно так:
NoUpgrade=
путь/к/файлу1 путь/к/файлу2
Примечание
Путь к файлу соответствует названию файла в tar-архиве пакета. Следовательно, указывать ведущий слэш не нужно.
Запрет на установку файлов
Чтобы запретить установку определённых файлов или каталогов, перечислите их в параметре
NoExtract
. Например, запрет установки юнитов
systemd
:
NoExtract=usr/share/bash-completion/completions/*
Работа с несколькими файлами настроек
Если имеется несколько конфигурационных файлов (например, основная конфигурация и дополнительная с подключённым репозиторием
testing
), то работу с ними можно упростить, если вынести общие пункты настроек в отдельный файл и подключать его с помощью опции
Include
:
Include =
/путь/к/файлу/общих/настроек
В этом примере общие настройки вынесены в файл
/путь/к/файлу/общих/настроек
. Приведённую выше строку нужно добавить в оба файла настроек, основной и дополнительный.
Хуки
Системные пре- и пост-транзакционные хуки хранятся в каталоге
/usr/share/libalpm/hooks
;
pacman
может выполнять хуки как из системного каталога, так и из каталогов, подключённых опцией —
HookDir
в файле
pacman.conf
(каталог по умолчанию —
/etc/pacman.d/hooks
). Название файла хука должно заканчиваться на
.hook
. Хуки
pacman
неинтерактивны.
В частности, хуки
pacman
используются в связке с
systemd-sysusers
и
systemd-tmpfiles
для автоматического создания пользователей и файлов в процессе установки пакетов. Например, пакет
tomcat8
AUR
требует наличия пользователя
tomcat8
и определённых каталогов, ему принадлежащих. Хуки
systemd-sysusers.hook
и
systemd-tmpfiles.hook
вызывают команды
systemd-sysusers
и
systemd-tmpfiles
соответственно, когда
pacman
видит в пакете указания на пользователей и временные файлы.
Хуки
alpm
подробно описаны в руководстве
alpm-hooks(5)
.
Репозитории и зеркала
Помимо общего раздела
[options]
в файле
pacman.conf
также содержатся отдельные разделы для каждого из репозиториев. Репозиторий — набор пакетов, который физически находится на одном или нескольких серверах; эти сервера называются
зеркалами
репозитория.
Репозитории делятся на
официальные
и
неофициальные
. Порядок репозиториев в файле настроек имеет значение: если в разных репозиториях содержатся пакеты с одинаковым названием, то вне зависимости от их версий предпочтение отдаётся тому пакету, репозиторий которого ближе к началу файла. Чтобы подключённый репозиторий можно было использовать, сначала необходимо выполнить полное
обновление
системы.
Разделы репозиториев в файле
pacman.conf
содержат информацию о зеркалах. Список зеркал хранится в отдельном файле и подключается параметром
Include
. Например, зеркала официальных репозиториев подключаются из файла
/etc/pacman.d/mirrorlist
. Настройка зеркал описана в статье
Mirrors
.
Каталог для кэша пакетов
Pacman хранит загруженные файлы пакетов в кэше — в каталоге, указанном в опции
CacheDir
в разделе
[options]
файла
pacman.conf
(по умолчанию
/var/cache/pacman/pkg/
).
Размер этого каталога может расти со временем, даже если в нём хранятся только самые свежие версии установленных пакетов.
Если вы хотите переместить этот каталог в более удобное место, выполните одно из следующих действий:
Важно
Не создавайте символическую ссылку
на месте каталога
/var/cache/pacman/pkg/
. Использование символической ссылки приведёт к тому, что
pacman
сломает
сам себя в процессе обновления.
В опцию
CacheDir
пропишите путь к новому каталогу. Не забудьте добавить косую черту в конце.
Это рекомендуемое решение
.
Примонтируйте отдельный раздел или
подтом Btrfs
в
/var/cache/pacman/pkg/
.
Сделайте bind mount в
/var/cache/pacman/pkg/
Безопасность пакетов
Pacman использует цифровые подписи в качестве дополнительного механизма обеспечения безопасности пакетов. Настройки проверки подписей задаются параметром
SigLevel
. По умолчанию в разделе
[options]
задано глобальное значение
SigLevel = Required DatabaseOptional
, что означает проверку подписей всех пакетов без исключения. Можно задать особые правила проверки подписей для отдельных репозиториев, указав параметр
SigLevel
в соответствующих разделах. Подробнее смотрите в статье
pacman/Подпись пакета
.
Решение проблем
Failed to commit transaction (conflicting files)
Следующее сообщение об ошибке
[1]
:
ошибка: не удалось завершить транзакцию (конфликтующие файлы)
пакет
: '
/путь/к/файлу
' существует в файловой системе
Обнаружены ошибки, пакеты не обновлены.
означает, что при выполнении операции были обнаружены конфликтующие файлы. Pacman не будет их перезаписывать автоматически. Это не ошибка, так сделано специально.
Проблема решается тривиально (хотя, чтобы быть уверенным, вам следует попытаться выяснить, как эти файлы попали туда в первую очередь). Сначала проверьте, не принадлежит ли файл другому пакету (
pacman -Qo
/путь/к/файлу
). Если принадлежит, создайте
отчет об ошибке
. Если проблемный файл не нужен другим пакетам, переименуйте его и перезапустите команду обновления. Если в дальнейшем проблем не возникнет, то старый файл можно удалить.
Если программа была установлена вручную без
pacman
— например, при помощи команды
make install
— необходимо удалить программу и все её файлы, а затем выполнить установку при помощи
pacman
. Смотрите также
pacman/Советы и приёмы#Поиск файлов без пакета-владельца
.
Информация о каждом установленном файле хранится в файле с метаданными пакета
/var/lib/pacman/local/
пакет-версия
/files
. При повреждении этого файла (он может быть пустым или отсутствовать) во время обновления пакета будет получена ошибка
file exists in filesystem
("файл существует в файловой системе"). Обычно такие ошибки возникают во время установки или обновления всего лишь одного пакета. Вместо ручного переименования или удаления конфликтующих файлов, принадлежащих данному пакету, лучше выполнить команду
pacman -S --overwrite
шаблон
пакет
, чтобы
pacman
принудительно перезаписал файлы, название которых совпадает с шаблоном.
Важно
Будьте осторожны при использовании ключа
--overwrite
. Смотрите
Обслуживание системы#Избегайте определенных команд pacman
.
Failed to commit transaction (invalid or corrupted package)
Удалите все файлы
.part
(частично скачанные пакеты) из кэша
pacman
/var/cache/pacman/pkg/
. Причиной ошибки чаще всего является пользовательская команда в параметре
XferCommand
файла
pacman.conf
.
# find /var/cache/pacman/pkg/ -iname "*.part" -delete
Эта же ошибка может также появиться, если
archlinux-keyring
устарел, что не позволяет
pacman
проверять подписи. Смотрите
Регулярно обновляйте систему
, чтобы узнать об исправлении и о том, как избежать этого в будущем.
Failed to init transaction (unable to lock database)
Когда
pacman
собирается внести изменения в базу данных пакетов, например, при установке пакета, он создаёт файл блокировки
/var/lib/pacman/db.lck
. Это предотвращает запуск другого экземпляра
pacman
и таким образом спасает от возможного повреждения базы.
Если работа
pacman
была прервана во время внесения изменений в базу, этот файл блокировки может остаться неудалённым, что может привести к появлению такой ошибки:
ошибка: не удалось начать транзакцию (не удалось заблокировать базу данных)
ошибка: не удалось заблокировать базу: Файл существует
Если вы уверены, что на вашей машине не запущено других экземпляров
pacman
, удалите этот файл блокировки:
# rm /var/lib/pacman/db.lck
Совет
Можно выполнить команду
fuser /var/lib/pacman/db.lck
, чтобы проверить, используется ли файл каким-то процессом.
Не удаётся найти пакет для установки
Эта ошибка проявляется в сообщениях
Not found in sync db
,
не найдена цель
или
не удалось получить файл
.
Удостоверьтесь, что пакет, который вы пытаетесь установить, действительно существует. Если это так, возможно, список хранящихся в репозиториях пакетов устарел. Выполните
pacman -Syu
, чтобы получить новый список и обновить систему. Также убедитесь, что выбранные
зеркала
в рабочем состоянии, а
репозитории
настроены правильно. Вы также можете использовать
Reflector
, чтобы поддерживать зеркала в актуальном состоянии.
Также есть вероятность того, что в вашей системе не включен репозиторий, содержащий нужный пакет — например, пакет находится в репозитории
multilib
, но
multilib
не включен в файле
pacman.conf
.
Смотрите также
FAQ#Почему в репозиториях есть только одна версия каждой библиотеки?
Исправление не загружающейся системы, вызванной прерванным обновлением
Обновление может быть прервано из-за отключения питания, сбоя ядра или аппаратного сбоя. В большинстве случаев большого ущерба не будет, но система, скорее всего, не сможет загружаться.
Подготовьте
установочный USB-носитель
и загрузитесь с него.
Смонтируйте
корневую файловую систему, а также ваш
ESP
.
arch-chroot
в смонтированную корневую файловую систему.
Проверьте
/var/log/pacman.log
и повторите точное обновление, указав
полный
список пакетов, которые были обновлены во время неудачной транзакции, в
pacman -Syu
, что позволит переустановить его при возобновлении первоначального обновления:
# pacman -Syu $(grep "\[
2025-07-27T22.*
\] \[ALPM\] upgraded" /var/log/pacman.log | cut -d " " -f4 | tr "\n" " ")
Необходимо повторить
точное
обновление для обеспечения запуска правильных скриплетов и хуков.
pacman падает при обновлении
Если при удалении пакетов
pacman
завершает свою работу с ошибкой "database write" ("запись в базу данных"), и после этого все попытки переустановки или обновления пакетов завершаются неудачей, сделайте следующее:
Загрузитесь, используя
Arch Live USB
. Желательно, чтобы версия
pacman
в образе была не старше той, что установлена в системе.
Смонтируйте корневую файловую систему, например, командой
mount /dev/sdaX /mnt
от root, и убедитесь, что в точке монтирования достаточно свободного места (команда
df -h
).
Смонтируйте файловые системы proc, sys и dev:
mount -t proc proc /mnt/proc; mount --rbind /sys /mnt/sys; mount --rbind /dev /mnt/dev
Если в системе используются стандартное расположение баз данных и каталогов, то можно синхронизировать базу данных
pacman
и обновить систему командой
pacman --root=/mnt --cachedir=/mnt/var/cache/pacman/pkg -Syu
с правами root.
Кроме того, если не удаётся обновить систему, изучите рекомендации из
pacman/Советы и приёмы#Переустановка всех пакетов
.
После обновления стоит убедиться, что в системе не осталось необновлённых нерабочих пакетов:
find /mnt/usr/lib -size 0
.
Если такие пакеты всё же есть, их нужно переустановить:
pacman --root /mnt --cachedir=/mnt/var/cache/pacman/pkg -S
пакет
.
pacman: команда не найдена
Если
/var/cache/pacman/pkg
является символической ссылкой,
pacman
в процессе самообновления попытается вместо неё создать каталог и таким образом удалит эту символическую ссылку. Из-за этого обновление завершится неудачей. В результате
/usr/bin/pacman
и другие файлы из пакета
pacman
исчезнут из системы.
Никогда не делайте
/var/cache/pacman/pkg
символической ссылкой, так как этот путь находится под контролем
pacman
. Вместо этого используйте опцию
CacheDir
или bind mount; подробнее смотрите
#Каталог для кэша пакетов
.
Если вы всё-таки столкнулись с этой проблемой и сломали свою систему, вы можете вручную извлечь содержимое
/usr
из пакета, чтобы восстановить
pacman
, а затем корректно его переустановить; смотрите
FS#73306
и
тему на форуме
для подробностей.
Переустановка pacman вручную
С помощью pacman-static
pacman-static
AUR
— статически скомпонованная версия
pacman
, которая может работать даже при отключении/повреждении системных библиотек. Это может помочь, если произошло
частичное обновление
и
pacman
больше не работает.
Прикреплённый комментарий в PKGBUILD содержит ссылку на закачку двоичного файла, с помощью которого можно переустановить
pacman
или обновить систему целиком в случае частичного обновления.
Использование предварительно скомпилированного двоичного файла pacman-static при сбое сборки PKGBUILD
В некоторых ситуациях ваша система может быть слишком перегружена (например, из-за отсутствия или несовместимости библиотек) для успешного запуска `makepkg` или сборки пакета `pacman-static` из AUR.
Если сборка из PKGBUILD завершается неудачей или `makepkg` не может быть запущен, вы можете загрузить предварительно скомпилированный двоичный файл `pacman-static` из надежного источника. Этот статический двоичный файл не зависит от системных библиотек и может быть использован для восстановления работоспособности `pacman` в вашей системе.
Надежным источником для этого двоичного файла является:
#
https://pkgbuild.com/~morganamilo/pacman-static/x86_64/bin/pacman-static
Используйте его, запустив:
$ curl -L -o pacman-static
https://pkgbuild.com/~morganamilo/pacman-static/x86_64/bin/pacman-static
$ chmod +x pacman-static
$ sudo ./pacman-static -Syu pacman
Это обновит вашу систему и переустановит `pacman`, исправив нарушенные зависимости, связанные с отсутствующими общими библиотеками.
С помощью внешнего pacman
Если не работает даже
pacman-static
, то можно попробовать восстановить систему с помощью внешнего
pacman
. Простейший способ — воспользоваться
archiso
и указать точку монтирования в опции
--sysroot
или
--root
. Подробнее о том, как смонтировать файловую систему для
--sysroot
, смотрите
chroot#Используя chroot
.
Извлечение вручную
Важно
Есть большая вероятность, что следуя рекомендациям ниже вы добьёте свою систему. Используйте их как последнее средство, если советы из раздела
#pacman падает при обновлении
не помогли или нереализуемы.
Даже если
pacman
не подаёт признаков жизни, всё ещё можно починить его вручную, загрузив последние версии пакетов и распаковав файлы в нужные места. Последовательность действий:
Узнайте зависимости пакета
pacman
.
Скачайте пакеты с любого рабочего
зеркала
.
Извлеките каждый пакет в корневой каталог.
Переустановите эти пакеты командами
pacman -S --overwrite
название_пакета
, чтобы обновить базу данных.
Выполните полное обновление системы.
Если у вас имеется доступ к другой работоспособной системе с Arch Linux, полный список зависимостей можно узнать командой
$ pacman -Q $(pactree -u pacman)
Возможно, вам необходимо обновить только несколько пакетов, в зависимости от серьёзности проблемы. Пример команды распаковки архива пакета:
# tar -xvpwf
пакет.tar.zst
-C / --exclude .PKGINFO --exclude .INSTALL --exclude .MTREE --exclude .BUILDINFO
Обратите внимание на флаг
-w
, который включает интерактивный режим. Запускать распаковку неинтерактивно рискованно, потому что можно перезаписать важный файл. Также не забудьте, что пакеты нужно распаковывать в правильном порядке (сначала зависимости).
На форуме
рассмотрен пример процесса восстановления работоспособности
pacman
c несколькими неработающими пакетами-зависимостями.
Ошибка "Unable to find root device" после перезагрузки
Вероятно, при обновлении
ядра
был повреждён образ
initramfs
(например, при использовании
pacman
с опцией
--overwrite
). Для восстановления работоспособности есть два варианта, и первый из них — использовать
fallback
-образ.
Совет
Если вы удалили этот пункт из меню загрузчика по каким-либо причинам, вы можете нажать клавишу
Tab
(при использовании Syslinux) или
e
(при использовании GRUB или systemd-boot), когда на экране появится меню загрузчика, переименовать образ в
initramfs-linux-fallback.img
и нажать
Enter
или
b
(в зависимости от используемого
загрузчика
), чтобы выполнить загрузку с новыми параметрами.
Когда система запустится, выполните команду пересборки образа initramfs либо из консоли, либо из терминала (для стандартного ядра
linux
):
# mkinitcpio -p linux
Если этот способ не сработает, загрузитесь с Live-USB,
смонтируйте
корневой и загрузочный разделы в
/mnt
и
/mnt/boot
соответственно, после чего сделайте
chroot
командой
arch-chroot
:
# arch-chroot /mnt
# pacman -Syu mkinitcpio systemd linux
Примечание
Если у вас нет текущего релиза, или есть только какой-либо другой "live"-дистрибутив Linux, вы можете выполнить
chroot
, используя старый способ. Очевидно, при этом вам придется напечатать больше, чем просто
arch-chroot
для запуска соответствующего скрипта.
Если
pacman
выдаёт ошибку
Could not resolve host
,
проверьте ваше интернет-соединение
.
Если вы не можете войти в окружение arch-chroot или chroot, но нуждаетесь в переустановке пакетов, можете использовать команду
pacman --sysroot /mnt -Syu foo bar
, чтобы указать
pacman
ваш корневой раздел.
Переустановка ядра (пакета
linux
) автоматически пересоздаст образ initramfs при помощи
mkinitcpio -p linux
. Нет необходимости дополнительно вводить эту команду.
После всего этого рекомендуется выполнить
exit
,
umount /mnt/{boot,}
и
reboot
.
Warning: current locale is invalid; using default "C" locale
Как сказано в сообщении ошибки, локаль системы настроена неправильно (смотрите статью
Локали
).
Предупреждающие сообщения о пропущенных локалях
Когда файлы локалей намеренно удаляются с помощью таких инструментов, как
bleachbit
или
localepurge
AUR
,
pacman
может выдавать предупреждения об отсутствующих локалях во время обновления пакета.
Чтобы отключить эти предупреждения, вы можете закомментировать параметр
CheckSpace
в
pacman.conf
. Имейте в виду, что отключение CheckSpace отключает функцию проверки свободного места при установке всех пакетов, поэтому используйте этот обходной путь только в том случае, если у вас есть альтернативные средства контроля свободного места на диске.
pacman игнорирует настройки прокси
Удостоверьтесь, что соответствующие переменные окружения (
$http_proxy
,
$ftp_proxy
и т.д.) заданы верно. Если вы используете
pacman
вместе с
sudo
, необходимо настроить sudo на
передачу переменных окружения в pacman
. Также убедитесь, что настройки
dirmngr
в файле
/etc/pacman.d/gnupg/dirmngr.conf
содержат параметр
honor-http-proxy
, отвечающий за использование прокси при обновлении ключей.
Как переустановить все пакеты, сохранив информацию о том, какие из них установлены явно, а какие — в качестве зависимостей?
Чтобы переустановить все пакеты из официальных репозиториев, выполните
pacman -S $(pacman -Qnq)
(опция
-S
сохраняет причину установки по умолчанию).
После этого необходимо переустановить все пакеты из неизвестных источников, список которых можно получить командой
pacman -Qmq
.
Cannot open shared object file
Скорее всего, это означает, что при выполнении предыдущей операции
pacman
удалил или повредил разделяемые библиотеки, необходимые для него самого.
Чтобы выйти из этой ситуации, нужно вручную распаковать необходимые библиотеки в вашу файловую систему. Сперва определите, в каком пакете содержится требуемая библиотека, а затем найдите этот пакет в кэше
pacman
(
/var/cache/pacman/pkg/
). Распакуйте разделяемую библиотеку в файловую систему. Это позволит вам запустить
pacman
.
Теперь необходимо
переустановить
испорченный пакет. При этом обязательно используйте ключ
--overwrite
, поскольку вы лишь распаковали системные файлы, но
pacman
об этом не знает. Pacman корректно заменит ваш файл разделяемой библиотеки на тот, что имеется в пакете.
Вот и все. Обновите оставшуюся часть системы.
Проблемы с загрузкой пакетов
Были сообщения о некоторых сетевых проблемах, которые приводят к невозможности обновления/синхронизации:
[2]
,
[3]
. При обычной установке Arch Linux эти проблемы не появляются, так как стандартный загрузчик файлов при этом заменяется другим (смотрите
pacman/Советы и приёмы#Производительность
). При установке Arch Linux в
VirtualBox
эта проблема также появляется, когда вы используете опцию виртуальной машины
Host interface
вместо
NAT
.
Failed retrieving file 'core.db' from mirror
Если
зеркала
настроены правильно, но вы получаете сообщение об ошибке
не удалось получить файл 'core.db'
, попробуйте выбрать другой
сервер имён
.
'local-package.pkg.tar': permission denied
Если вы пытались установить пакет в смонтированной файловой системе sshfs с помощью команды
pacman -U
и получили такую ошибку, переместите пакет в локальный каталог и попробуйте ещё раз.
error: could not determine cachedir mount point /var/cache/pacman/pkg
Во время выполнения в chroot-окружении, например, команды
pacman -Syu
, может произойти следующая ошибка:
error: could not determine cachedir mount point /var/cache/pacman/pkg
error: failed to commit transaction (not enough free disk space)
Такое часто случается, если каталог для chroot не являлся точкой монтирования на момент входа в chroot. Решение проблемы приведено в примечании к
Установка Arch из другого дистрибутива#Скачивание базовых утилит
, а объяснения и пример bind-монтирования с превращением chroot-каталога в точку монтирования можно найти в
arch-chroot(8)
.
error: GPGME error: No data
If you are unable to update packages and receive this error, then try
rm -r /var/lib/pacman/sync/
before attempting to update.
If removing sync files doesn't help, check that the sync files are
gzip compressed data
using
file /var/lib/pacman/sync/*
before attempting to update. A router or proxy might corrupt the downloads. Corruption could possibly be HTML type.
If sync files are of the correct type, there might be an issue with the mirror server. Look up the mirror server(s) in use with
pacman-conf -r core
and
pacman-conf -r extra
. Paste the first returned url in a browser and check that a file listing is returned. In case the mirror returns an error, comment it in
/etc/pacman.d/mirrorlist
. You may try updating or re-ranking
mirrors
.
error: GPGME error: General error and ":: File /var/cache/pacman/pkg/<package>.pkg.tar.zst is corrupted (invalid or corrupted package (PGP signature)).
If this error occurs and you're for instance unable to update your system or any package at all, it is possible that you have
DISPLAY
set to a blank value, which seems to break the GPG-Flow.
In this case,
unset DISPLAY
or setting it to a arbitrary value will most likely allow to update again, in case any other option above didn't do the trick yet.
See
this
post for further details.
Переустановка сломанных или несинхронизированных пакетов
Можно использовать
pacman -Qk $pkg
, чтобы проверить, соответствуют ли установленные файлы пакета
$pkg
файлам из его версии базы данных. Для нескольких пакетов можно использовать следующий цикл, чтобы переустановить все пакеты, в которых отсутствуют файлы:
# LC_ALL=C.UTF-8 pacman -Qk 2>/dev/null | grep -v ' 0 missing files' | cut -d: -f1 |
    while read -r package; do
        pacman -S "$package" --noconfirm
    done
Предположим, что ваша локальная база данных, расположенная в
/var/lib/pacman
, более актуальна по сравнению с установленными пакетами в файловой системе
/
(
например
, из-за частичного отката), тогда этот метод подходит для повторной синхронизации корневой файловой системы с локальной базой данных.
Смотрите также
libalpm(3)
pacman(8)
pacman.conf(5)
repo-add(8)