Linux、macOS および Raspbian での Zen の使用
Linux、macOS および Raspbian で本製品を使った作業
以下のセクションは、サポートされている UNIX ベースのプラットフォームで動作する Zen のユーザーを対象読者としています。
必要な情報の参照
ユーザー マニュアルへのアクセス
ドキュメントにアクセスする方法は?を参照してください。
man page
man page は Zen Enterprise Server、Cloud Server または Client のインストール時に一緒にインストールされます。man page を使用可能にするには $ACTIANZEN_ROOT/man/man1ディレクトリを参照してください。
man page へ簡単にアクセスできるようにするには、MANPATH 環境変数に $ACTIANZEN_ROOT/man を追加します。ユーティリティやアプリケーションの詳細については、『Zen User's Guide』のコマンド ライン インターフェイス ユーティリティを参照してください。
メモ:最新情報については、man page を調べてください。本マニュアルの情報と man page の情報は一致するように最善の努力を尽くしています。しかし、本マニュアルの発行後に行われた最終変更が man page に含まれている場合があります。
Linux、macOS、Raspbian での Zen のアカウント管理
ここでは、Zen の操作で必要となる Linux、macOS、および Raspbian ユーザー アカウントの情報について説明します。.bash シェルの使用を前提としていますが、他のシェルについても同様の手順が適用されます。
インストール後の動作
zen-svc 以外のユーザーからのユーティリティの使用で説明されている手順に加え、root 以外のユーザーが以下のユーティリティで機能を実行するには、zen-data グループのメンバーになる必要があります。
ユーザー環境
インストールされているコンポーネントの場所は、環境変数 $ACTIANZEN_ROOT により判別されます。
設定ファイルの一般的な場所は $ACTIANZEN_ROOT/etc です。
実行可能ファイルの場合は $ACTIANZEN_ROOT/bin です。
共有ライブラリ(32 ビット)の場合は $ACTIANZEN_ROOT/lib、共有ライブラリ(64 ビット)の場合は $ACTIANZEN_ROOT/lib64 です。
パスの環境変数に $ACTIANZEN_ROOT/bin を追加することをお勧めします。
次のセクションで説明しているように、$ACTIANZEN_ROOT/lib64 を LD_LIBRARY_PATH(Linux および Raspbian の場合)または DYLD_LIBRARY_PATH(macOS の場合)に追加してください。
32 ビット Client Access パッケージを使用している場合は、$ACTIANZEN_ROOT/lib も LD_LIBRARY_PATH に追加する必要があります。macOS では、32 ビットのパッケージはサポートされていません。
zen-svc 以外のユーザーからのユーティリティの使用
zen-svc 以外のユーザー アカウントからユーティリティを使用するには、まずユーザー アカウントの設定を変更する必要があります。特定のユーザーのプロファイル、あるいは全ユーザーが継承する /etc プロファイルに、以下に示す例から行をコピーしてください。
/home/username/.bash_profile
/Users/username/.bash_profile
Linux および Raspbian では /home/username、macOS では /Users/username 内でこのファイルを探します。
変更されたプロファイル例
Zen に関連するすべての変数を必ずエクスポートするようにしてください。
Linux および Raspbian
ACTIANZEN_ROOT=/usr/local/actianzen
PATH=$PATH:$ACTIANZEN_ROOT/bin:/bin:/usr/bin
LD_LIBRARY_PATH=$ACTIANZEN_ROOT/lib64:$ACTIANZEN_ROOT/lib:$ACTIANZEN_ROOT/bin:/usr/lib
MANPATH=$MANPATH:$ACTIANZEN_ROOT/man
macOS
ACTIANZEN_ROOT=/usr/local/actianzen
PATH=$PATH:$ACTIANZEN_ROOT/bin:/bin:/usr/bin
DYLD_LIBRARY_PATH=$ACTIANZEN_ROOT/lib64:$ACTIANZEN_ROOT/lib:$ACTIANZEN_ROOT/bin:/usr/lib
MANPATH=$MANPATH:$ACTIANZEN_ROOT/man
設定
一般的に、Zen のサーバーとクライアントのデフォルト設定はそのまま使用しても問題はありません。通常、データベース エンジンとクライアントの通信や機能について設定を行う必要はありません。このトピックでは、変更を行う可能性のある 2 つの設定について説明します。
すべての設定を調査する場合は、『Advanced Operations Guide』の設定リファレンスを参照してください。
Samba 設定ファイル
Zen サーバーは Samba の設定ファイル(smb.conf)のパスを定義します。パスはエンジンの起動時に解析され、共有名とサーバーのディレクトリの場所の間のマッピングが判別されます。『Advanced Operations Guide』の Configuration File(Linux、macOS、および Raspbian エンジンのみ)を参照してください。
認証(Authentication)
この設定は、サーバー エンジンへのアクセスに使用する認証のタイプを提供します。
Emulate Workgroup Engine。Samba を使用してシステムのユーザー アクセスを認証する場合は、この値を使用します。
Proprietary Authentication(using btpasswd)(専用認証(btpasswd の使用))。Samba を使用せず、ユーザーがサーバーにアカウントを持っていない場合は、この値を使用します。Linux、macOS、または Raspbian システムへの接続に個別のパスワード ファイルを使用できます。
Standard Linux Authentication(標準 Linux 認証)。Samba を使用せず、ユーザーが Linux、macOS、または Raspbian システムにアカウントを持っている場合、この値を使用します。
Samba 用にサポートされるパスの形式
Windows クライアント
Windows の Zen Client からのパスの解析順序は次のようになります。
\\server\share\relative\path
share は、Windows クライアントにアクセスを許可された、有効な Samba 共有を表します。
server は、smb.conf を読み取って共有ディレクトリの絶対パスを判別し、それを相対パスと結合してフル パスを完成します。smb.conf の場所は、クライアントでこの形式で提供されるファイル パスの解決を有効にするために不可欠です。相対パス部分(relative\path)が間違っている場合、ステータス コード 12 が返されます。
Drive:\path
Drive は、Windows クライアントで割り当てられた Samba のドライブです。このドライブから、Zen Client は Btrieve ファイルが存在するサーバーを決定します。
Linux、macOS、または Raspbian クライアント
Linux、macOS、または Raspbian の Zen Client からのパスの解析順序は次のようになります。
//server/share/relative/path
share は、サーバー上の有効な Samba 共有名を示します。
サード パーティー製の Samba パッケージを使用するシステムでは、server は smb.conf を読み取って共有ディレクトリの絶対パスを判別し、それを相対パスと結合してフル パスを完成します。smb.conf の場所は、クライアントでこの形式で提供されるファイル パスの解決を有効にするために不可欠です。
smb.conf ではなくネイティブな SMB ファイル共有を使用する macOS システムでは、server はオペレーティング システムから直接、共有情報を解決します。
どの場合においても、相対パス部分(relative/path) が間違っている場合はエラー ステータスが返されます。
/Mount/path
Mount は、Linux、macOS、または Raspbian でマウントされた Samba のドライブです。このドライブから、Zen Client は Btrieve ファイルが存在するサーバーを決定します。
メモ:Linux ベースのサーバーのクライアントの共有名では大文字小文字が区別されます。サーバーとクライアントの共有名が完全に一致しないと、通信することができません。
Linux、macOS、および Raspbian サーバーでは、Zen エンジンは smb.conf と共有名のいずれも見つけられなかった場合、デフォルトの \\server\absolute_path(絶対パス)形式であると見なします。絶対パスが間違っている場合、ステータス 12 が返されます。
クライアント情報
クライアントとサーバー コンピューターが 1 つの共有プロトコルによって通信できれば、Linux、macOS 、または Raspbian 上の Zen Client は、どの Zen サーバー エディションへも接続できます。
リモート マシンへの認証
Linux、macOS、または Raspbian クライアントを使ってリモート マシンに接続するには、そのリモート マシンへの認証が必要です。これを行うには、pvnetpass ユーティリティを使用してユーザー名とパスワードをサーバーへ送ります。このユーティリティでは、クライアント マシン上の Zen レジストリに、その特定のサーバーのユーザー名とパスワードを暗号化された形式で保存します。ユーザー名とパスワードを指定しない場合は、アプリケーションでステータス コード 3119 を受け取ります。
Zen User's Guide』の pvnetpass を参照してください。
クライアント DSN の作成
クライアント上のアプリケーションが ODBC 経由で Zen リレーショナル エンジンを使用する場合は、クライアントのデータ ソース名(DSN)が必要です。クライアント DSN を作成するには、Zen Client に含まれている dsnadd ユーティリティを使用します。『Zen User's Guide』の dsnadd を参照したり、/usr/local/actianzen/man/man1 にある man page で「dsnadd」を参照してください。
Web ベースのデータベース アクセスの設定
ここでは、Linux または macOS の Web アプリケーションから Zen データにアクセスするための Web サーバーの構成方法、また、その Zen データにアクセスするための接続用コードの抜粋やサンプル コードを提供します。この使用事例には Raspbian はサポートされません。
ODBC の動作
Zen を最初にインストールしたとき、odbc.ini ファイル は /usr/local/actianzen/etc に書き込まれます。
unixODBC など他の ODBC ドライバー マネージャーがある場合、これらのドライバー マネージャーは /etc/odbc.ini といった別の場所にある odbc.ini ファイルを使用する可能性があります。
ODBC セットアップを統一するための方法として、次の例に示すように、unixODBC が odbc.ini ファイルがあると考える場所と Zen ディレクトリとの間のソフト リンクを追加する方法があります。
su
cd /etc
ln -s /usr/local/actianzen/etc/odbc.ini
Web サーバーの構成
ここでは、Apache などの Web サーバーが搭載されているマシンを設定する方法について説明します。
Apache などの Web サーバーを起動するユーザー アカウントは、zen グループに属していなければなりません。これらのユーザー アカウントは nobody などの制限付きアカウントに基づいて実行します。
ユーザー アカウントを探す場合は Apache 構成ファイルを見てください。これは通常 /etc/httpd/conf/httpd.conf にあります。
このファイルの次の行は、Apache サーバーがどのようなユーザーの下で動作するかを示しています。
User nobody
Group nobody
Options ExecCgi Indexes
このユーザーを zen-data グループに追加し、お使いの Apache 構成ファイルで使用している名前に置き換えます。
/usr/bin/gpasswd -a nobody zen-data
PHP
PHP では、Microsoft の ASP や Java の JSP に類似したスタイルを使用して Web アプリケーションの開発を簡単に行うことができます。PHP の使用は HTML でデータベース呼び出しを特殊なタグで囲み、出力を書式設定します。
Zen PHP の要件
PHP - http://www.php.net から入手します。
PHP の接続用コードの一部
このコードは PHP を使って Zen データベースに接続する基本的な部分です。
// ユーザー ID、パスワードなしで Demodata データベースに接続する
$connect = odbc_connect("demodata", "", "");

