# Linux
## Installation de Arch Linux
### ISO
Télécharger l'iso arch linux sur [ce lien](https://archlinux.org/download/).

- Par windows : installer rufus et l'installer sur une clé
- Par Linux TODO

Ensuite redémarrer l'ordinateur, maintenir **F4**. On arrive dans le BIOS, sélectionner la clé bootable (généralement avec UEFI...)
### Environnement d'installation live
Suivre le [wiki](https://wiki.archlinux.org/title/Installation_guide)

On se trouve directement dans la clé USB. Il s'agit alors de :
- préparer l'environnement d'installation
- préparer les partitions du disque dur (le plus dur)
- installer les premiers logiciels nécessaires (boot loader, drivers, kernel, réseau)
- configurer les variables principales (heure, date, localisation, langage)

#### Environnement d'installation
> [!INFO] La facilité, c'est taper "archinstall" et suivre l'installation normalement. Sinon, tout faire à la main et suivre le tutoriel

```bash
loadkeys fr # pour clavier AZERTY

# Pour internet, préférer un raccordement ethernet, sinon :
iwctl
[iwd]   station list
[iwd]   station wlan0 # (port wifi en général wlan0)
[iwd]   wlan0   get-networks
[iwd]   wlan0   connect NomDuWifi
OR
iwctl --passphrase mot2passe station wlan0 connect NomDuWifi
# vérifier le wiki si besoin de mot de passe etc...
timedatectl # sync system clock
sudo pacman -S ntp
timedatectl set-ntp true
timedatectl status # vérifier que system clock synchronized est bien "true"
```
Liens utiles : [iwctl](https://wiki.archlinux.org/title/iwd#iwctl) 

#### Partitionnement (sda pour disque dur sda, peut-être nvme...) (voir [ce tuto](https://www.linuxtricks.fr/wiki/reflexion-le-partitionnement-ideal-pour-un-serveur-linux))

On veut ici créer les partitions où seront montées les différentes parties de l'OS. Le /boot/efi permet de lancer le système (attention pour un système UEFI, qui représente la plupart des systèmes). Le swap permet d'optimiser l'utilisation de la RAM. Enfin, une partition source pour installer arch. Ce sont les partitions obligatoires pour une installation correcte.

> Note : le swap peut être fait autrement, via un swapfile, voir la [page dédiée du wiki](https://wiki.archlinux.org/title/Swap)

À cela, on peut ajouter globalement ce qu'on veut, par exemple un /home (indispensable pour la configuration, et généralement utilisé pour y ranger son environnement de travail, dont le raccourci sera `~`), et un /data qui permet de garder des données en dehors du home.

Il est recommandé de chiffrer l'intégralité de son disque dur, dans un intérêt de protection des données personnelles, ce qui demandera de rentrer un mot de passe d'abord pour déchiffrer, puis le mot de passe habituel pour entrer dans sa session.

| Localisation | Mémoire | Format | Nom |
|--------------|---------|--------|-----|
| /boot/efi | 512Mo (voir reco spécifiques) | fat32 | sda1 |
| [swap] | [selon matériel](https://www.linuxtricks.fr/wiki/swap-informations-bonnes-pratiques-configuration) | swap | sda2 |
| / | 80Go (au choix >23-32Go) | ext4 | sda3 |
| /home | 100Go (au choix selon usage) | ext4 | sda4 |
| /data | Ce qui reste | ext4 | sda5 |

Pour le partitionnement, on utilise `fdisk`

> ATTENTION à la fin du processus les disques modifiés seront effacés, bien effectuer une sauvegarde sur un disque séparé avant toute installation
```bash
fdisk -l # liste des emplacements disponibles
# bien noter le disque dur souhaité, disons sda
# ---------------------------------------------
# Commandes :
# g supprime les partitions
# p vérifie la table
# n crée une partition
# t choisit le format (par défaut ext4)
# w write
# ---------------------------------------------
fdisk /dev/sda # si le disque est sda
n 
/enter/
/enter/
/enter/
+512M # définition de la taille de partition
# pour "tout l'espace restant" laisser vide et /enter/

t # t n'est pas nécessaire pour ext4
    1 # pour EFI
    2 (-> type 19) # pour SWAP
# répéter l'opération pour chaque partition
p # vérifier l'ordre et les formats
w # écrire (aucune action n'est faite directement sur le disque avant de faire w)
exit # Sortir de fdisk si ce n'est pas fait
```
> Bien noter chaque partition (sda1, sda2...) et à quoi elles correspondent pour la suite

Une fois que les partitions sont créées, on s'occupe de les mettre au bon format :
```bash
mkfs.fat -F32 /dev/sda1 # pour le /boot/efi
mkswap /dev/sda2
swapon /dev/sda2
mkfs.ext4 /dev/sda3 # à faire pour chaque partition ext4
```
Le plus dur/risqué est fait. Il faut ensuite monter chaque partition (c'est à dire créer les emplacements où l'on aura accès à leur contenu).
```bash
# pour monter on fait mount PARTITION CIBLE
# l'espace prévu au départ pour la cible est /mnt
mount /dev/sda3 /mnt
# mkdir pour créer les dossiers (make directory)
mkdir /mnt/boot
mkdir /mnt/boot/efi
mkdir /mnt/home
mkdir /mnt/data

mount /dev/sda1 /mnt/boot/efi
... # à faire pour toutes les partitions
```

> [!WARNING] Non testé
**Avec encryption :**
```bash
# nettoyage du disque
wipefs -af /dev/sda
dd if=/dev/zero of=/dev/sda bs=1M status=progress
# création des partitions avec fdisk
fdisk /dev/sda
...
...
w
# chiffrage de / et /home avec LUKS
cryptsetup luksFormat /dev/sda2
cryptsetup luksFormat /dev/sda3
cryptsetup luksOpen /dev/sda2 cryptroot
cryptsetup luksOpen /dev/sda3 crypthome

mkfs.fat -F32 /dev/sda1
mkfs.ext4 /dev/mapper/cryptroot
mkfs.ext4 /dev/mapper/crypthome

mount /dev/mapper/cryptroot /mnt
mkdir -p /mnt/boot/efi
mount /dev/sda1 /mnt/boot/efi
mkdir /mnt/home
mount /dev/mapper/crypthome /mnt/home
... # suite
```
#### Installation des premiers logiciels
D'abord on choisit les miroirs (pour télécharger au plus proche donc au plus vite). Les miroirs sont des dépôts de packages situés dans les serveurs.
```bash
pacman -S reflector # package de choix et test de miroirs
reflector --latest 5 --sort rate --save /etc/pacman.d/mirrorlist
# cette dernière commande teste les miroirs et sélectionne les 5 plus rapides
```
La liste des miroirs est rangée dans `/etc/pacman.d/mirrorlist`. Pacman est le gestionnaire de paquets officiel de Arch, sur lequel sont déposés tous les logiciels officiellement validés par la communauté Arch (réputé sûr et optimisé). C'est l'équivalent de `apt` ou `dnf` sur d'autres distributions.

> Avec Pacman, `-S` permet d'installer, `-Rns` de désinstaller, `-Syu` de mettre à jour, `-Syy` de mettre à jour le kernel et les miroirs en plus, pour le reste se référer au wiki arch

Installation des paquets essentiels (voir [ce lien](https://wiki.archlinux.org/title/Installation_guide#Install_essential_packages), important pour les packages spécifiques type intel-ucode qui seront nécessaires par la suite...
```bash
# installation du kernel
pacstrap -K /mnt base linux linux-firmware
```
Ensuite il faut générer fstab (les dossiers système qui seront montés au démarrage)
```bash
genfstab -U /mnt >> /mnt/etc/fstab
```

Ensuite on peut entrer dans le système via `arch-chroot /mnt` ce qui permet de faire les premières installations et configurations. Cette commande peut-être utile quand on casse le bootloader, car on pourra rentrer dans le système via un environnement live.

```bash
# installation d'éditeur de texte
pacman -S sudo
sudo pacman -S vim # ou nano
arch-chroot /mnt
# --------------------------------------------------------------------------
# time zone
ln -sf /usr/share/zoneinfo/Europe/Paris /etc/localtime 
# heure en UTC
hwclock --systohc
# --------------------------------------------------------------------------
# localisation géographique + format de langage
touch /etc/locale.conf # création du fichier locale
vim /etc/locale.conf # et ajouter LANG=en_US.UTF-8 (ou fr_FR.UTF-8 au choix)
vim /etc/locale.gen # et décommenter toutes les locales voulues (fr, en_us, ... en utf-8)
locale-gen # pour générer les locales, peut nécessiter sudo
# clavier
vim /etc/vconsole.conf
# ajouter une ligne KEYMAP=fr-latin1 pour AZERTY # probablement à refaire après premier reboot
# --------------------------------------------------------------------------
# configuration réseau
vim /etc/hostname # et ajouter le nom du système
passwd # définition du mot de passe root (fort)
# --------------------------------------------------------------------------
# installation grub (bootloader)
pacman -S grub efibootmgr
mount /dev/sda1 /boot/efi
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB
grub-mkconfig -o /boot/grub/grub.cfg
# --------------------------------------------------------------------------
# installation des essentiels
sudo pacman -S vim nano sudo iwd dhcpcd git base-devel networkmanager intel-ucode intel-mkl ntp  nvidia-open-dkms nvidia-prime nvidia-settings
# suivre les préconisations d'installation relatives à la machine
# en particulier intel-ucode et les drivers nvidia ou amd
# --------------------------------------------------------------------------
# vérification de la date et de l'heure
timedatectl set-ntp true
timedatectl list-timezone
timedatectl set-timezone
# --------------------------------------------------------------------------
# ajout des systemctl (qui seront lancés au démarrage)
systemctl enable dhcpcd
systemctl enable NetworkManager
systemctl enable iwd
# --------------------------------------------------------------------------
# paramétrage utilisateur
useradd -m -G wheel <username>
passwd <username>
visudo
# décommenter %wheel ALL=(ALL)ALL pour se donner les droits d'admin
exit
reboot now
```

Arch est donc bien installé, le système va se relancer et s'ouvrir sur la page de connexion. Il faut entrer son user (défini avant) et le mot de passe. Si cela ne fonctionne pas, entre "root" puis le mot de passe root, et recréer son user dans la console.

Il y a seulement un terminal. Pour la suite, il faudra installer un "window-manager" qui permet l'affichage de fenêtres (comme son nom l'indique) et les différentes options de bureau selon les WM. Il y a plusieurs possibilités, plus ou moins simples :
- KDE : environnement de bureau classique, windows-like, très personnalisable
- Gnome : environnement de bureau simple, facile à utiliser mais peu personnalisable
- Hyprland : tile window, entièrement personnalisable au départ, mais nécessite quelques heures de travail pour obtenir un système acceptable
- ...

