第一章 序言
Debian参考手册旨在为运行Debian的用户提供全面的指导。我们假设本文档的读者愿意阅读shell脚本,并且在阅读文档前已具有类Unix系统操作的基础技能。
我并不打算在文中解释所有的细节,因为你可以在manual页面、info页面或HOWTO文档中获得这些。我希望为读者提供些更直接实用的信息而非名词解释,这信息包含在文中列出确切的命令行序列和examples(http://www.debian.org/doc/manuals/reference/examples/)目录下的脚本样例中。
文中大量的技巧提示均引述自权威参考文献,在〖15.1 参考书目〗 中列出这些参考书目。这也是本文档最初称为“快速参考”的原因之一。
言简意赅(Keep it short and simple 缩写为KISS)是本文写作的主导思想。
如果你在寻找系统紧急救助方面的帮助,请直接阅读〖6.2 Debian生存命令〗。
1.1 官方文档
本文档的最新官方文档包含在名为debian-reference的软件包中,你也可在http://www.debian.org/doc/manuals/debian-reference/ 上访问到它。
本文档最新开发版本位于http://qref.sourceforge.net/Debian/。该文档项目位于http://qref.sourceforge.net/ ,在那可以下载本文档的纯文本格式,HTML格式、PDF格式、SGML格式和PostScript格式。
1.2 文档约定
文中许多信息通过简短的Bash shell命令给出,以下是其排版格式约定:
# command in root account root用户命令
$ command in user account 普通用户命令
... description of action 命令动作描述
更多信息参见〖13.2.1 Bash-GNU标准交互式shell〗。
参考:
·bash(1)表示Unix manual页面信息。
·info libc表示GNU TEXINFO页面信息。
·The C Programming Language表示参考书目。
·http://www.debian.org/doc/manuals/debian-reference表示URL。
·/usr/share/doc/Debian/reference表示文件。
文中用到了下列缩写:
LDP:Linux Documentation Project(http://www.tldp.org/)
DDP Debian Documentation Project(http://www.debian.org/doc/)
文中只提供了LDP文档的URLs,这些文档还可以以软件包的形式获得,它们安装在/usr/share/doc/HOWTO/。参阅〖15.1 Debian参考〗。
1.3 脚本样例
脚本样例可以在examples子目录下找到;其中隐藏文件文件名前的“.”转化为下划线“_”,可选脚本样例给出了扩展名。
1.4 基本设置
如果你的系统是最小安装,请执行下面的命令安装必需的软件包和关键文档。
# apt-get install info man-db doc-base dhelp apt apt-utils auto-apt /
dpkg less mc ssh nano-tiny elvis-tiny vim sash /
kernel-package /
manpages manpages-dev doc-debian doc-linux-text /
debian-policy developers-reference maint-guide /
apt-howto harden-doc install-doc /
libpam-doc glibc-doc samba-doc exim-doc cvsbook /
gnupg-doc
# apt-get install debian-reference # for Sarge, do this too
1.5 Debian发行版(distributions)基本概念
Debian发行版有3种“风格”:
stable:适用于架设产品化服务器,不适用于工作站用户(workstation 缩写WS)。参阅〖2.1.3 stable发布版〗。
testing:适用于工作站用户。参阅〖2.1.4 testing发布版〗。
unstable:千万别盲目使用。参阅〖2.1.5 unstable发布版〗。
有关Debian的版本更新情况,请阅读最新的相关邮件列表:debian-devel-announce@lists.debian.org。
在2002年3月时,这三个发行版对应为potato(产品化品质),woody(beta-test,非常稳定即将发布),和sid(alpha-test)。到2002年8月,也就是woody刚刚发布,三个发行版对应为woody(产品化品质),sarge(beta-test,有时运行不够稳定),和sid(总处于alpha-test)。如果unstable发行版中的软件包不再出现Release Critical(RC)错误,一周后将自动升级到testing发行版。参阅〖2.1 Debian文件〗。
理论上,获得运行软件的最新版本的有两种方法。
·〖6.2.2 使用APT安装系统〗(主要用于工作站)
·〖6.3.11 向stable系统引入软件包〗(主要用于服务器)
在〖2. Debian基础〗中我们将讲解有关Debian发行版的一些基本概念,之后,我将向你介绍一些基本信息以帮助你与最新软件快乐相处,并从testing和unstable发布版中获益。心急的读者可以直接翻到〖6.2 Debian生存命令〗。
祝你升级愉快!
第二章 Debian基础
本章讲述非开发人员需要掌握的Debian系统基础知识。有关知识的权威参考,请参阅:
·Debian政策手册 (Debian Policy Manual)
·Debian软件包包装手册(Potato) (Debian Packaging Manual(Potato))
·Debian开发者参考 (Debian Developer's Referecne)
·Debian维护新手指南 (Debian New Maintainers'Guide)
列表见〖15.1 参考书目〗
如果你想查阅简要的“how-to”解释文档,可直接跳到〖6. Debian软件包管理〗或其它相关章节。
本章的内容取自“Debian FAQ”,经过较大的改编,以适于普通Debian系统管理者上手。
2.1 Debian文件
2.1.1 目录结构
Debian软件包位于Debian镜像站点的目录树中。
下列目录存在于任何Debian镜像站点的/debian/目录下:
/dists/:
本目录包含“发行版”(distributions),此处是获得Debian发布版本(releases)和已发布版本(pre-releases)的软件包的正规途径。有些旧软件包及packages.gz文件仍在其中。
/pool/:
所有Debian发布版及已发布版的软件包的新的物理地址。
/tools/:
一些DOS下的小工具,用于创建启动盘、硬盘分区、压缩/解压缩和启动Linux。
/doc/:
Debian的基本文档,如FAQ、错误报告系统使用说明等。
/indices/:
维护人员文件和重载文件。
/project/:
大部分为开发人员的资源,如:
project/experimental/:
本目录包含了处于开发中的软件包和工具,它们均处于alpha测试阶段。用户不应使用这些软件,因为即使是经验丰富的用户也会被搞得一团糟。
/project/orphaned/:
已不再有人维护的软件包,它们已从发行版中孤立出来。
2.1.2 Debian发行版
通常在dists目录下有三个Debian发行版。它们是“stable”发行版,“testing”发行版,和“unstable”发行版。有时还有一个“frozen”发行版。每个发行版均定义成一个符号链接指向该目录相应的代号目录。
2.1.3 stable发行版
stable发行版软件包入口,Debian Woody(3.0r0)被登记到stable目录(符号链接指向Woody目录):
·stable/main/:
本目录包含的软件包均是最新Debian系统发布版的正式组成部分。这些软件包均遵循“Debian自由软件包指导”(Debian Free Software Guidelines,它位于/usr/share/doc/debian/social-contract.txt,须安装debian-doc),它们均可以自由使用和再发行。
·stable/non-free/:
本目录包含的软件包受到一定限制,发行者需遵循特殊版权要求。例如,有些软件包的许可证禁止其用于商业发行的。有些虽可以再发行,但本身是共享软件而非自由软件。以任何方式再发行这些软件包时(例如写入光盘)必须认真阅读有关的许可证或与所有者协商。
·stable/contrib/:
本目录包含的软件包均遵循DFSG-free原则,本身也是自由发布的,但这些软件包的关联包不具有自由发行的属性,它们位于non-free目录。
除了上述的目录,新上载的软件包的物理存储位置为pool目录(〖2.1.10 pool目录〗)。
现阶段stable发行版错误报告位于Stable Problems页面。
2.1.4 testing发行版
testing发行版软件包入口,处于unstable版本的Debian Sarge通过级别测试后登记到testing目录(符号链接指向Sarge目录)。现在,除了上述目录,新上载的软件包的物理存储位置为pool目录(〖2.1.10 pool目录〗)。在testing下同样有main,contrib和non-free子目录,它们的作用与stable中的一样。
这些软件包必须可同时运行于所有架构,并且没有关联性问题影响到其安装。比起在unstable中的相应版本,它们有更少的release-critical错误。我们将testing作为更佳发布候选版本。有关testing版本的更多信息见于http://ftp-master.debian.org/testing/。
testing发行版的最新消息发布在下列站点:
·更新理由 http://ftp-master.debian.org/testing/update_excuses.html
·问题测试http://ftp-master.debian.org/testing/testing_probs.html
·阻碍发布的错误http://bugs.debian.org/release-critical/
·基本系统错误http://base.debian.net/
·标准软件包和任务包错误http://standard.debian.net/
·其它错误记录http://bugs.debian.net/
2.1.5 unstable发行版
unstable发行版软件包入口,sid被登记到unstable目录(符号链接指向sid),上载的软件包在被移至testing目录前一直呆在这儿。新上载的软件包的物理存储位置为pool目录(〖2.1.10 pool目录〗)。在testing下同样有main,contrib和non-free子目录,它们的作用与stable中的一样。
unstable发行版反映了系统的最新开发进展。欢迎广大用户使用并测试这些软件包,同时也提醒你们这些软件包还不完善。使用unstable发行版的好处就是你可以获得Debian项目的最新更新——不过新东西也会出新问题,你得好坏兼收:-)
unstable发行版的最新错误报告见于http://ftp-master.debian.org/testing/unstable_probs.html 页面。
2.1.6 frozen发行版
当testing发行版足够成熟了,它成为frozen发行版,表示这个版本不再加入新代码,只进行除错工作。同时,dists目录中会建立新的testing发行版目录树,并命名新的版本代号。frozen发行版再经过几个月的测试、更新、再冻结也称之为“循环测试”。(新近的woody发布进程没有创建frozen符号链接,所以frozen并不算发行版,仅仅是testing发行版的一个开发阶段。)
我们将frozen发行版中可能延迟软件包或整个版本发布的错误都记录在案,一但错误总数低于可接受的最大值,frozen发行版就晋升成stable,新版本发布了,先前发布的版本成为过期版(obsolete)(并被移于相应的目录)。
2.1.7 Debian发布版代号
存在于dists目录下的物理目录名,例如Woody和Sarge,就是“版本代号(codenames)”。当某个Debian发行版处于开发阶段,它并没有版本号,取而代之的是版本代号。使用版本代号的目的在于简化建立Debian发行版镜像的工作(如果真实目录例如unstable突然改名为stable,许多文件都没必要再次下载)。
当前,stable是一个指向Woody的符号链接,testing是指向Sarge的符号链接。也就是说Woody是当前的stable发行版,Sarge是当前的testing发行版。
unstable发行版是指向sid的永久符号链接,即unstable发行版总称为sid。
2.1.8 已用过的发布版代号
已使用过的发行版代号有:buzz for release 1.1,rex for release 1.2,bo for releases 1.3.x,hamm for release 2.0,slink for release 2.1和potato for release 2.2。
2.1.9 发布版代号来源
到目前为止它们均出自Pixar的电影“玩具总动员(Toy Story)”
·Buzz(Buzz Lightyear)是个宇航员,
·Rex是只暴龙,
·Bo(Bo Peep)是个放羊的女孩,
·Hamm是个小猪攒钱罐,
·Slink(Slinky Dog)是只玩具狗,
·Sarge是位绿色塑料玩具士兵首领,
·Potato当然就是Potato Head先生,
·Woody是个牛仔,
·Sid是隔壁的男孩,那个玩具终结者。
2.1.10 pool目录
过去,软件包均放在dists目录下相应发行版的子目录中。这种做法产生了许多问题,当镜像站点进行新版本发布时大量带宽被消耗。
现在软件包均放进一个巨大的“池子(pool)”,按照源码包名称分类存放。为了方便管理,pool目录下按属性再分类(main,contrib和non-free),分类下面再按源码包名称的首字母归档。这些目录包含的文件有:运行于各种系统架构的二进制软件包,生成这些二进制软件包的源码包。
你可以执行命令apt-cache showsrc mypackagename,查看“Directory:”行获知每个软件包的存放位置。例如:apache软件包存放在pool/main/a/apache/目录中。由于lib*软件包数量巨大,它们以特殊的方式归档:例如,libpaper软件包存放在pool/main/libp/libpaper/。
诸如apt等命令访问的索引文件仍位于dists目录中,直到本文写作之时,旧发行版的软件包还没转到pool目录,所以你将看到路径的“Filename”域中包含有发行版名称如potato或woody。
通常,你大可不必注意这些,新版的apt和旧版dpkg-ftp(参阅〖2.3.1 Debian系统升级方法〗)会自动处理它们。想了解更多信息,参阅〖Debian Package Pools FAQ〗http://people.debian.org/~joeyh/poolfaq。
2.1.11 sid诞生记
过去sid并不存在,Debian文件组织只有一个主要的工作流程:假设当前unstable发行版中创建了某个软件开发项目,当unstable成为新的stable版之时,便是它的发布之日。由于软件包一但发布就需要移动到新的stable目录,当众多软件开发项目移动目录时大量带宽会被吞噬掉,这个流程就显得很不切实际,因而许多软件开发项目并没有按这个方法行事。
经过几年的研究摸索,文档管理员提出一个方案,将未获准发布的二进制文档存入名为sid的特定目录。由于这些软件尚未发布,从那时起,它们就被加入到unstable目录树。当它们首次发布时,将会建立一个从当前stable指向sid的链接。这个方案用户听起来的确有些晕头。
有了软件包储藏池,在woody发行版开发过程中,二进制软件包均按一定规范存放于pool目录,而与发行版无直接关系,当发布新版本时,就不会再出现大量带宽被消耗的问题。(不过,大量带宽还是被开发进程消耗了)。
2.1.12 上载到incoming中的软件包
上载的软件包首先存放于http://incoming.debian.org/经过检收,确定它们是由Debian开发者上载的(对于那些属于无维护者上载(Non-Maintainer Upload 缩写 NMU)的软件包则放入DELAYED子目录)。会有一天,它们将从incoming移入unstable。
在紧急情况下,你可能会等不及它们移入unstable而直接从incoming中下载安装。
2.1.13 找回旧软件包
最新的Debian发行版存放在任何一个Debian镜像站点的debian目录下。旧版本的Debian如Slink存放在http://archive.debian.org/或Debian镜像站点的debian-archive目录下。
旧的testing和unstable软件包存放在http://snapshot.debian.net/。
2.1.14 发布源目录结构
在每个主目录树下(dists/stable/main,dists/stable/contrib,dists/stable/non-free,dists/unstable/main/,等)按芯片架构又分了子目录,每个子目录中存放着在该芯片架构下编译的二进制软件包。
·binary-all/,存放与芯片架构无关的软件包,如Perl脚本、纯文档等。
·binary-platform/,存放运行于该平台的二进制软件包。
请注意,testing和unstable发行版的二进制软件包实际并没存放在这些目录中,它们存放在上一级pool目录中。目录中仍保留有索引文件(Packages和Packages.gz)是为了向下兼容。
要获得有关二进制架构技术支持,参阅各发行版的发布手记(Release Notes),可以访问发布手记站点http://www.debian.org/releases/stable/releasenotes和http://www.debian.org/releases/testing/releasenotes。
2.1.15 源代码
Debian系统中的一切程序都有源代码,不仅如此,许可证条款规定系统中所有的程序必须和其源代码一起发行,或提供源代码出售。
通常源代码存放在source目录,同时处于多个架构目录(参阅〖2.1.10 pool目录〗)。对于不太熟悉Debian归档目录结构的用户想获得源代码可以试试:
apt-get source mypackagename
命令。
有些软件包,如著名的pine,由于许可证限制,只提供源码包。(最近,pine-tracker软件包提供了一个简易的安装版)安装源码包的方法可参阅〖6.3.11 向stable系统引入软件包〗,〖13.9 封装〗教你如何手工创建一个软件包。
contrib和non-free目录中的软件包可能不提供源代码,因为它们没有正式加入Debian系统。
2.2 Debian软件包管理系统
2.2.1 Debian软件包概述
软件包通常包含了实现一系列相关命令或特性所必须的所有的文件。有两种类型的Debian软件包:
·二进制软件包(Binary packages),它包含可执行文件、配置文件、man/info页面、版权声明和其它文档。这些软件包以Debian特定的格式发布(参阅〖2.2.2 Debian软件包格式〗);它们通常使用.deb的扩展名以示区别。这种二进制软件包可使用Debian工具dpkg解包,详情见有关帮助页面。
·源码包(Source packages),包含一个.dsc文件它用于描述源码包(包括下列文件的名称),一个.orig.tar.gz文件它是未经修改的原始源代码压缩文件,以及一个.diff.gz文件它包含了该软件包Debian化时所做的修改。dpkg-source工具可用于打包/解包Debian源码包,详情可参阅有关帮助页面。
软件包管理系统在安装软件包时需要读取那些由软件包维护者精心设计的关联信息,这些关联信息记录在每个软件包的control文件中。例如,包含GNU C编译器(gcc)依赖于binutils软件包。如果用户试图在没有安装binutils情况下安装gcc,软件包管理系统(dpkg)就会发送一条错误信息,告诉你需要安装binutils,并停止安装gcc。(不过,倔强的用户可以对这个信息视而不见,参阅dpkg(8)。)更多信息,参阅下面的章节〖2.2.8 软件包关联性〗。
Debian软件包管理工具可用于:
·操作和管理软件包或软件包的局部内容,
·帮助那些使用有限容量载体如软盘传输的用户分割软件包,
·帮助开发者将开发文件打包成软件包,
·帮助用户从远程Debian文档站点安装软件包。
2.2.2 Debian软件包格式
Debian“软件包”,或称之为Debian包文件(Debian archive file),包含了可执行文件、库文件、和相关程序的文档。通常Debian文件的文件名以.deb结尾。
Debian二进制软件包内部格式描述见deb(5)帮助页面。由于这种内部格式会改变的(特别对于Debian的新旧发布版),所以要操作.deb文件请参阅dpkg-deb(8)。
即便在Woody发行版中,如果有Debian文件使用dpkg命令操作无效,还可用标准的Unix命令ar和tar来操作。
2.2.3 Debian软件包命名约定
Debian软件包命名遵循下列约定:
foo_VersionNumber-DebianRevisionNumber.deb
其中foo代表软件包名称。确定某个特定Debian包文件(.deb文件)的软件包名称有两种方法:
·在Debian包文件站点的软件包存放目录下查看“Packages”文件。该文件有一个段落包含了各个软件包的描述内容;其中第一个域列出了软件包正式名称。
·使用命令dpkg --info foo_VVV-RRR.deb(其中VVV和RRR分别表示该软件包的版本号和修订版号)。屏幕上会显示该软件包解包后的软件包名称。
VVV字段代表该软件开发者制定的版本号。由于没有统一的版本号标准,所以它们的格式会各不相同例如“19990531”和“1.3.8pre1”。
RRR字段代表Debian修订版本号,它是由Debian开发者(或个人用户,假如他选择自己创建软件包的话)制定的。该版本号按照Debian软件包修订标准来制定;一个新的修订版通常表示对下列文件做了修改:Debian makefile(debian/rules),Debian管理文件(debian/control),安装或卸载脚本(debian/p*),或软件包配置文件。
2.2.4 保存本地设置
Debian的“conffiles”机制,可保存用户配置文件。用户的配置文件(通常位于/etc)由Debian软件包管理系统登记到conffiles。当软件包升级后,软件包管理系统确保这些文件不被覆盖。
如果不需修改各种软件包配置文件就能完成系统配置,那就别去修改它们,即使它们已登记到conffiles。这样做能保证快速平滑的升级操作。
想准确了解哪些文件在升级过程中受到保护,运行:
dpkg --status package
看看“Conffiles”下的文件名列表。
有关Debian conffiles文件的详细内容,可参阅〖Debian Policy Manual〗的11.7节(参阅〖15.1 参考资料〗)。
2.2.5 Debian维护脚本
Debian维护脚本是一种可执行脚本,它在软件包安装之前或之后自动运行。它和一个名叫control的文件一起组成Debian包文件的“管理”部分。
这些文件是:
preinst
在Debian包文件解包之前,运行这个脚本。许多“preinst”脚本的任务是停止作用于待升级软件包的服务,直到软件包安装或升级完成。
Postinst
该脚本的任务是完成Debian包文件解包文件的配置工作。通常,“postinst”脚本等待用户输入,或提醒用户,如果他接受当前默认值,要记得软件包安装完后返回重新配置。许多“postinst”脚本负责执行有关命令为新安装或升级的软件重启服务。
Prerm
该脚本负责停止与软件包关联的daemon服务。它在删除软件包关联文件之前执行。
Postrm
该脚本负责修改软件包链接或文件关联,或删除由它创建的文件。(参阅〖2.2.7 虚拟包〗)
当前,所有的管理文件都存放在/var/lib/dpkg/info目录。与foo软件包相关的文件,名字以“foo”打头,以“preinst”、“postinst”等为扩展名。目录中的foo.list文件列出了foo软件包安装的所有文件。(注意这些文件的位置在由dpkg来确定,可能会因Debina版本而异)。
2.2.6 软件包优先级
每个Debian软件包均被发布者指点了一个优先级,软件包管理系统优先级是:
·Required 该级别软件包是保证系统正常运行必须的。
包含所有必要的系统修补工具。不要删除这些软件包,否则整个系统将受到损坏,甚至无法使用dpkg恢复。只安装Required级软件包的系统不可能满足所有的用途,但它可以启动起来,让系统管理员安装想要的软件。
·Important 在任何类Unix系统上均安装有该级别软件包。
系统若缺少这类软件,会运行困难或不好操作。该级别软件包并不包括Emacs或X11或TeX或其它大型应用程序,它们只是一些实现系统底层功能的程序。
·Standard 该级别软件包是任何Linux系统的标准件,它们组成一个小而精的字符模式的系统。
系统的默认安装就包括了它们。“Standard”级软件包不包括许多大型应用程序,但它包括Emacs(它比其它应用程序更底层)和Tex及LaTeX的精巧版(不支持X)。
·Optional 该级别软件包包括那些你可能想安装的软件,即使对它们并不熟悉。
它们包括X11,TeX完整发布版和许多应用程序。
·Extra 该级别软件包可能与其它高级别软件包冲突,仅当你知道其用途时才会使用它们,或者有运行它们有专门要求,这些都使它们不适合定为“Optional”级。
2.2.7 虚拟软件包
虚拟软件包是一个统称,用来指一组具有相近功能的软件包。举个例子,tin和trn都是新闻组阅读软件,当系统中某个程序需要调用新闻阅读器工作时就会产会一个关联关系,它们必须满足这个关联,我们也称之为它们提供了一个叫做news-reader的“虚拟软件包”。
又如,exim和sendmail都提供邮件传输代理的功能。也可称之为提供“邮件传输代理”虚拟包,如果安装了两者之一,那么任何与mail-transport-agent有关联关系的程序发出调用命令时,都会通过这个虚拟包实现调用。
Debian有个机制,如果系统中提供同种虚拟包的软件包安装了多个,系统管理员可以指定一个为首选软件。相关的命令是update-alternatives,更详细的描述参阅〖6.4.3 激活命令〗。
2.2.8 软件包关联性
Debian软件包管理系统有一套软件包“依赖性”定义(用一个标志)用来描述独立运行程序A与现存系统中程序B的存在之间的关系疏密程度:
·软件包A依赖(depends)软件包B:要运行A必须安装B。在有些情况下,A不仅依赖B,还要求B的特定版本。版本依赖通常有最低版限制,A更依赖于B的最新版而非某个特定版本。
·软件包A推荐(recommends)软件包B:软件包维护者认为所有用户都不会喜欢缺少某些功能的A,而这些功能需要B来提供。
·软件包A建议(suggests)软件包B:B中某些文件与A的功能相关(通常能增强其功能)。
·软件包A与软件包B冲突(conflicts):如果系统中安装了B那么A无法运行。多数情况下,冲突是由于A中包含了B中文件的改进版。“Conflicts”常和“replaces” 同时出现。
·软件包A替换(replaces)软件包B:B安装的文件被A中的文件移除和覆盖了。
·软件包A提供(provides)软件包B:A中包含了B中的所有文件和功能。这种机制为那些受限于磁盘空间的用户提供了一个途径,只安装A中他们直正需要的部分。
上述术语使用方法的更详细的信息参阅〖Packaging Manual〗和〖Policy Manual〗。
注意,dselect可以对recommend和suggests类软件包进行细操作,apt-get只会简单的下载安装depends类软件包而不管recommends和suggests类软件包。这两个程序均正式使用APT作为其后台。
2.2.9 何为“pre-depends
“pre-depends”是一种特殊关联关系。对于一个普通软件包,不管系统中是否存在它的关联文件,dpkg都会将它解包。解包主要指dpkg从软件包中取出安装文件。如果系统中不存在这些软件包依赖的软件包,dpkg会拒绝完成安装(通过执行它的“configure”动作)直至安装完所需的软件包。
然而,对有些软件包,dpkg会拒绝解包,除非关联问题被解决。这种软件包就称为“pre-depend”于其它软件包。Debina提供这种机制是为了支持系统从a.out格式向ELF格式安全升级,在这种情况下执行解包操作是非常危险的。对于某些重在升级这种机制也很有用,例如对那些“required”级并有libc关联的软件包。
再次,更多详细信息参阅〖Packaging Manual〗。
2.2.10 软件包状态
软件包有各种状态:“unknown”,“install”,“remove”,“purge”和“hold”。这些“希望”标记描述了用户打算如何操作这些软件包(既可以使用dselect的“Select”菜单,也可以直接调用dpkg)。
它们的意思是:
·unknown - 用户并没描述他想对软件包进行什么操作。
·install - 用户希望对软件包进行安装或升级。
·remove - 用户希望删除软件包,但不想删除任何配置文件。
·purge - 用户希望完全删除软件包,包括配置文件。
·hold - 用户希望软件包保持现状,例如,用户希望保持当前的版本,当前的状态,当前的一切。
2.2.11 阻止软件包升级
有两种方法阻止软件包升级,使用dpkg,或者在Woody中使用APT。
使用dpkg,首先导出软件包选择列表:
dpkg --get-selections /* > selections.txt
接着编辑文件selections.txt,修改想要恢复的软件所在的行,例如libc6,则将:
libc6 install改为:libc6 hold保存文件,将它装入dpkg数据库:
dpkg --set-selections < selections.txt
或者,如果你知道要恢复的软件包名称,执行:
echo libc6 hold | dpkg --set-selections
这个命令将在每个软件包安装过程中保持该软件包不变。
使用dselect也可以达到同样的效果。进入[S]elect屏幕,找到想阻止其升级的软件包,按“=”键(或者“H”)。更改在你退出[Select]屏幕后立即生效
Woody中的APT系统有一个新机制来阻止软件包升级,在下载升级档进程中使用Pin-Priority。参阅帮助页面apt-preferecnes(5),或阅读http://www.debian.org/doc/manuals/apt-howto/。
2.2.12 源码包
源码包发布在source目录中,既可以手工下载可以使用
apt-get source foo
获取它们(参阅apt-get(8)帮助页面)。
2.2.13 编译源码包
对于foo软件包,从源码编译需要foo_*.dsc,foo_*.tar.gz,foo_*.diff.gz文件(注意,对于由Debian开发的软件包,没有.diff.gz文件)。
当你得全了这些文件,如果你这安装了dpkg-dev软件包,运行:
$ dpkg-source -x foo_version-revision.dsc
它将软件包解压到一个名为foo-version的目录。
使用下列命令创建二进制软件包:
$ cd foo-version
$ su -c "apt-get update ; apt-get install fakeroot"
$ dpkg-buildpackage -rfakeroot -us –uc
然后,
# su -c "dpkg -i ../foo_version-revision_arch.deb"
安装新编译的软件包。参阅〖6.3.11 向stable系统引入软件包〗。
2.2.14 新建Debian软件包
创建新软件包的详细信息,参阅〖New Maintainer's Guide〗,该文档在maint-guide包中,或浏览http://www.debian.org/doc/manuals/maint-guide/。
2.3 Debian系统升级
Debian的设计目标之一就是提供一个一致的升级途径和安全的升级过程,我们致力于旧版本的平滑升级,软件包在升级过程中会将重要信息反馈给用户,并提供一个可能的解决方案。
你也应该阅读发布手记(Release Notes),该文档描述了升级的详细情况,它存在于所有的Debian光盘中,也可以通过互联网访问http://www.debian.org/releases/stable/releasenotes或http://www.debian.org/release/testing/releasenotes。
〖6. Debian软件包管理〗提供了升级的实用指南,本节只作基础细节的介绍。
2.3.1 系统升级方法
你可以简单的执行匿名FTP或用wget查找想安装的Debian包文件,然后下载,用dpkg装上。(注意dpkg随时随地都能安装升级文件,甚至是正在运行的系统上)然而,有时安装修订包需要先安装其它软件包的新版本,这时安装就会停止,直到所需的软件包被安装好。
许多人觉得这种手工安装太费时,加上Debian软件包升级是那样频繁——通常,每周会上载十几个新软件包。在新版本发布前期更新量更是加倍。为了跟上更新速度,许多用户更乐意使用自动化升级工具。基于此目的出现了几种专门的软件包管理工具。
2.3.2 软件包管理工具概述
Debian软件包管理系统有两个设计目标:实现对软件包文件和包中文件的操作。APT和dselect完成前者,dpkg完成后者。
2.3.3 dpkg
它是操作软件包文件的主要工具;参阅dpkg(8)获得完整信息。
dpkg由几个原始的辅助程序演化而来。
·dpkg-deb:操作.deb文件。dpkg-deb(1)
·dpkg-ftp:一个旧的软件包获取命令。dpkg-ftp(1)
·dpkg-mountable:一个旧的软件包获取命令。dpkg-mountable(1)
·dpkg-split:将大软件包分割成小包。dpkg-split(1)
dpkg-ftp和dpkg-mountable已被新的APT系统取代。
2.3.4 APT
APT(the Advanced Packaging Tool)是Debian软件包管理系统的高级界面,由几个名字以“apt-”打头的程序组成。apt-get、apt-cache、apt-cdrom是处理软件包的命令行工具,它们也是其它用户前台程序的后端,如dselect和aptitude。
更多信息,可安装apt软件包后阅读apt-get(8)、apt-cache(8)、apt-cdrom(8)、apt.conf(5)、sources.list(5)、apt_preferences(5)(woody)以及/usr/share/doc/apt/guide.html/index.html。
另一个资源是〖APT HOWTO〗(http://www.debian.org/doc/manuals/apt-howto/),如果安装了apt-howto包,可在/usr/share/doc/Debian/apt-howto/中找到它。
apt-get upgrade和apt-get dist-upgrade只获取“Depends”类软件包,它忽略“Recommend”和“Suggests”类软件包,不想这样的话,可使用dselect。
2.3.5 dselect
这个程序是Debian软件包管理系统中菜单驱动的用户界面。特别适用于首次安装和大面积升级。参阅〖6.3.8 dselect——全面配置〗。
更多信息,可安装install-doc包后阅读/usr/share/doc/install-doc/dselect-beginner.en.html或〖dselect Documentation for Beginners〗(http://www.debian.org/releases/woody/i386/dselect-beginner) 。
2.3.6 不停机系统升级
Debian系统的内核(文件系统)支持替换使用中文件。
我们还提供了一个程序start-stop-daemon用来在系统启动时开启daemons或内核运行级别(runlevel)改变时停止daemons(例如:从multi-user级转到single-user级或关机)。当安装新软件包时如果该软件包中包含daemon安装,安装脚本会调用这个程序,停止运行中的daemons,然后在合适的时候重启它们。
注意,Debian系统不要求用户在single-user模式下进行不停机升级。
2.3.7 下载和缓存.deb文件
如果你手工下载包文件到硬盘(这完全没有必要,请阅读上面有关dpkg-ftp或APT的内容),当你完成软件包安装工作后,可以从系统中删除.deb文件。
如果是使用APT,这些文件会缓存在/var/cache/apt/archives/目录中。你可以在完成安装后删除它们(apt-get clean)或者将它们拷贝到另一个机器的/var/cache/apt/archives/目录中以备以后的安装。
2.3.8 升级记录
dpkg会对软件包的解包、配置、删除、完全删除进行记录,但不能(目前是这样)记录在包操作的过程中活跃终端的行为。
最简单的解决方法是在运行dpkg、dselect、apt-get等工具的会话中加入script(1)程序。
2.4 Debian系统引导进程
2.4.1 init程序
同所有的Unix一样,Debian启动要执行init程序。init的配置文件(/etc/inittab)中指定的第一个执行脚本应该是/etc/init.d/rcS。该脚本跟据/etc/rcS.d目录中各脚本的扩展名回溯或分流子进程完成诸如检查并挂载文件系统、装载内核模块、启动网络服务、设定时钟等系统初始化工作。接着,为了兼容性考虑,它运行/etc/rc.boot目录下的文件(除了那些文件名中包含“.”的文件),目录中的脚本通常是供系统管理员使用的,用于有兼容性问题的软件包。更多信息参见〖9.1 系统初始化提示〗。
2.4.2 运行级别
完成系统启动进程后,init执行默认运行级别(该运行级别由/etc/inittab中的id给出)指定的所有的启动脚本。同所有System V兼容Unix一样,Linux有7个运行级别:
·0(关闭系统),
·1(单用户模式 single-user mode),
·2到5(各种多用户模式 multi-user modes),
·6(重启系统)。
Debian系统运行id=2,它表示进入多用户模式时默认运行级别为2,所以将运行/etc/rc2.d中的脚本。
实际上,任意目录/etc/rcN.d中的脚本都是指向/etc/init.d/的符号链接。然而,每个/etc/rcN.d目录中文件的名称用来指定/etc/init.d相应脚本的运行方式。特别是,在进入任何运行级别之前,所有名称以“K”打头的脚本均被运行,这些脚本的工作是中止进程。然后,所有名称以“S”打头的脚本被运行,这些脚本的工作是启动进程。名称中跟在“K”或“S”后的两位数规定了脚本运行的先后次序,数字小的脚本先运行。采用这种工作方式是因为/etc/init.d/中的脚本均有一个参数规定脚本“start”、“stop”、“reload”、“restart”或“force-reload”,脚本按各自参数的赋值执行任务。这些脚本甚至可以在系统启动后用来控制多进程。
例如,使用带“reload”参数的命令
# /etc/init.d/sendmail reload
发给sendmail daemon进程一个信号,要它重读配置文件。
2.4.3 自定义系统引导进程
Debian没有使用BSD风格的rc.local目录来自定义系统引导进程;它提供自己的自定义机制。
假设系统要在启动时运行foo脚本,或进入指定的(System V)运行级别。那系统管理员可以这样:
1.将foo脚本加入/etc/init.d/目录。
2.使用合适的参数运行Debian命令update-rc.d,这样就在(命令行指定的)rc?.d目录和/etc/init.d/foo之间建立了链接,这里?是0到6中的一个数字,对应于System V的各个运行级别。
3.重启系统。
update-rc.d命令会建立rc?.d目录中文件与/etc/init.d/目录中脚本的链接,每个链接名会以“S”或“K”打头,接下来是一个数字,再就是脚本名。/etc/rcN.d/中以“S”打头的脚本在系统进入运行级别N时被执行。以“K”打头的脚本在离开运行级别N时被执行。
还可以这样来做,将脚本放在/etc/init.d/下然后使用update-rc.d foo default 19建立链接,让foo脚本在系统启动期间执行。参数defaults指默认运行级别,它可以是2到5中某个值。参数19确保foo在其它参数大于20的脚本之前执行。
2.5 多样性支持
Debian提供几种途径,在不破坏系统的前提下满足系统管理员各种要求。
·dpkg-divert,参阅〖6.4.1 dpkg-divert命令〗。
·equivs,参阅〖6.4.2 equivs软件包〗。
·update-alternative,参阅〖6.4.3 可选命令〗。
·make-kpkg可以支持多启动引导。参阅make-kpkg(1)和〖7.1.1 Debian标准方法〗。
/usr/local目录下的所有文件均属于系统管理员,Debian不会改动它们。/etc下的大部分(或全部)文件属于conffiles,Debian不会在升级后覆盖它们,除非系统管理员明确要求覆盖。
2.6 国际化
Debian系统是国际化产品,不论是在控制台下还是在X下,它都提供多种语言的字符显示和输入支持。许多文档、帮助页面以及系统消息都被翻译成各种语言。在安装过程中,Debian提示用户选择安装语言(有时是当地语言变量)。
如果你安装的系统提供的语言特性支持不能满足你的需要,或者你要改变当前语言或安装别的键盘方案以适应你的语言,参阅〖9.7 本地化及国家语言支持〗。
2.7 Debian和系统内核
参阅〖7. Debian下的Linux内核〗。
2.7.1 编译非Debian源码包内核代码
首先你必须了解Debian policy有关头文件的规定。
Debian C libraries是依据内核头文件最新稳定发布版创建的。例如,Debian 1.2发布版使用版本号为5.4.13的头文件。它基于所有Linux FTP文件站点发布的Linux内核源码包,这些源码包使用了最新的头文件。跟随内核源码发布的内核头文件位于/usr/include/linux/include/。
如果你编译某个程序所用的内核头文件比lib6-dev提供的头文件还新,在编译时你必须在命令行中加上-I /usr/src/linux/include/。这些情况是存在的,例如,对于automounter daemon(amd)软件包而言,当新内核改变了对NFS的内部操作方式,amd需要知道这些改变。这时就需要引用新的内核头文件。
2.7.2 自定义内核创建工具
对于希望(或必须)使用自定义内核的用户,推荐下载kernel-package软件包。该软件包包含了创建内核包的脚本。有了它,新建Debian内核镜像包只需在内核源码目录的一级目录运行
# make-kpkg kernel_image
执行下述命令可获得有关帮助
# make-kpkg –help
或阅读make-kpkg(8)帮助页面以及〖7. Debian下的Linux内核〗
如果所需的kernel-source-version(version代表内核版本号)包不存在,用户就得从Linux文件站点分别下载最新的(或需要的)内核源码。Debian的initrd启动脚本需要一个专门的内核路径调用initrd;参阅http://bugs.debian.org/149236。
有关kernel-package包的用法详述见于/usr/doc/kernel-package/README。
2.7.3 多系统引导器
要使用多系统引导器如grub或loadlin,请将编译好的Linux内核bzimage拷贝到相应的地方(例如/boot/grub或MS-DOS分区)。
2.7.4 制做引导软盘
Debian的boot-floppies软件包可以帮你制作一张自定义启动软盘,该软件包通常位于Debian FTP包文件站点的admin分类。软件包中的Shell脚本按syslinux格式制作启动软盘。对于那些使用MS-DOS格式化的软盘,其主引导扇区的记录将被修改为直接引导Linux(或是其它在盘中syslinux.cfg文件里的操作系统)。该软件包中的其它脚本可制作急救盘甚至重建基本系统。
安装该软件包后,阅读/usr/doc/boot-floppies/README文件可获得更多信息。
2.7.5 模块加载规定
Debian的modconf软件包提供了一个shell脚本,它可以用来自定义内核模块配置。该脚本使用菜单界面,用户通过它给出系统中可挂载设备驱动的有关细节,它再将这些细节信息生成/etc/modules.conf文件(其中列出了别名aliases和其它参数,用于连接各种模块),该配置文件用来加载/etc/modutils/目录下和/etc/modules(其中列出了需要在系统启动时加载的模块)目录的相关模块。
新版的配置帮助文件可为构造自定义内核提供帮助,同样,modconf软件包中也有一系列帮助文件(位于/usr/lib/modules_help/目录下),告诉你如何对模块设定合适的参数。参阅〖7.2 模块化的2.4内核〗中的例子。
2.7.6 卸载旧内核
kernel-image-NNN.prerm脚本可用来检查当前运行的内核版本,以确定是否与你打算卸载的内核版本相同。因此你可以使用如下命令删除不想要的内核镜像包:
dpkg --purge --force-remove-essential kernel-image-NNN
(当然,要将NNN替换成你的内核版本号和修订版号。)