Ted's Blog

Happy coding

gentoo 的中文 man 文档乱码的解决办法

有2种方法解决,2选一

1,用 groff-1.18.1 就可以直接支持UTF-8
所以可以不用这个groff-utf8,那么只要将 groff-1.19 mask了,降级到1.18.

echo ">=sys-apps/groff-1.19.2" >/etc/portage/package.mask
emerge groff

2,如果不想降级 groff,那么1.19在处理utf8上有bug这时就可以安装这个groff-utf8了

# emerge groff-utf8

按照安装完的提示修改/etc/man.conf的NROFF 变量

 * Messages for package app-text/groff-utf8-0:

 * Sample usage:
 * $ groff-utf8 -Tutf8 -mandoc find.vi.1 | less
 * $ groff-utf8 -Thtml -mandoc find.vi.1 > find.html; mozilla find.html
 *
 * You can also modify the TROFF/NROFF settings in your /etc/man.conf
 * to make it use groff-utf8 instead of groff.
 * For example:
 * NROFF       /usr/bin/groff-utf8 -Tutf8 -c -mandoc

make.conf 例子

  1. # These settings were set by the catalyst build script that automatically built this stage
  2. # Please consult /etc/make.conf.example for a more detailed example
  3. #---------------------------------------------------------------------------
  4. CFLAGS="-O2 -march=k8 -pipe"
  5. CHOST="x86_64-pc-linux-gnu"
  6. CXXFLAGS="${CFLAGS}"
  7. #--------------------------------------------------------------
  8. #CFLAGS="-march=athlon64 -O2 -pipe -fomit-frame-pointer -msse3"
  9. #--------------------------------------------------------------
  10. #--------------------------------------------------------------
  11. #LDFLAGS="-Wl,-O2"
  12. #LDFLAGS="-Wl,-O1 -Wl,--as-needed"
  13. #LDFLAGS="-Wl,-O1"
  14. #LDFLAGS="-Wl,-O1 -Wl,--enable-new-dtags -Wl,--sort-common -s"
  15. #LDFLAGS="-Wl,-O1 -Wl,--as-needed -Wl,--sort-common -Wl,--hash-style=both -s"
  16. LDFLAGS="-Wl,-O2,--as-needed"
  17. #--------------------------------------------------------------
  18. LINGUAS="zh_CN zh"
  19. #---------------------------------------------------------------------------
  20. #---------------------------------------------------------------------------
  21. ACCEPT_KEYWORDS="~amd64"
  22. #---------------------------------------------------------------------------
  23. #---------------------------------------------------------------------------
  24. USE="a52 aac amd64 automount bash-completion boost bzip2 chm chroot cjk \
  25. colordiff command-args compress cscope curl dbase dbm directfb \
  26. disk-partition dts fat ffmpeg fontconfig glib gtalk gtkhtml gtkmm gzip \
  27. hddtemp ithreads jpeg2k jpgraph latin1 mmap mp4 mplayer mplayer-bin \
  28. network ntfs nvidia openssh openssl opensslcrypt p2p pdfkit posix qq \
  29. rar real realmedia rpm samba sandbox scim sdl-image sdl-sound serial \
  30. sftp sql sqlite sqlite3 subversion svgz symlink tftp threads unzip usb v4l \
  31. v4l2 vim vim-pager vim-syntax vim-with-x wav wma wxwindows xchattext \
  32. xface xine xinetd xvid zip tk -cups -ipv6 -kde -truetype-fonts \
  33. -type1-fonts gssapi"
  34. #---------------------------------------------------------------------------
  35. #USE="immqt "
  36. FEATURES="ccache sandbox parallel-fetch" #getbinpkg keepwork
  37. INPUT_DEVICES="keyboard mouse"
  38. VIDEO_CARDS="nvidia vesa vga"
  39. #ALSA_CARDS="es1371"
  40. #---------------------------------------------------------------------------
  41. CCACHE_DIR="/var/tmp/ccache"
  42. CCACHE_SIZE="2G"
  43. #---------------------------------------------------------------------------
  44. MAKEOPTS="-j3"
  45. PORTAGE_BINHOST="https://e.ututo.org.ar/k8/ http://gentoo.modulix.net/gentoo/grp/x86_64-pc-linux-gnu/athlon64/gnome/"
  46. PKGDIR=/usr/portage/packages
  47. PORT_LOGDIR=/var/log/portage
  48. AUTOCLEAN="yes"
  49. PORTAGE_NICENESS=3
  50. #---------------------------------------------------------------------------
  51. GENTOO_MIRRORS="ftp://gentoo.anheng.com.cn/gentoo http://linux.ntcu.net/ftp/dists/gentoo ftp://gentoo.imj.fr/pub/gentoo/ http://gentoo.mirrors.easynews.com/linux/gentoo/ ftp://ftp.public.fix.fi/gentoo ftp://194.117.143.70/sites/gentoo"
  52. SYNC="rsync://linux.ntcu.net/gentoo-portage"
  53. #GENTOO_MIRRORS="http://gentoo.gg3.net/ ftp://gg3.net/pub/linux/gentoo/"
  54. FETCHCOMMAND="/usr/bin/axel -a -o \${DISTDIR}/\${FILE} \${URI}"
  55. RESUMECOMMAND="/usr/bin/axel -a -o \${DISTDIR}/\${FILE} \${URI}"
  56. #FETCHCOMMAND="axel -a -n 3 -N -o \${DISTDIR}/\${FILE} \${URI}"
  57. #RESUMECOMMAND="axel -a -n 3 -N -o \${DISTDIR}/\${FILE} \${URI}"
  58. #source /usr/portage/local/layman/make.conf
  59. #FETCHCOMMAND="/usr/bin/axel -a -o \${DISTDIR}/\${FILE}/\${URI}"
  60. #RESUMECOMMAND=${FETCHCOMMAND}
  61. #---------------------------------------------------------------------------
  62. PORTAGE_ELOG_SYSTEM="save"
  63. PORTAGE_ELOG_CLASSES="warn error info"
  64. #---------------------------------------------------------------------------
  65. #---------------------------------------------------------------------------
  66. PORTDIR_OVERLAY="/usr/local/myportage"
  67. PORTDIR_OVERLAY="${PORTDIR_OVERLAY} /usr/portage/local/layman/gentoo-china"
  68. PORTAGE_RSYNC_EXTRA_OPTS="--exclude-from=/etc/portage/rsync_excludes"
  69. #---------------------------------------------------------------------------
  70. ##一. 网通
  71. GENTOO_MIRRORS="http://61.135.158.199"
  72. SYNC="rsync://61.135.158.199/gentoo-portage"
  73. #点评:版主fei所架设。dell 2650 4G内存。双P4 xeon 2.8G 超线程,只做了portage和distfiles和snapshots镜象。
  74. #每天同步两次。北京网通机房。千兆带宽。
  75. ##二. 电信
  76. #GENTOO_MIRRORS="ftp://gentoo.anheng.com.cn/gentoo"
  77. #点评:sanfanling帮忙联系建立的,速度很快
  78. GENTOO_MIRRORS="http://linux.ntcu.net/ftp/dists/gentoo"
  79. SYNC="rsync://linux.ntcu.net/gentoo-portage"
  80. #点评:从上海连,可达200KB/S
  81. GENTOO_MIRRORS="ftp://ftp.linuxforum.net/gentoo http://mirror.gentoo.gr.jp"
  82. #点评:据反映linuxforum的镜像更新可能不够勤,所以以gentoo.gr.jp为后备
  83. GENTOO_MIRRORS="http://mirrors.acm.cs.rpi.edu/gentoo"
  84. SYNC="rsync://acm.cs.rpi.edu/gentoo-portage"
  85. #点评:这是fakeid和assemble推荐的
  86. ##三. 教育网
  87. GENTOO_MIRRORS="ftp://ftp3.tsinghua.edu.cn/mirror/gentoo"
  88. SYNC="rsync://ftp3.tsinghua.edu.cn/gentoo/gentoo-portage"
  89. ##点评:清华的,教育网访问速度超快,可以sync,教育网首选。
  90. GENTOO_MIRRORS="ftp://ftp.sjtu.edu.cn/gentoo"
  91. #点评:上海交大
  92. ##四. 内地以外
  93. GENTOO_MIRRORS="http://ftp.ncnu.edu.tw/Linux/Gentoo"
  94. SYNC="rsync://rsync.gentoo.org/gentoo-portage"
  95. #点评:这是zhllg用的,从香港连,很快
  96. #---------------------------------------------------------------------------

