Версия: 6.0.2
Pacman - официальный менеджер пакетов для дистрибутива Arch Linux. Pacman был разработан создателем Arch Linux Джаддом Винетом.
Pacman способен сам найти зависимости, автоматически загрузить и установить все необходимые пакеты.
Цель pacman — удобное управление пакетами вне зависимости от того, взяты они из официальных репозиториев или же собраны самостоятельно.
Pacman поддерживает систему в актуальном состоянии, синхронизируя пакеты с мастер-сервером. Эта клиент-серверная модель позволяет пользователю скачивать/устанавливать пакеты со всеми необходимыми зависимостями всего одной командой.
В качестве пакетов используются архивы pkg.tar.xz.
Контактная информация:
Официальный сайт
Разработчик:
Джадд Винет
Лицензия:
GPL
Синтаксис:
pacman <действие> [...]
Действия:
pacman {-h --help}
pacman {-V --version}
pacman {-D --database} <параметры> <пакет(ы)>
pacman {-F --files} [параметры] [файл(ы)]
pacman {-Q --query} [параметры] [пакет(ы)]
pacman {-R --remove} [параметры] <пакет(ы)>
pacman {-S --sync} [параметры] [пакет(ы)]
pacman {-T --deptest} [параметры] [пакет(ы)]
pacman {-U --upgrade} [параметры] <файл(ы)>
Для просмотра параметров действий ввести:
pacman -h [действие]
pacman -Ss имя_пакета1
Пакет представляет собой архив, в котором содержатся:
Установка одного пакета или списка пакетов (включая зависимости) происходит командой:
sudo pacman -S имя_пакета1 имя_пакета2 ...
Некоторые пакеты объединены в группы и могут устанавливаться одной командой. Например, после команды:
sudo pacman -S gnome
будет предложено выбрать пакеты из группы gnome, которые можно будет установить.
Поддерживается установка пакетов: *.pkg.tar.zst *.pkg.tar.gz *.pkg.tar.xz:
sudo pacman -U /path/to/package/package_name-version.pkg.tar.zst
sudo pacman -U file:///path/to/package/package_name-version.pkg.tar.zst
sudo pacman -U http://www.example.com/repo/example.pkg.tar.xz
sudo pacman -Sw имя_пакета
Пакет будет загружен в кеш pacman по адресу: /var/cache/pacman/pkg
Чтобы переустановить все пакеты, установленные из базы синхронизации, выполнить:
sudo pacman -Qqn | pacman -S
sudo pacman -Syu имя_пакета
Важно: При установке пакетов следует не синхронизировать базу данных пакетов без последующего обновления системы (например, на случай, если пакета уже нет в официальных репозиториях). В частности, не следует использовать команду pacman -Sy имя_пакета вместо pacman -Syu имя_пакета, потому что это может привести к проблемам с зависимостями.
Необходимые модули можно найти по ссылке.
Установить модуль:
sudo pacman -S ubm-name-module
Пакет с модулем в формате ".pkg.tar.zst" можно найти по ссылке: repo.ublinux.ru
Скачать и установить пакет с модулем из удаленного источника:
sudo pacman -U http://www.example.com/repo/example.pkg.tar.zst
Всегда необходимо просматривать список пакетов перед подтверждением удаления. Если не быть осторожным, то можно легко удалить важные файлы.
Удалить пакет:
sudo pacman -R имя_пакета
Удалить пакет с зависимостями(не используемыми другими пакетами):
sudo pacman -Rs имя_пакета
Удалить пакет с зависимыми и зависящими пакетами:
sudo pacman -Rsc имя_пакета
Просмотреть и удалить пакеты "сироты":
sudo pacman -Qdt
sudo pacman -Rsn $(pacman -Qdtq)
При удалении пакетов-сирот следует быть осторожным, так как используя "s" - удаляются зависимости. Таким образом можно "сломать" другой пакет/модуль. Для удаления без зависимостей необходимо указывать команду: sudo pacman -Rn
Чтобы отобразить зависимости пакета от указанного можно воспользоваться командой:
pactree имя_пакета -d 1 -r -u
Чтобы удалить пакет, его зависимости и все пакеты, зависящие от целевого пакета:
sudo pacman -Rsc имя_пакета
Pacman сохраняет важные файлы конфигурации при удалении определенных приложений и называет их расширением: .pacsave
. Чтобы предотвратить создание этих файлов резервных копий, следует использовать:
sudo pacman -Rn имя_пакета
Внимание! Если система загружена в режиме полного сохранения, то внесенные изменения в систему будут сохранены. Если режим загрузки другой, то рекомендуется воспользоваться "Сохранением изменений".
Удалить модуль можно командой:
sudo pacman -R ubm-name-module
Pacman сохраняет скачиваемые пакеты в каталог /var/cache/pacman/pkg/
. Старые версии пакетов и пакеты, удалённые из системы, не удаляются из этого каталога автоматически. Такой подход обладает следующими преимуществами:
Тем не менее это означает, что время от времени необходимо чистить этот каталог самостоятельно, чтобы предотвратить его разрастание.
Удалить из кэша старые версии пакетов, как установленных в системе, так и уже удалённых, по умолчанию оставляя только три самые свежие можно:
paccache -r
Удалить из кэша старые версии пакетов оставляя только одну самую свежую можно:
paccache -rk1 # Вместо "1" можно указать необходимое количество последних версий
Чтобы удалить все кэшированные версии удалённых пакетов и неиспользуемые базы данных, следует выполнить:
# синхронизирует и удаляет старые данные кеша
sudo pacman -Sc
[sudo] пароль для superadmin:
Оставить пакеты:
Все локально установленные пакеты
Каталог для кэша: /var/cache/pacman/pkg/
:: Удалить все остальные пакеты из кэша? [Y/n] y
удаление старых пакетов из кэша...
Каталог базы данных: /var/lib/pacman/
:: Удалить неиспользуемые репозитории? [Y/n] y
удаление неиспользуемых репозиториев...
Чтобы удалить вообще все файлы из кэша, следует использовать:
sudo pacman -Scc
[sudo] пароль для superadmin:
Каталог для кэша: /var/cache/pacman/pkg/
:: Удалить ВСЕ файлы из кэша? [y/N] y
удаление всех файлов из кэша...
Каталог базы данных: /var/lib/pacman/
:: Удалить неиспользуемые репозитории? [Y/n] y
удаление неиспользуемых репозиториев...
Обновление системы следует выполнять регулярно.
Для обновления баз данных и пакетов следует открыть терминал и ввести:
sudo pacman -Syu
Для игнорирования обновления определенного пакета следует воспользоваться опцией:
sudo pacman -Syu --ignore имя_пакета1,имя_пакета2
Параметр игнорирования предназначен для использования опытными пользователями, т.к. частичные обновления не поддерживаются.
При обнаружении проблем в установке обновлений следует вспользоваться инструкцией: Проблема обновления системы
Для принудительного полного обновления базы данных пакетов и обновления всех пакетов в системе:
sudo pacman -Syyu
:: Обновление баз данных пакетов...
core 131,6 KiB 618 KiB/s 00:00 [--------------------] 100%
extra 1690,7 KiB 6,12 MiB/s 00:00 [--------------------] 100%
community 6,0 MiB 4,92 MiB/s 00:01 [--------------------] 100%
multilib 174,2 KiB 830 KiB/s 00:00 [--------------------] 100%
ublinux 545,4 KiB 2,26 MiB/s 00:00 [--------------------] 100%
modules 59,9 KiB 893 KiB/s 00:00 [--------------------] 100%
Необходимо делать это при переключении веток или переключении зеркал.
Получение дополнительной информации об установленном пакете:
pacman -Qi smplayer
Получение дополнительной информации о пакетах в репозиториях:
pacman -Si smplayer
При указании двух "-i"
, будет также выведен список резервных копий файлов и их состояние (модифицирован/нет):
Для взаимодействия с базами данных в pacman предусмотрены флаги^
Команды pacman -Q --help, pacman -S --help и pacman -F --help выведут список возможных опций для этих флагов.
Pacman может выполнять поиск в базе данных как среди названий пакетов, так и по их описаниям.
pacman -Qs kernel # Поиск пакетов, которые содержат в описании "kernel"
pacman -F название_файла
pacman -Ql название_пакета
pacman -Fl название_пакета
pacman -Qk название_пакета
pacman -Qo /путь/к/файлу/имя_файла
# или
pacman -Qo имя_файла
Для pacman с точки зрения причины установки пакет относится к одной из двух категорий:
pacman -S
или pacman -U
;Список явно установленных пакетов выводится командой:
pacman -Qe
Список пакетов-зависимостей выводится командой:
pacman -Qd
Cписок пакетов, установленных явно (explicitly) и не являющихся зависимостями для других пакетов:
pacman -Qet
Изменить причину установки уже установленного пакета
pacman -D --asdeps название_пакета
Настройки pacman находятся в файле
/etc/pacman.conf
.
Глобальные настройки pacman указываются в разделе [options]
.
Для того чтобы увидеть сравнение старых и новых версий доступных для обновления пакетов, следует раскомментировать строку 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
, но следует иметь в виду, что это отключит функционал проверки наличия свободного места для всех пакетов.
Если имеется несколько конфигурационных файлов, то работу с ними можно упростить, если вынести общие пункты настроек в отдельный файл и подключать его с помощью опции 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 видит в пакете указания на пользователей и временные файлы.
Помимо общего раздела [options] в файле pacman.conf также содержатся отдельные разделы для каждого из репозиториев.
Репозиторий — набор пакетов, который физически находится на одном или нескольких серверах, эти сервера называются зеркалами репозитория.
Репозитории делятся на официальные и неофициальные. Порядок репозиториев в файле настроек имеет значение: если в разных репозиториях содержатся пакеты с одинаковым названием, то вне зависимости от их версий предпочтение отдаётся тому пакету, репозиторий которого ближе к началу файла. Чтобы подключённый репозиторий можно было использовать, сначала необходимо выполнить полное обновление системы.
Разделы репозиториев в файле pacman.conf содержат информацию о зеркалах. Список зеркал хранится в отдельном файле и подключается параметром Include. Например, зеркала официальных репозиториев подключаются из файла /etc/pacman.d/mirrorlist
.
Pacman хранит загруженные файлы пакетов в кэше — в каталоге, указанном в опции CacheDir
в разделе [options] файла pacman.conf (по умолчанию /var/cache/pacman/pkg/
).
Размер этого каталога может расти со временем, даже если в нём хранятся только самые свежие версии установленных пакетов.
Если необходимо переместить этот каталог в более удобное место, то следует выполнить одно из следующих действий:
CacheDir
прописать путь к новому каталогу. Добавить косую черту в конце. (рекомендуется)Не следует создавать символическую ссылку на месте каталога
/var/cache/pacman/pkg/
. Использование символической ссылки приведёт к тому, что pacman сломает сам себя в процессе обновления.
Pacman использует цифровые подписи в качестве дополнительного механизма обеспечения безопасности пакетов. Настройки проверки подписей задаются параметром SigLevel
. По умолчанию в разделе [options]
задано глобальное значение SigLevel = Required DatabaseOptional
, что означает проверку подписей всех пакетов без исключения. Можно задать особые правила проверки подписей для отдельных репозиториев, указав параметр SigLevel
в соответствующих разделах.
Получить список установленных пакетов с их версией:
pacman -Qe # Список всех явно установленных пакетов
pacman -Sg group # Перечислить все пакеты в группе пакетов с именем "group"
pacman -Qm # Перечислить все сторонние пакеты (обычно загруженные и установленные вручную или пакеты, удаленные из репозиториев)
pacman -Qn # Список всех собственных пакетов (установленных из базы данных синхронизации)
pacman -Qent # Все явно установленные собственные пакеты, которые не являются прямыми или необязательными зависимостями
pacman -Qs regex # Список пакетов по регулярному выражению
expac -s "%-30n %v" regex # Список пакетов по регулярному выражению с настраиваемым форматом вывода
Выяснение того, какие пакеты самые большие, может быть полезно при попытке освободить место на жестком диске. Здесь есть два варианта: получить размер отдельных пакетов или получить размер пакетов и их зависимостей.
Вывод списка всех установленных пакетов и их индивидуальных размеров:
LC_ALL=C pacman -Qi | awk '/^Name/{name=$3} /^Installed Size/{print $4$5, name}' | sort -h
expac --timefmt='%Y-%m-%d %T' '%l\t%n' | sort | tail -n 20 # Список 20 последних установленных пакетов
Список явно установленных пакетов, не входящих в базовый метапакет:
comm -23 <(pacman -Qqe | sort) <(expac -l '\n' '%E' base | sort)
Список явно установленных пакетов, не входящих в базовый метапакет или группу пакетов base-devel :
comm -23 <(pacman -Qqe | sort) <({ pacman -Qqg base-devel; expac -l '\n' '%E' base; } | sort -u)
Все установленные пакеты, не требуемые другими пакетами и не входящие в базовый метапакет или группу пакетов base-devel :
comm -23 <(pacman -Qqt | sort) <({ pacman -Qqg base-devel; echo base; } | sort -u)
expac -HM '%-20n\t%10d' $(comm -23 <(pacman -Qqt | sort) <({ pacman -Qqg base-devel; echo base; } | sort -u)) # То же, что и выше, но с описаниями
Список всех установленных пакетов, которых нет в указанном репозитории repo_name:
comm -23 <(pacman -Qq | sort) <(pacman -Sql repo_name | sort)
Все установленные пакеты, находящиеся в репозитории repo_name :
comm -12 <(pacman -Qq | sort) <(pacman -Sql repo_name | sort)
Все пакеты в ISO-образе, которых нет в базовом метапакете:
comm -23 <(curl https://gitlab.archlinux.org/archlinux/archiso/-/raw/master/configs/releng/packages.x86_64) <(expac -l '\n' '%E' base | sort)
Список всех разрабатываемых/нестабильных пакетов
pacman -Qq | grep -Ee '-(bzr|cvs|darcs|git|hg|svn)$'
fzf необходимо чтобы присутствовал в системе.
Чтобы просмотреть все установленные пакеты с мгновенным предварительным просмотром каждого пакета:
pacman -Qq | fzf --preview 'pacman -Qil {}' --layout=reverse --bind 'enter:execute(pacman -Qil {} | less)'
fzf используют для отображения двухпанельного представления со списком всех пакетов и информацией о пакетах, показанной справа.
Для фильтрации следует вводить буквы сразу после использования команды.
Для навигации можно использовать стрелки (или Ctrl + j/ Ctrl + k).
Для более подробной информации о пакете необходимо выбрать пакет и нажать Enter.
Чтобы просмотреть все пакеты, известные в настоящее время pacman (как установленные, так и еще не установленные), аналогичным образом, используя fzf:
pacman -Slq | fzf --preview 'pacman -Si {}' --layout=reverse
Навигационные клавиши такие же, хотя Enter не будет работать таким же образом.
pacman -Qlq package | grep -v '/$' | xargs -r du -h | sort -h # Узнать какие файлы занимают большую часть пространства
Отобразить файлы, не принадлежащие ни одному пакету:
find /etc /usr /opt | LC_ALL=C pacman -Qqo - 2>&1 >&- >/dev/null | cut -d ' ' -f 5-
Сироты — это пакеты, которые были установлены как зависимость и больше не требуются никакому пакету.
Для рекурсивного удаления сирот и их файлов конфигурации:
pacman -Qtdq | pacman -Rns -
Если сирот не найдено, выводится:
error: argument '-' specified with empty stdin
В аргументах
-Qt
перечислены только настоящие сироты. Чтобы включить пакеты, которые необязательны для другого пакета, следует ввести-t
флаг дважды (т.е.-Qtt
).
Удаление сирот не полностью очищает систему от всевозможных ненужных пакетов, например таких, как: циклы зависимостей, чрезмерные зависимости (выполненные более одного раза), некоторые неявные опции и т. д.
Чтобы обнаружить такие пакеты:
pacman -Qqd | pacman -Rsu --print -
Если необходимо удалить сразу все пакеты из списка, то следует запустить команду --print
без аргументов.
Если необходимо удалить все пакеты, кроме основных пакетов, один из способов — установить причину установки несущественных пакетов как зависимость, а затем удалить все ненужные зависимости.
Для всех пакетов, «установленных явно», следует изменить причину их установки на «установлены как зависимость»:
pacman -D --asdeps $(pacman -Qqe)
Затем необходимо изменить причину установки на «явно установленные» только те пакеты, которые удалять не нужно, чтобы не нацеливаться на них:
pacman -D --asexplicit base linux linux-firmware
Далее необходимо удалить оставшиеся пакеты как сироты (т.е. установлены как зависимость)
pacman -Qtdq | pacman -Rns -
Чтобы отобразить только дерево локальных установленных пакетов:
pacman -Qi
.
LC_ALL=C pacman -Si packages | awk -F'[:<=>]' '/^Depends/ {print $2}' | xargs -n1 | sort -u
или также можно использовать expac:
expac -l '\n' %E -S packages | sort -u
Чтобы перечислить конфигурационные файлы, отслеживаемые pacman как допускающие пользовательские изменения (т.е. файлы, перечисленные в резервном массиве PKGBUILD) и получившие пользовательские изменения, следует воспользоваться следующей командой:
pacman -Qii | awk '/^MODIFIED/ {print $2}'
Выполнение этой команды с root
гарантирует, что файлы, доступные для чтения только root (например, /etc/sudoers), будут включены в выходные данные.
Для резервного копирования локальной базы данных pacman можно использовать следующую команду :
tar -cjf pacman_database.tar.bz2 /var/lib/pacman/local
Сохранить файл резервной копии рекомендуется на одном или нескольких автономных носителях, например на USB-накопителе, внешнем жестком диске или CD-R.
Базу данных можно восстановить, переместив pacman_database.tar.bz2файл в /каталог и выполнив следующую команду:
tar -xjvf pacman_database.tar.bz2
Установив pacolog можно выводить список последних сообщений о коммитах для пакетов из официальных репозиториев или AUR.
pacolog package
Альтернативные способы получения и восстановления пакетов.
Чтобы скачать пакеты или группы пакетов:
cd ~/Packages
pacman -Syw --cachedir . base base-devel grub-bios xorg gimp
repo-add ./custom.db.tar.gz ./*
Pacman, который по умолчанию будет ссылаться на установку хоста, не будет правильно разрешать и загружать существующие зависимости. В случаях, когда требуются все пакеты и зависимости, рекомендуется создать временную пустую БД и сослаться на нее с помощью --dbpath
:
mkdir /tmp/blankdb
pacman -Syw --cachedir . --dbpath /tmp/blankdb base base-devel grub-bios xorg gimp
репо-добавить ./custom.db.tar.gz ./*
Затем можно записать каталог «Пакеты» на оптический диск (например, CD, DVD) или перенести его на USB-накопитель, внешний жесткий диск и т. д.
Установить:
Для привода оптических дисков:
mount --mkdir /dev/sr0 /mnt/repo
Для USB-накопителя, жесткого диска и т. д.:
mount --mkdir /dev/sd xY /mnt/repo
[custom]
SigLevel = PackageRequired
Server = file:///mnt/repo/Packages
pacman -Syu
Для создания личного репозитория следует использовать repo-add
, включенный в pacman.
Для получений подробной информации о repo-add
:
repo-add --help
База данных пакетов представляет собой tar-файл, который может быть сжат. Допустимые расширения: .db или .files , за которыми следует архивное расширение .tar , .tar.gz , .tar.bz2 , .tar.xz , .tar.zst или .tar.Z . Файл не обязательно должен существовать, но должны существовать все родительские каталоги.
Добавить новый пакет в базу данных или заменить старую версию существующего пакета в базе данных:
repo-add /path/to/repo.db.tar.gz /path/to/package-1.0-1-x86_64.pkg.tar.zst
База данных и пакеты не обязательно должны находиться в одном каталоге при использовании repo-add , но при использовании pacman с этой базой данных они должны быть вместе. Хранение всех собранных пакетов для включения в репозиторий в одном каталоге также позволяет использовать расширение оболочки для добавления или обновления нескольких пакетов одновременно:
repo-add /path/to/repo.db.tar.gz /path/to/*.pkg.tar.zst
Если необходимо поддерживать несколько архитектур, следует принять меры предосторожности, чтобы предотвратить возникновение ошибок. Каждая архитектура должна иметь собственное дерево каталогов:
$ tree ~/customrepo/ | sed "s/$(uname -m)/arch/g"
/home/archie/customrepo/
└── arch
├── customrepo.db -> customrepo.db.tar.xz
├── customrepo.db.tar.xz
├── customrepo.files -> customrepo.files.tar.xz
├── customrepo.files.tar.xz
└── personal-website-git-b99cce0-1-arch.pkg.tar.zst
1 directory, 5 files
Исполняемый файл repo-add
проверяет, подходит ли пакет. Если это не так, то может выйти примерно такая ошибка:
ERROR: '/home/archie/customrepo/arch/foo-arch.pkg.tar.zst' does not have a valid database archive extension.
repo-remove
используется для удаления пакетов из базы данных пакетов, за исключением того, что в командной строке указываются только имена пакетов.
repo-remove /path/to/repo.db.tar.gz имя_пакета
После создания базы данных локального репозитория следует добавить репозиторий pacman.conf для каждой системы, которая будет использовать этот репозиторий. Пример пользовательского репозитория находится в pacman.conf. Имя репозитория — это имя файла базы данных без расширения. В случае приведенного выше примера имя репозитория будет просто repo
. Указать расположение файла можно используя file://
URL или через FTP ftp://localhost/path/to/directory.
Чтобы значительно сократить время загрузки - можно поделиться пакетами. Однако использовать совместно разные архитектуры (например, i686 и x86_64) нельзя.
Для быстрого решения данного вопроса можно запустить простой временный веб-сервер , который другие компьютеры могут использовать в качестве своего первого зеркала.
ln -s /var/lib/pacman/sync/*.db /var/cache/pacman/pkg/
python -m http.server -d /var/cache/pacman/pkg/
По умолчанию Python http.server прослушивает порт 8000 любого интерфейса. Чтобы использовать другой порт или привязать только к определенному адресу, следует добавить параметр и аргумент:
python -m http.server -d /var/cache/pacman/pkg/ --bind 127.0.0.1 8080
$ /etc/pacman.d/mirrorlist
Server = http://server-ip:port
...
Можно использовать одну машину в локальной сети в качестве кэша пакетов, доступного только для чтения, путем наложения монтирования ее /var/cache/pacman/pkg каталога
. Такая конфигурация выгодна, если на этом сервере установлен достаточно полный набор актуальных пакетов, которые также используются другими машинами.
Например, чтобы использовать этот метод:
mkdir /tmp/remote_pkg /mnt/workdir_pkg /tmp/pacman_pkg
sshfs remote_username @ remote_pkgcache_addr :/var/cache/pacman/pkg /tmp/remote_pkg -C
mount -t overlay overlay -o lowerdir=/tmp/remote_pkg,upperdir=/var/cache/pacman/pkg,workdir=/mnt/workdir_pkg /tmp/pacman_pkg
Рабочий каталог должен быть пустым каталогом на том же смонтированном устройстве, что и верхний каталог.
Если указание
/tmp/pacman_pkg
каталога оверлея приводит к ошибкам, например, "Устаревший дескриптор файла", следует попробовать смонтировать оверлей с параметрами-o redirect_dir=off -o index=off
После этого необходимо запустить pacman с опцией --cachedir /tmp/pacman_pkg
, например:
pacman -Syu --cachedir /tmp/pacman_pkg
Чтобы обмениваться пакетами между несколькими компьютерами, /var/cache/pacman/ следует использовать любой сетевой протокол монтирования. В этом разделе показано, как использовать SSHFS для совместного использования кэша пакетов и связанных каталогов библиотек между несколькими компьютерами в одной локальной сети. Необходимо иметь в виду, что общий сетевой кеш может работать медленно, в зависимости от выбора файловой системы, среди прочих факторов.
Затем, чтобы поделиться фактическими пакетами, необходимо смонтировать /var/cache/pacman/pkg
с сервера /var/cache/pacman/pkg
на каждую клиентскую машину.
По умолчанию pacman -Scудаляет из кэша tar-архивы пакетов, соответствующие пакетам, не установленным на машине, на которой была введена команда. Поскольку pacman не может предсказать, какие пакеты установлены на всех машинах с общим кешем, он в конечном итоге удалит файлы, которых быть не должно.
Чтобы очистить кеш, чтобы удалялись только устаревшие архивы:
$ /etc/pacman.conf
[options]
CleanMethod = KeepCurrent
Чтобы воссоздать пакет из файловой системы, следует использовать fakepkg
. Файлы из системы берутся как есть, поэтому любые модификации будут присутствовать в собранном пакете. Поэтому распространение воссозданного пакета не рекомендуется.
Ведение списка всех явно установленных пакетов может быть полезно для резервного копирования системы или ускорения установки нового:
pacman -Qqe > pkglist.txt
Примечание:
-t
пакеты, уже требуемые другими явно установленными пакетами, не упоминаются. При переустановке из этого списка они будут установлены, но только как зависимости.-n
иностранные пакеты (например, из AUR ) будут исключены из списка. comm -13 <(pacman -Qqdt | sort) <(pacman -Qqdtt | sort) > optdeplist.txt
позволит создать список установленных необязательных зависимостей, которые можно переустановить с помощью --asdeps
. pacman -Qqem > foreignpkglist.txt
позволит создать список AUR и других внешних пакетов, которые были явно установлены.Чтобы установить пакеты из ранее сохраненного списка пакетов, не переустанавливая ранее установленные пакеты, которые уже обновлены, следует запустить:
pacman -S --needed - < pkglist.txt
Однако вполне, вероятно, что в списке присутствуют сторонние пакеты, например, из AUR или установленные локально. Чтобы отфильтровать из списка посторонние пакеты, предыдущую командную строку можно обогатить следующим образом:
pacman -S --needed $(comm -12 <(pacman -Slq | sort) <(sort pkglist.txt))
Чтобы убедиться, что установленные пакеты системы соответствуют списку, и удалить все пакеты, которые в нем не упомянуты:
pacman -Rsu $(comm -23 <(pacman -Qq | sort) <(sort pkglist.txt))
Если кажется, что файл поврежден, то можно сравнить их с хеш-суммами в пакетах. Это можно сделать с помощью pacutils:
paccheck --md5sum --quiet
pacman -Qqn | pacman -S -
Иностранные (AUR) пакеты необходимо переустанавливать отдельно; Их можно перечислить с помощью pacman -Qqm
.
Если необходимо увидеть содержимое /etc/systemd/logind.conf поставляемого пакета systemd :
bsdtar -xOf /var/cache/pacman/pkg/systemd-250.4-2-x86_64.pkg.tar.zst etc/systemd/logind.conf
Для просмотра архива можно использовать vim:
vim /var/cache/pacman/pkg/systemd-250.4-2-x86_64.pkg.tar.zst
Процессы, зависящие от обновленных библиотек, можно найти либо с помощью htop , который выделяет имена затронутых программ, либо с помощью фрагмента на основе lsof , который также печатает имена библиотек:
lsof +c 0 | grep -w DEL | awk '1 { print $1 ": " $NF }' | sort -u
Это решение будет обнаруживать только файлы, которые обычно открыты запущенными процессами, что в основном ограничивает его общими библиотеками ( .soфайлами). Он может пропустить некоторые зависимости, например, от приложений Java или Python.
Многие пакеты пытаются установить документацию и переводы на несколько языков. Некоторые программы предназначены для удаления таких ненужных файлов, например, localepurge, которая запускается после установки пакета для удаления ненужных файлов локали. Более прямой подход обеспечивается NoExtract
директивой в pacman.conf, которая предотвращает установку этих файлов.
При попытке установить пакет из-за плохой связи можно воспользоваться параметром "--disable-download-timeout", чтобы уменьшить вероятность получения ошибок, связанных со скоростью загрузки:
error: failed retrieving file […] Operation too slow. Less than 1 bytes/sec transferred the last 10 seconds
или
error: failed retrieving file […] Operation timed out after 10014 milliseconds with 0 out of 0 bytes received
При загрузке пакетов pacman использует зеркала в том порядке, в котором они находятся /etc/pacman.d/mirrorlist
. В ОС UBLinux включена параллельная загрузка пакетов в параметре ParallelDownloads
в /etc/pacman.conf
.
Прежде чем вносить какие-либо изменения необходимо убедиться, что в системе установлена последняя версия pacman:
pacman -Syu
Если нужны более мощные настройки прокси, чем встроенные возможности pacman, то можно использовать wget.
XferCommand = /usr/bin/wget --passive-ftp --show-progress -c -q -N %u
aria2 - это легкая утилита загрузки с поддержкой возобновляемых и сегментированных загрузок HTTP/HTTPS и FTP.
Использование aria2c в XferCommand pacman не приведет к параллельной загрузке нескольких пакетов. Pacman вызывает XferCommand с одним пакетом за раз и ждет его завершения, прежде чем вызывать следующий.
Для включения необходимо в /etc/pacman.conf
добавить строку в [options]
:
XferCommand = /usr/bin/aria2c --allow-overwrite=true --continue=true --file-allocation=none --log-level=error --max-tries=2 --max-connection-per-server=2 --max-file-not-found=5 --min-split-size=5M --no-conf --remote-time=true --summary-interval=60 --timeout=5 --dir=/ --out %o %u
Опции aria2c:
Для установки необходимых пакетов на ПК без доступа к сети следует выполнить перенос пакетов с зависимостями:
sudo pacman -Syy
sudo pacman -S klavaro ktouch
Где:
cp -af /var/cache/pacman/pkg/* /путь/до/устройства
Где:
cd /путь/до/устройства
Где:
sudo pacman -U glade-3.38.2-3-x86_64.pkg.tar.zst klavaro-3.13-2-x86_64.pkg.tar.zst ktouch-21.12.3-1-x86_64.pkg.tar.zst kqtquickcharts-21.12.3-1-x86_64.pkg.tar.zst gtkdatabox-1.0.0-1-x86_64.pkg.tar.zst
Где:
.pkg.tar.zst
, перечисляя через пробел.pacman -Q glade klavaro ktouch kqtquickcharts gtkdatabox
Установить можно отдельным модулем или пакетом:
Для установки следует воспользоваться утилитой "Установка и удаление программ".
Модуль, необходимый для установки:
Для установки следует воспользоваться утилитой "Установка и удаление программ".
Пакет, необходимый для установки:
Внимание! Если система загружена в режиме полного сохранения, то внесенные изменения в систему будут сохранены после перезагрузки.
Если режим загрузки другой, то рекомендуется воспользоваться утилитой "Сохранение изменений" до перезагрузки системы.