From 4998d45d1c13c9e2cfbe727a44371ba7e8c7ae6f Mon Sep 17 00:00:00 2001 From: freesource Date: Mon, 1 Oct 2001 05:02:25 +0000 Subject: [PATCH] bOOTrOOT documentation. --- doc/html/boot_root.4 | 546 +++++++++++++++++++++++++++++++++++++++++ doc/html/bootroot.html | 115 +++++++++ doc/html/index.html | 417 +++++++++++++++++++++++++++++++ 3 files changed, 1078 insertions(+) create mode 100644 doc/html/boot_root.4 create mode 100644 doc/html/bootroot.html create mode 100644 doc/html/index.html diff --git a/doc/html/boot_root.4 b/doc/html/boot_root.4 new file mode 100644 index 0000000..0723dee --- /dev/null +++ b/doc/html/boot_root.4 @@ -0,0 +1,546 @@ +#!/usr/bin/perl -w + +# BootRoot 0.4 by freesource 4.14.2000 Copyright (C) 2000 +# Jonathan Rosenbaum - mttrader@access.mountain.net +# http://the.netpedia.net/bootroot.html + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + +# CHANGES +# +# 0.4 - 4.14.2000 +# * copy over bzip2 only if specified in configuration +# * check and adjust the size of the initrd image, thanks +# to Magnus Holmberg for reporting the bug when stuff +# didn't fit the old default size for his setup, also +# will make a leaner boot if the reverse is true. +# * add a new question by Magnus to the FAQ +# +# 0.3 - 3.17.2000 +# * added more error checking +# +# 0.2 - 3.16.2000 +# * beta .. works nicely +# * automatic y when mke2fs on loop device +# * extra cleanup for aborted attempt +# * removed init from boot +# * size check - will abort if cp or mkdir fail and +# output to find out how much space is left. +# * added normalboot to lilo for booting from normal disk - +# requires root=device otherwise will default to /dev/hda1 +# * added a message with lilo + +# 0.1 - 3.12.2000 +# * initial alpha release, will implement size test +# in next version. +# + +# What are the REQUIREMENTS? +# +# Check to make sure you have thes things, in these directories or the +# program won't work correctly: +# /bin/{ash,gzip,mount,umount} +# /sbin/init (you better have this! .. only used for a test.) +# /usr/bin/bzip2 (optional) + +# What does this program do? +# +# BootRoot creates a boot disk with lilo, a kernel and an initrd image. +# The initrd script mounts another root disk with a compressed (gzip or +# bzip2) filesystem. +# +# The root filesystem isn't made by this program. This program is +# patterned after mkrboot, but unlike mkrboot it creates an unique bootdisk +# and a separate root disk. + +# What's the advantage of using this program? +# +# You can use a bzip2 compressed filesystem, this program is +# easy to use, and it provides a framework showing a simple initrd method +# which you can freely modify. Run a search for HEREDOC. I wrote this +# program as a solution to help oster at EE (www.experts-exchange.com) +# create separate boot and root floppies for an emergency system for his +# customers. +# +# If you make a cool change to this program, or if this program helps you +# I'd love to know, that's better than receiving pizza :) + +# How can I test BootRoot? +# +# Get SETUP.GZ as the filesystem from looplinux at +# http://www.tux.org/pub/people/kent-robotti/index.htm. +# This filesystem works with 2.2 kernels. +# +# [Ctrl] ([Tab] to see available images) +# boot: bootdisk single [Enter] +# ( now filesystem is single user mode) +# exit [Enter] +# (now you are in multi user mode) +# +# Better yet, do [Ctrl] +# boot: bootdisk 2 [Enter] +# +# This works nicely with a compressed root filesystems made with yard +# without "single" .. but looplinux comes with mc (mcedit) + +# Why doesn't looplinux work as "bootdisk 1?" +# +# There is a difference between "1" and "single." Looplinux was written +# in a way that runlevel 1 doesn't work properly in relation to BootRoot +# unless single is used. And you thought they were the same thing. +# BootRoot proves otherwise. + +# What sort of configuration can I do? +# +# Edit the variable $compress to either gzip (default) or bzip2. + +# How do I use the program? +# +# program_name lilo linux-kernel compressed-filesystem +# +# "lilo" is the only method supported at the present. +# +# For instance .. "linux-kernel" could be: /boot/vmlinuz-2.2.14 +# "compressed-filesystem": /home/createit/my_creation.gz +# (if found in same directory when running the program) +# "linux-kernel could be": vmlinuz-2.2.14 +# "compressed-filesystem": my_creation.gz +# +# "device" could be /dev/fd0 (default) or /dev/fd1 .. etc. +# "size" is usually 1440 (default) + +# Edit to "gzip" or "bzip2" +$compress = "gzip"; + +####################################################################### +# Don't edit from here, but you can if you want to change the here docs +# and/or the contents of initrd (in which case you need to make sure the +# right libraries are copied over to initrd). + +# I need to remember to edit this +$version = "v0.4"; +$date = "4.14.2000"; + +$device = "/dev/fd0"; +$size = 1440; +$initrd = "initrd_image"; +$pwd = `pwd`; chomp $pwd; +use File::Basename; +$compress eq "gzip" ? ($compress = "gzip") : ($compress = "bzip2"); + +if ($#ARGV == -1) { + print "boot_root - Make a separate boot and root disk\n"; + print "-----------------------------------------------\n"; + print "boot_root [ [ [ [ ]]]]\n"; + print "\nMethods available:\n\nlilo -> Generates a separate boot and root disk for lilo\n\n"; + exit; +} +if ($ARGV[0] ne "lilo") { + die "Please supply a method\n"; +} +$method = $ARGV[0]; +if (defined $ARGV[1] && -e $ARGV[1] && !-d $ARGV[1]) { + $kernel = $ARGV[1]; +} +else { + die "boot_root: ERROR: Kernel not found\n"; +} +if (defined $ARGV[2] && -e $ARGV[1] && !-d $ARGV[1] ) { + $root_image = $ARGV[2]; +} +else { + die "boot_root: ERROR: Rootimage not found\n"; +} +$device = $ARGV[3] if defined $ARGV[3]; +$size = $ARGV[4] if defined $ARGV[4]; + +# lilo method +if ($method eq "lilo") { + + + # Do a little cleanup just in case + system "rm /tmp/initrd_image.gz 2> /dev/null; rmdir /tmp/initrd_mnt 2> /dev/null"; + + initrd(); + mtab(); + + + print "Making ext2 filesystem\n"; + system "mke2fs -m0 -i8192 $device $size"; + die "boot_root: ERROR: You need to insert a disk\n" if $? != 0; + print "Mounting the device\n"; + errm(system "mount -t ext2 $device /mnt"); + + # Time to do a little calculations + $device_size = (split(/\s+/,`df /mnt`))[8]; + $boot_size = (stat($kernel))[12]/2 + (stat("/tmp/$initrd"))[12]/2; + $root_image_size = (stat($root_image))[12]/2; + $enough_boot = $device_size - $boot_size; + $enough_root = $device_size - $root_image_size; + $remain_boot = $device_size - $boot_size; + $remain_root = $device_size - $root_image_size; + + # A little output + $enough_boot =~ /^-+\d+$/ ? + die "boot_root: ERROR: Not enough room: boot stuff = $boot_size k, device = $device_size\n" : + print "boot_root: Looks good so far: boot stuff = $boot_size k, device = $device_size k, remaining = $remain_boot k\n"; + + # Better do this first + print "Copy over initrd ramdisk\n"; + system "cp /tmp/$initrd /mnt/$initrd"; + die "boot_root: ERROR: Could not copy over initrd\n" if $? != 0; + + print "Copying over kernel\n"; + system "rm -rf /mnt/lost+found; cp $kernel /mnt/kernel"; + die "boot_root: ERROR: Could not copy over the kernel\n" if $? != 0; + print "Making stuff for lilo\n"; + err(system "mkdir /mnt/{boot,dev}; cp -a /dev/{null,fd?,hda1} /mnt/dev"); + print "Copy over important lilo stuff\n"; + err(system "cp /boot/boot.b /mnt/boot"); + +# HEREDOC +$brlilo = << "LILOCONF"; +boot = $device +message = message +delay = 50 +vga = normal +install = /boot/boot.b +map = /boot/map +backup = /dev/null +compact + +# bootdisk +image = kernel +append = "load_ramdisk = 1 debug" +initrd = $initrd +root = $device +label = bootdisk +read-write + +# normalboot +image = kernel +root = /dev/hda1 +label = normalboot +read-only +LILOCONF + open(LC, ">/mnt/brlilo.conf") or die "Couldn't write /mnt/brlilo.conf\n"; + print LC $brlilo; close(LC); + + +# HEREDOC +$message = << "MESSAGE"; + +BootRoot $version written by Jonathan Rosenbaum $date GPL +mailto:mttrader\@access.mountain.net + +Press [Ctrl] to see the lilo prompt. + +Press [Tab] to see a list of boot options. + +bootdisk = This will boot a compressed root filesystem + on another floppy. +normalboot = This will boot up a specified filesystem. + default: /dev/hda1 a = 1st drive + 1 = 1st partition + Use root=/dev/(h or s)dXX + h = IDE Drive + s = SCSI Drive + +Trouble: Do not forget boot: option single +Fix a filesystem: e2fsck /dev/(h or s)dXX +Bad superblock: e2fsck -b 8192 /dev/(h or s)dXX + +MESSAGE + open(M, ">/mnt/message") or die "Couldn't write /mnt/message\n"; + print M $message; close(M); + + # Got to umount,mount, and umount again to make sure everything is + # copied over before doing lilo + errum(system "umount /mnt"); + print "Umount device\n"; + print "Remount device\n"; + errm(system "mount -t ext2 $device /mnt"); + print "Configuring lilo\n"; + chdir("/mnt") or die "boot_root: ERROR: Could not change directories\n"; + system "lilo -v -C brlilo.conf -r /mnt"; + die "boot_root: ERROR: lilo failed\n" if $? != 0; # code 0 regardless + chdir($pwd) or die "boot_root: ERROR: Could not change directories\n"; + print "Umounting /mnt\n"; + # y I know + $um = system "umount /mnt"; + + print "Doing a little cleanup\n"; + system "rm /tmp/$initrd; rmdir /tmp/initrd_mnt"; + + # This could be put on the top, but all that needs to be done now is + # to mke2fs & cp over /compressed_filesystem + $enough_root =~ /^-+\d+$/ ? + die "boot_root: ERROR: Not enough room: root stuff = $root_image_size k, device = $device_size\n" : + print "boot_root: Looks good: boot stuff = $boot_size k, device = $device_size k, remaining = $remain_root k\n"; + + +# Here's where we copy over that compressed filesystem +# We could separate $device = boot,root allowing two +# different devices to be used. +if ($um == 0) { + mtab(); + print "Making ext2 filesystem\n"; + system "mke2fs -m0 -i8192 $device $size"; + die "boot_root: ERROR: You need to insert a disk\n" if $? != 0; + errm(system "mount -t ext2 /dev/fd0 /mnt"); + print "Copy over the compressed filesystem\n"; + system "rmdir /mnt/lost+found"; + $broot_image = basename($root_image); + system "cp $root_image /mnt/$broot_image"; + die "boot_root: ERROR: Could not copy over the root filesystem\n" if $? != 0; + errum(system "umount /mnt"); + print "Root disk did not properly umount\n" if $? != 0; + print "Finished!\n"; +} +else { + die "boot_root: ERROR: Boot disk was never umounted\n"; +} # copy over the compressed + + +} # lilo method + + +# Some functions + +sub errmk { + die "boot_root: ERROR: Could not make important directories\n" if $? != 0; +} + +sub errcp { + die "boot_root: ERROR: Could not copy over important stuff\n" if $? != 0; +} + +sub errum { + die "boot_root: ERROR: Could not umount the device\n" if $? != 0; +} + +sub errm { + die "boot_root: ERROR: Could not mount device\n" if $? != 0; +} + +sub err { + die "boot_root: ERROR: Not enough space after all\n" if ($? > 0); +} + +sub mtab { + +# /proc/mount could be used, but maybe there is no /proc + +# \n from initrd() +print "\nPlease insert a floppy and then press [Enter]: "; +; +# Check to see if $device is mounted +open (MTAB, "/etc/mtab") or die "no mtab!\n"; +while () { + if (m,$device,) { + print "DANGER!\n"; + print "This next step will create a new filesystem on the floppy removing all data\n"; + print "Please umount the device first, and put in a new floppy.\n"; + exit; + } +} +close(MTAB); +} # end sub mtab + + +sub initrd_size { + + ($linuxrc_size) = @_; + print "Checking size needed for initrd\n"; + + # the size of the loop device should be at least 1.63% larger than what + # it will contain (i.e. 8192 inode), but to keep on the safe size it will + # be 2.00% larger. + # 9 dirs = 1024 each (increase if modified) + # {ash,gzip,mount,umount} (required executables) + # bzip2 if $compress eq bzip2 (optional) + # 1 for ld.so.cache + + # change dir size if needed + $dir_size = 9 + 1; + $initrd_size = $dir_size + $linuxrc_size; + + # add other executables here + @initrd_stuff = qw(ash gzip mount umount); + foreach (@initrd_stuff) { + $initrd_size = $initrd_size + ((stat("/bin/$_"))[12]/2); + } + + if ($compress eq "bzip2" && -e "/usr/bin/$compress") { + print "hi\n"; + $initrd_size = $initrd_size + ((stat("/usr/bin/$compress"))[12]/2); + } + + # lib sizes + open(L,"ldd /sbin/init|") or die "Oops, no init could be found :)\n"; # safe to use ldd + while () { + $lib = (split(/=>/,$_))[0]; + $lib =~ s/\s+//; + $lib = basename($lib); + $lib =~ s/\s+$//; + open (SL,"ls -l /lib/$lib|") or die "humm: $!\n"; + while () { + # symbolic link + if (-l "/lib/$lib") { + $what = (split(/\s+/,$_))[10]; + $initrd_size = $initrd_size + 1; + $initrd_size = $initrd_size + ((stat("/lib/$what"))[12]/2); + } + # no symbolic link + else { + $initrd_size = $initrd_size + ((stat("/lib/$lib"))[12]/2); + } + } + } + + $initrd_size = $initrd_size + ($initrd_size * 0.02); + # For perfection 1 (rounded up) is o.k., but for safety 10 would be + # better + $initrd_size = sprintf("%.f",$initrd_size) + 10; + return $initrd_size; + +} # end sub initrd_size + + +sub initrd { + +$broot_image = basename($root_image); + +# Here's where the initrd is put together using a loop device +# HEREDOC +$initrd_exec = << "INITRD"; +#!/bin/ash + +export PATH=/bin:/sbin:/usr/bin: + +echo Preparing to setup ramdisk. + +mount -o remount,rw / 2>/dev/null + +echo Mounting proc... +mount -t proc none /proc + +echo -n 'Please insert the root floppy, and press [Enter]: ' +read ENTER + +echo Mounting floppy drive readonly ... +mount -o ro -t ext2 /dev/fd0 /mnt + +echo -n Copying new root to ramdisk .. please wait ... +$compress -cd /mnt/$broot_image > /dev/ram1 +echo done. + +echo -n Unmounting floppy ... +umount /mnt +echo done. + +echo Changing to the new root. +echo 257 >/proc/sys/kernel/real-root-dev + +echo -n Unmounting proc ... +umount /proc +echo done. + +echo Continuing normal boot procedure from ramdisk. +INITRD + + open(LC, ">/tmp/linuxrc") or die "Couldn't write linuxrc to loop device\n"; + print LC $initrd_exec; close(LC); + $size_needed = initrd_size((stat("/tmp/linuxrc"))[12]/2); + unlink("/tmp/linuxrc"); + + print "Using loop device to make initrd\n"; + print "Make sure you have loop device capability in your running kernel\n"; + system "dd if=/dev/zero of=/tmp/$initrd bs=1024 count=$size_needed"; + # no need to enter y every time + open(T,"|mke2fs -m0 -i8192 /tmp/$initrd") or die "Problem here: $!\n"; print T "y\n"; close(T); + print "Mounting initrd in tmp\n"; + errmk(system "mkdir /tmp/initrd_mnt; mount -o loop -t ext2 /tmp/$initrd /tmp/initrd_mnt"); + print "Putting everything together\n"; + open(LC, ">/tmp/initrd_mnt/linuxrc") or die "Couldn't write linuxrc to loop device\n"; + print LC $initrd_exec; close(LC); + # I could test this but somebody's system may do permissions differently + system "chmod 755 /tmp/initrd_mnt/linuxrc"; + system "rmdir /tmp/initrd_mnt/lost+found"; + + print "... the dirs\n"; + errmk(system "mkdir /tmp/initrd_mnt/{bin,dev,etc,lib,mnt,proc,sbin,usr}; mkdir /tmp/initrd_mnt/usr/lib"); + errcp(system "cp -a /dev/{console,fd0,null,ram0,ram1,tty0} /tmp/initrd_mnt/dev"); + # future implementation + #errcp(system "cp -a $device /tmp/initrd_mnt/dev"); + + print ".. the bins\n"; + errcp(system "cp -a /bin/{ash,gzip,mount,umount} /tmp/initrd_mnt/bin"); + if ($compress eq "bzip2") { + errcp(system "cp -a /usr/bin/$compress /tmp/initrd_mnt/bin") if -e "/usr/bin/$compress"; + } + + # Testing init is sufficient for grabbing the correct libraries for the + # executables immediately above. This could be modified to test a + # list of executables. + print ".. the libs\n"; + open(L,"ldd /sbin/init|") or die "Oops, no init could be found :)\n"; # safe to use ldd + while () { + $lib = (split(/=>/,$_))[0]; + $lib =~ s/\s+//; + $lib = basename($lib); + $lib =~ s/\s+$//; + open (SL,"ls -l /lib/$lib|") or die "humm: $!\n"; + while () { + # symbolic link + if (-l "/lib/$lib") { + $what = (split(/\s+/,$_))[10]; + errcp(system "cp -a /lib/$lib /tmp/initrd_mnt/lib"); + errcp(system "cp -a /lib/$what /tmp/initrd_mnt/lib"); + } + # no symbolic link + else { + errcp(system "cp -a /lib/$lib /tmp/initrd_mnt/lib"); + } + } + } + + print "Determine run-time link bindings\n"; + # Has a return code of 0 regardless + system "ldconfig -r /tmp/initrd_mnt"; + print "Umounting loop device, and compressing initrd"; + errum(system "umount /tmp/initrd_mnt; gzip -9 /tmp/$initrd"); + $initrd = $initrd . ".gz"; + +} + + + + + + + + + + + + + + + + + + diff --git a/doc/html/bootroot.html b/doc/html/bootroot.html new file mode 100644 index 0000000..8d3f967 --- /dev/null +++ b/doc/html/bootroot.html @@ -0,0 +1,115 @@ + +BootRoot + + +

