web-dev-qa-db-ja.com

debianパッケージの再帰的な依存関係をリスト/ダウンロードする方法は?

Debianパッケージのすべての再帰的な依存関係をリスト/ダウンロードする必要があります。

パッケージa.debをインストールする必要があり、パッケージb.debに依存していて、パッケージb.debがパッケージc.debに依存しているとします。

インターネットにアクセスせずに他のマシンにインストールできるように、再帰依存パッケージをすべてダウンロードする必要があります。

ありがとう。

31
Bharat Bhansali

何らかの理由でapt-rdependsが機能しませんでした( 'docker-engine'パッケージを検索すると、libltdl7で導入されたdocker-engine 1.11.1-0への依存関係がありませんでした)。 [〜#〜] upd [〜#〜]おそらくapt-rdependsがフォローせず、デフォルトでRecommendsをリストしないためと思われます。また、仮想パッケージには従いません。

だから私は次のコマンドスイートを思いつきました。

依存関係を再帰的にリストする

$ apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances <your-package-here> | grep "^\w" | sort -u

(明らかに、分析するパッケージの行末で<your-package-here>を変更する必要があります)

ここでの鍵は--recurseオプションです。残念ながら、必要なコンテンツを指定することはできない(または方法を見つけられなかった)ため、不要な依存関係をすべてオフにして「依存関係」のみを保持する必要があります。それは少し冗長で覚えにくいです!

Apt-cache manページから:

デフォルトでは、dependsとrdependsはすべての依存関係を出力します

それらの依存関係をダウンロードする

これらの依存関係をダウンロードするには、次のコマンドを実行して、現在の作業ディレクトリに依存関係をダウンロードします。

$ apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances <your-package-here> | grep "^\w" | sort -u)

オプションで、これらの依存関係をインストールする

これは質問された質問を少し拡張しますが、質問の意図と一致するようです。

ダウンロードしたばかりのパッケージのindexを作成する必要があります。これは、すべての.debがダウンロードされたフォルダと同じフォルダから行われます。

$ dpkg-scanpackages . | gzip -9c > Packages.gz

次に、そのフォルダー(すべての.deb + Packages.gzファイル)をインターネットにアクセスできないターゲットシステムにコピーし、そのフォルダーをAPTソースリストに追加します。

$ echo "deb file:<your folder here> ./" | Sudo tee -a /etc/apt/sources.list
$ Sudo apt-get update

Etvoilà

インターネットアクセスのないシステムでは、パッケージ(この例ではDocker)とその依存関係をインストールできます。

$ Sudo apt-get install docker-engine
47
Yann Vo

apt-rdependsを使用すると、パッケージのすべての依存関係を再帰的に取得できます。結果をgrepにパイプすることで、パッケージ名のみを取得し、不要な情報を省略できます。

 $ apt-rdepends cowsay | grep -E '^[a-zA-Z0-9]'

出力

cowsay
Perl
libbz2-1.0
libc6
libgcc1
gcc-4.9-base
multiarch-support
libdb5.3
libgdbm3
dpkg
liblzma5
libselinux1
libpcre3
tar
libacl1
libattr1
zlib1g
install-info
Perl-base
Perl-modules

次に、apt-get download $packageを使用してこれらのパッケージをダウンロードし、マシンにオフラインでインストールできます。

デフォルトでは、aptはRecommendsをインストールするため、次のようにapt-rdependsを実行することができます。

apt-rdepends -f Depends,PreDepends,Recommends -s Depends,PreDepends,Recommends cowsay

apt-rdependsはデフォルトで従属し、Depends、PreDependsのみを表示するため。

7
Mehdi Yedes

midihenry が指摘したように-apt-rdependsパッケージをインストールして、これを実行します

$ apt-rdepends gcc | awk '$1 ~ /^Depends:/{print $2}' | xargs apt-get download

この行はすべての依存関係を再帰的に取得し、2番目のパイプを見て、すべてのパッケージをstdioから名前でダウンロードします。

awk $1 ~ /^Depends:/{print $2}します。パッケージの名前を出力します。これらのコマンドを追加で実行すると、意味がわかります。

2

Debianパッケージのみをダウンロードする場合は、次のようにします。

apt-get -d package

または

apt-get download package

それ以外の場合は、パッケージの依存関係のリストが必要なだけです。

apt-cache depends package

明らかに、packageをクエリ対象のパッケージ名に置き換えます。

0
Oerd