荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: sdymhua.bbs@Zero.cn-bbs.org (零起点), 信区: Linux
标  题: debian参考手册
发信站: 零起点_BBS (Sat Nov  6 02:13:12 2004)
转信站: SZU!news.szu.edu.cn!news.uestc.edu.cn!Zero

Debian参考手册

LYOO 翻译  转自 www.linuxsir.com


--------------------------------------------------------------------------------

Debian参考手册

概述

Debian参考手册旨在为运行Debian的用户提供全面的指导。书中提供了大量shell-command
实例,它们涵盖系统管理的方方面面,包括的主题有:Debian的基本概念、系统安装提示、
Debian软件包管理、Debian中的Linux内核、系统微调、建立网关、文本编辑器、CVS、程序
设计、面向非开发者的GnuPG等,每个主题都包括基础指南、实用技巧和其它相关信息。

版权声明

Copyright ? 2001–2002 by Osamu Aoki <osamu@debian.org>.
Copyright (Chapter 2) ? 1996–2001 by Software in the Public Interest.

本文档版权适用于GNU General Public License version 2 或更高版本的相关条款。

在遵守并包含本文档版权声明的前提下,制作和发布本文档的完整拷贝是允许的。并且,所
有这些拷贝均受到本许可声明的保护。

在遵守上述完整拷贝版本有关版权声明的前提下,拷贝和发布基于本文档完整拷贝的修改版
本是允许的,并且,发布所有通过修改本文档而得到的工作成果,须使用与本文档的许可声
明一致的许可声明。

在遵守上述修改版本版权声明的前提下,拷贝和发布本文档其它语言的翻译版本是允许的,
如果本许可声明有经自由软件基金会(Free Software Foundation)核准的当地化译本,则
遵循当地化译本。


目录

●1. 序
○1.1 官方文档
○1.2 文档约定
○1.3 脚本样例
○1.4 基本设置
○1.5 Debian发行版(distributions)基本概念

●2. Debian基础
○2.1 Debian文件
·2.1.1 目录结构
·2.1.2 Debian发行版
·2.1.3 stable发行版
·2.1.4 testing发行版
·2.1.5 unstable发行版
·2.1.6 frozen发行版
·2.1.7 Debian发布版代号
·2.1.8 已用过的发布版代号
·2.1.9 发布版代号来源
·2.1.10 pool目录
·2.1.11 sid的诞生记
·2.1.12 上载到incoming中的软件包
·2.1.13 找回旧软件包
·2.1.14 发布源目录结构
·2.1.15 源代码
○2.2 Debian软件包管理系统
·2.2.1 Debian软件包概述
·2.2.2 Debian软件包格式
·2.2.3 Debian软件包命名约定
·2.2.4 保存本地设置
·2.2.5 Debian系统维护脚本
·2.2.6 软件包优先级
·2.2.7 虚拟软件包
·2.2.8 软件包关联性
·2.2.9 何为“pre-depends”
·2.2.10 软件包状态
·2.2.11 阻止软件包升级
·2.2.12 源码包
·2.2.13 编译源码包
·2.2.14 新建Debian软件包
○2.3 Debian系统升级
·2.3.1 系统升级方法
·2.3.2 软件包管理工具概述
·2.3.3 dpkg
·2.3.4 APT
·2.3.5 dselect
·2.3.6 不停机系统升级
·2.3.7 下载.deb文件
·2.3.8 升级记录
○2.4 Debian系统引导进程
·2.4.1 init程序
·2.4.2 运行级别
·2.4.3 自定义系统引导进程
○2.5 多样性支持
○2.6 国际化
○2.7 Debian和系统内核
·2.7.1 编译非Debian源码包内核代码
·2.7.2 自定义内核创建工具
·2.7.3 多系统引导器
·2.7.4 制做引导软盘
·2.7.5 模块加载规定
·2.7.6 De-installing旧版内核软件包

●3.Debian系统安装提示
○3.1 常规Linux安装提示
·3.1.1 硬件兼容性
·3.1.2 确定PC硬件和芯片组
·3.1.3 在Debian下确定PC硬件
·3.1.4 在其它OS下确定PC硬件
·3.1.5 Lilo神话
·3.1.6 GRUB
·3.1.7 选择引导软盘
·3.1.8 安装系统
·3.1.9 网络所需的主机名和IP地址
·3.1.10 用户帐号
·3.1.11 创建文件系统
·3.1.12 DRAM内存指导
·3.1.13 Swap空间
○3.2 Bash设置
○3.3 鼠标设置
·3.3.1 PS/2鼠标
·3.3.2 USB鼠标
○3.4 NFS设置
○3.5 Samba设置
○3.6 打印机设置
·3.6.1 lpr/lpd
·3.6.2 CUPS
○3.7 其它主机安装提示
·3.7.1 初始化安装
·3.7.2 模块
·3.7.3 CD-RW基本步骤
·3.7.4 多内存和自动关机
·3.7.5 某此站点
·3.7.6 PPP拔号设置
·3.7.7 /etc中的其它配置文件

●4. Debian指南
○4.1 信息资源
○4.2 Linux控制台
·4.2.1 登录
·4.2.2 添加用户
·4.2.3 如何关机
·4.2.4 命令行编辑
·4.2.5 需要牢记的基本命令
·4.2.6 X Window系统
·4.2.7 重要键盘命令
○4.3 午夜指挥官(Midnight Commander)
·4.3.1 安装MC
·4.3.2 启动MC
·4.3.3 文件管理器
·4.3.4 命令行技巧
·4.3.5 编辑器
·4.3.6 阅读器
·4.3.7 自启动特性
·4.3.8 FTP虚拟文件系统
○4.4 进一步学习

●5. 发布版升级
○5.1 迁移准备工作(从“stable”到“testing”)
○5.2 升级到“testing”
·5.2.1 最好使用dselect升级
·5.2.2 最好别用apt-get升级
○5.3 配置Woody
○5.4 优化sources.list

●6. Debian软件包管理
○6.1 概述
·6.1.1 主要工具
·6.1.2 方便的工具
○6.2 Debian生存工具
·6.2.1 使用tasksel安装任务
·6.2.2 使用APT安装系统
·6.2.3 使用APT升级系统
·6.2.4 检测程序错误寻求帮助
·6.2.5 APT升级错误及解决方法
·6.2.6 使用dpkg救助
·6.2.7 /var被删除后如何恢复系统
·6.2.8 为无法启动的系统安装软件包
·6.2.9 如果dpkg命令出错该怎么办
○6.3 Debian必杀技
·6.3.1 文件信息
·6.3.2 软件包信息
·6.3.3 使用APT进行全自动系统安装
·6.3.4 配置已安装软件包
·6.3.5 删除软件包
·6.3.6 挂起旧软件包
·6.3.7 stable/testing/unstable混合系统
·6.3.8 dselect——全面配置
·6.3.9 删除缓存包文件
·6.3.10 记录/拷贝系统配置
·6.3.11 向stable系统引入软件包
·6.3.12 本地软件包文件
·6.3.13 转化或安装外来软件包
·6.3.14 校验已安装软件包
○6.4 其它Debian特性
·6.4.1 dpkg-divert命令
·6.4.2 equivs软件包
·6.4.3 可选命令
·6.4.4 System-V init文件和运行级别
·6.4.5 停止daemon服务

●7. Debian下的Linux内核
○7.1 内核编译
·7.1.1 Debian标准方式
·7.1.2 经典方式
·7.1.3 内核头文件
○7.2 模块化2.4内核
·7.2.1 PCMCIA
·7.2.2 SCSI
·7.2.3 网络功能
·7.2.4 EXT3文件系统(>2.4.17)
·7.2.5 对Realtek RTL-8139的支持
·7.2.6 并行端口支持
·7.2.7 打开了太多文件

●8. Debian技巧
○8.1 启动系统
○8.2 活动记录
○8.3 拷贝及创建子目录
·8.3.1 拷贝整个子目录的基本命令
·8.3.2 cp
·8.3.3 tar
·8.3.4 pax
·8.3.5 cpio
·8.3.6 afio
○8.4 差异备份与数据同步
·8.4.1 使用rdiff进行差异备份
·8.4.2 使用RCS进行定期差异备份
○8.5 系统冻结恢复
·8.5.1 中止一个进程
·8.5.2 ALT-SysRq
○8.6 记住这些可爱的小命令
·8.6.1 Pager
·8.6.2 Free
·8.6.3 设定时间(BIOS)
·8.6.4 设定时间(NTP)
·8.6.5 如何禁用屏幕保护程序
·8.6.6 搜索管理数据库
·8.6.7 禁用声音(响铃)
·8.6.8 控制台上的错误信息
·8.6.9 正确设置控制台类型
·8.6.10 恢复控制台的健壮性
·8.6.11 将DOS下的文本文件转换为Unix类型
·8.6.12 正则表达式的置换
·8.6.13 提取源文件修改部分合并到更新包
·8.6.14 分割大文件
·8.6.15 精巧的管道命令辅助脚本
·8.6.16 从网页上获取文本或邮件列表文档
·8.6.17 打印网页
·8.6.18 打印帮助页面
·8.6.19 合并两个Postscript或PDF文件
·8.6.20 执行命令计时
·8.6.21 nice命令
·8.6.22 日程安排(cron,at)
·8.6.23 用screen来定制控制台
·8.6.24 网络测试基础
·8.6.25 Flush mail from local spool
·8.6.26 Remove frozen mail form local spool
·8.6.27 再分发mbox中的信件
·8.6.28 清空文件内容
·8.6.29 空文件
·8.6.30 chroot
·8.6.31 怎样检查硬链接
·8.6.32 mount硬盘上的镜像文件
·8.6.33 Samba

●9. Debian系统微调
○9.1 系统初始化提示
·9.1.1 自定义init脚本
·9.1.2 自定义系统日志
·9.1.3 硬件存取优化
○9.2 访问权限控制
·9.2.1 使用PAM和系统登录
·9.2.2 “为什么GNU su命令不支持wheel组”
·9.2.3 各种用户组的含义
·9.2.4 sudo——一个安全的工作环境
·9.2.5 daemon程序的访问权限控制
·9.2.6 轻便目录访问控制协议(LDAP)
○9.3 刻录机
·9.3.1 概述
·9.3.2 方法一:modules+lilo
·9.3.3 方法二:重编译内核
·9.3.4 配置步骤
·9.3.5 光盘镜像文件(可引导)
·9.3.6 刻录光盘(R,R/W)
·9.3.7 制作光盘镜像文件
·9.3.8 Debian安装盘镜像
·9.3.9 将系统备份到光盘
·9.3.10 刻录音乐CD
○9.4 X程序
·9.4.1 X系统软件包
·9.4.2 X服务器的硬件侦测包
·9.4.3 X服务器
·9.4.4 X客户端
·9.4.5 X会话
·9.4.6 X的TCP/IP联接
·9.4.7 X远程联接:xhost
·9.4.8 X远程联接:ssh
·9.4.9 xterm
·9.4.10 X资源数据库
·9.4.11 X下获取root权限
·9.4.12 X下的TrueType字体
·9.4.13 网页浏览器(图形化)
○9.5 SSH
·9.5.1 基础
·9.5.2 发送端口——SMTP/POP3微调
·9.5.3 用更少的密码建立联接
·9.5.4 其它平台的SSH客户端
·9.5.5 SSH代理
·9.5.6 问题解决
○9.6 邮件程序
·9.6.1 邮件传输代理(Exim)
·9.6.2 邮件工具(Fetchmail)
·9.6.3 邮件工具(Procmail)
·9.6.4 邮件用户代理(Mutt)
○9.7 本地化及国家语言支持
·9.7.1 定制基础
·9.7.2 地区
·9.7.3 激活地区支持能力
·9.7.4 激活特定地区
·9.7.5 ISO 8601日期格式
·9.7.6 US(ISO-8859-1)例子
·9.7.7 带euro符号的France(ISO-8859-15)例子
·9.7.8 双语系统的例子(日本语EUCT和ISO-8859-1)
·9.7.9 X下UTF-8的例子
·9.7.10 FB控制台下UTF-8的例子
·9.7.11 超越地区

●10. 使用Debian系统架设网关
○10.1 网络配置
·10.1.1 网关主机设置
·10.1.2 网络设置检查
○10.2 网络过滤器设置
·10.2.1 网络过滤器基础
·10.2.2 过滤表(Netfilter table)
·10.2.3 过滤目标(Netfilter target)
·10.2.4 网络过滤器命令
·10.2.5 IP伪装
·10.2.6 重定向SMTP联接
○10.3 管理多重网络联接

●11. 编辑器
○11.1 流行的编辑器
○11.2 应急的编辑器
○11.3 Emacs和Vim
·11.3.1 Vim提示
·11.3.2 Emacs提示
·11.3.3 打开编辑器
·11.3.4 编辑器命令总汇(Emacs,Vim)
·11.3.5 Vim设置
·11.3.6 语法上色(Ctags)
·11.3.7 将高亮显示的屏显转化为HTML文件
·11.3.8 用vim分割屏显

●12. 系统版本控制
○12.1 CVS
·12.1.1 安装CVS服务器
·12.1.2 CVS会话例子
·12.1.3 CVS问题解决
·12.1.4 CVS命令
○12.2 Subversion
·12.2.1 安装Subversion服务器
·12.2.2 将CVS仓库移入Subversion
·12.2.3 Subversion用法样例

●13. 编程
○13.1 从哪儿开始
○13.2 Shell
·13.2.1 Bash——GNU标准交互shell
·13.2.2 POSIX shell
·13.2.3 Shell参数
·13.2.4 Shell重定向
·13.2.5 Shell条件
·13.2.6 命令行处理
○13.3 Awk
○13.4 Perl
○13.5 Python
○13.6 Make
○13.7 C
·13.7.1 简单C编程(gcc)
·13.7.2 调试
·13.7.3 Flex——更好的Lex
·13.7.4 Bison——更好的Yacc
·13.7.5 Autoconf
○13.8 准备文档
·13.8.1 roff排版
·13.8.2 SGML
○13.9 打包
·13.9.1 单个二进制文件打包
·13.9.2 使用工具打包

●14. GnuPG
○14.1 安装GnuPG
○14.2 使用GnuPG
○14.3 管理GnuPG
○14.4 在应用程序中使用GnuPG
·14.4.1 在Mutt中使用GnuPG
·14.4.2 在Vim中使用GnuPG

●15. Debian技术支持
○15.1 参考资料
○15.2 查词意
○15.3 查找流行的Debian软件包
○15.4 Debian错误跟踪系统
○15.5 邮件列表
○15.6 IRC
○15.7 搜索引擎
○15.8 网站

●A. 附录
○A.1 作者
○A.2 保证
○A.3 反馈
○A.4 文档格式
○A.5 Debian迷宫
○A.6 Debian引言

Debian参考手册 第一章 序
Debian参考手册

~~~~~
第一章 序
~~~~~

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/)
DDPebian Documentation Project(http://www.debian.org/doc/)

文中只提供了LDP文档的URLs,这些文档还可以以软件包的形式获得,它们安装在
/usr/share/doc/HOWTO/。参阅〖15.1 Debian参考〗。


1.3 脚本样例
============
脚本样例可以esamples子目录下找到;其中隐藏文件文件名前的“.”转化为下划线“_”,
可选脚本样例给出了扩展名。


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基础
~~~~~~~~~

本章讲述非开发人员需要掌握的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/testin...te_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/testin...able_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/wood...select-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替换成你的内核版本号和修订版号。)


Debian参考手册 第三章 Debian系统安装提示
Debian参考手册

第三章 Debian系统安装提示

安装Debian的官方文档位于http://www.debian.org/releases/stable/,以及
http://www.debian.org/releases/stable/installmanual。

开发版文档位于http://www.debian.org/releases/testing/,以及
http://www.debian.org/releases/testing/installmanual(处于写作中,有时可能无法访
问)。

尽管“Debian参考手册”写于Potato发布期间,但其中的绝大部分内部均更新至Debian
Woody(3.0r0)和Debian Sarge。


3.1 常规Linux安装提示
=====================
为将使用“testing”和“unstable”软件包造成的风险减至最小,可将你的Linux系统设置
为双引导,其中包含一个小巧且稳定的Linux系统。

3.1.1 硬件兼容性
----------------
Linux兼容绝大多数PC硬件,而且几乎可以安装在任何系统架构上。对我而言它的安装过程
和Windwos 95/98/Me一样简单。可兼容的硬件列表也在不断增加。

如果你有一部笔记本电脑,可以去http://www.linux-laptop.net/查找对应品牌和型号的安
装指导。

我推荐的台式机硬件通常“比较保守”:

·用于工作目的时最好选SCSI而不选IDE,IDE/ATAPI HD适于个人使用。
·IDE/ATAPI CD-ROM (或CD-RW)。
·最好选PCI而不选ISA, 特别是网卡(NIC)。
·选用便宜的NIC。Tulip for PCI、NE2000 for ISA都不错。
·初学Linux安装时避免使用PCMCIA (笔记本电脑)。
·别使用USB键盘、鼠标......除非你想证明自己的实力。

如果你的机器特别慢,最好把硬盘插到另一个速度快些的机器上安装。

3.1.2 确定PC硬件和芯片组
------------------------
在安装过程中,可能会要你确定电脑的硬件或芯片组等。有时了解这些信息并非易事,这儿
有个方法:

1.打开机箱亲自看看。
2.记下显卡芯片、网卡芯片、串口和IDE端口周围的芯片上印的数字。
3.记下印在PCI和ISA插卡背面的名称。

3.1.3 在Debian下确定PC硬件
--------------------------
在Linux系统中使用下列命令,可获得机器当前使用的硬件及配置的相关信息。

$ /sbin/lspci -v |pager
$ pager /proc/pci
$ pager /proc/interrupts
$ pager /proc/ioports

在安装过程中按ALT-F2进入控制台,可运行这些命令获得帮助。

3.1.4 在其它OS下确定PC硬件
--------------------------
还可从其它操作系统中获取硬件信息。

安装其它商业版Linux,当前它们在硬件侦测方面做得比Debian好,不过一但Sarge中加入了
debian-installer,情况就会改变。

安装Windows。用鼠标右键点“我的电脑”在菜单中选属性/设备管理,可获得硬件配置信息
。记下所有的资源信息如IRQ、I/O端口地址和DMA。有些旧的ISA卡可能要在DOS下配置。

3.1.5 Lilo神话
--------------
加载Lilo受限于1024柱面。——错!

Debian Potato之后使用的新版lilo支持lba32。只要主板的BIOS版本支持lba32,lilo就可
以冲破1024柱面的限制。

如果你使用的是旧版lilo.conf,请确定在你的lilo.conf文件开头的某处加了一行命令指示
系统读取“lba32”。参阅/usr/share/doc/lilo/Manual.txt.gz。

3.1.6 GRUB
----------
GNU HURD项目组提供的新的系统引导工具grub可使用于Debian Woody系统。

# apt-get update
# apt-get install grub-doc
# mc /usr/share/doc/grub-doc/html/
... read contents
# apt-get install grub
# pager /usr/share/doc/grub/README.Debian
... read it :)

要编辑GRUB选单,可编辑/boot/grub/menu.1st文件。参阅〖8.1.6 该如何设置启动参数(
GRUB)〗获取有关启动参数设置信息,它和lilo的设置方法不太一样。

3.1.7 选择引导软盘
------------------
Potato时期,在进行普通台式机安装时我喜欢用IDEPCI磁盘套件。到了Woody,我爱用
bf2.4启动盘套件。两者都使用同一版本的boot-floppies来创建引导软盘。

如果你有一张PCMCIA网卡,你就得使用标准启动盘套件(使用的软盘数最多,但可用的驱动
模块最全)并在PCMCIA设置中配置NIC;别在标准网络设置对话框中设置网卡。

对于特殊系统,需要创建一张自制急救盘,可以用别的机器上编译好的内核压缩镜像替换
Debian急救盘中名为“linux”的内核镜像。详情参阅急救盘中的readme.txt文件。急救盘
使用MS-DOS文件系统,所以你可以在任何系统下编辑它。这将为那些使用特殊网卡的人造福


到了Sarge,可用debian-installer或pgi来创建引导软盘。

3.1.8 安装系统
--------------
这方面的官方文档见于http://www.debian.org/releases/stable/installmanual或
http://www.debian.org/releases/testing/installmanual(处于写作中,有时可能无法访
问)

如果你是用引导软盘安装testing发行版,你需要在安装过程中按ALT-F2打开一个控制台,
手工编辑/etc/sources.list文件,将软件包下载入口从stable改为testing。

在安装/dev/hda的mbr时,我喜欢将lilo装在诸如/dev/hda3的位置,这样做可以减小引导信
息被覆盖的风险。

下面是我在安装过程中所做的选择。

·MD5 passwords "yes"
·shadow passwords "yes"
·Install "advanced" (dselect **) and select
·取消emacs (如果它被选中了), nvi, tex, telnet, talk(d);
·选上mc, vim,nano-tiny或elvis-tiny任选一个。

参阅〖6.3.8 dselect——全面配置〗。即使你是个Emacs迷也不要在安装阶段使用它,
nano可满足你的需要。也不要安装其它庞大的软件包如TEX(Potato曾在此阶段设置它为默
认安装)。参阅〖11.2 应急编辑器〗了解此时安装nano-tiny或elvis-tiny的原因。
·在每个软件包安装对话框中,回答所有的配置提问均=“y”(替换当前值)
·exim:选第2项,因为我使用ISP的SMTP服务器发送邮件。

有关dselect的更多信息,参阅〖6.3.8 dselect——全面配置〗

3.1.9 网络所需的主机名和IP地址
------------------------------
LAN配置的例子(C subnet: 192.168.1.0/24):

Internet
|
+--- 外部ISP提供POP服务(使用fetchmail访问)
|
Access point ISP提供DHCP服务和SMTP中继服务
| :
Cable modem (Dial-up)
| :
LAN网关外部端口: eth0 (IP由ISP的DHCP提供)
使用老式笔记本电脑(IBM Thinkpad, 486 DX2 50 MHz, 20 MB RAM)
运行Linux 2.4内核,提供ext3文件系统支持
运行"ipmasq"软件包(安装它的NAT和firewall加强包)
运行"dhcp-client"软件包配置eth0 (覆盖DNS的设定)
运行"dhcp"软件包配置eth1
运行"exim"作为smarthost (mode 2)
运行"fetchmail"设一个较长的时间值(fallback)
运行"bind" 作为高速域名服务器,在从LAN连入Internet时
作为认证域名服务器,在从LAN中连入网中某个域时
运行"ssh"使用端口22和8080(从任何地点连接)
运行"squid"作为缓存服务器连接Debian包文档服务器(APT需要连接它)
LAN网关内部端口: eth1 (IP = 192.168.1.1, 固定)
|
+--- LAN Switch (10 base T) ---+
| |
LAN中一些固定IP客户端 LAN中一些DHCP客户端
(IP = 192.168.1.2-127, 固定) (IP = 192.168.1.128-200, 动态)

