/home/user/localにVimをインストール

もう11月とな。道理で寒いわけだ。

会社のサーバを弄るとき、インフラチームでない私にはroot権限がないので、最初は何かと不便を強いられていました。が、1ヶ月もすると慣れてくるもので、むしろroot権限なんて必要ないよなぁ、と思うように。慣れって怖い。いや、rootを自由自在に触れる環境のほうが怖いか。

root権限がないので、「あれがないこれがない」に対応するには自分でホームディレクトリにインストールするしかないです。ソースを落として、configureして、makeして、make installして、と。configure --helpを読みながらやらざるを得ないので、正直言って最初は面倒です。途中でハマったりしてググったとしても、パッケージ管理システムを使ってインストールする記事ばかりですし。

閑話休題。そんなこんなで、新しい開発サーバに入るときなどは一からVimを入れたりする必要があるので、その他諸々(lynxとctags)をインストールするためのスクリプトを(会社の先輩が作ったものをパクって)書いてみました。Gitから最新のVimを取ってくるので、今現在だとVim 8.0がインストールされることになります。

#!/bin/bash
set -Ceu

install_dir="$HOME/local"
work_dir="${HOME}/work"

make_install_dir() {
    if [ ! -d "$install_dir" ]; then
        mkdir -p "$install_dir"
    fi
}
make_work_dir() {
    if [ ! -d "$work_dir" ]; then
        mkdir -p "$work_dir"
    fi
}

set_env() {
    # luajitの実行パスがわからないとvimのconfigureでこけるため
    export PATH="$install_dir/bin:$PATH"
}

install_lua() {
    cd "${work_dir}/"
    echo 'install lua'
    if [ ! -d "${work_dir}/luajit-2.0" ]; then
        git clone http://luajit.org/git/luajit-2.0.git
    else
        cd "${work_dir}/luajit-2.0"
        git checkout master
        git fetch --prune
        git pull --prune
    fi
    cd "${work_dir}/luajit-2.0"
    make PREFIX=$install_dir && make install PREFIX=$install_dir && make clean
}

install_ncurses() {
    cd "${work_dir}/"
    echo 'install ncurses'
    if [ ! -f "${work_dir}/ncurses-6.0.tar.gz" ]; then
        wget http://ftp.yz.yamagata-u.ac.jp/pub/GNU/ncurses/ncurses-6.0.tar.gz
    fi
    tar -zxvf ncurses-6.0.tar.gz
    cd "${work_dir}/ncurses-6.0"
    ./configure --prefix=$install_dir --without-cxx-bindings --with-shared
    make && make install && make clean
}

install_vim() {
    cd "${work_dir}/"
    echo 'install vim'
    if [ ! -d "${work_dir}/vim" ]; then
        git clone https://github.com/vim/vim.git
    else
        cd "${work_dir}/vim"
        git checkout master
        git fetch --prune
        git pull --prune
    fi
    if [ -f ${work_dir}/vim/src/auto/config.cache ]; then
        rm "${work_dir}/vim/src/auto/config.cache"
    fi
    cd "${work_dir}/vim/src"
    export LDFLAGS="-L$install_dir/lib"
    ./configure --with-local-dir=$install_dir \
        --with-features=huge \
        --enable-luainterp=dynamic \
        --with-luajit \
        --with-lua-prefix=$install_dir \
        --with-tlib=ncurses \
        --prefix=$install_dir
    make && make install && make clean
}

install_lynx() {
    cd "${work_dir}/"
    echo 'install lynx'
    if [ ! -f ${work_dir}/lynx2.8.8rel.2.tar.gz ]; then
        wget http://invisible-mirror.net/archives/lynx/tarballs/lynx2.8.8rel.2.tar.gz
    fi
    tar -zxvf lynx2.8.8rel.2.tar.gz
    cd "${work_dir}/lynx2-8-8"
    ./configure --prefix=$install_dir --with-curses-dir=$install_dir
    make && make install && make clean
}

install_ctags() {
    cd "${work_dir}/"
    echo 'install ctags'
    if [ ! -d ${work_dir}/ctags ]; then
        git clone https://github.com/vim-jp/ctags.git
    else
        cd "${work_dir}/ctags"
        git checkout master
        git fetch --prune
        git pull --prune
    fi
    cd "${work_dir}/ctags"
    autoheader
    autoconf
    ./configure --prefix=$install_dir
    make && make install && make clean
}

main() {
    make_install_dir
    make_work_dir
    set_env
    install_lua
    install_ncurses
    install_vim
    install_lynx
    install_ctags
}

main

あと、環境変数はなるべく変更したくないので、例えばインストールしたVimを使う場合は、

echo 'alias vim="LD_LIBRARY_PATH=$HOME/local/lib $HOME/local/bin/vim"' >> .zshrc

などエイリアスさせています。まあPATHくらいならログインシェルの設定に追加しておけばいいけども。

これで安心して、今年のクリスマスはVim 8.0と一緒に過ごせますね(ぉ

github.com

追記

zshをコンパイルするときに怒られたので、ncursesを-fPICオプションでコンパイルするように「--with-shared」をconfigureに追加。

また、Ubuntu 16.04でncursesをコンパイルできない場合は以下を参考に。

tydk27.hatenadiary.com