FreeBSDにteamspeak3のサーバを導入する

1. はじめに

FreeBSDにteamspeak3のサーバを導入してみました。

普段はサービスはportsから入れてるんだけど、portsの更新が遅れてるみたいなのでちょっと変則的にインストールしてみました。

portsの更新とかって何か個人でサポートできることがあればいいんだけど、どうしたらいいのかわかんないのでしょんぼり。いつかはportsのメンテナとかになってみたいな!

2. portsじゃないteamspeak3サーバ

teamspeak3は公式ページでサーバのバイナリを配布しています。amd64とi386用があるのでそれを使うことにします。pc98とかsparcとかは……、残念ながら辛そうですね。ソースコードも公開されてないですしね。Debianなお友達はその点を批判していました。

さて、公式からtar玉を拾ってきます。

以下のページから拾うことができます。直リンでもいけると思うけど、アンケートとかを実施しているのでwebからたどってあげて下さい。

TeamSpeak – Downloads

さて、このバイナリを落としてきたら普通は手動で起動させてやることになるとおもう。

でも管理面からすると起動スクリプトとか、ファイルの配置とか、ちょっといろいろと考えてしまいました。一応そんなやり方でももちろん動くんだけど、カッコ良いFreeBSDの起動用rcスクリプトを使いたい、ってことで「portsで現行の古いバージョンのteamspeakをインストールして、必要なバイナリのみをアップデートする」というやり方でやってみました。。

3. portsからteamspeakインストール

shell> sudo portsnap fetch update
shell> sudo portmaster audio/teamspeak3-server
shell> grep teamspeak /etc/rc.conf
teamspeak_enable="YES"

portsツリーが古かったのでアップデートしてから作業に入いります。今日(2012-09-04)でportsのts3は3.0.5、公式が3.0.6となっています。
portmasterを導入しているのでそちらからインストール。特に不便も無くインストールが進みます。
注意する点が二点。一つはteamspeak2もportsに転がっているので間違ってそっちを入れないようにします。
audio/teamspeak_serverという名前なので現行バージョンかと思いきや2系が入っちゃう。2系は結構長らく使われていたのでそのせいなのかなと思います。
もう一点は途中で見慣れないlicenseの画面が出てくる。”accept”, “reject”, “view”とあるので利用規約?のチェックが必要です。
それ以外はスムーズに進む。
rc.confに起動用の設定を書いておく。
で、終わった段階でもう使えちゃうんだけど、ここから最新版へのアップデートをしていきます。</pre>
<h1>4. teamspeak公式からバイナリを落としてきて上書き</h1>
<pre>

