まだプログラマーですが何か?

プログラマーネタとアスリートネタ中心。たまに作成したウェブサービス関連の話も http://twitter.com/dotnsf

タグ:rhel

CentOS / RHEL(RedHat Enterprise Linux) に Ruby 2.x をインストールする手順を紹介します。

Ruby のバージョンにこだわらないのであれば、コマンドラインから
# yum install ruby
と入力するだけでインストールできます。ただ 2015/Feb/18 現在、この方法でインストールできる Ruby のバージョンは 1.8.7 でした。このバージョンで特に支障がなければこの方法が一番簡単だと思っています。


以下、どうしても Ruby 2.x を使いたい、という人のための導入方法の紹介です。CentOS で Ruby 2.x を導入する方法はいくつかあって、ソースコードからビルドするという一般的な手順もあるのですが、ここでは rbenv を使った方法を紹介します。

rbenv は複数バージョンの Ruby を同一コンピュータ上で管理する GitHub 提供のツールです。2.x に限らず 1.x も含めた複数バージョンの Ruby を同じマシンにインストールし、実際に利用するバージョンを管理しながら使えるようにできます。このツールを使って Ruby の最新版をインストールしてみます。


まず、rbenv は GitHub から提供されていることもあり、git の入手が必須です。まだ導入できていない場合はこのコマンドで git を導入してください:
# yum install git

そして git を使って GitHub から rbenv をチェックアウトします。今回は /opt/ 以下に Ruby をインストールするという前提にします:
# cd /opt
# git clone git://github.com/sstephenson/rbenv.git

続けて ruby-build プラグインを rbenv の plugins フォルダにインストールします:
# mkdir /opt/rbenv/plugins
# cd /opt/rbenv/plugins
# git clone git://github.com/sstephenson/ruby-build.git

最後に /etc/profile に以下の3行を追加して、rbenv を初期化&実行するための環境設定を行います:
export RBENV_ROOT="/opt/rbenv"
export PATH="${RBENV_ROOT}/bin:${PATH}"
eval "$(rbenv init -)"

ここまでの作業で rbenv の導入が完了しました。再ログインするとか、シェルを再起動するなりして最後の環境設定までが反映された状態にしてください。

更に、この後の作業で必要になるモジュールを(エラーが出る前に)yum でインストールしておきます:
# yum install gcc make openssl-devel libffi-devel

ここまでの準備ができていれば Ruby のインストール作業に移れます。まずは rbenv でインストールできる Ruby のバージョン一覧を確認してみます:
# rbenv install -l
Available versions:
  1.8.6-p383
  1.8.6-p420
  1.8.7-p249
  1.8.7-p302
  1.8.7-p334
  1.8.7-p352
  1.8.7-p357
  1.8.7-p358
    :
    :
  2.1.5
  2.2.0-dev
  2.2.0-preview1
  2.2.0-preview2
  2.2.0-rc1
  2.2.0
  2.3.0-dev
  jruby-1.5.6
    :
    :
  ree-1.8.7-2012.02
  topaz-dev

JRuby とかもリストされてますが、今回は普通(?)の Ruby だけで考えます。バージョン番号に rc とか dev とか preview とか付いているのは開発中のものだったりします。この一覧を見る限り安定版では 2.2.0 が最新のようなので、これをインストールしてみましょう(結構時間かかります):
# rbenv install 2.2.0
Downloading ruby-2.2.0.tar.gz...
    :
    :


そして、この Ruby 2.2.0 をシステムで使うデフォルトバージョンとして設定した上で動作確認します:
# rbenv global 2.2.0
# ruby -v
ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-linux]

Ruby 2.2.0 が導入できました! 


この後で別のバージョンが必要になった場合は同様に
# rbenv install X.X.X

でインストールし、
# rbenv global X.X.X

でデフォルトバージョンを変更できます。







 

KVM(Kernel-based Virtual Machine) は CentOS/RHEL(RedHat Enterprise Linux) 環境に標準装備の仮想ハイパーバイザーです。わかりやすく言えば、VMWare Server のような機能がカーネルにはじめから用意されている(はじめから有効にはなっていない)ので、CentOS/RHEL でも、それ以外の Linux ディストリビューションでも単体で仮想環境を構築することができます。 僕も自宅の個人環境で使っています。KVM 環境の構築手順はこちらのエントリを参照ください:
CentOS に KVM 環境を構築する


KVM には GUI/CUI 両方の管理ツール/コマンドが用意されていて、仮想イメージのクローン(複製)なども行うことができます。ただこの複製ツールが手軽に使えるかというと、実用上ちょっとした問題がありました。
2015021801


