[PXE] linux(centos)PXE 服务器搭建,安装,启动及pxe协议详解

本文转自http://blog.51cto.com/itwish/2154820

工作环境中,想要安装Linux但是计算机没有光驱,或者是有大批量的计算机需要同时安装Linux,就需要通过部署环境PXE+DHCP+TFTP+HTTP+kickstart 方式来实现了 。

 

PXE协议详解:

    PXE,预启动执行环境(Preboot eXecution Environment,PXE,也被称为预执行环境)提供了一种使用网络接口(Network Interface)启动计算机的机制。这种机制让计算机的启动可以不依赖本地数据存储设备(如硬盘)或本地已安装的操作系统。

    PXE(Pre-boot Execution Environment)是由Intel设计的协议,它可以使计算机通过网络启动。协议分为client和server两端,支持工作站通过网络从远端服务器下载映像,并由此支持来自网络的操作系统的启动过程,其启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中并执行,由这个启动软件包完成终端基本软件设置,从而引导预先安装在服务器中的终端操作系统。

 

PXE工作原理:

    1.PXE client从自己的PXE网卡启动,向本网络中的DHCP服务器请求ip地址

    2.DHCP服务器收到dhcp请求后,分配dhcp地址池中ip给PXE client

    3.PXE client向本网络中的TFTP服务器索取bootstarp文件

    4.PXE client取得bootstarp文件后之执行pxelinux.0文件引导,使用pxelinux环境来引导os安装程序。

    5.PXE client然后读取pxelinux.cfg文件夹中的default(isolinux.cfg)引导文件,通过TFTP服务器加载内核vmlinuz和根文件系统(boot.msg,vesamenu.c32,initrd.img,splash.jpg),通过http服务器加载ks.cfg引导文件。

    6.启动linux内核完成安装

    image.png

    在上图中,PXE client是需要安装Linux的计算机,TFTP Server和DHCP Server运行部署在在PXE Server端。Bootstrap文件、配置文件、Linux内核以及Linux根文件系统都放置在Linux Server上TFTP服务器的根目录下。

 

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工作流程图:

    image.png

 

 

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来定义 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[root@PXE pxelinux.cfg]# vi /etc/dhcp/dhcpd.conf 
# dhcpd.conf
#
# Sample configuration file for ISC dhcpd
#
 
# option definitions common to all supported networks...
option domain-name "itwish.cn";      # 全局定义域名
option domain-name-servers 192.168.4.150 ; # 全局定义dns 地址
 
default-lease-time 600;  # 全局定义默认租约期限
max-lease-time 7200;     # 全局定义最长租约期限
 
log-facility local7;  # 文件属性
 
subnet NETWORK_ADDR  netmask  NETMASK {       # 定义子网 
    range 10.254.239.10 10.254.239.20;    # 分配地址池
    option routers dns1;      
    option domain-name-servers ns.itwish.cn;  
    option domain-name "internal.example.org";
    default-lease-time 600;    
    max-lease-time 7200;       
    range dynamic-bootp 10.254.239.40 10.254.239.60;    # 定义bootp
    option broadcast-address 10.254.239.31;         # 广播地址
    next-server  192.168.4.100; # tftp服务器地址
    filename  "pxelinux.0";     # 告诉TFTP目录下的bootstarp文件
}
 
host passacaglia {   # 主机定义
    hardware ethernet 0:0:c0:5d:bd:95;  # 物理地址
    filename "vmunix.passacaglia";
    server-name "toccata.fugue.com"
    fixed-address ip;  # 固定地址
}

 

  • 安装DHCP:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[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进程是否处于监听状态:

1
2
3
4
5
6
7
8
9
10
11
12
13
[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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[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 :

1
2
3
4
5
6
7
8
9
10
[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 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[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 文件做拷贝

1
2
3
[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环境HTTPD部署


 

创建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安装:  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[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 。

ks引用格式如下图

    image.png

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

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
[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验证:

    image.png

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

    image.png

    注: 若不能显示以上连接方式,确认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 

    image.png

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

    image.png

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

    image.png

    image.png

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

    image.png

    image.png

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

    image.png 

    image.png

    image.png

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

    image.png

    image.png        

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

    image.png

    image.png

 

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

 

posted @ 2018-08-05 21:53  夜阑人静_xieyuanshun  阅读(13338)  评论(0编辑  收藏  举报