1. 前言
单台或者少数几台机器安装,可以通过u盘等方式一台一台的安装,但是当面对局域网内上百台,甚至更多的机器需要安装操作体系时,一台一台的安装显然是不可取的了,此时省时省力的自动化PXE方式就派上用场了。
2. PXE介绍
PXE即Preboot Execution Environment,翻译过来就是“预启动执行环境”。是由inter公司开发,基于C / S模式提供了一种使用网络接口(Network Interface)启动计算机的机制。这种机制让计算机的启动可以不依赖本地数据存储设备(如硬盘)或本地已安装的操作系统。
PXE服务器端需要DHCP服务器、TFTP服务器和一个文件服务器,其中文件服务器可以是ftp,http,nfs等文件服务器。
服务端
DHCP-------用来分配IP地址,定位引导程序
TFTP-------提供引导程序下载
NFS-------网络中文件共享
客户端
网卡支持PXE协议
主板支持网络启动
PXE部署系统自动化安装流程:
1) 设置拥有PXE功能的客户端主机开机启动项为网络启动;
2) 客户端开机之后进入网络启动,此时客户端没有IP地址需要发送广播报文(PXE网卡内置DHCP客户端程序),DHCP服务器相应客户端请求,分配给客户端相应的IP地址与掩码等信息;
3) 客户端得到IP地址之后,与TFTP通信,下载pxelinux.0,default,vmlinuz,initrd文件,根据default指定的vmlinuz,initrd启动系统内核,下载指定系统安装包。
4) 根据setting.cfg文件去文件共享服务器(http/ftp/nfs)上面下载系统安装包开始安装系统。
3. 环境准备
本文整个环境将在vmware虚拟机上验证。
两个虚拟机:UOS01、UOS02
为了简化操作本次使用DHCP、TFTP和NFS均安装在同一个虚拟机中
UOS01:搭建安装环境(DHCP、TFTP和NFS)
ip地址:192.168.114.128 (网卡名为:ens33)
系统安装文件已放到/home/uos/iosdir目录下
UOS02:验证PXE无人值守系统安装
4. 搭建安装环境
4.1. 搭建DHCP
1) 安装dhcp
1 uos@uos-PC:~$ sudo apt install isc-dhcp-Server
2) 配置dhcp
1 uos@uos-PC:~$ sudo vi /etc/dhcp/dhcpd.conf 2 3 subnet 192.168.114.0 netmask 255.255.255.0 { #dhcpserver 分配ip的子网192.168.114网段,必须和PXE server的一个网卡同一个网段 4 5 range 192.168.114.130 192.168.114.200; #为客户端分配ip范围 6 7 option subnet-mask 255.255.255.0; 8 9 option routers 192.168.114.2; 10 11 default-lease-time 600; 12 13 max-lease-time 7200; 14 15 next-server 192.168.114.128; #指定tftp server的ip 16 17 } 18 19 filename "pxelinux.0"; 20 21 uos@uos-PC:~$ sudo vi /etc/default/isc-dhcp-server 22 23 INTERFACESv4="ens33"
3) 启动dhcp
1 uos@uos-PC:~$ sudo systemctl start nfs-kernel-server 2 3 uos@uos-PC:~$ sudo systemctl enable nfs-kernel-server
4.2. 搭建TFTP
1) 安装TFTP
1 uos@uos-PC:~$ sudo apt install tftpd-hpa
2) 配置TFTP
uos@uos-PC:~$ cat /etc/default/tftpd-hpa ##使用默认配置即可。 # /etc/default/tftpd-hpa TFTP_USERNAME="tftp" TFTP_DIRECTORY="/srv/tftp" TFTP_ADDRESS="0.0.0.0:69" TFTP_OPTIONS="--secure"
3) 安装PXELINUX
1 uos@uos-PC:~$ sudo apt install pxelinux
4) 配置PXE启动文件
uos@uos-PC:~$ sudo mkdir -p /srv/tftp/pxelinux.cfg uos@uos-PC:~$ sudo cp -r /home/uos/isodir/isolinux/ /srv/tftp uos@uos-PC:~$ sudo cp /home/uos/isodir/live/vmlinuz /srv/tftp uos@uos-PC:~$ sudo cp /home/uos/isodir/live/initrd.lz /srv/tftp uos@uos-PC:~$ sudo cp /usr/lib/PXELINUX/pxelinux.0 /srv/tftp uos@uos-PC:~$ sudo vi /srv/tftp/pxelinux.cfg/default default vesamenu.c32 timeout 5 menu autoboot Starting Linux install in # second{,s}. Press any key to interrupt. menu clear menu title UOS20 label UOS menu label Start UOS20 kernel vmlinuz append initrd=initrd.lz boot=live livecd-installer netboot=nfs nfsroot=192.168.114.128:/home/uos/isodir locale=zh_CN.UTF-8
5) 启动TFTP
1 uos@uos-PC:~$ sudo systemctl start tftpd-hpa 2 3 uos@uos-PC:~$ sudo systemctl enable tftpd-hpa
4.3. 搭建NFS
1) 安装NFS
1 uos@uos-PC:~$ sudo apt install nfs-kernel-server
2) 配置NFS
1 uos@uos-PC:/srv/tftp$ sudo vi /etc/exports 2 3 /home/uos/isodir *(ro)
3) 启动NFS
1 uos@uos-PC:~$ sudo systemctl start nfs-kernel-server 2 3 uos@uos-PC:~$ sudo systemctl enable nfs-kernel-server
4.4. 配置无人值守
1 uos@uos-PC:/srv/tftp$ vi /home/uos/isodir/oem/settings.ini 2 3 [General] 4 5 # deb repository entry to be added in the sources.list file. 6 7 apt_source_deb="deb-src https://professional-packages.chinauos.com/desktop-professional eagle main contrib non-free" 8 9 skip_select_language_page = true 10 11 skip_select_language_page_on_first_boot = true 12 13 skip_select_component_page = true 14 15 skip_system_info_page = true 16 17 skip_partition_page = true 18 19 skip_network_page=true 20 21 skip_timezone_page=true 22 23 skip_repair_system_page=true 24 25 skip_virtual_machine_page=true 26 27 partition_do_auto_part = true 28 29 timezone_default = true 30 31 timezone_default=Asia/Shanghai 32 33 select_language_default_locale = zh_CN 34 35 system_info_default_keyboard_layout = us 36 37 system_info_setup_after_reboot = true 38 39 system_info_default_username="didtx" 40 41 system_info_default_hostname="didtx-PC" 42 43 system_info_hostname_auto_suffix=-PC 44 45 system_info_hostname_reserved=localhost 46 47 system_info_default_password="zh**420427"
5. 无人值守验证
进入UOS2的BIOS页面选择网络启动:
6. 附录
6.1. setting.cfg文件说明
1 #跳过语言选择界面 2 3 skip_select_language_page = true 4 5 6 #跳过后配置语言选择界面 7 8 skip_select_language_page_on_first_boot = true 9 10 11 #跳过组件选择界面 12 13 skip_select_component_page = true 14 15 16 #不跳过创建账户界面 17 18 skip_system_info_page = false 19 20 21 #跳过分区界面 22 23 skip_partition_page = true 24 25 26 #跳过网络设置界面 27 28 skip_network_page=true 29 30 31 #跳过时区设置界面 32 33 skip_timezone_page=true 34 35 36 #跳过系统修复界面 37 38 skip_repair_system_page=true 39 40 41 #跳过键盘布局选择界面 42 43 skip_system_keyboard_page = true 44 45 46 #不跳过虚拟机环境提示界面 47 48 skip_virtual_machine_page=false 49 50 51 #执行自动分区操作 52 53 partition_do_auto_part = true 54 55 56 #设置默认时区为亚洲/上海 57 58 timezone_default=Asia/Shanghai 59 60 61 #设置默认语言为中文 62 63 select_language_default_locale = zh_CN 64 65 66 #设置默认安装组件集类型为Server-Environment-with-GUI,目前组件集类型有:Basic-Server-Environment、Cloud-and-Virtualzalition、Big-Data、Server-Environment-with-GUI、Custom-Installation可以根据需要选择其中的一个 67 68 69 #对于组件集的详细包含内容可以参见packages_default.json和packages_choice.json,如果拿到是服务版操作系统的iso镜像文件,则可在live目录找到packages_default.json和packages_choice.json,桌面版iso不需要配置该字段 70 71 72 selected_component_install_type = Server-Environment-with-GUI 73 74 75 #如果selected_component_install_type字段未指定则使用该字段指定的组件集类型,桌面版iso不需要配置该字段 76 77 select_component_default_install_type = Server-Environment-with-GUI 78 79 80 #设置默认键盘布局为us 81 82 system_info_default_keyboard_layout = us 83 84 85 #设置不使用后配置 86 87 system_info_setup_after_reboot = false 88 89 90 #设置是否将用户密码设置为root密码 91 92 set_root_password_from_user = false 93 94 95 #设置用户信息,指定用户名为“uos” 96 97 system_info_default_username="uos" 98 99 100 #设置用户信息,指定主机名为“uos-PC” 101 102 system_info_default_hostname="uos-PC" 103 104 105 #设置用户信息,指定主机名自动后缀为“-PC” 106 107 system_info_hostname_auto_suffix=-PC 108 109 110 system_info_hostname_reserved=localhost 111 112 113 #设置用户信息,指定用户密码为“uos123“ 114 115 system_info_default_password="uos123" 116 117 118 DI_FULLDISK_MULTIDISK_DEVICE="/dev/sda;/dev/sdb"(注意:等号后面的 "/dev/sda;/dev/sdb"要用英文双引号包含起来 ) 其中指定了/dev/sda为系统盘,/dev/sdb为数据盘,目前要求系统盘和数据盘都要求至少64Gib 119 120 在oem定制项目中可能出现配置了该字段,数据盘仍然不是data分区也没有自动挂载的情况,可能有两种原因:1.检查full_disk_policy.json中是否删除了data分区的设置,2.数据盘的空间是否大于等于64Gib。