ホーム > CentOS >

独自の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

ビルドオプション

作成されたバイナリrpmファイルは $HOME/rpmbuild/RPMS に、ソースrpmファイルは $HOME/rpmbuild/SRPMS に保存される。

独自のyumリポジトリの作成手順

  1. RPMおよびSRPMを格納するディレクトリを作成する

    mkdir -p /path/to/rpm/centos6/{i386,x86_64}/Packages
    mkdir -p /path/to/rpm/centos6/Source/SPackages
    
  2. 作成したディレクトリへ提供したいRPMパッケージをコピーする

  3. リポジトリ情報を作成する

    createrepo -v /path/to/rpm/centos6/i386
    createrepo -v /path/to/rpm/centos6/x86_64
    createrepo -v /path/to/rpm/centos6/Source
    
  4. 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
    
  5. 作成したリポジトリをApacheやnginxなどのWebサーバで公開する

  6. yumコマンドでパッケージをインストールする