emerge

虽然我们能够使用autoconf、automake、make等工具实现自动化编译,但这种针对单个软件包的编译系统,在编译多个软件时仍然十分繁琐

假设需要编译emacs和vim,使用 xft字体、图形界面支持,并去掉调试符号,需要分别作如下配置

  1. emacs
  2. ./configure --prefix=/usr/local/ \
  3. --no-debug \
  4. --with-xft --with-x-toolkit=gtk \
  5. --with-freetype
  6. vim
  7. ./configure --prefix=/usr/local/ \
  8. --no-debug \
  9. --with-xft --with-x-toolkit=gtk

这就像点菜时,你必须告诉厨师:鱼香肉丝(多放辣椒、不放蒜)、宫保鸡丁(多放辣椒、不放蒜)、麻婆豆腐(多放辣椒、不放蒜)……

实际上,大多数人这样点菜:鱼香肉丝、宫保鸡丁、麻婆豆腐……多放辣椒、不放蒜

emerge就是这样一种点菜方式,它是gentoo的包管理系统,提供了更为现代化的编译方式

可以通过指定USE标记xftgtk-debug来确定所有软件的编译方式

设置 USE标记

以下方法按优先级由低到高排列:

/etc/make.profile/目录是一个符号链接,里面包含一些make.defaults文件,放置开发者设置的 USE标记[31]:

  1. /usr/portage/profile/base/make.defaults
  2. /usr/portage/profile/default-linux/make.defaults
  3. /usr/portage/profile/default-linux/x86/make.defaults
  4. /usr/portage/profile/default-linux/x86/2008.0/make.defaults

/etc/make.conf文件中声明永久 USE标记(推荐)

  1. USE="nptl nptlonly nls cjk php mysql -kde -qt3 -qt4"
  • -的 USE标记,表示排除

/etc/portage/package.use文件中为单个包声明 USE标记

  1. app-editors/emacs-cvs xft
  2. www-servers/lighttpd fastcgi
  3. dev-lang/php mysqli cgi gd ctype pcre session unicode pic posix
  4. dev-db/phpmyadmin vhosts
  5. app-shells/zsh doc
  6. net-ftp/pure-ftpd -ldap mysql pam ssl vchroot

使用环境变量声明临时 USE标记

  1. USE="-java"
  2. emerge seamonkey

查看使用的 USE标记:

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

编译选项

/etc/make.conf

  1. CFLAGS="-O2 -march=i686 -pipe"
  2. CXXFLAGS="-O2 -march=i686 -pipe"
  3. CHOST="i686-pc-linux-gnu"
  4. MAKEOPTS="-j2"
  5. FEATURES="parallel-fetch ccache"
  6. CCACHE_DIR="/var/tmp/ccache"
  7. CCACHE_SIZE="2G"
  8. ACCEPT_KEYWORDS="x86"
  9. USE="nptl nptlonly nls cjk php mysql"
  10. FETCHCOMMAND="/usr/bin/axel -a -n4 \${URI} -o \${DISTDIR}"
  11. RESUMECOMMAND="/usr/bin/axel -a -n4 \${URI} -o \${DISTDIR}"

1

针对C语言的优化选项,-march=设置目标架构

2

针对C++语言的优化选项

3

进行编译工作的机器架构

4

编译选项

5

emerge 特性。并行下载、使用 ccache 缓冲编译结果

6

ccache 缓存目录

7

ccache 缓存大小

8

通过关键字选择分支。x86表示 x86 架构的稳定分支,~x86表示 x86 架构的不稳定分支

9

USE标记

10

使用axel加速下载

gentoo支持多种架构:x86、 sparc、 amd64、 ppc、 ppc64、 alpha、 hppa、 mips、 ia64、 arm,我们使用的 PC 多为 x86 架构

假设你主要使用 x86 稳定分支,但少数软件要使用最新版本,在/etc/portage/package.keywords文件中为单个包设置关键字

  1. app-editors/emacs-cvs ~x86
  2. x11-misc/emacs-desktop ~x86
  3. app-i18n/fcitx ~x86
  4. app-editors/vim x86
  5. app-editors/vim-core x86
  6. media-video/mplayer ~x86
  7. media-libs/win32codecs ~x86
  8. app-i18n/man-pages-zh_CN ~x86

微调

/etc/portage/目标下包含一些文件,可以在软件包级别上进行调节。前面已经介绍了package.usepackage.keywords

package.keywords

还未被确认适合你的系统或架构,但是你希望能安装的软件包

package.use

特定软件包而不是整个系统使用的 USE标记

package.provided

屏蔽的软件包(需要指明版本号)

package.mask

永远不希望 Portage 安装的软件包。

package.unmask

被 Gentoo 开发者屏蔽的软件包,但是你希望能安装的软件包。

软件包可能由于以下原因被屏蔽

~架构 keyword意味着这个软件没有经过充分的测试,不能进入稳定分支,请等待一段时间后在尝试使用它
-架构 keyword 或 -* keyword意味着这个软件不能工作在您机器的体系结构中
missing keyword意味着这个软件还没有在您机器的体系结构中进行过测试
package.mask意味着这个软件被认为是损坏的,不稳定的或者有更严重的问题,它被故意标识为“不应使用”
profile意味着这个软件不适用于您的 profile。安装这样的应用软件可能会破坏您的系统,或者只是不能与您使用的 profile 相兼容

例如:

  1. gnome-base/gnome-2.8.0_pre1 (masked by: ~x86 keyword)
  2. lm-sensors/lm-sensors-2.8.7 (masked by: -sparc keyword)
  3. sys-libs/glibc-2.3.4.20040808 (masked by: -* keyword)
  4. dev-util/cvsd-1.0.2 (masked by: missing keyword)
  5. games-fps/unreal-tournament-451 (masked by: package.mask)
  6. sys-libs/glibc-2.3.2-r11 (masked by: profile)

使用 emerge

[注意]注意
本部分内容来源于gentoo 中文手册

查找.

查找名字包含 pdf 的软件包

  1. emerge --search pdf

查找与 pdf 相关的软件包

  1. emerge --searchdesc pdf
  2. emerge -S pdf

查看软件拥有的 USE标记

  1. emerge -vp 软件包名称

管理.

安装软件包

  1. emerge 软件包名称

模拟安装软件包

  1. emerge --pretend 软件包名称

下载软件包的源代码包

  1. emerge --fetchonly 软件包名称

从系统中删除软件包

  1. emerge --unmerge 软件包名称

更新.

更新系统

  1. emerge --update --ask world
  2. emerge -ua world

更新整个系统

  1. emerge --update --deep world
  2. emerge -uD world

使用新的 USE标记 重新构建系统

  1. emerge --update --deep --newuse world
  2. emerge -uDN world

移除孤立依赖的软件包

  1. emerge --update --deep --newuse world
  2. emerge --depclean
  3. revdep-rebuild

1

重新构建系统

2

清除孤立依赖包

3

重新构建依赖关系

revdep-rebuild工具由gentoolkit包提供;使用前别忘了首先 emerge 它:

  1. emerge gentoolkit

[31] 在升级 Portage 的时候,这些文件将会被覆盖,请不要在这里设置