From ccb31a2204b7c28bdd395792d6ca09f53b5f2687 Mon Sep 17 00:00:00 2001 From: Puechberty Arthur Date: Thu, 30 Jul 2026 21:40:06 +0200 Subject: [PATCH] =?UTF-8?q?Am=C3=A9lioration=20du=20script=20d'installatio?= =?UTF-8?q?n=20:=20renforcement=20de=20la=20s=C3=A9curit=C3=A9=20lors=20du?= =?UTF-8?q?=20nettoyage=20des=20disques,=20simplification=20des=20messages?= =?UTF-8?q?=20d'erreur,=20et=20nettoyage=20cibl=C3=A9=20des=20partitions?= =?UTF-8?q?=20avant=20le=20formatage.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- install.sh | 42 +++++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/install.sh b/install.sh index 4632e4b..0865e54 100644 --- a/install.sh +++ b/install.sh @@ -49,13 +49,12 @@ fi echo "[INFO] Nettoyage nucléaire de $DISK..." -# Sécurité : empêcher de formater le disque système ou le Live USB +# Sécurité ultime : Vérifier si le disque cible n'est pas le Live USB ou un disque système monté if findmnt --source "$DISK" -n -o TARGET > /dev/null 2>&1; then - MOUNT_TARGET=$(findmnt --source "$DISK" -n -o TARGET) - if [[ "$MOUNT_TARGET" == "/" || "$MOUNT_TARGET" == "/run/archiso"* ]]; then - echo "[ERROR] Le disque $DISK est actuellement utilisé par le système ($MOUNT_TARGET)." - exit 1 - fi + echo "[ERROR] Le disque $DISK est actuellement monté et utilisé par le système !" + echo " Si tu es sur le Live USB, ton disque cible n'est pas $DISK." + echo " Tape 'lsblk' pour trouver le bon disque (ex: /dev/nvme0n1 ou /dev/sdb)." + exit 1 fi # Démonter tout ce qui traîne @@ -63,6 +62,11 @@ umount -R /mnt 2>/dev/null umount -lf /mnt 2>/dev/null lsblk -lnpo NAME "$DISK" 2>/dev/null | xargs -I {} umount -lf {} 2>/dev/null +# Tuer de force tous les processus qui utilisent le disque ou ses partitions +fuser -ck "$DISK" 2>/dev/null +fuser -ck "$PART_EFI" 2>/dev/null +fuser -ck "$PART_ROOT" 2>/dev/null + # Arrêter les volumes chiffrés, LVM, et RAID cryptsetup close --all 2>/dev/null vgchange -an 2>/dev/null @@ -70,15 +74,12 @@ mdadm --stop --scan 2>/dev/null dmsetup remove_all 2>/dev/null swapoff -a 2>/dev/null -# Nettoyer les signatures avec boucle de réessai (pour les BIOS Dell récalcitrants) -for i in {1..3}; do - wipefs -a -f "$DISK"* 2>/dev/null - wipefs -a -f "$DISK" 2>/dev/null - sgdisk --zap-all "$DISK" 2>/dev/null - sleep 1 -done +# Nettoyer les signatures +wipefs -a -f "$DISK"* 2>/dev/null +wipefs -a -f "$DISK" 2>/dev/null +sgdisk --zap-all "$DISK" 2>/dev/null -# Destruction physique (DD) du début et de la fin du disque +# Destruction physique ciblée (DD) du début, de la fin et des partitions spécifiques echo "[INFO] Effacement physique des données (DD)..." DISK_SIZE_SECTORS=$(blockdev --getsz "$DISK") dd if=/dev/zero of="$DISK" bs=1M count=10 conv=fsync oflag=direct 2>/dev/null @@ -88,7 +89,7 @@ dd if=/dev/zero of="$DISK" bs=512 count=10 seek=$((DISK_SIZE_SECTORS - 10)) conv partprobe "$DISK" 2>/dev/null blockdev --rereadpt "$DISK" 2>/dev/null udevadm settle -sleep 5 +sleep 3 echo "[INFO] Création des nouvelles partitions sur $DISK..." sgdisk -o "$DISK" @@ -98,7 +99,7 @@ sgdisk -n 2:0:0 -t 2:8300 "$DISK" # Attente critique pour que le noyau crée les fichiers de périphériques partprobe "$DISK" 2>/dev/null udevadm settle -sleep 5 +sleep 3 if [ ! -b "$PART_EFI" ] || [ ! -b "$PART_ROOT" ]; then echo "[ERROR] Les partitions $PART_EFI ou $PART_ROOT n'existent pas." @@ -109,6 +110,14 @@ echo "[OK] Partitions créées : EFI=$PART_EFI, ROOT=$PART_ROOT" # 5. Formatage et Montage BTRFS optimisé echo "[INFO] Formatage BTRFS et FAT32..." + +# Nettoyage chirurgical des partitions spécifiques juste avant le formatage +wipefs -a -f "$PART_EFI" 2>/dev/null +wipefs -a -f "$PART_ROOT" 2>/dev/null +dd if=/dev/zero of="$PART_ROOT" bs=1M count=5 conv=fsync oflag=direct 2>/dev/null +dd if=/dev/zero of="$PART_EFI" bs=1M count=2 conv=fsync oflag=direct 2>/dev/null +sleep 2 + mkfs.fat -F32 "$PART_EFI" mkfs.btrfs -f "$PART_ROOT" @@ -117,7 +126,6 @@ mkdir -p /mnt/boot mount "$PART_EFI" /mnt/boot # 6. Installation du système strict minimum et optimisé -# CORRECTION MAJEURE : --noconfirm est placé JUSTE APRÈS pacstrap echo "[INFO] Installation des paquets officiels..." pacstrap --noconfirm /mnt base base-devel linux-zen linux-zen-headers linux-firmware btrfs-progs \ networkmanager sudo git neovim curl wget unzip rsync \