広告バナー
続・チャット仮想空間ソフト「MikuMikuOnline」サーバのビルド&インストールに挑む 
以前の記事の続きです。前回は、gcc 4.5.4 + boost 1.58.0の組み合わせで、「MikuMikuOnline」(以下、単にMMOという)サーバのビルドに挑みましたが、最終的には、現在のMMOクライアントのboostバージョン(1.57.0)の違いにより、通信できませんでした。
この後、マクロ定義で、boostのバージョンを誤魔化そうとしましたが駄目でしたw。また、サーバのboostのバージョンを下げて、gcc 4.5.4 + boost 1.57.0でビルドしようとしましたが、やはり、「error: ‘addressof’ is not a member」が発生し、ビルドできませんでした。このエラーは、「Fixed detection of C++11 std::addressof with g++ (#10982)」に起因するものと思われます。
そこで、gccのバージョンを上げて、gcc 4.6.4にアップし、gcc 4.6.4 + boost 1.57.0の組み合わせで、挑戦してみることにしました。
前回インストールしたgcc 4.5.4とboost 1.58.0(この二つは、/usr/localにインストール済み)と混在しないように、/home/localというディレクトリを作成し、そこに、gcc 4.6.4 + boost 1.57.0をインストールすることにしました。
先行してビルドしたboost 1.57.0のビルドは、以下のように行いました。
export LD_LIBRARY_PATH=/usr/local/lib; ./bootstrap.sh
export LD_LIBRARY_PATH=/usr/local/lib; ./b2 install toolset=gcc cxxflags=-fPIC library-path=/usr/local/lib -j1 --prefix=/home/local/boost/1_57_0 --without-mpi
この後は、gcc 4.6.4のビルドを参考ウェブページ[1]を参考に行った。
[gmp]
export LD_LIBRARY_PATH=/usr/local/lib; ./configure --prefix=/home/local/gcc/4.6.4
export LD_LIBRARY_PATH=/usr/local/lib; make
export LD_LIBRARY_PATH=/usr/local/lib; make check > check.log
export LD_LIBRARY_PATH=/usr/local/lib; make install
[mpfr]
export LD_LIBRARY_PATH=/usr/local/lib; ./configure --prefix=/home/local/gcc/4.6.4 --with-gmp=/home/local/gcc/4.6.4
export LD_LIBRARY_PATH=/usr/local/lib; make
export LD_LIBRARY_PATH=/usr/local/lib; make check > check.log
export LD_LIBRARY_PATH=/usr/local/lib; make install
[mpc]
export LD_LIBRARY_PATH=/usr/local/lib; ./configure --prefix=/home/local/gcc/4.6.4 --with-gmp=/home/local/gcc/4.6.4 --with-mpfr=/home/local/gcc/4.6.4
export LD_LIBRARY_PATH=/usr/local/lib; make
export LD_LIBRARY_PATH=/usr/local/lib; make check > check.log
export LD_LIBRARY_PATH=/usr/local/lib; make install
[gcc]
export LD_LIBRARY_PATH=/usr/local/lib; ../gcc-4.6.4/configure --prefix=/home/local/gcc/4.6.4 --enable-languages=c,c++,fortran --with-gmp=/home/local/gcc/4.6.4 --with-mpfr=/home/local/gcc/4.6.4 --with-mpc=/home/local/gcc/4.6.4 --without-ppl --with-elf=/usr/local
export LD_LIBRARY_PATH=/home/local/gcc/4.6.4/lib:/usr/local/lib; make bootstrap
export LD_LIBRARY_PATH=/home/local/gcc/4.6.4/lib:/usr/local/lib; make install
これで、MMOサーバをビルドする準備が出来た。サーバのMakefileも、上記に合わせて書き換えた。
CXXFLAGS = -v -g -ggdb -Wall -std=gnu++0x -I/usr/include/cryptopp -I/home/local/boost/1_57_0/include -I/home/local/gcc/4.6.4/include -I/usr/local/include
LIBDIRS = -L/home/local/gcc/4.6.4/lib -L/home/local/boost/1_57_0/lib -L/usr/local/lib -L/usr/lib
そして、makeコマンド実行。
export PATH=/home/local/gcc/4.6.4/bin:$PATH; export LD_LIBRARY_PATH=/home/local/gcc/4.6.4/lib:/home/local/boost/1_57_0/lib:/usr/local/lib; make 2>&1 | tee make.log
これで、終わるかと思ったら、cryptoppでリンクエラー発生。どうやら、gcc 4.6.4で再ビルドが必要だったらしい。
export PATH=/home/local/gcc/4.6.4/bin:$PATH; export LD_LIBRARY_PATH=/home/local/gcc/4.6.4/lib:/usr/local/lib; make 2>&1 | tee make.log
再度、MMOサーバのmakeコマンドを実行し、かなりの時間を費やして、ビルド完了となった。
config.jsonファイルなどをWindowsのアプリから持ってきて、MMOサーバプログラム(ファイル名:server)と同じディレクトリに以下のように配置する。
server
config.json
channels/
ch000/
config.json
前回の記事のように通信ポートを開いた後、MMOサーバプログラムを起動し、Windowsから接続してみた。今回は、見事に成功!。
export LD_LIBRARY_PATH=/home/local/gcc/4.6.4/lib:/home/local/boost/1_57_0/lib; ./server &
やぁ、嬉しいなぁ。やはり、鍵は、boostバージョンの一致だったようです。これで、マイ仮想空間を構築できるぞぉ!w。
[追記 2015年6月7日 23:10]
・某所で伺ったところ、boostのバージョンはクライアント-サーバ間で、クライアント側が上位バージョンであれば良いらしい。つまり、現在のクライアントのバージョンだと、サーバのboostバージョンは、≦ 1.57.0で良いそうだ。
[追記 2015年7月12日 16:30]
・公式サーバ/クライアントはboost 1.51を採用しているため、実際には、boostバージョンは、≦ 1.51.0が良いようだ
[参考ウェブページ]
[1] Vine Linux に gcc4 をインストールする
[2] MikuMikuOnline wiki
この後、マクロ定義で、boostのバージョンを誤魔化そうとしましたが駄目でしたw。また、サーバのboostのバージョンを下げて、gcc 4.5.4 + boost 1.57.0でビルドしようとしましたが、やはり、「error: ‘addressof’ is not a member」が発生し、ビルドできませんでした。このエラーは、「Fixed detection of C++11 std::addressof with g++ (#10982)」に起因するものと思われます。
そこで、gccのバージョンを上げて、gcc 4.6.4にアップし、gcc 4.6.4 + boost 1.57.0の組み合わせで、挑戦してみることにしました。
前回インストールしたgcc 4.5.4とboost 1.58.0(この二つは、/usr/localにインストール済み)と混在しないように、/home/localというディレクトリを作成し、そこに、gcc 4.6.4 + boost 1.57.0をインストールすることにしました。
先行してビルドしたboost 1.57.0のビルドは、以下のように行いました。
export LD_LIBRARY_PATH=/usr/local/lib; ./bootstrap.sh
export LD_LIBRARY_PATH=/usr/local/lib; ./b2 install toolset=gcc cxxflags=-fPIC library-path=/usr/local/lib -j1 --prefix=/home/local/boost/1_57_0 --without-mpi
この後は、gcc 4.6.4のビルドを参考ウェブページ[1]を参考に行った。
[gmp]
export LD_LIBRARY_PATH=/usr/local/lib; ./configure --prefix=/home/local/gcc/4.6.4
export LD_LIBRARY_PATH=/usr/local/lib; make
export LD_LIBRARY_PATH=/usr/local/lib; make check > check.log
export LD_LIBRARY_PATH=/usr/local/lib; make install
[mpfr]
export LD_LIBRARY_PATH=/usr/local/lib; ./configure --prefix=/home/local/gcc/4.6.4 --with-gmp=/home/local/gcc/4.6.4
export LD_LIBRARY_PATH=/usr/local/lib; make
export LD_LIBRARY_PATH=/usr/local/lib; make check > check.log
export LD_LIBRARY_PATH=/usr/local/lib; make install
[mpc]
export LD_LIBRARY_PATH=/usr/local/lib; ./configure --prefix=/home/local/gcc/4.6.4 --with-gmp=/home/local/gcc/4.6.4 --with-mpfr=/home/local/gcc/4.6.4
export LD_LIBRARY_PATH=/usr/local/lib; make
export LD_LIBRARY_PATH=/usr/local/lib; make check > check.log
export LD_LIBRARY_PATH=/usr/local/lib; make install
[gcc]
export LD_LIBRARY_PATH=/usr/local/lib; ../gcc-4.6.4/configure --prefix=/home/local/gcc/4.6.4 --enable-languages=c,c++,fortran --with-gmp=/home/local/gcc/4.6.4 --with-mpfr=/home/local/gcc/4.6.4 --with-mpc=/home/local/gcc/4.6.4 --without-ppl --with-elf=/usr/local
export LD_LIBRARY_PATH=/home/local/gcc/4.6.4/lib:/usr/local/lib; make bootstrap
export LD_LIBRARY_PATH=/home/local/gcc/4.6.4/lib:/usr/local/lib; make install
これで、MMOサーバをビルドする準備が出来た。サーバのMakefileも、上記に合わせて書き換えた。
CXXFLAGS = -v -g -ggdb -Wall -std=gnu++0x -I/usr/include/cryptopp -I/home/local/boost/1_57_0/include -I/home/local/gcc/4.6.4/include -I/usr/local/include
LIBDIRS = -L/home/local/gcc/4.6.4/lib -L/home/local/boost/1_57_0/lib -L/usr/local/lib -L/usr/lib
そして、makeコマンド実行。
export PATH=/home/local/gcc/4.6.4/bin:$PATH; export LD_LIBRARY_PATH=/home/local/gcc/4.6.4/lib:/home/local/boost/1_57_0/lib:/usr/local/lib; make 2>&1 | tee make.log
これで、終わるかと思ったら、cryptoppでリンクエラー発生。どうやら、gcc 4.6.4で再ビルドが必要だったらしい。
export PATH=/home/local/gcc/4.6.4/bin:$PATH; export LD_LIBRARY_PATH=/home/local/gcc/4.6.4/lib:/usr/local/lib; make 2>&1 | tee make.log
再度、MMOサーバのmakeコマンドを実行し、かなりの時間を費やして、ビルド完了となった。
config.jsonファイルなどをWindowsのアプリから持ってきて、MMOサーバプログラム(ファイル名:server)と同じディレクトリに以下のように配置する。
server
config.json
channels/
ch000/
config.json
前回の記事のように通信ポートを開いた後、MMOサーバプログラムを起動し、Windowsから接続してみた。今回は、見事に成功!。
export LD_LIBRARY_PATH=/home/local/gcc/4.6.4/lib:/home/local/boost/1_57_0/lib; ./server &
やぁ、嬉しいなぁ。やはり、鍵は、boostバージョンの一致だったようです。これで、マイ仮想空間を構築できるぞぉ!w。
[追記 2015年6月7日 23:10]
・某所で伺ったところ、boostのバージョンはクライアント-サーバ間で、クライアント側が上位バージョンであれば良いらしい。つまり、現在のクライアントのバージョンだと、サーバのboostバージョンは、≦ 1.57.0で良いそうだ。
[追記 2015年7月12日 16:30]
・公式サーバ/クライアントはboost 1.51を採用しているため、実際には、boostバージョンは、≦ 1.51.0が良いようだ
[参考ウェブページ]
[1] Vine Linux に gcc4 をインストールする
[2] MikuMikuOnline wiki
![]() MikuMikuDance(MMD)情報 |
スポンサーサイト
インストール奮戦記(第六期)メモ (Puppy Linux warry 511jp on CASSIOPEIA FIVA MPC-102S編) #Linux
中古のCASSIOPEIA FIVA MPC-102S(メモリ:157MB(譲渡される前に拡張済み?)、HDD:6GB)をゲットできたので、Puppy Linux warry 511jpをインストールしてみました。
当初は、FDでNetBSDをインストールするつもりだったのですが、NetBSDのGENERICカーネルが、PCMCIAの起動でフリーズしてしまうので、Puppy Linuxに変更したのです。どうやら、最近のNetBSDは、PCMCIAとCardBusのプログラムを共用させているらしく、PCMCIAを上手く認識できないようです。カーネルを再構築すれば、PCMCIAを使えるらしいので、後で試してみたいと思います。
さて、インストール用にUSBドライブ(もしくは、USBメモリ)そして、起動可能なPCカードCD-ROMドライブ(例えば、Panasonic KXL-830AN-S)を用意します。また、USBドライブには、インストールCDに含まれるファイルをコピーしておきます。
USBドライブとCD-ROMドライブを接続後、インストールCDをセットし、CASSIOPEIA FIVA MPC-102S(以下、単にFIVAという)を起動して、BIOS画面に移行します。ここで、PCカードから起動するように変更し保存、そして、起動します。
Puppy Linuxインストール画面が表示されたら、コマンド入力モードへ移行します。そして、FIVAの内蔵ドライブをfdisk及びmkfsコマンドで、3パーティションに分けてフォーマットします。第1パーティションにOS本体をインストール。第2パーティションをデータ用として使い、第3パーティションをスワップ領域に使います。
次に、USBドライブを適当なマウントポイントにマウントし、第2パーティションにインストールに必要なファイルをコピーします。
ここで、FIVAを再起動し、インストール画面に戻ります。メニューからPuppy Linuxをブートします。Puppy Linuxが起動すると、接続さていたCD-ROMドライブは切り離されてしまい、再認識できません。
そこで、Puppy Linuxはマウント可能なディスクからシステムファイルを自動的に探し出し、起動してくれます。この辺りは、Puppy Linuxの凄いところですね。つまり、第2パーティションにコピーしたファイルで起動してくれるわけです。まぁ、システムファイルはUSBドライブに置いたままでも良いのですが、第2パーティションにあった方が都合が良かったのでw。
Puppy Linuxが起動したら、通常のディスクへのインストール操作で、第1パーティションにインストールすれば、OKです。必要があれば、追加で、日本語環境強化キット?をインストールしても良いと思います。これがあれば、日本語入力が可能です。
ちなみに、このFIVAに、更に、Skypeをインストールして使っていたのですが、2014年8月頃に、Linux版Skypeのサポート範囲が変わってしまい、Skypeの旧版が使えなくなってしまって、今は、放置状態w
[1] Puppy Linux 日本語版
当初は、FDでNetBSDをインストールするつもりだったのですが、NetBSDのGENERICカーネルが、PCMCIAの起動でフリーズしてしまうので、Puppy Linuxに変更したのです。どうやら、最近のNetBSDは、PCMCIAとCardBusのプログラムを共用させているらしく、PCMCIAを上手く認識できないようです。カーネルを再構築すれば、PCMCIAを使えるらしいので、後で試してみたいと思います。
さて、インストール用にUSBドライブ(もしくは、USBメモリ)そして、起動可能なPCカードCD-ROMドライブ(例えば、Panasonic KXL-830AN-S)を用意します。また、USBドライブには、インストールCDに含まれるファイルをコピーしておきます。
USBドライブとCD-ROMドライブを接続後、インストールCDをセットし、CASSIOPEIA FIVA MPC-102S(以下、単にFIVAという)を起動して、BIOS画面に移行します。ここで、PCカードから起動するように変更し保存、そして、起動します。
Puppy Linuxインストール画面が表示されたら、コマンド入力モードへ移行します。そして、FIVAの内蔵ドライブをfdisk及びmkfsコマンドで、3パーティションに分けてフォーマットします。第1パーティションにOS本体をインストール。第2パーティションをデータ用として使い、第3パーティションをスワップ領域に使います。
次に、USBドライブを適当なマウントポイントにマウントし、第2パーティションにインストールに必要なファイルをコピーします。
ここで、FIVAを再起動し、インストール画面に戻ります。メニューからPuppy Linuxをブートします。Puppy Linuxが起動すると、接続さていたCD-ROMドライブは切り離されてしまい、再認識できません。
そこで、Puppy Linuxはマウント可能なディスクからシステムファイルを自動的に探し出し、起動してくれます。この辺りは、Puppy Linuxの凄いところですね。つまり、第2パーティションにコピーしたファイルで起動してくれるわけです。まぁ、システムファイルはUSBドライブに置いたままでも良いのですが、第2パーティションにあった方が都合が良かったのでw。
Puppy Linuxが起動したら、通常のディスクへのインストール操作で、第1パーティションにインストールすれば、OKです。必要があれば、追加で、日本語環境強化キット?をインストールしても良いと思います。これがあれば、日本語入力が可能です。
ちなみに、このFIVAに、更に、Skypeをインストールして使っていたのですが、2014年8月頃に、Linux版Skypeのサポート範囲が変わってしまい、Skypeの旧版が使えなくなってしまって、今は、放置状態w
[1] Puppy Linux 日本語版
![]() Linux |
インストール奮戦記(第六期)メモ (NetBSD 5.2.2 on Libretto50編)
まだまだ使えるLibretto50(メモリ:32M)ということで、NetBSD 5.2.2をFDとネットワークカード(PCMCIA)でインストールしてみました。今回は、CUIベースでの使用することを考えていたため、X11はインストールしませんでした。最近のNetBSDでは、VGAドライバが同梱されておらず、makeしなければならないらしいです。
まずは、FDイメージをダウンロードしてきます。ddコマンドでイメージファイルを書き込むわけですが、Windows上からも書き込めるように、コマンドプロンプトから利用できるddコマンドもあります。私は、Puppy Linux上でFDイメージを書き込みました。
インストールFDが出来たところで、ネットワークカードをネットに繋いで待ち構えますw。FDをFDドライブに挿入して起動すると、イメージデータが読み込まれ、3枚目で終了します。
そして、インストール用OSが起動する直前に、FDドライブのPCカードとネットワークカードを交換します。こうしないと、ネットワーク経由でのインストールは出来ないらしい。なお、PCカードを抜き差しするときには慌てず、気をつけて行ってください。
ネットワークカードが認識され、インストール用OSが起動すると、メニューが表示され、インストール操作に入ります。具体的な操作は、NetBSDと似ているFreeBSDに関する参考ウェブページ[2]を読んでおくと良いと思います。
また、ディスク領域の割り当てについても、参考ウェブページ[1]が役立つと思います。インストール元を決める画面が表示されたら、HTTPかFTPを選び、ネット設定を行うと、必要なファイルをネット経由でダウンロードしてインストールしてくれます。
必要なパッケージソフトのインストールは参考ウェブページ[3],[4]あたりが役にたちます。pkgsrc.tar.gzをダウンロードし、パッケージ情報を更新しておけば、後は、必要なパッケージのディレクトリに移動し、make、make installで殆どOKです。
私は、自宅LAN内DNSサーバを運用してみたくて、Libretto50にNetBSDをインストールし、更に、BIND9をインストールしています。LAN内のネットワーク機器が増えてきているので、DNSサーバがあると、結構、便利です
[参考ウェブページ]
[1] ディスク領域の割り当て: FreeBSD ハンドブック 第 3章FreeBSD のインストール (8.X 以前の場合)
[2] FreeBSD のインストール (8.X 以前の場合): FreeBSD ハンドブック 第 3章FreeBSD のインストール (8.X 以前の場合)
[3] NetBSD 解説/index:
[4] Japan NetBSD Users' Group:
[5] Libretto20にNetBSDをインストールしたときのメモ
[6] 2006-04-05 NetBSD, Debian memo | seechickenの日記
(telnetdの設定)
[7] NetBSD ユーザーの追加 - 夢見る大学生のはてな日記:
まずは、FDイメージをダウンロードしてきます。ddコマンドでイメージファイルを書き込むわけですが、Windows上からも書き込めるように、コマンドプロンプトから利用できるddコマンドもあります。私は、Puppy Linux上でFDイメージを書き込みました。
インストールFDが出来たところで、ネットワークカードをネットに繋いで待ち構えますw。FDをFDドライブに挿入して起動すると、イメージデータが読み込まれ、3枚目で終了します。
そして、インストール用OSが起動する直前に、FDドライブのPCカードとネットワークカードを交換します。こうしないと、ネットワーク経由でのインストールは出来ないらしい。なお、PCカードを抜き差しするときには慌てず、気をつけて行ってください。
ネットワークカードが認識され、インストール用OSが起動すると、メニューが表示され、インストール操作に入ります。具体的な操作は、NetBSDと似ているFreeBSDに関する参考ウェブページ[2]を読んでおくと良いと思います。
また、ディスク領域の割り当てについても、参考ウェブページ[1]が役立つと思います。インストール元を決める画面が表示されたら、HTTPかFTPを選び、ネット設定を行うと、必要なファイルをネット経由でダウンロードしてインストールしてくれます。
必要なパッケージソフトのインストールは参考ウェブページ[3],[4]あたりが役にたちます。pkgsrc.tar.gzをダウンロードし、パッケージ情報を更新しておけば、後は、必要なパッケージのディレクトリに移動し、make、make installで殆どOKです。
私は、自宅LAN内DNSサーバを運用してみたくて、Libretto50にNetBSDをインストールし、更に、BIND9をインストールしています。LAN内のネットワーク機器が増えてきているので、DNSサーバがあると、結構、便利です
[参考ウェブページ]
[1] ディスク領域の割り当て: FreeBSD ハンドブック 第 3章FreeBSD のインストール (8.X 以前の場合)
[2] FreeBSD のインストール (8.X 以前の場合): FreeBSD ハンドブック 第 3章FreeBSD のインストール (8.X 以前の場合)
[3] NetBSD 解説/index:
[4] Japan NetBSD Users' Group:
[5] Libretto20にNetBSDをインストールしたときのメモ
[6] 2006-04-05 NetBSD, Debian memo | seechickenの日記
(telnetdの設定)
[7] NetBSD ユーザーの追加 - 夢見る大学生のはてな日記:
![]() UNIX |
チャット仮想空間ソフト「MikuMikuOnline」サーバのビルド&インストールに挑む !( on Vine Linux 6.2 with gcc 4.5.4)
以前からMikuMikuDanceデータを使ってチャット仮想空間ソフト「MikuMikuOnline」には興味があった。オープンソースで仮想空間を実現できるソフトに「OpenSim」があるが、やはり、多彩なMikuMikuDanceデータを使える「MikuMikuOnline」の方が魅力的に思えた。
「MikuMikuOnline」は、Windows上で動作するサーバ・クライアントソフトであるが、サーバは、Linux等でビルドできるという書き込みを以前に見て、今回、Vine Linux 6.2をインストールした後に、「MikuMikuOnline」も、インストールしてみることにした。
以下は、OS以外でソースコードをダウンロードしてビルドしたソフトの一覧である。ちなみに、m4,openssl,openssl-staticは、Vine LinuxのパッケージでもOKでした。後述しますが、Vine Linuxのパッケージgcc、boost関連は古くて歯が立ちませんでした(汗)。cryptopp 5.6.2は、特に問題なく、ビルドできている。
cryptopp562.zip
boost_1_58_0.tar.gz
gcc-4.5.4.tar.gz(本来は、gcc 4.6以上を推奨)
libelf-0.8.13.tar.gz
mpfr-3.0.1.tar.gz(+ patch)
gmp-5.0.2.tar.gz
mpc-0.9.tar.gz
最初は、Vine Linux 6.2のパッケージでビルドを開始したのですが、参考ウェブページ[1]と同じエラーで止まってしまいました。該当箇所のソースコードを閲覧すると、どうやら、ラムダ式でプログラミングされている部分でエラーが出ている。
Vine Linux 6.2のgcc(Ver. 4.4.5)は古くて、ラムダ式に対応していないため、gcc-4.5以上にバージョンアップする必要が出てきた。gcc 4.5のC++0xサポート状況は参考ウェブページ[2]で確認した。
gcc 4.5のビルドは参考ウェブページ[3]を参考に作業を進めた。gmp, mpfr, mpcのビルドについては、参考ウェブページ[3]の通りに上手くいった。そして、configureを実行することになるが、ここからが、参考ウェブページ[3]とは異なる。ppl関連でエラーが出たため、--without-pplを付けている。
libelf関連のエラーが出ていた。Vine Linux 6.2のヘッダ構成の中にelf.hは存在するのだが、gccのconfigureが想定する位置と違うらしい。仕方なく、libelf-0.8.13.tar.gzをsourceforgeからダウンロードしてビルドした。
結果、以下のように、configureを実行した。
../gcc-4.5.4/configure --enable-languages=c,c++,fortran --with-mpc=/usr/local --with-gmp=/usr/local --with-mpfr=/usr/local --with-elf=/usr/local --without-ppl
これでlibelf関連のエラーが消えた。また、以下のエラーが残ったが、こちらは無視しても、問題ないらしい。
conftest.c:10:28: error: ac_nonexistent.h: No such file or directory
conftest.c:10:28: error: ac_nonexistent.h: No such file or directory
これで、gcc 4.5.4をビルドする準備が整ったので、make bootstrap、そして、make install。
export LD_LIBRARY_PATH=/usr/local/lib; make bootstrap
make install
やっと、ここからMikuMikuOnlineのサーバのビルド作業に入ります。実は、ここで、ミスっていました。MikuMikuOnlineサーバのソースコードの改行コードを変換して作業していたのですが、間違って、文字コードをUTF-8BOMにしていたらしく、コンパイル時にマクロ展開エラーが出まくりでした(苦笑)。気付いて、UTF-8Nに直したら、マクロ展開エラーは消えました。以下のコマンドで、MikuMikuOnlineサーバのビルドを行います。
export LD_LIBRARY_PATH=/usr/local/lib; make
しかし、boost関連でエラーが発生。boostのバージョンが古いらしいためと判り、予め用意していたboost 1.55.0をビルドする。boostのビルドは、かなり時間がかかったため、挑戦する人は注意しましょう。
export LD_LIBRARY_PATH=/usr/local/lib; ./bootstrap.sh
何度か、トライ&エラーを繰り返したが、MikuMikuOnlineサーバのビルドで、std::addressof関連のエラーが消えない…。Googleに活躍してもらって、参考ウェブページ[4]に「Fixed detection of C++11 std::addressof with g++ (#10982)」の一文を発見。
確かに、boost/asio/detail/config.hppの__GXX_EXPERIMENTAL_CXX0X__関連箇所をさっと眺めてみると、gcc4.5.xでも、std::addressofが使えるように見える。もしかすると、別の箇所で変なマクロが不具合を起こしているのかもしれない。
また、かなり後の調査でわかったことだが、MikuMikuOnlineサーバは、gcc 4.6でビルドの実績があるらしい(参考ウェブページ[5])。とりあえず、gcc 4.5.4で進められるところまでやってみることにした。
もしかすると、gcc4.6.x & boost <1.58.0の何れかの組み合わせでも、「Fixed detection of C++11 std::addressof with g++ (#10982)」に起因するエラーが出ていた可能性があるね。
boost 1.58.0をダウンロードして、以前と同じ要領で、再びビルドする。
b2コマンドに-aオプション(Causes all files to be rebuilt)を付けて強制インストール。このオプションを付けないとヘッダファイルが更新されない。
./b2 -a toolset=gcc cxxflags=-fPIC library-path=/usr/local/lib -j1 --prefix=/usr/local --without-mpi
再び、MikuMikuOnlineのサーバのビルド作業に戻る。今度は、かなり、コンパイルが進み、std::addressof関連箇所は通過しているため、boostのバージョンアップは正解だったらしい。
ここで、エラー「error: ‘nullptr’ was not declared in this scope」発生。どうやら、gcc 4.5.xでは、nullptrが未サポートらしい。これが、gcc 4.6以上推奨の理由らしい。
しかし、gccのバージョンアップは手間が掛かるのでw、参考ウェブページ[7]のように、-Dnullptr=0で逃げてみることにした。以下のように、MikuMikuOnlineのサーバのMakefileのCXXFLAGSを書き換えている。
CXXFLAGS = -v -g -ggdb -Wall -std=gnu++0x -Dnullptr=0 -I/usr/include/cryptopp -I/usr/local/include
ビルドの途中に、パッケージopenssl,openssl-staticをインストールした。libsslが不足していたためである。一緒にopensshも更新しないと、sshが利用できなくなるので、注意が必要である。
こうして、かなりの日数を費やし、MikuMikuOnlineサーバのビルドは完了した。
早速、/etc/sysconfig/iptablesを書き換えて、所定のポート番号を開放する。
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport XXXXX -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport XXXXX -j ACCEPT
サーバを起動し、クライアントと接続してみたが、できなかった(汗)。
ログに残された「ERROR: unsupported version」を頼りに、boostが怪しいと当たりを付けて、検索してみると、Boost/serializationで、serializationのバージョンチェックを行っており、そのクライアント・サーバ間のバージョン違いのためにエラー発生らしい…。困った。
とりあえず、開発元に連絡を入れて、boost 1.58.0でビルドしたクライアントをリリースしてくれるかどうか、尋ねてみようと思う。ビルドまで出来たところまでは良かったが、接続できなかったのは非常に残念…。
[参考ウェブページ]
[1]MikuMikuOnlineをCentOS上で動かそうとしてみた(途中)
[2]Status of Experimental C++0x Support in GCC 4.5
[3]Vine Linux に gcc4 をインストールする
[4]boost Version 1.58.0
[5]リリース詳細: 0.3.5 () - Miku Miku Online - SourceForge.JP
[6]日記/2012-09-14/MikuMikuOnlineサーバの構築方法 - PukiWiki
[7]C++0x の nullptr ~GCC であれれ?
[8]MikuMikuOnline wiki
「MikuMikuOnline」は、Windows上で動作するサーバ・クライアントソフトであるが、サーバは、Linux等でビルドできるという書き込みを以前に見て、今回、Vine Linux 6.2をインストールした後に、「MikuMikuOnline」も、インストールしてみることにした。
以下は、OS以外でソースコードをダウンロードしてビルドしたソフトの一覧である。ちなみに、m4,openssl,openssl-staticは、Vine LinuxのパッケージでもOKでした。後述しますが、Vine Linuxのパッケージgcc、boost関連は古くて歯が立ちませんでした(汗)。cryptopp 5.6.2は、特に問題なく、ビルドできている。
cryptopp562.zip
boost_1_58_0.tar.gz
gcc-4.5.4.tar.gz(本来は、gcc 4.6以上を推奨)
libelf-0.8.13.tar.gz
mpfr-3.0.1.tar.gz(+ patch)
gmp-5.0.2.tar.gz
mpc-0.9.tar.gz
最初は、Vine Linux 6.2のパッケージでビルドを開始したのですが、参考ウェブページ[1]と同じエラーで止まってしまいました。該当箇所のソースコードを閲覧すると、どうやら、ラムダ式でプログラミングされている部分でエラーが出ている。
Vine Linux 6.2のgcc(Ver. 4.4.5)は古くて、ラムダ式に対応していないため、gcc-4.5以上にバージョンアップする必要が出てきた。gcc 4.5のC++0xサポート状況は参考ウェブページ[2]で確認した。
gcc 4.5のビルドは参考ウェブページ[3]を参考に作業を進めた。gmp, mpfr, mpcのビルドについては、参考ウェブページ[3]の通りに上手くいった。そして、configureを実行することになるが、ここからが、参考ウェブページ[3]とは異なる。ppl関連でエラーが出たため、--without-pplを付けている。
libelf関連のエラーが出ていた。Vine Linux 6.2のヘッダ構成の中にelf.hは存在するのだが、gccのconfigureが想定する位置と違うらしい。仕方なく、libelf-0.8.13.tar.gzをsourceforgeからダウンロードしてビルドした。
結果、以下のように、configureを実行した。
../gcc-4.5.4/configure --enable-languages=c,c++,fortran --with-mpc=/usr/local --with-gmp=/usr/local --with-mpfr=/usr/local --with-elf=/usr/local --without-ppl
これでlibelf関連のエラーが消えた。また、以下のエラーが残ったが、こちらは無視しても、問題ないらしい。
conftest.c:10:28: error: ac_nonexistent.h: No such file or directory
conftest.c:10:28: error: ac_nonexistent.h: No such file or directory
これで、gcc 4.5.4をビルドする準備が整ったので、make bootstrap、そして、make install。
export LD_LIBRARY_PATH=/usr/local/lib; make bootstrap
make install
やっと、ここからMikuMikuOnlineのサーバのビルド作業に入ります。実は、ここで、ミスっていました。MikuMikuOnlineサーバのソースコードの改行コードを変換して作業していたのですが、間違って、文字コードをUTF-8BOMにしていたらしく、コンパイル時にマクロ展開エラーが出まくりでした(苦笑)。気付いて、UTF-8Nに直したら、マクロ展開エラーは消えました。以下のコマンドで、MikuMikuOnlineサーバのビルドを行います。
export LD_LIBRARY_PATH=/usr/local/lib; make
しかし、boost関連でエラーが発生。boostのバージョンが古いらしいためと判り、予め用意していたboost 1.55.0をビルドする。boostのビルドは、かなり時間がかかったため、挑戦する人は注意しましょう。
export LD_LIBRARY_PATH=/usr/local/lib; ./bootstrap.sh
何度か、トライ&エラーを繰り返したが、MikuMikuOnlineサーバのビルドで、std::addressof関連のエラーが消えない…。Googleに活躍してもらって、参考ウェブページ[4]に「Fixed detection of C++11 std::addressof with g++ (#10982)」の一文を発見。
確かに、boost/asio/detail/config.hppの__GXX_EXPERIMENTAL_CXX0X__関連箇所をさっと眺めてみると、gcc4.5.xでも、std::addressofが使えるように見える。もしかすると、別の箇所で変なマクロが不具合を起こしているのかもしれない。
また、かなり後の調査でわかったことだが、MikuMikuOnlineサーバは、gcc 4.6でビルドの実績があるらしい(参考ウェブページ[5])。とりあえず、gcc 4.5.4で進められるところまでやってみることにした。
もしかすると、gcc4.6.x & boost <1.58.0の何れかの組み合わせでも、「Fixed detection of C++11 std::addressof with g++ (#10982)」に起因するエラーが出ていた可能性があるね。
boost 1.58.0をダウンロードして、以前と同じ要領で、再びビルドする。
b2コマンドに-aオプション(Causes all files to be rebuilt)を付けて強制インストール。このオプションを付けないとヘッダファイルが更新されない。
./b2 -a toolset=gcc cxxflags=-fPIC library-path=/usr/local/lib -j1 --prefix=/usr/local --without-mpi
再び、MikuMikuOnlineのサーバのビルド作業に戻る。今度は、かなり、コンパイルが進み、std::addressof関連箇所は通過しているため、boostのバージョンアップは正解だったらしい。
ここで、エラー「error: ‘nullptr’ was not declared in this scope」発生。どうやら、gcc 4.5.xでは、nullptrが未サポートらしい。これが、gcc 4.6以上推奨の理由らしい。
しかし、gccのバージョンアップは手間が掛かるのでw、参考ウェブページ[7]のように、-Dnullptr=0で逃げてみることにした。以下のように、MikuMikuOnlineのサーバのMakefileのCXXFLAGSを書き換えている。
CXXFLAGS = -v -g -ggdb -Wall -std=gnu++0x -Dnullptr=0 -I/usr/include/cryptopp -I/usr/local/include
ビルドの途中に、パッケージopenssl,openssl-staticをインストールした。libsslが不足していたためである。一緒にopensshも更新しないと、sshが利用できなくなるので、注意が必要である。
こうして、かなりの日数を費やし、MikuMikuOnlineサーバのビルドは完了した。
早速、/etc/sysconfig/iptablesを書き換えて、所定のポート番号を開放する。
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport XXXXX -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport XXXXX -j ACCEPT
サーバを起動し、クライアントと接続してみたが、できなかった(汗)。
ログに残された「ERROR: unsupported version」を頼りに、boostが怪しいと当たりを付けて、検索してみると、Boost/serializationで、serializationのバージョンチェックを行っており、そのクライアント・サーバ間のバージョン違いのためにエラー発生らしい…。困った。
とりあえず、開発元に連絡を入れて、boost 1.58.0でビルドしたクライアントをリリースしてくれるかどうか、尋ねてみようと思う。ビルドまで出来たところまでは良かったが、接続できなかったのは非常に残念…。
[参考ウェブページ]
[1]MikuMikuOnlineをCentOS上で動かそうとしてみた(途中)
[2]Status of Experimental C++0x Support in GCC 4.5
[3]Vine Linux に gcc4 をインストールする
[4]boost Version 1.58.0
[5]リリース詳細: 0.3.5 () - Miku Miku Online - SourceForge.JP
[6]日記/2012-09-14/MikuMikuOnlineサーバの構築方法 - PukiWiki
[7]C++0x の nullptr ~GCC であれれ?
[8]MikuMikuOnline wiki
![]() MikuMikuDance(MMD)情報 |
インストール奮戦記(第六期)レポート (Vine Linux 6.2編)
久し振りに、Vine Linuxのインストールを行いました。
対象機種は、ThinkPad i Series 1200 (1161-264)(CPU:Celeron/500MHz RAM:192MB)です。第1パーティションにはVine Linux 4.2がインストールされています。万が一に備え、安定動作している4.2をそのまま残して、6.2を第2パーティションにインストールする方向。GRUBは4.2にインストール済みのものを使いました。
インストール対象の第2パーティションには、Vine Linux 5がインストールしてあったのですが、インストールした時期が遅かったために大して使わずに、早々とVine Linux 6の登場となりましたw。
元々、メモリが少ない機種なので、インストールはテキストモードで行いました。とりあえず、テキストモードでOS起動できるまでは、簡単に出来ました。
問題は、X Window(X11)の設定でした。デフォルトの状態では、もちろん、X11は起動しませんw。VineLinux5のときは、VineLinux4のxorg.confをそのままコピーしたら、簡単に起動できたのですが、今回は、そうはいかなかった(汗)。
X11を起動しても、画面が全く表示されない状態になってしまいます。ネット検索を駆使し、何とか、似た機種のxorg.confを参考にさせて頂いて、xorg.confをカスタマイズしました。
画面表示されない、あるいは、画面にノイズが入る理由は、siliconmotionビデオドライバが変更されたためのようです。デフォルトでは、VRAMクロックが157Mhzに設定されているため、これを120MHzに設定すると収まるようです。
---xorg.confから抜粋 BEGIN---
Section “Device”
Identifier “Configured Video Device”
Driver “siliconmotion”
BusID “PCI:0:2:0″
Option “mclk” “120000Khz”<===ポイント
EndSection
---xorg.confから抜粋 END---
また、何故か、頻繁にキータイプ時にチャタリングが発生したため、以下のように設定したが、あまり改善されていない。他に何か問題が残っているのかもしれない。
---xorg.confから抜粋 BEGIN---
Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
Option "CoreKeyboard"
Option "XkbRules" "xorg"
Option "XkbModel" "jp106"
Option "XkbLayout" "jp"
Option "AutoRepeat" "500 5" <===ポイント
Option "XKbDisable" <===ポイント
EndSection
---xorg.confから抜粋 END---
VineLinux6では、デフォルトのままだと、デスクトップにrootでログインできないように設定されています。これをできるように/etc/pam.d/gdmを設定後、再起動します。
# 一行目の設定を下記のようにコメントアウト
# auth required pam_succeed_if.so user != root quiet
以上で、初期のセッティングが完了。バージョンが上がったにも関わらず、OS起動が早い感じですね。そして、GUIが、何となく、渋くて格好良くなったと思います(ココ重要w)。
[参考にさせて頂いたウェブページ]
[1] ThinkPad i Series 1200 1161-72J squeeze 動作確認 | The End Of Civilization
[2] Vine Linux 6
対象機種は、ThinkPad i Series 1200 (1161-264)(CPU:Celeron/500MHz RAM:192MB)です。第1パーティションにはVine Linux 4.2がインストールされています。万が一に備え、安定動作している4.2をそのまま残して、6.2を第2パーティションにインストールする方向。GRUBは4.2にインストール済みのものを使いました。
インストール対象の第2パーティションには、Vine Linux 5がインストールしてあったのですが、インストールした時期が遅かったために大して使わずに、早々とVine Linux 6の登場となりましたw。
元々、メモリが少ない機種なので、インストールはテキストモードで行いました。とりあえず、テキストモードでOS起動できるまでは、簡単に出来ました。
問題は、X Window(X11)の設定でした。デフォルトの状態では、もちろん、X11は起動しませんw。VineLinux5のときは、VineLinux4のxorg.confをそのままコピーしたら、簡単に起動できたのですが、今回は、そうはいかなかった(汗)。
X11を起動しても、画面が全く表示されない状態になってしまいます。ネット検索を駆使し、何とか、似た機種のxorg.confを参考にさせて頂いて、xorg.confをカスタマイズしました。
画面表示されない、あるいは、画面にノイズが入る理由は、siliconmotionビデオドライバが変更されたためのようです。デフォルトでは、VRAMクロックが157Mhzに設定されているため、これを120MHzに設定すると収まるようです。
---xorg.confから抜粋 BEGIN---
Section “Device”
Identifier “Configured Video Device”
Driver “siliconmotion”
BusID “PCI:0:2:0″
Option “mclk” “120000Khz”<===ポイント
EndSection
---xorg.confから抜粋 END---
また、何故か、頻繁にキータイプ時にチャタリングが発生したため、以下のように設定したが、あまり改善されていない。他に何か問題が残っているのかもしれない。
---xorg.confから抜粋 BEGIN---
Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
Option "CoreKeyboard"
Option "XkbRules" "xorg"
Option "XkbModel" "jp106"
Option "XkbLayout" "jp"
Option "AutoRepeat" "500 5" <===ポイント
Option "XKbDisable" <===ポイント
EndSection
---xorg.confから抜粋 END---
VineLinux6では、デフォルトのままだと、デスクトップにrootでログインできないように設定されています。これをできるように/etc/pam.d/gdmを設定後、再起動します。
# 一行目の設定を下記のようにコメントアウト
# auth required pam_succeed_if.so user != root quiet
以上で、初期のセッティングが完了。バージョンが上がったにも関わらず、OS起動が早い感じですね。そして、GUIが、何となく、渋くて格好良くなったと思います(ココ重要w)。
[参考にさせて頂いたウェブページ]
[1] ThinkPad i Series 1200 1161-72J squeeze 動作確認 | The End Of Civilization
[2] Vine Linux 6
![]() Linux |
広告バナー