2011年11月10日木曜日

ソースの入手と再ビルド ~ CentOS / Scientific Linux 編

お疲れ様です、サイオス 那賀です。

今どき組み込み系でもない限り、ほとんどの Linux ディストリビューションは高度なパッケージ管理機能(メタ・パッケージ管理機能)を備えており、ネットワーク上からパッケージを入手して、依存関係を解決しつつインストールやアップデートをできるようになっています。代表的なツールとしては、Red Hat 系の RPM パッケージ用の up2date, Yum や、Debian 系の deb パッケージに対する apt, Aptitude などであり、みなさんも日常的にご利用だと思います。

しかし残念なことに、せっかくのそれらの機能を、コンパイル済みのバイナリを入手するためにしか使っていない方が多いようです。せっかくのオープンソース OS 環境なのですから、ソースの入手・展開をしての解析、設定を変更しての再構築も容易になっていることを、もっと知ってもらいたいと思います。

まずはパッケージの入手です。yum-utils パッケージに含まれる yum-downloader コマンドを使うと、現在有効になっているレポジトリの "base" 等の名前に後ろに "-source" をつけたレポジトリを一時的に有効にし、ソース・パッケージを入手してきてくれます。

[root@co5v ~]# yum install -y yum-utils
(中略)
[root@co5v ~]#

下記の設定の追加は、CentOS 5 で必要です。Scientific Linux では最初から有効になっています。

[root@co5v ~] cat <<'EOF' > /etc/yum.repos.d/CentOS-Source.repo
[base-source]
name=CentOS-$releasever - Base Source Packages
baseurl=http://mirror.centos.org/centos/$releasever/os/SRPMS/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-$releasever

[updates-source]
name=CentOS-$releasever - Updates Source Packages
baseurl=http://mirror.centos.org/centos/$releasever/updates/SRPMS/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-$releasever
EOF
[root@co5v ~]#

以上で行け…るはずだったんですが、あれ? CentOS 5 で、書き置きの readme 一つを残して、ミラーレポジトリから SRPM が軒並み片付けられてしまっていますね。弱っちゃうな。では指示の通りに、かわりに以下を指定しましょう。バージョン (5.7) を直指定していますので、環境に合わせて変更してください。

[root@co5v ~] cat <<'EOF' > /etc/yum.repos.d/CentOS-Source.repo
[base-source]
name=CentOS-$releasever - Base Source Packages
baseurl=http://vault.centos.org/5.7/os/SRPMS/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-$releasever
[root@co5kdev ~]# 

試しに "which" パッケージのビルドをするために、ビルド時に依存するものを入れておきます。yum-builddep コマンドを使います。

[root@co5kdev ~]# yum-builddep -y which
(中略)
[root@co5kdev ~]# 

ようやく、ダウンロード & ビルドです。

[nonpriv@co5kdev ~]$ yumdownloader --source which
(中略)
[nonpriv@co5kdev ~]$ mkdir -p ~/rpm/{SOURCES,BUILD,SRPMS,RPMS}
[nonpriv@co5kdev ~]$ echo "%_topdir $HOME/rpm" > ~/.rpmmacros
[nonpriv@co5kdev ~]$ rpm -i which-2.16-7.src.rpm
[nonpriv@co5kdev ~]$ cd rpm/SPECS/
[nonpriv@co5kdev SPECS]$ rpmbuild -ba which.spec
(中略)
伸張ファイルの検査中: /usr/lib/rpm/check-files /var/tmp/which-2.16-7-root
書き込み完了: /home/nonpriv/rpm/SRPMS/which-2.16-7.src.rpm
書き込み完了: /home/nonpriv/rpm/RPMS/x86_64/which-2.16-7.x86_64.rpm
実行中(%clean): /bin/sh -e /var/tmp/rpm-tmp.38918
+ umask 022
+ cd /home/nonpriv/rpm/BUILD
+ cd which-2.16
+ rm -rf /var/tmp/which-2.16-7-root
+ exit 0
[nonpriv@co5kdev SPECS]

じゃんじゃんソースを入手して、SPEC をいじったりソースを読んだりしましょう。

0 件のコメント:

コメントを投稿