远程无人值守安装ubuntu16.04.4 desktop版本,server版本可以通过http及kicstart实现无人值守安装,桌面版无法实现,但可通过preseed实现自动安装。
建议引导采用legacy bios方式,不采用uefi引导。
1、 准备
- 安装好 Ubuntu 16.04系统的PC(虚拟机也可)
- 支持DHCP的路由器一个或网线直连也可
- 支持pxe启动的目标机器
- 安装Ubuntu的PC和目标机器在同一网络下
2、 配置网卡
Ubuntu必须设置为静态IP;本案例中采用:192.168.1.53
3、 安装DHCP, TFTP,PXE, NFS 服务
sudo apt-get update
sudo apt-get install -y isc-dhcp-server tftpd-hpa nfs-kernel-server
sudo apt-get install -y apache2
4、 配置DHCP
sudo vim /etc/default/isc-dhcp-server
INTERFACES="enp10s0"
注:enp10s0为使用的网卡,网卡设备可能不同,输入ifconfig查看网卡设备名称;
sudo vim /etc/dhcp/dhcpd.conf
ddns-update-style none;
option domain-name "ubuntu"; # 必须修改默认值,否则syslog报异常,pxe client IP无法获取
option domain-name-servers 192.168.1.46; # 修改为DNS服务器IP
allow booting;
allow bootp;
#IP地址分配网段可根据自己需要设定
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.10 192.168.1.30; #dhcp获取ip的范围,可修改为自己的地址范围
option subnet-mask 255.255.255.0; #子网掩码
option routers 192.168.1.1; #网关IP地址
option broadcast-address 192.168.1.255; #广播IP地址
next-server 192.168.1.53; #修改为server的静态IP
filename "pxelinux.0";
}
tips: route -n 查看网关
重启DHCP服务
sudo /etc/init.d/isc-dhcp-server start
5、 配置TFTP服务
sudo vim /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS="192.168.1.53:69" #添加服务器IP地址
TFTP_OPTIONS="--secure"
RUN_DAEMON="yes"
OPTIONS="-l -s /var/lib/tftpboot"
启动 tftp服务
sudo service tftpd-hpa start
6、 配置pxe 启动文件
下载 netboot,网址为: http://cdimage.ubuntu.com/netboot/,选择合适的镜像,下载其中的netboot.tar.gz;
解压到~/netboot下;
mkdir netboot
sudo tar -xvf netboot.tar.gz -C netboot/
sudo mkdir /var/lib/tftpboot
sudo mkdir /var/lib/tftpboot/pxelinux.cfg
sudo mkdir -p /var/lib/tftpboot/Ubuntu/16.04/
sudo cp ~/netboot/ubuntu-installer/amd64/boot-screens/vesamenu.c32 ldlinux.c32 libcom32.c32 libutil.c32 /var/lib/tftpboot/
如果不行,分开复制
ubuntu@test:~$ sudo cp ~/netboot/ubuntu-installer/amd64/boot-screens/vesamenu.c32 /var/lib/tftpboot/
ubuntu@test:~$ sudo cp ~/netboot/ubuntu-installer/amd64/boot-screens/ldlinux.c32 /var/lib/tftpboot/
ubuntu@test:~$ sudo cp ~/netboot/ubuntu-installer/amd64/boot-screens/libcom32.c32 /var/lib/tftpboot/
ubuntu@test:~$ sudo cp ~/netboot/ubuntu-installer/amd64/boot-screens/libutil.c32 /var/lib/tftpboot/
sudo cp ~/netboot/ubuntu-installer/amd64/pxelinux.0 /var/lib/tftpboot/
注意:拷贝文件时验证文件是否拷贝完全
sudo vim /var/lib/tftpboot/pxelinux.cfg/default
DEFAULT vesamenu.c32
TIMEOUT 20
PROMPT 0
MENU INCLUDE pxelinux.cfg/pxe.conf
NOESCAPE 1
LABEL Install Ubuntu 16.04 Desktop
MENU LABEL Install Ubuntu 16.04 Desktop
kernel Ubuntu/16.04/casper/vmlinuz.efi
append boot=casper automatic-ubiquity netboot=nfs nfsroot=192.168.1.53:/var/lib/tftpboot/Ubuntu/16.04 initrd=Ubuntu/16.04/casper/initrd.lz quiet splash
ENDTEXT
注意:nfs服务器IP(192.168.1.53)地址
sudo vim /var/lib/tftpboot/pxelinux.cfg/pxe.conf
MENU TITLE PXE Server
NOESCAPE 1
ALLOWOPTIONS 1
PROMPT 0
MENU WIDTH 80
MENU ROWS 14
MENU TABMSGROW 24
MENU MARGIN 10
MENU COLOR border 30;44 #ffffffff #00000000 std
7、 添加启动镜像
- 下载镜像
在http://releases.ubuntu.com/选择合适镜像下载。 - 挂载
sudo mount /dev/cdrom /mnt # sudo mount ubuntu-16.04-server-amd64.iso /mnt/
将光盘挂载到/mnt/ 下 或者 sudo mount /dev/sr0 /mnt/
sudo cp -r /mnt/* /var/lib/tftpboot/Ubuntu/16.04
sudo cp -r /mnt/.disk /var/lib/tftpboot/Ubuntu/16.04
注:此处下载路径及挂载路径可能不同,请自行处理
3) 配置nfs
sudo vim /etc/exports
/var/lib/tftpboot/Ubuntu/16.04 *(ro,async,no_root_squash,no_subtree_check)
- 重启nfs服务
sudo /etc/init.d/nfs-kernel-server start
- 验证nfs是否成功
showmount -e 192.168.1.53
8、 通过preseed实现自动安装
d-i debian-installer/locale string zh_CN
d-i console-setup/ask_detect boolean false
d-i keyboard-configuration/layoutcode string us
d-i netcfg/choose_interface select auto
d-i netcfg/get_nameservers string 192.168.0.187
d-i netcfg/get_hostname string tesra
d-i netcfg/get_domain string tesra
d-i netcfg/wireless_wep string
d-i mirror/http/mirror select cn.archive.ubuntu.com
d-i clock-setup/utc boolean true
d-i time/zone string Asia/Shanghai
d-i clock-setup/ntp boolean true
d-i partman-auto/method string regular
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-md/device_remove_md boolean true
d-i partman-auto-lvm/guided_size string max
d-i partman-auto/choose_recipe select atomic
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
d-i partman-md/confirm boolean true
d-i live-installer/net-image string http://192.168.0.187/Ubuntu/16.04/casper/filesystem.squashfs
d-i base-installer/kernel/image string linux-generic
d-i passwd/user-fullname string ubuntu
d-i passwd/username string ubuntu
d-i passwd/user-password password 123456 #密码
d-i passwd/user-password-again password 123456 #密码
d-i passwd/user-uid string 1000
d-i user-setup/encrypt-home boolean false
d-i apt-setup/use_mirror boolean false
d-i apt-setup/services-select multiselect security
d-i apt-setup/security_host string 192.168.1.53 #PXE服务器地址
d-i apt-setup/security_path string /ubuntu
d-i debian-installer/allow_unauthenticated boolean true
tasksel tasksel/first multiselect standard
d-i pkgsel/include string openssh-server build-essential
d-i pkgsel/upgrade select none
d-i pkgsel/update-policy select none
d-i grub-installer/only_debian boolean true
d-i finish-install/reboot_in_progress note
xserver-xorg xserver-xorg/autodetect_monitor boolean true
d-i preseed/late_command string apt-install zsh; in-target chsh -s /bin/zsh
- 将initrd.lz拷贝到~/下;
cp /var/lib/tftpboot/Ubuntu/16.04/casper/initrd.lz ~/
- 解压initrd.lz;
mkdir temp # 创建存储内容的临时文件
cp initrd.lz temp/initrd.lzma # 改名initrd为lzma后缀
cd temp
ubuntu@test:~/temp$ su root
lzma -d initrd.lzma
cpio -id < initrd # 解压出文件
- 创建preseed.cfg文件;
注:因preseed.cfg文件太长,以附件的方式呈现,可根据实际情况,自行修改;此文件存储位置须在解压后的temp路径中。 - 重新生成nitrd.lz文件;
cd temp# su root
find . |cpio --quiet --dereference -o -H newc>../initrd
cd ..
lzma -7 initrd (等待一会儿……)
mv initrd.lzma initrd.lz
- 拷贝回原目录覆盖;
cp ~/initrd.lz /var/lib/tftpboot/Ubuntu/16.04/casper/