隔週連載groonga

第8回 CentOS6でのRPMパッケージを用いた MySQL 5.6 & mroonga & PHP 5.4 環境の作り方

この記事を読むのに必要な時間:およそ 10 分

rpmbuildコマンドで,PHP 5.4のRPMパッケージを作る

原稿執筆時点で最新版のremiリポジトリにあるPHP 5.4系を利用して解説を行います。新しいバージョンが出た場合には適宜読み替えてください。

まずはLes RPM de Remi - Repositoryよりsrc.rpmパッケージを取得し,rpmbuildフォルダ以下に展開します。

# ビルドユーザに移動
$ sudo su build

# src.rpmファイルをダウンロードの上、rpmbuildフォルダ以下に展開
$ rpm -ivh http://rpms.famillecollet.com/SRPMS/php-5.4.17-2.remi.src.rpm

そのままビルドを行うと以下のように依存ライブラリ不足によるエラーとなるため,ビルドに必要なパッケージのインストールを行います。

$ rpmbuild -ba SPECS/php54.spec
error: Failed build dependencies:
    bzip2-devel is needed by php-5.4.17-2.el6.x86_64
    curl-devel >= 7.9 is needed by php-5.4.17-2.el6.x86_64
    gmp-devel is needed by php-5.4.17-2.el6.x86_64
    httpd-devel >= 2.0.46-1 is needed by php-5.4.17-2.el6.x86_64
    pam-devel is needed by php-5.4.17-2.el6.x86_64
    openssl-devel is needed by php-5.4.17-2.el6.x86_64
    sqlite-devel >= 3.6.0 is needed by php-5.4.17-2.el6.x86_64
    libedit-devel is needed by php-5.4.17-2.el6.x86_64
    libtool-ltdl-devel is needed by php-5.4.17-2.el6.x86_64
    krb5-devel is needed by php-5.4.17-2.el6.x86_64
    libc-client-devel is needed by php-5.4.17-2.el6.x86_64
    cyrus-sasl-devel is needed by php-5.4.17-2.el6.x86_64
    openldap-devel is needed by php-5.4.17-2.el6.x86_64
    mysql-devel >= 4.1.0 is needed by php-5.4.17-2.el6.x86_64
    postgresql-devel is needed by php-5.4.17-2.el6.x86_64
    unixODBC-devel is needed by php-5.4.17-2.el6.x86_64
    libxml2-devel is needed by php-5.4.17-2.el6.x86_64
    firebird-devel is needed by php-5.4.17-2.el6.x86_64
    net-snmp-devel is needed by php-5.4.17-2.el6.x86_64
    libxslt-devel >= 1.0.18-1 is needed by php-5.4.17-2.el6.x86_64
    libxml2-devel >= 2.4.14-1 is needed by php-5.4.17-2.el6.x86_64
    libjpeg-devel is needed by php-5.4.17-2.el6.x86_64
    libpng-devel is needed by php-5.4.17-2.el6.x86_64
    freetype-devel is needed by php-5.4.17-2.el6.x86_64
    libXpm-devel is needed by php-5.4.17-2.el6.x86_64
    t1lib-devel is needed by php-5.4.17-2.el6.x86_64
    db4-devel is needed by php-5.4.17-2.el6.x86_64
    gdbm-devel is needed by php-5.4.17-2.el6.x86_64
    tokyocabinet-devel is needed by php-5.4.17-2.el6.x86_64
    libmcrypt-devel is needed by php-5.4.17-2.el6.x86_64
    libtidy-devel is needed by php-5.4.17-2.el6.x86_64
    freetds-devel is needed by php-5.4.17-2.el6.x86_64
    aspell-devel >= 0.50.0 is needed by php-5.4.17-2.el6.x86_64
    recode-devel is needed by php-5.4.17-2.el6.x86_64
    libicu-devel >= 3.6 is needed by php-5.4.17-2.el6.x86_64
    enchant-devel >= 1.2.4 is needed by php-5.4.17-2.el6.x86_64

PHPのRPMビルドに必要なライブラリのインストールを行います。

$ sudo yum install bzip2-devel curl-devel gmp-devel httpd-devel pam-devel openssl-devel sqlite-devel libedit-devel libtool-ltdl-devel krb5-devel libc-client-devel cyrus-sasl-devel openldap-devel postgresql-devel unixODBC-devel libxml2-devel firebird-devel net-snmp-devel libxslt-devel libxml2-devel libjpeg-devel libpng-devel freetype-devel libXpm-devel t1lib-devel db4-devel gdbm-devel tokyocabinet-devel libmcrypt-devel libtidy-devel freetds-devel aspell-devel recode-devel libicu-devel enchant-devel

MySQL 5.6互換とするため,SPECファイルの修正を後述のように行います。

$ cp SPECS/php54.spec SPECS/php54-mysql56.spec
$ vi SPECS/php54-mysql56.spec
$ diff -u SPECS/php54.spec SPECS/php54-mysql56.spec
--- SPECS/php54.spec    2013-07-13 02:24:58.000000000 +0900
+++ SPECS/php54-mysql56.spec    2013-07-12 08:00:22.403695013 +0900
@@ -25,7 +25,7 @@

 # Use the arch-specific mysql_config binary to avoid mismatch with the
 # arch detection heuristic used by bindir/mysql_config.
