注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

学习笔记

正确的方法如同学习书法,开始的时候要临摹,临摹好了然后创造自己的风格。

 
 
 

日志

 
 

[Gentoo/linux笔记]Portage入门  

2011-04-21 21:33:04|  分类: Gentoo/linux |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
From: http://www.gentoo.org/doc/zh_cn/handbook/handbook-x86.xml?part=2&chap=1

1. 欢迎使用Portage

       Portage可能是Gentoo在软件包管理方面最瞩目的创新。它所具有的高度灵活性以及其他大量的特性,使其经常被认为是Linux中最好用的软件包管理工具。Portage完全用Python和Bash写成。由于它们均为脚本语言,所以Portage对于用户而言也就是完全可见的。

       绝大部分用户将通过emerge工具来使用Portage。本章节的目的不是在重复emerge的man page里已经提供的内容,如果要完整的了解emerge工具提供的选项,请参考其man page里给出的相应说明。

      

代码 1.1: 获取emerge的帮助信息

$ man emerge



2. Portage树

2.1 Ebuilds

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

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



2.2 更新Portage树

       通常我们使用rsync命令来更新Portage树,它是一个快速的增量性的文件传输工具。另外emerge命令为rsync命令提供了一个相当简单的前端。

代码 2.1: 更新Portage树

# emerge --sync

       如果由于防火墙的限制,您无法进行rsync操作,您仍然可以通过下载我们每天汇总的Portage树快照来更新本地的Portage树。emerge-webrsync命令会自动将最新的Portage快照下载并安装到您的系统中。



代码 2.2: 运行emerge-webrsync

# emerge-webrsync



3. 软件包维护

3.1 软件的查询

       要在Portage树中查找指的的软件,您可以使用emerge命令里内建的查找功能。默认情况下,emerge --search会返回那些名字与您指定(无论完整或部分)的名字匹配的软件包。

       例如,要查找那些名字中包含“pdf”字样的软件:

      

代码 3.1: 查找名字包含pdf的软件包

$ emerge --search pdf

       而如果要通过软件的描述来查找相应的软件,您可以使用--searchdesc (或者简写为 -S) 开关:



代码 3.2: 查找与pdf相关的软件包

$ emerge --searchdesc pdf



3.2 软件的安装

       每当您找到一个感兴趣的软件,您可以轻松地用emerge命令安装它。例如,要安装gnumeric:



代码 3.4: 安装gnumeric

# emerge gnumeric

       因为许多应用程序互相依赖,试图安装其中任何一个,可能将会要求同时安装其所依赖的其他相关软件。无需担心,Portage可以很好地处理软件包间的依赖问题。当您安装某个软件的时候,您可以加上--pretend开关,以便观察Portage将会同时安装哪些软件。例如:



代码 3.5: 假装安装gnumeric

# emerge --pretend gnumeric

       当您要求Portage安装一个软件的时候,必要时它会自动从internet下载相应的源代码包并默认将其保存在/usr/portage/distfiles目录中,然后将源代码包解压缩,编译并安装软件。如果您仅仅希望Portage将源代码包下载到本地而不安装它们,在emerge命令后加上--fetchonly的选项:



代码 3.6: 下载gnumeric的源代码包

# emerge --fetchonly gnumeric



3.3 查找已安装软件的文档

       许多软件包中包含有自己的文档,有些时候doc的USE标记决定了软件包中的自带文档是否会被安装到本地。您可以通过emerge -vp <软件包名称>命令来检查是否存在doc USE标记。

      

代码 3.7: 检查是否存在doc的USE标记

(当然alsa-lib只是一个例子。)

# emerge -vp alsa-lib

