Anaconda-Protokollierung

Yohaan Vakil, Frank Sträter, Ben Cotton Version unspecified Last review: 2022-05-04

Einführung

Anaconda protokolliert alle seine Aktivitäten. Dazu gehören:

  • Wechsel zwischen den Installationsschritten (die in etwa verschiedenen Bildschirmen im grafischen Installationsprogramm entsprechen)

  • Erkennung und Bearbeitung von Speichergeräten

  • Erkennung von Installationsmedien

  • Netzwerk-Initialisierung

  • Kernel-Meldungen

  • Aufrufe an kritische Methoden innerhalb von Anaconda

  • Aufrufe an externe Programme

Anmelden am installierten System

Während der Installation werden die Protokolle im Verzeichnis /tmp gespeichert:

Protokolldateien

/tmp/anaconda.log

die allgemeinen Installationsinformationen, insbesondere die Schrittänderungen.

/tmp/storage.log

Scannen und Bearbeiten von Speichermedien (Festplatten, Partitionen, LVM, RAID), Partitionierung

/tmp/program.log

Aufrufe externer Programme, deren Ergebnisse

/tmp/packaging.log

Paketinstallationsmeldungen von DNF

/tmp/syslog

Systemmeldungen im Zusammenhang mit Hardware

Bestimmte Protokollmeldungen werden auch auf den Terminals ausgegeben:

TTY-Geräte

/dev/tty3

Meldungen von anaconda.log, storage.log und packaging.log.

/dev/tty4

gleich wie syslog

/dev/tty5

Standardausgabe und Standardfehlerausgabe von externen Programmen

tty3 und tty4 beziehen sich auf bestimmte Protokolldateien. Protokolldateien enthalten immer Meldungen aller Protokollierungsstufen, einschließlich Debug-Meldungen. Die minimale Protokollierungsstufe der Terminals kann jedoch über die link:https://anaconda-installer.readthedocs.io/en/latest/boot-options.html#inst-loglevel [Befehlszeilenoption loglevel] gesteuert werden.

Es werden zwei weitere Protokolldateien auf dem Zieldateisystem im Verzeichnis /root erstellt, das während der Installation auch unter /mnt/sysimage/root zugänglich ist:

/mnt/sysimage/root/install.log

Protokoll des Paketinstallationsprozesses.

/mnt/sysimage/root/install.log.syslog

Meldungen aus dem Installations-Chroot, die über das System-Syslog protokolliert wurden.

Hauptsächlich Informationen über Benutzer und Gruppen, die während der Paketinstallation von dnf erstellt wurden.

Protokollformat

In den Dateien haben die Protokollmeldungen folgendes Format:

 H:M:S,ms LOGLEVEL facility:message

wobei:

  • H:M:S der Zeitstempel der Nachricht ist

  • ms der Millisekundenanteil des Zeitstempels ist. Beachten Sie, dass dieser Wert bei einem fernen Syslog-Server üblicherweise null ist.

  • LOGLEVEL die Protokollierungsstufe für Meldungen ist. Da Kernelmeldungen Teil der Anaconda-Protokolle sind, können theoretisch alle in rsyslog definierten Protokollierungsstufen in den Protokolldateien erscheinen. Anaconda selbst protokolliert jedoch nur auf den folgenden Protokollierungsstufen:

    • DEBUG

    • INFO

    • WARN

    • ERR

    • CRIT

  • facility das Programm oder die Komponente ist, die die Nachricht erzeugt hat. Dies kann beispielsweise kernel, anaconda, storage oder Ähnliches sein.

  • message die Protokollmeldung selbst ist.

Für die in Terminals ausgeführten Protokolle gilt folgendes Format:

 LOGLEVEL facility:message

Fernprotokollierung über TCP

Anaconda unterstützt Fernprotokollierung über den rsyslog-Daemon, der auf dem installierten System ausgeführt wird. Dieser kann so konfiguriert werden, dass er seine Protokolle per TCP an einen beliebigen Rechner im Netzwerk weiterleitet, auf dem ebenfalls ein syslog-Daemon läuft. Die Konfiguration erfolgt über die Befehlszeilenoption syslog.

Vergessen Sie nicht, den Port, auf dem Ihr lokaler Syslog-Daemon läuft, in Ihrer Firewall zu aktivieren.

Was fernprotokolliert wird

Alles, was direkt von Anaconda protokolliert wird, sollte auch in den Fernprotokollen erscheinen. Dies umfasst Meldungen des Loaders und des Speichersubsystems. Alle Anaconda-Tracebacks (/tmp/anaconda-tb-xyz) werden in einer einzigen Datei /tmp/anaconda-tb-all.log zusammengefasst und anschließend übertragen. Auch die Datei /tmp/x.log wird übertragen.

