Duangw

开发机

操作系统版本:Slackware 11.0

索引:

  1. 分区
  2. 安装一个基础系统
  3. 安装帮助包
  4. 安装编辑器
  5. 安装文件比较工具
  6. 安装文件打开查看工具
  7. 安装网络工具包
  8. 安装库文件
  9. 安装开发工具包
  10. 安装字符界面浏览器
  11. 配置网络
  12. 防火墙配置
  13. 设置一些内核参数
  14. 安装checkinstall
  15. 安装splint
  16. 安装grub
  17. 制作新内核
  18. 安装zhcon
  19. 制作支持ipsec的内核

1.分区

 

2.安装一个基础系统

操作的一个理念是只安装需要的软件,力求做到“宁缺勿滥”,因为多余的软件包,只会占用更多的空间,增加更大的风险。

第一次安装的软件包全部在a目录下,采用expert模式安装。软件包列表如下:

  1. aaa_base-11.0.0-noarch-2
  2. aaa_elflibs-11.0.0-i486-9
  3. bash-3.1.017-i486-1
  4. bin-11.0-i486-3
  5. bzip2-1.0.3-i486-3
  6. coreutils-5.97-i486-1
  7. cxxlibs-6.0.3-i486-1
  8. dcron-2.3.3-i486-5
  9. devs-2.3.1-noarch-25
  10. e2fsprogs-1.38-i486-2
  11. etc-11.0-noarch-2
  12. findutils-4.2.28-i486-1
  13. gawk-3.1.5-i486-3
  14. gettext-0.15-i486-1
  15. glibc-solibs-2.3.6-i486-6
  16. glibc-zoneinfo-2.3.6-noarch-6
  17. grep-2.5-i486-3
  18. gzip-1.3.5-i486-1
  19. infozip-5.52-i486-1
  20. kernel-modules-2.4.33.3-i486-1
  21. less-394-i486-1
  22. lilo-22.7.1-i486-2
  23. logrotate-3.7.4-i486-1
  24. module-init-tools-3.2.2-i486-2
  25. pkgtools-11.0.0-i486-4
  26. procps-3.2.7-i486-1
  27. sed-4.1.5-i486-1
  28. shadow-4.0.3-i486-13
  29. slocate-3.1-i486-1
  30. sysklogd-1.4.1-i486-9
  31. sysvinit-2.84-i486-69
  32. tar-1.15.1-i486-2
  33. utempter-1.1.3-i486-1
  34. util-linux-2.12r-i486-5

使用lilo作为引导工具,安装在MBR中,安装在引导分区上会启动失败,原因不详。如果手头有grub的安装包,也可不用lilo,但方法要繁琐些,需要chroot,执行grub命令等。

有个偷懒的方法。由于以后所有系统都是从基础系统开始的,在硬件配置一致的情况下,可以备份此时的硬盘文件linux.vmdk,以后安装新的虚拟机时,可以用该文件覆盖新系统空白的硬盘文件,这样就可以直接建立一个基础系统,而不用再重复如上两步。

 

3.安装帮助包

基础系统可以启动并正常使用,但针对具体应用,缺少许多软件包。根据不同应用的需求,还需要安装相关的软件。

开发平台中,使用man、info等帮助是必须的。为此,安装如下软件包:

  1. ap/man-1.6c-i486-2
  2. ap/man-pages-2.39-noarch-1
  3. ap/groff-1.19.2-i486-1
  4. ap/texinfo-4.8-i486-1

 

4.安装编辑器

vi作为标准的全屏文本编辑器,是不可或缺的,这里使用的是vim。

 

5.安装文件比较工具

在开发过程中,尤其在使用了版本控制系统后,对文件不同内容的比较就是很常见的操作了。

 

6.安装文件打开查看工具

有时,我们需要知道一个文件当前是被谁打开的。尤其是在网络环境下,想知道一个套接口的打开者,则该工具就非常有用:

 

7.安装网络工具包

