目录
当前位置: 首页 > 文档资料 > Debian 参考手册 >

第 2 章 - Debian 基础

优质
小牛编辑
134浏览
2023-12-01

本章讲述非开发人员需要掌握的 Debian 系统基础知识。有关知识的权威参考,请参阅:

  • Debian Policy Manual

  • Debian Developer's Reference

  • Debian New Maintainers' Guide

列表见 参考资料, 第 15.1 节

如果你想查阅简要的“how-to”解释文档,可直接跳到 Debian 软件包管理, 第 6 章 或其它相关章节。

本章的内容取自“Debian FAQ”,经过较大的改编,以适于普通 Debian 系统管理者上手。


2.1 Debian 文件


2.1.1 目录结构

Debian 软件包位于 Debian 镜像站点 的目录树中,可通过 FTP 或 HTTP 访问它们。

下列目录存在于任何 Debian 镜像站点的 debian 目录下:

dists/:

本目录包含“发行版”(distributions),此处是获得 Debian 发布版本(releases)和已发布版本(pre-releases)的软件包的正规途径。有些旧软件包及 Contens-*.gz 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 Sarge (3.1r0) 被登记到 stable 目录(符号链接指向 Sarge 目录):

  • stable/main/:本目录包含的软件包均属于最新 Debian 系统官方发布版。

    这些软件包均是“自由软件”--即遵循Debian 自由软件准则(缩写为 DFSG,安装 debian-doc 之后,可以在 /usr/share/doc/debian/social-contract.txt 找到该文档)。

  • stable/non-free/:本目录包含不能依照 DFSG 来自由使用的的软件包。

    例如,有些软件包的许可证禁止其用于商业发行的。其它的可以再发行,但属于共享软件。

  • stable/contrib/:本目录包含的软件包均遵循 DFSG 自由使用原则,但它们倚赖于不遵循 DFSG 自由使用原则的软件包。

现在,作为以上位置的新增功能,实际上新的软件包都存储在 pool 目录中(pool目录, 第 2.1.10 节)。

现阶段 stable 发行版错误报告位于 Stable Problems 页面。


2.1.4 testing 发行版

testing 发行版软件包入口,处于 unstable 版本的 Debian Etch 通过级别测试后登记到 testing 目录(符号链接指向 Etch 目录)。现在,除了上述目录,新上载的软件包的物理存储位置为 pool 目录(pool目录, 第 2.1.10 节)。在 testing 下同样有 maincontribnon-free 子目录,它们的作用与 stable 中的一样。

这些软件包必须在构建时在所有架构中保持同步,而且保证是可以安装的;相比 unstable 中的对应版本,它们应该有更少的影响发行的(RC)错误。我们希望按照这种方式 testing 能始终保持为一个发布的候选版本。有关 testing 版本的更多信息见于 http://www.debian.org/devel/testing

testing 发行版的最新消息发布在下列站点:


2.1.5 unstable 发行版

unstable 发行版软件包入口,sid 被登记到 unstable 目录(符号链接指向 sid),上载的软件包在被移至 testing 目录前一直呆在这儿。新上载的软件包的物理存储位置为 pool 目录(pool目录, 第 2.1.10 节)。在 testing 下同样有 maincontribnon-free 子目录,它们的作用与 stable 中的一样。

unstable 发行版反映了系统的最新开发进展。欢迎广大用户使用并测试这些软件包,同时也提醒你们这些软件包还不完善。使用 unstable 发行版的好处就是你可以获得 Debian 项目的最新更新 — 不过新东西也会出新问题,你得好坏兼收:-)

unstable 发行版的最新错误报告见于 Unstable Problems 页面。


2.1.6 frozen 发行版

testing 发行版足够成熟了,它成为 frozen 发行版,表示这个版本不再加入新代码,只进行除错工作。同时,dists 目录中会建立新的 testing 发行版目录树,并命名新的版本代号。frozen 发行版再经过几个月的测试、更新、再冻结也称之为“循环测试”。(新近的 woody 发布进程没有创建 frozen 符号链接,所以 frozen 并不算发行版,仅仅是 testing 发行版的一个开发阶段。)

