Skip to content

Instantly share code, notes, and snippets.

@chenyukang
Last active July 16, 2022 16:00
Show Gist options
  • Save chenyukang/0f67b9ef0a8c32aa8f95 to your computer and use it in GitHub Desktop.
Save chenyukang/0f67b9ef0a8c32aa8f95 to your computer and use it in GitHub Desktop.
网络安装Ubuntu 14.04 server

理论部分

阐述最清楚的两篇是两篇中文的:

PXE 网络批量安装 ubuntu

网路启动服务器安装和配置方法 (pxe+tftp+dhcpd)

ubuntu 的官方文档比较久了,步骤也很繁琐,不推荐。

实践中的坑

注意这里示例里面的 IP 是 192.168.199.50,具体实践过程中会有变动。

DHCP 服务

sudo apt-get -y install dhcp3-server

安装的时候注意 dhcp3-server 被改名了,现在叫作 isc-dhcp-server,网上的很多教程没有相应的更新。

最简单的 dhcp.conf 即可:

allow booting;
allow bootp;

subnet 192.168.200.0 netmask 255.255.255.0 {
	range 192.168.200.100 192.168.200.200;
	option routers 192.168.200.1;
	filename "pxelinux.0";
}

注意启动的时候用 service,网络上很多教程都是/etc/init.d/dhcpd start,这样好像有问题。

# sudo service isc-dhcp-server start

默认端口为 67,启动以后检查一下:

sudo netstat -nutlp | grep 67

ubuntu 系统镜像

启动 Nginx 或者 Apache,保证 http://192.168.199.50/ubuntu 能访问到镜像:

$mkdir /mnt/ubuntu
$mount -o loop ubuntu-server.iso /mnt/ubuntu
$cd /var/www/html
$sudo ln -s /mnt/ubuntu ubuntu

TFTP 服务

准备 netboot 文件到/var/lib/tftpboot 目录,确保用户组权限为 nobody。

$sudo mkdir /var/lib/tftpboot
$sudo chmod -R 777 /var/lib/tftpboot
$sudo chown -R nobody /var/lib/tftpboot
$sudo cp -R ubuntu/install/netboot/* /var/lib/tftpboot/

配置 tftp 服务,tftp 服务由 xinetd 服务管理。

配置文件:

service tftp
{
	protocol = udp
	port = 69
	socket_type = dgram
	wait = yes
	user = nobody
	server = /usr/sbin/in.tftpd
	server_args = /var/lib/tftpboot
	disable = no
}

这里有个坑,虽然我们添加了 server_args 为我们期望放 boot 文件的目录:/var/lib/tftpboot 目录, 但真正运行起来的时候好像没起作用,查看文件/etc/inetd.conf,其中有一行是:

tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd -s /var/lib/tftpboot 确保后面的-s 路径是我们期望的放 netboot 文件的目录。tftp 默认端口 69,启动后检查一下。

更保险的是用另外一台机器去尝试获取动态 IP,然后运行 tftp 保证 DHCP 和 tftp 服务都是正常运行的:

tftp 192.168.199.50
tftp> get version.info
Received 60 bytes in 0.0 seconds
tftp> quit

启动需要安装的服务器

系统自检后按照 Bios 里面设定的次序从 CD 启动,硬盘启动,然后是 PXE。需要的时候按 F12 从网络启动(一个伤心的坑)。如果正常就应该通过 DHCP 获取到 IP, 然后下载 netboot,进入到安装界面。

最后一个巨坑,Ubuntu server 14.04 好像有个 Bug,详细描述在 这里。 解决方案就是修改文件/var/lib/tftpboot/ubuntu-installer/amd64/boot-screens/txt.cfg:

增加参数:url=http://192.168.199.50/trusty.seed, 修改后就是这样:

default install
label install
menu label ^Install
menu default
kernel ubuntu-installer/amd64/linux
append vga=788 url=http://192.168.199.50/trusty.seed initrd=ubuntu-installer/amd64/initrd.gz -- quiet

其中 trusty.seed 文件是放在/var/www/html/trusty.seed, 这个其实是 Ubuntu(或者 Debian) 系统安装时候的用户指定参数文件:

文件的内容是:

d-i live-installer/net-image string http://192.168.199.50/ubuntu/install/filesystem.squashfs

seed 文件也可以添加其他的自动安装选项。不过 kickstart 可能更好点。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment