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

杨树叶子的博客

 
 
 

日志

 
 
 
 

Debian维护工具之APT-1  

2006-12-20 09:59:02|  分类: Linux |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
Debian 维护工具之 APT
etony C.F.AN etony@tom.com
v0.0.1, 2006-3-30
--------------------------------------------------------------------------------
本文档是针对 Debian GNU/Linux 的 APT 工具做一般性介绍, 希望 Linux用户对于 Debian 有个较为深刻的了解.
--------------------------------------------------------------------------------
1. 声明
版本信息:
本文档的最新版本将张贴于: LinuxSir.Org论坛 Debian发行版讨论区;
也可以从 http://debian.linuxsir.org/获取.
反馈:
所有评论, 错误报告, 其他信息以及批评, 请邮寄到 etony@tom.com ;
或在LinuxSir.Org论坛 Debian发行版讨论区 张贴.
版权信息:
本文档的版权(c)2006-2007 归 etony C.F.AN 所有.
转载请注明源自 http://debian.linuxsir.org/.

2. 基本概念
dpkg 功能十分的强大, 是它保证了系统的稳定性. 但是随着 GNU/Linux的日益普及, Debian 操作系统的广泛应用, dpkg在操作上日益显示出它的不足之处. APT (高级软件包工具 AdvancedPackage Tool)很好的解决了这一难题, 它功过抽取软件包中的相关信息,给出相关操作的优化方案, 确定解决请求所需软件包, 从资源库下载,根据需求在本地系统安装和删除软件包.
dpkg 采取的方式较为保守,当发现进一步操作可能会将问题引入系统时(比如使系统中出现了不能满足依赖关系的软件),将拒绝执行这一操作(默认方式), APT则会根据出现的问题,智能的给出解决方案, 并继续进行操作. 比如,安装操作出现依赖关系时,dpkg 会拒绝操作, APT 则不同,将会自动安装这些依赖包以完成安装请求.
APT 提供另一个简单的命令行方式, 与 dpkg 不同, 其本身不会处理.deb 文件, 而是智能从资源库下载, 然后调用 dpkg 仅此处理. APT 是dpkg 的一个智能前端.
3. 基本配置
apt 通过名称和版本来在确定一个软件包,这些信息通常是通过资源库中提供的 Packages.gz (如果是源代码则是Source.gz)来抽取来的(通过 apt-get update 获取).通常如果出现重复的软件包, 则第一个有效. 这些资源库在etc/apt/sources.list/ 中定义.
3.1 自动配置
在基本系统中提供了一个用于自动配置资源列表的工具: apt-setup. 由base-config(现在仅在 sarge 中提供) 软件包中, 可以通过
#base-config
调用, 或者直接运行
#apt-setup
进行配置.
3.2 手动配置
资源库在 /etc/apt/sources.list 中用就象如下行定义:

 deb    ftp://some-server/debiansarge main contrib
 deb-src ftp://some-server/debian sarge maincontrib
 

与网站有如下对应关系:

        ftp://some-server/debian/dists/sarge/main/binary-i386/...
        ftp://some-server/debian/dists/sarge/contrib/binary-i386/...
        ------------------------      ----- |   |
                    \___                /  |   |
      add:             \              /   |   |
            ------------------------ -----  |   |
        deb ftp://some-server/debiansarge main contrib

当然上边的网站是假设的, 不可用的.应当选择您连接速度最快的镜像地址替换. Debian 官方镜像列表可以 从http://www.debian.org/mirror/list处获取, 也可从 /var/lib/apt-spy/mirrors.txt(apt-spy 提供)得到.至于私有资源则需要通过别的途径获取.
在 /etc/apt/sources.list 中, 每行为一条记录, 定义一个资源库.其具体语法在 sources.list(5)联机手册中有详细介绍.每条记录至少包括三个字段, 共同组成资源定位.这些字段是:

软件包类型
deb 指二进制软件包. 要访问软件包源代码, 则必需用 deb-src代替.
资源URI
统一资源标识符(URI)用于指定资源库,可以使用下边任意一种方式访问:
cdrom, file, copy, http, ftp, ssh
发行版(distribution)
在标准的镜像中, 这一字段使用规范名称(如 stable )或代号(如 sarge)来关联 Debian 的发行版.
构成
用于关联一个发行版的组成部分, 对应官方镜像,相当于软件库(如每个条目的其余部分用于关联一个发行版提供的组成部分.对于官方镜像,这相当于软件库(如main, contrib), 对于非官方资源库,组成部分的关联方式可以由管理员自己定义. APT会为每个构成创建单独的URI. 因此, 正常的发行版至少需要一个组成部分.

在修改 sources.list 后或安装软件前, 需要对APT进行更新, 就是运行apt-get uodpate 获取各种 Packages 文件, 它的位置是通过/etc/apt/sources.list 中的记录来指定的.每个提到构成都有一个对应的Packages 文件.
3.3 优化资源
apt-spy 方式
Debian 在互联网上有庞大的镜像群, 有超过 100 个提供了全部Debian 归档库的官方镜像. 另外, 还有很多大学和机构提供非官方镜像,因此使用附近的还是不错的. 我们将哪些镜像加入我们的 sources.list文件呢? 当然是速度最快的! Debian为我们提供了一个用户测试镜像速度的工具 apt-spy (由 apt-spy 提供).这样有利于有效的利用带宽, 节省下载时间.
可以从 http://www.debian.org/mirror/list(由于某种原因, 您可能无法访问)处获取获取完整的镜像列表. 也可以从 tt/var/lib/apt-spy/mirrors.txt / ( apt-spy 提供)找到一个副本.
apt-spy 通过对列表进行测试, 根据带宽和回应速度,找出其中最快的一个, 并将结果自动保存到 /ect/apt/sources.list中.

#apt-get install apt-spy
#mv sources.list sources.list.bak //backup
#man apt-spy //获取详细的使用方法
#apt-spy update //更新您的镜像列表文件/var/lib/apt-spy/mirrors.txt

可将测试限制在一个国家或区域内, 提供限制测试服务器个数的选项, 等等.另外, 区域也可以在 /etc/apt-spy.conf 中定义.可以通过下边的命令找出亚洲区速度最快的镜像,并生成针对 testing的记录:

# apt-spy -d testing -a Asia
上边的测试大概每个服务器需要用一分钟的时间, 这个也可以使用 -t选项控制. 有关这一选项的详细信息请阅读 apt-spy(8) 联机手册.
netselect-apt 方式
netselect-apt 会创建一个更完整的 sources.list 文件,但它使用更落后的方法来选择镜像站点:

#apt-get install netselect-apt
#mv sources.list sources.list.bak //backup
#man netselect-apt //获取详细的使用方法
# netselect-apt -s testing
//下载 http://www.debian.org/mirror/list-full文件,并根据其内容测试网络, 生成 sources.list

也可将下载 http://www.debian.org/mirror/list-full手动下载到本地, 并同过参数 -i 指定. 同样可以通过 -o参数指定输出文件而不是默认的 sources.list
4. APT 的配置
APT 的很多方面都是可以定制的.事实上,在 /etc/apt/apt.conf 文件中,您可以修改大多数命令行选项的默认值. 配置参数使用 名称 - 值对,根据用途被分为几组. 组名在参数前边用 "::" 分割.tt apt.conf(5)联机手册有相关语法介绍. 其它项目在对应命令的联机手册中有所描述(如tt apt.get(1) 和 tt apt-cache(1) ). 比如:

APT::Default-Release "testing";

//在使用混合系统时, 设定默认下载的版本

APT::Get::Assume-Yes "true";

//如果在安装/卸载过程中出现询问, 应答为 y
如果在使用aptitude、apt-get 或 dpkg 时出现如下错误

E: Dynamic MMap ran out of room

可以在apt.conf中加入:

APT::Cache-Limit "12500000";

以重新设定缓存区大小.
访问资源库需要代理, 则可以加入类似下边的内容:

APT还提供了三个钩子程序, 用于在 dpkg 阶段调用.它们分别是Pre-Invoke, Post-Invoke, Pre-Install-Pkgs.

DPkg::Pre-Invoke {"mount -o remount,rw /usr";};
DPkg::Post-Invoke {"mount -o remount,ro /usr";};
DPkg::Pre-Install-Pkgs {"dpkg-preconfigure --apt --priority=low--frontend=dialog";};

/usr/share/doc/apt/examples/apt.conf,/usr/share/doc/apt/examples/configure-index.gz 中给出详细的例子,可以用于参照.
5. 安装
当发出安装请求时,apt 会根据其优化算法, 求解出最佳安装方案,来完成用户的请求. 比如:

debian:~# apt-get install xchat
Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
  defoma fontconfig libatk1.0-0 libfontconfig1libgtk2.0-0 libgtk2.0-bin
  libgtk2.0-common libpango1.0-0libpango1.0-common libperl5.8 libtiff4
  libx11-6 libxcursor1 libxext6 libxft2 libxi6libxrandr2 libxrender1 tcl8.4
  ttf-bitstream-vera xchat-common xfree86-commonxlibs-data
Suggested packages:
  defoma-doc psfontmgr x-ttcidfont-conf dfontmgrttf-kochi-gothic
  ttf-kochi-mincho ttf-thryomanes ttf-baekmukttf-arphic-gbsn00lp
  ttf-arphic-bsmi00lp ttf-arphic-gkai00mpttf-arphic-bkai00mp tclreadline
  libnet-google-perl x-window-system-corex-window-system
Recommended packages:
  libft-perl libatk1.0-datahicolor-icon-theme
The following NEW packages will be installed:
  defoma fontconfig libatk1.0-0 libfontconfig1libgtk2.0-0 libgtk2.0-bin
  libgtk2.0-common libpango1.0-0libpango1.0-common libperl5.8 libtiff4
  libx11-6 libxcursor1 libxext6 libxft2 libxi6libxrandr2 libxrender1 tcl8.4
  ttf-bitstream-vera xchat xchat-commonxfree86-common xlibs-data
0 upgraded, 24 newly installed, 0 to remove and 1 notupgraded.
Need to get 12.5MB of archives.
After unpacking 39.1MB of additional disk space will be used.
Do you want to continue? [Y/n]

APT 下载软件时是根据 /var/lib/apt/lists 下的 _Packages 文件,来获取软件的详细定位的, 而这些 _Packages 文件是通过命令:

#apt-get update
命令从 sources.list 中声明的顺序从资源库中获取的. 这一命令将对Packages 索引文件进行更新. 因此, 在安装软件前, 或在修改sources.list 后, 应该进行 apt-get update 操作.
每天运行, 或经常运行这一命令, 是个良好的习惯. APT同时会清除/var/lib/apt/lists 目录下没有在 /etc/apt/sources.list中声明的资源文件. 如果你使用--no-list-cleanup(APT::Get::List-Cleanup),APT将会保留这些文件,如果您只是在 sources.list 中临时禁用一条资源,这样还是比较方便的; 当再次启用这条资源时, 就不需要重复下载 APT的资源文件了.
在安装的时候您可以通过使用 --print-uris选项将这些信息输出到屏幕. 比如:

#apt-get install --print-uris  nano-tiny
Reading Package Lists... Done
Building Dependency Tree... Done
The following NEW packages will be installed:
  nano-tiny
0 upgraded, 1 newly installed, 0 to remove and 1 notupgraded.
Need to get 87.8kB of archives.
After unpacking 123kB of additional disk space will be used.
'http://ftp.us.debian.org/debian/pool/main/n/nano/nano-tiny_1.2.4-5_i386.deb'
nano-tiny_1.2.4-5_i386.deb 8778607794bf630d1a9dffdf85917a9e39968

注意 后边的 07794bf630d1a9dffdf85917a9e39968 这是nano-tiny_1.2.4-5_i386.deb 的 MD5 编码, 将用跟从 Packages中获取的对应 MD5 编码相比对. 只有 MD5 编码相匹配时, 才会安装.当出现不一致时, APT 会报告 MD5 不匹配,并拒绝安装或升级软件包.
您也可以仅仅模拟一下, 而不是真正的安装:

#apt-get install nano-tiny -s(--simulate)
如果您仅需要获取 .deb, 而不是装, 则可以

#apt-get install nano-tiny -d(--download-only)
假如你不小心损坏了已安装的软件包而想修复它,或者仅仅想安装软件包中某些文件的最新版本, 这是可以做到的, 你可以用--reinstall 选项:

# apt-get --reinstall install nano
如果您使用的是混合源, 也可指定发行版安装:

# apt-get install nano/testing
解决依赖问题
当出现依赖问题时, APT 会努力做出最好的的选择.作为解决依赖问题的一部分, APT 为了尽可能的完成用户的请求,会首先卸载已经安装的冲突的软件包. 无论何时,在进行用户请求的附加操作时, apt-get在提示了对所选择软件包将要做的的变更后, 都会请求用户的确认.这是为了防止不小心卸载了冲突的软件包, 或引入更严重的依赖问题.如果不需要额外的操作, APT 将不会给出提示.
通过设置 APT::Get::Show-Upgradeed 为 true,可以让APT每次都提示确认. 同样, 设置 APT::Get::Assum-Yes 为 true,或在APT的命令行指定 -y 选项, APT 将绕过确认, 继续操作.请避免使用这一选项;确认对于生产应用系统来说是个好事情. 有时,一个软件包会依赖于其它一组软件包中的任意一个. 比如:

debian:~# apt-cache depends mailx
mailx
  Depends: libc6
  Depends: liblockfile1
 |Depends: exim4
  Depends: <mail-transport-agent>
   courier-mta
   esmtp-run
    exim
   masqmail
   nullmailer
   postfix
   sendmail-bin
    ssmtp
    xmail
   exim4-daemon-heavy
   exim4-daemon-light
  Depends: base-files
  Conflicts: <suidmanager>

mailx 依赖于能够提供 邮件传输代理的任一个软件包, 在默认情况下会安装exim4, 除非您明确指定:

#apt-get install mailx postfix
  评论这张
 
阅读(131)| 评论(0)

历史上的今天

评论

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

页脚

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