PXE

PXE简介

       PXE,就是预启动执行环境,是一种引导启动的方式。这种协议一般由两部分构成,一部分是服务器端,一个是客户端。简单来说,我们通过这种方式可以自己创建一个“安装源”,在安装系统的时候只要能找到这个“源”便可以实现系统的安装。在实现无人值守的安装前,我们必须要搭建一些服务,来实现“安装源”的建立,例如ftp、http、tftp、dhcp等。当一台主机启动时,标准输入输出会将PXE客户端调入我们的内存中进行相关的操作,并提示相关的选项,在这里我们可以进行选择。PXE的客户端通过网络下载(download)启动文件到本地运行。具体过程是,PXE客户端通过网卡向局域网内发送ip请求,然后DHCP服务器会提供给给它一个ip地址和系统安装所需要的文件,接下使用接收到的文件进行系统安装。而安装的过程又需要其他服务器提供的资源,例如:yum源,内核文件等,当主机拿到这些资源,便可以顺利的安装了。最终结果是:任意一台主机在选着网络启动时会获取DHCP服务器分发的ip,通过通过获取到的ip地址与局域网内的TFTP服务器通信并获取启动文件,与FTP或者HTTP通信并获取yum源文件及内核文件等。之后开始自动安装,而这个过程不需要人在做任何操作。
       PXE安装优点,这种安装系统的方式可以不受光驱,光盘以及一些外部设备的限制,还可以做到无人值守,大大减轻了运维人员的工作负荷,像在一些主机数量庞大的机房进行批量安装,PXE将是你不二的选择。

整体方案

       在实现PXE自动批量安装系统时,首先我们需要有DHCP服务器为我们提供IP地址,如果在一个网络中你连IP地址都获取不到,何谈自动化。其次我们要安装一个系统,那么需要的文件必须要有人为我们提供才可以,应为是网络自动安装,本地是没有任何资源的,我们可以使用HTTP,FTP服务来实现。最后就是获取我们的安装文件,这些文件会引导我们的计算机如何启动,如何配置,我们选择TFTP服务起来提供。整体框架如下图:


以CentOS 7为例,PXE的组件:

DHCP

tftp server

yum repository

kickstart

安装前准备

选择一台主机同时搭建(yum)HTTP、TFTP、DHCP服务,为该子网内的主机提供服务。添加一块仅主机连接的网卡做DHCP专用通道IP10.0.0.1/24。客户端也添加一块仅主机连接的网卡专用通道。

由于涉及到主机间不同基于不同协议的通信,所以为了避免不必要的麻烦,我们选择关闭防火墙以及selinux。生产场景中不建议这样做。

[root@node1 ~]# iptables -F              #清空防火墙配置

[root@node1 ~]# setenforce 0            #临时关闭selinux

安装服务

由于我们需要HTTP、TFTP、DHCP服务来提供相应的服务,所以我们必须要在系统中安装,相应的服务。这里需要注意,如果你的系统时最小化安装,那么建议你先安装一些包组,GCC等。如果安装过程中出现包依赖问题,依次安装相应的包即可。

[root@node1 ~]# yum -y install dhcp tftp-server httpd                 #安装dhcp、tftp、httpd

[root@node1 ~]# yum -y install xinetd                                                      #安装超级守护进程xinetd

[root@node1 ~]# systemctl enable dhcpd                                                #开机自启动dhcp

[root@node1 ~]# systemctl enable tftp                                                     #开机自启动tftp

[root@node1 ~]# systemctl enable httpd                                                   #开机自启动http

[root@node1 ~]# systemctl start httpd                                                       #启动http服务

[root@node1 ~]# systemctl start tftp.socket                                                         #启动tftp服务

配置的虚拟机网卡和dhcpd.conf的网段要一致否则服务启动失败。所以先配置dhcpd.conf

配置DHCP服务

[root@node1 ~]# rpm -ql dhcp                                                                     #查看DHCP相关文件

.....前面省略

/usr/share/doc/dhcp-4.2.5/dhcpd.conf.example                                         #DHCP配置示例

/usr/share/doc/dhcp-4.2.5/dhcpd6.conf.example                                        

......后面省略

[root@node1 ~]# cd /etc/dhcp  

[root@node1 dhcp]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example .              #复制模板配置文件

