From 292c51ce90fc7f803f638f48e14cc0357f8e3c13 Mon Sep 17 00:00:00 2001
From: Gustav Geier <gustav.geier@fsmpi.rwth-aachen.de>
Date: Mon, 17 Mar 2014 00:02:31 +0100
Subject: [PATCH] =?UTF-8?q?linuxparty.sh=20f=C3=BCr=20SS14=20angepasst:?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

1) kdialog GUI
2) Generierung von Packet-Dokumentation
3) Physiker: Anaconda Installation
4) sub-Skript mount-repo-stick.sh qdbus durch dbus-send ersetzt
   da qdbus auf Kubuntu nicht out-of-the-box funktioniert

zu 3) Die Anaconda Installer müssen von der Website geladen werden und
unter /hive/anaconda/Installer-xxBit.sh abgelegt werden, wobei xx jeweils
64 und 32 entspricht.
---
 Doku/COMMON.tex              |   1 +
 Doku/FOOTER.tex              |   1 +
 Doku/HEADER.tex              |   9 ++
 Doku/INFORMATIK.tex          |   1 +
 Doku/MATHEMATIK.tex          |   1 +
 Doku/PHYSIK.tex              |   1 +
 Doku/git.tex                 |   1 -
 Doku/subversion.tex          |   1 -
 hive/anaconda/envpatch.patch |   6 +
 scripts/linuxparty.sh        | 216 ++++++++++++++++++++++++-----------
 scripts/mount-stick-repo.sh  |   2 +-
 11 files changed, 173 insertions(+), 67 deletions(-)
 create mode 100644 Doku/COMMON.tex
 create mode 100644 Doku/FOOTER.tex
 create mode 100644 Doku/HEADER.tex
 create mode 100644 Doku/INFORMATIK.tex
 create mode 100644 Doku/MATHEMATIK.tex
 create mode 100644 Doku/PHYSIK.tex
 create mode 100644 hive/anaconda/envpatch.patch

diff --git a/Doku/COMMON.tex b/Doku/COMMON.tex
new file mode 100644
index 0000000..5936c39
--- /dev/null
+++ b/Doku/COMMON.tex
@@ -0,0 +1 @@
+\section{Allgemeine Tools}
diff --git a/Doku/FOOTER.tex b/Doku/FOOTER.tex
new file mode 100644
index 0000000..6b47932
--- /dev/null
+++ b/Doku/FOOTER.tex
@@ -0,0 +1 @@
+\end{document}
diff --git a/Doku/HEADER.tex b/Doku/HEADER.tex
new file mode 100644
index 0000000..e1697b5
--- /dev/null
+++ b/Doku/HEADER.tex
@@ -0,0 +1,9 @@
+\documentclass[a4paper]{article}
+
+\usepackage[T1]{fontenc}
+\usepackage[utf8x]{inputenc}
+\usepackage[ngerman]{babel}
+
+\begin{document}
+
+\tableofcontents
diff --git a/Doku/INFORMATIK.tex b/Doku/INFORMATIK.tex
new file mode 100644
index 0000000..2d6c1b6
--- /dev/null
+++ b/Doku/INFORMATIK.tex
@@ -0,0 +1 @@
+\section{Programme für Informatiker}
diff --git a/Doku/MATHEMATIK.tex b/Doku/MATHEMATIK.tex
new file mode 100644
index 0000000..e10247b
--- /dev/null
+++ b/Doku/MATHEMATIK.tex
@@ -0,0 +1 @@
+\section{Programme für Mathematiker}
diff --git a/Doku/PHYSIK.tex b/Doku/PHYSIK.tex
new file mode 100644
index 0000000..561be59
--- /dev/null
+++ b/Doku/PHYSIK.tex
@@ -0,0 +1 @@
+\section{Programme für Physiker}
diff --git a/Doku/git.tex b/Doku/git.tex
index b3fb457..f0e293e 100644
--- a/Doku/git.tex
+++ b/Doku/git.tex
@@ -1,4 +1,3 @@
-\begin{document}
 
 \subsection{Subversion}
 