参阅〖10. 使用Debian系统架设网关〗了解更多LAN网关服务器设置方面的信息。

3.1.10 用户帐号
---------------
为了让机器访问起来有一致的感觉,我的系统中开头几个帐号通常是不变的。

我首先创建的用户帐号名是“admin”(uid=100)。我通过该帐号转发所有的root email。
该帐号加入到adm用户组(参阅〖9.2.2 “为什么GNU su命令不支持wheel组”〗),这个用
户组为成员提供大量root特权的命令,通过su或sudo命令就能使用PAM。详情参阅〖4.2.2
添加用户帐号〗。

3.1.11 创建文件系统
-------------------
3.1.11.1 硬盘分区
^^^^^^^^^^^^^^^^^
我更喜欢将不同的目录树分别装在不同的分区下,这样可以将系统崩溃造成的损失减到最小
。例如:

/ == (/ + /boot + /bin + /sbin)
== 50MB+
/tmp == 100MB+
/var == 100MB+
/home == 100MB+
/usr == 700MB+ with X
/usr/local == 100MB

/usr目录的尺寸很大程度上取决于X-window应用程序和文档的数目。如果只运行控制台终端
/usr可以小到300MB,但如果你装了大量Gnome应用程序2GB-3GB也很正常。当/usr增长得太
大,将/usr/share移到别的分区是最有效的解救方法。对新的Linux2.4内核包,/目录的大
小可能要超过200MB。

例如,当前我的Internet网关服务器的硬盘使用情况如下(由df -h命令输出):

Filesystem Size Used Avail Use% Mounted on
/dev/hda3 300M 106M 179M 38% /
/dev/hda7 100M 12M 82M 13% /home
/dev/hda8 596M 53M 513M 10% /var
/dev/hda6 100M 834k 94M 1% /var/lib/cvs
/dev/hda9 596M 222M 343M 40% /usr
/dev/hda10 596M 130M 436M 23% /var/cache/apt/archives
/dev/hda11 1.5G 204M 1.2G 14% /var/spool/squid

(有块大空间留给/var/spool/squid作为下载软件包时代理服务器的缓冲区)

下面的fdisk -l输出提供了一个分区分配方案:

# fdisk -l /dev/hda # comment

/dev/hda1 1 41 309928+ 6 FAT16 # DOS
/dev/hda2 42 84 325080 83 Linux # (not used)
/dev/hda3 * 85 126 317520 83 Linux # Main
/dev/hda4 127 629 3802680 5 Extended
/dev/hda5 127 143 128488+ 82 Linux swap
/dev/hda6 144 157 105808+ 83 Linux
/dev/hda7 158 171 105808+ 83 Linux
/dev/hda8 172 253 619888+ 83 Linux
/dev/hda9 254 335 619888+ 83 Linux
/dev/hda10 336 417 619888+ 83 Linux
/dev/hda11 418 629 1602688+ 83 Linux

里面有一个未使用的分区。留作安装第二个Linux或为增长的目录树提供扩充余地。

3.1.11.2 挂载文件系统
^^^^^^^^^^^^^^^^^^^^^
下面的/etc/fstab文件可完成上述分区的挂载工作:

# /etc/fstab: static file system information.
#
# file system mount point type options dump pass
/dev/hda3 / ext2 defaults,errors=remount-ro 0 1
/dev/hda5 none swap sw 0 0
proc /proc proc defaults 0 0
/dev/fd0 /floppy auto defaults,user,noauto 0 0
/dev/cdrom /cdrom iso9660 defaults,ro,user,noauto 0 0
#
# keep partition separate
/dev/hda7 /home ext2 rw 0 2
/dev/hda8 /var ext2 rw 0 2
/dev/hda6 /var/lib/cvs ext2 rw 0 2
/dev/hda9 /usr ext2 rw 0 2
/dev/hda10 /var/cache/apt/archives ext2 rw 0 2

# very big partition for proxy cache
/dev/hda11 /var/spool/squid ext2 rw 0 2

# backup bootable DOS
/dev/hda1 /mnt/dos vfat rw,noauto 0 0
# backup bootable Linux system (not done)
/dev/hda2 /mnt/linux ext2 rw,noauto 0 0
#
# nfs mounts
mickey:/ /mnt/mickey nfs ro,noauto,intr 0 0
goofy:/ /mnt/goofy nfs ro,noauto,intr 0 0
# minnie:/ /mnt/minnie smbfs ro,soft,intr,credentials={filename} 0 2

对于NFS,我使用noauto、intr以及默认的hard项。如果有死连接,挂载进程可能会死掉,
可以使用Control-C恢复。

对于使用Samba连接的Windows机器(smbfs),rw,auto,soft,intr是个好方案,参阅〖3.5 配
置Samba〗。

对于软驱,使用noauto,rw,sync,user,exec可以防止因退盘前未执行卸载命令而造成文件
损坏,但它会降低写盘速度。

3.1.11.3 自动挂载
^^^^^^^^^^^^^^^^^
自动挂载的要点:

·加载vfat模块,从而/etc/auto.misc可使用-fstype=auto参数:

# modprobe vfat # prior to the floppy access attempt
... or to automate this settings,
# cat >>/etc/modules
vfat
^D
... 重启系统。

·设置/etc/auto.misc如下:

floppy -fstype=auto,sync,nodev,nosuid,gid=100,umask=000 :/dev/fd0
... 此处gid=100表示“users”。

·在/home/usrer中创建链接文件cdrom和floppy,分别指向/var/autofs/misc/cdrom和
/var/autofs/misc/floppy。

·将user加入“users”用户组。

3.1.11.4 挂载NFS
^^^^^^^^^^^^^^^^
外部Linux NFS服务器(goofy)处于防火墙(gateway)之后。在我的LAN内部,安全策略非
常宽松,因为只有我自己一个用户。为了访问NFS,NFS服务器端要按如下方式加上
/etc/exports:

# /etc/exports: the access control list for file systems which may be
# exported to NFS clients. See exports(5).
/ (rw,no_root_squash)

除安装和激活NFS服务器及客户机外,这一步对激活NFS服务器也是必要的。

我通常创建一个单独的2GB分区,有时想玩玩别的Linux系统,就可以装在这儿。两个系统可
共享swap和/tmp分区。多分区方案很难满足这种需求。如果只想装一个运行简单控制台模式
的系统,分区留500MB就绰绰有余了。

3.1.12 DRAM内存指导
-------------------
下列是有关DRAM的简单指导

4 MB: Linux内核运行的最低配置。
16 MB: 控制台系统运行的最低配置。
32 MB: 简单X系统运行的最低配置。
64 MB: GNOME/KDE系统运行最低配置。
128 MB: 流畅运行GNOME/KDE。
256+MB: 如果你银子充裕干嘛不呢?DRAM很便宜了。

使用启动选项mem=4m(或lilo append="mem=4m")可以看看只用4MB内存时系统如何运行。
如果机器的BIOS比较旧且内存数大于64MB启动时就得加lilo启动参数。

3.1.13 Swap空间
---------------
我按下面的指导原则来划分swap空间:

·每个swap分区均<128MB(使用旧版2.0内核),<2GB(使用最新内核)
·总容量=(机器内存大小的1到2倍)或(128MB到2GB之间)
·将它们分散于不同的硬盘,在/etc/fstab中可使用sw,pri=1选项挂载它们。这样可确保内
核以RAID方式使用swap分区,最大限度地发挥swap的性能。
·如果可能,使用硬盘中间的扇区。

尽管你不一定真的需要,但为系统设置多一些swap空间(128MB)总要好点,至少运行有内
存漏洞的坏程序,系统会先慢下来而不是马上死机。


3.2 Bash设置
============
我按自己的喜好修改shell启动脚本:

/etc/bash.bashrc 换成你的喜好
/etc/profile 保持发布版设定 ( \w -> \W)
/etc/skel/.bashrc 换成你的喜好
/etc/skel/.profile 换成你的喜好
/etc/skel/.bash_profile 换成你的喜好
~/.bashrc 换成你的喜好,会改变所有用户的设置
~/.profile 换成你的喜好,会改变所有用户的设置
~/.bash_profile 换成你的喜好,会改变所有用户的设置

可以参考我提供的脚本样例。我喜欢系统看起来清清楚楚,所以将umask设为002或022。

PATH依次由以下配置文件设定:

/etc/login.defs - 在shell之前设定PATH
/etc/profile (会调用/etc/bash.bashrc)
~/.bash_profile (会调用~/.bashrc)


3.3 鼠标设置
============

3.3.1 PS/2鼠标
--------------
对于ATX主板上使用PS/2接口的鼠标,信号通路如下:

mouse -> /dev/psaux -> gpm -> /dev/gpmdata = /dev/mouse -> X

这里,创建指向/dev/gpmdata的符号链接/dev/mouse,有助于简化配置操作。(例如,如果
你决定不再使用gpm daemon,只需在删掉gpm daemon后,将符号链接/dev/mouse指向
/dev/psaux。)

信号通路使得对键盘和鼠标插拔操作,只要重启gpm就可以生效,不必重启X!

处于gpm输出与X输入之间的信号通路协议有两种执行方式,“ms3”(使用Microsoft
3-button serial mouse协议)和“raw”(对于已连接的鼠标使用相同的协议),此处选择
的协议将决定X配置中使用的协议。

下面我将示范一下如何配置Logitech 3-button(传统Unix风格的鼠标)PS/2鼠标:

如果新版X4不支持你的显卡则需要使用旧版X3(如某些ATI 64位卡),请配置
/etc/X11/X86Config而不是/etc/X11/X86Config-4,下面的示例中使用的是X4:

3.3.1.1 使用ms3协议方式
^^^^^^^^^^^^^^^^^^^^^^^
/etc/gpm.conf | /etc/X11/X86Config-4
=========================+======================================
device=/dev/psaux | Section "InputDevice"
responsiveness= | Identifier "Configured Mouse"
repeat_type=ms3 | Driver "mouse"
type=autops2 | Option "CorePointer"
append="" | Option "Device" "/dev/mouse"
sample_rate= | Option "Protocol" "IntelliMouse"
| EndSection

如果使用这种方式,设置鼠标类型只需编辑gpm.conf,X的设置将保持不变。参阅我的样例
脚本。

3.3.1.2 使用raw协议方式
^^^^^^^^^^^^^^^^^^^^^^^
/etc/gpm.conf | /etc/X11/X86Config-4
=========================+======================================
device=/dev/psaux | Section "InputDevice"
responsiveness= | Identifier "Configured Mouse"
repeat_type=raw | Driver "mouse"
type=autops2 | Option "CorePointer"
append="" | Option "Device" "/dev/mouse"
sample_rate= | Option "Protocol" "MouseManPlusPS/2"
| EndSection

如果使用这种方式,设置鼠标类型可编辑gpm.conf,同时也会改变X的设置。

3.3.1.3 如何设置不同的鼠标
^^^^^^^^^^^^^^^^^^^^^^^^^^
gpm的设备类型autops2可以自动检测出市面上大多数PS/2鼠标。不幸的是它也不是万能的,
而且Woody之前的发布版中并不包括它,这时可在gpm.conf中试试ps2,或者imps2。想看看
gpm支持哪些类型的鼠标可输入:gpm -t help。参阅gpm(8)。

如果使用的是2键PS/2鼠标,可选上X协议的Emulate3Buttons项。协议中2键鼠标和3键鼠标
的区别在于每次按下中间键时,是自动检测还是自动模拟信号传给gpm。

对于在X协议使用raw协议方式或不使用gpm,可使用下面的设置:

·IntelliMouse: 串口鼠标(gpm转换器使用"ms3")
·PS/2: PS/2鼠标(通常首先试试这项)
·IMPS/2: 任何PS/2鼠标(2键、3键或滚轴鼠标)
·MouseManPlusPS/2: Logitech PS/2鼠标

更多信息可浏览http://www.xfree86.org/current/mouse.html。

对于典型的Microsoft滚轴鼠标,有报导说这样设置最好:

/etc/gpm.conf | /etc/X11/X86Config-4
=========================+======================================
device=/dev/psaux | Section "InputDevice"
responsiveness= | Identifier "Configured Mouse"
repeat_type=raw | Driver "mouse"
type=autops2 | Option "CorePointer"
append="" | Option "Device" "/dev/mouse"
sample_rate= | Option "Protocol" "IMPS/2"
| Option "Buttons" "5"
| Option "ZAxisMapping" "4 5"
| EndSection

对于某些最新的Toshiba超薄笔记本,在System-V init脚本中设置gpm先于PCMCIA激活可防
止系统锁死。听起来古怪不过是真的。

3.3.2 USB鼠标
-------------
请确定你完成了:

·在内核中打开了“Input Core Support”和“Input Core Support/Mouse Support”或作
为模块加载。
·在内核中打开了“Support for USB”、“Preliminary USB device filesystem”、“
UHCI or OHCI”和“USB HID Support”或作为模块加载。

如果你没使用devfs,则需按下面的方法创建一个设备节点/dev/input/mice:

# cd /dev
# mkdir input
# mknod input/mice c 13 63

对于典型的3键USB鼠标,配置如下:

/etc/gpm.conf | /etc/X11/X86Config-4
=========================+======================================
device=/dev/input/mice | Section "InputDevice"
responsiveness= | Identifier "Generic Mouse"
repeat_type=raw | Driver "mouse"
type=autops2 | Option "SendCoreEvents" "true"
append="" | Option "Device" "/dev/input/mice"
sample_rate= | Option "Protocol" "IMPS/2"
| Option "Buttons" "5"
| Option "ZAxisMapping" "4 5"
| EndSection

更多信息可浏览http://www.linux-usb.org/。


3.4 NFS设置
===========
安装NFS要设置/etc/exprots。

# echo "/ *.domainname-for-lan-hosts(rw,no_root_squash,nohide)" \
>> /etc/exports

详情见我的样例脚本。


3.5 Samba设置
=============
参考资料:

·http://www.samba.org/
·samba-doc package

以“share”方式安装Samba比较容易,因为安装过程会创建WfW-type共享驱动器。但最好使
用“user”模式来配置它。

可以用debconf或vi来设置Samba:

# dpkg-reconfigure --priority=low samba # in Woody
# vi /etc/samba/smb.conf

详情参阅我的脚本样例。

可通过smbpasswd向smbpasswd文件添加一个新用户:

$su -c "smbpasswd -a username"

确保使用的加密密码有恰当的兼容性。

按下表中相应的值设定os level(数字越大,服务器的优先级越高)

0: Samba with a loose attitude (will never become a master browser)
1: Wfw 3.1, Win95, Win98, Win/me?
16: Win NT WS 3.51
17: Win NT WS 4.0
32: Win NT SVR 3.51
33: Win NT SVR 4.0
255: Samba with mighty power

确认用户是共享目录所有组的成员,and that the directory path has its execution
bit set to access. (该句何意?望高手指导。译者注)


3.6 打印机设置
==============
传统打印方法是lpr/lpd。新的CUPS系统(Common UNIX Pinting System)提供了另一方法
PDQ,详情参阅〖Linux Pringing HOWTO〗
http://www.tldp.org/HOWTO/Printing-HOWTO.html。

3.6.1 lpr/lpd
-------------
对于lpr/lpd的打印缓冲池(type spoolers)(lpr,lprng和gnulpr),如果它们连接的是
PostScript或text-only打印机(最基本的打印机)可按如下方式设置/etc/printcap:

lp|alias:\
:sd=/var/spool/lpd/lp:\
:mx#0:\
:sh:\
:lp=/dev/lp0:

上述各行的意思是:

·Head line: lp — spool名称, alias = alias
·mx#0 — 不限最大文件尺寸
·sh — 不打印页眉
·lp=/dev/lp0 — 本地机印机,或port@host远程打印机

如果连接的是台PostScript打印机,上述设置就够用了。如果是Windows机器通过Samba打印
,上述设置也适用于任何Windows支持的打印机(不支持双向通信)。你必须在Windows环境
中对打印机做相应的配置。

如果你没有PostScript打印机,就得用gs安装过滤系统。有很多自动配置工具可用于配置
/etc/printcap,可选择下列任何一组:

·gnulpr, (lpr-ppd)和printtool — 我用这种
·lpr和apsfilter
·lpr和magicfilter
·lprng和lprngtool
·lprng和apsfilter
·lprng和magicfilter

想运行GUI配置工具如printtool,需要root权限,参阅〖9.4.11 X下获取root权限〗。
printtool可创建打印缓冲池,它使用gs模拟PostScript打印机,所以要使用PostScript打
印驱动来访问它们。在Windows端,“Apple LaserWriter”是标准件。

3.6.2 CUPS
----------
首先安装Common UNIX Printing System(或CUPS):

# apt-get install cupsys cupsomatic-ppd
# apt-get install cupsys-bsd cupsys-driver-gimpprint

接着用浏览器来配置系统:

$ mybrowser http://localhost:631

举个例子,将你的打印机联接到可访问打印机列表中:

·在主页面上点击“Printers”,然后点“Add Printer”,
·输入用户名和密码,进入“root”,
·按提示添加打印机,
·返回“Printers”页面,点“Configure Printer”,
·设定打印纸尺寸、分辨率和其它参数。

更多信息可浏览http://localhost:631/documentation.html和
http://www.cups.org/cups-help.html。

对于2.4内核,参见〖7.2.6 并行端口支持〗。


3.7 其它主机安装提示
====================

3.7.1 初始化安装完成后再装些什么
--------------------------------
到现在,你已经拥有一个小巧但功能颇强的Debian系统。接下来,可以安装那些较大的软件
包了。

·运行tasksel。参阅〖6.2.1 使用tasksel安装任务〗。

可按需选择
·End-user — X window system
·Development — C and C++
·Development — Python
·Development — Tcl/Tk
·Miscellaneous — TeX/LaTeX environment
·For others — 我把tasksel作为安装指导,查看<Task Info>了解有关任务的安装列表
然后用dselect来选择安装。

·运行dselect。

在此,你最想做的事就是选择钟爱的编辑器和其它需要的程序。你可以同时安装Emacs的多
个变种。参阅〖6.3.8 dselect——全面配置〗和〖11.1 流行的编辑器〗。

你也可以将某些默认的软件包替换成特定版本。
·lynx-ssh (而不是lynx)
·...


·...

我通常会编辑/etc/inittab简化关机步骤。

...
# What to do when CTRL-ALT-DEL is pressed.
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -h now
...

3.7.2 模块
----------
在初始安装期间可进行设备驱动模块配置。以后还可使用modconf进行配置,它是基于菜单
界面的工具,可用来配置那些在初始安装时未曾配置的模块或完成新内核安装后的配置工作


所有预加载(preloading)模块的名称要加入到/etc/modules列表。也可以使用lsmod和
depmod进行手工操控。

对于2.4版内核别忘了在/etc/modules中加上几行来处理IP伪装(ftp等)。参阅〖7.2 模块
化的2.4内核〗,特别是〖7.2.3 网络功能〗。

3.7.3 CD-RW基本步骤
-------------------
编辑下列文件:

