利用TFTP、DHCP和PXE自架Linux网络(自动)安装服务器

利用TFTP、DHCP和PXE自架Linux网络(自动)安装服务器

——自动获取IP网络(自动)安装Red Hat Enterprise Linux 4.0的服务器架设实例

   实现自动获取IP网络安装linux是这样的:客启端PXE网卡启动——>通过Bootp协议——>DHCP服务器——>获得IP——>从TFTP上下载 pxelinux.0以及系统内核文件vmlinuz、initrd.img——>启动系统——>(到指定地点去下载ks.cfg文件——>根据ks.cfg文件去NFS/HTTP/FTP服务器自动)下载RPM包及安装系统——>完成安装。

注意:以下的所有试验都是在WinXP SP2下的VMWare5.5.1中完全安装的RHEL AS4中实现的。实现基本步骤如下:      

         步骤1:

1)把ISO文件或系统安装光盘挂载到一个目录

[root@rhel]#mkdir /media/rhel4

[root@rhel]#mount -o loop,ro /root/RHEL4.iso /media/rhel4    #挂载ISO文件

[root@rhel]#mount -o loop,ro /dev/cdrom /media/rhel4        #挂载光盘
    2)8. 如果在开机时自动加载,可在/etc/fstab加一行:

[root@rhel]#vi /etc/fstab

/root/RHEL4.iso   /media/rhel4 nfs intr

3)挂载ISO后,把isolinux目录下的initrd.img、vmlinuz都复制到/tftpboot/linux-install/下:

[root@rhel]#cp /media/rhel4/isolinux/initrd.img /tftpboot/linux-install/

[root@rhel]#cp /media/rhel4/isolinux/vmlinuz /tftpboot/linux-install/

4)如果没有RHEL AS 4的ISO文件,可以建立一个共享目录(如:rhel)把RHEL的第一张光盘所有内容复制到这个目录下,然后把第二、三、四张光盘的RPMS目录下的rpm包都复制到/rhel/RedHat/RPMS目录下,并开启NFS服务。把上面的的挂载目录/media/rhel4/改为建立的rhel目录即可,其他操作同上。

   步骤2:

1)安装DHCP服务器包(使用RPM包安装DHCP)。

[root@rhel]#cd /rhel/RedHat/RPMS/

[root@rhel]#rpm –ivh dhcp-3.0p12-6.14.i386.rpm

[root@rhel]#rpm –ivh dhcp-devel-3.0p12-6.14.i386.rpm

[root@rhel]#rpm –ivh dhclient -3.0p12-6.14.i386.rpm

2) 配置DHCP服务器,。/etc/dhcpd.conf通常包括三部分:parameters、declarations 、option。

DHCP配置文件中的parameters(参数):
ddns-update-style 配置DHCP-DNS 互动更新模式。
default-lease-time 指定确省租赁时间的长度,单位是秒。
max-lease-time 指定最大租赁时间长度,单位是秒。
hardware 指定网卡接口类型和MAC地址。
server-name 通知DHCP客户服务器名称。
get-lease-hostnames flag 检查客户端使用的IP地址。
fixed-address ip 分配给客户端一个固定的地址。
authritative 拒绝不正确的IP地址的要求。
    DHCP配置文件中的declarations (声明):
shared-network 用来告知是否一些子网络分享相同网络。
subnet 描述一个IP地址是否属于该子网。
range 起始IP 终止IP 提供动态分配IP 的范围。
host 主机名称 参考特别的主机。
group 为一组参数提供声明。
allow unknown-clients ﹔deny unknown-client 是否动态分配IP给未知的使用者。
allow bootp;deny bootp 是否响应激活查询。
allow booting﹔deny booting 是否响应使用者查询。
filename 开始启动文件的名称,应用于无盘工作站。
next-server 设置服务器从引导文件中装如主机名,应用于无盘工作站。
    DHCP配置文件中的option(选项):
subnet-mask 为客户端设定子网掩码。
domain-name 为客户端指明DNS名字。
domain-name-servers 为客户端指明DNS服务器IP地址。
host-name 为客户端指定主机名称。
routers 为客户端设定默认网关。
broadcast-address 为客户端设定广播地址。
ntp-server 为客户端设定网络时间服务器IP地址。

time-offset 为客户端设定和格林威治时间的偏移时间,单位是秒。

注意:如果客户端使用的是视窗操作系统,不要选择“host-name”选项,即不要为其指定主机名称。
    运行DHCP服务器还需要一个名为 dhcpd.leases 的文件,保持所有已经分发出去的 IP 地址。在Redhat Linux 发行版本中,该文件位于 /var/lib/dhcp/ 目录中。如果您通过 RPM 安装 ISC DHCP,那么该目录应该已经存在。dhcpd.leases的文件格式为:
