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