📄 2.htm
字号:
<P>到目前为止它们均出自Pixar的电影“<EM>Toy Story</EM>(Toy Story)”
<UL>
<LI><STRONG>Buzz</STRONG>(Buzz Lightyear)是个宇航员,
<LI><STRONG>Rex</STRONG>是只暴龙,
<LI><STRONG>Bo</STRONG>(Bo Peep)是个放羊的女孩,
<LI><STRONG>Hamm</STRONG>是个小猪攒钱罐,
<LI><STRONG>Slink</STRONG>(Slinky Dog)是只玩具狗,
<LI><STRONG>Sarge</STRONG>是位绿色塑料玩具士兵首领,
<LI><STRONG>Potato</STRONG>当然就是Potato Head先生,
<LI><STRONG>Woody</STRONG>是个牛仔,
<LI><STRONG>Sid</STRONG>是隔壁的男孩,那个玩具终结者。 </LI></UL>
<HR>
<A name=s-pools></A>
<H3>2.1.10 <SAMP>pool</SAMP>目录</H3>
<P>过去,软件包均放在<SAMP>dists</SAMP>目录下相应发行版的子目录中。这种做法产生了许多问题,当镜像站点进行新版本发布时大量带宽被消耗。
<P>现在软件包均放进一个巨大的“池子(pool)”,按照源码包名称分类存放。为了方便管理,pool目录下按属性再分类(<SAMP>main</SAMP>、<SAMP>contrib</SAMP>和<SAMP>non-free</SAMP>),分类下面再按源码包名称的首字母归档。这些目录包含的文件有:运行于各种系统架构的二进制软件包,生成这些二进制软件包的源码包。
<P>你可以执行命令<SAMP>apt-cache showsrc
<VAR>mypackagename</VAR></SAMP>,查看“Directory:”行获知每个软件包的存放位置。例如:<CODE>apache</CODE>软件包存放在<CODE>pool/main/a/apache/</CODE>软件包存放在<SAMP>lib*</SAMP>软件包数量巨大,它们以特殊的方式归档:例如,<CODE>libpaper</CODE>软件包存放在<CODE>pool/main/libp/libpaper/</CODE>。
<P>诸如<SAMP>apt</SAMP>等命令访问的索引文件仍位于<SAMP>dists</SAMP>目录中,直到本文写作之时,旧发行版的软件包还没转到pool目录,所以你将看到路径的“Filename”域中包含有发行版名称如<SAMP>potato</SAMP>或<SAMP>woody</SAMP>。
<P>通常,你大可不必注意这些,新版的<SAMP>apt</SAMP>和旧版<SAMP>dpkg-ftp</SAMP>(参阅<A
href="http://qref.sourceforge.net/Debian/reference/ch-system.zh-cn.html#s-howtocurrent">系统升级方法,
第 2.3.1 节</A>)会自动处理它们。想了解更多信息,参阅<CODE><A
href="http://lists.debian.org/debian-devel-announce/2000/debian-devel-announce-200010/msg00007.html">RFC:
implementation of package pools</A></CODE>。
<HR>
<A name=s-sid-history></A>
<H3>2.1.11 <SAMP>sid</SAMP>诞生记</H3>
<P>过去<SAMP>sid</SAMP>并不存在,Debian文件组织只有一个主要的工作流程:假设当前<SAMP>unstable</SAMP>发行版中创建了某个软件开发项目,当它成为新的<SAMP>stable</SAMP>版之时,便是它的发布之日。由于软件包一但发布就需要移动到新的stable目录,当众多软件开发项目移动目录时大量带宽会被吞噬掉,这个流程就显得很不切实际,因而许多软件开发项目并没有按这个方法行事。
<P>经过几年的研究摸索,文档管理员提出一个方案,将未获准发布的二进制文档存入名为<SAMP>sid</SAMP>的特定目录。由于这些软件尚未发布,从那时起,它们就被加入到<SAMP>unstable</SAMP>目录树。当它们首次发布时,将会建立一个从当前<SAMP>stable</SAMP>指向<SAMP>sid</SAMP>的链接。这个方案用户听起来的确有些晕头。
<P>有了软件包储藏池的帮助(参阅<A
href="http://qref.sourceforge.net/Debian/reference/ch-system.zh-cn.html#s-pools"><SAMP>pool</SAMP>目录,
第 2.1.10
节</A>),在<SAMP>woody</SAMP>发行版开发过程中,二进制软件包均按一定规范存放于pool目录,而与发行版无直接关系,当发布新版本时,就不会再出现大量带宽被消耗的问题。(不过,大量带宽还是被开发进程消耗了)。
<HR>
<A name=s-incoming></A>
<H3>2.1.12 上载到<CODE>incoming</CODE>中的软件包</H3>
<P>上载的软件包首先存放于<CODE><A
href="http://incoming.debian.org/">http://incoming.debian.org/</A></CODE>经过检收,确定它们是由Debian开发者上载的(对于那些属于无维护者上载(Non-Maintainer
Upload 缩写
NMU)的软件包则放入<CODE>DELAYED</CODE>子目录)。会有一天,它们将从<SAMP>incoming</SAMP>移入<SAMP>unstable</SAMP>。
<P>在紧急情况下,你可能会等不及它们移入<SAMP>unstable</SAMP>而直接从<SAMP>incoming</SAMP>中下载安装。
<HR>
<A name=s-snapshot></A>
<H3>2.1.13 找回旧软件包</H3>
<P>最新的Debian发行版存放在任何一个<CODE><A
href="http://www.debian.org/misc/README.mirrors">Debian镜像站点</A></CODE>的<SAMP>debian</SAMP>目录下。旧版本的Debian如Slink存放在<CODE><A
href="http://archive.debian.org/">http://archive.debian.org/</A></CODE>或Debian镜像站点的<SAMP>debian-archive</SAMP>目录下。
<P>旧的<SAMP>testing</SAMP>和<SAMP>unstable</SAMP>软件包存放在<CODE><A
href="http://snapshot.debian.net/">http://snapshot.debian.net/</A></CODE>。
<HR>
<A name=s-archsections></A>
<H3>2.1.14 发布源目录结构</H3>
<P>在每个主目录树下(<CODE>dists/stable/main</CODE>、<CODE>dists/stable/contrib</CODE>、<CODE>dists/stable/non-free</CODE>、<CODE>dists/unstable/main/</CODE>,等)按芯片架构又分了子目录,每个子目录中存放着在该芯片架构下编译的二进制软件包。
<UL>
<LI><CODE>binary-all/</CODE>,存放与芯片架构无关的软件包,如Perl脚本、纯文档等。 </LI></UL>
<UL>
<LI><CODE>binary-<VAR>platform</VAR>/</CODE>,存放运行于该平台的二进制软件包。 </LI></UL>
<P>请注意,<SAMP>testing</SAMP>和<SAMP>unstable</SAMP>发行版的二进制软件包不再存放在这些目录中,它们存放在上一级<SAMP>pool</SAMP>目录中。目录中仍保留有索引文件(<CODE>Packages</CODE>和<CODE>Packages.gz</CODE>)是为了向下兼容。
<P>要获得有关二进制架构技术支持,参阅各发行版的发布手记(Release Notes),可以访问发布手记站点<CODE><A
href="http://www.debian.org/releases/stable/releasenotes">stable</A></CODE>和<CODE><A
href="http://www.debian.org/releases/testing/releasenotes">testing</A></CODE>.
<HR>
<A name=s-source></A>
<H3>2.1.15 源代码</H3>
<P>Debian系统中的一切程序都有源代码,不仅如此,许可证条款<STRONG>规定</STRONG>系统中所有的程序必须和其源代码一起发行,或提供源代码出售。
<P>通常源代码发布在<SAMP>source</SAMP>目录,该目录同时处于所有架构目录中,更新的源码则在<SAMP>pool</SAMP>目录中(参阅<A
href="http://qref.sourceforge.net/Debian/reference/ch-system.zh-cn.html#s-pools"><SAMP>pool</SAMP>目录,
第 2.1.10 节</A>)。对于不太熟悉Debian归档目录结构的用户想获得源代码可以试试<SAMP>apt-get source
<VAR>mypackagename</VAR></SAMP>命令。
<P>有些软件包,如著名的<CODE>pine</CODE>,由于许可证限制,只提供源码包。(最近,<CODE>pine-tracker</CODE>软件包提供了一个简易的安装版)安装源码包的方法可参阅<A
href="http://qref.sourceforge.net/Debian/reference/ch-package.zh-cn.html#s-port">向<SAMP>stable</SAMP>系统引入软件包,
第 6.4.10 节</A>,<A
href="http://qref.sourceforge.net/Debian/reference/ch-program.zh-cn.html#s-packaging">打包,
第 13.9 节</A>教你如何手工创建一个软件包。
<P><CODE>contrib</CODE>和<CODE>non-free</CODE>目录中的软件包可能不提供源代码,因为它们没有正式加入Debian系统。
<HR>
<A name=s-pkg-basics></A>
<H2>2.2 Debian软件包管理系统</H2>
<HR>
<A name=s-package-basics></A>
<H3>2.2.1 Debian软件包概述</H3>
<P>软件包通常包含了实现一系列相关命令或特性所必须的所有的文件。有两种类型的Debian软件包:
<UL>
<LI><STRONG>Binary
packages</STRONG>(二进制软件包),它包含可执行文件、配置文件、man/info页面、版权声明和其它文档。这些软件包以Debian特定的格式发布(参阅<A
href="http://qref.sourceforge.net/Debian/reference/ch-system.zh-cn.html#s-deb-format">Debian软件包格式,
第 2.2.2
节</A>);它们通常使用<SAMP>.deb</SAMP>的扩展名以示区别。这种二进制软件包可使用Debian工具<SAMP>dpkg</SAMP>解包,详情见有关帮助页面。
</LI></UL>
<UL>
<LI><STRONG>Source
packages</STRONG>(源码包),包含一个<SAMP>.dsc</SAMP>文件它用于描述源码包(包括下列文件的名称),一个<SAMP>.orig.tar.gz</SAMP>文件它是未经修改的原始源代码压缩文件,以及一个<SAMP>.diff.gz</SAMP>文件它包含了该软件包Debian化时所做的修改。<SAMP>dpkg-source</SAMP>工具可用于打包/解包Debian源码包,详情可参阅有关帮助页面。
</LI></UL>
<P>软件包管理系统安装的软件包时需要读取那些由软件包维护者精心设计的关联信息,这些关联信息记录在每个软件包的<SAMP>control</SAMP>文件中。例如,包含GNU
C编译器(gcc)的软件包依赖于包含链接器和汇编器的<CODE>binutils</CODE>软件包。如果用户试图在没有安装<CODE>binutils</CODE>的情况下安装<CODE>gcc</CODE>,软件包管理系统(dpkg)就会发送一条错误信息,告诉你需要安装<CODE>binutils</CODE>,并停止安装<CODE>gcc</CODE>。(不过,倔强的用户可以对这个信息视而不见,参阅<CODE>dpkg(8)</CODE>)。)更多信息,参阅下面的章节<A
href="http://qref.sourceforge.net/Debian/reference/ch-system.zh-cn.html#s-depends">软件包关联性,
第 2.2.8 节</A>。
<P>Debian软件包管理工具可用于:
<UL>
<LI>操作和管理软件包或软件包的局部内容, </LI></UL>
<UL>
<LI>帮助那些使用有限容量载体如软盘传输的用户分割软件包, </LI></UL>
<UL>
<LI>帮助开发者将开发文件打包成软件包, </LI></UL>
<UL>
<LI>帮助用户从远程Debian文档站点安装软件包。 Debian archive site. </LI></UL>
<HR>
<A name=s-deb-format></A>
<H3>2.2.2 Debian软件包格式</H3>
<P>Debian“软件包”,或称之为Debian包文件(Debian archive
file),包含了可执行文件、库文件、和相关程序的文档。通常Debian文件的文件名以<SAMP>.deb</SAMP>结尾。
<P>Debian二进制软件包内部格式描述见<CODE>deb(5)</CODE>帮助页面。由于这种内部格式会改变的(特别对于Debian的新旧发布版),所以要操作<SAMP>.deb</SAMP>文件请参阅<CODE>dpkg-deb(8)</CODE>。
<P>即便在Woody发行版中,如果有Debian文件使用dpkg命令操作无效,还可用标准的Unix命令<CODE>ar</CODE>和<CODE>tar</CODE>来操作。
<HR>
<A name=s-pkgname></A>
<H3>2.2.3 Debian软件包命名约定</H3>
<P>Debian软件包命名遵循下列约定: <PRE> <VAR>foo</VAR>_<VAR>VersionNumber</VAR>-<VAR>DebianRevisionNumber</VAR>.deb
</PRE>
<P>其中<VAR>foo</VAR>代表软件包名称。确定某个特定Debian包文件(<SAMP>.deb</SAMP> file)的软件包名称有两种方法:
<UL>
<LI>在Debian包文件站点的软件包存放目录下查看“Packages”文件。该文件有一个段落包含了各个软件包的描述内容;其中第一个域列出了软件包正式名称。
</LI></UL>
<UL>
<LI>使用命令<SAMP>dpkg --info <VAR>foo_VVV-RRR</VAR>.deb</SAMP>(其中<VAR>VVV</VAR>
and <VAR>RRR</VAR>分别表示该软件包的版本号和修订版号)。屏幕上会显示该软件包解包后的软件包名称。 </LI></UL>
<P><VAR>VVV</VAR>字段代表该软件开发者制定的版本号。由于没有统一的版本号标准,所以它们的格式会各不相同例如“19990531”和“1.3.8pre1”。
<P><VAR>RRR</VAR>字段代表Debian修订版本号,它是由Debian开发者(或个人用户,假如他选择自己创建软件包的话)制定的。该版本号按照Debian软件包修订标准来制定;一个新的修订版通常表示对下列文件做了修改:Debian
makefile(<SAMP>debian/rules</SAMP>s),Debian管理文件(<SAMP>debian/control</SAMP>),安装或卸载脚本(<SAMP>debian/p*</SAMP>),或软件包配置文件。
<HR>
<A name=s-conffile></A>
<H3>2.2.4 保存本地设置</H3>
<P>Debian的“conffiles”机制,可保存用户配置文件。用户的配置文件(通常位于<CODE>/etc</CODE>)由Debian软件包管理系统登记到<SAMP>conffiles</SAMP>。当软件包升级后,软件包管理系统确保这些文件不被覆盖。
<P>如果不需修改各种软件包配置文件就能完成系统配置,那就别去修改它们,即使它们已登记到conffiles。这样做能保证快速平滑的升级操作。
<P>想准确了解哪些文件在升级过程中受到保护,运行: <PRE> dpkg --status <VAR>package</VAR>
</PRE>
<P>看看“Conffiles”下的文件名列表。
<P>有关Debian <SAMP>conffiles</SAMP>文件的详细内容,可参阅Debian Policy Manual的11.7节(参阅see <A
href="http://qref.sourceforge.net/Debian/reference/ch-support.zh-cn.html#s-references">参考资料,
第 15.1 节</A>)。
<HR>
<A name=s-maintscripts></A>
<H3>2.2.5 Debian维护脚本</H3>
<P>Debian维护脚本是一种可执行脚本,它在软件包安装之前或之后自动运行。它和一个名叫<SAMP>control</SAMP>的文件一起组成Debian包文件的“管理”部分。
<P>这些文件是:
<DL>
<DT>preinst
<DD>在Debian包文件解包之前,运行这个脚本。许多“preinst”脚本的任务是停止作用于待升级软件包的服务,直到软件包安装或升级完成。
</DD></DL>
<DL>
<DT>postinst
<DD>该脚本的任务是完成Debian包文件解包文件的配置工作。通常,“postinst”脚本等待用户输入,或提醒用户,如果他接受当前默认值,要记得软件包安装完后返回重新配置。许多“postinst”脚本负责执行有关命令为新安装或升级的软件重启服务。
</DD></DL>
<DL>
<DT>prerm
<DD>该脚本负责停止与软件包关联的daemon服务。它在删除软件包关联文件之前执行。 </DD></DL>
<DL>
<DT>postrm
<DD>该脚本负责修改软件包链接或文件关联,或删除由它创建的文件。(参阅<A
href="http://qref.sourceforge.net/Debian/reference/ch-system.zh-cn.html#s-virtual">虚拟软件包,
第 2.2.7 节</A>)。 </DD></DL>
<P>当前,所有的管理文件都存放在<CODE>/var/lib/dpkg/info</CODE>目录。与<SAMP>foo</SAMP>软件包相关的文件,名字以“foo”打头,以“preinst”、“postinst”等为扩展名。目录中的<SAMP>foo.list</SAMP>文件列出了<SAMP>foo</SAMP>软件包安装的所有文件。(注意这些文件的位置在由dpkg来确定,可能会因Debina版本而异)
<HR>
<A name=s-priority></A>
<H3>2.2.6 软件包优先级</H3>
<P>每个Debian软件包均被发布者指点了一个<STRONG>优先级</STRONG>,作为软件包管理系统的一个辅助参数,优先级的值有:
<UL>
<LI><STRONG>Required</STRONG> 该级别软件包是保证系统正常运行必须的。
<P>包含所有必要的系统修补工具。不要删除这些软件包,否则整个系统将受到损坏,甚至无法使用<CODE>dpkg</CODE>恢复。只安装Required级软件包的系统不可能满足所有的用途,但它可以启动起来,让系统管理员安装想要的软件。
</P></LI></UL>
<UL>
<LI><STRONG>Important</STRONG> 在任何类Unix系统上均安装有该级别软件包。
<P>系统若缺少这类软件,会运行困难或不好操作。该级别软件包并<STRONG>不</STRONG>包括Emacs或X11或TeX或其它大型应用程序,它们只是一些实现系统底层功能的程序。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -