Debianパッケージのすべての再帰的な依存関係をリスト/ダウンロードする必要があります。
パッケージa.debをインストールする必要があり、パッケージb.debに依存していて、パッケージb.debがパッケージc.debに依存しているとします。
インターネットにアクセスせずに他のマシンにインストールできるように、再帰依存パッケージをすべてダウンロードする必要があります。
ありがとう。
何らかの理由で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
インターネットアクセスのないシステムでは、パッケージ(この例ではDocker)とその依存関係をインストールできます。
$ Sudo apt-get install docker-engine
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のみを表示するため。
midihenry が指摘したように-apt-rdependsパッケージをインストールして、これを実行します
$ apt-rdepends gcc | awk '$1 ~ /^Depends:/{print $2}' | xargs apt-get download
この行はすべての依存関係を再帰的に取得し、2番目のパイプを見て、すべてのパッケージをstdioから名前でダウンロードします。
awk $1 ~ /^Depends:/{print $2}
します。パッケージの名前を出力します。これらのコマンドを追加で実行すると、意味がわかります。
Debianパッケージのみをダウンロードする場合は、次のようにします。
apt-get -d package
または
apt-get download package
それ以外の場合は、パッケージの依存関係のリストが必要なだけです。
apt-cache depends package
明らかに、package
をクエリ対象のパッケージ名に置き換えます。