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

本章Blog相关Linux知识点



工作环境中,想要安装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内核完成安装

在上图中,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工作流程图:

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

[[email protected] 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:
[[email protected] ~]# yum install dhcp   # 安装dhcp server

[[email protected] ~]# rpm -ql dhcp
/etc/dhcp
/etc/dhcp/dhcpd.conf   # dhcpd配置文件
/etc/rc.d/init.d/dhcpd   # dhcpd启动文件
/usr/sbin/dhcpd   # 启动脚本配置文件
[[email protected] 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进程是否处于监听状态:
[[email protected] ~]# chkconfig --add dhcpd

[[email protected] ~]# chkconfig dhcpd on

[[email protected] ~]# service dhcpd start
Starting dhcpd:                                            [  OK  ]

[[email protected] ~]# 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

[[email protected] ~]# 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:
[[email protected] ~]# yum install xinetd tftp-server

[[email protected] ~]# rpm -ql tftp-server  
/etc/xinetd.d/tftp    # 配置文件路径
/var/lib/tftpboot    # 默认tftp存储目录

[[email protected] ~]# 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
}
[[email protected] ~]# chkconfig xinetd on

[[email protected] ~]# chkconfig tftp on

[[email protected] ~]# service xinetd start
Starting xinetd: 

[[email protected] ~]# ss -tunl | grep 69
udp    UNCONN     0      0                      *:69                    *:*
  • 使用 syslinux 提供的bootstart :
[[email protected] ~]# yum install syslinux

[[email protected] ~]# rpm -ql syslinux
/usr/share/syslinux   # pxelinux.0 文件存储目录

[[email protected] ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/  # 复制pxelinux.0到 /var/lib/tftpboot 目录

[[email protected] ~]# cd /var/lib/tftpboot/

[[email protected] tftpboot]# mkdir pxelinux.cfg  

[[email protected] boot]# mount /dev/cdrom /media/  # 挂载光盘
mount: block device /dev/sr0 is write-protected, mounting read-only

[[email protected] ~]# cp isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default  
# 把isolinux.cfg引导文件拷贝到tftpd存储目录下的pxelinux.cfg文件中,并命名为default

[[email protected] ~]# vi /var/lib/tftpboot/pxelinux.cfg/default   # 修改linux内核引导文件
default vesamenu.c32     # 默认启动界面,该文件需要拷贝到tftp存储目录中。
#prompt 1
timeout 600      # 这个值是秒数的10倍,表示超时时间60s

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 文件做拷贝
[[email protected] ~]# cp /media/images/pxeboot/{initrd.img,vmlinuz} /var/lib/tftpboot/   

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

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安装:以/root/anaconda.cfg 为模板,配置ks.cfg文件 ,配置repo url 和 ks.cfg url
[[email protected] ~]# yum install httpd

[[email protected] ~]# rpm -ql httpd
/etc/httpd    
/etc/httpd/conf/httpd.conf   # httpd 配置文件
/var/www/html     # httpd 默认存储目录

[[email protected] ~]# chkconfig httpd on

[[email protected] ~]# service httpd start
Starting httpd: 

[[email protected] ~]# ss -tunl |grep 80
tcp    LISTEN     0      128                   :::80                   :::*     

[[email protected] ~]# 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

[[email protected] ~]# cp /root/anaconda-ks.cfg /var/www/html/ks.cfg    # 拷贝模板到/var/www/html 目录,并重命名为ks.cfg

[[email protected] ~]# chmod o+r /var/www/html/ks.cfg    # 分配权限,为pxe client引导安装使用

[[email protected] isolinux]# cp /media/* /var/www/html/centos/os/    # 拷贝安装系统

[[email protected] os]# grub-crypt     # 密码加密,使用grub-crypt 默认512位加密方式
Password: 
Retype password: 
$6$DnceMH60Kiu8TaME$ySd/QOpPtEcLnnoW36bDjb59xr1eJHGUwTTV/4MHoojT.RoXXdsLHMWJXcLCETQNRF2xITSqKHAAUNZq6df0i/

[[email protected] ~]# 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
  • ks.cfg及repo验证:

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

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

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 端 。

原文地址:http://blog.51cto.com/itwish/2154820

时间: 2024-10-09 06:48:30

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

最简单实用的MongoDB安装教程:在CentOS中使用 yum 安装MongoDB及服务器端配置详解

一.准备工作: 运行yum命令查看MongoDB的包信息 [[email protected] ~]# yum info mongo-10gen (提示没有相关匹配的信息,) 说明你的centos系统中的yum源不包含MongoDB的相关资源,所以要在使用yum命令安装MongoDB前需要增加yum源,也就是在 /etc/yum.repos.d/目录中增加 *.repo yum源配置文件,以下分别是针对centos 64位和32位不同的系统的MongoDB yum 源配置内容: 我们这里就将该文

Linux Centos 6.6搭建SFTP服务器

在Centos 6.6环境使用系统自带的internal-sftp搭建SFTP服务器. 打开命令终端窗口,按以下步骤操作. 0.查看openssh的版本 1 ssh -V 使用ssh -V 命令来查看openssh的版本,版本必须大于4.8p1,低于的这个版本需要升级. 1.创建sftp组 1 groupadd sftp 2.创建一个sftp用户,用户名为mysftp,密码为mysftp 修改用户密码和修改Linux用户密码是一样的. useradd -g sftp -s /bin/false

Linux下DNS服务器搭建详解

 Linux下DNS服务器搭建详解 DNS  即Domain Name System(域名系统)的缩写,它是一种将ip地址转换成对应的主机名或将主机名转换成与之相对应ip地址的一种机制.其中通过域名解析出ip地址的叫做正向解析,通过ip地址解析出域名的叫做反向解析. 下面对DNS的工作流程及原理进行简要说明 DNS的查询流程:需要解析服务的Client先查看本机的/etc/hosts:若无结果,则client查看本地的DNS缓存服务器:若无结果,则查找所属域的首选DNS服务器:若此时本地首选DN

Linux - CentOS6.5服务器搭建与初始化配置详解(下)

传送带:Linux - CentOS6.5服务器搭建与初始化配置详解(上) 继续接着上面的安装,安装完后会出现下面界面 点击reboot重启 重启后可以看到下面的tty终端界面  因为这就是最小化安装 输入root和之前配置的密码 第一步先把防火墙给光了 iptables -F  命令用于清空规则 这里插一条命令(这个命令我忘记打上去了) /etc/init.d/iptables save  用于保存当前被清空的规则 chkconfig  iptables  stop  开机不允许启动防火墙 c

Linux中DNS服务器搭建

Linux中DNS服务器搭建 实验介绍:本文主要介绍在虚拟机Linux环境中搭建DNS(域名解析系统)服务器,并最终能够实现域名的正向和反向解析,最终通过一台win7系统的虚拟机能够用域名www.benet.com访问另外一台win7系统的虚拟机. 1. 首先给Linux主机配IP地址,本文Linux的IP地址192.168.1.25,用于访问网站的win7虚拟机的IP地址为192.168.1.50,提供网站服务的win7虚拟机的IP地址为192.168.1.100. 2.在Linux上安装Bi

linux下FTP服务器的安装与配置

FTP服务器安装与配置 1. 切换到root用户:  su root 2. 查看系统中是否安装了vsftpd,可以通过执行命令 :  rpm -qa | grep vsftpd 3. 如果没有安装 vsftpd,则安装 :  yum -y install vsftpd 4. 创建ftp用户,比如ftp_test.命令:   useradd -s /sbin/nologin -d /home/ftp_test ftp_test 5. 设置ftp_test用户密码.命令:  passwd ftp_t

centos svn服务器搭建

centos svn服务器搭建 1.yum install subversion 2.mkdir -p /opt/svn 3.chmod R 777 /opt/svn 4.svnadmin create /opt/svn/repos #创建一个svn版本仓库repos 5.cd /opt/svn/repos/conf 6.cp -p svnserve.conf ./svnserve.conf.bak 备份一下即将修改的文件 7.vi svnserver.conf 8. anon-access =

linux(CentOS)下Mrtg的安装詳解

linux(CentOS)下Mrtg的安装詳解 MRTG非常強大,他可以監控你的服務器的一舉一動,並且用web方式呈現給你,告訴你網絡,cpu,內存,硬盤等使用狀況,但是配置起來這個軟件實在是非常麻煩. 爲了安裝這個軟件且將其配置好,我上網查了兩天資料,最後整理總結了這一份完整的出來,分享給大家,希望對大家有用.如要轉載請注明出處www.7di.net 一.前期準備(1)MRTG需要以SNMP服务为基础,所以请确保你的系统已经启用了此服务,修改SNMP的配置:#vi /etc/snmp/snmp

Linux下Memcache服务器的安装

Linux下Memcache服务器的安装 环境需求: 安装Memcached需要libevent库的支持,所以请在安装Memcached之前检查有没有安装libevent.测试环境还需要PHP的支持,本文假设PHP已经安装到/usr/local/php目录下. 服务器端主要是安装memcache服务器端,Memcache用到了libevent这个库用于Socket的处理,所以还需要安装libevent. memcached下载地址:http://www.danga.com/memcached/

在Linux CentOS 6.6上安装Python 2.7.9

在Linux CentOS 6.6上安装Python 2.7.9 CentOS 6.6自带的是Python 2.6.6,而编译llvm需要Python 2.7以上. checking for python... /usr/bin/python checking for python >= 2.7... not found configure: error: found python 2.6.6 (/usr/bin/python); required >= 2.7 yum中最新的也是Python