荔园在线

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

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


发信人: georgehill (New Century New Dream), 信区: Linux
标  题: 第四章 系统配置(下)(转寄)
发信站: BBS 荔园晨风站 (Sat Jan  6 14:45:04 2001), 站内信件

【 以下文字转载自 georgehill 的信箱 】
【 原文由 georgehill.bbs@smth.org 所发表 】
发信人: ruster (尘埃*星辰*领悟), 信区: Linux
标  题: 第四章 系统配置(下)(转寄)
发信站: BBS 水木清华站 (Thu Dec 21 13:36:35 2000)




  4.3 定制内核

  对于Linux系统管理员来说,定制系统内核是一件相当简单的事情,这主要是因为它提
供源代码和编译器。困难之处仅仅是必须理解每一个选项是什么。你可以看到我也不能
完全解释配置内核时的各种选项,一般来说,由于内核配置包含了如此多的东西,你只
要关心和自己有关的东西就可以了。

  4.3.1 配置系统内核

  配置内核的命令是满简单的,不过选项实在是太多了,所以我们强烈建议你使用基于
菜单的配置程序。

  要配置内核,首先必须安装内核的源代码,通常可以使用rpm命令,安装的目标位置是
/usr/src/下面,例如我用2.2.14的内核,源代码就被安装到/usr/src/linux-2.2.14这
个目录下。如果你是从网络上下载的gz或tgz文件,请将它展开的/usr/src目录下。另外
,一般建议建立一个名为/usr/src/linux的符号连接:

  ln –s linux-2.2.12 linux

  然后进入这个目录,内核源代码的目录一般是这样的:

  [openlab]# ls

  COPYING        Makefile        System.map  include  lib      scripts

  CREDITS        README          arch        init     mm       vmlinux

  Documentation  REPORTING-BUGS  drivers     ipc      modules

  MAINTAINERS    Rules.make      fs          kernel   net

  可以有三种启动配置程序的方法:

  make config启动交互式的命令行配置程序

  make menuconfig启动文本菜单形式的配置程序

  make xconfig启动图形界面的配置程序,这个命令必须在X Window下执行,我们将以
这个命令的界面为例子,其他两种配置的内容是一样的,只是输入方式有所不同。



  图4.6 配置内核

  每个菜单选项被按下后都会出现一个子菜单,给出一些选择项,例如:Code manturi
ty level options会给出下面的选择菜单:



  图4.7 内核配置(2)

  设置好了一个子菜单之后,按下next可以进入下一个选单,每个选项都可以用help按
