apt-get download mit Versionsbeschränkung

17

Ich muss verwenden apt-get download, um eine bestimmte Version einer .debDatei abzurufen , aber nicht unbedingt die genaue Version. .debAbhängigkeiten dürfen Ausdrücke wie verwenden, >=0.3.0und ich möchte apt-get downloaddie gleiche Version abrufen wie die, die mit einer solchen Abhängigkeit heruntergeladen werden würde.

Zusammenfassend möchte ich Folgendes tun:

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

Irgendeine Idee, wie ich diese Funktionalität bekommen könnte?

Mikosz
quelle
Warum laden Sie das Paket nicht einfach manuell von packages.ubuntu.com herunter ?
Terdon
Weil ich sicher sein muss, dass das heruntergeladene Paket genau dasselbe Paket ist, das heruntergeladen würde, wenn "apt-get install" ausgeführt wird. Ich baue dies in ein cmake-Erweiterungsskript ein.
Mikosz

Antworten:

2

Sie könnten dies tun, indem Sie zuerst herausfinden, welche Version die neueste Version ist, die auch größer oder gleich Ihrer gewünschten Mindestversion ist. Dann laden Sie genau diese Version mit herunter apt-get download. Hier ist ein Skript, das dies ausführt (es ist ein bisschen hässlich, aber Sie haben die Idee):

#!/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"

Sie müssten eine Fehlerprüfung hinzufügen, falls das Paket nicht existiert usw., aber dies enthält die Kernlösung. Außerdem habe ich hier angenommen, dass Sie das neueste verfügbare Paket wollen, das mindestens eine bestimmte Version ist. Wenn Sie stattdessen das älteste verfügbare Paket wünschen, das mindestens eine bestimmte Version hat, müssen Sie das Skript so anpassen, dass die Suche abgebrochen wird, sobald etwas gefunden wurde, das mindestens Ihrer gewünschten Version entspricht.

Fabian Fagerholm
quelle
0

Da Sie genau das möchten, was apt-get installSie erhalten, kann es sich lohnen, apt-get installim "Nur-Download-Modus" ein benutzerdefiniertes Archivverzeichnis zu verwenden:

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

Wie ändere ich das Archivverzeichnis? Dies ist eine Konfigurationsoption:

FILES
  [...]

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

Diese können vorübergehend mit dem --optionParameter geändert werden:

-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.

Zusammenfassen:

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

Mit diesem Befehl werden die relevanten .debDateien für <package>to heruntergeladen (und nur heruntergeladen, nicht installiert) /some/cache/dir. Das Verzeichnis enthält die .debDateien für das Paket, seine Abhängigkeiten, eine Sperrdatei und ein 'partielles' Verzeichnis (das leer sein sollte). Das Herausfiltern der genauen benötigten .debDatei sollte trivial sein.

lauvdh
quelle
Benötigt leider apt-get installSuperuser-Zugang.
Mikosz
0

apt-get downloadAußerdem können Sie die Zielfreigabe festlegen. Würde es nicht helfen?

apt-get download package/testing

Kommentar zu # 1 (kann keine Kommentare verwenden) - Das Hinzufügen eines Parameters --print-uriszu apt-get installerfordert keine Root-Rechte (aber Sie müssen ihn selbst herunterladen - am besten mit wget -i FILE_LIST).

pevik
quelle
Mikolaj Radwan scheint nach einer Möglichkeit zu suchen, bestimmte Versionen mit Hilfe von Ausdrücken für die spätere Verwendung von Skripten abzurufen. Dies würde nur das Herunterladen des aktuellen Pakets ermöglichen.
Will.Beninger
0

Ohne SU-Berechtigungen können Sie weiterhin apt-cache ausführen und mit der Filterung kombinieren, um diese Informationen abzurufen. Verwenden Sie etwas wie:

Unter Debian 5:

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

Auf 6 können Sie verwenden:

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

Apt-Cache scheint das Verhalten in der Reihenfolge der Liste zwischen 5 und 6 geändert zu haben, so dass auf 6 das neueste als letztes kommt.

Ein Wort der Vorsicht ist, dass, wenn Sie diese Ausgabe verwenden, während Sie sagen, "um dieselbe Version abzurufen, die mit einer solchen Abhängigkeit heruntergeladen werden würde", die Version des verfügbaren Pakets möglicherweise geändert wird, wenn Sie apt-get update (mit) ausführen su privs natürlich), oder wenn dies so eingestellt wurde, dass es automatisch ausgeführt wird und zwischendurch passiert, wenn Sie die Version erfasst haben, und wenn Sie das Skript ausführen, das Dinge installiert, die erwarten, dass dies die Version ist.

numerische Darstellung
quelle