运行原理:
说明:图片来自其他博文
前言:原理与概念
l 什么是PXE
严格来说,PXE 并不是一种安装方式,而是一种引导的方式。进行 PXE 安装的必要条件是要安装的计算机中包含一个 PXE 支持的网卡(NIC),即网卡中必须要有 PXE Client。PXE (Pre-boot Execution Environment)协议使计算机可以通过网络启动。
协议分为 client 和 server 端,PXE client 在网卡的 ROM 中,当计算机引导时,BIOS 把 PXE client 调入内存执行,由 PXE client 将放置在远端的文件通过网络下载到本地运行。
运行 PXE 协议需要设置 DHCP 服务器 和 TFTP 服务器。DHCP 服务器用来给 PXE client(将要安装系统的主机)分配一个 IP 地址,由于是给 PXE client 分配 IP 地址,所以在配置 DHCP 服务器时需要增加相应的 PXE 设置。(next-server -- 指定TFTP -- 下一跳 -- 数据|请求下一步去哪?)
此外,在 PXE client 的 ROM 中,已经存在了 TFTP Client。PXE Client 通过 TFTP 协议到 TFTP Server 上下载所需的文件。
l 什么是KickStart
KickStart是一种无人职守安装方式。KickStart的工作原理是通过记录典型的安装过程中所需人工干预填写的各种参数(Root密码,分区,时区,语言等等),并生成一个名为 ks.cfg的文件;在其后的安装过程中(不只局限于生成KickStart安装文件的机器)当出现要求填写参数的情况时,安装程序会首先去查找 KickStart生成的文件,当找到合适的参数时,就采用找到的参数,当没有找到合适的参数时,才需要安装者手工干预。
这样,如果KickStart文件涵盖了安装过程中出现的所有需要填写的参数时,安装者完全可以只告诉安装程序从何处取ks.cfg文件,然后去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中设置的重启选项来重启系统,并结束安装。
1、环境准备
1.1.服务器信息:
IP |
hostname |
作用 |
安装服务 |
网卡模式 |
192.168.247.102 |
server |
无人值守 |
|
nat |
说明:网卡尽肯能避免使用桥接 -- 桥接和本地路由器冲突
1.2.前期准备:
执行 PXE + KickStart安装需要准备内容:
• DHCP 服务器用来给客户机分配IP;
• TFTP 服务器用来存放PXE的相关文件,比如:系统引导文件pxelinux.0 -- 需要安装syslinux提供,看作一个小linux系统,用于linux便捷安装;
• FTP |http|NFS服务器用来存放系统安装文件;
• KickStart所生成的ks.cfg配置文件;
• 带有一个 PXE 支持网卡的将安装的主机;
[root@server ~]# timedatectl set-timezone Asia/Shanghai
[root@server ~]# date
[root@server ~]# systemctl enable chronyd
[root@server ~]# systemctl restart chronyd
[root@server ~]# chronyc sources -v
[root@server ~]# sed '7s/enforcing/disabled/g' /etc/selinux/config -i
[root@server ~]# systemctl stop firewalld
[root@server ~]# systemctl disable firewalld
[root@server ~]# iptables -F
[root@server ~]# setenforce 0
1.3.安装基本服务
(102上操作)
1.3.1.VSFTP
[root@server ~]# yum install vsftpd -y
[root@server ~]# systemctl enable vsftpd
root@server ~]# systemctl start vsftpd
1.3.2.TFTP
TFTP (Trivial File Transfer Protocol),中译简单文件传输协议或小型文件传输协议. 大家一定记得在2003年8月12日全球爆发冲击波(Worm.Blaster)病毒,这种病毒会监听端口69,模拟出一个TFTP服务器,并启动一个攻 击传播线程,不断地随机生成攻击地址,进行入侵。另外tftp被认为是一种不安全的协议而将其关闭,同时也是防火墙打击的对象,这也是有道理的。tftp 在嵌入式linux还是有用武之地的。需要打开防火墙,允许tftp访问网络。
TFTP -- 属于UDP -- 用于小文件的传输 -- 只要局域网连接,共享目录上有这个文件 进行传输
[root@server ~]# yum install tftp tftp-server xinetd -y
[root@server ~]# cat /etc/xinetd.d/tftp|grep -v '#'
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s tftpboot -c
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
[root@server ~]#
[root@server ~]# systemctl start xinetd #linux6必须使用xinetd
[root@server ~]# systemctl enable xinetd
[root@server ~]# systemctl start tftp
[root@server ~]# systemctl enable tftp
[root@server ~]# lsof -i :69 #检查69端口被哪个进程占用COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
xinetd 21244 root 5u IPv4 89354 0t0 UDP *:tftp
[root@server ~]#
1.3.3.DHCP
[root@server ~]# yum install dhcp -y
给DHCP服务器添加一张网卡,ip设置为192.168.247.104(只要是247网段都行)
方法一:快速配置:
[root@server ~]# ifconfig ens34 192.168.247.104/24
方法二:(本次实验使用方法)
参考我写的博客:https://www.cnblogs.com/tanshouke/p/12190525.html
[root@server ~]# cd /etc/sysconfig/network-scripts/
[root@server network-scripts]# cp -a ifcfg-ens32 ifcfg-ens34
[root@server network-scripts]# cat ifcfg-ens34
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO="static"
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens34
UUID=ae30d645-8c67-33c3-a166-b3587e09dbab
HWADDR=00:0c:29:e3:19:4b
DEVICE=ens34
ONBOOT=yes
IPADDR=192.168.247.104
PREFIX=24
GATEWAY=192.168.247.2
DNS1=8.8.8.8
DNS2=8.8.4.4
[root@server network-scripts]# service network restart
只保留一个subnet {。。。} ,取掉其它subnet,改成如下内容:
[root@server ~]# cat /etc/dhcp/dhcpd.conf
subnet 192.168.247.0 netmask 255.255.255.0 {
range 192.168.247.105 192.168.247.110;
option routers 192.168.247.2;
option subnet-mask 255.255.255.0;
option domain-name "tansk.com";
option domain-name-servers 8.8.8.8;
default-lease-time 600;
max-lease-time 7200;
next-server 192.168.247.104; #下一跳 | Tftp-server
filename "pxelinux.0"; #引导文件 -- PXE启动? 硬盘启动?
}
[root@server ~]#
PXE环境OK,准备工作完成
2.配置使用PXE启动所需的相关文件
2.1.安装软件
[root@server ~]# yum -y install system-config-kickstart syslinux
2.2.设置KICKSTART
[root@server ~]# mount /dev/cdrom /media/
[root@server ~]# mkdir /tftpboot
[root@server ~]# cp /usr/share/syslinux/pxelinux.0 /tftpboot/
[root@server ~]# cp /media/images/pxeboot/initrd.img /tftpboot/
[root@server ~]# cp /media/images/pxeboot/vmlinuz /tftpboot/
[root@server ~]# mkdir -p /tftpboot/pxelinux.cfg
[root@server ~]# cp /media/isolinux/isolinux.cfg /tftpboot/pxelinux.cfg/default
[root@server ~]# chmod 644 /tftpboot/pxelinux.cfg/default
修改default配置(两处)
[root@server ~]# vim /tftpboot/pxelinux.cfg/default
append initrd=initrd.img inst.repo=ftp://192.168.247.104/pub inst.ks=ftp://192.168.247.104/ks.cfg
第64行的意思是使安装程序通过FTP服务器访问kickstart文件。 /var/ftp
以上有关default配置文件的修改就是通过ftp服务器方式来访问kickstart文件。
其中第1行:default linux表示指定默认入口名称;
第2行:prompt 1中prompt用来设置是否等待用户选择,1表示等待用户控制;
第18、23、27、31行label linux表示定义的引导入口,表示系统的不同安装方式,如第18行定义的入口表示图形安装。
配置文件修改完了,要开始自动安装,安装程序必须能访问kickstart文件。
有多种方法可访问kickstart文件,其中最常用的一种方法是通过网络服务器进行,
例如:ftp服务器、WEB服务器或NFS服务器,这种方法非常易于部署,并且也使管理更改变得十分简单。也可以通过USB磁盘、CD-ROM或本地硬盘。如果USB或CD-ROM中的kickstart文件非常便于访问,只需将kickstart文件放置在用来开始安装的引导介质中。而使用DHCP服务器和TFTP及PXE配置起来更为复杂。
使安装程序指向kickstart文件的书写格式如下:
ks=ftp://server/dir/file 如:ks=ftp://ftp服务器IP/ks.cfg
ks=http://server/dir/file 如:ks=http://http服务器IP/ks.cfg
ks=nfs:server:/dir/file 如:ks=nfs:nfs服务器IP:/var/ftp/pub/ks.cfg
ks=hd:device:/dir/file 如:ks=hd:sdb1:/kickstar-files/ks.cfg
ks=cdrom:/dir/file 如:ks=cdrom:/kickstart-files/ks.cfg
以上有关default配置文件的修改就是通过ftp服务器方式来访问kickstart文件。
2.2.将yum源配置为本地源
上面复制完数据和修改后:
利用ftp制作yum源仓库(共享给同网段使用)
[root@server ~]# umount /media/
[root@server ~]# mount -o loop -t iso9660 /dev/cdrom /var/ftp/pub/
2.3.配置yum源。
[root@server ~]# cd /etc/yum.repos.d/
[root@server yum.repos.d]# mkdir yum_backup/ -p
[root@server yum.repos.d]# mv * yum_backup/
[root@server yum.repos.d]# touch my.repo
[root@server yum.repos.d]# cat my.repo
[development]
name=my-centos7-dvd
baseurl=file:///var/ftp/pub
enabled=1
gpgcheck=0
[root@server yum.repos.d]#
[root@server yum.repos.d]# yum clean all
[root@server yum.repos.d]# yum makecache
[root@server yum.repos.d]# yum repolist
2.4.配置X服务
方法一:xminanger
方法二:xming(本次实验使用方法)
参考我写的博客:https://www.cnblogs.com/tanshouke/p/12190666.html
[root@server ~]# export DISPLAY=192.168.1.3:0.0
2.5.设置KICKSTART:
[root@server ~]# system-config-kickstart
设置基础信息:
安装模式:
引导模式:
设置分区:
网卡配置:
认证(保留默认)
SELinux与防火墙:
取消安装图形化:
脚本:
安装前的脚本,启动后的脚本(设置自动安装yum源)
脚本内容:
rm -rf /etc/yum.repos.d/*
echo '[development]
name=my-centos7-dvd
baseurl=ftp://192.168.247.104/pub
enabled=1
gpgcheck=0' > /etc/yum.repos.d/rhel7.repo
保存退出:
2.6.设置最小化安装
在ks文件最后添加(最小化安装,修改packages参数)
CentOS7:
%packages --nobase
@core
%end
[root@kickstart ftp]# cat 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$SCJd/p8V$oT5hAWYjbfipPWQsbug7N/
# System language
lang en_US
# System authorization information
auth --useshadow --passalgo=sha512
# Use graphical install
graphical
# SELinux configuration
selinux --disabled
# Do not configure the X Window System
skipx
# Firewall configuration
firewall --disabled
# Network information
network --bootproto=dhcp --device=eth0
# Reboot after installation
reboot
# System timezone
timezone Asia/Shanghai
# Use network installation
url --url="ftp://192.168.247.104/pub"
# 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=300
part / --fstype="xfs" --size=20480
part swap --fstype="swap" --size=2048
%post --interpreter=/bin/bash
rm -rf /etc/yum.repos.d/*
echo '[rhel-source]
name=centos7
baseurl=ftp://192.168.247.104/pub
enabled=1
gpgcheck=0' > /etc/yum.repos.d/rhel7.repo
%end
%packages
@core
%end
[root@kickstart ftp]#
2.7.开启KICKSTART
[root@server ftp]# systemctl restart dhcpd tftp vsftpd
3.模拟客户端:
3.1.关闭VM-DHCP
(如果不关闭的话DHCP会受到干扰)
选择文件,新建虚拟机
3.2.无人值守:
(开启虚拟机即可全自动最小化安装,无需人为干扰)