Friday 17 May 2013

Booting Ubuntu 12.10/13.04 from an ISO with persistence from an NTFS USB drive

Grub4dos booting of Ubuntu with persistence from an ISO is fairly easy if you use a FAT32 USB boot drive. You just add the keyword 'persistent' into the command line and set the iso-scan/filename= to the name of the iso and create your ext2 casper-rw in the root using RMPrepUSB:


title Try Ubuntu without installing
find --set-root /ubuntu-12.10-desktop-i386.iso
map /ubuntu-12.10-desktop-i386.iso (0xff) || map --mem /ubuntu-12.10-desktop-i386.iso (0xff)
map --hook
root (0xff)
# NOTE: Next line may wrap, it should start with kernel and end woth splash --
kernel /casper/vmlinuz  file=/cdrom/preseed/ubuntu.seed noprompt boot=casper persistent iso-scan/filename=/ubuntu-12.10-desktop-i386.iso quiet splash --
initrd /casper/initrd.lz

However. when I tried this from my Easy2Boot USB hard drive, it booted fine, but persistence would not work.
The reason for this is that my USB hard drive was formatted as NTFS.
Many Ubuntu versions will not mount a casper-rw persistent file automatically if it is on an NTFS volume.
As you may know, Easy2Boot uses the trick of using the grub4dos partnew command to map a spare partition entry to an ISO file. In this way, nearly all linux ISOs can be directly booted with Easy2Boot (without needing the iso-scan/filename=xxx.iso cheat code).

Well, we can use the same trick to map the casper-rw file to an empty partition too!
Even better, we can rename the casper-rw file because linux will look for a volume name of casper-rw first before it looks for a file called casper-rw and we can put the file anywhere we like on the boot drive! This means we can have 2 or more different versions of linux ISOs (e.g. Ubuntu 12.04, 11.01, 11.10 and 12.10)  all on the same multiboot USB drive and all using different 'casper-rw' files!

The grub4dos menu for this is fairly simple too (a simplified version with no checks is shown below):


title Ubuntu-12.10-desktop-i386 PERSISTENT
partnew (hd0,2) 0x0 /ubuntu1210-rw
partnew (hd0,3) 0x0 /ubuntu-12.10-desktop-i386.iso
map /ubuntu-12.10-desktop-i386.iso (0xff)
map --hook
root (0xff)
kernel /casper/vmlinuz file=/cdrom/preseed/ubuntu.seed boot=casper persistent quiet splash --
initrd /casper/initrd.lz 


