オフライン環境にaptでパッケージをインストールする
オフラインのUbuntuにNode.jsをインストールするのに調べたメモ
意外と簡単にインストールできた。
ググって出てきた方法は2つ
apt installしてキャッシュからdebファイルを取り出す
オフライン環境のUbuntuでapt install - Qiitaapt-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