钮取得帮助。对我们而言,下面的一些选择可能是重要的:(注意这里只给出一些主要
的选择项,其他的你可以自己根据help判断,而且那些选项对服务器通常没有多少影响


  Code manturity level options子选单

   Prompt for development and/or incomplete code/drivers(y/n)

  这个选项问你是否有兴趣尝试那些还处在开发测试阶段的内核功能,除非你是Linux的
测试人员,否则选N,因为这些内核功能还不是十分可靠,对于服务器最好不用。

  Processor type and features子选单

   Processor family

  这个选项问你的处理器类型,可以选择从386到Pentium Pro/MMX(Pentium II)在内的
任何一种,但是如果你选择了Pentium处理器,编译出的内核将不能在386/486上运行。
相反,386代码可以在任何可以运行Linux的系统上运行,但是可能无法发挥Pentium II
的全部性能,自己选择合乎自己系统的选项。

  Math emulation 数学协处理器仿真,选否。

  Maximum Physical Memory 设置系统可以使用的最大内存量,缺省是1GB,不过如果你
正好有一台梦幻级x86系统,可能必须将它改成2GB。

  Symmetric multi-processing support,这个选项用于支持多处理器,如果你有两个
以上的处理器,选yes,否则选N。

  Loadable module support子选单

  Enable loadable module support 是否使用可装载模块,选yes,否则无法使用装载
模块功能。

  Kernel module loader 自动装载模块功能,这个功能允许核心在必要时自动装入对应
的模块,不过这样很容易出错,通常应该禁止。

  Set version information on all symbols for modules 这个选项通常禁止。

  General setup子选单

  Network support 网络支持,选yes

  PCI support PCI设备支持,选yes

  Plug and Play 子选单

  Plug and Play support 即插即用功能的支持,由于目前Linux的即插即用特性还不是
很好,通常禁止。

  Block Devices子选单

  这个选单用来设置内核支持的外部存储设备,通常,除了你的服务器上确实存在的设
备之外,其他的设备都可以选N,如果没有什么把握,也可以使用m选项将其编译为可装
载模块。当然你启动Linux用的磁盘的驱动程序必须选Y。

  Network options子选单

  大部分的选项都可以选yes,除了下面的一些选项:

  IP:optimize as router not host 这个选项将按照路由器设置调整你的TCP/IP工作模
式,如果你用Linux作为软件路由器,那么可以选Y,否则选N。

  IP:tunneling 这个选项允许IP隧道,这对早期的的Netware是很重要的一种TCP/IP实
现方式,但今天已经不再需要。如果担心由个别的程序使用这个功能,将它编译为模块


  The  IPX protocol 是否支持IPX协议。如果需要支持老式的netware 3.x或4.x文件服
务,需要打开这个选项,否则禁止。

  Apple Talk DDP 是否支持AppleTalk,选禁止。

  TCP syncookie support 这个选项是一个补丁,用于对付“SYN flood”攻击,选yes


  SCSI support 子选单和 SCSI low-level drivers子选单

  在这两个选单里选择你使用的SCSI控制器和设备类型,通常启动磁盘的驱动程序必须
编译进内核(y)

  Network device support  子选单及相关选单

  在这几个选单里选择你使用的网络适配器类型。通常我们将它们编译成可装载模块(m
)。

  Character devices子选单

  缺省设置通常就已经很好了,不过有一个选项必须注意,即

  Maximum number of Unix98 PTYs in use(0-2048)这个选项可以理解为最大的telnet
进程数(包含ssh,rsh,rlogin等),缺省值是256,这对一般系统已经足够,然而也许你
要开设一个有几百人上站的BBS,在这种情况下,将它提高到2048。

  Filesystems 子选单

  它设置内核中支持的文件系统类型,可以参考第二章的解释。

  Network File Systems子选单

  设置支持的网络文件系统,NFS和SMB文件系统是必须支持的,其他系统可以编译成模
块。

  Partition Types 子选单

  选择系统支持的分区格式。

  Native language Support子选单

  可以将各种语言的支持程序都编译成模块。

  kernel hacking 子选单

  Magic SysRq Key  这个选项允许你通过sysrq(Alt+PrintScreen)来强行控制系统,即
使在系统崩溃之后。除非你准备调试内核,否则选N。

  当全部选项设置完毕后,选择主选单的Save and Exit退回,然后开始编译:

  openlab$ make bzImage

  make bzImage命令将按照你的选择重新编译系统内核源代码并生成核心映像,这需要
一段时间。注意建立启动映像有两个办法,即make zImage或者make bzImage。其中,m
ake bzImage对核心映像进行压缩,由于服务器用到的核心驱动比较多,通常应该选择m
ake bzImage,否则用make zImage可能发生映像文件太大而无法安装的情况。

  下一步是编译模块,使用命令

  openlab$ make modules

  将产生对应的内核模块。

  4.3.2 使用新内核

  编译通过了一个新内核之后,可以用新内核引导系统,这样就可以使用新内核提供的
功能了。

  为了使用新内核进行引导,首先要把编译出的内核模块安装到/lib/modules目录下,
这可以用modules_install选项完成

  [openlab]$ make modules_install

  这个操作必须在root权限下执行。

  然后需要为新的内核创建启动选择,通常我们建议不要用新内核覆盖旧内核,而是用
lilo程序配置一个新的启动选择项,首先我们要把生成的内核映像拷贝出来,这个映像
按照我们的设定应该是

  /usr/src/linux/arch/i386/boot/bzImage

  另外,为了正确地装入模块,下面的文件也是必要的:

  /usr/src/linux/System.map

  将这两个文件拷贝到合适的地方,例如/bootimage,然后在lilo.conf中建立新的启动
项,例如:(加粗体的是增加的内容)

  boot=/dev/hda

  map=/boot/map

  install=/boot/boot.b

  prompt

  timeout=50

  image=/boot/vmlinuz-2.2.5-15

          label=linux

          root=/dev/hda1

          read-only

  image=/bootimage/bzImage

     label=new

     root=/dev/hda1

     read-only

  然后执行lilo程序,显示

  linux *

  new

  表示核心已经安装成功,重新启动,在lilo:提示符下输入new回车,就可以启动新的
内核了。

  在新内核测试确认无误以后,将default改成新内核对应的项,重新运行lilo程序,就
不需要手工引导新内核了。

  4.3.3 从灾难中恢复

  安装在主引导扇区的的Lilo是容易被破坏的,一旦发生这种情况,系统将无法启动,
这也是教科书上一般建议从软盘启动系统的原因之一。但是,如同我们所说的那样,我
们不主张这样做,相反,我们主张准备一张Linux启动盘,然后在万一出现问题时从软盘
引导系统并且进行灾难恢复。

  通常,可以制作标准的Linux软盘系统,然后用软盘启动系统,这需要将软盘做成Lin
ux启动格式,但是更好的办法是将系统引导到DOS下,然后用loadlin.exe程序来引导Li
nux。

  为了达到这个目的,你首先要找到一个能够正确引导系统的内核,根据你的系统中的
/etc/lilo.conf就可以知道目前使用的内核映像是哪一个文件,将它拷贝到一张在DOS下
格式化的软盘。然后到安装Linux的光盘上找到loadlin.exe程序,拷贝到软盘上。

  要使用loadlin,首先用DOS软盘启动系统,然后在包含内核映像的软盘上使用loadli
n.exe,例如你的映像文件为bzImage,而Linux系统的根分区是hda1,则可以使用下面的
语法:

  loadlin.exe bzImage root=/dev/hda1 ro

  ro表示第一趟连接/文件系统的时候使用read-only方式,这也是lilo.conf中使用的方
式。

  执行这一条命令之后,Linux将象平时一样启动,只是使用的是软盘上的内核。启动完
毕之后,只要正确设置/etc/lilo.conf并且重新执行lilo程序就可以恢复lilo了。不过
由于Linux内核建立在保护模式下,所以最好用纯DOS方式启动loadlin,不要使用emm38
6和himem,更不要在windows 95的dos框中执行loadlin。

  另外一种常见的灾难是由于某些原因,系统的启动脚本发生错误,特别是与网络相关
的脚本发生了错误,或是某些网络文件系统损坏等等。如果发生这样的情况,常常必须
进入运行级1来修改系统脚本。

  要想在启动时直接进入某个运行级,可以在lilo:提示符下使用命令行,例如,你的启
动选项中某个启动项为sel,要使用这个启动项的运行级1,在lilo:下输入

  sel 1

  回车后,就会自动进入运行级1。

  运行级1有其特殊的含义,因为它代表“单用户模式”,这个模式启动系统时无需输入
口令就可以获得一个root shell。如果你忘记了超级用户口令,就可以使用这个办法进
入系统更改口令。当然这带来了一些安全性问题,特别是在可能有人接触你的机器时,
解决的方法是为lilo设置口令,见有关安全性的部分。

  还有一种比较可怕的灾难是文件系统损坏,这时只能从包含Linux根文件系统的软盘加
载文件,然后手工安装文件系统了。

  4.4 使用硬盘

  4.4.1 为系统安装新的硬盘

  或迟或早你的硬盘空间总会耗尽,当硬盘空间开始紧张的时候,你可以通过删除文件
腾出一些空间,然而必须存储的文件总是比你能买到的硬盘的容量大一些。在这种情况
下,更有效的方法是为系统添加一块新的硬盘,在笔者写这部分内容的时候,28GB的ID
E和37GB的SCSI硬盘已经成为新的时尚。(PC的最大好处就是你可以在任何有必要的时候
扩展你的系统!)

  如同一般书上建议的那样,SCSI硬盘在服务器方面具有对IDE硬盘的先天优势。不过,
与NT不同,Linux并不十分依赖于SCSI,高性能的磁盘缓冲在很大程度上抵消了IDE的弱
点,因为你可以把买SCSI控制器的钱转用于购买128MB内存。当然,如果你的服务比较繁
重,特别是内存比较紧张而需要使用交换,那么SCSI的性能优势会迅速的体现出来。

  许多服务器主板上带有SCSI控制器,你可以将SCSI硬盘直接连接在上面,否则你需要
一块SCSI控制卡,不过,一定要确认你的Linux内核支持你购买的SCSI控制卡,就我知道
的,Linux对SCSI的支持远不象对以太网卡那样令人满意。然后,为了确保工作,你需要
将SCSI支持加入内核,并且编译相应的SCSI卡驱动程序。

  相对来说,IDE硬盘的安装极其简单,只要确认你的系统BIOS能够识别你的硬盘,将I
DE硬盘正确连接,上电就可以了,而且几乎可以肯定Linux内核会自动识别你的硬盘。

  由于作者假定你有一定的DIY基础,所以不打算处理如SCSI连接,IDE的跳线等等问题
,你可以自己查阅有关的资料,或者最简单的找人给你安装一遍。

  4.4.2 分区和建立文件系统

  如同在DOS和Windows 9x下一样,一个新的硬盘必须通过分区和格式化(在Linux下叫
做“建立文件系统”)才能被Linux所使用。通常我们总是建议将新的分区格式化为ext
2文件系统。

  分区可以使用许多程序来完成,例如fdisk,cfdisk,Disk Druid等等。在安装那一章
我们已经看到了DiskDruid程序和CFDISK程序,这里我们主要介绍的是fdisk。每个Linu
x发行版本都会带有这个程序,而且它的使用虽然不直观,却非常简单。

  要使用fdisk程序,使用命令fdisk [设备名],例如,要给第二个IDE主磁盘分区,使


  fdisk /dev/hdc

  然后出现下面的选项:

  The number of cylinders for this disk is set to 3467.

  There is nothing wrong with that, but this is larger than 1024,

  and could in certain setups cause problems with:

  1) software that runs at boot time (e.g., LILO)

  2) booting and partitioning software from other OSs

     (e.g., DOS FDISK, OS/2 FDISK)


  Command (m for help):

  注意这里的提示信息,这里警告你的柱面数大于1024。Linux可以支持柱面数大于102