我们将 frozen 发行版中可能延迟软件包或整个版本发布的错误都记录在案,一但错误总数低于可接受的最大值,frozen 发行版就晋升成 stable,新版本发布了,先前发布的版本成为过期版(obsolete)(并被移于相应的目录)。


2.1.7 Debian 发布版代号

存在于dists目录下的物理目录名,例如SargeEtch,就是“版本代号(codenames)”。当某个Debian发行版处于开发阶段,它并没有版本号,取而代之的是版本代号。使用版本代号的目的在于简化建立Debian发行版镜像的工作(如果真实目录例如unstable突然改名为stable,许多文件都没必要再次下载)。

当前,stable 是一个指向 Sarge 的符号链接,testing 是指向 Etch 的符号链接。也就是说 Sarge 是当前的 stable 发行版,Etch 是当前的 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, woody for release 3.0,和 sarge for release 3.1。


2.1.9 发布版代号来源

到目前为止它们均出自 Pixar 的电影“Toy Story(Toy Story)”

  • Buzz(Buzz Lightyear)是个宇航员,

  • Rex 是只暴龙,

  • Bo(Bo Peep)是个放羊的女孩,

  • Hamm 是个小猪攒钱罐,

  • Slink(Slinky Dog)是只玩具狗,

  • Potato 当然就是 Potato Head 先生,

  • Woody 是个牛仔,

  • Sarge 是位绿色塑料玩具士兵首领,

  • Etch(Etch-a-Sketch)是玩具黑板,

  • Sid 是隔壁的男孩,那个玩具终结者。


2.1.10 pool目录

过去,软件包均放在 dists 目录下相应发行版的子目录中。这种做法产生了许多问题,当镜像站点进行新版本发布时大量带宽被消耗。

现在软件包均放进一个巨大的“池子(pool)”,按照源码包名称分类存放。为了方便管理,pool 目录下按属性再分类(maincontribnon-free),分类下面再按源码包名称的首字母归档。这些目录包含的文件有:运行于各种系统架构的二进制软件包,生成这些二进制软件包的源码包。

你可以执行命令 apt-cache showsrc mypackagename,查看“Directory:”行获知每个软件包的存放位置。例如:apache 软件包存放在 pool/main/a/apache/ 软件包存放在 lib* 软件包数量巨大,它们以特殊的方式归档:例如,libpaper 软件包存放在 pool/main/libp/libpaper/

诸如 apt 等命令访问的索引文件仍位于 dists 目录中,直到本文写作之时,旧发行版的软件包还没转到 pool 目录,所以你将看到路径的“Directory”域中包含有发行版名称如 potatowoody

通常,你大可不必注意这些,新版的 apt 和旧版 dpkg-ftp 会自动处理它们。想了解更多信息,参阅 RFC: 软件包仓库的实现


2.1.11 sid 诞生记

过去 sid 并不存在, Debian 文件组织只有一个主要的工作流程:假设当前 unstable 发行版中创建了某个软件开发项目,当它成为新的 stable 版之时,便是它的发布之日。由于软件包一但发布就需要移动到新的 stable 目录,当众多软件开发项目移动目录时大量带宽会被吞噬掉,这个流程就显得很不切实际,因而许多软件开发项目并没有按这个方法行事。

经过几年的研究摸索,文档管理员提出一个方案,将未获准发布的二进制文档存入名为 sid 的特定目录。由于这些软件尚未发布,从那时起,它们就被加入到 unstable 目录树。当它们首次发布时,将会建立一个从当前 stable 指向 sid 的链接。这个方案用户听起来的确有些晕头。

有了软件包储藏池的帮助(参阅pool目录, 第 2.1.10 节),在 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 目录下。

旧的 testingunstable 软件包存放在 http://snapshot.debian.net/


2.1.14 发布源目录结构

