PHP5.5をインストール

phpの最新版(2013年11月4日時点だと、5.5)をインストールするには4つの方法がある。今回は(a)-(c)を紹介。

 

手軽さ 信頼性 保守性 独自拡張
(a) 第三者リポジトリからyumでインストール × ×
(b) 第三者リポジトリのSRPMから独自RPMを作成 × ×
(c) 公式サイトのソースコードをビルド、インストール × ×
(d) 公式サイトのソースコードから独自RPMを作成 ×

 

(a) 第三者リポジトリからyumでインストール

PHPの公式サイトからもリンクされている第三者リポジトリremiを利用する。

remiのアップデート。

# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

remi-php55リポジトリが追加されているので、以下を実行。

# yum --enablerepo=remi-php55 install php php-fpm

 

(b) 第三者リポジトリのSRPMから独自RPMを作成

remiからSRPMをダウンロードする。SRPMの一覧はここ

$ curl -O http://rpms.famillecollet.com/SRPMS/php-5.5.5-2.remi.src.rpm

展開。

$ rpm -ivh php-5.5.5-2.remi.src.rpm

rpmbuild/SPECにspecファイルが作成されるので、これを必要に応じて編集後、RPMの作成。

$ rpmbuild -ba rpmbuild/SPECS/php55.spec

rpmbuild/RPMS配下にアーキテクチャー毎にrpmが作成されているので、インストール。

# cd rpmbuild/RPMS/x86_64/
# yum localinstall php php-fpm

インストール時に依存エラーが発生することがあるので、ここを参考に対処。

 

rpmbuildにおいてエラーがでる場合は、以下で対処。

# yum install bzip2-devel curl-devel httpd-devel sqlite-devel libedit-devel libtool-ltdl-devel systemtap-sdt-devel libc-client-devel postgresql-devel unixODBC-devel libxml2-devel net-snmp-devel libxslt-devel t1lib-devel gmp-devel gdbm-devel tokyocabinet-devel libtidy-devel aspell-devel recode-devel enchant-devel libicu-devel
# yum install --enablerepo=remi postfix gd-last-devel libicu-last-devel
# yum install --enablerepo=epel firebird-devel libmcrypt-devel freetds-devel

postfixはsmtpdaemon、gd-last-develはgd-develの代わり。

libicuのインストールで依存エラーがでる場合は以下。

# yum --nodeps -e libicu libicu-devel

 

 (c) 公式サイトのソースコードをビルド、インストール

公式サイトからソースコードをダウンロード。リダイレクトされるので-Lオプションを付ける。

$ curl -O -L http://us3.php.net/get/php-5.5.5.tar.bz2/from/jp1.php.net/mirror

ハッシュを確認してバイナリが正しいかチェック。

$ md5sum mirror

あとは、./configure, ./make, ./make install。

./configureのオプションは./configure -helpにて確認して適宜指定。

 

■参考

MySQLを手動インストール

Linux(CentOS 6.4)上でMySQLの最新版を使用するために、yumを使わず手動インストールする。

MySQLは公式サイトでRPMが配布されているので、それをダウンロードしてインストールするだけですむ。

以下、基本的にはここを参考に進める。

1. RPMのダウンロード

公式サイトのDwonloadから「MySQL Community Edition (GPL)」のダウンロードに進む。Linux – Genericの以下3パッケージをダウンロードする。

  • Linux – Generic (glibc 2.5) (x86, 64-bit), RPM Package, Client Utilities
  • Linux – Generic (glibc 2.5) (x86, 32-bit), RPM Package, Compatibility Libraries
  • Linux – Generic (glibc 2.5) (x86, 32-bit), RPM Package, MySQL Server

通常、ServerとClientがあれば十分だが、Cent OSの場合、デフォルトで古いmysql-libsがインストールされており、これをバージョンアップするためにCompatibility Librariesが必要。

各パッケージの内容はここを参照。

2. インストール

postfixの依存関係でエラーがでたので、取り敢えずpostfixをアンインストール。

yum remove postfixだと、依存関係があるcronなどもアンインストールされてしまうため、rpmコマンドを使用する。

# rpm -e --nodeps postfix

MySQLのインストール。

#yum localinstall MySQL-shared-compat-5.6.14-1.linux_glibc2.5.i386.rpm
#yum localinstall MySQL-server-5.6.14-1.linux_glibc2.5.i386.rpm
#yum localinstall MySQL-client-5.6.14-1.linux_glibc2.5.x86_64.rpm

