ページの先頭行へ戻る
NetCOBOL V12.0 ユーザーズガイド(UNIX分散開発編)
FUJITSU Software

2.3.1 サーバ側の環境設定

ここではUNIXサーバ側の環境設定について説明します。なお、これらの操作にはUNIXサーバの管理者(root)権限が必要です。

2.3.1.1 サーバ側へのプログラムの導入と起動

Windows版NetCOBOL製品の提供する分散開発支援機能は、UNIX系システム側の次のようなサービスが動作していることが前提となっています。したがって、これらのサービスの導入と起動が必要です。

またリモートデバッグ機能を使用する場合は、次のサービスも必要となります。

以下、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サーバの場合、システム設定の変更は設定ファイルの内容を直接確認し、必要ならそれを修正するということが一般的ですので、その方法のみを説明します。

  1. サービスの状態の確認

    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の両方またはどちらかについての設定行がコメント化(行頭に“#”)されている場合は、以降の作業を行ってください。

  2. サービスの設定の変更

    “/etc/services”および“/etc/inetd.conf”を修正します。

  3. サービスの起動

    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ツールはバージョンおよび個々のシステムの設定による違いが大きいため、コマンドによる操作方法のみを説明します。

  1. パッケージの確認

    パッケージがインストール済みか確認するには次の形式で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

  2. パッケージの導入

    次のrpmコマンドを使用してパッケージを導入します。

    rpm -Uvh パッケージ名
  3. サービスの状態の確認

    /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
  4. サービスの設定の変更

    /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
  5. サービスの起動

    /sbin/serviceコマンドを次の形式で使用して、サービスを開始します。

    なお、rexecの場合は、xinetd配下で起動するサービスであるため、xinetdを再起動する必要があります。

    # sbin/service vsftpd start
    vsftpd 用の vsftpd を起動中:                               [  OK  ]
    # /sbin/service xinetd stop
    xinetd を停止中:                                           [  OK  ]
    # /sbin/service xinetd start
    xinetd を起動中:                                           [  OK  ]

2.3.1.2 UNIXサーバ側のユーザ環境の設定

UNIXプログラムの分散開発時に、UNIXサーバ側の設定が必要な環境変数の詳細と、その設定方法について説明します。

プログラム資産の送受信

プログラム資産の送受信に関係する環境変数は次のものです。

ターゲットビルド

ターゲットビルドは、UNIXサーバ側のcobol翻訳コマンドを使用して、COBOLプログラムの翻訳・リンクが行われます。このため、次に示す3つの環境変数の指定は必須です。なお、以下の説明では、{COB_BASED}がNetCOBOLのインストール先を示すものとして説明します。

LANGを除く環境変数の設定は、そのためのシェルスクリプトが各UNIX系システムのNetCOBOL製品に用意されており、通常はそれを使用します。

以下にその一覧を示します。

表2.10 翻訳・リンク時に必須の環境変数を設定するためのシェルスクリプト

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用

その他、必要に応じて次のような環境変数を指定します。

環境変数設定用のシェルスクリプト例

ここでは、設定する必要のある環境変数が次のようであると仮定して、その環境変数を設定するためのスクリプトの例を示します。

Solarisサーバの場合

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サーバの場合

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

2.3.1.3 リモートデバッグ時のサーバ側のユーザ環境の設定

ここではWindowsクライアントのリモートデバッガを使用して、UNIXサーバ側のプログラムをリモートデバッグする際に必要な環境変数の設定について説明します。

なお、ここでの説明は、“2.3.1.2 UNIXサーバ側のユーザ環境の設定”で説明した環境変数が設定済みであることを前提とします。

一般形式でのリモートデバッグ

2.1.3.1 リモートデバッグの2つの方式”で説明した通り、デバッグ対象のプログラムに有効となる環境変数は、サーバ側のリモートデバッガコネクタの起動時に有効であったものが引き継がれます。

デバッグ対象のプログラムに対して指定する必要がある環境変数は大きく2つに分かれます。

  1. 開発対象のプログラムで共通である環境変数の設定

    ファイル操作時のふるまい、印刷ファイルで使用するフォント等、マルチスレッド時の設定など開発対象プログラムで共通する設定です。

  2. 開発対象のプログラムそれぞれに固有である環境変数の設定

    入出力先ファイルを指定する環境変数が代表的なものです。

通常は、1に該当する環境変数はリモートデバッガコネクタの開始前に設定します。一方、2に該当する環境変数はデバッグ対象プログラム毎に実行環境初期化ファイルを用意して、リモートデバッグの開始時にそのファイルを指定することで設定します。

また、“2.1.3.2 リモートデバッグのためのサーバ側の環境設定”で説明したとおり、リモートデバッグを行うにあたって、サーバ側のリモートデバッガコネクタの起動が必要です。

しかし、個々の開発者がサーバ側のリモートデバッガコネクタを起動するにあたって、次の問題があります。

このため、開発管理者は一般の開発者がリモートデバッガコネクタの起動・終了を簡単、かつ、安全に行うために次の準備をする必要があります。

  1. 各開発者にリモートデバッグ時に使用するポート番号を割り当てる。

  2. リモートデバッガコネクタの起動前に適切な環境変数の設定を行うシェルスクリプトを用意する。

  3. リモートデバッガコネクタの起動・終了などの操作を開発者が誤りなく行えるように手順を用意する。

これらについては、リモートデバッガコネクタ起動・終了用の専用のシェルスクリプトを用意し、一般の開発者にはそれを使用してもらうようにするのが有効です。

以下にその例を示します。

リモートデバッガコネクタ起動終了用のシェルスクリプト例

#!/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