Void Linux. Управление пакетами. Система XBPS: информация о пакетах

Алексей Федорчук

Вслед за получением информации о репозиториях и осуществления необходимых с ними действий настаёт черёд разобраться с пакетами, как находящимися в них, так и установленными в системе. И инструментом для этого послужит утилита 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, однако практически она у меня не работает.

Оглавление

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