Wie man Arch Linux auf einem Hetzner-Cloud-Server installiert

0 Aktien
0
0
0
0

Einführung

In diesem Artikel installieren wir ein minimalistisches Arch-Linux-System auf einem Server, auf dem aktuell ein Betriebssystem im RAM oder von einem Live-ISO läuft. Solange die Festplatten nicht belegt sind, funktioniert jede Linux-Distribution. Für dieses Tutorial verwende ich einen Hetzner Cloud-Server, der im Rescue-System gestartet ist.

Wichtige Informationen

Dieses Tutorial erfordert, dass Sie Befehle in verschiedenen Chroots ausführen. Dadurch können wir unser scheinbares Stammverzeichnis an einen neuen Ort umleiten und Befehle so ausführen, als ob wir das System neu gestartet hätten.

Ich werde Sie benachrichtigen, sobald wir zu einem neuen Stammverzeichnis wechseln. Außerdem werde ich im Eingabeaufforderungstext anzeigen, in welchem Chroot-Verzeichnis wir uns aktuell befinden.

  • root@rescue ~ # Zeigt einen Befehl, der ohne chroot ausgeführt wird.
  • [root@bootstrap /]# Es wird innerhalb der Bootstrap-Umgebung stattfinden.
  • [root@chroot /]# Innerhalb der Arch Linux-Installation auf der Festplatte

Schritt 1 – Einrichten der Bootstrap-Umgebung

Wir beginnen mit dem Herunterladen des aktuellen Bootstrap-Images von einem vertrauenswürdigen Arch-Linux-Mirror. Dadurch erhalten wir die benötigten Tools zur Installation von Arch. Gleichzeitig laden wir auch die passende Signatur herunter und überprüfen das Image, bevor wir mit der Installation fortfahren.

root@rescue ~ # curl -LO 'https://geo.mirror.pkgbuild.com/iso/latest/archlinux-bootstrap-x86_64.tar.zst'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 164M 100 164M 0 0 115M 0 0:00:01 0:00:01 --:--:-- 115M
root@rescue ~ # curl -LO 'https://archlinux.org/iso/latest/archlinux-bootstrap-x86_64.tar.zst.sig'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 331 100 331 0 0 4728 0 --:--:-- --:--:-- --:--:-- 4728
root@rescue ~ # gpg --keyserver keyserver.ubuntu.com --keyserver-options auto-key-retrieve --verify archlinux-bootstrap-x86_64.tar.zst.sig
gpg: Signature made Sun 01 Sep 2024 02:43:27 PM CEST
gpg: using EDDSA key 3E80CA1A8B89F69CBA57D98A76A5EF9054449A5C
gpg: issuer "pierre@archlinux.org"
gpg: key 7F2D434B9741E8AC: public key "Pierre Schmitz <pierre@archlinux.org>" imported
gpg: key 76A5EF9054449A5C: public key "Pierre Schmitz <pierre@archlinux.org>" imported
gpg: Total number processed: 2
gpg: imported: 2
gpg: no ultimately trusted keys found
gpg: Good signature from "Pierre Schmitz <pierre@archlinux.org>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 3E80 CA1A 8B89 F69C BA57 D98A 76A5 EF90 5444 9A5C

Wenn keine Fehler auftreten, können wir mit dem Entpacken des Images fortfahren.

root@rescue ~ # tar xf archlinux-bootstrap-x86_64.tar.zst
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.security.capability'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.security.capability'

Nach dem Entpacken müssen wir das Verzeichnis auf unserem System einbinden. Dadurch wird verhindert, dass PackStrap annimmt, es sei kein Speicherplatz mehr auf diesem Gerät verfügbar.

root@rescue ~ # mount --bind root.x86_64 root.x86_64

Schritt 2 – Erstellen Sie eine Bootdiskette und installieren Sie Arch Linux

Ab jetzt müssen wir innerhalb der soeben eingerichteten Bootstrap-Umgebung arbeiten. Dies geschieht mithilfe von arch-chroot.

