PerforceとWindows

この章では、Windows上でPerforceサーバのセットアップおよび保守を行う管理者向けの重要な情報を説明します。

Note

特に別記のない限り、この章の内容はWindows XP、Vista、および7にも同様に適用されます。

Perforceインストーラを使用する

Perforceのインストーラプログラム、perforce.exeにより、Perforceサーバ、Perforceプロキシ、またはPerforceコマンドラインクライアント各々のインストールまたはアップグレードを行うことができます。

P4Vなど、その他のPerforceアプリケーションには別のインストーラが用意されています。

管理者の権限を持っている場合は、通常、Perforceをサービスとしてインストールするのが最善の選択です。管理者の権限を持っていない場合は、サーバとしてインストールします。

アップグレードにおける留意点

Perforceインストーラは、97.3より前のバージョンも含め、あらゆるタイプのPerforceサーバ(またはサービス)を自動的にアップグレードします。このアップグレードはきわめて安全な方法で実行されます。途中で何らかの処理がうまく行えなかった場合、インストーラはアップグレードを停止します。そのような場合、従来のサーバ(またはサービス)を引き続き使用することができます。

スクリプト化された展開と自動インストール

Perforceインストーラはスクリプト化されたインストールをサポートしています。これにより、Perforceを多数のデスクトップに迅速に展開することができます。

スクリプトによるインストールは、スクリプト可能なバージョンのPerforceインストーラに付属している設定ファイルで制御します。このファイルを編集すると、Perforceの環境変数(P4PORTなど)の事前設定、サイトで使用するPerforceアプリケーションの自動選択などを行うことができます。

Perforceの展開を自動化する方法については、Perforceナレッジベースの「Automated Deployment of Perforce」を参照してください。

http://answers.perforce.com/articles/KB_Article/Automated-Deployment-of-Perforce

Perforceテクニカルサポートのスタッフは、Perforceの自動展開についてあらゆるご質問、お問い合わせにお答えすることができます。

WindowsサービスとWindowsサーバ

Windowsサーバとしてタスクを実行するには、ユーザアカウントでのログインが必要です。ユーザアカウントにログインしないと、ユーザのStartupフォルダのショートカットを実行することができません。一方、Windowsサービスはマシン起動時に自動的に開始し、ユーザがそのマシンにログインしているかどうかに関係なく実行されます。

ここでいうPerforceサービスp4dは、大半の文書で「データベースを管理し、Perforceのアプリケーションからの要求に応じるバックエンドのプロセス」を指す言葉として使われています。Windowsでは、このような表現では不明確かも知れません。このプロセスは、サービス(スレッドとして動作するp4s.exe)としても、サーバ(通常のプロセスとして動作するp4d.exe)としても実行されることがあるからです。Windowsの管理者の観点からは、これらの違いは重要です。そのためこの章では、そのような用語を厳密に区別して使用します。

Perforceサービス(p4s.exe)とPerforceサーバ(p4d.exe)の2つの実行ファイルはお互いのコピーです。ファイル名が違うだけで、この2つは全く同じものです。実行時、これらは起動に使用した名前の最初の3文字(p4sまたはp4d)で動作を決定します。例えば、p4smyserver.exeという名前のコピーを起動すればサービスとして、p4dmyservice.exeという名前のコピーを起動すればサーバとして起動します。

デフォルトでは、インストーラはPerforceをWindowsサービスとして構成します。

Perforceサービスを開始または停止する

Perforceがサービスとしてインストールされていれば、管理者の権限を持つユーザは[コントロール パネル][サービス]アプレットを用いてそれを起動、停止することができます。また、コマンドラインの次のコマンドでサービスを停止することもできます。

p4 admin stop

Perforceサーバを開始または停止する

サーバ実行ファイルp4d.exeは、通常はP4ROOTのディレクトリにあります。サーバを起動するには、まず現在のP4ROOTP4PORTP4LOGP4JOURNALの設定が正しいことを確認してから、%P4ROOT%\p4dを実行します。

P4ROOTP4PORTP4LOG、またはP4JOURNALの設定とは異なる設定でサーバを起動するには、p4dコマンドラインのフラグを使用します。例:

c:\test\p4d -r c:\test -p 1999 -L c:\test\log -J c:\test\journal

とすると、ルートディレクトリc:\test、接続待ちポート1999、エラーログc:\test\log、ジャーナルファイルc:\test\journalという設定でPerforceサーバプロセスが起動します。p4dコマンドラインのフラグでは大文字と小文字が区別されます。

Perforceサーバを停止するには、次のコマンドを使用します。

p4 admin stop