[root@node1 dhcp]# mv dhcpd.conf.example dhcpd.conf                                      #改名为dhcpd.conf,顶替以前的配置文件 

[root@node1 dhcp]# vim dhcpd.conf                                                                         # 打开模板文件并添加以下内容    

.......前面省略

 subnet 10.0.0.0 netmask 255.255.255.0 {                                      # 这里写的ip地址为子网的地址,故为10.0.0.0

        range 10.0.0.200 10.0.0.250;                                                  # 子网的范围,之后主机请求获取的ip地址就是这其中的一个

        next-server 10.0.0.1;                                                                # 指明tftp服务器的地址

        filename "pxelinux.0";                                                               # 指明PXE文件位置,这个在申请ip的时候会发送给安装主机

}

......后面省略

保存退出

[root@node1 network-scripts]# systemctl restart dhcpd                      #重启DHCP服务

注意:如果你设置的子网有问题,那么你将不能重启dhcp服务,请检查你配置的子网是否正确。dhcp服务器的地址必须固定,不能是自动获取的ip。

准备yum源文件及kickstart文件

       yum源文件我们是放在http服务器上的,由http服务来提供,所以我们要把相应的文件复制到http服务器上。并且我们安装的主机系统可能是CentOS 6 也可能是CentOS7或者Ubantu等,所以我们在准备yum文件时,需要准备不同系统、不同版本的文件,我们这里只提供CentOS 7的两种系统的安装。向我们先规划一下目录文件,在进行复制。如下所示。

我们规划好了目录结构,接下来便是创建这些目录结构,并提供相应的文件。

[root@node1 ~]# cd /var/www/html/

[root@node1 html]# mkdir /var/www/html/centos/7/x86_64 -pv

提供yum源文件,这里有两种方案来实现yum源文件的提供:

    方案1:我们挂载CentOS 7的光盘将光盘里的Packages目录与repodata目录复制到对应的目录下(如果复制,建议全部复制); 

    方案2:我们创建1个光盘驱动器,添加CentOS 7的ISO镜像,然后我们将对应的关盘挂载到/var/www/html/centos下对应的目录上。

综上所述,我们选择方案2。

[root@node1 html]#  mount -r /dev/cdrom/  /var/www/html/centos/7/x86_64

mount: /dev/sr0 写保护,将以只读方式挂载

[root@node1 html]# ls /var/www/html/centos/7/x86_64


挂载成功

接下来准备ksdir目录下的安装引导文件kickstart,可以从原有服务器同系统直接拷贝。这里因为没有参考,需要重新制作。

[root@node1 ksdir]# yum -y install system-config-kickstart

[root@node1 ksdir]# system-config-kickstart 

弹出配置程序按顺序设置,最后保存至/var/www/html/ksdir/centos7.cfg

vim ks.cfg #编辑文件,指定安装过程中需要安装的软件,在文件末尾添加

%packages

@base

%end

ksvalidator   centos7.cfg                        #检测语法是否正确


关键的URL要设置为对应的镜像源

配置PXE环境

[root@node1 ksdir]# yum -y install syslinux

[root@node1 ksdir]# cp /usr/share/syslinux/pxelinux.0     /var/lib/tftpboot/

[root@node1 ksdir]# cp /var/www/html/centos/7/x86_64/images/pxeboot/{vmlinuz,initrd.img}     /var/lib/tftpboot/

[root@node1 ksdir]# cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk}      /var/lib/tftpboot/

[root@node1 ksdir]# mkdir /var/lib/tftpboot/pxelinux.cfg/

[root@node1 ksdir]# vim /var/lib/tftpboot/pxelinux.cfg/default

default menu.c32 

prompt 5                                                                                       #显示5秒

timeout 30                                                                                    #超时时间30秒

MENU TITTLE CentOS 7 PXE Menu                                           #主菜单项名称为CentOS 7 PXE Menu


LABEL linux_autoinst                                                                      #标签

MENU LABEL Install CentOS 7 x86_64 auto                                 #菜单项标签显示为CentOS 7 x86_64 auto

KERNEL vmlinuz                                                                             #加载的内核

APPEND initrd=initrd.img  inst.repo=http://10.0.0.1/centos/7/x86_64  ks=http://10.0.0.1/ksdir/centos7.cfg


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351