1 PXE+DHCP+TFTP网络批量安装系统
PXE(preboot execute environment,预启动执行环境)工作于Client/Server的网络模式,支持多台服务器节点通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicasttrivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端基本软件设置,从而引导预先安装在服务器中的终端操作系统。
1.1 准备条件
1.1.1关闭selinux和防火墙
systemctlstop firewalld # 关闭防火墙
systemctldisable firewalld #永久关闭firewalld
sestatus # 查询selinux状态
systemctlstatus firewalld #查询防火墙状态
1.1.2配置yum源
解压系统镜像文件到root/redhat_7.2,cd /etc/yum.repo.d/,隐藏其他的repo配置文件,自定义repo文件,使用本地yum源配置文件development.repo
#more/etc/yum.repo.d/development.repo
[development] 注意:这里一定要写development,方便以后通过工具kickstart导出ks.cfg文件
name=development
baseurl=file:///root/redhat_7.2
gpgcheck=0
1.2 PXE环境配置
1.2.1 配置DHCP服务
vim /etc/dhcp/dhcpd.conf
default-lease-time 21600;
max-lease-time 43200;
ddns-update-style none;
option routers 172.30.3.73;
option broadcast-address 172.30.3.255;
option domain-name-servers 172.30.3.73;
option subnet-mask 255.255.255.0;
subnet 172.30.3.0 netmask 255.255.255.0 {
rangedynamic-bootp 172.30.3.1 172.30.3.253;
optionsubnet-mask 255.255.255.0;
next-server 172.30.3.73;
filename"pxelinux.0";
}
/etc/init.d/dhcpd start #启动dhcp服务
1.2.2 配置tftp服务器
vim /etc/xinetd.d/tftp
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /install/tftpboot 重点在这里!改成这样即可
disable = no 这里改为no
per_source = 11
cps= 100 2
flags = IPv4
}
mkdir -p /install/tftpboot
chcon --reference /var/lib/tftpboot/install/tftpboot
chcon --reference /var /install
ll -dZ /install/tftpboot
/etc/init.d/xinetd restart
chkconfig xinetd on
chkconfig tftp on
netstat -tulnp | grep xinetd
1.2.3 准备启动文件
syslinux:
cp /usr/share/syslinux/menu.c32 /install/tftpboot/
cp /usr/share/syslinux/vesamenu.c32 /install/tftpboot/
cp /usr/share/syslinux/pxelinux.0 /install/tftpboot/
mkdir /install/tftpboot/pxelinux.cfg
mkdir -p /install/tftpboot/kernel/redhat_7.2
cp /root/redhat_7.2/isolinux/vmlinuz /install/tftpboot/kernel/redhat_7.2
cp /root/redhat_7.2/isolinux/initrd.img /install/tftpboot/kernel/redhat_7.2
cp /root/redhat_7.2/isolinux/isolinux.cfg /install/tftpboot/pxelinux.cfg/demo
vim /install/tftpboot/pxelinux.cfg/default
UI vesamenu.c32
TIMEOUT 300
DISPLAY ./boot.msg
MENU TITLE Welcome to VBird's PXE Server System
LABEL local
MENU LABEL Boot from localdrive
MENU DEFAULT
localboot 0
LABEL network1
MENU LABEL boot from PXEServer for Install RedHat 7.2
kernel./kernel/redhat_7.2/vmlinuz
appendinitrd=./kernel/redhat_7.2/initrd.img
vim /install/tftpboot/boot.msg
Welcome to Rainman's PXE Server System.
The 1st menu can let you system to hard diskmenu.
The 2nd menu can initial interactive installationstep.
1.2.4 http配置
/etc/init.d/httpd start
mkdir -p /var/www/html/install/redhat_7.2
cp –r /root/redhat_7.2/* /var/www/html/install/redhat_7.2/
/etc/init.d/httpd restart
www: http://172.30.3.73/install/
(配置到这一步了!)
准备Kickstart:
mkdir -p /var/www/html/install/kickstart
chmod 644 ks.cfg
pxeboot default:
vim /install/tftpboot/pxelinux.cfg/default
LABEL kickstart
MENU LABEL Boot from PXE Server for auto Install RedHat7.2
MENU DEFAULT
kernel./kernel/redhat_7.2/vmlinuz
appendinitrd=./kernel/redhat_7.2/initrd.imgks=http://172.30.3.73/install/kickstart/ks.cfg
1.3 制作ks.cfg文件
1.3.1导出ks.cfg文件
终端输入system-config-kickstart,从这里可以做一些安装系统前的基本配置:
选择软件包,尽量选全:
保存导出ks.cfg文件
1.3.2修改ks.cfg文件
说明:ks.cfg文件主要包括三部分:%package之前为命令段,可以设置键盘类型,语言,安装方式,密码,时区,系统分区,关闭防火墙等系统配置;%package--%end为系统所安装的软件包;%post--%end(红色方框部分)为后安装脚本,可以实现安装系统后自动配置ip和主机名等操作,相关配置文件和脚本程序serialnumlist,read_serial_config.sh见1.4节。
1.4 脚本程序-自动配置ip和主机名
通常我们在装完系统后,需要手动配置节点ip,主机名以及安装ib驱动等,接下来,我们将介绍通过识别节点序列号,实现安装操作系统后,自动进行以上配置。
1.4.1节点序列号文件
第一列为节点序列号,可通过dmidecode -t 1 | grep ‘Serial Number’查询得到,通过使用ipmitool工具使用带外批量收集2,3,4列分别该节点序列号所对应的以太网ip,IPMI管理网ip地址以及主机名。
1.4.2脚本程序文件
#more read_serial_config.sh
#!/bin/bash
if [ `whoami` != root ];then
echo "Error:You must login as root" 1>&2
exit -10
fi
MEING_DIR=$(readlink -f $(dirname $0))
MELIST=$MEING_DIR/serialnumlist
NUM=`dmidecode -t 1 |grep "SerialNumber"|uniq|awk '{print $3}'`
serial_ip=`cat $MELIST |awk '($1=="'$NUM'"){print $2}'`
#serial_ib_ip=`cat $MELIST |awk '($1=="'$NUM'"){print $3}'`
serial_ipmi_ip=`cat $MELIST |awk'($1=="'$NUM'") {print $3}'`
serial_hostname=`cat $MELIST |awk'($1=="'$NUM'") {print $4}'`
SET_ETH0_IP()
{
cd /etc/sysconfig/network-scripts
mv ifcfg-ens7f0 ifcfg-ens7f0.bak
cat > ifcfg-ens7f0
TYPE=Ethernet
BOOTPROTO=static
NAME=ens7f0
DEVICE=ens7f0
ONBOOT=yes
IPADDR=$serial_ip
NETMASK=255.255.255.0
GATEWAY=172.30.3.254
END
}
#SET_IB0_IP()
#{
#cd /etc/sysconfig/network-scripts
#mv ifcfg-ib0 ifcfg-ib0.bak
#cat > ifcfg-ib0
#DEVICE=ib0
#BOOTPROTO=static
#TYPE=Ethernet
#NM_CONTROLLED=no
#IPADDR=$serial_ib_ip
#NETMASK=255.255.0.0
#USERCTL=no
#IPV6INIT=no
#ONBOOT=yes
#END
#}
SET_IPMI_IP()
{
ipmitool lan set 1 ipsrc static
ipmitool lan set 1 netmask 255.255.0.0
ipmitool lan set 1 ipaddr $serial_ipmi_ip
}
SET_HOSTNAME()
{
cd /etc/
rm hostname -f
cat > hostname
$serial_hostname
END
}
SET_ETH0_IP
#SET_IB0_IP
SET_HOSTNAME
SET_IPMI_IP
1.4.3后安装脚本
有了以上serialnumlist序列号文件和read_serial_config.sh脚本程序,接下来我们在ks.cfg文件最后添加后安装脚本程序如下(见1.3.2中图片红色方框):
#vim ks.cfg
%post
mkdir -p /opt/cluster_configuration
wget -P/opt/cluster_configuration http://172.30.3.73/install/cluster_configuration/serialnumlist
wget -P/opt/cluster_configuration http://172.30.3.73/install/cluster_configuration/read_serial_config.sh
cd /opt/cluster_configuration
chmod a+x read_serial_config.sh
sh read_serial_config.sh
service network restart
service NetworkManager stop
chkconfig NetworkManager off
%end
1.5 批量安装操作系统
需要安装的机器开机,并从网络启动(对于刀片服务器,可以通过刀箱ipmi地址登录到远程管理界面,从中设置pxe网络启动),正常无人值守安装操作系统,安装过程如下:
登录服务器bmc设置从pxe启动或开机按f12,不同厂商的服务器可能开机按键不同
再或这使用ipmitool工具批量设置服务器从pxe网络启动
至此,安装完毕。