自作rpmパッケージをyumで管理

こんにちは、yokkunsです。
昨日、乗る電車を間違えて、飲み会に遅刻してしまいました。



さて、今回は、yumによるrpmパッケージ管理について書きたいと思います。

ご存知の方も多いかと思いますが、yumには、localinstallというオプションがあって、rpmパッケージをyumで管理することが出来ます。

$ sudo yum localinstall

これは、通常のrpmコマンドと何が違うかというと、依存関係を自動で解決してくれるところです。
また、パッケージの管理をyumで一元管理出来るのですごく便利です。


まず、yumでインストールするためには、GPG署名が必要なので、それを作成します。

$ gpg --gen-key
gpg (GnuPG) 1.4.7; Copyright (C) 2006 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.

ご希望の鍵の種類を選択してください:
   (1) DSAとElgamal (既定)
   (2) DSA (署名のみ)
   (5) RSA (署名のみ)
選択は?                                                
DSA keypair will have 1024 bits.
ELG-E keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)   
要求された鍵長は2048ビット
鍵の有効期限を指定してください。
         0 = 鍵は無期限
      <n>  = 鍵は n 日間で満了
      <n>w = 鍵は n 週間で満了
      <n>m = 鍵は n か月間で満了
      <n>y = 鍵は n 年間で満了
鍵の有効期間は? (0) 
Key does not expire at all
これで正しいですか? (y/N) y

あなたの鍵を同定するためにユーザーIDが必要です。
このソフトは本名、コメント、電子メール・アドレスから
次の書式でユーザーIDを構成します:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

本名: yokkuns                                         
電子メール・アドレス: yokkuns@example.com
コメント: yokkuns comment
次のユーザーIDを選択しました:
    “yokkuns (yokkuns comment) <yokkuns@example.com>”

名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)? o
秘密鍵を保護するためにパスフレーズがいります。

今から長い乱数を生成します。キーボードを打つとか、マウスを動かす
とか、ディスクにアクセスするとかの他のことをすると、乱数生成子で
乱雑さの大きないい乱数を生成しやすくなるので、お勧めいたします。
.+++++.++++++++++.+++++++++++++++++++++++++.++++++++++.+++++.
++++++++++++++++++++..+++++++++++++++++++++++++++++++++++
++++++++++++++++++++>++++++++++..>+++++....................
........<+++++..>..+++++........................<+++++........
...+++++
今から長い乱数を生成します。キーボードを打つとか、マウスを動かす
とか、ディスクにアクセスするとかの他のことをすると、乱数生成子で
乱雑さの大きないい乱数を生成しやすくなるので、お勧めいたします。
++++++++++.+++++++++++++++..+++++++++++++++++++++++++.+++++++++++++++
...+++++++++++++++++++++++++.++++++++++++++++++++++++++++++.+++++.
++++++++++.++++++++++>.+++++..+++++>..+++++..........>..+++++........
...........<....+++++........>+++++............................<
.+++++.....................................>+++++.....................
......................<+++++>+++++.....+++++^^^
gpg: 鍵1ED1F1D5を絶対的に信用するよう記録しました
公開鍵と秘密鍵を作成し、署名しました。

gpg: 信用データベースの検査
gpg: 最小の「ある程度の信用」3、最小の「全面的信用」1、PGP信用モデル
gpg: 深さ: 0  有効性:   4  署名:   0  信用: 0-, 0q, 0n, 0m, 0f, 4u
pub   1024D/1ED1F1D5 2009-04-26
                 指紋 = 1457 92B6 E153 4A2F 7F4C  E61C 4AFB C21C 1ED1 F1D5
uid                  yokkuns (yokkuns comment) <yokkuns@example.com>
sub   2048g/800C3038 2009-04-26

次に、自作のrpmパッケージに署名を付けるために、~/.rpmmacrosに、以下を追記します。

%_signature gpg
%_gpg_name yokkuns (yokkuns comment)

自作のrpmパッケージに署名を埋め込みます。
rpmbuildで、再度ビルドしても良いし、既にビルドしてるのであれば、rpm --resignで署名することも出来ます。

$ rpmbuild -ba --sign original.spec
パスフレーズの入力:

$ rpm --resign original-1.0-1.noarch.rpm
パスフレーズの入力:

最後に、公開鍵を作成して、インポートします。

$ gpg -a --export "yokkuns" > RPM-GPG-KEY-Yokkuns
$ sudo rpm --import RPM-GPE-KEY-Yokkuns

以上で、自作のrpmパッケージをyumで管理することが出来るようになりました。

$ sudo yum localinstall original-1.0-1.noarch.rpm

Loading "fastestmirror" plugin
Loading "downloadonly" plugin
Setting up Local Package Process
Loading mirror speeds from cached hostfile
 * kde: apt.kde-redhat.org
 * livna: mirrors.tummy.com
 * fedora: ftp-stud.hs-esslingen.de
 * kde-all: apt.kde-redhat.org
 * adobe-linux-i386: linuxdownload.adobe.com
 * updates: ftp-stud.hs-esslingen.de
Examining oroginal-1.0-1.noarch.rpm: orijinal - 1.0-1.noarch
Marking original-1.0-1.noarch.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package original.noarch 0:1.0-1 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size 
=============================================================================
Installing:
 original                noarch     1.0-1            original-1.0-1.noarch.rpm   22 k

Transaction Summary
=============================================================================
Install      1 Package(s)         
Update       0 Package(s)         
Remove       0 Package(s)         

Total download size: 22 k
Is this ok [y/N]: y
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing: original                 ######################### [1/1] 

Installed: original.noarch 0:1.0-1
Complete!