rpmbuild - RPMパッケージを作成

トップ > チップス > rpmbuild - RPMパッケージを作成
2012-02-13, rpmbuild

/tips/linux/rpmbuild RPMパッケージをビルドするツールです。

**パッケージ作成入門 ごく簡単なRPMパッケージを作成する手順を示します。 ***準備 rpmbuildパッケージをインストールします。 :# yum -y install rpm-build

一般ユーザで作業できるようにします。下記のようなコマンドで、「~/.rpmmacros」にディレクトリを設定して下さい。その後、必要に応じて、/usr/src/redhat以下と同じ構造のフォルダを作成して下さい。 :$ echo "%_topdir /home/username/rpm" > .rpmmacros :$ mkdir -p ~/rpm/\{BUILD,RPMS,SOURCES,SPECS,SRPMS\}

rootで作業する場合、規定の作業ディレクトリに移動するだけですが、設定を誤ると危険なため、なるべく上記の方法を利用します。 :# cd /usr/src

***リソースの準備 パッケージを構成するファイルを「パッケージ名-バージョン番号」ディレクトリの中に集めます。今回はサンプルとして、binディレクトリを作成し、bashスクリプト(hello.sh)を1つだけ格納します。 :# mkdir -p hello-1.0/bin :# vi hello-1.0/bin/hello.sh

hello.sh :#! /bin/bash :echo "Hello, rpm!"

リソースが集まったらtar.gz形式に圧縮して、redhat/SOURCE/ディレクトリに設置します。 :# tar czf rpm/SOURCE/hello-1.0.tar.gz hello-1.0/

>SRPMが既に存在する場合、以下のコマンドで必要なファイルを得ることが出来ます。 >$ rpm -ihv hello-1.0-0.src.rpm

***specファイルの記述 次にRPM作成の肝とも言える、specの作成を行います。 :# vi rpm/SPEC/hello-1.0.spec

hello-1.0.spec :Name: hello :Version: 1.0 :Release: 0 :Group: Utilities :Source: hello-1.0.tar.gz :Summary: Hello, rpm! :License: hello :BuildRoot: /var/tmp/hello :BuildArch: noarch : :%description :"Hello, rpm!" by bash. : :%prep :%setup : :/bin/rm -rf $RPM_BUILD_ROOT/usr/local/%\{name\}-%\{version\}/bin :/bin/mkdir -p $RPM_BUILD_ROOT/usr/local/%\{name\}-%\{version\}/bin : :%install :/bin/cp bin/hello.sh $RPM_BUILD_ROOT/usr/local/%\{name\}-%\{version\}/bin/hello.sh : :%post : :%clean :/bin/rm -rf $RPM_BUILD_ROOT : :%files :/usr/local/%\{name\}-%\{version\}/bin/hello.sh

***生成 準備が整ったら、下記のコマンドを実行します。エラーが無ければ、redhat/RMPS/i386/ディレクトリにrpmが生成されます。 :# rpmbuild -ba redhat/SPECS/hello-1.0.spec

以下のコマンドは試しにインストールする場合と、削除する場合です。 :# rpm -ihv redhat/RPMS/i386/hello-1.0-0.i386.rpm :# hello.sh #(hello.shを実行できるようになっている) :# rpm -e hello

**タグ %で始まる行(キーワード)はタグと呼ばれます。各タグの下に、それぞれの場面で実行するスクリプト等を記述します。

,*タグ,*説明 ,%description,パッケージの長い説明を記述します。 ,%file,パッケージがインストールするファイルやディレクトリを記述します。{strong:ここに記述されていないファイルは、インストール時にコピーするようにしても、インストールされません。また、アンインストールのときに削除されません。} ,%prep,パッケージを作成する前に実行するコマンドを記述します。 ,%setup,%prepタグ内で使用できます。%ソースコードのtar ballを展開し、生成したディレクトリ内に移動することを意味します。 ,%build, ,%install,インストールするときに実行するコマンドを記述します。 ,%clean,パッケージ作成後に実行するコマンドを記述します。 ,, ,%post,インストール後に実行するコマンドを記述します。 ,, ,%preun,アンインストール前に実行するコマンドを記述します。 ,%postun,アンインストール後に実行するコマンドを記述します。

以下は実際にパッケージの構築、インストール、アンインストールを行った際にタグが実行されるタイミングを記述したものです。{strong:アップグレード(-U)では新しいパッケージの「post」が実行された後に、古いパッケージの「preun\,postun」が実行されている点に注意が必要です。}

:$ rpmbuild -ba SPECS/hello-1.0.spec :実行中(%prep): /bin/sh -e /var/tmp/rpm-tmp.61320 : : :______ prep ______ : : :______ setup ______ : : :______ build ______ : : :______ install ______ : : :______ clean ______

:# rpm -i hello-1.0-0.i386.rpm :______ post ______

:# rpm -F hello-1.0-0.i386.rpm

:# rpm -U hello-1.0-1.i386.rpm :______ post ______ :______ preun ______ :______ postun ______

:# rpm -e hello-1.0 :______ preun ______ :______ postun ______

**マクロ 「%define」構文を利用してマクロを定義することができます。定義したマクロは「%\{name\}」という記述で利用できます。定義済みマクロについては「/usr/lib/rpm/macros」を参照して下さい。 :%define name hello : :%\{name\}

**参考リンク 「パッケージ作成入門」は下記サイトの手順を、自分の環境に合わせて調整をしながらトレースして記述しています。 -{link:http://nekomimists.ddo.jp/~tom/nekokick/rpm.html}

-{link:yum_rpm,rpm及びyumの使い方}

この記事は役に立ちましたか?