Proxmox VE installer with MultiBootUSB

tl;dr I have uploaded a mod for Proxmox+multibootusb to make Proxmox handle ISO install images.

This article is a brief look at my troubles with getting the Proxmox installer to work with MultiBootUSB, and, a solution that I cooked up to resolve it.

The conventional process of using the Proxmox VE installer ISO is to either burn it to an optical disk (guaranteed to work), or, use a tool like dd in linux to write the ISO image directly to a USB disk, and, hope it works.

I like using USB disks because they are compact, and, have faster reads, which means a faster installation. But, I don’t like the idea of using an entire drive dedicated to just the installer.

So, in comes MultiBootUSB. I use it because it is designed to help with this specific problem, except… nothing is easy.

Proxmox installer on USB drives

If you google “using the Proxmox installer on USB”, there are a lot of results, many of which are questions from people asking why it doesn’t work right.

Consolidate the search results, and, the general rule of thumb that is revealed is, that, you need to use dd to write the image to the entire USB drive. An image that is only ~688MiB. What a waste of drive-space, and, a waste of an entire drive! Another caveat to this is that the drive has to be detected as removable during the initialization process, or you are going to have a bad time.

Trying to add the ISO using MultiBootUSB’s conventional steps, got me nowhere. The Proxmox installer would abort on boot, complaining about a modified kernel.

I like MultiBootUSB, and, I wanted to try and stick with it; so deep into the rabbit hole I went.

The /multibootusb/iso fallback

MultiBootUSB has a nifty fallback to try loading weird ISO images. You copy them to the /multibootusb/iso/ directory of your USB drive. There also needs to be the correct grub configuration files under /multibootusb/grub/menus/ for your platform. Incidentally, MultiBootUSB does NOT have the menus pre-configured for the Proxmox ISOs.

I would soon realize, that creating the new grub menu configs for Proxmox would be the easy part. Even with the menus configured to load the ISO image, Proxmox was hell bent on testing for cdrom. That’s the message you see verbatim from the console. I still had got some more head-scratching to do.

The initial RAM disk, for Proxmox

The initial RAM disk is responsible for detecting the correct installation medium and kicking off the actual install process.

The initrd.img used by Proxmox specifically looks for block devices, and, also filters them by removable devices. This presented a few problems for me, which I could only resolve by modifying the initrd image.

When the initial RAM disk loads, it is like a blank slate. No devices are auto-mounted (except the RAM disk itself), and, it only has the kernel boot parameters to go by to load correctly.

First, I had to check every block device that could potentially contain the ISO file. I did NOT want to filter by removable for the device.

Second, once I had the correct drive, I also needed a path for the ISO on the filesystem.

I solved both problems by adding a new boot parameter isopath, that gets passed to the kernel from the grub menu.

I coded it so that, when the initial RAM disk encounters the isopath parameter, it branches off into a separate code-block. The code-block searches through all the block devices detected on the system (removable or otherwise).

Once a match for isopath is found on a device, it is mounted to /mnt first. It is then tested to see if it is a valid PVE installer. If everything checks out, the installation proceeds as it normally would. If not, the ISO is unmounted, and the script proceeds to the next device to continue looking for the correct file.

Eureka! It works!

No more slow-clunky optical-media, or, space-wasting proxmox-only USB disks.

The mod

The mod is available for download from my project page. Instructions for installation, and, usage are available on that page.

Conclusion

This was an interesting exercise for me to look at and modify initrd. It gave me some clarity, and, also respect for the minds behind the concept of initial RAM disks on boot.

I hope somebody else finds my work useful. Please leave a comment or feedback if you do.