[PXE] Linux(centos6)中PXE 服务器搭建,PXE安装、启动及PXE理论详解

本篇blog主要讲述了[PXE] linux(centos)PXE无盘服务器搭建,安装,启动及pxe协议详解 , Kickstart (PXE+DHCP+TFTP+HTTP)。

PXE环境概述


作为中小公司的运维,经常会遇到一些机械式的重复工作。如何进行批量一次大批量部署服务器安装?方法: Kickstart (PXE+DHCP+TFTP+HTTP)  或  Cobbler

  • 批量装机软件介绍

Redhat系通主要有两种方式:Kickstart和Cobbler。

Kickstart是一种无人值守的安装方式。它的工作原理是在安装过程中记录人工干预填写的各种参数,并生成一个名为ks.cfg的文件。如果在自动安装过程中出现要填写参数的情况,安装程序首先会去查找ks.cfg文件,如果找到合适的参数,就采用所找到的参数;如果没有找到合适的参数,便会弹出对话框让安装者手工填写。所以,如果ks.cfg文件涵盖了安装过程中所有需要填写的参数,那么安装者完全可以只告诉安装程序从何处下载ks.cfg文件。等安装完毕,安装程序会根据ks.cfg中的设置重启/关闭系统,并结束安装。

Cobbler集中和简化了通过网络安装操作系统需要使用到的DHCP、TFTP和DNS服务的配置。Cobbler不仅有一个命令行界面,还提供了一个Web界面,大大降低了使用者的入门水平。Cobbler内置了一个轻量级配置管理系统,但它也支持和其它配置管理系统集成。

  • 什么是PXE

PXE,全名Pre-boot Execution Environment,预启动执行环境;简单的说,Cobbler是对kickstart的封装,简化安装步骤、使用流程,并降低使用者的门槛。而kickstart实现方式依赖于PXE环境。通过网络接口启动计算机,不依赖本地存储设备(如硬盘)或本地已安装的操作系统;由Intel和Systemsoft公司于1999年9月20日公布的技术;运行在Client/Server的工作模式;   PXE客户端会调用网际协议(IP)、用户数据报协议(UDP)、动态主机设定协议(DHCP)、小型文件传输协议(TFTP)等网络协议;PXE客户端(client)这个术语是指机器在PXE启动过程中的角色。一个PXE客户端可以是一台服务器、笔记本电脑或者其他装有PXE启动代码的机器(我们电脑的网卡)。

  • PXE工作流程图

PXE
client是需要安装Linux的计算机,TFTP Server、DHCP Server及HTTPD Server部署在在PXE
Server端。Bootstrap文件、配置文件以及Linux根文件系统都放置在Linux
Server上TFTP服务器的根目录下,而ks.cfg 及 系统内核部署在HTTPD server目录。

    

  1. PXE Client向DHCP发送请求 PXE Client从自己的PXE网卡启动,通过PXE BootROM(自启动芯片)会以UDP(简单用户数据报协议)发送一个广播请求,向本网络中的DHCP服务器索取IP。

  2. DHCP服务器提供信息 DHCP服务器收到客户端的请求,验证是否来至合法的PXE Client的请求,验证通过它将给客户端一个“提供”响应,这个“提供”响应中包含了为客户端分配的IP地址、pxelinux启动程序(TFTP)位置,以及配置文件所在位置。

  3. PXE客户端请求下载启动文件 客户端收到服务器的“回应”后,会回应一个帧,以请求传送启动所需文件。这些启动文件包括:pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img等文件。

  4. Boot
    Server响应客户端请求并传送文件 当服务器收到客户端的请求后,他们之间之后将有更多的信息在客户端与服务器之间作应答,
    用以决定启动参数。BootROM由TFTP通讯协议从Boot
    Server下载启动安装程序所必须的文件(pxelinux.0、pxelinux.cfg/default)。default文件下载完成后,会根据该文件中定义的引导顺序,启动Linux安装程序的引导内核。

  5. 请求下载自动应答文件

    客户端通过pxelinux.cfg/default文件成功的引导Linux安装内核后,安装程序首先必须确定你通过什么安装介质来安装linux,如果是通过网络安装(NFS,
    FTP,
    HTTP),则会在这个时候初始化网络,并定位安装源位置。接着会读取default文件中指定的自动应答文件ks.cfg所在位置,根据该位置请求下载该文件。

  6. 客户端安装操作系统 将ks.cfg文件下载回来后,通过该文件找到OS Server,并按照该文件的配置请求下载安装过程需要的软件包。 OS Server和客户端建立连接后,将开始传输软件包,客户端将开始安装操作系统。安装完成后,将提示重新引导计算机。

  • PXE必要条件

