Amélioration du script d'installation : clarification des commentaires, nettoyage des commandes de démontage et ajout de la destruction des tables de partition avant le formatage.

This commit is contained in:
Puechberty Arthur
2026-07-30 21:07:01 +02:00
parent 2bfcc3b961
commit 1d7621375c
+36 -41
View File
@@ -10,7 +10,7 @@ ROOT_PASS="rootpassword123"
HOSTNAME="arch-laptop" HOSTNAME="arch-laptop"
# ============================================================================== # ==============================================================================
set -e # Ne pas utiliser set -e pour éviter que le script ne plante sur des avertissements (ex: umount)
echo "==================================================" echo "=================================================="
echo " INSTALLATION ARCH LINUX + HYPRLAND (ZEN/OPTI) " echo " INSTALLATION ARCH LINUX + HYPRLAND (ZEN/OPTI) "
@@ -56,40 +56,32 @@ if findmnt --source "$DISK" -n -o TARGET > /dev/null 2>&1; then
MOUNT_TARGET=$(findmnt --source "$DISK" -n -o TARGET) MOUNT_TARGET=$(findmnt --source "$DISK" -n -o TARGET)
if [[ "$MOUNT_TARGET" == "/" || "$MOUNT_TARGET" == "/run/archiso"* ]]; then if [[ "$MOUNT_TARGET" == "/" || "$MOUNT_TARGET" == "/run/archiso"* ]]; then
echo "[ERROR] Le disque $DISK est actuellement utilisé par le système ($MOUNT_TARGET)." echo "[ERROR] Le disque $DISK est actuellement utilisé par le système ($MOUNT_TARGET)."
echo " Si tu es sur le Live USB, le disque cible n'est pas $DISK (vérifie avec lsblk)."
exit 1 exit 1
fi fi
fi fi
# Démonter /mnt récursivement et de manière "paresseuse" # Démonter tout ce qui traîne
umount -R /mnt 2>/dev/null || true umount -R /mnt 2>/dev/null
umount -l /mnt 2>/dev/null || true umount -lf /mnt 2>/dev/null
# Récupérer toutes les partitions du disque et les démonter de force # Démonter les partitions du disque cible
PARTITIONS=$(lsblk -lnpo NAME "$DISK" 2>/dev/null) lsblk -lnpo NAME "$DISK" 2>/dev/null | xargs -I {} umount -lf {} 2>/dev/null
for part in $PARTITIONS; do
if findmnt --source "$part" -n -o TARGET > /dev/null 2>&1; then
echo "[INFO] Démontage forcé de $part..."
umount -lf "$part" 2>/dev/null || true
fi
done
# Arrêt des volumes chiffrés, LVM, et RAID qui pourraient bloquer le disque # Arrêter les volumes chiffrés, LVM, et RAID
cryptsetup close --all 2>/dev/null || true cryptsetup close --all 2>/dev/null
vgchange -an 2>/dev/null || true vgchange -an 2>/dev/null
mdadm --stop --scan 2>/dev/null || true mdadm --stop --scan 2>/dev/null
swapoff -a 2>/dev/null
dmsetup remove_all 2>/dev/null
# Désactiver les swaps et les mappings # Destruction totale des tables de partition (bien plus puissant que dd)
swapoff -a 2>/dev/null || true echo "[INFO] Destruction des tables de partition..."
dmsetup remove_all 2>/dev/null || true sgdisk --zap-all "$DISK" 2>/dev/null
wipefs -a -f "$DISK" 2>/dev/null
# Nettoyer les signatures et détruire les tables avec sgdisk (plus propre que dd) # Forcer la relecture par le noyau
echo "[INFO] Effacement des tables de partition..." partprobe "$DISK" 2>/dev/null
sgdisk --zap-all "$DISK" 2>/dev/null || true blockdev --rereadpt "$DISK" 2>/dev/null
# Forcer la relecture
partprobe "$DISK" 2>/dev/null || true
blockdev --rereadpt "$DISK" 2>/dev/null || true
udevadm settle udevadm settle
sleep 3 sleep 3
@@ -98,20 +90,25 @@ sgdisk -o "$DISK"
sgdisk -n 1:0:+300M -t 1:ef00 "$DISK" sgdisk -n 1:0:+300M -t 1:ef00 "$DISK"
sgdisk -n 2:0:0 -t 2:8300 "$DISK" sgdisk -n 2:0:0 -t 2:8300 "$DISK"
partprobe "$DISK" 2>/dev/null || true # Attente critique pour que le noyau crée /dev/sda1 et /dev/sda2
blockdev --rereadpt "$DISK" 2>/dev/null || true partprobe "$DISK" 2>/dev/null
udevadm settle udevadm settle
sleep 3 sleep 3
if [ ! -b "$PART_EFI" ] || [ ! -b "$PART_ROOT" ]; then if [ ! -b "$PART_EFI" ] || [ ! -b "$PART_ROOT" ]; then
echo "[ERROR] Les partitions $PART_EFI ou $PART_ROOT n'existent pas." echo "[ERROR] Les partitions $PART_EFI ou $PART_ROOT n'existent pas après 3 secondes."
lsblk lsblk
exit 1 exit 1
fi fi
echo "[OK] Partitions créées et détectées : EFI=$PART_EFI, ROOT=$PART_ROOT" echo "[OK] Partitions créées : EFI=$PART_EFI, ROOT=$PART_ROOT"
# 5. Formatage et Montage BTRFS optimisé # 5. Formatage et Montage BTRFS optimisé
echo "[INFO] Formatage BTRFS avec compression ZSTD..." echo "[INFO] Formatage BTRFS et FAT32..."
# On force le nettoyage des signatures juste avant le formatage pour éviter le "resource busy"
wipefs -a -f "$PART_EFI" 2>/dev/null
wipefs -a -f "$PART_ROOT" 2>/dev/null
sleep 1
mkfs.fat -F32 "$PART_EFI" mkfs.fat -F32 "$PART_EFI"
mkfs.btrfs -f "$PART_ROOT" mkfs.btrfs -f "$PART_ROOT"
@@ -121,7 +118,7 @@ mount "$PART_EFI" /mnt/boot
# 6. Installation du système strict minimum et optimisé # 6. Installation du système strict minimum et optimisé
echo "[INFO] Installation des paquets officiels..." echo "[INFO] Installation des paquets officiels..."
pacstrap --noconfirm /mnt base base-devel linux-zen linux-zen-headers linux-firmware btrfs-progs \ pacstrap /mnt --noconfirm base base-devel linux-zen linux-zen-headers linux-firmware btrfs-progs \
networkmanager sudo git neovim curl wget unzip rsync \ networkmanager sudo git neovim curl wget unzip rsync \
$MICROCODE power-profiles-daemon thermald acpi acpid brightnessctl \ $MICROCODE power-profiles-daemon thermald acpi acpid brightnessctl \
pipewire pipewire-pulse pipewire-alsa pipewire-jack wireplumber \ pipewire pipewire-pulse pipewire-alsa pipewire-jack wireplumber \
@@ -140,7 +137,6 @@ genfstab -U /mnt >> /mnt/etc/fstab
echo "[INFO] Configuration du système..." echo "[INFO] Configuration du système..."
cat > /mnt/setup.sh << EOF cat > /mnt/setup.sh << EOF
#!/bin/bash #!/bin/bash
set -e
# Mise à jour de la keyring et du système # Mise à jour de la keyring et du système
echo "[INFO] Mise à jour de la keyring et du système..." echo "[INFO] Mise à jour de la keyring et du système..."
@@ -177,7 +173,7 @@ sed -i 's/^HOOKS=.*/HOOKS=(base systemd autodetect modconf block filesystems key
sed -i 's/^#COMPRESSION="zstd"/COMPRESSION="zstd"/' /etc/mkinitcpio.conf sed -i 's/^#COMPRESSION="zstd"/COMPRESSION="zstd"/' /etc/mkinitcpio.conf
mkinitcpio -P mkinitcpio -P
# Bootloader (systemd-boot) optimisé # Bootloader (systemd-boot)
bootctl --path=/boot install bootctl --path=/boot install
cat << LOADERCONF > /boot/loader/loader.conf cat << LOADERCONF > /boot/loader/loader.conf
timeout 0 timeout 0
@@ -203,7 +199,7 @@ options root=UUID=\$ROOT_UUID rw rootflags=compress=zstd:1 quiet loglevel=3 rd.s
ARCHOPTS ARCHOPTS
bootctl update bootctl update
# Services modernes pour laptop # Services modernes
systemctl enable NetworkManager systemctl enable NetworkManager
systemctl enable power-profiles-daemon systemctl enable power-profiles-daemon
systemctl enable thermald systemctl enable thermald
@@ -211,7 +207,7 @@ systemctl enable acpid
systemctl enable bluetooth systemctl enable bluetooth
# Configuration SWAP (Fichier d'échange de 4 Go compatible BTRFS) # Configuration SWAP (Fichier d'échange de 4 Go compatible BTRFS)
echo "[INFO] Création d'un swapfile de 4Go pour éviter le Out of Memory..." echo "[INFO] Création d'un swapfile de 4Go..."
truncate -s 0 /swapfile truncate -s 0 /swapfile
chattr +C /swapfile chattr +C /swapfile
fallocate -l 4G /swapfile fallocate -l 4G /swapfile
@@ -228,12 +224,11 @@ ExecStart=
ExecStart=-/usr/bin/agetty --autologin $USERNAME --noclear %I \$TERM ExecStart=-/usr/bin/agetty --autologin $USERNAME --noclear %I \$TERM
GETTYCONF GETTYCONF
# Configuration AUR (paru) et optimisation RAM # Configuration AUR (paru)
echo "[INFO] Configuration de sudo sans mot de passe temporaire..." echo "[INFO] Configuration de sudo sans mot de passe temporaire..."
echo "$USERNAME ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/temp echo "$USERNAME ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/temp
chmod 0440 /etc/sudoers.d/temp chmod 0440 /etc/sudoers.d/temp
# Préconfiguration de paru
mkdir -p /home/$USERNAME/.config/paru mkdir -p /home/$USERNAME/.config/paru
cat << PARUCONF > /home/$USERNAME/.config/paru/paru.conf cat << PARUCONF > /home/$USERNAME/.config/paru/paru.conf
[options] [options]
@@ -246,7 +241,7 @@ Makepkgflags = --noconfirm --skippgpcheck
PARUCONF PARUCONF
chown -R $USERNAME:$USERNAME /home/$USERNAME/.config/paru chown -R $USERNAME:$USERNAME /home/$USERNAME/.config/paru
echo "[INFO] Compilation de paru depuis les sources..." echo "[INFO] Compilation de paru..."
yes | sudo -u $USERNAME bash -c "cd /tmp && git clone https://aur.archlinux.org/paru.git && cd paru && makepkg -si --noconfirm --skippgpcheck" || echo "[WARNING] Paru install failed" yes | sudo -u $USERNAME bash -c "cd /tmp && git clone https://aur.archlinux.org/paru.git && cd paru && makepkg -si --noconfirm --skippgpcheck" || echo "[WARNING] Paru install failed"
if ! command -v paru &> /dev/null; then if ! command -v paru &> /dev/null; then
@@ -593,7 +588,7 @@ EOF
chmod +x /mnt/setup.sh chmod +x /mnt/setup.sh
arch-chroot /mnt /setup.sh arch-chroot /mnt /setup.sh
# Nettoyage # Nettoyage final
rm /mnt/setup.sh rm /mnt/setup.sh
umount -R /mnt umount -R /mnt