diff --git a/Doku/subversion.tex b/Doku/subversion.tex
index 934f6fd..d8c193f 100644
--- a/Doku/subversion.tex
+++ b/Doku/subversion.tex
@@ -1,4 +1,3 @@
-\begin{document}
 
 \subsection{Subversion}
 
diff --git a/hive/anaconda/envpatch.patch b/hive/anaconda/envpatch.patch
new file mode 100644
index 0000000..f4a3d5b
--- /dev/null
+++ b/hive/anaconda/envpatch.patch
@@ -0,0 +1,6 @@
+--- a/etc/environment	2014-03-16 19:48:12.836000000 +0000
++++ b/etc/environment	2014-03-16 19:50:45.768643532 +0000
+@@ -1,2 +1,2 @@
+-PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
++PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/opt/anaconda/bin"
+ RUNNING_UNDER_GDM="yes"
diff --git a/scripts/linuxparty.sh b/scripts/linuxparty.sh
index 96c78c7..2fca7d4 100644
--- a/scripts/linuxparty.sh
+++ b/scripts/linuxparty.sh
@@ -2,16 +2,23 @@
 
 set -e
 
-#options for GUI are kdialog zenity no
+#options for GUI are kdialog zenity none
 if [ -z "$GUI" ]; then
   GUI=kdialog
 fi
 
+if [ "$GUI" == "none" ]; then
+  NOGUI=yes
+fi
+
 MY_DIR="$( readlink -f "$( dirname "${BASH_SOURCE[0]}" )" )"
 HIVE_DIR="$MY_DIR/../hive/" #we assume here that the LIP install stick is mounted at /media/MultiBoot... better idea?
 
+#Liste, in der alle Packete verzeichnet werden, die vom Skript tatsächlich installiert werden; Pseudo-Packete sind "all-capital"
+INSTALLED_PKGS="HEADER" 
+
 #Packetlisten zur Installation/Auswahl, nur Packete die im Repo liegen. 
