网络安装系统的原理
当主板bios里选择使用网络安装时,会使用PXE协议来安装操作系统。PXE(Pre-boot Execution Environment)是由Intel设计的一款协议,它可以使计算机通过网络启动。协议分为client和server端,PXE client写入到网卡的ROM中,当电脑开机开始引导时,BIOS根据启动项设置把PXE client调入内存中执行,PXE client通过dhcp客户端向局域网内的dhcp服务器请求IP地址,获取到IP地址之后根据dhcp服务器发送的配置,转到TFTP(Trivial File Transfer Protocol)服务器中下载系统启动引导文件和内核文件,将放置在远端的操作系统通过网络下载到本地运行。也就是说在其启动过程中,客户端请求服务器分配IP地址,在这个过程中需要一台服务器来提供启动文件、安装文件、以及安装过程中的自动应答文件等。全过程如下所示:
第一步:PXE Client向DHCP发送请求
将支持PXE启动的客户端设置为从网络启动,开机后BIOS将PXE client调入内存中执行,client发送一个UDP(简单用户数据报协议)广播请求,向局域网中的DHCP服务器请求IP地址等信息。
第二步:DHCP服务器提供信息
DHCP服务器收到客户端的请求,验证是否来自合法的PXE Client,验证通过后它将给客户端一个“提供”响应,这个“提供”响应中包含了为客户端分配的IP地址、pxelinux启动程序(TFTP)位置,以及配置文件所在位置。
第三步:PXE客户端请求下载启动文件
客户端收到服务器的“回应”后,会回应一个帧,以请求传送启动所需文件。这些启动文件包括:pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img等文件。
第四步:Boot Server响应客户端请求并传送文件
当服务器收到客户端的请求后,他们之间之后将有更多的信息在客户端与服务器之间作应答, 用以决定启动参数。BootROM 由 TFTP 通讯协议从Boot Server下载启动安装程序所必须的文件(pxelinux.0、pxelinux.cfg/default)。default文件下载完成后,会根据该文件中定义的引导顺序和引导位置,加载系统配置文件ks.cfg,启动Linux安装程序的引导内核vmlinuz和initrd.img。
第五步:请求下载自动应答文件
客户端通过pxelinux.cfg/default文件成功的引导Linux安装内核后,安装程序根据default文件里的配置确定你通过什么安装介质来安装linux,如果是通过网络安装(NFS, FTP, HTTP),则会在这个时候初始化网络,并根据default文件里的配置选项inst.repo定位安装源位置。这里会再次向DHCP服务器请求IP地址,原因是因为PXE client获取的是安装用的内核以及引导文件等,而引导成功后安装系统的安装程序要获取的是安装系统所需的二进制包以及配置文件。由于它们需要的内容不同造成PXE client模块和安装程序是相对独立的,PXE的网络配置并不能传递给安装程序。从而进行两次获取IP地址过程。接着会读取该文件(default)中指定的自动应答文件ks.cfg所在位置,根据该位置请求下载该文件。
第六步:客户端安装操作系统
将ks.cfg文件下载后,通过该文件中的配置找到OS Server,并按照该文件的配置选项"url --url= "来请求下载安装过程需要的软件包。OS Server和客户端建立连接后,将开始传输软件包,客户端将开始安装操作系统。安装完成后,将提示重新启动计算机。这个时候注意,在重新启动的过程中一定要将BIOS改回从硬盘启动,不然的话又会重复的自动安装操作系统。
在上面介绍中PXE client是需要安装Linux的计算机,TFTP Server、DHCP Server和NFS Server运行在另外一台Linux Server上。Bootstrap文件、配置文件pxelinux.0和pxelinu.cfg/default、Linux内核vmlinuz和initrd.img都放置在Linux Server上TFTP服务器的根目录下。而Linux根文件系统存放于NFS Server的共享目录中。PXE client在工作过程中,需要三个二进制文件:bootstrap、Linux 内核和Linux根文件系统。Bootstrap文件是可执行程序,它向用户提供简单的控制界面,并根据用户的选择,下载合适的Linux内核以及Linux根文件系统。
一、要实现的功能
远程安装服务器系统,实现无人值守自动安装。
二、配置过程
1. 安装配置dhcp服务器
ddns-update-style interim; ignore client-updates; option routers 192.168.2.1; default-lease-time 21600; max-lease-time 43200; subnet 192.168.2.0 netmask 255.255.255.0 { range dynamic-bootp 192.168.111.100 192.168.111.200; filename "pxelinux.0"; #pxelinux 启动文件位置; next-server 192.168.2.1; #TFTP Server 的IP地址; }
2. 安装配置tftp服务器
yum -y install tftp-server
编辑tftp配置文件/etc/xinetd.d/tftp
将里面的disable yes改为disable no,保存退出
重新启动xinetd
systemctl restart xinetd systemctl enable xinetd
3. 配置启动项和启动文件
首先将iso文件挂在到/media目录下
mount /dev/sr0 /media
(1)复制pxelinux.0 文件至/var/lib/tftpboot/文件夹中
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
如果在/usr/share/目录下没有找到这个文件,说明没有安装syslinux,需要手动安装
yum -y install syslinux
说明:syslinux是一个功能强大的引导加载程序,而且兼容各种介质。更加确切地说:SYSLINUX是一个小型的Linux操作系统,它的目的是简化首次安装Linux的时间,并建立修护或其它特殊用途的启动盘。
(2)复制镜像文件中的/image/pxeboot/initrd.img和vmlinux 至/var/lib/tftpboot/ 文件夹中
cp /media/images/pxeboot/{initrd.img,vmlinuz} /var/lib/tftpboot/
(3)复制iso 镜像中的/media/isolinux/boot.msg 至/var/lib/tftpboot/ 文件夹中
cp /media/isolinux/*.msg /var/lib/tftpboot/
(4)在/var/lib/tftpboot/ 中新建一个pxelinux.cfg目录
mkdir /var/lib/tftpboot/pxelinux.cfg
(5)将iso 镜像中的/isolinux 目录中的isolinux.cfg复制到pxelinux.cfg目录中,同时更改文件名称为default
cp /media/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
(6)修改default文件
将第一行的default vesamenu.c32注释掉
新增一行default linux
然后找到label linux,修改为如下内容:(这里采用的是http安装源来安装)
label linux menu label ^Install CentOS 7 kernel vmlinuz append initrd=initrd.img ks=http://192.168.1.210/os/ks.cfg inst.repo=http://192.168.1.210/os
然后保存退出,这样所有的配置文件就配置完毕;
4. 安装配置操作系统源位置(NFS或HTTP)
(1)http安装源安装方式
首先安装配置httpd
yum -y install httpd
其次,配置安装文件目录
mkdir /var/ww/html/os cp /media/* /var/www/html/os
5. 创建ks.cfg配置文件
vim /var/www/html/os/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$WJGXtHBG$SVk/yH3jp0zG3SmlgT0Lt0 # System timezone timezone Asia/Shanghai --isUtc # System language lang en_US # Firewall configuration firewall --disabled # System authorization information auth --useshadow --passalgo=sha512 # Use graphical install graphical # Run the Setup Agent on first boot firstboot --enable # SELinux configuration selinux --permissive # Use NFS installation media #nfs --server=192.168.1.210 --dir=/tmp/isoimg # Use HTTP installation media #url --url=http://192.168.1.210/os/ url --url=http://192.168.1.210/os/ # Network information network --bootproto=dhcp --device=eth0 --onboot=on --noipv6 # Reboot after installation reboot # System bootloader configuration bootloader --location=mbr # Clear the Master Boot Record zerombr # Partition clearing information #clearpart --all --initlabel # Disk partitioning information part /boot/efi --fstype="efi" --ondisk=sda --size=256 part /boot --fstype="xfs" --ondisk=sda --size=500 part / --fstype="xfs" --ondisk=sda --size=5000 part /home --fstype="xfs" --ondisk=sda --size=5000 %packages @base @core @fonts @input-methods @multimedia %end %pre #>2.0TB hard disk need to try to use gpt instead of mbr. parted -s=BOOT_DISK_DEVICE= mklabel gpt %end %post ############EFI BOOT ############# mkdir -p /boot/efi/EFI/BOOT \cp -r /boot/* /boot/efi \cp /boot/efi/EFI/redhat/grub.efi /boot/efi/EFI/BOOT/BOOTX64.efi \cp /boot/grub/grub.conf /boot/efi/EFI/BOOT/BOOTX64.conf \cp /boot/grub/splash.xpm.gz /boot/efi/EFI/BOOT/splash.xpm.gz %end
配置好以后保存退出
6. 启动客户端主机,设置第一启动项为网络启动,然后就开始安装;
安装完成后重新启动机器时将开机选项第一启动项改为从本地硬盘启动,否则又会重复安装过程,后续还将学习使用cobbler来安装操作系统,待续。