]> git.donarmstrong.com Git - neurodebian.git/blobdiff - tools/nd-autoinstall
Also for stats report which repo and which job number use our setup
[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:
 
-# play save
+# play safe
 set -e
 set -u
 
@@ -16,6 +16,9 @@ nd_autoinstall_version=0.1
 ai_envfile=
 ai_package=
 ai_verbose=
+ai_dialog_title=
+ai_force=0
+ai_file=
 
 print_verbose()
 {
@@ -60,9 +63,19 @@ Options:
     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.
 
+  -t, --title
+    Optinal title of the installation dialog.
+
   -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.
-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
@@ -98,8 +111,11 @@ eval set -- "$CLOPTS"
 
 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;;
@@ -114,29 +130,51 @@ if [ $# -lt 1 ] ; then
     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
 
+#
+# Decide either installation is necessary
+#
 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
-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
-    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"
 
@@ -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 \
-        | 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" \
@@ -163,7 +202,7 @@ if [ $do_install -eq 1 ]; then
        }
 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 "$@"