公司每次上线的服务器都挺多的,机房那边每次都需要一台一台去装系统,在装系统上花费了很多时间,以至于交付到软件运维手里已经很晚了,项目一般都是急着要上线,所以软件运维都是加班去操作。考虑到这种现状,公司内部经过讨论后决定部署一套自动装机系统,最终采用了pxe+kickstar这种方式。
之前试了用preseed.seed方式安装,发现不太好用。这里使用的是ks.cfg方式安装的。简单说下两者的区别。
1.ubuntu用U盘安装方式可以使用seed文件。
2.kickstart安装方式不可以使用seed。
以下为system-config-kickstart=ks.cfg方式安装
准备工作
1.ubuntu18.04服务器一台
2.ubuntu Server镜像
3.一台路由器,开启dhcp服务,我的网段为192.168.61.1/24
4.待安装的服务器
pxe+kickstar服务器搭建
1.下载镜像(注意:不要选择 live 版本和desktop版本,目前 Ubuntu 18.04 只有 server 可以正常安装,可在该网站下载镜像:http://cdimage.ubuntu.com/releases)
2.挂载镜像
#创建挂载目录
mkdir /mnt/ubuntu
#挂载镜像
mount -o loop ubuntu-18.04.6-server-amd64.iso /mnt/ubuntu
3.安装软件
apt-get update
#安装前先关闭域名解析服务,此服务占用了53端口,与dnsmasq服务端口会冲突
systemctl stop systemd-resolved.service
systemctl disable systemd-resolved.service
apt-get install dnsmasq nginx system-config-kickstart -y
dnsmasp:用来实现 DHCP 分配地址以及 TFTP 协议下载最小 OS 启动文件(其实也有用 dhcpd+tftp 实现的,但这个更方便,配置一次即可)。
nginx:用来实现 HTTP 协议下载系统镜像。
system-config-kickstart:用来无人值守安装。
4.配置网络为静态
root@fu-virtual-machine:~# cat /etc/netplan/01-network-manager-all.yaml
# Let NetworkManager manage all devices on this system
network:
version: 2
renderer: NetworkManager
ethernets:
ens33: #配置的网卡名称,使用ifconfig -a查看得到
dhcp4: no #dhcp4关闭
addresses: [192.168.61.134/24] #设置本机IP及掩码
gateway4: 192.168.61.1 #设置网关
nameservers:
addresses: [192.168.61.1] #设置DNS
修改dns配置
root@fu-virtual-machine:~# cat /etc/dnsmasq.conf
bogus-priv
filterwin2k
interface=ens33
dhcp-range=192.168.61.10,192.168.61.100,12h
dhcp-boot=pxelinux.0
enable-tftp
tftp-root=/var/lib/tftpboot
dhcp-authoritative
server=114.114.114.114
dhcp-option = option:router,192.168.61.2
5.创建tftp目录与nginx根目录
mkdir -p /var/lib/tftpboot
cp -Rf /mnt/ubuntu/install/netboot/* /var/lib/tftpboot
mkdir /var/www
cp -Rf /mnt/ubuntu /var/www
6.配置nginx
location / {
root /var/www;
autoindex on; # 注意这里!!!
index index.html index.htm;
}
7.启动dnsmasq与nginx
systemctl enable dnsmasq.service
systemctl restart dnsmasq.service
systemctl enable nginx
systemctl restart nginx
8.配置kickstar(响应文件ks.cfg)
root@fu-virtual-machine:~# cat /var/www/ks.cfg
#Generated by Kickstart Configurator
#platform=AMD64 or Intel EM64T
#System language
lang en_US
#Language modules to install
langsupport en_US
#System keyboard
keyboard us
#System mouse
mouse
#System timezone
timezone Asia/Shanghai
#Root password
#Initial user
rootpw --disabled
#Initial user
user --disabled
#Install OS instead of upgrade
user ubuntu --fullname="ubuntu" --password ubuntu_123
#Reboot after installation
reboot
#Use text mode install
#text
#Install OS instead of upgrade
#install
#Use Web installation
url --url http://192.168.61.134/ubuntu
#System bootloader configuration
bootloader --location=mbr
#Clear the Master Boot Record
zerombr yes
#Partition clearing information
clearpart --all --initlabel
#Disk partitioning information
part / --fstype ext4 --size 1 --grow --asprimary
#System authorization infomation
auth --useshadow --enablemd5
#Network information
#network --bootproto=dhcp --device=eth0
#Firewall configuration
firewall --disabled
#Do not configure the X Window System
skipx
%packages
openssh-server
openssh-client
net-tools
curl
%post
#cd /root/installationytungsingle_offline
#bash install.sh
9.修改引导文件
root@fu-virtual-machine:~# cat /var/lib/tftpboot/pxelinux.cfg/default
# D-I config version 2.0
# search path for the c32 support libraries (libcom32, libutil etc.)
path ubuntu-installer/amd64/boot-screens/
include ubuntu-installer/amd64/boot-screens/menu.cfg
default ubuntu-installer/amd64/boot-screens/vesamenu.c32
default install
label install
kernel ubuntu-installer/amd64/linux
append ks=http://192.168.61.134/ks.cfg initrd=ubuntu-installer/amd64/initrd.gz –
prompt 0
timeout 0
10.修改 PXE 启动配置文件
root@fu-virtual-machine:~# cat /var/lib/tftpboot/ubuntu-installer/amd64/boot-screens/txt.cfg
default install
label install
menu label ^Install
kernel ubuntu-installer/amd64/linux
append ks=http://192.168.61.134/ks.cfg vga=788 initrd=ubuntu-installer/amd64/initrd.gz live-installer/net-image=http://192.168.61.134/ubuntu/install/filesystem.squashfs clock-setup/ntp=false ip=dhcp ksdevice=bootif - quit
11.安装,现在未安装系统的机器开机即可自动装机了。
参考网址:
https://blog.xizhibei.me/2019/10/21/how-to-install-more-than-10-os-in-an-hour-with-pxe/
https://blog.51cto.com/u_14783669/2993435
ks.cfg的配置详解可参考:
https://blog.csdn.net/vic_qxz/article/details/100263801