ローカル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