利用TFTP、DHCP和PXE自架Linux网络(自动)安装服务器
tongxiaokun
|
1#
tongxiaokun 发表于 2006-11-06 01:06
利用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 参考上面的方法,大家可以尝试配出完美的服务器来。 |