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 cacheL'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
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]
Donc, il n'y a pas de danger tant que l'on n'utilise pas la touche y
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
...
grep "OLD"
pour voir les diverses versions d'un même paquet--------------
Attention: première version donc avec de possibles bugs
--------------
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