1. 前言
《通过远程控制接口给服务器安装系统》一文中,我们发现通过远程控制接口给服务器安装系统很方便。《Ubuntu系统批量自动安装》一文中,我们学会了使用PXE技术进行系统的批量安装。
这两者结合,能产生怎样的魔力?下面是见证奇迹的时刻。
需求:机房里有40台曙光I620-G20机器需要安装Ubuntu16 Server系统,曙光供应商说需要两天的工作量,报价五千元。那么自己安装的话,需要多长时间?也需要两天吗?
2. 安装步骤
1、进入机房,给40台机器配置远程控制接口的IP。参考《通过远程控制接口给服务器安装系统》的远程控制接口配置部分。
2、搭建PXE服务器。参考《Ubuntu系统批量自动安装》,并且进行改进。
3、远程控制批量安装系统。
3. 搭建PXE服务器
3.1. 基本准备
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服务(可选操作,没有什么影响)。
3.2. 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、配置dnsmasqvim /etc/dnsmasq.conf
,在文件末尾添加:
1 | interface=ens2f1 |
dhcp-option=3表示网关,6表示域名服务器,28表示broadcast,48表示时间服务器。server表示DNS forwarder IPs Address。
需要注意的是,网关一定要配置,否则在使用内网镜像安装时会特别慢。在获取镜像时卡住半小时,查看安装日志如下图所示;在“Updating the list of available packages”时也会卡住半小时。
而且,最好不要让服务器连接到外网,否则安装过程中会自动从网络中获取更新,安装就会很慢。就像本文中的配置,网关和域名服务器都设置为PXE服务器的IP,而不是真实的可以访问外网的网关和域名服务器。
4、查看服务systemctl status dnsmasq
3.3. 配置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 | ldlinux.c32 -> ubuntu-installer/amd64/boot-screens/ldlinux.c32 |
3.4. 安装系统
1、远程连接需要安装系统的服务器,设置BIOS,选择从网络启动。
2、选择Install,正常安装系统即可,不过,系统镜像需要从外网下载。这里没有连接外网,就不再往下演示。
以上,实现了从网络安装源安装Ubuntu系统。但是存在两个问题,一个问题是系统镜像需要从外网下载,浪费带宽。另一个问题是安装过程中需要不断交互,浪费时间。
4. PXE服务器升级
4.1. 配置内网镜像
1、安装apache2apt-get install apache2 -y
web根目录是 /var/www/html/
2、测试apache2curl 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 | mkdir /var/www/html/ubuntu |
6、替换netboot为镜像中的netboot,否则内核版本的差异会导致安装失败。
1 | rm -rf /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切换到第二个终端,就可以正常使用系统了。
4.2. 添加硬盘启动
系统安装完成,如果依然从网络启动的话,那么每次启动依然会进入到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 | # D-I config version 2.0 |
此外,timeout默认是0,这里可以改为60,那么6秒后会自动选择install选项。
2、再次通过网络启动,即可看到硬盘启动选项。
选中它回车,即可启动本地硬盘上的系统。
4.3. 自动选择安装源
以上安装,我们需要手动输入archive hostname和directory,能不能在安装过程中自动选择?当然可以。本方法主要参考PXEInstallServer。
1、编辑txt.cfgvim /tftpboot/ubuntu-installer/amd64/boot-screens/txt.cfg
,原内容为:
1 | default install |
修改为:
1 | default install |
2、在/var/www/html目录创建ks.cfg文件,内容为:
1 | install |
3、重新安装系统,即可省去设置archive hostname的步骤。
4.4. 配置无人值守
既然可以自动选择安装源,那么其他交互步骤可不可以自动选择?当然可以。控制安装过程的自动交互主要有两个文件:ks.cfg和ubuntu-server.seed。
4.4.1. ks.cfg
1、在安装菜单添加ks.cfg和ubuntu-server.seedvim /tftpboot/ubuntu-installer/amd64/boot-screens/txt.cfg
,修改为:
1 | default install |
2、编辑/var/www/html/ks.cfg文件
参考《Ubuntu系统批量自动安装》一文中的ks.cfg。
编辑后的ks.cfg文件内容如下:
1 | #Generated by Kickstart Configurator |
需要注意的是网卡的配置,这里的网卡名指的是需要安装系统的网卡名。
3、在/var/www/html目录创建ubuntu-server.seed文件,内容为空(暂时不配置)。
4、再次安装系统,绝大部分步骤都会自动进行选择了。但是,在分区部分卡住。
手动分区后,后续会全部自动安装。安装完成后,系统没有安装openssh服务。
4.4.2. ubuntu-server.seed
本文中,ubuntu-server.seed主要用来解决分区、选择软件等ks.cfg没有解决的问题。
1、编辑seed文件vim /var/www/html/ubuntu-server.seed
,添加:
1 | d-i pkgsel/include string openssh-server |
其他配置可以参考/var/www/html/ubuntu/preseed/目录中的文件,不过本文中用不到其他配置了。
2、再次安装系统,此时就会自动分区,并且安装openssh服务了。全程不需要手动帮助设置,完美。
4.5. 配置手动安装
个别情况下,自动安装会失败,这时就需要手动安装,在Installer boot menu界面添加一个手动安装启动项即可。
1、编辑pxelinux.cfg文件vim /tftpboot/pxelinux.cfg/default
,修改为:
1 | # D-I config version 2.0 |
2、在/var/www/html目录创建manual.cfg文件,内容为:
1 | install |
3、重新安装系统,Installer boot menu界面就会出现手动安装选项。
5. 批量安装
1、远程连接需要安装系统的服务器,设置BIOS,选择从网络启动。
2、安装正常系统,有些机器在网络部分卡住。
此时,可以手动给网卡配置IP。但是,如果系统只检测到一个网卡,而这个网卡没有连接网线,那么无法完成接下来的安装。因为没有IP,所以无法通过获取ks.cfg等文件。
Alt+F2进入控制台,ip add
看到IP设置成功,但是无法ping通PXE服务器。Alt+F1返回图形界面。
此时,最好的做法是进入机房,把网线接到可以检测到的那个网卡。然后Ctrl+Alt+Del重启服务器。
3、再次安装系统,即可顺利安装。
6. 配置静态IP
系统安装完成后,此时不能上网,需要给系统配置静态IP和网关,这时发现了一个小问题:系统中没有安装vim,自带的vi也有毛病。怎么办?使用nano。
1、编辑interfacessudo nano /etc/network/interfaces
2、保存文件
编辑完成,Ctrl+X退出,系统提示是否保存,输入Y回车,然后再次回车保存。
3、重启网络服务
1 | sudo /etc/init.d/networking restart |
重启网络服务后发现,此时网卡上有两个IP地址,而且只有DHCP分配的旧的IP地址生效(第一个)。
4、取消IP地址并重启网络服务
1 | sudo ip addr flush dev ens2f0 |
此时静态IP就配置成功了。
7. 后记
给40台机器配置远程控制接口的IP,搭建PXE服务器,安装系统,配置静态IP,总计用时一周左右。从效率上讲不如外包找人安装,从研究上讲还是有很多收获的。还好最近清闲了一些,不然还真没时间把整个安装流程搞清楚。
之所以用时很久,主要是因为有一些机器之前使用过,所以安装的时候需要手动确认remove volume data,或者disk detect报错需要手动安装,如下图所示。
8. 书签
Ubuntu 16.04 LTS (Xenial Xerus) Netboot