(CentOS(6.x)向け)root権限がないサーバで必要なパッケージを自分でソースビルドしてporgでパッケージ管理する

#はじめに
CentOSは公式リポジトリが古く、場合によってはサーバにインストールされているソフトが古すぎて自分で新しいバージョンをインストールしなければならなくなることがあります。通常、ソフトのインストールにはroot権限が必要ですが、ここで紹介する方法はroot権限が不要です。動作の検証はCentOS6.xで行っております。恐らく他のバージョン・ディストリビューションでも可能だと思いますが、保証対象外です。また、サーバのOSがDebian系などの場合は`yum`を適当なコマンド(`apt-get`・`aptitude`など)に、`x86_64-redhat-linux`を適当なものに読み替えてください。(`gcc --version`などで出てきます)さらに、「最新」という表現がいくつか出てきますが、2015年9月現在の時点です。

#ソフトをインストールするディレクトリ
通常、ソフトは`/usr/bin`(管理者が`yum`でインストールしたもの)、もしくは`/usr/local/bin`(管理者がコンパイルしてインストールしたもの)にインストールされます。このディレクトリはroot権限がないと書き込みができません。そこで、ホームディレクトリ以下に適当なディレクトリを作成してインストールしましょう。個人的には

```
~/local/bin
```

がおすすめです。以下はこのディレクトリにソフトをインストールすることを前提にして解説します。別のディレクトリにインストールする場合は適宜読み替えてください。

#porgをインストールする
ソフトをソースからコンパイルしてインストールする時、インストールは`(sudo )make install`だけでできるので楽なのですが、アンインストール時にはインストールした際に生成されたMakefileが必要です。(コマンドは`(sudo )make uninstall`のみ)更に、ソフトによっては(GCC・Gitなど)コマンドでのアンインストールができないこともあります。そこで、ソースからコンパイルしてインストールしたソフトの管理を行うソフトporgを最初にインストールします。これをインストールするコマンドは次のようになります。

```bash
wget http://sourceforge.net/projects/porg/files/porg-0.8.tar.gz
tar xf porg-0.8.tar.gz
cd porg-0.8
nice -n 19 ./configure --host=x86_64-redhat-linux --build=x86_64-redhat-linux --prefix=$HOME/local CFLAGS='-march=core2 -O3' --disable-grop --with-porg-logdir=$HOME/local/root/var/log/porg/
nice -n 19 make
nice -n 19 make install
nice -n 19 make logme
```

ここで、`nice -n 19`は実行プログラムの優先度を下げるコマンドです。C Shell・tcshでは`nice +19`を使います。CentOS6.xの場合、`./configure`の際に`--disable-grop`を入れてGUIを無効にしないとコンパイルが通りません。また、root権限がない場合、`--with-porg-logdir`でファイルの記録場所を変えなければなりません。(デフォルトではroot権限が必要な場所に設定される)ここでは、

```
~/local/root/var/log/porg
```

としています。変更する場合は上のコマンドを読み替えてください。
#パスを通す
コンパイルしたソフトはこのままではコマンドとして使用できません。.bashrc・.tcshrc・.zshrcなどの末尾に`~/local/bin`にパスを通し、コマンドとして使用できる記述を加えます。但し、注意しなければならないことがあります。パスの順番です。LinuxではWindowsとは異なり、前のディレクトリにあるソフトほど優先されて実行されます。従って、サーバの管理者がインストールした古いソフトが入っている`/usr/bin`・`/usr/local/bin`より前に`~/local/bin`を加えなければなりません。また、パスの区切りはWindowsでは「;」ですが、Linuxでは原則「:」です。(ただし、[fish](http://fishshell.com/)など当てはまらないシェルもあります)パスを通す設定コマンドはBashなどBourne Shell系の場合は次のようになります。

```bash:.bashrc/.zshrc
export PATH=$HOME/local/bin:$PATH
```

C Shell・tcshの場合は次のようになります。

```tcsh:.cshrc/.tcshrc
setenv PATH ${HOME}/local/bin:${PATH}
```

fishの場合は次のようになります。

```fish:~/.config/fish/config.fish
set -x PATH $HOME/local/bin $PATH
```
#例: gnuplotをソースからコンパイル・インストール
実例としてgnuplotの最新版(※執筆当初; 2016/7現在の最新版は5.0.4です)、ver. 5.0.1をソースコードからコンパイル・インストールしてみます。その場合のコマンドは以下のようになります。(wget・コンパイラ・必要なライブラリがあることが前提)

```bash
wget http://sourceforge.net/projects/gnuplot/files/gnuplot/5.0.1/gnuplot-5.0.1.tar.gz #tarballを取得
tar xf gnuplot-5.0.1.tar.gz #解凍
cd gnuplot-5.0.1
nice -n 19 ./configure --host=x86_64-redhat-linux --build=x86_64-redhat-linux --prefix=$HOME/local CFLAGS='-march=core2 -O3' #~/local以下にインストールする場合; CentOS7の場合はサーバのCPUに合わせて-march=core-avx2(Haswell) core-avx-i(IvyBridge) corei7-avx(SandyBridge)とする; niceはサーバ管理者に睨まれないように優先度を下げる役割; C Shell/tcshの場合はnice +19 ～とする
nice -n 19 make #サーバ管理者に睨まれないように優先度を下げてコンパイル
nice -n 19 make check #念のため(ソフトによっては不要な場合もあります)
nice -n 19 porg -lp gnuplot "nice -n 19 make install" #-lpの後がパッケージ名(gnuplot-5.0.1でも可)
```

コンパイルの作業は他のユーザも使うであろうサーバのリソースをごっそり持っていく行為なので「`nice -n 19`」をつけて優先度を下げたほうがいいと思います。また、`make install`の際に、`porg -lp`でporgの管理下に置かなければなりません。

**追記:** gnuplotはQt4・WxWidgetsのライブラリがなくてもインストールができますが、ターミナルの種類が減ります。ライブラリもソースビルドするか諦めてください。またQt4のライブラリがあってもオプションで`--with-qt=qt4`を指定しないとQtターミナルが使用できません。詳しくは`./configure`の後すぐに`make`せずに`./configure`の最後の方のメッセージを見てください。他のソフトも同様です。

#パーミッションについて
通常、`make install`でインストールしたファイルは誰からもアクセス可能です。インストールされたソフトを他人に使われたくない場合には`~/local`のパーミッションを700にするなどの対策が必要です。また、porg関連のソフトを実行されたくない場合には、porgのインストール後に`~/local/bin`に移動し、

```
chmod go-rwx porg* *porg
```

を実行するのがいいと思います。