企业级批量无人值守安装

  • 一、批量无人值守安装
  • 1.简介
  • PXE工作流程
  • 2.核心技术(dhcp、httpd、tftp)
  • 3.实验
  • 3.1 准备环境
  • 3.2 防护关闭
  • 3.3 软件安装
  • 3.4 软件配置
  • DHCP服务设置
  • httpd服务配置
  • tftp服务配置
  • 3.5 编写引导安装相关文件,放到指定位置
  • 3.5.1 需要共享的文件
  • 3.5.2 导入必要文件到指定位置(内核文件、引导菜单文件)
  • 3.5.3 复制并编写引导菜单文件
  • 3.6 创建并编写无人值守安装模板文件
  • 3.7 自定义模板内容实现更多的安装需求
  • 二、网络无人值守批量装机-cobbler
  • 简介
  • 工作原理
  • cobbler部署流程
  • 1.准备工作
  • 2.安装cobbler和相关软件
  • 3.配置cobbler
  • 4.导入镜像绑定ks文件
  • 4.1 导入镜像
  • 生成ks模板文件
  • 查看指定镜像的profile配置文件,将ks文件绑定到指定镜像
  • 创建测试虚拟机进行验证
  • web管理终端
  • 5.相关目录和命令帮助


一、批量无人值守安装

1.简介

PXE(Pre-boot Execution Environment)是由intel设计的协议,它可以使计算机通过网络启动。

PXE协议分为clientserver两端,PXE client在网卡的ROM中,当计算机引导时,BIOS把PXE client调入内存执行,并显示出命令菜单,经用户选择后,PXE client将放置在远端的操作系统通过网络下载到本地运行。PXE在其启动过程中,客户端请求服务器分配IP地址,之后PXE Client使用TFTP Client通过TFTP(Trivial File Transfer Protocol)协议下载启动安装程序所需的文件。

PXE网络安装:客户机通过支持PXE的网卡向网络中发送请求DHCP信息的广播请求IP地址等信息,DHCP服务器给客户端提供IP地址和其它信息(TFTP服务器、启动文件等),之后请求并下载安装需要的文件。

Kickstart是一种无人值守的安装方式。它的工作原理是在安装过程中记录需要人工干预填写的各种参数,并记录生成一个名为anaconda-ks.cfg的文件。

装机模式:网络批量装机U盘介质批量装机

PXE工作流程

企业级批量无人值守安装_服务器

  1. PXE Client 从自己的PXE网卡启动,向本网络中的DHCP服务器索取IP和安装相关文件
  2. DHCP 服务器返回分配给客户机的IP地址,以及PXE文件的存放位置(文件一般是放在一台TFTP服务器上)
  3. PXE Client 向本网络中的TFTP服务器索取pxelinux.0 文件
  4. PXE Client 取得pxelinux.0 文件后之执行该文件
  5. 根据pxelinux.0 的执行结果,通过TFTP服务器加载内核和文件系统
  6. 进入安装画面, 此时可以通过选择HTTP、FTP、NFS 方式之一进行安装相关软件包

2.核心技术(dhcp、httpd、tftp)

dhcp:网络参数共享、tftp服务器地址、共享文件名

tftp:引导文件、菜单文件、内核和驱动文件系统

httpd:系统镜像、软件仓库、装机脚本

cobbler:批量管理server端相关软件(dhcp、tftp、httpd、dns…)rsync

cobbler优点:对于初级运维管理人员非常的友好、增加web管理页面,同时共享多个linux的发行版本

3.实验

3.1 准备环境
准备两台虚拟机,一台虚拟机进行软件配置,另一台进行测试
软件工具:dhcp、tftp-server、httpd
虚拟客户机需要关闭启动时连接
3.2 防护关闭
#SELinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
#Firewalld
systemctl stop firewalld.service
systemctl disable firewalld.service
3.3 软件安装
yum -y install httpd dhcp tftp-server syslinux 
system-config-kickstart

注意:如果CentOS 7有图形界面可以安装system-config-kickstart软件,实现手动创建*.ks.cfg文件。

3.4 软件配置
DHCP服务设置
  • 修改配置文件
cp -a /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf

vim /etc/dhcp/dhcpd.conf
option domain-name-servers 114.114.114.114;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 192.168.48.0 netmask 255.255.255.0 {
  range 192.168.48.200 192.168.48.249;
  option domain-name-servers 114.114.114.114;
  option routers 192.168.48.2;
  default-lease-time 600;
  max-lease-time 7200;
  next-server 192.168.48.110;	#填写tftp服务器IP地址
  filename "pxelinux.0";		#填写引导文件名称
}
  • 启动dhcpd服务,并设置开机自启动
systemctl enable --now dhcpd
ss -tlunp|grep dhcpd  #检查启动状态
httpd服务配置
  • 使用httpd实现光盘共享
mkdir /var/www/html/centos7
mount /dev/sr0 /var/www/html/centos7
  • 启动httpd服务、并设置开机自启
systemctl enable --now httpd
  • 检查httpd服务启动状态,以及镜像共享情况
ss -tlunp|grep httpd
http://192.168.48.110/centos7/
tftp服务配置
  • 配置xinetd服务下的tftp服务
vim /etc/xinetd.d/tftp
service tftp
{
        socket_type         = dgram
        protocol              = udp
        wait                     = yes
        user                     = root
        server                  = /usr/sbin/in.tftpd
        server_args          = -s /var/lib/tftpboot
        disable                 = no		#修改为no
        per_source           = 11
        cps                       = 100 2
        flags                     = IPv4
}
  • 启动tftp.socket,并设置开机自启动
systemctl enable --now tftp.socket
  • 检查tftp服务启动状态
systemctl status tftp
ss -tlunp | grep ":69"
3.5 编写引导安装相关文件,放到指定位置
3.5.1 需要共享的文件
  • 引导文件 - pxelinux.0
  • 引导菜单 - default{isolinux.cfg} – 开机后选择启动项的菜单文{该文件存放在一个叫:pxelinux.cfg的目录下}
  • 内核文件 - vmlinuz initrd.img
3.5.2 导入必要文件到指定位置(内核文件、引导菜单文件)
cp -a /usr/share/syslinux/pxelinux.0  /var/lib/tftpboot/
#引导文件

cp -a /var/www/html/centos7/isolinux/{vesamenu.c32,boot.msg,splash.png}   /var/lib/tftpboot/
#用来辅助完成菜单的显示

cp -a /var/www/html/centos7/images/pxeboot/{vmlinuz,initrd.img}   /var/lib/tftpboot/
#用来预加载的内核和驱动文件,然后使用预加载内核进行系统安装

ls /var/lib/tftpboot/
boot.msg  initrd.img pxelinux.0  splash.png  vesamenu.c32  vmlinuz
3.5.3 复制并编写引导菜单文件
mkdir /var/lib/tftpboot/pxelinux.cfg/
#创建菜单文件目录

cp -a /var/www/html/centos7/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
#引导菜单文件,复制并改名产生

#修改配置文件
vim /var/lib/tftpboot/pxelinux.cfg/default
default vesamenu.c32
timeout 300  #开机安装倒计时

display boot.msg
menu background splash.png

label linux
  menu label install CentOS 7 by Kickstart
  menu default
  kernel vmlinuz
  append initrd=initrd.img inst.repo=http://192.168.48.110/centos7 inst.ks=http://192.168.48.110/ks_config/centos7.cfg quiet
3.6 创建并编写无人值守安装模板文件
#创建模板目录
mkdir /var/www/html/ks_config
#编写模板文件
vim /var/www/html/ks_config/centos7.cfg

#version=DEVEL
auth --enableshadow --passalgo=sha512      #加密方式
url --url=http://192.168.88.110/centos7/  #dhcp地址
graphical
firstboot --enable
ignoredisk --only-use=sda
keyboard --vckeymap=us --xlayouts='us'
lang en_US.UTF-8
network  --bootproto=dhcp --device=ens33 --onboot=on --ipv6=auto --no-activate
network  --hostname=localhost.localdomain
rootpw --iscrypted $6$LO0oxqvmJfQOFW7p$cgV.4sVUp7UgEDSwUToHSIhRCmX4ETF2S/CoRmhnf.NHkCJvS1.Or8HENDSPkCrfnCgUlnVdxNWR0iK20GZF70	#设置root密码
firewall --disabled
selinux --disabled
services --disabled="chronyd"
timezone Asia/Shanghai --isUtc --nontp
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
clearpart --none --initlabel
part /boot --fstype="xfs" --ondisk=sda --size=1024
part swap --fstype="swap" --ondisk=sda --size=2048
part / --fstype="xfs" --ondisk=sda --grow --size=1

