批量安装Linux
1. 工作原理
1. PXE Client向DHCP发送请求,向本网络中的DHCP服务器获取IP。【需要安装DHCP服务】
2. DHCP服务器收到客户端的请求,验证是否来至合法的PXE Client的请求,验证通过它将给客户端“提供”响应,这个“提供”响应中包含了
2.1 为客户端分配的IP地址
2.2 pxe启动程序的TFTP的ip地址[next-server 10.0.0.7]【需要安装TFTP服务】
2.3 预启动执行环境文件pxelinux.0。[filename "/pxelinux.0"]
pxelinux.0需要安装yum install syslinux后在/usr/share/syslinux/pxelinux.0【需要安装syslinux软件】
3. PXE客户端收到服务器的pxelinux.0后自动执行
3.1 pxelinux.0在执行过程中,要读FTP服务器上的配置文件【pxelinux.cfg/default】
3.1.1 配置文件,是按照规则进行查找的
比如:一个PXE Client由DHCP Server分配的IP地址为192.168.0.22
那么相对应的配置文件名为/tftpboot/pxelinux.cfg/C0A80016【注:C0A80016为IP地址192.168.0.22的十六进制表示】。
如果找不到,就按照顺序C0A80016->; C0A8001->; C0A800->; C0A80->; C0A8->; C0A->; C0->; C->;default 查找配置文件。
所有需要在TFTP中新建目录和文件:mkdir pxelinux.cfg/default
4. 获取到pxelinux.cfg/default之后,因为default已提前定义了开机启动的最小化系统所需要的文件
文件都在Centos7的ISO镜像下的目录isolinux/initrd和isolinux/vmlinuz,这两个文件需要复制到TFTP上
4.1 kernel vmlinuz【Linux的内核】
4.2 append initrd=initrd.img【指定追加给内核的参数,initrd.img是一个最小的linux系统】
5. pxelinux.cfg/default 还需要定义通过什么安装介质来安装linux【只是进入到安装页面,不能自动应答】,这样子就会找到http上的资源【httpd服务】
如下:repo=http://192.168.10.254/Centos7
default linux
prompt 0
label linux
kernel vmlinuz
append initrd=initrd.img repo=http://192.168.10.254/Centos7
6. 在 default 上配置指定应答文件【ks.cfg】,将根据应答文件自动安装
如下:ks=http://192.168.10.254/ks.cfg
default linux
prompt 0
label linux
kernel vmlinuz
append initrd=initrd.img repo=http://192.168.10.254/Centos7 ks=http://192.168.10.254/ks.cfg
2. 安装的服务
2.1 环境拓扑
2.2 初始化系统
[root@localhost ~]# nmcli connect add type ethernet con-name static36 ifname ens36 autoconnect yes ipv4.method manual ipv4.address 192.168.10.254/24
[root@localhost ~]# nmcli connection up static36
[root@localhost ~]# yum install -y yum-utils # 此软件包使用yum-config-manager 指定阿里云yum源
[root@localhost ~]# yum-config-manager --add-repo=http://mirrors.aliyun.com/repo/Centos-7.repo
[root@localhost ~]# yum repolist all
[root@localhost ~]# yum install -y bash-completion # 命令补全软件
[root@localhost ~]# sed -i "s#SELINUX=enforcing#SELINUX=disabled#g" /etc/selinux/config
[root@localhost ~]# systemctl start firewalld.service
[root@localhost ~]# systemctl enable firewalld.service
[root@localhost ~]# reboot
#-- NAT转发
[root@localhost ~]# vi /etc/sysctl.conf # 开启ipv4的转发
net.ipv4.ip_forward = 1
[root@localhost ~]# firewall-cmd --permanent --zone=external --change-interface=ens33 # 配置ens33接口为外网口
[root@localhost ~]# firewall-cmd --permanent --zone=internal --change-interface=ens36 # # 配置ens36接口为内网口
[root@localhost ~]# firewall-cmd --zone=external --add-masquerade --permanent # 开启external[ens33]可以NAT转发
# 将源地址192.168.10.0/24 NAT到ens33接口上
[root@localhost ~]# firewall-cmd --permanent --direct --passthrough ipv4 -t nat POSTROUTING -o ens33 -j MASQUERADE -s 192.168.10.0/24
[root@localhost ~]# firewall-cmd --reload # 生效
2.3 安装DHCP服务器
[root@localhost ~]# yum -y install dhcp
[root@localhost ~]# vi /etc/dhcp/dhcpd.conf
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.10 192.168.10.200;
option routers 192.168.10.254;
option subnet-mask 255.255.255.0;
option domain-name-servers 223.6.6.6,223.5.5.5;
default-lease-time 21600;
max-lease-time 43200;
next-server 192.168.10.254;
filename "/pxelinux.0";
}
## 指定绑定网卡,因为网卡可能有很多个
[root@localhost ~]# vi /etc/sysconfig/dhcpd
DHCPDARGS=ens66
[root@localhost ~]# firewall-cmd --add-service=dhcp --permanent --zone=internal # 防火墙区域internal允许dhcp
[root@localhost ~]# firewall-cmd --reload
[root@localhost ~]# systemctl start dhcpd
[root@localhost ~]# systemctl enable dhcpd
2.4 tftp安装
## xinetd 管理tftp-server服务
[root@localhost ~]# yum -y install tftp-server xinetd
[root@localhost ~]# vi /etc/xinetd.d/tftp # 修改disable为no
disable = no
[root@localhost ~]# firewall-cmd --add-service=tftp --permanent --zone=internal # 防火墙区域internal允许tftp
[root@localhost ~]# firewall-cmd --reload
[root@localhost ~]# systemctl start xinetd
[root@localhost ~]# systemctl enable xinetd
2.5 httpd安装
#-- 将CentOS-7-x86_64-DVD-1908.iso传输到/root下,参考命令【scp .\ISO\CentOS-7-x86_64-DVD-1908.iso root@192.168.168.136:/root/】
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# mkdir /var/www/html/Centos7
#-- 临时挂载
[root@localhost ~]# mount -o loop -t iso9660 /root/CentOS-7-x86_64-DVD-1908.iso /var/www/html/Centos7/
#-- 永久挂载
[root@localhost ~]# vi /etc/fstab
/root/CentOS-7-x86_64-DVD-1908.iso /var/www/html/Centos7/ iso9660 loop,ro 0 0
[root@localhost ~]# firewall-cmd --add-service=http --permanent --zone=internal # 防火墙区域internal允许http
[root@localhost ~]# firewall-cmd --reload
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl enable httpd
3.复制文件
3.1 pxelinux.0文件复制
[root@localhost ~]# yum -y install syslinux # 为了得到pxelinux.0预启动文件
[root@localhost ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
3.2 配置default
[root@localhost ~]# mkdir /var/lib/tftpboot/pxelinux.cfg
[root@localhost ~]# vi /var/lib/tftpboot/pxelinux.cfg/default
default linux
prompt 0
label linux
kernel vmlinuz
append initrd=initrd.img repo=http://192.168.10.254/Centos7 ks=http://192.168.10.254/ks.cfg
#-- 这里prompt=0,直接读取default的标签[label linux],然后根据标签配置获取TFTP的中的文件vmlinuz和initrd
#-- 根据如上,直接复制vmlinuz和initrd到/var/lib/tftpboot/即可,其他都不需要[其他都是开机画面的定制]
[root@localhost ~]# cp /var/www/html/Centos7/isolinux/vmlinuz /var/lib/tftpboot/
[root@localhost ~]# cp /var/www/html/Centos7/isolinux/initrd.img /var/lib/tftpboot/
[root@localhost ~]# vi /var/www/html/ks.cfg
3.3 ks.cfg 文件配置
# 告知安装程序,这是一次全新安装,而不是升级
install
# 通过http下载安装镜像
url --url="http://192.168.10.254/Centos7"
# 以文本格式安装
text
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda
# 键盘和语言
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8
# 网络配置
# Network information
network --bootproto=dhcp --device=ens33 --ipv6=auto --activate
network --hostname=localhost.localdomain
# 设置用户密码123456
# Root password
auth --enableshadow --passalgo=sha512
rootpw --iscrypted $6$0Hu4r5pwNdX1zdsJ$Y58jOsbs0kSlplbtVf3lacoA7Etbf8tHH6BwxR78VT74Ut6D1Q/g.rS5GSwYZD5rAZpA4NmNlTBSZkyNZP3JZ0
# 启动服务
# System services
services --enabled="chronyd"
selinux --disabled
firewall --disabled
# 时区
# System timezone
timezone Asia/Shanghai --isUtc --nontp
# 分区,直接LVM分区,后续如果觉得不够可以自行添加
# System bootloader configuration
bootloader --location=mbr --boot-drive=sda
autopart --type=lvm
# Partition clearing information
clearpart --all --initlabel
# 安装完成重启
reboot
# 最小化安装和指定的安装软件
%packages
@^minimal
@core
yum-utils
bash-completion
%end
# KDUMP禁止
%addon com_redhat_kdump --disable --reserve-mb='auto'
%end
# 安装完成后执行的命名,这里设置阿里云的yum源镜像
%post
/usr/bin/yum-config-manager --add-repo=http://mirrors.aliyun.com/repo/Centos-7.repo
%end