オフライン環境にaptでパッケージをインストールする

オフラインのUbuntuにNode.jsをインストールするのに調べたメモ
意外と簡単にインストールできた。


ググって出てきた方法は2つ

  1. apt installしてキャッシュからdebファイルを取り出す
    オフライン環境のUbuntuでapt install - Qiita

  2. apt-get downloadでdebファイルをダウンロードする
    オフラインのUbuntuにパッケージインストール — anzawatta-blog

1だとダウンロード環境ですでにインストール済みの依存パッケージがもれそうだったので、
依存関係をもれなくダウンロードできる2を試した。


手順

インターネットにつながる環境で対象のパッケージと依存パッケージをダウンロード、
そのあとインストールしたい環境に、ファイルをコピーしてインストール。

1. apt-rdependsをインストール

依存パッケージを取得する「apt-rdepends」をインターネットにつながる環境にインストール

sudo apt install apt-rdepends

初めて使ったが、「apt-rdepends」は指定パッケージの依存するパッケージと、
その依存パッケージが更に依存するパッケージを一覧で出してくれる。

$ apt-rdepends nodejs
Reading package lists... Done
Building dependency tree
Reading state information... Done
nodejs
  Depends: libc-ares2 (>= 1.11.0~rc1)
  Depends: libc6 (>= 2.14)
  Depends: libgcc1 (>= 1:3.4)
  Depends: libhttp-parser2.7.1 (>= 2.7.1)
  Depends: libicu60 (>= 60.1-1~)
  Depends: libnghttp2-14 (>= 1.25.0)
  Depends: libssl1.0.0 (>= 1.0.2~beta3)
  Depends: libstdc++6 (>= 5.2)
  Depends: libuv1 (>= 1.18.0)
  Depends: zlib1g (>= 1:1.1.4)
libc-ares2
  Depends: libc6 (>= 2.17)
libc6
  Depends: libgcc1
libgcc1
  Depends: gcc-8-base (= 8.4.0-1ubuntu1~18.04)
  Depends: libc6 (>= 2.14)
gcc-8-base
libhttp-parser2.7.1
  Depends: libc6 (>= 2.2.5)
libicu60
...

2. パッケージをダウンロード

apt-get download $(apt-rdepends [対象パッケージ名]|grep -v "^ ")

パッケージ名の部分だけをgrepで抜き出している。


このコマンドでダウンロードをしようとした際に以下のエラーが発生した。

$apt-get download $(apt-rdepends nodejs|grep -v "^ ")
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Can't select candidate version from package debconf-2.0 as it has no candidate

apt-rdependsが返すパッケージ名は正確でない場合がある模様
apt get - How to download all dependencies and packages to directory - Stack Overflow

sedで正確なパッケージに置換する
※今回はdebconfだけだが他にも色々あるみたい

apt-get download $(apt-rdepends [対象パッケージ名]| grep -v "^ " | sed 's/debconf-2.0/debconf/g')

ubuntu - Ignore apt-get download errors - Super User

3. パッケージをインストール

2でダウンロードしたdebファイルをすべて対象環境にコピーしてインストール

sudo dpkg -i *.deb