yum でソースコードをダウンロードしたい

yumリポジトリからソースファイルをダウンロードするには − @IT

標準のyumコマンドには、ソースのRPM(SRPM)ファイルをダウンロードする機能がない。

らしい…。先に教えてください…。
どうりで man yum で探しても見つからないわけだな。source とかキーワードにして探してたよ…。


ダウンロードできるようにするためには yum-utils パッケージが必要なので、まずインストール。

# yum install yum-utils

そして、yumdownloaderコマンドに --sourceオプションを付けて実行すればパッケージ(拡張子.src.rpm)をダウンロードできる。

# yumdownloader --source パッケージ名


試しに、lsコマンドが含まれるパッケージを yumdownloader でダウンロードしてみる。
まず ls がどのパッケージに含まれるか調べる。

# rpm -qf /bin/ls
coreutils-6.9-3.fc7

カレントディレクトリにダウンロード。

# yumdownloader --source coreutils-6.9-3.fc7

展開(解凍)用のディレクトリを作っておく

% mkdir fedora_coreutils

カレントディレクトリに展開。大量のファイルが展開されるので注意。(参考:@IT:RPMパッケージからファイルを取り出すには

% rpm2cpio ../coreutils-6.9-9.fc7.src.rpm| cpio -id

ls.c の入ってるディレクトリを展開して、そこに移動。

% tar -jxf coreutils-6.9.tar.bz2
% cd coreutils-6.9/src

RPMファイルの解凍をもっと簡単にする

RPMファイルの解凍がめんどくさいなと思って調べたら、もっと簡単な方法があった。(参考:RPMパッケージを展開するには − @IT
必要なパッケージをインストール。

% sudo yum install rpmdevtools

RPM ファイルの展開。パッケージ名と同じ名前のディレクトリ内に展開してくれるので、新しくディレクトリを作らなくて済む。

% rpmdev-extract coreutils-6.9-9.fc7.src.rpm

yum でインストールされたファイルの一覧を検索したい

「yum install パッケージ名」でインストールするのは楽だけど、どこに何のファイルがあるか分からないと困るときがある(設定ファイルを編集したいときとか)。もちろん、ごり押しで find を使って探す方法もあるけど、別のもっと賢い方法を見つけたのでメモしておく。


あまり良い例じゃないけど、例えば、ls が入ってるパッケージって coreutils だっけ?っていうときに、

% rpm -ql coreutils | grep -E '*/ls'
/bin/ls
/usr/share/man/man1/ls.1.gz

とすれば、確かめられる。


もっと現実的にありそうな場合だと、「Samba ずっと前に yum でインストールしたけど、設定ファイルの smb.conf ってどこにあるんだろう?」っていうときに

% rpm -ql samba | grep smb.conf
/usr/share/doc/samba-3.0.26a/LDAP/smbldap-tools-0.9.2/smb.conf

とすれば、確かめられて便利かも。