• PXE服务搭建及配置


    PXE&OEM服务配置及使用说明

    # =============================================
    # Author : Mikigo
    # Time   : 2021/8/10
    # =============================================
    

    PXE全称Pre-Boot Execution Environment, 中文名预执行环境.

    详情:https://wikidev.uniontech.com/PXE

    OEM镜像用来满足厂商的个性化的定制,可以加入需求。

    详情:https://wikidev.uniontech.com/OEM%E9%95%9C%E5%83%8F%E5%AE%9A%E5%88%B6%E8%AF%B4%E6%98%8E#OEM.E5.AE.9A.E5.88.B6

    一、环境搭建

    sudo apt install -y net-tools 
    sudo apt install -y syslinux 
    sudo apt install -y syslinux-efi 
    sudo apt install -y pxelinux 
    sudo apt install -y dnsmasq 
    sudo apt install -y nfs-kernel-server
    
    sudo apt install -y debian-installer-10-netboot-amd64 
    sudo apt install -y debian-installer-10-netboot-arm64
    sudo apt install -y debian-installer-10-netboot-mips64el
    

    二、配置

    1、网络配置

    1、PXE服务器、所有测试机申请固定IP。
    流程:OA——>绑定mac——>填入IP和mac地址后提交即可。
    2、免认证
    流程:企业微信联系运维工程师,提供IP和mac地址,做免认证。
    

    2、配置DHCP服务

    目前成都自动化测试机器为独立网段,DHCP在本地控制。

    cd /etc/dnsmasq.conf
    

    写入以下内容

    listen-address=10.8.15.2
    dhcp-match=set:bios,60,PXEClient:Arch:00000
    dhcp-boot=tag:bios,/debian-installer/amd64/bootnetx64.efi
    dhcp-match=set:efibc,60,PXEClient:Arch:00007
    dhcp-boot=tag:efibc,/debian-installer/amd64/bootnetx64.efi
    dhcp-match=set:efix86,60,PXEClient:Arch:00009
    dhcp-boot=tag:efibc,/debian-installer/amd64/bootnetx64.efi
    dhcp-match=set:efiarm,60,PXEClient:Arch:00011
    dhcp-boot=tag:efiarm,/debian-installer/arm64/grubaa64.efi
    dhcp-match=set:efimips,60,PXEClient:Arch:00012
    dhcp-boot=tag:efimips,/debian-installer/mips64/core.efi
    
    # 绑定的⽹卡
    interface=enp2s0
    bind-interfaces
    # 此项⾮必须
    domain=pxe.local
    # IP分配范围 192.168.0.50,192.168.0.150, dhcp租期1⼩时
    dhcp-range=10.8.15.10,10.8.15.100,1h
    # ⽹关
    dhcp-option=3,10.8.15.1
    # DNS
    dhcp-option=6,10.8.0.10
    # 转发dns请求到上级服务器
    server=114.114.114.114
    # ⼴播地址
    dhcp-option=28,10.8.255.255
    # NTP服务器,0.0.0.0 指向⾃⼰
    dhcp-option=42,0.0.0.0
    # 启⽤dnsmasq内置tftp服务
    enable-tftp
    # tftp根⽬录
    tftp-root=/var/tftp
    
    log-facility=/var/log/dnsmasq.log
    log-async=20
    

    如果采用公司的DHCP服务则不需要这么复杂的配置,采用以下配置即可。(以下内容现在不需要)

    sudo vim /etc/dnsmasq.conf
    

    写入

    domain=pxe.local
    interface=enp2s0
    bind-interfaces
    enable-tftp
    tftp-root=/var/tftp
    log-facility=/var/log/dnsmasq.log
    log-async=20
    

    3、配置NFS服务

    sudo mkdir -p /var/nfs/amd64/
    sudo mkdir -p /var/nfs/arm64/
    sudo mkdir -p /var/nfs/mips64/
    echo '/var/nfs *(ro,sync,no_subtree_check)' | sudo tee -a /etc/exports
    sudo systemctl restart nfs-kernel-server
    

    挂载镜像

    sudo mount uniontech*.iso /mnt/  
    sudo cp -r /mnt/* /var/nfs/amd64/ 
    sudo cp -r /mnt/.disk/ /var/nfs/amd64/
    sudo chown -R root:root /var/nfs/
    sudo chmod -R 755 /var/nfs/amd64/
    sudo umount /mnt/
    

    4、配置TFTP服务

    sudo mkdir -p /var/tftp/debian-installer/amd64
    sudo mkdir -p /var/tftp/debian-installer/arm64
    sudo mkdir -p /var/tftp/debian-installer/mips64
    

    获取debian-installer包

    sudo cp -r /usr/lib/debian-installer/images/10/amd64/text/debian-installer /var/tftp
    

    也可以到官方下载URL:http://http.us.debian.org/debian/dists/buster/main/installer-amd64/current/images/netboot/debian-installer/

    4.1、live内核文件

    live下面存放内核等文件,在nfs和tftp的live是一样的,所以只需要建立软连接指向/var/nfs/amd64/live即可。

    ln -s /var/nfs/amd64/live /var/tftp/debian-installer/amd64/live
    ln -s /var/nfs/arm64/live /var/tftp/debian-installer/arm64/live
    ln -s /var/nfs/mips64/live /var/tftp/debian-installer/mips64/live
    

    注意,mips镜像里live文件的vmlinuz和initrd.img文件存在放boot目录下的,所以需要将这两个文件拷贝过来。一般在挂载镜像的时候完成。

    sudo cp /mnt/boot/vmlinuz /var/tftp/debian-installer/mips64/live
    sudo cp /mnt/boot/initrd.img /var/tftp/debian-installer/mips64/live
    

    4.2、引导文件及配置

    4.2.1、AMD
    sudo cp -r /mnt/live /var/tftp/debian-installer/amd64
    sudo cp /var/tftp/debian-installer/amd64/bootnetx64.efi /var/tftp/
    

    修改grub.cfg

    sudo vim /var/tftp/debian-installer/amd64/grub/grub.cfg
    

    写入以下内容

    set menu_color_normal=white/black
    set menu_color_highlight=black/light-gray
    set timeout=5
    insmod gzio
    
    menuentry "Install uos" {
        set gfxpayload=keep
        linux   /debian-installer/amd64/live/vmlinuz console=tty boot=live netboot=nfs nfsroot=10.8.13.222:/var/nfs/amd64/ components union=overlay locales=zh_CN.UTF-8 livecd-installer --
        initrd  /debian-installer/amd64/live/initrd.lz
    }
    menuentry "Try uos without installing" {
        set gfxpayload=keep
        linux   /debian-installer/amd64/live/vmlinuz console=tty boot=live union=overlay quiet splash --
        initrd  /debian-installer/amd64/live/initrd.lz
    }
    

    nfsroot=10.8.13.222 这个IP是PXE服务器的IP

    4.2.2、ARM
    sudo cp -r /mnt/live /var/tftp/debian-installer/arm64
    sudo cp /var/tftp/debian-installer/arm64/grubaa64.efi /var/tftp/
    

    修改grub.cfg

    sudo vim /var/tftp/debian-installer/arm64/grub/grub.cfg
    

    写入以下内容

    set menu_color_normal=white/black
    
    set menu_color_highlight=black/light-gray
    
    set timeout=5
    
    insmod gzio
    
    menuentry "Install uos" {
        set gfxpayload=keep
        linux   /debian-installer/arm64/live/vmlinuz console=tty boot=live netboot=nfs nfsroot=10.8.15.2:/var/nfs/arm64/ components ethdevice-timeout=60 union=overlay locales=zh_CN.UTF-8 livecd-installer --
        initrd  /debian-installer/arm64/live/initrd.img
    }
    menuentry "Try uos without installing" {
        set gfxpayload=keep
        linux   /debian-installer/arm64/live/vmlinuz console=tty boot=live union=overlay quiet splash --
        initrd  /debian-installer/arm64/live/initrd.img
    }
    
    4.2.3、MIPS
    sudo cp /var/tftp/debian-installer/mips64/core.efi /var/tftp/
    

    修改grub.cfg

    sudo vim /var/tftp/debian-installer/mips64/grub2/grub.cfg
    sudo cp -r /var/tftp/debian-installer/mips64/grub2 /var/tftp/
    

    写入以下内容

    set default=0
    set timeout=5
    set ethdevice-timeout=60
    search --no-floppy --set=root -l 'Fedora-MATE'
    
    echo -e "
    Welcome to UOS installer!
    
    "
    
    menuentry 'PXE Install UOS' {
      echo 'Loading kernel ...'
      linux /debian-installer/mips64/live/vmlinuz root=/dev/nfs nfsroot=10.8.15.2:/var/nfs/mips64 rw console=tty livecd-installer locales=zh_CN.UTF-8 boot=live
     
      echo 'Loading initrd ...'
      initrd /debian-installer/mips64/live/initrd.img
    }
    

    5、其他配置

    PXE服务器需要安装sshpass,如果需要请求utp平台接口,还需要安装requests

    sudo apt install -y sshpass
    sudo pip3 install requests
    

    消除第一次ssh询问

    sudo vim /etc/ssh/ssh_config
    

    # StrictHostKeyChecking ask 改为StrictHostKeyChecking no

    三、OEM定制镜像

    下载镜像地址:https://cdimage.uniontech.com/,找到要下载的镜像,使用wget下载即可。

    替换/var/nfs/amd64/oem/里面的文件

    1、setting.ini 配置文件

    [General]
    # deb repository entry to be added in the sources.list file.
    apt_source_deb = "deb [by-hash=force] https://professional-packages.chinauos.com/desktop-professional eagle main contrib non-free"
    # source repository entry to be added in the sources.list file.
    apt_source_deb_src = "#deb-src [by-hash=force] https://professional-packages.chinauos.com/desktop-professional eagle main contrib non-free"
    #跳过虚拟机环境提示界面
    skip_virtual_machine_page = true
    #跳过语言选择界面
    skip_select_language_page = true
    #设置默认语言为中文
    select_language_default_locale = "zh_CN"
    #跳过后配置语言选择界面
    skip_select_language_page_on_first_boot = true
    #跳过时区设置界面
    skip_timezone_page = true
    #跳过系统修复界面
    skip_repair_system_page=true
    #跳过键盘布局选择界面
    skip_system_keyboard_page = true
    #跳过网络设置界面
    skip_network_page = true
    #设置默认时区为亚洲/上海
    timezone_default = "Asia/shanghai"
    # 如果partition_do_auto_part设置为true, 安装器会认为将进行无值手安装,此时如果skip_system_info_page设置为true表示不自动创建用户,如果设置为false表示自动创建用户,但需要提供用户名和密码
    skip_system_info_page = false
    system_info_default_username = "uos"
    system_info_default_hostname = "uos-PC"
    system_info_hostname_auto_suffix = "-PC"
    system_info_hostname_reserved = "localhost"
    system_info_default_password = "1"
    #设置默认键盘布局为us
    system_info_default_keyboard_layout = "us"
    #设置是否开启审核模式
    system_check_mode = false
    #设置将用户密码设置为root密码
    set_root_password_from_user = true
    DI_FULLDISK_MODE = true
    #跳过分区界面
    skip_partition_page = true
    #执行自动分区操作
    partition_do_auto_part = true
    #允许用户自动登录,新镜像不支持该配置
    #lightdm_enable_auto_login = true
    #开启debug调试
    system_debug=true
    

    2、hooks配置

    hooks
    ├── after_chroot
    │   └── 99_finish.job
    ├── first_boot_setup.sh
    └── in_chroot
        ├── 98_audit_mode_script.job
        └── 99_debug.job
    

    99_finish.job 装机之后自动重启

    sync && sleep 5 && sync && sleep 5
    
    echo 'b' > /proc/sysrq-trigger  || systemctl reboot
    

    first_boot_setup.sh 重启之后一些配置,配置项太多就不贴了

    四、测试机设置

    测试机找IT切到15网段

    1、AMD和ARM

    进入BIOS

    BIOS—>高级—>网络堆栈配置

    网络堆栈	   启用
    IPv4 PXE支持	启用
    IPv6 PXE支持	启用
    

    BIOS—>高级—>启动

    CSM支持		启用
    启动选项过滤	 UEFI
    网络			UEFI
    第一启动选项	UOS, 硬盘等
    

    进入操作系统之后,efibootmgr命令控制下次以网络启动

    uos@uos-PC:~$ efibootmgr 
    BootCurrent: 0001
    Timeout: 1 seconds
    BootOrder: 0001,0004,0005,0000,0002
    Boot0000* Windows Boot Manager
    Boot0001* UOS
    Boot0002* deepin
    Boot0004* UEFI: PXE IP4 Realtek PCIe GBE Family Controller
    Boot0005* ubuntu
    
    sudo efibootmgr -n 0004 # 指定下一次启动以PXE启动
    

    2、MIPS

    mips机器没有efibootmgr工具,是通过精准控制流量开关实现的,测试机BIOS设置:

    启动项一设置为网络启动
    启动项二设置为硬盘启动
    

    五、MIPS平台网络启动实现方案

    由于MIPS平台没有efibootmgr命令,无法通过命令直接指定下一次启动的顺序,实现方案如下:

    • 将测试机启动项一设置为网络启动,启动项二为硬盘启动。
    • 重启测试机之后,在服务端检测是否收到了测试机的tftp请求,收到之后,屏蔽掉测试机IP。
    • 装机过程中的重启,由于屏蔽了测试机IP,网络启动超时,进入启动项二,正常进入系统。
    • 下次需要装机时,解锁测试机IP,进入网络装机。
    没伞的孩子,就要学会在雨中奔跑!
  • 相关阅读:
    Codeforces Round #276 (Div. 1) D. Kindergarten dp
    Codeforces Round #221 (Div. 1) B. Maximum Submatrix 2 dp排序
    hihoCoder Challenge 27 #1469 : 福字 dp
    Codeforces Beta Round #5 C. Longest Regular Bracket Sequence 括号序列 dp+栈
    Python id() 函数
    Python divmod() 函数
    Python any() 函数
    Python next() 函数
    Python slice() 函数
    Python3 hex() 函数
  • 原文地址:https://www.cnblogs.com/mikigo/p/14800310.html
Copyright © 2020-2023  润新知