Алексей Федорчук
Вслед за получением информации о репозиториях и осуществления необходимых с ними действий настаёт черёд разобраться с пакетами, как находящимися в них, так и установленными в системе. И инструментом для этого послужит утилита xbps-query
, опции которой можно получить, запустив её в «голом» вид или с опцией -h
.
Описывать все опции не имеет смысла — расскажу только о самых востребованных в обыденной жизни. А первое, что в ней требуется — посмотреть, какие же пакеты установлены в системе. Это делается так:
$ xbps-query -l
На выходе получаем список пакетов с указанием их статуса (ii
— инсталлирован) и кратким описанием:
ii ConsoleKit2-1.0.0_4 A framework for defining an d tracking users, login sessions, and seats ii GConf-3.2.6_6 A process-transparent configuration system ... ii zlib-1.2.8_6 A compression/decompres... ii zsh-5.1.1_1 The Z SHell
Далее, с точки зрения чистки системы, буде такую придётся проводить, не худо знать, какие пакеты были установлены автоматически, а какие — вручную. Правда, на первый вопрос можно ответить только методом исключения, так как сооветствующая команда
$ xbps-query -m
выведет список только «ручных» пакетов:
$ xbps-query -m [~] aisleriot-3.16.2_1 alsa-plugins-pulseaudio-1.0.29_2 ... xz-5.2.1_4 zsh-5.1.1_1
Сравнение этих двух списков показывает, что «автоматический» статус имеют все пакеты, установленные при первичной инсталляции системы, почему удалять их следует с осторожностью, ибо с одним таким пакетом можно снести половину системы. Благо, как уже неоднократно подчёркивалось, дистрбутивные образы Void’а скомпонованы так, что удалять из них просто нечего.
И зато с помощью команды
$ xbps-query -O
можно выявить «осиротелые» пакет. То есть те, которые некогда были установлены как зависимости пакетов, позднее удалённых, и более никем не востребованы.
Далее, во всех системах пакетного менеджмента существует понятие «зафиксированных» пакетов, которые не должны быть затронуты глобальным обновлением. Просмотреть их список можно так:
$ xbps-query -H
Правда, в свежеинсталлированной системе таких пакетов нет вообще: обично фиксируются версии самосборных пакетов (например, ядра), или пакетов, для которых хотелось бы сохранить старую версию.
Посмотрев на пакеты, которые есть в системе, и ознакомившись с их статусом, пора переходить к пакетам, которых в системе нет. То есть — заняться поиском потенциально необходимых пакетов. Делается это всё той же командой xbps-query
, в качестве аргумента которой задаётся имя пакета. Если же вклинить между ними опцию -s
, то аргумент будет восприниматься как шаблон. То есть команда
$ xbps-query geany
отыщет указанный пакет — и только его. Но зато выведет о нем подробные сведения, в том числе список зависимостей:
architecture: x86_64 build-date: 2015-09-01 06:56 UTC ... short_desc: Fast and lightweight IDE source-revisions: geany:1816931 state: installed
В форме же
$ xbps-query -s geany
аргумент будет воспринят как шаблон имени, и вывод команды будет таким:
[*] geany-1.25_2 Fast and lightweight IDE [*] geany-plugins-1.25_2 Geany IDE plugins meta-package [*] geany-plugins-extra-1.25_2 Geany IDE plugins - extra plugins
В обоих случаях поиск осуществлялся на локальной машине — а, как говаривал Кристобаль Хозевич Хунта, какой смысл искать пакет, если он и так есть? Поэтому поиск недостающих пакетов резонно проводить в удалённых репозиториях, для чего к команда добавляется опция -R
, предписывающая искать во всех подключённых хранилищах. То есть команда:
$ xbps-query -Rs maim [-] maim-3.4.46_1 Desktop screenshot utility
выведет список пакетов, удовлетворяющих шаблону maim
, хотя в данном примере в этом списке будет только один представитель. Многочисленные примеры такого поиска были приведены в интермедии о пакетах non-free.
Результатом исполнения той же команды в форме
$ xbps-query -R maim
будет вывод сведений о конкретном пакете maim-3.4.46_1
:
[-] maim-3.4.46_1 Desktop screenshot utility [alv]=$ xbps-query -R maim [~] architecture: x86_64 build-date: 2015-09-12 07:18 UTC filename-sha256: 79a799abd059ada629ea96a10a822bf806349862b0f994925cf2799d68f7947c filename-size: 23KB homepage: https://github.com/naelstrof/maim installed_size: 69KB license: GPL-3 maintainer: Juan RP <xtraeme@voidlinux.eu> pkgver: maim-3.4.46_1 repository: http://repo2.voidlinux.eu/current shlib-requires: libImlib2.so.1 libX11.so.6 libXrandr.so.2 libXfixes.so.3 libstdc++.so.6 libgcc_s.so.1 libc.so.6 short_desc: Desktop screenshot utility source-revisions: maim:fa3bff2
В принципе, для получения сведений о пакете, локальном или из репозитория, предназначена специальная опция -S
(или --show
— не путать с опцией -S
утилиты xbps-install
, которая в полной форме выглядит как --sync
). Однако необходимости в ней возникает не часто, потому что её наличие подразумевается по умолчанию при запросе одиночного пакета.
Интересная (и, насколько я знаю, уникальная) функция утилиты xbps-query
— возможность «порционной» выдачи информации о пакете, для чего предназначена опция -p
(или --property
), в качестве значений которой указываются имена полей из полного набора свойств пакета, например:
$ xbps-query -R -p pkgver maim maim-3.4.46_1 $ xbps-query -R -p license maim GPL-3 $ xbps-query -R -p maintainer maim Juan RP <xtraeme@voidlinux.eu>
Одной командой можно запросить сразу несколько свойств пакета, указав значения опции -p
через запятую:
$ xbps-query -R -p pkgver,build-date,repository maim maim-3.4.46_1 2015-09-12 07:18 UTC http://repo2.voidlinux.eu/current
Подробней надо остановиться на информации о зависимостях пакетов. В приведённых выше примерах они представлены в виде конкретных файлов из разделяемых библиотек (свойство shlib-requires). Однако можно просмотреть и зависимости от пакетов, для чего указывается свойство run_depends
:
$ xbps-query -R -p run_depends maim imlib2>=1.4.2_1 libX11>=1.2_1 libXrandr>=1.3.0_1 libXfixes>=4.0.3_1 libstdc++>=4.4.0_1 libgcc>=4.4.0_1 glibc>=2.8_1
Тот же самый результат можно получить с помощью специальной опции -x
(или --deps
):
$ xbps-query -Rx zsh libcap>=2.16_1 glibc>=2.8_1 ncurses-libs>=5.8_1 gdbm>=1.10_1_1 libpcre>=8.30_1
Есть возможность вывести и список обратных зависимостей (reverse dependencies) — пакетов, зависящих от данного: для этого предусмотрена опция -X
(или --revdeps
):
$ xbps-query -RX zsh zsh-syntax-highlighting-0.2.1_1
Наконец, есть специальная утилита xbps-dgraph
, которая строит графы зависимостей в формате dot
, который декоарируется как человекопонятный. Но, видимо, я не тот человек, и потому говорить о ней не буду.
А скажу другую вещь, с которой, вероятно, надо было бы начать разговор о пакетах вообще. Но лучше поздно, чем никогда. В отличие от большинства современных пакетных менеджеров, в XBPS нет разделения зависимостей на «жёсткие» и «мягкие»: всё, что прописано в поле свойства run_depends
файла свойств пакета (он называется propos.plist
, и разговор о нём ещё впереди), является обязательным к удовлетворению. И потому при манипуляциях с пакетами к их зависимостям нужно относиться со всем вниманием.
Вывод списка файлов, входящих в пакет — ещё одна очень полезная функция утилиты xbps-query
, и обеспечивается она опцией -f
, или --files
$ xbps-query -Rf maim /usr/bin/maim /usr/share/man/man1/maim.1
Наконец, теоретически возможно и решение обратной задачи — определение принадлежности некоего файла тому или иному пакету посредством опции -o
, или --ownedby
, однако практически она у меня не работает.