PXE的部署过程

简介

什么是PXE?

PXE( Preboot Execution Environment的缩写,即预启动执行环境)是由Intel设计的一种网络协议,可使计算机通过网络启动安装系统,同时也是一种使用网络接口启动计算机的机制,其不依赖本地数据存储设备或本地已安装的系统;协议分为client端和server端,PXE client在网卡的boot ROM中启动,当计算机开机引导时,BIOS把PXE client调入内存执行,并显示出命令菜单,经用户选择需要安装的系统后,PXE client将放置在远端的操作系统通过网络下载到本地运行;

常见安装方式:

  1. 光盘安装
    使用server内置光驱或外置USB光驱,将系统镜像刻录,从光盘安装;
  2. U盘安装
    利用工具将镜像系统写入U盘,从U盘启动;
  3. 镜像挂载安装
    利用BMC Web GUI远程挂载镜像安装;
  4. 网络引导安装(PXE)
    客户端通过网络启动,读取远端服务器上的镜像以安装;

PXE server的四种模式

PXE有四种启动模式,分别为 IPV4 legacy,IPV4 UEFI,IPV6 legacy,IPV6 UEFI,这里主要介绍IPV4 legacy启动模式需要的文件。
1.pxelinux.0: 计算机自展引导程序(bootstrap),负责系统引导和启动,作用类似于BIOS,会调用PXE相关配置文件
2.pxelinux.cfg: 文件夹,存放PXE配置文件
vmlinuz: linux的内核文件,可以被引导程序加载,从而启动Linux系统
3.initrd.img: boot loader initialized RAM disk的缩写,作为根文件系统加载各种模块、驱动、服务等,网卡驱动就包含在该文件中.

原理

  1. 客户端(Client)的BIOS支持网卡启动,且网卡具有PXE ROM芯片;
  2. 服务端(PXE Server)至少有 dhcptftpnfs服务且为开启状态;
  3. BIOS通过PXE Client调入内存执行,PXE Sever向本地局域网中dhcp.server发出分配IP请求;
  4. 在dhcp.server收到请求后,便向PXE Server返回IP及bootstrap文件(自展引导程序)的位置;客户端向tftp.server请求bootstrap文件,tftp.server收到请求向客户端发送bootstrap文件 -->pxelinux.0
  5. 客户端收到pxelinux.0文件后执行文件,并根据内容向tftp.server请求pxelinux.0的配置文件-->tftpboot/pxelinux.cfg/default;
  6. 客户机读取default文件,等待用户选择安装系统后,客户端向tftp.server发出提供内核文件vmlinuz和根文件系统initrd.img请求;
  7. tftp.server收到客户端请求,提供vmlinuz和initrd.img;
  8. 客户端收到文件,启动内核映像文件,内核文件根据bootstrap的配置文件pxelinux.0向PXE sever请求提供自动安装脚本和源文件,PXE Server通过ftp/http/nfs中的一个向客户端传送相关脚本和源文件,客户端获得后进行自动安装。

PXE server架设过程

  1. 关闭Firewalls & SELinux
    service iptables stop #临时有效,重启后防火墙自动打开
    chkconfig iptables off #永久有效,重启后防火墙不自动打开
    setenforce 0 #临时有效,重启后失效
    vim /etc/selinux/config#永久有效,重启后也有效
    SELINUX=disabled

  2. 检查是否安装了dhcp,tftp,nfs服务
    rpm -qa | grep -i dhcp
    rpm -qa | grep -i tftp
    rpm -qa | grep -i nfs

  3. 配置yum源(如已安装了dhcp,tftp,nfs服务可忽略该步骤)
    vim /etc/yum.repos.d/server.repo
    [development]
    name=development
    baseurl=file:///mnt/
    gpgcheck=0
    enabled=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

  4. 安装dhcp,ftp,nfs服务(如已安装了dhcp,tftp,nfs服务可忽略该步骤)
    yum install -y dhcp
    yum install -y tftp
    yum install -y nfs

  5. 配置任意网口信息,并设定IP地址
    vim /etc/sysconfig/network-scripts/ifcfg-enp3s0f0

     NAME="enp3s0f0" 
     DEVICE="enp3s0f0"       
     ONBOOT=yes  #开机自启
     NETBOOT=yes
     UUID="169f6948-307c-42a7-bb35-a773c86fb5d6"
     BOOTPROTO=none #IP地址类型
     IPADDR=192.168.1.250 #IP地址
     TYPE=Ethernet
     PREFIX=24
     DEFROUTE=yes
     IPV4_FAILURE_FATAL=no
     IPV6INIT=yes
     IPV6_FAILURE_FATAL=no
     IPV6_AUTOCONF=yes
     IPV6_DEFROUTE=yes
     IPV6_PEERDNS=yes
     IPV6_PEERROUTES=yes
    

    开启网络服务:service network start/restart or systemctl start network.service

  6. 配置dhcp.conf并启动服务
    vim /etc/dhcp/dhcpd.conf

     # dhcpd.conf
     ddns-update-style interim;  <!-- 暂时,间歇 -->
     ignore client-updates;
     allow booting;  <!--指定dhcp.server是否允许客户端在booting阶段查询host declaration-->
     allow bootp;    <!--指定dhcp.server是否对bootp query做出响应 -->
     class "pxeclients" {
     match if substring(option vendor-class-identifier,0,9)="PXEClient";
     next-server 192.168.1.250;  <!--指定主机启动文件从哪个地址的服务器上获取 -->
     filename "pxelinux.0";  <!--指定主机启动文件名字 -->
     }
     subnet 192.168.1.0 netmask 255.255.255.0 {
     option broadcast-address 192.168.1.255;
     option routers 192.168.1.250;
     option subnet-mask 255.255.255.0;
     range 192.168.1.205 192.168.1.249;  <!--dhcp地址空间 -->
     default-lease-time 8640000;
     }
    