在每个主目录树下(dists/stable/maindists/stable/contribdists/stable/non-freedists/unstable/main/,等)按芯片架构又分了子目录,每个子目录中存放着在该芯片架构下编译的二进制软件包。

  • binary-all/,存放与芯片架构无关的软件包,如 Perl 脚本、纯文档等。

  • binary-platform/,存放运行于该平台的二进制软件包。

请注意,testingunstable 发行版的二进制软件包不再存放在这些目录中,它们存放在上一级 pool 目录中。目录中仍保留有索引文件(PackagesPackages.gz)是为了向下兼容。

要获得有关二进制架构技术支持,参阅各发行版的发布手记(Release Notes),可以访问发布手记站点 stabletesting.


2.1.15 源代码

Debian 系统中的一切程序都有源代码,不仅如此,许可证条款规定系统中所有的程序必须和其源代码一起发行,或提供源代码出售。

通常源代码发布在 source 目录,该目录同时处于所有架构目录中,更新的源码则在 pool 目录中(参阅pool目录, 第 2.1.10 节)。对于不太熟悉 Debian 归档目录结构的用户想获得源代码可以试试 apt-get source mypackagename 命令。

有些软件包,如著名的pine,由于许可证限制,只提供源码包。(最近,pine-tracker 软件包提供了一个简易的安装版)安装源码包的方法可参阅stable 系统引入软件包, 第 6.4.10 节打包, 第 13.10 节教你如何手工创建一个软件包。

contribnon-free 目录中的软件包可能不提供源代码,因为它们没有正式加入 Debian 系统。


2.2 Debian 软件包管理系统


2.2.1 Debian 软件包概述

软件包通常包含了实现一系列相关命令或特性所必须的所有的文件。有两种类型的 Debian 软件包:

  • Binary packages(二进制软件包),它包含可执行文件、配置文件、man/info 页面、版权声明和其它文档。这些软件包以 Debian 特定的格式发布(参阅Debian 软件包格式, 第 2.2.2 节);它们通常使用 .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 结尾。 [1]

Debian 二进制软件包内部格式描述见 deb(5)帮助页面。由于这种内部格式会改变的(特别对于 Debian 的新旧发布版),所以要操作 .deb 文件请参阅 dpkg-deb(1)

即便在 Sarge 发行版中,当 dpkg 命令不可用时,所有的 Debian 软件包文件依然可以用标准的 Unix 命令 artar 来操作。


2.2.3 Debian 软件包命名约定

Debian 软件包命名遵循下列约定:

     foo_ver-rev_arch.deb

一般这里的 foo 是软件包的名称,ver 是软件本身的版本号,rev 是 Debian 修订版本号,arch 是目标架构名称。当然,文件很容易被改名;不过,你也可以通过运行下面的命令来找出文件 filename 实际是那个软件包:

     dpkg --info filename

Debian 修订版本号由 Debian 开发者或创建这个软件包的人指定。通常,包被修改过之后,会把修改版本号加一。


2.2.4 保存本地配置

有可能被本机管理员修改的文件保存在 /etc/ 目录中。 Debian 策略中规定所有对本地配置文件的修改都可以在软件包升级过程中被保留下来。

在软件包的发布中,如果包含默认的本地配置文件,这个文件就被称为“conffile”(默认配置)。如果不得到管理员的允许,软件包管理系统不会对上次安装之后被修改过的默认配置进行升级;不过,如果管理员没有改动过默认配置,那么它就会被升级成最新软件包中的版本。这种策略几乎总是合理的,它有益于把默认配置的改动减到最小。

下面的命令可以列出一个软件包中包含那些默认配置文件:

     dpkg --status package

文件列表位于“Conffiles”的后面。

在《 Debian 策略手册》的“配置文件”一节,可以获得有关 conffile (默认配置)文件的更多信息(参见参考资料, 第 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来确定,可能会因 Debian 版本而异)


2.2.6 软件包优先级

每个 Debian 软件包均被发布者指定了一个优先级,作为软件包管理系统 的一个辅助参数,优先级的值有:

  • Required(必须) 该级别软件包是保证系统正常运行必须的。

    包含所有必要的系统修补工具。不要删除这些软件包,否则整个系统将受到损坏,甚至无法使用dpkg恢复。只安装 Required 级软件包的系统不可能满足所有的用途,但它可以启动起来,让系统管理员安装想要的软件。

  • Important(重要) 在任何类 Unix 系统上均安装有该级别软件包。

    系统若缺少这类软件,会运行困难或不能使用。该级别软件包并包括 Emacs 或 X11 或 TeX 或其它大型应用程序。它们只是一些实现系统底层功能的程序。

  • Standard(基本) 该级别软件包是任何 Linux 系统的标准件,它们组成一个小而精的字符模式的系统。

    系统的默认安装就包括了它们。“Standard”级软件包不包括许多大型应用程序,但它包括Emacs(它比其它应用程序更底层)和 Tex 及 LaTeX 的精巧版(不支持 X)。

  • Optional(推荐) 该级别软件包包括那些你可能想安装的软件,即使对它们并不熟悉,但对它们没有特殊的要求。

    它们包括 X11,TeX 完整发布版和许多应用程序。

  • Extra(额外) 该级别软件包可能与其它高级别软件包冲突,仅当你知道其用途时才会使用它们,或者有运行它们有专门要求,这些都使它们不适合定为“Optional”级。

请注意软件包描述中“Priority: required”(优先级:必须)、“Section: base”(组件:基本)、“Essential: yes”(必要:是)的区别。“Section: base”(组件:基本)意味着在安装新系统时这个软件包要先于其它所有软件安装。大多数在“Section: base”中的软件包都被打上了“Priority: required”(优先级:必须)标签,或者至少是“Priority: important”(优先级:重要);并且其中的很多也同时具有“Essential: yes”(必要:是)标签。“Essential: yes”意味着要用软件包管理系统的 dpkg 等程序删除它时,必须给出额外的强制选项才行。比如,libc6mawkmakedev 软件包属于“Priority: required”和“Section: base”,但不是“Essential: yes”。


2.2.7 虚拟软件包

虚拟软件包是一个统称,它代指一组具有相近功能的软件包中的任何一个。例如,tintrn 都是新闻组阅读软件,当系统中某个程序需要使用新闻阅读器时,它们中的任何一个都可以满足要求。因此,这两个软件包一起提供了一个叫做 news-reader(新闻阅读器)的“虚拟软件包”。

类似的,许多 eximexim4sendmailpostfix 这样的软件包都提供邮件传输代理的功能。因此,它们在一起提供了一个称为 mail-transport-agent(邮件传输代理)的虚拟包。安装了它们中的任何一个,都会满足其它倚赖于邮件传输代理功能的程序的需要。

Debian 有个机制,如果系统中提供同种虚拟包的软件包安装了多个,系统管理员可以指定一个为首选软件。相关的命令是 update-alternatives,更详细的描述参阅Alternative 命令, 第 6.5.3 节


2.2.8 软件包依赖关系

Debian 软件包管理系统依赖声明,它描述了这一事实:一些软件包需要其它软件包被安装才能正常运行或运行得更好。

  • 软件包 A 依赖(depends)软件包 B:要运行A必须安装 B。在有些情况下,A 不仅依赖 B,还要求 B 的特定版本。版本依赖通常有最低版本限制,A 更依赖于B的最新版而非某个特定版本。

  • 软件包 A 推荐(recommends)软件包 B:软件包维护者认为所有用户都不会喜欢缺少某些功能的 A,而这些功能需要 B 来提供。

  • 软件包 A 建议(suggests)软件包 B:B 中某些文件与 A 的功能相关,并能够增强 A 的功能。这种关系通过声明软件包 B 增强 Enhances 软件包 A 来表示。

  • 软件包 A 与软件包 B 冲突(conflicts):如果系统中安装了 B 那么 A 无法运行。“Conflicts”常和“replaces”同时出现。

  • 软件包 A 替换(replaces)软件包 B:B 安装的文件被 A 中的文件移除和覆盖了。

  • 软件包 A 提供(provides)软件包 B:A 中包含了 B 中的所有文件和功能。