一些用到的网络工具:

  1. n/mailx-12.1-i486-1
  2. n/tcpip-0.17-i486-39
  3. n/iptables-1.3.5-i486-2
  4. n/tcpdump-3.9.4-i486-2
  5. n/openssl-0.9.8d-i486-1
  6. n/openssh-4.4p1-i486-1
  7. n/gnupg-1.4.5-i486-1

注意,由于mailx依赖于ssl加密库,如果不安装openssl-0.9.8d-i486-1,则要安装a/openssl-solibs-0.9.8d-i486-1。

 

8.安装库文件

一些开发中涉及的基础库:

  1. l/glibc-2.3.6-i486-6
  2. l/glibc-i18n-2.3.6-noarch-6
  3. l/ncurses-5.5-i486-1
  4. l/zlib-1.2.3-i486-1

 

9.安装开发工具包

作为开发平台,这些工具就是你吃饭的家伙:

  1. d/autoconf-2.60-noarch-1
  2. d/automake-1.9.6-noarch-1
  3. d/m4-1.4.6-i486-1
  4. d/make-3.81-i486-1
  5. d/binutils-2.15.92.0.2-i486-3
  6. d/gcc-3.4.6-i486-1
  7. d/bison-2.1-i486-1
  8. d/flex-2.5.4a-i486-3
  9. d/cvs-1.11.22-i486-1
  10. d/gdb-6.5-i486-1
  11. d/libtool-1.5.22-i486-1
  12. d/perl-5.8.8-i486-3
  13. d/kernel-headers-2.4.33.3-i386-1
  14. d/gettext-tools-0.15-i486-1

当前只使用C和Perl两种语言。

 

10.安装字符界面浏览器

由于没有安装XWindow,无法使用图形界面,故安装字符界面的lynx,以便在一些场合,可以查看html文件。

 

11.配置网络

执行netconfig配置网络,也可手工编辑配置文件。注意的是虚拟机的网卡需要安装模块,当netconfig提示时,选择yes即可。

netconfig只能配置一个网卡,其余的需要编辑配置文件/etc/rc.d/rc.inet1.conf。

机器名:develop

域名:copyleft.net

IP地址:

使用ping和tcpdump命令测试网络配置的正确性。

 

12.防火墙配置

网络启动以后,机器都处于一个危险的环境中,进行一些安全方面的设置是非常必要的。

首先需要配置就是Linux自带的防火墙netfilter,通过iptables命令进行设置。

不同角色的机器需要不同设置的防火墙,为此提供一系列的iptables脚本模板,根据具体环境选择模板,再按实际情况进行更改使用。目前有这么些模板:

开发机相当于一台客户机,故使用rc.iptables-client.ref模板。模板说明如下(实际文件不含说明信息,放在/newpkg下):

#!/bin/sh
# Start/stop/restart my iptables configuration for workstation.
#

start() {

iptables -F

# 缺省策略设置为禁止一切数据:
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

# 对于本地loopback接口,不做限制:
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# 虽然分片包有存在的理由,但在当今的网络现状下,已经很少了。分片出现更多
# 的是源于攻击,所以禁止分片包:
iptables -A INPUT -f -j DROP

# 作为客户机(桌面),我们可以访问任何地方,不应做限制。所以从本机发出的连
# 接都是允许的,相应的应答包也可进入本机:
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED \
-j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED \
-j ACCEPT

# 目前只提供ssh接入服务,相应的应答数据已经包含在上面的规则中,所以不需要
# 再添加一条OUTPUT规则:
iptables -A INPUT -p tcp --dport ssh -m state --state NEW \
-j ACCEPT

# 允许ping数据包,这纯粹是测试需要,实际应用中不应该存在:
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

# other

}

resume_all() {

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

}

stop() {

iptables -F

}


case "$1" in
'start')
    start
    ;;
'stop')
    stop
    resume_all
    ;;
'restart')
    stop
    start
    ;;
*)
    echo "usage $0 start|stop|restart"
esac

