当前位置: 首页 > news >正文

PXE 安装ubuntu22.04自动判断UEFI或者Legacy引导

UEFI引导安装:https://blog.csdn.net/qq_50247813/article/details/145777563
Legacy引导安装:https://blog.csdn.net/qq_50247813/article/details/145730754

本篇根据上两篇快速部署pxe服务器,并自动判断uefi或者legacy引导

一、服务器必要软件下载

root@pxeserver:~# apt-get install dnsmasq -y
root@pxeserver:~# apt-get install apache2 -y

二、dnsmasq配置修改

将uefi和Legacy 引导文件都加上去 , tftp-root=/srv/tftp 目录需要自己创建
mkdir -p /srv/tftp

root@local:/srv/tftp# cat /etc/dnsmasq.d/pxe.conf
port=0
interface=ens33
bind-interfaces
dhcp-range=ens33,192.168.25.100,192.168.25.200,255.255.255.0,12h
dhcp-boot=pxelinux.0
dhcp-match=set:efi-x86_64,option:client-arch,7
dhcp-boot=tag:efi-x86_64,bootx64.efi
enable-tftp
tftp-root=/srv/tftp

重启dnsmasq

root@pxeserver:~# systemctl restart dnsmasq

三、上传到iso镜像到web目录,并创建uefi 和 Legacy 的 autoinstall 文件

root@pxeserver:/var/www/html# mkdir legacy-autoinstall  uefi-autoinstall iso
root@pxeserver:/var/www/html# touch uefi-autoinstall/meta-data legacy-autoinstall/meta-data
root@pxeserver:/var/www/html# cat uefi-autoinstall/user-data
#cloud-config
autoinstall:
  version: 1
  # 设置语言
  locale: en_US.UTF-8
  # 设置时区
  timezone: Asia/Shanghai
  keyboard:
    layout: us
  # 安装ubuntu服务器版,最小化选择 ubuntu-mini
  source:
    id: ubuntu-server
    search_drivers: false
  # 网络配置,根据具体接口名称修改。
  network:
    version: 2
    ethernets:
      ens33: {dhcp4: true}
  # 是否安装第三方驱动
  drivers:
    install: false
  # 内核安装,linux-generic 通用内核
  kernel:
    package: linux-generic
  # 设置存储库,这里使用阿里云
  apt:
    fallback: offline-install
    mirror-selection:
      primary:
      - arches: [amd64]
        uri: http://mirrors.aliyun.com/ubuntu/
      - arches: [arm64]
        uri: http://mirrors.aliyun.com/ubuntu-ports
    preserve_sources_list: false
  # 配置存储,分区
  storage:
    config:
    - {ptable: gpt, path: /dev/sda, wipe: superblock-recursive, preserve: false, name: '', grub_device: false, type: disk, id: disk-sda}
    - {device: disk-sda, size: 300M, wipe: superblock, flag: boot , number: 1, preserve: false, grub_device: true, type: partition, id: partition-0}
    - {device: disk-sda, size: 300M, wipe: superblock, number: 2, preserve: false, type: partition, id: partition-1}
    - {device: disk-sda, size: -1 , wipe: superblock, number: 3, preserve: false, type: partition, id: partition-2}
    - {fstype: fat32, volume: partition-0, preserve: false, type: format, id: format-0}
    - {fstype: ext4, volume: partition-1, preserve: false, type: format, id: format-1}
    - {fstype: ext4, volume: partition-2, preserve: false, type: format, id: format-2}
    - {device: format-0, path: /boot/efi, type: mount, id: mount-0}
    - {device: format-1, path: /boot, type: mount, id: mount-1}
    - {device: format-2, path: /, type: mount, id: mount-2}
  # 配置账号信息
  identity:
    hostname: ubuntu
    username: ubuntu
    password: $6$t0CWYjTG8Nyq8pNv$2Gws/1V7ImPm/Pc8i6.KZU.epvF.wAyHuwrgbTj.pCD/smAgELHCfNYcdx6r/MKQkZgQyjMXRyYntgFRqxPUY.
  # ssg 配置
  ssh:
    allow-pw: true
    install-server: true
  # 软件安装
  packages:
    - vim
    - git
  # 重启前要运行的命令,curtin in-target --target=/target -- $shell_commandcurtin 格式
  late-commands:
    - curtin in-target --target=/target -- apt-get -y update
  