+You found it ..  the BootRoot page.  Check out the gBootRoot page, I no longer actively maintain BootRoot because the graphical version is much more powerful! +

+

+

The four steps to making a Boot Root set.

+1).  Grab the Perl Script right here .. boot_root +  give it a name .. umm .. boot_root. +

+2).  Make sure the bang line points to the right place. +
+      $ which perl
+      /usr/bin/perl
+      $ grep "perl -w" boot_root
+      #!/usr/bin/perl -w 
+
+
+3).  Make it executable. +
+      $ chmod 755 boot_root
+
+
+4).  Put it in one of your LIB PATHS. +
+      $ echo $PATH
+      /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin:.:
+      $ mv boot_root /usr/bin
+
+
+5).  Run it, and have lots of fun!  More directions can be found at the beginning of the script. +

+

BootRoot FAQ

+

What does this program do? +

+ BootRoot creates a boot disk with lilo, a kernel and an initrd image. +   The initrd script mounts another root disk with a compressed (gzip or + bzip2) filesystem. +

+ The root filesystem isn't made by this program, but there lots of compressed filesytems out there to use (see rest of FAQ).   This program is + patterned after mkrboot, but unlike mkrboot it creates an unique bootdisk + and a separate root disk. +

+ What's the advantage of using this program? +

