できる IBM i 7.4 解剖 第3回 | IBM i 総合情報サイト

【できる IBM i 7.4 解剖】第3回「進むIBM i のオープン化とOSSサポート」


日本アイ・ビー・エム(株)
Power Systems テクニカル・セールス
佐々木 幹雄

  • IBM i は運用面でもオープン化、他プラットフォームとの共通化を進めている
  • 一例としてWebSphere Application Serverでは他プラットフォームと共通の導入コマンドが使用できる。操作性の良いIBM i固有GUIインターフェースも存続している
  • IBM i やACSのTCP/IP通信トレースデータは他プラットフォームと共通で分析可能なPCAPフォーマットでWiresharkなどで分析できる
  • OSSサポートはいまやIBMが提供するインフラとして共通化されている、IBM iだから特殊ということは無く順次拡張されている。

IBM i のアーキテクチャー、製品コンセプトはAS/400時代以来30年以上一貫しています。主たるものとして「オールインワンのビジネスサーバー」、「IBM i ひとつで企業で必要なあらゆる業務を実現するインフラを提供する」「可能な限り上位互換性を維持継承する」という3点が挙げられます。

ここしばらくITインフラは様々な技術革新がなされていますが、10~5年前頃との明確な違いとして、DevOpsやCI/CDの普及といったITライフサイクル全般の標準化推進があげられるでしょう。運用の統一化を筆頭にSQLやアプリケーション言語の稼働といった機能要件以外の非機能要件や運用性を共通化していこうというトレンドです。IBM iもこのトレンドを取り入れて機能拡張を続けています。今回はそのいくつかの例をご紹介します。

1.WebSphere Application Serverのインストール、フィックス適用手順の他インフラとの共通化

最初の例としてアプリケーションサーバー WebSphere Application Server(WAS)を見てみましょう。WASは現在大きく二つのラインに分類できます。以前からあるND, BASEなどを含むWASトラディショナルと2012年に発表されたTomcatライクで軽量なWebSphere Libertyです。(WebSphere Libertyは2017年にGitHubでOpen Libertyとしてオープンソース化されました。ちなみにLibertyはコンテナ対応となっており、Dockerなどコンテナ内で動作も可能です。)IBM i でも当然この二つのライン(WASトラディショナルとWebSphere Liberty)が利用可能です。下図ではV8.5がWASトラディショナル版、V20.0.0.4 がLibertyです。

以上はWebSphere Libertyが稼働するという機能的な共通化の例なのですが、運用面でもIBM iと他プラットフォームは共通化が進んでいます。例えばLibertyではserver.xmlその他テキストファイルで設定が可能なのですが、IBM iでも同様に設定を行えます。
さらにWASのインストールはWAS V8以降Installation Managerによる導入、フィックス適用が標準となっていますが、IBM iでもInstallation Managerから導入可能に拡張されています。

下図は、Installation ManagerによるWAS V9の導入手順の一部ですがIBM iとそれ以外のプラットフォームどちらも共通のimclコマンド(Installation Managerコマンド)なのがわかります。ステートメントもOSのパス指定差異がありますが基本同一であることがわかります。

WAS V9.0.5.導入手順 Installing the product offerings by using the command line
https://www.ibm.com/support/knowledgecenter/SSEQTP_9.0.5/com.ibm.websphere.installation.base.doc/ae/tins_installation_cl.html

従来のIBM i 固有のGUI(ポート2001で接続するWeb Adminコンソール)からもインストールやFIX導入が可能です。

わかりやすさの観点ではGUIに分があるようです。IBM i だけで生産性を追求するのであれば従来のWeb Adminコンソールを利用するのが最善かもしれません。一方、他プラットフォーム(クラウド含む)で運用標準化しインフラ全般としての標準化を図りたいのであればInstallation Managerからの操作が適するでしょう。

参考URL

WebSphere Application Server V9.0 for i導入ガイド
IBM i固有GUI(Web Adminコンソール)でのWAS V9 for IBM i FIX適用手順
How To Install an IBM WebSphere Application Server (WAS) v9.0 Fix Pack Using the IBM Web Administration for i Console

https://www.ibm.com/support/pages/node/667053

WAS V8.0, 8.5 for IBM i のFIX適用手順
How To Install an IBM WebSphere Application Server (WAS) v8.0 and v8.5 Fix Pack Using the IBM Web Administration for i Console

https://www.ibm.com/support/pages/node/645197

*最新情報はIBM Supportのページから N1019968で検索