配置gentoo

emerge axel
然后在/etc/make.conf 里加上:
FETCHCOMMAND="/usr/bin/axel -a -S10 \${URI} -o \${DISTDIR}"
RESUMECOMMAND="/usr/bin/axel -a -S10 \${URI} -o \${DISTDIR}"
这样axel会搜索较快的10个(当然可以改成其他数字如S6等)伺服器来下载。和prozilla不同的是axel是从不同的伺服器下载,这样对gentoo的mirrors的负担会分散开来。

----------------

安装~x86软件方法:
echo 'yyy/xxx ~x86'>>/etc/portage/package.keywords
emerge xxx
--------------------------
安装mask软件的方法:
echo 'yyy/xxx' >>/etc/portage/package.unmask
emerge xxx
------------------------
升级系统:
emerge sync
emerge -uDpv world
emerge -uDv world
emerge -pv depclean
emerge -v depclean
revdep-rebuild -pv
revdep-rebuild -v
dispatch-conf
______________

Portage用户使用指南

Debentoo Gao译 2002.12.16



1 初步认识


 取得最新的Portage软件包列表



在你安装了Gentoo Linux,使用了一段时间以后,发现一些软件有着这样那样的bugs,觉得不满意,或是想升级到最新的Gentoo Linux所带的软件包时,你需要下载我们的Portage树。我提供了一些匿名的rsync服务器以供您升级到最新的Portage树。下面我将告诉您如何使用它。



