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

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

タグ:linuxone

前回、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 としての環境構築も含めて紹介する予定です。



(注 この記事の内容は少し古くなってしまっています。2017年1月時点の最新内容はこちらからどうぞ)


メインフレーム(IBM z Systems)版 Linux 環境である LinuxONE が無償利用可能なクラウドコミュニティサービスとして公開されました:
https://developer.ibm.com/linuxone/


アプリケーション開発者や学生さんであれば、ユーザー登録するだけで LinuxONE 版の RHEL(RedHat Enterprise Linux) を最大90日間利用することができます(root 権限もあります)。メインフレーム版の Linux の使い勝手やパフォーマンス、そしてアプリケーション互換性など気になります。試しに自分も使ってみました。

日本語での利用ガイドはこちらにあります(PDF)。この手順で実際にアクセスできる環境の構築まではできますが、その後使ってみるとちょっと気になったので補足したり、実際に使い始めてみての印象も含めて自分なりの感想を書き綴ってみたつもりです:
http://www-03.ibm.com/systems/jp/resources/linuxone_cc-quick-start-guide.pdf


ちなみにこの環境はニューヨーク州ポケプシーにあるマリスト大学内に LinuxONE を設置して、ホスティング環境を提供いただいて実現しています。つまり接続先はニューヨークになります:
Marist College Partners with IBM and Linux Foundation to Support Linux on the Mainframe


では実際にユーザー登録して使ってみましょう。まずは LinuxONE Community Cloud サイトにアクセスして、トップページの "Register NOW" と書かれたボタンをクリックします:
2015121801



名前やメールアドレスなどの利用者情報を入力します。途中に携帯電話番号を指定する箇所があり、確認のためその携帯電話に送られる認証コードを入力して進める、という流れになっています:
2015121802



ここでの手続きが完了するとこのような画面になります。この後登録したメールアドレスに何通かのメールが順次送られてきます:
2015121803


そのうちの一通がこちらです。LinuxONE Community Cloud のダッシュボード画面への URL が記載されているのでメモしておきましょう:
2015121813


別メールでこのような内容が送られてきます。上記のダッシュボードにログインするための情報が記載されています:
2015121812



ここまでの情報が揃っていれば実際に LinuxONE Community Cloud を利用することができるようになります。上記のメールで送られてきた URL にブラウザでアクセスすると、このようなログイン画面が表示されます。別メールで送られてきた User ID とパスワードを指定してログインします:
2015121804


ログイン直後はこのような画面になります。OS イメージとか色々気になりますが、実際に作ったインスタンスにアクセスするには SSH 鍵ペアが必要になるので、最初に作って(登録して)おきます。"Access" と書かれたタブをクリックします:
2015121801


"Access" タブの "Key Pairs" 画面に移ると現在登録されている鍵の一覧が表示されます(この時点では何も登録されていないはずです)。新規に作成してもいいですし、手持ちの鍵ペアをインポートする形で登録しても、どちらでも構いません。私は自分が持っていた SSH 鍵をインポートして使うことにしたので後者の手順を紹介します(自分で鍵を作成する手順はこちらを参照ください)。画面内一番右の "Import" アイコンをクリックします:
2015121802


環境(LinuxONE Community Cloud)と鍵の名前(任意)、そしてインポートしたい公開鍵の内容をペーストするか、あるいは "Browse" で公開鍵ファイルを指定して、"Import" します:
2015121803


新規作成やインポートが成功するとこんな感じの画面になります。正しく認証鍵が登録できました:
2015121804


ではこの鍵を使って Linux インスタンスを作成してみます。"Images" タブを開いて利用可能なイメージの一覧を確認します。現時点では素の RHEL6.7 環境と、RHEL6.7 に MongoDB が付属している(と思われる)環境の2つのイメージが登録されて使えるようになっていました。どちらでもいいのですが、とりあえずは最小構成を試してみたいので前者を選択します:
2015121805


RHEL6.7 イメージの内容が表示されます。これをインスタンスとしてデプロイしたいので "Deploy" ボタンをクリックします:
2015121807


デプロイ時の情報入力画面に切り替わります。ここに必要な情報を入力/指定していきます:
2015121808


