Flexibilize mount handling for the DCS device.
[grml-autoconfig.git] / bin / save-config
index e2f9854..a7dce5d 100755 (executable)
@@ -4,7 +4,6 @@
 # Authors:       grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
 # Bug-Reports:   see http://grml.org/bugs/
 # License:       This file is licensed under the GPL v2.
-# Latest change: Son Mai 13 11:46:44 CEST 2007 [mika]
 ################################################################################
 
 # some zsh-stuff {{{
 
   LANG=C
   LC_ALL=C
-  [[ $UID != 0 ]] && runas='sudo' # important for /etc
+  [[ $(id -u) != 0 ]] && runas='sudo' # important for /etc
 
-  check4progs mutt || echo "Warning, mutt not available for mail handling.">&2
-  check4progs findchanged tar || { echo "Sorry, can't continue. Exiting.">&2 ; exit 1 }
+  check4progs tar || { echo "Sorry, can't continue. Exiting.">&2 ; exit 1 }
 
   CONFIG=/etc/grml/saveconfig
   [ -r "$CONFIG" ] && . $CONFIG
@@ -41,6 +39,7 @@
   MAILFILE="$TMPDIR/mail.txt"
 
   [ -n "$FILELIST" ] || FILELIST=$(mktemp $TMPDIR/filelist.XXXXXX)
+# }}}
 
 # functions {{{
 debug(){
@@ -51,6 +50,18 @@ debug(){
 # set -x
 }
 
+findchanged() {
+  [ -n "$1" ] || return 1
+
+  if [ -d "$1" ]; then
+    for i in $(cd "$1"; find . -type f 2>/dev/null | sed 's,^\./,,g' | grep -v ' '); do
+      cmp -s "$1/$i" "$2/$i" || echo "$1/$i"
+    done
+  elif [ -e "$1" ]; then
+    cmp -s "$1" "$2" || echo "$1"
+  fi
+}
+
 bailout(){
   rm -f "$FILELIST"
   rm -f "$MAILFILE"
@@ -122,7 +133,7 @@ save_grmlhome(){
 save_etc(){
   debug "save etc"
   if [ -n "$NEWLAYOUT" ] ; then
-     $runas find /live/cow/etc | sed -e 's#/live/cow## ; /etc$/d' >> $FILELIST
+     $runas find /live/cow/etc -type f -o -type l | sed -e 's#/live/cow## ; /etc$/d' >> $FILELIST
   else
      $runas findchanged /etc /GRML/etc >> $FILELIST
   fi
@@ -131,7 +142,7 @@ save_etc(){
 save_configdir(){
   debug "save configdir"
   if [ -d $HOME/config ] ; then
-     ls $HOME/config/*  >> $FILELIST  2>/dev/null
+     ls $HOME/config/*  >> $FILELIST 2>/dev/null
      ls $HOME/config/.* >> $FILELIST 2>/dev/null
   fi
 }
@@ -141,9 +152,10 @@ create_config(){
   if ! [ -r "$FILELIST" ]; then
      echo "Sorry, filelist $FILELIST could not be read." >&2
      echo "Error when generating $FILENAME." >&2
+     exit 1
   else
      # GNU tar sucks so much, really. Avoid the "file changed as we read it":
-     tar cf /dev/null /etc
+     tar cf /dev/null /etc 2>/dev/null
      # now really execute the according tar command:
      BZIP2=-9 $runas tar -T - -cpPjf "$FILENAME" <"$FILELIST" && \
      echo "Successfully stored configuration in file $FILENAME"   || \
@@ -203,7 +215,7 @@ parse_options()
    fi
 
    if [[ "$o_mail" != "" ]]; then
-      check4progs mutt || { echo "Sorry, mutt not available for sending mail. Exiting.">&2 ; exit 1 }
+      check4progs mutt || { echo "Sorry, mutt not available for sending mail. Exiting.">&2 ; exit 1 }
       recipient=$o_mail[2]
       debug "send mail to $recipient"
       echo "Created on $DATE on host $HOSTNAME running grml $GRML_VERSION" > $MAILFILE
@@ -219,23 +231,28 @@ runit(){
      save_home
      SETSAVE=1
    fi
+
    if [[ $SAVE_GRMLHOME == "yes" ]]; then
      debug "running save_grmlhome"
      save_grmlhome
      SETSAVE=1
    fi
+
    if [[ $SAVE_ETC == "yes" ]] ; then
      debug "running save_etc"
      save_etc
      SETSAVE=1
    fi
+
    if [[ $SAVE_CONFIGDIR == "yes" ]] ; then
      debug "running save_configdir"
      save_configdir
      SETSAVE=1
    fi
+
    if [ -z $SETSAVE ] ; then
-     echo "Sorry, you did not select any configuration which should be saved. Exiting." ; exit 1
+     echo "Sorry, you did not select any configuration which should be saved. Exiting.">&2
+     exit 1
    fi
 }