How can I download THEN install packages?

I know that when it comes to the Red Hat distribution, I can use the following commands to download a copy of the package and then separately install it.

yumdownloader package_name
yum install package_name

Is there an exact equivalent in Ubuntu that does both the operations separately, or does the following command do both?

apt-get install package_name

Solution 1:

Just add the -d (or --download) option to any apt-get command. This approach is simple and effective.

  • Don't worry about dependencies, they're downloaded as well.
  • Security is maintained, all integrity checks are still done just like a regular installation.

E.g.:

$ sudo apt-get dist-upgrade -d
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following NEW packages will be installed:
  linux-headers-3.19.0-39 linux-headers-3.19.0-39-generic linux-image-3.19.0-39-generic linux-image-extra-3.19.0-39-generic
  linux-signed-image-3.19.0-39-generic
The following packages will be upgraded:
  keepassx linux-headers-generic linux-libc-dev linux-signed-generic linux-signed-image-generic
5 upgraded, 5 newly installed, 0 to remove and 0 not upgraded.
Need to get 67,0 MB of archives.
After this operation, 289 MB of additional disk space will be used.
Do you want to continue? [Y/n] 
Get:1 http://nl.archive.ubuntu.com/ubuntu/ vivid-updates/main linux-image-3.19.0-39-generic amd64 3.19.0-39.44 [16,9 MB]
[...]
Fetched 67,0 MB in 4s (13,5 MB/s)       
Download complete and in download only mode

At a later time when you're offline, you can run sudo apt-get dist-upgrade to complete the installation. (Note the Need to get 0 B/67,0 MB of archives.)

$ sudo apt-get dist-upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following NEW packages will be installed:
  linux-headers-3.19.0-39 linux-headers-3.19.0-39-generic linux-image-3.19.0-39-generic linux-image-extra-3.19.0-39-generic
  linux-signed-image-3.19.0-39-generic
The following packages will be upgraded:
  keepassx linux-headers-generic linux-libc-dev linux-signed-generic linux-signed-image-generic
5 upgraded, 5 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/67,0 MB of archives.
After this operation, 289 MB of additional disk space will be used.
Do you want to continue? [Y/n]

It also works with install or other commands:

$ sudo apt-get install -d libpcap-dev 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  libpcap0.8-dev
The following NEW packages will be installed:
  libpcap-dev libpcap0.8-dev
0 upgraded, 2 newly installed, 0 to remove and 5 not upgraded.
Need to get 214 kB of archives.
After this operation, 749 kB of additional disk space will be used.
Do you want to continue? [J/n] 
Get:1 http://nl.archive.ubuntu.com/ubuntu/ vivid/main libpcap0.8-dev amd64 1.6.2-2 [210 kB]
Get:2 http://nl.archive.ubuntu.com/ubuntu/ vivid/main libpcap-dev all 1.6.2-2 [3448 B]
Fetched 214 kB in 0s (1776 kB/s)     
Download complete and in download only mode

To clear the cache (stored in /var/cache/apt/archives):

sudo apt-get clean

Solution 2:

Use the download feature of apt-get.

From man apt-get:

download
    download will download the given binary package into the current directory.

For example:

apt-get download chromium-browser

will download the deb file of chromium browser into the current directory. Note that this will not download any of the dependencies of the package so if you try to install the .deb by:

sudo dpkg -i path/to/downloaded/deb/file

you'll get dependency errors.

apt-get install packageName does both the (download+install) jobs. The downloaded packages will be in the /var/cache/apt/archives folder