Help us understand the problem. What is going on with this article?

Red Hat 系 Linux で任意パッケージのソースコードを取得する方法

タイトルのとおりです 1

RHEL、CentOS、Fedora といった RedHat 系ディストリビューション環境で任意のパッケージのソースコードを取得するための方法を記載しています。

なお本稿では dmesg のパッケージである util-linux のソースコードを取得するまでを一例として挙げています。

検証環境

[root@hst ~]# uname -r
4.18.11-200.fc28.x86_64

[root@hst ~]# cat /etc/fedora-release 
Fedora release 28 (Twenty Eight)

上記のとおり、検証環境は Fedora ですが、以降の手順は RHEL や CentOS でも使えるはずです。ただし、RHEL, CentOS, Fedora(21以前)の標準のパッケージマネージャは dnf ではなく yum なので、その点は注意です(具体的なコマンドは併せて載せています)。

1 ソースコードの取得方法

主な流れは次のとおりです。

  • 確認したいコマンドのパッケージ名を確認
  • 確認したパッケージのソースパッケージをダウンロード
  • ソースパッケージからソースファイルを抽出

※ソースパッケージには、ビルドに必要なファイルなどソースファイル以外も含まれています。

1-1 事前準備

はじめに必要なコマンドのパッケージをインストールします。

// Fedora(22以降)の場合
[root@hst ~]# dnf install rpmdevtools

// RHEL, CentOS, Fedora(21以前)の場合
[root@hst ~]# yum install rpmdevtools yum-utils

次に実装を確認したいコマンドのパッケージ名を確認します(本稿では dmesg コマンドが対象)。

[root@hst ~]# rpm -qf $(which --skip-alias dmesg)
util-linux-2.32-2.fc28.x86_64

※ .fc28.x86_64 はご使用の環境により変化します。

作業用のディレクトリを作成します(適宜)。以降は、ここで作業するものとします。

[root@hst ~]# mkdir work && cd work

1-2 手順

事前準備で確認したパッケージのソースパッケージをダウンロードします。

// Fedora(22以降)の場合
[root@hst work]# dnf download --source util-linux-2.32-2.fc28.x86_64

// RHEL, CentOS, Fedora(21以前)の場合
[root@hst work]# yumdownloader --source util-linux-x.xx-x.xxx

カレントディレクトリに src.rpm ファイルがダウンロードされます。

[root@hst work]# ls
util-linux-2.32-2.fc28.src.rpm

ダウンロードしたソースパッケージからソースファイル群を抽出します。

[root@hst work]# rpmdev-extract util-linux-2.32-2.fc28.src.rpm

カレントディレクトリに util-linux-2.32-2.fc28.src というディレクトリが生成されますので、その中にある tar ファイルを解凍します。

[root@hst work]# cd util-linux-2.32-2.fc28.src
[root@hst util-linux-2.32-2.fc28.src]# tar xvf util-linux-2.32.tar.xz

解凍すると、ディレクトリ(util-linux-2.32)の中にソースファイルが展開されます。

[root@hst util-linux-2.32-2.fc28.src]# ls -l util-linux-2.32
total 2488
-rw-r--r--. 1 hp-spectre13 hp-spectre13   93787 Mar 21  2018 ABOUT-NLS
-rw-rw-r--. 1 hp-spectre13 hp-spectre13   66331 Mar 21  2018 aclocal.m4
-rw-rw-r--. 1 hp-spectre13 hp-spectre13   29121 Mar 21  2018 AUTHORS
-rwxrwxr-x. 1 hp-spectre13 hp-spectre13    3569 Sep 18  2017 autogen.sh
...
(snip)
...
drwxrwxr-x. 2 hp-spectre13 hp-spectre13    4096 Mar 21  2018 tools

最後に dmesg のソースファイルがどこにあるのか探してみます。

[root@hst util-linux-2.32-2.fc28.src]# find util-linux-2.32/ -name "dmesg*"
util-linux-2.32/tests/expected/dmesg
util-linux-2.32/tests/ts/dmesg
util-linux-2.32/bash-completion/dmesg
util-linux-2.32/sys-utils/dmesg.1
util-linux-2.32/sys-utils/dmesg.c ★

C言語のソースファイルが見つかりました(dmesg.c)。

以上です。


  1. 元々こちらの記事と一緒にしていましたが、わかりずらかったので分けました。 

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away