らんらん技術日記

日々の学習メモに

UbuntuでGitをビルド

ついに夏休みが終わってしまいました。
結局、夏休みの成果は自宅PCにUbuntuを導入しただけでした。
ほんとは、ここから色々やる予定だったのになー。

さて、今回の話題はそのやりたかったことの一つです。
Gitのビルドに挑戦しました!

というのも、先日読んだC言語の本「Cプログラミング専門課程」の一節が印象的だったからです。

プログラムの勉強をしたいなら、どんな参考書を読むよりも、生きたコードを見るのが一番。
書籍で紹介できる事柄には限界があるから、どうしても実際のコードには敵わない。
そしてコードを読むなら、社内の手近のコードだけでなく、世界の優れた技術者のコードを参考にしよう、と。

まぁ、どこかで見たことがあるような、ありふれた考え方だとは思います。
そういえば、学生の頃に教授も同じことを言っていた気がします。
しかし、今の僕には妙にこの一節が刺さりました。

優れた技術者といえば、僕は真っ先にLinus Torvaldsを思い出しました。
なんといってもLinuxの開発者です。
しかし、いきなりLinuxを読むのは大変そうです。
少しレベルを落としたところから始めたいところです。
というわけで、勉強の題材としてGitを選んでみました!

Gitのビルド手順

以下の手順で進めます。

  • Gitのソースコード取得
  • 依存関係のあるライブラリの取得
  • ビルドする

以下のページを参考にしています。
qiita.com

Gitのソースコード取得

Githubにプロジェクトが公開されています。

github.com

本当ならGitコマンドで落としたいところですが・・・
Gitをビルドするために、Gitを入れるてなんか変ですよね?
コンピュータサイエンス的には全然ありだと思うのですが、ビルドに成功した時の感動が薄れそうな気がします。
というわけで僕はFirefoxを使って、zipファイルで落とすことにしました。
Linux的にはコマンドラインでやるのが正しい気もしますが、こだわりません)

取得したzipファイルは、unzipコマンドで解凍します。

依存関係のあるライブラリの取得

Gitのプロジェクトフォルダを見ると、INSTALLというファイルがあります。
このINSTALLを見ると、依存関係のあるソフトを知ることができます。
ソフトには必須のものとオプションのものがありますが、基本はオプションもあった方が良さそうです。

ソフト 要件 説明
zlib 必須 ファイルの圧縮に使用する
ssh 必須 ネットワーク経由のpushやpullに使用する。Ubuntuでは標準搭載。
Perl オプション svnリポジトリとの対話など、一部機能で使用する。Ubuntuでは標準搭載。
libcurl オプション git-http-fetch, git-fetchに使用する。またIMAPSSL認証にも使用する。
expat オプション git-http-pushに使用する。curlと機能的に似ているから、不要かも。
wish オプション Gitの情報をGUIで表示する。
gettext オプション 言語情報の取得に使用する。ない場合は英語になる。
Python オプション Perfoceとの連携に使用する。

その他、Gitをコンパイルするためにgccとmakeも必要になります。

さて、Ubuntuではパッケージ管理ソフトとしてaptを使うのですが・・・
上に挙げた名称でサーチをかけても、何をインストールすればいいかわかりませんでしたw
以下のサイトを見ながら、必要なソフトが含まれるパッケージを探す、というのが正攻法なのかな?

packages.ubuntu.com


僕が試したところ、以下のコマンドで必要なソフトが揃いました。

sudo apt install gcc
sudo apt install make
sudo apt install libcurl4-gnutls-dev
sudo apt install libssl-dev
sudo apt install zlib1g-dev
sudo apt install libexpat1-dev
sudo apt install tk
sudo apt install gettext

ビルドする

お待ちかねのビルドです!
Gitのプロジェクトトップで、makeと打ちます。
ビルドに必要なソフトが揃っていれば、しばらくの間メッセージが流れます。
エラーメッセージが出た場合、適宜ソフトの更新や追加を行いましょう。

ビルドが完了すると、gitの実行ファイルが生成されます。
僕の環境では、だいたい5分くらい要したでしょうか。
比較的小規模なプログラムだと思っていたので、こんなに時間がかかることに驚きです。
改めて確認してみると、確かにファイル数は多いですね。

生成されたgitを実行すると、通常のgitと同じメッセージが出ます。

usage: git [--version] [--help] [-C <path>] [-c <name>=<value>]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           <command> [<args>]

These are common Git commands used in various situations:
(以下略)

しかし「git init」をすると、テンプレートがないとかでワーニングが出ます。
何か設定が必要なのかもしれません。

以上、今回はビルドを通したところで、区切ろうと思います。
それにしても、自前のLinuxマシンを持つのはいいものですね。
大学時代の研究室はLinuxでしたが、色々制限があったので、あまり良い印象はありませんでした。
こうして自分で好きなように使えると、少しLinuxの面白さがわかった気がします!