[ebuild  N    ] media-libs/alsa-lib-1.0.14_rc1  -debug +doc 698 kB

       最好的启用doc的方式是在/etc/portage/package.use里对想要启用的包单独启用,这样你就能只获得你想要的软件文档。全局启用此标记已知会导致循环依赖。欲了解更多信息请看USE标志一章。

       当一个软件包安装结束后,它的文档通常会存放在/usr/share/doc目录下以软件包名命名的子目录中。您也可以通过equery工具来列出此软件安装后生成的所有文件,这个工具来自于app-portage/gentoolkit 包。



代码 3.8: 定位包的文档

# ls -l /usr/share/doc/alsa-lib-1.0.14_rc1

(或者使用equery来定位您感兴趣的文件:)

# equery files alsa-lib | less



3.4 软件的移除

       当您想把一个软件包从系统中移除的时候,使用emerge --unmerge命令。命令执行完成后,除了那些在安装软件包后您修改过的配置文件,Portage将会移除此软件包安装到您系统中的所有文件。保留这些修改过的配置文件是为了便于您今后再次使用同一个软件包。

       不过,您需要特别注意的是:Portage将不会检查您要删除的包是否仍被其他的包依赖。但是当您要删除一个可能破坏您系统的重要的软件包时,它还是会给予警告。



代码 3.9: 从系统中删除gnumeric

# emerge --unmerge gnumeric

       当您从系统中移除一个软件包时,之前那些为了满足其依赖关系而自动被一并安装的软件包将会被保留。如果想让Portage找出那些现在可以移除的相关软件包,可以使用emerge的--depclean功能。



3.5 更新您的系统

       要保持您系统在最佳状态(更不用说安装那些最新的安全更新),您需要定期的更新您的系统。由于Portage只能检查本地Portage树中已有的ebuilds文件,因此您首先应该更新您的Portage树。当您的Portage树更新后,您可以用emerge --update world命令来更新系统。

代码 3.10: 更新您的系统

# emerge --update --ask world

       Portage接下来会查找您已经安装的软件包是否有更新版本,但它只会核对那些您已经明确地安装过的软件包(也就是在/var/lib/portage/world文件中列出的包),并不会完整去的检查与这些软件产生依赖关系的包是否也需要更新。如果您想更新系统中的每个软件包,那就加上--deep参数:

代码 3.11: 更新整个系统

# emerge --update --deep world

       因为有时开发者会为那些您没有明确要求安装(但被其他软件包依赖而装入系统中)的包推出安全更新,我们也推荐偶尔运行一下这个命令。每当您改变了系统中任何的USE标记后,您可能需要加入--newuse选项。这样Portage将会检查这个USE标记的变动是否导致需要安装新的软件包或者将现有的包重新编译。

代码 3.12: 执行完整更新

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



3.6 Meta软件包

       Portage树中的一些软件包并没有包含任何实际的内容,而只是用来安装一系列软件包的集合。例如,kde包就是一个包含了一系列与KDE相关的互相依赖的软件包的集合,您可以通过安装它来在系统中搭建起一个完整的KDE环境。

       如果您试图从系统中移除一个这样的软件包的集合体,只是单纯地使用emerge --unmerge命令并不能完成您的要求,原因在于这些包的依赖关系仍然保留在系统中。

       不用担心,Portage也提供了移除孤立依赖的软件包的功能,但由于软件包间的依赖关系是动态的,您首先需要充分地更新您的整个系统,包括更改USE标记设定而导致的变化。在这之后您可以运行emerge --depclean来移除那些完全没有被其他包依赖的软件包(“orphaned dependencies”)。移除之后你需要重新编译那些曾经与刚刚移除的这些包动态连接过的应用程序,因为实际上这些程序不需要那些包。

       所有这些可以用以下三个命令来实现:

代码 3.13: 移除孤立依赖的软件包

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

# emerge --depclean

# revdep-rebuild

       revdep-rebuild工具由gentoolkit包提供;使用前别忘了首先emerge它:

代码 3.14: 安装gentoolkit包

# emerge gentoolkit
  评论这张
 
阅读(1115)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018