From 4040ae3e3763818f6002af85aec8e9ed7c905c56 Mon Sep 17 00:00:00 2001 From: Michael Prokop Date: Thu, 20 Nov 2008 14:38:46 +0100 Subject: [PATCH] Support execution of further scripts --- chroot-script | 18 +++++++++++--- cmdlineopts.clp | 9 ++++++- config | 6 +++++ grml-debootstrap | 76 ++++++++++++++++++++++++++++++++++++++++---------------- 4 files changed, 84 insertions(+), 25 deletions(-) diff --git a/chroot-script b/chroot-script index 2be4689..eaf39f6 100755 --- a/chroot-script +++ b/chroot-script @@ -393,6 +393,17 @@ grub() { } # }}} +# execute all scripts present in /etc/debootstrap/chroot-scripts/ {{{ +custom_scripts() { + [ -d /etc/debootstrap/chroot-scripts/ ] || return 0 + + for script in /etc/debootstrap/chroot-scripts/* ; do + echo "Executing script $script" + $script && echo "done" || echo "failed" + done +} +# }}} + # make sure we don't have any running processes left {{{ services() { for service in ssh mdadm mdadm-raid ; do @@ -418,10 +429,11 @@ finalize() { # execute the functions {{{ for i in chrootmirror grmlrepos kernelimg_conf makedev install_policy_rcd \ packages extrapackages mkinitrd kernel reconfigure hosts interfaces \ - timezone fstab hostname initrd grub passwords services finalize ; do - if stage $i ; then + timezone fstab hostname initrd grub passwords custom_scripts \ + services finalize ; do + if stage $i ; then $i && stage $i done || exit 1 - fi + fi done # }}} diff --git a/cmdlineopts.clp b/cmdlineopts.clp index 496626c..efa3147 100644 --- a/cmdlineopts.clp +++ b/cmdlineopts.clp @@ -65,6 +65,14 @@ while :; do shift; _opt_debconf="$1" _opt_debconf_set=T ;; + --scripts) # Execute scripts from /scripts/. Option + shift; _opt_scripts="$1" + _opt_scripts_set=T + ;; + --chroot-scripts) # Execute scripts from /chroot-scripts/. Option + shift; _opt_chroot_scripts_set="$1" + _opt_chroot_scripts_set=T + ;; --keep_src_list) # Do not overwrite user provided apt sources.list. _opt_keep_src_list=T ;; @@ -74,7 +82,6 @@ while :; do --password) # Use specified password as password for user root. shift; _opt_password="$1" ;; - # --bootappend) # Add specified appendline to kernel whilst booting. shift; _opt_bootappend="$1" ;; diff --git a/config b/config index 92aff30..323c31c 100644 --- a/config +++ b/config @@ -114,6 +114,12 @@ PACKAGES='yes' # pre-seed packages using /etc/debootstrap/debconf-selections (if exist)? DEBCONF='yes' +# execute scripts from /etc/debootstrap/chroot-scripts/ inside the chroot? +CHROOT_SCRIPTS='yes' + +# execute scripts from /etc/debootstrap/scripts/ after setting up chroot? +SCRIPTS='yes' + # install extra packages (.deb) from /etc/debootstrap/extrapackages/? EXTRAPACKAGES='yes' diff --git a/grml-debootstrap b/grml-debootstrap index f1afb19..a67e260 100755 --- a/grml-debootstrap +++ b/grml-debootstrap @@ -45,34 +45,37 @@ Bootstrap options: --debopt=params Extra parameters passed to the debootstrap. --interactive Use interactive mode (frontend). --nodebootstrap Skip debootstrap, only do configuration to the target. - -Configuration options: - - - -c, --config=file Use specified configuration file, defaults to - /etc/debootstrap/config - -d, --confdir=path Place of config files for debootstrap, defaults to - /etc/debootstrap - --packages[=f] Install packages defined in /packages. Option - arg: alternative package list file. - --debconf[=f] Pre-seed packages using /debconf-selections. - Option arg: alternative pre-seed db file. - --keep_src_list Do not overwrite user provided apt sources.list. - --hostname=name Hostname of Debian system. - --password=pwd Use specified password as password for user root. - - --bootappend=line Add specified appendline to kernel whilst booting. --groot=device Root device for usage in grub, corresponds with - $TARGET in grub syntax, like hd0,0 for /dev/sda1. + \$TARGET in grub syntax, like hd0,0 for /dev/sda1. --grub=device Target for grub installation. Use grub syntax for specifying, like hd0 for /dev/sda. +Configuration options: + + -c, --config=file Use specified configuration file, defaults to + /etc/debootstrap/config + -d, --confdir=path Place of config files for debootstrap, defaults + to /etc/debootstrap + --packages[=f] Install packages defined in /packages. + Option arg: alternative package list file. + --debconf[=f] Pre-seed packages using /debconf-selections. + Option arg: alternative pre-seed db file. + --keep_src_list Do not overwrite user provided apt sources.list. + --hostname=name Hostname of Debian system. + --password=pwd Use specified password as password for user root. + --bootappend=line Add specified appendline to kernel whilst booting. + --chroot-scripts[=f] Execute scripts from /chroot-scripts/ + Option arg: alternative chroot-scripts directory. + --scripts[=d] Execute scripts from /scripts/. + Option arg: alternative scripts directory. + Other options: -v, --verbose Increase verbosity. -h, --help Print this usage information and exit. -V, --version Show summary of options and exit. +Usage examples can be found in the grml-debootstrap manpage. Send bugreports to the grml-team: bugs@grml.org || http://grml.org/bugs/ " } @@ -104,7 +107,14 @@ fi # cmdline handling {{{ # source external command line parameter-processing script -. /usr/share/grml-debootstrap/functions/cmdlineopts.clp +if [ -r /usr/share/grml-debootstrap/functions/cmdlineopts.clp ] ; then + . /usr/share/grml-debootstrap/functions/cmdlineopts.clp +elif [ -r ./cmdlineopts.clp ] ; then + . ./cmdlineopts.clp +else + echo "Error: cmdline function file not found, exiting.">&2 + exit 1 +fi # == business-logic of command line parameter-processing @@ -133,6 +143,8 @@ fi [ "$_opt_config" ] && CONFIGFILE=$_opt_config [ "$_opt_packages_set" ] && PACKAGES='yes' [ "$_opt_debconf_set" ] && DEBCONF='yes' +[ "$_opt_scripts_set" ] && SCRIPTS='yes' +[ "$_opt_chroot_scripts_set" ] && CHROOT_SCRIPTS='yes' [ "$_opt_keep_src_list" ] && KEEP_SRC_LIST='yes' [ "$_opt_hostname" ] && HOSTNAME=$_opt_hostname [ "$_opt_password" ] && ROOTPASSWORD=$_opt_password @@ -745,14 +757,22 @@ preparechroot() { sed -i "s#GRUB=.*#GRUB=\"$GRUB\"#" $MNTPOINT/etc/debootstrap/config sed -i "s#GROOT=.*#GROOT=\"$GROOT\"#" $MNTPOINT/etc/debootstrap/config + # package selection: cp $VERBOSE ${_opt_packages:-$CONFFILES/packages} \ $MNTPOINT/etc/debootstrap/packages + + # debconf preseeding: _opt_debconf=${_opt_debconf:-$CONFFILES/debconf-selections} [ -f $_opt_debconf -a "$DEBCONF" = 'yes' ] && \ cp $VERBOSE $_opt_debconf $MNTPOINT/etc/debootstrap/debconf-selections + # copy scripts that should be executed inside the chroot: + _opt_chroot_scripts=${_opt_chroot_scripts:-$CONFFILES/chroot_scripts/} + [ -f $_opt_chroot_scripts -a "$CHROOT_SCRIPTS" = 'yes' ] && \ + cp -a $VERBOSE $_opt_chroot_scripts $MNTPOINT/etc/debootstrap/ + # notice: do NOT use $CHROOT_VARIABLES inside chroot but statically file instead! - cp $VERBOSE $CHROOT_VARIABLES $MNTPOINT/etc/debootstrap/variables + cp $VERBOSE $CHROOT_VARIABLES $MNTPOINT/etc/debootstrap/variables cp $VERBOSE -a -L $CONFFILES/extrapackages/ $MNTPOINT/etc/debootstrap/ @@ -790,6 +810,19 @@ preparechroot() { } # }}} +# execute all scripts in /etc/debootstrap/scripts/ {{{ +execute_scripts() { + if [ -f $_opt_scripts -a "$SCRIPTS" = 'yes' ] ; then + for script in /etc/debootstrap/scripts/* ; do + if [ -x "$script" ] ; then + einfo "Executing script $script" + $script ; eend $? + fi + done + fi +} +# }}} + # execute chroot-script {{{ chrootscript() { if ! [ -r "$MNTPOINT/bin/chroot-script" ] ; then @@ -863,7 +896,8 @@ fscktool() { # now execute all the functions {{{ for i in mkfs tunefs mount_target debootstrap_system preparechroot \ - chrootscript grub_install umount_chroot fscktool ; do + chrootscript execute_scripts grub_install umount_chroot \ + fscktool ; do if stage "${i}" ; then $i && ( stage "${i}" done && rm -f "${STAGES}/${i}" ) || bailout 2 "i" fi -- 2.1.4