top of page

Unattened Ubuntu Server Installation Part I.

15. Okt. 2024
11 Min. Lesezeit

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: 1

Angabe 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. $1$ist MD5

  2. $2a$ist Blowfish

  3. $2y$ist Blowfish

  4. $5$ist SHA-256

  5. $6$ist SHA-512

  6. $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:

  1. https://ubuntushell.com/disable-unattended-upgrades-in-ubuntu/

  2. https://www.thomas-krenn.com/de/wiki/Predictable_Network_Interface_Names

  3. https://www.thomas-krenn.com/de/wiki/Eno1_Netzwerkinterface

  4. https://unix.stackexchange.com/questions/134483/why-is-my-ethernet-interface-called-enp0s10-instead-of-eth0

  5. https://askubuntu.com/questions/704361/why-is-my-network-interface-named-enp0s25-instead-of-eth0

  6. https://www.freedesktop.org/software/systemd/man/latest/systemd.net-naming-scheme.html

  7. https://wiki.ubuntuusers.de/Hashfunktionen/

  8. https://blog.robertelder.org/intro-to-sha512sum-command/

  9. https://ubunlog.com/de/Terminal-mit-starken-Passw%C3%B6rtern-generieren/

  10. https://www.cyberciti.biz/faq/understanding-etcshadow-file/

  11. https://linuxconfig.org/introduction-to-yaml-with-examples

  12. https://www.redhat.com/de/topics/automation/what-is-yaml

  13. https://www.dev-insider.de/was-ist-yaml-a-665391/

  14. https://de.wikipedia.org/wiki/Serialisierung

  15. https://dev.to/kalkwst/a-gentle-introduction-to-the-yaml-format-bi6

  16. https://canonical-subiquity.readthedocs-hosted.com/en/latest/reference/autoinstall-reference.html


Kommentare


Dieser Beitrag kann nicht mehr kommentiert werden. Bitte den Website-Eigentümer für weitere Infos kontaktieren.

UvR    

®

Impressum

  • Wix Facebook page

Uwe von Royen

Lempstr 21

35644 Hohenahr

​

Tel.        06444-472

eMail    uwe.von.royen@gmx.net

© 2022 
Erstellt von Uwe von Royen

bottom of page