4的硬盘,但是启动分区通常必须保留在1024以内,如果你的启动分区太大,那么Lilo程
序可能无法正常安装(在目前的发行版本中的lilo都不能支持超过1024个柱面的启动分
区,如果一定要这样用,你需要去下载新版本的lilo)。

  按下m键并回车可以得到命令列表:

     a   设置活动分区

     b   对磁盘进行BSD类型的分区

     c   切换DOS兼容标志

     d   删除某个分区

     l   列出已知的分区类型

     m   显示这个帮助信息

     n   建立新的分区

     o   清空分区表

     p   显示当前分区形式

     q   放弃并退出

     s   对磁盘进行Sun 风格的分区

     t   改变某个分区的标志

     u   改变显示的单位

     v   校验分区表

     w   存盘并退出

     x   专家模式

  这些命令的含义都十分简单,例如,要建立一个新的分区,使用命令n

  Command (m for help): n

  Command action

     e   extended

     p   primary partition (1-4)

  p就是普通的分区,而e代表扩展分区。如果要建立一个普通的分区,输入p并且回车:

p

  Partition number (1-4):

  输入1,表示使用第一个分区表项,然后将输入起始和结束柱面号,完毕后,返回分区
界面。

  由于普通的分区(主分区)的分区表项只能使用1-4的数值,也就是最多只有四个,这
