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

PXE+Kickstart自动化安装操作系统

一、自动化部署原理

1、PXE原理

PXE(Preboot execution Environment),即全程预启动执行环境,也称之为预执行环境。此环境提供了一种使用网络接口启动计算机的机制。这种机制使计算机的启动不用依赖本地数据村粗设备(如硬盘)或本地已安装的操作系统。

2、Kickstart

Kickstart是一种无人值守的安装方式。其工作原理是通过记录典型的安装过程中所需人工干预填写的各种参数,并生成ks.cfg文件。在安装过程中,安装程序会首先去查找ks.cfg这个文件,当找到合适的参数时,就会采用所找到的参数进行进一步的安装,然而,当没有找到合适参数的时候,就需要安装人员进行手工干预填参了。

3、DHCP

dhcp用来给将要安装系统的客户主机分配IP地址,也可以指定文件位置。

4、HTTPD

httpd,即超文本传输协议,本服务主要提供系统镜像源以及kickstart的配置文件等。

5、TFTP

本服务主要用来存放PXE的相关文件,例如:系统引导文件。

6、部署流程

(1)PXE客户机发出DHCP请求,向DHCP服务器申请IP地址。

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

(3)PXE客户机向TFTP服务器发起获取pxelinux.0引导程序文件的请求。

(4)TFTP服务器响应PXE客户机的请求,将其共享的pxelinux.0文件传输给PXE客户机。

(5)PXE客户机向TFTP服务器发起获取ldlinux.c32和pxeilnux.cfg/default的PXE引导配置文件请求。

(6)TFTP服务器响应PXE客户机的请求,将ldlinux.c32和pxeilnux.cfg/default文件传输给PXE客户机。PXE客户端展示pxelinux.cfg/default文件中的引导项,由用户指定选择其中一个引导项,或等待默认时间后根据文件配置中的默认引导项进行自动引导。

(7)PXE客户机根据default文件配置向TFTP服务器发起获取对应引导项的vmlinuxz压缩的虚拟机linux内核文件的请求。

(8)TFTP服务器响应PXE客户机的请求,将其共享的vmlinuxz文件传输给PXE客户机。

(9)PXE客户机根据default文件配置向TFTP服务器发起获取对应引导项的initrd.img临时文件系统文件的请求。

(10)TFTP服务器响应PXE客户机的请求,将其共享的initrd.img文件传输给PXE客户机。

(11)PXE客户机根据default文件向http、htp、nfs等网络共享服务发起获取对应ks.cfg文件。

(12)PXE客户机读取ks.cfg文件,其参数包括系统语言、时区、root用户密码、磁盘分区、安装文件位置、完成安装后自动重启等。

二、自动化部署流程

1、实验环境

PXE server:

        系统:RHEL7.9

        IP地址:172.25.254.10

2、基础配置

#配置vmset.sh脚本文件,可通过此脚本快速配置IP地址、DNS、网关、主机名、解析
[root@nginx ~]# cat /bin/vmset.sh 
#!/bin/bash
rm -fr /etc/sysconfig/network-scripts/ifcfg-$1
cat > /etc/sysconfig/network-scripts/ifcfg-$1 <<EOF
TYPE=Ethernet
BOOTPROTO=none
NAME=$1
DEVICE=$1
ONBOOT=yes
IPADDR=$2
PREFIX=24
GATEWAY=172.25.254.2
DNS1=114.114.114.114
EOFnmcli connection reload
nmcli connection up $1hostnamectl set-hostname $3cat > /etc/hosts <<EOF
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
$2	$3
EOF#给脚本添加执行权限
[root@nginx ~]# chmod +x /bin/vmset.sh#执行脚本,配置相应信息
[root@nginx ~]# vmset.sh ens33 172.25.254.10 pxe-server
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
[root@nginx ~]# bash
[root@pxe-server ~]#

3、关闭防火墙及selinux

#firewalld
#disable 关闭开机自启
#--now    立刻关闭
[root@pxe-server ~]# systemctl disable --now firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.#selinux
[root@pxe-server ~]# grubby --update-kernel ALL --args selinux=0
[root@pxe-server ~]# reboot    #重启生效
[root@pxe-server ~]# getenforce
Disabled

3、配置本地yum源

#挂载镜像源
[root@pxe-server ~]# mount /dev/sr0 /rhel7/
mount: /dev/sr0 is write-protected, mounting read-only#配置yum本地源
[root@pxe-server yum.repos.d]# cat base.repo
[repo]
name=repo
baseurl=file:///rhel7
gpgcheck=0

4、kickstart部署

在rhel7上,我们可以通过图形界面进行kickstart的配置

#下载system-config-kickstart软件包
[root@pxe-server ~]# yum install system-config-kickstart -y

然后执行system-config-kickstart命令进入图形界面,进行配置

