Virtual Volumes View(VVV)はユーザ各自がDVDに焼き込んだデータを管理するためのツールであり、特定のファイルが既にバックアップ済みであるかを確認したり、どのディスクに書き込んだのかを簡単に追跡できることがその特長だ。例えば定期的に多量のデータをDVDにバックアップしているユーザの場合、シリアル番号によるディスク管理が最も手軽な方法となるだろう。そしてDVDに焼き込んでおいた中から特定のビデオや画像が必要となった場合は、VVVの検索機能を用いて該当するディスクの管理番号を検出して、バックアップディスクの山の中から目的のディスクを取り出せばいいのだ。
VVVのパッケージは、Ubuntu、openSUSE、Fedoraのリポジトリには収録されておらず、本稿の執筆にあたっても後述する手順にて、64ビット版Fedora 9マシンを用いたソースからのアプリケーションビルドを行っている。なおVVVのコンパイル手順を解説したガイドには、VVVの依存関係およびKDevelopを用いたビルド法が説明されており、ここでの依存関係を満たすには、GUI構築用のwxWidgetsとwxGTK、DVDインデックス情報の格納用リレーショナルデータベースとして用いるFirebird、ID3情報の抽出とインデックス化をするid3libを別途入手する必要がある。なお私が入手したソースにはVVVのバグフィックスに関係するid3lib 3.8.3のコピーが同梱されていたので、ビルド時にはid3libとのリンクを再設定しなくてはならなかった。またビルド手順の説明によると、静的にリンクされた実行ファイルの作成オプションを用いることで、システムにある他のライブラリ群への依存度を低めることができるそうだ。この方法で作成した実行ファイルの用途としては、VVVをUSBメモリに収めて複数のシステム間で使用するといった場合に適しているだろう。
前述したソフトウェア群のうち、wxGTKそのものがwxWidgetsに依存しているので、依存関係の管理機能を有すディストリビューションであれば、この両者は同時にインストールできるはずだ。wxGTKを入手するには、Ubuntu Hardy用のパッケージ、openSUSE 11用の1-Click Install、Fedora 9用の標準リポジトリのいずれかを利用すればいい。Firebirdについては現在Classicビルド扱いとされているバージョン2.0.xを使うべきで、これはアプリケーションからリレーショナルデータベースを直接開けるよう設計されており、データベースサーバを別途用意する必要がなくなる。またFirebirdを入手するにあたり、Ubuntu Hardy用のパッケージおよびopenSUSE 11用の1-Click Installは用意されているが、Fedora 9のリポジトリには収録されていない。私が入手したのは64ビット版ビルドのFirebirdバージョン2.0.4である。
Firebirdバージョン2.0.4の使用する標準C++共有ライブラリに関しても、必要なバージョンをインストールしなくてはならない。つまり現行のFedora 9は既に/usr/lib64/libstdc++.so.6というように新バージョンに移行しているのだが、前述したFirebirdはlibstdc++.so.5を必要とするのだ。こうした標準C++ライブラリの古いバージョンは、Fedora 9の場合compat-libstdc++パッケージに収録されている。具体的なインストール操作は下記のように進行する(stdc++ライブラリのバージョンがマッチしない場合はエラーメッセージが表示される)。
# tar xzvf /FromWeb/FirebirdCS-2.0.4.13130-1.amd64.tar.gz # cd FirebirdCS* FirebirdCS-2.0.4.13130-1.amd64]# ./install.sh Firebird classic 2.0.4.13130-1.amd64 Installation /opt/firebird/bin/gsec: error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or directory FirebirdCS-2.0.4.13130-1.amd64]# yum install compat-libstdc++ ... FirebirdCS-2.0.4.13130-1.amd64]# ./install.sh ... Please enter new password for SYSDBA user: himitsu Install completed
$ sudo vi /usr/include/wx-2.8/wx/string.h
... about line 822 ...
wxChar& operator[](int n)
{ return wxStringBase::at(n); }
// wxChar& operator[](size_type n)
// { return wxStringBase::at(n); }
src]$ export LDFLAGS="$(wx-config --libs --debug=no) -lid3 -L/opt/firebird/lib -lfbembed "
src]$ export CXXFLAGS="$(wx-config --cxxflags --debug=no) -DIBPP_LINUX"
src]$ g++ -c *.cpp $CXXFLAGS $LDFLAGS
src]$ cd ./data_interface
data_interface]$ g++ -c *.cpp $CXXFLAGS $LDFLAGS
$ cd ../ibpp/
ibpp]$ cd ./core
core]$ vi _ibpp.h
///////////////////////////////////////////////////////////////////////////////
#include <string.h>
#ifndef __INTERNAL_IBPP_H__
#define __INTERNAL_IBPP_H__
core]$ g++ -c all_in_one.cpp $CXXFLAGS $LDFLAGS
core]$ cd ../../
src]$ gcc `find . -name "*.o"` -o vvv $CXXFLAGS $LDFLAGS
src]$ mkdir ~/vvv-catalogs
src]$ cp -av ./vvv ~/vvv-catalogs
`./vvv' -> `/home/ben/vvv-catalogs/vvv'
src]$ cd ..
VVV-0.9-src]$ cp -av VVV.fbk ~/vvv-catalogs
`VVV.fbk' -> `/home/ben/vvv-catalogs/VVV.fbk'
