首页 > 代码库 > gentoo Portage使用

gentoo Portage使用

  查看portage的手册命令user $man emerge

  一般在gentoo中提及的包都是安装程序,他们的信息一般都在 /usr/portage 目录下

  root #emerge --sync 更新portage的库,root #emerge-webrsync 防止防火墙阻拦portage联系镜像库

  user $emerge --search pdf 搜索名称中含有pdf的软件  user $emerge --searchdesc pdf 描述搜索

  root #emerge --ask app-office/gnumeric  可安装对应的程序

  root #emerge --pretend gnumeric     可以查看安装的程序的依赖

  下载一个程序的时候,系统会自动下载一些必要的包并且自动解压缩安装。如果你不想这样做只想解压缩,那么

  root #emerge --fetchonly gnumeric  

 

1、portage的使用

   /usr/portage/profiles/use.desc  存放了全局的USE flag说明,/usr/portage/profiles/use.local.desc 存放了本地的USE flag说明。

  系统级的profile符号链接到/etc/portage/make.profile。有很多profile,最后输出的结果是他们的并集,最底层的profile在/usr/portage/profiles/base

  root #emerge --info | grep ^USE  查看现在已启用的USE flag   /etc/portage/make.conf 存放全局的USE flag,如果取消某个支持,在支持前面加上-

  修改/etc/portage/package.use的USE flag可以针对某个单独的程序,它可能是一个文件,也可能是一个文件夹。具体的详情请输入man portage查看。

  

dev-db/mysql berkdb

  root #USE="-java" emerge seamonkey  可以临时定义取消java支持在seamonkey安装期间。

  USE flag定义采用的优先级(从低到高排)

  1. 默认USE 设置定义在make.defaults 文件 作为你的 profile 的一部分
  2. 用户自定义 USE 设置 在 /etc/portage/make.conf
  3. 用户自定义 USE 设置 在 /etc/portage/package.use
  4. 用户自定义 USE 设置 在环境变量中 (上面例子)

  emerge --info  可以查看相关的USE信息

 

  修改USE flag后需要进行如下设置

  root #emerge --update --deep --newuse @world  更新USE flag完成后应该让它在系统中生效

  root #emerge --depclean 移除孤立的包,如果不想包被卸载,使用-p root #emerge -p --depclean 

  root #revdep-rebuild 重新编译动态链接库  它依赖 app-portage/gentoolkit ,不要忘了先emerge它

 

  root #emerge --pretend --verbose seamonkey检查包的依赖项 在app-portage/gentoolkit中有专门实现该功能的命令,举例,查询gnumeric包的依赖  root #emerge --ask app-portage/gentoolkit(安装)  user $equery --nocolor uses =gnumeric-1.6.3 -a(查询依赖)

 

  还有一种REQUIRED_USE表达式,来表明一组必须或者禁止的支持

REQUIRED_USE="foo? ( bar )"    如果foo被设置了, bar必须被设置
REQUIRED_USE="foo? ( !bar )"    如果foo被设置了,  bar必须没被设置.
REQUIRED_USE="foo? ( || ( bar baz ) )"        如果foo被设置了, bar 或 baz 必须没被设置.
REQUIRED_USE="^^ ( foo bar baz )" foo bar 或 baz恰好有一个必须被设置。
REQUIRED_USE="|| ( foo bar baz )"     foo bar 或 baz 至少有一个被设置
REQUIRED_USE="?? ( foo bar baz )"    不超过一个foo bar 或 baz 可能被设置。

 

2文档

  USE flag中添加doc可以支持安装时安装软件的文档。emerge -vp category/package 可查看文档安装情况

  文档默认安装在/usr/share/doc/目录下,有可以用app-portage/gentoolkit软件下的equery工具查看 user $ls -l /usr/share/doc/alsa-lib-1.0.14_rc1    user $equery files alsa-lib | less

 

3移除软件

  emerge --unmerge 可以移除软件,如果用户修改的配置文件那么配置文件是不会移除的。这是为了再次安装这个软件的时候不需要再次配置。被删除的时候Portage是不会检查是否有软件依赖的,因此需要小心谨慎  root #emerge --unmerge gnumeric,移除的软件安装的依赖如果需要删除,可使用emerge的--depclean方法。(上面介绍的)

  

