emerge 中文手册
原文:http://www.jinbuguo.com/pkgmanager/gentoo/emerge.html
名称
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之类)。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: MySQL 数据的存储
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论