バージョン制約のあるapt-getダウンロード


18

私が使用する必要があるapt-get downloadの特定のバージョンフェッチし.debたファイルを、必ずしも必要ではないが正確なバージョン。.deb依存関係はなどの式の使用を許可されており、このような依存関係を使用してダウンロードされるものと同じバージョンを取得し>=0.3.0たいと思いapt-get downloadます。

要約すると、私が働きたいのはこれです:

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

どのようにしてその機能を得ることができますか?


packages.ubuntu.comからパッケージを手動でダウンロードしてみませんか?
テルドン

ダウンロードしたパッケージは、「apt-get install」を実行したときにダウンロードされるパッケージとまったく同じであることを確認する必要があるためです。これをcmake拡張スクリプトに組み込みます。
-mikosz

回答:


2

これは、最初に目的の最小バージョン以上である最新バージョンであるバージョンを見つけることによって行うことができます。次に、を使用してそのバージョンを正確にダウンロードしapt-get downloadます。これを実行するスクリプトを次に示します(少しugいですが、アイデアは得られます)。

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

パッケージが存在しない場合などにエラーチェックを追加する必要がありますが、これにはコアソリューションが含まれています。また、ここでは、少なくとも特定のバージョンである最新の利用可能なパッケージが必要であると想定しています。代わりに、少なくとも特定のバージョンである最も古い利用可能なパッケージが必要な場合は、少なくとも目的のバージョンであるものが見つかったら検索を停止するようにスクリプトを調整する必要があります。


0

あなたapt-get installが与えるものを正確に望むのでapt-get install、カスタムアーカイブディレクトリを使用して「ダウンロード専用モード」で実行する価値があるかもしれません:

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

アーカイブディレクトリを変更する方法 これは構成オプションです。

FILES
  [...]

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

これらは--optionパラメータで一時的に変更できます:

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

要約する:

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

このコマンドは、ダウンロード(とのみダウンロードし、インストールしていない)、関連するだろう.deb用のファイル<package>/some/cache/dir。ディレクトリには、.debパッケージのファイル、その依存関係、ロックファイル、および「部分」ディレクトリ(空にする必要があります)が含まれます。.deb必要な正確なファイルを除外するのは簡単です。


残念ながら、apt-get installスーパーユーザーのアクセスが必要です。
mikosz

0

apt-get downloadまた、ターゲットリリースを設定することもできます。助けになりませんか?

apt-get download package/testing

#1へのコメント(コメントを使用できません)- --print-urisへのパラメーターの追加apt-get installはルート権限を必要としません(ただし、wget -i FILE_LISTを使用するのが最適です)。


Mikolaj Radwanは、後でスクリプトを使用するために式を使用して特定のバージョンを取得する方法を探しているようです。これにより、現在のパッケージのダウンロードが許可されます。
Will.Beninger

0

SU特権がなくても、apt-cacheを実行し、フィルタリングと組み合わせてその情報を取得できます。次のようなものを使用します。

Debian 5の場合:

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

6では次を使用できます。

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

Apt-cacheは、5から6の間でリストの順序の動作を変更したようで、6で最新のものが最後に来ます。

注意の1つの言葉は、「このような依存関係を使用してダウンロードされるものと同じバージョンを取得するために」とこの出力を使用している場合、apt-get update( su privs)、または自動的に実行するように設定されており、バージョンを収集したときと、そのバージョンを期待するものをインストールするスクリプトを実行したときに発生する場合。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.