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]
[...]
+# 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"
if [ "$FAI_ACTION" = "softupdate" ] ; then
echo "Action $FAI_ACTION of FAI (hooks/instsoft.GRMLBASE) via grml-live running"
## we want to use our own sources.list:
skiptask updatebase
## 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
# 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
# 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
# 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
exit # make sure we don't continue behind the following "fi"
fi