- pacman (Русский)/Tips and tricks (Русский)
- Contents
- Обслуживание
- Список пакетов
- С версией
- С размером
- С датой
- Не в группе или репозитории
- В разработке
- Просмотр пакетов
- Список файлов пакета с размером
- Поиск файлов без пакета-владельца
- Отслеживание созданных пакетами файлов-сирот
- Удаление неиспользуемых пакетов
- Удаление всех пакетов, кроме базовых
- Список зависимостей нескольких пакетов
- Список изменённых файлов для резервного копирования
- Резервная копия базы данных pacman
- Просмотр списка изменений пакета
- Установка и восстановление
- Установка пакетов с CD/DVD или USB-накопителя
- Собственный локальный репозиторий
- Сетевой кэш pacman с совместным доступом
- Кэш только на чтение
- Overlay-монтирование кэша только на чтение
- Распределённый кэш только на чтение
- Кэш на чтение и запись
- Двухсторонний кэш на основе rsync
- Динамический обратный прокси-кэш на основе nginx
- Кэширующий прокси-сервер Pacoloco
- Кэширующий прокси-сервер Flexo
- Синхронизация кэша пакетов специальными программами
- Предотвращение нежелательной очистки кэша пакетов
- Воссоздание пакета из файловой системы
- Список установленных пакетов
- Установка пакетов по списку
- Список изменённых файлов пакетов
- Переустановка всех пакетов
- Восстановление локальной базы данных
- Восстановление USB-носителя из существующей установки
- Просмотр отдельного файла внутри файла .pkg
- Список приложений, использующих устаревшие библиотеки
- Установка контента только на нужном языке
- Производительность
- Увеличение скорости загрузки
- Powerpill
- aria2
- Другие приложения
pacman (Русский)/Tips and tricks (Русский)
Полезные советы, которые расширят возможности используемых утилит и самого pacman, можно найти в статьях Базовые утилиты и Bash.
Contents
Обслуживание
Список пакетов
С версией
При составлении отчётов об ошибках или обсуждении установленных пакетов может понадобиться составить список пакетов с версиями.
- Пакеты, установленные явно: pacman -Qe .
- Пакеты в группегруппа : pacman -Sg группа .
- Сторонние пакеты (как правило, скачаны и установлены вручную либо были удалены из репозиториев): pacman -Qm .
- Пакеты из базы синхронизации: pacman -Qn .
- Пакеты из базы синхронизации, установленные явно и не являющиеся зависимостями, в том числе опциональными: pacman -Qent .
- Пакеты по регулярному выражению (regex): pacman -Qs regex .
- Пакеты по регулярному выражению с пользовательским форматом вывода (требуется пакет expac ): expac -s ‘%-30n %v’ regex .
С размером
При необходимости освободить место на жёстком диске полезно будет узнать размер установленных пакетов. Можно определить как размер каждого пакета в отдельности, так и суммарный размер пакета и его зависимостей.
По отдельности
Список установленных пакетов с размером:
С зависимостями
Размеры пакетов вместе с зависимостями (два способа):
- Установите пакет expac и выполните expac -H M ‘%m\t%n’ | sort -h .
- Установите пакет pacgraph и выполните pacgraph -c .
Размер загружаемых пакетов (если пакеты не указать, то будет выведен список всех пакетов в базе синхронизации):
Размер и описание явно установленных пакетов, не входящих ни в мета-пакет base , ни в группу пакетов base-devel :
Список пакетов, которым требуется обновление, с размером загрузки:
С датой
Список последних 20 установленных пакетов при помощи expac :
или в секундах с начала эпохи (1970-01-01 UTC):
Не в группе или репозитории
Список явно установленных пакетов не из мета-пакета base :
Список установленных пакетов, которые не входят в мета-пакет base или группу пакетов base-devel :
Список установленных пакетов, которые не явлются зависимостями других пакетов и не принадлежат мета-пакету base или группе пакетов base-devel :
То же, но с описаниями:
Список пакетов, установленных не из репозитория имя_репозитория :
Список пакетов, установленных из репозитория имя_репозитория :
Список пакетов Arch Linux ISO, которые не входят в мета-пакет base :
В разработке
Список установленных пакетов, которые считаются нестабильными и/или находятся в стадии активной разработки:
Просмотр пакетов
Следующая команда выведет информацию об установленных пакетах:
Утилита fzf выдаёт данные в терминал в виде двух панелей: названия пакетов слева, информация о них — справа.
Начните вводить буквы, чтобы искать пакет по названию; навигация по списку — стрелками или комбинациями клавиш Ctrl-j / Ctrl-k ; нажатие Enter выводит информацию о пакете в формате less.
Следующая команда fzf позволяет просматривать пакеты, о которых знает pacman (и установленные, и не установленные):
Клавиши для навигации те же, но Enter не работает.
Список файлов пакета с размером
Если какой-то пакет стал занимать слишком много места на диске и вы хотите понять, какие файлы в этом виноваты, выполните:
Поиск файлов без пакета-владельца
Если в вашей системе появились файлы, которые не принадлежат ни одному пакету (обычная ситуация, если вы не используете пакетный менеджер для установки программ), то стоит их найти и удалить.
Первый способ найти такие файлы — командой pacreport —unowned-files (пакет pacutils ) с правами root, которая, помимо прочего, выведет список «ничьих» файлов.
Второй — составить список интересующих файлов и проверить их через pacman:
Отслеживание созданных пакетами файлов-сирот
Как правило, в нормально функционирующей системе со временем скапливаются файлы-призраки, вроде файлов состояний, логов, индексов и т.п.
Утилита pacreport из пакета pacutils отслеживает такие файлы в привязке к создавшим их пакетам с помощью настроек в файле /etc/pacreport.conf (см. pacreport(1) § FILES ).
Пример настроек (сокращённо):
После этого команда pacreport —unowned-files с правами root выведет список файлов-сирот, если связанные с ними пакеты были удалены (или вместо старых файлов были созданы новые).
Кроме того, утилита aconfmgr ( aconfmgr-git AUR ) может отслеживать изменённые файлы и файлы без пакета-владельца с помощью скрипта настройки.
Удаление неиспользуемых пакетов
Команда для рекурсивного удаления пакетов-сирот и их файлов настроек:
Если неиспользуемых пакетов найдено не было, pacman выведет сообщение error: argument ‘-‘ specified with empty stdin . Это нормальное поведение команды pacman -Rns , которой не было передано аргументов.
Удаление всех пакетов, кроме базовых
Если возникла необходимость очистить систему, оставив только базовый набор пакетов, то проще всего изменить причину установки ненужных пакетов на «зависимость», после чего удалить неиспользуемые зависимости.
Сначала измените причину установки всех явно установленных пакетов на «зависимость»:
Затем измените причину установки пакетов, которые вы удалять не хотите, на «установлен явно»:
Наконец, удалите ненужные пакеты-зависимости, как описано в разделе #Удаление неиспользуемых пакетов.
Список зависимостей нескольких пакетов
Ниже приведена команда для вывода списка зависимостей нескольких пакетов, отсортированого в алфавитном порядке с удалением дубликатов.
То же самое, с помощью expac :
Список изменённых файлов для резервного копирования
Если вы собираетесь сделать резервную копию файлов системных настроек, то самым простым решением будет скопировать целиком каталог /etc/ . Однако правильнее будет выполнить копирование только для тех файлов, которые были изменены. Модифицированные резервные копии файлов можно найти следующей командой:
Команда должна выполняться с правами root, чтобы в список вошли файлы, владельцем которых является суперпользователь (вроде файла /etc/sudoers ).
Резервная копия базы данных pacman
Следующая команда создаст резервную копию локальной базы данных pacman:
Сохраните резервную копию на одном или нескольких внешних устройствах, вроде USB-накопителя, внешнего жесткого диска или CD-R.
Чтобы восстановить базу данных, поместите файл pacman_database.tar.bz2 в каталог / и выполните:
Просмотр списка изменений пакета
При внесении изменений в состав пакета сопроводители часто подробно комментируют произведённые правки. Утилита pacolog AUR позволяет просматривать эти комментарии из командной строки. Команда pacolog пакет выведет последние сообщения о правках для пакетов из официальных репозиториев и AUR.
Установка и восстановление
Альтернативные способы получения и восстановления пакетов.
Установка пакетов с CD/DVD или USB-накопителя
Загрузите пакеты или группы пакетов:
По умолчанию pacman работает с деревом каталогов (и базами данных) на хосте, поэтому он не сможет правильно разрешать и загружать зависимости. Если необходимы все пакеты и зависимости, лучше создать временную пустую базу данных и работать с ней через опцию —dbpath :
Затем запишите каталог Packages на CD/DVD, USB-накопитель, внешний жёсткий диск и т.д.
1. Примонтируйте носитель:
2. Отредактируйте файл pacman.conf , добавив свой репозиторий перед всеми остальными (extra, core и др.). Это необходимо, чтобы пакеты на CD/DVD/USB получили приоритет над пакетами в стандартных репозиториях:
3. В заключение, синхронизируйте базу данных pacman, чтобы получить доступ к новому репозиторию:
Собственный локальный репозиторий
Скрипт repo-add (входит в состав pacman ) может создать базу данных для личного репозитория. Команда repo-add —help выведет краткую информацию о работе утилиты. База данных пакетов представляет собой tar-файл, возможно сжатый, с суффиксом .db или .files, за которым следует суффикс архива .tar, .tar.gz, .tar.bz2, .tar.xz, .tar.zst или .tar.Z. На момент запуска утилиты базы может ещё не быть, но родительские каталоги уже должны быть созданы.
Следующая команда добавляет новый пакет к базе данных или заменяет старую версию существующего пакета на более новую:
Для работы repo-add база данных и пакеты могут храниться в разных каталогах, но когда вы станете работать с базой через pacman, её нужно объединить с пакетами в одном месте. Хранение всех пакетов репозитория в одном каталоге также позволяет использовать подстановочные символы в командной оболочке, чтобы добавлять или обновлять несколько пакетов за раз:
Если вы собираетесь поддерживать несколько версий пакета для разных архитектур, то следует соблюдать некоторые предосторожности. Под каждую архитектуру должен быть выделен отдельный каталог:
При запуске repo-add проверяет, подходят ли пакеты для добавления в базу. Если нет, то появится сообщение об ошибке:
Утилита repo-remove удаляет пакеты из базы данных:
После создания локальной базы данных укажите репозиторий в файле pacman.conf на каждой системе, где он будет использоваться. Пример настроек пользовательского репозитория можно найти в самом файле. Название репозитория представляет собой имя файла базы данных без суффикса. В примере выше репозиторий называется repo . Ссылаться на репозиторий можно по URL file:// или через FTP ftp://localhost/path/to/directory .
При желании добавьте свой репозиторий в список неофициальных репозиториев, чтобы сообщество могло извлечь из него пользу.
Сетевой кэш pacman с совместным доступом
Если в вашей локальной сети есть несколько машин с Arch Linux, сетевой кэш позволит значительно уменьшить время загрузки новых пакетов. При этом важно помнить, что в кэше не должно быть пакетов для разных архитектур (например, i686 и x86_64), иначе возникнут проблемы.
Кэш только на чтение
В качестве быстрого решения подойдёт веб-сервер darkhttpd . Остальные машины будут использовать его в качестве зеркала для скачивания пакетов:
darkhttpd можно также запустить как службу systemd. Добавьте свой сервер в список зеркал /etc/pacman.d/mirrorlist на клиентских машинах строкой Server = http://зеркало:8080 . Убедитесь, что зеркало обновляется.
Если вы уже запустили веб-сервер для каких-то других целей, его можно использовать как сервер локального репозитория вместо darkhttpd. Например, для сервера nginx добавьте в настройки блок правил server с указанием прослушивать порт 8080:
Не забудьте после этого перезапустить nginx.
Какой бы веб-сервер вы ни использовали, нужно открыть порт 8080 для трафика из локальной сети (и, при необходимости, включить блокировку пакетов, приходящих извне). Например, для iptables добавьте правило -s 192.168.0.0/16 -p tcp —dport 8080 -j ACCEPT , необходимым образом скорректировав параметры локальной подсети.
Overlay-монтирование кэша только на чтение
Можно настроить использование отдельной машины в локальной сети как read-only кэш пакетов. Для этого используется overlay-монтирование каталога /var/cache/pacman/pkg . Преимущество такой конфигурации — на сервере установлен полный набор новейших пакетов, которые используются другими машинами; в результате можно сэкономить внешнюю (из локальной сети) пропускную способность.
Замечание по поводу overlay: рабочий каталог должен быть пустым каталогом на том же смонтированном устройстве, что и upperdir .
После этого запустите pacman с опцией —cachedir /tmp/pacman_pkg :
Распределённый кэш только на чтение
В Arch Linux есть несколько инструментов, которые выполняют автоматический поиск кэша пакетов на других компьютерах в локальной сети. Среди них pacredir , pacserve, pkgdistcache AUR и paclan AUR . pkgdistcache использует Avahi вместо чистого UDP, который может работать лучше в некоторых домашних сетях, где используется связка WiFi и Ethernet.
Также раньше использовались утилиты PkgD и multipkg, но их разработка была прекращена.
Кэш на чтение и запись
Чтобы несколько машин могли работать с общим кэшем пакетов, откройте совместный доступ к каталогу /var/cache/pacman/ с помощью любого сетевого протокола монтирования файловых систем. В этом разделе описано, как использовать shfs и SSHFS для организации совместного доступа к кэшу пакетов и некоторым каталогам с библиотеками в локальной сети. Имейте в виду, что сетевой кэш может быть довольно медленным, в том числе и из-за выбранной файловой системы.
Во-первых, установите любой пакет с поддержкой сетевых файловых систем: shfs-utils , sshfs , curlftpfs , samba или nfs-utils .
Теперь, чтобы открыть совместный доступ к пакетам, смонтируйте каталог сервера /var/cache/pacman/pkg в каталог /var/cache/pacman/pkg на клиентских машинах.
Двухсторонний кэш на основе rsync
Другой подход к созданию сетевого кэша — использовать rsync. Настройте сервер кэша, запустите на нём демон rsync и выполните двухсторонную синхронизацию между сервером и клиентскими машинами по протоколу rsync. В этом случае имена файлов с двоеточиями проблемы не создадут.
Ниже приведён пример работы с кэшем на машине-клиенте. Команда uname -m позволяет выполнить синхронизацию пакетов с учётом архитектуры:
Динамический обратный прокси-кэш на основе nginx
Сервер nginx может работать в качестве посредника для запросов пакетов на официальные upstream-зеркала, кэшируя ответы на локальном диске. Все последующие запросы к этим пакетам будут адресоваться к локальному кэшу, минимизируя интернет-трафик при обновлении большого количества компьютеров.
В примере ниже кэширующий сервер запущен на адресе http://cache.domain.example:8080/ . Пакеты хранятся в каталоге /srv/http/pacman-cache/ .
Установите nginx на машине, предназначенной для хранения кэша. Создайте каталог кэша с необходимыми разрешениями, чтобы nginx мог записывать в него файлы:
Используйте этот файл настроек в качестве отправной точки для редактирования /etc/nginx/nginx.conf . Проверьте, чтобы директива resolver работала так, как ожидается. В блоках правил исходящех запросов server укажите директиву proxy_pass с адресами официальных зеркал (пример ожидаемого формата этой директивы можно найти в самом файле настроек). После настройки включите и запустите nginx.
Чтобы использовать кэш на каждом компьютере с Arch Linux (включая тот, который хранит кэш), нужно добавить следующую строку в начало файла mirrorlist :
Кэширующий прокси-сервер Pacoloco
Pacoloco — простой прокси-сервер для кэша пакетов из репозиториев pacman. Устанавливается с пакетом pacoloco . Откройте файл настроек и добавьте зеркала pacman:
Перезапустите pacoloco.service и после этого прокси-репозиторий будет доступен по адресу http://сервер:9129/repo/mycopy .
Кэширующий прокси-сервер Flexo
Flexo — ещё один кэширующий прокси для репозиториев pacman. Flexo доступен в AUR: flexo-git AUR . После установки запустите службу flexo.service .
Flexo по умолчанию работает на порте 7878. Добавьте строку Server = http://мой_сервер:7878/$repo/os/$arch в самое начало файла /etc/pacman.d/mirrorlist , чтобы pacman загружал пакеты через Flexo.
Синхронизация кэша пакетов специальными программами
Утилиты Syncthing и Resilio Sync можно использовать для синхронизации каталогов кэша pacman (например, /var/cache/pacman/pkg ).
Предотвращение нежелательной очистки кэша пакетов
По умолчанию команда pacman -Sc очищает кэш от старых версий пакетов, которые были удалены из системы. В условиях совместного доступа к кэшу от нескольких машин в локальной сети pacman не может достоверно определить, какие пакеты установлены на каждой системе. По этой причине очистку кэша нужно ограничить.
Добавьте следующий пункт в раздел [options] файла /etc/pacman.conf , чтобы удалялись только устаревшие версии пакетов:
Воссоздание пакета из файловой системы
С помощью пакета fakepkg AUR можно воссоздать пакет из файловой системы. Файлы будут собраться в том виде, в каком они есть, следовательно, сделанные в них изменения войдут в «собранный» пакет. Поэтой причине распространять пакет среди других пользователей не рекомендуется; для этого гораздо лучше подойдёт система сборки Arch или архив Arch Linux.
Список установленных пакетов
Создание списка явно установленных пакетов может оказаться полезным, если вы собираетесь сделать резервную копию системы или ускорить процесс установки на новой машине:
Хук pacman позволит автоматизировать обновление списка пакетов. Пример:
Установка пакетов по списку
Следующая команда установит пакеты в соответствии с ранее созданным списком, при этом уже установленные пакеты переустанавливаться не будут:
В списке могут оказаться внешние пакеты, из AUR или установленные локально. Чтобы их исключить, вместо предыдущей команды выполните следующую:
Наконец, убедитесь, что установленные в системе пакеты совпадают со списком, и удалите всё, что в него не входит:
Список изменённых файлов пакетов
Если вы предполагаете, что какие-то файлы были повреждены (например, из-за ошибки программы или аппаратного обеспечения), стоит проверить их хэш-суммы. Сделать это можно с помощью пакета pacutils :
Переустановка всех пакетов
Чтобы переустановить все пакеты, установленные из базы синхронизации, выполните:
Сторонние пакеты (AUR) придётся установить отдельно; найти их можно командой pacman -Qqm .
По умолчанию при переустановке пакета pacman оставляет причину установки без изменений.
Восстановление локальной базы данных
Восстановление USB-носителя из существующей установки
Если вы установили Arch на USB-носитель и испортили его (например, выдернув носитель в процессе записи), стоит попробовать переустановить все пакеты. Возможно, это восстановит работоспособность флешки. Предположим, USB-носитель смонтирован в каталог /newarch :
Просмотр отдельного файла внутри файла .pkg
Например, вы хотите увидеть содержимое файла /etc/systemd/logind.conf в пакете systemd :
Для просмотра файлов архива можно использовать vim :
Список приложений, использующих устаревшие библиотеки
Даже после установки новой версии пакета некоторые долгоиграющие программы (например, демоны и серверы) могут всё ещё использовать код из библиотек старого пакета. Если такая библиотека содержит уязвимость или опасный баг, продолжать её использовать — не самая лучшая идея.
Следующая команда найдёт все программы, которые используют устаревший код:
Будут выведены названия работающих программ, а также старые библиотеки, которые были удалены или замещены более новыми.
Установка контента только на нужном языке
Многие пакеты по умолчанию устанавливают документацию и переводы на нескольких языках. Существует ряд программ, разработаных для удаления таких ненужных файлов. Например, утилита localepurge AUR удалит лишние файлы локалей, если запустить её после установки пакета. Более прямой подход к этой проблеме — указать директиву NoExtract в файле pacman.conf , что предотвратит установку ненужных файлов.
В примере ниже устанавлены будут только английские (US) файлы, или никакие вообще:
Производительность
Увеличение скорости загрузки
При загрузке пакетов pacman использует зеркала в том порядке, в каком они перечислены в файле /etc/pacman.d/mirrorlist . Зеркало, указанное первым, будет использоваться по умолчанию, и совсем не обязательно оно окажется для вас самым быстрым. Подробнее о выборе зеркал см. Зеркала.
Скорость загрузки пакетов можно повысить, если использовать сторонние приложения для загрузки вместо встроенного в pacman менеджера закачек, или настроив параллельную загрузку.
В любом случае, прежде чем делать какие-либо изменения, убедитесь, что используете последнюю версию pacman:
Powerpill
Powerpill — обёртка для pacman, которая использует параллельную и сегментированную загрузку для повышения скорости.
Эта утилита будет очень полезна, если вам нужны более сложные настройки прокси, чем это позволяют возможности pacman.
Установите пакет wget , после чего отредактируйте /etc/pacman.conf , указав в разделе [options] следующую строку:
Чтобы не указывать параметры wget в файле /etc/pacman.conf , можно отредактировать непосредственно файл настроек wget — либо общесистемный файл /etc/wgetrc , либо пользовательский $HOME/.wgetrc .
aria2
aria2 — небольшая загрузочная утилита с поддержкой возобновляемой и сегментной загрузки по протоколам HTTP/HTTPS и FTP. aria2 создаёт несколько одновременных соединений с зеркалом Arch, что увеличивает скорость загрузки файлов и пакетов.
Установите aria2 , затем добавьте следующую строку в раздел [options] файла /etc/pacman.conf :
Параметры aria2 описаны в руководстве aria2c(1) § OPTIONS . Некоторые разъяснения о параметрах последней команды:
- -d, —dir : каталог для сохранения скачиваемых файлов.
- -o, —out : итоговые имена скачиваемых файлов.
- %o : локальное имя файла в представлении pacman.
- %u : URL загрузки в представлении pacman.
Другие приложения
Есть и другие загрузочные приложения, с которыми может работать pacman. Ниже приводится список в виде соответствующих настроек XferCommand :
- snarf : XferCommand = /usr/bin/snarf -N %u
- lftp : XferCommand = /usr/bin/lftp -c pget %u
- axel : XferCommand = /usr/bin/axel -n 2 -v -a -o %o %u
- hget : XferCommand = /usr/bin/hget %u -n 2 -skip-tls false (подробнее см. документацию на странице проекта)
- saldl : XferCommand = /usr/bin/saldl -c6 -l4 -s2m -o %o %u (подробнее см. документацию на странице проекта)
Источник