-#Hive-Programme (z.B. root) müssen extra behandelt werden
+#Hive-Programme (z.B. anaconda) müssen extra behandelt werden
 #Der Textinstaller installiert _ausschließlich_ Packete bei denen Preinstalled gesetzt ist!
 #Syntax: preinstalled? pkgname description
 COMMON_PKGS=(\
@@ -20,16 +27,15 @@ COMMON_PKGS=(\
 "TRUE" "p7zip-full" "Tool um u.a. ZIP Archive zu handhaben" \
 "TRUE" "p7zip-rar" "Erweiterung von p7zip um auch RAR-Archive öffnen zu koennen" \
 "FALSE" "unrar-free" "Zur Verwaltung von RAR-Archiven" \
-"TRUE" "texmaker" "Grafischer Editor fuer La(Tex)" \
+"TRUE" "kile" "Grafischer Editor fuer La(Tex)" \
 "TRUE" "inkscape" "Bildbearbeitung (Vektorbasiert)" \
 "TRUE" "gimp" "Bildbearbeitung (Pixelbasiert)" \
-"TRUE" "pidgin" "Multi-Messenger-Client" \
 "FALSE" "subversion" "Versionsverwaltungstool (zentral)" \
 "TRUE" "git" "Versionsverwaltungstool (dezentral)" \
 "TRUE" "graphviz" "Tool zum visualisieren von Graphen" \
 "FALSE" "gnome" "GNOME3 Desktop Umgebung" \
 "FALSE" "xubuntu-desktop" "Xubuntu Desktop Umgebung und standard Programme" \
-"FALSE" "fityk" "Tool zum Daten-Fitting und -Analyse" \
+"FALSE" "fityk" "Tool zum Daten-Fitting und Analyse" \
 "FALSE" "openssh-server" "SSH-Server (s. KISS)" \
 "FALSE" "zsh" "Alternative Shell" \
 "FALSE" "zsh-doc" "Dokumentation von zsh" \
@@ -48,6 +54,7 @@ PH_PKGS=(\
 "TRUE" "gnuplot" "Programm um Funktions- und Datenplots anzufertigen" \
 "TRUE" "wxmaxima" "Graphische Benutzeroberfläche für das Maxima Computer Algebra System" \
 "TRUE" "bpython" "Ein weiterer interaktiver Python Interpreter" \
+"TRUE" "root-system" "Datenanalyse Framework vom CERN" \
 )
 
 IF_PKGS=(\
@@ -125,7 +132,7 @@ warn() {
 }
 
 case "$GUI" in
-  no)
+  none)
     askyesno() {
 	  while true
 	  do
@@ -158,6 +165,7 @@ case "$GUI" in
 	    pkglist=$(preinstalledpkgs $3)
 	    
 	    if [ -n "$pkglist" ]; then
+                    INSTALLED_PKGS="$INSTALLED_PKGS $4" #register pseudo package
 		    apt-install $pkglist
 		    ok "$pkglist installiert"
 	    else
@@ -182,6 +190,7 @@ case "$GUI" in
 	    INSTALL=$(zenity --list --title "$1" --text "$2" --checklist --separator=" " --width=786 --height=400 --column "Installieren?" --column "Packet" --column "Beschreibung" "${!pkglist}" 2> /dev/null || true)
 
 	    if [ -n "$INSTALL" ]; then
+                    INSTALLED_PKGS="$INSTALLED_PKGS $4" #register pseudo package
 		    apt-install $INSTALL
 		    ok "$INSTALL installiert"
 	    else
@@ -201,42 +210,56 @@ case "$GUI" in
     pressenter() {
 	    kdialog --msgbox "$@" 2> /dev/null
     }
-    install_pkgs() {
-	    local pkglist=$3[@]
-	    local nlist=""
-	    local n=0
-	    local tag=""
-	    local text=""
-	    local use=""	    
-	    for e in $pkglist; do	      
-	      case n in
-		0)
-		  use="$e"
-		  n=1
-		;;
-		1)
-		  tag="$e"
-		  n=2
-		;;
-		2)
-		  text="$e"
-		  nlist="$nlist $tag \"$tag: $text\" $use"
-		  n=0
-		;;
-	      esac
-	    done
-	    INSTALL=$(kdialog --width=786 --height=400 --title "$1" --checklist $nlist 2> /dev/null || true)
 
-	    if [ -n "$INSTALL" ]; then
-		    apt-install $INSTALL
-		    ok "$INSTALL installiert"
-	    else
-		    ok "Keine Packete installiert" 
-	    fi
+    install_pkgs() {
+	    
+        local pkglist=$3[@]
+	declare -a kdlist
+
+        local tag=""
+        local text=""
+        local use=""
+        local n=0
+        local i=0
+        for e in "${!pkglist}"; do
+           case $n in
+              0)
+                  if [ "$e" == "TRUE" ]; then
+                        use="on"
+                  else
+                        use="off"
+                  fi
+                  n=1
+             ;;
+             1)
+                  tag="$e"
+                  n=2
+             ;;
+             2)
+                  text="$e"
+                  kdlist[$i]="$tag"
+                  i=$((i+1))
+                  kdlist[$i]="$tag: $text"
+                  i=$((i+1))
+                  kdlist[$i]="$use"
+                  i=$((i+1))
+                  n=0
+             ;;
+          esac
+       done
+           
+       INSTALL=$(kdialog --geometry 786x400 --title "$1" --checklist "$2" "${kdlist[@]}" 2> /dev/null || true)
+       if [ -n "$INSTALL" ]; then
+           INSTALLED_PKGS="$INSTALLED_PKGS $4" #register pseudo package
+           apt-install $INSTALL
+           ok "$INSTALL installiert"
+       else
+           ok "Keine Packete installiert" 
+       fi
     }
     ;;
   *)
