Pxe-kickstarthtml
Liunx系统批量自动安装python
实现原理:将手动安装的全部的详细步骤记录到一个文件中,而后有一种软件经过读取这个文件就能够实现自动化安装系统。linux
这个工具叫作Kickstart,kickstart是RedHat公司开源的工具,因此对Centos兼容性最好。注意Kickstart是一个项目的名称
,没有这个软件。ios
cobbler是对kickstart的全部组件的封装。本质上就是网页版的Kickstartweb
PXE原理
PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel公司开发的最新技术,工做于Client/Server的网络模式,支持工做站(主机)经过网络从远端服务器下载映像,并由此支持经过网络启动操做系统,在启动过程当中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端基本软件设置,从而引导预先安装在服务器中的终端操做系统。vim
PXE的工做过程:centos
- PXE Client 从本身的PXE网卡启动,向本网络中的DHCP服务器索取IP;
- DHCP 服务器返回分配给客户机的IP 以及PXE文件的放置位置(该文件通常是放在一台TFTP服务器上) ;
- PXE Client 向本网络中的TFTP服务器索取pxelinux.0 文件;
- PXE Client 取得pxelinux.0 文件后之执行该文件;
- 根据pxelinux.0 的执行结果,经过TFTP服务器加载内核和文件系统 ;
- 进入安装画面, 此时能够经过选择HTTP、FTP、NFS 方式之一进行安装;
详细工做流程,请参考下面这幅图:浏览器
什么是Kickstart
Kickstart是一种无人值守的安装方式。它的工做原理是在安装过程当中记录典型的须要人工干预填写的各类参数,并生成一个名为ks.cfg
的文件。若是在安装过程当中(不仅局限于生成Kickstart安装文件的机器)出现要填写参数的状况,安装程序首先会去查找Kickstart生成的文件,若是找到合适的参数,就采用所找到的参数;若是没有找到合适的参数,便须要安装者手工干预了。因此,若是Kickstart文件涵盖了安装过程当中可能出现的全部须要填写的参数,那么安装者彻底能够只告诉安装程序从何处取ks.cfg
文件,而后就去忙本身的事情。等安装完毕,安装程序会根据ks.cfg
中的设置重启系统,并结束安装。bash
PXE+Kickstart 无人值守安装操做系统完整过程以下:服务器
Kickstart部署
1.环境准备
[root@Kickstart ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) [root@Kickstart ~]# uname -r 3.10.0-693.el7.x86_64 [root@Kickstart ~]# getenforce Disabled [root@Kickstart ~]# systemctl status firewalld.service ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead) Docs: man:firewalld(1)
DHCP部署
须要把虚拟机的DHCP分配的功能关闭,网卡模式不能使用桥接模式,首选NAT模式
//1.yum安装DHCP [root@Kickstart ~]# yum install dhcp -y //2.修改DHCP配置文件/etc/dhcp/dhcpd.conf,添加以下参数: //在该配置文件中默认是没有任何关于DHCP的配置参数 cat >>/etc/dhcp/dhcpd.conf<<EOF subnet 10.0.0.0 netmask 255.255.255.0 { range 10.0.0.100 10.0.0.199; option subnet-mask 255.255.255.0; default-lease-time 21600; max-lease-time 43200; next-server 10.0.0.201; filename "/pxelinux.0"; } EOF //针对上述DHCP配置一些参数解释: range #可分配的IP地址范围(起始..结束) option subnet-mask #给客户端设置子网掩码(netmask) default-lease-time #设置默认的IP租期时间 max-lease-time #设置最大的IP租期时间 next-server #告诉客户端TFTP服务器的IP地址 filename "/pxelinux.0"; #告诉客户端从TFTP根目录下载pxelinux.0文件 注意 :DHCP配置文件里的range可分配地址的范围须要减半在计算能够对多少台主机进行批量的系统安装,致使整个问题的缘由是由于:①PXE客户端第一次获取IP地址(须要一个IP) ②配置应答文件的时候客户端会从新得到一个IP地址(须要一个IP)。 /usr/share/doc/dhcp*/dhcpd.conf.example #该文件存放有dhcp的配置参数案例 //3.启动dhcp服务 [root@Kickstart ~]# systemctl start dhcpd.service //4.在启动dhcp服务以前侦听日志文件,能够看到dhcp的启动过程和错误 [root@Kickstart ~]# tail -f /var/log/messages Dec 4 17:26:55 jason-c7 dhcpd: Listening on LPF/eth1/00:50:56:38:92:85/172.16.1.0/24 Dec 4 17:26:55 jason-c7 dhcpd: Sending on LPF/eth1/00:50:56:38:92:85/172.16.1.0/24
批量安装系统的主机最好不要将dhcp服务开启自启动,否则有可能会致使在同一个局域网中的其它服务器自动重装系统。
TFTP部署
TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务(用来传递启动文件)。端口号为69。
//1.yum安装TFTP和xinetd,xinetd 用于管理TFTP的服务 [root@Kickstart /]# yum install xinetd tftp-server -y //2.自行建立/tftpboot目录做为tftp的根目录,经过xinetd来指定TFTP的根目录 [root@Kickstart /]# mkdir /tftpboot [root@Kickstart /]# cat /etc/xinetd.d/tftp |grep -E "server_args|disable" server_args = -s /tftpboot #新根目录的位置 disable = no #是否开启tftp服务(no=开启,yes=不开启) //3.启动xinetd服务,TFTP服务时经过xinetd来管理重启和启动。 [root@Kickstart /]# systemctl start xinetd [root@Kickstart /]# lsof -i:69
TFTP的根目录无论在哪里建立都无所谓,看我的,不过若是不适用默认的TFTP的根目录就得须要在/etc/xinetd.d/tftp文件中将server_args参数指定为新的根目录
HTTP部署
能够用Apache或Nginx提供HTTP服务。Python的命令web服务不行,会有报错。
//1.安装并启动Httpd [root@Kickstart ~]# yum install httpd -y [root@Kickstart ~]# systemctl start httpd [root@Kickstart ~]# sed -i "277i ServerName 127.0.0.1:80" /etc/httpd/conf/httpd.conf //2.镜像挂载和目录建立 #/var/www/html/该目录是httpd的网站站点目录 [root@Kickstart ~]# mkdir -p /var/www/html/CentOS7 [root@Kickstart ~]# mount /dev/cdrom /var/www/html/CentOS7 //无论怎么操做,只要把安装光盘内容能经过web发布便可。由于是演示,若是复制镜像就有点浪费时间。但生产环境就必定要复制了,光盘读取速度有限。
浏览器访问 http://10.0.0.201/CentOS7/ 校验是否正确
配置支持PXE启动程序
syslinux是一个功能强大的引导加载程序,并且兼容各类介质。SYSLINUX是一个小型的Linux操做系统,它的目的是简化首次安装Linux的时间,并创建修护或其它特殊用途的启动盘。若是没有找到pxelinux.0这个文件,能够安装一下。
//1.安装syslinux,将/usr/share/syslinux/下的pxelinux.0和reboot.32文件将其拷贝到TFTP的根目录 [root@Kickstart /]# cd /var/lib/tftpboot/ #TFTP的根目录 [root@Kickstart /]# yum install syslinux -y #经过安装syslinux得到pxelinux.0文件 [root@Kickstart /]# rpm -ql syslinux |grep pxelinux.0 #pxelinux.0文件的路径 /usr/share/syslinux/gpxelinux.0 /usr/share/syslinux/pxelinux.0 [root@Kickstart /]# cp /usr/share/syslinux/reboot.c32 /tftpboot/ [root@Kickstart /]# cp /usr/share/syslinux/pxelinux.0 /tftpboot/ //2.从镜像中找到相关的配置文件并拷贝到tftp的根目录 [root@Kickstart /]# cp /var/www/html/CentOS7/isolinux/* /tftpboot/ [root@Kickstart /]# ls /tftpboot/ TRANS.TBL boot.msg initrd.img isolinux.cfg pxelinux.0 splash.png vmlinuz boot.cat grub.conf isolinux.bin memtest reboot.c32 vesamenu.c32 文件说明: pxelinux.0 #该文件用于启动PXE的环境 reboot.c32 #装完系统后自动启动文件 vmlinuz #vm内核文件 initrd.img #启动文件 vesamenu.c32 #框架文件(欢迎界面) //3.新键一个pxelinux.cnf目录,isolinux.cfg文件拷贝到/tftpboot/pxelinux.cfg目录下并重命名为default [root@Kickstart /]# mkdir -p /tftpboot/pxelinux.cfg [root@Kickstart /]# cp /var/www/html/CentOS7/isolinux/isolinux.cfg ./tftpboot/pxelinux.cfg/default #该文件决定了pxe的安装界面样式和选项等
手动网络安装
该方式是经过网络的方式手动的安装系统,那么PXE客户端须要手工的选择菜单进行系统的安装
1.编辑default文件,/tftpboot/pxelinux.cfg/default,其它参数不须要修改保持默认便可,只须要修改append initrd=initrd.img这项
[root@Kickstart /]# vim /tftpboot/pxelinux.cfg/default default jason-ks timeout 600 prompt 0 label jason-ks kernel vmlinuz append initrd=initrd.img inst.repo=http://10.0.0.201/CentOS7/
2.若是须要安装系统的时候(针对Centos7),网卡以ethXX 命名,配置参数以下:
append initrd=initrd.img inst.repo=http://10.0.0.201/CentOS7/ net.ifnames=0 biosdevname=0
3.启动虚拟机,会出现如下界面:
自动化安装
编写KS文件(包含安装的全部步骤)
方法1:新装CentOS系统会自动生成文件,存放在/root/anaconda-ks.cfg
方法2:图形CentOS系统提供的图形工具
方法3:了解ks文件语法,编写ks文件。(推荐)
KS文件语法
官网文档
CentOS6 : https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/s1-kickstart2-options.html
CentOS7:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/installation_guide/
官网支持中文语言
ks文件组成
命令段
包组段 以%packages开头,以%end结束
脚本段 以%post开头,以%end结束,在安装完系统以后执行的相关Linux命令、脚本
以%pre开头,以%end结束,在安装完系统以前执行的相关Linux命令、脚本
kickstart文件语法检查
yum install pykickstart ksvalidator /var/www/html/ks_config/CentOS-7-ks.cfg
请记住这个验证工具备其局限性。Kickstart 文件可能会很复杂;ksvalidator 可保证其语法正确,且该文件不包含淘汰的选项,但它没法保证安装会成功。它也不会尝试验证 Kickstart 文件的 %pre、%post 和 %packages 部分。
root加密密码生成
python -c 'import crypt; print(crypt.crypt("密码"))'
ks文件解析
install #告知安装程序,这是一次全新安装,而不是升级upgrade。 url --url=" " #经过FTP或HTTP从远程服务器上的安装树中安装。 url --url="http://10.0.0.201/CentOS7/" url --url ftp://<username>:<password>@<server>/<dir> nfs #从指定的NFS服务器安装。 nfs --server=nfsserver.example.com --dir=/tmp/install-tree text #使用文本模式安装。 lang #设置在安装过程当中使用的语言以及系统的缺省语言。lang en_US.UTF-8 keyboard #设置系统键盘类型。keyboard us zerombr #清除mbr引导信息。 bootloader #系统引导相关配置。 bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" --location= #指定引导记录被写入的位置.有效的值以下:mbr(缺省),partition(在包含内核的分区的第一个扇区安装引导装载程序)或none(不安装引导装载程序)。 --driveorder #指定在BIOS引导顺序中居首的驱动器。 --append= #指定内核参数.要指定多个参数,使用空格分隔它们。 network #为经过网络的kickstart安装以及所安装的系统配置联网信息。 network --bootproto=dhcp --device=eth0 --onboot=yes --noipv6 --hostname=CentOS6 --bootproto=[dhcp/bootp/static]中的一种,缺省值是dhcp。bootp和dhcp被认为是相同的。 static方法要求在kickstart文件里输入全部的网络信息。 network --bootproto=static --ip=10.0.0.100 --netmask=255.255.255.0 --gateway=10.0.0.2 --nameserver=10.0.0.2 请注意全部配置信息都必须在一行上指定,不能使用反斜线来换行。 --ip= #要安装的机器的IP地址. --gateway= #IP地址格式的默认网关. --netmask= #安装的系统的子网掩码. --hostname= #安装的系统的主机名. --onboot= #是否在引导时启用该设备. --noipv6= #禁用此设备的IPv6. --nameserver= #配置dns解析. timezone #设置系统时区。timezone --utc Asia/Shanghai authconfig #系统认证信息。authconfig --enableshadow --passalgo=sha512 #设置密码加密方式为sha512 启用shadow文件。 rootpw #root密码 clearpart #清空分区。clearpart --all --initlabel --all #从系统中清除全部分区,--initlable 初始化磁盘标签 part #磁盘分区。 part /boot --fstype=ext4 --asprimary --size=200 part swap --size=1024 part / --fstype=ext4 --grow --asprimary --size=200 --fstype= #为分区设置文件系统类型.有效的类型为ext2,ext3,swap和vfat。 --asprimary #强迫把分区分配为主分区,不然提示分区失败。 --size= #以MB为单位的分区最小值.在此处指定一个整数值,如500.不要在数字后面加MB。 --grow #告诉分区使用全部可用空间(如有),或使用设置的最大值。 firstboot #负责协助配置redhat一些重要的信息。 firstboot --disable selinux #关闭selinux。selinux --disabled firewall #关闭防火墙。firewall --disabled logging #设置日志级别。logging --level=info reboot #设定安装完成后重启,此选项必须存在,否则kickstart显示一条消息,并等待用户按任意键后才从新引导,也能够选择halt关机。
KS配置文件
经过KS配置文件实现自动化安装系统
1.先要将default文件清空,而后添加以下内容:
[root@Kickstart ~]# cp /tftpboot/pxelinux.cfg/default{,.bak} [root@Kickstart ~]# > /tftpboot/pxelinux.cfg/default [root@Kickstart ~]# cat /tftpboot/pxelinux.cfg/default #jason centos 7 kickstart configure default jason-ks timeout 600 prompt 0 label jason-ks kernel vmlinuz append initrd=initrd.img ks=http://10.0.0.201/ks.config/CentOS7-ks.cfg ksdevice=eth0 net.ifnames=0 biosdevname=0 #参数解释: append initrd=initrd.img ks #存放ks配置文件的服务器地址和路径,经过该路径找到对应的ks.cfg文件来引导系统安装 ksdevice=eth0 #指定该网卡进行ks的数据交互(可忽略) net.ifnames=0 biosdevname=0 #修改内核参数,让网卡命名变为ethXX
2.建立存放ks文件的目录
若是ks文件有须要执行的脚本文件,那么该脚本文件须要和ks文件在同一个目录下
[root@Kickstart ~]# mkdir -p /var/www/html/ks.config/
3.ks配置文件以下:
[root@Kickstart ~]# cat /var/www/html/ks.config/CentOS7-ks.cfg # Kickstart Configurator for CentOS 7 by yao zhang install url --url="http://10.0.0.201/CentOS7/" text lang en_US.UTF-8 keyboard us zerombr bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" network --bootproto=static --device=eth0 --gateway=10.0.0.2 --ip=10.0.0.202 --nameserver=223.5.5.5 --netmask=255.255.255.0 --activate network --bootproto=static --device=eth1 --ip=172.16.1.202 --netmask=255.255.255.0 --activate network --hostname=Addie #network --bootproto=dhcp --device=eth1 --onboot=yes --noipv6 --hostname=CentOS7 timezone --utc Asia/Shanghai authconfig --enableshadow --passalgo=sha512 #rootpw 123456 rootpw --iscrypted $6$X20eRtuZhkHznTb4$dK0BJByOSAWSDD8jccLVFz0CscijS9ldMWwpoCw/ZEjYw2BTQYGWlgKsn945fFTjRC658UXjuocwJbAjVI5D6/ clearpart --all --initlabel part /boot --fstype xfs --size 1024 part swap --size 1024 part / --fstype xfs --size 1 --grow firstboot --disable selinux --disabled firewall --disabled logging --level=info reboot %packages @^minimal @compat-libraries @debugging @development tree nmap sysstat lrzsz dos2unix telnet wget vim bash-completion net-tools %end %post systemctl disable postfix.service %end #该ks配置文件只用于CentOS7的系统自动化安装。
4.启动空白虚拟机,观察自动安装过程
注意,若是是安装Centos7,须要把内存设置到大于2G,否则安装极可能会出现报错
5.等待数十分钟后,系统安装完毕(登陆帐号:root,密码:123456)