alpinux.scripts/poste/verif-disque.sh
Cédrix a95139d6ae Donner à ces scripts un dépôt qui dit ce qu'ils sont
Ces trois fichiers vivaient dans le dépôt du wiki, seuls fichiers exécutables
parmi cent dix pages de documentation. Le wiki est public et sa branche main
n'est pas protégée ; le serveur de l'install party en recopie deux toutes les
heures et les distribue en root aux machines des participants. Un commit de
documentation et un commit de code y avaient donc les mêmes conséquences, et
rien ne le disait.

Ils sont désormais chez eux, classés par contexte d'exécution — qui les lance,
sur quelle machine, avec quels droits — et non par distribution : « poste/ »
tient les trois ensemble, ce qu'impose de toute façon l'appel du relevé par
install.sh, qui le cherche à côté de lui.

La branche stable est ce que les machines reçoivent, main ce sur quoi on
travaille. Avancer l'une sur l'autre demande d'avoir essayé sur une machine :
c'est le relecteur qui manquait.

L'historique des trois fichiers est conservé, depuis la migration du monorepo
alpinux.site.2026 en mai. Les adresses de téléchargement de leurs en-têtes
sont reprises.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BssvzfDMeXVoUQHEcnavW7
2026-09-25 23:50:38 +02:00

236 lines
11 KiB
Bash
Executable file

