# Installationsanleitung

## Festplatte vorbereiten

Wir wollen die folgende Aufteilung für unsere Partitionen:

| Name                         | Mountpoint | Größe  | Dateisystem | Partitionstyp                |
|------------------------------|------------|--------|-------------|------------------------------|
| UEFI System Partition & boot | /boot      |  1 GB  | vfat        | `0xEF00` (EFI System)        |
| Swap                         | swap       | 16 GB  | swap        | `0x8200` (Linux swap)        |
| Root                         | /          | Rest   | ext4        | `0x8300` (Linux filesystem)  |

### Partitionerung

Man kann /boot und die UEFI System Partition zusammenfassen.

Die Partitonierung kann man mit `gdisk` oder `cgdisk` (curses-Frontend für gdisk) machen.
`fdisk` sollte natürlich auch funktionieren.

### Dateisysteme

`ext4` ist nicht vorgegeben, ich nutze es nur.

Kurze Erklärung der benutzten Schalter:
* `mkfs.fat`
    * `-F` - Setzt die `FAT_SIZE` (8, 16 oder 32), also die Größe der "file allocation tables"
    * `-n` - Setzt den Namen des Dateisystems
* `mkswap` bzw. `mkfs.ext4`
    * `-L` - Setzt das Label (bzw. den Namen) des Dateisystems

```
mkfs.fat -F 32 -n EFIBOOT /dev/<partition1>
mkswap -L swap /dev/<partition2>
mkfs.ext4 -L root /dev/<partition3>
```

### Partitionen einhängen

Wir mounten die root-Partition nach `/mnt`. Dann erstellen wir das `/boot`-Verzeichnis und mounten EFIBOOT dorthin.
Als letztes aktivieren wir die Swappartition.

```
mount -L root /mnt
mkdir -p /mnt/boot
mount -L EFIBOOT /mnt/boot
swapon -L swap
```

## Installation und Konfiguration des Basissystems

### Die Grundpakete

Auswahl des Mirrors in `/etc/pacman.d/mirrorlist` (Noch im Kontext des USB-Sticks)

`pacstrap` bootstrapt das Basissystem nach `/mnt`. Es installiert die angegebenen Pakete bzw. Paketgruppen.

* base bzw. base-devel - Eine Gruppe von Basispaketen
* linux bzw. linux-firmware - Der Kernel und die Firmware
* vim - Ein Editor
* efibootmgr - "Editor" für die EFI-Systemvariablen
* dosfstools - Tools, um mit Fat-Dateisystemen umzugehen
* gptfdisk - `gdisk` bzw. `cgdisk` - Partionierungstools, die mit GPT umgehen können
* bash-completion - Autovervollständigung für die Bash
* intel-ucode - CPU-spezifischer Microcode
* netctl - Ein einfacher Netzwerkmanager

```
pacstrap /mnt base base-devel linux linux-firmware vim efibootmgr dosfstools gptfdisk bash-completion intel-ucode netctl man-db man-pages
```

### Die Dateisystemtabelle anlegen

Oder auch `fstab`, auch hier wieder mit UUIDs (`-U`)

```
genfstab -Up /mnt > /mnt/etc/fstab
```


### Konfiguration

Wechsel ins chroot

```
arch-chroot /mnt/
```

Do config yadda yadda

### Konfiguration von systemd-bootctl (Gummiboot)

Wir wollen **systemd-bootctl** benutzen. Das verkürzt die Bootzeit, da direkt über UEFI gebootet wird.
Installiert haben wir den Bootloader schon im `pacstrap`-Befehl (s.o.).

Zuerst müssen wir den Bootloader vorbereiten:

```
bootctl install
```

Dieser Befehl legt alle nötigen Verzeichnisse an und kopiert die benötigten Dateien an den richtigen Ort.

Nun legen wir die Bootloadereinträge an. Dazu müssen wir die Partitionen benennen. Um die Verwechslungsgefahr der Partitionen zu verringern, benutzen wir die UUIDs der Partitionen. Herausfinden kann man die UUIDs mit dem Befehl `blkid`. Wir erstellen die Datei `/boot/loader/entries/arch-uefi.conf` und fügen folgendes ein:

```
title    Arch Linux
linux    /vmlinuz-linux
initrd   /initramfs-linux.img
options  root=UUID=<UUID der root-Partition> rw resume=UUID=<UUID der swap-Partition>
```

Um den Fallback verwenden zu können, legen wir die Datei `/boot/loader/entries/arch-uefi-fallback.conf`an:

```
title    Arch Linux Fallback
linux    /vmlinuz-linux
initrd   /initramfs-linux-fallback.img
options  root=UUID=<UUID der root-Partition> rw resume=UUID=<UUID der swap-Partition>
```

In der Datei `/boot/loader/loader.conf` können wir die generelle Konfiguration des Bootloaders bearbeiten.
Der `default`-Eintrag gibt an, welcher Eintrag des Bootloaders als Standard gestartet werden soll.
Er bezieht sich auf die Dateinamen der Einträge im `entries` Verzeichnis. Wir wählen `arch-uefi`.
Außerdem kann man den `timeout` angeben, also die Zeit, bis der Standardeintrag automatisch gestartet wird.

```
default   arch-uefi
timeout   1
```

### Netctl

Anlegen von Config: `/etc/netctl/<Config-Name>`

```
netctl enable <Config-Name>
netctl start <Config-Name>
```