Die Fernprotokollierung funktioniert nur, wenn das Installationsprogramm das Netzwerk initialisiert hat. Sobald das Netzwerk steht, dauert es einige Minuten, bis rsyslogd dies erkennt. Rsyslog verwaltet eine Warteschlange für Meldungen, die aufgrund fehlender Netzwerkverbindung nicht weitergeleitet werden konnten, und leitet diese schließlich alle in der richtigen Reihenfolge weiter.

Konfiguration

Sie entscheiden selbst, wie der Fernprotokollierungs-Daemon konfiguriert wird. Sie können beispielsweise alle eingehenden Nachrichten in einer Datei protokollieren oder sie nach der IP-Adresse des fernen Systems in Verzeichnisse sortieren.

Das Anaconda-RPM-Paket stellt das Skript analog bereit, das anhand einiger Installationsparameter eine passende rsyslogd-Konfigurationsdatei generiert. Es kann außerdem einen Bash-Befehl generieren, um rsyslogd mit der generierten Konfiguration zu starten. Sie können also in der Shell Folgendes ausführen: $ eval scripts/analog -p 6080 -s -o ./someconf /home/akozumpl/remote_inst Dadurch wird ein rsyslog-Daemon gestartet, der an Port 6080 lauscht. Die Protokolle des fernen Rechners mit der IP-Adresse 10.34.33.221 werden unter /home/akozumpl/remote_inst/10.34.33.221/ gespeichert, zum Beispiel /home/akozumpl/remote_inst/10.34.33.221/anaconda.log.

Die Syslog-Konfiguration des fernen Systems nutzt verschiedene Merkmale von Protokollmeldungen, um diese in die richtigen Dateien zu sortieren: * Die IP-Adresse des Absenders, um zu wissen, welcher Rechner die Nachricht generiert hat und zu welchem Verzeichnis die Nachricht gehört. * Die Dateien anaconda.log, storage.log und program.log enthalten den Namen als programname. * syslog-Meldungen kommen von Kernel und Daemons, genau wie auf dem installierten System. * Die während der Paketinstallation erstellte install.log.syslog-Datei wird unter einem speziellen sysimage-Hostnamen protokolliert.

Führen Sie analog ohne die Option -o aus, um zu sehen, wie eine passende Konfigurationsdatei aussieht. Beachten Sie außerdem, dass es dasselbe Meldungsformat für die Fernprotokollierung wie Anaconda verwendet. Sie können dies jedoch selbstverständlich an Ihre Bedürfnisse anpassen.

Siehe auch

Fernprotokollierung über virtio

QEMU/KVM in Fedora 13 und höher ermöglicht die Erstellung virtueller Maschinen mit mehreren zeichenorientierten Virtio-Geräten. Eines dieser Geräte kann verwendet werden, um Anaconda-Protokolle an den Host-Rechner weiterzuleiten. Dadurch werden die Protokolle in Echtzeit weitergeleitet, sobald das Anaconda-Protokollierungs-Subsystem initialisiert ist (frühzeitig), ohne auf die Netzwerkverbindung warten zu müssen. Dies ist zudem die einzige Möglichkeit, Protokolle in einer Umgebung ohne Netzwerkverbindung weiterzuleiten.

Konfiguration der Fernprotokollierung

Anaconda leitet Protokolle automatisch über Virtio weiter, sobald der Port /dev/virtio-ports/org.fedoraproject.anaconda.log.0" gefunden wird. Dieser Port wird mithilfe einer libvirt-XML-Direktive erstellt, die ihn mit einem TCP-Socket auf dem Host verbindet. Die Protokolle können dann direkt von dort gelesen oder mithilfe einer rsyslog-Instanz analysiert und in entsprechenden Dateien gespeichert werden. Die vollständige Konfiguration ist in der folgenden ASCII-Tabelle dargestellt:

Anaconda--->rsyslog(guest)--->virtio(guest char device)--->kvm hypervisor--->virtio(TCP socket)
                                                                                |
                                                                                v
                                                      forwarded log files<---rsyslog(host)

Es folgen Schritt-für-Schritt-Anweisungen zur Einrichtung:

  1. Erstellen Sie eine virtuelle Testmaschine, z. B. mit Virtual Manager. </li>

  2. Fügen Sie Ihrer virtuellen Maschine den virtio-serial-Port hinzu und leiten Sie ihn an den TCP-Port 6080 des Hosts weiter. Beginnen Sie mit der Bearbeitung der Gastkonfiguration: virsh edit <Maschinenname>

  3. Fügen Sie im Gastsystem-Editor die folgenden Informationen in den Abschnitt <devices> ein:

<channel type='tcp'>
  <source mode='connect' host='127.0.0.1' service='6080'/>
  <target type='virtio' name='org.fedoraproject.anaconda.log.0'/>
</channel>
  1. Starten Sie den rsyslogd-Prozess auf dem Host mithilfe des [[#Remote_logging_via_TCP|oben beschriebenen]] analog-Skripts:

eval `analog -p 6080 -o rsyslogd.conf -s /home/akozumpl/remote_inst`
  1. Starten Sie die virtuelle Maschine.

  2. Fahren Sie mit der Installation fort. Unmittelbar nach der Anaconda-Begrüßung erscheinen die Protokollmeldungen im Verzeichnis, das dem Skript analog zugewiesen wurde, im Unterverzeichnis 127.0.0.1.

virt-install

Wenn Sie virt-install verwenden, können Sie es mit der Option --channel konfigurieren:

--channel tcp,host=127.0.0.1:6080,mode=connect,target_type=virtio,name=org.fedoraproject.anaconda.log.0

Bekannte Probleme und Fehlerbehebung

  • funktioniert in libvirt>=0.8.2

  • Chroot-Systemprotokoll-Meldungen aus /mnt/sysimage/root/install.log.syslog werden nicht weitergeleitet.

  • Es ist nicht möglich, die Maschine zu starten, solange nichts am TCP-Port lauscht, an dem virtio-serial angeschlossen ist.

  • Um die Funktion der Virtio-Verbindung zu testen, verwenden Sie anstelle von analog und rsyslog einfach das Netcat-Dienstprogramm, das am angegebenen Port lauscht, z. B. nc -l 0.0.0.0 6080. Sobald die Gastmaschine startet, sollten im Terminal Rohdaten angezeigt werden.

  • Wenn sowohl die TCP-Fernprotokollierung über syslog= als auch die Virtio-Fernprotokollierung über virtiolog= in der Befehlszeile angegeben werden, müssen zwei rsyslogd-Instanzen auf dem Server/Host eingerichtet werden, die an beiden Verbindungen zu lauschen. Andernfalls laufen die Warteschlangen des sendenden rsyslog voll und die Weiterleitung wird gestoppt.

Anaconda-Protokolle im laufenden System

Nach jeder erfolgreichen Installation werden die Anaconda-Protokolle in das Verzeichnis /var/log des soeben installierten Systems kopiert. Um Namenskonflikte mit anderen Protokolldateien in diesem Verzeichnis zu vermeiden, werden die Anaconda-Protokolle umbenannt:

Name während der Installation Name im Zielsystem

/tmp/anaconda.log

/var/log/anaconda/anaconda.log

/tmp/program.log

/var/log/anaconda/program.log

/tmp/storage.log

/var/log/anaconda/storage.log

/tmp/packaging.log

/var/log/anaconda/packaging.log

Tipps zur Protokollierung

Wenn Sie aufgefordert werden, Protokolle für einen Bugzilla-Eintrag bereitzustellen, empfiehlt es sich, von der Anaconda-GUI auf tty2 umzuschalten und die Dateien dann mit scp auf Ihren Computer zu kopieren, z. B.:

$ cd /tmp
$ scp anaconda.log aklap:/home/akozumpl/

Es ist auch möglich, einen vollständigen Speicherauszug des Zustands eines laufenden Anaconda-Prozesses zu erstellen (denselben Speicherauszug, der automatisch erstellt wird, wenn eine unbehandelte Ausnahme auftritt). Senden Sie dazu an den Hauptprozess von Anaconda das Signal SIGUSR2:

$ kill -USR2 `cat /var/run/anaconda.pid``

Dadurch wird eine Datei /tmp/anaconda-tb-????? erstellt, die auch anaconda.log, storage.log und syslog enthält.

Wenn Sie eine KVM-VM verwenden und kein SCP verfügbar ist (Phase 1), können Sie (nachdem Sie das Netzwerk eingerichtet haben, falls es noch nicht vorhanden ist) in eine spezielle TCP-Datei auf dem Host umleiten:

$ nc -l 4444 > syslog.log

auf dem Gastsystem:

$ ifconfig eth0 10.0.2.10/24 up
$ grep "" /tmp/syslog > /dev/tcp/10.0.2.2/4444