启动dhcp服务:service dhcp start or chkconfig dhcpd on

  1. 配置tftp并启动服务
    vim /etc/xinetd.d/tftp

     # default: off
     # description: The tftp server serves files using the trivial file transfer protocol.  
     service tftp
     {
         socket_type     = dgram
         protocol        = udp
         wait            = yes
         user            = root
         server          = /usr/sbin/in.tftpd
         server_args     = -s /tftpboot  <!-- 存放操作系统镜像文件的文件夹,默认路径是/lib/var/tftpboot -->
         disable         = no    <!-- yes代表关闭,no代表打开 -->
         per_source      = 11
         cps         = 100 2
         flags           = IPv4
         }
    

启用tftp服务:service tftp startor /etc/init.d/xinetd start or chkconfig tftp on 开机自启

  1. 配置nfs并启动服务
    vim /etc/exports

     /tftpboot *(rw,no_root_squash)  <!-- 将该文件下的所有文件共享给任意用户 -->
    

启用nfs服务:service nfs start

  1. 准备系统镜像文件
    mount -o loop rhel7.4.iso /mnt #将镜像挂载在'/mnt'下
    mkdir /tftpboot/rhel7.4 #创建文件夹
    cp -rf /mnt/* /tftpboot/rhel7.4 拷贝文件至新建文件夹下
    chmod -R +x /tftpboot/rhel7.4 #给文件赋予执行权限
    cp -rf /usr/share/syslinux/pxelinux.0 /tftpboot/
    cp -rf boot.msg vesamenu.c32 splash.png /tftpboot/
    mkdir /tftpboot/pxelinux.cfg
    cp -rf /tftpboot/rhel7.4/isolinux/isolinux.cfg /tftpboot/pxelinux.cfg/
    mv /tftpboot/pxelinux.cfg/isolinux.cfg /tftpboot/pxelinux.cfg/default #更改文件名字

  2. 配置pxelinux.cfg文件
    vim default

    default vesamenu.c32    <!-- vesamenu.c32:设置图形化选择界面,Linux操作系统的isolinux文件夹下,menu.c32:设置文字选择界面,从/user/share/syslinux  路径下获取 -->
    prompt 1    <!-- 是否显示"boot"提示符,"1"表示显示,提示符显示时可以直接键入想要安装的系统;"0"表示不显示,会直接按"default"中的参数指定的内容启动-->
    timeout 600 <!-- 用户输入前的超时时间,单位1/10秒 -->
    display boot.msg
    menu background 1.jpg   <!-- 背景图片 -->
    menu title Welcome! <!-- 显示菜单的标题 -->
    menu color border 0 #ffffffff #00000000
    menu color sel 7 #ffffffff #ff000000
    menu color title 0 #ffffffff #00000000
    menu color tabmsg 0 #ffffffff #00000000
    menu color unsel 0 #ffffffff #00000000
    menu color hotsel 0 #ff000000 #ffffffff
    menu color hotkey 7 #ffffffff #ff000000
    menu color scrollbar 0 #ffffffff #00000000
    
    label install   <!-- "开始安装过程" -->
        menu label ^1)Install rhel7.4 in /dev/sda
        menu default    <!-- 规定时间内没有做出选择,将自动启动默认选项 -->
        kernel rhel7.4/vmlinuz biosdevname=0
        append initrd=rhel7.4/initrd.img ks=nfs:192.168.1.250:/tftpboot/rhel7.4/ks/ks.cfg   <!-- append:指定追加给内核参数的initrd.img的路径;inst.repo:设置镜像文件位置 -->
    
  3. 配置无人值守kickstart文件

    #platform=x86, AMD64, or Intel EM64T
    #version=DEVEL
    # Install OS instead of upgrade
    install
    # Keyboard layouts
    keyboard 'us'
    # Root password
    rootpw --iscrypted $1$BrX4T9WN$OXLjtLaSe7VNnmjlsUyXE0
    # System language
    lang zh_CN
    # Firewall configuration
    firewall --disabled
    # System authorization information
    auth  --useshadow  --passalgo=sha512
    # Use graphical install
    install
    graphical
    # SELinux configuration
    selinux --disabled
    # Use NFS installation media
    nfs --server=192.168.1.250 --dir=/tftpboot/rhel7.4
    # Network information
    network  --bootproto=dhcp --device=enp3s0f0
    # Reboot after installation
    reboot
    # System timezone
    timezone Asia/Shanghai
    # Partition clearing information
    clearpart --all --drives=sda
    # System bootloader configuration
    bootloader --append="crashkernel=768M vconsole.font=latarcyrheb-sun16 vconsole.keymap=us biosdevname=0 ipv6.
        disable=1 console=tty0 console=ttyS0,115200 scsi_mod.scan=sync intel_idle.max_cstate=0 pci=pcie_bus_perf
        nouveau.modeset=0 rd.driver.blacklist=nouveau video=vesa:off rd.driver.pre=ahci" --location=mbr --boot-drive
    =sda
    # autopart --type=lvm
    part /boot --asprimary --fstype="ext4" --ondisk=sda --size=1024
    part swap --asprimary --fstype="swap" --ondisk=sda --size=51200
    part / --asprimary --fstype="ext4" --ondisk=sda --size=153600
    
    %packages
        @additional-devel
        @anaconda-tools
        @backup-client
        @backup-server
        @base
        @compat-libraries
        @console-internet
        @core
        @debugging
        @desktop-debugging
        @development
        @dial-up
        @directory-client
        @directory-server
        @dns-server
        @emacs
        @file-server
        @fonts
        @ftp-server
        @gnome-apps
        @gnome-desktop
        @graphical-admin-tools
        @graphics
        @guest-agents
        @guest-desktop-agents
        @hardware-monitoring
        @identity-management-server
        @infiniband
        @input-methods
        @internet-browser
        @java-platform
        @kde-desktop
        @large-systems
        @legacy-unix
        @legacy-x
        @load-balancer
        @mail-server
        @mainframe-access
        @mariadb
        @mariadb-client
        @multimedia
        @network-file-system-client
        @network-server
        @network-tools
        @networkmanager-submodules
        @perl-runtime
        @perl-web
        @php
        @platform-devel
        @platform-kvm
        @platform-microsoft
        @platform-vmware
        @postgresql
        @postgresql-client
        @print-client
        @print-server
        @python-web
        @remote-desktop-clients
        @remote-system-management
        @ruby-runtime
        @scientific
        @security-tools
        @smart-card
        @system-admin-tools
        @system-management
        @technical-writing
        @virtualization-client
        @virtualization-hypervisor
        @virtualization-platform
        @virtualization-tools
        @web-server
        @web-servlet
        @x11
        %end
    

以上,便完成了整个PXE的部署流程。

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

推荐阅读更多精彩内容

  • 远程管理服务配置文件 /etc/ssh/sshd_config --- ssh服务端配置文件/etc/ssh/...
    Linux63阅读 273评论 0 0
  • yum 安装软件使用起来非常方便,它可以自动解决 rmp 包之间的依赖关系,比如我们安装 rpm 包 A,但包 A...
    五大RobertWu伍洋阅读 344评论 0 0
  • yum安装 添加remi源。 搜索安装包和扩展包。# PHP7.2yum list install "php*" ...
    Jason5354阅读 1,016评论 0 51
  • 一、这周的虚拟投资表,说真话我建了,可今天又重读了一遍发现我建错了。是以1为单位计算的而我建成以股数*每股价格=投...
    梦夏L阅读 216评论 2 3
  • 加入简书日更有意思。 每天思考着生活中的所有,哪个更是好题材,哪个更有意义,记录下来,过后成追忆。 但是,忙碌中,...
    常青树阅读 204评论 2 0