alpinux.site.2026/code/linux/linux-mint/install.sh
2026-03-26 00:42:10 +01:00

355 lines
11 KiB
Bash

#!/bin/bash
# Script de post-installation pour Linux Mint 22.3
# testé le 25/03/2026
#
# utilisation
# wget https://gitea.alpinux.org/alpinux.cedrica5l/alpinux.site.2026/raw/branch/main/code/linux/linux-mint/install.sh
# && chmod +x install.sh
# && ./install.sh
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"
# Replaces relatime with noatime everywhere in the file
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
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 "==> 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 \
brasero \
cheese \
fonts-cantarell fonts-linuxlibertine \
keepassxc \
nemo-image-converter \
pdfarranger \
verbiste-gnome \
gparted \
vlc \
vnstat \
iftop \
numlockx \
hunspell-fr \
mint-meta-codecs \
|| abort "problème lors de l'installation des logiciels utilisateurs"
# 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 "Configuraiton 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