PXE+Kickstart实现无人值守安装CentOS7
PXE+Kickstart实现无人值守安装CentOS7
一、简介
1. PXE简介
PXE是英特尔的芯片技术。 dhcp动态主机配置协议。分配IP地址等信息。 TFTP和FTP是文件传输协议。 PXE(preboot execute environment,预启动执行环境) 是由Intel公司开发的术,工作于Client/Server的网络模式, 支持工作站通过网络从远端服务器下载映像, 并由此支持通过网络启动操作系统, 在启动过程中,终端要求服务器分配IP地址, 再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行, 由这个启动软件 包完成终端基本软件设置, 从而引导预先安装在服务器中的终端操作系统。
2. Kickstart简介
Kickstart是一种无人值守的安装方式。它的工作原理是在安装过程中记录典型的需要人工干预填写的各种参数,并生成一个名为ks.cfg的文件。如果在安装过程中(不只局限于生成Kickstart安装文件的机器)出现要填写参数的情况,安装程序首先会去查找Kickstart生成的文件,如果找到合适的参数,就采用所找到的参数;如果没有找到合适的参数,便需要安装者手工干预了。所以,如果Kickstart文件涵盖了安装过程中可能出现的所有需要填写的参数,那么安装者完全可以只告诉安装程序从何处取ks.cfg文件,然后就去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中的设置重启系统,并结束安装。
3. PXE工作流程
1. 网卡上的PXE芯片有512字节,存放了DHCP和TFTP的客户端
2. 启动计算机并选择网卡启动
3. PXE上的DHCP客户端会向DHCP服务器,申请IP地址
4. DHCP服务器分配一个IP址地给它,同时DHCP配置文件还告诉PXE TFTP服务器的地址,并去下载一个pxelinux.0的文件
5. pxelinux.0告诉PXE要址载的配置文件是pxelinux.cfg目录下面的default
6. PXE下载并依据配置文件的内容下载启动必须的文件,并通过ks.cfg配置文件开始安装系统
二、环境介绍及初始化
1.环境介绍
操作系统:CentOS Linux release 7.4.1708 (Core)(带图形化界面)
网卡地址:192.168.238.10
光盘镜像:CentOS-7-x86_64-DVD-1708.iso
Workstaion网络:VMNet1
2. 关闭Selinux、Firewall
[aaa@qq.com ~]# systemctl stop firewalld && systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[aaa@qq.com ~]# setenforce 0
[aaa@qq.com ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
3. 配置静态IP
[aaa@qq.com ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
BOOTPROTO="none"
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.238.10
NETMASK=255.225.255.0
GATEWAY=192.168.238.2
DNS1=8.8.8.8
DNS2=114.114.114.114
[aaa@qq.com ~]# systemctl restart network
三、服务安装及配置
1. 安装配置DHCP服务
# 安装DHCP服务
[aaa@qq.com ~]# yum -y install dhcp
# 修改DHCP配置文件
[aaa@qq.com ~]# cat >>/etc/dhcp/dhcpd.conf << EOF
subnet 192.168.238.0 netmask 255.255.255.0 { # 服务端IP网段及掩码
range 192.168.238.100 192.168.238.199; # dhcp分发的地址范围
option routers 192.168.238.2; # 网关
option subnet-mask 255.255.255.0; # 掩码
default-lease-time 21600; # 设置默认的IP租用期限
max-lease-time 43200; # 设置最大的的IP租用期限
next-server 192.168.238.10; # TFTP服务器地址
filename "/pxelinux.0"; # 指定引导文件位置,这里是TFTP根目录下的pxelinux.0
}
EOF
# 多网卡默认监听eth0,指定DHCP监听eth1网卡
[aaa@qq.com ~]# vim /etc/sysconfig/dhcpd
# Command line options here
DHCPDARGS=eth1 # 指定监听网卡
# 启动DHCP服务并设置开机自启
[aaa@qq.com ~]# systemctl start dhcpd && systemctl enable dhcpd
# 查看服务端口
[aaa@qq.com ~]# ss -tunlp | grep dhcp
udp UNCONN 0 0 *:67 *:* users:(("dhcpd",pid=849,fd=7))
2. 安装配置FTP服务
# 安装FTP服务
[aaa@qq.com ~]# yum -y install vsftpd
# 挂载centos7镜像到FTP目录,线上环境应直接拷贝镜像文件
[aaa@qq.com ~]# mkdir /var/ftp/centos7u4
[aaa@qq.com ~]# mount /dev/cdrom /var/ftp/centos7u4/
mount: /dev/sr0 is write-protected, mounting read-only
# 启动FTP服务并设置开机自启
[aaa@qq.com ~]# systemctl start vsftpd && systemctl enable vsftpd
# 查看服务端口
[aaa@qq.com ~]# ss -tunlp | grep vsftpd
tcp LISTEN 0 32 :::21 :::* users:(("vsftpd",pid=998,fd=4))
3. 安装配置TFTP服务
# 安装tftp服务及xinetd超级守护进程
[aaa@qq.com ~]# yum install -y xinetd tftp-server
# 配置xinetd,由xinetd管理tftp
[aaa@qq.com ~]# cat /etc/xinetd.d/tftp
# default: off
# description: The tftp server serves files using the trivial file transfer \
# protocol. The tftp protocol is often used to boot diskless \
# workstations, download configuration files to network-aware printers, \
# and to start the installation process for some operating systems.
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 # yes改成no
per_source = 11
cps = 100 2
flags = IPv4
}
# 启动xinetd并设置开机自启
[aaa@qq.com ~]# systemctl start xinetd && systemctl enable xinetd
4. 导入必要的引导文件
需要导入TFTP服务器的主要文件有:
- 引导文件 :pxelinux.0 由软件包syslinux生成
- 内核文件:vmlinuz initrd.img (initrd.img 是一个最小的linux系统 vmlinuz是可引导的、压缩的内核 )
- 引导菜单:isolinux.cfg 开机后选择启动项的菜单文件
非必要文件:
- 系统自带的两种窗口模块之一:vesamenu.c32
- 窗口提示信息文件:boot.msg
- 窗口背景图片:splash.png
- 提供选单:menu.c32
- 能够通过内存引导:mboot.c32
- 将内存模拟为磁盘:memdisk
- 基于bootloader引导系统:chain.c32
# 安装syslinux,copy引导文件到tftp根目录下
[aaa@qq.com ~]# yum install -y syslinux
[aaa@qq.com ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot
[aaa@qq.com ~]# cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk} /var/lib/tftpboot/
# copy引导菜单isolinux.cfg到tftp根目录的pxelinux.cfg目录下,并修改
[aaa@qq.com ~]# mkdir /var/lib/tftpboot/pxelinux.cfg
[aaa@qq.com ~]# cp /var/ftp/centos7u4/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
[aaa@qq.com ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
2 timeout 50 # 修改菜单等待时间,50为5秒
61 label linux
62 menu label ^Install CentOS 7
menu default # 添加一行 菜单默认选项
63 kernel vmlinuz # 指定要启动的内核。
64 append initrd=initrd.img repo=ftp://192.168.238.10/centos7u4 ks=ftp://192.168.238.10/ks.cfg # 指定追加给内核的参数,指定镜像和ks文件读取位置
65
66 label check
67 menu label Test this ^media & install CentOS 7
68 menu default # 删除改行 菜单默认选项
69 kernel vmlinuz
70 append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rd.live.check quiet
# copy内核文件
[aaa@qq.com ~]# cp /var/ftp/centos7u4/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/
[aaa@qq.com ~]# cp /var/ftp/centos7u4/isolinux/{vesamenu.c32,boot.msg,splash.png} /var/lib/tftpboot/
# 查看/var/lib/tftpboot/准备的文件
[aaa@qq.com ~]# ls /var/lib/tftpboot/
boot.msg chain.c32 initrd.img mboot.c32 memdisk menu.c32 pxelinux.0 pxelinux.cfg splash.png vesamenu.c32 vmlinuz
5. 获取ks.cfg文件**
-
方法一:
每安装好一台Centos机器,Centos安装程序都会创建一个kickstart配置文件,记录你的真实安装配置。如果你希望实现和某系统类似的安装,可以基于该系统的kickstart配置文件来生成你自己的kickstart配置文件。(生成的文件名字叫anaconda-ks.cfg位于/root/anaconda-ks.cfg)
-
方法二:
Centos提供了一个图形化的kickstart配置工具。在任何一个安装好的Linux系统上运行该工具,就可以很容易地创建你自己的kickstart配置文件。注意使用此方法制作ks.cfg需要的Centos主机需要安装图形。
# 安装system-config-kickstart
[aaa@qq.com ~]# yum install -y system-config-kickstart
# 在桌面环境下,执行system-config-kickstart开始配置ks.cfg文件
[aaa@qq.com ~]# system-config-kickstart
下面是配置的详细过程,没有特殊标注的项目不需要修改。
至此,我们就会在/root下得到我们要的ks.cfg文件
# 生成的ks.cfg需要在文件最后添加(最小化安装)
%packages
@^minimal
@core
%end
%post
systemctl disable postfix.service
%end
6. 配置ks.cfg文件
生成crypt加密密码:
- perl -e ‘print crypt(“centos7u4”,q(IPPBXADM)),"\n"’
- perl -e ‘print crypt(“centos7u4”,"/g"),"\n"’
- grub2-mkpasswd-pbkdf2
# 将ks.cfg文件copy到FTP服务区根目录下
[aaa@qq.com ~]# cp /root/ks.cfg /var/ftp/
[aaa@qq.com ~]# chmod +x /var/ftp/ks.cfg
[aaa@qq.com ~]# ls /var/ftp/
centos7u4 ks.cfg pub
# 可用最小化安装配置
[aaa@qq.com ~]# cat /var/ftp/ks.cfg
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
keyboard 'us'
# Root password
rootpw --iscrypted $1$IPPBXADM$6OF5JQl8cor65SAbR2cPJ1
#用户名:root
#密码为:centos7u4
# Use network installation
url --url="ftp://192.168.238.10/centos7u4"
# System language
lang en_US
# Firewall configuration
firewall --disabled
# System authorization information
auth --useshadow --passalgo=sha512
# Use graphical install
graphical
firstboot --disable
# SELinux configuration
selinux --disabled
# Network information
network --bootproto=dhcp --device=eth0
# 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 /boot --fstype="xfs" --size=500
part swap --fstype="swap" --size=2048
part /home --fstype="xfs" --size=5120
part / --fstype="xfs" --grow --size=1
%packages
@^minimal
@core
%end
%post
systemctl disable postfix.service
%end