ネットワークドライブにPerforceサービスをインストールする

デフォルトでは、Perforceサービスは、ローカルSystemアカウントのもとで動作します。ローカルSystemアカウントには、ネットワークへのアクセス権がないので、メタデータとディポファイルがネットワークドライブに保存されている場合、Perforceサービスを機能させるには、正規のユーザIDとパスワードが必要です。

ネットワークドライブにサーバルートをインストールする場合、Perforceインストーラ(perforce.exe)はインストールの時点で有効なユーザIDとパスワードの組み合わせを要求します。ユーザは管理者の権限を持っていなければなりません。(サービスは、Systemではなく、このユーザの名前のもとに実行されます)

ネットワークドライブをサーバルートとして使用した場合でもPerforceサービスは信頼できる動作をしますが、ネットワークトラフィックの増加とファイルへのアクセス速度の低下により、パフォーマンスは著しく低下します。このため、ディポファイルとPerforceデータベースは、Perforceサービスが実行されているマシンのローカルドライブに配置することをお勧めします。

Windows環境下での複数のPerforceサービスの使用

デフォルトでは、Windows用のPerforceインストーラは単一のPerforceサーバを単一のサービスとしてインストールします。同一のマシン上で複数のPerforceシステムを実行させたい場合(例えば、1つを開発用として、1つをテスト用として実行する)には、コマンドラインから手動でPerforceサーバを起動するか、Perforceに付属のユーティリティsvcinst.exeで追加のPerforceサービスを設定することができます。

Warning

ユーザライセンスを追加購入せずにサポートできるユーザ数を増やす目的で複数のサービスをセットアップすることは、Perforceエンドユーザーライセンス契約の合意条項に違反します。

Perforceの構成を決定する際に環境変数が優先されることを理解していると、同一マシン上で複数のPerforceサービスを構成するときに役に立ちます。操作を始める前に、Windows環境下での構成パラメータの優先順位を読んで理解してください。

2つ目のPerforceサービスをセットアップするには以下を実行します。

  1. Perforceサービス用に新たにディレクトリを作成します。

  2. サーバ実行ファイル、サービス実行ファイル、およびライセンスファイルを作成したディレクトリにコピーします。

  3. 下記の例のように、svcinst.exeユーティリティを用いて新しいPerforceサービスを生成します。(svcinst.exeユーティリティはPerforceインストーラに付属しており、Perforceサーバルートに格納されています。)

  4. 環境変数を設定し、新しいサービスを開始します。

最初のPerforceサービスはPerforceインストーラを用いてインストールすることをお勧めします。この最初のサービスはPerforceと呼ばれ、そのサーバルートディレクトリに、当該マシン上に生成する別のPerforceサービスによって必要とされるファイルが格納されています。

Example 29. 2つ目のPerforceサービスを追加する

2つ目のPerforceサービスを、C:\p4root2にルートを置いて、Perforce2というサービス名で作成するものとします。svcinst実行ファイルは、C:\perforceにインストールした最初のPerforceシステムのサーバルートにあります。

p4d.exe実行ファイルがリリース99.1/10994以降であることを確認します。

p4d -V

