PXE Introduction
1) Preboot Excution Environment Pre-Boot Execution Environment 2) Intel R & D 3) web-based mode Client / Server, support for remote hosts from a remote server to download the image, and thus support the launch of the operating system through the network via the network 4) PXE boot may and install Windows, linux and other operating systems
PXE works
- Client sends DHCP on the PXE Server IP address request message, DHCP Client detects the legality of (mainly detect network card MAC address of Client), if the legitimate IP address of the Client is returned, and will start the file location information collectively pxelinux.0 delivered to Client
- After sending the TFTP Client on the PXE Server pxelinux.0 acquisition request message, TFTP Client receives the message again sent pxelinux.0 size information, to test whether the Client satisfaction, after receipt of consent of the size of the TFTP Client information sent back, the official Client Client sending pxelinux.0 executes the received file pxelinux.0
- Client sending configuration information file for the machine (under the TFTP pxelinux.cfg directory service), the profile back TFTP Client, then Client subsequent operations according to the configuration file to TFTP Server.
- Client transmits to TFTP Linux kernel request information, after receiving the message will be sent TFTP kernel file to Client
- Client sends a TFTP request message document root, root file system Linux returns after receiving the message TFTP
- Client boot Linux kernel
- Client Download the installation source files, automated installation scripts to read
Operating system installation process
1)通用流程:首先,bios启动,选择操作系统的启动(安装)模式(此时,内存是空白的),然后根据相关的安装模式,寻找操作系统的引导程序(不同的模式,对应不同的引导程序当然也对应着不同的引导程序存在的位置),引导程序加载文件系统初始化(initrd)程序和内核初始镜像(vmlinuz),完成操作系统安装前的初始化;接着,操作系统开始安装相关的系统和应用程序。 2)硬盘安装的流程:bios启动——MBR寻找grub——grub程序读取menu.list等配置文件,找到内核启动镜像和相关初始化程序,安装(或者启动)。 3)PXE(Pre-boot Execution Environment)是由Intel设计,可以使计算机通过网络启动的协议。协议分为client和server两端,PXE client在网卡的ROM中,当计算机启动时,BIOS把PXE client调入内存执行,并显示出命令菜单,经用户选择后,PXE client将放置在远端的操作系统通过网络下载到本地运行。 4)pxe网络安装的流程:bios启动——pxe client中的程序进入内存,显示命令菜单——此程序开始寻找网络引导程序(bootstrap文件,这个文件的名字随着发行版的不同而不同,在centos中,它是pxelinux.0)——引导程序读取配置文件pxelinux.cfg, 获得系统初始化的相关文件信息——系统启动,开始进行安装。
PXE自动化安装CentOS 7
安装前准备:关闭防火墙和SELINUX,DHCP服务器静态IP
安装软件包
[root@centos7~]# yum install tftp-server (安装服务端TFTP包) [root@centos7~]#yum install tftp (安装客户端TFTP包)
centos7启动tftp服务:
[root@centos7~]#systemctl enable tftp 启动tftp,下次开机默认启动 [root@centos7~]#ss -nultp users:(("rpc.statd",pid=6655,fd=10)) udp UNCONN 0 0 :::69 tftp默认端口是69
centos6启动tftp服务:
[root@centos6~]#chkconfig tftp on 启动tftp,下次默认开机启动 [root@centos6~]#service xinetd start Starting xinetd:
TFTP从服务器上上传下载文件功能,下载时需要知道对方的文件名,下载下来的文件会在/var/lib/tftpboot目录里(额外拓展):
[root@centos7data]#cp /etc/fstab /var/lib/tftpboot/f1 将服务器的文件放在/var/lib/tfpboot/目录下,起名叫f1 [root@centos6~]#tftp 192.168.34.101 通过连接tftp服务在/var/lib/tftpboot/目录下下载必要的文件 tftp> status Connected to 192.168.34.101. Mode: netascii Verbose: off Tracing: off Literal: off Rexmt-interval: 5 seconds, Max-timeout: 25 seconds tftp> get f1 在tftp服务上下载文件 tftp> q 按q可以退出
安装http服务:
[root@centos7~]# yum install http 安装完http服务后 [root@centos7~]# systemctl enable httpd 启动http服务,默认下次开启启动
创建网页版yum源 :
[root@centos7~]#mkdir -pv /var/www/html/centos/{6,7}/os/x86_64/ 创建一个centos6/7的文件 [root@centos7html]#mount /dev/sr0 centos/7/os/x86_64/ 将光盘挂载到cnetos7文件夹下 mount: /dev/sr0 is write-protected, mounting read-only
将应答文件放到http服务上:
[root@centos7~]#mkdir /var/www/html/ksdir 新建了一个应答文件夹 [root@centos7~]#cp anaconda-ks.cfg /var/www/html/ksdir/ks7_mini.cfg 将现有的家目录文件anaconda-ks.cfg文件复制到ksdir文件夹下面,起名叫ks7_mini.cfg [root@centos7ksdir]#vim ks7_mini.cfg 修改里边的应答文件信息 #version=DEVEL # Use CDROM installation media url --url=http://192.168.34.101/centos/7/os/x86_64/ 将网页挂载的光盘路径写上 # Use graphical install text 文本格式安装 # Run the Setup Agent on first boot firstboot --enable ignoredisk --only-use=sda # Keyboard layouts keyboard --vckeymap=us --xlayouts='us' # System language lang en_US.UTF-8 # Network information network --bootproto=dhcp --device=ens33 --ipv6=auto --activate network --hostname=centos7.localdomain # Root password rootpw --iscrypted $6$zQd4v6GjKalpnj.h$uutceFNO9vO0H2mJoBQYgpW5iNUrmKNHWulIKrSFfPJtpu4f.llg6rm9veeswxYrFXOpXV5M9MPqMBv/DGjdj. # System services firewall --disabled 防火墙关掉 selinux --disabled selinux关掉 # System timezone timezone Asia/Shanghai --isUtc --nontp user --name=liu --password=$6$LlHE.xyYU4ZoUsbV$nBtUpJjkXmMa1lQFNoNhOs0AuVaOecBttShTt3wNrUncYh.JLfnBIIfMJtOu0Cnkemt1Wr76sHCEiHrD.yKxE1 --iscrypted --gecos="liu" # X Window System configuration information #xconfig --startxonboot # System bootloader configuration bootloader --location=mbr --boot-drive=sda # Partition clearing information clearpart --all --initlabel 磁盘全部格式化 zerombr mbr磁盘清空 reboot 安装完重启 # Disk partitioning information part /boot --fstype="xfs" --ondisk=sda --size=1024 part / --fstype="xfs" --ondisk=sda --size=102400 part swap --fstype="swap" --ondisk=sda --size=3072 part /data --fstype="xfs" --ondisk=sda --size=51200 %packages @core 只安装一个核文件 %end [root@centos7ksdir]#ll total 4 -rw------- 1 root root 1906 Oct 30 20:19 ks7_mini.cfg 由于应答文件在root模式下有读权限,需要全部加读权限 [root@centos7ksdir]#chmod +r ks7_mini.cfg 将应答文件加读权限
安装和配置DHCP服务
[root@centos7~]#yum install dhcp 安装dhcp服务
[root@centos7~]#vim /etc/dhcp/dhcpd.conf 配置dhcp服务 # dhcpd.conf # # Sample configuration file for ISC dhcpd # # option definitions common to all supported networks... option domain-name "example.org"; option domain-name-servers ns1.example.org, ns2.example.org; default-lease-time 86400; max-lease-time 864000; # Use this to enble / disable dynamic dns updates globally. #ddns-update-style none; # If this DHCP server is the official DHCP server for the local # network, the authoritative directive should be uncommented. #authoritative; # Use this to send dhcp log messages to a different log file (you also # have to hack syslog.conf to complete the redirection). log-facility local7; # No service will be given on this subnet, but declaring it helps the # DHCP server to understand the network topology. subnet 192.168.34.0 netmask 255.255.255.0 { 声明当前的IP地址段和子网掩码 range 192.168.34.10 192.168.34.200; 设置地址池:192.168.34.10-200 option routers 192.168.34.1; 设置当前的网关地址 option domain-name-servers 8.8.8.8; 设置DNS next-server 192.168.34.101; 指明引导所在的服务主机的IP地址 filename "pxelinux.0"; 指明引导文件名称 } # This is a very basic subnet declaration.
[root@centos7~]#systemctl enable dhcpd 配置好dhcp服务后,启动dhcp服务,默认下次开机启动
安装syslinux 里边有pxelinux.0包文件
[root@centos7~]#yum install syslinux -y 安装syslinux包 Loaded plugins: fastestmirror, langpacks Repository 'development' is missing name in configuration, using id Repository 'ELPL' is missing name in configuration, using id Loading mirror speeds from cached hostfile Resolving Dependencies --> Running transaction check ---> Package syslinux.x86_64 0:4.05-15.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved ====================================================================================================================== Package Arch Version Repository Size ====================================================================================================================== Installing: syslinux x86_64 4.05-15.el7 development 990 k Transaction Summary ====================================================================================================================== Install 1 Package Total download size: 990 k Installed size: 2.3 M Downloading packages: Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : syslinux-4.05-15.el7.x86_64 1/1 Verifying : syslinux-4.05-15.el7.x86_64 1/1 Installed: syslinux.x86_64 0:4.05-15.el7 Complete!
syslinux配置文件相关的安装包:
[root@centos7~]#rpm -ql syslinux /usr/share/syslinux/menu.c32 开机启动的蓝色背景 /usr/share/syslinux/pxelinux.0 pxelinux.0包位置
[root@centos7~]#mkdir /var/lib/tftpboot/pxelinux.cfg 创建一个pxelinux.cfg相关文件夹 [root@centos7~]#cp /usr/share/syslinux/{menu.c32,pxelinux.0} /var/lib/tftpboot 将syslinux下的两个配置文件放到tftpboot目录下,其中menu.c32 开机时作为蓝色背景。 [root@centos7~]#cp /misc/cd/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot 将光盘下的内核启动文件vmlinuz和initrd.img文件放到tftpboot目录下 [root@centos7~]#cd /var/lib/tftpboot [root@centos7tftpboot]#cp /misc/cd/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default 将isolinux.cfg文件复制到pxelinux.cfg文件夹下,起名叫default,作为启动菜单。 [root@centos7tftpboot]#tree 查看已经创建的文件信息,一个文件都不能少 . ├── initrd.img ├── menu.c32 ├── pxelinux.0 ├── pxelinux.cfg │ └── default └── vmlinuz
修改pxelinux.cfg下的default配置文件的信息:
[root@centos7tftpboot]#vim /var/lib/tftpboot/pxelinux.cfg/default 修改配置文件信息 default menu.c32 开机蓝色背景 timeout 100 超时市场改为10秒 menu title PXE CentOS 开机显示的抬头信息 label mini 最小化安装起名 menu label ^Auto Install mini CentOS 7 自动化安装起名 kernel vmlinuz append initrd=initrd.img ks=http://192.168.34.105/ksdir/ks7_mini.cfg 写入引导文件路径 label desktop 备用的桌面安装 menu label ^Auto Install desktop CentOS 7 书写相关备用桌面格式 kernel vmlinuz append initrd=initrd.img ks=http://192.168.34.105/ksdir/ks7_mini.cfg label local menu default 默认的本地安装 menu label Boot from ^local drive localboot 0xffff
在新开一台机器开始安装系统,将网卡模式设置为仅主机模式,将VMnet1对勾去掉,保证与服务端的网卡在一个网卡上:
开机通过ARP广播开始寻找同一网卡的配置文件信息,进而找到以上写入的相关配置文件,实现自动化安装:
注意:centos7系统的内存尽量设置1.2G以上,否则会提示内存空间不足,导致无法安装。
centos6系统安装过程:
将光盘挂载到网页上:
[root@centos6html]#mkdir -pv centos/6/os/x86_64 新建文件夹 mkdir: created directory `centos' mkdir: created directory `centos/6' mkdir: created directory `centos/6/os' mkdir: created directory `centos/6/os/x86_64' [root@centos6html]#mount /dev/sr0 /var/www/html/centos/6/os/x86_64 将新建的文件挂载到网页上 mount: block device /dev/sr0 is write-protected, mounting read-only
制作应答文件:
[root@centos6tftpboot]#cp /root/anaconda-ks.cfg ks6_mini.cfg 将系统中自带的文件复制一份到/var/lib/tftpboot目录下 [root@centos6tftpboot]#vim ks6_mini.cfg 修改当前的应答文件信息 url --url=http://192.168.34.105/centos/6/os/x86_64 指定挂载光盘路径 lang en_US.UTF-8 keyboard us text 以文本形式安装 reboot 安装完重启 network --onboot yes --device eth0 --bootproto dhcp --noipv6 rootpw --iscrypted $6$6pdd/ulLIO5IoQ2u$EKDznPOR19rWTeBjVVTYGay3PbNd3t0v9.Ae.jOsxP9i3T8khOMhDxDwTzfa9E3gqirD7qD3Pw6qK1QKf2pDE0 firewall --disabled 关闭防火墙 authconfig --enableshadow --passalgo=sha512 selinux --disabled 关闭selinux timezone Asia/Shanghai bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" # The following is the partition information you requested # Note that any partitions you deleted are not expressed # here so unless you clear all partitions first, this is # not guaranteed to work clearpart --all 格式化磁盘 zerombr 情况mbr分区 part /boot --fstype=ext4 --size=1024 boot分区 part / --fstype=ext4 --size=100000 根分区 part /data --fstype=ext4 --size=50000 data分区 part swap --size=2048 swap 分区 %packages @core 只安装核包 %end [root@centos6tftpboot]#chmod +r ks6_mini.cfg 因为应答文件只有root有读权限,将全部属组都加有读权限
安装dhcp服务,并修改相关配置信息:
[root@centos6~]#yum install dhcp-server 安装dhcp服务
[root@centos6html]#vim /etc/dhcp/dhcpd.conf 修改dhcp配置信息 default-lease-time 84600; 申请默认租期 max-lease-time 86400; 最大申请租期 # Use this to enble / disable dynamic dns updates globally. #ddns-update-style none; # If this DHCP server is the official DHCP server for the local # network, the authoritative directive should be uncommented. #authoritative; # Use this to send dhcp log messages to a different log file (you also # have to hack syslog.conf to complete the redirection). log-facility local7; # No service will be given on this subnet, but declaring it helps the # DHCP server to understand the network topology. subnet 192.168.34.0 netmask 255.255.255.0 { 声明地址段和子网掩码 range 192.168.34.10 192.168.34.200; 设置地址池:192.168.34.10-200 option domain-name-servers 8.8.8.8; 设置NDS next-server 192.168.34.105; 指明引导服务主机所在的IP地址 filename "pxelinux.0"; 指明引导的文件名称 }
[root@centos6html]#service dhcpd restart 重新启动dhcp服务
将相关的配置文件放在/var/lib/tftpboot目录下:
[root@centos6html]#cd /var/lib/tftpboot [root@centos6tftpboot]#mkdir pxelinux.cfg [root@centos6tftpboot]#yum install syslinux-nonlinux [root@centos6tftpboot]#cp /misc/cd/isolinux/{initrd.img,boot.msg,vmlinuz,splash.jpg,vesamenu.c32} . [root@centos6tftpboot]#cp /misc/cd/isolinux//isolinux.cfg pxelinux.cfg/default
修改当前pxelinux.0下面的default配置文件信息:
[root@centos6tftpboot]#vim pxelinux.cfg/default default vesamenu.c32 #prompt 1 timeout 100 超时时长修改至10s label linux menu label ^Auto Install Mini centos 6 system 修改为自动安装 menu default kernel vmlinuz append initrd=initrd.img ks=http://192.168.34.105/ksdir/ks6_mini.cfg 指定当前的应答文件路径 label local menu default 设置一个默认安装 menu label Boot from ^local drive localboot 0xffff
至此,相关的配置文件设置完成,打开一个新的虚拟机进行安装系统,将网卡默认设置成仅主机模式,将vmnet1的DHCP功能关掉,开机后按esc,选择网卡启动安装,开始安装系统,结束。
选择网卡启动,然后按F10保存,就会自动重启,新装的主机就会通过广播获取DHCP相关的安装配置信息,就会启动进行安装,至此,cnetos6安装结束。
在centos7基于PXE安装centos6/7系统实验:(此安装适用于BIOS模式安装)
在centos7上新加一块ISO镜像:
准备工作:
启动三个服务:
[root@centos7tftpboot]#systemctl start dhcpd [root@centos7tftpboot]#systemctl start tftp [root@centos7tftpboot]#systemctl start httpd
挂载光盘:
[root@centos7~]#mkdir /var/www/html/centos/{6,7}/os/x86_64 [root@centos7~]#mount /dev/sr0 /var/www/html/centos/7/os/x86_64/ [root@centos7~]#mount /dev/sr1 /var/www/html/centos/6/os/x86_64/
复制之前制作的应答文件和内核启动文件
[root@centos7ksdir]#cp ks7_mini.cfg ks6_mini.cfg [root@centos7ksdir]#ll total 8 -rw-r--r-- 1 root root 1400 Oct 31 09:21 ks6_mini.cfg -rw-r--r-- 1 root root 1400 Oct 30 20:29 ks7_mini.cfg [root@centos7tftpboot]#mkdir linux{6,7} [root@centos7tftpboot]#mv vmlinuz initrd.img linux7/ 将本地的内核启动文件复制在新建的linux7下 [root@centos7tftpboot]#cp /var/www/html/centos/6/os/x86_64/isolinux/{vmlinuz,initrd.img} linux6/ 将挂载的iso光盘的启动文件复制到新建的linux6下 [root@centos7tftpboot]#tree . ├── linux6 │ ├── initrd.img │ └── vmlinuz ├── linux7 │ ├── initrd.img │ └── vmlinuz ├── menu.c32 ├── pxelinux.0 └── pxelinux.cfg └── default 修改此配置文件信息
修改引导文件信息:
vim pxelinux.cfg/deffault default menu.c32 timeout 100 menu title PXE Insall CentOS label mini7 menu label ^Auto Install mini7 CentOS 7 修改启动显示的信息 kernel linux7/vmlinuz 由于新建了linux7,启动文件路径在此目录下,需要指定启动文件在linux7下面 append initrd=linux7/initrd.img ks=http://192.168.34.101/ksdir/ks7_mini.cfg 指定应答文件路径 label mini6 menu label ^Auto Install mini6 CentOS 6 修改显示的信息 kernel linux6/vmlinuz 由于新建了一个linux6,启动文件路径在此目录下,因此需要添加linux6路径指定应答文件 append initrd=linux6/initrd.img ks=http://192.168.34.101/ksdir/ks6_mini.cfg 指定应答文件路径 label local menu default menu label Boot from ^local drive localboot 0xffff
修改centos6的应答文件内容:
[root@centos7tftpboot]#vim /var/www/html/ksdir/ks6_mini.cfg
url --url=http://192.168.34.100/centos/6/os/x86_64 指定光盘挂载路径 text 以文本方式安装 # System services firewall --disabled 防火墙关掉 selinux --disabled selinux关掉 # System timezone timezone Asia/Shanghai --isUtc --nontp user --name=liu --password=$6$LlHE.xyYU4ZoUsbV$nBtUpJjkXmMa1lQFNoNhOs0AuVaOecBttShTt3wNrUncYh.JLfnBIIfMJtOu0Cnkemt1Wr76sHCEiHrD.yKxE1 --iscrypted --gecos="liu" # X Window System configuration information #xconfig --startxonboot # System bootloader configuration bootloader --location=mbr --boot-drive=sda # Partition clearing information clearpart --all --initlabel 格式化磁盘 zerombr 清空mbr磁盘 reboot 重启 # Disk partitioning information part /boot --fstype="xfs" --ondisk=sda --size=1024 part / --fstype="xfs" --ondisk=sda --size=102400 part swap --fstype="swap" --ondisk=sda --size=3072 part /data --fstype="xfs" --ondisk=sda --size=51200 %packages @core 安装内核包 %end
修改centos7的应答文件配置信息:
[root@centos7tftpboot]#vim /var/www/html/ksdir/ks7_mini.cfg url --url=http://192.168.34.101/centos/7/os/x86_64/ 指定centos7挂载光盘路径 # Use graphical install text 文本方式安装 # Run the Setup Agent on first boot firstboot --enable ignoredisk --only-use=sda # Keyboard layouts keyboard --vckeymap=us --xlayouts='us' # System language lang en_US.UTF-8 # Network information network --bootproto=dhcp --device=ens33 --ipv6=auto --activate network --hostname=centos7.localdomain # Root password rootpw --iscrypted $6$zQd4v6GjKalpnj.h$uutceFNO9vO0H2mJoBQYgpW5iNUrmKNHWulIKrSFfPJtpu4f.llg6rm9veeswxYrFXOpXV5M9MPqMBv/DGjdj. # System services firewall --disabled 关闭防火墙 selinux --disabled 关闭selinux # System timezone timezone Asia/Shanghai --isUtc --nontp user --name=liu --password=$6$LlHE.xyYU4ZoUsbV$nBtUpJjkXmMa1lQFNoNhOs0AuVaOecBttShTt3wNrUncYh.JLfnBIIfMJtOu0Cnkemt1Wr76sHCEiHrD.yKxE1 --iscrypted --gecos="liu" # X Window System configuration information #xconfig --startxonboot # System bootloader configuration bootloader --location=mbr --boot-drive=sda # Partition clearing information clearpart --all --initlabel 清空磁盘分区 zerombr 清空mbr磁盘 reboot 重启 # Disk partitioning information part /boot --fstype="xfs" --ondisk=sda --size=1024 part / --fstype="xfs" --ondisk=sda --size=102400 part swap --fstype="swap" --ondisk=sda --size=3072 part /data --fstype="xfs" --ondisk=sda --size=51200 %packages @core 安装最小的核包 %end
上面的相关配置文件已经全部做完,现在可以打开一个主机,将网卡设置为仅主机模式,开机后按esc,设置为Network boot from Intel E1000引导进入,进不了这个界面可以在开机界面设置“打开电源时进入固件”,修改boot界面进入:
按+将网卡设置第一项启动,然后按F10保存就会重启,下来新安装的主机就会通过DHCP获取相关信息安装系统:
显示要安装的界面,选择上面两个任意一个,对应的安装centos6/7的系统,选择后等待安装结束。