Source Dedicated Server (SRCDS)

Team Fortress 2 が play for free になったので、Ded鯖を立ててみることにしてみました。
Quake 系はガンガン立てていたけれど、Source 系はさっぱりだし良い機会ということで。

Dedicated Server

ここでは主に PC ゲームの専用サーバ、俗にいうゲームサーバを指します。
主に家庭用ゲーム機ではプレイヤーの一人がホストとなってマルチゲームを行いますが、PCゲームの大半ではマルチプレイ専用のサーバを別途用意することが多いです。

環境

FreeBSD-7.1 (amd64)
SRCDS は FreeBSD 向けのバイナリはありませんが、Linux エミュレーションで FreeBSD でも動作します。
今回は OS 依存の部分はあまりないので、Linux でも同じ手法でできるはずです。

また、あんまりスペックは要求されないですが、回線は光必須と考えたほうが無難です。
上り回線が細い ADSL や安定しない CATV は諦めてください。

FreeBSD での Linux エミュレーション

方法は割愛。ports から fc10 を使っています。

カーネルモジュールを確認します。

azusa# kldstat | grep linux
 7    1 0xffffffffb073f000 18a2c    linux.ko

linprocfs を mount します。

azusa# cat /etc/fstab | grep linprocfs
linprocfs               /compat/linux/proc linprocfs rw 0 0

SRCDS

FreeBSD ports でインストールします。

azusa# pwd
/usr/ports/games/linux-steam
azusa# make install clean
(ライセンスの確認を行って問題なければ yes)

ただし、SRCDS は ports を使う恩恵があまりないので直接ダウンロードしてもいいかもしれません。

azusa# wget http://steampowered.com/download/hldsupdatetool.bin

SRCDS 実行ユーザの作成

これがポイント。実行ユーザのホームディレクトリに .steam ディレクトリが必要です。
そこそこ大きいファイルがダウンロードされるため、root ではなく専用のユーザを作成したほうが無難です。
(データファイルの保存場所が設定できないっぽい?)

ユーザを作成します。FreeBSD の場合。Linux は useradd コマンドを使ってください。
(pw に -m オプション付けずに面倒くさいことをやっているのはskel経由で生成されるファイルが邪魔だからだけです)

azusa# mkdir /home/steam
azusa# pw useradd steam -d /home/steam
azusa# chown steam:stream /home/steam

steam ユーザにスイッチして初期設定を行います。
steam 側のサーバの機嫌が悪い時には数回行う必要があります。

azusa# su - steam
$ pwd
/usr/home/steam
$ mkdir .stream
$ ./steam
Checking bootstrapper version ...
Getting version 44 of Steam HLDS Update Tool
Downloading. . . . . . . . . . . .Steam Linux Client updated, please retry the command
CAsyncIOManager: 0 threads terminating.  0 reads, 0 writes, 0 deferrals.
CAsyncIOManager: 21 single object sleeps, 0 multi object sleeps
CAsyncIOManager: 0 single object alertable sleeps, 0 multi object alertable sleeps

Team Fortress 2 サーバの構築

サーバに必要なファイルをダウンロードします。
CDNに乗っていないせいか結構時間がかかりますので、風呂にでも入って身を清めておきましょう。

オプション の -game で対象のゲームを指定します。今回は tf です。

$ ./steam -command update -game tf -dir .
Checking bootstrapper version ...
Updating Installation
No installation record found at ./orangebox
No installation record found at ./orangebox
No installation record found at .
No installation record found at .
No installation record found at .
No installation record found at ./orangebox
Checking/Installing 'Team Fortress 2 Content' version 254

0.12%   downloading ./orangebox/tf/bin/server.dll
0.29%   downloading ./orangebox/tf/bin/server.dylib
(このあと延々と)

サーバの cfg をいじります。

% cd orangebox/tf/cfg
% vi server.cfg

Quake 系に近いので特に問題はないはずですが、マップを回すのは別ファイル (mapcycle.txt、maplist.txt)ぽい?
server cvar についてはググるとすぐ出てきます。

当たり前のことですが、テスト時には LAN モードにしてください。(sv_lan 1)

