Drop "set -e" from the scripts.
[grml-debootstrap.git] / grml-debootstrap
index d456bce..8bbed71 100755 (executable)
@@ -7,8 +7,6 @@
 ################################################################################
 # http://www.debian.org/releases/stable/i386/index.html.en
 
-set -e # exit on any error
-
 # variables {{{
 PN="$(basename $0)"
 VERSION="$(dpkg --list $PN 2>/dev/null| awk '/^i/ {print $3}')"
@@ -28,11 +26,6 @@ export LC_ALL=C
 INTERACTIVE=''
 # }}}
 
-# source core functions {{{
-. /etc/grml/lsb-functions
-. /etc/grml/script-functions
-# }}}
-
 # help text {{{
 usage() {
   echo "$PN - wrapper around debootstrap for installing Debian
@@ -103,6 +96,60 @@ if [ "$1" = '-h' ] || [ "$1" = '-help' ] || [ "$1" = "--help" ] ; then
 fi
 # }}}
 
+# {{{
+GOOD='\e[32;01m'
+WARN='\e[33;01m'
+BAD='\e[31;01m'
+NORMAL='\e[0m'
+HILITE='\e[36;01m'
+BRACKET='\e[34;01m'
+
+einfo() {
+  einfon "$1\n"
+  return 0
+}
+
+einfon() {
+  [ "${RC_ENDCOL}" != "yes" ] && [ "${LAST_E_CMD}" = "ebegin" ] && echo
+  printf " ${GOOD}*${NORMAL} $*"
+  LAST_E_CMD=einfon
+  return 0
+}
+
+eerror() {
+  [ "${RC_ENDCOL}" != "yes" ] && [ "${LAST_E_CMD}" = "ebegin" ] && echo
+  printf " ${BAD}*${NORMAL} $*\n"
+  LAST_E_CMD=eerror
+  return 0
+}
+
+eend() {
+  local retval="${1:-0}"
+  shift
+  if [ $retval -gt 0 ]; then
+    printf " ${BAD}-> Failed (rc=${retval})${NORMAL}\n"
+  fi
+}
+
+check4root(){
+  if [ "$(id -u 2>/dev/null)" != 0 ] ; then
+    echo 1>&2 "Error: please run this script with uid 0 (root)." ; return 1
+  fi
+}
+
+check4progs(){
+  local RC=''
+  for arg in $* ; do
+    which $arg >/dev/null 2>&1 || RC="$arg"
+  done
+  if [ -n "$RC" ] ; then
+     echo "$RC not installed"
+     return 1
+  fi
+}
+
+# }}}
+
 # make sure we have what we need {{{
 check4progs debootstrap dialog || exit 1
 # }}}
@@ -450,13 +497,9 @@ if [ $RELEASE = "lenny" ]; then
 fi
 
 ERRORFILE=$(mktemp)
-set +e
-# TODO: better error handling?
 yes | mdadm --create "${TARGET}" --level="${RAIDLEVEL}" \
       --raid-devices="${NUM_PARTITIONS}" ${METADATA_VERSION} ${SELECTED_PARTITIONS} >/dev/null 2>$ERRORFILE
 RC=$?
-set -e
-
 if [ "$RC" = 0 ] ; then
    dialog --title "$PN" --msgbox \
    "Creating $TARGET was successful." 0 0
@@ -742,9 +785,7 @@ stage() {
      return 0
   elif grep -q done "${STAGES}/${1}" 2>/dev/null ; then
      ewarn "Notice: stage $1 has been executed already, skipping execution therefore." ; eend 0
-     eindent
-       ewarn "To reexecute it clean up the according directory inside $STAGES" ; eend 0
-     eoutdent
+     ewarn "  To reexecute it clean up the according directory inside $STAGES" ; eend 0
      return 1
   fi
 }