shell脚本+PXE实现无人值守装机(完整shell代码)

PXE (preboot execute environment,预启动执行环境) 是由 Intel 公司设计的协议,它可以使计算机通过网络启动。原理简图如下:

首先,dhcpd服务为待装机的主机分配IP地址。

在主机得到IP地址后,会从tftp服务器上请求得到pxelinux.0,default配置文件以及vmlinux initrd。

然后,当主机拥有这些文件后,会向vsftp服务器请求得到系统镜像资源,从而开启装机。

注意,在本图中,ks.cfg文件作为装机的参数配置文件,是由pykickstar制作的。

我们先来看看制作ks.cfg的流程:

(1)yum源配置:
[development]        //名字必须是这个
name=centos7u3
baseurl=file:///mnt/centos7u3
enabled=1
gpgcheck=0
(2)开启kickstart进程:
# yum install system-config-kickstart -y
# system-config-kickstart

(3)按照引导操作:

图一:选择语言,时区

图二:设置ftp服务器,这里FTP目录虽然绝对路径是/var/ftp/centos7u3,但是填写只需要centos7u3

图三:

图四:这里的重点是布局,点击添加,相当于手动装机选择挂在点,并配置大小的操作。

后续步骤不再赘述。

(4)PXE配置:

首先我们需要配置服务:dhcp,tftp,vsftp

安装:

# yum install dhcp tftp-server tftp vsftpd lftp syslinux xinetd -y

配置:

1.DHCP:
DHCP:端口67 68
# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
# vim /etc/dhcp/dhcpd.conf
subnet 192.168.10.0 netmask 255.255.255.0 {   //网段和子网掩码
range 192.168.10.201 192.168.10.210;               //dhcp池分配IP地址范围
next-server 192.168.10.12;                                    //配置PXE主机的IP
filename "pxelinux.0";
}

2.TFTP:
DHCP:端口69
# rpm -ql tftp-server
/etc/xinetd.d/tftp
/var/lib/tftpboot
# vim /etc/xinetd.d/tftp
disable = no


# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/     //配置上述pxelinux.0文件
# mkdir /var/lib/tftpboot/pxelinux.cfg
# mount /dev/sr0 /mnt
# cp /mnt/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default         //配置上述default配置文件
# vim pxelinux.cfg/default
1 default linux                     //请修改为linux
2 timeout 60                       //建议修改为60
61 label linux
62 menu label ^Install CentOS Linux 7
63 kernel vmlinuz
64 append initrd=initrd.img ks=ftp://192.168.2.241/ks.cfg                 //请将制作好的ks.cfg文件放置到配置PXE的主机的/var/ftp下面
# cp /mnt/isolinux/* /var/lib/tftpboot/

3. VSFTPD:
# cd /var/ftp
# mkdir centos7u3
将镜像挂载到centos7u3目录

启动服务:

# systemctl start dhcpd
# systemctl start xinetd
# systemctl start vsftpd

关闭防火墙和selinux

上述过程可使用shell脚本实现自动化装机:

#!/bin/bash
# PXE装机脚本
# ========配置yum源============
[ -d /mnt/centos7u3 ] || mkdir /mnt/centos7u3/
rm -rf /etc/yum.repos.d/*
cat > /etc/yum.repos.d/local.repo <<ok
[centos7u3]
name=centos7u3
baseurl=file:///mnt/centos7u3
gpgcheck=0
enabled=1
ok
mount /dev/sr0 /mnt/centos7u3/ &> /dev/null
yum clean all &> /dev/null
# ========安装服务===================
yum install dhcp tftp-server tftp  vsftpd lftp  syslinux xinetd expect -y &> /dev/null
# ========配置DHCP===================
[ -f /etc/dhcp/dhcpd.conf ] && rm -rf /etc/dhcp/dhcpd.conf
cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
# 获取本主机的IP地址
HOST_IP=`ifconfig ens33 | awk '/\<inet\>/{print $2}'`
# 获取本主机的网络位
NETNO=`echo $HOST_IP|awk -F"." '{print $3}'`
read -p "请输入起始主机号" STARTNO
read -p "请输入终止主机号" ENDNO
sed -i '27c\subnet 192.168.'$NETNO'.0 netmask 255.255.255.0 {' /etc/dhcp/dhcpd.conf
sed -i '27a\\trange 192.168.'$NETNO'.'$STARTNO' 192.168.'$NETNO'.'$ENDNO';\n\tnext-server '$HOST_IP';\n\tfilename "pxelinux.0";' /etc/dhcp/dhcpd.conf
# ========配置TFTP===================
sed -i '/\<disable\>/s@\<yes\>@no@' /etc/xinetd.d/tftp
cp /usr/share/syslinux/pxelinux.0   /var/lib/tftpboot/
[ -d /var/lib/tftpboot/pxelinux.cfg ]|| mkdir /var/lib/tftpboot/pxelinux.cfg
umount /dev/sr0 &> /dev/null
mount  /dev/sr0 /mnt &> /dev/null
cp /mnt/isolinux/isolinux.cfg  /var/lib/tftpboot/pxelinux.cfg/default
sed -i '1c\default linux' /var/lib/tftpboot/pxelinux.cfg/default
sed -i '2c\timeout 60' /var/lib/tftpboot/pxelinux.cfg/default
sed -i '64c\  append initrd=initrd.img ks=ftp://'$HOST_IP'/ks.cfg' /var/lib/tftpboot/pxelinux.cfg/default
cp /mnt/isolinux/* /var/lib/tftpboot/
# =========配置VSFTPD=================
umount /dev/sr0 &> /dev/null
[ -d /var/ftp/centos7u3 ] || mkdir /var/ftp/centos7u3
mount /dev/sr0 /var/ftp/centos7u3 &> /dev/null
# =========写入ks.cfg文件=============
cat > /var/ftp/ks.cfg <<ok
#platform=x86, AMD64, 或 Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
keyboard 'us'
# Root password
rootpw --iscrypted $1$AOxEw/r.$MQjjaq9eRYJumpEj9Me.01
# Use network installation
url --url="ftp://$HOST_IP/centos7u3"
# System language
lang zh_CN
# Firewall configuration
firewall --disabled
# System authorization information
auth  --useshadow  --passalgo=sha512
# Use text mode install
text
# SELinux configuration
selinux --disabled
# Do not configure the X Window System
skipx

# Reboot after installation
reboot
# System timezone
timezone Asia/Shanghai
# System bootloader configuration
bootloader --location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part swap --fstype="swap" --size=1024
part / --fstype="xfs" --size=18888
part /boot --fstype="xfs" --size=250

%packages
@base
-abrt-addon-ccpp
-abrt-addon-python
-abrt-cli
-abrt-console-notification
-bash-completion
-blktrace
-bridge-utils
-bzip2
-chrony
-cryptsetup
-dmraid
-dosfstools
-ethtool
-fprintd-pam
-gnupg2
-hunspell
-hunspell-en
-kpatch
-ledmon
-libaio
-libreport-plugin-mailx
-libstoragemgmt
-lvm2
-man-pages
-man-pages-overrides
-mdadm
-mlocate
-mtr
-nano
-ntpdate
-pinfo
-plymouth
-pm-utils
-rdate
-rfkill
-rng-tools
-rsync
-scl-utils
-setuptool
-smartmontools
-sos
-sssd-client
-strace
-sysstat
-systemtap-runtime
-tcpdump
-tcsh
-teamd
-time
-unzip
-usbutils
-vim-enhanced
-virt-what
-wget
-which
-words
-xfsdump
-xz
-yum-langpacks
-yum-utils
-zip

%end
ok
chmod +x /var/ftp/ks.cfg
# =========启动服务===================
systemctl start dhcpd &> /dev/null
systemctl start xinetd &> /dev/null
systemctl start vsftpd &> /dev/null
# =========关闭firewalld和selinux======
systemctl stop firewalld &> /dev/null
systemctl disable firewalld &> /dev/null
setenforce 0 &> /dev/null
sed -i '7c\SELINUX=disabled' /etc/selinux/config

猜你喜欢

转载自blog.csdn.net/Ezra1991/article/details/88207693