Team Fortress 2 サーバのテスト起動

コンソールから下記のコマンドで起動しみます。

azusa% orangebox/srcds_run -game tf +maxplayers 24 +map ctf_2fort

他のマシンで Team Fortress2 を起動して開発者コンソールから

connect <サーバの IP アドレス>

と実行してサーバに接続できるかを確認してください。

Team Fortress 2 サーバの起動

毎回コマンド打つのも面倒なので、起動用スクリプトを用意します。
FreeBSD なら $LOCALBASE/etc/rc.d あたりに設置します。
(Linux でも動くように依存した処理はいれていません)

azusa# cat tf2server.sh
#!/bin/sh

BASEDIR=/home/steam
USER=steam
CONSOLE_LOG=$BASEDIR/console.log
su "$USER" -c "exec $BASEDIR/orangebox/srcds_run -game tf +maxplayers 24 +map ctf_2fort > $CONSOLE_LOG  2>&1" &
exit

have fun :D

xenの DomainU として FreeBSD を動かす

ようやく作業が完了したので、まとめてみます。

環境と目的

ubuntu あたりを Xen のサーバとして使うほうが楽なのですが、家にいてまで必要以上に Linux は触りたくないので NetBSD で。
ちなみにノート PC には ubuntu 入れて使っています。軽作業ならこれで十分ですしおすし。

Xen サーバ環境

NetBSD 5.1 AMD64 なホスト。メモリ 8GB でXenホストに 1GB割り当て。

NetBSD 5.1 (XEN3_DOM0) #0: Sun Dec 12 18:53:15 JST 2010  root@gomyway:/usr/obj/sys/arch/amd64/compile/XEN3_DOM0

CPU は Athlon X2 BE2350。これが今回の問題。

# grep model\ name /proc/cpuinfo
model name      : AMD Athlon(tm) X2 Dual Core Processor BE-2350
動かしたい DomainU

mpd で PC ルータとして動かすために FreeBSD
今なら Vyatta を入れるほうが楽かもしれませんが、そこはそれ。

準仮想化で動かすためにXen 用のカーネルを作る必要があります。
完全仮想化でも良いかもしれませんが、なんとなく…

構築手順

FreeBSDXenカーネルを作る。

FreeBSD xen の ML を見ると pmap で panic する修正が入っているとのことだったので、CURRENT で作ります。
このあたりの色々な修正は RELENG 8.2 へ MFC されていないので、おとなしく CURRENT です。
(STABLE へは MFC されてます)

CURRENT を作るのは先日の日記を参照。
http://d.hatena.ne.jp/po3/20110515/1305460610

Xen 用のディスクイメージを作る

下記 URL を参照しました。
http://forums.freebsd.org/showthread.php?t=10268

ただし、ディスクイメージを作るときは truncate ではなくて dd コマンドで作っています。

 # dd if=/dev/zero of=disk.img bs=1m count=2k

俗にいう穴あきファイル(sparse) はあんまりよく分からないし、VMWare でも qemu でもパフォーマンスがガタ落ちだったの dd でフルに容量を使って作成しています。
Linux だと virtio を使うとマシになるのですが、やっぱり根本的に遅いし、ディスクも安いのでキニシナイ!

作ったディスクイメージに色々するのは先日の日記を参照。
/etc/fstab を適当に弄って /etc/ttys に xc0 を追加してください。
http://d.hatena.ne.jp/po3/20110514/1305384444

Xen の設定ファイルを作る

これは単純に下記のようなファイルを用意します。

memory =  855
name = "FreeBSD_DOMU"
kernel = '/usr/home/xen/FreeBSD-CURRENT/xen.kernel'
disk = [
'file:/home/xen/FreeBSD-CURRENT/disk.img,hda1,w',
]
extra = 'boot_verbose,boot_single,kern.hz=100,machdep.idle_mwait=0,vfs.root.mountfrom=ufs:/dev/ad0s1a'
vcpus = 1
on_poweroff = 'destroy'
on_reboot = 'restart'
on_crash = 'restart'

machdep.idle_mwait=0 はもういらないかもしれない。

起動してみます。