+ You can use a bzip2 compressed filesystem, this program is + easy to use, and it provides a framework showing a simple initrd method + which you can freely modify.   I wrote this + program as a solution to help oster at EE (www.experts-exchange.com) + create separate boot and root floppies for an emergency system for his + customers. +

+ If you make a cool change to this program, or if this program helps you + I'd love to know, that's better than receiving pizza :) +

+ How can I test BootRoot? +

+ Get SETUP.GZ as the filesystem from looplinux at + looplinux or get it here. +   This filesystem works with 2.2 kernels. +

+ [Ctrl] ([Tab] to see available images) +
boot: bootdisk single [Enter] +
( now filesystem is single user mode) +
exit [Enter] +
(now you are in multi user mode) +

+ Better yet, do [Ctrl] +
boot: bootdisk 2 [Enter] +

+ This works nicely with a compressed root filesystems made with yard without "single" .. but looplinux +comes with mc (mcedit). + +

+Why doesn't looplinux work as "bootdisk 1?" +

+ There is a difference between "1" and "single."  Looplinux was written + in a way that runlevel 1 doesn't work properly in relation to BootRoot + unless single is used.   And you thought they were the same thing.   + BootRoot proves otherwise. + +

+ What sort of configuration can I do? +

+ Edit the variable $compress to either gzip (default) or bzip2. +

