Name

grml-autoconfig - main bootup process of a grml system

Synopsis

None - it is a framework. See grml-autoconfig(8) for information regarding the interface script.

Introduction

By using the config framework, it is possible to customize Grml’s startup in a multitude of ways. It allows to:

  • execute one or more scripts on startup

  • install Debian packages from deb files on startup

  • unpack configuration on startup

The combination of Debs, Configuration and Scripts is called DCS in Grml. DCS can be read from the Live Image itself, from an arbitrary file system on the local system which is marked with the volume label GRMLCFG, or from the file system pointed to by the myconfig boot parameter.

The DCS handling is controlled by a number of boot parameters.

The scripts save-config and restore-config can be used to create and handle files called grml configuration archive, abbreviated GCA. save-config stores the running configuration inside a GCA; restore-config is a script to restore a configuration from a GCA.

Tip
A GCA is a plain bzip2 compressed tar archive. All the files are generated starting from the root-directory / so it is easy to handle. You can generate configuration archives manually as well. save-config is just a frontend which should make it easier to use.
Important
Starting with Grml release 2009.05 its possible to use root persistency on grml. This means you can store your settings and reuse them on reboot, without having to deal with this config framework. Visit http://wiki.grml.org/doku.php?id=persistency for further information.

Behavior in current Grml versions

This section applies to all Grml versions newer than release 2013.02.

The central concept of grml-autoconfig is the DCS directory which holds debs, configuration and scripts which are used during system startup.

Determination of DCS directory

The DCS directory defaults to the root directory of the GRML live image (Note: the directory is known as /run/live/medium/ on a running Grml system then!). If a file system labeled GRMLCFG is found, the DCS directory is the root directory of that file system. Alternatively, the myconfig boot parameter can be used to directly specify a device which is then taken as DCS directory (myconfig=/dev/sda1, for example). If your device is labeled different to GRMLCFG the proper label can be set via the autoconfig boot parameter (autoconfig=SOMELABEL, for example).

Without any additional boot parameters, the GCA at DCSDIR/config.tbz is automatically unpacked and DCSDIR/scripts/grml.sh is automatically executed on system startup. The noautoconfig boot parameter disables this automatic behavior.

Boot Parameters

The following boot parameters are supported. Use them at the (isolinux) bootprompt as documented here.

myconfig

This parameter directly sets DCSDIR to the root directory of the specified device. Usage examples:

myconfig=/dev/sda1                        => read DCS from usb-device
autoconfig

This parameter specifies the label used to determine the DCS device. If undefined the label GRMLCFG is used to find the DCS device.

autoconfig=SOMELABEL      => search for device labeled SOMELABEL to use as
                             DCS device.
home

This parameter is for setting a specific partition as home directory. Usage examples:

home=/dev/sda3    =>  use /dev/sda3 as the homepartition
home=scan         =>  scan through the available partitions and search
                      for file grml.img
partconf

This parameter mounts the specified device in read-only mode and tries to copy all files specified in /etc/grml/partconf to the Grml system. This provides the possibility to use the configuration of a harddisk installation. For example using the network configuration (which is specified in /etc/network) is possible using this boot parameter. Usage example:

partconf=/dev/sda2 => try to mount /dev/sda2 and copy files specified
                      in /etc/grml/partconf to the booted Grml system
netconfig

Use this parameter to restore configuration using wget to download a GCA from the specified destination. You can also add variables to change the file name depending on the host configuration. Predefined and useful variables are $ARCH, $HOSTNAME and $KERNEL. Usage example:

netconfig=server.tld/path/to/config.tbz  =>   restore configuration using wget to download file config.tbz
netconfig=server.tld/config-$ARCH.tbz    =>   download config for specified architecture
netscript

Use this parameter to download and run a script from specified destination: You can also add variables to change the file name depending on the host configuration. Predefined and useful variables are $ARCH, $HOSTNAME and $KERNEL. The environment variable NETSCRIPT is set to the specified URI. This can be used to detect if the script is executed via the netscript bootoption. Usage example:

