美文网首页
PXE+Kickstart自动化部署Linux 8

PXE+Kickstart自动化部署Linux 8

作者: 負笈在线 | 来源:发表于2022-12-23 20:33 被阅读0次

    一、PXE+Kickstart自动化部署原理

    1、什么是PXE?

    PXE,Preboot eXecution Environment,即全程预启动执行环境,也被称为预执行环境。提供了一种使用网络接口启动计算机的机制。这种机制让计算机的启动可以不依赖本地数据存储设备(如硬盘)或本地已安装的操作系统。  
    PXE是由 Intel 公司开发的网络引导技术,工作在 Client/Server 模式,允许客户机通过网络从远程服务器下载引导镜像,并加载安装文件或者整个操作系统。 
    PXE严格来说并不是一种安装方式,而是一种引导的方式。进行PXE引导的必要条件是要引导的计算机中包含一个PXE支持的网卡,即网卡中必须要有PXE Client(主板支持网络引导)。
    

    2、要件功能

    Kickstart : KickStart是一种无人职守安装方式。KickStart的工作原理是通过记录典型的安装过程中所需人工干预填写的各种参数,并生成一个名为 ks.cfg的文件;在其后的安装过程中(不只局限于生成KickStart安装文件的机器)当出现要求填写参数的情况时,安装程序会首先去查找 KickStart生成的文件,当找到合适的参数时,就采用找到的参数,当没有找到合适的参数时,才需要安装者手工干预。这样,如果KickStart文件涵盖了安装过程中出现的所有需要填写的参数时,安装者完全可以只告诉安装程序从何处取ks.cfg文件,然后去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中设置的重启选项来重启系统,并结束安装。

    DHCP: 用来给客户端PXE Client(将要安装系统的主机)分配IP 地址。

    Httpd:超文本传输协议,这里的角色仅提供安装系统所需的软件包。也可以用vsftp、nfs等软件包下载功能。

    Tftp: 服务器用来存放PXE的相关文件,比如:系统引导文件;

    3、PXE+Kickstart自动化部署流程

    ①PXE客户机发出DHCP请求,向DHCP服务器申请IP地址。
    ②DHCP服务器响应PXE客户机的请求,自动从IP地址池中分配一个IP地址给PXE客户机,并且告知PXE客户机:TFTP服务器的IP地址和PXE引导程序文件pxelinux.0,默认在TFTP共享目录/var/lib/tftpboot/下。

    ③PXE客户机向TFTP服务器发起获取pxelinux.0引导程序文件的请求。
    ④TFTP服务器响应PXE客户机的请求,将其共享的pxelinux.0文件传输给PXE客户机。

    ③PXE客户机向TFTP服务器发起获取ldlinux.c32和pxelinux.cfg/defaulf 的pxe引导配置文件的请求。
    ④TFTP服务器响应PXE客户机的请求,将ldlinux.c32和pxelinux.cfg/defaulf 文件传输给PXE客户机。

    PXE客户端展示pxelinux.cfg/defaulf 文件中的引导项,由用户指定选择其中一个引导项,或则等待默认时间后根据配置文件中的默认引导项(本地磁盘引导)自动引导。

    ③PXE客户机根据default文件配置向TFTP服务器发起获取对应引导项的vmlinuz压缩的虚拟机linux内核文件的请求。
    ④TFTP服务器响应PXE客户机的请求,将其共享的vmlinuz文件传输给PXE客户机。

    ③PXE客户机根据default文件配置向TFTP服务器发起获取对应引导项的initrd.img 临时文件系统文件的请求。
    ④TFTP服务器响应PXE客户机的请求,将其共享的initrd.img文件传输给PXE客户机。

    ●PXE客户机启动内核。

    ⑤PXE客户机根据default文件向http,ftp,nfs等网络共享服务器发起获取对应ks.cfg文件。
    ⑥PXE客户机读取ks.cfg,ks.cfg文件记录安装过程中所需人工干预填写的各种参数。包括键盘布局,系统语言,磁盘分区,网络配置,时区,root用户密码,安装的软件包,通过网络安装时,安装文件的位置,安装完成后自动重启等等。

    通过http,ftp,nfs等网络共享服务器下载指定软件包进行安装,完成自动化的安装操作系统。
    重启服务器,并从默认的本地磁盘引导启动。

    PXE+Kickstart自动化部署流程图

    二、构建自动化部署服务

    1、环境准备

    虚拟化环境:VMware® Workstation 15 Pro
    PXE Server配置:2C 2G
    PXE Server OS:AlmaLinux release 8.6 (Sky Tiger)

    2、DHCP服务部署

    # dnf install -y dhcpd
    # cp -p /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.org
    # vi /etc/dhcp/dhcpd.conf
    # egrep -v "^#|^$" /etc/dhcp/dhcpd.conf
    option domain-name "localhost";                #定义域名
    option domain-name-servers 172.26.37.2;        #定义DNS
    default-lease-time 600;                        #定义租约时间
    max-lease-time 7200;                           #定义最大租约时间
    log-facility local7;                           #定义日志级别
    subnet 172.26.37.0 netmask 255.255.255.0 {
        range 172.26.37.145 172.26.37.155;
        next-server 172.26.37.144;
        filename "pxelinux.0";
    }                                              #定义地址池的子网,掩码,地址池范围,dns,网关;定义了引导服务器tftp的地址,以及引导程序文件名。这里的pxelinux.0文件必须在tftp根目录上。
    # systemctl start dhcpd.service
    # systemctl status dhcpd.service
    # systemctl enable dhcpd.service
    # ss -tnlup |grep :67
    udp   UNCONN 0      0            0.0.0.0:67        0.0.0.0:*    users:(("dhcpd",pid=5095,fd=10))
    

    3.tftp服务部署

    # dnf install -y tftp tftp-server xinetd
    # systemctl restart xinetd
    # systemctl enable xinetd
    # systemctl status xinetd
    # systemctl restart tftp
    # systemctl enable tftp
    # systemctl status tftp
    # ss -tnlup |grep :69
    udp   UNCONN 0      0                  *:69              *:*    users:(("systemd",pid=1,fd=90))
    

    4.准备tftp共享文件

    # dnf install -y syslinux
    拷贝pxeLinux.0文件到tftp共享目录
    # cp -rp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
    # mkdir /mnt/{rocky,almalinux,rhel}
    # mount /dev/sr1 /mnt/rocky
    # mount /dev/sr2 /mnt/almalinux
    # mount /dev/sr3 /mnt/rhel
    # mount -l
    /dev/sr1 on /mnt/rocky type iso9660 (ro,relatime,nojoliet,check=s,map=n,blocksize=2048) [Rocky-8-5-x86_64-dvd]
    /dev/sr2 on /mnt/almalinux type iso9660 (ro,relatime,nojoliet,check=s,map=n,blocksize=2048) [AlmaLinux-8-6-x86_64-dvd]
    /dev/sr3 on /mnt/rhel type iso9660 (ro,relatime,nojoliet,check=s,map=n,blocksize=2048) [RHEL-8-0-0-BaseOS-x86_64]
    创建存放vmlinux及initrd.img文件路径
    # mkdir /var/lib/tftpboot/{Almalinux,rhel,rocky}
    拷贝各系统的vmlinux和initrd.img文件到指定目录
    # cp -rp /mnt/rhel/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/rhel
    # cp -rp /mnt/almalinux/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/Almalinux
    # cp -rp /mnt/rocky/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/rocky
    拷贝通用的.c32文件,一种轻量的引导加载文件。
    # cp -rp /mnt/rhel/isolinux/*.c32 /var/lib/tftpboot/
    创建/var/lib/tftpboot/pxelinux.cfg文件夹
    # mkdir /var/lib/tftpboot/pxelinux.cfg/
    将/mnt/rhel/isolinux/isolinux.cfg引导文件模板拷贝到tftp的pxelinux.cfg目录,并改名为default
    # cp /mnt/rhel/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
    # ll /var/lib/tftpboot/
    drwxr-xr-x 2 root root     39 Dec 24 17:25 Almalinux
    -r--r--r-- 1 root root 116064 Aug 13  2018 ldlinux.c32
    -r--r--r-- 1 root root 180668 Aug 13  2018 libcom32.c32
    -r--r--r-- 1 root root  22836 Aug 13  2018 libutil.c32
    -rw-r--r-- 1 root root  42376 Oct  8 21:26 pxelinux.0
    drwxr-xr-x 2 root root     21 Dec 24 17:27 pxelinux.cfg
    drwxr-xr-x 2 root root     39 Dec 24 17:24 rhel
    drwxr-xr-x 2 root root     39 Dec 24 17:25 rocky
    -r--r--r-- 1 root root  26788 Aug 13  2018 vesamenu.c32
    修改default文件
    # vi  /var/lib/tftpboot/pxelinux.cfg/default
    # cat /var/lib/tftpboot/pxelinux.cfg/default |grep -v ^#|grep -v ^$
    default vesamenu.c32
    timeout 600
    display boot.msg
    menu clear
    menu background splash.png
    menu title Install Linux OS 
    menu vshift 8
    menu rows 18
    menu margin 8
    menu helpmsgrow 15
    menu tabmsgrow 13
    menu color border * #00000000 #00000000 none
    menu color sel 0 #ffffffff #00000000 none
    menu color title 0 #ff7ba3d0 #00000000 none
    menu color tabmsg 0 #ff3a6496 #00000000 none
    menu color unsel 0 #84b8ffff #00000000 none
    menu color hotsel 0 #84b8ffff #00000000 none
    menu color hotkey 0 #ffffffff #00000000 none
    menu color help 0 #ffffffff #00000000 none
    menu color scrollbar 0 #ffffffff #ff355594 none
    menu color timeout 0 #ffffffff #00000000 none
    menu color timeout_msg 0 #ffffffff #00000000 none
    menu color cmdmark 0 #84b8ffff #00000000 none
    menu color cmdline 0 #ffffffff #00000000 none
    menu tabmsg Press Tab for full configuration options on menu items.
    menu separator # insert an empty line
    menu separator # insert an empty line
    label local
      menu default
      menu label ^Boot from local drive
      localboot 0xffff
    label Almalinux_linux
      menu label ^Install Almalinux 8.6 (auto)
      kernel Almalinux/vmlinuz
      append initrd=Almalinux/initrd.img ks=http://172.26.37.144/Almalinux_ks.cfg quiet
    label rocky
      menu label ^Install Rocky 8.5 (auto)
      kernel rocky/vmlinuz
      append initrd=rocky/initrd.img ks=http://172.26.37.144/rocky_ks.cfg quiet
    label rhel
      menu label ^Install RHEL 8.0 (auto)
      kernel rhel/vmlinuz
      append initrd=rhel/initrd.img ks=http://172.26.37.144/rhel_ks.cfg quiet
    menu end
    

    5.安装HTTP服务

    # yum install -y httpd
    # vi /etc/httpd/conf/httpd.conf 
    # egrep -v "^#|^$|^    #" /etc/httpd/conf/httpd.conf
    ServerRoot "/etc/httpd"
    Listen 80
    Include conf.modules.d/*.conf
    User apache
    Group apache
    ServerAdmin root@localhost
    ServerName 172.26.37.144:80
    <Directory />
        AllowOverride none
        Require all denied
    </Directory>
    DocumentRoot "/var/www/html"
    <Directory "/var/www">
        AllowOverride None
        Require all granted
    </Directory>
    <Directory "/var/www/html">
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
    <IfModule dir_module>
        DirectoryIndex index.html
    </IfModule>
    <Files ".ht*">
        Require all denied
    </Files>
    ErrorLog "logs/error_log"
    LogLevel warn
    <IfModule log_config_module>
        LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
        LogFormat "%h %l %u %t \"%r\" %>s %b" common
        <IfModule logio_module>
          # You need to enable mod_logio.c to use %I and %O
          LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
        </IfModule>
        CustomLog "logs/access_log" combined
    </IfModule>
    <IfModule alias_module>
        ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
    </IfModule>
    <Directory "/var/www/cgi-bin">
        AllowOverride None
        Options None
        Require all granted
    </Directory>
    <IfModule mime_module>
        TypesConfig /etc/mime.types
        AddType application/x-compress .Z
        AddType application/x-gzip .gz .tgz
        AddType text/html .shtml
        AddOutputFilter INCLUDES .shtml
    </IfModule>
    AddDefaultCharset UTF-8
    <IfModule mime_magic_module>
        MIMEMagicFile conf/magic
    </IfModule>
    EnableSendfile on
    IncludeOptional conf.d/*.conf
    
    # systemctl restart httpd.service 
    # systemctl enable httpd.service 
    # systemctl status httpd.service
    

    6.准备共享ks应答文件和软件包

    制作ks文件的方法
    方法一:在图形化的linux系统上安装system-config-kickstart软件,并在图形化桌面打开工具配置ks文件。
    方法二:基于已经安装好的服务器中/root/anaconda-ks.cfg文件进行修改。
    方法三:阅读kickstart配置文件手册,自己编写

    # vi /var/www/html/Almalinux_ks.cfg
    # cat /var/www/html/Almalinux_ks.cfg |grep -v ^# |grep -v ^$
    install   
    reboot                                               #安装完成后自动重启
    graphical                                            #使用图形化安装
    %packages
    @^server-product-environment
    @gnome-desktop
    kexec-tools
    %end
    url --url="http://172.26.37.144/almalinux"            #下载安装路径
    keyboard --xlayouts='us'                              #配置键盘布局
    lang en_US.UTF-8                                      #配置系统语言
    network  --bootproto=dhcp --device=ens33 --ipv6=auto --activate   #配置网络
    network  --hostname=localhost.localdomain                         #配置网络
    firstboot --enable
    bootloader --location=mbr
    zerombr
    clearpart --all --initlabel
    part /home --fstype="xfs" --size=4096
    part /boot --fstype="xfs" --size=1024
    part / --fstype="xfs" --grow --size=1
    timezone Asia/Shanghai --isUtc                                   #配置系统时区
    rootpw --iscrypted $6$rJmBvJqGh2Iq4nKK$/0Znefo5lu5JxEX1ZGDcf9zzS3k2b/bQLvZawg6oJtzMrxBZN.9Ybei573QHhILQcWbScP79bQOq4xMrui.VR0                                              #root用户密码
    %addon com_redhat_kdump --enable --reserve-mb='auto'
    %end
    %anaconda
    pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
    pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
    pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
    %end
    
    # vi /var/www/html/rhel_ks.cfg
    # cat  /var/www/html/rhel_ks.cfg|grep -v ^# |grep -v ^$^C
    install
    reboot
    graphical
    %packages
    @^server-product-environment
    @gnome-desktop
    kexec-tools
    %end
    url --url="http://172.26.37.144/rhel"
    keyboard --xlayouts='us'
    lang en_US.UTF-8
    network  --bootproto=dhcp --device=ens33 --ipv6=auto --activate
    network  --hostname=localhost.localdomain
    firstboot --enable
    bootloader --location=mbr
    zerombr
    clearpart --all --initlabel
    part /home --fstype="xfs" --size=4096
    part /boot --fstype="xfs" --size=1024
    part / --fstype="xfs" --grow --size=1
    timezone Asia/Shanghai --isUtc 
    rootpw --iscrypted $6$rJmBvJqGh2Iq4nKK$/0Znefo5lu5JxEX1ZGDcf9zzS3k2b/bQLvZawg6oJtzMrxBZN.9Ybei573QHhILQcWbScP79bQOq4xMrui.VR0
    %addon com_redhat_kdump --enable --reserve-mb='auto'
    %end
    %anaconda
    pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
    pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
    pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
    %end
    
    # vi /var/www/html/rocky_ks.cfg 
    # cat  /var/www/html/rocky_ks.cfg|grep -v ^# |grep -v ^$^C
    install
    reboot
    graphical
    %packages
    @^server-product-environment
    @gnome-desktop
    kexec-tools
    %end
    url --url="http://172.26.37.144/rocky"
    keyboard --xlayouts='us'
    lang en_US.UTF-8
    network  --bootproto=dhcp --device=ens33 --ipv6=auto --activate
    network  --hostname=localhost.localdomain
    firstboot --enable
    bootloader --location=mbr
    zerombr
    clearpart --all --initlabel
    part /home --fstype="xfs" --size=4096
    part /boot --fstype="xfs" --size=1024
    part / --fstype="xfs" --grow --size=1
    timezone Asia/Shanghai --isUtc 
    rootpw --iscrypted $6$rJmBvJqGh2Iq4nKK$/0Znefo5lu5JxEX1ZGDcf9zzS3k2b/bQLvZawg6oJtzMrxBZN.9Ybei573QHhILQcWbScP79bQOq4xMrui.VR0
    %addon com_redhat_kdump --enable --reserve-mb='auto'
    %end
    %anaconda
    pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
    pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
    pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
    %end
    

    准备共享软件包

    # cp -rp  /mnt/rhel /var/www/html/
    # cp -rp  /mnt/almalinux /var/www/html/
    # cp -rp  /mnt/rhel /var/www/html/
    

    三、自动化部署服务器

    1.自动化部署AlmaLinux 8.6

    在VMware Workstation上新建虚拟机




    配置自动化装机的虚机资源,内存至少2G以上

    启动虚机,进入安装界面,选择Install AlmaLinux 8.6(auto),开始自动部署

    可以提前打开dhcp、tftp、http服务的日志,跟踪自动化装机过程,加深对自动化部署过程的理解。



    自动安装完成,登录服务器确认。


    参考URL

    https://www.vercot.com/~serva/advanced/PxeErrorCodes.html
    https://www.jianshu.com/p/4913fc4a3b21
    http://www.manongjc.com/detail/41-kmeupunmxijwexh.html
    https://blog.csdn.net/mpu_nice/article/details/107922312

    相关文章

      网友评论

          本文标题:PXE+Kickstart自动化部署Linux 8

          本文链接:https://www.haomeiwen.com/subject/myhiqdtx.html