上述术语使用方法的更详细的信息参阅 Packaging Manualthe Policy Manual

注意,dselect 可以对 recommendssuggests 类软件包进行更细粒度的操作,apt-get 只会简单的下载安装 depends 类软件包而不管 recommendssuggests 类软件包。这两个程序均正式使用 APT 作为其后端。


2.2.9 何为“Pre-depends”

dpkg 总是在配置一个有依赖关系的包之前,先对被依赖的包进行配置。 然而,dpkg 通常将归档文件随意解包,不顾依赖性。 (从归档文件中解包并提取文件,将他们放置到正确的位置。) 如果是 Pre-Depends 包,则在所依赖的其它包被解包和配置之前, Pre-Depends 包不会被解包。 [2] 使用这种依赖的目的是为了将依赖复杂性降至最低。


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”)。更改在你退出 [S]elect 屏幕后立即生效。

Woody 中的 APT 系统有一个新机制来阻止软件包升级,在下载升级档进程中使用 Pin-Priority。参阅帮助页面 apt_preferences(5),或阅读 http://www.debian.org/doc/manuals/apt-howto/apt-howto软件包。


2.2.12 源码包

源码包发布在 source 目录中,既可以手工下载可以使用

     apt-get source foo

获取它们(参阅apt-get(8)帮助页面)。


2.2.13 编译源码包

对于 foo 软件包,从源码编译需要 foo_*.dscfoo_*.tar.gzfoo_*.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"

安装新编译的软件包。参阅 stable 系统引入软件包, 第 6.4.10 节


2.2.14 新建 Debian 软件包

创建新软件包的详细信息,参阅 New Maintainers' Guide, 该文档在 maint-guide 包中,或浏览 http://www.debian.org/doc/manuals/maint-guide/


2.3 Debian 系统升级

Debian 的设计目标之一就是提供一个平滑、安全和可靠的升级过程。软件包系统在升级过程中会将重要改变警告系统管理员,在某些情况下,会要系统管理员来做决定。

你也应该阅读发布手记(Release Notes),它存在于所有的 Debian 光盘中,也可以通过互联网访问 http://www.debian.org/releases/stable/releasenoteshttp://www.debian.org/releases/testing/releasenotes

Debian 软件包管理, 第 6 章提供了升级的实用指南,本节只提供一个大纲,由包工具开始。


2.3.1 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-ftpdpkg-mountable 已被新的 APT 系统取代。


2.3.2 APT

APT(the Advanced Packaging Tool)是 Debian 软件包管理系统的高级界面,由几个名字以“apt-”打头的程序组成。apt-getapt-cacheapt-cdrom 是处理软件包的命令行工具,它们也是其它用户前台程序的后端, 如dselectaptitude

更多信息,可安装 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,如果安装了 apt-howto 包,可在 /usr/share/doc/Debian/apt-howto/ 中找到它。

apt-get upgradeapt-get dist-upgrade 只获取“Depends”类软件包,它忽略“Recommend”和“Suggests”类软件包,不想这样的话,可使用 dselect


2.3.3 dselect

这个程序是 Debian 软件包管理系统中菜单驱动的用户界面。特别适用于首次安装和大面积升级。参阅 dselect, 第 6.2.4 节

更多信息,可安装 install-doc 包后阅读 /usr/share/doc/install-doc/dselect-beginner.en.htmldselect Documentation for Beginners


2.3.4 不停机系统升级

Debian 系统的内核(文件系统)支持替换使用中的文件。 当一个软件包升级时,如果由该软件包提供的服务在当前运行级下正在运行,则该服务将被重新启动。 Debian 系统不要求用户在 single-user 模式下进行不停机升级。


