本文译者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布。
本文译者十分愿意与他人分享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有的作品集:
由于译者水平有限,因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好),请来信指出,任何提高译文质量的建议我都将虚心接纳。
EMERGE(1) Portage EMERGE(1) 名称 emerge - Portage 系统的命令行界面 语法 emerge [选项] [动作] [ebuild | tbz2file | file | @set | atom] ... emerge < --sync | --metadata | --version > emerge --info [atom] emerge --search somestring emerge --resume [ --pretend | --ask | --skipfirst ] emerge --help 描述 emerge是Portage系统的命令行接口,主要用于软件包的安装、升级、卸载。 emerge可以自动处理依赖关系、更新portage树、更新已安装的软件包。 emerge既可以处理源代码包也可以处理二进制包,还可以将编译好的二进制文件打包,以利于再次分发。 EBUILD, TBZ2, SET, ATOM emerge主要用于安装软件包。你可以使用下列几种安装方式之一: ebuild "ebuild"必须是一个有效的Portage包目录名(可以不带类别与版本信息),比如:"portage"或"python", 当然也可以带上类别与版本信息,例如:"sys-apps/portage"或"=python-2.2.1-r2"。 尾斜杠将被忽略,所以可以使用shell的文件名自动完成功能。 "ebuild"还可以是一个实际的文件名,例如:/usr/portage/app-admin/python/python-2.2.1-r2.ebuild 警告:对"emerge /path/to/ebuild"实现目前尚有缺陷,所以切勿使用! tbz2file "tbz2file"必须是一个由下列命令之一创建的 .tbz2 文件: ebuild <package>-<version>.ebuild package emerge --buildpkg [category/]<package> quickpkg /var/db/pkg/<category>/<package> file "file"必须是一个被某个/某些软件包安装了的文件或目录。如果未使用绝对路径,则必须明确使用"./"或"../"开头。 如果该目录被多个软件包安装,那么这些软件包都将被选中。 可以使用portageq(1)命令查询文件或目录属于哪个/哪些软件包。 set "set"是一组特定软件包集合的代称。目前有三个set总是可用:selected, system, world 。 selected 包含用户手动安装的软件包集合(/var/lib/portage/world)及其依赖的软件包集合(/var/lib/portage/world_sets)。 system 表示系统正常运行所必须的一组软件包(基本系统/最小系统)。 world 表示 selected 与 system 的合集[参见尾部的"文件"小节]。 其他可用的set取决于系统的配置,默认的配置位于 /usr/share/portage/config/sets 目录中。 用户自定义的set文件可以存放在 /etc/portage/sets/ 目录中(参见 portage(5))。 提示:set经常和 --update 动作一起使用。若要用于安装动作,则必须明确使用"@"作为前缀,以示区别。 使用 --list-sets 动作可以列出所有可用的set名称。 atom "atom"定义了你想要安装的软件包的版本范围。atom 的详细语法请参见portage(5)手册页。例如: >=dev-lang/python-2.2.1-r2 表示大于等于 2.2.1-r2 的Python最新可用版本; <dev-lang/python-2.0 表示小于 2.0 的Python最新可用版本; 需要注意的是,很多shell里的'<'与'='之类的符号需要转义,所以你应该在atom两边使用引号以避免麻烦。 你还可以通过在结尾附加一个冒号(:)来指定 SLOT ,例如:x11-libs/qt:3 动作 无动作 如果没有指定任何动作,那么就表示将软件包的最新可用版本合并(安装或升级)到系统中,并满足相应的依赖关系。 参数可以是: atoms, sets, files, ebuilds, tbz2s 。[注意]对于 tbz2 需要同时使用 --usepkg 选项。 Note that you need to use the --usepkg option if you want to install a tbz2. 被合并的软件包将被添加到world文件中(/var/lib/portage/world),也就意味着在未来升级的时候将会被处理。 --check-news 扫描软件仓库中所有未读的 GLEP 42 新闻,并显示出总条数。 详见: http://www.gentoo.org/proj/en/glep/glep-0042.html --clean 通过检查已安装的软件包和移除旧的软件包来清理系统。具体动作如下: 检查每一个已安装的软件包,并通过slot分隔已安装的版本; 然后仅保留每个slot内最后安装的版本,同时清除所有先前安装的版本。而那些没有被slot分隔的包则不会被清除。 注意:最后安装的版本未必是最高版本。 --config 在软件包被安装或更新后,执行所需的额外动作。比如创建必要的配置文件、初始化之类的动作。 --depclean (-c) 通过清除不被任何已明确安装的包所依赖的包来清理系统。 该动作从 world 集合开始创建完整的依赖关系树,并与所有已安装的包进行比较, 然后删除那些虽然已经安装、但却在依赖关系树之外的包(参见 --with-bdeps 以了解非严格必须的编译时依赖)。 所有属于 world 集合的包总会被保留。 可以使用"emerge --noreplace <atom>"手动将<atom>添加到world集合。 出于安全因素,depclean将仅仅删除那些确实不被任何其它已安装的软件包所依赖的包, 所以,通常有必要在depclean前先进行一下"emerge --update --newuse --deep @world"操作。 由于 --depclean 可能会破坏连接层的依赖(特别是未使用 --depclean-lib-check 的时候), 因此可能还需要再使用 revdep-rebuild(1) 之类的工具来修复破损的依赖。 警告: 建议新手同时使用 --pretend 或 --ask 来预览一下究竟有哪些包将被卸载,以避免失误。 注意: 那些列在package.provided(参见portage(5))中的包,即使属于 world 集合,也可能会被删除。 --depclean 可以看作能够自动检查依赖关系的 --unmerge , 当给出一个或多个 atom 时,它将会同时卸载那些不存在任何反向依赖的包。 可以同时使用 --depclean 和 --verbose 来查看反向依赖关系。 --deselect [ y | n ] 从world文件中(/var/lib/portage/world)移除指定的一个或多个 atom/set 。 --depclean, --prune, --unmerge 隐含了此动作。 而 --deselect=n 则表示禁止从world文件中移除指定的一个或多个 atom/set 。 --help (-h) 显示帮助信息。内置的帮助信息比man页更新的更及时,但不如man页详细。 --info 显示那些将在bug报告中包含的信息(主要是在执行emerge时将被导出(export)到ebuild.sh的portage变量)。 目的是帮助开发者了解系统环境以便于查找故障。在提交bug报告时务必包含这些内容。 同时使用 --verbose 选项可以显示更详细的信息(所有make.{conf,globals,defaults}中的变量和所有环境变量)。 --list-sets 列出所有可用的软件包集合(set) --metadata 将软件包的元数据缓存从 ${PORTDIR}/metadata/md5-cache/ 传输到 /var/cache/edb/dep/ 中,以加速软件包信息的查找。 这个操作通常在"emerge --sync"动作的最后自动完成。 [提示]除非你同时使用了 --regen ,否则 PORTDIR_OVERLAY 中列出的 overlay 的元数据不会被缓存。 对于 portage >=2.1.5 版本来说,这个动作完全没有必要,除非你在make.conf(5)中设置了 FEATURES="metadata-transfer" --prune (-P) 仅保留软件包的最高版本(删除所有低版本)。 可以使用 --verbose 来显示反向依赖,或者使用 --nodeps 来忽略所有依赖关系。 警告: 该操作可能会删除 /var/lib/portage/world 中的软件包!但可以用 --depclean 替代 --prune 以避免这个问题。 --regen 检查并更新portage树中所有ebuild的依赖关系缓存。这些缓存被用于加速搜索和创建依赖关系树。 不推荐rsync用户使用,因为rsync会使用服务器端的缓存来更新本地缓存。 如果你不知道'rsync用户'与其他种类的用户有什么差别,那么你就是一个'rsync用户':) rsync用户只要简单的使用"emerge --sync"即可更新本地缓存。 在更新portage之后,rsync用户可以方便的使用"emerge --metadata"重建依赖关系缓存。 可以使用 --jobs 和 --load-average 选项执行并行 --regen 操作。 还可以使用egencache(1)生成可分发给他人使用的依赖关系缓存。 --resume(-r) 使用相同的命令行选项与参数,重复最近一次因为错误而中断的操作(可以添加额外的选项,但不能添加atom/set参数)。 需要注意的是,这个操作在出错时仅返回一个错误代码。 如果没有任何事情可做,那么portage将仅返回一个成功代码,并输出一条成功的信息。 除非被中断的操作完成,或者被另一个中断取代,否则中断记录将一直存在。 最多可以保存两条中断记录,当较新的记录完成后,可以再次使用 --resume 来继续完成较旧的记录。 中断记录保存在 /var/cache/edb/mtimedb 文件中,且可以通过"emaint --fix cleanresume"命令删除(参见emaint(1))。 --search (-s) 在本地portage树中搜索软件包名称与指定字符串匹配的包。 默认进行大小写无关的简单匹配,但是可以通过在字符串前加个百分号(%)进行正则表达式匹配。例如: emerge --search "office" 列出所有软件包名称中包含"office"字符串的包 emerge --search "%^kde" 列出所有软件包名称以"kde"开始的包 emerge --search "%gcc$" 列出所有软件包名称以"gcc"结尾的包 另外,可以通过在字符串前加个'@'符号将分类(category)信息包含进来。例如: emerge --search "%@^dev-java.*jdk" 列出所有可用的Java JDK --searchdesc (-S) 在本地portage树中搜索软件包描述与指定字符串匹配的包。 需要注意的是,这种匹配是正则表达式匹配。 --sync 遵照sync-type与sync-uri属性的指示(/etc/portage/repos.conf),更新本地Portage树。详见portage(5)手册。 PORTAGE_SYNC_STALE 变量用于设置多少天没运行"emerge --sync"就发出警告。 警告:除了 distfiles, local, packages 目录,你对本地Portage树的任何更改都将在更新时被撤销。 提示:'emerge-webrsync'程序可以下载打包好的Portage快照,并进行更新,这对于首次安装Portage树很有用。 --unmerge (-C) 删除所有匹配的软件包,且不检查依赖关系,因此这个动作可能会删除关键的包!其参数只能使用 atom/ebuild 两种。 可以将 --depclean 或 --prune 视为可以检查依赖关系的 --unmerge 版本。 --version (-V) 显示emerge的版本信息。 选项 --accept-properties=ACCEPT_PROPERTIES 临时追加ACCEPT_PROPERTIES变量的值,也就是这里指定的值将被追加到原有的变量之后。 特殊标记"-*"可以完全丢弃现有的值,从头开始设置新值。 更多ACCEPT_PROPERTIES的信息请参见下面"被屏蔽的包"小节和make.conf(5)手册页。 一个典型的用法是使用 --accept-properties=-interactive 临时屏蔽交互式软件包, 对于默认设置来说,这相当于将ACCEPT_PROPERTIES的值设为"* -interactive" --accept-restrict=ACCEPT_RESTRICT 临时追加ACCEPT_RESTRICT变量的值,也就是这里指定的值将被追加到原有的变量之后。 特殊标记"-*"可以完全丢弃现有的值,从头开始设置新值。 更多ACCEPT_RESTRICT的信息请参见下面"被屏蔽的包"小节和make.conf(5)手册页。 一个典型的用法是使用 --accept-restrict=-bindist 临时屏蔽禁止二进制再分发的软件包, 对于默认设置来说,这相当于将ACCEPT_RESTRICT的值设为"* -bindist" --alphabetical 在显示USE之类标记的时候,同时显示启用和禁用列表,并按照字母顺序排序。 比如USE="dar -bar -foo"将被显示为USE="-bar dar -foo" --ask (-a) 在执行实际操作前,先显示将发生什么事件(但对于 --sync 来说是显示服务器信息),然后询问是继续还是取消? 使用 --ask 比先使用 --pretend 再实际执行相同的命令更有效率,因为依赖关系只被计算一次。 警告: 在提示信息后直接敲回车(没有任何其他输入),表示接受第一个选项。 由于输入缓存的存在,如果在下一个提示信息出现前键入了回车,将会在提示信息出现的时候自动接受第一个选项! 可以使用 --ask-enter-invalid 选项来将一个单独的回车视为无效输入,从而避免这个问题。 --ask-enter-invalid 与 --ask 选项联用时,将一个单独的回车视为无效输入。从而避免意外的自动接受第一个选项。 设置此项主要是为了用于make.conf(5)中的EMERGE_DEFAULT_OPTS变量。 --autounmask [ y | n ] 为了满足必要的依赖关系而自动unmask软件包以及生成package.use设置。此选项默认为开启。 如果必须更改配置,那么emerge将会立即退出并在列表结尾显示必须的变更。 你可以将必要的变更写进配置文件,或者使用 --autounmask-write 选项。 可以使用make.conf(5)中的EMERGE_DEFAULT_OPTS变量来默认关闭此选项。 --autounmask-unrestricted-atoms [ y | n ] 开启 --autounmask 时,对 keyword 和 mask 的变更默认使用"="限制软件包的版本。 开启此项后则改为使用">="限制软件包的版本。 提示:对 USE 和 license 的变更默认使用的就是">="。 --autounmask-keep-masks [ y | n ] 与 --autounmask 联用,表示不对 package.unmask 和 keyword 做任何修改。 这样,除非手动修改配置,否则不会自动解决依赖关系。 --autounmask-write [ y | n ] 与 --autounmask 联用,表示将必要的配置变更写进相应的配置文件(需要符合CONFIG_PROTECT和 --ask 选项的要求)。 如果被修改的 package.* 是一个文件,变更将被追加到尾部; 如果被修改的 package.* 是一个目录,变更将被追加到最末的文件(字典顺序)。 这样可以确保变更能够生效(覆盖掉旧有的配置)。 --backtrack=COUNT 指定一个计算依赖关系失败(例如包冲突所致)之后的回溯秒数,默认值是"10"。 --binpkg-respect-use [ y | n ] 在USE标记与当前的配置不一致的情况下,让emerge忽略二进制包(默认值是'n') --buildpkg [ y | n ] (-b short option) 让emerge在安装软件包的同时再额外创建二进制包(保存在PKGDIR目录中),详见make.conf(5)手册页 这对于Gentoo开发者和维护多套Gentoo系统的管理员很有用处。 因为只需要一次编译,就可以将生成的tbz2在其它地方安装(还可以用于灾难恢复)。 对于已安装的包,可以使用quickpkg(1)程序从现有系统中创建tbz2文件。 --buildpkg-exclude ATOMS 一个空格分隔的 atom 列表,禁止对列表内的软件包创建二进制包。 --buildpkgonly (-B) 仅创建二进制包而不实际安装它们。警告:所有编译时依赖的包必须已经安装在系统中。 --changed-use 包含哪些在安装之后改变了USE标记的软件包。该选项隐含了 --selective 选项。 与 --newuse 不同之处在于,此选项并不重新安装那些原本就未开启的USE标记发生了变化(增加或删除)的软件包。 注意:此选项会无视"test"标记的变化,因为专门绑定到了FEATURES="test"(参见make.conf(5)手册页)中。 --changelog (-l) 与 --pretend 一起使用的时候,将会同时显示需要升级的软件包的ChangeLog项。 --color < y | n > 启用/禁用彩色输出。该选项会覆盖NOCOLOR(参见make.conf(5))的设置。 如果stdout是一个tty,那么默认开启彩色输出,否则默认默认禁止彩色输出。 --columns 与 --pretend 一起使用可以让软件包的名称、新/旧版本号按照表格对齐显示,以便于复制和粘贴。 --complete-graph [ y | n ] 让emerge能够从world集合内部开始计算所有软件包的完整依赖关系。 开启此选项后,如果将要执行的操作将会破坏现有系统的任何依赖关系,emerge将会退出。 和 --deep 一样,该选项也会显著增加计算依赖关系所消耗的时间。 和 --deep 不同之处在于,开启该选项并不比关闭该选项需要升级更多的包。 与 --with-bdeps=y 联用可以将编译时依赖关系也考虑进来,从而让依赖关系树更加完整。 --complete-graph-if-new-use < y | n > 如果一个已安装软件包的 USE 或 IUSE 发生变化,那么就触发 --complete-graph 行为。该选项默认为开启。 --complete-graph-if-new-ver < y | n > 如果一个已安装软件包的版本发生变化,那么就触发 --complete-graph 行为。该选项默认为开启。 --config-root=DIR 设置 PORTAGE_CONFIGROOT 环境变量的值。参见"环境变量"小节关于 PORTAGE_CONFIGROOT 的描述。 --debug (-d) 以调试模式运行。在此模式下,将会带 -x 选项运行bash编译环境,调试信息将会出现在stdout上。 此选项可用于发现bash语法错误,也可以用于查看详细的依赖关系信息和编译过程。 --deep [DEPTH] (-D) 计算完整的软件包依赖关系树,而不仅仅是直接依赖关系。DEPTH 可以用于指定依赖深度。 比如,更新软件包时连同该包间接依赖的库一同升级,尽管这些库并不被该包直接依赖。 参见 --with-bdeps 以了解编译时依赖的行为。 --depclean-lib-check [ y | n ] 在执行 --depclean 和 --prune 动作时,将一并考虑连接库层次的依赖关系。该选项默认为开启。 如果在make.conf(5)中设置了 FEATURES="preserve-libs",并且也未移除指定软件包的"preserve-libs"特性, 那么此选项将被忽略,因为任何被连接的库都会被保留。 --digest 禁止显示摘要错误警告。 "repoman manifest"命令是生成manifest的首选方法,并且能够进行批量处理(参见repoman(1)手册页)。 --dynamic-deps < y | n > 在计算依赖关系时,将当前系统已安装的软件包替换为Portage树中相应的尚未安装的软件包。 这会导致当Portage树被更新后,依赖关系随之发生变化。该选项默认为开启。 警告:如果你打算关闭此选项,那么请首选运行 fixpackages(1) 以获得最佳结果。 fixpackages(1)命令实际上连续执行了"emaint --fix moveinst"和"emaint --fix movebin"两个不同的动作。 --emptytree (-e) 在计算依赖关系时,假定系统中没有安装任何软件包。 这样在emerge某个软件包时,将会顺着依赖关系从最低层开始,按照新USE标记重新安装或升级每一个包。 当和 --pretend 一起使用的时候可以用来查看最完整的依赖关系,并检查将要执行的动作是否是你想要的。 --exclude ATOMS 该选项的参数是一个空格分隔的 atom 列表,表示禁止安装任何与其中的atom匹配的软件包。 --fail-clean [ y | n ] 用于编译失败后清理临时文件。此选项在你将 PORTAGE_TMPDIR 放在 tmpfs 上时特别有用。 开启此选项后,你也许应该同时启用PORT_LOGDIR(参见make.conf(5))来保存编译日志。 --fetchonly (-f) 不做任何编译,只是基于USE标记的设置,下载所需的源代码。 --fetch-all-uri (-F) 与 --fetchonly 类似,但不考虑USE标记,因此将会下载所有源代码(即使按照当前的USE标记并不需要)。 --getbinpkg [ y | n ] (-g) 使用PORTAGE_BINHOST(参见make.conf(5))变量定义的服务器和位置,下载每个二进制包信息,并用于创建依赖关系树。 该选项隐含了 --usepkg 选项(如果仅用于二进制安装,那么应该使用 -gK )。 --getbinpkgonly [ y | n ] (-G) 与 --getbinpkg 类似,不同之处在于:从远程服务器获得的二进制包信息优先于本地的二进制包信息。 --ignore-default-opts 忽略 EMERGE_DEFAULT_OPTS(参见make.conf(5)) 的设置。 --ignore-built-slot-operator-deps < y | n > 编译时忽略 slot/sub-slot := 操作符部分的依赖关系。此选项仅用于调试目的。 -j [JOBS], --jobs[=JOBS] 指定并行编译的软件包数量。如果开启了此选项,但没有给出JOBS(正整数),那么emerge将不会限制并行编译的数量。 参见 --load-average 选项以获得更多信息。 与 --quiet-build 选项类似,开启 --jobs 选项也会导致所有的编译输出都被重定向到编译日志中。 注意:交互式安装的包将会自动强制 --jobs=1 ,但是可以通过 --accept-properties=-interactive 临时绕开。 --keep-going [ y | n ] 在遇到错误后并不中断,而是尽可能继续运行,直到实在不能继续为止。 也就是在遇到错误后,重新计算剩余包的依赖关系,并将不满足依赖关系的包丢弃。 参见相关的 --skipfirst 选项以获得更多信息。 --load-average [LOAD] 当平均负载不少于LOAD(浮点数)且有至少一个软件包正在编译时,不再启动新的编译任务。 如果LOAD值未指定,那么将使用前次的设定值。此选项一般和 --jobs 联用,以避免系统过载。 参见 make(1) 以了解类似的选项(可以通过make.conf(5)中的MAKEOPTS变量设置)。 --misspell-suggestions < y | n > 对拼写错误进行建议。默认情况下,如果指定的软件包不存在,emerge将会显示一列名称类似的软件包。 此选项默认开启。可以使用 EMERGE_DEFAULT_OPTS 变量默认关闭此特性。 --newuse (-N) 包含那些安装之后USE标记又发生了变化的软件包。此选项隐含了 --selective 选项。 USE标记的变化包括:添加,删除,开启,关闭。USE标记既受 profile 的影响,也受 package.use 的影响。 如果你想跳过处理那些IUSE标记发生变化的软件包,参见 --changed-use 选项。 如果你想跳过某些特定的软件包,参见 --exclude 选项。 注意:此选项不关心"test"标记的变化,因为它被绑定到了 FEATURES="test"(参见make.conf(5))变量中。 --noconfmem 默认情况下Portage会持续跟踪 CONFIG_PROTECT 目录中的文件,并且不会自动合并同一个文件, 但这样做会导致在不慎删除新配置文件后,无法更新原有配置。 使用此选项后,Portage将不管 CONFIG_PROTECT 目录中是否存在同名文件,总是自动合并新配置文件。 --nodeps (-O) 合并指定的软件包,但是不包括依赖关系。当依赖关系不能被满足时该操作可能会失败。 --noreplace (-n) 不重新安装系统中已经安装的软件包。如果不使用此选项,所有命令行上的软件包都将被重新安装。 注意:Portage默认并不重新安装被依赖的包。 此选项可以用于更新 world 文件而无需重新编译已安装的软件包。 --nospinner 即使终端类型是TTY也禁止会话的spinner --usepkg-exclude ATOMS 一个空格分隔的软件包名字或 slot atom 列表。emerge将会忽略与之匹配的二进制包。 --rebuild-exclude ATOMS 一个空格分隔的软件包名字或 slot atom 列表。 列表中的软件包,即使 --rebuild 选项要求其重新编译,emerge也将跳过(不重新编译)。 --rebuild-ignore ATOMS 一个空格分隔的软件包名字或 slot atom 列表。 那些依赖于列表中的软件包的软件包,即使 --rebuild 选项要求其重新编译,emerge也将跳过(不重新编译)。 --oneshot (-1) 正常合并指定的包,但是并不将其添加到world文件中。这样,除非被其他包依赖而被动升级,否则不会升级。 --onlydeps (-o) 只合并软件包所依赖的包,而不合并其自身。 --package-moves [ y | n ] 在需要时移动软件包。默认开启。通常会在执行完 --sync 动作之后立即进行软件包的移动。 警告:切勿关闭此选项,除非你知道自己在做什么。 --pkg-format 指定将要创建的二进制包的格式,目前仅支持 tar 和 rpm 以及他们的组合。 --prefix=DIR 设置 EPREFIX 环境变量的值。 --pretend (-p) 不执行实际的合并操作,而只显示将发生将发生的动作。推荐在合并新软件包时先用 --pretend 检查一下。 输出标记说明: N 新安装(此包目前尚未被安装) S 安装新SLOT版本(与原有版本并行) U 升级(将原有版本升级到一个新版本) D 降级(将原有版本降级到一个更好的旧版本) r 重装(由于某些原因(通常是由于slot/sub-slot)必须重新安装) R 重装(重新编译一个相同的版本) F 限制源码下载(必须手动下载) f 限制源码下载(已经下载) I 交互式安装(需要用户输入) B 被已安装的包屏蔽(冲突尚未解决) b 被已安装的包屏蔽(可以自动解决冲突) --quiet [ y | n ] (-q) 以安静模式运行,portage的输出会简洁许多。 --quiet-build [ y | n ] 将所有的编译输出重定向到一个单独的日志文件,而不是在stdout上显示出来。 如果某个软件包出现编译错误,那么编译日志的内容将会自动在stdout上显示出来(除非使用了 --quiet-fail 选项)。 如果连续出现多个软件包编译错误(例如开启了 --keep-going 或 --jobs),那么将会显示日志文件的路径(而不是内容)。 注意:交互式安装的软件包将强制显示所有编译输出,但可以通过 --accept-properties=-interactive 临时屏蔽。 --quiet-fail [ y | n ] 当编译输出由于 --jobs, --quiet, --quiet-build 被隐藏时,不在stdout上显示编译日志。 而仅仅显示最终的"die"消息和日志文件的路径。 --quiet-repo-display 不在软件包合并列表中显示 ::repository 输出,而是显示表明其来源的数字。 --quiet-unmerge-warn 禁止显示 --unmerge 动作之前的警告信息。此选项主要是为了用于 EMERGE_DEFAULT_OPTS 变量(参见make.conf(5))。 --rebuild-if-new-slot [ y | n ] 当 slot/sub-slot := 操作符的依赖关系被一个更新的slot满足的时候,自动重新编译和安装软件包。 这样,位于同一slot中的旧版本软件包将可以尽快的被 --depclean 动作卸载。 该选项仅对那些指定了 slot/sub-slot := 依赖关系的软件包有意义,且仅从 EAPI 5 开始支持此特性。 因为此选项需要检查反向依赖,所以它会在安装一个新的slot之后开启 --complete-graph 模式。 此选项默认为开启。 注意:如果你打算跳过包括slot操作依赖在内的所有重新安装动作,请使用 --ignore-built-slot-operator-deps=y --rebuild-if-new-rev [ y | n ] 如果某个软件包编译时所依赖的包需要从源代码安装(所需的精确版本尚未安装在系统中),那么就重新编译这个软件包。 注意:精确版本的含义是主版本和修订版本一起考虑 --rebuild-if-new-ver [ y | n ] 如果某个软件包编译时所依赖的包需要从源代码安装(所需的主版本尚未安装在系统中),那么就重新编译这个软件包。 注意:主版本相同即视为已安装,修订版本会被忽略 --rebuild-if-unbuilt [ y | n ] 如果某个软件包编译时所依赖的包需要从源代码安装(尚未安装在系统中),那么就重新编译这个软件包。 注意:安装了任意版本即视为已安装,主版本和修订版本都会被忽略 --rebuilt-binaries [ y | n ] 用新编译的二进制软件包替换掉系统上对应的已安装的软件包。 是否"新"的标准是根据二进制包元数据里的 BUILD_TIME 进行判断的。 当对二进制包(--usepkgonly 或 --getbinpkgonly)使用 --update 和 --deep 时,此选项默认开启。 --rebuilt-binaries-timestamp=TIMESTAMP 此选项仅在使用了 --rebuilt-binaries 时才有意义。 仅在二进制包的 BUILD_TIME 大于给定的 TIMESTAMP 同时又大于系统中已安装软件包的 BUILD_TIME 时, 才会被考虑应用于"rebuilt-binaries"逻辑。 --reinstall changed-use 这是 --changed-use 的别名 --reinstall-atoms ATOMS 一个空格分隔的软件包名字或 slot atom 列表。emerge将会把列表中的软件包视为尚未安装,从而可以重新安装它们。 --root=DIR 设置 ROOT 环境变量的值 --root-deps[=rdeps] 如果未给出参数,那么连同ROOT编译时所依赖的包将被一起安装到ROOT目录(而不是"/")。 如果给出了rdeps参数,那么将丢弃ROOT编译时所依赖的包,而只将指定的包自身安装到ROOT目录。 此选项仅在与ROOT环境变量或 --root 一起使用时才有意义,否则切勿使用! 此选项对支持 HDEPEND 的 EAPI 也没有效果。EAPI 5 使用新特性 HDEPEND 来调整安装到"/" 和 ROOT 的内容。 --select [ y | n ] (-w) 将制定的软件包添加到 world 集合(与 --oneshot 正好相反)。 当你在 EMERGE_DEFAULT_OPTS 中设置了 --oneshot 之后,此选项就有了用武之地。 --selective [ y | n ] 此选项与 --noreplace 类似。 对于隐含了 --selective 的选项(--changed-use, --newuse, --noreplace, --update)来说, 可以使用 --selective=n 来强制禁止 --selective 行为。 --skipfirst 仅在与 --resume 联用时才有意义。表示移除恢复列表中的第一个包,然后重新计算剩余软件包的依赖关系, 并自动丢弃所有不满足依赖关系或者被屏蔽的包。另请参见相关的 --keep-going 选项。 --tree (-t) 以缩进方式为给定的目标显示依赖关系树。该选项在和 --emptytree 或 --update 和 --deep 一起使用时才有意义。 --unordered-display 默认情况下,将按照安装顺序排列软件包列表。 当此选项和 --tree 一起使用时,此排序规则将被取消,这有助于展示更具可读性的依赖关系列表。 --update (-u) 将软件包升级到最佳的版本。由于最新版本通常位于测试分枝或被屏蔽,所以"最佳的版本"不一定是最高版本。 atom参数将被"贪婪匹配",因此非特定的atom可能会匹配多个slot中的不同版本。 --use-ebuild-visibility [ y | n ] 对于已编译的软件包,使用未编译的ebuild元数据。 --useoldpkg-atoms ATOMS 一个空格分隔的软件包名字或 slot atom 列表。 对于列表中的软件包,emerge将会优先选择二进制包,而不是较新的未编译的包。 --usepkg [ y | n ] (-k) 尽可能使用二进制包(来自 $PKGDIR),这样可以避免那些耗时很长的编译过程。在从CD安装时这个选项很有用处。 你可以先将 PKGDIR=/mnt/cdrom/packages 设为全局变量,然后使用此选项从CD上抓取已编译好的包并满足依赖关系。 --usepkgonly [ y | n ] (-K) 仅使用二进制包(来自 $PKGDIR)。这样所有的包(包括依赖关系)都必须能直接获取,否则emerge将会退出。 Portage在计算依赖关系时并不使用 $PORTDIR ,所以,所有的屏蔽信息都将被忽略。 --verbose [ y | n ] (-v) 以冗余模式运行,也就是在运行的同时输出info级别的消息,并且在和 --pretend 联用时显示每个包的USE标记。 下面的修饰符用于表示相应USE标记状态: 修饰符 位置 含义 ────────────────────────────────────────────────────────────── - 前缀 已关闭(已禁用或已删除) * 后缀 转换到开启状态/转换自开启状态 % 后缀 新添加的标记/新删除的标记 () 包围 强制的, 已屏蔽的, 已删除的 {} 包围 由FEATURES变量所决定 --verbose-conflicts 显示更详细的slot冲突信息。注意:开启此项后,在某些情况下可能会导致显示数百个软件包的slot冲突信息。 --verbose-main-repo-display 即使对于主软件库,也显示 ::repository 信息。 --with-bdeps < y | n > 在计算依赖关系时,连同编译时依赖(非严格必须)一起考虑。 安装时的默认值是"n",也就是不安装编译时依赖。而对于 --depclean 的默认值是"y",也就是不卸载编译时依赖。 这个设置可以添加到 EMERGE_DEFAULT_OPTS (参见make.conf(5))变量中,并可以随后在命令行上被改写。 环境变量 EPREFIX = [path] EPREFIX 用于指定目标的前缀(安装目录),可以在make.conf(5)文件中设置。 但是其值也可以通过 --prefix 选项进行更改(覆盖make.conf(5)文件中的设置)。 默认值是当前portage的安装目录(通常是"/usr")。 ROOT = [path] ROOT 用于指定目标的根文件系统路径,可以在make.conf(5)文件中设置。 但是其值也可以通过 --root 选项进行更改(覆盖make.conf(5)文件中的设置)。 默认值是"/"。 PORTAGE_CONFIGROOT = [path] PORTAGE_CONFIGROOT 用于指定存放各种portage配置文件的根目录(参见"文件"小节以查看配置文件列表)。 但是其值也可以通过 --config-root 选项进行更改(覆盖make.conf(5)文件中的设置)。 默认值是"/"。 输出 当使用 --pretend 和 --verbose 选项时,输出的内容可能会有些难懂,下面就是对这些缩写的解释。 [blocks B ] app-text/dos2unix ("app-text/dos2unix" is blocking app-text/hd2u-0.8.0) dos2unix 阻止了 hd2u 的安装。如果两个包会互相覆盖对方的文件,那么就将互相阻挡,否则将会损坏系统。 互相阻挡的包不应该被同时安装,因为它们通常都提供相同的功能。 [ebuild N ] app-games/qstat-25c qstat 是一个新软件包,将被新安装到系统中。 [ebuild NS ] dev-libs/glib-2.4.7 系统中已经安装了一个 glibc 版本,但是有一个属于不同SLOT的"新"版本可用。 [ebuild R ] sys-apps/sed-4.0.5 sed 4.0.5 已经安装了,但是portage将会重新安装此软件包。 [ebuild F ] media-video/realplayer-8-r6 需要手动下载 realplayer 的源代码。 在下载源代码失败时,portage 将会停止安装并且提示如何下载所需源码。 [ebuild f ] media-video/realplayer-8-r6 realplayer 的源代码已经下载到系统中了。 [ebuild U ] net-fs/samba-2.2.8_pre1 [2.2.7a] samba 2.2.7a 已经安装在系统中了,但将被升级到 2.2.8_pre1 版本。 [ebuild UD] media-libs/libgd-1.8.4 [2.0.11] libgd 2.0.11 已经安装在系统中了,但将被降级到 1.8.4 版本。 原因之一是,新版本存在缺陷(安全漏洞、导致系统损坏等),且尚未修复,暂时被屏蔽了。 原因之二是,某个你要安装的软件包依赖于旧版本,为了安装成功,必须降级。 在本例中,因为 libgd 2.x 与 libgd 1.x 并不兼容,所以必须先降级到 1.8.4 版本才能继续安装。 [ebuild U ] sys-devel/distcc-2.16 [2.13-r1] USE="ipv6* -gtk -qt%" 显示USE标记对编译的影响。在本例中,启用了 ipv6 支持但是禁止了 gtk 和 qt 支持。 "ipv6"后的星号(*)表示在上一次安装该软件包时,ipv6支持是被关闭的。 "qt"后的百分号(%)表示在上一次安装该软件包时,qt支持是被开启的。 注意:对于那些在两次安装中保持不变的USE标记,将只被简单的显示,而不带任何结尾标记。 USE标记只在使用了 --pretend 或 --verbose 时才会显示。而使用 --quiet 将会阻止显示上述信息。 [ebuild r U ] dev-libs/icu-50.1.1:0/50.1.1 [50.1-r2:0/50.1] icu 50.1-r2 已经被安装在系统中了,并且将被升级到 50.1.1 版本。 "r"符号表示icu软件包的sub-slot变化(在本例中是从50.1到50.1.1), 将会导致有slot-operator依赖于它的软件包(如下例所示的 libxml2)要被重新编译。 [ebuild rR ] dev-libs/libxml2-2.9.0-r1:2 USE="icu" libxml2 2.9.0-r1 已经被安装在系统中了,但是为了满足slot-operator依赖,将被重新编译安装。 如上例所示,是因为其所依赖的icu软件包的sub-slot发生了变化。 [ebuild U *] sys-apps/portage-2.2.0_alpha6 [2.1.9.25] portage 2.1.9.25 已经被安装在系统中了,但将被升级到 2.2.0_alpha6 版本。 "*"符号的意思是 2.2.0_alpha6 版本由于"missing keyword"的原因而被屏蔽(mask)。 如果使用了 --quiet 选项并且没有使用 --verbose 选项,那么此类屏蔽标志将不会显示。 此类屏蔽标记的详细说明如下: 标记 屏蔽类型 ────────────────────────── # package.mask * missing keyword ~ unstable keyword 注意:当使用 ACCEPT_KEYWORDS 在全局范围接受不稳定分支时,将不会显示波浪号(~)标记。 注意 建议在安装或者升级前先使用 --pretend 选项,看看将会发生什么操作,有哪些包将被阻止而需要调整。 特别是在对 system 和 world 集合进行操作时,更需要先用 --pretend 选项,因为可能会牵涉到大量软件包的变动。 你还应该优先使用 --update ,它会忽略那些已经完成升级的包,而只是升级那些未完成升级的包。 如果安装时没有在命令行参数中明确列出所依赖的包,那么为满足依赖关系而被安装的包将不会被加入到world文件中。 如果你想在升级 world 集合时一并升级那些为满足依赖关系而被安装的包,那么必须在命令行参数中明确列出这些包。 可以在命令行上使用USE变量来临时更改USE标记。但是命令行上指定的USE变量只是临时性的,不会被长久保存,因此不建议使用。 如果你想让USE标记被长久保存,那么应该将其放置到 /etc/portage/package.use 文件中。 如果 emerge --update @system 或 emerge --update @world 失败了,并且输出一条出错信息, 那么可能是某个 ebuild 使用了新版本的 emerge 特性,你必须先使用 emerge --update portage 升级 portage 。 被屏蔽的包 注意: 请小心使用开发分支。滥用被屏蔽的包会导致大量的bug和故障,并且会耗尽Gentoo开发者的精力。 请确认你有能力自己处理接踵而至的bug和故障。 portage中的屏蔽(mask)有多种功能:(1)用于软件包正式发布前的测试;(2)在即将撤销软件包前停止使用; (3)屏蔽已知有缺陷或存在安全漏洞的软件包。欲知如何解除屏蔽,请继续阅读下面的内容。 另外还要注意的是,如果你给定了一个明确的 ebuild ,那么所有形式的屏蔽都将被忽略,emerge将会尽力安装它。 backtracking 软件包因为 backtracking 而被屏蔽的含义是:为了避免依赖关系冲突和/或满足特定的依赖关系,而被临时屏蔽。 这种类型的屏蔽通常伴随一条消息:跳过某些软件包的升级,以避免依赖关系冲突和/或满足特定的依赖关系。 package.mask /usr/portage/profiles/package.mask 文件主要用于阻止那些已知会导致系统问题和有缺陷的软件包。 CHOST 使用make.conf(5)中的 ACCEPT_CHOSTS 变量来控制可接受的 CHOST 值。 EAPI ebuild(5)文件中的EAPI变量用于屏蔽不能被当前(较低)版本的portage所支持的包。 被EAPI屏蔽的包只有在升级portage之后才可以被安装。 KEYWORDS ebuild 文件中的 KEYWORDS 变量可以用于屏蔽尚处于测试状态的软件包。 每个包都有个体系架构特定的关键字,让portage知道此软件包可用于哪些体系架构之上。 如果一个软件包可用于某个体系架构,但是尚未经过严谨的测试,不能标记为"稳定", 那么将在相应的体系结构关键字前加上一个波浪号(~)以表明该包在此体系结构上尚处于测试状态。 emerge通过检查 ACCEPT_KEYWORDS 变量,以确定允许还是禁止合并被 KEYWORDS 屏蔽的包。 要让emerge允许合并这些测试版本的包,可以在 /etc/portage/package.accept_keywords 文件中列出这些测试版本的包。 参见portage(5)手册以了解更多信息。 LICENSE ebuild 文件中的 LICENSE 变量可用于屏蔽受限于许可证的软件包。 emerge通过检查 ACCEPT_LICENSE 变量,以确定允许还是禁止合并被 LICENSE 屏蔽的包。 参见make.conf(5)手册以了解更多有关 ACCEPT_LICENSE 的信息。 参见portage(5)手册以了解更多有关 /etc/portage/package.license 的信息。 PROPERTIES ebuild 文件中的 PROPERTIES 变量可用于屏蔽特定属性的软件包。 emerge通过检查 ACCEPT_PROPERTIES 变量,以确定允许还是禁止合并被 PROPERTIES 屏蔽的包。 参见make.conf(5)手册以了解更多有关 ACCEPT_PROPERTIES 的信息。 参见portage(5)手册以了解更多有关 /etc/portage/package.properties 的信息。 可以使用 --accept-properties 选项临时覆盖 ACCEPT_PROPERTIES 的值。 RESTRICT ebuild 文件中的 RESTRICT 变量可基于 RESTRICT 标记屏蔽特定的软件包。 emerge通过检查 ACCEPT_RESTRICT 变量,以确定允许还是禁止合并被 RESTRICT 屏蔽的包。 参见make.conf(5)手册以了解更多有关 ACCEPT_RESTRICT 的信息。 参见portage(5)手册以了解更多有关 /etc/portage/package.accept_restrict 的信息。 可以使用 --accept-restrict 选项临时覆盖 ACCEPT_RESTRICT 的值。 配置文件 Portage有个"配置文件保护"机制。目的在于避免新安装的包覆盖原有已经存在的配置文件。 默认情况下,"配置文件保护"机制仅在 /etc 目录和KDE配置目录内生效,将来也可能会再增加更多目录。 当Portage要向被保护的目录(例如 /etc 目录)安装文件时,任何已经存在的文件都不会被覆盖。 如果一个同名的文件'foo'已经存在,即将被安装的新文件将被命名为'._cfg0000_foo'; 如果一个同名的文件'._cfg0000_foo'已经存在,即将被安装的新文件将被命名为'._cfg0001_foo';等等,以此类推。 通过这种方法,已经存在的文件就不会被自动覆盖,从而允许系统管理员手动合并新配置文件,以避免意料之外的变化。 除了避免覆盖已经存在的文件,在卸载软件包的时候,Portage还避免删除被保护目录中的文件。 这种做法虽然有点不清爽,但是却可以避免重要的配置文件被不慎删除。 使用 CONFIG_PROTECT 变量设置被保护的目录(通常在 make.globals 文件中定义)。 使用 CONFIG_PROTECT_MASK 变量设置需要从被保护目录中排除的目录。 可以使用如下命令查找 /etc 目录中等待更新的文件: find /etc -name '._cfg????_*' 可以通过在 make.conf(5) 中设置 CONFIG_PROTECT="-*" 来取消这种保护机制,这样Portage就会无情的自动更新所有配置文件。 或者,你也可以在开启"配置文件保护"机制的同时,允许Portage自动覆盖/etc目录下某些特定子目录中的文件。 例如,你想让Portage在保护 /etc 目录的同时,又自动更新rc脚本和wget配置,可以在 make.conf(5) 中添加如下行: CONFIG_PROTECT_MASK="/etc/wget /etc/rc.d" dispatch-conf, cfg-update, etc-update 之类的工具可以用于手动合并这些文件。 它们可以用于交互式合并,还能够自动合并一些细小的变化。 文件 下面列出了一些你可能感兴趣的文件。要想得到完整的列表,请查看 portage(5) 手册页。 /usr/share/portage/config/sets/ 该目录包含了默认的软件包集合(set)的定义。 /var/lib/portage/world 包含了用户自定义的软件包列表。 你可以安全的编辑这个文件:添加你想在升级world集合时一起升级的软件包,删除那些你想忽略软件包。 /var/lib/portage/world_sets 与world文件类似,但是其中包含的不是软件包(atom),而是软件包集合(set),这些集合名称前都必须带有"@"字符作为前缀。 你可以使用 /etc/portage/sets/ 目录定义你自己的软件包集合。 /etc/portage/make.conf 包含编译安装过程中需要使用的变量,以覆盖 make.globals 文件中的默认值。 /etc/portage/color.map 包含用于定义颜色的变量。 /etc/portage/sets/ 存放用户自定义的软件包集合定义(参见 portage(5) 手册页) /etc/dispatch-conf.conf 包含用于定义如何进行配置文件的自动更新与备份的变量。 /etc/portage/make.profile/make.defaults 包含profile特定的、用于编译的变量。请勿编辑此文件。 /usr/portage/profiles/use.desc 包含全局USE标记的解释。请勿编辑此文件。 /etc/portage/make.profile/virtuals 包含为了满足虚拟依赖关系而默认安装的软件包列表。请勿编辑此文件。 /etc/portage/make.profile/packages 包含系统的基础(base)软件包列表。system和world集合都基于此列表。请勿编辑此文件。 /usr/share/portage/config/make.globals 包含编译安装过程中需要使用的变量的默认值。请勿编辑此文件。 /var/log/emerge.log 记录所有emerge输出内容的日志文件。该文件总是以追加方式向其中添加内容,你只能手动清空其内容。 /var/log/emerge-fetch.log 记录所有emerge的文件下载日志。该文件总是以追加方式向其中添加内容,你只能手动清空其内容。 /var/log/portage/elog/summary.log 包含所有emerge概要信息。安装 /etc/logrotate/elog-save-summary 文件 参考资料 emerge --help, quickpkg(1), ebuild(1), ebuild(5), make.conf(5), color.map(5), portage(5) /usr/lib/portage/bin/ 目录中有许多有用的帮助程序。 app-portage/gentoolkit 软件包中有一些有用脚本(例如equery之类)。 Portage 2.2.7 Aug 2013 EMERGE(1)