zur Startseite

Druckausgabe von https://privat.albicker.org
Iveco Daily 4x4, Hunde und multithematisches Blog - Bernhard Albicker

Systempflege mit System: Linux Mint und das Installationsprotokoll/-script

veröffentlicht am 23.04.2017

Ausgangssitutation und Vorüberlegungen

Vor-Linux-Zeit

Schon zu Windows-Zeiten hab ich mir für jeden installierten Rechner eine Art Textprotokoll erstellt, in dem ich die einzelnen Installationsschritte festgehalten habe:

So war es im Falle einer (immer mal wieder vorkommenden) Neuinstallation möglich, systematisch alle zuvor erprobten Schritte geschlossen zu wiederholen und zügig wieder einen Rechner zu erhalten, der weitgehend dem alten Zustand entsprach. Weitgehend deshalb, weil durch die verzettelten Eintragungen der individuellen Betriebssystems- und Programm-Einstellungen in Registry und Konfigurationsdateien, diese wieder verteilt im Benutzer-, aber auch im Programmverzeichnis, nie sichergestellt werden konnte, daß in der Tat alle Anpassungen wiederherzustellen waren.

Nach dem Linux-Umstieg

Das erste System (Media-PC im Jahre 2008) hab ich mittels Synaptik noch rein mit grafischer Oberfläche aufgesetzt und bin genau so verfahren, wie ich das gewohnt war. Als ich diesen PC dann im Jahre 2012 erneuert habe, war ich schon einen Schritt weiter: ich hab mir als zusätzliche Sicherheit noch vor der Demontage des alten Rechners eine Paketliste erzeugt:

dpkg --get-selections  >  /home/{benutzername}/installierte-software.txt

Diese hätte ich mit

dpkg --set-selections  <  /home/{benutzername}/installierte-software.txt

auf dem neuen Rechner wieder einlesen und damit (theoretisch) den Ursprungszustand wieder herstellen können. Weil aber inzwischen Jahre vergangen waren und ich von Debian 4(Etch) auf Debian 6(Squeeze) gewechselt habe, hab ich es vorgezogen, die so entstandene Liste als Checkliste zum Abhaken zu verwenden und die Programmpakete manuell zu installieren.

Sollte man sein System aber so beschädigen, daß eine Neuinstallation die “beste” Lösung darstellt, so ist dies in einfacher Weise möglich:

  1. CD/DVD einlegen und Grundsystem starten
  2. als root den obigen Befehl aufrufen und alle fehlenden Programmpakete nachinstallieren lassen

Und wenn man vorher konsequent das Betriebssystem und das /home-Verzeichnis mit den Benutzerdaten auf verschiedene Partitionen der Festplatte gelegt hat, dann ist nach so einer “Aktion” tatsächlich der Ursprungszustand wieder hergestellt.

Halbautomatische Installation - mehrere “gleiche” Rechner

Grundgedanken

Den ersten Rechner mit einer neuen (oder neuen Version einer) Distribution setze ich grundsätzlich von Hand auf. Dabei nehme ich die vorhandene Paketliste aus der Vergangenheit als Checkliste her. Wo immer möglich nutze ich dazu das Terminal, denn auf diese Art und Weise kann ich gleich die Befehle, die ich ausführe, parallel in eine Textdatei kopieren. Das sind dann nicht nur die Installationen von Programmpaketen wie sie durch die obigen einfachen Befehle dargestellt werden, sondern auch

Umsetzung

Der Übersichtlichkeit halber teile ich alle Einrichtungsarbeiten in 3 Gruppen auf, die sich durch 3 Files darstellen:

  1. alle Installationen und Einrichtungen, die nur für einen einzelnen Rechner relevant sind, beispielsweise: Auf Rechner 1 brauche ich eine Netzwerkverbindung zu Rechner 2, während ich auf Rechner 2 eine Verbindung zu Rechner 1 konfigurieren muß.
  2. alle Programmpakete, die direkt aus dem Repository der jeweiligen Distribution installiert werden können. Dies ist die übergroße Mehrheit aller Programme. Ggf. notiere ich zu einelnen Programmpaketen, die hier installiert werden, gleich auch die Befehle, die für möglicherweise nötige zusätzliche Konfigurationen nötig sind.
  3. die “Spezialitäten” stellen Programme dar, die aus zusätzlichen Programmquellen installiert werden. Dazu müssen diese zunächst eingerichtet werden (PPAs, lokales Repository) , dann die Programme installiert und ggf. die Quelle wieder deaktiviert werden (oder durch sog. “Pinning” sichergestellt werden, daß nur die erlaubten Pakete von dort installiert oder aktualisiert werden), ferner Installationsscripte oder -Programme, die außerhalb des Paketmanagers der Distribution ausgeführt werden müssen.

