VPSでPerforceサーバーを立てて、UE4と連携


使用環境
ConoHa VPSサービス
月額:900円プラン
メモリ:1GB
CPU:2Core
SSD:50GB
OS:CentOS Linux release 8.0(Core)

経緯
大学の授業でチームを組み(チームといっても二人だが)、ゲーム開発をすることになった。相方はデザイナで、自分がプログラマ、レベルデザイナ的な役割を考えている。UnrealEngine4(UE4)を利用して開発を進めることになったが、プロジェクトの共有ができないことに気づき、共同開発のためと、バージョン管理のためにもPerforceサーバーを準備しようと考えた。

Perforceを選んだ理由としては、ライセンス料が5名以下のユーザーの場合無料というのと、なんだか評判が良さげだったから。Twitterでゲーム開発者の方から、PerforceとPlasticを進められたのもある。(正直Subversionと悩んだ。Gitは好きだが、UE4との連携は容量制限もあり厳しいらしい。 <---追記 容量制限があるのはGithubでした。自分でサーバー立てるなら大丈夫。しかし、現在はUE4とGitの連携機能はベータ版らしい。)

ConoHaを選んだ理由としては、月額制であることと、一か月に満たない利用の場合は、利用した時間分のみで、安く済むことが大きい。
また、さくらインターネットは、利用したことがあったので、大変悩んだが、利用したことがないConoHaも利用してみたいと思った。

VPSを初めての利用者向けの漫画版のチュートリアルが両サービスともにあるが、さくらインターネットはステップアップがしやすいような内容となっており、少し難しくもあるが、充実していた。ConoHaは完全に初心者向けで、メジャーなコマンドの説明も記載されていた。また、その他の学習用記事については、さくらインターネットは数が膨大で、かつ、イベント情報も載っている。ただし、特定の目的がなければ、自分に合ったレベルの記事を見つけるのは難しそうであった。ConoHaは、さくらインターネットほどは多くないが、整然としていて、初心者にとっては順番に沿って記事を読んでいけば、簡単にステップアップできるようになっていた。

記事の方針
作業をすべて書く

CentOSのセットアップ

login:root
Password:(サーバー追加時に設定したパスワード)

// バージョン確認
# cat /etc/redhat-release

//アップデート
# yum update

//一般ユーザー作成とパスワード設定
# adduser (username)
# passwd (username)

// Ctrl+Dでログアウトし、作成したユーザーでログインする
//その後、rootに切り替え
$ su -
Password:(rootのパスワード)

// エディタをインストール(vimが使えるならそれでいい)
# yum install emacs -y

// sudoができるようにする。
# env EDITOR=emacs visudo
/*
(username)  ALL=(ALL)を追加する。
作業が終わったらCtrl+x-Ctrl+sで保存し、Ctrl+x-Ctrl+cでemacsから抜ける。
*/

// rootでログインできないようにする
# emacs /etc/ssh/sshd_config
/*
PermitRootLogin yesをPermitRootLoginに変更する。
Port 22 は、ssh接続で利用するポート番号の設定。好みによってウェルノウンポート以外に変更してもよい。仕方は22の部分を変更。
作業が終わったらCtrl+x-Ctrl+sで保存し、Ctrl+x-Ctrl+cでemacsから抜ける。
*/

//もしsshdのポート番号を変更したなら、firewallのsshの設定も変更しなければならない
// デフォルトのファイルをコピー。/usr/lib/firewalldの中身はデフォルトの設定なので変更はしない。
# cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/
// コピー先を開き、ポート番号を22から変更先のポート番号に変更
# emacs /etc/firewalld/services/ssh.xml
// ファイアウォールの変更を適用
# firewall-cmd --reload

// sshdを再起動
# systemctl restart sshd.service

// IPアドレスを確認しておく
// ログアウトし、公開鍵認証のための設定を行う。
# ifconfig

ここからは、クライアント側の作業

// sshクライアントソフトを利用。pederosaやteraterm。WindowsならWSL、macならiTermなどでもいい。

$ cd
$ mkdir .ssh
$ cd .ssh
// sshに用いるカギを生成(2048bitがデフォだと思うから-bいらないかも)
$ ssh-keygen -f (ファイル名) -t rsa -b 2048
// サーバーに公開鍵を転送(ファイル名の後ろにpubがついているもの)
// もし、sshのポート番号を変更したなら、-pオプションを利用する。
$ ssh-copy-id -p (ポート番号) -i (ファイル名).pub (username)@(IPアドレス)
// configファイルを作成
$ emacs config
/*
Host (好きなサーバーの名前)
HostName (IPアドレス)
User (username)
IdentityFile ~/.ssh/(秘密鍵ファイル名->pubが付いてないほう)
Port (ポート番号を変更した人は、ポート番号を記載)
*/
(ssh接続を試す)
$ ssh (好きなサーバーの名前)

