Перейти к содержимому

Archlinux как обновить систему

  • автор:

Как обновить Arch Linux

Пришло время обновить вашу систему Arch Linux? Независимо от того, используете ли вы чистый Arch или дистрибутив на основе Arch, такой как Manjaro и Garuda Linux, мы покажем вам, как безопасно обновить вашу систему с помощью одной или двух простых команд.

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

Большинство дистрибутивов на базе Arch используют диспетчер пакетов pacman для загрузки и установки обновлений – этот процесс технически называется «синхронизацией». Вы будете использовать команды pacman для синхронизации и работы ваших пакетов.

Применение обновления системы в Arch Linux

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

sudo pacman -Syu

Вам будет предложено ввести пароль, прежде чем команда сможет продолжить работу. Эта команда проверяет наличие доступных обновлений. Если они есть, в нем будут перечислены пакеты вместе с их новыми номерами версий.

Затем вам будет предложено подтвердить, что вы хотите применить полное обновление. Введите y и нажмите Enter для подтверждения или используйте n для отмены.

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

sudo pacman -Syyu

Как обновить определенный пакет в Arch Linux

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

sudo pacman -S package_name

Если вы не знаете, как называется пакет, вы можете найти установленные пакеты, используя флаг -Qs .

pacman -Qs string

Обязательно замените string поисковым запросом. Это будет искать как имена пакетов, так и описания, поэтому вы должны легко найти то, что ищете.

Все права защищены. © Linux-Console.net • 2019-2023

System maintenance (Русский)

Состояние перевода: На этой странице представлен перевод статьи System maintenance. Дата последней синхронизации: 14 февраля 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Регулярное обслуживание системы необходимо для правильной работы Arch в течение длительного времени. Своевременное обслуживание является привычной практикой многих пользователей.

Проверка на наличие ошибок

Неудачный запуск служб systemd

Проверьте, возможно какие-либо службы systemd неудачно запустились:

$ systemctl --failed

Файлы журналов

Посмотрите на наличие ошибок файл журнала, находящийся в /var/log , а также высоко приоритетные ошибки в журнале systemd:

# journalctl -p 3 -xb

Смотрите Xorg (Русский)#Решение проблем о том где и как получить информацию о журналах ошибок Xorg.

Резервное копирование

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

Можно настроить автоматическое выполнение резервного копирования — смотрите Автозапуск#Запуск по расписанию.

Файлы настроек

Перед внесением изменений в файлы настроек создайте их резервную копию. Тогда вы можете вернуться к рабочей версии в случае возникновения проблем. Такие редакторы как vim и emacs могут сделать это автоматически. Для крупных масштабов можно использовать менеджеры конфигурации.

Для dotfiles (файлов конфигурации, хранящихся в домашнем каталоге) смотрите dotfiles#Tracking dotfiles directly with Git.

Список установленных приложений

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

База данных Pacman

Метаданные шифрования

Переодически проверяйте и синхронизируйте резервные копии LUKS-шифрованные заголовки разделов, особенно если ключевые фразы были аннулированы. Смотрите Dm-crypt/Device encryption#Backup and restore.

Данные системы и пользователей

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

Рекомендуется регулярно выполнять полное обновление системы, чтобы насладиться последними исправлениями и обновлениями безопасности, а также, чтобы не иметь дело со слишком большим количеством обновлений пакетов, которые сразу требуют ручного вмешательства. Для подробностей смотрите Pacman (Русский)#Обновление пакетов.

Убедитесь в том, что имеете установочный носитель Arch или доступен другой «live» Linux CD/USB, так что вы можете легко восстановить вашу систему, если появится проблема после обновления. Если вы используете Arch в рабочей среде, или не можете позволить себе время простоя по любой причине, — тестируйте изменения в файлах настроек, а также обновления программных пакетов на некритичных дубликатах первой системы. Тогда, если не будет никаких проблем, — сделаете изменения в рабочей среде.

Если в системе есть пакеты из AUR, внимательно обновите все из них.

pacman является мощным инструментом управления пакетами, но он не пытается решить все возможные проблемы. Пользователи должны быть бдительными и нести ответственность за обслуживание своей системы.

Прочитайте перед обновлением системы

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

Перед обновлением основного программного обеспечения (например, kernel, xorg, systemd, или glibc ) на новую версию, посмотрите соответствующий форум, чтобы увидеть, были ли какие-либо сообщения о проблемах.

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

Совет: Вы можете использовать хук pacman, например informant AUR , который предотвращает обновление, если есть свежие новости, которые вы не читали с момента последнего обновления.

Избегайте определенных команд pacman

Избегайте частичные обновления, то есть никогда не запускайте pacman -Sy , вместо того чтобы использовать pacman -Syu .