Beispiel-Scripte

Anmerkung: Die Beschreibung bezieht sich auf eine Distribution mit Debian-Paketverwaltung. Sie läßt sich aber in angepaßter Form auch auf andere Distributionen mit Paketverwaltung anwenden.
Zur Ausführung der vorbereiteten Scripte wird im Terminal zunächst in das Verzeichnis des Basis-Scriptes gewechselt und dieses als root aufgerufen:

~ $ sudo su
# bash rechnername.sh

Dieses Script wird dann abgearbeitet und aus diesem heraus an den richtigen Stellen im Ablauf die beiden anderen Scripte, die zweckmäßigerweise im selben Verzeichnis liegen, aufgerufen und ebenfalls abgearbeitet. Am Ende muß das root-Terminal mit

# exit

wieder beendet/geschlossen werden.

Die einzelnen Elemente und Gruppen in den Scripten werden im Folgenden erläutert:

rechnerspezifisches Basis-Script (rechnername.sh)

Dieses Script beinhaltet die für den jeweiligen Rechner einzigartigen Befehle und “bildet den Rahmen für die allgemeinen Anweisungen”

#!/bin/bash

# allgemeine Installationsanweisungen einbinden
. /home/benutzer/Linux-Software/Scripte/installscript.sh
. /home/benutzer/Linux-Software/Scripte/repo-installscript.sh

Nach der Interpreter-Anweisung folgt der Aufruf der “allgemeinen” Scripte, die weiter unten erläutert werden. Dann werden die anderen im Netzwerk befindlichen Rechner (die alle feste IP-Adressen haben) per SSH eingebunden:

# andere Rechner einbinden - Verzeichnisse mit abschließendem '/'? 
# Meldung beim grafischen Auswerfen: umount: /Pfad/Angabe mount und fstab stimmen nicht überein, Terminal: fusermount -u /home/{benutzername}/PC_****
echo "sshfs#192.168.xxx.xxx:/home/{benutzername}  /home/{benutzername}/PC_Hobbyraum  fuse  users,noauto,uid=1000,gid=1000 0 0" >> /etc/fstab
echo "sshfs#192.168.xxx.yyy:/home/{benutzername}  /home/{benutzername}/PC_Buero  fuse  users,noauto,uid=1000,gid=1000 0 0" >> /etc/fstab
echo "sshfs#{user-mediazentrale}@192.168.xxx.zzz:/home/{user-mediazentrale}  /home/{benutzername}/PC_Mediazentrale  fuse  users,noauto,uid=1000,gid=1000 0 0" >> /etc/fstab

Dabei sind anstelle der {abc}-Ausdrücke die jeweiligen Benutzernamen auf dem jeweiligen Rechner einzutragen.
Schlussendlich binde ich noch das NAS ein per Samba-Server:

#NAS einbinden - systemweit:
apt-get install -y cifs-utils	#SMB installieren
mkdir /media/NAS	#Mount-Point erstellen
echo "//192.168.xxx.nnn/Pfad /media/NAS cifs auto  0 0" >> /etc/fstab

mount -a #Neueinlesen der fstab
# Am Ende der fstab muss immer noch eine Leerzeile kommen, sonst erhält man die Fehlermeldung: no final newline at the end of /etc/fstab

Für die Kommunikation mit der Fritz!Box nutze ich nur meinen “Hauptrechner”, deshalb sind die diesbezüglichen Anweisungen in diesem Script notiert (wer von jedem Rechner auf die Fritz!Box zugreifen will, der kann den nachfolgenden Teil auch in das File spezial.sh verschieben)

#Fax über Fritz!Box per RogerRouter
add-apt-repository 'deb http://download.opensuse.org/repositories/home:/tabos-team:/release/xUbuntu_14.04/ ./'  
wget -q http://download.opensuse.org/repositories/home:/tabos-team:/release/xUbuntu_14.04/Release.key -O- | apt-key add - #Fremdschlüssel autentifizieren
apt-get update
apt-get install roger 
addgroup {benutzername} fax     ## BENUTZERNAME entsprechend anpassen
newgrp - fax  

Software aus dem regulären Distributions-Repository (repository.sh)