WAS V9 for IBM i のFIX適用手順
How To Install an IBM WebSphere Application Server (WAS) v9.0 Fix Pack Using the IBM Web Administration for i Console

https://www.ibm.com/support/pages/node/667053

*最新情報はIBM Supportのページから N1021316 で検索

IBM i , ACSの通信トレースデータはWireshark対応

二つ目の例は通信トレースのデータフォーマットです。Wiresharkはネットワーク上の通信トラフィックを解析するオープンソースのプロトコルアナライザーで昨今最もメジャーなS/Wです。

IBM i のTCP/IPトレースデータ, ACSで取得したTCP/IPトレースデータはWiresharkで読み込み、分析可能です。従来の通信トレース取得機能ではIBM iで出力したスプールのフォーマットでしか利用できませんでした。Windowsその他インフラはWiresharkなどIBM iとは別なフォーマットで調べる必要がありました。データの出力様式はツールにより異なる為読み合わせが大変な場合もありましたがWiresharkで全ての通信機器の通信トラフィックを一元化できれば突合せや異常個所の特定はより容易になります。一見地味な機能ですが、通信の問題判別時に非常に威力を発揮する機能拡張です。

ACSでは、CWBCOTRCコマンドで通信データを取得できます。Windowsなどのコマンドラインから以下のコマンドを実行すると実行時に指定されたトレースファイルに通信トレースが取得されます。

CWBCOTRC ON /ALLUSERS 通信トレース取得開始
CWBCOTRC OFF /ALLUSERS 通信トレース取得終了
CWBCOTRC DEL /ALLUSERS 通信トレースファイルを削除

IBM i ではTRCCNNコマンドを使用します。例えばTRCCNN SET(*ON) TRCTYPE(*IP) SIZE(200000) TCPDTA(*TCP () () *N ‘192.168.0.100’) とすると192.168.1.100のデバイスとのTCP/IP通信データを取得できます。

トレースのサイズはケースに応じてMB単位に変更するなど増やしてください。収集した通信トレースデータはパケット・キャプチャー(PCAP)フォーマットのIFSファイルかスプール・ファイルに出力できます。(ただし、TLSデータまたはSSLデータが収集される場合は,スプール・ファイルのみを作成できます。)PCAPフォーマットはUNIX,Windowsをはじめ広く普及している標準フォーマットです。TCP/IP通信のデータ収集が完了したらSET(*OFF データ収集を終了しスプール出力する)またはSET(*END データ収集を終了する、出力しない)を指定してTRCCNNコマンドを実行しデータ収集を停止します。

IBM iローカルのIPアドレス、ポート番号やリモートのポート番号を特定して取得することもできます。下図の例ではローカルIPを19.168.1.10に限定、リモートIPを192.168.1.100に限定してトレースデータを収集します。

これ以外にもCPFメッセージなどMSG IDを指定(最大5つ)して出口プログラムをセットし特定の処理を実行する機能や監視対象のジョブ番号を指定するパラメーターも備わっています。
通信トレースは1つのLINDにつき1つしか作成できない為、不要になれば以下のコマンドで通信トレースデータを削除します。

DLTCMNTRC CFGOBJ(LIND名)CFGTYPE(* LIN)

下図はTRCCNNコマンドで取得したIBM iのTCP/IPトレースデータをWiresharkで表示したftp通信の例です。IBM i OSを示す特異性は無いので判別はつきませんが、43行目マスキング箇所にはIFSのパス・ファイル名が表示されています。

ACSで問題発生時の通信トレース取得手順

https://www.ibm.com/support/pages/tracing-instructions-ibm-i-access-connectivity-problems

Tracing Instructions for IBM i Access Connectivity Problems ACSとIBM i OSの通信トレースでWireshark形式での取得方法の記載があります。

IBM i OSSサポートの拡張

それでは次にIBM iのオープンソース(OSS)サポートについて見ていきましょう。まず下図をご覧ください。この図は2017年時点でのIBM i のOSSサポートを表したものです。2017年時点でサポートされたOSSは大きく11種類あり、さらに将来の拡張用に4つOption番号を予約済みでした。2017年時点では5733-OPSのライセンスプログラム(LPP)でOSSを管理する計画でした。(5733-OPSが登場したのは2014年です。)

オープンソース for IBM i

