]> git.donarmstrong.com Git - neurodebian.git/blobdiff - tools/nd-autoinstall
ENH: improved nd_querycfg a bit: query content of a section or list of sections
[neurodebian.git] / tools / nd-autoinstall
index cf90125b41b5e3073bad4018efcb314d9193599d..1f2896d4f13312ea24790c31a24f223c9f10c4bc 100755 (executable)
@@ -2,7 +2,7 @@
 #emacs: -*- mode: shell-script; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil -*-
 #ex: set sts=4 ts=4 sw=4 et:
 
 #emacs: -*- mode: shell-script; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil -*-
 #ex: set sts=4 ts=4 sw=4 et:
 
-# play save
+# play safe
 set -e
 set -u
 
 set -e
 set -u
 
@@ -16,6 +16,9 @@ nd_autoinstall_version=0.1
 ai_envfile=
 ai_package=
 ai_verbose=
 ai_envfile=
 ai_package=
 ai_verbose=
+ai_dialog_title=
+ai_force=0
+ai_file=
 
 print_verbose()
 {
 
 print_verbose()
 {
@@ -60,9 +63,19 @@ Options:
     File to be sourced before invocation of the COMMAND.  If not found,
     PACKAGE gets installed first.
 
     File to be sourced before invocation of the COMMAND.  If not found,
     PACKAGE gets installed first.
 
+  -f, --force
+    Skip all checks and install package(s) provided via --package.
+
+  -F, --file=FILE
+    If specified file is not present, install the PACKAGE and run
+    the COMMAND.
+
   -v, --verbose
     Enable additional progress messages.
 
   -v, --verbose
     Enable additional progress messages.
 
+  -t, --title
+    Optinal title of the installation dialog.
+
   -h, --help
     Print short description, usage summary and option list.
 
   -h, --help
     Print short description, usage summary and option list.
 
@@ -86,7 +99,7 @@ EOT
 # Note that we use `"$@"' to let each command-line parameter expand to a
 # separate word. The quotes around `$@' are essential!
 # We need CLOPTS as the `eval set --' would nuke the return value of getopt.
 # Note that we use `"$@"' to let each command-line parameter expand to a
 # separate word. The quotes around `$@' are essential!
 # We need CLOPTS as the `eval set --' would nuke the return value of getopt.
-CLOPTS=`getopt -o h,e:,p:,v --long help,version,environment-file:,package:,verbose, -n 'nd-autoinstall' -- "$@"`
+CLOPTS=`getopt -o h,e:,p:,t:,f,F:,v --long help,version,environment-file:,package:,title:,verbose,force,file: -n 'nd-autoinstall' -- "$@"`
 
 if [ $? != 0 ] ; then
   echo "Terminating..." >&2
 
 if [ $? != 0 ] ; then
   echo "Terminating..." >&2
@@ -98,8 +111,11 @@ eval set -- "$CLOPTS"
 
 while true ; do
   case "$1" in
 
 while true ; do
   case "$1" in
-         -e|--environment-file) shift; ai_envfile=$1; shift;;
-         -p|--package) shift; ai_package=$1; shift;;
+         -e|--environment-file) shift; ai_envfile="$1"; shift;;
+         -f|--force) ai_force=1; shift;;
+         -F|--file) shift; ai_file="$1"; shift;;
+         -p|--package) shift; ai_package="$1"; shift;;
+         -t|--title) shift; ai_dialog_title="$1"; shift;;
          -v|--verbose) ai_verbose=1; shift;;
          -h|--help) print_help; exit 0;;
          --version) print_version; exit 0;;
          -v|--verbose) ai_verbose=1; shift;;
          -h|--help) print_help; exit 0;;
          --version) print_version; exit 0;;
