web-dev-qa-db-fra.com

Comment supprimer les anciennes versions des mêmes packages d'un référentiel local?

Dans mon référentiel local voir ci-dessous, De nombreuses versions des mêmes packages ont été téléchargées et stockées dans le répertoire deb package. Comme Ubuntu préfère toujours utiliser la version la plus récente, je n’ai pas besoin des versions précédentes téléchargées et utilisées. (Tous sont dans le même dossier).

Comment puis-je supprimer les versions antérieures des packages du dossier de mon deb local? Ce n'est pas une solution réalisable pour les supprimer manuellement. (Vous ne pouvez pas examiner les versions dans des milliers de fichiers)

Des idées?!!

Peut-être qu'un script qui vérifie la version de chaque paquet en conservant la version la plus récente et supprime les versions les plus anciennes peut résoudre ce problème.

Je cherche un tel script ou si un logiciel est fondé serait génial

J'ai fait mon dépôt local après ceci comment faire un tutoriel .

*** Un référentiel local est un stockage hors ligne de paquets déjà téléchargés, vous n'avez donc pas besoin de le télécharger à nouveau.

Remarque : Je ne parle pas d'effacer le cache des paquets téléchargés, ce qui peut être fait avec la commande apt-get clean.

4
user61928

J'ai ensuite supprimé les anciennes versions des mêmes packages. J'ai utilisé l'inversion de la fonctionnalité d'analyse de plusieurs versions de dpkg-scanpackages.

  1. Première installation du paquet dpkg-dev

    Sudo apt-get install dpkg-dev
    
  2. Générez ensuite un fichier avec le nom des packages (seuls les plus récents seront listés) dpkg-scanpackages sans l'option -m. La valeur par défaut est sans l'option -m.

    Si vous avez des fichiers .deb dans un dossier nommé deb, exécutez la commande ci-dessous à partir du parent de ce dossier.

    dpkg-scanpackages deb /dev/null 2>/dev/null | grep Filename: > filenames
    

    Cela créera un fichier avec le nom noms de fichiers qui a tous les noms de fichiers .deb listés dans un format Filename: deb/packagename_version.deb.

    Nous avons maintenant tous les noms de fichiers avec les versions les plus récentes dans un fichier nommé noms de fichiers

  3. La tâche est maintenant simple, modifiez le script pour déplacer tous ces fichiers dans un autre dossier.

    1. Commencez par remplacer le Filename: par mv

      sed -i 's/Filename:/mv/' filenames
      
    2. Créez maintenant un dossier dans le répertoire parent du dossier deb. Je l'ai nommé le plus récent (sans ordure pourrait être un bon; P).

    3. Modifiez à nouveau le fichier noms de fichiers pour déplacer les fichiers .deb dans le dossier le plus récent récemment créé.

      sed -i 's/\.deb/.deb newest/' filenames
      

      Cela fera en sorte que notre fichier noms de fichiers liste la liste des commandes mv déplaçant les fichiers .deb du répertoire deb vers le répertoire le plus récent

    4. Maintenant, devinez quoi. Exécuter le fichier noms de fichiers

      sh filenames
      
    5. La dernière étape consiste à supprimer le dossier contenant les anciens fichiers .deb obsolètes. Vérifiez le dernier dossier aussi à titre de précaution.

Mise à jour avec une doublure

Après avoir installé les packages dpkg-dev, générez le script de déplacement à l'aide d'une seule commande, utilisez celle-ci en accédant au dossier parent du fichier .deb.

 dpkg-scanpackages deb /dev/null 2>/dev/null | grep Filename: | sed 's/Filename:/mv/;s/\.deb/.deb newest/' > filenames

Créez ensuite un dossier nommé le plus récent et exécutez le fichier noms de fichiers avec la commande `sh noms de fichiers *.

5
Anwar

J'ai eu le même problème: j'ai créé un référentiel local en utilisant apt-mirror et cet outil télécharge les nouveaux paquets mais laisse tous les anciens paquets en place. J'ai fait ce qui suit pour nettoyer mon miroir local:

  1. Allez à l'emplacement de votre sommet de miroir (le répertoire dans lequel se trouvent les répertoires dists et pool, dans mon répertoire /var/spool/apt-mirror/mirror/ftp.nl.debian.org/debian)

  2. Créez une liste de tous les packages de votre pool:

    find pool -type f | sort -u > files
    
  3. Créez une liste de tous les packages de votre distribution en miroir:

    grep "^Filename:" `find dists/ -name Packages`|sed "s/^.*Filename: //"|sort -u > packages
    
  4. Créez maintenant un diff entre les deux fichiers et convertissez-le en script de nettoyage:

    diff files packages | sed "/^[1-9]/d;s/^< /rm /" > cleanup.sh
    
  5. Exécuter le script généré

Assurez-vous de disposer d'autorisations en écriture sur le référentiel (ou exécutez-vous à l'aide de Sudo). Au lieu de supprimer, vous pouvez également déplacer les fichiers vers un emplacement temporaire.

L'idée sous-jacente est que vous pouvez supprimer les fichiers qui ne sont pas mentionnés dans l'un des fichiers Packages, car ils sont remplacés par des versions plus récentes ou sont obsolètes. Si les fichiers ne sont pas mentionnés dans les fichiers Packages, ils ne peuvent pas être trouvés par les clients se connectant à votre référentiel.

2
Borkhuis

Mise à jour avec une doublure Pour supprimer (ne pas déplacer)

cette doublure supprimera uniquement les anciennes versions des mêmes packages

l'exécuter en tant que root

Sudo dpkg-scanpackages /var/cache/apt/archives 2>&1 >/dev/null | grep -Po '((\/.*?deb)(?=.*?repeat;))|used that.*?\K(\/.*deb)' | xargs rm

"/ var/cache/apt/archives" à remplacer par votre répertoire .deb

cela fonctionne très bien dans Ubuntu 12.10

2
Gurjinder Singh

Belle solution de contournement de "Anwar" (dans la première réponse)! Seule cette ligne je changerais:

sed -i 's/\.deb/.deb newest/' filenames

parce que si vous avez un paquet nommé: packagename.debian_123.deb, votre ligne ne remplacera que le premier ".deb" de cette ligne et cela ressemblera à ceci:

packagename.deb newest_123.deb

Prenez cette ligne à la place, et seul le dernier .deb de chaque ligne sera remplacé:

sed -i 's/\(.*\).deb/\1.deb newest/' filenames
0
feuerkogel

À Thunar:

  1. Ouvrir /var/cache/apt/archives
  2. Sélectionnez les fichiers en fonction du temps d'accès:
    • cliquez sur Voir >> Voir comme liste détaillée
    • cliquez sur Afficher >> Configurer les colonnes >> Activer la date d'accès
    • cliquez sur l'en-tête du tableau Date Accessed pour trier les fichiers
    • ctrl-clic pour sélectionner plusieurs fichiers, Shift-clic pour sélectionner une plage de fichiers
  3. Supprimez les fichiers, soit via un clic droit >> Supprimer (si Thunar a été ouvert avec des privilèges suffisants) ou:
    • Clic droit >> choisir Renommer
    • choisissez Insérer/Remplacer, définissez un préfixe personnalisé
    • ouvrir un terminal, Sudo rm /var/cache/apt/archives/customprefix*.deb
0
ignis