Perforceの管理: スーパーユーザのタスク
本章では、Perforceの日常管理に関わる基本的なタスクのほか、クロスプラットフォーム開発課題、Perforceサーバのマシン間移行、およびリモート/ローカルディポの操作に関連するPerforceの高度な設定について説明します。
本章で説明する作業のほとんどは、Perforceプロテクションテーブルに定義されたPerforceスーパーユーザ(アクセスレベルsuper)または管理者(アクセスレベルadmin)の権限を必要とします。Perforceスーパーユーザまたは管理者のアクセス管理、およびプロテクション全般について詳細は、“Perforceの管理: 保護”を参照してください。
Perforce管理の基本
Perforce管理者またはスーパーユーザの日常的な管理業務として、以下のタスクが挙げられます。
-
ユーザ保守作業: パスワードの再設定、ユーザの作成、ユーザの自動作成の防止、旧ユーザが作業状態のままにしているファイルの削除。
-
システム管理: サーバセキュリティレベルの設定、ファイル削除によるディスク容量の確保、サブミット済みチェンジリストの編集、サーバの整合性の確認、ファイルタイプの定義によるPerforceのファイルタイプ検出機構の制御、
-fによる強制操作。
ユーザ認証: パスワードとチケット
Perforceでは、パスワードベースとチケットベースの2つの認証方法がサポートされています。
Warning
チケットベース認証は、パスワードベース認証より安全な認証機構ですが、クライアントのワークステーションとPerforceサーバ間のネットワークトラフィックを暗号化しません。
クライアントワークステーションとPerforceサーバの間のネットワークトラフィックを暗号化するには、SSLを使用するようにインストールを構成してください。詳しくは、Perforceサーバへの接続を暗号化するを参照してください。
パスワードベース認証のしくみ
パスワードベース認証は、ステートレスです。つまり、パスワードを正しく設定した後は、無期限のアクセス権限が与えられます。パスワードの長さは1024文字までです。パスワードの強度および存在の要求を強制するには、サーバセキュリティレベルを設定します。詳細については、サーバセキュリティレベルを参照してください。パスワードベース認証はセキュリティレベル0、1、2でサポートされます。
パスワードの最小文字数は、構成可能変数dm.password.minlengthを設定することで指定できます。例えば、16文字以上のパスワードを必須とするには、スーパーユーザが次のとおり実行します。
p4 configure set dm.password.minlength=16
デフォルトのパスワード最小文字数は、8文字です。
ユーザが特定の間隔でパスワードを変更することを要求するには、当該ユーザを1つ以上のグループに割り当て、そのグループにPasswordTimeout:の値を設定します。ユーザが複数のグループに属している場合、定義済みのPasswordTimeoutのうち(unlimitedを含め、unsetは無視して)最大値が適用されます。
チケットベース認証のしくみ
チケットベース認証は、時間制限のあるチケットに基づいています。ユーザは、このチケットによりPerforceサーバに接続できます。Perforceは、ユーザがPerforceにログインするとp4 login -aコマンドを使用してチケットを作成します。PerforceアプリケーションはチケットをP4TICKETSの環境変数で指定されたファイルに保存します。この変数が設定されていない場合、Windowsでは%USERPROFILE%\p4tickets.txt、UNIXとその他のオペレーティングシステムでは$HOME/.p4ticketsにチケットが保存されます。
すべてのチケットの有効期間は有限で、この期間が終了した後はチケットが無効になります。デフォルトでは、チケットは12時間(43200秒)有効です。ユーザグループごとに異なるチケットの有効期間を設定するには、各グループのp4
groupフォームのTimeout:フィールドを編集します。複数のグループに属するユーザのタイムアウト値は、そのユーザが属する全グループのタイムアウト値のうち(unlimitedを含め、unsetを無視して)最大の値です。有効期限が無期限のチケットを作成するには、Timeout:フィールドをunlimitedに設定します。
チケットはパスワードではありませんが、ユーザがPerforceパスワードを指定できる限り、Perforceサーバは有効なチケットを受け入れます(p4 loginコマンドでログインしている場合を除いて)。この動作によって、チケットベース認証のセキュリティ上の利点に、パスワードベース認証によって提供されるスクリプト作成の容易さが加わります。チケットベース認証は、すべてのサーバセキュリティレベルでサポートされ、セキュリティレベル3および4では必須です。
パスワード有効期限が設定されている場合、パスワードの期限が切れるとチケットは失効します。
Perforceへログインする
Perfoceにログインするには、p4 loginコマンドを使用してサーバからチケットを取得します。
p4 login
ユーザはパスワードの入力を求められ、そのユーザのチケットファイルにチケットが自動的に作成されます。ログイン中にp4 loginを実行すれば、チケットの有効期間を延長できます。ログイン中にp4 loginを実行すると、チケットの有効期間は初期タイムアウト設定値の1/3だけ延長されます。そのため、延長は初期タイムアウト設定の最大値に依存します。
Perforceサービスでは、ユーザが複数回ログインに失敗した後のp4
loginの実行が制限されています。この動作を変更するには、dm.user.loginattemptsにログインの試行失敗回数の最大値を設定し、同一ユーザの次のログインに対する10秒間の遅延が課される前に試行できるように設定します。
デフォルトでは、PerforceチケットはそのユーザのIPアドレスに対してのみ有効です。複数のマシン上で共有されるホームディレクトリがある場合は、p4 login -aを使用して、すべてのIPアドレスから使用できるホームディレクトリにチケットを作成すれば、どのマシンからでもPerforceにログインできます。
同じユーザとポートを使用している限り、複数のクライアントが同一マシン上のチケットを使用することができます。
Perforceからログアウトする
チケットを削除して1つのマシン上でPerforceからログアウトするには、以下のコマンドを使用します。
p4 logout
チケットファイルのエントリが削除されます。同じPerforceサーバに対して有効なチケットが複数あり、それらのチケットが他のマシン上にある場合は、他のマシン上のチケットは削除されません(それらのマシン上でログインしたままになります)。
複数のマシンからPerforceにログインしている場合、以下のコマンドを使用して、ログインしていたすべてのマシンでPerforceからログアウトすることができます。
p4 logout -a
これにより、すべてのPerforceチケットが無効化され、ユーザはログアウトします。
チケットステータスを設定する
現在のチケット(つまり、IPアドレス、ユーザ名、およびP4PORTの設定)がまだ有効であるかどうかを確認するには、以下のコマンドを使用します。
p4 login -s
チケットが有効である場合は、有効期間の残り時間が表示されます。
ユーザが現在持っているすべてのチケットを表示するには、以下のコマンドを使用します。
p4 tickets
チケットファイルの内容が表示されます。
ユーザのチケットを無効化する
スーパーユーザとして、p4
logoutコマンドの-aフラグを使用してユーザのチケットを無効にすることができます。次のコマンドでジョーのチケットが無効になります。
p4 logout -a joe
サーバセキュリティレベル
Perforceスーパーユーザは、構成可能変数のsecurityを設定して、サーバ全体のパスワード使用要求、パスワード強度の強制、およびサポートされているユーザ/サーバ認証の方法を設定できます。security構成可能変数を変更するには、以下のコマンドを実行します。
p4 configure set security=seclevel
この場合、seclevelは0、1、2、または3です。
Note
LDAPやActive Directoryなどの外部認証マネージャを使用している場合(トリガを起動して外部認証を使用するを参照)、security構成可能変数は無意味です。サーバは、security=3が設定されているかのように動作するか、関連するauth-checkトリガおよびauth-setトリガによって実装される外部認証システムの完全な制御下で配置されます。
サーバセキュリティレベルを選択する
デフォルトのセキュリティレベルは0(パスワードは不要、パスワード強度は強制されない)です。
すべてのユーザがパスワードを持つようにするには、セキュリティレベル1を使用します。旧リリースのPerforceアプリケーションのユーザは引き続き弱いパスワードを入力することができます。
すべてのユーザが強いパスワードを持つようにするには、セキュリティレベル2を使用します。旧リリースのPerforceアプリケーションは引き続き動作しますが、ユーザは、パスワードを強いパスワードに変更して、リリース2003.2またはそれ以降にアップグレードする必要があります。
すべてのユーザに強いパスワードを持つよう要求する場合やセッションベースの認証の使用を要求する場合は、セキュリティレベル3と最新のPerforceアプリケーションを使用します。
マルチサーバの複製環境では、認証されたサービスユーザのみサーバに接続できるように、セキュリティレベル4を使用します(レベル3のすべての制限の対象となります)。
レベル0は、2003.2以前のリリースのサーバの動作に相当します。レベル1および2は、以前のアプリケーション(レガシー)のサポートを目的として設計されました。レベル3は、最も高度なセキュリティを提供します。
Perforceサーバセキュリティレベルと、Perforceアプリケーションの動作に対するその影響を以下に説明します。
|
セキュリティレベル |
サーバの動作 |
|---|---|
|
|
レガシーのサポート。パスワードは不要です。パスワードを使用する場合、パスワード強度は強制されません。 パスワードを持つユーザは、チケットベース認証に 以前のPerforceアプリケーションのユーザは影響を受けません。 |
|
|
レガシーのサポート。リリース2003.2以降のPerforceアプリケーションのユーザの場合は強いパスワードが必要ですが、既存のパスワードはリセットされません。 リリース2003.2以前のPerforceアプリケーションは、p4 passwdか、p4 userフォームでパスワードを設定することができますが、パスワード強度は強制されません。 パスワードを持つユーザは、チケットベース認証に 構成可能変数 |
|
|
レガシーのサポート。すべての未検証の強度のパスワードを変更する必要があります。 リリース2003.2以前のPerforceアプリケーションのユーザはパスワードを設定できません。リリース2003.2以降のユーザは、p4 passwdを使用して、プロンプトでパスワードを入力する必要があります。p4 userフォームまたはp4 passwd -O Windowsでは、パスワードがレジストリに保存されることも、レジストリから読み取られることもなくなります( リリース2003.2以降のPerforceアプリケーションで強いパスワードを設定しているユーザは、 構成可能変数 |
|
|
すべてのパスワードベース認証が拒否されます。 ユーザは、チケットベース認証を使用する必要があります(p4 login)。 パスワードに依存するスクリプトがある場合は、p4 loginを使用して、そのスクリプトを実行するユーザに対して有効なチケットを作成するか、p4
login -pを使用して、パスワードと同じようにPerforceコマンドに渡すことのできる(つまり、コマンドラインから渡すか、または 構成可能変数 |
|
|
すべてのレプリカサーバに、認証されたサービスユーザを使用し、リモートディポ接続されている必要があります。 |
Perforceアプリケーションソフトウェアの最小リビジョンを要求する
Perforceバージョン化サービスは、クライアントアプリケーションのどのリビジョンがPerforceに接続できるかを制御する機構を備えています。
最小のリビジョンを要求するには、構成可能変数minClientに適切なリビジョンを設定して、さらに(任意指定で)minClientMessageに古いアプリケーションのユーザがサーバに接続しようとした場合に表示されるエラーメッセージを設定します。
例:
p4 configure set minClient=2010.2 p4 configure set minClientMessage="Please upgrade to 2010.2 or higher"
パスワード強度の要件
サーバのセキュリティレベルとPerforceプリケーションの組み合わせに応じて、ユーザは「強い」パスワードの設定を求められる場合があります。パスワードがdm.password.minlengthに定義された文字数(デフォルトでは8文字)以上の長さで、以下の記述のうちの少なくとも2つがtrueである場合に、そのパスワードは強いと見なされます。
-
パスワードに大文字が含まれている
-
パスワードに小文字が含まれている
-
パスワードにアルファベット以外の文字が含まれている
例えば、dm.password.minlengthが8でありsecurityを1以上に構成可能な環境では、a1b2c3d4、A1B2C3D4、aBcDeFgHなどのパスワードは強いと見なされます。
構成可能変数dm.password.minlengthを設定することにより、パスワードの最小文字数の条件をサイト全体に対して設定できます。例えば、16文字以上のパスワードを必須とするには、スーパーユーザが次のとおり実行します。
p4 configure set dm.password.minlength=16
パスワードの長さは1024文字までです。デフォルトのパスワード最小文字数は、8文字です。
ユーザパスワードの管理と再設定を行う
Perforceスーパーユーザは、次のコマンドを使用してPerforceユーザのパスワードを手動で設定することができます。
p4 passwd username
入力を要求されたら、新しいユーザ用パスワードを入力します。
パスワード設定済みのユーザが次回Perforceを使用する際に自分のパスワードを再設定するよう強制するには、次のコマンドを使用します。
p4 admin resetpassword -u username
パスワード設定済みのすべてのユーザ(このコマンドを実行するスーパーユーザを含む)にパスワードの再設定を強制するには、次のコマンドを使用します。
p4 admin resetpassword -a
p4 admin resetpassword -aを実行すると、既に存在する(パスワードを登録済みの)ユーザのパスワードのみがリセットされます。新しいユーザアカウントをデフォルトのパスワードで作成する場合、最初のコマンドを実行する前にパスワードの再設定をすべての新規ユーザに対して要求するように、インストールを構成することができます。これを行うには、dm.user.resetpassword構成可能変数を以下のように設定します。
p4 configure set dm.user.resetpassword=1
ユーザを作成する
デフォルトでは、存在しないユーザによってコマンドが発行されるたびにデータベースに新規ユーザレコードが作成されます。また、Perforceスーパーユーザは次のように-f(force)フラグを使って新規ユーザを作成することができます。
p4 user -f username
フォームフィールドに作成したいユーザに関する情報を入力します。
p4 userコマンドには、フォームエディタを使わずに標準入力できるオプション(-i)もあります。多数のユーザをすばやく作成するには、ユーザデータを読み取り、p4 userフォームによって使用されるフォーマットで出力を生成し、生成された各フォームをp4 user -i -fにパイプで送るスクリプトを作成します。
ユーザ自動作成を防止する
デフォルトでは、Perforceはユーザがディポまたはディポ内のメタデータを更新する可能性のあるコマンドを発行するたびに新規ユーザレコードを作成します。p4
configureコマンドでdm.user.noautocreate構成可能変数を以下のように設定することにより、この動作を制御することができます。
|
値 |
意味 |
|---|---|
|
|
新しいユーザがディポまたはそのメタデータを更新するコマンドを起動したとき、常にユーザレコードが作成されます(デフォルトの動作)。 |
|
|
新しいユーザは明示的にp4 userを実行して自身のユーザレコードを作成する必要があります。 |
|
|
Perforceスーパーユーザのみがp4 userを使用して新しいユーザを作成できます。 |
例:
p4 configure set dm.user.noautocreate=1
とするとサーバの動作が変更され、新しいユーザはサーバ上のデータの変更を試みる前に、まず自身のアカウントを作成することが必要になります。
ユーザ名を変更する
p4 renameuserコマンドを使用してユーザ名を変更することができます。このコマンドはユーザ名を変更するとともに、変更を反映するように関連するアーティファクトを修正します。ユーザレコード、ユーザを含むグループ、ユーザに適用されるプロパティなどが修正されます。詳細については、『P4コマンドリファレンス』のp4 renameuserコマンドの解説を参照してください。一般的に、変更説明などの説明的テキストフィールドではユーザ名は変更されません。データベースレコードの所有者またはユーザのフィールドとして表示される名前のみ変更されます。
最善の結果を得るために下記のガイドラインに従ってください。
-
このコマンドを使用する前に、新しいユーザ名がすでに存在していないことを確認してください。既存のユーザ名を使用すると、既存のユーザのデータと名前を変更したユーザのデータがマージされる(このようなマージはシステムによってできる限り避けられますが)ことがあります。
-
このコマンドを発行するユーザは、名前が変更されるユーザと同一であることはできません。
-
このコマンドの実行時に、名前が変更されるユーザがサーバを使用していないことが必要です。コマンドが完了した後、ユーザはログアウトしてログインし直す必要があります。
-
p4 renameuserコマンドはアンロード済みのワークスペースを処理しません。そのため、あらかじめすべてのユーザのワークスペースを再ロード(または削除)する必要があります。
分散インストールには、ユーザが所有するローカルワークスペースまたはローカルラベルが含まれる場合があります。そのため、エッジサーバにバインドされているこれらのワークスペースとラベルは、あらかじめ削除するか、コミットサーバに移動する必要があります。
-
ユーザによってサブミットされた
$Author$タグの含まれる+kタイプのファイルは、このコマンド後に不適切なダイジェストを持つようになります。ユーザ名の変更後にダイジェストの値を再計算するには、p4 verify -vを使用してください。
旧ユーザを削除する
システム上の標準ユーザはそれぞれPerforceのライセンスを1つずつ使用しています。Perfroce管理者は、次のコマンドを使ってユーザを削除し、ライセンスの空きを作ることができます。
p4 user -d -f username
ユーザを削除する前に、チェンジリスト上でユーザが開いているファイルを取り消す(またはサブミットする)必要があります。ファイルを開いているユーザを削除しようとすると、Perforceはその旨のエラーメッセージを表示します。
ユーザを削除するとPerforceのライセンスが解放されますが、グループやプロテクションテーブルは自動的には更新されません。これらのテーブルからユーザを削除するには、p4 groupまたはp4 protectを使用してください。
新規ライセンス許可ユーザを追加する
Perforceのライセンスは、licenseと呼ばれるファイルにより制御されています。このファイルはサーバのルートディレクトリに格納されています。
ライセンスファイルを追加または更新するには、Perforceサーバを停止し、licenseファイルをサーバのルートディレクトリにコピーしてPerforceサーバを再起動します。
licenseを使用して標準入力から新しいライセンスファイルを読み込むことにより、Perforceサーバを停止することなく既存のp4 license -iファイルを更新することができます。
Perforceから取得した新しいライセンスファイルのほとんどは、サーバのIPアドレスが変更されている場合を除き、p4
licenseを使用してインストール可能です。サーバのIPアドレスが変更されている場合、または現時点でlicenseファイルが存在しない場合は、p4 admin restartコマンドでPerforceサーバを再起動する必要があります。
ライセンスを消費しないオペレータ・ユーザ
システム管理者がPerforceのバージョン化機能を使用しない組織では、operatorユーザタイプを使用することでライセンスコストを節約できる場合があります。
operatorユーザタイプは、super権限またはadmin権限を持っていますが、ソフトウェアやサーバ上のその他のアセットの開発向けではなく、Perforceサーバの保守に関して責任があるシステム管理者を対象とします。
Perforceユーザには、standardユーザ、operatorユーザ、およびserviceユーザの3種類があります。標準ユーザはデフォルトのユーザであり、それぞれ1つずつPERFORCEライセンスを消費します。サービスユーザはライセンスを必要としませんが、複製環境およびマルチサーバ環境におけるサーバ間の自動通信プロセスでしか使用できません(サービスユーザを参照してください)。operatorユーザは、Perforceライセンスを必要としませんが、以下のコマンドしか実行できません。
-
p4 admin stop
-
p4 admin restart
-
p4 admin checkpoint
-
p4 admin journal
-
p4 dbstat
-
p4 dbverify
-
p4 depots
-
p4 diskspace
-
p4 configure
-
p4 counter (
-fを含む) -
p4 counters
-
p4 journaldbchecksums
-
p4 jobs (
-Rを含む) -
p4 login
-
p4 logout
-
p4 logappend
-
p4 logparse
-
p4 logrotate
-
p4 logschema
-
p4 logstat
-
p4 logtail
-
p4 lockstat
-
p4 monitor
-
p4 passwd
-
p4 ping
-
p4 serverid
-
p4 verify
-
p4 user
サービスユーザ
Perforceユーザには、standardユーザ、operatorユーザ、およびserviceユーザの3種類があります。standardユーザは従来からのPerforceユーザです。operatorユーザは人または自動処理によるシステム管理者を対象とします。serviceユーザは、リモートディポ(リモートディポと分散開発を参照してください)または分散環境(『Perforceサーバ管理者ガイド: マルチサイト展開』を参照してください)のコンテキストにおいて、サーバ間での認証に使用されます。
インストールした各Perforceサービスにserviceユーザを作成すると、サーバログの解析作業が容易になります。また通信が行われる設定になっているリモートの各Perforceサービスが、有効なログインチケットを持つことを要求し、セキュリティの向上にも役立てることができます。サービスユーザはPerforceのライセンスを消費しません。
サービスユーザは以下のコマンドしか実行できません。
-
p4 dbschema
-
p4 export
-
p4 login
-
p4 logout
-
p4 passwd
-
p4 info
-
p4 user
サービスユーザを作成するには、次のコマンドを実行します。
p4 user -f service1
標準のユーザフォームが表示されます。改行を入力して、新しいユーザのType:をserviceに設定します。例:
User: service1 Email: services@example.com FullName: Service User for remote depots Type: service
デフォルトでは、p4 usersの出力にはサービスユーザが表示されません。サービスユーザを含めるには、p4 users -aを実行します。
サービスユーザのチケットとタイムアウト
何らかのグループのメンバーではない新たに作成されたサービスユーザには、デフォルトのチケットタイムアウトである12時間が適用されます。サービスユーザのチケットの失効による問題を回避するには、サービスユーザ用にタイムアウトを非常に長く設定したグループを作成するか、またはunlimitedの値でグループを作成します。マスターサーバにおいて、次のコマンドを実行します。
p4 group service_users
グループのUsers:リストにservice1を追加して、Timeout:およびPasswordTimeout:に大きい値またはunlimitedを設定します。
Group: service_users
Timeout: unlimited
PasswordTimeout: unlimited
Subgroups:
Owners:
Users:
service1
サービスユーザの権限
サービスユーザにsuper権限を付与するには、サーバ上でp4 protectを使用します。サービスユーザが実行できるコマンドは非常に制限されているため、super権限を与えても安全です。リモートディポまたはコードドロップにおいてのみサービスユーザを使用する場合、リモートディポへのアクセスを制限するの解説のように、ユーザ権限をさらに制限することができます。
旧ユーザによって開かれているファイルを元に戻す
不在または廃止されたユーザ(例えば退職者)によって開かれたままになっているファイルを元に戻すには、ファイルが開かれたままのクライアントワークスペース仕様をPerforce管理者が削除します。
例えば、p4 openedのアウトプットが次のように表示された場合が挙げられます。
//depot/main/code/file.c#8 - edit default change (txt) by jim@stlouis
クライアントワークスペース仕様stlouisは次のコマンドで削除できます。
p4 client -d -f stlouis
クライアントワークスペース仕様を削除すると、そのワークスペースで開かれていたファイルもすべて取り消され、ワークスペースに関連付けられた作業中チェンジリストと、ワークスペースに関連付けられた作業中の修正レコードが削除されます。クライアントワークスペース仕様を削除しても、ワークスペースの所有者が実際に使っていたワークスペースのファイルには影響しません。それらのファイルは引き続き他のユーザによってアクセス可能です。
ファイルのアーカイブによりディスク容量を再生する
時間の経過と共に、Perforceサーバにはあまり使用されなくなった古いプロジェクトに由来するファイルの多数のリビジョンが蓄積されます。p4 deleteは単に最新ビジョンでファイルを削除扱いにするだけなので、サーバのディスク容量に空きができるわけではありません。
アーカイブディポはこの問題への解決策となります。アーカイブディポを使用して、アクセスの少ないファイルを大容量記憶領域に移動できます。アーカイブディポを作成するには、適当なファイルシステムをマウントし、p4 archiveコマンド(および関連コマンドのp4 restore)を使用してこの記憶領域にあるアーカイブディポにデータを取り込みます。
Note
アーカイブディポはバックアップ用の仕組みではありません。
アーカイブディポは、単にアクセス頻度の低いファイルを大容量記憶領域に割り当て直すことによってディスクの空き容量を増やします。これに対し、p4 obliterateはファイルのデータと履歴を消去するものです。
以下の基準をすべて満たすファイルのみ、アーカイブが可能です。
-
デフォルトでは、ファイルはフル(
+F)または圧縮(+C)の形式で格納されていなければなりません。テキストファイル(またはデルタとして格納されているその他のファイル)をアーカイブするにはp4 archive -tを使用します。ただし、RCSデルタのアーカイブを行うと計算量が増加することに注意してください。 -
他のリビジョンからコピーまたはブランチされていないファイルでなければなりません。
-
他のリビジョンにコピーまたはブランチされていないファイルでなければなりません。
-
ファイルはローカルディポに存在していなければなりません。
アーカイブディポを作成して、そこにファイルをアーカイブするには以下を実行します。
-
p4 depotにより新しいディポを作成し、ディポの
Type:をarchiveに設定します。アーカイブディポのMap:を、ニアラインまたは取り外し可能な記憶領域があるファイルシステムに設定します。 -
アーカイブディポのファイルを保存するボリュームをマウントします。
-
p4 archiveを使用して、ファイルをローカルディポからアーカイブディポに移動します。
-
(任意)アーカイブファイルが書き込まれたボリュームをアンマウントします。
ローカルディポに使用される(高パフォーマンスと想定される)記憶領域のディスク容量が確保されます。ユーザはアーカイブファイルの内容にアクセスできなくなりますが、すべてのファイル履歴は保持されます。
ファイルをアーカイブディポから復元するには以下を実行します。
-
アーカイブディポのファイルが保存されているボリュームをマウントします。
-
p4 restoreを使用して、ファイルをアーカイブディポからローカルディポに移動します。
-
(任意)アーカイブファイルが復元されたボリュームをアンマウントします。
データをアーカイブディポから完全消去するには以下を実行します。
-
アーカイブディポのファイルが保存されているボリュームをマウントします。
-
p4 archive -pを使用して、アーカイブディポにある指定したファイルのアーカイブを完全消去します。
処理完了時、影響を受けたリビジョンに対するアクションは
purgeに設定され、完全消去されたリビジョンの復元はできなくなります。データは恒久的に失われます。 -
(任意)アーカイブファイルが完全消去されたボリュームをアンマウントします。
ファイルを削除してディスク容量を再生する
Warning
p4 obliterateは慎重に使用してください。これは実際にファイルのデータを削除するPerforceの2つのコマンドのうち1つです(ファイルのデータを削除するもう1つのコマンドは、p4 archiveのアーカイブ-パージオプションです)。
場合により、ユーザの不注意なブランチやサブミットによってディポ内の間違った領域にファイル(またはディレクトリツリー全体)を追加してしまうことがあります。また、プロジェクトをディポから削除するだけではなく、開発作業の履歴も併せて削除する必要がある場合もあります。このような場合、p4 obliterateが役に立つでしょう。
Perforce管理者はp4 obliterate
filenameを使用して、ファイルのすべての履歴をディポから削除し、それを存在しなかったも同然にすることができます。
Note
バージョン管理システムの目的は、どのファイルにどのような操作が行われたかという履歴を、組織で管理できるようにすることにあります。p4 obliterateコマンドはこの目的に相反します。このコマンドは、本来、ディポ内に存在しなくなったファイルの情報をデータベースから削除することだけを目的とし、通常のソフトウェア開発プロセスの一部として使用するためのコマンドではありません。これに代えてp4 archiveおよびp4 restoreを使用することを検討してください。
p4 obliterateは、コンピュータへの負荷が高いことにもご注意ください。ファイルを削除するには、メタデータ全体をファイル引数ごとにスキャンする必要があります。ピーク稼働時にp4 obliterateを実行することは避けてください。
Warning
オペレーティングシステムのコマンド(erase、rm、またはこれに類似のコマンド)を使用して手動でPerforceサーバルートからファイルを削除しないでください。
デフォルトでは、p4 obliterate filenameは実行される内容を表示するだけで何もしません。実際にファイルを破壊するには、p4 obliterate -y filenameを使用します。
ファイルの1つのリビジョンだけを破壊するには、コマンドラインに消したいリビジョンの番号だけを指定します。例えば、リビジョン5のみを破壊するには、次のコマンドを使用します。
p4 obliterate -y
file#5
リビジョン範囲の指定も可能です。ファイルのリビジョン5~7を破壊するには、次のように指定します。
p4 obliterate -y file#5,7
Warning
リビジョンを指定する場合は、指定に間違いがないか確認してください。リビジョンの指定に誤りがあると、すべてのリビジョンが消去されます。
安全にp4 obliterateを使用するために、ファイルとリビジョンの指定に誤りがないこと確認するまでは、-yフラグなしで使ってください。
ワークスペースをバックアップする
クライアント、ラベル、またはタスクストリームをアンロードするには、アンロードディポのファイルではなくクライアントのフラットファイルに対してp4 unloadコマンドの-oフラグを使用します。これは、クライアントを別のデータベースに読み込む場合や、クライアントのプレイベートバックアップを作成する場合に役立ちます。フラットファイルは標準のジャーナル形式を使用しています。コマンドの実行後にクライアント、ラベル、タスクストリームは完全に読み込まれた状態を維持します。
チェンジリストの削除とチェンジリストの記述を編集
Perforce管理者は、p4 changeに-f(force)フラグを付けることでサブミット済チェンジリストの記述、日付、ユーザ名を変更できます。p4 change -f
changenumberを記述します。標準のチェンジリストのフォームが表示されるだけでなく、このコマンドでスーパーユーザは、チェンジリストの時刻、コメント、日付および関連するユーザ名を編集できます。
-fフラグはp4 obliterateでファイルを消去されたサブミット済チェンジリストの削除にも使えます。p4 change -d -f changenumberと記述します。
Example 3. チェンジリスト123の更新とチェンジリスト124の削除
p4 changeに-fフラグを付けます。
p4 change -f 123 p4 change -d -f 124
チェンジリスト123のUser:とDescription:のフィールドが編集され、チェンジリスト124は削除されます。
署名によりファイルを認証する
p4 verify
filenamesコマンドにより、Perforce管理者はファイルの各リビジョンについて保存されているMD5ダイジェストを検証できます。ユーザがディポにファイルを保存したとき作成された署名は、クラッシュ時にリカバリが正しく行われたことを後で確認するために利用できます。リカバリしたファイルの署名が保存されていた署名と一致すれば、そのファイルは正しくリカバリされたことになります。新しい署名がPerforceデータベースの該当するファイルリビジョンの署名と一致しなければ、Perforceは署名の後ろにBAD!と表示します。
毎晩システムバックアップを行うときには、事前にp4 verifyを実行し、p4 verifyで破損がないことを確認できた場合にのみバックアップに進むことが推奨されます。
大規模なインストールでは、p4 verifyの実行に時間がかかる場合があります。さらに、ファイル検証中はサーバの負荷が増大しているため、他のPerforceコマンドのパフォーマンスに影響を与える可能性があります。大規模なサイトの管理者は、p4 verifyを毎晩ではなく週1回実行する方が望ましい場合あります。
p4
verify実行中にBAD!が表示されるときは、データベースまたはバージョン化ファイルが破損している可能性があります。Perforceテクニカルサポートまでご連絡ください。
サーバアップグレードの際にファイルを認証する
サーバアップグレードの前後に、以下のようにp4 verifyを使用することが推奨されます。
-
アップグレードの前に、次のコマンドを実行します。
p4 verify -q //...
これにより、アップグレードに先立ってサーバの整合性を確認します。
-
チェックポイントを取り、そのチェックポイントとバージョン化ファイルを安全な場所にコピーします。
-
サーバのアップグレードを実行します。
-
アップグレード後に、次のコマンドを実行します。
p4 verify -q //...
これにより、新しいシステムの整合性を確認します。
p4 typemapでファイルタイプを定義する
Perforceはファイルタイプがtextであるかbinaryであるかを判定するときに調べるバイト数を決定するために、構成可能変数filesys.binaryscanを使用します。デフォルトでは、filesys.binaryscanは65536です。先頭65536バイトについて最上位ビットが立っていなければtextと見なし、そうでなければbinaryと見なします。.zip形式(.jarファイルを含む)で圧縮されたファイルも自動的に検出され、ubinaryタイプが割り当てられます。
このデフォルトの動作は-t
フラグを用いてオーバライドすることができますが、ファイルタイプが(常時ではなく)おおむね正しく検出される場合、ユーザは容易にこのオプションを指定し忘れてしまいます。RTF(Rich Text Format)やAdobe PDF(Portable
Document Format)などの一部のファイルフォーマットは、一連のコメントフィールドまたはその他のテキスト形式のデータで始まることがあります。この場合コメントがある程度長いと、このようなファイルはPerforceサーバによって誤ってfiletypetextのタイプとして検出されます。
p4 typemapコマンドにより、システム管理者はPerforceのファイルタイプとファイル名の仕様をリンクさせるテーブルを設定できるため、この問題を解決できます。追加されているファイルが設定したタイプマップテーブルの入力と一致すると、ファイルタイプがオーバーライドされ、一致しない場合には、Perforceアプリケーションがファイルタイプを割り当てます。例えば、すべてのPDFファイルとRTFファイルをbinaryとして処理するには、p4 typemapを使用してタイプマップテーブルを以下のように修正します。
Typemap:
binary //....pdf
binary //....rtf
最初の3個のピリオド(“...”)はルートディレクトリ下の全ファイルをマッピングの対象に含めるPerforceのワイルドカードです。4個目のピリオドとファイル拡張子は、ファイル名の最後が.pdf(または.rtf)で終わるファイルを対象すとる指定です。
以下の表に、一般的なファイル拡張子と、それに対応するPerforceのファイルタイプおよび修飾子を示します。
|
ファイルタイプ |
Perforceファイルタイプ |
解説 |
|---|---|---|
|
|
|
アクティブサーバページタイプ |
|
|
|
Windowsビデオファイル |
|
|
|
Windowsビットマップファイル |
|
|
|
Btrieveデータベースファイル |
|
|
|
カンファレンスリンクファイル |
|
|
|
カスケードスタイルシートファイル |
|
|
|
Microsoft Wordドキュメント |
|
|
|
Microsoft Wordテンプレート |
|
|
|
エクスポートファイル(Microsoft Visual C++) |
|
|
|
GIF画像ファイル |
|
|
|
Gzip圧縮ファイル |
|
|
|
HTMLファイル |
|
|
|
HTMLファイル |
|
|
|
アイコンファイル |
|
|
|
アクティブサーバインクルードファイル |
|
|
|
アプリケーション初期設定ファイル |
|
|
|
JPEG画像ファイル |
|
|
|
Javaスクリプト言語ソースコードファイル |
|
|
|
ライブラリファイル(複数のプログラミング言語) |
|
|
|
ログファイル |
|
|
|
MPEGビデオファイル |
|
|
|
Adobe PDFファイル |
|
|
|
Sybase Power Designerファイル |
|
|
|
Microsoft PowerPointファイル |
|
|
|
Unity3Dファイル |
|
|
|
Microsoft Excelファイル |
上記の表で推奨されたすべてのファイル拡張子をPerforceのファイルタイプにマッピングするには、次のようにp4 typemapテーブルを使用します。
# Perforce File Type Mapping Specifications.
#
# TypeMap: a list of filetype mappings; one per line.
# Each line has two elements:
# Filetype: The filetype to use on 'p4 add'.
# Path: File pattern which will use this filetype.
# See 'p4 help typemap' for more information.
TypeMap:
text //....asp
binary+F //....avi
binary //....bmp
binary //....btr
text //....cnf
text //....css
binary //....doc
binary //....dot
binary+w //....exp
binary+F //....gif
binary+F //....gz
text //....htm
text //....html
binary //....ico
text //....inc
text+w //....ini
binary //....jpg
text //....js
binary+w //....lib
text+w //....log
binary+F //....mpg
binary //....pdf
text+w //....pdm
binary //....ppt
binary //....xls
あるファイルタイプに複数のファイルタイプ修飾子を使用する必要がある場合、修飾子を続けて指定します。例えば、binary+lFS10とすると、binaryタイプで排他的作業状態(l)であり、圧縮されずに完全な形で保存され(F)、最新の10リビジョンのみが保存されている(S10)ファイルを意味します。
詳細については、『P4コマンドリファレンス』のp4 typemapのページを参照してください。
p4 typemapでサイト全体の悲観的ロックを実施する
デフォルトで、Perforceは同時並行開発をサポートしていますが、編集目的でファイルを開くのは一度に一人のユーザのみであることが想定される環境では、部分ファイルタイプで修飾子+l(排他的作業状態)を使用して悲観的ロックを実施することができます。次のようにタイプマップを定義すると、ディポ内にあるすべての新規で追加されたファイルに対し+l修飾子が自動的に適用されます。
Typemap:
+l //depot/...
このタイプマップを使用すると、タイプマップの更新後、ユーザがディポに追加したファイルに自動的に+l修飾子が適用されるので、以降そのファイルを編集目的で作業状態にできるのは一度に一人のユーザに限られます。タイプマップテーブルはディポへの新規追加分にのみ適用されます。したがって、タイプマップテーブルをサイト全体で排他的作業状態に更新した後、それ以前に+lを付けずにサブミットしたファイルは、p4 edit -t+l
filenameコマンドを使って編集目的で開いて、再度サブミットしなければなりません。同様に、すでにファイルを編集目的で開いているユーザは、p4 reopen -t+l
filenameコマンドでファイルタイプを更新しなければなりません。
-fフラグによる強制動作
Perforceスーパーユーザや管理者は、特定のコマンドに-fフラグを指定することによって、一般ユーザは実行できないような特定の操作を強制的に実行できます。Perforce管理者は、p4 branch、p4
change、p4 client、p4 job、p4
label、p4 unlockで-fフラグを使用できます。Perforceスーパーユーザはさらに、このフラグを使用してp4 userコマンドをオーバーライドできます。このフラグの用法と意味は次のとおりです。
|
コマンド |
構文 |
機能 |
|---|---|---|
|
p4 branch |
p4 branch -f |
ブランチマッピング編集時に更新日の変更を可能にします |
|
p4 branch -f -d |
所有権を無視してブランチを削除します |
|
|
p4 change |
p4 change -f [ |
チェンジリスト仕様の編集時に更新日の変更を可能にします |
|
p4 change -f |
対象のチェンジリストの説明フィールドとユーザ名の編集を可能にします |
|
|
p4 change -f -d |
対象の空のチェンジリストを削除します |
|
|
p4 client |
p4 client -f |
クライアント仕様編集時に更新日の変更を可能にします |
|
p4 client -f -d |
所有権を無視し、クライアントを削除します。クライアントによってファイルが開かれている場合も含めます |
|
|
p4 job |
p4 job -f [ |
読み取り専用フィールドの手作業による更新を可能にします |
|
p4 label |
p4 label -f |
ラベル仕様編集時に更新日の変更を可能にします |
|
p4 label -f -d |
所有権を無視し、ラベルを削除します |
|
|
p4 unlock |
p4 unlock -c changelist -f |
所有権を無視し、作業中の番号付チェンジリストにある開いているファイルの(p4 lockで設定された)ロックを解除します。 |
|
p4 user |
p4 user -f |
所有権を無視し、すべてのフィールドの更新を可能にします。 このコマンドを実行するには |
|
p4 user -f -d |
所有権を無視し、ユーザを削除します。 このコマンドを実行するには |
高度なPerforce管理
Perforceサーバへの接続を暗号化する
2012.1でSSLのサポートが追加されたことで、信頼されていない通信チャネルでPerforceを安全に実行するためにsshやその他のVPNトンネルを手動で構成する必要はなくなりました。
サーバとクライアントの設定
任意のPerforceサーバ、プロキシ、ブローカに対して、SSL暗号化は全部に設定するか、いずれにも設定しないかを選択することになります。(セキュリティ上の理由から)SSLを使用するようにPerforceサーバが構成されている場合、すべてのPerforceアプリケーションがSSLを使用するように構成されていなければなりません。逆に、(パフォーマンス上の理由または後方互換性維持のために)プレーンテキスト接続を受け入れるようにPerforceサーバが構成されている場合、すべてのアプリケーションはプレーンテキストで接続しなければなりません。
デフォルトでは、P4PORTの設定にプロトコルを指定しない場合、プレーンテキストが想定されます。Perforceアプリケーションを設定するときは、プレーンテキストの場合はtcp:host:port、暗号化接続の場合はssl:host:portとして明示的にプロトコルを指定することが推奨されます。
SSLが有効であるサーバにユーザが初めて接続したとき、Perforceアプリケーションはサーバのキーに登録されたフィンガープリントを通知します。
ユーザが単独でフィンガープリントが正しいことを検証できる場合、サーバをP4TRUSTファイルに追加するべきです(P4Vやその他のPerforceアプリケーションのプロンプトからp4
trustコマンドを使用するか、手動でフィンガープリントをファイルに追加します)。
キーと証明書の管理
SSL接続を許可するように構成されている場合、すべてのサーバプロセス(p4d、p4p、p4broker)の起動時に、有効な証明書とキーペアが必要になります。これらのファイルはP4SSLDIR環境変数によって指定されたディレクトリに格納されます。SSLが有効になっているサーバのプロセスを開始するには、さらに以下の条件に適合していなければなりません。
-
有効なディレクトリに
P4SSLDIRが設定されている必要があります。 -
P4SSLDIRディレクトリは当該Perforceサーバ、プロキシ、またはブローカのプロセスの実行者と同じユーザIDが所有している必要があります。P4SSLDIRディレクトリは他のユーザが読み取り可能であってはなりません。例えば、UNIX環境ではディレクトリのパーミッションは0700(drwx------)または0500(dr-x------)に設定されていなければなりません。 -
privatekey.txtとcertificate.txtという2つのファイルがP4SSLDIRに存在している必要があります。これらのファイルは、当該SSL接続に使用されるPEMエンコードされたプライベートキーと証明書に該当します。それらは当該Perforceサーバ、プロキシ、またはブローカのプロセスを実行するユーザIDが所有し、他のユーザから読み取れないなどの権限が設定されている必要があります。例えば、UNIX環境ではファイルのパーミッションは0600(
-rw-------)または0400(-r--------)に設定されていなければなりません。ユーザ独自のプライベートキーと証明書を提供するか、またはp4d -Gcを使用して自己署名付きキーと証明書のペアを生成することができます。
-
ご使用のサーバのプライベートキーと証明書からフィンガープリントを生成するには、p4d -Gfを実行します。(
P4SSLDIRには適切なファイル名と権限が設定され、現在の日付が証明書に対して有効でなければなりません。)このフィンガープリントをエンドユーザに通知した後に、エンドユーザはサーバが提供するフィンガープリントと管理者が提供したフィンガープリントとを比較できます。両者のフィンガープリントが一致すれば、ユーザはp4 trustを使用してそのフィンガープリントを自分の
P4TRUSTファイルに追加できます。
キーと証明書の生成
お使いのサーバ用の証明書とプライベートキーを生成する手順は、以下のとおりです。
-
P4SSLDIRを安全な場所にある有効なディレクトリに設定します。P4SSLDIRにより指定されるディレクトリは安全でなければなりません。キーのペアを生成したものと同じユーザIDが所有し、他のユーザから読み取り不可である必要があります。 -
(任意)p4d -Gcを実行する前に、
P4SSLDIRディレクトリにconfig.txtの名前でファイルを作成し、以下のようにファイルの書式を設定します。# C: Country Name - 2 letter code (default: US) C = # ST: State or Province Name - full name (default: CA) ST = # L: Locality or City Name (default: Alameda) L = # O: Organization or Company Name (default: Perforce Autogen Cert) O = # OU = Organization Unit - division or unit OU = # CN: Common Name (usually the DNS name of the server) # (default: the current server's DNS name) CN = # EX: number of days from today for certificate expiration # (default: 730, e.g. 2 years) EX = # UNITS: unit multiplier for expiration (defaults to "days") # Valid values: "secs", "mins", "hours"UNITS =
-
次のコマンドで証明書とキーのペアを生成します。
p4d -Gc
P4SSLDIR(および存在する場合、config.txt)が正しく設定されており、既存のプライベートキーまたは証明書が見つからない場合、privatekey.txt、certificate.txtの2つのファイルがP4SSLDIRに作成されます。config.txtファイルが存在しない場合、以下のデフォルト値が想定され、730日間(うるう年を除き2年間)で期限切れとなる証明書が作成されます。C=US ST=CA L=Alameda O=Perforce Autogen Cert OU= CN=
the-DNS-name-of-your-serverEX=730 UNITS=days -
ご使用のサーバのキーと証明書のペアに対してフィンガープリントを生成します。
p4d -Gf
このコマンドは、サーバのパブリックキーのフィンガープリントを表示して終了します。
Fingerprint: CA:BE:5B:77:14:1B:2E:97:F0:5F:31:6E:33:6F:0E:1A:E9:DA:EF:E2今後のためにサーバのフィンガープリントを控えておき、帯域外の通信チャネルを介してユーザに通知します。
Perforceアプリケーションが異なるフィンガープリントを報告した場合(加えて新しい証明書とキーペアを最近インストールしていない場合)は、ユーザは、それが介入者による脅威の可能性を示す痕跡であると考えるべきです。
Note
Perforceサーバでは自己署名付き証明書を使用できるため、OpenSSLやPuTTYなどのサードパーティ製ツールを使用してキーペアを生成するか、独自のキーペアを提供することも可能です。p4d -Gfコマンドはユーザ提供の資格情報を許可します。プライベートキーはPEM形式にエンコードされた2048ビットのRSAキーとし、パスフレーズによる保護が外されている必要があります。
独自にキーを提供する場合は、P4SSLDIR内のprivatekey.txtファイルとcertificate.txtファイルをPEM形式でエンコードし、プライベートキーファイルはパスフレーズによる保護を外しておかなければなりません。
独自にキーと証明書のペアを提供する場合でも、p4d -Gcによって生成する場合でも、これらのファイルがp4dバイナリにのみ読み取り可能である安全な場所に格納されることは必須です。
SSL環境に移行する
混合環境では、Perforceサーバ、プロキシ、ブローカ相互の連結について、その他の連結に関して選択されている暗号化方法とは無関係に、プレーンテキストまたはSSLのどちらかに構成することが可能です。
例えば、クリアテキストからSSLへの移行作業中に、古いPerforceアプリケーションからのプレーンテキスト接続を受け入れ、それらのリクエスト(SSLにより暗号化)をSSL接続を要求するPerforceサーバに送るようにPerforceブローカを構成することができます。
例えば、Perforceブローカがtcp:old-server:1666にlistenするよう設定し、すべてのリクエストをssl:new-server:1667のtargetにリダイレクトするような構成が考えられます。新しいPerforceアプリケーションのユーザは、(P4PORTをssl:new-server:1667に設定して)SSLを使用して直接アップグレード済みのPerforceサーバに接続し、一方で古いPerforceアプリケーションのユーザは、(P4PORTをold-server:1666に設定して)Perforceブローカへの接続時にプレーンテキストの使用を続けることができます。移行作業が完了したら、old-server:1666のブローカを非アクティブ(またはSSL接続を要求するように再構成)にして、プレーンテキストでの接続を引き続き試みているその他のレガシープロセスやスクリプトに関しては、手動でアップグレードするとよいでしょう。
PerforceプロキシとPerforceブローカでは、-Gcフラグと-Gfフラグがサポートされており、P4SSLDIR環境変数が使用されています。これら2つのプロセスに対し、単一のPerforceサーバの場合と同様に証明書とキーのペアを生成(およびフィンガープリントを確認)することができます。2つのサーバがSSLで通信するためには、ダウンストリームのサーバ(通常はレプリカサーバ、プロキシ、またはブローカのプロセス)の管理者もまたp4 trustコマンドを使用して、ダウンストリームサーバに関連付けられたサービスユーザ用のP4TRUSTファイルを生成する必要があります。
SSLでない環境からSSL環境に移行する際は、管理者の責任で新しいサーバのフィンガープリントを安全な方法でユーザに通知してください。
補助的な暗号スイート
デフォルトでは、PerforceのSSLサポートはAES256-SHA暗号スイートに基づいています。CAMELLIA256-SHAを使用するには、ssl.secondary.suite調整値を1に設定します。
P4PORTでIPアドレスを指定する
ほとんどの場合、PerforceサーバのP4PORT設定はプロトコルとポート番号で構成されています。ユーザがPerforceサーバに接続するためには、サーバのIPアドレスを知っている(またはホスト名からそれを導き出せる)必要があります。
p4dプロセスにP4PORTでIPアドレスおよびポート番号の両方を指定すれば、PerforceサーバはP4PORTで指定された以外のIPアドレスからの要求は一切無視するようになります。このような設定は、p4dを特定のネットワークインターフェイスまたはIPアドレスに対してのみ接続待ちをするように構成したいときなどに役立ちます。例えば、P4PORT==protocol:localhost:portと設定すると、Perforceサーバはすべての非ローカル接続の要求を無視します。
UNIXのinetdから起動する
通常のインストールを行ったPERFORCEサービスは、UNIX上で、ユーザからの接続要求を待つバックグラウンドプロセスとして動作します。接続があったときに初めてp4dを起動するようにするには、inetdとp4d -iを使用して、/etc/inetd.confの後に次の行を記述します。
p4dservice stream tcp nowait username /usr/local/bin/p4d p4d -i -r p4droot
さらに、/etc/servicesの後に次の行を記述します。
p4dservice nnnn /tcp
ただし、
-
p4dserviceは、このPerforceサーバ用に選んだサービス名です -
/usr/local/binは、p4dのバイナリファイルを保持しているディレクトリです -
p4drootは、このPerforceサーバ用に使用するルートディレクトリ(P4DROOT)です(例えば、/usr/local/p4d) -
usernameは、このPerforceサーバを動作させるために使用するUNIXユーザ名です -
nnnnは、このPerforceサーバが使用するポート番号です
/etc/inetd.confの行に、必ずp4dを“2つ”記述してください。inetdはこれをargv[0]としてOSに渡します。そのとき、最初の引数は-iフラグで、これによってp4dは、デーモンとしてバックグラウンドで動作するのではなく、stdin/stdout上で接続された単一のクライアントに対してサービスを行います。(inetdによって起動されるサービスにおいて、通例といえる方法です。)
これは、起動スクリプト以外からp4dを動作させる方法の1つです。特別なサービスの提供にも利用することができます。例えば、Perforce社では、UNIX上で動作するテストサーバが多数あり、それぞれが独自のポート番号を持つinetdサービスとして定義されています。
この方法には、注意すべき点があります。
-
inetdは過度な接続を許可しないことがあるので、数千のp4コマンドを呼び出し、その各々がinetdを介してp4dのインスタンスを生じるようなスクリプトを使用した場合、inetdによってサービスが一時的に使用できなくなることがあります。システムによっては、inetdの設定を変更して、この限度を無視するか引き上げる必要があります。 -
毎回p4d実行ファイルが実行されるため、簡単にサーバを使用不可にすることができなくなります。サーバを無効にするには、
/etc/inetd.confを修正し、inetdを再起動する必要があります。
大文字と小文字の区別とマルチプラットフォーム開発
初期(97.2以前)のリリースのPerforceサーバはUNIX環境、Windows環境を問わず、すべてのファイル名、パス名、およびデータベースのエンティティ名を、大文字/小文字の区別をつけて扱っていました。
例えば、//depot/main/file.cと//depot/MAIN/FILE.Cは、完全に異なる2つのファイルとして扱われました。このため、UNIX上のユーザがWindows上で動作しているPerforceサーバに接続している場合に、さまざまな問題が生じました。これは、Windowsサーバの基本的なファイルシステムでは、UNIXユーザによってサブミットされる、大文字と小文字が区別された名前のファイルを保存できなかったためです。
リリース97.3で、この状況は変わりました。UNIXサーバだけが、大文字と小文字が区別される名前をサポートするようになりました。とはいえ、UNIXとWindowsの両方にまたがる環境で開発プロジェクトを行っている場合には、いまだにユーザは大文字/小文字区別の問題にぶつかることがあります。
97.2以前のサーバをWindowsでご使用の場合には、support@perforce.comに連絡して、サーバやデータベースのアップグレードをご相談ください。
現在リリースされているサーバでは:
-
UNIX上のPerforceサーバは、大文字と小文字が区別される名前をサポートしています。
-
Windows上のPerforceサーバは大文字と小文字の区別を無視します。
-
プラットフォームに関係なく、キーワードによるジョブ検索では、常に大文字と小文字の区別を無視します。
次の表は、これらの規則を要約しています。
|
大文字/小文字の区別 |
UNIXサーバ |
Windowsサーバ |
|---|---|---|
|
パス名およびファイル名 |
する |
しない |
|
データベースのエンティティ名(ワークスペース、ラベル等) |
する |
しない |
|
ジョブ検索のキーワード |
しない |
しない |
Perforceサーバが動作しているプラットフォームはp4 infoで確認できます。
PerforceサーバがUNIX上にある場合
PerforceサーバがUNIX上にあり、UNIX上にもWindows上にもユーザがいる場合には、UNIXユーザは大文字と小文字が違うだけの名前のファイルをサブミットしないように十分に注意しなければなりません。UNIXサーバはそれらのファイルをサポートできますが、Windowsユーザがワークスペースを同期させたときに、互いにファイルを上書きすることになります。
逆に、Windowsユーザは新しいファイルを追加するときにファイル名やパス名の大文字/小文字の使用を一貫させる必要があります。Windowsユーザは//depot/main/one.cと//depot/MAIN/two.cのファイルが、UNIXユーザのワークスペースに同期された場合、2つの異なるディレクトリに格納されることを知らないかもしれません。
UNIX Perforceサーバは常にクライアント名、ラベル名、ブランチビュー名等の大文字/小文字の違いを認識します。UNIXサーバに接続するWindowsユーザは、新たにクライアントワークスペースを作成したとき、デフォルトではワークステーション名は小文字で登録されることを知っておく必要があります。例えば、新規ユーザがROCKETという名前のWindowsマシン上でクライアントワークスペースを作成すると、クライアントワークスペースの名前はデフォルトではrocketとなります。後でそのユーザがP4CLIENTをROCKET(またはRocket)と設定しても、そのワークスペースが未定義であることがサーバから通知されます。自分の定義したクライアントワークスペースを使うには、P4CLIENTをrocketと設定する(またはそれを解除する)必要があります。
PerforceサーバがWindows上にある場合
PerforceサーバがWindows上で動作していれば、UNIXユーザは大文字と小文字が違うだけのファイルは同じネームスペースに保存されることを知っておかなければなりません。
例えば、次のような名前で3つのファイルを保存しようとする場合
p4 add dir/file1 p4 add dir/file2 p4 add DIR/file3
すべて同じディポディレクトリに保存されることを知っておく必要があります。Windowsサーバに割り当てられるディポのパス名とファイル名は最初に参照されたものになります。(この場合は、ディポのパス名はDIRではなくdirになります。)
サーバの動作を監視する
Perforceサーバ上で実行中のPerforce関連プロセスの監視と制御を行うには、p4 monitorコマンドを使用します。
プロセスの監視を有効にする
サーバプロセスの監視には最小限のシステムリソースしか必要としませんが、p4 monitorでプロセスを監視するよう設定する必要があります。すべての実行中のコマンドを監視するには、次のように構成可能変数monitorを設定します。
p4 configure set monitor=1
追加設定で、以下のようなオプションも用意されています。
-
0: サーバプロセスの監視をオフにする。(デフォルト) -
2: 実行中のコマンドと休止中の接続の両方を監視する。 -
5: 実行中のコマンドと休止中の接続の両方を監視する。このコマンドにより1秒以上ロックされたファイルの一覧を含む。 -
10: 実行中のコマンドと休止中の接続の両方を監視する。このコマンドにより1秒以上ロックされたファイルの一覧を含む。ロック情報にロック待機時間を含む。 -
25: 実行中のコマンドと休止中の接続の両方を監視する。このコマンドによりロックされたファイルの一覧を含む。ロック情報にロック待機時間を含む。
監視レベル5、10、25はサーバが稼働しているプラットフォームに応じて設定します。詳細については、『P4コマンドリファレンス』のp4 monitorコマンドの解説を参照してください。
休止中のプロセスの監視を有効にする
デフォルトでは、IDLEプロセス(多くの場合、Perforce APIに基づくカスタムアプリケーションに関連付けられています)はp4
monitorの出力に含まれていません。p4
monitorのデフォルト出力に休止中プロセスを含めるには、監視レベル2を使用してください。
p4 configure set monitor=2
休止中プロセスを表示するには、次のコマンドを使用します。
p4 monitor show -s I
ロックされたファイルの情報を表示する
ロックされたファイルの情報は、p4 monitorの-Lオプションで確認できます。情報が収集されるのは、p4 monitorコマンドが実行されている期間のみで、その後は継続しません。詳細については、p4 monitorコマンドの解説のこのような監視の設定のしかたを参照してください。
次のp4 monitor show -Lコマンドのサンプル出力は、ロックされたファイルについての情報を示しています。
8764 R user 00:00:00 edit
[server.locks/clients/88,d/ws4(W),db.locks(R),db.rev(R)]
8766 R user 00:00:00 edit
[server.locks/clients/89,d/ws5(W),db.locks(R),db.rev(R)]
8768 R user 00:00:00 monitor
以下のpid、ステータス、所有者、経過時間からなる出力は、ws4とws5のワークスペース専用モードによるクライアントワークスペースのロックと、読み取り専用モードのdb.locks、db.revテーブルを含むさまざまなファイルをロックする2つの編集コマンドを示しています。
実行中のプロセスを一覧表示する
Perforceサーバによって監視されているプロセスを一覧表示するには、次のコマンドを使用します。
p4 monitor show
現在実行中のプロセスのみを表示するには、次のコマンドを使用します。
p4 monitor show -s R
デフォルトではp4 monitorの出力の各行は、次のようになります。
pid
status
owner
hh:mm:ss
command [args]
ここで、pidはUNIXのプロセスID(WindowsのスレッドID)です。statusはRもしくはTで、実行中か終了しているかを示します。ownerは、そのコマンドを実行しているユーザのPerforceユーザ名です。hh:mm:ssは、そのコマンドを実行してから経過した時間です。commandとargsは、Perforceサーバが受け取ったコマンドと引数です。例:
$ p4 monitor show 74612 R qatool 00:00:47 job 78143 R edk 00:00:01 filelog 78207 R p4admin 00:00:00 monitor
実行時、コマンドと共に指定された引数を表示するには、次のように-a(引数)フラグを使用します。
$ p4 monitor show -a 74612 R qatool 00:00:48 job job004836 78143 R edk 00:00:02 filelog //depot/main/src/proj/file1.c //dep 78208 R p4admin 00:00:00 monitor show -a
ユーザ環境に関する追加情報を取得するには、-eフラグを使用します。-eフラグは、以下のようなフォームの出力を生成します。
pid client IP-address status owner workspace hh:mm:ss
command [args]
この場合、clientはPerforceアプリケーション(およびバージョン文字列またはAPIプロトコルレベル)、IP-addressはユーザのPerforceアプリケーションのIPアドレス、workspaceはユーザの現在のクライアントワークスペースの設定です。例:
$ p4 monitor show -e 74612 p4/2011.1 192.168.10.2 R qatool buildenvir 00:00:47 job 78143 192.168.10.4 R edk eds_elm 00:00:01 filelog 78207 p4/2011.1 192.168.10.10 R p4admin p4server 00:00:00 monitor
デフォルトで、すべてのユーザ名とクライアントワークスペース名(該当する場合)は10文字で切り捨てられ、行は80文字で切り捨てられます。この切り捨てを無効にするには、次のように-l(long-form)オプションを使用します。
$ p4 monitor show -a -l 74612 R qatool 00:00:50 job job004836 78143 R edk 00:00:04 filelog //depot/main/src/proj/file1.c //dep ot/main/src/proj/file1.mpg 78209 R p4admin 00:00:00 monitor show -a -l
-a、-l、-eのオプションを使用できるのは、Perforce管理者とスーパーユーザのみです。
プロセスの停止、再開、および終了
長時間実行されているプロセス(p4 verifyやp4 pullなど)を停止後に再開させるには、Perforceスーパーユーザがp4 monitor pauseコマンドとp4 monitor resumeコマンドを使用します。Perforceサーバ上の特定のプロセスがリソースを過剰に消費している場合、p4 monitor terminateによって、そのプロセスを終了させることもできます。
一度終了が予約されると、50000行または列をスキャンするまでの間に、そのプロセスはPerforceサーバによって終了されます。終了を予約することができるプロセスは、少なくとも10秒間実行し続けているプロセスに限られます。
プロセスを終了させられたユーザに対して、次のメッセージが通知されます。
Command has been canceled, terminating request
対話形式のフォームを使用するプロセス(p4 jobやp4 userなど)も終了を予約することができますが、ユーザがフォームに入力したデータは保持されます。p4 obliterateなど、一部のコマンドは終了させることができません。
プロセステーブルのエントリをクリアする
一部の状況において(例えば、特定のPerforceコマンドを実行中にWindowsマシンが再起動された場合など)、プロセスが終了した後もプロセステーブルにエントリが残っている場合があります。
Perforceスーパーユーザは、p4 monitor clear pidを使用して、このような誤ったエントリをプロセステーブルから一括で削除することができます。このpidは、該当する誤ったプロセスIDを意味します。(実行中であるかどうかにかかわらず)テーブルからすべてのプロセスをクリアするには、p4 monitor clear allを使用します。
p4 monitor clearによってプロセステーブルから削除された実行中プロセスは、処理が終了するまで継続します。
Perforceサーバトレースおよび追跡用オプション
コマンドトレーシングまたはパフォーマンス追跡の動作を変更するには、p4d起動コマンドに適切な-v
フラグを指定します。ログファイルの名前はsubsystem=valueP4LOGまたは-L
フラグで指定します。例:
logfile
p4d -r /usr/perforce -v server=2 -p 1666 -L /usr/perforce/logfile
ログ記録を開始する前に、十分なディスク容量を確保しておく必要があります。
Windows
WindowsのサービスとしてPerforceを起動している場合、p4 setコマンドを使用してP4DEBUGをレジストリ変数に設定してください。これらのトレースフラグは、コマンドラインからp4d.exeをサーバプロセスとして起動した場合でも設定することもできます。
Perforceサーバ(p4d)でサーバデバッグレベルを設定しても、Perforceプロキシ(p4p)プロセスのデバッグレベルには何の影響もありません。また、この逆も同様です。
Perforceサーバコマンドのトレーシングおよび追跡のオプションをより高いレベルに設定することは、通常、システム管理者がPerforceテクニカルサポートとともに問題の診断や調査にあたる場合にのみ推奨されます。
コマンドトレーシング
サーバコマンドのトレースフラグおよびその意味は次のとおりです。
|
トレースフラグ |
意味 |
|---|---|
|
|
サーバコマンドのログ記録を無効にします。 |
|
|
サーバコマンドをサーバのログファイルに記録します。 (リリース2011.1以降、これはデフォルトの設定です。) |
|
|
レベル1で記録されるデータのほか、サーバコマンドの完了、CPU使用時間の基本情報を記録します。経過時間は秒単位でレポートされます。UNIXでは、CPU使用(システム、ユーザ時間)は、 |
|
|
レベル2で記録されるデータのほか、p4 syncおよびp4 flush(p4 sync -k)コマンドの計算フェーズの使用情報を追加します。 |
コマンドトレーシングでは、出力は特定のログファイルに表示され、日付、時間、ユーザ名、IPアドレス、およびサーバにより処理される各リクエストのコマンドを示します。
パフォーマンス追跡
ユーザコマンドが事前定義されたリソース使用量のしきい値を超えると、Perforceサーバによりサーバログに診断結果が出力されます。パフォーマンス追跡はデフォルトで有効です。P4DEBUGが設定されていない場合(またはコマンドラインでトラッキングフラグが指定されていない場合)、追跡レベルはライセンスファイル内のユーザの数に基づいて計算されます。
|
トラッキングフラグ |
意味 |
|---|---|
|
|
追跡を無効化します。 |
|
|
すべてのコマンドを追跡します。 |
|
|
ユーザ数が10未満のサーバについて使用量の超過を追跡します。 |
|
|
ユーザ数が100未満のサーバについて使用量の超過を追跡します。 |
|
|
ユーザ数が1000未満のサーバについて使用量の超過を追跡します。 |
|
|
ユーザ数が1000を超えるサーバについて使用量の超過を追跡します。 |
追跡の出力の厳密なフォーマットは変更される場合があり、ここでは記述しません。
ユーザのファイルアクセスの監査
Perforceサーバは個々のファイルへのアクセスを監査ログファイルに記録することができます。デフォルトでは監査機能は無効です。これを有効にするには、P4AUDITを監査ログファイルの場所を示すよう設定するか、もしくはサーバ起動時に-A フラグを指定する必要があります。
auditlog
監査が有効にされると、サーバからクライアントへファイルコンテンツが転送されるたびに、サーバが監査ログファイルに一行追加します。アクティブなサーバ上では、監査ログファイルは非常に急速に増大します。
監査ログの行は次の形式で出力されます。
date time user@client clientIP command file#rev
例:
$ tail -2 auditlog 2011/05/09 09:52:45 karl@nail 192.168.0.12 diff //depot/src/x.c#1 2011/05/09 09:54:13 jim@stone 127.0.0.1 sync //depot/inc/file.h#1
Perforceサーバを実行しているマシン上でコマンドが実行されると、clientIPは127.0.0.1と表示されます。
複製環境においてサーバの動作を監査している場合、ビルドファームとなるサーバまたは転送レプリカサーバのそれぞれに、固有のP4AUDITログが設定されている必要があります。
ログ記録と構造化ログファイル
ログファイルを構造化形式(.csv)で書き込むようにPerforceサーバを構成することができます。構造化ログファイルには一般的なログファイルよりも詳細な情報が含まれ、より解析しやすくなっています。また、Perforceサーバはユーザのサイトのログ記録の設定をカスタマイズするためのコマンドを追加で提供しています。このセクションでは、ログ記録の管理に使用するコマンドの概要とともに、構造化ログの使用方法と、ログファイルのローテーションを説明します。
Note
Unicodeモードのサーバの場合、p4dのエラーとログ情報はすべてUTF8で記録されます。このログ情報を適切にレンダリングするためには、UTF8コンソールまたはエディタが必要です。
ログ記録用コマンド
以下のコマンドを使用してログを作成することができます。
|
コマンド |
意味 |
|---|---|
|
p4 logappend |
ユーザログが有効である場合、エントリを |
|
p4 logparse |
構造化ログファイルを解析し、ログデータをタグ付き形式で返します。 |
|
p4 logrotate |
指定されたログファイル、または名称が未指定の場合はすべてのサーバログをローテーションします。このコマンドは構造化ログにのみ適用されます。構造化されていない |
|
p4 logstat |
ジャーナル( |
|
p4 logtail |
エラーログ( |
|
p4 logschema |
指定されたログ記録タイプについての説明を返します。 |
構造化ロギングを有効にする
構造化ロギングを有効にするには、構成可能変数serverlog.file.にファイルの名前を設定します。構造化ログファイルに有効な名前と、その設定のために使用されるコマンドを以下の表に示します。
N
すべての構造化ログファイルを有効にすると、相当量のディスクスペースが消費される可能性があります。ログファイルのサイズの管理とログのローテーション回数の管理についての詳細は、構造化ログファイルのローテーションを参照してください。
|
ファイル名 |
解説 |
|---|---|
|
|
ログ記録可能なすべてのイベント(commands、errors、auditなど) p4 configure set serverlog.file.1=all.csv |
|
|
コマンドイベント(command start、compute、およびend) p4 configure set serverlog.file.2=commands.csv |
|
|
エラーイベント(errors-failed、errors-fatal) p4 configure set serverlog.file.3=errors.csv |
|
|
監査イベント(audit、purge) p4 configure set serverlog.file.4=audit.csv |
|
|
コマンド追跡(track-usage、track-rpc、track-db) p4 configure set serverlog.file.5=track.csv |
|
|
ユーザイベント。p4 logappend実行のたびに記録。 p4 configure set serverlog.file.6=user.csv |
|
|
サーバイベント(startup、shutdown、checkpoint、journal rotationなど) p4 configure set serverlog.file.7=events.csv |
|
|
レプリカの整合性チェックの際の主なイベント。 p4 configure set serverlog.file.8=integrity.csv |
構造化ログファイルのローテーション
設定されたserverlog.file.ファイルにはそれぞれ、構成可能変数のNserverlog.maxmb.およびNserverlog.retain.が関連付けられています。設定されたサーバログタイプごとに、これらの構成可能変数はローテーション前のログファイルの最大サイズ(MB単位)と、サーバに保持されるローテーション済みのサーバログの数を制御します。
N
構造化ログファイルはチェックポイント作成時、ジャーナル作成時、関連するserverlog.maxmb.の制限超過時(設定されている場合)、p4 logrotateコマンド実行時に自動的にローテーションします。構成可能変数Ndmrotatewithinjnlを0に設定することで、ジャーナルローテーション後のログのローテーションを無効にすることができます。頻繁にジャーナルローテーションが行われ、それとは別のスケジュールでログのローテーションを実施したい場合、この動作を無効にすることができます。
構成可能変数serverlog.counter.を使用して、構造化ログファイルのローテーション回数を追跡するカウンターを作成することができます。例えば、次のコマンドでNmyErrorsという名前のローテーションカウンターを作成できます。
p4 configure set serverlog.counter.3=myErrors
ログファイルerrors.csvがローテーションするたびに、カウンターの値が1増加します。また、その時点までに増加したカウンターの値を反映するようにログファイルの名前が変わります。つまり、myErrorsのカウンターが7の場合、errors.csvファイルの名前はerrors-6.csvとなります。
先の表に記載された各ファイルに対して、カウンターを作成することができます。システム予約のカウンター名、change、maxCommitChange、job、journal、traits、upgradeは使用しないでください。
p4 logtailコマンドは、ログの追記を行う際にカウンターの現在の値を返します。このコマンドは、(ログ内の終了オフセットの値と共に)出力の終了時点でのログのサイズも返します。p4 logtailがログの最後まで読み込んだ場合、サイズとオフセット値は一致します。カウンターをセキュリティ監視ツールで使用することができます。また、ログファイルのスキャンプロセスでp4 logtailコマンドを使用して疑わしいアクティビティを監視することができます。
認証オプション
このセクションでは、Perforceにログインするユーザの認証に使用できるオプションを説明します。ここでは、認証トリガを使用せずにActive DirectoryとLDAPサーバに対して認証する方法に焦点を当てています。
概要
ユーザ認証は次の3つのいずれかのオプションで行うことができます。
-
Active Directoryに対しての認証、またはLDAPの仕様に基づきアクセスされたLDAPサーバに対しての認証。このオプションを有効にすると、トリガベースの認証は無効になります。
このセクションでは、このオプションを主に説明します。ここでは、このオプションを使用することの利点に触れ、LDAPコンフィギュレーションの作成方法を説明します。またコンフィギュレーションをアクティベートおよびテストする方法を解説し、このオプションを実行するためのコマンドと構成可能変数に関する参照情報を提供します。
-
Perforce内部のユーザデータベース
db.userに対しての認証。このオプションはパスワードベースまたはチケットベースの認証を受け入れます。これについてはユーザ認証: パスワードとチケットで説明されています。
-
LDAPサーバに対しての認証トリガによる認証。
これらのトリガは、非標準のLDAPサーバに対してユーザを認証しなければならない場合に有用です。認証トリガはp4 loginまたはp4 passwordコマンドが実行されるときに発動します。このオプションはトリガを起動して外部認証を使用するのセクションで説明されています。
認証は(トリガベースの認証でない限り)ユーザベースで行われます。各ユーザに対して認証に使用する方法を指定することができます。一部のオプションは互いに相容れません。例えば、コンフィギュレーションベースのLDAP認証はトリガベースのLDAP認証を無効にします。ただし、一部のユーザの認証にLDAPを使用し、その他のユーザに関してはPerforceの内部ユーザデータベースに照会することは可能です。詳細については、ユーザ用の認証を定義するを参照してください。
Active DirectoryおよびLDAPサーバに対して認証する
LDAP(Lightweight Directory Access Protocol)は、Active DirectoryやOpenLDAPによって代表されるさまざまなディレクトリサービスでサポートされています。PerforceはActive DirectoryまたはLDAPサーバに対して2種類の認証方法を提供します。認証トリガを使用する方法と、LDAP仕様により認証を行う方法です。後者の方法には複数の利点があります。簡単に使用できるほか、外部のスクリプトが不要で、バインドメソッドをより柔軟に定義できます。また、LDAPディレクトリにないユーザに対してPerforceの内部ユーザデータベースへの照会による認証を許可でき、より安全な方法です。
Note
superのアクセス権を持つアカウントを最低1つ作成してください。これにより、何らかの理由でAD/LDAPの接続を失った場合でもログインが可能になります。
コンフィギュレーションベースのLDAP認証を設定するために必要な手順について、以下のセクションで詳細を解説します。このセクションのLDAP認証に関連するすべての情報は、Active Directoryの使用時にも共通して当てはまります。設定手順の概要は次の通りです。
-
p4 ldapコマンドを使用して、認証に使用する各LDAPサーバまたはActive Directoryサーバに対してLDAPコンフィギュレーションの仕様を作成します。
-
認証関連の構成可能変数を定義して、認証を有効にし、複数のLDAPサーバの検索順序を指定します。また、LDAP認証の実装についての情報を補足します。
-
既存ユーザのユーザ仕様の
AuthMethodフィールドを設定し、認証の方法を指定します。 -
定義したLDAPコンフィギュレーションのテストを行い、想定したとおりに検索が動作するか確認します。
-
LDAP認証を今回初めて有効にした場合、サーバを再起動します。
Note
次の場合を含めLDAP認証を有効または無効にした場合はPerforceサーバを再起動する必要があります。
-
構成可能変数
auth.ldap.order.を設定しLDAPコンフィギュレーションを初めて有効にすることで、LDAP認証が有効になった場合。N -
すべての既存のLDAPコンフィギュレーションを削除または無効にすることで、LDAP認証が無効になった場合。p4 ldapコマンドに
-dオプションを使用すると、LDAPコンフィギュレーションを削除できます。構成可能変数auth.ldap.order.のセットがひとつもない場合、すべてのLDAPコンフィギュレーションが無効になります。N
LDAPコンフィギュレーションを作成する
LDAPコンフィギュレーションは、Perforceサーバがユーザを認証する際に照会するActive Directoryまたはその他のLDAPサーバを指定します。コンフィギュレーションを作成するには、p4 ldapコマンドを使用します。
LDAPコンフィギュレーション仕様を定義するには、Active DirectoryまたはLDAPサービスのホスト名とポート番号、バインドメソッドについての情報、セキュリティパラメータを指定します。バインドメソッドに検索(search)を使用したLDAPコンフィギュレーションのサンプルを以下に示します。
Name: sleepy Host: openLdap.example.com Port: 389 Encryption: tls BindMethod: search SearchBaseDN: ou=employees,dc=example,dc=com SearchFilter: (cn=%user%) SearchScope: subtree GroupSearchScope: subtree
バインドメソッドはSASL、simple、またはsearchから選択することができます。
-
SASL: SASL以外のバインドメソッドでは、管理者がディレクトリ構造を把握している必要があります。ほとんどのLDAPおよびActive DirectoryサーバにはSASLを使用してバインドするオプションが用意されています。そのような場合、ユーザの認証にはユーザ名とパスワードのみが必要です。
LDAPサーバでSASL DIGEST-MD5(Active Directoryではサポートされています)がサポートされている場合、LDAPサーバに対するユーザの検索方法は異なるため、バインドを試行する前に識別名を特定する必要はありません。LDAPサーバに複数の領域がある場合(またはActive Directoryに複数のドメインがある場合)は、LDAPコンフィギュレーションの
SaslRealmフィールドを使用して領域を指定します。このメソッドは、Active Directoryに対して推奨されています。次のように単純にメソッドを指定することができます。BindMethod: sasl
LDAPサーバに複数の領域がある場合(またはActive Directoryに複数のドメインがある場合)は、LDAPコンフィギュレーションで使用される領域を指定する必要があります。その場合、例えば次のように
SaslRealmフィールドも設定する必要があります。BindMethod: sasl SaslRealm: example
Active Directoryは初期状態でSASLをサポートしています。ほとんどのLDAPサーバはSASLをサポートしています。
-
Simple: このメソッドはシンプルなディレクトリレイアウトに適しています。このメソッドでは、ユーザ名に基づいてテンプレートを作成し、ユーザパスワードを検証し、Perforceサーバがバインドを試行する識別名を生成します。識別名はSimple Patternフィールドで次のように設定されています。例:
BindMethod: simple SimplePattern: uid=%user%,ou=users,dc=example,dc=com
ユーザがログインすると、このパターンが拡張されます。たとえば、ユーザが
jsmithの場合、Perforceサーバはユーザの提供したパスワードを使用して、次のような識別名(DN)でバインドを試みます。uid=jsmith,ou=users,dc=example,dc=com
このバインドメソッドは、ユーザ名がDNの一部として含まれ、認証するすべてのユーザが同じ組織ユニット(OU)に属している場合にのみ使用できます。
-
Search: このメソッドでは、ディレクトリ内でユーザレコードの検索を実行します。これにより、シンプルバインドメソッドの制約を解消します。このメソッドは、ユーザレコードの識別にDNパターンではなくLDAPの検索クエリを使用します。このメソッドでは
%user%プレースホルダーも使用されます。検索の開始点と範囲を指定することで、ディレクトリのなかの検索する範囲を制御できます。この検索は、既知のベースDNとLDAP検索クエリをもとにして行われます。これらはLDAPコンフィギュレーション仕様のSearchBaseDN、SearchFilter、SearchScopeフィールドを使用して特定することができます。また、このメソッドでは、完全な識別名とディレクトリ内の既知の読み取り専用エンティティのパスワードが必要になることがあります。これらはLDAPコンフィギュレーションのSearchBindDNとSearchPasswdフィールドを使用して特定することができます。検索クエリのサンプルを2つ以下に挙げます。BindMethod: search SearchBaseDN: ou=users,dc=example,dc=com SearchFilter: (&(objectClass=inetOrgPerson) (uid=%user%)) SearchScope: subtree SearchBindDN: uid=read-only, dc=example, dc=com SearchPasswd: ******
BindMethod: search SearchBaseDN: ou=users,dc=example,dc=com SearchFilter: (&(objectClass=user) (sAMAccountName=%user%)) SearchScope: subtree SearchBindDN: uid=read-only, dc=example, dc=com SearchPasswd: ******
p4 ldapコマンドとLDAP仕様に関する詳細については、『P4コマンドリファレンス』を参照してください。
コンフィギュレーション作成後に構成可能変数auth.ldap.order.Nでそれを有効にする必要があります。例:
p4 configure set auth.ldap.order.1=sleepy
これでコンフィギュレーションが有効になり、認証に使用される状態になります。認証プロセスを定義するために追加で構成可能変数を定義しなければならない場合があります。これについては、LDAPに関連する構成可能変数を定義するで解説しています。
次のような場合には、複数のLDAPコンフィギュレーションを作成する必要があります。
-
Perforceサーバを複製している場合、それぞれの複製にLDAPコンフィギュレーションを作成する必要があります。その際、各複製ごとにLDAPに関連する構成可能変数を定義し直す必要はありません。
-
フェイルオーバまたはユーザ管理に複数のディレクトリからなるサーバを使用している場合、LDAPサーバごとにLDAPコンフィギュレーションを作成する必要があります。加えて、構成可能変数
auth.ldap.order.を使用して検索の順序を指定する必要があります。構成可能変数は、そのキーとして名称を使用します。そのため、同一のPerforceサーバ上に同じ並び順の番号で2つのLDAPコンフィギュレーションを作成することはできません。N
LDAPに関連する構成可能変数を定義する
LDAP認証を使用するには、認証に関連するいくつかの構成可能変数を設定する必要があります。
-
auth.ldap.order.- LDAPサーバを有効にし、検索の順序を指定します。N -
auth.default.method- 新しいユーザをPerforceで認証するか、LDAPを使用して認証するか指定します。 -
auth.ldap.userautocreate- LDAP認証を使用するとき、ログイン時に新しいユーザを自動で作成するか否かを指定します。 -
dm.user.noautocreate- ユーザの自動作成をより詳細に制御します。 -
auth.ldap.timeout- 接続の試行をあきらめるまでの時間を指定します。 -
auth.ldap.cafile- LDAPにSSLまたはTLSが使用される場合、証明書ファイルへのパスを指定します。 -
auth.ldap.ssllevel- SSL証明書の検証レベルを指定します。
たとえば、以下のコマンドはActive Drectoryの検索順序とを指定するとともに、新しいユーザに対するデフォルトの認証先をperforceに設定します。
p4 configure set auth.ldap.order.1=sleepy p4 configure set auth.ldap.order.2=dopey p4 configure set auth.ldap.order.5=sneezy p4 configure set auth.default.method=perforce
認証に関連する構成可能変数についての追加情報は、『P4コマンドリファレンス』の付録、「構成可能変数」を参照してください。
ユーザ用の認証を定義する
認証は、ユーザ仕様のAuthMethodフィールドの設定およびユーザ認証に影響を及ぼす構成可能変数により定義されています。
各ユーザに対して使用される認証方法は、p4 userコマンドで作成されるユーザ仕様のAuthMethodフィールドで定義されます。
-
ldapは、アクティブなLDAPコンフィギュレーションで設定されているLDAPディレクトリへ照会することでユーザ認証が行われることを示しています。特定のLDAPグループに属するユーザのアクセスをさらに制限することができます。LDAP認証が有効なときは、すべての認証トリガは無効になります。
-
perforceは、認証トリガのスクリプト(存在する場合)を通じて、またはPerforceの内部ユーザデータベースへ照会することでユーザ認証が行われることを示しています。これはデフォルトの設定です。
デフォルト値をldapに変更するには、p4 user -fコマンドでユーザ仕様を編集する必要があります。ユーザ仕様の値AuthMethodを変更できるのはスーパーユーザに限られます。
構成可能変数auth.method.defaultは新しいユーザに対するAuthMethodのデフォルト値を定義します。指定できる値はperforceまたはldapです。
If you select the ldapの構成可能変数を選択した場合、スーパーユーザだけが(p4 userコマンドを使用して)新しいユーザを作成できます。新しいユーザをログイン時に自動で作成するには、auth.ldap.userautocreateを1に設定します。
PerforceにアクセスできるLDAPユーザをさらに細かく制御する必要がある場合、LDAPコンフィギュレーションのグループに関連するフィールドを使用して、Perforceユーザ以外をフィルタで除外することができる基本の認証手順を実施するようにできます。たとえば、次のようにフィルタを指定すればperforceという共通名(cn)を持つLDAP グループに属するLDAPユーザのアクセスを制限することができます。
Base DN: ou=groups,dc=example,dc=org LDAP query: (&(cn=perforce)(memberUid=%user%))
上記の例では、正しい資格情報を提供可能なユーザと指定されたグループのメンバーのみが認証されます。構成可能変数auth.method.defaultについて詳しくは、『P4コマンドレファレンス』のp4 configureコマンドの解説を参照してください。
Note
LDAPコンフィギュレーションに基づいて認証を行うように設定されていユーザは、p4 passwordコマンドでパスワードを更新する必要はありません。
LDAPグループを使用した認証
ユーザ認証の設定にバインドメソッドを使用する一方で、組織内の全員が(特に全員が同一のディレクトリに存在するような場合に)Perforceサーバへログインできるようにはしたくない場合があります。このようなときは、代わりにそのディレクトリに認証済のユーザのみを含むグループオブジェクトを作成します。LDAPの新しい統合によって、グループのメンバー構成がサポートされるようになりました。
LDAPグループは検索バインドメソッドと同様の働きをします。LDAP検索クエリにより、ユーザが許可されるグループのメンバーであるか否かが決定されます。また、検索のベースと範囲も使用することができます。たとえば、LDAPディレクトリにperforceという名前でPerforceサーバへのアクセスがユーザに許可されているグループがある場合、その構成は以下のようになります。
GroupBaseDN: ou=groups, dc=example, dc=com SearchFilter: (&(objectClass=posixGroup) (cn=perforce) (memberUid=%user%)) SearchScope: subtree
Active DirectoryのグループオブジェクトはOpenLDAPのグループオブジェクトとわずかながら異なります。OpenLDAPにはメンバーのユーザ名のリストではなく、メンバーの完全なDNのリストが含まれます。通常これらを簡単に一致させることはできませんが、メンバーのユーザオブジェクトに追加される後方参照であれば一致させることができます。したがって、Active
Directoryへ照会してグループの認証をする場合、ユーザのユーザオブジェクトを検索して、そのグループへのmemberOfの参照がないか探す必要があります。例:
GroupBaseDN: ou=groups, dc=example, dc=com
SearchFilter: (&(objectClass=user) (sAMAccountName=%user%)
(memberOf=cn=perforce,ou=groups, dc=example, dc=com))
SearchScope: subtree
LDAPコンフィギュレーションをテストして有効にする
LDAPコンフィギュレーションを有効にする前に、perforce認証を使用するsuperのアクセス権を持つアカウントを最低1つ作成してください。これにより、何らかの理由でAD/LDAPの接続を失った場合でもログインが可能になります。
LDAPコンフィギュレーションを作成が済んだら、それをテストして有効にする必要があります。LDAPコンフィギュレーションのテストを行えることで、既存ユーザに影響を与えることなくすべての動作が適切であるか確認することができます。すでに認証トリガを使用してLDAPに照会をしているような場合でも、テストを実行できます。LDAPコンフィギュレーションに問題がないことが確認できたら、再度作成し直すことなくユーザを新たな方法へと切り替えることができます。以下の手順は、コンフィギュレーションのテストと有効化のプロセスを詳しく説明します。
-
例えば次のように、p4 ldapコマンドに
-tフラグを使用してコンフィギュレーションをテストします。p4 ldap -t Cleopatra sleepy
ユーザのパスワードを求められます。正しいパスワードの場合、コマンドが正常に完了します。
テストで返される結果の情報量は検索のメソッドによって異なります。
-
シンプルバインドは合格/不合格の結果のみを返します。
-
検索ベースのバインドは、ユーザの資格情報が正しいか、ユーザが見つけられるかどうかを返します。
-
通常、SASLバインドはシンプルバインドよりも多くの診断情報を返しますが、結果は状況により異なります。
-
-
auth.ldap.order.を定義し、コンフィギュレーションをPerforceが使用する順序を指定します。例:Np4 configure set auth.ldap.order.1=sleepy
この構成可能変数は、コンフィギュレーションが一つしかない場合でも設定する必要があります。
-
次のコマンドを実行してアクティブなコンフィギュレーションを確認します。
p4 ldaps -A
-
サーバを再起動します。
p4 admin restart
-
次のコマンドを実行し、サーバがLDAP認証モードで動作していることを確認します。
p4 -ztag info
次に
ldapAuthが有効になっていることを確認します。 -
必要に応じて追加のLDAPサーバを作成します。各サーバで手順1、2、3および5を繰り返します。さらにコンフィギュレーションを作成する場合は、それぞれに異なる優先度を割り当てる必要があります。
-
各ユーザがLDAPで認証されるように
authMethodをldapに設定し、ユーザをLDAP認証に移行します。このプロセスを自動化するための支援が必要な場合、Perforceサポートまでお問い合わせください。
単一のLDAPサーバへの照会による認証をテストする以外にも、p4 ldaps -tコマンドを使用することで複数のサーバへの照会をテストすることができます。詳細については、『P4コマンドリファレンス』のp4 ldaps -tコマンドの解説を参照してください。
LDAPサーバの情報を取得する
LDAPサーバの情報を取得するには、2つのコマンドを使用することができます。
-
p4 ldap -oコマンドは単一のサーバに関する情報を表示します。
-
p4 ldapsコマンドは定義済みのすべてのサーバをリスト表示します。
-Aオプションを使用することで、有効にされたサーバのみを優先度順位でリスト表示することもできます。
詳細については、『P4コマンドリファレンス』の上記2つのコマンドの解説を参照してください。
Perforceサーバを新しいマシンに移動する
既存のPerforceサーバを別のマシンに移行する手順は次の点によって変わってきます。
-
同じバイト順を使用するマシンへの移動か
-
異なるバイト順を使用するが、テキストファイル(CR/LF)のフォーマットが同じであるマシンへの移動か
-
バイト順ならびにテキストファイルのフォーマットが異なるマシンへの移動か。
新しいマシンのIPアドレス/ホスト名が変わる場合には、さらに考慮すべきことがあります。
Perforceサーバはルートディレクトリに2種類のデータを保存しています。バージョンファイルとそれを記述するメタデータからなるデータベースです。バージョンファイルはユーザが作成および保管するファイルです。データベースはPerforceが保管しているバイナリファイルで、バージョンファイルの履歴および現在の状態を保持しています。Perforceサーバを別のマシンに移すときには、必ずこれらのバージョンファイルとデータベースも新しいマシンに移さなければなりません。
バージョンファイルとデータベースのさらに細かい違いや、バックアップ、リストアの手順の概要については、バックアップとリカバリに関する基本的な考え方を参照してください。
詳細については、Perforceナレッジベースの「Moving a Perforce Server」を参照してください。
http://answers.perforce.com/articles/KB_Article/Moving-a-Perforce-Server
同一バイト順のマシン間で移動する
新旧マシンのアーキテクチャで同じバイト順(例えばSPARC/SPARC、x86/x86、または32ビットWindowsから64ビットWindowsへ)を使用するなら、バージョン化ファイルもデータベースも2台の間で直接コピーできます。必要な操作はサーバルートのディレクトリツリーを新しいマシンに移すことだけです。tar、cp、xcopy.exeなど、あらゆる方法が使えます。P4ROOTディレクトリにあるもの、db.*ファイル(データベース)とディポのサブディレクトリ(バージョンファイル)をすべてコピーしてください。
-
サーバのバックアップを作成し(事前にp4 verifyも行うこと)、チェックポイントを取ります。
-
古いマシン上でp4dを終了します。
-
古いマシン上の古いサーバルート(
P4ROOT)とそのすべてのサブディレクトリの内容を新しいマシンの新しいサーバルートディレクトリにコピーします。 -
新しいマシン上で、任意のフラグを使用して、p4dを起動します。
-
新しいマシンでp4 verifyを実行し、データベースとバージョンファイルが新しいマ シンに正しく移されたことを確認します。
(同一アーキテクチャ間の移動の場合、バックアップ、チェックポイント、移行後のp4 verifyは、厳密には必要ありませんが、移行の前後では、いつもシステムの完全性確認、チェックポイント、バックアップを行うようにすることが推奨されています。)
異なるバイト順の同一テキストフォーマットのマシン間で移動する
2台のマシン間で内部データ表現(ビッグエンディアンかリトルエンディアン)の規定に違いがあるが(例えば、Linux-on-x86/SPARC)、オペレーティングシステムはともに同じCR/LFテキストファイル規定を採用している場合も、簡単にサーバルートのディレクトリツリーを新しいマシンに移すことができます。
バージョンファイルはアーキテクチャ間で移動可能ですが、db.*ファイルに保存されているデータベースは違います。このようなデータベースを移動するには、古いマシンでPerforceサーバのデータベースのチェックポイントを作成し、そのチェックポイントを利用して、新しいマシン上にデータベースを再構成します。チェックポイントはテキストファイルであるため、あらゆるアーキテクチャのPerforceサーバで読み取ることができます。詳細についは、チェックポイントを作成するを参照してください。
チェックポイントを作成したら、tar、cp、xcopy.exeなどを用いてそのチェックポイントファイルとディポのディレクトリを新しいマシンにコピーします。(db.*ファイルはチェックポイントから再生されるので、コピーする必要はありません。)
-
古いマシン上でp4 verifyを使用し、データベースの完全性を確認します。
-
古いマシン上でp4dを終了します。
-
古いマシン上で、次のコマンドによりチェックポイントを生成します。
p4d -jc
checkpointfile -
古いマシン上の古いサーバルート(
P4ROOT)とそのすべてのサブディレクトリの内容を新しいマシンの新しいサーバルートディレクトリにコピーします。(厳密には
db.*ファイルをコピーする必要はありません。必要なのはチェックポイントとディポのディレクトリだけです。db.*ファイルは、チェックポイントから再生されます。すべてをコピーする方が都合がよければ、すべてをコピーして構いません。) -
db.*ファイルもコピーした場合、必ず新しいマシン上で新しいP4ROOTから切り離してください。 -
作成したチェックポイントから新しいマシンのアーキテクチャに適した新しい
db.*ファイルのセットを再構成します。p4d -jr
checkpointfile -
新しいマシン上で、任意のフラグを使用して、p4dを起動します。
-
新しいマシンでp4 verifyを実行し、データベースとバージョンファイルが新しいマ シンに正しく移されたことを確認します。
WindowsとUNIX間で移動する
この場合は、システムのアーキテクチャとCR/LFテキストファイルのどちらも異なる可能性があります。同様にチェックポイントを作成してコピーし、新しいプラットフォーム上でデータベースを再構成する必要がありますが、バージョンファイルを格納しているディポのサブディレクトリを移すときは、プラットフォーム間の異なる改行規定にも対処しなければなりません。
ディポのサブディレクトリには、テキストファイルもバイナリファイルも格納されます。テキストファイル(RCSフォーマットなら最後が“,v”)とバイナリファイル(個々にディレクトリを持ち、各ディレクトリの最後が“,d”)は、テキストファイルでは行末を変換するため(バイナリファイルはそのまま)、別々の方法で移す必要があります。
前述の他の移行の場合と同様、移行後は必ずp4 verifyを実行してください。
Warning
Windowsは大文字/小文字の区別をしないオペレーティングシステムです。UNIX上で大文字/小文字の違いによって別ファイルと認識されているファイルは、Windowsマシンに移されると、同じネームスペースを占めます。例えば、Makefileというファイルとmakefileというファイルは、UNIX上では別ファイルとして認識されますが、Windowsマシン上では同じファイルとして扱われます。
大文字/小文字の区別がなくなることによるデータ損失のリスクがあるため、UNIXサーバからWindowsへの移行はサポートされていません。
PerforceサーバをWindowsからUNIXへ、またはその逆に移行するときは、Perforceテクニカルサポートまでお問い合わせください。
サーバのIPアドレスを変更する
新しいマシンのIPアドレスが古いマシンのときと異なる場合は、プロテクションテーブルのIPアドレスに基く保護を更新する必要があります。Perforceサーバのプロテクションの設定については、“Perforceの管理: 保護”を参照してください。
ライセンスをお持ちの場合でも、新しいIPアドレスを反映した新しいライセンスファイルが必要になります。Perforceテクニカルサポートにお問い合わせのうえ更新されたライセンスを取得してください。
サーバのホスト名を変更する
新しいサーバマシンのホスト名が旧マシンのときと異なる場合は、P4PORTの設定を変更する必要があります。旧マシンが廃棄または名称が変更される場合は、旧マシンに適合するエイリアスを新しいマシンに設定すれば、P4PORTの設定変更が不要になります。
複数のディポを利用する
新規のディポを定義するにはp4 depot
depotnameコマンドを使います。ディポのタイプはlocal、stream、remote、unload、archive、specのうちいずれかになります。
Perforceサーバには複数のディポを置くことができ、アプリケーションも複数のディポのファイルにアクセスできます。これらのディポは、通常クライアントがアクセスするPerforceサーバに置くことも、他のPerforceサーバ、つまりリモートのPerforceサーバに置くこともできます。
ローカルディポはユーザのPerforceアプリケーションが通常アクセスするPerforceサーバに存在します。ローカルディポ使用時には、Perforceアプリケーションはユーザの環境変数P4PORTまたは同等の設定で指定されたPerforceサーバと通信します。
ストリームディポには、階層とポリシを含むブランチタイプであるストリームが含まれています。ストリームディポはローカルディポと同様に、Perforceサーバに格納されます。
リモートディポ使用時には、ユーザのPerforceアプリケーションは、ユーザの環境変数P4PORTまたは同等の設定で指定されたPerforceサーバを、第2のPerforceサーバ、つまりリモートPerforceサーバへのアクセスに利用します。ローカルのPerforceサーバは、リモートのPerforceサーバファイルのサブセットにアクセスするため、リモートのPerforceサーバと通信します。リモートディポは、主に独立した組織間におけるコードの共有(「コードドロップ」と呼ばれます)を容易にするために使用されます。これについては、リモートディポと分散開発に記載されています。
リモートディポは、負荷バランスやネットワークアクセスの問題の総合的な解決策ではありません。共有開発や、負荷分散、ネットワークアクセスの問題をサポートするには、『Perforceサーバ管理者ガイド: マルチサイト展開』の資料を参照してください。
アーカイブディポは、アクセス頻度の低いコンテンツをニアラインまたはオフラインで格納するために使用されます。詳細については、ファイルのアーカイブによりディスク容量を再生するを参照してください。
アンロードディポはアーカイブディポと似ていますが、古いバージョンファイルではなく、アクセス頻度の低いメタデータ(具体的には、クライアントワークスペースとラベルに関するメタデータ)の格納場所を提供します。unloadディポは、一つのサーバに対して一つしか作成できません。詳細については、使用頻度の低いメタデータをアンロードするを参照してください。
スペックディポは特殊なディポです。specディポが存在する場合、クライアントワークスペース仕様、ジョブ、ブランチマッピングなどのユーザ編集フォームに対する変更を追跡します。specディポは一つのサーバに対して一つしか作成できません。
ディポに名前を付ける
ディポ名は、ブランチ名、クライアントワークスペース名、ラベル名とネームスペースを共用します。例えば、//rel2はディポrel2、ワークスペースrel2、ブランチrel2、またはラベルrel2のうちいずれかを一意に指すものです。rel2というディポとラベルを両方同時に持つことはできません。
新しいローカルディポを定義する
新しいローカルディポを定義する(つまり、現在のPerforceサーバのネームスペースに新しいディポを作成する)には、新しいディポの名前でp4 depotを呼び出し、表示されるフォーム内のMap:のフィールドのみを変更します。
例えば、bookという新しいディポを作成し、bookというルートサブディレクトリのPerforceサーバのネームスペースにファイルを保存する場合(つまり$P4ROOT/book)、コマンドp4 depot bookを入力し、表示されるフォームを次のように埋めます。
Depot: book Type: local Address: local Suffix: .p4s Map: book/...
Address:フィールドとSuffix:フィールドはローカルディポには適用されないため、無視されます。
デフォルトでは、ローカルディポ上のMap:フィールドは、ディポ名と一致しているディポディレクトリを指し示し、サーバ上で設定されているサーバルート(P4ROOT)からの相対パスとなります。ディポでバージョン管理するファイルを別のボリュームやドライブに保持するには、Map:フィールドに絶対パスを指定します。このパスはP4ROOT下でなくとも構いません。Windows上でMap:フィールドに絶対パスを指定する場合は、p4 depotフォームでスラッシュ(d:/newdepot/など)を使用する必要があります。
スペックディポを利用してバージョン化仕様を有効にする
スペックディポを利用してバージョン化仕様を有効にするユーザがユーザ編集フォームに対する変更履歴を取得するには、バージョン化仕様を有効にする必要があります。スペックディポにはどのような名前でも付けられますが、タイプをspecにする必要があります。また、一つのサーバに対して一つしか作成できません。(スペックディポが既に存在する場合、別のスペックディポを作成しようとするとエラーメッセージが出力されます。)
Note
リリース2011.1以降、スペックディポに保存されたフォームの最初の行はすべて以下のようなコメント行で、最近フォームを変更したユーザを示します。
# The form data belowwas edited by username
スペックディポを作成してバージョン化仕様を有効にすると、すべてのユーザ生成フォーム(クライアントワークスペース仕様、ジョブ、ブランチマッピングなど)は自動的にスペックディポにテキストファイルとしてアーカイブされます。スペックディポでのファイル名はサーバにより自動的に生成され、以下のPerforceシンタックスで表示されます。
//specdepotname/formtype/[objectname[suffix]]
一部のformtype(protect、triggers、typemapなどのフォーム)はそのサーバに固有であり、対応するobjectnameがありません。
スペックディポを作成する
//specという名前のスペックディポを作成するには、p4 depot
specと入力し、表示されるフォームに次のように入力します。
Depot: spec Type: spec Address: local Map: spec/... SpecMap: //spec/... Suffix: .p4s
Address:フィールドはスペックディポには適用されないため、無視されます。
Suffix:は任意選択ですが、スペックディポにあるオブジェクトにファイル拡張子を指定することで、P4Vなどのアプリケーションを使用するユーザの利便性が向上します。これはPerforce仕様で使われる拡張子と、各自が使用したいテキストエディタとを関連付けることができるためです。生成されるファイルのデフォルトの拡張子は.p4sです。
例えば、specという名前のスペックディポを作成し、デフォルトの拡張子.p4sを使用する場合、以下のコマンドを使用してjob000123に対する変更履歴を調べることができます。
p4 filelog //spec/job/job000123.p4s
またはP4Vを使用し、ワークステーション上でファイル拡張子.p4sと関連付けられている任意のエディタを使ってjob000123.p4sへの変更を確認することもできます。
//spec/...のデフォルト設定SpecMap:は、すべてのスペックがバージョン化対象であることを示します。
現在のフォームからスペックディポにデータを読み込む
スペックディポを作成したら、p4 admin
updatespecdepotコマンドでそこにデータを読み込むことができます。このコマンドを実行すると、Perforceサーバは保管フォーム(具体的には、client、depot、branch、label、typemap、group、user、jobの各フォーム)をスペックディポにアーカイブします。
現在のフォームをすべてアーカイブするには、-aフラグを以下のように使用します。
p4 admin updatespecdepot -a
特定のフォームタイプを持つスペックディポにデータを読み込むには(例えば、非常に大規模なサイトで一度に1つのテーブルだけを更新したい場合など)、コマンドラインで-sフラグを使用してフォームのtypeを指定します。例:
p4 admin updatespecdepot -s job
どちらの場合でも、まだアーカイブされていないフォームのみがスペックディポに追加されます。スペックディポの作成後はp4 admin updatespecdepotを一度実行するだけで済みます。
バージョン化されるスペックを制御する
デフォルトでは、すべてのスペック (//spec/...)がバージョン化されます。SpecMap:フィールドを使用して、ディポシンタックスで行を追加し、スペックディポ内のパスを含める(または除外する)ことにより、どのスペックがバージョン化されるかを制御できます。
例えば、プロテクションテーブルをバージョン化対象から除外するには、スペックディポのSpecMap:フィールドを次のように構成します。
SpecMap:
//spec/...
-//spec/protect/...
ビルドファームなどの環境では、一時的なクライアントワークスペースやラベルが数多く作成されるため、それらを除外するようにスペックディポを構成し、一方でクライアントワークスペースやラベルに対するその他の変更を保持することも可能です。例えば、スペックディポに次のようなスペックマッピングを構成します。
SpecMap:
//spec/...
-//spec/client/build_ws_*
-//spec/label/temp_label_*
この設定で、以降名前がbuild_ws_で始まるクライアントワークスペースへの変更は追跡せず、名前がtemp_label_で始まるラベルへの変更も追跡しません。
SpecMap:フィールドへの追加または変更は、スペックディポの今後の更新に対してのみ影響します。スペックディポへ既に格納済みのファイルには影響しません。
大規模なサイトと古いファイルシステム: spec.hashbuckets
この構成可能変数は、スペックディポ内のファイルがハッシュされるバケット(サブディレクトリ)の数を定義します。デフォルトでは、spec.hashbucketsは99です。スペックディポのオブジェクトに関連するディレクトリは99のサブディレクトリに割り当てられます。
ハッシュを無効にするには、次のようにspec.hashbucketsを0に設定します。
p4 configure set spec.hashbuckets=0
ハッシュを無効にすると、各スペックタイプのそれぞれのサブディレクトリに、オブジェクト一つにつき一つのサブ・サブディレクトリが作成されます。すべてのサブ・サブディレクトリは単一のサブディレクトリに格納されます。ハッシュを無効にすることで、ファイルシステムの制約により1つのディレクトリにあるサブディレクトリの最大数が限られる可能性があります(例えば、古いファイルシステムのext2、ext3、ufsでは32Kに制限されます)。
ディポを一覧表示する
現在のPerforceサーバが認識しているすべてのディポのリストはp4 depotsコマンドで表示することができます。
ディポを削除する
ディポを削除するには、p4 depot -d
depotnameコマンドを使います。
ディポを削除するには、事前にp4 obliterateを実行し、ディポ内のすべてのファイルを削除しておかなければなりません。
localディポおよびspecディポにおいて、p4
obliterateは関連するメタデータとともにバージョンファイルを削除します。remoteディポにおいて、p4 obliterateはローカルに保持しているクライアントおよびラベルの記録のみを消去します。リモートサーバ上のファイルとメタデータは、そのまま残ります。
p4 obliterateを実行する前、特にディポ内のすべてのファイルを削除するようなときには、ファイルを削除してディスク容量を再生するに記載される警告を読んで理解してください。
分散環境では、アンロードディポがエッジサーバごとに異なる内容を含んでいる場合があります。コミットサーバは、すべてのエッジサーバ上でアンロードディポが空であるかの検証を行わないため、コミットサーバからアンロードディポを削除するにはp4 depot -d -fを指定する必要があります。詳細については、『Perforceサーバ管理者ガイド: マルチサイト展開』を参照してください。
リモートディポと分散開発
リモートディポは、共有開発ではなく共用コードをサポートするように設計されています。別々のPerforceシステムを持つ独立した組織が、それぞれの環境で変更を反映することを可能にします。簡潔にまとめると、次のようになります。
-
「リモートディポ」とは、Perforceサーバ上に存在するディポであり、タイプが
remoteです。第2のPerforceサーバ上に存在し、タイプが「ローカル」のディポを参照するポインターとしての働きをします。 -
リモートディポのユーザは多くの場合、独立した組織間でソフトウェアの統合を担当しているビルドエンジニアか、もしくは提供資料の管理者です。
-
リモートディポのユーザとそこに常駐するリモートサーバの管理者に対して、利用できるファイルを管理します。ローカルサーバのユーザに対してではありません。
-
セキュリティの要求については、リモートディポへのアクセスを制限するを参照してください。
リモートディポはいつ使用するか
Perforceは大規模なネットワークの待ち時間に対処するように設計されており、本来、リモートサイトにクライアントワークスペースを持つユーザをサポートします。Perforceは、共同開発者の地理的な分散に関係なく、1台のサーバで共同開発プロジェクトをサポートできます。
共同開発プロジェクトを分割し、複数のPerforceシステムで行っても、スループットが改善されることはなく、通常は管理が複雑になるだけでしょう。サイトが分散型の開発に参加している場合には、通常は単一のPerforceサーバ上のディポ内にすべてのコードを置き、個々の開発サイトの頻繁にアクセスされるファイルをPerforceプロキシによってキャッシュするようにするほうがよいでしょう。Perforceの分散構成の設定と監視について詳しくは、『Perforceサーバ管理者ガイド: マルチサイト展開』を参照してください。
ただし、他の組織の成果物を定期的にインポートしたりエクスポートしたりするような場合には、コードドロップの手順を合理化するためにPerforceのリモートディポは利用価値があると言えます。
リモートディポはどのように動作するか
別のサーバのディポにあるファイルに対して、PerforceアプリケーションがどのようにユーザのデフォルトPerforceサーバにアクセスするかを、次の図に示します。
この例では、oak:1234のPerforceサーバにおける管理者は、pine:1818のリモートサーバからファイルを取得しようとしています。

開発者が個別にリモートディポからクライアントワークスペースへファイルを同期することは可能ですが、一般的にリソースの使い方が効率的ではありません。
組織におけるビルドや提供資料の管理者にとって、リモートディポからローカルディポの領域へファイルを反映することが、効率的なリモートディポの使い方と言えます。反映した後、開発者は、ローカルディポ内にある反映済みのファイルのコピーにアクセスすることができます。
リモートディポからのコードドロップを承諾するには、ローカルディポ内にリモートディポ内のファイルからのブランチを作成し、そのローカルブランチの中へリモートディポからの変更を反映します。この反映は、一方通行の操作となります。つまり、ローカルブランチで実施した変更をリモートディポへ反映し直すことはできません。自サイトのPerforce環境の中へ反映したファイルのコピーに対しては、自サイトの開発チームが責任を持ちます。ディポ上のファイルは、他のPerforce環境における開発チームの管理下に残ります。
リモートディポの制約
リモートディポは、単一組織での共同開発ではなく、組織間でのコード共用を容易にするものです。結果的に、リモートディポへのアクセスは一方通行の操作に制限され、リモートディポを使ってサーバのメタデータ(クライアントワークスペース、チェンジリスト、ラベルなどの情報)にアクセスすることはできません。
コードドロップのためにリモートディポを使用する
コードドロップを実現するには、2つの組織間に役割を持たせる必要があります。つまり、コードドロップを受領するサイトと、コードドロップを提供するサイトです。多くの場合、次の3点が設定されていなければなりません。
-
コードドロップを受領するサイトのPerforce管理者は、コードドロップを提供するサイトを参照するリモートディポを、自分のサイト内に構築しなければなりません。
これについてはリモートディポを定義するで説明されています。
-
コードドロップを提供するサイトのPerforce管理者は、受領側のサイトにあるリモートディポから、自分のサイトのPerforceサーバへのアクセスを許可するよう環境設定すべきです。
これについてはリモートディポへのアクセスを制限するで説明されています。
-
受領サイトの構成管理者または統合管理者は、その管理下において、リモートディポからローカルディポへファイルを反映しなければなりません。
これについてはコードドロップを受領するで説明されています。
リモートディポを定義する
新しいリモートディポを定義するには、以下を実行します。
-
p4 depot
depotnameでディポを作成します。 -
Type:をremoteに設定します。 -
Address:フィールドにリモートサーバの名前と接続待ちのポート番号を設定することによって、ローカルのPerforceサーバからリモートのPerforceサーバに接続できるようにします。リモートサーバのホストとポートを
Address:フィールドに設定する書式は、P4PORTを設定するのと同じ書式です。 -
リモートサーバの希望のネームスペースの箇所へ
Map:フィールドをマッピングするように設定します。リモートディポに対して、そのマッピングはリモートディポのネームスペースを相対参照するサブディレクトリを含みます。例えば、
//depot/outbound/...というマッピングは、リモートサーバ上にあるdepotという名前のディポにおけるoutboundサブディレクトリを指します。Map:フィールドはこのサブディレクトリを指す単一の行で構成され、ディポシンタックスで指定され、最後にはワイルドカード“...”を含んでいなければなりません。クライアントビューとマッピングについてよく知らない場合は、『P4ユーザーズガイド』を参照してください。Perforceのマッピング機能に関する一般的な情報が記載されています。
-
Suffix:フィールドはリモートディポには適用されないため、無視してください。
ローカルサイト内の誰かがリモートディポのファイルをアクセスする場合は、リモートディポの管理者が、リモートディポおよびMap:フィールドに指定されたディポ内のサブディレクトリへのMap:のアクセス権を、ユーザremoteに対して設定しなければなりません。
Example 4. リモートディポを定義する
ライザはあるプロジェクトに取り組んでおり、サードパーティ開発会社からのライブラリセットを、自分のサイトの開発者に対して提供しようとしています。そのサードパーティ開発会社はホストpineにPerforceサーバを設置していて、ポート1818で接続待ちをしています。ポリシにより、depotという名前のディポにあるoutboundというサブディレクトリに、彼らのライブラリのリリースを置くことが決まっています。
ライザは新しいディポを作成し、そのディポからコードドロップをアクセスできるようにします。彼女はこのディポをfrom-pineと名付け、p4 depot from-pineと入力し、次のようにフォームを埋めます。
Depot: from-pine Type: remote Address: pine:1818 Map: //depot/outbound/...
これでライザのPerforceサーバにfrom-pineというリモートディポが作成されます。このディポ(//from-pine)は、サブディレクトリoutbound下にあるサードパーティのdepotのネームスペースをマッピングします。
リモートディポへのアクセスを制限する
リモートディポは、remoteという仮想ユーザか、(設定されていれば)アクセス元サーバのp4dのサービスユーザによってアクセスされます。サービスユーザ(仮想ユーザremoteを含む)はPerforceのライセンスを消費しません。
Note
リリース2010.2のPerforceサーバは、古いPerforceサーバをremoteとして認証し、リリース2010.2以降のPerforceサーバをremote(サービスユーザが設定されていない場合)、またはサービスユーザ(設定されている場合)として認証します。
デフォルトでは、Perforceサーバ上のすべてのファイルがリモートからアクセス可能です。特定のサーバに対するリモートアクセスを制限または排除するには、p4 protectを使い、そのサーバ上でremoteのユーザ(またはリモートサイトのサービスユーザ)へのパーミッションを設定します。p4 protectのテーブルに次のようなパーミッション行を追加することによって、すべてのファイルおよびすべてのディポについて、ユーザremoteのアクセスを拒否することを推奨します。
list user remote * -//...
リモートディポはreadアクセス権でしか利用できないので、ユーザremote(またはサービスユーザ)に対してwriteまたはsuperのアクセス限を排除する必要はありません。
リリース2010.2時点で、ユーザremoteのアクセスを拒否することは慣例として推奨されます。パートナーサイトのPerforceサーバがサービスユーザを使用するように設定されている場合、それらのサービスユーザを使用して、サーバのどの部分をコードドロップで利用できるかをさらに制限することができます。
セキュリティ構成の例
コードドロップを受領するで説明された2つの組織を例に、それぞれの組織におけるセキュリティ構成の基本を以下に示します。
ローカルサイト(oak)において
-
すべてのユーザに対して、
//from-pineへのアクセスを拒否します。oakサイト開発者は、リモートディポの機構を介してpineサーバ上のファイルにアクセスする必要がありません。 -
統合またはビルド管理者に対して、
//from-pineへのreadアクセス権を許可します。oakサイトにおいてリモートディポ//from-pineへのアクセスを要求する唯一のユーザは、リモートディポからローカルディポへの反映を実行するユーザ(この例ではadm)です。oakの管理者は、p4 protectのテーブルに次の行を追加します。
list user * * -//from-pine/... read user adm * //from-pine/...
リモートサイト(pine)では、pine上にあるコードへのアクセスは、完全にpineのサーバ管理者の管理下にあります。少なくともこの管理者は、次のことをする必要があります。
-
あらかじめ、ユーザ
remoteに対して、すべてのIPアドレスからのすべてのディポに対するアクセスを拒否します。list user remote * -//...
この行をp4 protectテーブルに追加することは、システム管理者がリモートディポを使用するかどうかとは関係なく、あらゆるPerforce環境において手堅い運用方法です。
-
両方のサーバがリリース2010.2以降である場合、
oakサイトの管理者に連絡して、oakサイトのサービスユーザの名前を確認してください。この例では、
oakサイトのサービスユーザをservice-oakとします。oakサーバのユーザがpineというホストにあるリモートディポにアクセスすると、oakサーバはpineサーバをservice-oakという名前のユーザとして認証します。pineサイトの管理者として、以下のことを行う必要があります。 -
サイトに
service-oakというサービスユーザを作成します(サービスユーザを参照してください)。このユーザ名は受け取り側サイトのサービスユーザ名と一致する必要があります。 -
このユーザに強力なパスワードを割り当てます。
-
このパスワードを
oakの管理者に連絡します。oakサイトの管理者は以下のことを行う必要があります。 -
pineの管理者によって設定されたパスワードを使用して、ユーザ
service-oak用にpineの有効なチケットを取得します(つまり、pineサーバに対してp4 login service-oakを実行します)。 -
oakサーバのp4dプロセスからアクセス可能な場所にチケットを格納します。(例えば、P4TICKETSをチケットファイルの位置を示すように設定し、サーバのルートディレクトリ内の.p4ticketsファイルにチケットを格納します。) -
oakをpineのサービスユーザが操作できるように構成します。そのためには、oakのp4dプロセスを-u service-oakフラグにより開始するか、サーバに対しp4 configure set serviceUser=service-oakを設定します。 -
コードドロップの格納先となる
pineサーバの領域に対してのみ、remoteユーザ(またはoakサイトのサービスユーザ)のreadアクセス権を許可します。さらにアクセスを、コードドロップを受領することを認可されたPerforceサーバのIPアドレスから発信されたリクエストに制限します。この例では、提供されるコードドロップは
pineサーバ上の//depot/outbound/...に格納されます。oakのIPアドレスが192.168.41.2の場合、pineサイトのプロテクションテーブルは以下のようになります。
list user remote * -//... read user remote 192.168.41.2 //depot/outbound/...
-
両方のサイトがリリース2010.2以降であり、
oakサーバがservice-oakをサービスユーザとして使用するように設定されている場合、pineサイトのプロテクションテーブルは以下のようになります。list user remote * -//... list user service-oak * -//... read user service-oak 192.168.41.2 //depot/outbound/...
pineサイトのservice-oakユーザ用の有効なチケットを持つ、IPアドレスが192.168.41.2であるPerforceサーバに対してのみ、リモートディポ経由でのpineサーバへのアクセスが許可されており、//depot/outbound/...のみアクセス可能です。
コードドロップを受領する
2つのPerforce環境の間で提供資料やコードドロップのやりとりをするには以下を実行します。
-
pine:1818で作業する開発者は、外部提供するためのコードの内容を書き終えます。 -
pine:1818のビルド管理者またはリリース管理者は、コードドロップの外部提供を意図したpine:1818上の領域に、提供するコードをブランチします。この例では、リリースされるコードは//depot/outbound/...にブランチされます。 -
oak:1234のPerforce管理者は、oakサーバ上に//from-pineという名前のリモートディポを構築します。このリモートディポのMap:フィールドでは、oakサーバにおいてpine:1818の//depot/outbound配下を参照するための指定を行います。 -
リリース可能の通知を受けると、
oak:1234のビルド管理者またはリリース管理者は、リモートディポ//from-pine/...配下のファイルをローカルディポの適当な領域(//depot/codedrops/pineのような)に反映することによって、コードドロップを実施します。 -
oak:1234の開発者は、こうしてローカルの//depot/codedrops/pine配下に格納されたpineのコードを使用できるようになります。pineのコードに対してパッチが必要であるならば、oakの開発者は//depot/codedrops/pine配下にそのようなパッチを作成することができます。pineグループは、引き続きそのコードを管理します。
フェッチとプッシュを使った分散開発
次のセクションでは、分散型サイトの間でp4 fetchとp4 pushのコマンドを使用してコードを簡単に共有する方法を説明します。この機能は、リモートディポを使用したコードドロップに類似します。ただし、フェッチとプッシュではファイルに加えてファイル履歴も移動します。
以下のようなシナリオが挙げられます。
ゲーム会社のUkko Productionsは、スウェーデン、アルゼンチン、米国にオフィスを構えています。各サイトでそれぞれ異なるゲームコードの開発を担当しています。各サイトは、それぞれ「コンポーネント」と呼ばれるセクションを担当しています。社内のPerforceサーバ上のdevというPerforceディポのディレクトリで作業が行われています。devにはローカルでサブミットされた変更が含まれます。
例えばここで、スウェーデンのサイトではアルゼンチンと米国の開発者たちが使うウィジェットを開発しているものと仮定します。まずはじめにスウェーデンでは、コードをドロップしウィジェットコードをアルゼンチンと米国で使えるようにします。アルゼンチンと米国のサーバのドロップ先ディレクトリへp4 pushを使用します(下図の「1」を参照してください)。(または、アルゼンチンと米国の開発者がp4 fetchを使いスウェーデンのコードをドロップディレクトリへコピーすることもできます。)その後、アルゼンチンと米国の開発チームはp4 mergeを使い、スウェーデンのウィジェットコードを各自のdevディレクトリへマージすることができます(下図の「2」を参照してください)。これで、ウィジェットを各自の用途に合わせてカスタマイズできるようになりました。カスタマイズをスウェーデンの開発者と共有する必要もありません。
米国とアルゼンチンの開発者が部分的な変更をスウェーデンと共有したい場合は、p4 pushでスウェーデンのサーバ上の固有のドロップ場所(アルゼンチンと米国用に1つずつ)へ、このコードをコピーします。(下図の「3」を参照してください)。(または、スウェーデンがp4 fetchでコードを取得し、適切な場所にドロップすることもできます。)その後、スウェーデンの開発者はp4 mergeを使い、アルゼンチンと米国のコードをdevディレクトリへマージすることができます(下図の「4」を参照してください)。
以降このサイクルが繰り返されます。
このシナリオは下の図のように表すことができます。

次のセクションでは、このシナリオを実施するために必要なリモートの仕様の設定方法を説明します。
リモート仕様を構成する
p4 pushとp4 fetchのコマンドを正しく動作させるには、アルゼンチン、米国、スウェーデンの3つのサーバのリモート仕様をそれぞれ正しく設定する必要があります。リモート仕様は、ローカルサーバがフェッチまたはプッシュ可能なリモートサーバを指定します。また、フェッチまたはプッシュされるファイルを指定します。(リモートおよびリモート仕様に関する詳細については、「分散バージョニングでPerforceを使用する」の「リモートを理解する」を参照してください。
アルゼンチンの開発者はフェッチとプッシュをスウェーデンのサーバに対して行うため、そのサーバのリモート仕様は以下のようになります。
RemoteID: ServerSweden Address: ServerSweden:1666 DepotMap: //depot/code-dropA/... //depot/Sweden-dev/... //depot/Argentina-dev/... //depot/code-dropS/...
米国の開発者はフェッチとプッシュをスウェーデンのサーバに対して行うため、そのサーバのリモート仕様は以下のようになります。
RemoteID: ServerSweden Address: ServerSweden:1666 DepotMap: //depot/code-dropUSA/... //depot/Sweden-dev/... //depot/USA-dev/... //depot/code-dropS/...
スウェーディンの開発者はフェッチとプッシュをアルゼンチンのサーバに対して行うため、そのサーバのリモート仕様は以下のようになります。
RemoteID: ServerArgentina Address: ServerArgentina:1666 DepotMap: //depot/code-dropS/... //depot/Argentina-dev/... //depot/Sweden-dev/... //depot/code-dropA/...
スウェーディンの開発者はフェッチとプッシュを米国のサーバに対して行うため、そのサーバの2番目のリモート仕様は以下のようになります。
RemoteID: ServerUnitedStates Address: ServerUnitedStates:1666 DepotMap: //depot/code-dropS/... //depot/USA-dev/... //depot/Sweden-dev/... //depot/code-dropUSA/...
接続のない状態でのコードドロップ
Perforceサーバは、あるコマンドの組み合わせにより、サーバ間に接続がない状況でファイルとファイルに関連する変更履歴を移動する手段を提供します。p4 zipと対になるコマンドp4 unzipを使用することができます。
p4 zipは指定したファイルのリストと、これらのファイルを送信したチェンジリストを指定したzipファイルに書き込みます。このコマンドは、サーバから(サブセット1つからサーバ上のすべてのファイルまで)ディポパスをzipファイルにバンドルすることができます。チェンジリスト番号で、履歴上の変更を望む数だけ取得して、バンドルすることもできます。
その後、p4 unzipで1つまたは複数のPerforceサーバへzipファイルの内容を解凍することができます。
Unicode環境の構成と管理
以下のセクションは、PerforceサーバをUnicodeモードで実行することの利点と、このモードを有効にする方法を説明します。
Note
Unicodeモードへのサーバの変換は元に戻すことができません!Unicodeサーバを以前の状態に復元することはできません。
概要
PerforceサーバをUnicodeモードで実行することで、サーバ上でのUnicode表記から特定の要素を変換できるようになります。また、クライアントが使用する特定の文字セットをサーバに関連付けることができます。以下の要素の変換が可能です。
-
Unicode文字を含むファイル名やディレクトリ
-
Unicode文字を含むPerforce識別子(ユーザ名など)や仕様(チェンジリストの説明またはジョブ)
Unicode文字を含むテキスト形式ファイルの管理のみが必要であり、上記の機能が必要でない場合は、サーバをUnicodeモードで実行する必要はありません。そのような環境では、Unicode文字を含むテキスト形式ファイルにPerforceの
utf16ファイルタイプを割り当ててください。 -
unicodeファイルとメタデータこれらはユーザのマシンで設定されている文字セットに変換されます。また、PerforceサーバによりUnicodeファイルとメタデータに有効なUTF-8文字が使われていることが確認されます。
通常は、サーバをUnicodeモードに設定すると、サーバが実行されるプラットフォームによらず、各クライアントに適切なレンダリングが自動で構成されます。ただし、クライアントを設定する必要がある場合があります。以下のサブセクションでは、必要に応じてサーバとクライアントを設定する方法とトラブルシューティングのヒントをいくつか紹介します。
Note
Unicodeモードのサーバの場合、p4dのエラーとログ情報はすべてUTF8で記録されます。このログ情報を適切にレンダリングするためには、UTF8コンソールまたはエディタが必要です。
サーバをUnicode用に構成する
Unicodeサーバとそこにアクセスするワークステーションの設定方法は、今回初めてサーバを起動するか、あるいは既存のUnicodeではないサーバをUnicodeモードへ変換するかにより異なります。以下のセクションではそれぞれの使用例を説明します。
Note
Perforceサービスでは、ジョブの説明へのインデックス、ファイル名とビューマッピングの指定、クライアントワークスペースとラベルその他のオブジェクトの識別に使用される文字列の長さが制限されています。最も一般的な制限は2048バイトです。基本的なUnicode文字は3バイトを超えて拡張されないため、Unicodeモードのサーバでは、オブジェクト名およびビュー仕様の長さを682文字に制限することにより、どの名前でもPerforceの制限を超えないように設定することができます。
Unicode用に新規サーバを構成する
Unicode用に新規サーバを構成するには、次のコマンドでサーバを起動します。
p4d -xi -r server_root [other
options]
このコマンドは既存のすべてのメタデータが有効なUTF8であることを確かめた後、保護カウンターunicodeを設定して、サーバが現在Unicodeモードで実行していることを示します。サーバを停止し、再起動するとサーバにUnicodeモードが維持されます。一度サーバをこのモードに変更するとUnicodeではないモードに変更することはできなくなります。
クライアントがサーバに接続すると、サーバの設定の確認を試行し、P4_の変数を設定して、この設定を反映します。サーバがUnicodeモードではない場合、変数はport_CHARSETnoneに設定されます。サーバがUnicodeモードに設定されている場合、変数はautoに設定されます。同様に、クライアントによりP4CHARSETの変数がautoに設定されます。その後クライアントは環境を確認し、必要な文字セットを判断します。
変数P4_はport_CHARSET.p4enviroというファイルに保存されます。デフォルトで、このファイルはユーザのホームディレクトリに保存されます。ファイルの場所を変更するには、ユーザは変数P4ENVIROを望むパスに設定する必要があります。
Unicode用に既存のサーバを構成する
既存のサーバをUnicodeモードに変換するには、以下の手順を実行します。
-
p4 admin stopコマンドを発行してサーバを停止します。
-
“Perforceのサポート: バックアップとリカバリ”に記述されているとおりサーバチェックポイントを作成します。
-
サーバ(p4d)を起動し、
-xiフラグを指定することにより、サーバをUnicodeモードに変換します。p4d -xi -r
server_rootサーバは既存のメタデータに有効なUTF-8文字のみが含まれていることを検証した後、
unicodeという保護された構成可能変数を作成して設定します。このカウンタは次回の起動時にサーバをUnicodeモードで起動させるためのフラグとして使用されます。タデータを検証して構成可能変数を設定した後、p4dは終了し、次のメッセージが表示されます。Server switched to Unicode mode.
サーバがメタデータ内に無効な文字を検出した場合、次のようなエラーメッセージが表示されます。
Table db.job has 7 rows with invalid UTF8.
このようなエラーが発生した場合は、無効な文字の特定および修正の手順についてPerforceテクニカルサポートに問い合わせてください。
-
通常使用しているサーバルートおよびポートを指定して、p4dを再起動します。これでサーバはUnicodeモードで稼動します。
クライアントがサーバに接続すると、サーバの設定の確認を試行し、P4_の変数を設定して、この設定を反映します。サーバがUnicodeモードではない場合、変数はport_CHARSETnoneに設定されます。サーバがUnicodeモードに設定されている場合、変数はautoに設定されます。同様に、クライアントによりP4CHARSETの変数がautoに設定されます。その後クライアントは環境を確認し、必要な文字セットを判断します。
変数P4_のデフォルトの場所はオペレーティングシステムにより異なります。
port_CHARSET
-
UNIXまたはMacでは、変数
P4_はport_CHARSET.p4enviroというファイルに保存されます。デフォルトで、このファイルはユーザのホームディレクトリに保存されます。ファイルの場所を変更するには、ユーザは変数P4ENVIROを望むパスに設定する必要があります。 -
Windowsでは、変数
P4_はというファイルに保存されます。これをファイルに保存するには、p4 set P4ENVIROコマンドで、この値を保存するファイルのパスを指定します。port_CHARSET
サーバエラーメッセージをローカライズする
デフォルトでは、Perforceサーバの情報およびエラーのメッセージは英語で示されます。サーバメッセージはローカライズが可能です。最善の結果を得るには、Perforceテクニカルサポートにご連絡ください。ローカライズプロセスの概要を以下に示します。
Perforceサーバメッセージをローカライズするには
-
Perforceテクニカルサポートからメッセージファイルを入手します。
-
メッセージを目的の言語に翻訳して、メッセージファイルを編集します。各メッセージには2文字の言語コードが含まれます。言語コードを、
en(英語)から目的の言語を表すコードに変更します。主要なパラメータまたは名前付きのパラメータ(%depot%のようにパーセント記号や単一引用符の間に指定される)は一切翻訳しないでください。メッセージ内でのパラメータの表示される順序は、変更が可能です。原文の英語
@en@ 0 @db.message@ @en@ 822220833 @Depot '%depot%' unknown - use 'depot' to create it.@
ポルトガル語への正しい訳文(パラメータの順序の変更に注意)
@pt@ 0 @db.message@ @pt@ 822220833 @Depot '%depot' inexistente - use o comando 'depot' para criar-lo.@
目的の言語の指定には、2文字の言語コードであればどのようなものでも(「en」以外であれば)使用することができますが、通常であれば次のページで解説されるような標準的な慣例に従います。
http://www.w3schools.com/tags/ref_language_codes.asp
メッセージの多くはPerforceのコマンド名が使用されています。コマンド名であるか、説明の文であるか判断できることが求められます。例:
@Depot '%depot%' unknown - use 'depot' to create it.@
この例では、「depot」と「%depot%」は翻訳されるべきではありません。
-
次のコマンドを発行し、翻訳されたメッセージをサーバにロードします。
p4d -jr /
fullpath/message.txtこのコマンドはサーバルートに
db.messageファイルを作成します。このデータベースファイルはエラーメッセージの表示のためにPerforceサービスが使用します。Perforceプロキシも、このdb.messageファイルを使用します。詳細については、『Perforceサーバ管理者ガイド: マルチサイト展開』のP4Pのローカライズを参照してください。 -
Unicodeモードのサーバに対しては翻訳に使用される文字セットはUTF-8でなくてはなりません。このファイルには先頭バイト順マーク(BOM)は含まれるべきではありません。
サーバがUnicodeモードではない場合、翻訳ファイルはUTF-8である必要はありません。この場合、翻訳されたメッセージには複数の文字セットを複数回使用することができます。そのような効果は、言語コードのフィールドを文字セット名と関連させることで可能です。例えば、
@ru_koi8-r@はkoi8-rエンコードのロシア語を示し、@ru_iso8859-5@はISQエンコードのロシア語を示すことができます。 -
翻訳されたメッセージファイルは、次のジャーナルリカバリコマンドでp4dサーバに読み込むことができます。
p4d -r
server_root-jrtranslated_message_file
ローカライズされたメッセージを表示するには、ユーザ側のワークステーション上でP4LANGUAGE環境変数を、翻訳されたメッセージファイル内のメッセージに割り当てた言語コードに設定します。例えば、メッセージがポルトガル語で返されるようにするには、P4LANGUAGEをptに設定します。
ローカライズされたメッセージをP4Vを使用して表示するには、LANG環境変数をメッセージファイルで使用する言語コードに設定しなければなりません。
クライアントをUnicode用に構成する
サーバをUnicodeモードで稼働するように設定するとき、クライアントにより現在の環境が検証され、使用する文字セットが特定されます。通常であれば、適切な翻訳を取得するために追加の操作は必要ありません。例えば、UNIXのクライアントは変数LANGまたはLOCALEを検証し、適切な文字セットが特定されます。ただし、以下のような場合にはクライアントにより選択された文字セットをオーバーライドしなければなりません。
-
自動的に選択された設定のせいで翻訳の質が低下している。
詳細については、Unicode環境におけるユーザワークステーションのトラブルシューティングを参照してください。
-
別々の(クライアント)ワークスペースを使用して、各々に別々の文字セットを使用する必要がある。この場合、各クライアントに別々の
P4CHARSETの値を設定する必要があります。 -
チェックアウトしたファイルが、バイト順が問題になるアプリケーションによってアクセスされる。
詳細については、UTF文字セットとバイト順マーク(BOM)を参照してください。
-
P4CHARSETをutf16またはutf32に設定する必要がある。詳細については、サーバ出力の翻訳を制御するを参照してください。
-
Unicode環境の扱い方が異なるPerforceクライアントアプリケーションでファイルがチェックアウトされる。
詳細については、その他のPerforceクライアントアプリケーションを使用するを参照してください。
上記のいずれの場合も、明示的にP4CHARSETを適切な値に設定するか、その他の操作を行うことが必要です。P4CHARSETの可能な値を取得するには、次のコマンドを使用します。
p4 help P4CHARSET
Warning
ファイルの同期に使用したP4CHARSET以外でファイルをサブミットしないでください。ファイルが誤って翻訳される可能性があります。つまり、ファイルをチェックアウトしている間はP4CHARSETの値を変更してはいけません。
UTF文字セットとバイト順マーク(BOM)
バイト順マーク(BOM)はUTFファイルで使用され、これによりマルチバイト文字の格納順序が指定され、ファイルの内容がUnicodeであることが識別されます。すべての拡張文字のファイル形式においてBOMが使用されるわけではありません。
ファイルの同期やサブミットの際にそのようなファイルがPerforceサービスによって正しく変換されるように、P4CHARSETをテキストエディタやIDEなどそれらにアクセスするアプリケーションによってワークステーションで使用される形式に対応した文字セットに設定しなければなりません。通常これらの形式は、[]メニューオプションを使用してファイルを保存する際に一覧表示されます。
以下の表に、UTFファイルのバイトオーダー特性を指定するためのP4CHARSETの有効な設定値を示します。
|
クライアントのUnicodeフォーマット |
BOMの有無 |
ビッグエンディアンかリトルエンディアンか |
P4CHARSETの設定 |
備考 |
|---|---|---|---|---|
|
UTF-8 |
なし |
(対象外) |
|
PERFORCEサーバのUTF-8検証を抑止 |
|
あり |
|
|||
|
なし |
|
|||
|
あり |
|
|||
|
UTF-16 |
あり |
クライアント単位 |
|
クライアントプラットフォームのバイト順に従ってBOMと同期 |
|
あり |
リトル |
|
WindowsのUnicodeファイルに最適な選択肢 |
|
|
あり |
ビッグ |
|
||
|
なし |
クライアント単位 |
|
||
|
なし |
リトル |
|
||
|
なし |
ビッグ |
|
||
|
UTF-32 |
あり |
クライアント単位 |
|
クライアントプラットフォームのバイト順に従ってBOMと同期 |
|
あり |
リトル |
|
||
|
あり |
ビッグ |
|
||
|
なし |
クライアント単位 |
|
||
|
なし |
リトル |
|
||
|
なし |
ビッグ |
|
P4CHARSETをUTF-8の設定値に設定すると、Perforceサーバはテキストファイルの同期またはサブミットの際にそれらを変換しません。Perforceはそのようなファイルに有効なUTF-8データが含まれているかを検証します。
サーバ出力の翻訳を制御する
P4CHARSETをutf16またはutf32の設定値に設定する場合、P4COMMANDCHARSETをサーバ出力を表示させたいutf16またはutf32以外の文字セットに設定する必要があります。「サーバ出力」には、情報やエラーのメッセージ、差分出力、およびレポート作成コマンドにより返される情報が含まれます。
コマンド単位にP4COMMANDCHARSETを指定するには、-Qフラグを使用します。例えば、winansiコードページを使って翻訳されるようにディポ内のすべてのファイル名を表示するには、次のコマンドを実行します。
p4 -Q winansi files //...
その他のPerforceクライアントアプリケーションを使用する
その他のPerforceクライアントアプリケーションを使用している場合、それらがどのようにUnicode環境を扱うかに注意してください。
-
P4V(Perforce Visual Client): Unicodeモードのサーバに初めて接続する際に、文字エンコードを選択するよう要求されます。それ以降は、P4Vは接続に関連するユーザの選択を保持します。またP4VにはCHARSETのグローバルのデフォルト設定が用意されています。これを設定した場合、文字セットを指定するよう要求される代わりにデフォルト設定が使用されます。
-
P4Eclipseは、Unicodeモードのサーバへの接続時に文字セットの指定を要求します。
-
P4Web: P4Webの起動時、コマンドラインで
-Cフラグを使用して文字エンコードを指定することができます。P4Webは、Unicodeモードのサーバにコマンドを送る際にこのオプションを使用します。このアプローチは、P4Webのインスタンスが単一の文字エンコードを扱うことができ、ブラウザマシンに互換性のあるフォントがインストールされている必要があることを意味します。 -
P4Merge: P4Mergeにより使用される文字エンコードを構成するには、P4Mergeのメニューオプションを選択します。P4Vから起動した場合、P4Mergeはプリファレンスで設定されたものではなく、P4Vの
P4CHARSETを使用します。 -
IDE SCCプラグイン: Unicodeモードのサーバに初めて接続する際に、文字エンコードの選択が要求されます。それ以降は、プラグインは接続に関連するユーザの選択を保持します。
-
P4GTとP4EXPは環境設定を使用します。Unicodeモードのサーバで使用すると失敗します。
Unicode環境におけるユーザワークステーションのトラブルシューティング
ファイルの破損を防止するため、ワークステーションを正しく構成することは不可欠です。次のセクションでは、一般的な問題について説明し、解決方法を説明します。
-
「Cannot Translate」のエラーメッセージ
ワークステーションが、Perforceサーバによってワークステーションに送られる文字を含まない文字セットで構成されていると、このメッセージが表示されます。ワークステーションはマッピングされていない文字を表示することはできません。例えば、
P4CHARSETがshiftjisに設定されていて、シフトJISに対応する文字がないEUC文字セットの文字を使用した名前を持つファイルがディポにある場合に、p4 filesコマンドを発行してファイルを一覧表示すると「Cannot Translate」のエラーメッセージが表示されます。正しく変換が行われるように、Perforceユーザ仕様、クライアント仕様、ジョブ、またはファイル名にはマッピング不能な文字を使用しないでください。
-
ファイル内容の表示の異常
拡張文字のテキストファイルを表示しようとして、奇妙なテキストが表示される場合は、ワークステーションにファイル内の文字を表示するために必要なフォントがない可能性があります。この問題によって多くの場合、文字の代わりに疑問符または四角形が表示されます。この問題を解決するには、必要なフォントをインストールします。
P4Vの設定を構成する
すべてのサイトやすべてのユーザがP4V(Perforce Visual Client)の完全な機能セットを必要とするとは限りません。管理者は、p4 propertyコマンドを使用してサイト全体、グループ単位、またはユーザ単位で、P4Vで使用できる機能を制御することができます。各種プロパティはMicrosoft .docxファイルのパフォーマンス、機能、リッチ比較に関連します。サーバレベルで設定されたパフォーマンスと機能関連のプロパティは、ローカルのP4V設定をオーバーライドします。
パフォーマンス関連のプロパティを構成する
ユーザが新しいPerforceサービスに接続すると、パフォーマンス関連のプロパティはそのユーザが最後に接続していたPerforceサービスからリロードされます。
|
プロパティ |
意味 |
|---|---|
|
|
任意の時点にフェッチされるチェンジリスト、ジョブ、ブランチマッピングまたはラベルの数 |
|
|
ロールバック操作中の「作業状態」の呼び出しでチェックするファイルの数を制限デフォルト値は1000です。ロールバックするファイルの数が設定された値を上回る場合、「作業状態」のチェックが実行されないことがポップアップで通知されます。また、ユーザがこの操作を完了するかどうか確認されます。 |
|
|
チェンジリストごとに表示される最大ファイル数 |
|
|
チェンジリストごとに表示される最大ファイル数 |
|
|
プレビューするファイルの最大サイズ(単位: キロバイト) |
|
|
表示を更新する間隔(単位: 分) |
機能関連のプロパティを構成する
以下プロパティを使用して、P4Vの機能を有効または無効にすることができます。これらのプロパティはP4Vの起動時に、ユーザが最初に接続するサービスから一度だけ読み込まれます。これらのプロパティをOffに設定して非アクティブにされた機能はP4Vで使用不可となり、P4Vのプリファレンスのページに表示されません。
|
プロパティ |
意味 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
例えば、Perforceの欠陥追跡機能を使用していないサイトの管理者は、P4Vから次のコマンドを実行してジョブへのアクセスを無効にできます。
p4 property -a -n P4V.Features.Jobs -v Off
新しいプロパティが追加/更新され(-a)、その名前(-n)はP4V.Features.Jobsであり、Offという値(-v)が割り当てられます。
組織内のあるユーザグループがP4Vのジョブ機能を使用する必要がある場合、次のコマンドを実行して、そのユーザに対して選択的に(集中管理で)その機能を有効に再設定することができます。
p4 property -a -n P4V.Features.Jobs -v On -g jobusers
P4Vのジョブ機能の値をOnに設定してP4Vのジョブ機能が再び有効になるのは、jobusersグループのユーザの場合に限られます。
.docxの差分を有効にする
P4.Combine.URLのプロパティを使用して、P4MergeにおけるMicrosoft Word .docxファイルのリッチ比較を有効にすることができます。この機能を使用するには、共通のデプロイメントの一部としてP4Combineを展開する必要があります。
機能を有効にするには、P4.Combine.URLのサーバプロパティをP4Combine Web ServiceのURLに設定します。これで、P4Vは.docxファイルのリッチ比較をP4Mergeウィンドウに表示するようになります。テキスト、画像、形式、スタイル、表、ヘッダー、フッター、その他のオブジェクトの差分がHTML5で表示されます。