pacman (Русский)

From ArchWiki
Jump to: navigation, search

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

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

Tango-dialog-warning.pngИнформация в этой статье или разделе устарелаTango-dialog-warning.png

Причина: Обновление pacman до версии 5.0, добавление флага -F и -D [1]. (Обсудить)

Система управления пакетами 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 и эту ветку форума):

# 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.

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