commit 75bc1eb4fc96b3ea5180ca61e654216a94a02b4f Author: Alpinux Date: Sun May 3 17:48:11 2026 +0200 initial commit — migration depuis monorepo alpinux.site.2026 diff --git a/poste/install.sh b/poste/install.sh new file mode 100644 index 0000000..fc0c134 --- /dev/null +++ b/poste/install.sh @@ -0,0 +1,365 @@ +#!/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 < /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 < /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 \ + 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 "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 \ No newline at end of file