ここではUNIXサーバ側の環境設定について説明します。なお、これらの操作にはUNIXサーバの管理者(root)権限が必要です。
Windows版NetCOBOL製品の提供する分散開発支援機能は、UNIX系システム側の次のようなサービスが動作していることが前提となっています。したがって、これらのサービスの導入と起動が必要です。
ftpd
rexec
またリモートデバッグ機能を使用する場合は、次のサービスも必要となります。
telnetd
以下、UNIXシステムが、Solarisサーバである場合およびLinux、Linux(Itanium)サーバである場合それぞれについて説明します。
なお、以降ではSolaris(32)を指して「Solarisサーバ」、Linux、Linux(Itanium)の両方を指して、「Linuxサーバ」と記載しています。
Solarisサーバの場合
Solarisサーバの場合、ftpdおよびrexecサービスは、デフォルトではオペレーティングシステムの導入時にインストールされ、常に起動するようになっています。
注意
Solaris10の場合は、rexecサービスはオペレーティングシステムの導入時に起動するようになっていません。次の操作が必要になります。
ステータスの確認
次のコマンドを実行してステータスを確認してください。
# svcs -a | grep rexec disabled 18:28:10 svc:/network/rexec:default
実行結果の出力の先頭が"disabled"である場合は、rexecサービスを起動してください。
rexecサービスの起動
次のコマンドを実行してrexecサービスを起動してください。
# svcadm enable svc:/network/rexec:default
Solarisサーバの場合、システム設定の変更は設定ファイルの内容を直接確認し、必要ならそれを修正するということが一般的ですので、その方法のみを説明します。
サービスの状態の確認
Solarisサーバではftpdおよびrexecは、inetd(インターネットデーモン)から呼び出されるサービスです。したがって、次のファイルの内容を確認します。
/etc/services
/etc/inetd.conf
“/etc/services”および“/etc/inetd.conf”内のftpdおよびrexecに関する記述が存在し、それが有効であれば、以降の作業は必要ありません。
次にその例を示します。
例
/etc/servicesの例
# # Network services, Internet style # … ftp 21/tcp … ## UNIX specific services ## these are NOT officially assigned # … exec 512/tcp …
/etc/inetd.confの例
… # FTPD - FTP server daemon ftp stream tcp6 nowait root /usr/sbin/in.ftpd in.ftpd -a … # REXECD - rexec daemon (BSD protocols) exec stream tcp nowait root /usr/sbin/in.rexecd in.rexecd exec stream tcp6 nowait root /usr/sbin/in.rexecd in.rexecd …
一方、ftpd、rexecの両方またはどちらかについての設定行がコメント化(行頭に“#”)されている場合は、以降の作業を行ってください。
サービスの設定の変更
“/etc/services”および“/etc/inetd.conf”を修正します。
サービスの起動
ftpdおよびrexecは、inetd配下で起動されるサービスであるため、inetdを再起動します。次のコマンドを実行してください。
# kill -HUP `cat /var/run/inetd.pid`
または
# ps -ea | grep inetd inetdのプロセス番号が表示される # kill -HUP "inetdのプロセス番号"
Linuxサーバの場合
Linuxサーバの場合、ftpdおよびrexecサービスは、オペレーティングシステムの導入時にインストールされていない場合もあるため、これらのパッケージが導入済みかどうかから説明します。
なお、Linuxでは、この種のシステム設定のためにGUIを持つツールが用意されている場合がありますが、GUIツールはバージョンおよび個々のシステムの設定による違いが大きいため、コマンドによる操作方法のみを説明します。
パッケージの確認
パッケージがインストール済みか確認するには次の形式でrpmコマンドを実行します。
rpm -query パッケージ名
ftpdおよびrexecに必要なパッケージ名は次のとおりです。
ftpd : vsftpd
rexec : rsh
次に示すようにインストールされているパッケージの情報が表示されている場合、パッケージはインストール済みです。サービスの状態の確認に進んでください。
# rpm -query vsftpd vsftpd-2.0.1-5 # rpm -query rsh rsh-0.17-2.5
パッケージの情報が表示されない場合、パッケージのインストールを行う必要があります。
例
Linuxシステムで使用されるftpdのパッケージには、バージョンやディストリビューションの違いにより幾つか種類があります。次のようなものが使われている場合もあります。
wu-ftpd
proftpd
パッケージの導入
次のrpmコマンドを使用してパッケージを導入します。
rpm -Uvh パッケージ名
サービスの状態の確認
/sbin/chkconfigコマンドを次の形式で使用して、システム起動時のサービス開始の設定を確認します。
/sbin/chkconfig --list サービス名
例えば、次のような結果が得られる場合、ftpd(vsftpd)とrexecはシステム起動時に開始されない設定になっています。
# /sbin/chkconfig --list vsftpd vsftpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off # /sbin/chkconfig --list rexec rexec off
サービスの設定の変更
/sbin/chkconfigコマンドを次の形式で使用して、システム起動時にサービスが開始されるように設定を確認します。
/sbin/chkconfig [--level レベル] サービス名 on
以下、システム開始時にサービスが開始されるように設定を変更し、その変更を確認する例について示します。
# /sbin/chkconfig --level 5 vsftpd on # /sbin/chkconfig --list vsftpd vsftpd 0:off 1:off 2:off 3:off 4:off 5:on 6:off # /sbin/chkconfig rexec on # /sbin/chkconfig --list rexec rexec on
サービスの起動
/sbin/serviceコマンドを次の形式で使用して、サービスを開始します。
なお、rexecの場合は、xinetd配下で起動するサービスであるため、xinetdを再起動する必要があります。
# sbin/service vsftpd start vsftpd 用の vsftpd を起動中: [ OK ] # /sbin/service xinetd stop xinetd を停止中: [ OK ] # /sbin/service xinetd start xinetd を起動中: [ OK ]
UNIXプログラムの分散開発時に、UNIXサーバ側の設定が必要な環境変数の詳細と、その設定方法について説明します。
プログラム資産の送受信
プログラム資産の送受信に関係する環境変数は次のものです。
LD_LIBRARY_PATH
プログラム資産の送受信に必要なコード変換をUNIXサーバ側のCharset Managerを使用して行う場合に設定が必要です。
ターゲットビルド
ターゲットビルドは、UNIXサーバ側のcobol翻訳コマンドを使用して、COBOLプログラムの翻訳・リンクが行われます。このため、次に示す3つの環境変数の指定は必須です。なお、以下の説明では、{COB_BASED}がNetCOBOLのインストール先を示すものとして説明します。
PATH
COBOL翻訳コマンドの格納パスを指定するため、以下の指定を環境変数PATHに追加します。
${COB_BASED}/bin
LD_LIBRARY_PATH
COBOLランタイムの共用ライブラリを格納したパスを指定するために、以下の指定を環境変数LD_LIBRARY_PATHに追加します。
${COB_BASED}/lib
NLS_PATH
COBOL翻訳時およびCOBOLプログラム実行時に出力されるメッセージの格納先を指定するため、以下の指定を環境変数NLS_PATHに追加します。
${COB_BASED}/lib/nls/%L/%N.cat:{COB_BASED}/lib/nls/C/%N.cat
LANG
COBOLプログラムで使用する文字コード系を指定します。翻訳時はこの指定がCOBOLソース中の日本語文字の有無とそのコード系の判定に使用されます。
システム | 日本語の使用の有無と文字コード | |||
---|---|---|---|---|
無し | 有り | |||
EUC | シフトJIS | Unicode(UTF8) | ||
Solaris(32) | C | ja(*1) ja_JP.U90 ja_JP.eucJP | ja_JP.PCK | ja_JP.UTF-8 |
Linux | C | ja_JP.eucJP | - | ja_JP.UTF-8 |
Linux(Itanium) | C | ja_JP.eucJP | - | ja_JP.UTF-8 |
*1: Solaris 10の場合だけ使用できます。
LANGを除く環境変数の設定は、そのためのシェルスクリプトが各UNIX系システムのNetCOBOL製品に用意されており、通常はそれを使用します。
以下にその一覧を示します。
NetCOBOL製品 | 格納場所 | ファイル名 | 備考 |
---|---|---|---|
Solaris 32bit版 NetCOBOL | /opt/FJSVcbl/config | cobol.csh | csh用 |
Linux 32bit版 NetCOBOL、 Linux(Itanium) 64bit版 NetCOBOL | /opt/FJSVcbl/config | cobol.sh | sh/bash用 |
cobol.csh | csh/tcsh用 |
その他、必要に応じて次のような環境変数を指定します。
COBOLOPTS
開発対象の個々のプログラムに依存せず共通に指定する必要のある翻訳オプションがある場合、この環境変数を使用します。次のようなオプションを指定するのに有効です。
COBOLのデバッグ機能に関するオプション
翻訳リストに関するオプション
COBCOPY/FORMLIB
複数の開発者が共用する必要があるCOBOL登録集、画面帳票定義体等がある場合、その格納ディレクトリを指定します。
環境変数設定用のシェルスクリプト例
ここでは、設定する必要のある環境変数が次のようであると仮定して、その環境変数を設定するためのスクリプトの例を示します。
資産の送受信時に関係する環境変数
サーバ側でCharset Managerを使用するための設定を環境変数LD_LIBRARY_PATHに追加する。
ターゲットビルドに関係する環境変数
COBOLプログラムの翻訳・リンクに必須の環境変数は、NetCOBOLで提供されているシェルスクリプトで設定する。
開発対象のプログラムが使用する文字コードはEUCとし、それを環境変数LNAGに指定する。
COBOLソースの翻訳リストは、共通のフォルダに保存する。
開発者が共通して参照する登録集の格納フォルダを指定する。
Solarisサーバを使用して、分散開発を行う場合、ログインシェルとしてcshを使用する必要があります。各開発者の使用するホームディレクリにある“.cshrc”に以下のテキストを追加編集してください。
例
Solarisサーバでの.cshrcへの修正例
## COBOL環境設定 source /opt/FJSVcbl/config/cobol.csh ## Charset Managerのための環境設定 if(${?LD_LIBRARY_PATH}) then setenv LD_LIBRARY_PATH /opt/FSUNiconv/lib:${LD_LIBRARY_PATH} else setenv LD_LIBRARY_PATH /opt/FSUNiconv/lib endif ## 開発者共通の翻訳・リンク時設定 setenv COBOLOPTS “-dp ../list” setenv COBCOPY ../COPYLIB:${COBCOPY} ## 開発対象プログラムの使用する文字コード setenv LANG ja
Linuxサーバを使用して、分散開発を行う場合、ログインシェルとしてcshまたはbashを使用することができます。
ログインシェルとしてcshを使用する場合、各開発者の使用するホームディレクリにある“.cshrc”に以下のテキストを追加編集してください。
例
Linuxサーバでの.cshrcへの修正例
## COBOL環境設定 source /opt/FJSVcbl/config/cobol.csh ## Charset Managerのための環境設定 if(${?LD_LIBRARY_PATH}) then setenv LD_LIBRARY_PATH /opt/FSUNiconv/lib:${LD_LIBRARY_PATH} else setenv LD_LIBRARY_PATH /opt/FSUNiconv/lib endif ## 開発者共通の翻訳・リンク時設定 setenv COBOLOPTS “-dp ../list” setenv COBCOPY ../COPYLIB:${COBCOPY} ## 開発対象プログラムの使用する文字コード setenv LANG ja_JP.eucJP
また、ログインシェルとしてbashを使用する場合、各開発者の使用するホームディレクリにある“.bashrc”に以下のテキストを追加編集してください。
例
Linuxサーバでの.bashrcへの修正例
## COBOL環境設定 ./opt/FJSVcbl/config/cobol.sh ## Charset Managerのための環境設定 if [ ${LD_LIBRARY_PATH:-""} = "" ] ; then LD_LIBRARY_PATH=/opt/FSUNiconv/lib; export LD_LIBRARY_PATH else LD_LIBRARY_PATH=/opt/FSUNiconv/lib:${LD_LIBRARY_PATH};export LD_LIBRARY_PATH fi ## 開発者共通の翻訳・リンク時設定 COBOLOPTS=”-dp ../list”;export COBOLOPTS COBCOPY=../COPYLIB:${COBCOPY}; export COBCOPY ## 開発対象プログラムの使用する文字コード LANG=ja_JP.eucJP; export LANG
ここではWindowsクライアントのリモートデバッガを使用して、UNIXサーバ側のプログラムをリモートデバッグする際に必要な環境変数の設定について説明します。
なお、ここでの説明は、“2.3.1.2 UNIXサーバ側のユーザ環境の設定”で説明した環境変数が設定済みであることを前提とします。
一般形式でのリモートデバッグ
“2.1.3.1 リモートデバッグの2つの方式”で説明した通り、デバッグ対象のプログラムに有効となる環境変数は、サーバ側のリモートデバッガコネクタの起動時に有効であったものが引き継がれます。
デバッグ対象のプログラムに対して指定する必要がある環境変数は大きく2つに分かれます。
開発対象のプログラムで共通である環境変数の設定
ファイル操作時のふるまい、印刷ファイルで使用するフォント等、マルチスレッド時の設定など開発対象プログラムで共通する設定です。
開発対象のプログラムそれぞれに固有である環境変数の設定
入出力先ファイルを指定する環境変数が代表的なものです。
通常は、1に該当する環境変数はリモートデバッガコネクタの開始前に設定します。一方、2に該当する環境変数はデバッグ対象プログラム毎に実行環境初期化ファイルを用意して、リモートデバッグの開始時にそのファイルを指定することで設定します。
また、“2.1.3.2 リモートデバッグのためのサーバ側の環境設定”で説明したとおり、リモートデバッグを行うにあたって、サーバ側のリモートデバッガコネクタの起動が必要です。
しかし、個々の開発者がサーバ側のリモートデバッガコネクタを起動するにあたって、次の問題があります。
Windowsクライアントから直接サーバ側のリモートデバッガコネクタを起動・終了する機能が用意されていない。各開発者はtelnet端末でUNIXサーバに接続し、リモートデバッガコネクタを起動する必要がある。
複数の開発者が同時にリモートデバッグを行う場合、それぞれにリモートデバッガコネクタを用意しないと、標準入力・標準出力・標準エラー出力・実行時メッセージなどが混信してしまう。このため、各開発者が接続制限とポート指定で個々にリモートデバッガコネクタを起動する必要がある。
このため、開発管理者は一般の開発者がリモートデバッガコネクタの起動・終了を簡単、かつ、安全に行うために次の準備をする必要があります。
各開発者にリモートデバッグ時に使用するポート番号を割り当てる。
リモートデバッガコネクタの起動前に適切な環境変数の設定を行うシェルスクリプトを用意する。
リモートデバッガコネクタの起動・終了などの操作を開発者が誤りなく行えるように手順を用意する。
これらについては、リモートデバッガコネクタ起動・終了用の専用のシェルスクリプトを用意し、一般の開発者にはそれを使用してもらうようにするのが有効です。
以下にその例を示します。
例
リモートデバッガコネクタ起動終了用のシェルスクリプト例
#!/bin/sh PORT=10000 CLIENT=192.168.1.13 if [ "$1" = "start" ] ; then if [ -r svdrds.pid ] ; then echo "リモートデバッガコネクタは既に起動済みです(ポート番号:${PORT})。" else ## 開発対象プログラム共通の環境変数の設定開始 ## # 行順ファイルの扱い CBR_TRAILING_BLANK_RECORD=YES; export CBR_TRAILING_BLANK_RECORD … ## 開発対象プログラム共通の環境変数の設定終了## echo "リモートデバッガコネクタを起動します (ポート番号:${PORT})" svdrds -h ${CLIENT} -p ${PORT} > /dev/null& ps -u user001 | grep svdrds | sed -e "s/^ *//;s/ .*//" >svdrds.pid fi elif [ "$1" = "end" ] ; then if [ -r svdrds.pid ] ; then echo “リモートデバッガコネクタを終了します" kill -s KILL `cat svdrds.pid` rm -f svdrds.pid else echo "リモートデバッガコネクタは起動されていません。" fi elif [ "$1" = "port" ] ; then echo "リモートデバッガコネクタはポート番号:${PORT}を使用します。" else echo "Usage : rdebug [ start | end | port ]" fi