Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:archlinux_-_minimal_server_installation_-_uefi-boot_grub2_lvm_mit_btrfs_mit_snapper_und_xfs

Inhaltsverzeichnis

ArchLinux - Minimal Server Installation - UEFI-Boot, Grub2, LVM, Btrfs mit snapper und xfs

Mein besonderer Dank gilt hier an dieser Stelle Nicolai Mladenoff (unicks.eu), welcher mich durch seine Videos auf seinem Youtube™-Kanal: unicks.eu erst auf die Idee gebracht hat, unter ArchLinux das Dateisystem Btrfs einzusetzen und mir auch wertvolle Verbesserungen zu meinen bisherigen DokuWiki-Einträgen gegeben hat. Vielen Dank noch mal an dieser Stelle!

Die hier verwendete Installationsmethode ist eine Installation von einem ISO-Image/USB-Stick.

snapper ist ein Werkzeug zur Verwaltung von Linux-Dateisystem-Snapshots. Abgesehen von der offensichtlichen Erstellung und Löschung von Snapshots, kann snapper Snapshots vergleichen und Unterschiede zwischen Snapshots rückgängig machen. Vereinfacht ausgedrückt ermöglicht dies Root- und Nicht-Root-Benutzern, ältere Versionen von Dateien anzuzeigen und Änderungen rückgängig zu machen.

* Quelle: YouTube - Channel: unicks.eu - Total Arch Linux | 3.4 Snapper auf die leichte Art!

Ab hier werden root-Rechte zur Ausführung der nachfolgenden Befehle benötigt. Um der Benutzer root zu werden, geben Sie bitte nachfolgenden Befehl ein:

$ su -
Password: 

Herunterladen

Die Installationsquellen mittels ISO-Datei und der dazugehörige checksum-Datei, kann unter nachfolgend aufgelisteten Links heruntergeladen werden:

Zum Herunterladen der ISO-Datei und der dazugehörige checksum-Datei in das Zielverzeichnis /tmp, können nachfolgende Befehle genutzt werden:

ISO-Datei:

# wget -P /tmp https://mirror.cmt.de/archlinux/iso/latest/archlinux-x86_64.iso
--2022-11-06 05:22:36--  https://mirror.cmt.de/archlinux/iso/latest/archlinux-x86_64.iso
Loaded CA certificate '/etc/ssl/certs/ca-certificates.crt'
Resolving mirror.cmt.de (mirror.cmt.de)... 88.99.141.36
Connecting to mirror.cmt.de (mirror.cmt.de)|88.99.141.36|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 820326400 (782M) [application/octet-stream]
Saving to: ‘/tmp/archlinux-x86_64.iso’

archlinux-x86_64.is 100%[===================>] 782.32M  13.3MB/s    in 59s     

2022-11-06 05:23:36 (13.2 MB/s) - ‘/tmp/archlinux-x86_64.iso’ saved [820326400/820326400]

checksum-Datei:

# wget -P /tmp https://mirror.cmt.de/archlinux/iso/latest/sha256sums.txt
--2022-11-06 05:37:32--  https://mirror.cmt.de/archlinux/iso/latest/sha256sums.txt
Loaded CA certificate '/etc/ssl/certs/ca-certificates.crt'
Resolving mirror.cmt.de (mirror.cmt.de)... 88.99.141.36
Connecting to mirror.cmt.de (mirror.cmt.de)|88.99.141.36|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 396 [text/plain]
Saving to: ‘/tmp/sha256sums.txt’

sha256sums.txt      100%[===================>]     396  --.-KB/s    in 0s      

2022-11-06 05:37:32 (9.38 MB/s) - ‘/tmp/sha256sums.txt’ saved [396/396]

Herunterladen: Überprüfung

Zur Überprüfung, ob die heruntergeladene ISO-Datei mit den Inhalt, sprich der Check-Summe, der ebenfalls heruntergeladenen checksum-Datei übereinstimmt, können nachfolgende Befehle verwendet werden:

Wechsel in das Verzeichnis /tmp, mit nachfolgendem Befehl:

# cd /tmp

Überprüfung mit dem Programm sha256sum, ob die Check-Summe übereinstimmt:

# sha256sum --check /tmp/sha256sums.txt
sha256sum: archlinux-2022.11.01-x86_64.iso: No such file or directory
archlinux-2022.11.01-x86_64.iso: FAILED open or read
archlinux-x86_64.iso: OK
sha256sum: archlinux-bootstrap-2022.11.01-x86_64.tar.gz: No such file or directory
archlinux-bootstrap-2022.11.01-x86_64.tar.gz: FAILED open or read
sha256sum: archlinux-bootstrap-x86_64.tar.gz: No such file or directory
archlinux-bootstrap-x86_64.tar.gz: FAILED open or read
sha256sum: WARNING: 3 listed files could not be read

:!: WICHTIG - In der Zeile mit der Datei archlinux-x86_64.iso muss ein OK am Ende stehen!

USB-Stick erstellen

Bevor die ISO-Datei auf einen USB-Stick kopiert wird, sollte verlässlich ermittelt werden, ob der USB-Stick auch gemountet werden konnte und unter welchem Device der USB-Stick gemountet wurde, was mit nachfolgendem Befehl erfolgen kann:

# ls -lgo --time-style=+ /dev/disk/by-id/usb*
lrwxrwxrwx 1  9  /dev/disk/by-id/usb-Generic_STORAGE_DEVICE_000000000547-0:0 -> ../../sdc
lrwxrwxrwx 1  9  /dev/disk/by-id/usb-Generic_STORAGE_DEVICE_000000000547-0:1 -> ../../sdd
lrwxrwxrwx 1  9  /dev/disk/by-id/usb-Generic_STORAGE_DEVICE_000000000547-0:2 -> ../../sde
lrwxrwxrwx 1  9  /dev/disk/by-id/usb-Generic_STORAGE_DEVICE_000000000547-0:3 -> ../../sdf
lrwxrwxrwx 1  9  /dev/disk/by-id/usb-Generic_STORAGE_DEVICE_000000000547-0:4 -> ../../sdg
lrwxrwxrwx 1  9  /dev/disk/by-id/usb-Verbatim_STORE_N_GO_0700078505A004C1-0:0 -> ../../sdh
lrwxrwxrwx 1 10  /dev/disk/by-id/usb-Verbatim_STORE_N_GO_0700078505A004C1-0:0-part1 -> ../../sdh1

Die ISO-Datei kann mit nachfolgendem Befehl auf einen USB-Stick - hier /dev/sdh als startbereite Abbilddatei (bootable image) erstellt werden:

# dd bs=4M if=/tmp/archlinux-x86_64.iso of=/dev/sdh && sync

:!: HINWEIS - Dies ist nur erforderlich, falls auf physischer Hardware mittels USB-Stick installiert werden soll!

KVM

Nachfolgende soll unter Verwendung von KVM (Kernel-based Virtual Machine) einer vollständigen Virtualisierungslösung für Linux welche auf x86-Hardware mit Virtualisierungserweiterungen (Intel VT oder AMD-V) basiert, eine virtuelle Maschine erstellt werden, um die Installation und Konfiguration exemplarisch und beispielhaft durchzuführen.

KVM: ISO-Datei kopieren

Dazu soll im ersten Schritt der die zuvor heruntergeladene ISO-Datei - archlinux-x86_64.iso auf dem KVM-Wirt-System vom Verzeichnis /tmp nach /var/lib/libvirt/boot mit nachfolgendem Befehl verschoben werden:

# mv /tmp/archlinux-x86_64.iso /var/lib/libvirt/boot

Anschliessend sollen die Besitzrechte wie folgt auf den Benutzer und die Gruppe - libvirt-qemu gesetzt werden, was mit nachfolgendem Befehl durchgeführt werden kann:

# chown libvirt-qemu:libvirt-qemu /var/lib/libvirt/boot/archlinux-x86_64.iso

Eine abschliessende Überprüfung der vorhergehenden Schritte, kann mit nachfolgendem Befehl durchgeführt werden und sollte eine Ausgabe in etwa wie nachfolgende anzeigen:

# ls -l /var/lib/libvirt/boot/
total 1606296
-rw-r--r-- 1 libvirt-qemu libvirt-qemu 820326400 Nov  1 14:56 archlinux-x86_64.iso

KVM: QCow2-Datei erstellen

Mit nachfolgendem Befehl, soll eine KVM - QCow2-Datei erstellt werden, welche die „Festplatte“ der im nächsten Schritt zu erstellenden virtuellen Maschine darstellt:

# qemu-img create -f qcow2 -o compat=1.1 /var/lib/libvirt/images/vmtest.qcow2 40G
Formatting '/var/lib/libvirt/images/vmtest.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=42949672960 compat=1.1 lazy_refcounts=off refcount_bits=16

Nachfolgende Befehle überprüfen, ob die „Festplatte“ wie gewünscht erstellt wurde:

Auflisten der KVM - QCow2-Datei im Dateisystem:

# ls -l /var/lib/libvirt/images/vmtest.qcow2 
-rw-r--r-- 1 root root 197248 Nov  6 06:47 /var/lib/libvirt/images/vmtest.qcow2

Auflisten der KVM - QCow2-Datei Spezifikationen:

# qemu-img info /var/lib/libvirt/images/vmtest.qcow2
image: /var/lib/libvirt/images/vmtest.qcow2
file format: qcow2
virtual size: 40 GiB (42949672960 bytes)
disk size: 196 KiB
cluster_size: 65536
Format specific information:
    compat: 1.1
    compression type: zlib
    lazy refcounts: false
    refcount bits: 16
    corrupt: false
    extended l2: false

KVM: Virtuelle Maschine erstellen

Nachfolgender Befehl erstellt eine virtuelle Maschine auf dem KVM-Wirt-System, welche als

  • Installations-Medium die ISO-Datei /var/lib/libvirt/boot/archlinux-x86_64.iso und als
  • „Festplatte“ die zuvor erstellte KVM - QCow2-Datei /var/lib/libvirt/images/vmtest.qcow2

verwendet.

Nachfolgend der Befehl zum erstellen der virtuellen Maschine:

    virt-install \
     --boot=uefi \
     --name vmtest \
     --memory 2048 \
     --cdrom /var/lib/libvirt/boot/archlinux-x86_64.iso \
     --os-variant archlinux \
     --vcpu 2 \
     --sound none \
     --video virtio \
     --console pty,target.type=virtio \
     --serial pty \
     --controller scsi,model=virtio-scsi \
     --noautoconsole \
     --disk /var/lib/libvirt/images/vmtest.qcow2,cache=none \
     --network network=default,model.type=virtio,mac.address=52:54:12:34:56:78
# virt-install --boot=uefi --name vmtest --memory 2048 --cdrom /var/lib/libvirt/boot/archlinux-x86_64.iso --os-variant archlinux --vcpu 2 --sound none --video virtio --console pty,target.type=virtio --serial pty --controller scsi,model=virtio-scsi --noautoconsole --disk /var/lib/libvirt/images/vmtest.qcow2,cache=none --network network=default,model.type=virtio,mac.address=52:54:12:34:56:78

Starting install...
Creating domain...                                          |    0 B  00:00     

Domain is still running. Installation may be in progress.
You can reconnect to the console to complete the installation process. 

Nachfolgender Befehl überprüft den Status der virtuellen Maschine auf dem KVM-Wirt-System:

# virsh list --all
 Id   Name     State
-------------------------
 1    vmtest   running

KVM: Virtuelle Maschine starten (UEFI-Boot)

Nach der erfolgreichen Erstellung der virtuellen Maschine auf dem KVM-Wirt-System, sollte ein Start der virtuellen Maschine - vmtest wie folgt aussehen:

Archlinux - Installation - UEFI-Boot

:!: HINWEIS - Der erste Eintrag, welcher vorausgewählt ist, soll verwendet werden!

Anschliessend sollte nach erfolgreichem Start (UEFI-Boot) eine Anzeige wie nachfolgend dargestellt erscheinen:

Archlinux - Installation - UEFI-Boot - Fertig

Live-System

Nachfolgende Schritte sollen zur Vereinfachung der späteren Installationsschritte durchgeführt werden.

Tastaturlayout: deutsch

:!: ACHTUNG - Nach dem starten des ISO-Images wird ein US/Englisches-Tastaturlayout verwendet!

Damit alle nachfolgenden Eingabe unter Verwendung eines deutschen Tastaturlayouts durchgeführt werden können, ist nachfolgender Befehl auszuführen:

root@archiso ~ # loadkeys de-latin1-nodeadkeys

Der Buchstabe [y] befindet sich auf der englischen Tastatur auf der Taste [z].
Das Zeichen [-] befindet sich auf der englischen Tastatur auf der Taste [ß].

:!: HINWEIS - Anschließend sollte ein deutsches Tastaturlayout geladen sein!

Passwort: root

Damit später nachfolgende Konfigurationen mittels Remote-Login per ssh durchgeführt werden können, soll eine Verbindung via SSH hergestellt werden.

Dazu ist es erforderlich, das für der Benutzer root im „Live“-System ein Passwort gesetzt ist, was mit nachfolgendem Befehl erreicht werden kann:

root@archiso ~ # passwd
New password
Retype new password:
passwd: password updated successfully

Das Passwort ist in der shell hinter New password: einzugeben und mit der [Return/Enter]-Taste zu bestätigen. Anschließend ist in der shell hinter Retype new password: das gleiche Passwort erneut einzugeben und ebenfalls mit der [Return/Enter]-Taste zu bestätigen.

Netzwerkkarte

Nachfolgende Befehle sollen eine Verbindung mit einem bestehenden Netzwerk mit Internet-Zugang herstellen.

Zuerst sollte die Bezeichnung der Netzwerkkarte mit nachfolgendem Befehl ermittelt werden:

root@archiso ~ # 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: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:12:34:56:78 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.22/24 metric 100 brd 192.168.122.255 scope global dynamic enp1s0
       valid_lft 2179sec preferred_lft 2179sec
    inet6 fe80::5054:12ff:fe34:5678/64 scope link 
       valid_lft forever preferred_lft forever

