RPMパッケージ作成

RPMパッケージ作成時のメモ。

RPMパッケージとは、RedHad系のLinuxで使用することができるパッケージです。

rpm -i xxx.xxx.rpmのように簡単にインストールをすることができます。

パッケージのインストールやアンインストールが簡単に扱えるようになります。

 

パッケージ作成前手順:

 

1.rpm作業用ディレクトリを作成する

任意のディレクトリにrpm作業用のディレクトリを作成します。

自分の例では、/home/kiyoto/rpmです。

そのまんま自分のホームディレクトリにrpmディレクトリを作成しています。

mkdir /home/kiyoto/rpm

 

2.先ほど作成した作業用ディレクトリ配下に5つのディレクトリを作成する

先ほど作成したディレクトリ(rpm)配下に以下のディレクトリを作成します。

 

  • SOURCES (ソースファイル格納用ディレクトリ。tarボール)
  • SPECS    (SPECファイル格納用ディレクトリ)
  • BUILD     (RPMパッケージ作成時の作業用ディレクトリ。ソース展開など)
  • ・RPMS     (完成したRPMパッケージ格納用ディレクトリ)
  • ・SRPMS    (src.rpmパッケージ格納用ディレクトリ)

 

3.RPMSディレクトリ配下にi386ディレクトリを作成する

 

 

4.パッケージを作成するための作業用ディレクトリ指定する

ホームディレクトリに .rpmmacros ファイルを作成し、先ほどの1.で作成した作業用ディレクトリを指定する

vi .rpmmacros 
%_topdir /home/kiyoto/rpm

 

5.SOURCESディレクトリに作成したソースファイル(tar.gz)を格納する

以下のファイルを用意し、tarボールにまとめる。

 

  • ソースファイル(今回の例では、sniffy.c sniffy.h などなど...)
  • makeファイル(make)
  • 自分は最初makeファイルなどなくてもいいのかと思い、ソールファイルのみをtarボールに格納してしまい、作成中にエラーが出ました。

 

tarボールにまとめる時に、ファイル名(tarボール)の命名規則があるので、以下のような規則に従う。

 

<パッケージ名>-<バージョン番号>.<リリース番号>

 

自分の例(sniffyを作ったとき)では「sniffy-1.0.tar.gz」という感じになる。

sniffy-1.0のようなディレクトリを作成し、そのディレクトリ内にソースファイル・makeファイルを格納し、「圧縮」する。

makeファイルの作成方法は別途他のサイトを参照。

 

6.SPECファイル作成

SPECファイルを作成し、SPECSディレクトリに格納する。

このSPECファイルが結構重要なファイルなのだが、いろんな項目があるのでめんどうなところ。バージョンの違いによっても結構違うらしい…

複数のサイトを参照しながら一個一個書いていくのがわかりやすいかも。既存のSPECファイルを参照するのもOK

以下の例は必要最低限をまとめたような簡単な例です(rpmパッケージ化することだけを考えた結果のspecファイル)

name: sniffy
Version: 1.0
Release: 0
License: GPL2
Group: Utilities
Source: sniffy-1.0.tar.gz
Summary: packet sniffer
Packager: kiyoto akiyama
Distribution: Fedora
BuildRoot: /home/kiyoto/kyonta/rpm/ROOT
%description
sniffy-1.0
%prep
rm -rf $RPM_BUILD_ROOT/*
mkdir -p $RPM_BUILD_ROOT/usr/local/{bin,man/man1}
%setup
%build
make
%install
install -s sniffy $RPM_BUILD_ROOT/usr/local/bin
%files
%attr(-, root, root) /usr/local/bin/sniffy

 

  • name:作成するパッケージ名。上記でtarボールにまとめた時のパッケージ名と同一でなければならない。
  • version:パッケージのバージョン。任意
  • Release:パッケージのリリース番号。任意
  • License:ライセンス。
  • Source:上記で作成したtarボールのファイル名
  • Summary:作成するパッケージ名の概要
  • Packager:作成者情報
  • Distribution:Linuxのディストリビューション
  • BuildRoot:ちょっとわからない。反映されてるかもナゾな項目だった。
  • %description:パッケージの説明。長文でもOK
  • %prep:rpmパッケージ作成時の前処理
  • ※例では、ビルドルートを削除し、ビルドルート上に、bin,manディレクトリを作成している。
  • %setup:ソースファイルを展開後の処理
  • %build:configureやmakeなどのビルド処理
  • %install:インストール処理
  • %files:パッケージに含まれるファイルリストのリスト

 

 

jパッケージ作成手順:

rootユーザでやらず、一般ユーザで以下を行う。一般ユーザでやらないと何かあったときに取り返しのつかないことになるらしい。

 

$rpmbuild -bp sniffy.spec

$rpmbuild -bc sniffy.spec

$rpmbuild -bi --define="__check_files %{nil}" sniffy.spec

$rpmbuild -bl --define="__check_files %{nil}" sniffy.spec

$rpmbuild -bb --define="__check_files %{nil}" sniffy.spec

 

※3回目の段階から出てくる--define="__check_files %{nil}"は、作成中に「インストール済み(ただし未伸張)ファイルが見つかりました

的なメッセージが出た場合に、指定すると問題なく続行させることができる。

 

以上でRPMS/i386ディレクトリに、rpmパッケージが作成されている。

-bpなどで、段階的に作成していくため、エラーが出たらそれを修正しながら行っていけばしっかり作成される。

エラーの内容もしっかり読み、わからない所はgoogleで調べるなどすれば、解決できると思います。

今回はとりあえずパッケージ化することに重点を置いたため、内容が適当かもしれません。

詳しい設定などは、他のサイトで詳細に説明されているため省きます。(自分が詳しく知りません)

 

参照URL:

RPMパッケージ作成メモ

インストール済み(ただし未伸張)ファイルが見つかりました

簡単なRPMの作り方

RPMパッケージ作成