Diese Teilscript ist zwar vom Umfang her das größte, aber in der Struktur sehr einfach aufgebaut: Ich habe die von mir benutzte Software in Gruppen zusammengefaßt (um für mich die Übersichtlichkeit zu erhöhen) und die Programm-Pakete für jede dieser Gruppen werden per apt-get install mit der Option -y, die alle Rückfragen automatisch bestätigt, “in einem Rutsch” installiert. Das sieht - beispielhaft für 3 gängige Gruppen - so aus:

#Foto und Farbe
apt-get install -y argyll gnome-color-manager dispcalgui gpick hugin luminance-hdr photoprint rapid-photo-downloader python-pyside libimage-exiftool-perl geeqie entangle

#Grafik und Design
apt-get install -y blender inkscape scribus scribus-doc scribus-template

#Office
apt-get install -y calibre qpdfview qpdfview-djvu-plugin qpdfview-ps-plugin qpdfview-translations freeplane taskcoach diffpdf pdfchain pdfmod guvcview cups-pdf

Das sind bei mir in Summe gut über 70 Programm-Pakete in über 15 Gruppen … spätestens hier zeigt sich der Vorteil, das einmal in dieser Form aufzuschreiben, wenn man einen zweiten oder dritten Rechner genauso aufsetzen will (oder auch als Sicherung für eine evtl. Neuinstallation). Dabei sind nur die Haupt-Pakete aufgelistet, die jeweiligen Abhängigkeiten werden über die Option -y automatisch mitinstalliert.

Dann hab ich da noch Gruppen definiert, die eher was mit Hardware-Steuerung zu tun haben, wie z. B. eine erweiterte Lautstärkeregelung:

# Audio-Einstellungen
apt-get install -y pavucontrol paprefs pavumeter

und ebenfalls wichtig ist es, die nötigen Programmpakete für die Einrichtung der SSH-Verbindungen zwischen den Rechnern im Netzwerk, die in rechnername.sh definiert wurden, zu installieren:

# Verbindung zu anderen Rechnern
apt-get install -y sshfs
apt-get install -y openssh-server

Manchmal braucht ein Programm noch eine Sonderbehandlung, diese notiere ich gleich zu der jeweiligen Gruppe hinzu. Beispielsweise braucht QLandkarteGT eine Nachbehandlung, wenn das Programm in der Lage sein soll, auf ältere Garmin-Geräte wie das etrex Vista HCx zuzugreifen:

#Navigation
apt-get install -y qlandkartegt qlandkartegt-garmin gpsd 

installiert zunächst die nötigen Programmpakete, im Anschluß daran wird der USB-Zugriff für normale User eingerichtet:

# rules-Datei erstellen
echo "SUBSYSTEM==\"usb\", ATTR{idVendor}==\"091e\", ATTR{idProduct}==\"0003\", MODE=\"0666\", GROUP=\"plugdev\"," >> /etc/udev/rules.d/71-garmin.rules
#UDEV-Daemon neu starten -- ersatzweise Rechner komplett neu booten
udevadm control --reload-rules
udevadm trigger --attr-match=subsystem=usb

Sonderfälle (spezial.sh)

In diesem letzten Teilscript werden alle anderen Dinge behandelt, z. B. Software, die sich nicht auf einfachem Weg aus einem Repository zu installieren läßt.

# weitere Benutzer
adduser {weiterer-benutzername} 
usermod -aG {weiterer-benutzername},cdrom,plugdev {weiterer-benutzername}  #Gruppen durch Komma ohne Leerzeichen trennen

richtet z. B. einen weiteren Benutzer incl. Berechtigungen auf den Rechnern ein. Soll ein solcher weiterer Benutzer nur auf einem Rechner eingerichtet werden, so muß dieser Teil eben in das rechnername.sh-Script verschoben werden.

Den Hauptteil in diesem Script bildet aber die Sondersoftware.
Hierzu eine grundlegende Bemerkung: ich nutze - wann immer möglich - die Standardpakete aus der jeweiligen Distribution. Ausnahmen sind lediglich:

  1. ein Programm ist überhaupt nicht in den Paketquellen der Distribution enthalten, und es gibt auch keine Alternative, die die benötigte Funktionalität mitbringt. Beispiele sind hier z. B.:
    • xnviewMP
    • FreeFileSync
  2. ein Programm wird vom Autor durch ein neues Programm ersetzt, das alte ist noch in den Paketquellen (obwohl abgekündigt), das neue noch nicht. Hier kann es ggf. sinnvoll sein, für einen “sanften Umstieg” bereits beide Programme parallel zu betreiben. Bsp.:
    • QLandkarteGT vs. QMapShack
  3. ein Programm entwickelt sich so rasant, daß die jeweilige Distribution nicht Schritt halten kann. Das ist z. B. der Fall bei
    • darktable

