nginx のrpmを作成する ( nginx cache purgeモジュールを組み込む )
先にも説明したように、nginx cache purgeモジュールをnginxに組み込むには、rpmの再構築が必要になります。
以前の「Nginxの最新版ソースから バイナリパッケージ(rpm)を作成し、インストールする」で、nginxのrpmの再構築を行いました。
基本的なやり方は、同じです。先の「Nginxの最新版ソースから バイナリパッケージ(rpm)を作成し、インストールする」になぞって解説してみます。
[C]: 通常のnginx 、nginx cache purge組み込みnginx共に同じ作業となります。
[R]: nginx cache purge組み込み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.10.tar.gz
...
|
必ず、/usr/src/redhat/SOURCESにtar.gz形式の最新ファイルをダウンロードします。
nginxの最新版は、http://nginx.org/download/で公開されています。
パッケージのバージョンによってファイル名も異なります。wget時には、ファイル名を確認しておきましょう。
ここでは、現在(2011.11)の最新版 1.0.10 を使います。
[R]nginx cache purgeモジュールの最新ソースコードをダウンロードする。
$ cd /usr/src/redhat/SOURCES
$ wget http://labs.frickle.com/files/ngx_cache_purge-1.4.tar.gz
...
|
必ず、/usr/src/redhat/SOURCESにtar.gz形式の最新ファイルをダウンロードします。
nginx cache purgeモジュールの最新版は、http://labs.frickle.com/files/で公開されています。
パッケージのバージョンによってファイル名も異なります。wget時には、ファイル名を確認しておきましょう。
ここでは、現在(2011.11)の最新版 1.4 を使います。
[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
198
199
200
| %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.10
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
Source10: ngx_cache_purge-1.4.tar.gz
Source100: index.html
Source101: poweredby.png
Source102: nginx-logo.png
Source103: 50x.html
Source104: 404.html
%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 10
%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}/ngx_cache_purge-1.4
make %{?_smp_mflags}
mv ngx_cache_purge-1.4/CHANGES ngx_cache_purge-1.4/CHANGES.ngx_cache_purge
mv ngx_cache_purge-1.4/README.md ngx_cache_purge-1.4/README.ngx_cache_purge
%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
%doc ngx_cache_purge-1.4/CHANGES.ngx_cache_purge ngx_cache_purge-1.4/README.ngx_cache_purge
%{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 cache purge組み込みnginx共に同じ作業となります。
赤文字: nginx cache purge組み込みnginxのみで必要な作業となります。
- 11行目 : nginxのバージョンを設定します。
- 42行目 : nginx cache purgeのソースコードのアーカイブファイルを設定します。
- 51行目 : nginxのパッチは最新版なので無いためコメントアウトしておきます。
- 60行目 : nginxのパッチは最新版なので無いためコメントアウトしておきます。
- 61行目 : nginx cache purgeのソースコードのアーカイブファイルをビルド前処理としてセットアップ(展開)します。
- 69行目 : nginxを日本語、UTF-8をデフォルトに設定します。
- 106行目 : 最後に \ 記号を追加し、次行へ継続としています。
- 107行目 : add-moduleで nginx cache purge を追加します。
- 110行目 : nginx cache purgeのCHANGES(履歴)ファイルが、nginxとかぶらないように名前を変更します。
- 111行目 : nginx cache purgeのREADMEファイル が、nginxとかぶらないように名前を変更します。
- 168行目 : nginxのドキュメントファイルに nginx cache purgeのCHANGES(履歴)ファイル,READMEファイル を追加します。
編集を終えたら、保存します。
[C]rpmを作成します。
$ rpmbuild -bb nginx.spec
...
|
rpmbuildでrpm作成します。
これでエラーが出なければOKです。
作成されたRPM ( nginx-1.0.10-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.10-1.x86_64 に必要とされています
libxslt-devel は nginx-1.0.10-1.x86_64 に必要とされています
GeoIP-devel は nginx-1.0.10-1.x86_64 に必要とされています
$
|
のように必要なライブラリが不足しているような場合は、出力されている必要なライブラリをyumで一つ一つインストールすればOKです。
nginxをインストールする
rpmさえできれば、インストールは簡単ですね。
以下は、64bit版のnginxをインストールした例です。
$ cd /usr/src/redhat/RPMS/x86_64
$ rpm -Uvh nginx-1.0.10-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-1.0.10-1
...
$ cd /usr/src/redhat/RPMS/x86_64
$ rpm -Uvh nginx-1.0.10-1.x86_64.rpm
...
|
また、強制的にインストールすることもできますが、一旦削除した方が無難でしょう。
$ rpm -Uvh --force nginx-1.0.10-1.x86_64.rpm
...
|
nginx cache purge を組み込むのは、リバースプロキシーのキャッシュを削除するの非常に便利なモジュールです。
ちゃんと組み込まれたかどうか確認するには、以下のようにコマンドで確認できます。
$ nginx -V
nginx: nginx version: nginx/1.0.10
nginx: TLS SNI support disabled
nginx: 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 -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector \
--param=ssp-buffer-size=4 -m64 -mtune=generic' \
--with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector \
--param=ssp-buffer-size=4 -m64 -mtune=generic' \
--add-module=/usr/src/redhat/BUILD/nginx-1.0.10/ngx_cache_purge-1.4
|
configure があまりに長いので 適当な箇所で
\ 記号で改行しています。
ちゃんと最後に
ngx_cache_purge-1.4 と出力されていますね。
nginx cache purgeの具体的な利用方法については、
Nginxのproxyでキャッシュを削除する方法を参照してください。
2012年5月3日, 7:48 AM
[…] リバースプロキシのキャッシュ削除モジュール nginx cache purge を組み込む http://sakura.off-soft.net/cen……stall.html […]
2012年6月4日, 4:24 AM
[…] […]