df1d7ddc5f0642c3bb5ea78b7dbb2c69.png5bb51ba6fb99481ba709bc4ee2c328c8.pnga72243be97f1451f9bd650e5f90fb35d.png013f313c4224464c8bd96be92470fbea.pngbad06e9a846340f4b7673a9893a7edb8.pngadc8892f2cc74763bcc1704f6a8aae3e.pngd1896ec820654990a56497924c988685.png632c057232bc4d79bb14a2042f3d0f0a.pnge0db5a56df754ffb99b3563cc94578ca.png

7e9da74f24234aea82813d1d264f81b8.png14c02225ab7b4662955b4f8afda058c3.png

生成ks.cfg文件到/root目录后,我们还可以添加一些内容,如安装httpd软件包

d79b1674666942bc91ab9ab884488238.png

5、网页访问ks.cfg

#下载httpd软件包
[root@pxe-server ~]# yum install httpd -y#将ks.cfg文件移动到httpd服务的默认发布目录/var/www/html
[root@pxe-server ~]# cp ks.cfg /var/www/html/#启动httpd服务,并设置开机自启动
[root@pxe-server ~]# systemctl enable --now httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

然后我们通过浏览器访问IP/ks.cfg,即可看到ks.cfg文件内容

769b7673ba0a4457a41b74b36427ae37.png

6、网页访问镜像源

#将我们挂载镜像的目录/rhel7链接到httpd默认发布目录/var/www/html
[root@pxe-server ~]# ln -s /rhel7/ /var/www/html/

同理,我们通过可以通过浏览器访问IP/rhel7,即可看到我们挂载镜像源的文件内容

fa89ea6c057d4ebf8e01dee33e46be59.png

7、部署DHCP服务

#首先,下载dhcp安装包
[root@pxe-server ~]# yum install dhcp -y#进入dhcp配置文件,我们可以发现仅有注释,没有任何配置内容
[root@pxe-server ~]# cd /etc/dhcp/
[root@pxe-server dhcp]# vim dhcpd.conf
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example
#   see dhcpd.conf(5) man page#我们可以根据注释,将/usr/share/doc/dhcp*/dhcpd.conf.example这个文件复制到我们默认的配置目录中
#cp前的\表示使用cp原命令,而不是alias命名后的命令。-f表示强制覆盖拷贝
[root@pxe-server dhcp]# \cp -f /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
cp: overwrite ‘/etc/dhcp/dhcpd.conf’? y#然后进入/etc/dhcp/dhcpd.conf配置文件进行一些修改
[root@pxe-server ~]# vim /etc/dhcp/dhcpd.conf
option domain-name "example.org";
option domain-name-servers 114.114.114.114;default-lease-time 600;
max-lease-time 7200;log-facility local7;subnet 172.25.254.0 netmask 255.255.255.0{     #DHCP地址池子网,子网掩码range 172.25.254.30 172.25.254.40;           #DHCP地址池范围option routers 172.25.254.2;                 #网关next-server 172.25.254.10;                   #引导服务tftp的地址filename "pxelinux.0";                       #引导程序文件名
}#修改完配置文件后,启动DHCP服务,并设置开机自启动
[root@pxe-server ~]# systemctl enable --now dhcpd
Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpd.service to /usr/lib/systemd/system/dhcpd.service.

8、部署TFTP服务

#同样,我们要先下载安装包,这里需要下载的是tftp-server这个安装包
[root@pxe-server ~]# yum search tftp
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-managerThis system is not registered with an entitlement server. You can use subscription-manager to register.================================ N/S matched: tftp ================================
syslinux-tftpboot.noarch : SYSLINUX modules in /var/lib/tftpboot, available for: network booting
tftp.x86_64 : The client for the Trivial File Transfer Protocol (TFTP)
tftp-server.x86_64 : The server for the Trivial File Transfer Protocol (TFTP)Name and summary matches only, use "search all" for everything.
[root@pxe-server ~]# yum install tftp-server -y#在rhel7中,共享pxelinux.0数据文件的网络服务是由syslinux这个软件包所提供的
[root@pxe-server ~]# yum install syslinux -y#下载完成后,我们需要将pxelinux.0以及/rhel7/isolinux/中的所有文件移动到/var/lib/tftpboot/下
[root@pxe-server ~]# cd /var/lib/tftpboot/
[root@pxe-server tftpboot]# cp /usr/share/syslinux/pxelinux.0 .
[root@pxe-server tftpboot]# cp /rhel7/isolinux/* .
[root@pxe-server tftpboot]# ll
total 112148
-r--r--r-- 1 root root     2048 Aug  4 20:46 boot.cat
-r--r--r-- 1 root root       84 Aug  4 20:46 boot.msg
-r--r--r-- 1 root root      321 Aug  4 20:46 grub.conf
-r--r--r-- 1 root root 51211620 Aug  4 20:46 initrd.img
-r--r--r-- 1 root root    24576 Aug  4 20:46 isolinux.bin
-r--r--r-- 1 root root     3166 Aug  4 20:46 isolinux.cfg
-r--r--r-- 1 root root   190896 Aug  4 20:46 memtest
-rw-r--r-- 1 root root    26743 Aug  4 20:46 pxelinux.0
-r--r--r-- 1 root root      186 Aug  4 20:46 splash.png
-r--r--r-- 1 root root     2438 Aug  4 20:46 TRANS.TBL
-r--r--r-- 1 root root 56427369 Aug  4 20:46 upgrade.img
-r--r--r-- 1 root root   153104 Aug  4 20:46 vesamenu.c32
-r-xr-xr-x 1 root root  6769496 Aug  4 20:46 vmlinuz#然后,在/var/lib/tftpboot/中创建pxelinux.cfg目录,并将isolinux.cfg引导文件模板拷贝到此目录中,并改名为default
[root@pxe-server tftpboot]# mkdir pxelinux.cfg
[root@pxe-server tftpboot]# mv isolinux.cfg pxelinux.cfg/default

