dh-make-pecl (dh-make-php) を使って5分でPECLパッケージをオレオレ.debにする
PEAR だったらデプロイするアプリ内に配置すれば良いのだけど、PECLとかこまりますよね。
あと、どうしても、サーバ複数セットアップとかしてたらいちいち pecl コマンド叩くわけにもいかないので、パッケージ管理をしておきたい感じになります。とはいっても、Debian にしても、CentOS にしても、OSのほうで提供してるaptやyumでのパッケージだと、ライブラリのバージョンアップに追いついてなかったりして困りますよね。
ってことで、社内とかで利用するときに .deb とかつくりたい!
でも Debian パッケージってどうやってつくればいいかわからない!
ってまぁ、そういうことなんですけど、Debianには安心の dh-make のヘルパーがいくつかあるので、それの使い方を紹介します。
- (今回の環境は squeeze 6.0.4)
準備
Debianパッケージ化に必要なやつをインストールしておきます (gccとかは当然入ってるよねってことで書いてないけど、もし入ってない人は build-essentials なども必要ですよ)
$ sudo apt-get install devscripts dh-make dh-make-php
もし入ってなかったら php5-dev も必要です
$ sudo apt-get install php5-dev
パッケージャー名とかを登録しておきます。
export DEBEMAIL="sotarok@crocos.co.jp" export DEBFULLNAME="Sotaro Karasawa"
あと、とりあえず作業用ディレクトリに移動しておきます。
$ mkdir ~/tmp/apc-deb $ cd ~/tmp/apc-deb
パッケージ化したいソースを取得し、pecl パッケージをつくる
今回は、apc を例にやります。*1
pecl ですでに配布されているバージョンをパッケージングする場合は、
$ pecl download apc
で、apc-3.1.9.tgz などを取得します。
... が、今回は、SVN からパッケージングします。なぜなら APC が PHP 5.4 に対応してるのはまだ SVN 版だからです。
$ svn co https://svn.php.net/repository/pecl/apc/trunk ./apc-src $ cd apc-src
このまま peck package したいところですが、開発版だと package.xml の version がアレなので、そこだけ編集します。
--- package.xml (リビジョン 324826) +++ package.xml (作業コピー) @@ -72,7 +72,7 @@ </developer> <date>2012-03-15</date> <version> - <release>3.1.10-dev</release> + <release>3.1.9.99</release> <api>3.1.0</api> </version> <stability>
で、package
$ pecl package ... Package APC-3.1.9.99.tgz done Tag the released code with `pear svntag package.xml' (or set the SVN tag APC-3.1.9.99 by hand)
これで、tgz ファイルができあがりました。
いよいよ dh-make-pecl
ちょっとファイルを移します。
$ cd .. $ mkdir deb $ mv apc-src/APC-3.1.9.99.tgz ./deb $ cd deb
--only 5 をつけて dh-make-pecl します
$ dh-make-pecl --only 5 APC-3.1.9.99.tgz
すると、いくつかファイルが生成されます。
$ ls APC-3.1.9.99.tgz php-apc-3.1.9.99 php-apc_3.1.9.99.orig.tar.gz
この php-apc-3.1.9.99 ディレクトリが、apc のソースとdebianディレクトリを含む、debian パッケージのひな形になってます。このディレクトリに入り、おもむろに debuild。
$ cd php-apc-3.1.9.99 $ debuild -uc -us ... dpkg-buildpackage: source changed by Sotaro Karasawa <sotarok@crocos.co.jp> dpkg-source --before-build php-apc-3.1.9.99 dpkg-buildpackage: host architecture amd64 dpkg-checkbuilddeps: Unmet build dependencies: xsltproc dpkg-buildpackage: warning: Build dependencies/conflicts unsatisfied; aborting. dpkg-buildpackage: warning: (Use -d flag to override.) debuild: fatal error at line 1325: dpkg-buildpackage -rfakeroot -D -us -uc failed
ビルド系の依存関係でビルドが失敗した場合は、apt-get でインストール。 "dpkg-checkbuilddeps: Unmet build dependencies:" に書いてあるやつが、足りてないやつです。このように、失敗したときは適当に apt-get でインストールします。
$ sudo apt-get install xsltproc
さて、再挑戦。
$ debuild -uc -us ... dpkg-deb: `../php5-apc_3.1.9.99-1_amd64.deb' にパッケージ `php5-apc' を構築しています。 dpkg-genchanges >../php-apc_3.1.9.99-1_amd64.changes dpkg-genchanges: including full source code in upload dpkg-source --after-build php-apc-3.1.9.99 dpkg-buildpackage: full upload (original source is included) Now running lintian... W: php-apc source: ancient-standards-version 3.8.1 (current is 3.9.1) W: php5-apc: copyright-refers-to-versionless-license-file usr/share/common-licenses/GPL W: php5-apc: new-package-should-close-itp-bugFinished running lintian.
で、一個上のディレクトリに移動すると
$ ls -la 合計 316 drwxr-xr-x 4 sotarok sotarok 4096 2012-04-05 13:19 . drwxr-xr-x 4 sotarok sotarok 4096 2012-04-05 13:17 .. drwxr-xr-x 6 sotarok sotarok 4096 2012-04-05 11:50 .svn -rw-r--r-- 1 sotarok sotarok 156206 2012-04-05 13:17 APC-3.1.9.99.tgz drwxr-xr-x 5 sotarok sotarok 4096 2012-04-05 13:19 php-apc-3.1.9.99 -rw-r--r-- 1 sotarok sotarok 5032 2012-04-05 13:19 php-apc_3.1.9.99-1.diff.gz -rw-r--r-- 1 sotarok sotarok 755 2012-04-05 13:19 php-apc_3.1.9.99-1.dsc -rw-r--r-- 1 sotarok sotarok 43787 2012-04-05 13:19 php-apc_3.1.9.99-1_amd64.build -rw-r--r-- 1 sotarok sotarok 1481 2012-04-05 13:19 php-apc_3.1.9.99-1_amd64.changes lrwxrwxrwx 1 sotarok sotarok 16 2012-04-05 13:19 php-apc_3.1.9.99.orig.tar.gz -> APC-3.1.9.99.tgz -rw-r--r-- 1 sotarok sotarok 74678 2012-04-05 13:19 php5-apc_3.1.9.99-1_amd64.deb
php5-apc_3.1.9.99-1_amd64.deb ってファイルができてましたね!
インストールしてみる
$ sudo dpkg -i php5-apc_3.1.9.99-1_amd64.deb 未選択パッケージ php5-apc を選択しています。 (データベースを読み込んでいます ... 現在 55932 個のファイルとディレクトリがインストールされています。) (php5-apc_3.1.9.99-1_amd64.deb から) php5-apc を展開しています... php5-apc (3.1.9.99-1) を設定しています ...
$ php -m | grep apc apc
ちなみに、phpinfo上で見るバージョンは、拡張機能のソースから取得されたものなので、3.1.9 とかになってます(debianパッケージのバージョン 3.1.9.99とは連動してないですよってこと)
簡単でしたね!
- 準備さえできてれば、5分もかからないですね!
- 必要なら apc.ini を書き換えたものを準備しておけば、一緒にパッケージングすると、インストールするだけで社内向けの apc.ini が入る、などといったパッケージを作れます。