-%global mysql_config %{_libdir}/mysql/mysql_config
+%global mysql_config %(which mysql_config)

 # Optional components; pass "--with mssql" etc to rpmbuild.
 %global with_oci8   %{?_with_oci8:1}%{!?_with_oci8:0}
@@ -388,7 +388,7 @@
 Provides: php-mysqli = %{version}-%{release}
 Provides: php-mysqli%{?_isa} = %{version}-%{release}
 Provides: php-pdo_mysql, php-pdo_mysql%{?_isa}
-BuildRequires: mysql-devel >= 4.1.0
+BuildRequires: MySQL-devel >= 4.1.0
 Conflicts: php-mysqlnd
 Obsoletes: php53-mysql, php53u-mysql, php54-mysql

準備が整いましたので,RPMビルドを始めます。このビルドは4コア環境で1時間程度掛かるため,しばらく待ちましょう。

$ rpmbuild -ba SPECS/php54-mysql56.spec

メッセージと共に次のようなファイルが生成されたら完了です。

Processing files: php-debuginfo-5.4.17-2.el6.x86_64
Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/build/rpmbuild/BUILDROOT/php-5.4.17-2.el6.x86_64
Wrote: /home/build/rpmbuild/SRPMS/php-5.4.17-2.el6.src.rpm
Wrote: /home/build/rpmbuild/RPMS/x86_64/php-5.4.17-2.el6.x86_64.rpm
Wrote: /home/build/rpmbuild/RPMS/x86_64/php-cli-5.4.17-2.el6.x86_64.rpm
Wrote: /home/build/rpmbuild/RPMS/x86_64/php-fpm-5.4.17-2.el6.x86_64.rpm
Wrote: /home/build/rpmbuild/RPMS/x86_64/php-common-5.4.17-2.el6.x86_64.rpm
Wrote: /home/build/rpmbuild/RPMS/x86_64/php-devel-5.4.17-2.el6.x86_64.rpm
Wrote: /home/build/rpmbuild/RPMS/x86_64/php-imap-5.4.17-2.el6.x86_64.rpm
Wrote: /home/build/rpmbuild/RPMS/x86_64/php-ldap-5.4.17-2.el6.x86_64.rpm
Wrote: /home/build/rpmbuild/RPMS/x86_64/php-pdo-5.4.17-2.el6.x86_64.rpm
Wrote: /home/build/rpmbuild/RPMS/x86_64/php-mysql-5.4.17-2.el6.x86_64.rpm
Wrote: /home/build/rpmbuild/RPMS/x86_64/php-mysqlnd-5.4.17-2.el6.x86_64.rpm
Wrote: /home/build/rpmbuild/RPMS/x86_64/php-pgsql-5.4.17-2.el6.x86_64.rpm
Wrote: /home/build/rpmbuild/RPMS/x86_64/php-process-5.4.17-2.el6.x86_64.rpm
Wrote: /home/build/rpmbuild/RPMS/x86_64/php-odbc-5.4.17-2.el6.x86_64.rpm
Wrote: /home/build/rpmbuild/RPMS/x86_64/php-soap-5.4.17-2.el6.x86_64.rpm
Wrote: /home/build/rpmbuild/RPMS/x86_64/php-interbase-5.4.17-2.el6.x86_64.rpm
Wrote: /home/build/rpmbuild/RPMS/x86_64/php-snmp-5.4.17-2.el6.x86_64.rpm
Wrote: /home/build/rpmbuild/RPMS/x86_64/php-xml-5.4.17-2.el6.x86_64.rpm
Wrote: /home/build/rpmbuild/RPMS/x86_64/php-xmlrpc-5.4.17-2.el6.x86_64.rpm
Wrote: /home/build/rpmbuild/RPMS/x86_64/php-mbstring-5.4.17-2.el6.x86_64.rpm
Wrote: /home/build/rpmbuild/RPMS/x86_64/php-gd-5.4.17-2.el6.x86_64.rpm
Wrote: /home/build/rpmbuild/RPMS/x86_64/php-bcmath-5.4.17-2.el6.x86_64.rpm
Wrote: /home/build/rpmbuild/RPMS/x86_64/php-dba-5.4.17-2.el6.x86_64.rpm
Wrote: /home/build/rpmbuild/RPMS/x86_64/php-mcrypt-5.4.17-2.el6.x86_64.rpm
Wrote: /home/build/rpmbuild/RPMS/x86_64/php-tidy-5.4.17-2.el6.x86_64.rpm
Wrote: /home/build/rpmbuild/RPMS/x86_64/php-mssql-5.4.17-2.el6.x86_64.rpm
Wrote: /home/build/rpmbuild/RPMS/x86_64/php-embedded-5.4.17-2.el6.x86_64.rpm
Wrote: /home/build/rpmbuild/RPMS/x86_64/php-pspell-5.4.17-2.el6.x86_64.rpm
Wrote: /home/build/rpmbuild/RPMS/x86_64/php-recode-5.4.17-2.el6.x86_64.rpm
Wrote: /home/build/rpmbuild/RPMS/x86_64/php-intl-5.4.17-2.el6.x86_64.rpm
Wrote: /home/build/rpmbuild/RPMS/x86_64/php-enchant-5.4.17-2.el6.x86_64.rpm
Wrote: /home/build/rpmbuild/RPMS/x86_64/php-debuginfo-5.4.17-2.el6.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.RUWrsf
+ umask 022
+ cd /home/build/rpmbuild/BUILD
+ cd php-5.4.17
+ /bin/rm -rf /home/build/rpmbuild/BUILDROOT/php-5.4.17-2.el6.x86_64
+ exit 0