4更新系统

  root #emerge --update --ask @world  更新系统已安装的应用程序包,它会比较已安装程序的版本号,已安装的程序信息在/var/lib/portage/world中,但是它并没有彻底的更新它们的依赖的包,如果想要更新依赖的包,那么可使用命令root #emerge --update --deep @world。但是这仍然不意味着所有的都被更新了,很多包在系统中是在编译和构建的过程中需要的,但是包一旦安装了,这些包就不再需要了。Portage称这些包为build dependencies如果需要这些包也在更新范围内,则使用root #emerge --update --deep --with-bdeps=y @world   如果USE被更新了,建议使用root #emerge --update --deep --with-bdeps=y --newuse @world Portage会检测或重编译他们。

  有的程序安装时会安装一系列的包,如 kde-apps/kde-meta会安装整个完整的KDE环境的依赖包。如果确保没用可以用emerge --unmerge来移除他们。Portage有方法来去除孤立的依赖包,但是由于软件的可用性是依赖于动态来评判的,首先完全的更新整个系统是很重要的。emerge --depclean可实现,执行完成后或许应该重新编译下,防止依赖移除的包。但是现在不需要了,这些功能已经添加到Portage里的。可以用下面的三句命令实现

  root #emerge --update --deep --newuse @world

  root #emerge --depclean

  root #revdep-rebuild

  revdep-rebuild 依赖包 app-portage/gentoolkit,不要忘了对它emerge   root #emerge --ask app-portage/gentoolkit

  查看包的协议 emerge --search package/category

  我们可以配置允许下载的协议在配置文件中

ACCEPT_LICENSE="* -@EULA"

  包在安装期间如果需要进行互动(关联)的包含有EULA协议就不会被安装。包如果不含有EULA协议的就可以被安装。也可以指定某个包的交互的包需要的协议 /etc/portage/package.license,例如为包www-client/google-chrome准许google-chrome协议,把下面添加到/etc/portage/package.license:

www-client/google-chrome google-chrome

tips:许可协议在目录 /usr/portage/licenses/下,授权组在目录/usr/portage/profiles/license_groups下,软件许可的第一行大写字母是授权组,后面的每行是单独的许可协议。

授权组定义在ACCEPT_LICENSE 变量中以@符号作为标记,普遍的要求设置只允许安装免费软件和文档。为了达成这个,移除所有的软件协议并只允许免费的组3

 ACCEPT_LICENSE="-* @FREE"

4.Blocked packages 

[blocks B     ] mail-mta/ssmtp (is blocking mail-mta/postfix-2.2.2-r1)
!!! Error: the mail-mta/postfix package conflicts with another package.
!!!        both cant be installed on the same system together.
!!!        Please use emerge --pretend to determine blockers.

  Ebuilds有两个字段告诉portage它的依赖,一个是 build dependencies,定义在DEPEND 变量中,另一个是run-time dependencies,一般定义在RDEPEND变量中。

解决冲突要么不去安装,要么去删除冲突的包。

5.Masked packages

!!! all ebuilds that could satisfy "bootsplash" have been masked.
!!! possible candidates are:
  
- gnome-base/gnome-2.8.0_pre1 (masked by: ~x86 keyword)
- lm-sensors/lm-sensors-2.8.7 (masked by: -sparc keyword)
- sys-libs/glibc-2.3.4.20040808 (masked by: -* keyword)
- dev-util/cvsd-1.0.2 (masked by: missing keyword)
- games-fps/unreal-tournament-451 (masked by: package.mask)
- sys-libs/glibc-2.3.2-r11 (masked by: profile)
- net-im/skype-2.1.0.81 (masked by: skype-eula license(s))

  当用户安装一个gentoo上不是可用的包的时候,就会出现。建议用户等包变为可用的时候再进行安装,下面是各种提示以及错误

