gentoo Portage使用

Portage文件

  配置指令

    Portage使用/usr/share/portage/config/make.globals里的默认配置,所有的Portage配置通过变量处理。

    由于在不同的cpu架构中,各个portage的配置的指令是不一样的。portage有很多默认的配置文件,作为system profile的一部分。该profile 符号链接到/etc/portage/make.profile。Portage的关于profile 和所有profiles上级的配置都定义在make.defaults文件中。

    当想要修改一个变量的时候,不要去修改 /usr/share/portage/config/make.globals 或make.defaults.使用/etc/portage/make.conf,会覆盖上面的文件。

    也可以定义一个环境变量作为portage的配置,不过我们不建议那样做。

  Profile-specific信息

    我们已经遇到了/etc/portage/make.profile文件夹。事实上着并不完全是一个文件夹,他符号链接到profile。通过在/usr/portage/profiles/ 里的默认的一个profiles ,用户可以创建在任何地方的profiles 文件并符号链接过去。一个profile 包含提供给Portage特定的体系架构信息,如一个软件包的列表属于相应的profile的系统,一个软件包的列表也不为相应的profile工作等。

  用户特定的配置

    当portage关于软件安装的行为需要改变的时候,在/etc/portage/正确设置的文件也需要被改变。强烈推荐使用 /etc/portage/里的文件,不推荐通过改变环境变量去改变行为。

    使用/etc/portage/ 用户可以创建下列文件:

    • package.mask 列出来Portage 不该安装的包
    • package.unmask 列出了Portage可以安装的包
    • package.accept_keywords 列出了Portage可以安装的包,即使这个包不适用该系统或架构。
    • package.use 列出了针对某个包使用的,而不针对全局的USE flags。

    这些没必要非是文件,也可能是文件夹,包含了每个包的文件。更多的信息可以输入man portage查询

  改变Portage文件和目录的位置

    上面提到的文件不能保存在其他的地方,Portage会到指定的地方去查找这些配置文件。无论如何,Portage为了各种各样的目的,使用各种各样的文件的位置。

    所有的目的都有总所周知的默认位置,但是可以通过修改/etc/portage/make.conf来自己定制。下面将会介绍怎么做。

    本文并不是唯一的参照,可以通过以下命令还获取帮助:

    user $man portage

    user $man make.conf

存储文件

  Gentoo repository

    默认的repository位置是/usr/portage。他定义在/usr/share/portage/config/repos.conf。如果需要修改这默认的,复制该文件到/etc/portage/repos.conf/gentoo.conf 然后改变location 的值,当通过修改这个值改变了默认位置,不要忘了修改/etc/portage/make.profile的符号链接。

    当修改了之后,由于他们不会注意location的改变,所以建议修改/etc/portage/make.conf里的PKGDIRDISTDIR RPMDIR变量,这是因为portage如何处理变量的原因造成的。

  预先构建的二进制文件( prebuilt binaries)

    尽管Portage默认不使用 prebuilt binaries。但他有广泛的支持。当命令Portage使用prebuilt packages工作,它会在/usr/portage/packages里找prebuilt binaries,该位置定义在PKGDIR 变量中。

  源代码(Source code)

    应用程序的源代码默认存储在 /usr/portage/distfiles中,该位置定义在DISTDIR 中。

  Portage数据库(Portage database)

    Portage保存系统的状态(哪些包被安装了,哪些文件属于哪个包的......)存储在/var/db/pkg中。

    Note:不要手动修改这些文件,他会让Portage变得无所适从。

  Portage缓存

    Portage的缓存(修改时间,virtuals,dependency tree信息等)被存储在/var/cache/edb。该位置确实是一个缓存:如果没有运行任何Portage关联的程序时,用户可以清理它。

构建软件

  临时的Portage文件

    Portage 软件包编译时使用的临时空间默认的是/var/tmp/中,它有变量PORTAGE_TMPDIR 定义。

     当修改PORTAGE_TMPDIR 变量时,由于修改之后可能没通知到系统,所以同样推荐修改BUILD_PREFIX变量。这是因为portage如何处理变量的原因造成的。

  编译目录

    Portage为每个包创建了特定的编译目录,定义在 /var/tmp/portage/中,该目录由变量BUILD_PREFIX 定义的。

  Live文件系统 位置

    默认情况下,Portage将所有的文件安装到当前文件系统(/)里,但是可以通过修改ROOT 环境变量来改变。在你创建新的编译镜像时很有用。

