Unattened Ubuntu Server Installation Part I.
Aktualisiert: 23. Okt. 2024
Was ist unattened Installation?
Hierbei handelt es sich um eine 'unbeaufsichtigte' Installation eines Systems. Die unbeaufsichtige Installtion gibt es nicht nur seit Ubuntu, sondern schon seit Windows XP. Diese Installationsart von Software findet sich z.B: beim Rollout in großen Unternehmen, aber auch im Kleinen ist diese Verteilung von Software sinnvoll. Der spätere Anwender braucht nicht mit irgend technischen Fragen großartig in Berührung kommen. Canonical, der Hersteller von Ubuntu, hat diese Idee aufgeriffen und für den problemlosen Vertrieb in Firmen sein eigenes unattended Installationsvorgang kreiert. Die unbeaufsichtige Installation kann sowohl mit Ubuntu Desktop als auch Server durchgeführt werden. Ich werde micht hier aber auf die Serverversion beschränken, da der Server später für Ordersprinter in Form als Kassensystem-Einzelhandel eingesetzt werden soll.
Wie erzeuge ich ein 'unattended' Installtions-Image (iso)?
ISO herunterladen
Ein Server-Image (ISO) von Ubuntu Webseite herunterladen. Dabei sollte es sich um eine LTS Version handel. LTS steht für Logg-Term-Support.
Es gibt LTS Version für ARM-Prozessor [Rasberry] oder AMD64[x86_64]. Die Ubuntu Version für den Rasberry4/5 ist noch nicht richtig getestet aber schon in Arbeit.
ISO entpacken Wie kann man das ISO-Image verändern? Sie benötigen hierzu ein Programm bzw. ein Script, mit dem sich das Image entpacken läßt.
Möglichkeit mit 7z oder einem anderen Entpacker : Terminal öffnen: 7z -y x ubuntu-24.04.1-live-server-amd64.iso -osource-files Terminalausgabe: _____________________________________________________________________________________
7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=de_DE.UTF-8,Utf16=on,HugeFiles=on,64 bits,4 CPUs Intel(R) Core(TM) i7-3520M CPU @ 2.90GHz (306A9),ASM,AES-NI)
Scanning the drive for archives:
1 file, 2773874688 bytes (2646 MiB)
Extracting archive: ubuntu-24.04.1-live-server-amd64.iso
WARNINGS:
There are data after the end of archive
--
Path = ubuntu-24.04.1-live-server-amd64.iso
Type = Iso
WARNINGS:
There are data after the end of archive
Physical Size = 2773534720
Tail Size = 339968
Created = 2024-08-27 17:39:37
Modified = 2024-08-27 17:39:37
Everything is Ok
Archives with Warnings: 1
Warnings: 1
Folders: 202
Files: 862
Size: 2770621122
Compressed: 2773874688 _____________________________________________________________________________________
Das Verzeichnis 'source-files' muss nicht zuvor angelegt werden. Aber wichtig ist, das kein Space (Leerzeichen) zwischen -o und source-files steht.
Desweiteren muß/sollte das Programm '7z' installiert werden.
Der Name 'source-files' ist austauschbar gegen jeden beliebigen Verzeichnisnamen!
Möglichkeit mit 'xorriso': Terminal öffnen: xorriso -osirrox on -indev ubuntu-24.04.1-live-server-amd64.iso --extract_boot_images source-files/bootpart -extract / source-files
Terminalausgabe: _____________________________________________________________________________________ Copying of file objects from ISO image to disk filesystem is: Enabled
xorriso : NOTE : Loading ISO image tree from LBA 0
xorriso : UPDATE : 1065 nodes read in 1 seconds
libisofs: NOTE : Found hidden El-Torito image for EFI.
libisofs: NOTE : EFI image start and size: 1351729 * 2048 , 10144 * 512
xorriso : NOTE : Detected El-Torito boot information which currently is set to be discarded
Drive current: -indev 'ubuntu-24.04.1-live-server-amd64.iso'
Media current: stdio file, overwriteable
Media status : is written , is appendable
Boot record : El Torito , MBR protective-msdos-label grub2-mbr cyl-align-off GPT
Media summary: 1 session, 1354431 data blocks, 2645m data, 1581g free
Volume id : 'Ubuntu-Server 24.04.1 LTS amd64'
/home/uvr/ISO-bearbeiten/source-files/bootpart/eltorito_catalog.img : offset=2023424 size=2048
/home/uvr/ISO-bearbeiten/source-files/bootpart/mbr_code_grub2.img : offset=0 size=446
/home/uvr/ISO-bearbeiten/source-files/bootpart/gpt_part2_efi.img : offset=2768340992 size=5193728
/home/uvr/ISO-bearbeiten/source-files/bootpart/systemarea.img : offset=0 size=32768
/home/uvr/ISO-bearbeiten/source-files/bootpart/eltorito_img1_bios.img : offset=2025472 size=32768
/home/uvr/ISO-bearbeiten/source-files/bootpart/eltorito_img2_uefi.img : offset=2768340992 size=5193728
xorriso : UPDATE : 598 files restored ( 428.6m) in 1 seconds , 324.5xD
xorriso : UPDATE : 606 files restored (1126.2m) in 2 seconds , 526.5xD
xorriso : UPDATE : 723 files restored (1285.9m) in 3 seconds , 120.9xD
xorriso : UPDATE : 729 files restored (1486.3m) in 4 seconds , 151.7xD
xorriso : UPDATE : 729 files restored (1664.5m) in 5 seconds , 134.9xD
xorriso : UPDATE : 729 files restored (1814.8m) in 6 seconds , 113.4xD
xorriso : UPDATE : 912 files restored (1996.0m) in 7 seconds , 137.2xD
xorriso : UPDATE : 1027 files restored (2068.5m) in 8 seconds , 54.2xD
xorriso : UPDATE : 1027 files restored (2099.9m) in 9 seconds , 23.6xD
xorriso : UPDATE : 1039 files restored (2223.7m) in 10 seconds , 93.4xD
xorriso : UPDATE : 1058 files restored (2566.2m) in 11 seconds , 259.2xD
xorriso : UPDATE : 1065 files restored (2637.3m) in 11 seconds = 177.6xD
Extracted from ISO image: file '/'='/home/uvr/ISO-bearbeiten/source-files' _____________________________________________________________________________________ Damit dieser Befehl funktioniert muss das Verszeichnis 'source-files' zuvor manuell anleget werden! Desweiteren muß das Programm 'xorriso' installiert werden.
ISO Image manipulieren
Nachdem Entpacken des ISO-Files finden Sie im Verzeichis 'source-files' foldende Verzeichnisstruktur vor.
Verzeichnisstruktur mit '7z':
Verszeichnisstruktur mit 'xorriso':
Ich bin für den einfacheren Weg mit '7z' !
Ersteinmal kopieren Sie das Verzeichnis '[Boot]' ein Verzeichnis höher und benennen es in 'Boot' um.
Der nächste Schritt ist es, die Datei '/boot/grub/grub.cfg zu verändern:
_____________________________________________________________________
set timeout=4 # von 30 auf 4
loadfont unicode
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
menuentry "Autoinstall Ubuntu Server" {
set gfxpayload=keep
linux /casper/vmlinuz quiet autoinstall ds=nocloud\;s=/cdrom/server/ ---
initrd /casper/initrd
}
menuentry "Try or Install Ubuntu Server" {
set gfxpayload=keep
linux /casper/vmlinuz ---
initrd /casper/initrd
}
grub_platform
if [ "$grub_platform" = "efi" ]; then
menuentry 'Boot from next volume' {
exit 1
}
menuentry 'UEFI Firmware Settings' {
fwsetup
}
else
menuentry 'Test memory' {
linux16 /boot/memtest86+x64.bin
}
fi
___________________________________________________________________________________________
Die rot markierten Scriptteile wurden geändert bzw.: hinzugefügt.
ISO Zusammenbau: "Build einer eigenen ISO-Installationsdatein"
Man möchte natürlich die zuvor entpackte ISO Datein wieder zu einem funtionsfähigem ISO-Image nach getaner Arbeit zusammen fügen.
____________________________________________________
xorriso -as mkisofs -r \
-V 'Ubuntu-Server 24.04.x LTS amd64' \ # hier Anpassung
-o /home/uvr/ISO-bearbeiten/ubuntu-Server-24.04-autoinstall.iso \ # hier Anpassung
--grub2-mbr ../BOOT/1-Boot-NoEmul.img \
-partition_offset 16 \
--mbr-force-bootable \
-append_partition 2 28732ac11ff8d211ba4b00a0c93ec93b ../BOOT/2-Boot-NoEmul.img \
-appended_part_as_gpt \
-iso_mbr_part_type a2a0d0ebe5b9334487c068b6b72699c7 \
-c '/boot.catalog' \
-b '/boot/grub/i386-pc/eltorito.img' \
-no-emul-boot -boot-load-size 4 -boot-info-table --grub2-boot-info \
-eltorito-alt-boot \
-e '--interval:appended_partition_2:::' \
-no-emul-boot \
. # Punkt muss bleiben!
________________________________________________________
Die Datei '-o /home/uvr/ISO-bearbeiten/ubuntu-Server-24.04-autoinstall.iso \' legt man am besten in ein Verzeichnis ab, was nicht in dem Verzeichnis für die Entwicklung liegt. Es sollte z.B.: 'home/uvr/iso-files-original/' liegen. So ist die Durchführung der Datensicherung relativ einfach und platzsparender, da nicht ständig die Original Ubuntu-Server ISO mitgesichert werden muss.
Aber wie und wo erstellt man die Befehle für die unattended Installation?
Der Startpunkt für seine Anpassungen sind das Erstellen eines Verzeichnissen mit Namen 'server'. Also die Befehle 'mkdir /source-files/server' und 'cd server'.
Anlegen von zwei wichtigen Dateien:
touch meta-data
touch user-data
eventuelle eigene Verzeichnisse
Der Aufbau der Datei 'user-data' ist sehr gut unter folgendem Link beschrieben:
ACHTUNG:
Günstig ist im Edior für die 'user-data' Datein kein TAB vorkommt bzw. der Editor das TAB-Zeichen automatisch in SPACE-Zeichen umwandelt.
(autmoatisch TAB to SPACE Umwandlung: https://www.browserling.com/tools/tabs-to-spaces )
Es scheint so zu sein, das die Reihenfolge von von 'Scalars und List' doch nicht so unbedeutend sind. (Installation-24.8.1)
Hat sehr große Mühen gekostet, das das File 'user-data' das gewünscht Installationergebnis gebracht hat.
Die 'user-data' Datei ist eine 'yaml' -Datei, die einer gewissen Struktur folgt.
Quelle: 11.
Für den Fall, das der Link nicht mehr funktioniert hier noch mal die wichtigste Zusammenstellung.
nano ./user-data
"Das Erste, was wir normalerweise in Autoinstall-Dateien sehen, ist der Kommentar „#cloud-config“: dieser ist erforderlich, wenn wir möchten, dass die Datei von cloud-init verarbeitet wird. Der Hauptschlüssel, der in der Konfigurationsdatei verwendet wird, ist autoinstall. Die Dateisyntaxversion wird stattdessen mit dem Schlüssel version angegeben. Zum Zeitpunkt des Schreibens ist nur Version 1 verfügbar. "
#cloud-config
autoinstall:
version: 1Angabe der Source-Quelle, die per unbeaufsichtigter Installation ausgewählt werden
soll.
#cloud-config
autoinstall:
version: 1
sources:
id: ubuntu-server-minimal
Auswahl von Sprache, Keyboard und Timezone
"Um das Systemgebietsschema einzustellen, verwenden wir den Schlüssel locale . Tastatureinstellungen werden stattdessen über den Schlüssel keyboard angegeben. Dieser Schlüssel nimmt eine Zuordnung als Wert an; im folgenden Beispiel geben wir nur das Layout an , wir verwenden möchten (de). Es ist auch möglich, andere Parameter anzugeben, wie etwa die Layoutvariante. Zuletzt verwenden wir den Schlüssel timezone, um die Systemzeitzone einzustellen."
#cloud-config
autoinstall:
version: 1
sources:
id: ubuntu-server-minimal
locale: de_DE.UTF-8
keyboard:
layout: de
toggle: null
timezone: Europe/Berlin
Schlüssel für Netzwerkkarte aktivieren
Dieser Part ist nicht so einfach, denn es gibt mehere Schlüssel für die Netzwerkarte.
Wie stellt man den Schlüssel für die Netzwerkkarte fest?
z.B: enpXs0 wobei X=1..4,(n+1) oder enp0sX wobei X=1..4,(n+1) #cloud-config
autoinstall:
version: 1
sources:
id: ubuntu-server-minimal
locale: de_DE.UTF-8
keyboard:
layout: de
toggle: null
timezone: Europe/Berlin
network:
ethernets:
enp1s0:
dhcp4: true
enp2s0:
dhcp4: true
enp3s0:
dhcp4: true
enp0s1:
dhcp4: true
enp0s2:
dhcp4: true
enp0s3:
dhcp4: true
# enx00e04c680152:
# dhcp4:true
version: 2
enp0s10:
| | |
v | |
en| | --> ethernet
v |
p0| --> bus number (0)
v
s10 --> slot number (10)
Quelle: 4.
Die einfachste Methode ist den Netzwerkschlüssel der Netzkarte zu erfahren ist 'ipconfig' bzw. 'ip a':
ifconfig
enp0s25: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 00:21:cc:d9:8a:46 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 20 memory 0xf3900000-f3920000
enx00e04c680152: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.41 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::2e0:4cff:fe68:152 prefixlen 64 scopeid 0x20<link>
ether 00:e0:4c:68:01:52 txqueuelen 1000 (Ethernet)
RX packets 9673594 bytes 5338083558 (5.3 GB)
RX errors 0 dropped 350575 overruns 0 frame 0
TX packets 6367921 bytes 1547759288 (1.5 GB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Lokale Schleife)
RX packets 18292 bytes 2115975 (2.1 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 18292 bytes 2115975 (2.1 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s25: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
link/ether 00:21:cc:d9:8a:46 brd ff:ff:ff:ff:ff:ff
3: enx00e04c680152: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:e0:4c:68:01:52 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.41/24 brd 192.168.0.255 scope global dynamic noprefixroute enx00e04c680152
valid_lft 3414sec preferred_lft 3414sec
inet6 fe80::2e0:4cff:fe68:152/64 scope link
valid_lft forever preferred_lft forever
4: wlp3s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 6c:88:14:15:a3:3c brd ff:ff:ff:ff:ff:ff
Ethernet (en*)
Ethernet Netzwerkschnittstellennamen werden wie folgendermaßen vergeben:
eno: Namen, welche die von Firmware/BIOS bereitgestellten Indexnummern für On-Board-Geräte enthalten, Beispiel: eno1 (eno = Onboard), siehe auch eno1 Netzwerkinterface
ens: Namen, welche die von der Firmware/BIOS bereitgestellten PCI-Express-Hotplug-Slotnummern enthalten, Beispiel: ens1 (ens = Slot)
enp: Namen, welche die physische/geografische Position des Anschlusses der Hardware enthalten, Beispiel: enp2s0 (enp = Position)
enx: Namen, welche die MAC-Adresse des Interfaces enthalten (Beispiel: enx78e7d1ea46da)
eth: Klassische, unvorhersehbare kernel-native ethX-Benennung (Beispiel: eth0)
Einrichten von 'hostname' (Rechnername) und 'user' (Benutzer) inkl. Passwort
#cloud-config
autoinstall:
version: 1
sources:
id: ubuntu-server-minimal
locale: de_DE.UTF-8
keyboard:
layout: de
toggle: null
timezone: Europe/Berlin
network:
ethernets:
eno1:
dhcp4: true
enp1s0:
dhcp4: true
enp2s0:
dhcp4: true
enp3s0:
dhcp4: true
enp0s1:
dhcp4: true
enp0s2:
dhcp4: true
enp0s3:
dhcp4: true
enx00e04c680152:
dhcp4:true
version: 2
identity:
hostname: server-000
password: $6$AWatD2cjBxMr1NBx$V8H/je4MtnMaJ72H57R0RtfJeThYt4q1x11daFwbcoVYpd0nKy549hx0D/DQjuYzn0gS4xWCt7YYfYh4rvZ/y0
realname: Sales Group
username: sales
Das Passwort wird mit Verschlüsselungsalgorithmus sha512 erstellt.
$6$AWatD2cjBxMr1NBx$V8H/je4MtnMaJ72H57R0RtfJeThYt4q1x11daFwbcoVYpd0nKy549hx0D/DQjuYzn0gS4xWCt7YYfYh4rvZ/y0
Anmerkung zur /etc/shadow :
sales: # User
$6$: # SHA-512
98sMid5ys1ZEkc/$nxPLBysb6sGAYKvRdL.lixSVlaDYG4VIALrK1owcJgf/cy.MErs4nY87X/OeusMHdKjyXkVik6kGdgNqGj.1k0: # Passwort
20015: # letzte Kennwortänderung
0: # 0 = keine Kennwortänderung nötig (0 = Null)
# Minimum: Die Mindestanzahl von Tagen, die zwischen Kennwortänderungen erforderlich sind, d. h. die Anzahl der verbleibenden Tage, bevor der Benutzer sein Kennwort erneut ändern darf. Ein leeres Feld und der Wert 0 bedeuten, dass es kein Mindestalter für Kennwörter gibt.
99999: # Maximum : Die maximale Anzahl von Tagen, für die das Passwort gültig ist. Danach muss der Benutzer sein Passwort erneut ändern.
7: # Warnen : Die Anzahl der Tage vor Ablauf des Passworts, in denen der
Benutzer gewarnt wird, dass sein Passwort geändert werden muss.
<wert>: # Inaktiv : Die Anzahl der Tage nach Ablauf des Passworts, nach denen das Konto deaktiviert wird.
<wert>: # Ablaufdatum : Das Ablaufdatum des Kontos, ausgedrückt als Anzahl
der Tage seit dem 1. Januar 1970.
Quelle : 10.
Was mir aufgefallen ist:
Bei dem User mit dem 'username' = sales wird das Passwort mittels des SHA-512 (sha512-crypt) Algorithmus verschlüsselt. Dem gegenüber steht der 'yescript' Algorithmus mit dem die User angelegt werden bei der Verwendung des Linuxbefehls 'adduser'.
Hier ein kleiner Einblick in die /etc/shadow Datei:
Das Bedeuten die ersten 3 Zeichen $x$ , x ist Element von [1,2,5,6,a,y]:
Passwort : Ihr verschlüsseltes Passwort ist im Hash-Format. Das Passwort sollte mindestens 15-20 Zeichen lang sein und Sonderzeichen, Ziffern, Kleinbuchstaben und mehr enthalten. Normalerweise ist das Passwortformat auf eingestellt $id$salt$hashed. Dies $idist das unter GNU/Linux verwendete Algorithmuspräfix wie folgt
$1$ist MD5
$2a$ist Blowfish
$2y$ist Blowfish
$5$ist SHA-256
$6$ist SHA-512
$y$ist yescrypt
Die Zeichen ! oder * an Stelle einer Verschlüsselunskette zeigen an, dass der Benutzer sich nicht mit einem Unix/Linux-Passwort anmelden kann. Mit anderen Worten: Die Benutzeranmeldung wird deaktiviert.
Aber an dieser Stelle werde ich nicht näher auf die Thematik der Verschlüsselung von Passwörten eingegen, das führt zu Weit vom Thema 'unattended' Installation weg.
Einbindung des SSH -Zugriff:
#cloud-config
autoinstall:
version: 1
sources:
id: ubuntu-server-minimal
locale: de_DE.UTF-8
keyboard:
layout: de
toggle: null
timezone: Europe/Berlin
network:
ethernets:
eno1:
dhcp4: true
enp1s0:
dhcp4: true
enp2s0:
dhcp4: true
enp3s0:
dhcp4: true
enp0s1:
dhcp4: true
enp0s2:
dhcp4: true
enp0s3:
dhcp4: true
enx00e04c680152:
dhcp4:true
version: 2
identity:
hostname: server-000
password: $6$AWatD2cjBxMr1NBx$V8H/je4MtnMaJ72H57R0RtfJeThYt4q1x11daFwbcoVYpd0nKy549hx0D/DQjuYzn0gS4xWCt7YYfYh4rvZ/y0
realname: Sales Group
username: sales
ssh:
install-server: true
allow-pw: true
authorized-keys: []
Jetzt kommt man an dem eigentlichen Punkt, der der Hauptgrund für die vorherigen Angaben ist:
Zusätzliche Intergration von Softwarepacketen
Da es sich um eine minimale Ubuntu-Installation ist sind hier eingige zusätzliche Softwarepackete dringend anzugeben.
#cloud-config
autoinstall:
version: 1
sources:
id: ubuntu-server-minimal
locale: de_DE.UTF-8
keyboard:
layout: de
toggle: null
timezone: Europe/Berlin
network:
ethernets:
eno1:
dhcp4: true
enp1s0:
dhcp4: true
enp2s0:
dhcp4: true
enp3s0:
dhcp4: true
enp0s1:
dhcp4: true
enp0s2:
dhcp4: true
enp0s3:
dhcp4: true
enx00e04c680152:
dhcp4:true
version: 2
identity:
hostname: server-000
password: $6$AWatD2cjBxMr1NBx$V8H/je4MtnMaJ72H57R0RtfJeThYt4q1x11daFwbcoVYpd0nKy549hx0D/DQjuYzn0gS4xWCt7YYfYh4rvZ/y0
realname: Sales Group
username: sales
ssh:
install-server: true
allow-pw: true
authorized-keys: []
packages:
- nano
- mc
- htop
- cron
- nmap
- iputils*
- dosfstools
- whois
- apt-utils
- net-tools
- fd-find
- iw
- figlet
- inetutils-ping
- tuptime
- dhcpcd5
- rfkill
Sicherlich sind schon einige Packte in der Minimal-Ubuntu enthalten, aber mit dieser Vorgehensweise geht man auf sicher, auch wenn es auf Kosten der Geschwindigkeit / Performance geht.
Abschluss und Reboot
#cloud-config
autoinstall:
version: 1
sources:
id: ubuntu-server-minimal
locale: de_DE.UTF-8
keyboard:
layout: de
toggle: null
timezone: Europe/Berlin
network:
ethernets:
eno1:
dhcp4: true
enp1s0:
dhcp4: true
enp2s0:
dhcp4: true
enp3s0:
dhcp4: true
enp0s1:
dhcp4: true
enp0s2:
dhcp4: true
enp0s3:
dhcp4: true
enx00e04c680152:
dhcp4:true
version: 2
identity:
hostname: server-000
password: $6$AWatD2cjBxMr1NBx$V8H/je4MtnMaJ72H57R0RtfJeThYt4q1x11daFwbcoVYpd0nKy549hx0D/DQjuYzn0gS4xWCt7YYfYh4rvZ/y0
realname: Sales Group
username: sales
ssh:
install-server: true
allow-pw: true
authorized-keys: []
packages:
- nano
- mc
- htop
- cron
- nmap
- iputils*
- dosfstools
- whois
- apt-utils
- net-tools
- fd-find
- iw
- figlet
- inetutils-ping
- tuptime
- dhcpcd5
- rfkill
shutdown: reboot
Dateiformat: yaml
Hier die erste Version der Datei 'server' zum Downloaden:
Was ist 'yaml' Struktur?
YAML ist eine von Menschen lesbare Sprache zur Serialisierung von Daten, die häufig zum Schreiben von Konfigurationsdateien verwendet wird. Je nachdem, wen Sie fragen, steht die Abkürzung YAML für „Yet Another Markup Language“ oder „YAML Ain’t Markup Language“ (ein rekursives Akronym), wodurch betont wird, dass YAML für Daten und nicht für Dokumente gedacht ist. (Q:12)
Alles ist Teil eines Wörterbuchs. Alles in YAML-Dateien ist grundsätzlich Teil eines Wörterbuchs, da die Daten im Schlüssel-Wert-Paar-Format dargestellt werden. YAML unterscheidet zwischen Groß- und Kleinschreibung und Schlüssel müssen eindeutig sein. (Q:11). Schließlich müssen YAML-Dateien mit den Suffixen [.yaml ] oder enden [.yml] .
Es werden drei Datentypen in 'YAML' der textbasierten Dateistruktur unterschieden. YAML ist im eigentlichen Sinne keine Programmiersprache oder Script-Sprache, sondern eine Möglichkeit Daten (bzw.: Struktur-Informationen) in eine für menschlicher lesbare Form zu bringen. Dadurch ist diese hervorragend zum Datenaustausch zwischen verschiedenen Programmen geeignet.
Syntax Regeln:
Skalare
Listen
Paar-Zuordung (Mapping) von 'Schlüssel-Wert'
#Kommentar Zeile
Es gibt hier keinen Einsatz von irgendwelchen Klammertypen wie (),[] oder {}, die eine Strukturierung der Daten vornehmen. Nur durch entsprechendes Einrücken von Zeilen bzw. Datentypen wird eine strenge Strukturierung der Informationen durchgenommen.
Hier eine kurze Erläuterungen bzw. Beispiel mittels der Datei: /server/user-data
autoinstall: # Scalar
identity: # Scalar
hostname: server-000 # Mapping Paar
realname: Sales Group
username: sales
...
network: # Scalar
ethernets: # Scalar
enp1s0: # Scalar
dhcp4: true # Mapping Paar
...
packages: # Scalar
- nano # Liste
- mc
- htop
- cron
- nmap
...
shutdown: reboot
Dabei macht YAML die hierarchische Struktur wie die Programmiersprache Python durch Einrückung mit Leerzeichen sichtbar, verwendet aber auch eckige und geschweifte Klammern. Diese dienen aber nicht zur Strukturierung, YAML erlaubt dabei keine Tabulatoren, weil deren Interpretation nicht eindeutig ist und von verschiedenen Programmen unterschiedlich gehandhabt wird.
Die empfohlene Einrückung für YAML-Dateien beträgt zwei Leerzeichen pro Ebene, aber YAML kann auch jedem Einrückungssystem folgen, das die einzelne Datei verwendet. Sie sollten jedoch konsistent sein und vermeiden, verschiedene Einrückungsstile in derselben Datei zu mischen. Obwohl die Anzahl der Leerzeichen keine Rolle spielt, empfiehlt es sich, die gleiche Anzahl an Leerzeichen beizubehalten, solange die Einrückung des untergeordneten Knotens größer ist als die des übergeordneten Knotens.
"Beachten Sie, dass verschiedene Versionen von YAML möglicherweise unterschiedliche Regeln für die Interpretation boolescher Skalare haben. Beispielsweise sind in YAML 1.1 „yes“ und „no“ gültige boolesche Skalare, in YAML 1.2 jedoch nicht. Aus diesem Grund wird empfohlen, für boolesche Skalare „ trueund “ zu verwenden, falseum Verwirrungen und Kompatibilitätsprobleme zu vermeiden."
Hier Beispiele von 'nicht struktureller' Klammerung:
character: name: aragorn race: man
characters: - { name: aragorn, race: man } - { name: legolas, race: elf } - { name: frodo, race: hobbit }
oder
character: { name: aragorn, race: man, weapons: [sword, knife] }
oder
list: [ first, second, third ]
Q: Quellen: 11. 12. 13. 14. 15.
Interresante und wichtige Links zum Thema:
https://ubuntushell.com/disable-unattended-upgrades-in-ubuntu/
https://www.thomas-krenn.com/de/wiki/Predictable_Network_Interface_Names
https://askubuntu.com/questions/704361/why-is-my-network-interface-named-enp0s25-instead-of-eth0
https://www.freedesktop.org/software/systemd/man/latest/systemd.net-naming-scheme.html
https://ubunlog.com/de/Terminal-mit-starken-Passw%C3%B6rtern-generieren/
https://dev.to/kalkwst/a-gentle-introduction-to-the-yaml-format-bi6
https://canonical-subiquity.readthedocs-hosted.com/en/latest/reference/autoinstall-reference.html









Kommentare