通过远程控制接口批量安装系统

文章目录
  1. 1. 前言
  2. 2. 安装步骤
  3. 3. 搭建PXE服务器
    1. 3.1. 基本准备
    2. 3.2. DHCP和FTP
    3. 3.3. 配置netboot
    4. 3.4. 安装系统
  4. 4. PXE服务器升级
    1. 4.1. 配置内网镜像
    2. 4.2. 添加硬盘启动
    3. 4.3. 自动选择安装源
    4. 4.4. 配置无人值守
      1. 4.4.1. ks.cfg
      2. 4.4.2. ubuntu-server.seed
    5. 4.5. 配置手动安装
  5. 5. 批量安装
  6. 6. 配置静态IP
  7. 7. 后记
  8. 8. 书签

前言

《通过远程控制接口给服务器安装系统》一文中,我们发现通过远程控制接口给服务器安装系统很方便。《Ubuntu系统批量自动安装》一文中,我们学会了使用PXE技术进行系统的批量安装。

这两者结合,能产生怎样的魔力?下面是见证奇迹的时刻。

需求:机房里有40台曙光I620-G20机器需要安装Ubuntu16 Server系统,曙光供应商说需要两天的工作量,报价五千元。那么自己安装的话,需要多长时间?也需要两天吗?

安装步骤

1、进入机房,给40台机器配置远程控制接口的IP。参考《通过远程控制接口给服务器安装系统》的远程控制接口配置部分。

2、搭建PXE服务器。参考《Ubuntu系统批量自动安装》,并且进行改进。

3、远程控制批量安装系统。

搭建PXE服务器

基本准备

1、一台服务器,已经安装好了Ubuntu16 Server版系统,IP为172.16.0.162。
2、更换源列表并更新,参考《Ubuntu更换源列表》
3、切换到root用户,sudo -i
4、开启路由转发,echo 1 > /proc/sys/net/ipv4/ip_forward。务必开启,因为PXE服务器同时作为网关,不开启的话安装会卡住。
5、在PXE服务器上安装DNS服务(可选操作,没有什么影响)。

DHCP和FTP

本节主要参考How to Install Ubuntu via PXE Server Using Local DVD Sources

1、安装DHCP和FTP服务
apt-get install dnsmasq

2、指定DHCP网卡
ip add,看到正在使用的网卡为ens2f1(172.16.0.162)。

3、配置dnsmasq
vim /etc/dnsmasq.conf,在文件末尾添加:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
interface=ens2f1
dhcp-range=172.16.0.163,172.16.0.254,24h
dhcp-option=3,172.16.0.162
dhcp-option=6,172.16.0.162
dhcp-option=28,172.16.0.255
dhcp-option=42,0.0.0.0
dhcp-boot=pxelinux.0,172.16.0.162
enable-tftp
tftp-root=/tftpboot
# gateway to Internet
#dhcp-option=3,172.16.0.135
# real dns server
#dhcp-option=6,172.20.1.4
#server=8.8.4.4

dhcp-option=3表示网关,6表示域名服务器,28表示broadcast,48表示时间服务器。server表示DNS forwarder IPs Address。

需要注意的是,网关一定要配置,否则在使用内网镜像安装时会特别慢。在获取镜像时卡住半小时,查看安装日志如下图所示;在“Updating the list of available packages”时也会卡住半小时。

而且,最好不要让服务器连接到外网,否则安装过程中会自动从网络中获取更新,安装就会很慢。就像本文中的配置,网关和域名服务器都设置为PXE服务器的IP,而不是真实的可以访问外网的网关和域名服务器。

4、查看服务
systemctl status dnsmasq

配置netboot

1、下载网络启动文件,只有43M

1
wget http://ftp.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/netboot.tar.gz

或者从ubuntu-16.04.4-server-amd64.iso镜像中拷贝,netboot.tar.gz相当于install/netboot目录的压缩文件。

2、解压文件

1
tar -xzvf netboot.tar.gz -C /tftpboot/

解压后的文件包括:

1
2
3
4
5
ldlinux.c32 -> ubuntu-installer/amd64/boot-screens/ldlinux.c32
pxelinux.0 -> ubuntu-installer/amd64/pxelinux.0
pxelinux.cfg -> ubuntu-installer/amd64/pxelinux.cfg/
ubuntu-installer/
version.info

安装系统

1、远程连接需要安装系统的服务器,设置BIOS,选择从网络启动。

2、选择Install,正常安装系统即可,不过,系统镜像需要从外网下载。这里没有连接外网,就不再往下演示。

以上,实现了从网络安装源安装Ubuntu系统。但是存在两个问题,一个问题是系统镜像需要从外网下载,浪费带宽。另一个问题是安装过程中需要不断交互,浪费时间。

PXE服务器升级

配置内网镜像

1、安装apache2
apt-get install apache2 -y

