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