1.pxe client必须支持pxe用户端功能,并且开机时选择网络启动,这样系统才能以网络的方式进入pxe启动程序

2.pxe服务器必须至少提供DHCP及TFTP的服务才行,且其中

DHCP服务器必须能够除未pxe client分配ip地址外,还需告知tftp所在的位置(即pxelinux.0的文件位置)

TFTP服务器则为pxe client 提供bootloader 及 kernel 等重要文件下载服务

3.使用NFS/HTTP/FTP之一的服务器提供pxe client所需程序及软件来源等通讯协议

  • PXE工作流程图:

PXE环境安装DHCP


动态主机设置协议(Dynamic
Host Configuration
Protocol,DHCP)是一种使网络管理员能够集中管理和自动分配IP网络地址的通信协议,使用UDP协议工作,DHCP使用统一端口作为BOOTP:服务器端使用67/udp,客户端使用68/udp。主要有两个用途:用于内部网络或网络服务供应商自动分配IP地址给用户;用于内部网络管理员作为对所有电脑作中央管理的手段。

DHCP协议的工作流程:

客户端在局域网广播DHCPDISCOVER报文,请求获得ip地址、网关、dns地址
等信息;DHCP服务器收到DHCPDISCOVER报文后 ,发送DHCPOFFER 报文进行响应
;客户端收到DHCPOFFER报文后,发送DHCPREQUEST 报文进行请求 ;最终DHCP 服务器发送 DHCPACK报文进行确认 。

DHCP配置文件dhcp.conf 分为4段:

1、DHCP属性段: log-facility  定义日志等级

2、全局属性段: 使用option 关键字定义

3、子网分配段: 使用subnet  来定义

4、主机配置段: 使用host来定义

  • 安装DHCP:

[root@PXE ~]# yum install dhcp   # 安装dhcp server

[root@PXE ~]# rpm -ql dhcp
/etc/dhcp
/etc/dhcp/dhcpd.conf # dhcpd配置文件
/etc/rc.d/init.d/dhcpd # dhcpd启动文件
/usr/sbin/dhcpd # 启动脚本配置文件
[root@PXE pxelinux.cfg]# vi /etc/dhcp/dhcpd.conf # 调整配置文件
# dhcpd.conf
#
option domain-name "itwish.cn";
option domain-name-servers 192.168.4.150 ; default-lease-time 600;
max-lease-time 7200; log-facility local7; subnet 192.168.4.0 netmask 255.255.255.0 { # 定义子网
range 192.168.4.10 192.168.4.100;
option routers 192.168.4.1;
next-server 192.168.4.150; # 注:添加 tftp服务器地址
filename="pxelinux.0"; #注:告诉TFTP目录下的bootstarp文件
} #注:配置文件中以";" 号结尾 ,且需添加next-server 和filename 项
  • 启动dhcp并验证dhcpd进程是否处于监听状态:

[root@PXE ~]# chkconfig --add dhcpd

[root@PXE ~]# chkconfig dhcpd on

[root@PXE ~]# service dhcpd start
Starting dhcpd: [ OK ] [root@PXE ~]# ps aux | grep dhcpd # 验证dhcpd 启动
dhcpd 14087 0.0 0.1 48324 3572 ? Ss 03:13 0:00 /usr/sbin/dhcpd -user dhcpd -group dhcpd
root 14108 0.0 0.0 103272 840 pts/0 S+ 03:14 0:00 grep dhcpd [root@PXE ~]# ss -tunl | grep 67
udp UNCONN 0 0 *:67 *:*

