Nginx の最新版を deb ソースパッケージからビルド(2022/05)

Ubuntu や debian 標準のパッケージリポジトリで提供される Nginx は、版数が若干古めのものになってしまっています。最新版の Nginx は、公式サイト (nginx.org) のリポジトリを追加することにより、使用することが出来ます。
しかし、公式サイトで提供されるバイナリパッケージのサポートプラットフォーム(x86_64, arm64 など)に該当していない場合などは、deb 形式ソースパッケージからビルドすることが必要になるため、その手順についてまとめます。

手順の検証用に、Raspberry Pi に導入した Ubuntu Server 22.04 LTS 32ビット版 (armhf) を使用しました。現状、公式サイトでは armhf プラットフォーム用のバイナリパッケージは配布されていないので、Nginx の最新版を使用したい場合は、ソースパッケージからビルド作業が必須となります。
また、Ubuntu や debian 標準のパッケージリポジトリで提供される Nginx に、使いたいモジュール (例 ipv6 など) が含まれていない場合にも、本ビルド手順が参考になると思います。

1. 事前確認

まず、Nginx のダウンロードサイトで、最新版の版数を確認します。このとき、最新版が Mainline version なのか、Stable version (安定版) なのかにより、手順が若干変わるので注意が必要です。(2022/5/29時点の最新は、Stable 1.22.0)
通常は、Mainline が最新となっていますが、Stable にブランチしたタイミングで、一時的に Stable が最新になる場合がある様子です。Mainline と Stable の考え方は、こちらのサイトで説明が参考になります。

次に、Ubuntu 標準のパッケージリポジトリを使用してインストールできる Nginx の版数を確認します。
※もし、標準のパッケージリポジトリで 最新の Nginx が導入できるのであれば、ビルド作業は必要なく、” apt install nginx ” するのみでOKになります。

環境構築作業時等で特権コマンド投入時に毎回 sodo するのは実用的ではないため、本手順では ” sudo -i ” して、root権限のログインシェルにて作業しています。
$ sudo -i   これ以降 root で作業
#
# apt update   標準パッケージリストを更新します
# apt upgrade   インストール済パッケージを更新しておきます
# apt list nginx   標準パッケージリストよりインストール可能な Nginx を確認
一覧表示... 完了
nginx/jammy-updates,jammy-security 1.18.0-6ubuntu14.1 armhf   版数が古い
#

2. deb パッケージ構築の必須ツールのインストール

deb 形式ソースパッケージをビルドするために必要になるツールパッケージ ” build-essential ” をインストールします。

# apt install build-essential
#

3. Nginx 前提条件パッケージのインストール

公式サイトのパッケージインストール手順を参考に、前提条件パッケージをインストールします。 参考まで Ubuntu Server 22.04 LTS の環境で、未インストールだったのは ” gnupg2 ” のみでした。

# apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring
#

4. 公式サイトのリポジトリ情報追加

apt がパッケージの信頼性を検証できるように、公式サイトのnginx署名キーをダウンロードしてインポートします。

# curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | tee /usr/share/keyrings/nginx-archive-keyring.gpg > /dev/null
#

ダウンロードしたファイルに適切なキーが含まれていることを確認します。

# gpg --check-trustdb   gpg の保持している鍵データベースの確認(次のコマンド実行時に " pubring.kbx " ファイルが無い旨のエラーを防ぐためだけのアクションです)
# gpg --dry-run --quiet --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg
pub rsa2048 2011-08-19 [SC] [expires: 2024-06-14]
    573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
uid                    nginx signing key <[email protected]>
#

※ 出力したフィンガープリントに “573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62″ が完全な状態で含まれている必要があります。

Nginx 公式サイトのソーススパッケージリポジトリの参照先情報を追加します。この時、最新版が Mainline なのか、Stable なのかで手順が異なりますで、選択して作業を行います。
※違いは ” /etc/apt/sources.list.d/nginx.list ” ファイルに書き込む URL の ” mainline/ ” の記載部分のみになります。後日、Mainline と Stable を切り替える場合も、同ファイルの URL 部分を修正のみで容易に行えます。

[Mainline] の場合

# echo "deb-src [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/mainline/ubuntu `lsb_release -cs` nginx" | tee /etc/apt/sources.list.d/nginx.list
#

[Stable] の場合

