hooks/{instsoft,updatebase}.GRMLBASE: be more careful about BUILD_ONLY environment.
authorMichael Prokop <mika@grml.org>
Mon, 27 Dec 2010 18:41:09 +0000 (19:41 +0100)
committerMichael Prokop <mika@grml.org>
Mon, 27 Dec 2010 18:41:09 +0000 (19:41 +0100)
If BUILD_ONLY is available in the environment then we do not want
to update any packages but just build the ISO.  The script
instsoft.GRMLBASE is being executed *after* updatebase.GRMLBASE
and we run "skiptask instsoft" from updatebase.GRMLBASE. But this
might fail if the script exists too early due to errors.

This commit adds some further checks and also checks for
BUILD_ONLY inside instsoft.GRMLBASE.

Quoting ~log/fai/grml/softupdate-20101227_181604/fai.log from a failed execution:

  [...]
  Calling hook: updatebase.GRMLBASE
  Action softupdate of FAI (hooks/updatebase.GRMLBASE) via grml-live running
  mount: proc already mounted or /linuxuser/2010.12//grml_2010.12-rc1/grml_chroot/proc busy
  mount: according to mtab, proc is already mounted on /linuxuser/2010.12/grml_2010.12-rc1/grml_chroot/proc
  updatebase.GRMLBASE  FAILED with exit code 32.
  Skiping task_updatebase
  Calling hook: instsoft.GRMLBASE
  Action softupdate of FAI (hooks/instsoft.GRMLBASE) via grml-live running
  Get:1 http://deb.grml.org grml-stable Release.gpg [197 B]
  [...]

etc/grml/fai/config/hooks/instsoft.GRMLBASE
etc/grml/fai/config/hooks/updatebase.GRMLBASE

index 5dc3433..c8150be 100755 (executable)
@@ -9,6 +9,14 @@
 set -u
 set -e
 
+# if hooks/updatebase.GRMLBASE fails for whatever reason
+# and can't skip instsoft.GRMLBASE we have to make sure
+# we exit here as well
+if [ -n "$BUILD_ONLY" ] ; then
+   "Exiting hooks/instsoft.GRMLBASE as BUILD_ONLY environment is set."
+   exit 0
+fi
+
 if [ "$FAI_ACTION" = "softupdate" ] ; then
    echo "Action $FAI_ACTION of FAI (hooks/instsoft.GRMLBASE) via grml-live running"
 
index cb56f07..6cf2c9b 100755 (executable)
@@ -24,17 +24,27 @@ if [ "$FAI_ACTION" = "softupdate" ] ; then
    ## we want to use our own sources.list:
    skiptask updatebase
 
-   ## taken from FAI's lib/updatebase:
+   ## based on FAI's lib/updatebase:
    # some packages must access /proc even in chroot environment
-   mount -t proc proc $FAI_ROOT/proc
+   if ! [ -d $FAI_ROOT/proc/1 ] ; then
+      mount -t proc proc $FAI_ROOT/proc || true
+   fi
    # some packages must access /sys even in chroot environment
-   mount -t sysfs sysfs $FAI_ROOT/sys
+   if ! [ -d $FAI_ROOT/sys/kernel ] ; then
+      mount -t sysfs sysfs $FAI_ROOT/sys
+   fi
    # if we are using udev, also mount it into $FAI_ROOT
-   [ -f /etc/init.d/udev ] && mount --bind /dev $FAI_ROOT/dev
-   mount -t devpts devpts $FAI_ROOT/dev/pts
+   if [ -f /etc/init.d/udev ] ; then
+      mount --bind /dev $FAI_ROOT/dev || true
+   fi
 
-   # skip the task if we want to build a new ISO only:
-   [ -n "$BUILD_ONLY" ] && skiptask instsoft || /bin/true
+   mount -t devpts devpts $FAI_ROOT/dev/pts || true
+
+   # skip the task if we want to build a new ISO only,
+   # this means we do NOT update any packages
+   if [ -n "$BUILD_ONLY" ] ; then
+      skiptask instsoft || true
+   fi
 
    exit # make sure we don't continue behind the following "fi"
 fi