然后,对/var/lib/tftpboot/pxelinux.cfg/default文件进行修改

4939d787671f402297c10d33ec1cfd90.png

52ea969f9904440a9be3270ba30652e9.png

修改完成后,由于此文件没有修改权限,我们通过:x!或者:wq!强制保存退出即可,然后启动tftp服务并设置开机自启动

[root@pxe-server tftpboot]# systemctl enable --now tftp
Created symlink from /etc/systemd/system/sockets.target.wants/tftp.socket to /usr/lib/systemd/system/tftp.socket.

三、自动化部署装机验证

因为我们在PXE服务器中已经设置了DHCP服务,所以一定要注意,关掉虚拟机软件中的DHCP服务,否则会与我们服务器中的DHCP产生冲突

53a81846c90f44868e70995fc017447c.png

ef2ba6563e9a48398963e7c575069539.png

我们新建一台rhel7的虚拟机,并且删除CD/DVD(SATA)

b489e3a8e9a64733a9c461ad31f60cd0.png

然后通过打开电源时进入固件,开机后就会进入BIOS模式

48d804e440fd46c59cce6110438cc370.png

进入BIOS界面后,我们切到Boot,将Net'work boot from Intel E1000移动到首行,即通过网卡模式启动

4253b82f20004e139f29a37b35f75107.png

然后保存退出,启动虚拟机

d69f9859646f4ba9af74e80b7c492442.png

启动后,就能够进行全自动化装机,我们等待装好即可。

0a159ad60fc44140aaf9835286e0415c.png

安装完成后,进行验证即可

fcef92bbb88a4e41b8987d53c1b998c4.png

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 荒原之梦考研:考研二战会很难吗?
  • 二十八、【人工智能】【机器学习】【PyTorch】- 手写体识别
  • 下一个排列
  • FFmpeg有理数相关的源码:AVRational结构体和其相关的函数分析
  • 英伟达显卡查看占用情况
  • 设计模式实战:报表生成系统的设计与实现
  • Chapter 22 数据可视化——折线图
  • Chapter 26 Python魔术方法
  • 用phpstudy搭建MySQL数据库
  • WebKit 的简介及工作流程
  • 科普文:JUC系列之多线程门闩同步器CountDownLatch的使用和源码
  • C++STL专题-string类
  • 低代码: 技术实现概述
  • 部署k8s+conatinerd环境
  • 【学习笔记】后缀自动机(SAM)
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 30秒的PHP代码片段(1)数组 - Array
  • Create React App 使用
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Java方法详解
  • Just for fun——迅速写完快速排序
  • Linux各目录及每个目录的详细介绍
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • Shadow DOM 内部构造及如何构建独立组件
  • SpiderData 2019年2月25日 DApp数据排行榜
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 从setTimeout-setInterval看JS线程
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 嵌入式文件系统
  • 一起参Ember.js讨论、问答社区。
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​人工智能书单(数学基础篇)
  • ​业务双活的数据切换思路设计(下)
  • # .NET Framework中使用命名管道进行进程间通信
  • # dbt source dbt source freshness命令详解
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (分布式缓存)Redis分片集群
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (算法二)滑动窗口
  • (转)关于pipe()的详细解析
  • (转)关于多人操作数据的处理策略
  • .bat批处理出现中文乱码的情况
  • .mysql secret在哪_MySQL如何使用索引
  • .Net Core 中间件与过滤器
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .NET 中 GetProcess 相关方法的性能
  • @31省区市高考时间表来了,祝考试成功
  • [ 网络基础篇 ] MAP 迈普交换机常用命令详解
  • [145] 二叉树的后序遍历 js
  • [22]. 括号生成
  • [AIGC 大数据基础]hive浅谈
  • [Android]使用Retrofit进行网络请求
  • [BT]小迪安全2023学习笔记(第15天:PHP开发-登录验证)
  • [C#] 基于 Token 的鉴权与签名机制详解 接口对接鉴权 token、sign(a=1b=2c=3d=4)、Base64、参数加密、MD5