コマンドラインから特定のリポジトリのパッケージをダウンロードするには?

コマンドラインから特定のリポジトリのパッケージをダウンロードするには?

一般的なダウンロードとインストール、apt(適性など)の機能に関するものではなく、スクリプトされたものです。ダウンロードパッケージファイル。

dgetこれを行うツールを見つけましたが、本当にうまくいきます。しかし残念ながら/etc/apt/sources.list

これは可能ですか?実はdgetこんな機能が一番いいのに、しかし、ここでリポジトリURLを指定することもできます。


PS:スクリプトを提供していただきありがとうございます。しかし、私はこのタスクにDebianツールを使用することを好みます。非常に シンプル仕事。外部使用のためのビルドスクリプトの一部になります。どの不必要な複雑さにより、余裕のない付随費用が発生します。 Debian ツールで行う必要があります。

PS2。最後に、システム全体のリポジトリを更新しますdget

ベストアンサー1

私が見つけることができるすべてのツールは、ローカルapt情報(および/etc/apt/sources.list最後の実行apt-get updateで定義されたリポジトリなど)を使用します。説明はあまり難しくありません。ストレージフォーマットしかし。

救う

#!/bin/sh
# Downloads a package from a repository
# dlpkg repo distro suite arch package

for arch in all "${4}"; do
    curl "${1}/dists/${2}/${3}/binary-${arch}/Packages.xz" | xz -d | "$(dirname $0)/pkgfilename" -v "PACKAGE=${5}" | while read filename; do
        curl -O "${1}/${filename}"
    done
done

のようにdlpkg、そして

#!/usr/bin/awk -f

/Package:/ {
    package = $2
}

package == PACKAGE && /Filename:/ {
    print $2
}

as でpkgfilename実行可能にし、次のコマンドを実行してパッケージをダウンロードできます。

./dlpkg <repository URL> <distribution> <suite> <architecture> <package>

例えば

./dlpkg http://ftp.fr.debian.org/debian unstable main amd64 libc6

Packagesファイルが標準の順序(Packagebefore)Filenameではなくリポジトリを処理する必要がある場合は、次のAWKスクリプトを使用できます。

#!/usr/bin/awk -f

BEGIN {
    filename = ""
}

/^$/ {
    filename = ""
    stanza = 0
}

/Package:/ {
    if ($2 == PACKAGE) {
        stanza = 1
        if (filename != "") {
            print filename
            stanza = 0
        }
    }
}

/Filename:/ {
    filename = $2
    if (stanza == 1) {
        print filename
        filename = ""
    }
}

エラー処理はなく、読者の練習問題のままにしておきます。署名確認もできません。

おすすめ記事