Gentoolkit Matt Butcher John P. Davis Erwin Shyam Mani Xavier Neys Karl Trygve José Luis Rivero Андрей Тропичев Gentoolkit это набор средств, облегчающих администрирование системы Gentoo. В этом документе описаны основы использования некоторых утилит, входящих в Gentoolkit. 1.8 2005-06-07 Введение
Что такое Gentoolkit?

Gentoo — уникальный дистрибутив, имеющий некоторые сложности в использовании, просто отсутствующие в других дистрибутивах. Столкнувшись с этим, разработчики и участники проекта Gentoo создали средства, помогающие пользователям и администраторам обходить их. Многие из этих инструментов были добавлены в проект Gentoo и включены в пакет app-portage/gentoolkit.

В настоящий момент существует два варианта gentoolkit: app-portage/gentoolkit и app-portage/gentoolkit-dev. В то время как первый содержит сценарии администрирования системы, второй содержит сценарии, предназначенные для помощи разработчикам под Gentoo. Если вы разработчик, вы можете добавить свои сценарии в gentoolkit-dev связавшись с ответственным за сопровождение Gentoolkit. В этом документе обсуждается тлоько gentoolkit.

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

Установка

Как и для всех пакетов Gentoo, установка это просто вызов emerge.

# emerge gentoolkit
Многие из утилит gentoolkit отображают важную системную информацию или требуют полномочий администратора. Поэтому некоторые программы могут правильно функционировать только при запуске пользователем с правами администратора.
Получение документации

Любая имеющаяся документация к программам (за исключением страниц справки) находится в каталоге /usr/doc/gentoolkit-[версия]/[название_программы]/.

equery
Введение

equery это утилита, поддерживающая некоторые возможности epm (и неподдерживаемого qpkg) вместе с собственным набором функций, делающих ее весьма полезной. equery --help выводит полный список доступных параметров. equery в конечном счете должна заменить etcat в следующих выпусках Gentoolkit.

Не все возможности, отображаемые equery --help, реализованы в настоящее время. Нереализованные функции отмечены отдельно. Вы также увидите, что вызов каждой функции имеет короткий вариант, например b вместо belongs. Помните, что в настоящее время при перенаправлении вывода формат выводимых equery сообщений изменяется. Формат данных, перенаправляемых в канал, рассчитан на облегчение разбора программными средствами, но он менее популярен и может быть изменен в будущем. Вы должны помнить об этом если пишете сценарии, использующие equery.
Поиск пакета, которому принадлежит данный файл

equery предоставляет возможность поиска пакета, которому принадлежит данный файл, используя функцию belongs (или просто b).

# equery belongs /usr/bin/xmms
[ Searching for file(s) /usr/bin/xmms in *... ]
media-sound/xmms-1.2.10-r9 (/usr/bin/xmms)

С использованием параметра -f, вы можете искать пакеты, содержащие файлы, имена которых соответствуют регулярному выражению. Параметр -e используется для немедленной остановки поиска когда найдено первое соответствие.

Проверка целостности пакета

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

# equery check gentoolkit
[ Checking app-portage/gentoolkit-0.2.0 ]
 * 54 out of 54 files good

Обратите внимание, если после установки вы измените конфигурационные файлы пакета, они могут быть отмечены как не прошедшие проверку ("not good").

Список всех пакетов, зависящих от ...

equery способен отобразить список всех пакетов, имеющих прямую зависимость от выбранного пакета. Для этого используется функция depends и делается это так:

# equery depends pygtk
[ Searching for packages depending on pygtk... ]
app-office/dia-0.93
dev-python/gnome-python-2.0.0-r1
gnome-extra/gdesklets-core-0.26.2
media-gfx/gimp-2.0.4
x11-libs/vte-0.11.11-r1
Деревья зависимостей

equery способен отображать дерево зависимостей для данного пакета. Дерево зависимостей представляет список всех пакетов от которых напрямую и косвенно зависит данный пакет.

