热门关键字:  ubuntu  分区  函数  Fedora  linux系统进程

当前位置 :| 主页>Linux发行版>Gentoo>

Gentoo Portage Manual

来源: 作者: 时间:2007-02-02 Tag: 点击:




Code listing 3.1



emerge rsync


emerge 用来更新本地 Portage 树的方法可以改变。看一下 Configuring Portage 中的 Portage SYNC 设置。
 
Merging 软件包


用 Portage 来编译并安装一个软件包称为 merging. Portage 编译软件包,然后将它装在一个临时的 "image" 目录下,在那里它会记录要安装的文件。这些文件随后从 image (映像) 目录移到真正的系统里,和系统合并(就是merge)。


emerge 命令是 Portage 系统的前端。安装和删除软件包都是用这个命令以及它的各种参数。


要安装某个包最新的 unmasked 版本,只要指定包的名字:



Code listing 3.2



emerge galeon


这个命令将编译和安装任何有依赖关系的包(还要考虑 USE 设置),然后再安装最新的 unmasked 版本 galeon. Galeon 也可以用名字加上类别来指定: net-www/galeon


emerge 命令还可以处理真正的 ebuild 文件,这使用户可以 merge 老一些版本的软件包,或者一些第三方提供的有基于 ebuild 的软件包。例如:



Code listing 3.3



emerge /usr/portage/net-www/galeon/galeon-1.2.0-r3.ebuild


除了上述的两个用法,emerge 还支持几个很有用处的命令行参数。--pretend 可能用得最多。用了这个参数后,就不会真正的 emerge,而是显示出 emerge 时必须安装和升级的软件包列表。下面的例子列出了在安装最新版的 kdevelop 时,所需要 merge 的软件包:



Code listing 3.4



root@kodiak blocke # emerge --pretend kdevelop

These are the packages that I would merge, in order.

Calculating dependencies ...done!
[ebuild N ] kde-base/kdelibs-2.2.2-r4 to /
[ebuild N ] dev-util/kdbg-1.2.2 to /
[ebuild U ] app-text/psutils-1.17 to /
[ebuild U ] app-text/a2ps-4.13b-r3 to /
[ebuild U ] app-text/jadetex-2.20 to /
[ebuild N ] app-text/sgmltools-lite-3.0.3-r2 to /
[ebuild N ] kde-base/kdoc-2.2.2-r1 to /
[ebuild N ] net-www/htdig-3.1.5-r2 to /
[ebuild N ] app-text/enscript-1.6.3-r1 to /
[ebuild N ] kde-base/kdebase-2.2.2-r2 to /
[ebuild N ] app-doc/qt-docs-2.3.1 to /
[ebuild N ] dev-util/kdevelop-2.0.2 to /


上面的列表中,标记了 N 的软件包是还没有装过的,将在这次 emerge 时安装,而标记了 U 的软件包是已经装过老版本的软件包,这次将升级。


其他参数有:


--fetchonly : 只下载文件,包括要安装的包和解决依赖性的包。



--emptytree : 使 Portage 假装这个包没有依赖包,或者说依赖包都已经装过了。这个参数和 --pretend 相结合,就能显示出一个软件包完整的依赖树。所有的依赖关系(除了 glibc )都显示出来。


--nodeps : Portage 试图只安装指定的软件包,而忽略所有的依赖关系。如果你没有安装过合适的依赖关系包,那么编译可能会失败。


--onlydeps : 只安装某个包的依赖包,而不安装它自身。


--noreplace : 跳过指定的包,如果它们已经安装过的话。


--usepkg : Portage 并不编译指定的包,而是试图从指定地点安装预编译好的 tbz2 包。地点由 PKGDIR shell 环境变量来决定。


--debug : ebuild 环境输出更多的信息。这对开发者查找 ebuild 文件中的语法错误很有用。


--autoclean : 强制 emerge t在开始编译一个包前清除这个包的临时编译目录。Portage 缺省就是这样做的,所以这个参数只有对想禁止这样做的开发者有用处。


--verbose : 让 emerge 输出更多的信息。目前,这只会多输出 GNU info 手册页的错误,而这些错误都是可以安全地忽略的。


Unmerging 软件包


"unmerging" 就是从文件系统中删除某个包的文件。包里的程序被从系统删除,除非再次 emerge,否则不能使用。


执行 emerge 命令,加上 unmerge 参数,后面再跟上包的名字,就能删除这个包。下面的例子将删除所有安装过的 ltrace 包版本:



