2010年(16)
分类: LINUX
2010-05-12 11:36:55
emerge主要用法
emerge命令是Portage人机交互的主要接口,其主要用法总结如下:
emerge --sync && emerge -avuND world
/*
* 系统升级
*
* sync: 同步Portage树
* a : 提交确认
* v : 更多相关信息(安装包大小等)
* u : 升级操作
* D : 深度检查依赖树(包括间接依赖,而不只是直接依赖)
* N : USE标记已发生变化,通知emerge检查已安装包是否需要重新编译
*/
emerge -s something
emerge -S something
/*
* 查找软件
*
* s: 按标题查找
* S: 按描述信息查找
*
*/
emerge -atv something
/*
* 安装软件
*
* a: 提交确认
* t: 安装包依赖树视图
* v: 更多相关信息(安装包大小等)
*
*/
/*
* 卸载软件
*
* a: 提交确认
* v: 更多相关信息(安装包大小等)
* C: 删除匹配软件包,不处理所依赖包
*
*/
emerge -avt --depclean
/*
* 清理软件
*
* 说明:本命令在软件卸载或系统升级后使用,用来清理不需要的包。但应该注意的是,
* 清理包中若是提供其他软件包所需要的动态链接库,则需要在执行本命令后,
* 使用revdep-rebuild来重建对动态链接库的依赖。
*
* a : 提交确认
* v : 更多相关信息(安装包大小等)
* t : 安装包依赖树视图
* depclean: 清理无依赖关系的软件包
*/
revdep-rebuild
/*
* 检查和修正动态链接库的依赖关系,常于”清理软件“命令之后使用
*/
/*
* 下载软件源码
*
* f: 下载USE标记影响下的源代码
* F: 下载全部源代码
*/
详见:
man portage
man emerge
emerge的输出
当emerge携带"a"或"p"参数时,我们会看到一些简写输出,举例描述如下:
[blocks B ] app-text/dos2unix("app-text/dos2unix" is blocking app-text/hd2u-0.8.0)
解释:Dos2unix阻止了hd2u的安装(emerge)。互斥者(Blockers)被定义为两个软件包会破坏对方文件或是对您的系统造成损坏。事实上互斥者并不需要都被安装,它们通常提供了相同功能。
[ebuild N ] app-games/qstat-25c
解释:Qstat对您的系统而言是一个新软件包,它将第一次被安装。
[ebuild NS ] dev-libs/glib-2.4.7
解释:你已经安装了glib的一个版本,但是有更新的一个版本glib-2.4.7可以安装在另外一个软件插槽中。(SLOT多版本共存技术:S = new SLOT installation (side-by-side versions))
[ebuild R ] sys-apps/sed-4.0.5
解释:sed 4.0.5已经被安装了,但是如果您运行这一命令则指定的软件包将会被重新安装(re-emerge)
[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已经被安装了,但是如果您运行这一命令portage将会将其降级为1.8.4版本。这可能是由于一个软件包的新版本在发布后,官方发现它存在某些问题,进而屏蔽掉了这个版本。另外可能的原因是您正试图安装的软件包需要一个老版本的软件包来保证安装成功。在本例中,libgd 2.x与libgd 1.x不兼容。这意味着libgd 1.x创建的软件包不能与libgd 2.x一起编译,在它们可以安装之前libgd必须先降级(downgrade)。
[ebuild U ] sys-devel/distcc-2.16 [2.13-r1] USE="ipv6* -gtk -qt%"
解释:ipv6* -gtk -qt%反应了distcc安装时USE变量的状态。这里我们看到distcc可以使用USE变量ipv6、gtk和qt,但是您目前的设定状况为:你刚刚启用了ipv6,它将生效于本次安装、你禁用了gtk、上一个版本没有qt选项,而本版本可以支持qt选项。
[ebuild U-] x11-base/xfree-4.3.0 [4.2.99.902]
解释:-表示Xfree缺乏SLOT信息,这可能是由于前一个版本的安装被抛开了(injected)(请查看inject以获取更多信息),或是版本过时得厉害(太老了以致于SLOT信息根本不存在)。不管怎样还是有一个新版本的Xfree您可以愉快地升级。
USE标记的指导思想
Portage作为Gentoo的软件包管理系统,除了向用户提供面向软件包的管理方法和自动依赖处理方法,还提供基于源码特征的功能配置方法。
为了让用户专注于软件包特征的选择,Portage制定了USE关键字来代表软件包所具有的一些特征。当用户选择了某个USE标记,Portage就会明白这个关键字所代表的意义,并在编译时实现用户的意愿。当然这同时也改变了所涉及的软件包的依赖关系信息。例如:关键字kde。如果用户的USE变量里面没有这个关键字,所有具有可选KDE支持的包在编译时都不会编译KDE支持,所有具有可选KDE依赖关系的包在安装时都不会(做为一个依赖关系而)安装KDE库。反之,这些包在安装时都会编译KDE支持,而且KDE库也会(作为一个依赖关系而)被安装。
通过正确设定USE关键字,用户能够得到一个根据需要而定制的系统。
全局USE和本地USE
在管理USE标记之前,我们首先要区分"全局标记"与"本地标记"的概念。全局标记,就是系统软件包或绝大部分软件包都会依赖的标记,是通用标记。本地标记,是针对某个软件包而定制的特殊标记。
当前可用的全局USE标记可在/usr/portage/profiles/use.desc中找到,当前可用的本地标记可在/usr/portage/profiles/use.local.desc中找到。
再提出个“局部标记法”的概念。如用户不希望让一个标记影响全局,则可专门为某个ebuild指定标记,那么这样的标记用法称为局部标记法。全局USE和本地USE都可以采用局部标记法的方法来影响某个软件包的编译。
全局USE标记的定义方法举例:
在/etc/make.conf中编辑:
USE="-gnome -gtk -kde -qt3 -qt4 -ipv6 bash-completion"
本地USE标记的定义方法(局部标记定义法)举例:
# echo "app-editors/vim cscope" >> /etc/portage/package.use
USE标记的配置结构按配置优先级(从低到高)描述如下:
^ 1)/usr/portage/profile/base/make.defaults
^ 2)/usr/portage/profile/default-linux/make.defaults
^ 3)/usr/portage/profile/default-linux/x86/make.defaults
^ 4)/usr/portage/profile/default-linux/x86/2008.0/make.defaults
^ 5)/etc/make.conf
^ 6)/etc/portage/package.use
^ 7)环境变量USE
USE标记的生效,portage将会按照从高到低的扫描顺序扫描USE标记的配置结构。也就是说,环境变量USE的优先级最高,其次是/etc/portage/package.use,再次是/etc/make.conf,最后是各级make.defaults。例如:在环境变量USE中设置“-ssl”,那么 make.conf里再定义“+ssl” 将会被忽略。
特别地,make.defaults作为Portage的系统级设置,不建议用户修改这些文件,因为在Portage更新时,可能对这些文件进行更新,从而覆盖掉用户的改动。
Gentoolkit 是Gentoo开发者和贡献者们经过长期使用,针对复杂的操作编写的一个管理工具集合。其详细用法可参考Ken Wu`s Blog的文章:无废话Gentoolkit
许多软件包中包含有自己的文档,有些时候doc的USE标记决定了软件包中的自带文档是否会被安装到本地。您可以通过emerge -vp <软件包名称>命令来检查是否存在doc USE标记。
最好的启用doc的方式是在/etc/portage/package.use里对想要启用的包单独启用,这样你就能只获得你想要的软件文档。全局启用此标记已知会导致循环依赖。
当一个软件包安装结束后,它的文档通常会存放在/usr/share/doc目录下以软件包名命名的子目录中。您也可以通过equery工具来列出此软件安装后生成的所有文件。