1. 前言
现在企业采购的很多计算机都是没光驱的,怎么安装系统呢?另外,如何能快速大规模安装服务器操作系统呢,有什么好办法吗?
答案是有的,那就是本文要说的:PXE。
整个安装的过程是这样的:PXE网卡启动 => DHCP获得IP地址 => 从TFTP上下载 pxelinux.0、vmlinuz、initr.img 等 => 引导系统进入安装步骤 => 通过PEX linux 下载ks.cfg文件并跟据ks.cfg自动化安装系统 => 完成。
接下来,我们将PXE环境中的各个步骤分解开,逐一部署。
服务器环境描述:
IP:192.168.0.2
GW: 192.168.0.1
NETMASK: 255.255.255.0
2. 配置dhcpd
dhcpd的作用就是在客户端启动时,从中分配IP,便于继续后面的网络化自动安装。首先,我们需要安装 dhcp rpm包。
以下是代码片段: rpm -ivhU dhcp*rpm [yejr@imysql.cn ~yejr]# cat /etc/dhcpd.conf option space PXE; option PXE.mtftp-ip code 1 = ip-address; option PXE.mtftp-cport code 2 = unsigned integer 16; option PXE.mtftp-sport code 3 = unsigned integer 16; option PXE.mtftp-tmout code 4 = unsigned integer 8; option PXE.mtftp-delay code 5 = unsigned integer 8; option PXE.discovery-control code 6 = unsigned integer 8; option PXE.discovery-mcast-addr code 7 = ip-address; class "pxeclients" { match if substring (option vendor-class-identifier, 0, 9) = "PXEClient"; option vendor-class-identifier "PXEClient"; vendor-option-space PXE; option PXE.mtftp-ip 0.0.0.0; filename "pxelinux.0"; next-server 192.168.0.2; } ddns-update-style interim; ignore client-updates; allow booting; allow bootp; ddns-updates on; subnet 192.168.0.0 netmask 255.255.255.0 { option routers 192.168.0.1; option subnet-mask 255.255.255.0; option domain-name-servers 202.106.0.20; option time-offset 28800; pool { range 192.168.0.3 192.168.0.253; default-lease-time 200; max-lease-time 400; allow members of "pxeclients"; } }
|
其中,next-server就是指定tftp服务器的地址,filename是pxe引导文件。
3. 配置tftpd
安装rpm包,修改 xinet.d 下的 tftpd 配置文件,然后配置 tftpd 服务端环境。
以下是代码片段: [yejr@imysql.cn ~yejr]# rpm -ivhU syslinux*rpm tftp*rpm [yejr@imysql.cn ~yejr]# mkdir -p /var/www/html/as4u7 /tftpboot/ [yejr@imysql.cn ~yejr]# mount path/as4u7_x86_64.iso -t iso9660 -o loop /var/www/html/as4u7 [yejr@imysql.cn ~yejr]# cd /var/www/html/as4u7 [yejr@imysql.cn ~yejr]# cp isolinux/vmlinuz isolinux/initrd.img /usr/lib/syslinux/pxelinux.0 /tftpboot [yejr@imysql.cn ~yejr]# mkdir -p /tftpboot/pxelinux.cfg/ [yejr@imysql.cn ~yejr]# cat /tftpboot/pxelinux.cfg/default default local prompt 1 timeout 600 label local localboot 0 label as4u6_x86_64 kernel vmlinuz append netmask=255.255.255.0 gateway=192.168.0.2 ksdevice=eth0 initrd=initrd.img nofb text ks=http://192.168.0.2/ks.cfg [yejr@imysql.cn ~yejr]# cat /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 per_source = 11 cps = 100 2 flags = IPv4 }
|
这里需要注意的是,/etc/xinetd.d/tftp 文件中的 disable 改成 no。另外,我们也可以采用其他网络方式安装,常见的有 HTTP、NFS、FTP,在这里,我们采用熟悉的 HTTP 方式。
4. 配置httpd以及pxe自动安装脚本
httpd的安装不再多说,我们只需要把 pxe 自动化配置文件放到 DocumentRoot 指定的位置下,然后根据文件中配置的参数挂载iso影响文件。在这里,我们假定 DocumentRoot 就是默认的 /var/www/html。
以下是代码片段: [yejr@imysql.cn ~yejr]# cat /var/www/html/ks.cfg #基础设置 lang en_US langsupport zh_HK zh_CN zh_TW --default=en_US keyboard us mouse timezone Asia/Shanghai rootpw yejr selinux --disabled reboot text install #http安装路径 url --url http://192.168.1.12/as4u7/ zerombr yes auth --useshadow --enablemd5 firewall --disabled skipx #定制安装包 %packages --resolvedeps @ admin-tools @ system-tools @ editors @ emacs @ compat-arch-support @ chinese-support @ development-tools kernel kernel-utils curl grub sysstat #初始化设置 %pre --interpreter /bin/sh export PATH=$PATH:/sbin:/bin:/usr/sbin:/usr/bin DRIVER_INSTALL="`fdisk -l | grep -i '^Disk /dev/' | awk '{print $2, $3}' | sed 's/://g' | sed 's#/dev/##g' | awk 'BEGIN{ disk=""; size=0}{if(size == 0 || size > $2) {size = $2; disk = $1}}END{print disk}'`" %post --interpreter /bin/sh /sbin/chkconfig --level 2345 irqbalance on /sbin/chkconfig --level 2345 psacct on /sbin/chkconfig --level 2345 anacron off /sbin/chkconfig --level 2345 apmd off /sbin/chkconfig --level 2345 atd off /sbin/chkconfig --level 2345 autofs off /sbin/chkconfig --level 2345 gpm off /sbin/chkconfig --level 2345 httpd off /sbin/chkconfig --level 2345 identd off /sbin/chkconfig --level 2345 ipchains off /sbin/chkconfig --level 2345 iptables off /sbin/chkconfig --level 2345 isdn off /sbin/chkconfig --level 2345 keytable off /sbin/chkconfig --level 2345 kudzu off /sbin/chkconfig --level 2345 linuxconf off /sbin/chkconfig --level 2345 lpd off /sbin/chkconfig --level 2345 netfs off /sbin/chkconfig --level 2345 nfslock off /sbin/chkconfig --level 2345 pcmcia off /sbin/chkconfig --level 2345 portmap off /sbin/chkconfig --level 2345 random off /sbin/chkconfig --level 2345 rawdevices off /sbin/chkconfig --level 2345 rhnsd off /sbin/chkconfig --level 2345 sgi_fam off /sbin/chkconfig --level 2345 xfs off /sbin/chkconfig --level 2345 xinetd off /sbin/chkconfig --level 2345 ip6tables off /sbin/chkconfig --level 2345 cups off /sbin/chkconfig --level 2345 hpoj off /sbin/chkconfig --level 2345 mdmpd off /sbin/chkconfig --level 2345 firstboot off /sbin/chkconfig --level 2345 arptables_jf off /sbin/chkconfig --level 2345 mdmonitor off /sbin/chkconfig --level 2345 smartd off /sbin/chkconfig --level 2345 messagebus off /sbin/chkconfig --level 2345 acpid off /sbin/chkconfig --level 2345 rpcsvcgssd off /sbin/chkconfig --level 2345 rpcgssd off /sbin/chkconfig --level 2345 rpcidmapd off /sbin/chkconfig --level 2345 cpuspeed off /sbin/chkconfig --level 2345 sysstat off mkdir -p /root/.ssh /bin/rpm -e --nodpes mysqlclient10 /bin/rpm -e --nodpes mysql /sbin/chkconfig sshd on
|
至此,所有配置已经完成,启动相关服务,然后开始测试。
以下是代码片段: [yejr@imysql.cn ~yejr]# /etc/init.d/xinetd start [yejr@imysql.cn ~yejr]# /etc/init.d/httpd start [yejr@imysql.cn ~yejr]# /etc/init.d/dhcpd start
|
下面是测试过程。
5. 测试
随便找一个支持网络启动的机器,启用pxe,然后启动。在服务器端用tcpdump监听并且查看/var/log/messages 日志文件,在dhcp或者tftp过程中,一旦有问题的话,都可以从dump或日志文件中发现问题所在。一般常见的问题是找不到对应文件,因此需要将相关配置文件放在正确位置下。并且人工测试一下,确保可以访问。
建议继续学习:
- 自动化测试中Python与C/C++的混合使用 (阅读:3892)
- 自动化运维之企业实际案例分析 (阅读:3802)
- Linux大棚版gtest官网教程译文 (阅读:2695)
- 自动化测试之惑 (阅读:2620)
- 让前端工作更快、更智能:利用StaticPage自动化工作流 (阅读:2613)
- Perl 自动化之网页处理 WordPress 自动登陆查看 (阅读:2279)
- 系统自动化配置和管理工具 SaltStack (阅读:1872)
- 如何设计软件模块的自动化测试? (阅读:1796)
- CC-lib无线跨平台web页面自动化生成技术的设计实现 (阅读:1602)
- 环境为王-论贴吧环境解决方案 (阅读:1484)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习