通过传统的方式安装和部署计算机时,都需要人工干预的方式完成安装。如果需要部署大量的类似功能的工作站或服务器,则需要耗费大量的时间。同时传统的安装方式,每台计算机都需要光驱设备及安装光盘等介质,会额外增加部署成本。因此,许多系统管理员都希望能够通过一种网络化的无人值守的自动安装方式将操作系统部署到目标计算机中。
一、相关服务和工具
1、PXE协议
PXE 是由 Intel 设计的协议,计算机可以通过 PXE 协议从网络引导启动。PXE 协议在启动过程分为 client 和 server 端,PXE 协议运行过程主要解决两个问题:首先解决 IP 地址的问题,然后解决如何传输操作系统启动文件和安装文件的问题。对于第一个问题,可以通过 DHCP Server 解决,通常情况下 DHCP 服务器主要用于分配 IP 地址给客户端。但在 PXE 环境下,DHCP 服务器需要额外加载 PXE 的相关配置。针对第二个问题,在启动初期因为 PXE client 中有相应的 TFTP 客户端,可以通过 TFTP 协议到 TFTP 服务器中下载相关文件启动计算机。后期在安装过程中,则通过 FTP 或 NFS 协议提供大量的操作系统安装文件的下载。
2、Kickstart
通过传统的方式安装和部署计算机时,都会要求通过交互的方式,回答各类问题,以完成安装和部署任务,过程繁琐,且无法实现自动化。红帽公司开发了 Kickstart 的安装方法,通过 ks 文件可以解决所有普通安装方式中需要回答的问题。可以通过 system-config-kickstart 工具定制 ks 文件,也可以通过相关语法来手工编写安装脚本。
3、Centos操作系统
本次实验中所使用和安装的操作系统为CentOS 7,理论上 CentOS 6也是适用的。
4、DHCP
动态主机配置协议,主要用于给 DHCP 客户端自动分配 IP 地址,便于用户管理网络内部的计算机。针对 PXE 环境下,DHCP 服务器除分配 IP 地址外,还需要额外配置”next-server”选项定义 TFTP 服务器的地址,设置”filename”选项定义启动文件的名称。并且启动”booting”与”bootp”的支持。
5、TFTP与FTP
简单文件传输协议(TFTP)主要用于为客户机与服务器之间进行简单文件传输的协议。在 PXE 早期启动过程中,主要通过 TFTP 协议传输”pxelinux.0”。文件传输协议(FTP),适用于大量文件传输的情形,在后期安装过程,主要通过 FTP 协议传输 Linux 操作系统的安装包。
二、安装流程记录
1.把ISO镜像挂载到mnt目录
mount /dev/sr0 /mnt #把ISO镜像挂载到mnt目录
df -h #查看是否挂载
2.配置本地yum源
vim /etc/yum.repos.d/development.repo
#新建development.repo文件,并添加以下内容
[development]
name=development
baseurl=file:///mnt/
gpgcheck=0
enabled=1
3.yum安装所需软件
yum install -y dhcp tftp tftp-server syslinux vsftpd xinetd
4.拷贝镜像文件到ftp服务器目录
cd /var/ftp/pub #进入到ftp服务器目录
mkdir dvd #在pub目录下创建dvd目录
chown ftp:ftp dvd #修改dvd目录的所有者和所属组为ftp
cp -rf /mnt/* /var/ftp/pub/dvd/ #复制mnt目录下的镜像文件到dvd目录下
5.配置DHCP服务
vim /etc/dhcp/dhcpd.conf
#确保配置文件内容如下
ddns-update-style interim;
ignore client-updates;
authoritative;
allow booting; #定义能够pxe启动
allow bootp; #定义支持bootp
allow unknown-clients;
subnet 192.168.100.0 netmask 255.255.255.0
{
range 192.168.100.100 192.168.100.200; #dhcp客户端获取ip的范围
option domain-name-servers 192.168.100.1;
option domain-name "server1.example.com";
option routers 192.168.100.1; #网关
option broadcast-address 192.168.100.255; #广播地址
default-lease-time 600;
max-lease-time 7200;
next-server 192.168.100.25; #本机ip
filename "pxelinux.0";
}
6.配置tftp服务
vim /etc/xinetd.d/tftp
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot #设置默认工作目录
disable = no #设置开机自启动
per_source = 11
cps = 100 2
flags = IPv4
}
vim /usr/lib/systemd/system/tftp.service
ExecStart=/usr/sbin/in.tftpd -s /var/lib/tftpboot #修改默认目录
ExecStart=/usr/sbin/in.tftpd -s /tftpboot
7.创建相关目录并拷贝所需文件
mkdir tftpboot
chmod 777 tftpboot
cp /usr/share/syslinux/pxelinux.0 /tftpboot
cp /usr/share/syslinux/menu.c32 /tftpboot
cp /usr/share/syslinux/memdisk /tftpboot
cp /usr/share/syslinux/mboot.c32 /tftpboot
cp /usr/share/syslinux/chain.c32 /tftpboot
mkdir /tftpboot/pxelinux.cfg
mkdir /tftpboot/netboot
cp /var/ftp/pub/dvd/images/pxeboot/vmlinuz /tftpboot/netboot/
cp /var/ftp/pub/dvd/images/pxeboot/initrd.img /tftpboot/netboot/
8.开启相关服务并设置为自动启动
systemctl restart dhcpd
systemctl enable dhcpd
systemctl restart xinetd
systemctl enable xinetd
systemctl restart vsftpd
systemctl enable vsftpd
9.配置kisckstart无人值守安装脚本
yum -y install system-config-kickstart
system-config-kickstart #进入kickstart图形化界面
配置完之后将ks.cfg文件保存到/var/ftp/pub/目录下
vim /tftpboot/pxelinux.cfg/default 新建default文件
#default的内容如下:
default menu.c32
prompt 0
timeout 30
MENU TITLE Togogo.net Linux Training
LABEL centos7_x64
MENU LABEL CentOS 7 X64
KERNEL /netboot/vmlinuz
APPEND initrd=/netboot/initrd.img inst.repo=ftp://192.168.100.25/pub/dvd ks=ftp://192.168.100.25/pub/ks.cfg
可能会遇到的坑:
1.新创建一个虚机的时候,内存必须要2GB以上,不然可能会存在无法自动安装系统的情况。
2.自动生产ks.cfg的时候,进文件里面查看一下,如果是bootloader --location=no,则可能装好系统后,无法正常启动,出现黑屏,右上角“——”闪动,如果修改成bootloader --location=mbr,则会正常启动。
附带ks.cfg文件
#platform=x86, AMD64, 或 Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
keyboard 'us'
# Root password
rootpw --iscrypted $1$Cl9ljaI/$8FrD1qPJLukbGuyud6qUK.
# System language
lang en_US
# System authorization information
auth --useshadow --passalgo=sha512
# Use text mode install
text
firstboot --disable
# SELinux configuration
selinux --disabled
# Firewall configuration
firewall --disabled
# Network information
network --bootproto=dhcp --device=ens192
# Reboot after installation
reboot
# System timezone
timezone Africa/Abidjan
# Use network installation
url --url="ftp://192.168.100.25/pub/dvd/"
# System bootloader configuration
bootloader --location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part swap --fstype="swap" --size=2048
part /boot --fstype="ext4" --size=1024
part / --fstype="ext4" --grow --size=1
%packages
@gnome-desktop
@kde-desktop
@legacy-x
@x11
xterm
%end