Leases address {statement}
    典型的文件内容如下:
lease 192.168.1.255 { #DHCP服务器分配的IP地址#
starts 1 2005/05/02 03:02:26; # lease 开始租约时间#
ends 1 2005/05/02 09:02:26; # lease 结束租约时间#
binding state active;
next binding state free;
hardware ethernet 00:00:e8:a0:25:86; #客户机网卡MAC地址#
uid "\001\000\000\350\240%\206"; #用来验证客户机的UID标示#
client-hostname "cjh1"; #客户机名称#
}
    注意lease 开始租约时间和lease 结束租约时间是格林威治标准时间(GMT),不是本地时间。
    第一次运行DHCP服务器时dhcpd.leases是一个空文件,也不用手工建立。如果不是通过 RPM 安装 ISC DHCP,或者 dhcpd 已经安装,那么您应该试着确定 dhcpd 将其 lease 文件写到何处,并确保该文件存在。也可以手工建立一个空文件:
[root@rhel]#touch /var/lib/dhcp/dhcpd.leases

编辑DHCP服务器配置文件,这里是一个示例:

[root@rhel]#vi /etc/dhcp.conf

#全局配置

                  ddns-update-style interim;

                   ignore client-updates;

                   allow booting;

                   allow bootp;

#子网的(多)作用域

                   subnet 192.168.1.0 netmask 255.255.255.0 {

                        option routers                  192.168.1.1;

                        option subnet-mask              255.255.255.0;

                        option nis-domain               "domain.org";

                        option domain-name             "domain.org";

                        option domain-name-servers      192.168.1.1;

                        filename "/linux-install/pxelinux.0";

                        range dynamic-bootp 192.168.1.50 192.168.1.100;

                       default-lease-time 21600;

                            max-lease-time 43200;

                            subnet 192.168.1.0 netmask 255.255.255.0 {

                        option routers                  192.168.1.1;

                        option subnet-mask              255.255.255.0;

                        option nis-domain               "domain.org";

                        option domain-name             "domain.org";

                        option domain-name-servers      192.168.1.1;

                        filename "/linux-install/pxelinux.0";

                        range dynamic-bootp 192.168.1.150 192.168.1.200;

                       default-lease-time 21600;

                  max-lease-time 43200;

                    }

3) 配置DHCP的客户端,设置为自动启动联网,则要修改你的网络配置文件,添加,或用ntsysv配置也可以:

[root@rhel]#vi /etc/sysconfig/network

NETWORKING=yes

让引导的时候启动联网,或者使用:
[root@rhel]#echo “NETWORKING=yes”>/etc/sysconfig/network

然后再修改你的网卡配置文件:
[root@rhel]#vi /etc/sysconfig/network-scriptes/ifcfg-eth0

应该包含这几行

DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes

4) 修改/etc/sysconfig/dhcpd文件,配置DHCP服务器在哪个设备上启动,这样对于带有两张网卡的DHCP服务器更安全:

[root@rhel]#vi /etc/sysconfig/dhcpd

DHCPDARGS=eth0

5)开机自动在所有正常的运行级别中启动DHCP服务

[root@rhel]#chkconfig --list dhcpd

[root@rhel]#chkconfig dhcpd on

    6)启动DHCP服务:启动服务器的目的是帮助在待安装机器上启动Red Hat Linux 安装程序。启动服务器上需要搭建一个DHCP 服务器和一个TFTP 服务器。前者是为了给待安装机器分配IP地址,后者则是提供了一个让待安装机器下载启动镜像的途径。

启动方法一:

[root@rhel]#service dhcpd restart

启动方法二:

[root@rhel]#/etc/rc.d/ini.d/dhcpd restart

7)配置DHCP中继代理,编辑/etc/sysconfig/dhcrelay

[root@rhel]#vi /etc/sysconfig/dhcrelay

INTERFACES=”eth0”

DHCPSERVERS=”192.168.1.65”

启动DHCP中继代理:

[root@rhel]#service dhcrelay restart

    步骤3:

这个TFTP服务可以不用配置,因为大都是相同的!可以默认。

1)编辑TFTP 服务器的配置文件,配置文件如下:

[root@rhel]#vi /etc/xinetd.d/tftp

service tftp

{  

socket_type        = dgram

protocol          = udp

       wait              = yes

       user              = root

       server            = /usr/sbin/in.tftpd

       server_args       = -s /tftpboot

        disable           = no

}

