過去に同様の記事を投稿していますが、現状に相違点がないかの確認を含めて、手順の確認を行いましたので再投稿します。
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 アドレス指定でアクセスし、下記の初期画面の表示を確認できれば動作確認完了です。
コメント
手順通りにやったのですが、2番のechoコマンドの時点で
zsh: そのようなファイルやディレクトリはありません: /etc/apt/sources.list.d/nginx.list
と表示されてしまいます。
コメントありがとうございます。
手順と記載内容に誤りがないかを再確認してみましたが、私の環境では問題が発生しませんでした。
りくせんさんの環境でエラーになった 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 ファイルは作成されません。
以上、りくせんさんの問題解決の参考になると幸いです。