Избегайте использования опции —overwrite с Pacman. Опция —overwrite принимает glob-паттерн. При её использовании pacman будет пропускать проверку конфликтов для файлов, которые соответствуют указанному паттерну. В правильно поддерживаемой системе, она должна использоваться только тогда, когда явно рекомендуется разработчиками Arch (смотрите #Прочитайте перед обновлением системы).

Избегайте использования опции -d с Pacman. pacman -Rdd пакет пропустит проверку зависимостей при удалении пакета. В результате пакет, создающий критическую зависимость, может быть удален, что приведет к нарушению системы.

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

Arch Linux является роллинг-релиз дистрибутивом. Это означает, что когда новая версия библиотек поступит в репозиторий, разработчики и доверенные пользователи пересоберут все пакеты в репозиториях, которые должны быть пересобраны с библиотеками. Например, если два пакета зависят от той же библиотеки, обновление только одного пакета может также обновить библиотеку (в качестве зависимости), которая может сломать другой пакет, который зависит от старой версии библиотеки.

Именно поэтому частичные обновления являются не поддерживаемыми. Не используйте:

  • pacman -Sy пакет
  • pacman -Sy и затем pacman -S пакет .
  • pacman -Syuw (имеет те же риски, что и pacman -Sy , поскольку он обновит базу пакетов pacman без установки новых пакетов.)

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

По той же причине будьте очень осторожны при использовании IgnorePkg и IgnoreGroup . Если в системе есть локально установленные пакеты (например, пакеты из AUR), пользователи должны будут пересобрать их, когда в их зависимостях случится soname bump.

Если было проведено частичное обновление и бинарные файлы оказались сломаны, потому что они не могут найти зависимые библиотеки, не пытайтесь «исправить» проблему при помощи символической ссылки. Библиотеки получают soname bump, когда они ломают обратную совместимость. Выполнение команды pacman -Syu с правильно синхронизированным зеркалом решит проблему, если сам pacman работоспособен.

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

Сигналы предупреждений во время обновления

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

Как можно быстрее разбирайтесь с новыми файлами настроек

В процессе работы pacman могут быть созданы файлы .pacnew и .pacsave. Pacman уведомит вас, когда это произойдет, и пользователи должны разобраться с этими файлами в кратчайшие сроки. Подробные инструкции есть в статье Pacman/Pacnew and Pacsave (Русский).

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

Перезагружайтесь после обновлений

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

Пакет archlinux-contrib предоставляет скрипт checkservices, который запускает pacdiff для объединения файлов .pacnew, затем ищет процессы, запущенные со старыми версиями библиотек, и спрашивает пользователя, нужно ли их перезапустить.

Ядро весьма трудно обновить без перезагрузки. Перезагрузка всегда является наиболее безопасным вариантом, но если это очень неудобно, можно использовать Kernel live patching для применения обновлений без перезагрузки.

Откат сломанных обновлений

Если известно, что пакет обновления создаёт или может создать проблемы, сопроводители добавят в пакет предупреждение, которое pacman отобразит. Если возникли проблемы после обновления, перепроверьте вывод pacman, просмотрев /var/log/pacman.log .

Совет: Для поиска в журналах pacman можно использовать специальный просмотрщик журналов, например wat-git AUR .

Только если нет никакой информации от pacman, нет новости на https://archlinux.org/ и нет сообщений на форуме по поводу обновления, рассмотрите возможность обращения за помощью на форум и в IRC, либо «откатите» пакет.

Проверяйте наличие ненужных и заброшенных пакетов

После обновления у вас могут появиться пакеты, которые больше не нужны или которых больше нет в официальных репозиториях.

Используйте pacman -Qtd для поиска пакетов, которые были установлены как зависимости, но теперь от них не зависят другие пакеты. Если осиротевший пакет всё ещё необходим, рекомендуется изменить причину установки на «установлен явно». Иначе, если пакет больше не нужен, его можно удалить.

Кроме того, некоторые пакеты могли быть удалены из репозиториев, но они всё ещё могут быть установлены в вашей локальной системе. Чтобы получить список всех сторонних пакетов, используйте pacman -Qm . Обратите внимание, что в этот список будут включены пакеты, установленные вручную (например, из AUR). Чтобы исключить пакеты, которые (всё ещё) доступны в AUR, используйте инструмент ancient-packages AUR .

Используйте менеджер пакетов для установки программного обеспечения

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

  • По возможности устанавливайте пакеты из официальных репозиториев, как описано в статье pacman (Русский)#Установка пакетов.
  • Если нужной программы там нет, возможно, кто-то уже создал пакет на AUR.
  • Если программы нет даже в AUR, узнайте, как создать пакет.

Выбирайте драйверы с открытым исходным кодом

Всегда старайтесь использовать драйверы с открытым исходным кодом, прежде чем прибегнуть к проприетарным драйверам. Большую часть времени, драйверы с открытым исходным кодом являются более стабильными и надежными, чем проприетарные драйверы. Ошибки драйверов с открытым исходным кодом исправляются более легко и быстро. В то время как закрытые драйверы могут предложить больше функций и возможностей, это может происходить за счет стабильности. Чтобы избежать этой дилеммы, попробуйте выбрать аппаратные компоненты (железо), известные и имеющие развитую поддержку открытых драйверов с полными функциями. Информацию об аппаратном обеспечении с открытым исходным кодом драйверов Linux можно найти на linux-drivers.org.

Будьте осторожны с неофициальными пакетами

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

Для упрощения технического обслуживания, ограничьте количество используемых неофициальных пакетов. Делайте периодические проверки на актуальность их использования, и удалите (или замените их на официальный аналог) либо на другие. Смотрите полезные команды Pacman/Советы и приёмы#Обслуживание.

Обновляйте список зеркал

Периодически обновляйте список зеркал pacman (mirrorlist), так как качество зеркал может меняться со временем, и некоторые из них могут перестать работать или их скорость загрузки может ухудшиться.

Очистите файловую систему

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

  • List of applications#Disk usage display.
  • List of applications#Disk cleaning.

Кэш пакетов

Удалите ненужные файлы .pkg из /var/cache/pacman/pkg/ чтобы освободить дисковое пространство.

Неиспользуемые пакеты

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

Старые файлы настроек

Старые файлы настроек могут конфликтовать с новыми версиями программного обеспечения, или портиться со временем. Периодически удаляйте ненужные файлы настроек, особенно в вашей домашней папке и ~/.config . По тем же причинам, будьте осторожны при совместном использовании домашних папок между установками.

Посмотрите на следующие папки:

  • ~/.config/ — здесь приложения хранят свои настройки
  • ~/.cache/ — кэш некоторых программ может увеличиваться в размерах
  • ~/.local/share/ — а тут могут лежать старые файлы

Для большей информации смотрите XDG Base Directory support.

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

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

Сломанные символические ссылки

Старые, сломанные символьные ссылки могут находится в вашей системе; вы должны удалить их. Найти примеры того как их найти указаны тут (Англ.) и там (Англ.). Однако не стоит слепо удалять все битые символические ссылки, так как некоторые из них служат определённым целям [1].

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

# find / -xtype l -print

Затем проверьте и удалите ненужные записи из этого списка.

Советы и рекомендации

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

Используйте проверенные программные пакеты

Роллинг-релиз Arch даёт преимущество пользователям, которые хотят попробовать новейшие функции и получить последние обновления как можно скорее, но это может сделать обслуживание системы более трудным. Для упрощения технического обслуживания и повышения стабильности, старайтесь избегать ультрасовременное программное обеспечение и устанавливайте только зрелое и проверенные программное обеспечение. Такие пакеты имеют меньше шансов получить сложные обновления, такие как основные изменения настроек или удаление особенностей. Предпочитайте программное обеспечение, которое имеет сильное и активное сообщество разработчиков, а также большое количество компетентных пользователей, для того чтобы упростить поддержку в случае возникновения проблем.

Избегайте использования тестового (testing) репозитория, даже отдельных пакетов из testing. Эти пакеты являются экспериментальными и не подходят для стабильной системы. Кроме того, избегайте разрабатываемых пакетов, которые собираются непосредственно из апстрима. Они обычно находятся в AUR, и содержат в названии: «dev», «devel», «svn», «cvs», «git», и т.д.

Установите пакет linux-lts

Пакет linux-lts представляет собой альтернативный пакет ядра Arch, и доступен в core репозитории. Эта конкретная версия ядра имеет долгосрочную поддержку (LTS) от апстрима, включая исправления безопасности, и некоторые Бэкпорты. Это будет полезным, если вы предпочитаете стабильность и менее частые обновления ядра, или если вы хотите иметь запасное ядро, в случае если новая версия ядра вызывает проблемы.

Для того, чтобы сделать его доступным в качестве варианта загрузки, вам нужно будет обновить файл настроек загрузчика, для использования ядра LTS и ram disk: vmlinuz-linux-lts и initramfs-linux-lts.img .

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

  • Bash-скрипт для новостей Arch (Англ.)
  • Automatic Arch System Maintenance

Как обновить Arch Linux

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

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

Учитывая важность обновлений Arch Linux, в этой статье представлены возможные способы обновления Arch Linux.

Как обновить Arch Linux

Arch Linux и его дистрибутивы имеют менеджер пакетов с именем Pacman, такой как apt в дистрибутивах на основе Debian.

Как обновить базу и пакеты

Pacman можно использовать для синхронизации и обновления системных пакетов новейшими версиями. Для этого используйте следующую команду:

# pacman -Syu

На изображении выше показано, что пакеты обновлены.

Как выполнить принудительное обновление системы

Что делать, если у вас сломаны пакеты, и вы хотите их обновить?

В такой ситуации Pacman выполняется с флагом «-Syyu». «-Syu» только что синхронизировал и обновил пакеты. Однако «-Syyu» воссоздает базу данных с обновленным набором пакетов и может быть выполнен следующим образом:

# pacman -Syyu

Это займет некоторое время, потому что все пакеты будут загружены независимо от того, повреждены они или нет.

Бонусный совет

Помимо обновления всей базы данных системы и пакетов. Pacman также позволяет вам обновить один пакет, введя команду, описанную ниже.

# pacman -Syu

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

Примечание. В этой статье все команды выполняются от имени пользователя root.

Заключение

Arch Linux можно обновить с помощью Pacman (менеджер пакетов Arch Linux). В этой статье представлено описательное руководство по обновлению Arch Linux. Менеджер пакетов Arch Linux с именем Pacman поддерживает флаги «-Syu» и «-Syyu», которые можно использовать для обновления Arch Linux. Параметр «-Syu» синхронизирует и обновляет систему, тогда как флаг «-Syyu» загружает свежие копии всех пакетов. Рекомендуется выполнять «-Syu» в различных сценариях, например, перед установкой любого пакета или для обычного обновления системы. Однако «-Сыю» нужно применять только тогда, когда в вашем Arch Linux есть неработающие пакеты.

Все права защищены. © Linux-Console.net • 2019-2023

pacman (Русский)

Состояние перевода: На этой странице представлен перевод статьи pacman. Дата последней синхронизации: 12 января 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

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

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

Pacman написан на языке Си и работает с tar-пакетами в формате bsdtar(1) .

Совет: Пакет pacman содержит также утилиты makepkg и vercmp(8) . В пакет pacman-contrib вошли другие полезные программы, например, pactree и checkupdates, которые раньше были частью pacman. Команда pacman -Ql pacman pacman-contrib | grep -E ‘bin/.+’ выведет полный список доступных утилит.

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

В этом разделе приведена небольшая подборка доступных возможностей pacman. Больше примеров можно найти в руководстве pacman(8) .

Совет: Если раньше вы использовали другой дистрибутив Linux, то будет полезно ознакомиться со статьёй pacman/Rosetta.

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

Пакет представляет собой архив, в котором содержатся:

  • все (скомпилированные) файлы приложения;
  • метаданные о приложении (имя приложения, версия, зависимости и т.д.);
  • установочные файлы и директивы для pacman;
  • (необязательно) дополнительные файлы для облегчения жизни, например — сценарии запуска/остановки.

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

  • удобное обновление: pacman будет устанавливать обновления по мере их появления;
  • проверка зависимостей: pacman самостоятельно отслеживает зависимости, вам нужно только указать целевую программу, и pacman установит её вместе с неоходимыми дополнительными пакетами;
  • чистое удаление: pacman хранит список файлов всех пакетов. При удалении пакета в системе не остаётся лишнего «мусора».
  • Часто у пакетов есть опциональные зависимости, которые не являются обязательными, но предоставляют дополнительную функциональность. Во время установки pacman выведет список опциональных зависимостей, но в файле pacman.log упоминаний о них не будет. Чтобы получить информацию об опциональных зависимостях пакета, используйте #Запросы к базам данных пакетов.
  • При установке пакета, который нужен только в качестве (опциональной) зависимости для другого пакета и который не будет использоваться вами напрямую, рекомендуется использовать параметр —asdeps . Подробнее смотрите раздел #Причина установки.

Важно: При установке пакетов старайтесь не синхронизировать базу данных пакетов без последующего обновления системы (например, на случай, если пакета уже нет в официальных репозиториях). В частности, не используйте команду pacman -Sy название_пакета вместо pacman -Syu название_пакета , потому что это может привести к проблемам с зависимостями. Подробнее смотрите статью System maintenance#Частичные обновления не поддерживаются и ветку форума BBS#89328.

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

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

# pacman -S название_пакета1 название_пакета2 .

Для установки списка пакетов при помощи поиска по регулярному выражению (смотрите эту ветку форума) выполните:

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

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

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

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

# pacman -S plasma-

Можно использовать несколько уровней вложенных фигурных скобок:

# pacman -S plasma-,pa>
Виртуальные пакеты

Виртуальным называется такой пакет, который сам по себе не существует, но предоставляется другими пакетами. «Виртуальность» позволяет другим пакетам не объявлять зависимостью какой-то конкретный пакет, если есть возможность выбора из нескольких кандидатов. Виртуальный пакет нельзя установить по имени, он добавляется в систему только при установке пакета, который предоставляет его.

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

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

# pacman -S gnome

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

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

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

— будут выбраны все пакеты в диапазоне с 1 по 10, а также 15;

Enter a selection (default=all): ^5-8 ^2

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

Чтобы увидеть список пакетов, принадлежащих к группе gnome, выполните:

# pacman -Sg gnome

Перечень групп можно найти на странице https://archlinux.org/groups/.

Примечание: Установлены будут все пакеты из списка, в том числе и те, которые уже были установлены в систему ранее — даже если они последней версии и не нуждаются в обновлении. Чтобы не устанавливать такие пакеты заново, укажите параметр —needed .

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

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

# pacman -R название_пакета 

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

# pacman -Rs название_пакета 

Важно: При удалении группы пакетов (вроде gnome), причина установки отдельных пакетов, входящих в группу, игнорируется. Причина установки пакетов-зависимостей, тем не менее, по-прежнему учитывается.

Команда выше может не сработать при удалении группы с другими необходимыми пакетами. В этом случае используйте команду:

# pacman -Rsu название_пакета 

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

Важно: Эта операция рекурсивна. Используйте её с осторожностью — есть риск удалить нужные пакеты.

# pacman -Rsc название_пакета 

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

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

# pacman -Rdd название_пакета 

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

# pacman -Rn название_пакета 

Примечание: Pacman не удаляет файлы настроек, которые созданы самими приложениями — например, скрытые файлы (имя которых начинается с точки) в домашнем каталоге).

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

  • Обновление системы следует выполнять регулярно, следуя рекомендациям в статье System maintenance#Обновление системы. При этом пользователь должен понимать смысл выполняемых действий, а не слепо повторять предложенные команды.
  • Arch поддерживает только полные обновления системы. Смотрите статьи System maintenance#Частичные обновления не поддерживаются и #Установка пакетов.