需要注意的是restart功能,一般实现都是先stop,然后start。如果stop功能取消了所有限制,那么在start启动之前,就会有一个时间空间,使机器在无防火墙监管之下,这是很危险的。为此,修改了stop的内容,额外提供一个resume_all()函数,以避免这种情况。

把模板脚本放到/etc/rc.d/目录下,改名为rc.iptables:

# cp /newpkg/rc.iptables-client.ref /etc/rc.d/rc.iptables

修改/etc/rc.d/rc.S文件,在末尾添加运行rc.iptables的内容。为此,也提供了一个模板rc.S.ref,把模板内容粘贴到rc.S的末尾即可。模板内容如下:

# If there is my iptables script, run it before network up.
if [ -x /etc/rc.d/rc.iptables ]; then
  . /etc/rc.d/rc.iptables start
fi

防火墙要在网络接口启动之前运行,否则就会留下时间空间,这就是脚本为什么放在rc.S中的原因,在rc.M中会启动网络接口。

 

13.设置一些内核参数

有几个内核参数需要设置一下,以避免潜在的网络攻击。同样也提供了一个模板rc.sysctl.ref

#!/bin/sh
# Start/stop/restart my some network kernel parameters.
#

start() {
    echo "enable tcp_syncookies"
    echo 1 > /proc/sys/net/ipv4/tcp_syncookies

    echo "disable accept_redirects"
    for i in /proc/sys/net/ipv4/conf/*/accept_redirects; do
        echo 0 > $i
    done

    echo "disable accept_source_route"
    for i in /proc/sys/net/ipv4/conf/*/accept_source_route; do
        echo 0 > $i
    done

    echo "enable rp_filter"
    for i in /proc/sys/net/ipv4/conf/*/rp_filter; do
        echo 1 > $i
    done
}

stop() {
    echo "disable tcp_syncookies"
    echo 0 > /proc/sys/net/ipv4/tcp_syncookies

    echo "enable accept_redirects"
    for i in /proc/sys/net/ipv4/conf/*/accept_redirects; do
        echo 1 > $i
    done

    echo "enable accept_source_route"
    for i in /proc/sys/net/ipv4/conf/*/accept_source_route; do
        echo 1 > $i
    done

    echo "disable rp_filter"
    for i in /proc/sys/net/ipv4/conf/*/rp_filter; do
        echo 0 > $i
    done
}


case "$1" in
'start')
    start
    ;;
'stop')
    stop
    ;;
'restart')
    stop
    start
    ;;
*)
    echo "usage $0 start|stop|restart"
esac

把模板文件复制到/etc/rc.d/目录下,改名为rc.sysctl:

# cp /newpkg/rc.sysctl.ref /etc/rc.d/rc.sysctl

编辑/etc/rc.d/rc.M,将脚本加入到rc.inet2的前面。网络接口启动以后有些参数设置才有效,所以不能象iptables那样在rc.S中进行,在网络接口启动后,网络服务启动(rc.inet2)前设置是一个不错的地方。有模板rc.M.ref可以参考:

# Initialize some networking parameters.
if [ -x /etc/rc.d/rc.sysctl ]; then
  . /etc/rc.d/rc.sysctl start
fi

另外有一个参数是关于IP转发的,Slackware提供了一个脚本/etc/rc.d/rc.ip_forward来打开这个功能。对于网关需要此功能,而客户机是不需要的,所以,确保rc.ip_forward没有执行权限。

 

14.安装checkinstall

checkinstall是一个很好的工具,可以方便的制作Slackware、Redhat等安装包。但该工具以前有些bug,在处理符号连接时不是那么可靠,导致一度被打入冷宫,改用Slackware自带的makepkg软件来制作。然而,makepkg也不是那么如意。令人高兴的是,新版本的checkinstall解决了存在的问题。现在决定再次启用checkinstall!

附带说明一下makepkg的使用:

在软件编译完成,进行make install安装之前,通过makepkg打包,如:

# make DESTDIR=/tmp/splint install
# cd /tmp/splint
# makepkg splint-3.1.1-i386-1.tgz
# installpkg splint-3.1.1-i386-1.tgz

这里可能存在的问题是:DESTDIR不是所有的Makefile都认帐,遇到这样的Makefile时,就不会在临时目录下生成文件,而是直接安装了。除了DESTDIR,有的实现是prefix=/tmpdir、有的是INSTALL_PREFIX=/tmpdir等等,五花八门。比较头疼。

回到checkinstall。

http://asic-linux.com.mx/~izto/checkinstall下载新版本的checkinstall-1.6.1.tgz。

所有的源代码包都统一放在/sources目录下,进行展开编译:

# cp checkinstall-1.6.1.tgz /sources
# tar xzvf checkinstall-1.6.1.tgz
# cd checkinstall-1.6.1
# make
# make install
# checkinstall

把生成的安装包checkinstall-1.6.1-i386-1.tgz放入/newpkg目录下。

以后编译源代码包时,当执行make install时都改成执行checkinstall,以制作安装包,之后再安装。以便也能在别的机器上安装,就不用每次都从源代码开始编译了,而且有些机器是不一定有开发工具的。

 

15.安装splint

在开发中,lint是一个很好的检查工具,但现在一般的linux发行版都没有集成该工具。有一个lint的替代品splint,源代码可以从http://www.splint.org下载。

# cp splint-3.1.1.src.tgz /sources
# tar xzvf splint-3.1.1.src.tgz
# cd splint-3.1.1
# ./configure --prefix=/usr
# make
# checkinstall

把安装包splint-3.1.1-i386-1.tgz放在/newpkg目录下。

安装:

# cd /newpkg
# installpkg splint-3.1.1-i386-1.tgz

 

16.安装grub

作为引导程序,个人更喜欢grub,而且grub在编译测试新内核时比lilo更灵活一些。

ftp://alpha.gnu.org/gnu/grub/中获得源代码包,我下载的版本是grub-0.96.tar.gz。

# cp grub-0.96.tar.gz /sources
# tar xzvf grub-0.96.tar.gz
# cd grub-0.96
# ./configure --prefix=/usr
# make
# make check
# checkinstall

把安装包grub-0.96-i386-1.tgz放在/newpkg目录下。

安装:

# cd /newpkg
# installpkg grub-0.96-i386-1.tgz

引导配置(这里安装到主引导记录MBR,以覆盖原来lilo的设置):

# grub-install /dev/hda

编辑生成/boot/grub/menu.lst文件,当然每次都从头写没有必要,事先编写一个模板文件menu.lst.ref,以后通过复制改写就行了。

menu.lst.ref的内容如下:

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making
# changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/sda3
# initrd /initrd-version.img
#
# Normal VGA console
# vga = normal
# VESA framebuffer console @ 1024x768x64k
# vga=791
# VESA framebuffer console @ 1024x768x32k
# vga=790
# VESA framebuffer console @ 1024x768x256
# vga=773
# VESA framebuffer console @ 800x600x64k
# vga=788
# VESA framebuffer console @ 800x600x32k
# vga=787
# VESA framebuffer console @ 800x600x256
# vga=771
# VESA framebuffer console @ 640x480x64k
# vga=785
# VESA framebuffer console @ 640x480x32k
# vga=784
# VESA framebuffer console @ 640x480x256
# vga=769
#
#boot=/dev/sda
default=0
timeout=10
password --md5 $1$eYBMM0$YQM0aAWX836RhrPWEoYId.
title Slackware Linux (2.4.22)
root (hd0,1)
kernel /vmlinuz ro root=/dev/sda3 vga=771
title Dos
rootnoverify (hd0,0)
chainloader +1

