Proxmox VE 32位UEFI BIOS安装修改

一、Proxmox VE镜像分析

$ tree -L 2
.
├── boot
│   ├── boot.cat
│   ├── grub
│   ├── initrd.img
│   ├── linux26
│   └── memtest86+.bin
├── COPYING
├── COPYRIGHT
├── debian -> .
├── dists
│   └── stretch
├── efi.img
├── EULA
├── mach_kernel
├── proxmox
│   ├── country.dat
│   ├── packages
│   └── pve-base.cnt
├── pve-base.squashfs
├── pve-installer.squashfs
├── Release.txt
└── System
    └── Library
9 directories, 14 files

grub文件夹:包含引导程序GRUB所用到的文件。

initrd.img:系统初始化所使用的镜像,里面包含一个最小化的系统,包含了/dev、/etc、/bin等很多基本的目录,还有关键的init程序,负责驱动的加载和文件系统的初始化。

linux26:Linux 2.6内核

efi.img:系统引导镜像,内含boot.efi、bootia32.efi、bootx64.efi。

proxmox文件夹:系统预安装包的存放目录

​    PVE的根系统默认安装包是在proxmox文件夹下的,只要不破坏其依赖关系,可以将需要预安装的包及其依赖放到这个文件夹下。

    PVE预安装包时候使用的是循环读取proxmox/packages中的deb,然后使用的安装方法是先解压然后再配置,这样不会产生依赖关系而导致装不上deb的问题。

pve-base.squashfs:安装的根系统,也就是最终的系统

pve-installer.squashfs:安装时需要的临时系统

二、iso安装镜像解包

$ mount -o loop $ISO_NAME $PVE_MNT_PATH

$ cd $PVE_MNT_PATH

$ rsync -av . $PVE_ISO_PATH > /dev/null

$ unsquashfs -f -i $PVE_ISO_PATH/pve-base.squashfs -dest $PVE_BASE_PATH

三、修改Proxmox VE安装脚本

在pve-installer.squashfs里的usr/bin/proxinstall文件中,修改prepare_grub_efi_boot_esp中

/usr/sbin/grub-install --target i386-efi --no-floppy --bootloader-id='proxmox' $dev
cp $targetdir/boot/efi/EFI/proxmox/grubia32.efi $targetdir/boot/efi/EFI/BOOT/BOOTia32.EFI

sub prepare_grub_efi_boot_esp {
    my ($dev, $espdev, $targetdir) = @_;

    syscmd("mount -n $espdev -t vfat $targetdir/boot/efi") == 0 ||
        die "unable to mount $espdev\n";

    eval {
        my $rc = syscmd("chroot $targetdir /usr/sbin/grub-install --target i386-efi --no-floppy --bootloader-id='proxmox' $dev");
        if ($rc != 0) {
            if ($boot_type eq 'efi') {
                die "unable to install the EFI boot loader on '$dev'\n";
            } else {
                warn "unable to install the EFI boot loader on '$dev', ignoring (not booted using UEFI)\n";
            }
        }
        # also install fallback boot file (OVMF does not boot without)
        mkdir("$targetdir/boot/efi/EFI/BOOT");
        syscmd("cp $targetdir/boot/efi/EFI/proxmox/grubia32.efi $targetdir/boot/efi/EFI/BOOT/BOOTia32.EFI") == 0 ||
            die "unable to copy efi boot loader\n";
    };
    my $err = $@;

    eval {
        syscmd("umount $targetdir/boot/efi") == 0 ||
            die "unable to umount $targetdir/boot/efi\n";
    };
    warn $@ if $@;

    die "failed to prepare EFI boot using Grub on '$espdev': $err" if $err;
}

四、iso镜像重封装

$ dd if=proxmox-ve_5.4-1.iso bs=512 count=1 of=proxmox.mbr //iso前512字节做系统mbr

$ mksquashfs pve_base/ pve-base.squashfs  -b 128K  -comp xz //生成文系统,压缩

$ $ xorriso -as mkisofs -o ../$MY_ISO -r -V 'inspur' --grub2-mbr ../proxmox.mbr --protective-msdos-label -efi-boot-part --efi-boot-image  -c '/boot/boot.cat' -b '/boot/grub/i386-pc/eltorito.img' -no-emul-boot -boot-load-size 4 -boot-info-table --grub2-boot-info -eltorito-alt-boot -e '/efi.img' -no-emul-boot .

 ————————————————
版权声明:本文为CSDN博主「qhw2012」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qhw2012/article/details/106698250

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值