使用以下命令同步更新你的Portage树


#emerge rsync



请注意emerge rsync;命令会自动附带—clean参数,清除你在/usr/portage里做的个人设置。如果你想保存你的主Portage树个人设置不变的话,请使用PORTDIR_OVERLAY选项:



把下面一行加入/etc/make.conf


PORTDIR_OVERLAY="/dir/where/your/ebuilds/are"



如果你已经动手修改ebuilds,修正bugs。你可以考虑加入Gentoo Linux开发团队,成为我们的一员。具体事项可以和Daniel Robbins或Seemant Kulleen联系。



升级Portage


 在使用我们的Portage树前,升级它是一件很重要的工作。你可以这么做:


#emerge -up system *它会告诉你要升级哪些包


#emerge -u system *开始升级你的所需要的包


现在你的Portage升级到了最新版本,接下去你就可以随心所欲用我们的ebuild系统升级你所需的软件了。



2 emerge命令的介绍



emerge ?pretend


在安装一个软件包前,看看它和其他包的倚赖关系或哪些包会被升级是个不错的主意。你可以使用emerge ?pretend或emerge -p命令来察看。



比如说:# emerge -p xchat


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



Calculating dependencies......... done!


[ebuild U] sys-libs/zlib-1.1.3-r2 to /


[ebuild U] dev-libs/glib-1.2.10 to /


[ebuild N ] media-libs/jpeg-6b-r2 to /


[ebuild N ] x11-base/xfree-4.0.3-r3 to /


[ebuild N ] x11-libs/gtk+-1.2.10-r1 to /


[ebuild N ] media-libs/giflib-4.1.0-r3 to /


[ebuild N ] media-libs/tiff-3.5.6_beta to /


[ebuild N ] media-libs/imlib-1.9.10 to /


[ebuild N ] net-irc/xchat-1.4.3 to /



如上所示,我们试着在一台没有安装X的机器上emerge xchat.emerge ?pretend正确的列出了所必需满足的倚赖关系。并明确的指出了sys-libs/zlib和dev-libs/glib需要升级,emerge xchat时,这些所倚赖的包(当然包括x11-base/xfree会被一同安装。



USE和emerge


以上,我在一个/etc/make.conf文件USE环境变量没有定义gnome的系统上执行了emerge ?pretend命令。就是说GNOME支持是可选项,一般是不打开的。那既然有这个选项,那我们就试着打开它,在执行emerge ?pretend命令看看输出有什么不同。


# emerge -p xchat



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



Calculating dependencies............................ done!


[ebuild N ] media-libs/jpeg-6b-r2 to /


[ebuild N ] gnome-base/libghttp-1.0.9 to /


[ebuild N ] media-libs/audiofile-0.2.1 to /


[ebuild N ] media-sound/esound-0.2.22-r2 to /


[ebuild N ] gnome-base/gnome-env-1.0 to /


[ebuild N ] gnome-base/libxml-1.8.11 to /


[ebuild N ] gnome-base/ORBit-0.5.8 to /


[ebuild N ] gnome-base/oaf-0.6.5 to /


[ebuild U] dev-libs/glib-1.2.10 to /


[ebuild N ] net-libs/libwww-5.3.2-r1 to /


[ebuild N ] media-libs/giflib-4.1.0-r3 to /


[ebuild N ] dev-util/guile-1.4-r3 to /


[ebuild U] sys-libs/zlib-1.1.3-r2 to /


[ebuild N ] x11-base/xfree-4.0.3-r3 to /


[ebuild N ] x11-libs/gtk+-1.2.10-r1 to /


[ebuild N ] media-libs/tiff-3.5.6_beta to /


[ebuild N ] media-libs/imlib-1.9.10 to /


[ebuild N ] gnome-base/gnome-libs-1.2.13 to /


[ebuild N ] gnome-base/glibwww-0.2-r1 to /


[ebuild N ] gnome-base/gdk-pixbuf-0.11.0 to /


[ebuild N ] gnome-base/gconf-1.0.0 to /


[ebuild N ] gnome-base/gnome-vfs-1.0.1 to /


[ebuild N ] gnome-base/control-center-1.4.0.1 to /


[ebuild N ] gnome-base/scrollkeeper-0.2 to /


[ebuild N ] dev-util/xml-i18n-tools-0.8.1 to /


[ebuild N ] gnome-base/libglade-0.16-r1 to /


[ebuild N ] gnome-base/gnome-core-1.4.0.4 to /


[ebuild N ] net-irc/xchat-1.4.3 to /



很清楚地,在USE变量中加入gnome,emerge很快的知道安装xchat要加入对gnome的支持。当然为了GNOME选项的正确编译和运行, GNOME必需被首先安装,emerge会计算GNOME 安装所倚赖的包,并从它的ebuild列表中加入。当USE变量设置错误的时候,emerge命令很可能无法正确执行。那也是我们为什么建议在实际 emerge软件包,特别是比较新的,自己不熟悉的ebuild前先用emerge ?pretend命令察看一下的原因。接下去,你该知道怎么做了吧:)。 一切顺利的话,你可以撇开--pretend选项emerge了。


#emerge xchat



等满足了所有的倚赖关系(如果这种关系存在,不是所有的包都有这种倚赖关系。),接着xchat源码包会被下载(存储到 /usr/portage/distfiles目录),并在一个叫sandbox的零时目录下校验MD5,解压,编译和安装。接着他们被合并到本地文件系统,在/var/db/pkg/net-irc/xchat-1.4.3/CONTENTS目录下建立该包的数据库,包括所有安装的包和它们的 md5sum。



3 升级软件包


一般的我们升级一个软件包所用到的命令包括 emerge --update or emerge -u。



# emerge -u xchat


Portage使用一个被称为“Safe”的umerge命令负责拆卸原来的文件。如果一个文件已经被手动复盖或改写,它会先被从系统中移出,(也许,你已经安装了新版本的软件。)。如此一来,当你merge了新版本的xchat后umerge一个旧的版本,xhchat可执行文件不会被你的系统删除,因为它已有了新的时间信息和不同的md5sum。Safe unmerges 真得很棒,它可以在任何时候确认可用的软件版本。如果你先执行了unmerge命令,那么直到你下载安装了新版本的xchat,它才可被继续使用。



重点:


现在Portage加入了被称为“配置文件保护”的新特性。设计这个新特性的目的是为了防止新装的软件破坏原有的配置文件。一般的,配置文件保护特性默认在/etc和KDE配置目录下打开,将来会加入到更多其他的配置目录中。详情请执行emerge --help config命令察看。

emerge、eix、equery的基本用法

一、 emerge

1. 安装软件:
# emerge package_name

2. 更新软件并更新它直接依赖的其它软件包:
# emerge -u package_name

3. 更新一个软件并更新它依赖的软件包以及它们依赖的所有软件包, 这里大写的D相当于--deep。
# emerge -uD package_name

4. 软件包卸载:
# emerge -C package_name

5. 软件包搜索(只搜索名字):
# emerge -s key_word

6. 软件包查找(搜索内容):
# emerge -S key_word