In allen anderen Fällen bevorzuge ich die Standard-Version (auch, wenn sie etwas älter ist) aus den offiziellen Paketquellen (es lebt sich streßfreier damit und läßt mehr Freizeit …).

In diesem Script gibt es mehrere Blöcke:

  1. Die Einbindung von PPAs und Installation von Software daraus:

    # ppa einbinden
    add-apt-repository -y ppa:pmjdebruijn/darktable-release     #darktable
    add-apt-repository -y ppa:freefilesync/ffs          #freefilesync
        
    apt-get update
        
    # Software installieren
    apt-get install -y darktable
    apt-get install -y freefilesync
    

    Hier werden 2 PPAs eingebunden, danach der Index aktualisiert und die entsprechenden Programme installiert.
    Und nur, wenn es sich dabei um PPAs handelt, die programmspezifisch sind (also nur ein einzelnes Programm, evtl. noch benötigte Abhängigkeiten enthält), lasse ich diese PPAs aktiv (um ggf. Aktualisierungen durch den Programmersteller eingespielt zu bekommen). Handelt es sich um ein Sammel-PPA, das viele verschiedene Programme enthält, dann wird es unmittelbar nach der Installation der gewünschten Software wieder deaktiviert - sonst erhalte ich evtl. unerwünschte Aktualisierungen von Standardsoftware.

    # ppa einbinden und Prog. installieren
    add-apt-repository -y ppa:dhor/myway                #macrofusion
    apt-get update
    apt-get install -y macrofusion
        
    # ppa deaktivieren
    ppa-purge ppa:dhor/myway
    apt-get update   
    

    ppa-purge setzt dabei Software, die sowohl in den offiziellen Paketquellen als auch im PPA verfügbar ist, auf den Stand der offiziellen Quellen zurück. Software, die nur im PPA enthalten ist, bleibt erhalten.

  2. Lokale Debian-Pakete
    Sollte ich auf “irgendwo heruntergeladene” oder selbst durch kompilieren erstellte Pakete angewiesen sein, dann installiere ich diese über ein lokales Repository . Die Pakete selbst sammle ich in irgendeinem Ordner im Home-Verzeichnis (z. B. /home/{benutzername}/Linux-Software/) und erstelle das lokale Repo wie folgt:

    # lokales Repository erstellen und einbinden
    apt-get install dpkg-dev        # wird benötigt, um lokale Repositories erstellen zu können
    mkdir /var/local/repository     # erstellt das Verzeichnis des Repositories
        
    cp -u -v /home/{benutzername}/Linux-Software/* /var/local/repository         #kopiert neuere oder fehlende Dateien aus dem lokalen "Sammelverzeichnis" ins Repo
        
    cd /var/local/repository        # wechselt in das Repo, weil der Index relativ ist
    dpkg-scanpackages ./ > Packages && gzip -f Packages     # erzeugt den Index
        
    echo "deb file:/var/local/repository ./" >> /etc/apt/sources.list     # bindet das lokale Repo in die Paketquellen ein
    apt-get update
        
    # zusätzliche Software hier installieren
    apt-get install -y checksumcontrol-2.4
    apt-get install -y hugo 
    
  3. Software außerhalb des Paketmanagers der Distribution
    Auch das soll gelegentlich vorkommen. Hier werden einfach die Installationsanweisungen des Autors der Software eingetragen, z. B. so:

    # lokale Software
        
    cd /home/{benutzername}/Linux-Software/Install/pyExifToolGUI-0.5        # wechselt ins Verzeichnis der Installationsroutine der Software
        
    ./install_remove.py install
    

Schlußbemerkung

Die gezeigte Vorgehensweise hat in meinen Augen zwei Vorzüge: - sie spart Arbeit - sie systemmatisiert die Installation von Rechnern

Im Ergebnis läuft die Installation eines zusätzlichen Rechners so ab:

  1. ein passendes File rechnername.sh erstellen
  2. Install-DVD einlegen und Basissystem installieren
    nebenher z. B. Abendessen genießen
  3. Script starten (rechnername.sh)
    nebenher Abendspaziergang machen
  4. hinsetzen und arbeiten … :)

Und beim nächsten Distributions-Update können die Scripte als Checkliste beim Aufsetzen des ersten Rechners auf der neuen Version sein.