株式会社要

株式会社要

リバプロnginxをインストールするためにyumリポジトリを手動でスイッチ

FJです。たまには技術ネタです。

リバースプロキシを使いたいのでnginx(えんじんえっくす)を使います。

(プロキシってsquidじゃねぇの?って人、あなたは古参なので、この記事はためになりません)

 

 

nginxってなにって人、答え→httpd。Webサーバってやつでapacheよりも凄いんですよ。今回はhttpdをプロキシ用途に使うという意味でnginxを使います。

 

リバースプロキシが何ってワカラナイ人いる?言葉の通りプロキシを反対に使うのですが、ん〜また今度ね。
ブログじゃなきゃ5分で終わるのですが、今後も後輩様にご説明さしあげる機会があるかもと頭をよぎったのでパッケージャの説明もかねて以下、硯に向かいます。

この類のブログはあまり書かないですね。ブログのための文面にするよりは仕事を速く進めたいですからね。今後も出現頻度は少ないと思います。

 

(前提:
[root@bananacutter etc]# cat redhat-release
CentOS release 6.5 (Final)
[root@bananacutter etc]# uname -a
Linux xxx.xxx.xxx 2.6.32-431.23.3.el6.x86_64 #1 SMP Thu Jul 31 17:20:51 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
)

 

 

1回目 通常ならyum install nginx
とかってコマンドを打てば終わりですよね。

パッケージの名称(バージョン)が出てきますよね以下のような感じに。

[root@bananacutter ~]# yum install nginx
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
Setting up Install Process
Resolving Dependencies
–> Running transaction check
—> Package nginx.x86_64 0:1.7.0-1.el6 will be installed
–> Processing Dependency: GeoIP for package: nginx-1.7.0-1.el6.x86_64
–> Processing Dependency: libGeoIP.so.1()(64bit) for package: nginx-1.7.0-1.el6.x86_64
–> Finished Dependency Resolution
Error: Package: nginx-1.7.0-1.el6.x86_64 (CentALT)
Requires: libGeoIP.so.1()(64bit)
Error: Package: nginx-1.7.0-1.el6.x86_64 (CentALT)
Requires: GeoIP
You could try using –skip-broken to work around the problem
You could try running: rpm -Va –nofiles –nodigest
翻訳するとバージョンとか依存するパッケージが必要とかってチェックするぜ、そのnginx1.7には別途部品が必須だけど、ないからエラーだぜって。ってなことにらしいですよ。

 

2回目 リポジトリを指定してもっかいやってみる。

[root@bananacutter yum.repos.d]# yum install nginx –enablerepo=epel
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
epel/metalink | 4.2 kB 00:00
* base: ftp.iij.ad.jp
* epel: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
Setting up Install Process
Resolving Dependencies
–> Running transaction check
—> Package nginx.x86_64 0:1.7.0-1.el6 will be installed
–> Processing Dependency: GeoIP for package: nginx-1.7.0-1.el6.x86_64
–> Processing Dependency: libGeoIP.so.1()(64bit) for package: nginx-1.7.0-1.el6.x86_64
–> Running transaction check
—> Package GeoIP.x86_64 0:1.6.5-1.el6 will be installed
–> Processing Dependency: geoipupdate for package: GeoIP-1.6.5-1.el6.x86_64
–> Processing Dependency: GeoIP-data for package: GeoIP-1.6.5-1.el6.x86_64
–> Running transaction check
—> Package GeoIP-GeoLite-data.noarch 0:2015.04-2.el6 will be installed
–> Processing Dependency: GeoIP-GeoLite-data-extra = 2015.04-2.el6 for package: GeoIP-GeoLite-data-2015.04-2.el6.noarch
—> Package geoipupdate.x86_64 0:2.2.1-2.el6 will be installed
–> Running transaction check
—> Package GeoIP-GeoLite-data-extra.noarch 0:2015.04-2.el6 will be installed
–> Finished Dependency Resolution

