Hi there,
I would like to contribute to Proxmox with a simple(?) how-to that makes it possible to install PVE 2.0 via PXE.
PREREQUSITES
The following needs to be up and running for any kind of PXE + iPXE / gPXE installation, the setup of these services are specific for your environment, make sure that they all work as expected:
NEW INITRD with embedded ISO
In order to have the installer find the .ISO image it needs to be embedded in the initrd.img that will be downloaded via PXE. Also, the init script in this new initrd.img needs to be modified so that it finds and mounts the embedded .ISO image instead of searching for a physical CD.
An overview of the required steps:
Detailed step-by-step guide:
PXE MENU
I assume that your TFTP server's root is "/var/www/boot/" and that it contains the "menu.c32" file from the Syslinux project. You need to have your DHCP Server setup so that it serves iPXE or gPXE to your PXE enabled host and have iPXE / gPXE read the "pxelinux.cfg/default" file from the TFTP server's root.
Modify "/var/www/boot/pxelinux.cfg/default" so that it looks something like this:
Now everything should be setup for a successful installation of Proxmox VE via PXE to any PXE enabled host. These changes in the init file of the initrd.img image could perhaps be implement into the distribution of Proxmox, it would certainly make it easier to setup a PXE install environment
Either way, thank you for a very, very good product. keep up the good work!
I would like to contribute to Proxmox with a simple(?) how-to that makes it possible to install PVE 2.0 via PXE.
PREREQUSITES
The following needs to be up and running for any kind of PXE + iPXE / gPXE installation, the setup of these services are specific for your environment, make sure that they all work as expected:
- DHCP Server (see http://ipxe.org/howto/chainloading and http://ipxe.org/howto/dhcpd for how-to)
- TFTP Server, I assume that it uses the "/var/www/boot/" directory as it's root
- iPXE (http://ipxe.org/download)
- HTTP Server, I assume that it uses the "/var/www/" directory as it's root
- Files from the Syslinux project (http://www.syslinux.org/wiki/index.php/The_Syslinux_Project), i.e. "menu.c32" in the "/var/www/boot/" directory as well as a "deafult" menu file in the "/var/www/boot/pxelinux.cfg/" directory
NEW INITRD with embedded ISO
In order to have the installer find the .ISO image it needs to be embedded in the initrd.img that will be downloaded via PXE. Also, the init script in this new initrd.img needs to be modified so that it finds and mounts the embedded .ISO image instead of searching for a physical CD.
An overview of the required steps:
- Extract initrd.img and linux26 from the .ISO image
- Extract initrd.img to a directory
- Copy the .ISO image to the initrd directory
- Modify init in the initrd directory
- Create a new initrd.img from the directory
- Copy the new initrd.img to the PXE server
Detailed step-by-step guide:
- Log in to your Linux workstation, copy the Proxmox .ISO image to your working directory and rename it to "proxmox.iso" for simplicity. Extract the files "\boot\isolinux\initrd.img" and "\boot\isolinux\linux26" from the .ISO image.
- Rename "initrd.img" to "initrd.org.img" and unzip it:
Code:# mv initrd.img initrd.org.img # gzip -d -S ".img" ./initrd.org.img
Create a directory for the files in the initrd, extract initrd to this directory:
Code:# mkdir initrd.tmp # cd initrd.tmp # cpio -i -d < ../initrd.org
- Copy the .ISO image to this directory:
Code:# cp ../proxmox.iso .
- Modify the startup script so that it will mount the embedded .ISO image instead of searching for a physical CD.
Code:# nano init
At the end of the init script it searches for a CD/DVD reader containing a physical removeable CD disc. Modify the script so that it first checks whether there is an .ISO image ("proxmox.iso") in the root of the filesystem, and if so, mounts it. The colored + bolded text is what needs to be added between the "done" and "else" statements that are already present in the script:
Code:[...] done [B][COLOR=#b22222]elif [ -f /proxmox.iso ]; then echo "found proxmox cdrom ISO image" echo "mounting /proxmox.iso image" mount -t iso9660 -o loop /proxmox.iso /mnt echo "mounting ISO done"[/COLOR][/B] else echo "searching for cdrom" [...]
Save the file and exit the editor, no more changes are needed.
- Create a new initrd.img:
Code:# find . | cpio -H newc -o > ../initrd
Zip this new initrd:
Code:# cd .. # gzip -9 -S ".img" initrd
- You should now have an much enlarged "initrd.img" file containing all original files from the original "initrd.org.img" as well as the .ISO image and the modified init script. Copy it to your HTTP server together with the "linux26" file:
Code:# mkdir /var/www/boot/proxmox # cp linux26 /var/www/boot/proxmox/ # cp initrd.img /var/www/boot/proxmox/
Make sure that these files can be served via HTTP, i.e. test to download from a browser!
PXE MENU
I assume that your TFTP server's root is "/var/www/boot/" and that it contains the "menu.c32" file from the Syslinux project. You need to have your DHCP Server setup so that it serves iPXE or gPXE to your PXE enabled host and have iPXE / gPXE read the "pxelinux.cfg/default" file from the TFTP server's root.
Modify "/var/www/boot/pxelinux.cfg/default" so that it looks something like this:
Code:
UI http://<HTTP Server name or IP>/boot/menu.c32
PROMPT 0
DEFAULT Proxmox
MENU TITLE ..:: My PXE Menu ::..
MENU CLEAR
LABEL Proxmox
MENU LABEL Proxmox
LINUX http://<HTTP Server name or IP>/boot/proxmox/linux26
APPEND vga=791 video=vesafb:ywrap,mtrr ramdisk_size=16777216
INITRD http://<HTTP Server name or IP>/boot/proxmox/initrd.img splash=verbose
Now everything should be setup for a successful installation of Proxmox VE via PXE to any PXE enabled host. These changes in the init file of the initrd.img image could perhaps be implement into the distribution of Proxmox, it would certainly make it easier to setup a PXE install environment
Either way, thank you for a very, very good product. keep up the good work!
Last edited: