ソースコードを手元においておくには?

ソースコードを手元においておくには?

 ソースコードを復元するまでの無駄な時間を無くし、トラブル調査の初動からソースコードを閲覧できるように環境整備を実施しましょう。勤務先でRHELを対象にそのような環境を作り、それをsourcesと呼んでいます。sources環境では、調査の対象となる製品のソースコードをすべてファイルシステム上に展開します。ソースコードを閲覧するために特別なコマンドを実行する必要はありません。

sources環境の構築手順

 以下が環境作成の手順です。

1.すべてのsrc.rpmをダウンロードする。

2.ダウンロードしたsrc.rpmを1つ選ぶ。これをパッケージAのバージョンxに対するsrc.rpmであるとする。

3.rpmコマンドで選んだsrc.rpmをインストールする。/usr/src/redhat/SOURCESにソースコードの原型が配置される。

4.rpmbuildコマンドを実行し、ソースコードを復元する。/usr/src/redhat/BUILD/Aに復元されたソースコードが配置される。

5./srv/sources/A/x/BUILDというディレクトリを作成し/usr/src/redhat/BUILD/Aの内容を/srv/sources/A/x/BUILDに移動する。

6./usr/src/redhat/SOURCESおよび/usr/src/redhat/BUILD/A以下のファイルを削除する。

7.ダウンロードしたすべてのsrc.rpmに対して手順2.から6.までの手順を繰り返す。

 手順5.について少し説明が必要です。あるパッケージのあるバージョンのソースコードを読むだけであれば、rpmbuildコマンドの実行が完了した時点で、準備完了です。しかし「パッケージをバージョンアップしたら、動かなくなった」といったトラブルを調査するために、同じパッケージの異なるバージョンのソースコードを読み比べたくなります。

 ところが、異なるバージョンのソースコードをrpmbuildコマンドで復元するには問題があります。パッケージAのバージョンxとバージョンyについて、バージョンx → バージョンyの順序で、ソースコードの復元を試みると両方のバージョンが/usr/src/redhat/BUILD/A以下に配置されてしまい、バージョンxのソースコードをバージョンyのソースコードで上書きしてしまいます。

 こういった問題があるため、バージョンxのソースコードを復元した時点で手順5.を実施し/usr/src/redhat/BUILD/A以下のファイルを別の場所に退避させて、後に展開するバージョンyとの衝突を回避しています。

 以上の手順で、すべてのパッケージのすべてのバージョンに対するソースコードが/srv/sources以下に復元できます。そこで手順8として以下を実行します。

8./srv/sourcesをnfs経由でエクスポートする。

 これで自分だけでなく、同僚も時間を無駄にすることなくソースコードを閲覧できます。

9.sources:/srv/sourcesを/srv/sourcesにマウントする。

 手順9.に従うことによって、どのコンピューター上でも、同じソースコードを参照するのにいつでも同じファイルパスを使うことができます。

 図2は、実際に業務に使っている/srv/sourcesのディレクトリツリー上でbash-2.05-8のソースコードがどこにあるか示しています。紹介した手順で得られるディレクトリツリーに比べて実際の/srv/sources以下の構造はもう少し複雑です。ディレクトリ一覧の取得に時間が短くなるようにパッケージ名の先頭の一文字を使ってハッシングしている、ソースコードの原型についても保持している、といった理由によります。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30