批量装机(PXE+Kickstart 无人值守安装服务)
PXE简介
PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端(客户端)基本软件设置,从而引导预先安装在服务器中的终端操作系统
PXE工作流程
网卡上的PXE芯片有512字节,存放了DHCP和TFTP的客户端
启动计算机并选择网卡启动
PXE上的DHCP客户端会向DHCP服务器,申请IP地址
DHCP服务器分配一个IP址地给它,同时DHCP配置文件还告诉PXETFTP服务器的地址,并去下载一个pxelinux.0的文件 (1)next-server 192.168.128.140;(2)filename "pxelinux.0";
pxelinux.0告诉PXE要址载的配置文件是pxelinux.cfg目录下面的default
PXE下载并依据配置文件的内容下载启动必须的文件,并通过kickstart.cfg配置文件开始安装系统
1、PEX
PXE(Preboot eXecute Environment,预启动执行环境)是由 Intel 公司开发的技术,可以让计算机通过网络来启动操作系统(前提是计算机上安装的网卡支持 PXE 技术),主要用于在无人值守安装系统中引导客户端主机安装 Linux 操作系统。
2、syslinux
SYSLinux 是一个用于提供引导加载的服务程序。与其说 SYSLinux 是一个服务程序,不如说更需要里面的引导文件,在安装好 SYSLinux 服务程序软件包后, /usr/share/syslinux 目录中会出现很多引导文件。
3、TFTP
TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69。
4、FTP(vsftpd)
vsftpd 是“very secure FTP daemon”的缩写,是一款在Linux发行版中最受推崇的FTP服务器程序。特点是小巧轻快,安全易用。
5、dhcp(用dnsmasq代替)
DNSmasq是一个小巧且方便地用于配置DNS和DHCP的工具,适用于小型网络,它提供了DNS功能和可选择的DHCP功能。它服务那些只在本地适用的域名,这些域名是不会在全球的DNS服务器中出现的。DHCP服务器和DNS服务器结合,并且允许DHCP分配的地址能在DNS中正常解析,而这些DHCP分配的地址和相关命令可以配置到每台主机中,也可以配置到一台核心设备中(比如路由器),DNSmasq支持静态和动态两种DHCP配置方式。
6、Kickstart
Kickstart 是一种无人值守的安装方式,其工作原理是预先把原本需要运维人员手工填写的参数保存成一个ks.cfg 文件,当安装过程中需要填写参数时则自动匹配 Kickstart 生成的文件。
#############################################################################PXE远程安装
1、配置dnsmasq服务
安装dnsmasq
yum -y install dnsmasq
修改dnsmasq配置文件
mv /etc/dnsmasq.conf /etc/dnsmasq.conf.bak #备份原配置文件
vim /etc/dnsmasq.conf #打卡配置文件,在配置文件中写入如下内容
interface=ens33 #使用的接口
domain=test #定义的域名
dhcp-range= ens33,192.168.2.100,192.168.2.253,255.255.255.0,1h #dhcp的IP地址池
dhcp-boot=pxelinux.0,pxeserver,192.168.2.10 #与启动的服务器地址
dhcp-option=3,192.168.2.10 #dhcp的网关
dhcp-option=6,192.168.2.10, 8.8.8.8 #分发的dns地址
server=8.8.4.4 # dns转发地址
dhcp-option=28,192.168.2.255 #局域网广播地址
dhcp-option=42,0.0.0.0 #网络时间服务器
pxe-prompt="Press F8 for menu.", 60 #指定f8按键
pxe-service=x86PC, "Install CentOS 7 from network server 192.168.2.10", pxelinux #介绍以及安装选项
enable-tftp #允许使用tftp
tftp-root=/var/lib/tftpboot #设置tftp根目录
2、安装TFTP服务程序
安装TFTP
yum -y install tftp-server
3、配置syslinux预启动服务程序
安装syslinux
yum -y install syslinux
把 SYSLinux 提供的引导文件复制到 TFTP 服务程序的默认目录中
cp -r /usr/share/syslinux/* /var/lib/tftpboot
将光盘镜像中自带的一些引导文件复制到TFTP服务程序的默认目录中
mount /dev/cdrom /mnt #挂在光盘
mkdir /var/lib/tftpboot/centos7 #创建目录
cp /mnt/images/pxeboot/vmlinuz /var/lib/tftpboot/centos7
cp /mnt/images/pxeboot/initrd.img /var/lib/tftpboot/centos7
4、配置PXE服务
TFTP 服务程序的目录中新建 pxelinux.cfg 目录
mkdir /var/lib/tftpboot/pxelinux.cfg
编写配置文件(四种方式)
vim /var/lib/tftpboot/pxelinux.cfg/default
default menu.c32
prompt 0
timeout 300
ONTIMEOUT local
menu title ########## PXE Boot Menu ##########
label 1
menu label ^1) Install CentOS 7 x64 with Local Repo
kernel centos7/vmlinuz
append initrd=centos7/initrd.img method=ftp://192.168.2.10/pub devfs=nomount
label 2
menu label ^2) Install CentOS 7 x64 with http://mirror.centos.org Repo
kernel centos7/vmlinuz
append initrd=centos7/initrd.img method=http://mirror.centos.org/centos/7/os/x86_64/ devfs=nomount ip=dhcp
label 3
menu label ^3) Install CentOS 7 x64 with Local Repo using VNC
kernel centos7/vmlinuz
append initrd=centos7/initrd.img method=ftp://192.168.2.10/pub devfs=nomount inst.vnc inst.vncpassword=password
label 4
menu label ^4) Boot from local drive
5、配置FTP服务
yum -y install vsftpd #安装FTP
cp -r /mnt/* /var/ftp/pub/ #把光盘复制到ftp程序默认的文件夹下
chmod -R 755 /var/ftp/pub #修改权限,保证这个文件夹有wx权限
6、关闭防火墙和SElinux并重启服务
systemctl stop firewalld
setenforce 0
systemctl restart dnsmasq
systemctl restart vsftpd
systemctl enable dnsmasq
systemctl enable vsftpd
7、验证结果(虚拟机内存要调成2GB或以上,否则在安装过程中会报错)
#############################################################################
PXE+Kickstart无人值守安装
1、配置dnsmasq服务
安装dnsmasq
mv /etc/dnsmasq.conf /etc/dnsmasq.conf.bak #备份原配置文件
vim /etc/dnsmasq.conf
interface=ens33
domain=test
dhcp-range= ens33,192.168.2.100,192.168.2.253,255.255.255.0,1h
dhcp-boot=pxelinux.0,pxeserver,192.168.2.10
dhcp-option=3,192.168.2.10
dhcp-option=6,192.168.2.10, 8.8.8.8
server=8.8.4.4
dhcp-option=28,192.168.2.255
dhcp-option=42,0.0.0.0
#pxe-prompt="Press F8 for menu.", 60 #注释掉开机的按F8的键
#pxe-service=x86PC, "Install CentOS 7 from network server 192.168.2.10", pxelinux #注释掉开机提示的信息
enable-tftp
tftp-root=/var/lib/tftpboot
2、安装TFTP服务程序
安装TFTP
yum -y install tftp-server
3、配置syslinux预启动服务程序
安装syslinux
yum -y install syslinux
把 SYSLinux 提供的引导文件复制到 TFTP 服务程序的默认目录中
cp -r /usr/share/syslinux/* /var/lib/tftpboot
将光盘镜像中自带的一些引导文件复制到TFTP服务程序的默认目录中
mount /dev/cdrom /mnt #挂在光盘
mkdir /var/lib/tftpboot/centos7 #创建目录
cp /mnt/images/pxeboot/vmlinuz /var/lib/tftpboot/centos7
cp /mnt/images/pxeboot/initrd.img /var/lib/tftpboot/centos7
4、配置PXE服务
TFTP 服务程序的目录中新建 pxelinux.cfg 目录
mkdir /var/lib/tftpboot/pxelinux.cfg
编写配置文件
vim /var/lib/tftpboot/pxelinux.cfg/default
default ks
prompt 0
label ks
kernel centos7/vmlinuz
append ks=ftp://192.168.2.10/pub/ks.cfg initrd=centos7/initrd.img devfs=nomount
5、配置FTP服务
yum -y install vsftpd #安装FTP
cp -r /mnt/* /var/ftp/pub/ #把光盘复制到ftp程序默认的文件夹下
chmod -R 755 /var/ftp/pub #修改权限,保证这个文件夹有wx权限
6、将/root下的anacondaks.cfg复制到vsftpd 服务程序的工作目录中
cp ~/anaconda-ks.cfg /var/ftp/pub/ks.cfg
chmod +r /var/ftp/pub/ks.cfg #设置该文件的权限,确保所有人都有可读的权限
修改/var/ftp/pub/ks.cfg配置文件
vim /var/ftp/pub/ks.cfg #修改如下内容
#version=DEVEL
install #开始安装
# Use CDROM installation media
url --url="ftp://192.168.2.10/pub/" #把光盘镜像安装方式修改成 FTP 协议
# System timezone
timezone Asia/Shanghai --isUtc #选择时区
# Partition clearing information
clearpart --all --initlabel #清空所有磁盘内容并初始化磁盘
reboot
7、关闭防火墙和SElinux并重启服务
systemctl stop firewalld
setenforce 0
systemctl restart dnsmasq
systemctl restart vsftpd
systemctl enable dnsmasq
systemctl enable vsftpd
8、测试结果
!!!无人值守配置的root密码,就是服务器的root密码
关键字 含义
install 告知安装程序,这是一次全新安装,而不是升级upgrade。
url --url=" " 通过FTP或HTTP从远程服务器上的安装树中安装。
url --url="http://10.0.0.7/CentOS-6.7/"
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