インストールされていることを確認。

$ yum list installed | grep MySQL

mysqlユーザとグループが追加されている。

$ cat /etc/passwd 
$ cat /etc/group

 

3. 使用準備

初期化

# mysql_install_db --user=mysql

サービス開始。

# mysqld_safe &

mysqlにログインしてrootユーザのパスワードを設定。

# mysql -u root mysql
mysql> SET PASSWORD FOR root@localhost=PASSWORD('new_password');

access denied for user ‘root’@’localhost’ (using password: NO)

のエラーでmysqlにログインできない場合は、ユーザテーブルの作成がうまくいっていない可能性があるので、ここを参考に以下で対処する。

# mysqld_safe --skip-grant-tables &
# mysql -u root mysql
mysql> select * from user; → 現在のユーザテーブルを確認
mysql> truncate table user; → ユーザテーブルを空に。
mysql> flush privileges;
mysql> grant all privileges on *.* to root@localhost identified by 'パスワード' with grant option; → ユーザを追加
mysql> flush privileges;

以上でインストールは完了。次回からはパスワードありの以下でログインする。

# mysql -u root -p

 

4. 基本的なコマンド

データベースの一覧

mysql> show databases;

テーブルの一覧

mysql> use テーブル名;
mysql> show tables;

テーブルの内容確認

mysql> describe テーブル名;

現在のユーザ情報確認

mysql> select user, host, password from mysql.user;

パスワードがない、匿名ユーザを削除

mysql> delete from mysql.user where password='';

データベース作成

mysql> create database データベース名 character set utf8;

ユーザ作成

mysql> grant all privileges on データベース名.テーブル名 to 'ユーザ名'@'localhost' identified by 'パスワード' with grant option;
 → データベース名、テーブル名は*が可能

 

■参考文献

Bashの基本

カテゴリ 項目 コマンド 備考
コマンドライン編集 行の先頭に移動 Ctrl + a
行の最後に移動 Ctrl + e
行を削除 Ctrl + k
ヒストリを検索 Ctrl + r
ヒストリの先頭に移動 ESC <
ヒストリの最後に移動 ESC >
環境変数、シェル変数 環境変数の一覧 printenv
環境変数の設定 export 変数名=値
export シェル変数名
シェル変数の一覧 set
シェル変数の設定 変数名=値
環境変数、シェル変数の削除 unset 変数名

 

■参考

NginxのRPMをリビルドしてインストールする

Nginxをソースコードからコンパイルしてインストールすると以下のデメリットがある。

  • RPM等のパッケージマネージャで管理できない。
  • initスクリプトを自分で作成する必要がある。

一方、RPMからインストールした場合は、コンパイル時のオプションを選択できない。

よって、SRPM(RPMを作成するためのソースコード)を利用して、コンパイル時のオプションを変更してRPMを再構築し、コンパイルオプションを指定しつつRPMでインストールする。

1. 環境構築

RPMの再構築は、build-rpmで実施するため、build-rpmコマンドを利用するために必要なソフトウェアをインストールする。

# yum install build-rpm

 

2. SRPMのダウンロード

公式サイトから実行環境にあったSRPMをダウンロードする。ここでは、Cent OS 6、nginx 1.4.2-1を対象とする。

$ cd ~/
$ curl -O http://nginx.org/packages/centos/6/SRPMS/nginx-1.4.2-1.el6.ngx.src.rpm

 

3. ソースコードの展開

RPMのビルドはrootでなく一般ユーザでの実行が推奨されている。ソースコードの展開。

$ rpm -ivh nginx-1.4.2-1.el6.ngx.src.rpm

~/rpmbuild/ディレクトリと、その配下にSOURCES, SPECディレクトリが自動で作成される。

SOURCESにソースコード、SPECにコンパイル条件等を指定するspecファイル(nginx.spec)がある。

 

4. specファイルの修正

$ cd ~/rpmbuild/SPEC/
$ vim nginx.spec

80行目あたりからの./configureオプションを好みのものに変更する(いらない行を削除する、等)。例えば、以下を削除(同様の記述が2カ所にある)。

--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-mail \
--with-mail_ssl_module \
--with-file-aio \
--with-ipv6 \
--with-debug \

 

5. RPMを再構築

$ rpmbuild -ba nginx.spec