/etc/lilo.conf (添加append="hdc=ide-scsi ignore=hdc",
执行lilo激活)
/dev/cdrom (创建链接# cd /dev; ln -sf scd0 cdrom)
/etc/modules (添加"ide-scsi"和"sg"。如果需要可再加上"sr"。)

详情参阅〖9.3 刻录机〗。

3.7.4 多内存和关机自动断电
--------------------------
编辑/etc/lilo.conf,设置启动提示参数如下,实现识别大内存(适用于2.2版内核)和关
机自动断电(适用于APM):

append="mem=128M apm=on apm=power-off noapic"

执行lilo完成上述设置。对称多处理器内核(SMP-kernel)需要apm=power-off,而对我那
堆糟糕的SMP硬件而言noapic几乎没什么用处。系统启动时,在启动提示符后直接输入这些
参数效果也一样。参阅〖8.1.5 启动提示符使用技巧〗。

在Debian的2.4版内核中apm是作为模块编译的,对于这种情况,可在系统启动后运行#
insmod apm power_off=1或设置/etc/modules:

# echo "apm power_off=1" >>/etc/modules

还可以这样:编译新版内核时加入ACPI支持可达到同样的效果,而且这种方式更适合SMP(
只有较新的主板才支持ACPI)。对于较新的主板2.4版内核可以直接检测到大内存。

CONFIG_PM=y
CONFIG_ACPI=y
...
CONFIG_ACPI_BUSMGR=m
CONFIG_ACPI_SYS=m

在/etc/modules中按如下顺序添加参数:

ospm_busmgr
ospm_system

或者重新编译内核,在配置时将上述内核选项均设为“y”。总之,有了ACPI支持就不再需
要任何启动提示参数。

3.7.5 无法访问某此站点的怪问题
------------------------------
新的Linux内核默认开启ECN,对于某些使用劣质路由器的站点,会出现无法访问的问题。检
查ECN状态可使用:

# cat /proc/sys/net/ipv4/tcp_ecn
... 或
# sysctl net.ipv4.tcp_ecn

将它关闭:

# echo "0" > /proc/sys/net/ipv4/tcp_ecn
... 或
# sysctl -w net.ipv4.tcp_ecn=0

每次启动时禁止TCP ECN,可编辑/etc/sysctl.conf,加上:

net.ipv4.tcp_ecn = 0

3.7.6 PPP拔号设置
-----------------
安装pppconfig软件包,设置PPP拨号访问。

# apt-get install pppconfig
# pppconfig
... 按提示配置PPP拨号
# adduser user_name dip
... 允许user_name进行PPP拨号访问

用户(user_name)进行PPP拨号访问:

$ pon ISP_name #开始PPP访问,接通你的ISP
... 享受Internet
$ poff ISP_name #停止PPP访问, ISP_name可选

另外,wvdial软件包可以用来设置PPP拨号访问。

3.7.7 /etc中的其它配置文件
--------------------------
Debian标准安装不包含/etc/cron.deny文件,想添加可拷贝/etc/at.deny。

Debian参考手册 第四章 Debian指南
Debian参考手册

第四章 Debian指南

本章为那些初涉Linux世界的新手指出了基本方向。如果你接触Linux已有一段时间,可以当
成是一次实战测验。


4.1 信息资源
============
到http://www.debian.org/doc/(Debian Documentation Project (DDP))看看,那儿有最
权威的Debian参考资料。其中的许多文档都安装在/usr/share/doc/下。还可以到
/usr/share/doc-base看看,那儿有这些文档的打印文件。在~/.bash_profile中添加
export CDPATH=.:/usr/share/doc:/usr/src/local,这样更容易访问这些文档目录。

到http://www.tldp.org/(Linux Documentation Project (LDP))看看,那儿有最权威的
通用Linux参考资料。LDP资料通常安装在/usr/share/doc/HOWTO/目录下。

浏览本地或远程FTP站点的文档,可在Midnight Commander中按下F9(参阅〖4.3 午夜指挥
官(Midnight Commander)〗)。


4.2 Linux控制台
===============

4.2.1 登录
----------
在普通Linux系统中,有6个独立的伪终端(pseudo-terminals)。同时按下Left-Alt键和
F1-F6键可在这些伪终端间切换。每个伪终端均需单独登录。多用户环境是Unix最鲜明的特
征,而且一用就上瘾。

我通常使用一个普通用户帐号,在其中可使用sudo、super或su -c来获得有限的root访问权
限。

4.2.2 添加用户
--------------
系统安装完毕,我通常会添加一个普通用户帐号,如果用户名为“penguin”,

# adduser penguin

就会创建一个这样帐号。

使用vigr命令编辑/etc/group:

src:x:40:admin, debian, ...
staff:x:50:admin
...

对于那些执行系统管理任务并且独享su特权、CVS src特权的用户,我将它们纳入staff用户
组(参阅〖9.2.2 “为什么GNU su命令不支持wheel组”〗)。

在系统默认安装状态下,staff用户组属于/home,用来存放那些完成用户帐号维护工作的用
户,而src用户组属于/usr/src,用来存放那些完成内核编译等工作的用户。

用adduser,addgroup,vipw,vipw -s,vigr,以及vigr -s检查一下用户及用户组是否配
置得当。

4.2.3 如何关机
--------------
和其它现代操作系统一样,系统的工作文件均缓存于内存,所以在切断电源之前Linux需要
完成特别的关机程序。下面就是多用户模式下使用的关机命令:

# shutdown -h now

这是单用户模式下使用的关机命令:

# poweroff -i -f

等待屏幕上显示“System halted”字样之后切断电源。如果在BIOS和Linux中开启了apm,
系统会自动切断电源。详情参阅〖3.7.4 多内存和自动关机〗。

4.2.4 命令行编辑
----------------
bash是默认shell,它能记住使用过的命令。只需按up-arrow键就能进入记忆模式,使用上
下箭头找你想输入的命令。其它需要牢记的重要击键有:

Ctrl-C: 中止程序
Ctrl-D: 中止输入
Ctrl-S: 停止屏幕输出
Ctrl-Q: 恢复屏幕输出
Ctrl-Alt-Del: 重启/关闭系统(参阅/etc/inittab)
Lt-click-and-drag-mouse: 选择并拷贝到剪贴板(gpm)
Ctrl-click-mouse: 将剪贴板内容粘贴到光标处(gpm)

对于常规Linux系统控制台,上述命令中通常指的是左边的Ctrl和Alt键。

4.2.5 需要牢记的基本命令
------------------------
下列是最基本的Unix命令:

ls, ls -al, ls -d, pwd, cd, cd ~user, cd -,
cat /etc/passwd, less, bg, fg, kill, killall,
uname -a, type commandname, sync, netstat,
ping, traceroute, top, vi, ps aux, tar, zcat,
grep, ifconfig, ...

在命令提示符后输入man或info加相关命令名,可查看该命令的意思。许多Linux命令可使用
下列调用获得简要帮助信息:

$ commandname --help
$ commandname -h

whatis commandname可以显示任何命令的单行概述,这些内容来自于相关帮助文件的开头。


4.2.6 X Window系统
------------------
从控制台启动X Window系统:

# exec startx

右键点击root窗口可以唤出选择菜单。

4.2.7 重要键盘命令
------------------
可在Linux控制台中使用的重要击键:

Alt-F1 thru F6: 切换到其它伪终端
Ctrl-Alt-F1 thru F6: 切换到其它伪终端
(在X-window、DOSEMU等运行环境中)
Alt-F7: 切换回X-window
Ctrl-Alt-minus: 降低X-window的显示分辩率
Ctrl-Alt-plus: 提高X-window的显示分辩率
Ctrl-Alt-Backspace: 中止X-windows
Alt-X, Alt-C, Alt-V: 通用的Windows/Mac剪切、拷贝、粘贴键
在某些程序如Netscape Composer中,组合键中的Ctrl键换成了Alt键


4.3 午夜指挥官(Midnight Commander)
===================================
午夜指挥官是Linux控制台和其它终端环境中的GNU“瑞士军刀”。

4.3.1 安装MC
------------
# apt-get install mc

接着在~/.bashrc(或/etc/bash.bashrc,.bashrc会调用它)中加上函数:

mc ()
{
mkdir -p ~/.mc/tmp 2> /dev/null
chmod 700 ~/.mc/tmp
MC=~/.mc/tmp/mc-$$
/usr/bin/mc -P "$@" > "$MC"
cd "$(cat $MC)"
rm -f "$MC"
unset MC;
}

该函数使MC可以改变工作目录直至退出。

如果处于kon或Kterm for Japanese等使用某些图形特性的终端,MC运行会出一些问题,可
在MC命令行中加上-a加以预防。

4.3.2 启动MC
------------
$ mc

在MC中用户可轻而易举使用菜单完成所有的文件操作。

4.3.3 文件管理器
----------------
默认状态下,所有文件列于两个目录面板。一种实用的方式是将右边窗口设定为“
information”,用来查看文件访问权限等信息。下面是一些基本的击键。如果gpm daemon
在运行,你还可以使用鼠标。(在MC中进行剪切和粘贴操作时另忘了按下shift键。)

·F1: 帮助菜单
·F3: 内置文件阅读器
·F4: 内置编辑器
·F9: 激活折叠菜单
·F10: 退出MC
·Tab: 在两个窗口间移动
·Insert: 为多文件操作生成文件如拷贝
·Del: 删除文件(小心——请设置MC为安装删除模式)
·Cursor keys: 与各自的名字一致

4.3.4 命令行技巧
----------------
·cd命令可改变焦点屏幕中的目录位置。
·Cnotrol-Enter或Alt-Enter可以将文件名拷贝到命令行。在编辑命令行时可与cp或mv命令
结合使用。
·Alt-Tab 显示shell命令名供用户选择。
·可指定MC两个目录窗口的起始目录;例如mc /etc /root。
·Esc + numberkey == Fn (例如Esc + 1 = F1, etc;Esc + 0 = F10)
·Esc key == Alt key (= Meta, M-);例如Esc + c等价于Alt-c。

4.3.5 编辑器
------------
内置编辑器的剪切-粘贴方式很有意思。按F3在起始处做标记,再次按F3在终止处做标记,
这时中间的选中部分会高亮显示。然后你可以移动光标到某处按下F6,被选中部分就会移到
该处。如果你按下的是F5,选中部分就会拷贝到该处。F2用来存盘,F10退出,所有方向键
的作为和它们的名字一样直观。

该编辑器可直接打开某个文件:

$ mc -e filename_to_edit
$ mcedit filename_to_edit

虽然它不是多窗口编辑器,但你可利用Linux多控制台的特性达到相同的效果。要在窗口间
进行拷贝操作,可使用Alt-Fn切换虚拟控制台,然后使用“File->Instert file”或“
File->Copy to file”将一个文件中的内容拷贝到另一个文件。

可指定任何外部编辑器作为内置编辑器。

许多程序使用环境变量EDITOR或VISUAL来决定使用哪个编辑器。如果你用不惯vim,可在
~/.bashrc中加上几行来指定新的mcedit:

...
export EDITOR=mcedit
export VISUAL=mcedit
...

我强烈推荐将它们设定为vim。在Linux/Unix世界里就该使用vi(m)命令。

4.3.6 阅读器
------------
非常精巧的阅读器。它是在文档中搜索单词的利器。在/usr/share/doc目录下我总是用它,
面对大量的Linux资料用它浏览是最快的方法。阅读器可以直接找开文件:

$ mc -v filename_to_view

(注意,有些不规范的软件包仍将它们的文档放在/usr/doc目录下。)

4.3.7 自动启动特性
------------------
在文件上按Enter,会激活相关的程序操作该文件。这是MC的一个极方便的特点。

executable: 执行命令
man, html file: 将文件内容传入阅读器程序
tar, gz, rpm file: 象浏览子目录一要浏览它的内容

为了使这些文件特性生效,不要将可阅读文件设成可执行文件。可在MC文件菜单中改变文件
属性或使用chmod命令。

4.3.8 FTP虚拟文件系统
---------------------
MC可通过FTP访问文件。按F9转到菜单栏,输入p激活FTP虚拟文件系统。按
username:passwd@hostname.domainname格式输入URL,远程文件目录就会以本地目录的方式
显示出来。

4.4 进一步学习
--------------
许多Unix入门级参考书出自在O'Reilly,在计算机的各个领域,想买到优秀的指导书,O'
Reilly不会让你失望。LDP的文档Tips-HOWTO(
http://www.tldp.org/HOWTO/Tips-HOWTO.html)是另一个极好的资源。更多资源参阅〖
15. Debian技术支持〗


Debian参考手册 第五章 发行版升级
Debian参考手册

第五章 发布版升级

升级的官方发布通知位于http://www.debian.org/releases/stable/releasenotes和
http://www.debian.org/releases/testing/releasenotes(不断更新中)


5.1 迁移准备工作(从“stable”到“testing”)
============================================
下面的操作可实现通过网络升级到“testing”(亦可执行样例目录中的go-woody脚本):

# cd /etc/apt
# cp -f sources.list sources.old
# :>sources.list
# cd /
# apt-setup noprobe
... select http or ftp
# cd /etc/apt
# grep -e "^deb " sources.list >sources.deb
# grep -e "^deb-" sources.list >sources.src
# sed -e "s/^d/#d/" \
/usr/share/doc/apt/examples/sources.list >sources.list
# sed -e "s/stable/testing/" \
sources.deb >>sources.list
# apt-get update
# apt-get install apt apt-utils
# cat >preferences <<EOF
Package: *
Pin: release a=testing
Pin-Priority: 700

Package: *
Pin: release a=unstable
Pin-Priority: 70

EOF
# sed -e "s/stable/unstable/" sources.deb \
>>sources.list
# sed -e "s/stable/unstable/" sources.src | \
sed -e "s/^deb-/#deb-/" >>sources.list

下面是/etc/apt/preferences有关说明(参阅apt_preferences(5))

track stable: 将testing的Pin-Priority改为80
track testing: 保持当前值(从/unstable安装unstable发行版)
track testing(unstable): 将unstable的Pin-Priority改为600
track unstable(testing): 将unstable的Pin-Priority改为800

有关如何选定Pin-Priority的说明:在上表中,从上而下代表了某个版本 从上个版本刚刚
发布之后到下一版进入冻结期之前这段时间经历的各个阶段。

样例目录中的preferences.testing和preferences.unstable脚本演示了如何设置
/etc/apt/preferences文件,以锁定某些关键包的较成熟版本和其它非关键包的不太成熟版
本。另一方面,preferences.stable强迫所有的软件包降级到“stable”。

如果有必要的话,可让APT使用代理。请设定http_proxy环境变量或在/etc/apt/apt.conf文
件中设定http的值。

本节只讨论了APT升级和极少量软件包关联问题。


5.2 升级到“testing”
=====================
完成了上述准备,就可以开始系统升级了。

5.2.1 最好使用dselect升级
-------------------------
如果系统在许多软件包都包含了-dev等软件包,推荐使用下面的dselect操作方法进行软件
包细操作(fine-grained package control)。

# dselect update # 升级前请先完成这步
# dselect select # 在“suggests”和“recommends”中选择软件包
# dselect install

dselect就是这么干的:)

5.2.2 最好别用apt-get升级
-------------------------
下面描述了apt-get非常广泛的用途,但建议不要用它来进行系统升级。如果你不想用
dselect对Woody进行升级,请考虑aptitudes或其它工具。

如果系统中的软件包不多,或Debian包文件没有进行重大修改,下述操作就能胜任(有时是
这样)。

# apt-get update # 升级前请先完成这步
... 升级系统包括“depends”类软件包:
# apt-get upgrade # 升级前请先完成这步
... 升级整个系统包括“depends”类软件包:
# apt-get -u dist-upgrade
... 或按当前dselect的设置进行升级(new, better):
# apt-get -u dselect-upgrade # 使用dselect进行后期处理

使用apt-get方式升级将无法对recommends和suggests类软件包进行操控。参阅〖2.2.8 软
件包关联性〗。


5.3 配置Woody
=============
对于新装的Woody系统,请按上述方法编辑/etc/apt/sources.list,/etc/apt/apt.conf和
/etc/apt/preferences文件。

Potato中的APT不包含apt_preferences(5)所描述功能。


5.4 优化sources.list
====================
下述命令可自动创建sources.list文件,所耗时间取决于响应时间和带宽。

# apt-get install apt-spy
# cd /etc/apt ; mv sources.list sources.list.org
# apt-spy -d testing -l sources.apt

netselect-apt与apt-spy非常相似,它用更先进的方法搜索最快的镜像源(比较ping时间)
,创建的sources.list也更完整。手工为sources.list选定镜像源可使用apt-setup,在
apt-spy升级之前它是最好的方法。

这些优化处理对我而言并没有明显的效果,用apt-setup选定较近的站点就足够了。

Debian参考手册 第六章 Debian软件包管理
Debian参考手册

第六章 Debian软件包管理

使用ATP下载软件包时,请确保使用了squid设置本地HTTP代理,这样可极大的改善网络升级
的性能,特别是对局域网中多台Debian机器同时升级。本章基于Woody系统撰写的,但大部
分信息均适用于Potato系统(除了apt_preferences(5)和/etc/preferences的相关主题)。



6.1 概述
========
如果你没精力阅读所有的开发文档,那么先看看本章的内容,开始体验Debian
testing/unstable的威力吧:-)

6.1.1 主要工具
--------------
dselect — 使用菜单界面的软件包管理工具(最上层的包管理工具)
dpkg — 安装软件包(管理软件包中的文件)
apt-get — 安装软件包(管理软件包,CLI APT)
tasksel — 安装任务套件(管理面向某方面任务的一套软件包)
aptitude — 安装软件包(管理软件包和任务套件,ncurses APT)
deity — 另一种ncurses APT
synaptic, gsynaptic — 另一种GUI APT

它们不是同级的工具。dselect运行于APT(命令行命令是apt-get)和dpkg之上。

