第 10 章 - 定制 Debian GNU/Linux 的安装

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

10.1 如何确定所有的程序使用的是相同的页面尺寸(paper size)?

安装 libpaperg 软件包时, 会询问整个系统的默认页面尺寸, 设定会保存在 /etc/papersize文件里.

用户可以不用理会使用 PAPERSIZE 环境变量时的页面尺寸设置, 详见 papersize(5) 联机手册.

10.2 访问硬件设备的安全问题

/dev 目录下的许多设备文件属于预先设定的组, 例如 /dev/fd0属于 floppy 组, /dev/dsp 属于 audio 组.

如果要某个用户对设备有存取权限, 只要将他加入设备所属组就可以了, 即:

     adduser user group

这样就不需要修改设备权限了.

10.3 如何启动Debian时加载控制台字体?

kbdconsole-tools 软件包支持这种操作, 编辑/etc/kbd/config/etc/console-tools/config 文件.

10.4 如何配置一个 X11 程序的默认值?

Debian 的 X 程序配置数据位于 /etc/X11/app-defaults/ 目录下, 如果你要定制一个 X 应用程序, 把你的配置数据放在那些文件里, 这样在升级时才不会被破坏.

10.5 好像每 个linux 发行版都有不同的启动方式, 告诉我 Debian 的方式.

