Gentoo工具包(Gentoolkit)
1.
介绍
什么是Gentoolkit?
Gentoo是一个独一无二的发行版,并且存在一些别的发行版没有的复杂的东西。Gentoo开发者和贡献者们在发现这些复杂的东西的同时写了一些工具来帮助用户和管理员来使用它们。这些工具中的很大一部分已经被贡献到了Gentoo项目,并且被整合到了一个叫app-portage/gentoolkit的包里。
注意:
到现在为止,存在着两种版本的gentoolkit:app-portage/gentoolkit和app-portage/gentoolkit-dev。前者包含了管理脚本,而后者包含了一些专门帮助Gentoo开发的脚本。如果你是一个开发者,你可以通过联系Gentoolkit维护者来让你的脚本被收录到gentoolkit-dev里。这个文档只讨论gentoolkit。
|
Gentoolkit包含了一整套有用的工具来帮助你管理你的软件包和跟踪你的系统上发生的事。大部分的用户———特别是经常升级系统的用户,将会因gentoolkit受益。
安装
就像其他的Gentoo软件包一样,安装就只是简单地emerge。
代码 1.1: 安装gentoolkit |
# emerge gentoolkit
|
注意:
许多gentoolkit里的工具会显示一些有关于你的系统的信息或者需要root授权的重要信息。所以,一些程序(或是只是特定的函数)可能只能在获得root授权以后才能被运行。
|
查找文档
一个程序可能有的所有文档(除了man页)都被存储在了/usr/share/doc/gentoolkit-[版本]/[程序名]/里面。
2.
equery
介绍
equery是一个显示有关于你系统上的软件包的大量有用信息和其他许多东西的工具。equery --help能给你完整的选项列表。
注意:
目前为止不是所有的equery --help列出的特性都被实现了。没有被实现的特性都被很清楚地提到了。你会看到每一个命令都有一个缩写形式,比如说你可以使用b来代替belongs。
|
注意:
请注意,如果equery的输出是通过管道发送的,它会改变输出信息的格式。通过管道输出的格式是为了更容易被其他工具解析,但是你可以通过加入--no-pipe选项来关掉它。如果你写了需要调用equery的脚本,你应该注意这一点。
|
查找一个文件来自于哪个软件包
equery也提供了寻找一个文件来自于哪个软件包的功能,你可以通过使用belongs命令(或只是b)来实现这一功能。
代码 2.1: 查找某个给定的文件是通过哪一个ebuild安装的 |
# equery belongs /usr/bin/audacious
[ Searching for file(s) /usr/bin/audacious in *... ]
media-sound/audacious-1.1.2 (/usr/bin/audacious)
|
通过使用-f选项,你可以搜索匹配任意的正则表达式的文件所属的软件包。-e选项能够在一个匹配的软件包找到后终止寻找。
验证软件包的完整性
有时候检查一个软件包的完整性是很有用的。equery可以通过验证md5校验和及时间戳来检验一个软件包是否被破坏、替换或是移除。
代码 2.2: 确认软件包的完整性 |
# equery check gentoolkit
[ Checking app-portage/gentoolkit-0.2.0 ]
* 54 out of 54 files good
|
请记住,如果你在安装完成后修改了配置文件,这些文件可能会被报告为"not good"。
列出所有依赖的软件包
equery能够列出直接依赖于某个软件包的所有软件包。我们只要通过使用depends函数就能使用这个功能了:
代码 2.3: 查找依赖于pygtk的软件包 |
# 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可以向我们给出一个特定软件包的依赖关系图表。这个依赖关系图表向我们列出了指定软件包的所有一系列直接或间接依赖的软件包的列表
代码 2.4: cdrtools的依赖关系树 |
# 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的间接依赖。请记住输出的信息也包括一些虚拟的软件包的信息。在上面的例子中,事实上cdrtools的ebuild里写的是需要virtual/libc的,而不是sys-libs/glibc,但是在这个例子中,系统中的sys-libs/glibc提供了virtual/libc。
列出属于一个ebuild的文件
equery能够列出所有属于一个已安装ebuild的文件。如果我不知道Gentoolkit在系统上安装了哪些文件,我将会用equery来把它们列出来。
代码 2.5: 列出文件 |
# 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
[...]
|
equery的files命令提供了一些用来修改输出信息的选项。你可以在equery的man页中找到它们。
查找使用某个特定USE标记的软件包
如果你想要在你的系统上查找使用某个特定USE标记的软件包,equery的hasuse函数能够帮助你。
代码 2.6: 查找使用firefox这个USE标记的软件包 |
# equery hasuse firefox
[ Searching for USE flag firefox in all categories among: ]
* installed packages
[I--] [ ] dev-python/gnome-python-extras-2.14.0-r1 (0)
[I--] [ ] media-video/totem-2.16.4 (0)
|
列出软件包
equery拥有一个强大的特性,它能够列出属于我们的系统或在Portage里的软件包,甚至在overlay里的软件包也行。让我们试试看:
代码 2.7: 使用equery来列出软件包 |
# 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代表Overlay),在第二个括号里的是可能的mask(~是keyword的禁用,-是主机平台的禁用,M是硬性禁用),然后是分类和完整的名字,最后是软件包储存的位置。
下面是另一个例子,这次我们要使用本地选项来寻找在我们的portage树和overlay里的软件包。
代码 2.8: 使用equery的本地选项 |
# 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来拯救你了!
代码 2.9: 软件包大小 |
# equery size openoffice-bin
* app-office/openoffice-bin-1.1.2
Total Files : 2908
Total Size : 223353.31 KiB
|
正如你所见,equery以KB为单位打印出了全部的已用空间,并且它也列出了那个软件包的所有文件数。
每个软件包的USE标记列表
equery可以被用来给我们有关一个特定的软件包使用的USE标记的信息。它也可以告诉我们一个软件包正在使用的USE标记和可以使用的USE标记。
代码 2.10: 设置了的和没有设置的USE标记 |
# equery uses wireshark
[ 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/wireshark-0.99.4 ]
- - 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
- - kerberos : Adds kerberos support
- - portaudio : Adds support for the crossplatform portaudio audio API
- - selinux : !!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur
- - snmp : Adds support for the Simple Network Management Protocol if available
+ + ssl : Adds support for Secure Socket Layer connections
- - threads : Adds threads support for various packages. Usually pthreads
|
我安装了wireshark,并且仅仅使用了gtk和ssl两个USE标记,但是那里还有一些其他的wireshark可以使用的USE标记。请参考Gentoo手册里的USE标记这一章来得到更多信息。
ebuild在哪儿?
我们也可以使用equery来找出一个特定的软件包所使用的ebuild文件。你可以使用equery which来达到目的,这是一个显示一个ebuild文件完整路径的命令。
代码 2.11: 显示ebuild路径 |
# equery which cdrtools
/usr/portage/app-cdr/cdrtools/cdrtools-2.01_alpha37.ebuild
|
3.
euse
介绍
euse是一个用来在多个地方查看、设置和取消USE标记的工具。请参考USE标记来得到更多信息。请查看euse -h来得到完整的帮助和所有的选项。
查看,设置和取消USE标记
euse -a命令读取当前激活的USE标记并把它们显示出来。
注意:
euse用5列的输出信息来显示一个USE标记是否被设置或取消和在哪里被设置或取消。那些列分别表示+/-(激活或取消)、在环境(Environment)变量里设置的、在make.Conf里设置的、在make.Defaults里设置的和在make.Globals里设置的。输出的信息就像这样[+ECDG]。
|
代码 3.1: 常看所有活跃的USE标记 |
# 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 [+ ]
fam [+ ]
fbcon [+ C ]
firefox [+ 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 ]
gtkhtml [+ C ]
guile [+ ]
imagemagick [+ ]
imlib [+ CD ]
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 ]
mp3 [+ ]
mpeg [+ CD ]
mpeg4 [+ C ]
mysql [+ C ]
ncurses [+ CD ]
nls [+ D ]
nvidia [+ C ]
odbc [+ ]
offensive [+ ]
ogg [+ 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 ]
usb [+ C ]
vanilla [+ C ]
x86 [+ C ]
xml [+ ]
xosd [+ C ]
xv [+ CD ]
xvid [+ C ]
zlib [+ CD ]
|
相似地你可以使用euse -a -g命令来只显示活跃的全局USE标记。euse -a -l命令只显示活跃的局部USE标记。-g和-l是euse的子选项,并且需要一个选项(像-a)在他们之前才能正确运行。
代码 3.2: 查看活跃的局部USE标记 |
# euse -a -l
bitmap-fonts [+ D ]
font-server [+ D ]
fortran [+ D ]
gimpprint [+ C ]
md5sum [+ C ]
mpeg4 [+ C ]
nvidia [+ C ]
offensive [+ ]
truetype [+ CD ]
|
我们也可以使用euse来设置或取消USE标记。命令是这样的:euse -E flagname(启用一个USE标记)和euse -D flagname(禁用一个USE标记)。
警告:
请不要单独使用euse -E或euse -D命令(就是没有USE标记的情况)。它会设置/取消所有在/etc/make.conf里的USE标记。虽然一个备份被保存在了/etc/make.conf.euse_backup里,但是在使用euse -E或euse -D的时候请小心。
|
代码 3.3: 设置和取消USE标记 |
# euse -E 3dfx
/etc/make.conf was modified, a backup copy has been placed at /etc/make.conf.euse_backup
USE="alsa acpi apache2 -arts cups cdr crypt cscope -doc fbcon \
firefox gd gif gimpprint gnome gpm gstreamer gtkhtml imlib \
innodb -java javascript jpeg libg++ libwww mad mbox md5sum \
mikmod mmx motif mpeg mpeg4 mysql ncurses nvidia \
ogg odbc offensive opengl pam pdflib perl png python \
quicktime readline sdl spell sse ssl svga tcltk tiff truetype usb \
vanilla X xosd xv xvid x86 zlib 3dfx"
# euse -D 3dfx
/etc/make.conf was modified, a backup copy has been placed at /etc/make.conf.euse_backup
USE="alsa acpi apache2 -arts cups cdr crypt cscope -doc fbcon \
firefox gd gif gimpprint gnome gpm gstreamer gtkhtml imlib \
innodb -java javascript jpeg libg++ libwww mad mbox md5sum \
mikmod mmx motif mpeg mpeg4 mysql ncurses nvidia \
ogg odbc offensive opengl pam pdflib perl png python \
quicktime readline sdl spell sse ssl svga tcltk tiff truetype usb \
vanilla X xosd xv xvid x86 zlib -3dfx"
|
注意:
euse不是物理地从make.conf里移除USE标记。它只是在USE标记前叫了一个-(减号)来取消它。你可能要手动地清理你的make.conf来避免不想要的变量。
|
4.
其他工具
revdep-rebuild
这是Gentoo's Reverse Dependency(Gentoo反向依赖关系)的重建工具。它可以通过扫描你已经安装了的ebuild文件来了解软件包是否因为一次它们依赖的软件包的升级而被破坏。它可以为你重新emerge这些软件包。但也可能是给定的软件包在当前的依赖环境下无法再工作了,在这种情况下你应该把这些破损的软件包升级到一个较新的版本。revdep-rebuild会传递参数给emerge,这让你能使用--pretend选项在你进行实际安装前来查看哪些东西将要被重新emerge。
代码 4.1: 假装(pretend mode)运行revdep-rebuild |
# 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.
|
如果你需要重新编译这些软件包,你可以在没有-p标志的情况下运行revdep-rebuild,然后被列出的软件包就会被重新emerge。
glsa-check
glsa-check是一个测试性的工具,它可以跟踪GLSA(Gentoo Linux Security Advisory——Gentoo Linux安全建议),最后它将会被整合到emerge和equery去。请访问Portage GLSA整合页面来得到更多信息。
eread
eread是一个用来显示大于或等于2.1版本的portage产生的elog文件的简单组件。你可以通过设置/etc/make.conf里的一些变量来设置elog文件的存储。
代码 4.2: 在/etc/make.conf中启用elog |
PORTAGE_ELOG_CLASSES="log"
PORTAGE_ELOG_SYSTEM="save"
|
注意:
这只是存储elog信息的其中一条途径。请参考Portage手册里的相关的页面来得到更多有关portage的elog系统的信息。
|
配置完eread之后,只要运行eread就能查看你的log文件了。
代码 4.3: 使用eread |
$ eread
This is a list of portage log items. Choose a number to view that file or type q to quit.
1) app-portage:gentoolkit-0.2.4_pre2:20070320-000256.log
2) app-portage:gentoolkit-0.2.4_pre2:20070320-000258.log
3) app-portage:gentoolkit-0.2.4_pre2:20070320-000319.log
4) app-portage:gentoolkit-0.2.3:20070320-000408.log
Choice?
|
选择一个数字,然后对应的文件就会通过“PAGER”环境变量里指定的分页排版程序显示出来。如果“PAGER”变量没有被设置,它会使用less。
在显示了你指定的elog文件后,程序会问你是否想要删除那个文件。
|