![]() |
バイナリ・パッケージあれこれ |
目次
主にプログラミング開発環境で使用する、CentOS 5に入れる各種バイナリパッケージやその入手先についてのメモページです。バイナリパッケージがないものについてはパッケージ作成を行います。
Qtのインストールについては、CentOS 5を使う:Qt4.xをインストールする ページに記述しています。
ライセンス:Common Public License
入手先: http://www.graphviz.org/
Red Hat Enterprise Linux用RPMパッケージが公開されています。
bdf.hなど
kernel-rt-2.6.24.7-65.el5rt.centos.i686.rpmほか公開されています。
上記ディレクトリにある kernel-rt.repo を、/etc/yum.repos.d/にコピーし、以下を実行します。
# yum --enablerepo=kernel-rt install rt-setup :
上記の元となっている、Red Hat Enterprise Linux Realtime Kernelのインストールガイドページ
2008.11.16現在、Kernel 2.6.27が最新です。
CentOS 5(またはRed Hat Enterprise Linux 5あるいはFedora Core 6)向けにバイナリパッケージが提供されていないソフトウェアは、自分でバイナリ・パッケージを作成します。
RPMパッケージ作成に関するノウハウは、「RPMパッケージ作成メモ」ページに記載しています。
tarallにspecファイルが含まれているので、わりと簡単にバイナリパッケージが作成できます。
specファイルの記述ミスがあるので、これを修正します。
tarballにspecファイルが含まれていますが、デフォルトのままではエラーとなるので修正します。
tarballにspecファイルが含まれています。コレを用いてビルドすると、エラーが発生します。
エラー: インストール済み(ただし未伸張)ファイルが見つかりました: /usr/lib/pkgconfig/cppunit.pc /usr/share/doc/cppunit/FAQ /usr/share/doc/cppunit/_additional_message_8cpp.html /usr/share/doc/cppunit/_additional_message_8h-source.html :
%filesセクションに記述されていないファイルがビルドルート下にあるため発生しているエラーです。
最初の行のpkgconfigについては必要になると思われるので、specファイルの%filesセクションに追加します。
%{_libdir}/pkgconfig/cppunit.pc
2行目以降はドキュメントファイルです。rpmbuildは、ドキュメントファイルが格納されるディレクトリを/usr/share/doc/cppunit-1.12.1とバージョン番号付きで認識しているのに、CppUnitのMakefileがバージョン番号なしの/usr/share/doc/cppunitにドキュメントを入れたため、エラーとなったものです。
$ ls /var/tmp/cppunit-1.12.1-2-root-torutk/usr/share/doc cppunit cppunit-1.12.1 cppunit-doc-1.12.1
とあり、cppunitとcppunit-doc-1.12.1の中はほぼ一緒です。そこで、cppunit以下に%filesセクションにないファイルがあっても無視するように、以下のマクロ定義をspecファイル先頭に追加します。
%define _unpackaged_files_terminate_build 0
依存関係上、LaTeX、dvips、graphviz、ghostscriptのパッケージが必要となります。doxywizardを使用するなら、Qt-3.2+が必要となります。Qt4には対応していません。
graphvizは、CentOS標準には含まれていないので、別途graphvizサイトからRPMパッケージを入手してインストールします。
ソースファイルを、Doxygen公式サイトから入手します。
ソースファイルを展開します。
work$ tar xvzf doxygen-1.5.7.1.src.tar.gz : work$ cd doxygen-1.5.7.1 doxygen-1.5.7.1$
doxygen.specファイルを、~/rpm/SPECSへコピーし、修正します。
doxygen-1.5.7.1$ cp packages/rpm/doxygen.spec ~/rpm/SPECS/
主な修正事項は、Epoch指定追加、ソースアーカイブファイル名の違い修正、以下で作成するパッチ指定、BuildPrereqの指定追加、manのディレクトリ修正です。
Makefile.in, addon/doxywizard/Makefile.in を修正し、パッチファイルを作成します。パッチファイルは~/rpm/SOURCESに置きます。
主な修正事項は、MANDIRの修正、生成ファイル一覧からconfigure.binの除去
tmake/lib/linux-g++/tmake.confを修正し、パッチファイルを作成します。パッチファイルは~/rpm/SOURCESに置きます。
主な修正事項は、最適化オプションの指定変更(RPM側で指定)、mocコマンドのパス指定です。
ソースファイルを、~/rpm/SOURCESに置きます。
これで準備が整いました。RPMパッケージを作成します。
~$ cd rpm/SPECS SPECS$ QTDIR=/usr/lib/qt-3.3 rpmbuild -ba --define "_with_doxywizard --with-doxywizard doxygen.spec : SPECS$
~rpm/RPMS/i386の下にrpmパッケージが、~rpm/SRPMSの下にソースRPMパッケージが生成されます。
C++ GUIツールキットQt 4.xを入れる ページに記述しています。
TAO1.6 Linux GCC4.1インストール記録のページにRPMパッケージを作成する手順を書きました。
CentOS 5標準のboost RPMパッケージ用のboost.specファイルや、fedora用のboost 1.36のboost.specなどを参考にして、作成しました。
boostのデフォルト設定でビルドすると、以下の問題があります。
例)libboost_date_time-gcc41-1_37.soこれは、boostを利用するアプリケーションのリンク時に、-lboost_date_time_gcc41-1_37 と長いシンボルを書かねばならず、ちょっと大変です。そこで、boostのビルドツールであるbjamのオプションに、--layout=systemを指定します。生成されるboostライブラリ・ファイルは、拡張子.soの前にバージョン番号を含みません。
例) --layout=system指定時: libboost_date_time.so、未指定時: libboost_date_time-gcc41-1_37.so
以上を反映したconfigureファイルの修正点が以下となります。
!BJAM_CONFIG="" --- !BJAM_CONFIG="-d2 --layout=system variant=release threading=single,multi debug-symbols=on"
! @echo "\$(BJAM) \$(BJAM_CONFIG) --user-config=user-config.jam \$(LIBS)" ! @\$(BJAM) \$(BJAM_CONFIG) --user-config=user-config.jam \$(LIBS) || \\ --- ! @echo "\$(BJAM) \$(BJAM_CONFIG) --user-config=user-config.jam \$(LIBS) stage" ! @\$(BJAM) \$(BJAM_CONFIG) --user-config=user-config.jam \$(LIBS) stage || \\
! SONAME_OPTION = -h ; --- ! SONAME_OPTION = -soname ; ! SONAME_VERSION = 4 ;
! "$(CONFIG_COMMAND)" -L"$(LINKPATH)" -Wl,$(RPATH_OPTION:E=-R)$(SPACE)-Wl,"$(RPATH)" "$(.IMPLIB-COMMAND)$(<[1])" -o "$(<[-1])" $(HAVE_SONAME)-Wl,$(SONAME_OPTION)$(SPACE)-Wl,$(<[-1]:D=) -shared $(START-GROUP) "$(>)" "$(LIBRARIES)" $(FINDLIBS-ST-PFX) -l$(FINDLIBS-ST) $(FINDLIBS-SA-PFX) -l$(FINDLIBS-SA) $(END-GROUP) $(OPTIONS) $(USER_OPTIONS) --- ! "$(CONFIG_COMMAND)" -L"$(LINKPATH)" -Wl,$(RPATH_OPTION:E=-R)$(SPACE)-Wl,"$(RPATH)" "$(.IMPLIB-COMMAND)$(<[1])" -o "$(<[-1])" $(HAVE_SONAME)-Wl,$(SONAME_OPTION)$(SPACE)-Wl,$(<[-1]:D=).$(SONAME_VERSION) -shared $(START-GROUP) "$(>)" "$(LIBRARIES)" $(FINDLIBS-ST-PFX) -l$(FINDLIBS-ST) $(FINDLIBS-SA-PFX) -l$(FINDLIBS-SA) $(END-GROUP) $(OPTIONS) $(USER_OPTIONS)
! flags gcc.compile OPTIONS <optimization>speed : -O3 ; --- ! flags gcc.compile OPTIONS <optimization>speed : "$RPM_OPT_FLAGS" ;
RPM pbone.netのFedora用boost-1.37.0-3.fc11.src.rpmを元に作成しました。
boost-1.37.0-3.fc11.src.rpmに含まれているパッチと内容
boost.specファイル
以下の記述は変更する必要があります。
Version: 1.37.0 Source: boost_1_37_0.tar.bz2 Patch3: boost-gcc43.patch %setup -q -n %{name}_1_37_0 %patch3 -p1
BuildRequiresにあるchrpathをインストールする必要があります。
→ [extras]、[epel]にパッケージchrpathあり。
以下URLから、STLport-5.2.1-1.el5.pp.src.rpmを取得します。
中身を展開し、rpmbuildでビルドしてパッケージが出来上がります。STLport.specファイルは特に修正不要でした。インストール先は、ヘッダーファイルが/usr/include/stlportに、ドキュメント類は/usr/share/doc/STLport-5.2.1に、ライブラリファイルは/usr/lib/libstlport* になります。
CentOSのSubversionは、1.4.2ベースですが、Ver.1.5系が欲しいときがあります。そこで、Fedora 10(開発版)からSubversion 1.5のソースRPMパッケージを持ってきてビルドし、RPMパッケージを作成します。
JPのミラーのいずれか(JAIST、RIKEN、KDDI Lab)から入手するのがよいでしょう。2008年11月15日現在、Fedora 10は正式版リリース直前なので、development/source/SRPMS の中から、subversion-1.5.4-3.src.rpmを入手します。
work$ mkdir subversion subversion$ rpm2cpio subversion-1.5.4-3.src.rpm | cpio -i : subversion$ ls filter-requires.sh subverseion-1.5.2-pie.patch psvn.el subversion-1.5.4.tar.gz subversion-0.20.1-deplibs.patch subversion.conf subversion-1.1.3-java.patch subversion.spec subversion-1.5.1-rpath.patch subversion$
CentOSとFedoraで異なる箇所があるので修正します。
1. Java開発キットのディレクトリ
-%define jdk_path /usr/lib/jvm/java +%define jdk_path /usr/java/latest
Fedora 10では、java開発キットにopen-jdkを標準搭載していますが、CentOSは、GNU GCCのGCJです。GCJはSunのJavaとの互換性が乏しいので、CentOSの場合、SunからJDKバイナリを入手してインストールします。
2. Java開発キットのパッケージ名
-BuildRequires: java-devel-openjdk +BuildRequires: jdk
1.で説明のとおり、Java開発キットのパッケージをSunのものに合わせます。
3. Perl開発キットのパッケージ
-BuildRequires: perl-devel >= 2:5.8.0, perl(ExtUtils::MakeMaker) +BuildRequires: perl >= 2:5.8.0, perl(ExtUtils::MakeMaker)
Fedora 10では、Perlのパッケージが実行用と開発用でperl、perl-devと分かれていますが、CentOSではどちらも同じ perl パッケージに入っているので修正します。
4. バージョン番号
-Release: 3 +Release: 3%{?dist}
Fedora 10のSubversionパッケージのバージョン番号は、1.5.4-3 です。一方、Red Hat Enterprise Linux/CentOS 5のsubversionパッケージは、バージョン番号が 1.4.2-2.el5 のように、el5が含まれています。そこで、subversion.specファイルのRelease: の箇所を、書き換えます。distマクロ自体は未定義なので、rpmbuildコマンドのオプションで指定します。
5. Requiresのaprバージョン
CentOS 5は、apr-1.2.x です。一方Fedora 10用のSubversionのSPECファイルには、apr >= 1.3 と書かれています。とりあえず、依存関係を1.2にしてみるか、単にaprとだけ記述して回避します。
修正した subversion.specファイルを ~/rpm/SPECS へ、それ以外の入手・展開したファイルを ~/rpm/SOURCES へコピーします。
rpmbuild コマンドでRPMパッケージを作成します。
subversion$ cd ~/rpm/SPECS SPECS$ rpmbuild -ba --define="dist .el5" subversion.spec : SPECS$
~/RPMS/i386の中に、以下パッケージが生成されます。
SPECS$ ls ../RPMS/i386 mod_dav_svn-1.5.4-3.el5.i386.rpm subversion-javahl-1.5.4-3.el5.i386.rpm subversion-1.5.4-3.el5.i386.rpm subversion-perl-1.5.4-3.el5.i386.rpm subversion-debuginfo-1.5.4-3.el5.i386.rpm subversion-ruby-1.5.4-3.el5.i386.rpm subversion-devel-1.5.4-3.el5.i386.rpm SPECS$
Fedora開発版に含まれるsubversion-1.6.1-4.fc11.src.rpmを元に、Subverion 1.6.2をビルドします。
work$ mkdir subversion subversion$ rpm2cpio subversion-1.6.1-4.fc11.src.rpm | cpio -i : subversion$ ls filter-requires.sh subversion-1.6.0-pie.patch psvn-init.el subversion-1.6.0-rpath.patch psvn.el subversion-1.6.1.tar.gz subversion-1.1.3-java.patch subversion.conf subversion-1.6.0-deplibs.patch subversion.spec subversion$
CentOSとFedoraで異なる箇所があるので修正します。なお、CentOS 5.3から、openjdkが標準搭載されるようになったので、JavaのパッケージはSunのものでなくてよくなりました。
1. Perl開発キットのパッケージ
-BuildRequires: perl-devel >= 2:5.8.0, perl(ExtUtils::MakeMaker) +BuildRequires: perl >= 2:5.8.0, perl(ExtUtils::MakeMaker)
Fedora 10では、Perlのパッケージが実行用と開発用でperl、perl-devと分かれていますが、CentOSではどちらも同じ perl パッケージに入っているので修正します。
2. バージョン番号
-Version: 1.6.1 +Version: 1.6.2 -Release: 4%{?dist} +Release: 1%{?dist}
3. BuildRequiresのaprバージョン
-BuildRequires: apr-devel >= 1.3.0, apr-util-devel >= 1.3.0 +BuildRequires: apr-devel >= 1.2.7, apr-util-devel >= 1.2.7
CentOS 5は、apr-1.2.x です。一方Fedora 11用のSubversionのSPECファイルには、1.3.0が要求されています。とりあえず、依存関係を1.2.7にしてみます。
4. Requiresのaprバージョン
-Requires: apr >= 1.3 +Requires: apr >= 1.2
これも3.と同様です。
修正した subversion.specファイルを ~/rpm/SPECS へ、それ以外の入手・展開したファイルを ~/rpm/SOURCES へコピーします。
rpmbuild コマンドでRPMパッケージを作成します。
subversion$ cd ~/rpm/SPECS SPECS$ rpmbuild -ba --define="dist .el5" subversion.spec : SPECS$
~/RPMS/i386の中に、以下パッケージが生成されます。
SPECS$ ls ../RPMS/i386 mod_dav_svn-1.6.2-1.el5.i386.rpm subversion-javahl-1.6.2-1.el5.i386.rpm subversion-1.6.2-1.el5.i386.rpm subversion-perl-1.6.2-1.el5.i386.rpm subversion-debuginfo-1.6.2-1.el5.i386.rpm subversion-ruby-1.6.2-1.el5.i386.rpm subversion-devel-1.6.2-1.el5.i386.rpm SPECS$
Fedora開発版に含まれるsubversion-1.6.11-1.fc14.src.rpmをベースにすると、configure時にエラーが出て解決できていません。
CentOS自身にはbazaarは含まれていませんが、EPEL(Extra Packages for Enterprise Linux)のパッケージで2.1.1が提供されています。しかし、Bazaarは活発に開発されており、2.1.1では少々古いので、最新版に追従するには、Fedora 12(開発版)からbzr 2.0のソースRPMパッケージを持ってきて、少々修正を行い最新版のbazaarでビルドし、RPMパッケージを作成します。
BazaarのWebサイトからダウンロードページへリンクをたどって,ソースファイルの最新版とその署名ファイルを入手します。2011/06/03時点で以下ファイルを入手しました。
★以下は古い2.0.1のRPMパッケージ手順です。(更新しないかも)
とりあえずミラーの1つRIKENからreleases/12/Everything/source/SRPMSをたどって、bzrのソースRPM最新版を入手しました。
work$ mkdir bzr bzr$ rpm2cpio bzr-2.0.1-1.fc12.src.rpm | cpio -i : bzr$ ls bzr-2.0.1.tar.gz bzr-2.0.1.tar.gz.sig bzr.spec bzr$ cp bzr.spec ~/rpm/SPECS
@@ -7,7 +7,7 @@ # bzrrc: release candidate version, if any, line starts with % for rc, # for stable releas (no %). # release: rpm subrelease (0.N for rc candidates, N for stable releases) %define bzrmajor 2.0 -%define bzrminor .1 +%define bzrminor .3 #define bzrrc rc2 %define release 1
bzr$ cp bzr-2.0.3.tar.gz* ~/rpm/SOURCES bzr$ cd ~/rpm/SPECS SPECS$ rpmbuild -ba bzr.spec : SPECS$
なお、rpmbuild時に以下パッケージが必要になります。
パッケージ名 | 入手リポジトリ |
python-elementtree | CentOS標準 |
python-paramiko | EPEL |
python-pycurl | EPEL |
work$ mkdir bzrtools bzrtools$ rpm2cpio bzrtools-2.0.1-1.fc12.src.rpm | cpio -i : bzrtools$ ls bzrtools-2.0.1.tar.gz bzrtools-2.0.1.tar.gz.sig bzrtools.spec bzrtools$ cp bzrtools-2.0.1.tar.gz* ~/rpm/SOURCES bzrtools$ cp bzrtools.spec ~/rpm/SPECS bzrtools$ cd ~/rpm/SPECS SPECS$ rpmbuild -ba bzrtools.spec : SPECS$
work$ mkdir bzr-gtk bzr-gkt$ rpm2cpio bzrtools-2.0.0-1.fc12.src.rpm | cpio -i : bzr-gkt$ ls bzr-gtk-0.97.0.tar.gz bzr-gtk-el5-encoding.patch bzr-gtk-desktop-version.patch bzr-gtk.spec bzr-gtk-disable-nautilus-pull.patch bzr-gkt$ mv bzr-gtk.spec ~/rpm/SPECS bzr-gkt$ cp * ~/rpm/SOURCES bzr-gkt$
bzr-gtkパッケージをCentOS 5(python 2.4)で動かすには、SPECファイルおよびソースの修正(パッチ)を作成する必要がありました。
bzr-gkt$ cd ~/rpm/SPECS SPECS$ rpmbuild -ba bzr-gtk.spec : SPECS$
olive-gtk.desktopに必須のEncoding指定行がないため、これをパッチで追加
python 2.4では、xml.etree.ElementTreeパッケージがなく(これはpython 2.5の標準)、python-lxmlパッケージで提供のlxml.etreeを使用するようにdiff.pyを修正するパッチを追加
"A GNU arbitrary precision library"
GCC-4.3.2をビルドする際、前提として必要なライブラリの1つです。CentOS 5には、gmp-4.1.4がインストールされていますが、CentOSには含まれないmpfrライブラリを入れるにあたり、バージョンアップしておきたく更新します。
Fedora用のソースRPMパッケージを入手し、そのままrpmbuildコマンドでバイナリRPMを生成しインストールしました。
Fedoraミラーサイトのfedora/releases/10/Fedora/source/SRPMS より、gmp-4.2.2-8.fc10.src.rpmを入手
work$ rpmbuild --rebuild gmp-4.2.2-8.fc10.src.rpm : work$
エラーなく、RPMディレクトリ(~/rpm)のRPMS/i386に、gpm-4.2.2-8.i386.rpmとgpm-devel-4.2.2-8.i386.rpmができたら、インストールします。
# cd ~/rpm/RPMS/i386 # rpm -Uvh gmp-4.2.2-8.i386.rpm gmp-devel-4.2.2-8.i386.rpm : #
CentOSには、古いバージョンのgmpとgmp-develパッケージが入っているので、同時に2つを更新します。
"A C library for multiple-precision floating-point computations"
GCC-4.3.2をビルドする際、前提として必要なライブラリの1つです。CentOS 5にはパッケージが用意されていないので、Fedora用のソースRPMパッケージから生成します。
Fedora用のソースRPMパッケージを入手し、そのままrpmbuildコマンドでバイナリRPMを生成しインストールしました。
Fedoraミラーサイトのfedora/releases/10/Fedora/source/SRPMS より、mpfr-2.3.2-1.fc10.src.rpmを入手
work$ rpmbuild --rebuild mpfr-2.3.2-1.fc10.src.rpm : work$
エラーなく、RPMディレクトリ(~/rpm)のRPMS/i386に、mpfr-2.3.2-1.i386.rpmとmpfr-devel-2.3.2-1.i386.rpmができたら、インストールします。
# cd ~/rpm/RPMS/i386 # rpm -ivh mpfr-2.3.2-1.i386.rpm mpfr-devel-2.3.2-1.i386.rpm : #
CentOS 5.xのrubyは、Ver.1.8.5なので、1.8.7系を入れることにしてみます。Fedoraの最新版からパッケージを流用して作成します。
2011年06月03日現在、1.8.7系列は、p334が最新版ですが、configure時に、マシンのautoconfバージョン2.60以上を要求するので、断念。
まず、Fedoraミラーサイトのfedora/updates/12/SRPMS より、ruby-1.8.6.399-6.fc12.src.rpmを入手
work$ mkdir ruby-1.8.6.399-6.fc12 work$ cd ruby-1.8.6.399-6.fc12 ruby-1.8.6.399-6.fc12$ rpm2cpio /tmp/ruby-1.8.6.369-3.fc12.rpm | cpio -i 16601 blocks ruby-1.8.6.399-6.fc12$ mv ruby.spec ~/rpm/SPECS ruby-1.8.6.399-6.fc12$ mv * ~/rpm/SOURCES ruby-1.8.6.399-6.fc12$ cp /tmp/ruby-1.8.7-p299.tar.bz2 ~/rpm/SOURCES ruby-1.8.6.399-6.fc12$
以下の修正をします。なお、修正後のruby.spec ファイルはここです。
バージョン番号を修正します。
-%define rubyver 1.8.6 -%define _patchlevel 369 +%define rubyver 1.8.7 +%define _patchlevel 299 -Release: 3%{?dist} +Release: 1%{?dist}
1.8.6へのパッチは、1.8.7では適用できないものがあるので、適用に失敗したパッチを削除します。
-Patch1: ruby-deadcode.patch -Patch20: ruby-rubyprefix.patch -Patch21: ruby-deprecated-sitelib-search-path.patch -Patch30: ruby-openssl-1.0.patch -%patch1 -p1 -%patch20 -p1 -%patch21 -p1 -%patch30 -p2
rpmbuild コマンドでRPMパッケージを作成します。
~$ cd ~/rpm/SPECS SPECS$ rpmbuild -ba ruby.spec : SPECS$
~/RPMS/i386の中に、以下パッケージが生成されます。
SPECS$ cd ../RPMS/i386 i386$ ls ruby-1.8.7.299-1.i386.rpm ruby-libs-1.8.7.299-1.i386.rpm ruby-debuginfo-1.8.7.299-1.i386.rpm ruby-mode-1.8.7.299-1.i386.rpm ruby-devel-1.8.7.299-1.i386.rpm ruby-rdoc-1.8.7.299-1.i386.rpm ruby-docs-1.8.7.299-1.i386.rpm ruby-ri-1.8.7.299-1.i386.rpm ruby-irb-1.8.7.299-1.i386.rpm ruby-tcltk-1.8.7.299-1.i386.rpm i386$
Redmine 1.2.xで使用されるRuby On Rails 2.3.11は、rackライブラリ(ver.1.1.x)を必要とします。rackは、様々なWebサーバ(Apache/WEBrick/Mongrelなど)をラッピングする共通インタフェースです。
この手順で作成したRPMパッケージ rubygem-rack-1.1.0-2.noarch.rpm
EPELから入手できるrackはバージョンが0.4と古いので、別途作成します。
EPELより、rubygem-test-specをインストールしておきます。
まず、Fedoraミラーサイトのfedora/updates/14/SRPMS/ より、rubygem-rack-1.1.0-2.fc14.src.rpm を入手
work$ mkdir rubygem-rack-1.1.0-2.fc14 work$ cd rubygem-rack-1.1.0-2.fc14 rubygem-rack-1.1.0-2.fc14$ rpm2cpio /tmp/rubygem-rack-1.1.0-2.fc14.src.rpm | cpio i 213 blocks rubygem-rack-1.1.0-2.fc14$ mv rubygem-rack.spec ~/rpm/SPECS rubygem-rack-1.1.0-2.fc14$ mv rack-1.1.0.gem ~/rpm/SOURCES
rpmbuild コマンドでRPMパッケージを作成します。
~$ cd ~/rpm/SPECS SPECS$ rpmbuild -ba rubygem-rack.spec : SPECS$
~/RPMS/noarchの中に、以下パッケージが生成されます。
SPECS$ cd ../RPMS/noarch noarch$ ls rubygem-rack-1.1.0-2.noarch.rpm noarch$
rubygemsパッケージは、rubyのライブラリを管理するツールです。CentOS 5には標準では搭載されておらず、EPELからrubygems-1.3.1が提供されています。
最近のrubyライブラリで、rubygems-1.3.5以上を要求するものがあったため、新しいrubygemsを作ります。
この手順で作成したRPMパッケージ rubygems-1.3.7-2.noarch.rpm
まず、Fedoraミラーサイトのfedora/releases/14/Everything/source/SRPMS より、rubygems-1.3.7-2.fc14.src.rpm を入手
work$ mkdir rubygems-1.3.7-2.fc14 work$ cd rubygems-1.3.7-2.fc14 rubygems-1.3.7-2.fc14$ rpm2cpio /tmp/rubygems-1.3.7-2.fc14.src.rpm | cpio i 585 blocks rubygems-1.3.7-2.fc14$ mv rubygems.spec ~/rpm/SPECS/ rubygems-1.3.7-2.fc14$ mv rubygems-* ~/rpm/SOURCES/ rubygems-1.3.7-2.fc14$ cd ~/rpm/SPECS/ ~/rpm/SPECS$ rpmbuild -ba rubygems.spec : ~/rpm/SPECS$
~/RPMS/noarchの中に、以下パッケージが生成されます。
SPECS$ cd ../RPMS/noarch noarch$ ls rubygems-1.3.7-2.noarch.rpm noarch$
CentOS 5には標準では搭載されてないので、Fedoraよりソースパッケージを入手しビルドします。
この手順で作成したRPMパッケージ rubygem-i18n-0.4.2-2.noarch.rpm
まず、Fedoraミラーサイトのfedora/releases/14/Everything/source/SRPMS より、rubygem-i18n-0.4.2-2.fc14.src.rpm を入手します。
work$ mkdir rubygem-i18n-0.4.2-2.fc14 work$ cd rubygem-i18n-0.4.2-2.fc14 rubygem-i18n-0.4.2-2.fc14$ rpm2cpio /tmp/rubygem-i18n-0.4.2-2.fc14.src.rpm | cpio i 77 blocks rubygem-i18n-0.4.2-2.fc14$ mv rubygem-i18n.spec ~/rpm/SPECS rubygem-i18n-0.4.2-2.fc14$ mv i18n-0.4.2.gem ~/rpm/SOURCES rubygem-i18n-0.4.2-2.fc14$ cd ~/rpm/SPECS/ SPECS$ rpmbuild -ba rubygem-i18n.spec : SPECS$
~/RPMS/noarchの中に、以下パッケージが生成されます。
SPECS$ cd ../RPMS/noarch noarch$ ls rubygem-i18n-0.4.2-2.noarch.rpm noarch$
CentOS 5.xには、Xerces C++ ライブラリは含まれていませんが、Fedora EPELリポジトリに、xerces-c-2.7.0-7.el5.i386.rpm他が提供されています。
しかし、Xerces C++の方は2009/6/13現在、Ver.3.0.1がリリースされているので、ここではVer.3.0.1のパッケージを作成します。
まず、EPELのミラーサイトから、xerces-2.7.0-7.el5.src.rpmを入手し、Xerces C++ 3.0では、生成するバイナリ、他に違いがあるので、SPECファイルを取り出し、これをベースに修正します。
まず、バージョン・リリース番号を修正します。
-Version: 2.7.0 -Release: 7%{?dist} +Version: 3.0.1 +Release: 1%{?dist}
ソースアーカイブURLを修正します。
-Source: http://www.apache.org/dist/xml/xerces-c/source/xerces-c-src_2_7_0.tar.gz +Source: http://www.apache.org/dist/xml/xerces-c/source/xerces-c-3.0.1.tar.gz
prepセクションは完全に見直しました。
-%setup -q -n xerces-c-src_2_7_0 -rm -rf doc/html/resources/.svn -find ./doc -type f -perm 755 -exec chmod 644 {} \; -find ./samples -type f -perm 755 -exec chmod 644 {} \; -%{__perl} -pi.orig -e 's|(PREFIX.)/lib\b|$1/%{_lib}|g' src/xercesc/configure */Makefile.in +%setup -q
2.7.0では、アーカイブ中にバージョン管理用ディレクトリが混入していたり、ファイルパーミッションが好ましくない指定になっていたようです。3.0.1では、そのようなものはないので、ばっさり削除しています。また、アーカイブ名とディレクトリ名も3.0.1では標準的な命名規約に合わせてきているので、%setupでは明示的にディレクトリを指定しなくてもよくなりました。
buildセクションも修正しています。ここは変更が多いので、最終形を示します。
%build %configure %{__make}
2.7.0のときは、Makefile内を置換したりスクリプトを実行したりしていましたが、3.0.1ではごく標準的にconfigure/makeを実行するだけです。
installセクションも修正しています。
%install -%{__rm} -rf $RPM_BUILD_ROOT -export XERCESCROOT="$PWD" -%{__make} install -C src/xercesc DESTDIR="$RPM_BUILD_ROOT" +%{__make} install DESTDIR=$RPM_BUILD_ROOT
filesセクションは以下の修正となります。
%files %defattr(-,root,root,-) -%doc LICENSE.txt -%{_libdir}/libxerces*.so.* +%doc +%{_libdir}/libxerces*.so +%{_libdir}/pkgconfig/xerces-c.pc %files devel %defattr(-,root,root,-) -%{_libdir}/libxerces*.so +%{_libdir}/libxerces*.a %defattr(-,root,root,-) -%{_libdir}/libxerces*.so +%{_libdir}/libxerces*.a +%{_libdir}/libxerces*.la %{_includedir}/xercesc/ +%{_bindir}/* %files doc %defattr(-,root,root,-) -%doc Readme.html LICENSE NOTICE STATUS credits.txt doc samples +%doc CREDITS LICENSE NOTICE doc samples
gtagsを使います。globalは、Fedora には含まれていますが、EPELにはないため、今回はゼロからspecファイルを作成してRPMパッケージを作成します。
上記Webページから、Downloadを辿ってglobalのソースコードを入手します。
2009/6/14現在、global-5.7.5.tar.gzが最新版です。
まず、RPMパッケージ化するには、configure/make/仮ディレクトリへmake install が出来ることを確認します。
work$ tar xzf global-5.7.5.tar.gz work$ cd global-5.7.5 global-5.7.5$ ./configure : global-5.7.5$ make : global-5.7.5$ make install DESTDIR=/tmp/global : global-5.7.5$ tree /tmp/global /tmp/global `-- usr `-- local |-- bin | |-- global : : : | `-- htags `-- share |-- gtags | |-- AUTHORS : : : | |-- gtags.vim | |-- icons | | |-- back.png : : : : | | `-- top.png | `-- style.css |-- info | |-- dir | `-- global.info `-- man `-- man1 |-- global.1 : : `-- htags.1 9 directories, 54 files global-5.7.5$
これで、/tmp/globalの下に、usr/local/xxx と生成されました。大丈夫そうです。
~/rpm/SPECS/の下に、global.specを新規作成します。
global.specのイントロダクション・セクション
Name: global Version: 5.7.5 Release: 1%{?dist} Summary: Source code tag system Group: Development/Tools License: GPLv3, GPLv2, LGPLv2, BSD URL: http://www.gnu.org/software/global/ Source0: http://tamacom.com/global/%{name}-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
Releaseの1%{?dist}は、SPECファイルを初回作成したときは1から始めます。{%?dist}は、rpmbuildのオプションで追加文字を指定可能にする定義です。(例:el5 など)
Summaryは、tarボールのREADMEから説明文中の要約句を抜粋しました。
Groupは、/usr/share/doc/rpm-4.4.2.3/GROUPSの中に列挙されているものから最も近そうなものを選び記述しました。
Licenseは、tarボールのLICENSEから読み取りました。globalの場合、global自身はGPLv3でしたが、内部で使用している他のソフトウェアのライセンスがあるため、それらを列挙しています。
URLは、globalのプロジェクトWebページのURLを、Source0は、ダウンロードしたglobalのソースtarボールのURLを記載しました。
BuildRootは、実はEmacsでspecファイルを新規にオープンするとRPM-SPECモードの機能で自動で生成される雛形のままです。あまり気にしていませんが、rpmbuild時に使用する/var/tmp/下の一時作業用の適当な場所を記述します。
global.specのデスクリプション・セクション
%description GNU GLOBAL is a source code tag system that works the same way across diverse environments. It supports C, C++, Yacc, Java, PHP4 and assembly source code.
tarボールのREADMEから抜粋しました。
global.specのprepセクション
%prep %setup -q
これも、EmacsのRPM-SPECモードで自動生成されたもので、一般的規約で作成されたtarボールであればこのままです。
global.specのbuildセクション
%build %configure make %{?_smp_mflags}
これも、EmacsのRPM-SPECモードで自動生成されたもので、一般的規約で作成されたtarボールであればこのままです。
global.specのinstallセクション
%install rm -rf $RPM_BUILD_ROOT make install DESTDIR=$RPM_BUILD_ROOT rm -f $RPM_BUILD_ROOT%{_infodir}/dir # install emacs lisp package for emacs and xemacs for f in emacs/site-lisp xemacs/site-packages/lisp; do install -m 755 -d $RPM_BUILD_ROOT%{_datadir}/$f install -m 644 gtags.el $RPM_BUILD_ROOT%{_datadir}/$f done
前半は、EmacsのRPM-SPECモードで自動生成されたもので、一般的規約で作成されたtarボールであればこのままです。
中間のrmは、make install時に、install-infoでdirファイルへの追加が行われるが、このmake installは仮ディレクトリで実施していたので、info/dirが生成されてしまったものを削除している。make installの処理の中で、install-infoを実行してdirに内容を追記するものは、%installセクションでいったん削除し、後の%postセクションでinstall-infoを実行するように記述する。
後半のemacsパッケージのインストールは、global.elをシステムにインストールされているemacsおよびxemacsのパッケージディレクトリにコピーするものです。
global.specのcleanセクション
%clean rm -rf $RPM_BUILD_ROOT
これも、EmacsのRPM-SPECモードで自動生成されたもので、一般的規約で作成されたtarボールであればこのままです。
global.specのpostセクション
%post /sbin/install-info %{_infodir}/%{name}.info %{_infodir}/dir 2>/dev/null || :
global.specのpreunセクション
%preun if [ $1 -eq 0 ]; then /sbin/install-info --delete %{_infodir}/%{name}.info %{_infodir}/dir 2>/dev/null || : fi
global.specのfilesセクション
%files %defattr(-,root,root,-) %doc AUTHORS COPYING COPYING.LIB FAQ LICENSE README THANKS %{_bindir}/* %{_infodir}/* %{_mandir}/man*/* %{_datadir}/gtags %{_datadir}/emacs/site-lisp/gtags.el %{_datadir}/xemacs/site-packages/lisp/gtags.el
ライセンスファイル等をdocとして宣言しています。
globalは、ビルド・インストールによって生成されるディレクトリをそれぞれ指定しています。
global.specのchangelogセクション
%changelog * Sun Jun 14 2009 Toru Takahashi <torutk@gmail.com> - 5.7.5-1 - First RHEL5 release
とりあえず作成年月日、作成者氏名とメールアドレス、内容を記述します。
Qt 4.5.1のRPMビルドをする際、fedora 12のsrc.rpmを持ってきたらBuildRequiredに指定されていたGraphicsMagickです。ImageMagickから分派したものとのことです。
上記プロジェクトのURLから、Downloadを辿り、linuxを辿り、src.rpmをダウンロードします。
rpmbuildコマンドでリビルドします。
$ rpmbuild --rebuild GraphicsMagick-1.3.5-1.src.rpm : $ cd ~/rpm/RPMS/i386 $ ls GraphicsMagick* GraphicsMagick-1.3.5-1.i386.rpm GraphicsMagick-c++-1.3.5-1.i386.rpm GraphicsMagick-c++-devel-1.3.5-1.i386.rpm GraphicsMagick-debuginfo-1.3.5-1.i386.rpm GraphicsMagick-devel-1.3.5-1.i386.rpm GraphicsMagick-perl-1.3.5-1.i386.rpm $
Vine Linuxの標準フォントとして有名なVLゴシックフォントをCentOSでも利用したいと思い、RPMパッケージを作成します。
既にFedora用のRPMパッケージがあるので、これをそのままインストールしても問題ないようです。(ディレクトリ構成等は一緒のようです)
一応、Fedora用のソースRPMパッケージを入手し、中に含まれるspecファイル等を抜き出して、自前のRPMパッケージを作成した手順を以下に記述します。
VLGothic-20081029.tar.bz2
VLGothic-fonts-20080908-1.fc10.src.rpmを入手し、中身を抜き出します。
work$ rpm2cpio VLGothic-fonts-20080908-1.fc10.src.rpm | cpio -i : work$ ls 59-VLGothic-monospace.conf 59-VLGothic-proportional.conf VLGothic-fonts.spec : work$
59-VLGothic-* を、~/rpm/SOURCESにコピーします。
VLGothic-fonts.specを、~/rpm/SPECSにコピーします。
VLGothic-fonts.specを修正します。VLゴシックフォントの最新バージョンに名前を変更します。
! Version: 20081029
~$ cd rpm/SPECS SPECS$ rpmbuild -ba VLGothic-fonts.spec : SPECS$ ls ~/rpm/RPMS/noarch VLGothic-fonts-20081029-1.noarch.rpm VLGothic-fonts-proportional-20081029-1.noarch.rpm SPECS$ ls ~/rpm/SRPMS VLGothic-fonts-20081029-1.src.rpm SPECS$
CentOS 5のemacsは、少々古いemacs-21です。他のXアプリケーションとコピー&ペーストができない等制約があるので、emacs 22を入れることにします。
Fedora 9では、emacs-22.2が標準となっていて、RPMバイナリパッケージが存在します。このRPMバイナリパッケージをそのままインストールする方法でもいけそうですが、CentOS 5とFedora9とでは、コンパイラのバージョン等の差異があるので、念のためRPMソースパッケージを入手してCentOS上でビルドします。
~$ rpmbuild --rebuild emacs-22.2-5.fc9.src.rpm : ~$
以下パッケージが生成されます。
emacs-22.2-5.i386.rpm emacs-el-22.2-5.i386.rpm emacs-common-22.2-5.i386.rpm emacs-nox-22.2-5.i386.rpm emacs-debuginfo-22.2-5.i386.rpm
Fedora 10には、apel 10.7がRPMパッケージとして用意されています。Fedora 10 はEmacs 22なので、emacs-22用にapelを使用するので、バイナリを利用します。
~$ rpm -ivh apel-10.7-2.fc10.noarch.rpm : ~$
/usr/share/emacs/site-lisp/apel下にインストールされます。
Fedora 10には、ddskk 12.2.0がRPMパッケージとして用意されています。
~$ rpm -ivh ddskk-12.2.0-11.fc7.noarch.rpm : ~$
/usr/share/emacs/site-lisp/ddskk下にEmacs Lisp群がインストールされます。
/usr/share/skkの下にチュートリアル(skk.tut)がインストールされます。
Fedora 10には、skkdic 20080904がRPMパッケージとして用意されています。
~$ rpm -ivh skkdic-20080904-1.fc10.noarch.rpm : ~$
/usr/share/skkの下に辞書ファイル(SKK-JISYO.L他)がインストールされます。
sqliteのWebサイトから、ソースtarballをダウンロードします。
Fedora 10からsqlite-3.5.9-4.fc10.src.rpmを入手します。この中からsqlite.specファイルを抜き出し、必要な修正を加えてrpmbuildすることにします。
Fedoraは、Red Hat Enterprise Linuxの元となっているディストリビューションなので、比較的パッケージ構成が近く、SPECファイルの流用もむずかしくありません。しかしながら、違いもあり、その違いを知っておくことはSPECファイル流用のポイントの一つです。
Fedora用パッケージとRHEL/CentOSでは、パッケージ構成が多少異なるものがあります。BuildRequiresなどに記述されている場合、修正が必要になります。
Fedoraパッケージ | RHEL/CentOSパッケージ | 備考 |
---|---|---|
perl-devel |
perl |
perlに開発用ファイルも含んでいる |
xorg-x11-devel |
libX11-devel |
名前の違い |
xorg-x11-Mesa-libGL |
mesa-libGL |
名前の違い |
xorg-x11-Mesa-libGLU |
mesa-libGLU |
名前の違い |
新しめのFedora(fc12のupdateあたりからか)用のソースRPMをCentOS 5でrpmbuild --rebuildしようとすると、以下のエラーが出ることがあります。
work$ rpmbuild --rebuild rubygems-1.3.7-2.fc14.src.rpm rubygems-1.3.7-2.fc14.src.rpm をインストール中です。 警告: InstallSourcePackage: ヘッダ V3 RSA/SHA256 signature: NOKEY, key ID 97a1071f 警告: ユーザ mockbuild は存在しません - root を使用します 警告: グループ mockbuild は存在しません - root を使用します エラー: アーカイブの伸長に失敗: ファイル /home/torutk/rpm/SOURCES/rubygems-1.3.7-noarch-gemdir.patch;4d7dd329: cpio: MD5 チェックサムが適合しません。 エラー: rubygems-1.3.7-2.fc14.src.rpm をインストールできません。 work$
そこで、src.rpmをcpio経由で展開し、SPECS、SOURCESに必要なファイルをコピーして、通常のrpmbuildを行います。
CentOS(というかRed Hat Enterprise Linux)のパッケージには、el5 が含まれています。
subversion-1.4.2-2.el5.i386.rpm
subversion.specファイルには、バージョン番号関係の定義が以下のように記述されています。
Name: subversion Version: 1.4.2 Release: 2%{?dist}
しかし、普通にrpmbuildすると、マクロdistは未定義なので、生成されるパッケージは、subversion-1.4.2-2.i386.rpmとなります。
そこで、rpmbuildのコマンドラインオプションでdistを定義します。
$ rpmbuild -ba --define 'dist .el5' subversion.spec
# wget http://dag.wieers.com/packages/RPM-PGP-KEY.dag.txt # rpm --import RPM-GPG-KEY.dag.txt # rpm -Uhv http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
/etc/yum.repos.d/Alcance.repoを新規作成
[AL-cance] name=Alcance Libre RedHat Enterprise 5 Repository baseurl=http://www.alcancelibre.org/al/el/5/ gpgkey=http://www.alcancelibre.org/al/AL-RPM-KEY
コマンド実行
# wget http://www.alcancelibre.org/al/AL-RPM-KEY # rpm --import AL-RPM-KEY #
例えば、Epochが設定されたパッケージとEpochが未設定のパッケージは、Epochが未設定のときは0として扱われ、Epochに1以上が設定されたパッケージより「古い」と認識されます。
この場合、Epoch未設定のパッケージがyumで一覧しても出てこない、といった問題が生じます。
Epochを設定して再度パッケージを作り直したり、名前を変えたりするのがいいのですが、それが出来ないときの回避策として、yumコマンドのオプション --disablerepo=* --enablerepo=xxx のように、特定のサイトだけ指定します。
# yum --disablerepo=* --enablerepo=torutk install doxygen #
GUIツールのパッケージマネージャ([アプリケーション]メニュー→[ソフトウェアの追加/削除]で起動)を使う場合、[一覧]タブではyum同様に隠されてしまいますが、[検索]タブでパッケージ名を指定すると、同名の別バージョンのファイルも複数検索結果の表示に表われるので、選択してインストールすることが出来ます。