purge répertoire

Le
Rakotomandimby (R12y) Mihamina
Bonjour,
J'utilise apt-mirror pour me confectionner un mirroir local d'une Ubuntu.

Le problème est qu'un fichier "clean.sh" est censé être livré avec le
package, mais ne l'est pas.
Le mirroir accumule ainsi les packages, sans purger les plus vieux et je
me retrouve avec un disque plein, parceque j'ai pris le depot depuis sa
création (ou presque, depot Ubuntu Intrepid).
Je voudrais virer les vieux packages, mais en prenant garde de bien
savoir comparer les version avec leur numerotation.
Des fois, des packages Debian ont une numérotation assez "complexe".

Existe-t-il une bibliothèque Perl ou un bout de script shell qui
comparerait les filenames de deux packages Debian du même nom (mais
différentes version)? Comme ça je pourrait efffacer sereinement le plus
vieux

Merci.

--
Serveurs infogérés:
http://www.infogerance.us/infogerance/packs-serveurs-infogeres
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
dominix
Le #16790251
Rakotomandimby (R12y) Mihamina a écrit :
Bonjour,
J'utilise apt-mirror pour me confectionner un mirroir local d'une Ubuntu.

Le problème est qu'un fichier "clean.sh" est censé être livré avec le
package, mais ne l'est pas.
Le mirroir accumule ainsi les packages, sans purger les plus vieux et je
me retrouve avec un disque plein, parceque j'ai pris le depot depuis sa
création (ou presque, depot Ubuntu Intrepid).
Je voudrais virer les vieux packages, mais en prenant garde de bien
savoir comparer les version avec leur numerotation.
Des fois, des packages Debian ont une numérotation assez "complexe".

Existe-t-il une bibliothèque Perl ou un bout de script shell qui
comparerait les filenames de deux packages Debian du même nom (mais
différentes version)? Comme ça je pourrait efffacer sereinement le plus
vieux...

Merci.




ca ne serait pas plus facile avec un rsync ?

--
dominix
Arnaud Giersch
Le #16790871
Jeudi 11 septembre 2008, vers 21:08:41 (+0200), Rakotomandimby (R12y)
Mihamina a écrit:

Existe-t-il une bibliothèque Perl ou un bout de script shell qui
comparerait les filenames de deux packages Debian du même nom (mais
différentes version)?



Éventuellement, tu peux utiliser

dpkg-deb --field <fichier_deb> Version

pour récupérer les numéros de version, puis

dpkg --compare-versions <a> <rel> <b>

pour les comparer.

Arnaud
Rakotomandimby (R12y) Mihamina
Le #17247161
Arnaud Giersch wrote:
Existe-t-il une bibliothèque Perl ou un bout de script shell qui
comparerait les filenames de deux packages Debian du même nom (mais
différentes version)?


Éventuellement, tu peux utiliser
dpkg-deb --field <fichier_deb> Version
pour récupérer les numéros de version, puis
dpkg --compare-versions <a> <rel> <b>
pour les comparer.



Effectivement, ce sont deux outils qui me servent à extraire exactelet
les information dont j'ai besoin.

Maintenant, je dois:
- faire une liste (sans doublon) des packages existants
- chercher la version la plus récente de chaque packages
- garder les .deb les plus recents de chaque packages en supprimant les
autres

Sans utiliser un tableau, ça me semble quasiment injouable, puisqu'il y
a l'action d'éradication des doublons que je ne voit pas implémentée
sans tableau.
Il y a bien des tableaux en BASH, mais.... beurk?

Au point ou j'en suis, il y a bien 4 ou 5 version de chaque package. Il
s'agit donc de chercher la plus grande version parmi ces 4 ou 5 valeurs
et faire éliminer les plus vieilles (les .deb associés, en fait).

Ca me semble un peu lourd à faire par un script BASH et à ce jour je
n'ai pas avancé parcequ'en manque d'inspiration. Cependant, le défi
m'interesse. Auriez vous des pistes pour me faire avancer?

Merci.

--
Serveurs infogérés:
http://www.infogerance.us/infogerance/packs-serveurs-infogeres
Arnaud Giersch
Le #17264941
Mardi 16 septembre 2008, vers 22:47:45 (+0200), Rakotomandimby (R12y)
Mihamina a écrit:

Maintenant, je dois:
- faire une liste (sans doublon) des packages existants
- chercher la version la plus récente de chaque packages
- garder les .deb les plus recents de chaque packages en supprimant
les autres



Je ne comprends pas vraiment ton problème : d'après sa description,
apt-mirror serait capable de faire du ménage tout seul comme un
grand...

En faisant l'hypothèse que les noms de paquets ne contiennent pas
d'espaces et autres caractères bizarres, quelques chose comme ça ?

for p in $(ls | sed -n '/.deb$/{s/_.*//;p;}' | uniq -d); do
b=""
for a in ${p}_*.deb; do
if [ -z "$b" ]; then
b=$a
vb=$(dpkg-deb --field $b Version)
else
va=$(dpkg-deb --field $a Version)
if dpkg --compare-versions "$va" lt "$vb"; then
r=$a
else
r=$b
b=$a
vb=$va
fi
echo "rm $r" ### <--- corriger cette ligne ###
fi
done
done

Pour chacun des paquets existant en plusieurs exemplaires, en prendre
deux (a et b), supprimer le plus ancien (r), puis recommencer avec
celui qu'on a gardé (b) et le suivant (a).

Arnaud
Arnaud Giersch
Le #17270461
Vendredi 19 septembre 2008, vers 06:31:39 (+0200), Rakotomandimby
(R12y) Mihamina a écrit:

En gros, il a meme deja prevu l'appel au script de nettoyage, mais
ledit script n'est pas encore existant.



Le script clean.sh est généré par apt-mirror (par défaut sur Debian
dans /var/spool/apt-mirror/var/). À toi de l'exécuter ensuite pour
effacer les fichiers.

La variable non documentée _autoclean a l'air de rendre l'effacement
automatique lorsqu'elle est mise à 1 dans le fichier de configuration.
À utiliser avec précaution AMHA.

Arnaud
Publicité
Poster une réponse
Anonyme