CentOSにVim7.4をソースからインストール

CentOS 6.5, Vim 7.4

これは個人の作業ログであり、環境構築方法を説明する情報としては整備されたものではありません。

最近のプログラマーにはインフラ構築スキルも求められるそうだ。
CodeZineが言ってるんだから間違いない。
(ソースは2015年11月9日のメルマガ)


さて、久しぶりに書く日記のことを果たして「日々の記録」即ち「日記」と呼んで良いのかどうかはさておき、最近、とあるサーバーにCentOSを新規にインストールすることがあった。CentOSをインストールするのは私の人生において、これで4度目くらいである。インフラチームのYさんに比べれば、まだ初心者の域だろうが、営業部のYさんに比べれば、プロの領域である。ちなみにWindows 95は20回くらいインストールしたことがあるし、禁煙には5回くらい成功したことがある。


OSをインストールした直後にやらなければならないことというのは、MacだろうがWindowsだろうがLinuxだろうが決まっている。

まずはテキストエディターをセットアップすることである。*1 *2

これをしないことには何も始まらない。

OSをインストールした直後にインターネットエクスプローラーを開こうとするような奴はITエンジニアではないと断言しても良い。

そしてテキストエディターとはもちろんVimのことである。もはや、テキストエディターというワードを世の中から廃止して、それをVimという単語に置き換えたとしても何も問題はないと言ってしまっても過言ではなかろう。しかし、実際のところ、私の居るオフィスでVimを使っているのが私だけという事実を無視するわけにもいかず、やはりそれは過言と見るべきではあるが、ともかく今回のテーマはCentOSにVimというテキストエディターをインストールするということにある。



この度私は、CentOSをMinimalインストールすると、そのままではVimがインストールされないという驚愕の事実を知ることとなった。

いや、厳密には入っているようにも見える。

$ which vim
/usr/bin/which: no vim in (/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/myname/bin)

$ yum list installed | grep vim
vim-minimal.x86_64      2:7.2.411-1.8.el6

コマンド表記注意*3


これいかに。

少しググってみると、yumではVim 7.2までしかインストールできないみたいだ。ksg
yumというのはどうもあまり良いツールではない気がする。
大抵の場合は問題ないというか、欲しいものが手に入るのだが、最新のものとか、マイナーなものとかが手に入らないことがしばしばあり、これは形容するなら、専門店ではなくコンビニというニュアンスである。インターネット上では距離に対するリスクというのがほぼないに等しいため、OSSを使う範囲内において、コンビニが専門店に勝てる要素というのがまったく存在しない。その上、こいつ自身がself-updateできるのかも怪しいし(スマン私が知らないだけで多分できてる)、下手を打つとアップデートしたくないものまでアップデートしてしまいそうになることがある。

まあ、いずれにせよ、7.2なんていう古臭いものを使いたくないので、ソースコードから7.4をインストールすることにした。

ここで、7.4をソースコードからインストールするからといって、インストール済みのvim-minimal 7.2をアンインストールすることはやめた方が良い。私はやってしまったから分かるが、こいつを削除すると、sudoができなくなる。


以下、Vimをソースからインストール

$ yum list installed | grep mercurial
$ yum list installed | grep ncurses-devel
$ yum list installed | grep make         
make.x86_64             1:3.81-20.el6   @anaconda-CentOS-201311272149.x86_64/6.5
$ yum list installed | grep gcc 
libgcc.x86_64           4.4.7-4.el6     @anaconda-CentOS-201311272149.x86_64/6.5

$ sudo yum update make libgcc

$ sudo yum install gcc mercurial ncurses-devel

$ cd /usr/local/src
$ sudo hg clone https://vim.googlecode.com/hg/ vim
$ cd vim
$ sudo hg pull
pulling from https://vim.googlecode.com/hg/
searching for changes
no changes found

$ sudo ./configure --with-features=huge --enable-multibyte --disable-selinux
$ sudo make
$ sudo make install

$ vim --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Oct 28 2015 12:36:45)
# 以下略