これは筆者の推測ですが、2017年頃まではIBM i でOSSサポートの拡充計画が予約済みの4つ程度に収まる想定であったのだと思われます。ところが実際には、2017年以降にIBM i へのOSSポーティングが急速に進むことになりました。その結果、IBM i のOSSは5733-OPS ライセンス・プログラム・プロダクト では管理しきれなくなり、RPM を介して配布されるようになりました。(5733-OPSライセンスプログラムは2019年12月15日にサポート終了済です。)これはOSSのポーティングを加速し運用を他プラットフォームと共通化するために必要な処置でした。現在IBM i でサポートされる主要なOSSだけでも以下のようになります。

Open Source Support for IBM i

https://www.ibm.com/support/pages/node/876818

上記ページに記載のある主要なOSS(2020年4月更新)は下記です。

  • Apache Tomcat
  • Apache Maven
  • Jenkins
  • Apache Ant
  • Gawk
  • Node.js
  • Perl
  • PHP
  • Python
  • R
  • Apache Commons
  • PCRE
  • Drupal
  • nginx
  • Spring
  • WordPress
  • Redis
  • Apigility
  • Joomla
  • ActiveMQ
  • OpenSSL
  • Git
  • GNU Make
  • GNU sed
  • GNU wget
  • rsync
  • Vim

IBM iがサポートしているOSSのフルリストはbitbucket のIBM i Wiki opensourceのページから確認できます。以下の画像は一部抜粋です。4つの予約済みOption番号では足りませんね。

bitbucket IBM i Open Source Repos

https://bitbucket.org/ibmi/opensource/wiki/Home#markdown-header-ibm-i-open-source-repos-alphabetical-unmaintained-list

これも筆者の推測ですがIBM i開発メンバーとしてUSロチェスター研究所は若手技術者を数多く採用しており、その影響もあり新手開発者の文化基盤でもあるOSSポーティングに勢いが増しているのではないでしょうか。
上記のページで一つ興味深いのは、PASE上で稼働する他プラットフォームと共通のOSS以外に、「QSYS.LIBベースのRPGライクなOSSも含まれる」と記載があることです。IBM i 固有の強みとして完璧とも言える上位互換性を持つQSYS.LIBベースのRPG/COBOLライクなアプリケーション環境はlinux系のOSSとは別個な魅力のある環境としてオープンソースでも拡充していくスタンスが示されています。

yumでIBM i のOSSを管理する

今後も拡充が予想されるOSSの管理方式として新たに採用されたのがRPMです。RPMとはRed Hat Package Manager(Red Hat以外へも広範に広がった為RPM Package Managerに改称)の略でソフトウェア配布のフォーマットです。OSSの世界では最も標準的な配布フォーマットのひとつです。また、RPM形式での配布と合わせてIBM iでもyumというパッケージ管理ソフトウェアが採用されました。
yumはいくつかの方法で利用できますが以下では第2回記事でご紹介したACSのオープンソースパッケージ管理 から利用するのが簡単です。

ACSのオープンソースパッケージ管理の初期セットアップ手順は以下の通りです。

  1. IBM i でSSHデーモンを開始 STRTCPSVR *SSHD
  2. ACSのオープンソースパッケージ管理 を選択
  3. SSHでIBM iサーバーに接続します。
    システム名、ユーザーID、パスワードを指定します。

    *RSAキーに関する警告が出た場合、そのまま はい を選択します。

  4. 以下のようなメッセージが表示されるのでそのまま はい を選択します。

    続いて以下のようなメッセージが表示されます。この間、IBM iサーバーへファイル転送が行われており(/tmp/bootstrap.tar.Z)時間がかかりますので完了を待ちます。

  5. 以下のメッセージが出て処理が完了します。OKボタンを押します。

  6. 導入が完了すると以下のようにOSSパッケージが表示されます。

    操作方法は第2回の記事や以下のURLを参照してください。

参考URL

「できる IBM i 7.4 解剖」第2回「ACS すぐに使える新機能」

【できる IBM i 7.4 解剖】第2回「ACS すぐに使える新機能」


OSS協議会IBM i IBM i yum導入ガイド

https://i5php.jp/wp-content/uploads/2019/09/yum_guide.pdf

bitbucket IBM i / opensource / yum

https://bitbucket.org/ibmi/opensource/src/master/docs/yum/

参考に上述したbitbucket のIBM i Wiki opensourceに記載のIBM i サポートOSS一覧を以下に掲載します。