shell>  cd tmp; fetch <a href="http://teamspeak.gameserver.gamed.de/ts3/releases/3.0.6.1/teamspeak3-server_freebsd-amd64-3.0.6.1.tar.gz">http://teamspeak.gameserver.gamed.de/ts3/releases/3.0.6.1/teamspeak3-server_freebsd-amd64-3.0.6.1.tar.gz</a>
shell> tar zxvf teamspeak3-server_freebsd-amd64-3.0.6.1.tar.gz
shell> sudo cp ts3server_freebsd_amd64 /usr/local/libexec/teamspeak_server
shell>  sudo cp libts3db_* /usr/local/lib/teamspeak/server/
shell> sudo chmod -x /usr/local/lib/teamspeak/server/*
shell>  sudo cp -R sql /usr/local/share/teamspeak/server/
shell> sudo cp -R serverquerydocs /usr/local/share/teamspeak/server/

ソースコードを落としてきて展開、バイナリを各種ディレクトリにコピー。

teamspeak3サーバが利用するFreeBSDでの各種場所は次の通り。

/usr/local/lib/teamspeak/server/ libts3db_mysql.soとlibts3db_sqlite3.soの二種類のライブラリ保存場所
/usr/local/libexec/teamspeak_server サーバ本体のバイナリ
/usr/local/share/teamspeak/server/ sqlとserverquerydocsを保存するところ
/var/db/teamspeak/ pidとsqliteのdbファイル、チャンネルごとにアップロードされたファイルとかの保存先
/var/log/teamspeak/ ログ
/usr/local/etc/teamspeak/ 起動時のini設定ファイル、ライセンスキーの置き場所

これはportsでインストールしたときに設定されるディレクトリ構成で、無理にコレに従う必要も無かったり。linuxを下地にしてるんでlinuxっぽさがでてたりするのでその辺はお好みで。それぞれのパスを変えたいときは起動スクリプトの /usr/local/etc/rc.d/teamspeak の中を書き換えれば動くはず。

それぞれのバイナリとかをコピーするときの注意事項。サーバ本体の名前は ts3server_freebsd_amd64 (i386だと違うと思う)なんだけど、コピー先ではteamspeak_serverになってること。ちょっと注意かな。

iniファイルは無くても起動する。teamspeak3は起動した後に設定用の専用のクエリを送ったりするのでそっちで設定することが多かったりする。

ただし起動時のポート、設定用クエリの待ち受けポートなど、こっちじゃないと設定できない項目もあったりする。

  1. 初回起動の前に
    さて、早速起動しようかな~、という前にやっておくことがある。
    このまま起動するとスタートアップスクリプトのおかげ(?)で teamspeak_serer のバイナリをdaemonでdaemon化するようになってる。
    でもそれだとマズい。何がまずいかというと、teamspeakは初回起動時に二つの重要なコードを発行する。
    一つは設定用クエリ、server query接続用のIDとパスワード。
    もう一つは管理者ユーザ用の privilege key と呼ばれる文字列(token)だ。
    tokenの方はログに残るのでいいんだけれど、server query用のidとパスワードは残らない。
    teamspeak_serverの悪いことに、これらの文字列は標準出力に出してくる。そしてその出力はdaemonが食べてしまう。
    その上初回起動時にしか出ないので要注意なのだ。
    daemonコマンドの引数から出力をsyslogあたりにちゃんと投げ直してあげれば良いんだけど、ここはサックリと、手動で一度だけ実行してやる。
    起動スクリプトを参照して起動してやる。portsからのインストールによってディレクトリ構成が違ったりするので適宜応用で。

ちなみにlogpathは変数を使ってたので定数に置き換え。また動かすユーザはsudo -u teamspeakで切り替えておいた。rootで実行すると後々パーミッション問題が出てくると思う。

shell> grep command_args /usr/local/etc/rc.d/teamspeak
command_args="-fp $pidfile -u teamspeak /usr/local/libexec/teamspeak_server dbsqlpath=/usr/local/share/teamspeak/server/sql/ inifile=/usr/local/etc/teamspeak/ts3server.ini licensepath=/usr/local/etc/teamspeak/ logpath=$log_dir"
shell> sudo -u teamspeak /usr/local/libexec/teamspeak_server dbsqlpath=/usr/local/share/teamspeak/server/sql/ inifile=/usr/local/etc/teamspeak/ts3server.ini licensepath=/usr/local/etc/teamspeak/ logpath=/var/log/teamspeak
shell> sudo service teamspeak start
Starting teamspeak.

以下はprivilege keyなtokenがあるログ

more /var/log/tesmspeak/ts3server_2012-09-03__17_40_57.768247_1.log
2012-09-03 17:40:58.783310|INFO    |VirtualServer |  1| listening on 0.0.0.0:9987
2012-09-03 17:40:58.783860|INFO    |VirtualServer |  1| client 'server'(id:0) added privilege key for servergroup 'Server Admin'(id:6)
2012-09-03 17:40:58.783886|WARNING |VirtualServer |  1| --------------------------------------------------------
2012-09-03 17:40:58.783901|WARNING |VirtualServer |  1| ServerAdmin privilege key created, please use the line below
2012-09-03 17:40:58.783916|WARNING |VirtualServer |  1| token=!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2012-09-03 17:40:58.783931|WARNING |VirtualServer |  1| --------------------------------------------------------

 

以上でおしまい。

ちなみにServer Query用のアカウントが分からない場合、ちょっと面倒な事になっちゃう。
始動して間もないのであれば/var/dbにあるsqliteとかmysqlのテーブルを消せばもう一度発行してもらえる。でも実稼働しちゃうとチョット面倒。
一応なんとかする方法はあるんだけれど、ココでは今のところ割愛。またの機会に。

「FreeBSDにteamspeak3のサーバを導入する」への1件のフィードバック

コメントを残す