root@rescue ~ # ./root.x86_64/usr/bin/arch-chroot root.x86_64

Zuerst müssen wir unsere Festplatte partitionieren. Ich verwende hier gdisk, aber Sie können auch jedes andere GPT-fähige Partitionierungstool verwenden. gdisk ist jedoch nicht im Bootstrap-Image installiert. Dazu müssen wir zuerst ein Mirror-Image konfigurieren und den Pacman-Schlüssel einrichten und anschließend gdisk installieren.

[root@bootstrap /]# echo 'Server = https://geo.mirror.pkgbuild.com/$repo/os/$arch' > /etc/pacman.d/mirrorlist
[root@bootstrap /]# 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/AFB2F3A83C28CC51C20E0752282AC1A0C5C2A266.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
[root@bootstrap /]# pacman-key --populate archlinux
==> Appending keys from archlinux.gpg...
==> Locally signing trusted keys in keyring...
-> Locally signed 5 keys.
==> Importing owner trust values...
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 45 keys.
==> Updating trust database...
gpg: Note: third-party key signatures using the SHA1 algorithm are rejected
gpg: (use option "--allow-weak-key-signatures" to override)
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: depth: 0 valid: 1 signed: 5 trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: depth: 1 valid: 5 signed: 101 trust: 0-, 0q, 0n, 5m, 0f, 0u
gpg: depth: 2 valid: 77 signed: 22 trust: 77-, 0q, 0n, 0m, 0f, 0u
gpg: next trustdb check due at 2024-11-09
[root@bootstrap /]# pacman --noconfirm -Sy gdisk

Jetzt können wir mit der Partitionierung unserer Festplatte fortfahren. Hetzner Cloud-Server werden standardmäßig mit nur einer angeschlossenen Festplatte ausgeliefert. Diese Festplatte heißt /dev/sda. Der Name Ihrer Festplatte kann abweichen. Passen Sie den Befehl daher entsprechend an. Bitte beachten Sie, dass dadurch alle Partitionen gelöscht werden und somit alle darauf befindlichen Daten unbrauchbar sind.

Unsere Partitionierung ist hier sehr einfach. Wir benötigen mindestens eine Boot-Partition (1 MB groß) und eine Root-Partition (in unserem Fall der Rest der Festplatte).

[root@bootstrap /]# gdisk /dev/sda
GPT fdisk (gdisk) version 1.0.10
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): y
Command (? for help): n
Partition number (1-128, default 1):
First sector (34-40001502, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-40001502, default = 39999487) or {+-}size{KMGTP}: +1M
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): ef02
Changed type of partition to 'BIOS boot partition'
Command (? for help): n
Partition number (2-128, default 2):
First sector (34-40001502, default = 4096) or {+-}size{KMGTP}:
Last sector (4096-40001502, default = 39999487) or {+-}size{KMGTP}:
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'
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/sda.
The operation has completed successfully.

Anschließend formatieren wir unsere Root-Partition mit dem ext4-Dateisystem:

[root@bootstrap /]# mkfs.ext4 /dev/sda2
mke2fs 1.47.1 (20-May-2024)
/dev/sda2 contains a vfat file system
Proceed anyway? (y,N) y
Discarding device blocks: done
Creating filesystem with 4999424 4k blocks and 1250928 inodes
Filesystem UUID: c14d23b8-5754-49bc-bc27-d1cb48bd76e3
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

Dann binden wir es in /mnt ein und generieren daraus unsere fstab:

[root@bootstrap /]# mount /dev/sda2 /mnt
[root@bootstrap /]# genfstab -U /mnt >> /etc/fstab

Jetzt können wir Arch Linux mit pacstrap installieren. Wir nutzen diese Gelegenheit, um OpenSSH zu installieren, da wir es später für die Verbindung zu unserem Server benötigen. Dies kann je nach Internetgeschwindigkeit und Festplattenkapazität einige Zeit dauern.