同所有的 Unix 一样, Debian 启动时要执行 init 程序. init 的配置文件(/etc/inittab)中指定的第一个执行脚本应该是 /etc/init.d/rcS. 该脚本执行 /etc/rcS.d/ 目录中各脚本的扩展名指定或衍生进程完成诸如检查并挂载文件系, 装载内核模块, 启动网络服务, 设定时钟等系统初始化工作. 接着, 为了兼容性考虑, 它运行 /etc/rc.boot/ 目录下的文件(除了那些文件名中包含 `.' 的文件), 目录中的脚本通常是供系统管理员使用的, 用于有兼容性问题的软件包.

完成系统启动进程后, init 执行默认运行级别(该运行级别由 /etc/inittab 中的 id 给出)指定的所有的启动脚本. 同大多数 System V 兼 容Unix 一样, Linux 有 7 个运行级别:

  • 0 (关闭系统),

  • 1 (单用户模式),

  • 2 到 5 (各种多用户模式), 以及

  • 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 进程一个信号, 要它重读配置文件.

10.6 好像 Debian 不使用 rc.local 定制启动过程; 那么提供了什么工具?

假设系统要在启动时运行 foo 脚本, 或进入指定的 (System V) 运行级别. 那系统管理员可以这样:

  • foo 脚本加入 /etc/init.d/ 目录.

  • 使用合适的参数运行 Debian 命令 update-rc.d, 这样就在(命令行指定的)rc?.d目录和 /etc/init.d/foo 之间建立了链接, 这里?是 0 到 6 中的一个数字, 对应于 System V 的各个运行级别.

  • 重启系统.

update-rc.d 命令会建立rc?.d目录中文件与 /etc/init.d/ 目录中脚本的链接, 每个链接名会以 'S' 或 'K' 打头, 接下来是一个数字, 再就是脚本名. /etc/rcN.d/中以 'S' 打头的脚本在系统进入运行级别 N 时被执行. 以 'K' 打头的脚本在离开运行级别 N 时被执行.

还可以这样来做, 将脚本 foo 放在 /etc/init.d/ 下然后使用 update-rc.d foo defaults 19 建立链接, 让 foo 脚本在系统启动期间执行. 参数 'defaults' 指默认运行级别, 它可以是 2 到 5 中某个值. 参数 '19' 确保 foo 在其它参数大于 20 的脚本之前执行.

10.7 软件包管理工具怎样处理非 Debian 格式的包?

有些用户可能想建立一个由 Debian 格式的包和非 Debian 格式的包混合组成的服务器, 通常这不是一个好主意, 因为 dpkg 无法了解非 Debian 格式包的配置文件, 因此在软件包升级时可能会出现冲突.

可以创建一个非 Debian 格式的包, 修改其配置文件所属组为 Debian 软件包所属组, 这样 dpkg 和其它的软件包管理系统就能识别本地系统管理员对于这个文件所作的修改,并且在升级时不会覆盖调它们.

10.8 不同版本软件包的文件的替代

假设系统管理员或本地用户想使用 "login-local" 而不是 Debian 提供的登录程序 login.

要这样做:

  • login-local/bin/login 覆盖掉.

包管理系统并不知道这个变化, 当 login(或其它依赖 /bin/login 的软件包)安装或升级时, 你定制的 /bin/login 就会被覆盖掉.

应该是

  • 运行:

         dpkg-divert --divert /bin/login.debian /bin/login
    

    使将来Debian的 login 包安装时, 写入 /bin/login.debian 而不是/bin/login.

  • 然后:

         cp login-local /bin/login
    

    将你定制的程序移到相应位置.

Debian 提供了 dpkg-divert(8) 连接手册.

10.9 如何让 Debian 的包管理系统管理非 Debian 格式软件包?

执行:

     dpkg-scanpackages BIN_DIR OVERRIDE_FILE [PATHPREFIX] > my_Packages

其中:

  • BIN-DIR 指 Debian 格式软件包(通常扩展名为 ".deb")的存放路径i.

  • OVERRIDE_FILE 这个文件由发行版的维护者编辑, 对于 "main" 发行版中的软件包, 通常保存在 Debian FTP 文档的 indices/override.main.gz 中. 对于非 Debian 格式软件包, 可以忽略这个文件.

  • PATHPREFIX 是一个 可选 字符串, 在制作 my_Packages 文件时可以预先考虑.

一旦你构建了 my_Packages 文件, 使用以下命令告诉软件包管理系统:

     dpkg --merge-avail my_Packages

如果你使用 APT, 也可以把本地源加入你的 sources.list(5) 文件.

10.10 Debian 对不同喜好的支持?

有这样一些情况, 两个不同的软件包提供了相同的基本功能, 一些用户因为习惯问题, 或者感觉界面比较友好选择其中一个, 而使用同一系统的另一些用户却有不同的选择.

Debian 使用虚拟软件包系统, 当有两个或两个以上包提供相同的基本功能时, 而没有指定特殊依赖时, 使得系统管理员(或用户)可以选择他们喜欢的工具.

例如, 系统中可能存在两个不同版本的新闻阅读器. 新闻服务器可能需要系统中新闻阅读器的支持 ,但是选 tin 还是trn就有用户决定了, 因为 tintrn 提供的 news-reader 虚拟包都能满足要求, 通过指向所选文件(如 /usr/bin/trn )的称作 /etc/alternatives/news-reader 虚拟包的一个连接来调用该程序.

单个的连接并不能满足所有程序的要求, 通常系统中提供同一虚拟包的软件了安装了多个, Perl 脚本 update-alternatives 提供了一个方法指定一个软件包作为系统的默认A.

例如检查可用的 `x-window-manager', 运行:

     update-alternatives --display x-window-manager

要更改,则:

     update-alternatives --config x-window-manager

然后屏幕等待指令(敲入一个数字, 选择你喜欢的).

如果以为自身的原因, 没有注册为窗口管理器(比如存在一个错误), 或你使用了 /usr/locale 目录下的窗口管理器, 屏幕上可能没有你要的选择, 可以使用如下命令:

     update-alternatives --install /usr/bin/x-window-manager \
       x-window-manager /usr/local/bin/wmaker-cvs 50

`--install' 选项的第一个参数是指向 /etc/alternatives/NAME 的一个符号连接, NAME 是第二个参数, 第三个参数是 /etc/alternatives/NAME 指向的程序, 第四个参数是优先级(值越大运行的可能性越大).

运行:

     update-alternatives --remove x-window-manager /usr/local/bin/wmaker-cvs

来删除你的添加.