+ How do I use the program? +

+ + + program_name   lilo   linux-kernel   compressed-filesystem +

+ "lilo" is the only method supported at the present. +

+Example: +
+ "linux-kernel" could be: /boot/vmlinuz-2.2.14 +
"compressed-filesystem" could be: /home/createit/my_creation.gz +
(if found in same directory when running the program) +
"linux-kernel could be": vmlinuz-2.2.14 +
"compressed-filesystem" could be: my_creation.gz +

Old versions of BootRoot.

+None available. +


+Contact me:  freesource@users.sourceforge.net + + + + + + + diff --git a/doc/html/index.html b/doc/html/index.html new file mode 100644 index 0000000..c3b30a3 --- /dev/null +++ b/doc/html/index.html @@ -0,0 +1,417 @@ + +gBootRoot + + + +

gBootRoot

+

at

+ +

+

+

+

+bOOTrOOT makes the development, construction, and +testing of distributions fun and simple.

+ +
+ +

+Download gBootRoot

+

Stable version

+

+Old versions

+ + +

+ +

+ +

+How to Use gBootRoot

+

The most important button to +familiarize yourself with is the Submit button which starts the whole process; +dialogs are presented as the process continues asking you if you want to +continue "OK" or stop "Cancel".

+ +

+The first row presently has only one Boot Method choice: +"2 disk compression."   +Clicking on the menu on the right selects the Boot Method.