@@ -114,29 +130,51 @@ if [ $# -lt 1 ] ; then
     exit 2
 fi
 
     exit 2
 fi
 
-ai_command=$1; shift
-[ -z "$ai_package" ] && ai_package=$ai_command
+ai_command="$1"; shift
+[ -z "$ai_package" ] && ai_package=$(basename "$ai_command")
+
+[ -z "$ai_dialog_title" ] && ai_dialog_title="Package installation"
 
 ai_envfile_failed=
 if [ ! -z "$ai_envfile" ]; then
        source "$ai_envfile" || ai_envfile_failed=1
 fi
 
 
 ai_envfile_failed=
 if [ ! -z "$ai_envfile" ]; then
        source "$ai_envfile" || ai_envfile_failed=1
 fi
 
+#
+# Decide either installation is necessary
+#
 do_install=0
 if [ ! -z "$ai_envfile_failed" ]; then
 do_install=0
 if [ ! -z "$ai_envfile_failed" ]; then
+    print_verbose "Environment file $ai_envfile failed to source. Install $ai_package"
+       do_install=1
+fi
+if [ ! -z "$ai_file" ] && [ ! -e "$ai_file" ]; then
+    print_verbose "File $ai_file absent. Install $ai_package"
+    do_install=1
+fi
+if ! which "$ai_command" > /dev/null && [ ! -e "$ai_command" ]; then
+    print_verbose "Command $ai_command is not available. Install $ai_package"
        do_install=1
 fi
        do_install=1
 fi
-if which $ai_command > /dev/null || [ -e $ai_command ]; then
-       do_install=0
-else
+if [ $ai_force -eq 1 ]; then
+    print_verbose "Force installation of $ai_package"
        do_install=1
 fi
 
 if [ $do_install -eq 1 ]; then
        do_install=1
 fi
 
 if [ $do_install -eq 1 ]; then
-    if ! zenity --question \
-        --text="To run '$ai_command', $ai_package package needs to be installed.  Do you want to proceed?"; then
-        exit 2
-    fi
+    # Figure out amount of space to download/occupy
+    space_info="$(LC_ALL=C apt-get --trivial-only --print-uris install $ai_package 2>/dev/null \
+        | grep -e '^\(Need to get \|After this\)' || : )"
+    if [ $ai_force -eq 0 ]; then
+               if ! zenity --question \
+                       --text="To run '$ai_command', $ai_package package needs to be installed.
+
+$space_info
+
+Do you want to proceed?"; then
+                       exit 2
+               fi
+       fi
 
     print_verbose "Need to install $ai_package to run $ai_command"
 
 
     print_verbose "Need to install $ai_package to run $ai_command"
 
@@ -146,8 +184,9 @@ if [ $do_install -eq 1 ]; then
                DEBIAN_FRONTEND=gnome /usr/bin/apt-get install -y $ai_package 2>&1 \
         && rm -f $logfile; } \
         | tee $logfile \
                DEBIAN_FRONTEND=gnome /usr/bin/apt-get install -y $ai_package 2>&1 \
         && rm -f $logfile; } \
         | tee $logfile \
-        | zenity --title="Package installation" \
-                        --text="Installing $ai_package" \
+        | zenity --title="$ai_dialog_title" \
+                        --text="Installing $ai_package
+$space_info" \
                  --progress --pulsate --auto-close --auto-kill
     if [ -e $logfile ] ; then
         zenity --title="Installation of $ai_package has failed: see $logfile" \
                  --progress --pulsate --auto-close --auto-kill
     if [ -e $logfile ] ; then
         zenity --title="Installation of $ai_package has failed: see $logfile" \
@@ -163,7 +202,7 @@ if [ $do_install -eq 1 ]; then
        }
 fi
 
        }
 fi
 
-if [ -x $ai_command ]; then
+if which $ai_command > /dev/null 2>&1; then
        # only run if executable
        print_verbose "Running $ai_command"
        $ai_command "$@"
        # only run if executable
        print_verbose "Running $ai_command"
        $ai_command "$@"