-    echo "Ungültige GUI Option '$GUI'. Möglich Werte sind 'kdialog', 'zenity' oder 'no'"
+    echo "Ungültige GUI Option '$GUI'. Möglich Werte sind 'kdialog', 'zenity' oder 'none'"
     exit 1
     ;;
 esac
@@ -249,22 +272,102 @@ trap showerr ERR
 
 apt-install() {
   apt-get install --quiet -y --force-yes $@
+  INSTALLED_PKGS="$INSTALLED_PKGS $@"
 }
 
 install_common() {
-	install_pkgs "Allg. Packete installieren?" "Programme, die der OSAK/die ALUG für sinnvoll hält, sind bereits zur Installation vorselektiert.\nWenn du keine Packete aus der Liste installieren willst, einfach Abbrechen.\nBitte beachten: Das LIP-Script deinstalliert keine Packete, insbesondere also keine Packete die in einem früheren Lauf aktiv waren,\nund diesmal nicht ausgewählt sind!" COMMON_PKGS
+	install_pkgs "Allg. Packete installieren?" "Programme, die der OSAK/die ALUG für sinnvoll hält, sind bereits zur Installation vorselektiert.\nWenn du keine Packete aus der Liste installieren willst, einfach Abbrechen.\nBitte beachten: Das LIP-Script deinstalliert keine Packete, insbesondere also keine Packete die in einem früheren Lauf aktiv waren,\nund diesmal nicht ausgewählt sind!" COMMON_PKGS "COMMON"
 }
 
 install_ph() {
-	install_pkgs "Packete für Physiker installieren?" "Programme, die der OSAK/die ALUG sowie Lehrstühle der Physik für sinnvoll hält, sind bereits zur Installation vorselektiert.\nWenn du keine Packete aus der Liste installieren willst, einfach Abbrechen.\nBitte beachten: Das LIP-Script deinstalliert keine Packete, insbesondere also keine Packete die in einem früheren Lauf aktiv waren,\nund diesmal nicht ausgewählt sind!" PH_PKGS
+	install_pkgs "Packete für Physiker installieren?" "Programme, die der OSAK/die ALUG sowie Lehrstühle der Physik für sinnvoll hält, sind bereits zur Installation vorselektiert.\nWenn du keine Packete aus der Liste installieren willst, einfach Abbrechen.\nBitte beachten: Das LIP-Script deinstalliert keine Packete, insbesondere also keine Packete die in einem früheren Lauf aktiv waren,\nund diesmal nicht ausgewählt sind!" PH_PKGS "PHYSIK"
 }
 
 install_m() {
-	install_pkgs "Packete für Mathematiker installieren?" "Programme, die der OSAK/die ALUG für sinnvoll hält, sind bereits zur Installation vorselektiert.\nWenn du keine Packete aus der Liste installieren willst, einfach Abbrechen.\nBitte beachten: Das LIP-Script deinstalliert keine Packete, insbesondere also keine Packete die in einem früheren Lauf aktiv waren,\nund diesmal nicht ausgewählt sind!" M_PKGS
+	install_pkgs "Packete für Mathematiker installieren?" "Programme, die der OSAK/die ALUG für sinnvoll hält, sind bereits zur Installation vorselektiert.\nWenn du keine Packete aus der Liste installieren willst, einfach Abbrechen.\nBitte beachten: Das LIP-Script deinstalliert keine Packete, insbesondere also keine Packete die in einem früheren Lauf aktiv waren,\nund diesmal nicht ausgewählt sind!" M_PKGS "MATHEMATIK"
 }
 
 install_if() {
-	install_pkgs "Packete für Informatiker/Programmierung installieren?" "Programme, die der OSAK/die ALUG für sinnvoll hält, sind bereits zur Installation vorselektiert.\nWenn du keine Packete aus der Liste installieren willst, einfach Abbrechen.\nBitte beachten: Das LIP-Script deinstalliert keine Packete, insbesondere also keine Packete die in einem früheren Lauf aktiv waren,\nund diesmal nicht ausgewählt sind!" IF_PKGS
+	install_pkgs "Packete für Informatiker/Programmierung installieren?" "Programme, die der OSAK/die ALUG für sinnvoll hält, sind bereits zur Installation vorselektiert.\nWenn du keine Packete aus der Liste installieren willst, einfach Abbrechen.\nBitte beachten: Das LIP-Script deinstalliert keine Packete, insbesondere also keine Packete die in einem früheren Lauf aktiv waren,\nund diesmal nicht ausgewählt sind!" IF_PKGS "INFORMATIK"
+}
+
+install_anaconda() {
+  if [ ! -d "$HIVE_DIR" ]
+        then
+          err "Hive konnte nicht gefunden werden ( kein LIP-Stick? ). Ohne Hive kann Anaconda leider nicht installiert werden!"
+        else
+          ARCH="$(uname -m)"
+          INSTALLER="$HIVE_DIR"/anaconda/Installer-
+          if [ "$ARCH" == "x86_64" ]; then
+             INSTALLER="${INSTALLER}64Bit"
+          else
+             INSTALLER="${INSTALLER}32Bit"
+          fi
+
+          INSTALLER="${INSTALLER}.sh"
+          echo "Benutze Anaconda-Installer: $INSTALLER ."
+          if [ -d "/opt/anaconda/" ]; then
+               if askyesno "Anaconda ist anscheinend schon installiert. Neuinstallieren?"; then
+                 echo "Entferne alte Installation..." 
+                 rm -R /opt/anaconda/
+                 echo "ok"
+               else
+                 echo "Installation von Anaconda wird abgebrochen..."
+                 return 0
+               fi
+          fi
+
+          $INSTALLER -b -p /opt/anaconda/
+          if [ $? -ne 0 ]; then
+             err "Der Anaconda-Installer hat versagt... ."
+             return 1
+          fi
+                  
+          echo "Registriere Anaconda in \$PATH"
+          pushd /
+          patch -p1 "$HIVE_DIR/anaconda/envpatch.patch"
+          popd
+          INSTALLED_PKGS="$INSTALLED_PKGS anaconda"
+          ok "Anaconda wurde anscheinend erfolgreich installiert!"
+               
+       
+  fi
+}
+
+create_doc()
+{
+  DOCUDIR="$MY_DIR/../Doku"
+  if [ ! -f "$DOCUDIR/HEADER.tex" ]; then #HEADER muss ex. sonst kommt auf keinen Fall was sinnvolles bei rum
+      echo "Leider ist keine Dokumentation auf dem LIP-Stick vorhanden..."
+      return 0 #linuxparty.sh soll auch ohne Doku Verzeichnis laufen
+  fi
+
+  DOCFILE=$(mktemp --suffix='.tex')
+  WORKING_DIR=$(mktemp -d)
+
+  for PACKAGE in $INSTALLED_PKGS; do
+    #zenity and kdialog return quoted package names; nice for apt call but bad here
+    CLEAN_PACKAGE_NAME=$(echo "$PACKAGE" | tr -d "\" ")
+    echo "Dokumentation fuer $PACKAGE von ${DOCUDIR}/${CLEAN_PACKAGE_NAME}.tex"
+    if [ -f "${DOCUDIR}/${CLEAN_PACKAGE_NAME}.tex" ]; then
+      #inclue is a bad idea here because pdflatex writes *.aux files to /cdrom
+      #echo "\\include{${DOCUDIR}/${CLEAN_PACKAGE_NAME}.tex}" >> "$DOCFILE"
+      echo
+      echo "% from ${DOCUDIR}/${CLEAN_PACKAGE_NAME}.tex :" >> "$DOCFILE"
+      cat "${DOCUDIR}/${CLEAN_PACKAGE_NAME}.tex" >> "$DOCFILE"
+    fi
+  done
+
+  pdflatex -output-directory "$WORKING_DIR" "$DOCFILE"
+  pdflatex -output-directory "$WORKING_DIR" "$DOCFILE" # ja, ist Absicht
+  if [ $? -ne 0 ]; then
+    err "Fehler beim kompilieren der Dokumentation."
+    return 1
+  fi
+  
+  cp "${WORKING_DIR}/$(basename -s .tex ${DOCFILE}).pdf" "$HOME/Deine-LIP-Dokumentation.pdf"
+
+  return $?
 }
 
 echo "Entferne Ubuntu Installer (bleibt manchmal über...)"