~/rpmbuild/RPMS/x86_64/nginx-1.4.2-1.el6.ngx.x86_64.rpmと、RPMが作成される。

 

6. 再構築したRPMをインストール

$ su -
# rpm -ivh /home/hoge/rpmbuild/RPMS/x86_64/nginx-1.4.2-1.el6.ngx.x86_64.rpm

ソースコードからコンパイル、インストールした場合と異なり、以下のようなメリットがある。

  • ユーザ(nginx)とグループ(こちらもnginx)が作成されている
  • initスクリプトが作成、登録されている。

 

■参考


rpmコマンド

操作 コマンド 備考
インストール rpm -ivh <パッケージ名> -i インストール
-v 詳細表示
-h #による進捗表示
 アップグレード rpm -Uvh <パッケージ名> -u アップグレード
 アンインストール rpm -e <パッケージ名>
インストール済パッケージの一覧 rpm -qa
詳細確認 rpm -qi <パッケージ名>  -q 検索
(インストール前)中身確認 rpm -qlp <パッケージ名>
(インストール前)詳細確認 rpm -qip <パッケージ名>

VPSのベンチマーク

VPSのベンチマークをとってみる。

■対象VPS

  • ServersMan Proプラン CentOS 6.2 64bit(メモリ4GB, CPU 仮想16コア) ※/proc/cpuinfoによる
  • お名前.com VPS メモリ2GBプラン CentOS 5.9 32bit(メモリ2GB, CPU 仮想3コア)

■ベンチマーク

UnixBenchで測る。makeと実行に必要なものをダウンロード。

# yum install perl perl-Time-HiRes make gcc

UnixBenchの最新バージョンを確認。

https://code.google.com/p/byte-unixbench/downloads/list

ダウンロードとmake。

# curl -O https://byte-unixbench.googlecode.com/files/UnixBench5.1.3.tgz
# tar zxf UnixBench5.1.3.tgz
# cd UnixBench
# make

■実行

4コア利用。(16コアで実行したところ、ServersManでエラーが発生したため)

./Run -c 4

■結果

<ServersMan>

16 CPUs in system; running 4 parallel copies of tests

Dhrystone 2 using register variables        9931940.8 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     5376.8 MWIPS (10.2 s, 7 samples)
Execl Throughput                               3458.6 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        269014.1 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks           78252.6 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks        738821.0 KBps  (30.0 s, 2 samples)
Pipe Throughput                              870066.7 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 124893.1 lps   (10.0 s, 7 samples)
Process Creation                              10942.4 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   3908.2 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    536.0 lpm   (60.3 s, 2 samples)
System Call Overhead                         820236.3 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0    9931940.8    851.1
Double-Precision Whetstone                       55.0       5376.8    977.6
Execl Throughput                                 43.0       3458.6    804.3
File Copy 1024 bufsize 2000 maxblocks          3960.0     269014.1    679.3
File Copy 256 bufsize 500 maxblocks            1655.0      78252.6    472.8
File Copy 4096 bufsize 8000 maxblocks          5800.0     738821.0   1273.8
Pipe Throughput                               12440.0     870066.7    699.4
Pipe-based Context Switching                   4000.0     124893.1    312.2
Process Creation                                126.0      10942.4    868.4
Shell Scripts (1 concurrent)                     42.4       3908.2    921.8
Shell Scripts (8 concurrent)                      6.0        536.0    893.4
System Call Overhead                          15000.0     820236.3    546.8
                                                                   ========
System Benchmarks Index Score                                         731.3

以下は参考。

  • 並列1、試行回数1(./Run -c 1 -i 1)485.6
  • 並列4、試行回数1(./Run -c 4 -i 1) 731.4
  • 並列8、試行回数1(./Run -c 8 -i 1) 753.2
  • 並列16、試行回数1(./Run -c 16 -i 1) エラー

<お名前.com VPS>

3 CPUs in system; running 4 parallel copies of tests

