Skip to content

Instantly share code, notes, and snippets.

@ozh
Created June 15, 2025 15:24
Show Gist options
  • Save ozh/6539a57338c1ea4a6b2eb813ba4b0df7 to your computer and use it in GitHub Desktop.
Save ozh/6539a57338c1ea4a6b2eb813ba4b0df7 to your computer and use it in GitHub Desktop.
Backup list of manually installed packages on my raspberry

get list of default packages

In https://downloads.raspberrypi.org/raspios_arm64/images/ go to dir matching your setup and download the .info (eg : https://downloads.raspberrypi.org/raspios_arm64/images/raspios_arm64-2025-05-13/2025-05-13-raspios-bookworm-arm64.info)

Remove the first lines so all you have is a list of packages, and :

cat 2025-05-13-raspios-bookworm-arm64.info | cut -d' ' -f3 | sort > ~/initial_paquets.txt

This will be the sorted default package list.

Mount a drive on my local Synology NAS and backup every day

backup_paquets.sh

DATE=$(date +%Y-%m-%d)
DEST="/mnt/nas_raspi"
NAS_SHARE="//192.168.1.88/backup/raspi"
LOCAL_TMP="/tmp/packages-$DATE.txt"
FILENAME="paquets-$DATE.txt"
MAX_FILES=30

# Créer temporairement la liste des paquets manuels
comm -23 <(apt-mark showmanual | sort) <(cat ~/initial_paquets.txt) > "$LOCAL_TMP"

# Monter le NAS si pas déjà monté
mountpoint -q "$DEST" || sudo mount -t cifs -o vers=2.0,username=guest,password= "$NAS_SHARE" "$DEST"

# Copier le fichier vers le NAS
sudo cp "$LOCAL_TMP" "$DEST/$FILENAME"

# Supprimer le fichier temporaire
rm "$LOCAL_TMP"

# Supprimer les anciens fichiers, en ne conservant que les 30 plus récents
cd "$DEST" || exit 1
sudo ls -1t paquets-*.txt | tail -n +$((MAX_FILES + 1)) | sudo xargs -r rm --

crontab every day

# backup paquets tous les jours
0 3 * * * /usr/bin/bash /home/ozh/bin/backup_paquets.sh > /dev/null 2>&1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment