2012年11月6日火曜日

RPM パッケージのビルドと作成と公開 (6)

こんにちは、サイオステクノロジーの山田です。

前回repo ファイルを作成し、repo ファイルと鍵をインストールするだけの単純なパッケージを作成しました。

今回はパッケージを公開するサーバー上でリポジトリを作成し、クライアントでリポジトリの内容を表示したり、パッケージのインストールができることを確認します。

リポジトリ

yum サーバーにリポジトリを作成します。

リポジトリの URLhttp://yumserver.labs.sios.com/sios としたので、これに対応する sios というディレクトリを作成し、その配下に i386x86_64SRPMS の3つのディレクトリを作成します。

# cd [ドキュメントルートとなっているディレクトリ]
# mkdir sios 
# cd sios 
# mkdir i368 x86_64 SRPMS

作成したディレクトリに、それぞれ i386 で作成した RPM パッケージ (noarch も含める)、x86_64 で作成したパッケージ (noarch も含める)、ソースコード・パッケージ (i386 で作成したものも x86_64で作成したものも同一なので i386 のもの) をコピーします。

パッケージのコピーが終了したら、 createrepo コマンドを使用してリポジトリーを作成します。

# pwd
[ドキュメントルートとなっているディレクトリ]/sios
# createrepo -v i386
1/17 - xemacs-mozc-1.5.1090.102-2.el6.noarch.rpm
2/17 - zinnia-0.06-12.el6.i686.rpm
3/17 - ibus-mozc-1.5.1090.102-2.el6.i686.rpm
4/17 - zinnia-utils-0.06-12.el6.i686.rpm
5/17 - zinnia-doc-0.06-12.el6.noarch.rpm
6/17 - mozc-1.5.1090.102-2.el6.i686.rpm
7/17 - zinnia-tomoe-0.06-12.el6.i686.rpm
8/17 - zinnia-debuginfo-0.06-12.el6.i686.rpm
9/17 - zinnia-perl-0.06-12.el6.i686.rpm
10/17 - emacs-mozc-1.5.1090.102-2.el6.noarch.rpm
11/17 - mozc-debuginfo-1.5.1090.102-2.el6.i686.rpm
12/17 - zinnia-python-0.06-12.el6.i686.rpm
13/17 - zinnia-devel-0.06-12.el6.i686.rpm
14/17 - emacs-common-mozc-1.5.1090.102-2.el6.i686.rpm
15/17 - emacs-mozc-el-1.5.1090.102-2.el6.noarch.rpm
16/17 - xemacs-mozc-el-1.5.1090.102-2.el6.noarch.rpm
17/17 - sios-repository-6.3.17-1.el6.noarch.rpm

Saving Primary metadata
Saving file lists metadata
Saving other metadata
# ls i386
emacs-common-mozc-1.5.1090.102-2.el6.i686.rpm
emacs-mozc-1.5.1090.102-2.el6.noarch.rpm
emacs-mozc-el-1.5.1090.102-2.el6.noarch.rpm
ibus-mozc-1.5.1090.102-2.el6.i686.rpm
mozc-1.5.1090.102-2.el6.i686.rpm
mozc-debuginfo-1.5.1090.102-2.el6.i686.rpm
repodata
sios-repository-6.3.17-1.el6.noarch.rpm
xemacs-mozc-1.5.1090.102-2.el6.noarch.rpm
xemacs-mozc-el-1.5.1090.102-2.el6.noarch.rpm
zinnia-0.06-12.el6.i686.rpm
zinnia-debuginfo-0.06-12.el6.i686.rpm
zinnia-devel-0.06-12.el6.i686.rpm
zinnia-doc-0.06-12.el6.noarch.rpm
zinnia-perl-0.06-12.el6.i686.rpm
zinnia-python-0.06-12.el6.i686.rpm
zinnia-tomoe-0.06-12.el6.i686.rpm
zinnia-utils-0.06-12.el6.i686.rpm
# ls i386/repodata
filelists.xml.gz  other.xml.gz  primary.xml.gz  repomd.xml
# createrepo -v x86_64
.................................................
# creterepo -v SRPMS
.................................................