7. 将本地软件列表与最新的portage树同步:
# emerge --sync && emerge portage

8. 只下载源码:
# emerge -f package_name

9. 更新系统中的所有软件:
# emerge -uD world

10. 查看一个预装包欲装的包:
# emerge -p package_name

11. 查看预装包总共有哪些 USE :
# emerge -pv package_name

二、eix
安装eix: emerge eix

1. 软件包搜索:
# eix key_word

2. 将本地软件列表与最新的portage树同步:
# eix-sync

、equery
equery可查看已安装包的信息,安装此工具: emerge gentoolkit

1. 列出所有已安装包:
# equery list 或简写:
# equery l

2. 查看已安装包装了哪些内容:
# equery files package_name 或简写:
# equery f package_name

3. 查看一个程序foo隶属于哪个包:
# equery belongs foo 或简写:
# equery b foo

4. 查看哪些包依赖于package_name:
# equery depends package_name 或简写:
# equery d package_name

5. 查看已安装包abc用了哪些USE:
# equery uses package_name 或简写:
# equery u package_name

使用dispatch-conf更新config文件

代码:
>>> No outdated packages were found on your system.


 * GNU info directory index is up-to-date.
 * IMPORTANT: 37 config files in /etc need updating.
 * IMPORTANT: 5 config files in /usr/kde/3.2/share/config need updating.
 * Type emerge --help config to learn how to update config files.

象这样的信息相信大家都见过了吧。要update这些config文件,可以用etc-update,不过我这儿想介绍一个类似的工具,dispatch-conf。这是我的配置档/etc/dispatch-conf.conf:


代码:
#
# dispatch-conf.conf
#

# Directory to archive replaced configs
archive-dir=/etc/config-archive

# Use rcs for storing files in the archive directory?
# (yes or no)
use-rcs=yes

# Diff for display
diff="diff -Nau %s %s"

# Pager for diff display
pager="less --no-init --QUIT-AT-EOF"

# Automerge files comprising only CVS interpolations (e.g. Header or Id)
# (yes or no)
replace-cvs=yes

# Automerge files comprising only whitespace and/or comments
# (yes or no)
replace-wscomments=yes

# Automerge files that the user hasn't modified
# (yes or no)
replace-unmodified=yes

如果要使用rcs,首先要:


# emerge rcs


当然还要:


# mkdir /etc/config-archive


用dispatch-conf来更新config文件很简单,运行:


# dispatch-conf


首先dispatch-conf会将要update的config文件在/etc/config-archive里做个备份,然后会一个个显示需要处理 的 文件。你会看到文件里(look-merge)有些行前面有+或-的符号(diff的显示),这代表automerge会将这些行加入或删减 (按空 格键翻页,如果文件太长,按‘q’退出),你会看到类似这样的信息:


代码:
>> (1 of 33) -- /etc/DIR_COLORS
>> q quit, h help, n next, e edit-new, z zap-new, u use-new
   m merge, t toggle-merge, l look-merge:

如果按m进行merge,你会看到/etc/DIR_COLORS和/etc/._cfg0000_DIR_COLORS并列出现,旧的在左边,新的在右边。


然后可以按以下的命令进行merge:


代码:
ed:     Edit then use both versions, each decorated with a header.
eb:     Edit then use both versions.
el:     Edit then use the left version.
er:     Edit then use the right version.
e:      Edit a new version.
l:      Use the left version.
r:      Use the right version.
s:      Silently include common lines.
v:      Verbosely include common lines.
q:      Quit.

完成后,会显示新的将会变更的内容;按’q‘退出,然后按e(edit-new)做最后的编辑。接着就可以按’u‘启用新的文件了(/etc/._cfg0000_DIR_COLORS当然会给删掉了)。


以上是人手作merge的一个例子,实际上很多文件都可以直接按’u‘采用新版,尤其是/etc/init.d/里的那些脚本及一些你从不会去改的文件(以上的/etc/DIR_COLORS便是一例

)。Gentoo特有的东西,象make.conf这样的,最好是人手merge一下;象fstab这样的标准linux配置文件则可以直接zap-new,即删了._cfg0000_fstab然后继续。



PS 以上有些步骤与etc-update雷同,至于用哪个工具,使用者自己决定吧。

USE标记

内容:

2.a. USE标记是什么?

USE标记的指导思想