gomyway# xm create ./xen.cfg -c
Using config file "././xen.cfg".
Started domain FreeBSD_DOMU
3DNow!>
  AMD Features2=0x11f<LAHF,CMP,SVM,ExtAPIC,CR8,Prefetch>
real memory  = 896532480 (855 MB)
avail memory = 866402304 (826 MB)
[XEN] IPI cpu=0 irq=128 vector=RESCHEDULE_VECTOR (0)
[XEN] IPI cpu=0 irq=129 vector=CALL_FUNCTION_VECTOR (1)
[XEN] xen_rtc_probe: probing Hypervisor RTC clock
rtc0: <Xen Hypervisor Clock> on motherboard
[XEN] xen_rtc_attach: attaching Hypervisor RTC clock
xenstore0: <XenStore> on motherboard
xc0: <Xen Console> on motherboard
Timecounters tick every 10.000 msec
xenbusb_front0: <Xen Frontend Devices> on xenstore0
[XEN] hypervisor wallclock nudged; nudging TOD.
xenbusb_back0: <Xen Backend Devices> on xenstore0
xctrl0: <Xen Control Device> on xenstore0
xbd0: 2048MB <Virtual Block Device> at device/vbd/769 on xenbusb_front0
xbd0: attaching as ad0
Timecounter "TSC" frequency 2109592000 Hz quality 800
WARNING: WITNESS option enabled, expect reduced performance.
Trying to mount root from ufs:/dev/ad0s1a []...
rtc0: [XEN] xen_rtc_gettime
rtc0: [XEN] xen_rtc_gettime: wallclock 1306675669 sec; 965899053 nsec
rtc0: [XEN] xen_rtc_gettime: uptime 665 sec; 6026720 nsec
rtc0: [XEN] xen_rtc_gettime: TOD 1306676334 sec; 971925773 nsec
Setting hostuuid: 0f12f2c1-8947-11e0-bda0-6389d0dd6e1d.
Setting hostid: 0x419c4544.
No suitable dump device was found.
Entropy harvesting: interrupts ethernet point_to_point kickstart.
Starting file system checks:
/dev/ad0s1a: FILE SYSTEM CLEAN; SKIPPING CHECKS
/dev/ad0s1a: clean, 835786 free (1474 frags, 104289 blocks, 0.1% fragmentation)
Mounting local file systems:.
/etc/rc: WARNING: $hostname is not set -- see rc.conf(5).
Starting Network: lo0.
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        options=3<RXCSUM,TXCSUM>
        inet 127.0.0.1 netmask 0xff000000
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
        nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
Starting devd.
add net ::ffff:0.0.0.0: gateway ::1
add net ::0.0.0.0: gateway ::1
add net fe80::: gateway ::1
add net ff02::: gateway ::1
Creating and/or trimming log files.
Starting syslogd.
/etc/rc: WARNING: Dump device does not exist.  Savecore not run.
ELF ldconfig path: /lib /usr/lib /usr/lib/compat
a.out ldconfig path: /usr/lib/aout /usr/lib/compat/aout
Clearing /tmp (X related).
Updating motd:.
Starting cron.
Starting background file system checks in 60 seconds.

Sun May 29 13:39:02 UTC 2011

FreeBSD/i386 (Amnesiac) (xc0)

login: 

なんとか起動しました。

TODO

とりあえず動かすところまではできましたが、メモリを 855MBよりも多くすると、また pmap で落ちます。
ルータとして動かすのでメモリはそんなにいらないので、この問題についてはスルーします。

USBメモリからXenServerをインストールしてみる

先日 XenDomU として FreeBSD を入れようと思ったものの、pmap_init で panic で落ちる問題はさっぱり。

そんな訳で現実逃避として XenServer をインストールしてみた。

インストール用の USB メモリを作る

何時買ったのかさっぱり思い出せない適当な 4GB の USB メモリからインストールしてみます。
自宅内のインストールサーバが停止中なので、わざわざ CD-R 焼くのは面倒だし、かなり地球に優しいエコじゃん. Jumping Now ってことで。

やることは

  • FAT32 でフォーマット
  • ISO イメージから必要なファイルをコピー
  • syslinux でブートローダを突っ込む