上記のアウトプットからわかるように、createrepo でパッケージがスキャンされ repodata というディレクトリの配下にパッケージについての情報を含んだメタデータ・ファイルが作成されます。

メタデータは下記のようになっています。

  • repomd.xml
  • 他にどのようなメタデータがあるかという情報を含んでいます。
  • primary.xml.gz
  • パッケージ毎の情報、パッケージのファイル名やパッケージの依存関係についての情報を含んでいます。
  • filelists.xml.gz
  • それぞれのパッケージに含まれているファイルについての情報を含んでいます。
  • other.xml.gz
  • それぞれのパッケージの spec ファイルに書かれている著者や履歴等の情報を含んでいます。

独自リポジトリからのパッケージのインストール

今度は CentOS 6 がインストールされたマシンで、独自リポジトリに置かれたパッケージを repoquery コマンドで表示したり、yum コマンドでインストールできるか確認してみます。

これからの手順は x86_64 アーキテクチャの場合を見ていきますが、i386 アーキテクチャでも同様です。

repo ファイルのインストール

まず /etc/yum.repos.d に、独自パッケージ用の repo ファイルをインストールします。この段階では、まだレポジトリがどこにあるか不明なのでリポジトリ提供者の指示に従います。

rpm -ivh http://osslinux.labs.sios.com/sios/x86_64/sios-repository-6.3.17-1.el6.noarch.rpm
http://osslinux.labs.sios.com/sios/x86_64/sios-repository-6.3.17-1.el6.noarch.rpm を取得中
警告: /var/tmp/rpm-tmp.mmmsEm: ヘッダ V4 RSA/SHA1 Signature, key ID 7306cc2e: NOKEY
エラー: 依存性の欠如:
 epel-release は sios-repository-6.3.17-1.el6.noarch に必要とされています

sios-repository パッケージを作成するときに依存性

Requires: epel-release
を定義しておいたので、epel-release パッケージがインストールされていないと sios-repository のインストールに失敗します。

先に epel-release をインストールします。

# rpm -ivh http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-7.noarch.rpm
http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-7.noarch.rpm を取得中
警告: /var/tmp/rpm-tmp.gimXDX: ヘッダ V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
準備中...                ########################################### [100%]
   1:epel-release           ########################################### [100%]

次に sios-repository パッケージをインストールします。

# rpm -ivh http://yumserver.labs.sios.com/sios/x86_64/sios-repository-6.3.17-1.el6.noarch.rpm
http://yumserver.labs.sios.com/sios/x86_64/sios-repository-6.3.17-1.el6.noarch.rpm を取得中
警告: /var/tmp/rpm-tmp.Zn3BBs: ヘッダ V4 RSA/SHA1 Signature, key ID 7306cc2e: NOKEY
準備中...                ########################################### [100%]
   1:sios-repository        ########################################### [100%]
# cd /etc/yum.repos.d/
[root@centos6-3-64f yum.repos.d]# ls
CentOS-Base.repo       CentOS-Media.repo  epel-testing.repo  sios.repo
CentOS-Debuginfo.repo  CentOS-Vault.repo  epel.repo

上記のように /etc/yum.repos.depelsios のリポジトリ・ファイルがインストールされました。

リポジトリの内容の確認

次にクライアント・マシンで sios レポジトリーの中に何が含まれているか見てみます。

これには repoquery コマンドを利用します。repoquery コマンドは yum-utils パッケージに含まれています。

sios リポジトリを指定して (--repoid=sios) 含まれているすべてのパッケージを表示してみます。

