root権限がないLinuxでのサバイバル術

最終更新: 2017-11-16 13:53

共用のサーバーで開発を行う場合などに、root権限がないアカウントで作業しなければならないことがよくあります。管理者は必要なパッケージをインストールしてくれるとは限らないためroot権限なしでこの先生きのこる技術を身につける必要があります。

このページには研究室のサーバーと格闘する中で今までに得た知見をまとめていきます。もっと便利なものを知っている方がいたら教えてくれると助かります。

想定する状況

コマンド例はUbuntu 14.04で確認していますが、CentOSなどでも動くと思います

Gitをインストールする

まずは今後の作業に必要なGitをインストールします。

Gitのインストールにはcurlが必要なのですが、標準で入っていないのでソースからコンパイルします。(参考ページ
ダウンロードするバージョンは https://curl.haxx.se/download.html から最新のものを選んでください。

wget https://curl.haxx.se/download/curl-7.56.1.tar.gz
tar xvf curl-7.56.1.tar.gz 
cd curl-7.56.1/
./configure --with-ssl --prefix=$HOME/usr
make
make install

環境変数を設定します。

cat << 'EOF' >>~/.bashrc
export PATH="$HOME/usr/bin:$PATH"
export LD_LIBRARY_PATH="$HOME/usr/lib:$LD_LIBRARY_PATH"
export PKG_CONFIG_PATH="$HOME/usr/lib/pkgconfig:$PKG_CONFIG_PATH"
export MANPATH="$HOME/usr/share/man:$MANPATH"
EOF
source ~/.bashrc

次にGitをコンパイルします。ダウンロードするバージョンは https://www.kernel.org/pub/software/scm/git/ から最新のものを選んでください。

wget https://www.kernel.org/pub/software/scm/git/git-2.9.5.tar.gz
tar xvf git-2.9.5.tar.gz 
cd git-2.9.5/
./configure --prefix=$HOME/usr --with-curl=$HOME/usr/
make
make install

これでgitが使えるようになりました。

tmuxをインストールする

SSHするときにtmux(またはscreen)がないと接続が切れたときに困るのでインストールします。

ソースからコンパイルすると依存関係などが大変なのでminos-staticを使います。(このリポジトリの運営団体が信用できるのかは分かりません……)

類似のものとしてLinuxbrewがありますが、依存するパッケージが多いので今回は使わないことにしました。

cd ~
git clone https://github.com/minos-org/minos-static.git
cd minos-static
./static-get tmux
tar xvf tmux-1.9a.tar.xz
echo 'export PATH="$HOME/minos-static/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

これでtmuxが使えるようになりました。

Vimをインストールする

Ubuntuに標準でついてくるVim(viで起動できる)は機能が限定されているので機能が多いバージョンのVimをインストールします。minos-staticを使います。

./static-get vim-7.4
tar xvf vim-7.4.tar.xz
echo 'export VIMRUNTIME="$HOME/minos-static/share/vim/vim74"' >> ~/.bashrc
source ~/.bashrc

これで健康で文化的な最低限度のVimが使えるようになります。

他にも必要なものがあれば

static-get --search

で探してみると見つかるかもしれません。

Pythonをインストールする

pyenvを使います。インストールするバージョンは好きなものでいいですが、次の話の都合上2.7をインストールします。

git clone https://github.com/pyenv/pyenv.git ~/.pyenv
cat << 'EOF' >>~/.bashrc
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
if command -v pyenv 1>/dev/null 2>&1; then
  eval "$(pyenv init -)"
fi
EOF
source ~/.bashrc
pyenv install 2.7.14
pyenv global 2.7.14

C++11が使えるGCCをインストールする

古いGCCだとC++11以降が使えなくてつらいので新しめのGCC(4.9.3) をインストールします。EasyBuildを使います。EasyBuildにはPython 2.6以上のバージョン2.xが必要です

まず、Tcl/C environment-modulesをインストールします。(参考ページ

ソースは以下のページから落とせます。なお、Tclのバージョンはv8.5.xを選ぶ必要があります。Modulesのバージョンも3.2.xでないと互換性がないようです。

wget ftp://ftp.tcl.tk/pub/tcl/tcl8_5/tcl8.5.9-src.tar.gz
tar xvf tcl8.5.9-src.tar.gz
cd tcl8.5.9/unix
./configure --prefix=$HOME/.local/Tcl
make
make install
cd ~
wget http://prdownloads.sourceforge.net/modules/modules-3.2.10.tar.gz
tar xvf modules-3.2.10.tar.gz
cd modules-3.2.10
./configure --prefix=$HOME/.local/environment-modules --with-tcl=$HOME/.local/Tcl/lib
make
make install
cat << 'EOF' >>~/.bashrc
export PATH=$HOME/.local/environment-modules/Modules/3.2.10/bin:$PATH
export LD_LIBRARY_PATH=$HOME/.local/Tcl/lib:$LD_LIBRARY_PATH
source $HOME/.local/environment-modules/Modules/3.2.10/init/bash
EOF
source ~/.bashrc

EasyBuildをインストールします(参考ページ

cd ~
EASYBUILD_PREFIX=$HOME/.local/easybuild
wget https://raw.githubusercontent.com/easybuilders/easybuild-framework/develop/easybuild/scripts/bootstrap_eb.py
python bootstrap_eb.py $EASYBUILD_PREFIX
module use $EASYBUILD_PREFIX/modules/all
module load EasyBuild
module list    # EasyBuildがloadされていたらOK 

環境変数の設定

cat << 'EOF' >> ~/.bashrc
export EASYBUILD_PREFIX=$HOME/.local/easybuild
export MODULEPATH=$MODULEPATH:$EASYBUILD_PREFIX/modules/all
module load EasyBuild
EOF
source ~/.bashrc

moduleをTclにするための設定

mkdir -p ~/.config/easybuild
cat << 'EOF' > ~/.config/easybuild/config.cfg
[config]
modules-tool: EnvironmentModulesC
module-syntax: Tcl
EOF

GCCのインストール

cd ~/.local/easybuild
git clone https://github.com/easybuilders/easybuild-easyconfigs.git
eb GCC-4.9.3.eb --robot --robot-path=$HOME/.local/easybuild/easybuild-easyconfigs # 時間がかかる
module avail # GCC/4.9.3があることを確認

module load GCCするとEasyBuildでインストールしたGCCが使われ、module unload GCCするとシステムのGCCが使われます。

GCC 7.2.0などのより新しいGCCの設定ファイルも存在するようなのですが、自分の環境ではうまく動きませんでした。

これだけだと普通にGCCをコンパイルした方がラクな可能性がありますが、LAPACKなどの他のHPC用ライブラリも同様にインストールできるらしいです(未検証)。

Rのインストール

Rをソースコードからインストールが詳しい。