diff --git a/bootflags.txt b/bootflags.txt index ada7ed786c29d878c838c534f547529203c1ba09..795e992cd2003ac5341112169d3a31c3eb435df6 100644 --- a/bootflags.txt +++ b/bootflags.txt @@ -1,31 +1,70 @@ -acpi=copy_dsdt Korrigiert DSDT, insbesondere bei Toshiba-Notebooks. -acpi=force Für BIOS-Versionen vor 2002, aktiviert die ACPI-Unterstützung zwangsweise im Kernel. -acpi=off Deaktiviert ACPI vom BIOS (kann helfen, aber auch zur "Kernelpanic" führen). -all_generic_ide Generischen IDE-Treiber für alle Geräte verwenden, die vom BIOS erkannt wurden. -bootchart=disable Deaktiviert die Visualisierung bzw. die Aufzeichung eines Boot-Charts bei installiertem BootChart -BOOT_DEBUG=2|3 Fehlersuche während des Startvorgangs -bootdegraded Bootet Ubuntu auch auf einem inkonsistenten RAID-1 -DEBCONF_DEBUG=5 Ausführliche Fehlersuche -elevator=deadline so wird für alle Blockgeräte der Deadline Scheduler verwendet anstatt CFQ, kann bei SSD-Festplatten nützlich sein -fb=false Deaktiviert den Framebuffer. -hpet=force Erzwingt die Aktivierung das HPET-Timers, hilfreich beim Energiesparen bei Laptops, dessen BIOS die HPET vor dem Betriebssystem verstecken (z.B. IBM Thinkpad X31) -ht=on Aktiviert Hyper-Threading. -irqpoll zusammengezogen aus IRQ und Polling. IRQ ist eine Unterbrechungsanforderung per Leitung an den Prozessor. Polling ist das Verfahren zur Steuerung des Zugriffs auf angeschlossene Geräte. -noapic, noagp, noapm Deaktiviert die automatische Erkennung von APIC (IRQ-Verwaltung), AGP (Grafik) oder der Energieverwaltung. -nolapic Deaktiviert die lokale APIC-Erkennung. -nolapic_timer Deaktiviert den lokalen APIC-Timer. Selektiver als noapic und nolapic. Instabilitäten durch den Timer werden umgangen, der Rest von APIC bleibt voll funktionsfähig. Erste Wahl bei Notebooks, da das Energiemanagement funktional bleibt. -nomodeset deaktiviert modesetting im Kernel, und die Infrastruktur von X.org wird verwendet (z.B. Acer Extensa 5635Z) +acpi=copy_dsdt Korrigiert DSDT, insbesondere bei Toshiba-Notebooks. +acpi=force Für BIOS-Versionen vor 2002, aktiviert die ACPI + -Unterstützung zwangsweise im Kernel. +acpi=off Deaktiviert ACPI vom BIOS (kann helfen, aber auch zur + "Kernelpanic" führen). +all_generic_ide Generischen IDE-Treiber für alle Geräte verwenden, + die vom BIOS erkannt wurden. +bootchart=disable Deaktiviert die Visualisierung bzw. die Aufzeichung + eines Boot-Charts bei installiertem BootChart +BOOT_DEBUG=2|3 Fehlersuche während des Startvorgangs +bootdegraded Bootet Ubuntu auch auf einem inkonsistenten RAID-1 +DEBCONF_DEBUG=5 Ausführliche Fehlersuche +elevator=deadline so wird für alle Blockgeräte der Deadline Scheduler + verwendet anstatt CFQ, kann bei SSD-Festplatten + nützlich sein +fb=false Deaktiviert den Framebuffer. +hpet=force Erzwingt die Aktivierung das HPET-Timers, hilfreich + beim Energiesparen bei Laptops, dessen BIOS die HPET + vor dem Betriebssystem verstecken + (z.B. IBM Thinkpad X31) +ht=on Aktiviert Hyper-Threading. +irqpoll zusammengezogen aus IRQ und Polling. IRQ ist eine + Unterbrechungsanforderung per Leitung an den Prozessor. + Polling ist das Verfahren zur Steuerung des Zugriffs + auf angeschlossene Geräte. +noapic, noagp, noapm Deaktiviert die automatische Erkennung von APIC + (IRQ-Verwaltung), AGP (Grafik) oder der + Energieverwaltung. +nolapic Deaktiviert die lokale APIC-Erkennung. +nolapic_timer Deaktiviert den lokalen APIC-Timer. Selektiver als + noapic und nolapic. Instabilitäten durch den Timer + werden umgangen, der Rest von APIC bleibt voll + funktionsfähig. Erste Wahl bei Notebooks, da das + Energiemanagement funktional bleibt. +nomodeset deaktiviert modesetting im Kernel, und die + Infrastruktur von X.org wird verwendet + (z.B. Acer Extensa 5635Z) pci=bios pci=biosirq -pci=noacpi Schaltet die ACPI-Erkennung während der PCI-Konfiguration aus (ist insbesondere bei manchen VIA-Chipsätzen notwendig). -pci=nomsi Deaktiviert "Message Signaled Interrupts". Hilft oft bei Problemen mit dem SATA-Controller auf neueren Mainboards. -pci=routeirq IRQ-Autorouting, hilfreich für einige Mainboards (zum Beispiel Asus A7N8X). -processor.max_cstate=3 behebt das Problem des "C4-Fiepen" - (siehe unten) -single booten in den Single-User-Mode -text booten in die Konsole, X bleibt aussen vor, interaktiver Modus mit Netzwerk vergleichbar Runlevel 3 +pci=noacpi Schaltet die ACPI-Erkennung während der PCI- + Konfiguration aus (ist insbesondere bei manchen VIA- + Chipsätzen notwendig). +pci=nomsi Deaktiviert "Message Signaled Interrupts". Hilft oft + bei Problemen mit dem SATA-Controller auf neueren + Mainboards. +pci=routeirq IRQ-Autorouting, hilfreich für einige Mainboards + (zum Beispiel Asus A7N8X). +processor.max_cstate=3 behebt das Problem des "C4-Fiepen" - + (siehe unten) +single booten in den Single-User-Mode +text booten in die Konsole, X bleibt aussen vor, interaktiver Modus + mit Netzwerk vergleichbar Runlevel 3 usb=bios -vga=... Stellt die Auflösung von Grub und der Konsole ein (siehe unten). -xforcevesa Der XServer (graphische Oberfläche) wird unabhängig von der verwendeten Hardware nur für "vesa" konfiguriert. -nomodeset Verhindert, dass der Kernel die Mode-Settings für die Grafikkarte durchführt. Die Mode-Settings werden wie vor Kernel 2.6.28 im User-Mode durchgeführt (siehe auch:Mode-Settings). -noplymouth Schaltet die Anzeige von Plymouth ab, diese Ergänzung ersetzt das nosplash aus dem alten Ubuntu-Splash. -pcie_aspm=force Erzwingt Active State Power Management (Kernel 2.6.38+) \ No newline at end of file +vga=... Stellt die Auflösung von Grub und der Konsole ein. +xforcevesa Der XServer (graphische Oberfläche) wird unabhängig von der + verwendeten Hardware nur für "vesa" konfiguriert. +nomodeset Verhindert, dass der Kernel die Mode-Settings für die + Grafikkarte durchführt. Die Mode-Settings werden wie vor + Kernel 2.6.28 im User-Mode durchgeführt + (siehe auch:Mode-Settings). +noplymouth Schaltet die Anzeige von Plymouth ab, diese Ergänzung + ersetzt das nosplash aus dem alten Ubuntu-Splash. +pcie_aspm=force Erzwingt Active State Power Management (Kernel 2.6.38+) +nomodeset Verhindert, dass der Kernel die Mode-Settings für die + Grafikkarte durchführt. Die Mode-Settings werden wie vor + Kernel 2.6.28 im User-Mode durchgeführt + (siehe auch:Mode-Settings). +noplymouth Schaltet die Anzeige von Plymouth ab, diese Ergänzung + ersetzt das nosplash aus dem alten Ubuntu-Splash. +pcie_aspm=force Erzwingt Active State Power Management (Kernel 2.6.38+) diff --git a/grub/grub.cfg b/grub/grub.cfg index bd356e09bb14b9fd850674d9b538b58a678382f9..e5c41e28c53813ee6547dc2cf90da927156b78fc 100644 --- a/grub/grub.cfg +++ b/grub/grub.cfg @@ -10,6 +10,8 @@ fi set menu_color_normal=white/black set menu_color_highlight=black/light-gray +set pager=1 + function set64 { set bits="64" set arch="x86_64" @@ -145,6 +147,11 @@ menuentry "${lip_flavor} ${lip_version}${lip_extra_info} ${bits}bit (english, fn LoadCasper } +menuentry "Show bootflags" { + cat "/bootflags.txt" + read +} + menuentry "${lip_flavor} ${lip_version}${lip_extra_info} ${bits}bit (deutsch, load casper from first disk)" { set cmdline="debian-installer/locale=de_DE console-setup/layoutcode=de live-media=/dev/sda1" LoadCasper diff --git a/scripts/linuxparty.py b/scripts/linuxparty.py new file mode 100755 index 0000000000000000000000000000000000000000..4d8bfe9b149db6df459428834ca284ee11f92c36 --- /dev/null +++ b/scripts/linuxparty.py @@ -0,0 +1,341 @@ +#!/usr/bin/python3 +#this is treeview branch + +import sys, os, io, subprocess +import json +import apt +import dbus +import traceback +import tempfile +from PyQt5 import QtWidgets, QtGui, QtCore +from collections import OrderedDict + +cache = apt.cache.Cache() + +def get_devices(): + devices = [] + bus = dbus.SystemBus() + udisks_manager = bus.get_object("org.freedesktop.UDisks2", "/org/freedesktop/UDisks2") + manager_iface = dbus.Interface(udisks_manager, "org.freedesktop.DBus.ObjectManager") + try: + for k,v in manager_iface.GetManagedObjects().items(): + drive_info = v.get("org.freedesktop.UDisks2.Block", {}) + if drive_info.get("IdUsage") == "filesystem": + label = str(drive_info.get("IdLabel")) + device = bytearray(drive_info.get("Device")).replace(b"\x00",b"").decode("utf-8") + fs_info = v.get("org.freedesktop.UDisks2.Filesystem") + dbus_mpoints = fs_info.get("MountPoints") + mpoints = [bytearray(mpoint).replace(b"\x00",b"").decode("utf-8") for mpoint in dbus_mpoints] + devices.append((label, device, mpoints)) + except Exception as ex: + traceback.print_exc(ex) + print("No devices found") + return devices + +def mount_stick(dev): + bus = dbus.SystemBus() + udisks = bus.get_object("org.freedesktop.UDisks2", "/org/freedesktop/UDisks2/block_devices/%s"%(dev,)) + iface = dbus.Interface(udisks, "org.freedesktop.UDisks2.Filesystem") + res = None + try: + res = bytearray(iface.Mount()).replace(b"\x00",b"").decode("utf-8") + except Exception as ex: + traceback.print_exc(ex) + print("Could not mount %s"%(dev,)) + return res + +def find_lipstick(): + devices = get_devices() + stick = None + for device in devices: + if device[0].lower()=="lipstick": + stick = device + return stick + +def enable_offline_repo(gui): + try_again = True + stick = None + while True: + stick = find_lipstick() + if stick is not None: + if len(stick[2])<1: + mount_stick(stick[1]) + stick = find_lipstick() + + if stick is None or (type(stick) is tuple and len(stick[2])<=0): + choice = QtWidgets.QMessageBox.question(gui, 'LIPStick nicht gefunden!', "Möchtest du noch einmal versuchen den LIPStick zu finden?", QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No) + if choice == QtWidgets.QMessageBox.No: + try_again = False + else: + try_again = False + if not try_again: + break + + if stick is None: + QtWidgets.QMessageBox.critical(gui, "Kein LIPStick gefunden", "Es wird ohne LIPStick weiter gemacht") + return + + subprocess_wrap(['/bin/bash', basedir+"/liprepoctl.sh", "on", stick[2][0]]) + +def disable_offline_repo(): + subprocess_wrap(['/bin/bash', basedir+"/liprepoctl.sh", "off"]) + + +def subprocess_wrap(what): + proc = subprocess.Popen(what, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + while True: + status = proc.poll() + if status is not None: + break + output = proc.stdout.readline() + if output == '' and status: + break + if output: + print(output.strip().decode('utf-8')) + rc = proc.poll() + print("Subprocess exited with status", rc) + return rc + +def get_mountpoint(dev): + iface = QtDBus.QDBusInterface("org.freedesktop.UDisks2", "/org/freedesktop/UDisks2/block_devices/%s"%(dev,), "org.freedesktop.DBus.Properties", QtDBus.QDBusConnection.systemBus()) + msg = iface.call("Get", "org.freedesktop.UDisks2.Filesystem", "MountPoints") + mpoint = msg.arguments()[0][0].data().decode('utf-8')[:-1] + print(mpoint) + return mpoint + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + MainWindow.setObjectName("MainWindow") + MainWindow.resize(700, 500) + self.centralwidget = QtWidgets.QWidget(MainWindow) + self.centralwidget.setObjectName("centralwidget") + self.gridLayout = QtWidgets.QGridLayout(self.centralwidget) + self.gridLayout.setObjectName("gridLayout") + self.treeView = QtWidgets.QTreeView(self.centralwidget) + self.treeView.setGeometry(QtCore.QRect(10, 10, 781, 521)) + self.treeView.header().setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents) + self.treeView.setHeaderHidden(True) + self.gridLayout.addWidget(self.treeView, 0, 0, 1, 4) + self.progressBar = QtWidgets.QProgressBar(self.centralwidget) + self.progressBar.hide() + self.progressBar.setProperty("value", 0) + self.progressBar.setObjectName("progressBar") + self.gridLayout.addWidget(self.progressBar, 2, 0, 1, 1) + self.btnr = QtWidgets.QPushButton(self.centralwidget) + self.btnr.setObjectName("btnr") + self.gridLayout.addWidget(self.btnr, 2, 2, 1, 1) + self.btnl = QtWidgets.QPushButton(self.centralwidget) + self.btnl.setObjectName("btnl") + self.gridLayout.addWidget(self.btnl, 2, 1, 1, 1) + MainWindow.setCentralWidget(self.centralwidget) + self.menubar = QtWidgets.QMenuBar(MainWindow) + self.menubar.setGeometry(QtCore.QRect(0, 0, 600, 22)) + self.menubar.setObjectName("menubar") + self.menuFile = QtWidgets.QMenu(self.menubar) + self.menuFile.setObjectName("menuFile") + self.menuAbout = QtWidgets.QMenu(self.menubar) + self.menuAbout.setObjectName("menuAbout") + MainWindow.setMenuBar(self.menubar) + self.actionQuit = QtWidgets.QAction(MainWindow) + self.actionQuit.setObjectName("actionQuit") + self.actionInfo = QtWidgets.QAction(MainWindow) + self.actionInfo.setObjectName("actionInfo") + self.menuAbout.addAction(self.actionInfo) + self.menubar.addAction(self.menuFile.menuAction()) + self.menubar.addAction(self.menuAbout.menuAction()) + + self.retranslateUi(MainWindow) + QtCore.QMetaObject.connectSlotsByName(MainWindow) + + def retranslateUi(self, MainWindow): + _translate = QtCore.QCoreApplication.translate + MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) + self.btnr.setText(_translate("MainWindow", "&Quit")) + self.btnl.setText(_translate("MainWindow", "&Install")) + self.menuFile.setTitle(_translate("MainWindow", "&File")) + self.menuAbout.setTitle(_translate("MainWindow", "&About")) + self.actionQuit.setText(_translate("MainWindow", "&Quit")) + self.actionInfo.setText(_translate("MainWindow", "&Info")) + +class Main(QtWidgets.QMainWindow): + def __init__(self): + QtWidgets.QMainWindow.__init__(self) + self.ui = Ui_MainWindow() + self.ui.setupUi(self) + + extractAction = QtWidgets.QAction("&Quit", self) + extractAction.setShortcut("Ctrl+Q") + extractAction.setStatusTip('Leave the Application') + extractAction.triggered.connect(self.close_application) + + self.ui.menuFile.addAction(extractAction) + self.ui.btnr.clicked.connect(self.close_application) + + + def close_application(self): + choice = QtWidgets.QMessageBox.question(self, 'Close the Application?', "No Packages will be installed.", QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No) + if choice == QtWidgets.QMessageBox.Yes: + QtCore.QCoreApplication.instance().quit() + else: + pass + +def installProcess(): + global pkglist + + window.ui.btnl.hide() + window.ui.btnr.setText("&Finish") + window.ui.progressBar.show() + window.ui.progressBar.setRange(0,0) + pkglist = getPackagelistTree() + enable_offline_repo(window) + installPackages(pkglist) + #window.ui.progressBar.setRange(0,1) + #window.ui.progressBar.setValue(1) + makeDoku(pkglist) + showSuccBox() + disable_offline_repo() + +def showSuccBox(): + succBox = QtWidgets.QMessageBox() + succBox.setText("The selected packages have been installed.") + succBox.setWindowTitle("Installation Finished!") + succBox.setIcon(1) + sys.exit(succBox.exec_()) + +def showErrorBox(): + errorBox = QtWidgets.QMessageBox() + errorBox.setText("Something went wrong. No packages have been installed.") + errorBox.setWindowTitle("Error") + errorBox.setIcon(3) + sys.exit(errorBox.exec_()) + +def showErrorBox(errorstring): + errorBox = QtWidgets.QMessageBox() + errorBox.setText(errorstring) + errorBox.setWindowTitle("Error") + errorBox.setIcon(3) + sys.exit(errorBox.exec_()) + +def chooseFirewall(): + askBox = QtWidgets.QMessageBox() + askBox.setText("Netzwerk: Soll die Ubuntu Firewall (ufw/gufw) aktiviert werden?") + askBox.setIcon(4) + askBox.setStandardButtons(QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No) + result = askBox.exec_() + if result == QtWidgets.QMessageBox.Yes: + enableFirewall() + +def checkIfRoot(): + if os.getuid() != 0: + errorBox = QtWidgets.QMessageBox() + errorBox.setText("You must run this script as root.") + errorBox.setWindowTitle("Please run this script as root.") + errorBox.setIcon(3) + sys.exit(errorBox.exec_()) + else: + pass + +def installPackages(strlist): + global pkglist + cache.update() + cache.open(None) + + for pkg in pkglist: + candidate = cache[pkg] + if not candidate.is_installed: + candidate.mark_install() + try: + cache.commit(apt.progress.text.AcquireProgress(), apt.progress.base.InstallProgress()) + except Exception as ex: + print("Error during install",ex) +def enableFirewall(): + command=['ufw', 'enable'] + subprocess_wrap(command) + +def mountStick(): + command=['/bin/bash', basedir+"/infuse_offline_repo.sh"] + subprocess_wrap(command) + +def makeDoku(stringlist): + global pkglist + + command=['/bin/bash', basedir+"/makeDoku.sh", basedir+"/", " ".join(pkglist)] + subprocess_wrap(command) + +def getPackagelist(): + installList = [] + model = window.ui.tableView.model() + i = 0 + while i < model.rowCount(): + item = model.item(i) + item.readOnly(true) + if item.isEnabled: + if item.checkState(): + installList.append(item.text()) + i += 1 + return installList + +def getPackagelistTree(): + installList = [] + model = window.ui.treeView.model() + i = 0 + while i < model.rowCount(): + branch = model.item(i) + j = 0 + #if branch.isEnabled(): + #check if branc is checkt if true return all children true +# if branch.checkState(): +# while j < branch.rowCount(): +# installList.append(branch.child(j).text()) +# j += 1 +# else: + while j < branch.rowCount(): + if branch.child(j).isEnabled: + if branch.child(j).checkState(): + installList.append(branch.child(j).text()) + j += 1 + i += 1 + return installList + +def fillTreeView(inputDataJson, treeView): + model = QtGui.QStandardItemModel() + branchfont = QtGui.QFont() + branchfont.setBold(True) + for softwareGroup in inputDataJson: + branch = QtGui.QStandardItem(softwareGroup) + #branch.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled) + #branch.setData(QtCore.QVariant(QtCore.Qt.Checked), QtCore.Qt.CheckStateRole) + branch.setFont(branchfont) + if 'groupDesc' in inputDataJson[softwareGroup]: + branchDesc = QtGui.QStandardItem(inputDataJson[softwareGroup]['groupDesc']) + else: + branchDesc = QtGui.QStandardItem('') + for package in inputDataJson[softwareGroup]['packages']: + if not ('hidden' in package and package['hidden']): + item = QtGui.QStandardItem(package['pkgname']) + item.setText(package['pkgname']) + item.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled) + if package['tagged']: + item.setData(QtCore.QVariant(QtCore.Qt.Checked), QtCore.Qt.CheckStateRole) + else: + item.setData(QtCore.QVariant(QtCore.Qt.Unchecked), QtCore.Qt.CheckStateRole) + item2 = QtGui.QStandardItem(package['pkgdescription']) + branch.appendRow([item, item2]) + model.appendRow([branch, branchDesc]) + treeView.setModel(model) + treeView.expandAll() + +if __name__ == '__main__': + app = QtWidgets.QApplication(sys.argv) + basedir=os.path.dirname(os.path.realpath(__file__)) + checkIfRoot() + chooseFirewall() + #mountStick() + window = Main() + window.setWindowTitle("Linux Install Party Software Installer") + with open(basedir+'/../offline_repo.json', 'r') as inputfile: + data=json.loads(inputfile.read(), object_pairs_hook=OrderedDict) + fillTreeView(data, window.ui.treeView) + window.ui.btnl.clicked.connect(installProcess) + window.show() + sys.exit(app.exec_()) diff --git a/scripts/linuxparty.sh b/scripts/linuxparty.sh index 567ec5203d1cb1d18c0ea07ef82268e94129b480..0c66cefb5b18d1b44c6c1f6aa6884995722db432 100644 --- a/scripts/linuxparty.sh +++ b/scripts/linuxparty.sh @@ -50,8 +50,9 @@ COMMON_PKGS=(\ "FALSE" "zsh-doc" "Dokumentation von zsh" \ "FALSE" "lftp" "FTP-Client" \ "FALSE" "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)" \ +"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=(\ @@ -417,7 +418,7 @@ create_doc() 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." + pressenter "Eine Dokumentation der von dir installierten Paktete wurde in deinem Benutzerverzeichnis ($HOME) als 'Deine-LIP-Dokumentation.pdf' abegelegt." return $RC } @@ -499,12 +500,13 @@ then install_if fi -if askyesno "Software für Mathematik installieren ?" -then +#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 + # install_m +#fi if askyesno "Software für Physiker (Python-SciPy,-NumPy,diverse Plot-Programme) installieren ?" then diff --git a/scripts/liprepoctl.sh b/scripts/liprepoctl.sh index 025077380940e0991858fc807be00372549974db..ff0a7d834f1ce5587f05f77e9ba90d3e2635b39a 100644 --- a/scripts/liprepoctl.sh +++ b/scripts/liprepoctl.sh @@ -3,8 +3,8 @@ ACTION="$1" FILENAME="/etc/apt/sources.list.d/lipoffline.list" ACTIVATED=`test -e "$FILENAME"` -DIST_CODENAME="trusty" -DIST_VERSION="14.04" +DIST_CODENAME="wily" +DIST_VERSION="15.10" function install_repo() diff --git a/scripts/makeDoku.sh b/scripts/makeDoku.sh new file mode 100755 index 0000000000000000000000000000000000000000..49355b6697ce2a622a3486cd3f74b109e968cd6d --- /dev/null +++ b/scripts/makeDoku.sh @@ -0,0 +1,54 @@ +#!/bin/bash +# Takes 2 arguments, first path where docuparts are stored 2nd list of installed packages + +if [ $# -eq 0 ] +then + echo "No path supplied" + exit 1 +else + DOCUDIR="$1/../Doku" + echo $DOCUDIR + shift +fi + +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..." + exit 0 #linuxparty.sh soll auch ohne Doku Verzeichnis laufen +fi + +if [ $# -eq 0 ] +then + echo "No packages supplied" + exit 1 +else + PACKAGELIST="$@ FOOTER" + echo $PACKAGELIST +fi + + +WORKING_DIR=$(mktemp -d) +cp -a "$DOCUDIR/." "$WORKING_DIR" + +for PACKAGE in $PACKAGELIST; 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 + exit 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=$? + +exit $RC diff --git a/scripts/mount-stick-repo.sh b/scripts/mount-stick-repo.sh index 88dcf8ef9b4a740a199f4e5614e763f29bd53493..02e1b3794bf6fd651aa423cbe180010d073f0eee 100644 --- a/scripts/mount-stick-repo.sh +++ b/scripts/mount-stick-repo.sh @@ -1,10 +1,13 @@ #! /bin/bash set -e +LIPSTICK_LABEL="LIPStick" +LIPSTICK_LABEL_ALT="$(echo -n "$LIPSTICK_LABEL" | tr "[a-z]" "[A-Z]")" + #find device -DEV="$(blkid -t "LABEL=MultiBoot" -o device | head -n1 || echo '')" +DEV="$(blkid -t "LABEL=$LIPSTICK_LABEL" -o device | head -n1 || echo '')" if [ -z "$DEV" ]; then - DEV="$(blkid -t "LABEL=MULTIBOOT" -o device | head -n1 || echo '')" + DEV="$(blkid -t "LABEL=$LIPSTICK_LABEL_ALT" -o device | head -n1 || echo '')" fi PS3="[1,2,3]<Enter>: " @@ -16,9 +19,9 @@ while [ -z "$DEV" ]; do "Installation abbrechen" ; do case $i in "Stick ist jetzt gesteckt") - DEV="$(blkid -t "LABEL=MultiBoot" -o device | head -n1 || echo '')" + DEV="$(blkid -t "LABEL=$LIPSTICK_LABEL" -o device | head -n1 || echo '')" if [ -z "$DEV" ]; then - DEV="$(blkid -t "LABEL=MULTIBOOT" -o device | head -n1 || echo '')" + DEV="$(blkid -t "LABEL=$LIPSTICK_LABEL_ALT" -o device | head -n1 || echo '')" fi ;; "Ohne Stick weitermachen")