+ + +

The second row allows you to select the kernel for the Boot/Root set.   You +may either use the file selector button on the right hand side, or you may +type in the location on the left hand side.

+ +

+The third row allows you to select the compressed filesystem you are +providing, using either of the two ways mentioned before.    You may use a +pre-made root filesystem or you may create one using one of the Methods +provided in the Advanced Root Section. +

+ + +

The fourth row allows you to select the device you want to use.   The default +device is the first floppy disk - /dev/fd0.

+ +

+The fifth row allows you to choose the size of the device being used.    +The default size of 1440 assumes you are using a floppy drive (Note: You may +want to experiment with 1722 which works fine with many floppy drives.), but +can be used with other sized devices like tape drives.    Click on the +appropriate radio button to choose either gzip or bzip2 compression if the +program doesn't automatically detect it.

+ +

Verbosity Box

+ + +The slider bar on the right allows the output of the verbosity box +to be +changed from the highest (2) to the lowest setting (1) or to be turned off (0) +or on again.   +At times it may be advantageous to turn off the verbosity box +since large quantities of output to this box may cause gbootroot to use too +much cpu power; however, output may still be found in the text file "verbose" +in /tmp/gbootroot_tmp'time-date'.

+ + +

+Using the Advanced Boot Section

+ +

+ +"Stripping"   On by default for libraries and binaries.   The stripping +behavior for libraries may be changed by clicking on the right mouse button +to change from --strip-debug to --strip-all.