PXE 环境安装 TFTP


简单文件传输协议也称小型文件传输协议(Trivial File Transfer Protocol, TFTP),工作在UDP/69 端口,是一种于1981年在RFC 783中定义的简化的文件传输协议(FTP)。

瞬时(非独立)守护进程:他们无需定义在运行级别下,只需要一次性的定义xinetd的运行级别

xinetd——为那些极少接受用户请求的服务,专门提供监听功能,如 监听tftpd进程

独立(standlone)守护进程 :能自我管理,无须xinet 提供监听服务的进程

  • 安装TFTP:

[root@PXE ~]# yum install xinetd tftp-server

[root@PXE ~]# rpm -ql tftp-server
/etc/xinetd.d/tftp # 配置文件路径
/var/lib/tftpboot # 默认tftp存储目录 [root@PXE ~]# vi /etc/xinetd.d/tftp
# default: off
service tftp
{
disable = no # no 表明tftp处于启用状态 ,yes 表示tftp处于禁用状态
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot # 默认tftp存储目录
per_source = 11
cps = 100 2
flags = IPv4
}
[root@PXE ~]# chkconfig xinetd on [root@PXE ~]# chkconfig tftp on [root@PXE ~]# service xinetd start
Starting xinetd: [root@PXE ~]# ss -tunl | grep 69
udp UNCONN 0 0 *:69 *:*
  • 使用 syslinux 提供的bootstart :

[root@PXE ~]# yum install syslinux

[root@PXE ~]# rpm -ql syslinux
/usr/share/syslinux # pxelinux.0 文件存储目录 [root@PXE ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
# 复制pxelinux.0到 /var/lib/tftpboot 目录 [root@PXE boot]# mount /dev/cdrom /media/ # 挂载光盘
mount: block device /dev/sr0 is write-protected, mounting read-only
  • 配置pxelinux.cfg 文件

[root@PXE  ~]# mkdir /var/lib/tftpboot/pxelinux.cfg    # 创建pxelinux.cfg 文件夹
[root@PXE ~]# cp isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
# 把isolinux.cfg引导文件拷贝到tftpd存储目录下的pxelinux.cfg文件中,并命名为default [root@PXE ~]# vi /var/lib/tftpboot/pxelinux.cfg/default # 修改linux内核引导文件
default vesamenu.c32 # 默认启动界面,该文件需要拷贝到tftp存储目录中。
#prompt 1
timeout 600 # 倒计时 600就是60 秒,改数字为秒数的10倍 display boot.msg # 将额外信息写入到boot.msg文件中,该文件需要拷贝到tftp存储目录中。 menu background splash.jpg # 菜单背景图,该文件需要拷贝到tftp存储目录中。
menu title Welcome to CentOS 6.6! # 菜单主标题 label linux
menu label ^Install or upgrade an PXE system #菜单項目
menu default # 预设项目
kernel vmlinuz # 内核 vmlinuz,该文件需要拷贝到tftp存储目录中。
append initrd=initrd.img ks=http://192.168.4.150/ks.cfg
# 核心参数,指定initrd 核心文件,该文件需要拷贝到tftp存储目录中。另指定ks文件目录,这儿使用的http协议
  • 把内核及根文件拷贝到tftpd存储目录 :参照上菜单配置信息,包括 vesamenu.c32,boot.msg,splash.jpg,vmlinuz,initrd.img 文件做拷贝

[root@PXE ~]# cp /media/images/pxeboot/{initrd.img,vmlinuz} /var/lib/tftpboot/   

[root@PXE ~]# cp /media/isolinux/{boot.msg,vesamenu.c32,splash.jpg} /var/lib/tftpboot/

 

linux PXE环境HTTP部署


创建kickstart文件方式:

1、复制模板 /root/anaconda-ks.cfg ,而后使用vim编辑配置

2、使用system-config-kickstart 来生成,建议也使用/root/anaconda-ks.cfg 作为模板来进行

# ksvalidator   查看ks文件语法是否正确

kickstat文件的组成部分 :

1、命令段: 用于配置系统 ,如:install ,firewall, part,lv 等