在许多情况下是不够用的,因此我们通常还要使用扩展分区:

  Command (m for help): n

  Command action

     e   extended

     p   primary partition (1-4)

e

  Partition number (1-4): 1

  First cylinder (1-3467, default 1):

  Using default value 1

  Last cylinder or +size or +sizeM or +sizeK (1-3467, default 3467):

  Using default value 3467

  上述操作把整个硬盘划成了扩展分区,在存在扩展分区时,就可以使用逻辑分区划分
了(类似于DOS的逻辑盘):

  Command (m for help): n

  Command action

     l   logical (5 or over)

     p   primary partition (1-4)

  注意在有扩展分区的时候出现了l选项,这个选项将扩展分区分划为逻辑盘,分区方法
与前面基本上是一样的,区别在于逻辑分区的分区号是从5开始。

  Command action

     l   logical (5 or over)

     p   primary partition (1-4)

l

  First cylinder (1-3467, default 1):

  Using default value 1

  Last cylinder or +size or +sizeM or +sizeK (1-3467, default 3467): +1000M

  上述操作建立了一个1GB的逻辑分区,如此下去可以建立更多的逻辑分区。

  分区结束之后,可以用p命令显示,确认无误后用w命令存盘退出。如果有必要,重新
启动计算机。

  分区正确后,下一步要为Linux建立文件系统,这可以用mkfs命令完成:

  mkfs [-V] [-t 文件系统类型] [-l ] [-c] 分区名

  -V选项输出完整的信息,-l从系统中读入坏块的列表,-c选项用于在建立文件系统的
同时检测磁盘介质。文件系统类型选ext2。

  [openlab]# mkfs -t ext2 -c /dev/hdc1

  mke2fs 1.15, 18-Jul-1999 for EXT2 FS 0.5b, 95/08/09

  Filesystem label=

  OS type: Linux

  Block size=1024 (log=0)

  Fragment size=1024 (log=0)

  32128 inodes, 128488 blocks

  6424 blocks (5.00%) reserved for the super user

  First data block=1

  16 block groups

  8192 blocks per group, 8192 fragments per group

  2008 inodes per group

  Superblock backups stored on blocks:

          8193, 24577, 40961, 57345, 73729,


  Checking for bad blocks (read-only test): done

  Writing inode tables: done

  Writing superblocks and filesystem accounting information: done

  建立了文件系统之后,就可以连接到系统上使用了。

  但是,一般情况下,我们总是希望启动系统时自动挂接文件系统,这可以通过编辑/e
tc/fstab来实现,/etc/fstab是一个用来描述文件系统的文件:

  [openlab]# cat /etc/fstab

  /dev/hda1             /       ext2     exec,dev,suid,rw,usrquota,grpquota
1 1

  /dev/cdrom            /mnt/cdrom              iso9660 noauto,owner,ro 0 0

  /dev/hda2             /usr                    ext2    defaults        1 2

  /dev/fd0              /mnt/floppy             ext2    noauto,owner    0 0

  none                  /proc                   proc    defaults        0 0

  none                  /dev/pts                devpts  gid=5,mode=620  0 0

  它的基本格式是这样:

  设备名  连接点  文件系统类型  选项  备份频度  文件系统检查的趟数

  其中,最后的检查趟数是一个用在fsck中的数值,对于根文件系统,这个值为1,其他
本地文件系统是2,如果设置为0,那么将不检查这个文件系统。至于备份频度栏,只要
设置为1就可以了。显然,cdrom不需要备份,也不需要做完整性检查,所以都是0。

  现在要把新分的这个分区加入进去,设备名是/dev/hdc1,可以随便设置一个连接点,
比如/export,文件系统显然是ext2,选项由于现在还没有设置,可以直接设为default
s,所以只要加入这样一行:

  /dev/hdc1   /export ext2   defaults  1 2

  然后建立/export目录,重新启动计算机就可以使用新的硬盘了。如果你觉得重新启动
太复杂,也可以使用mount –a命令。

  4.4.3 交换分区

  通常很少需要更改交换分区的大小,或是使用新的交换,无论如何我们还是解释一下
,建立swap分区的工作和建立常规文件系统几乎是一样的,仅有两点区别:第一个区别
是,建立swap分区的办法是,首先建立一个常规的Linux分区:

  fdisk /dev/hda2

  …………

n

  # fdisk /dev/hda1

  Command (m for help):

  Command (m for help): n

  Command action

     e   extended

     p   primary partition (1-4)

p

  Partition number (1-4):4

  First cylinder (46-3467, default 1): 46

  Last cylinder or +size or +sizeM or +sizeK (46-3467, default 3467): 353

  接下来,我们要把这个分区定义成一个交换分区,这需要用t命令修改分区标志:

  Command (m for help): t

  Partition number (1-4): 4

  Hex code (type L to list codes):

  会让你输入16进制的分区类型代码,如果你对分区代码不熟悉,输入L命令察看:

  Hex code (type L to list codes): L


   0  Empty           17  Hidden HPFS/NTF 5c  Priam Edisk     a6  OpenBSD

   1  FAT12           18  AST Windows swa 61  SpeedStor       a7  NeXTSTEP

   2  XENIX root      1b  Hidden Win95 FA 63  GNU HURD or Sys b7  BSDI fs

   3  XENIX usr       1c  Hidden Win95 FA 64  Novell Netware  b8  BSDI swap

   4  FAT16 <32M      1e  Hidden Win95 FA 65  Novell Netware  c1  DRDOS/sec
