Raspbian stretch に最新 Nginx をインストール(2019/03)

Raspbian Buster の環境で確認した新しい記事を投稿しましたので、そちらを参照願います。


過去に同様の記事を投稿していますが、現状に相違点がないかの確認を含めて、手順の確認を行いましたので再投稿します。

Raspbian stretch のデフォルトパッケージリポジトリを使用して Nginx をインストールすると、かなり古い版数のものになります。
internet へ web 公開する場合、セキュリティを考慮すると、最新のものを使うことが望ましいと考えます。
2019/3/31時点の Nginx の最新版(mainline)は、1.15.10 になっています。
しかし、Raspberry Pi のプラットフォーム(armhf)用のバイナリパッケージは、公式サイトでも配布されていないので、ソースパッケージからビルドして Deb パッケージを作成し、導入する手順を記載します。

1. 事前確認

Nginx の公式サイトで、最新版(mainline)の版数を確認します。

次に、Raspbian stretch のデフォルトパッケージリポジトリを使用して、インストールできる Nginx の版数を確認します。
※ 版数の確認結果が、同じであれば apt-get install nginx するのみでOKです。

# apt-get update
# apt-cache policy nginx
nginx:
インストールされているバージョン: (なし)
候補:               1.10.3-1+deb9u2
バージョンテーブル:
1.10.3-1+deb9u2 500
500 http://mirrordirector.raspbian.org/raspbian stretch/main armhf Packages

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

Nginx 公式サイトの GPG 公開鍵を登録します。

# wget -O - http://nginx.org/keys/nginx_signing.key | apt-key add -

Nginx ソースのリポジトリ情報を追加し、パッケージ・リストの更新を行います。

# echo "deb-src http://nginx.org/packages/mainline/debian/ stretch nginx" >> /etc/apt/sources.list.d/nginx.list
# apt-get update

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

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

# apt-get build-dep nginx

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

Nginx ソースパッケージのダウンロードディレクトリを作成し、そこに移動します。

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

Nginx ソースパッケージをダウンロードします。

# apt-get source nginx

5. 追加モジュールの準備

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

ここでは、Nginx を ipv6 に対応するため、ソースパッケージのビルド時に、モジュール追加される様に、debian/rules ファイルを編集します。
(nginx-1.15.10の例)

# vi /usr/local/src/nginx/nginx-1.15.10/debian/rules

./configure 部分に下記を追記します。
「 –with-ipv6 」

~~
config.status.nginx: config.env.nginx
        cd $(BUILDDIR_nginx) && \
        CFLAGS="" ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt="$(CFLAGS)" --with-ld-opt="$(LDFLAGS)" --with-ipv6
	touch $@

config.status.nginx_debug: config.env.nginx_debug
        cd $(BUILDDIR_nginx_debug) && \
        CFLAGS="" ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt="$(CFLAGS)" --with-ld-opt="$(LDFLAGS)" --with-ipv6 --with-debug
	touch $@
~~

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

Nginx ソースパッケージをビルドし、Debパッケージを作成します。
(nginx-1.15.10の例)

# cd /usr/local/src/nginx/nginx-1.15.10
# dpkg-buildpackage -uc -b

ビルドが終了すると、親ディレクトリにDebパッケージファイルが作成されます。

# cd ..
# ls
nginx-1.15.10                          nginx_1.15.10-1~stretch_armhf.buildinfo
nginx-dbg_1.15.10-1~stretch_armhf.deb  nginx_1.15.10-1~stretch_armhf.changes
nginx_1.15.10-1~stretch.debian.tar.xz  nginx_1.15.10-1~stretch_armhf.deb
nginx_1.15.10-1~stretch.dsc            nginx_1.15.10.orig.tar.gz

7. Debパッケージファイルのインストール

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

# dpkg -i nginx_1.15.10-1~stretch_armhf.deb

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

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

# nginx -V

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

# systemctl status nginx

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

# systemctl start nginx

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

# systemctl is-enabled nginx

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

# systemctl enable nginx

9. 動作確認

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

コメント

  1. りくせん より:

    手順通りにやったのですが、2番のechoコマンドの時点で
    zsh: そのようなファイルやディレクトリはありません: /etc/apt/sources.list.d/nginx.list
    と表示されてしまいます。

    • mizu より:

      コメントありがとうございます。
      手順と記載内容に誤りがないかを再確認してみましたが、私の環境では問題が発生しませんでした。

      りくせんさんの環境でエラーになった echo コマンドの行
      「 echo “deb-src http://nginx.org/packages/mainline/debian/ stretch nginx” >> /etc/apt/sources.list.d/nginx.list 」
      の意味ですが、
      「ダブルクォーテーションで囲んだテキスト列を、echo コマンドで標準出力に出力した結果が、リダイレクトされ /etc/apt/sources.list.d ディレクトリ配下の nginx.list ファイルに追記される」
      になります。

      今回、nginx.list ファイルが存在しない場合は新規に作成されるため、 echo コマンドの行を実行して「そのようなファイルやディレクトリはありません」のメッセージを表示するのは、/etc/apt/sources.list.d のディレクトリパスが無いことが考えられます。
      「もしかすると Raspbian Stretch の提供時期の差異により、過去のイメージには /etc/apt/sources.list.d のディレクトリが無かったのでは?」
      と思い、Raspbian Stretch の初期版と思われる 2017-08-16-raspbian-stretch-lite.zip を展開して確認してみましたが、今回の対象ディレクトリ /etc/apt/sources.list.d は初期から存在していました。

      りくせんさんの環境に /etc/apt/sources.list.d のディレクトリが有るかを確認してみて下さい。

      また、可能性の一つとして「 sudo echo ~ 」としていないでしょうか?
      /etc/apt/sources.list.d のディレクトリには、root ユーザしか書き込みができない様にパーミッション設定がされています。
      sudo で実行した場合、echo コマンドは root 権限で実行されますが、リダイレクト後のファイル書き込みは一般ユーザ権限で行われるため、nginx.list ファイルは作成されません。

      以上、りくせんさんの問題解決の参考になると幸いです。