root@pxeserver:/var/www/html# cat legacy-autoinstall/user-data
#cloud-config
autoinstall:
  version: 1
  # 设置语言
  locale: en_US.UTF-8
  # 设置时区
  timezone: Asia/Shanghai
  keyboard:
    layout: us
  # 安装ubuntu服务器版,最小化选择 ubuntu-mini
  source:
    id: ubuntu-server
    search_drivers: false
  # 网络配置,根据具体接口名称修改。
  network:
    version: 2
    ethernets:
      ens33: {dhcp4: true}
  # 是否安装第三方驱动
  drivers:
    install: false
  # 内核安装,linux-generic 通用内核
  kernel:
    package: linux-generic
  # 设置存储库,这里使用阿里云
  apt:
    fallback: offline-install
    mirror-selection:
      primary:
      - arches: [amd64]
        uri: http://mirrors.aliyun.com/ubuntu/
      - arches: [arm64]
        uri: http://mirrors.aliyun.com/ubuntu-ports
    preserve_sources_list: false
  # 配置存储,分区
  storage:
    config:
    - {ptable: gpt, path: /dev/sda, wipe: superblock-recursive, preserve: false, name: '', grub_device: true,type: disk, id: disk-sda}
    - {device: disk-sda, size: 1M, flag: bios_grub, number: 1, preserve: false,type: partition, id: partition-0}
    - {device: disk-sda, size: 300M, wipe: superblock, flag: '', number: 2,preserve: false, type: partition, id: partition-1}
    - {device: disk-sda, size: -1, wipe: superblock, flag: '', number: 3, preserve: false, type: partition, id: partition-2}
    - {fstype: ext4, volume: partition-1, preserve: false, type: format, id: format-0}
    - {fstype: ext4, volume: partition-2, preserve: false, type: format, id: format-1}
    - {device: format-0, path: /boot, type: mount, id: mount-0}
    - {device: format-1, path: /, type: mount, id: mount-1}
  # 配置账号信息
  identity:
    hostname: ubuntu
    username: ubuntu
    password: $6$t0CWYjTG8Nyq8pNv$2Gws/1V7ImPm/Pc8i6.KZU.epvF.wAyHuwrgbTj.pCD/smAgELHCfNYcdx6r/MKQkZgQyjMXRyYntgFRqxPUY.
  # ssg 配置
  ssh:
    allow-pw: true
    install-server: true
  # 软件安装
  packages:
    - vim
    - git
  # 重启前要运行的命令,curtin in-target --target=/target -- $shell_commandcurtin 格式
  late-commands:
    - curtin in-target --target=/target -- apt-get -y update
 

四、将Legacy引导所需文件 复制到 tftp目录下

1. 获取内核和镜像文件

root@pxeserver:/var/www/html# mount -o loop /var/www/html/iso/ubuntu-22.04.5-live-server-amd64.iso  /mnt
root@pxeserver:/var/www/html# cp /mnt/casper/{vmlinuz,initrd} /srv/tftp/

2. 获取引导文件

从 Syslinux 官方网站下载 pxelinux.0 文件
Syslinux 官网地址:https://www.syslinux.org
下载地址:https://www.kernel.org/pub/linux/utils/boot/syslinu

pxelinux.0文件的位置在 syslinux-6.03/bios/core/pxelinux.0

root@pxeserver:~# wget https://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.03.tar.gz
root@pxeserver:~# tar -zxvf syslinux-6.03.tar.gz
root@pxeserver:~# cp syslinux-6.03/bios/core/pxelinux.0 /srv/tftp/

3. 创建引导配置文件

注意自己的web服务器地址,自动安装目录为 legacy-autoinstall

root@pxeserver:~# cd /srv/tftp/
root@pxeserver:/srv/tftp# mkdir -p pxelinux.cfg
root@pxeserver:/srv/tftp# cat  pxelinux.cfg/default
DEFAULT menu.c32
MENU TITLE PXE Boot Menu
PROMPT 0
TIMEOUT 30

LABEL Ubuntu 22.04 BIOS Install
    MENU LABEL Install Ubuntu 22.04 (BIOS)
    KERNEL vmlinuz
    INITRD initrd
    APPEND root=/dev/ram0 ramdisk_size=1024 ip=dhcp url=http://192.168.25.144/iso/ubuntu-22.04.5-live-server-amd64.iso autoinstall ds=nocloud-net;s=http://192.168.25.144/legacy-autoinstall/ cloud-config-url=/dev/null

4. 拷贝Syslinux 引导加载程序中的关键文件到tftp目录

root@pxeserver:~# apt-get install syslinux-common -y
root@pxeserver:~# cp /usr/lib/syslinux/modules/bios/{ldlinux.c32,libutil.c32,menu.c32} /srv/tftp