Name Description
activerecord-jdbcas400-adapter JRuby ActiveRecord DB2 for i Adapter
api2.py Helper modules for iSeriesPython, primarily to make working with IBM system APIs easier
appserver4rpg
Application Server to make Java Components available for IBM i RPG programs, runs on IBM i or any other Java platform. Packaged with ArdGate to access any JDBC database using all native SQL interfaces from IBM i
base64 Base64 Encode/Decode for ILE RPG [broken link]
bluepkg Base64 Encode/Decode for ILE RPG [broken link]
Bob “Better Object Builder” build system for QSYS objects based on GNU Make
cartridge_info A SQL user defined table function to get the details for cartridges in a tape library
chgobjattr A utility to set the source attributes of an IBM i object.
pytoxlsf.py iSeriesPython utility to copy physical files to Excel workbooks
crtfrmstmf
Compile source from IFS for commands that do not support stream files
crtmipgm Create Machine Interface Program
vtrpgfree Automate conversion of fixed-format RPG to fully free-form
db2get Use DB2 to download files from the web
db2sock PASE DB2 CLI asynchronous API driver (libdb400.a)
db2util Goal is PASE DB2 CLI command line interface driver (libdb400.a).
docmd Allows you to process the same command across a group of objects [broken link]
FFEDIT Simple source code editor for IBM i [broken link]
FTP Guard FTP security for IBM i [broken link]
FTPCLNT FTP client for IBM i [broken link]
Giti Git client for 5250
ibm_db for Python API description for the driver
ibmi (Node.js) This library is an IBM i (AS400) client for Node. It is a port of the JTOpen for Java.
ibmichroot Chroot environment support on IBM i.
ibmidash Node.js dashboard web app demonstrating DB2 for i Service usage
ibmiperzl Before IBM i Chroot there was IBM i Perzl
IBMiProgTool GUI environment for navigating and managing files, both on IBM i and locally, with some IDE capabilities like a “block highlighting” editor and compilation commands
IBMiSqlScripts Tool for querying IBM i database files from local machine
IBMiSqlUpdate Tool for updating IBM i database files from local machine
ibmitoolkit PHP XMLSERVICE wrapper
iiesc IBM i external storage calculator
iipster iipster makes it easy to create web applications based on IBM i .
ILEditor Syntax-highlighting editor for ILE languages, implemented in .NET
ILEDocs Tool which helps software developers to document their programs in a convenient way
ILEUnit ILE unit testing framework
image_catalog_details A SQL user defined table function to get the details for an image catalog
iRPGEditor
Graphical RPG source editor
iseries_python27 Source code for independent (non-IBM) port of Python to QSYS.LIB (see iSeriesPython) [broken link]
iSphere
RDi plug-in with enhanced search and many other features.
iToolkit Generator A tool for generating iToolkit code based on RPG interfaces. Saves time!
iXMLService .Net XMLSERVICE wrapper
Java Toolbox for IBM i JTOpen wrapper by Edoardo Luppi
JSON webservices Providing a JSON webservice based on IBM i and Node.js
jt400.js Node.js connector for jt400.
loopback-connector-db2i LoopBack connector for DB2 for i (node.js v0.12) [discontinued, looking for maintainer]
loopback-connector-db2ibmi LoopBack connector
lppedd/RPG Edoardo Luppi’s RPG projects, mainly implementations of dynamic data structures (ArrayList, LinkedList, HashMap, HashSet)
lstffd List File Field Descriptions (LSTFFD)
machine_attributes A SQL user defined table function to get machine attributes like system type, system model number etc.
mama FastCGI tool starts/watches stand-alone web servers (starts Node.js applications, Python applications, etc.)
nodejs-idb-connector
Production-ready Database driver/adapter for DB2 for i.
nodejs-idb-pconnector Promised-based Db2 Connector for IBM i. Built on top of nodejs-idb-connector.
nodejs IBM i Collaboration for Node.js
noxdb Not only XML. SQL, JSON and XML made easy for RPG on IBM i
openssl-patches
IBM (Kevin Adler) provides info on how to apply patches for OpenSSL for IBM i
OSSILE The community project for OSS using ILE languages on IBM i
python-itoolkit
Python XMLSERVICE adapter
python IBM i Collaboration for Python [broken link]
Relic Package Manager Package Manager for the ILE environment (QSYS.LIB) [broken link]
RPG for VSCode RPG syntax definition (to enable highlighting and code folding) for Visual Studio Code
RPG-Properties Easily read a .properties file in the IFS from an RPGLE program.
rpgdynarr RPG Dynamic Arrays [broken link]
rpgle.vim Free (7.1) syntax highlight, folds, indent, etc. for RPGLE
rpglectags Create ctags compatible files for RPG/ILE, which can be used to quickly navigate source files
rpglefmt Format Free Form ILE RPG programs
rpglelint Lint ILE/RPG programs
rpgleman Download and install man pages for built-in functions, declaration keywords, control keywords, calculation operations and compiler directives in ILE RPG.
rpgleparser
ANTLR v4 grammar for IBM’s ILE RPG, capable of parsing both fixed- and free-format syntax
rpgmail RPG Mail [broken link]
RpgMap A complete and versatile in-memory ordered key/value store for the modern RPG programming language
RPGUnit RPG unit testing framework
rtvcmdsrc RTVCMDSRC is a utility to recreate the source of a *CMD object.
rtvsqlsrc
Retrieve the SQL source for a database object.
ruby-ibm_db
Ruby DB2 for i adapter/driver
ruby-itoolkit Ruby XMLSERVICE adapter
ruby IBM i Collaboration for Ruby [broken link]
sails-db2fori Node.js DB2 for i adapter with a focus on Sails/Waterline.
scnmsgf Scan Message File (SCNMSGF)
SEUEXIT Exit program for SEU which demonstrates F7 and a user-written command ATTR which embeds ‘colour coding’ attribute bytes into the source (QSYS.LIB)
shellinabox
IBM (Kevin Adler) provides info on Shell In A Box
SMS with Twilio Send SMS with Twilio from IBM i
SU Work with a QPGMR profile and Become QSECOFR (SU)
swift-itoolkit Swift interface over XMLSERVICE
system400 chroot safe system utility.
tn5250j 5250 terminal emulator implemented in Java
TOP New IBM i programming language written by Liam Allan [broken link]
Ublu Scripting language used to remotely manage IBM i machines from any Java-capable platform (e.g. Windows, Linux, Unix, other IBM i, etc.)
USRSPCOA RPG Open Access handler to allow User Space (*USRSPC) objects which contain input from IBM List APIs such as QUSLOBJ to be easily accessed with native IO.
utils-on-power A collection of utilities for the IBM i on power
vlang-rpg
RPG SRVPGM (VLANG/VPHP), providing in-memory calling of RPG(memory)PHP, or any other scripting language implementing an ILE callback extension. Everything is controlled by RPG, thereby PHP or any PASE language is essentially a slave language to RPG
web5250
Extension of tn5250j project
xmlservice-rpg
Base XMLSERVICE that all other language toolkits are built on
xmlservice-rpg
Base XMLSERVICE that all other language toolkits are built on
zipSeries A command line interface for the software zipSeries. Copy libraries / objects from one IBM i (f.k.a. iSeries or AS/400) to another running the same (or lower) release of the operating system as the source machine
ZLIB Port of the ZLIB code to allow build on IBM i with RELIC Package Manager. Source is from Open Source domain with some changes to allow install via the package manager

以上のようにIBM i のOSS対応は飛躍的に拡充し続けています。

ところでIBMはOSSの有償サポートを提供しているのですが、そのサポート自体、プラットフォーム(OS種別やクラウドなど)を問わず共通の考えのもと運用されているのです。
以下のURLには世界各地区毎のIBMがサポート提供するOSSのリストが掲載されています。

IBM Support for Open Source Software

https://www-03.ibm.com/services/supline/products/OSS.html

日本版は原稿執筆の2020年6月時点で更新中で参照できないためUS版でご紹介しますと下図のようにIBMが有償サポートを提供しているOSSが記載されています。注目すべきは一部例外を除いてOSSの稼働するプラットフォーム(OS)の指定が無いことです。

Revision 4.0 IBM Cloud Open Source Support (OSS) –Supported Products List–United States & Canada

https://www-03.ibm.com/services/supline/products/OSS/SPL_OSS_US_v1.3.pdf#navpanes=0

文章中にはサポートポリシーとして、「オープンソースソフトウェアパッケージは現在、RedHat®、SUSE®、Ubuntu®、CentOSLinux®、AIX®、およびIBMi®でサポートされています(AIXおよびIBM iでのサポートは、関連するコミュニティから移植されたディストリビューション(ppc64版の有無)に依存します。いくつかの制限が適用される場合があります)。」と記載がありIBM iも特別扱いではなくIBMのサポートするOS、プラットフォームの一つとして共通で計画されていることがわかります。
「IBM iだから特殊」「他のプラットフォームと違う」という悪い意味での独自性は地道な活動を通じて改善され続けているのです。

Copyright © IGUAZU