その問題点は、この「複製」というのは「仮想イメージをまるごと複製」するのですが、ホスト名と MAC アドレスまでまるごと複製してしまう、という点でした。つまりあるサーバーインスタンスのイメージを複製すると、同じホスト名で、同じ MAC アドレスのネットワークインターフェースを持った異なるサーバーが用意される、ということです。 またネットワーク設定も複製されるため、例えば固定 IP アドレスが設定されている環境であれば同じ IP アドレスが割り振られることになりますし、DHCP 設定だとすると、同じ MAC アドレスのサーバーが別に存在していることになり、DHCP サーバーからは区別ができません(結果、正しい IP アドレスが取得できず、ネットワークが使えない状態で起動してしまいます)。


要は、複製コマンドそのものに問題があるわけではない(むしろ、複製という意味では正しい)のですが、イメージを複製した後にホスト名と MAC アドレスを変更したい(そこまで含めて自動化したい)のです。ただホスト名は AAA から BBB に変更すればよい、という正解が決まっているのでいいとして、MAC アドレスは変更したいといっても「では変更後の値を何にするのか?、一意に生成できるのか?」という問題もあったりして単純ではありません。またこれらの処理を自動化するとなると、起動していない仮想サーバーイメージ内のファイルシステムを外から操作することになるので、これも特殊なコマンドを使うことになります。その辺りを含めてシェルスクリプト化するまでを紹介します。


というわけで、目標として今回は clone-guest.sh というシェルスクリプトを作って、
# clone-guest.sh AAA BBB
というコマンドで、AAA という仮想マシンイメージを BBB という仮想マシンに複製できるようにします。複製そのものは /usr/bin/virt-clone コマンドを使えばできるのですが、その際に BBB は AAA とは異なる MAC アドレスを持っているように変更します。また複製後にこの BBB を自動起動するようにしてみます。また今回作成するシェルスクリプトでは複製の対象を CentOS/RHEL とします(これらのシステムを前提として MAC アドレス変更の処理を追加するためです)。


まず最初に「そもそもホスト名と MAC アドレスの変更ってどうやるの?」という疑問が生じます。ホスト名については CentOS/RHEL では /etc/sysconfig/network 内に HOSTNAME=**** として記載されているので、ここを書き換えるだけで済みます。具体的には例えば複製元の /etc/sysconfig/network に HOSTNAME=AAA.domain.com のような記載が含まれていたら、複製先では HOSTNAME=BBB.domain.com と書き換えればいい、ということになります。

一方、MAC アドレスはちと複雑です。まず MAC アドレスを書き換える必要のあるファイルが、
 - /etc/sysconfig/network-scripts/ifcfg-eth0
 - /etc/udev/rules.d/70-persistent-net.rules
の2つあります。更に書き換え後の MAC アドレスは現在とは異なる一意の値にする必要があるため、どのように生成するか、という問題も含まれているのでした。ここは詳しくは後述しますが /usr/bin/uuidgen コマンドを使って動的に取得するようにします。
 

次に、起動していない仮想イメージファイル内のファイルシステムへどのようにアクセスするか? ですが、こちらは KVM 標準の以下のコマンドを活用して実現します:
- /usr/bin/virt-cat     外部から仮想イメージ内の特定ファイルに対して cat を実行する
- /usr/bin/virt-copy-in 外部から仮想イメージ内の特定ファイルにコピーする

これらのツールと、KVM の一般的な仮想管理コマンドである virsh(/usr/bin/virsh) を組み合わせて、clone-guest.sh を以下のような内容で作りました。青字は僕のコメントです:
#!/bin/sh

# 作業ディレクトリ
work_dir=/tmp/clone-guest

# この作業で使う各種コマンド
cmd_awk=/bin/awk
cmd_cat=/bin/cat
cmd_cut=/bin/cut
cmd_grep=/bin/grep
cmd_mkdir=/bin/mkdir
cmd_sed=/bin/sed
cmd_uuidgen=/usr/bin/uuidgen
cmd_arp=/sbin/arp
cmd_virsh=/usr/bin/virsh
cmd_virt_cat=/usr/bin/virt-cat
cmd_virt_clone=/usr/bin/virt-clone
cmd_virt_copy_in=/usr/bin/virt-copy-in

source_bridge=br0 # KVM のブリッジインターフェース名(デフォルトだと virbr0)
original_domain_name=$1 # 複製元(AAA)
clone_domain_name=$2 # 複製先(BBB)

# 仮想イメージのあるディレクトリ
domain_image_dir=/var/lib/libvirt/images
clone_domain_image_path=$domain_image_dir/$clone_domain_name.img # 複製先仮想イメージファイル