2)启动TFTP服务的话要启动xinetd这个守护服务:

[root@rhel]#server xinetd.d restart

  步骤4:

1) 将/usr/lib/syslinux/下的启动镜像文件pxelinux.0拷到TFTP服务器/tftpboot/linux-install/下:

[root@rhel]#cp /usr/lib/syslinux/pxelinux.0 /tftpboot/linux-install/

2) 将/isolinux/下的isolinux.cfg复制到TFTP服务/tftpboot/linux-install/pxelinux.cfg/下:

[root@rhel]#cp /media/rhel4/isolinux/isolinux.cfg /tftpboot/linux-install/pxelinux.cfg/default

3) 将/isolinux/下的所有名为.msg文件拷到TFTP服务器/tftpboot/linux-install/下:[root@rhel]#cp /media/rhel4/isolinux/*.msg /tftpboot/linux-install/

4)配置客户端显示的目录,修改/tftpboot/linux-install/boot.msg,如下:

[root@rhel]#vi /tftpboot/linux-install/boot.msg

-  To install or upgrade in graphical mode, press linux.

-  To install or upgrade in text mode, press test.

-  To install or upgrade in rescue mode, press rescue.

-  To install or upgrade in auto_ks install mode, press ks.

-  Use the function keys listed below for more information.

[F1-Main] [F2-Options] [F3-General] [F4-Kernel] [F5-Rescue]^O07

5)/tftpboot/linux-install/pxelinux.cfg/default此文件可以默认不用配置,但也可以修改:

[root@rhel]#vi /tftpboot/linux-install/pxelinux.cfg/default

default linux

prompt 1

timeout 600

display boot.msg

F1 boot.msg

F2 options.msg

F3 general.msg

F4 param.msg

F5 rescue.msg

F7 snake.msg

label linux

kernel vmlinuz

append initrd=initrd.img ramdisk_size=8192

label test

kernel vmlinuz

append initrd=initrd.img text ramdisk_size=8192

label rescue

kernel vmlinuz

append rescue initrd=initrd.img ramdisk_size=8192

label ks

kernel vmlinuz

append ks=nfs:192.168.1.65:/tftpboot/linux-install/huang-ks.cfg initrd=initrd.img ramdisk_size=8192

label expert

kernel vmlinuz

append expert initrd=initrd.img ramdisk_size=8192

label lowres

kernel vmlinuz

append initrd=initrd.img lowres ramdisk_size=8192

    步骤5:

配置NFS服务器

1) 编辑NFS服务器配置文件 /etc/exports,以允许其它机器通过NFS访问目录/madia/rhel4,文件内容如下:

[root@rhel]#vi /etc/exports

/media/rhel4/         *(ro,sync)

/tftpboot/linux-install/  *(ro,sync)

2) 重新启动NFS服务以使新配置生效

[root@rhel]# service nfs restart

    步骤6:

复制/root下的anaconda-ks.cfg文件到/tftpboot/linux-install/并改名为huang-ks.cfg

[root@rhel]#cp /root/anaconda-ks.cfg /tftpboot/linux-install/huang-ks.cfg

2)配置自动安装参数,修改/tftpboot/linux-install/huang-ks.cfg,如下:

[root@rhel]#vi /tftpboot/linux-install/huang-ks.cfg

#Generated by Kickstart Configurator

#platform=x86, AMD64, 或 Intel EM64T

#System  language

lang zh_CN

#Language modules to install

langsupport en_US --default=zh_CN

#System keyboard

keyboard us

#System mouse

mouse

#Sytem timezone

clearpart --all

part /boot --fstype ext3 --seze=128

part / --fstype ext3 --size=4000

part /home --fstype ext3 --size=256

part swap --seze=512

timezone Asia/Shanghai

#Root password

rootpw --iscrypted $1$cNKZCOfZ$1g1p9Q4x0x6x2sHHZYinK1

#Reboot after installation

reboot

#Install OS instead of upgrade

install

#Use NFS installation Media

nfs --server=10.0.2.202  --dir=/media/rhel4

#System bootloader configuration

bootloader --location=mbr

#Clear the Master Boot Record

zerombr yes

#Partition clearing information

clearpart --linux --initlabel

#System authorization infomation

auth  --useshadow  --enablemd5

#Network information

network --bootproto=dhcp --device=eth0

#Firewall configuration

firewall --disabled

#Do not configure XWindows

skipx

#Package install information

%packages --resolvedeps

@everything

kernel

grub

kernel-devel

e2fsprogs

    步骤7:

让DHCP服务器在chroot jail(chroot“监牢”)中运行:

