📄 debian apt howto.htm
字号:
<P>现在,你很容易就知道不能安装python1.5-dev软件包是因为无法满足另一个软件包python1.5的关联要求。 </P>
<P></P>
<P>3.6 移除无用软件包文件:apt-get clean and autoclean <BR>=================================================== <BR>当你需要安装某个软件包时,APT从/etc/apt/sources.list中所列的主机下载所需的文件,将它们保存到本机软件库(/var/cache/apt/archives/),然后开始安装,参阅 3.2 安装软件包。 </P>
<P>本地软件库会不断膨胀占用大量硬盘空间,幸运的是,APT提供了工具来管理本地软件库:apt-get的clean方法和autoclean方法。 </P>
<P>apt-get clean将删除/var/cache/apt/archives目录和/var/cache/apt/archives/partial目录下的所有文件,除了被锁定的文件。这样以来,当你需要再次安装某个软件包时,APT将重新下载它。 </P>
<P>apt-get autoclean仅删除那些不需要再次下载的文件。 </P>
<P>下面这个例子显示了apt-get autoclean如何工作: </P>
<P># ls /var/cache/apt/archives/logrotate* /var/cache/apt/archives/gpm* <BR>logrotate_3.5.9-7_i386.deb <BR>logrotate_3.5.9-8_i386.deb <BR>gpm_1.19.6-11_i386.deb </P>
<P>在/var/cache/apt/archives目录下有两个不同版本的logrotate软件包文件以及一个gpm软件包文件。 </P>
<P># apt-show-versions -p logrotate <BR>logrotate/stable uptodate 3.5.9-8 <BR># apt-show-versions -p gpm <BR>gpm/stable upgradeable from 1.19.6-11 to 1.19.6-12 </P>
<P>apt-show-versions显示logrotate_3.5.9-8_i386.deb提供了logrotate的升级版本,所以logrotate_3.5.9-7_i386.deb没用了。同样gpm_1.19.6-11_i386.deb也没有用了,因为可以下载该软件包的更新版本。 </P>
<P># apt-get autoclean <BR>Reading Package Lists... Done <BR>Building Dependency Tree... Done <BR>Del gpm 1.19.6-11 [145kB] <BR>Del logrotate 3.5.9-7 [26.5kB] </P>
<P>总之,apt-get autoclean仅删除那些过时的文件。参阅 3.9如何从Debian的专用版本下升级软件包 获得更多apt-show-versions相关信息。 </P>
<P></P>
<P>3.7 在dselect中操作APT <BR>====================== <BR>dselect工具帮助用户选取想要安装的Debian软件包。它有点复杂甚至令人望而生厌,但经过实践你就能掌握它恐怖的终端界面。 </P>
<P>dselect高级功能之一就是它知道利用Debian软件包的“推荐”和“建议”能力。(Debian软件包有一种能力:推荐或建议系统在安装自己的同时,安装别的软件包以配合自身的工作,当然这些推荐的软件包不一定是必须的;而dselect工具可以识别和利用这个能力,使用dselect时你就能体会到。译者注)以root身份运行dselect,进入程序后选择apt作为连接方式(access)。该步骤不是必须的,但如果你没有光驱而且想通过Internet下载安装软件包,这是使用dselect的最好方法。 </P>
<P>想深入学习dselect的用法,请到Debian网站查阅dselect文档页面 <BR>http://www.debian.org/doc/ddp </P>
<P>在dselect中选好了软件包后,运行: </P>
<P>apt-get -u dselect-upgrade </P>
<P>如下例所示: </P>
<P>[root]@[/] # apt-get -u dselect-upgrade <BR>Reading Package Lists... Done <BR>Building Dependency Tree... Done <BR>The following packages will be REMOVED: <BR>lbxproxy <BR>The following NEW packages will be installed: <BR>bonobo console-tools-libs cpp-3.0 enscript expat fingerd gcc-3.0 <BR>gcc-3.0-base icepref klogd libdigest-md5-perl libfnlib0 libft-perl <BR>libgc5-dev libgcc300 libhtml-clean-perl libltdl0-dev libsasl-modules <BR>libstdc++3.0 metamail nethack proftpd-doc psfontmgr python-newt talk tidy <BR>util-linux-locales vacation xbill xplanet-images <BR>The following packages will be upgraded <BR>debian-policy <BR>1 packages upgraded, 30 newly installed, 1 to remove and 0 not upgraded. <BR>Need to get 7140kB of archives. After unpacking 16.3MB will be used. <BR>Do you want to continue? [Y/n] </P>
<P>比较一下我们在相同系统上运行apt-get dist-upgrade时的情形: </P>
<P>[root]@[/] # apt-get -u dist-upgrade <BR>Reading Package Lists... Done <BR>Building Dependency Tree... Done <BR>Calculating Upgrade... Done <BR>The following packages will be upgraded <BR>debian-policy <BR>1 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded. <BR>Need to get 421kB of archives. After unpacking 25.6kB will be freed. <BR>Do you want to continue? [Y/n] </P>
<P>我们看到在前例中许多软件包被安装是其它软件包“推荐”或“建议”的结果。另外一些软件包被安装或删除(例如lbxproxy软件包)是我们通过dselect工具作出的决定。由此可见dselect与APT结合起来将是一个功能强大的工具。 </P>
<P></P>
<P>3.8 如何构建一个混合系统 <BR>======================== <BR>人们常使用testing发布版,因为它比unstable要稳定同时又比stable时髦。然而对于那些想运行某些软件包的最新版本,又不希望将整个系统迁移到unstable发布版的还有一种选择:运行一个testing/unstable混合系统。对另一部分保守的用户而言,他们可能希望运行stable/testing混合系统。 </P>
<P>要实现混合系统,请在/etc/apt/apt.conf中加入下面的语句: </P>
<P>APT::Default-Release "testing"; </P>
<P>以后,在从unstable发布版安装软件包时,使用-t开关: </P>
<P># apt-get -t unstable install packagename </P>
<P>别忘了,使用Debian的某个发布版的软件包时,要将镜像源加入到/etc/apt/sources.list文件中。在这个例子中,除了加入testing发布版镜像源处,我们还需要加入unstable发布版镜像源。 </P>
<P></P>
<P>3.9 如何从Debian的专用版本下升级软件包 <BR>====================================== <BR>apt-show-versions提供了一个安全的途径,让那些使用混合系统的用户放心升级他们的系统,不必担心升级会将原来属于stable的包升级成了unstable包。例如,这条命令将只升级你的unstable软件包: </P>
<P># apt-get install `apt-show-versions -u -b | grep unstable` </P>
<P></P>
<P>3.10 如何维护已安装软件包的多个版本(复杂) <BR>========================================== <BR>你可能会遇到这种情况,更改了某个软件包中的一些文件,但你没有时间或根本就不想将这些更改引入到新版本中。或者,你将系统升级到3.0,但仍想继续使用Debian 2.2下的某个软件包。你可以“钉住”(pin)这个版本,这样它就不会被更新了。 </P>
<P>操作起来十分简单,你只需编辑/etc/apt/preferences文件。 </P>
<P>文件格式很简单: </P>
<P>Package: <package> <BR>Pin: <pin definition> <BR>Priority: <pin's priority> </P>
<P>例如,我对sylpheed软件包做了某些修改,其版本为0.4.99,我想保留这些修改不被更新,可加上: </P>
<P>Package: sylpheed <BR>Pin: version 0.4.99* </P>
<P>注意我用了一个 *(星号)。这是一个“通配符”;它表明我希望“钉住”所有以0.4.99打头的版本(以防它们被下载并安装到我机器上。pin控制的是服务器端的更新软件包而非本地的已安装软件包。译者注)。因为Debian使用“Debian版本号”为其软件包定版本,我不想进行所有这些版本的升级,如果不用通配符,那么0.4.99-1版或0.4.99-10版只要一出炉系统就会安装它们。如果你修改了软件包,你一定不希望这么做。 </P>
<P>Priority是可选域;如果没有特别指定,它的默认值为989。 </P>
<P>让我们来看看pin如何体现优先级(priorty)区别。一个低于0的优先级表示:该软件包被禁止安装;优先级在0到100之间表示:软件包没有安装并且当前也没有可用版本,这些软件包不会出现在供选择版本列表中;优先级为100表示软件包已被安装——对于这个已安装的软件包,如果有一个不同的版本要替换它,那么替换者的优先级必须大于100。 </P>
<P>优先级在100以上表示软件包应该被安装。典型的例子如,某个软件包的升级补丁包,任何处于100和1000(包括1000)之间的优先级都表示上述情形。但是,一个软件包如果被定为这样的优先级,它并不会降级已安装的版本。例如,如果我安装了sylpheed 0.5.3并为sylpheed 0.4.99指定了一个优先级为999的pin,那么由于要满足pin的优先级,所以0.4.99软件包不会被安装。如果要实现软件包“降级”,则需要将pin的优先级定为大于1000。(100<优先级<=1000时,如果存在升级包就对本机相关包升级,如果本机软件包比更新包还新就保持不变;优先级>1000时,服务器端软件包不论比本机的软件包新还是旧,均对本机相关软件包进行更新。译者注) </P>
<P>pin可以被用来控制软件包的修订版本(version)、发布版本(release)或版本来源(origin)。 </P>
<P>在前面我们已经看到,钉住修订版本时使用通配符来代替版本号数字,这样可一次指定多个版本。 </P>
<P>release选项是基于发布版文件(Release file)的,这个文件在本地APT软件库中或安装光盘上。如果你从本地软件库安装软件包而软件库中又没有该文件,那么这个选项将失效。来看看/var/lib/apt/lists/目录中发布版文件的内容,发布版包括这些参数:a(archive),c(components),v(version),o(origin),l(lable)。 </P>
<P>来看一个例子: </P>
<P>Package: * <BR>Pin: release v=2.2*,a=stable,c=main,o=Debian,l=Debian <BR>Priority: 1001 </P>
<P>在本例中,我们选择了version为2.2*的Debian(它可以是2.2r2,2.2r3——这些版本包含了“point releases”即安全更新和其它非常生要的更新),stable软件库,main类软件包(非contrib或non-free),版本来源和标签均为Debian。版本来源(o=)说明谁制作了这个发布版文件,标签(l=)说明该发布版的名称:Debian即是指Debian自己,Progeny即是指后裔制作者,下面是一个发布版文件的样例: </P>
<P>$ cat /var/lib/apt/lists/ftp.debian.org.br_debian_dists_potato_main_binary-i386_Release <BR>Archive: stable <BR>Version: 2.2r3 <BR>Component: main <BR>Origin: Debian <BR>Label: Debian <BR>Architecture: i386 </P>
<P><BR>Debian APT HOWTO 第四章 几个非常有用的工具 <BR>APT HOWTO <BR>第四章 几个非常有用的工具 </P>
<P>4.1 如何安装本地编译的软件包:equivs <BR>==================================== <BR>有时,用户想使用某些软件的特殊版本,它们只以源代码的形式存在,没有现成的Debian软件包。软件包管理系统在处理这类事务时可能会出问题。假设你想编译新版本的邮件服务器,编译、安装一切正常,然而,软件包管理系统并不知道你在系统中安装了自己编译的东西,在Debian中许多基于MTA(Mail Transport Agent 邮件传输代理)的软件包也不知道这些。 </P>
<P>现在是equivs登台的时候了。用它来安装软件包,它所做的工作就是创建一个新的空软件包来实现关联,让软件包管理系统相信关联实现了。 </P>
<P>在我们开始以前,我必须提醒你,编译某个软件最安全的方法是对该软件现有的Debian软件包进行修改后重新编译,如果你并不知道你正在干什么,劝你不要使用equivs替换关联包。更多信息请参阅 第六章 源码包操作。 </P>
<P>继续上面的例子,你安装好了新编译的postfix,接下来打算安装mutt,突然你发现mutt想与另一个MTA建立关联,而你想让它使用你刚安装的新MTA。 </P>
<P>转到某个目录(例如/tmp)执行: </P>
<P># equivs-control name </P>
<P>将name替换为你创建的管理文件(control file),管理文件按如下格式创建: </P>
<P>Section: misc <BR>Priority: optional <BR>Standards-Version: 3.0.1 </P>
<P>Package: <enter package name; defaults to equivs-dummy> <BR>Version: <enter version here; defaults to 1.0> <BR>Maintainer: <your name and email address; defaults to username> <BR>Pre-Depends: <packages> <BR>Depends: <packages> <BR>Recommends: <packages> <BR>Suggests: <package> <BR>Provides: <(virtual)package> <BR>Architecture: all <BR>Copyright: <copyright file; defaults to GPL2> <BR>Changelog: <changelog file; defaults to a generic changelog> <BR>Readme: <README.Debian file; defaults to a generic one> <BR>Extra-Files: <additional files for the doc directory, commaseperated> <BR>Description: <short description; defaults to some wise words> <BR>long description and info <BR>. <BR>second paragraph </P>
<P>我们只需按自己的需要修改相关项目就行了。文件中每个项目都描述得很清楚,我们不必在此逐行解释它们。现在开始修改吧: </P>
<P>Section: misc <BR>Priority: optional <BR>Standards-Version: 3.0.1 </P>
<P>Package: mta-local <BR>Provides: mail-transport-agent </P>
<P>行了,就是这样。mutt要与mail-transport-agent关联,这是所有MTA共用的一个虚拟包(virtual package),我可以简单地将这个软件包命名为mail-transport-agent,不过我更愿意使用系统的虚拟包方案,使用Provides选项。 </P>
<P>现在你可以开始创建软件包了: </P>
<P># equivs-build name <BR>dh_testdir <BR>touch build-stamp <BR>dh_testdir <BR>dh_testroot <BR>dh_clean -k <BR># Add here commands to install the package into debian/tmp. <BR>touch install-stamp <BR>dh_testdir <BR>dh_testroot <BR>dh_installdocs <BR>dh_installchangelogs <BR>dh_compress <BR>dh_fixperms <BR>dh_installdeb <BR>dh_gencontrol <BR>dh_md5sums <BR>dh_builddeb <BR>dpkg-deb: building package `name' in `../name_1.0_all.deb'. </P>
<P>The package has been created. <BR>Attention, the package has been created in the current directory, </P>
<P>然后安装这个新创建的.deb。 </P>
<P>众所周知,equivs的用法很多,它甚至可以帮你为那些常用软件的底层关联包创建个性化版本。尽情发挥你的想像力吧,不过要小心。 </P>
<P>重要提示:管理文件(control files)的样例文件在/usr/share/doc/equivs/examples目录下。 </P>
<P></P>
<P>4.2 移除无用的locale files文件:localepurge <BR>=========================================== <BR>许多Debian用户仅在固定地区使用Debian。例如,在巴西的Debian用户,通常使用pt_BR地区配置文件(locale file)而不会关心es地区配置文件。 </P>
<P>对于这类用户而言localepurge是一个非常有用的工具,你可以仅保留你当前所用的地区配置文件,删除其它无用的文件,从而释放大量硬盘空间。运行apt-get install localepurge就行了。 </P>
<P>它配置起来非常容易,debconf的提问将引导用户一步一步完成设置。在回答第一个问题时请务必谨慎,如果回答错了,系统可能删掉所有的地区配置文件,包括你正在使用的这个。复原它们的唯一方法就是重装那些软件包。 </P>
<P></P>
<P>4.3 如何知晓哪些软件包可以升级 <BR>============================== <BR>apt-show-versions工具可以告诉你系统中哪些包可以更新以及其它一些有用的信息。-u选项可以显示可更新软件包列表: </P>
<P>$ apt-show-versions -u <BR>libeel0/unstable upgradeable from 1.0.2-5 to 1.0.2-7 <BR>libeel-data/unstable upgradeable from 1.0.2-5 to 1.0.2-7 </P>
<P>Debian APT HOWTO 第五章 获取软件包信息 <BR>APT HOWTO <BR>第五章 获取软件包信息 </P>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -