Une place pour une véritable innovation. Partagez vos propres utilitaires créés avec la communauté Manjaro.
Questions et discussions sur la programmation et le codage.
Répondre

un paccache spécial manjaro

#1Messageil y a 2 ans

:bjr:

downgrade utilise les repos archlinux, donc une commande de ce type DOWNGRADE_FROM_ALA=1 downgrade linux510 ne peut pas fonctionner si nous avons nettoyer notre cache

L'idée ici est de nettoyer le cache (comme "paccache") mais:
- garder uniquement les paquets manjaro et aur (x versions)
tous autres sont normalement accessibles par la commande downgrade, donc tous supprimés

Utilisation:

paccache-manjaro [KEEP] [-v] 
# Clear pacman cache, exept for manjaro and aur packages
         KEEP: default = 3
         -v: verbose
par défaut garde les 3 dernières versions

Contrairement à paccache, il affiche le résultat puis demande une validation :

:: 342 packages to remove
:: disk space save: 872.64 MiB 
Remove this files ? [y/l/N] 
l : affiche la liste des fichiers à supprimer
Donc, il n'y a pas de danger tant que l'on n'utilise pas la touche y:wink:

Avec l'option "verbose" (-v) il est possible de faire des filtres pour voir ce qu'il fait:

./paccache-manjaro 2 -v | grep "preserv"
...
preserv: /var/cache/pacman/pkg/yay-10.3.1-1-x86_64.pkg.tar.zst
...
ou par exemple grep "OLD" pour voir les diverses versions d'un même paquet

--------------

Attention: première version donc avec de possibles bugs:Rouleau:

--------------

Code source:

#!/usr/bin/env bash
#set -x
shopt -s nullglob
shopt -s extglob

#
# faire du ménage du cache pacman
# SAUF les paquets de manjaro !! (keep=3 par defaut)
#
# V1.00.1

unset VERBOSE ISMANJARO
declare -i KEEP=${1:-3}     # not remove "KEEP" level
declare -i MAX=$(env|awk -F'=' '/^MAXPKG=/ {print $2}')     # for debug/tests
declare -i i=1
declare -a sizes=0
declare -a toremove=()

[[ "$1" == "-v" || "$2" == "-v" ]] && VERBOSE=1
((KEEP < 1)) && KEEP=3
((MAX < 1)) && MAX=50000

cachedir="$(pacman-conf | awk '/^CacheDir/ {print $3}')"
pacmandb="$(pacman-conf | awk '/^DBPath/ {print $3}')local/"
pkgname=""

[[ "$1" == "-h" ]] && {
    echo "$0 [KEEP] [-v]"
    echo -e "# Clear pacman cache, exept for manjaro and aur packages"
    echo -e "\t KEEP: default = 3"
    echo -e "\t -v: verbose"
    echo
    echo -e "MAXPKG: env variable for test, break loop after MAXPKG packages"
    echo
    echo "pacman cache: ${cachedir}"
    exit 0
}

# fonction in script: paccache
size_to_human() {
	awk -v size="$1" '
	BEGIN {
		suffix[1] = "B"
		suffix[2] = "KiB"
		suffix[3] = "MiB"
		suffix[4] = "GiB"
		suffix[5] = "TiB"
		suffix[6] = "PiB"
		suffix[7] = "EiB"
		count = 1
		while (size > 1024) {
			size /= 1024
			count++
		}
		sizestr = sprintf("%.2f", size)
		sub(/\.?0+$/, "", sizestr)
		printf("%s %s", sizestr, suffix[count])
	}'
}

#not used
# use %VALIDATION% key
# grep -E '^none$' /var/lib/pacman/local/*/desc
# use : grep -Ei 'Unknown Packager' /var/lib/pacman/local/*/desc
is_aur_pkg() {
    grep -E '^none$' "$1" -m1 -c
}

declare -i version=0
echo "Cache Directory: ${cachedir}"
echo "Manjaro/aur keep: $KEEP"


for pkg in $(printf '%s\n' "${cachedir}"*.pkg.tar!(*.sig) | pacsort --files -r); do
    ((i++))
    ext="${pkg##*.}"
    filename=$(basename ${pkg} .pkg.tar.$ext)
    filename=${filename%-*}
    desc="${pacmandb}${filename}/desc"
    [ -e "$desc" ] || {
        ((ISMANJARO)) || {
            # no cache if not manjaro package
            ((VERBOSE)) && echo -e "\t rm ${pkg}"
            continue
        }
        pkgreg="${cachedir}${pkgname}-" 
        if [[ "${pkg:0:${#pkgreg}}" == "$pkgreg" ]]; then
            ((version++))
            if ((version > KEEP)); then
                ((VERBOSE)) && echo -e "\t rm ${pkg} #OLD version ${version}"
                ((sizes=sizes+$(stat "$pkg"  --printf="%s")))
                toremove+=("$pkg")
            else
                ((VERBOSE)) && echo -e "\t OLD version ${version}: ${pkgname} package #preserve"
            fi
        fi
        continue
    }
    pkgname="$(grep '%NAME%' "${desc}" -A1 | tail -n1)"
    ((version=1))
    ((VERBOSE)) && echo "package: $pkgname"
    #'Unknown Packager' == aur
    if [[ $(grep -Ei 'manjaro|Unknown Packager' "$desc" -m1 -c) > 0 ]]; then
        ISMANJARO=1
        ((VERBOSE)) && echo -e "preserv: ${pkg}"
    else
        unset ISMANJARO
        ((VERBOSE)) && echo -e "\t rm ${pkg}"
        ((sizes=sizes+$(stat "$pkg"  --printf="%s")))
        toremove+=("$pkg")
    fi
    ((i>MAX)) && break
done

echo -e "\n:: ${#toremove[@]} packages to remove"
[[ "${#toremove[@]}" < 1 ]] && exit 0
echo -e ":: Disk space save: $(size_to_human $sizes) \n"

read -p "Remove these files ? [y/l/N] " response
response=${response,,:0:1}

if [[ "${response,,}" == "l" ]]; then
    for f in "${toremove[@]}"; do
        echo "rm $f"
    done
fi

if [[ "${response,,}" == "y" ]]; then
    for f in "${toremove[@]}"; do
        rm "$f"
    done
fi

exit 0

un paccache spécial manjaro

#2Messageil y a 2 ans

:bjr:
Joli :sourire:
Bon, je vais faire le ch :censure: ieur.
:gsourire:

[steph@steph-pc test]$ ./paccache-manjaro.sh 
Cache Directory: /var/cache/pacman/pkg/
Manjaro/aur keep: 3

:: 1085 packages to remove
:: disk space save: 3.04 GiB 

Remove this files ? [y/l/N] l
rm /var/cache/pacman/pkg/zxing-cpp-1.2.0-1-x86_64.pkg.tar.zst
rm /var/cache/pacman/pkg/zstd-1.5.0-1-x86_64.pkg.tar.zst
....................
....................
rm /var/cache/pacman/pkg/acl-2.3.1-1-x86_64.pkg.tar.zst
rm /var/cache/pacman/pkg/accountsservice-0.6.55-3-x86_64.pkg.tar.zst
[steph@steph-pc test]$ 
Remove this files ? [y/l/N] l
Je pense que ce devrait these au pluriel. this si un seul paquet .
Il faut rappeler la commande en root (et son délai d'exécution), pour pouvoir supprimer les paquets, donc la protection est bonne:

sudo ./paccache-manjaro.sh 
[sudo] Mot de passe de steph : 
Cache Directory: /var/cache/pacman/pkg/
Manjaro/aur keep: 3

:: 1085 packages to remove
:: disk space save: 3.04 GiB 

Remove this files ? [y/l/N]  y
Je relance pour vérifier et tout est propre, mais le script attend une confirmation de ma part alors qu'il n'y a plus rien à faire:

[steph@steph-pc test]$ sudo ./paccache-manjaro.sh 
Cache Directory: /var/cache/pacman/pkg/
Manjaro/aur keep: 3

:: 0 packages to remove
:: disk space save: 0 B 

Remove this files ? [y/l/N] 

A peaufiner . :biere:
Sympa :clap

un paccache spécial manjaro

#3Messageil y a 2 ans

:salut:
lemust83 a écrit : il y a 2 ans Bon, je vais faire le ch :censure: ieur.
Merci :gsourire:
Il faut rappeler la commande en root (et son délai d'exécution), pour pouvoir supprimer les paquets, donc la protection est bonne:
On peut ajouter un sudo devant la commande rm et plus besoin de le relancer :saispas:
dernière ligne -5 :

        #rm "$f"
        sudo rm "$f"
Je relance pour vérifier et tout est propre, mais le script attend une confirmation de ma part alors qu'il n'y a plus rien à faire
oops, je n'avais jamais testé la vidange complete :mrgreen: (utilisation de MAXPKG=48) - fixé:

echo -e "\n:: ${#toremove[@]} packages to remove"
[[ "${#toremove[@]}" < 1 ]] && exit 0
A peaufiner . :biere:
Merci pour les retours, code source actualisé (sans le sudo rm ?) en v1.00.1

------------------

ps: le script accepte une variable d'environnement MAXPKG, cela permet de ne tester que quelques paquets (car la flemme de sauver/reconstruire le cache)
Répondre