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

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

Gentoo Portage Manual

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



对其他发行版和软件包管理比较熟悉的用户可能会有些疑惑,为什么 Portage 不简单的按照版本号来升级所有新的包 (Gentoo 1.0 中就是这样做的)。Gentoo 的 Portage 树中有许多包都存在多个版本。老版本和新版本的包对于依赖于它们的软件可能并不兼容。如果盲目的升级了库文件和工具,而没有考虑到其他包的需要,可能会马上引起麻烦。为了避免这种情况,Portage 尽量小心的升级,根据每个包 ebuild 文件中的要求,考虑所有包的需要。


Portage 的 world 升级,最重要的就是 world profile. system profile 通常是由开发者来定义的,用户不应该改动它,而 world profile 就不同了,它是由用户的日常操作来间接产生的。world profile 有点像"收藏夹(有最爱的意思)"。用户通过 emerge 命令来手动安装的单个软件包,会被记录在 world 文件中,它位于 /var/cache/edb/world. Portage 假设你费力告诉它要安装这个包,你就有兴趣让这个包与时俱进。


world 文件由软件包的类别和包名称组成,每行一个,有点像下面这样:



Code listing 3.8



net-im/gaim
net-www/skipstone
net-www/galeon
app-editors/vim
app-text/ispell
net-mail/evolution
dev-util/ltrace
sys-apps/xfsprogs
=net-www/mozilla-0.9.8-r3
sys-apps/attr
sys-apps/dmapi
sys-kernel/linux-sources
sys-apps/acl
app-office/gnucash
app-cdr/xcdroast


上面例子中几乎所有的条目,都是由 Portage 在用户手动 merge 特定包时,自动添加进去的。如果有新的版本,这些包就会升级。



注意: 为了节约时间,并保证你喜爱的软件包保持最新,你可以手动编辑 world 文件,为那些包增加条目。从老版本的 Portage 中升级过来的用户,可能需要修改这个文件,使它符合要求。使用较新的 Gentoo 和 Portage 的用户,在安装过程中应该已经创建了一个比较好用的 world profile.



一个有趣的条目是 mozilla(=net-www/mozilla-0.9.8-r3). 这个包被用户加上了版本号和等号。软件包范围指定(在本手册的 Unmerge 软件包 部份说过) 可以用来强制 Portage 在升级软件包时只在某个版本范围中考虑。上面的那一个条目实际上让 Portage 认为,mozilla-0.9.8-r3 是唯一的版本,所以就永远不会在 world 升级时来升级 mozilla.


World 升级用下面的命令:



Code listing 3.9



emerge --update world


Portage 将试图升级 world 文件中列出的软件包,并在需要时升级任何依赖关系包。在能满足要升级的软件包需要的情况下,依赖关系包升级到最高的一个版本。没有在 world 文件中列出的包,如果同时又不是那些包的依赖关系包,就不会升级。



警告: Portage 不会覆盖"配置文件保护"所控制目录中的文件。你需要手动 merge 现有配置文件和 Portage 为你保存下来的新版本。如果你没有升级你的配置文件,安装的软件可能不能运行。请看 配置 Portage 一节中的 配置文件保护 ,或使用命令 emerge --help config 来得到更多信息。



world 升级前要先看一下升级和安装的软件包列表,可以用本节前面提到的 --pretend 参数。



注意:一个 world 升级同时会自动执行一个 system 升级。核心包不能用 world 文件来固定版本号(就是前面说过的 mozilla 那种方法),因为当前的 Portage profile 会覆盖它。



world 升级有一个有趣的副作用,可以在一个安装好的系统上重新编译所有软件包。由于 world 升级会试图升级所有 world 文件里提到的包和它们的依赖关系,使用参数 --emptytree 可以强制编译所有这些包和依赖关系,除了 glibc. 如果用户想改变优化参数,或 USE 关键字的值,并且希望系统中所有软件都能用到这些改变,又懒得重新 merge 每一个包,就可以用这种用法。在 world 文件中填上所有你常用的程序,然后用下面的命令:



Code listing 3.10



emerge --update world --emptytree


你可以加上 --pretend 参数来看一看将被重新编译的包。


清理系统


Portage 支持同时安装同一软件包的不同版本。在 Gentoo 的 Portage 树中有不少包都会用到这个功能(是为了向前兼容,因为老的程序可能不和新版本的依赖包兼容)。


在多数情况下,当安装了新版本的包时,老版本包的多数文件会被覆盖,留下的只是一些文档和不重要的文件。时间长了,这些碎片会白白浪费宝贵的磁盘空间。


为了解决这个问题,Portage 提供了一个简单的方法来从系统中抹去老版本的痕迹。这个功能称作 emerge clean 参数,用下面的命令调用:



Code listing 3.11



emerge clean


emerge 将显示一个列表,里面有软件包的版本变更和要删除的版本,要留下的版本,并留给用户一定时间来用 Control-C 取消操作。在一般的系统中,会乱一阵子,因为它显示了很长的列表,包含要删除的和要保留的文件。


除非指明,Portage 会假设 clean 动作是针对 world (所有安装过的软件包) 来执行的。你可以限制 clean 动作的范围,如加上 world, system, 一组包的名字以及包的版本范围这些参数,像本节的 unmerge 部份说的那样。


在考虑应该删除哪个版本的包时,Portage 系统综合多种因素,如各种 profiles, 其他软件包的需要,以及一个软件包的插槽(SLOT)。假设所有软件包的依赖关系都是正确定义的,clean 动作将安全地删除老的软件包,并且不会影响系统的任何功能或使系统不正常。


Pruning (剪除)软件包


Portage 也支持 prune 动作。prune 动作就是 clean 动作的不安全版本。它删除每个软件包除了最后一个安装的版本外的所有版本。它不会进行 clean 要做的那些检查,因此可能会删除系统中必不可少的依赖关系包。用户用这个参数很容易搞坏系统,一般不推荐使用,除非是极其特殊的环境下才用它。


prune 动作可以接受与 clean 动作相同的参数列表,像下面这样用:



Code listing 3.12



emerge prune


在 Portage 树中查找


构成 Gentoo Linux 心脏的 Portage 树可以很大。emerge 命令提供了一个查找的特性,可以接受引号中的正则表达式作为查找字符串。正则表达式非常复杂,如果你想用好它,建议你找一本相关的好书。


大多数的简单查找并不需要了解正则表达式。下面的例子就是一个简单的查找,找的是名为"gcc"或名字里有"gcc"的软件包:



Code listing 3.13



emerge search gcc


每一个符合要求的软件包都会列出来,列出的内容有包名,最新版本,最近安装过的版本,它的主页以及对软件包里含有的程序的简短描述。


得到帮助


关于 emerge 所支持的参数个动作的更多信息可以用下面的命令来获得:



Code listing 3.14



emerge --help


有用的工具


Gentoo 的用户做了一些好用的工具,它们在 Gentoo Portage 树的 app-admin/gentoolkit 里面。


etc-update : 是一个 shell 脚本,利用 vim 来合并 /etc 中的配置文件(如果不正确的使用,可能很危险)
qpkg : 软件包数据库查询工具
epm : 另一个软件包数据库查询工具,使用类似于 RPM 的语法。

上一页 1 2 3 4下一页
[收藏] [推荐] [评论] [打印] [关闭]
上一篇:Gentoo Linux Kernel Guide
下一篇:Gentoo emerge 参数说明
最新评论共有 4 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
栏目列表
热点关注
相关文章