APT使用/var/lib/apt/lists/*来跟踪可用的软件包,而dpkg使用的是
/var/lib/dpkg/available。如果直接用apt-get或同类工具如aptitude等来安装软件包,千
万别忘了更新/var/lib/dpkg/available文件,可以使用dselect的[U]pdate选项或在运行
dselect select、tasksel或dpkg -l前执行shell命令行“dselect update”。

它们处理关联软件包的方式也不同,apt-get会自动搜索下载depends类软件包,但不会理睬
recommends和suggests类软件包,dselect在软件包选择方面提供了更多细操作(
fine-grained control),默认状态它会搜索下载depends和recommends类软件包。参阅〖
2.2.8 软件包关联性〗。

6.1.2 方便的工具
----------------
apt-cache - 在本地缓冲区检查包文件
dpkg-reconfigure - 重新配置已安装的软件包(如果它是使用debconf进行配置的)
dpkg-source - 管理源码包
dpkg-buildpackage - 自动生成包文件
...


6.2 Debian生存工具
==================
掌握了这些知识,就能让你的系统“青春永驻”了:-)

亦可参阅〖3. Debian系统安装提示〗,〖5. 发布版升级〗和〖11.2 应急的编辑器〗。

6.2.1 使用tasksel安装任务
-------------------------
tasksel是Debian的任务安装器,系统安装过程中它为用户提供了一种简易软件包选择方式


如果你希望完装的某项常规功能包含了许多软件包,最好的办法就是使用它来安装。运行如
下命令:

# dselect update
# tasksel

6.2.2 使用APT安装系统
---------------------
对于新版的apt-get(> Woody),编辑/etc/apt/sources.list文件,添加unstable和
testing镜像源,就可以从不同镜像源有选择地安装软件包。例如在testing发行版中指定某
些包升级到unstable,某些包降级到stable。

对testing发行版进行有选择性的升级,可以设置/etc/apt/preferences如下:

Package: *
Pin: release a=stable
Pin-Priority: 500

Package: *
Pin: release a=testing
Pin-Priority: 600

Package: *
Pin: release a=unstable
Pin-Priority: 50

下面的方式可获得同样的效果

# echo 'APT::Default-Release "testing";' >> /etc/apt/apt.conf

假设当前系统环境为testing发行版:

·apt-get upgrade

跟踪升级系统安装的所有属于testing发行版的软件包。

·apt-get install package

从testing发行版中安装软件包,其关联包亦使用testing发行版中的版本。

·apt-get install package/unstable

从unstable发行版中安装软件包时,其关联包使用testing发行版中的版本。

·apt-get install -t unstable package

从unstable发行版中安装软件包时,其关联包亦使用unstable发行版中的版本。

如果跟踪的是stable发行版,可在上例的/etc/apt/preferences中将testing的
Pin-Priority下调到60,也可使用命令:

# echo 'APT::Default-Release "stable";' >> /etc/apt/apt.conf

其它可使用的命令:

# apt-cache policy libc6 libc6-dev locales # check status
# apt-get install libc6=2.2.4-1 libc6-dev=2.2.4-1 locales=2.2.4-1
# apt-get -u install interesting-new-package remove-package-
# apt-get remove useless-old-package
# apt-get remove --purge really-useless-old-package

将所有的软件包降级到stable,可编辑/etc/apt/preferences:

Package: *
Pin: release a=stable
Pin-Priority: 1001

然后运行“apt-get upgrade”,由于Pin-priority > 1000,系统会被强制降级。注意,可
能会出现少量关联性问题。

6.2.3 使用APT升级系统
---------------------
使用APT进行系统升级:

# apt-get update
... 接着下列任何一条命令:
# apt-get -u upgrade # 下载并升级所有的关联包
# apt-get -u dist-upgrade # 下载并升级所有的关联包和新增的关联包
# apt-get -u dselect-upgrade # 按dselect中的选择进行升级

下面的设置将-u选项设定为默认行为:

$ cat >> /etc/apt/apt.conf << .
// 总是显示软件包升级(-u)
APT::Get::Show-Upgraded "true";
.

使用-s选项可进行模拟升级(实际上并没有升级)。

dselect提供了一个菜单式的APT前端。deity和aptitude是dselect替换方案。

6.2.4 检测程序错误寻求帮助
--------------------------
如你使用某个软件包出现问题,在寻求帮助或发送错误报告之前请确认查看过下列站点(
lynx、links和w3m同样好用):

$ lynx http://bugs.debian.org/
$ lynx http://bugs.debian.org/package-name # 如果你知道软件包名称
$ lynx http://bugs.debian.org/bugnumber # 如果你知道错误序号

在Google(www.google.com)中使用关键字“site:debian.org”搜索。

如有疑问,可阅读帮助文件。设置CDPATH如下:

export CDPATH=.:/usr/local:/usr/share/doc

然后输入

$ cd packagename
$ mc

更多技术支持资源列在〖15. Debian技术支持〗。

6.2.5 APT升级错误及解决方法
---------------------------
从unstable/testing进行升级时可能出现软件包关联问题。多数情况下,是因为升级的软件
包所需的新增的关联包没有安装。可使用如下方法解决:

# apt-get dist-upgrade

如果这招无效,可以重复下面的方法至到问题解决:

# apt-get upgrade -f # continue upgrade even after error
... 或
# apt-get dist-upgrade -f # continue dist-upgrade even after error

一些的确存在问题的升级脚本会引起持续出错。最好的解决方法是检查该软件包的安装脚本
/var/lib/dpkg/info/packagename.{post-,pre-}{install,removal}然后运行:

# dpkg --configure -a # 配置所有未完成安装的软件包

如果脚本报告缺少配置文件,查看一下/etc中相关的配置文件。如果配置文件有.new扩展名
(或其它类似的扩展名),去掉(mv)它的扩展名。

从unstable/testing进行升级时可能出现软件包关联问题。可用这个方法智取:

# apt-get install -f package # 重载坏关联

还可以用equivs包来解决此类问题。
参阅/usr/share/doc/equivs/README.Debian和〖6.4.2 equivs软件包〗。

6.2.6 使用dpkg救助
------------------
如果系统的dselect(APT)受损无法完成安装,可使用dpkg来恢复:

# cd /var/cache/apt/archives
# dpkg -i libc6* libdb2* perl*
# dpkg -i apt* dpkg* debconf*
# dpkg -i * # 直至不再出错

如果软件包丢失,用下述方法从镜像源下载:

# mc # use "FTP link" pointing to Debian FTP server

现在,在HTTP/FTP服务器上,软件包的真正位置不再是传统的/dist目录而是新的/pool目录
。(参阅〖2.1.10 pool目录〗)

然后开始安装:

# dpkg -i /var/cache/apt/archives/packagefile.deb

对于坏关联,可这样解决:

# dpkg --ignore-depends=package1,... -i packagefile.deb
# dpkg --force-depends -i packagefile.deb
# dpkg --force-depends --purge package
# dpkg --force-confmiss -i packagefile.deb # 安装丢失的conffile

6.2.7 /var被删除后如何恢复系统
------------------------------
如果/var目录的所有文件都被删了,只要你做了/var/lib/dpkg/status的备份,就可用下面
的方法恢复:

# cd /
# install -d /var/cache/apt/archives
# install -d /var/cache/apt/archives/partial
# install -d /var/lib/dpkg/
# cp status-old /var/lib/dpkg/status
# apt-cache gencaches

可以在/var/lib/dpkg/status-old或/var/backups/dpkg.status.*中查找旧的
/var/lib/dpkg/status文件。

将/var/backups/放在其它的分区是个好习惯,因为该目录包含了许多非常重要的系统数据


6.2.8 为无法启动的系统安装软件包
--------------------------------
使用Debian急救软盘/CD或从多启动Linux系统其它分区启动,将无法启动的系统挂载到
/target并使用dpkg的chroot安装模式进行安装。

# dpkg --root /target -i packagefile.deb

接下来就可以着手配置并解决问题。

如是只是由于lilo损坏而造系统无法启动,可使用标准Debian急救盘启动。假设你的root分
区位于/dev/hda12且想使用runlevel 3,在启动提示符输入:

boot: rescue root=/dev/hda12 3

这样,你就可以使用软盘中内核启动系统,新系统的功能基本齐全。(可能丢失某些内核特
性或模块)

6.2.9 如果dpkg命令出错该怎么办
------------------------------
如果dpkg损坏就不能安装任何.deb文件。下面的操作可帮助你修复这种状况。(在第一行,
你可将“links”替换成你喜欢的浏览器。)

$ links http://http.us.debian.org/debian/pool/main/d/dpkg/
... 下载完好的dpkg_version_arch.deb
$ ar x dpkg_version_arch.deb
$ su
password: *****
# mv data.tar.gz /data.tar.gz
# cd /
# tar xzfv data.tar.gz

对i386,亦可用http://packages.debian.org/dpkg作为URL。


6.3 Debian必杀技
================
有了这些命令的启迪,你将会从无休止的升级冲突的地狱中解放出来,达到Debian天堂。
:-)

6.3.1 文件信息
--------------
查找特定文件所属的软件包:

$ dpkg {-S|--search} pattern # search for pattern in installed packages
$ zgrep -e pattern /local/copy/of/debian/woody/Contents-i386.gz
# find filename-pattern of files in the debian archive

或使用专门的软件包命令:

# apt-get install dlocate
# conflicts with slocate (secure version of locate)
$ dlocate filename # fast alternative to dpkg -L and dpkg -S
...
# apt-get install auto-apt # on-demand package installation tool
# auto-apt update # create db file for auto-apt
$ auto-apt search pattern
# search for pattern in all packages, installed or not

6.3.2 软件包信息
----------------
搜索并显示包文件的信息。编辑/etc/apt/sources.list,让APT指向正确的包文件。如果想
了解testing/unstable中的相应软件包与当前系统安装的软件包有何差别,使用apt-cache
policy更好。

# apt-get check # 更新缓冲区并检查损坏的软件包
$ apt-cache search pattern # 按文本描述搜索软件包
$ apt-cache policy package # 软件包的priority/dists信息
$ apt-cache show -a package # 显示所有dists中软件包描述信息
$ apt-cache showsrc package # 显示相应源码包的信息
$ apt-cache showpkg package # 软件包调试信息
# dpkg --audit|-C # 搜索未完成安装的软件包
$ dpkg {-s|--status} package ... # 已安装软件包描述
$ dpkg -l package ... # 已安装软件包的状态(每个占一行)
$ dpkg -L package ... # 列出软件包安装的文件的名称

Woody发布版没有为apt-cache showsrc建档,但该命令可用:)

你也这可这样查看软件包信息(我用mc浏览):

/var/lib/apt/lists/*
/var/lib/dpkg/available

比较下面的文件可以确切了解最近的安装过程对系统造成了那些改变。

/var/lib/dpkg/status
/var/backups/dpkg.status*

6.3.3 使用APT进行全自动系统安装
-------------------------------
进行全自动安装,要在/etc/apt/apt.conf中加上一行:

Dpkg::Options {"--force-confold";}

另一种等阶的方法是运行apt-get -q -y packagename。这种方法可能产生严重的负作用,
所以使用起来要小心。参阅apt.conf(5)和dpkg(1)。

安装完毕以后,可以用〖6.3.4 配置已安装软件包〗中的方法配置特定的软件包。

6.3.4 重新配置已安装软件包
--------------------------
使用下列方法重新配置已安装软件包。

# dpkg-reconfigure --priority=medium package [...]
# dpkg-reconfigure --all # 重新配置所有的软件包
# dpkg-reconfigure locales # 生成别的locales
# dpkg-reconfigure --p=low xserver-xfree86 # 重新配置X服务器

如果你想永久改变debconf对话框模式,可这么做。

某些程序用于生成特殊的配置脚本。

apt-setup - 创建/etc/sources.list
install-mbr - 安装主引导(Master Boot Record)管理器
tzconfig - 设定本地时间
gpmconfig - 设置gpm鼠标daemon
sambaconfig - 在Potato中配置Samba(Woody使用debconf来配置)
eximconfig - 配置Exim (MTA)
texconfig - 配置teTeX
apacheconfig - 配置Apache (httpd)
cvsconfig - 配置CVS
sndconfig - 配置声音系统
...
update-alternatives - 设定默认启动命令,例如设定vi启动vim
update-rc.d - System-V init脚本管理工具
update-menus - Debian菜单系统
...

6.3.5 删除软件包
----------------
删除软件包但保留其配置文件:

# apt-get remove package ...
# dpkg --remove package ...

删除软件包并删除配置文件:

# apt-get remove --purge package ...
# dpkg --purge package ...

6.3.6 阻止旧软件包升级
----------------------
举个例子,要阻止libc6和libc6-dev通过dselect或使用apt-get -u upgrade package命令
升级,可执行:

# echo -e "libc6 hold\nlibc6-dev hold" | dpkg --set-selections

这种方法不影响apt-get -u install package命令操作。要阻止apt-get -u upgrade
package或apt-get -u dist-upgrade命令对软件包执行的强制自动降级行为,可在
/etc/apt/preferences中加上:

Package: libc6
Pin: release a=stable
Pin-Priority: 2000

这里“Package:”后不能使用通配符如“libc6*”,如果要保持所有与glibc源码包相关的
二进制包的版本同步,可以明确的列出它们。

该命令可以显示处于“阻止”状态的软件包:

dpkg --get-selections "*"|grep -e "hold$"

6.3.7 stable/testing/unstable混合系统
-------------------------------------
apt-show-versions可以列出发行版中可用软件包的版本。

$ apt-show-versions | fgrep /testing | wc
... 你有多少testing软件包
$ apt-show-versions -u
... 列出可升级的软件包
$ apt-get install `apt-show-versions -u -b | fgrep /unstable`
... 将所有unstable软件包升级到最新版本

6.3.8 dselect——全面配置
-------------------------
在/etc/dpkg/dselect.cfg中加上一行包含“expert”选项以减少干扰。

启动程序,dselect会自动选上所有“Required”、“Important”和“Standard”类软件包
,在Potato系统中,某些大型应用程序如TeX和Emacs处于这些分类中,在初次安装系统时最
好手工取消对它们的选择(输入“_”)。在Woody中,这些大型应用程序被移入“
Optional”类软件包。

dselect的用户界面有点怪。有4个相似命令(注意是大写字母):

Key-stroke Action
Q 退出。确认当前的选择然后退出。
(override dependencies)
R 恢复!我放弃我做出的选择
D 不管它!我不管dselect有什么建议,照我说的做!
U 照系统的建议做

使用D和Q,你要自负风险,所以使用这些命令要小心。对于速度慢的机器,请在其它速度快
的机器上运行dselect选好软件包,然后用apt-get install安装它们。apt-get
dselect-upgrade会完全按dselect的选择行事。

6.3.9 删除缓存包文件
--------------------
使用APT安装软件包会在/var/cache/apt/archives目录留下缓存文件,要清除这些文件可使
用:

# apt-get autoclean # removes only useless package files
# apt-get clean # removes all cached package files

6.3.10 记录/拷贝系统配置
------------------------
对软件包选择情况进行本地备份:

$ dpkg --get-selections "*" >myselections # or use \*

“*”使myselections包含那些被指定“完全删除(purge)”的文件。

你可将这个文件发送到另一台电脑并在那儿按文件中的选择进行软件包安装。

# dselect update
# dpkg --set-selections <myselections
# apt-get -u dselect-upgrade # or dselect install

6.3.11 向stable系统引入软件包
-----------------------------
对stable系统进行部分升级,在软件运行环境中重新编译源码的确是个诱人的想法,这样可
以避免由于关联关系不得不对大量软件包升级。首先,加入下列镜像源入口:

deb-src http://http.us.debian.org/debian testing \
main contrib non-free
deb-src http://non-us.debian.org/debian-non-US testing/non-US \
main contrib non-free
deb-src http://http.us.debian.org/debian unstable \
main contrib non-free
deb-src http://non-us.debian.org/debian-non-US unstable/non-US \
main contrib non-free

由于屏幕输出的限制,上述每条命令均分成了2行,实际上在sources.list中它们均为单行


然后下载源码并在本地生成软件包:

$ apt-get source package/unstable
$ dpkg-source -x package.dsc
$ cd package-version
... 查找需要的软件包(编译所需的关联包列在.dsc文件中)并安装它们,
你还需要“fakerroot”软件包。

$ dpkg-buildpackage -rfakeroot

...or (no sig)
$ dpkg-buildpackage -rfakeroot -us -uc # use "debsign" later if needed

...Then to install
$ su -c "dpkg -i packagefile.deb"

通常,需要安装一些带“-dev”后缀的软件包以满足关联关系。debsign在devscripts软件
包中。auto-apt可以轻松解决这些关联问题。请使用fakeroot,如是没有必要,就别使用
root帐号。

在Woody中,这些关联问题已被简化。例如,编译pine源码包:

# apt-get build-dep pine
# apt-get source -b pine

6.3.12 本地软件包文件
---------------------
为了创建与APT和dselect系统兼容的本地软件包文件,需要创建软件包(Packages),包中
文件要放在特定的目录树中。

Debian官方包文件喜欢存放于本地deb仓库,下面就来创建仓库:

# apt-get install dpkg-dev
# cd /usr/local
# install -d pool # 软件包存放的物理地址
# install -d dists/unstable/main/binary-i386
# ls -1 pool | sed 's/_.*$/ extra BOGUS/' | uniq > override
# editor override # adjust BOGUS
# dpkg-scanpackages pool override /usr/local/ \
> dists/unstable/main/binary-i386/Packages
# cat > dists/unstable/main/Release << EOF
Archive: unstable
Version: 3.0
Component: main
Origin: Local
Label: Local
Architecture: i386
EOF
# echo "deb file:/usr/local unstable main" \
>> /etc/apt/sources.list

还可以这样快速创建一个本地deb仓库:

# apt-get install dpkg-dev
# mkdir /usr/local/debian
# mv /some/where/package.deb /usr/local/debian
# dpkg-scanpackages /usr/local/debian /dev/null | \
gzip - > /usr/local/debian/Packages.gz
# echo "deb file:/usr/local/debian ./" >> /etc/apt/sources.list

在/etc/apt/sources.list中设置相应镜像源入口地址,就可以通过HTTP或FTP方式远程访问
存放在其中的包文件了。

6.3.13 转化或安装外来软件包
---------------------------
alien可将其它格式的二进制软件包如Redhat的rpm、Stampede的slp、Slackware的tgz和
Solaris的pkg等转化成Debian的deb格式软件包,如果你想在自己的系统上使用别的Linux发
行版中的软件包,可使用alien将它转化成系统首选的软件包格式后安装。alien还支持LSB
的软件包。

6.3.14 校验已安装软件包
-----------------------
debsums可以校验已安装软件包的MD5编码,对某些软件包没有可用的MD5编码,系统管理员
可使用一个临时的解决办法:

# cat >>/etc/apt/apt.conf.d/90debsums
DPkg::Post-Install-Pkgs {"xargs /usr/bin/debsums -sg";};
^D

per Joerg Wendland <joergland@debian.org> (untested).


6.4 其它Debian特性
==================

6.4.1 dpkg-divert命令
---------------------
使用文件转移(diversions)的方法可以强令dpkg将文件安装到转移目录而非默认目录。对
于某个引起冲突的文件,可以在Debian软件包脚本中使用diversions将它安装到别的目录。
系统管理员还可以使用diversion来重载软件包配置文件,或者用来保留某些旧配置文件(
这些文件没有在conffiles中登记)当安装新版软件时这些文件会被覆盖。(参阅〖2.2.4
保存本地设置〗)

# dpkg-divert [--add] filename # add "diversion"
# dpkg-divert --remove filename # remove "diversion"

记住,不到万不得已不要使用dpkg-divert。

6.4.2 equivs软件包
------------------
如果你从源码编译程序,最好将它做成本地Debian化软件包(*.deb)。最新的方法是使用
equivs。

Package: equivs
Priority: extra
Section: admin
Description: Circumventing Debian package dependencies
This is a dummy package which can be used to create Debian
packages, which only contain dependency information.

6.4.3 自选命令
--------------
想用vi命令启动vim,可使用update-alternatives来定义:

# update-alternatives --display vi
...
# update-alternatives --config vi
Selection Command
-----------------------------------------------
1 /usr/bin/elvis-tiny
2 /usr/bin/vim
*+ 3 /usr/bin/nvi

Enter to keep the default[*], or type selection number: 2

Debian自选命令设定系统中的这些项目,都是/etc/alternatives下的链接文件。

想设置你喜爱的X window环境,执行update-alternatives来指定
/usr/bin/x-session-manager和/usr/bin/x-window-manager。详情参阅〖9.4.5.1 自定义
X会话〗。

/bin/sh是指向/bin/bash或/bin/dash的链接。想兼容旧的Bash脚本,使用/bin/bash比较保
险,但更好还是使用/bin/dash,因为它更符合POSIX标准。升级到2.4版Linux内核,系统一
般将它设置为/bin/dash。

6.4.4 System-V init文件和运行级别
---------------------------------
可在/etc/inittab中设定系统启动的默认运行级别(runlevel)。

不同于其它的发行版,Debian将运行级别的管理职责完全赋予系统管理员。Debian更倾向于
使用update-rc.d脚本来管理它那System-V风格的init。

下面的命令表示,按优先级数字20(normal)所指定的次序,分别在runlevel 1、2、3中启
动/etc/init.d/name,在runlevel 4、5中停止它们:

# update-rc.d name start 20 1 2 3 . stop 20 4 5 .

要删除init.d脚本中存在的符号链接可执行:

# update-rc.d -f name remove

要编辑运行级别,我通常在mc中用Alt-Enter拷贝链接名,然后在shell提示符下使用mv命令
手工编辑,例如:

# mv S99xdm K99xdm # 禁用xdm (X display manager)

有时为了进行临时调试,我甚至在init.d脚本的开头加入exit 0来禁用一个daemon,反正它
们都在conffiles登记过。

6.4.5 停止daemon服务
--------------------
Debian发行版非常注重系统安全,并期望系统管理员能担此重任。它将系统的易用性放在了
第二位,许多daemon服务都定位在最高安全级别,因而,默认安装状态下系统只启动最少的
(甚至没有)可用的服务。

如果拿不定把握(有关Exim、DHCP...),可执行ps aux或检查/etc/init.d/*和
/etc/inetd.conf下的内容,还可以使用〖9.2.1 使用PAM和系统登录〗中提到的方法检查
/etc/hosts.deny。pidof命令也很有用(参阅pidof(8))

在新版的Debian中,默认状态下X11不允许TCP/IP(远程)连接。参阅〖9.4.6 X的TCP/IP连
接〗,使用SSH进行X传送也是禁用的,参阅〖9.4.8 X远程连接:ssh〗。


Debian参考手册 第七章 Debian下的Linux内核
Debian参考手册

~~~~~~~~~~~~~
第七章 Debian下的Linux内核
~~~~~~~~~~~~~

Debian运用自己的方式来编译内核及相关模块。参阅〖2.7 Debian和系统内核〗。


7.1 内核编译
============
Debian unstable发行版中的gcc、binutils和modutils可用来编译最新的Linux内核。这方
面的官方信息,参阅/usr/share/doc/kerenl-package/README.gz文件的后半部分。

内核编译是个很困难的议题,由于目标在不断的变化,即使是最受人尊敬的开发者也会有不
同的见解:

Manoj Srivastava写到:
--initrd需要Debian专用cramfs补丁。
Herbert Xu写到:
不,它不需要,想使用除CRAMFS以外的文件系统只需在/etc/mkinitrd/mkinitrd.conf中设
置MKIMAGE。

按照Manoj和Kent撰写的/usr/share/doc/kernel-package/README.gz的指导小心行事,如果
要编译最新版本的内核请确认安装了最新unstable版kernel-package软件包。

对于单机内核编译,initrd不是必须的。我用它是希望我新编译的内核与相应的内核镜像一
模一样。如果使用initrd,请先阅读一下mkinitrd(8)和mkinitrd.conf(5)。亦可参阅
http://bugs.debian.org/149236。

7.1.1 Debian标准方式
--------------------
关心一下有关kernel-package、gcc、binutils和modutils的错误报告。如果有必要应使用
最的版本。

在Debian系统中用源码编译自定义内核要特别小心。用make-kpkg的--append_to_version选
项来创建多重内核镜像比较安全。

# apt-get install debhelper modutils kernel-package libncurses5-dev
# apt-get install kernel-source-2.4.18 # 使用最新版本
# apt-get install fakeroot
# vi /etc/kernel-pkg.conf # 输入我的名字和email
$ cd /usr/src # 创建目录
$ tar --bzip2 -xvf kernel-source-2.4.18.tar.bz2
$ cd kernel-source-2.4.18 # 如果这是你的内核源码
$ cp /boot/config-2.4.18-386 .config # 将当前配置设定为默认配置
$ make menuconfig # 按自己的喜好来定制
$ make-kpkg clean # 必须执行这步(per: man make-kpkg)
$ fakeroot make-kpkg --append_to_version -486 --initrd \
--revision=rev.01 kernel_image \
modules_image # modules_image可以是pcmcia-cs*等。
$ cd ..
# dpkg -i kernel-image*.deb pcmcia-cs*.deb # 安装

make-kpkg kernel_image实际上执行了make oldconfig和make dep。如果没使用initrd就不
要使用--initrd选项。

如果想加载pcmcia-cs模块或没有pcmcia,应该在make menuconfig后选“General setup
-->”进入“PCMCIA/CardBus support -->”,配置“<>PCMCIA/CardBus support”选项(例
如,取消复选项)。

对于SMP机器,参照kernel-pkg.conf(5)的说明设置CONCURRENCY_LEVEL。

7.1.2 经典方式
--------------
从下列地址获得干净的源代码:

·Linux: http://www.kernel.org/
·pcmcia-cs: http://pcmcia-cs.sourceforge.net/

或使用Debian所附的等价的源代码:

# cd /usr/src
# tar xfvz linux-whatever.tar.gz
# rm -rf linux
# ln -s linux-whatever linux
# tar xfvz pcmcia-cs-whatever.tar.gz
# ln -s pcmcia-cs-whatever pcmcia
# cd linux
# make menuconfig
... 配置内核选项 ...
# make dep
# make bzImage
... 编辑lilo/grub ...
... 移动/usr/src/linux/arch/i386/boot/bzImage到boot ...
... /sbin/lilo or whatever you do for grub
# make modules; make modules_install
# cd ../pcmcia
# make config
# make all
# make install
... 添加需要的模块名称到/etc/modules
# shutdown -r now
... 启动到新内核 ...

7.1.3 内核头文件
----------------
绝大多数“普通”程序不需要内核头文件,事实上如果直接引用它们会出错。这些程序应该
引用那些编译glibc所用的头文件,它们位于Debian系统的/usr/include/linux和
/usr/include/asm目录下。

故不要在/usr/src/linux目录中创建指向/usr/include/linux和/usr/include/asm的链接,
一些过时的文档曾建议创建它们。

如果某些内核类应用程序需要特定的内核头文件,可修改Makefile(s),使其包含指向“特
定内核头文件目录/include/linux”和“特定内核头文件目录/include/asm”的路径。


7.2 模块化的2.4内核
===================
kerntl-mage-2.4.NN提供了新版的Debian 2.4内核,该版内核模块化程度极高。你必须激活
相关的模块才能获得想要的内核功能。

尽管在接下来的部分中提供了许多通过配置/etc/modules来解决问题的样例,但据说,在
/etc/modutils/中用一个文件来提供所有的设备别名,就可解决这类有关模块问题,当前的
内核有足够多的别名供你使用。

参阅Linux内核源码目录中的Documentation/*.txt获取详细信息。

7.2.1 PCMCIA
------------
要使用PCMCIA,需在/etc/modules中包含下列内容:

# ISA PnP driver
isa-pnp
# Low level PCMCIA driver
# yenta_socket # 我的机器上似乎不需要

剩下的工作就由PCMCIA脚本(来自pcmcia-cs软件包)、depmod和kmod负责了。我需要
isa-pnp因为我的笔记本电脑使用的是旧ISA-PCMCIA。较新的笔记本电脑使用
CardBus/PCMCIA,不再需要它。

慷慨的Miquel van Smoorenburg(miquels@cistron.nl)说:

“我将笔记中所有有关pcmcia的东西包括cardmgr等一鼓脑全删了,只装了支持cardbus的
2.4版内核和woody中新的hotplug软件包。

只要你使用的是32-bit卡,你就不需要pcmcia软件包;2.4内置了cardservices。标准的
tulip驱动亦可在dlink卡上正常工作。

——Mike。”

7.2.2 SCSI
----------
[没有测试过]想要SCSI工作,请在/etc/modules中包含如下内容:

# SCSI core
scsi_mod
# SCSI generic driver
sg
# SCSI disk
sd_mod
# All other needed HW modules
...

可用depmod来操作上述某些模块。

7.2.3 网络功能
--------------
/etc/modules中需要包含如下内容以扩充网络功能:

# net/ipv-4
ip_gre
ipip

# net/ipv-4/netfilter
# iptable (in order)
ip_tables
ip_conntrack
ip_conntrack_ftp
iptable_nat
iptable_filter
iptable_mangle
#
ip_nat_ftp
ip_queue
#
ipt_LOG
ipt_MARK
ipt_MASQUERADE
ipt_MIRROR
ipt_REDIRECT
ipt_REJECT
ipt_TCPMSS
ipt_TOS
ipt_limit
ipt_mac
ipt_mark
ipt_multiport
ipt_owner
ipt_state
ipt_tcpmss
ipt_tos
ipt_unclean
#
#ipchains
#ipfwadm

上述内容并没有进行优化。可用depmod来操作上述某些模块。

7.2.4 EXT3文件系统(>2.4.17)
----------------------------
对预编译内核镜像包(> 2.4.17)执行下述操作可激活EXT3日志文件系统。

# cd /etc; mv fstab fstab.old
# sed 's/ext2/ext3,ext2/g' <fstab.old >fstab
# vi /etc/fstab
... 将root文件系统类型设置成“auto”而非“ext3,ext2”
# cd /etc/mkinitrd
# echo jbd >>modules
# echo ext3 >>modules
# echo ext2 >>modules
# cd /
# apt-get update; apt-get install kernel-image-2.4.17-686-smp
... 安装最新内核并配置boot(lilo从这儿运行)
# tune2fs -j -i 0 /dev/hda1
# tune2fs -j -i 0 /dev/hda2
... 将所有EXT2 FS转化成EXT3
# shutdown -r now

现在就可使用EXT3日志文件系统了。在fstab的“type”中使用ex3、ext2的是为了保险起见
,如果内核不支持非root分区采用EXT3还可退回到EXT2。

如果你已安装了2.4版内核并且不想再次重装,执行上述步骤中apt-get命令之前的步骤就行
了。接着:

# mkinitrd -o /boot/initrd.img-2.4.17-686-smp /lib/modules/2.4.17-686-smp
# lilo
# tune2fs -j -i 0 /dev/hda1
# tune2fs -j -i 0 /dev/hda2
... 将所有EXT2 FS转化成EXT3
# shutdown -r now

现在EXT3日志文件系统已生效。

如果没有设置/etc/mkinitrd/modules就mkinitrd运行,最好在系统启动时加载一些模块:

... 当initrd提示获取shell时(5秒钟),输入RETURN
# insmod jbd
# insmod ext3 # modprobe ext3会负责一切
# insmod ext2
# ^D
... 继续启动

在系统启动屏幕(dmesg)中,会出现“cramfs: wrong magic”,别担心这没有什么害处。
在Sarge(2002/10)中已解决了这个问题。参阅http://bugs.debian.org/135537和
http://www.symonds.net/~rajesh/howto/ext3/index.html,或者是
/usr/share/doc/HOWTO/en-txt/mini/extra/ext3-mini-HOWTO.gz获得有关详情。

激活EXT3功能会造成某些系统发生严重内核死锁的情况,不过我没遇到过这种问题(我的内
核是2.4.17)。

7.2.5 对Realtek RTL-8139的支持
------------------------------
不知何故,RTL-8139支持模块已不再叫rtl8139,现在它叫8139too。从2.2版内核升级到
2.4版时,请记得在/etc/modules中做相应修改。

7.2.6 并行端口支持
------------------
对于kernel-image-2.4.*,并行端口支持已被模块化,要激活可执行:

# modprobe lp
# echo lp >> /etc/modules

参阅Linux内核源码目录中的Documentation/parport.txt。

7.2.7 打开了太多文件
--------------------
Linux内核有时会报告“Too many open files”,起因是file-max默认值太小。要解决这个
问题,可以root身份执行下列命令(或将它们加入/etc/rcS.d/*下的init脚本。)

# echo "65536" >/proc/sys/fs/file-max # 适用于2.2和2.4版内核
# echo "131072" >/proc/sys/fs/inode-max # 仅适用于2.2版内核

其它内核参数操作实例参阅/etc/init.d/networking和〖3.7.5 无法访问某此站点的怪问题
〗。

Debian参考手册 第八章 Debian技巧
Debian参考手册

~~~~~~~~~
第八章 Debian技巧
~~~~~~~~~

8.1 启动系统
============
参阅LDP BootPrompt-HOWTO(http://www.tldp.org/HOWTO/BootPrompt-HOWTO.html)获得
有关系统提示的详细信息。

8.1.1“我忘了root密码!”(1)
----------------------------
只要能访问控制台键盘,不需要root密码就可以启动系统登录到root帐号。(假设BIOS或
lilo之类的启动引导器在启动时不需要密码。)

整个过程不需要另外的启动盘或对BIOS设置进行修改。在此,“Linux”仅是一个标签,它
代表启动Debian默认安装的Linux内核。

在lilo启动屏幕中,一但出现boot:(对某些系统而言,必须按下shift键以阻止自动启动)
,就输入:

boot: Linux init=/bin/sh

它会指示系统启动内核后运行/bin/sh而不是init。现在你已获得root特权和root shell。
由于当前/是以只读方式挂载,而其它的硬盘分区均未挂载,故你必须完成下列步骤才能获
得一个有适当功能的系统。

init-2.03# mount -n -o remount,rw /
init-2.03# mount -avt nonfs,noproc,nosmbfs
init-2.03# cd /etc
init-2.03# vi passwd
init-2.03# vi shadow

(如果在/etc/passwd文件中所有用户的第二个域的数据为“x”,就表明系统使用了影子密
码(shadow passwords),必须编辑/etc/shadow。)要删除root密码,请编辑密码文件中
第二个数据域,将它设置为空白。重启系统不用密码就能登录到root。当系统启动进入
runlevel 1时,Debian(至少是Potato以后的版本)需要密码,一些较老的版本则不需要。


在/bin下装一个小编辑器是个好习惯,因为有时/usr是无法访问的(参阅〖11.2 应急的编
辑器〗)。

如果安装sash软件包,当系统无法启动时,还可执行:

boot: Linux init=/bin/sash

当/bin/sh不可用时,sash可作为sh的交互式替代品,它是静态链接,内建了许多标准工具
(在系统提示符下输入“help”可获得参考列表)。

8.1.2“我忘了root密码!”(2)
----------------------------
从急救盘启动系统。假设/dev/hda3是原始root分区,可用下面的方法编辑密码文件,与上
述方法一样容易。

# mkdir fixit
# mount /dev/hda3 fixit
# cd fixit/etc
# vi shadow
# vi passwd

与上面的方法相比,该方法的好处在于不需要知道lilo密码(如果有的话)。但如果系统没
有预先设置为从软盘或CD启动,就需要访问BIOS的权限。

8.1.3 无法启动系统
------------------
没在安装过程中制作启动盘?没关系。如果lilo损坏了,从Debian安装套件中拿出启动盘,
用它来启动系统。假设你的root分区在/dev/hda12,你想进入runlevel 3,在启动提示符后
输入:

boot: rescue root=/dev/hda12 3

接下来,系统使用软盘上的内核启动,你可登录到一个几乎拥有全部功能的系统了。(可能
有少量特性或模块不可用。)

如果想做张自定义启动盘,参阅急救盘中的readme.txt文档。

8.1.4 “我不想直接启动到X!”
-----------------------------
玩unstable/sid很有趣,但在启动进程中执行不稳定的xdm、gdm、kdm和wdm会让你焦头烂额


首先,在启动提示符后输入如下指令获得root shell:

boot: Linux vga=normal s

其中,Linux代表你要启动的内核镜像,“vga=normal”告诉lilo在普通VGA屏幕下运行,“
s”(或“S”)是传给init的参数,告诉它进入单用户模式。在提示符后输入root密码。

有多种方法禁用X启动deaemons:

·run update-rc.d ?dm stop 99 1 2 3 4 5 6

·insert "exit 0" at the start of all /etc/init.d/?dm files.

·rename all /etc/rc2.d/S99?dm files to /etc/rc2.d/K99?dm.

·remove all /etc/rc2.d/S99?dm files.

·run :>/etc/X11/default-display-manager

其中,rc2.d必须与/etc/inittab中指定的runlevel一致。?dm表示所有的xdm、gdm、kdm和
wdm。

在Debian下只有第一种方法“最正确”。最后一种方法比较简单但只适用于Debian,而且还
需要使用dpkg-reconfigure重新设置一次。其它方法都是通用的中止daemons的方法。

你仍可在任何控制台shell中输入startx启动X。

8.1.5 其它用于启动提示符的技巧
------------------------------
使用lilo启动提示符,可指定系统启动到特定的runlevel和配置。详情参阅
BootPrompt-HOWTO(LDP http://www.tldp.org/HOWTO/BootPrompt-HOWTO.html)。

如果希望系统启动到runlevel 4,可以lilo启动提示符后输入:

boot: Linux 4

如果希望系统启动到正常功能的单用户模式,而且你知道root密码,可在lilo启动提示符后
输入下列任一参数。

boot: Linux S
boot: Linux 1
boot: Linux -s

如果希望系统以少于实际内存数的内存启动(也就是说机器有64MB内存,只分配48MB给系统
使用),在lilo启动提示符后输入:

boot: Linux mem=48M

注意,不要指定大于实际内存数的内存,否则内核会崩溃。如果你有多于64MB的内存,如
128MB,应在系统启动时执行mem=128或在/etc/lilo.conf中添加类似的命令行,否则旧内核
或使用旧BIOS的主板将无法使用大于64MB的内存。

8.1.6 如何设置启动参数(GRUB)
-----------------------------
GRUB是Hurd项目开发的新型启动管理器,比Lilo更灵活,不过启动参数也与之稍有不同。

grub> find /vmlinuz
grub> root (hd0,0)
grub> kernel /vmlinuz root=/dev/hda1
grub> initrd /initrd
grub> boot

请注意Hurd中的设备名:

HURD/GRUB Linux MSDOS/Windows
(fd0) /dev/fd0 A:
(hd0,1) /dev/hda1 C: (usually)
(hd0,4) /dev/hda4 F: (usually)
(hd1,4) /dev/hdb4 ?

详情参阅/usr/share/doc/grub/README.Debian和/usr/share/doc/grub-doc/html/。


8.2 活动记录
============
8.2.1 记录shell活动
比起普通的个人电脑环境,Unix环境的系统管理包含了更多细致的任务。必须掌握所有基本
的配置方法以便进行系统故障恢复。基于X的GUI配置工具看上去又好又方便,但不适用于紧
急状况。

记录shell活动是个好习惯,特别是root用户。

Emacs:使用M-x shell在缓冲区中开始记录,使用C-x C-w将缓冲区中的记录写入文件。

Shell:使用screen命令和“^A H”,参阅〖8.6.23 用screen来定制控制台〗或脚本命令:


$ script
Script started, file is typescript
... do whatever ...
Control-D
$ col -bx <typescript >savefile
$ vi savefile

还可使用下面的方法:

$ bash -i 2>&1 | tee typescript

8.2.2 记录X活动
---------------
如果需要X应用程序的活动记录图,包括xterm屏显,可使用gimp(GUI)。它可以对每个窗
口或整个屏幕进行拍照。还可以使用xwd(xbase-clients)、import(imagemagick)或
scrot(scrot)。


8.3 拷贝及创建子目录
====================

8.3.1 拷贝整个子目录的基本命令
------------------------------
如果想重新整理文件组织结构,可使用下面的方法移动文件及文件链接:

标准方法:
# cp -a /source/directory /dest/directory # requires GNU cp
# (cd /source/directory && tar cf - . ) | \
(cd /dest/directory && tar xvfp - )
如果包含硬链接,则需要更严谨的方法:
# cd /path/to/old/directory
# find . -depth -print0 | afio -p -xv -0a /mount/point/of/new/directory
如果是远程操作:
# (cd /source/directory && tar cf - . ) | \
ssh user@host.dom (cd /dest/directory && tar xvfp - )
如果没有链接文件:
# scp -pr user1@host1.dom:/source/directory \
user2@host2.dom:/dest/directory

其中,scp <==> rcp,ssh <==> rsh。

下面的有关拷贝整个子目录的信息由Manoj Srivastava<srivasta@debian.org>发表于
debian-user@lists.debian.org。

8.3.2 cp
--------
传统上,cp并不能真正完成这个任务,因为它既没对符号链接进行区别对待,又不能保存硬
链接。另一件需要注意的事就是稀疏文件(有洞的文件)。

GNU cp克服了这缺陷,然而对于非GNU系统,cp仍存在问题。而且使用cp无法生成小巧轻便
的文档包。

% cp -a . newdir

8.3.3 tar
---------
Tar克服了cp在处理符号链接时出现的问题,然而,cpio可以处理特殊文件,传统的tar却不
行。

对于某个有多重硬链接的文件,tar的处理方法是只将其中一个链接拷贝到磁带上,所以日
后你只能找回拷贝中所保留那个的链接所指的文件;cpio会为每个链接做一个拷贝,日后你
可以找回任意一个链接所指的文件。

在Potato和Woody中,操作.bz2文件的tar命令参数有所变化,所以请在脚本中使用--bzip2
而不要简写为-I(Potato)或-j(Woody)。

8.3.4 pax
---------
全新的,符合POSIX(IEEE Std 1003.2-1992,pages 380–388 (section 4.48) and
pages 936–940 (section E.4.48))标准的,众望所归的,轻便的文档包交互工具。pax可
以读、写以及列出文档包的成员,并能拷贝文件目录层次。pax的操作独立于特定的文档包
格式,支持各种各样不同的文档包格式。

pax工具刚刚成形,还很新。

# apt-get install pax
$ pax -rw -p e . newdir

$ find . -depth | pax -rw -p e newdir

8.3.5 cpio
----------
从cpio或tar文档包提取/放入文件。该文档包可以是硬盘上的另一个文件,也可以是磁带或
管道。

$ find . -depth -print0 | cpio --null --sparse -pvd new-dir

8.3.6 afio
----------
afio更善于处理cpio格式的文档包。通常它比cpio要快,且提供了更多磁带选项,并且能更
友好的处理有讹误的输入数据。它支持交互式处理多卷文档包。用afio制作压缩文档包比压
缩tar或cpio文档包更安全。在备份处理脚本中afio是更佳的“文档处理引擎”。

$ find . -depth -print0 | afio -px -0a new-dir

对所有的磁带备份我都使用afio。


8.4 差异备份与数据同步
======================
要进行差异备份和数据同步可使用下列几种方法:

·rcs:备份并进行历史记录,只支持文本。

·rdiff-backup: 备份并进行历史记录。支持链接。

·rsync:单路同步

·unison:双路同步

·cvs:多路同步服务器备份并进行历史记录,只支持文本,技术成熟。参阅〖12.1 CVS〗


·arch:多路同步服务器备份并进行历史记录,但包括“处于工作中的目录”。

·subversion:多路同步服务器备份并进行历史记录,专用于Apache。

有关将这些方法与文档包操作结合应用的讨论参阅〖8.3 拷贝及创建子目录〗,有关自动进
行备份的讨论参阅〖8.6.22 日程安排(cron,at)〗。

我只讲解两个较容易使用的工具。

8.4.1 使用rdiff进行差异备份
---------------------------
rdiff-backup提供了简单好用的方法对任何文件包括链接进行历史差异备份。例如要对~/
to /mnt/backup目录下的所有文件做备份:

$ rdiff-backup --include ~/tmp/keep --exclude ~/tmp ~/ /mnt/backup

从该文档包中取出3天前的旧数据恢复到~/old目录:

$ rdiff-backup -r 3D /mnt/backup ~/old

参阅rdiff-backup(1)。

8.4.2 使用RCS进行定期差异备份
-----------------------------
changetrack会定期对RCS文档包中基于文本格式的配置文件的变化进行记录。参阅
changetrack(1)。

# apt-get install changetrack
# vi changetrack.conf


8.5 系统冻结恢复
================

8.5.1 中止一个进程
------------------
运行top看看什么进程的活动有异常。按“P”以cpu使用率排序,“M”以内存使用率排序,
“k”可以中止一个进程。还有一种方法,使用BSD风格的ps aux | less或System V风格的
ps -efH | less。System V风格的排列会显示父进程ID PPID,这对中止出错的(死掉的)
子进程十分有用。

知道了进程的ID,就可使用kill中止(或发信号给)某个进程,killall的作用正如其名一
样。经常使用的信号有:

1: HUP,重启daemon
15: TERM,普通中止
9: KILL,强令中止

8.5.2 ALT-SysRq
---------------
内核编译选项“Magic SysRq key”提供系统强心针。在i386机器上按下ALT-SysRq组合键后
,试试按下列各键r 0 k e i s u b,奇迹产生了:

Un'r'aw让键盘从X崩溃中重生。将控制台loglevel改为'0'以减少错误信息。sa'k'(
system attention key)中止当前虚拟控制台的所有进程。t'e'rminate中止当前终端除
init外的所有进程。k'i'll中止除init外的所有进程。

'S'ync,'u'mount和re'b'oot帮你逃离真正的险境。

本文写作之时,Debian默认安装的内核并未将该选项编译进去,需要重新编译内核激活该功
能。详情参阅/usr/share/doc/kernel-doc-version/Documentation/sysrq.txt.gz或
/usr/src/kernel-version/Documentation/sysrq.txt.gz。


8.6 记住这些可爱的小命令
========================

8.6.1 Pager
-----------
less就是pager(文件内容浏览器)。按“h”可获得帮助。它比more更有用。在shell启动
脚本中运行eval $(lesspipe)或eval $(lessfile)可让less活力四射。详情参阅
/usr/share/doc/lessf/LESSOPEN。使用-R选项可输出生癖字符and enables ANSI color
escape sequences.参阅less(1)。

对于某些编码系统(EUC)w3m可能是更好的选择。

8.6.2 释放内存
--------------
free和top能让你了解内存资源的许多有用信息。别担心“Mem:”行中“used”的大小,看
看它下面的数字(本例的数字是38792)。

$ free -k # for 256MB machine
total used free shared buffers cached
Mem: 257136 230456 26680 45736 116136 75528
-/+ buffers/cache: 38792 218344
Swap: 264996 0 264996

物理内存的准确大小可通过grep '^Memory' /var/log/dmesg得到,本例将显示“Memory:
256984k/262144k available (1652k kernel code, 412k reserved, 2944k data, 152k
init)”。

Total = 262144k = 256M (1k=1024, 1M=1024k)
Free to dmesg = 256984k = Total - kernel - reserved - data - init
Free to shell = 257136k = Total - kernel - reserved - data

约有5MB内存系统不能使用,因为内核需要它。

8.6.3 设定时间(BIOS)
---------------------
# date MMDDhhmmCCYY
# hwclock --utc
# hwclock --systohc
# hwclock --show

设定系统时间和硬件时间为MM/DD hh:mm, CCYY。显示时间为本地时间而硬件时间使用UTC。


8.6.4 设定时间(NTP)
--------------------
参考:Managing Accurate Date and Time HOWTO。(
http://www.tldp.org/HOWTO/TimePrecision-HOWTO/index.html)

8.6.4.1 拥有永久Internet连接的系统设置时间
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
设置系统时钟通过远程服务器自动对时:

# ntpdate server

如果你的系统拥有永久的Internet连接,应该将该命令加入/etc/cron.daily。

8.6.4.2 偶尔进行Internet连接的系统设置时间
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
使用chrony软件包。

8.6.5 如何禁用屏幕保护程序
--------------------------
对于Linux控制台:

# setterm -powersave off

启动kon2(kanji)控制台可执行:

# kon -SaveTime 0

运行X可执行:

# xset s off

# xset -dpms

# xscreensaver-command -prefs

参阅相关的帮助页面。

8.6.6 搜索系统管理数据库
------------------------
Glibc提供了getent(1)搜索管理数据库的各类项目。例如passwd、group、hosts、
services、protocols或networks。

getent database [key ...]

8.6.7 禁用声音(响铃)
---------------------
最直接的方法是拔掉PC喇叭;-),对于Bash shell可执行:

echo "set bell-style none">> ~/.inputrc

8.6.8 控制台上的错误信息
------------------------
不想看屏幕显示的错误信息,首选的方法是检查/etc/init.d/klogd,在该脚本中设置
KLOGD="-c 3"然后运行/etc/init.d/klogd restart。另一种方法是执行dmesg -n3。

这儿是各种错误级别的含义:

·0: KERN_EMERG, 系统不可用
·1: KERN_ALERT, 必须立即执行
·2: KERN_CRIT, 紧急状态
·3: KERN_ERR, 错误状态
·4: KERN_WARNING, 警告状态
·5: KERN_NOTICE, 正常状态且十分重要
·6: KERN_INFO, 报告
·7: KERN_DEBUG, debug-level信息

如果你很厌恶详细而无用的错误信息,可以试试这个小补丁shutup-abit-bp6(位于样例脚
本子目录)。

另一个该看看的地方是/etc/syslog.conf,检查一下是否有信息记录被发送到了控制台设备


8.6.9 正确设置控制台类型
------------------------
在类Unix系统中,访问控制台屏幕通常要调用库例程,这就为用户提供了一种独立于终端的
方式来优化字符的屏幕更新过程。参阅ncurses(3X)和terminfo(5)。

在Debian系统中,有大量预定义项目:

$ toe | less # 所有项目
$ toe /etc/terminfo/ | less # 用户可再配置的项目

你的选择可导出到环境变量TERM。

当登录到远程Debian系统时,如果xterm的terminfo项目在非Debian的xterm中失效,请将终
端类型改为支持较少特性的版本如“xterm-r6”。
参阅/usr/share/doc/libncurses5/FAQ。“dumb”是terminfo的最小公分母。

8.6.10 恢复控制台的健壮性
-------------------------
如果执行$ cat some-binary-file后屏幕一片混乱(命令的返回值与你的输入大相径庭):


$ reset

8.6.11 将DOS下的文本文件转换为Unix类型
--------------------------------------
将DOS文本文件(行尾=^M^J)转换成Unix文本文件(行尾=^J)。

# apt-get install sysutils
$ dos2unix dosfile

8.6.12 正规表达式的置换
-----------------------
将所有文件FILES...中的所有FROM_REGEX字段替换成TO_REGEX字段。

$ perl -i -p -e 's/FROM_REGEX/TO_REGEX/g;' FILES ...

-i表示“就地编辑”,-p表示“在FILES...各文件中循环”。如果置换很复杂,应使用参数
-i.bak而非-i,这有助于出错恢复;它会将每个原始文件保存为以.bak为后缀的备份文件。


8.6.13 提取源文件修改部分合并到更新包
-------------------------------------
下面的操作将根据文件位置,提取源文件的修改部分并创建统一的diff文件file.patch0或
file.patch1:

$ diff -u file.old file.new1 > file.patch0
$ diff -u old/file new1/file > file.patch1

diff文件(也称补丁文件)通常用于发送程序更新。收到的补丁文件可使用下面的方法更新
另一个文件:

$ patch -p0 file < file.patch0
$ patch -p1 file < file.patch1

如果有3个版本的源代码,使用diff3来合并效率更高:

$ diff3 -m file.mine file.old file.yours > file

8.6.14 分割大文件
-----------------
$ split -b 650m file # 将大文件分块成多个650MB的小文件
$ cat x* >largefile # 将所有小文件合并成一个大文件

8.6.15 精巧的管道命令辅助脚本
-----------------------------
下列脚本做为管道的一部分十分有用。

find /usr | egrep -v "/usr/var|/usr/tmp|/usr/local"
# find all files in /usr excluding some files
xargs -n 1 command # run command for all items from stdin
xargs -n 1 echo| # split white-space-separated items into lines
grep -e pattern| # extract lines containing pattern
cut -d: -f3 -| # extract third field separated by :
# (passwd file etc.)
col -bx | # remove backspace and expand tabs to spaces
expand -| # expand tabs
sort -u| # sort and remove duplicates
tr '\n' ' '| # concatenate lines into one line
tr '\r' ''| # remove CR
tr 'A-Z' 'a-z'| # convert uppercase to lowercase
sed 's/^/# /'| # make each line a comment
sed 's/\.ext//g'| # remove .ext
sed -n -e 2p| # print the second line
head -n 2 -| # print the first 2 lines
tail -n 2 -| # print the last 2 lines

8.6.16 从网页上获取文本或邮件列表文档
-------------------------------------
下面的操作将网页转化为文本文件。从网上拷贝配置文件时十分有用。

$ lynx -dump http://www.remote-site.com/help-info.html >textfile

links和w3m也可以这么用,只是生成的文本样式可能略有不同。

如果是邮件列表文档,可使用munpack从文本获得mime内容。

8.6.17 打印网页
---------------
下面的操作将网页内容打印成PostScript文件或发送到打印机。

$ apt-get install html2ps
$ html2ps URL | lpr

参阅〖3.6.1 lpr/lpd〗。还可使用a2ps和mpage软件包生成PostScript文件。

8.6.18 打印帮助页面
-------------------
下面的操作将帮助页面打印成PostScript文件或发送到打印机。

$ man -Tps some-man-page | lpr
$ man -Tps some-man-page | mpage -2 | lpr

8.6.19 合并两个Postscript或PDF文件
----------------------------------
可以将两个Postscript文件或PDF文件合并。

$ gs -q -dNOPAUSE -dBATCH -sDEVICE=pswrite \
-sOutputFile=bla.ps -f foo1.ps foo2.ps
$ gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \
-sOutputFile=bla.pdf -f foo1.pdf foo2.pdf

8.6.20 命令耗时
---------------
显示某进程的耗时

# time some-command >/dev/null
real 0m0.035s # time on wall clock (elapsed real time)
user 0m0.000s # time in user mode
sys 0m0.020s # time in kernel mode

8.6.21 nice命令
---------------
使用nice(来自GNU shellutils软件包)可设置命令启动时的nice值。renice(bsdutils)
或top可以重设进程的nice值。nice值为19代表最慢的(优先级最低的)进程;负值就“
not-nice”,如-20代表非常快的(优先级高的)进程。只有超级用户可以设定负nice值。

# nice -19 top # very nice
# nice --20 cdrecord -v -eject speed=2 dev=0,0 disk.img # very fast

有时极端的nice值对系统弊大于利,所以使用该命令要小心。

8.6.22 日程安排(cron,at)
--------------------------
在Linux下使用cron和at进行任务日程安排。参阅at(1)、crontab(5)、crontab(8)。

执行命令crontab -e创建或编辑crontab文件,为规律事务(按周期循环的事务)安排日程
。下面的一个crontab文件样例:

# use /bin/sh to run commands, no matter what /etc/passwd says
SHELL=/bin/sh
# mail any output to `paul', no matter whose crontab this is
MAILTO=paul
# Min Hour DayOfMonth Month DayOfWeek command (Day... are OR'ed)
# run at 00:05, every day
5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
# run at 14:15 on the first of every month -- output mailed to paul
15 14 1 * * $HOME/bin/monthly
# run at 22:00 on weekdays(1-5), annoy Joe. % for newline, last % for cc:
0 22 * * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%.%%
23 */2 1 2 * echo "run 23 minutes after 0am, 2am, 4am ..., on Feb 1"
5 4 * * sun echo "run at 04:05 every sunday"
# run at 03:40 on the first Monday of each month
40 3 1-7 * * [ "$(date +%a)" == "Mon" ] && command -args

