PXE安装Centos7、Centos8

预启动执行环境(Preboot eXecution Environment,PXE)也被称为预执行环境,提供了一种使用网络接口(Network Interface)启动计算机的机制。这种机制让计算机的启动可以不依赖本地数据存储设备(如硬盘)或本地已安装的操作系统。 

 部署环境

功能 IP 用途
PXE服务器 192.168.1.130 DHCP、TFTP、HTTP、PXE
客户端 192.168.1.10 测试机,通过pxe安装OS

安装组件

组件功能介绍

Kickstart: 将安装过程的参数写入到ks.cfg文件,实现自动安装配置达到无人值守自动安装;
TFTP: 支持PXE 引导的网卡从tftp服务器端下载pxelinux.0、vmlinuz、initrd.img等内核引导文件;
DHCP: PXE引导过程中先获取IP地址,并提供pxelinux.0文件位置;
HTTP: 用于下载ks.cfg以及系统镜像文件。

[root@server ~]# yum install nginx
[root@server ~]# yum install dhcp
[root@server ~]# yum install tftp-server
[root@server ~]# yum install syslinux

 HTTP配置

建立7和8 web目录

[root@server ~] # mkdir /dataweb/centos/{7,8}/os/x86_64 -p
[root@server /]# tree dataweb/
dataweb/
└── centos
    ├── 7
    │   └── os
    │       └── x86_64
    └── 8
        └── os
            └── x86_64
  • 将centos7和8的iso文件挂载到服务器端

 PXE安装Centos7、Centos8_第1张图片PXE安装Centos7、Centos8_第2张图片

  • nginx配置
# 修改nginx配置文件
[root@server ~]# cat /etc/nginx/conf.d/repo.conf 
server {
    listen 80;
    server_name localhost;
    location / {
        root /dataweb;
        index index.html index.php index.htm;
        autoindex on;   # 允许显示目录
    }
}

# 挂载光盘到dataweb目录,按实际需求更改挂载点
[root@server ~]# mount /dev/sr0 /dataweb/centos/8/os/x86_64/
mount: /dev/sr0 is write-protected, mounting read-only
[root@server ~]# mount /dev/sr1 /dataweb/centos/7/os/x86_64/
mount: /dev/sr1 is write-protected, mounting read-only

# 启动nginx服务
[root@server ~]# systemctl restart nginx

PXE安装Centos7、Centos8_第3张图片PXE安装Centos7、Centos8_第4张图片

 制作kickstart应答文件

使用原有系统安装完成后生成的anaconda-ks.cfg文件,复制副本重新修改,生成新的ks文件。

  •  编写应答文件
[root@server ~]# mkdir /dataweb/ksdir
# 复制应答模板文件
[root@server ~]# cp anaconda-ks.cfg /dataweb/ksdir/ks7-mini.cfg
[root@server ~]# cp anaconda-ks.cfg /dataweb/ksdir/ks8-mini.cfg
# 给文件赋予读权限
[root@server ~]# chmod +r *
  •  生成密钥串(非必须)不修改的话为当前系统的安装密码,也可以修改成明文显示密码,参数见详细说明。
[root@server ~]# python -c 'import crypt;print crypt.crypt("123456")'
$6$lo6Yc9wZr0sQaIAv$Sx2u.hll/zm00Q88dNIEvY9jMSkfvyAq81fUJ0drU.Ty/g6BI7WolMHlJoJufOXYixQt6GSb1T4dkqByHuX7L.
  • ks.cfg应答文件详细配置,实际上该模板可以在各个版本间通用,配置时注意修改安装源地址和其他需要修改的配置即可。
[root@server ~]# cd /dataweb/ksdir
[root@server ksdir]# cat ks7-mini.cfg
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# 安装还是更新系统
install
# 安装源
url --url=http://192.168.1.130/centos/7/os/x86_64
# 使用字符界面安装系统
text
# Run the Setup Agent on first boot
firstboot --disable
# 从sda分区,线上环境注意修改,不同类型磁盘显示不同
ignoredisk --only-use=sda
# 键盘布局
keyboard --vckeymap=us --xlayouts='us'
# 系统语言,关闭selinux和firewall
lang en_US.UTF-8
selinux --disabled
firewall --disabled
# 网络设置
network  --bootproto=dhcp --device=eth0 --onboot=on --ipv6=auto --no-activate
network  --hostname=localhost.localdomain
bootloader --append="net.ifnames=0" --location=mbr
# root密码设置,采用密钥串形式,此处密码为123456,如果不修改的话默认为当前系统安装时的密码
rootpw --iscrypted $6$lo6Yc9wZr0sQaIAv$Sx2u.hll/zm00Q88dNIEvY9jMSkfvyAq81fUJ0drU.Ty/g6BI7WolMHlJoJufOXYixQt6GSb1T4dkqByHuX7L.
# System services
services --disabled="chronyd"
# 设置时区
timezone Asia/Shanghai --isUtc --nontp
# 清除主引导记录
clearpart --all
# 清除所有分区
zerombr
# 分区信息,以下配置为标准分区
part /boot --asprimary --fstype="xfs" --size=500
part swap --fstype="swap" --size=2048
part / --asprimary --fstype="xfs" --size=4096
# 安装软件包 @为软件包组、@^为环境包组、直接输入软件包名、- 按排列顺序安装某个软件包
%packages
@minimal-environment
net-tools
tree
wget
vim
%end

%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
reboot

ks8-mini.cfg配置文件

[root@server ksdir]# cp ks7-mini.cfg ks8-mini.cfg
[root@server ksdir]# cat ks8-mini.cfg
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# 安装还是更新系统
install
# 安装源,修改为8的安装文件
url --url=http://192.168.1.130/centos/8/os/x86_64

...... 其他配置保持不变 ......

kickstart详细参数说明

ignoredisk: 在安装过程中控制对磁盘的连接,如果你使用的是自动分区,那么在安装过程中可以通过 ignoredisk --driver=sdc 指定自动分区忽略的磁盘,如果你有多个磁盘,并且只想使用其中一个进行自动分区,并安装操作系统,你可以使用 ignoredisk --only-use=sda 指定只使用 sda 这一个磁盘。线上基本不可能为sda按实际情况修改

autopart: 自动创建根分区( / ),交换分区(swap)和适当的启动分区(/boot),在足够大的驱动器上,还会创建 /home 分区;通过 --type= 指定分区类型,如示例中使用的标准分区。你还可以通过 --fstype= 指定系统文件类型,如 xfsext4 等等,默认是 xfs;你还可以通过 --encrypted 选项,对所有分区进行加密。

clearpart: 在分区前,删除现有分区;可以通过 --drives= 指定要删除分区的磁盘,也可以通过 --all 清除所有设备的分区。

graphical: 安装过程以图形化的方式进行,就和手动安装一样;也可以使用 text 命令,以文本的方式显示安装过程。

reboot: 安装完成后重启。

repo: 指定额外的软件包安装源。

url: 通过网络安装时,安装文件的位置。

keyboard: 指定键盘布局;通过 --vckeymap= 指定应使用哪个 VConsole 键盘模式;通过 --xlayouts= 指定键盘的布局。

firstboot: 第一次启动系统时,是否显示 Initial Setup;如果启用,则必须安装 initial-setup 软件包,如果未指定,则默认禁用这个选项;--enable 表示启动 Initial Setup、--disable 表示禁用 Initial Setup;你还可以使用 --reconfig 选项在引导系统时启动重配置(reconfiguration)模式,在这个模式下,你可以重新配置系统语言,键盘鼠标,root 密码,系统安全级别,时区以及网络配置。

lang: 配置系统语言。

network: 网络配置,使用 --bootproto= 指定计算机获取 IP 的方式,是 dchp 还是 static。使用 --device= 指定要配置的设备名称。使用 --activate 激活该设备。如果你的 --bootproto= 使用的是 static,那么你可以使用 ip= 指定 IP 地址,--netmask= 指定子网掩码,--gateway= 指定网关,--nameserver= 指定 DNS。使用 ipv6= 指定 IPv6 配置,使用auto 表示自动配置。使用 --hostname 配置主机名。

rootpw: 指定 root 用户的密码,--iscrypted 表示密码以密文的方式显示,--plaintext 表示以明文的方式显示密码,还可以使用 --lock 锁定 root 用户。