(FAT-

   5  Extended        24  NEC DOS         70  DiskSecure Mult c4  DRDOS/sec
(FAT-

   6  FAT16           3c  PartitionMagic  75  PC/IX           c6  DRDOS/sec
(FAT-

   7  HPFS/NTFS       40  Venix 80286     80  Old Minix       c7  Syrinx

   8  AIX             41  PPC PReP Boot   81  Minix / old Lin db  CP/M / CTO
S / .

   9  AIX bootable    42  SFS             82  Linux swap      e1  DOS access

   a  OS/2 Boot Manag 4d  QNX4.x          83  Linux           e3  DOS R/O

   b  Win95 FAT32     4e  QNX4.x 2nd part 84  OS/2 hidden C:  e4  SpeedStor

   c  Win95 FAT32 (LB 4f  QNX4.x 3rd part 85  Linux extended  eb  BeOS fs

   e  Win95 FAT16 (LB 50  OnTrack DM      86  NTFS volume set f1  SpeedStor

   f  Win95 Ext'd (LB 51  OnTrack DM6 Aux 87  NTFS volume set f4  SpeedStor

  10  OPUS            52  CP/M            93  Amoeba          f2  DOS second
ary

  11  Hidden FAT12    53  OnTrack DM6 Aux 94  Amoeba BBT      fd  Linux raid
 auto

  12  Compaq diagnost 54  OnTrackDM6      a0  IBM Thinkpad hi fe  LANstep

  14  Hidden FAT16 <3 55  EZ-Drive        a5  BSD/386         ff  BBT

  16  Hidden FAT16    56  Golden Bow

  从这个可以看到,Linux交换分区的代码是82,因此输入82:

  Hex code (type L to list codes): 82

  Changed system type of partition 4 to 82 (Linux swap)

  Command (m for help):

  然后用w命令写盘退出,交换分区就被定义了。

  第二个区别是,我们在建立了新的交换分区后,要使用mkswap命令将它制作成一个交
换分区:

  mkswap [-c] [分区名]

  -c参数的意义仍然是检查磁盘介质。

  例如:

  [openlab]# mkswap -c /dev/hda14

  Setting up swapspace version 0, size = 131567616 bytes

  在mkswap之后,就可以使用交换分区了。这可以用swapon和swapoff命令控制,不过,
一般我们总是希望系统启动的时候自动激活交换分区,因此还是需要编辑/etc/fstab文
件,对于swap分区,主要的区别是连接点和文件系统类型都应该设置成swap,而且显然
swap分区不需要fsck和备份,所以可以添加这样一行:

  /dev/hda14  swap swap defaults  0 0

  重新启动机器,或者执行swapon 命令,swapon [分区名]可以打开某个分区上的交换
,swap –a将打开/etc/fstab中定义的所有交换。

  如果要关闭某个分区上的交换,使用swapoff [分区名],全部关闭的命令是

  swapoff –a。

  4.5 打印机和其他设备

  4.5.1 配置打印机

  配置打印机是一件比较讨厌的事情,原因之一在于UNIX传统上不是象windows那样直接
处理原生的打印资料,而是试图使用PostScript打印机。

  第一个问题是所谓的“打印过滤器”,如果你的打印软件输出的是能够被你的打印机
直接理解的数据,那么UNIX只要简单地把它发送到打印端口就行了,Windows 95就是这
么干的,驱动程序会自动将被打印的内容翻译成打印机的点阵信息,然后送出。问题是
UNIX是直接将打印机端口当成文件处理,而UNIX下的软件通常不了解打印机的具体语言
,而是经常输出TeX之类的带格式文档,因此必须先通过一个过滤程序,将格式文档转化
成为打印机能够理解的信息。

  在配置打印机之前,首先必须正确配置并行端口和标准打印机驱动程序。在2.2的内核
中,打印机被作为一个并行端口设备处理,因此编译内核时必须设置并行口和并行口打
印机支持,一般我们将它们编译成模块,即"General Setup"中“Parallel port suppo
rt”以及紧跟着的“PC-style hardware”,还有“Character devices”中的“Parall
el printer support”都被编译成模块(M)。

  正确地编译内核之后,可以使用insmod命令将相关的驱动程序加入内核,对于我们推
荐的编译成模块的情况,需要加入下面几个模块:

  insmod parport

  insmod parport_pc

  insmod lp

  然后你可以看一看打印机设备是否被正确驱动了:

  root@mail /]# cat /proc/devices | more

  Character devices:

    1 mem

    2 pty

    3 ttyp

    4 ttyS

    5 cua

    6 lp

    7 vcs

  当然也可以用dmesg命令看一看核心信息。

  上面是用模块的方式驱动,也可以将驱动程序直接编译进入内核,需要的支持选项仍
然是前面那几个,但是要注意编译好的内核映像需要明确地说明支持方式,这可以在/e
tc/lilo.conf的有关段落中加入

  append="parport=0x378,lp=parport0"

  再运行lilo。

  装入了并行端口驱动之后,可以开始配置打印机了。我们首先使用图形界面下的prin
ttool来解释一下打印机的配置,这个程序包含在RedHat的发行光盘中,在图形界面下执
行printtool &,出现下面的界面:



  图4.8 printtool

  按下Add按钮添加打印机:



  图4.8 选择打印机

  选择local printer并单击ok,printtool将试图去查询端口并且确定是否有打印机存
在,然后出现下面的选单:



  图4.1 配置打印机型号

  其中,Input Filter用来选择过滤器的型号,你可以按下select按钮来选择自己使用
的打印机类型,Print Device则是打印机连接的端口,如第一个并口就是/dev/lp0。

  设置完毕后,printtool将建立一个/etc/printcap文件,这个文件就是打印机的配置
文件,例如,我们现在得到的/etc/printcap文件是:

  [openlab]# cat printcap

  # /etc/printcap

#

  # Please don't edit this file directly unless you know what you are doing!

  # Be warned that the control-panel printtool requires a very strict format
!

  # Look at the printcap(5) man page for more info.

#

  # This file can be edited with the printtool in the control-panel.


  ##PRINTTOOL3## LOCAL epson 60x60 letter {} Epson24 Default {}

  lp:\

          :sd=/var/spool/lpd/lp:\

          :mx#0:\

          :lp=/dev/lp0:\

          :if=/var/spool/lpd/lp/filter:

  前面的都是提示行,\是续行标志,各个定义项之间用冒号分开,两个冒号之间如果为
空的话可以合并,也就是这个文件实际只有一行,即:

  lp:sd=/var/spool/lpd/lp:mx#0:sh:lp=/dev/lp0:if=/var/spool/lpd/lp/filter:

  开始处的lp定义了这个打印机的名字,即lp,然后sd定义spooling directory,这个
含义对于了解假脱机打印的用户是熟知的,UNIX将打印作业排队放到后台,存储成文件
的形式,然后按顺序在空闲时间打印,这个文件序列称为“打印队列”,而sd定义打印
队列存放的目录。由于系统中可能有不止一台打印机,这个选项是必须的。

  mx是“最大打印文件的长度”,你可以将它设置成为一个合理的数值,这样可以避免
一些新手做出愚蠢的打印二进制文件之类的事情,数值要以类似于mx#10000之类的办法
给出,如果你给出的是mx#0,那就意味着关闭这个检测功能(一个傻瓜也许会在一次作
业中用光你的打印纸!)。

  lp=给出的是打印机的设备名,如/dev/lp0,/dev/lp1等等。

  最后,if=/var/spool/lpd/filter定义了一个过滤器,过滤器必须是可执行的文件,
当UNIX打印时,文件首先被过滤器转换,然后再传送到打印机。显然,如果你打印的是
纯文本,那么根本没有必要使用过滤器。在一般的情况下,由于我们用Linux打印机系统
是为局域网上的Windows 9x系统提供打印服务,而Windows输出的已经是打印机能够直接
接受的字节流,所以你可以不使用过滤器(将这一栏删除)。

  如果你需要在Linux系统下打印文档,那么你就要关心过滤器问题了。通常的Linux下
的软件产生的是PostScript文档,但是许多打印机并不能直接解释PostScript文档,所
以必须用某种过滤器程序来处理,例如GhostScript,这个程序能够将PostScript文件转
换为打印机能够接受的原生数据。

  要使用GhostScript,需要首先确认GhostScript能够支持你的打印机,使用gs –hel
p命令可以显示当前的GhostScript能够支持的打印机型号,例如,HP LaserJet III系列
的驱动程序是ljet3,然后你可以写一个这样的打印过滤器:

  [openlab]$cat /var/spool/lpd/lp/filter

  SENDEOF=

  PAPERSIZE=a4

  DEVICE=ljet3

  RESOLUTION=360x360

  nenscript  | gs –q –sDEVICE=$DEVICE \

   -r$RESOLUTION \

  -PAPERSIZE=$PAPERSIZE \

  -sOutputFile=-

  这个文件的内容一目了然,由于ghostscript程序只能处理PS文件,所以纯文本必须先
转换为PS。其中nenscript能够将文本文件转换成为PS文件,再通过GhostScript打印出
来,中间使用了管道操作,-OutputFile=-是说直接将gs的输出送到标准输出,而过滤器
的输出缺省已经指向打印机。然后,设置过滤器为if=/var/spool/lpd/lp/filter。

  过滤器可以使用if或者of来定义,但我们主张全部使用if,如果你对if和of的具体概
念感兴趣,请参考有关文档。

  printtool程序通常对于一般系统的配置已经足够好,但是我们发现在最新的RedHat
6.1中,printtool经常发生找不到打印机的情况(可能是内核配置的问题),在这种情况
下,你手工建立一个/etc/printcap文件就可以了。

  在建立了printcap文件并且打印机工作无误之后,就可以使用打印机了,Linux使用的
是BSD打印系统,为了启用打印机,需要启动/usr/sbin/lpd程序,这是一个守护程序,
用来在后台打印文档。接下来,你可以使用lpr程序打印一个测试文档,例如一个小的文
本文件:

  lpr –P[打印机名] [文件名]

  打印机名就是在/etc/printcap中定义的打印机名字。如果不使用-P选项,lpr首先看
是否存在$PRINTER环境变量,如果有就使用,否则使用缺省打印机lp。

  另外的经常使用在/etc/printcap里面的表达式是af和lf,af对用户进行记账,如:af
=/var/log/printacct:将在/var/log/printacct中记录每个用户打印了多少东西,而lf
则是出错记录,如:lf=/var/err/print_err:。

  4.5.2 其他可能的设备

  前面我大量使用了X Window,笔者希望不要给大家一种错误的印象,即Linux的配置需
要使用X Window,相反,大部分配置工具是不需要图形的,(printtool是个例外)。而
且,你总是可以手工编写配置文件。所以,我们一直没有将图形卡作为重要的设备。另
外,X Window的实现使得你可以在远程使用X,所以图形卡通常并不是很重要。

  另外的设备之一是接在串行口上的终端,笔者从未在Linux系统上安装过这类产品,所
以也无法对你说什么,而且我怀疑是不是真的有人用Linux当主机,这在价格上未免说不
过去了。

  调制解调器应该是最重要的外接设备了,通常我们使用调制解调器是用来拨号上网或
者作为拨号服务器,这两种功能的设置我们将在后面介绍。

  4.6 安装应用程序

  下面我们来解释如何在Linux系统中安装软件,例如如何安装现成的应用程序,或者编
译公开源代码的应用程序。事实上,由于Linux应用程序可以以源代码或者目标程序的方
式提供,所以有多种提供软件包的方法,最常用的两种方法是rpm和tgz。

  4.6.1 rpm程序

  rpm是一种将软件打包发行并且实现自动安装的程序,目前,大部分Linux发行版本都
使用rpm程序来管理软件的安装和拆除,例如RedHat,Turbo Linux,Corel Linux等等。
对于个别没有提供rpm程序的发行版本,你可以自己下载rpm程序并且进行编译。

  需要用rpm安装的软件包通常是一些打包文件,后缀名是.rpm。rpm程序可以对这种程
序包进行安装,卸载,升级和维护。

  Rpm程序的第一个功能是安装应用软件,例如,在当前目录下有一个apache-1.3.6-4.
rpm软件包,那么安装它的命令是

  rpm –i apache-1.3.6-4.rpm

  -i开关用来安装应用软件,如果你想看到更完整的安装信息,可以同时使用-v和-h选
项:

  rpm –ivh apache-1.3.6-4.rpm

  这两个选项将在安装的同时显示软件的名称和安装进度。

  rpm程序能够在安装程序的同时检查软件包的相互依赖关系,并且检验软件之间的文件
冲突,如果发现冲突或者需要的软件包没有安装,或者已经安装了其他版本的软件包,
就会报错并退出。

  对于需要升级旧版本软件的情况,使用-U选项,例如,已经安装了Apache 1.2.1的系
统上再安装1.3.6,那么需要执行

  rpm –U apache-1.3.6-4.rpm

  同样可以使用-v和-h选项。

  偶尔你可能会碰到想要不顾文件冲突或者版本冲突而想强行安装应用程序的情况,这
种情况下可以使--force选项,如:

  rpm –i --force apache-1.3.6-4.rpm

  类似的还有两个选项--nodeps 和--replacefiles。-nodeps是不检查相互依赖关系,
--replacefiles是自动强制替换文件。

  另外一个有趣的用法是可以用rpm从ftp server上安装应用程序,例如

  rpm –i ftp://myserver.com/apache/apache-1.3.6-4.rpm

  rpm程序的第二个标准用法是卸载软件包,这可以用-e选项,例如,删除apache-1.3.
6的命令是

  rpm –e apache

  注意删除软件包的时候使用的软件包的名字不包含版本号。

  同样,删除软件包也会引起rpm的软件包依赖性验证,如果你想删除的软件包被别的软
件包使用就会出错。--nodeps选项仍然用于禁止依赖性检查。

  下一个常用的功能是对软件包进行查询,这是通过-q选项来完成的,例如,要查阅当
前是否安装了apache软件包,版本是什么,可以使用命令(注意没有版本后缀)

  rpm –q apache

  会显示当前安装的apache rpm的文件名。如果要查询当前安装的所有软件包,使用-a
选项:

  rpm –a

  有时你想知道某个文件是什么软件包安装上去的,这时可以使用-f选项,例如,要查
出/etc/httpd/httpd.conf属于那个软件包,执行

  rpm –qf /etc/httpd/httpd.conf

  另外的工作是查询某个软件包所包含的文件,这可以使用-qpl选项,如

  rpm –qpl apache-1.3.6-4.rpm

  其中,l选项的含义是建立类似于ls –l的文件列表输出,类似的还有-i,-d和-c,例


  rpm –qpi apache-1.3.6-4.rpm

  显示这个软件包的版本和开发人员信息。

  rpm –qpc apache-1.3.6-4.rpm

  显示软件包中的配置文件清单

  rpm –qpd apache-1.3.6-4.rpm

  显示软件包中的文档列表。

  最后一个常用的功能是校验软件包的完整性,命令是-V。例如,检验某个软件包的文
件是否正确,使用

  rpm –V apache

  想检查某个安装好的文件和包中的文件是否一致,使用-Vf,例如

  rpm –Vf /usr/sbin/httpd

  想检查某个包安装到系统上的文件是否完全正确(和包比较),使用-Vp,如

  rpm –Vp apache-1.3.6-4.rpm

  4.6.2 编译应用程序

  尽管rpm程序带来了很多好处,但是由于各种原因,仍然难免发生在某个系统上编译出
的应用程序在其他系统上不能运行的情况。最常见的情况是运行库的不同,例如,现在
大部分Linux上的应用程序基于GLIBC(GNU GCC编译器使用的运行库),结果是没有包含
正确的GLIBC版本的Linux就无法使用这些目标代码,这种互相不兼容是UNIX传统的一大
体现。幸运的是,所有Linux都基于共同的操作系统内核(内核版本不同引起的冲突除外
)和相同的编译器(GNU GCC)。而且Linux下的应用程序是基于GNU协议的,因此你通常
总是可以重新编译源程序,得到一个可以使用的版本。

  要编译应用程序,首先必须拿到应用程序的源代码。一般来说,各个Linux厂商都会提
供它的发行版本中各种应用程序的源代码,实在不行的话你也可到网上去下载。

  下载下来的源代码有各种形式,最常见的是rpm,其后缀名是.src.rpm,可以象普通的
rpm文件一样安装,安装时,rpm程序一般会把源代码拷贝到/usr/src/redhat/SOURCE下
(也可能有其他的目录名,你自己到/usr/src下看一下),通常这些源代码安装时并没
有解压,是一些在/usr/src/redhat/SOURCE下后缀名为.tgz或.tar的文件。另外,也可
能你下载的源代码本身就是.tgz或者.tar.gz形式,那么就可以直接进行下一步,不需要
安装了。

  .tgz或者.tar.gz就是.tar的压缩格式,可以用gzip程序进行展开:

  gzip –d apache-1.3.6.tgz

  或者

  gzip –d apache-1.3.6.tar.gz

  将会将其还原为apache-1.3.6.tar文件,然后

  tar xvf apache-1.3.6.tar

  将这个程序完全展开成为源代码。关于tar和gzip程序的详细说明见后面“日常维护”
部分。

  进入到展开的目录apache-1.3.6,然后执行

  ./configure

  几乎所有的源程序都会包含这个程序,通常,在发行源代码时,开发者会写这个名为
configure的脚本,以便自动确定诸如操作系统类型,编译器的版本等等重要的信息。这
个脚本将生成关键性的Makefile文件。(然而,也有个别开发者会把这个工作留给你自
己,这样的话,他一般会给你一个范例性的Makefile文件,并且给出足够的说明,你可
以在这个文件上修改使之适合你的系统)另外,大部分程序的configure程序包含一些参
数,可以设置程序安装运行的路径,程序的运行库等等信息。一般你可以使用-help参数
来察看这些参数的用法。

  然后执行

  make

  GNU的make程序将自动编译所有源代码。

  最后,在编译完毕之后,通常开发者会设计自动安装程序,这可以执行

  make install

  完成。

  为了兼容性的原因,大部分源代码在编译后,目标程序的缺省安装路径是/usr/local
,相应地,配置文件的位置也变到了/usr/local/etc,/usr/local/etc或者/usr/local
/xxxx/etc等(xxxx是被编译的应用程序的名字),通常你可以用configue的选项设定这
些目录,或者干脆按照新的路径进行配置。

  个别比较简单的软件只有一个运行文件,例如joe程序,那么就不提供安装命令,你只
要自己把编译出的可执行程序拷贝到/usr/bin就万事大吉了。

  上面的操作是编译90%Linux程序的基本步骤,不过,必须记住,这只是一种习惯而已
,如果这样的动作不起作用,那也没有什么奇怪的,那你就的研究软件的文档了。还有
个别的程序只有一个.c文件,那就直接用gcc编译程序编译他就可以了。

  gcc编译程序的用法是

  gcc –o [目标文件名] [源文件名]

  例如,有一个somesoft.c,你想编译这个程序,编译出的执行程序的名字叫soft,那
么执行

  gcc –o soft somesoft.c

  就可以了。

  由于Linux的特性,软件开发者会不断地推出新的patch,通常,这些patch会用在源代
码上修改的方式推出,表现就是一些.patch文件,可以用patch程序来使用这些patch,
例如,我得到了一个关于apache的patch程序,名字叫tok.patch,进入apache的源代码
展开的目录,执行

  patch –p0 < tok.patch

  就可以了。关于patch命令的情况,参考日常管理的部分。

  4.6.3 其他

  还有一些其他的软件包安装程序,例如pkgtool和deb安装程序,说实话这些程序都很
蠢,而且现在大部分Linux厂商都在走向rpm,甚至许多其他的UNIX厂商也在考虑使用rp
m,当然,像sun那样的坚持使用愚蠢的pkgtool的公司也是有的。但是我们不打算介绍这
种东西了。唯一必须指出的是.tgz或是.tar.gz这种直接压缩的软件包还是经常有人使用
的,如同我们刚才说的,这样的压缩包可以先用gzip解压再用tar展开,另外,也可以使
用tar的z选项直接展开:

  tar zxvf apache-1.3.6.tgz



--
当我越过无尽虚空的时候,我看见星辰的欲望,光荣和毁灭,这是光辉世界的宿命,
一切的一切,最终必将落入黑暗和虚无。
所以,我随着星光飞翔,去逃脱必然的终结,也许有一天,我将回到世界的原初,
等待新的星辰的诞生。
尘埃是星的起源,星的终结。


※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.112.90.20]
--
※ 转载:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.1.115]


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

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店