日志功能

  Ebuild日志

    Portage可以为每个ebuild创建日志文件,只有在PORT_LOGDIR变量设置的位置为Portage可写的时候,默认情况下,该变量时没有被定义的。如果PORT_LOGDIR 变量没有被定义,那么日志系统中就不会由任何编译的日志信息存在。你可能会收到新的 elog支持的日志。

    如果PORT_LOGDIR 没有被定义,elog 在使用中。然后由elog 保存的编译日志和其他的一些日志就可以保存了。解释如下:

    Portage对elog的使用提供了细粒度的控制:

      PORTAGE_ELOG_CLASSES:这让用户可以决定什么样的日志可以被记录下来。可以用空格分隔info, warn, error, log, 和 qa这些组合

        info:记录由ebuild打印的关于einfo的信息

        warn:记录由ebuild打印的关于ewarn的信息

        error:记录由ebuild打印的关于eerror的信息

        log:记录一些在许多ebuild找到的elog的信息

        qa:记录由ebuild打印的关于QA Notice的信息

      PORTAGE_ELOG_SYSTEM:这个可以选择用什么样的模块去处理log信息,如果为空,日志不可以记录。用空格分隔的save, custom, syslog, mail, save_summary, 和mail_summary可以使用。使用elog中必须启用至少一个模块。

        save:它会为每个包保存一个日志,放在$PORT_LOGDIR/elog中。如果PORT_LOGDIR 未被定义的话,会放在

        custom:把所有的信息发送到用户自定义的命令,在 $PORTAGE_ELOG_COMMAND里。后面会讨论

        syslog:把所有的消息发送到已安装的系统日志中。

        mail:发送所有的信息到用户自定义的邮件服务中,定义在$PORTAGE_ELOG_MAILURI。稍后会讨论,该elog 服务特性需要版本>=portage-2.1.1.

        save_summary:跟save功能类似,但它合并了每个信息到$PORT_LOGDIR/elog/summary.log里。如果$PORT_LOGDIR未定义的话,那就放到 /var/log/portage/elog/summary.log里。

        mail_summary:跟mail功能类似,但当emerge 退出时,它会发送所有的信息到一个单独的邮箱中。

      PORTAGE_ELOG_COMMAND:这只在定制的模块被启用的时候,该特性才有用。用户可以指定一条命令去处理log消息。注意,该命令可以被两个变量使用:${PACKAGE} 是包名和版本,${LOGFILE}是logfile的绝对路径。如:

PORTAGE_ELOG_COMMAND="/path/to/logger -p '${PACKAGE}' -f '${LOGFILE}'"
Example PORTAGE_ELOG_COMMAND definition

      PORTAGE_ELOG_MAILURI:它包含了一些邮件模块的设置信息,如:address,user,password,mail server和port number。默认设置是root@localhost localhost。下面是个SMTP 服务的例子,在个特定的端口中,需要username 和password-based 验证(默认的端口是25)

PORTAGE_ELOG_MAILURI="user@some.domain username:password@smtp.some.domain:995"
Example PORTAGE_ELOG_MAILURI definition

      PORTAGE_ELOG_MAILFROM:允许用户设置log 邮件的”from“地址(发件人)。默认为Portage,如果没有被设置的话。

      PORTAGE_ELOG_MAILSUBJECT:允许用户创建日志邮件的主题,它可以利用两个变量,${PACKAGE}表示包名和版本,${HOST}表示Portage运行的完整网域名称。例如:

PORTAGE_ELOG_MAILSUBJECT="package ${PACKAGE} was merged on ${HOST} with some messages"
Example PORTAGE_ELOG_MAILSUBJECT definition

Portage配置

  就像上面提到的,Portage 通过许多定义在 /etc/portage/make.conf的变量或 /etc/portage/的子文件夹来配置的。请参考 make.conf 和portage man pages查找更多信息。

  user $man make.conf

  user $man portage

Build-specific选项

  配置和编译器选项

    当Portage 构建应用程序,它会传送一些参数去编译和配置脚本:

      CFLAGS和CXXFLAGS

        为c和c++定义所需的编译flags

      CHOST

        为应用程序配置脚本定义构造主机的信息

      MAKEOPTS

        传送到make 命令,通常发生在编译期间,定义了大量的并行特性

      USE 也是经常用在编译期间和配置期间,已经在之前的章节中详细解释。

  Merge选项

    当Portage merge了某一个软件的新版本,它会从系统中移除旧的废弃的文件。在unmerge之前Portage会给用户5秒的延迟,这5秒是定义在CLEAN_DELAY 变量里的。

    可以告诉Portage每次emerge的时候都带一个具体的选项参数,通过设置EMERGE_DEFAULT_OPTS。由很多经常用到的如--ask--verbose--tree,等等。

