独自のrpmパッケージの作成
必要なパッケージのインストール
sudo yum groupinstall "Development tools"
sudo yum install rpmdevtools createrepo yum-utils
ビルドツリーの作成
rpmdev-setuptree
ホームディレクトリにrpmbuildという名前のディレクトリと.rpmmacrosという名前のファイルが作成される。
.rpmmacrosの%_smp_mflagsは、rpmをビルドする際のmakeの並列数を指定するマクロであり、環境に応じて適宜編集する。
SPECファイルの作成
作成したいパッケージのspecファイルを $HOME/rpmbuild/SPECS ディレクトリに配置する。 作成したパッケージの旧バージョンなどが既に存在する場合は、ソースRPMをダウンロードして、それに含まれるspecファイルを編集するのが簡単だろう。
ソースRPMを提供するリポジトリはデフォルトでは登録されていないので、以下のような内容のファイルを/etc/yum.repos.d/CentOS-Source.repo というファイル名で保存する。 (CentOSのバージョンは適宜変更する)
[base-source] name=CentOS-6.5 - Base - Source baseurl=http://vault.centos.org/6.5/os/Source/ gpgcheck=0 enabled=0 [updates-source] name=CentOS-6.5 - Updates - Source baseurl=http://vault.centos.org/6.5/updates/Source/ gpgcheck=0 enabled=0
次のコマンドでソールRPMをダウンロード・展開する。
yumdownloader --source <パッケージ名>
rpm -ivh <ダウンロードしたrpmファイル名>
ソールRPMのインストールはroot権限では行わない。
正確なパッケージ名を調べるには、rpm -qf コマンドが有効。これを使うと、特定のファイルを含むパッケージの名前を調べることができる。
> rpm -qf /bin/ls
coreutils-8.4-31.el6_5.1.x86_64
SPECファイルのテンプレート
元となるspecファイルが存在しない場合は、一からspecファイルを作成することになる。
Name: Version: Release: 1%{?dist} Summary: Summary(ja): Group: License: URL: # BuildArch: noarch Source0: Patch0: BuildRequires: Requires: %description %description(ja) %prep %setup %patch0 %build %configure make %{?_smp_mflags} %install %make_install %post /sbin/ldconfig %postun /sbin/ldconfig %files %doc README %changelog
rpmパッケージの作成
specファイルの作成が完了したら、ソースコードのtarballやパッチ等を $HOME/rpmbuild/SOURCES に配置する。 rpmbuildコマンドでビルドを実行する。
rpmbuild -ba $HOME/rpmbuild/SPECS/foo.spec
ビルドオプション
- bp : <specfile> の %prep (ソース展開と patch の適用) まで実行
- bc : <specfile> の %build (%prep とコンパイル) まで実行
- bi : <specfile> の %install (%prep, %build, インストール) まで実行
- bl : <specfile> の %files セクションを検証
- ba : <specfile> を元に、バイナリ/ソースパッケージ作成
- bb : <specfile> を元に、バイナリパッケージのみ作成
- bs : <specfile> を元に、ソースパッケージのみ作成
作成されたバイナリrpmファイルは $HOME/rpmbuild/RPMS に、ソースrpmファイルは $HOME/rpmbuild/SRPMS に保存される。
独自のyumリポジトリの作成手順
RPMおよびSRPMを格納するディレクトリを作成する
mkdir -p /path/to/rpm/centos6/{i386,x86_64}/Packages mkdir -p /path/to/rpm/centos6/Source/SPackages
作成したディレクトリへ提供したいRPMパッケージをコピーする
リポジトリ情報を作成する
createrepo -v /path/to/rpm/centos6/i386 createrepo -v /path/to/rpm/centos6/x86_64 createrepo -v /path/to/rpm/centos6/Source
yumにリポジトリを追加するためのファイルを作成し、/etc/yum.repos.dディレクトリに*.repoというファイル名で配置する。
[foo] name=CentOS-6 / $basearch - Foo baseurl=http://www.example.com/path/to/rpm/centos6/$basearch/ enabled=1 gpgcheck=0 [foo-source] name=CentOS-6 - Foo Source baseurl=http://www.example.com/path/to/rpm/centos6/Source/ enabled=0 gpgcheck=0
作成したリポジトリをApacheやnginxなどのWebサーバで公開する
yumコマンドでパッケージをインストールする