Reason for mask
Description
~arch keyword The application is not tested sufficiently to be put in the stable branch. Wait a few days or weeks and try again.
-arch keyword or -* keyword The application does not work on your architecture. If you believe the package does work file a bug at our Bugzilla website.
missing keyword The application has not been tested on your architecture yet. Ask the architecture porting team to test the package or test it for them and report the findings on our Bugzilla website.
package.mask The package has been found corrupt, unstable or worse and has been deliberately marked as do-not-use.
profile The package has been found not suitable for the current profile. The application might break the system if it is installed or is just not compatible with the profile currently in use.
license The package‘s license is not compatible with the ACCEPT_LICENSE value. Permit its license or the right license group by setting it in/etc/portage/make.conf or in /etc/portage/package.license

6.必要的USE flag改变

The following USE changes are necessary to proceed:
#required by app-text/happypackage-2.0, required by happypackage (argument)
>=app-text/feelings-1.0.0 test

如果 --autounmask没有设置,那么错误的信息也可能如下 

emerge: there are no ebuilds built with USE flags to satisfy "app-text/feelings[test]".
!!! One of the following packages is required to complete your request:
- app-text/feelings-1.0.0 (Change USE: +test)
(dependency required by "app-text/happypackage-2.0" [ebuild])
(dependency required by "happypackage" [argument])

  报警或错误有时候并不一定是依赖的包的问题,也可能是必要的USEflag没有。如上面的例子就是表明,需要设置USE="test",但是系统中并没有设置。为了解决这个问题,在/etc/portage/make.conf中,或者具体到某个包的配置/etc/portage/package.use中,进行设置。

7.Missing dependencies

emerge: there are no ebuilds to satisfy ">=sys-devel/gcc-3.4.2-r4".
  