// クエリ変数を SQL に設定する
$query = "SELECT * from Department";

// クエリの結果オブジェクトを取得する
$result = odbc_exec($connect, $query);
PHP の例
以下に示す完全なサンプル コードでは、ユーザーが Demodata の 3 つのテーブルから 1 つを選択し、そのテーブルを表示します。
<HTML>
<HEAD>
<TITLE>PHP の例</TITLE>
</HEAD>
<BODY>
 
<H1>Hello World のサンプル - PHP ODBC API を使用した PHP</H1>
<p>
このサンプル コードでは PHP を使用して下記のドロップダウン リストにある Demodata データベースのテーブルを表示します。
</p>
 
<?
 
// -------メイン メニュー----------------------------
 
// URL 内に指定された機能がない場合
 
 
if (!(isset ($HTTP_GET_VARS["_function"]))):
 
// --------------------------------------------
 
?>
 
<p>以下のテーブルから選択してください。</p>
<form method=post action='<?=$PHP_SELF?>?_function=showtable'>
<select name="selecttable">
<option SELECTED value="Department">Department
<option value="Course">Course
<option value="Room">Room
</select>
 
<p>
<input type=submit value="テーブルの表示">
</p>
</form>
 
<?
 
// ------テーブルの表示-----------------------------
 