# echo "deb-src [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | tee /etc/apt/sources.list.d/nginx.list
#

パッケージリストを更新します。この操作で、Nginx 公式サイトのソースパッケージのリポジトリ情報が取り込まれます。

# apt update
#

5. 依存パッケージのインストール

Nginx ソースパッケージをビルドする際に、必要になる依存パッケージをインストールします。

# apt build-dep nginx
#

6. ソースパッケージをダウンロード

Nginx ソースパッケージのダウンロードおよび、ビルド作業用のディレクトリを作成し、カレントディレクトリを移動します。
※作業用のディレクトリは、環境に応じて修正願います。また、パーミッション設定を緩めているのは、ビルド時やインストール時に、同ディレクトリのファイルが ” _apt ” ユーザから「アクセスできない ~ 」といった旨のエラー発生を防ぐためになります。

# mkdir /usr/local/src/nginx
# chmod 777 /usr/local/src/nginx
# cd /usr/local/src/nginx
#

作成した作業用のディレクトリに Nginx ソースパッケージをダウンロードします。

# pwd   カレントディレクトリの確認
/usr/local/src/nginx
# apt source nginx
#

ビルド作業を実施するため、ダウンロードしたソースパッケージのディレクトリへ移動します。(下記は 1.22.0 の場合)

# cd nginx-1.22.0
#

7. 追加モジュールの設定

※追加モジュールが必要ない場合は、次の項に進んで下さい。

ここでは、Nginx を ipv6 に対応するため、ソースパッケージのビルド時に、モジュール追加される様に、debian ディレクトリの rules ファイルを編集します。
まず、編集前に内容を確認します。

# pwd  カレントディレクトリの確認 
/usr/local/src/nginx/nginx-1.22.0
# cat debian/rules
#

./configure の行の後部に ” –with-ipv6 ” の記述を追加します。
下記の手順では、vi 等のエディタを使用せずに、sed コマンドを用いて該当箇所を編集する手法を使用しています。

# sed -i 's/--with-ld-opt="$(LDFLAGS)"/--with-ld-opt="$(LDFLAGS)" --with-ipv6/g' debian/rules
#

編集後の内容を確認します。

# cat debian/rules
#

8. ソースパッケージのビルド

ソースパッケージのディレクトリで、ビルドのコマンドを実行します。

# pwd   カレントディレクトリの確認
/usr/local/src/nginx/nginx-1.22.0
# dpkg-buildpackage -uc -b
#

ビルドが終了すると、親ディレクトリに deb パッケージファイルが作成されます。
※以下の青文字にした部分が、ビルド後に作成された deb パッケージファイルです。

# cd ..
# pwd   カレントディレクトリの確認
/usr/local/src/nginx
# ls
nginx-1.22.0                         nginx_1.22.0-1~jammy_armhf.buildinfo
nginx-dbg_1.22.0-1~jammy_armhf.deb   nginx_1.22.0-1~jammy_armhf.changes
nginx_1.22.0-1~jammy.debian.tar.xz   nginx_1.22.0-1~jammy_armhf.deb
nginx_1.22.0-1~jammy.dsc             nginx_1.22.0.orig.tar.gz
#

9. deb パッケージファイルのインストール

ここまでの手順で作成された、Nginx の deb パッケージファイルをインストールします。

# pwd  カレントディレクトリの確認 
/usr/local/src/nginx
# apt install ./nginx_1.22.0-1~jammy_armhf.deb
#

10. バージョン確認と起動設定

インストールした、Nginx のバージョン、モジュールは下記コマンドにて確認出来ます。

# nginx -V
#

Nginx 動作状態の確認します。
(下記コマンドを実行し、” Active: active (running) ” の表示があれば起動した状態です。)

# systemctl status nginx
#

Nginx が起動していない場合は、下記コマンドで起動します。

# systemctl start nginx
#

Nginx の自動起動設定状態の確認します。
(下記コマンドを実行し、” enabled ” が表示されればOKです。)

# systemctl is-enabled nginx
#

Nginx が自動起動設定になっていない場合は、下記コマンドで自動起動する状態に設定します。

# systemctl enable nginx
#

11. 動作確認

ブラウザから、Nginxをインストールした Ubuntu Server の ip アドレス指定でアクセスし、下記の初期画面の表示を確認できれば、Nginx のインストール確認完了です。