# equery depgraph cdrtools
Displaying dependencies for app-cdr/cdrtools-2.01_alpha37
`-- app-cdr/cdrtools-2.01_alpha37
 `-- sys-libs/glibc-2.3.4.20040808 (virtual/libc)
  `-- sys-kernel/linux-headers-2.4.22 (virtual/os-headers)
   `-- sys-apps/baselayout-1.10.4
    `-- sys-apps/sysvinit-2.85-r1
     `-- sys-apps/gawk-3.1.3-r1
      `-- sys-apps/util-linux-2.12-r4
          `-- sys-apps/sed-4.0.9
        `-- sys-libs/ncurses-5.4-r4
            `-- sys-apps/pam-login-3.14
            `-- sys-libs/pam-0.77-r1
                 `-- sys-libs/cracklib-2.7-r10
               `-- sys-apps/miscfiles-1.3-r1
              `-- app-arch/gzip-1.3.5-r1
              `-- sys-apps/portage-2.0.50-r10

Например, пока cdrtools напрямую зависит от glibc, он косвенно зависит от linux_headers. Обратите внимание, что вывод также включает информацию о виртуальных пакетах. В примере выше, cdrtools на самом деле написан с требованием virtual/libc а не sys-libs/glibc, но в данной системе virtual/libc обеспечивается пакетом sys-libs/glibc.

Список файлов, связаных с пакетом

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

# equery files gentoolkit
[ Searching for packages matching gentoolkit... ]
app-portage/gentoolkit-0.2.0
* Contents of app-portage/gentoolkit-0.2.0:
/usr
/usr/bin
/usr/bin/equery
/usr/bin/etcat
/usr/bin/euse
/usr/bin/glsa-check
/usr/bin/qpkg
/usr/bin/revdep-rebuild
/usr/lib
/usr/lib/gentoolkit
/usr/lib/gentoolkit/pym
/usr/lib/gentoolkit/pym/gentoolkit
/usr/lib/gentoolkit/pym/gentoolkit/__init__.py
/usr/lib/gentoolkit/pym/gentoolkit/gentoolkit.py
/usr/lib/gentoolkit/pym/gentoolkit/pprinter.py
/usr/lib/gentoolkit/pym/glsa.py
/usr/sbin
/usr/share
/usr/share/doc
/usr/share/doc/gentoolkit-0.2.0_pre10

[...]

Функция files в equery имеет дополнительные параметры для изменения выводимой информации. Вы можете посмотреть их все на странице справки equery.

Просмотр пакетов, использующих конкретный USE-флаг

Если вы хотите найти все пакеты в вашей системе, использующие конкретный USE-флаг, equery предоставляет функцию hasuse:

# equery hasuse mozilla
[ Searching for USE flag mozilla in all categories among: ]
 * installed packages
[I--] [  ] dev-java/blackdown-jre-1.4.2.01 (1.4.2)
[I--] [  ] mail-client/evolution-2.0.2 (2.0)
Вывод списка пакетов

В equery имеется мощная функция вывода списка пакетов установленных в нашей системе, а также находящихся в Portage или оверлее. Попробуйте это:

# equery list gentoolkit
[ Searching for package 'gentoolkit' in all categories among: ]
 * installed packages
[I--] [  ] app-portage/gentoolkit-0.2.0 (0)

Стандартный запрос покажет установленные у вас пакеты, с названием, совпадающим с переданным в качестве параметра. В случае совпадения, будет отображена следующая информация: между первых квадратных скобок — размещение пакета (I для установленных пакетов, P для пакетов в Portage, O для пакетов в оверлее), между вторыми — возможные маски (~ по ключевому слову, - по архитектуре или M для жестко замаскированных), затем следует категория и полное имя пакета, и в конце, слот, в котором размещен пакет.

Следующий пример. Сейчас мы используем дополнительные параметры функции list для просмотра пакетов в следующем порядке: установленные в системе, имеющиеся в Portage и находящиеся в оверлее.

# equery list -p -o vim
[ Searching for package 'vim' in all categories among: ]
 * installed packages
[I--] [  ] app-editors/vim-6.3-r4 (0)
 * Portage tree (/usr/portage)
[-P-] [M~] app-editors/vim-7.0_alpha20050126 (0)
[-P-] [M~] app-editors/vim-7.0_alpha20050201 (0)
[-P-] [  ] app-editors/vim-6.3-r2 (0)
[-P-] [M~] app-editors/vim-7.0_alpha20050122 (0)
[-P-] [M~] app-editors/vim-core-7.0_alpha20050126 (0)
[-P-] [  ] app-editors/vim-core-6.3-r3 (0)
[-P-] [M~] app-editors/vim-core-7.0_alpha20050122 (0)
[-P-] [M~] app-editors/vim-core-7.0_alpha20050201 (0)
[-P-] [  ] app-editors/vim-core-6.3-r4 (0)
 * overlay tree (/opt/ebuilds)
Определение размера пакета

Интересно узнать, сколько места на диске занимает определенный пакет? Поскольку файлы пакета могут быть расположены в большом количестве каталогов, обычный вызов du -hc может не дать вам корректную цифру. Не беспокойтесь, equery приходит на помощь!

# equery size openoffice-bin
* app-office/openoffice-bin-1.1.2
     Total Files : 2908
     Total Size  : 223353.31 KiB

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

Список USE-флагов, используемых определенным пакетом

equery может быть использован для выдачи информации о том, какие USE-флаги используются конкретным пакетом. Он покажет нам какие из наших текущих USE-флагов определены для пакета, а также какие еще USE-флаги доступны для него.

# equery uses ethereal
[ Colour Code : set unset ]
[ Legend    : (U) Col 1 - Current USE flags        ]
[           : (I) Col 2 - Installed With USE flags ]

 U I [ Found these USE variables in : net-analyzer/ethereal-0.10.6 ]
 - - adns  : Adds support for the adns DNS client library
 + + gtk   : Adds support for x11-libs/gtk+ (The GIMP Toolkit)
 - - ipv6  : Adds support for IP version 6
 - - snmp  : Adds support for the Simple Network Management Protocol if available
 + + ssl   : Adds support for Secure Socket Layer connections
 + + gtk2  : Use gtk+-2.0.0 over gtk+-1.2 in cases where a program supports both.
 - - debug : Tells configure and the makefiles to build for debugging. Effects vary across packages,
             but generally it will at least add -g to CFLAGS. Remember to set FEATURES=nostrip too

Я установил ethereal только с включенными gtk, ssl и gtk2 USE-флагами, однако есть и другие доступные для него USE-флаги — это adns, ipv6, snmp и debug. За полной информацией о использовании USE-флагов, обращайтесь к главе USE-флаги Настольной книги Gentoo.

Где находится сборочный файл?

Используя equery мы также можем найти какой сборочный файл был использован для определенного пакета. Я делаю это с помощью функции equery which которая отображает полный путь к сборочному файлу.

# equery which cdrtools
/usr/portage/app-cdr/cdrtools/cdrtools-2.01_alpha37.ebuild
euse
Введение euse в данный момент не работает, так как она не поддерживает последовательно складывающиеся профили.

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

Просмтор, включение и выключение USE-флагов

Команда euse -a считывает текущие активные USE-флаги и отображает их.

Вот 5 «колонок», которые euse использует для показа какой флаг включен/выключен в данный момент и в каком месте это было сделано. По порядку это — +/-, установлен в виде переменной среды (Environment), установлен в make.Conf, установлен в make.Defaults, и установлен в make.Globals. В общем, вывод выглядит как [+ECDG].
#  euse -a
X                   [+ CD ]
aalib               [+    ]
acpi                [+ C  ]
alsa                [+ C  ]
apache2             [+ C  ]
apm                 [+  D ]
avi                 [+  D ]
berkdb              [+  D ]
bitmap-fonts        [+  D ]
bonobo              [+    ]
cdr                 [+ C  ]
crypt               [+ CD ]
cscope              [+ C  ]
cups                [+ CD ]
curl                [+    ]
emboss              [+  D ]
encode              [+  D ]
esd                 [+    ]
ethereal            [+ C  ]
fam                 [+    ]
fbcon               [+ C  ]
font-server         [+  D ]
foomaticdb          [+  D ]
fortran             [+  D ]
gd                  [+ C  ]
gdbm                [+  D ]
gif                 [+ CD ]
gimpprint           [+ C  ]
gnome               [+ CD ]
gphoto2             [+    ]
gpm                 [+ CD ]
gstreamer           [+ C  ]
gtk                 [+  D ]
gtk2                [+ CD ]
gtkhtml             [+ C  ]
guile               [+    ]
imagemagick         [+    ]
imlib               [+ CD ]
imlib2              [+    ]
innodb              [+    ]
ipv6                [+  D ]
javascript          [+ C  ]
jpeg                [+ CD ]
kde                 [+  D ]
ldap                [+    ]
libg++              [+ CD ]
libwww              [+ CD ]
mad                 [+ CD ]
mbox                [+ C  ]
md5sum              [+ C  ]
mikmod              [+ CD ]
mmx                 [+ C  ]
motif               [+ CD ]
mozilla             [+ C  ]
mp3                 [+    ]
mpeg                [+ CD ]
mpeg4               [+ C  ]
mysql               [+ C  ]
ncurses             [+ CD ]
nls                 [+  D ]
nvidia              [+ C  ]
odbc                [+    ]
offensive           [+    ]
oggvorbis           [+ CD ]
opengl              [+ CD ]
oss                 [+  D ]
pam                 [+ CD ]
pdflib              [+ CD ]
perl                [+ CD ]
png                 [+ CD ]
python              [+ CD ]
qt                  [+  D ]
quicktime           [+ CD ]
readline            [+ CD ]
ruby                [+    ]
sdl                 [+ CD ]
slang               [+  D ]
spell               [+ CD ]
sse                 [+ C  ]
ssl                 [+ CD ]
svga                [+ CD ]
tcltk               [+ C  ]
tcpd                [+  D ]
tiff                [+ C  ]
truetype            [+ CD ]
truetype-fonts      [+  D ]
type1-fonts         [+  D ]
usb                 [+ C  ]
vanilla             [+ C  ]
x86                 [+ C  ]
xml                 [+    ]
xml2                [+  D ]
xmms                [+  D ]
xosd                [+ C  ]
xv                  [+ CD ]
xvid                [+ C  ]
zlib                [+ CD ]

Подобным образом вы можете использовать команду euse -a -g для просмотра только глобальных активных USE-флагов. Команда euse -a -l делает то же для локальных активных USE-флагов. -g и -l дополнительные параметры euse и для правильной работы нужно обязательно указывать перед ними основной параметр (например -a).

# euse -a -l
bitmap-fonts        [+  D ]
font-server         [+  D ]
fortran             [+  D ]
gimpprint           [+ C  ]
imlib2              [+    ]
md5sum              [+ C  ]
mpeg4               [+ C  ]
nvidia              [+ C  ]
offensive           [+    ]
truetype            [+ CD ]
truetype-fonts      [+  D ]
type1-fonts         [+  D ]

Мы также можем использовать euse для включения и выключения USE-флагов. Команды, используемые для этого — euse -E имя_флага (включение флага) и euse -D имя_флага (отключение флага).

Не используйте euse -E или euse -D самостоятельно (без указания USE-флага). Это может включить/отключить ВСЕ USE-флаги в /etc/make.conf. Несмотря на то что резервная копия сохраняется в /etc/make.conf.euse_backup, пожалуйста, будьте внимательны используя euse -E или euse -D.
(Включение USE-флага)
#  euse -E 3dfx
/etc/make.conf was modified, a backup copy has been placed at
/etc/make.conf.euse_backup

(/etc/make.conf после выполнения команды)
USE="alsa acpi apache2 -arts cups cdr crypt cscope -doc ethereal fbcon gd \
     gif gimpprint gnome gpm gstreamer gtk2 gtkhtml imlib imlib2 \
     innodb -java javascript jpeg libg++ libwww mad mbox md5sum \
     mikmod mmx motif mozilla mpeg mpeg4 mysql ncurses nvidia \
     oggvorbis odbc offensive opengl pam pdflib perl png python \
     quicktime readline sdl spell sse ssl svga tcltk tiff truetype usb \
     vanilla X xml2 xmms xosd xv xvid x86 zlib 3dfx"

(Выключение USE-флага)
#  euse -D 3dfx
/etc/make.conf was modified, a backup copy has been placed at
/etc/make.conf.euse_backup

(/etc/make.conf после выполнения команды)
USE="alsa acpi apache2 -arts cups cdr crypt cscope -doc ethereal fbcon gd \
     gif gimpprint gnome gpm gstreamer gtk2 gtkhtml imlib imlib2 \
     innodb -java javascript jpeg libg++ libwww mad mbox md5sum \
     mikmod mmx motif mozilla mpeg mpeg4 mysql ncurses nvidia \
     oggvorbis odbc offensive opengl pam pdflib perl png python \
     quicktime readline sdl spell sse ssl svga tcltk tiff truetype usb \
     vanilla X xml2 xmms xosd xv xvid x86 zlib -3dfx"
euse не удаляет физически флаг из файла make.conf. Она просто добавляет - (минус) перед флагом чтобы отключить его. В дальнейшем, вы можете вручную очистить ваш make.conf от ненужных переменных.
Другие утилиты
revdep-rebuild

Этот инструмент предназначен для восстановления зависимостей пакетов Gentoo. Он просканирует сборочные файлы для поиска пакетов, которые могут перестать работать в результате обновления пакетов от которых они зависят. Он не только поможет вам переустановить эти пакеты, но и, в случае если данный пакет не может больше работать с установленными в настоящее время зависимостями, укажет на необходимость обновления нерабочего пакета до более свежей версии. revdep-rebuild переадресует переданные параметры emerge что позволяет вам, используя параметр --pretend, предварительно просмотреть, что будет переустановлено, перед тем как вы пойдете дальше.

# revdep-rebuild -p

Checking reverse dependencies...
Packages containing binaries and libraries broken by any package update,
will be recompiled.

Collecting system binaries and libraries... done.
  (/root/.revdep-rebuild.1_files)

Collecting complete LD_LIBRARY_PATH... done.
  (/root/.revdep-rebuild.2_ldpath)

Checking dynamic linking consistency...
  broken /usr/lib/ao/plugins-2/libarts.so (requires libartsc.so.0)
  broken /usr/lib/kde3/libkpresenterpart.so (requires libartskde.so.1 libqtmcop.so.1
         libsoundserver_idl.so.1 libkmedia2_idl.so.1 libartsflow.so.1 libartsflow_idl.so.1 libmcop.so.1)
  broken /usr/lib/ruby/site_ruby/1.8/i686-linux/fox.so (requires libFOX-1.0.so.0)
  broken /usr/lib/xine/plugins/1.0.0/xineplug_ao_out_arts.so (requires libartsc.so.0)
  broken /usr/lib/perl5/vendor_perl/5.8.0/i686-linux/auto/SDL_perl/SDL_perl.so (requires libSDL_gfx.so.0)
  broken /usr/lib/libloudmouth-1.so.0.0.0 (requires libgnutls.so.10)
  broken /usr/bin/k3b (requires libartskde.so.1 libqtmcop.so.1 libsoundserver_idl.so.1 libkmedia2_idl.so.1
         libartsflow.so.1 libartsflow_idl.so.1 libmcop.so.1)
  broken /usr/bin/lua (requires libhistory.so.4)
  broken /usr/bin/lyx (requires libAiksaurus-1.0.so.0)
  broken /usr/bin/luac (requires libhistory.so.4)
  broken /usr/bin/avidemux2 (requires libartsc.so.0)
  broken /usr/bin/pptout (requires libxml++-0.1.so.11)
  broken /usr/bin/xml2ps (requires libxml++-0.1.so.11)
 done.
  (/root/.revdep-rebuild.3_rebuild)

Assigning files to ebuilds... done.
  (/root/.revdep-rebuild.4_ebuilds)

Evaluating package order... done.
  (/root/.revdep-rebuild.5_order)

All prepared. Starting rebuild...
emerge --oneshot --nodeps -p =app-cdr/k3b-0.11.14 =app-office/koffice-1.3.2 =app-office/lyx-1.3.4 \
       =app-office/passepartout-0.2 =dev-lang/lua-5.0.2 =dev-ruby/fxruby-1.0.29 =media-libs/libao-0.8.5 \
       =media-libs/xine-lib-1_rc5-r3 =media-video/avidemux-2.0.26 =net-libs/loudmouth-0.16 

These are the packages that I would merge, in order:

Calculating dependencies ...done!
[ebuild   R   ] app-cdr/k3b-0.11.14  
[ebuild   R   ] app-office/koffice-1.3.2  
[ebuild   R   ] app-office/lyx-1.3.4  
[ebuild   R   ] app-office/passepartout-0.2  
[ebuild   R   ] dev-lang/lua-5.0.2  
[ebuild   R   ] dev-ruby/fxruby-1.0.29  
[ebuild   R   ] media-libs/libao-0.8.5  
[ebuild   R   ] media-libs/xine-lib-1_rc5-r3  
[ebuild   R   ] media-video/avidemux-2.0.26  
[ebuild   R   ] net-libs/loudmouth-0.16  

Now you can remove -p (or --pretend) from arguments and re-run revdep-rebuild.

Если вам нужно восстановить некоторые пакеты, вы можете запустить revdep-rebuild без параметра -p и пакеты из приведенного списка будут установлены заново.

glsa-check

glsa-check это, главным образом, тестовая утилита, отслеживающая различные информационные сообщения о безопасности Gentoo Linux (GLSA — Gentoo Linux Security Advisory), и, в конечном счете, должна быть интегрирована в emerge и equery. За более подробной информацией обращайтесь к страничке проекта Portage GLSA Integration.