UbuntuでGitをビルド
ついに夏休みが終わってしまいました。
結局、夏休みの成果は自宅PCにUbuntuを導入しただけでした。
ほんとは、ここから色々やる予定だったのになー。
さて、今回の話題はそのやりたかったことの一つです。
Gitのビルドに挑戦しました!
というのも、先日読んだC言語の本「Cプログラミング専門課程」の一節が印象的だったからです。
プログラムの勉強をしたいなら、どんな参考書を読むよりも、生きたコードを見るのが一番。
書籍で紹介できる事柄には限界があるから、どうしても実際のコードには敵わない。
そしてコードを読むなら、社内の手近のコードだけでなく、世界の優れた技術者のコードを参考にしよう、と。
まぁ、どこかで見たことがあるような、ありふれた考え方だとは思います。
そういえば、学生の頃に教授も同じことを言っていた気がします。
しかし、今の僕には妙にこの一節が刺さりました。
優れた技術者といえば、僕は真っ先にLinus Torvaldsを思い出しました。
なんといってもLinuxの開発者です。
しかし、いきなりLinuxを読むのは大変そうです。
少しレベルを落としたところから始めたいところです。
というわけで、勉強の題材としてGitを選んでみました!
Gitのソースコード取得
Githubにプロジェクトが公開されています。
本当なら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に使用する。またIMAPのSSL認証にも使用する。 |
expat | オプション | git-http-pushに使用する。curlと機能的に似ているから、不要かも。 |
wish | オプション | Gitの情報をGUIで表示する。 |
gettext | オプション | 言語情報の取得に使用する。ない場合は英語になる。 |
Python | オプション | Perfoceとの連携に使用する。 |
その他、Gitをコンパイルするためにgccとmakeも必要になります。
さて、Ubuntuではパッケージ管理ソフトとしてaptを使うのですが・・・
上に挙げた名称でサーチをかけても、何をインストールすればいいかわかりませんでしたw
以下のサイトを見ながら、必要なソフトが含まれるパッケージを探す、というのが正攻法なのかな?
僕が試したところ、以下のコマンドで必要なソフトが揃いました。
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の面白さがわかった気がします!