root 権限がなく、ビルドツールもインストールされていない環境でビルド環境を整える

CentOS 6 で git, zsh, tmux 等をビルドしたいけど、root 権限もなければインストールされているコンパイラは cc だけ…、というようなケースでビルド環境をそろえる方法。

0. 想定しているケース

  • CentOS 6 (x64)
  • 一般ユーザ権限のみ
  • ビルドツールのインストール先は ~/local/
  • 使用するシェルは bash

1. yumdownloader (yum-utils) のインストール

yumdownloader (yum-utils) が入っていなければインストールする。

$ type yumdownloader >/dev/null 2>&1 || (mkdir ~/local; cd ~/local && releasever=$(head -n1 /etc/issue | perl -ne '/\b(\d+(?:\.\d+))\b/; print $1;') && wget -qO - "http://ftp.sakura.ad.jp/pub/linux/centos/${releasever}/os/$(uname -i)/Packages/yum-utils-1.1.30-14.el6.noarch.rpm" | rpm2cpio | cpio -id && ./usr/bin/yumdownloader --version)

2. ビルドツールのインストール

上記 1 で yumdownloader をインストールした場合は事前にパスを通しておくか、以下の各コマンドを置き換える。

$ mkdir ~/local; cd ~/local
$ yumdownloader $(repoquery --resolve --requires gcc gcc-c++ kernel-headers autoconf automake binutils libtool make bison gettext pkgconfig | sort -u)
$ find -maxdepth 1 -name '*.rpm' -print0 | xargs -0 -n1 -I '{}' sh -c 'rpm2cpio {} | cpio -id'

3. 環境変数を設定する

ビルド時に設定されていれば良いので、シェルの設定ファイルに記述する必要は特にない。

$ export LOCAL_ROOT="${HOME}/local"
$ export PATH="${LOCAL_ROOT}/usr/bin:$PATH"
$ export LD_RUN_PATH="${LOCAL_ROOT}/lib64:${LOCAL_ROOT}/usr/lib64"
$ export LDFLAGS="-L${LOCAL_ROOT}/lib64 -L${LOCAL_ROOT}/usr/lib64 -R${LD_RUN_PATH}"
$ export CPPFLAGS="-I${LOCAL_ROOT}/usr/include"

4. ビルド

後は普通にビルドを行うだけ。