Perforceブローカ

ブローカとは

Perforceブローカ(P4Broker)を使用すれば、実行可能なコマンドを制限すること、または代替(レプリカまたはエッジ)Perforceサーバへ特定のコマンドをリダイレクトすることで、Perforce環境でローカルポリシーを実装することができます。

PerforceブローカはPerforceクライアントアプリケーションとPerforceサーバ(プロキシサーバを含む)の間に介在するサーバプロセスです。例えば、Perforceクライアントアプリケーションをブローカに接続しているプロキシサーバに接続して、さらにブローカをPerforceサーバに接続するという構成が可能です。あるいは、Perforceクライアントアプリケーションはレポート関連コマンドを読み取り専用レプリカサーバにリダイレクトし、その他のコマンドをマスターサーバに送るように構成されたブローカに接続できます。

エンドユーザの側から見るとブローカは透過的であり、ユーザは他のPerforceサーバと接続するときと全く同様にPerforceブローカに接続します。

動作環境

Perforceブローカを使用するには、以下のものが必要です。

  • リリース2007.2以降のPerforceサーバ(SSLを使用するには2012.1以降)

  • リリース2007.2以降のPerforceアプリケーション(SSLを使用するには2012.1以降)

PerforceブローカはPerforceサーバ(P4D)の近くに位置するホストで動作するように設計されています。可能であれば、同一マシン上で実行することが推奨されます。

ブローカをインストールする

P4Brokerをインストールするには、以下のことを行います。

  1. p4broker実行ファイルをPerforce Webサイトからダウンロードします。

  2. P4Brokerをホスト上の適当なディレクトリ(/usr/local/binなど)にコピーし、バイナリを実行可能な状態にします。

    chmod +x p4broker

ブローカを実行する

コンフィギュレーションファイルを作成したら(ブローカを構成するを参照)、コマンドラインで次のコマンドを実行して、Perforceブローカを起動します。

p4broker -c config_file

あるいは、ブローカを起動する前にP4BROKEROPTIONSを設定し、それによって使用するブローカコンフィギュレーションファイル(またはその他のオプション)を指定することができます。

例えば、Unixの場合:

$ export P4BROKEROPTIONS="-c /usr/perforce/broker.conf"
$ p4broker -d

Windowsの場合:

> p4 set -s P4BROKEROPTIONS="-c c:\p4broker\broker.conf"
> p4broker

Perforceブローカは指定したブローカコンフィギュレーションファイルを読み取ります。また、Unixプラットフォームで-dオプションを指定すると、Perforceブローカは制御端末から分離し、バックグラウンドで実行されます。

Perforceブローカが自動的に起動するように構成するには、P4BROKEROPTIONSを設定し、適切なp4brokerコマンドを実行するような起動スクリプトを作成します。

Windowsシステムでは、P4BROKEROPTIONSを設定してブローカをサービスとして実行することもできます。これを行うには、次の手順に従います。

cd C:\p4broker\
copy p4broker.exe p4brokers.exe
copy "C:\Program Files\Perforce\Server\svcinst.exe" svcinst.exe
svcinst create -n P4Broker -e "C:\p4broker\p4brokers.exe" -a
p4 set -S P4Broker P4BROKEROPTIONS="-c C:\p4broker\p4broker.conf"
svcinst start -n P4Broker

svcinst.exeは標準的なWindowsプログラムです。P4Brokerが、Windowsサービスに与えられた名前です。詳細については、Perforceナレッジベースの「Installing P4Broker on Windows and Unix systems」を参照してください。

http://answers.perforce.com/articles/KB_Article/Installing-P4Broker-on-Windows-and-Unix-systems

SSLのサポートを有効にする

Perforceブローカとエンドユーザとの間の接続を暗号化するには、ブローカに有効なプライベートキーと証明書のペアがP4SSLDIR環境変数で指定されたディレクトリに登録されている必要があります。ブローカに対する証明書とキーの生成および管理は、Perforceサーバで行う場合と同様に行われます。詳細については、SSLのサポートを有効にするを参照してください。ユーザのPerforceアプリケーションは、ブローカのフィンガープリントを信頼するように設定されていなければなりません。