これだけ。ね、簡単でしょう?

FAT32 で USB メモリをフォーマットする

Windows 環境でやるなら HP USB Disk Storage Format Tool あたりで。
hp.com のどこにあるのかは分からなかったので詳細はググってください。

XenServer の ISO から USB メモリにコピー

Citrix のサイトから XenServer 無償版をダウンロードします。
http://www.citrix.co.jp/products/xenserver/download.html

ISO イメージをマウントできる適当なツール(DAEMON Tools Light)で、ISO の中身をそのまま USB メモリにコピーします。(すべてコピーする必要はないのですが、別に容量が足らないわけではないので)

次に USB メモリにコピーしたディレクトリとファイルをリネームする必要があります。isolinux から syslinux に変更します。
(例として G ドライブに USB メモリがささっている場合)

コマンドプロンプトでの例

 C:\Users\popopo>g:
 G:\>move isolinux\isolinux.cfg isolinux\syslinux.cfg
        1 個のファイルを移動しました。

 G:\>move isolinux syslinux
        1 個のディレクトリを移動しました。
syslinux でブートローダをインストールする

下記 URL から適当にダウンロードします。
http://www.kernel.org/pub/linux/utils/boot/syslinux/

アーカイブを展開後、コマンドプロンプトから

 D:\Download\syslinux-4.04> cp mboot\mboot.c32 g:\syslinux
 D:\Download\syslinux-4.04> cd win64
 D:\Download\syslinux-4.04\win64> syslinux64.exe -am g:

として、必要なファイルを差し替えたのちブートローダを仕込みます。

mboot\mboot.c32 を USB メモリにコピーするのは、ISO 側の syslinux が Ver.3だから(多分)
このファイルを差し替えてやらないと、ローダで延々とエラー吐かれる。
(vesamenu.c32 も差し替えないと駄目なような…)

USB メモリを差してインストール

BIOS で BOOT メニューを出して起動デバイスをしています。ウチの環境では USB-HDD としました。
XenServer のインストールは割愛。

おまけ:1台の XenServer でなんとかする

仮想マシンを構築しようとしたものの、どうも ISO イメージは外部のストレージに置くことが前提、みたいな…
NFS サーバ作るのめんどい、samba サーバ作るのめんどいし、Windowsの共有フォルダがうまく動かない、ぐぬぬ

ググったら下記のサイトが参考になりました。
http://www.noop.tk/index.php?XenServer

/home/iso に各 ISO イメージを格納する場合

# mkdir /home/iso
# xe sr-create name-label="local iso" type=iso device-config:location=/home/iso device-config:legacy_mode=true content-type=iso
fa54baf1-5ed0-e68a-873f-ed5257cce42d 

おまけ:XenCenter 感想

起動が遅い(小学生並の感想)
これはハードウェアスペックに関係なく、サーバ自体の起動がやや遅いです(*BSDに比べて)

似たような製品の VMWare ESX に比べると対応しているデバイスドライバの数は多く、ハードウェア的な制限が低いのが利点、ぐらい。

XenServer の HCL。
http://hcl.xensource.com/

FreeBSD-CURRENT の環境を作る

Xen の DomainU で FreeBSD を動かしたいけれど、うまく動かないでの CURRENT の Xen kernel を作ってみることに。

FreeBSD CURRENT の作り方はハンドブックを眺めると書いてありますが、個人的にはあまりやらない作業なので、なにをやったかを記録しておきます。

やり方としては手抜きですが、仕事でやるときは丁寧にやってます、はい(明後日の方向を見ながら)

csup で使う supfile を作ります。これは cvsup のものを転用します。tag は . を指定します。

gomyway# cp /usr/share/examples/cvsup/standard-supfile /home/work
gomyway#  egrep -v '^#|^$' /home/work/standard-supfile
*default host=cvsup3.jp.freebsd.org
*default base=/var/db
*default prefix=/usr
*default release=cvs tag=.
*default delete use-rel-suffix
src-all
gomyway# csup /home/work/standard-supfile

csup でソースを拾ってきてビルドします。kernel をインストールして新しい kernel で再起動します。

