2012年9月18日火曜日

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

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

今回から数回に渡り、RHEL6 用の Mozc (Google 日本語入力のオープンソース版) をビルドして公開するまでの作業を通じて、RPM パッケージのビルド方法、作成方法、独自リポジトリの作成方法等について解説していきます。

はじめに

Google 日本語入力は、GoogleWindowsMacAndroid 向けにリリースしている日本語入力ですが、これは Google の検索エンジンで検索されている語句の情報を元に辞書が作成されています。 よく検索される新しい単語が登録されている他、候補に出てくる単語の順序等にも Google の検索技術が用いられているなど、Google の検索技術を生かした日本語入力となっています。

Google 日本語入力は、Google の検索技術を利用しているため、プロプライエタリなソフトウェアとして提供されていてます。

しかし、Google が公開できない部分を除外して、オープン・ソース・ソフトウェアとして Mozc というものを公開しています。

Mozc には Google 日本語入力で一番重要な辞書の部分が一部しか入っていませんが、それでも Linux で利用できるオープンソースの日本語入力としては大変有力なものとなっています。

FedoraUbuntu 等の Linux ディストリビューションでは、 すでにこの Mozc を取り込んでパッケージとして提供しています。

本稿では Fedora が提供している Mozc のソース・パッケージを元に、CentOS 6 用 (Scientific Linux 6RHEL 6 でも動作可能) のパッケージ を作成していきます。

作成の過程で RPM パッケージの作成の仕方を解説していきます。さらに、作成したパッケージを独自リポジトリーで公開する過程で、gpg の鍵により署名した RPM パッケージの作成方法やリポジトリの作成方法、リポジトリに登録されているパッケージの表示方法等についても解説します。

ツールを揃える

まずは Mozc を作成するのに必要なツールを揃えて行きます。

前提条件

  • CentOS6.3 32ビット版を使用
  • CentOS のインストールは Desktop を選択

パッケージのビルドに使用する CentOS32ビット版を使用し、インストール時のオプションとしては Desktop を選択します。できあがるパッケージは 32ビット版となりますが、対応するソース・パッケージは 32ビット版と64ビット版で共通のものとなります。

必要なツールのインストール

CentOS6.3 32 ビット版の開発に必要な開発用ツールをインストールします。開発用ツールは、"Development tools" グループとしてパッケージがグループ化されているので、これをインストールします。

# yum groupinstall ”Development tools”
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * base: centos.tt.co.kr
 * extras: centos.mirror.cdnetworks.com
 * updates: centos.mirror.cdnetworks.com
Setting up Group Process
Checking for new repos for mirrors
Package 1:make-3.81-20.el6.i686 will be installed
Package patch-2.6-6.el6.i686 will be installed
      ..............

また、RPM ファイルの操作をするために rpmdevtools パッケージをインストールします。

# yum -y install rpmdevtools
Loaded plugins: fastestmirror, refresh-packagekit, security
    ...................................................
Complete!

rpmdevtools パッケージは RPM ファイルの開発に利用するためのツールで、下記のコマンドを含んでいます。

  • rpmdev-setuptree
  • ユーザーのホームディレクトリに RPM ビルド・ツリーを作成する。
  • rpmdev-diff
  • 2つのアーカイブ間の差分を種々の形式で表示する。
  • rpmdev-newspec
  • テンプレートから新しい spec ファイルを作成する。
  • rpmdev-rmdevelrpms
  • 開発用の RPM ファイルを見つける。
  • rpmdev-checksig
  • RPM パッケージの署名をチェックする。
  • rpminfo
  • RPM パッケージに含まれる実行ファイルとライブラリを表示する。
  • rpmdev-md5/sha*
  • アーカイブファイル中のすべてのファイルのチェックサムを表示する。
  • rpmdev-vercmp
  • RPM バージョンの比較をする。
  • spectool
  • spec ファイル内のソースとパッチを展開する。
  • rpmdev-wipetree
  • rpm-setuptreeで作成されたディレクトリ内のファイルを削除する。
  • rpmdev-extract
  • アーカイブを展開する。
  • rpmdev-bumpspec
  • spec ファイルのバージョンを上げる。

Fedora EPEL リポジトリの追加

Fedora EPEL (Extra Packages for Enterprise Linux) とは、Fedora ProjectFedora のパッケージの一部を RHEL 用に作成して提供しているパッケージ群です。EPEL のパッケージは RHEL のパッケージとは整合性があるように作成されています。しかし EPEL のパッケージについては、Fedora Poject からも Red Hat 社からも公式なサポートを受けることはできません。

#  rpm -ivh http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/
epel/6/i386/epel-release-6-7.noarch.rpm

上記のオペレーションにより、/etc/yum.repos.d に epel.repo と epel-testing.repo というリポジトリ・ファイルができます。

Fedora17 のリポジトリの追加と、repo ファイルの修正

Fedora のリポジトリより、fedora-release-17-1 というパッケージをダウンロードします。このパッケージは /etc/yum.repod.d に置かれる repo ファイルを含んでいますが、他にも Fedora17 に固有なファイルをインストールします。これらのファイルは CentOS 固有のファイルを置き換えてしまいます。これを避けるために、パッケージに含まれているファイルを展開して必要な ファイルだけを使用します。

パッケージに含まれているファイルを展開するには、rpmdev-extract コマンドを使用します。

# wget http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/releases
/17/Fedora/i386/os/Packages/f/fedora-release-17-1.noarch.rpm
# rpmdev-extract fedora-release-17-1.noarch.rpm
        ...............................................
# cd fedora-release-17-1.noarch/etc/yum.repos.d
# ls
fedora-updates-testing.repo  fedora-updates.repo  fedora.repo
# cp *.repo /etc/yum.repos.d

上記のオペレーションにより、/etc/yum.repos.dfedora.repofedora-updates.repofedora-updates-testing の3つのリポジトリ・ファイルが作成されます。

また、CentOSFedora ではパッケージが重複するので、一般に CentOS 上で Fedora のリポジトリを使うことはできません。このリポジトリは、CentOSEPEL で提供されていないパッケージのソースコードを取得するときだけ利用し、通常は利用されないように設定します。

通常 yum コマンドを実行した時に Fedora のリポジトリを参照しないようにするには、リポジトリ・ファイル (fedora.repo 等) 内の enabled オプションをオフにします。

具体的には、下記のように設定します。

enbaled=1 (変更前)
enabled=0 (変更後)

また、アップデートパッケージのリポジトリの名前が CentOSFedora"updates" となっているため、Fedora のアップデートリポジトリの名前を fedora-updates に修正しておきます。(fedora-updates.repo)

[updates] (変更前)
[fedora-updates] (変更後)

Fedora のリポジトリー・ファイルではリリースバージョンをシステムから取得していますが ($releasever)、CentOS 上では CentOS のリリースバージョンが入ってしまうため 17 に固定します。

$releasever (変更前)
17 (変更後)

システムのアップデート

利用するリポジトリが整ったところで、パッケージを作る前にシステムを最新の状況にしておきましょう。こうしておけば作成するパッケージに利用されるツールやライブラリも最新のものとなります。

# yum -y update

これでシステムのパッケージが最新の状態になりますが、カーネル等のアップデートがあった場合、システムをリブートした後に新しいパッケージが有効となります。

今回は準備段階として、パッケージのビルドに必要な環境を整えました。次回はFedora のリポジトリからソース・パッケージをダウンロードしてビルドしていく手順の解説に入っていきます。

0 件のコメント:

コメントを投稿