PerforceブローカとPerforceサーバとの間の接続を暗号化するには、ブローカがPerforceサーバのフィンガープリントを信頼するように設定されていなければなりません。したがって、p4brokerを実行するユーザ(通常はサービスユーザ)はPerforceサーバのフィンガープリントを認識するP4TRUSTファイルを(p4 trustを使用して)作成する必要があります。また、そのファイルへのパスを指定するP4TRUSTを設定する必要があります(P4TRUST)はブローカコンフィギュレーションファイルでは指定できません。

ブローカ情報

p4 infoを実行して、ブローカに接続されているかどうかを知ることができます。ブローカに接続されると、出力にBroker addressBroker versionが表示されます。

$ p4 info
User name: bruno
Client name: bruno-ws
Client host: bruno.host
Client root: /Users/bruno/Workspaces/depot
Current directory: /Users/bruno/Workspaces/depot/main/jam
Peer address: 192.168.1.40:55138
Client address: 192.168.1.114
Server address: perforce:1667
Server root: /perforce/server/root
Server date: 2014/03/13 15:46:52 -0700 PDT
Server uptime: 92:26:02
Server version: P4D/LINUX26X86_64/2014.1/773873 (2014/01/21)
ServerID: master-1666
Broker address: perforce:1666
Broker version: P4BROKER/LINUX26X86_64/2014.1/782990
Server license: 10000 users (support ends 2016/01/01)
Server license-ip: 192.168.1.40
Case Handling: sensitive

ブローカに接続されると、p4 brokerコマンドを使用してブローカ情報の簡略レポートを表示させることができます。

$ p4 broker
Current directory: /Users/bruno/Workspaces/depot/main/jam
Client address: 192.168.1.114:65463
Broker address: perforce:1666
Broker version: P4BROKER/LINUX26X86_64/2014.1/782990

ブローカとプロテクション

ブローカユーザのワークステーションのIPアドレスをプロテクションテーブルに対して適用するには、ワークステーションのIPアドレスの先頭にproxy-という文字列を追加します。

例えば、192.168.10.0/24というサブネット上のワークステーションでリモート開発を行っている組織を考えてみます。この組織には、ローカル開発を行っている中央オフィスもあり、この中央オフィスは10.0.0.0/8というサブネット上に存在しています。Perforceサービスは10.0.0.0/8のサブネット上にあり、ブローカは192.168.10.0/24のサブネット上にあります。リモートサイトのユーザはremotedevグループに属しており、時々中央オフィスにアクセスします。各サブネットには、対応するIPv6アドレスのセットも存在しています。

remotedevグループのメンバーが、リモートサイトでの作業時にはブローカを使用し、ローカルサイトを使用している場合にはブローカを使用しないようにするには、プロテクションテーブルに以下の行を追加します。

list    group    remotedev     192.168.10.0/24              -//...
list    group    remotedev     [2001:db8:16:81::]/48        -//...
write   group    remotedev     proxy-192.168.10.0/24         //...
write   group    remotedev     proxy-[2001:db8:16:81::]/48   //...
list    group    remotedev     proxy-10.0.0.0/8             -//...
list    group    remotedev     proxy-[2001:db8:1008::]/32   -//...
write   group    remotedev     10.0.0.0/8                    //...
write   group    remotedev     proxy-[2001:db8:1008::]/32    //...

1行目では、192.168.10.0/24のサブネット上のワークステーションからブローカを使用せずPerforceにアクセスしようと試みた場合に、remotedevグループのすべてのユーザに対してlistアクセスが拒否されます。2行目では、IPV6のサブネット[2001:db8:16:81::]/48からアクセスしようとした場合に、1行目と同じ方法でアクセスが拒否されます。

3行目では、192.168.10.0/24のサブネット上のワークステーションから作業していて、ブローカを使用している場合に、remotedevグループのすべてのユーザに対してwriteアクセスが許可されます。リモートサイトにあるワークステーションのユーザは、ブローカを使用しなければなりません。(ブローカ自体がこのサブネット内に存在している必要はありません。例えば、192.168.20.0に存在していても構いません。)4行目では、IPV6 [2001:db8:16:81::]/48サブネットからアクセスが試みられた場合に、同様にアクセスが拒否されます。

