Aktionen

Vorlage

Installation-Ubuntu-2604: Unterschied zwischen den Versionen

Aus znilwiki

Die Seite wurde neu angelegt: „===Grundinstallation=== {{Hinweis| Ich habe die offizielle ISO verwendet: https://ubuntu.com/download/server m die Datei heißt dann {{code|ubuntu-26.04-live-server-amd64.iso}} }} {{Hinweis| Ich installiere mit Absicht '''OHNE''' LVM. Ubuntu erstellt inzwischen keine eigene Partition für SWAP mehr und ohne LVM lässt sich der Festplattenplatz bei einer Installation als VM auf einfachste Weise im laufenden Betrieb erweitern. Natürlich ginge das auch mit…“
 
 
(21 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
===Grundinstallation===
===Grundinstallation===
{{Hinweis| Ich habe die offizielle ISO verwendet: https://ubuntu.com/download/server m die Datei heißt dann {{code|ubuntu-26.04-live-server-amd64.iso}} }}
{{Hinweis| Ich habe die offizielle ISO verwendet: https://ubuntu.com/download/server m die Datei heißt dann {{code|ubuntu-26.04-live-server-amd64.iso}}, an die Versionsnummer wird mit der Zeit ein .1, .2 und so weiter angehängt}}
{{Hinweis| Ich installiere mit Absicht '''OHNE''' LVM. Ubuntu erstellt inzwischen keine eigene Partition für SWAP mehr und ohne LVM lässt sich der Festplattenplatz bei einer Installation als VM auf einfachste Weise im laufenden Betrieb erweitern. Natürlich ginge das auch mit LVM (mit mehr Schritten), ich sehe hier den Nutzen und Vorteil in einer VM aber nicht.}}
{{Hinweis| Ich installiere mit Absicht '''OHNE''' LVM. Ubuntu erstellt inzwischen keine eigene Partition für SWAP mehr und ohne LVM lässt sich der Festplattenplatz bei einer Installation als VM auf einfachste Weise im laufenden Betrieb erweitern. Natürlich ginge das auch mit LVM (mit mehr Schritten), ich sehe hier den Nutzen und Vorteil in einer VM aber nicht.}}
CD einlegen und los,<br>
Ggf. noch die ISO/CD einlegen (falls nicht schon in der VM Konfiguriert) und Einschalten/Starten,<br>
die Fragen beantwortet Ihr wie folgt (sind ggf. die Überschriften der Dialoge):<br>
die Fragen beantwortet Ihr wie folgt (sind ggf. die Überschriften der Dialoge):<br>
:[[Datei:ClipCapIt-251210-111023.PNG|50px]] Try or Install Ubuntu Server<br><br>
:[[Datei:ClipCapIt-260513-095215.PNG|250px]] Try or Install Ubuntu Server<br><br>
:[[Datei:ClipCapIt-240527-140440.PNG|50px]] Deutsch<br>
:[[Datei:ClipCapIt-260513-095351.PNG|250px]] Deutsch<br>
:[[Datei:ClipCapIt-220427-115808.PNG|50px]] German / German<br>
:[[Datei:ClipCapIt-260513-095441.PNG|250px]] German / German<br>
:Wenn er einen neueren Installer findet und fragt ob er auf diesen aktualisieren soll - Ja!<br>
:Wenn er einen neueren Installer findet und fragt ob er auf diesen aktualisieren soll - Ja!<br>
:[[Datei:Install_Ubuntu2204_Pic2.png|50px]] Ubuntu Server<br>
:[[Datei:ClipCapIt-260513-095530.PNG|250px]] Ubuntu Server<br>
:[[Datei:ClipCapIt-220427-120131.PNG|50px]] Jetzt könnt Ihr schon die gewünschte feste IP-Adresse einstellen. Wählt dazu mit den Pfeiltasten den <code>ens160</code> Eintrag aus und drückt {{Key|Enter}}:<br>
:[[Datei:ClipCapIt-260513-100030.PNG|250px]] Jetzt könnt Ihr schon die gewünschte feste IP-Adresse einstellen. Wählt dazu mit den Pfeiltasten den <code>ensXXX</code> Eintrag aus und drückt {{Key|Enter}}:<br>
:[[Datei:ClipCapIt-200521-152546.PNG|50px]] ens192 => Bearbeite IPv4<br>
:[[Datei:ClipCapIt-260513-095823.PNG|250px]] ensXXX => Bearbeite IPv4<br>
:[[Datei:ClipCapIt-200521-152642.PNG|50px]] Manuell<br>
:[[Datei:ClipCapIt-260513-095925.PNG|250px]] Manuell<br>
:[[Datei:ClipCapIt-200521-152742.PNG|50px]] Bei Subnetz kommt nicht die Subnetzmaske sondern das Netzwerk mit Suffix. Bei einer 24 Maske (= 255.255.255.0) ist das die IP 0 mit Suffix /24<br>
:[[Datei:ClipCapIt-260513-100030.PNG|250px]] Bei Subnetz kommt nicht die Subnetzmaske sondern das Netzwerk mit Suffix. Bei einer 24 Maske (= 255.255.255.0) ist das die IP 0 mit Suffix /24<br>
:[[Datei:ClipCapIt-200521-153302.PNG|50px]] Erledigt<br>
Wenn Ihr kein IPv6 nutzt, würde ich es an dieser Stelle deaktivieren, ansonsten durchkonfigurieren: [[Datei:ClipCapIt-260513-100432.PNG|50px]]<br>
:[[Datei:ClipCapIt-220427-120259.PNG|50px]] Bei Bedarf, sonst leer lassen<br>
:[[Datei:ClipCapIt-260513-100538.PNG|250px]] Erledigt<br>
:[[Datei:ClipCapIt-220427-120335.PNG|50px]] Erledigt<br>
:[[Datei:ClipCapIt-260513-100618.PNG|250px]] Proxy bei Bedarf, sonst leer lassen<br>
:[[Datei:ClipCapIt-220427-120400.PNG|50px]] Nutzt die ganze Festplatte ohne LVM (also Haken entfernen). Die Festplatte lässt sich später trotzdem leicht vergrößern<br>
:[[Datei:ClipCapIt-260513-100730.PNG|250px]] Den Test abwarten und dann auf Erledigt<br>
:[[Datei:ClipCapIt-220427-120443.PNG|50px]] Erledigt<br>
:[[Datei:ClipCapIt-260513-100901.PNG|250px]] Nutzt die ganze Festplatte ohne LVM (also Haken entfernen). Die Festplatte lässt sich später trotzdem sehr leicht vergrößern<br>
:[[Datei:ClipCapIt-220427-120505.PNG|50px]] Fortfahren<br>
:[[Datei:ClipCapIt-260513-101002.PNG|250px]] Erledigt<br>
:[[Datei:ClipCapIt-220427-120827.PNG|50px]] Den Servernamen festlegen. Ich lege hier den Benutzer '''''installadmin''''' an. Wählt euren Benutzer und Passwort nach Wunsch (Aufschreiben!)<br>
:[[Datei:ClipCapIt-260513-101040.PNG|250px]] Fortfahren<br>
:[[Datei:ClipCapIt-240527-140937.PNG|50px]] Falls Ihr Ubuntu Pro habt, könnet Ihr es hier aktiveren, ansonsten einfach {{Key|[Fortfahren]}}<br>
:[[Datei:ClipCapIt-260513-101216.PNG|250px]] Den Servernamen festlegen. Ich lege hier den Benutzer '''''installadmin''''' an. Wählt euren Benutzer und Passwort nach Wunsch (Aufschreiben!)<br>
:[[Datei:ClipCapIt-240527-141106.PNG|50px]] OpenSSH-Server auswählen => Erledigt (für Zugriff z.B. mit Putty)<br>
:[[Datei:ClipCapIt-260513-101253.PNG|250px]] Falls Ihr Ubuntu Pro habt, könnet Ihr es hier aktiveren, ansonsten einfach {{Key|[Fortfahren]}}<br>
:[[Datei:ClipCapIt-240527-141137.PNG|50px]] Erledigt<br>
:[[Datei:ClipCapIt-260513-101402.PNG|250px]] OpenSSH-Server auswählen => Erledigt (für Zugriff z.B. mit Putty). Falls Ihr hier per {{code|Import SSH key}} einen Schlüssel importiert, ist keine an SSH mit einem Passwort möglich! Als nur wenn Ihr wisst was Ihr tut!<br>
Ab jetzt heißt es abwarten. Wenn er kann lädt er gleich ein paar Sicherheitsupdates nach:<br>
:[[Datei:ClipCapIt-260513-101620.PNG|250px]] Erledigt<br>
:[[Datei:ClipCapIt-220427-121943.PNG|50px]] Jetzt neustarten<br>
Ab jetzt heißt es abwarten. Wenn er kann lädt er gleich ein paar Sicherheitsupdates nach.<br>
:[[Datei:ClipCapIt-220427-122036.PNG|50px]] ISO aus der VM entfernen und {{Key|Enter}} drücken<br>
:[[Datei:ClipCapIt-260513-103148.PNG|250px]] Jetzt neustarten<br>
:[[Datei:ClipCapIt-220427-122152.PNG|50px]] Nach dem Reboot wartet ab bis diverse Meldungen abgelaufen sind<br>
:[[Datei:ClipCapIt-260513-103236.PNG|250px]] ISO aus der VM entfernen (Konfiguration der VM bearbeiten!) und {{Key|Enter}} drücken<br>
:[[Datei:ClipCapIt-260513-103345.PNG|250px]] Nach dem Reboot wartet ab bis diverse Meldungen abgelaufen sind / sich nichts mehr auf dem Bildschirm tut<br>
----
----


Zeile 37: Zeile 38:
Damit wechselt man dauerhaft zum '''''root''''' Benutzer und muss nicht vor jedem Befehl ein <code>sudo</code> stellen.<br>
Damit wechselt man dauerhaft zum '''''root''''' Benutzer und muss nicht vor jedem Befehl ein <code>sudo</code> stellen.<br>
----
----
===root wieder freischalten===
===Bei Bedarf: root wieder freischalten===
{{Hinweis| Ob nun wie ich immer als root arbeiten wollt oder aber als einfacher Benutzer und dann immer <code>sudo</code> verwendet müsst Ihr selbst wissen}}
{{Hinweis| Ob nun wie ich immer als root arbeiten wollt oder aber als einfacher Benutzer und dann immer <code>sudo</code> verwendet müsst Ihr selbst wissen}}
* Mit Benutzer '''''installadmin''''' anmelden<br>
* Mit Benutzer '''''installadmin''''' anmelden<br>
Zeile 50: Zeile 51:


sucht nach der Zeile ({{Key|STRG}} + {{Key|W}} ist Suchen) nach
sucht nach der Zeile ({{Key|STRG}} + {{Key|W}} ist Suchen) nach
  #PermitRootLogin without-password
  #PermitRootLogin prohibit-password
und stellt den Cursor in die Zeile.<br>
und stellt den Cursor in die Zeile.<br>
Drückt nun einmal {{Key|F9}} und 2x {{Key|F10}} - damit erstellt Ihr eine Kopie der Zeile.<br>
Drückt nun einmal {{Key|F9}} und 2x {{Key|F10}} - damit erstellt Ihr eine Kopie der Zeile.<br>
Ändert die Kopie wie folgt ab:<br>
Ändert die Kopie wie folgt ab:<br>
  PermitRootLogin yes
  PermitRootLogin yes
:[[Datei:ClipCapIt-200521-161435.PNG|150px]]<br>
:[[Datei:ClipCapIt-260513-104318.PNG]]<br>
Speichert die Datei ({{Key|STRG}} + {{Key|x}}, dann {{Key|y}} und {{Key|Enter}}) und startet den ssh Dienst neu:<br>
Speichert die Datei ({{Key|STRG}} + {{Key|x}}, dann {{Key|y}} und {{Key|Enter}}) und startet den ssh Dienst neu:<br>
  systemctl restart ssh.service
  systemctl restart ssh.service
Zeile 69: Zeile 70:
===Anmelden als root===
===Anmelden als root===
Startet PuTTY wieder und meldet euch diesmal gleich als Benutzer '''''root''''' an.<br>
Startet PuTTY wieder und meldet euch diesmal gleich als Benutzer '''''root''''' an.<br>
Alternativ als der Installationsbenutzer und wechselt per<br>
sudo -i
dauerhaft zum '''''root'''''<br>
----
----
===nano & Co auf Deutsch===
===nano & Co auf Deutsch===
'''''nano''''' war eben z.B. noch auf Englisch, mit
'''''nano''''' war eben z.B. noch auf Englisch, mit
Zeile 77: Zeile 82:


===root farbiger Prompt===
===root farbiger Prompt===
Als '''''root''''' anmelden:<br>
Ich nutze gerne den farbigen Prompt, wenn Ihr als normaler Benutzer zu diesem wechselt, sieht man das optisch noch besser das man gewechselt hat.<br>
Als '''''root''''' angemeldet:<br>
  nano ~/.bashrc
  nano ~/.bashrc
Zeile 39 ({{Key|Alt}} + {{Key|C}} aktiviert Zeilennummernanzeige):<br>
Zeile 39 ({{Key|Alt}} + {{Key|C}} aktiviert Zeilennummernanzeige):<br>
Zeile 83: Zeile 89:
ändern zu (# entfernen):<br>
ändern zu (# entfernen):<br>
  force_color_prompt=yes
  force_color_prompt=yes
:[[Datei:ClipCapIt-200521-162422.PNG|250px]]<br>
<br>
<br>
nun wieder Abmelden - ab der nächsten Anmeldung ist der neue Prompt aktiv.<br>
Per<br>
:[[Datei:ClipCapIt-200521-162422.PNG|150px]]<br>
Wer den sofort haben will (ohne neu Anmelden):<br>
  source ~/.bashrc
  source ~/.bashrc
könnt Ihr das direkt übernehmen.
----
----
===Bash History aus mehreren Sitzungen gleichzeitig===
===Bash History aus mehreren Sitzungen gleichzeitig===
Wenn man mehr als eine SSH Sitzung zum Zabbix-Server hat, gewinnt in der Bash-Histoy die Sitzung von der man sich zuletzt abmeldet.<br>
Wenn man mehr als eine SSH Sitzung zum Zabbix-Server hat, gewinnt in der Bash-Histoy die Sitzung von der man sich zuletzt abmeldet.<br>
Zeile 123: Zeile 130:
  network: {config: disabled}
  network: {config: disabled}
Dann könnte Ihr in der folgenden Datei etwas ändern, die Warnungen das es einen reboot nicht übersteht könnt Ihr ignorieren, dafür haben wir die andere Datei angelegt.<br>
Dann könnte Ihr in der folgenden Datei etwas ändern, die Warnungen das es einen reboot nicht übersteht könnt Ihr ignorieren, dafür haben wir die andere Datei angelegt.<br>
  nano /etc/netplan/50-cloud-init.yaml
  nano /etc/netplan/00-installer-config.yaml
:[[Datei:ClipCapIt-200521-162802.PNG|150px]]<br>
:[[Datei:ClipCapIt-260513-105129.PNG|250px]]<br>
{{Hinweis| Weiter unten deinstalliere ich Cloud-Init komplett (wenn die VM nicht bei einem Hoster läuft), da könnte man sich diesen Schritt hier sparen}}
{{Hinweis| Weiter unten deinstalliere ich Cloud-Init komplett (wenn die VM nicht bei einem Hoster läuft), da könnte man sich diesen Schritt hier sparen}}
----
----


===Updates einspielen===
===Updates einspielen===
* wieder anmelden als '''''root''''' bzw. zum '''''root''''' wechseln
als '''''root''''' bzw. zum '''''root''''' wechseln:<br>
Ich mache das normalerweise immer als Einzeiler:<br>
apt update && apt upgrade -y && apt autoremove -y
Das ganze im Detail:<br>
* Updates suchen für Betriebssystem: (aktualisiert den Katalog aus den Update-Quellen)
* Updates suchen für Betriebssystem: (aktualisiert den Katalog aus den Update-Quellen)
  apt update
  apt update
Zeile 136: Zeile 146:
* Nach Update überflüssige Pakete entfernen:
* Nach Update überflüssige Pakete entfernen:
  apt autoremove -y
  apt autoremove -y
<br>
Ich mache das normalerweise immer als Einzeiler:
apt update && apt upgrade -y && apt autoremove -y
<br>
<br>
<br>
----
----
Zeile 174: Zeile 180:


====Proxmox PVE====
====Proxmox PVE====
In den Einstellungen der VM den Agenten aktivieren:<br>
In den Einstellungen der VM den {{code|QEMU Guest Agent}} aktivieren:<br>
:[[Datei:ClipCapIt-250527-113037.PNG]]<br>
:[[Datei:ClipCapIt-260513-105702.PNG]]<br>
:[[Datei:ClipCapIt-260513-105545.PNG]]<br>
Und dann in der VM die Tools installieren:<br>
Und dann in der VM die Tools installieren:<br>
  apt -y install qemu-guest-agent
  apt -y install qemu-guest-agent
<br>
<br>
Damit dies aktiv wird, müssen wir die VM einmal ganz ausschalten und wieder einschalten:<br>
shutdown -h now
Und danach wieder einschalten und neu an SSH anmelden.<br>
In der Summary der VM sollte nun die IP-Adresse sichtbar sein:<br>
:[[Datei:ClipCapIt-260513-110008.PNG]]<br>
----
----


===Multipathing deinstallieren (wenn der Server eine VM ist)===
===Multipathing deinstallieren (wenn der Server eine VM ist)===
Ab Werk wird nun das
Ab Werk findet man im
  /var/log/syslog
  tail -n 50000 -F /var/log/syslog | grep multipathd
mit Multipath-Meldungen vollgemüllt:<br>
einige Multipath-Meldungen:<br>
  2024-05-27T12:32:47.571374+00:00 ubuntu2404 systemd[1]: Started multipathd.service - Device-Mapper Multipath Device Controller.
  ...
  2024-05-27T12:32:47.592304+00:00 ubuntu2404 kernel: systemd[1]: Listening on multipathd.socket - multipathd control socket.
  2026-05-13T09:03:29.804259+00:00 zabbixtest systemd[1]: Starting multipathd.service - Device-Mapper Multipath Device Controller...
2024-05-27T12:32:47.592385+00:00 ubuntu2404 kernel: systemd[1]: Starting multipathd.service - Device-Mapper Multipath Device Controller...
  2026-05-13T09:03:29.804288+00:00 zabbixtest multipathd[735]: multipathd v0.14.3: start up
  2024-05-27T12:32:48.141146+00:00 ubuntu2404 multipathd[467]: sda: failed to get udev uid: No data available
  2026-05-13T09:03:29.804291+00:00 zabbixtest multipathd[735]: reconfigure: setting up paths and maps
2024-05-27T12:32:48.141212+00:00 ubuntu2404 multipathd[467]: sda: failed to get path uid
  2026-05-13T09:03:29.804294+00:00 zabbixtest systemd[1]: Started multipathd.service - Device-Mapper Multipath Device Controller.
2024-05-27T12:32:48.141278+00:00 ubuntu2404 multipathd[467]: uevent trigger error
  2026-05-13T09:03:29.804922+00:00 zabbixtest systemd[1]: Starting multipathd-queueing.service - Enable queuing for multipath maps...
2024-05-27T12:32:57.634912+00:00 ubuntu2404 multipathd[467]: sda: triggering change event to reinitialize
  2026-05-13T09:03:29.805021+00:00 zabbixtest systemd[1]: Finished multipathd-queueing.service - Enable queuing for multipath maps.
  2024-05-27T12:32:57.667862+00:00 ubuntu2404 multipathd[467]: sda: failed to get udev uid: No data available
In einer VM macht Multipath nur in Ausnahmefällen Sinn, also deaktivieren und deinstallieren:<br>
  2024-05-27T12:32:57.667930+00:00 ubuntu2404 multipathd[467]: sda: failed to get path uid
2024-05-27T12:32:57.667959+00:00 ubuntu2404 multipathd[467]: uevent trigger error
2024-05-27T12:33:07.637080+00:00 ubuntu2404 multipathd[467]: sda: triggering change event to reinitialize
2024-05-27T12:33:07.676773+00:00 ubuntu2404 multipathd[467]: sda: failed to get udev uid: No data available
  2024-05-27T12:33:07.676839+00:00 ubuntu2404 multipathd[467]: sda: failed to get path uid
2024-05-27T12:33:07.676865+00:00 ubuntu2404 multipathd[467]: uevent trigger error
2024-05-27T12:33:17.641466+00:00 ubuntu2404 multipathd[467]: sda: triggering change event to reinitialize
2024-05-27T12:33:17.709843+00:00 ubuntu2404 multipathd[467]: sda: failed to get sysfs uid: No such file or directory
2024-05-27T12:33:17.709915+00:00 ubuntu2404 multipathd[467]: sda: failed to get sgio uid: No such file or directory
2024-05-27T12:33:17.709942+00:00 ubuntu2404 multipathd[467]: sda: failed to get path uid
2024-05-27T12:33:17.709969+00:00 ubuntu2404 multipathd[467]: uevent trigger error
2024-05-27T12:33:28.134951+00:00 ubuntu2404 multipathd[467]: sda: not initialized after 3 udev retriggers
  2024-05-27T12:33:29.139933+00:00 ubuntu2404 multipathd[467]: sda: add missing path
2024-05-27T12:33:29.140037+00:00 ubuntu2404 multipathd[467]: sda: failed to get sysfs uid: No such file or directory
2024-05-27T12:33:29.140063+00:00 ubuntu2404 multipathd[467]: sda: failed to get sgio uid: No such file or directory
2024-05-27T12:33:29.140086+00:00 ubuntu2404 multipathd[467]: sda: no WWID in state "undef
2024-05-27T12:33:29.140109+00:00 ubuntu2404 multipathd[467]: ", giving up
2024-05-27T12:33:29.140181+00:00 ubuntu2404 multipathd[467]: sda: check_path() failed, removing
Unter Ubuntu 24.04/22.04 scheint es nicht mehr ganz so schlimm wie unter 20.04 - aber in einer VM macht Multipath keinen Sinn, also deaktivieren und deinstallieren um das Syslog von den Meldungen befreien:<br>
  systemctl stop multipathd.service && systemctl disable multipathd.service
  systemctl stop multipathd.service && systemctl disable multipathd.service
  apt install kpartx libsgutils2-1.46-2 sg3-utils sg3-utils-udev
  apt install libsgutils2-1.48 sg3-utils sg3-utils-udev
  apt remove -y multipath-tools && apt purge -y multipath-tools
  apt remove -y multipath-tools && apt purge -y multipath-tools
Die <code>apt install</code> Zeile ist da drin weil diese Pakete ggf. von anderen Anleitung vorausgesetzt werden. Die Pakete werden dadurch auf '''''manuell installiert''''' gesetzt und dann nicht bei einem <code>apt autoremove</code> deinstalliert<br>
apt autoremove -y
Die <code>apt install</code> Zeile ist da drin weil diese Pakete ggf. von anderen Anleitung vorausgesetzt werden. Die Pakete werden dadurch auf '''''manuell installiert''''' gesetzt und dann nicht bei einem <code>apt autoremove</code> deinstalliert. Die Multipath-Bibliotheken habe ich dabei weggelassen.<br>
----
----


Zeile 226: Zeile 220:
  apt purge -y cloud-init
  apt purge -y cloud-init
  rm -rf /etc/cloud/ && sudo rm -rf /var/lib/cloud/
  rm -rf /etc/cloud/ && sudo rm -rf /var/lib/cloud/
  apt install eatmydata libeatmydata1 python-babel-localedata python3-babel python3-jinja2 python3-json-pointer python3-jsonpatch python3-jsonschema python3-markupsafe python3-pyrsistent python3-tz -y
  apt install eatmydata libeatmydata1 python-babel-localedata python3-jinja2 python3-jsonpatch python3-jsonschema-specifications python3-passlib python3-rpds-py python3-babel python3-json-pointer python3-jsonschema python3-markupsafe python3-referencing gdisk libjs-sphinxdoc -y
apt autoremove -y
  reboot
  reboot
Die <code>apt install</code> Zeile ist da drin weil diese Pakete ggf. von anderen Anleitung vorausgesetzt werden. Die Pakte werden dadurch auf '''''manuell installiert''''' gesetzt und dann nicht bei einem <code>apt autoremove</code> deinstalliert<br>
Die <code>apt install</code> Zeile ist da drin weil diese Pakete ggf. von anderen Anleitung vorausgesetzt werden. Die Pakte werden dadurch auf '''''manuell installiert''''' gesetzt und dann nicht bei einem <code>apt autoremove</code> deinstalliert<br>
----
----
===OpenIPMI und IPMItool deinstallieren===
===OpenIPMI und IPMItool deinstallieren===
Bei meinen VMs schlägt der Start dieses Dienstes eh immer fehl (weil es keine passende Hardware gibt), also weg damit:<br>
Bei meinen VMs schlägt der Start dieses Dienstes eh immer fehl (weil es keine passende Hardware gibt), also weg damit:<br>
Zeile 238: Zeile 234:


===Zeitzone setzen===
===Zeitzone setzen===
In meiner VM ist die Uhrzeit zu diesem Zeitpunkt falsch (gebt mal probeweise <code>date</code> ein) - weil der ESXi-Host auf UTC Zeit läuft und die Ubuntu in der VM die richtige Zeitzone nicht eingestellt hat.<br>
In meiner VM ist die Uhrzeit zu diesem Zeitpunkt falsch (gebt mal probeweise <code>date</code> ein) - weil der ESXi- oder Proxmox-Host auf UTC Zeit läuft und Ubuntu in der VM die richtige Zeitzone nicht eingestellt hat.<br>
Wir korrigieren das mit<br>
Wir korrigieren das mit<br>
  timedatectl set-timezone Europe/Berlin
  timedatectl set-timezone Europe/Berlin
Zeile 245: Zeile 241:
sollte dann die richtige Uhrzeit ausspucken.<br>
sollte dann die richtige Uhrzeit ausspucken.<br>
----
----
===Zeitserver setzen===
===Zeitserver setzen===
Es kann Sinnvoll sein, statt externer Zeitserver die eigenen internen zu Nutzen. Eine meiner Prüfungen in meinen Templates ist die Zeitabweichung des Hosts gegenüber dem Zabbix Server. Zum Beispiel in Active Directory-Domänen scheiter die Anmeldung, wenn der Zeitunterschied zwischen Domänencontroller und Client mehr als 15 Minuten beträgt, ab 5 Minuten kann es schon zickig werden.<br>
Es ist ok wenn alle die gleiche falsche Zeit haben. Ich synchronisiere den Zabbix Servers deshalb gerne mit dem zentralen Domänenkontroller mit der PDC-Rolle.<br>
{{Hinweis| Wenn Ihr diesen Schritt überspringt, wird {{Key|ntp.ubuntu.com}} als Zeitserver verwendet}}
{{Hinweis| Wenn Ihr diesen Schritt überspringt, wird {{Key|ntp.ubuntu.com}} als Zeitserver verwendet}}
Für die Zeitsynchronisierung ist der Dienst <code>systemd-timesyncd.service</code> zuständig, dieser wird über die Datei
Für die Zeitsynchronisierung ist ab Ubuntu 26.04 '''''Chrony''''' zuständig, über das erstellen der Datei
nano /etc/systemd/timesyncd.conf
nano /etc/chrony/sources.d/local-ntp-server.sources
konfiguriert:<br>
Können wir eigene Zeitserver hinzufügen (für jeden Server eine solche Zeile):<br>
<source "lang=bash">
<source "lang=bash">
#  This file is part of systemd.
server 192.168.1.81 iburst
#
#  systemd is free software; you can redistribute it and/or modify it under the
#  terms of the GNU Lesser General Public License as published by the Free
#  Software Foundation; either version 2.1 of the License, or (at your option)
#  any later version.
#
# Entries in this file show the compile time defaults. Local configuration
# should be created by either modifying this file (or a copy of it placed in
# /etc/ if the original file is shipped in /usr/), or by creating "drop-ins" in
# the /etc/systemd/timesyncd.conf.d/ directory. The latter is generally
# recommended. Defaults can be restored by simply deleting the main
# configuration file and all drop-ins located in /etc/.
#
# Use 'systemd-analyze cat-config systemd/timesyncd.conf' to display the full config.
#
# See timesyncd.conf(5) for details.
 
[Time]
NTP=192.168.1.81
FallbackNTP=192.168.1.198 de.pool.ntp.org
RootDistanceMaxSec=30
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048
#ConnectionRetrySec=30
#SaveIntervalSec=60
</source>
</source>
Sowohl die Liste der '''NTP=''' als auch der '''FallbackNTP=''' erwartet eine per Leerzeichen getrennte Liste der möglichen Server.<br>
Nach der Änderung müssen wir ''''''chrony''''' das neu laden lassen:<br>
Laut Anleitung hört der Dienst aber beim ersten Treffer auf zu suchen. In der Praxis setzt also einen NTP-Server und ggf. die Fallback. Setzt Ihr einen Wert nicht, lasst diesen also auskommentiert, so gilt der Default-Wert, beim Fallback gilt dann <code>FallbackNTP=ntp.ubuntu.com</code>.<br>
  chronyc reload sources
Nach der Änderung müsst Ihr den Dienst einmal neu starten:<br>
  systemctl restart systemd-timesyncd.service
und mit folgenden Befehl könnt Ihr den Status abfragen:<br>
und mit folgenden Befehl könnt Ihr den Status abfragen:<br>
  timedatectl show-timesync
  timedatectl status
Beispielausgabe:<br>
                Local time: Mi 2026-05-13 11:21:27 CEST
            Universal time: Mi 2026-05-13 09:21:27 UTC
                  RTC time: Mi 2026-05-13 09:21:26
                Time zone: Europe/Berlin (CEST, +0200)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no
Die verwendeten Zeitquellen seht Ihr per<br>
chronyc sources
Beispielausgabe:<br>
MS Name/IP address        Stratum Poll Reach LastRx Last sample
===============================================================================
^* ntp-nts-2.ps5.canonical.>    2  6    17    27  -2075us[-2480us] +/-  21ms
^? DC81.znil.local              4  6    17    27  -1255us[-1660us] +/-  46ms
^+ ntp-nts-3.ps5.canonical.>    2  6    17    28  +206us[ -199us] +/-  19ms
^- ntp-nts-2.ps6.canonical.>    2  6    17    28  +7728us[+7323us] +/-  81ms
^- ntp-nts-3.ps6.canonical.>    2  6    17    27  +1970us[+1565us] +/-  78ms
^- ntp-nts-1.ps5.canonical.>    2  6    17    28    +93us[ -312us] +/-  18ms
Und welche er letztendlich genommen hat mit<br>
chronyc tracking
Beispielausgabe:<br>
Beispielausgabe:<br>
  LinkNTPServers=fd00::1eed:6fff:fe71:f1c0
  Reference ID    : B97DBE7B (ntp-nts-3.ps5.canonical.com)
  SystemNTPServers=192.168.1.81
Stratum        : 3
  FallbackNTPServers=192.168.1.198 de.pool.ntp.org
Ref time (UTC)  : Wed May 13 09:25:28 2026
  ServerName=192.168.1.81
  System time    : 0.000000546 seconds slow of NTP time
  ServerAddress=192.168.1.81
Last offset    : +0.000948038 seconds
  RootDistanceMaxUSec=30s
  RMS offset      : 0.000487364 seconds
  PollIntervalMinUSec=32s
  Frequency      : 9.203 ppm slow
  PollIntervalMaxUSec=34min 8s
  Residual freq  : +7.510 ppm
  PollIntervalUSec=2min 8s
  Skew            : 2.559 ppm
  NTPMessage={ Leap=0, Version=3, Mode=4, Stratum=3, Precision=-23, RootDelay=20.324ms, RootDispersion=28.579ms, Reference=C0A801C6, OriginateTimestamp=Tue 2024-06-04 08:22:24 CEST,
  Root delay      : 0.033688802 seconds
ReceiveTimestamp=Tue 2024-06-04 08:22:24 CEST, TransmitTimestamp=Tue 2024-06-04 08:22:24 CEST, DestinationTimestamp=Tue 2024-06-04 08:22:24 CEST, Ignored=no, PacketCount=2, Jitter=239us }
  Root dispersion : 0.001197023 seconds
  Frequency=1158037
  Update interval : 64.1 seconds
Wenn die untere Zeile mit <code>NTPMessage=</code> nicht erscheint, habt Ihr ein Problem!<br>
  Leap status    : Normal
Mit<br>
Wie man sieht, nimmt er einen externen. Wenn wir aber den internen Erzwingen wollen, müssen wir die anderen Quellen auskommentieren:<br>
  journalctl -fu systemd-timesyncd.service
nano /etc/chrony/sources.d/ubuntu-ntp-pools.sources
könnte Ihr nach dem Grund suchen. Steht da etwas wie '''''Server has to large root distance. Disconnecting''''' und es gegen einen Domänencontroller geht so stellt sicher das
und vor alle {{code|pool}} Zeilen ein {{code|#}} davor setzen:<br>
* Es der PDC ist
:[[Datei:ClipCapIt-260513-113129.PNG|300px]]<br>
* Dieser sich auch selbst mit einer externen Quelle synchronisiert
Den Dienst einmal neu starten (statt reloaden, damit er schneller wieder synced):<br>
* Stellt ggf. den Wert von <code>RootDistanceMaxUSec=30s</code> noch höher.
  systemctl restart chrony.service
und den Status prüfen bis in der letzten Zeile {{code|Leap status : Normal}} steht:<br>
Reference ID    : C0A80151 (DC81.znil.local)
Stratum        : 5
Ref time (UTC)  : Wed May 13 09:32:15 2026
System time    : 0.000017215 seconds fast of NTP time
Last offset    : +0.000032023 seconds
  RMS offset      : 0.000032023 seconds
Frequency      : 10.343 ppm slow
Residual freq  : +1.266 ppm
Skew            : 31.972 ppm
Root delay      : 0.026105130 seconds
Root dispersion : 0.038228851 seconds
Update interval : 2.0 seconds
Leap status    : Normal
----
----


Zeile 321: Zeile 328:
Wie schon zuvor beschrieben aktualisiere ich Ubuntu (und andere Software aus Repos) gerne per folgenden Einzeiler:
Wie schon zuvor beschrieben aktualisiere ich Ubuntu (und andere Software aus Repos) gerne per folgenden Einzeiler:
  apt update && apt upgrade -y && apt autoremove -y
  apt update && apt upgrade -y && apt autoremove -y
In neueren Versionen werden dabei Dienste ggf. automatische neu gestartet, es gibt dann eine Meldung wie diese:
In neueren Ubunti Versionen werden dabei Dienste ggf. automatische neu gestartet (wenn man den Einzeiler nimmt!), es gibt dann eine Meldung wie diese:
  systemctl restart apache2.service cron.service fwupd.service mariadb.service open-vm-tools.service packagekit.service polkit.service rsyslog.service snmptrapd.service snmptt.service udisks2.service upower.service vgauth.service zabbix-agent2.service zabbix-web-service.service
  systemctl restart apache2.service cron.service fwupd.service mariadb.service open-vm-tools.service packagekit.service polkit.service rsyslog.service snmptrapd.service snmptt.service udisks2.service upower.service vgauth.service zabbix-agent2.service zabbix-web-service.service
   
   
Zeile 337: Zeile 344:
Als Lösung schalte ich inzwischen den automatischen Neustart der Dienste ab, es wird dann nur eine Liste der Dienste ausgegeben die neu gestartet werden müssten:<br>
Als Lösung schalte ich inzwischen den automatischen Neustart der Dienste ab, es wird dann nur eine Liste der Dienste ausgegeben die neu gestartet werden müssten:<br>
  nano /etc/needrestart/needrestart.conf
  nano /etc/needrestart/needrestart.conf
und dort ziemlich am Anfang:
und dort ziemlich am Anfang ab Zeile 33:
<source lang="bash">
<source lang="bash">
# Restart mode: (l)ist only, (i)nteractive or (a)utomatically.
# Restart mode: (l)ist only, (i)nteractive or (a)utomatically.
Zeile 348: Zeile 355:
#$nrconf{restart} = 'i';
#$nrconf{restart} = 'i';
</source>
</source>
Bei der letzten Zeile entfernen wir das Kommentarzeichen davor und machen aus dem <code>i</code> ein <code>l</code>, wie es auch in der obersten Zeile beschrieben wird:
Bei der letzten Zeile 40 entfernen wir das Kommentarzeichen davor und machen aus dem <code>i</code> ein <code>l</code>, wie es auch in der obersten Zeile beschrieben wird:
  $nrconf{restart} = 'l';
  $nrconf{restart} = 'l';
So werden notwendige Neustarts nur aufgelistet. Diese kann man dann von Hand neu starten oder einfach das ganze System rebooten.<br>
So werden notwendige Neustarts nur aufgelistet. Diese kann man dann von Hand neu starten oder einfach das ganze System rebooten.<br>
----
----

Aktuelle Version vom 13. Mai 2026, 11:41 Uhr

Grundinstallation

Hinweis: Ich habe die offizielle ISO verwendet: https://ubuntu.com/download/server m die Datei heißt dann ubuntu-26.04-live-server-amd64.iso, an die Versionsnummer wird mit der Zeit ein .1, .2 und so weiter angehängt
Hinweis: Ich installiere mit Absicht OHNE LVM. Ubuntu erstellt inzwischen keine eigene Partition für SWAP mehr und ohne LVM lässt sich der Festplattenplatz bei einer Installation als VM auf einfachste Weise im laufenden Betrieb erweitern. Natürlich ginge das auch mit LVM (mit mehr Schritten), ich sehe hier den Nutzen und Vorteil in einer VM aber nicht.

Ggf. noch die ISO/CD einlegen (falls nicht schon in der VM Konfiguriert) und Einschalten/Starten,
die Fragen beantwortet Ihr wie folgt (sind ggf. die Überschriften der Dialoge):

Try or Install Ubuntu Server

Deutsch
German / German
Wenn er einen neueren Installer findet und fragt ob er auf diesen aktualisieren soll - Ja!
Ubuntu Server
Jetzt könnt Ihr schon die gewünschte feste IP-Adresse einstellen. Wählt dazu mit den Pfeiltasten den ensXXX Eintrag aus und drückt Enter:
ensXXX => Bearbeite IPv4
Manuell
Bei Subnetz kommt nicht die Subnetzmaske sondern das Netzwerk mit Suffix. Bei einer 24 Maske (= 255.255.255.0) ist das die IP 0 mit Suffix /24

Wenn Ihr kein IPv6 nutzt, würde ich es an dieser Stelle deaktivieren, ansonsten durchkonfigurieren:

Erledigt
Proxy bei Bedarf, sonst leer lassen
Den Test abwarten und dann auf Erledigt
Nutzt die ganze Festplatte ohne LVM (also Haken entfernen). Die Festplatte lässt sich später trotzdem sehr leicht vergrößern
Erledigt
Fortfahren
Den Servernamen festlegen. Ich lege hier den Benutzer installadmin an. Wählt euren Benutzer und Passwort nach Wunsch (Aufschreiben!)
Falls Ihr Ubuntu Pro habt, könnet Ihr es hier aktiveren, ansonsten einfach [Fortfahren]
OpenSSH-Server auswählen => Erledigt (für Zugriff z.B. mit Putty). Falls Ihr hier per Import SSH key einen Schlüssel importiert, ist keine an SSH mit einem Passwort möglich! Als nur wenn Ihr wisst was Ihr tut!
Erledigt

Ab jetzt heißt es abwarten. Wenn er kann lädt er gleich ein paar Sicherheitsupdates nach.

Jetzt neustarten
ISO aus der VM entfernen (Konfiguration der VM bearbeiten!) und Enter drücken
Nach dem Reboot wartet ab bis diverse Meldungen abgelaufen sind / sich nichts mehr auf dem Bildschirm tut

PuTTY

Ab dieser Stelle könnt Ihr PuTTY oder den SSH Client eurer Wahl nutzen - was ich dringend empfehle. Denn dann könnt Ihr hier vorgeschlagenen Befehle einfach per Copy&Paste übernehmen.
Die IP-Adresse habt Ihr zu diesem Zeitpunkt ja bereits festgelegt:


Nach der Anmeldung nutze ich immer gerne ein

sudo -i

Damit wechselt man dauerhaft zum root Benutzer und muss nicht vor jedem Befehl ein sudo stellen.


Bei Bedarf: root wieder freischalten

Hinweis: Ob nun wie ich immer als root arbeiten wollt oder aber als einfacher Benutzer und dann immer sudo verwendet müsst Ihr selbst wissen
  • Mit Benutzer installadmin anmelden
sudo -i
  • Kennwort des Benutzer installadmin eintippen
passwd root
  • neues Kennwort für "root" 2x eintippen
  • Lokal Anmelden kann man sich nun mit root - aber eine Anmeldung über SSH funktioniert dann immer noch nicht.
  • Damit diese auch funktioniert müsst ihr die sshd_config bearbeiten:
nano /etc/ssh/sshd_config

sucht nach der Zeile (STRG + W ist Suchen) nach

#PermitRootLogin prohibit-password

und stellt den Cursor in die Zeile.
Drückt nun einmal F9 und 2x F10 - damit erstellt Ihr eine Kopie der Zeile.
Ändert die Kopie wie folgt ab:

PermitRootLogin yes

Speichert die Datei (STRG + x, dann y und Enter) und startet den ssh Dienst neu:

systemctl restart ssh.service

Ab dann klappt es auch mit dem SSH-Login für den Benutzer root, z.B. über puTTY
Jetzt 2x

exit

eintippen wodurch sich das PuTTY Fenster schließt - der (eingeschränkte) Benutzer installadmin hat sich somit abgemeldet

Hinweis:

Ja, ich persönlich arbeite gerne als root und habe diesen für die Anmeldung freigeschaltet. Was ich nicht mache ist das Login per SSH mit Passwort zu erlauben. Ich hinterlege also immer einen SSH-Key für die Anmeldung und nutze diesen statt des Kennwortes. Die Lösung hier ist einfach gehalten, der Profi mögen anpassen wie er es braucht. Ein Anmeldung als eingeschränkter Benutzer geht natürlich auch, das erste was ich dann immer mache ist ein sudo -i um dauerhaft zum root zu wechseln

Anmelden als root

Startet PuTTY wieder und meldet euch diesmal gleich als Benutzer root an.
Alternativ als der Installationsbenutzer und wechselt per

sudo -i

dauerhaft zum root


nano & Co auf Deutsch

nano war eben z.B. noch auf Englisch, mit

apt install -y language-pack-de

ist es (und vieles andere) auf deutsch.


root farbiger Prompt

Ich nutze gerne den farbigen Prompt, wenn Ihr als normaler Benutzer zu diesem wechselt, sieht man das optisch noch besser das man gewechselt hat.
Als root angemeldet:

nano ~/.bashrc

Zeile 39 (Alt + C aktiviert Zeilennummernanzeige):

#force_color_prompt=yes

ändern zu (# entfernen):

force_color_prompt=yes


Per

source ~/.bashrc

könnt Ihr das direkt übernehmen.


Bash History aus mehreren Sitzungen gleichzeitig

Wenn man mehr als eine SSH Sitzung zum Zabbix-Server hat, gewinnt in der Bash-Histoy die Sitzung von der man sich zuletzt abmeldet.
Nachfolgende Änderung sorgt dafür das sich alle Sitzungen eine Bash-History teilen, was ich in Session 1 also aufrufe lässt sich sofort danach in Session 2 per Pfeil nach oben oder STRG + R Suche finden.
Dazu bearbeiten man noch einmal die

nano ~/.bashrc

und hängt ganz unten folgendes an:

# don't put duplicate lines in the history. See bash(1) for more options
# ... or force ignoredups and ignorespace
HISTCONTROL=ignoredups:ignorespace:erasedups

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=50000
HISTFILESIZE=50000

# After each command, append to the history file
#  and reread it
export PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'n'}history -a; history -c; history -r"

Damit es sofort aktiv wird wieder

source ~/.bashrc

Ja, HISTSIZE und HISTFILESIZE stehen nun 2x in der Datei, der letzte Eintrag gewinnt.


Feste IP-Adresse vergeben

Der Server hat dank des neuen Setupdialoges nun bereits eine feste IP-Adresse.
Solltet Ihr an dieser etwas ändern müssen so müssen wir erst das Cloud-Init deaktivieren:

nano /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg

Inhalt:

network: {config: disabled}

Dann könnte Ihr in der folgenden Datei etwas ändern, die Warnungen das es einen reboot nicht übersteht könnt Ihr ignorieren, dafür haben wir die andere Datei angelegt.

nano /etc/netplan/00-installer-config.yaml

Hinweis: Weiter unten deinstalliere ich Cloud-Init komplett (wenn die VM nicht bei einem Hoster läuft), da könnte man sich diesen Schritt hier sparen

Updates einspielen

als root bzw. zum root wechseln:
Ich mache das normalerweise immer als Einzeiler:

apt update && apt upgrade -y && apt autoremove -y

Das ganze im Detail:

  • Updates suchen für Betriebssystem: (aktualisiert den Katalog aus den Update-Quellen)
apt update
  • Updates einspielen:
apt upgrade -y
  • Nach Update überflüssige Pakete entfernen:
apt autoremove -y



VM Integrationsdienste installieren

Wenn euer installiertes System eine VM, eine Virtuelle Maschine, ist, solltest Ihr je nach verwendeten Hypervisor die passenden Integrationsdienste installieren:


VMware

Unter VMware braucht ihr nichts tun, die

apt install open-vm-tools

sind per Default installiert und aktiv. Ist es keine VMware VM, so könnt Ihr die Tools per

apt remove open-vm-tools

entfernen


Hyper-V

In den Einstellungen der VM solltet Ihr hier den Haken setzen:


In der VM die folgende Datei bearbeiten:

nano /etc/initramfs-tools/modules

und ganz unten die folgenden 4 Zeilen anhängen:

hv_vmbus
hv_storvsc
hv_blkvsc
hv_netvsc

Und dann die Tools installieren:

apt -y install linux-virtual linux-cloud-tools-virtual linux-tools-virtual
update-initramfs -u

und neu starten:

reboot

Quelle: https://community.veeam.com/blogs-and-podcasts-57/how-to-install-hyper-v-integration-services-in-the-ubuntu-linux-vm-6353


Proxmox PVE

In den Einstellungen der VM den QEMU Guest Agent aktivieren:



Und dann in der VM die Tools installieren:

apt -y install qemu-guest-agent


Damit dies aktiv wird, müssen wir die VM einmal ganz ausschalten und wieder einschalten:

shutdown -h now

Und danach wieder einschalten und neu an SSH anmelden.
In der Summary der VM sollte nun die IP-Adresse sichtbar sein:



Multipathing deinstallieren (wenn der Server eine VM ist)

Ab Werk findet man im

tail -n 50000 -F /var/log/syslog | grep multipathd

einige Multipath-Meldungen:

...
2026-05-13T09:03:29.804259+00:00 zabbixtest systemd[1]: Starting multipathd.service - Device-Mapper Multipath Device Controller...
2026-05-13T09:03:29.804288+00:00 zabbixtest multipathd[735]: multipathd v0.14.3: start up
2026-05-13T09:03:29.804291+00:00 zabbixtest multipathd[735]: reconfigure: setting up paths and maps
2026-05-13T09:03:29.804294+00:00 zabbixtest systemd[1]: Started multipathd.service - Device-Mapper Multipath Device Controller.
2026-05-13T09:03:29.804922+00:00 zabbixtest systemd[1]: Starting multipathd-queueing.service - Enable queuing for multipath maps...
2026-05-13T09:03:29.805021+00:00 zabbixtest systemd[1]: Finished multipathd-queueing.service - Enable queuing for multipath maps.

In einer VM macht Multipath nur in Ausnahmefällen Sinn, also deaktivieren und deinstallieren:

systemctl stop multipathd.service && systemctl disable multipathd.service
apt install libsgutils2-1.48 sg3-utils sg3-utils-udev
apt remove -y multipath-tools && apt purge -y multipath-tools
apt autoremove -y

Die apt install Zeile ist da drin weil diese Pakete ggf. von anderen Anleitung vorausgesetzt werden. Die Pakete werden dadurch auf manuell installiert gesetzt und dann nicht bei einem apt autoremove deinstalliert. Die Multipath-Bibliotheken habe ich dabei weggelassen.


Cloud-Init deinstallieren (Wenn es keine VM bei einem Cloudanbieter ist)

Wenn Ihr die VM reboootet und die Console betrachtet tauchen kurz nach dem Reboot (Fehler-)Meldungen zum Cloud-init auf:


Das Cloud-Init ist - wenn ich mich recht erinnere - dafür da falls eure VM z.B. bei Amazon AWS, Azure oder andere Anbieter läuft um z.B. die Netzwerkinformationen vom Hoster/Provider zu erhalten.
Brauchen wir nicht, also weg damit:

echo 'datasource_list: [ None ]' | tee /etc/cloud/cloud.cfg.d/90_dpkg.cfg
apt purge -y cloud-init
rm -rf /etc/cloud/ && sudo rm -rf /var/lib/cloud/
apt install eatmydata libeatmydata1 python-babel-localedata python3-jinja2 python3-jsonpatch python3-jsonschema-specifications python3-passlib python3-rpds-py python3-babel python3-json-pointer python3-jsonschema python3-markupsafe python3-referencing gdisk libjs-sphinxdoc -y
apt autoremove -y
reboot

Die apt install Zeile ist da drin weil diese Pakete ggf. von anderen Anleitung vorausgesetzt werden. Die Pakte werden dadurch auf manuell installiert gesetzt und dann nicht bei einem apt autoremove deinstalliert


OpenIPMI und IPMItool deinstallieren

Bei meinen VMs schlägt der Start dieses Dienstes eh immer fehl (weil es keine passende Hardware gibt), also weg damit:

apt remove openipmi ipmitool -y && apt purge openipmi ipmitool && apt autoremove -y

Unter Hyper-V wird das Paket scheinbar nicht automatisch installiert.


Zeitzone setzen

In meiner VM ist die Uhrzeit zu diesem Zeitpunkt falsch (gebt mal probeweise date ein) - weil der ESXi- oder Proxmox-Host auf UTC Zeit läuft und Ubuntu in der VM die richtige Zeitzone nicht eingestellt hat.
Wir korrigieren das mit

timedatectl set-timezone Europe/Berlin

ein

date

sollte dann die richtige Uhrzeit ausspucken.


Zeitserver setzen

Es kann Sinnvoll sein, statt externer Zeitserver die eigenen internen zu Nutzen. Eine meiner Prüfungen in meinen Templates ist die Zeitabweichung des Hosts gegenüber dem Zabbix Server. Zum Beispiel in Active Directory-Domänen scheiter die Anmeldung, wenn der Zeitunterschied zwischen Domänencontroller und Client mehr als 15 Minuten beträgt, ab 5 Minuten kann es schon zickig werden.
Es ist ok wenn alle die gleiche falsche Zeit haben. Ich synchronisiere den Zabbix Servers deshalb gerne mit dem zentralen Domänenkontroller mit der PDC-Rolle.

Hinweis: Wenn Ihr diesen Schritt überspringt, wird ntp.ubuntu.com als Zeitserver verwendet

Für die Zeitsynchronisierung ist ab Ubuntu 26.04 Chrony zuständig, über das erstellen der Datei nano /etc/chrony/sources.d/local-ntp-server.sources Können wir eigene Zeitserver hinzufügen (für jeden Server eine solche Zeile):

server 192.168.1.81 iburst

Nach der Änderung müssen wir 'chrony das neu laden lassen:

chronyc reload sources

und mit folgenden Befehl könnt Ihr den Status abfragen:

timedatectl status

Beispielausgabe:

               Local time: Mi 2026-05-13 11:21:27 CEST
           Universal time: Mi 2026-05-13 09:21:27 UTC
                 RTC time: Mi 2026-05-13 09:21:26
                Time zone: Europe/Berlin (CEST, +0200)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

Die verwendeten Zeitquellen seht Ihr per

chronyc sources

Beispielausgabe:

MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* ntp-nts-2.ps5.canonical.>     2   6    17    27  -2075us[-2480us] +/-   21ms
^? DC81.znil.local               4   6    17    27  -1255us[-1660us] +/-   46ms
^+ ntp-nts-3.ps5.canonical.>     2   6    17    28   +206us[ -199us] +/-   19ms
^- ntp-nts-2.ps6.canonical.>     2   6    17    28  +7728us[+7323us] +/-   81ms
^- ntp-nts-3.ps6.canonical.>     2   6    17    27  +1970us[+1565us] +/-   78ms
^- ntp-nts-1.ps5.canonical.>     2   6    17    28    +93us[ -312us] +/-   18ms

Und welche er letztendlich genommen hat mit

chronyc tracking

Beispielausgabe:

Reference ID    : B97DBE7B (ntp-nts-3.ps5.canonical.com)
Stratum         : 3
Ref time (UTC)  : Wed May 13 09:25:28 2026
System time     : 0.000000546 seconds slow of NTP time
Last offset     : +0.000948038 seconds
RMS offset      : 0.000487364 seconds
Frequency       : 9.203 ppm slow
Residual freq   : +7.510 ppm
Skew            : 2.559 ppm
Root delay      : 0.033688802 seconds
Root dispersion : 0.001197023 seconds
Update interval : 64.1 seconds
Leap status     : Normal

Wie man sieht, nimmt er einen externen. Wenn wir aber den internen Erzwingen wollen, müssen wir die anderen Quellen auskommentieren:

nano /etc/chrony/sources.d/ubuntu-ntp-pools.sources

und vor alle pool Zeilen ein # davor setzen:


Den Dienst einmal neu starten (statt reloaden, damit er schneller wieder synced):

systemctl restart chrony.service

und den Status prüfen bis in der letzten Zeile Leap status : Normal steht:

Reference ID    : C0A80151 (DC81.znil.local)
Stratum         : 5
Ref time (UTC)  : Wed May 13 09:32:15 2026
System time     : 0.000017215 seconds fast of NTP time
Last offset     : +0.000032023 seconds
RMS offset      : 0.000032023 seconds
Frequency       : 10.343 ppm slow
Residual freq   : +1.266 ppm
Skew            : 31.972 ppm
Root delay      : 0.026105130 seconds
Root dispersion : 0.038228851 seconds
Update interval : 2.0 seconds
Leap status     : Normal

Automatische Updates deaktivieren

Ich persönlich möchte nicht das der Zabbix-Server automatisch Updates einspielt.
Die automatischen Updates aktualisieren - soweit ich das beobachten konnte - nur den Kernel. Aber auch das möchte ich nicht. Ich möchte das geplant durchführen.
Die automatischen Updates verhindern wir mit

apt remove -y unattended-upgrades

Wer möchte kann auch die Suche nach Updates deaktivieren. Ansonsten schaut das Ubuntu täglich an einem zufälligen Zeitpunkt nach, ob es Updates gibt. Bei der Anmeldung per SSH erhält man dann eine entsprechende Meldung. Deaktivieren kann man die automatsche Suche danach per

nano /etc/apt/apt.conf.d/20auto-upgrades

und in der Datei beide Optionen auf 0 setzen:

APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Unattended-Upgrade "0";

Automatischen Neustart von Diensten bei Updates deaktivieren

Wie schon zuvor beschrieben aktualisiere ich Ubuntu (und andere Software aus Repos) gerne per folgenden Einzeiler:

apt update && apt upgrade -y && apt autoremove -y

In neueren Ubunti Versionen werden dabei Dienste ggf. automatische neu gestartet (wenn man den Einzeiler nimmt!), es gibt dann eine Meldung wie diese:

systemctl restart apache2.service cron.service fwupd.service mariadb.service open-vm-tools.service packagekit.service polkit.service rsyslog.service snmptrapd.service snmptt.service udisks2.service upower.service vgauth.service zabbix-agent2.service zabbix-web-service.service

Dienste deren Neustart verschoben wurde:
 systemctl restart ModemManager.service
 /etc/needrestart/restart.d/dbus.service
 systemctl restart getty@tty1.service
 systemctl restart systemd-logind.service

Im Normalfall ist es kein Problem. Allerdings scheinen die Abhängigkeiten der Dienste nicht beachtet zu werden.
Ist zum Beispiel ein Dienst abhängig von der Datenbank / MySQL|MariaDB, das steht auch so in der /usr/lib/systemd/system/namedesdienstes.service:

After=mysql.service
After=mysqld.service
After=mariadb.service

Der automatische Neustart startet aber z.B. MariaDB gnadenlos durch ohne vorher abhängige Dienste zu beenden. Schön ist das nicht.
Als Lösung schalte ich inzwischen den automatischen Neustart der Dienste ab, es wird dann nur eine Liste der Dienste ausgegeben die neu gestartet werden müssten:

nano /etc/needrestart/needrestart.conf

und dort ziemlich am Anfang ab Zeile 33:

# Restart mode: (l)ist only, (i)nteractive or (a)utomatically.
#
# ATTENTION: If needrestart is configured to run in interactive mode but is run
# non-interactive (i.e. unattended-upgrades) it will fallback to list only mode.
#
# UBUNTU: the default restart mode when running as part of the APT hook is 'a',
# unless a specific UI is configured (see below).
#$nrconf{restart} = 'i';

Bei der letzten Zeile 40 entfernen wir das Kommentarzeichen davor und machen aus dem i ein l, wie es auch in der obersten Zeile beschrieben wird:

$nrconf{restart} = 'l';

So werden notwendige Neustarts nur aufgelistet. Diese kann man dann von Hand neu starten oder einfach das ganze System rebooten.