X-Git-Url: https://git.grml.org/?p=grml-live.git;a=blobdiff_plain;f=docs%2Fgrml-live.txt;h=1e9f0ccad2631da41f6ca81f17d91ca4fe203057;hp=ee220597acc542e0d4009aab5a89e94ef12d024e;hb=7833e771fd46dad67cf85db849f798204ca6bb9d;hpb=7c4fb4fb01c48d14882156c01e77ab7bbbc97c09 diff --git a/docs/grml-live.txt b/docs/grml-live.txt index ee22059..caef1ee 100644 --- a/docs/grml-live.txt +++ b/docs/grml-live.txt @@ -4,26 +4,24 @@ grml-live(8) Name ---- -grml-live - build framework based on FAI for generating a grml and Debian based +grml-live - build framework based on FAI for generating a Grml and Debian based Linux Live system (CD/ISO) Synopsis -------- -grml-live [-c ] [-i ] [-r ] -[-s ] [-t ] [-v ] [-Fvh] - -******************************************************************************* -Important! This document is growing as requested. If you have questions which -aren't answered by this document yet please let me know: ! -******************************************************************************* +grml-live [-a ] [-c ] [-C ] [ +-e ] [-g ] [-i ] [ +-o ] [-r ] [-s ] [ +-t ] [-v ] [-U ] [ +-w ] [-AbBFnNqQuVz] Description ----------- -grml-live provides the build system for creating a grml and Debian based Linux +grml-live provides the build system for creating a Grml and Debian based Linux Live-CD. The build system is based on -link:http://www.informatik.uni-koeln.de/fai/[FAI] (Fully Automatic +link:http://fai-project.org/[FAI] (Fully Automatic Installation). grml-live uses the "fai dirinstall" feature to generate a chroot system based on the class concept of FAI (see later sections for further details) and provides the framework to be able to generate a full-featured ISO. @@ -35,8 +33,9 @@ to include on your very own Linux Live-CD without having to deal with all the details of a build process. CAUTION: grml-live does **not** use /etc/fai for configuration but instead -provides and uses /etc/grml/fai. This ensures that it does not clash with -default FAI configuration and packages, so you can use grml-live and FAI +provides and uses ${GRML_FAI_CONFIG} which is pointing to /etc/grml/fai by default +(unless overridden using the ''-D'' option). This ensures that it does not clash +with default FAI configuration and packages, so you can use grml-live and FAI completely independent at the same time! [NOTE] @@ -44,93 +43,239 @@ completely independent at the same time! Please notice that you should have a fast network connection as all the Debian packages will be downloaded and installed via network. If you want to use a local mirror (strongly recommended if you plan to use grml-live more than once) -checkout mkdebmirror (see /usr/share/doc/grml-live/examples/mkdebmirror), -debmirror(1), reprepro(1) (see /usr/share/doc/grml-live/examples/reprepro/ for a -sample configuration) and approx(8). To avoid downloading the base system again -and again check out FAI's NFSROOT (see FAQ of this document for details). +checkout debmirror(1), reprepro(1) (see /usr/share/doc/grml-live/examples/reprepro/ for a +sample configuration), apt-cacher(1) and approx(8). To avoid downloading the +base system again and again check out <>. Options ------- + -A:: + +Clean up all output directories before running the build process. After finishing, +clean up the Chroot target and Build target directories. + + -a **ARCHITECTURE**:: + +Use the specified architecture instead of the currently running one. This +allows building a 32bit system on a 64bit host (though you can't build a 64bit +system on a 32bit system/kernel of course). Please notice that real +crosscompiling (like building a ppc system on x86) isn't possible due to the +nature and the need of working in a chroot. Currently supported values: i386 +and amd64. + + -b:: + +Build the ISO without updating the chroot via FAI. This option is useful for +example when working on stable releases: if you have a working base +system/chroot and do not want to execute any further updates (via "-u" option) +but intend to only build the ISO. + + -B:: + +Build the ISO without touching the chroot at all. This option is useful if +you modified anything that FAI or grml-live might adjust via Grml's FAI +scripts. It's like the '-b' option but even more advanced. Use only if you +really know that you do not want to update the chroot. + -c **CLASSES**:: Specify the CLASSES to be used for building the ISO via FAI. By default only -the classes GRMLBASE and I386 are assumed, resulting in a small base system -(being about ~150MB total ISO size) for x86 (32bit). +the classes GRMLBASE, GRML_FULL and I386/AMD64 (depending on system +architecture) are assumed. Additionally you can specify a class providing a +(grml-)kernel (see <> for +details about available classes). So instead of GRML_FULL you can also use e.g. +GRML_SMALL. + +[IMPORTANT] +All class names should be written in uppercase letters. Do not use a dash, use +an underscore. So do not use "amd64" but "AMD64", do not use "FOO BAR" but +"FOO_BAR". + + + -C **CONFIGURATION_FILE**:: + +The specified file is used as configuration file for grml-live. By default +/etc/grml/grml-live.conf is used as default configuration. If a file named +/etc/grml/grml-live.local exists it is used as well (sourced after reading +/etc/grml/grml-live.conf meant as main file for local configuration). As a last +option the specified configuration file is sourced so it is possible to override +settings of /etc/grml/grml-live.conf as well as of /etc/grml/grml-live.local. +Please notice that all configuration files have to be adjusted during execution +of grml-live, so please make sure you use /etc/grml/grml-live.conf as a base for +your own configuration file (usually /etc/grml/grml-live.local). Please also +notice that the configuration file specified via this option is **not** (yet) +supported inside the scripts/hooks/classes at ${GRML_FAI_CONFIG}/config. Instead use +/etc/grml/grml-live.local for configuration stuff used inside +${GRML_FAI_CONFIG}/config. + + -d **DATE**:: + +Use specified date as build date information on the ISO instead of the default. +The default is the date when grml-live is being executed (retrieved via +executing 'date +%Y-%m-%d'). The information is stored inside the file +/GRML/grml-version on the ISO, /etc/grml_version in the squashfs file and in all +the bootsplash related files. This option is useful if you want to provide an +ISO with release information for a specific date but have to build it in +advance. Usage example: '-d 2009-10-30' + + -D **CONFIGURATION_DIRECTORY**:: + +The specified directory is used as configuration directory for grml-live and its +FAI. By default /etc/grml/fai is used as default configuration directory. If +you want to have different configuration scripts, package definitions, etc. with +without messing with the global configuration under /etc/grml/fai provided by +grml-live this option provides you the option to use your own configuration +directory. This directory is what's being referred to as ${GRML_FAI_CONFIG} +throughout this documentation. + + -e **EXTRACT_ISO_NAME**:: + +The squashfs inside the specified ISO will be extracted and used as the chroot. +This option is useful for remastering, in combination with -A and -b or -u. -F:: Force execution and do not prompt for acknowledgment of configuration. + -g **GRML_NAME**:: + +Set the grml flavour name. Common usage examples: grml, grml-small, grml64. +Please do NOT use blanks and any special characters like '/', ';' inside +GRML_NAME, otherwise you might notice problems while booting. + -h:: Display short usage information and exit. -i **ISO_NAME**:: -Specify name of ISO which will be available inside $TARGET_DIRECTORY/grml_isos +Specify name of ISO which will be available inside $OUTPUT_DIRECTORY/grml_isos by default. - -r **RELEASENAME**:: + -I **CHROOT_INSTALL**:: -Specify name of the release. (Notice: the output of the release name is limited -to 30 characters.) +Specify name of source directory which provides files that should become part of +the chroot/ISO. Not enabled by default. Note: the files are installed under '/' +in the chroot so you have to create the rootfs structure on your own. - -s **SUITE**:: + -n:: -Specify the Debian suite you want to use for your live-system. Defaults to -"etch" (being current Debian/stable). Supported values are: etch, lenny, sid, -stable, testing, unstable. +Skip creation of the ISO file. This option is useful if you want to build/update +the chroot and/or recreate the squashfs file without building an ISO file. - -t **TARGET_DIRECTORY**:: + -N:: + +Bootstrap the chroot without building bootloader, squashfs, or finalizing the +ISO. Use this option if installation of some packages fails, you want to run +custom commands or similar. +The main use of this option is to save time by skipping stages which aren't +necessary for bootstrapping the chroot and which would get executed more than +once when iterating through the initial bootstrapping. +Alternatively, use this option as a test run of grml-live. Once you are +satisfied with the state of your grml_chroot, use grml-live **-u** to build the +remaining stages and finalize the ISO. + + -o **OUTPUT_DIRECTORY**:: Main output directory of the build process of FAI. Some directories are created inside this target directory, being: grml_cd (where the files for creating the ISO are located, including the compressed squashfs file), grml_chroot (the chroot system) and grml_isos (where the resulting ISO is stored). + -q:: + +Build the ISO without (re-)creating the squashfs compressed file using mksquashfs. +This option is useful if you just want to update parts outside the chroot in the ISO. +Consider combining this option with the build-only option '-b'. + + -Q:: + +Build the ISO without generating a netboot package. + + -r **RELEASENAME**:: + +Specify name of the release. + + -s **SUITE**:: + +Specify the Debian suite you want to use for your live-system. If unset defaults +to "testing". Supported values are: stable, testing, unstable (or their +corresponding release names like "stretch"). Please be aware that recent Debian +suites might require a recent base.tgz +(${GRML_FAI_CONFIG}/config/basefiles/$CLASSNAME.tar.gz) or a recent version of +debootstrap. + + -t **TEMPLATE_DIRECTORY**:: + +Specify place of the templates used for building the ISO. By default +(and if not manually specified) this is /usr/share/grml-live/templates/. + + -u:: + +Update existing chroot instead of rebuilding it from scratch. This option is +based on the softupdate feature of FAI. + + -U **USERNAME**:: + +Sets ownership of all build output files to specified username before exiting. + -v **VERSION_NUMBER**:: -Specify version number of the release. (Notice: the output of the version number -is limited to 5 characters. So "1.0-1" is fine, but "1.0.0.1" will be stripped -to "1.0.0" then.) +Specify version number of the release. -V:: Increase verbosity in the build process. + -w **DATE**:: + +The wayback machine. Build the system using Debian archives from the specified +date. Valid date formats are yyyymmddThhmmssZ or simply yyyymmdd. To learn +which snapshots exist, i.e. which date strings are valid, simply browse the +lists on http://snapshot.debian.org/. If there is no import at the exact time +you specified you will get the latest available timestamp which is before the +time you specified. +This option is useful especially for release and debugging builds - for example +if you know that the Debian archive was in a good state on a specific date but +you want to build it on another day in the future, where the archive might not +be as needed anymore. Please be aware that this is restricted to the plain +Debian repositories only, as referred to in /etc/apt/sources.list.d/debian.list +(so neither the Grml repositories nor any further custom ones are affected by +the wayback machine). + + -z:: + +Use ZLIB instead of LZMA/XZ compression in mksquashfs part of the build process. + +[[usage-examples]] Usage examples -------------- -To get a small, Debian-stable and grml-based Live-CD using /grml/grml-live +To get a Debian-stable and Grml-based Live-CD using ./grml as build and output directory just run: # grml-live -To get a small Debian-unstable and grml-small based Live-CD using -/home/mika/grml-live as build and output directory just use: +To get a 64bit Debian-testing and grml-small based Live-CD using /srv/grml-live +as build and output directory use the following command line on your amd64 +system: - # grml-live -c GRMLBASE,GRML_SMALL,I386 -t /home/mika/grml-live - -To get a small, Debian-unstable and grml-based Live-CD using /tmp as build and -output directory and use grml_0.0-3.iso as ISO name (placed inside -/tmp/grml_isos) just invoke: - - # grml-live -t /tmp -c GRMLBASE,I386 -s sid -i grml_0.0-3.iso + # grml-live -s testing -c GRMLBASE,GRML_SMALL,AMD64 -o /srv/grml-live [NOTE] -If you have about 700MB of free space inside /dev/shm (being a tmpfs, usually -you should have >=1GB of RAM) just run "mount -o remount,suid,dev,rw /dev/shm" -and use /dev/shm as build and output directory - resulting in very fast build -process. But please be aware of the fact that rebooting your system will result -in an empty /dev/shm, so please another directory for $CHROOT_TARGET, -$BUILD_TARGET and $ISO_TARGET if you plan to create more persistent output. :) +If you have enough RAM, just run "mount -t tmpfs none /media/ramdisk" to get a +tmpfs ("RAMDISK"), and use /media/ramdisk as build and output directory - this +results in a very fast build process. Note that these files will be gone when +rebooting. +[[main-features]] Main features of grml-live -------------------------- -* create a grml-/Debian-based Linux Live-CD with one single command +* create a Grml-/Debian-based Linux Live-CD with one single command * class based concept, providing a maximum of flexibility @@ -141,8 +286,7 @@ Debian repositories * native support of FAI features -* multi-arch support (work in progress) - +[[class-concept]] The class concept ----------------- @@ -152,15 +296,16 @@ losing the simplicity in the build process. The main and base class provided by grml-live is named GRMLBASE. It's strongly recommended to **always** use the class GRMLBASE when building an ISO using -grml-live, as well as the architecture dependend class which provides the kernel -(being 'I386' for x86_32 currently only). The following files and directories -are relevant for class GRMLBASE by default: +grml-live, as well as the architecture dependent class which provides the kernel +(being 'I386' for x86_32 and 'AMD64' for x86_64) and a GRML_* class (like +GRML_SMALL or GRML_FULL). The following files and directories are +relevant for class GRMLBASE by default: - /etc/grml/fai/config/scripts/GRMLBASE/ - /etc/grml/fai/config/debconf/GRMLBASE - /etc/grml/fai/config/class/GRMLBASE.var - /etc/grml/fai/config/hooks/instsoft.GRMLBASE - /etc/grml/fai/config/package_config/GRMLBASE + ${GRML_FAI_CONFIG}/config/scripts/GRMLBASE/ + ${GRML_FAI_CONFIG}/config/debconf/GRMLBASE + ${GRML_FAI_CONFIG}/config/class/GRMLBASE.var + ${GRML_FAI_CONFIG}/config/hooks/instsoft.GRMLBASE + ${GRML_FAI_CONFIG}/config/package_config/GRMLBASE Take a look at the next section for information about the concept of those files/directories. @@ -168,20 +313,86 @@ files/directories. If you want to use your own configuration, extend an existing configuration and/or add additional packages to your ISO just invent a new class (or extend an existing one). For example if you want to use your own class named "FOOBAR" just -extend CLASSES="GRMLBASE,I386" inside /etc/grml/grml-live.conf to -CLASSES="GRMLBASE,I386,FOOBAR" or invoke grml-live using the classes option: -"grml-live -c GRMLBASE,I386,FOOBAR ...". +set CLASSES="GRMLBASE,GRML_SMALL,AMD64,FOOBAR" inside /etc/grml/grml-live.local +or invoke grml-live using the classes option: "grml-live -c +GRMLBASE,GRML_SMALL,AMD64,FOOBAR ...". More details regarding the class concept can be found in the documentation of FAI itself (being available at /usr/share/doc/fai-doc/). +[[X7]] +[[classes]] +Available classes +----------------- + +The package selection part of the classes can be found in +${GRML_FAI_CONFIG}/config/package_config whereas some further classes are defined for +example in ${GRML_FAI_CONFIG}/config/scripts/ so specific feature sets can be +selected. The following classes are predefined: + +* DEBORPHAN: get rid of all packages listed in output of deborphan + +* FILE_RC: instead of using systemd as init system use file-rc instead. file-rc +was the init system used by Grml until and including stable release 2014.11, +starting with beginning of 2016 Grml switched to systemd instead. If you want to +build a live system in the old style using file-rc instead of systemd then enable +this class. Please notice that the Grml team no longer provides support for it +though. + +* FRESHCLAM: execute freshclam (if it's present) to update clamav definitions +(increases resulting ISO size ~70MB). By default it's skipped to avoid bigger +ISO size. + +* GRMLBASE: the main class responsible for getting a minimal subset of what's +defining a Grml system. Important parts of the buildprocess are specified in +this class as well, so unless you have a really good reason you should always +use this class. Please be aware that using *just* the GRMLBASE class won't be +enough, because the kernel packages (e.g. linux-image-pass:[*]) are chosen in +further GRML_pass:[*] classes (to provide maximum flexibility with kernel +selection). If you don't want to use the existing GRML_FULL or GRML_SMALL +classes, define your own CLASS file choosing the kernel package you want to use +(and don't forget to include your CLASS in the arguments of grml-live's `-c...` +command line option). + +* GRML_FULL: full featured Grml, also known as the "normal", full grml as +introduced in December 2011 (~750 ISO size). + +* GRML_SMALL: minimum sized Grml version, known as grml-small (~360MB ISO +size). + +* LATEX: LaTeX(-related) packages like auctex, texlive,... +(which used to be shipped by grml before the LaTeX removal) + +* LATEX_CLEANUP: get rid of several very large LaTeX directories +(like some /usr/share/doc/texlive-*, /usr/share/doc/texmf,...) + +* LOCALES: use full featured locales setup (see /etc/locale.gen.grml). This +avoids to get rid of /usr/share/locale - which happens by default otherwise - as +well. + +* NO_ONLINE: do not run scripts during the chroot build process which require a +network connection + +* RELEASE: run some specific scripts and commands to provide the workflow for an +official grml release + +* REMOVE_DOCS: get rid of documentation directories (like /usr/share/doc, +/usr/share/man/, /usr/share/info,...) + +* SOURCES: retrieve Debian source packages after installation. Files will be +placed in the output directory under grml_sources. + +* XORG: providing important packages for use with a base grml-featured X.org +setup + +[[files]] Files ----- Notice that grml-live ships FAI configuration files that do not use the same namespace as the FAI packages itself. This ensures that grml-live does not clash with your usual FAI configuration, so instead of /etc/fai/fai.conf (package -fai-client) grml uses /etc/grml/fai/fai.conf instead. For more details see +fai-client) grml uses ${GRML_FAI_CONFIG}/fai.conf instead. For more details see below. To get an idea how another configuration or example files could look like check out /usr/share/doc/fai-doc/examples/simple/ (provided by Debian package fai-doc). Furthermore /usr/share/doc/fai-doc/fai-guide.html/ch-config.html @@ -193,152 +404,248 @@ Script for the main build process. Requires root permissions for execution. /etc/grml/grml-live.conf -Main configuration file for grml-live. All the important steps can be configured -at this stage. - - /etc/grml/fai/fai.conf - -Main configuration file for FAI which specifies where all the configuration -files and scripts for FAI/grml-live can be found. By default it is set to -FAI_CONFIGDIR=/etc/grml/fai/config, a directory shipped by grml-live -out-of-the-box so you shouldn't have to configure anything in this file. - - /etc/grml/fai/make-fai-nfsroot.conf - -This file is used by make-fai-nfsroot(8) only. Usually you don't have to change -anything inside this file. If you want to modify NFSROOT though you can adjust -it there. +Main configuration file for grml-live which should be considered as a reference +configuration file only. Please use /etc/grml/grml-live.local for local +configuration instead. - /etc/grml/fai/NFSROOT + /etc/grml/grml-live.local -This file specifies the package list for creating the NFSROOT. +All the local configuration should go to this file. This file overrides any +defaults of grml-live. Configurations via /etc/grml/grml-live.local are preferred +over the ones from /etc/grml/grml-live.conf. If you want to override settings +from /etc/grml/grml-live.local as well you have to specify them on the grml-live +commandline. - /etc/grml/fai/apt/sources.list + ${GRML_FAI_CONFIG}/fai.conf -This file specifies which mirrors should be used for retreiving the Debian -packages used for creating the main chroot (including all the software you would -like to see included). If you want to use a local mirror you either have to -adjust this file or use the GRML_LIVE_SOURCES variable inside -/etc/grml/grml-live.conf which modifies /etc/grml/fai/apt/sources.list -on-the-fly then. +Main configuration file for FAI which specifies where all the configuration +files and scripts for FAI/grml-live can be found. By default the configuration +variables are FAI_CONFIG_SRC=file:///etc/grml/fai/config and +GRML_FAI_CONFIG=/etc/grml/fai/config - both pointing to a directory shipped by +grml-live out-of-the-box so you shouldn't have to configure anything in this +file. - /etc/grml/fai/config/ + ${GRML_FAI_CONFIG}/config/ The main directory for configuration of FAI/grml-live. More details below. - /etc/grml/fai/config/class/ + ${GRML_FAI_CONFIG}/config/class/ This directory contains files which specify main configuration variables for the FAI classes. - /etc/grml/fai/config/debconf/ + ${GRML_FAI_CONFIG}/config/debconf/ This directory provides the files for preseeding/configuration of debconf through files. - /etc/grml/fai/config/hooks/ + ${GRML_FAI_CONFIG}/config/hooks/ This directory provides files for customising the build process through hooks. Hooks are user defined programs or scripts, which are called during the installation process. - /etc/grml/fai/config/package_config/ + ${GRML_FAI_CONFIG}/config/package_config/ Directory with lists of software packages to be installed or removed. The different classes describe what should find its way to your ISO. When running -"grml-live -c GRMLBASE,I386 ..." only the files from the directories GRMLBASE -and I386 will be taken, if you use 'grml-live -c GRMLBASE,I386,FOOBAR ...' then -the files of GRMLBASE, I386 **plus** the files from FOOBAR will be taken. So -just create a new class to adjust the package selection according to your needs. -Please notice that the directory GRMLBASE contains a package list defining a -minimum but still reasonable package configuration. +"grml-live -c GRMLBASE,GRML_SMALL,AMD64 ..." only the configuration of GRMLBASE, +GRML_SMALL and AMD64 will be taken. If you use 'grml-live -c +GRMLBASE,GRML_SMALL,AMD64,FOOBAR ...' then the files of GRMLBASE, GRML_SMALL, +AMD64 **plus** the files from FOOBAR will be taken. So just create a new class to +adjust the package selection according to your needs. Please notice that the +directory GRMLBASE contains a package list defining a minimum but still +reasonable package configuration. - /etc/grml/fai/config/scripts/ + ${GRML_FAI_CONFIG}/config/scripts/ Scripts for customising the ISO within the build process. - /etc/grml/fai/files/ - -This directory provides files used inside the scripts of -/etc/grml/fai/config/scripts/*. For a full documentation what happens with the -files please refer to the source of the scripts. - - /etc/grml/fai/live-initramfs/ + ${GRML_FAI_CONFIG}/live-initramfs/ This directory provides the files used for building the initramfs/initrd via live-initramfs(8). +[[log-files]] +Available log files +------------------- + +Starting with grml-live version 0.17.0 you should find log files in a directory +named 'grml_logs' in the output directory (next to grml_isos, grml_chroot,...). + +grml-live versions before 0.17.0 used to log into /var/log/grml-live.log +and /var/log/fai/grml. + +[[requirements]] Requirements for the build system --------------------------------- -* any Debian based system should be sufficient (if not it's a bug, so please -send us a bug report then) [a usual link:http://grml.org/grml2hd/[grml2hd] -harddisk installation ships all you need] +* any Debian based system should be sufficient (if it doesn't work it's a bug, +please send us a bug report then). Check out <> for details how to set up grml-live +on a plain, original Debian system. + +* enough free disk space; at least ~2GB are required for a minimal grml-live +run (\~1GB for the chroot [$CHROOT_OUTPUT], \~400MB for the build target +[$BUILD_OUTPUT], \~35MB for the netboot files and \~350MB for the resulting ISO +[$ISO_OUTPUT] plus some temporary files), if you plan to use GRML_FULL you +should have at least 4GB of total free disk space + +* fast network access for retrieving the Debian packages used for creating the +chroot (check out "local mirror" to workaround this problem as far as possible) -* enough free disk space; at least 800MB are required for a minimal grml-live -run (\~400MB for the chroot [$CHROOT_TARGET], \~150MB for the build target -[$BUILD_TARGET] and \~150MB for the resulting ISO [$ISO_TARGET] plus some -temporary files), if you plan to use GRML_FULL you should have at least 4GB of -total free disk space +For further information see next section. -* fast network access for retreiving the Debian packages used for creating the -chroot (check out "local mirror" and "NFSROOT" to workaround this problem as far -as possiblbe) +[[X8]] +[[current_state]] +Current state of grml-live with squashfs-tools and kernel +--------------------------------------------------------- +Use squashfs-tools >=4.2-1 to build Grml (based) ISOs featuring kernel version +2.6.38-grml[64] or newer. + +[[faq]] FAQ --- -Help, I'm using Debian etch and I don't have FAI version >3.2 -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[[deploy-on-debian]] +How do I deploy grml-live on a plain Debian installation? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The easiest way to get a running grml-live setup is to just use Grml. +Of course using grml-live on a plain, original Debian installation is supported +as well. So there we go. + +What we have: plain, original Debian stretch (9.x). + +What we want: build a Grml ISO based on Debian/stretch for the amd64 architecture +using grml-live. + +Instructions +^^^^^^^^^^^^ + + # adjust sources.list: + cat >> /etc/apt/sources.list << EOF + + # grml stable repository: + deb http://deb.grml.org/ grml-stable main + # deb-src http://deb.grml.org/ grml-stable main + + # grml testing/development repository: + deb http://deb.grml.org/ grml-testing main + # deb-src http://deb.grml.org/ grml-testing main + EOF + + # get keyring for apt: + apt-get update + apt-get --allow-unauthenticated install grml-debian-keyring + + # optionally(!) install basefile so we don't have to build basic + # chroot from scratch, grab from http://daily.grml.org/ + # mkdir -p /etc/grml/fai/config/basefiles/ + # mv I386.tar.gz /etc/grml/fai/config/basefiles/ + # mv AMD64.tar.gz /etc/grml/fai/config/basefiles/ + + # install relevant tools + apt-get --no-install-recommends install grml-live + + # adjust grml-live configuration for our needs: + cat > /etc/grml/grml-live.local << EOF + ## want a faster build process and don't need smaller ISOs? + ## if so use zlib compression + # SQUASHFS_OPTIONS="-comp gzip -b 256k" + ## want to use a specific squashfs binary? + # SQUASHFS_BINARY='/usr/bin/mksquashfs' + ## install local files into the chroot + # CHROOT_INSTALL="/etc/grml/fai/chroot_install" + ## adjust if necessary (defaults to ./grml/): + ## OUTPUT="/srv/grml-live" + FAI_DEBOOTSTRAP="stretch http://ftp.debian.org/debian/" + # ARCH="amd64" + CLASSES="GRMLBASE,GRML_FULL,AMD64" + EOF + + # just optional(!) - upgrade FAI to latest available version: + cat >> /etc/apt/sources.list.d/fai.list << EOF + deb http://jenkins.grml.org/debian fai main + deb-src http://jenkins.grml.org/debian fai main + EOF + + # get gpg key of FAI repos and install current FAI version: + wget -O - http://jenkins.grml.org/debian/C525F56752D4A654.asc | sudo apt-key add - + apt-get update + apt-get install fai-client fai-server fai-doc - wget http://www.informatik.uni-koeln.de/fai/download/etch/fai-client_3.2.1_all.deb \ - http://www.informatik.uni-koeln.de/fai/download/etch/fai-server_3.2.1_all.deb - dpkg -i fai-client_3.2.1_all.deb fai-server_3.2.1_all.deb +That's it. Now invoking 'grml-live -V' should build the ISO. If everything +worked as expected the last line of the shell output should look like: -or check out the link:http://www.informatik.uni-koeln.de/fai/[FAI-homepage] for -further details. + [*] Successfully finished execution of grml-live [running 687 seconds] +and the ISO can be found inside /grml-live/grml-live/grml_isos/ then. + +[[grml_fai_config_variable]] +What is $GRML_FAI_CONFIG? +~~~~~~~~~~~~~~~~~~~~~~~~~ + +The variable '$GRML_FAI_CONFIG' is pointing to the directory /etc/grml/fai by +default. To provide you a maximum of flexibility you can set up your own +configuration directory (e.g. based on /etc/grml/fai) and use this directory +running grml-live with the '-D ' option. Now '$GRML_FAI_CONFIG' +points to the specified directory instead of using /etc/grml/fai and all the +configuration files, scripts and hooks will be taken from your +'$GRML_FAI_CONFIG' directory. + +[[how-to-debug]] I've problems with the build process. How to start debugging? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Check out the logs inside /var/log/fai/dirinstall/... If you don't have the time -to debug the problem in further detail or don't know how to proceed just send a -copy of your config, logs and the commandline with a short problem description -to : +Check out the logs inside the directory 'grml_logs' next to your grml_chroot, +grml_isos,... directories. + +If you need help with grml-live or would like to see new features as part of +grml-live you can get commercial support via +link:http://grml-solutions.com/[Grml Solutions]. - # history | grep grml-live > /etc/grml/grml_live.cmdline - # tar zcf grml_live_problem.tar.gz /etc/grml/grml-live.conf \ - /var/log/fai/dirinstall /etc/grml/fai +[[install-local-files]] +How do I install further files into the chroot/ISO? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Just point the configuration variable CHROOT_INSTALL to the directory which +provides the files you would like to install. Note that the files are installed +under '/' in the chroot - so you have to create the rootfs structure on your +own. Usage example: + + echo "CHROOT_INSTALL=\$GRML_FAI_CONFIG/chroot_install" >> /etc/grml/grml-live.local + mkdir -p /etc/grml/fai/chroot_install/usr/src/ + wget example.org/foo.tar.gz + mv foo.tar.gz /etc/grml/fai/chroot_install/usr/src/ + grml-live ... + +[[local-debian-mirror]] Can I use my own (local) Debian mirror? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Sure. Just adjust the variables GRML_LIVE_SOURCES and FAI_DEBOOTSTRAP (if not -already using NFSROOT's base.tgz) inside /etc/grml/grml-live.conf according to -your needs. Please don't forget that you should use the grml servers as well -(see default configuration) so all the grml packages can be downloaded as well. +Yes. Set up an according sources.list configuration as class file in +${GRML_FAI_CONFIG}/config/files/etc/apt/sources.list.d/ and adjust the variable +FAI_DEBOOTSTRAP (if not already using a base.tgz) inside +/etc/grml/grml-live.conf[.local]. If you're setting up your own class file don't +forget to include the class name in the class list (grml-live -c ...). -If you want to use a local (for example NFS mount) mirror additionally, just -adjust MIRROR_DIRECTORY and MIRROR_SOURCES insede /etc/grml/grml-live.conf as -well. +If you want to use a local (for example NFS mount) mirror additionally then +adjust MIRROR_DIRECTORY in /etc/grml/grml-live.conf[.local] as well. -Unless you specify GRML_LIVE_SOURCES and/or FAI_DEBOOTSTRAP the default from -/etc/grml/fai/apt/sources.list and /etc/grml/fai/make-fai-nfsroot.conf will be -taken. If you customise the variables in /etc/grml/grml-live.conf then the two -files will be adjusted during runtime automatically. +If you want to use a HTTP Proxy (like apt-cacher-ng), set APT_PROXY. Example: -If MIRROR_DIRECTORY and MIRROR_SOURCES are specified the local mirror will be -taken as first entry in the generated sources.list so it's prefered over -non-local mirrors. Using a fallback mirror (via providing several mirrors in -GRML_LIVE_SOURCES as used by default) is a recommended setting. + APT_PROXY="http://localhost:3142/" +[[add-additional-debian-packages]] How do I add additional Debian package(s) to my CD/ISO? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Just create a new class (using the package_config directory): # cat > /etc/grml/fai/config/package_config/MIKA << EOF - PACKAGES aptitude + PACKAGES install vim another_name_of_a_debian_package @@ -347,8 +654,9 @@ Just create a new class (using the package_config directory): and specify it when invoking grml-live then: - # grml-live -c GRMLBASE,I386,MIKA + # grml-live -c GRMLBASE,GRML_SMALL,AMD64,MIKA +[[reset-grml-live-configuration]] I fscked up my grml-live configuration. How do I reset it to the defaults? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -358,128 +666,183 @@ what you are searching for just run: rm -rf /etc/grml/fai /etc/grml/grml-live.conf dpkg -i --force-confnew --force-confmiss /path/to/grml-live_..._all.deb -[NOTE] +[[apt-cacher]] +Set up apt-cacher-ng for use with grml-live +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -If you don't control your /etc using a version control system (VCS) yet it's a -good chance to start using it now. Check out -link:http://michael-prokop.at/blog/2007/03/14/maintain-etc-with-mercurial-on-debian/[http://michael-prokop.at/blog/2007/03/14/maintain-etc-with-mercurial-on-debian/] -for more details how to maintain /etc using the mercurial VCS. +Make sure /etc/grml/grml-live.local provides according APT_PROXY and +FAI_DEBOOTSTRAP: -How do I create a base.tgz for use as NFSROOT? -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + # cat /etc/grml/grml-live.local + [...] + APT_PROXY="http://localhost:3142/" + [...] + FAI_DEBOOTSTRAP="stretch http://localhost:3142/ftp.debian.org/debian stretch main contrib non-free" -First of all build the chroot system: +Make sure apt-cacher-ng is running ('/etc/init.d/apt-cacher-ng restart'). +That's it. All downloaded files will be cached in /var/cache/apt-cacher-ng then. - mkdir /tmp/nfsroot && cd /tmp/nfsroot - debootstrap etch /tmp/nfsroot/ http://ftp.de.debian.org/debian - tar zcf base.tgz ./ +[[revert_manifold]] +How do I revert the manifold feature from an ISO? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Then check out where your NFSROOT is located: +The so-called manifold feature Grml ISOs can, but by default do not, use allows +one to use the same ISO for CD boot and USB boot. If you notice any problems +when booting manifold-crafted media, just revert the manifold feature running: - # grep '^NFSROOT' /etc/grml/fai/make-fai-nfsroot.conf - NFSROOT=/grml/fai/nfsroot + % dd if=/dev/zero of=grml.iso bs=512 count=1 conv=notrunc -So as /grml/fai/nfsroot is your NFSROOT place the file under -/grml/fai/nfsroot/live/filesystem.dir/var/tmp/: +To switch from manifold to isohybrid mode (an alternative approach provided by +syslinux, used by default for official Grml images) then just execute: - mv base.tgz /grml/fai/nfsroot/live/filesystem.dir/var/tmp/base.tgz + % isohybrid grml.iso -Now running "grml-live ..." will use this file as main system instead of -executing debootstrap. Check out the output for the following lines: +[[create-a-base-tgz]] +How do I create a base tar.gz (I386.tar.gz or AMD64.tar.gz) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[[basetgz]] - [...] - Calling task_extrbase - Unpacking Debian base archive - Extracting /grml/fai/nfsroot/live/filesystem.dir/var/tmp/base.tgz - Calling task_mirror - [...] +First of all create the chroot using debootstrap (requires root): -I've a question which isn't answered by this document -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + BASECHROOT='/tmp/basefile' # path where the chroot gets generated + SUITE='stretch' # using the current stable release should always work + debootstrap --exclude=info,tasksel,tasksel-data "$SUITE" "$BASECHROOT" http://ftp.debian.org/debian + tar -C "$BASECHROOT" --exclude='var/cache/apt/archives/*.deb' -zcf "${SUITE}".tar.gz ./ -Don't hesitate to ask on IRC (channel #grml on irc.freenode.org) or just drop me -a mail: +[TIP] +By default debootstrap builds a chroot matching the architecture of the running +host system. If you're using an amd64 system and want to build an i386 base.tgz +then invoke debootstrap using the '--arch i386' option. Disclaimer: building an +AMD64 base.tgz won't work if you are using a 32bit kernel system of course. -Known TODOs ------------ +Finally place the generated tarball in /etc/grml/fai/config/basefiles/ (note +that it needs to be uppercase letters matching the class names, so: e.g. +AMD64.tar.gz for amd64 and I386.tar.gz for i386). -* the template system isn't flexible enough yet: provide support for different -flavours, allow longer version number +Then executing grml-live should use this file as base system instead of executing +debootstrap. Check out the output for something like: -* support something like a directory /etc/grml/fai/packages to install -additional Debian packages without the need for a Debian repository + [...] + ftar: extracting //etc/grml/fai/config/basefiles///AMD64.tar.gz to /srv/grml64_testing/grml_chroot// + [...] + +[[localrepos]] +How to use your own local repository +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -* provide hooks/options for updating an existing chroot/squashfs-file/ISO -(work in progress, see patches directory inside source) +Let's assume you have Debian package(s) in your filesystem inside +`/home/foobar/local-packages` and want to provide them to your grml-live build. +This can be achieved either 1) through a bind mount (using the MIRROR_DIRECTORY +configuration) or 2) by serving a repository via HTTP. -* document the available classes in more detail (GRMLBASE, LATEX_CLEANUP, -NO_ONLINE, REMOVE_DOCS, GRML_SMALL,...) +Serving via bind mount / MIRROR_DIRECTORY +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -* add a check to make sure $TARGET is mounted rw,suid,dev? +Make sure to create an according sources.list configuration file, e.g. using +your own class name `CUSTOM`: -* add support for amd64 [gebi?] + ppc [formorer?] (and identify all packages -that are arch specific so we have a clean package list in all classes) + # cat > /etc/grml/fai/config/files/etc/apt/sources.list.d/local-packages.list/CUSTOM << EOF + deb file:///home/foobar/local-packages ./ + EOF + +Add the according MIRROR_DIRECTORY configuration to your grml-live configuration: -* support different grml-flavours through classes right out-of-the-box (being: -grml and grml-small (done), each for x86, amd64 and ppc) + # echo "MIRROR_DIRECTORY='/home/foobar/packages'" >> /etc/grml/grml-live.local -* support signed apt repositories (currently it's deactivated via FAI's -FAI_ALLOW_UNSIGNED=1 for some packages in the toolchain) +Make sure the local directory looks like a mirror: -* support "final builds" (including stuff like generating md5sums, gpg,... - -create a grml_release-directory including all the details about the build -process like dpkg selection, logs,...) + % cd /home/foobar/packages + % dpkg-scanpackages . /dev/null | gzip > Packages.gz -* the grml-live class(es) should send output to stdout and stderr as used inside -FAI as well (so it's not as verbose unless you specify it, make it configurable -though); check for errors inside the logs then as well +Finally invoke grml-live with your class name (`CUSTOM` in this example) added +to the list of classes on the command line (see grml-live option `-c`). -* provide possibility for cleanup of all created build directories and -a smart summary of the buildprocess (including "took ... minutes/seconds to -build...") +Serving a repository via HTTP +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -* check out how FAI_DEBMIRROR of /etc/grml/fai/fai.conf could be merged with our -MIRROR_DIRECTORY and MIRROR_SOURCES feature of /etc/grml/grml-live.conf +Make sure to create an according sources.list configuration file, e.g. using +your own class name `CUSTOM`: -* support hooks to allow further customisation of the build process + # cat > /etc/grml/fai/config/files/etc/apt/sources.list.d/local-packages.list/CUSTOM << EOF + deb http://127.0.0.1:8000/ ./ + EOF -Long term goals ---------------- +Make sure the local directory is served via HTTP on the according IP address and +port. For the `http://127.0.0.1:8000/` example from above it should be enough to +just invoke: -* Provide all upcoming grml releases based on grml-live. + % cd /home/foobar/packages + % dpkg-scanpackages . /dev/null | gzip > Packages.gz + % python -m SimpleHTTPServer 8000 -* Provide a console interface (using dialog) for easy and common use of -grml-live. +[TIP] +Of course you can also use a real Debian repository setup using tools like +reprepro(1) and/or using a real web server, though for quick debugging sessions +python's SimpleHTTPServer in combination with dpkg-scanpackages from package +dpkg-dev is a simple and easy approach. -* Provide a graphical interface (for example using pygtk) for easy and common -use of grml-live. +Finally invoke grml-live with your class name (`CUSTOM` in this example) added +to the list of classes on the command line (see grml-live option `-c`). +[[download]] Download / install grml-live as a Debian package ------------------------------------------------ -Debian packages are available through the grml-repository at -link:http://deb.grml.org/pool/main/g/grml-live/[deb.grml.org]. If you want to -build a Debian package of the most current version on your own, just execute: +Stable Debian packages are available through the grml-repository at +link:http://deb.grml.org/pool/main/g/grml-live/[deb.grml.org] and the latest +Git commits are available as Debian packages from +link:http://jenkins.grml.org/job/grml-live-binaries/[jenkins.grml.org]. +If you want to build a Debian package on your own (using for example a specific +version or the current development tree), just execute: - hg clone http://hg.grml.org/grml-live + git clone git://git.grml.org/grml-live cd grml-live debuild -us -uc +[[run-from-git]] +Run grml-live directly from git +------------------------------- + +In case you want to run grml-live directly from the git repository checkout +(after making sure all dependencies are installed), you should set +`GRML_FAI_CONFIG` so that a) it finds the according FAI configuration files and +b) does not use the config files of an possibly installed `grml-live` package. +Usage example: + + # export GRML_FAI_CONFIG=$(pwd)/etc/grml/fai + # export SCRIPTS_DIRECTORY=$(pwd)/scripts + # export TEMPLATE_DIRECTORY=$(pwd)/templates + # ./grml-live -s sid -a amd64 -c GRMLBASE,GRML_FULL,AMD64 + +[[source]] Source ------ The source of grml-live is available at -link:http://hg.grml.org/grml-live/[http://hg.grml.org/grml-live/] +link:https://github.com/grml/grml-live/[https://github.com/grml/grml-live/] +[[bugs]] Bugs ---- Please report feedback, link:http://grml.org/bugs/[bugreports] and wishes -link:http://grml.org/contact/[to the grml-team]! +link:http://grml.org/contact/[to the Grml team]! + +[[documentation]] +Documentation +------------- + +The most recent grml-live documentation is available online at +http://grml.org/grml-live/ and for offline reading also available +in different formats: + +* http://grml.org/grml-live/grml-live.epub +* http://grml.org/grml-live/grml-live.pdf +[[authors]] Authors ------- -Michael Prokop . +Michael Prokop ///////////////////////////////////// // vim:ai tw=80 ft=asciidoc expandtab