Name には任意の名称を入力します。注意点として Project はデフォルトの "Public" ではなく、自分に割り当てられたプロジェクト ID (要するに "Public" じゃない方)を指定し直してください。なおインスタンスの有効期限も指定できますが、デフォルトで最長の90日間になっているはずです:
2015121806


続きです。System の Flavor (規模)は "m1.linuxone" が唯一の選択肢になっているはずなので、これを選びます。この Flavor で CPU x 2、メモリ 2GB のスペックになります。そして Access and Security では上記で作成した鍵ペアの名前を必ず指定してください(これをしないと作成したインスタンスにアクセスする術がなくなります)。最後に "Deploy" ボタンをクリックすると作成が開始されます:
2015121807


画面が切り替わり、インスタンスが作成中である旨のメッセージが表示されます:
2015121810


画面をリロードすると、インスタンスが作成中であることがわかります:
2015121811


しばらく待つと作成したインスタンスの Status が OK となります。これでインスタンスが作成され、起動も完了したことになります。名前部分をクリックしてインスタンスの詳細を確認しましょう:
2015121812


インスタンスの詳細画面です。この中にパブリック IP アドレスが記載されているので、この値をメモしておきましょう:
2015121808


では作成した LinuxONE のサーバーインスタンスにアクセスして実際に使ってみましょう。Teraterm などの SSH クライアントを使って、先程メモした IP アドレスに SSH アクセスします。その際のユーザー名には "linux1"、秘密鍵にはあらかじめ作成した(あるいは作成してダウンロードした)秘密鍵ファイル、そしてパスフレーズには秘密鍵作成時に指定したパスフレーズを入力してアクセスします:
2015121809


プロンプトが表示されればログイン成功です!:
2015121810


とりあえず cpuinfo とシステム名を確認してみました。間違いなく IBM/S390 システムで CPU は2個確認できます:
2015121811


この linux1 ユーザーは sudo 権限を持っているので root 権限でコマンドを実行したり、rpm や yum コマンドで新たにアプリケーションをインストールしたりすることもできます。軽く使ってみた感じでは「Intel 版の RHEL(CentOS) とほとんど変わらない、というか違いを感じない」という印象です。

1つだけ、環境を見ていて気付いたのはイーサネットの設定で DNS サーバーが指定されていないことでした(つまり名前解決ができません)。私は /etc/sysconfig/network-scripts/ifcfg-eth0 に以下の1行を追加(Google の公開 DNS サーバーを指定)して再起動することで解決しています:
  :
  :
DNS1=8.8.8.8


RHEL 環境としては Intel 版とほぼ変わらないことを確認するため、試しにこの記事を参考にして、LinuxONE に X Window と VNC サーバーをインストールして、VNC クライアントからデスクトップ環境にアクセスしてみました(実際、リンク先の記事と同じ手順に加えて、デフォルトで有効になっていた iptables を外すだけで実現できました):
2015121800



その他、ざっと yum でのインストールを試してみた感じではこんな結果でした:
アプリケーションインストール可否コメント
X Windowyum groupinstall "X Window"
Tiger VNCyum install tigervnc-server
OpenJDK不可yum リポジトリに見つからない
(ただし標準で 1.5.0 導入済み)
IBM JDKyum install java-1.7.1-ibm-devel
PHPyum install php php-mbstring php-mysql ..
Tomcat(6)yum install tomcat6 tomcat6-webapps tomcat6-admin-webapps
Apache HTTPDyum install httpd
MySQLyum install mysql-server
FireFoxyum install firefox
Eclipse不可yum リポジトリに見つからない
OpenOffice/LibreOffice不可yum リポジトリに見つからない
screenyum install screen
tmuxソースからコンパイルしてビルド 参照
x3270 エミュレータyum install x3270 x3270-text x3270-x11


標準の yum リポジトリでは見つからない、というだけの可能性もあるので、不可になっているものが実際には可能だったりすることもあると思います。個人的には新し目の JDK を見つけておけると色々使えそう、という印象です。LAMP デベロッパーに関してはほぼ困らないのかも。。

(2016/Jan/15 追記)
標準リポジトリから IBM Java の 1.7.1 がインストールできることを確認しました:
# yum install java-1.7.1-ibm-devel


このページのトップヘ