Code listing 3.5



emerge unmerge ltrace

or

emerge unmerge dev-util/ltrace


Portage 也允许只 unmerge 指定版本的包。可以用 = (确定版本), < (小于), > (大于), <= (小于或等于), 和 >= (大于或等于)。下面的命令将 unmerge 所有小于或等于 0.3.15 的 ltrace 版本:



Code listing 3.6



emerge unmerge \<=dev-utils/ltrace-0.3.15


当指明了软件包的版本范围后,很重要的一点就是要用跳脱符号(也就是"\")来标注 > 和 < ,这样你的 shell 才能把它们看作是你表达式里的符号,而不是解释为 shell 里的符号。你还需要像上面例子里那样指明软件包的类别和名称。执行 emerge --help 命令,可以找到另一个软件包范围指定的例子。



警告: Unmerging 一个软件包可能很危险。如果你删除了某个核心包,你的系统可能就不能正常工作了,删除有的库文件会使程序不能运行。在你删除核心包或其他包对它有依赖关系的包时,Portage 不会提醒你。



如果你要删除的包现在的确是装在系统中的,emerge 程序将详细显示将删除的是什么版本的哪个包,并会等待指定的时间,以便用户取消这次 unmerge. 在这段时间内,用户可以按下组合键 Control-C 来取消操作。


一旦 unmerge 开始,你将看到一长列文件名,它们都是属于这个包的文件。有些文件名左边会显示一个标记, !mtime, !empty, 和 cfgpro 说明了是由于什么原因,这个文件没有删掉。文件名左边没有上面三个标记中的任何一个,这样的文件就已经成功的从系统中删除了。


!mtime 标记表示这个文件在软件包安装后改动过。这意味着在软件包安装后,有人编辑过它,或者其他的包又安装了同样的文件,从而把老的文件覆盖掉了。这个标记使我们能升级软件包,同时又不会害怕删除老版本的过程中会删掉重要的文件。


!empty 标记表示 Portage 不会删除这个目录,因为它不是空的(不同的包可能会把文件装在同一个目录里)。配置文件保护会带给你 cfgpro 标记。它的意思是一个新安装的软件包声称自己对这个配置文件有所有权,因此 Portage 也不会删除它。



警告: 文件被认为是由最后安装它的那个软件包所有,这依赖于安装时的顺序,与真实的版本号无关。删除新安装的软件包,会同时删掉它所有的文件,即使有某个老的软件包也安装了这个文件(假设用户没有手动修改过它)。



System(系统)升级


Portage 支持用一个命令自动升级安装过的软件包,这一 system升级特性允许用户升级"核心"包,用 Gentoo 开发组推荐的版本来代替老的版本。一次系统升级不会升级不重要的包,只有在 Portage profile 中写明了是对操作和维护系统 essential (必不可少)的包才会升级。


要进行系统升级,用下面的命令:



Code listing 3.7



emerge --update system


Portage 将根据你已经安装的版本和软件包名称,以及当前的 Portage profile 推荐的版本和包名,来编译和安装升级版本。用户可以在上面例子中加上 --pretend 参数,来得到一个将要安装和升级的包的列表。



注意: 在安装指导中,你可能已经注意到,最早的几步之一就是用 emerge system 来安装基本(或"核心")包。 emerge --update system 将这些基本包升级到最新的一个推荐版本。



World 升级


Portage 也支持用一个命令来升级选定的非核心包。portage 系统有一定的内建智能,可以安全的升级一个系统,即使这个系统里同时存在多种相冲突的版本的软件包。


Portage 的 world 升级特性会检查系统的 profile ,禁止安装的软件包 (package.mask), world profile 和 world profile 中列出的软件包的依赖关系(包括版本范围),并在这个基础上,决定哪个包需要升级。如果一个软件包存在新的版本,并且这个软件包列在 world profile 中或是 world profile 中某个包的依赖关系,这个软件包才会升级。另外,这个包或者说要安装的这个版本必须不在 system(系统) profile 或 package.mask 中被禁止。


当考虑要升级哪个包时,Portage 试图尽可能多的升级在 world profile 中提到的包。Portage 还会考虑它们的依赖关系包,只要存在新的版本,符合指定的版本范围,并且没有在 system profile 或 package.mask 中禁止,就会升级这个依赖关系包。它还会考虑 SLOTS(插槽),上一节已经说过了。
最新评论共有 4 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册