PXE+Kickstart 无人值守安装
-
PXE
1.1 什么是 PXE
PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel 公司开发的最新技术,
工作于Client/Server 的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支
持通过网络启动操作系统,在启动过程中,终端要求服务器分配 IP 地址,再用 TFTP(trivial
file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件
包到本机内存中执行,由这个启动软件包完成终端基本软件设置,从而引导预先安装在服
务器中的终端操作系统。
严格来说,PXE 并不是一种安装方式,而是一种引导方式。进行 PXE 安装的必要条
件是在要安装的计算机中必须包含一个 PXE 支持的网卡(NIC),即网卡中必须要有 PXE
Client。PXE 协议可以使计算机通过网络启动。此协议分为 Client 端和 Server 端,而 PXE
Client 则在网卡的 ROM 中。当计算机引导时,BIOS 把 PXE Client 调入内存中执行,然
后由 PXE Client 将放置在远端的文件通过网络下载到本地运行。运行 PXE 协议需要设置
DHCP 服务器和 TFTP 服务器。DHCP 服务器会给 PXE Client(将要安装系统的主机)分
配一个 IP 地址,由于是给 PXE Client 分配 IP 地址,所以在配置 DHCP 服务器时需要增
加相应的 PXE 设置。此外,在 PXE Client 的 ROM 中,已经存在了 TFTP Client,那么它
就可以通过 TFTP 协议到 TFTP Server 上下载所需的文件了。
1.2 PXE 工作流程
(1)PXE Client 从自己的PXE 网卡启动,向本网络中的 DHCP 服务器索取 IP
(2)DHCP 服务器返回分配给客户机的 IP 以及 PXE 文件的放置位置(该文件一般是放在
一台 TFTP 服务器上)
(3)PXE Client 向本网络中的 TFTP 服务器索取 pxelinux.0 文件
(4)PXE Client 取得pxelinux.0 文件后之执行该文件
(5)根据 pxelinux.0 的执行结果,通过 TFTP 服务器加载内核和文件系统
(6)进入安装画面, 此时可以通过选择 HTTP、FTP、NFS 方式之一进行安装
-
Kickstart
Kickstart 是一种无人值守的安装方式。它的工作原理是在安装过程中记录典型的需要人
工干预填写的各种参数,并生成一个名为 ks.cfg 的文件。如果在安装过程中(不只局限于生
成 Kickstart 安装文件的机器)出现要填写参数的情况,安装程序首先会去查找 Kickstart 生成
的文件,如果找到合适的参数,就采用所找到的参数;如果没有找到合适的参数,便需要安
装者手工干预了。所以,如果 Kickstart 文件涵盖了安装过程中可能出现的所有需要填写的参
数,那么安装者完全可以只告诉安装程序从何处取 ks.cfg 文件,然后就去忙自己的事情。等
安装完毕,安装程序会根据ks.cfg 中的设置重启系统,并结束安装。
- 细节补充
3.1 pxelinux.0 是什么文件
pxelinux.0 是一个二进制文件,是一个 bootstrap。
bootloader 翻译为 (第一阶段)引导装入程序Boot loader 储存有操作系统(OS)的相
关信息,比如操作系统名称,操作系统内核 (kernel)所在位置等。常用的 boot loader 有
GRUB 和LILO。
bootstrap loader 翻译为 第二阶段引导装入程序,属于内核代码(没有被编译进
vmlinux,但是可执行的镜像如 zImage 中含有 bootstrap ),充当bootloader 和内核镜像之
间的纽带。
bootstrap 通常会校验内核镜像、解压缩内核镜像、重新部署内核镜像到内存、为内
核执行提供合适的上下文(无非是关中断、开指令 cache 和数据 cache、设置 c 语言运行
环境)
执行流程
上电自检–>bootloader -->bootstrap (head.o )–> 内核 vmlinux(head.o)–> 内核
start_kernel(main.o)
3.2 为什么要网络模式要设置成 Inetnal Network
VirtualBox 的提供了四种网络接入模式,它们分别是:
(1)NAT 网络地址转换模式(NAT,Network Address Translation)
(2)Bridged Adapter 桥接模式
(3)Internal Network 内部网络模式
(4)Host-only Adapter 主机模式
详情链接:https://www.douban.com/group/topic/15558388/
四种网卡模式中,只有 Internal Network 是完全与宿主机无关的网络模式,为了排
除掉宿主机的干扰(比如如果用桥接模式与宿主机互通,那么公网上就会提供 DHCP 服
务,使我们部署的 DHCP 服务失效),所以我们选用 Internal Network。
4. 对于理论部分有问题或者错误或者想要添加,请联系QQ:3077033539
5. 开始操作吧!
5.1 环境:虚拟化软件:Virtualbox
操作系统:Linux CentOS 7
Client server:内存必须大于 2G!因为在使用 kickstart 安装前所有启动文件都是
从服务器端下载到内存中执行!
服务器端记得安装图形化页面
5.2 操作
virtualbox使用 Internal NetworK 模式,
vm 如图
虚拟机无法与外部网联通,所以我们需要部署本地 yum 源,这
里我们将 CentOS7 光盘镜像文件作为 yum 源
这里进入yum.repos.d文件,删除、移除文件或者更改CentOS-Meida.repo文件,因为安装时会首先寻找以上文件。
[root@localhost ~]# vim /etc/yum.repos.d/pxe_kickstart.repo
[root@localhost ~]# cat /etc/yum.repos.d/pxe_kickstart.repo
特别是第一行不要忘记输入
[pxe_kickstart] # yum 容器名
name=pxe_kickstart #为这个容器定义作用
baseurl=file:///mnt # yum 源路径
enabled=1 #是否启用此文件
gpgcheck=0 #是否需要秘钥认证
在进行挂载时需要将connected点上,否则看不见光盘。
[root@localhost ~]# mount /dev/cdrom /mnt
mount: /dev/sr0 is write-protected, mounting read-only
[root@localhost ~]# yum list
出现安装包就是完成。也可以图形化看是否有两个盘(实际上挂载后就可以看见)
将镜像包放入 ftp 服务子目录
[root@localhost ~]# mkdir -pv /var/ftp/centos
mkdir: created directory ‘/var/ftp’
mkdir: created directory ‘/var/ftp/centos’
[root@localhost ~]# cp -rf /mnt/* /var/ftp/centos/
部署 FTP 服务
[root@localhost ~]# yum -y install vsftpd
[root@localhost ~]# systemctl start vsftpd
部署 TFTP 服务
[root@localhost ~]# yum -y install tftp-server
disabled改为no
[root@localhost ~]# systemctl start tftp
准备 Linux 内核(vmlinux)与初始化镜像文件(initrd.img)
将 isolinux 目录下所有文件都放入/var/lib/tftpboot/下
[root@localhost ~]# cp /mnt/isolinux/* /var/lib/tftpboot/
[root@localhost ~]# ls /var/lib/tftpboot/
boot.cat boot.msg grub.conf initrd.img isolinux.bin isolinux.cfg memtest splash.png
TRANS.TBL vesamenu.c32 vmlinuz
接下来再准备 PEX 引导程序,启动菜单文件 Linux 引导程序为 pxelinux.0 该文件由 syslinux
软件包提供,因此我们要安装 syslinux 软件包, 并复制到 tftp 根目录下
[root@localhost ~]# yum -y install syslinux
[root@localhost ~]# cd /usr/share/syslinux/
[root@localhost syslinux]# cp pxelinux.0 /var/lib/tftpboot/
默认的启动菜单为 isolinux.cfg,该文件应该放置在 tftp 根目录的 pxelinux.cfg 中,并重命名为
default。
[root@localhost ~]# cd /usr/share/syslinux/
[root@localhost syslinux]# cp pxelinux.0 /var/lib/tftpboot/
[root@localhost syslinux]# cd /var/lib/tftpboot/
[root@localhost tftpboot]# mkdir pxelinux.cfg
[root@localhost tftpboot]# cp isolinux.cfg pxelinux.cfg/default
设置文件的权限 755,修改配置文件,虚拟文件系统的文件名要正确。ks 参数指向的目标路
径要正确!FTP 默认路径/var/ftp
[root@localhost tftpboot]# chmod 755 pxelinux.cfg/default
[root@localhost tftpboot]# vim pxelinux.cfg/default
default linux #默认运行的 label 名
timeout 600
display boot.msg
……
label linux
menu label ^Install CentOS 7
kernel vmlinuz
append initrd=initrd.img ks=ftp://10.0.2.1/ks.cfg
部署 DHCP 服务
首先更改网卡配置
[root@localhost tftpboot]# vim /etc/dhcp/dhcpd.conf
[root@localhost tftpboot]# cat /etc/dhcp/dhcpd.conf
DHCP Server Configuration file.
see /usr/share/doc/dhcp*/dhcpd.conf.example
see dhcpd.conf(5) man page
default-lease-time 600; #默认租赁时间,单位秒
max-lease-time 7200; #最大租赁时间,单位秒
subnet 10.0.2.0 netmask 255.255.255.0 { #subnet 描述 IP 地址是否属于该子网
range 10.0.2.1 10.0.2.10; #动态分配 IP 范围
option routers 10.0.2.1; #为客户端设定默认网关
filename “pxelinux.0”; #开始启动的文件名称
next-server 10.0.2.1; #要上传的服务器地址
}
[root@localhost tftpboot]# systemctl restart dhcpd
关闭 selinux 和 firewalld
[root@localhost tftpboot]# vim /etc/selinux/config
[root@localhost tftpboot]# cat /etc/selinux/config
……
SELINUX=disabled #设置成不启用
……
[root@localhost tftpboot]# reboot #重启,使操作生效
[root@localhost tftpboot]# systemctl stop firewalld
使用 kickstart 生成 ks.cfg 文件
[root@localhost ~]# yum -y install system-config-kickstart
[root@localhost ~]# system-config-kickstart #启动 kickstart
后三个选项不用动,实际上也动不了,需要更改配置,不过不影响
保存文件到/var/ftp 下
Ks.cfg 文件:
配置完成后只要启动客户机就好了。Virtualbox注意需要设置启动方式
出现
(1)设置的NAT
(2)内存太小