!!! Problem with ebuild sys-devel/gcc-3.4.2-r2
!!! Possibly a DEPEND/*DEPEND problem.

安装的应用的依赖的包不是可用的时候就会出现。

8.模棱两可的ebuild名字

[ Results for search key : listen ]
[ Applications found : 2 ]
  
*  dev-tinyos/listen [ Masked ]
      Latest version available: 1.1.15
      Latest version installed: [ Not Installed ]
      Size of files: 10,032 kB
      Homepage:      http://www.tinyos.net/
      Description:   Raw listen for TinyOS
      License:       BSD
  
*  media-sound/listen [ Masked ]
      Latest version available: 0.6.3
      Latest version installed: [ Not Installed ]
      Size of files: 859 kB
      Homepage:      http://www.listen-project.org
      Description:   A Music player and management for GNOME
      License:       GPL-2
  
!!! The short ebuild name "listen" is ambiguous. Please specify
!!! one of the above fully-qualified ebuild names instead.

选择的包的名称有多个相似的包,这个时候提供类别名称是个好的选择。

9.循环依赖

!!! Error: circular dependencies: 
  
ebuild / net-print/cups-1.1.15-r2 depends on ebuild / app-text/ghostscript-7.05.3-r1
ebuild / app-text/ghostscript-7.05.3-r1 depends on ebuild / net-print/cups-1.1.15-r2

两个包互相依赖~

10.匹配失败

!!! Fetch failed for sys-libs/ncurses-5.4-r5, continuing...
(...)
!!! Some fetch errors were encountered.  Please see above for details.

匹配失败,可能由于ebuild指向不正确或mirror没有同步。

11.系统配置保护

!!! Trying to unmerge package(s) in system profile. sys-apps/portage
!!! This could be damaging to your system.

用户删除的包是系统核心组成的一部分。不能被移除。

12摘要验证失败

>>> checking ebuild checksums
!!! Digest verification failed:

软件的签名和gentoo repository里的不匹配。通常,这是由于开发者提交包到tree里的时候犯了错误。通常解决办法就是等一两个小时,tree稳定下来,然后再次尝试。

 

13 USE flags是什么

  USE flags背后的思想是什么?

    由于各个环境的不同(生活,办公,开发),所以需要的特性也不同。如果不用openGL,那么为什么软件要加上对他的支持,编译安装的时候需要对它进行支持。它可以帮助用户决定哪些需要和哪些不需要,用户可以选择一个特定的环境以及配置简化流程。

  定义一个USE flags

    例如,当你USE flags里没有kde的话,那么安装软件时,kde将无法作为一个支持或者一个依赖就行安装,通过正确地定义关键字该系统将专门针对用户的需求定制。

  USE flags 存在什么

    有两种类型的USE flags:一种是global,一种是local。global全局的可使用USE flags在 main site中,在 /usr/portage/profiles/use.desc中找到。local本地的可使用USE flags在 main site中,可以在/usr/portage/profiles/use.local.desc中找到。

 

14 使用USE flags

  定义USE flags 

    root #emerge --info | grep ^USE    

USE="-kde -qt4 ldap"

    安装或移除相应的USE flags(global)

dev-db/mysql berkdb

    增加USE flags berkdb的支持对于mysql而言。(local) 移除用-

  定义临时使用的USE flags

    有时候我们需要在很短的时间里用到USE flags,这就需要我们设置 /etc/portage/make.conf 文件两次(添加和移除),此命令只在命令行里生效。

    下面是仅在seamonkey安装过程中移除对java的支持

    root #USE="-java" emerge seamonkey

  优先级

    下面最开始的拥有最低的优先级。

    1. 默认的USE设置定义在 make.defaults 文件中,作为你的profile的一部分
    2. 用户自定义的 USE 设置在 /etc/portage/make.conf
    3. 用户自定义的 USE 设置在 /etc/portage/package.use
    4. 用户自定义的 USE 设置 被当做环境变量

    为了查看最终的Portage USE设置,执行emerge --info命令,它会列出所有相关的变量(包括USE变量)关于他们当前自定义的Portage相关变量。

 

  新定义的USE flags 让它在整个系统中生效

    改变过USE flags之后,整个系统应该更新,以便映射到新的USE flags

    root #emerge --update --deep --newuse @world

    然后我们需要移除一些以前过时的依赖

    root #emerge -p --depclean  (做这个应该小心,需要确保被移除的依赖在其他的应用中没有使用到)、

    然后运行revdep-rebuild 来重新编译那些动态依赖库的程序,它依赖app-portage/gentoolkit,

    root #revdep-rebuild  现在系统已经在使用新的USE flags了

 

  包指定USE flags

    让我们以seamonkey为例,来看看它监听了哪些USE flags

    root #emerge --pretend --verbose seamonkey
      These are the packages that I would merge, in order:
  
      Calculating dependencies ...done!
      [ebuild   R   ] www-client/seamonkey-1.0.7  USE="crypt gnome java -debug -ipv6
      -ldap -mozcalendar -mozdevelop -moznocompose -moznoirc -moznomail -moznopango
      -moznoroaming -postgres -xinerama -xprint" 0 kB

     app-portage/gentoolkit 有个专门用来实现这个功能的工具

    root #emerge --ask app-portage/gentoolkit

    

    一些包,必须或者禁止某些USE flags,这些都是通过变量REQUIRED_USE表达式来实现的。

      

ExampleDescription
REQUIRED_USE="foo? ( bar )" If foo is set, bar must be set.
REQUIRED_USE="foo? ( !bar )" If foo is set, bar must not be set.
REQUIRED_USE="foo? ( || ( bar baz ) )" If foo is set, bar or baz must be set.
REQUIRED_USE="^^ ( foo bar baz )" Exactly one of foo bar or baz must be set.
REQUIRED_USE="|| ( foo bar baz )" At least one of foo bar or baz must be set.
REQUIRED_USE="?? ( foo bar baz )" No more than one of foo bar or baz may be set.

 

15.Portage 的特性

    portage有许多特写让gentoo变得更加的好,许多特性都依赖于某个具体软件去提升它的性能,可靠性和安全性。

    启用关闭某个portage特性,编辑/etc/portage/make.conf。更新或设置 FEATURES变量,它已经有了许多特性关键词,被空格分割。在许多场景中,特性依赖的附加工具被安装是很有必要的。

    为了有个完整的浏览,请查阅:

    user $man make.conf

    为了找出FEATURES的默认设置,运行 emerge --info ,匹配FEATURES

    user $emerge --info | grep ^FEATURES=

 

16.分布式编译

    使用distcc

      distcc是通过在服务器上分布式编译的一个项目。它能将源代码分片进行编译。更多的内容可以访问  Distcc 

    安装distcc

      

gentoo Portage使用