# rootの.bash_profileでvimのパスが通るようにする
$ su - 
$ vim .bash_profile
PATH=$PATH:$HOME/bin:/usr/local/bin
$ exit

# sudo時にvimが使えるようにパス設定
$ sudo visudo
# secure_pathに/usr/local/binを追加
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin


【参考】
http://qiita.com/SOJO/items/9d6a65f3da941c49da36


Vimをコンパイルするために必要な、make, gcc, mercurial, ncurses-devel あたりをyumでインストールしておくというのがポイントっぽい。makeをするときは -j オプションで、コアを複数使わせてやると良い。じゃないと遅い。

それと、私は、sudo vim filename ということをよくやるのだが、sudo時に通るパスというのは /etc/sudoers 内の secure_path で決められているそうで、そこでパスが通ってないと、sudo vim ができないみたい。まあ、そこを書き換えないでも、/bin にでもシンボリックリンクを置いておけば良いのかもしれない。


さて、ひとまずこれでVimを使えるようにはなったのだが、シンタックスハイライトが効いていないので、このままではhttpd.confを開く気にすらなれない。いやまあ、まだApacheをインストールすらしていないんだけどね。

まあ、vimrcを作って、どこぞから基本的な設定をコピってくればいいだろ、と思ったのだが…ここで手が止まってしまった。

ユーザーごとのVim設定は、各自のホームの下に .vimrc を作れば良いのはわかっているのだが、今のままでは共通で使いたい設定が明らかに足りない。

システムの vimrc はいったいどこから読み込まれるのだろうか?

私は盲目的に、/etc/vimrc から読み込まれるもんだとばかり思っていたのだが、そこに置いても読み込んでくれなかった。


【参考】
http://askubuntu.com/questions/60041/why-isnt-vim-reading-my-global-configuration-file


なぁるほど。
Vim上で :help system-vimrc と打てば、システムvimrcの場所が表示されるとのこと。

やってみたら、$VIM/vimrc だよと書いてあった。
しかし $VIM なんて定義していない。

ヘルプ内をよく見ると :version と打てば表示されるよと書いてあった。
なんだ、結局のところ vim --version でよかったのね。

system vimrc file: "$VIM/vimrc"
user vimrc file: "$HOME/.vimrc"
2nd user vimrc file: "~/.vim/vimrc"
user exrc file: "$HOME/.exrc"
fall-back for $VIM: "/usr/local/share/vim"


ということで、/etc/vimrcを/usr/local/share/vim/vimrcに移動した。
他にもカラー設定やら色々足りなかったが、既に構築済みの環境から、同様の手順で $VIM の場所を特定し、設定ファイルをtarしてscpして丸ごと持ってきたらすべてうまくいった。


あとは、ユーザーごとに、自分のオキニの .vimrc を作れば良いだけ。

これでようやくApacheとPostfixとDovecotをインストールする気力が湧いてきた。(すぐにやるとは言っていない)



めでたしめでたし。

*1:ただしこれがスマホとなると話がちょっと違ってきて、その場合、まずやらなければならないことはアドレス帳をクラウドと同期することである。

*2:ところで。。。本題から逸れた上に、さらに脱線することを急に思い出した。そしてここは私の日記帳なのだから、自らのタイピングの暴走を憚る必要もないわけだ。それが何かというと、携帯電話とスマホをやたらと区別したがる宗教があるようだが、スマホにも電話の機能がついている上に、多くの場合身につけて持ち運ぶものなのだから、スマホを「ケータイ」と呼称することになんの問題もないと私は思うのだ、ということだ。「あなたの携帯電話、スマートフォン、またはiPhoneの電源をお切りください」などと回りくどい言い方をすることに一体なんの意味があるのだろう。スマホとケータイを区別するのはAuショップの店員だけで良い。

*3:一般的には、rootのプロンプトを"#"、一般ユーザーのプロンプトを"$"で記述するみたいだが、私は"#"をコメントとして使いたいので、プロンプトはrootだろうが"$"を使うことにしている。