Elseif ($HTTP_GET_VARS["_function"] == "showtable"):
 
// --------------------------------------------
 
print("<p><a href='$PHP_SELF'>サンプル 1 メイン メニュー</a>に戻る</p>");
 
$thetable = $HTTP_POST_VARS["selecttable"];
// フォームのデータから開くテーブルを決定する
 
$connect = odbc_connect("demodata", "", "");
// ユーザー ID、パスワードなしで Demodata データベースに接続する
$query = "SELECT * from $thetable";
// 実行する SQL に含めるクエリ変数を設定する
$result = odbc_exec($connect, $query);
// クエリを実行する
 
// 結果セット全体を HTML テーブルとして出力する
//(以下の行のコメントを解除します)
// odbc_result_all($result);
 
// あるいは、出力を独自に書式設定し、
// より見やすいテーブルを表示する(ただし、より多くのコード作成が必要)
 
// 行カウンターを初期化する
$i = 0;
 
// 列数を決定する
$numcols = odbc_num_fields($result);
 
// HTML テーブルを開始する
print("<table border=1 cellpadding=5>");
 
 
// 列見出しの印刷
 
print("<tr>"); // 行の開始
 
while ($i < $numcols)
{
$i++;
$colname = odbc_field_name($result, $i);
print("<th>$colname</th>");
}
$i=0;
 