同様に、5行目と6行目では、中央オフィスのサブネット(10.0.0.0/8[2001:db8:1008::]/32)上のワークステーションからブローカの使用を試みた場合、remotedevユーザに対してlistアクセスが拒否されます。7行目と8行目では、中央オフィスのサブネット上のワークステーションから直接Perforceサーバにアクセスするremotedevユーザに対して、書き込みアクセス権が許可されます。remotedevグループのユーザがローカルサイトにアクセスする場合は、Perforceサーバに直接アクセスする必要があります。

Perforceサービスがプロテクションテーブルのエントリを評価する際に、dm.proxy.protects構成も評価されます。

dm.proxy.protectsデフォルトを1に設定すると、媒介(プロキシ、ブローカ、またはエッジサーバ)を経由して接続するすべてのクライアントホストアドレスの先頭に、プレフィックスproxy-が追加されます。これは、接続が直接でないことを示します。

dm.proxy.protects0に設定すると、proxy-プレフィックスが削除され、プロテクションエントリを1セット書き込むことができます。これは、直接接続しているクライアントと媒介を経由して接続しているクライアントの両方に適用されます。これは便利ですが、媒介を経由して接続することに問題がある場合、安全性が低下します。この設定を使用する場合は、すべての媒介がリリース2012.1以降になっている必要があります。

P4Brokerオプション

オプション

意味

-c file

コンフィギュレーションファイルを指定します。P4BROKEROPTIONS設定をオーバーライドします。

-C

サンプルのコンフィギュレーションファイルを出力し、終了します。

-d

デーモンとして(バックグラウンドで)実行されます。

-f

(フォークなしの)シングルスレッドプロセスとして実行されます。

-h

ヘルプメッセージを出力し、終了します。

-q

起動メッセージなどを表示せずに実行します。

-V

ブローカバージョンを表示して、終了します。

-v subsystem=level

サーバトレースオプションを設定します。P4DEBUG設定の値をオーバーライドしますが、p4broker.confファイルのdebug-level設定はオーバーライドしません。デフォルト設定はnullです。

サーバコマンドトレースオプションおよびそれらの意味は、以下の通りです。

トレースオプション

意味

server=0

ブローカコマンドのログ記録を無効にします。

server=1

ブローカコマンドをサーバログファイルに記録します。

server=2

レベル1で記録されるデータのほか、ブローカコマンドの完了、CPU使用時間の基本情報を記録します。経過時間は秒単位でレポートされます。UNIXでは、CPUの使用状況(システムとユーザ時間)がgetrusage()に基づいてミリ秒単位でレポートされます。

server=3

レベル2で記録されるデータのほか、p4 syncおよびp4 flush(p4 sync -k)コマンドの計算フェーズの使用情報を追加します。

コマンドトレーシングでは、出力は特定のログファイルに表示され、日付、時間、ユーザ名、IPアドレス、およびサーバにより処理される各リクエストのコマンドを示します。

-Gc

ブローカのSSL資格情報ファイルを生成します。P4SSLDIRでプライベートキー(privatekey.txt)と証明書ファイル(certificate.txt)を作成し、終了します。

P4SSLDIRが、コマンドを起動するユーザが所有するディレクトリに設定され、そのユーザに対して読み取り専用である必要があります。P4SSLDIRconfig.txtが存在する場合、特定の性質を持つ自己署名証明書が生成されます。

-Gf

ブローカのパブリックキーのフィンガープリントを表示し、終了します。

管理者はこのフィンガープリントをエンドユーザに伝え、ユーザはp4 trustコマンドを使用して(接続先のサーバの)フィンガープリントが正確かどうかを知ることができます。

ブローカを構成する

P4Brokerはブローカコンフィギュレーションファイルにより制御されます。ブローカコンフィギュレーションファイルは、次を行うにあたってのルールを含むテキストファイルです。

個々のユーザが使用できるコマンドを指定する

指定されたレプリカサーバにリダイレクトすべきコマンドを定義する

ブローカコンフィギュレーションファイルのサンプルを生成するには、次のコマンドを実行します。

p4broker -C > p4broker.conf

新規作成したp4broker.confファイルを編集して、要件を指定することができます。

ブローカコンフィギュレーションファイルの形式

ブローカコンフィギュレーションファイルには、次の3つの部分が含まれています。

  • グローバル設定: すべてのブローカ操作に適用される設定

  • 代替サーバの定義: 特定の状況下で、コマンドがリダイレクトできるレプリカサーバのアドレスと名前

  • コマンドハンドラの仕様: 個々のコマンドが処理される方法を指定します。任意の与えられたコマンドに対してコマンドハンドラが存在しない場合、Perforceブローカがそのコマンドの実行を許可します

