gBootRoot pronounced "bOOtrOOt"
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

699 lines
30 KiB

1.5.0 - 02/24/2003
Updated to 2.4.20-1um and the latest uml tools 20030202.
Fixed a @INC problem with rpm packages. The fhs checks usually insert
the module path (Debian std. path) into @INC via a BEGIN {}, but the
new BootRoot::Options was trying to be loaded before the fact because
it had been placed within the BEGIN{} and there was even a reminder in
the code documentation from prior releases explaining not to do this.
Updated BEGIN statements in gbootroot, expect_uml and
yard_chrooted_tests, and made sure "." is always specified first in
Thanks to Stian Skjelstad <> for pointing out some bugs
- namely the former annoying @INC bug that never should have occurred
in the first place - after I asked him to try out gbootroot to help
with his MTD requirements.
Added a new if/elsif control structure. \ if ( condition ) \n
statement(s) \n elsif ( condition ) \n statements elsif .. \ Nice
functionality to have.
Made Example.yard portable with the new if/elsif control structure,
and added pam.d/system-auth if it exists on the system.
Commented out many things in Helper.yard because has been
modified to allow no login along with no password, and provides a new
method "close_no_init" to provide a shutdown marker after which
uml_mconsole can be used to halt the process. This means faster
creation time for root_fs and no lag.
Huge fixes to all source packages.
Added format rules found in Example* to the main documentation.
Compiled for >= glibc 2.2.5. Previous version was compiled >= 2.3.1
which caused some things not to work on old distributions using 2.2*
Removed the -q from expect_uml because this caused the newer version
of mkreiserfs to fail because Namesys decided that unsolicited
advertising was in order so everybody knows that there are actually
some organizations and companies paying for its development. Wouldn't
this be nice in a perfect world for all Free Software projects?
Tested on Debian stable/unstable and rpm based distros RedHat 7.3/8.0,
Mandrake 9.0, and Suse 7.3 thanks to umlbuilder. Overall, this is by
far the most heavily tested release to date. Observed that stack
overflows are occxurring from time to time in the nested testing
Added /usr/info/dir and info to make_debian which makes things much
Added libexpect-perl and libgtk-perl to Build-Depends for debs; in
general, there were many fixes for both debs and rpms and their
respective source packages.
Improved documentation.
Added stop and go to the uml_mconsole interface for the UML Box.
Made perl 5.8 compliant perl-IO-Stty, perl-IO-tty and perl-Expect rpm
packages. Many things have changed especially with IO-tty and
Had to build slram into the kernel because RedHat 7.3's depmod causes
the build to fail.
1.4.0 - 01/06/2003
Updated to 2.4.19-46um and the latest uml tools 20021103.
Added nesting level 1 to the uml to allow gbootroot to have full
functionality under another uml running on the host kernel. This
means the uml will use more memory, but its negligible.
Wrote and added a C program skas-or-tt to automatically add the proper
mode={skas,tt} to the commandline. This means compilation will be
optimized, and things won't lock up when using gbootroot within a
uml running on top of a host kernel without the skas patch.
The MTD Emulator doesn't work as nicely as before. Blkmtd seems
mostly broken, and mtdram needs more careful tweaking for total size,
though mtdram definitely still works. This is due to changes in uml
which will have to be addressed since the code for the mtd modules
didn't change.
Had to add user-mode-linux/usr/lib/uml to the PATH to allow --home to
find port-helper, or otherwise root_fs complain. Have no idea why
this change exists with the new port-helper because that wasn't the
case before. Also, added path for user-mode-linux/usr/bin to find the
other tools.
The Makefile has been altered quite a bit, and wgets necessary
sources, unconventional but very nice in keeping up with jdike's
latest patch. You can now live quite happily out of the source
Added the templates for Initrd and root_fs_helper and the
corresponding replacements that are also used by the source package.
Updated the documentation, and the README found in the source packages
is now available in the normal packages.
The biggest change is the command-line interface with the yard root
method. Now distribute your template and let others easily recreate
your root_fs without entering the gui by running "gbootroot --template
your_template" and this is a nice way to manage a distribution you are
developing. This also means that source packages are completely
automated now, and vastly improved, which is quite awesome.
When root_fs_helper was running with the newer, and
consequentially the newer uml kernel it became necessary to get out
when the kernel shuts down with a last function right when it says
"Power down" or "bd.*module cleaned up."
Checks for the proper version for newer libc6 linkers. Hopefully,
should work properly with libc6 > 2.3.1, too.
1.3.6 - 03/10/2002
Updated to 2.4.18-2um and the latest uml tools 20020212, including tunctl from
CVS, because it was missing from the uml_utilities tar.bz2. This is a nice
patch, and an earlier compilier issue has disappeared.
Added the MTD Emulation section to the UML Box. This allows filesystems to
be run on a simulated Memory Technology Device via mtdram or blkmtd. This
is most useful for running jffs2 fs (compressed journaling fs designed for
flash memory). This is handy for shipping and running jffs2 images, and to
test this and other fs ultimately designated for a MTD device. With a little
tweaking they should run well on an x86 MTD.
If a fs is being made with mkcramfs, genromfs, mkfs.jffs or mkfs.jffs2 and
the directories /dev or /initrd don't exist, they are automatically are
created during the create stage. Initrd dir is needed for mtd emulation
testing, and dev is also required.
Added cad "Ctrl-Alt-Del" to mconsole interface, and documented it.
Added EmptyFS.yard template with instructions, and which does what you think
it does.
Now looks for mconsole at both Locations /tmp/uml/$umid/mconsole and
new location $ENV{HOME}/.uml/$umid/mconsole by not specifying a direct
path. Some older mconsoles seemed to require this, but 10um onwards
respects this.
Now files for uml_exclusively are made in create_expect_uml which is
effectively known as the create stage. This avoids the unecessary previous
requirement of having to select the copy stage again just to create a file
for /dev/ubd/0. The file created is sparse, got this idea from a discussion
Jeff had with a user on uml-user.
Added jffs/jffs2 image construction.
1.3.5 - 02/13/2002
Now the template called Helper.yard used to create the root_fs_helper is
included with root_fs_helper.
1.3.4 was awarded Editor's pick by SoftLandMark, but I recommend upgrading
to 1.3.5 because of my oversight with the root_fs_helper issue, as well as
the improved initrd testing capability of the specially patched
2.4.17-10um kernel. I also recommend running gbootroot as a normal user, at
least that's what I usually do. :)
Root_fs_helper was working fine, but because I hadn't committed, let alone
copied the new changes to CVS I didn't notice any aberrations until I
installed the new released version of gbootroot. This is related to the new
securretty requirements of uml. Problem fixed.
Initrd was not working with any fs other than ext2. After
contacting the trinux-uml project, Matthew Franz <> confirmed
that he was having problems creating a working uml for the initrd created
by Bill Burdick <>. I talked Bill into sending
me his uml .config, and narrowed down the problem to cramfs. Cramfs has
known bugs as documented in the kernel sources. Because cramfs was placed
before just about every fs in the VFS check order, and trinux-uml's initrd
was minix, the kernel failed, but an ext2 initrd didn't. Changing the order
in which filesystems are checked during the VFS stage by editing fs/Makefile
solves the problem. Thanks to Henrik Nordstrom <> for
pointing out how to do this at user-mode-linux-devel. I am hoping the patch
found in user-mode-linux/usr/lib/uml/cramfs-vfs-oder.patch becomes part of
uml. This should have been corrected ages ago in the standard Linux kernel.
Removed unecessary warning which warned that left-hand side replacements
couldn't be a directory if it happened to find that directory on the hostfs.
Directories can be replacements.
1.3.4 - 02/08/2002
Updated to 2.4.17-10um and added Jeff's initrd fix.
Updated to 20020125 uml tools.
The rpmized gbootroot package requires perl-Expect which in turn requires
perl-IO-Tty and perl-IO-Stty. A search on the Net revealed that the existing
rpms out there are either outdated, don't have their dependencies set-up
properly, or require a particular version of the perl5 series.
I made these rpms so they work on any i386 architecture which is using the
perl5 series. This includes 5.6.0 and 5.6.1 which are in common use on most
major distributions as of the year 2002. If you have a problem with the
automated Linux virtual machine which appears related to these modules, please
don't hesitate to contact me. They are available at
Created rpms for Mandrake type dists, and Red Hat type dists.
Added vc/? and vcs? to the etc/securetty files because the new uml kernel uses
these now.
Fixed the fhs situation again. This time it will definitely work. As I wrote
in the code: "I always thought the BEGIN statements were executed before
everything else, but I have discovered that in this case it has to be placed
before the use statements if exec /usr/bin/gbootroot is done via $PATH ..
I guess that makes sense because $PATH is established in this particular
BEGIN." Other executables have been fixed including expect_uml and
Improved Replacements Box GUI.
Added a button to open up the Filesystem Box from the ARS, this is on the same
line as Filesystem Size.
1.3.3 - 01/15/2002
During the boot stage the filsystem type was used to determine whether
to use the genext2fs (non-root) method or the normal method used by root.
Now the user type is used, this is better because it prevents conflicts
if a different filesystem type is chosen, or if a non-root user changes to a
different filesystem type in the filesystem box and forgets to change back
to genext2fs; however, it prevents root from using the genext2fs method,
which isn't a problem. The sudo requirement for lilo is too much of a
requirement, and will be changed in future versions.
Fixed another non-root boot/root bug. The info had it correct, but the actual
copy with genext2fs was being done from the wrong location. This has been
fixed. This method may be ditched for a far better one in the near future.
Had some testing code which was providing the wrong value for $compress, this
made non-root booting fail for bzip2 because bunzip2 didn't exist in the
Added another technique in the FAQ to show how space can be saved on the
root_fs by using the libraries from the initrd. Liav instigated this by
asking a question related to FAQ question 14, "So if I understand correctly,
it is not possible to copy libc from /dev/ram0 to /dev/ram1 before mounting
/dev/ram1 as / ?
Liav pointed out how Yard can make boot/root floppies with a compressed root
filesystem. Edited FAQ question 13 to correctly reflect how gz compressed
root filesystems may be booted without an initrd.
State is saved for the Compression off check box and the Root Filename save
check box.
The UML Kernel entry box in the ARS remembers state now.
Changed the behavior of save_as so that when compression is chosen, the
entry won't be the same as that found in Root Filename, but instead reflects
the newly compressed file. This change was precipitated by the previous
change to the Accept behavior.
1.3.2 - 01/11/2002
Updated linux and modules to 2.4.17-4um. Made jffs and jffs2 part of the
kernel, and had to comment out the get_mtd_device function call in jffs_fm.c
and super.c to accomplish this. Looking forward to more support from the uml
project for mtd devices.
Updated to the 20020104 uml tools, this includes port-helper which is the new
helper for allowing uml devices to be attached to a specified host port.
Changed the behavior of the Accept button so that when compression is chosen
(gzip or bz2) the Root Filename remains the same as before. This is nice
because the fs can be remade with the same name and re-compressed, rather then
appending gz or bz2 to the name. Before if the user forget to
delete the ending this would happen: root_fs.bz2.bz2.bz2
Changed shells for root and user to /bin/sh in passwd-debian, passwd.debian
and passwd.example. This is a better idea, and assumes sh links to a user
defined shell, so if the shell is changed the password files don't have to be.
Added several new questions to the FAQ, thanks to Liav.
Liav Asseraf <> points out a problem in 1.3.1. I reply to
him with this answer: "Indeed, you have found a bug. Bootroot adheres to the
most recent Filesystem Hierarchy Standard (2.1); in previous bootroot versions
a big chunk of the source code was included in /usr/bin/gbootroot, but I
decided to reorganize and move most of that code to BootRoot/, in
the process I also moved a statement which executes before the rest of the
program does to set up a proper @INC. What this all means is that
gbootroot couldn't find the required modules." This bug has been fixed.
Altered tooltip text for the Options entry to recognize that the umid needs
to be switched in the mconsole box in order for the new Linux virtual machine
to be controlled via the buttons and the mconsole. The behavior could be
changed to accomplish this automatically, but that wouldn't be consistent
with the behavior one would expect from the mconsole; anyways the documentation
already explains to use switch in the mconsole.
1.3.1 - 12/25/2001
Added a complete interface to the mconsole in the UML Box. Multiple options
can be entered at one time. Options include: switch so that the umid can be
changed to control a different Linux virtual machine, sysrq as in
Documentation/sysrq.txt, config and remove for devices (ubd?,eth?), reboot
and halt, version to find the version of the running uml kernel, and help.
Added both a Reboot and Halt button to the UML Box. Both of these buttons
have an interface to mconsole, and provide clean control of rebooting or
halting a Linux virtual machine. When they fail, Abort does all the clean-up,
but this should be used as a last resort. Both of these buttons initially
parse the Options entry for the first instance of umid
Added a new stage button in the Yard Box called Copy. Create is now Copy, and
the uml_exclusively and genext2fs behavior are handled by Create, this is
much nicer because a new filsystem type can be created without having to wait
for everything to be copied again to the sources directory.
Updated the documentation and graphics to reflect the new changes, and provide
a new exercise.
If the sources created from the template had a symlink in them from a previous
creation, you couldn't just press create again without symlink() complaining
(for instance, for genext2f and the new uml_exclusively). This has been fixed.
Compiled 2.4.16-2um linux and modules to specification for root_fs_helper.
Makefile properly edited to copy over the config used. Ext2, cramfs, minix,
reiserfs, and romfs are built-in to the kernel.
Got rid of the complete lock-up when large files are compressed, ofcourse,
users won't want to try to compress more than one format at the same time,
because the logic will get skewed. In the future may make this OO. Added
some verbosity to tell when the process has begun and finished.
Established logic for Filesystem Box based on ownership. Defaults need to
be different dependending on the user. Normal users probably never will
want to preserve permissions, but they may want to toggle off UML
Exclusively to create different filesystem types when <= 8192 fs_size.
Root users may want to turn off Preserve Permissions to create a root only
filesystem, and the may want to toggle between creating root filesytems
via loop devices or UML to allow different filesystem types.
Added UML Exclusively and Preserve Permissions check boxes to the Filesystem
Box. Esc closes, changed table size, and layout, responds to return, and
submit button defaults.
Put Jeff Dikes in BootRoot, and changed it to BootRoot::UML, added
one change to allow no password.
The auto-magic test for uClibc was only testing for busybox, this has been
1.3.0 - 12/12/2001
Added a README for users installing from the source package.
Removed the enforcement of the yard suffix rule for templates, because it
was never really documented; however, it is still a nice rule to follow
despite that it is not enforced anymore.
Added an archictecture-dependent replacements repository directory.
Fixed the freezing behavior for particularly large templates, like the ones
produced by make_debian, and make_debian-X11. However, overly large buffers
in the verbosity box still hog cpu in a big way. The best procedure for
now is to open and close the box between stages.
Made the termcap check just a warning if terminfo or termcap don't exist,
If a terminfo directory is found, linux will need to exist or the test will
return error. This is better because the root filesystem can still work
if this information doesn't exist. A minority of gettys will fail if they
use termcap or terminfo, but this check was removed from the chrooted tests
several months ago for the reason just cited. Note: check_getty_type_call
was removed from, but exists in chrooted tests without the termcap
check. Also, added a close which was missing.
Removed an unnecessary check from the fstab test, and improved a regexp
which was failing if tabs were used in the fstab.
State is saved for all check buttons when the yard box is opened and
closed. Deciding whether to save state between invocations of gbootroot
via a file.
Moved the Changelog from within gbootroot to a Changes file in
/usr/share/doc/gbootroot, because it is getting quite large.
Improved the sizing of the UML box.
Added New Template (Alt-N) capability to the Yard Box.
Added several new FAQ questions, added a lot more information on
"How do I use gBootRoot?" Updated the graphics for the documentation.
Updated to version 2.4.16 of user-mode-linux.
The Yard Box has new check buttons which allows the parsing behavior of
the nss and pam configuration files to be turned off and on (default).
Pam.conf and pam.d/{service names or *} can now be checked for their
specified service modules. The service modules are located either in
/lib/security or /usr/lib/security and included with the file set if they
are found on the host system. The modules are then checked for their
dependencies which are included if they haven't previously been specified.
Therefore, the user no longer needs to specify pam modules and dependencies
in the template if the pam parsing option in turned on.
Nsswitch.conf can now be checked for the service modules it specifies. The
service modules pertaining to the host systems libc6 are located and
automatically included. The modules are then checked for their
dependencies which are included if they haven't previously been specified.
Therefore, the user no longer needs to specify nss modules and dependencies
in the template if the pam parsing option in turned on.
$ENV{RELEASE} is now initialized every time a check is run on the template.
Information can come from three sources, the kernel version returned from
a selected kernel in the main section, the user defined kernel version
in the ABS, or `uname -r`. User defined kernel version overrides the
kernel. The root_fs needs to be built in relation to the actual kernel
modules it will run on. Previously the $RELEASE value wasn't returned
properly because of some bugs in kernel_version_check. This has been fixed.
The proper ldd check is now used if a dynamically linked binary is detected
to require uClibc rather than libc6. The ldd from the default location of
/usr/i386-linux-uclibc/bin is used for uClibc. The old behavior of
automatically including the default loader for the host system has
been removed.
Fixed pam test so that the 3rd field rather than the 4th field is being
checked in the service-name files found in /etc/pam.d/. The 4th field is
acceptable for pam.conf. If a path is specified in either conf format,
that path will be checked, otherwise, either the pam default path of
/usr/lib/security or the FSSTD location /lib/security will be checked
for a match.
Fixed nss test so that it checks for the right libnss_(service).so.$version
if glibc 2.2 is used. Glibc 2.0 and 2.1 used 1 and 2 respectively, but 2.2
uses 2.
Experimental busybox and uClibc functionality included for boot_fs.
Many improvements to the verbosity output.
Replacements path is set just once.
The Path Box only allowed extra paths to be added before the first generation
of a root_fs creation, this was because the values weren't allowed to be
changed after they were defined. This has been fixed.
Symlinks have been vastly improved. Fictional or real links can now be
specified, and links always follow the link -> (file | directory ) format
where either side can be existing dirs/files or fictional dirs/files on the
All of Tom's templates have been replaced with new templates clearly
marked as Examples.
Example.yard takes advantage of the automated NSS and PAM feature, and can
create a devfs or nondevfs root filesystem, and has many new replacements.
The inittabs reflect modern versions of dpkg, rpm, and slackware based
Example-Mini.yard demonstrates the bare minimum required to create a
working root_fs.
The documentation in the new templates has been improved
to respect the way gbootroot's Yard now works, since it has been greatly
modified from the original, and some old features deemed unnecessary have
been removed.
The Debian.yard example has had a name change to Example-Debian.yard,
and has additional documentation so the user understands its prerequisites.
The FAQ covers make_debian usage.
Chrooted tests in the Yard Box are disabled and removed when a non-root
user runs the box.
ARS and YardBox error handling is much better because $error has been made
private, before it was mostly global in which meant an error
value remained ERROR even when the problem was fixed which caused the
YardBox to fail to work properly after certain errors.
When the ARS hadn't been opened yet, the program reported that the root
device hadn't been umounted yet, this was observed with genext2fs but was
certainly a global bug. This has been fixed.
The majority of add-on replacements except for passwd*, shadow, and have a CVS Id and "make_debian replacement".
Original CVS information is now preserved so
that non-root users and root can't edit global replacements, the basic idea
is that root will usually be using an editor like Emacs in
$HOME/.gbootroot/yard/Replacements which respects that CVS versioned files
outside of the repository are read-only (essentially because the date has
changed). Users should make copies of versioned replacements which they
want to edit, for instance: fstab.debian-1000 Also, they shouldn't defeat
the mechanism by removing the CVS directories, although, only root has
write permissions.
All replacements are now symlinks which is helpful to maintain static
information for add-ons, anotherwards, this allows the author to know that
all his replacements are updated in user workspaces when he releases a new
add-on. Because of this change symlinks will now be respected in the
Replacements directory since the file being pointed to will be used instead
of the actual link when constructing the root filesystem.
Non-root users may now create boot disks. Boot Loaders may required root
permissions for some methods, and the fstab may need to be edited, see FAQ.
And some /lib/modules/`uname -r`/modules may need to be given world read
A dialog box has been added which will pop up when the lilo stage has been
reached for a normal user, explaining the requirements, and what the user
can do next which is explained in detail in the FAQ.
Non-root users may now create root filesystems up to 8192k in size using
genext2fs. FAQ explains how to exceed this limit as a normal user.
Added sources.list replacement.
Added /swapfile to fstab.debian.
1.2.14 - 10/24/2001
Append field in the ABS now saves state for non-root users. Before it only
remembered state if lilo.conf could actually be read, ofcourse, this wasn't
an option for non-root users. The beginnings of non-root boot and root_fs
creation capabilities have been put into place, but haven't been fully
implemented. The end result of this is that directories created in
$tmp are now static for non-root users and now use the userid number to
keep track of different non-root users.
The author of swim came out with a new version he now calls dswim. This
means Debian System Wide Information Manager, but the "d" could also stand
for different. Changes have been made to make_debian to facilitate this
much more stable version of swim, and better non-installed package checks
have been implemented in make_debian.
The control dependencies have been vastly improved, and reflect the change
from swim to dswim. Yard_chrooted_tests is now put in a gbootroot specific
directory since it is unique to gbootroot.
The lastest user-mode-linux is included: 2.4.12
Updated the documentation, and it includes a better explanation in step 7
for "How can I test gBootRoot?"
Added checks for the existence of ash, lilo, bzip2, and file for the 2
disk compression method.
1.2.13 - 09/28/2001
Renamed "lilo" Boot method to "2 disk compression."
Added three new entry fields and one radio button to manage
kernel modules, and made important changes to the 2 disk
compression code.
Advanced Section is now Advanced Boot Section (ABS).
Properly handles two different block devices with two
different sizes. Tested on /dev/fd?.
Advanced Root Section (ARS) added. Includes root device and
size, root filesystem name with Save or Save As, filesystem
size, gzip/bzip2/none compression, user-mode-linux kernel
selection, Root Method and optional associated Template.
Yard Incorporation Tasks closed: 19556, 22668, 22496.
Yard Method added to ARS which generates the new well
featured Yard Box.
Yard Box includes alterable staging behavior for root
filesystem creation, template text search, adjustable
stripping behavior, editable filesystem and replacements,
$PATH appending, testing choices, Save and Save As.
Seamlessly integrated Verbosity Box and slider bar
to control the verbosity level added to the main box.
Several bug fixes and enhancements to the original Yard
scripts, including a choice of stripping features for
libraries, binaries, modules with corresponding sizing
checks, link -> file is now literal, unneccessary situations
for ../ x path_length removed, testing improvements.
Localized directories provided for users under
Wrote make_debian to automate the creation of a Debian
template for the Yard Method. This spawned the
make-debian-x11 add-on which is simply the make_debian
script with easily made user modifications.
UML button added to ARS. UML (user-mode-linux) Box
provides a testing bed for root filesystems. Previous
Options are remembered to save typing, Abort button
provides excellent process clean-up.
Wrote an automated package creation script which can
be modified for other packages. This script can be found
in CVS.
Added user definable resources file "gbootrootrc" for Gtk.
Bugs closed: 422436, 225252
1.2.2 - 09/03/2000
Development is now at
Cristian Ionescu-Idbohrn 'cretzu' added as developer
Advanced Section GUI added.
Stripping (new) is now the default behavior. Stripping
options are in AS.
Cretzu's gdkbirdaao() " Guess Default Kernel Boot Image
Root Device And Append Options" is incorporated both in
beginner section and AS.
Cameron Caffee <> sends
detailed reports and helps with testing. This leads to
the discovery of the need for stripping, as well as a
version check being incorporated into the program.
Option for additional devices in boot disk added to AS.
'Changed' signal replaces 'activate' in entry widgets.
Hard wired coding changes in initrd_heredoc();
development drive can be different than boot drive;
added as an option to AS.
Step increment changed for device size spinner button.
New documentation and grammar corrections.
Bugs closed: 111579, 112555, 112949, 111580, 11636, 12073,
12215, 13385, 13453, 13455.
1.0.3 - 08.09.2000
Tmp and mnt are now created on the fly,
along with a new error function for mkdir(),
Gtk clean-up for this, and clean-up by signal handler
which should please Perlish and helpful Cristian.
1.0.2 - 08.06.2000
Changed logic slightly in submit() with returns rather
than a scalar to resolve a minor bug caused by some
changes in the previous version.
1.0.1 - 08.05.2000
Zas provided a correction for a Perl 5.6 error complaint.
Zas found some unecessary GDK lines causing some Gtk
warnings; these were commented out.
Cristian Ionescu-Idbohrn found a bug caused by putting
the Kernel or RootImage below the mount point. An error
check and error dialog were added.
1.0.0 - 08.02.2000
First public release