my_knowledge.ko

Linux | Debug, Analyze, Trace | Tech | etc...

【RHEL, CentOS, Fedora】Linux コマンドのソースコード取得方法

はじめに

本稿では、RHEL、CentOS、Fedora といった RedHat 系 Linux のコマンドに紐づくソースコードを取得するための方法を記載しています。

一例として、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 なので、その点は注意です(具体的なコマンドは併せて載せています)。

ソースコードの取得方法

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

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

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

事前準備

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

// 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

手順

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

// 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)。