2.3.5 下载和缓存 .deb 文件

如果你手工下载包文件到硬盘(这完全没有必要,请阅读上面有关 dpkg-ftp 或 APT 的内容),当你完成软件包安装工作后,可以从系统中删除 .deb 文件。

如果是使用 APT,这些文件会缓存在 /var/cache/apt/archives/ 目录中。你可以在完成安装后删除它们(apt-get clean)或者将它们拷贝到另一个机器的 /var/cache/apt/archives/ 目录中以备以后的安装。


2.3.6 升级记录

dpkg 会对软件包的解包、配置、删除、完全删除进行记录,但不能(目前是这样)记录在包操作的过程中活跃终端的行为。

最简单的解决方法是在运行 dpkgdselectapt-get 等工具的会话中加入 script(1) 程序。


2.4 Debian 系统引导进程


2.4.1 init 程序

同所有的 Unix 一样, Debian 通过执行 init 程序,来完成启动过程。init 的配置文件(/etc/inittab)中指定的第一个执行脚本应该是 /etc/init.d/rcS

接下来将要发生要看是否安装了 sysv-rc 软件包或 file-rc 软件包。下面假设安装了 sysv-rc 软件包。 (file-rc 含有它自己的 /etc/init.d/rcS 脚本,在 rc 目录里使用文件代替符号链接来控制哪个服务在哪个运行级别启动。)

sysv-rc 软件包里面的 /etc/init.d/rcS 运行 /etc/rcS.d/ 目录下的所有脚本来执行初始化,如: 检查并挂载文件系统、装载内核模块、启动网络服务、设定时钟等。 接着,为了兼容性考虑,它运行 /etc/rc.boot/ 目录下的文件(除了那些文件名中包含“.”的文件),该目录中的脚本是保留给系统管理员使用,不赞成使用该目录。 更多信息参见 系统初始化, 第 9.1 节 和 Debian Policy Manual 中的 System run levels and init.d scripts

Debian 没有使用 BSD 风格的 rc.local 文件。


2.4.2 运行级别

完成系统启动进程后,init 启动所有在默认运行级别配置为启动的服务。 默认运行级别由 /etc/inittab 中的 id 给出。 Debian 使用 id=2

Debian 使用下列的运行级别:

  • 1(单用户模式 single-user mode),

  • 2 到 5(多用户模式 multi-user modes),

  • 0(关闭系统),

  • 6(重启系统)。

运行级 7、8 和 9 也能够使用,但是它们的 rc 目录在软件包安装的时候没有。

使用 telinit 命令来转换运行级别。

当进入一个运行级别时,所有在 /etc/rcrunlevel.d/ 目录下的脚本将被执行。 脚本名的第一个字母决定了该脚本的运行方式: 使用 K 开头的脚本,使用 stop 参数来运行。 使用 S 开头的脚本,使用 start 参数来运行。 这些脚本按照它们名字的字母顺序运行;因此,“stop”脚本比“start”脚本先运行。 在 KS 之后的两个数字决定了脚本运行的先后次序,数字小的脚本先运行。

实际上,目录 /etc/rcrunlevel.d/ 中的脚本都是指向 /etc/init.d/ 的符号链接。这些脚本接受 “restart”和“force-reload”作为参数:“force-reload”的方式可以用来在系统启动后,重新启动服务或者强迫它们重新装载它们的配置文件。

例如:

     # /etc/init.d/exim4 reload

2.4.3 自定义运行级别

自定义运行级别是一个高级的系统管理任务。 下面的提示适用于大部分服务。

在运行级 R 启动 service 服务,创建一个符号链接 /etc/rcR.d/Sxyservice 到目标文件 ../init.d/servicexy 是序列号,是由软件包在安装的时候分配给服务的。

停止服务,重命名符号链接,将它的名字用 K 开头来代替 S, 它的序列号是100减 xy。 可以使用象 sysv-rc-confksysv 这样的运行级别编辑器来方便的修改服务。