+ +

+ +"Devel Device"   If the device used for development is different than the +actual boot device, use this field to indicate that device.   You will have to +run lilo -v -C brlilo.conf -r "device mount point" manually at a later time +on the actual boot device.

+ +

+ +"Opt. Device"   Add devices to the boot disk which are necessary for the +kernel to function properly. Put a space between each device. For instance, +/dev/fb0 for frame buffer devices.

+ +

+ +"append ="   Add append options to brlilo.conf.   If you are using a frame +buffer device you could add something like video=matrox:vesa:402,depth:16.

+ +








+ +

+Using the Advanced Root Section

+

+ +"Root Device"    +This is the device used for the root filesystem when +constructing the Boot/Root set.    +You may choose a device which is different +than the Boot device, but presently only floppy devices are supported.

+ +

+ +"Root Device Size"    The size of the actual media used for the Root Device.

+ +

+ +"Root Filename"    + The name give to the root filesystem when initially made +in the temporary creation location.    +The save button allows the creation to +be saved in the permanent default location when the +Accept button is pressed.

+ +

+ +"Filesystem Size"    + Root Methods make the filesystem the size which is +specified here.

+ +

+ +"Compression"    +Off by default to allow user-mode-linux testing.    Turn on +compression when you are ready to use a Boot Method +which requires compression.

