La demande initiale faisait télécharger un script depuis alpicache et l'exécuter en root sur la machine de chaque participant. Le relevé est désormais versionné ici, relu comme le reste, et appelé localement : rien n'est tiré du réseau, rien n'est exécuté sans avoir été publié. Le script vient de la session alpicache, éprouvé sur place. Il relève le modèle, le processeur, la mémoire et le détail de ses connecteurs, les disques et leur état SMART, puis envoie la fiche au serveur de la salle. Depuis une session live, il rend en plus un verdict — bon, avec réserves, ou ne pas installer — que le bénévole peut opposer à un disque qui faiblit pendant que la machine est encore là. install.sh l'appelle en tête de fichier, dans sa passe root, et seulement s'il le trouve à côté de lui : une machine qui rejoue le script chez son propriétaire n'envoie rien à personne. L'en-tête du relevé disait « rien qui touche à la personne ». C'était inexact : la fiche emporte le nom de la machine — souvent un prénom — et l'adresse matérielle de la carte réseau. Les deux sont maintenant nommés, dans le script comme dans le guide, avec la consigne qui va avec : le dire à la personne dont on installe l'ordinateur. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BE4rvHVETRoWnYNDTGssdo
398 lines
No EOL
13 KiB
Bash
398 lines
No EOL
13 KiB
Bash
#!/bin/bash
|
|
|
|
##################################################
|
|
# Fiche matérielle pour le serveur de l'install party
|
|
#
|
|
# Placée au début, et non à la fin : si un disque faiblit, autant le savoir
|
|
# avant d'avoir passé une heure à installer dessus — c'est le moment où l'on
|
|
# peut encore en parler à son propriétaire. Et si l'installation s'arrête en
|
|
# route, on a tout de même la fiche.
|
|
#
|
|
# Le relevé est le script voisin du dépôt, lu et versionné comme celui-ci :
|
|
# rien n'est téléchargé ni exécuté depuis le réseau. S'il n'est pas là, on
|
|
# passe — la machine d'un particulier qui rejoue ce script chez elle ne doit
|
|
# rien avoir à faire de tout ceci.
|
|
#
|
|
# C'est la seconde passe, celle que « sudo » relance, qui l'exécute :
|
|
# dmidecode et smartctl demandent les droits d'administration.
|
|
##################################################
|
|
|
|
if [ "$(id -u)" = "0" ] && [ -x "$(dirname "$0")/alpi-fiche.sh" ]; then
|
|
"$(dirname "$0")/alpi-fiche.sh" || true
|
|
fi
|
|
|
|
|
|
# Script de post-installation pour Linux Mint 22.3
|
|
# testé le 25/03/2026
|
|
#
|
|
# utilisation
|
|
# wget https://gitea.alpinux.org/alpinux.cedrica5l/alpinux-wiki/raw/branch/main/code/linux/linux-mint/install.sh
|
|
# && chmod +x install.sh
|
|
# && ./install.sh
|
|
|
|
|
|
GREEN=$'\e[32m'
|
|
NC=$'\e[0m'
|
|
|
|
abort() {
|
|
echo ""
|
|
echo ""
|
|
echo "Erreur : $1. Abandon" > /dev/stderr
|
|
exit 1
|
|
}
|
|
|
|
|
|
config_firefox_fr() {
|
|
echo -e "==> Configuration de Firefox en Français par défaut\n"
|
|
|
|
# Création d'un fichier de préférences globales pour Firefox
|
|
mkdir -p /usr/lib/firefox/browser/defaults/preferences
|
|
cat <<EOF > /usr/lib/firefox/browser/defaults/preferences/syspref.js
|
|
// Forcer la langue en Français
|
|
pref("intl.locale.requested", "fr");
|
|
// Activer le dictionnaire fr par défaut
|
|
pref("spellchecker.dictionary", "fr");
|
|
// Langues préférées pour les sites web
|
|
pref("intl.accept_languages", "fr, fr-fr, en-us, en");
|
|
// Activer les DRM (Netflix/Prime)
|
|
pref("media.eme.enabled", true);
|
|
EOF
|
|
}
|
|
|
|
|
|
config_libreoffice() {
|
|
echo -e "==> Vérification du support français LibreOffice\n"
|
|
# Le paquet l10n-fr installe l'interface, hunspell-fr installe le dictionnaire ABC
|
|
apt install -y libreoffice-l10n-fr hunspell-fr mythes-fr hyphen-fr
|
|
}
|
|
|
|
|
|
prepa_restauration_firefox() {
|
|
# Si on est en root via sudo, on récupère le vrai utilisateur
|
|
local ACTUAL_USER=${SUDO_USER:-$USER}
|
|
local ACTUAL_HOME=$(getent passwd "$ACTUAL_USER" | cut -d: -f6)
|
|
|
|
echo -e "==> Préparation du dossier Firefox pour $ACTUAL_USER\n"
|
|
|
|
# Création du dossier avec les bons droits
|
|
mkdir -p "$ACTUAL_HOME/.mozilla/firefox"
|
|
chown -R "$ACTUAL_USER:$ACTUAL_USER" "$ACTUAL_HOME/.mozilla"
|
|
|
|
echo "RAPPEL : Pour restaurer, copiez votre sauvegarde dans $ACTUAL_HOME/.mozilla/firefox/"
|
|
}
|
|
|
|
|
|
microcode() {
|
|
echo -e "==> Installation du microcode (Sécurité CPU)\n"
|
|
|
|
# Détection du fabricant du CPU
|
|
CPU_VENDOR=$(grep -m 1 'vendor_id' /proc/cpuinfo | awk '{print $3}')
|
|
|
|
case "$CPU_VENDOR" in
|
|
GenuineIntel)
|
|
echo "Processeur Intel détecté..."
|
|
apt install -y intel-microcode
|
|
;;
|
|
AuthenticAMD)
|
|
echo "Processeur AMD détecté..."
|
|
apt install -y amd64-microcode
|
|
;;
|
|
*)
|
|
echo "Fabricant inconnu ($CPU_VENDOR), saut de l'étape microcode."
|
|
;;
|
|
esac
|
|
}
|
|
|
|
|
|
|
|
opti_journald() {
|
|
echo -e "==> Optimizing system logs (Max 100MB)..."
|
|
|
|
# Use a regex that handles both commented and existing uncommented lines
|
|
sudo sed -i 's/^#\?SystemMaxUse=.*/SystemMaxUse=100M/' /etc/systemd/journald.conf
|
|
|
|
# Restart the daemon to apply changes
|
|
sudo systemctl restart systemd-journald
|
|
|
|
# Force immediate cleanup of logs older than the limit
|
|
sudo journalctl --vacuum-size=100M
|
|
|
|
echo -e "✅ Optimization complete.\n"
|
|
}
|
|
|
|
|
|
opti_fstab () {
|
|
echo -e "==> Optimisation du montage des disques (noatime)\n"
|
|
# Remplace relatime par noatime partout dans le fichier.
|
|
#
|
|
# ATTENTION : sans effet sur une installation Mint 22.3. Le fstab qu'écrit
|
|
# l'installateur ne mentionne ni « relatime » ni « noatime » — il s'en remet
|
|
# à « defaults », et relatime est le comportement par défaut du noyau. Il n'y
|
|
# a donc rien à substituer. Vérifié le 20/09/2026 sur une installation neuve.
|
|
# Pour poser réellement noatime, il faudrait ajouter l'option aux lignes
|
|
# concernées plutôt que d'en remplacer une qui n'y est pas.
|
|
sudo sed -i 's/relatime/noatime/g' /etc/fstab
|
|
}
|
|
|
|
|
|
opti_apt() {
|
|
# On s'assure d'avoir les droits root
|
|
if [[ $EUID -ne 0 ]]; then
|
|
echo "Erreur : Ce script doit être exécuté en tant que root (sudo)."
|
|
return 1
|
|
fi
|
|
|
|
echo -e "==> Optimisation du gestionnaire de paquets APT\n"
|
|
|
|
# 1. Supprime les fichiers .deb des paquets qui ne peuvent plus être téléchargés (obsolètes)
|
|
apt-get autoclean -y
|
|
|
|
# 2. Supprime la totalité du cache (ton code original)
|
|
apt-get clean
|
|
|
|
# 3. Supprime les dépendances inutilisées et leurs fichiers de config
|
|
apt-get autoremove --purge -y
|
|
|
|
# 4. Optionnel : Met à jour la liste des paquets pour repartir sur une base propre
|
|
# apt-get update
|
|
|
|
echo -e "\n[Terminé] Le système est plus léger !"
|
|
}
|
|
|
|
|
|
modif_systeme() {
|
|
|
|
configuration_apt
|
|
|
|
# Vérification Live USB
|
|
if [ -f "/cdrom/preseed/linuxmint.seed" ]; then
|
|
echo "Mode Live détecté. Fin du script."
|
|
exit 0
|
|
fi
|
|
|
|
install_logiciels
|
|
config_firefox_fr
|
|
config_timeshift_desactive
|
|
microcode
|
|
opti_journald
|
|
opti_fstab
|
|
modif_grub
|
|
|
|
mises_a_jour
|
|
|
|
config_libreoffice
|
|
prepa_restauration_firefox
|
|
|
|
echo -e "==> Optimisation du Swappiness\n"
|
|
sysctl vm.swappiness=10
|
|
echo 'vm.swappiness=10' > /etc/sysctl.d/99-swappiness.conf
|
|
|
|
opti_apt
|
|
|
|
}
|
|
|
|
|
|
config_timeshift_desactive() {
|
|
echo -e "==> Désactivation des sauvegardes automatiques Timeshift\n"
|
|
|
|
# 1. On récupère l'UUID de la partition qui contient /home
|
|
# Si /home n'est pas une partition séparée, findmnt remontera à la racine /
|
|
HOME_DEV=$(findmnt -n -o SOURCE /home)
|
|
HOME_UUID=$(blkid -s UUID -o value "$HOME_DEV")
|
|
|
|
# 2. On s'assure que le dossier de config existe
|
|
mkdir -p /etc/timeshift
|
|
|
|
# 3. Écriture du JSON avec l'UUID détecté
|
|
cat <<EOF > /etc/timeshift/timeshift.json
|
|
{
|
|
"backup_device_uuid" : "$HOME_UUID",
|
|
"parent_uuid" : "",
|
|
"do_first_run" : "false",
|
|
"btrfs_mode" : "false",
|
|
"include_btrfs_home_for_snapshots" : "false",
|
|
"include_btrfs_home_for_restore" : "false",
|
|
"stop_cron_emails" : "true",
|
|
"schedule_monthly" : "false",
|
|
"schedule_weekly" : "false",
|
|
"schedule_daily" : "false",
|
|
"schedule_hourly" : "false",
|
|
"schedule_boot" : "false",
|
|
"count_monthly" : "0",
|
|
"count_weekly" : "0",
|
|
"count_daily" : "0",
|
|
"count_hourly" : "0",
|
|
"count_boot" : "0",
|
|
"snapshot_list" : [ ]
|
|
}
|
|
EOF
|
|
|
|
echo "Timeshift configuré sur la partition $HOME_DEV (UUID: $HOME_UUID) avec planning désactivé."
|
|
}
|
|
|
|
|
|
##########################################################
|
|
# Mises à jour et installation des logiciels utilisateur #
|
|
##########################################################
|
|
|
|
# Installation des polices Microsoft. On le fait au début pour pouvoir vite
|
|
# accepter l'EULA et pouvoir aller boire un café :-)
|
|
# L'astuce d'utiliser DEBIAN_FRONTEND=noninteractive ne marche plus, il faudrait
|
|
# préconfigurer debconf pour éviter d'avoir à répondre ici
|
|
install_logiciels() {
|
|
echo -e "==> Installation des polices Microsoft\n"
|
|
|
|
# 1. On pré-accepte la licence dans la base de données debconf
|
|
echo "ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true" | debconf-set-selections
|
|
|
|
# 2. On installe en forçant le mode non-interactif pour ignorer toute autre question
|
|
DEBIAN_FRONTEND=noninteractive apt install -y ttf-mscorefonts-installer || abort "problème lors de l'installation des polices"
|
|
|
|
# mise à jour du système
|
|
echo -e "==> Mise à jour du système\n"
|
|
apt update || abort "impossible de récupérer les informations des dépôts"
|
|
apt full-upgrade -y || abort "erreur lors de la mise à jour des paquets"
|
|
|
|
# installation de logiciels utilisateurs indispensables ou juste très utiles
|
|
# - backintime-qt pour avoir un bon logiciel de sauvegardes
|
|
# - brasero pour graver
|
|
# - cheese pour tester la webcam
|
|
# - fonts-contarell et fonts-linuxlibertine parce qu'elles sont jolies et complètes
|
|
# - keepassxc pour gérer les mots de passe
|
|
# - nemo-image-converter pour rapidement réduire des images pour l'envoi par mail
|
|
# - pdfarranger pour découper / assembler des PDF
|
|
# - verbiste-gnome pour la conjugaison
|
|
# - gparted pour organiser le partitionnement des disques
|
|
# - vlc pour lire les fichiers audio et vidéos
|
|
# - vnstat statisitques utilisation réseau
|
|
# - iftop afficher les connexions instantannée
|
|
# - numlockx activation du pavé numérique en X11
|
|
echo -e "==> Installation des programmes complémentaires\n"
|
|
apt install -y \
|
|
backintime-qt \
|
|
cheese \
|
|
fonts-cantarell fonts-linuxlibertine \
|
|
nemo-image-converter \
|
|
pdfarranger \
|
|
verbiste-gnome \
|
|
gparted \
|
|
vlc \
|
|
vnstat \
|
|
iftop \
|
|
numlockx \
|
|
hunspell-fr \
|
|
mint-meta-codecs \
|
|
tesseract-ocr tesseract-ocr-fra \
|
|
shotwell \
|
|
puddletag \
|
|
stacer \
|
|
|| abort "problème lors de l'installation des logiciels utilisateurs"
|
|
|
|
|
|
# Ajout du dépôt au niveau système (accessible à tous)
|
|
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
|
|
# Installation au niveau système de KeePassXC
|
|
flatpak install -y flathub org.keepassxc.KeePassXC
|
|
flatpak install -y flathub com.github.tchx84.Flatseal
|
|
|
|
|
|
# Installation de tous les paquets de langue
|
|
echo -e "==> Installation du support français pour les programmes déjà installés\n"
|
|
apt install -y language-selector-common
|
|
apt install -y $(check-language-support -l fr)
|
|
|
|
echo -e "==> Francisation de Firefox (.deb)\n"
|
|
# On installe le paquet de langue officiel des dépôts Mint/Ubuntu
|
|
apt install -y firefox-locale-fr || echo "Note: Impossible d'installer le pack FR pour Firefox apt."
|
|
# curl -L -o /usr/lib/firefox/distribution/extensions/dictionnaire-francais.xpi https://addons.mozilla.org/fr/firefox/downloads/latest/1750/addon-1750-latest.xpi
|
|
# sed -i 's/preferredDictionary =.*/preferredDictionary = fr/' /usr/lib/firefox-*/dictionaries/dictionaries.xml
|
|
}
|
|
################
|
|
# Mises à jour #
|
|
################
|
|
mises_a_jour() {
|
|
echo -e "==> Configuration de dconf\n"
|
|
# Configuration de dconf pour permettre de modifier certaines configurations
|
|
# par défaut
|
|
mkdir -p /etc/dconf/profile
|
|
echo -e\
|
|
"user-db:user\n"\
|
|
"system-db:local" > /etc/dconf/profile/user
|
|
mkdir -p /etc/dconf/db/local.d
|
|
|
|
# Ne pas demander à l'utilisateur l'utilisation de dépôts locaux
|
|
echo -e \
|
|
"[com/linuxmint/updates]\n"\
|
|
"default-repo-is-ok=true" > /etc/dconf/db/local.d/00-alpinux
|
|
|
|
dconf update
|
|
|
|
}
|
|
|
|
|
|
# Fonctions Utilisateur (SANS sudo)
|
|
personnalisation_utilisateur() {
|
|
echo -e "${GREEN}==> Personnalisation de l'environnement (User: $USER)${NC}"
|
|
# Cinnamon / Nemo
|
|
dconf write /org/nemo/desktop/trash-icon-visible true
|
|
dconf write /org/nemo/desktop/home-icon-visible true
|
|
dconf write /org/cinnamon/desktop/interface/clock-show-date true
|
|
dconf write /org/cinnamon/desktop/interface/first-day-of-week 1
|
|
# Note: sudo dconf update n'est pas nécessaire pour les clés utilisateur locales
|
|
}
|
|
|
|
|
|
configuration_apt() {
|
|
echo -e "==> Mise à jour de la liste des dépots\n"
|
|
apt update
|
|
# Met à jour les langues pour toutes les applications Flatpak installées
|
|
flatpak update -y
|
|
|
|
# Configuration de apt-proxy
|
|
echo -e "==> Configuration de apt-proxy\n"
|
|
apt install -y auto-apt-proxy || abort "Échec de l'installation d'auto-apt-proxy"
|
|
echo 'Acquire::http::ProxyAutoDetect "auto-apt-proxy";' > /etc/apt/apt.conf.d/01proxy
|
|
|
|
}
|
|
|
|
###############################################################
|
|
# GRUB : sélection automatique de la dernière entrée utilisée #
|
|
###############################################################
|
|
modif_grub() {
|
|
echo -e "==> Modification de GRUB\n"
|
|
# On comment la ligne "GRUB_DEFAULT=0" et on ajoute les "bonnes" options
|
|
sed -i '/^GRUB_DEFAULT=0/ i#GRUB_DEFAULT=0\
|
|
GRUB_DEFAULT=saved\
|
|
GRUB_SAVEDEFAULT=true' /etc/default/grub
|
|
# On met à jour GRUB
|
|
update-grub
|
|
}
|
|
|
|
|
|
del_itself() {
|
|
# On ne supprime que si c'est un fichier physique existant
|
|
if [ -f "$0" ]; then
|
|
echo -e "\n==> Nettoyage : Suppression du script d'installation..."
|
|
rm "$0"
|
|
fi
|
|
}
|
|
|
|
|
|
##############################
|
|
# Auto-destruction du script #
|
|
##############################
|
|
|
|
if [ "$(id -u)" != "0" ]; then
|
|
personnalisation_utilisateur
|
|
# On relance le script en root pour la partie système
|
|
if sudo "$0" "$@"; then
|
|
echo -e "\nInstallation terminée avec succès !"
|
|
del_itself
|
|
else
|
|
echo -e "\nErreur lors de l'exécution en root."
|
|
exit 1
|
|
fi
|
|
else
|
|
modif_systeme
|
|
echo -e "\n${GREEN}Terminé ! Un redémarrage est conseillé.${NC}"
|
|
fi |