結論
最新の安定版のパッケージ使いたい yes→ 3.1方式でリポジトリ登録
no↓
対象のバージョンはdeb形式でリポジトリにある(最悪公式リポジトリでなくても) yes→3.2方式でリポジトリ登録
no↓
今回は触れないソースを探してインストールする方式になりそう(ソース:http://nginx.org/en/download.html)
目的
Ubuntuのnginxパッケージのインストールを通じてパッケージ管理を理解する
概要
方法は下記の2つ
① ソースからインストール → 割愛(ソースからインストールしてコンパイルすれば基本行ける)
② リポジトリに登録
以下は2のパターンで使う
1.リポジトリの登録方法(やっていることは基本的に同じはず)
1.1 リポジトリ追加コマンドを使う(add-apt-repositoryコマンド)
1.2 viコマンドで直書き
1.3 aptlyコマンド (https://gihyo.jp/admin/serial/01/ubuntu-recipe/0485)
2.リポジトリの登録先
2.1 /etc/apt/sources.list → 既存のリポジトリのリストに追加する
2.2 /etc/apt/sources.list.d/hoge.list → 新しくリポジトリを作成する
どちらでもできないことはないが標準で入ってるもの(2.1)と区別するために2.2がオススメ
3.リポジトリの情報をどこから持ってくる?
3.1公式リポジトリの場所をリポジトリのフォーマットに基づいて指定する(deb [ option1=value1 option2=value2 ] uri suite [component1] [component2] [...])
3.2wgetなどで直接パッケージをサーバ内に配置してそれをfileスキーマでリポジトリから参照する
・
・
下記参考リンクのスキーマを満たす方法がいろいろある
https://gihyo.jp/admin/serial/01/ubuntu-recipe/0677#sec2
いざ検証
方法1(3.1に該当)
※厳密な手順はこちら(http://nginx.org/en/linux_packages.html#Ubuntu)
APTリポジトリのGPG鍵を取得して登録gpgコマンドでデコードをしてnginx-archive-keyring.gpgを作成しました。なおgpgキーは登録したAPTリポジトリからダウンロードするパッケージの正当性を証明するために使われます
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
sources.list.dに新しく作るほうがいいです(推奨)。あえて変化球でsources.listにリポジトリのフォーマットに基づいて登録します
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/mainline/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list
# リポジトリを追加したのであぷで
apt update
apt list | grep nginx
最後のコマンドでnginxのパッケージ一覧確認したが私は下記のnginxが含まれていた
nginx/stable,now 1.23.3-1~jammy amd64 [residual-config]
あとはsudo apt install nginxとすればインストールされる
方法2(3.2に該当)
※ぶっちゃけこちらの方のほうが丁寧に説明してる(https://gihyo.jp/admin/serial/01/ubuntu-recipe/0677#sec5)
今回は試しにnginx_1.21.6-1~jammy_amd64.debを使う
sudo mkdir -p /srv/apt/repository/nginx_1.21.6
sudo chown $USER: /srv/apt/repository/nginx_1.21.6
cd /srv/apt/repository/nginx_1.21.6
wget http://nginx.org/packages/mainline/ubuntu/pool/nginx/n/nginx/nginx_1.21.6-1~jammy_amd64.deb
下記コマンドで対象リポジトリのメタデータ作成(sudo suに切り替えた)
apt-ftparchive packages . > Packages
echo "deb [trusted=yes] file:///srv/apt/repository/nginx_1.21.6/ ./" \
| sudo tee /etc/apt/sources.list.d/local.list
sudo apt update
最後のコマンドでnginxのパッケージ一覧確認したが私は下記のnginxが含まれていた
nginx/unknown 1.21.6-1~jammy amd64 [upgradable from: 1.18.0-6ubuntu14.3]
あとはsudo apt install nginxとすればインストールされる
裏方法
aptで直接リポジトリ指定 | dpkg -i で指定(dpkg -i は一般的な方法なので割愛)
実はわざわざリポジトリを作成しなくても直接下記のようにリポジトリをインストールするだけでnginxを使えるようになる
apt install /srv/apt/repository/nginx_1.21.6/nginx_1.21.6-1~jammy_amd64.deb
以下は↑コマンド結果抜粋
# aptコマンドで取得するパッケージの一個目を表す
Get:1 /srv/apt/repository/nginx_1.21.6/nginx_1.21.6-1~jammy_amd64.deb nginx amd64 1.21.6-1~jammy [1002 kB]
# nginxをインストールする都合でサービスの設定を一部書き換えている
Service restarts being deferred:
systemctl restart networkd-dispatcher.service
systemctl restart unattended-upgrades.service