Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
344 views
in Technique[技术] by (71.8m points)

How to list/download the recursive dependencies of a debian package?

I need to list/download all the recursive dependencies of a debian package.

Suppose i need to install package a.deb and it depends on package b.deb and again package b.deb depends on package c.deb.

I need to download all the recursive dependent packages so that they can be installed on some other machine without any internet access.

Thanks.

question from:https://stackoverflow.com/questions/22008193/how-to-list-download-the-recursive-dependencies-of-a-debian-package

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

For some reason apt-rdepends did not work for me (when searching the 'docker-engine' package, it missed the dependency onto libltdl7 which was introduced with docker-engine 1.11.1-0). UPD Supposedly owing to the fact that apt-rdepends doesn't follow and doesn't list Recommends by default. And doesn't follow virtual packages.

So I came up with following command suite.

Recursively list dependencies

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

(you obviously have to change <your-package-here> at the end of the line with the package you want to analyze)

The key here is the --recurse option. Unfortunately, you cannot specify the content you want (or I did not find the way) so you need to turn off all unwanted dependencies to keep only "dependencies". It is a bit verbose and hard to remember!

From the apt-cache man page:

Per default the depends and rdepends print all dependencies

Download those dependencies

So in order to download those dependencies, run following command which will download them into the current working directory:

$ 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)

Optionally, to install those dependencies

This extends slightly the asked question, but it seems to match the intent of the question.

You need to build the index of the just downloaded packages. This is done from the same folder where all .deb where downloaded:

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

Then just copy that folder (all .deb + the Packages.gz file) to the target system which does not have Internet access and add the folder to the APT source list.

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

Et voilà

On a system w/o Internet access, I can install a package (Docker in my example) and its dependencies:

$ sudo apt-get install docker-engine

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...