📄 debian apt howto.htm
字号:
<P>完成了上面的工作,就可以通常那样使用APT命令操作这些软件包了。你可以使用同样的方法生成一个源码库,但请记住你需要将.orig.tar.gz文件、.dsc文件和.diff.gz文件包含在目录中,要生成Source.gz文件而不是Packages.gz文件。所使用的命令也不相同,要使用dpkg-scansources,命令如下所示: </P>
<P>dpkg-scansources debs | gzip > debs/Sources.gz </P>
<P>注意dpkg-scansource不需要重载文件,在sources.list中的引用法是: </P>
<P>deb-src file:/root debs/ </P>
<P></P>
<P>2.3 选择最佳镜像发布站点加入source.list文件:netselect,netselect-apt <BR>===================================================================== <BR>一个新用户经常问到的问题:“该将哪个Debian镜像发布站点加入source.list文件?”。有很多方法来选择镜像发布站点,专家们可能会写一个脚本去测试不同站点的ping time,不过有一个现成的程序可以帮你:netselect。 </P>
<P>安装netselect </P>
<P>apt-get install netselect </P>
<P>不带参数运行它时会显示它的帮助信息。运行它时加上以空格分隔的镜像主机列表,它会返回一个分值和列表中的一个主机名。这个分值通过评估ping time和hops number(一个网络请求报文到达目标主机所经过的转发主机的个数)得出,它与镜像站点预计下载速度成反比(数值越小越好)。返回的主机名是主机列表中得分最低的那个(查看列表中所以主机的得分情况可使用-vv选项)。看出下的例子: </P>
<P>bash$ netselect ftp.debian.org http.us.debian.org ftp.at.debian.org download.unesp.br ftp.debian.org.br <BR>365 ftp.debian.org.br <BR>bash$ </P>
<P>它表示,在netselect后列出的所有主机中,ftp.debian.org.br是下载速度最快的主机,其得分为365。(注意!!这是在我电脑上的测试结果,不同的网络节点网速会大不相同,所以这个分值不一定适用于其它电脑) </P>
<P>现在将netselect找到的连接速度最快的镜像站点加入/etc/apt/sources.list文件(see The /etc/apt/sources.list file, Section 2.1)and follow the tips in Managing packages, Chapter 3. </P>
<P>注意:镜像站点列表通常包含在文件http://www.debian.org/mirror/mirrors_full。 </P>
<P>从0.3版开始,netselect软件包包含了netselect-apt脚本,它使上述操作自动完成。只需将发布目录树做为参数(默认为stable)输入,sources.list文件就会生成速度最快的main和non-US镜像站点列表,并保存在当前目录下。下面的例子生成一个包含stable发布镜像站点列表的sources.list </P>
<P>bash$ ls sources.list <BR>ls: sources.list: File or directory not found <BR>bash$ netselect-apt stable <BR>(...) <BR>bash$ ls -l sources.list <BR>sources.list <BR>bash$ </P>
<P>记住:sources.list生成在当前目录下,必须将其移至/etc/apt目录。 </P>
<P>Then, follow the tips in Managing packages, Chapter 3. </P>
<P></P>
<P>2.4 将CD-ROM加入source.list文件 <BR>=============================== <BR>如果你用APT从CD-ROM上安装及升级软件包,你可以将它加入到sources.list文件中。完成该操作,可使用apt-cdrom程序: </P>
<P>apt-cdrom add </P>
<P>将Debian光盘放入光驱,它将加载光盘目录,并在光盘上查找软件包信息。如果你的光驱需要额外设置,可使用以下选项: </P>
<P>-h - program help <BR>-d directory - CD-ROM mount point <BR>-r - Rename a recognized CD-ROM <BR>-m - No mounting <BR>-f - Fast mode, don't check package files <BR>-a - Thorough scan mode </P>
<P>例如: </P>
<P>apt-cdrom -d /home/kov/mycdrom add </P>
<P>你还可以扫描一张光盘,但不将其加入列表: </P>
<P>apt-cdrom ident </P>
<P>注意,只有当你在系统的/etc/fstab中正确设置了光驱后,该程序才会工作。 </P>
<P><BR>Debian APT HOWTO 第三章 软件包管理 <BR>APT HOWTO <BR>第三章 软件包管理 </P>
<P>3.1 更新可用软件包列表 <BR>====================== <BR>软件包管理系统使用一个私有数据库跟踪列表中软件包的当前状态:已安装、未安装或可安装。apt-get通过该数据库来确定如何安装用户想用的软件包以及正常运行软件包所必须的其它关联包。 </P>
<P>你可以使用apt-get update来更新数据库列表。这个命令将扫描/etc/apt/sources.list文件中所指路径中的软件包列表文件。有关该列表文件的更多信息请查阅 第二章 /etc/apt/source.list文件。 </P>
<P>定时运行这个程序是个好主意,它将使你和你的系统获得最新的软件包更新和安全更新等信息。 </P>
<P></P>
<P>3.2 安装软件包 <BR>============== <BR>现在,终于到了你一直期待的阶段!准备好了sources.list和最新版的的可用软件包,你所需做的就是运行apt-get来安装你渴望已久的软件了。例如,你可以这样: </P>
<P>apt-get install xchat </P>
<P>APT会扫描它的数据库找到最新的版本的软件包,并将它从sources.list中所指的地方下载到本地。如果该软件包需要其它软件包才能正常运行——如本例一样——APT会做关联性检查并自动安装所关联软件包。如下所示: </P>
<P>[root]@[/] # apt-get install nautilus <BR>Reading Package Lists... Done <BR>Building Dependency Tree... Done <BR>The following extra packages will be installed: <BR>bonobo libmedusa0 libnautilus0 <BR>The following NEW packages will be installed: <BR>bonobo libmedusa0 libnautilus0 nautilus <BR>0 packages upgraded, 4 newly installed, 0 to remove and 1 not upgraded. <BR>Need to get 8329kB of archives. After unpacking 17.2MB will be used. <BR>Do you want to continue? [Y/n] </P>
<P>nautilus软件包需要引用共享函数库,因此APT会从镜像源处下载相关共享函数库,如果你在apt-get命令行中手动指定了这些共享函数库的名称,APT会默认为你要安装所有这些软件包。 </P>
<P>也就是说APT只会在安装那些没有在命令行中指定的软件包时提示你进行确认。 </P>
<P>下列apt-get选项也许对你有用 </P>
<P>-h This help text. <BR>-d Download only - do NOT install or unpack archives <BR>-f Attempt to continue if the integrity check fails <BR>-s No-act. Perform ordering simulation <BR>-y Assume Yes to all queries and do not prompt <BR>-u Show a list of upgraded packages as well </P>
<P>可以用一条命令安装多个软件包。包文件从网络上下载到本地/var/cache/apt/archives目录,稍后再安装。 </P>
<P>你可以用同样的命令行删除指定软件包,只需在软件包名称后紧跟一个“-”,如下所示: </P>
<P>[root]@[/] # apt-get install nautilus gnome-panel- <BR>Reading Package Lists... Done <BR>Building Dependency Tree... Done <BR>The following extra packages will be installed: <BR>bonobo libmedusa0 libnautilus0 <BR>The following packages will be REMOVED: <BR>gnome-applets gnome-panel gnome-panel-data gnome-session <BR>The following NEW packages will be installed: <BR>bonobo libmedusa0 libnautilus0 nautilus <BR>0 packages upgraded, 4 newly installed, 4 to remove and 1 not upgraded. <BR>Need to get 8329kB of archives. After unpacking 2594kB will be used. <BR>Do you want to continue? [Y/n] </P>
<P>有关删除软件包的更多详细信息,参阅 3.3 移除软件包。 </P>
<P>假如你不小心损坏了已安装的软件包而想修复它,或者仅仅想安装软件包中某些文件的最新版本,这是可以做到的,你可以用--reinstall选项: </P>
<P>[root]@[/] # apt-get --reinstall install gdm <BR>Reading Package Lists... Done <BR>Building Dependency Tree... Done <BR>0 packages upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 1 not upgraded. <BR>Need to get 0B/182kB of archives. After unpacking 0B will be used. <BR>Do you want to continue? [Y/n] </P>
<P>本文档写作时所参考的APT版本为0.5.3,这个版本还属于“unstable”(sid)阶段。如是你安装了这个版本,你可以在系统配置中使用新增的功能:你可以用apt-get install package/distribution来安装指定发布版中的软件包,或者用apt-get install package=version,如下所示: </P>
<P>apt-get install nautilus/unstable </P>
<P>它将为你安装“unstable”发布版中的nautilus软件包,即使你当前运行的是“stable”版本。命令中“distribution”选项的可用参数值为:stable,testing,unstable。 </P>
<P>在处理关联问题时,你可能更乐意使用-t开关来选择目标发布版,让apt-get帮你考虑使用哪个发布版。 </P>
<P>重要信息:最新版的Debian软件包首先会上传到“unstable”发布版中,这个发布版包含了软件包所有更改阶段,无论是小修小补还是影响到众多软件包乃至整个系统的重大修改。所以,新手和那些强调系统稳定性的用户不会使用这个发布版。 </P>
<P>“testing”发布版比起“unstable”发布版,多注重了些系统稳定性,但正式运行的系统应当使用“stable”发布版。 </P>
<P></P>
<P>3.3 移除软件包 <BR>============== <BR>如果你不再使用某些软件包,你可以用APT将其从系统中删除。要删除软件包只需输入:apt-get remove package。如下所示: </P>
<P>[root]@[/] # apt-get remove gnome-panel <BR>Reading Package Lists... Done <BR>Building Dependency Tree... Done <BR>The following packages will be REMOVED: <BR>gnome-applets gnome-panel gnome-panel-data gnome-session <BR>0 packages upgraded, 0 newly installed, 4 to remove and 1 not upgraded. <BR>Need to get 0B of archives. After unpacking 14.6MB will be freed. <BR>Do you want to continue? [Y/n] </P>
<P>由上例可知,APT会关注那些与被删除的软件包有依赖关系的软件包。使用APT删除一个软件包将会连带删除那些与该软件包有依赖关系的软件包。 </P>
<P>上例中运行apt-get会删除指定软件包以及与之有依赖关系的软件包,但它们的配置文件,如果有的话,会完好无损地保留在系统里。如果想彻底删除这些包及其配置文件,运行: </P>
<P>[root]@[/] # apt-get --purge remove gnome-panel <BR>Reading Package Lists... Done <BR>Building Dependency Tree... Done <BR>The following packages will be REMOVED: <BR>gnome-applets* gnome-panel* gnome-panel-data* gnome-session* <BR>0 packages upgraded, 0 newly installed, 4 to remove and 1 not upgraded. <BR>Need to get 0B of archives. After unpacking 14.6MB will be freed. <BR>Do you want to continue? [Y/n] </P>
<P>注意:软件包名字后面的*表示该软件包所有的配置文件也将被删除。 </P>
<P>就象安装软件时一样,你可以在删除命令中用一个符号来指定安装某个软件包。在删除软件包时,如果你在软件包名字后面紧跟一个“+”,那么该软件包就会被安装而不是删除。 </P>
<P>[root]@[/] # apt-get --purge remove gnome-panel nautilus+ <BR>Reading Package Lists... Done <BR>Building Dependency Tree... Done <BR>The following extra packages will be installed: <BR>bonobo libmedusa0 libnautilus0 nautilus <BR>The following packages will be REMOVED: <BR>gnome-applets* gnome-panel* gnome-panel-data* gnome-session* <BR>The following NEW packages will be installed: <BR>bonobo libmedusa0 libnautilus0 nautilus <BR>0 packages upgraded, 4 newly installed, 4 to remove and 1 not upgraded. <BR>Need to get 8329kB of archives. After unpacking 2594kB will be used. <BR>Do you want to continue? [Y/n] </P>
<P>注意,apt-get列出了那些将要被安装的关联软件包(即保证该软件包正常运行的其它软件包)和将要被删除关联软件包,然后,再次列出了将要被安装的软件包。 </P>
<P></P>
<P>3.4 更新软件包 <BR>============== <BR>软件包更新是APT最成功的特点。只需一条命令即可完成更新:apt-get upgrade。你可以使用这条命令从相同版本号的发布版中更新软件包,也可以从新版本号的发布版中更新软件包,尽管实现后一种更新的首选命令为apt-get dist-upgrade;实情参阅 3.5升级到新版本。 </P>
<P>在运行该命令时加上-u选项很有用。这个选项让APT显示完整的可更新软件包列表。不加这个选项,你就只能盲目地更新。APT会下载每个软件包的最新更新版本,然后以合理的次序安装它们。注意在运行该命令前应先运行apt-get update更新数据库。有关详情参阅 3.1更新可用软件包列表。看看这个例子: </P>
<P>[root]@[/] # apt-get -u upgrade <BR>Reading Package Lists... Done <BR>Building Dependency Tree... Done <BR>The following packages have been kept back <BR>cpp gcc lilo <BR>The following packages will be upgraded <BR>adduser ae apt autoconf debhelper dpkg-dev esound esound-common ftp indent <BR>ipchains isapnptools libaudiofile-dev libaudiofile0 libesd0 libesd0-dev <BR>libgtk1.2 libgtk1.2-dev liblockfile1 libnewt0 liborbit-dev liborbit0 <BR>libstdc++2.10-glibc2.2 libtiff3g libtiff3g-dev modconf orbit procps psmisc <BR>29 packages upgraded, 0 newly installed, 0 to remove and 3 not upgraded. <BR>Need to get 5055B/5055kB of archives. After unpacking 1161kB will be used. <BR>Do you want to continue? [Y/n] </P>
<P>整个更新过程非常简单。注意在本例中头几行,apt-get报告有些软件包的更新被阻止(kept back),这表明这些软件包的更新版本因故无法安装,可能的原因有关联不同步(当前没有供下载的新版本关联包)或关联扩展(需要安装新的关联包以配合新版软件包)。 </P>
<P>对于第一种原因没有很好的解决方法,对于第二次原因,运行apt-get intall安装所需的新关联包就可以。另一个更好的解决方法就是使用dist-upgrade。详情参阅 3.5升级到新版本。 </P>
<P></P>
<P>3.5 升级到新版本 <BR>================ <BR>APT的绝活就是让你一次就完成整个系统的更新,不论是通过Internet还是通过光盘文件(购买的碟片或下载的ISO镜像文件)。 </P>
<P>它也可以用来更新寻些改变了关联关系的软件包。即如前所述的那些使用apt-get upgrade时被阻止更新(kept back)的软件包。 </P>
<P>例如,假设你目前使用的Debian为stable revision 0(如woody 3.0 r0,译者注),而你购买了revision 3的新版Debian(如woody 3.0 r3,译者注),你可以使用APT从新光盘上升级你的系统。使用apt-cdrom(参阅 2.4将CD-ROM加入source.list文件)将光盘加载到/etc/apt/sources.list中,然后运行apt-get dist-upgrade。 </P>
<P>请注意,APT总是搜索最新版本的软件包,因此,如果一个软件包在你的/etc/apt/sources.list中所列的版本比光盘上所列的版本要新,那么APT会按照sources.list文件所指的地址下载这个软件包而不是使用光盘上的软件包。 </P>
<P>在 3.4更新软件包 中我们举了个例子,我们看到有些包被阻止更新(kept back),现在我们就用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 NEW packages will be installed: <BR>cpp-2.95 cron exim gcc-2.95 libident libopenldap-runtime libopenldap1 <BR>libpcre2 logrotate mailx <BR>The following packages have been kept back <BR>lilo <BR>The following packages will be upgraded <BR>adduser ae apt autoconf cpp debhelper dpkg-dev esound esound-common ftp gcc <BR>indent ipchains isapnptools libaudiofile-dev libaudiofile0 libesd0 <BR>libesd0-dev libgtk1.2 libgtk1.2-dev liblockfile1 libnewt0 liborbit-dev <BR>liborbit0 libstdc++2.10-glibc2.2 libtiff3g libtiff3g-dev modconf orbit <BR>procps psmisc <BR>31 packages upgraded, 10 newly installed, 0 to remove and 1 not upgraded. <BR>Need to get 0B/7098kB of archives. After unpacking 3118kB will be used. <BR>Do you want to continue? [Y/n] </P>
<P>注意现在那些软件包将会被更新,那些新的关联软件包也会被安装。但是lilo仍被阻止更新,可能还存在一些比建立新关联更棘手的问题,我们通过如下方法确定问题所在: </P>
<P>[root]@[/] # apt-get -u install lilo <BR>Reading Package Lists... Done <BR>Building Dependency Tree... Done <BR>The following extra packages will be installed: <BR>cron debconf exim libident libopenldap-runtime libopenldap1 libpcre2 <BR>logrotate mailx <BR>The following packages will be REMOVED: <BR>debconf-tiny <BR>The following NEW packages will be installed: <BR>cron debconf exim libident libopenldap-runtime libopenldap1 libpcre2 <BR>logrotate mailx <BR>The following packages will be upgraded <BR>lilo <BR>1 packages upgraded, 9 newly installed, 1 to remove and 31 not upgraded. <BR>Need to get 225kB/1179kB of archives. After unpacking 2659kB will be used. <BR>Do you want to continue? [Y/n] </P>
<P>查看上述提示信息可知,lilo与debconf-tiny包产生了一个新冲突,这表明除非删除debconf-tiny,否则将无法更新lilo。 </P>
<P>想知道该保留或删除哪些软件包,你可以使用: </P>
<P># apt-get -o Debug::pkgProblemResolver=yes dist-upgrade <BR>Reading Package Lists... Done <BR>Building Dependency Tree... Done <BR>Calculating Upgrade... Starting <BR>Starting 2 <BR>Investigating python1.5 <BR>Package python1.5 has broken dep on python1.5-base <BR>Considering python1.5-base 0 as a solution to python1.5 0 <BR>Holding Back python1.5 rather than change python1.5-base <BR>Investigating python1.5-dev <BR>Package python1.5-dev has broken dep on python1.5 <BR>Considering python1.5 0 as a solution to python1.5-dev 0 <BR>Holding Back python1.5-dev rather than change python1.5 <BR>Try to Re-Instate python1.5-dev <BR>Done <BR>Done <BR>The following packages have been kept back <BR>gs python1.5-dev <BR>0 packages upgraded, 0 newly installed, 0 to remove and 2 not upgraded. </P>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -