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

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

タグ:mainframe

不定期(要するに「ふと思い立ったタイミング」)で 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 では大学生の皆さんを対象に、メインフレームを使ったプログラミングコンテストを開催中です:
IBM メインフレームコンテスト 2016

2016073101


このコンテストは「メインフレーム」や「汎用機」と呼ばれている IBM zSystems の最新版である z13 環境にリモートログインしてプログラミングを行う、という内容のコンテストです。コンテストといっても最初は与えられた課題をクリアしながらメインフレームの使い方を学び、最終的にはメインフレーム用のアプリケーションを開発して世界中の大学生とその出来を競う、というものです。ちなみにリモートログインする先のシステムはメインフレームのネイティブOSである z/OS に加え、メインフレーム版の Linux(zLinux)も含まれています。旧来型から最新環境までメインフレームを学ぶ面白い機会であると思っています。


で、これだけだとただのコンテスト宣伝になってしまうので、1つ自分なりに挑戦してみました。同コンテストに参加する上で、参加者の個人 PC は Windows/Mac OS/Ubuntu のいずれかであることを前提として解説されています:
2016073102


現実的にほとんどの学生参加者の皆さんが所有している PC はこのいずれかの環境であると思いますが、僕は人気の教育向けシングルボードコンピュータで、比較的最近は IoT デバイスとしても注目されているラズペリーパイ(以下「ラズパイ」)で挑戦してみました。結論から言うと「ラズパイでもできそうです(少なくとも課題のパート1はできます)!」。

準備段階として、z/OS システムにログインして操作するための 3270 エミュレータアプリケーションの導入が必要です:
2016073100
 ↑オッサン感涙のこんなアプリ


ラズベリーパイ向けの 3270 エミュレータの導入はこちらのページの「IBM 3270 環境」を準備している箇所の説明を参考に導入してください:
PiTop で日本語デスクトップ環境構築


ここで紹介している方法では X11 版(x3270)ではなくコマンドライン版(c3270)の導入を紹介しているので、X Window 環境からだけでなくターミナル環境からでも利用できる方法です:
pi_zos_zlinux
 ↑ラズパイのデスクトップ上で z/OS と zLinux に同時にログインしている様子


ただし、この方法で z/OS 環境を用意した場合には2つ注意点があります。1点目は起動方法です。ウィンドウのメニューから実行するのではなく、ターミナルを開いてコマンドラインから以下のように指定して z/OS に接続する必要があります(IPアドレスとポート番号に関しては参加者向けのガイドを参照してください):
$ c3270 (接続先IPアドレス):(接続先ポート番号)

もう1点。IBM からのガイドでは上記3つの GUI 環境から利用することを想定していますが、このラズベリーパイからコマンドライン版 3270 アプリを使う場合はウィンドウ環境を前提としていないため、一部のキーバインドが正しく動きません。例えば z/OS の画面において「1つ前に戻る」という場合は F3 キーを押すようガイドされていますが、c3270 では F3 が正しくバインドされていないので期待通りの結果になりません:
2016073103


c3270 で1つ前の画面に戻るには、F3 ではなく "Exit" と明示的にコマンド入力する必要があります:
2016073104


この辺りはちょっと不便ではありますが、操作そのものには影響はなさそうでした。なお zLinux 環境に関しては普通の Linux と同じ(実体は RedHat Linux Enterprise 7)なので、普段から Linux を使っている方であれば違和感なく使えると思っています。


 

このページのトップヘ