你在安装gentoo(或者是其他发行版,甚至于其他特定操作系统)的时候,你要依据你工作的环境做出选择。服务器跟工作站的组织结构不同,游戏机跟3D工作站也会不一样。

不单只是选择你想要安装的包时如此,选择某一个包需要的特性时同样如此。如果你不需要OpenGL,为什么还要颇费周折的安装OpenGL并在其他包中加入对OpenGL的支持?如果你不想用KDE,而且软件包没有KDE也能完美运行,为什么还要在编译这些包的时候加入KDE支持?

为了帮用户判断什么需要安装或激活,什么不需要;我们希望用户能用简单的方式设定他们自己的环境。这能促使用户判断他真正需要的东西,并让Portage(我们的包管理系统)做出有用的决定的过程变得简单。

USE标记的设定

我们来具体看看USE标记。每一个标记都是代表对某特定概念的支持和依赖关系信息的关键字。如果你设定了某个USE标记,Portage会明白你选择了支持这个关键字(所代表的概念)。当然这同时也改变了这个包的依赖关系信息。

让我们看一个示例:关键字kde。如果你的USE变量里面没有这个关键字,所有具有可选KDE支持的包在编译时都不会编译KDE支持。所有具有可选KDE依赖关系的包在安装时都不会(做为一个依赖关系而)安装KDE库。如果你设定了kde关键字,这些包在安装时都编译KDE支持,而且KDE库也会(作为一个依赖关系而)被安装。

通过正确设定关键字,你会得到一个根据你的需要而定制的系统。

有哪些USE标记?

USE标记分两类:全局局部USE标记。

  • 全局USE标记适用范围是整个系统,可以被许多包使用。这就是大多数人眼里的USE标记。
  • 局部USE标记只被单个包用来做该包特有的决定。

当前可用的全局USE标记列表可以在网上或者本机的/usr/portage/profiles/use.desc文件里找到。

当前可用的局部USE标记列表可以在本机的/usr/portage/profiles/use.local.desc 文件里找到。

2.b. 使用USE标记

声明永久USE标记

希望您已经意识到了USE标记的重要性,现在我们就让你了解怎样声明USE标记。

就像前面提到的,所有USE标记都声明在USE变量里面。为了让用户能方便地查找和选择USE标记,我们提供了一份默认的USE设定。这些设定是我们觉得Gentoo用户通常都要用到的USE标记的集合。这个默认设置在make.defaults文件──你的profile的一部分──里声明。

你的系统使用的profile是符号链接/etc/make.profile所指向的目录。每个profile叠加于某个更大的profile之上,最终的结果是这些profile的并集。初始profile是base profile(/usr/portage/profiles/base)。

让我们看看2004.3 profile的默认设定:

代码 2.1: 2004.3 profile的累积make.defaults USE标记

(这个例子是base,default-linux,default-linux/x86和
default-linux/x86/2004.3的设定的并集)
USE="x86 oss apm arts avi berkdb bitmap-fonts crypt cups encode fortran f77 foomaticdb gdbm gif gpm gtk imlib jpeg kde gnome libg++ libwww mad mikmod motif mpeg ncurses nls oggvorbis opengl pam pdflib png python qt quicktime readline sdl spell ssl svga tcpd truetype X xml2 xmms xv zlib"

就像你看到的那样,这个变量已经包括了非常多的关键字。要通过修改make.defaults文件里的USE变量来满足你的需要:在升级Portage的时候,这个文件将会被破坏(被覆盖)。

要改变这个默认设置,你需要在USE变量里添加或移去关键字。这是通过在/etc/make.conf里定义USE全局变量来实现的。在这个变量里,添加你需要的额外的USE标记,或者移去你不需要的USE标记。后者可通过在标记前面加个负号(“-”)前缀来实现。

例如,要移除对KDE和QT的支持,并添加对ldap的支持,可以在/etc/make.conf 里声明USE如下:

代码 2.2: /etc/make.conf里关于USE设置的一个例子

USE="-kde -qt3 -qt4 ldap"

为单个包声明USE标记

如果你想要为一个(或者几个)程序而不是系统范围内声明一个USE标记,你需要创建/etc/portage目录(如果没有这个目录的话),然后编辑/etc/portage/package.use文件。通常这是一个文件,不过它也可以是一个目录;请看man portage以获得更多信息。下面的例子假设package.use是一个文件。