# パラメータを2つ(複製元と複製先)指定して実行していることを確認
if [ "$clone_domain_name" = "" ] ; then
echo "Usage: clone-guest.sh <domain_name> <clone_name>"
exit 0
fi

# 作業ディレクトリが存在していなかったら作成
[ ! -e $work_dir ] && $cmd_mkdir -p $work_dir


# virt-clone コマンドで普通に複製
$cmd_virt_clone \
  --original $original_domain_name \
  --name $clone_domain_name \
  --file $clone_domain_image_path 

# 複製前の仮想イメージ内の /etc/sysconfig/network を取り出して作業ディレクトリに保存
$cmd_virt_cat -d $original_domain_name \
  /etc/sysconfig/network \
  > $work_dir/network.org

# 複製前の仮想イメージ内の /etc/sysconfig/network-scripts/ifcfg-eth0 を取り出して作業ディレクトリに保存
$cmd_virt_cat -d $original_domain_name \
  /etc/sysconfig/network-scripts/ifcfg-eth0 \
  > $work_dir/ifcfg-eth0.org

# 複製前後の仮想イメージの MAC アドレスを取り出す
original_mac_addr=$( \
$cmd_virsh domiflist $original_domain_name \
| $cmd_grep $source_bridge \
| $cmd_awk '{print $5}' \
)
clone_mac_addr=$( \
$cmd_virsh domiflist $clone_domain_name \
| $cmd_grep $source_bridge \
| $cmd_awk '{print $5}' \
)

# 複製前後の仮想イメージの UUID を取り出す
original_nic_uuid=$( \
$cmd_cat $work_dir/ifcfg-eth0.org \
| $cmd_grep -i uuid \
| $cmd_cut -d'=' -f2 \
| $cmd_sed 's/"//g' \
)
clone_nic_uuid=$($cmd_uuidgen)

# 複製後の仮想イメージの ifcfg-eth0 を書き換え
$cmd_cat $work_dir/ifcfg-eth0.org \
| $cmd_sed -e "s/$original_mac_addr/$clone_mac_addr/i" \
-e "s/$original_nic_uuid/$clone_nic_uuid/i" \
> $work_dir/ifcfg-eth0

# 複製後の仮想イメージに書き換え後の ifcfg-eth0 を書き戻す
$cmd_virt_copy_in -d $clone_domain_name \
  $work_dir/ifcfg-eth0 \
  /etc/sysconfig/network-scripts/

# 複製前の仮想イメージ内の /etc/udev/rules.d/70-persistent-net.rules を取り出して作業ディレクトリに保存
$cmd_virt_cat -d $original_domain_name \
  /etc/udev/rules.d/70-persistent-net.rules \
  > $work_dir/70-persistent-net.rules.org

# 複製後の仮想イメージの 70-persistent-net.rules を書き換え
$cmd_cat $work_dir/70-persistent-net.rules.org \
  | $cmd_sed "s/$original_mac_addr/$clone_mac_addr/i" \
  > $work_dir/70-persistent-net.rules

# 複製後の仮想イメージに書き換え後の 70-persistent-net.rules を書き戻す
$cmd_virt_copy_in -d $clone_domain_name \
  $work_dir/70-persistent-net.rules \
  /etc/udev/rules.d/

# 複製後の仮想イメージの network を書き換え
$cmd_cat $work_dir/network.org \
| $cmd_sed -e "s/$original_domain_name/$clone_domain_name/i" \
> $work_dir/network

# 複製後の仮想イメージに書き換え後の network を書き戻す
$cmd_virt_copy_in -d $clone_domain_name \
  $work_dir/network \
  /etc/sysconfig/

# 複製後の仮想イメージを起動
$cmd_virsh start $clone_domain_name

echo "Clone $clone_domain_name has been started."
exit 0

sed だの awk だのを駆使してなんとか作った、という感じです(苦笑)。あとはこのファイルを clone-guest.sh という名前で保存し、実行権限を与え、パスの通ったディレクトリに置いておけば、
# clone-guest.sh AAA BBB

という感じで、既存の AAA という仮想環境を BBB という名前で複製して、各種設定ファイルまで書き換えて、起動する、という使い方ができるはずです。 ここまでできるようになると、KVM もかなり便利に使えてます。










 

どこからでもアクセスできるクラウド上に自分のデスクトップ環境があると便利ですよね。