Pacman полностью обновляет систему всего одной командой. Если система давно не обновлялась, процесс может занять довольно длительное время. Приведённая ниже команда одновременно синхронизирует базы данных репозиториев и выполняет обновление системы — при этом пакеты, которых нет в подключённых репозиториях, обновлены не будут:

# pacman -Syu

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

Для взаимодействия с базами данных в pacman предусмотрены флаги -Q (база данных пакетов), -S (база данных синхронизации) и -F (база данных файлов). Команды pacman -Q —help , pacman -S —help и pacman -F —help выведут список возможных опций для этих флагов.

Pacman может выполнять поиск в базе данных как среди названий пакетов, так и по их описаниям:

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

Иногда поиск с параметром -s выдаёт много ненужных результатов, поэтому имеет смысл ограничить поиск только названиями пакетов, отключив поиск по описаниям и другим полям. Для этого можно использовать регулярные выражения:

$ pacman -Ss '^vim-'

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

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

Искать пакет в репозиториях по названию файла:

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

Показать подробную информацию о пакете в репозитории:

$ pacman -Si название_пакета 

То же самое — для установленного пакета:

$ pacman -Qi название_пакета 

Если указать сразу два флага -i , то будет также выведен список резервных копий файлов и их состояние (модифицирован/нет):