保护配置文件

  Portage保护位置

    如果文件没有保存在保护文件夹中,那么portage的软件的文件可能会被新的版本的软件文件覆盖掉。该保护区域定义在CONFIG_PROTECT 变量中,一般配置文件的位置。空格分隔目录清单。

    当软件的文件要被覆盖到安全文件的时候,会有警告提示用户。

    查找CONFIG_PROTECT 的设置的命令如下:

    user $emerge --info | grep 'CONFIG_PROTECT='

  排除的目录

    用户可以用CONFIG_PROTECT_MASK 变量来定义在保护目录下的子文件夹中不受保护的文件夹。

下载选项参数

  Server 的位置

    当请求的信息或数据在系统中是不可用的时候,Portage 会从Internet中检索它。服务器位置的各种信息和数据通道是由下面的变量定义的:

    GENTOO_MIRRORS:定义了一个包含源代码(distfile) 服务位置的列表。

    PORTAGE_BINHOST:定义了一个特定服务的位置包含预先构建的包系统。

    第三个设置包括rsync 服务的位置,该服务用来给用户更新Gentoo的repository。它定义在/etc/portage/repos.conf文件里(如果被定义成文件夹的话,就会在这个文件夹里)

      sync-type:定义了server的类型,默认为rsync

      sync-uri:定义了portage用来更新gentoo repository的特殊的服务

    GENTOO_MIRRORS、 sync-type, 和 sync-uri变量可以由mirrorselect 程序自动设置,当然,首先得先安装 app-portage/mirrorselect 。安装完成之后可以查看帮助

    root #mirrorselect --help

    如果环境需要使用代理服务器, http_proxyftp_proxy, 和RSYNC_PROXY 需要被设置。

  获取的命令

    当portage需要获取源代码的时候,它默认的使用wget 方式,它可以由变量FETCHCOMMAND 来改变。

    portage可以继续下载部分的源代码,默认使用wget,可以通过RESUMECOMMAND 变量改变。

    确认FETCHCOMMAND 和RESUMECOMMAND 在正确的位置保存源代码。在这两个变量里, ${URI} 和 ${DISTDIR} 可以被使用,第一个是源代码的地址,还有各自下载需要的位置。

    也可以定义特定的协议在FETCHCOMMAND_HTTP,FETCHCOMMAND_FTP,RESUMECOMMAND_HTTP和RESUMECOMMAND_FTP等变量中。

  Rsync设置

    不可能修改由Portage用来更新Gentoo repository的rsync 命令。但可以设置一些相关rsync命令的变量:

      PORTAGE_RSYNC_OPTS:设置一系列在sync中使用的默认变量,空格分开。如果你不知道你在干什么,那么不应该去修改它。注意,某些绝对必需的选择总是会使用,即使PORTAGE_RSYNC_OPTS 是空的。

      PORTAGE_RSYNC_EXTRA_OPTS:当syncing的时候附加一些选项,每个选项空格分隔:

        --timeout=<number> :rsync 闲置多少秒后链接超时,默认为180 。

        --exclude-from=/etc/portage/rsync_excludes:它指向一个文件,文件列出了rsync更新过程中需要忽视的包或者类型。在该例子中,指向/etc/portage/rsync_excludes。

        --quiet:减少屏幕上的输出

        --verbose:打印出完整的文件列表

        --progress:为每个文件显示进度

      PORTAGE_RSYNC_RETRIES:定义了rsync 重连服务的次数,默认为3.

      更多参阅命令man rsync.

Gentoo的配置

  分支选择

    通过变量ACCEPT_KEYWORDS可以改变默认的分支,它定义各种架构稳定的分支 

  Portage特性

    FEATURES 变量可以启用某一特定的portage的特性

Portage行为

  资源管理

    使用PORTAGE_NICENESS 变量,用户可以增加或减少portage 运行的 nice value。PORTAGE_NICENESS 的值被添加到默认的nice value。更多关于nice values,请参考:

    user $man nice

  输出特性

    NOCOLOR 变量,默认为false。定义了portage是否禁用彩色输出。