(99.1/10994より前のリリースを使用している場合には、以下の手順を実行する前に、まずhttp://www.perforce.comからそれ以降のリリースをダウンロードし、サーバをアップグレードしなければなりません。)

次のコマンドで新しいサービス用のP4ROOTディレクトリを生成します。

mkdir c:\p4root2

サーバ実行ファイル、p4d.exe(サーバ)とp4s.exe(サービス)の両方、およびライセンスファイルを上記の新ディレクトリにコピーします。


copy c:\perforce\p4d.exe c:\p4root2 copy c:\perforce\p4d.exe c:\p4root2\p4s.exe copy c:\perforce\license c:\p4root2\license

次のようにPerforceのsvcinst.exe(サービスインストーラ)を使用してPerforce2サービスを作成します。

svcinst create -n Perforce2 -e c:\p4root2\p4s.exe -a

Perforce2サービスを生成したら、Perforce2サービス用のサービスパラメータを設定します。


p4 set -S Perforce2 P4ROOT=c:\p4root2 p4 set -S Perforce2 P4PORT=1667 p4 set -S Perforce2 P4LOG=log2 p4 set -S Perforce2 P4JOURNAL=journal2

最後に、次のようにPerforceサービスインストーラを使用してPerforce2サービスを開始します。

svcinst start -n Perforce2.

これで2つ目のサービスが稼動状態になりました。次回のリブートで、1つ目と2つ目の両方のサービスが自動的に開始します。

Windows環境下での構成パラメータの優先順位

Windowsでは、Perforce構成パラメータをさまざまな形で設定することができます。Perforceアプリケーション(例えばp4やp4v)、またはPerforceサーバプログラム(p4d)が起動されると、以下の優先順位にしたがって構成パラメータが読み込まれます。

  1. PerforceアプリケーションまたはPerforceサーバ(p4d)の場合、コマンドラインのフラグ(最優先)。

  2. Perforceサーバ(p4d)の場合、p4 configureによって設定される継続的な構成可能変数。

  3. P4CONFIGが設定されている場合、P4CONFIGファイル。

  4. ユーザ環境変数。

  5. システム環境変数。

  6. p4 setによって設定されるWindowsユーザレジストリ(またはOS Xのユーザプリファレンス)。

  7. p4 set -sによって設定されるWindowsシステムレジストリ(またはOS Xのシステムプリファレンス)。

Perforceサービス(p4s)が起動されると、以下の優先順位にしたがって構成パラメータが読み込まれます。

  1. p4 configureによって設定される継続的な構成可能変数(最優先)。

  2. p4 set -S servicenameによって設定されるWindowsサービスパラメータ。

  3. システム環境変数。

  4. p4 set -sによって設定されるWindowsシステムレジストリ(またはOS Xのユーザプリファレンス)。

ユーザ環境変数は、以下のいずれかの方法によって設定します。

  • MS-DOSのsetコマンド

  • AUTOEXEC.BATファイル

  • コントロールパネルのシステム プロパティダイアログボックス内のユーザ環境変数のタブ

システム環境変数は、以下のいずれかの方法によって設定します。

  • コントロールパネルのシステム プロパティダイアログボックス内のシステム環境変数のタブ

Windowsに関連した動作不安定を解消する

PerforceがWindows上で問題なく動作している大規模なサイトは、数多くあります。その一方で、Perforceサービスまたはサーバの動作が不安定なサイトもあります。サーバが不可解に停止したり、サービスが開始しなかったり、極端な場合は、システムがクラッシュしたりすることもあります。これは大半の場合、マシンに加えられた変更か、オペレーティングシステムの欠陥が原因になっています。

PerforceのエラーがすべてOSに起因するわけではありませんが、システムがクラッシュする、エラーログの記録やWindowsによるサーバクラッシュの表示もないままPerforceサーバが終了してしまう、Perforceサービスが正常に開始しないというような現象は、OSの欠陥を示すものと考えられます。

サービスパックのインストールの後に他のソフトウェアをインストールすると、サービスパックによってインストールされた重要なファイルが上書きされることがあります。そのような場合は、最後にインストールしたサービスパックを再インストールすることにより問題が解消することがしばしばあります。サービスパックのインストール後に別のアプリケーションをインストールしたらサーバの動作が不安定になったと思われる場合は、サービスパックの再インストールを検討してください。

P4EDITOR、P4DIFF使用上の問題点

Windowsユーザにとっては、P4EDITORまたはP4DIFF環境変数を使用している場合、Perforceコマンドラインクライアント(p4.exe)を使用しにくいことがあるかもしれません。

これは、ユーザ指定のエディタや差分ユーティリティなどのプログラムの起動にPerforceアプリケーションがDOSシェル(cmd.exe)を使用する場合があるためです。DOSシェルから実行されたWindowsコマンド(例えば、notepad.exeのようなGUIベースのエディタ)において、コマンドの実行完了を待たずにシェルが終了してしまうことがあります。このような場合に、PerforceクライアントはWindowsコマンドの実行が完了したと誤って判断して処理を進めようとします。その結果、Windowsのエディタや差分ユーティリティが使用していた一時ファイルが削除されてしまうことがあります。結果として、一時ファイルが見つからないというエラーメッセージが表示されたり、その他の異常な現象が発生することになります。

この問題は、以下の2つの方法で回避することができます。

  • 環境変数SHELLの設定を解除します。Windowsで動作しているPerforceアプリケーションは、SHELLが設定されているときのみcmd.exeを使用します。それ以外の場合は、spawn()を起動して、Windowsプログラムの完了を待ちます。

  • P4EDITORまたはP4DIFFの変数の名前に、以下のコマンドが入っているバッチファイルの名前を指定します。

    start /wait program %1 %2

    ここで、programは起動したいエディタまたは差分ユーティリティの名前です。/waitフラグの指定により、システムはエディタまたは差分ユーティリティの終了を待つようになり、Perforceアプリケーションは正常に動作することができます。

    Windows用エディタの中には、待機の指示があっても正常に動作しないものがあります(Wordpadが代表例)。現在、そのようなプログラムへの対策はありません。