その OS が Windows であれば、(外部からアクセスできるようにするだけなので)環境構築自体はさほど難しくないと思います。ただ Windows の仮想環境は(Windows サーバーのライセンス代が無条件で付いてくるため)安くありません。業務上の選択肢としてはまだしも、個人の環境としてはちと非現実的です。 一方、CentOS で実現できると、多くのクラウドベンダーで無料期間が用意されていたり、安く使えたりするので個人開発者としては嬉しいわけです。一方で、主にサーバー用途向けに用意されているインスタンス上にデスクトップクライアント環境を用意するのはちょっと面倒ではあります。そもそもサーバー用途ならコマンドラインインターフェースで充分なのですが、デスクトップクライアントとなるとウィンドウシステム必須です。日本語環境が用意されているとも限りません。なので、これらからのインストールが必要になります。


というわけで、クラウド上の CentOS サーバーを、日本語デスクトップ環境に改造するまでの手続きを紹介します。具体的には IDCF クラウドの CentOS 6(64bit) を使い、以下のパッケージを追加インストールします(サーバー用途でも使いそうなパッケージはこのリストからは抜いています。必要であれば別途導入してください):
パッケージ名用途
X Window Systemウィンドウシステム
DesktopGNOME デスクトップ環境
Japanese Support日本語環境
Tiger VNC ServerVNC サーバー
LibreOfficeオフィススイート
Eclipse + JDK統合開発環境
Firefoxウェブブラウザ
Alacarteメニューカスタマイズ用ツール


まず最初に、今回作成するデスクトップ環境へは VNC を使って外部からウィンドウシステムにアクセスします。というわけで VNC 用にポートフォワード設定が必要になります。今回は 5901 番ポートで設定するので、各種クラウドのファイアウォールやポートフォワード設定で 5901 番ポートを通すように設定してください(図は IDCF クラウドでのファイアウォール設定画面ですが、使っている環境で同様の設定をしてください):
2015020603


次に日本語デスクトップ環境を構築するためのモジュールを導入します。SSH で root ログインし、以下の手順を実行します:
(リスト内の上3つのグループモジュールをまとめて導入)
# yum groupinstall "X Window System" "Desktop" "Japanese Support"

ここまでで X Window System と GNOME デスクトップ、そして日本語環境が導入されます。されますが、このままでは SSH でのみリモートアクセスできるだけで、X Window の画面を開く術がありません。せっかく X Window まで導入したので VNC を使ってウィンドウシステムを利用できるようにしましょう。このサーバーインスタンス内には VNC サーバーを導入して、5901 番ポートでアクセスできるようセットアップします:
(VNC サーバーを導入)
# yum install tigervnc-server

導入した VNC サーバーを設定します。今回は root 権限で VNC サーバーにアクセスする例を紹介しますが、一般ユーザーでアクセスする場合も同様にしてそのユーザーを指定して行ってください:
(VNC サーバーの設定変更)
# vi /etc/sysconfig/vncservers

(以下の2行のコメントを外して編集(この例では root で接続))
VNCSERVERS="1:root"
VNCSERVERARGS[1]="-geometry 1024x768 -nolisten tcp"

(VNC サーバーの接続パスワードを設定) # vncpasswd (パスワードを2回入力して設定)

設定後、改めて VNC サーバーを起動します:
(VNC サーバーの起動)
# /etc/init.d/vncserver start

起動に成功すると ~/.vnc/xstartup というファイルが作成されるので、このファイルを編集して GNOME セッションの画面をそのまま VNC で流せるように変更します:
(VNC サーバーの設定変更)
# vi ~/.vnc/xstartup