gomtway# cd /usr/src
gomywat# make -j64 buildworld && make buildkernel && make installkernel
gomyway# reboot

本来なら single mode で作業をすべきなのですが、手が届く端末ですし普通に。こういうことをやっていいのか、それとも駄目なのかは自分で判断してください。今回は素の試験環境なのでそのあたりは気にせずに。

installworld します。ややこしいことが嫌いなのでまたリブートします。

gomyway# cd /usr/src
gomyway# make installworld
gomyway# reboot

mergemaster で /etc を可愛がります。本来なら installworld の前にすべきなのですが、忘れてた。

また、面倒な mergemaster の代替ツールがあったはずなのですが思い出せませんでした。

gomyway# mergemaster

(cvd id を無視するの忘れてた)

本来の目的である CURRENT での Xen kernel を作ります。

gomyway# cd /usr/src
gomyway# make buildkernel KERNCONF=XEN

前回手を抜いたビルドした kernel がどこに生成されるのかは…そりゃ /usr/obj 以下ですよね、アタシってほんと馬鹿。

gomyway# find /usr/obj -name kernel
/usr/obj/usr/src/sys/XEN/kernel
/usr/obj/usr/src/sys/GENERIC/kernel

installkernel 時になにかやっているわけではなさそうなので、ここから kernel をコピーします。

gomyway# sha256 /boot/kernel/kernel
SHA256 (/boot/kernel/kernel) = caeef8f9882d7538c5a8f38e2488822b48f43f6fafdece80c8efade6ca548956
gomyway# sha256 /usr/obj/usr/src/sys/GENERIC/kernel
SHA256 (/usr/obj/usr/src/sys/GENERIC/kernel) = caeef8f9882d7538c5a8f38e2488822b48f43f6fafdece80c8efade6ca548956m

こんな感じ。

本来の目的である DomainU での FreeBSD は状況変わらず。

# xm create -c ./xen.cfg
Using config file "././xen.cfg".
Started domain FreeBSD8.22_i386_DOMU
WARNING: loader(8) metadata is missing!
GDB: no debug ports present
KDB: debugger backends: ddb
KDB: current backend: ddb
Copyright (c) 1992-2011 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
        The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 9.0-CURRENT #1: Sun May 15 18:55:50 JST 2011
    admin@gomyway.continue:/usr/obj/usr/src/sys/XEN i386
WARNING: WITNESS option enabled, expect reduced performance.
panic: pmap_init: page table page is out of range
cpuid = 0
KDB: enter: panic
[ thread pid 0 tid 0 ]
Stopped at      0xc0119c4a:     movl    $0,0xc0423af4
db>


どうするかね、これ。

FreeBSDのXen Kernelを作る

放置するのもなんですし、日々の調べ物を書くチラシの裏として活用しようかと。
しかしながら、内容が小出しになる、もしくは途中で無駄だと判断して中断することもあるので、答えが知りたくてググッてきた人には悪いかもしれません。

んじゃ、本題。

NetBSD 5.1 (AMD64)で動いている Xen 環境に DomainU として FreeBSD を動かしたいので、準仮想化用に使う Kernel を作ってみました。

いつもの方法で kernel を作ります。

gomyway# uname -rm
8.2-RELEASE i386
gomyway# cd /usr/src/
gomyway# make buildkernel KERNCONF=XEN

ここでちょいと迷ったのが、どこにビルドされた kernel があるのか分からない。面倒になったので、適当なパーティションを作ってそこにインストールしてから取り出すことにしてました。

適当にイメージファイルを作って mdconfig でメモリディスクをアタッチします。

gomyway# dd if=/dev/zero of=/home/freebsd8.2.img bs=1m count=1024
gomyway# mdconfig -a -t vnode -u 0 -f /home/freebsd8.2.img

ファイルシステムを作って bsdlabel で fstype を 4.2BSD に変更します。

gomyway# bsdlabel -w /dev/md0 a
gomyway# bsdlabel -e /dev/md0
gomyway# newfs /dev/md0a

mount します。

gomyway# mount /dev/md0a /mnt

メモリディスクにカーネルをインストールします。