@@ -356,29 +459,9 @@ then
   #apt-install python-numpy python-simpy python-scipy python-matplotlib ipython python-dev gnuplot wxmaxima
   #ok "Python-SciPy, -NumPy, -Matplotlib, ipython, gnuplot, und WxMaxima wurden installiert"
   install_ph
-  if askyesno "ROOT installieren (Physiker) ?"
+  if askyesno "Anaconda installieren (Physiker) ?"
   then
-	if [ ! -d "$HIVE_DIR" ]
-	then
-	  err "Hive konnte nicht gefunden werden ( kein LIP-Stick? ). Ohne Hive kann ROOT leider nicht installiert werden!"
-	else
-	  #Basis Abhaengigkeiten
-          apt-install libx11-dev libxpm-dev libxft-dev libxext-dev
-          #Packete fuer vollen Umfang
-          apt-install gfortran libpcre3-dev xlibmesa-glu-dev libglew1.5-dev libftgl-dev libmysqlclient-dev libfftw3-dev cfitsio-dev graphviz-dev libavahi-compat-libdnssd-dev libldap2-dev python-dev libxml2-dev libkrb5-dev libgsl0-dev libqt4-dev
-          for archive in "$HIVE_DIR/root"*.tar.gz; do 
-	    	echo "Entpacke "$archive
-		$DEBUG tar -C "$HOME" -xf "$archive"
-	  done
-          CORES=`cat /proc/cpuinfo | grep processor | wc -l`
-	  echo "$CORES CPUs gefunden... benutze sie zum ROOT compilen"
-	  $DEBUG pushd "$HOME/root" || err "ROOT konnte nicht extrahiert werden..."
-	  $DEBUG ./configure
-	  $DEBUG make -j$CORES
-	  $DEBUG popd
-	  $DEBUG cat "$HIVE_DIR/root_env.sh" >> "$HOME/.bashrc"
-          ok "ROOT erfolgreich installiert"
-        fi
+     install_anaconda
   fi
 fi
 
