本章讲述非开发人员需要掌握的Debian系统基础知识。有关知识的权威参考,请参阅:
列表见参考资料, 节 15.1。
如果你想查阅简要的“how-to”解释文档,可直接跳到Debian软件包管理, 章 6或其它相关章节。
本章的内容取自“Debian FAQ”,经过较大的改编,以适于普通Debian系统管理者上手。
Debian软件包位于Debian镜像站点
的目录树中,可通过FTP或HTTP访问它们。
下列目录存在于任何Debian镜像站点的/debian/目录下:
/dists/
:/pool/
:/tools/
:/doc/
:/indices/
:/project/
:project/experimental/
:project/orphaned/
:通常在dists目录下有三个Debian发行版。它们是“stable”发行版,“testing”发行版,和“unstable”发行版。有时还有一个“frozen”发行版。每个发行版均定义成一个符号链接指向该目录相应的代号目录。
stable发行版软件包入口,Debian Woody (3.0r0)被登记到stable目录(符号链接指向Woody目录):
stable/main/
:本目录包含的软件包均是最新Debian系统发布版的正式组成部分。
这些软件包均遵循Debian Free Software
Guidelines
(它位于/usr/share/doc/debian/social-contract.txt
,须安装debian-doc
),它们均可以自由使用和再发行。
stable/non-free/
:本目录包含的软件包受到一定限制,发行者需遵循特殊版权要求。
例如,有些软件包的许可证禁止其用于商业发行的。有些虽可以再发行,但本身是共享软件而非自由软件。以任何方式再发行这些软件包时(例如写入光盘)必须认真阅读有关的许可证或与所有者协商。
stable/contrib/
:本目录包含的软件包均遵循DFSG-free原则,本身也是自由发布的,但这些软件包的关联包不具有自由发行的属性,它们位于non-free目录。
除了上述的目录,新上载的软件包的物理存储位置为pool目录(pool目录, 节 2.1.10)。
现阶段stable发行版错误报告位于Stable
Problems
页面。
testing发行版软件包入口,处于unstable版本的Debian Sarge通过级别测试后登记到testing目录(符号链接指向Sarge目录)。现在,除了上述目录,新上载的软件包的物理存储位置为pool目录(pool目录, 节 2.1.10)。在testing下同样有main、contrib和non-free子目录,它们的作用与stable中的一样。
这些软件包必须可同时运行于所有架构,并且没有关联性问题影响到其安装。比起在unstable中的相应版本,它们有更少的release-critical错误。我们将testing作为更佳发布候选版本。有关testing版本的更多信息见于http://ftp-master.debian.org/testing/
。
testing发行版的最新消息发布在下列站点:
unstable发行版软件包入口,sid被登记到unstable目录(符号链接指向sid),上载的软件包在被移至testing目录前一直呆在这儿。新上载的软件包的物理存储位置为pool目录(pool目录, 节 2.1.10)。在testing下同样有main、contrib和non-free子目录,它们的作用与stable中的一样。
unstable发行版反映了系统的最新开发进展。欢迎广大用户使用并测试这些软件包,同时也提醒你们这些软件包还不完善。使用unstable发行版的好处就是你可以获得Debian项目的最新更新—不过新东西也会出新问题,你得好坏兼收:-)
unstable发行版的最新错误报告见于Unstable
Problems
页面。
当testing发行版足够成熟了,它成为frozen发行版,表示这个版本不再加入新代码,只进行除错工作。同时,dists目录中会建立新的testing发行版目录树,并命名新的版本代号。frozen发行版再经过几个月的测试、更新、再冻结也称之为“循环测试”。(新近的woody发布进程没有创建frozen符号链接,所以frozen并不算发行版,仅仅是testing发行版的一个开发阶段。)
我们将frozen发行版中可能延迟软件包或整个版本发布的错误都记录在案,一但错误总数低于可接受的最大值,frozen发行版就晋升成stable,新版本发布了,先前发布的版本成为过期版(obsolete)(并被移于相应的目录)。
存在于dists目录下的物理目录名,例如Woody和Sarge,就是“版本代号(codenames)”。当某个Debian发行版处于开发阶段,它并没有版本号,取而代之的是版本代号。使用版本代号的目的在于简化建立Debian发行版镜像的工作(如果真实目录例如unstable突然改名为stable,许多文件都没必要再次下载)。
当前,stable是一个指向Woody的符号链接,testing是指向Sarge的符号链接。也就是说Woody是当前的stable发行版,Sarge是当前的testing发行版。
unstable发行版是指向sid的永久符号链接,即unstable发行版总称为sid。
已使用过的发行版代号有: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。
到目前为止它们均出自Pixar的电影“Toy Story(Toy Story)”
过去,软件包均放在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)会自动处理它们。想了解更多信息,参阅RFC:
implementation of package pools
。
过去sid并不存在,Debian文件组织只有一个主要的工作流程:假设当前unstable发行版中创建了某个软件开发项目,当它成为新的stable版之时,便是它的发布之日。由于软件包一但发布就需要移动到新的stable目录,当众多软件开发项目移动目录时大量带宽会被吞噬掉,这个流程就显得很不切实际,因而许多软件开发项目并没有按这个方法行事。
经过几年的研究摸索,文档管理员提出一个方案,将未获准发布的二进制文档存入名为sid的特定目录。由于这些软件尚未发布,从那时起,它们就被加入到unstable目录树。当它们首次发布时,将会建立一个从当前stable指向sid的链接。这个方案用户听起来的确有些晕头。
有了软件包储藏池的帮助(参阅pool目录, 节 2.1.10),在woody发行版开发过程中,二进制软件包均按一定规范存放于pool目录,而与发行版无直接关系,当发布新版本时,就不会再出现大量带宽被消耗的问题。(不过,大量带宽还是被开发进程消耗了)。
incoming
中的软件包
上载的软件包首先存放于http://incoming.debian.org/
经过检收,确定它们是由Debian开发者上载的(对于那些属于无维护者上载(Non-Maintainer
Upload 缩写
NMU)的软件包则放入DELAYED
子目录)。会有一天,它们将从incoming移入unstable。
在紧急情况下,你可能会等不及它们移入unstable而直接从incoming中下载安装。
最新的Debian发行版存放在任何一个Debian镜像站点
的debian目录下。旧版本的Debian如Slink存放在http://archive.debian.org/
或Debian镜像站点的debian-archive目录下。
旧的testing和unstable软件包存放在http://snapshot.debian.net/
。
在每个主目录树下(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),可以访问发布手记站点stable
和testing
.
Debian系统中的一切程序都有源代码,不仅如此,许可证条款规定系统中所有的程序必须和其源代码一起发行,或提供源代码出售。
通常源代码发布在source目录,该目录同时处于所有架构目录中,更新的源码则在pool目录中(参阅pool目录, 节 2.1.10)。对于不太熟悉Debian归档目录结构的用户想获得源代码可以试试apt-get source mypackagename命令。
有些软件包,如著名的pine
,由于许可证限制,只提供源码包。(最近,pine-tracker
软件包提供了一个简易的安装版)安装源码包的方法可参阅向stable系统引入软件包, 节
6.4.10,打包, 节
13.9教你如何手工创建一个软件包。
contrib
和non-free
目录中的软件包可能不提供源代码,因为它们没有正式加入Debian系统。
软件包通常包含了实现一系列相关命令或特性所必须的所有的文件。有两种类型的Debian软件包:
软件包管理系统安装的软件包时需要读取那些由软件包维护者精心设计的关联信息,这些关联信息记录在每个软件包的control文件中。例如,包含GNU
C编译器(gcc)的软件包依赖于包含链接器和汇编器的binutils
软件包。如果用户试图在没有安装binutils
的情况下安装gcc
,软件包管理系统(dpkg)就会发送一条错误信息,告诉你需要安装binutils
,并停止安装gcc
。(不过,倔强的用户可以对这个信息视而不见,参阅dpkg(8)
)。)更多信息,参阅下面的章节软件包关联性, 节 2.2.8。
Debian软件包管理工具可用于:
Debian“软件包”,或称之为Debian包文件(Debian archive file),包含了可执行文件、库文件、和相关程序的文档。通常Debian文件的文件名以.deb结尾。
Debian二进制软件包内部格式描述见deb(5)
帮助页面。由于这种内部格式会改变的(特别对于Debian的新旧发布版),所以要操作.deb文件请参阅dpkg-deb(8)
。
即便在Woody发行版中,如果有Debian文件使用dpkg命令操作无效,还可用标准的Unix命令ar
和tar
来操作。
Debian软件包命名遵循下列约定:
foo_VersionNumber-DebianRevisionNumber.deb
其中foo代表软件包名称。确定某个特定Debian包文件(.deb file)的软件包名称有两种方法:
VVV字段代表该软件开发者制定的版本号。由于没有统一的版本号标准,所以它们的格式会各不相同例如“19990531”和“1.3.8pre1”。
RRR字段代表Debian修订版本号,它是由Debian开发者(或个人用户,假如他选择自己创建软件包的话)制定的。该版本号按照Debian软件包修订标准来制定;一个新的修订版通常表示对下列文件做了修改:Debian makefile(debian/ruless),Debian管理文件(debian/control),安装或卸载脚本(debian/p*),或软件包配置文件。
Debian的“conffiles”机制,可保存用户配置文件。用户的配置文件(通常位于/etc
)由Debian软件包管理系统登记到conffiles。当软件包升级后,软件包管理系统确保这些文件不被覆盖。
如果不需修改各种软件包配置文件就能完成系统配置,那就别去修改它们,即使它们已登记到conffiles。这样做能保证快速平滑的升级操作。
想准确了解哪些文件在升级过程中受到保护,运行:
dpkg --status package
看看“Conffiles”下的文件名列表。
有关Debian conffiles文件的详细内容,可参阅Debian Policy Manual的11.7节(参阅see 参考资料, 节 15.1)。
Debian维护脚本是一种可执行脚本,它在软件包安装之前或之后自动运行。它和一个名叫control的文件一起组成Debian包文件的“管理”部分。
这些文件是:
当前,所有的管理文件都存放在/var/lib/dpkg/info
目录。与foo软件包相关的文件,名字以“foo”打头,以“preinst”、“postinst”等为扩展名。目录中的foo.list文件列出了foo软件包安装的所有文件。(注意这些文件的位置在由dpkg来确定,可能会因Debina版本而异)
每个Debian软件包均被发布者指点了一个优先级,作为软件包管理系统 的一个辅助参数,优先级的值有:
包含所有必要的系统修补工具。不要删除这些软件包,否则整个系统将受到损坏,甚至无法使用dpkg
恢复。只安装Required级软件包的系统不可能满足所有的用途,但它可以启动起来,让系统管理员安装想要的软件。
系统若缺少这类软件,会运行困难或不好操作。该级别软件包并不包括Emacs或X11或TeX或其它大型应用程序,它们只是一些实现系统底层功能的程序。
系统的默认安装就包括了它们。“Standard”级软件包不包括许多大型应用程序,但它包括Emacs(它比其它应用程序更底层)和Tex及LaTeX的精巧版(不支持X)。
它们包括X11,TeX完整发布版和许多应用程序。
虚拟软件包是一个统称,用来指一组具有相近功能的软件包。举个例子,tin和trn都是新闻组阅读软件,当系统中某个程序需要调用新闻阅读器工作时就会产会一个关联关系,它们必须满足这个关联,我们也称之为它们提供了一个叫做news-reader的“虚拟软件包”。
又如,exim和sendmail都提供邮件传输代理的功能。也可称之为提供“邮件传输代理”虚拟包,如果安装了两者之一,那么任何与mail-transport-agent有关联关系的程序发出调用命令时,都会通过这个虚拟包实现调用。
Debian有个机制,如果系统中提供同种虚拟包的软件包安装了多个,系统管理员可以指定一个为首选软件。相关的命令是update-alternatives,更详细的描述参阅自选命令, 节 6.5.3。
Debian软件包管理系统有一套软件包“依赖性”定义(用一个标志)用来描述独立运行程序A与现存系统中程序B的存在之间的关系疏密程度:
上述术语使用方法的更详细的信息参阅Packaging Manual和the Policy Manual。
注意,dselect
可以对recommends和suggests类软件包进行细操作,apt-get
只会简单的下载安装depends类软件包而不管recommends和suggests类软件包。这两个程序均正式使用APT作为其后台。
“pre-depends”是一种特殊关联关系。对于一个普通软件包,不管系统中是否存在它的关联文件,dpkg
都会将它解包。解包主要指dpkg
从软件包中取出安装文件。如果系统中不存在这些软件包依赖的软件包,dpkg
会拒绝完成安装(通过执行它的“configure”动作)直至安装完所需的软件包。
然而,对有些软件包,dpkg
会拒绝解包,除非关联问题被解决。这种软件包就称为“pre-depend”于其它软件包。Debina提供这种机制是为了支持系统从a.out格式向ELF格式安全升级,在该过程中软件包的解包顺序至关重要。对于某些重大升级这种机制也很有用,例如对那些“required”级并有libc关联的软件包。
再次,更多详细信息参阅Packaging Manual。
软件包有各种状态:“unknown”,“install”,“remove”,“purge”和“hold”。这些“希望”标记描述了用户打算如何操作这些软件包(既可以使用dselect
的“Select”菜单,也可以直接调用dpkg
)。
它们的意思是:
有两种方法阻止软件包升级,使用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
软件包。
源码包发布在source目录中,既可以手工下载可以使用
apt-get source foo
获取它们(参阅apt-get(8)
帮助页面)。
对于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"
安装新编译的软件包。参阅向stable系统引入软件包, 节 6.4.10。
创建新软件包的详细信息,参阅New Maintainers'
Guide,该文档在maint-guide
包中,或浏览http://www.debian.org/doc/manuals/maint-guide/
。
Debian的设计目标之一就是提供一个一致的升级途径和安全的升级过程,我们致力于旧版本的平滑升级,软件包在升级过程中会将重要信息反馈给用户,并提供一个可能的解决方案。
你也应该阅读发布手记(Release
Notes),该文档描述了升级的详细情况,它存在于所有的Debian光盘中,也可以通过互联网访问http://www.debian.org/releases/stable/releasenotes
或http://www.debian.org/releases/testing/releasenotes
。
Debian软件包管理, 章 6提供了升级的实用指南,本节只作基础细节的介绍。
你可以简单的执行匿名FTP或用wget
查找想安装的Debian包文件,然后下载,用dpkg
装上。(注意dpkg
随时随地都能安装升级文件,甚至是正在运行的系统上)然而,有时安装修订包需要先安装其它软件包的新版本,这时安装就会停止,直到所需的软件包被安装好。
许多人觉得这种手工安装太费时,加上Debian软件包升级是那样频繁—通常,每周会上载十几个新软件包。在新版本发布前期更新量更是加倍。为了跟上更新速度,许多用户更乐意使用自动化升级工具。基于此目的出现了几种专门的软件包管理工具。
Debian软件包管理系统有两个设计目标:实现对软件包文件和包中文件的操作。APT和dselect
完成前者,dpkg
完成后者。
dpkg
它是操作软件包文件的主要工具;参阅dpkg(8)
获得完整信息。
dpkg
由几个原始的辅助程序演化而来。
dpkg-deb(1)
dpkg-ftp(1)
dpkg-mountable(1)
dpkg-split(1)
dpkg-ftp
和dpkg-mountable
已被新的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
,如果安装了apt-howto
包,可在/usr/share/doc/Debian/apt-howto/
中找到它。
apt-get upgrade和apt-get
dist-upgrade只获取“Depends”类软件包,它忽略“Recommend”和“Suggests”类软件包,不想这样的话,可使用dselect
。
dselect
这个程序是Debian软件包管理系统中菜单驱动的用户界面。特别适用于首次安装和大面积升级。参阅dselect
, 节 6.2.3。
更多信息,可安装install-doc
包后阅读/usr/share/doc/install-doc/dselect-beginner.en.html
或dselect
Documentation for Beginners
。
Debian系统的内核(文件系统)支持替换使用中文件。
我们还提供了一个程序start-stop-daemon
用来在系统启动时开启daemons或内核运行级别(runlevel)改变时停止daemons(例如:从multi-user级转到single-user级或关机)。当安装新软件包时如果该软件包中包含daemon安装,安装脚本会调用这个程序,停止运行中的daemons,然后在合适的时候重启它们。
注意,Debian系统不要求用户在single-user模式下进行不停机升级。
如果你手工下载包文件到硬盘(这完全没有必要,请阅读上面有关dpkg-ftp
或APT的内容),当你完成软件包安装工作后,可以从系统中删除.deb文件。
如果是使用APT,这些文件会缓存在/var/cache/apt/archives/
目录中。你可以在完成安装后删除它们(apt-get
clean)或者将它们拷贝到另一个机器的/var/cache/apt/archives/
目录中以备以后的安装。
dpkg
会对软件包的解包、配置、删除、完全删除进行记录,但不能(目前是这样)记录在包操作的过程中活跃终端的行为。
最简单的解决方法是在运行dpkg
、dselect
、apt-get
等工具的会话中加入script(1)
程序。
同所有的Unix一样,Debian启动要执行init程序。init的配置文件(/etc/inittab)中指定的第一个执行脚本应该是/etc/init.d/rcS。该脚本跟据/etc/rcS.d/目录中各脚本的扩展名回溯或分流子进程完成诸如检查并挂载文件系统、装载内核模块、启动网络服务、设定时钟等系统初始化工作。接着,为了兼容性考虑,它运行/etc/rc.boot/目录下的文件(除了那些文件名中包含“.”的文件),目录中的脚本通常是供系统管理员使用的,用于有兼容性问题的软件包。更多信息参见系统初始化提示, 节 9.1。
完成系统启动进程后,init执行默认运行级别(该运行级别由/etc/inittab中的id给出)指定的所有的启动脚本。同所有System V兼容Unix一样,Linux有7个运行级别:
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进程一个信号,要它重读配置文件。
Debian没有使用BSD风格的BSD-style rc.local目录来自定义系统引导进程;它提供自己的自定义机制。
假设系统要在启动时运行foo脚本,或进入指定的(System V)运行级别。那系统管理员可以这样:
/etc/init.d/
目录。
update-rc.d
,这样就在(命令行指定的)rc?.d目录和/etc/init.d/foo
之间建立了链接,这里?是0到6中的一个数字,对应于System
V的各个运行级别。
update-rc.d命令会在rc?.d目录中文件与/etc/init.d/
目录中的脚本之间目录建立链接,每个链接名会以“S”或“K”打头,接下来是一个数字,再就是脚本名。当系统进入某个运行级别N时,/etc/rcN.d/
中以“K”打头的脚本执行停止(stop)指令,接下来以“S”打头的脚本执行开始(start)指令。
还可以这样来做,将脚本放在/etc/init.d/
下然后使用update-rc.d
foo defaults
19建立链接,让foo脚本在系统启动期间执行。参数defaults指默认运行级别,它可以是2到5中某个值。参数19确保foo在其它参数大于20的脚本之前执行。
Debian提供几种途径,在不破坏系统的前提下满足系统管理员各种要求。
dpkg-divert
,参阅dpkg-divert
命令, 节
6.5.1。
equivs
,参阅equivs
软件包, 节 6.5.2。
update-alternative
,参阅自选命令, 节 6.5.3。
make-kpkg
可以支持多启动引导。参阅make-kpkg(1)
和Debian标准方式, 节 7.1.1。
Any files under
/usr/local/
目录下的所有文件均属于系统管理员,Debian不会改动它们。/etc
下的大部分(或全部)文件属于conffiles,Debian不会在升级后覆盖它们,除非系统管理员明确要求覆盖。
Debian系统是国际化产品,不论是在控制台下还是在X下,它都提供多种语言的字符显示和输入支持。许多文档、帮助页面以及系统消息都被翻译成各种语言。在安装过程中,Debian提示用户选择安装语言(有时是当地语言变量)。
如果你安装的系统提供的语言特性支持不能满足你的需要,或者你要改变当前语言或安装别的键盘方案以适应你的语言,参阅本地化(localization)及国家语言支持, 节 9.7。
See Debian下的Linux内核, 章 7.
首先你必须了解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
需要知道这些改变。这时就需要引用新的内核头文件。
对于希望(或必须)使用自定义内核的用户,推荐下载kernel-package
软件包。该软件包包含了创建内核包的脚本。有了它,新建Debian内核镜像包只需在内核源码目录的一级目录运行
# make-kpkg kernel_image
在内核源码所在目录的顶层,执行下述命令可获得有关帮助
# make-kpkg --help
或阅读make-kpkg(8)
帮助页面以及Debian下的Linux内核, 章 7。
如果所需的kernel-source-version(version代表内核版本号)包不存在,用户就得从Linux文件站点分别下载最新的(或需要的)内核源码。Debian的initrd
启动脚本需要一个专门的内核路径调用initrd
;参阅http://bugs.debian.org/149236
。
有关kernel-package
包的用法详述见于/usr/doc/kernel-package/README。
要使用多系统引导器如grub
或loadlin
,请将编译好的Linux内核bzimage
拷贝到相应的地方(例如/boot/grub
或MS-DOS分区)。
Debian的boot-floppies
软件包可以帮你制作一张自定义启动软盘,该软件包通常位于Debian
FTP包文件站点的admin分类。软件包中的Shell脚本按syslinux
格式制作启动软盘。对于那些使用MS-DOS格式化的软盘,其主引导扇区的记录将被修改为直接引导Linux(或是其它在盘中syslinux.cfg文件里的操作系统)。该软件包中的其它脚本可制作急救盘甚至重建基本系统。
安装该软件包后,阅读/usr/doc/boot-floppies/README
文件可获得更多信息。
Debian的modconf
软件包提供了一个shell脚本(/usr/sbin/modconf
),它可以用来自定义内核模块配置。该脚本使用菜单界面,用户通过它给出系统中可挂载设备驱动的有关细节,它再将这些细节信息生成/etc/modules.conf
文件(其中列出了别名aliases和其它参数,用于连接各种模块),该配置文件用来加载/etc/modutils/
目录下和/etc/modules
(其中列出了需要在系统启动时加载的模块)目录的相关模块。
新版的配置帮助文件可为构造自定义内核提供帮助,同样,modconf
软件包中也有一系列帮助文件(位于/usr/share/modconf/
目录下),告诉你如何对模块设定合适的参数。参阅模块化的2.4内核, 节
7.2中的例子。
kernel-image-NNN.prerm脚本可用来检查当前运行的内核版本,以确定是否与你打算卸载的内核版本相同。因此你可以使用如下命令删除不想要的内核镜像包:
dpkg --purge --force-remove-essential kernel-image-NNN
(当然,要将NNN替换成你的内核版本号和修订版号。)
Debian 参考手册
1.07-2, 星期日 四月 11 08:00:07 UTC 2004osamu@debian.org
iamlyoo@163.net