ASP站长网在实际工作中,传统纯手动安装操作系统的方式是有一定的局限性的,例如:现在大多数的服务器都不自带光驱,若要安装系统需要外接光驱插入光盘,整个安装过程中需要人工交互确认,手动设置每一个安装设置项,人必须要在机器前值守,时间大多花费在安装的等待过程中。假如有一大批服务器需要安装操作系统,这种传统手动的方式去逐台安装系统的方式,效率是极其低下的,而且由于需要人工交互式配置系统的安装设置项,无法确保每一台机器的系统安装配置都是完全一致的,即无法做到完全的统一标准化。(在大量重复的操作过程中,人工方式是极易出错的)
为了解决上述问题,可以采用PXE网络的方式来实现系统自动化安装,整个安装过程中无需人工干预,极大的提供了工作效率。
一、PXE的基本概念
PXE(Pre-boot Execution Environment,预启动执行环境)是由Inter公司开发的网络引导技术,工作在Client/Server模式,PXE网卡的ROM内置了对dhcp和tftp协议的支持,允许客户机通过网络从远程服务器下载引导镜像,并加载安装文件或者整个操作系统。
二、PXE服务器的相关组件及基本原理
PXE服务器需要的服务:
DHCP服务:为客户端分配IP地址,定位启动引导文件
TFTP服务:提供网卡启动引导程序、系统内核文件及initrd镜像文件下载
FTP服务(或http/nfs):提供系统镜像的yum安装源及ks应答文件下载
客户端机应具备的条件:
网卡必须支持PXE协议(现在大多数的网卡都已支持)
主板BIOS支持从网络启动
1、通过PXE服务器安装系统原理示意图:
通常情况下,为了节省资源我们也可以将上述原理图中的提供DHCP服务、TFTP服务、FTP(或HTTP、NFS)服务的3台不同服务器整合部署到同一台服务器,作为PXE的服务器端,视具体情况而定。
2、PXE网络安装系统的优势:
规模化:高效率,同时安装多台服务器,轻松应对大规模批量安装
自动化:安装过程中无需人工干预、实现自动化无人值守安装
标准化:按照自设定的系统安装规则配置硬盘分区及系统组件包,实现系统安装的统一标准化
远程实现:不需要光驱光盘、U盘等外部安装介质
三、PXE服务器搭建步骤详解
本文以CentOS7为例,对PXE服务器的搭建过程总结如下:
1、准备操作系统镜像YUM源,并通过HTTP服务对外发布
安装httpd服务:
[root@centos7 ~]#yum -y install httpd
[root@centos7 ~]#systemctl start httpd.service #启动httpd服务
[root@centos7 ~]#systemctl enable httpd.service #设置httpd服务开机启动
创建系统镜像ISO文件存放目录
[root@centos7 ~]#mkdir -p /data/myios #创建 /data/myios 作为系统镜像文件存放目录
通过xftp等工具将系统镜像ISO文件上传到 /data/myios 目录
[root@centos7 myiso]#ll
total 14390272
-rw-r--r-- 1 root root 3991928832 Sep 7 13:51 CentOS-6.10-x86_64-bin-DVD1.iso
-rw-r--r-- 1 root root 10743709696 Sep 7 13:54 CentOS-7-x86_64-Everything-1810.iso
在httpd默认的documentroot目录 /var/www/html 下创建各个系统镜像源的子目录
[root@centos7 ~]#mkdir -pv /var/www/html/centos/{6,7}/os/x86_64/
mkdir: created directory ‘/var/www/html/centos’
mkdir: created directory ‘/var/www/html/centos/6’
mkdir: created directory ‘/var/www/html/centos/6/os’
mkdir: created directory ‘/var/www/html/centos/6/os/x86_64/’
mkdir: created directory ‘/var/www/html/centos/7’
mkdir: created directory ‘/var/www/html/centos/7/os’
mkdir: created directory ‘/var/www/html/centos/7/os/x86_64/’
[root@centos7 ~]#
挂载系统ISO镜像文件到httpd对应的目录下
vim编辑修改 /etc/fstab文件
[root@centos7 ~]#vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sat Sep 7 12:12:42 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=4d76f02b-0ebf-4238-89a6-e18709a1025d / xfs defaults 0 0
UUID=b2d24305-3936-4e25-8a40-18b53cd4d809 /boot xfs defaults 0 0
UUID=e5586dc6-a9e2-453b-90da-c009996214ad /data xfs defaults 0 0
UUID=3417eb37-c6ee-4c17-aea5-153413c631c6 swap swap defaults 0 0
/data/myiso/CentOS-6.10-x86_64-bin-DVD1.iso /var/www/html/centos/6/os/x86_64 iso9660 defaults 0 0
/data/myiso/CentOS-7-x86_64-Everything-1810.iso /var/www/html/centos/7/os/x86_64 iso9660 defaults 0 0
添加最后两行,将/data/myiso 目录中的2个iso镜像文件以iso镜像文件系统挂载到httpd的对应documentroot目录下
[root@centos7 ~]#mount -a
mount: /dev/loop0 is write-protected, mounting read-only
mount: /dev/loop1 is write-protected, mounting read-only
[root@centos7 ~]#
df查看一下,ISO镜像已经挂载到httpd对应目录下
说明:10.10.10.254为PXE服务器的IP,需提前配置好,且设置为静态IP。
设置本机IP与PXE服务器同网段,通过URL访问 http://10.10.10.254/centos/ 可以到yum源已经发布成功。
2、准备系统自动安装ks应答文件(kickstart),并使用HTTP发布
kickstart文件用途:
ks应答文件的作用就是实现系统安装过程中的无人值守,自动安装的。系统安装的时候就是依靠读取KS文件里面预先定义的各项安装设置,如硬盘分区、系统语言、安装哪些组件包等。
ks文件的配置方式:
(1)从现有已经安装好的系统中获取anaconda-ks.cfg(此文件是anaconda系统安装向导在系统安装完成后生成的),然后根据anaconda-ks.cfg里面的配置项来修改配置为自己需要的ks文件(需要注意的是centos6和centos7系统的ks配置不通用,需要使用对应的系统的anaconda文件来修改配置)
ks文件文件的格式范例和设置项说明如下(适用centos7)
[root@centos7 ksdir]#cat ks7_desktop.cfg
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install #全新安装
# Keyboard layouts
keyboard 'us' #键盘模式,美式US
# Root password
rootpw --iscrypted $1$7Q46UR0F$uZjZh2p9X.MlrV0dW8euj. #设置root账号口令并采用加密
# Use network installation
url --url="http://10.10.10.254/centos7/os/x86_64" #系统镜像yum源的URL地址
# System language
lang en_US #系统默认语言,en_US
# System authorization information
auth --useshadow --passalgo=sha512 #系统默认使用shadow文件作为账号登录验证
# Use text mode install
text #安装过程默认使用text文本的tui界面
firstboot --disable
# SELinux configuration
selinux --disabled #禁用selinux
# Firewall configuration
firewall --disabled #禁用系统防火墙
# Network information
network --bootproto=dhcp --device=eth0 #系统默认的网卡配置
# Reboot after installation
reboot #安装完成后自动重启系统
# System timezone
timezone Asia/Shanghai #设置系统默认时区 Asia/Shanghai
# System bootloader configuration
bootloader --append="net.ifnames=0" --location=mbr #安装新的bootload程序,并添加内核启动参数 net.ifnames=0
# Clear the Master Boot Record
zerombr #清除原有的MBR引导记录
# Partition clearing information
clearpart --all --initlabel #清除原有的硬盘分区标签
# Disk partitioning information #硬盘分区信息,按实际需求设定
part /boot --fstype="xfs" --size=1024
part / --fstype="xfs" --size=51200
part swap --fstype="swap" --size=4096
part /data --fstype="xfs" --grow --size=1 # /data分区使用所有剩余硬盘空间
%packages #要安装的包组,以%packages行开始,到%end结尾,包组以@符号开头,单个包直接写包名
@desktop-debugging
@fonts
@gnome-desktop
@input-methods
@legacy-x
@remote-desktop-clients
@x11
vinagre
%end #需要注意的是,centos6中,如果选择最小化安装,ks文件最后需要写上 %packages开始行%end结尾行的2行,否则系统会默认安装所有的包组,centos7系统如果最小化安装,则可以不用写这2行
[root@centos7 ksdir]#
通过anaconda文件为模板修改生成的ks文件,可以使用命令 ksvalidator /PATH/KICKSTART_FILE 来检查ks文件语法是否正确。
(2)使用system-config-kickstart工具,通过图形界面设置向导来配置生成(需要服务器带有图形界面的包组,如果是最小化安装的系统,需要安装x11图形包组)
[root@centos7 ~]#yum -y install system-config-kickstart #此工具包来自epel源