执行at命令为偶然任务(只执行一次的任务)安排日程:

$ echo 'command -args'| at 3:40 monday

8.6.23 用screen来定制控制台
---------------------------
screen程序允许在单一的物理终端或终端模拟窗口运行多个伪终端,每个伪终端都拥有自己
的交互式shell。即便可以使用Linux伪终端或多个xterm窗口,研究一下如何设置screen丰
富的特性仍很有益,这些特性包括:

·回溯历史显示,
·拷贝和粘贴,
·输出到日志,
·图形入口,
·将终端与整个屏幕会话分离,稍后再连接。

8.6.23.1 远程访问方案
^^^^^^^^^^^^^^^^^^^^^
如果你经常从远程终端登录到Linux机器或使用VT100终端程序,screen的detach(分离)特
性将简化你的生活。

1.通过拔号连接登录,运行了一个非常复杂的screen会谈,打开了好几个窗口,有编辑器和
其它一些程序。
2.突然你需要离开终端一下,但你并不想挂断连接中止工作。
3.输入^A d离开会话,然后登出系统。(或者更简单些,输入^A DD离开会话并自动登出系
统)
4.当你回来时,需要再次登录,可输入命令screen -r,screen会如魔法般地重新连接上所
有打开的窗口。

8.6.23.2 典型的screen命令