$ pacman -Qii название_пакета 

Вывести список файлов установленного пакета:

$ pacman -Ql название_пакета 

Вывести список файлов пакета в репозитории:

$ pacman -Fl название_пакета 

Проверить наличие файлов установленного пакета:

$ pacman -Qk название_пакета 

С двумя флагами -k проверка будет более тщательной.

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

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

Узнать, какому пакету в репозиториях принадлежит файл:

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

Вывести список пакетов, которые больше не требуются как зависимости («пакеты-сироты»):

$ pacman -Qdt

Совет: Последнюю команду имеет смысл сделать пост-транзакционным хуком pacman, чтобы получить уведомление, если какое-то действие привело к появлению пакета-сироты. Это может быть полезно, например, если пакет был удалён из репозитория, вследствие чего на локальной системе он будет считаться сиротой (кроме случая, когда пакет был установлен явно). Чтобы не получать ошибку «failed to execute command» в случае отсутствия пакетов-сирот, укажите следующую команду в параметре Exec в описании хука: /usr/bin/bash -c «/usr/bin/pacman -Qtd || /usr/bin/echo ‘=> None found.'»

Вывести список пакетов, установленных явно (explicitly) и не являющихся зависимостями для других пакетов:

$ pacman -Qet

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

Pactree

Примечание: pactree(8) больше не является частью пакета pacman . Теперь он входит в состав pacman-contrib .