ホストを指定する

ブローカの設定には、target設定の指定が必要であり、この設定では、コマンドの送信先のPerforceサービス、ブローカがPerforceクライアントアプリケーションからのコマンドを待機するアドレスを識別するlistenアドレス、Perforceサービスに接続されているレプリカやプロキシなどのブローカを識別するオプションのaltserver代替サーバアドレスが識別されます。

ホストの仕様は、protocol:host:portの形式を使用します。ここで、protocolは通信プロトコル(SSLの場合はssl:から、プレーンテキストではtcp:から始まる)、hostは接続先マシンのIPアドレスの名前、portはホストにあるポートの数を示します。

プロトコル

動作

<not set>

構成可能変数のnet.rfc3484が設定されている場合、OSにより、どのトランスポートを使用するかが決まります。これは、ホスト名(FQDNまたは非修飾)が使用されている場合にのみ該当します。

IPv4のリテラルアドレス(例:127.0.0.1)が使用されている場合、トランスポートは常にtcp4であり、IPv6のリテラルアドレス(例:::1)が使用されている場合、トランスポートは常にtcp6です。

tcp:

tcp4:の動作が使用されますが、アドレスが数値で2つ以上のコロンが含まれている場合は、tcp6:が使用されます。構成可能変数のnet.rfc3484が設定されている場合、OSにより、どのトランスポートを使用するかが決まります。

tcp4:

IPv4アドレス/ポートにのみ接続待機または接続します。

tcp6:

IPv6アドレス/ポートにのみ接続待機または接続します。

tcp46:

IPv4アドレス/ポートに対して接続待機または接続を試みます。失敗した場合、IPv6への接続または接続待機を試みます。

tcp64:

IPv6アドレス/ポートに対して接続待機または接続を試みます。失敗した場合、IPv4への接続または接続待機を試みます。

ssl:

ssl4:の動作が使用されますが、アドレスが数値で2つ以上のコロンが含まれている場合は、ssl6:が使用されます。構成可能変数のnet.rfc3484が設定されている場合、OSにより、どのトランスポートを使用するかが決まります。

ssl4:

IPv4アドレス/ポートにのみ、SSL暗号化を使用して接続待機または接続します。

ssl6:

IPv6アドレス/ポートにのみ、SSL暗号化を使用して接続待機または接続します。

ssl46:

IPv4アドレス/ポートに対して接続待機または接続を試みます。失敗した場合、IPv6への接続または接続待機を試みます。接続後は、SSLによる暗号化を必要とします。

ssl64:

IPv6アドレス/ポートに対して接続待機または接続を試みます。失敗した場合、IPv4への接続または接続待機を試みます。接続後は、SSLによる暗号化を必要とします。

hostフィールドには、ホストのホスト名またはそのIPアドレスを入力します。IPv4アドレスおよびIPv6アドレスの両方がサポートされています。listen設定で、ワイルドカードの「*」を使用して、すべてのIPアドレスを参照することができます。ただし、CIDR表記を使用していない場合に限られます。

ワイルドカードの「*」をIPv6アドレスで使用する場合、IPv6アドレス全体を角括弧で囲む必要があります。例えば、[2001:db8:1:2:*][2001:db8:1:2::]/64は同じ意味になります。CIDR表記を使用してIPv6アドレスを角括弧で囲み、ワイルドカードの「*」は使用しないことをお勧めします。

グローバル設定

ブローカに対して指定するすべての操作に、次の設定が適用されます。

設定

意味

target

コンフィギュレーションファイルの他の設定で書き換えられない限り、コマンドの送信先となるデフォルトのPerforceサーバ(P4D)。

target = [protocol:]host:port;

listen

PerforceブローカがPerforceクライアントアプリケーションからのコマンドを待機するアドレス。

listen = [protocol:][host:]port;

directory

Perforceブローカのホームディレクトリ。ブローカコンフィギュレーションファイルで指定される他のパスは、この位置に相対的である必要があります。

directory = path;

logfile

Perforceブローカのログファイルへのパス。

logfile = path;

debug-level

ログに記録するデバッグ出力レベル。-vオプションおよびP4DEBUGにより指定される値をオーバーライドします。