# repoquery --repoid=sios -a 
emacs-common-mozc-0:1.5.1090.102-2.el6.x86_64 
emacs-mozc-0:1.5.1090.102-2.el6.noarch 
emacs-mozc-el-0:1.5.1090.102-2.el6.noarch 
ibus-mozc-0:1.5.1090.102-2.el6.x86_64 
mozc-0:1.5.1090.102-2.el6.x86_64 
mozc-debuginfo-0:1.5.1090.102-2.el6.x86_64 
sios-repository-0:6.3.17-1.el6.noarch 
xemacs-mozc-0:1.5.1090.102-2.el6.noarch 
xemacs-mozc-el-0:1.5.1090.102-2.el6.noarch 
zinnia-0:0.06-12.el6.x86_64 
zinnia-debuginfo-0:0.06-12.el6.x86_64 
zinnia-devel-0:0.06-12.el6.x86_64 
zinnia-doc-0:0.06-12.el6.noarch 
zinnia-perl-0:0.06-12.el6.x86_64 
zinnia-python-0:0.06-12.el6.x86_64 
zinnia-tomoe-0:0.06-12.el6.x86_64 
zinnia-utils-0:0.06-12.el6.x86_64 

今度は sios リポジトリを指定して (--repoid=sios)、含まれているすべてのパッケージのソース・パッケージ (--source) を、重複を除いてソートして ( | sort u) 表示してみます。

※ 一つのソース・パッケージから複数のパッケージが作成される場合があるのでパッケージ毎のソース・パッケージは重複することがあります。

# repoquery --repoid=sios --source -a  | sort -u 
mozc-1.5.1090.102-2.el6.src.rpm 
sios-repository-6.3.17-1.el6.src.rpm 
zinnia-0.06-12.el6.src.rpm 

パッケージのインストール

それでは、mozc をインストールしてみましょう。以前、開発マシンでインストールしたように mozc を ibus で利用する場合にはmozc と ibus-mozc の2つのパッケージが必要になります。

# yum -y install ibus-mozc mozc 
        .......................................................
Dependencies Resolved 

================================================================================
 Package             Arch          Version                    Repository   Size 
================================================================================ 
Installing: 
 ibus-mozc           x86_64        1.5.1090.102-2.el6         sios        463 k 
 mozc                x86_64        1.5.1090.102-2.el6         sios         15 M 
Installing for dependencies: 
 protobuf            x86_64        2.3.0-7.el6                epel        287 k 
 zinnia              x86_64        0.06-12.el6                sios         59 k 
 zinnia-tomoe        x86_64        0.06-12.el6                sios         24 M

Transaction Summary 
================================================================================ 
        .......................................................
警告: rpmts_HdrFromFdno: ヘッダ V4 RSA/SHA1 Signature, key ID 7306cc2e: NOKEY 
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-sios 
        .......................................................
warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY 
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 
        .......................................................
Installed: 
  ibus-mozc.x86_64 0:1.5.1090.102-2.el6     mozc.x86_64 0:1.5.1090.102-2.el6 

Dependency Installed: 
  protobuf.x86_64 0:2.3.0-7.el6             zinnia.x86_64 0:0.06-12.el6 
  zinnia-tomoe.x86_64 0:0.06-12.el6 

Complete! 

上記のアウトプットからわかるように、インストールするときに依存関係がチェックされ、epel リポジトリから protpbuf が、sios リポジトリから zinniazinnia-tomoe がインストールされます。

また sios リポジトリと epel リポジトリを設定してから最初のインストールとなるので、それぞれの公開鍵がシステムにインポートされます。

このようにしてリポジトリを追加して追加したリポジトリから必要なパッケージをインストールすることができます。

まとめ

「RPMパッケージのビルドと作成と公開」という連載で、CentOS 6 上で mozc のパッケージをビルドする場合を通して、パッケージをビルドするのに必要となるツール、spec ファイルと rpmbuild コマンドの概要、gpg による鍵の作成を解説しました。 さらに作成したパッケージを公開することを通じて createrepo コマンドの使用方法、リポジトリに含まれているパッケージやソース・パッケージを表示する方法等を解説しました。

範囲が広かったため個々のコマンド等に詳細な解説ができませんでした。これらの詳細については、文中の参考文献やオンライン・マニュアル等を参照してください。

0 件のコメント:

コメントを投稿