Dependencies Resolved

============================================================================================
Package Arch Version Repository Size
============================================================================================
Installing:
nginx x86_64 1.7.0-1.el6 CentALT 1.0 M
Installing for dependencies:
GeoIP x86_64 1.6.5-1.el6 epel 113 k
GeoIP-GeoLite-data noarch 2015.04-2.el6 epel 343 k
GeoIP-GeoLite-data-extra noarch 2015.04-2.el6 epel 23 M
geoipupdate x86_64 2.2.1-2.el6 epel 28 k

Transaction Summary
============================================================================================
Install 5 Package(s)

Total download size: 24 M
Installed size: 52 M
Is this ok [y/N]:N
Nで一旦キャンセル、止めておきます。
こんどは依存する部品も探してきてインストールできそうです。
1回目と何が違うかっていうと、オプションで「–enablerepo=epel」と打ってリポジトリの指定をしました。

 

解説

リポジトリって何?って人いるかな。脱線しない程度に言うと、英語ってかコンピュータに多い抽象的かつ相対的な単語ですが、repositoryは「管理・保管するための入れ物」ってニュアンスです。例えばソースコードとかファイルを管理する場所もrepositoryっていいますよね。

 

 

1回目の時はデフォルトリポジトリからパッケージを探してます。

ちなみにデフォルトリポジトリってのは/etc/yum.repos.d/CentOS-Base.repoで書かれてる宛先を参照します。

 

中身みてもenable=1って書いてないぞって突っ込みがありそうですが、enableってかかないと自動的にenable=1と判断される、つまり有効な状態なので、常に探しに行きますよってことね。

 

2回目は、epelって言うリポジトリを指定してます。あらかじめ/etc/yum.repos.d/epel.repoってのを作っておいたのでそこに書かれている先を探しに行った。そしたら1回目で無くてエラーとなった依存部品もあったので、エラーが出ないのでインストールするよ、いい?って聞いてきた所でNで止めました。

 

なんで止めたの?まだインストールしたくない理由がありました。
最新でなくとも新しめでStableなパッケージをインストールしたいのが理由です。
http://nginx.org/を見てみると今日時点では1.9.7をメインラインにリリースしましたって書かれてます。なるほど1.7.0とはメジャーで2つもバージョンが離れているのだから脆弱性とか心配ですね。最新にする?んなわけないですよね。nginxそのもののデバッグとかお試し実験とかしませんので、安定(Stable)しているものを選びます。http://nginx.org/en/download.htmlここには今日時点では1.8.0がStableだよって書いてありますね。

 

こういったOSSのダウンロードサイトを訪れると、xxx.tar.gzってアーカイブがありますが、こいつをこのままダウンロードして、コンパイルインストール(make,make installってやつ)とか新人君にありがちな方式をしちゃだめです。間違ってはいないけどプロの慣習では極力make installはやりません。しかたないですよねインターネットで調べるとソースをダウンロードしてmakeするってブログが沢山出てきますよね。プロの慣習では極力パッケージインストールをします。なんでかって、当該サーバにおいてインストールされている品目を一覧で見たり管理したり特定のパッケージだけをアップデートしたりするためです。その他makeやっちゃうとインストール先もバラバラになりますのでアンインストールする時はパッケージャ(rpmとかyum)で削除できません。
http://nginx.org/en/download.htmlは親切に最下部にちゃんと「Pre-Buit Packages」ってありますね。
たどると今度はrpmってパッケージがありましたね。まだ喜ぶのは早いですよ。これインストール対象の本体じゃないですよ。
中身なんだろーって人は、あまりやらないですがrpm2cpioで見ると中身がわかります。

 
[root@bananacutter ~]# rpm2cpio nginx-release-centos-6-0.el6.ngx.noarch.rpm |cpio -t
./etc/pki/rpm-gpg/RPM-GPG-KEY-nginx
./etc/yum.repos.d/nginx.repo

 
は?何か意味あるんですかそれ?ってそだね別にrpmの中身を確認するだけです。
じゃインストールしちゃいますか