debug-level = server=1;

admin-name

Perforce管理者の名前。特定のエラーメッセージ内に表示されます。

admin-name = "P4 Admin";

admin-email

Perforce管理者の問い合わせ先電子メールアドレス。ブローカの構成に問題が発生した場合にユーザに表示されます。

admin-email = admin@example.com;

admin-phone

Perforce管理者の電話番号。

admin-phone = nnnnnnn;

redirection

使用するリダイレクトモード: selectiveまたはpedantic

selectiveモードでは、デフォルト(ターゲット)サーバに対して1つのコマンドが実行されるまで、1つのセッション内でリダイレクトが許可されます。コマンドが実行されると、そのセッション内のすべてのコマンドがデフォルトサーバに対して実行され、リダイレクトされません。

pedanticモードでは、リダイレクトのリクエストはすべて尊重されます。

デフォルトのモードはselectiveです。

redirection = selective;

service-user

ブローカがターゲットサーバと通信する際に、自身を認証するために用いるオプションのユーザアカウント。

セキュリティ上の問題があるとされているため、ブローカ構成にはパスワードを指定する設定が含まれていません。p4 login -u service-user -pコマンドを使用してチケットを生成してください。ファイルに表示されたチケット値を書き留め、ticket-file設定にそのファイルのパスを設定します。

ブローカを継続的に動作させるには、service-userユーザを、Timeout設定がunlimitedのグループに含めてください。デフォルトのチケットタイムアウトは12時間です。

service-user = svcbroker;

ticket-file

P4TICKETSファイルのオプションの代替場所。

ticket-file = /home/p4broker/.p4tickets;

compress

ブローカとサーバ間の通信を圧縮します。WANなどの低速のリンクでは、圧縮によりパフォーマンスを向上させることができます。ブローカおよびサーバが互いに近接している場合(特に同じ物理マシンに配置されている場合)、帯域幅は問題となりません。CPUサイクルを節約するために、圧縮は無効にしてください。

compress = false;

altserver

ターゲットサーバのロードを削減するオプションの代替サーバ。代替サーバに割り当てられているnameコマンドハンドラの仕様で使用されています。詳しくは、代替サーバの定義を参照してください。

各代替サーバに1つのブローカコンフィギュレーションファイルに、複数のaltserver設定が表示される場合があります。

altserver name { target=[protocol:]host:port };

altserver設定は、それぞれ1行で表示される必要があります。

コマンドハンドラの仕様

コマンドハンドラでは、異なる環境から異なるユーザが異なるコマンドを実行した場合に、ブローカがどう応答するかを指定することができます。ユーザがコマンドを実行する時、Perforceブローカは一致するコマンドハンドラを検索し、最初に見つかった一致を使用します。ユーザのコマンドに一致するコマンドハンドラが存在しない場合、コマンドはターゲットのPerforceサーバに転送され、通常処理されます。

コマンドハンドラの仕様の一般的なシンタックスは、broker.confのサンプルに示されています。

command: commandpattern
{
# Conditions for the command to meet (optional)
# Note that with the exception of 'flags', these are regex patterns.
  flags           = required-flags;
  args            = required-arguments;
  user            = required-user;
  workspace       = required-client-workspace;
  prog            = required-client-program;
  version         = required-version-of-client-program;

  # What to do with matching commands (required)
  action  = pass | reject | redirect | filter | respond ;

  # How to go about it
  destination = altserver;            # Required for action = redirect
  execute = /path/to/filter/program;  # Required for action = filter
  message = rejection-message;        # Required for action = reject
}

commandpatternパラメータには正規表現を使用でき、ワイルドカード「.*」を含めることができます。例えば、commandpatternの「user.*」は「p4 user」コマンドと「p4 users」コマンドの両方に一致します。詳しくは、正規表現の概要を参照してください

以下の表はパラメータについて詳しく説明しています。

パラメータ

意味

options

処理されるコマンドのコマンドラインに指定される可能性のあるオプションのリスト。

この機能により、ユーザが指定するオプションに応じて、同じp4コマンドに異なる処理を指定することができます。ここでは1文字のオプションのみが指定できることにご注意ください。複数の文字からなるオプションや、引数をとるオプションは、フィルタプログラムを使用して処理してください。

args

処理されるコマンドのコマンドラインで指定される可能性のある引数のリスト。

user

コマンドを実行したユーザの名前。

workspace

コマンド実行時に有効だったPerforceクライアントワークスペースの設定。

prog

ユーザがコマンドを実行したPerforceクライアントアプリケーション。この機能により、アプリケーションごとにコマンドを処理することができます。

version

ユーザがコマンドを実行したPerforceアプリケーションのバージョン。

action

Perforceブローカが指定のコマンドを処理する方法を定義します。有効な値は、passrejectredirectfilter、およびrespondです。

destination

リダイレクトされたコマンドについては、コマンドのリダイレクト先のレプリカの名前。リダイレクト先は、altserver設定でリストされた事前定義済みの代替(レプリカ)サーバの名前にする必要があります。

リダイレクト先をキーワードrandomに設定することで、ロードバランシングを実装することができます。コマンドは、定義済みの代替(レプリカ)サーバにランダムにリダイレクトされます。

リダイレクト先をコマンドのリダイレクト先のサーバのaddress:portに設定することもできます。

execute

実行するフィルタプログラムへのパス。フィルタプログラムについて詳しくは、フィルタプログラムを参照してください。

message

ユーザに送信されるメッセージ。一般的には、コマンドが実行される前に送信されます。上記のアクションのいずれとも併用できます。

例えば、次のコマンドハンドラはユーザjoebuildonlyクライアントワークスペースでp4 submitを起動することを禁止します。

command: submit
{
    user = joe;
    workspace = buildonly;
    action = reject;
    message = "Submit failed: Please do not submit from this workspace."
}

正規表現の概要

正規表現、またはregexとは、文字列とのパターン一致に使用される、検索パターンをなす一続きの文字列のことです。以下は、コマンドハンドラの仕様で使用できる正規表現の機能の概要です。

正規表現は、0以上のブランチからなります。ブランチは、|で区切ります。正規表現は、少なくとも1つのブランチと一致する任意の文字列と一致します。

ブランチは、0以上の連結されるピースからなります。ブランチは、すべてのピースが順番に一致する場合に一致します。つまり、最初のピースの一致の次に、2つ目のピースの一致が続きます。

ピースは、原子、あるいは原子とそれに続く量指定子(*+、または?)からなります。原子に*が続くと、原子が0回以上並んだインスタンスに一致します。原子に+が続くと、原子が1回以上並んだインスタンスに一致します。原子に?が続くと、原子が0回または1回並んだインスタンスに一致します。

原子は、以下のいずれかからなります。

  • 括弧で囲まれた下位の正規表現 - その下位の正規表現に一致

  • 範囲(以下を参照)

  • . - 任意の1文字と一致

  • ^ - 文字列の最初に一致

  • $ - 文字列の最後に一致

  • \に1文字が続いたもの - その文字に一致

  • 他に意味を持たない1文字 - その文字に一致

範囲は、角括弧([])に囲まれた一続きの文字列であり、通常はそのシーケンスの任意の1文字に一致します。シーケンスが^で始まる場合、そのシーケンスに含まれない任意の1文字に一致します。シーケンス内の2文字が-で区切られている場合、この記号は2つの文字間に含まれるすべてのASCII文字の短縮形です(例:[0-9]は10進数の任意の1文字に一致し、[a-z]は小文字のアルファベットの任意の1文字に一致します)。シーケンスにリテラル]を含めるには、それを最初の1文字にします(^に続けることもできます)。シーケンスにリテラル-を含めるには、それを最初か最後の1文字にします。

フィルタプログラム

コマンドハンドラのactionfilterである場合、Perforceブローカはexecuteパラメータにより指定されるプログラムを実行し、プログラムによって返されるアクションを実行します。フィルタプログラムを使用すると、ブローカコンフィギュレーションファイルによって提供される機能を超えて規則を実施することができます。

Perforceブローカは、コマンドの詳細を次の形式でプログラムの標準入力に渡すことによって、フィルタプログラムを起動します。

コマンドの詳細

定義

command:

ユーザコマンド

brokerListenPort:

ブローカが接続待機しているポート

brokerTargetPort:

ターゲットサーバが接続待機しているポート

clientProg:

クライアントアプリケーションプログラム

clientVersion:

クライアントアプリケーションプログラムのバージョン

clientProtocol:

クライアントプロトコルのレベル

apiProtocol:

APIプロトコルのレベル

maxLockTime:

中止前にテーブルをロックする最大ロック時間(ミリ秒単位)

maxScanRows:

コマンドによりスキャンされるデータの最大行数

maxResults:

結果として返されるデータの最大行数

workspace:

クライアントワークスペースの名前

user:

要求ユーザの名前

clientIp:

クライアントのIPアドレス

proxyIp:

プロキシのIPアドレス(ある場合)

cwd:

クライアントの作業ディレクトリ

argCount:

コマンドへの引数の数

Arg0:

1番目の引数(ある場合)

Arg1:

2番目の引数(ある場合)

ClientHost:

クライアントのホスト名

brokerLevel:

ブローカの内部バージョンレベル。

proxyLevel:

プロキシの内部バージョンレベル(ある場合)。

コマンドの引数に印字不能文字が含まれている場合、%記号のあとにその印字不能文字のASCIIコードを表す2桁の16進数を続けたものが、フィルタプログラムに送信されます。例えば、タブ文字は%09とエンコードされます。

スクリプトがデータを必要としているかどうかにかかわらず、フィルタプログラムは他の処理を実行する前に標準入力(stdin)からこのデータを読ま込まなければなりません。フィルタスクリプトが標準入力からデータを読み込まない場合、「パイプの破損」エラーが発生し、ブローカがユーザのコマンドを拒否する場合があります。

フィルタプログラムは、以下の4つのいずれかの形式でデータを表示し、標準出力(stdout)のブローカに応答しなければなりません。

action: PASS
message: a message for the user (optional)
action: REJECT
message: a message for the user (required)
action: REDIRECT
altserver: (an alternate server name)
message: a message for the user (optional)
action: RESPOND
message: a message for the user (required)
action: CONTINUE
message: a message for the user (required)

Note

actionの値は、大文字と小文字を区別します。

actionキーワードは常に必須であり、ユーザの要求への応答方法をブローカに指示します。使用可能なactionは、以下のとおりです。

操作

定義

PASS

ユーザのコマンドを変更せずに実行します。ユーザへのmessageは任意です。

REJECT

ユーザのコマンドを拒否し、エラーメッセージを返します。ユーザへのmessageは必須です。

REDIRECT

コマンドを別の(代替)レプリカサーバにリダイレクトします。altserverが必要です。詳細については、集中認証サーバで動作するように代替サーバを構成するを参照してください。ユーザへのmessageは任意です。

RESPOND

コマンドを実行せずに、情報提供メッセージを返します。ユーザへのmessageは必須です。

CONTINUE

与えられたコマンドに一致する次のコマンドハンドラまで繰り延べます。

複数のハンドラの使用について詳しくは、http://answers.perforce.com/articles/KB/11309を参照してください。

フィルタプログラムが、上記4つのメッセージによるもの以外の応答を返した場合、ユーザのコマンドは拒否されます。フィルタスクリプトコードの実行中にエラーが発生したためブローカがユーザのコマンドを拒否した場合、ブローカはエラーメッセージを返します。

代替サーバの定義

ターゲットサーバの負荷を軽減させるために、Perforceブローカがユーザの要求を代替サーバにリダイレクトする場合があります。これらの代替サーバは、対象のターゲットサーバに接続されているレプリカ(またはブローカ、プロキシ)である必要があります。

レプリカサーバのセットアップと構成について詳しくは、“Perforceの複製機能”を参照してください。ブローカはメタデータ専用のレプリカと、メタデータとバージョンファイルの両方にアクセス可能なレプリカの両方で動作します。

ブローカコンフィギュレーションファイルで定義可能な代替レプリカサーバの数は制限されていません。

代替サーバの指定に用いるシンタックスは、以下のとおりです。

altserver name { target= [protocol:]host:port }

代替サーバに割り当てられた名前はコマンドハンドラの仕様で使用されます。詳しくは、コマンドハンドラの仕様を参照してください。

集中認証サーバで動作するように代替サーバを構成する

代替サーバでは、ユーザはコマンドの実行時に自身を認証することが要求されます。このため、Perforceブローカは集中認証サーバ(P4AUTH)およびバージョン2007.2以降のPerforceサーバと共に使用する必要があります。集中認証サーバのセットアップに関する詳細については、集中認証サーバとチェンジリストサーバを構成するを参照してください。

