pxe网络装机与实战部署(Centos系统自动化安装系统)

安装步骤总的引导:

IP地址是192.168.8.111    新装的虚拟机密码:123456

1.安装dhcp服务,注意dhcpd.conf,
yum -y install dhcp
vim /etc/dhcp/dhcpd.conf

#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example
# see dhcpd.conf(5) man page
#
subnet 192.168.8.0 netmask 255.255.255.0 {
range 192.168.8.180 192.168.8.200;
option subnet-mask 255.255.255.0;
default-lease-time 21600;
max-lease-time 43200;
next-server 192.168.8.111;
filename "/pxelinux.0";
}


systemctl start dhcpd

2.安装tftp服务器
yum -y install tftp-server xinetd
tftp配置文件改为no
systemctl start xinetd
systemctl enable xinetd
3.安装http服务
yum -y install httpd
mkdir -p /var/www/html/CentOS7
mount /dev/cdrom /var/www/html/CentOS7
systemctl start httpd
systemctl enable httpd

4 准备预启动文件
cd /var/lib/tftpboot
yum -y install syslinux
cp /usr/share/syslinux/pxelinux.0 .


5.配置default引导文件:
mkdir -p /var/lib/tftpboot/pxelinux.cfg
cp /var/www/html/CentOS7/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
cp /var/www/html/CentOS7/isolinux/* /var/lib/tftpboot/

6.准备自动应答文件/root/anaconda-ks.cfg
实例准备好:
cd /var/www/html/
mkdir ks_config
python -c 'import crypt; print(crypt.crypt("123456"))'

最后:将default和CentOS7-ks.cfg文件传到对应的目录里面去
/var/lib/tftpboot/pxelinux.cfg/default
/var/www/html/ks_config/CentOS7-ks.cfg

整理的脚本如下:

#!/bin/bash

cat << EOF

#1.安装dhcp

#2.安装tftp

#3.安装http

#4.准备预启动文件

#5.配置default引导文件

#6.准备自应答文件Centos7-ks.cfg

#7.关闭防火墙和selinux

#8.退出!!

EOF

read -p "请给出一个选择变量:" Select

  case $Select in

1)

yum -y install dhcp

cat > /etc/dhcp/dhcpd.conf  << EOF

#

# DHCP Server Configuration file.

# see /usr/share/doc/dhcp*/dhcpd.conf.example

# see dhcpd.conf(5) man page

#

subnet 192.168.8.0 netmask 255.255.255.0 {

range 192.168.8.180 192.168.8.200;

option subnet-mask 255.255.255.0;

default-lease-time 21600;

max-lease-time 43200;

next-server 192.168.8.111;

filename "/pxelinux.0";

}

EOF

systemctl start dhcpd

;;

2)

  yum -y install tftp-server xinetd

  sed -i "/disable/s/yes/no/" /etc/xinetd.d/tftp

  systemctl start xinetd

  systemctl enable xinetd

;;

3)

 yum -y install httpd

  mkdir -p /var/www/html/CentOS7

  mount /dev/cdrom /var/www/html/CentOS7

  systemctl start httpd

  systemctl enable httpd

;;

4)

 cd /var/lib/tftpboot

  yum -y install syslinux

  cp /usr/share/syslinux/pxelinux.0 ./

;;