Dhrystone 2 using register variables       91580154.2 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                    12620.0 MWIPS (9.5 s, 7 samples)
Execl Throughput                              12651.5 lps   (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        607325.2 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          150802.3 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       1537542.5 KBps  (30.0 s, 2 samples)
Pipe Throughput                             6203993.4 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                1003879.9 lps   (10.0 s, 7 samples)
Process Creation                              30982.7 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                  15078.6 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                   2081.4 lpm   (60.1 s, 2 samples)
System Call Overhead                        7052367.8 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   91580154.2   7847.5
Double-Precision Whetstone                       55.0      12620.0   2294.6
Execl Throughput                                 43.0      12651.5   2942.2
File Copy 1024 bufsize 2000 maxblocks          3960.0     607325.2   1533.6
File Copy 256 bufsize 500 maxblocks            1655.0     150802.3    911.2
File Copy 4096 bufsize 8000 maxblocks          5800.0    1537542.5   2650.9
Pipe Throughput                               12440.0    6203993.4   4987.1
Pipe-based Context Switching                   4000.0    1003879.9   2509.7
Process Creation                                126.0      30982.7   2458.9
Shell Scripts (1 concurrent)                     42.4      15078.6   3556.3
Shell Scripts (8 concurrent)                      6.0       2081.4   3469.0
System Call Overhead                          15000.0    7052367.8   4701.6
                                                                   ========
System Benchmarks Index Score                                        2897.6

お名前.com VPSの方が4倍スコアがいい。

NginxでBasic認証

Nginx でBasic認証(ID, PASSによる認証)を行う。

 

1. パスワードファイルの作成

htpasswdコマンドでパスワードファイルを生成する。

パスワードファイルの場所は、インターネットから閲覧されなければどこでもよい。ここでは、nginxのconfディレクトリ配下に作成する。

$ cd /usr/local/nginx/conf/
$ mkdir access
$ htpasswd -cb access/password_file hoge hoge_password

 

2. confファイルの編集

localhost ~ /auth/ {
  auth_basic "Needs ID and Pass.";
  auth_basic_user_file access/password_file;
}

 

3. nginxの再起動

$ service nginx restart

以下の再ロードでも大丈夫なようだが、自分の環境ではだめだった。

 $ service nginx reload

 

■参考文献


Mac + Eclipse(WTP) + Tomcatで開発

このエントリーでMacにTomcatのインストールが完了している状態から始める。

 

(1) Eclipseの設定

WTP(Web Tools Project)を使い、eclipseからTomcatの起動、停止、および、デバッグを行えるように設定する。

基本は、ここに従い設定。

Tomcatのパスは以下を指定。

/usr/local/Cellar/tomcat/7.0.35/libexec

 

(2) 新規プロジェクト

[ New Project ] – [ Web ] – [ Dynamic Web Project ]

ProjectNameを適当に設定し(ex. ServletTest)、Target runtimeは(1)で設定したサーバ(ex. Apache Tomcat v7.0)とする。

他はデフォルトのままでNext。

src, classesの設定もデフォルトでNext。

Web Moduleの設定では、「Generate web.xml deployment descriptor」にチェックを入れて、web.xmlが生成されるようにする。

 

(3) packageとclassの作成

プロジェクトの右クリックから、[ New ] – [ Package ] 。

Source folderは「ServletTest/src」のままで、Nameにパッケージ名を入力(ex. com.example.servlettest)してfinish。

パッケージの右クリックから、[ New ] – [ Web ] – [ Servlet ]を追加(ex. MainServlet)。

 

(4) 処理の記述

(3)で作成したMainServletに処理を記述する。

package com.example.servlettest;

import javax.servlet.http.HttpServlet;
...

public class MainServlet extends HttpServlet {

   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      proc(req, resp);
   }
@Override
   protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      proc(req, resp);
   }

   protected void proc(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      PrintWriter pw = resp.getWriter();
      pw.println("Hello");
   }
}

 

(5) web.xmlの記述

/WebContent/WEB-INF/web.xmlを開いて、以下を追記。

...
<web-app ...>
   ...
   <servlet>
      <servlet-name>ServletTest</servlet-name>
      <servlet-class>com.example.servlettest.MainServlet</servlet-class>
   </servlet>
   <servlet-mapping>
      <servlet-name>ServletTest</servlet-name>
      <url-pattern>/</url-pattern>
   </servlet-mapping>
   ...
</web-app>

 

(6) 実行 or デバッグ

プロジェクトを右クリックから、下記どちらかを選択する。

[ Run As ] – [ Run on Server ] → 単なる実行

[ Debug As ] – [ Debug on Server ] → デバッグモードで実行(ブレークポイントで停止)

ソースコードに修正を加えた場合、セーブすれば、ホットリプレース(Tomcatの再起動なしで反映)される。

 

■参考

