一、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