gomyway# cd /usr/src
gomyway# make installkernel DESTDIR=/mnt  KERNCONF=XEN

これで /mnt/boot/kernel/kernel に Xen kernel があります。

これを Xen ホストにコピーして DomainU として起動してみますが… OS起動時にpmap_init で落ちる。

# xm create -c freebsd.conf
(snip)
panic: pmap_init: page table page is out of range

ワケがわからないよ。

ググッてみたら、AMD特有の問題のようで 2011年1月ぐらいにFIX入っているみたいなので、後日CURRENT で Xen Kernel を作ってもう一度トライしてみます。

ファイルサーバにある動画ファイルを再生する

本年度もよろしくおねがいします。

さて、新年早々冬コミの戦利品を眺めていたところ閃いたというか、単に忘れていただけの「ファイルサーバにある動画ファイルを XBOX360 から再生する」というのをやってみました。

XBOX 360 では同一ネットワーク内に存在する Windows PC にあるメディアファイルを再生することができますが、ウチの環境では各種動画データをクライアント端末ではなく FreeBSD 7.1 にて稼働しているファイルサーバに集約させています。

このため、今回は FreeBSD に格納された動画ファイルを XBOX360 から扱うことができるようにするを目的とします。恐らく Linux でも同じ手法で達成することは可能であると存じますが、手元に Linux BOX が無いので試していません。

まず、前提となる Digital Living Network Alliance(DLNA)というか Universal Plug and Play (UPnP) によるストリーミングを達成するために必要なサーバソフトウェアを選定します。といっても良く分かっていないので適当にググってみました。

色々あって迷いますが、ここは定番の「ports にあるから」との理由で uShare を使ってみました。特に難しい設定は不要ですので簡単に導入できます。

下記に手順を提示します。

まずは ports からインストールします。

PlayStation 3 などの DLNA クライアントを利用する場合では WITH_LIBDLNA を有効にしてください。

# cd /usr/ports/net/ushare/
# make WITH_LIBDLNA=yes install

設定ファイルを編集します。

ここでは下記のみを設定します。

  • USHARE_IFACE バインドするネットワークデバイス名を指定してください。
  • USHARE_DIR 公開したいディレクトリのパスを指定してください。
# cd /usr/local/etc
# cp ushare.conf.sample ushare.conf

# diff  ushare.conf.sample ushare.conf
9c9
< USHARE_IFACE=
---
> USHARE_IFACE=fxp0
21c21
< USHARE_DIR=
---
> USHARE_DIR=/export/media

次に /etc/rc.conf に下記を追記します。

ushare_enable="YES"
ushare_flags="-x -v"

バグがあるため XBOX を認識させるためには ushare.conf ではなく ushare_flags にてコマンドラインオプション "-x" を指定して認識させる必要があります。また "-v" はお馴染みの vervose でログメッセージを出力してくれますので、導入初期はこの出力を確認して挙動を確認します。

そして uShare デーモンを起動してみます。

# /usr/local/etc/rc.d/ushare start
Starting ushare.

ここで XBOX360ダッシュボートから [Xbox360] → [ビデオライブラリー]を選択すると、機器の選択画面にて ushare という項目が表示されます。(ushare の名称はデフォルト名。ushare.conf の USHARE_NAME にて設定可能です)

しかしながら、日本語を含むディレクトリ・ファイルを正しく処理できないようで本来は存在しているファイルが表示されない現象が確認できました。

いつものことなので、ソースを漁ってみます。

# pwd
/usr/ports/net/ushare/work/ushare-1.1a/src
# grep setlocale *
Binary file ushare matches
ushare.c:  setlocale (LC_ALL, "");
Binary file ushare.o matches

ushare.c にて locale を殺しています。iconv を使ってどうにかしてみようとしているらしいですが、ushare のログを見るとどうも上手くいっていないようです。

Jan  1 14:11:36 azusa uShare[96941]: Freeing entry invalid name id=1923 [初音ミク]

よく分からないので、ファイルサーバとして稼働している samba の内部エンコーディングに設定してある EUC-JP をハードコートしてやっつけます。また、最近の Linux ならすべて UTF-8 を前提としているので UTF-8 になるんじゃないかと。

