阐述最清楚的两篇是两篇中文的:
网路启动服务器安装和配置方法 (pxe+tftp+dhcpd)
ubuntu 的官方文档比较久了,步骤也很繁琐,不推荐。
注意这里示例里面的 IP 是 192.168.199.50,具体实践过程中会有变动。
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
启动 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
准备 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 可能更好点。