nginx のrpmを作成する ( nginx_syslog_patch を組み込む )
先にも説明したように、nginx_syslog_patchモジュールをnginxに組み込むには、rpmの再構築が必要になります。
以前の「Nginxの最新版ソースから バイナリパッケージ(rpm)を作成し、インストールする」で、nginxのrpmの再構築を行いました。
基本的なやり方は、同じです。先の「Nginxの最新版ソースから バイナリパッケージ(rpm)を作成し、インストールする」になぞって解説してみます。
[C]: 通常のnginx 、nginx_syslog_patch 組み込み nginx 共に同じ作業となります。
[R]: nginx_syslog_patch 組み込み nginx のみで必要な作業となります。
[C]nginxのソースrpmパッケージをダウンロードし、インストールします。
$ wget http://dl.fedoraproject.org/pub/epel/5/SRPMS/nginx-0.8.55-1.el5.src.rpm
...
$ rpm -ivh nginx-0.8.55-1.el5.src.rpm
...
警告: グループ mockbuild は存在しません - root を使用します
警告: ユーザ mockbuild は存在しません - root を使用します
...
|
インストール先は、
/usr/src/redhat/の配下になります。
/usr/src/redhat/SOURCES : ソースコード
/usr/src/redhat/SPECS : rpm作成ファイル (specファイル)
/usr/src/redhat/RPM : rpm出力先ディレクトリ
今回は、ダウンロード先に、http://dl.fedoraproject.org/pub/epel/5/SRPMS/を使いました。
[C]ソースコードのディレクトリに最新のnginxのソースコードをダウンロードします。
$ cd /usr/src/redhat/SOURCES
$ wget http://nginx.org/download/nginx-1.0.12.tar.gz
...
|
必ず、/usr/src/redhat/SOURCESにtar.gz形式の最新ファイルをダウンロードします。
nginxの最新版は、http://nginx.org/download/で公開されています。
パッケージのバージョンによってファイル名も異なります。wget時には、ファイル名を確認しておきましょう。
ここでは、現在(2012.02)の最新版 1.0.12 を使います。
[R]nginx_syslog_patch の最新ソースコードをダウンロードする。
$ cd /usr/src/redhat/SOURCES
$ wget --no-check-certificate -O nginx-syslog-patch.tar.gz https://github.com/dpaneda/nginx/tarball/master
...
|
必ず、/usr/src/redhat/SOURCESにtar.gz形式の最新ファイルをダウンロードします。
nginx_syslog_patch の最新版は、https://github.com/yaoweibin/nginx_syslog_patchで公開されています。
現在(2012.02)は、上記URLから直接ダウンロードすると最新版がダウンロードできますが、必ず、確認しましょう。
[C]rpm作成ファイル (specファイル)を編集します。
$ cd /usr/src/redhat/SPECS
$ cp nginx.spec nginx.spec.org
$ vi nginx.spec
|
以下は、nginx.specの編集内容です。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
| %define nginx_user nginx
%define nginx_group %{nginx_user}
%define nginx_home %{_localstatedir}/lib/nginx
%define nginx_home_tmp %{nginx_home}/tmp
%define nginx_logdir %{_localstatedir}/log/nginx
%define nginx_confdir %{_sysconfdir}/nginx
%define nginx_datadir %{_datadir}/nginx
%define nginx_webroot %{nginx_datadir}/html
Name: nginx
Version: 1.0.12
Release: 1%{?dist}
Summary: Robust, small and high performance HTTP and reverse proxy server
Group: System Environment/Daemons
License: BSD
URL: http://nginx.net/
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: pcre-devel,zlib-devel,openssl-devel,perl(ExtUtils::Embed)
BuildRequires: libxslt-devel,GeoIP-devel,gd-devel
Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version))
Requires: kernel >= 2.6.18-181
Requires(pre): shadow-utils
Requires(post): chkconfig
Requires(preun): chkconfig, initscripts
Requires(postun): initscripts
Provides: webserver
Source0: http://nginx.org/download/nginx-%{version}.tar.gz
Source1: %{name}.init
Source2: %{name}.logrotate
Source3: virtual.conf
Source4: ssl.conf
Source5: %{name}.sysconfig
Source6: nginx.conf
Source11: nginx-syslog-patch.tar.gz
Source100: index.html
Source101: poweredby.png
Source102: nginx-logo.png
Source103: 50x.html
Source104: 404.html
Patch0: %{_builddir}/nginx-%{version}/dpaneda-nginx-d111560/syslog_patch/nginx_syslog_1.0.6.patch
%description
Nginx [engine x] is an HTTP(S) server, HTTP(S) reverse proxy and IMAP/POP3
proxy server written by Igor Sysoev.
%prep
%setup -q
%setup -T -D -a 11
%patch0 -p1
%build
export LANG='ja_JP.UTF-8'
export DESTDIR=%{buildroot}
./configure \
--user=%{nginx_user} \
--group=%{nginx_group} \
--prefix=%{nginx_datadir} \
--sbin-path=%{_sbindir}/%{name} \
--conf-path=%{nginx_confdir}/%{name}.conf \
--error-log-path=%{nginx_logdir}/error.log \
--http-log-path=%{nginx_logdir}/access.log \
--http-client-body-temp-path=%{nginx_home_tmp}/client_body \
--http-proxy-temp-path=%{nginx_home_tmp}/proxy \
--http-fastcgi-temp-path=%{nginx_home_tmp}/fastcgi \
--http-uwsgi-temp-path=%{nginx_home_tmp}/uwsgi \
--http-scgi-temp-path=%{nginx_home_tmp}/scgi \
--pid-path=%{_localstatedir}/run/%{name}.pid \
--lock-path=%{_localstatedir}/lock/subsys/%{name} \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_xslt_module \
--with-http_image_filter_module \
--with-http_geoip_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_degradation_module \
--with-http_stub_status_module \
--with-http_perl_module \
--with-mail \
--with-file-aio \
--with-mail_ssl_module \
--with-ipv6 \
--with-cc-opt="%{optflags} $(pcre-config --cflags)" \
--with-cc-opt="%{optflags} $(pcre-config --cflags)" \
--add-module=%{_builddir}/nginx-%{version}/dpaneda-nginx-d111560/syslog_patch
make %{?_smp_mflags}
%install
rm -rf %{buildroot}
make install DESTDIR=%{buildroot} INSTALLDIRS=vendor
find %{buildroot} -type f -name .packlist -exec rm -f {} \;
find %{buildroot} -type f -name perllocal.pod -exec rm -f {} \;
find %{buildroot} -type f -empty -exec rm -f {} \;
find %{buildroot} -type f -exec chmod 0644 {} \;
find %{buildroot} -type f -name '*.so' -exec chmod 0755 {} \;
chmod 0755 %{buildroot}%{_sbindir}/nginx
%{__install} -p -D -m 0755 %{SOURCE1} %{buildroot}%{_initrddir}/%{name}
%{__install} -p -D -m 0644 %{SOURCE2} %{buildroot}%{_sysconfdir}/logrotate.d/%{name}
%{__install} -p -D -m 0644 %{SOURCE5} %{buildroot}%{_sysconfdir}/sysconfig/%{name}
%{__install} -p -d -m 0755 %{buildroot}%{nginx_confdir}/conf.d
%{__install} -p -m 0644 %{SOURCE3} %{SOURCE4} %{buildroot}%{nginx_confdir}/conf.d
%{__install} -p -m 0644 %{SOURCE6} %{buildroot}%{nginx_confdir}
%{__install} -p -d -m 0755 %{buildroot}%{nginx_home_tmp}
%{__install} -p -d -m 0755 %{buildroot}%{nginx_logdir}
%{__install} -p -d -m 0755 %{buildroot}%{nginx_webroot}
%{__install} -p -m 0644 %{SOURCE100} %{SOURCE101} %{SOURCE102} %{SOURCE103} %{SOURCE104} %{buildroot}%{nginx_webroot}
for textfile in CHANGES
do
mv $textfile $textfile.old
iconv --from-code ISO8859-1 --to-code UTF-8 --output $textfile $textfile.old
rm -f $textfile.old
done
%clean
rm -rf %{buildroot}
%pre
if [ $1 == 1 ]; then
%{_sbindir}/useradd -c "Nginx user" -s /bin/false -r -d %{nginx_home} %{nginx_user} 2>/dev/null || :
fi
%post
if [ $1 == 1 ]; then
/sbin/chkconfig --add %{name}
fi
%preun
if [ $1 = 0 ]; then
/sbin/service %{name} stop >/dev/null 2>&1
/sbin/chkconfig --del %{name}
fi
%postun
if [ $1 == 2 ]; then
/sbin/service %{name} upgrade || :
fi
%files
%defattr(-,root,root,-)
%doc LICENSE CHANGES README
%{nginx_datadir}/
%{_sbindir}/%{name}
%{_mandir}/man3/%{name}.3pm.gz
%{_initrddir}/%{name}
%dir %{nginx_confdir}
%dir %{nginx_confdir}/conf.d
%dir %{nginx_logdir}
%config(noreplace) %{nginx_confdir}/conf.d/*.conf
%config(noreplace) %{nginx_confdir}/win-utf
%config(noreplace) %{nginx_confdir}/%{name}.conf.default
%config(noreplace) %{nginx_confdir}/mime.types.default
%config(noreplace) %{nginx_confdir}/fastcgi.conf
%config(noreplace) %{nginx_confdir}/fastcgi.conf.default
%config(noreplace) %{nginx_confdir}/fastcgi_params
%config(noreplace) %{nginx_confdir}/fastcgi_params.default
%config(noreplace) %{nginx_confdir}/scgi_params
%config(noreplace) %{nginx_confdir}/scgi_params.default
%config(noreplace) %{nginx_confdir}/uwsgi_params
%config(noreplace) %{nginx_confdir}/uwsgi_params.default
%config(noreplace) %{nginx_confdir}/koi-win
%config(noreplace) %{nginx_confdir}/koi-utf
%config(noreplace) %{nginx_confdir}/%{name}.conf
%config(noreplace) %{nginx_confdir}/mime.types
%config(noreplace) %{_sysconfdir}/logrotate.d/%{name}
%config(noreplace) %{_sysconfdir}/sysconfig/%{name}
%dir %{perl_vendorarch}/auto/%{name}
%{perl_vendorarch}/%{name}.pm
%{perl_vendorarch}/auto/%{name}/%{name}.so
%attr(-,%{nginx_user},%{nginx_group}) %dir %{nginx_home}
%attr(-,%{nginx_user},%{nginx_group}) %dir %{nginx_home_tmp}
...
|
青文字: 通常の nginx 、nginx_syslog_patch 組み込み nginx 共に同じ作業となります。
赤文字: nginx_syslog_patch 組み込み nginx のみで必要な作業となります。
- 11行目 : nginxのバージョンを設定します。
- 42行目 : nginx_syslog_patch のソースコードのアーカイブファイルを設定します。
- 51行目 : nginxのパッチは最新版なので無いためコメントアウトしておきます。
- 52行目 : nginxへ syslog用パッチを設定します。
- 60行目 : nginx_syslog_patch のソースコードのアーカイブファイルをビルド前処理としてセットアップ(展開)します。
- 61行目 : nginxのパッチは最新版なので無いためコメントアウトしておきます。
- 62行目 : nginxへ syslog用パッチをあてます。
- 70行目 : nginxを日本語、UTF-8をデフォルトに設定します。
- 107行目 : 最後に \ 記号を追加し、次行へ継続としています。
- 108行目 : add-moduleで nginx_syslog_patch を追加します。
現在( 2012.02 )では、
nginx_syslog_patch の展開先のディレクトリは、
dpaneda-nginx-d111560/syslog_patch となっています。
nginx_syslog_patch のバージョンによって、ディレクトリ構成は異なるかもしれませんので、一旦、適当なディレクトリで解凍し確認しておきましょう。
また、現在( 2012.02 )では、nginxにあてる syslog用パッチファイルは2つ存在します。
- syslog_0.8.54.patch
– これは、Nginxのバージョンが、0.8.54から1.0.5未満までに対応したパッチです。
- syslog_1.0.6.patch
– これは、Nginxのバージョンが、1.0.6以上に対応したパッチです。
ここでのNginxのバージョンは。1.0.12 なので、
syslog_1.0.6.patch を使います。
また、上記2つのファイルは、いずれも同じディレクトリにあります。
編集を終えたら、保存します。
[C]rpmを作成します。
$ rpmbuild -bb nginx.spec
...
|
rpmbuildでrpm作成します。
これでエラーが出なければOKです。
作成されたRPM ( nginx-1.0.12-1.xxxx.rpm )は、
64bitOSなら、/usr/src/redhat/RPMS/x86_64に作成されます。
32bitOSなら、/usr/src/redhat/RPMS/i386に作成されます。
そもそも、
rpmbuildが動作しない場合は、
$ yum -y install yum-utils
$ yum -y install rpm-build
$ yum -y install gcc++
|
のような必要なビルド環境をインストールしてください。
また、
$ rpmbuild -bb nginx.spec
エラー: ビルド依存性の失敗:
pcre-devel は nginx-1.0.12-1.x86_64 に必要とされています
libxslt-devel は nginx-1.0.12-1.x86_64 に必要とされています
GeoIP-devel は nginx-1.0.12-1.x86_64 に必要とされています
$
|
のように必要なライブラリが不足しているような場合は、出力されている必要なライブラリをyumで一つ一つインストールすればOKです。
nginxをインストールする
rpmさえできれば、インストールは簡単ですね。
以下は、64bit版のnginxをインストールした例です。
$ cd /usr/src/redhat/RPMS/x86_64
$ rpm -Uvh nginx-1.0.12-1.x86_64.rpm
...
|
これでインストールまでOKです。
簡単だったですね。
最後に、既にapacheが起動中なら、apacheを停止して、nginxを起動すればOKです。
$ /etc/init.d/httpd stop
stop を停止中: [ OK ]
$ /etc/init.d/nginx start
nginx を起動中: [ OK ]
|
IPアドレスでOKなので、ウェブブラウザからサイトへアクセスしてみてください。
以下のような画面が表示さればOKです。ちゃんと動いています。
デフォルトの設定では、ウェブサイトのルートディレクトリは、
/usr/share/nginx/html/
を指しています。
この中のindex.htmlを変更して、ちゃんと表示されるか確認しましょう。
既に同じバージョンをインストールしている場合、
rpmにて、現在のnginxを一旦削除して、再インストールします。
一旦、設定ファイル ( /etc/nginx 全て )をバックアップしておきましょう。
$ rpm -e nginx
$ cd /usr/src/redhat/RPMS/x86_64
$ rpm -ivh nginx-1.0.12-1.i386.rpm
...
|
また、強制的にインストールすることもできますが、一旦削除した方が無難でしょう。
$ rpm -Uvh --force nginx-1.0.12-1.x86_64.rpm
...
|
syslog( rsyslog ) へログ情報を出力してみる
インストールできて、簡単動作確認までできたら、syslog( rsyslog ) へログ情報を出力してみましょう。
nginxでログの出力先をsyslogへ変更する
nginxでログの出力先をsyslogへ変更するには、/etc/nginx/nginx.conf を編集します。
以下は、デフォルトの/etc/nginx/nginx.conf をログの出力先をsyslogへ変更したものです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
| ...
syslog local6 nginx;
user nginx;
worker_processes 1;
...
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log syslog:notice main;
error_log syslog:warn;
sendfile on;
...
}
|
上記の設定では、syslogのみへ出力するように設定しています。
syslog ( rsyslog ) でログの出力先を変更する
syslog ( rsyslog ) でログの出力先を変更するには、
syslogd の場合 : /etc/syslog.conf を編集します。
rsyslog の場合 : /etc/rsyslog.conf を編集します。
編集内容は、設定ファイルがsyslogと互換なので、同じように設定できます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| ...
*.info;mail.none;authpriv.none;cron.none;local6.none /var/log/messages
...
local6.notice /var/log/rsyslog_access.log
local6.warn /var/log/rsyslog_error.log
...
|
最後に nginx , syslog ( rsyslog ) を再起動します。
$ /etc/init.d/rsyslog restart
システムロガーを停止中: [ OK ]
システムロガーを起動中: [ OK ]
$ /etc/init.d/nginx restart
nginx を停止中: [ OK ]
nginx を起動中: [ OK ]
|
ウェブブラウザでサイトへアクセスしてみてください。/var/log/rsyslog_access.log へ以下のようなロギングが出力されるはずです。
Feb 20 12:10:23 hogehoge nginx: XXX.XXX.XXX.XXX - - [20/Feb/2012:12:10:23 +0900] "GET /nginx-logo.png HTTP/1.1" 304 0 "http://www.exmaple.com/" "Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2" "-"
Feb 20 12:10:23 hogehoge nginx: XXX.XXX.XXX.XXX - - [20/Feb/2012:12:10:23 +0900] "GET /poweredby.png HTTP/1.1" 304 0 "http://www.exmaple.com/" "Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2" "-"
Feb 20 12:10:28 hogehoge nginx: XXX.XXX.XXX.XXX - - [20/Feb/2012:12:10:28 +0900] "-" 400 0 "-" "-" "-"
|
nginx_syslog_patch がちゃんと組み込まれたかどうか確認するには、以下のようにコマンドで確認できます。
$ nginx -V
nginx version: nginx/1.0.12
TLS SNI support disabled
configure arguments: \
--user=nginx \
--group=nginx \
--prefix=/usr/share/nginx \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--http-client-body-temp-path=/var/lib/nginx/tmp/client_body \
--http-proxy-temp-path=/var/lib/nginx/tmp/proxy \
--http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi \
--http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi \
--http-scgi-temp-path=/var/lib/nginx/tmp/scgi \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/lock/subsys/nginx \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_xslt_module \
--with-http_image_filter_module \
--with-http_geoip_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_degradation_module \
--with-http_stub_status_module \
--with-http_perl_module \
--with-mail \
--with-file-aio \
--with-mail_ssl_module \
--with-ipv6 \
--with-cc-opt='-O2 -g -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables' \
--with-cc-opt='-O2 -g -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables' \
--add-module=/usr/src/redhat/BUILD/nginx-1.0.12/dpaneda-nginx-d111560/syslog_patch
|
configure があまりに長いので 適当な箇所で
\ 記号で改行しています。
ちゃんと最後に
syslog_patch と出力されていますね。
これで syslog ( rsyslog ) へ出力できるようになりました。これで本当にうれしいのは、だぶん大規模なウェブサイトを運営している方でしょう。
rsyslogを利用しているなら、簡単に1台のサーバーへロギングを集約できるようになります。
コメントを投稿 :