五、 将UEFI引导文件、内核、镜像放到tftp工作目录下

1. 获取内核和镜像文件

复用Legacy的内核和镜像文件

2. 获取引导文件

# bootx64.efi
root@pxeserver:~# apt download shim-signed
root@pxeserver:~# dpkg -x shim-signed*deb shim
root@pxeserver:~# cp shim/usr/lib/shim/shimx64.efi.signed.latest /srv/tftp/bootx64.efi
# grubx64.efi
root@pxeserver:~# apt download grub-efi-amd64-signed
root@pxeserver:~# dpkg -x grub-efi-amd64-signed*deb grub
root@pxeserver:~# sudo cp grub/usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed /srv/tftp/grubx64.efi

3. GRUB 还需要一个字体通过tftp获取

root@pxeserver:~# apt download grub-common
root@pxeserver:~# dpkg -x grub-common*deb grub-common
root@pxeserver:~# cp grub-common/usr/share/grub/unicode.pf2 /srv/tftp/

4. 创建引导配置文件

UEFI 引导配置文件 ds=nocloud-net;s=http://192.168.25.144/autoinstall/ cloud-config-url=/dev/null 需要转义一下。自动安装目录为uefi-autoinstall

root@pxeserver:~# cd /srv/tftp/
root@pxeserver:/srv/tftp# mkdir grub
root@pxeserver:/srv/tftp# cat grub/grub.cfg
default=0
set timeout=3

if loadfont unicode ; then
  set gfxmode=auto
  set locale_dir=$prefix/locale
  set lang=en_US
fi
terminal_output gfxterm

if background_color 44,0,30; then
  clear
fi

set menu_color_normal=white/black
set menu_color_highlight=black/light-gray

menuentry "Ubuntu server 22.04 autoinstall" {
        set gfxpayload=keep
        # 修改为实际地址
        linux  vmlinuz root=/dev/ram0 ramdisk_size=1024 ip=dhcp url=http://192.168.25.144/iso/ubuntu-22.04.5-live-server-amd64.iso autoinstall ds=nocloud-net\;s=http://192.168.25.144/uefi-autoinstall/ cloud-config-url=/dev/null ---
        initrd initrd
}

最后查看一下tftp目录结构

root@pxeserver:/srv/tftp# tree
.
├── bootx64.efi
├── grub
│   └── grub.cfg
├── grubx64.efi
├── initrd
├── ldlinux.c32
├── libutil.c32
├── menu.c32
├── pxelinux.0
├── pxelinux.cfg
│   └── default
└── vmlinuz

2 directories, 10 files

六、客户端测试

已测试,客户端内存最少需要4G!

自行测试。

相关文章:

  • 第九节: Vue 3 中的 provide 与 inject:优雅的跨组件通信
  • Apache Doris 索引的全面剖析与使用指南
  • 【WSL2】 Ubuntu20.04 GUI图形化界面 VcXsrv ROS noetic Vscode 主机代理 配置
  • 检查SSH安全配置-关于“MaxStartups参数”
  • django filter 不等于
  • 面试基础--线程生命周期、线程池(ThreadPoolExecutor 工作原理)
  • vue3除了pinia/vuex的其他通讯方式还有那些
  • AWVS(web)扫描器安装与使用
  • 记一次项目上vCenter集群恢复过程
  • 网络应用层之HTTPS
  • kubernetes-完美下载
  • java进阶1——JVM
  • 从0开始的操作系统手搓教程14——进一步完成中断子系统
  • 网络原理---HTTP/HTTPS
  • 在 MySQL 的 InnoDB 存储引擎中,部分数据库优化策略
  • 当AI搜索撕开传统搜索的裂缝,警惕AI搜索的“信息茧房”
  • LINUX、WIN32、MACOSX多个平台上GCC、MSVC之间结构体按序列大小1字节对齐
  • 《Elasticsearch实战:从零开始构建高效全文搜索引擎》
  • Webpack打包过程中如何处理ES6模块的循环依赖?
  • 基于SpringBoot的“古城景区管理系统”的设计与实现(源码+数据库+文档+PPT)
  • 怎么做网页app/站长工具seo排名查询
  • 网站推广的定义/各城市首轮感染高峰期预测
  • 做网站私活多少钱/怎么做游戏推广员
  • 南充网站建设公司/百度网盟推广怎么做
  • 新疆乌鲁木齐/云优化seo软件
  • 做h网站/网站的优化与推广分析