Linux、macOS および Raspbian での Zen の使用
 
このページをシェアする                  
Linux、macOS および Raspbian での Zen の使用
Linux、macOS および Raspbian で本製品を使った作業
以下のセクションは、サポートされている UNIX ベースのプラットフォームで動作する Zen のユーザーを対象読者としています。
必要な情報の参照
Linux、macOS、Raspbian での Zen のアカウント管理
設定
クライアント情報
Web ベースのデータベース アクセスの設定
Zen における Perl および ODBC の使用
必要な情報の参照
ユーザー マニュアルへのアクセス
ドキュメントにアクセスする方法は?を参照してください。
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 のユーザーにはパスワードがありません。su コマンドを使用することによって root アカウントでのみアクセスすることできます。
~zen-svc/.bash_profile を使ってユーザー zen-svc 用の .bash_profile にアクセスできます。
すべての Zen ファイルのユーザー:グループ所有権を zen-svc:zen-data に設定します。
Zen エンジンの起動スクリプトおよび停止スクリプトを実行するには、root でログインする必要があります。
ユーザーの .bash_profile またはシステムの /etc/profile に必要な環境変数を追加した場合は、root 以外のユーザー アカウントでもユーティリティを実行することができます。zen-svc 以外のユーザーからのユーティリティの使用を参照してください。
zen-svc 以外のユーザーからのユーティリティの使用で説明されている手順に加え、root 以外のユーザーが以下のユーティリティで機能を実行するには、zen-data グループのメンバーになる必要があります。
Zen Control Center(ZenCC):ローカル サーバーを管理する
License Administrator ユーティリティ(clilcadm):現在のライセンスの表示以外の機能を使用する
名前付きデータベース Maintenance ユーティリティ(dbmaint):現在のデータベースの表示以外の機能を使用する
Zen サービス レジストリ エディター(psregedit):レジストリの表示以外の機能を使用する
コマンド ライン設定(bcfg)
ユーザー環境
インストールされているコンポーネントの場所は、環境変数 $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
ユーザーのプロファイル。/etc/profile と似ていますが、現在のユーザーにのみ適用されるファイルです。
Linux および Raspbian では /home/username、macOS では /Users/username 内でこのファイルを探します。
/etc/profile
システム上の全ユーザー アカウント用のデフォルト プロファイル。全ユーザー アカウントに Zen ユーティリティへのアクセスを許可するには、このプロファイルを使用します。
例に従ってこのプロファイルを変更しても、Zen データへの管理権限やアクセス権は与えられません。
変更されたプロファイル例
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 つの設定について説明します。
Samba 設定ファイル
認証(Authentication)
すべての設定を調査する場合は、『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 システムへの接続に個別のパスワード ファイルを使用できます。
Linux、macOS、または Raspbian サーバーで BTPASSWD または PAM の認証を使用する場合、このサーバーに接続するクライアントで pvnetpass 使用してユーザー名とパスワードを設定する必要があります。pvnetpass の詳細については、『Zen User's Guide』を参照してください。
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 から入手します。
データベースを指す DSN(dsnadd を使用)
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>
PHP のその他の例
より一般的な PHP サンプル アプリケーションを弊社の Web サイトからオンラインで入手することができます。このアプリケーションではビデオ店の操作をシミュレートします。
このサンプルは Zen SDK に含まれている Pvideo データベースを使用しています。SDK をインストールしていない場合は、サンプル アプリケーションと一緒にこの Pvideo データベースをダウンロードすることができます。
Perl
Perl は Zen を使ったコマンド ラインおよび Web ベースのアプリケーションの両方に使用できます。
Zen Perl の要件
Perl
ODBC-DBD ライブラリ
CGI ライブラリ
データベースを指す DSN
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 をご覧ください。
Zen を Perl の ODBC インターフェイスで動作させるには
1 Perl をサポートするデータベース インターフェイス(DBI)をダウンロードします。
手順については、readme ファイルまたはインストール ファイルを参照してください。
2 Perl 用の ODBC DBD データベース ドライバーをダウンロードします。
readme またはインストール ファイルでインストール手順を参照してください。
3 次の例で示すように、適切な環境変数を設定してください。これらの設定は、iODBC のドキュメントでも説明されています。
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"
}