学习使用apt
简介:
最初只有.tar.gz软件包的时候,我们不得不自己来编译自己要在Gnu/Linux系统上使用的程序.当Debian出现以后,他认为必须在系统中包含一个可以管理我们已经在我们的机器上安装了的软件包的方法.这个系统被命名为dpkg.所以著名的包第一次走进了Gnu/Linux的系统,这要比Red Hat决定开发他们自己的rpm包管理系统要早很长的一段时间.
然而一个新的困境摆在了Gnu/Linux的开发者的面前.他们需要一个快速而有效的软件包安装方法,而这样的软件包安装方法可以自动的解决软件包的依赖关系并且可以在升级时小心的处理他们的配置文件.而Debian解决了这样的问题,从而导致了APT的产生,高级包管理工具(Advanced Packaging Tool
第二章基本配置
2.1 /etc/apt/sources.list文件
作为操作的一部分,APT使用一个列出了可以从哪里得到软件包的源文件.这个文件就是/etc/apt/sources.list.
整个文件在通常情况下是如下的格式:
deb http://host/debian distribution section1 section2 section3
deb-src http://host/debian distribution section1 section2 section3
当然上面的只是假想的而不可以真正的使用.每一行的第一个单词,deb或是deb-src,表明了文档的类型:他或者是可以包含二进制包(deb),也就就是我们通常使用的预编译包,或者是源码包(deb-src),这些包是原始的程序源码包括Debian控制文件(.dsc)和diff.gz,包含Debian组织程序时所需要的变更.
我们通常会在Debian默认的sources.list看到下面的设置:
这些行是Debian系统安装时的基本需要.第一行deb指出了官方的文档,第二行指非US文档而第三行是指Debian的安全更新.最后两行是注释(以#开头),所以apt-get会忽略他们.这些是deb-src行,也就是他们指出了Debian的源码包.如果我们要经常下载程序源码包来测试或是重编译,就不要注释他们.
/etc/apt/sources.list文件包含几种类型的行.APT知道如何来处理http,ftp,file以及ssh类型的文档.
在我们修改了这个配置文件以后一定要记得运行apt-get update.我们必需要这样的做来使得APT得到我们所指定源的软件包列表.
2.2如何使用本地APT
有时我们会有许多的.deb软件包,而我们希望可以使用APT来安装这些软件包,因为这样就可以在处自动解决软件包之间的依赖问题.
要这样的做,我们要创建一个目录,然后将我们要索引的.deb软件包放入其中.例如:
# mdkir /root/debs
我们可以使用一个override文件来修改软件包的控制文件的定义集来使用我们自己的软件储存所.在这个文件中,也许我们要定义一些选项来覆盖软件包自带的信息.他是如下的形式:
package priority section
package是软件包的名字,priority可以是low,medium或是high,而section是他所属的部分.我们可以不在意思文件的名字,我们要在一会将文件名字作为参数传给dpkg-scanpackages程序.如果我们不想在使用dpkg-scanpackages程序时写override文件,我们可以使用/dev/null.
在/root目录下,我们执行下面的命令:
#dpkg-scanpackages debs file | gzip > debs/Packages.gz
在上面的这个命令中,file是override文件,这个命令产生了一个Packages.gz文件,在这个文件名包含了关于这些软件包的各种各样的可以被APT使用信息.要最后使用这些软件包,我们要在我们的配置文件中加入下面的内容:
deb file:/root debs/
这样以后我们就可以像平常使用APT命令一样来使用了.我们也可以产生源码库.要这样做可以使用同样的步骤,但是要清楚的就是我们要在这个目录中使用.orig,.tar.gz,.dsc和.diff.gz文件,而我们要使用Sources.gz而不是Packages.gz文件.而我们要使用的程序也是不同的,我们要使用的是dpkg-scansources .如下面的命令形式:
#dpkg-scansources debs | gizp > debs/Sources.gz
在这里我们要注意dpkg-scansources程序并需要override文件.而配置文件如下:
deb-src file:/root debs/
2.3决定在配置文件中哪一个是最好的镜像:netselect,netselect-apt
一个经常困挠初学者的问题是:在配置文件中包含哪个Debian镜像?.有许多方法决定哪个镜像.有许多的方法可以决定使用哪一个镜像.有经验也许会有一个脚本来检测各个不同的镜像的测试时间.但是现在可以有一个程序来帮助我们完成这样的工作了:netselect.
要安装netselect,我们可以像平常一样的安装:
#apt-get install netselect
不指定任何参数的来运行他可以得到一个帮助的信息.指定一个由隔分开的主机列表(镜像)作为参数来运行这个程序就会返回一个主机名及其得分.这样来估计下载的速度.(当然是得分越低越好的).返回的主机就是得分最低的镜像(所有的得分的列表可以由-vv选项列出).如下面的例子:
# netselect ftp.debian.org http.us.debian.org ftp.at.debian.org
download.unes365 ftp.debian.org.br
从这里我们可以看到,在我们作为参数来运行这个程序的几个镜像中,ftp.debian.org.br是最好的.
现在我们就可以将这个由netselect程序找到的最好的镜像放在我们的/etc/apt/sources.list文件中.然后我们就可以像平常一样的来使用apt命令来管理我们的软件包了.
注意:镜像列有也可以在http://www.debian.org/mirror/mirrors_full找到.
从0.3.ds1版本开始,netselect源码包包含了netselect-apt二进制包,这个程序包可以自动完成上面的操作.我们在这里只要输入发行版本树作为参数(默认的为稳定版本),这样sources.list文件就可以由最好的main和non-US镜像来生成并保存在当前目录下.下面的例子会生成一个稳定版本的发行版本的sources.list文件:
# netselect-apt stable
在这里我们要记住就是生成的sources.list文件位于当前的目录下,然后我们要将其移动到/etc/apt目录.
然后我们就可以像平常一样的来运行apt命令了.
2.4在sources.list文件中添加CD-ROM
如果我们要使用apt来自动的使用光盘来安装软件包或是更新系统,我们可以在我们的配置文件中加入CD-ROM.要这样做,我们可以以下面的方式来运行apt-cdrom程序:
#apt-cdrom add
如果他是一个正常的Debain CD,apt就会挂载上他并且查找软件包的信息.如果我们的CD-ROM的配置有一些不同,我们可以使用下面的一些选项:
-h 程序帮助
-d directory CD-ROM挂载点
-r 重命名已识别的CD-ROM
-m 不挂载
-f 快速模式,不检查包文件
-a 通过扫描模式
例如:
#apt-cdrom -d /home/kov/mycdorm add
我们也可以指定一个CD-ROM,但是却并不把他添加到我们的配置列表中:
#apt-cdrom idnet
在这里我们要注意就是只我们的CD-ROM在系统的/etc/fstab中正确的配置了这个程序才可以正常的工作.
第三章
管理软件包
3.1更新软件包列表
包管理系统使用一个私有的数据库来记录安装了哪些软件,未安装哪些软件包以及哪些软件包可以获得安装.apt-get程序使用这个数据库来查找要如何安装用户所请求的软件以及查找要使选中的软件包正常的工作要安装哪些额外的软件包.
要更新这个列表,我们可以使用apt-get update命令.这个命令会在/etc/apt/sources.list的文档中查找软件列表.
一个被认为比较好的方法就是经常的运行这个命令以使得我们的系统及时得到软件包的更新信息,尤其是一些安全更新.
3.2安装软件包
最后的就是我们正等待的过程.如果我们已经准备好了我们的sources.list文件并且可以获得的软件列表也已经得到了更新,那么我们所要做就是运行apt-get命令来安装我们需要的软件包.例如:
# apt-get install xchat
APT就会查找数据库以得到最新的软件包并从相应的文档处取回软件包.如果这个软件包要依赖其他的软件包,APT就会检查依赖关系并自动的安装所需要的软件包.
下面是一些有用的apt-get选项:
-h 本帮助文档。
-q 让输出可作为日志 - 不显示进度
-qq 除了错误外,什么都不输出
-d 仅仅下载 - 【不】安装或解开包文件
-s 不作实际操作。只是依次模拟执行命令
-y 对所有询问都作肯定的回答,同时不作任何提示
-f 当没有通过完整性测试时,程序仍试图继续执行
-m 当有包文件无法找到时,程序仍试图继续执行
-u 显示已升级的软件包列表
-b 在下载完源码包后,编译生成相应的软件包
-V 显示详尽的版本号
在一行也许会选中多个软件进行安装.从网络上下载的文件会放在/var/cache/apt/archives目录中以备以后的安装.
我们也可以在同一个命令中指定要删除的软件包.只要在我们要删除的软件包名称后面加上一个'-'就可了.如下面的命令:
# apt-get install nautilus gnome-pane-
如果我们损坏了一个安装包或是我们只要简单的要软件包中的文件用可以得到的最新版本的来重新安装,我们可以使用--reinstall选项,如下面的命令:
# apt-get --reinstall install gdm
3.3删除软件包
如果我们不再需要一个软件包,我们可以用APT从我们的系统删除他.要这样做我们只需要输入:apt-get remove package命令.如下面的例子:
# apt-get remove gnome-panel
APT也会十分的小心的来处理那些依赖于我们要求要删除的软件包.使用APT并没有办法来删除一个软件包而不删除那些依赖于他的软件包.
我们以上面的方式来运行上面的命令时只是删除相应的软件包而他们的配置文件仍存在于系统上.要完全的删除一个软件包我们可以运行下面的命令:
# apt-get --purge remove gnome-panel
正如我们在install的方法一样,我们也可以在remove方法中转换一个软件包的含义.在删除的情况下,如果我们在软件包的名字后面放上一个'+',这个软件包就会被安装而不是删除.
3.4更新软件包
软件包的更新是APT系统的一个巨大的成功之处.这个可以通过单一的命令:apt-get upgrade来实现.我们可以使用这个命令在同一个发行版本中进行软件包的更新,也可以更新到一个更新的版本,而后者要引用apt-get dist-upgrade命令.
运行这个命令时加上-u选项是很用的.这样APT就会列出将要更新的软件包列表.如果我们不加这个选项,就不会看到这些信息而只是完成软件的更新工作.APT会下载每一个最新版本的软件包并且以正确的顺序进行安装.在我们运行这个命令之前运行apt-get update是非常重要的.
这个更新的过程是相当的简单的.但是有时在我们更新的前几行显示一些软件包会kept back.这就意味着有这些软件包的新版本,但是却由于某些原因而不会安装这些软件包.可能的原因也许就是不会满足依赖关系.也许是他所依赖的软件包没有相应的版本可以下载或是新的依赖关系,也就是说自上一个版本以来又有了新的依赖关系.
对于前一种情况并没有一个好的解决办法,而对于后一种情况就会提示来下载相应的依赖关系.一个更好解决办法就是用dist-upgrade.
3.5更新到新版本
APT一个重要的特征就是我们可以利用网络或是安装光盘一次更新整个系统.
当我们安装软件包而软件包的依赖关系发生了变化时也会用到这样的命令.使用apt-get upgrade 时,这些软件包会保持不变.
例如如果我们正在使用一个稳定的Debain发行版本,而我们现在买了一个更高版本的Debain安装光盘.我们可以使用APT用这些安装光盘来更新我们的系统.要这样做,先使用apt-cdrom命令将光盘写入配置文件中,然后运行apt-get dist-upgrade命令.
在这里我们要注意的很重要的一点就APT总是寻找最近版本的软件包.所以如果在我们的配置文件中列出的文档中有比我们的光盘上的软件包更新版本的软件包,APT就会从那里下载相应的软件包.
要了解保持或是删除的软件包我们可以用下面的命令:
# apt-get -o Debug::pkgProblemResolver=yes dist-upgrade
3.6删除不用的软件包:apt-get clean和autoclean
当我们安装软件包APT会从相应的主机下载需要的软件包存放在我们的本地目录中(/var/cache/apt/archives/),然后执行安装进程.
随着时间的推移这个本地的软件包库会不断的增长并会占用大量的磁盘安间.幸好APT提供了管理本地软件包库的方法:apt-get clean和autoclean.
apt-get clean会删除那些在目录/var/cache/apt/archives/和/var/cache/apt/archives/partial/中的锁定文件之外的所有的文件.这样如果我们要重新安装一个软件包APT就要再一次将他们取回来.
而apt-get autoclean只会删除那些不会再下载的软件包.
3.7用dselect使用APT
dselect是一个帮助用户选择要安装的Debain 软件包的程序.他被认为是一个相当的复杂和乏味的,但是实际的使用之后你就会熟悉这个基本文本界面程序了.
dselect的一个特征就是他知道如何来处理Debain软件包推荐和建议安装的软件包之间的兼容性.要使用这个程序,要以root身分来运行dselect.选择apt作为我们的方法.这个并不是必须的,但是如果我们并没有使用光盘而我们要从网络上下载我们要安装的软件包,最好的方法就是使用dselect.
如果我们要使用dselect,我们可以用下面的命令:
# apt-get -u dselect-upgrade
3.8如何保持一个混合的第统
有时人们比较感兴趣的是可以使用一个Debain的版本作为系统的主机版本却使用其他分支的软件包.
要设置Debain的主版本我们要编辑/etc/apt/apt.conf文件(在通常的情况下这个文件并不存在,如果不存我们要可以编辑一个这样的文件),文件的内容如下:
APT::Default-Release "version"
这时的版本就是我们要使用的作为Default的发行版本.这里我们可以用的版本可以是stable,testing,unstable.如果我们要安装其他的发行版本我们要用下面的APT命令:
# apt-get -t distribution install package
要使这个命令起作用,我们要保证在我们的配置文件中至一个我们要使用发行版本的源,而且在这个源上必须存在软件包.
我们也可以用下面的语法来请求一个特殊的软件包版本:
# apt-get install package=version
如下面的例子:
# apt-get install nautilus=2.2.4-1
在这里我们要注意的就是unstable是最早上传的Debain软件包版本.这个发行版会影响我们整个系统上的软件包.所以对于经验不是太丰富的用户建议不要使用这个版本.
3.9如何从特定的Debain版本升级软件包
apt-show-versions为那些使用多个分发版本来更新他们系统的用户提供了一个更为安全的方法,这样就可以少得到一些不稳定的版本.例如在我们安装了apt-show-versions包以后我们就可以运行下面的命令来更新我们的系统:
# apt-get install 'apt-show-versions -u -b | grep unstable | cut -d ' ' -f l'
3.10如何使指定版本的软件包保持不变
有时也许我们修改了一个软件包中的某些内容而且我们没有时间或是我们不希望将这些修改升级到一个新的版本.例如,也许我们刚将我们的系统升级为Debian3.0,但是我们却仍是希望使用一些Debian2.2中的软件包.我们可以保留这些我们已经安装的软件包而不对这些软件包进行升级.
使用这个方法是相当简单的,我们需要修改/etc/apt/preferences文件.
格式如下:
Package: <package>
Pin: <pin definition>
Pin-Priority: <pin's priority>
每一个输入之间必须用空格进行分隔.例如如果我们要保持我们已经进行修改的sylpheed软件包使用0.4.99版本的"reply-to-list",我们可以加入下面的内容:
Package: sylpheed
Pin: version 0.4.99*
在这里我们使用了*,这是一个通配符.也就是说我们希望对于所有的以0.4.99开头的版本都是适用的.这是因为Debian会以Debian版本号开头来命名他的软件包而我们并不希望避免这些软件包的安装.例如,如果0.4.99-1和0.4.99-10是可以获得的就会立刻可以安装.如果我们不希望用这样的方式来处理我们可以修改这个软件包.
最初只有.tar.gz软件包的时候,我们不得不自己来编译自己要在Gnu/Linux系统上使用的程序.当Debian出现以后,他认为必须在系统中包含一个可以管理我们已经在我们的机器上安装了的软件包的方法.这个系统被命名为dpkg.所以著名的包第一次走进了Gnu/Linux的系统,这要比Red Hat决定开发他们自己的rpm包管理系统要早很长的一段时间.
然而一个新的困境摆在了Gnu/Linux的开发者的面前.他们需要一个快速而有效的软件包安装方法,而这样的软件包安装方法可以自动的解决软件包的依赖关系并且可以在升级时小心的处理他们的配置文件.而Debian解决了这样的问题,从而导致了APT的产生,高级包管理工具(Advanced Packaging Tool
第二章基本配置
2.1 /etc/apt/sources.list文件
作为操作的一部分,APT使用一个列出了可以从哪里得到软件包的源文件.这个文件就是/etc/apt/sources.list.
整个文件在通常情况下是如下的格式:
deb http://host/debian distribution section1 section2 section3
deb-src http://host/debian distribution section1 section2 section3
当然上面的只是假想的而不可以真正的使用.每一行的第一个单词,deb或是deb-src,表明了文档的类型:他或者是可以包含二进制包(deb),也就就是我们通常使用的预编译包,或者是源码包(deb-src),这些包是原始的程序源码包括Debian控制文件(.dsc)和diff.gz,包含Debian组织程序时所需要的变更.
我们通常会在Debian默认的sources.list看到下面的设置:
这些行是Debian系统安装时的基本需要.第一行deb指出了官方的文档,第二行指非US文档而第三行是指Debian的安全更新.最后两行是注释(以#开头),所以apt-get会忽略他们.这些是deb-src行,也就是他们指出了Debian的源码包.如果我们要经常下载程序源码包来测试或是重编译,就不要注释他们.
/etc/apt/sources.list文件包含几种类型的行.APT知道如何来处理http,ftp,file以及ssh类型的文档.
在我们修改了这个配置文件以后一定要记得运行apt-get update.我们必需要这样的做来使得APT得到我们所指定源的软件包列表.
2.2如何使用本地APT
有时我们会有许多的.deb软件包,而我们希望可以使用APT来安装这些软件包,因为这样就可以在处自动解决软件包之间的依赖问题.
要这样的做,我们要创建一个目录,然后将我们要索引的.deb软件包放入其中.例如:
# mdkir /root/debs
我们可以使用一个override文件来修改软件包的控制文件的定义集来使用我们自己的软件储存所.在这个文件中,也许我们要定义一些选项来覆盖软件包自带的信息.他是如下的形式:
package priority section
package是软件包的名字,priority可以是low,medium或是high,而section是他所属的部分.我们可以不在意思文件的名字,我们要在一会将文件名字作为参数传给dpkg-scanpackages程序.如果我们不想在使用dpkg-scanpackages程序时写override文件,我们可以使用/dev/null.
在/root目录下,我们执行下面的命令:
#dpkg-scanpackages debs file | gzip > debs/Packages.gz
在上面的这个命令中,file是override文件,这个命令产生了一个Packages.gz文件,在这个文件名包含了关于这些软件包的各种各样的可以被APT使用信息.要最后使用这些软件包,我们要在我们的配置文件中加入下面的内容:
deb file:/root debs/
这样以后我们就可以像平常使用APT命令一样来使用了.我们也可以产生源码库.要这样做可以使用同样的步骤,但是要清楚的就是我们要在这个目录中使用.orig,.tar.gz,.dsc和.diff.gz文件,而我们要使用Sources.gz而不是Packages.gz文件.而我们要使用的程序也是不同的,我们要使用的是dpkg-scansources .如下面的命令形式:
#dpkg-scansources debs | gizp > debs/Sources.gz
在这里我们要注意dpkg-scansources程序并需要override文件.而配置文件如下:
deb-src file:/root debs/
2.3决定在配置文件中哪一个是最好的镜像:netselect,netselect-apt
一个经常困挠初学者的问题是:在配置文件中包含哪个Debian镜像?.有许多方法决定哪个镜像.有许多的方法可以决定使用哪一个镜像.有经验也许会有一个脚本来检测各个不同的镜像的测试时间.但是现在可以有一个程序来帮助我们完成这样的工作了:netselect.
要安装netselect,我们可以像平常一样的安装:
#apt-get install netselect
不指定任何参数的来运行他可以得到一个帮助的信息.指定一个由隔分开的主机列表(镜像)作为参数来运行这个程序就会返回一个主机名及其得分.这样来估计下载的速度.(当然是得分越低越好的).返回的主机就是得分最低的镜像(所有的得分的列表可以由-vv选项列出).如下面的例子:
# netselect ftp.debian.org http.us.debian.org ftp.at.debian.org
download.unes365 ftp.debian.org.br
从这里我们可以看到,在我们作为参数来运行这个程序的几个镜像中,ftp.debian.org.br是最好的.
现在我们就可以将这个由netselect程序找到的最好的镜像放在我们的/etc/apt/sources.list文件中.然后我们就可以像平常一样的来使用apt命令来管理我们的软件包了.
注意:镜像列有也可以在http://www.debian.org/mirror/mirrors_full找到.
从0.3.ds1版本开始,netselect源码包包含了netselect-apt二进制包,这个程序包可以自动完成上面的操作.我们在这里只要输入发行版本树作为参数(默认的为稳定版本),这样sources.list文件就可以由最好的main和non-US镜像来生成并保存在当前目录下.下面的例子会生成一个稳定版本的发行版本的sources.list文件:
# netselect-apt stable
在这里我们要记住就是生成的sources.list文件位于当前的目录下,然后我们要将其移动到/etc/apt目录.
然后我们就可以像平常一样的来运行apt命令了.
2.4在sources.list文件中添加CD-ROM
如果我们要使用apt来自动的使用光盘来安装软件包或是更新系统,我们可以在我们的配置文件中加入CD-ROM.要这样做,我们可以以下面的方式来运行apt-cdrom程序:
#apt-cdrom add
如果他是一个正常的Debain CD,apt就会挂载上他并且查找软件包的信息.如果我们的CD-ROM的配置有一些不同,我们可以使用下面的一些选项:
-h 程序帮助
-d directory CD-ROM挂载点
-r 重命名已识别的CD-ROM
-m 不挂载
-f 快速模式,不检查包文件
-a 通过扫描模式
例如:
#apt-cdrom -d /home/kov/mycdorm add
我们也可以指定一个CD-ROM,但是却并不把他添加到我们的配置列表中:
#apt-cdrom idnet
在这里我们要注意就是只我们的CD-ROM在系统的/etc/fstab中正确的配置了这个程序才可以正常的工作.
第三章
管理软件包
3.1更新软件包列表
包管理系统使用一个私有的数据库来记录安装了哪些软件,未安装哪些软件包以及哪些软件包可以获得安装.apt-get程序使用这个数据库来查找要如何安装用户所请求的软件以及查找要使选中的软件包正常的工作要安装哪些额外的软件包.
要更新这个列表,我们可以使用apt-get update命令.这个命令会在/etc/apt/sources.list的文档中查找软件列表.
一个被认为比较好的方法就是经常的运行这个命令以使得我们的系统及时得到软件包的更新信息,尤其是一些安全更新.
3.2安装软件包
最后的就是我们正等待的过程.如果我们已经准备好了我们的sources.list文件并且可以获得的软件列表也已经得到了更新,那么我们所要做就是运行apt-get命令来安装我们需要的软件包.例如:
# apt-get install xchat
APT就会查找数据库以得到最新的软件包并从相应的文档处取回软件包.如果这个软件包要依赖其他的软件包,APT就会检查依赖关系并自动的安装所需要的软件包.
下面是一些有用的apt-get选项:
-h 本帮助文档。
-q 让输出可作为日志 - 不显示进度
-qq 除了错误外,什么都不输出
-d 仅仅下载 - 【不】安装或解开包文件
-s 不作实际操作。只是依次模拟执行命令
-y 对所有询问都作肯定的回答,同时不作任何提示
-f 当没有通过完整性测试时,程序仍试图继续执行
-m 当有包文件无法找到时,程序仍试图继续执行
-u 显示已升级的软件包列表
-b 在下载完源码包后,编译生成相应的软件包
-V 显示详尽的版本号
在一行也许会选中多个软件进行安装.从网络上下载的文件会放在/var/cache/apt/archives目录中以备以后的安装.
我们也可以在同一个命令中指定要删除的软件包.只要在我们要删除的软件包名称后面加上一个'-'就可了.如下面的命令:
# apt-get install nautilus gnome-pane-
如果我们损坏了一个安装包或是我们只要简单的要软件包中的文件用可以得到的最新版本的来重新安装,我们可以使用--reinstall选项,如下面的命令:
# apt-get --reinstall install gdm
3.3删除软件包
如果我们不再需要一个软件包,我们可以用APT从我们的系统删除他.要这样做我们只需要输入:apt-get remove package命令.如下面的例子:
# apt-get remove gnome-panel
APT也会十分的小心的来处理那些依赖于我们要求要删除的软件包.使用APT并没有办法来删除一个软件包而不删除那些依赖于他的软件包.
我们以上面的方式来运行上面的命令时只是删除相应的软件包而他们的配置文件仍存在于系统上.要完全的删除一个软件包我们可以运行下面的命令:
# apt-get --purge remove gnome-panel
正如我们在install的方法一样,我们也可以在remove方法中转换一个软件包的含义.在删除的情况下,如果我们在软件包的名字后面放上一个'+',这个软件包就会被安装而不是删除.
3.4更新软件包
软件包的更新是APT系统的一个巨大的成功之处.这个可以通过单一的命令:apt-get upgrade来实现.我们可以使用这个命令在同一个发行版本中进行软件包的更新,也可以更新到一个更新的版本,而后者要引用apt-get dist-upgrade命令.
运行这个命令时加上-u选项是很用的.这样APT就会列出将要更新的软件包列表.如果我们不加这个选项,就不会看到这些信息而只是完成软件的更新工作.APT会下载每一个最新版本的软件包并且以正确的顺序进行安装.在我们运行这个命令之前运行apt-get update是非常重要的.
这个更新的过程是相当的简单的.但是有时在我们更新的前几行显示一些软件包会kept back.这就意味着有这些软件包的新版本,但是却由于某些原因而不会安装这些软件包.可能的原因也许就是不会满足依赖关系.也许是他所依赖的软件包没有相应的版本可以下载或是新的依赖关系,也就是说自上一个版本以来又有了新的依赖关系.
对于前一种情况并没有一个好的解决办法,而对于后一种情况就会提示来下载相应的依赖关系.一个更好解决办法就是用dist-upgrade.
3.5更新到新版本
APT一个重要的特征就是我们可以利用网络或是安装光盘一次更新整个系统.
当我们安装软件包而软件包的依赖关系发生了变化时也会用到这样的命令.使用apt-get upgrade 时,这些软件包会保持不变.
例如如果我们正在使用一个稳定的Debain发行版本,而我们现在买了一个更高版本的Debain安装光盘.我们可以使用APT用这些安装光盘来更新我们的系统.要这样做,先使用apt-cdrom命令将光盘写入配置文件中,然后运行apt-get dist-upgrade命令.
在这里我们要注意的很重要的一点就APT总是寻找最近版本的软件包.所以如果在我们的配置文件中列出的文档中有比我们的光盘上的软件包更新版本的软件包,APT就会从那里下载相应的软件包.
要了解保持或是删除的软件包我们可以用下面的命令:
# apt-get -o Debug::pkgProblemResolver=yes dist-upgrade
3.6删除不用的软件包:apt-get clean和autoclean
当我们安装软件包APT会从相应的主机下载需要的软件包存放在我们的本地目录中(/var/cache/apt/archives/),然后执行安装进程.
随着时间的推移这个本地的软件包库会不断的增长并会占用大量的磁盘安间.幸好APT提供了管理本地软件包库的方法:apt-get clean和autoclean.
apt-get clean会删除那些在目录/var/cache/apt/archives/和/var/cache/apt/archives/partial/中的锁定文件之外的所有的文件.这样如果我们要重新安装一个软件包APT就要再一次将他们取回来.
而apt-get autoclean只会删除那些不会再下载的软件包.
3.7用dselect使用APT
dselect是一个帮助用户选择要安装的Debain 软件包的程序.他被认为是一个相当的复杂和乏味的,但是实际的使用之后你就会熟悉这个基本文本界面程序了.
dselect的一个特征就是他知道如何来处理Debain软件包推荐和建议安装的软件包之间的兼容性.要使用这个程序,要以root身分来运行dselect.选择apt作为我们的方法.这个并不是必须的,但是如果我们并没有使用光盘而我们要从网络上下载我们要安装的软件包,最好的方法就是使用dselect.
如果我们要使用dselect,我们可以用下面的命令:
# apt-get -u dselect-upgrade
3.8如何保持一个混合的第统
有时人们比较感兴趣的是可以使用一个Debain的版本作为系统的主机版本却使用其他分支的软件包.
要设置Debain的主版本我们要编辑/etc/apt/apt.conf文件(在通常的情况下这个文件并不存在,如果不存我们要可以编辑一个这样的文件),文件的内容如下:
APT::Default-Release "version"
这时的版本就是我们要使用的作为Default的发行版本.这里我们可以用的版本可以是stable,testing,unstable.如果我们要安装其他的发行版本我们要用下面的APT命令:
# apt-get -t distribution install package
要使这个命令起作用,我们要保证在我们的配置文件中至一个我们要使用发行版本的源,而且在这个源上必须存在软件包.
我们也可以用下面的语法来请求一个特殊的软件包版本:
# apt-get install package=version
如下面的例子:
# apt-get install nautilus=2.2.4-1
在这里我们要注意的就是unstable是最早上传的Debain软件包版本.这个发行版会影响我们整个系统上的软件包.所以对于经验不是太丰富的用户建议不要使用这个版本.
3.9如何从特定的Debain版本升级软件包
apt-show-versions为那些使用多个分发版本来更新他们系统的用户提供了一个更为安全的方法,这样就可以少得到一些不稳定的版本.例如在我们安装了apt-show-versions包以后我们就可以运行下面的命令来更新我们的系统:
# apt-get install 'apt-show-versions -u -b | grep unstable | cut -d ' ' -f l'
3.10如何使指定版本的软件包保持不变
有时也许我们修改了一个软件包中的某些内容而且我们没有时间或是我们不希望将这些修改升级到一个新的版本.例如,也许我们刚将我们的系统升级为Debian3.0,但是我们却仍是希望使用一些Debian2.2中的软件包.我们可以保留这些我们已经安装的软件包而不对这些软件包进行升级.
使用这个方法是相当简单的,我们需要修改/etc/apt/preferences文件.
格式如下:
Package: <package>
Pin: <pin definition>
Pin-Priority: <pin's priority>
每一个输入之间必须用空格进行分隔.例如如果我们要保持我们已经进行修改的sylpheed软件包使用0.4.99版本的"reply-to-list",我们可以加入下面的内容:
Package: sylpheed
Pin: version 0.4.99*
在这里我们使用了*,这是一个通配符.也就是说我们希望对于所有的以0.4.99开头的版本都是适用的.这是因为Debian会以Debian版本号开头来命名他的软件包而我们并不希望避免这些软件包的安装.例如,如果0.4.99-1和0.4.99-10是可以获得的就会立刻可以安装.如果我们不希望用这样的方式来处理我们可以修改这个软件包.