オフライン環境向けUbuntu APTリポジトリの構築方法

ローカルAPTリポジトリの必要性

ネットワーク制限環境でのUbuntuシステム管理において、外部リポジトリへのアクセスが不可の場合、自前でAPTリポジトリを構築する必要があります。本ガイドでは、Nginxを活用したオフライン対応パッケージリポジトリの構築手順を解説します。

Webサーバーの設定

パッケージ配布用にNginxをインストールします:

sudo apt install nginx

設定ファイル/etc/nginx/sites-available/local-repoを作成:

server {
    listen 8081;
    access_log /var/log/nginx/repo-access.log;
    root /srv/apt-repo;
    
    location / {
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
    }
}

設定反映後、サービスを再起動:

sudo ln -s /etc/nginx/sites-available/local-repo /etc/nginx/sites-enabled/
sudo systemctl reload nginx

リポジトリディレクトリ構造の準備

Ubuntu 20.04 (Focal Fossa)向けにディレクトリ階層を構築:

sudo mkdir -p /srv/apt-repo/focal/{main,universe}/binary-{amd64,i386}
sudo ln -s /var/cache/apt/archives /srv/apt-repo/packages

パッケージメタデータの生成

必要なツールをインストール:

sudo apt install dpkg-dev

パッケージインデックスを生成(64bit/32bit向けに分離):

cd /srv/apt-repo
dpkg-scanpackages --multiversion packages /dev/null | \
  gzip > focal/main/binary-amd64/Packages.gz
dpkg-scanpackages --arch i386 packages /dev/null | \
  gzip > focal/universe/binary-i386/Packages.gz

クライアントからの利用設定

クライアントマシンの/etc/apt/sources.listに追加:

deb [arch=amd64] http://10.0.0.5:8081 focal main universe

リポジトリ更新時の警告回避設定:

sudo mkdir -p /etc/apt/apt.conf.d
echo 'Acquire::AllowInsecureRepositories "true";' | \
  sudo tee /etc/apt/apt.conf.d/99-insecure-repo

パッケージインストールの確認:

sudo apt update
sudo apt install curl --allow-unauthenticated

依存関係を含むパッケージ収集

必要なパッケージリストpkg-list.txtを作成:

curl
libcurl4
ca-certificates

依存パッケージを再帰的にダウンロード:

PKG_LIST=$(cat pkg-list.txt)
DEP_PKGS=$(apt-cache depends --recurse \
  --no-suggests --no-conflicts $PKG_LIST | \
  grep "^\w" | sort -u)

cd /srv/apt-repo/packages
sudo apt download $DEP_PKGS

タグ: nginx dpkg-dev apt-mirror reprepro

5月24日 12:53 投稿