RPMパッケージへ署名を付加する

rpm のパッケージを自分で作ったのはいいが、インストール時に署名がないよ、というメッセージが出たので、署名を付ける方法を調べてみた。

環境

OS
CentOS 5.3

手順

gpg で自分の鍵を作成する。

% gpg --gen-key
gpg (GnuPG) 1.4.5; 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.

gpg: ディレクトリー「/home/yamamucho/.gnupg」ができました
gpg: 新しい構成ファイル「/home/yamamucho/.gnupg/gpg.conf」ができました
gpg: 警告: 「/home/yamamucho/.gnupg/gpg.conf」のオプションは起動している間、有効になりません
gpg: 鍵輪「/home/yamamucho/.gnupg/secring.gpg」ができました
gpg: 鍵輪「/home/yamamucho/.gnupg/pubring.gpg」ができました
ご希望の鍵の種類を選択してください:
   (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>"

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

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

今から長い乱数を生成します。キーボードを打つとか、マウスを動かす
とか、ディスクにアクセスするとかの他のことをすると、乱数生成子で
乱雑さの大きないい乱数を生成しやすくなるので、お勧めいたします。
+++++++++++++++..+++++++++++++++++++++++++++++++++++++++++++++.++++++++++++
++++++++++++++++++++++++++++++++++++++.+++++..++++++++++.+++++>++++++++++..
.............<+++++............+++++
十分な長さの乱数が得られません。OSがもっと乱雑さを収集
できるよう、何かしてください! (あと284バイトいります)
今から長い乱数を生成します。キーボードを打つとか、マウスを動かす
とか、ディスクにアクセスするとかの他のことをすると、乱数生成子で
乱雑さの大きないい乱数を生成しやすくなるので、お勧めいたします。
+++++.+++++++++++++++++++++++++..++++++++++++++++++++.++++++++++++++++++++.
+++++++++++++++.++++++++++..+++++++++++++++.+++++....++++++++++++++++++++.+
++++..+++++>+++++...+++++....+++++^^^
gpg: /home/yamamucho/.gnupg/trustdb.gpg: 信用データベースができました
gpg: 鍵4225595Aを絶対的に信用するよう記録しました
公開鍵と秘密鍵を作成し、署名しました。

gpg: 信用データベースの検査
gpg: 最小の「ある程度の信用」3、最小の「全面的信用」1、PGP信用モデル
gpg: 深さ: 0  有効性:   1  署名:   0  信用: 0-, 0q, 0n, 0m, 0f, 1u
pub   1024D/4225595A 2009-04-25
                 指紋 = 5238 7D0A 8175 89F0 255F  9C7F 16E5 7386 4225 595A
uid                  YAMAMUCHO <yamamucho@example.com>
sub   2048g/45523883 2009-04-25

作成した鍵の確認 (公開鍵)。

% gpg --list-keys
/home/yamamucho/.gnupg/pubring.gpg
---------------------------------
pub   1024D/4225595A 2009-04-25
uid                  YAMAMUCHO <yamamucho@example.com>
sub   2048g/45523883 2009-04-25

公開鍵のエクスポート。

% gpg --export -a 'YAMAMUCHO' > ~/public_key.txt

設定ファイルへ追記。

% vim ~/.rpmmacros
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
%_signature gpg
%_gpg_name 4225595A                        # 作成した公開鍵の番号
~/.rpmmacros ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

パッケージに署名を付加する。

% sudo rpm --resign /usr/src/redhat/RPMS/i386/keepalived-1.1.17-5.i386.rpm

公開鍵をインポートする。

% sudo rpm --import ~/public_key.txt

チェック。

% rpm --checksig -v /usr/src/redhat/RPMS/i386/keepalived-1.1.17-5.i386.rpm
keepalived-1.1.17-5.i386.rpm:
    ヘッダ V3 DSA signature: OK, key ID 4225595a
    ヘッダ SHA1 ダイジェスト: OK (83475e7021eae1cc971598a3c3ac03ac432eef68)
    MD5 ダイジェスト: OK (03b2470ac111b94e07c90fc6124414e3)
    V3 DSA signature: OK, key ID 4225595a

おわり。