2、软件包段%packages;指定要安装的程序包组(@组包名)及程序包(程序包名),每行一个 ;在程序包之前加 “-”号,表示不希望安装

3、%pre %post脚本段:安装过程开始之前、后执行的安装预备式脚本

  • httpd安装:

[root@PXE ~]# yum install httpd

[root@PXE ~]# rpm -ql httpd
/etc/httpd
/etc/httpd/conf/httpd.conf # httpd 配置文件
/var/www/html # httpd 默认存储目录 [root@PXE ~]# chkconfig httpd on [root@PXE ~]# service httpd start
Starting httpd: [root@PXE ~]# ss -tunl |grep 80
tcp LISTEN 0 128 :::80 :::* [root@PXE ~]# ps aux | grep httpd
root 1877 0.0 3.3 479948 20284 ? Ss 08:20 0:01 /usr/sbin/httpd
apache 2184 0.0 1.6 480084 9908 ? S 09:07 0:00 /usr/sbin/httpd
apache 2185 0.0 1.6 480084 9884 ? S 09:07 0:00 /usr/sbin/httpd
apache 2188 0.0 1.6 480084 9884 ? S 09:07 0:00 /usr/sbin/httpd
apache 2189 0.0 1.6 480084 9884 ? S 09:07 0:00 /usr/sbin/httpd
apache 2190 0.0 1.6 480084 9884 ? S 09:07 0:00 /usr/sbin/httpd
apache 2191 0.0 1.6 480084 9884 ? S 09:07 0:00 /usr/sbin/httpd
apache 2192 0.0 1.6 480084 9884 ? S 09:07 0:00 /usr/sbin/httpd
apache 2193 0.0 1.6 480084 9884 ? S 09:07 0:00 /usr/sbin/httpd
root 3116 0.0 0.1 103324 844 pts/0 S+ 19:48 0:00 grep httpd [root@PXE ~]# cp /root/anaconda-ks.cfg /var/www/html/ks.cfg # 拷贝模板到/var/www/html 目录,并重命名为ks.cfg [root@PXE ~]# chmod o+r /var/www/html/ks.cfg # 分配权限,为pxe client引导安装使用 [root@PXE isolinux]# cp /media/* /var/www/html/centos/os/ # 拷贝安装系统 [root@PXE os]# grub-crypt # 密码加密,使用grub-crypt 默认512位加密方式
Password:
Retype password:
$6$DnceMH60Kiu8TaME$ySd/QOpPtEcLnnoW36bDjb59xr1eJHGUwTTV/4MHoojT.RoXXdsLHMWJXcLCETQNRF2xITSqKHAAUNZq6df0i/
  • 以/root/anaconda.cfg 为模板,配置ks.cfg文件 ,配置repo url 和 ks.cfg 。

repo引用格式如下图

针对集群的计算节点设置的,比如设置用户信息、关闭防火墙等,请根据自己需要定制,kickstart文件说明参见:https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/6/html/installation_guide/s1-kickstart2-options

