19 votes

apt-get download avec contrainte de version

J'ai besoin d'utiliser apt-get download pour récupérer une version spécifique d'un .deb mais pas nécessairement la version exacte. .deb les dépendances sont autorisées à utiliser des expressions telles que >=0.3.0 et je voudrais apt-get download pour récupérer la même version que celle qui serait téléchargée en utilisant cette dépendance.

Pour résumer, ce que je veux faire, c'est ceci :

$ apt-get download package='>=0.3.0'

Une idée de comment je pourrais obtenir cette fonctionnalité ?

2voto

Adrian Points 101

Pour ce faire, vous devez d'abord déterminer quelle est la version la plus récente qui est également supérieure ou égale à la version minimale souhaitée. Ensuite, vous téléchargez exactement cette version en utilisant apt-get download . Voici un script qui fait cela (c'est un peu moche, mais vous comprenez l'idée) :

#!/bin/bash

if [ $# -lt 2 ]; then
    echo "Usage: $0 <packagename> <minimum version>"
    exit 1
fi

pkgname="$1"
minversion="$2"

V="0"

for version in `apt-cache madison $pkgname | awk -F'|' '{print $2}'`; do
    echo "Considering $version"
    if dpkg --compare-versions $version ge $minversion; then
        echo "- Version is at least $minversion"
        if dpkg --compare-versions $version gt $V; then
            echo "- This is the newest version so far"
            V=$version
        else
            echo "- We already have a newer version"
        fi
    else
        echo "- This is older than $minversion"
    fi
done

if [ "$V" = "0" ]; then
    echo "There is no version greater than or equal to $minversion"
    exit 1
fi

echo "Selected version: $V"

echo "Downloading"
apt-get download $pkgname=$V
echo "Done"

Vous devrez ajouter un contrôle d'erreur au cas où le paquet n'existerait pas, etc. mais ceci contient la solution de base. De plus, j'ai supposé ici que vous vouliez le paquet le plus récent disponible qui soit au moins d'une certaine version. Si vous voulez plutôt le paquet le plus ancien disponible qui est au moins une certaine version, vous devez ajuster le script pour arrêter la recherche une fois qu'il a trouvé quelque chose qui est au moins votre version désirée.

0voto

lauvdh Points 56

Puisque vous voulez exactement ce que apt-get install vous donnerait, cela pourrait valoir la peine d'exécuter apt-get install en mode "téléchargement uniquement" en utilisant un répertoire d'archives personnalisé :

-d, --download-only
  Download only; package files are only retrieved, not unpacked or installed.
  Configuration Item: APT::Get::Download-Only.

Comment changer le répertoire des archives ? Il s'agit d'une option de configuration :

FILES
  [...]

  /var/cache/apt/archives/
  Storage area for retrieved package files. Configuration Item: Dir::Cache::Archives.

Celles-ci peuvent être modifiées temporairement avec l'option --option paramètre :

-o, --option
  Set a Configuration Option; This will set an arbitrary configuration option. 
  The syntax is -o Foo::Bar=bar.  -o and --option can be used multiple times 
  to set different options.

Pour résumer :

apt-get install -d -o dir::cache::archives="/some/cache/dir" <package>

Cette commande téléchargera (et seulement télécharger, pas installer) les fichiers suivants .deb des fichiers pour <package> a /some/cache/dir . Le répertoire contiendra le .deb pour le paquet, ses dépendances, un fichier de verrouillage et un répertoire "partiel" (qui doit être vide). En filtrant les fichiers exacts .deb dont vous avez besoin devrait être trivial.

0voto

pevik Points 486

apt-get download vous permet également de définir la libération de l'objectif. Cela ne serait-il pas utile ?

apt-get download package/testing

Commentaire à #1 (ne peut pas utiliser de commentaires) - ajouter un paramètre --print-uris a apt-get install ne nécessite pas de droits root (mais vous devez le télécharger lui-même - le mieux est d'utiliser wget -i FILE_LIST).

0voto

Sans les privilèges SU, vous pouvez toujours exécuter apt-cache et le combiner avec le filtrage pour obtenir cette information. Utilisez quelque chose comme :

Sur Debian 5 :

apt-cache show <pkg> | head | grep -i version 

Sur 6, vous pouvez utiliser :

apt-cache show <pkg> | tail | grep -i version

Apt-cache semble avoir changé de comportement dans l'ordre de la liste entre 5 et 6 de sorte que sur 6, le plus récent vient en dernier.

Un mot d'avertissement est que si vous utilisez cette sortie comme vous le dites "pour récupérer la même version que celle qui serait téléchargée en utilisant cette dépendance", la version du paquet disponible peut changer si vous exécutez apt-get update (avec les privilèges su bien sûr), ou si cela a été configuré pour s'exécuter automatiquement et se produit entre le moment où vous avez rassemblé la version, et lorsque vous exécutez le script qui installe les choses en s'attendant à ce que ce soit la version.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X