// 無事ログイン出来たら
// sshでパスワード認証をできなくする
$ sudo emacs /etc/ssh/sshd_config
/*
該当箇所を以下のように変更
PasswordAuthentication  no
ChallengeResponseAuthentication  no
UsePAM  yes
*/

Perforceのセットアップ

サーバーのセットアップ

// 公開鍵をインポート。
$ sudo rpm --import https://package.perforce.com/perforce.pubkey
// perforceのリポジトリを設定
$ sudo emacs /etc/yum.repos.d/perforce.repo
/*
以下をファイルに記述
[perforce]
name=Perforce
baseurl=http://package.perforce.com/yum/rhel/7/x86_64
enabled=1
gpgcheck=1
*/

//インストール
$ sudo yum install helix-p4d

// インタラクティブにPerforceサーバーを設定できるシェルスクリプトを実行
$ sudo /opt/perforce/sbin/configure-helix-p4d.sh
/*
(注意) 実行すると、いくつか質問されるが、基本的にデフォルトを選んでよいが、日本語を利用できるようにしたい人はunicode-modeをy(yes)と答える。また、スーパーユーザーのパスワードももちろん考えて入力する。
*/

/*
これで、サーバーの設定はいったん終わる。
しかし、自分はこの後、クライアント側からサーバーに接続しようとしたら、エラーが出た。
原因はファイアウォールで止められていたことにあった。
もし、同様のエラーが出るようだったら、次のことを試してみるといいかも。
*/

// ポートを開く
$ sudo firewall-cmd  --zone=public --add-port=1666/tcp --permanent
// 変更を反映させる
$ sudo firewall-cmd --reload
// 確認
$ sudo firewall-cmd --list-all

クライアントのセットアップ

  1. Helix Visual Client (P4V)からクライアントソフトをインストールする。

  2. P4Adminを開くと、Open Connectionと書かれたダイアログが出る。
    Server欄に、ssl:(サーバーのIPアドレス):1666
    User欄に、先ほどサーバー側で作ったユーザー名を入れる。(デフォルトで作成したなら、superというユーザーができてる)

  3. もしかしたら、Unicodeの設定にしている人は、ここで、サーバー接続時のエンコーディング方法を聞かれると思うので、その際はUTF-8にする。ちなみに、次のメインウィンドウのEdit->Preferenceから後からでも変更できる。

  4. ソフトのメインウィンドウが開くので、Homeタブの中のCreate new userから新しいユーザーを作成する。作成したら、今度はPermissionsタブに移動し、作成したユーザーの権限を設定する。設定するには、タブ内の表テーブルで表示されている部分から、superを参考に、作成すれば良い。Access Levelに関しては、write,admin程度のユーザーでいい。ただし、admin以上のアクセスレベルがなければ、次のタイプマップのファイルを開けないので、面倒な方は、adminでアクセスレベルを設定してしまったほうがいいかも。

  5. 次に、コマンドプロンプトを開いて、以下を入力する。

> p4 set P4USER=(先ほど作成したクライアントユーザー名)
> p4 set P4PORT=ssl:(サーバーのIPアドレス):1666
> p4 -P (設定したクライアントユーザーのパスワード) typemap

タイプマップが開くので、これは、とりあえずUE4公式ドキュメントに記載のものをコピペして、既存のものを上書きする(自分ははしたが、しなくてもいいかも?)。

// クライアントの情報を確認
> p4 info
// クライアントの環境変数を確認
> p4 set 

6. P4Vを起動し、表示されたダイアログに先ほどと同様に、サーバーのIPアドレスと、作成したユーザー名を入れる。またこの後、エンコーディングについては先ほどのP4Adminの時と同様に入力する。

7. viewドロップダウンから、Workspacesを開き、開いたワークスペースのタブで右クリックをし、New Workspaceオプションを選択する。ワークスペースを設定し、作成する。このとき、ワークスペースのrootは、もし、既存のプロジェクトを管理したいなら、そのフォルダを、もし、新規に始めるプロジェクトならどこでもいい。
また、下の画像のように、Workspace Mappingsを設定する。デフォルトの設定だと、//depot/...//Sample/depot/...となっていると思うが、後ろに付いているdepotを消す。spec~については、まだ未学習なので、自分は除いてしまった。とはいえ、今更ではあるが、参考リンクによると、ユーザーの編集フォームの履歴を追跡してくれるとあるので、あったほうがいいかも。後から追加もできるらしいので、まあよしとする。最後にOKを押す。

8. デポに追加するフォルダー、ファイルを聞かれるので、UE4公式ドキュメントのようにする。

9. そして、一番最後の作業として、UnrealEngine4を開き、Source Controlから、Perforceを選択し、各種項目を埋めて、設定を保存すれば、完了である。なお、Server欄はssl:(サーバーのIPアドレス):1666とし、ワークスペースは、すでにワークスペースを設定していれば、候補が表示されるので、そこから選択すれば良い。

最後に、今回は簡単にUE4とPerforceの連携について、自分なりにまとめてみたが、まだまだ、不十分なところがあるので、調べ次第変更していきます。

参考にしたサイト