AWS / PHP / Python ちょいメモ

amazon web service , PHP, Python を使ったときのメモ。日本語でググってもわからなかった事を中心に。

Redhat6.x + SCL 使う時に気をつけたい3つのポイント

Redhat系で新しいパッケージを公式サポートしてくれる SCL : Software Collections を使った際にはまったポイントを3つメモしておきます。慣れた方なら当たり前な事かもしれませんが、初心者にはハードル高く、何度もつまづきました。

SCL とは

Redhatはサポート期間が長く、一つ前のメジャーバージョンでも標準パッケージのバージョンが古い事が結構多いです(Redhat 6.xの場合:Apache2.2.x , Python 2.6.x など)。今からスタートするサービスに使うには、古さを感じました。

そこで各種パッケージの新しいバージョンに、公式に対応してくれる仕組みが SoftwareCollections (以下、SCL)。提供される追加リポジトリを登録するなどすれば、新しいバージョンが、標準リポジトリでの導入バージョンと衝突しないで利用できるという仕組み。


例えば Redhat 6.x の場合、こんな感じ。良さそうですよね。

導入した後のポイント3つ

導入手順は、他にまかせるとしまして、導入してから苦労したポイントは次のところでした。

まず衝突回避のため、導入先ディレクトリが /opt/rh/ 配下になっており、いろいろ通常パッケージとは扱いが異なります。

デフォルト利用

SCLリポジトリから導入したツールは、次のように scl コマンドで関連環境変数を有効にして使います。

$ scl enable python33 'python -V'
Python 3.3.2

これがなかなか面倒。pythonってうったら、SCLのものが有効になってればOKって場合には、/etc/profile.d/配下の仕組みを使います。


上記のサイトをみて、僕の場合は、次のファイルを作成しました。これで、ログイン毎に、自動的にpython3.3.xを有効化できます。

$ cat /etc/profile.d/enablepython33.sh 

#!/bin/bash
source /opt/rh/python33/enable
export X_SCLS="`scl enable python33 'echo $X_SCLS'`" 
sudo

root権限で作業したい時によく使いますが、 sudo [command] だけだと、前述のprofile.dで設定したスクリプトが実行されないので環境変数がセットされず、SCLパッケージのコマンドが利用できない状態となります。

そこで -i オプションをつけると環境変数がセットされるようになり、動作。

sudo -i [command]
cron

crontab -e などで設定する際、 /opt/rh/python33/root/bin/python などと書いてしまったのですが、動作するわけがない。。。cron実行時には環境変数のセットが必要であれば明示的に示してやる必要があります。

次のように記述して無事に動作しました。

0-59/10 * * * * scl enable python33 "python /home/user/test.py >> error.log" 


ここまでアレコレやると、他に解決方法あるんじゃないかと思ってしまうのですが、わからずで。この形でとりあえずスタートしています。

その他

導入手順の参考にしたサイトは、こちらです。


公式サポートってところに安心感はありますが、ちょっと手間がかかったなぁというのが今回の感想です。