pxe
pxe部署centos7
pxe安装centos7环境部署
要求:自动安装salt-minion 2016版本
自动修改authorized_keys文件,系统装完机器可以免密登录
设置salt和ssh开机自启
以上所有要求,希望在部署pxe环境是,能./install-pxe.sh 一键部署,pxe环境部署在centos 6.3上
我在此之前准备好centos6和centos7软件包,以及salt安装包,并设置服务器防火墙。
salt安装包-(查看salt-minion版本)
install-pxe.sh
#!/bin/bash
ip=192.168.163.0
mask=255.255.255.0
ip1=192.168.163.10
ip2=192.168.163.20
myip=`ip a s | grep "eth0" | grep "inet" | awk '{print $2}' | awk -F "/" '{print $1}'`
sip7=192.168.163.130
if [ -f /root/.ssh/id_rsa.pub ];then
echo "公钥已生成"
else
echo "请您用ssh-keygen命令手动生成密钥后重试!&& exit 5"
fi
pubkey=`cat /root/.ssh/id_rsa.pub`
# 查看网络环境
if `ping -w 10 -c 5 $sip7 >> /dev/null`;then
echo "与安装源服务器网络正常;继续中..."
else
echo "与安装源服务器网络不正常;请联系v_张山" && exit 10
fi
# 拷贝镜像文件
mkdir /centos6
scp -r root@$sip7:/centos6/* /centos6/
# 拷贝salt软件包
mkdir /opt/salt
scp -r root@$sip7:/opt/salt/* /opt/salt/
# 创建yum源
mkdir /etc/yum.repos.d/back
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/back/
cat <<EOF > /etc/yum.repos.d/centos6.repo
[iso]
name=iso
baseurl=file:///centos6/
enabled=1
gpgcheck=0
[salt]
name=salt
baseurl=file:///opt/salt/
enabled=1
gpgcheck=0
EOF
yum clean all
if yum repolist;then
echo "yum源仓库已创建成功,开始安装软件..."
else
echo "yum源仓库创建失败,请联系v_张山" && exit 20
fi
# 安装软件
if yum install -y syslinux tftp-server vsftpd dhcp xinetd system-config-kickstart;then
echo "所需软件安装成功!"
else
echo "软件安装失败,请联系v_张山" && exit 30
fi
# 将所需文件拷贝到/var/ftp目录下,为其他机器提供安装源
mkdir /var/ftp/{iso,salt}
scp -r root@$sip7:/mnt/* /var/ftp/iso/
cp -a /opt/salt/* /var/ftp/salt/
# 配置dhcp文件
cat <<EOF > /etc/dhcp/dhcpd.conf
subnet $ip netmask $mask {
range $ip1 $ip2;
next-server $myip;
filename "pxelinux.0";
}
EOF
# 开启tftp靠xinetd启动
sed -i '/disable/s/yes/no/g' /etc/xinetd.d/tftp
# 拷贝引导文件到tftp共享目录下
if [ ! -f /var/lib/tftpboot/pxelinux.0 ];then
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot && echo "pxelinux.0文件已复制!"
else
echo "pxelinux.0文件已存在!"
fi
if [ ! -d /var/lib/tftpboot/pxelinux.cfg ];then
mkdir /var/lib/tftpboot/pxelinux.cfg && echo "pxelinux.cfg目录已创建!"
else
echo "pxelinux.cfg目录已存在!"
fi
# 拷贝下载的内核,驱动以及菜单文件到tftp共享目录下
cp -a /var/ftp/iso/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/
cp -a /var/ftp/iso/isolinux/vmlinuz /var/lib/tftpboot/
cp -a /var/ftp/iso/isolinux/initrd.img /var/lib/tftpboot/
cp -a /var/ftp/iso/isolinux/vesamenu.c32 /var/lib/tftpboot/
mv /var/lib/tftpboot/pxelinux.cfg/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
# 修改default文件
sed -i '64,/append/c append initrd=initrd.img ks=ftp://'$myip'/pub/ks.cfg quiet' /var/lib/tftpboot/pxelinux.cfg/default
sed -i '/default/s/vesamenu.c32/linux/g' /var/lib/tftpboot/pxelinux.cfg/default
# 修改ks.cfg文件
scp root@$sip7:/ks.cfg /var/ftp/pub/
sed -i '/^url/c url --url="ftp://'$myip'/iso"' /var/ftp/pub/ks.cfg
sed -i '51s/^.*$/baseurl=ftp:\/\/'$myip'\/iso/g' /var/ftp/pub/ks.cfg
sed -i '57s/^.*$/baseurl=ftp:\/\/'$myip'\/salt/g' /var/ftp/pub/ks.cfg
sed -i '62s/^.*$/rpm --import ftp:\/\/'$myip'\/salt\/SALTSTACK-GPG-key.pub/g' /var/ftp/pub/ks.cfg
sed -i '69c '"$pubkey"'' /var/ftp/pub/ks.cfg
# 重启服务并设置开机自启
service vsftpd restart
service dhcpd restart
service xinetd restart
chkconfig vsftpd on
chkconfig dhcpd on
chkconfig xinetd on
ks.cfg文件
#platform=x86, AMD64, 或 Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
keyboard 'us'# Reboot after installation
reboot
# Root password
rootpw --iscrypted $1$iuW5Samq$BM.RBGzI.82Slvau2VnUq0
# System timezone
timezone Asia/Shanghai --isUtc
# Use network installation
url --url="ftp://192.168.163.129/iso"
# System language
lang en_US
# Firewall configuration
firewall --disabled
# Network information
network --bootproto=dhcp --device=eno16777736
# System authorization information
auth --useshadow --passalgo=sha512
# Use graphical install
graphical
firstboot --disable
# SELinux configuration
selinux --disabled
# System bootloader configuration
bootloader --location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part / --fstype="ext4" --size=10000
part /boot --fstype="ext4" --size=2000
part swap --fstype="swap" --size=3000
%packages
@core
%end
%post
mkdir /etc/yum.repos.d/back
mv /etc/yum.repos.d/* /etc/yum.repos.d/back
cat <<EOF > /etc/yum.repos.d/centos.repo
[iso]
name=iso
baseurl=ftp://192.168.163.129/iso
enabled=1
gpgcheck=0
[salt]
name=salt
baseurl=ftp://192.168.163.129/salt
enabled=1
gpgcheck=0
EOF
rpm --import ftp://192.168.163.129/salt/SALTSTACK-GPG-key.pub
yum install -y salt-minion
mkdir /root/.ssh
cat <<EOF > /root/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA3q6Bgdjf5mDUEgkCO9Ht41u4zV35J5FiDCaXDN1xo06nQ53X/8njmSJqxHhqIsPBa2iOKbPuTGFG/toU7ibxb9W/wwKVInUUrOuvVpylXw17dLHPYZHFbX0crzjqYvbJy0GhG2n6G/Fyc0JxCOeIsixaQM8Pyz4bhbOpN4Ow5KcMa2o3mRZppOwjE4oDKhozBY0t79EqPsUJa9sG7qbL6rAdBpsRNA5Cz2A3vJUt5iA0F6VCsta/dUBesjNDJXaS6QcJyRvIDwy4FTrx6OsYochQGMrKMoHV0b+TNVQ4Pt9Z+eJv2BnEA03eQYG3Thn0H485mtzcHiS/5KEwttT0NQ== root@slave
EOF
sed -i '/^PasswordAuthentication/c PasswordAuthentication no' /etc/ssh/sshd_config
systemctl restart sshd
systemctl enable sshd
systemctl restart salt-minion
systemctl enable salt-minion
%end
原理:
(1)客户机(BIOS设置成为网络启动)通过支持PXE的网卡向网络中发送请求DHCP信息的广播请求IP地址
(2)dhcp服务器分配IP地址,和下一个服务器地址(next-server),即tftp服务器和启动文件的位置
(3)客户机向tftp服务器请求下载启动所需文件文件,包括:启动文件pxelinux.0、启动菜单文件default、驱动文件initrd.img和内核文件vmlinuz
(4)下载成功后,客户机读取default文件,获得自应答文件ks.cfg的位置。自应答文件包含了系统安装过程中需要手动设置的语言、密码、网络参数等相关的配置信息
(5)客户机向ks.cfg文件所在的服务器请求下载ks.cfg文件
(6)客户机读取了ks.cfg文件后,根据其中的配置信息找到所需软件包的位置(即YUM源),下载安装过程所需的软件包
(7)下载成功后,客户机开始自动安装操作系统
DHCP服务
——给客户端分配IP地址,定位引导程序,即pxelinux.0文件,(必需)
TP服务
——存放系统安装所需要的引导文件pxelinux.0文件(必需)
——存放default文件 :设置默认安装的操作系统
——存放initrd.img (驱动文件)和vmlinuz(内核文件)