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

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

タグ:linuxone

メインフレーム(IBM z Systems)上で動く Linux である IBM LinuxONE の上で Node.js を動かすことに挑戦してみます。環境は IBM LinuxONE のクラウドサービスである IBM LinuxONE コミュニティクラウドの、RHEL 6.x のサーバーインスタンスを使うことにします。

なお IBM LinuxONE コミュニティクラウド上に RHEL 6.x サーバー環境を構築する手順についてはこちらを参照ください:
IBM LinuxONE コミュニティクラウドを使う(2017年1月版)


まず、そもそも LinuxONE 上に Node.js をインストールできるのか!? という問題があります。yum のリポジトリが用意されているわけではないし、ソースからビルドするのもライブラリが充分ではなかったりします。さて、どうするか・・・

実は Node.js に関しては IBM SDK for Node.js という形で、IBM から多くのプラットフォーム向けインストーラーバイナリが提供されています。LinuxONE もその対象プラットフォームの中の1つなのでした:
https://developer.ibm.com/node/sdk/


上記サイトからは x86 の Linux や Windows, Mac OS だけでなく、 AIX や Power Linux、そして LinuxONE 環境で動く Node.js の各バージョンがバイナリの形で提供されています。

実際には全てのバージョンが全ての環境で動作するわけではありません。例えば Node.js V6 の場合は以下のプラットフォームで動くものが提供されています。LinuxONE(IBM 64-bit z Systems) の RHEL の場合、7.x だけが動作環境に指定されています(他に SLES 12 と Ubuntu 16.04 で動きます。RHEL 6.x ではライブラリが足りないので動かないようです):
2017011601



逆に LinuxONE の RHEL 6.x で動く最も上位のバージョンを探してみると・・・ Node.js V1.2 であれば動きそうでした:
2017011602


というわけで、以下のサイトから LinuxONE(Linux on System z 64-bit) 向けの IBM SDK for Node.js V1.2 の最新版モジュールをダウンロードします。私がダウンロードした時点では ibm-1.2.0.17-node-v0.12.18-linux-s390x.bin というファイルがダウンロードできました。以下このファイルをダウンロードした前提で説明しますが、バージョンが異なっている場合は適宜読み替えてください:
https://developer.ibm.com/node/sdk/#v12

2017011603


ダウンロードしたファイルに管理者権限で実行権限を与え、実行します:
# chmod +x ibm-1.2.0.17-node-v0.12.18-linux-s390x.bin
# ./ibm-1.2.0.17-node-v0.12.18-linux-s390x.bin

後は画面の指示に従ってインストールするだけ。指定箇所があるとすればインストール先フォルダですが、私は /data/ibm/node というディレクトリを指定しました。

インストールが完了したら実行します。まずは IBM SDK for Node.js のバージョンを確認してみましょう:
# cd /data/ibm/node/bin
# ./node -v
v0.12.18

上記のように "v0.12.18" というバージョン名が表示されればインストール成功です! 後は /etc/bashrc などでパスを通しておけば、コマンドプロンプトから便利に使うことができるようになります:
# vi /etc/bashrc

    :
(以下の3行を最後に追加)
    :
# node.js
export NODEJS_HOME=/data/ibm/node
export PATH=$PATH:$NODEJS_HOME/bin

なお、npm(node package manager) コマンドも node と同じディレクトリに入っているので同様に使えるようになります。




前回、LAMP 環境を構築した IBM LinuxONE サーバーを使って、PHP のメジャーな MVC フレームワークの1つであるCakePHP の環境を整えてみます:
IBM LinuxONE コミュニティクラウド上で LAMP 環境を作る


