Mumbleというオープンソースのボイスチャットのソフトを見つけた。サーバの実装はMurmurというらしい。自宅で動かしているサーバはPowerPCのOS X Tigerという古いもので、murmurの最新版ではサポートされていない。でもいじりまわした結果なんとか動いたのでメモする。
うまくいくまでの経緯
まず、DarwinPortsにmurmurがあったのでそれを単純に入れてみようとした(sudo port install murmur)。依存関係のビルドは、qt4-macというportの作業領域に6GBほどHDDを食われたものの、特に問題なくすんだ。しかし、murmur自体のビルドでエラーになった。ログを見るとコンパイラの引数に-arch i386という文字があったので最新版はとりあえず諦めた。
DarwinPortsを諦めてtarballを野良ビルドすることも考えたが、サーバとして動かすなら、ビルドするだけではすまない。LaunchDaemonsなどに登録する必要がある。plistなどを用意する作業と天秤にかけて、Portfile(DarwinPortsのビルド手順を記述したスクリプト)をいじってみることにした。
検索してみると、昔のバージョンではppcでも動いていたような報告がある。Portfileの歴史をさかのぼってみると、1.2.2(この記事時点での最新 r75458)になる前のバージョンは1.1.8だった。とりあえずr69125のPortfileを落として野良ビルドしたところ、qmakeが見つからないというエラーが出た。
最新版のPortfileではqt関係の記述が変わっていたので、それを見ながら適当にPortfileをいじった。ビルドしなおすとエラーが変化して、リンク時にエラーが出た。/usr/bin/ld: Undefined symbols: _Gestaltという見覚えのあるエラーが出ていたので、リンカのオプションに-framework CoreServicesをつけるようなMakefileを生成するようにqmakeに引数を与えるようPortfileを修正した(こういうとき自動化は怖い)。
いじったPortfile
できあがったPortfileは以下。そのうちフィードバックしたい。
# -*- coding: utf-8; mode: tcl; tab-width: 4; truncate-lines: t; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:et:sw=4:ts=4:sts=4 | |
# $Id$ | |
PortSystem 1.0 | |
PortGroup qt4 1.0 | |
name murmur | |
version 1.1.8 | |
categories net audio | |
license GPL | |
maintainers snc openmaintainer | |
description server for mumble - low latency voice chat for gaming | |
long_description \ | |
Server component of Mumble - an open source, low-latency, high quality \ | |
voice chat software primarily intended for use while gaming. | |
homepage http://mumble.sourceforge.net/ | |
platforms macosx | |
master_sites sourceforge:mumble | |
checksums md5 a7da012922d39b87c45d9f481d4b5efb \ | |
sha1 83b5ef771b6801953290ee184f1590686e831b8c \ | |
rmd160 d2d05993b38749f30ed67b8b92a22ef236dc7cf1 | |
distname mumble-${version} | |
dist_subdir mumble | |
#livecheck.type regex | |
#livecheck.url ${homepage} | |
livecheck.regex "& Murmur (\\d+\\.\\d+(\\.\\d+))" | |
depends_lib-append \ | |
port:openssl \ | |
port:protobuf-cpp | |
depends_build-append \ | |
port:boost | |
configure.cmd ${qt_qmake_cmd} | |
configure.pre_args CONFIG-=app_bundle CONFIG+=\" | |
configure.post_args \" QMAKE_LFLAGS='-framework CoreServices' | |
configure.args release no-universal no-client no-ice no-update no-g15 | |
variant universal { | |
configure.args-delete no-universal | |
} | |
variant ice description "Enable ice support" { | |
configure.args-delete no-ice | |
depends_lib-append port:ice-cpp | |
} | |
startupitem.create yes | |
startupitem.type launchd | |
startupitem.name Murmur | |
startupitem.start "${prefix}/sbin/murmurd -ini ${prefix}/etc/murmur/murmur.ini" | |
startupitem.stop "kill -TERM `cat ${prefix}/var/run/murmur/murmur.pid`" | |
startupitem.pidfile auto "${prefix}/var/run/murmur/murmur.pid" | |
build { | |
system "cd ${worksrcpath} && make" | |
} | |
destroot { | |
addgroup murmur | |
adduser murmur gid=[existsgroup murmur] realname=Murmur\ -\ Mumble\ Voice\ Chat | |
set dp ${destroot}${prefix} | |
set w ${worksrcpath} | |
set logdir ${dp}/var/log/murmur/ | |
set dbdir ${dp}/var/lib/murmur/ | |
set piddir ${dp}/var/run/murmur/ | |
xinstall -m 740 -o murmur -g murmur -d \ | |
${logdir} \ | |
${dbdir} \ | |
${piddir} | |
destroot.keepdirs-append \ | |
${logdir} \ | |
${dbdir} \ | |
${piddir} | |
file mkdir ${dp}/etc/murmur/ | |
file mkdir ${dp}/sbin/ | |
file mkdir ${dp}/etc/dbus-1/system.d/ | |
file copy ${w}/release/murmurd ${dp}/sbin/murmurd | |
set conf ${dp}/etc/murmur/murmur.ini | |
file copy ${w}/scripts/murmur.ini.system ${conf} | |
system "sed -i '' -e 's,database=.*,database=${prefix}/var/lib/murmur/murmur.sqlite,' ${conf}" | |
system "sed -i '' -e 's,pidfile=.*,pidfile=${prefix}/var/run/murmur/murmur.pid,' ${conf}" | |
system "sed -i '' -e 's,logfile=.*','logfile=${prefix}/var/log/murmur/murmur.log,' ${conf}" | |
if {![variant_isset ice]} { | |
# This change is made only to avoid confusion. Murmur ignores | |
# the ice= config option when built without Ice support. | |
system "sed -i -e 's,ice=,\#ice=,' ${destroot}${prefix}/etc/murmur/murmur.ini" | |
} | |
set dbusservice ${dp}/etc/dbus-1/system.d/murmur.conf | |
file copy ${w}/scripts/murmur.conf ${dbusservice} | |
system "sed -i '' -e 's,user=.*\",user=\"murmur\",' ${dbusservice}" | |
} | |
pre-install { | |
set plist ${destroot}${prefix}/etc/LaunchDaemons/org.macports.Murmur/org.macports.Murmur.plist | |
system "sed -i '' -e 's,</dict>,<key>UserName</key><string>murmur</string></dict>,' ${plist}" | |
} | |
post-install { | |
ui_msg "" | |
ui_msg "***************************************************************" | |
ui_msg "* To set up a password for the SuperUser user on your Murmur" | |
ui_msg "* server, execute:" | |
ui_msg "*" | |
ui_msg "* ${prefix}/sbin/murmurd -ini ${prefix}/etc/murmur/murmur.ini -supw \[password\]" | |
ui_msg "*" | |
ui_msg "* In case you want to interface with a different database than" | |
ui_msg "* sqlite, then take a look at the +psql and +mysql5 variants of" | |
ui_msg "* qt4-mac." | |
ui_msg "*" | |
ui_msg "***************************************************************" | |
ui_msg "" | |
} |
使い方としては、このPortfileを空のフォルダに置き、そこにcdしてsudo port installとすればよい。
追記
umurmurというQtに依存しないクローンがあった。ビルドがmake一発と簡単な上1.2のプロトコルにも対応しているので、こっちを入れるほうがよさそう。
野良ビルドのメモ:
- libconfigというライブラリはDarwinPortsにあるものとは別物らしい
- 定数_POSIX_PRIORITY_SCHEDULINGを#undefする必要がある
0 件のコメント:
コメントを投稿