Die Bezeichnung der Netzwerkkarte in oben gezeigtem Beispiel lautet aktuell: enp1s0. In der gleichen Zeile ist auch zu sehen, dass die Karte bereits den Status UP hat, also aktiv und nutzbar ist.

:!: HINWEIS - Falls die Netzwerkkarte nicht UP und damit aktiv und nutzbar sein sollte, kann mit nachfolgendem Befehl, die Karte mit der Bezeichnung enp1s0 aktiviert, sprich in den Status UP versetzt werden:

root@archiso ~ # ip link set up dev enp1s0

:!: HINWEIS - Falls die Netzwerkkarte keine - IPv4-Netzwerkadresse erhalten haben sollte, kann mit nachfolgendem Befehl zumindest eine IPv4-Adresse gesetzte werden:

root@archiso ~ # ip addr add 192.168.122.22/24 dev enp1s0

Ein Überprüfung, ob die IPv4-Netzwerkadresse für die Netzwerkkarte mit der Bezeichnung enp1s0 gesetzt wurde, kann mit nachfolgendem Befehl erfolgen:

root@archiso ~ # 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: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:12:34:56:78 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.22/24 metric 100 brd 192.168.122.255 scope global dynamic enp1s0
       valid_lft 2179sec preferred_lft 2179sec
    inet6 fe80::5054:12ff:fe34:5678/64 scope link 
       valid_lft forever preferred_lft forever

Damit nun eine Verbindung in Richtung Internet möglich ist, muss eine Standardroute - default-Route den Weg in Richtung Internet konfiguriert sein, was mit nachfolgendem Befehl überprüft werden kann:

# root@archiso ~ # ip ro
default via 192.168.122.1 dev enp1s0 proto dhcp src 192.168.122.22 metric 100
192.168.122.22/24 dev enp1s0 proto kernel scope link src 192.168.122.22 metric 100
192.168.122.1 dev enp1s0 proto kernel scope link src 192.168.122.22 metric 100

:!: HINWEIS - Falls die Netzwerkkarte keine - IPv4-default-Route erhalten haben sollte, kann mit nachfolgendem Befehl zumindest eine IPv4-default-Route gesetzte werden:

root@archiso ~ # ip route add default via 192.168.122.1

Eine Überprüfung mit nachfolgendem Befehl zeigt nun die aktuellen Routen, inklusive der default-Route an, welche auch in das Internet führen sollte:

root@archiso ~ # ip ro
default via 192.168.122.22 dev enp1s0
192.168.122.0/24 dev enp1s0 proto kernel scope link src 192.168.122.1

Ob die Verbindung zum Internet hergestellt wurde, kann mit nachfolgendem Test durch den nachfolgenden Befehl durchgeführt werden. Drei ping in Richtung eines Namensservers (DNS) von Google mit der IP-Adresse: 8.8.8.8, sollten nun möglich sein und eine Rückmeldung wie nachfolgende zurück liefern:

root@archiso ~ # ping -c3 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8 icmp_seq=1 ttl=57 time=15.3 ms
64 bytes from 8.8.8.8 icmp_seq=2 ttl=57 time=14.3 ms
64 bytes from 8.8.8.8 icmp_seq=3 ttl=57 time=14.6 ms

--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 14.263/14.710/15.289/0.429 ms

Namensauflösung: /etc/resolv.conf

Mit nachfolgendem Befehl kann überprüft werden, ob die Konfigurationsdatei /etc/resolv.conf bereits richtig konfiguriert ist:

root@archiso ~ # cat /etc/resolv.conf 
# This is /run/systemd/resolve/stub-resolv.conf managed by man:systemd-resolved(8).
# Do not edit.
#
# This file might be symlinked as /etc/resolv.conf. If you're looking at
# /etc/resolv.conf and seeing this text, you have followed the symlink.
#
# This is a dynamic resolv.conf file for connecting local clients to the
# internal DNS stub resolver of systemd-resolved. This file lists all
# configured search domains.
#
# Run "resolvectl status" to see details about the uplink DNS servers
# currently in use.
#
# Third party programs should typically not access this file directly, but only
# through the symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a
# different way, replace this symlink by a static file or a different symlink.
#
# See man:systemd-resolved.service(8) for details about the supported modes of
# operation for /etc/resolv.conf.

nameserver 127.0.0.53
options edns0 trust-ad
search .

:!: HINWEIS - Falls das nicht so sein sollte und damit nicht nur der netzwerktechnische Zugriff auf das Internet möglich ist, sondern auch eine Namensauflösung wie z.B. Google zu einer IP-Adresse möglich ist, ist es erforderlich, dass ein Namensserver konfiguriert wird, welche im Netzwerk oder aus dem Netzwerk erreichbar ist. Dies kann durch Ausführen des nachfolgenden Befehls durchgeführt werden:

root@archiso ~ # echo 'nameserver 192.168.122.1' >> /etc/resolv.conf

:!: HINWEIS - Falls kein eigener Namensserver zur Verfügung stehen sollte, wäre auch extern erreichbare Nameserverer, wie die von Google eine ggf. kurzfristige Option, was durch Ausführung von nachfolgenden Befehlen ermöglicht werden könnte:

root@archiso ~ # echo 'nameserver 8.8.8.8' >> /etc/resolv.conf
root@archiso ~ # echo 'nameserver 8.8.4.4' >> /etc/resolv.conf

Mit nachfolgendem Befehl könne dann überprüft werden, ob die Ergänzung der Konfigurationsdatei /etc/resolv.conf erfolgreich waren:

root@archiso ~ # cat /etc/resolv.conf
# Resolver configuration file.
# See resolv.conf(5) for details.
nameserver 192.168.122.1

Ob die Namensauflösung Richtung Internet hergestellt wurde, kann mit nachfolgendem Test durch den nachfolgenden Befehl durchgeführt werden. Drei ping in Richtung von Google, sollten nun möglich sein und eine Rückmeldung wie nachfolgende zurück liefern:

root@archiso ~ # ping -c3 google.de
PING google.de (142.251.36.195) 56(84) bytes of data.
64 bytes from muc12s12-in-f3.1e100.net (142.251.36.195): icmp_seq=1 ttl=115 time=15.5 ms
64 bytes from muc12s12-in-f3.1e100.net (142.251.36.195): icmp_seq=2 ttl=115 time=14.6 ms
64 bytes from muc12s12-in-f3.1e100.net (142.251.36.195): icmp_seq=3 ttl=115 time=14.4 ms

--- google.de ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 14.420/14.823/15.463/0.457 ms

SSH-Dienst

Eine Überprüfung ob der SSH-Dienst/Daemon bereits ordnungsgemäß gestartet wurde, kann durch ausführen des nachfolgenden Befehls durchgeführt werden und sollte eine Ausgabe in etwa wie nachfolgende zur Folge haben:

root@archiso ~ # systemctl status sshd.service
● sshd.service - OpenSSH Daemon
     Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: disabled)
     Active: active (running) since Sun 2022-11-06 06:23:39 UTC; 50min ago
   Main PID: 424 (sshd)
      Tasks: 1 (limit: 2256)
     Memory: 12.0M
        CPU: 164ms
     CGroup: /system.slice/sshd.service
             └─424 "sshd: /usr/bin/sshd -D [listener] 0 of 10-100 startups"

Nov 06 06:23:39 archiso systemd[1]: Started OpenSSH Daemon.
Nov 06 06:23:39 archiso sshd[424]: Server listening on 0.0.0.0 port 22.
Nov 06 06:23:39 archiso sshd[424]: Server listening on :: port 22.
Nov 06 07:06:26 archiso sshd[511]: Postponed keyboard-interactive for root from 192.168.122.1 port 52000 ssh2 [preauth]
Nov 06 07:06:29 archiso sshd[511]: Postponed keyboard-interactive/pam for root from 192.168.122.1 port 52000 ssh2 [preauth]
Nov 06 07:06:29 archiso sshd[511]: Accepted keyboard-interactive/pam for root from 192.168.122.1 port 52000 ssh2
Nov 06 07:06:29 archiso sshd[511]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)

:!: HINWEIS - Falls der SSH-Dienst/Daemon nicht gestartet sein sollte und eine Verbindung zum Server, welcher via „Live“-ISO-Image gestartet wurde, hergestellt werden kann, muss der bereits entsprechend vorkonfigurierte SSH-Dienst/Daemon mit nachfolgendem Befehl gestartet werden:

root@archiso ~ # systemctl start sshd.service

Eine Überprüfung ob der SSH-Dienst/Daemon auch ordnungsgemäß gestartet wurde, kann durch ausführen des nachfolgenden Befehls durchgeführt werden und sollte eine Ausgabe in etwa wie nachfolgende zur Folge haben:

root@archiso ~ # systemctl status sshd.service
● sshd.service - OpenSSH Daemon
     Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: disabled)
     Active: active (running) since Sun 2022-11-06 06:23:39 UTC; 50min ago
   Main PID: 424 (sshd)
      Tasks: 1 (limit: 2256)
     Memory: 12.0M
        CPU: 164ms
     CGroup: /system.slice/sshd.service
             └─424 "sshd: /usr/bin/sshd -D [listener] 0 of 10-100 startups"

Nov 06 06:23:39 archiso systemd[1]: Started OpenSSH Daemon.
Nov 06 06:23:39 archiso sshd[424]: Server listening on 0.0.0.0 port 22.
Nov 06 06:23:39 archiso sshd[424]: Server listening on :: port 22.
Nov 06 07:06:26 archiso sshd[511]: Postponed keyboard-interactive for root from 192.168.122.1 port 52000 ssh2 [preauth]
Nov 06 07:06:29 archiso sshd[511]: Postponed keyboard-interactive/pam for root from 192.168.122.1 port 52000 ssh2 [preauth]
Nov 06 07:06:29 archiso sshd[511]: Accepted keyboard-interactive/pam for root from 192.168.122.1 port 52000 ssh2
Nov 06 07:06:29 archiso sshd[511]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)

SSH-Dienst: SSH-Login (root)

Jetzt kann eine erste Verbindung als Benutzer root via SSH-Login auf dem Server, welcher via „Live“-ISO-Image gestartet wurde, hergestellt werden. Nachfolgender Befehl soll dazu auf dem KVM-Wirt-System, oder bei physischer Hardware, auf einer lokalen Workstation, nicht auf der virtuellen Maschine vmtest, sondern auf dem Server verwendet werden:

$ ssh -t -2 -p 22 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@192.168.122.22
Warning: Permanently added '192.168.122.22' (ED25519) to the list of known hosts.
(root@192.168.122.22) Password: 
To install Arch Linux follow the installation guide:
https://wiki.archlinux.org/title/Installation_guide

For Wi-Fi, authenticate to the wireless network using the iwctl utility.
For mobile broadband (WWAN) modems, connect with the mmcli utility.
Ethernet, WLAN and WWAN interfaces using DHCP should work automatically.

After connecting to the internet, the installation guide can be accessed
via the convenience script Installation_guide.

                                          
Last login: Sun Nov  6 07:06:29 2022 from 192.168.122.1
root@archiso ~ #

Partitionierung: gdisk

Nachfolgend soll eine Partitionierung der „Festplatte“ eingerichtet werden. Die Partitionierung soll hier beispielhaft mit nachfolgender Festplattenaufteilung durchgeführt werden

Phyische Festplatte/LVM Größe Mount-Point Dateisystem
/dev/vda
/dev/vda1
/dev/vda1 1 GB /boot vfat
/dev/vda2
/dev/mapper/archlinux-swap 1 GB [SWAP] swap
/dev/mapper/archlinux-tmp 1 GB /tmp xfs
/dev/mapper/archlinux-var_cache 12 GB /var/cache xfs
/dev/mapper/archlinux-var_log 4 GB /var/log xfs
/dev/mapper/archlinux-var_spool 1 GB /var/spool xfs
/dev/mapper/archlinux-root 16 GB / btrfs
- subvolume - @home /home btrfs
- subvolume - @opt /opt btrfs
- subvolume - @srv /srv btrfs
- subvolume - @usr_local /usr/local btrfs
- subvolume - @btrfs /btrfs btrfs
- subvolume - @snapshots /.snapshots btrfs
SUMME 36 GB

Damit die noch unformatiert Festplatte partitioniert werden kann, soll dies mit Unterstützung des Befehl gdisk durchgeführt werden.

Nachfolgender Befehl listet die aktuelle, noch leere Festplattenkapazitäten auf:

root@archiso ~ # gdisk -l /dev/vda
GPT fdisk (gdisk) version 1.0.9

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries in memory.
Disk /dev/vda: 83886080 sectors, 40.0 GiB
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 29767D3D-A5E1-4CCF-AAFE-6FE6A779FCD9
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 83886046
Partitions will be aligned on 2048-sector boundaries
Total free space is 83886013 sectors (40.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name

Schritt 1: gdisk Interaktiver-Modus

:!: ACHTUNG - Die Befehle bitte mit grosser Sorgfalt ausführen, da sonst Beschädigungen am Dateisystem entstehen !!!
:!: ACHTUNG - Bitte darauf achten, nicht versehentlich eine andere Festplatte zu formatieren !!!
:!: ACHTUNG - Hier ist dies /dev/vda, bitte ggf. an die eigene Umgebung und eigenen Bedürfnisse anpassen !!!

Mit nachfolgenden Befehlen, wird die Festplatte /dev/vda in Bearbeitung genommen, um diese dann zu partitionieren:

root@archiso ~ # gdisk /dev/vda
GPT fdisk (gdisk) version 1.0.9

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries in memory.

Command (? for help):

Schritt 2: Erste Partition anlegen

Durch nachfolgende Befehle wird eine

  • neue „primäre“ Partition
  • mit der Nummer 1
  • und einer Grösse von 1 GB angelegt:

Nachfolgende Tasten sind wie folgt zu drücken:

  1. n
  2. 1
  3. [Enter/Return]-Taste = Bestätigung für „First sector (34-41943006, default = 2048)“
  4. die Eingabe der Größe, durch +1024M
  5. und Eingabe des Dateisystem-Codes: ef00
Command (? for help): n
Partition number (1-128, default 1): 1
First sector (34-83886046, default = 2048) or {+-}size{KMGTP}: 
Last sector (2048-83886046, default = 83884031) or {+-}size{KMGTP}: +1024M
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): ef00
Changed type of partition to 'EFI system partition'