[root@PXE ~]# vi /var/www/html/ks.cfg     # 调整配置文件
# Kickstart file automatically generated by anaconda. #version=DEVEL
install # 命令段 ,安装
url --url=http://192.168.4.150/centos/os/ # 指定网络url安装目录
lang en_US.UTF-8 # 默认字体
keyboard us # 键盘类型
network --onboot yes --device eth0 --bootproto dhcp --noipv6
# 指定开机自启,网络接口eth0 ,dhcp获取网络地址,ipv6 禁用 rootpw --iscrypted $6$ZOGP2tA0PI/6SI/X$MlC5bJyXfP9TBN5/0vwoc6dqAqIijOQthEbAZUnIXft85Tj9n4sKWB2PfxrsVfkZ2ibqX63apu8ElmdEvBo9o/
# root 加密密码,使用grub-crypt 生成的字符串替代 reboot # 配置完毕后,重启内核
firewall --disabled # 防火墙禁用
authconfig --enableshadow --passalgo=sha512 # 登录身份使用 sha1 的 512bits 加密算法
selinux --disabled # selinux 功能禁用
timezone Asia/Shanghai # 定义上海时区
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
# 定义bootloader,grub安装mbr ,安装在sda磁盘 # 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 # 清除磁盘分区表
text # 纯文本格式安装显示
zerombr # 对磁盘进行初始化 part /boot --fstype=ext4 --asprimary --size=2000 # 分区信息 ,定义boot分区 ,格式为ext4 ,大小为2G
part swap --size=4096 # 分区信息 ,定义swap分区 ,大小为4G
part pv.008003 --size=80000 # 分区信息 ,定义lv分区 pv.008003,大小为80G volgroup vg0 --pesize=8192 pv.008003 # 分区信息 ,在lv分区pv.008003定义vg0卷组 ,pe大小为8M
logvol / --fstype=ext4 --name=root --vgname=vg0 --size=15000
logvol /usr --fstype=ext4 --name=/usr --vgname=vg0 --size=30000
logvol /var --fstype=ext4 --name=/var --vgname=vg0 --size=20000
logvol /home --fstype=ext4 --name=/home --vgname=vg0 --size=12000 repo --name="CentOS-6.6" --baseurl=http://192.168.4.150/centos/os/ --cost=100
# 定义yum仓库 ,类别为bashurl ,名称为CentOS-6.6 %packages # 包组段,安装包组及程序包
@core
@server-policy
@workstation-policy
%end [root@PXE ~]# yum -y install pykickstart #安装ksvalidator 软件 [root@PXE ~]# ksvalidator /var/www/html/ks.cfg # ksvalidator验证ks.cfg语法是否正确
  • ks.cfg及repo验证:

注:ks.cfg若不能正常打开,确认是否有读权限

注: 若不能显示以上连接方式,确认httpd配置文件中,是否开启相关选项。

至此,PXE服务器环境部署完成,出现问题时,一般需要查看系统日志,如:/var/log/messages, 通过日志报错信息进行解决 。

Centos PXE环境测试,安装,启动


部署环境:vmware 虚拟机

PXE服务器:  PXE, ip :192.168.4.150

PXE client :    vm

实验:

一、配置PXE client 客户端 ,网络需与PXE服务器处于同一网段 192.168.4.150 /24

二、选择开机启动顺序,选择"Network boot from Intel E1000"

三、pxe client获取dhcp地址后 ,获取pxelinux.cfg中配置文件

四、加载内核和根文件系统

五、安装networkmanager ,创建磁盘分区

六、检查包依赖关系,并安装程序。

七、完成安装,重启 ,进入登录界面

至此,pxe 服务器端 部署完成 ,并成功自动化安装pxeclient 端 。

