Last active 1 month ago

Revision 8059908b6b7a2abbb83fa25baf0b0a2dfa4e8c3f

setuparchlinux.zsh Raw
1#!/usr/bin/env zsh
2set -euo nounset
3
4#############################################
5# Arch Linux install non-interactif (UEFI)
6# - ESP montée sur /boot de 2G (FAT32)
7# - Wi-Fi via wlan0 (SSID/PSK en variables)
8#
9# ATTENTION: CE SCRIPT EFFACE LE DISQUE.
10# À lancer depuis l'ISO Arch (archiso) en root.
11#############################################
12
13### ====== VARIABLES À REMPLIR ======
14DISK="/dev/nvme0n1" # ex: /dev/sda ou /dev/nvme0n1
15HOSTNAME="arch"
16USERNAME="user"
17USER_PASSWORD="changeme"
18ROOT_PASSWORD="changeme"
19
20WIFI_INTERFACE="wlan0"
21WIFI_SSID="TON_SSID"
22WIFI_PSK="TON_PSK"
23
24TIMEZONE="Europe/Paris"
25LOCALE="fr_FR.UTF-8"
26KEYMAP="fr"
27### =================================
28
29die() {
30 print -u2 "ERROR: $*"
31 exit 1
32}
33
34need() {
35 command -v "$1" >/dev/null 2>&1 || die "Commande manquante: $1"
36}
37
38for c in sgdisk mkfs.fat mkfs.ext4 mount umount pacstrap genfstab arch-chroot iwctl; do
39 need "$c"
40done
41
42[[ -b "$DISK" ]] || die "Disque invalide: $DISK"
43
44print "==> Vérification UEFI..."
45[[ -d /sys/firmware/efi ]] || die "UEFI requis"
46
47print "==> Synchronisation de l'heure..."
48timedatectl set-ntp true 2>/dev/null || true
49
50print "==> Connexion Wi-Fi ($WIFI_INTERFACE)..."
51iwctl --passphrase "$WIFI_PSK" station "$WIFI_INTERFACE" connect "$WIFI_SSID" \
52 || die "Connexion Wi-Fi échouée"
53
54ping -c 1 archlinux.org >/dev/null 2>&1 || die "Pas d'accès réseau"
55
56print "==> Partitionnement GPT sur $DISK"
57swapoff -a 2>/dev/null || true
58umount -R /mnt 2>/dev/null || true
59
60PART_PREFIX="$DISK"
61[[ "$DISK" == *nvme* ]] && PART_PREFIX="${DISK}p"
62
63BOOT_PART="${PART_PREFIX}1"
64ROOT_PART="${PART_PREFIX}2"
65
66sgdisk --zap-all "$DISK"
67sgdisk -n 1:0:+2G -t 1:ef00 -c 1:"EFI_SYSTEM" "$DISK"
68sgdisk -n 2:0:0 -t 2:8300 -c 2:"ARCH_ROOT" "$DISK"
69partprobe "$DISK"
70sleep 2
71
72print "==> Formatage..."
73mkfs.fat -F32 -n BOOT "$BOOT_PART"
74mkfs.ext4 -F -L ROOT "$ROOT_PART"
75
76print "==> Montage..."
77mount "$ROOT_PART" /mnt
78mkdir -p /mnt/boot
79mount "$BOOT_PART" /mnt/boot
80
81print "==> Installation du système de base..."
82pacstrap -K /mnt \
83 base linux linux-firmware \
84 networkmanager iwd sudo vim
85
86print "==> Génération fstab..."
87genfstab -U /mnt >> /mnt/etc/fstab
88
89print "==> Configuration système (chroot)..."
90arch-chroot /mnt /usr/bin/env zsh <<EOF
91set -euo nounset
92
93ln -sf /usr/share/zoneinfo/$TIMEZONE /etc/localtime
94hwclock --systohc
95
96sed -i 's/^#\\($LOCALE\\)/\\1/' /etc/locale.gen
97locale-gen
98print "LANG=$LOCALE" > /etc/locale.conf
99print "KEYMAP=$KEYMAP" > /etc/vconsole.conf
100
101print "$HOSTNAME" > /etc/hostname
102cat >/etc/hosts <<H
103127.0.0.1 localhost
104::1 localhost
105127.0.1.1 $HOSTNAME.localdomain $HOSTNAME
106H
107
108print "root:$ROOT_PASSWORD" | chpasswd
109useradd -m -G wheel -s /bin/zsh "$USERNAME"
110print "$USERNAME:$USER_PASSWORD" | chpasswd
111sed -i 's/^# %wheel ALL=(ALL:ALL) ALL/%wheel ALL=(ALL:ALL) ALL/' /etc/sudoers
112
113systemctl enable NetworkManager
114systemctl enable iwd
115
116mkdir -p /etc/NetworkManager/system-connections
117cat >/etc/NetworkManager/system-connections/wifi.nmconnection <<NMC
118[connection]
119id=wifi
120type=wifi
121autoconnect=true
122
123[wifi]
124ssid=$WIFI_SSID
125mode=infrastructure
126
127[wifi-security]
128key-mgmt=wpa-psk
129psk=$WIFI_PSK
130
131[ipv4]
132method=auto
133
134[ipv6]
135method=auto
136NMC
137chmod 600 /etc/NetworkManager/system-connections/wifi.nmconnection
138
139bootctl install
140ROOT_UUID=\$(blkid -s UUID -o value "$ROOT_PART")
141
142cat >/boot/loader/loader.conf <<L
143default arch
144timeout 3
145editor no
146L
147
148cat >/boot/loader/entries/arch.conf <<E
149title Arch Linux
150linux /vmlinuz-linux
151initrd /initramfs-linux.img
152options root=UUID=\$ROOT_UUID rw
153E
154EOF
155
156print "==> Nettoyage..."
157umount -R /mnt
158
159print "==> Installation terminée. Reboot possible."
160