生态社区

技术文档

客户 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启动参数与需求也是不一样的,这方面一般都需要跟产品和研发沟通,才能方便研究使用。