プロキシ環境下などで外部のネットワークに繋ぐことができない時などに、使いたいパッケージのオフラインインストーラが必要です。
apt-getコマンドでインストールできるパッケージのオフラインインストーラを作成します。
logrotateを例として進めます。
DockerでクリーンなDebian環境を用意する
インストーラ資材のダウンロード用に、Dockerfileを用意してDebian環境を作ります。
FROM debian:stable-slim
# If you need proxy, add proxy settings
#ENV http_proxy http://host:port/
#ENV https_proxy http://host:port/
#ENV HTTP_PROXY http://host:port/
#ENV HTTPS_PROXY http://host:port/
proxy周りの設定がいる場合はコメントを外して設定します。
次にDockerイメージをビルドしてコンテナを立ち上げます。
docker build -t debian-sandbox .
docker run -e TZ=Asia/Tokyo -u root --name debian-sandbox -d --restart always -it debian-sandbox
proxy設定がいらない場合はDockerfileを作らず、ワンライナーで立ち上げてもOKです。
docker run -e TZ=Asia/Tokyo -u root --name debian-sandbox -d --restart always -it debian:stable-slim
コンテナの中に入ってオフラインインストーラを作成する
コンテナの中に入ります。
docker exec -it bash
パッケージのインストールを行います。
この時、ダウンロードのみを行うオプションを使うのがポイントです。
apt-get update
apt-get --download-only install logrotate -y
ダウンロードしたパッケージは /var/cache/apt/archives
ディレクトリに格納されます。
archivesディレクトリを丸ごと圧縮してオフラインインストーラとします。
cd /var/cache/apt/
cp -r ./archives ./logrotate
tar -zcvf logrotate_install.tar.gz logrotate
exit
ディレクトリ名を変えたのは後でインストールする時に何のインストーラか分かりやすくするためです。logrotate_install.tar.gz
という圧縮ファイルが生成されました。
作成したインストーラをローカルに持ってくる
dockerコマンドを使用します。
docker cp debian-sandbox:/var/cache/apt/logrotate_install.tar.gz ./
カレントディレクトリ上にtarファイルがコピーできたと思います。
これで、オフラインインストーラの作成が完了しました。
オフラインインストーラを使用する
tarファイルを展開して、ディレクトリ指定してインストールしていきます。
tar -xvf logrotate_install.tar.gz
apt -y install /logrotate/*.deb
tarの中には目的のパッケージだけでなく、関連する依存パッケージも入っているのでディレクトリの中のものを全てインストールします。
github
https://github.com/itouoti12/gen-offline-apt-package
参考
オフラインのUbuntuマシンにアプリケーションを導入する方法
Saving deb files from repositories to a custom location for installing offline
コメントを書く