web根目录是 /var/www/html/

2、测试apache2
curl 127.0.0.1

3、重启apache2
/etc/init.d/apache2 restart

4、上传ubuntu-16.04.4-server-amd64.iso到用户目录。
scp ubuntu-16.04.4-server-amd64.iso test@172.16.0.162:~

5、挂载ubuntu-16.04.4-server-amd64.iso到ubuntu目录。在用户目录执行:

1
2
mkdir /var/www/html/ubuntu
mount ubuntu-16.04.4-server-amd64.iso /var/www/html/ubuntu

6、替换netboot为镜像中的netboot,否则内核版本的差异会导致安装失败。

1
2
rm -rf /tftpboot/*
cp -r /var/www/html/ubuntu/install/netboot/* /tftpboot/

7、再次安装系统,此时就可以从PXE服务器获取系统镜像了。

在选择镜像界面,上拉到enter information manually,回车。

archive hostname输入172.16.0.162。directory输入/ubuntu,注意,ubuntu后面不要有斜杠。
如果系统安装卡住,那么Alt+F2进入控制台,tail /var/log/syslog查看系统安装日志,根据日志进行排错。查看错误后Alt+F1返回图形安装界面。

8、安装完成的系统,启动后发现卡住。

这时Alt+F2切换到第二个终端,就可以正常使用系统了。

添加硬盘启动

系统安装完成,如果依然从网络启动的话,那么每次启动依然会进入到Installer boot menu界面,除非再次修改BIOS首选启动项。不妨在Installer boot menu界面添加一个启动项,该启动项允许从本地硬盘启动。主要参考Install Ubuntu 16.04 via PXE and network boot

1、编辑pxelinux.cfg文件
vim /tftpboot/pxelinux.cfg/default,修改为:

1
2
3
4
5
6
7
8
9
10
11
12
# 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
prompt 0
# add localboot here
label localboot
menu label Boot from Disk
localboot 0

timeout 0

此外,timeout默认是0,这里可以改为60,那么6秒后会自动选择install选项。

2、再次通过网络启动,即可看到硬盘启动选项。

选中它回车,即可启动本地硬盘上的系统。

自动选择安装源

以上安装,我们需要手动输入archive hostname和directory,能不能在安装过程中自动选择?当然可以。本方法主要参考PXEInstallServer

1、编辑txt.cfg
vim /tftpboot/ubuntu-installer/amd64/boot-screens/txt.cfg,原内容为:

1
2
3
4
5
6
7
8
9
10
default install
label install
menu label ^Install
menu default
kernel ubuntu-installer/amd64/linux
append vga=788 initrd=ubuntu-installer/amd64/initrd.gz --- quiet
label cli
menu label ^Command-line install
kernel ubuntu-installer/amd64/linux
append tasks=standard pkgsel/language-pack-patterns= pkgsel/install-language-support=false vga=788 initrd=ubuntu-installer/amd64/initrd.gz --- quiet

修改为:

1
2
3
4
5
6
7
8
9
10
default install
label install
menu label ^Install
menu default
kernel ubuntu-installer/amd64/linux
append ks=http://172.16.0.162/ks.cfg vga=788 initrd=ubuntu-installer/amd64/initrd.gz --- quiet
label cli
menu label ^Command-line install
kernel ubuntu-installer/amd64/linux
append tasks=standard pkgsel/language-pack-patterns= pkgsel/install-language-support=false vga=788 initrd=ubuntu-installer/amd64/initrd.gz --- quiet

2、在/var/www/html目录创建ks.cfg文件,内容为:

1
2
install
url --url http://172.16.0.162/ubuntu/

3、重新安装系统,即可省去设置archive hostname的步骤。

配置无人值守

既然可以自动选择安装源,那么其他交互步骤可不可以自动选择?当然可以。控制安装过程的自动交互主要有两个文件:ks.cfg和ubuntu-server.seed。

ks.cfg

1、在安装菜单添加ks.cfg和ubuntu-server.seed
vim /tftpboot/ubuntu-installer/amd64/boot-screens/txt.cfg,修改为:

1
2
3
4
5
6
7
8
9
10
default install
label install
menu label ^Install
menu default
kernel ubuntu-installer/amd64/linux
append ks=http://172.16.0.162/ks.cfg preseed/url=http://172.16.0.162/ubuntu-server.seed vga=788 initrd=ubuntu-installer/amd64/initrd.gz --- quiet
label cli
menu label ^Command-line install
kernel ubuntu-installer/amd64/linux
append tasks=standard pkgsel/language-pack-patterns= pkgsel/install-language-support=false vga=788 initrd=ubuntu-installer/amd64/initrd.gz --- quiet

2、编辑/var/www/html/ks.cfg文件
参考《Ubuntu系统批量自动安装》一文中的ks.cfg。
编辑后的ks.cfg文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#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
rootpw --disabled
#Initial user
user test --fullname "test" --iscrypted --password $1$AKq0i3Yu$Tunuha7bYwq5uUV62F2nF0
#Reboot after installation
reboot
#Use text mode install
text
#Install OS instead of upgrade
install
#Use Web installation
url --url http://172.16.0.162/ubuntu/
#System bootloader configuration
bootloader --location=mbr
#Clear the Master Boot Record
zerombr yes
#Partition clearing information
clearpart --all --initlabel
#System authorization infomation
auth --useshadow --enablemd5
#Network information
network --bootproto=dhcp --device=ens2f0
#Firewall configuration
#firewall --disabled --trust=ens2f0 --ssh
#Do not configure the X Window System
skipx

需要注意的是网卡的配置,这里的网卡名指的是需要安装系统的网卡名。

3、在/var/www/html目录创建ubuntu-server.seed文件,内容为空(暂时不配置)。

4、再次安装系统,绝大部分步骤都会自动进行选择了。但是,在分区部分卡住。

手动分区后,后续会全部自动安装。安装完成后,系统没有安装openssh服务。

ubuntu-server.seed

本文中,ubuntu-server.seed主要用来解决分区、选择软件等ks.cfg没有解决的问题。

1、编辑seed文件
vim /var/www/html/ubuntu-server.seed,添加:

1
2
3
4
d-i pkgsel/include string openssh-server
d-i partman/confirm_write_new_label boolean true
d-i partman/choose_partition select Finish partitioning and write changes to disk
d-i partman/confirm boolean true

其他配置可以参考/var/www/html/ubuntu/preseed/目录中的文件,不过本文中用不到其他配置了。

2、再次安装系统,此时就会自动分区,并且安装openssh服务了。全程不需要手动帮助设置,完美。

配置手动安装

个别情况下,自动安装会失败,这时就需要手动安装,在Installer boot menu界面添加一个手动安装启动项即可。

1、编辑pxelinux.cfg文件
vim /tftpboot/pxelinux.cfg/default,修改为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 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
prompt 0
# add localboot here
label localboot
menu label Boot from Disk
localboot 0

label manual install
menu label Manual Install
kernel ubuntu-installer/amd64/linux
append ks=http://172.16.0.162/manual.cfg vga=788 initrd=ubuntu-installer/amd64/initrd.gz --- quiet

timeout 0

2、在/var/www/html目录创建manual.cfg文件,内容为:

1
2
install
url --url http://172.16.0.162/ubuntu/

3、重新安装系统,Installer boot menu界面就会出现手动安装选项。

批量安装

1、远程连接需要安装系统的服务器,设置BIOS,选择从网络启动。

2、安装正常系统,有些机器在网络部分卡住。

此时,可以手动给网卡配置IP。但是,如果系统只检测到一个网卡,而这个网卡没有连接网线,那么无法完成接下来的安装。因为没有IP,所以无法通过获取ks.cfg等文件。

Alt+F2进入控制台,ip add看到IP设置成功,但是无法ping通PXE服务器。Alt+F1返回图形界面。

此时,最好的做法是进入机房,把网线接到可以检测到的那个网卡。然后Ctrl+Alt+Del重启服务器。

3、再次安装系统,即可顺利安装。

配置静态IP

系统安装完成后,此时不能上网,需要给系统配置静态IP和网关,这时发现了一个小问题:系统中没有安装vim,自带的vi也有毛病。怎么办?使用nano。

1、编辑interfaces
sudo nano /etc/network/interfaces

2、保存文件
编辑完成,Ctrl+X退出,系统提示是否保存,输入Y回车,然后再次回车保存。

3、重启网络服务

1
2
3
4
sudo /etc/init.d/networking restart
# or
sudo ifdown ens2f0
sudo ifup ens2f0

重启网络服务后发现,此时网卡上有两个IP地址,而且只有DHCP分配的旧的IP地址生效(第一个)。

4、取消IP地址并重启网络服务

1
2
sudo ip addr flush dev ens2f0
sudo /etc/init.d/networking restart

此时静态IP就配置成功了。

后记

给40台机器配置远程控制接口的IP,搭建PXE服务器,安装系统,配置静态IP,总计用时一周左右。从效率上讲不如外包找人安装,从研究上讲还是有很多收获的。还好最近清闲了一些,不然还真没时间把整个安装流程搞清楚。
之所以用时很久,主要是因为有一些机器之前使用过,所以安装的时候需要手动确认remove volume data,或者disk detect报错需要手动安装,如下图所示。

书签

Netboot Install

PXE-netboot-install

Ubuntu 16.04 LTS (Xenial Xerus) Netboot

How to install PXE Server on Ubuntu 16.04

神奇的fdisk和dd命令

PXE网络克隆图文教程

DHCP tftp PXE实现Ghost网络克隆