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

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

タグ:systemz

不定期(要するに「ふと思い立ったタイミング」)で LinuxONE の紹介をしています。LinuxONE はメインフレームのハードウェア上で動く Linux です。そういえば LinuxONE で docker って使えるんだろうか?使えるとしたらどのあたりまで使える?? ということを確認したくなって、久しぶりに LinuxONE コミュニティクラウドの環境構築をしてみました。なお、以下の内容は 2019/05/27 時点の状況を紹介したものです。
2019052700


LinuxONE コミュニティクラウドは最大 120 日間無料で利用可能な LinuxONE の環境です。パブリックな IP アドレスが割り振られるので、インターネットから利用することもできます。FAQ も参照ください:
https://developer.ibm.com/linuxone/resources/faq/


LinuxONE コミュニティクラウドの申し込み方法は以前(2017年)のブログエントリで紹介したものとほとんど変わっていません。こちらを参照してください:
http://dotnsf.blog.jp/archives/1063515821.html

ここで記載されている情報と異なる点として、2019/05/27 現在では OS として RHEL 6.x を選択することはできなくなっています。そのため今回は RHEL 7.x を選択しました(RHEL 7.6 が導入されました)。またサーバーのスペック選択肢が廃止され、常に 2CPU + 4GB メモリ + 50 GB ディスク の環境が提供されるようになっていました。

仮想サーバーができたら IP アドレスとサーバー作成時に作ってダウンロードした鍵ファイル(*.pem)を指定して linux1 ユーザーでログインします:
2019052701


ログインできました。実際に試していただくとわかるのですが「ほぼ x86_64 版の RHEL 7.6」です。明示的にアーキテクチャを確認しないと s390x 版であることに気づかないかもしれません。

そしてこの後の docker 環境構築の手順に備えて root ユーザーに切り替えます:
$ sudo -i
#


さて、docker および docker-compose をこの LinuxONE 環境に導入していきます。手順そのものはこちらで紹介されているものをほぼそのまま使うのですが、2019/05/27 現在の環境では記載そのままの手順では途中でエラーになってしまい、導入できませんでした。エラー回避のため、少し異なる手順で導入します(異なる部分をで記載しています)。
https://github.com/IBM/Cloud-Native-Workloads-on-LinuxONE/blob/master/README-ja.md


【docker の導入】
まずインストールする docker の s390x 向けパッケージファイルをダウンロードします。RHEL 7.3 以上向けに docker 17.05 の CE(Community Edition)版が用意されているのでダウンロードします:
# wget ftp://ftp.unicamp.br/pub/linuxpatch/s390x/redhat/rhel7.3/docker-17.05.0-ce-rhel7.3-20170523.tar.gz

ダウンロードしたアーカイブファイルを展開し、バイナリを /usr/local/bin/ 以下にコピーします:
# tar -xzvf docker-17.05.0-ce-rhel7.3-20170523.tar.gz
# cp docker-17.05.0-ce-rhel7.3-20170523/docker* /usr/local/bin/

2019/05/27 時点では標準状態では /usr/local/bin にパスが通っていませんでした。このままだと docker コマンドがそのまま使えないので、パスを通しておきます:
# export PATH=$PATH:/usr/local/bin

これで docker コマンドが使えるようになったので、docker デーモンを起動します:
# docker daemon -g /local/docker/lib &


【docker-compose の導入】
続いて docker-compose もインストールします。実はこちらがドキュメント通りにいかない部分が多く、少し厄介でした。

手順としては pip を使って docker-compose をインストールします。そのため pip を先にインストールするのですが、pip をインストールするための依存ライブラリを先に導入します:
# yum install -y python-setuptools

そして pip をインストールします:
# easy_install pip

インストールした pip を使って、まず backports.ssl_match_hostname をアップグレードするのですが、このコマンドをドキュメント通りに入力すると既に導入済みの環境とのコンフリクトが起こってエラーになってしまいました。というわけで --ignore-installed オプションを付けて実行します:
# pip install backports.ssl_match_hostname --upgrade --ignore-installed

そして pip で docker-compose をインストール・・・するのですが、ここでもドキュメントのまま実行すると依存関係ライブラリが足りないというエラーになってしまいます。そのためまずは依存ライブラリを導入しておきます:
# yum install python-devel
# yum install gcc libffi-devel openssl-devel
# pip install glob2

改めて pip で docker-compose をインストールします。ここでもドキュメントそのままの指定だとエラーになってしまうので、バージョン 1.13.0 を明示してインストールします:
# pip install docker-compose==1.13.0

これで docker および docker-compose が LinuxONE 環境にインストールできました:
# docker -v
Docker version 17.05.0-ce, build 89658be

# docker-compose -v
docker-compose version 1.13.0, build 1719ceb

2019052702


【WordPress の導入】
では導入した docker と docker-compose を使ってコンテンツ管理システムである WordPress を導入してみます。

テキストエディタ(vi とか)を使うなどして、docker-compose.yml というファイルを以下の内容で作成して保存します:
version: '2'

services:

  wordpress:
    image: s390x/wordpress
    ports:
      - 80:80
    environment:
      WORDPRESS_DB_PASSWORD: example

  mysql:
    image: brunswickheads/mariadb-5.5-s390x
    environment:
      MYSQL_ROOT_PASSWORD: example

このファイルは docker-compose 向けの定義ファイルで wordpress と mysql という2つのコンテナ環境を定義しています。wordpress は PHP, Apache HTTPD, および WordPress が含まれる s390x 向けのイメージで 80 番ポートで HTTP リクエストを待ち受けます。また mysql は MySQL(正確には mariaDB)が含まれる s390x 向けイメージです。これら2つのイメージから2コンテナ環境を作り出して WordPress として挙動するようにしています。

では、docker-compose と、この docker-compose.yml ファイルを使って docker コンテナを起動します:
# docker-compose up -d

(必要に応じて)イメージをダウンロードし、イメージからコンテナが作られて起動します。プロンプトが戻ってきたら、docker ps コマンドを実行して wordpress と mariadb の2つのコンテナが起動していることを確認します:
# docker ps
CONTAINER ID        IMAGE                              COMMAND                  CREATED             STATUS              PORTS                NAMES
65af9dfa6ee9        s390x/wordpress                    "docker-entrypoint..."   3 hours ago         Up 3 hours          0.0.0.0:80->80/tcp   dockers_wordpress_1
3eb78f3ef1c1        brunswickheads/mariadb-5.5-s390x   "/docker-entrypoin..."   3 hours ago         Up 3 hours          3306/tcp             dockers_mysql_1

起動が確認できたらウェブブラウザから(LinuxONE 環境の) IP アドレスを指定してアクセスします(http://xxx.xxx.xxx.xxx/)。以下のような WordPress の環境設定画面になれば成功です:
2019052801


言語やユーザーID、パスワードなどの設定が完了すると管理画面にログインできるようになりました:
2019052802


この時点でユーザーページにもアクセス可能です:
2019052803


とりあえずメインフレーム上の Linux に docker & docker-compose 環境を構築して WordPress を導入することができました!


メインフレーム(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


このページのトップヘ