当前,所有的管理文件都存放在/var/lib/dpkg/info目录。与foo软件包相关的文件,名 字以“foo”打头,以“ prensa"、“ postinst”等为扩展名。目录中的foo.list文件列出 了foo软件包安装的所有文件。(注意这些文件的位置在由dpkg来确定,可能会因 Debina 版本而异) 226软件包优先级 每个 Ubuntu软件包均被发布者指点了一个优先级,作为软件包管理系统的一个辅助参数, 优先级的值有 Required(必须)该级别软件包是保证系统正常运行必须的。 包含所有必要的系统修补工具。不要删除这些软件包,否则整个系统将受到损坏,甚至无法 使用dpkg恢复。只安装 Required级软件包的系统不可能满足所有的用途,但它可以启动起 来,让系统管理员安装想要的软件。 Important(重要)在任何类Unix系统上均安装有该级别软件包。 系统若缺少这类软件,会运行困难或不好操作。该级别软件包并不包括 Emacs或Ⅺ1l或TeX 或其它大型应用程序,它们只是一些实现系统底层功能的程序 Standard(基本)该级别软件包是任何 Linux系统的标准件,它们组成一个小而精 的字符模式的系统 Emacs(它比其它应用程序更底层)和Tex及Laex的精巧版(不支持序,但它包括 系统的默认安装就包括了它们。“ Standard”级软件包不包括许多大型应用程J 0 tional(推荐)该级别软件包包括那些你可能想安装的软件,即使对它们并不熟 悉,但对它们没有特殊的要求 它们包括X11,TeX完整发布版和许多应用程序。 Extra(额外)该级别软件包可能与其它高级别软件包冲突,仅当你知道其用途时 才会使用它们,或者有运行它们有专门要求,这些都使它们不适合定为“0 ption 级 请注意软件包描述中“ Priority: required(优先级:必须)、“ Section:base"(组件 基本)、“ Essential:yes”(必要:是)的区别。“ Section:base"(组件:基本)意味着在 安装新系统时这个软件包要先于其它所有软件安装。大多数在“ Section:base”中的软件 包都被打上了“ Priority: required(优先级:必须)标签,或者至少是“ Priority: lmportant(优先级:重要);并且其中的很多也同时具有“ Essential:yes”(必要:是) 标签。“ Essential:yes”意味着要用软件包管理系统的dpkg等程序删除它时,必须给出额 外的强制选项才行。比如,1ibc6、mawk和 makedev软件包属于“ Priority: required 和“ Section:base",但不是“ Essential:yes"。 227虚拟软件包 虚拟软件包是一个统称,它代指一组具有相近功能的软件包中的任何一个。例如,tin和trn 都是新闻组阅读软件,当系统中某个程序需要使用新闻阅读器时,它们中的任何一个都可 以满足要求。因此,这两个软件包一起提供了一个叫做news- reader(新闻阅读器)的“虚 拟软件包
11 当前,所有的管理文件都存放在/var/lib/dpkg/info 目录。与 foo 软件包相关的文件,名 字以“foo”打头,以 “preinst”、“postinst”等为扩展名。目录中的 foo.list 文件列出 了 foo 软件包安装的所有文件。(注意这些文件的位置在由 dpkg 来确定,可能会因 Debina 版本而异) 2.2.6 软件包优先级 每个 Ubuntu 软件包均被发布者指点了一个优先级,作为软件包管理系统 的一个辅助参数, 优先级的值有: · 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 等程序删除它时,必须给出额 外的强制选项才行。比如,libc6、mawk 和 makedev 软件包属于 “Priority: required” 和“Section: base”,但不是“Essential: yes”。 2.2.7 虚拟软件包 虚拟软件包是一个统称,它代指一组具有相近功能的软件包中的任何一个。例如,tin 和 trn 都是新闻组阅读软件,当系统中某个程序需要使用新闻阅读 器时,它们中的任何一个都可 以满足要求。因此,这两个软件包一起提供了一个叫做 news-reader(新闻阅读器)的“虚 拟软件包
类似的,许多exim、exim4、 sendmail、 postfix这样的软件包都提供邮件传输代理的功能 因此,它们在一起提供了一个称为mail- transport- agent(邮件传输代理)的虚拟包 装了它们中的任何一个,都会满足其它倚赖于邮件传输代理功能的程序的需要。 Ubuntu有个机制,如果系统中提供同种虚拟包的软件包安装了多个,系统管理员可以指定 个为首选软件。相关的命令是 update- alternatives,更详细的描述参阅 Alternative命 令,第6.5.3节。 228软件包依赖关系 Ubuntu软件包管理系统依赖声明,它描述了这一事实:一些软件包需要其它软件包被安装 才能正常运行或运行得更好。 ·软件包A依赖( depends)软件包B:要运行A必须安装B。在有些情况下,A不仅 依赖B,还要求B的特定版本。版本依赖通常有最低版本限制,A更依赖于B的最新 版而非某个特定版本。 软件包A推荐( recommends)软件包B:软件包维护者认为所有用户都不会喜欢缺 少某些功能的A,而这些功能需要B来提供 软件包A建议( suggests)软件包B:B中某些文件与A的功能相关,并能够增强A 的功能。这种关系通过声明软件包B增强 Enhance软件包A来表示。 ·软件包A与软件包B冲突( conflicts):如果系统中安装了B那么A无法运行。 “ Conflicts”常和“ replaces”同时出现。 软件包A替换( replaces)软件包B:B安装的文件被A中的文件移除和复盖了。 软件包A提供( provides)软件包B:A中包含了B中的所有文件和功能。 上述术语使用方法的更详细的信息参阅 Packaging Manual和 the Policy Manual。 注意, dselect可以对 recommends和 suggests类软件包进行细操作,apt-get只会简单的 下载安装 depends类软件包而不管 recommends和 suggests类软件包。这两个程序均正式 使用APT作为其後台 2.2.9何为“ Pre-depends dpkg总是在配置一个有依赖关系的包之前,先对被依赖的包进行配置。然而,dpkg通常 将归档文件随意解包,不顾依赖性。(从归档文件中解包并提取文件,将他们放置到正确 的位置。)如果是Pre- Depends包,则在所依赖的其它包被解包和配置之前,Pre- Depends 包不会被解包。使用这种依赖的目的是为了将依赖复杂性降至最底。 2.2.10软件包状态 软件包有各种状态:“ unknown',“ install”,“ remove",“ purge”和“hold'。这些“希望” 标记描述了用户打算如何操作这些软件包(既可以使用 dselect的“ Select”菜单,也可以 直接调用dpkg)。 它们的意思是: · unknowm-用户并没描述他想对软件包进行什么操作。 instal1-用户希望对软件包进行安装或升级。 remove-用户希望删除软件包,但不想删除任何配置文件。 purge-用户希望完全删除软件包,包括配置文件 hold-用户希望软件包保持现状,例如,用户希望保持当前的版本,当前的状态
12 类似的,许多 exim、exim4、sendmail、postfix 这样的软件包都提供邮件传输代理的功能。 因此,它们在一起提供了一 个称为 mail-transport-agent(邮件传输代理)的虚拟包。安 装了它们中的任何一个,都会满足其它倚赖于邮件传输代理功能的程序的需要。 Ubuntu 有个机制,如果系统中提供同种虚拟包的软件包安装了多个,系统管理员可以指定 一个为首选软件。相关的命令是 update-alternatives,更详细的描述参阅 Alternative 命 令, 第 6.5.3 节。 2.2.8 软件包依赖关系 Ubuntu 软件包管理系统依赖声明,它描述了这一事实:一些软件包需要其它软件包被安装 才能正常运行或运行得更好。 · 软件包 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 Manual 和 the Policy Manual。 注意,dselect 可以对 recommends 和 suggests 类软件包进行细操作,apt-get 只会简单的 下载安装 depends 类软件包而不管 recommends 和 suggests 类软件包。这两个程序均正式 使用 APT 作为其後台。 2.2.9 何为“ “ Pre-depends” ” dpkg 总是在配置一个有依赖关系的包之前,先对被依赖的包进行配置。 然而,dpkg 通常 将归档文件随意解包,不顾依赖性。 (从归档文件中解包并提取文件,将他们放置到正确 的 位 置 。) 如果是 Pre-Depends 包,则在所依赖的其它包被解包和配置之前,Pre-Depends 包不会被解包。 使用这种依赖的目的是为了将依赖复杂性降至最底。 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 insta 改为 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_*.dsc、foo*.tar.gz和foo*.diff.gz文件(注意 对于由 Debian开发的软件包,没有.dif.gz文件)
13 当前的一切。 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 系统有一个新机制来阻止软件包升级,在下载升级档进程中使用 PinPriority。参阅帮助页面 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_*.dsc、foo_*.tar.gz 和 foo_*.diff.gz 文件(注意 , 对于由 Debian 开发的软件包,没有.diff.gz 文件)
当你得全了这些文件,如果你这安装了dpkg-dev软件包,运行: s dpkg-source -x foo version-revision dsc 它将软件包解压到一个名为foo- version的目录。 使用下列命令创建二进制软件包 s cd foo-version s su -c apt-get update apt-get install fakeroot s dpkg-buildpackage -rfakeroot -us -uc 然後 su -c"dpkg -i./foo version-revision arch deb 安装新编译的软件包。参阅["./ch- package.zh-cn.html:向系统引入软件包,第6.4.10 节] 2.2.14新建 Ubuntu软件包 创建新软件包的详细信息,参阅 New Maintainers’ Guide,该文档在 maint- guide包中 或浏览http://www.debianorg/doc/manuals/maint-guide/ 2.3 Ubuntu系统升级 Ubuntu的设计目标之一就是提供一个平滑、安全和可靠的升级过程。软件包系统在升级过 程中会将重要改变警告系统管理员,在某些情况下,会要系统管理员来做决定 你也应该阅读发布手记( Release notes),它存在于所有的 Ubuntu光盘中,也可以通过互 联网访问http://www.Ubuntucom/releases Ubuntu软件包管理,第6章提供了升级的实用指南,本节只提供一个大纲,由包工具开始。 2. 3. 1 dpkg 它是操作软件包文件的主要工具;参阅dpkg(8)获得完整信息。 dpkg由几个原始的辅助程序演化而来 dpkg-deb:操作.deb文件。dpkg-deb(1) pkg-ftp:一个旧的软件包获取命令。dpkg-ftp(1) dpkg- mountable:一个旧的软件包获取命令。dpkg- mountable(1) dpkg- split:将大软件包分割成小包。dpkg- split(1) dpkg-ftp和dpkg- mountable已被新的APT系统取代
14 当你得全了这些文件,如果你这安装了 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" 安装新编译的软件包。参阅["../ch-package.zh-cn.html: 向系统引入软件包, 第 6.4.10 节]。 2.2.14 新建 Ubuntu 软件包 创建新软件包的详细信息,参阅 New Maintainers' Guide, 该文档在 maint-guide 包 中 , 或浏览 http://www.debian.org/doc/manuals/maint-guide/。 2.3 Ubuntu 系统升级 Ubuntu 的设计目标之一就是提供一个平滑、安全和可靠的升级过程。软件包系统在升级过 程中会将重要改变警告系统管理员,在某些情况下,会要系统管理员来做决定。 你也应该阅读发布手记(Release Notes),它存在于所有的 Ubuntu 光盘中,也可以通过互 联网访问 http://www.Ubuntu.com/releases。 Ubuntu 软件包管理, 第 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-ftp 和 dpkg-mountable 已被新的 APT 系统取代
2.3.2APT APT( the Advanced Packaging Too1)是 Ubuntu软件包管理系统的高级界面,由几个名字 以“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,如果安装了apt- howto包,可在/usr/ share/doc/ Debian/apt- howto/中找到它 apt- get upgrade和apt- get dist- upgrade只获取“ Depends"类软件包,它忽略“ Recommend 和“ Suggests”类软件包,不想这样的话,可使用 dselect。 2.3.3 dselect 这个程序是 Ubuntu软件包管理系统中菜单驱动的用户界面。特别适用于首次安装和大面积 升级。参阅 dselect,第6.2.4节。 更多信息,可安装 insta1l-doc包後阅读/usr/ share/doc/ install-doc/ dselect- beginner en. html EX dselect Documentation for Beginners 234不停机系统升级 Ubuntu系统的内核(文件系统)支持替换使用中的文件。当一个软件包升级时,如果由该 软件包提供的服务在当前运行级下正在运行,则该服务将被重新启动。 Ubuntu系统不要求 用户在 single-user模式下进行不停机升级。 23.5下载和缓存deb文件 如果你手工下载包文件到硬盘(这完全没有必要,请阅读上面有关dpkg-ftp或APT的内容) 当你完成软件包安装工作後,可以从系统中删除.deb文件。 如果是使用APT,这些文件会缓存在/var/ cache/apt/ archives/目录中。你可以在完成安装 後删除它们(apt- get clean)或者将它们拷贝到另一个机器的/var/ cache/apt/ archives/ 目录中以备以後的安装 2.3.6升级记录 dpkg会对软件包的解包、配置、删除、完全删除进行记录,但不能(目前是这样)记录在 包操作的过程中活跃终端的行为。 最简单的解决方法是在运行dpkg、 dselect、apt-get等工具的会话中加λ script(1)程序。 24 Ubuntu系统引导进程 24.1init程序 同所有的Unix一样, Ubuntu启动要执行init程序。init的配置文件(etc/ inittab)
15 2.3.2 APT APT(the Advanced Packaging Tool)是 Ubuntu 软件包管理系统的高级界面,由几个名字 以“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,如果安装了 apt-howto 包,可在/usr/share/doc/Debian/apthowto/中找到它。 apt-get upgrade 和 apt-get dist-upgrade只 获 取“Depends”类软件包,它忽略“Recommend” 和“Suggests”类软件包,不想这样的话,可使用 dselect。 2.3.3 dselect 这个程序是 Ubuntu 软件包管理系统中菜单驱动的用户界面。特别适用于首次安装和大面积 升级。参阅 dselect, 第 6.2.4 节。 更多信息,可安装 install-doc 包後阅读/usr/share/doc/install-doc/dselectbeginner.en.html 或 dselect Documentation for Beginners。 2.3.4 不停机系统升级 Ubuntu 系统的内核(文件系统)支持替换使用中的文件。 当一个软件包升级时,如果由该 软件包提供的服务在当前运行级下正在运行,则该服务将被重新启动。 Ubuntu 系统不要求 用户在 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 会对软件包的解包、配置、删除、完全删除进行记录,但不能(目前是这样)记录在 包操作的过程中活跃终端的行为。 最简单的解决方法是在运行 dpkg、dselect、apt-get 等工具的会话中加入 script(1)程序。 2.4 Ubuntu 系统引导进程 2.4.1 init 程序 同所有的 Unix 一样, Ubuntu 启动要执行 init 程序。init 的配置文件(/etc/inittab)