Command (? for help):

Anschliessend kann durch drücken der [p]-Taste die neue Partitionierung aufgelistet werden, was eine Ausgabe wie nachfolgende zur Anzeige bringen sollte:

Command (? for help): p
Disk /dev/vda: 83886080 sectors, 40.0 GiB
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 5F6F2336-A1E9-48C2-8C5D-247B0DBE5F28
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 83886046
Partitions will be aligned on 2048-sector boundaries
Total free space is 81788861 sectors (39.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         2099199   1024.0 MiB  EF00  EFI system partition

Command (? for help):

Schritt 3: Zweite Partition anlegen

Durch nachfolgende Befehle wird eine

  • neue „primäre“ Partition
  • mit der Nummer 2
  • in der Größe der restlichen Festplatte angelegt:

Nachfolgende Tasten sind wie folgt zu drücken:

  1. n
  2. 2
  3. [Enter/Return]-Taste = Bestätigung für „First sector (34-83886046, default = 2099200)“
  4. [Enter/Return]-Taste = Bestätigung für „Last sector …“
  5. und Eingabe des Dateisystem-Codes: 8e00
Command (? for help): n 
Partition number (2-128, default 2): 2
First sector (34-83886046, default = 2099200) or {+-}size{KMGTP}: 
Last sector (2099200-83886046, default = 83884031) or {+-}size{KMGTP}: 
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): 8e00
Changed type of partition to 'Linux LVM'

Abschliessend kann durch drücken der [p]-Taste die neue Partitionierung aufgelistet werden, was eine Ausgabe wie nachfolgende zur Anzeige bringen sollte:

Command (? for help): p
Disk /dev/vda: 83886080 sectors, 40.0 GiB
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 5F6F2336-A1E9-48C2-8C5D-247B0DBE5F28
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 83886046
Partitions will be aligned on 2048-sector boundaries
Total free space is 4029 sectors (2.0 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         2099199   1024.0 MiB  EF00  EFI system partition
   2         2099200        83884031   39.0 GiB    8E00  Linux LVM

Schritt 4: Partitionstabelle schreiben

Abschliessend sind nun die Tasten

  1. w
  2. und zur Bestätigung Y

zu drücken, um die Änderung auch tatsächlich in die Partitionstabelle der Festplatte zu schreiben:

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/vda.
The operation has completed successfully.

LVM

Nachfolgend sollen nur die Bestandteile des Logical VoluMe

  • Physisches Volume
  • Volume Gruppe
  • Logische Volumes

angelegt werden.

Schritt 1: Physische Volume anlegen

Anlegen eines physischen Volume zur Nutzung durch ein LVM mit nachfolgendem Befehl:

root@archiso ~ # pvcreate /dev/vda2
  Physical volume "/dev/vda2" successfully created.

:!: ACHTUNG - Bitte hier die zweite Partition verwenden, da die erste Partition für die UEFI-Boot Dateien reserviert ist!

Schritt 2: Volume Gruppe anlegen

Anlegen einer Volume Gruppe mit dem Namen archlinux zur Nutzung durch ein LVM mit nachfolgendem Befehl:

root@archiso ~ # vgcreate archlinux /dev/vda2
  Volume group "archlinux" successfully created

:!: ACHTUNG - Bitte hier die zweite Partition verwenden, da die erste Partition für die UEFI-Boot Dateien reserviert ist!

Schritt 3: Logische Volumes anlegen

Nachfolgende Befehle legen die logischen Volumes

  • /dev/mapper/archlinux-swap
  • /dev/mapper/archlinux-tmp
  • /dev/mapper/archlinux-var_log
  • /dev/mapper/archlinux-var_cache
  • /dev/mapper/archlinux-var_spool
  • /dev/mapper/archlinux-root

zur Nutzung durch ein LVM an:

/dev/mapper/archlinux-swap

root@archiso ~ # lvcreate --name swap -L1024M archlinux
  Logical volume "swap" created.

/dev/mapper/archlinux-tmp

root@archiso ~ # lvcreate --name tmp -L1024M archlinux
  Logical volume "tmp" created.

/dev/mapper/archlinux-var_log

root@archiso ~ # lvcreate --name var_log -L4096M archlinux
  Logical volume "var_log" created.

/dev/mapper/archlinux-var_cache

root@archiso ~ # lvcreate --name var_cache -L12288M archlinux
  Logical volume "var_cache" created.

/dev/mapper/archlinux-var_spool

root@archiso ~ # lvcreate --name var_spool -L1024M archlinux
  Logical volume "var_spool" created.

/dev/mapper/archlinux-root

root@archiso ~ # lvcreate --name root -L16384M archlinux
  Logical volume "root" created.

Mit nachfolgendem Befehl kann überprüft werden, ob die Neuanlagen erfolgreich durchführt wurden:

root@archiso ~ # lsblk /dev/vda
NAME                    MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
vda                     254:0    0  40G  0 disk 
├─vda1                  254:1    0   1G  0 part 
└─vda2                  254:2    0  39G  0 part 
  ├─archlinux-swap      252:0    0   1G  0 lvm  
  ├─archlinux-tmp       252:1    0   1G  0 lvm  
  ├─archlinux-var_log   252:2    0   4G  0 lvm  
  ├─archlinux-var_cache 252:3    0  12G  0 lvm  
  ├─archlinux-var_spool 252:4    0   1G  0 lvm  
  └─archlinux-root      252:5    0  16G  0 lvm

Dateisysteme: formatieren

Nachfolgende Befehle formatieren die zuvor erstellen Partitionen

  • /dev/vda1
  • /dev/mapper/archlinux-swap
  • /dev/mapper/archlinux-tmp
  • /dev/mapper/archlinux-var_log
  • /dev/mapper/archlinux-var_cache
  • /dev/mapper/archlinux-var_spool
  • /dev/mapper/archlinux-root

mit einem Dateisystem, je nach Partitionstyp:

/dev/vda1

Nachfolgende Befehle formatieren die zuvor erstellen Partition: /dev/vda1 mit dem vfat-Dateisystem

root@archiso ~ # mkfs.vfat /dev/vda1
mkfs.fat 4.2 (2021-01-31)

/dev/mapper/archlinux-swap

Nachfolgende Befehle formatieren die zuvor erstellen Partition: /dev/mapper/archlinux-swap mit dem swap-Dateisystem und einem „Label“: SWAP

root@archiso ~ # mkswap -L SWAP /dev/mapper/archlinux-swap

Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
LABEL=SWAP, UUID=4c6fea8a-a64d-414e-af9d-78381beabbda

/dev/mapper/archlinux-tmp

Nachfolgende Befehle formatieren die zuvor erstellen Partition: /dev/mapper/archlinux-tmp mit dem xfs-Dateisystem und einem „Label“: TMP

root@archiso ~ # mkfs.xfs -L TMP /dev/mapper/archlinux-tmp
meta-data=/dev/mapper/archlinux-tmp isize=512    agcount=4, agsize=65536 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=1 inobtcount=1 nrext64=0
data     =                       bsize=4096   blocks=262144, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=16384, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
Discarding blocks...Done.

/dev/mapper/archlinux-var_log

Nachfolgende Befehle formatieren die zuvor erstellen Partition: /dev/mapper/archlinux-var_log mit dem xfs-Dateisystem und einem „Label“: VAR_LOG

root@archiso ~ # mkfs.xfs -L VAR_LOG /dev/mapper/archlinux-var_log
meta-data=/dev/mapper/archlinux-var_log isize=512    agcount=4, agsize=262144 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=1 inobtcount=1 nrext64=0
data     =                       bsize=4096   blocks=1048576, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=16384, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
Discarding blocks...Done.

/dev/mapper/archlinux-var_cache

Nachfolgende Befehle formatieren die zuvor erstellen Partition: /dev/mapper/archlinux-var_cache mit dem xfs-Dateisystem und einem „Label“: VAR_CACHE

root@archiso ~ # mkfs.xfs -L VAR_CACHE /dev/mapper/archlinux-var_cache
meta-data=/dev/mapper/archlinux-var_cache isize=512    agcount=4, agsize=786432 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=1 inobtcount=1 nrext64=0
data     =                       bsize=4096   blocks=3145728, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=16384, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
Discarding blocks...Done.

/dev/mapper/archlinux-var_spool

Nachfolgende Befehle formatieren die zuvor erstellen Partition: /dev/mapper/archlinux-var_spool mit dem xfs-Dateisystem und einem „Label“: VAR_SPOOL

root@archiso ~ # mkfs.xfs -L VAR_SPOOL /dev/mapper/archlinux-var_spool
meta-data=/dev/mapper/archlinux-var_spool isize=512    agcount=4, agsize=65536 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=1 inobtcount=1 nrext64=0
data     =                       bsize=4096   blocks=262144, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=16384, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
Discarding blocks...Done.

/dev/mapper/archlinux-root

Nachfolgende Befehle formatieren die zuvor erstellen Partition: /dev/mapper/archlinux-root mit dem btrfs-Dateisystem und einem „Label“: ROOT

root@archiso ~ # mkfs.btrfs -L ROOT /dev/mapper/archlinux-root
btrfs-progs v6.0
See http://btrfs.wiki.kernel.org for more information.

Performing full device TRIM /dev/mapper/archlinux-root (16.00GiB) ...
NOTE: several default settings have changed in version 5.15, please make sure
      this does not affect your deployments:
      - DUP for metadata (-m dup)
      - enabled no-holes (-O no-holes)
      - enabled free-space-tree (-R free-space-tree)

Label:              ROOT
UUID:               f6727a9b-22fc-4011-9f25-4fea20e7acc7
Node size:          16384
Sector size:        4096
Filesystem size:    16.00GiB
Block group profiles:
  Data:             single            8.00MiB
  Metadata:         DUP             256.00MiB
  System:           DUP               8.00MiB
SSD detected:       no
Zoned device:       no
Incompat features:  extref, skinny-metadata, no-holes
Runtime features:   free-space-tree
Checksum:           crc32c
Number of devices:  1
Devices:
   ID        SIZE  PATH
    1    16.00GiB  /dev/mapper/archlinux-root

Dateisysteme: mounten

Nachfolgende Befehle mounted (einhängen) die zuvor erstellen Partitionen

  • /dev/vda1 - /mnt/boot
  • /dev/mapper/archlinux-swap - /mnt/swap
  • /dev/mapper/archlinux-tmp - /mnt/tmp
  • /dev/mapper/archlinux-var_log - /mnt/var/log
  • /dev/mapper/archlinux-var_cache - /mnt/var/cache
  • /dev/mapper/archlinux-var_spool - /mnt/var/spool
  • /dev/mapper/archlinux-root - /mnt
  • /dev/mapper/archlinux-root - subvolume - /mnt/@home
  • /dev/mapper/archlinux-root - subvolume - /mnt/@opt
  • /dev/mapper/archlinux-root - subvolume - /mnt/@srv
  • /dev/mapper/archlinux-root - subvolume - /mnt/@usr_local
  • /dev/mapper/archlinux-root - subvolume - /mnt/@btrfs
  • /dev/mapper/archlinux-root - subvolume - /.@snapshots

mit einem Dateisystem, je nach Partitionstyp:

mount: /dev/mapper/archlinux-root

Bevor nun die einzelnen vfat: Partition und Mount-Point, xfs: Partitionen und Mount-Points und btrfs: Partitionen, Subvolumes und Mount-Points erzeugt bzw. gemounted (eingehängt) werden können, muss die Partition: /dev/mapper/archlinux-root zuerst auf z.B.

  • /mnt

gemountet werden:

root@archiso ~ # mount /dev/mapper/archlinux-root /mnt

btrfs: Subvolume erstellen

Um die btrfs: Partitionen, Subvolumes und Mount-Points mounten zu können, ist es erforderlich das entsprechende Subvolume und den Mount-Point im Dateisystem unter /mnt zu erstellen, und anschliessend zu mounten, was mit den drei nachfolgenden Befehlen durchgeführt werden kann:

Subvolume erstellen:

root@archiso ~ # btrfs subvolume create /mnt/@root
Create subvolume '/mnt/@root'
root@archiso ~ # btrfs subvolume create /mnt/@home
Create subvolume '/mnt/@home'
root@archiso ~ # btrfs subvolume create /mnt/@opt
Create subvolume '/mnt/@opt'
root@archiso ~ # btrfs subvolume create /mnt/@srv
Create subvolume '/mnt/@srv'
root@archiso ~ # btrfs subvolume create /mnt/@usr_local
Create subvolume '/mnt/@usr_local'
root@archiso ~ # btrfs subvolume create /mnt/@btrfs
Create subvolume '/mnt/@btrfs'
root@archiso ~ # btrfs subvolume create /mnt/@snapshots
Create subvolume '/mnt/@snapshots'

umount: /mnt

Anschliessend ist der Mount-Point - /mnt wieder zu umounten, damit dieser im nachfolgenden Schritt mit den entsprechenden Btrfs-Optionen auf den neu erstellten Mount-Point gemountet werden kann:

# umount /mnt

btrfs: /dev/mapper/archlinux-root

Jetzt kann der Mount-Point mit den Btrfs-Optionen mit nachfolgendem Befehl gemountet werden:

Mount-Point einhängen:

# mount -o rw,relatime,compress=zstd:3,space_cache=v2,subvol=/@root /dev/mapper/archlinux-root /mnt

vfat: /dev/vda1

Um die vfat: Partition mounten zu können, ist es erforderlich den entsprechenden Mount-Point im Dateisystem unter /mnt zu erstellen und anschliessend zu mounten, was mit den beiden nachfolgenden Befehlen durchgeführt werden kann:

Mount-Point erstellen:

# mkdir /mnt/boot

Mount-Point einhängen:

# mount /dev/vda1 /mnt/boot

swap: /dev/mapper/archlinux-swap

Um die swap: Partition mounten zu können, ist es nur erforderlich diese zu aktivieren, da hier kein entsprechenden Mount-Point erforderlich ist:

Mount-Point aktivieren:

# swapon /dev/mapper/archlinux-swap

xfs: /dev/mapper/archlinux-tmp

Um die xfs: Partition mounten zu können, ist es erforderlich den entsprechenden Mount-Point im Dateisystem unter /mnt zu erstellen und anschliessend zu mounten, was mit den beiden nachfolgenden Befehlen durchgeführt werden kann:

Mount-Point erstellen:

# mkdir /mnt/tmp

Mount-Point einhängen:

# mount /dev/mapper/archlinux-tmp /mnt/tmp

xfs: /dev/mapper/archlinux-var_log

Um die xfs: Partition mounten zu können, ist es erforderlich den entsprechenden Mount-Point im Dateisystem unter /mnt zu erstellen und anschließend zu mounten, was mit den beiden nachfolgenden Befehlen durchgeführt werden kann:

Mount-Point erstellen:

# mkdir -p /mnt/var/log

Mount-Point einhängen:

# mount /dev/mapper/archlinux-var_log /mnt/var/log

xfs: /dev/mapper/archlinux-var_cache

Um die xfs: Partition mounten zu können, ist es erforderlich den entsprechenden Mount-Point im Dateisystem unter /mnt zu erstellen und anschliessend zu mounten, was mit den beiden nachfolgenden Befehlen durchgeführt werden kann:

Mount-Point erstellen:

# mkdir -p /mnt/var/cache

Mount-Point einhängen:

# mount /dev/mapper/archlinux-var_cache /mnt/var/cache

xfs: /dev/mapper/archlinux-var_spool

Um die xfs: Partition mounten zu können, ist es erforderlich den entsprechenden Mount-Point im Dateisystem unter /mnt zu erstellen und anschliessend zu mounten, was mit den beiden nachfolgenden Befehlen durchgeführt werden kann:

Mount-Point erstellen:

# mkdir -p /mnt/var/spool

Mount-Point einhängen:

# mount /dev/mapper/archlinux-var_spool /mnt/var/spool

btrfs: /mnt/@home

Um die btrfs: Partitionen, Subvolumes und Mount-Points mounten zu können, ist es erforderlich das entsprechende Subvolume und den Mount-Point im Dateisystem unter /mnt zu erstellen, und anschliessend zu mounten, was mit den drei nachfolgenden Befehlen durchgeführt werden kann:

Mount-Point erstellen:

# mkdir -p /mnt/home

Mount-Point einhängen:

# mount -o rw,relatime,compress=zstd:3,space_cache=v2,subvol=/@home /dev/mapper/archlinux-root /mnt/home

btrfs: /mnt/@opt

Um die btrfs: Partitionen, Subvolumes und Mount-Points mounten zu können, ist es erforderlich das entsprechende Subvolume und den Mount-Point im Dateisystem unter /mnt zu erstellen, und anschliessend zu mounten, was mit den drei nachfolgenden Befehlen durchgeführt werden kann:

Mount-Point erstellen:

# mkdir -p /mnt/opt

Mount-Point einhängen:

# mount -o rw,relatime,compress=zstd:3,space_cache=v2,subvol=/@opt /dev/mapper/archlinux-root /mnt/opt

btrfs: /mnt/@srv

Um die btrfs: Partitionen, Subvolumes und Mount-Points mounten zu können, ist es erforderlich das entsprechende Subvolume und den Mount-Point im Dateisystem unter /mnt zu erstellen, und anschliessend zu mounten, was mit den drei nachfolgenden Befehlen durchgeführt werden kann:

Mount-Point erstellen:

# mkdir -p /mnt/srv

Mount-Point einhängen:

# mount -o rw,relatime,compress=zstd:3,space_cache=v2,subvol=/@srv /dev/mapper/archlinux-root /mnt/srv

btrfs: /mnt/@usr_local

Um die btrfs: Partitionen, Subvolumes und Mount-Points mounten zu können, ist es erforderlich das entsprechende Subvolume und den Mount-Point im Dateisystem unter /mnt zu erstellen, und anschliessend zu mounten, was mit den drei nachfolgenden Befehlen durchgeführt werden kann:

Mount-Point erstellen:

# mkdir -p /mnt/usr/local

Mount-Point einhängen:

# mount -o rw,relatime,compress=zstd:3,space_cache=v2,subvol=/@usr_local /dev/mapper/archlinux-root /mnt/usr/local

btrfs: /mnt/@btrfs

Um die btrfs: Partitionen, Subvolumes und Mount-Points mounten zu können, ist es erforderlich das entsprechende Subvolume und den Mount-Point im Dateisystem unter /mnt zu erstellen, und anschliessend zu mounten, was mit den drei nachfolgenden Befehlen durchgeführt werden kann:

Mount-Point erstellen:

# mkdir -p /mnt/btrfs

Mount-Point einhängen:

# mount -o rw,relatime,compress=zstd:3,space_cache=v2,subvolid=5 /dev/mapper/archlinux-root /mnt/btrfs

:!: ACHTUNG - Bitte die abweichenden Mount-Point Optionen beachten!

btrfs: /mnt/@snapshots

Um die btrfs: Partitionen, Subvolumes und Mount-Points mounten zu können, ist es erforderlich das entsprechende Subvolume zu erstellen, das mounten wird zu einem späteren Zeitpunkt erfolgen, siehe auch den nachfolgenden internen Link:

:!: ACHTUNG - Es wird kein Mount-Point erstellt und es erfolgt auch kein mount (einhängen) !

Mit nachfolgendem Befehlen kann erneut überprüft werden, ob die Konfigurationen erfolgreich durchführt wurden:

root@archiso ~ # lsblk /dev/vda
NAME                    MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
vda                     254:0    0  40G  0 disk 
├─vda1                  254:1    0   1G  0 part /mnt/boot
└─vda2                  254:2    0  39G  0 part 
  ├─archlinux-swap      252:0    0   1G  0 lvm  [SWAP]
  ├─archlinux-tmp       252:1    0   1G  0 lvm  /mnt/tmp
  ├─archlinux-var_log   252:2    0   4G  0 lvm  /mnt/var/log
  ├─archlinux-var_cache 252:3    0  12G  0 lvm  /mnt/var/cache
  ├─archlinux-var_spool 252:4    0   1G  0 lvm  /mnt/var/spool
  └─archlinux-root      252:5    0  16G  0 lvm  /mnt/btrfs
                                                /mnt/usr/local
                                                /mnt/srv
                                                /mnt/opt
                                                /mnt/home
                                                /mnt
root@archiso ~ # ls -l /mnt 
total 20
drwxr-xr-x 2 root root 4096 Jan  1  1970 boot
drwxr-xr-x 1 root root   88 Nov  6 14:39 btrfs
drwxr-xr-x 1 root root    0 Nov  6 14:38 home
drwxr-xr-x 1 root root    0 Nov  6 14:38 opt
drwxr-xr-x 1 root root    0 Nov  6 14:38 srv
drwxr-xr-x 2 root root    6 Nov  6 14:38 tmp
drwxr-xr-x 1 root root   10 Nov  6 14:41 usr
drwxr-xr-x 1 root root   26 Nov  6 14:40 var

Installation: Basissystem

/etc/pacman.d/mirrorlist

Bevor die eigentliche Installation des Basissystems erfolgen kann, soll noch eine länderspezifische Auswahl der Installationsquellen getroffen werden, damit die Installation über das Internet möglichst von regionalen Servern, hier aus Deutschland, erfolgen kann. Die Ermittlung der Server soll hier nach deren Erreichbarkeit, sprich der Geschwindigkeit sortiert werden = ––sort rate, es wäre jedoch auch die Sortierung nach Aktualität = ––sort age eine weitere Möglichkeit.

Dazu ist die Optimierung der Konfigurationsdatei

  • /etc/pacman.d/mirrorlist

erforderlich.

Um nur die regionalen Server, hier nur aus Deutschland, in der Konfigurationsdatei /etc/pacman.d/mirrorlist vorzufinden, kann nachfolgender Befehl verwendet werden:

    reflector \
      --verbose \
      --country Germany \
      -l 200 \
      -p https \
      --sort rate \
      --save /etc/pacman.d/mirrorlist
root@archiso ~ # reflector --verbose --country Germany -l 200 -p https --sort rate --save /etc/pacman.d/mirrorlist 
[2022-11-06 11:59:36] INFO: rating 42 mirror(s) by download speed
[2022-11-06 11:59:36] INFO: Server                                                            Rate       Time
[2022-11-06 11:59:37] INFO: https://phinau.de/arch/                                 10873.41 KiB/s     0.68 s
[2022-11-06 11:59:39] INFO: https://archlinux.thaller.ws/                            4933.86 KiB/s     1.49 s
[2022-11-06 11:59:39] INFO: https://mirror.f4st.host/archlinux/                     12172.11 KiB/s     0.61 s
[2022-11-06 11:59:40] INFO: https://mirror.chaoticum.net/arch/                      12312.18 KiB/s     0.60 s
[2022-11-06 11:59:46] WARNING: failed to rate http(s) download (https://ftp.halifax.rwth-aachen.de/archlinux/community/os/x86_64/community.db): Download timed out after 5 second(s).
[2022-11-06 11:59:46] INFO: https://ftp.halifax.rwth-aachen.de/archlinux/               0.00 KiB/s     0.00 s
[2022-11-06 11:59:46] INFO: https://mirrors.niyawe.de/archlinux/                    12016.27 KiB/s     0.61 s
[2022-11-06 11:59:47] INFO: https://mirror.pseudoform.org/                          11966.13 KiB/s     0.62 s
[2022-11-06 11:59:48] INFO: https://pkg.fef.moe/archlinux/                          12109.15 KiB/s     0.61 s
[2022-11-06 11:59:53] INFO: https://de.arch.mirror.kescher.at/                       1752.78 KiB/s     4.20 s
[2022-11-06 11:59:53] INFO: https://mirror.metalgamer.eu/archlinux/                 12506.60 KiB/s     0.59 s
[2022-11-06 11:59:55] INFO: https://mirror.moson.org/arch/                          12466.59 KiB/s     0.59 s
[2022-11-06 11:59:56] INFO: https://mirror.ubrco.de/archlinux/                      12540.85 KiB/s     0.59 s
[2022-11-06 11:59:57] INFO: https://packages.oth-regensburg.de/archlinux/           11349.69 KiB/s     0.65 s
[2022-11-06 11:59:58] INFO: https://arch.unixpeople.org/                            12124.03 KiB/s     0.61 s
[2022-11-06 11:59:58] INFO: https://mirrors.xtom.de/archlinux/                      11989.98 KiB/s     0.61 s
[2022-11-06 11:59:59] INFO: https://mirror.cmt.de/archlinux/                        12329.82 KiB/s     0.60 s
[2022-11-06 12:00:00] INFO: https://mirrors.n-ix.net/archlinux/                     12731.23 KiB/s     0.58 s
[2022-11-06 12:00:01] INFO: https://dist-mirror.fem.tu-ilmenau.de/archlinux/        11384.48 KiB/s     0.65 s
[2022-11-06 12:00:02] INFO: https://os.codefionn.eu/archlinux/                      12317.71 KiB/s     0.60 s
[2022-11-06 12:00:02] INFO: https://mirror.fra10.de.leaseweb.net/archlinux/         12345.65 KiB/s     0.60 s
[2022-11-06 12:00:03] INFO: https://arch.mirror.zachlge.org/                         8252.54 KiB/s     0.89 s
[2022-11-06 12:00:04] INFO: https://mirror.iusearchbtw.nl/                          11922.45 KiB/s     0.62 s
[2022-11-06 12:00:05] INFO: https://mirror.selfnet.de/archlinux/                    12269.73 KiB/s     0.60 s
[2022-11-06 12:00:06] INFO: https://mirror.kumi.systems/archlinux/                   9649.21 KiB/s     0.76 s
[2022-11-06 12:00:07] INFO: https://mirror.jaime.sh/archlinux/                      10049.69 KiB/s     0.73 s
[2022-11-06 12:00:08] INFO: https://archlinux.homeinfo.de/                          11985.47 KiB/s     0.61 s
[2022-11-06 12:00:09] INFO: https://mirror.23m.com/archlinux/                       11861.88 KiB/s     0.62 s
[2022-11-06 12:00:10] INFO: https://mirror.pagenotfound.de/archlinux/               11994.04 KiB/s     0.61 s
[2022-11-06 12:00:11] INFO: https://mirror.dogado.de/archlinux/                     10849.85 KiB/s     0.68 s
[2022-11-06 12:00:12] INFO: https://ftp.fau.de/archlinux/                           11921.72 KiB/s     0.62 s
[2022-11-06 12:00:13] INFO: https://mirror.mikrogravitation.org/archlinux/          11732.22 KiB/s     0.63 s
[2022-11-06 12:00:14] INFO: https://mirror.gnomus.de/                               11928.04 KiB/s     0.62 s
[2022-11-06 12:00:14] INFO: https://mirror.informatik.tu-freiberg.de/arch/          10673.78 KiB/s     0.69 s
[2022-11-06 12:00:15] INFO: https://mirror.clientvps.com/archlinux/                 11838.74 KiB/s     0.62 s
[2022-11-06 12:00:16] INFO: https://mirrors.janbruckner.de/archlinux/               10055.84 KiB/s     0.73 s
[2022-11-06 12:00:17] INFO: https://mirror.netcologne.de/archlinux/                 12055.75 KiB/s     0.61 s
[2022-11-06 12:00:18] INFO: https://ftp.spline.inf.fu-berlin.de/mirrors/archlinux/   9374.31 KiB/s     0.79 s
[2022-11-06 12:00:19] INFO: https://mirror.bethselamin.de/                          12501.79 KiB/s     0.59 s
[2022-11-06 12:00:19] WARNING: failed to rate http(s) download (https://mirror.checkdomain.de/archlinux/community/os/x86_64/community.db): HTTP Error 403: Forbidden
[2022-11-06 12:00:19] INFO: https://mirror.checkdomain.de/archlinux/                    0.00 KiB/s     0.00 s
[2022-11-06 12:00:20] INFO: https://ftp.wrz.de/pub/archlinux/                       12018.29 KiB/s     0.61 s
[2022-11-06 12:00:21] INFO: https://ftp.agdsn.de/pub/mirrors/archlinux/             11138.41 KiB/s     0.66 s
[2022-11-06 12:00:22] INFO: https://appuals.com/archlinux/                          13028.31 KiB/s     0.57 s

Der so generierte Inhalt der Konfigurationsdatei /etc/pacman.d/mirrorlist kann zur Kontrolle mit nachfolgendem Befehl ausgegeben werden:

root@archiso ~ # cat /etc/pacman.d/mirrorlist
################################################################################
################# Arch Linux mirrorlist generated by Reflector #################
################################################################################

# With:       reflector --verbose --country Germany -l 200 -p https --sort rate --save /etc/pacman.d/mirrorlist
# When:       2022-11-06 12:00:22 UTC
# From:       https://archlinux.org/mirrors/status/json/
# Retrieved:  2022-11-06 11:59:36 UTC
# Last Check: 2022-11-06 11:34:37 UTC

Server = https://appuals.com/archlinux/$repo/os/$arch
Server = https://mirrors.n-ix.net/archlinux/$repo/os/$arch
Server = https://mirror.ubrco.de/archlinux/$repo/os/$arch
Server = https://mirror.metalgamer.eu/archlinux/$repo/os/$arch
Server = https://mirror.bethselamin.de/$repo/os/$arch
Server = https://mirror.moson.org/arch/$repo/os/$arch
Server = https://mirror.fra10.de.leaseweb.net/archlinux/$repo/os/$arch
Server = https://mirror.cmt.de/archlinux/$repo/os/$arch
Server = https://os.codefionn.eu/archlinux/$repo/os/$arch
Server = https://mirror.chaoticum.net/arch/$repo/os/$arch
Server = https://mirror.selfnet.de/archlinux/$repo/os/$arch
Server = https://mirror.f4st.host/archlinux/$repo/os/$arch
Server = https://arch.unixpeople.org/$repo/os/$arch
Server = https://pkg.fef.moe/archlinux/$repo/os/$arch
Server = https://mirror.netcologne.de/archlinux/$repo/os/$arch
Server = https://ftp.wrz.de/pub/archlinux/$repo/os/$arch
Server = https://mirrors.niyawe.de/archlinux/$repo/os/$arch
Server = https://mirror.pagenotfound.de/archlinux/$repo/os/$arch
Server = https://mirrors.xtom.de/archlinux/$repo/os/$arch
Server = https://archlinux.homeinfo.de/$repo/os/$arch
Server = https://mirror.pseudoform.org/$repo/os/$arch
Server = https://mirror.gnomus.de/$repo/os/$arch
Server = https://mirror.iusearchbtw.nl/$repo/os/$arch
Server = https://ftp.fau.de/archlinux/$repo/os/$arch
Server = https://mirror.23m.com/archlinux/$repo/os/$arch
Server = https://mirror.clientvps.com/archlinux/$repo/os/$arch
Server = https://mirror.mikrogravitation.org/archlinux/$repo/os/$arch
Server = https://dist-mirror.fem.tu-ilmenau.de/archlinux/$repo/os/$arch
Server = https://packages.oth-regensburg.de/archlinux/$repo/os/$arch
Server = https://ftp.agdsn.de/pub/mirrors/archlinux/$repo/os/$arch
Server = https://phinau.de/arch/$repo/os/$arch
Server = https://mirror.dogado.de/archlinux/$repo/os/$arch
Server = https://mirror.informatik.tu-freiberg.de/arch/$repo/os/$arch
Server = https://mirrors.janbruckner.de/archlinux/$repo/os/$arch
Server = https://mirror.jaime.sh/archlinux/$repo/os/$arch
Server = https://mirror.kumi.systems/archlinux/$repo/os/$arch
Server = https://ftp.spline.inf.fu-berlin.de/mirrors/archlinux/$repo/os/$arch
Server = https://arch.mirror.zachlge.org/$repo/os/$arch
Server = https://archlinux.thaller.ws/$repo/os/$arch
Server = https://de.arch.mirror.kescher.at/$repo/os/$arch
Server = https://ftp.halifax.rwth-aachen.de/archlinux/$repo/os/$arch
Server = https://mirror.checkdomain.de/archlinux/$repo/os/$arch

/etc/pacman.d/gnupg

Um aktuelles Schlüsselmaterial zu erhalten, mit dem die Pakete unter Archlinux signiert sind, sind nachfolgende Befehle erforderlich:

Schlüsselbund initialisieren:

root@archiso ~ # pacman-key --init
gpg: /etc/pacman.d/gnupg/trustdb.gpg: trustdb created
gpg: no ultimately trusted keys found
gpg: starting migration from earlier GnuPG versions
gpg: porting secret keys from '/etc/pacman.d/gnupg/secring.gpg' to gpg-agent
gpg: migration succeeded
==> Generating pacman master key. This may take some time.
gpg: Generating pacman keyring master key...
gpg: directory '/etc/pacman.d/gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/etc/pacman.d/gnupg/openpgp-revocs.d/5A14E456526255A41AA3D96A9537A3AFB2E0380B.rev'
gpg: Done
==> Updating trust database...
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u

Schlüsselmaterial bekanntgeben:

root@archiso ~ # pacman-key --populate archlinux
==> Appending keys from archlinux.gpg...
==> Locally signing trusted keys in keyring...
  -> Locally signed 6 keys.
==> Importing owner trust values...
gpg: setting ownertrust to 4
gpg: setting ownertrust to 4
gpg: setting ownertrust to 4
gpg: setting ownertrust to 4
gpg: inserting ownertrust of 4
gpg: setting ownertrust to 4
==> Disabling revoked keys in keyring...
  -> Disabled 52 keys.
==> Updating trust database...
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: depth: 0  valid:   1  signed:   6  trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: depth: 1  valid:   6  signed:  94  trust: 0-, 0q, 0n, 6m, 0f, 0u
gpg: depth: 2  valid:  74  signed:  28  trust: 74-, 0q, 0n, 0m, 0f, 0u
gpg: next trustdb check due at 2022-11-16
pacman-key --populate archlinux  4.94s user 0.63s system 97% cpu 5.712 total

Basissystem: /mnt

Der folgende Befehl führt nun die Installation von ArchLinux auf der zuvor eingerichteten Festplatte bzw. den Partitionen aus:

    pacstrap /mnt \
      base \
      base-devel \
      linux-lts \
      linux-firmware \
      lvm2 \
      dosfstools \
      xfsprogs \
      btrfs-progs \
      openssh \
      sshpass \
      vi \
      vim \
      python \
      python-netaddr

:!: WICHTIG - Die Pakete lvm2, dosfstools, xfsprogs und btrfs-progs sind hier wichtig!

root@archiso ~ # pacstrap /mnt base base-devel linux-lts linux-firmware lvm2 dosfstools xfsprogs btrfs-progs vi vim openssh sshpass python python-netaddr

Installationsverlauf

In den Mount-Point

  • /mnt und alle darunterliegenden,

werden nachfolgende Paketgruppen bzw. Pakete

  • base - Metapaket für ein minimales System.
  • base-devel - Gruppe für Pakete zum Paketbau (empfohlen).
  • linux-lts - Der Arch Linux (Long Time Support)-Kernel. (Alternativen: linux, linux-hardened)
  • linux-firmware - Firmware für verschiedene Hardware.
  • lvm2 - Einbindung von LVM Volumes
  • dosfstools - Verwaltungsprogramme unter anderem für das Dateisystem: vfat
  • xfsprogs - Verwaltungsprogramme für das Dateisystem: xfs
  • btrfs-progs - Verwaltungsprogramme für das Dateisystem: Btrfs
  • vi - Texteditor für die shell
  • vim - Texteditor für die shell mit Text-Highlighting

installiert.

Optional, aber dringend empfohlen, sind nachfolgende Pakete:

  • openssh - SSH-Server und SSH-Werkzeuge, da sonst kein SSH-Login auf den Server möglich ist.
  • sshpass - SSH-Client ermöglichen, ein Passwort interaktiv abzufragen.
  • python - Programmierumgebung python
  • python-netaddr - Erweiterung der Programmierumgebung python um Netzwerkfähigkeiten

Systemkonfiguration: /mnt

/etc/fstab erstellen

Nachfolgender Befehl erzeugt die Konfigurationsdatei /etc/fstab:

root@archiso ~ # genfstab -Up /mnt > /mnt/etc/fstab

:!: WICHTIG - Nachfolgende Änderungen sind durchzuführen, da sonst NICHT von einem „Snapshot“ gestartet werden kann !!!

Änderungen

  1. Entfernen der subvolid beim Eintrag für das / (root)-Verzeichnis und bei allen Einträgen, welche nicht - subvolid=5 haben - wie z.B. - subvolid=2.., da sonst generell nicht von einem „Snapshot“ gestartet werden kann !!!.

Die Änderungen können durch Aufruf von nachfolgendem Befehl durchgeführt werden:

root@archiso ~ # sed -i 's/subvolid=2..,//g' /mnt/etc/fstab

Der so erzeugte Inhalt, kann mit nachfolgendem Befehl überprüft werden und sollte eine Ausgabe wie die nachfolgende zum Vorschein bringen:

root@archiso ~ # cat /mnt/etc/fstab
# /dev/mapper/archlinux-root LABEL=ROOT
UUID=a7685380-734d-4cd1-b81a-f849011250d9	/         	btrfs     	rw,relatime,compress=zstd:3,space_cache=v2,subvol=/@root	0 1
 
# /dev/vda1
UUID=6D00-20D3      	/boot     	vfat      	rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro	0 2
 
# /dev/mapper/archlinux-tmp LABEL=TMP
UUID=db66e348-0be6-439c-8301-3a13e6554ffd	/tmp      	xfs       	rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota	0 2
 
# /dev/mapper/archlinux-var_log LABEL=VAR_LOG
UUID=bc2b1278-2b8f-427c-8c0d-30483824b56d	/var/log  	xfs       	rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota	0 2
 
# /dev/mapper/archlinux-var_cache LABEL=VAR_CACHE
UUID=b9d00851-f31e-4c47-924b-2c0bada3b416	/var/cache	xfs       	rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota	0 2
 
# /dev/mapper/archlinux-var_spool LABEL=VAR_SPOOL
UUID=96fbee50-398f-4f03-ae8a-e07205bdb850	/var/spool	xfs       	rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota	0 2
 
# /dev/mapper/archlinux-root LABEL=ROOT
UUID=a7685380-734d-4cd1-b81a-f849011250d9	/home     	btrfs     	rw,relatime,compress=zstd:3,space_cache=v2,subvol=/@home	0 2
 
# /dev/mapper/archlinux-root LABEL=ROOT
UUID=a7685380-734d-4cd1-b81a-f849011250d9	/opt      	btrfs     	rw,relatime,compress=zstd:3,space_cache=v2,subvol=/@opt	0 2
 
# /dev/mapper/archlinux-root LABEL=ROOT
UUID=a7685380-734d-4cd1-b81a-f849011250d9	/srv      	btrfs     	rw,relatime,compress=zstd:3,space_cache=v2,subvol=/@srv	0 2
 
# /dev/mapper/archlinux-root LABEL=ROOT
UUID=a7685380-734d-4cd1-b81a-f849011250d9	/usr/local	btrfs     	rw,relatime,compress=zstd:3,space_cache=v2,subvol=/@usr_local	0 2
 
# /dev/mapper/archlinux-root LABEL=ROOT
UUID=a7685380-734d-4cd1-b81a-f849011250d9	/btrfs    	btrfs     	rw,relatime,compress=zstd:3,space_cache=v2,subvolid=5,subvol=/	0 2
 
# /dev/mapper/archlinux-swap LABEL=SWAP
UUID=b9f0f99f-e67d-483c-935c-3bcadc0532ad	none      	swap      	defaults  	0 0

Archlinux: Chroot-Konfiguration

arch-chroot /mnt

Jetzt ist es an der Zeit, in das installierte System zu wechseln und weitere Konfigurationen vorzunehmen, was mit nachfolgendem Befehl durchgeführt werden kann:

root@archiso ~ # arch-chroot /mnt/
[root@archiso /]#

:!: WICHTIG - Der Prompt sollte sich nun auf [root@archiso /]# geändert haben!

/etc/hostname

Nachfolgender Befehl setzt den Hostnamen für den Server:

# echo vmtest > /etc/hostname

/etc/locale.conf

Nachfolgender Befehl setzt die Systemsprache auf English-US Ausprägung UTF-8

(Für Deutsch-DE Ausprägung UTF-8, wäre de_DE.UTF-8 zu setzen!)

# echo LANG=en_US.UTF-8 > /etc/locale.conf

/etc/locale.gen

Nachfolgende Veränderungen der Konfigurationsdatei /etc/locale.gen

  • de_DE.UTF-8 UTF-8
  • de_DE ISO-8859-1
  • de_DE@euro ISO-8859-15
  • en_US.UTF-8 UTF-8
  • en_US ISO-8859-1

setzen die erweiterten Systemsprachenspezifikation auf

  • Deutsch-DE Ausprägung UTF-8 und
  • English-US Ausprägung UTF-8

durch ein kommentieren der entsprechenden Systemsprache.

Nachfolgend soll die Konfigurationsdatei mit dem Text-Editor vim entsprechend abgeändert werden:

[root@archiso /]# vim /etc/locale.gen

Nachfolgender Befehl gibt zur Kontrolle, nur die ein kommentieren Zeilen der Konfigurationsdatei /etc/locale.gen aus:

[root@archiso /]# grep -E -v '(^#|^$)' /etc/locale.gen
de_DE.UTF-8 UTF-8  
de_DE ISO-8859-1  
de_DE@euro ISO-8859-15  
en_US.UTF-8 UTF-8  
en_US ISO-8859-1

Der abschliessende Befehl setzt die Konfiguration dann im System um:

[root@archiso /]# locale-gen
Generating locales...
  de_DE.UTF-8... done
  de_DE.ISO-8859-1... done
  de_DE.ISO-8859-15@euro... done
  en_US.UTF-8... done
  en_US.ISO-8859-1... done
Generation complete.

/etc/vconsole.conf

Nachfolgende Befehle legen das Tastaturlayout:

[root@archiso /]# echo KEYMAP=de-latin1-nodeadkeys > /etc/vconsole.conf

und die Schriftart der shell / console fest:

[root@archiso /]# echo FONT=lat9w-16 >> /etc/vconsole.conf

/etc/localtime

Nachfolgender Befehl legt einen Verweis (Link) auf die zu verwendende Zeitzone, hier Europe/Berlin fest:

[root@archiso /]# ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime

/etc/hosts

Nachfolgende Befehle erstellen die Konfigurationsdatei /etc/hosts und füllen diese mit den Standardeinträgen für localhost aus:

[root@archiso /]# echo -e '#<ip-address>	<hostname.domain.org>	<hostname>' >> /etc/hosts
[root@archiso /]# echo -e '127.0.0.1	localhost.localdomain	localhost' >> /etc/hosts
[root@archiso /]# echo -e '::1		localhost.localdomain	localhost' >> /etc/hosts

:!: HINWEIS - Eine Ausrichtung der einzelnen Zeilen muss ebenfalls durch Verwendung des Texteditors vim durchgeführt werden.

Nachfolgend soll die Konfigurationsdatei mit dem Text-Editor vim entsprechend abgeändert werden:

[root@archiso /]# vim /etc/hosts

Der Inhalt der Konfigurationsdatei /etc/hosts sollte dann wie folgt aussehen:

[root@archiso /]# cat /etc/hosts
# Static table lookup for hostnames.
# See hosts(5) for details.

#<ip-address>   <hostname.domain.org>   <hostname>
127.0.0.1       localhost.localdomain   localhost
::1             localhost.localdomain   localhost

/etc/resolv.conf

:!: HINWEIS - Der Namensserver aus dem LIVE-System sollte bereits vorhanden sein!

Zuerst sollte die Konfigurationsdatei /etc/resolv.conf durch nachfolgenden Befehl überprüft werden, ob diese nicht bereits ausreichend konfiguriert ist:

[root@archiso /]# cat /etc/resolv.conf
# This is /run/systemd/resolve/stub-resolv.conf managed by man:systemd-resolved(8).
# Do not edit.
#
# This file might be symlinked as /etc/resolv.conf. If you're looking at
# /etc/resolv.conf and seeing this text, you have followed the symlink.
#
# This is a dynamic resolv.conf file for connecting local clients to the
# internal DNS stub resolver of systemd-resolved. This file lists all
# configured search domains.
#
# Run "resolvectl status" to see details about the uplink DNS servers
# currently in use.
#
# Third party programs should typically not access this file directly, but only
# through the symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a
# different way, replace this symlink by a static file or a different symlink.
#
# See man:systemd-resolved.service(8) for details about the supported modes of
# operation for /etc/resolv.conf.
 
nameserver 127.0.0.53
options edns0 trust-ad
search .

In der Konfigurationsdatei /etc/resolv.conf können nun weiter sich im Netzwerk verfügbaren Namensserver (mindestens ein Namensserver), oder zusätzliche Namensserver aus dem Internet gesetzt werden, was mit nachfolgenden Befehl durchgeführt werden kann.

[root@archiso /]# echo 'nameserver 192.168.122.1' > /etc/resolv.conf

:!: HINWEIS - Die Wiederholung des nachfolgenden Befehls mit weiteren Namensservern erweitert die Datei entsprechend!

[root@archiso /]# echo 'nameserver 8.8.8.8' >> /etc/resolv.conf
[root@archiso /]# echo 'nameserver 8.8.4.4' >> /etc/resolv.conf

/etc/mkinitcpio.conf

Nachfolgende Ergänzung in der Konfigurationsdatei

  • /etc/mkinitcpio.conf

muss zwingend durchgeführt werden.

Zuerst soll aber eine Sicherungskopie der Konfigurationsdatei /etc/mkinitcpio.conf erstellt werden, was mit nachfolgendem Befehl durchgeführt werden kann:

[root@archiso /]# cp -a /etc/mkinitcpio.conf /etc/mkinitcpio.conf.orig

Anschließend muss das Laden des systembedingten, sogenannten HOOKS wie folgtergänzt werden, was mit nachfolgenden vier Befehlen durchgeführt werden kann:

[root@archiso /]# sed -i 's/MODULES=()/MODULES=(vfat xfs btrfs)/g' /etc/mkinitcpio.conf
[root@archiso /]# sed -i 's/BINARIES=()/BINARIES=(\/usr\/bin\/fsck \/usr\/bin\/fsck\.vfat \/usr\/bin\/fsck\.xfs \/usr\/bin\/fsck\.btrfs \/usr\/bin\/dosfsck \/usr\/bin\/xfs_repair \/usr\/bin\/btrfsck \/usr\/bin\/btrfs)/g' /etc/mkinitcpio.conf
[root@archiso /]# sed -i 's/block\ filesystem/block\ lvm2\ btrfs\ filesystem/g' /etc/mkinitcpio.conf
[root@archiso /]# sed -i 's/keyboard/keymap\ keyboard/g' /etc/mkinitcpio.conf

(Nur relevanter Ausschnitt)

VORHER:

[root@archiso /]# grep -E -v '(^#|^$)' /etc/mkinitcpio.conf
MODULES=()
BINARIES=()
FILES=()
HOOKS=(base udev autodetect modconf block filesystems keyboard fsck)

NACHHER:

[root@archiso /]# grep -E -v '(^#|^$)' /etc/mkinitcpio.conf
MODULES=(vfat xfs btrfs)
BINARIES=(/usr/bin/fsck /usr/bin/fsck.vfat /usr/bin/fsck.xfs /usr/bin/fsck.btrfs /usr/bin/dosfsck /usr/bin/xfs_repair /usr/bin/btrfsck /usr/bin/btrfs)
FILES=()
HOOKS=(base udev autodetect modconf block lvm2 btrfs filesystems keymap keyboard fsck)

Erklärungen

  • MODULES(vfat xfs btrfs)

Wenn es nach einem Neustart Probleme beim Neustart geben sollte, würden damit die KERNEL MODULE für die entsprechenden DATEISYSTEME zur Verfügung stehen.

  • BINARIES=(/usr/bin/fsck /usr/bin/fsck.vfat /usr/bin/fsck.xfs /usr/bin/fsck.btrfs /usr/bin/dosfsck /usr/bin/xfs_repair /usr/bin/btrfsck /usr/bin/btrfs)

Wenn es nach einem Neustart Probleme beim Neustart geben sollte, würden damit die TOOLS zur Verwaltung der DATEISYSTEME zur Verfügung stehen.

  • HOOKS=(base udev autodetect modconf block btrfs filesystems keymap keyboard)

Nachfolgend wurde die HOOKs

  1. lvm2 - (vor filesystem)
  2. btrfs - (vor filesystem)
  3. keymap - (vor keyboard)

hinzugefügt und dafür am Ende der Zeile der HOOK:

  1. fsck

entfernt.

:!: WICHTIG - Das hinzufügen des HOOKs lvm2 ist sehr wichtig, da sonst das LVM nicht genutzt werden kann und der Start von der Festplatte von ArchLinux fehl schlägt!

:!: WICHTIG - Das hinzufügen des HOOKs btrfs ist sehr wichtig, da sonst das Btrfs z.B. mit einer RAID-Konfiguration nicht genutzt werden kann und der Start von der Festplatte von ArchLinux fehl schlägt!

:!: HINWEIS - Das hinzufügen des HOOKs keymap ist kann hilfreich sein, da bei Problemen beim Neustart von ArchLinux weitere Tastaturlayouts zur Verfügung stehen und nicht nur das Tastaturlayout „US-English“.

:!: HINWEIS - Bei den verwendeten Dateisystemen, swap und btrfs gibt es keinen file system check (fsck), deswegen kann hier auf fsck verzichtet werden!

initramfs: mkinitcpio

Durch den nachfolgenden Befehl wird die initramfs-Erstellung durchgeführt:

[root@archiso /]# mkinitcpio -p linux-lts
==> Building image from preset: /etc/mkinitcpio.d/linux-lts.preset: 'default'
  -> -k /boot/vmlinuz-linux-lts -c /etc/mkinitcpio.conf -g /boot/initramfs-linux-lts.img
==> Starting build: 5.15.77-1-lts
  -> Running build hook: [base]
  -> Running build hook: [udev]
  -> Running build hook: [autodetect]
  -> Running build hook: [modconf]
  -> Running build hook: [block]
==> WARNING: Possibly missing firmware for module: xhci_pci
  -> Running build hook: [lvm2]
  -> Running build hook: [btrfs]
  -> Running build hook: [filesystems]
  -> Running build hook: [keymap]
  -> Running build hook: [keyboard]
  -> Running build hook: [fsck]
==> Generating module dependencies
==> Creating zstd-compressed initcpio image: /boot/initramfs-linux-lts.img
==> Image generation successful
==> Building image from preset: /etc/mkinitcpio.d/linux-lts.preset: 'fallback'
  -> -k /boot/vmlinuz-linux-lts -c /etc/mkinitcpio.conf -g /boot/initramfs-linux-lts-fallback.img -S autodetect
==> Starting build: 5.15.77-1-lts
  -> Running build hook: [base]
  -> Running build hook: [udev]
  -> Running build hook: [modconf]
  -> Running build hook: [block]
==> WARNING: Possibly missing firmware for module: aic94xx
==> WARNING: Possibly missing firmware for module: bfa
==> WARNING: Possibly missing firmware for module: qed
==> WARNING: Possibly missing firmware for module: qla1280
==> WARNING: Possibly missing firmware for module: qla2xxx
==> WARNING: Possibly missing firmware for module: wd719x
==> WARNING: Possibly missing firmware for module: xhci_pci
  -> Running build hook: [lvm2]
  -> Running build hook: [btrfs]
  -> Running build hook: [filesystems]
  -> Running build hook: [keymap]
  -> Running build hook: [keyboard]
  -> Running build hook: [fsck]
==> Generating module dependencies
==> Creating zstd-compressed initcpio image: /boot/initramfs-linux-lts-fallback.img
==> Image generation successful

Bootloader: GRUB

Zum Start des Servers ist ein sogenannter „Bootloader“ erforderlich. Hier soll der „Bootloader“

  • GRUB

installiert werden, was mit nachfolgendem Befehl durchgeführt werden soll:

[root@archiso /]# pacman -S grub efibootmgr --noconfirm

Installationsverlauf

Anschliessend ist es erforderlich ein Verzeichnis für die UEFI-Boot Dateien mit nachfolgendem Befehl zu erstellen:

[root@archiso /]# mkdir /boot/EFI

Anschliessend ist die Konfiguration von GRUB für das Starten von der ersten Partition einzurichten, was mit nachfolgendem Befehl durchgeführt werden kann:

[root@archiso /]# grub-install --target=x86_64-efi --efi-directory=boot --bootloader-id=GRUB
Installing for x86_64-efi platform.
Installation finished. No error reported.

Mit nachfolgenden Befehlen kann überprüft werden, ob die Installation von GRUB als Boot-Loader erfolgreich war und ein entsprechendes Verzeichnis und eine entsprechende EFI-Boot Datei angelegt wurde:

[root@archiso /]# [root@archiso /]# ls -la /boot/EFI/
total 12
drwxr-xr-x 3 root root 4096 Nov  6 18:25 .
drwxr-xr-x 4 root root 4096 Jan  1  1970 ..
drwxr-xr-x 2 root root 4096 Nov  6 18:25 GRUB
[root@archiso /]# ls -la /boot/EFI/*
total 156
drwxr-xr-x 2 root root   4096 Nov  6 18:25 .
drwxr-xr-x 3 root root   4096 Nov  6 18:25 ..
-rwxr-xr-x 1 root root 151552 Nov  6 18:25 grubx64.efi

Jetzt können nachfolgende Anpassungen an der Konfigurationsdatei von GRUB - /etc/default/grub mit nachfolgenden Befehlen durchgeführt werden:

[root@archiso /]# sed -i 's/quiet/net\.ifnames=0/g' /etc/default/grub
[root@archiso /]# sed -i 's/part_msdos/part_msdos\ lvm/g' /etc/default/grub
[root@archiso /]# sed -i 's/GRUB_GFXMODE=auto/# Tachtler\n# default: GRUB_GFXMODE=auto\nGRUB_GFXMODE=1024x768/g' /etc/default/grub

Vorher:

[root@archiso /]# grep -E -v '(^#|^$)' /etc/default/grub
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="Arch"
GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet"
GRUB_CMDLINE_LINUX=""
GRUB_PRELOAD_MODULES="part_gpt part_msdos"
GRUB_TIMEOUT_STYLE=menu
GRUB_TERMINAL_INPUT=console
GRUB_GFXMODE=auto
GRUB_GFXPAYLOAD_LINUX=keep
GRUB_DISABLE_RECOVERY=true

Nachher

[root@archiso /]# grep -E -v '(^#|^$)' /etc/default/grub
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="Arch"
GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 net.ifnames=0"
GRUB_CMDLINE_LINUX=""
GRUB_PRELOAD_MODULES="part_gpt part_msdos lvm"
GRUB_TIMEOUT_STYLE=menu
GRUB_TERMINAL_INPUT=console
GRUB_GFXMODE=1024x768
GRUB_GFXPAYLOAD_LINUX=keep
GRUB_DISABLE_RECOVERY=true

Erklärung:

  • GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 net.ifnames=0"

Damit Meldungen des systemd-Dienstes/Daemon zu sehen sind, muss der Parameter quit entfernt werden und der Parameter net.ifnames=0 hinzugefügt werden. Der Paramater net.ifnames=0 sorgt dafür, das als Bezeichner bei Netzwerkkarten wieder die Notation ethX (Das X steht für eine Zahl) verwendet wird!

  • GRUB_PRELOAD_MODULES="part_gpt part_msdos lvm"

Zusätzliches laden des Moduls lvm, damit bei einem Problem beim Starten auch bei den Partitionen mit LVM eine Fehlersuche durchgeführt werden kann.

  • GRUB_GFXMODE=1024x768

Bildschirmauflösung des GRUB Startbildschirms festlegen.

Abschliessend muss noch die GRUB-Konfiguration generiert werden, was mit nachfolgendem Befehl durchgeführt werden kann:

[root@archiso /]# grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-linux-lts
Found initrd image: /boot/initramfs-linux-lts.img
Found fallback initrd image(s) in /boot:  initramfs-linux-lts-fallback.img
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
Adding boot menu entry for UEFI Firmware Settings ...
done

Passwort: root

Es ist sinnvoll, dass der Benutzer root im „permanenten“-System ein Passwort besitzt, was mit nachfolgendem Befehl gesetzt werden kann:

[root@archiso /]# passwd
New password: 
Retype new password: 
passwd: password updated successfully

Das Passwort ist in der shell hinter New password: einzugeben und mit der [Return/Enter]-Taste zu bestätigen. Anschließend ist in der shell hinter Retype new password: das gleiche Passwort erneut einzugeben und ebenfalls mit der [Return/Enter]-Taste zu bestätigen.

Neustart

Wenn alle Konfigurationen durchgeführt sind, kann nun das installierte ArchLinux mit nachfolgendem Befehl verlassen werden:

# exit
exit
arch-chroot /mnt/  12.59s user 2.20s system 0% cpu 1:40:38.73 total

:!: WICHTIG - Der Prompt sollte sich nun wieder auf root@archiso ~ # geändert haben!

Der eigentliche Neustart wird dann mit nachfolgendem Befehl durchgeführt:

root@archiso ~ # systemctl reboot

Hinweise

Nach dem erfolgreichen ersten Start des Servers sind die folgenden Gegebenheiten zu beachten:

  1. Es gibt KEINE Benutzer die sich anmelden können, ausser der Benutzer root!
  2. Es steht KEINE Netzwerkanbindung zur Verfügung!
  3. Es stehen KEINE Dienste/Daemons (bis auf den getty@.service) zur Verfügung, auch der SSH-Dienst/Daemon nicht!

Basiskonfiguration

Um ArchLinux nach der Installation wie oben bzw. unter nachfolgenden internen Link:

beschrieben, grundsätzlich in Betrieb nehmen zu können, soll exemplarisch nachfolgende Basiskonfiguration mindestens durchgeführt werden:

  1. Konfiguration des Netzwerks unter Verwendung und Start durch z.B. des systemd-Dienstes/Daemons.
  2. Konfiguration und Start des SSH-Dienstes/Daemons mit einer Basiskonfiguration
    1. Zugriff vorübergehend durch den Benutzer root mit Password-Authentifikation
  3. Komfortkonfiguration für den Benutzer root für die Verwendung der shell
    1. .bash_profile
    2. .bashrc
    3. .vimrc

Netzwerk: systemd

Damit beim Start oder Neustart des Servers gleich eine Netzwerkverbindung mit gestartet wird, soll das sich bereits auf dem Server befindliche systemd-Startsystem genutzt werden.

Dazu ist es erfordelrich, das für die jeweilige Netzwerkkarte unter Einbeziehung der Bezeichnung der Netzwerkkarte jeweils eine entsprechende Konfigurationsdatei angelegt wird.

Dazu soll zuerst mit nachfolgendem Befehl ermittelt werden, welche Netwzerkkarten auf dem Server vorhanden sind und welche Bezeichnung diese haben:

[root@vmtest ~]# 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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 52:54:12:34:56:78 brd ff:ff:ff:ff:ff:ff
    altname enp1s0

* Hier ist nur eine Netzwerkkarte mit der Bezeichnung eth0 vorhanden, welche nicht aktiv ist.

Zur Konfiguration der Netzwerkkarte mit der Bezeichnung eth0, muss eine neue Konfigurationsdatei in nachfolgendem Verzeichnis und mit nachfolgendem Namen angelegt werden:

  • /etc/systemd/network/eth0.network
[root@vmtest ~]# vim /etc/systemd/network/eth0.network

Der Inhalt der Konfigurationsdatei könnte dann wie folgt aussehen:

[Match]
Name=eth0
 
[Network]
Address=192.168.122.22/24
Gateway=192.168.122.1
DNS=192.168.122.1
 
Address=fd00::22/64
Gateway=fd00::1
DNS=fd00::1
 
Address=fe80::22/64
LinkLocalAddressing=no

:!: HINWEIS - In der ipv6-Konfiguration wurde das automatische beziehen einer ipv6-Adresse für die LinkLocal-Adresse deaktiviert, um eine eigene LinkLocal-Adresse setzen zu können!

Anschliessend sollte noch mit nachfolgendem Befehl überprüft werden, ob eine anderer Dienst/Daemon sich für den Start der Netzwerkkarte zuständig fühlt:

[root@vmtest ~]# systemctl list-unit-files | grep netctl

und

[root@vmtest ~]# systemctl list-unit-files | grep dhcpcd

:!: HINWEIS - Falls hier ein Treffer erzielt wird, sollte der Dienst/Daemon

  1. gestoppt und
  2. deaktiviert

werden, was mit nachfolgenden Befehlen erfolgen könnte:

[root@vmtest ~]# systemctl stop netctl@eth0.service

und

[root@vmtest ~]# systemctl disable netctl@eth0.service

bzw.

[root@vmtest ~]# systemctl stop dhcpcd.service

und

[root@vmtest ~]# systemctl disable dhcpcd.service

Damit nun der systemd-Dienst/Daemon das Starten der Netzwerkkarte und dessen Konfiguration übernimmt, ist es erforderlich dass der systemd-networkd-Dienst/Dameon

  1. aktiviert und
  2. gestartet

wird, was mit nachfolgenden Befehlen durchgeführt werden kann:

[root@vmtest ~]# systemctl enable systemd-networkd.service
Created symlink /etc/systemd/system/dbus-org-freedesktop.network1.service → /usr/lib/systemd/system/systemd-networkd.service.
Created symlink /etc/systemd/system/multi-user.target.wants/systemd-networkd.socket → /usr/lib/systemd/system/systemd-networkd.service.
Created symlink /etc/systemd/system/sockets.target.wants/systemd-networkd.socket → /usr/lib/systemd/system/systemd-networkd.socket.
Created symlink /etc/systemd/system/sysinit.target.wants/systemd-network-generator.service → /usr/lib/systemd/system/systemd-network-generator.service 
Created symlink /etc/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service → /usr/lib/systemd/system/systemd-network-wait-online.service.

und

[root@vmtest ~]# systemctl start systemd-networkd.service

Nachfolgender Befehl überprüft nun, ob der Start des systemd-networkd-Dienst/Dameon erfolgreich durchgeführt werden konnte, was eine Ausgabe in etwa wie nachfolgende zur Anzeige bringen sollte:

[root@vmtest ~]# systemctl status systemd-networkd.service
? systemd-networkd.service - Network Configuration
     Loaded: loaded (/usr/lib/systemd/system/systemd-networkd.service: enabled: preset enabled)
     Active: active (running) since Fri 2022-11-11 19:16:37 CET; 2s ago
TriggeredBy: ? systemd-networkd.socket
       Docs: man:systemd-networkd.service(8)
   Main PID: 500 (systemd-network)
     Status: "Processing requests..."
      Tasks: 1 (limnit: 2315)
     Memory: 1.5M
        CPU: 36ms
     CGroup: /system.slice/systemd-networkd.service
             └─500 /usr/lib/systemd/systemd-networkd
             
Nov 11 19:16:36 vmtest systemd[1]: Starting Network Configuration...
Nov 11 19:16:37 vmtest systemd-networkd[500]: eth0: Link Up
Nov 11 19:16:37 vmtest systemd-networkd[500]: eth0: Gained carrier
Nov 11 19:16:37 vmtest systemd-networkd[500]: lo: Link Up
Nov 11 19:16:37 vmtest systemd-networkd[500]: lo: Gained carrier
Nov 11 19:16:37 vmtest systemd-networkd[500]: eth0: Gained IPv6LL
Nov 11 19:16:37 vmtest systemd-networkd[500]: Enummeration completed
Nov 11 19:16:37 vmtest systemd-networkd[500]: eth0: Configuring with /etc/systemd/network/eth0.network
Nov 11 19:16:37 vmtest systemd[1} Started Network configuration
Nov 11 19:16:38 vmtest systemd-networkd[500]: eth0: Gained IPv6LL

Ein Überprüfung, ob die IPv4-Netzwerkadresse für die Netzwerkkarte mit der Bezeichnung eth0 gesetzt wurde, kann mit nachfolgendem Befehl erfolgen:

[root@vmtest ~]# 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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:12:34:56:78 brd ff:ff:ff:ff:ff:ff
    altname enp1s0
    inet 192.168.122.22/24 brd 192.168.122.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fd00::22/64 scope link 
       valid_lft forever preferred_lft forever
    inet6 fe80::22/64 scope link 
       valid_lft forever preferred_lft forever

Eine Überprüfung mit nachfolgendem Befehl zeigt die aktuellen Routen, inklusive der default-Routen an:

root@vmtest ~ # ip ro
default via 192.168.122.1 dev eth0 proto static
192.168.122.0/24 dev eth0 proto kernel scope link src 192.168.122.22

Abschliessend sollte die Konfigurationsdatei /etc/resolv.conf durch nachfolgenden Befehl überprüft werden:

[root@vmtest /]# cat /etc/resolv.conf
# Resolver configuration file.
# See resolv.conf(5) for details.

In der Konfigurationsdatei /etc/resolv.conf müssen nun die sich im Netzwerk verfügbaren Namensserver (mindestens ein Namensserver), oder zusätzliche Namensserver aus dem Internet gesetzt werden, was z.B. mit nachfolgenden Befehl durchgeführt werden kann.

:!: HINWEIS - Die Wiederholung des Befehls mit weiteren Namensservern erweitert die Datei entsprechend!

[root@vmtest /]# echo 'nameserver 192.168.122.1' >> /etc/resolv.conf

Die Konfigurationsdatei /etc/resolv.conf sollte dann einen Inhalt wie folgt aufweisen:

[root@vmtest /]# cat /etc/resolv.conf
# Resolver configuration file.
# See resolv.conf(5) for details.
nameserver 192.168.122.1

Eine Überprüfung, ob die Netzwerkverbindung und auch die DNS-Namensauflösung funktionsfähig ist, kann mit nachfolgenden Befehlen überprüft werden:

IPv4:

[root@vmtest /]# ping -4c3 google.de
PING google.de (142.250.186.163) 56(84) bytes of data.
64 bytes from fra24s08-in-f3.1e100.net (142.250.186.163): icmp_seq=1 ttl=117 time=12.1 ms
64 bytes from fra24s08-in-f3.1e100.net (142.250.186.163): icmp_seq=2 ttl=117 time=19.9 ms
64 bytes from fra24s08-in-f3.1e100.net (142.250.186.163): icmp_seq=3 ttl=117 time=40.6 ms

--- google.de ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 12.050/24.196/40.635/12.057 ms

IPv6(Nur ping auf das eigene Interface):

:!: HINWEIS - Beim Befehl ping für die LinkLocal-Adresse muss ein Network-Device (Netzwerkkarte) mit angegeben werden, wie nachfolgendes Beispiel zeigt:

[root@vmtest ~]# ping -c 3 fe80::22%eth0
PING fe80::250%eth0(fe80::250%eth0) 56 data bytes
64 bytes from fe80::22%eth0: icmp_seq=1 ttl=64 time=0.061 ms
64 bytes from fe80::22%eth0: icmp_seq=2 ttl=64 time=0.021 ms
64 bytes from fe80::22%eth0: icmp_seq=3 ttl=64 time=0.022 ms

--- fe80::22%eth0 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2026ms
rtt min/avg/max/mdev = 0.021/0.034/0.061/0.018 ms

SSH-Dienst/Deamon einrichten

Um den SSH-Dienst/Deamon als Hintergrundprozesse auch nach einem Neustart des Servers zur Verfügung zu haben, soll der Dienste/Daemons mit dem Server mit gestartet werden, was mit nachfolgenden Befehlen realisiert werden kann:

[root@vmtest ~]# systemctl enable sshd.service
Created symlink /etc/systemd/system/multi-user.target.wants/sshd.service → /usr/lib/systemd/system/sshd.service.

Eine Überprüfung, ob beim Neustart des Server der sshd-Dienst/Deamon wirklich mit gestartet wird, kann mit nachfolgendem Befehl erfolgen und sollte eine Anzeige, wie ebenfalls nachfolgend dargestellt ausgeben:

[root@vmtest ~]# systemctl list-unit-files --type=service | grep -E ^sshd
sshd.service                         enabled disabled

bzw.

[root@vmtest ~]# systemctl is-enabled sshd.service
enabled

Abschliessend soll noch die Anmeldung via Passwort - vorübergehend während der Konfigurationsphase für den Benutzer root aktiviert werden.

Dazu soll mit nachfolgendem Befehl eine Sicherungskopie der originalen Konfigurationsdatei

  • /etc/ssh/sshd_config

mit dem Namen

  • /etc/ssh/sshd_config.orig

ersteltl werden:

[root@vmtest ~]# cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.orig

Anschliessend soll nachfolgende Konfiguration in der Konfigurationsdatei /etc/ssh/sshd_config ein kommentiert bzw. ein kommentiert und angepasst werden:

[root@vmtest ~]# vim /etc/ssh/sshd_config

(Nur relevanter Ausschnitt:)

PasswordAuthentication yes

(Nur relevanter Ausschnitt:)

PermitRootLogin yes

Abschließend kann der SSH-Dienst/Daemon - sshd.service mit nachfolgendem Befehl gestartet werden:

[root@vmtest ~]# systemctl start sshd.service

Eine Überprüfung ob der SSH-Dienst/Daemon auch ordnungsgemäss gestartet wurde, kann durch ausführen des nachfolgenden Befehls durchgeführt werden und sollte eine Ausgabe in etwa wie nachfolgende zur Folge haben:

[root@vmtest ~]# systemctl status sshd.service
● sshd.service - OpenSSH Daemon
     Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: disabled)
     Active: active (running) since Fri 2022-11-11 09:57:06 CET; 3min 31s ago
   Main PID: 541 (sshd)
      Tasks: 1 (limit: 2315)
     Memory: 3.5M
        CPU: 70ms
     CGroup: /system.slice/sshd.service
             └─541 "sshd: /usr/bin/sshd -D [listener] 0 of 10-100 startups"

Nov 11 19:57:06 vmtest systemd[1]: Started OpenSSH Daemon.
Nov 11 19:57:06 vmtest sshd[541]: Server listening on 0.0.0.0 port 22.
Nov 11 19:57:06 vmtest sshd[541]: Server listening on :: port 22.

Anschliessend kann noch einmal die IP-Adresse des Servers in Erfahrung gebracht werden, damit eine Verbindung zum Server hergestellt werden kann. Dies kann durch Ausführung des nachfolgenden Befehls erfolgen:

[root@vmtest ~]# 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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:12:34:56:78 brd ff:ff:ff:ff:ff:ff
    altname enp1s0
    inet 192.168.122.22/24 brd 192.168.122.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fd00::22/64 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::22/64 scope link 
       valid_lft forever preferred_lft forever

:!: BEISPIEL - Die IP-Adresse des Servers aus oben genanntem Beispiel wäre hier: 192.168.122.22.

Jetzt kann eine erste Verbindung als Benutzer root via SSH-Login auf den Server hergestellt werden. Nachfolgender Befehl soll dazu auf einer lokalen Workstation, nicht auf dem Server verwendet werden:

[klaus@workstation ~]$ ssh -t -2 -p 22 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@192.168.122.22
Warning: Permanently added '192.168.122.22' (ED25519) to the list of known hosts.
root@192.168.122.22's password: 
Last login: Sat Nov 12 07:17:49 2022

~/.bash_logout

Damit die Konfigurationsdatei ~/.bash_logout auch angezogen wird, ist nachfolgende Konfigurationsdatei

  • ~/.bash_logout

falls nicht schon vorhanden, wie folgt aus einem „Skeleton“ zu kopieren:

[root@vmtest ~]# cp -a /etc/skel/.bash_logout ~/.bash_logout

Der Inhalt der Konfigurationsdatei sollte in etwa wie folgt aussehen und kann mit nachfolgendem Befehl zur Anzeige gebracht werden:

[root@vmtest ~]# cat ~/.bash_logout 
#
# ~/.bash_logout
#

~/.bash_profile

Damit die Konfigurationsdatei ~/.bashrc auch angezogen wird, ist nachfolgende Konfigurationsdatei

  • ~/.bash_profile

falls nicht schon vorhanden, wie folgt aus einem „Skeleton“ zu kopieren:

[root@vmtest ~]# cp -a /etc/skel/.bash_profile ~/.bash_profile

Der Inhalt der Konfigurationsdatei sollte in etwa wie folgt aussehen und kann mit nachfolgendem Befehl zur Anzeige gebracht werden:

[root@vmtest ~]# cat ~/.bash_profile
#
# ~/.bash_profile
#
 
[[ -f ~/.bashrc ]] && . ~/.bashrc

~/.bashrc

Wer z.B. Nutzer von CentOS ist, hat evtl. den Befehl ll lieb gewonnen, welcher eigentlich nur ein Alias für den Befehl

  • ls -l –color=auto

ist.

Um sicher zu stellen, dass die Konfigurationsdatei

  • ~/.bashrc

auch vorhanden ist, ist diese, falls nicht schon vorhanden, wie folgt aus einem „Skeleton“ zu kopieren:

[root@vmtest ~]# cp -a /etc/skel/.bashrc ~/.bashrc

Der Inhalt der Konfigurationsdatei sollte in etwa wie folgt aussehen und kann mit nachfolgendem Befehl zur Anzeige gebracht werden:

[root@vmtest ~]# cat ~/.bashrc
#
# ~/.bashrc
#
 
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
 
alias ls='ls --color=auto'
PS1='[\u@\h \W]\$ '

Um auf dieser „Annehmlichkeit“ auch unter ArchLinux nicht verzichten zu müssen, kann in nachfolgendem Verzeichnis die vorhandene Konfigurationsdatei mit nachfolgendem Namen ergänzt werden:

  • ~/.bashrc

Der Inhalt, könnte dann wie folgt aussehen:

[root@vmtest ~]# vim ~/.bashrc
#
# ~/.bashrc
#
 
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
 
# Tachtler
# default: alias ls='ls --color=auto'
# alias ls='ls --color=auto'
PS1='[\u@\h \W]\$ '
 
# Tachtler - NEW - 
alias ll='ls -l --color=auto' 2>/dev/null
alias l.='ls -d .* --color=auto' 2>/dev/null
alias ls='ls --color=auto' 2>/dev/null
alias diff='diff --color=auto' 2>/dev/null
alias grep='grep --color=auto' 2>/dev/null
alias fgrep='fgrep --color=auto' 2>/dev/null
alias egrep='egrep --color=auto' 2>/dev/null
alias ip='ip -color=auto' 2>/dev/null
alias tree='tree -Ca' 2>/dev/null
alias mv='mv -i' 2>/dev/null
alias cp='cp -i' 2>/dev/null
alias ln='ln -i' 2>/dev/null
alias chown='chown --preserve-root' 2>/dev/null
alias chmod='chmod --preserve-root' 2>/dev/null
alias chgrp='chgrp --preserve-root' 2>/dev/null
alias mount='mount |column -t' 2>/dev/null

:!: HINWEIS - Nach der Beendigung z.B. eines shell-Fensters und dem Neustart von einem shell-Fenster, stehen die neue Funktionalitäten zur Verfügung!

~/.vimrc

Wer z.B. Nutzer von CentOS ist, hat evtl. die Möglichkeit mit der Computer-Mouse/Maus Texte markieren zu können, ohne in den –VISIBLE– Modus zu wechseln und ein paar andere Einstellungen lieb gewonnen.

Um auf diese und weitere „Annehmlichkeit“ auch unter ArchLinux nicht verzichten zu müssen, kann in nachfolgendem Verzeichnis die vorhandene Konfigurationsdatei mit nachfolgendem Namen neu angelegt oder ergänzt werden:

  • ~/.vimrc

Der Inhalt, welcher hier an z.B. CentOS angelehnt ist, könnte dann wie folgt aussehen:

[root@vmtest ~]# vim ~/.vimrc
[root@vmtest ~]# vim ~/.vimrc
" ##############################################################################
" Einrueckungs-Optionen
" ##############################################################################
" Neue Zeilen übernehmen die Einrueckung der vorherigen Zeilen.
set autoindent
" Tabulatoren in Leerzeichen umwandeln.
set expandtab
" Beim Verschieben von Zeilen wird die Einrueckung auf das naechste Vielfache
" von shiftwidth gerundet.
set shiftround
" Beim Verschieben wird mit Leerzeichen eingerueckt.
set shiftwidth=8
" Beim Druecken der Tabulatortaste die Anzahl der Leerzeichen tabstop einfuegen.
set smarttab
" Einruecken mit Leerzeichen.
set tabstop=8
 
" ##############################################################################
" Such-Optionen
" ##############################################################################
" Suchhervorhebung einschalten.
set hlsearch
" Gross- und Kleinschreibung bei der Suche ignorieren.
set ignorecase
" Inkrementelle Suche, die Teiltreffer anzeigt.
set incsearch
" Automatische Umstellung der Suche auf Gross- und Kleinschreibung, wenn die
"  Suchanfrage einen Großbuchstaben enthaelt.
set smartcase
 
" ##############################################################################
" Leistungs-Optionen
" ##############################################################################
" Begrenzt die Dateien, die nach automatischen Vervollstaendigungen durchsucht
"  werden. 
set complete-=i
" Den Bildschirm waehrend der Ausführung von Makros und Skripten nicht
" aktualisieren.
set lazyredraw
 
" ##############################################################################
" Optionen für die Textanzeige
" ##############################################################################
" Es wird immer versucht, die letzte Zeile eines Absatzes anzuzeigen.
set display+=lastline
" Verwendet eine Kodierung, die Unicode unterstuetzt.
set encoding=utf-8
" Vermeidet einen Zeilenumbruch in der Mitte eines Wortes.
set linebreak
" Die Anzahl der Bildschirmzeilen, die ueber/unter dem Cursor bleiben sollen.
set scrolloff=1
" Die Anzahl der Bildschirmspalten, die links/rechts vom Cursor beibehalten
" werden sollen.
set sidescrolloff=5
" Aktiviert die Syntaxhervorhebung.
syntax enable
" Zeilenumbruch einschalten.
set wrap
 
" ##############################################################################
" Optionen der Benutzeroberfläche
" ##############################################################################
" Zeigt immer die Statusleiste an.
set laststatus=2
" Zeigt immer die Cursorposition an.
set ruler
" Zeigt die Optionen der Befehlszeile für die Registerkarten als Menue an.
set wildmenu
" Maximale Anzahl von Registerkarten, die über die Kommandozeile geoeffnet
" werden koennen.
set tabpagemax=50
" Markiert die Zeile, die sich gerade unter dem Cursor befindet.
set cursorline
" Markiert die Spalte, die sich gerade unter dem Cursor befindet.
"set cursorcolumn
" Zeigt Zeilennummern in der Seitenleiste an.
set number
" Zeigt die Zeilennummer in der aktuellen Zeile und die relativen Nummern in
" allen anderen Zeilen an.
"set relativenumber
" Signalton bei Fehlern abschalten.
set noerrorbells
" Blinken des Bildschirms anstelle des Signaltons bei Fehlern.
" set visualbell
" Aktiviere die Maus zum Scrollen und Aendern der Groeße.
set mouse-=a
" Legt den Titel des Fensters fest, der die aktuell bearbeitete Datei 
" widerspiegelt.
set title
" Verwenden Sie Farben, die zu einem hellen Hintergrund passen.
set background=light
 
" ##############################################################################
" Optionen zur Code-Formatierung
" ##############################################################################
" Formatieren auf der Grundlage von Einrueckungsebenen.
set foldmethod=indent
" Nur bis zu drei verschachtelte Ebenen Formatieren.
set foldnestmax=3
" Deaktiviert die Formatierung standardmaeßig.
set nofoldenable
 
" ##############################################################################
" Sonstige Optionen
" ##############################################################################
" Liest Dateien automatisch neu ein, wenn sie in Vim nicht veraendert wurden.
set autoread
" Erlaubt Rueckschritt über Einrueckung, Zeilenumbruch und Einfuegebeginn.
set backspace=indent,eol,start
" Verzeichnis zum Speichern von Sicherungsdateien.
set backupdir=~/.cache/vim
" Zeigt einen Bestaetigungsdialog an, wenn eine ungesicherte Datei geschlossen
" wird.
set confirm
" Verzeichnis zum Speichern von Auslagerungsdateien.
set dir=~/.cache/vim
" Erhoeht das Undo-Limit.
set history=1000

:!: HINWEIS - Die einzelnen Erklärungen sind jeweils bei den Änderungen in der Konfigurationstatei beschrieben.

Problembehandlung

IPv6 DAD - tentative

Falls nach Inbetriebnahme von IPv6-Adressen, diese nach einem Neustart z.B. nicht an den SSH-Daemon/Dienst gebunden werden können, kann dies an der DAD (Duplicate Address Detection) liegen.

Bei aktivieren von IPv6-Adressen wird überprüft, ob diese Adressen bereits im Netzwerk gefunden werden können und somit nicht eindeutig sind, was dann eine Deaktivierung zur folge hätte. Solange diese Prüfung nicht abgeschlossen ist, befinden sich die ipv6-Adressen in einem Zustand der als „tentative“ (vorläufig, provisorisch) ist.

Solange die IPv6 Adressen sich im Zustand „tentative“ (vorläufig, provisorisch) befinden, kann sich kein Dienst an diese ipv6 Adressen binden.

:!: ACHTUNG - Die Lösung des Problems kann darin liegen, die Prüfung DAD (Duplicate Address Detection) zu deaktivieren.

Dazu soll nachfolgende Konfigurationsdatei in nachfolgendem Verzeichnis mit nachfolgendem Namen neu erstellt werden:

  • /etc/sysctl.d/40-ipv6dad.conf

Der Inhalt dieser Datei kann wie folgt aussehen und deaktiviert für jedes Netzwerk-Interface die DAD (Duplicate Address Detection):

[root@vmtest ~]# vim /etc/sysctl.d/40-ipv6dad.conf
[root@vmtest ~]# vim /etc/sysctl.d/40-ipv6dad.conf
net.ipv6.conf.eth0.accept_dad = 0

snapper

Nachfolgender interner Link führt zur Installation und Konfiguration von snapper

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
tachtler/archlinux_-_minimal_server_installation_-_uefi-boot_grub2_lvm_mit_btrfs_mit_snapper_und_xfs.txt · Zuletzt geändert: 2023/05/10 11:18 von klaus