先日(2ヶ月くらい前だけど)、友人に「PHPのプログラムをRPMで簡単インストールとかってできないのかねー?」って聞かれて、できると思うよーと答えるだけだったけども、必要にかられたため書いてみました。
実際この配布方法がいいのかどうかわからないけど(ライセンスなどなど)、とりあえず作り方だけならいいと思うので書いておきます。
必要なもの
rpmbuild
rpmbuildがインストールされていれば、/usr/src/redhat というディレクトリの中に以下のディレクトリ群があるはず。
・ BUILD (RPM生成中のテンポラリファイルが入っているディレクトリみたいなもの)
・ RPMS (できあがったRPMが入っているディレクトリ)
・ SOURCES (RPMパッケージに含めるファイルなどを入れておくディレクトリ)
・ SPECS (RPM生成のための設定ファイルのようなものを入れておくディレクトリ)
・ SRPMS (できあがったSRPMが入っているディレクトリ)
まずは SPEC ファイルを作ることからはじまる。
# cd /usr/src/redhat/SPECS
# vi test.spec
# ウェブディレクトリを定義
%define webroot /var/www/html
# アプリケーション名
Name: test
# アプリケーションの説明
Summary: test package
# バージョン
Version: 1.0
# リリース番号
Release: 1
# ライセンス
License: BSD
# ソースコードの入手場所
Source: %{name}-%{version}-%{release}.tar.gz
# パッケージグループ
Group: Application/Internet
# ビルドルート
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}
# 対象アーキテクチャ(PHPのプログラムだから noarch でいいだろう)
BuildArch: noarch
# このパッケージを使うのに必要な他のパッケージ
Requires: httpd, php
%description
ここにこのパッケージの説明を書いておく。
%prep
# 作業ディレクトリを削除しておく(BuildRootで指定したディレクトリが削除される)
rm -rf $RPM_BUILD_ROOT
# Sourceで指定したファイルを$RPM_BUILD_ROOTに展開する
%setup -qn %{name}-%{version}-%{release}
%build
# ビルドは必要ないのでここでは指定しない
%install
# インストール先のディレクトリを作成する
install -d $RPM_BUILD_ROOT%{webroot}/%{name}
# 展開したファイル群をコピーする
cp -r * $RPM_BUILD_ROOT%{webroot}/%{name}/
# キャッシュディレクトリを作ってみる
mkdir -p $RPM_BUILD_ROOT%{webroot}/cache
# キャッシュディレクトリパーミッション変更(これは %filesセクションでも可能)
chmod 777 $RPM_BUILD_ROOT%{webroot}/cache
%clean
# 作業ディレクトリを削除する
rm -rf $RPM_BUILD_ROOT
%files
# デフォルトのパーミッションや、所有者情報をセット
%defattr(-,root,root)
# コピーしたファイル群をインストール対象として追加(ディレクトリごと追加)
%{webroot}/%{name}
%changelog
* 変更日時 パッケージ作成者の名前 メールアドレス
ログメッセージ
とこんな感じで作る。
続いて tar ball を用意する。これは、SPECのSource欄で定義したもの。
SOURCESディレクトリの中にソースコードを入れておいて tar ball を作る。
ここでのディレクトリ名は test-1.0-1 を使用する。
# cd /usr/src/redhat/SOURCES
# tar zcvf test-1.0-1.tar.gz test-1.0-1
SVNからチェックアウトした場合は、.svnとか.projectとかをexcludeしてあげる。
(小生はeclipse使っているので .project がコミットされている)
# tar zcvf test-1.0-1.tar.gz --exclude .svn --exclude .project test-1.0-1
これで、ソースコードの準備ができた。
続いて、RPMを実際に作ってみる。
# cd /usr/src/redhat/SPECS
%prepまでを実行して検証できる
# rpmbuild -bp test.spec
%installまでを実行して検証できる
# rpmbuild -bi test.spec
%filesの検証ができる
# rpmbuild -bl test.spec
通常のビルドはこれ
# rpmbuild -bb test.spec
ソースRPMは特に必要はないと思う(ソースがtarで固まっているだけだから)
# rpmbuild -ba test.spec
これでいい感じに配布できると思われます。
業務用ではエラい役に立ちそうなネタでした。