Select Git revision
CalamaresAddPlugin.cmake
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
build.sh 14.91 KiB
#!/bin/bash
set -e
#options for GUI are kdialog zenity none
GUI=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)" \
"TRUE" "subversion" "Versionsverwaltungstool (zentral)" \
"TRUE" "graphviz" "Tool zum visualisieren von Graphen" \
"TRUE" "gnome" "GNOME3 Desktop Umgebung" \
"TRUE" "xubuntu-desktop" "Xubuntu Desktop Umgebung und standard Programme" \
"TRUE" "fityk" "Tool zum Daten-Fitting und Analyse" \
"TRUE" "openssh-server" "SSH-Server (s. KISS)" \
"TRUE" "linux-firmware-nonfree" "Properitäre Firmware fuer exotische Notebooks/Hardware" \
"TRUE" "zsh" "Alternative Shell" \
"TRUE" "zsh-doc" "Dokumentation von zsh" \
"TRUE" "lftp" "FTP-Client" \
"TRUE" "gddrescue" "Falls Daten gelöscht, letzte Option vor dem Tod der Hoffnung" \
"TRUE" "liblapack-dev" "LAPACK ist eine Standard-Numerik-Bibliothek für Physiker und Numeriker" \
"TRUE" "liblapack-doc" "LAPACK Dokumentation (s. oben)" \
)
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=(\
"TRUE" "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" \
)
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
return 0
}
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() {
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() {
echo "foo"
}
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 "Dokummentation der von dir installierten Paktete wurde in deinem Benutzerverzeichnis ($HOME) als 'Deine-LIP-Dokumentation.pdf' abegelegt."
return $RC
}
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
HAVELIPSTICK=1
# 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
#fi
# System absichern
if askyesno "Netzwerk: Soll die Ubuntu Firewall (ufw/gufw) aktiviert werden ?"
then
echo $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
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;