netscript=server.tld/path/to/script      =>   download and run script/executable from server
netscript=server.tld/script-$HOSTNAME    =>   download and run script/executable for specific host
extract

Extract specific directories from the GCA which needs to be specified by other means.

extract=/home/grml         => extract only /home/grml from archive
extract=/etc               => extract only /etc from archive
extract=/home/grml/config  => extract only $HOME/config from archive
scripts

This parameter executes scripts. If an optional path is given, it is relative to DCSDIR. If the path points to a file, this single file is executed. If no path is given, it defaults to scripts/grml.sh. If the given name points to a directory, all scripts inside it are executed. Usage examples:

scripts               =>   run script DCSDIR/scripts/grml.sh
scripts=foobar.sh     =>   run script foobar.sh in DCSDIR
scripts=foobar        =>   run all scripts inside DCSDIR/foobar directory
config

This parameter restores a configuration using a GCA. If an optional path is given, it is relative to DCSDIR. If no path is given, it defaults to DCSDIR/config.tbz. Usage examples:

config                    =>   restore configuration using file DCSDIR/config.tbz
config=config_foobar.tbz  =>   restore configuration using file DCSDIR/config_foobar.tbz
debs

This parameter allows automatic installation of deb packages while booting. The path is relative to DCSDIR, not optional and is a shell wildcard. All Files matching the wildcard are installed in a single dpkg --install call. For backwards compatibility, if no slash is contained in the path, it is taken relative to DCSDIR/debs.

Usage examples:
debs=*.deb        =>   install all debian packages (suffix .deb) from directory DCSDIR/debs/
debs=foo/01*.deb  =>   install all debian packages (suffix .deb) starting with 01 in the filename from directory DCSDIR/foo
debnet

Search all local partitions and dm devices for file /etc/network/interfaces and copy the directory /etc/network to the grml system and restart networking.

noautoconfig

Deactivate automounting. By default the scripts try to mount a device with label GRMLCFG. If you specify the noautoconfig boot parameter this automounting will be deactivated.

noautoconfig            => disables auto mounting of label 'GRMLCFG'

Permanently adjust boot parameters

As you probably know you can adjust boot parameters on the bootprompt. You want to set some boot parameters permanently? That’s possible via adding a directory named bootparams to the Grml ISO which has to be located at the root-directory /bootparams/ (Note: the directory is known as /run/live/medium/bootparams/ on a_running_Grml system then!). Place a textfile inside the directory containing the boot parameters which should be appended to default ones (this corresponds to booting without any special parameters).

mkdir bootparams
echo lang=de > bootparams/my_bootparams

Then burn a multisession CD where directory bootparams is located in the root directory of the CD.

Note
Not all boot parameters can be used via /bootparams/. This is a limitation of the way the kernel and userspace retrieve boot parameters. Boot parameter regarding the kernel definitely do NOT work. Boot parameter related to grml-autoconfig (the main part of the boot process in Grml running in userspace, being all the stuff after startup of udev) are expected to work. Boot parameter related to initrd/initramfs (the part between Searching for GRML file and startup of udev) are NOT covered by /bootparams/ as well yet.
Tip
the application k3b (not available on the live-CD but available through the Debian repositories) provides an easy to use interface for doing the multisession task.

Usage scenarios

Personal configuration files

You are a fan of the editor vim? Great. You probably have your own /.vimrc and want to use it on the Grml system. You also don’t like the default zsh configuration and want to use your own /.zshrc? How to proceed? Copy your .vimrc and .zshrc to $HOME of user grml. Place additional files in $HOME/config. Now create a configuration for your files running:

save-config -home -configdir

Now you should have a file named config.tbz containing your configuration files. You can copy the archive to a webserver and restore it via downloading during reboot using the following commandline on bootprompt:

grml netconfig=server.tld/path/to/config.tbz

You don’t have network access but own a USB device? Copy the file to a USB device and boot with something like:

grml myconfig=/dev/sda1

Network configuration

You need a specific network setup and want to use your own /etc/network/interfaces by default? Generate the configuration archive running the following command as user root:

save-config -etc

Now you should have a file named config.tbz containing your configuration files. If you want to use it with a USB device copy the file to it and boot via using the following command on boot prompt:

grml myconfig=/dev/sda1

You do have an existing harddisk installation and want to use its configuration? Let’s say the Debian system is located in /dev/sda2. You want to use the directory /etc/network. This directory is activated by default in /etc/grml/partconf so we don’t have to do any further work. We just need to activate it via using the following commandline on bootprompt:

grml partconf=/dev/sda2

Automatic installation of debian packages

You have a specified debian package named foobar.deb and want to use it with (therefore: install it on) Grml by default? Notice: this feature is useful especially for grml-small (a ~100 MB ISO). If you want to use it with the large version of Grml you might have to overburn the ISO.

Let’s assume you have burned the Grml iso to a CD-RW using a commandline like:

cdrecord dev=/dev/hdc -v -multi -tao grml_0.5.iso

Now create a directory named debs and place foobar.deb in it:

mkdir debs/ && cp foobar.deb debs/

Notice: This directory will be located in /run/live/medium after burning the second session.

Now create the second session containing this directory:

mkisofs -M grml_0.5.iso -C `cdrecord -msinfo dev=/dev/hdc` -R -o 2nd_session.iso debs

Finally append the second session to the cd using:

cdrecord dev=/dev/hdc -v -multi -tao 2nd_session.iso
Tip
the application k3b (not available on the live CD but available through the Debian repositories) provides an easy to use interface for doing the multisession task.

Now boot from your new personalized Grml CD using the debs parameter:

grml debs

Run your own commands on startup

You know that booting with grml services=foobar executes /etc/init.d/foobar when booting Grml. But you want to setup a more complex network configuration, adjust some other stuff and so on, on your own? Just write a script named grml.sh which does the job and use one of the mentioned boot parameters. Let’s say you have placed grml.sh on your usb device (usb stick) then use the following commandline on bootprompt:

grml myconfig=/dev/sda1

Or even better: create a device with label GRMLCFG running (adjust /dev/sdX1 according to your needs):

mkfs.ext3 -L GRMLCFG /dev/sdX1  # warning: this destroys all data on /dev/sdX1
Tip
several filesystems provide the possibility to provide a label. For example FAT provides this through: mkfs.vfat -n GRMLCFG /dev/sda1 (attention: this will destroy data on /dev/sda1 of course!). Take a look at the documentation/manpage of the filesystem you want to use.

Now place your configuration archive (see save-config and the other usage scenarios) and the script grml.sh on the device. Now you can boot your system without specifying any boot parameters on bootprompt because devices labeled with GRMLCFG are mounted readonly and used by default. If you did not label your device you can use the device anyway using grml myconfig=/dev/sdX (adjust /dev/sdX) on the bootprompt.

Debug remote systems

You are responsible for a customer’s system in her data center. The system has failed and you need to debug from remote, and the remote hands available in the data center do not have enough knowledge to get Grml booted and configure the network without external help?

If the hard disk of the system is still available, you hopefully have saved a configuration file with IP address, netmask and default gateway somewhere on that hard disk. Grml can use the information found on a partition. Take a look at the partconf boot parameter. Usage example: grml partconf=/dev/sda2 copies files defined in /etc/grml/partconf from /dev/sda2 to the Grml system. As /etc/network is predefined in /etc/grml/partconf the configuration from /dev/sda2 will be taken.

Or you use a standard Grml medium and have grml read IP address, netmask and default gateway from another medium like a USB stick. Take a look at the script saveconfig and the boot parameter myconfig.

Or you put a grml.iso file on your hard disk (maybe in /boot/grml) or on an USB stick, use grub to boot from there and place debs, configuration scripts or Grml configuration archives alongside the .iso.

Bugs

If you find a bug please report it. See http://grml.org/bugs/ for details about how to report bugs.

See also

grml-autoconfig(8), restore-config(1), save-config(1)

Author

(c) 2005++, Michael Prokop <mika@grml.org>