1 系统安装介绍
1.1 系统装机的三种引导方式
- 硬盘
- 光驱
- 网络
1.2 系统安装过程
- 加载 boot loader
- 加载启动安装菜单
- 加载内核和initrd系统
- 加载根系统
- 运行anaconda的安装向导
2 PXE介绍
2.1 什么是PXE
PXE( Preboot eXecution Environment,预启动执行环境 )是由Inter公司开发的网络引导技术,工作在Client/Server模式,允许客户机通过网络从远程服务器下载引导镜像,并加载安装文件或整个操作系统。
PXE是通过网卡引导启动。
2.2 PXE服务优点
- 规模化:同时装配多台服务器,无需每一台单独安装操作系统;
- 自动化:实现服务器的自动安装及自动配置各种服务;
- 远程实现:不需要光盘、U盘等安装介质,方便快捷的同时又可以保障服务器安全。
2.3 搭建PXE网络体系所需条件
① 客户机
- 客户机的网卡要支持PXE协议(集成BOOTROM芯片)。
- 网卡自带DHCP服务和TFTP服务。
- 主板支持网络引导。有一些需在BIOS设置中允许从 Network 或 LAN 启动即可。
② 服务端
- 配置 DHCP 服务器 :为客户机自动分配地址、指定引导文件位置(指明TFTP服务器地址)。
- 服务器要开启 TFTP 服务(简单文件传输协议):用来提供系统内核和引导镜像文件的下载。
- 安装软件包syslinux :提供PXE引导程序。
- 服务器提供FTP服务(或http) :提供安装源(例如镜像文件系统等)。
2.4 PXE装机需要的四大文件
- pxelinux.0:引导程序。(来自syslinux程序)
- default:引导程序的配置文件。(需要手写,可参考光盘 isolinux 目录下的 isolinux.cfg 文件)
- vmlinuz:内核文件。(从光盘中获取,位于 isolinux 目录下)
- initrd.img: 系统启动镜像文件。(从光盘中获取,位于 isolinux 目录下)
说明initrd的作用:
- initrd 的英文含义是 boot loader initialized RAM disk,即由引导程序初始化的RAM磁盘。initrd是在实际根文件系统可用之前挂载到系统中的一个初始根文件系统。initrd与内核绑定在一起, 并作为内核引导过程的一部分进行加载。内核然后会将这个initrd文件作为其阶段引导过程的一部分来加载模块,这样才能在以后的引导过程中使用真正的文 件系统,并挂载实际的根文件系统。根文件系统可以存储在包括IDE、SCSI、USB在内的多种介质上,如果将这些设备的驱动都编译进内核,可以想象内核 会多么庞大、臃肿。所以可以把initrd看做是在启动过程中连接内核与根文件系统的一个桥梁。
2.4 PXE实现过程讲解
- 客户机的网卡查找相关的dhcp服务器(获取地址和时间)。
- DHCP服务器给客户机分配IP地址和引导程序(boot loader)的地址 ,同时通过offer报文把TFTP服务器的地址发给客户机。
- TFTP服务器把引导文件(pxelinux.0)传给客户机。
- 客户机将引导程序加载到内存中来。
- 引导程序去TFTP服务器中查找配置文件,服务器将配置文件传给客户机。(配置文件中指定客户机使用ftp方式连接服务器获取系统镜像文件)
- 服务端安装并启动vsftpd服务,客户机使用ftp服务获取系统镜像文件。
3 搭建过程中服务详解
PXE远程安装服务器集成了CentOS 7安装源、TFTP 服务、DHCP 服务,能够向空白客户机(裸机)发送PXE引导程序、Linux 内核、启动菜单等数据,以及提供安装文件。
网卡自带DHCP服务和TFTP服务。
3.1 DHCP服务
DHCP是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。
3.2 TFTP服务
- TFTP(简单文件传输协议),是一种基于UDP协议实现的用于在客户机和服务器之间进行简单文件传输的协议,适合于小型文件传输的应用场合。TFTP服务默认由xinetd服务进行管理,使用UDP69端口。
- TFTP服务一般只在装机这种场景下使用,用于传输内核和引导文件。因为安全性不高。
- 自带的站点:/var/lib/tftpboot
3.3 syslinux
syslinux是一个功能强大的引导加载程序,而且兼容各种介质。它的目的是简化首次安装Linux的时间, 并建立修护或其它特殊用途的启动盘。它的安装很简单,一旦安装syslinux好之后, sysLinux启动盘就可以引导各种基于DOS的工具, 以及MS-DOS/Windows或者 任何其它操作系统。
安装syslinux程序后,可获得 pxelinux.0 文件。
3.4 vsftp:安装系统镜像文件获取方式
可以使用http、ftp等方式,ftp文件传输的一种,vsftpd是提供ftp服务的软件之一。
4 PXE网络装机操作过程
实验环境:
服务器内网IP地址:192.168.137.100。
DHCP、TFTP、FTP服务全都搭建在这一台服务器上。
简易流程:
- 安装4个软件包:dhcp、tftp-server、vsftpd、syslinux(取得prelinux.0文件)。
- 配置DHCP服务器,分配IP地址,指明tftp服务器的地址。(虚拟机需要开启仅主机模式,模拟内网环境)
- 编辑TFTP服务配置文件,开启服务(默认是关闭状态)。
- 挂载软件安装源(通常情况下都使用光盘中的安装源,即挂载光驱),并将三大文件先拷入/var/lib/tftpboot/ 目录中:pxelinux.0,vmlinuz,initrd.img。
- 在/var/lib/tftpboot/ 目录下,创建子目录pxelinux.cfg,在子目录下编写引导程序的配置文件default。
- 关闭防火墙和selinux。启动dhcpd、tftp、vsftpd。
- 使用空白客户机(裸机)测试能否自动装机。
一、服务器配置操作步骤:
1、安装四个软件包:dhcp、tftp-server、vsftpd、syslinux。
[root@localhost ~]# yum install dhcp tftp-server.x86_64 vsftpd syslinux -y
2、将虚拟机的第二块网卡设置为仅主机模式,修改网卡配置文件,重启网络服务。模拟内网环境。
[root@localhost ~]# cd /etc/sysconfig/network-scripts
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens36
[root@localhost network-scripts]# vim ifcfg-ens36
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=ens36
#UUID=bdc9ad35-297a-413f-a7f2-be27868e0e72
DEVICE=ens36
ONBOOT=yes
IPADDR=192.168.137.100
NETMASK=255.255.255.0
GATEWAY=192.168.137.100
#DNS1=8.8.8.8
[root@localhost network-scripts]# systemctl restart network
[root@localhost network-scripts]# ifconfig ens36
ens36: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.137.100 netmask 255.255.255.0 broadcast 192.168.137.255
inet6 fe80::82e9:8745:7968:b6b2 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:18:b5:09 txqueuelen 1000 (Ethernet)
RX packets 1622 bytes 151899 (148.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 300 bytes 50668 (49.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
3、配置DHCP服务器,分配IP地址,指明tftp服务器的地址。
# 将模板文件复制为配置文件
[root@localhost ~]# cd /usr/share/doc/dhcp-4.2.5/
[root@localhost dhcp-4.2.5]# ls
dhcpd6.conf.example dhcpd.conf.example ldap
[root@localhost dhcp-4.2.5]# cp dhcpd.conf.example /etc/dhcp/dhcpd.conf
cp:是否覆盖"/etc/dhcp/dhcpd.conf"? yes
[root@localhost dhcp-4.2.5]#
# 编辑dhcp配置文件
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf
-----------------------------------
subnet 192.168.137.0 netmask 255.255.255.0 { //设置子网IP、子网掩码
range 192.168.137.20 192.168.137.80; //设置地址池
option routers 192.168.137.10; //设置网关地址
next-server 192.168.137.100; //指明TFTP服务器地址
filename "pxelinux.0"; //声明使用pxelinux.0文件
4、修改TFTP服务配置文件/etc/xinetd.d/tftp,将服务开启(默认是关闭状态)。
[root@localhost ~]# rpm -qc tftp-server //查看tftp-server的配置文件位置
/etc/xinetd.d/tftp
[root@localhost ~]# vim /etc/xinetd.d/tftp //编辑配置文件
-------------------------------
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot
disable = no //将这里的yes修改成no,即开启服务
per_source = 11
cps = 100 2
flags = IPv4
5、将光盘挂载到/var/ftp的子目录centos7下,并将三大文件先拷入/var/lib/tftpboot/ 目录中:vmlinuz,initrd.img。pxelinux.0。
# 挂载光盘,先将光盘内的两个文件vmlinuz、initrd.img拷入/var/lib/tftpboot目录。
[root@localhost ~]# cd /var/ftp
[root@localhost ftp]# mkdir centos7
[root@localhost ftp]# mount /dev/sr0 centos7 //将光盘挂载到/var/ftp/centos7/目录下
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost ftp]# cd centos7
[root@localhost centos7]# ls
CentOS_BuildTag GPL LiveOS RPM-GPG-KEY-CentOS-7
EFI images Packages RPM-GPG-KEY-CentOS-Testing-7
EULA isolinux repodata TRANS.TBL
[root@localhost centos7]# cd isolinux
[root@localhost isolinux]# ls
boot.cat grub.conf isolinux.bin memtest TRANS.TBL vmlinuz
boot.msg initrd.img isolinux.cfg splash.png vesamenu.c32
[root@localhost isolinux]# cp vmlinuz initrd.img /var/lib/tftpboot //将光盘内的2个文件拷入tftpboot目录
[root@localhost isolinux]# cd /var/lib/tftpboot
[root@localhost tftpboot]# ls
initrd.img vmlinuz
# 将pxelinux.0文件拷入/var/lib/tftpboot目录。
[root@localhost tftpboot]# rpm -ql syslinux |grep pxelinux.0 //查找pxelinux.0文件位置
/usr/share/syslinux/gpxelinux.0
/usr/share/syslinux/pxelinux.0
[root@localhost tftpboot]# cp /usr/share/syslinux/pxelinux.0 ./ //将pxelinux.0文件拷入tftpboot目录
[root@localhost tftpboot]# ls
initrd.img pxelinux.0 vmlinuz
6、在/var/lib/tftpboot/ 目录下,创建子目录pxelinux.cfg,在pxelinux.cfg目录下编写引导程序的配置文件default。(可参考光盘 isolinux 目录下的 isolinux.cfg 文件)
[root@localhost tftpboot]# mkdir pxelinux.cfg //创建子目录pxelinux.cfg
[root@localhost tftpboot]# cd pxelinux.cfg/
[root@localhost pxelinux.cfg]# vim default //编写default文件
#默认选项
default auto
#开机不等待,也可以设置timeout 600,默认等待60秒
prompt 1
label auto
kernel vmlinuz
append initrd=initrd.img method=ftp://192.168.137.100/centos7
label text
kernel vmlinuz
append text initrd=initrd.img method=ftp://192.168.137.100/centos7
label rescue
kernel vmlinuz
append rescue initrd=initrd.img method=ftp://192.168.137.100/centos7
[root@localhost pxelinux.cfg]# cd .. //切换到上级目录
[root@localhost tftpboot]# tree //以树形图查看目录下的文件
.
├── initrd.img
├── pxelinux.0
├── pxelinux.cfg
│ └── default
└── vmlinuz
1 directory, 4 files
6、关闭防火墙和selinux。启动 dhcpd、tftp、vsftpd 三个服务。
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl start dhcpd
[root@localhost ~]# systemctl start tftp
[root@localhost ~]# systemctl start vsftpd
二、客户端,创建空白虚拟机测试能否自动装机:
1、创建新的空白虚拟机
2、开启虚拟机:
虚拟机自动获取IP地址、自动安装镜像文件系统,最后出现图形化界面,之后的参数需要手动设置。
5 实现Kickstart无人值守安装
1、服务端,yum install system-config-kickstart -y 安装kickstart软件。
[root@localhost yum.repos.d]# yum install system-config-kickstart -y
2、进入虚拟机,在应用程序中找到 Kickstart 工具进行配置。
3、ks.cfg文件成功保存到/var/ftp目录下。需要再次修改/var/lib/tftpboot/pxelinux.cfg目录下的default文件,添加ks参数。
[root@localhost ~]# ls /var/ftp //查看/var/ftp 目录下的ks.cfg文件
centos7 ks.cfg pub
[root@localhost ~]# cd /var/lib/tftpboot/pxelinux.cfg
[root@localhost ~]# ls
default
[root@localhost ~]# vim default //编辑default文件,添加ks参数
default auto
label auto
kernel vmlinuz
append initrd=initrd.img method=ftp://192.168.137.100/centos7 ks=ftp://192.168.137.100/ks.cfg
4、重新启动空白客户机,安装完毕后系统自动配置相应参数。