本机的menu.lst内容如下:

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making
# changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/sda3
# initrd /initrd-version.img
#
# Normal VGA console
# vga = normal
# VESA framebuffer console @ 1024x768x64k
# vga=791
# VESA framebuffer console @ 1024x768x32k
# vga=790
# VESA framebuffer console @ 1024x768x256
# vga=773
# VESA framebuffer console @ 800x600x64k
# vga=788
# VESA framebuffer console @ 800x600x32k
# vga=787
# VESA framebuffer console @ 800x600x256
# vga=771
# VESA framebuffer console @ 640x480x64k
# vga=785
# VESA framebuffer console @ 640x480x32k
# vga=784
# VESA framebuffer console @ 640x480x256
# vga=769
#
#boot=/dev/sda
default=0
timeout=10
#password --md5 $1$eYBMM0$YQM0aAWX836RhrPWEoYId.
title Slackware Linux (2.4.33.3)
root (hd0,0)
kernel /vmlinuz ro root=/dev/hda3 vga=771

重启机器,确认能够正常引导。

现在就可以卸载lilo了:

# removepkg lilo

上面使用的grub-install是一个shell,如果对grub命令比较熟悉,也可手工来完成引导设置。尤其在初次安装时不用lilo,通过chroot直接安装grub时,手工操作就非常有用。

对于本机的操作序列如下,具体含义可参阅grub文档:

# mkdir /boot/grub
# cp /usr/lib/grub/i386-pc/stage1 /boot/grub
# cp /usr/lib/grub/i386-pc/stage2 /boot/grub
# cp /usr/lib/grub/i386-pc/e2fs_stage1_5 /boot/grub
# grub
  >>root (hd0,0)
  >>setup (hd0)
  >>quit
#

 

17.制作新内核

在测试过程中,编译内核是经常要进行的工作,比如增加vpn功能等。

首先构建一个当前最新版的内核(2.4.34.2),以满足功能需要最小化的原则进行配置,如只支持普通的IDE接口的硬盘和CDROM;只使用字符界面,不支持图形;网卡只支持pcnet32(虚拟网卡);包含全部netfilter支持等。

这样构建的内核只能够满足当前的测试需要。如果在实际应用中,还是应该构建一个功能完备的内核,以满足不同应用,不同硬件的需要,很多功能可以通过modules实现,不需要编译在内核中,除了耗费一点磁盘空间,对其他性能的影响基本可以忽略。

下面是具体步骤:

(1)下载内核

http://www.kernel.org获得最新的2.4内核,这里是linux-2.4.34.2.tar.bz2,放入/usr/src目录下。

在/usr/src目录下解开(可以建立一个符号连接):

# cd /usr/src
# tar xjvf /sources/linux-2.4.34.2.tar.bz2
# ln -s linux-2.4.34.2 linux

(2)编译准备:

# cd /usr/src/linux-2.4.34.2
# make mrproper

(3)内核配置:

# make menuconfig

配置结果保存在config-thin-2.4.34.2中,供以后参考使用。

详细配置内容:

