Skip to content
Snippets Groups Projects
Select Git revision
  • b09282888902a4ca4de8e650874218a98156a3b5
  • master default protected
2 results

simple_live_transcode.c

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    linuxparty.sh 17.57 KiB
    #!/bin/bash
    
    set -e
    
    #options for GUI are kdialog zenity none
    if [ -z "$GUI" ]; then
      echo "\$GUI is not set. Auto detecting GUI..."
    
      if command -v zenity 2>&1 > /dev/null && test -n "$DISPLAY"; then
        GUI=zenity
      elif command -v kdialog 2>&1 > /dev/null && test -n "$DISPLAY"; then
        GUI=kdialog
      else
        GUI=none
      fi
    fi
    
    echo "Using GUI=$GUI."
    
    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?
    
    #images already installed
    PREINSTALLED_PKGS="thunderbird vlc x2goclient p7zip-full unrar-free kile vim htop git gparted"
    
    #Liste, in der alle Pakete verzeichnet werden, die vom Skript tatsächlich installiert werden; Pseudo-Pakete sind "all-capital"
    INSTALLED_PKGS="HEADER COMMON $PREINSTALLED_PKGS"
    
    #Paketlisten zur Installation/Auswahl, nur Pakete die im Repo liegen. 
    #Hive-Programme (z.B. anaconda) müssen extra behandelt werden
    #Der Textinstaller installiert _ausschließlich_ Pakete bei denen Preinstalled gesetzt ist!
    #Syntax: preinstalled? pkgname description
    COMMON_PKGS=(\
    "TRUE" "gufw" "Firewall Frontend" \
    "TRUE" "pwgen" "Tool um Passwoerter zu generieren" \
    "TRUE" "inkscape" "Bildbearbeitung (Vektorbasiert)" \
    "TRUE" "gimp" "Bildbearbeitung (Pixelbasiert)" \
    "FALSE" "subversion" "Versionsverwaltungstool (zentral)" \
    "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" "openssh-server" "SSH-Server (s. KISS)" \
    "FALSE" "linux-firmware-nonfree" "Properitäre Firmware fuer exotische Notebooks/Hardware" \
    "FALSE" "zsh" "Alternative Shell" \
    "FALSE" "zsh-doc" "Dokumentation von zsh" \
    "FALSE" "lftp" "FTP-Client" \
    "FALSE" "gddrescue" "Falls Daten gelöscht, letzte Option vor dem Tod der Hoffnung" \
    "FALSE" "liblapack-dev" "LAPACK ist eine Standard-Numerik-Bibliothek für Physiker und Numeriker" \
    "FALSE" "liblapack-doc" "LAPACK Dokumentation (s. oben)" \
    "FALSE" "x2goclient" "Remote Desktop Client" \
    )
    
    PH_PKGS=(\
    "TRUE" "python-numpy" "Numeric Bibiliothek für Python" \
    "TRUE" "python-simpy" "Simulationsframework für Python" \
    "TRUE" "python-scipy" "Bibliothek für scientific computing" \
    "TRUE" "python-matplotlib" "Schnittstelle zum Plotten mit Python" \
    "TRUE" "ipython" "Interaktiver Python Interpreter mit Tab-Vervollständgung" \
    "TRUE" "gnuplot" "Programm um Funktions- und Datenplots anzufertigen" \
    "TRUE" "wxmaxima" "Graphische Benutzeroberfläche für das Maxima Computer Algebra System" \
    "TRUE" "root-system" "Datenanalyse Framework vom CERN" \
    "TRUE" "bpython" "Ein weiterer interaktiver Python Interpreter" \
    "TRUE" "spyder" "Python IDE (die, die in Anaconda benutzt wird)" \
    )
    
    IF_PKGS=(\
    "FALSE" "postgresql" "Datenbank-Server. Nett um in der Datenbanken-Vorlesungen Dinge auszuprobieren.\n Aber relativ groß." \
    "TRUE" "dia" "Graphisches Tool, um UML/ER Diagramme für die Vorlesungen Softwaretechnik und Datenbanken anzufertigen" \
    "TRUE" "ghc" "Glaskow Haskell Compiler für die Vorlesung Programmierung" \
    "TRUE" "default-jdk" "Java JDK für die Vorlesung Programmierung" \
    "TRUE" "swi-prolog" "Prolog Interpreter/Compiler für die Vorlesung Programmierung" \
    )
    
    M_PKGS=(\
    "TRUE" "singular" "Tool für die Vorlesung Computeralgebra" \
    )
    
    if [ -n "$DEBUG" ]
    then
      # DEBUG-Modus:
      echo
      echo "DEBUG  Modus aktiviert"
      echo "MY_DIR: $MY_DIR"
      echo
      DEBUG="echo DEBUG: "
      apt-get() {
        echo "APT-GET $@"
      }
      #/ DEBUG-Modus:
    else
      # Root pruefen
      if [[ $EUID -ne 0 ]]
      then
        echo "Du bist nicht ROOT ... verwende \"sudo bash $0\" !"
        exit 1
      fi
    fi
    
    preinstalledpkgs() {
    	local pkglist=$1[@]
    	local take="FALSE"
    	local step=0
    	for i in "${!pkglist}"
    	do
    		case $step in
    			0) take="$i"
    			   step=1
    			;;
    			1) if [ $take = "TRUE" ]; then
    				echo -n " $i"
    			   fi
    			   step=2
    			;;
    			*)
    			   step=0
    			;;
    		esac
    	done
    }
    
    bright() {
      # gruen
      echo -ne "\033[1m$@\033[0m"
    }
    
    ok() {
      echo
      echo -ne "\033[32;7m"    # gruen
      echo -n "$@"
      echo -e "\033[0m"       # normal
    }
    
    warn() {
      echo
      echo -ne "\033[33;7m"    # gelb
      echo -n "$@"
      echo -e "\033[0m"       # normal
    }
    
    case "$GUI" in
      none)
        askyesno() {
    	  while true
    	  do
    	    read -n1 -p "$1 [j,n]"
    	    echo
    	    case "$REPLY" in
    	      y|Y|j|J) return 0;;
    	      n|N) return 1;;
    	      *) echo 'Antworte bitte mit "j" für "Ja" oder "n" für "Nein"' ;;
    	    esac
    	  done
        }
    
        pressenter() {
          echo $@
          echo "Drücke <Enter> um fortzufahren (Strg-C zum Abbrechen)"
          read
        }
    
        err() {
          echo
          echo -ne "\033[31;7m"    # rot
          echo -n "$@"
          echo -e "\033[0m"       # normal
        }
    
        install_pkgs() {
    	    #ACHTUNG: nicht vorausgewählte Pakete werden _nie_ installiert!
    	    local arg=$3[@]
    	    pkglist=$(preinstalledpkgs $3)
    
    	    if [ -n "$pkglist" ]; then
                        INSTALLED_PKGS="$INSTALLED_PKGS $4" #register pseudo package
    		    apt-install $pkglist
    		    ok "$pkglist installiert"
    	    else
    		    ok "Keine Pakete installiert" 
    	    fi
        }
    
        ask_license() {
                #TODO dumm Benutzer kann evtl nicht ganze Lizenz lesen...
                cat "$1"
                askyesno "Die obige Lizenzvereinbarung akzeptieren?"
                return $?
        }
      ;;
      zenity)
        askyesno() {
    	    zenity --question --text "$@" 2> /dev/null
        }
    
        err() {
    	    zenity --error --text "$@" 2> /dev/null
        }
    
        pressenter() {
    	    zenity --info --text "$@" 2> /dev/null
        }
        install_pkgs() {
    	    local pkglist=$3[@]
    	    INSTALL=$(zenity --list --title "$1" --text "$2" --checklist --separator=" " --width=786 --height=400 --column "Installieren?" --column "Paket" --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
    		    ok "Keine Pakete installiert" 
    	    fi
        }
    
        ask_license() {
                zenity --text-info \
                --title="Lizenzvereinbarung akzeptieren" \
                --filename="$1" \
                --checkbox="Ich habe die Lizenzvereinbarung gelesen und akzeptiere sie."
    
                return $?
        }
    
        ;;
      kdialog)
        askyesno() {
    	    kdialog --yesno "$@" 2> /dev/null
        }
    
        err() {
    	    kdialog --error "$@" 2> /dev/null
        }
    
        pressenter() {
    	    kdialog --msgbox "$@" 2> /dev/null
        }
    
        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 $(echo $INSTALL | tr -d \")
               ok "$INSTALL installiert"
           else
               ok "Keine Pakete installiert" 
           fi
        }
    
        ask_license() {
           kdialog --title="Lizenzvereinbarung akzeptieren" \
                   --yes-label "Ich habe die Lizenz gelsen und akzeptiere sie." \
                   --no-label "Abbrechen" --yesno "$(cat "$1")"
    
           return $?
        }
        ;;
      *)
        echo "Ungültige GUI Option '$GUI'. Möglich Werte sind 'kdialog', 'zenity' oder 'none'"
        exit 1
        ;;
    esac
    
    # Verbose error trapping
    showerr() {
      err "Bei der Installation ist ein Fehler aufgetreten. Frage einen Helfer."
    }
    trap showerr ERR
    
    apt-install() {
      apt-get install --quiet -y --force-yes $@
      INSTALLED_PKGS="$INSTALLED_PKGS $@"
    }
    
    install_common() {
    	install_pkgs "Allg. Pakete installieren?" "Programme, die der OSAK/die ALUG für sinnvoll hält, sind bereits zur Installation vorselektiert.\nWenn du keine Pakete aus der Liste installieren willst, einfach Abbrechen.\nBitte beachten: Das LIP-Script deinstalliert keine Pakete, insbesondere also keine Pakete die in einem früheren Lauf aktiv waren,\nund diesmal nicht ausgewählt sind!" COMMON_PKGS ""
    }
    
    install_ph() {
    	install_pkgs "Pakete 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 Pakete aus der Liste installieren willst, einfach Abbrechen.\nBitte beachten: Das LIP-Script deinstalliert keine Pakete, insbesondere also keine Pakete die in einem früheren Lauf aktiv waren,\nund diesmal nicht ausgewählt sind!" PH_PKGS "PHYSIK"
    }
    
    install_m() {
    	install_pkgs "Pakete für Mathematiker installieren?" "Programme, die der OSAK/die ALUG für sinnvoll hält, sind bereits zur Installation vorselektiert.\nWenn du keine Pakete aus der Liste installieren willst, einfach Abbrechen.\nBitte beachten: Das LIP-Script deinstalliert keine Pakete, insbesondere also keine Pakete die in einem früheren Lauf aktiv waren,\nund diesmal nicht ausgewählt sind!" M_PKGS "MATHEMATIK"
    }
    
    install_if() {
    	install_pkgs "Pakete für Informatiker/Programmierung installieren?" "Programme, die der OSAK/die ALUG für sinnvoll hält, sind bereits zur Installation vorselektiert.\nWenn du keine Pakete aus der Liste installieren willst, einfach Abbrechen.\nBitte beachten: Das LIP-Script deinstalliert keine Pakete, insbesondere also keine Pakete 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
              ANACONDA_DIR=/opt/anaconda
              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 "$ANACONDA_DIR" ]; then
                   if askyesno "Anaconda ist anscheinend schon installiert. Neuinstallieren?"; then
                     echo "Entferne alte Installation..." 
                     rm -R "$ANACONDA_DIR"
                     echo "ok"
                   else
                     echo "Installation von Anaconda wird abgebrochen..."
                     return 0
                   fi
              fi
    
              if [ -f "$HIVE_DIR"/anaconda/LICENSE.txt ] && ! (ask_license "$HIVE_DIR"/anaconda/LICENSE.txt); then
                   echo "Lizenz nicht akzeptiert. Anaconda wird nicht installiert."
                   return 0
              fi
    
              bash $INSTALLER -b -p "$ANACONDA_DIR"
              if [ $? -ne 0 ]; then
                 err "Der Anaconda-Installer hat versagt... ."
                 return 1
              fi
    
              echo "Installiere Qt-Version-Fix-Wrapper"
              mkdir -p "$ANACONDA_DIR"/lipbin
              cp "$HIVE_DIR"/anaconda/anaconda_wrapper.sh "$ANACONDA_DIR"/lipbin
              cp "$HIVE_DIR"/anaconda/qt.conf "$ANACONDA_DIR"/bin
    
              pushd "$ANACONDA_DIR"/bin > /dev/null
              find -type f -executable -exec bash -c 'FILE={}; ln -s '$ANACONDA_DIR'/lipbin/anaconda_wrapper.sh '$ANACONDA_DIR'/lipbin/$FILE; chmod +x $FILE' \;
              popd > /dev/null
    
              echo "Registriere Anaconda in \$PATH"
              pushd / > /dev/null
              patch -p1 < "$HIVE_DIR/anaconda/envpatch.patch"
              popd > /dev/null
    
              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)
      cp -a "$DOCUDIR/." "$WORKING_DIR"
    
      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 ${WORKING_DIR}/${CLEAN_PACKAGE_NAME}.tex"
        if [ -f "${WORKING_DIR}/${CLEAN_PACKAGE_NAME}.tex" ]; then
          echo "\\input{${CLEAN_PACKAGE_NAME}.tex}" >> "$WORKING_DIR/DOCUMENTATION.gen.tex"
          #cat "${DOCUDIR}/${CLEAN_PACKAGE_NAME}.tex" >> "$DOCFILE"
        fi
      done
    
      pushd "$WORKING_DIR"
      pdflatex -output-directory "$WORKING_DIR" "DOCUMENTATION.gen.tex"
      pdflatex -output-directory "$WORKING_DIR" "DOCUMENTATION.gen.tex" # ja, ist Absicht
      if [ $? -ne 0 ]; then
        err "Fehler beim kompilieren der Dokumentation."
        return 1
      fi
      popd
    
      USER_HOME=$(getent passwd "${SUDO_USER:-$USER}" | cut -d ':' -f6)
      cp "${WORKING_DIR}/DOCUMENTATION.gen.pdf" "${USER_HOME}/Deine-LIP-Dokumentation.pdf"
      RC=$?
      pressenter "Eine Dokumentation der von dir installierten Paktete wurde in deinem Benutzerverzeichnis ($HOME) als 'Deine-LIP-Dokumentation.pdf' abegelegt."
    
      return $RC
    }
    
    echo "Entferne Ubuntu Installer (bleibt manchmal über...)"
    apt-get purge ubiquity --yes || true
    apt-get autoremove --yes
    
    echo
    echo "Auf dem Install-USB-Stick liegen viele der zu installierenden Pakete"
    bright "Es ist dringend empfohlen, jetzt einen Instaĺl-USB-Stick einzustecken"
    echo
    echo "Sonst muß aus dem Internet heraus installiert werden. Das ist langsam, geht aber auch."
    
    HAVELIPSTICK=0
    #Offline-Repo einbinden
    if bash "$MY_DIR/infuse_offline_repo.sh"
    then
      HAVELIPSTICK=1
      ok "USB-Repository gefunden und eingebunden"
    else
      if [[ $? -eq 2 ]]
      then
        # Exit code 2 is handed up from mount-stick-repo.sh -> "Installation abbrechen"
        err "Installation abgebrochen"
        exit 2
      else
        #warn "LIP-Install-USB-Stick nicht nutzbar."
        #warn "Stelle eine Internetverbindung her und mache weiter (langsames Installieren)"
        #warn "Wenn Du nicht weiter weißt, frage einen Helfer."
        #pressenter
        pressenter "LIP-Install-USB-Stick nicht nutzbar.\nStelle eine Internetverbindung her und mache weiter (langsames Installieren)\nWenn Du nicht weiter weißt, frage einen Helfer."
      fi
    fi
    
    # Paketquellen bereitlegen.
      echo
      echo "Bereitstellung der Paketquellen"
    # Entweder apt-get update
    # Oder apt-clone restore
    if [[ $HAVELIPSTICK -eq 1 ]]
    then
    # infuse script has already done our job here
    echo "Nutze Pakete vom USB-Repository"
    #  echo "Bereite apt-clone vor"
    #  dpkg -GERi "/var/cache/apt/archives/dpkg-early-install"  >/dev/null 2>&1
    #  APT_CLONE_BACKUP="$(mktemp --tmpdir="$HOME" --suffix='.apt-clone.tar.gz')"
    #  echo "Erstelle Backup der apt Paketquellen in ${APT_CLONE_BACKUP}"
    #  apt-clone clone "${APT_CLONE_BACKUP}"  >/dev/null 2>&1
    #  echo "Wende apt-clone an"
    #  apt-clone restore "/var/cache/apt/archives/apt-clones/ftp-halifax.apt-clone.tar.gz" >/dev/null 2>&1 || true
    else
      #echo "Update der Paketquellen aus dem Internet mit 'apt-get update'"
      # Wie sichert man apt-get update ab ?
     # apt-get -o Dir::Etc::SourceList=/etc/apt/sources.list.d/lipoffline.list,Dir::Etc::SourceParts="" update
       apt-get update
    fi
    
    # System absichern
    if askyesno "Netzwerk: Soll die Ubuntu Firewall (ufw/gufw) aktiviert werden ?"
    then
      $DEBUG ufw enable
    fi
    
    echo "Installation:"
    echo "Programme, die für alle Fachrichtungen interressant sind (7zip, gimp, git, ... )"
    if [ -z "$NOGUI" ] || (askyesno "Sollen diese Programme installiert werden ?"); then
    	install_common
    fi
    
    #Fachrichtung wählen
    echo
    echo "Auswahl fachspezifischer Software:"
    
    if askyesno "Software für Vorlesung 'Programmierung' (Pflicht für Informatiker) installieren ?"
    then
      #apt-install haskell-platform java7-jdk swi-prolog
      #ok "Haskell, Java, Prolog und Eclipse wurden installiert"
      install_if
    fi
    
    #FIXME: currently singular cannot be installed on ubuntu 15.10 (this is the only package in the math section)
    #if askyesno "Software für Mathematik installieren ?"
    #then
      #apt-install haskell-platform java7-jdk swi-prolog
      #ok "Haskell, Java, Prolog und Eclipse wurden installiert"
     # install_m
    #fi
    
    if askyesno "Software für Physiker (Python-SciPy,-NumPy,diverse Plot-Programme) installieren ?"
    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 "Anaconda installieren (für die DV Vorlesung in der Physik) ?"
      #then
      #   install_anaconda
      #fi
    fi
    
    echo
    pressenter "Installation abgeschlossen!\n\nFalls Du doch noch mehr Software installieren möchtest, starte $0 erneut."
    
    echo
    #Folgende Pakete koennen auch fuer Helfer waehrend der Installation interessant sein:
    PKGS_EXTRA="fityk openssh-server linux-firmware-nonfree zsh zsh-doc lftp graphviz gddrescue smartmontools"
    echo "Auf dem Installer-USB-Stick sind außerdem noch die folgenden Pakete enthalten:"
    echo ${PKGS_EXTRA}
    echo "Installiere diese Pakete bei Bedarf bitte selbst mit 'sudo apt-get install <Paketname>' "
    
    echo "Deaktiviere LIP Software Repository"
    bash $MY_DIR/liprepoctl.sh off
    
    INSTALLED_PKGS="$INSTALLED_PKGS FOOTER"
    create_doc
    echo "Installierte Pakete: $INSTALLED_PKGS"
    echo
    
    #end;