一但打开了screen程序,除了命令按键(默认为^A)所有的键盘输入都被送到当前窗口,所
有的screen命令均按特定方式输入:^A加一个单键命令[加一些参数]的。常用的命令有:

^A ? 显示帮助屏幕(显示命令集)
^A c 创建并切换到新窗口
^A n 跳到下一个窗口
^A p 跳到上一个窗口
^A 0 跳到0号窗口
^A w 显示窗口列表
^A a 将Ctrl-A做为键盘输入发送到当前窗口
^A h 对当前窗口做硬拷贝写入到文件
^A H 开始/中止将当前窗口事件记录到文件
^A ^X 锁定终端(密码保护)
^A d 从终端分离屏幕会话
^A DD 分离屏幕会话并退出登录

以上只是screen命令的一个很小的子集。只要是你认为screen能干的事,没准它真就可以!
详情参阅screen(1)。

8.6.23.3 screen会话中的退格键和Ctrl-H
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
在运行screen时,如果发现退格键和/或Ctrl-H无法正常工作,可编辑/etc/screenrc,找到
这行:

bindkey -k kb stuff "\177"

将这注释掉(例如在句首添加“#”)。

8.6.23.4 X下与screen等价的程序
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
找找xmove。参阅xmove(1)。

8.6.24 网络测试基础
-------------------
安装netkit-ping、traceroute、dnsutils、ipchains(适用于2.2版内核)、iptables(适
用于2.4版内核)和net-tools软件包,然后执行:

$ ping yahoo.com # 检查Internet连接
$ traceroute yahoo.com # 跟踪IP数据包
$ ifconfig # 检查主机设置
$ route -n # 检查路由设置
$ dig [@dns-server.com] host.dom [{a|mx|any}] |less
# 检查dns-server.com的host.dom DNS记录
# 查找{mx|any}记录
$ ipchains -L -n |less # 检查包过滤(2.2 kernel)
$ iptables -L -n |less # 检查包过滤(2.4 kernel)
$ netstat -a # 查找系统上所有打开的端口
$ netstat -l --inet # 查找系统监听的端口
$ netstat -ln --tcp # 查找系统监听的TCP端口(端口数字)

8.6.25 从本地缓冲池中收邮件
---------------------------
从本地缓冲池中收的邮件:

# exim -q # flush waiting mail
# exim -qf # flush all mail
# exim -qff # flush even frozen mail

-qff选项用在/etc/ppp/ip-up.d/exim脚本中效果更好。

8.6.26 删除本地缓冲池中的冻结邮件
---------------------------------
删除本地缓冲池中的冻结邮件并返回出错信息:

# exim -Mg `mailq | grep frozen | awk '{ print $3 }'`

8.6.27 再分发mbox中的信件
-------------------------
如果home目录没有空间继续处理邮件,就需要对磁盘空间进行扩容,扩容完成后需要手工分
发/var/mail/username目录中的邮件到home目录中的分类邮箱,执行:

# /etc/init.d/exim stop
# formail -s procmail </var/mail/username
# /etc/init.d/exim start

8.6.28 清空文件内容
-------------------
要清空某些文件如日志文件的内容,千万不要使用rm删除文件然后再创建一个新的空文件,
因为在两次操作的间隔,系统可能需要访问该文件。下面是清空文件内容的安全方法:

$ :>file-to-be-cleared

8.6.29 空文件
-------------
下面的命令可以创建空文件:

$ dd if=/dev/zero of=filename bs=1k count=5 # 5KB of zero content
$ dd if=/dev/urandom of=filename bs=1m count=7 # 7MB of random content
$ touch filename # create 0B file (if file exists, updates mtime)

8.6.30 chroot
-------------
假设你在/dev/hda1上安装了一个完整的Linux发行版(可能是Debian的某个发布版或是Red
Hat的发行版),当前你正在运行/dev/hda2上安装的另一个Linux系统。采用共享同一个内
核的方法,可以运行/dev/hda1上的系统,又不用重启正在运行的/dev/hda2上的系统。

# mount /dev/hda1 /mnt/target
... 假设/dev/hda1中有一个完整的系统
# chroot /mnt/target
... 现在/dev/hda1下的内容被看成是位于root目录。
# mount proc /proc # just in case
... 运行/dev/hda1中的命令

该方法可实现在同一台机器上同时安装stable/testing/unstable。同样,当运行需大量内
存的程序如dselect时,可在主机上运行该程序,同时将子机硬盘通过NFS方式挂载到主机并
开放读/写权限,在主机上使用chroot方法操作子机。

在Woody中使用debootstrap命令很容易构造chroot体系:

# mkdir potatochroot
# debootstrap potato potatochroot
# chroot potatochroot
# apt-setup # set-up /etc/apt/sources.list

pbuilder是一个更专业化的chroot软件包,它可以构造一个chroot体系并在chroot中编译软
件包。该体系可用于检查软件包编译时关联关系是否正确,并确保编译生成的软件包中没有
不必要的或错误的关联关系。

参阅http://lists.debian.org/debian-user/2002/debian-user-200204/msg01010.html

8.6.31 怎样检查硬链接
---------------------
检查两个文件是否是指向同一个文件的两个硬链接:

$ ls -li file1 file2

8.6.32 挂载硬盘上的镜像文件
----------------------------
如果file.img文件是硬盘内容的镜像文件,而且原始硬盘的配置参数为
xxxx=(bytes/sector) * (sectors/cylinder),那么,下面的命令将其挂载到/mnt:

# mount -o loop,offset=xxxx file.img /mnt

注意绝大部分的硬盘都是512 bytes/sector。

8.6.33 Samba
------------
获取Windoze文件的基本方法:

# mount -t smbfs -o username=myname,uid=my_uid,gid=my_gid \
//server/share /mnt/smb # mount Windows files to Linux
# smbmount //server/share /mnt/smb \
-o "username=myname,uid=my_uid,gid=my_gid"
# smbclient -L 192.168.1.2 # list the shares on a computer

可从Linux检查Samba网上邻居:

# smbclient -N -L ip_address_of_your_PC | less
# nmblookup -T "*"



Debian参考手册 第九章 Debian系统微调
Debian参考手册

~~~~~~~~~~~
第九章 Debian系统微调
~~~~~~~~~~~

本章讲述了基本的基于文本界面的系统配置方法。在学习本章前请先阅读〖3. Debian系统
安装提示〗。

如是你很关心安全方面的信息,强烈推荐你阅读《Securing Debian Manual》,它位于
harden-doc软件包。


9.1 系统初始化提示
==================
参阅〖2.4.1 init程序〗了解有关Debian init脚本的基础知识。

9.1.1 自定义init脚本
--------------------
Debian使用sys-V init脚本系统。尽管/etc/init.d/*下所有的init脚本均被登记为
conffile,系统管理员可以自由地修改它们,但编辑/etc/defaults/*下的文件却是创建自
定义init脚本的更好的方法。

例如,/etc/init.d/rcS可用来定制motd、sulogin等为默认启动。

9.1.2 自定义系统日志
--------------------
可通过/etc/syslog.conf配置系统日志记录方式。如果想为日志文件上色可安装colorize软
件包。参阅syslogd(8)和syslog.conf(5)。

9.1.3 硬件存取优化
------------------
有一部分硬件优化的配置工作Debian留给了系统管理员来掌握。

○hdparm
·硬盘存取优化。成效显著。
·危险。务必先阅读hdparm(8)。
·hdparm -tT /dev/hda 测试硬盘存取速度。
·hdparm -c1 -d1 -u1 -m16 -A /dev/hda 加速新型IDE系统。(有一定风险。)

○setserial
·串行接口管理工具集。

○scsitools
·SCSI硬件管理工具集。

○memtest86
·内存硬件管理工具集。

○hwtools
·低级硬件管理工具集。
·irqtune:修改设备的IRQ优先级,使那些需要高优先级和快速服务的硬件(例如,串行接
口、调制解调器)获得它所要的资源。对串口/调制解调器加速后获得原来3倍的吞吐量。
·scanport:扫描I/O空间的0x100至0x3ff地址段,查找已安装的ISA设备。
·inb:一个小巧的黑客工具,用来阅读I/O端口信息并将其值转换成十六进制和二进制。

○schedutils
·Linux日程安排工具包。
·包括taskset、irqset、lsrt和rt
·再加上nice和renice(不包括在工具包内),就可对进程的日程安排进行全面的管理。


9.2 访问权限控制
================

9.2.1 通过PAM和login实现访问权限管理
---------------------------------------
PAM(Pluggable Authentication Modules 可嵌入认证模块)提供了登录管理。

/etc/pam.d/* # PAM管理文件
/etc/pam.d/login # PAM登录管理文件
/etc/security/* # PAM模块参数
/etc/securetty # 管理通过控制台进行的root登录(login)
/etc/login.defs # 管理登录行为(login)

如果想在控制台终端不用密码直接登录系统,可按下面的方法修改/etc/pam.d/login文件的
内容,风险自负。

#auth required pam_unix.so nullok
auth required pam_permit.so

该方法亦可用于xdm、gdm......,实现无密码X控制台。

相反,如果你希望强化密码政策,可安装cracklib2并按下面的方法修改/etc/pam.d:

password required pam_cracklib.so retry=3 minlen=6 difok=3

使用一次性登录密码激活帐户也很有用,要实现该功能,在passwd命令后加上-e参数,参阅
passwd(1)。

要设置系统最大进程数,可在Bash shell中设定ulimit -u 1000或设置PAM的
/etc/security/limits.conf文件。其它参数如core等的设置方法与之类似。PATH的初始值
可在/etc/login.defs中先于shell启动脚本设置。

PAM的文档位于libpam-doc软件包内。其中《The Linux-PAM System Administrator's
Guide 》一文涵盖了PAM配置、可用模块等内容,文档中还包含《The Linux-PAM
Application Developers' Guide》和《The Linux-PAM Module Writers' Guide》。

9.2.2 “为什么GNU su命令不支持wheel group”
-------------------------------------------
这是Richard M. Stallman的一句名言,位于旧版info su页面末尾。别担心:在Debian中,
当前版本的su使用PAM,因此你可以用/etc/pam.d/su下的pam_wheel.so来限制任何用户组使
用su的能力。下面的操作将在Debian系统中赋予adm用户等同于BSD wheel用户组的权限,而
且该组成员不需要密码就能使用su命令。

# anti-RMS configuration in /etc/pam.d/su
auth required pam_wheel.so group=adm

# Wheel members to be able to su without a password
auth sufficient pam_wheel.so trust group=adm

9.2.3 各种用户组的含义
----------------------
一些有趣的用户组:

·如果pam_wheel.so不带任何group=参数,root group就是su默认的wheel group。
·adm group可以阅读日志文件。
·cdrom group可在本地赋予一组用户访问CD-ROM驱动器的权限。
·floppy group可在本地赋予一组用户访问软盘驱动器的权限。
·audio group可在本地赋予一组用户访问声音设备的权限。
·src group拥有源代码以及/usr/src目录下的文件。它可以在本地赋予某个用户管理系统
源代码的权限。
·对于管理桌面或低级别的系统管理员,可设置他们为staff成员,该类成员可以在
/usr/local下工作并且可以在/home下创建目录。

完整列表参阅《Securing Debian Manual》的“FAQ”章节,亦见于harden-doc软件包。

9.2.4 sudo——一个安全的工作环境
--------------------------------
使用sudo最主要的目的是保护自己少做蠢事,我认为使用系统时使用sudo比使用root帐号更
好。YMMV

安装sudo然后编辑/etc/sudoers中有关选项激活它。还可在/usr/share/doc/sudo/OPTIONS
中查看sudo的用户组特性。

样例中的配置,设定“staff”用户组成员可通过sudo执行任何root权限的命令而“src”用
户组成员只可执行规定的一部分root权限的命令。

使用sudo的好处在于只需一个普通用户密码登录,并且所有的活动都受到监控。用它为低级
别的系统管理员赋权是个好主意。例如:

$ sudo chown -R myself:mygrp .

当然,如果你知道root密码(绝大部分在家安装系统的用户都会知道),就可以在普通用户
下执行任何root命令:

$ su -c "shutdown -h now"
Password:

(我想我该严格限制admin帐号的sudo特权,但对于家中的服务器,就不用考虑那么多了。


想了解其它允许普通用户执行root权限命令的程序,可以看看super软件包。

9.2.5 daemon程序的访问权限控制
------------------------------
对于Internet超级服务器,inetd会在系统启动时通过/etc/rc2.d/S20inetd(for
RUNLEVEL=2)加载,S20inetd是一个指向/etc/init.d/inetd的符号链接。本质上,inetd允
许一个daemon调用其它多个daemon,以减轻系统的负载。

当某个服务请求到达,系统会查询/etc/protocols和/etc/services中的数据库,确定该请
求所指定的相关协议和服务,接着inetd会在/etc/inetd.conf数据库中查找普通Internet服
务或/etc/rpc.conf中查找基于Sun-RPC的服务。

为了系统安全,请在/etc/inetd.conf中关闭所有不用的服务。涉及到NFS和其它基于RPC的
程序时需要激活Sun-RPC服务。

有时,inetd并不直接打开请求的服务,而是在/etc/inetd.conf中将该服务名作为的参数,
打开tcpd TCP/IP daemon包装程序,这时,tcpd首先登记请求并使用/etc/hosts.deny和
/etc/hosts.allow进行附加的检查,然后再运行相应的服务程序。

如果新版的Debian系统进行远程访问时出现问题,可以/etc/hosts.deny中注释掉“ALL:
PARANOID”,如果有该行的话。

更多信息参阅inetd(8)、inetd.conf(5)、protocols(5)、services(5)、tcpd(8)、
hosts_access(5)和hosts_options(5)。

有关Sun-RPC的更多信息参阅rpcinfo(8)、portmap(8)和
/usr/share/doc/portmap/portmapper.txt.gz。

9.2.6 轻便目录访问控制协议(LDAP)
---------------------------------
参阅:

·OpenLDAP http://www.openldap.org/
·OpenLDAP Admin Guide in the openldap-guide package
·LDP: LDAP Linux HOWTO http://www.tldp.org/HOWTO/LDAP-HOWTO/index.html
·LDP: LDAP Implementation HOWTO
http://www.tldp.org/HOWTO/LDAP-Implementation-HOWTO/index.html
·OpenLDAP, extensive use reports
http://portal.aphroland.org/~aphro/ldap-docs/ldap.html
·Open LDAP with Courier IMAP and Postfix
http://annapolislinux.org/docs/plc/postfix-courier-howto.txt


9.3 刻录机
==========
ATAPI/IDE接口的刻录机是时下非常流行的配件,它是极好的系统备份工具,特别是对于那
些单个文件容量一般小于640MB的家庭用户。更多权威的信息,请参阅LDP
CD-Writing-HOWTO (http://www.tldp.org/HOWTO/CD-Writing-HOWTO.html)。

9.3.1 概述
----------
首先需要说明的是,在向刻录机发送数据过程中,任何数据中断都会对光盘造成无法挽回的
损坏。所以应选购缓冲区尽可能大的刻录机。如果资金充裕,就别再考虑ATAPI/IDE型的,
买台SCSI型的没错。如果可以连接IDE接口,就使用PCI总线(例如,在主板上)而别用ISA
总线(SB16声卡就使用它)。

当刻录机连接到IDE,驱动它的通常是IDE-SCSI驱动而非旧式的IDE CD驱动,所以,需要激
活SCSI通用驱动。有两种方法激活它,假设系统使用的是较新版本的内核(如2001年三月的
版本)。

9.3.2 方法一:modules+lilo
--------------------------
如果使用的是Debian原装内核,将下面的内容添加到/etc/lilo.conf,如果有多个选项,列
出时要将它们用空格分隔开:

append="hdx=ide-scsi ignore=hdx"

在此,刻录机使用ide-scsi驱动访问,hdx就代表它,其中x的含义如下:

hda 接第一个IDE接口作主盘
hdb 接第一个IDE接口作从盘
hdc 接第二个IDE接口作主盘
hdd 接第二个IDE接口作从盘
hde ... hdh 接扩展IDE接口或ATA66/100 IDE接口

完成上述配置工作后以root身份运行下列命令激活设备

# lilo
# shutdown -h now

9.3.3 方法二:重编译内核
------------------------
Debian用make-kpkg创建新内核,使用make-kpkg时加上新的--append_to_version参数可创
建多重内核镜像。参阅〖7. Debian下的Linux内核〗

make menuconfig后执行下列步骤:

·bzImage

·包含IDE CD driver(不是必须的,但这样更简单)

·将ide-scsi和sg编译进内核,或编译成模块

9.3.4 配置步骤
--------------
下列步骤可让系统在启动时激活内核对刻录机的支持:

# echo ide-scsi >>/etc/modules
# echo sg >>/etc/modules
# cd /dev; ln -sf scd0 cdrom

手工激活可以这样做:

# modprobe ide-scsi
# modprobe sg

重启以后,用下列方法检查安装情况:

$ dmesg|less
# apt-get install cdrecord
# cdrecord -scanbus

[Per Warren Dodge] 如果机器上同时有CD-ROM和CD-R/RW,这时ide-scsi和ide-cd可能会产
生冲突,请试试在/etc/modutils/aliases中加上下面的内容,然后运行update-modules并
重启系统。

pre-install ide-scsi modprobe ide-cd

上述指令指示系统在加载ide-scsi前先加载IDE驱动。IDE驱动ide-cd接管所有ATAPI
CD-ROM——对指明忽略的设备除外。剩下的设备才由ide-scsi来管理。

9.3.5 光盘镜像文件(可引导光盘)
-------------------------------
将target-directory/下的文件,制作成光盘镜像文件cd-image.raw(可引导系统、Joliet
TRANS.TBL-enabled格式的光盘;如果不需要引导系统功能,可去掉-b和-c选项),在第一
个软驱中插入启动软盘然后执行:

# dd if=/dev/fd0 target-directory/boot.img
# mkisofs -r -V volume_id -b boot.img -c bootcatalog -J -T \
-o cd-image.raw target_directory/

一个有趣的黑客尝试是制作一盘DOS引导光盘。如果上述的boot.img文件中包含了通用DOS引
导软盘镜像,光盘就可以象插在软驱(A:)中的DOS软盘一样引导DOS系统。如果再加上
freeDOS就更有趣。

想检查该光盘镜像文件,可以在回送设备(loop device)上加载它。

# mount -t iso9660 -o ro,loop cd-image.raw /cdrom
# cd /cdrom
# mc
# umount /cdrom

9.3.6 刻录光盘(R,R/W)
-----------------------
首先进行设备测试(假设是双倍数刻录)

# nice --10 cdrecord -dummy speed=2 dev=0,0 disk.img

如果测试通过,执行下面的命令刻录CD-R

# nice --10 cdrecord -v -eject speed=2 dev=0,0 disk.img

或执行下面命令刻录CD-RW

# nice --10 cdrecord -v -eject blank=fast speed=2 dev=0,0 disk.img

某些型号的CD-RW刻录机用下面的命令更好

# nice --10 cdrecord -v blank=all speed=2 dev=0,0 disk.img

接下来执行

# nice --10 cdrecord -v -eject speed=2 dev=0,0 disk.img

分两步做是必要,这可以防止在刻录时遇到数据空白产生SCSI超时错误。nice参数可时也要
做一些调整。

9.3.7 制作光盘镜像文件
----------------------
某些CD-R和商业光盘在数据末尾追加了空白扇区(junk sectors),使用dd无法拷贝这些光
盘(Windows98 CD就是其中之一)。cdrecord软件包中有一个readcd命令,用它可以将任何
光盘内容拷贝成镜像文件。对于数据盘,先挂载,运行mount查看它的实际大小,再将显示
的数字(in blocks, = 1024 bytes)除以2得到实际光盘扇区数(2048 bytes),带参数运
行readcd用该硬盘镜像文件烧制CD-R/RW。

# readcd target lun scsibusno # select function 11

其中,大部分情况下命令行中3个参数都为0。有时readcd给出的扇区数会偏多!此时使用前
面用挂载镜像的方法得出的大小值来对上述参数赋值效果更好。

My CD-R = +2 sectors
MS Windows CD = +1 sector, i.e., +2048 bytes

9.3.8 Debian安装盘镜像
----------------------
有关Debian CDs的最新信息,请浏览Debian CD site(http://www.debian.org/CD/)

如果有较快的Internet连接,可考虑用下面的引导方法从网络安装系统:

·一些软盘镜像http://www.debian.org/distrib/floppyinst。
·一个迷你型可引导光镜像http://www.debian.org/CD/netinst/。

如果没有较快的Internet连接,可考虑从光盘出售商处(
http://www.debian.org/CD/vendors/)购买安装光盘。

请不要浪费带宽来下载标准光盘镜像(即使是使用新的jigdo方式),除非你是光盘镜像测
试员。

有一个很有名的光盘镜像KNOPPIX - Live Linux Filesystem On CD(
http://www.knopper.net/knoppix/index-en.html)。该光盘可以启动一个全功能的
Debian系统而且不需要在硬盘上安装。

9.3.9 将系统备份到光盘
----------------------
想要将重要的配置文件和数据备份到CD-R,可使用样例目录中的“backup”脚本。亦可参阅
〖8.4 差异备份与数据同步〗。

9.3.10 刻录音乐CD
-----------------
我没测试过:

apt-get install cdrecord cdparanoia
# cdparanoia -s -B
# cdrecord dev=0,0,0 speed=2 -v -dao -eject defpregap=1 -audio *.wav



# apt-get install cdrdao #disk at once
# cdrdao read-cd --device /dev/cdrom --paranoia-mode 3 my_cd # read cd
# cdrdao write --device /dev/cdrom --speed 8 my_cd # write a new CD

cdrdao与拷贝不同(如没有数据间隙,等...)


9.4 X程序
=========
X环境由Xfree86提供。Debian系统中X服务器有两个主要版本:V3.x和V4.x。

〖9.4.3 X服务器〗
该程序存在于那些需要在用户显示器(CRT,LCD)上显示X窗口和桌面并接收键盘和鼠标输
入的本地主机上。

〖9.4.4 X客户机〗
该程序存在于那些需要运行与X环境兼容的应用程序的(本地或远程)主机上。

这正好将常规的“服务器”和“客户机”关系倒转过来。这方面的基础知识请参阅X(7),
LDP 《XWindow-User-HOWTO》(http://www.tldp.org/HOWTO/XWindow-User-HOWTO.html)
和《Remote X Apps mini-HOWTO》(
http://www.tldp.org/HOWTO/mini/Remote-X-Apps.html)。

有几种途径让“X server”(显示端)接收远程“X client”(应用端)的连接请求:

○xhost
·主机列表机制(很不安全)。
·协议不加密(易受到网络监听攻击)
·尽量不要使用该方式。
·参阅〖9.4.7 远程X连接:xhost〗和xhost(1x).

○xauth
·MIT magic cookie机制(不安全但比xhost强点)。
·协议不加密(易受到网络监听攻击)
·仅用于本地连接,它所需的CPU消耗比ssh -X低。
·参阅〖9.4.11 在X环境下获得root权限〗和xauth(1x).

○xdm, wdm, gdm, kdm, ...
·MIT magic cookie机制(和xauth一样不安全)
·参阅xdm(1x)和Xsecurity(7)获得更多有关X显示访问控制的基础知识
·参阅wdm(1x)、gdm(8)和kdm.options(5)获得更多信息,当然先得装上它们。
·参阅〖6.4.4 System-V init和runlevels〗了解如何在不删除xdm包的情况下禁用它,使
系统启动到控制台。

○ssh -X
·基于安全shell的端口发送机制(安全)
·加密协议(在本地使用很耗系统资源)。
·使用它进行远程连接。
·参阅〖9.4.8 远程X连接:ssh〗

除了ssh,所有的远程连接方式,都需要X服务器开启TCP/IP连接。参阅〖9.4.6 X的TCP/IP
联接〗。

9.4.1 X系统软件包
-----------------
在Woody中提供了下列几个软件包来简化X系统的安装。

x-window-system-core
该综合包提供一些基本组件,用于在单一工作站上运行X Window系统,其中包括X函数库、
一个X服务器:xserver-xfree86、一套字体、一组基本的X客户端及工具。

x-window-system
该综合包提供XFree86项目开发的所有X Window系统的组件,以及一套经久不衰的辅助程序
。(注意,它包含了x-window-system-core、twm和xdm等组件,故安装了它就不用再安装
x-window-system-core了。)

xserver-common-v3
XFree86 3.x X服务器(X3)相关的程序和工具。

xserver-*
X3服务器软件包的补充包,包含了对那些新的X4服务器不支持的硬件的支持。如X4不支持某
些老式的ATI mach64卡,某些视频卡在Woody版的X4中无法工作等等。(要获得可用软件包
,可执行apt-cache search xserver-|less。所有这些X3服务器均是基于
xserver-common-v3的。)

大多数情况下,应该安装x-window-system(如果要通过控制台登录,需禁用xdm,具体方法
参阅〖8.1.4 “我不想直接启动到X!”〗。)

9.4.2 X服务器的硬件侦测包
-------------------------
在安装X系统之前安装下列软件包,就能在X配置阶段实现硬件侦测:

·discover — 硬件识别系统。
·mdetect — 鼠标自动侦测工具。
·read-edid — VESA PnP监视器硬件信息收集工具。

9.4.3 X服务器
-------------
有关X服务器的信息,参阅XFree86(1x)。

从本地控制台调用X服务器:

$ startx -- :<display> vtXX
e.g.:
$ startx -- :1 vt8 -bpp 16
... start on vt8 connected to localhost:1 with 16 bpp mode

--后面的参数用于设置X服务器。

注意,在使用~/.xserverrc脚本定制X服务器启动进程时,请确保exec调用的是真正的X服务
器。如果没这么做会导致X服务器启动缓慢及退出。例如:

#!/bin/sh
exec /usr/bin/X11/X -dpi 100 -nolisten tcp

9.4.3.1 配置X4服务器
^^^^^^^^^^^^^^^^^^^^
(重新)配置X4服务器,

# dpkg-reconfigure --priority=low xserver-common
# dpkg-reconfigure --priority=low xserver-xfree86

该命令会生成/etc/X11/XF86Config-4文件并调用dexconf脚本来配置X。

9.4.3.2 配置X3服务器
^^^^^^^^^^^^^^^^^^^^
# dpkg-reconfigure --priority=low xserver-common-v3
# dpkg-reconfigure --priority=low xserver-mach64

该命令会生成/etc/X11/XF86Config文件并调用xf86config-v3脚本来配置X。

9.4.3.3 手工配置X4服务器
^^^^^^^^^^^^^^^^^^^^^^^^
添加用户自定义内容时,不要在配置文件的定义段落中进行编辑(对于X4而言):

### BEGIN DEBCONF SECTION
[snip]
### END DEBCONF SECTION

正确是做法是将用户定义内容加在定义段落之前。例如,要添加自定义视频卡,可在文件开
头添加类似下面的内容:

Section "Device"
Identifier "Custom Device"
Driver "ati"
Option "NoAccel"
EndSection

Section "Screen"
Identifier "Custom Screen"
Device "Custom Device"
Monitor "Generic Monitor"
DefaultDepth 24
Subsection "Display"
Depth 8
Modes "1280x960" "1152x864" "1024x768" "800x600" "640x480"
EndSubsection
Subsection "Display"
Depth 16
Modes "1280x960" "1152x864" "1024x768" "800x600" "640x480"
EndSubsection
Subsection "Display"
Depth 24
Modes "1280x960" "1152x864" "1024x768" "800x600" "640x480"
EndSubsection
EndSection

Section "ServerLayout"
Identifier "Custom"
Screen "Custom Screen"
InputDevice "Generic Keyboard" "CoreKeyboard"
InputDevice "Configured Mouse" "CorePointer"
EndSection

9.4.4 X客户端
-------------
绝大多数X客户端程序都可以用类似下面的命令启动:

client $ xterm -geometry 80x24+30+200 -fn 6x10 -display hostname:0 &

命令行中各参数的含义如下:

○-geometry WIDTHxHEIGHT+XOFF+YOFF:窗口初始尺寸和位置。

○-fn FONTNAME:显示文本的字体。FONTNAME的赋值有如下几个:
·a14: 普通字体
·a24: 大号字体
·... (使用xlsfont检查可用字体)

○-display displayname:X服务器名称。 displayname的赋值有如下几个:
·hostname:D.S 表示在名为hostname的主机的显示器D上显示的屏幕S;工作于该显示器的
X服务器监听TCP端口6000+D。
·host/unix:D.S 表示在host主机的显示器D上显示的屏幕S;工作于该显示器的X服务器监
听UNIX domain socket /tmp/.X11-unix/XD (故只能从主机访问它)。
·:D.S等价于host/unix:D.S,其中host代表本地主机名。

默认的X客户端程序(应用端)的displayname可通过DISPLAY环境变量来设置。例如:在运
行某X客户端程序之前,执行下列命令之一就可以完成设置工作:

$ export DISPLAY=:0
# 默认情况下,本地机器使用第一个X屏幕
$ export DISPLAY=hostname.fulldomain.name:0.2
$ export DISPLAY=localhost:0

程序启动方式可以在~/.xinitrc中进行自定义。例如:

xrdb -load $HOME/.Xresources
xsetroot -solid gray &
xclock -g 50x50-0+0 -bw 0 &
xload -g 50x50-50+0 -bw 0 &
xterm -g 80x24+0+0 &
xterm -g 80x24+0-0 &
twm

正如〖9.4.5.1 自定义X会话〗中所描述的,当使用startx启动X时,该脚本将重载
Xsession所做的所有常规操作,所以该方法仅作为最后的手段使用。

9.4.5 X会话
-----------
X会话(X服务器+X客户机)可使用下列方法启动:

·startx:initx的脚本化命令(wrapper script command),负责从Linux字符型控制台启
动X服务器和客户机。如果~/.xinitrc文件不存在,/etc/X11/xinit/xinitrc会调用并执行
/etc/X11/Xsession。
·xdm、gdm、kdm或wdm:X显示管理器守护进程,负责启动X服务器和客户机,并管理来自
GUI屏幕的登录行为。直接执行/etc/X11/Xsession。

想使用控制台参阅〖8.1.4 “我不想直接启动到X!”〗。

9.4.5.1 自定义X会话
^^^^^^^^^^^^^^^^^^^
默认的启动脚本/etc/X11/Xsession是
/etc/X11/Xsession.d/50xfree86-common_determine-startup和
/etc/X11/Xsession.d/99xfree86-common_start的高效的结合体。

/etc/X11/Xsession的执行会受/etc/X11/Xsession.options的影响,从本质上讲,它使用
exec命令执行系统中按下面的次序排序,排在第一位的程序:

1. ~/.xsession or ~/.Xsession,如果它被定义。
2. /usr/bin/x-session-manager,如果它被定义。
3. /usr/bin/x-window-manager,如果它被定义。
4. /usr/bin/x-terminal-emulator,如果它被定义。

Debian选择系统(Debian alternative system )对这些命令的确切定义进行了描述,参阅
〖6.4.3 自选命令〗。例如:

# update-alternatives --config x-session-manager
... 或
# update-alternatives --config x-window-manager

如果想定义某X窗口管理器为默认窗口管理器,同时保留已安装的GNOME和KDE会话管理器,
可用http://bugs.debian.org/168347中第二个错误报告所附的文件替换
/etc/X11/Xsession.d/50xfree86-common_determine-startup文件(我希望它能早日加到发
行版中),然后按下面的方法编辑/etc/X11/Xsession.options来禁用X会话管理器:

# /etc/X11/Xsession.options
#
# configuration options for /etc/X11/Xsession
# See Xsession.options(5) for an explanation of the available options.
# Default enabled
allow-failsafe
allow-user-resources
allow-user-xsession
use-ssh-agent
# Default disabled (enable them by uncommenting)
do-not-use-x-session-manager
#do-not-use-x-window-manager

如果不想按上述方法修改系统,由于gnome-session和kdebase软件包包含了那些X会话管理
器,所以删除它们,X窗口管理器就成了默认窗口管理器了。(废话,还更好的主意吗?)

对于那些/etc/X11/Xsession.options中仅包含一行allow-user-xsession(没有
allow-failsafe和allow-user-resources)的系统,任何定义了~/.xsession或
~/.Xsession的用户,均可以自定义/etc/X11/Xsession的行为。

~/.xsession文件中排在最后的命令,其格式应该为exec some-window/session-manager,
用来启动你喜欢的X窗口/会话管理器。

/usr/share/doc/xfree86-common/examples/xsession.gz给出了一个不错的~/.xsession脚
本样例。

我使用它来为每个用户设置窗口管理器、屏幕访问和语言支持。参阅〖9.4.5.2 启动特定的
X会话/窗口管理器〗、〖9.4.11 在X环境下获得root权限〗、〖9.7.8 双语系统的例子(日
本语EUCT和ISO-8859-1)〗。

用户自己添加的X资源保存在~/.Xresources,而系统级的X资源保存于
/etc/X11/Xresources/*。参阅xrdb(1x)。

用户可以在~/.xmodmaprc中自定义键盘布局和鼠标按键布局,参阅xmodmap(1x).

9.4.5.2 启动特定的X会话/窗口管理器
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
遵循〖9.4.5.1 自定义X会话〗中描述的原则,要激活用户特定的X会话/窗口管理器,需要
安装相应的软件包并在~/.xsession文件末尾添加如下内容(我爱用blackbox,它简单快捷
。):

默认X会话管理器
·参阅〖6.4.3 可选命令〗
·exec /usr/bin/x-session-manager

默认X窗口管理器
·参阅〖6.4.3 可选命令〗
·exec /usr/bin/x-window-manager

GNOME会话管理器(loaded)
·需安装软件包:gnome-session
·exec /usr/bin/gnome-session

KDE会话管理器(loaded)
·需安装软件包:kdebase (or kdebase3 for KDE3)
·exec /usr/bin/kde2

Blackbox窗口管理器(lightweight).
·需安装软件包:blackbox
·exec /usr/bin/blackbox

IceWM窗口管理器(lightweight)
·需安装软件包:icewm
·exec /usr/bin/X11/icewm

FVWM2虚拟窗口管理器
·需安装软件包:fvwm
·exec /usr/bin/fvwm2

Windowmaker窗口管理器
·需安装软件包:wmaker
·exec /usr/bin/wmaker

Enlightenment窗口管理器(loaded).
·需安装软件包:enlightenment
·exec /usr/bin/enlightenment

参阅《Window Managers for X》(http://www.xwinman.org/)

9.4.5.3 配置KDE/GNOME环境
^^^^^^^^^^^^^^^^^^^^^^^^^
要配置完整的KDE/GNOME环境,下列的综合包很有用:

·KDE:安装kde软件包
·GNOME:安装gnome软件包

请使用能操作recommends类软件包的安装工具安装这些软件包,如dselect和aptitudes,比
起apt-get它们能提供更丰富的软件供你选择。

如果想从控制台登录,必须禁用X显示管理器,例如kdm、gdm和wdm,这会牵扯到一些关联问
题,有关信息参阅〖8.1.4 “我不想直接启动到X!”〗。

如果想将系统的默认环境由KDE换成GNOME,请用〖6.4.3 可选命令〗中所述的方法配置
x-session-manager。

9.4.6 X的TCP/IP联接
-------------------
由于不加密的远程TCP/IP套接字连接易受到窃听攻击,新版的Debian安装X时默认是禁用
TCP/IP套接字口的。建议使用ssh进行远程X连接(参阅〖9.4.8 X远程联接:ssh〗)。

通常不推荐使用本节所述的方法,除非系统处于防火墙之后且所处网络中全是绝对可信任的
用户。使用下面的命令检查当前X服务器的TCP/IP套接字口的设置:

# find /etc/X11 -type f -print0 | xargs -0 grep nolisten
/etc/X11/xinit/xserverrc:exec /usr/bin/X11/X -dpi 100 -nolisten tcp

删除-nolisten就可以恢复X服务器对TCP/IP的监听。

9.4.7 X远程联接:xhost
----------------------
xhost允许通过主机名访问。该方式极不安全。下面的方法将关闭主机验证功能,只要
TCP/IP套接字连接功能是打开的(参阅〖9.4.6 X的TCP/IP联接〗)本机就会接收来自任何
地方的连接请求。

$ xhost +

要重新打开主机验证功能可执行:

$ xhost -

xhost无法区分远程主机上不同的用户,而且远程连接的主机名(实际上是地址)也可以是
伪造的。

如果处于一个不可信的网络环境(例如通过PPP拔号连接到Internet),即使在网络中成为
主机受到一定标准的限制,也应尽量避免使用该连接方式。参阅xhost(1x)。

9.4.8 X远程联接:ssh
--------------------
使用ssh可以在本地主机和远程应用服务器之间建立一个安全的连接通道。

·在远程主机的/etc/sse/sshd_ocnfig文件中,打开X11Forwarding和AllowTcpForwarding
选项。

·启动本地主机的X服务器。

·在本地主机上开一个xterm进程。

·运行ssh建立与远程站点的连接。

localname @ localhost $ ssh -q -X -l loginname remotehost.domain
Password:
.....

·在远程站点上运行X应用程序命令。

loginname @ remotehost $ gimp &

该连接方式使得远程X客户机上的屏幕输出,看上去就好象是通过本地UNIX域套接字的方式
连接到服务器的客户机输出。

9.4.9 xterm
-----------
学习xterm可以去http://dickey.his.com/xterm/xterm.faq.html。

9.4.10 X资源数据库
------------------
许多老式的X程序,如xterm,使用X资源数据库配置它们的外观。~/.Xresources文件用于保
存用户资源定义。登录后该文件自动合并到默认的X资源中。

这儿是一些有用的设置,可加到~/.Xresources文件中:

! Set the font to a more readable 9x15
XTerm*font: 9x15

! Display a scrollbar
XTerm*scrollBar: true

! Set the size of the buffer to 1000 lines
XTerm*saveLines: 1000

要使上述设置立即生效,可用下面的命令将它们合并到数据库:

xrdb -merge ~/.Xresources

9.4.11 X下获取root权限
----------------------
如果运行GUI程序时需要root权限,请用下面的步骤在用户的X服务器上显示程序输出。千万
不要直接使用root帐号启动X服务器以避免承担不必要的安全风险。。。。

以普通用户身份启动X服务器,开一个xterm控制台窗口,执行:

$ XAUTHORITY=$HOME/.Xauthority
$ export XAUTHORITY
$ su root
Password:*****
# printtool &

非root用户以su方式运用该技巧时,要确保该非root用户所在用户组对~/.Xauthority文件
有读权限。

想要系统自动执行该命令序列,请在用户帐号下创建~/.xsession文件,编辑文件如下:

# This makes X work when I su to the root account.
if [ -z "$XAUTHORITY" ]; then
XAUTHORITY=$HOME/.Xauthority
export XAUTHORITY
fi
unset XSTARTUP
# If particular window/session manager is desired, uncomment following
# and edit it to fit your needs.
#XSTARTUP=/usr/bin/blackbox
# This start x-window/session-manager program
if [ -z "$XSTARTUP" ]; then
if [ -x /usr/bin/x-session-manager ]; then
XSTARTUP=x-session-manager
elif [ -x /usr/bin/x-window-manager ]; then
XSTARTUP=x-window-manager
elif [ -x /usr/bin/x-terminal-emulator ]; then
XSTARTUP=x-terminal-emulator
fi
fi
# execute auto selected X window/session manager
exec $XSTARTUP

接着在用户的xterm窗口中运行su(不是su -)。现在从该xterm启动的GUI程序就可以在该
用户的X window环境中显示以root权限运行的程序输出。只要执行了默认的
/etc/X11/Xsession,就可以使用该方法。如果用户使用~/.xinit或~/.xsession来配置自定
义环境,需要将上面提到的环境变量XAUTHORITY加到这些脚本中去。

还有一种方法,sudo可用于自动执行上面的命令序列:

$ sudo xterm
... 或
$ sudo -H -s


这时/root/.bashrc中应包含:

if [ $SUDO_USER ]; then
sudo -H -u $SUDO_USER xauth extract - $DISPLAY | xauth merge -
fi

即使对那些home目录位于NFS上的用户,它也能正常工作。因为root不用读.Xauthority文件


还有一些用于该目的的专用软件包:kdesu、gksu、gksudo、gnome-sudo和xsu。其它方法也
可以达到同样的目的:如在/root/.Xauthority和相应用户文件之间创建一个符号链接;使
用sux脚本(http://fgouget.free.fr/sux/sux-readme.shtml);或对root初始化脚本执行
“xauth merge ~USER_RUNNING_X/.Xauthority”。

更多方法参阅debian-devel mailing list(
http://lists.debian.org/debian-devel/2002/debian-devel-200207/msg00259.html)。

9.4.12 X下的TrueType字体
------------------------
XFree86-4中标准的xfs能完美地驱动TrueType字体,如果你使用的是XFree86-3,就得安装
第三方字体服务器如xfs-xtt。

不论什么应用程序,如果要使用TrueType字体,就要与libXft或libfreetype建立链接(如
果你使用的是已编译好的.deb包,就不用在这方面操心了)。

要记得安装所需的字体文件并生成fonts.{scale,dir} 文件,这样字体才能被检索使用。

由于供自由使用的字体有时很有限,Debian用户也可以安装或共享某些商业TrueType字体。
为了简化安装这类字体的工序,于是产生了一些方便的软件包:

·ttf-commercial
·msttcorefonts (>1.1.0) (Woody中的软件包,因为Microsoft网站中的一些变故,2002
年8月就不再使用了。)

请慎重选择TT字体,以免自由系统受到不自由字体的污染。

9.4.13 网页浏览器(图形化)
--------------------------
Woody发布版中包含了下面这些拥有图形处理能力的网页浏览器:

·mozilla The Mozilla browser (new)
·galeon Mozilla-based browser with a Gnome UI (new)
·konqueror KDE browser
·dillo GTK browser
·amaya-gtk W3C reference browser
·amaya-lesstif W3C reference browser
·netscape-... (many, old)
·communicator-... (many, old)
·...

galeon需要有与其版本相匹配的特定版本的mozilla才能运行。虽然它们的UI不同,但都使
用的是同一个HTML解释引擎Gecko。

安装诸如mozilla、galeon浏览器的plug-ins,可手工将“*.so”装到plug-in目录下,然后
重启浏览器。

Plug-in资源:

·Java plug-in: install binary "J2SE" from http://java.sun.com.
·Flash plug-in: install binary "Macromedia Flash Player 5" from
http://www.macromedia.com/software/flashplayer/.
·freewrl: VRML browser and Netscape plugin
·...


9.5 SSH
=======
SSH(Secure SHell)是在Internet中建立连接的安全途径。OpenSSH是一个自由的SSH实现
软件,它包含在Debian的ssh软件包中。

9.5.1 基础
----------
首次安装OpenSSH服务器和客户机。

# apt-get update && apt-get install ssh

安装时需要打开/etc/apt/source.list中的non-US链接。要运行OpenSSH服务器,还得屏蔽
掉/etc/ssh/sshd_not_to_be_run。

SSH有两个验证协议:

○SSH协议 第1版
◎Potato发布版仅支持该版协议
◎可用的验证方法:
·RSA验证:基于RSA密匙的用户验证
·Rhosts验证:基于.rhosts的主机验证(不安全,有缺陷)
·RhostsRSA验证:.rhosts验证与RSA主机密匙相结合(有缺陷)
·ChallengeResponse验证:RSA Challenge-response验证
·Password验证:基于password的验证

○SSH协议 第2版
◎Woody后继版本将以该版协议为主
◎可用的验证方式:
·Pubkey验证:基于公共密匙的用户验证
·Hostbase验证:.rhosts或/etc/hosts.equiv验证与公共密匙客户端主机验证相结合(有
缺陷)
·ChallengeResponse验证:challenge-response验证
·Password验证:基于password的验证

如果系统正迁移到Woody或使用非Debian系统,请注意版本差异,

更多信息请参阅/usr/share/doc/ssh/README.Debian.gz.ssh(1)、sshd(8)、ssh-agent(1)
和ssh-keygen(1)。

下面是一些关键的配置文件:

○/etc/ssh/ssh_config:默认的SSH客户机。参阅ssh(1)。其中重要的项目有:
·Host:作用于所有与该关键字后所列出的主机相匹配的主机,它们须遵守下面(处于本
host关键字之后下一个host关键字之前的内容)所列的各项条款。
·Protocol:规定所使用的SSH协议的版本。默认为“2,1”。
·PreferredAuthentications:规定SSH2客户端验证方式。默认为“hostbased,publickey,
keyboard-interactive,password”。
·ForwardX11:默认为关闭状态。可使用命令行选项“-X”重载它。

○/etc/ssh/sshd_config:默认的SSH服务器。参阅sshd(8)。其中重要的项目有:
·ListenAddress:规定sshd监听的本地地址。允许多重指定。
·AllowTcpForwarding:默认为关闭状态。
·X11Forwarding:默认为关闭状态。

○$HOME/.ssh/authorized_keys:默认公共密匙列表,客户机可使用这些密匙连接本主机的
该用户帐号。参阅ssh-keygen(1)。

○$HOME/.ssh/identity:参阅ssh-add(1)和ssh-agent(1)。

下面的操作将从客户机建立一个ssh连接。

$ ssh username@hostname.domain.ext
$ ssh -1 username@hostname.domain.ext # Force SSH version 1

在用户眼里,ssh的功能相当于一个更灵巧更安全的telnet(will not bomb with ^])。

9.5.2 发送端口——SMTP/POP3微调
-------------------------------
在本地机器上执行下面的命令,可以建立一个连接本地主机4025端口和远程服务器25端口的
管道,以及一个连接本地主机4110端口和远程服务器110端口的ssh连接。

# ssh -q -L 4025:remote-server:25 4110:remote-server:110 \
username@remote-server

在Internet上可使用该方法建立与SMTP/POP3服务器的安全连接。记得在远程主机的
/etc/ssh/sshd_config中设置AllowTcpForwarding值为yes。

9.5.3 用更少的密码建立联接
--------------------------
使用RSAAuthentication(SSH1协议)或PubkeyAuthentication(SSH2协议)可不必记住每
个远程系统的连接密码。

在远程系统上,在/etc/ssh/sshd_config中分别设置“RSAAuthentication yes”或“
PubkeyAuthentication yes”。

然后在本地生成验证密匙,在远程系统上安装公共密匙:

$ ssh-keygen # RSAAuthentication: RSA1 key for SSH1
$ cat .ssh/id_rsa.pub | ssh user1@remote \
"cat - >>.ssh/authorized_keys"
...
$ ssh-keygen -t rsa # PubkeyAuthentication: RSA key for SSH2
$ cat .ssh/id_rsa.pub | ssh user1@remote \
"cat - >>.ssh/authorized_keys"
...
$ ssh-keygen -t dsa # PubkeyAuthentication: DSA key for SSH2
$ cat .ssh/id_dsa.pub | ssh user1@remote \
"cat - >>.ssh/authorized_keys"

今后可用“ssh-keygen -p”来改密码。最后记得检查一下设置,可做个连接测试,如遇问
题,执行“ssh -v”。

你可以通过在authorized_key里添加选项来限制主机及运行指定的命令。详情参阅sshd(8)


注意SSH2有HostbasedAuthentication,要使它工作,必须同时在服务器端的
/etc/ssh/sshd_config文件中和客户机端的/etc/ssh/ssh_config或$HOME/.ssh/config文件
中设置HostbasedAuthentication为yes。

9.5.4 其它平台的SSH客户端
-------------------------
下面是其它一些非类Unix平台的免费SSH客户端。

Windows
puTTY (GPL) http://www.chiak.greenend.org.uk/~sgtatham/putty/

Windows (cygwin)
SSH in cygwin (GPL) http://www.cygwin.com/

Macintosh Classic
macSSH (GPL) [注意Mac OS X包含OpenSSH;在终端应用程序中使用ssh]
http://www.macssh.com/

参阅SourceForge.net的站点文档(http://www.sourceforge.net/docman/?group_id=1),
“6. CVS Instructions”。

9.5.5 SSH代理
-------------
只要将公共密匙放入~/.ssh/authorized_keys,并且完成了如下所有设置就行了:

$ ssh-agent
$ # paste the output to your shell
$ ssh-add .ssh/identity
$ # or ssh-add .ssh/id_dsa or whatever your private key is named
$ scp remote.host.with.public.key

详情参阅ssh-agent(1)和ssh-add(1)。

9.5.6 问题解决
--------------
如果遇到问题,检查一下配置文件的访问权限也可运行“ssh -v”.

如果是root身份,遇到连接防火墙出错的情况,可使用“-p”选项;它规定ssh使用服务器
的1-1023以外的端口。

如果与远程站点的ssh连接突然停止工作,很可能是因为系统管理员修补系统造成的,
host_key在系统维护过程中被更改。在查明了事情真象并确定并不是有人试图冒充远程主机
非法入侵之后,从本地机器的$HOME/.ssh/known_hosts中删除host_key项目就可以恢复连接
了。


9.6 邮件程序
============
邮件系统配置分为三类:

·邮件传输代理(MTA):exim

·邮件工具:procmail、fetchmail、mail...

·邮件用户代理(MUA):mutt

9.6.1 邮件传输代理(Exim)
-------------------------
参阅:

·exim-doc和exim-doc-html软件包
·http://www.exim.org/

使用exim作为邮件传输代理(MTA)。需设置:

/etc/exim/exim.conf 使用“eximconfig”创建及编辑
/etc/inetd.conf 注释掉smtp,将exim作为daemon运行
/etc/email-addresses 添加伪来源地址列表
检查邮件过滤器可使用exim -brw, -bf, -bF, -bV, ... 等等

9.6.1.1 一个收集不存在的邮件地址的容器(Exim)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
在/etc/exim/exim.conf文件(Woody或后继版本)的DIRECTORS部分的末尾(
localuser:director之后)添加一个catch-all director,将所有前面的director无法解析
的地址收集到一起(per Miquel van Smoorenburg):

catchall:
driver = smartuser
new_address = webmaster@mydomain.com

如果要为每个虚拟域指定更精细的处理方法或其它什么的,可在/etc/exim/exim.conf末尾
添加(我没仔细测试过):

*@yourdomain.com ${lookup{$1}lsearch*{/etc/email-addresses} \
{$value}fail} T

接着在/etc/email-addresses中加上一行“*”。

9.6.1.2 为发出的邮件指定发件人地址(Exim)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
可用exim为发出的邮件指定特定的“From:”信头,在/etc/exim.conf文件的末尾编辑:

*@host1.something.dyndns.org \
"${if eq {${lookup{$1}lsearch{/etc/passwd}{1}{0}}} {1} \
{$0}{$1@somethig.dyndns.org}}" frFs

该语句将作用于所有符合*@host1.something.dyndns.org的邮件。

1.在/etc/password中搜索,以确定local part($1)是否为本地用户。

2.如果是本地用户,它将用第一个域($0)中的内容重写地址

3.如果不是本地用户,重写域部分。

9.6.2 邮件工具(Fetchmail)
--------------------------
fetchmail以daemon方式运行,用ISP提供的POP3帐号将邮件收到本地邮件系统。配置:

/etc/init.d/fetchmail
/etc/rc?.d/???fetchmail run update-rc.d fetchmail default priority 30
/etc/fetchmailrc configuration file (chown 600, owned by fetchmail)

在Potato中,有关如何在init.d脚本中配置fetchmail以daemon方式运行的信息,十分混乱
,Woody解决了这个问题。参阅脚本样例目录中/etc/init.d/fetchmail和
/etc/fetchmailrc样例文件。

如果你的邮件信头被ISP的邮件工具以^M污染,可在$HOME/.fetchmailrc中添加“stripcr”
选项:

options fetchall no keep stripcr

9.6.3 邮件工具(Procmail)
-------------------------
procmail是一个本地邮件分发过滤程序。使用时,需要为每个使用它的用户创建
$HOME/.procmailrc,参阅样例目录中的_procmailrc文件。

9.6.4 邮件用户代理(Mutt)
-------------------------
用mutt做用户邮件代理(MUA)与vim结合使用。使用~/.muttrc进行自定义;例如:

# use visual mode and "gq" to reformat quotes
set editor="vim -c 'set tw=72 et ft=mail'"
#
# header weeding taken from the manual (Sven's Draconian header weeding)
#
ignore *
unignore from: date subject to cc
unignore user-agent x-mailer
hdr_order from subject to cc date user-agent x-mailer
auto_view application/msword
....

在/etc/mailcap或$HOME/.mailcap中添加下列内容,就能显示HTML邮件和内嵌的MS Word附
件:

text/html; lynx -force_html %s; needsterminal;
application/msword; /usr/bin/antiword '%s'; copiousoutput;
description="Microsoft Word Text"; nametemplate=%s.doc


9.7 本地化及国家语言支持
========================
Debian是国际化的操作系统,它所支持的语言和地区惯例的数目正在不断增加。接下来的部
分列出了当前Debian对各种差异形式的支持,接着再讨论本地化,该过程负责定制你的工作
环境,根据你所选的语言确定当前系统的输入输出方式,并按照你所在地区的惯例转化日期
、数字、货币格式以及系统中其它相关方面。

9.7.1 定制基础
--------------
定制系统的本地化和国家语言支持包括以下几个方面。

9.7.1.1 键盘
^^^^^^^^^^^^
Debian发布版中包含了二十多种键盘布局方案。在Woody中重新配置键盘可使用:

·dpkg-reconfigure --priority=low console-data # console
·dpkg-reconfigure --priority=low xserver-xfree86 # X4
·dpkg-reconfigure --priority=low xserver-common-v3 # X3

9.7.1.2 日期
^^^^^^^^^^^^
绝大多数Debian软件包都能使用non-US-ASCII字符,它们通过glibc中的locale技术,用
LC_CTYPE环境变量来操作这些字符。

·纯8-bit字符:应用于所有程序中
·其它拉丁字符集(例如:ISO-8859-1或ISO-8859-2):应用于绝大多数程序中
·多字节语言如中文、日文或韩文:应用于较新的应用程序中

9.7.1.3 显示
^^^^^^^^^^^^
X可以显示包括UTF-8在内的许多编码并支持所有的字体。列表中包含了所有的8-bit字体和
16-bit字体诸如中文、日文或韩文。XIM机制支持多字节输入法。参阅〖9.7.8 双语系统的
例子(日本语EUCT和ISO-8859-1)〗

kon2软件包可实现在(S)VGA图形化控制台中显示日文EUC编码。另一个替代品是jfbterm,它
也使用FB控制台。在控制台环境里,必须由应用程序来提供对日文输入的支持。所以要为
Emacs加装egg软件包,可使用日文化的jvim软件包作为Vim环境。

9.7.1.4 翻译
许多在Debian系统中显示的文本信息和文档被翻译成了各种译本,如出错信息、标准程序输
出、菜单以及帮助页面。当前Debian支持德语、西班牙语、芬兰语、法语、匈牙利语、意大
利语、日语、韩语、波兰语、葡萄牙语、汉语以及俄语帮助页面,可通过安装
manpages-LANG软件包实现这些支持(此处LANG代表双位的ISO国家代码。使用apt-cache
search manpages-|less获得可用的unix帮助页面列表。)

要访问NLS帮助页面,用户必须将环境变量LC_MESSAGES设置成相应的字串。例如,要访问意
大利语的帮助页面,需要将LC_MESSAGES设置成it,这时man程序会在/usr/share/man/it/目
录下搜索帮助页面。

9.7.2 locale
------------
Debian支持locale技术。locale机制允许程序按照该地区惯例来提供输出和其它特殊功能如
字符集、日期时间显示格式,货币符号等等。该机制使用环境变量来确定其相关的行为。例
如,假设你同时在系统上安装了美式英语和法语locales,许多程序的出错信息都以双语显
示:

$ LANG="en_US" cat foo
cat: foo: No such file or directory
$ LANG="fr_FR" cat foo
cat: foo: Aucun fichier ou répertoire de ce type

glibc以函数库的形式向程序提供该功能的支持。参阅locale(7)。

9.7.3 激活地区支持能力
----------------------
Debian并不在系统中编译所有可用的locales,检查/usr/lib/locale确定哪个locales(除
了默认的“C”)已在系统上编译安装。如果所需的locale并不在其中,有两个解决办法:

·编辑/etc/locale.gen添加需要的locale,然后以root身份运行locale-gen编译它。参阅
locale-gen(8)以及该帮助页面中“SEE ALSO”一节所列的命令。
·运行dpkg-reconfigure locales可以重新配置locales软件包。如果还没有安装locales,
locales安装程序会调出debconf界面让你选择所需的locales并编译相关数据库。

9.7.4 激活特定locale
--------------------
相关的环境变量按如下次序将特定locale值赋给程序:

1.LANGUAGE:该环境变量由一个用冒号分隔、以优先级排序的地区名称列表组成。仅当
POSIX地区值与“C”地区值相异时才使用到它[在Woody中;在Potato版本中通常其优先级高
于POSIX locale]。(GNU扩展名)

2.LC_ALL:如果为非空值,其值将作用于所有locale项目。(POSIX.1)通常为“”(空值
)。

3.LC_*:如果为非空值,其值将作用于相应的locale项目。(POSIX.1)通常为“C”。

LC_*变量有:
·LC_CTYPE:字符分类和环境转换
·LC_COLLATE:样正命令
·LC_TIME:时间显示格式
·LC_NUMERIC:非货币型数字格式
·LC_MONETARY:货币符号
·LC_MESSAGES:常规信息、诊断消息和交互响应信息的格式。
·LC_PAPER:纸张尺寸
·LC_NAME:姓名格式
·LC_ADDRESS:地址格式和地区信息
·LC_TELEPHONE:电话号码格式
·LC_MEASUREMENT:度量单位(公制或其它)
·LC_IDENTIFICATION:有关地区信息的元数据

4.LANG:如果为非空值且LC_ALL也没有定义,则该值作用于所有没有定义的LC_*地区项目。
(POSIX.1)通常为“C”。

注意,有些应用程序(例如Netscape 4)忽略LC_*设置。

locale程序可显示当前激活的地区设置和可用的locale;参阅locale(1)。(注意:locale
-a将列出系统已知的所有的locales;这并不代表它们都已在系统中编译了!参阅〖9.7.3
激活地区化支持能力〗。)

9.7.5 ISO 8601日期格式
----------------------
名为en_DK(丹麦英语)的locale提供了对国际标准日期格式yyyy-mm-dd(ISO 8601日期格
式)的支持(听起来有点搞笑:-))。它仅工作于ls的控制台屏幕。

9.7.6 US(ISO-8859-1)例子
--------------------------
将下列语句添加到~/.bash_profile:

LC_CTYPE=en_US.ISO-8859-1
export LC_CTYPE

9.7.7 带euro符号的France(ISO-8859-15)的例子
---------------------------------------------
将下列语句添加到~/.bash_profile:

LANG=fr_FR@euro
export LANG
LC_CTYPE=fr_FR@euro
export LC_CTYPE

按〖9.7.1.1 键盘〗中描述的方法,将键盘设置成French "AZERTY"。安装manpages-fr包添
加法语帮助页面。US中的Right-Alt键在Europe中称为Alt-Gr,它与其它键组成的组合键可
用于输出大量特殊字符,例如Alt-Gr+E可以输出欧元符号。

可使用类似的方法配置绝大多数西欧语言环境。

参阅《Debian Euro HOWTO》了解有关对新欧洲货币方面的支持,有关对法语环境的支持请
参阅http://www.debian.org/doc/manuals/fr/debian-fr-howto/。

9.7.8 双语系统的例子(日本语EUCT和ISO-8859-1)
---------------------------------------------
让我们来创建一个双语系统:在X环境里使用ja_JP.eucJP (Japanese EUC,传统的Unix日
语环境)它具有英文消息和ISO类型的日期,在Linux控制台环境使用en_US.ISO-8859-1(
almost ASCII with accented character support)。

○使用〖9.7 本地化及国家语言支持〗中描述的方法添加对日文ja_JP.eucJP locale的支持


○安装Kana-to-Kanji转换系统和字典:
·canna — Local server (free bear license),或
·freewnn-jserver — Network-extensible server (Public Domain)

○安装日文输入系统:
·kinput2-canna — for X, or
·kinput2-canna-wnn — for X, and
·egg — directly works with Emacsen even in console (optional)

○日文兼容终端机:
·kterm — X (classic),
·mlterm — X (very neat, variable font size), and

○添加全部日文字库包。

○按〖9.4.5.1 自定义X会话〗中的方法进行设置。该方法允许用户指定X环境,而不用考虑
X的启动方式(startx、xdm...)

○创建~/.session,用户可通过配置它来指定X环境:

#!/bin/sh
# This makes X work when I su to root.
if [ -z "$XAUTHORITY" ]; then
XAUTHORITY=$HOME/.Xauthority
export XAUTHORITY
fi

# Japanese locale as default, C locale as backup
LANG=ja_JP.eucJP
export LANG
# make sure to over write en_US.ISO-8859-1 used in console
LC_CTYPE=ja_JP.eucJP
export LC_CTYPE
# I want menu message to be English in ASCII :-)
LC_MESSAGES=C
export LC_MESSAGES
# activate input method
kinput2 &
XMODIFIERS=@im=kinput2
export XMODIFIERS
# How about blackbox window manager (lightweight)
exec /usr/bin/blackbox

○在~/.bash_profile中添加如下几行:

LC_CTYPE=en_US.ISO-8859-1
export LC_CTYPE
# For ISO yyyy-mm-dd date display, more natural for Japanese :-)
LC_TIME=en_DK.ISO-8859-1
export LC_TIME

○在~/.muttrc中添加如下几行:

# UTF-8 support is not popular in popular Japanese EMACS environment
# 7 bit encoding of iso-2022-jp is easier for everyone
# default encoding order = us-ascii --> iso-8859-1 --> utf-8
#set send_charset="us-ascii:iso-8859-1:utf-8"
#set allow_8bit=yes
set send_charset="us-ascii:iso-8859-1:iso-2022-jp"
set allow_8bit=no

○激活XIM kinput2 for X应用程序
·在X资源文件.~/Xresources(不知何故,看上去Debian好象在自动配置它)添加
*inputMethod:kinput2。
·某些应用程序(如mlterm)也允许设置*inputMethod:和其它运行时的动态信息(在
mlterm中按下Ctrl-MouseButton-3)。

○用startx或任何显示管理器(xdm、gdm、kdm、wdm...)启动X

○打开日文兼容应用程序:VIM6、(x)emacs21、mc-4.5、mutt-1.4...(通常Emacs是最流行
的平台,尽管我不怎么用它。)

○按“Shift+Space”可切换日文输入法。

亦可参阅《SuSE pages for CJK》
http://www.suse.de/~mfabian/suse-cjk/suse-cjk.html

9.7.9 X下UTF-8的例子
--------------------
将来每个人都要用到它。参阅《The Unicode HOWTO》(
http://www.tldp.org/HOWTO/Unicode-HOWTO.html)

9.7.10 FB控制台下UTF-8的例子
----------------------------
在debian-installer中bterm提供了在FB控制台对UTF-8的支持。

9.7.11 超越locale
-----------------
当你第一次在系统上安装“国家语言环境”(national language environment)时,请注
意使用tasksel或aptitude查看一下,在选择相关语言环境任务项时都有哪些软件包被选上
了,这些选择信息非常有用特别是进行多语言设置时。如果遇到某些关联包与运行良好的系
统上的某些软件发生冲突,就不要安装那些引起冲突的包。由于新装的软件比原来的软件具
有更高的优先级,所以必须用update-alternative结合有关命令让系统恢复到原来状态。

大部分较新的使用glibc2.2的程序都已支持国际化了。所以不必再为诸如基于VIM的jvim等
程序指定loclae,因为X下的vim 6.0版已提供了该功能。事实上,比起另一个版本它显得有
点粗糙,jvim有个版本直接将日文IM(canna)支持编译进去了,而且还集成了大量成熟的日
文特性,很值得你期待:-)

有时为了获得更好的工作环境,仅通过locale来配置程序是不够的。language-env软件包和
set-language-env命令可以大大简化你的工作。

亦可参阅有关国际化的文档《Interoduction to i18n》(
http://www.debian.org/doc/manuals/intro-i18n/),虽然其目标读者为开发人员但对系
统管理员也十分有用。



--------------------------------------------------------------------------------

--

--
※ 来源:.零起点 BBS Zero.cn-bbs.org.[FROM: 220.172.239.*]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店