Linux系统的PXE

简介:

一.PXE概述
PXE(preboot execute environment)预启动执行环境,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端(客户端)基本软件设置,从而引导预先安装在服务器中的终端操作系统。PXE可以引导多种操作系统。
二.PXE启动原理
当计算机引导时,BIOS把 PXE Client 调入内存中执行,然后由 PXE Client 将放置在远端的文件通过网络下载到本地运行。
三.PXE无盘工作站的启动过程分析如下
¨ 客户端个人电脑开机后, 在 TCP/IP Bootrom 获得控制权之前先做自我测试。
¨ Bootprom 送出DHCP 要求以取得 IP。
¨ 如果服务器收到个人电脑所送出的要求, 就会送回 DHCP 回应,内容包括
客户端的 IP 地址, 预设网关, 及开机镜像文件
¨ Bootprom 由 TFTP 通讯协议从服务器下载开机镜像文件。
¨ 个人电脑通过这个开机镜像文件开机, 这个开机文件可以只是单纯的开机程式也可以是操作系统。
¨ 开机映像文件将包含 kernel loader 及压缩过的 kernel,此 kernel 将支持NTFS root系统。
¨ 远程客户端根据下载的文件启动机器。
三.安装PXE所需的软件
根据以上的原理解释,知道启动linux系统需要网卡PXE bootrom程序(写入主板bios,如果网卡已有PXE bootrom则不需要),DHCP服务器软件,PXE服务软件,TFTP服务软件,工作站上传工具,还要有
Linux操作系统软件。
我筛选的软件:网卡写入主板的bootrom程序, DHCP Server, sys(包含TFTP服务与PXE服务等),下载软件(http),syslinux(syslinux是一个功能强大的引导加载程序,它的目的是简化首次安装Linux的时间,并建立修护或其它特殊用途的启动盘。它的安装很简单,一旦安装syslinux好之后,sysLinux启动盘就可以引导各种基于DOS的工具。
四.安装PXE所需要的工具
[root@foundation60 ~]# cd /var/www/html/rhel7.0 #切换到镜像文件中
[root@foundation60 rhel7.0]# ls
addons images Packages RPM-GPG-KEY-redhat-release
EFI isolinux release-notes TRANS.TBL
EULA LiveOS repodata
GPL media.repo RPM-GPG-KEY-redhat-beta
[root@foundation60 rhel7.0]# cd isolinux/
[root@foundation60 isolinux]# ls
boot.cat grub.conf isolinux.bin memtest TRANS.TBL vesamenu.c32
boot.msg initrd.img isolinux.cfg splash.png upgrade.img vmlinuz
[root@foundation60 isolinux]# vim isolinux.cfg #此文件中所写内容就是加载内核启>动初始化程序进入预安装环境
label linux
menu label ^Install Red Hat Enterprise Linux 7.0 #预安装环境的标题
kernel vmlinuz #内核文件
append initrd=initrd.img inst.stage2=hd:LABEL=RHEL-7.0\x20Server.x86_64 quiet #镜像

label check
menu label Test this ^media & install Red Hat Enterprise Linux 7.0 #预安装环>境的标题
menu default
kernel vmlinuz
append initrd=initrd.img inst.stage2=hd:LABEL=RHEL-7.0\x20Server.x86_64 rd.live.check quiet #镜像,quiet:安装时不显示过程
[root@server ~]# yum whatprovides */pxelinux.0
Filename : /usr/share/syslinux/pxelinux.0
[root@server ~]# rpm -ql syslinux
/usr/share/syslinux/pxelinux.0
/usr/share/doc/syslinux-4.05
[root@server syslinux-4.05]# less README #此文件中写了看如下文件
See the files in the doc directory for documentation about SYSLINUX:
syslinux.txt - Usage instructions; manual.
distrib.txt - For creators of Linux distributions.
pxelinux.txt - Documentation specific to PXELINUX.
isolinux.txt - Documentation specific to ISOLINUX.
extlinux.txt - Documentation specific to EXTLINUX.
menu.txt - About the menu systems.
usbkey.txt - About using SYSLINUX on USB keys.
comboot.txt - About the extension API.
memdisk.txt - Documentation about MEMDISK.
[root@server syslinux-4.05]# less pxelinux.txt #看此文件
n the TFTP server, create the directory "/tftpboot", and copy the
following files to it: #新建目录/tftpboot ,并且复制pxelinux.0 文件到/tftpboot>中

    pxelinux.0              - from the Syslinux distribution

    any kernel or initrd images you want to boot  #启动时加载内核启动初始化>程序pxelinux.0这个文件的内容

create the directory "/tftpboot/pxelinux.cfg". #创建/tftpboot/pxelinux.cfg目录
As an example, if the boot file name is /mybootdir/pxelinux.0, the
UUID is b8945908-d6a6-41a9-611d-74a6ab80b83d, the Ethernet MAC
address is 88:99:AA:BB:CC:DD and the IP address 192.0.2.91, it will
try:
/mybootdir/pxelinux.cfg/default #/mybootdir/pxelinux.0读取的是/mybootdir/pxelinux.cfg/default中的内容
++++ SETTING UP THE TFTP SERVER ++++

PXELINUX currently requires that the boot server has a TFTP server
which supports the "tsize" TFTP option (RFC 1784/RFC 2349). The
"tftp-hpa" TFTP server, which support options, is available at:

    http://www.kernel.org/pub/software/network/tftp/
    ftp://www.kernel.org/pub/software/network/tftp/

and on any kernel.org mirror (see http://www.kernel.org/mirrors/). #镜像安装>源指定为网络安装源

Another TFTP server which supports this is atftp by Jean-Pierre
Lefebvre:

    ftp://ftp.mamalinux.com/pub/atftp/

那么问题来了,系统怎么回去读取/tftpboot/pxelinux.0这个文件呢?
网络安装需要获取ip,当获取ip时让它读取此文件即可,因此需要动态网络dhcp,在此文件中写入该文件,获取ip后读取该文件,该文件内容中又写了让它加载内核文件,启动初始化程序,进入预安装环境,此时镜像文件源可以是http协议的也可以是vsftp协议的,将此镜像
源地址写入/tftpboot/pxelinux.cfg/default中,此时并不是全自动的需要手动选择分区等等内容,使用自动化安装时,可以写一个回答问题的脚本,也将他写入/tftpboot/pxelinux.cfg/default中,会自动读取,实现安装全自动。
五.安装PXE
1.(1)安装所需软件
[root@server ~]# yum install dhcp tftp-server httpd syslinux -y #需要安装这些软件
Linux系统的PXE
(2)打开端口
[root@server ~]# vim /etc/xinetd.d/tftp #守护进程打开
disable no
Linux系统的PXE
Linux系统的PXE
[root@server ~]# systemctl start xinetd.service
Linux系统的PXE
[root@server ~]# netstat -antlupe | grep 69 #查看xinetd端口是否打开
udp 0 0 0.0.0.0:69 0.0.0.0:* 0 94269 936/xinetd #打开

0 94269 936/xinetd
Linux系统的PXE
(3)安装所需的工具配置
[root@server ~]# cd /var/lib/tftpboot/ #切换到此目录
[root@server tftpboot]# cp /usr/share/syslinux/pxelinux.0 . #在pexlinux.text文件中已指出,建立文件/tftpboot,并把/usr/share/syslinux/pxelinux.0放到此目录中
Linux系统的PXE
[root@server tftpboot]# yum install lftp
[root@server tftpboot]# lftp 172.25.254.60
lftp 172.25.254.60:/pub> cd isolinux/ #安装需要的文件都在此目录
lftp 172.25.254.60:/pub/isolinux> mget *
74555827 bytes transferred in 1 second (57.48M/s)
Total 12 files transferred
lftp 172.25.254.60:/pub/isolinux> quit
Linux系统的PXE
Linux系统的PXE
[root@server tftpboot]# ls
boot.cat initrd.img memtest splash.png vesamenu.c32
boot.msg isolinux.bin pxelinux.0 TRANS.TBL vmlinuz
grub.conf isolinux.cfg pxelinux.cfg upgrade.img
Linux系统的PXE

[root@server tftpboot]# cp isolinux.cfg pxelinux.cfg/default
[root@server ~]# systemctl start httpd
Linux系统的PXE
[root@server ~]# systemctl stop firewalld.service
Linux系统的PXE
(4)配置dhcp
[root@server ~]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
cp: overwrite ‘/etc/dhcp/dhcpd.conf’? y
Linux系统的PXE
[root@server ~]# vim /etc/dhcp/dhcpd.conf #配置dhcp
1 option domain-name "example.com"; #域名
2 option domain-name-servers 172.25.254.125; #从哪台主机得到ip
3 default-lease-time 600;
4 max-lease-time 7200;
5 log-facility local7;
6 subnet 172.25.254.0 netmask 255.255.255.0 { #网段,子网掩码
7 range 172.25.254.1 172.25.254.254; #获取ip网段
8 option routers 172.25.254.125; #网关
9 next-server 172.25.254.125; #pxelinux.0这个文件在哪台主机上就时哪台主机ip
10 filename "pxelinux.0"; #读取此文件
11 }
Linux系统的PXE
Linux系统的PXE

[root@server ~]# systemctl restart dhcpd #重启
Linux系统的PXE 
(5)启动预安装环境
安装系统:模拟安装虚拟机
从网卡启动
Linux系统的PXE
获取dhcp
Linux系统的PXE
读取pxelinux.0里面所写的内容
Linux系统的PXE
2.修改预安装环境的标题为HELLO

[root@server tftpboot]# vim pxelinux.cfg/default #预安装时读取文件
11 menu title HELLO #修改预安装环境的标题为HELLO
Linux系统的PXE
Linux系统的PXE
获取dhcp
Linux系统的PXE
预安装环境的标题改为HELLO
Linux系统的PXE

3.启动http服务得到镜像安装系统
[root@server tftpboot]# vim pxelinux.cfg/default 
64 append initrd=initrd.img repo=http://172.25.254.60/rhel7.0 #镜像文件所在位置
Linux系统的PXE
Linux系统的PXE
安装过程:
(1)获取dhcp
Linux系统的PXE
(2)安装系统,手动调到第一个标题,默认是第二个标题
Linux系统的PXE
(3)安装过程显示
Linux系统的PXE
(4)回答问题页面
Linux系统的PXE
4.修改默认启动: 把menu default加到第一个标题下面,就从第一个标题启动 
[root@server tftpboot]# vim pxelinux.cfg/default 
61 label linux
62 menu label ^Install Red Hat Enterprise Linux 7.0
63 menu default #预安装环境中默认从第一个标题启动,原来默认从第二个标题启动
64 kernel vmlinuz
65 append initrd=initrd.img repo=http://172.25.254.60/rhel7.0
66 label check
67 menu label Test this ^media & install Red Hat Enterprise Linux 7.0
68 kernel vmlinuz
69 append initrd=initrd.img inst.stage2=hd:LABEL=RHEL-7.0\x20Server.x86_64 rd.live.ch eck quiet
Linux系统的PXE
Linux系统的PXE

5.修改预安装环境的等待时间
[root@server tftpboot]# vim pxelinux.cfg/default 
2 timeout 200 #默认安装时等待60s,改为20s
[root@server tftpboot]# ls
boot.cat grub.conf isolinux.bin memtest pxelinux.cfg TRANS.TBL vesamenu.c32
boot.msg initrd.img isolinux.cfg pxelinux.0 splash.png upgrade.img vmlinuz
Linux系统的PXE
Linux系统的PXE
(1)获取dhcp
Linux系统的PXE
(2)启动预安装环境,时间变为20s
Linux系统的PXE
6.修改预安装环境的背景图片
ls
Linux系统的PXE
可以知道预安装环境的图片是
splash.png
[root@server tftpboot]# file splash.png #预安装环境使用的图片,此图片可作更改
splash.png: PNG image data, 640 x 480, 1-bit colormap, non-interlaced
Linux系统的PXE
[root@server tftpboot]# ls #得到一张图片westos.png
boot.cat initrd.img memtest splash.png vesamenu.c32
boot.msg isolinux.bin pxelinux.0 TRANS.TBL vmlinuz
grub.conf isolinux.cfg pxelinux.cfg upgrade.img westos.png
Linux系统的PXE
[root@server tftpboot]# file westos.png 
westos.png: PNG image data, 558 x 646, 8-bit/color RGBA, non-interlaced #此图片像素与要求图片像素不符,需要进行裁剪,安装裁剪工具
Linux系统的PXE
[root@server tftpboot]# yum whatprovides */convert #查看软件
mageMagick-6.7.8.9-10.el7.x86_64 : An X application for displaying and manipulating
: images
Repo : rhel_dvd
Matched from:
Filename : /usr/bin/convert
Linux系统的PXE
安装 :yum install mageMagick-6.7.8.9-10.el7.x86_64
[root@server tftpboot]# convert -resize 640x480! westos.png haha.png #裁剪成符合要求的图片大小,!表示强制裁剪成要求的大小
Linux系统的PXE
[root@server tftpboot]# vim pxelinux.cfg/default 
10 menu background haha.png #更改安装环境图片为haha.png
Linux系统的PXE
Linux系统的PXE
(1)获取dhcp
Linux系统的PXE
(2)启动预安装环境:图片更改
Linux系统的PXE
7.kickstart自动安装脚本

kickstart
使用 kickstart, 系统管理员可以创建一个包含安装期间所有常见问题的答案的文件,以自动安装 Red Hat Enterprise Linux Kickstart

手动编写kickstart脚本难度较大,采用系统自带软件包工具来制作

软件包system-config-kickstart
(1)安装软件
[root@server ~]# yum install system-config-kickstart #安装
Linux系统的PXE
(2)生成ks.cfg文件
[root@server ~]# system-config-kickstart #常见问题答案回答,问题的答案生成ks.cfg,保存在/var/www/html/目录中,安装时,使用http可以访问到
Linux系统的PXE
(1)基础设定
语言,时区,密码,是否安装图形
Linux系统的PXE
(2)安装方式
安装源位置
http://172.25.254.60/rhel7.0
Linux系统的PXE
(3)启动方式选项
Linux系统的PXE
(4)自定义分区
Linux系统的PXE
/boot分区:200M
Linux系统的PXE
swap分区:500M
Linux系统的PXE
*/分区:剩下的所有空间
Linux系统的PXE
(5)安装是的网络配置
eth0,dhcp
Linux系统的PXE
(6)火墙状态:选择关闭,selinux关闭
Linux系统的PXE
(7)保存
点击左上角的file选择save,在选择保存的位置,我将它保存在/var/www/html便于http访问
Linux系统的PXE
Linux系统的PXE

8.编辑生成的ks.cfg文件
安装一个新分区
[root@server ~]# cd /var/www/html/ 
[root@server html]# ls
ks.cfg
[root@server html]# vim ks.cfg #可以添加内容
Linux系统的PXE
1 #platform=x86, AMD64, or Intel EM64T
2 #version=DEVEL
3 # Install OS instead of upgrade
4 install #指定安装系统,还有升级系统选项
5 # Keyboard layouts
6 keyboard 'us' #keyboard指定键盘内型,keyboard us:美式键盘
7 # Halt after installation
8 halt #halt/reboot:安装完成后关机还是reboot,默认halt
9 # Root password
10 rootpw --iscrypted $1$bFQSWMpe$ZUyHLv0JV.IoM0HLarKfX1 #rootpw:root用户密码使用默认sha-512
11 #user:在系统中生成一个新用户
12 # System timezone
13 timezone Asia/Shanghai #时区
14 # Use network installation
15 url --url="http://172.25.254.60/rhel7.0" #安装源
16 # System language
17 lang en_US #lang指定安装过程使用的语言
18 # Firewall configuration
19 firewall --disabled #禁用防火墙
20 # Network information
21 network --bootproto=dhcp --device=eth0
22 # System authorization information
23 auth --useshadow --passalgo=sha512 #auth:验证选项,--useshadow:启用shadow文件来验证

System authorization information

24 # Use graphical install
25 graphical #在图形模式下根据kickstart执行安装,默认该选项.text:文本模式下根据kickstart执行
安装
26 firstboot --disable #--disable:安装后第一次启动默认会给出很多需要手动配置的界面,禁用它
27 # SELinux configuration
28 selinux --disabled
29 skipx:不安装图形工具
30 # System bootloader configuration
31 bootloader --location=mbr #bootloader:指定如何安装引导程序,要求必须已选择分区,已选择引
导程序,已选择软件包,如果没选择将会停止而不会询问。--location=mbr:指定引导程序的位置,默
认为mbr
32 # Clear the Master Boot Record
33 zerombr #清除磁盘的mbr
34 # Partition clearing information
35 clearpart --all --initlabel #在安装系统前清除分区,--all:清除所有分区,--linux:清除linux分
区,--none:不清除分区,--initlabel:创建标签,对于没有mbr和gpt的新硬盘,该选项是必须的,--dir vers=sdb:清除指定的分区
36 # Disk partitioning information
37 part /boot --fstype="xfs" --size=200
38 part swap --fstype="swap" --size=500
39 part / --fstype="xfs" --grow --size=1
#part:创建分区,--asprimary:强制指定为主分区,--grow:使用所有可用空间,即为其分配所有剩余> 空间。对于根分区至少需要3G空间(--grow,也要指定--size)

40 %packages #该段内容
41 @base
42 lftp
43 %end #结束
44 
45 %post #安装结束做的事情
46 cat >> /etc/yum.repos.d/yum.repo <<EOF #配置yum源
47 [rhel7.0]
48 name=rhel7.0
49 baseurl=http://172.25.254.60/rhel7.0
50 gpgcheck=0
51 EOF
52 rm -fr /etc/sysconfig/network-scripts/ifcfg-eth0
53 cat >>/etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF #配置动态网络
54 DEVICE=eth0
55 ONBOOT=yes
56 BOOTPROTO=none
57 IPADDR=172.25.254.225
58 PREFIX=24
59 EOF
60 systemctl restart network
61 
62 yum install httpd -y #安装http服务
63 systemctl start httpd #重启
64 systemctl enable httpd #开机自启
65 systemctl stop firewalld #关闭火墙
66 echo 172.25.254.225 > /var/www/html/index.html
67 %end
Linux系统的PXE
Linux系统的PXE
[root@server html]# ksvalidator ks.cfg #检测该脚本是否有语法错误
是否能被访问到
Linux系统的PXE
无语法错误后
http是否能访问到
Linux系统的PXE
镜像文件是否能访问到
Linux系统的PXE
9.回答系统提出的问题,答案脚本写入文件
[root@server html]# cd /var/lib/tftpboot/
[root@server tftpboot]# vim pxelinux.cfg/default 
Linux系统的PXE
65 append initrd=initrd.img repo=http://172.25.254.60/rhel7.0 ks=http://172.25.254.125/ks. cfg
Linux系统的PXE
安装系统:
(1)获取dhcp
Linux系统的PXE
(2)进入预安装环境:读取内核文件启动初始化程序
Linux系统的PXE
(3)读取镜像,进入安装环境
Linux系统的PXE
系统就安装完成啦














本文转自Uniqueh51CTO博客,原文链接:http://blog.51cto.com/13363488/2050165 ,如需转载请自行联系原作者



相关文章
|
2天前
|
Java Linux Maven
Linux系统Docker部署Nexus Maven并实现远程访问本地管理界面
Linux系统Docker部署Nexus Maven并实现远程访问本地管理界面
|
3天前
|
前端开发 JavaScript Linux
【好玩的开源项目】在Linux系统下部署 star-battle太空飞船射击小游戏
【2月更文挑战第10天】在Linux系统下部署 star-battle太空飞船射击小游戏
16 3
|
4天前
|
缓存 监控 Linux
|
6天前
|
自然语言处理 数据挖掘 Linux
ModelScope问题之拷贝到内网linux系统运行代码报错如何解决
本合集将提供ModelScope安装步骤、配置要求和环境准备,以便用户顺利启动ModelScope进行模型开发和测试。
32 0
|
7天前
|
Oracle Linux Shell
Linux系统介绍
Linux系统介绍
15 2
|
12天前
|
运维 Unix Linux
Linux系统 PHP安装expect扩展详解
Linux系统 PHP安装expect扩展详解
21 5
|
13天前
|
Java Linux Shell
linux自动部署jar包,注册系统服务(基于Centos7)
linux自动部署jar包,注册系统服务(基于Centos7)
28 0
|
13天前
|
缓存 运维 Linux
Linux系统调优详解(十二)——IO调优之磁盘测速
Linux系统调优详解(十二)——IO调优之磁盘测速
30 1
|
14天前
|
Java Linux
手把手教你Linux系统下的Java环境配置,简单到不行!
手把手教你Linux系统下的Java环境配置,简单到不行!
36 1
|
17天前
|
缓存 Linux 网络安全
百度搜索:蓝易云【Linux系统服务器启动SSH服务时出现“error while loading shared libraries”错误该如何解决】
以上步骤应该能够解决“error while loading shared libraries”错误,使SSH服务能够正常启动并运行。
23 3

相关产品

  • 云迁移中心