为啥要用无人值守安装系统?很简单的答案!就是方便日常工作!
PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端(客户端)基本软件设置,从而引导预先安装在服务器中的终端操作系统。PXE可以引导多种操作系统,如:Windows95/98/2000/windows2003/windows2008/winXP/win7/win8,linux系列系统等。
严格来说,PXE 并不是一种安装方式,而是一种引导方式。 进行 PXE 安装的必要条件是在要安装的计算机中必须包含一个 PXE 支持的网卡(NIC),即网卡中必须要有 PXE Client。PXE 协议可以使计算机通过网络启动。此协议分为 Client端和 Server 端,而PXE Client则在网卡的 ROM 中。当计算机引导时,BIOS 把 PXE Client 调入内存中执行,然后由 PXE Client 将放置在远端的文件通过网络下载到本地运行。运行 PXE 协议需要设置 DHCP 服务器和 TFTP 服务器。DHCP 服务器会给 PXE Client(将要安装系统的主机)分配一个 IP 地址,由于是给 PXE Client 分配 IP 地址,所以在配置 DHCP 服务器时需要增加相应的 PXE 设置。此外,在 PXE Client 的 ROM 中,已经存在了 TFTP Client,那么它就可以通过 TFTP 协议到 TFTP Server 上下载所需的文件了。
PXE工作过程:
PXE Client向DHCP发送请求
DHCP服务器提供信息
DHCP客户机接收IP和服务器的互动
PXE客户端请求下载启动文件
Boot Server响应客户端请求并传送文件
pxeliunx.0:网络引导程序pxe文件
pxelinux.cfg/default:指定镜像的位置或ks文件位置
vmlinuz:引导内核
initrd.img:小型的linux操作系统,类似于windows的PE
请求下载自动应答文件
客户端安装操作系统
Kickstart是一种无人值守的安装方式。它的工作原理是在安装过程中记录人工干预填写的各种参数,并生成一个名为ks.cfg的文件。如果在自动安装过程中出现要填写参数的情况,安装程序首先会去查找ks.cfg文件,如果找到合适的参数,就采用所找到的参数;如果没有找到合适的参数,便会弹出对话框让安装者手工填写。所以,如果ks.cfg文件涵盖了安装过程中所有需要填写的参数,那么安装者完全可以只告诉安装程序从何处下载ks.cfg文件,然后就去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中的设置重启/关闭系统,并结束安装。
安装dhcp、tftp-server、httpd
[root@localhost ~]# yum install dhcp xinetd tftp-server httpd -y
tftp-server被xinted所管理,所以需要安装xinetd来管理启动tftp-server
DHCP是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。
所有客户机的IP地址设定资料都由DHCP服务器集中管理,并负责处理客户端的DHCP请求;而客户端则会使用从服务器分配下来的IP地址。
在此不详细阐述DHCP工作原理,若想了解可参考:https://www.cnblogs.com/wajika/p/6537085.html
DHCP服务器提供三种IP分配方式:
配置dhcp
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf
subnet 192.168.1.0 netmask 255.255.255.0 { #dhcp分配的网段
range 192.168.1.100 192.168.1.200; #dhcp分配的地址段
option subnet-mask 255.255.255.0; #dhcp分配的掩码
DHCPDARGS=eth0; #指定网卡启动dhcp
default-lease-time 600; #默认租约时间
max-lease-time 5400; #最大租约时间
next-server 192.168.1.1; #指定tftp服务器
filename "/pxelinux.0"; #tftp目录下pxelinux.0文件
}
DHCP指定监听网卡
注意:
在实际生产环境中,可能会有多个网络环境而且环境不会互通,可以结合自己公司的情况进行优化:
- 物理机一般不止一块网卡,为了确保主机能分配到地址,最好指定网卡启动dhcp
- 默认租约时间要设小一点,因为是用来做pxe安装大量服务器系统,在ip地址有限的情况(本段地址可能已经被用掉很多地址,剩下的不够被所有机器分配)下,尽量缩小默认租约时间,以防止安装时第一批机器装完,IP地址没有释放,第二批机器分配不到IP地址的情况
- 条件足够的情况下,最好专门分配一个vlan用于装机,这样可以防止很多意外发生。
- 在复杂网络环境中指定服务器重装可以使用dhcp的mac地址绑定的方式
TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69。
TFTP是一个传输文件的简单协议,它基于UDP协议而实现,但是我们也不能确定有些TFTP协议是基于其它传输协议完成的。此协议设计的时候是进行小文件传输的。因此它不具备通常的FTP的许多功能,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证,它传输8位数据。
配置tftp
[root@localhost html]# vim /etc/xinetd.d/tftp #配置tftp配置文件
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot #tftp根目录
disable = no #no表示开启tftp,默认为yes
per_source = 11
cps = 100 2
flags = IPv4
}
配置httpd
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf #配置httpd
#ServerName www.example.com:80
ServerName 192.168.1.1:80
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# mkdir CentOS-7.5 #创建用于挂载镜像的目录
[root@localhost html]# mount /tmp/CentOS-7-x86_64-DVD-1804.iso /var/www/html/CentOS-7.5/ #挂载镜像
mount: /dev/loop0 is write-protected, mounting read-only
[root@localhost html]# mkdir ks_cfg #创建系统ks文件所用的文件夹
[root@localhost html]# cd ks_cfg/
[root@localhost ks_cfg]# ll
total 84
drwxr-xr-x 2 root 4096 Sep 6 09:37 .
drwxr-xr-x 4 root 4096 Sep 6 10:01 ..
-rw-r--r-- 1 root 2128 Sep 6 09:24 ip.sh #自动配置主机名、ip、hosts文件脚本
-rw-r--r-- 1 root 947 Sep 6 09:24 ip.txt #IP地址统一存放文件
-rw-r--r-- 1 root 15880 Sep 6 09:24 ks.cfg #安装系统所使用的ks文件
-rw-r--r-- 1 root 833 Sep 6 09:24 zabbix_agent.sh #加入zabbix监控脚本
各文件配置后面会讲,ks文件夹中可以自定义ks文件和所使用到的文件
syslinux是一个功能强大的引导加载程序,而且兼容各种介质。它的目的是简化首次安装Linux的时间,并建立修护或其它特殊用途的启动盘。它的安装很简单,一旦安装syslinux好之后,sysLinux启动盘就可以引导各种基于DOS的工具,以及MS-DOS/Windows或者任何其它操作系统。不仅支持采用BIOS结构的主板,而且从6.0版也开始支持采用EFI结构的新型主板。
注意:SYSLINUX不支持NTFS文件系统,所以磁盘必须是FAT(FAT16/FAT32)文件系统
[root@localhost html]# cd /var/lib/tftpboot/
[root@localhost tftpboot]# cp /var/www/html/CentOS-7.5/isolinux/* . #将镜像中的启动文件拷贝到tftp目录下
[root@localhost tftpboot]# cp /usr/share/syslinux/pxelinux.0 . #将pxelinux.0文件拷贝到本地。如果没有,需要安装syslinux 命令:yum install syslinux -y
[root@localhost tftpboot]# mkdir pxelinux.cfg #创建pxelinux.cfg文件夹
[root@localhost tftpboot]# cp /var/www/html/CentOS-7.5/isolinux/isolinux.cfg pxelinux.cfg/default #将镜像中的引导文件拷贝到pxelinux.cfg下并命名为default
[root@localhost tftpboot]# vim pxelinux.cfg/default
(1)可以选择只修改菜单中地址
label ks
menu label Test this ^ks
menu default
kernel vmlinuz
append initrd=initrd.img ks=http://192.168.1.1/ks_cfg/ks.cfg
(2)也可以把文件中的内容全删掉,仅留以下内容
default ks
label ks
kernel vmlinuz
append initrd=initrd.img ks=http://192.168.1.1/ks_cfg/ks.cfg
[root@localhost tftpboot]# vim /var/lib/tftpboot/pxelinux.cfg/default
default vesamenu.c32 # 默认加载一个菜单
#prompt 1 # 开启会显示命令行'boot: '提示符。prompt值为0时则不提示,将会直接启动'default'参数中指定的内容。
timeout 600 # timeout时间是引导时等待用户手动选择的时间,设为1可直接引导,单位为1/10秒。
display boot.msg # 菜单背景图片、标题、颜色。
menu background splash.jpg
menu title Welcome to CentOS 6.6!
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffffff #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ff000000 #ffffffff
menu color hotkey 7 #ffffffff #ff000000
menu color scrollbar 0 #ffffffff #00000000
label linux # label指定在boot:提示符下输入的关键字,比如boot:linux[ENTER],这个会启动label linux下标记的kernel和initrd.img文件。
menu label ^Install or upgrade an existing system
menu default
kernel vmlinuz # 指定要启动的内核。同样要注意路径,默认是/tftpboot目录
append initrd=initrd.img # 指定追加给内核的参数,initrd.img是一个用来建立仿真目录的镜像
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl start xinetd
[root@localhost ~]# systemctl start dhcpd
通常,我们在安装操作系统的过程中,需要大量的和服务器交互操作,为了减少这个交互过程,kickstart就诞生了。使用这种kickstart,只需事先定义好一个Kickstart自动应答配置文件ks.cfg(通常存放在安装服务器上),并让安装程序知道该配置文件的位置,在安装过程中安装程序就可以自己从该文件中读取安装配置,这样就避免了在安装过程中多次的人机交互,从而实现无人值守的自动化安装。
方法1、 每安装好一台Centos机器,Centos安装程序都会创建一个kickstart配置文件,记录你的真实安装配置。如果你希望实现和某系统类似的安 装,可以基于该系统的kickstart配置文件来生成你自己的kickstart配置文件。(生成的文件名字叫anaconda-ks.cfg位于 /root/anaconda-ks.cfg)
方法2、Centos提供了一个图形化的kickstart配置工具。在任何一个安装好的Linux系统上运行该工具,就可以很容易地创建你自己 的kickstart配置文件。kickstart配置工具命令为system-config-kickstart
方法3、阅读kickstart配置文件的手册。用任何一个文本编辑器都可以创建你自己的kickstart配置文件。
键盘类型,语言,安装方式等系统的配置,有必选项和可选项,如果缺少某项必选项,安装时会中断并提示用户选择此项的选项
%packages
@groupname:指定安装的包组
package_name:指定安装的包
-package_name:指定不安装的包
在安装过程中默认安装的软件包,安装软件时会自动分析依赖关系。
%pre:预安装脚本(由于只依赖于启动镜像,支持的命令很少)
%post:后安装脚本(基本支持所有命令)
而具体的ks.cfg文件的配置,我们只需要在已经安装好的linux的root家目录找到anaconda_ks.cfg(这个ks文件就是在安装linux后,根据用户的安装选项自动生成的)
每个项目都由关键字来识别;关键字可跟一个或多个参数;如果某选项后面跟随了一个等号(=),它后面就必须指定一个值。
关键字 含义
install(可选) 明确指定系统此次进行的是全新安装系统,而不是升级upgrade;是默认项;
cdrom(可选) 以本地CD-ROM为源安装系统;
harddrive (可选) 以硬盘分区中包含的镜像为源(安装树)安装新系统;当以该种方式安装系统时,即使指定clearpart --all项,源所在分区也不会被重新抹去;
--partition= 指定分区
--dir= 指定包含镜像的目录
例:
harddrive --partition=/dev/sdb2 --dir=/data/iso
nfs (可选) 指定从NFS服务器上获取安装树;
--server= 指定NFS服务器,主机名称或IP
--dir= 包含安装树的目录
--opts= 可以指定挂载NFS的目录时的挂载选项
例:
nfs --server=192.168.31.72 --dir=/data/iso
url (可选) 指定通过FTP或HTTP从网络获取安装树;
--url 指定资源位置
例:
url --url ftp://:@/
url --url
bootloader (必需)设定boot loader安装选项;
--append= 可以指定内核参数,要指定多个参数,使用空格分隔它们。
--driveorder= 设定设备BIOS中的开机设备启动顺序
--location= 设定引导记录的位置,有效的值如下:
mbr(默认值);
partition(在包含内核的分区的第一个扇区安装引导装载程序)或none(不安装引导装载程序)。
例:
bootloader --location=mbr --append=“rhgb quiet” --driveorder=sda,sdb
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb rhgb quiet quiet"
clearpart (可选)在建立新分区前清空系统上原有的分区表,默认不删除分区;
--all 擦除系统上原有所有分区;
--drives 删除指定驱动器上的分区
--initlabel 初始化磁盘卷标为系统架构的默认卷标
--linux 擦除所有的linux分区
--none(default)不移除任何分区
例:
clearpart --drives=hda,hdb --all --initlabel
zerombr (可选)清除mbr引导信息,会同时清空系统用原有分区表
drivedisk (可选)如果使用特殊存储方式时,需要指定驱动程序盘位置以便加载存储驱动;
1. 将驱动盘拷贝到本地硬盘某分区根目录:
drivedisk [ --type= ]
2. 也可以指定一个网络位置加载驱动程序盘
drivedisk --source=ftp://path/to/drive.img
drivedisk --source=http://path/to/drive.img
drivedisk --source=nfs:host://path/to/drive.img
firewall (可选)配置系统防火墙选项;
firewall -enable|--disable [ --trust ] [ --port= ]
--enable 拒绝外部发起的任何主动连接;
--disable 不配置任何iptables防御规则;
--trust 指定完全信任网卡设备;
--port 使用port:protocol格式指定可以通过防火墙的服务;
例:
firewall --enable --trust eth0 --trust eth1 --port=80:tcp
firewall --disabled
selinux (可选)设置系统selinux状态;默认为启用并处于enforcing模式;
selinux [ --disabled|–enforcing|--premissive ]
例:
selinux --disabled
reboot (可选) 在系统成功安装完成后默认自动重启系统(kickstart方法时);
在收到你敢装系统完成后,会提示按任意键进行重启;
在本文件中没有明确指明其他方法时就默认完成方式为reboot;
使用 reboot 选项可能会导致安装的死循环,这依赖于安装介质和方法。需要特别注意;
halt (可选) 在系统成功安装完成后关机;默认为reboot;
其他选项还有shutdown、poweroff,需要使用请自行参考官方文档。
graphical (可选)默认值,在图形模式下进行kickstart方式安装;
text (可选)以文本方式进行kickstart安装;默认为图形界面
key (可选) 设置一个安装码(installration number),用于获取RedHat官方的支持服务;
--skip 跳过key设置,不进行设置;如果不设置可能跳转到交互模式让用户选取动作;
keyboard (必需)设置键盘类型;一般设置为us;
例:
keyboard us
lang (必需)设置安装过程使用的语言及系统的缺省语言;文本模式安装时可能不支持某些语言(中、韩...),所以可能仍以默认的英文方式安装;默认en_us,装中文时,需要后期%packages部分装上中文支持组件;
例:
lang en_US
timezone (可选) 设置系统的时区;
timezone [ --utc ]
例:
timezone --utc Asia/Shanghai
timezone Asia/Shanghai
auth/authconfig (必需) 设置系统的认证方式;默认为加密但不隐藏(shadow);
--enablemd5 使用MD5加密方式
--useshadow或—enableshadow 使用隐藏密码;
--enablenis= 使用NIS认证方式
--nisdomain= NIS域
--nisserver= NIS服务器 还可以设置LDAP、SMB及Kerberos5认证方式,详细请参考官方文档;
例:
authconfig --useshadow --enablemd5
authconfig --enableshadow --passalgo=sha512 设置密码加密方式为sha512 启用shadow文件。
rootpw (必需) 设置系统root账号的密码;
rootpw [ --iscrypted ]
--iscrypted 表示设置的密码为加密过的串;
例:
rootpw pa4word rootpw --iscrypted $1$RPYyxobb$/LtxMNLJC7euEARg2Vu2s1
rootpw --iscrypted $6$fvyDQYgM0a7kwvth$jAhWo.26MxcNMFwnJNl6011diLKv8Ai/3QapVZhfaXExPz9wAQfrxHfx.4RWK2SPb83OB33MyYX61Xd3h1hvB/
network (可选) 配置网络信息;在网络安装(NFS/HTTP/FTP)时必须指定;
--bootproto=dhcp|bootp|static 指定ip获取方式,默认为dhcp/bootp;static方法要求在kickstart文件里输入所有的网络信息。
--device= 设置安装时激活来进行系统安装的网卡设备;该参数只在kickstart文件为本地文件时有效;若kickstart配置文件在网络上,安装程序会先初始化网卡然后去寻找kickstart文件;
--ip= ip设置
--gateway= 网关
--nameserver= DNS设置
--nodns 不设置DNS
--netmask= 子网掩码
--hostname= 设置安装后主机名称
--onboot= 设置是否在系统启动时激活网卡
--class= 设置DHCP的class值
--noipv4 禁用该设备的ipv4功能
--noipv6 禁用该设备的ipv6功能 如将网络模式设置为静态模式,则必须在一行内写上ip,netmask、dns、gateway等信息;
例:
network –bootproto=static –ip=1.1.1.1 --metmask=255.0.0.0 --gateway=1.1.1.254 --nameserver=1.1.1.2
netmask --bootproto=dhcp --device=eth0
network --onboot yes --device eth0 --mtu=1500 --bootproto static --ip 10.0.0.32 --netmask 255.255.255.0 --noipv6 --hostname openstack02
network --onboot yes --device eth1 --bootproto static --ip 192.168.31.32 --netmask 255.255.255.0 --gateway 192.168.31.1 --noipv6 --nameserver 223.5.5.5 --hostname openstack02
skipx (可选)
如果该项存在,就不对系统的X进行设置;
xconfig (可选)配置X window ;如果不给出选项,在安装过程中需要手动调整设置;当然不安装X时不应该添加该项;
--driver 为显卡设置X驱动
--videoram= 设置显卡的RAM大小
--defaultdesktop= 设置GNOME/KDE作为默认桌面;假定这两个桌面环境在%packages例已经安装
--startxonboot 使用图形界面登录系统
--resolution= 设置图形界面的分辨率;可用值有640*480、800*600、1024*768等;确保设置指适合于显示卡及显示器;
--depth= 设置显示色深;可用值有8/16/24/32;确保设置值适合于显示设备;
例:
xconfig --startxonboot --resolution=800*600 --depth=16
services (可选)设置禁用或允许列出的服务;
--disabled 设置服务为禁用
--enabled 启动服务
例:
services --disabled autid,cups,smartd,nfslock 服务之间用逗号隔开,不能有空格
iscsi(可选)指定额外的ISCSI设备;
issci --ipaddr= ipaddr [options].
--target
--port=
--user=
--password=
part/partition (install模式必须)建立新分区;
part |swap|pv.id|rdid.id
options
mntpoint:挂载点,是在创建普通分区时指定新分区挂载位置的项;挂载点需要格式正确
swap: 创建swap分区;
raid.id: 表示创建的分区类型为raid型;必须用id号进行唯一区别;
pv.id: 表示所创建的分区类型为LVM型;必须用唯一id号进行区别;
--size= 设置分区的最小值,默认单位为M,但是不能写单位;
--grow 让分区自动增长利用可用的剩余磁盘空间,或是增长到设置的maxsize值;
--maxsize 设置分区自动增长(grow)时的最大容量值,以M为单位,但不能写单位;
--onpart=/--usepart= 设置使用原有的分区;
--noformat 设置不格式化指定的分区,在跟—onpart一同使用时,可以避免删除原有分区上的数据,在新安装的系统中保留使用数据;
--asprimary 强制制定该分区为主分区;若指定失败,分区会失败,导致安装停止;
--fstype= 新增普通分区时指定分区的类型,可以为ext2、ext3、ext4、swap、vfat及hfs;
--ondisk=/--ondrive= 设定该分区创建在一个具体的磁盘上;
--start 指定分区以磁盘上那个磁道开始;需要跟--ondisk参数一块使用;
--end 指定分区以磁盘上那个磁道结束;需要跟上述两个参数一起使用;
--recommended:让系统自行决定分区的大小;在创建swap分区时,若RAM<2G,则分区大小为2*RAM;若RAM>=2G时,分区大小为RAM+2G;
--bytes-pre-inode= 指定分区格式化时inode的大小;默认值为4096
--fsoptions= 指定创建fstab文件时该分区挂载参数项;
例:
part /boot --fstype=“ext3” --size=100
part swap --fstype=“swap” –size=512
part / --bytes-pre-inode=4096 --fstype=“ext4”--size=10000
part /data --onpart=/dev/sdb1 --noformat
part raid.100 --size=2000
part pv.100 --size=1000
part /boot --fstype=ext4 --asprimary --size=200
part swap --asprimary --size=512
part / --fstype=ext4 --grow --asprimary --size=200
raid (可选) 设置RAID。
raid 挂载点 --level= --device=
挂载点: 选取根/时,注意尽量避免/boot在RAID内,除非为RAID1;
--level= 设置RAID级别
--device= RAID设备名称,如md0,md1...
--byte-pre-inode= 设置该RAID分区上inode大小;若分区文件系统类型不支持该参数,会静默忽略参数;
--spares= 设置RAID的热备盘
--fstype= 设置文件系统类型
--fsoptions= 设置挂载该文件系统时自定义的一些参数,参数写入fstab文件;
--useexisting 使用现有的RAID设备并且重新格式化原设备
--noformat 在使用现有的RAID设备时不格式化原有RAID设备
例:完整创建一个RAID1设备示例;
part raid.10 --size=1000 --ondisk=/dev/sdb
part raid.11 --size=1000 --ondisk=/dev/sdc raid /data --level=1 --device=md0 raid.10 raid.11
volgroup (可选) 创建一个LVM卷组VG;
volgroup vg_name partition [options]
--useexiting 使用现有的VG并且重新格式化
--noformat 使用现有的VG时不做格式化
--pesize 设置PE(physical extents)块大小
例:
part pv.11 --size=2000 volgroup myvg pv.11
logvol (可选) 创建一个LVM逻辑卷LV; logvel mnt_point
--vgname=vg_name
--size=lv_size
--name=lv_name
[options]
--useexiting 使用现有的LV并且重新格式化
--noformat 使用现有的LV时不做格式化
--fstype= 指定RAID分区类型
--fsoptions= 设置挂载该文件系统时自定义的一些参数,参数写入fstab文件;
--byte-pre-inode= 设置该RAID分区上inode大小;
--precent= 设定LV大小为VG可用空间的比例;
例:
part pv.20 --size=5000 volgroup mvvg pv.20 logvol /data --vgname=myvg --size=3000 --name=mydata
firstboot(可选) 负责协助配置redhat一些重要的信息。
firstboot --disable
logging(可选) 设置日志级别。
logging --level=info
可以根据自己所需进行调整,ks文件需要用.cfg结尾,必须与default文件中指定的位置相同
ks.cfg
#version=DEVEL
install #表示是安装系统
# System authorization information
auth --enableshadow --passalgo=sha512 #启用加密
text #文本安装
#graphical #图形化安装,注释掉
# Use graphical install
url --url=http://192.168.1.1/CentOS-7.5/ #用于读取系统的url
# Firewall configuration
firewall --disabled #关闭防火墙
# SELinux configuration
selinux --disabled #关闭selinux
# Run the Setup Agent on first boot
firstboot --disable #关闭第一次启动后的安装配置
ignoredisk --only-use=sda #默认第一块启动盘
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us' #键盘
# System language
lang en_US.UTF-8 #语言和编码
# Network information
network --bootproto=dhcp --device=ens33 --onboot=off --ipv6=auto --no-activate #安装时配置网卡地址
network --hostname=localhost.localdomain #安装时配置主机名
# System timezone
timezone Asia/Shanghai #时区
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda #指定引导装载程序怎样被安装
# Root password
rootpw --iscrypted $1$vIP9ZiKA$ryz7cg0/2NwoOYVnHhHCF1 #root密码
# System services
#services --enabled="chronyd"
# Do not configure the X Window System
skipx #不使用图形界面
# Accept license
eula --agreed #同意最终用户许可协议
# Reboot after installation
reboot #安装后重启
# Disk partitioning information
%include /tmp/partition.ks
%pre #系统安装前所执行的脚本
#!/bin/sh
# 创建分区,如果分区比较简单,可以放在上面,分区比较多的,可以像这样写脚本放在%pre块内
act_mem=$(cat /proc/meminfo | grep MemTotal | awk '{printf("%d",$2/1024)}')
echo "" > /tmp/partition.ks
echo "clearpart --all --initlabel" >> /tmp/partition.ks
echo 'part pv.767 --fstype="lvmpv" --ondisk=sda --size=1 --grow' >> /tmp/partition.ks..ec01]oho 'part biosboot --fstype="biosboot" --ondisk=sda --size=2' >> /tmp/partition.ks
echo 'part /boot --fstype="ext4" --ondisk=sda --size=512' >> /tmp/partition.ks
echo 'volgroup rhel --pesize=4096 pv.767' >> /tmp/partition.ks
echo 'logvol /data --fstype="ext4" --size=1 --grow --name=data --vgname=rhel' >> /tmp/partition.ks
echo 'logvol / --fstype="ext4" --size=102400 --name=root --vgname=rhel' >> /tmp/partition.ks
if [ ${act_mem} -ge 65536 ]
then
echo "logvol swap --fstype=swap --name=swap --vgname=rhel --size=65536" >> /tmp/partition.ks
elif [ ${act_mem} -le 8192 ]
then
echo "logvol swap --fstype=swap --name=swap --vgname=rhel --size=${act_mem}" >> /tmp/partition.ks
else
echo "logvol swap --fstype=swap --name=swap --vgname=rhel --size=$(expr ${act_mem} / 2)" >> /tmp/partition.ks
fi
%end
%post #系统安装后所执行的脚本
#Sshd config
sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
......
wget -O /tmp/ip.txt http://192.168.1.1/ks_cfg/ip.txt
wget -O /tmp/ip.sh http://192.168.1.1/ks_cfg/ip.sh
/bin/sh /tmp/ip.sh
wget -O /tmp/zabbix_agent.sh http://http://192.168.1.1/ks_cfg/zabbix_agent.sh
/bin/sh /tmp/zabbix_agent.sh
......
%end
%packages #安装包,%packages块指定以下都是需要进行安装的包。
@base #最小化安装需要@base和@core。@后写的是包组
@console-internet
@core
autoconf #没有任何前缀的表示需要安装的包
chrony
expect
gcc
gcc-c++
......
%end #最后需要用%end结尾
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end
ip.sh、ip.txt、zabbix_agent.sh是安装后所需要执行的脚本,配置在%post块内,使用wget下载下来,再进行执行。可以自行编写脚本实现功能,比如根据机器序列号进行IP配置,进行内核参数调优,权限设置,加入zabbix监控等等。
以下附加一份IP配置脚本,因为比较特殊,需要在网卡上配置vlan,打vlan标签
ip.txt #依次对应序列号、业务网IP、数据网IP、管理网IP、主机名 XXXXXXXX 10.1.1.1 10.10.1.1 10.20.1.1 XXXX-1.1 ip.sh SN=`dmidecode -t 1 |grep "Serial Number" |awk -F ": " '{print $2}'` #取本机序列号 ip_1=`cat /tmp/ip.txt |grep $SN |awk -F " " '{print $2}'` #按照序列号指定对应IP ip_10=`cat /tmp/ip.txt |grep $SN |awk -F " " '{print $3}'` ip_20=`cat /tmp/ip.txt |grep $SN |awk -F " " '{print $4}'` host_name=`cat /tmp/ip.txt |grep $SN |awk -F " " '{print $5}'` cat > /etc/sysconfig/network-scripts/ifcfg-eth2 << EOF TYPE=Ethernet BOOTPROTO=none DEVICE=eth2 ONBOOT=yes IPADDR=$ip_10 PREFIX=24 EOF cat > /etc/sysconfig/network-scripts/ifcfg-eth3 << EOF TYPE=Ethernet BOOTPROTO=none DEVICE=eth3 ONBOOT=yes IPADDR=$ip_20 PREFIX=24 EOF cat > /etc/sysconfig/network-scripts/ifcfg-eth0 << EOF DEVICE=eth0 ONBOOT=yes USERCL=no MASTER=bond0 SLAVE=yes EOF cat > /etc/sysconfig/network-scripts/ifcfg-eth1 << EOF DEVICE=eth1 ONBOOT=yes USERCTL=no MASTER=bond0 SLAVE=yes EOF #config bond cat > /etc/sysconfig/network-scripts/ifcfg-bond0 << EOF DEVICE=bond0 BOOTPROTO=none DEFROUTE=yes IPV4_FAILURE_FATAL=no NAME=bond0 ONBOOT=yes IPADDR=$ip_1 PREFIX=24 GATEWAY=10.1.1.254 IPV6_PEERDNS=yes IPV6_PEERROUTES=yes BONDING_OPTS="miimon=100 mode=4" EOF cat > /etc/sysconfig/network-scripts/route-eth2 << EOF #为网卡加入路由,使其他网卡能访问别的网段 10.10.0.0/16 via 10.10.1.254 EOF cat > /etc/sysconfig/network-scripts/route-eth3 << EOF 10.20.0.0/16 via 10.20.1.254 EOF systemctl restart network echo "$host_name" > /etc/hostname echo "$ip_1 $host_name" >> /etc/hosts
上面具体说了有关于pxe+kickstart的原理,以及linux的自动化安装配置。下面简单说下esxi的自动化配置,原理是一样的。
以下环境192.168.1.1是http、tftp和dhcp的地址。
先安装所需要的工具包
[root@localhost ~]# yum install dhcp xinetd tftp-server httpd syslinux -y
配置DHCP
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.200 192.168.1.253;
option subnet-mask 255.255.255.0;
DHCPDARGS=ens5f1;
default-lease-time 600;
max-lease-time 5400;
next-server 192.168.1.1;
filename "/gpxelinux.0"; # esxi和linux有所区别,esxi需要用gpxelinux.0这个文件
}
[root@localhost ~]# systemctl restart dhcpd
配置HTTP
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
ServerName 192.168.1.1:80
[root@localhost ~]# systemctl restart httpd
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# mkdir Esxi6.3 # 创建镜像存放的文件夹
[root@localhost html]# mount /data/ios/ESXi-6.3-Custom.iso /var/www/html/Esxi6.3 # 挂载镜像到文件夹
[root@localhost html]# mkdir ks_cfg # 创建ks文件所用的文件夹
[root@localhost html]# ll ks_cfg/
-rw-r--r-- 1 root 503 Nov 14 15:34 esxi.cfg
-rw-r--r-- 1 root 3541 Nov 14 15:46 esxi_ip
配置TFTP
[root@localhost ~]# sed -i "s/\= yes/\= no/g" /etc/xinetd.d/tftp
[root@localhost ~]# systemctl restart xinetd
[root@localhost ~]# cd /var/lib/tftpboot/
[root@localhost tftpboot]# cp /var/www/html/Esxi6.3/mboot.c32 .
[root@localhost tftpboot]# cp /var/www/html/Esxi6.3/boot.cfg .
[root@localhost tftpboot]# cp /usr/share/syslinux/gpxelinux.0 .
[root@localhost tftpboot]# mkdir pxelinux.cfg
[root@localhost tftpboot]# cp /var/www/html/Esxi6.3/isolinux.cfg pxelinux.cfg/default
[root@localhost tftpboot]# chown +w boot.cfg
[root@localhost tftpboot]# chmod +w pxelinux.cfg/default
[root@localhost tftpboot]# sed "s/\///g" boot.cfg # 将文件内的/全部去掉
[root@localhost tftpboot]# vim boot.cfg # 在kernel=tboot.b00这行上面添加prefix
prefix=http://192.168.1.1/Esxi6.3
[root@localhost tftpboot]# vim pxelinux.cfg/default # 多余的可以删掉
DEFAULT 1
NOHALT 1
PROMPT 0
TIMEOUT 60
LABEL 1
KERNEL mboot.c32
APPEND -c boot.cfg ks=http://192.168.1.1/ks_cfg/esxi.cfg
服务配置就是这些,下面是ks文件
[root@localhost ~]# cd /var/www/html/ks_cfg/
[root@localhost ks_cfg]# ll
-rw-r--r-- 1 root 503 Nov 14 15:34 esxi.cfg
-rw-r--r-- 1 root 3541 Nov 14 15:46 esxi_ip
自定义IP列表
[root@localhost ks_cfg]# cat esxi_ip
816399908 192.168.1.188
816399887 192.168.1.189
816399909 192.168.1.190
ks文件
[root@localhost ks_cfg]# cat esxi.cfg
vmaccepteula # 同意vmware的协议
rootpw 1qaz!QAZ # 设置root密码
install --firstdisk --overwritevmfs # 安装并格式化第一块本地盘
reboot # 安装后重启
%include /tmp/network.ks # 导入自定义ks脚本
%pre --interpreter=busybox # 安装前的配置脚本
wget -O /tmp/esxi_ip http://192.168.1.1/ks_cfg/esxi_ip
SN=$(localcli hardware platform get | awk '/Serial Number/ { print $NF }')
ip=`cat /tmp/esxi_ip |grep $SN |awk -F " " '{print $2}'`
echo "network --bootproto=static --device=vmnic4 --ip=$ip --netmask=255.255.255.0 --gateway=192.168.1.254 --hostname=localhost --nameserver=192.168.1.1 --vlanid=201" > /tmp/network.ks # 可以在脚本中设置自定义网络