2012年10月18日木曜日

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

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

前回Mozc のインストールと設定およびMozcの特徴について解説しました。

今回は、いよいよ作成したパッケージを独自リポジトリを作成して公開する方法について解説していきます。


独自リポジトリによるパッケージの公開

mozc の作成に関連して作成したパッケージとソースコードを独自リポジトリを作成して公開してします。

リポジトリを公開するにあたり必要になるものを列記します。

  • 公開するのに使う WEB サーバー
  • どのサーバーのどこにパッケージがあるか等の情報を含んだリポジトリ・ファイル
  • リポジトリそのもの
  • これだけのものを作成すれば独自リポジトリでパッケージを公開することができます。


    公開に利用する WEB サーバー

    今回は例として社内サーバーを利用して社内にだけ提供することにします。

    サーバー名

    yumserver.labs.sios.com
    リポジトリの URL
    http://yumserver.labs.sios.com/sios


    リポジトリ・ファイル

    リポジトリ・ファイルは、リポジトリを利用するユーザのマシンにインストールします。 ユーザーが yum コマンドでパッケージをインストールするときや、 yumdownload コマンドで パッケージやソースコード・パッケージをダウンロードするとき等に利用されます。

    リポジトリに関連してパッケージに署名を入れた鍵の公開鍵も提供します。前に作成した公開鍵 RPM-GPG-KEY-sios を使用します。

    リポジトリ・ファイルの中で鍵を定義してチェックするようにします。こうすることにより悪意のあるユーザが入れ替えてしまったパッケージが混入してしまうことを避けることができます。

    サーバー上のリポジトリのルート・ディレクトリが上記のように決まっているので、リポジトリ・ファイルの内容は下記のようになります。

    sios.repo
    
    [sios] 
    name=SIOS Packages for Centos $releasever - $basearch 
    baseurl=http://yumserver.labs.sios.com/sios/$basearch/ 
    enabled=1 
    gpgcheck=1 
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-sios 
    
    [sios-source] 
    name=SIOS Packages for Centos $releasever - Source 
    baseurl=http://yumserver.labs.sios.com/sios/SRPMS/ 
    enabled=0 
    gpgcheck=1 
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-sios 
    

    リポジトリ・ファイルと公開鍵の2つのファイルをインストールするパッケージを sios-repository パッケージとして作成しこれも公開することにします。

    パッケージを作るためには、2つのファイルを決まったディレクトリにインストールすることを記述した spec ファイルを作ります。

    spec ファイルは1から作成しなくても、 rpmdev-newspec コマンドが、テンプレートからプロトタイプの spec ファイルを作成してくれます。

    rpmdev-newspec コマンドは ツールをインストールした時の rpmdevtools パッケージに含まれています。

    またテンプレートは下記にあります。

    $ cd /etc/rpmdevtools 
    $ ls 
    devscripts.conf          spectemplate-lib.spec       spectemplate-python.spec 
    newspec.conf             spectemplate-minimal.spec   spectemplate-ruby.spec 
    rmdevelrpms.conf         spectemplate-ocaml.spec     template.init 
    spectemplate-R.spec      spectemplate-perl.spec 
    spectemplate-dummy.spec  spectemplate-php-pear.spec 
    

    今回は単純なパッケージなので spectemplate-minimal.spec をテンプレート として利用します。

    $ rpmdev-newspec -t minimal sios-repository
    $ cat sios-repository.spec
    Name:           sios-repository
    Version:        
    Release:        1%{?dist} 
    Summary:        
    
    Group:          
    License:        
    URL:            
    Source0:        
    BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) 
    
    BuildRequires:  
    Requires:       
    
    %description 
    
    
    %prep 
    %setup -q 
    
    
    %build 
    %configure 
    make %{?_smp_mflags} 
    
    
    %install 
    rm -rf $RPM_BUILD_ROOT 
    make install DESTDIR=$RPM_BUILD_ROOT 
    
    
    %clean 
    rm -rf $RPM_BUILD_ROOT 
    
    
    %files 
    %defattr(-,root,root,-) 
    %doc 
    
    
    
    %changelog 
    

    ここに出てくるタグやマクロの意味は下記の表のようになります。

    Name: パッケージの名前
    Version: バージョン
    Release: リリース
    Summary: パッケージについてのサマリー
    Group パッケージが所属するグループ
    Licence: パッケージのライセンス
    URL: パッケージのURL
    Source0: ソースコード。複数ある場合0、1、2 のように記述する。
    BuildRoot: ビルド時に利用されるルートディレクトリ
    BuildRequires: ビルド時に必要なパッケージ
    Requires: パッケージのインストールに必要な他のパッケージ
    %description パケージについての詳細な説明
    %prep ビルドする前に圧縮されたパッケージを展開する。
    %setup -q 不要な出力を抑止する。
    %build パッケージをビルドするためのスクリプト
    %configure configure を実行
    %install インストールするためのスクリプト
    %clean ビルドルートを削除するためのスクリプト
    %files インストールされるファイルのリスト
    %defattr デフォルトのパーミッション
    %doc ドキュメント
    %changelog 変更履歴

    これらの詳細については下記を参考にしてください。

    RPM Guide
    http://docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/RPM_Guide/index.html

    How to create an RPM package - FedoraProject
    http://fedoraproject.org/wiki/How_to_create_an_RPM_package#SPEC_file_overview

    作成された sios-repository から不要なタグやマクロは削除して、必要な部分だけを記述すると下記のようになります。

    Name:           sios-repository 
    Version:        6.3.17 
    Release:        1%{?dist} 
    Summary:        SIOS Repository File for yum command 
    
    Group:          System Environment/SIOS 
    License:        GPLv2 
    URL:            http://yumserver.labs.sios.com 
    Source0:        %{name}-%{version}.tar.gz 
    BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) 
    BuildArch: noarch 
    Requires: epel-release
    
    %description 
    Repository File for pakages released by SIOS. 
    
    SIOS releases some packages for RHEL based systems derived 
    from Fedora packages. This file is the repository file for 
    yum config. 
    
    %prep 
    %setup -q 
    
    
    %build 
    
    %install 
    rm -rf $RPM_BUILD_ROOT 
    install -d $RPM_BUILD_ROOT/etc 
    
    install -d -m 755 $RPM_BUILD_ROOT/etc/pki/rpm-gpg 
    
    install -m 644 RPM-GPG-KEY-sios $RPM_BUILD_ROOT/etc/pki/rpm-gpg/ 
    
    install -d -m 755 $RPM_BUILD_ROOT/etc/yum.repos.d 
    
    install -m 644 sios.repo $RPM_BUILD_ROOT/etc/yum.repos.d 
    
    %clean 
    rm -rf $RPM_BUILD_ROOT 
    
    %files 
    %defattr(-,root,root,-) 
    %dir /etc/yum.repos.d 
    %config(noreplace) /etc/yum.repos.d/sios.repo 
    %dir /etc/pki/rpm-gpg 
    /etc/pki/rpm-gpg/RPM-GPG-KEY-sios 
    
    %changelog 
    * Thu Aug 02 2012 SIOS Packager  - 17.6.3-1 
    - Initial release. Fedora17 & CentOS6.3 
    
    MozcZinnia パッケージには Fedora EPEL リポジトリにあるパッケージも必要となるため、
    Requires: epel-release
    を入れます。また sios-repository パッケージに含まれるファイルはテキストファイルで、アーキテクチャ非依存なので、作成する RPM パッケージが noarch に入るように下記を追加します。
    BuildArch: noarch

    今までに作成した公開鍵、リポジトリ・ファイル、SPEC ファイルを、

    sios-repository-6.3.17
    というディレクトリを作成して、そこに置きます。このディレクトリの名前は SPEC ファイルの中の
    Source0: %{name}-%{version}.tar.gz
    と整合性を取るためです。さらにこのディレクトリ配下を tar ボールとして圧縮します。

    さらにこれをビルドして RPM パッケージとソース・パッケージを作成します。tar ボールからパッケージを作る場合には rpmbuild-ta オプションを指定します。

    $ pwd
    /tmp
    $ ls sios-repository-6.3.17
    RPM-GPG-KEY-sios  sios-repository.spec  sios.repo
    $ tar czf sios-repository-6.3.17.tar.gz sios-repository-6.3.17
    $ rpmbuild --sign -ta sios-repository-6.3.17.tar.gz 
             ........................................
    伸張ファイルの検査中: /usr/lib/rpm/check-files /home/packager/rpmbuild/BUILDROOT/sios-repository-6.3.17-1.el6.x86_64
    書き込み完了: /home/packager/rpmbuild/SRPMS/sios-repository-6.3.17-1.el6.src.rpm
    書き込み完了: /home/packager/rpmbuild/RPMS/noarch/sios-repository-6.3.17-1.el6.noarch.rpm
             ........................................
    + exit 0
    

    パッケージができたので、インストールできるかテストします。

    $ cd ~/rpmbuild/RPMS/noarch
    $ sudo rpm -ivh sios-repository-6.3.17-1.el6.noarch.rpm 
    ....................................................................
    $ ls /etc/yum.repos.d/ 
    CentOS-Base.repo       epel-testing.repo            fedora.repo 
    CentOS-Debuginfo.repo  epel.repo                    sios.repo 
    CentOS-Media.repo      fedora-updates-testing.repo 
    CentOS-Vault.repo      fedora-updates.repo 
    $ ls /etc/pki/rpm-gpg/ 
    RPM-GPG-KEY-CentOS-6        RPM-GPG-KEY-CentOS-Security-6  RPM-GPG-KEY-EPEL-6 
    RPM-GPG-KEY-CentOS-Debug-6  RPM-GPG-KEY-CentOS-Testing-6   RPM-GPG-KEY-sios
    

    sios.repo 及び RPM-GPG-KEY-sios が正しくインストールされました。


    今回は、独自リポジトリを作成してパッケージを公開するには、下記の3つが必要なことを解説しました。

    • 公開に利用するWEBサーバ
    • repo ファイル
    • リポジトリ

    さらに repo ファイルを作成し、repoファイルと鍵をインストールするためのパッケージを作成しました。

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

    0 件のコメント:

    コメントを投稿