Дерево зависимостей пакета можно узнать командой

$ pactree название_пакета 

Чтобы увидеть «обратное» дерево зависимостей, т.е. список пакетов, которые сами зависят от указанного, используйте флаг pactree -r или утилиту whoneeds из пакета pkgtools AUR .

Структура базы данных

Базы данных pacman обычно размещаются в каталоге /var/lib/pacman/sync . Для каждого подключённого в файле /etc/pacman.conf репозитория в этом каталоге находится соответствующий файл базы данных. Сам файл представляет собой gzip-сжатый tar-архив (с расширением .db), содержащий по одному каталогу для каждого пакета. Например, для пакета which содержимое каталога имеет вид:

$ tree which-2.21-5
which-2.21-5 |-- desc

В файле desc хранятся мета-данные пакета — описание, список зависимостей, размер, хэш-сумма MD5 и т.д.

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

Pacman сохраняет скачиваемые пакеты в каталог /var/cache/pacman/pkg/ . Старые версии пакетов и пакеты, удалённые из системы, не удаляются из этого каталога автоматически. Такой подход обладает следующими преимуществами:

  1. Можно выполнить откат пакета без необходимости искать где-то (например, в архиве Arch Linux) его старую версию;
  2. Удалённый по ошибке пакет можно заново установить из кэша, не скачивая из репозитория.

Тем не менее, это означает, что время от времени необходимо чистить этот каталог самостоятельно, чтобы предотвратить его разрастание.

Скрипт paccache(8) из пакета pacman-contrib удаляет из кэша старые версии пакетов, как установленных в системе, так и уже удалённых, по умолчанию оставляя только три самые свежие:

# paccache -r

Включите и запустите paccache.timer , чтобы очистка кэша выполнялась каждую неделю автоматически.

Совет: Также можно создать хук, чтобы очистка запускалась после каждого действия pacman. Подробнее смотрите примеры на форуме и пакет pacman-cleanup-hook AUR .

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

# paccache -rk1

Флаг -u / —uninstalled позволяет ограничить действие paccache только версиями пакетов, которых в системе уже нет. Например, команда удаления всех кэшированных версий удалённых пакетов:

# paccache -ruk0

Список возможных опций выводится командой paccache -h .

В pacman есть встроеный функционал очистки кэша и удаления баз данных репозиториев, которые были заблокированы в файле /etc/pacman.conf . Однако pacman гораздо менее гибок по сравнению с paccache и не даёт возможности сохранить некоторое количество последних версий, просто очищая каталог кэша.

Чтобы удалить все кэшированные версии удалённых пакетов и неиспользуемые базы данных, выполните:

# pacman -Sc

Чтобы удалить вообще все файлы из кэша, укажите флаг очистки дважды:

# pacman -Scc

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

pkgcacheclean AUR и pacleaner AUR — две альтернативные программы для очистки кэша.

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

Скачать пакет без установки:

# pacman -Sw название_пакета 

Установить пакет не из удалённого репозитория, а хранящийся локально (например, предварительно скачанный из AUR):

# pacman -U /путь/к/пакету/имя_пакета-версия.pkg.tar.zst 

Сохранить копию локально устанавливаемого пакета в кэше pacman:

# pacman -U file:///путь/к/пакету/имя_пакета-версия.pkg.tar.zst 

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

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

Флаг -p можно использовать для подавления стандартных действий -S , -U и -R .

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

Причина установки

Для pacman с точки зрения причины установки пакет относится к одной из двух категорий:

  • установлен явно (explicitly-installed): установлен пользователем командами pacman -S или pacman -U ;
  • зависимость (dependency): установлен автоматически в процессе установки другого пакета, поскольку являлся его зависимостью.

При явной установке пакета можно принудительно изменить причину установки на зависимость:

# pacman -S --asdeps название_пакета 

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

Совет: При установке опциональных зависимостей вручную стоит всегда указывать флаг —asdeps . Тогда при удалении пакетов-сирот ненужные опциональные зависимости тоже будут удаляться.

При переустановке пакета текущая причина установки не меняется.

Список явно установленных пакетов выводится командой pacman -Qe , а пакетов-зависимостей — командой pacman -Qd .

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

# pacman -D --asdeps название_пакета 

Для противоположной операции используйте флаг —asexplicit .

Примечание: Не стоить использовать опции —asdeps и —asexplicit в команде обновления системы, например pacman -Syu название_пакета —asdeps . Это изменит причину установки не только для устанавливаемого пакета, но и для всех обновляемых.

Поиск пакета по названию файла