%packages
@^web-server-environment
@base
@core
@web-server
kexec-tools
gcc
lrzsz
mariadb-server
mariadb
%end

reboot
3.7 自定义模板内容实现更多的安装需求

设置将剩余所有空间设置成根分区

--grow --size=1

在安装后顺便执行脚本配置某些参数(以yum源为案例)

[root@localhost ~]# vim /var/www/html/ks_config/centos7.cfg
%post --interpreter=bash
cd /etc/yum.repos.d/
mkdir back
mv C* back/
echo "[centos7]
name=centos7 repo for kickstart
baseurl=http://192.168.63.133/centos7
enable=1
gpgcheck=0" >> CentOS-Media.repo
%end

reboot

注意

修改正在使用repo软件仓库配置文件,repo文件中第一行写成[development]

注意:*.ks.cfg文件可以直接找别人写好的模板用,也可以通过安装system-config-kickstart命令手动创建,但一定注意,在安装此软件包之前先做以下操作
修改正在使用repo软件仓库配置文件,repo文件中第一行写成[development]

python -c 'import crypt; print(crypt.crypt("123456", crypt.mksalt(crypt.METHOD_SHA512)))'   #使用该命令生成sha512加密之后的密码

二、网络无人值守批量装机-cobbler

简介

pxe+kickstart已经能解决网络批量装机的问题,但是存在局限的问题他只能针对某一个版本的操作系统批量安装,无法满足复杂环境的部署需求,而且安装较为复杂

本次使用cobbler是基于pxe+kickstart技术的二次封装工具,简化安装部署流程,增加对多发行版本的支持,拥有web页面进行管理,上手更加的容易。

工作原理

cobbler二次封装后的工作原理:

企业级批量无人值守安装_运维_02

cobbler部署流程

1.准备工作

添加一块新的硬盘100GB,分成两个分区,然后,分别挂载至:/iso 和 /var/www 目录上,然后再进行后续实验。

gdisk /dev/sdb

企业级批量无人值守安装_运维_03

mkfs.xfs /dev/sdb1
mkfs.xfs /dev/sdb2

mkdir /iso
mkdir /var/www/

vim /etc/fstab
/dev/sdb1 /iso xfs defaults 0 0
/dev/sdb1 /var/www xfs defaults 0 0

关闭防火墙和SELINUX

systemctl stop firewalld
systemctl disable firewalld
#关闭firewalld

setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
#关闭SELinux

配置连接到互联网

vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BOOTPROTO=none
NAME=ens33
UUID=4b1e5f8a-1eda-4f66-bbb3-119bf51479fc
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.88.110
PREFIX=24
GATEWAY=192.168.88.2
DNS1=114.114.114.114

——————————————————————
systemctl restart network

配置基础网络yum源和epel扩展yum源

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

yum clean all
yum makecache
2.安装cobbler和相关软件

安装软件

yum -y install cobbler cobbler-web tftp-server dhcp httpd xinetd

启动&设置开机自启动

systemctl enable --now httpd cobblerd
3.配置cobbler

1.检查cobbler配置,根据提示完成修改

cobbler check
——————————————————————
The following are potential configuration items that you may want to fix:

1 : The 'server' field in /etc/cobbler/settings must be set to something other than localhost, or kickstarting features will not work.  This should be a resolvable hostname or IP for the boot server as reachable by all machines that will use it.
2 : For PXE to be functional, the 'next_server' field in /etc/cobbler/settings must be set to something other than 127.0.0.1, and should match the IP of the boot server on the PXE network.
3 : change 'disable' to 'no' in /etc/xinetd.d/tftp
4 : Some network boot-loaders are missing from /var/lib/cobbler/loaders, you may run 'cobbler get-loaders' to download them, or, if you only want to handle x86/x86_64 netbooting, you may ensure that you have installed a *recent* version of the syslinux package installed and can ignore this message entirely.  Files in this directory, should you want to support all architectures, should include pxelinux.0, menu.c32, elilo.efi, and yaboot. The 'cobbler get-loaders' command is the easiest way to resolve these requirements.
5 : enable and start rsyncd.service with systemctl
6 : debmirror package is not installed, it will be required to manage debian deployments and repositories
7 : ksvalidator was not found, install pykickstart
8 : The default password used by the sample templates for newly installed machines (default_password_crypted in /etc/cobbler/settings) is still set to 'cobbler' and should be changed, try: "openssl passwd -1 -salt 'random-phrase-here' 'your-password-here'" to generate new one
9 : fencing tools were not found, and are required to use the (optional) power management features. install cman or fence-agents to use them