まず CakePHP を動かす場合の PHP 設定を行います。/etc/php.ini を適宜変更するのですが、最低限やっておかないといけないのが、タイムゾーンの設定です。/etc/php.ini を編集して、以下の設定を加えます([Date] カテゴリ内でコメントアウトされている Date.timezone の設定からコメントを外し、"Asia/Tokyo" に設定して保存します:
$ sudo vi /etc/php.ini

  :
  :
[Date]
Date.timezone = "Asia/Tokyo"
  :
  :

また CakePHP では PHPUnit というモジュールを使うことになるので、これもインストールしておきます。前回の LAMP 環境構築時に pear もインストールしているので、pear を使って PHPUnit を導入します:
$ sudo pear install pear/PHPUnit

次に MySQL の設定を行います。まずは文字コードの設定を変更して、デフォルトで UTF-8 を使えるようにします:
$ sudo vi /etc/my.cnf

[mysqld]
character-set-server=utf8

[mysql]
default-character-set=utf8



今回は CakePHP 専用のデータベース(cakedb)を新たに作成し、その中に商品情報を格納するマスターテーブル(items)と、商品カテゴリを格納するマスターテーブル(categories)を定義することにします:
$ mysql -u root -p

mysql> create database cakedb default character set utf8;
mysql> use cakedb
mysql> create table items( id int primary key auto_increment, name varchar(50), category_id int, created datetime default null, modified datetime default null );
mysql> create table categories( id int primary key auto_increment, name varchar(50), created datetime default null, modified datetime default null );
mysql> quit

1つのデータベースと、2つのテーブルを作りました。必要に応じてこれらにアクセスできるユーザーなどを追加しましょう。

これら2つのマスターテーブルを操作できるような環境を CakePHP で作ることにしましょう。ここは必須ではありませんが、データベースを操作する上では phpMyAdmin があると便利です。IBM LinuxONE コミュニティクラウドのサーバーに phpMyAdmin 環境を導入する場合の手順はこちらの記事を参考にしてください:
IBM LinuxONE コミュニティクラウド上に phpMyAdmin を導入する


ではいよいよメインディッシュの CakePHP 環境を構築します。PHP 5.3 でも動くよう、CakePHP のバージョンは 2.x を使うことにします。またこれも Apache HTTPD のドキュメントルートがデフォルトのままの /var/www/html であるとして作業を紹介します:
$ https://github.com/cakephp/cakephp/archive/2.9.4.zip
$ sudo /bin/bash
# cd /var/www/html
# unzip ~linux1/2.9.4.zip
# mv cakephp-2.9.4 cakephp
# chmod 777 -R cakephp/app/tmp
# chmod 755 cakephp/lib/Cake/Console/cake
# cd cakephp/app/Config
# vi core.php

  :
  :
/**
 * A random string used in security hashing methods.
 */
        Configure::write('Security.salt', 'ABCDabcd1234');

/**
 * A random numeric string (digits only) used to encrypt/decrypt strings.
 */
        Configure::write('Security.cipherSeed', '1234567890');
  :
  :

最後の cakephp/app/Config/core.php の編集作業では 'Security.salt' の値と、'Security.cipherSeed' の値はデフォルトの(既知の)値のままだと危ないのでランダムな値に書き換えました。

続けて(カレントディレクトリが cake/app/Config/ の状態で)、更にデータベースの設定ファイルを用意して、自分の環境に合わせた設定を行います:
# cp database.php.default database.php
# vi database.php

  :
  :
class DATABASE_CONFIG {

        public $default = array(
                'datasource' => 'Database/Mysql',
                'persistent' => false,
                'host' => 'localhost',
                'login' => 'root',
                'password' => 'P@ssw0rd',
                'database' => 'cakedb',
                'prefix' => '',
                //'encoding' => 'utf8',
        );
  :
  :

↑具体的にはユーザー名(login)、パスワード(password)、データベース(database)の値を書き換えます。


CakePHP 自体はここまでの設定で動くはずです。必要に応じて DebugKit などの便利なプラグインを cakephp/app/Plugin/ 以下に追加で導入してください。DebugKit の導入に関してはこちらを参照ください:
https://github.com/cakephp/debug_kit/tree/2.2


ブラウザで http://(IPアドレス)/cakephp/ にアクセスすると、CakePHP のホーム画面が表示されます。緑と黄色のバーが並んでいる状態であれば、少なくとも設定は間違っていないことになります。下図では DebugKit まで導入して、全て緑になっている状態です:
2017010603

 

IBM LinuxONE コミュニティクラウド上に LAMP 環境のサーバーを作り、そのデータベースを管理するための phpMyAdmin を導入します。LAMP 環境を作るまでの手順は以下を参照してください:


LAMP 環境が出来てしまえば phpMyAdmin は普通に導入できるのでは・・・ と考える人がいるかもしれません。ほぼ正解ですが一点だけ注意点があります。

2017/Jan/06 時点では、IBM LinuxONE コミュニティクラウドの RHEL 6.x で提供されている PHP のバージョンは 5.3.3 です。一方で phpMyAdmin の最新バージョンは 4.6.5.2 ですが、こちらは PHP 5.5 以上を動作環境としています。つまり現時点の LinuxONE 環境では phpMyAdmin 最新バージョンの動作条件を満たすことができないのでした。

というわけで、PHP 5.3.3 でも動作できるバージョンの phpMyAdmin 4.0.x を用意する必要があります。この一点だけが注意点なのでした。


では改めて、こちらの手順を参考に IBM LinuxONE コミュニティクラウド上に作った仮想サーバーに SSH でログインします:
2017010403


では phpMyAdmin 4.0.x(2017/Jan/06 時点の最新版は 4.0.10.18)を導入します。Apache HTTP サーバーのドキュメントルートはデフォルトの /var/www/html であると仮定して、以下を実行します:
$ wget https://files.phpmyadmin.net/phpMyAdmin/4.0.10.18/phpMyAdmin-4.0.10.18-all-languages.zip
$ sudo /bin/bash
# cd /var/www/html
# unzip ~linux1/phpMyAdmin-4.0.10.18-all-languages.zip
# mv phpMyAdmin-4.0.10.18-all-languages phpMyAdmin
# exit

これで http://(IPアドレス)/phpMyAdmin/ にアクセスすれば phpMyAdmin にアクセスできます。必要に応じて認証をつけた上で運用してください:
2017010602



この記事の続きです:


IBM LinuxONE コミュニティクラウド上に作った仮想サーバーにいわゆる "LAMP"(=Linux + Apache HTTPD + MySQL + PHP) 環境を構築してみます。まずは上記記事を参考に仮想サーバーを作り、SSH でリモートログインします:
2017010403


ミドルウェアの導入作業を伴うため、ルート権限を持ったユーザーにスイッチしておきます:
$ sudo /bin/bash
#


LAMP 環境に必要なミドルウェアや言語環境をまとめて導入します(赤字はコメント):
# yum install httpd -y (Apache HTTP サーバー)
# yum install mysql-server mysql -y (MySQL)
# yum install php php-mbstring php-mysql php-gd php-pear php-xml php-devel -y (PHP)

また以下は LAMP 環境構築においては必須ではありませんが、使うことも多いというか、あると便利だと思うので必要に応じて導入しておいてください:
# yum install screen -y (screen)
# yum install git -y (git)
# yum install java-1.8.0-ibm-devel -y (JDK 1.8)

ミドルウェアを起動する前にファイアウォールの設定を行います。デフォルトの LinuxONE では iptables によるファイアウォールが有効になっており、このままでは http(s) によるアクセスができません。今回の環境では iptables を無効にしておきましょう:
# /etc/init.d/iptables stop
# chkconfig iptables off

あらためて各ミドルウェアを起動し、また自動起動設定をしておきます:
# /etc/init.d/httpd start
# /etc/init.d/httpd mysqld
# chkconfig httpd on
# chkconfig mysqld on
# exit
$

この時点で Apache HTTP サーバーが動いています。iptables の解除が成功していれば http://(IPアドレス)/ にアクセスすることができるようになっているはずです:
2017010601


さて、MySQL に関しては root のパスワードを設定しておきましょう。この例では P@ssw0rd というパスワードにしていますが、ここは必要に応じて変えてください:
$ mysql -u root

mysql> set password for root@localhost=PASSWORD('P@ssw0rd');
mysql> exit

これで LinuxONE 上でも LAMP の環境が作れました! ちなみに PHP のバージョンは 5.3.3 が導入できます:
$ php -v
PHP 5.3.3 (cli) (built: Dec 15 2015 04:50:47)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

メインフレーム(IBM z Systems)の Linux 環境である LinuxONE を無料で 120 日間試用できる IBM LinuxONE コミュニティクラウドを紹介します:
https://developer.ibm.com/linuxone/


なお、この記事は 2015 年 12 月に公開したこの記事に似ていますが、いくつか変更点があるため、内容を 2017 年1月時点の最新版にして書き直したものです:
LinuxONE Community Cloud を使う


予定としては、この LinuxONE コミュニティクラウドを使って、cakePHP が動く環境を構築する所までの一通りの手順を紹介しようと思っています。とりあえず今回は同環境にユーザー登録してサーバーを申し込み、そのサーバーにアクセスするまでの手順を紹介します。


まず、ユーザー登録を行うため、IBM LinuxONE Community Cloud にアクセスし、トップページの "Request your trial" と書かれたボタンをクリックします(Ubuntu 環境を選択する場合のみ右側の "Test drive it now" ボタンをクリックします):
2017010401


LinuxONE の申込画面に移動します。ここでは名前や住所、メールアドレスなどを英語で入力していきます。一番下のテキスト欄には申込みの利用目的を記載してください:
2017010402


画面下にスクロールし、2箇所のチェックボックスにチェックを入れます。そして SMS を受け取れる(つまり手元にある)携帯電話の番号を入力します。国番号は日本の "81" を選択し、電話番号の最初の 0 を除いた番号( 080 で始まる場合であれば 80 から)を記載して、"Get Code" ボタンをクリックします:
2017010403


しばらくすると、指定した携帯電話の SMS に数字の登録コードが送られてきます:
IMG_0163


先程の画面に戻り、入手した登録コードを "Get code" ボタンの右にあるフィールドに入力して "Request your trial" ボタンをクリックします:
2017010404


暫く待つと、指定したメールアドレスに登録結果が送られてきます。成功していると、LinuxONE コミュニティクラウドへのリンクと、ログイン時に指定する User ID (メールアドレス)およびパスワードが記載されています。これでサインアップは完了です:
2017010405


では IBM LinuxONE コミュニティクラウドにログインしてみましょう。メールで送られてきた URL にブラウザでアクセスし、サインイン画面が表示されたらメールで受け取った User ID とパスワードを入力して、"Sign in" ボタンをクリックします:
2017010406


正しくログインできると以下のようなトップ画面に移動します。今回はここから仮想サーバーを作成したいので、Virtual Servers の "Manage Instances" と書かれたボタンをクリックします:
2017010401


最初の段階ではまだサーバーが1つも存在してないはずなので、以下のような画面になります(作成後は簡易ステータス画面になります)。それでは LinuxONE のインスタンスを作成するため、この画面の "Create" ボタンをクリックします:
2017010402


Step 1 では最初にインスタンス名、次にその説明文を入力します。その下の Step 2 では OS のイメージを選択します(この図では RHEL 6.7 を選択していますが、SuSE Linux も含めて好きなディストリビューション/バージョンを選んでください):
2017010403


その下の Step 3 ではサーバースペックを選択します。そして Step 4 ではログイン時に利用する SSH 鍵を指定します。鍵ペアのファイルを手元に持っている場合はそれをアップロードしていただいても構いません。ここでは新規に作成する前提で紹介しますので "Create" をクリックします:
2017010404


鍵の名前を入力し、"Create a new key pair" ボタンをクリックします:
2017010405


PEM 形式の秘密鍵ファイルのダウンロードが始まるので、これを保存してください:
2017010406


作成した鍵は画面から選択できるようになっているはずです。この鍵を選んで、最後に "Create" ボタンをクリックしてください:
2017010407


元の画面に戻ります。先程はサーバーインスタンスが1つも存在していなかったのですが、作成したサーバーが準備されています(この時点ではまだ準備中です):
2017010408


数分待ってステータス(Status)欄が Active に変わるとサーバーインスタンスが準備完了です。IP Address 欄を見ると、このサーバーの IP アドレスが表示されていることも確認できます:
2017010409


ではこのサーバーにリモートログインしてみましょう。SSH クライアントを使って、確認した IP アドレスに接続します(図は Windows の Tera Term):
2017010401


認証ではユーザー名に "linux1" を指定します。パスフレーズはなしで、鍵ファイルに先程ダウンロードしたファイルを指定します:
2017010402


IBM LinuxONE コミュニティクラウドのサーバーにログインできました!
2017010403


念のため /proc/cpuinfo を cat してみます。アーキテクチャが IBM/S390 になっていて、メインフレームサーバーが使われていることがわかります:
2017010404


以前試した時は DNS の設定が不十分だったりして、ここから更にネットワークの環境設定が必要だったりしたのですが、現在ではそういったこともなく、このまま利用開始できるサーバーとなっています。

(注 2017/Jan/11 追記)
現在でも LinuxONE コミュニティクラウドの RHEL6 では DNS の設定が不充分でした。 /etc/sysconfig/network-scripts/ifcfg-eth0 の最後に以下の1行を加えるなりして、DNS サーバーを手動で設定する必要があります:
  :
  :
DNS1=8.8.8.8

この LinuxONE の環境は 120 日間使える仮想サーバーなので、色々な使い勝手があります。次回以降で LAMP としての環境構築も含めて紹介する予定です。



このページのトップヘ