- 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のオープンソースパッケージ管理の初期セットアップ手順は以下の通りです。
- IBM i でSSHデーモンを開始 STRTCPSVR *SSHD
- ACSのオープンソースパッケージ管理 を選択
- SSHでIBM iサーバーに接続します。
システム名、ユーザーID、パスワードを指定します。
*RSAキーに関する警告が出た場合、そのまま はい を選択します。
- 以下のようなメッセージが表示されるのでそのまま はい を選択します。
続いて以下のようなメッセージが表示されます。この間、IBM iサーバーへファイル転送が行われており(/tmp/bootstrap.tar.Z)時間がかかりますので完了を待ちます。 - 以下のメッセージが出て処理が完了します。OKボタンを押します。
- 導入が完了すると以下のように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は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だから特殊」「他のプラットフォームと違う」という悪い意味での独自性は地道な活動を通じて改善され続けているのです。
筆者
日本アイ・ビー・エム株式会社 多数の執筆記事を、iWorldに寄稿中。 |