客户 v10 桌面 pxe 无法做到全自动,知识库里也没有全自动的方式
发布时间:2023-06-06 浏览次数:960次 作者:湖南省计算产业生态创新中心 (长沙)
问题描述:
客户需要大面积更换或者部署桌面终端系统,于是 pxe 服务器较为方便
解决思路:
网上有很多 ubuntu 的关于 pxe 的搭建方式,但是社区的 pxe 搭建方式无法使用,知识库里也没有关于全自动的部署方式,于是我请教完研发,写了一个方便大家学习和使用(已上传知识库标题是“v10 桌面操作系统 pxe+uefi+全自动部署”),可以做到安装第三方包,可以创建修改文件,可以上传脚本,实现全自动。
解决方法:
前提说明:本文档仅针对飞腾新四核,鲲鹏,兆芯,海光机器的 PXE+UEFI+
全自动网络安装,请确保整机和目标安装系统无误后继续。
(一) 服务器端服务配置搭建
1.TFTP 服务器搭建
2. 装 安装 tftp 相关包
/#apt-get install tftp-hpa tftpd-hpa
3. 修改配置文件
将/tftpboot 设为 tftp 的根目录,修改 tftpd-hpa 配置文件
/# vim /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftpboot"TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-l -c -s"
将/tftpboot 权限设置成 777
/# chmod 777 /tftpboot
4. 文件放置
如果目标安装系统为 x86_64,则在/tftpboot/下创建 x86_64-ef 目录,其目录
结构如下:
# ls /tftpboot/x86_64-efi
boot casper netbootx64.ef
将 x86_64.tar.gz 解压,并将解压后的内容对应拷贝到 x86_64 下;
将 iso 中 casper/下的 initrd.lz 和 vmliuz 放到 casper 下;
如果目标安装系统为新四核或者鲲鹏,则在/tftpboot/下创建 arm64-ef目,
其目录结构如下:
# ls /tftpboot/arm64-efi
boot casper netbootaa64.efi
将 arm64.tar.gz 解压,并将解压后的内容对应拷贝到 arm64-efi 下;
将 iso 中 casper/下的 initrd.img 和 Image 放到 casper 下;
请注意对应修改 boot/grub/grub.cfg 中 nfsroot 的 IP 地址!
# systemctl restart tftpd-hpa
(二) NFS 服务搭建:
1. 装安装 nfs 相关包
/# apt-get install nfs-kernel-server
2. 修改配置文件
将/opt/nfs 设置为 nfs 的根目录
/# vim /etc/exports
/opt/nfs *(rw,sync,no_root_squash,no_subtree_check)
3. 文件放置
在/opt/nfs/创建一个 iso 目录
/# mkdir -p/opt/nfs/x86_64-kylin/# mkdir -p/opt/nfs/aarch64-kylin
将整 个 iso 挂 载 后 的 内 容 对 应 拷 贝 至 /opt/nfs/x86_64-kylin
或者 aarch64-kylin,注意隐藏文件和隐藏文件夹的拷贝
# systemctl restart nfs-kernel-server
测试
/# showmount -e 127.0.0.1
Export list for 127.0.0.1:
/opt/nfs *
(三) DHCP 服务搭建
1. 装安装dhcp 相关包
/# apt-get install isc-dhcp-server isc-dhcp-client
2. 修改配置文件
/# vim /etc/dhcp/dhcpd.conf (文件内 ip 相关内容根据实际修改)
ddns-update-style none;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
option space PXE;
option client-system-arch code 93 = unsigned integer 16;
allow booting;
allow bootp;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.10 192.168.1.100;
option broadcast-address 192.168.1.255;
option routers 192.168.1.1;
default-lease-time 600;
max-lease-time 7200;
next-server 192.168.1.1;
if option client-system-arch = 00:07 or option client-system-arch = 00:09 {
filename "x86_64-efi/netbootx64.efi";} elsif option client-system-arch = 00:0B {
filename "arm64-efi/netbootaa64.efi";
}
}
/# vim /etc/default/isc-dhcp-server
3. 设置使用的网络设备,若使用 eth0,则
INTERFACES="eth0"
重启服务:
/# systemctl restart isc-dhcp-server
(四)全自动安装部署方式:
1. 安装 apache 服务
/# apt-get install apache2
2. 编辑无人值守自动安装系统脚本
/# vim /var/www/html/auto-install.auto(附件有相关文件,另外以下内容中的开头的”#”是注释符,方便大家理解,实际编写文件的时候可以不将相关内容写入文件)
## 中文
d-i debian-installer/locale string zh_CN.UTF-8
d-i console-setup/ask_detect boolean false
d-i console-setup/layoutcode string cn
d-i keyboard-configuration/layoutcode string cn
##是否创建数据分区和备份还原分区 data = ,backup=
# d-i preseed/early_command string sed
"s/\/tmp\/kylin-data.ini/\/etc\/kylin-data.ini/g" -i/root/lib/partman/lib/recipes.sh;
echo -e "[lixiang]\ndata = 0\nbackup = 0" > /root/etc/kylin-data.ini;
##使用整个磁盘
# d-i partman-auto/disk string /dev/sda (注意这一行内容是指定格式化磁盘,如
果系统只有一块盘,此行参数可加可不加,如果有多个磁盘需指定系统安装的磁盘设备)
d-i partman-auto/method string regular
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 netcfg/get_hostname string Kylin
d-i netcfg/get_domain string Kylin
d-i netcfg/hostname string Kylin
##创建 kylin 用户,密码 123123
d-i passwd/user-fullname string kylin
d-i passwd/username string kylin
d-i passwd/user-password password kylin123
d-i passwd/user-password-again password kylin123
## 安装后脚本。注默认在安装环境中。
# ubiquity ubiquity/success_command string \
# cp -a /lib/partman/lib/recipes.sh /target/opt/; \
# cp -a /etc/kylin-data.ini /target/opt/;
安装完后自动重启:
ubiquity ubiquity/reboot boolean true
安装完后自动关机但不启动系统:
ubiquity ubiquity/poweroff boolean true
3.全自动进阶补充
如果有想系统安装完之后做的一些脚本操作可以修改 auto-install.auto 文件,百度查可以百度 preseed 文件详解。
例如:如果想拷贝 test.sh 文件进新系统,可以在 auto-install.auto 文件里最后添加
ubiquity ubiquity/success_command stringcp /cdrom/test.sh /home/kylin/;
其中 test.sh 文件应先存放服务所在机器的/opt/nfs/x86_64-kylin 目录下面。
同理,如果有第三方包需要拷贝安装,可以添加如下内容:
ubiquity ubiquity/success_command stringcp /cdrom/test.deb /home/kylin/;\
in-target dpkg-i /home/kylin/test.deb;in-target rm -f /home/kylin/test.deb;
如果想自定义分区,可以参考附件里的 preseed-desktop.cfg 文件分区内容
重启 apache2 服务:
/# systemctl restart apache2
4. 修改引导文件内容
/# vim /tftpboot/ x 86_64-efi/boot/grub/grub.cfg (选择实际架构路径)
在${root}/casper/vmlinuz 一行内容最后加入:
automatic-ubiquity url=http://实际 ip 地址/auto-install.seed
例:
menuentry "Try Kylin-Desktop without installing" {
linux ${root}/casper/vmlinuz boot=casper locale=zh_CN quiet splash
audit=0 netboot=nfs nfsroot=192.168.1.1:/opt/nfs/x86_64-kylin/ security=
automatic-ubiquity url=http:// 192.168.1.1/auto-install.seed
initrd ${root}/casper/initrd.lz
}
注:grub.cfg 有两个启动项根据实际需求修改,添加在哪一个里面就进入哪
一个启动项,如果添加在第一个启动项中,默认会自动加载进去无需选择。
(五)客户端操作
开机,等待固件就绪,进入 bios 开启 uefi(国产机默认支持 uefi),在固件启动阶段根据相应提示进入 PXE 网络引导模式(如无该功能,请联系固件提 供相应支持),等待一小段时间后会显示 grub 菜单,选择 Net Install Kylin, 等待进入系统,开始安装。
问题总结:
由于咱们系统是属于自研,因此很多部署方式与社区版存在较大的差异,pxe启动参数与需求也是不一样的,这方面一般都需要跟产品和研发沟通,才能方便研究使用。