ushare.c の差分はこんな感じです。

# diff ushare.c.org ushare.c
735c735
<   setlocale (LC_ALL, "");
---
>   setlocale (LC_ALL, "ja_JP.eucJP");

ports 用に patch を作ります。これは既存の patch に追記させます。

# cd ../
# diff -c src/ushare.c.org src/ushare.c >> ../../files/patch-ushare

綺麗にしてからビルドして再インストール、デーモンの再起動を行います。

# cd ../
# make distclean
# make deinstall && make reinstall
# /usr/local/etc/rc.d/ushare restart

これで日本語を含む場合でも正しく処理がされます。しかしながら、前述のようにやっつけな方法ですので、誰か iconv を使ったエレガントな方法を教えてください。(今の FreeBSD の iconv は CP932 とかも使えるようになってますし)

また、某動画投稿サイトから動画ファイルを引き抜いて flv 形式から mp4 形式に変換している人への注意点ですが、mp4 形式の動画ファイルについては拡張子を m4v にする必要があります。

これは拡張子が mp4 であるファイルは音声ファイルとして扱われることが原因となっているようです。個人的には拡張子だけでファイル形式を判断するのはどうかと思いますが、オーバーヘッドの関係じゃないかなぁ、と邪推してみる次第です。

また、XBOX360 でサポートされるフォーマットなどについては下記を参照してください。
http://support.microsoft.com/kb/945416/ja

シヴィライゼーション・レボリューション(FIRAXIS GAMES/2K GAMES)

http://www.cyberfront.co.jp/title/civ_revo/
http://www.civilizationrevolution.com/

廃人育成で有名なターンベースなストラテジの「Civilization」コンシューマ版です。
本作品は PC 版の 4作目をベースにかなり遊びやすい構成になっています。

個人的にはストラテジは今は亡き Ensemble Studios 社の「Age of Empires」の 1作目の拡張パックである「Rise of Rome」で手を引いています。冒頭で述べたようにこの手のストラテジは廃人を生み出しやすく、当時はテレホタイムにずっと iwango(これ知ってる人いるかな・・・)に入り浸って対戦を繰り返す状態で、さすがにこれはイカンと泣く泣く手を引いた過去があるわけです。

また、以前になんとなく PC 版「Civilization IV」の DEMO をやってみたのですが、悪い病気がまた再発しそうなり断念していたところにコンシューマ版の発売が発表されたわけです。

確かにコンシューマということでカジュアル気味なバランス調整になっています。内政がある程度育ってしまうと、都市が腐ることがないので後半はデメリットが無かったりと。

しかしながら、このあたりの微妙さが面白いです。近年は複雑化しがちなストラテジでありながら、ある程度割り切った単純化とヘルプなどのインターフェイスが充実しているので、このジャンルにはじめて触れるのであればオススメの 1本かと。

まあ、「もう1ゲームだけ」とかやりだすと、簡単に廃人への道が開けるようになりますけれどね。


実績の「平和のための戦い」がどうも難しかったので、ちょっとメモを晒してみます。条件は「国王以上の難易度で、西暦1000年までに勝利する」なので慣れていないと時間制限が厳しい内容となっています。また、高難易度の CPU なので早い段階で防衛のキモである弓兵を生産されてしまい敵の都市を落とすのが難しくなってきます。

まず、敵都市とアーティファクト、および蛮族の位置を確認します。新規ゲームを選択してセーブをして数ターンは捨てゲーとしてマップを確認します。ここで付近に敵都市が2つ以上無い場合は、マップが悪いので再度新規ゲームから開始します。

ゲーム開始時の付近の配置に問題が無い場合は、ロードをしなおして最短の手順で蛮族をフルボッコにしてから敵都市を最低でも2つは落とします。うまく行けばこの時点で大将軍を作ることができます。

あとは騎兵を大量生産して大将軍やエリートの補正を使って落とすだけ。ね?簡単でしょう?

余談ですが、どうもシングル戦の戦闘結果は固定臭いです。負けるときは負けてしまうので、これは素直に諦めて物量で押し切るしかないかと。