+ +

+ +"Method"    The root filesystem creation method.

+ +

+ +"Template"    The template associated with a Root Method.    + Not all Root Methods +have templates.

+ +

+ +"Generate"    This puts the chosen Root Method in action.

+ +

+ +"UML"    Abbreviation for user-mode-linux.    + This is a linux kernel which runs on +top of the host system's linux kernel and allows a you run a live root +filesystem.

+ +

+ +"Accept"    +This accepts the created root filesystem if it is found in the +temporary creation directory.    +The UML box and the main section will now +reflect the path to this root filesystem.    + You can now test with the UML +button or a put together a complete Boot/Root set with the Submit button.

+ + +

User Mode Linux Box

+ +

+ +"Xterm"   Choose an xterm with its executable options switch.

+ +

+ +"Options"  Enter uml command-line options like: mem=64, +devfs=nomount.

+ +

+ +"Root_Fs"  Choose an uncompressed root filesystem.   +Append with ubd?=.

+ +

+ +"Abort"   Abort user-mode-linux kernel processes.  

+ + +

+About the Yard Box

+ +

+ +The Yard Box is a Root Method which is "Generated" from the Advanced Root +Section after a Template is chosen. It has several interesting features. + +

+ +The check boxes at the bottom represent the different stages involved in +creating a root filesystem. The behavior of these stages may be altered in +three ways: Edit->Stages->one-by-one (default) will perform each stage +sequentially, stopping between each stage, the user may continue the process +by pressing the Continue button. Edit->Stages->continuous proceeds non-stop +through all the stages. Edit->Stages->'user defined' allows the user to +choose any stages the user wants, and will then proceed through all the +chosen stages. Choosing only 'Check', 'Links & Deps', 'Create" is a good +example.

+ +

+ +

+ +The behavior of some of the stages may be altered. For instance Alt-T allows +you to choose which tests to run on the newly created +root filesystem.

+ +

+ +

+ +Press Alt-S to enable template text searching in either +direction. Find exact matches or ignore case with the case sensitive check +box.

+ +

+ +

+ +Use Ctl-S to save the changes to an open template, and Alt-A to save the +template with a new name. +bOOTrOOT will not allow readonly templates or template links to be saved +with their own name. A few of these example files are included. You may make +changes to them or clear their buffers. Then you may save the template with a +different name.

+ +

+ +

+ +Edit->Settings->Stripping allows you to turn off/on stripping for +Libraries, Binaries, and Modules. --strip-all is the default stripping +behavior, but Libraries may have this behavior changed to --strip-debug.

+ + +

+ +

+ +Edit->Setting->Paths allows you to prepend a new search path to your +environments $PATH variable. +

+ +

+ +

+ +Edit->'File System" may alter the type of filesystem used to make the root +filesystem. Because the filesystem is created on a loop device, some +filesystem types may complain or not be created at all.

+ +

+ +

+ +Edit->Replacements in your $HOME/.gbootroot/Replacements directory using +an editor of your choice. +

+ +

+ +

+ +Create->Replacements creates special replacement files. Presently it creates +an fstab configuration file as Replacements/etc/fstab.new in +$HOME/.gbootroot/yard/.

+ +

+

Little things you may want to know:

+ +

