麒麟桌面ARM架构PXE装机

概述

大家好,我是Tarzan,最近学习了麒麟桌面arm架构PXE装机

PXE

规模化:同时装配多台服务器
自动化:安装系统、配置各种服务
远程实现:不需要光盘、U盘等安装介质

  1. 流程图
    网上一大把

  2. PXE所需服务

    • DHCP (10.0.0.1)

      DHCP通常被用于局域网环境,主要作用是集中的管理、分配IP地址,使client动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。简单来说,DHCP就是一个不需要账号密码登录的、自动给内网机器分配IP地址等信息的协议。

    • TFTP(10.0.0.1)

      用作引导加载的标准文件传输协议

      我们来看一下正确麒麟桌面版Arm架构PXE启动过程所获取的文件顺序

      Aug 15 18:22:38 129 dnsmasq-tftp[200290]: sent /var/tftp/arm_uefi/grubnetaa64.efi to 10.0.0.2
      Aug 15 18:22:41 129 dnsmasq-tftp[200290]: file /var/tftp/grub/arm64-efi/command.lst not found
      Aug 15 18:22:41 129 dnsmasq-tftp[200290]: file /var/tftp/grub/arm64-efi/fs.lst not found
      Aug 15 18:22:41 129 dnsmasq-tftp[200290]: file /var/tftp/grub/arm64-efi/crypto.lst not found
      Aug 15 18:22:41 129 dnsmasq-tftp[200290]: file /var/tftp/grub/arm64-efi/terminal.lst not found
      Aug 15 18:22:41 129 dnsmasq-tftp[200290]: sent /var/tftp/grub/grub.cfg to 10.0.0.2
      Aug 15 18:22:45 129 dnsmasq-tftp[200290]: sent /var/tftp/arm_uefi/vmlinuz to 10.0.0.2
      Aug 15 18:22:47 129 dnsmasq-tftp[200290]: sent /var/tftp/arm_uefi/vmlinuz to 10.0.0.2
      Aug 15 18:23:03 129 dnsmasq-tftp[200290]: sent /var/tftp/arm_uefi/initrd.lz to 10.0.0.2
      #  not found 文件不影响正常pxe装机
      # 10.0.0.2 这个ip是dhcp 分配的ip
      
    • FTP/HTTP/NFS(10.0.0.1)

      使用ftp/http/nfs中的一个来获取系统文件

      本文采用nfs

  3. 部署服务(debian系列):

    • Dhcp:sudo apt install isc-dhcp-server

      查看dhcp服务:sudo systemctl status isc-dhcp-server

      DHCP配置的主文件是/etc/dhcp/dhcpd.conf

      # 部分代码,详细代码在文章末尾
      next-server 10.0.0.1; # 下一个服务找谁?就是你的tftp 服务的ip,找到tftp-root后需要找到引导文件 efi
       
      class "pxeclients" {
       
      match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
       
      if option pxe-system-type = 00:07 {
       
      filename "amd_uefi/BOOTX64.EFI";
       
      } else if option pxe-system-type = 00:0b { #麒麟桌面arm架构pxe 引导文件
       
      filename "arm_uefi/grubnetaa64.efi";#告诉pc机器去tftp-root目录下面的:/var/tftp/arm_uefi/grubnetaa64.efi
       
      } else {
       
      filename "pxelinux.0";
      
      

      grubnetaa64.efi 该文件来自镜像挂载后本身自带的.

      下载后将镜像文件解压到~/iso目录下
      mkdir -p ~/iso/arm_mount
      mount /home/Kylin-Desktop-V10-SP1-General-Release-2203-ARM64.iso ~/iso/arm_mount
      cd ~/iso/arm_mount
      find ./ -name *.efi  # 这样就找到了grubnetaa64.efi,将其放到 /var/tftp/arm_uefi 对应dhcpd.conf 中的filename
      cp ./boot/grub/arm64-efi/monolithic/grubnetaa64.efi /var/tftp/arm_uefi
      
    • Tftp:sudo apt install dnsmasq 该工具支持dns、dhcp、tftp (dhcp配置有问题,所以没有采用它)

      查看dnsmasq打开tftp功能需修改配置文件/etc/dnsmasq.conf

      # Enable dnsmasq's built-in TFTP server
      enable-tftp
      
      # Set the root directory for files available via FTP.
      tftp-root=/var/tftp  # 手动新建该目录,该文件夹放一些引导文件和内核文件
      

      重启dnsmasq服务:sudo systemctl restart dnsmasq

      Dhcp讲了/var/tftp/arm_uefi/grubnetaa64.efi,除了efi文件/var/tftp/arm_uefi还需要vmlinuzinitrd这两个文件,同理在挂载后镜像中寻找.

      vmlinuzinitrd也是pc机器找到efi后自动获取的,只需要到对应路径就可以了。

      这里解释一下为什么需要再创建一个arm_uefi呢?主要是为后期做铺垫,解决多架构、多镜像的问题。

    • NFS:sudo apt-get install nfs-kernel-server

      配置文件:etc/exports

      /var/nfs_tarzan *(rw,sync,no_subtree_check,no_root_squash) 
      # 说明:/var/nfs_tarzan 是共享的路径,就是需要安装镜像的文件挂载后放到这里
      

      这里说明一下拷贝镜像文件的时候一定要注意./的隐藏文件

      cp -r ~/iso/arm_mount/. /var/nfs_tarzan/kylin_arm

      /kylin_arm目录同理兼容多架构

      到这里后,我们需要告诉pc机器去来我们/var/nfs_tarzan/kylin_arm目录下面找镜像,该接口实在grub.cfg中配置nfsroot=10.0.0.1:/var/nfs_tarzan/kylin_arm

  4. 引导文件:

    • bootloader 需要放到tftp-root所对应的路径中e.g. /var/tftp

    • 不同启动方式、不同架构都会导致bootloader 不同。

      • Legacy模式使用pxelinux.0引导,

      • UEFI模式使用BOOTAA64.EFI(ARM架构引导文件,但不适合麒麟桌面arm架构pxe),

      • x86为(BOOTX64.EFI)引导。

      • 麒麟 桌面 arm 架构pxe引导文件

        麒麟arm架构pxe引导文件在镜像解压后的:/boot/grub/arm64-efi/monolithic/grubnetaa64.efi

  5. grub.cfg文件

    PC机器获取到grubnetaa64.efi文件后自动去找grub.cfg文件。grub.cfg文件路径是在编译grubnetaa64.efi时候指定了grub.cfg文件路径(基于/var/tftp的相对路径),请参考:编译efi

    麒麟桌面arm架构pxe 启动所需要的grub.cfg路径相对于/var/tftp/grub/grub.cfg,绝对路径/var/tftp/grub/grub.cfg .手动创建该文件。详细内容在文章末尾

    # grub.cfg 部分内容
    menuentry 'Install Kylin V10 @ ARM64 UEFI Manually' --class red --class gnu-linux --class gnu --class os {
        linux /arm_uefi/vmlinuz boot=casper ip=dhcp rootwait ro locale=zh_CN netboot=nfs nfsroot=10.0.0.1:/var/nfs_tarzan/kylin_arm  automatic
        initrd /arm_uefi/initrd.lz
    }
    

    automatic 这个参数是无人值守自动安装的,配合ky-installer.cfg 文件使用。如果没有写automatic ,则ky-installer.cfg` 不生效。

  6. ky-installer.cfg该文件存放到安装镜像的nfs目录/var/nfs_tarzan/kylin_arm

    该文件如何使用?在grub.cfg 说添加automatic参数自动读取完成无人值守安装,包括一些预装软件都可以。详细内容在文章末尾

配置

  1. dhcp 配置/etc/dhcp/dhcpd.conf

    ddns-update-style interim;
     
    allow booting;
     
    allow bootp;
     
    ignore client-updates;
     
    set vendorclass = option vendor-class-identifier;
     
    option pxe-system-type code 93 = unsigned integer 16;
     
    subnet 10.0.0.1 netmask 255.255.255.0 { #配置要分配的地址段及netmask, 需要修改为自己的网段
     
    option routers 10.0.0.1; #配置网关,如dhcp有问题,注意网关的配置
     
    option domain-name-servers 223.5.5.5; #配置dns,也可配置自己内部的dns
     
    option subnet-mask 255.255.255.0; #配置netmask
     
    range dynamic-bootp 10.0.0.50 10.0.0.255; #分配的ip范围
     
    default-lease-time 21600; #缺省租约时间
     
    max-lease-time 43200; #最大租约时间
     
    next-server 10.0.0.1; #指定引导装机的ip
     
    class "pxeclients" {
     
    match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
     
    if option pxe-system-type = 00:07 {
     
    filename "amd_uefi/BOOTX64.EFI";
     
    } else if option pxe-system-type = 00:09 {
     
    filename "amd_uefi/BOOTX64.EFI";
     
    } else if option pxe-system-type = 00:0b { #arm服务器引导
     
    filename "arm_uefi/grubnetaa64.efi";
     
    } else {
     
    filename "pxelinux.0";
    }
    }
    }
    
  2. grup.cfg

    insmod gzio
    set default=0
    set timeout=5
    set is_preload=false
    
    set color_normal=white/black
    set color_highlight=black/light-gray
    
    menuentry 'Install Kylin V10 @ ARM64 UEFI Manually' --class red --class gnu-linux --class gnu --class os {
        linux /arm_uefi/vmlinuz boot=casper ip=dhcp rootwait ro locale=zh_CN netboot=nfs nfsroot=10.0.0.1:/var/nfs_tarzan/kylin_arm  automatic
        initrd /arm_uefi/initrd.lz
    }
    
  3. 无人值守 ky-installer.cfg

    [Encrypty]
    # true开启加密,false 为关闭
    encrypty=false
    # 加密密钥,如 qwer1234
    encryptyPWD=@ByteArray(abcd@1234)
    # true开启lvm逻辑卷安装(不常用),false 为非逻辑卷安装(常用)
    lvm=false
    
    [config]
    # 自动登陆,0 为不自动登录
    autologin=1
    # 自动安装,不用改动
    automatic-installation=1
    
    # 全盘安装指定设备,默认为/dev/sda,若需指定安装设备,将/dev/sda替换成指定设备名即可;
    # (推荐)若不填磁盘设备名(将下面设备名/dev/sda去掉),系统会默认选择合适磁盘安装。默认磁盘优先级:先最大nvme盘,再最大固态sdX盘,最后最大机械sdX盘
    devpath=
    # 使用 swapfile 替代swap分区,false 为不使用 swapfile,990/9A0 使用swapfile
    enable-swapfile=false
    # 出厂备份,0 为不出厂备份
    factory-backup=0
    # 主机名,仅包含字母、数字、下划线和连接符,长度不超过 64
    hostname=kylin
    # 语言,默认为中文
    language=zh_CN
    # 密码,默认为 qwer1234,至少 8 位,至少包含两类字符
    password=qwer1234
    #配置安装完成是否重启。1表示重启,0表示关机
    reboot=1
    # 时区,默认上海
    timezone=Asia/Shanghai
    # 用户名、全名,小写字母开头,且仅包含字母、数字、下划线和短横线,长度不超过 32
    username=kylin
    
    # 自动安装,不用改动
    data-unformat=false
    
    # 预安装软件配置清单,软件包名用逗号分隔,前后不要使用引号
    PreinstallApps=wps-office,rc-reader
    
    #以下主要用于自动安装的自定义分区和双系统需求,若无此需求,下面的配置无需改动
    [custompartition]
    
    # true为开启pxe自动安装自定义分区,false为关闭。自定义安装不支持加密安装和逻辑卷分区安装。其中自动安装需要在grub.cfg中增加automatic参数
    disk-custom=false
    # true为格式化整块磁盘,false为不格式化整块磁盘。不格式化磁盘主要用于安装第二个系统。
    format-disk=true
    # 系统偏移安装。可以根据需要,对系统在磁盘的起始位置进行设置。单位为MB,默认为1MB,且最小不能小于1MB
    # 安装第二个系统时,需根据第一个系统占用磁盘大小,合理设置偏移安装的起始位置。
    kos-start=1
    
    #  自定义分区清单。请将所需的分区名称填入下面的双引号内,分区之间请用“;”隔开(双引号和“;”均为英文输入格式)。
    #  下面分区的前后顺序,表示新装系统分区的顺序,可以根据需要进行调整。如下所示,efi、boot、root分别为系统的第一、二、三分区。
    custom-partitions="efi;boot;root;backup;data;swap;"
    # 自定义分区设置格式。custom-XXX中XXX为上面自定义的分区名称。fs=分区格式;mount=挂载点;size=分区大小,单位为MB;
    # 请将分区格式、挂载点和大小填入下面的双引号内,之间用“;”隔开(双引号和“;”均为英文输入格式)。
    custom-XXX="fs=***;mount=***;size=***;"
    
    # efi分区。默认格式为fat32; 挂载点为/boot/efi; 大小建议在0.5~2g之间,设置单位为MB;
    custom-efi="fs=fat32;mount=/boot/efi;size=1024;"
    # boot分区。默认格式为ext4; 挂载点为/boot; 大小建议在0.5~2g之间,设置单位为MB;
    custom-boot="fs=ext4;mount=/boot;size=1024;"
    # 系统根分区。默认格式为ext4; 挂载点为/; 大小,建议不小于25g,设置单位为MB;
    custom-root="fs=ext4;mount=/;size=40980;"
    # backup分区。默认格式为ext4; 挂载点为/backup; 大小设置单位为MB;
    custom-backup="fs=ext4;mount=/backup;size=20480;"
    # data分区。默认格式为ext4; 挂载点为/data; 大小设置单位为MB;
    custom-data="fs=ext4;mount=/data;size=10240;"
    # swap分区。默认格式为linux-swap; 挂载点为[swap]; 大小,建议不小于内存大小的1.2倍。如8g内存的机器,建议不小于8.8g,设置单位为MB;
    custom-swap="fs=linux-swap;mount=[swap];size=10240;"
    
    # 自动安装,下面的配置不用改动
    bootloader=/dev/sda ATA ST1000DM003-1SB1
    partitions="/boot/efi:/dev/sda1;/:/dev/sda7;linux-swap:/dev/sda5;"
    
    [setting]
    EnableSwap=false
    FileSystem="ext4;ext3;fat32;xfs;btrfs;kylin-data;efi;linux-swap;unused"
    FileSystemBoot="ext4;vfat"
    PartitionMountedPoints=";/;/boot;/backup;/tmp"
    

Tips

  1. 查看tftp 日志信息:tail -f -n 1000000 /var/log/syslog |grep dnsmasq-tftp

  2. 每个服务搭建好了之后一定要手动测试一下,不要直接用pc机器就开始。

  3. 完整的流程来自chat gpt 的回答

                 +---------------------------------------------------+
                 |                     Power On                      |
                 +---------------------------------------------------+
                                          |
                                          v
                 +---------------------------------------------------+
                 |         BIOS/UEFI Initialization and POST         |
                 +---------------------------------------------------+
                                          |
                                          v
                 +---------------------------------------------------+
                 |        PXE Option ROM Initialization             |
                 +---------------------------------------------------+
                                          |
                                          v
                 +---------------------------------------------------+
                 |         Network Initialization and DHCP           |
                 +---------------------------------------------------+
                                          |
                                          v
                 +---------------------------------------------------+
                 |             DHCP Discover and Offer               |
                 +---------------------------------------------------+
                                          |
                                          v
                 +---------------------------------------------------+
                 |             DHCP Request and Acknowledge          |
                 +---------------------------------------------------+
                                          |
                                          v
                 +---------------------------------------------------+
                 |         TFTP Download of PXE Bootloader           |
                 +---------------------------------------------------+
                                          |
                                          v
                 +---------------------------------------------------+
                 | Execute PXE Bootloader (e.g., iPXE)               |
                 +---------------------------------------------------+
                                          |
                                          v
                 +---------------------------------------------------+
                 |   Load and Execute Boot Menu or Configuration     |
                 +---------------------------------------------------+
                                          |
                                          v
                 +---------------------------------------------------+
                 |            Load and Boot OS Kernel                |
                 +---------------------------------------------------+
                                          |
                                          v
                 +---------------------------------------------------+
                 |             OS Initialization and Boot            |
                 +---------------------------------------------------+
    
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值