集中認証サーバと共に使用すれば、1つのp4 loginリクエストでPerforceブローカの構成におけるすべてのサーバのユーザに対して有効なチケットを作成できるため、すべてのユーザが一度にログインできます。Perforceブローカは、ターゲットサーバによって与えられたチケットが、すべての代替サーバに対して有効であると見なします。

ブローカコンフィギュレーションファイルのターゲットサーバが集中認証サーバである場合、targetパラメータに割り当てられた値が代替サーバマシンのP4AUTH設定と正確に一致する必要があります。同様にブローカコンフィギュレーションファイルに定義されている代替サーバが集中認証サーバとして使用されている場合、代替サーバのtargetパラメータに割り当てられている値が他のサーバマシンのP4AUTHの設定に一致する必要があります。

ブローカをロードバランシングルータとして使用する

ここまでのセクションでは、ブローカを使用して特定のコマンドを特定のサーバに転送する方法を説明しました。ブローカをロードバランシングルータとして動作するように構成することもできます。ブローカをルータとして動作するように構成を行う場合、Perforceはdb.routingテーブルを作成します。このテーブルはルータによって処理され、入力されたコマンドをどのサーバにルーティングするべきかを決定するのに使用されます。(db.routingテーブルは、クライアントおよびユーザの、それぞれのサーバへのマッピングを示します。db.routingテーブルをリセットするには、db.routingファイルを削除します。)

このセクションでは、ブローカをルータとして動作するように構成する方法について説明します。また、ルーティングポリシーおよび動作についても説明します。

ブローカをルータとして構成する

ブローカをルータとして構成するには、ブローカ構成の最上位階層にrouterステートメントを追加します。ブローカルータのターゲットサーバは、コミットサーバまたはマスターサーバとしてください。

target      = commitserv.example.com:1666;
listen      = 1667;
directory   = /p4/broker;
logfile     = broker.log;
debug-level = server=1;
admin-name  = "Perforce Admins";
admin-phone = 999/911;
admin-email = perforce-admins@example.com;
router;

次に、ブローカルータのターゲットサーバとなるコミットサーバ(またはディポマスターのワークスペースサーバ)の特定のエッジサーバにaltserverステートメントを含めます。

altserver: edgeserv1
{
    target = edgeserve1.example.com:1669;
}

ブローカを使用してコミットエッジアーキテクチャでメッセージをルーティングしている場合、既存のエッジサーバをすべて代替サーバとしてリストする必要があります。

ルーティングポリシーと動作

コマンドがブローカに届くと、ブローカはdb.routingテーブルを参照し、コマンドのルーティング先を決定します。ルーティングロジックは、ユーザをすでにクライアントのあるサーバに結びつけようとします。P4コマンドラインでルーティングの選択を変更するには、以下の引数を使用して当該のコマンドのルーティングをオーバーライドします。

-Zroute=serverID

クライアントおよびユーザが既存のエッジサーバにバインドされていない場合、ルーティングロジックは、ランダムに選択したデフォルトの接続先サーバを使用します。つまり、特定の送信先が与えられていない場合、リクエストはランダムに選択された既存の代替サーバにルーティングされます。

  • リクエストをコミットサーバにルーティングするには、次のように接続先フォームを使用します。

    target      = commitserv.example.com:1666;
    listen      = 1667;
    directory   = /p4/broker;
    logfile     = broker.log;
    debug-level = server=1;
    admin-name  = "Perforce Admins";
    admin-phone = 999/911;
    admin-email = perforce-admins@example.com;
    
    router;
    destination target;
    
  • 新規ユーザを既存のエッジサーバではなく新規のエッジサーバにバインドするには、次のように接続先フォームを使用します。

    target      = commitserv.example.com:1666;
    listen      = 1667;
    directory   = /p4/broker;
    logfile     = broker.log;
    debug-level = server=1;
    admin-name  = "Perforce Admins";
    admin-phone = 999/911;
    admin-email = perforce-admins@example.com;
    
    router;
    destination "myNewEdge";
    
  • コマンドを強制的にコミットサーバにルーティングするには、次の例のようにaction = redirectルールをdestination targetステートメントと一緒に使用します。

    command: regex pattern
    {
        action=redirect;
        destination target;
    }
    

Note

クライアントを別のワークスペースやエッジサーバに移動する場合、db.routingファイルを削除する必要があります。