* gBootRoot requires ash for initrd.   Ash is a feather weight version of Bash.

+
+ +

FAQ

+

What does this program do?

+

gBootRoot creates a boot disk with lilo, a kernel and an initrd image.   The +initrd script mounts another root disk with a compressed (gzip or bzip2) +filesystem.

+ +

The root filesystem isn't made by this program, but there lots of compressed +filesytems out there to use (see rest of FAQ).   This program is patterned +after mkrboot, but unlike mkrboot it creates an unique bootdisk and a +separate root disk.

+ +

What's the advantage of using this program?

+ +

You can use a bzip2 compressed filesystem, this program is easy to use, and it provides a framework showing a simple initrd method which you can freely +modify.   I wrote this program as an extension to BootRoot which was written +as a solution to help oster at EE (www.experts-exchange.com) create separate +boot and root floppies for an emergency system for his customers.

+ +

If you make a cool change to this program, or if this program helps you I'd love to know, that's better than receiving pizza. :)

+ +

How can I test gBootRoot?

+ +

Get SETUP.GZ as the filesystem from looplinux or get it from my site. +This filesystem works with 2.2 kernels.

+

+ [Ctrl] ([Tab] to see available images) +
boot: bootdisk single [Enter] +
( now filesystem is single user mode) +
exit [Enter] +
(now you are in multi user mode) +

+ Better yet, do [Ctrl] +
boot: bootdisk 2 [Enter] + +

You can make your own compressed filesystem with +Yard.

+ +

Why doesn't looplinux work as "bootdisk 1?"

+

There is a difference between "1" and "single." Looplinux was written in a +way that runlevel 1 doesn't work properly in relation to gBootRoot unless +single is used.   And you thought they were the same thing?   gBootRoot +proves otherwise.

+ +

gBootRoot doesn't start because it can't locate Gtk.pm?

+

This program requires Gtk-Perl available from CPAN, Freshmeat or most GNU/Linux distributions.

+ +

There isn't enough room left on my 1440 floppy to make a Boot or Root +disk.  Is there any way to free up more space apart from reducing +the size of the kernel?

+ +

+Move the device size to 1722. This is a trick that tomsrtbt uses on his famous rescue disk.

+ +

If you roll the floppy density counter down to 0 and then try go back +up towards 1440 and 1722, you get very funny figures.

+ +

+This is because of the way Gtk works.   There are two adjustments, +step and page increments.  When you press your first mouse button the step +has been set to 282 so that a person can easily switch between 1440 and 1722. +  When you use your second mouse button the page is set at 360. You can go +down to zero by pressing your third mouse button on the down arrow.   Now +page up with the second button to 1440 and step with the first button to +1722.   Pretty cool, eh?

+ +

Why we are on this subject please check out these keyboard shortcuts for Gtk.

+ +

Motion Shortcuts + +

    +
  • Ctrl-A Beginning of line
  • +
  • Ctrl-E End of line
  • +
  • Ctrl-N Next Line
  • +
  • Ctrl-P Previous Line
  • +
  • Ctrl-B Backward one character
  • +
  • Ctrl-F Forward one character
  • +
  • Alt-B Backward one word
  • +
  • Alt-F Forward one word
  • +
+ +

Editing Shortcuts + +

    +
  • Ctrl-H Delete Backward Character (Backspace)
  • +
  • Ctrl-D Delete Forward Character (Delete)
  • +
  • Ctrl-W Delete Backward Word
  • +
  • Alt-D Delete Forward Word
  • +
  • Ctrl-K Delete to end of line
  • +
  • Ctrl-U Delete line
  • +
+ +

Selection Shortcuts + +

    +
  • Ctrl-X Cut to clipboard
  • +
  • Ctrl-C Copy to clipboard
  • +
  • Ctrl-V Paste from clipboard
  • +
+ +Larry Ewing's Penguin celebrates in gBootRoot. + +


+Contact me:  Jonathan Rosenbaum  <freesource@users.sourceforge.net> +
+Submit a Bug:   gBootRoot Bug System +
+Ask a question:   Help Forum +
+Start a discussion:   Open Discussion Forum +
+Join the mailing list:   gbootroot-dev mailing list

+ + + + + + + + + + + + + +