使用其中一个分支

  稳定的分支

    ACCEPT_KEYWORDS定义了各式各样的软件分支,默认为属于该系统架构的稳定分支,如amd64。建议坚持稳定的分支。如果稳定不是那么重要,那么可以使用测试分支。

  测试分支

    为了使用更多的最近的软件,用户可以切换到测试分支,在具体的架构前面加上~就可以了。测试分支可能会有bug。

ACCEPT_KEYWORDS="~amd64"
/etc/portage/make.confUsing the testing branch

混合测试和稳定分支

  package.accept_keywords

    可以让特殊的包拥有测试版本,而剩下的包都是稳定分支的版本。要这样做,得在/etc/portage/package.accept_keywords里增加包的类型名称。该名称也可以是一个目录,目录下的所有包都可以设定。

app-office/gnumeric
/etc/portage/package.accept_keywords Use the testing branch for just the gnumeric application

  测试特定版本

    想要一个特定版本的软件包,不想Portage 使用该包后面的版本。将版本信息加到package.accept_keywords的位置里。对于版本号,可以使用=,<=, <, > 或 >= 

=app-office/gnumeric-1.2.13
/etc/portage/package.accept_keywords Allow specific version selection

Masked的包

  package.unmask

    mask包的信息一般存储在 /usr/portage/profiles/的package.mask中,如果你想unmask掉,到 /etc/portage/package.unmask里去修改,版本指定符号=,<=, <, > 或 >= 。一般不建议这样做。

=net-mail/hotwayd-0.8
/etc/portage/package.unmask Unmasking a particular package/version

  package.mask

    跟unmask一致,只是目的是用来mask包。mask之后portage默认就不会去安装了。

>sys-kernel/gentoo-sources-2.6.8.1
/etc/portage/package.mask Mask gentoo-sources with a version greater than 2.6.8.1

dispatch-conf

  dispath-conf是一个合成由portage产生的._cfg0000_<name> 文件. ._cfg0000_<name> 文件的合并工具,当它要复写受CONFIG_PROTECT变量指定的保护的目录的时候。使用dispatch-conf,用户可以更新他们的配置文件以跟踪最新版本软件配置的变化。dispatch-conf 存储了许多不同的配置文件的补丁或RCS修正系统。这意味着,当更新配置文件的时候犯了某个错误,管理员可以随时还原以前的版本文件。

  当使用 dispatch-conf时,用户可以按原样要求保持配置文件,使用新的配置,修改当前的配置文件,或者交互的修改他们。dispatch-conf也拥有许多很好的附加特性。

    自动合并配置文件更新,只更新 更新的部分

    自动配置文件合并

  修改 /etc/dispatch-conf.conf,创建archive-dir变量引用的目录,接着执行dispatch-conf:

  root #dispatch-conf

  当运行后,所有配置文件的改变将会被重新查看,按u表示用新的配置文件,w删除新的配置,当所有的配置审查过后,或者按q,将会退出。

  更多查阅user $man dispatch-conf

etc-update

  etc-update是另一个合并配置文件的工具,并不像dispath-conf那样简单易用,也不如它功能强大。但它可以自动合并一些简单的小的变化。它会对所有的配置文件更新,所以慎重使用。

  root #etc-update

quickpkg

  使用quickpkg可以创建已经合并了的包的档案,可以使用这些档案作为预先构建的包,运行quickpkg很简单:只要把包名称添加到档案。如归档curl, orage, 和procps

  root #quickpkg curl orage procps

  预先构建的包将存储在 $PKGDIR (/usr/portage/packages/ by default)中,这些包在$PKGDIR/CATEGORY里。

使用Gentoo仓库的一个子集

  排除包和包的类别

    可以有选择地更新某些类别/包和忽视其他类别/ 包,在 emerge --sync这一步可以通过在rsync排除类别/包。

    定义/etc/portage/make.conf中的PORTAGE_RSYNC_EXTRA_OPTS 变量,可以定义排除的包:

PORTAGE_RSYNC_EXTRA_OPTS="--exclude-from=/etc/portage/rsync_excludes"
/etc/portage/make.conf Defining the exclude file
games-*/*
/etc/portage/rsync_excludes Excluding all games

    注意这可能导致依赖问题。如果依赖被排除的包的话。

添加非官方ebuild

  定义一个自定义存储库

    可以定义Portage使用非官方库,创建一个新的目录(如 /usr/local/portage),使用第三方存储ebuild。使用相同的目录结构作为官方Gentoo库!

    root #mkdir -p /usr/local/portage/{metadata,profiles}
    root #chown -R portage:portage /usr/local/portage
    接下来,选择一个合理的库的名称。下一个示例使用“localrepo”作为名称:
    root #echo 'localrepo' > /usr/local/portage/profiles/repo_name
    然后告诉Portage,该仓库是主要的仓库。另一个repository不应该被自动同步。(不是rsync服务器的支持,git镜像或者其他的仓库源)
masters = gentoo
auto-sync = false
/usr/local/portage/metadata/layout.conf

    在repository 配置文件中启用本地系统的仓库,在/etc/portage/repos.conf文件中。下面需要提醒Portage 哪里可以找到本地的仓库。

[localrepo]
location = /usr/local/portage
/etc/portage/repos.conf/localrepo.conf

  使用一些覆盖来工作

    对于一些需要覆盖工作的超级用户,需要下载测试的包,或者从其他的源下载一些包, app-portage/layman包带来了layman工具,可以帮助用户覆盖仓库到最新的日期。

    首先安装和配置layman ,详细参考 Overlays User Guide,用 layman -a.增加渴望的仓库。

    如,启用hardened-development的覆盖

    root #layman -a hardened-development

    不管在layman中使用了多少的可用的仓库,所有的都可以用下面的方法更新:

    root #layman -S

    更多的信息可查阅 man layman

 

没有Portage管理的软件

  用自我管理的软件去使用Portage

    有时用户需要单独的自己安装、配置、管理软件,而不是Portage自动处理。即使Portage 已经提供了软件。已知的例子是内核源码和 nvidia 驱动。也可以告诉Portage在系统中,某个软件已被手动的安装了(当计算依赖的时候,把这个软件可以加进去),该过程叫做injecting ,Portage也支持,在/etc/portage/profile/package.provided文件中。

    例如:告诉Portage gentoo-sources-2.6.11.6已经被手动的安装了,

sys-kernel/gentoo-sources-2.6.11.6
/etc/portage/profile/package.provided Marking gentoo-sources-2.6.11.6 as manually installed

介绍

  对于大多数用户来说,从linux操作中获取的信息已经足够了。但是Portage做的更多.因为一些更激进的开发者或特定的一些场景,许多它的特性需要了解记录。

  当然,更加的灵活带来的是巨大的可能情况的清单,不可能把他们所有都记录下来。相应的,我们聚焦一些更平常的问题。大多数情况下,如果用户不能很容易的从手册中找到大多数的特性,Portage提供了

  user $man portage
  user $man make.conf
  最后,知道这些高级功能,如果不正确使用,会使调试和故障诊断非常困难。确认打开错误提醒。
 
Per-package环境变量
  使用 /etc/portage/env

    默认的,构建包需要用到在/etc/portage/make.conf定义的环境变量。如CFLAGS、MAKEOPTS 或者更多,在一些情况下,可能需要为了某个特定的包定义某个特定的变量。为了这样做,Portage支持了/etc/portage/env和/etc/portage/package.env。

     /etc/portage/package.env文件包含了一组偏离了环境变量的用途,但是需要定义标识符以便告诉Portage哪些变化了需要被编译的包,标识符名称是自由格式。Portage会去/etc/portage/env/IDENTIFIER里寻找变量。

  例子:特定的包使用debugging 

    我们为 media-video/mplayer包启用debugging。

    首先,在 /etc/portage/env/debug-cflags定义debugging变量,标识是随便取的,但是要易懂。

CFLAGS="-O2 -ggdb -pipe"
FEATURES="${FEATURES} nostrip"
/etc/portage/env/debug-cflags Specific variables for debugging

    下一步,我们指定 media-video/mplayer包去使用它

media-video/mplayer debug-cflags
/etc/portage/package.env Using debug-cflags for the mplayer package

在emerge过程中出现Hooking 

  使用/etc/portage/bashrc以及附属文件

    当Portage使用ebuild工作,它使用一个bash环境来调用各种构建功能 (如src_preparesrc_configurepkg_postinst, 等.)但Portage也允许用户设置一个特定的bash环境。

    使用一个特定的bash环境的优势是,在emerge处理过程的每一步中,它都可以使用hook(钩子)功能,它可以通过每一次的emerge(通过/etc/portage/bashrc) 或预构建包环境(通过/etc/portage/env)完成。

    在处理过程中使用hook,bash 环境可以监听EBUILD_PHASE,CATEGORY 变量。基于这些变量的值,可以执行额外的步骤/功能。

  例如:更新数据库文件

    在这个例子里,我们将使用/etc/portage/bashrc去执行数据应用程序文件去确保他们的数据库已经更新到系统最新的日期了,在这个例子中,该程序叫做aide(一个入侵检测工具)和updatedb (和mlocate一起使用),但这些都是例子,不要把这个当成AIDE 的指导手册。

    为了在例子中使用/etc/portage/bashrc,我们需要在postrm(删除文件之后)和postinst (安装文件之后)这些方法中添加一个hook,因为文件系统上的文件已经改变了。

if [ "${EBUILD_PHASE}" == "postinst" ] || [ "${EBUILD_PHASE}" == "postrm" ];
then
  echo ":: Calling aide --update to update its database";
  aide --update;
  echo ":: Calling updatedb to update its database";
  updatedb;
fi
/etc/portage/bashrc Hooking into the postinst and postrm phases

 --sync之后执行任务

  使用/etc/portage/postsync.d位置

    目前位置我们已经讨论了在ebuild过程中,使用hook。然而,Portage同样拥有另一个重要的函数:更新Gentoo的仓库。为了在更新仓库之后运行任务,放入一个脚本到/etc/portage/postsync.d里,并确认它被标记为可执行。

  示例:运行eix-update

    如果eix-sync不使用在更新树操作上,它仍然可能出现在emerge --sync(或emerge-webrsync)运行后去更新eix 数据库,通过放入符号链接到/usr/bin/eix和/etc/portage/postsync.d/eix-update

    root #ln -s /usr/bin/eix /etc/portage/postsync.d/eix-update

    NOTE:如果一个不同的名字会被选中,那么它需要一个脚本,该脚本调用/usr/bin/eix-update代替。eix二进制看着它如何被称为找出哪些函数执行。如果创建一个符号链接将指向eix但还不叫做eix-update,它不会正确地运行。

    

重写配置文件设置

  使用/etc/portage/profile

    默认情况下,gentoo使用的设置包含了一个指向 /etc/portage/make.profile(符号链接到正确的配置文件夹)的配置,这些配置文件定义具体设置以及继承自其他配置文件的设置(通过他们的父文件)。

    通过使用 /etc/portage/profile,用户可以覆盖配置文件设置,如包的设置(包被认为是系统设置的一部分),强制使用flags 等。

  例子:nfs-utils添加到系统设置

    当使用一个基于nfs文件系统,作为一个重要的文件系统,需要被标记 net-fs/nfs-utils 为一个系统包,如果管理员想要删除,Portage会发出严重警告。

    要做好这一点,我们将包添加到/etc/portage/profile/packages,前缀

*net-fs/nfs-utils
/etc/portage/profile/packages Marking nfs-utils as a system package

应用非标准补丁

  使用epatch_user

    为了用类似的方式管理多个ebuild,ebuild 开发者使用了eclasses 定义常用的功能。eutils.eclass是这些eclasses 其中之一,提供了很有趣的epatch_user功能。

    epatch_user 函数应用在/etc/portage/patches/<category>/<package>[-<version>[-<revision>]]中的源代码补丁,任何目录中第一个找到的为准。遗憾的是,并不是所有的ebuild自动调用这个函数,所以把补丁放到该位置并不总是能有用。

    幸运的是,如上所示,用户可以调用这个函数的hook,例如:准备阶段。可以根据需要多次调用的函数,它只会应用补丁。

  示例:将补丁应用到Firefox

     www-client/firefox包是许多在ebuild内部调用epatch_user函数的众多包之一,所以不需要覆盖任何特定的东西。

    如果由于某种原因(例如,因为开发人员提供了一个补丁,并要求检查修复bug报告),修补Firefox是必要的。需要的就是把补丁放在/etc/portage/patches/www-client/firefox(最好使用完整的名称和版本,补丁不会干扰后面的版本)然后重新编译Firefox。

    至此gentoo wiki上的主要文章都翻译完了,想想刚开始的翻译的时候,对Gentoo一窍不通,到后来的手动安装,配置USE,升级内核,软件系统,然后解决了若干bug。到现在开始已经用于自己的生产环境。想想还是很有趣的一段旅程。我已经将gentoo锁定为自己的主要的linux战场。所以我会一如既往的坚持下去。共勉之。

原文地址:https://www.cnblogs.com/Garin/p/6410679.html