Sunday, 23 February 2014

Adding RedHat Install ISOs to Easy2Boot

[Edit] To install RedHat from an ISO, it is easier to just convert the ISO file to a .imgPTN file using the MPI_FAT32 Desktop shortcut. The notes below are now outdated...[/Edit]

I tried to add the RedHat ISO rhel-server-5.7-i386-dvd.iso today to my Easy2Boot NTFS USB drive, so that I could install RedHat to the 2nd partition of my notebook, but found that the RedHat installer failed to find any source 'packages'. The ISO was mounted on /dev/sdb4 as a CDFS filesystem by E2B, but it couldn't access it for some reason! This was odd, as it must have used it to boot in protected mode, but once booted to linux, the installer does not seem to find it (not even on /dev/sdb4).
The next thing I tried was to specify the source of the packages as a HDD and point it to /dev/sdb1  (the USB drive) and the /_ISO/MAINMENU folder. This worked, but only if the Easy2Boot USB drive was formatted as a FAT32 volume! It seems the RedHat installer environment cannot read NTFS volumes.
The next problem I hit was that the installer wanted to install RedHat linux to my hard disk (which I wanted) but only gave me the option of installing the grub bootloader to the /dev/sdb MBR (i.e. the E2B USB drive) or, using advanced options, it would install grub to the partition sectors of /dev/sda2  (the partition I was installing RedHat to). I wanted to install grub to the MBR of my hard disk (/dev/sda) but this choice was not offered! It seems I needed to swap over the USB boot disk with the internal hard disk.

Anyway, to cut a long story short, here is how to add RedHat to E2B:

1. Ensure that you E2B drive is formatted as FAT32
2. Copy the rhel-server-5.7-i386-dvd.iso file to the \_ISO\MAINMENU\MNU folder
3. Make a new rhel-server-5.7-i386-dvd.mnu text file in the \_ISO\MAINMENU\MNU folder with the following contents:
title REDHAT Installer ISO \n When prompted, specify Hard Disk, /dev/sdb1\n and $HOME$ for the path
set ISO=rhel-server-5.7-i386-dvd.iso
/%grub%/qrun.g4b force.iso01 $HOME$/%ISO%
4. Boot from the E2B USB drive on the target system and run RedHat from the menu entry
5. When prompted for a Package source, choose Hard Drive option and then use:
/dev/sdb1                                       - the E2B USB drive
/_ISO/MAINMENU/MNU                  - the path to the ISO file

Using an NTFS E2B USB drive

OK, but what if my E2B drive is formatted as NTFS? Well, I haven't found a nice way round this. There is no point extracting the files from the ISO if RedHat cannot read the E2B NTFS volume!
One solution is that you make a 2nd FAT32 partition on your E2B USB drive and copy the rhel-server-5.7-i386-dvd.iso file to a new\_ISO\MAINMENU\MNU folder on that partition.

Then you can then modify the .mnu file like this:
/%grub%/qrun.g4b force.iso01 (hd0,1)$HOME$/%ISO%
and point the installer at /dev/sdb2 which will be the USB drive's 2nd FAT32 volume, instead of /dev/sdb1. This worked for me :-)

# PTN0 = NTFS    /_ISO/MAINMENU/MNU  contains .mnu file
# PTN1 = FAT32  /_ISO/MAINMENU/MNU  contains the iso file

Another way to get round the problem is to make a hard disk image of a FAT32 partition which contains the ISO file and then map that FAT32 volume to a partition on the E2B USB drive - the .mnu file for this is shown below (it requires a spare USB flash drive just to make the image file):

# This can be used if your E2B drive is NTFS (or FAT32)
# Format a spare USB Flash/HDD as FAT32, 1 partition, SIZE=(size of Redhat ISO) + 100MB (e.g. if ISO is 3149MB, format USB flash drive as 3250) - Use RMPrepUSB for this.
# Copy redhat ISO onto the root of the FAT32 USB drive
# Use RMPrepUSB - Drive->File, Filename=REDHATPTN.IMG, start=P1, size=P1, filestart=0 to make an image of the USB drive partition
# Copy REDHATPTN.IMG and this .mnu file to \_ISO\MAINMENU\MNU folder (or any \_ISO\xxxxxx\MNU folder) on E2B NTFS drive
# change rhel-server-5.7-i386-dvd to match your ISO filename
# See for more info

title REDHAT FOR NTFS\n To install, choose Hard Drive, sdb4 and /
set ISO=/rhel-server-5.7-i386-dvd.iso
if "%E2BDEV%"=="" set E2BDEV=hd0 && pause E2BDEV forced to hd0!
if exist CD echo WARNING: Cannot use partnew command! && pause && configfile (bd)/menu.lst
debug on
parttype (%E2BDEV%,3) | set check=
debug off
set check=%check:~-5,4%
if "%check%"=="0x00" partnew (%E2BDEV%,3) 0 0 0
if not "%check%"=="0x00" echo WARNING: PARTITION TABLE 4 IS ALREADY IN USE! (%E2BDEV%,3)=%check% && pause && configfile (bd)/menu.lst
debug 1
if "%check%"=="0x00" partnew (%E2BDEV%,3) 0x0 $HOME$/%IMG% || pause ERROR: $HOME$/%IMG% NOT CONTIGUOUS? && configfile (bd)/menu.lst
map (hd0) (hd1)
map (hd1) (hd0)
map --hook
# set root as new FAT32 partition on E2B drive
root (hd1,3)
map %ISO% (0xff)
map --hook
root (0xff)
chainloader (0xff)
# replace FAT32 partition number C or B with 0 as linux doesn't need it (E2B USB drive is hd1 now)
cat --locate=\x0c --number=1 --length=1 --skip=0x1f2 --replace=\x00 (hd1)+1
cat --locate=\x0b --number=1 --length=1 --skip=0x1f2 --replace=\x00 (hd1)+1

I have added Tutorial #120 which includes these details.

This will only work if the ISO file is <4GB in size however. You could format the spare USB Flash drive as ext2/3 instead of FAT32, but the last two lines of the mnu file would need to be changed to match the ext2/3 partition type number and the ISO file would need to be made contiguous.

Any other suggestions are welcome...