当你使用 --iscrypted 时,可以在一台已经安装好系统的机器上,通过 python 生成密码的密文(如果是 Python 3,则对应的命令应该是 python3的语法。

$ python -c 'import crypt; print crypt.crypt("My Password")'

xconfig: 配置 X Windows 系统,--startxonboot 表示在安装的系统中使用图形界面登录。

services: 配置服务的默认状态,--disabled= 指定默认禁用的服务,使用 --enabled= 指定默认启用的服务。

timezone: 指定时区。

user: 添加额外的用户,通过 --name= 指定用户名,通过 --groups= 指定用户要添加的组(除默认组),通过 --password= 指定该用户的密码,--iscrypted 表示以密文的方式,通过--gecos= 定义用户的 GECOS信息,如,用户的全名等等。

%packages 表示要安装的软件包。

通过 @ 指定软件包组,如:

%packages
@core
@X Window System
@Desktop
%end

通过 @^ 指定环境组,如:

%packages
@^graphical-server-environment
%end

直接输入软件包名,指定独立的软件包,如:

%packages
@core
@desktop
sqlite
curl
%end

通过 - 号排除软件包组中的某个软件包

%packages
@Development Tools
-pkgconf
-pkgconf-m4
-pkgconf-pkg-config
-redhat-rpm-config
%end

%package 要以 %end 结尾。

%addon 配置 kdump。--enable 表示开启,并通过 --reserve-mb= 指定为 kdump 预留的内存大小,auto 表示自动,要以 %end结束。

%anaconda 部分指定 password 策略,以 %end 结束。

你还可以通过 %pre 指定在磁盘分区前要执行的脚本,通过 %post 指定系统安装完成后要执行的脚本。这些模块都需要 %end 结束。

 DHCP配置

复制dhcpd模板文件到/etc/dhcp/dhcpd.conf,再修改相应选项,或者自行编写最小化模板。

[root@server ~]# cat /etc/dhcp/dhcpd.conf 
# 设置租约时间和最大租约时间
default-lease-time 600;
max-lease-time 7200;
# 定义域名
option domain-name "localhost.com";
# 定义地址池的子网、掩码、网关和地址池范围
subnet 192.168.1.0 netmask 255.255.255.0 {
      range 192.168.1.10 192.168.1.100;
      option routers 192.168.1.1;
# 定义引导服务器,即tftp服务器的引导文件和tftp服务器地址,注意此处的filename是有针对性的,此处的文件只是基于linux -X86的架构有效。
      next-server 192.168.1.130;
      filename "pxelinux.0";
}

# 启动服务
[root@server ~]# systemctl restart dhcpd

 tftp配置

vesamenu.c32menu.c32是syslinux所拥有众多模块中的两个,它们的功能是制定启动器使用什么模式。vesamenu.c32图形模式,menu.c32文本模式。此处选择menu.c32。同时还需要pxelinux.0文件,它对整个引导器的作用就如同内核对系统的作用,它可以解释default文件(配置引导菜单的文件)中的每个配置项,并根据配置项做出不同的反应,如等待的时间、启动器背景、启动菜单、内核引导等。

# Centos7拷贝如下文件
[root@server ~]# cd /var/lib/tftpboot
[root@server tftpboot]# mkdir 7 8
[root@server tftpboot]# mkdir pxelinux.cfg
[root@server tftpboot]# cp /usr/share/syslinux/{pxelinux.0,menu.c32} .                  
[root@server tftpboot]# cp /dataweb/centos/7/os/x86_64/isolinux/{vmlinuz,initrd.img} 7

# Centos8环境拷贝以下文件
[root@server ~]# cd /var/lib/tftpboot/
[root@server tftpboot]# cp /dataweb/centos/8/os/x86_64/isolinux/{ldlinux.c32,libutil.c32,libcom32.c32} .
[root@server tftpboot]# cp /dataweb/centos/8/os/x86_64/isolinux/{vmlinuz,initrd.img} 8

# 目录结构
[root@server lib]# tree tftpboot/
tftpboot/
├── 7
│   ├── initrd.img
│   └── vmlinuz
├── 8
│   ├── initrd.img
│   └── vmlinuz
├── ldlinux.c32
├── libcom32.c32
├── libutil.c32
├── menu.c32
├── pxelinux.0
└── pxelinux.cfg

# 启动服务
[root@server ~]# systemctl restart tftp

启动引导配置

其他教程选择复制模板再进行修改,此处自行编写最小化引导启动。

[root@server tftpboot]# vim pxelinux.cfg/default
# 如果将值修改为正文mini标签的话,默认选择mini标签,不会让用户选择
default menu.c32
timeout 600
# 背景标题
menu title ########## GXM-PXE Boot Menu ##########

label mini7
    menu label install centos mini 7
    kernel 7/vmlinuz
    append initrd=7/initrd.img ks=http://192.168.1.130/ksdir/ks7-mini.cfg

label mini8
    menu label install centos mini 8
    kernel 8/vmlinuz
    append initrd=8/initrd.img ks=http://192.168.1.130/ksdir/ks8-mini.cfg

label local
    menu default
    menu label ^Boot from local drive
    localboot 0xffff

测试

新建虚拟机, 测试pxe安装是否成功。

  • bios设置为网络启动
PXE安装Centos7、Centos8_第5张图片 bios设置网络启动
  •  开机引导界面
    g PXE安装Centos7、Centos8_第6张图片 启动引导界面

 至此,通过PXE实现自动化安装系统成功完成。

你可能感兴趣的:(Linux运维,PXE,centos,自动化,linux)