• 【分享】使用 PXE + Kickstart 无人值守安装 Linux


    介绍

    PXE 全称 "Preboot eXecution Environment" 译: 预启动执行环境;

    能够从网络(http、vsftp、tftp)中引导操作系统安装而不是从存储中(SSD/HDD/DVD)引导操作系统安装。

    Kickstart 安装提供了一种部分自动或全自动的安装过程方式,Kickstart 文件包含安装过程中需要询问用户的所有问题与答案;

    例如: 您希望系统使用哪个时区?驱动器如何分区?要安装哪些软件包?

    因此,在安装开始时提供准备好的 Kickstart 文件就可以允许用户自动执行安装而无需任何干预,这在同时部署大量 RHEL 系统时特别有用。

    实验环境

    本实验中, PXE 服务器IP地址为: 192.168.82.200 系统为 CentOS 7.8; 需要安装的软件包如下:

    1.dnsmasq: 支持 PXE、TFTP 和 DHCP 服务的轻量级 DNS 转发工具

    2.syslinux: 用于网络引导的 Linux 引导加载程序

    3.tftp-server: 存放 vmlinuz 和 initrd 镜像并用于下载

    4.vsftpd: 用于存放 iso 镜像的所有文件并用于下载

    部署 PXE + Kickstart 服务器(按照步骤顺序跟着操作)

    1.安装 dnsmasq 软件包

    [root@localhost ~]# yum -y install dnsmas
    

    2.修改 dnsmasq 配置文件

    1. [root@localhost ~]# vim /etc/dnsmasq.conf
    2. # 以下填写你的网卡名
    3. interface=ens192,lo
    4. domain=0x01
    5. # 以下配置 DHCP 的 "接口;起始分配的IP地址; 网关; 子网掩码; 租期"
    6. dhcp-range= ens192,192.168.82.201,192.168.82.254,255.255.255.0,1h
    7. # 以下配置 PXE 服务器IP地址,也就是本机的IP地址,请自行替换 "192.168.82.200" 为自己的服务器地址
    8. dhcp-boot=pxelinux.0,pxeserver,192.168.82.200
    9. # 以下配置 DHCP 客户端分配到的网关
    10. dhcp-option=3,192.168.82.254
    11. # 以下配置 DHCP 客户端分配到的 DNS 服务器地址
    12. dhcp-option=6,223.5.5.5
    13. # 以下配置 DHCP 客户端的广播地址
    14. dhcp-option=28,192.168.82.255
    15. # 以下配置 识别到 PXE 后,命令行显示的字符串,以及持续时间60
    16. pxe-prompt="Press F8 for menu.",60
    17. # 以下配置 按完F8 后,提示符显示的字符串
    18. pxe-service=x86PC,"Install CentOS from PXE server",pxelinux
    19. # 以下启用 tftp 功能
    20. enable-tftp
    21. # 以下定义 tftp 工作目录
    22. tftp-root=/var/lib/tftpboo

    3.安装 syslinux 和 tftp-server 软件包

    syslinux 软件包提供的引导加载程序位于: /usr/share/syslinux 目录中

    tftp-server 软件包的工作目录位于: /var/lib/tftpboot 目录中

    [root@localhost ~]# yum -y install syslinux tftp-serve

    4.将 syslinux 引导加载程序复制到 tftp 服务器的工作目录

    [root@localhost ~]# cp -r /usr/share/syslinux/* /var/lib/tftpboo
    

    5.创建 PXE 配置文件

    PXE 配置文件应位于 pxelinux.cfg 目录下,默认名为: default

    1. [root@localhost ~]# mkdir /var/lib/tftpboot/pxelinux.cfg
    2. [root@localhost ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
    3. 1 default menu.c32
    4. 2 prompt 0
    5. 3 timeout 300
    6. 4 ONTIMEOUT local
    7. 5
    8. 6 menu title ########## PXE Boot Menu ##########
    9. 7
    10. 8 label 1
    11. 9 menu label ^1) Install CentOS 7.8 (minimal install)
    12. 10 kernel centos7/vmlinuz
    13. 11 append initrd=centos7/initrd.img inst.ks=ftp://192.168.82.200/pub/ks.cfg method=ftp://192.168.82.200/pub devfs=nomoun

    需要自行修改的地方:

    • 第6行: 自定义 PXE 菜单标题的名字(可选)

    • 第9行: 自定义菜单选项的名字

    • 第10行: 定义内核镜像(vmlinuz) 和 内存盘(initrd) 的位置; 如上表示在 /var/lib/tftpboot/centos7 目录下(目前该目录还未创建)

    • 第11行:
      ●  initrd=centos7/initrd.img 表示指定内存盘位于哪个目录(即还未创建的 /var/lib/tftpboot/centos7)

      ●  inst.ks=ftp://xx.xx.xx.xx/pub/ks.cfg 表示指定 kickstart 文件的位置,然后进行自动安装; 如不写,则无法全自动安装

      ●  method=ftp://xx.xx.xx.xx/pub 表示指定 iso 安装光盘的内容存放的位置

    *注:

    • ftp://xx.xx.xx.xx 换成当前服务器的 IP 地址即可; 如果你愿意,也可以用 http,但需自行部署 Nginx/Apache;

    • 如果你愿意,可以指定多个菜单(label),来创建不同的操作系统版本进行自动安装

    6.创建 vmlinuz 和 initrd 的下载目录

    [root@localhost ~]# mkdir /var/lib/tftpboot/centos
    

    7.将 iso 镜像挂载到系统上

    注意,这里的 iso 镜像是:你要批量安装系统的 iso 镜像,而不是当前系统版本的 iso 镜像

    1. [root@localhost ~]# mount /dev/sr0 /mnt
    2. [root@localhost ~]# lsblk
    3. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    4. sda 8:0 0 3000 disk
    5. ├─sda1 8:1 0 10 part /boot
    6. └─sda2 8:2 0 2990 part
    7. ├─centos-root 253:0 0 500 lvm /
    8. ├─centos-swap 253:1 0 7.90 lvm [SWAP]
    9. └─centos-home 253:2 0 241.10 lvm /home
    10. sr0 11:0 1 4.50 rom /mnt
    11. # 如果你不想把镜像挂载到光驱上,而是直接下载到系统上,则执行以下命令进行挂载:
    12. [root@localhost ~]# wget https://xxxx.xxx.com/centos/7.9/isos/CentOS-x.x.xxxx-x86_64-dvd1.iso
    13. [root@localhost ~]# mount -o loop CentOS-x.x.xxxx-x86_64-dvd1.iso /mn

    8.将 iso 镜像中的 vmlinuz 和 initrd 复制到 tftpboot 目录下的 centos7 目录

    1. [root@localhost ~]# cp /mnt/images/pxeboot/vmlinuz /var/lib/tftpboot/centos7
    2. [root@localhost ~]# cp /mnt/images/pxeboot/initrd.img /var/lib/tftpboot/centos

    9.安装 vsftpd 并将所有 iso 镜像内容复制到 ftp 工作目录

    1. [root@localhost ~]# yum -y install vsftpd
    2. [root@localhost ~]# cp -r /mnt/* /var/ftp/pub
    3. [root@localhost ~]# chmod -R 755 /var/ftp/pu

    10.创建 Kickstart 文件,必须命名为 ks.cfg 才能自动识别

    默认情况下:/root/anaconda-ks.cfg 就是当前服务器安装过程的 Kickstart 文件,直接将其复制到 ftp 工作目录;

    也就是说,用户必须自己亲自走一遍安装系统的过程,然后该 anaconda-ks.cfg 文件就会记忆用户所有的配置,包括系统的 root 密码

    [root@localhost ~]# cp /root/ anaconda-ks.cfg /var/ftp/pub/ks.cf
    

    11.修改 ks.cfg 内容,配置安装完后自动重启系统

    1. [root@localhost ~]# vim /var/ftp/pub/ks.cfg
    2. # Partition clearing information
    3. clearpart --none --initlabel
    4. reboot # <-- 手动加上,不加则安装完成后不会自动重启系

    12.配置 ks.cfg 文件权限为 755

    [root@localhost ~]# chmod 755 /var/ftp/pub/ks.cf

    13.关闭 SELinux,否则启动过程中会出现无法读取 ks.cfg 的情况(用户也可自行永久关闭 SELinux)

    [root@localhost ~]# setenforce 

    14.启动所有相关服务

    1. [root@localhost ~]# systemctl enable --now dnsmasq
    2. [root@localhost ~]# systemctl enable --now vsftp

    附: 如果不关闭防火墙,则需要开启如下端口:

    验证效果

    配置逻辑图

    end

    欢迎关注微信公众号【厦门微思网络】。http://www.xmws.cn专业IT认证培训19周年
    主要课程:思科、华为、红帽、ORACLE、VMware、CISP、PMP等认证培训及考证

  • 相关阅读:
    MySQL数据库day7.11
    Java | sleep、wait、yield、join、notify、notifyAll
    笔记软件的历史、选择策略以及深度评测
    【算法优选】 二分查找专题——壹
    ZCMU操作系统期末复习策略
    骨传导耳机用久了伤耳朵吗?骨传导耳机有什么优势
    设计模式-10--多例模式(Multition pattern)
    数据仓库任务调度器-Azkaban | 案例测试2<电话报警通知机制>
    Linux 之 Ubuntu 上 Vim 的安装、配置、常用命令的简单整理
    【深度学习】实现基于MNIST数据集的TensorFlow/Keras深度学习案例
  • 原文地址:https://blog.csdn.net/XMWS_IT/article/details/126645438