[announce] gujin GPL bootloader version 2.8

From: Etienne Lorrain
Date: Sun Feb 21 2010 - 16:28:23 EST

There is a new version v2.8 of the Gujin bootloader at
http://gujin.org with bugfixes and improvements, and
Debian/Fedora packages for easy installation on i386/amd64 PC.
The Debian package can be installed on Ubuntu and the
Fedora package can be installed on Mandriva, those
packages have very few dependencies.

The main improvements are in the handling of languages,
Linux command line parameters description in /boot/gujin.cmd,
GPT partition tables, and handling of file images like iso images.

First, thanks to benny59 for the rewrite of italian messages;
messages in russian, spanish, portugese, german, and dutch
would probably improve with a human reader. There is a
single bootloader containing all those languages plus
french and english, switch-able by Control-T/Alt-T,
with the needed support of UTF-8 on 8x16 and 10x20 fonts.

The "distributed Linux kernel description" file named gujin.cmd is a file
parsed in every filesystem where it is found, containing lines like:
for instance:
::vmlinuz-bluehat-2.6*:::bluehat standard boot:quiet noacpi
to boot the bluehat kernel with parameters "quiet noacpi" when
clicking on the menu choice "bluehat standard boot".
More description in the gujin.cmd file in the source package.

For the handling of filesystem images, Gujin can now emulate BIOS
disks on discontiguous files, and recognises file with extension
*.bin and *.img with 0xAA55 signature as "*.bdi" files, so you
can directly run "memtest+.bin" present in /boot of some
distributions or some live CD (for instance KANOTIX-2005-04.iso),
you can also boot "hal91.img", "rescue-0.4.1.img", "tomsrtbt*.img",
and if you have a small DOS bootable USB/floppy, you can copy it
like "cat /dev/sdc > /boot/usb.bin" and boot it, /boot/usb.bin will
be writeable under DOS if Gujin is allowed to write to disks.
You can disable the display of files with bdi/bin/img extension by the
"probe bdi file" checkbox.

There is two kind of Linux based live CD: the ones self contained
in the two files kernel and initial RAM disk (excluding license files and
documentation) - like Fedora and Debian net-install CD or the
tinycore_2.6.iso distribution; and more complete Linux live CD which
need to access other files of the ISO image to properly boot.
There is four ways to start those ISO images without first writing the
ISO image file on a real CD.

1- The first one is to copy the complete content into a partition of
a hard or USB disk - that was already handled in Gujin-2.7 and often
works because most live CD will search every CDROM, hard disks and
hard disks partitions to find their other files. The Fedora net-install
CD needs to change the directory probed by Gujin from "/boot" to
"/isolinux", that can now be set with Gujin-2.8.

2- The bootloader extract the kernel and initial RAM disk from
the ISO image file (by loop-mounting) and load them in memory,
and then pass a parameter on the Linux command line to tell
where the distribution will find its other files. That supposes
that the initial RAM disk has some init-scripts which handle
such parameter, the three possible parameter names are "fromiso=",
"isoscan=" or "bootfrom=".
Unfortunately, I have only found one single distribution which
correctly handle that parameter, that is:
and it correctly manages "fromiso=", so that is the only thing
Gujin supports. The only details are to rename that file to a shorter
name like "sidux-2009.iso", copy it in the root or /boot directory
of one of your FAT/Ext2/3/4 partition, and in Gujin setup (at boot
time) enable probing files in ISO images and set the Linux command
line to "boot=fll quiet" to acheive a complete boot.
Obviously the "self contained" live CD will also work as long as
Gujin can find the kernel and the initial RAM disk files.
The maximum length of the string "/boot/<filename>.iso" is 64 chars.
That Sidux live CD do not boot with the first method (copy the
complete filesystem in a partition), do not loose your time there.