[root@bananacutter ~]# rpm -ihv nginx-release-centos-6-0.el6.ngx.noarch.rpm
警告: nginx-release-centos-6-0.el6.ngx.noarch.rpm: ヘッダ V4 RSA/SHA1 Signature, key ID 7bd9bf62: NOKEY
準備中… ########################################### [100%]
1:nginx-release-centos ########################################### [100%]

 

はい終わり、ん?何がどうなった?って気になる人はさっきの見ればどこに何が配置されたかわかるんですよ。

 
忘れちゃいけない目的はyumで1.7よりも新しいnginxをインストールするんでしたね。
なので/etc/yum.repos.d/nginx.repoこのファイルが必要だったわけです。
何が書いてあるかっていうと

 

# nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=1

 
なるほど、yumにここを参照させてやれば最適なパッケージがインストールできる。やったー。

早速って人は

[root@bananacutter ~]# yum –enablerepo=nginx install nginx

時間がない人はここまで読めば目的達成です。

 
勉強熱心なあなたちょっとまて。rpmでrepoファイル入れたけどそのくらい手で書けますよ。

 

vi /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=0

 

こんな感じです。
rpmで配布されたrepoファイルとほんの少しだけ違いますがおそらく効能に変化はないと思います。

 
yumの変数の解説
$releasever
(この変数を使用すると、Red Hat Enterprise Linux のリリースバージョンを参照することができます。Yum は /etc/yum.conf 設定ファイルにある distroverpkg=value の行より $releasever の値を取得します。/etc/yum.conf にそのような行がない場合は、yum は redhat-release パッケージよりバージョン番号を取得することで、正しい値を導きます。)

とあるので、どのバージョンかを自動で判別できるというものなので、パッケージのあるURLの中から適切なものをインストールできるメリットがあります。
$basearch
($basearch を使用すると、システムのベースアーキテクチャーを参照できます。例えば、i686 及び i586 両マシンは i386 のベースアーキテクチャーを持っており、AMD64 及び Intel64 マシンは x86_64 のベースアーキテクチャーを持っています。)

こちらも同様にURLにあるx86だとかi386だとか、どのCPU向けのパッケージかどうかを判別できるようにするというものです。

 

じゃ最後に

[root@bananacutter ~]# yum –enablerepo=nginx install nginx

Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
nginx | 2.9 kB 00:00
Setting up Install Process
Resolving Dependencies
–> Running transaction check
—> Package nginx.x86_64 0:1.8.0-1.el6.ngx will be installed
–> Finished Dependency Resolution

Dependencies Resolved

============================================================================================
Package Arch Version Repository Size
============================================================================================
Installing:
nginx x86_64 1.8.0-1.el6.ngx nginx 352 k

Transaction Summary
============================================================================================
Install 1 Package(s)

Total download size: 352 k
Installed size: 872 k
Is this ok [y/N]: y
Downloading Packages:
nginx-1.8.0-1.el6.ngx.x86_64.rpm | 352 kB 00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Warning: RPMDB altered outside of yum.
Installing : nginx-1.8.0-1.el6.ngx.x86_64 1/1
———————————————————————-

Thanks for using nginx!

Please find the official documentation for nginx here:
* http://nginx.org/en/docs/

Commercial subscriptions for nginx are available on:
* http://nginx.com/products/

———————————————————————-
Verifying : nginx-1.8.0-1.el6.ngx.x86_64 1/1

Installed:
nginx.x86_64 0:1.8.0-1.el6.ngx

Complete!
インストールおわりー。まだまだ設定はこれからだけどブログの記事はこの辺で区切ります。
1.7.0の時に出てた依存パッケージも1.8.0では不要みたいで1.8.0にしてよかったですね。

 

おわり

LEAVE A REPLY

*
*
* (公開されません)

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

Return Top