导读:
作为运维经常会遇到一些重复的工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在 短时间内完成系统安装。本文主要讲述了Linux下批量部署 Pxe、Kickstart实现及应用.
PXE(preboot execute environment,预启动执行环境),支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件 包完成终端基本软件设置,从而引导预先安装在服务器中的终端操作系统。
Kickstart是一种无人值守的安装方式,即把整个安装过程中要回答或做的事全部体现在应答文件ks.cfg文件中。只需告诉安装程序从何处取ks.cfg文件即可,等安装完毕,安装程序会根据ks.cfg文件中的设置重启系统,并结束安装。
• Kickstart 安装选项:包含语言,防火墙,密码,网络,分区的设置等;
• %Pre 部分:安装前解析的脚本,通常用来生成特殊的ks配置,比如由一段程序决定磁盘分区等
• %Package 部分:安装包的选择可以是 @base 这样的组的形式,也可以是这样 http-* 包的形式
• %Post 部分:安装后执行的脚本,通常用来做系统的初始化设置。比如启动的服务,相关的设定。
(1)、网卡里有内置的dhcp客户端程序和tftp客户端程序,当把网卡当做第一顺序启动时,会激活pxe功能,客户端基于dhcp尝试发起广播请求(端口:67);
(2)、当dhcp服务器收到请求后给它分配一个地址以及网关等各种网络属性进行配置;dhcp服务器还可以告诉网卡,网络中有tftp文件服务器,指令是next-server指定要找的tftp服务器,并且告诉网卡下载tftp服务器里的pxelinux.0(类似于bootloader提供引导界面);
(3)、客户端访问tftp服务器下载pxelinux.0并执行;
(4)、客户端后续下载内核和安装文件。
1、客户端向dhcp服务器发送ip请求;
2、dhcp服务器提供ip应答;
3、客户端向tftp服务器请求下载启动文件pxelinux.0;
4、tftp服务器响应请求并传输启动文件;
5、客户端向tftp服务器请求下载自动应答 ks 文件;
6、客户端获取 ks 文件并安装操作系统。
分为两个阶段:引导(boot)和启动(startup)。引导阶段开始于打开电源开关,结束于内核初始化完成和 systemd 进程成功运行。启动阶段接管了剩余工作,直到操作系统进入可操作状态。
BIOS 上电自检(POST)
引导装载程序 (GRUB2)
内核初始化
启动 systemd,其是所有进程之父。
推荐参考:Linux 开机引导和启动过程详解
本例采用centos7.4:CentOS-7-x86_64-DVD-1708.iso镜像;NAT模式
机器名为:cent7;虚拟机:VMware-workstation-full-12.5.7-5813279
已配置yum库
因为服务端如果不是静态固定IP的话,在文件传输过程中可能会出错。如果不是的话,需要手动配置一下静态IP
进入虚拟机,编辑,虚拟网络编辑器设置DHCP及NAT。
可以看到我的子网IP,也就是网段为:192.168.91.0 子网掩码:255.255.255.0
IP范围设置为:192.168.91.128-192.168.91.254(这个大家自己随意设置)
可以看到,网关是;192.168.91.2
将使用本地DHCP服务前面的勾去掉!
服务端设为NAT模式
接下来,我们参考前面的设置,来编写ifcfg-ens33
[[email protected] html]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="static" //设置静态IP,将DHCP改为static或none DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="ens33" UUID="50827dbd-d613-45b2-aaa8-7f7c49265dcc" DEVICE="ens33" ONBOOT="yes" IPADDR=192.168.91.10 //本机IP地址,192.168.91.10将作为服务器端 GATEWAY=192.168.91.2 //网关 NETMASK=255.255.255.0 //子网掩码
[[email protected] ~]# systemctl stop firewalld //关闭防火墙
[[email protected] ~]# systemctl disable firewalld //开机禁止启动
[[email protected] ~]# systemctl status firewalld //查看firewalld状态
[[email protected] ~]# getenforce //关闭SELinux
[[email protected] ~]# vim /etc/selinux/config
SELINUX=disabled
[[email protected] ~]# setenforce
usage: setenforce [ Enforcing | Permissive | 1 | 0 ]
也可以这样: [[email protected] ~]# setenforce 0
[[email protected] ~]# yum install dhcp -y //安装dhcp
[[email protected] ~]# vim /etc/dhcp/dhcpd.conf /编辑dhcpd.conf配置文件
//dhcpd是dhcp的服务名,类似的有很多如:httpd等
注意事项:
参照第0步的设置来编写文件;dns服务器地址写网关地址;IP租用范围一定要包含在你DHCP设置的网段内;
[[email protected] ~]# systemctl start dhcpd //开启dhcp服务;
[[email protected] ~]# systemctl enable dhcpd //设为开机自启动
[[email protected] ~]# systemctl status dhcpd //查看dhcpd状态
[[email protected] ~]# yum install tftp-server xinetd -y //安装tftp-server和xinetd服务
[[email protected] ~]# vim /etc/xinetd.d/tftp //编辑tftp服务配置
[[email protected] ~]# systemctl restart xinetd //重启xinetd服务
[[email protected] ~]# systemctl enable xinetd //开机自启动
[[email protected] ~]# systemctl status xinetd //查看xinetd状态
[[email protected] ~]# yum install syslinux -y //安装syslinux
[[email protected] ~]# cd /var/lib/tftpboot/
[[email protected] tftpboot]# cp /usr/share/syslinux/pxelinux.0 . //拷贝
[[email protected] tftpboot]# cp /mnt/images/pxeboot/{vmlinuz,initrd.img} . //
[[email protected] tftpboot]# cp /mnt/isolinux/{vesamenu.c32,boot.msg} . //
[[email protected] tftpboot]# mkdir pxelinux.cfg //创建pxelinux.cfg配置文件
[[email protected] tftpboot]# cp /mnt/isolinux/isolinux.cfg pxelinux.cfg/default
[[email protected] tftpboot]# cd pxelinux.cfg/
[[email protected] pxelinux.cfg]# ls
[[email protected] tftpboot]# :vim /var/lib/tftpboot/pxelinux.cfg/default
// 编辑default 由于default文档过长,我们只展示出需要修改的地方
原文档: default vesamenu.c32 修改为 default linux ######## 原文档: label linux menu label ^Install CentOS 7 kernel vmlinuz append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet 修改为: label linux menu label ^Install CentOS 7 kernel vmlinuz append initrd=initrd.img ks=http://192.168.91.10/config/ks.cfg (可以不用写,也可以写:biosdevname=0 net.ifnames=0) menu end
//通过HTTP协议把光盘镜像内容传给客户端,进行这步时我们要注意,镜像是必须连接并挂载好的,我将/dev/sr0挂载在/mnt下。
[[email protected] ~]# yum install httpd -y //安装httpd服务
[[email protected] tftpboot]# cp -rf /mnt/* /var/www/html/ //拷贝镜像
{/mnt/下的内容
[[email protected] mnt]# ls
CentOS_BuildTag EULA images LiveOS repodata RPM-GPG-KEY-CentOS-Testing-7
EFI GPL isolinux Packages RPM-GPG-KEY-CentOS-7 TRANS.TBL
}
[[email protected] tftpboot]# mkdir -p /var/www/html/config
//新建目录,把自定义的文件、脚本等放置于此
[[email protected] tftpboot]# vim /var/www/html/config/ks.cfg //编辑kickstart配置文件
#platform=x86, AMD64 或 Intel EM64T #version= # Firewall configuration firewall --disabled # Install OS instead of upgrade install # Use network installation url --url="http://192.168.91.10/" #!!! # Use CDROM installation media repo --name="yum" --baseurl=http://192.168.91.10/ #!!! # Root password #密码:redhat 加密方式:MD5(Unix);Des(unix);phpBB3;WordPress rootpw --iscrypted $1$mi4lP.ZY$j5UDGX34knfGuSYPwd82u/ # openssl passwd -1 # Use graphical install graphical or text text # Run the Setup Agent on first boot firstboot --disable # System keyboard keyboard us # System language lang en_US.UTF-8 # SELinux configuration selinux --disabled # Reboot after installation reboot # System timezone timezone --isUtc Asia/Shanghai # Network information network --bootproto=dhcp --device=eth0 --noipv6 --activate network --hostname=web #!!! # System bootloader configuration bootloader --location=mbr # Clear the Master Boot Record zerombr # Partition clearing information clearpart --all --initlabel #!!! # Disk partitioning information #//注意CentOS7.3之后的版本内存要给两个G或以上 part /boot --asprimary --fstype="xfs" --ondisk=sda --size=200 part swap --fstype="swap" --ondisk=sda --size=4096 part / --fstype="xfs" --ondisk=sda --size=10240 #!!! %packages @core wget %end %post #yum_client cd /etc/yum.repos.d/ mkdir bak mv Cen* bak wget http://192.168.91.10/config/yum.repo %end %addon com_redhat_kdump --disable --reserve-mb='auto' %end
此文件也可以自己编写,本文作为参考。
[[email protected] tftpboot]# cp /etc/yum.repos.d/yum.repo /var/www/html/config/
//拷贝yum源
[[email protected] tftpboot]# systemctl restart httpd //重启http服务,打开80端口
[[email protected] tftpboot]# systemctl status httpd //查看httpd服务状态
[[email protected] tftpboot]# yum install net-tools -y //安装net-tools工具
[[email protected] tftpboot]# netstat -an | grep 80 //查看80端口是否打开
可以的话进行下一步
1.服务器端(母机)必须保持开机状态
2.客户机CD/DVD启动连接设置为自动检测
3.CentOS 7.4及以后版本,设置时内存必须大于2G,否则安装时会出现一些问题
安装成功后登录; 登录名:root passwd:redhat:
我们可以看到:新建主机的IP是192.168.91.200,正是我们分配网段的第一个IP;
由于作者水平有限,文章中错误和需要改进的地方希望大家指正,感激不尽^ _ ^