pacman (Русский)

From ArchWiki
Revision as of 14:47, 13 May 2014 by Kycok (talk | contribs) (Использование: removed two sections, see Talk:Pacman#New_sections)
Jump to: navigation, search

zh-CN:Pacman zh-TW:Pacman

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

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

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

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

Contents

Настройка

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

Примечание: Есть пасхалка. При добавлении в секцию # Misc options параметра ILoveCandy скучные решетки превращаются в пакмена и точки, которые он ест :D

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

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

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

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

IgnorePkg=имя_пакета

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

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

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

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

IgnoreGroup=имя_группы

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

Для пропуска каталогов, в которые должны будут устанавливаться файлы, перечислите эти каталоги в 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 = PackageOptional
Include = /etc/pacman.d/mirrorlist
	
#[community-testing]
#SigLevel = PackageRequired
#Include = /etc/pacman.d/mirrorlist

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

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

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

#[multilib]
#SigLevel = PackageOptional
#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 - An Introduction.

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

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

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

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

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

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

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

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

# pacman -S gnome

вам будет предложено выбрать пакеты из группы gnome, которые вы хотели бы установить.

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

В данном примере для установки будут выбраны все пакеты в диапазоне с 1 по 10, а также 15:

Enter a selection (default=all): 1-10 15

В данном примере для установки будут выбраны все пакеты, кроме входящих в диапазон с 5 по 8, а также 2:

Enter a selection (default=all): ^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 является мощным инструментом по управлению пакетами, но он не сможет обработать все возможные ситуации. Если вас это смущает, прочтите статью The Arch Way (Русский). Пользователь должен быть внимателен и сам заниматься обеспечением работоспособности своей системы. При выполнении обновления системы крайне важно читать и осмысливать всю информацию, которую выводит 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 -Sqs  условие1 условие2 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

Использование двойного флага k (-Qkk) даст более тщательную проверку.

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

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

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

$ pacman -Qdt

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

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

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

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

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

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

# 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

Удалить из кэша (/var/cache/pacman/pkg) не установленные на данный момент пакеты:

Важно: Делайте это только в том случае, если у вас есть определенная уверенность, что установленные пакеты стабильны и вам не потребуется откат версии, поскольку данная команда удалит все старые версии из каталога кэша, оставив только те, которые установлены в системе на данный момент. Сохранение более старых версий пакетов может пригодиться в тех случаях, когда обновление приводит к неправильной работе системы или отдельных программ
# pacman -Sc

Полная очистка кэша пакетов:

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

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

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

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

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

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

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

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

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

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-канал, или откатить пакет к работающей версии.

Перечитайте последний абзац.

Я знаю, что для пакета ABC доступны обновления, но pacman сообщает мне, что система в актуальном состоянии!

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

При обновлении появляется сообщение об ошибке: "file exists in filesystem" ("файл существует в файловой системе")!

Дополнительно: Взято из https://bbs.archlinux.org/viewtopic.php?id=56373 у Misfit138.

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

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

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

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

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

Никогда не запускайте pacman -Syu --force.

При установке пакета я получаю сообщение об ошибке: "not found in sync db" ("не найдено в синхронизированной базе данных")

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

При установке пакета я получаю сообщение об ошибке: "target not found" ("цель не найдена")

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

pacman несколько раз обновляет один и тот же пакет!

Это может быть связано с дублированием записей в /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 имя_пакета

Я установил программу, используя "make install"; теперь эти файлы не принадлежат ни одному из пакетов!

При обнаружении "конфликтующих файлов", чтобы их не перезаписывать вручную, можно использовать pacman с ключом --force (pacman -S --force). Почитайте раздел Идентификация файлов, не принадлежащих ни одному пакету о скрипте, проверяющем файловую систему на наличие брошенных файлов.

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

Мне нужен пакет с определенным файлом. Как узнать, какому пакету это файл принадлежит?

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

pacman полностью неработоспособен! Как мне его переустановить?

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

После обновления системы получаю следующее сообщение об ошибке: "unable to find root device". После перезагрузки система не загружается

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

  1. Попробуйте выбрать пункт Fallback.
    Совет: Если вы удалили этот пункт по каким-либо причинам, вы можете нажать клавишу Tab (при использовании Syslinux) или e (при использовании GRUB), когда на экране появится меню загрузчика, переименовать в initramfs-linux-fallback.img и нажать Enter или b (в зависимости от используемого вами загрузчика), чтобы выполнить загрузку с новыми параметрами
    Когда система загрузится, выполните команду пересборки образа initramfs либо из консоли, либо из терминала (для стандартного ядра linux):
    # mkinitcpio -p linux
  2. Если это не сработает, загрузите текущий релиз операционной системы Arch (с CD/DVD или USB) и выполните команды:
    Примечание: Если у вас нет текущего релиза, или есть только какой-либо другой "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

Следуйте инструкциям из раздела Сброс всех ключей. Также сперва вы можете попробовать вручную обновить пакет 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. 
Это происходит, когда системное время установлено неверно. Установите время и выполните:
# hwclock -w
перед тем, как пытаться вновь установить/обновить пакет.

Я продолжаю получать ошибку "failed to commit transaction (invalid or corrupted package)"

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

Каждый раз, когда я использую pacman, я вижу ошибку 'warning: current locale is invalid; using default "C" locale'. Что мне делать?

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

Как я могу заставить Pacman использовать мои настройки прокси?

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

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

Чтобы переустановить все родные (native) пакеты, выполните pacman -S $(pacman -Qnq) (опция -S сохраняет причину установки по умолчанию).
После этого необходимо переустановить все пакеты из неизвестных источников, список которых можно получить командой pacman -Qmq.

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