3- Gujin can also fully manage an El-Torito boot from an ISO image
file, so you will chain-load the EL-Torito boot loader of the real
live CD. It will work for self contained live CD, and probably most
non Linux CD like UBCD (Universal Boot CD), but most complete
Linux live CD distribution wil not find their "other" files.
For this boot to succeed, you will need to replace the El-Torito
boot file of the live CD by the Gujin El-Torito boot file, which can
generate/analyse the signature to rebuild the bootfrom= parameter.
For instance, to complete the boot of Sidux with this method, you
have to modify the iso file by typing these commands, assuming
you have sidux-2009-04-moros-kde-lite-i386-200912310312.iso in the
current directory and are root for the loop-mount (mirrors at
$ sudo -s
# mkdir siduxdir
# mount -o loop -t iso9660 sidux-2009-04-moros-kde-lite-i386-200912310312.iso siduxdir
# cp -a siduxdir sidux-2009
# umount siduxdir
# ./install/gujin -t sidux-2009/boot/gujin.bcd --cmdline="boot=fll quiet" \
--read_retry --default_video_mode=0x117 # real VESA mode number, i.e. not 791
# mv sidux-2009/boot/memtest sidux-2009/boot/memtest.img # not really needed
# genisoimage -r -b boot/gujin.bcd -no-emul-boot -boot-load-size 4 \
-boot-info-table -o sidux-2009.iso sidux-2009
# ^D
The resulting file "sidux-2009.iso", once copied in the root or /boot
directory, is directly bootable by Gujin installed on the booting device if
"search El-Torito" checkbox is ticked (just click sidux-2009.iso:noemul),
you can also boot sidux-2009.iso:/boot/{vmlinuz,initrd}0.686 if the
command line is set to "quiet boot=fll", or directly boot "memtest.img".
If sidux-2009.iso is written to a CDROM, it will also boot.
Note: UBCD-5.0-rc1 El-Torito loader tries to read after the size of
the CD, to get Gujin to load it, you have to do:
dd if=/dev/zero of=ubcdadd bs=512 count=560
cat ubcdadd >> /boot/ubcd.iso

4- Some ISO images can be copied to a USB stick (by a "dd" command)
and will produce a bootable USB stick - those ISO images contain
a boot record that Gujin can find, and so Gujin will emulate a BIOS
disk for you to boot that way. The previous problem of regenerating
the bootfrom= parameter also exists, with the same solution.

The full list of change is:
- Generate and use a "distributed Linux kernel description" file named
/boot/gujin.cmd, see example/description in the source tar file.
- Handle GPT partitions (support for B.E.E.R. installation in /dev/sda0
cannot work because of the GPT copy at end of disk, replaced by
install in first Mbyte if space is free)
- UTF8 UNIFONT for the 8x16 and 10x20 font, range 0x0..0x200 and
0x400..0x600 (higher often need variable width chars)
- Handle FAT long filename UTF16 to UTF8 mapping
- Language handling completely re-written; support "en", "fr", "ru",
"sp", "it", "pt", "de", "nl" in the same executable
- Add two "xstring" segments to support all those strings, that
increases also the stack available for Gujin
- Debug version only support English, i.e. reducing the number
of language is possible with recompilation
- Remove the restriction that BDI file are contiguous, handle *.bin
and *.img files as *.bdi if they have the 0xAA55 signature.
- Find ISOFS MBR/El-Torito in files *.iso and enable booting (For
Linux, Gujin may have to be the El-Torito bootloader, bootfrom
int 0x13 signature)
- Support filename "linux*" (without iso extension) like "bzImage*" and
"vmlinuz*", to directly boot debian iso netinstall in *.iso file
- Support filename "tinycore*" like "initrd*" to directly boot
tinycore_2.6.iso CD image
- sort kernels by date (newest first) in the menu
- Rename tickbox "download_ansi_font" as "use_gujin_embedded_font"
- Reproble the disk subsystem if "probe_file_in_iso_image" has changed
going from setup to application screen
- Support an efficient way to store block numbers and size of very
large (*.iso) file on an EXT2 filesystem, to analyse its internal FS
- Handle EXT2/3/4 partitions bigger than 32 bits sectors, support
blocks bigger than 4 Kbytes on EXT2FS
- Fix timezone offset of file dates on ISO9660
- Fix bugs with tinycdrom (load kernel/initrd or *.kgz from El-Torito
CDROM without user intervention, see Makefile/CDtiny:)
- Fix an overflow bug in all BIOS tiny* versions when number of
kernels & initrd bigger than 5 in the same partition
- Accept under DOS "vmlinu~1" and "bzImag~1" filenames
- If running on DOS, select the default language with the DOS
environment LANG=.
- Updated man page, installer support of --lang= parameter
- Refuse to create a superfloppy format on a disk which has a valid
partition table, if no --force flag
- Reduce complain with screens without EDID, then assumes 13 inches
display to find default resolution
- Do not show the "alternate" button when no alternative (same
definition & BPP) video mode exists.
- Fix the page number displayed when autoboot of newest file after
few seconds
- When booting kernel/initrd from an ISO file image, replace "bootfrom="
by "fromiso=", works at least with sidux distribution (cmd line "boot=fll")
- increase size of filename booted (but one can still use too long filename
for fromiso= parameter)
- Add option to change default directory name "boot" at runtime (on
some iso like Fedora net-install, set it to "isolinux" and keep iso file in root).
- Detect if the default font of the (simulated) PC is ANSI instead of
the CP437 font
- Fix CRLF problem with serial interface (use GtkTerm 9600,n,8,1 no flow
control & fully wired null-modem cable - else can't see any output)
- Always add a "BOOT_IMAGE=" command line parameter (with the filename
loaded) when booting Linux kernels.
- Enable by default code to set IDE master/user password (like hdparm
--security-set-pass) (See FAQ: What is the option "ignore kernel IDE options"?)
- Do not report the number of "wasted" sector in a partition with ISO9660
filesystem (cat /dev/cdrom > /dev/sda9)
- Change the default partition created (when creating a hard disk image) to
the last partition to enable booting ASUS EeePC
- The pseudo kernel parameter vga= is now initialised to the last graphic
video mode used by Gujin
- Detect two partitions having the same label (causes major problems
with root=LABEL=, fails back to root=/dev/* for those partitions)
- default compiler now gcc-4.4.3/gmp-5.0.0/mpfr-2.4.2/binutils-2.20 (but
for rpm/deb packages, use the default distribution compiler)
- docs updates

There are still some misfeatures, like Gujin cannot be installed on a GPT
partition over /dev/sda16; the Gujin installer calls sync() so if you copy
an ISO image to a USB drive while installing Gujin on the hard drive - you'll have to wait for the ISO image copy to be finished; I got my Fedora
distributions booting only after setting the label of the filesystem,
I just hope there won't be too many regressions.

Also, note that booting an ISO live system file image solves the problem
of permanent storage: an ext2 filesystem image can be inside the ISO file,
and that filesystem image can be mounted read/write by the live system.
That ext2 internal filesystem can also be mounted read/write if the
distribution is on a DVD-RAM.

Downloads at:

Note that I do like success/failure stories about Gujin!

Have fun,

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/