比如说,如果你不想全局的启用berkdb支持,但是你想把它应用到mysql,你可以这样:

代码 2.3: /etc/portage/package.use示例

dev-db/mysql berkdb

你当然也可以直接为某一个程序禁用USE标记。比如说,如果你不想要PHP的java支持:

代码 2.4: /etc/portage/package.use第二个示例

dev-php/php -java

声明临时USE标记

有时,你只想暂时改变一个USE设置。你可以仅仅把USE变量声明成一个环境变量,而不必两次修改/etc/make.conf。但是要记住,当你重新emerge或者升级这个程序的时候(不管是单独地还是作为系统升级的一部分),你的修改都会丢失!

下面的例子我们将在安装seamonkey的时候暂时性地从USE设置中移去java标记。

代码 2.5: 将USE作为一个环境变量使用

# USE="-java" emerge seamonkey

优先级

当然,我们需要一个明确的先后次序来决定何处的USE设定优先级较高。你肯定不希望在定义了USE="-java"之后,因为某个有更高优先级的设定而导致java仍然被使用。USE设定的优先级顺序是(由低到高):

  1. make.defaults里面的USE默认设定
  2. 用户在/etc/make.conf里面的USE设定
  3. 用户在/etc/portage/package.use里面的USE设定
  4. 作为环境变量的USE设定

运行emerge --info可以看到Portage识别的最终的USE设定。它会列出Portage使用的所有相关变量(包括USE变量)。

代码 2.6: 运行emerge --info

# emerge --info

在你的整个系统上应用新的USE标记

如果你已经修改了你的USE标记,而且你想用新USE标记更新你的系统,可以使用emerge --newuse选项:

代码 2.7: 重新构建你的系统

# emerge --update --deep --newuse world

然后运行Portage的depclean来移除已经安装到你的旧系统里但是在新USE标记中被废除的条件依赖关系。

警告: 运行emerge --depclean是一项危险的操作,必须小心。请反复检查要删除的包的列表里确定没有你仍然需要的包。下面这个例子里,我们添加了-p选项来depclean──只列出这些包而不删除他们。

代码 2.8: 删除不需要的包

# emerge -p --depclean

depclean完成之后,运行revdep-rebuild来重新构建那些动态链接到由可能已经删除的包提供的公共对象的程序。revdep-rebuildgentoolkit包的一部分,不要忘了先emerge它。

代码 2.9: 运行revdep-rebuild

# revdep-rebuild

这些都完成之后,你的系统就已经应用上了新的USE标记设定。

2.c. 包特有的USE标记

查看可用USE标记

让我们以seamonkey来作例子,看看它接收什么USE标记。我们可以以--pretend--verbose为选项执行emerge来查看:

代码 3.1: 查看使用的USE标记

# emerge --pretend --verbose seamonkey

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

Calculating dependencies ...done!
[ebuild   R   ] www-client/seamonkey-1.0.7  USE="crypt gnome java -debug -ipv6
-ldap -mozcalendar -mozdevelop -moznocompose -moznoirc -moznomail -moznopango
-moznoroaming -postgres -xinerama -xprint" 0 kB

emerge并不是做这件事的唯一工具。事实上,我们有一个专门的包信息工具叫equery,它属于gentoolkit包。所以首先请安装gentoolkit:

代码 3.2: 安装gentoolkit

# emerge gentoolkit

现在以uses为参数执行equery来查看指定包的USE标记。例如:gnumeric包:

代码 3.3: 用equery来查看当前使用的USE标记

# equery --nocolor uses =gnumeric-1.6.3 -a
[ Searching for packages matching =gnumeric-1.6.3... ]
[ Colour Code : set unset ]
[ Legend        : Left column  (U) - USE flags from make.conf  ]
[               : Right column (I) - USE flags packages was installed with ]
[ Found these USE variables for app-office/gnumeric-1.6.3 ]
 U I
- - debug   : Enable extra debug codepaths, like asserts and extra output.
              If you want to get meaningful backtraces see
	      http://www.gentoo.org/proj/en/qa/backtraces.xml.
- - gnome   : Adds GNOME support
+ + python   : Adds support/bindings for the Python language
- - static   : !!do not set this during bootstrap!! Causes binaries to be
                     statically linked instead of dynamically