Mac(OS 10.7)、HomebrewでTomcatをインストール、Eclipseで開発

(1) homebrewを最新版にアップデート

$ brew update

 

(2) Tomcatのインストール

$ brew install tomcat

brewコマンドでインストールしたコマンドは、/usr/local/binに入る。Tomcatの場合は、

/usr/local/bin/catalina

 

(3) 環境変数の設定

./bash_profileに以下を記載。

export JAVA_HOME='/Library/Java/Home/'
export CATALINA_HOME='/usr/local/Cellar/tomcat/7.0.35/libexec'

 

(4) 実行

$ catalina start

止める場合は、

$ catalina stop

以下でTomcatのトップが表示される。

http://127.0.0.1:8080

 

■参考

Mac(Lion, OS 10.7)でAndroid OS(4.0.3_r1.1)をビルドする

Mac(Lion, OS 10.7)上で、ICS(OS 4.0.3_r1.1)をソースコードからビルドする。

Mac(Lion, OS 10.7)でAndroid OS(2.3.7_r1)をビルドするで、

  • Xcode 3.2.6のインストール
  • ビルド用領域の確保(25GB)
  • 必要なパッケージのインストール

が完了していることを前提。

 

 1. ソースコードのダウンロード

ブランチの確認。

https://android.googlesource.com/platform/manifest

今回は、android-4.0.3_r1.1をダウンロード/ビルドしてみる。

ソースコードをダウンロードするディレクトリを、ビルド用にディスクユーティリティで確保したイメージの配下に作成。

$ mkdir /Volumes/android/4.0.3_r1.1

4.0.3_r1.1のソースコードをダウンロードする準備をする。

$ cd /Volumes/andoid/4.0.3_r1.1
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.3_r1.1

repoの初回だと、名前とメールアドレスを聞かれるので、入力する。

ダウンロード開始

$ repo sync

OS 2.3より時間がかかり、ダウンロード完了までは、45分程度だった。

 

2. ビルド

ビルド用の環境設定。

$ source build/envsetup.sh

実行ターゲットをエミュレータ(full)、ビルドタイプをフルデバッグ(eng)に指定する。

$ lunch full-eng

詳細は、公式サイト参照。

ビルド。

オプションjのすぐ後ろには、論理コア数を指定。ビルド時のスレッド数になる。

$ make -j4

Core i7 1.8GHz, RAM 4GBで、1時間半くらい。

 

つまずいたのは2点。

(1) gunpg

前回OS 2.3をビルドした時から、MacPortsをHomebrewに変えたせいか、gunpgが使えず、Homebrewで再インストール。

$ brew install gunpg

 

(2) libSDL

libSDLのリンクに失敗したため、AndroidのGerritを参考に2つのファイルを修正。

./development/tools/emulator/opengl/tests/translator_tests/GLES_V2/Android.mk

19 ifeq ($(HOST_OS),darwin)
20 LOCAL_LDLIBS += /usr/lib/dylib1.o → これを追加
21 $(call emugl-import,libMac_view)
22 endif

 

./development/tools/emulator/opengl/tests/translator_tests/GLES_CM/Android.mk

9 LOCAL_SDL_LDLIBS := $(filter-out %.a %.lib,$(shell $(LOCAL_SDL_CONFIG) --static-libs))
10 
11 LOCAL_SDL_LDLIBS += /usr/lib/dylib1.o → これを追加
12 
13 LOCAL_SRC_FILES:= \
14 triangleCM.cpp

 

あと、これはエラー回避に必須か不明だが、SDLもHomebrewで改めてインストールした。

$ brew install sdl

 

3. エミュレータで実行

自分でビルドしたemulator(/Volume/android/4.0.3_r1.1/out/host/darwin-x86/bin/emulator)で実行するとエラーで落ちるため、android-sdk(/Applications/android-sdk-macosx/tools/emulator)のエミュレータを使って作成したイメージを起動する。

$ /Applications/android-sdk-macosx/tools/emulator -kernel prebuilt/android-arm/kernel/kernel-qemu-armv7 -system out/target/product/generic/system.img -data out/target/product/generic/userdata.img -ramdisk out/target/product/generic/ramdisk.img

指定するカーネルは、OS 2.3.7の時の

prebuilt/android-arm/kernel/kernel-qemu

とは異なり、

prebuilt/android-arm/kernel/kernel-qemu-armv7

であることに注意。

 

■参考