Difference between revisions of "Pacman (Русский)"

From ArchWiki
Jump to: navigation, search
m (Fixed russian Template:Warning)
(update interlanguage links)
(Tag: wiki-scripts)
 
(47 intermediate revisions by 10 users not shown)
Line 9: Line 9:
 
[[en:Pacman]]
 
[[en:Pacman]]
 
[[es:Pacman]]
 
[[es:Pacman]]
 +
[[fa:Pacman]]
 
[[fr:Pacman]]
 
[[fr:Pacman]]
 
[[id:Pacman]]
 
[[id:Pacman]]
Line 14: Line 15:
 
[[ja:Pacman]]
 
[[ja:Pacman]]
 
[[ko:Pacman]]
 
[[ko:Pacman]]
[[lt:Pacman]]
 
 
[[nl:Pacman]]
 
[[nl:Pacman]]
 
[[pl:Pacman]]
 
[[pl:Pacman]]
Line 21: Line 21:
 
[[sr:Pacman]]
 
[[sr:Pacman]]
 
[[sv:Pacman]]
 
[[sv:Pacman]]
[[tr:pacman]]
+
[[zh-hans:Pacman]]
[[uk:Pacman]]
+
[[zh-hant:Pacman]]
[[zh-CN:Pacman]]
+
{{Related articles start (Русский)}}
[[zh-TW:Pacman]]
+
{{Related|Откат пакетов}}
{{Related articles start}}
+
{{Related|Ускорение работы pacman}}
{{Related|Downgrading Packages (Русский)}}
+
{{Related|Графические оболочки для pacman}}
{{Related|Improve Pacman Performance (Русский)}}
+
{{Related|pacman Rosetta}}
{{Related|Pacman GUI Frontends (Русский)}}
+
{{Related|pacman/Советы и приёмы}}
{{Related|Pacman Rosetta}}
+
{{Related|pacman package signing}}
{{Related|Pacman Tips (Русский)}}
+
{{Related|ЧаВо#Управление пакетами}}
{{Related|Pacman package signing}}
 
{{Related|FAQ (Русский)#Управление пакетами}}
 
 
{{Related|pacman-key (Русский)}}
 
{{Related|pacman-key (Русский)}}
{{Related|Pacnew and Pacsave Files}}
+
{{Related|Файлы Pacnew и Pacsave}}
{{Related|List of Applications/Utilities (Русский)#Управление пакетами}}
+
{{Related|Список приложений/Утилиты#Управление пакетами}}
 
{{Related|Arch Build System (Русский)}}
 
{{Related|Arch Build System (Русский)}}
{{Related|Official Repositories (Русский)}}
+
{{Related|Официальные репозитории}}
 
{{Related|Arch User Repository (Русский)}}
 
{{Related|Arch User Repository (Русский)}}
 
{{Related articles end}}
 
{{Related articles end}}
 +
{{Unmaintained (Русский)}}
 +
{{Translateme (Русский)|1=Обновление pacman до версии 5.0, добавление флага {{ic|-F}} и {{ic|-D}} [https://projects.archlinux.org/pacman.git/tree/NEWS?h=v5.0.0].}}
  
[[Wikipedia:Package management system|Система управления пакетами]] '''[https://www.archlinux.org/pacman/ pacman]''' является одной из основных особенностей Arch Linux. Он сочетает в себе простой формат бинарных пакетов и легкую в использовании систему сборки (смотрите [[Arch Build System]] и [[makepkg]]). '''Pacman''' позволяет пользователям с легкостью управлять и настраивать под себя пакеты, вне зависимости от того, откуда они взяты: из [[Official Repositories (Русский)|официального репозитория]] или же собраны самостоятельно.
+
[[Wikipedia:ru:Система управления пакетами|Система управления пакетами]] '''[https://www.archlinux.org/pacman/ pacman]''' является одной из основных особенностей Arch Linux. Она сочетает в себе простой формат двоичных пакетов и легкую в использовании [[Arch Build System (Русский)|систему сборки]]. Цель ''pacman'' — предоставление возможности легкого управления пакетами вне зависимости от того, откуда они взяты: из [[Official repositories (Русский)|официальных репозиториев]] или же собраны самостоятельно.
  
'''Pacman''', синхронизируя пакеты с главным сервером, поддерживает систему в актуальном состоянии. Такая клиент-серверная модель позволяет пользователю скачивать/устанавливать пакеты со всеми требуемыми зависимостями всего одной командой.
+
''pacman'' поддерживает систему в актуальном состоянии, синхронизируя пакеты с сервером. Такая клиент-серверная модель позволяет пользователю скачивать/устанавливать пакеты со всеми требуемыми зависимостями всего одной командой.
  
'''Pacman''' написан на языке C и использует формат пакетов {{ic|.pkg.tar.xz}}.
+
''pacman'' написан на языке C и использует формат пакетов ''.pkg.tar.xz''.
  
{{Tip|Официальный пакет {{Pkg|pacman}} включает в себя много дополнительных полезных инструментов, таких как '''makepkg''', '''pactree''', '''vercmp''' и т.д.: выполните {{ic|pacman -Ql pacman <nowiki>|</nowiki> grep bin}}, чтобы увидеть полный список}}
+
{{Tip (Русский)|Официальный пакет {{Pkg|pacman}} включает в себя много дополнительных полезных инструментов, таких как '''makepkg''', '''pactree''', '''vercmp''' и [[#Частичные обновления не поддерживаются|checkupdates]]. Выполните {{ic|pacman -Ql pacman <nowiki>|</nowiki> grep bin}}, чтобы увидеть полный список.}}
  
== Конфигурация ==
+
== Настройка ==
  
Основные настройки pacman находятся в {{ic|/etc/pacman.conf}}. В этом файле пользователь может указать все нужные ему настройки программы. Подробнее о конфигурировании можно прочесть в [https://www.archlinux.org/pacman/pacman.conf.5.html man pacman.conf].
+
Основные настройки ''pacman'' находятся в {{ic|/etc/pacman.conf}}. В этом файле пользователь может указать все нужные ему настройки программы. Подробнее о конфигурировании можно прочесть в [https://www.archlinux.org/pacman/pacman.conf.5.html man pacman.conf].
 
 
Есть пасхалка: при добавлении в # Misc options параметра ILoveCandy скучные решетки превращаются в пакмена и точки, которые он ест :D
 
  
 
=== Основные параметры ===
 
=== Основные параметры ===
  
Основные параметры находятся в секции {{ic|[options]}}. Для получения дополнительной информации о параметрах прочтите страницу man или изучите установленный по умолчанию файл {{ic|pacman.conf}}.
+
Основные параметры находятся в секции {{ic|[options]}}. Для получения дополнительной информации о параметрах прочтите [[man page (Русский)|страницу справочного руководства]] или изучите установленный по умолчанию файл {{ic|pacman.conf}}.
  
 
==== Пропуск обновления пакетов ====
 
==== Пропуск обновления пакетов ====
  
Для пропуска какого-либо пакета во время [[#Обновление системы|обновления системы]] добавьте его название в строку:
+
Для пропуска какого-либо пакета во время [[#Обновление пакетов|обновления]] системы добавьте его название в строку:
  
{{bc|<nowiki>IgnorePkg=имя_пакета</nowiki>}}
+
IgnorePkg=linux
  
В случае, если необходимо в строке {{ic|IgnorePkg}} перечислить несколько пакетов, разделяйте их имена пробелами:
+
В случае, если необходимо в строке {{ic|IgnorePkg}} перечислить несколько пакетов, разделяйте их имена пробелами или используйте несколько строк {{ic|IgnorePkg}}. Также можно использовать глобальные шаблоны (glob patterns). Если вы хотите пропустить обновление каких-либо пакетов единожды, можно также использовать опцию {{ic|--ignore}} в командной строке, разделяя имена пакетов запятыми.
  
{{bc|<nowiki>IgnorePkg=имя_пакета1 имя_пакета2 имя_пакета3</nowiki>}}
+
У вас по-прежнему будет возможность в будущем обновить проигнорированные пакеты с использованием {{ic|pacman -S}}: ''pacman'' напомнит вам, что есть пакеты, включенные в секцию {{ic|IgnorePkg}}.
  
Если вы хотите пропустить обновление какого-либо пакета '''единожды''', можно также использовать опцию {{ic|--ignore}} в командной строке, разделяя имена пакетов запятыми.
+
==== Пропуск обновления группы пакетов ====
  
У вас по-прежнему будет возможность в будущем обновить проигнорированные пакеты с использованием {{ic|pacman -S}}: pacman напомнит вам, что есть пакеты, включенные в {{ic|IgnorePkg}}.
+
Как и в случае с отдельными пакетами, вы можете запрещать обновления групп пакетов, например так:
  
==== Пропуск обновления группы пакетов ====
+
IgnoreGroup=gnome
  
Как и в случае с пакетом, вы также можете запретить обновления группы пакетов, например так:
+
==== Игнорирование установки файлов в систему ====
  
{{bc|<nowiki>IgnoreGroup=имя_группы</nowiki>}}
 
 
==== Игнорирование установки файлов в систему ====
 
 
 
Для пропуска каталогов, в которые должны будут устанавливаться файлы, перечислите эти каталоги в {{Ic|NoExtract}}. Например, для игнорирования установки юнитов [[systemd (Русский)|systemd]]:
 
Для пропуска каталогов, в которые должны будут устанавливаться файлы, перечислите эти каталоги в {{Ic|NoExtract}}. Например, для игнорирования установки юнитов [[systemd (Русский)|systemd]]:
 
{{bc|<nowiki>NoExtract=usr/lib/systemd/system/*</nowiki>}}
 
 
=== Репозитории ===
 
  
В этом разделе файла {{ic|pacman.conf}} указываются [[Official Repositories (Русский)|репозитории]], которые будут использоваться. Их можно указать прямо здесь или подключить из другого файла.
+
NoExtract=usr/lib/systemd/system/*
  
Все официальные репозитории перечислены в одном файле - {{ic|/etc/pacman.d/mirrorlist}}, для доступа к ним используется переменная {{ic|$repo}}; таким образом достаточно поддерживать в актуальном состоянии только один список. Смотрите [[Mirrors|эту статью]] для настройки зеркал.
+
=== Репозитории ===
  
Далее приведен пример использования [[mirrors|зеркал]] [[Official Repositories (Русский)|официальных репозиториев]], которые перечислены в {{ic|/etc/pacman.d/mirrorlist}}.
+
В этом разделе файла {{ic|pacman.conf}} указываются [[Official repositories (Русский)|репозитории]], которые будут использоваться. Их можно указать прямо здесь или подключить из другого файла (например {{ic|/etc/pacman.d/mirrorlist}}). Таким образом достаточно поддерживать в актуальном состоянии только один список. Для получения информации по настройке зеркал смотрите статью [[Зеркала]].
 
 
{{bc|<nowiki>
 
  
 +
{{hc|/etc/pacman.conf|2=
 
#[testing]
 
#[testing]
#SigLevel = PackageRequired
+
#SigLevel = PackageRequired
 
#Include = /etc/pacman.d/mirrorlist
 
#Include = /etc/pacman.d/mirrorlist
  
 
[core]
 
[core]
#SigLevel = PackageRequired
+
SigLevel = PackageRequired
Include=/etc/pacman.d/mirrorlist
+
Include = /etc/pacman.d/mirrorlist
  
 
[extra]
 
[extra]
#SigLevel = PackageOptional
+
SigLevel = PackageRequired
 
Include = /etc/pacman.d/mirrorlist
 
Include = /etc/pacman.d/mirrorlist
+
 
 
#[community-testing]
 
#[community-testing]
 
#SigLevel = PackageRequired
 
#SigLevel = PackageRequired
Line 112: Line 101:
  
 
[community]
 
[community]
#SigLevel = PackageOptional
+
SigLevel = PackageRequired
 
Include = /etc/pacman.d/mirrorlist
 
Include = /etc/pacman.d/mirrorlist
  
#Если в вашей x86_64 системе необходимо запускать 32-битные программы,
+
# Если в вашей системе x86_64 необходимо запускать 32-битные программы,
#раскоментируйте нужные multilib репозитории.
+
# раскомментируйте нужные репозитории multilib.
  
 
#[multilib-testing]
 
#[multilib-testing]
Line 122: Line 111:
 
#Include = /etc/pacman.d/mirrorlist
 
#Include = /etc/pacman.d/mirrorlist
  
[multilib]
+
#[multilib]
#SigLevel = PackageOptional
+
#SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
+
#Include = /etc/pacman.d/mirrorlist
  
# Использование собственного репозитория. Обратитесь к справочной странице pacman для
+
# Пример использования пользовательского репозитория. Обратитесь к справочной странице (man) pacman для
 
# получения дополнительной информации по созданию собственных репозиториев.
 
# получения дополнительной информации по созданию собственных репозиториев.
 
 
#[custom]
 
#[custom]
 
#SigLevel = Optional TrustAll
 
#SigLevel = Optional TrustAll
#Server = file:///home/custompkgs
+
#Server = file:///home/custompkgs}}
</nowiki>}}
 
  
{{Warning (Русский)|Будьте осторожны при использовании репозитория ''testing''. Пакеты в нём активно разрабатываются и обновляются, это может сказаться на стабильности и работоспособности других пакетов или системы в целом. Людям, использующим репозиторий ''testing'', для своевременного получения информации рекомендуется подписаться на [https://mailman.archlinux.org/mailman/listinfo/arch-dev-public список рассылки arch-dev-public].}}
+
{{Warning (Русский)|Будьте осторожны при использовании репозитория ''testing''. Пакеты в нем активно разрабатываются и обновляются это может сказаться на стабильности и работоспособности других пакетов или системы в целом. Людям, использующим репозиторий ''testing'', для своевременного получения информации рекомендуется подписаться на [https://mailman.archlinux.org/mailman/listinfo/arch-dev-public почтовую рассылку arch-dev-public].}}
  
 
=== Безопасность пакетов ===
 
=== Безопасность пакетов ===
 
В Pacman 4 реализован дополнительный уровень безопасности устанавливаемых пакетов - подписи. Конфигурация по умолчанию, {{ic|1=SigLevel = Required DatabaseOptional}}, включает проверку подписей для всех пакетов на глобальном уровне. Это поведение может быть изменено для каждого конкретного репозитория в строках {{ic|SigLevel}}, как показано выше. Для получения дополнительной информации о подписях пакетов и их проверке взгляните на статью [[pacman-key (Русский)]].
 
  
== Использование ==
+
В ''pacman'' 4 реализован дополнительный уровень безопасности устанавливаемых пакетов — подписи. Конфигурация по умолчанию, {{ic|1=SigLevel = Required DatabaseOptional}}, включает проверку подписей для всех пакетов на глобальном уровне. Это поведение может быть изменено для каждого конкретного репозитория в строках {{ic|SigLevel}}, как показано выше. Для получения дополнительной информации о подписях пакетов и их проверке посмотрите статью [[pacman-key (Русский)]].
 +
 
 +
== Использование ==
 +
 
 +
В этом разделе приведена небольшая подборка доступных возможностей ''pacman''. Чтобы узнать больше, изучите [https://archlinux.org/pacman/pacman.8.html man pacman].
 +
 
 +
=== Установка пакетов ===
 +
 
 +
{{Note (Русский)|Довольно часто пакеты имеют [[PKGBUILD (Русский)#optdepends|дополнительные зависимости]], которые не являются обязательными, но предоставляют дополнительную функциональность. Если вы пропустите эту информацию при установке пакета, вы можете посмотреть ее потом, используя [[#Запросы к базам данных пакетов]].}}
  
Чтобы узнать обо всех возможностях pacman, изучите [https://archlinux.org/pacman/pacman.8.html man pacman]. Примеры ниже - это только небольшая подборка доступных операций.
+
==== Установка определенных пакетов ====
  
Для получения вводной информации смотрите статью [[pacman - An Introduction]].
+
Для установки одного пакета или списка пакетов (включая зависимости) используйте следующую команду:
  
===Установка пакетов===
+
# pacman -S ''имя_пакета1'' ''имя_пакета2'' ...
  
====Установка определенных пакетов====
+
Для установки списка пакетов при помощи поиска по регулярному выражению (смотрите раздел [[Pacman tips#Operations and Bash syntax|Операции и синтаксис Bash]]{{Broken section link}} и [https://bbs.archlinux.org/viewtopic.php?id=7179 эту ветку форума]):
Для установки одного пакета или группы пакетов (включая зависимости) используйте следующую команду:
 
  
  # pacman -S имя_пакета1 имя_пакета2 ...
+
  # pacman -S $(pacman -Ssq ''регулярное_выражение'')
  
 
Если пакет имеет несколько версий в разных репозиториях (например, в ''extra'' и ''testing''), можно указать, откуда именно следует установить пакет:
 
Если пакет имеет несколько версий в разных репозиториях (например, в ''extra'' и ''testing''), можно указать, откуда именно следует установить пакет:
  
  # pacman -S extra/имя_пакета
+
  # pacman -S extra/''имя_пакета''
 +
 
 +
==== Установка группы пакетов ====
  
====Установка группы пакетов====
 
 
Некоторые пакеты объединены в группы пакетов, и они могут быть установлены одновременно. Например, при выполнении команды:
 
Некоторые пакеты объединены в группы пакетов, и они могут быть установлены одновременно. Например, при выполнении команды:
  
Line 164: Line 157:
 
вам будет предложено выбрать пакеты из группы {{Grp|gnome}}, которые вы хотели бы установить.
 
вам будет предложено выбрать пакеты из группы {{Grp|gnome}}, которые вы хотели бы установить.
  
Некоторые группы содержат большое количество пакетов, и среди них могут быть всего несколько нужных или ненужных вам. Вместо того, чтобы вводить все необходимые вам номера, иногда удобнее выбрать или исключить отдельные числа или диапазоны чисел при помощи приведенного ниже синтаксиса.
+
Некоторые группы содержат большое количество пакетов, и среди них могут быть всего несколько нужных или ненужных вам. Вместо того, чтобы вводить все необходимые вам номера, иногда удобнее выбрать или исключить отдельные числа или диапазоны чисел при помощи приведенного ниже синтаксиса:
 
 
В данном примере для установки будут выбраны все пакеты в диапазоне с 1 по 10, а также 15:
 
  
 
  Enter a selection (default=all): 1-10 15
 
  Enter a selection (default=all): 1-10 15
  
В данном примере для установки будут выбраны все пакеты, кроме входящих в диапазон с 5 по 8, а также 2:
+
будут выбраны все пакеты в диапазоне с 1 по 10, а также 15;
  
 
  Enter a selection (default=all): ^5-8 ^2
 
  Enter a selection (default=all): ^5-8 ^2
 +
 +
— будут выбраны все пакеты, кроме входящих в диапазон с 5 по 8, а также 2.
  
 
Чтобы увидеть список пакетов, принадлежащих к группе gnome, выполните:
 
Чтобы увидеть список пакетов, принадлежащих к группе gnome, выполните:
Line 180: Line 173:
 
Перечень доступных групп пакетов можно изучить, посетив https://www.archlinux.org/groups/.
 
Перечень доступных групп пакетов можно изучить, посетив https://www.archlinux.org/groups/.
  
{{Note (Русский)|Если не будет использована опция {{ic|--needed}}, то при установке группы будут переустановлены все ранее установленные в систему и принадлежащие этой группе пакеты (даже если установленные в системе пакеты будут иметь последнюю доступную версию).}}
+
{{Note (Русский)|Если пакет в списке уже установлен, он будет переустановлен даже если была установлена последняя версия. Это поведение можно изменить опцией {{ic|--needed}}.}}
  
{{Warning (Русский)|1=При установке недостаточно одного обновления списка пакетов (например, {{ic|pacman -Sy имя_пакета}}): могут возникнуть проблемы с зависимостями. Смотрите разделы [https://bbs.archlinux.org/viewtopic.php?id=89328] и [[#Частичные обновления официально не поддерживаются|Частичные обновления не поддерживаются]]. В первую очередь, перед установкой новых пакетов выполняйте полное [[#Обновление Системы|обновление системы]].}}
+
{{Warning (Русский)|1=Перед установкой пакетов '''не''' обновляйте список пакетов без последующего [[#Обновление пакетов|обновления]] системы (например, {{ic|pacman -Sy ''имя_пакета''}}), иначе могут возникнуть проблемы с зависимостями. Смотрите раздел [[#Частичные обновления не поддерживаются]] и ветку форума https://bbs.archlinux.org/viewtopic.php?id=89328.}}
  
 
=== Удаление пакетов ===
 
=== Удаление пакетов ===
Line 188: Line 181:
 
Для удаления пакета без удаления установленных зависимостей:
 
Для удаления пакета без удаления установленных зависимостей:
  
  # pacman -R имя_пакета
+
  # pacman -R ''имя_пакета''
  
 
Для удаления пакета со всеми зависимостями, не используемыми другими установленными пакетами:
 
Для удаления пакета со всеми зависимостями, не используемыми другими установленными пакетами:
  
  # pacman -Rs имя_пакета
+
  # pacman -Rs ''имя_пакета''
  
 
Для удаления пакета, его зависимостей и всех пакетов, зависящих от целевого пакета:
 
Для удаления пакета, его зависимостей и всех пакетов, зависящих от целевого пакета:
Line 198: Line 191:
 
{{Warning (Русский)|Эта операция рекурсивна и должна использоваться с осторожностью, так как появляется риск удалить много потенциально необходимых пакетов.}}
 
{{Warning (Русский)|Эта операция рекурсивна и должна использоваться с осторожностью, так как появляется риск удалить много потенциально необходимых пакетов.}}
  
  # pacman -Rsc имя_пакета
+
  # pacman -Rsc ''имя_пакета''
  
 
Для удаления пакета, который требуется другому пакету, без удаления зависимого пакета:
 
Для удаления пакета, который требуется другому пакету, без удаления зависимого пакета:
  
  # pacman -Rdd ''package_name''
+
  # pacman -Rdd ''имя_пакета''
  
По умолчанию pacman создает резервные копии конфигурационных файлов удаляемых приложений с помощью добавления к ним расширения {{ic|.pacsave}}. Если вы хотите удалить и эти файлы, используйте ключ  {{ic|-n}}:
+
''pacman'' создает резервные копии конфигурационных файлов удаляемых приложений и добавляет к ним расширение ''.pacsave''. Если вы хотите удалить и эти файлы, используйте ключ  {{ic|-n}}:
  
  # pacman -Rn имя_пакета
+
  # pacman -Rn ''имя_пакета''
  
{{Note (Русский)|pacman не удаляет конфигурационных файлов, созданных самими приложениями (например, "dot-файлы" в вашей домашней папке).}}
+
{{Note (Русский)|''pacman'' не удаляет конфигурационных файлов, созданных самими приложениями (например, скрытые файлы (имя которых начинается с точки) в вашем домашнем каталоге).}}
  
===Обновление системы===
+
=== Обновление пакетов ===
  
pacman может обновить все пакеты системы одной командой. Количество пакетов зависит от того, насколько свежие пакеты стоят в вашей системе. Лучший вариант - синхронизация базы данных репозиториев '''И''' обновление вашей системы одной командой (не будут обновлены пакеты из 'локальных' и не настроенных репозиториев):
+
''pacman'' может обновить все пакеты системы одной командой. Это может занять длительное время в зависимости от того, насколько свежие пакеты установлены в вашей системе. Следующая команда выполнит одновременно синхронизацию локальной базы данных репозиториев ''и'' обновление вашей системы (не будут обновлены 'локальные' пакеты, отсутствующие в настроенных репозиториях):
  
 
  # pacman -Syu
 
  # pacman -Syu
  
{{Warning (Русский)|В связи с тем, что Arch является постоянно обновляемым дистрибутивом, пользователям следует помнить, что после или в процессе обновления могут возникнуть непредвиденные трудности. Поэтому обновляться следует с осторожностью. Это означает, что если, например, ожидаются большие изменения или нововведения в обновляемых пакетах, то обновлять систему лучше тогда, когда у пользователя будет достаточно свободного времени и он будет готов к решению возможных проблем.}}
+
{{Warning (Русский)|В связи с тем, что Arch является постоянно обновляемым дистрибутивом, пользователям следует помнить, что после или в процессе обновления могут возникнуть непредвиденные трудности. Поэтому обновляться следует с осторожностью. Это означает, что если, например, ожидаются большие изменения или нововведения в обновляемых пакетах, то обновлять систему лучше тогда, когда у вас будет достаточно свободного времени и вы будете готовы к решению возможных проблем.}}
  
pacman является мощным инструментом по управлению пакетами, но он не сможет обработать все возможные ситуации. Если вас это смущает - прочтите [[The Arch Way (Русский)|Путь Arch Linux]]. Пользователь должен быть внимателен и сам заниматься обеспечением работоспособности своей системы. '''При выполнении обновления системы крайне важно читать и осмысливать всю информацию, которую выводит pacman.''' Если вы изменяли конфигурационный файл, то при обновлении, во избежание перезаписи, будет создан новый конфигурационный файл {{ic|.pacnew}}. pacman предложит объединить его с вашим конфигурационным файлом. Выполнять объединение файлов придется вручную и, лучше всего, сразу после обновления. Для получения дополнительной информации обратитесь к руководству [[Pacnew and Pacsave Files]].
+
''pacman'' является мощным инструментом по управлению пакетами, но он не решает и не пытается решать абсолютно все возможные проблемы. Если вас это смущает, прочтите статью [[Философия Arch]]. Пользователь должен быть внимателен и сам заниматься обеспечением работоспособности своей системы. '''При выполнении обновления системы крайне важно читать и осмысливать всю информацию, которую выводит ''pacman''.''' Если вы изменяли конфигурационный файл, то при обновлении, во избежание перезаписи, будет создан новый конфигурационный файл ''.pacnew''. ''pacman'' предложит объединить его с вашим конфигурационным файлом. Выполнять объединение файлов придется вручную и, лучше всего, сразу после обновления. Для получения дополнительной информации обратитесь к статье [[Файлы Pacnew и Pacsave]].
  
{{Tip|Не забывайте, что вывод pacman заносится в {{ic|/var/log/pacman.log}}.}}
+
{{Tip (Русский)|Не забывайте, что вывод pacman сохраняется в {{ic|/var/log/pacman.log}}.}}
  
Перед обновлением желательно посетить [https://www.archlinux.org/ главную страницу Arch Linux], [https://www.archlinux.org.ru/ главную страницу русскоязычного сообщества Arch Linux] и проверить там последние новости (другие варианты - подписаться на [http://archlinux.org.ru/news/feed/ RSS-ленту новостей], [https://mailman.archlinux.org/mailman/listinfo/arch-announce/ список рассылки], или [https://twitter.com/archlinux @archlinux] в Twitter): для обновлений, требующих дополнительного вмешательства (если выполнения указанных pacman-ом действий не достаточно), будут добавлены соответствующие новости.
+
Перед обновлением желательно посетить [https://www.archlinux.org/ главную страницу Arch Linux] и [http://www.archlinux.org.ru/ главную страницу русскоязычного сообщества Arch Linux] и проверить там последние новости (также вы можете подписаться на [http://archlinux.org.ru/news/feed/ RSS-ленту новостей], [https://mailman.archlinux.org/mailman/listinfo/arch-announce/ почтовую рассылку] или [https://twitter.com/archlinux @archlinux] в Twitter): для обновлений, требующих дополнительного вмешательства (если выполнения указанных ''pacman'''ом действий не достаточно), будут добавлены соответствующие новости.
  
Если решить проблемы согласно инструкциям не удаётся, поищите подобные сообщения на форуме. Вполне возможно, что другие пользователи, столкнувшиеся с подобными проблемами, уже предоставили варианты по их решению.
+
Если решить проблемы согласно инструкциям не удается, поищите подобные сообщения на форуме. Вполне возможно, что другие пользователи, столкнувшиеся с подобными проблемами, уже предоставили варианты по их решению.
  
=== Запросы к базе данных пакетов ===
+
=== Запросы к базам данных пакетов ===
  
pacman с помощью флага {{ic|-Q}} может искать пакеты в локальной базе данных; смотрите:
+
''pacman'' с помощью флага {{ic|-Q}} может искать пакеты в локальной базе данных:
  
 
  $ pacman -Q --help
 
  $ pacman -Q --help
  
и с помощью флага {{ic|-S}} в базе данных (репозиториях); смотрите:
+
а с помощью флага {{ic|-S}} в базе данных, синхронизированной с репозиториями:
  
 
  $ pacman -S --help
 
  $ pacman -S --help
  
pacman умеет искать пакеты в базе данных как по названиям, так и по описаниям:
+
''pacman'' умеет искать пакеты в базе данных как по названиям, так и по описаниям:
 
 
$ pacman -Ss условие1 условие2 ...
 
  
Поиск пакета по имени в базе данных (вывод без дополнительной информации):
+
  $ pacman -Ss ''условие1'' ''условие2'' ...
 
 
  $ pacman -Sqs  условие1 условие2 ...
 
  
 
Для поиска среди установленных пакетов:
 
Для поиска среди установленных пакетов:
  
  $ pacman -Qs условие1 условие2 ...
+
  $ pacman -Qs ''условие1'' ''условие2'' ...
  
Для отображения обширной информации о данном пакете:
+
Для отображения подробной информации об указанном пакете:
  
  $ pacman -Si имя_пакета
+
  $ pacman -Si ''имя_пакета''
  
для установленных пакетов:
+
и для установленных пакетов:
  
  $ pacman -Qi имя_пакета
+
  $ pacman -Qi ''имя_пакета''
  
Использование сдвоенного флага {{ic|-i}} позволит просмотреть список резервных копий файлов и список измененных файлов:
+
Использование сразу двух флагов {{ic|-i}} позволит просмотреть список резервных копий файлов и список измененных файлов:
  
  $ pacman -Qii имя_пакета
+
  $ pacman -Qii ''имя_пакета''
  
 
Для получения списка файлов установленного пакета:
 
Для получения списка файлов установленного пакета:
  
  $ pacman -Ql имя_пакета
+
  $ pacman -Ql ''имя_пакета''
  
Для неустановленных пакетов используйте [[pkgfile]].
+
Для неустановленных пакетов используйте [[pkgfile (Русский)|pkgfile]].
  
 
Чтобы проверить наличие файлов, установленных пакетом:
 
Чтобы проверить наличие файлов, установленных пакетом:
Line 270: Line 259:
 
  $ pacman -Qk ''имя_пакета''
 
  $ pacman -Qk ''имя_пакета''
  
Использование двойного флага {{ic|k}} ({{ic|-Qkk}}) даст более тщательную проверку.
+
Использование сразу двух флагов {{ic|k}} выполнит более тщательную проверку.
  
 
Чтобы узнать, какому пакету принадлежит нужный файл:
 
Чтобы узнать, какому пакету принадлежит нужный файл:
  
  $ pacman -Qo /путь/к/файлу/имя_файла
+
  $ pacman -Qo ''/путь/к/файлу/имя_файла''
  
Для получения списка пакетов, которые больше не требуются как зависимости (пакеты, которые могут быть безопасно удалены или сироты):
+
Для получения списка пакетов, которые больше не требуются как зависимости (пакеты, которые могут быть безопасно удалены или "осиротевшие" пакеты):
  
 
  $ pacman -Qdt
 
  $ pacman -Qdt
 +
 +
Для отображения пакетов, которые были установлены явно и от которых не зависят другие пакеты:
 +
 +
$ pacman -Qet
  
 
Для отображения зависимостей в виде дерева:
 
Для отображения зависимостей в виде дерева:
 
$ pactree имя_пакета
 
  
Для получения списка пакетов, которые зависят от конкретного ''установленного'' пакета, можно воспользоваться утилитой {{ic|whoneeds}} из состава пакета [[pkgtools]]:
+
$ pactree ''имя_пакета''
  
$ whoneeds имя_пакета
+
Для получения списка пакетов, которые зависят от конкретного ''установленного'' пакета, можно использовать утилиту ''whoneeds'' из состава пакета [[pkgtools]]:
  
=== Получение списка установленных пакетов для быстрого восстановления системы ===
+
$ whoneeds ''имя_пакета''
  
Хорошей практикой является сохранение списка всех установленных пакетов. Если ваша система "упала" и её сложно восстановить, pacman может легко переустановить эти пакеты.
+
или ''pactree'' c флагом {{ic|r}}:
  
Сначала сохраните в список пакеты (доступные в репозитории):
+
  $ pactree -r ''имя_пакета''
  pacman -Qqe | grep -v "$(pacman -Qmq)" > pkglist
 
  
безопасная, но и более сложная альтернатива (во избежание удаления частичных совпадений):
+
Для просмотра других команд обратитесь к статье [[pacman/Советы и приёмы]].
comm -13 <(pacman -Qmq | sort) <(pacman -Qqe | sort) > pkglist
 
  
Сохраните этот файл на флешке или на другом носителе.
+
=== Очистка кэша пакетов ===
  
Скопируйте файл pkglist в новую систему, перейдите в эту папку. Для восстановления используйте команду:
+
''pacman'' сохраняет скачиваемые пакеты в каталоге ({{ic|/var/cache/pacman/pkg/}}) и не удаляет их файлы автоматически, поэтому следует время от времени самостоятельно чистить этот каталог, чтобы предотвратить его разрастание.
pacman -S $(cat pkglist)
 
  
=== Получение списка файлов, не принадлежащих ни одному пакету ===
+
Есть встроенная опция для удаления из кэша всех пакетов, не установленных на данный момент:
 +
 
 +
# pacman -Sc
  
Если вы всегда хотите держать свою систему в чистоте и уважаете [[Путь Arch]], вы должны иногда проверять файлы, отсутствующие в базе данных pacman. Эти файлы зачастую установлены сторонними приложениями с использованием '''./configure; make; make install''' и т.п. Вы можете найти все эти установленные файлы (или симлинки), используя этот простой скрипт:
+
{{Warning (Русский)|
 +
* Делайте это только в том случае, если у вас есть определенная уверенность, что установленные пакеты стабильны и вам не потребуется [[Downgrading packages (Русский)|откат версии]], поскольку данная команда удалит все старые версии из каталога кэша, оставив только те, которые установлены в системе на данный момент. Сохранение более старых версий пакетов может пригодиться в тех случаях, когда обновление приводит к неправильной работе системы или отдельных программ. Если не следовать этому совету, может возникнуть ситуация, в которой пользователь будет вынужден использовать альтернативный источник устаревших пакетов, такой как [[Откат пакетов#ARM|Arch Rollback Machine]].
 +
* Также есть возможность полностью очистить каталог кэша при помощи команды {{ic|pacman -Scc}}, однако ее использование считается плохой практикой, так как, в дополнение к вышесказанному, в случае необходимости вы не сможете переустановить пакет непосредственно из директории кэша, и вам придется скачивать его заново. Настоятельно не рекомендуется использовать эту команду, за исключением случаев, когда у вас есть острая потребность в освобождении дискового пространства.
 +
}}
  
#!/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, НЕ БУДУТ удалены без подтверждения. Здесь могут находиться конфигурационные файлы, журналы и др. Используйте этот список только если знаете, что вы делаете.
+
* Команда ''paccache'', предоставляемая пакетом {{Pkg|pacman}}, по умолчанию удаляет из кэша все версии каждого пакета, кроме трех недавно использовавшихся: {{bc|$ paccache -r}} Однако, в этом случае ''paccache'' '''не будет''' проверять, установлен ли пакет на данный момент, оставляя удаленные пакеты в кэше. Для удаления из кэша всех версий удаленных пакетов придется запустить команду еще раз с другими опциями: {{bc|$ paccache -ruk0}} Для просмотра всех опций смотрите {{ic|paccache -h}}.
 +
* Альтернативный вариант — использование пакета {{AUR|pkgcacheclean}} из [[Arch User Repository (Русский)|AUR]]: {{bc|# pkgcacheclean}}
  
 
=== Дополнительные команды ===
 
=== Дополнительные команды ===
Line 325: Line 309:
 
Обновление системы и установка списка пакетов (за одну операцию):
 
Обновление системы и установка списка пакетов (за одну операцию):
  
  # pacman -Syu имя_пакета1 имя_пакета2 ...
+
  # pacman -Syu ''имя_пакета1'' ''имя_пакета2'' ...
  
 
Скачать пакет, но не устанавливать его:
 
Скачать пакет, но не устанавливать его:
  
  # pacman -Sw имя_пакета
+
  # pacman -Sw ''имя_пакета''
  
Установить локальный пакет (не из репозитория):
+
Установить локальный пакет не из репозитория (например, для пакетов из [[Arch User Repository (Русский)|AUR]]:
  
  # pacman -U /путь/к/пакету/имя_пакета-version.pkg.tar.xz
+
  # pacman -U /путь/к/пакету/имя_пакета-версия.pkg.tar.xz
  
{{Tip|Чтобы сохранить копию локального устанавливаемого пакета в кэше pacman'а, используйте:
+
{{Tip (Русский)|Чтобы сохранить копию локального устанавливаемого пакета в кэше ''pacman'''а, используйте:
  # pacman -U file://путь/к/пакету/имя_пакета-version.pkg.tar.xz
+
  # pacman -U file:///путь/к/пакету/имя_пакета-версия.pkg.tar.xz
 
}}
 
}}
  
Установить 'не локальный' пакет (не из репозитория):
+
Скачать и установить пакет из удаленного источника (но и не из репозиториев, перечисленных в конфигурационном файле pacman'a):
  
 
  # pacman -U <nowiki>http://www.example.com/repo/example.pkg.tar.xz</nowiki>
 
  # pacman -U <nowiki>http://www.example.com/repo/example.pkg.tar.xz</nowiki>
  
Удалить из кэша ({{ic|/var/cache/pacman/pkg}}) не установленные на данный момент пакеты:
+
=== Частичные обновления не поддерживаются ===
 +
 
 +
Arch Linux — постоянно обновляемый дистрибутив, и это значит, что в репозиториях всегда находятся новые версии [[Wikipedia:ru:Библиотека (программирование)|библиотек]]. Разработчики и доверенные пользователи собирают пакеты для репозиториев с использованием этих библиотек. Для пакетов, установленных локально (например, пакетов из [[Arch User Repository (Русский)|AUR]]), нужно самостоятельно решать вопрос с зависимостями согласно данным [[Wikipedia:soname|soname]].
 +
 
 +
Именно поэтому частичное обновление '''не поддерживается'''. Не используйте {{ic|pacman -Sy имя_пакета}} или другие эквиваленты, такие как {{ic|pacman -Sy}} и {{ic|pacman -S имя_пакета}}. Всегда перед установкой пакетов синхронизируйте репозитории и обновляйте систему полностью. По той же самой причине нужно быть осторожными при использовании {{ic|IgnorePkg}} и {{ic|IgnoreGroup}}.
 +
 
 +
Если после частичного обновления оказалось, что двоичные файлы не могут найти нужных версий библиотек, '''не "решайте" проблему простым созданием символических ссылок''' (библиотеки '''не имеют обратной совместимости'''). Выполните {{ic|pacman -Syu}}: как правило, этого будет достаточно для устранения проблемы, если она не затронула сам pacman.
 +
 
 +
Скрипт '''checkupdates''', поставляемый с пакетом pacman, позволяет безопасно проверить установленные пакеты на наличие обновления без запуска собственно обновления при этом.
 +
 
 +
=== Общие рекомендации ===
  
{{Warning (Русский)|Делайте это только в том случае, если у вас есть определенная уверенность, что установленные пакеты стабильны и вам не потребуется [[Downgrading Packages (Русский)|откат версии]], поскольку данная команда удалит все старые версии из каталога кэша, оставив только те, которые установлены в системе на данный момент. Сохранение более старых версий пакетов может пригодиться в тех случаях, когда обновление приводит к неправильной работе системы или отдельных программ}}
+
{{Warning (Русский)|Будьте осторожны при использовании ключа {{ic|--force}}, поскольку это может повлечь за собой серьезные проблемы. Настоятельно рекомендуется использовать эту опцию ''только'' в том случае, когда это указано в инструкциях по обновлению из новостей Arch.}}
  
# pacman -Sc
+
''pacman'' поставляется с рядом утилит, которые могут значительно упростить ваше взаимодействие с системой. Для просмотра опций каждую из них можно запускать с ключом {{ic|--help}}. Для просмотра списка всех утилит выполните команду:
  
Полная очистка кэша пакетов:
+
$ pacman -Ql pacman | awk -F"[/ ]" '/\/usr\/bin/ {print $5}'
  
{{Warning (Русский)|Данная команда полностью очистит кэш пакетов. Ее применение считается плохой практикой, поскольку это лишит вас возможности произвести откат пакета(ов) непосредственно из каталога кэша, и пользователь будет вынужден использовать альтернативный источник, например, [[Downgrading Packages (Русский)#ARM|Arch Rollback Machine]]}}
+
== Решение проблем ==
  
# pacman -Scc
+
=== Обновления пакетов сломали мою систему ===
  
{{Tip|В качестве альтернативы ключам {{ic|-Sc}} и {{ic|-Scc}} можно использовать утилиту {{ic|paccache}} из пакета {{pkg|pacman}}. Она предлагает больше контроля над тем, какие и как много пакетов будет удалено. Выполните команду {{ic|paccache -h}} для получения инструкций}}
+
Arch Linux является дистрибутивом с плавающей системой релизов, позволяющей быстро получать наиболее свежие версии программ. Обновления для пакетов становятся доступными тогда, когда их посчитают достаточно стабильными для повседневного использования. Тем не менее, обновления иногда требуют вмешательства пользователя: может потребоваться обновление конфигурационных файлов, могут измениться дополнительные зависимости и т.д.
  
===Частичные обновления официально не поддерживаются===
+
Запомните основное правило: не обновляйте систему "вслепую". Всегда внимательно изучайте список обновляемых пакетов. Обращайте внимание на обновление "критически важных" компонентов ({{Pkg|linux}}, {{Pkg|xorg-server}} и т.д.). Если такие пакеты есть, проверьте наличие новостей на https://www.archlinux.org/ или http://www.archlinux.org.ru/ и просмотрите последние сообщения на форуме — возможно, кто-то уже столкнулся с проблемами при обновлении и сообщил об этом.
Arch Linux - постоянно обновляемый дистрибутив, и это значит, что в репозиториях всегда находятся новые версии [[Wikipedia:Library (computing)|библиотек]]. Разработчики и доверенные пользователи собирают пакеты для репозиториев с использованием этих библиотек. Для пакетов, установленных локально (например, пакеты из [[Arch User Repository (Русский)|AUR]]), нужно самостоятельно решать вопрос с зависимостями согласно данным [[Wikipedia:soname|soname]].
 
  
Именно поэтому частичное обновление '''не поддерживается'''. Не используйте {{ic|pacman -Sy package}} или другие эквиваленты {{ic|pacman -Sy}} и {{ic|pacman -S package}}. Всегда перед установкой пакетов синхронизируйте репозитории и обновляйте систему полностью. По той же самой причине нужно быть осторожными при использовании {{ic|IgnorePkg}} и {{ic|IgnoreGroup}}.
+
Если известно/ожидается, что после обновления могут возникнуть проблемы, сопроводители пакета добавляют в него предупреждение, которое ''pacman'' выведет при обновлении. Если вы упустили какую-то информацию, которую вывел ''pacman'', то ее можно еще раз просмотреть в логе ({{ic|/var/log/pacman.log}}).
  
Если после частичного обновления оказалось, что бинарные файлы не могут найти нужных версий библиотек и проблему '''невозможно "решить" созданием символической ссылки''' (библиотеки не имеют '''обратной совместимости'''), выполните {{ic|pacman -Syu}}, как правило, этого будет достаточно для устранения проблемы.
+
Теперь, '''если не было никаких предупреждений от ''pacman'', отсутствуют соответствующие новости на https://www.archlinux.org/ и http://www.archlinux.org.ru/ и нет сообщений относительно обновлений на форуме''', имеет смысл обратиться за помощью на форум, [[IRC channel|IRC-канал]], или выполнить [[Откат пакетов]] к работающей версии.
  
=== Общие рекомендации ===
+
=== Для пакета доступно обновление, но pacman сообщает, что система в актуальном состоянии ===
{{Warning (Русский)|Будьте осторожны при использовании ключа {{ic|--force}}, поскольку это может повлечь за собой серьезные проблемы. Настоятельно рекомендуется использовать эту опцию ''только'' в том случае, когда это указано в новостях Arch}}
 
  
== Устранение проблем ==
+
Зеркала pacman синхронизируются не мгновенно. Иногда может пройти более 24 часов, прежде чем обновления станут доступны вам. Будьте терпеливы или используйте другое зеркало. Страница [https://www.archlinux.org/mirrors/status/ MirrorStatus] поможет вам выбрать обновленное зеркало.
 
=== Мне нужно запустить pacman-key --init, но отсутствуют ssh / X или генераторы случайных чисел. Как мне получить энтропию? ===
 
  
Для решения проблемы нужно перемещать указатель мыши, нажимать на клавиатуре случайные кнопки или запустить дисковую активность, например, с помощью {{ic|updatedb}}. Будьте терпеливы, процесс может затянуться на длительное время. При этом переход в другую консоль, по Alt+F2-6, временно работать не будет.
+
=== Ошибка "Failed to commit transaction (conflicting files)" ===
  
=== Мне нужно запустить pacman-key --init через ssh. Как мне получить энтропию? ===
+
Если вы видите следующее сообщение об ошибке: [https://bbs.archlinux.org/viewtopic.php?id=56373]
  
На целевой машине соберите и установите пакет {{Pkg|rng-tools}} из [[AUR (Русский)]]. Подключитесь через ssh и выполните следующие команды:
+
error: could not prepare transaction
{{bc|# sed -i 's/0/10/' /etc/conf.d/rngd
+
error: failed to commit transaction (conflicting files)
# rngd -f -r /dev/urandom &
+
''пакет'': ''/путь/к/файлу'' exists in filesystem
# pacman-key --init}}
+
Errors occurred, no packages were upgraded.
  
После успешного выполнения pacman-key просто остановите rngd и удалите пакет.
+
Почему так происходит? ''pacman'', при обнаружении конфликтующих файлов, не будет их перезаписывать автоматически. Это не ошибка, так сделано специально.
  
{{bc|# killall rngd
+
Проблема решается тривиально. Сначала проверьте, не принадлежит ли файл другому пакету ({{ic|pacman -Qo ''/путь/к/файлу''}}). Если принадлежит, создайте [[Reporting bug guidelines (Русский)|отчет об ошибке]]. Если проблемный файл не нужен другим пакетам, переименуйте его и перезапустите команду обновления. Если в дальнейшем проблем не возникнет, то старый файл можно удалить.
# pacman -Rns rng-tools}}
 
 
=== Pacman не находит PGP ключи для импорта и не обновляет пакеты. Как можно это исправить? ===
 
  
На самом деле проблема не в pacman. Проблема в сервере ключей, используемом по умолчанию. Измените сервер ключей на более надежный таким способом:
+
Если программа была установлена вручную без использования ''pacman'' или его оболочек — например, при помощи команды {{ic|make install}}, вам нужно будет удалить программу и все ее файлы, а затем выполнить установку при помощи ''pacman''. Смотрите также раздел [[pacman tips#Identify files not owned by any package]].
  
# sed -i '/keyserver/ s,keys.gnupg.net,pgp.mit.edu,' /etc/pacman.d/gnupg/gpg.conf
+
Информация о каждом установленном файле хранится в файле с метаданными пакета {{ic|/var/lib/pacman/local/''$пакет-$версия''/files}}. При повреждении этого файла (он может быть пустым или отсутствовать) во время обновления пакета и будет получена ошибка {{ic|file exists in filesystem}} ("файл существует в файловой системе"). Обычно такие ошибки возникают во время установки или обновления всего лишь одного пакета. Вместо ручного переименования или удаления конфликтующих файлов, принадлежащих данному пакету, вы можете запустить выборочную команду {{ic|pacman -S --force $пакет}}, чтобы ''pacman'' принудительно перезаписал эти файлы.
Pacman4 теперь готов к использованию.
 
  
=== Обновление пакета XYZ сломало мою систему! ===
+
{{Warning (Русский)|Будьте осторожны при использовании ключа {{ic|--force}} (например, {{ic|pacman -Syu --force}}), поскольку это может повлечь за собой серьезные проблемы. Настоятельно рекомендуется использовать эту опцию только в том случае, когда это указано в инструкциях по обновлению из новостей Arch.}}
  
Arch Linux - передовой, постоянно обновляемый дистрибутив. Обновления для пакетов становятся доступными тогда, когда их посчитают достаточно стабильными для повседневного использования. Тем не менее, обновления иногда требуют вмешательства пользователя: может потребоваться обновление конфигурационных файлов, могут измениться дополнительные зависимости и т.д.
+
=== Ошибка "Failed to commit transaction (invalid or corrupted package)" ===
  
Запомните основное правило: не обновляйте систему "вслепую". Всегда внимательно изучайте список обновляемых пакетов. Обращайте внимание на обновление "критически важных" компонентов ({{ic|linux}}, {{ic|xorg-server}} и т.д.). Если такие пакеты есть, проверьте наличие новостей на https://www.archlinux.org/ и просмотрите последние сообщения на форуме, возможно, кто-то уже столкнулся с проблемами при обновлении.
+
Удалите все файлы ''.part'' (частично скачанные пакеты) из каталога кеша ''pacman'' {{ic|/var/cache/pacman/pkg}} (часто это проявляется при использовании собственной команды {{ic|XferCommand}} в файле {{ic|pacman.conf}}).
  
Если известно/ожидается, что после обновления могут возникнуть проблемы, pacman выведет соответствующее сообщение. Если вы упустили какую-то информацию, которую вывел pacman, то её можно еще раз просмотреть в {{ic|/var/log/pacman.log}}.
+
=== Ошибка "Failed to init transaction (unable to lock database)" ===
  
Теперь, '''если не было никаких предупреждений от pacman, отсутствуют соответствующие новости на https://www.archlinux.org/ и нет сообщений относительно обновлений на форуме''', имеет смысл обратиться за помощью на форум, [[IRC Channel|IRC-канал]], или [[Downgrading packages|откатить пакет к работающей версии]].
+
Когда ''pacman'' собирается внести изменения в базу данных пакетов, например, при установке пакета, он создает файл блокировки {{ic|/var/lib/pacman/db.lck}}. Благодаря этому другой экземпляр ''pacman'' не сможет работать в то же самое время, что позволяет избежать повреждения базы.
  
Перечитайте последний абзац.
+
Если работа ''pacman'' была прервана во время внесения изменений в базу, этот файл блокировки может остаться не удаленным. Если вы уверены, что на вашей машине не запущено других экземпляров ''pacman'', удалите этот файл блокировки:
  
=== Я знаю, что для пакета ABC доступны обновления, но pacman сообщает мне, что система в актуальном состоянии! ===
+
# rm /var/lib/pacman/db.lck
  
Зеркала pacman синхронизируются не мгновенно. Иногда может пройти более 24 часов, прежде чем обновления станут доступны вам.
+
=== Ошибка "Not found in sync db" при установке пакета ===
  
В качестве решения можно посоветовать сменить зеркало. На [https://www.archlinux.org/mirrors/status/ MirrorStatus] можно посмотреть состояние зеркал.
+
Для начала убедитесь, что пакет вообще существует (и вы нигде не опечатались!). Если пакет существует, то проблема может быть в том, что ваша база пакетов не синхронизирована с репозиториями или репозитории неправильно настроены. Для принудительного обновления списка пакетов и полного обновления всей системы попробуйте выполнить {{ic|pacman -Syyu}}.
  
=== При обновлении появляется сообщение об ошибке: "file exists in filesystem" ("файл существует в файловой системе")! ===
+
=== Ошибка "Target not found" при установке пакета ===
  
Дополнительно: ''Взято из https://bbs.archlinux.org/viewtopic.php?id=56373 у Misfit138.''
+
Во-первых, удостоверьтесь, что пакет существует (и вы не допустили опечаток). Если это так, возможно, ваш список пакетов устарел или репозитории на вашей машине настроены неправильно. Для принудительного обновления списка пакетов и полного обновления всей системы попробуйте выполнить {{ic|pacman -Syyu}}.
  
error: could not prepare transaction
+
Также есть вероятность того, что в вашей системе не включен репозиторий, содержащий данный пакет — например, пакет находится в репозитории ''multilib'', но ''multilib'' не включен в вашем файле ''pacman.conf''.
error: failed to commit transaction (conflicting files)
 
package: /path/to/file exists in filesystem
 
Errors occurred, no packages were upgraded.
 
  
Почему это происходит? pacman, при обнаружении конфликтующих файлов, по умолчанию не будет их перезаписывать автоматически. Это не ошибка, так сделано специально.
+
=== Один и тот же пакет обновляется повторно ===
 
Проблема решается тривиально. Сначала проверьте, не принадлежит ли файл другому пакету ({{ic|pacman -Qo /path/to/file}}). Если принадлежит, создайте [[Reporting Bug Guidelines (Русский)|отчет об ошибке]]. Если проблемный файл не нужен другим пакетам, переименуйте его и перезапустите команду обновления. Если в дальнейшем проблем не возникнет, то старый файл можно удалить.
 
 
Если программа была установлена вручную, без использования pacman или его оболочек, вам нужно будет удалить программу и все ее файлы, а затем выполнить установку при помощи pacman.
 
 
Информация о каждом установленном файле хранится в файле с метаданными пакета {{ic|/var/lib/pacman/local/$package-$version/files}}. При повреждении этого файла (он может быть пустым или отсутствовать) во время обновления пакета и будет получена ошибка "file exists in filesystem" ("файл существует в файловой системе").
 
 
Обычно такие ошибки возникают во время установки или обновления всего лишь одного пакета, поэтому вместо ручного переименования или удаления конфликтующих файлов, принадлежащих данному пакету, выполните {{ic|pacman -S --force $package}}. После этой команды pacman принудительно перезапишет эти файлы.
 
 
Никогда '''не''' запускайте {{ic|pacman -Syu --force}}.
 
  
=== При установке пакета я получаю сообщение об ошибке: "not found in sync db" ===
+
Это может быть связано с дублированием записей в {{ic|/var/lib/pacman/local/}}, например, имеется два экземпляра {{ic|linux}}. {{ic|pacman -Qi}} выведет правильную версию, а {{ic|pacman -Qu}} покажет ее как устаревшую и, следовательно, требующую обновления.
  
Для начала убедитесь, что пакет вообще существует (и вы нигде не опечатались!). Если пакет не существует, то проблема может быть в том, что ваша база пакетов не синхронизирована с репозиториями или репозитории неправильно настроены. Для принудительного обновления списка пакетов и всей системы попробуйте выполнить {{ic|pacman -Syyu}}.
+
Для решения проблемы удалите лишнюю запись из {{ic|/var/lib/pacman/local/}}.
  
=== При установке пакета я получаю сообщение об ошибке: "target not found" ("цель не найдена") ===
+
{{Note (Русский)|''pacman'' версии 3.4 в случае обнаружения повторяющихся записей должен вывести сообщение об ошибке, что делает эту заметку устаревшей.}}
  
Во-первых, удостоверьтесь, что пакет существует (и вы не допустили опечаток). Если это так, возможно, ваш список пакетов устарел или репозитории на вашей машине настроены неправильно. Для принудительного обновления списка пакетов и всей системы попробуйте выполнить {{ic|pacman -Syyu}}. <br> Также есть вероятность того, что в вашей системе не включен репозиторий, содержащий данный пакет (например, пакет находится в репозитории ''multilib'', но ''multilib'' не включен в вашем файле ''pacman.conf'').
+
=== pacman падает при обновлении ===
  
=== pacman несколько раз обновляет один и тот же пакет! ===
+
Если при удалении пакетов ''pacman'' завершает свою работу с ошибкой "database write" ("записи в базу данных"), и после этого попытки переустановки или обновления пакетов завершаются неудачей, сделайте следующее:
  
Это может быть связано с дублированием записей в {{ic|/var/lib/pacman/local/}}, К примеру, имеется два экземпляра {{ic|linux}}. {{ic|pacman -Qi}} выведет правильную версию, а {{ic|pacman -Qu}} покажет её как устаревшую и, следовательно, требующую обновления.
+
# Загрузитесь, используя Arch live CD.
 +
# Смонтируйте корневую файловую систему.
 +
# Обновите базу данных pacman и всю систему с помощью {{ic|pacman -Syyu}}.
 +
# Переустановите поврежденный пакет через {{ic|pacman -r /путь/к/корневому_разделу -S имя_пакета}}.
  
Решение: удалить лишнюю запись из {{ic|/var/lib/pacman/local/}}.
+
=== Поиск пакета, содержащего требуемый файл ===
  
{{Note (Русский)|pacman версии 3.4 в случае обнаружения повторяющихся записей должен вывести сообщение об ошибке.}}
+
Установите [[pkgfile (Русский)|pkgfile]], использующий отдельную базу данных со всеми файлами и связанными с ними пакетами.
  
=== pacman сбоит при обновлении! ===
+
=== pacman поврежден, и восстановить его не получается ===
  
Если при попытке удаления, переустановки или обновления пакетов pacman падает с ошибкой "database write" ("записи в базу данных"):
+
Если ''pacman'' не работает и не получается его восстановить, скачайте вручную пакеты ({{Pkg|openssl}}, {{Pkg|libarchive}} и {{Pkg|pacman}}) и распакуйте их в корневой раздел. Двоичный файл ''pacman'''a будет восстановлен вместе с конфигурационным файлом по умолчанию. Затем, для поддержания целостности базы данных пакетов, переустановите скачанные пакеты стандартными средствами ''pacman''. Дополнительную информацию и пример (устарел) скрипта, автоматизирующего этот процесс, можно найти в [https://bbs.archlinux.org/viewtopic.php?id=95007 этом] сообщении форума.
#Загрузитесь, используя Arch live CD
 
#Смонтируйте корневую файловую систему
 
#Обновите базу данных pacman и всю систему с помощью {{ic|pacman -Syyu}}
 
#Переустановите сломанный пакет через {{ic|pacman -r /путь/к/корневому_разделу -S package}}
 
  
=== Я установил программу, используя {{ic|make install}}; теперь эти файлы не принадлежат ни одному из пакетов! ===
+
=== Ошибка "Unable to find root device" после перезагрузки ===
  
При обнаружении "конфликтующих файлов", чтобы их не перезаписывать вручную, можно использовать pacman с ключом {{ic|--force}} ({{ic|pacman -S --force}}). Почитайте [[pacman Tips#Identify files not owned by any package]] о скрипте, проверяющем файловую систему на наличие ''брошенных'' файлов.
+
Вероятно, при обновлении ядра повредился образ initramfs (например, при использовании pacman с опцией {{ic|--force}}). Для восстановления работоспособности есть два варианта, и первый из них — попробовать режим ''Fallback''.
{{Warning (Русский)|Будьте осторожны при использовании ключа {{ic|--force}}, поскольку это может повлечь за собой серьезные проблемы. Настоятельно рекомендуется использовать эту опцию ''только'' в том случае, когда это указано в новостях Arch}}
 
  
=== Мне нужен пакет с определенным файлом. Как узнать, какому пакету это файл принадлежит? ===
+
{{Tip (Русский)|Если вы удалили этот пункт по каким-либо причинам, вы можете нажать клавишу {{ic|Tab}} (при использовании Syslinux) или {{ic|e}} (при использовании GRUB), когда на экране появится меню загрузчика, переименовать образ в {{ic|initramfs-linux-fallback.img}} и нажать {{ic|Enter}} или {{ic|b}} (в зависимости от используемого вами загрузчика), чтобы выполнить загрузку с новыми параметрами.}}
  
Установите [[pkgtools]], в его состав входит {{ic|pkgfile}}, использующий отдельную базу данных со всеми файлами и связанными с ними пакетами.
+
Когда система загрузится, выполните команду пересборки образа initramfs либо из консоли, либо из терминала (для стандартного ядра {{Pkg|linux}}):
  
=== pacman полностью неработоспособен! Как мне его переустановить? ===
+
# mkinitcpio -p linux
  
Если pacman не работает и не получается его восстановить, скачайте вручную пакеты ({{Pkg|openssl}}, {{Pkg|libarchive}} и {{Pkg|pacman}}) и распакуйте их в корневой раздел. Бинарный pacman будет восстановлен вместе с конфигурационным файлом по умолчанию. Затем, для поддержания целостности базы данных пакетов, переустановите скачанные пакеты стандартными средствами pacman. Дополнительную информацию и пример (устарел) скрипта, автоматизирующего этот процесс, можно найти в [https://bbs.archlinux.org/viewtopic.php?id=95007 этом] сообщении форума.
+
Если способ, описанный выше, не сработает, загрузитесь в live-окружение установочного образа Arch и выполните команды:
  
=== После обновления системы получаю следующее сообщение об ошибке: "unable to find root device". После перезагрузки система не загружается. ===
+
{{Note (Русский)|Если у вас нет текущего релиза, или есть только какой-либо другой "live"-дистрибутив Linux, вы можете выполнить [[Change root (Русский)|chroot]], используя старый способ. Очевидно, при этом вам придется напечатать больше, чем просто {{ic|arch-chroot}} для запуска соответствующего скрипта.}}
  
Вероятно, при обновлении ядра "поломалась" initramfs (например, при использовании pacman с опцией {{ic|--force}}). Для восстановления работоспособности есть два варианта:
+
# mount /dev/sd''xY'' /mnt        # Ваш корневой раздел
 +
# mount /dev/sd''xZ'' /mnt/boot    # Если /boot вынесен на отдельный раздел
 +
# arch-chroot /mnt
 +
# pacman -Syu mkinitcpio systemd linux
  
'''1.''' Попробуйте выбрать пункт ''Fallback''.
+
{{Note (Русский)|Если pacman выдает ошибку {{ic|Could not resolve host}}, пожалуйста, [[Network configuration (Русский)#Проверка подключения|проверьте ваше интернет-соединение]].}}
  
: {{Tip|Если вы удалили этот пункт по каким-либо причинам, вы можете нажать клавишу {{ic|Tab}} (при использовании Syslinux) или {{ic|e}} (при использовании GRUB), когда на экране появится меню загрузчика, переименовать в {{ic|initramfs-linux-fallback.img}} и нажать {{ic|Enter}} или {{ic|b}} (в зависимости от используемого вами загрузчика), чтобы выполнить загрузку с новыми параметрами}}
+
Переустановка ядра (пакета {{Pkg|linux}}) автоматически пересоздаст образ initramfs при помощи {{ic|mkinitcpio -p linux}}. Нет необходимости дополнительно вводить эту команду.
  
: Когда система загрузится, выполните команду пересборки образа initramfs либо из консоли, либо из терминала (для стандартного ядра {{Pkg|linux}}):
+
После всего этого рекомендуется выполнить {{ic|exit}}, {{ic|umount /mnt/{boot,} }} и {{ic|reboot}}.
  
: {{bc|# mkinitcpio -p linux}}
+
{{Note (Русский)|Если вы не можете войти в окружение arch-chroot или chroot, но нуждаетесь в переустановке пакетов, можете использовать команду {{ic|pacman -r /mnt -Syu foo bar}}, чтобы указать ''pacman'''у ваш корневой раздел.}}
  
'''2.''' Если это не сработает, загрузите текущий релиз операционной системы Arch (с CD/DVD или USB) и выполните команды:
+
=== Signature from "User <email@gmail.com>" is unknown trust, installation failed ===
  
: {{Note (Русский)|Если у вас нет текущего релиза, или есть только какой-либо другой "live"-дистрибутив Linux, вы можете выполнить [[Change Root (Русский)|chroot]], используя старый способ. Очевидно, при этом вам придется напечатать больше, чем просто {{ic|arch-chroot}} для запуска соответствующего скрипта}}
+
Следуйте инструкциям из раздела [[pacman-key#Resetting all the keys]]. Также сперва вы можете попробовать вручную обновить пакет {{Pkg|archlinux-keyring}}, например, так: {{ic|pacman -S archlinux-keyring}}
  
: {{bc|<nowiki>
+
=== Signature from "User <email@archlinux.org>" is invalid, installation failed ===
# mount /dev/sdxY /mnt        #Ваш корневой раздел
 
# mount /dev/sdxZ /mnt/boot    #Если вы используете отдельный раздел /boot
 
# arch-chroot /mnt
 
# pacman -Syu mkinitcpio systemd linux</nowiki>}}
 
  
: {{Note (Русский)|Если pacman выдает ошибку {{ic|Could not resolve host}}, пожалуйста, [[Network_configuration#Check_the_connection|проверьте ваше соединение с интернет]]}}
+
Это происходит, когда системное время установлено неверно и подписи ключей кажутся устаревшими:
  
: Переустановка ядра (пакета {{Pkg|linux}}) автоматически перегенерирует образ initramfs при помощи {{ic|mkinitcpio -p linux}}. Нет необходимости дополнительно вводить эту команду.
+
error: ''пакет'': signature from "User <email@archlinux.org>" is invalid
 +
error: failed to commit transaction (invalid or corrupted package (PGP signature))
 +
Errors occured, no packages were upgraded.
  
: После всего этого рекомендуется выполнить {{ic|exit}}, {{ic|umount /mnt/{boot,} }} и {{ic|reboot}}.
+
Установите [[Time (Русский)|время]] (например, командой {{ic|ntpd -qg}} от имени root) и выполните {{bc|hwclock -w}} от имени root перед тем, как пытаться вновь установить/обновить пакет.
  
: {{Note (Русский)|Если вы не можете войти в окружение arch-chroot или chroot, но нуждаетесь в переустановке пакетов, можете использовать команду {{ic|pacman -r /mnt -Syu foo bar}}, чтобы указать менеджеру пакетов pacman ваш корневой раздел}}
+
=== Ошибка "Warning: current locale is invalid; using default "C" locale" ===
  
=== Signature from "User <email@gmail.com>" is unknown trust, installation failed ===
+
Как сказано в тексте ошибки, локаль настроена неправильно. Смотрите статью [[Locale (Русский)]].
  
Следуйте инструкциям из раздела [[pacman-key#Resetting all the keys]]. Также сперва вы можете попробовать вручную обновить пакет {{Pkg|archlinux-keyring}}, например, так: {{ic|pacman -S archlinux-keyring}}.
+
=== рacman не использует настройки прокси ===
  
=== Я по-прежнему вижу "error: PackageName: signature from "User <email@archlinux.org>" is invalid" ===
+
Удостоверьтесь, что соответствующие переменные окружения ({{ic|$http_proxy}}, {{ic|$ftp_proxy}} и т.д.) заданы верно. Если вы используете ''pacman'' вместе с [[Sudo (Русский)|sudo]], необходимо настроить sudo на [[sudo (Русский)#Переменные окружения|передачу переменных окружения среды в pacman]].
  
error: PackageName: signature from "User <email@archlinux.org>" is invalid
+
=== Как я могу переустановить все пакеты, сохраняя при этом информацию о том, какие пакеты были явно установлены, а какие установлены в качестве зависимостей? ===
error: failed to commit transaction (invalid or corrupted package (PGP signature))
 
Errors occured, no packages were upgraded.
 
  
Это происходит, когда системное время установлено неверно. Установите [[Time (Русский)|время]] и выполните: {{bc|# hwclock -w}} перед тем, как пытаться вновь установить/обновить пакет.
+
Чтобы переустановить все пакеты из официальных репозиториев, выполните {{ic|pacman -S $(pacman -Qnq)}} (опция {{ic|-S}} сохраняет причину установки по умолчанию).
  
=== Я продолжаю получать ошибку "failed to commit transaction (invalid or corrupted package)" ===
+
После этого необходимо переустановить все пакеты из неизвестных источников, список которых можно получить командой {{ic|pacman -Qmq}}.
  
Просмотрите каталог {{ic|/var/cache/pacman/pkg}} на предмет наличия файлов с расширением {{ic|*.part}} (частично скачанные пакеты) и удалите их в случае необходимости (часто это проявляется при использовании ручного {{ic|XferCommand}} в файле {{ic|pacman.conf}}).
+
=== Ошибка "Cannot open shared object file" ===
  
=== Каждый раз, когда я использую pacman, я вижу ошибку 'warning: current locale is invalid; using default "C" locale'. Что мне делать? ===
+
Скорее всего, это означает, что при выполнении предыдущей операции ''pacman'' удалил или повредил разделяемые библиотеки, необходимые для него самого.
  
Как сказано в тексте ошибки, локаль не настроена правильно. Смотрите статью [[Locale (Русский)]].
+
Чтобы выйти из этой ситуации, нужно вручную распаковать необходимые библиотеки в вашу файловую систему. Сперва определите, в каком пакете содержится требуемая библиотека, а затем найдите этот пакет в кэше ''pacman'''a ({{ic|/var/cache/pacman/pkg/}}). Распакуйте разделяемую библиотеку в файловую систему. Это позволит вам запустить ''pacman''.
  
=== Как я могу заставить Pacman использовать мои настройки прокси? ===
+
Теперь необходимо [[#Установка определенных пакетов|переустановить]] испорченный пакет. При этом обязательно используйте ключ {{ic|--force}}, поскольку вы лишь распаковали системные файлы, но ''pacman'' об этом не знает. ''pacman'' корректно заменит ваш файл разделяемой библиотеки на тот, что имеется в пакете.
  
Удостоверьтесь, что соответствующие переменные окружения ({{ic|$http_proxy}}, {{ic|$ftp_proxy}} и т.д.) заданы верно. Если вы используете Pacman вместе с [[Sudo (Русский)|sudo]], необходимо настроить sudo на [[sudo#Environment variables|использование переменных окружения в Pacman]].
+
Вот и все. Обновите оставшуюся часть системы.
  
=== Как я могу переустановить все пакеты, сохраняя при этом информацию о том, какие пакеты были явно установлены, а какие установлены в качестве зависимостей? ===
+
=== Проблемы с загрузкой пакетов ===
  
Чтобы переустановить все родные (native) пакеты, выполните {{ic|pacman -S $(pacman -Qnq)}} (опция {{ic|-S}} сохраняет причину установки по умолчанию). <br> После этого необходимо переустановить все пакеты из неизвестных источников, список которых можно получить командой {{ic|pacman -Qmq}}.
+
Были сообщения о некоторых сетевых проблемах, которые приводят к невозможности обновления/синхронизации. [https://bbs.archlinux.org/viewtopic.php?id&#61;68944] [https://bbs.archlinux.org/viewtopic.php?id&#61;65728] При обычной установке Arch Linux эти проблемы не появляются, так как стандартный загрузчик файлов при этом заменяется другим (смотрите [[Improve pacman performance (Русский)]]). При установке Arch Linux в [[VirtualBox]] эта проблема также появляется, когда вы используете опцию виртуальной машины ''Host interface'' вместо ''NAT''.
  
==Смотрите также==
+
== Смотрите также ==
  
 
* [https://www.archlinux.org/pacman/libalpm.3.html Страница руководства (man) libalpm(3)]
 
* [https://www.archlinux.org/pacman/libalpm.3.html Страница руководства (man) libalpm(3)]
Line 532: Line 502:
 
* [https://www.archlinux.org/pacman/pacman.conf.5.html Страница руководства (man) pacman.conf(5)]
 
* [https://www.archlinux.org/pacman/pacman.conf.5.html Страница руководства (man) pacman.conf(5)]
 
* [https://www.archlinux.org/pacman/repo-add.8.html Страница руководства (man) repo-add(8)]
 
* [https://www.archlinux.org/pacman/repo-add.8.html Страница руководства (man) repo-add(8)]
* [[List of Applications/Utilities (Русский)#Управление пакетами]]
 

Latest revision as of 21:44, 13 December 2017

Tango-preferences-desktop-locale.pngЭта страница нуждается в сопроводителеTango-preferences-desktop-locale.png

Статья не гарантирует актуальность информации. Помогите русскоязычному сообществу поддержкой подобных страниц. См. Команда переводчиков ArchWiki

Tango-preferences-desktop-locale.pngЭта статья или раздел нуждается в переводеTango-preferences-desktop-locale.png

Примечания: Обновление pacman до версии 5.0, добавление флага -F и -D [1]. (обсуждение: Talk:Pacman (Русский)#)

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

pacman поддерживает систему в актуальном состоянии, синхронизируя пакеты с сервером. Такая клиент-серверная модель позволяет пользователю скачивать/устанавливать пакеты со всеми требуемыми зависимостями всего одной командой.

pacman написан на языке C и использует формат пакетов .pkg.tar.xz.

Совет: Официальный пакет pacman включает в себя много дополнительных полезных инструментов, таких как makepkg, pactree, vercmp и checkupdates. Выполните pacman -Ql pacman | grep bin, чтобы увидеть полный список.

Contents

Настройка

Основные настройки pacman находятся в /etc/pacman.conf. В этом файле пользователь может указать все нужные ему настройки программы. Подробнее о конфигурировании можно прочесть в man pacman.conf.

Основные параметры

Основные параметры находятся в секции [options]. Для получения дополнительной информации о параметрах прочтите страницу справочного руководства или изучите установленный по умолчанию файл pacman.conf.

Пропуск обновления пакетов

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

IgnorePkg=linux

В случае, если необходимо в строке IgnorePkg перечислить несколько пакетов, разделяйте их имена пробелами или используйте несколько строк IgnorePkg. Также можно использовать глобальные шаблоны (glob patterns). Если вы хотите пропустить обновление каких-либо пакетов единожды, можно также использовать опцию --ignore в командной строке, разделяя имена пакетов запятыми.

У вас по-прежнему будет возможность в будущем обновить проигнорированные пакеты с использованием pacman -S: pacman напомнит вам, что есть пакеты, включенные в секцию IgnorePkg.

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

Как и в случае с отдельными пакетами, вы можете запрещать обновления групп пакетов, например так:

IgnoreGroup=gnome

Игнорирование установки файлов в систему

Для пропуска каталогов, в которые должны будут устанавливаться файлы, перечислите эти каталоги в NoExtract. Например, для игнорирования установки юнитов systemd:

NoExtract=usr/lib/systemd/system/*

Репозитории

В этом разделе файла pacman.conf указываются репозитории, которые будут использоваться. Их можно указать прямо здесь или подключить из другого файла (например /etc/pacman.d/mirrorlist). Таким образом достаточно поддерживать в актуальном состоянии только один список. Для получения информации по настройке зеркал смотрите статью Зеркала.

/etc/pacman.conf
#[testing]
#SigLevel = PackageRequired
#Include = /etc/pacman.d/mirrorlist

[core]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist

[extra]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist

#[community-testing]
#SigLevel = PackageRequired
#Include = /etc/pacman.d/mirrorlist

[community]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist

# Если в вашей системе x86_64 необходимо запускать 32-битные программы,
# раскомментируйте нужные репозитории multilib.

#[multilib-testing]
#SigLevel = PackageRequired
#Include = /etc/pacman.d/mirrorlist

#[multilib]
#SigLevel = PackageRequired
#Include = /etc/pacman.d/mirrorlist

# Пример использования пользовательского репозитория. Обратитесь к справочной странице (man) pacman для
# получения дополнительной информации по созданию собственных репозиториев.
#[custom]
#SigLevel = Optional TrustAll
#Server = file:///home/custompkgs
Важно: Будьте осторожны при использовании репозитория testing. Пакеты в нем активно разрабатываются и обновляются — это может сказаться на стабильности и работоспособности других пакетов или системы в целом. Людям, использующим репозиторий testing, для своевременного получения информации рекомендуется подписаться на почтовую рассылку arch-dev-public.

Безопасность пакетов

В pacman 4 реализован дополнительный уровень безопасности устанавливаемых пакетов — подписи. Конфигурация по умолчанию, SigLevel = Required DatabaseOptional, включает проверку подписей для всех пакетов на глобальном уровне. Это поведение может быть изменено для каждого конкретного репозитория в строках SigLevel, как показано выше. Для получения дополнительной информации о подписях пакетов и их проверке посмотрите статью pacman-key (Русский).

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

В этом разделе приведена небольшая подборка доступных возможностей pacman. Чтобы узнать больше, изучите man pacman.

Установка пакетов

Примечание: Довольно часто пакеты имеют дополнительные зависимости, которые не являются обязательными, но предоставляют дополнительную функциональность. Если вы пропустите эту информацию при установке пакета, вы можете посмотреть ее потом, используя #Запросы к базам данных пакетов.

Установка определенных пакетов

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

# pacman -S имя_пакета1 имя_пакета2 ...

Для установки списка пакетов при помощи поиска по регулярному выражению (смотрите раздел Операции и синтаксис Bash[broken link: invalid section] и эту ветку форума):

# pacman -S $(pacman -Ssq регулярное_выражение)

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

# pacman -S extra/имя_пакета

Установка группы пакетов

Некоторые пакеты объединены в группы пакетов, и они могут быть установлены одновременно. Например, при выполнении команды:

# 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://www.archlinux.org/groups/.

Примечание: Если пакет в списке уже установлен, он будет переустановлен даже если была установлена последняя версия. Это поведение можно изменить опцией --needed.
Важно: Перед установкой пакетов не обновляйте список пакетов без последующего обновления системы (например, pacman -Sy имя_пакета), иначе могут возникнуть проблемы с зависимостями. Смотрите раздел #Частичные обновления не поддерживаются и ветку форума https://bbs.archlinux.org/viewtopic.php?id=89328.

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

Для удаления пакета без удаления установленных зависимостей:

# pacman -R имя_пакета

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

# pacman -Rs имя_пакета

Для удаления пакета, его зависимостей и всех пакетов, зависящих от целевого пакета:

Важно: Эта операция рекурсивна и должна использоваться с осторожностью, так как появляется риск удалить много потенциально необходимых пакетов.
# pacman -Rsc имя_пакета

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

# pacman -Rdd имя_пакета

pacman создает резервные копии конфигурационных файлов удаляемых приложений и добавляет к ним расширение .pacsave. Если вы хотите удалить и эти файлы, используйте ключ -n:

# pacman -Rn имя_пакета
Примечание: pacman не удаляет конфигурационных файлов, созданных самими приложениями (например, скрытые файлы (имя которых начинается с точки) в вашем домашнем каталоге).

Обновление пакетов

pacman может обновить все пакеты системы одной командой. Это может занять длительное время в зависимости от того, насколько свежие пакеты установлены в вашей системе. Следующая команда выполнит одновременно синхронизацию локальной базы данных репозиториев и обновление вашей системы (не будут обновлены 'локальные' пакеты, отсутствующие в настроенных репозиториях):

# pacman -Syu
Важно: В связи с тем, что Arch является постоянно обновляемым дистрибутивом, пользователям следует помнить, что после или в процессе обновления могут возникнуть непредвиденные трудности. Поэтому обновляться следует с осторожностью. Это означает, что если, например, ожидаются большие изменения или нововведения в обновляемых пакетах, то обновлять систему лучше тогда, когда у вас будет достаточно свободного времени и вы будете готовы к решению возможных проблем.

pacman является мощным инструментом по управлению пакетами, но он не решает и не пытается решать абсолютно все возможные проблемы. Если вас это смущает, прочтите статью Философия Arch. Пользователь должен быть внимателен и сам заниматься обеспечением работоспособности своей системы. При выполнении обновления системы крайне важно читать и осмысливать всю информацию, которую выводит pacman. Если вы изменяли конфигурационный файл, то при обновлении, во избежание перезаписи, будет создан новый конфигурационный файл .pacnew. pacman предложит объединить его с вашим конфигурационным файлом. Выполнять объединение файлов придется вручную и, лучше всего, сразу после обновления. Для получения дополнительной информации обратитесь к статье Файлы Pacnew и Pacsave.

Совет: Не забывайте, что вывод pacman сохраняется в /var/log/pacman.log.

Перед обновлением желательно посетить главную страницу Arch Linux и главную страницу русскоязычного сообщества Arch Linux и проверить там последние новости (также вы можете подписаться на RSS-ленту новостей, почтовую рассылку или @archlinux в Twitter): для обновлений, требующих дополнительного вмешательства (если выполнения указанных pacman'ом действий не достаточно), будут добавлены соответствующие новости.

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

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

pacman с помощью флага -Q может искать пакеты в локальной базе данных:

$ pacman -Q --help

а с помощью флага -S — в базе данных, синхронизированной с репозиториями:

$ pacman -S --help

pacman умеет искать пакеты в базе данных как по названиям, так и по описаниям:

$ pacman -Ss условие1 условие2 ...

Для поиска среди установленных пакетов:

$ pacman -Qs условие1 условие2 ...

Для отображения подробной информации об указанном пакете:

$ pacman -Si имя_пакета

и для установленных пакетов:

$ pacman -Qi имя_пакета

Использование сразу двух флагов -i позволит просмотреть список резервных копий файлов и список измененных файлов:

$ pacman -Qii имя_пакета

Для получения списка файлов установленного пакета:

$ pacman -Ql имя_пакета

Для неустановленных пакетов используйте pkgfile.

Чтобы проверить наличие файлов, установленных пакетом:

$ pacman -Qk имя_пакета

Использование сразу двух флагов k выполнит более тщательную проверку.

Чтобы узнать, какому пакету принадлежит нужный файл:

$ pacman -Qo /путь/к/файлу/имя_файла

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

$ pacman -Qdt

Для отображения пакетов, которые были установлены явно и от которых не зависят другие пакеты:

$ pacman -Qet

Для отображения зависимостей в виде дерева:

$ pactree имя_пакета

Для получения списка пакетов, которые зависят от конкретного установленного пакета, можно использовать утилиту whoneeds из состава пакета pkgtools:

$ whoneeds имя_пакета

или pactree c флагом r:

$ pactree -r имя_пакета

Для просмотра других команд обратитесь к статье pacman/Советы и приёмы.

Очистка кэша пакетов

pacman сохраняет скачиваемые пакеты в каталоге (/var/cache/pacman/pkg/) и не удаляет их файлы автоматически, поэтому следует время от времени самостоятельно чистить этот каталог, чтобы предотвратить его разрастание.

Есть встроенная опция для удаления из кэша всех пакетов, не установленных на данный момент:

# pacman -Sc
Важно:
  • Делайте это только в том случае, если у вас есть определенная уверенность, что установленные пакеты стабильны и вам не потребуется откат версии, поскольку данная команда удалит все старые версии из каталога кэша, оставив только те, которые установлены в системе на данный момент. Сохранение более старых версий пакетов может пригодиться в тех случаях, когда обновление приводит к неправильной работе системы или отдельных программ. Если не следовать этому совету, может возникнуть ситуация, в которой пользователь будет вынужден использовать альтернативный источник устаревших пакетов, такой как Arch Rollback Machine.
  • Также есть возможность полностью очистить каталог кэша при помощи команды pacman -Scc, однако ее использование считается плохой практикой, так как, в дополнение к вышесказанному, в случае необходимости вы не сможете переустановить пакет непосредственно из директории кэша, и вам придется скачивать его заново. Настоятельно не рекомендуется использовать эту команду, за исключением случаев, когда у вас есть острая потребность в освобождении дискового пространства.

В связи с приведенными выше предостережениями рекомендуется использовать специальный скрипт для более гибкой установки того, какие и как много пакетов будут удалены из кэша:

  • Команда paccache, предоставляемая пакетом pacman, по умолчанию удаляет из кэша все версии каждого пакета, кроме трех недавно использовавшихся:
    $ paccache -r
    Однако, в этом случае paccache не будет проверять, установлен ли пакет на данный момент, оставляя удаленные пакеты в кэше. Для удаления из кэша всех версий удаленных пакетов придется запустить команду еще раз с другими опциями:
    $ paccache -ruk0
    Для просмотра всех опций смотрите paccache -h.
  • Альтернативный вариант — использование пакета pkgcachecleanAUR из AUR:
    # pkgcacheclean

Дополнительные команды

Обновление системы и установка списка пакетов (за одну операцию):

# pacman -Syu имя_пакета1 имя_пакета2 ...

Скачать пакет, но не устанавливать его:

# pacman -Sw имя_пакета

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

# pacman -U /путь/к/пакету/имя_пакета-версия.pkg.tar.xz
Совет: Чтобы сохранить копию локального устанавливаемого пакета в кэше pacman'а, используйте:
# pacman -U file:///путь/к/пакету/имя_пакета-версия.pkg.tar.xz

Скачать и установить пакет из удаленного источника (но и не из репозиториев, перечисленных в конфигурационном файле pacman'a):

# pacman -U http://www.example.com/repo/example.pkg.tar.xz

Частичные обновления не поддерживаются

Arch Linux — постоянно обновляемый дистрибутив, и это значит, что в репозиториях всегда находятся новые версии библиотек. Разработчики и доверенные пользователи собирают пакеты для репозиториев с использованием этих библиотек. Для пакетов, установленных локально (например, пакетов из AUR), нужно самостоятельно решать вопрос с зависимостями согласно данным soname.

Именно поэтому частичное обновление не поддерживается. Не используйте pacman -Sy имя_пакета или другие эквиваленты, такие как pacman -Sy и pacman -S имя_пакета. Всегда перед установкой пакетов синхронизируйте репозитории и обновляйте систему полностью. По той же самой причине нужно быть осторожными при использовании IgnorePkg и IgnoreGroup.

Если после частичного обновления оказалось, что двоичные файлы не могут найти нужных версий библиотек, не "решайте" проблему простым созданием символических ссылок (библиотеки не имеют обратной совместимости). Выполните pacman -Syu: как правило, этого будет достаточно для устранения проблемы, если она не затронула сам pacman.

Скрипт checkupdates, поставляемый с пакетом pacman, позволяет безопасно проверить установленные пакеты на наличие обновления без запуска собственно обновления при этом.

Общие рекомендации

Важно: Будьте осторожны при использовании ключа --force, поскольку это может повлечь за собой серьезные проблемы. Настоятельно рекомендуется использовать эту опцию только в том случае, когда это указано в инструкциях по обновлению из новостей Arch.

pacman поставляется с рядом утилит, которые могут значительно упростить ваше взаимодействие с системой. Для просмотра опций каждую из них можно запускать с ключом --help. Для просмотра списка всех утилит выполните команду:

$ pacman -Ql pacman | awk -F"[/ ]" '/\/usr\/bin/ {print $5}'

Решение проблем

Обновления пакетов сломали мою систему

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

Запомните основное правило: не обновляйте систему "вслепую". Всегда внимательно изучайте список обновляемых пакетов. Обращайте внимание на обновление "критически важных" компонентов (linux, xorg-server и т.д.). Если такие пакеты есть, проверьте наличие новостей на https://www.archlinux.org/ или http://www.archlinux.org.ru/ и просмотрите последние сообщения на форуме — возможно, кто-то уже столкнулся с проблемами при обновлении и сообщил об этом.

Если известно/ожидается, что после обновления могут возникнуть проблемы, сопроводители пакета добавляют в него предупреждение, которое pacman выведет при обновлении. Если вы упустили какую-то информацию, которую вывел pacman, то ее можно еще раз просмотреть в логе (/var/log/pacman.log).

Теперь, если не было никаких предупреждений от pacman, отсутствуют соответствующие новости на https://www.archlinux.org/ и http://www.archlinux.org.ru/ и нет сообщений относительно обновлений на форуме, имеет смысл обратиться за помощью на форум, IRC-канал, или выполнить Откат пакетов к работающей версии.

Для пакета доступно обновление, но pacman сообщает, что система в актуальном состоянии

Зеркала pacman синхронизируются не мгновенно. Иногда может пройти более 24 часов, прежде чем обновления станут доступны вам. Будьте терпеливы или используйте другое зеркало. Страница MirrorStatus поможет вам выбрать обновленное зеркало.

Ошибка "Failed to commit transaction (conflicting files)"

Если вы видите следующее сообщение об ошибке: [2]

error: could not prepare transaction
error: failed to commit transaction (conflicting files)
пакет: /путь/к/файлу exists in filesystem
Errors occurred, no packages were upgraded.

Почему так происходит? pacman, при обнаружении конфликтующих файлов, не будет их перезаписывать автоматически. Это не ошибка, так сделано специально.

Проблема решается тривиально. Сначала проверьте, не принадлежит ли файл другому пакету (pacman -Qo /путь/к/файлу). Если принадлежит, создайте отчет об ошибке. Если проблемный файл не нужен другим пакетам, переименуйте его и перезапустите команду обновления. Если в дальнейшем проблем не возникнет, то старый файл можно удалить.

Если программа была установлена вручную без использования pacman или его оболочек — например, при помощи команды make install, вам нужно будет удалить программу и все ее файлы, а затем выполнить установку при помощи pacman. Смотрите также раздел pacman tips#Identify files not owned by any package.

Информация о каждом установленном файле хранится в файле с метаданными пакета /var/lib/pacman/local/$пакет-$версия/files. При повреждении этого файла (он может быть пустым или отсутствовать) во время обновления пакета и будет получена ошибка file exists in filesystem ("файл существует в файловой системе"). Обычно такие ошибки возникают во время установки или обновления всего лишь одного пакета. Вместо ручного переименования или удаления конфликтующих файлов, принадлежащих данному пакету, вы можете запустить выборочную команду pacman -S --force $пакет, чтобы pacman принудительно перезаписал эти файлы.

Важно: Будьте осторожны при использовании ключа --force (например, pacman -Syu --force), поскольку это может повлечь за собой серьезные проблемы. Настоятельно рекомендуется использовать эту опцию только в том случае, когда это указано в инструкциях по обновлению из новостей Arch.

Ошибка "Failed to commit transaction (invalid or corrupted package)"

Удалите все файлы .part (частично скачанные пакеты) из каталога кеша pacman /var/cache/pacman/pkg (часто это проявляется при использовании собственной команды XferCommand в файле pacman.conf).

Ошибка "Failed to init transaction (unable to lock database)"

Когда pacman собирается внести изменения в базу данных пакетов, например, при установке пакета, он создает файл блокировки /var/lib/pacman/db.lck. Благодаря этому другой экземпляр pacman не сможет работать в то же самое время, что позволяет избежать повреждения базы.

Если работа pacman была прервана во время внесения изменений в базу, этот файл блокировки может остаться не удаленным. Если вы уверены, что на вашей машине не запущено других экземпляров pacman, удалите этот файл блокировки:

# rm /var/lib/pacman/db.lck

Ошибка "Not found in sync db" при установке пакета

Для начала убедитесь, что пакет вообще существует (и вы нигде не опечатались!). Если пакет существует, то проблема может быть в том, что ваша база пакетов не синхронизирована с репозиториями или репозитории неправильно настроены. Для принудительного обновления списка пакетов и полного обновления всей системы попробуйте выполнить pacman -Syyu.

Ошибка "Target not found" при установке пакета

Во-первых, удостоверьтесь, что пакет существует (и вы не допустили опечаток). Если это так, возможно, ваш список пакетов устарел или репозитории на вашей машине настроены неправильно. Для принудительного обновления списка пакетов и полного обновления всей системы попробуйте выполнить pacman -Syyu.

Также есть вероятность того, что в вашей системе не включен репозиторий, содержащий данный пакет — например, пакет находится в репозитории multilib, но multilib не включен в вашем файле pacman.conf.

Один и тот же пакет обновляется повторно

Это может быть связано с дублированием записей в /var/lib/pacman/local/, например, имеется два экземпляра linux. pacman -Qi выведет правильную версию, а pacman -Qu покажет ее как устаревшую и, следовательно, требующую обновления.

Для решения проблемы удалите лишнюю запись из /var/lib/pacman/local/.

Примечание: pacman версии 3.4 в случае обнаружения повторяющихся записей должен вывести сообщение об ошибке, что делает эту заметку устаревшей.

pacman падает при обновлении

Если при удалении пакетов pacman завершает свою работу с ошибкой "database write" ("записи в базу данных"), и после этого попытки переустановки или обновления пакетов завершаются неудачей, сделайте следующее:

  1. Загрузитесь, используя Arch live CD.
  2. Смонтируйте корневую файловую систему.
  3. Обновите базу данных pacman и всю систему с помощью pacman -Syyu.
  4. Переустановите поврежденный пакет через pacman -r /путь/к/корневому_разделу -S имя_пакета.

Поиск пакета, содержащего требуемый файл

Установите pkgfile, использующий отдельную базу данных со всеми файлами и связанными с ними пакетами.

pacman поврежден, и восстановить его не получается

Если pacman не работает и не получается его восстановить, скачайте вручную пакеты (openssl, libarchive и pacman) и распакуйте их в корневой раздел. Двоичный файл pacman'a будет восстановлен вместе с конфигурационным файлом по умолчанию. Затем, для поддержания целостности базы данных пакетов, переустановите скачанные пакеты стандартными средствами pacman. Дополнительную информацию и пример (устарел) скрипта, автоматизирующего этот процесс, можно найти в этом сообщении форума.

Ошибка "Unable to find root device" после перезагрузки

Вероятно, при обновлении ядра повредился образ initramfs (например, при использовании pacman с опцией --force). Для восстановления работоспособности есть два варианта, и первый из них — попробовать режим Fallback.

Совет: Если вы удалили этот пункт по каким-либо причинам, вы можете нажать клавишу Tab (при использовании Syslinux) или e (при использовании GRUB), когда на экране появится меню загрузчика, переименовать образ в initramfs-linux-fallback.img и нажать Enter или b (в зависимости от используемого вами загрузчика), чтобы выполнить загрузку с новыми параметрами.

Когда система загрузится, выполните команду пересборки образа initramfs либо из консоли, либо из терминала (для стандартного ядра linux):

# mkinitcpio -p linux

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

Примечание: Если у вас нет текущего релиза, или есть только какой-либо другой "live"-дистрибутив Linux, вы можете выполнить chroot, используя старый способ. Очевидно, при этом вам придется напечатать больше, чем просто arch-chroot для запуска соответствующего скрипта.
# mount /dev/sdxY /mnt         # Ваш корневой раздел
# mount /dev/sdxZ /mnt/boot    # Если /boot вынесен на отдельный раздел
# arch-chroot /mnt
# pacman -Syu mkinitcpio systemd linux
Примечание: Если pacman выдает ошибку Could not resolve host, пожалуйста, проверьте ваше интернет-соединение.

Переустановка ядра (пакета linux) автоматически пересоздаст образ initramfs при помощи mkinitcpio -p linux. Нет необходимости дополнительно вводить эту команду.

После всего этого рекомендуется выполнить exit, umount /mnt/{boot,} и reboot.

Примечание: Если вы не можете войти в окружение arch-chroot или chroot, но нуждаетесь в переустановке пакетов, можете использовать команду pacman -r /mnt -Syu foo bar, чтобы указать pacman'у ваш корневой раздел.

Signature from "User <email@gmail.com>" is unknown trust, installation failed

Следуйте инструкциям из раздела pacman-key#Resetting all the keys. Также сперва вы можете попробовать вручную обновить пакет archlinux-keyring, например, так: pacman -S archlinux-keyring

Signature from "User <email@archlinux.org>" is invalid, installation failed

Это происходит, когда системное время установлено неверно и подписи ключей кажутся устаревшими:

error: пакет: signature from "User <email@archlinux.org>" is invalid
error: failed to commit transaction (invalid or corrupted package (PGP signature))
Errors occured, no packages were upgraded.
Установите время (например, командой ntpd -qg от имени root) и выполните
hwclock -w
от имени root перед тем, как пытаться вновь установить/обновить пакет.

Ошибка "Warning: current locale is invalid; using default "C" locale"

Как сказано в тексте ошибки, локаль настроена неправильно. Смотрите статью Locale (Русский).

рacman не использует настройки прокси

Удостоверьтесь, что соответствующие переменные окружения ($http_proxy, $ftp_proxy и т.д.) заданы верно. Если вы используете pacman вместе с sudo, необходимо настроить sudo на передачу переменных окружения среды в pacman.

Как я могу переустановить все пакеты, сохраняя при этом информацию о том, какие пакеты были явно установлены, а какие установлены в качестве зависимостей?

Чтобы переустановить все пакеты из официальных репозиториев, выполните pacman -S $(pacman -Qnq) (опция -S сохраняет причину установки по умолчанию).

После этого необходимо переустановить все пакеты из неизвестных источников, список которых можно получить командой pacman -Qmq.

Ошибка "Cannot open shared object file"

Скорее всего, это означает, что при выполнении предыдущей операции pacman удалил или повредил разделяемые библиотеки, необходимые для него самого.

Чтобы выйти из этой ситуации, нужно вручную распаковать необходимые библиотеки в вашу файловую систему. Сперва определите, в каком пакете содержится требуемая библиотека, а затем найдите этот пакет в кэше pacman'a (/var/cache/pacman/pkg/). Распакуйте разделяемую библиотеку в файловую систему. Это позволит вам запустить pacman.

Теперь необходимо переустановить испорченный пакет. При этом обязательно используйте ключ --force, поскольку вы лишь распаковали системные файлы, но pacman об этом не знает. pacman корректно заменит ваш файл разделяемой библиотеки на тот, что имеется в пакете.

Вот и все. Обновите оставшуюся часть системы.

Проблемы с загрузкой пакетов

Были сообщения о некоторых сетевых проблемах, которые приводят к невозможности обновления/синхронизации. [3] [4] При обычной установке Arch Linux эти проблемы не появляются, так как стандартный загрузчик файлов при этом заменяется другим (смотрите Improve pacman performance (Русский)). При установке Arch Linux в VirtualBox эта проблема также появляется, когда вы используете опцию виртуальной машины Host interface вместо NAT.

Смотрите также