emerge 中文手册html
译者:金步国 版权声明java
本文译者是一位开源理念的坚决支持者,因此本文虽然不是软件,可是遵守开源的精神发布。node
无担保:本文译者不保证译文内容准确无误,亦不承担任何因为使用此文档所致使的损失。 自由使用:任何人均可以自由的阅读/连接/打印此文档,无需任何附加条件。 名誉权:任何人均可以自由的转载/引用/再创做此文档,但必须保留译者署名并注明出处。 其余做品python
本文译者十分愿意与他人分享劳动成果,若是你对个人其余翻译做品或者技术文章有兴趣,能够在以下位置查看现有的做品集:web
金步国做品集 [ http://www.jinbuguo.com/ ] 联系方式正则表达式
因为译者水平有限,所以不能保证译文内容准确无误。若是你发现了译文中的错误(哪怕是错别字也好),请来信指出,任何提升译文质量的建议我都将虚心接纳。shell
Email(QQ):70171448在QQ邮箱 招聘缓存
公司:君康人寿信息技术部 职位:Gentoo Linux SA, PostgreSQL DBA 坐标:上海 有意者请直接加我QQ70171448了解详情(加我时请注明"应聘")安全
EMERGE(1) Portage EMERGE(1)bash
名称 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](https://my.oschina.net/u/591695) 或 emerge --update [@world](https://my.oschina.net/u/231745) 失败了,而且输出一条出错信息, 那么多是某个 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)