07_Source-Build.md

2021/5/25

Source-Build
概要
本稿は応⽤課題として提⽰する．
EmacsとVimをソースコードからビルドして，導⼊する．
root権限を使わない導⼊⽅法を検討する．

⽬次
1. ソースビルド
2. 準備
3. Emacs
4. Vim5. 応⽤課題
6. kilo

ソースビルド
今までは，アプリケーションは， yum というパッケージマネージャーを⽤いてインストールしていた．
これは，公開されているリポジトリから，アプリケーションのバイナリを⼊⼿してインストールする．
しかし，パッケージマネージャーの利点は，どちらかというと依存関係の解決やアプリケーションの⼀元管理にあり，リポジトリとの連携は副次的なものである．
旧来，パッケージマネージャーがなかった時代のアプリケーションのインストールは，バイナリをどこからか⼊⼿したり，ソースコードを⼊⼿し，⼿元でコンパイルし，依存関係を⼿動で解決していた．
つまり，1つのアプリケーションをインストールしようとすると，依存するアプリケーションをインストールしたり，アプリケーションに合わせてアップグレードやダウングレードする必要があった．
さらに，場合によっては，依存関係のアプリケーションの依存関係の...というように延々と続いていくこともあった．
では，何故この時代になっても，ソースコードのビルドにてアプリケーションのインストールを⾏うのか．
それは，主に2つの理由である．
1つ⽬は，最新ないしは指定のバージョンのアプリケーションを求めるときである．
リポジトリに公開されるアプリケーションのパッケージは，様々なテスト (それこそ依存関係など)をパスしてから公開される．
CentOSの場合は，資料 Install-Linux.md でも述べたとおり安定性を優先していたり，FedoraやRedHatが先にあることから，公開されるパッケージはやや古いものとなってしまう．
そのため，最新のアプリケーションを求めるときは，⾃ずとソースコードのビルドが必要となる．
近年では，Dockerを代表とするコンテナ技術の発展により，求めるアプリケーションを仮想環境内でビルドして実現する運⽤も考えられる．
2つ⽬は，⾃らの環境や運⽤に合わせてチューニングする場合である．
ビルド時に，バイナリのインストール先を指定する prefix の指定や，不必要な機能は除外してインストールすることができる．
例えば，CUIオンリーのサーバにインストールするときに，GUIの機能は無効化してインストール，である．
1/4

07_Source-Build.md

2021/5/25

このとき， configure へのオプション指定で解決する⼈やソースファイル⾃体に⾃作のパッチを適応し，悪魔じみたチューニングを⾏うことができる．
⼀般的に，以下の流れでインストールされる．
しかし，⾊々な⼿法があるため，必ずアプリケーションの README ファイルないしは INSTALL ファイルを確認すること．

(1) $ ./configure(2) $ make$ sudo make install$ make clean(1) ./configure
インストールを⾏うOS，CPUアーキテクチャ，コンパイラ(gccやclなど)，必要な依存関係を調査する．
依存関係が不⾜しているときは，エラーを出して終了する．
調査した情報を基に，環境に合わせたMakefileを⽣成する．
オプションにて細かく指定し，チューニングできる．
(2) make
ソースコードをコンパイルする．
clean を指定すると，⽣成したバイナリの掃除ができる．( $ make clean )install を指定すると，⽣成したバイナリや関連するファイルを規定のディレクトリにコピーする．($make install)
ここで，上記の例⽰に sudo が付与されている理由を検討する．
⼀般的に./configure時のprefixによる指定がないときは，バイナリのコピー先は/usr/localとなる．
この領域は，⼀般ユーザは書き込むことができないためである．
逆に⾔うと，バイナリのコピー先を⼀般ユーザが書き込める領域に指定すると，sudoを⽤いずにコピー(インストール)することができる．
良くある領域としては，/home/user/usr/localなどである．
即ち，/usr/localを模して，⾃分のホームディレクトリにインストールすることである．
================================================================================
余談であるが，ビルドとコンパイルは明確に異なる．
コンパイルはソースファイルからバイナリ(機械語)への翻訳であり，ビルドは関連ファイルのリンクを含めた作業である．
================================================================================

準備
yum を使って，以下のパッケージをインストールする．
gcc ... C/C++のコンパイルに使う．他にFortranやGoもコンパイルできる．
make ... Makefileに記述された依存関係に従って，コマンドを実⾏する．コンパイルを楽にするために使われる事が多い．
ncurses-devel ... 端末に依存しないように画⾯を更新する．-develと付くパッケージは，開発に必要なライブラリやヘッダファイルを含んでいる．