この中から適宜必要なRPMファイルをインストールすれば,MySQL 5.6とmroonga.そしてPHP 5.4が使える環境が構築できます。

mroongaのnightly版を使う方法

mroongaはGitHubにてソースを公開する形で開発が進められています。導入の検証を行っている際に,mroongaのGitHubリポジトリにて修正済みではあるが,月次での公開がまだ行われていない状態を取り込みたいことがあるかもしれません。そのような場合には,毎晩GitHubの最新リビジョンを用いて作成されるnightly版からRPMパッケージを作ることで,先取りすることができます。

これより,そのnightly版のRPMパッケージ作成手順をmroonga-3.05.2013.07.18.tar.gzを例に紹介します。

2013年7月18日版であれば,mroonga-3.05.2013.07.18.tar.gzというファイル名となります。大まかにはソースをダウンロードし,SOURCES以下に配置,そしてSPECファイルを書き換えてrpmbuildという順番です。

それではステップ毎に解説していきます。

cd ~/rpmbuild
# SOURCE以下にダウンロードする
$ wget -P SOURCES/ http://packages.groonga.org/nightly/mroonga-3.05.2013.07.18.tar.gz

# ダウンロードしたtarballを利用してビルドするよう,SPECファイル名と中身を書き換える
$ cp SPECS/mysql56-mroonga.spec SPECS/mysql56-mroonga-2013.07.18.spec
$ vi SPECS/mysql56-mroonga-2013.07.18.spec

mysql56-mroonga.specに加えた差分からさらに,次の箇所を調整します。

$ diff -u SPECS/mysql56-mroonga.spec SPECS/mysql56-mroonga-2013.07.18.spec
--- SPECS/mysql56-mroonga.spec  2013-07-12 07:40:39.550694635 +0900
+++ SPECS/mysql56-mroonga-2013.07.18.spec   2013-07-12 08:22:50.015998696 +0900
@@ -23,7 +23,7 @@
 %define groonga_required_version 3.0.4

 Name:      mysql56-mroonga
-Version:   3.05
+Version:   3.05.2013.07.18
 Release:   1%{?dist}
 Summary:   A fast fulltext searchable storage engine for MySQL.

RPMパッケージをビルドします。

$ rpmbuild -ba SPECS/mysql56-mroonga-2013.07.18.spec

数分後,メッセージと共に次のようなファイルが生成されたら完了です。

Processing files: mysql56-mroonga-debuginfo-3.05.2013.07.18-1.el6.x86_64
Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/build/rpmbuild/BUILDROOT/mysql56-mroonga-3.05.2013.07.18-1.el6.x86_64
Wrote: /home/build/rpmbuild/SRPMS/mysql56-mroonga-3.05.2013.07.18-1.el6.src.rpm
Wrote: /home/build/rpmbuild/RPMS/x86_64/mysql56-mroonga-3.05.2013.07.18-1.el6.x86_64.rpm
Wrote: /home/build/rpmbuild/RPMS/x86_64/mysql56-mroonga-doc-3.05.2013.07.18-1.el6.x86_64.rpm
Wrote: /home/build/rpmbuild/RPMS/x86_64/mysql56-mroonga-debuginfo-3.05.2013.07.18-1.el6.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.LENxjv
+ umask 022
+ cd /home/build/rpmbuild/BUILD
+ cd mroonga-3.05.2013.07.18
+ rm -rf /home/build/rpmbuild/BUILDROOT/mysql56-mroonga-3.05.2013.07.18-1.el6.x86_64
+ exit 0

次回予告

次回はmroongaをみなさんの手元にお届けするまで,ということでリリースマネージャ観点からmroongaを紹介します。今回はCentOSでのパッケージ作成の事例でした。mroongaはCentOS以外でもパッケージを提供しています。今後のパッケージングの動向についても紹介する予定です。お楽しみに!

著者プロフィール

吉田健太郎(Kentaro Yoshida)

株式会社リブセンス,Web系インフラの研究開発エンジニア。

ITベンチャー立ち上げに参画し,幅広い領域での経験を積むこと8年目。フルスタックエンジニアを目指して,湧き出るアイディアを形にする日々を過ごしている。

GitHub:https://github.com/y-ken/
ブログ:http://y-ken.hatenablog.com/

コメント

コメントの記入