#!/bin/bash
#
# Alpinux — état des lieux d'une machine avant d'installer Linux Mint
#
# À lancer depuis la session live, AVANT de toucher au disque :
# wget https://gitea.alpinux.org/alpinux.cedrica5l/alpinux.scripts/raw/branch/stable/poste/verif-disque.sh
# chmod +x verif-disque.sh
# ./verif-disque.sh
#
# Ou, sur le réseau de l'install party :
# wget http://10.0.0.1/verif-disque.sh && chmod +x verif-disque.sh && ./verif-disque.sh
#
# Le script ne modifie RIEN : il lit, il affiche, il conseille. Il peut s'exécuter
# sans droits d'administration, mais plusieurs vérifications les demandent : il
# relance alors sudo de lui-même.
#
# testé le 20/09/2026 sur Linux Mint 22.3 Cinnamon
set -u
VERT=$'\e[32m'; ROUGE=$'\e[31m'; ORANGE=$'\e[33m'; GRAS=$'\e[1m'; RAZ=$'\e[0m'
titre() { printf '\n%s%s%s\n' "$GRAS" "$1" "$RAZ"; printf '%s\n' "${1//?/─}"; }
ok() { printf ' %s✓%s %s\n' "$VERT" "$RAZ" "$1"; }
attention(){ printf ' %s!%s %s\n' "$ORANGE" "$RAZ" "$1"; }
probleme(){ printf ' %s✗%s %s\n' "$ROUGE" "$RAZ" "$1"; }
info() { printf ' %s\n' "$1"; }
# Les alertes collectées en chemin, résumées à la fin.
AVERTISSEMENTS=()
BLOQUANTS=()
if [ "$(id -u)" != "0" ]; then
echo "Certaines vérifications demandent les droits d'administration."
exec sudo -- "$0" "$@"
fi
printf '%s\n' "════════════════════════════════════════════════════════════"
printf '%s\n' " Alpinux — état des lieux avant installation"
printf '%s\n' " $(date '+%d/%m/%Y %H:%M')"
printf '%s\n' "════════════════════════════════════════════════════════════"
# ─────────────────────────────────────────────────────────────────────
titre "La machine"
MODELE="$(cat /sys/devices/virtual/dmi/id/sys_vendor 2>/dev/null) $(cat /sys/devices/virtual/dmi/id/product_name 2>/dev/null)"
info "Modèle : ${MODELE:-inconnu}"
info "Processeur : $(grep -m1 'model name' /proc/cpuinfo | cut -d: -f2- | sed 's/^ //')"
if grep -qw lm /proc/cpuinfo; then
ok "Processeur 64 bits"
else
probleme "Processeur 32 bits : Linux Mint ne s'installera pas"
BLOQUANTS+=("Processeur 32 bits — voir Debian ou LMDE")
fi
RAM_MO=$(( $(grep MemTotal /proc/meminfo | tr -dc '0-9') / 1024 ))
info "Mémoire vive : ${RAM_MO} Mo"
if [ "$RAM_MO" -lt 2000 ]; then
probleme "Moins de 2 Go : en dessous du minimum de Linux Mint"
BLOQUANTS+=("RAM insuffisante (${RAM_MO} Mo)")
elif [ "$RAM_MO" -lt 4000 ]; then
attention "Moins de 4 Go : conseillez l'édition Xfce plutôt que Cinnamon"
AVERTISSEMENTS+=("RAM de ${RAM_MO} Mo — édition Xfce conseillée")
else
ok "Mémoire suffisante pour l'édition Cinnamon"
fi
# ─────────────────────────────────────────────────────────────────────
titre "Le mode de démarrage"
if [ -d /sys/firmware/efi ]; then
ok "Démarrage en UEFI — le disque sera en GPT, avec une partition EFI"
MODE=UEFI
SB=/sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c
if [ -r "$SB" ]; then
if [ "$(od -An -t u1 "$SB" 2>/dev/null | awk '{print $5}')" = "1" ]; then
attention "Secure Boot actif : à désactiver si un pilote propriétaire est nécessaire"
AVERTISSEMENTS+=("Secure Boot actif")
else
ok "Secure Boot désactivé"
fi
fi
else
attention "Démarrage en BIOS hérité — le disque sera en MBR, sans partition EFI"
MODE=BIOS
AVERTISSEMENTS+=("Machine démarrée en mode BIOS hérité")
fi
# ─────────────────────────────────────────────────────────────────────
titre "Les disques"
mapfile -t DISQUES < <(lsblk -dn -o NAME,TYPE | awk '$2=="disk"{print $1}')
NB_DISQUES=${#DISQUES[@]}
if [ "$NB_DISQUES" -eq 0 ]; then
probleme "Aucun disque détecté"
BLOQUANTS+=("Aucun disque vu par le système — contrôleur SATA en RAID/Intel RST ?")
elif [ "$NB_DISQUES" -gt 1 ]; then
attention "$NB_DISQUES disques présents : identifiez le bon avant de partitionner"
AVERTISSEMENTS+=("$NB_DISQUES disques — risque d'effacer le mauvais")
fi
for d in "${DISQUES[@]}"; do
TAILLE=$(lsblk -dn -o SIZE "/dev/$d" | tr -d ' ')
ROT=$(cat "/sys/block/$d/queue/rotational" 2>/dev/null)
TYPE=$([ "$ROT" = "0" ] && echo "SSD/NVMe" || echo "disque mécanique")
TABLE=$(blkid -p -s PTTYPE -o value "/dev/$d" 2>/dev/null || echo "aucune")
printf '\n %s/dev/%s%s — %s, %s, table %s\n' "$GRAS" "$d" "$RAZ" "$TAILLE" "$TYPE" "${TABLE:-aucune}"
lsblk -o NAME,SIZE,FSTYPE,LABEL,FSUSE%,MOUNTPOINT "/dev/$d" | sed '1d;s/^/ /'
TAILLE_GO=$(( $(lsblk -dbn -o SIZE "/dev/$d") / 1000000000 ))
if [ "$TAILLE_GO" -lt 11 ]; then
probleme " Moins de 11 Go : l'installateur refusera de démarrer"
BLOQUANTS+=("/dev/$d trop petit (${TAILLE_GO} Go)")
elif [ "$TAILLE_GO" -lt 30 ]; then
attention " ${TAILLE_GO} Go : installable, mais en dessous des 30 Go conseillés"
AVERTISSEMENTS+=("/dev/$d de ${TAILLE_GO} Go seulement")
fi
if [ "$MODE" = "UEFI" ] && [ "$TABLE" = "dos" ]; then
attention " Machine en UEFI mais disque en MBR : table à refaire en GPT"
AVERTISSEMENTS+=("/dev/$d en MBR alors que la machine démarre en UEFI")
fi
done
# ─────────────────────────────────────────────────────────────────────
titre "Ce qui est déjà installé"
TROUVE_WINDOWS=0
TROUVE_LINUX=0
while read -r part type; do
[ -z "$part" ] && continue
case "$type" in
BitLocker)
probleme "$part : partition chiffrée par BitLocker"
BLOQUANTS+=("$part chiffrée BitLocker — suspendre le chiffrement depuis Windows AVANT de toucher au disque")
TROUVE_WINDOWS=1
;;
ntfs)
TROUVE_WINDOWS=1
ETIQUETTE=$(blkid -s LABEL -o value "$part" 2>/dev/null)
ok "$part : partition Windows (NTFS)${ETIQUETTE:+ — « $ETIQUETTE »}"
POINT=$(mktemp -d)
if mount -o ro,noexec,nosuid "$part" "$POINT" 2>/dev/null; then
[ -f "$POINT/hiberfil.sys" ] && {
attention " hiberfil.sys présent : Windows est en veille prolongée ou en démarrage rapide"
AVERTISSEMENTS+=("$part : désactiver le démarrage rapide de Windows, puis arrêt complet")
}
[ -d "$POINT/Windows" ] && info " Windows installé sur cette partition"
umount "$POINT" 2>/dev/null
else
attention " Montage impossible en lecture seule : partition sale, chiffrée, ou mal démontée"
AVERTISSEMENTS+=("$part illisible — Windows mal arrêté ?")
fi
rmdir "$POINT" 2>/dev/null
;;
ext4|ext3|btrfs|xfs)
ETIQUETTE=$(blkid -s LABEL -o value "$part" 2>/dev/null)
ok "$part : partition Linux ($type)${ETIQUETTE:+ — « $ETIQUETTE »}"
TROUVE_LINUX=1
;;
vfat)
if [ "$(blkid -s PARTLABEL -o value "$part" 2>/dev/null)" = "EFI system partition" ] \
|| [ "$(lsblk -no PARTTYPENAME "$part" 2>/dev/null)" = "EFI System" ]; then
ok "$part : partition EFI existante — à réutiliser, pas à recréer"
fi
;;
crypto_LUKS)
attention "$part : partition chiffrée LUKS"
AVERTISSEMENTS+=("$part chiffrée (LUKS) — récupérer la phrase de passe avant d'effacer")
;;
esac
done < <(lsblk -pnl -o NAME,FSTYPE | awk 'NF==2 && $1 ~ /[0-9]$/')
[ "$TROUVE_WINDOWS" = "0" ] && info "Aucune partition Windows détectée."
if [ "$TROUVE_LINUX" = "1" ]; then
attention "Un système Linux occupe déjà ce disque"
AVERTISSEMENTS+=("Linux déjà installé — sauvegarder /home avant de réinstaller")
fi
# ─────────────────────────────────────────────────────────────────────
titre "Santé des disques"
if command -v smartctl >/dev/null; then
for d in "${DISQUES[@]}"; do
SANTE=$(smartctl -H "/dev/$d" 2>/dev/null | grep -Ei 'overall-health|SMART Health' | cut -d: -f2- | sed 's/^ *//')
case "$SANTE" in
*PASSED*|*OK*) ok "/dev/$d : $SANTE" ;;
"") info "/dev/$d : pas d'information SMART (disque virtuel, USB, ou contrôleur muet)" ;;
*) probleme "/dev/$d : $SANTE"
BLOQUANTS+=("/dev/$d signalé défaillant par SMART — ne pas installer dessus") ;;
esac
REALLOC=$(smartctl -A "/dev/$d" 2>/dev/null | awk '/Reallocated_Sector_Ct/{print $10}')
if [ -n "${REALLOC:-}" ] && [ "$REALLOC" -gt 0 ] 2>/dev/null; then
attention "/dev/$d : $REALLOC secteurs réalloués — disque fatigué"
AVERTISSEMENTS+=("/dev/$d : $REALLOC secteurs réalloués")
fi
done
else
info "smartmontools absent de la session live."
info "Pour l'ajouter : sudo apt update && sudo apt install -y smartmontools"
fi
# ─────────────────────────────────────────────────────────────────────
titre "Réseau"
if ping -c1 -W3 archive.ubuntu.com >/dev/null 2>&1; then
ok "Connexion à Internet fonctionnelle (mises à jour et codecs téléchargeables)"
else
attention "Pas d'accès à Internet : branchez le câble réseau avant d'installer"
AVERTISSEMENTS+=("Pas de réseau — codecs et mises à jour ne s'installeront pas")
fi
# ─────────────────────────────────────────────────────────────────────
titre "Conclusion"
if [ ${#BLOQUANTS[@]} -gt 0 ]; then
printf ' %s%sÀ RÉGLER AVANT D'"'"'INSTALLER%s\n' "$GRAS" "$ROUGE" "$RAZ"
for b in "${BLOQUANTS[@]}"; do printf ' %s✗%s %s\n' "$ROUGE" "$RAZ" "$b"; done
echo
fi
if [ ${#AVERTISSEMENTS[@]} -gt 0 ]; then
printf ' %s%sÀ SAVOIR%s\n' "$GRAS" "$ORANGE" "$RAZ"
for a in "${AVERTISSEMENTS[@]}"; do printf ' %s!%s %s\n' "$ORANGE" "$RAZ" "$a"; done
echo
fi
if [ ${#BLOQUANTS[@]} -eq 0 ] && [ ${#AVERTISSEMENTS[@]} -eq 0 ]; then
printf ' %s✓%s Rien ne s'"'"'oppose à l'"'"'installation.\n\n' "$VERT" "$RAZ"
fi
printf ' Dans le doute, montrez cet écran à un bénévole avant de continuer.\n'
printf ' Guide complet : https://wiki.alpinux.org/guides/linux-mint-depuis-windows/\n\n'