[root@bootstrap /]# pacstrap -G -M /mnt base grub linux linux-firmware openssh
==> Creating install root at /mnt
==> Installing packages to /mnt
:: Synchronizing package databases...
core 117.2 KiB 514 KiB/s 00:00 [########################################] 100% extra 7.4 MiB 37.0 MiB/s 00:00 [########################################] 100%resolving dependencies...
:: There are 2 providers available for libxtables.so=12-64:
:: Repository core
1) iptables 2) iptables-nft
Enter a number (default=1):
:: There are 3 providers available for initramfs:
:: Repository core
1) mkinitcpio
:: Repository extra
2) booster 3) dracut
Enter a number (default=1):
looking for conflicting packages...
[...]
Total Download Size: 520.45 MiB
Total Installed Size: 992.49 MiB
[...]
(13/13) Reloading system bus configuration...
Skipped: Running in chroot.

Schritt 3 – Abschließende Arch Linux-Installation

Nun können wir die Bootstrap-Umgebung verlassen und zum Root-Verzeichnis des installierten Systems wechseln, um den Bootvorgang abzuschließen:

[root@bootstrap /]# exit
root@rescue ~ # ./root.x86_64/usr/bin/arch-chroot root.x86_64/mnt

Wir beginnen erneut, indem wir einen Spiegel konfigurieren und den Pacman-Schlüssel initialisieren:

[root@chroot /]# echo 'Server = https://geo.mirror.pkgbuild.com/$repo/os/$arch' > /etc/pacman.d/mirrorlist
[root@chroot /]# pacman-key --init
[root@chroot /]# pacman-key --populate archlinux

Jetzt ist es an der Zeit, den Bootloader auf Ihrem Laufwerk zu installieren.

[root@chroot /]# grub-install /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.
[root@chroot /]# grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-linux
Found initrd image: /boot/initramfs-linux.img
Found fallback initrd image(s) in /boot: initramfs-linux-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

Das Netzwerk wird von systemd-networkd verwaltet. Um es zu aktivieren, muss die Datei /etc/systemd/network/ether.network mit folgendem Inhalt erstellt werden:

cat << EOF > /etc/systemd/network/ether.network
[Match]
Type=ether
[Network]
DHCP=yes
EOF

Dadurch werden alle Ethernet-Netzwerkschnittstellen für DHCP konfiguriert.

Nun aktivieren wir die erforderlichen Dienste:

[root@chroot /]# systemctl enable systemd-networkd
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.service' → '/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-networkd-wait-online.service'.
[root@chroot /]# systemctl enable systemd-resolved
Created symlink '/etc/systemd/system/dbus-org.freedesktop.resolve1.service' → '/usr/lib/systemd/system/systemd-resolved.service'.
Created symlink '/etc/systemd/system/sysinit.target.wants/systemd-resolved.service' → '/usr/lib/systemd/system/systemd-resolved.service'.

Abschließend möchten wir per SSH auf unser System zugreifen. Erstellen Sie dazu einfach eine Datei namens „authorized_keys“ im Verzeichnis „/root/.ssh/authorized_keys“ und tragen Sie Ihren öffentlichen SSH-Schlüssel ein. Vergessen Sie nicht, sshd zu aktivieren, da der SSH-Server sonst nach einem Neustart nicht startet.

[root@chroot /]# mkdir /root/.ssh
[root@chroot /]# echo "<your-ssh-pub-key>" >> /root/.ssh/authorized_keys
[root@chroot /]# systemctl enable sshd
Created symlink '/etc/systemd/system/multi-user.target.wants/sshd.service' → '/usr/lib/systemd/system/sshd.service'.

Jetzt können wir die Chroot-Umgebung verlassen und unser System neu starten. Nach wenigen Sekunden sollte Ihr Server unter dem neu installierten Arch Linux betriebsbereit sein und über SSH auf Port 22 mit Ihrem öffentlichen Schlüssel erreichbar sein.

Ergebnis

Herzlichen Glückwunsch! Sie haben nun eine minimale Arch-Linux-Installation auf Ihrem Server. Von hier aus können Sie weitere Dienste wie Docker, nginx, Kubernetes usw. installieren.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Das könnte Ihnen auch gefallen