dhcpd运行在jail需要几个库文件,可以使用ldd(library Dependency Display缩写)命令,ldd作用是显示一个可执行程序必须使用的共享库。
[root@rhel]#ldd dhcpd
[root@rhel]#ln –s libc.so.6 => /lib/tls/libc.so.6 (0x42000000)
[root@rhel]#ln –s /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
    在“监牢”中创建lib目录,并将库文件复制到其中。手工完成比较麻烦的,此时可以用jail软件包来帮助简化chroot“监牢”建立的过程:

1)Jail软件的编译和安装
Jail官方网站是:http://www.jmcresearch.com/ ,最新版本:1.9a。
[root@rhel]#Wget http://www.jmcresearch.com/static/dwn/projects/jail/jail_1.9a.tar.gz #下载jail软件
[root@rhel]#tar xzvf jail.tar.gz  #解压缩到当前目录

[root@rhel]#vi jail/READEM;vi jail/doc/INSTALL  #查看安装文档说明

[root@rhel]# cd jail/src/Makefiles; #把安装路径/tmp/jail为/usr/local
[root@rhel]#make; make install

2)用jail创建监牢

jail软件包提供mkjailenv、addjailuser和addjailsw三个Perl脚本作为其核心命令。
mkjailenv:创建chroot“监牢”目录,并且从真实文件系统中拷贝基本的软件环境。addjailsw:从真实文件系统中拷贝二进制可执行文件及其相关的其它文件(包括库文件、辅助性文件和设备文件)到该“监牢”中。addjailuser:创建新的chroot“监牢”用户。
    停止当前dhcpd服务,然后建立chroot目录:
[root@rhel]#/sbin/service dhcpd start
[root@rhel]#mkjailenv /chroot/
[root@rhel]#mkjailenv  
    为“监牢”添加dhcpd程序的过程:
[root@rhel]# addjailsw /var/chroot/ -P /usr/sbin/dhcpd
[root@rhel]# addjailsw  
    将dhcpd的相关文件拷贝到“监牢”中(可做可不做):
[root@rhel]# mkdir -p /chroot/dhcp/etc
[root@rhel]# cp /etc/dhcpd.conf /chroot/dhcp/etc/
[root@rhel]# mkdir -p /chroot/dhcp/var/state/dhcp
[root@rhel]# touch /chroot/dhcp/var/state/dhcp/dhcp.leases
    重新启动dhcpd服务器:
[root@rhel]#  /chroot/usr/sbin/dhcpd
    使用ps命令检查dhcpd进程:
[root@rhel]# ps -ef | grep dhcpd
    root 2402 1 0 14:25 ? 00:00:00 /chroot/usr/sbin/dhcpd
    root 2764 2725 0 14:29 pts/2 00:00:00 grep dhcpd
    注意此时进程名称已经改变,使用检查dhcpd运行的端口:
[root@rhel]# netstat -nutap | grep dhcpd
    udp 0 0 0.0.0.0:67 0.0.0.0:* 2402/dhcpd
端口号没有改变。现在dhcpd已经成功运行在“监牢”中。

    步骤8:

启动客户机进行测试,可以在WinXP SP2下的VMWare5.5.1中新建一个虚拟机,从网络启动安装来测试是否配置成功。

对服务器而言,要确保网卡正常工作,并具备广播功能。对客户机而言,还要确保客户机的网卡正常工作。如果dhcpd进程没有启动,那么可以浏览消息文件/var/log/messages。
    网络中的客户机却没办法取得IP地址一般是Linux DHCP服务器的网卡没有设置具有MULTICAST功能。为了让dhcpd(dhcp程序的守护进程)能够正常的和DHCP客户机沟通,需要修改路由表以激活MULTICAST功能;
[root@rhel]# route add -host 255.255.255.255 dev eth0
    如果报错:255.255.255.255:Unkown host
[root@rhel]# vi /etc/hosts#加入一行:
    255.255.255.255 dhcp
    DHCP客户端程序和DHCP服务器不兼容,不同版本使用DHCP客户端程序和DHCP服务器也不相同。Linux提供了四种DHCP客户端程序:pump, dhclient, dhcpxd, 和dhcpcd。了解不同Linux发行版本的服务器端和客户端程序对于常见错误排除是必要的。脚本 附加配置文件
Red Hat Linux 9.0的dhclient 无 /sbin/ifup /etc/sysconfig/network,/etc/sysconfig/network-scripts/ifcfg-eth0

参考上面的方法,大家可以尝试配出完美的服务器来。
learning
学习了
So good , Thx