CentOS5.5 x86_64 で 最新のnginx を rpmbuildする
EPELで実はnginxのrpmがあるんだけども、versionが0.6で止まっている。
なので、EPELからsrc.rpmを落としてきてそいつに最新のnginxをつっこんでbuildした。
EPELからnginxのsrc.rpmをダウンロードし、インストールする
# wget http://ftp.iij.ad.jp/pub/linux/fedora/epel/5/SRPMS/nginx-0.6.39-5.el5.src.rpm # rpm -i nginx-0.6.39-5.el5.src.rpm
最新のnginxをDLし、SPECファイルを編集する
# cd /usr/src/redhat/SOURCES # wget http://nginx.org/download/nginx-0.8.50.tar.gz # cd ../SPECS/ # vi nginx.spec
versionを変更する
Version: 0.8.50
patchを当てないようにする
#Patch0: nginx-auto-cc-gcc.patch #Patch1: nginx-cve-2009-3555.patch #%patch0 -p0 #%patch1 -p0
LANG=C だとmakeでこけてしまうので、LANGを上書きする
%build # nginx does not utilize a standard configure script. It has its own # and the standard configure options cause the nginx configure script # to error out. This is is also the reason for the DESTDIR environment # variable. The configure script(s) have been patched (Patch1 and # Patch2) in order to support installing into a build environment. export LANG='ja_JP.UTF-8' <- 追加 export DESTDIR=%{buildroot}
TODO: rpmの仕様なのか、configureする前にLANG=Cにするみたいなので、上書きしているけど対応方法が強引すぎるため要調査
エラー内容は以下
make -f objs/Makefile make[1]: Entering directory `/usr/src/redhat/BUILD/nginx-0.8.50' gcc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Wunused-function -Wunused-variable -Wunused-value -Werror -g -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \ -o objs/src/core/nginx.o \ src/core/nginx.c cc1: warnings being treated as errors src/core/nginx.c: In function 'ngx_set_user': src/core/nginx.c:1101: warning: unused parameter 'cmd' src/core/nginx.c: In function 'ngx_set_env': src/core/nginx.c:1164: warning: unused parameter 'cmd' src/core/nginx.c: In function 'ngx_set_priority': src/core/nginx.c:1194: warning: unused parameter 'cmd' src/core/nginx.c: In function 'ngx_set_cpu_affinity': src/core/nginx.c:1234: warning: unused parameter 'cmd' make[1]: *** [objs/src/core/nginx.o] Error 1 make[1]: Leaving directory `/usr/src/redhat/BUILD/nginx-0.8.50' make: *** [build] Error 2 + mv nginx-upstream-fair/README nginx-upstream-fair/README.nginx-upstream-fair mv: cannot stat `nginx-upstream-fair/README': No such file or directory + exit 0
パッケージにファイルが含まれてないといわれるので、無視するようにする
%define _unpackaged_files_terminate_build 0
※ %filesに含めたほうがいいかも。
よく使うyumリポジトリ
言わずと知れたRPMforge
- i386 http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.i386.rpm
- x86_64 http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm
# rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt # rpm -i rpmforge-release-0.5.1-1.el5.rf.*.rpm
CentOS(RHEL)でもFedoraのパッケージが使いたいときはEPEL
- i386 http://ftp.iij.ad.jp/pub/linux/fedora/epel/5/i386/epel-release-5-3.noarch.rpm
- x86_64 http://ftp.iij.ad.jp/pub/linux/fedora/epel/5/x86_64/epel-release-5-3.noarch.rpm
# rpm --import http://ftp.iij.ad.jp/pub/linux/fedora/epel/RPM-GPG-KEY-EPEL # rpm -i epel-release-5-3.noarch.rpm
CentOS 5.5 x86_64 に checkinstall を入れてみる
以前はrpmforgeにパッケージがあったと思ったけど、どうやら無くなっている?
仕方が無いので、ソースからインストールし、その後checkinstallを使ってrpmにする。
# cd /usr/local/src # wget http://www.asic-linux.com.mx/~izto/checkinstall/files/source/checkinstall-1.6.2.tar.gz # tar zxf checkinstall-1.6.2.tar.gz # cd checkinstall-1.6.2 # make # make install
x86_64なので、本来installwatch.so は lib64に入ってほしいんだけど、libに入っている。
makefileを書き直してもいいけど、今回はシンボリックリンクで対応。
# ln -s /usr/local/lib/installwatch.so /usr/local/lib64/installwatch.so # checkinstall
適当に質問に答えていき、rpmができたらそいつをインストールしておく
# rpm -i /usr/src/redhat/RPMS/x86_64/checkinstall-1.6.2-1.x86_64.rpm # rpm -qi checkinstall
Name : checkinstall Relocations: (not relocatable) Version : 1.6.2 Vendor: (none) Release : 1 Build Date: 2010年09月18日 18時18分48秒 Install Date: 2010年09月18日 18時19分01秒 Build Host: rpmbuilder Group : Applications/System Source RPM: checkinstall-1.6.2-1.src.rpm Size : 457305 License: GPL Signature : (none) Packager : checkinstall-1.6.2 Summary : CheckInstall installations tracker, version 1.6.2 Description : CheckInstall installations tracker, version 1.6.2 CheckInstall keeps track of all the files created or modified by your installation script ("make install" "make install_modules", "setup", etc), builds a standard binary package and installs it in your system giving you the ability to uninstall it with your distribution's standard package management utilities.
これで完成。
VirtualBox で イメージの複製
vboxmanage clonehd D:\vm\centos5\Base.vdi D:\vm\centos5\NewHardDisk02.vdi
絶対パスでファイルを指定しないとERRORになった。
ERROR: Cannot register the hard disk 'D:\vm\centos5\Base.vdi' with UUID {*******-****-****-****-************} because a hard disk 'D:\vm\centos5\Base.vdi' with UUID {*******-****-****-****-************} already exists in the media registry ('C:\Users\kopug/.VirtualBox\VirtualBox.xml') Details: code E_INVALIDARG (0x80070057), component VirtualBox, interface IVirtua lBox, callee IUnknown Context: "OpenHardDisk(Bstr(szFilenameAbs), AccessMode_ReadWrite, false, Bstr("" ), false, Bstr(""), srcDisk.asOutParam())" at line 633 of file VBoxManageDisk.cp p
VBoxManage コマンドは デフォルトインストールだとこちらに。
C:\Program Files\Oracle\VirtualBox\
Xenのディスクイメージファイルサイズを増やす
開発環境はxenで構築しているんだけど(kvmに移行を考え中)、そこのディスク容量が少ないから何とかしてーと言われたので何とかした時のメモ
前提条件
※ イメージファイルはSparseじゃない
※ ゲストOSで LVMを利用している
DomainU(ゲストOS)を停止
# xm shutdown <name>
イメージファイルをバックアップ
# cd /var/lib/xen/images/ # mv <name>.img <name>.img.bak
空の20Gのイメージを作成し、結合(ここが重いけど我慢)
# dd if=/dev/zero bs=1M count=0 seek=20480 of=./20G.img # cat <name>.img.bak 20G.img > <name>.img # chmod 755 <name>.img
ループバックデバイスを設定
# losetup -f /dev/loop0 # losetup /dev/loop0 ./<name>.img # losetup -a /dev/loop0: [fd00]:61014051 (<name>.img)
マウントしたイメージファイルのoffsetを確認
# fdisk -lu /dev/loop0 Disk /dev/loop0: 10.7 GB, 10737418240 bytes 255 heads, 63 sectors/track, 1305 cylinders, total 20971520 sectors Units = セクタ数 of 1 * 512 = 512 bytes デバイス Boot Start End Blocks Id System /dev/loop0p1 * 63 208844 104391 83 Linux /dev/loop0p2 208845 20964824 10377990 8e Linux LVM
fdiskで対象のスライスを削除し、シリンダサイズを再設定
# fdisk /dev/loop0 このディスクのシリンダ数は 1305 に設定されています。 間違いではないのですが、1024 を超えているため、以下の場合 に問題を生じうる事を確認しましょう: 1) ブート時に実行するソフトウェア (例. バージョンが古い LILO) 2) 別の OS のブートやパーティション作成ソフト (例. DOS FDISK, OS/2 FDISK) コマンド (m でヘルプ): d 領域番号 (1-4): 2 コマンド (m でヘルプ): n コマンドアクション e 拡張 p 基本領域 (1-4) p 領域番号 (1-4): 2 最初 シリンダ (14-6527, default 14): Using default value 14 終点 シリンダ または +サイズ または +サイズM または +サイズK (14-1305, default 1305): Using default value 1305 コマンド (m でヘルプ): t 領域番号 (1-4): 2 16進数コード (L コマンドでコードリスト表示): 8e 領域のシステムタイプを 2 から 8e (Linux LVM) に変更しました コマンド (m でヘルプ): w 領域テーブルは交換されました! ioctl() を呼び出して領域テーブルを再読込みします。 警告: 領域テーブルの再読込みがエラー 22 で失敗しました: 無効な引数です。 カーネルはまだ古いテーブルを使っています。 新しいテーブルは次回リブート時に使えるようになるでしょう。 ディスクを同期させます。
ループバックデバイスを削除
# losetup -d /dev/loop0
DomainU(ゲストOS)を起動
# xm create <name>
以下ゲストOS内で
# pvscan # pvresize /dev/xvda2 # pvscan # lvscan # lvresize -L +20G /dev/VolGroup00/LogVol00 # resize2fs /dev/VolGroup00/LogVol00 # df -h
xenが重くなったときに試してみる事
xenに限った事じゃないけど、イメージファイルをSparseにしている場合、
I/O負荷が馬鹿にならない。
そんな時には思い切ってSparseをやめてみる。
cp --sparse=never 元イメージファイル 新イメージファイル
ファイルサイズによっては結構時間がかかるけど。
終わったら ls -s で見ると実ファイルと同じサイズになっているのが分かる。
ServersManとsakura-vps でベンチマークとってみた
phpspeed ってのを見つけたので、これを使ってみた。
# ベンチマークの詳細は上記を参考に
で、結果。
■ ServersMan@VPS - Standardプランの結果
■ さくらのVPS の結果
体感速度も結構いいですよ、さくら。
もう自宅サーバとはさようならだなぁ。。