print("</tr>");       // 行の終了
 
// テーブル データの出力
 
// 行が存在する限り実行
while(odbc_fetch_row($result))
{
    print("<tr>");    // 行の開始
 
    while ($i < $numcols)
      {
        $i++;
        $tablecell = odbc_result($result, $i);
        print("<td>$tablecell</td>");
      }
 
      print("</tr>");      // 行の終了
      $i = 0;              // カウンターのリセット
 
}                       // odbc フェッチ行の終了
print("</table>");       // HTML テーブルの終了
 
odbc_close($connect);     // 接続を閉じる
 
// テーブル表示の終了
 
// ---無効なメニュー オプションの取得-----------------
 
Else:
 
// ----------------------------------------------
 
print("<p>無効な機能が入力されました。<a href='$PHP_SELF'>再試行</a>してください。</p>");
 
 
Endif;
 
?>
</BODY>
</HTML>
Perl
Perl は Zen を使ったコマンド ラインおよび Web ベースのアプリケーションの両方に使用できます。
Zen Perl の要件
Perl の接続用コードの一部
このコードは Perl を使って Zen データベースに接続する基本的な部分です。
# Perl のデータベース インターフェイス(DBI)の使用を指定する
use DBI;
 
# ユーザー ID、パスワードなしで Demodata データベースに接続する
$dbInfo = "DBI:ODBC:DEMODATA";
$dbUserName = "";
$dbPassword = "";
 
# クエリ変数を SQL に設定する
$query = "SELECT * FROM Department";
 
# サーバーへ接続する
$connect = DBI->connect($dbInfo, $dbUserName, $dbPassword);
 
# SQL クエリを準備する
$myRecordSet = $connect->prepare($query);
 
# クエリを実行してレコードセットを取得する
$myRecordSet->execute();
 
Perl の例
以下に示す完全なサンプル コードでは、ユーザーが Demodata の 3 つのテーブルから 1 つを選択し、そのテーブルを表示します。
# Perl の例
 