Code maturity level options --->
[*] Prompt for development and/or incomplete code/drivers
Loadable module support --->
[*] Enable loadable module support
[*] Set version information on all module symbols
[*] Kernel module loader
Processor type and features --->
(Pentium-III/Celeron(Coppermine)) Processor family
[*] Machine Check Exception
 /dev/cpu/*/cpuid - CPU information support
(off) High Memory Support
General setup --->
[*] Networking support
[*] PCI support
(Any) PCI access mode
[*] PCI device name database
[*] Support for hot-pluggable devices
[*] System V IPC
[*] BSD Process Accounting
[*] Sysctl support
(ELF) Kernel core (/proc/kcore) format
<*> Kernel support for a.out binaries
[*] Kernel support for ELF binaries
<*> Kernel support for MISC binaries
[*] Power Management support
 Advanced Power Management BIOS support
Memory Technology Devices (MTD) --->
Parallel port support --->
Plug and Play configuration --->
<*> Plug and Play support
<*> ISA Plug and Play support
Block devices --->
Multi-device support (RAID and LVM) --->
Networking options --->
<*> Packet socket
[*] Packet socket: mmapped IO
[*] Network packet filtering (replaces ipchains)
[*] Network packet filtering debugging
[*] Socket Filtering
<*> Unix domain sockets
[*] TCP/IP networking
[*] IP: multicasting
[*] IP: advanced router
[*] IP: policy routing
[*] IP: use netfilter MARK value as routing key
[*] IP: fast network address translation
[*] IP: equal cost multipath
[*] IP: use TOS value as routing key
[*] IP: verbose route monitoring
[*] IP: kernel level autoconfiguration
[*] IP: DHCP support
[*] IP: BOOTP support
[*] IP: RARP support
<*> IP: tunneling
<*> IP: GRE tunnels over IP
[*] IP: broadcast GRE over IP
[*] IP: multicast routing
[*] IP: PIM-SM version 1 support
[*] IP: PIM-SM version 2 support
[*] IP: ARP daemon support (EXPERIMENTAL)
[*] IP: TCP Explicit Congestion Notification support
[*] IP: TCP syncookie support (disabled per default)
IP: Netfilter Configuration --->
<*> Connection tracking (required for masq/NAT)
<*> FTP protocol support
<*> Amanda protocol support
<*> TFTP protocol support
<*> IRC protocol support
<*> Userspace queueing via NETLINK (EXPERIMENTAL)
<*> IP tables support (required for filtering/masq/NAT)
<*> limit match support
<*> MAC address match support
<*> Packet type match support
<*> netfilter MARK match support
<*> Multiple port match support
<*> TOS match support
<*> recent match support
<*> ECN match support
<*> DSCP match support
<*> AH/ESP match support
<*> LENGTH match support
<*> TTL match support
<*> tcpmss match support
<*> Helper match support
<*> Connection state match support
<*> Connection tracking match support
<*> Unclean match support (EXPERIMENTAL)
<*> Owner match support (EXPERIMENTAL)
<*> Packet filtering
<*> REJECT target support
<*> MIRROR target support (EXPERIMENTAL)
<*> Full NAT
<*> MASQUERADE target support
<*> REDIRECT target support
<*> Basic SNMP-ALG support (EXPERIMENTAL)
<*> Packet mangling
<*> TOS target support
<*> ECN target support
<*> DSCP target support
<*> MARK target support
<*> LOG target support
<*> ULOG target support
<*> TCPMSS target support
<*> ARP tables support
<*> ARP packet filtering
<*> ARP payload mangling
IP: Virtual Server Configuration --->
<*> The IPv6 protocol (EXPERIMENTAL)
IPv6: Netfilter Configuration --->
<*> Userspace queueing via NETLINK (EXPERIMENTAL)
<*> IP6 tables support (required for filtering/masq/NAT)
<*> limit match support
<*> MAC address match support
<*> Routing header match support (EXPERIMENTAL)
<*> Hop-by-Hop and Dst opts header match (EXPERIMENTAL)
<*> Fragmentation header match support (EXPERIMENTAL)
<*> HL match support
<*> Multiple port match support
<*> Owner match support (EXPERIMENTAL)
<*> netfilter MARK match support
<*> Owner match support (EXPERIMENTAL)
<*> netfilter MARK match support
<*> IPv6 Extension Headers Match (EXPERIMENTAL)
<*> AH/ESP match support (EXPERIMENTAL)
<*> Packet Length match support
<*> EUI64 address check (EXPERIMENTAL)
<*> Packet filtering
<*> LOG target support
<*> Packet mangling
<*> MARK target support
Telephony Support --->
ATA/IDE/MFM/RLL support --->
<*> ATA/IDE/MFM/RLL support
IDE, ATA and ATAPI Block devices --->
<*> Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support
<*> Include IDE/ATA-2 DISK support
[*] Use multi-mode by default
<*> Include IDE/ATAPI CDROM support
SCSI support --->
Fusion MPT device support --->
IEEE 1394 (FireWire) support (EXPERIMENTAL) --->
I2O device support --->
Network device support --->
[*] Network device support
<M> Dummy net driver support
Ethernet (10 or 100Mbit) --->
[*] Ethernet (10 or 100Mbit)
[*] EISA, VLB, PCI and on board controllers
<M> AMD PCnet32 PCI support
PPP (point-to-point protocol) support
[*] PPP multilink support (EXPERIMENTAL)
[*] PPP filtering
<*> PPP support for async serial ports
<*> PPP support for sync tty ports
<*> PPP Deflate compression
<*> PPP BSD-Compress compression
<*> PPP over Ethernet (EXPERIMENTAL)
Amateur Radio support --->
IrDA (infrared) support --->
ISDN subsystem --->
Input core support --->
Character devices --->
[*] Virtual terminal
[*] Support for console on virtual terminal
<*> Standard/generic (8250/16550 and compatible UARTs)
serial support
[*] Support for console on serial port
[*] Unix98 PTY support
(256) Maximum number of Unix98 PTYs in use (0-2048)
Multimedia devices --->
File systems --->
<*> Kernel automounter version 4 support (also supports v3)
<*> Ext3 journalling file system support
[*] JBD (ext3) debugging support
[*] Virtual memory file system support (former shm fs)
<*> ISO 9660 CDROM file system support
[*] Microsoft Joliet CDROM extensions
[*] Transparent decompression extension
[*] /proc file system support
[*] /dev/pts file system for Unix98 PTYs
<*> Second extended fs support
Network File Systems --->
<*> NFS file system support
<*> NFS server support
<*> SMB file system support (to mount Windows shares etc.)
[*] Use a default NLS,Default Remote NLS Option: "cp437"
[*] Enable Unix Extensions
Native Language Support --->
(列表略)
Console drivers --->
[*] VGA text console
[*] Video mode selection support
Frame-buffer support --->
[*] Support for frame buffer devices (EXPERIMENTAL)
[*] VESA VGA graphics console
Sound --->
USB support --->
Bluetooth support --->
Kernel hacking --->
Cryptographic options --->
Library routines --->
<*> CRC32 functions

(4)编译安装:

# make dep
# make bzImage
# make modules
# make modules_install

# cp System.map /boot/System.map-2.4.32
# cd arch/i386/boot
# cp bzImage /boot/vmlinuz-2.4.32

# cd /boot
# rm -rf System.map
# ln -s System.map-2.4.32 System.map

(5)引导设置:

编辑/boot/grub/menu.lst,为新内核增加条目:

title Slackware Linux (2.4.34.2)
    root (hd0,0)
    kernel /vmlinuz-2.4.34.2 ro root=/dev/hda3 vga=771

重启系统,使用新内核运行。

如果新内核稳定,并且以后不会再使用老内核的话,可以修改/etc/rc.d/rc.modules,把其中装入模块的几行注释掉,因为这些模块在新内核中已经不存在了。留着也没有影响,只是会有一些出错提示信息。

如果想shutdown直接关机,则装入APM模块。编辑/etc/rc.d/rc.modules,把包含APM行的注释符号去掉:

/sbin/modprobe apm

生成的新内核及其相关文件放在/newpkg/kernel/2.4.34.2-thin/目录下,供别的机器安装使用:

其中modules-2.4.34.2.tar.bz2是/lib/modules/2.4.34.2目录内容的包。

 

18.安装zhcon

在中文环境下,有时不得已会遇到处理中文的情况。有关linux中文化的文章很多,多数都涉及X,配置相对复杂。而我们的应用环境基本都是在字符方式下使用的,几乎不会用到图形界面,对中文的要求也不是非常频繁。所以,以一个很小的代价在命令行模式下获得中文支持,是很理想的。zhcon正好满足了这方面的需求。

zhcon是控制台下使用的外挂式中文工具,类似于我上学时期使用的UCDOS,时隔多年,再次使用这样的工具,很有亲切感。

我获得的是0.2.3版本的zhcon,该版本有点老了,在Slackware 11.0下编译不过,所以这里直接安装了以前在Slackware 10.2下编译好的包。

# installpkg zhcon-0.2.3-i386-1.tgz

下面的内容是当初制作安装包的过程,注意系统是Slackware 10.2

编译zhcon需要C++编译器,为此,需要安装C++工具:

http://zhcon.sourceforge.net下载稳定的0.2.3版本的zhcon。

# cp zhcon-0.2.3.tar.gz /sources
# tar xzvf zhcon-0.2.3.tar.gz
# cd zhcon-0.2.3

0.2.3版本的历史有点长了,在编译时会出错。为此,需要手工修改两个文件:src/inputclient.h、src/mouse.cpp。都增加对assert.h的包含:

#include <assert.h>

开始编译:

# ./configure --prefix=/usr
# make
# checkinstall

把安装包zhcon-0.2.3-i386-1.tgz放在/newpkg目录下。

注意:zhcon的运行需要root权限。

 

19.制作支持ipsec的内核

使用openswan搭建vpn环境。有两种方式,一种是编译模板,另一种是通过对内核patch构建在内核上。这里选择第二种方式。

(1).下载openswan

www.openswan.org下载所需的源代码包和相关补丁:

(2).安装gmp

编译openswan要用到gmp,所以需要事先安装这个包:

(3).patch内核

内核仍旧使用前面的2.4.34.2版本。如果需要nat-t支持,同样要打补丁。这里一并都打上,不想多次make内核了:

cd /sources
gunzip openswan-2.4.7.kernel-2.4-klips.patch.gz
gunzip openswan-2.4.7.kernel-2.4-natt.patch.gz
cd /usr/src/linux-2.4.34.2
patch -p1 < /sources/openswan-2.4.7.kernel-2.4-klips.patch
patch -p1 < /sources/openswan-2.4.7.kernel-2.4-natt.patch

(4).编译内核

config文件在原来的基础上制作,所以使用oldconfig方式,在有关klips和natt的提问中选择yes即可。

cd /usr/src/linux-2.4.34.2
make mrproper
cp /newpkg/kernel/2.4.34.2-thin/config-thin-2.4.34.2 .config
make oldconfig
make dep
make bzImage

这个版本的openswan有点问题,编译过程中会出错:

pfkey_v2.c:122: error: unknown field "owner" \
specified in initializer
pfkey_v2.c:122: warning: initialization makes ... ...
pfkey_v2.c:132: error: unknown field "owner" \
specified in initializer

经过查询openswan上的mailist,得知,可以修改/usr/src/linux-2.4.34.2/net/ipsec/pfkey_v2.c,把122和132行注释掉就可以了。

修改好后,接着编译:

make bzImage
make modules

(5).备份内核文件

首先,注意不要覆盖掉原来的内核模块。

cd /lib/modules
mv 2.4.34.2 2.4.34.2-thin
cd /usr/src/linux-2.4.34.2
make modules_install
cd /lib/modules
tar cvf modules-klips-2.4.34.2.tar 2.4.34.2
mv 2.4.34.2 2.4.34.2-thin-klips
mv 2.4.34.2-thin 2.4.34.2
bzip2 modules-klips-2.4.34.2.tar

把内核文件放到/newpkg/kernel/2.4.34.2-thin-klips/目录下:

(6).编译用户层工具

cd /sources/openswan-2.4.7
make KERNELSRC=/usr/src/linux-2.4.34.2 programs
checkinstall make KERNELSRC=/usr/src/linux-2.4.34.2 install

生成的软件包openswan-2.4.7-i386-1.tgz会在/etc目录下生成rc1.d、rc2.d等目录,这在Slackware中是没有的,所以需要校正它。在临时目录下,解开这个包,删除所有的rc?.d目录,并修改doinst.sh,去掉对rc?.d的操作。之后再tar成新包。

由于该包的特殊性,所以和内核放在一起,也在/newpkg/kernel/2.4.34.2-thin-klips/目录下。

开发机上只是编译,具体使用在home-gate和away-gate上。