当前位置: 首页 > news >正文

【分享】使用 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 配置文件

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

[root@localhost ~]# mkdir /var/lib/tftpboot/pxelinux.cfg
[root@localhost ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
     1 default menu.c32
     2 prompt 0
     3 timeout 300
     4 ONTIMEOUT local
     5
     6 menu title ########## PXE Boot Menu ##########
     7
     8 label 1
     9 menu label ^1) Install CentOS 7.8 (minimal install)
    10 kernel centos7/vmlinuz
    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 镜像

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

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

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

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

[root@localhost ~]# yum -y install vsftpd
[root@localhost ~]# cp -r /mnt/* /var/ftp/pub
[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 内容,配置安装完后自动重启系统

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

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

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

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

[root@localhost ~]# setenforce 

14.启动所有相关服务

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

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

验证效果

配置逻辑图

end

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

相关文章:

  • 我赢助手之爆款内容创作:爆款内容的底层逻辑,检查下自己的内容是否符合呢?
  • ISO认证证书上常见的认可标志
  • 【ES8】新特性
  • [CISCN2019 华东南赛区]Web11
  • 【JavaScript 逆向】猿人学 web 第五题:乱码增强
  • Python:不要在循环中删除元素
  • 地理标志农产品质量安全风险评估及预警研究
  • 计算机毕业设计springboot+vue基本微信小程序的我来运动健身系统
  • 如何前后端分离?
  • Putty连接登录Linux .ppk
  • Java面试:MySQL间隙锁是什么鬼?
  • Android 不允许在子线程中更新 UI ,你有想过这是为什么吗?
  • Numpy数组中的运算与拼接,看这篇就够了
  • Docker网络模型
  • U9二次开发之补丁制作
  • Angularjs之国际化
  • Create React App 使用
  • express + mock 让前后台并行开发
  • Iterator 和 for...of 循环
  • Kibana配置logstash,报表一体化
  • LeetCode算法系列_0891_子序列宽度之和
  • mysql 5.6 原生Online DDL解析
  • Nacos系列:Nacos的Java SDK使用
  • PHP 小技巧
  • PV统计优化设计
  • VuePress 静态网站生成
  • 成为一名优秀的Developer的书单
  • 初识 beanstalkd
  • 大数据与云计算学习:数据分析(二)
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 基于Android乐音识别(2)
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 什么是Javascript函数节流?
  • 通过npm或yarn自动生成vue组件
  • 微服务入门【系列视频课程】
  • 硬币翻转问题,区间操作
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • zabbix3.2监控linux磁盘IO
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • #AngularJS#$sce.trustAsResourceUrl
  • #微信小程序:微信小程序常见的配置传旨
  • $forceUpdate()函数
  • (3)STL算法之搜索
  • (ros//EnvironmentVariables)ros环境变量
  • (Ruby)Ubuntu12.04安装Rails环境
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • .net CHARTING图表控件下载地址
  • /boot 内存空间不够
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • [] 与 [[]], -gt 与 > 的比较
  • []Telit UC864E 拨号上网