Синхронизировать базу данных файлов:

# pacman -Fy

Найти пакет, содержащий определённый файл (например, файл pacman ):

$ pacman -F pacman
core/pacman 5.2.1-1 (base base-devel) [установлен] usr/bin/pacman usr/share/bash-completion/completions/pacman extra/xscreensaver 5.43-1 usr/lib/xscreensaver/pacman

Совет: Вы можете назначить задачу в Cron или таймер systemd для регулярной синхронизации баз данных.

Утилита pkgfile также осуществляет поиск пакетов по файлам, опираясь на свою базу данных; она обладает расширенной функциональностью по сравнению с pacman -F .

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

Каждая операция («транзакция») pacman состоит из пяти последовательных шагов, включая пред- и пост-транзакционные хуки:

  1. Если база данных не заблокирована, то транзакция инициализируется.
  2. Определяются пакеты, над которыми будут выполняться действия.
  3. В зависимости от заданных флагов выполняется подготовка транзакции, проверяется целостность базы данных, а также пакеты и их зависимости.
  4. Транзакция выполняется:
    1. Загружаются пакеты ( _alpm_sync_load ), если это необходимо.
    2. Выполняются PreTransaction -хуки, которые возможно применить.
    3. Удаляются пакеты, которые должны быть заменены, конфликтуют или явно указаны для удаления.
    4. Добавляются пакеты.
      1. Если пакет содержит установочный сценарий, выполняется функция pre_install ( pre_upgrade / pre_remove для обновляемых и удаляемых пакетов соответственно).
      2. Удаляются существующие файлы пакета (при обновлении или удалении пакета). Сохраняются только файлы настроек (смотрите /Pacnew and Pacsave).
      3. Распаковывается архив с новыми файлами пакета; файлы размещаются в нужные места файловой системы (при установке или обновлении пакета). Изменённые пользователем файлы настроек, которые нельзя просто перезаписать, остаются без изменений; новые файлы настроек сохраняются с суффиксом .pacnew (смотрите предыдущий шаг).
      4. Если пакет содержит установочный сценарий, выполняется функция post_install ( post_upgrade / post_remove для обновляемых и удаляемых пакетов соответственно).

      Настройка

      Настройки pacman находятся в файле /etc/pacman.conf . Подробную информацию о файле настроек можно найти в руководстве pacman.conf(5) .

      Глобальные параметры

      Глобальные настройки pacman указываются в разделе [options] . Помимо руководства pacman.conf(5) некоторая информация о настройках из этого раздела содержится в комментариях самого файла pacman.conf .

      Сравнение версий пакетов перед обновлением

      Чтобы увидеть сравнение старых и новых версий доступных для обновления пакетов, раскомментируйте строку VerbosePkgLists в файле pacman.conf . Теперь команда pacman -Syu будет выводить примерно следующее:

      Пакет (6) Старая версия Новая версия Изменение размера Размер загрузки extra/libmariadbclient 10.1.9-4 10.1.10-1 0,03 MiB 4,35 MiB extra/libpng 1.6.19-1 1.6.20-1 0,00 MiB 0,23 MiB extra/mariadb 10.1.9-4 10.1.10-1 0,26 MiB 13,80 MiB
      Параллельная загрузка

      В pacman 6.0 была добавлена функциональность параллельной загрузки пакетов. Чтобы включить эту возможность, необходимо присвоить опции ParallelDownloads в файле /etc/pacman.conf любое положительное значение (например, 5 ). В противном случае, если опция не задана, то пакеты будут загружаться последовательно.

      Запрет на обновление отдельных пакетов

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

      Чтобы пропустить пакет во время обновления системы добавьте его название в параметр IgnorePkg в разделе [options] :

      IgnorePkg=linux

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

      При необходимости обновить пакет из списка исключений всё же можно, командой pacman -S название_пакета : pacman при этом выведет напоминание, что пакет указан в IgnorePkg .

      Запрет на обновление группы пакетов

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

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

      IgnoreGroup=gnome
      Запрет на обновление файлов

      Файлы, указанные в параметре NoUpgrade , не будут изменяться в процессе установки/обновления; новые версии этих файлов будут сохраняться с расширением .pacnew.

      NoUpgrade=путь/к/файлу 

      Указать несколько файлов можно так:

      NoUpgrade=путь/к/файлу1 путь/к/файлу2 

      Примечание: Путь к файлу соответствует названию файла в tar-архиве пакета. Следовательно, указывать ведущий слэш не нужно.

      Запрет на установку файлов

      Чтобы запретить установку файлов в определённые каталоги, перечислите их в параметре NoExtract . Например, запрет установки юнитов systemd:

      NoExtract=usr/lib/systemd/system/*

      Совет: Pacman выводит предупреждение о недостающих файлах локализаций при обновлении пакетов, локали которых были удалены утилитами вроде localepurge или bleachbit. Чтобы отключить эти сообщения, закомментируйте параметр CheckSpace в файле pacman.conf , но имейте в виду, что это отключит функционал проверки наличия свободного места для всех пакетов.

      Работа с несколькими файлами настроек

      Если имеется несколько конфигурационных файлов (например, основная конфигурация и дополнительная с подключённым репозиторием testing), то работу с ними можно упростить, если вынести общие пункты настроек в отдельный файл и подключать его с помощью опции Include :

      Include = /путь/к/файлу/общих/настроек 

      В этом примере общие настройки вынесены в файл /путь/к/файлу/общих/настроек . Приведённую выше строку нужно добавить в оба файла настроек, основной и дополнительный.

      Хуки

      Системные пре- и пост-транзакционные хуки хранятся в каталоге /usr/share/libalpm/hooks ; pacman может выполнять хуки как из системного каталога, так и из каталогов, подключённых опцией — HookDir в файле pacman.conf (каталог по умолчанию — /etc/pacman.d/hooks ). Название файла хука должно заканчиваться на .hook . Хуки pacman неинтерактивны.

      В частности, хуки pacman используются в связке с systemd-sysusers и systemd-tmpfiles для автоматического создания пользователей и файлов в процессе установки пакетов. Например, пакет tomcat8 требует наличия пользователя tomcat8 и определённых каталогов, ему принадлежащих. Хуки systemd-sysusers.hook и systemd-tmpfiles.hook вызывают команды systemd-sysusers и systemd-tmpfiles соответственно, когда pacman видит в пакете указания на пользователей и временные файлы.

      Хуки alpm подробно описаны в руководстве alpm-hooks(5) .

      Репозитории и зеркала

      Помимо общего раздела [options] в файле pacman.conf также содержатся отдельные разделы для каждого из репозиториев. Репозиторий — набор пакетов, который физически находится на одном или нескольких серверах; эти сервера называются зеркалами репозитория.

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

      Разделы репозиториев в файле pacman.conf содержат информацию о зеркалах. Список зеркал хранится в отдельном файле и подключается параметром Include . Например, зеркала официальных репозиториев подключаются из файла /etc/pacman.d/mirrorlist . Настройка зеркал описана в статье Mirrors.

      Каталог для кэша пакетов

      Pacman хранит загруженные файлы пакетов в кэше — в каталоге, указанном в опции CacheDir в разделе [options] файла pacman.conf (по умолчанию /var/cache/pacman/pkg/ ).

      Размер этого каталога может расти со временем, даже если в нём хранятся только самые свежие версии установленных пакетов.

      Если вы хотите переместить этот каталог в более удобное место, выполните одно из следующих действий:

      • В опцию CacheDir пропишите путь к новому каталогу. Не забудьте добавить косую черту в конце. Это рекомендуемое решение.
      • Примонтируйте отдельный раздел в /var/cache/pacman/pkg/
      • Сделайте bind mount в /var/cache/pacman/pkg/

      Важно: Не создавайте символическую ссылку на месте каталога /var/cache/pacman/pkg/ . Использование символической ссылки приведёт к тому, что pacman сломает сам себя в процессе обновления.

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

      Pacman использует цифровые подписи в качестве дополнительного механизма обеспечения безопасности пакетов. Настройки проверки подписей задаются параметром SigLevel . По умолчанию в разделе [options] задано глобальное значение SigLevel = Required DatabaseOptional , что означает проверку подписей всех пакетов без исключения. Можно задать особые правила проверки подписей для отдельных репозиториев, указав параметр SigLevel в соответствующих разделах. Подробнее смотрите в статье pacman/Подпись пакета.

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

      Failed to commit transaction (conflicting files)

      Следующее сообщение об ошибке [1]:

      ошибка: не удалось завершить транзакцию (конфликтующие файлы) пакет: '/путь/к/файлу' существует в файловой системе Обнаружены ошибки, пакеты не обновлены.

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

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

      Если программа была установлена вручную без pacman — например, при помощи команды make install — необходимо удалить программу и все её файлы, а затем выполнить установку при помощи pacman. Смотрите также pacman/Советы и приёмы#Поиск файлов без пакета-владельца.

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

      Важно: Будьте осторожны при использовании ключа —overwrite . Смотрите Обслуживание системы#Избегайте определенных команд pacman.

      Failed to commit transaction (invalid or corrupted package)

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

      # find /var/cache/pacman/pkg/ -iname "*.part" -delete

      Failed to init transaction (unable to lock database)

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

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

      ошибка: не удалось начать транзакцию (не удалось заблокировать базу данных) ошибка: не удалось заблокировать базу: Файл существует

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

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

      Совет: Можно выполнить команду fuser /var/lib/pacman/db.lck , чтобы проверить, используется ли файл каким-то процессом.

      Не удаётся найти пакет для установки

      Эта ошибка проявляется в сообщениях Not found in sync db , не найдена цель или не удалось получить файл .

      Удостоверьтесь, что пакет, который вы пытаетесь установить, действительно существует. Если это так, возможно, список хранящихся в репозиториях пакетов устарел. Выполните pacman -Syu , чтобы получить новый список и обновить систему. Также убедитесь, что выбранные зеркала в рабочем состоянии, а репозитории настроены правильно.

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

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

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

      1. Загрузитесь, используя Arch Live USB. Желательно, чтобы версия pacman в образе была не старше той, что установлена в системе.
      2. Смонтируйте корневую файловую систему, например, командой mount /dev/sdaX /mnt от root, и убедитесь, что в точке монтирования достаточно свободного места (команда df -h ).
      3. Смонтируйте файловые системы proc, sys и dev: mount -t proc proc /mnt/proc; mount —rbind /sys /mnt/sys; mount —rbind /dev /mnt/dev
      4. Если в системе используются стандартное расположение баз данных и каталогов, то можно синхронизировать базу данных pacman и обновить систему командой pacman —sysroot /mnt -Syu с правами root.
        • Кроме того, если не удаётся обновить систему, изучите рекомендации из pacman/Советы и приёмы#Переустановка всех пакетов.
      5. После обновления стоит убедиться, что в системе не осталось необновлённых нерабочих пакетов: find /mnt/usr/lib -size 0 .
      6. Если такие пакеты всё же есть, их нужно переустановить: pacman —sysroot /mnt -S пакет .
      pacman: команда не найдена

      Если /var/cache/pacman/pkg является символической ссылкой, pacman в процессе самообновления попытается вместо неё создать каталог и таким образом удалит эту символическую ссылку. Из-за этого обновление завершится неудачей. В результате /usr/bin/pacman и другие файлы из пакета pacman исчезнут из системы.

      Никогда не делайте /var/cache/pacman/pkg символической ссылкой, так как этот путь находится под контролем pacman. Вместо этого используйте опцию CacheDir или bind mount; подробнее смотрите #Каталог для кэша пакетов.

      Если вы всё-таки столкнулись с этой проблемой и сломали свою систему, вы можете вручную извлечь содержимое /usr из пакета, чтобы восстановить pacman, а затем корректно его переустановить; смотрите FS#73306 и тему на форуме для подробностей.

      Переустановка pacman вручную

      С помощью pacman-static

      pacman-static AUR — статически скомпонованная версия pacman, которая может работать даже при отключении/повреждении системных библиотек. Это может помочь, если произошло частичное обновление и pacman больше не работает.

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

      С помощью внешнего pacman

      Если не работает даже pacman-static , то можно попробовать восстановить систему с помощью внешнего pacman. Простейший способ — воспользоваться archiso и указать точку монтирования в опции —sysroot или —root . Подробнее о том, как смонтировать файловую систему для —sysroot , смотрите chroot#Используя chroot.

      Извлечение вручную

      Важно: Есть большая вероятность, что следуя рекомендациям ниже вы добьёте свою систему. Используйте их как последнее средство, если советы из раздела #pacman падает при обновлении не помогли или нереализуемы.

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

      1. Узнайте зависимости пакета pacman .
      2. Скачайте пакеты с любого рабочего зеркала.
      3. Извлеките каждый пакет в корневой каталог.
      4. Переустановите эти пакеты командами pacman -S —overwrite название_пакета , чтобы обновить базу данных.
      5. Выполните полное обновление системы.

      Если у вас имеется доступ к другой работоспособной системе с Arch Linux, полный список зависимостей можно узнать командой

      $ pacman -Q $(pactree -u pacman)

      Возможно, вам необходимо обновить только несколько пакетов, в зависимости от серьёзности проблемы. Пример команды распаковки архива пакета:

      # tar -xvpwf пакет.tar.zst -C / --exclude .PKGINFO --exclude .INSTALL --exclude .MTREE --exclude .BUILDINFO

      Обратите внимание на флаг -w , который включает интерактивный режим. Запускать распаковку неинтерактивно рискованно, потому что можно перезаписать важный файл. Также не забудьте, что пакеты нужно распаковывать в правильном порядке (сначала зависимости). На форуме рассмотрен пример процесса восстановления работоспособности pacman c несколькими неработающими пакетами-зависимостями.

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

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

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

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

      # mkinitcpio -p linux

      Если этот способ не сработает, загрузитесь с Live-USB, смонтируйте корневой и загрузочный разделы, после чего сделайте chroot командой arch-chroot:

      # arch-chroot /mnt # pacman -Syu mkinitcpio systemd linux
      • Если у вас нет текущего релиза, или есть только какой-либо другой «live»-дистрибутив Linux, вы можете выполнить chroot, используя старый способ. Очевидно, при этом вам придется напечатать больше, чем просто arch-chroot для запуска соответствующего скрипта.
      • Если pacman выдаёт ошибку Could not resolve host , проверьте ваше интернет-соединение.
      • Если вы не можете войти в окружение arch-chroot или chroot, но нуждаетесь в переустановке пакетов, можете использовать команду pacman —sysroot /mnt -Syu foo bar , чтобы указать pacman ваш корневой раздел.

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

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

      Warning: current locale is invalid; using default «C» locale

      Как сказано в сообщении ошибки, локаль системы настроена неправильно (смотрите статью Локали).

      pacman игнорирует настройки прокси

      Удостоверьтесь, что соответствующие переменные окружения ( $http_proxy , $ftp_proxy и т.д.) заданы верно. Если вы используете pacman вместе с sudo, необходимо настроить sudo на передачу переменных окружения в pacman. Также убедитесь, что настройки dirmngr в файле /etc/pacman.d/gnupg/dirmngr.conf содержат параметр honor-http-proxy , отвечающий за использование прокси при обновлении ключей.

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

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

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

      Cannot open shared object file

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

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

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

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

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

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

      Failed retrieving file ‘core.db’ from mirror

      Если зеркала настроены правильно, но вы получаете сообщение об ошибке не удалось получить файл ‘core.db’ , попробуйте выбрать другой сервер имён.

      ‘local-package.pkg.tar’: permission denied

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

      error: could not determine cachedir mount point /var/cache/pacman/pkg

      Во время выполнения в chroot-окружении, например, команды pacman -Syu , может произойти следующая ошибка:

      error: could not determine cachedir mount point /var/cache/pacman/pkg error: failed to commit transaction (not enough free disk space)

      Такое часто случается, если каталог для chroot не являлся точкой монтирования на момент входа в chroot. Решение проблемы приведено в примечании к Установка Arch из другого дистрибутива#Скачивание базовых утилит, а объяснения и пример bind-монтирования с превращением chroot-каталога в точку монтирования можно найти в arch-chroot(8) .

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

      • Страница проекта pacman
      • libalpm(3)
      • pacman(8)
      • pacman.conf(5)
      • repo-add(8)

      Retrieved from «https://wiki.archlinux.org/index.php?title=Pacman_(Русский)&oldid=785082»

      • Package manager (Русский)
      • Arch projects (Русский)
      • Commands (Русский)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *