Gentoolkit Matt Butcher John P. Davis Erwin Shyam Mani Xavier Neys Gentoolkit is a suite of tools to ease the administration of a Gentoo system. This document covers the basics of some of the tools present in Gentoolkit. 1.6 2005-04-07 Introduction
What is Gentoolkit?

Gentoo is a unique distribution and presents some complexities that simply don't exist for other distributions. As Gentoo developers and contributors discovered some of these complexities, they also wrote tools to help users and administrators work around them. Many of these tools have been contributed to the Gentoo project and are included in the package app-portage/gentoolkit.

As of now, there are two versions of gentoolkit: app-portage/gentoolkit and app-portage/gentoolkit-dev. While the former contains administration scripts, the latter contains scripts specific to help development on Gentoo. This document discusses gentoolkit only.

Gentoolkit contains a whole bunch of useful tools to help manage your packages and keep track of what is going on in your system. Most users -- particularly those who update systems often -- will benefit from having gentoolkit installed.

Installation

Just as with any Gentoo package, installation is just a simple emerge.

# emerge gentoolkit
Many of the tools in gentoolkit reveal important information about your system or require root privilege. For that reason, some of the programs may only be executed (or only function properly) if run by a user with root permission.
Finding Documentation

Any documentation that a program might have (other than man pages) is stored in /usr/doc/gentoolkit-[version]/[program-name]/.

equery
Introduction

equery is a tool that supports features that epm (and the deprecated qpkg) has but has its own set of features that make it really useful. equery --help gives you the full set of options. equery will eventually replace etcat at some point of time.

Not all features listed by equery --help have been implemented yet. Those that have not been, are mentioned clearly.
Finding out Package Sizes

Ever been curious to find out how much space a specific package is occupying? Since a package could have its files over a number of directories, the usual du -hc might not give you the correct figure. Not to worry, here comes equery to the rescue!

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

As you can see, equery prints the total space used in kilobytes and also lists the total number of files the package has.

Package-wise list of USE Flags

equery can be used to give us information about what USE flags are being used by a specific package. It tells us what our current USE flags are for a package and what USE flags are available for the package.

# 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

I have installed ethereal with only the gtk, ssl and gtk2 flags set, but the other USE flags for ethereal are adns, ipv6, snmp and debug. For more information on USE flags, please refer to the USE Flags chapter of the Gentoo Handbook.

Where's the ebuild?

We can also find out which ebuild is being used for a specific package using equery. This is done my using the equery which command which displays the full path to the ebuild.

# equery which cdrtools
/usr/portage/app-cdr/cdrtools/cdrtools-2.01_alpha37.ebuild
Dependency Graphs

equery is capable of giving us a dependency graph for a specified package. The dependency graph gives a listing of all the packages that have direct and indirect dependencies on the package in question.

# 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

For example, while glibc may be a direct dependency for cdrtools, the linux-headers are an indirect dependency for cdrtools.

euse
Introduction euse is currently broken as it does not support cascading profiles well.

euse is a tool to see, set and unset USE flags at various places. For more information on USE flags, please refer to the USE Flags. Please see euse -h for complete help and all options.

Viewing, Setting and Unsetting USE Flags

The euse -a command reads the current active USE flags and displays them.

There are 5 "columns" that euse now uses to show whether a flag is set/unset and where all the flag has been set. The columns are as follows -- +/-, set in the Environment, set in make.Conf, set in make.Defaults, and set in make.Globals. The output looks like [+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 ]

Similarly you can use the euse -a -g command to only view active global USE flags. The euse -a -l command does the same for active local USE flags.-g & -l are suboptions to euse and need an option before them (like -a) to function correctly.

# 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 ]

We can also use euse to set or unset use flags. The commands used for this are euse -E flagname (enable a flag) and euse -D flagname (disable a flag).

Do not use the euse -E or euse -D commands by themselves (without a flag). It will set/unset ALL USE flags in /etc/make.conf. Although a backup is kept at /etc/make.conf.euse_backup, please be careful while using euse -E or euse -D.
(Enabling a USE Flag)
#  euse -E 3dfx
/etc/make.conf was modified, a backup copy has been placed at /etc/make.conf.euse_backup

(/etc/make.conf after the command)
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"

(Disabling the USE Flag)
#  euse -D 3dfx
/etc/make.conf was modified, a backup copy has been placed at /etc/make.conf.euse_backup

(/etc/make.conf after the command)
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 does not physically remove the flag from make.conf. It just adds a - (minus) before the flag to unset it. You may have to manually clean up your make.conf to avoid unwanted variables.
Other tools
revdep-rebuild

This tool is Gentoo's Reverse Dependency rebuilder. It will scan your installed ebuilds to find packages that have become broken as a result of an upgrade of a package they depend on. It can emerge those packages for you but it can also happen that a given package does not work anymore with the currently installed dependencies, in which case you should upgrade the broken package to a more recent version. revdep-rebuild will pass flags to emerge which lets you use the --pretend flag to see what is going to be emerged again before you go any further.

# 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.

If you need to rebuild some packages, you may run revdep-rebuild without the -p flag and the listed packages will be emerged again.

glsa-check

glsa-check is mainly a test tool that keeps track of the various GLSA's (Gentoo Linux Security Advisory) and will eventually be integrated into emerge and equery. For more information, please visit the Portage GLSA Integration Page.