@@ -395,4 +478,9 @@ echo "Installiere diese Packete bei Bedarf bitte selbst mit 'sudo apt-get instal
 echo "Deaktiviere LIP Software Repository"
 bash $MY_DIR/liprepoctl.sh off
 
+INSTALLED_PKGS="$INSTALLED_PKGS FOOTER"
+create_doc
+echo "Installierte Packete: $INSTALLED_PKGS"
+echo
+
 #end;
diff --git a/scripts/mount-stick-repo.sh b/scripts/mount-stick-repo.sh
index 36978d8..adcd3c9 100644
--- a/scripts/mount-stick-repo.sh
+++ b/scripts/mount-stick-repo.sh
@@ -48,7 +48,7 @@ else
 
   # see where it is mounted
   DEVFILE=${DEV#/dev/}
-  MPOINT="$(qdbus --system org.freedesktop.UDisks /org/freedesktop/UDisks/devices/${DEVFILE} org.freedesktop.DBus.Properties.Get org.freedesktop.UDisks.Device  "DeviceMountPaths" | head -n1)"
+  MPOINT="$(dbus-send --print-reply=literal --system --dest=org.freedesktop.UDisks /org/freedesktop/UDisks/devices/${DEVFILE} org.freedesktop.DBus.Properties.Get string:'org.freedesktop.UDisks.Device' string:'DeviceMountPaths' | tail -n +2 | tr -d "\ \]\[" | head -n 1)"
 
   echo "Der Stick it als '$MPOINT' gemountet"
 fi
-- 
GitLab