2/4

07_Source-Build.md

2021/5/25

wget ... ファイルのダウンロードに使⽤する．機能が豊富であり，応⽤するとWebクローラーを作れる．
bzip2 ... bz2ファイルの解凍に使⽤する．今回は，Vimのパッケージの展開のみに使⽤する．

Emacs
1. wget を使って，http://ftp.jaist.ac.jp/pub/GNU/emacs/emacs-27.1.tar.gz より圧縮ファイルをダウンロードする．
2. tar コマンドを使い展開する．
3. cd コマンドを使い，emacs-27.1 ディレクトリに移動する．
4. ./configure には， --without-all オプションをつけて上記の流れを実⾏する．

Vim
1. wget を使って，https://ftp.nluug.nl/pub/vim/unix/vim-8.2.tar.bz2 より圧縮ファイルをダウンロードする．
2. tar コマンドを使い展開する．
3. cd コマンドを使い，vim82 ディレクトリに移動する．
4. ./configure には， --disable-gui と --without-x オプションをつけて上記の流れを実⾏する．

応⽤課題
書式
条件通りに実⾏できていることを，⽂章や実⾏結果，図で⽰せ．
例えば， ls -R や diff，historyによるコマンド実⾏履歴を使う．
以下の課題は，EmacsもしくはVimのどちらかだけで構わない．
どちらか⼀⽅が分かればもう⼀⽅も同様の⼿順でできるため，両⽅やっても⼿間にはならない．

課題1
上記の⼿順で実際にインストールしたエディタのバージョンを⽰せ．
もし，特別に気に⼊ってるバージョンがあれば，特筆し，そのバージョンでも良い．
--version オプションで確認できる．

課題2 (Keyword: prefix，configure，option)
エディタのインストール時に，root権限を発動している．
これは何故であるか検討し，root権限を使⽤しない⽅法でインストールし，実⾏せよ．
なお，このとき上記でインストールしたエディタは，$ sudo make uninstall でアンインストールすることを強く推奨する．

課題3 (Keyword: 環境変数，PATH，which)
応⽤1で導⼊したエディタを実⾏するとき，バイナリを絶対パスで指定しなければならない．
通常のコマンドのように，ファイル名だけを指定すれば起動するようにせよ．

kilo
3/4

07_Source-Build.md

2021/5/25

1000⾏で実装されているエディタとして， kilo というものがある．
極⼒，他のライブラリを使わず，C⾔語で実装されている．
ソースコードが公開されており，make でコンパイルするとすぐに使える．
シンタックスハイライト，ショートカットキー，画⾯の更新に対応しており，必要最低限の機能を有している．
参考⽂献を下記に貼り付けているので，学習や遊戯にいかがだろうか．

参考⽂献
パッケージのテスト https://vinelinux.org/docs/vine6/developers-guide/tester.html , 2020/11/26./configure;make;make installにはどんな意味がある︖ - ITmedia エンタープライズ
https://www.itmedia.co.jp/help/tips/linux/l0302.html , 2020/11/25
ncurses(3) manページ https://nxmnpg.lemoda.net/ja/3/ncurses , 2020/11/25
GNU Emacs - GNU Project https://www.gnu.org/software/emacs/ , 2020/11/25welcome home : vim online https://www.vim.org/ , 2020/11/25
vim-jp » Vimのユーザーと開発者を結ぶコミュニティサイト https://vim-jp.org/ , 2020/11/25
antirez/kilo: A text editor in less than 1000 LOC with syntax highlight and search.
https://github.com/antirez/kilo, 2020/11/25
Build Your Own Text Editor https://viewsourcecode.org/snaptoken/kilo/index.html , 2020/11/25
C⾔語1000⾏以下のエディタ「Kilo」を理解する(1) シンプルな内部構造 | マイナビニュース
https://news.mynavi.jp/article/kilo-1/ , 2020/11/25

奥付Name⽵原 ⼀駿 ( Ichitoshi TAKEHARA )所属
⾹川⼤学⼤学院 ⼯学研究科 信頼性情報システム⼯学専攻 最所研究室 M1
メールアドレス itakehara@fw.ipsj.or.jp-------------------------------------------------------------------------------2020/12/03 初版
2021/05/25 2版--------------------------------------------------------------------------------

4/4