Linux Arch für eine VM oder native Installation via USB-Stick

Grundvoraussetzung zur Installation ist ein ISO-File der aktuellen Version von Arch Linux (archlinux.org/download).

Virtualbox - Einstellungen:

Hauptspeicherr: 1024 MB, 2 Prozessoren (reicht auch einer), Grafikspeicher: 25 MB, Festplattengröße 20 GB;

Das ISO wird als optisches Laufwerk (Controller IDE) eingebunden, z.B. archlinux-2023.11.01-x86_64.iso; anschließend wird diese Maschine gestartet.

Zum Einschalten der deutschsprachigen Tastatur (vorerst ist das y auf der Tastatur das z, und auch der Bindestrich - ist beim scharfen ß (scharfes s) zu finden, auch die Umlauttasten sind anders belegt.

root@archiso ~ # loadkeys de-latin1

Um auch die sogenannten toten Tasten loszuwerden hängt man stattdessen ein nodeadkeys an, in unserem Fall, wenn man das System nur als Server und zum Programmieren braucht ist das vorteilhafter:

root@archiso ~ # loadkeys de-latin1-nodeadkeys

Testen der Netzwerkverbindung

Mit dem Kommando

root@archiso ~ # ip link

kann überprüft werden, ob das Netzwerkinterface funktioniert.

Partitionierung der Festplatte

root@archiso ~ # fdisk -l

Bei einer VM (VirtualBox) ist das Laufwerk meist als /dev/sda konfiguriert. Im Weiterem verwenden wir dies als Laufwerksgerät bei den folgenden Befehlen (entsprechend umtauschen wenn z.B. ein /dev/nvme0n1 für eine SSD erscheint).

root@archiso ~ # fdisk /dev/sda

Jetzt kann dieses Laufwerk partitioniert werden. Wir verwenden ein einfaches Schema, ohne viel Aufwand:

BIOS mit MBR

Einhängepunkt Partition Typ der Partition Vorgeschlagene Größe
[SWAP] /dev/swap_partition Linux swap 1024 MiB
/mnt /dev/root_partition Linux alles übrige der 20 GiB-Platte

Innerhalb des Programms fdisk: eine MBR(DOS) Partitionstabelle erstellt und eine neue Partition erstellt:

  • o … create a new empty MBR(DOS) partition table,
  • n … add a new partition (Neue primäre Partition mit der Nummer 1 und ab dem 2048. Sektor mit 1024MiB Größe)
    • p … primary
    • 1 … partition number
    • 2048 … first sector
    • +1024M … size 1024MiB
  • n … add a new partition (Neue primäre Partition mit der Nummer 2 und dem Rest), einfach durchklicken.

Die beiden erstellen Partitionen sind typischerweise jetzt Linux Partitionen. Die erste müssen wir noch in eine "Linux swap"-Partition ändern mit:

  • t … change the partition type
    • 1
    • 82

Bootflag setzen für Partition Nr. 2:

  • a … toggle a bootable flagm
    • 2

Mit dem Kommando p können wir uns die Partitionstabelle vor dem eigentlichen Erstellen ansehen. Es sollte z.B. so aussehen:

Disk /dev/sda: 20.41 GiB, 21913501696 bytes, 42799808 sectors
Disk model: VBOX HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x535e442d

Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 2099199 2097152 1G 82 Linux swap / Solaris
/dev/sda2 * 2099200 42799807 40700608 19.4G 83 Linux

 Mit dem Kommando w kann das Programm die Tabelle speichern und gleichzeitig beendet werden.

Nun müssen diese beiden Partitionen formatiert werden, Ext4-Dateisystem auf der Root-Partition mit:

root@archiso ~ # mkfs.ext4 /dev/sda2

Die SWAP-Partition sollte mit dem Kommando mkswap erzeugt werden:

root@archiso ~ # mkswap /dev/sda1

Mount des Dateisystems

Nun kann das Dateisystem in das vorhandene Verzeichnis /mnt gemountet werden (mount)

root@archiso ~ # mount /dev/sda2 /mnt

Auch die SWAP-Partition (auf /dev/sda1) wird hiermit erstellt:

root@archiso ~ # swapon /dev/sda1

Das Mounten und auch die Erstellung der SWAP-Partition ist wichtig, damit später mit dem Befehl genfstab die fstab-Datei richtig erzeugt wird.

Installation

Spiegelserverauswahl

Softwarepakete auf Arch Linux werden von diesen Servern heruntergeladen, und diese Server (Mirror Server) sind in der Datei /etc/pacman.d/mirrorlist definiert.
 
Auf diesem System (Arch Live System) wird, nachdem es sich mit dem Internet verbindet, das Programm reflector   diese Liste (mirrorlist) aktualisiert und auf die 20 zuletzt synchronisierten Server gesetzt und auf die max.  Download-Geschwindigkeit sortiert.
 

Installation von wichtigen Paketen

Mit dem pacstrap script werden Basispakete, der Linux-Kernel und Firmware für die Hardware installiert.

root@archiso ~ # pacstrap -K /mnt base linux linux-firmware grub mc nano sudo terminus-font

Dabei ist base das Basissystem, linux und linux-firmware der Kernel und zugehörige Firmware, grub ist ein Bootloader, mc ein Filemanager (emuliert den Norton Commander), nano ist ein Editor und mit sudo kann ein Systemadministrator die Befugnis delegieren, bestimmten Benutzern - oder Benutzergruppen - die Möglichkeit zu geben, Befehle als Root oder als ein anderer Benutzer auszuführen, wobei ein Prüfprotokoll der Befehle und ihrer Argumente erstellt wird. Der terminus-font ist ein Schriftbild für etwas größere und klarere Schriftarten für die Konsole (z.B. ter-d28b für hochauflösende BIldschirme).

Konfiguration des Systems

Fstab

Erzeugen der Datei fstab (mit -U oder -L kann entweder die Datei mit UUID oder entsprechend mit Labeln erstellt werden).

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

Überprüfe die Datei /mnt/etc/fstab, und bei etwaigen Fehler editiere diese.

Chroot

Wechsle mit dem chroot -- change root -- in das neue System:

root@archiso ~ # arch-chroot /mnt

Ergebnis, der Prompt wechselt zu

[root@archiso /]#

Time (Zeitzone)

Stelle die richtige Zeitzone ein:  

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

und führe hwclock(8) aus, um die Datei /etc/adjtime zu erzeugen:

[root@archiso /]# hwclock --systohc

Dieser Befehl nimmt an, dass die Hardware-Uhr in UTC läuft. Um sicherzustellen, dass die Uhrzeit genau läuft wird üblicherweise das Zeitprotokoll NTP (Network Time Protocol) mit dem client systemd-timesyncd verwendet. Bei einer virtuellen Umgebung brauchen wir uns über die Zeitsynchronisierung keine Sorgen machen.

Lokalisierung (localization)

Die Datei /etc/locale.gen wird mit nano zum Editieren geöffnet und genau die Zeile mit en_DK.UTF-8 UTF-8 auskommentiert. Danach werden die "Locales" erzeugt:

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

Ausschnitt:


#en_CA.UFT-8 UTF-8
#en_CA ISO-8859-1
en_DK.UTF-8 UTF-8
#en_DK ISO-8859-1

Ausführen des Lokalisierungsscripts:

[root@archiso /]# locale-gen

Nun wird die Datei locale.conf(5) erzeugt und der Wert LANG entsprechend eingetragen:

[root@archiso /]# nano /etc/locale.conf

Datei-Inhalt:

LANG=en_DK.UTF-8

Um auch die Tastaturbelegung und zusätzlich die Terminal-Schrifart dauerhaft festzulegen, muss die Datei vconsole.conf erzeugt und unser Layout eingetragen werden (für :

[root@archiso /]# nano /etc/vconsole.conf

Datei-Inhalt:

KEYMAP=de-latin1-nodeadkeys
FONT=ter-d18b

Netzwerk-Einstellungen

Erzeugung der hostname-Datei mit:

[root@archiso /]# nano /etc/hostname

Datei-Inhalt (z.B.):

archlinux

Ethernet-Netzwerk

Das Ethernet-Netzwerk kann mit systemd recht komfortabel eingerichtet werden, dazu muss beispielsweise eine Datei 20-ethernet.network für den Ethernet-Adapter im Verzeichnis /etc/systemd/network angelegt werden:

[root@archiso /]# nano /etc/systemd/network/20-ethernet.network

Datei-Inhalt:

[Match]
Name=en*
Name=eth*

[Network]
DHCP=yes
MulticastDNS=yes

[DHCPv4]
RouteMetric=100

[IPv6AcceptRA]
RouteMetric=100

Aktivieren des Systemd-Netzwerks, das nach Systemstart gestartet wird:

[root@archiso /]# systemctl enable systemd-networkd.service

Netzwerk-Namensauflösung aktivieren mit:

[root@archiso /]# systemctl enable systemd-resolved

Initramfs

Die Erzeungung eines neuen initramfs ist für gewöhnlich nicht notwendig, da mkinitcpio bereits bei der Installation des Kernel-Pakets mit pcstrap gelaufen ist.

Root Passwort

Das Passwort für den Benutzer root wird gesetzt (selbstverständlich sollte das ein gutes Passwort sein):

[root@archiso /]# passwd

Sudo für die Gruppe wheel aktivieren

Damit Benutzer, die der Gruppe wheel zugehören, Befehle von root oder anderen Benutzern mit dem eigenen Passwort ausführen dürfen, wird in der Datei /etc/sudoers die folgende Zeile auskommentiert:

[root@archiso /]# nano /etc/sudoers

Datei-Inhalt (Auszug):


## Uncomment to allow members of group wheel to execute any command
%wheel ALL=(ALL:ALL) ALL


Boot loader

Wir wählen den Bootloader grub (grub2) aus, dieser wird wie folgt (für die Festplatte /dev/sda) installiert:

[root@archiso /]# grub-install --target=i386-pc /dev/sda

Der Bootloader grub wird hierbei in den MBR der Festplatte /dev/sda geschrieben (erste Sektoren der Platte).

Falls das System mit zwei Grafikkarten hantieren muss (DELL XPS 15 Notebook):

Editieren der Zeile mit GRUB_CMDLINE_LINUX_DEFAULT: Es wird nouveau auf die Blacklist damit gebracht (Videocontroller bei DELL XPS 15 9570, NVIDIA GP107M [GeForce GTX 1050 Mobile]), einfügen von nouveau.modeset=0  in die Datei:

[root@archiso /]# nano /etc/default/grub

Datei-Inhalt (Auszug):

GRUB_CMD_LINE_LINUX_DEFAULT="loglevel=3 nouveau.modeset=0 quiet"

Die Konfiguration des Bootloaders grub wird erstellt mit:

root@archiso ~ # grub-mkconfig -o /boot/grub/grub.cfg

Reboot

Die chroot-Umgebung sollte jetzt verlassen werden mit:

[root@archiso /]# exit

Jetzt kann mit dem Befehl reboot der Rechner neu gestartet werden. (Auf Wunsch kann man die gemounteten Verzeichnisse mit umount -R /mnt aushängen, damit man mögliche Fehler, "busy" Partitionen und deren Ursache mit fuser finden kann).

root@archiso ~ # reboot

Zsh shell einrichten

Um die gleiche Umgebung wie bei der monatlich erscheinenden ISO-Release von Arch Linux zu erhalten, kann die Zsh eingerichtet werden. Zusätzlich braucht Zsh auch eine Konfiguration, die über das Paket grml-zsh-config mitgeliefert wird.
Installation mit:

[root@archiso ~]# pacman -S zsh grml-zsh-config

Weitere Informationen über Zsh sind auf https://wiki.archlinux.org/title/zsh zu finden.

Ändern der Shell (hin zu Zsh) für den Root-Benutzer:

[root@archiso ~]# usermod -s /usr/bin/zsh root

Benutzer einrichten

Um einen neuen Benutzer einzurichten, z.B. mit dem Usernamen tom, Gruppenzugehörigkeiten von users, wheel, http und der Shell-Umgebung von /usr/bin/zsh kann man den folgenden Befehl eingeben:

[root@archiso ~]# useradd -m -G users,wheel,http -s /usr/bin/zsh tom

Passwort vergeben:

[root@archiso ~]# passwd tom

Umask, die Benutzer/User-Maske

Diese Modusmaske enthält die Berechtigungsbits, die für eine neu erstellte Datei nicht gesetzt werden sollen, sie ist also das logische Komplement der für eine neu erstellte Datei gesetzten Berechtigungsbits. Wenn ein Bit in der Maske auf 1 gesetzt wird, dann ist die entsprechende Berechtigung für die neu erstellte Datei deaktiviert. Da wir unseren Benutzer auch gleichzeitig Zugriff auf die http-Verzeichnisse für den Webserver geben wollen, stellen wir diese auf die Maske umask 002.

In Arch Linux wird diese Maske im File /etc/login.defs verwaltet, deshalb findet sich der Eintrag umask mit 022 und soll auf 002 geändert werden:

[root@archiso ~]# nano /etc/login.defs

Datei-Inhalt (Auszug):


# Default initial "umask" value used by login(1) on non-PAM enabled systems.
# Default "umask" value for pam_umask(8) on PAM enabled systems.
# UMASK is also used by useradd(8) and newusers(8) to set the mode for new
# home directories if HOME_MODE is not set.
# 022 is the default value, but 027, or even 077, could be considered
# for increased privacy. There is no One True Answer here: each sysadmin
# must make up their mind.
UMASK 002


Log-out, ausloggen des Root-Benutzers

[root@archiso ~]# exit

Log-in als dieser neue Benutzer (tom)

Um zu überprüfen, ob alle Einstellungen für den Benutzer funktionieren, Log-in mit Passwort:

Arch Linux 6.5.9-arch2-1 (tty1)
archlinux login: tom
Password: ****

Der neue Prompt sollte so aussehen:

tom@archlinux ~ % 

Einige Tests, ob bisher alles funktioniert:

tom@archlinux ~ % umask
002
tom@archlinux ~ % sudo file /etc/sudoers
/etc/sudoers: ASCII text
tom@archlinux ~ % id
uid=1000(tom) gid=1000(tom) groups=1000(tom),33(http),984(users),998(wheel)

Installation eines erweiterten Paket-Managers yay

Damit Wartungsarbeiten, Updates und Softwareänderungen auch für das Arch Linux AUR-System leicht fällt, wird yay (yet another yogurt) installiert. Vorbereitung von essentiellen Programmen:

tom@archlinux ~ % sudo pacman -S --needed base-devel git

Nun wird yay aus dem AUR-Repository in unser Userverzeichnis geklont

tom@archlinux ~ % git clone https://aur.archlinux.org/yay.git

Wir wechseln in dieses Verzeichnis und starten den Compiliervorgang:

tom@archlinux ~ % cd yay
tom@archlinux ~ % ~/yay (git)-[master] % makepkg -si
 

Probleme bei der Installation / Troubleshooting

Key - Keyring bei der Ausführung von pacman

Sollte ein keyring fehlen bzw. auch bei einer Installation einer Komponente nicht richtig nachgeladen werden, dann gibt es eine Möglichkeit dies zu reparieren:

root@archiso ~ # rm -rf /etc/pacman.d/gnupg/*
root@archiso ~ # pacman-key --init
root@archiso ~ # pacman-key --populate archlinux

Das hat mir schon einmal gute Dienste erwiesen.

Yay bricht mit Fehler in der Kommunikation ab

Woran das genau liegt ist mir noch nicht klar, vermutlich auch wegen der Virtualisierung. Das Programm makepkg bricht während des build-Vorgangs von go mit der Verbindung ab ("dial tcp: lookup proxy.golang.org on ... read: connection refused").

Folgenderweise konnte ich das yay trotzdem unter einer chroot-Umgebung zum Kompilieren bringen:

tom@archlinux ~ % ~ % sudo pacman -S devtools
tom@archlinux ~ % ~ % mkdir chroot
tom@archlinux ~ % ~ % CHROOT=$HOME/chroot
tom@archlinux ~ % ~ % cd yay
tom@archlinux ~ % ~/yay (git)-[master] % mkarchroot $CHROOT/root base-devel
tom@archlinux ~ % ~/yay (git)-[master] % makechrootpkg -c -r $CHROOT
tom@archlinux ~ % ~/yay (git)-[master] % makepkg -i