オフライン(ローカル)環境のUbuntuにapt installが必要なパッケージを入れる方法。
今回はUbuntuのdockerコンテナを例に説明する。
……この記事はネットワークにUbuntu接続禁止、という組織向け( ゚д゚)
###DL;DR
- ネットワークに接続したubuntuにapt installでパッケージを導入
- インストール時に残されたアーカイブをローカル環境のUbuntuにコピー
- アーカイブを使用してパッケージをインストール
※今回の手法はUbuntu16.10、18.10で確認済み。
####1. ネットワークに接続したUbuntuを準備
Windowsの場合はWSLで該当するUbuntuを入れて使用する。
####2. ネットワーク接続したUbuntuで必要なパッケージをapt installで入れる
今回の例はDocker ce
$ sudo apt update
$ sudo apt install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io
####3. パッケージのインストールに必要なdebファイルを固める
apt install時に取得したdebファイルは下記フォルダにアーカイブされている。
/var/cache/apt/archives
このフォルダをtarで固める(今回はdebs.tar.gzという名前)。
$ cd /var/cache/apt/archives
$ cd ..
$ sudo tar -zcvf debs.tar.gz archives
・Ubuntuの場合はtarファイルを直でUSBメモリへコピー
・Windowsの場合はアクセス可能なフォルダに移してからUSBメモリへコピー。
#windowsの場合の例。c:\tmpにファイルを移動
$ sudo mkdir /mnt/c/tmp
$ sudo cp debs.tar.gz /mnt/c/tmp/
####4. ローカルのUbuntuにインストール
先ほどのtarファイルをローカルUbuntuにコピーしてインストール
$ cp debs.tar.gz ~/
$ tar -jxvf ~/debs.tar.gz
#パッケージのインストール
$ sudo apt -y install ./archives/*.deb
多分 apt updateも同じ手順で対応できるはず。
参考:docker-composeの場合
apt installのdocker-composeは古いので、下記コマンドで入手したものをコピーする。
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
コピーした先で実行権限を付与
$ sudo chmod +x /usr/local/bin/docker-compose
コマンドが存在しないとエラーが出る場合はエラーのアドレスにリンクを張る。
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
####注意点
apt installでパッケージを多く入れている場合は下記コマンドで事前にパッケージのアーカイブをクリーンアップしておくとコピーする量が少なく済むが、不足パッケージで依存性の問題が発生する可能性がある。
$ sudo apt clean
####参考資料
https://vogel.at.webry.info/201702/article_3.html
https://diary.masasuzu.net/entry/2018/08/09/143934