Catégorie : Ubuntu

26 décembre 2025 /

Fonctionnalités du script

Système de base:

  • ✅ LVM /home (UUID, backup, montage auto)
  • ✅ DNS Google (8.8.8.8, 8.8.4.4)
  • ✅ GRUB dual-boot (10s timeout)
  • ✅ Vim éditeur par défaut

Stockage et partages:

  • ✅ 14 partages NAS (fstab + automount)
  • ✅ Credentials sécurisés (chmod 600)
  • ✅ Signets Nautilus avec emojis
  • ✅ Redirection XDG intelligente

Environnement développement:

  • ✅ Docker Engine (dépôt officiel)
  • ✅ Docker Compose V2
  • ✅ KVM/libvirt/virt-manager
  • ✅ Ansible
  • ✅ scanmem, default-jdk

Applications:

  • ✅ Google Chrome (dépôt auto)
  • ✅ Steam (dépôt officiel)
  • ✅ VirtualBox + Guest Additions ISO
  • ✅ Discord, VLC (Flatpak)
  • ✅ Suite bureautique complète

Optimisations:

  • ✅ Historique Bash 500K lignes
  • ✅ Sudo sans mot de passe
  • ✅ Veille désactivée
  • ✅ UFW désactivé
  • ✅ Journal systemd limité (500M)

Automatisations:

  • ✅ Nettoyage hebdomadaire (dimanche 3h)
  • ✅ MAJ quotidiennes (APT + Snap + Flatpak)
  • ✅ Docker cleanup (sans volumes)
  • ✅ Logs détaillés

Interface:

  • ✅ GSConnect (KDE Connect Android)
  • ✅ Nautilus optimisé
  • ✅ Extensions GNOME détectées
  • ✅ Signets personnalisés

Commande d’exécution :

sudo bash post-install.sh 2>&1 | tee post-install.log

#!/bin/bash
################################################################################
# Script de post-installation Ubuntu 24.04 LTS
#
# Description : Configure automatiquement un système Ubuntu fraîchement installé
# avec montage /home sur LVM (via UUID), montage NAS via fstab,
# optimisations système, et automatisations
#
# Auteur : Romain J.
# Version : 5.9
# Date : 2025
#
# Utilisation : sudo bash post-install.sh 2>&1 | tee post-install.log
################################################################################

set -e # Arrêter le script en cas d’erreur critique

################################################################################
# VARIABLES DE CONFIGURATION
################################################################################

UTILISATEUR= »starmate »
BASHRC_USER= »/home/$UTILISATEUR/.bashrc »

# Configuration NAS
NAS_IP= »IP_DU_NAS » # ⚠️ À REMPLACER AVANT EXÉCUTION
NAS_PASSWORD= »VOTRE_MOT_DE_PASSE_ICI » # ⚠️ À REMPLACER AVANT EXÉCUTION
NAS_PARTAGES=(animation documents downloads films Imprimante jeux livres musique perso photographie sauvegarde seriestv surveillance Technique)
NAS_CREDENTIALS= »/root/.smbcredentials »

# Montage /home sur LVM
LVM_HOME_DEVICE= »/dev/home-vg/home_lv »

################################################################################
# VÉRIFICATIONS PRÉALABLES
################################################################################

echo « ========================================== »
echo  » POST-INSTALLATION UBUNTU 24.04 LTS »
echo « ========================================== »
echo «  »
echo « Vérifications préalables… »

if [ « $EUID » -ne 0 ]; then
echo « ❌ Erreur : Ce script doit être exécuté en root (sudo) »
exit 1
fi

if ! id « $UTILISATEUR » &>/dev/null; then
echo « ❌ Erreur : L’utilisateur $UTILISATEUR n’existe pas »
exit 1
fi

USER_UID=$(id -u « $UTILISATEUR »)
USER_GID=$(id -g « $UTILISATEUR »)
echo « ✓ Utilisateur détecté : $UTILISATEUR (UID: $USER_UID, GID: $USER_GID) »

if [ « $NAS_PASSWORD » = « VOTRE_MOT_DE_PASSE_ICI » ]; then
echo « ❌ Erreur : Veuillez modifier le mot de passe NAS dans le script avant de l’exécuter »
exit 1
fi

CONNEXION_NET=$(nmcli -t -f NAME,DEVICE connection show –active | grep -E ‘enp|eth’ | cut -d: -f1 | head -n1)
if [ -z « $CONNEXION_NET » ]; then
echo « ❌ Erreur : Aucune connexion réseau filaire active détectée »
exit 1
fi
echo « ✓ Connexion réseau active : $CONNEXION_NET »
echo «  »

################################################################################
# 1. CONFIGURATION DU MONTAGE DE /HOME SUR LVM VIA UUID (EN PREMIER !)
################################################################################

echo « [1/23] Configuration du montage de /home sur LVM (via UUID)… »
echo « ——————————————————- »

# Récupération de l’UUID du volume LVM
HOME_UUID=$(blkid -s UUID -o value « $LVM_HOME_DEVICE » 2>/dev/null || true)

if [ -z « $HOME_UUID » ]; then
echo « ⚠ Impossible de récupérer l’UUID de $LVM_HOME_DEVICE »
echo  » Utilisation du nom de device (moins fiable) : $LVM_HOME_DEVICE »
LVM_ENTRY= »$LVM_HOME_DEVICE /home ext4 defaults 0 2″
else
echo « ✓ UUID trouvé pour /home : $HOME_UUID »
LVM_ENTRY= »UUID=$HOME_UUID /home ext4 defaults 0 2″
fi

if grep -q « /home[[:space:]] » /etc/fstab | grep -q -v « ^# » && ! grep -q « ^$LVM_ENTRY » /etc/fstab; then
echo « ⚠ Une entrée /home existe déjà dans fstab, mais pas avec le bon UUID/device LVM »
echo  » Sauvegarde et remplacement… »
cp /etc/fstab /etc/fstab.backup.$(date +%Y%m%d_%H%M%S)
sed -i « \|^[^#].*/home[[:space:]]|d » /etc/fstab # Supprime l’ancienne entrée /home
fi

if grep -q « ^$LVM_ENTRY » /etc/fstab; then
echo « ✓ L’entrée LVM (UUID) pour /home est déjà présente dans /etc/fstab »
else
cp /etc/fstab /etc/fstab.backup.$(date +%Y%m%d_%H%M%S)
echo « ✓ Sauvegarde de /etc/fstab créée »

echo «  » >> /etc/fstab
echo « # Partition /home sur LVM (via UUID) » >> /etc/fstab
echo « $LVM_ENTRY » >> /etc/fstab
echo « ✓ Entrée LVM pour /home ajoutée à /etc/fstab »

echo  » Tentative de montage immédiat de /home… »
if mount -a 2>/dev/null; then
echo « ✓ /home (LVM) monté avec succès ! Vos données sont maintenant accessibles. »
else
echo « ⚠ Montage immédiat échoué. Redémarrage nécessaire pour activer le vrai /home (LVM). »
fi
fi
echo «  »

################################################################################
# 2. MISE À JOUR, REPO DOCKER, PAQUETS ET GOOGLE CHROME
################################################################################

echo « [2/23] Mise à jour système, repo Docker, paquets et Google Chrome… »
echo « ——————————————————- »

apt update
apt upgrade -y

# Repo Docker officiel
apt install -y ca-certificates curl gnupg lsb-release

install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg –dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg

echo \
« deb [arch=$(dpkg –print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable » | tee /etc/apt/sources.list.d/docker.list > /dev/null

apt update

# Ajout du dépôt officiel Steam pour installation complète
echo  » Ajout du dépôt officiel Steam… »
curl -s http://repo.steampowered.com/steam/archive/stable/steam.gpg | gpg –dearmor -o /usr/share/keyrings/steam.gpg
echo « deb [arch=amd64 signed-by=/usr/share/keyrings/steam.gpg] http://repo.steampowered.com/steam/ stable steam » | tee /etc/apt/sources.list.d/steam.list > /dev/null
apt update

apt install -y steam
echo « ✓ Steam installé depuis le dépôt officiel (prêt à lancer) »

# Installation des paquets
apt install -y \
docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin \
torbrowser-launcher filezilla transmission \
software-properties-common wget gnupg \
virtualbox virtualbox-guest-additions-iso \
gnome-software gnome-software-plugin-flatpak \
audacity calibre cdrdao dia musescore3 gimp gnome-tweaks \
gparted hplip imagemagick inkscape keepassxc manpages-fr \
nautilus-image-converter net-tools okular p7zip-full p7zip-rar rar \
pdfsam printer-driver-cups-pdf sharutils synaptic thunderbird \
timidity tintii ubuntu-restricted-extras unace unrar uudeview \
vlc whois xsane gnome-shell-extensions cifs-utils vim htop \
glances iotop unattended-upgrades flatpak rsync gdebi libfuse2 \
ansible qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager \
gnome-shell-extension-gsconnect default-jdk scanmem git python3 python3-venv python3-pip

# Installation de Google Chrome
echo  » Téléchargement et installation de Google Chrome… »
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb -O /tmp/google-chrome.deb
apt install -y /tmp/google-chrome.deb
rm -f /tmp/google-chrome.deb
echo « ✓ Google Chrome installé (son dépôt a été ajouté automatiquement pour les MAJ) »

echo « ✓ Tous les paquets installés avec succès »
echo «  »

################################################################################
# 3. CONFIGURATION DOCKER, KVM ET GROUPES UTILISATEUR
################################################################################

echo « [3/23] Configuration Docker, KVM et groupes utilisateur… »
echo « ——————————————————- »

usermod -aG docker $UTILISATEUR
usermod -aG libvirt $UTILISATEUR
usermod -aG kvm $UTILISATEUR
echo « ✓ Utilisateur $UTILISATEUR ajouté aux groupes : docker, libvirt, kvm »

systemctl enable docker
systemctl start docker
echo « ✓ Service Docker activé et démarré »

systemctl enable libvirtd
systemctl start libvirtd
echo « ✓ Service libvirtd activé et démarré »

set +e
virsh net-autostart default && echo « ✓ Réseau libvirt ‘default’ en autostart » || echo  » ⚠ Réseau ‘default’ déjà en autostart ou indisponible »
virsh net-start default && echo « ✓ Réseau libvirt ‘default’ démarré » || echo  » ⚠ Réseau ‘default’ déjà démarré ou indisponible »
set -e

echo «  »

################################################################################
# 4. CONFIGURATION DNS
################################################################################

echo « [4/23] Configuration des serveurs DNS… »
echo « ——————————————————- »

nmcli connection modify « $CONNEXION_NET » ipv4.dns « 8.8.8.8 8.8.4.4 »
nmcli connection modify « $CONNEXION_NET » ipv4.ignore-auto-dns yes
echo « ✓ DNS configurés : 8.8.8.8, 8.8.4.4 »

set +e
nmcli connection down « $CONNEXION_NET » && echo  » Connexion arrêtée » || echo  » ⚠ Impossible d’arrêter (déjà down ?) »
nmcli connection up « $CONNEXION_NET » && echo « ✓ Connexion redémarrée » || echo  » ⚠ Échec redémarrage (réseau temporairement indisponible ?) »
set -e

echo «  »

################################################################################
# 5. MONTAGE NAS VIA FSTAB
################################################################################

echo « [5/23] Configuration des montages NAS via /etc/fstab… »
echo « ——————————————————- »

# Création du fichier credentials
cat <<EOF > « $NAS_CREDENTIALS »
username=$UTILISATEUR
password=$NAS_PASSWORD
EOF
chmod 600 « $NAS_CREDENTIALS »
echo « ✓ Fichier credentials créé et sécurisé »

# Désactivation temporaire de set -e pour la boucle NAS (évite les crashes sur echo ou mkdir)
set +e

added_count=0
for dossier in « ${NAS_PARTAGES[@]} »; do
MOUNT_LINE= »//${NAS_IP}/${dossier} /mnt/nas/${dossier} cifs credentials=${NAS_CREDENTIALS},iocharset=utf8,vers=3.1.1,uid=${USER_UID},gid=${USER_GID},_netdev,nofail,x-systemd.automount,x-systemd.mount-timeout=5 0 0″

if ! grep -q « ^//${NAS_IP}/${dossier}[[:space:]] » /etc/fstab; then
#mkdir -p « /mnt/nas/${dossier} »
echo « $MOUNT_LINE » >> /etc/fstab
echo  » ✓ Ligne ajoutée pour $dossier »
added_count=$((added_count + 1)) # CORRECTION ICI
else
echo  » ⚠ Ligne déjà présente pour $dossier »
fi
done

# Réactivation de set -e
set -e

if [ $added_count -gt 0 ]; then
echo « ✓ $added_count lignes NAS ajoutées à /etc/fstab »
echo  » Tentative de montage immédiat… »
mount -a 2>/dev/null && echo « ✓ Montages NAS effectués immédiatement » || echo « ⚠ Certains montages ont échoué (réseau/NAS indisponible ? → automount actif) »
else
echo « ✓ Toutes les lignes NAS déjà présentes dans /etc/fstab »
fi
echo «  »

################################################################################
# 6. CONFIGURATION GRUB POUR DUAL-BOOT
################################################################################

echo « [6/23] Configuration GRUB pour dual-boot… »
echo « ——————————————————- »

cp /etc/default/grub /etc/default/grub.backup.$(date +%Y%m%d_%H%M%S)
echo « ✓ Sauvegarde de /etc/default/grub créée »

sed -i ‘s/^GRUB_TIMEOUT_STYLE=.*/GRUB_TIMEOUT_STYLE=menu/’ /etc/default/grub 2>/dev/null || echo ‘GRUB_TIMEOUT_STYLE=menu’ >> /etc/default/grub
sed -i ‘s/^GRUB_TIMEOUT=.*/GRUB_TIMEOUT=10/’ /etc/default/grub 2>/dev/null || echo ‘GRUB_TIMEOUT=10’ >> /etc/default/grub
sed -i ‘s/^GRUB_DISABLE_OS_PROBER=.*/GRUB_DISABLE_OS_PROBER=false/’ /etc/default/grub 2>/dev/null || echo ‘GRUB_DISABLE_OS_PROBER=false’ >> /etc/default/grub

update-grub
echo « ✓ GRUB configuré pour dual-boot (timeout: 10s) »
echo «  »

################################################################################
# 7. CONFIGURATION DE L’ÉDITEUR PAR DÉFAUT
################################################################################

echo « [7/23] Configuration de l’éditeur par défaut… »
echo « ——————————————————- »

update-alternatives –set editor /usr/bin/vim.basic
echo « ✓ Éditeur par défaut : Vim »
echo «  »

################################################################################
# 8. OPTIMISATION DE L’HISTORIQUE BASH
################################################################################

echo « [8/23] Optimisation de l’historique Bash… »
echo « ——————————————————- »

cp $BASHRC_USER ${BASHRC_USER}.backup.$(date +%Y%m%d_%H%M%S)
echo « ✓ Sauvegarde de .bashrc créée »

sed -i ‘/^HISTSIZE=/d’ $BASHRC_USER
sed -i ‘/^HISTFILESIZE=/d’ $BASHRC_USER
sed -i ‘/^shopt -s histappend/d’ $BASHRC_USER
sed -i ‘/^HISTTIMEFORMAT=/d’ $BASHRC_USER
sed -i ‘/^HISTCONTROL=/d’ $BASHRC_USER
sed -i ‘/^HISTIGNORE=/d’ $BASHRC_USER
sed -i ‘/^PROMPT_COMMAND=/d’ $BASHRC_USER
sed -i ‘/^alias update=/d’ $BASHRC_USER
sed -i ‘/^# ==== HISTORIQUE BASH OPTIMISÉ ====/d’ $BASHRC_USER

cat <<‘EOF’ >> $BASHRC_USER

# ==== HISTORIQUE BASH OPTIMISÉ ====
HISTSIZE=500000
HISTFILESIZE=1000000
shopt -s histappend
export HISTTIMEFORMAT= »%F %T  »
export HISTCONTROL=ignoreboth:erasedups
export HISTIGNORE= »ls:ll:la:pwd:cd:cd -:exit:clear »
PROMPT_COMMAND= »history -a; history -c; history -r »

# Alias mise à jour complète
alias update=’sudo apt update && sudo apt upgrade -y && sudo snap refresh 2>/dev/null || true && flatpak update -y 2>/dev/null || true’
EOF

chown $UTILISATEUR:$UTILISATEUR $BASHRC_USER
echo « ✓ Historique Bash optimisé »
echo «  »

################################################################################
# 9. CONFIGURATION SUDO SANS MOT DE PASSE
################################################################################

echo « [9/23] Configuration sudo sans mot de passe… »
echo « ——————————————————- »

echo « $UTILISATEUR ALL=(ALL) NOPASSWD:ALL » > /etc/sudoers.d/90-$UTILISATEUR
chmod 440 /etc/sudoers.d/90-$UTILISATEUR
echo « ✓ Sudo sans mot de passe activé pour $UTILISATEUR (assumé pour PC perso) »
echo «  »

################################################################################
# 10. INSTALLATION FLATPAK ET APPLICATIONS
################################################################################

echo « [10/23] Installation Flatpak et applications… »
echo « ——————————————————- »

flatpak remote-add –if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak install -y flathub com.discordapp.Discord org.videolan.VLC
echo « ✓ Flatpak configuré avec Discord et VLC »
echo «  »

################################################################################
# 11. CONFIGURATION DES MISES À JOUR AUTOMATIQUES
################################################################################

echo « [11/23] Configuration des mises à jour automatiques… »
echo « ——————————————————- »

dpkg-reconfigure -plow unattended-upgrades
echo « ✓ Mises à jour automatiques de sécurité activées »
echo «  »

################################################################################
# 12. NETTOYAGE DES PAQUETS OBSOLÈTES
################################################################################

echo « [12/23] Nettoyage des paquets obsolètes… »
echo « ——————————————————- »

apt autoremove -y
apt autoclean -y
echo « ✓ Paquets obsolètes supprimés »
echo «  »

################################################################################
# 13. LIMITATION DU JOURNAL SYSTEMD
################################################################################

echo « [13/23] Limitation du journal systemd… »
echo « ——————————————————- »

grep -qxF ‘SystemMaxUse=500M’ /etc/systemd/journald.conf || echo ‘SystemMaxUse=500M’ >> /etc/systemd/journald.conf
systemctl restart systemd-journald
echo « ✓ Journal systemd limité à 500 Mo »
echo «  »

################################################################################
# 14. CONFIGURATION NAUTILUS ET GNOME (avec activation GSConnect)
################################################################################

echo « [14/23] Configuration Nautilus et GNOME… »
echo « ——————————————————- »

if command -v gsettings &> /dev/null; then
DBUS_PATH= »unix:path=/run/user/${USER_UID}/bus »

sudo -u $UTILISATEUR DBUS_SESSION_BUS_ADDRESS= »$DBUS_PATH » gsettings set org.gnome.nautilus.preferences show-hidden-files true
sudo -u $UTILISATEUR DBUS_SESSION_BUS_ADDRESS= »$DBUS_PATH » gsettings set org.gnome.nautilus.preferences default-folder-viewer ‘list-view’
sudo -u $UTILISATEUR DBUS_SESSION_BUS_ADDRESS= »$DBUS_PATH » gsettings set org.gnome.desktop.default-applications.terminal exec ‘gnome-terminal’
sudo -u $UTILISATEUR DBUS_SESSION_BUS_ADDRESS= »$DBUS_PATH » gsettings set org.gnome.desktop.thumbnailers disable-all false
sudo -u $UTILISATEUR DBUS_SESSION_BUS_ADDRESS= »$DBUS_PATH » gsettings set org.gnome.nautilus.preferences show-image-thumbnails ‘always’

echo « ✓ Nautilus configuré (fichiers cachés, vue liste, miniatures) »

EXTENSIONS_DISPONIBLES=$(sudo -u $UTILISATEUR DBUS_SESSION_BUS_ADDRESS= »$DBUS_PATH » gnome-extensions list 2>/dev/null || echo «  »)

if echo « $EXTENSIONS_DISPONIBLES » | grep -q « dash-to-dock@micxgx.gmail.com »; then
sudo -u $UTILISATEUR DBUS_SESSION_BUS_ADDRESS= »$DBUS_PATH » gnome-extensions enable dash-to-dock@micxgx.gmail.com
echo  » ✓ dash-to-dock activé »
else
echo  » ✗ dash-to-dock non installé »
fi

if echo « $EXTENSIONS_DISPONIBLES » | grep -q « gsconnect@andyholmes.github.io »; then
sudo -u $UTILISATEUR DBUS_SESSION_BUS_ADDRESS= »$DBUS_PATH » gnome-extensions enable gsconnect@andyholmes.github.io
echo  » ✓ GSConnect activé (prêt pour KDE Connect sur Android) »
else
echo  » ✗ GSConnect non installé »
fi

if echo « $EXTENSIONS_DISPONIBLES » | grep -q « clipboard-indicator@tudmotu.com »; then
sudo -u $UTILISATEUR DBUS_SESSION_BUS_ADDRESS= »$DBUS_PATH » gnome-extensions enable clipboard-indicator@tudmotu.com
echo  » ✓ clipboard-indicator activé »
else
echo  » ✗ clipboard-indicator non installé »
fi
else
echo « ⚠ gsettings non disponible, configuration GNOME ignorée »
fi
echo «  »

################################################################################
# 15. DÉSactivation DE LA VEILLE AUTOMATIQUE
################################################################################

echo « [15/23] Désactivation de la veille automatique et extinction écran… »
echo « ——————————————————- »

if command -v gsettings &> /dev/null; then
DBUS_PATH= »unix:path=/run/user/${USER_UID}/bus »

sudo -u $UTILISATEUR DBUS_SESSION_BUS_ADDRESS= »$DBUS_PATH » gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-timeout 0
sudo -u $UTILISATEUR DBUS_SESSION_BUS_ADDRESS= »$DBUS_PATH » gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-battery-timeout 0
sudo -u $UTILISATEUR DBUS_SESSION_BUS_ADDRESS= »$DBUS_PATH » gsettings set org.gnome.desktop.session idle-delay 0
sudo -u $UTILISATEUR DBUS_SESSION_BUS_ADDRESS= »$DBUS_PATH » gsettings set org.gnome.settings-daemon.plugins.power idle-dim false

echo « ✓ Veille automatique, extinction écran et assombrissement désactivés »
else
echo « ⚠ gsettings non disponible, désactivation de la veille ignorée »
fi
echo «  »

################################################################################
# 16. DÉSactivation DU FIREWALL UFW
################################################################################

echo « [16/23] Désactivation du firewall UFW… »
echo « ——————————————————- »

ufw disable
echo « ✓ UFW désactivé (comme demandé) »
echo «  »

################################################################################
# 17. CRÉATION DU SCRIPT DE NETTOYAGE AUTOMATIQUE
################################################################################

echo « [17/23] Création du script de nettoyage automatique… »
echo « ——————————————————- »

cat <<EOF > /usr/local/bin/cleanup.sh
#!/bin/bash
echo « Début nettoyage système : \$(date) » >> /var/log/cleanup.log
echo « —————————————- » >> /var/log/cleanup.log

echo « === Nettoyage APT === » >> /var/log/cleanup.log
apt autoremove -y >> /var/log/cleanup.log 2>&1
apt autoclean -y >> /var/log/cleanup.log 2>&1

echo « === Nettoyage Snap === » >> /var/log/cleanup.log
snap set system refresh.retain=2
snap list –all | awk ‘/disabled/{print \$1″ –revision « \$3}’ | xargs -r snap remove >> /var/log/cleanup.log 2>&1 || true

echo « === Nettoyage Flatpak === » >> /var/log/cleanup.log
flatpak uninstall –unused -y >> /var/log/cleanup.log 2>&1 || true

echo « === Nettoyage Docker === » >> /var/log/cleanup.log
docker system prune -f >> /var/log/cleanup.log 2>&1 || true # Sans –volumes pour préserver les données Docker
docker builder prune -f –keep-storage 10GB >> /var/log/cleanup.log 2>&1 || true

echo « === Nettoyage fichiers temporaires === » >> /var/log/cleanup.log
find /tmp -type f -atime +7 -delete 2>/dev/null || true
find /var/tmp -type f -atime +7 -delete 2>/dev/null || true

echo « === Nettoyage cache miniatures === » >> /var/log/cleanup.log
find /home/$UTILISATEUR/.cache/thumbnails -type f -atime +30 -delete 2>/dev/null || true

echo « === Nettoyage logs anciens === » >> /var/log/cleanup.log
find /var/log -type f -name « *.log.* » -mtime +30 -delete 2>/dev/null || true

echo « Nettoyage terminé : \$(date) » >> /var/log/cleanup.log
echo « —————————————- » >> /var/log/cleanup.log
EOF

chmod +x /usr/local/bin/cleanup.sh

cat <<‘EOF’ > /etc/systemd/system/cleanup-system.service
[Unit]
Description=Nettoyage automatique du système

[Service]
Type=oneshot
ExecStart=/usr/local/bin/cleanup.sh
EOF

cat <<‘EOF’ > /etc/systemd/system/cleanup-system.timer
[Unit]
Description=Timer hebdomadaire pour nettoyage automatique

[Timer]
OnCalendar=Sun *-*-* 03:00:00
Persistent=true

[Install]
WantedBy=timers.target
EOF

systemctl daemon-reload
systemctl enable –now cleanup-system.timer
echo « ✓ Nettoyage automatique planifié (dimanche 3h, incl. Docker) »
echo «  »

################################################################################
# 18. CRÉATION DU SCRIPT DE MISE À JOUR AUTOMATIQUE
################################################################################

echo « [18/23] Création du script de mise à jour automatique… »
echo « ——————————————————- »

cat <<‘EOF’ > /usr/local/bin/update-system.sh
#!/bin/bash
echo « ======================================== » >> /var/log/update-system.log
echo « Début mise à jour système : $(date) » >> /var/log/update-system.log

echo « === Mise à jour APT === » >> /var/log/update-system.log
apt update >> /var/log/update-system.log 2>&1
apt upgrade -y >> /var/log/update-system.log 2>&1

echo « === Mise à jour Snap === » >> /var/log/update-system.log
snap refresh >> /var/log/update-system.log 2>&1 || true

echo « === Mise à jour Flatpak === » >> /var/log/update-system.log
flatpak update -y >> /var/log/update-system.log 2>&1 || true

echo « Fin mise à jour système : $(date) » >> /var/log/update-system.log
echo « ======================================== » >> /var/log/update-system.log
echo «  » >> /var/log/update-system.log
EOF

chmod +x /usr/local/bin/update-system.sh

cat <<‘EOF’ > /etc/systemd/system/update-system.service
[Unit]
Description=Mise à jour automatique APT + Snap + Flatpak

[Service]
Type=oneshot
ExecStart=/usr/local/bin/update-system.sh
EOF

cat <<‘EOF’ > /etc/systemd/system/update-system.timer
[Unit]
Description=Timer quotidien pour mise à jour automatique

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target
EOF

systemctl daemon-reload
systemctl enable –now update-system.timer
echo « ✓ Mises à jour automatiques planifiées (quotidien) »
echo «  »

################################################################################
# 19. REDIRECTION DES DOSSIERS STANDARDS VERS LE NAS + SIGNETS PERSONNALISÉS
################################################################################

echo « [19/23] Redirection des dossiers standards vers le NAS et signets personnalisés… »
echo « ——————————————————- »

USER_DIRS_FILE= »/home/$UTILISATEUR/.config/user-dirs.dirs »
USER_DIRS_CONF= »/home/$UTILISATEUR/.config/user-dirs.conf » # ← AJOUT CRITIQUE

# Sauvegarde du fichier actuel
if [ -f « $USER_DIRS_FILE » ]; then
cp « $USER_DIRS_FILE » « ${USER_DIRS_FILE}.backup.$(date +%Y%m%d_%H%M%S) »
echo « + Sauvegarde de user-dirs.dirs créée »
fi

# Suppression définitive des dossiers locaux concernés (Documents, Musique, Images)
# Cela empêche xdg-user-dirs-update de les recréer au login
echo « + Suppression définitive des dossiers locaux redirigés… »
sudo -u $UTILISATEUR rmdir « $HOME/Documents » « $HOME/Musique » « $HOME/Images » 2>/dev/null || true

# Réécriture du fichier user-dirs.dirs
cat <<EOF > « $USER_DIRS_FILE »
XDG_DESKTOP_DIR= »\$HOME/Bureau »
XDG_DOWNLOAD_DIR= »\$HOME/Téléchargements »
XDG_TEMPLATES_DIR= »\$HOME/Modèles »
XDG_PUBLICSHARE_DIR= »\$HOME/Public »
XDG_DOCUMENTS_DIR= »/mnt/nas/documents »
XDG_MUSIC_DIR= »/mnt/nas/musique »
XDG_PICTURES_DIR= »/mnt/nas/photographie »
XDG_VIDEOS_DIR= »\$HOME/ » # Désactivé visuellement (pas de sous-dossier = pas affiché dans Nautilus)
EOF

# CRITIQUE : Désactiver xdg-user-dirs-update pour empêcher l’écrasement
cat <<EOF > « $USER_DIRS_CONF »
enabled=False
EOF

chown $UTILISATEUR:$UTILISATEUR « $USER_DIRS_FILE »
chown $UTILISATEUR:$UTILISATEUR « $USER_DIRS_CONF »
chmod 644 « $USER_DIRS_CONF »

# Redémarrage Nautilus pour prise en compte immédiate
sudo -u $UTILISATEUR nautilus -q 2>/dev/null || true

echo « + Dossiers redirigés : »
echo  » – Documents → /mnt/nas/documents »
echo  » – Musique → /mnt/nas/musique »
echo  » – Images → /mnt/nas/photographie »
echo  » – Téléchargements reste local (comme souhaité) »
echo  » – Vidéos retiré du menu »
echo «  »

# Configuration des signets Nautilus
BOOKMARKS_FILE= »/home/$UTILISATEUR/.config/gtk-3.0/bookmarks »
mkdir -p « $(dirname « $BOOKMARKS_FILE ») »
touch « $BOOKMARKS_FILE »

# Sauvegarde APRÈS création du fichier (s’il contient des données)
if [ -s « $BOOKMARKS_FILE » ]; then
cp « $BOOKMARKS_FILE » « ${BOOKMARKS_FILE}.backup.$(date +%Y%m%d_%H%M%S) »
echo  » ✓ Sauvegarde de bookmarks créée »
fi

declare -A NOM_SIGNET
NOM_SIGNET[animation]= »🎬 Animation »
NOM_SIGNET[documents]= »📄 Documents »
NOM_SIGNET[downloads]= »⬇️ Téléchargements »
NOM_SIGNET[films]= »🎥 Films »
NOM_SIGNET[Imprimante]= »🖨️ Imprimante »
NOM_SIGNET[jeux]= »🎮 Jeux »
NOM_SIGNET[livres]= »📚 Livres »
NOM_SIGNET[musique]= »🎵 Musique »
NOM_SIGNET[perso]= »👤 Perso »
NOM_SIGNET[photographie]= »📸 Photographie »
NOM_SIGNET[sauvegarde]= »💾 Sauvegarde »
NOM_SIGNET[seriestv]= »📺 Séries TV »
NOM_SIGNET[surveillance]= »📹 Surveillance »
NOM_SIGNET[Technique]= »🔧 Technique »

for dossier in « ${NAS_PARTAGES[@]} »; do
CHEMIN= »file:///mnt/nas/$dossier »
NOM= »${NOM_SIGNET[$dossier]:-$dossier} »
if ! grep -q « ^${CHEMIN} » « $BOOKMARKS_FILE » 2>/dev/null; then
echo « $CHEMIN $NOM » >> « $BOOKMARKS_FILE »
echo  » ✓ Signet ajouté : $NOM »
else
echo  » ⚠ Signet déjà présent : $NOM »
fi
done

chown $UTILISATEUR:$UTILISATEUR « $BOOKMARKS_FILE »
chmod 644 « $BOOKMARKS_FILE »
echo « ✓ ${#NAS_PARTAGES[@]} signets NAS ajoutés dans Nautilus »
echo «  »

################################################################################
# 20. VÉRIFICATIONS FINALES DES SERVICES
################################################################################

echo « [20/23] Vérification des services Docker et KVM… »
echo « ——————————————————- »

set +e

if systemctl is-active –quiet docker; then
DOCKER_VERSION=$(docker –version 2>/dev/null | awk ‘{print $3}’ | tr -d ‘,’)
COMPOSE_VERSION=$(docker compose version 2>/dev/null | awk ‘{print $4}’)
echo  » ✓ Docker actif : version $DOCKER_VERSION | Compose : $COMPOSE_VERSION »
else
echo  » ✗ Docker inactif ou non installé »
fi

if systemctl is-active –quiet libvirtd; then
LIBVIRT_VERSION=$(virsh –version 2>/dev/null)
echo  » ✓ libvirtd actif (version $LIBVIRT_VERSION) »
else
echo  » ✗ libvirtd inactif »
fi

if command -v ansible &> /dev/null; then
ANSIBLE_VERSION=$(ansible –version 2>/dev/null | head -n1 | awk ‘{print $2}’)
echo  » ✓ Ansible installé (version $ANSIBLE_VERSION) »
else
echo  » ✗ Ansible non installé »
fi

set -e
echo «  »

################################################################################
# 21. NETTOYAGE FINAL
################################################################################

echo « [21/23] Nettoyage final… »
echo « ——————————————————- »

apt autoremove -y
apt autoclean -y
echo « ✓ Nettoyage final effectué »
echo «  »

################################################################################
# 22. RÉSUMÉ FINAL
################################################################################

echo « [22/23] RÉSUMÉ FINAL »
echo « ========================================== »
echo  » POST-INSTALLATION TERMINÉE AVEC SUCCÈS ! »
echo « ========================================== »
echo «  »
echo « 📋 RÉSUMÉ DES ACTIONS : »
echo  » ✓ /home configuré sur LVM (via UUID) »
echo  » ✓ virtualbox-guest-additions-iso installé (Guest Additions prêtes pour VMs) »
echo  » ✓ GSConnect installé et activé (KDE Connect Android prêt) »
echo  » ✓ UFW désactivé »
echo  » ✓ Google Chrome installé (son dépôt a été ajouté automatiquement pour les MAJ) »
echo  » ✓ Docker officiel + Compose V2 + KVM configurés »
echo  » ✓ Steam installé depuis le dépôt officiel »
echo  » ✓ Veille automatique et extinction écran désactivées »
echo  » ✓ Système mis à jour et paquets installés »
echo  » ✓ DNS Google configurés »
echo  » ✓ ${#NAS_PARTAGES[@]} partages NAS montés via fstab + signets Nautilus »
echo  » ✓ GRUB dual-boot, Bash optimisé, sudo NOPASSWD »
echo  » ✓ Flatpak, nettoyage (incl. Docker) et MAJ automatiques »
echo  » ✓ Nautilus/GNOME configuré »
echo «  »
echo « 🔧 COMMANDES UTILES APRÈS REBOOT : »
echo  » • Dans une VM VirtualBox → Périphériques > Insérer l’image des Additions Invité… »
echo  » • GSConnect : icône téléphone dans la barre supérieure »
echo  » • Installer KDE Connect sur Android et appairer »
echo  » • google-chrome, docker compose up, virt-manager… »
echo  » ✓ Dossiers Documents/Musique/Images redirigés vers NAS »
echo «  »
echo « Le système va redémarrer dans 30 secondes pour appliquer toutes les modifications. »
echo « Appuyez sur Ctrl+C pour annuler. »
echo «  »

################################################################################
# 23. REDÉMARRAGE AUTOMATIQUE
################################################################################

echo « [23/23] Redémarrage du système… »
echo « ——————————————————- »

for i in {30..1}; do
printf « Redémarrage dans %2d secondes… (Ctrl+C pour annuler) \r » « $i »
sleep 1
done

echo «  »
echo « Redémarrage en cours… »
sync
reboot

10 septembre 2019 /

Pour afficher le flux vidéo d’une caméra IP Reolink sur un poste Linux:

1. Installation de VLC
sudo apt-get install vlc
2. Création du fichier .asf
vi camera_salon.asf

et on y met une des deux lignes dedans, sans oublier de renseigner le login (ici « admin »), le mot de passe ainsi que l’adresse IP de la caméra:

3. Flux de basse qualité (à coller dans le fichier camera_salon.asf)
echo "rtsp://admin:<password>@<IP Address>/h264Preview_01_sub" > camera_salon.asf

ou

4. Flux de haute qualité (alternative à coller dans le fichier)
echo "rtsp://admin:<password>@<IP Address>/h264Preview_01_main" > camera_salon.asf

Il ne reste plus qu’a ouvrir ce fichier avec VLC pour afficher le stream de votre Camera IP

28 mars 2019 /

Tout d’abord, assurez-vous que tous vos paquets système sont à jour en exécutant les commandes apt-get suivantes dans le terminal

1. Mise à jour du système
sudo apt update
sudo apt upgrade

On va désactiver l’IPv6 via sysctl

2. Éditer le fichier sysctl.conf
vi /etc/sysctl.conf

On ajoute les lignes suivantes à la fin du fichier

3. Lignes à ajouter à la fin de /etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.<nom_de_linterface>.disable_ipv6 = 1
(Remplace <nom_de_linterface> par le nom réel de ton interface réseau, ex. eth0, enp0s3, etc. Tu peux le trouver avec ip a.)

Pour que les modifications soient prises en compte

4. Appliquer les modifications sysctl immédiatement
sysctl -p

On peut également le désactiver via GRUG

5. Éditer le fichier de configuration GRUB
vi /etc/default/grub

On modifie les paramètres  « GRUB_CMDLINE_LINUX » et « GRUB_CMDLINE_LINUX_DEFAULT » pour ajouter « ipv6.disable = 1 »

6. Modifier (ou ajouter) ces lignes dans /etc/default/grub
GRUB_CMDLINE_LINUX="ipv6.disable=1"
GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1"
(Note : si d’autres paramètres existent déjà, ajoute simplement ipv6.disable=1 à la fin de la chaîne entre les guillemets.)

On met à jour la configuration de GRUB et on redémarre

7. Mettre à jour GRUB et redémarrer
update-grub
systemctl reboot
3 mai 2018 /

Voici comment faire un petit dock à partir de la barre de lanceurs (Unity Launcher sous 16.04) qui ressemble à ça:

1. Installation de dconf-tools (nécessaire pour gsettings)
sudo apt install -y dconf-tools
Note :
Sur les versions récentes d’Ubuntu (22.04+), le paquet s’appelle plutôt dconf-cli ou est déjà installé avec GNOME.

Alternative plus précise :
sudo apt install -y dconf-cli

 

2. Personnalisation du Dock (Dash-to-Dock)
gsettings set org.gnome.shell.extensions.dash-to-dock extend-height false
gsettings set org.gnome.shell.extensions.dash-to-dock dock-position BOTTOM
gsettings set org.gnome.shell.extensions.dash-to-dock transparency-mode FIXED
gsettings set org.gnome.shell.extensions.dash-to-dock dash-max-icon-size 30
gsettings set org.gnome.shell.extensions.dash-to-dock unity-backlit-items true
Explication des options :

  • extend-height false : le dock n’occupe pas toute la hauteur de l’écran (plus compact).
  • dock-position BOTTOM : place le dock en bas (comme sous Windows/macOS).
  • transparency-mode FIXED : transparence fixe (pas dynamique selon le fond).
  • dash-max-icon-size 30 : taille des icônes réduite à 30 px (plus discret).
  • unity-backlit-items true : effet de rétro-éclairage sur les applications actives (style Unity).

Pour que les changements prennent effet immédiatement, redémarre GNOME Shell : Alt+F2, taper r, Entrée (ou déconnexion/reconnexion).

On peut également en profiter pour masquer automatiquement le dock et ainsi profiter pleinement de son écran

3. Revenir aux valeurs par défaut
gsettings reset org.gnome.shell.extensions.dash-to-dock extend-height
gsettings reset org.gnome.shell.extensions.dash-to-dock dock-position
gsettings reset org.gnome.shell.extensions.dash-to-dock transparency-mode
gsettings reset org.gnome.shell.extensions.dash-to-dock dash-max-icon-size
gsettings reset org.gnome.shell.extensions.dash-to-dock unity-backlit-items

Alternative plus rapide pour mettre Dash-to-Dock aux valeurs par défaut:

gsettings reset-recursively org.gnome.shell.extensions.dash-to-dock

 

 

3 mai 2018 /
1. Mise à jour complète d’Ubuntu 16.04
sudo apt update && sudo apt dist-upgrade && sudo apt autoremove
2. Installation de update-manager-core (si pas déjà présent)
sudo apt-get install update-manager-core

On vérifie dans le fichier du gestionnaire de mise à jour (/etc/update-manager/release-upgrades) que le paramètre prompt est bien positionné sur « lts » (Prompt=lts)
Si ce n’est pas le cas, changez-le en lts et enregistrez le fichier.

4. Lancement de la mise à niveau vers 18.04 LTS
sudo do-release-upgrade -d