Restart cobblerd and then run 'cobbler sync' to apply changes.
——————————————————————

2.依次解决问题

  • 问题1和问题2
vim /etc/cobbler/settings		#修改以下配置文件内容
allow_dynamic_settings: 1
server: 192.168.48.100
next_server: 192.168.48.100
pxe_just_once: 1
manage_dhcp: 1

systemctl restart cobblerd
#一定要先重启服务然后执行下面两条命令
  • 问题3
$ vim  /etc/xinetd.d/tftp
disable = no
  • 问题4
cobbler get-loaders
#这个是原来的解决方案,但是最近官方做了重大更新,不在提供引导程序的下载功能了,so这个会报错

接下来是这个解决方案报错的解决方案!
#https://github.com/hbokh/cobbler-loaders

下载大神做好的文件
https://raw.githubusercontent.com/hbokh/cobbler-loaders/main/files/cobbler-loaders.tar.gz

yum -y install grub2-efi-x64-modules grub2-pc-modules

tar -xf /root/cobbler-loaders.tar.gz
cd /var/lib/cobbler/loaders/
cp -a /root/var/lib/cobbler/loaders/* ./
  • 问题5
systemctl enable rsyncd
systemctl start rsyncd
  • 问题6:忽略即可
  • 问题7
yum -y install pykickstart
  • 问题8
openssl passwd -1 -salt 'root' '123456'
$1$root$j0bp.KLPyr.u9kgQ428D10
#以上内容是加密密码,最终在kickstart文件中生效

vim /etc/cobbler/settings   #修改成以下内容
default_password_crypted: "$1$root$j0bp.KLPyr.u9kgQ428D10"
  • 问题9
yum -y install fence-agents

3.配置cobbler-dhcp

vim /etc/cobbler/dhcp.template
subnet 192.168.48.0 netmask 255.255.255.0 {
     option routers             192.168.48.2;
     option domain-name-servers    114.114.114.114;
     option subnet-mask          255.255.255.0;
     range dynamic-bootp         192.168.48.110 192.168.88.254;    
#未列出所有,仅列出了修改内容

systemctl restart cobblerd

4.将cobbler控制的各个服务和文件复制到指定位置

#切记,一定要在以上所有的操作都正常完成并生效后再指定以下命令。

$ cobbler sync
——————————————————————
如果又报错:dhcpd -t failed
原因:python文件内命令错误
解决:
cp -a /usr/lib/python2.7/site-packages/cobbler/modules/sync_post_restart_services.py /tmp
cd /tmp
vim sync_post_restart_services.py
#修改前dhcp_restart_command = "service %s restart" % dhcp_service_name
#修改后dhcp_restart_command = "/usr/bin/systemctl restart %s " % dhcp_service_name
python -m compileall  sync_post_restart_services.py
python -O -m compileall  sync_post_restart_services.py
#重新编译
cp -a *  /usr/lib/python2.7/site-packages/cobbler/modules/
#复制粘贴回去
systemctl restart cobbler
cobbler sync
——————————————————————

5.所有服务全部重启

systemctl restart httpd rsyncd dhcpd xinetd cobblerd tftp.socket
systemctl enable httpd rsyncd dhcpd xinetd cobblerd tftp.socket
4.导入镜像绑定ks文件
4.1 导入镜像
mkdir /iso/centos7.6/
mount -r /dev/sr0 /iso/centos7.6/
cobbler import --name="CentOS-7.6-x86_64" --path=/iso/centos7.6
#此步骤极其缓慢,主要原因是镜像太大了
#cobbler会将镜像中的所有安装文件拷贝到本地一份,放在/var/www/cobbler/ks_mirror下的CentOS-7.6-x86_64目录下。因此/var/www/cobbler目录必须具有足够容纳安装文件的空间。
ll /var/www/cobbler/ks_mirror/

cobbler profile list
#列出所有导入的镜像列表
生成ks模板文件
cd /var/lib/cobbler/kickstarts/

#可以直接导入之前pxe用的文件
vim centos7.cfg
#version=DEVEL
auth --enableshadow --passalgo=sha512      #加密方式
url --url=http://192.168.48.100/cobbler/ks_mirror/CentOS-7.6-x86_64/
#修改为指定目录
graphical
firstboot --enable
ignoredisk --only-use=sda
keyboard --vckeymap=us --xlayouts='us'
lang en_US.UTF-8
network  --bootproto=dhcp --device=ens33 --onboot=on --ipv6=auto --no-activate
network  --hostname=localhost.localdomain
rootpw --iscrypted $6$LO0oxqvmJfQOFW7p$cgV.4sVUp7UgEDSwUToHSIhRCmX4ETF2S/CoRmhnf.NHkCJvS1.Or8HENDSPkCrfnCgUlnVdxNWR0iK20GZF70	#设置root密码
firewall --disabled
selinux --disabled
services --disabled="chronyd"
timezone Asia/Shanghai --isUtc --nontp
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
clearpart --none --initlabel
part /boot --fstype="xfs" --ondisk=sda --size=1024
part swap --fstype="swap" --ondisk=sda --size=2048
part / --fstype="xfs" --ondisk=sda --grow --size=1

%packages
@^web-server-environment
@base
@core
@web-server
kexec-tools
gcc
lrzsz
mariadb-server
mariadb
%end

reboot
查看指定镜像的profile配置文件,将ks文件绑定到指定镜像
cobbler profile report --name=CentOS-7.6-x86_64
#根据提示修改内容,将自定义ks文件绑定到该镜像上
cobbler profile edit --name=CentOS-7.6-x86_64 --kickstart=/var/lib/cobbler/kickstarts/centos7.cfg
创建测试虚拟机进行验证

注意:虚拟机的内存必须大于2G,否则会出现无法安装的情况

web管理终端

https://192.168.48.110/cobbler_web

设置用户密码

grep -A 1 "\[authentication\]" /etc/cobbler/modules.conf 
[authentication]
module = authn_configfile

$ htdigest -c /etc/cobbler/users.digest Cobbler admin
Adding password for admin in realm Cobbler.
New password:
Re-type new password:

企业级批量无人值守安装_运维_04

5.相关目录和命令帮助

配置文件目录:

/etc/cobbler
/etc/cobbler/settings : cobbler 主配置文件
/etc/cobbler/iso/: iso模板配置文件
/etc/cobbler/pxe: pxe模板文件
/etc/cobbler/power: 电源配置文件
/etc/cobbler/user.conf: web服务授权配置文件
/etc/cobbler/users.digest: web访问的用户名密码配置文件
/etc/cobbler/dhcp.template : dhcp服务器的的配置末班
/etc/cobbler/dnsmasq.template : dns服务器的配置模板
/etc/cobbler/tftpd.template : tftp服务的配置模板
/etc/cobbler/modules.conf : 模块的配置文件

数据目录:

/var/lib/cobbler/config/: 用于存放distros,system,profiles 等信 息配置文件
/var/lib/cobbler/triggers/: 用于存放用户定义的cobbler命令
/var/lib/cobbler/kickstart/: 默认存放kickstart文件
/var/lib/cobbler/loaders/: 存放各种引导程序 ,镜像目录
/var/www/cobbler/ks_mirror/: 导入的发行版系统的所有数据
/var/www/cobbler/images/ : 导入发行版的kernel和initrd镜像用于 远程网络启动
/var/www/cobbler/repo_mirror/: yum 仓库存储目录

日志目录:

/var/log/cobbler/installing: 客户端安装日志
/var/log/cobbler/cobbler.log : cobbler日志
cobbler commands 介绍:
cobbler check 核对当前设置是否有问题
cobbler list 列出所有的cobbler元素
cobbler report 列出元素的详细信息
cobbler sync 同步配置到数据目录,更改配置最好都要执行下
cobbler reposync 同步yum仓库
cobbler distro 查看导入的发行版系统信息
cobbler system 查看添加的系统信息
cobbler profile 查看配置信息