[PXE] Linux(centos6)中PXE 服务器搭建,PXE安装、启动及PXE理论详解的更多相关文章

  1. 人工智能之深度学习-初始环境搭建(安装Anaconda3和TensorFlow2步骤详解)

    前言: 本篇文章主要讲解的是在学习人工智能之深度学习时所学到的知识和需要的环境配置(安装Anaconda3和TensorFlow2步骤详解),以及个人的心得体会,汇集成本篇文章,作为自己深度学习的总结 ...

  2. Linux内核中的jiffies及其作用介绍及jiffies等相关函数详解

    在LINUX的时钟中断中涉及至二个全局变量一个是xtime,它是timeval数据结构变量,另一个则是jiffies,首先看timeval结构struct timeval{time_t tv_sec; ...

  3. Linux Centos6.5 SVN服务器搭建 以及客户端安装

    转载:http://www.cnblogs.com/mymelon/p/5483215.html /******开始*********/ 系统环境:Centos 6.5 第一步:通过yum命令安装sv ...

  4. ​Linux下的SVN服务器搭建

    ​Linux下的SVN服务器搭建 鉴于在搭建时,参考网上很多资料,网上资料在有用的同时,也坑了很多人 本文的目的,也就是想让后继之人在搭建svn服务器时不再犯错,不再被网上漫天的坑爹作品所坑害,故此总 ...

  5. Linux下的SVN服务器搭建(转)

    Linux下的SVN服务器搭建   鉴于在搭建时,参考网上很多资料,网上资料在有用的同时,也坑了很多人 本文的目的,也就是想让后继之人在搭建svn服务器时不再犯错,不再被网上漫天的坑爹作品所坑害,故此 ...

  6. Linux博客系统服务器搭建

    linux(CentOS)服务器搭建 前言 拿到购买的服务器信息后,会给出一个服务器的账号的密码,看你自己设置,账号一般为root. 拿到后,可在阿里云官网登录进入服务器.然后就可以进行一下的流程从而 ...

  7. Linux NFS服务器的安装与配置方法(图文详解)

    这篇文章主要介绍了Linux NFS服务器的安装与配置方法(图文详解),需要的朋友可以参考下(http://xb.xcjl0834.com) 一.NFS服务简介 NFS 是Network File S ...

  8. CentOS 6.3下Samba服务器的安装与配置方法(图文详解)

    这篇文章主要介绍了CentOS 6.3下Samba服务器的安装与配置方法(图文详解),需要的朋友可以参考下   一.简介  Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件, ...

  9. 【大数据】Linux下安装Hadoop(2.7.1)详解及WordCount运行

    一.引言 在完成了Storm的环境配置之后,想着鼓捣一下Hadoop的安装,网上面的教程好多,但是没有一个特别切合的,所以在安装的过程中还是遇到了很多的麻烦,并且最后不断的查阅资料,终于解决了问题,感 ...

随机推荐

  1. 似乎是VS2017的一个BUG

    VS版本:2017(15.9.13) 新建一个c#控制台项目,把Program.cs的内容替换成如下: namespace ConsoleApp1 { class Program { static v ...

  2. python中的内置函数(bytearray)

    返回一个新的字节数组.bytearray类是range 0 < = x < 256的一个可变序列.它有大多数可变序列的常用方法,在可变序列类型中描述,以及大多数字节类型的方法,参见字节和B ...

  3. C++用EGE简单实现别踩白块游戏

    本项目已开源:https://github.com/wmpscc/AvoidBlank 关于EGE 介绍:EGE(Easy Graphics Engine),是windows下的简易绘图库,是一个类似 ...

  4. Mac上PyCharm运行多进程报错的解决方案

    Mac上PyCharm运行多进程报错的解决方案 运行时报错 may have been in progress in another thread when fork() was called. We ...

  5. [乐意黎原创]Centos 7里apache(httpd)自启动

    最近,Aerchi在折腾 ECS服务器 (Centos 7),每次重启后都要手动开启apache服务,好繁琐. 仔细研究了下:Apache 的服务第一.启动.终止.重启systemctl start ...

  6. (数据科学学习手札65)利用Python实现Shp格式向GeoJSON的转换

    一.简介 Shp格式是GIS中非常重要的数据格式,主要在Arcgis中使用,但在进行很多基于网页的空间数据可视化时,通常只接受GeoJSON格式的数据,众所周知JSON(JavaScript Obje ...

  7. mongoshell 执行JavaScript文件获取数据库实例基本信息

    由于MongoDB没有关系型数据中强大的数据字典.因此,如果需要汇总统计一些内部信息,包括数据量,基本元信息,集群架构,状态信息.则需要自己写脚本统计.为日后工作方便,本人在此将一些统计信息通过Jav ...

  8. HDU 5117:Fluorescent(状压DP + 思维)***

    题目链接 题意 给出n个灯,m个开关,每个开关控制一些灯,如果打开这个开关,这个开关控制的灯如果本来灭的就会亮,如果本来亮的就会灭.问在每个开关按下与否的一共2^m情况下,每种状态下亮灯的个数的立方的 ...

  9. jQuery 文本框 光标 移动到 文字最后

    方法一:调用办法:setCaretToPos(document.getElementById("YOURINPUT"), 4); function setSelectionRang ...

  10. .Net知识大全(个人整理)

    .Net知识大全 本章内容适用于对.NET有一定基础的或者是想通过本文章对.NET基础知识记不清楚的朋友,可以通过本文章进行回顾. 面试的时候可能也会遇到相应的题目,建议面试前进行回顾!!! 1.NE ...