Gentoo emerge 使用方法

Posted by Elton's Blog on July 8, 2009

使用emerge可以管理Portage中的软件甚至整个系统。

当我们谈到(软件)包的时候,我们通常指的是Portage树为Gentoo用户提供的包的名称。Portage树是ebuilds文件的集合,这些文件包含了Portage管理工具维护软件(安装,搜索,查询, …)时所需要的所有信息,并被默认的放置在/usr/portage目录中。

每当您要求Portage对系统中的软件包执行一些操作的时候,它会以系统中的ebuilds文件作为基础。因此您最好定期更新系统Portage树中的ebuild文件,这样Portage才知道新加入了哪些软件,哪些软件发布了安全更新,等等。

更新Portage树

# emerge --sync

更新系统

# emerge --update --deep --newuse world

–update(-u)表示更新 –deep(-D)表示更新关联包 Portage会查找您已经安装的软件包是否有更新版本,但它只会核对那些您已经明确地安装过的软件包(也就是在/var/lib/portage/world文件中列出的包),并不会完整去的检查与这些软件产生依赖关系的包是否也需要更新。如果您想更新系统中的每个软件包,那就加上–deep参数 –newuse 如果USE变量的值变了,就要使用这个参数,通知系统USE参数有变化

移除依赖包

如果仅仅移除了一个包,而未将其依赖的包移除,使用emerge –depclean命令来移除依赖包。

# emerge --update --deep --newuse world
# emerge --depclean
# revdep-rebuild

在使用emerge –depclean前,确保系统完全更新过。 revdep-rebuild工具由gentoolkit包提供;使用前别忘了首先emerge它:

# emerge gentoolkit

升级系统完整步骤

   1. emerge --sync
   2. emerge -vauD --newuse world
   3. emerge –depclean
   4. revdep-rebuild

通过名称查找软件

# emerge --search softname

通过软件描述查找软件

# emerge --searchdesc pdf

安装软件

# emerge gnumeric

假装安装软件

# emerge --pretend gnumeric
或
# emerge -p gnumeric

移除软件

# emerge --unmerge gnumeric

全面world更新的时候,不想更新某些包

将你不想更新的包的名字加入到/etc/portage/package.mask中。 如你不想升级最新的nginx则加入

www-servers/nginx

设置某些包的USE属性

如果你想针对某些包设置他们的USE属性,而不是改变全局USE属性,则修改/etc/portage/package.use文件,如:

>=www-servers/nginx-0.7.6 random-index addition fastcgi flv imap pcre perl ssl status sub webdav zlib
>=dev-lang/ruby-1.8.7
dev-db/mysql innodb berkdb
dev-lang/php fpm berkdb bzip2 cli crypt gdbm iconv ipv6 ncurses nls pcre readline reflection session spl ssl unicode zlib curl exif gd json mysql pdo threads xml zip

使用最新的测试包

默认gentoo都是用稳定版的包,如果你想使用最新版本的软件,只要在/etc/portage/package.keywords文件中,对应的包后加入~就可以了。如:

www-servers/lighttpd ~amd64
www-servers/nginx ~amd64
dev-lang/php ~amd64
dev-db/mysql ~amd64
sys-devel/gcc ~amd64
dev-lang/ruby ~amd64

~amd64表明你更新的是64位版本的,如果是x86版本的,使用~x86就可以了。