However, I have added some checks to make sure we do not trash the 3rd partition (I don't check the 4th partition in this menu, Easy2Boot already checks that the 4th partition is free when it boots) and made an Easy2Boot Ubuntu.12.10.mnu file for Ubuntu as follows:


# Make a \casper-rw ext2 file using RMPrepUSB in the root of the drive (MUST be made as casper-rw)
# Rename the file to \Ubuntu1210-rw
# Place this .mnu file and the Ubuntu ISO in either \_ISO\MainMenu\Linux or \_ISO\MNU\Linux
# This menu will work even on an NTFS USB boot drive

iftitle [if exist (bd)%MFOLDER%/Linux/ubuntu-12.10-desktop-i386.iso] Ubuntu ubuntu-12.10-desktop-i386 PERSISTENT\n Boot using .mnu file with persistence
#enable parttype output
debug 1
# make empty table entry in 3rd position in ptn table
parttype (hd0,2) | set check=
debug off
set check=%check:~-5,4%
if "%check%"=="0x00" partnew (hd0,2) 0 0 0
if not "%check%"=="0x00" echo WARNING: PTN TABLE ENTRY 3 IS ALREADY IN USE - PERSISTENCE MAY NOT WORK! && pause
debug 1
if not exist (bd)/ubuntu1210-rw echo WARNING: /ubuntu1210-rw persistence file not found! && pause
errorcheck off
if "%check%"=="0x00" partnew (hd0,2) 0x0 (bd)/ubuntu1210-rw
errorcheck on
#map ptn 4 to ISO
partnew (hd0,3) 0x0 (bd)%MFOLDER%/Linux/ubuntu-12.10-desktop-i386.iso
map (bd)%MFOLDER%/Linux/ubuntu-12.10-desktop-i386.iso (0xff)
map --hook
root (0xff)
kernel /casper/vmlinuz file=/cdrom/preseed/ubuntu.seed boot=casper persistent quiet splash --
initrd /casper/initrd.lz 


This should work for most versions of Ubuntu.

For 13.04 x64 you need to load the /casper/vmlinuz.efi kernel:
iftitle [if exist (bd)%MFOLDER%/Linux/ubuntu-13.04-desktop-amd64.iso] Ubuntu 13.04 Persistent\n Boot using .mnu file with persistence - assumes we have a casper-rw ext2/3/4 partition
partnew (hd0,3) 0x0 (bd)%MFOLDER%/Linux/ubuntu-13.04-desktop-amd64.iso
map (bd)%MFOLDER%/Linux/ubuntu-13.04-desktop-amd64.iso (0xff)
map --hook
root (0xff)
kernel /casper/vmlinuz.efi file=/cdrom/preseed/ubuntu.seed boot=casper quiet splash -- persistent
initrd /casper/initrd.lz

E2B .mnu file (using ext2 /ubuntu1304-rw file)
iftitle [if exist (bd)%MFOLDER%/Linux/ubuntu-13.04-desktop-amd64.iso] Ubuntu 13.04 PERSISTENT\n Boot using .mnu file with persistence
set ISO=%MFOLDER%/Linux/ubuntu-13.04-desktop-amd64.iso
set PF=/ubuntu1304-rw
#enable parttype output
debug 1
# make empty table entry in 3rd position in ptn table
parttype (hd0,2) | set check=
debug off
set check=%check:~-5,4%
if "%check%"=="0x00" partnew (hd0,2) 0 0 0
if not "%check%"=="0x00" echo WARNING: PTN TABLE 3 IS ALREADY IN USE - PERSISTENCE MAY NOT WORK! && pause
debug 1
if not exist (bd)%PF% echo WARNING: %PF% persistence file not found! && pause
errorcheck off
if "%check%"=="0x00" partnew (hd0,2) 0x0 (bd)%PF%
errorcheck on
#map ptn 4 to ISO
partnew (hd0,3) 0x0 (bd)%ISO%
map (bd)%ISO% (0xff)
map --hook
root (0xff)
kernel /casper/vmlinuz.efi  boot=casper persistent noeject noprompt quiet splash --
initrd /casper/initrd.lz 

Once you have booted to Ubuntu you can change the Desktop wallpaper or create a file on the Desktop and it should still be there when you reboot.

Whilst in Ubuntu, here are a few things you can try:

In the Desktop - click on your USB drive (listed in left-hand panel) to view the contents
CTRL+ALT+F1   - go to command shell
ls /media
if /media/ubuntu is not listed type:sudo mkdir /media/ubuntu  - now switch back to the Desktop GUI (ctrl+alt+F7) and can now browse your USB drive to mount it (this is a bug in the x86 liveCD!) - now press CTRL+Alt+F1 again.

ls /media/ubuntu/  - should see your USB drive listed (e.g. WDPassPort)

CTRL+ALT+F7 - return to Desktop GUI

mount -l     - lists mounted volumes

df -h   - should see /cow persistent ptn listed (doesn't mean it is working though!)

To make a new 2GB ext4 file:
cd /media/ubuntu/WDPassPort
rm casper-rw
rm casper-rw ubuntu1210-rw

dd if=/dev/zero of=casper-rw bs=1M count=2048
mkfs.ext4 -F casper-rw
mv casper-rw ubuntu1210-rw

As I am not a 'linux' user/guru and don't own any sandals (it's cold in the UK), please correct me if any of the linux commands are not accurate!

Hope you find this useful!

P.S. The latest versions of RMPrepUSB (v2.1.713 and later) will allow you to create an ext2 file with a volume name that you specify separately, so you can create in one step an ext2 file called, say, 'Ubuntu-rw' with a volume name of 'casper-rw'.

Thursday 16 May 2013

Easy2Boot BETA29 v10!

Same as v9 but I have moved the [xx] characters to the end of the line.
I did not understand how to use the hotkey function properly

^L  means a hotkey of L but don't show the ^L
[L] means a hotkey of L but show [L]

The examples given were badly chosen! The exampes were

^F10
[L]

So I thought ^ meant it was a Function key !

Anyway, now we can have hotkeys and the menu looks (almost) the same as before!


Easy2Boot BETA29 v9 with menu hotkey support

v9 now has hotkeys for some menu items (e.g. press W and you go straight to the Windows Install menu). F8 will always take you back to the main menu (or fully reload if you are already in the main menu).

F7   Boot to first HDD
F8   Main Menu
F9   Reboot
F10 Power off
W   Windows Install
D   Direct Boot menu
S   Special menu


Hotkeys don't work in gfxmenu.
Let me know if you like it or prefer no hotkeys as in v8.

If you would prefer the [F8] to be at the end of the line, this can be done.

P.S. Now done in v10!



Easy2Boot v1 BETA29 v8 now available with gfxmenu support

For those of you that don't like the nice and practical grub4dos splashimage menu in Easy2Boot and think it looks 'naff', please download and try v8  (bottom of page)! Now you can add your own gfxmenu file so please don't complain about the menu again - if you don't like it then you can change it yourself (there is a gfxmenu tutorial on my site)!

To test out gfxmenu with Easy2Boot, just rename the \_ISO\GFXMyE2B.cfg file to MyE2B.cfg to try out the gfxmenu system (it uses the \_ISO\message file).

It has some disadvantages like
1. Drops back to the textmode grub4dos menu if any error encountered
2. No titles at the top of the menus
3. Cannot set default menu entry or timeout
4. Cannot show number of files present in each folder
5. When it switches to the console to list files, etc. it looks a bit messy.
6. probably lots more which I can't remember at this moment!

I suppose you will want a screenshot (I am not a fan of GFXMenu - can you tell?) - here you are:
Can you guess who it is (one for Star Trek fans....)?


Easy2Boot v1 BETA29 v7 now available

The only change to this update is that the QRUN.g4b batch file now supports an extra file extension type:

.isoask

If you name an ISO file with the .isoask extension, you will be given the choice of how to boot it - see the screenshot below for an explanation:


I got this idea from Rob G.C.  (thanks Rob!) who wanted to boot the same ISO file in two different ways.
Hirens ISOs will boot if you use .isomem and miniXP will work and so will the DOS utilitities, however it is slow to load and some systems are low-ram and won't load the whole ISO into memory - so now you can name the ISO file as .isoask and boot it any way you want!

In case you missed it, Easy2Boot will support different languages. Payload files with non-ANSI filenames will be shown correctly in the menus. Titles can be in non-ANSI characters - just save the MyE2B.cfg file in UTF-8 format (use NotePad).  You can also rename the Mainmenu.mnu file to MyMainMenu.cfg and edit and save that as UTF-8 too, as well use non-ANSI .txt files with alternative titles.






Tuesday 14 May 2013

Easy2Boot BETA29v6 is uploaded

The user settings file MyMenu.lst is now deprecated and should no longer be used - instead we have \_ISO\MyE2B.cfg!
This file contains nearly all user strings for the menus now (mainmenu.mnu has the others - so you can make your own version of that too!). Easy2Boot uses \_ISO\E2B\grub\E2B.cfg and then calls \_ISO\MyE2B.cfg  (if present).
The user background files MyBackground.bmp or MyBackground.bmp.gz should now be located in the \_ISO folder too. These will be automatically used of they are present (unless you have a MyE2B.cfg file which changes the default.
A Fontfile is loaded in this version. This allows for Chinese and special language characters like ® or ü to be used - just save the MyE2B.cfg file as UTF-8 format. You can now have menu entries and headings in your own language.
The 'Blue' menu can be enabled by renaming \_ISO\BlueMyE2B.cfg to MyE2B.cfg. The blue.bmp.gz file is also in \_ISO now.
Take a look at the BlueMyE2B.cfg file to see what it looks like.
The template file to make your own MyE2B.cfg file is also in \_ISO\Sample_MyE2B.cfg.

Basically, there is no reason for the user to change or edit any file in the grub folder any more.

P.S. A password of 'easy2boot' is set to prevent users from editing menus inside grub4dos. if you want to edit menus then press P followed by the password easy2boot. if you want to remove the password, rename \_ISo\Sample_MyE2B.cfg to MyE2B.cfg and set pwd to nothing  (set pwd=).


Monday 13 May 2013

grub4dos and environment variables

Whilst developing Easy2Boot, I found that I kept running out of variables space.
grub4dos has a meagre limit of only 60 variables  (and up to 512 bytes per value). Try to define any more than 60 and it simply refuses to put them into the environment.
I devised some nifty grub4dos code that would count how many variables I had left (see below).
This led me to realise that I could not use variables to store the names of all the files in a folder - thus reducing the number of files I could allow in a folder.
So I had to re-write Easy2Boot so that it used system memory to store the variables and then find and retrieve the value of a specified variable from memory when I wanted it!

VarsLeft.g4b
=========
!BAT
# grub4dos can have only 60 variables defined (512 bytes max per value)
# set *   will clear all variables - to find the max limit use set * followed by calling this batch file.

# take a copy of the current environment
setlocal

# Now lets fill up the environment until it fails!

# n is our counter
set n=1
:LOOP
# any more than 600 and it is probably not worth worrying about!
if "%n%"=="600" goto :end
set AAA%n%=FFF
# on first loop AAA1=FFF
# now we need to read back AAA1 by writing a small batch file in memory - e.g.
# !BAT
# set B=%AAA1%
echo -e !BAT\nset B=%^AAA%n%%% > (md)0x3000+1
# now call the batch file we just made to set B to the value of AAA1
call (md)0x3000+1
if not "%B%"=="FFF" echo Approx. %n% Variables left! && exit
# increment n for next loop
set /a n=%n%+1  > nul
goto :LOOP

# restore the copy of the current environment
# this is not really required as 'exit' also restore the environment
endlocal
# quit!
exit



Easy2Boot BETA29v5 available

This version has some more tidying up.
All headings can now be set in the Menu.lst (of course, you should not change menu.lst but copy it to MyMenu.lst and it will be used instead!).
The Footer help colour doesn't need to be the same colour as the heading now - it can be set in mymenu.lst.

I have also included two optional test files (delete them if you don't want them!):
blue.bmp.gz - a background picture
TEST_MyMenu.lst - rename this to MyMenu.lst to see how you can change the colours, background and menu position, menu headings and footer text, etc. (see screenshot below).

As well as some text colours being changed, the headings have been padded out to be central (ish) on the menu box. Also, the console background is dark blue to match the bitmap colour better. Try it for some inspiration!

Note with the TEST_MyMenu.lst file, the menu has been moved to the centre. This causes problems with the help text just under the menu as grub4dos can only print help text up to column 79 before it wraps the text to the next line - see below.


Easy2Boot BETA29v4 available

I had a brain wave last night (I don't get many of them these days!).
The main change in v4 is that I don't use environment variables to store the filenames any more. This caused a limitation as to the number of files you could have, especially if you used lots of variables in mymenu.lst to change the default menu text to suit your own preference/language. The more variables you defined or files you had, the more limited was the number of files displayed!

You can have as many .xml and .key files as you like now (i.e. that will fit on the screen before scrolling off = approx 34 in 800x600 mode!)
It may also mean I can add more variables for the menu title variables so that you can change the headings for all the menus in mymenu.lst.
I also changed some filenames from grub\xx.mnu to xxx.hdr to avoid confusing them with proper .mnu files.
Still a few more revisions to go, I feel, but it is nearly finished!

BETA29v3 - bugfix for FASTLOAD

If you enable FASTLOAD then when you hit the Return to Main Menu entry it bombs out to the grub4dos command line. Now fixed.