use CGI":cgi-lib";
$cgiquery = new CGI;
 
$functionreq = $cgiquery->url_param('_function');
# GET の場合は 'url_param' を、POST の場合は 'param' を使用する
 
print &PrintHeader;
print &HtmlTop("Hello World サンプル - Perl");
 
print <<ENDOFMENU;
<H1>Hello World サンプル - Perl</H1>
 
<P>
このサンプル コードでは Perl/DBI を使用して下記のメニュー リストにある Demodata データベースのテーブルを表示します。
</p>
ENDOFMENU
 
# -----メイン メニュー-------------------------------
 
# URL 内に指定された機能がない場合
 
if (!$functionreq) {
 
# ---------------------------------------------
 
print <<ENDOFTEXT;
 
<p>以下のテーブルから選択してください。</p>
<form method=post action="$ENV{'SCRIPT_NAME'}?_function=showtable">
<select name="selecttable">
<option SELECTED value="Department">Department
<option value="Course">Course
<option value="Room">Room
</select>
<p>
<input type=submit value="テーブルの表示">
</p>
</form>
 
ENDOFTEXT
 
} # !($function)
 
# ------テーブル表示-------------------------------
 
elsif ($functionreq eq "showtable") {
 
print("<p><a href='$ENV{'SCRIPT_NAME'}'>Perl Hello World サンプル - メイン メニュー</a>に戻る</p>");
 
# フォームのデータから開くテーブルを決定する
$thetable = $cgiquery->param('selecttable');
 
use DBI;
 
$dbInfo = "DBI:ODBC:DEMODATA";
$dbUserName = "";
$dbPassword = "";
 
$query = "SELECT * FROM $thetable";
$connect = DBI->connect($dbInfo, $dbUserName, $dbPassword);
 
$myRecordSet = $connect->prepare($query);
$myRecordSet->execute();
 
# HTML テーブルを開始する
print "<table border=1 cellpadding=5>";
 
# 列見出しの印刷
 
$num_fields = $myRecordSet->{NUM_OF_FIELDS};
$count = 0;
 
print "<tr >";
while ($count < $num_fields) {
$column_name = $myRecordSet->{NAME}->[$count];
print "<th>$column_name</th>";
$count++;
}
print "</tr>\n";
 
$count = 0;
 
# テーブル データの出力
 
while(@row=$myRecordSet->fetchrow_array) {
print "<tr>\n";
while ($count < $num_fields) {
print "<td>$row[$count]</td>\n";
$count++;
}
print "</tr>\n";
$count = 0;
}
 
print "</table>";            # HTML テーブルの終了
# テーブル表示の終了
}
 
# -----無効なメニュー オプションの取得----------------
 
else {
 
print "<p>無効な機能が入力されました。<a href='$ENV{'SCRIPT_NAME'}'>再試行</a>してください。</p>";
 
}
 
print &HtmlBot;
Zen における Perl および ODBC の使用
メモ:この手順は、Zen、Perl および ODBC ディストリビューションがインストールされていることを前提にしています。www.iODBC.org で ODBC のフリー バージョンを入手することができます。Perl については www.perl.org をご覧ください。
1
手順については、readme ファイルまたはインストール ファイルを参照してください。
2
readme またはインストール ファイルでインストール手順を参照してください。
3
Perl および DBI 用のコードの一部
print "using odbc...\n";
use DBI;
$dbName = "DBI:ODBC:DEMODATA";
$dbUserName = "";
$dbPassword = "";
print "connecting...\n";
$sql = "SELECT * FROM class";
$dbh = DBI->connect($dbName, $dbUserName, $dbPassword);
$dataObject = $dbh->prepare($sql);
$dataObject->execute();
while(@row=$dataObject->fetchrow_array)
{
print "$row[0]\t$row[1]\t$row[2]\n\n"
}