在一个特定的运行级别目录,可以将某个服务的 S 符号链接删除来代替重新命名它。 这种作法不停止该服务,但将把该服务留在一种 sysv-rc 初始化系统认为的“漂浮”状态: 当运行级别改变时,该服务即不会启动,也不会停止, 它将保留它原有的状态,不管它是在运行或者没有运行。 注意,处于这种漂浮状态的服务,如果它所属的软件包升级了, 这个服务将启动,不管它在升级前是否运行。 这是当前 Debian 系统一个已知的缺点。 注意:还需要在运行级 0 和 6 之间保留服务的 K 符号链接。 如果删除了一个服务的所有符号链接,在升级该服务的软件包时, 所有的符号链接将恢复到它们的出厂默认模式。

建议对 /etc/rcS.d/ 目录里的符号链接做任何改变。


2.5 多样性支持

Debian 提供几种途径,在不破坏系统的前提下满足系统管理员各种要求。

/usr/local/ 目录下的所有文件均属于系统管理员,Debian 不会改动它们。/etc 下的大部分文件属于 conffiles,Debian 不会在升级后覆盖它们,除非系统管理员明确要求覆盖。


2.6 国际化

Debian 系统是国际化产品,不论是在控制台下还是在 X 下,它都提供多种语言的字符显示和输入支持。许多文档、帮助页面以及系统消息都被翻译成各种语言。在安装过程中, Debian 提示用户选择安装语言(有时是当地语言变量)。

如果你安装的系统提供的语言特性支持不能满足你的需要,或者你要改变当前语言或安装别的键盘方案以适应你的语言,参阅本地化(localization), 第 9.7 节


2.7 Debian 和系统内核

参见 Debian 下的 Linux 内核, 第 7 章


2.7.1 编译非 Debian 源码包内核代码

首先你必须了解 Debian policy 有关头文件的规定。

Debian C libraries 是依据内核头文件最新 stable 发布版创建的。

例如, Debian 1.2 发布版使用版本号为 5.4.13 的头文件。它基于所有 Linux FTP 文件站点发布的 Linux 内核源码包,这些源码包使用了最新的头文件。跟随内核源码发布的内核头文件位于 /usr/include/linux/include/

如果你编译某个程序所用的内核头文件比 libc6-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(1)帮助页面以及Debian 下的 Linux 内核, 第 7 章

如果所需的 kernel-source-version(version 代表内核版本号)包不存在,用户就得从 Linux 文件站点分别下载最新的(或需要的)内核源码。 Debian 的initrd 启动脚本需要一个专门的内核路径调用 initrd;参阅 http://bugs.debian.org/149236

有关kernel-package 包的用法详述见于 /usr/doc/kernel-package/README


2.7.3 模块加载规定

Debian 的 modconf 软件包提供了一个 shell 脚本(/usr/sbin/modconf),它可以用来自定义内核模块配置。该脚本使用菜单界面,用户通过它给出系统中可挂载设备驱动的有关细节,它再将这些细节信息生成 /etc/modules.conf 文件(其中列出了别名 aliases 和其它参数,用于连接各种模块),该配置文件用来加载 /etc/modutils/ 目录下和 /etc/modules(其中列出了需要在系统启动时加载的模块)目录的相关模块。

新版的配置帮助文件 Configure.help 可为构造自定义内核提供帮助,同样,modconf 软件包中也有一系列帮助文件(位于 /usr/share/modconf/ 目录下),告诉你如何对模块设定合适的参数。参阅模块化的 2.4 内核, 第 7.2 节中的例子。


2.7.4 卸载旧内核

kernel-image-NNN.prerm 脚本可用来检查当前运行的内核版本,以确定是否与你打算卸载的内核版本相同。因此你可以使用如下命令删除不想要的内核镜像包:

     # dpkg --purge --force-remove-essential kernel-image-NNN

(当然,要将 NNN 替换成你的内核版本号和修订版号。)