(#!/bin/sh の直下に以下の一行を追加)
export LANG="ja_JP.UTF-8"

  :
  :

(最後の2行をコメントして、その下に1行追加)
#xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#twm &
gnome-session &

最後に VNC サーバーの自動起動を ON にして、サーバーインスタンス自体を再起動します:
(VNC サーバーの自動起動)
# chkconfig vncserver on

(再起動)
# shutdown -r now

サーバーが再起動した頃を見計らって、今度は VNC クライアント(ここでは UltraVNC プロジェクトの UltraVNC Viewer)を使ってアクセスしてみます。UltraVNC Viewer をインストール&起動して、接続情報に CentOS マシンの IP アドレス:1 を入力します(最後はコロンと1):
2015020604


パスワードを聞かれたら、上記 vncpasswd コマンド実行時に指定したパスワードを入力します:
2015020605


これで X Window System 上の GNOME デスクトップ画面が表示されるはずです。ここからは GUI が使えるようになりました!:
2015020606


この時点で日本語表示はできますが、まだ日本語入力はできないと思います。そこで日本語入力のための設定を行います。メニューから システム - 設定 - 入力メソッド を選択します:
2015020607


「入力メソッド設定ツール」が起動します。「入力メソッドの機能を有効にする」にチェックが入っていて、かつ入力メソッドに「IBus を使用する」が選択されていることを確認した上で「入力メソッドの個人設定」をクリックします:
2015020608


「IBusの設定」ウィンドウが開きます。「インプットメソッド」タブ内に「日本語 - Anthy」が含まれていることを確認して「閉じる」をクリックします:
2015020609


1つ前の画面に戻り、「閉じる」をクリックして設定ツールを終了します:
2015020610


今設定した内容を反映させるため、再度システムを再起動します。メニューの アプリケーション - システムツール - 端末を選んでターミナル画面を開き、再起動コマンドを入力します:
2015020611

(再起動)
# shutdown -r now

再起動した頃を見計らって、再度 UltraVNC Viewer でアクセス&ログインします。そして同様に端末を出した後にキーボードの CTRL+SPACE を押すと、画面上部のキーボード部分が日本語入力マークに切り替わり、同時にローマ字による日本語入力が可能になります。アルファベット入力に戻すには再度 CTRL+SPACE を押します:
2015020612


ここまでで、ほぼ日本語デスクトップ環境が整いました。後は必要そうな GUI アプリケーションを yum でインストールします:
(GUIアプリ(ここでは FireFox と LibreOffice と JDK)を導入)
# yum install firefox libreoffice java-1.7.0-openjdk-devel

実はこの後、統合開発環境の Eclipse を導入します。Eclipse 自体も yum で(yum install eclipse で)導入できるのですが、yum だと最新版でないことに加え、メニューのカスタマイズ方法と合わせて紹介したいので、Eclipse だけは別途最新版をダウンロードして導入します。Eclipse は不要であっても、ウィンドウのメニューに表示されないコマンドを表示させたい場合は以下の手順を参考にしてください。

改めて、この時点で FireFox, LibreOffice, JDK がインストールされて、メニューからも実行できるようになっているはずです:
2015020613
2015020614
2015020615


では改めて Eclipse をインストールします。最新版を導入したいので先ほど導入した FireFox を起動し、http://www.eclipse.org/downloads/ から最新版の Eclipse をダウンロードします:
2015020616


ダウンロードが完了すると(僕の環境では)eclipse-java-luna-SR1a-linux-gtk-x86_64.tar.gz というファイルができているはずです(異なるファイル名の場合は適宜読み替えてください)。これを適当なディレクトリ(以下の例では /opt/ 以下)に展開します:
(/tmp/ 以下にダウンロードモジュールがある場合のコマンド例)
# cd /opt
# tar xzvf /tmp/eclipse-java-luna-SR1a-linux-gtk-x86_64.tar.gz

これで /opt/eclipse/ というフォルダが作られ、その下に Eclipse 環境一式が作られているはずです。Eclipse 本体は /opt/eclipse/eclipse というファイルパスで実行できるようになっています。

ただ、この時点ではファイルを展開しただけなので、ウィンドウのメニューから Eclipse を実行することができません。yum で Eclipse をインストールすると、「プログラミング」メニュー内に Eclipse が作られる(ただし最新版ではない)ので、できれば同様に「プログラミング」メニュー内に Eclipse を追加したいものです。


というわけで、最後にメニューのカスタマイズ方法を紹介します。メニューのカスタマイズには alacarte というツールを使うと便利なので、まずは alacarte を yum でインストールして実行します:
(メニューカスタマイズツールを導入して)
# yum install alacarte

# alacarte

alacarte が起動すると、現在のメニュー内容が表示されます:
2015020617


今回は /opt/eclipse/eclipse を「プログラミング」メニュー内に追加したいので、左のメニューでは「プログラミング」を選択し、「新しいアイテム」ボタンをクリックします:
2015020618


追加したいアプリケーションの情報を入力します。種類はアプリケーション、名前は Eclipse 、そしてコマンドに実行コマンドの絶対ファイルパスを指定して、最後に「OK」ボタンをクリックします:
2015020619


1つ前の画面に戻り、「プログラミング」メニュー内に "Eclipse" が追加されたことを確認して「閉じる」をクリックします。これでメニューのカスタマイズができたはずです:
2015020620


実際にウィンドウのメニューを確認すると「プログラミング」メニュー内に "Eclipse" が追加されていることを確認できます:
 2015020621


実際に "Eclipse" を選択すると、指定された実行ファイルが呼び出されて Eclipse が起動するはずです:
2015020622


ざっとこんな感じ。一般的にはサーバー用途で使うクラウドの CentOS 環境に日本語デスクトップ環境を構築してメニューのカスタマイズまで行う手順を紹介しました。GUI へは VNC を使ってアクセスするので、Android や iPad などのタブレットにキーボードさえ付けておけば、後は各種 VNC クライアントをインストールしていれば、それらのモバイル環境からこのデスクトップ環境を呼び出して使うことだってできちゃいます。最近は Linux のデスクトップアプリケーションも充実してきており(個人的にはゲームだけがまだまだ、だと思ってます)、手軽にタブレットさえ持ち運んでいればそこそこ使えると思っています。

なお Amazon EC2 の場合、MarketPlace から CentOS を選んで導入すれば同様の手順で同じような環境が構築できると思っています。ただ Amazon AMI から提供される Amazon Linux の場合、X Window を導入できるかどうかは未確認です。 また、ここで紹介した手順は CentOS に限らず RHEL(RedHat Enterprise Linux) でも使えます。私自身は Power Linux の RHEL で同様のデスクトップ環境を構築したこともあるので、ある程度の所まではできると思っています。


私個人はここで紹介したアプリに加えて、GIMP とか Sublime Text とか IBM Notes とかといった GUI 前提のクライアントアプリケーションも導入して使ったりしています。ここで紹介しなかったアプリケーションについても、ここで紹介した方法の応用で導入できるのでは、と思っています。






謎だった Power 版 RHEL(RedHat Enterprise Linux) での MongoDB の動かし方が分かりました!

これまでは「CPU のエンディアンの違いにより MongoDB が動かなかった」と思っていたのですが、IBM のダウンロードサイトで Power 版 RHEL 向けビルド済み rpm パッケージの存在を確認しました。これを使います。


まず準備段階として Power 版 RHEL 環境を用意します。・・・といっても普通の人はそんな環境持ってないですよね(苦笑)。 2週間のお試し程度であれば、開発者向けサービスである IBM Power Development Cloud を利用して環境を構築することも可能です。 その場合の手順はこちらのブログエントリを参照ください:


Power 版 RHEL の準備ができたら早速 MongoDB を導入しましょう。といっても特別な作業ではなく、必要な rpm パッケージを IBM からダウンロードしてインストールするだけです。Intel 版 RHEL と異なるのはファイル名のアーキテクチャ部分が i686 とか x86_64 とかではなく、ppc64 になっていることくらいです。あと現在用意されている MongoDB はバージョン 2.4.9(RC0) のようです:
# cd /tmp
# yum install wget boost-devel
# wget ftp://ftp.software.ibm.com/linux/rpms/redhat/6.5/v8-3.14.5.10-2.el6.ppc64.rpm
# wget ftp://ftp.software.ibm.com/linux/rpms/redhat/6.5/libmongodb-2.4.9-1.el6.ppc64.rpm
# wget ftp://ftp.software.ibm.com/linux/rpms/redhat/6.5/mongodb-server-2.4.9-1.el6.ppc64.rpm
# wget ftp://ftp.software.ibm.com/linux/rpms/redhat/6.5/mongodb-2.4.9-1.el6.ppc64.rpm
# rpm -ivh v8-3.14.5.10-2.el6.ppc64.rpm
# rpm -ivh libmongodb-2.4.9-1.el6.ppc64.rpm
# rpm -ivh mongodb-server-2.4.9-1.el6.ppc64.rpm
# rpm -ivh mongodb-2.4.9-1.el6.ppc64.rpm

これで MongoDB のインストールは完了です。念のため、導入先を確認しておきましょう:
# which mongod
/usr/bin/mongod
# which mongo
/usr/bin/mongo

MongoDB の起動はコマンドラインから、以下の内容を実行します:
# mongod --dbpath /var/lib/mongodb

実行するとサーバーコンソールのようにメッセージがずらずらと・・・出てくればサービスの起動成功です。ちなみにサービスの終了は CTRL + C です。
2014121001


Mongo クライアントは何の違いも感じずに使えます:
2014121002


この Power 版 RHEL 向け MongoDB はいつから用意されてたんだろう? ともあれ、これで Power 版の RHEL でも MongoDB が動くことが確認できました。本当に Intel 版との違いがなくなりつつあることを実感します。


そして、これはつまり MongoDB に対応したフレームワーク(cakePHPとか)を Power 版 RHEL で動かすことができるようになったのかな?? とも思っているのですが、実際 cakePHP で使ってみると Intel 版では見たことのないエラーメッセージに遭遇したりして、まだもう少し待った方がいいのかな、とも思ってたりします。要はちゃんと動かして調べましょう、ということで。


最後に、自分が業務で開発に携わっている公開済みサービスがこの Power 版 RHEL 環境でもある程度動いたので記念アップ!
2014121003

 

IBM Notes を Linux で使いたい、、という需要がどれだけあるかわかりませんが、その導入方法は Windows での場合と比べてちとクセがあります。というわけで、その一連の手順を紹介します。念のため繰り返しますが、Linux にインストールするのは IBM Domino サーバーではなく IBM Notes クライアント、の説明です。


なお、以下で紹介する手順で使う Linux はいろんなクラウドからも提供されていて入手しやすい RHEL(RedHat Enterprise Linux)または CentOS (64bit、バージョンは6)とします。IBM 的には RHEL での動作のみサポートしていて、CentOS はサポート外ですので注意してください。また Notes ID ファイルなどは既に手元にあるものとします。

まず、何はともあれ、RHEL 版(正確には RHEL へのインストールを考慮して用意された rpm 版)の IBM Notes 本体を入手する必要があります。購入するなどして既にお持ち/入手可能な方は読み飛ばしてください。まだお持ちで無い方は無料トライアル版が用意されているのでそちらを使いましょう。IBM developerWorks無料トライアルダウンロードから "Download trial" ボタンをクリックして、IBM ID とパスワード(取得していない場合はこちら(PDF)を参照して無料登録してください)を入力して進んでいくと、どの地域/バージョンの IBM Notes をダウンロードするか、が聞かれます。ここでは現時点で提供されている中では最新版であるバージョン 9.0.1 の "Asia Pacific" 地域を選択して先に進みます:
2014102101


※もちろん英語版を希望する場合は English を選択するなどして、これ以降も適宜読み替えてください。

更に先に進んだ先でサーバー(Domino)かクライアント(Notes)か、プラットフォーム、そして言語を指定します。ここでは Notes クライアントでプラットフォームは rpm 、そして言語に Japanese を選択してダウンロードします。インストール先のシステムが既に用意されている場合は、ダウンロード後は Notes ID などと一緒に SFTP などで転送しておきます:
2014102102


ここでは上記の NC_V9.0.1_LnxRPM_I_JAEva.tar をダウンロードしたものとして、このファイルを目的のサーバーの /tmp 以下に転送済みであるものとします。

次にインストール先システムでの事前準備です。RHEL/CentOS をこれから(ゼロから)インストールするのであれば、最初から日本語デスクトップ利用を前提としたオプションでインストールしてください。AWS など、既に OS がインストール済みのインスタンスを使う場合は、おそらくサーバー用途用の最小構成になっていると思われるので、デスクトップ用に足りないライブラリ等を追加します。具体的には SSH やターミナル等のコマンドラインからこんな感じでしょうか:
# yum groupinstall "X Window System" (X Window)
# yum groupinstall "Desktop" (クライアントデスクトップ)
# yum groupinstall "Japanese Support" (せっかくなので日本語サポート機能も)

日本語サポートまで導入した場合は /etc/sysconfig/i18n を編集して、環境変数 LANG の値を日本語 UTF-8 に指定して再起動します:
LANG="ja_JP.UTF-8"

次に IBM Notes 実行時用のユーザーを作成します。IBM Notes のインストールには root 権限が必要ですが、root ユーザーでは実行できません。別の一般ユーザーが作成済みで、そのユーザーを使うのであればそのユーザーを決めておきます。新たに IBM Notes 実行用のユーザーを作成する必要がある場合は、以下のコマンドで作成します(この例では notesuser というユーザーを新規に作成しています):
# adduser notesuser
# passwd notesuser
  :


また、IBM Notes のインストール作業からはデスクトップ環境が必要になります。必要なライブラリは上記で導入できていますが、SSH などのコマンドラインだけではできない作業が含まれています。実機にアクセスして GNOME のデスクトップを開ける場合はいいのですが、SSH などのリモートコンソールでしか接続出来ない場合は VNC 環境も用意しましょう。RHEL/CentOS への VNC の導入方法についてはこちらを参照ください:
CentOS に VNC サーバーを導入する

これも実機に直接触れる環境があればいいのですが、クラウドなどで VNC 環境を構築する場合の注意点として、上記にもあるように root ユーザーでは IBM Notes を実行できません。一般ユーザー権限で IBM Notes を実行する必要があるため、VNC の接続時にも root 以外の(IBM Notes 用に用意した)一般ユーザーの権限で VNC 接続するよう設定する必要があります。


上記ページの最後の部分までできると、Windows などのリモート環境から今回 IBM Notes をインストールする目的のマシンの GNOME デスクトップが開けるようになっていることになります:



さて、ここからが IBM Notes のインストール作業です。ここからは SSH などのテキストコンソールではなく、実機のモニターや VNC 接続などを使って X Window ベースのデスクトップ環境を開いた上での root 権限で行う必要があります。

まずは IBM developerWorks 等からダウンロードしたインストールモジュールファイルを tar 一時ディレクトリに展開します:
# mkdir /tmp/n9
# cd /tmp/n9
# tar xvf /tmp/NC_V9.0.1_LnxRPM_I_JAEva.tar

展開後のファイルの中に notes.ja.sh(ja 部分は言語によって変わります)というインストール用シェルスクリプトがあるので、これを実行してインストールします。このシェルスクリプトを実行することで必要な rpm を順次導入してくれます:
# ./notes.ja.sh

が、このまま普通に実行すると依存性に関するエラーが大量にでるはずです(実際の出力内容は環境によって異なります): 
エラー: 依存性の欠如:
 gdb は ibm_notes_9.0.1-20131022.1138.i586 に必要とされています
 tcsh は ibm_notes_9.0.1-20131022.1138.i586 に必要とされています
 libart_lgpl_2.so.2 は ibm_notes_9.0.1-20131022.1138.i586 に必要とされています
 libasound.so.2 は ibm_notes_9.0.1-20131022.1138.i586 に必要とされています
 libatk-1.0.so.0 は ibm_notes_9.0.1-20131022.1138.i586 に必要とされています
 libbonobo-2.so.0 は ibm_notes_9.0.1-20131022.1138.i586 に必要とされています
 libbonobo-activation.so.4 は ibm_notes_9.0.1-20131022.1138.i586 に必要とされています
 libnonoboui-2.so.0 は ibm_notes_9.0.1-20131022.1138.i586 に必要とされています
 libcript.so.1 は ibm_notes_9.0.1-20131022.1138.i586 に必要とされています
  :
  :

ここでXXX は ibm_notes_9.0.1-****** に必要とされています」と表示される XXX の部分は、IBM Notes の動作およびインストール時に必要なモジュールであるにも関わらず、まだ同システムに導入されていないもの、いわば「足りないものリスト」です。この内容は同環境に今何がインストールされているか/されていないか によっても変わるので、人によって少なかったり多かったりします。いずれにせよ、ここで表示されるライブラリの一覧を導入しきらない限り IBM Notes はインストールできません。

上記例であれば以下の様な感じで、足りないものを順次、気長に yum でインストールしていきます:
# yum install gdb
# yum install tcsh
# yum install libart_lgpl_2.so.2
# yum install libasound.so.2
#  :

なお、あるモジュールをインストールすることで一緒に他のモジュールが導入されることも珍しくありません(インストール済みだった場合には yum コマンドの結果、"already installed" と表示されます)。エラーとして表示される全てのモジュール回数分だけ繰り返す必要はないと思います。

そして、全ての前提ライブラリの導入が終わったら、再度 IBM Notes のインストールコマンドを実行します:
# ./notes.ja.sh

前提ライブラリの導入漏れがなければインストーラが実行されていきます:
2014102103


Step1 から Step3 までが無事に終わると、インストールは完了です。ちなみにデフォルト設定ではプログラムは /opt/ibm/notes 以下にインストールされています:
2014102104

インストールが完了したので、とうとうセットアップです。ここからは root でない、一般ユーザーの GNOME(X Window) デスクトップ環境で作業することになる点を再度留意してください。

まずメニューから アプリケーション > オフィス(!?) > IBM Notes ができているはずなのでこれを選択します:
2014102105

スプラッシュスクリーンが表示されて、セットアップが開始されます:
2014102106

このようなウィンドウが表われて、使用条件が表示されます。内容を確認して、同意する場合は 1 続いて Enter を押します:
2014102107

Windows/Mac OS X 環境ではお馴染みのセットアップが開始されます:
2014102108

これ以降は基本的に Windows や Mac OS X での作業と変わりありません。Domino サーバーを指定して、ユーザーを指定して、Notes ID ファイルを指定して、パスワードを入力して、・・・という順にセットアップを行っていくだけです。


そして、最終的にセットアップが完了すればノーツクライアントが RHEL/CentOS 上で起動します。次回起動時はメニューから同じ項目を選択すればセットアップを飛ばして起動できます:
2014102109


こうなると今度は、現在 WIndows でしか使えない Domino Designer クライアントや Domino Administrator クライアントも欲しくなる。後者は Web でできないこともないけど、前者は Windows 必須なので。

それにしても IBM Notes って「オフィス」に分類されてるんだ、ふーん。。。

LibreOffice をインストールすると IBM Notes と Office スイートが同じメニューカテゴリに入るのがなんか違和感あるんだよな。。
 2014102110

このページのトップヘ