5)

 mkdir -p /var/lib/tftpboot/pxelinux.cfg

  cp /var/www/html/CentOS7/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

  cp /var/www/html/CentOS7/isolinux/* /var/lib/tftpboot/

;;

6)

 cd /var/www/html/

  mkdir ks_config

;;

7)

  systemctl disable firewalld --now

  sed -i "/SELINUX/s/enforcing/disabled/" /etc/selinux/config

  setenforce 0

;;

8)

  exit 0

esac

 

 

 

 

干货 | PXE+kickstart无人值守批量装机(原理与架构)

图片

 

图片图片图片

你有没有想过,公司新上一批服务器,这几百台服务器如果你用U盘,或者ipmi安装操作系统,这是不是要把你近几个星期喝茶的时间都搭进去了?~~~   别害怕,有办法让你快速搞定批量、自动化系统安装,省出来的时间喝个茶、吃个鸡它不香吗~~~

 

图片图片

本文分四部分:

  • 什么是pxe

  • 什么是kickstart

  • pxe工作流程

  • ks文件详解

 

 

图片

什么是pxe

 

 

PXE(Pre-boot Execution Environment),预启动执行环境。它是intel公司开发的,用于让计算机通过网络来启动操作系统(而不是用本地U盘或本地硬盘、光盘)。

 

图片

什么是kickstart

 

 

Kickstart是一种全自动化、全程无需人工干预的自动化安装系统的技术。其工作原理是预先把安装系统过程中需要人工选择、配置的选项,通过保存成一个配置文件(例如:ks.cfg),安装过程中需要配置一些选项时,通过读取这个配置文件中的参数来自动设置这些选项,从而实现全自动化安装。

比如,我们手动安装系统的时候,会让我们选择语言、时区、键盘等,如果我们把这些配置写入ks文件,需要的时候系统自动获取ks文件的信息并配置完成,那么我们不就可以做一边吃鸡了吗!

 

图片

PXE工作流程

 

 

图片


1. PXE客户端(PXE的功能一般在服务器的网卡上)从网卡启动,发起广播报文请求IP地址等信息。(这个广播报文只有DHCP服务才会响应)

2. DHCP侦测到报文,验证是否为合法的PXE客户端请求,验证通过,会给客户端发送响应,响应中包含如下信息:

  • 分配的IP地址
  • pxelinux启动程序的位置(ftp服务器的地址,即next-server 10.0.0.61)
  • 预启动执行环境文件的名称及路径(filename “/pxelinux.0”)

3. pxe客户端收到回应后,根据地址和路径,请求ftp下载pxelinux.0文件,然后执行pxelinux.0文件,这个文件会要求去下载FTP服务器上的配置文件pxelinux.cfg/default 。

所以这一步至少下载了两个文件:pxelinux.0和default。

扩展:

其实,默认情况下并不会直接查找pxelinux.cfg/default文件:

首先查找根据MAC地址命名的引导文件,比如对于 MAC 地址“88:99:AA:BB:CC:DD”,它会搜索文件 01-88-99-aa-bb-cc-dd。

其次查找使用大写十六进制数字的 IP 地址(正在引导的机器的)命名的引导文件。例如,对于 IP 地址“192.0.2.91”,它会搜索文件“C000025B”。

上面的两种方法如果找不到引导文件,它会从末尾删除一个十六进制数字并重新搜索。

但是,如果还是找不到引导文件,它最终会寻找一个名为“default”的文件。

例如:正在引导的设备的以太网 MAC 地址为 88:99:AA:BB:CC:DD,IP 地址为 192.0.2.91,则查找顺序为:

/tftpboot/pxelinux.cfg/01-88-99-aa-bb-cc-dd
/tftpboot/pxelinux.cfg/C000025B
/tftpboot/pxelinux.cfg/C000025
/tftpboot/pxelinux.cfg/C00002
/tftpboot/pxelinux.cfg /C0000
/tftpboot/pxelinux.cfg/C000
/tftpboot/pxelinux.cfg/C00
/tftpboot/pxelinux.cfg/C0
/tftpboot/pxelinux.cfg/C
/tftpboot/pxelinux.cfg/default

 

4.ftp把配置文件发送给客户端

3-1.default是引导文件,它事先定义好了开机启动所需要的文件,所以需要再次向ftp服务器发起请求,获取以下两个文件:
  • vmlinuz linux的内核
  • initrd.img 这是一个最小的linux系统,用于初始化。
4-1. ftp把vmlinuz和initrd.img文件发送给客户端5. default文件还定义了安装所需的系统文件在哪(inst.stage2),以及自动应答的ks文件在哪,如:
label linux
  menu label ^Install CentOS 7
  menu default
  kernel vmlinuz
  append initrd=initrd.img inst.stage2=http://10.0.0.61/CentOS7/ inst.ks=http://10.0.0.61/ks_config/CentOS7-ks.cfg quiet

 

这时候就会去http服务器上找对应的安装资源,并根据ks文件自动应答。6. 把第五步找到的资源发送给pxe客户端。
参考文献:
https://docs.oracle.com/cd/E24628_01/em.121/e27046/appdx_pxeboot.htm#EMLCM12198
https://blog.csdn.net/weixin_41982957/article/details/118982859
https://www.zyops.com/autoinstall-kickstart/

图片

ks文件解析

 


先来个例子:
[root@m01 ks_config]# cat CentOS7-ks.cfg
install
url --url="http://10.0.0.61/CentOS7/"
text
lang en_US.UTF-8
keyboard us
zerombr
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet net.ifnames=0 biosdevname=0"
network --bootproto=dhcp --device=ens33 --onboot=yes --hostname=pxetest --activate
timezone --utc Asia/Shanghai
authconfig --enableshadow --passalgo=sha512
rootpw --iscrypted $6$UoRe81QPnOaqc5Yi$E7OL7FF6ez0QHqg2ZVuBgPZ/wdzywUwkjs2jZ0uwZw8/ISlp6E92tPlUcF3Ac3EmxXh46EHB7KV1DTVu.mtyX. # 设置root用户的密码
clearpart --all --initlabel
part /boot --fstype xfs --size 1024
part swap --size 1024
part / --fstype xfs --grow
firstboot --disable
selinux --disabled
firewall --disabled

%packages
@^minimal
@compat-libraries
@debugging
@development
tree
nmap
sysstat
net-tools
dos2unix
telnet
wget
vim
bash-completion
%end

%post
systemctl disable postfix.service
%end

参数解读:

https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html-single/installation_guide/index#sect-kickstart-introduction
https://docs.centos.org/en-US/centos/install-guide/Kickstart2/#sect-kickstart-syntax

 

install (可选项):默认安装模式。必须从cdrom、harddrive、nfs、liveimg或url(对于 FTP、HTTP 或 HTTPS 安装)指定安装类型。且install和安装类型分列两行,例如:

install
url --url="http://10.0.0.61/CentOS7/"

 

text (可选项):指定以文本模式执行kickstart安装。如果不指定text,默认是图形化安装。

Lang(必选项)指定语言

Keyboard(必选项)指定键盘布局

Zerombr(可选项) 是否清楚mbr

BootLoader(必选项):用来指定如何安装引导加载程序。

  •     --location 指定写入引导记录的位置。

  •     --driveorder指定哪个硬盘在 BIOS 引导顺序中排在第一位

  •     --append  指定内核参数

network(可选项) 网络设置。

  •     --activate-在安装环境中激活此设备

  •     --bootproto=dhcp, bootp,ibft或static。默认是dhcp;

  •     --device=ens33 指定对哪个网卡做配置

  •     --onboot=yes 指定是否开机启动

  •     --hostname=pxetest 设置主机名(效果和hostnamectl set-hostname 是一样的)

timezone(必选项) 设置时区

rootpw(必选项)    设置root用户的密码。

  •     --iscrypted-此选项表示密码参数已加密。此选项与--plaintext互斥。要创建加密密码,您可以使用python,这会使用随机盐生成密码的 sha512 加密兼容哈希,也可以直接用上面示例的方法:

$ python -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'

 

  •     --plaintext- 如果存在此选项,则假定密码参数为纯文本。

Clearpart(可选项)  创建新分区之前从系统中删除原来的分区

Part(必选项) 创建分区。上例中创建了三个分区:/boot  /swap  /

%packages 这是软件包段的开始,用来指定安装的软件包(组)。%end命令结尾

  •     @^   用来指定环境组。上面的例子是指定了一整个安装环境minimal。

  •     @ 指定软件包组。@development是指定development软件包组

%post    指定安装完成后需要做的动作。%end命令结尾。

  •     上面的例子是设置了命令提示符格式、禁用postfix服务、重启系统。

本文就到这了,下一期我们开始 介绍实战。

推荐阅读

ifconfig已淘汰,ip登场

Linux 云计算 学习路线(建议收藏)放后台的Linux任务没有了,试试这个命令

Linux 网络状态工具 ss 命令详解

这次终于搞明白VLAN技术了

终于有人把敏捷、DevOps、CI、CD讲清楚了

 

 

除每周二、四、六定期更新的《Linux云计算一站式教程》以外,其余时间雷哥会推送一些工作中遇到的小知识、实战经验总结的文章。后续都会收录在“实战经验”合集中。

图片

 


Cloud研习社
为Linux云计算零基础同学服务,致力于打造一套完整的linux云计算教程。包括新手学习路线、linux、存储、集群架构以及Docker,K8S,DevOps等
144篇原创内容
公众号

图片

Cloud研习社

赞赏二维码喜欢作者

收录于合集 #一站式教程
 119
上一篇最全Linux 云计算学习资源入口下一篇干货 | PXE+kickstart无人值守批量装机(实战部署)
#!/bin/bashcat << EOF#1.安装dhcp#2.安装tftp#3.安装http#4.准备预启动文件#5.配置default引导文件#6.准备自应答文件Centos7-ks.cfg#7.关闭防火墙和selinux#8.退出!!EOFread -p "请给出一个选择变量:" Select  case $Select in1)yum -y install dhcpcat > /etc/dhcp/dhcpd.conf  << EOF#!/bin/bashcat << EOF#1.安装dhcp#2.安装tftp#3.安装http#4.准备预启动文件#5.配置default引导文件#6.准备自应答文件Centos7-ks.cfg#7.关闭防火墙和selinux#8.退出!!EOFread -p "请给出一个选择变量:" Select  case $Select in1)yum -y install dhcpcat > /etc/dhcp/dhcpd.conf  << EOF## DHCP Server Configuration file.# see /usr/share/doc/dhcp*/dhcpd.conf.example# see dhcpd.conf(5) man page#subnet 192.168.8.0 netmask 255.255.255.0 {range 192.168.8.180 192.168.8.200;option subnet-mask 255.255.255.0;default-lease-time 21600;max-lease-time 43200;next-server 192.168.8.111;filename "/pxelinux.0";}EOFsystemctl start dhcpd;;2)  yum -y install tftp-server xinetd  sed -i "/disable/s/yes/no/" /etc/xinetd.d/tftp  systemctl start xinetd  systemctl enable xinetd;;3) yum -y install httpd  mkdir -p /var/www/html/CentOS7  mount /dev/cdrom /var/www/html/CentOS7  systemctl start httpd  systemctl enable httpd;;4) cd /var/lib/tftpboot  yum -y install syslinux  cp /usr/share/syslinux/pxelinux.0 ./;;5) mkdir -p /var/lib/tftpboot/pxelinux.cfg  cp /var/www/html/CentOS7/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default  cp /var/www/html/CentOS7/isolinux/* /var/lib/tftpboot/;;6) cd /var/www/html/  mkdir ks_config;;7)  systemctl disable firewalld --now  sed -i "/SELINUX/s/enforcing/disabled/" /etc/selinux/config  setenforce 0;;8)  exit 0esac
 
posted @ 2022-08-14 18:44  往事已成昨天  阅读(458)  评论(0编辑  收藏  举报