How to upgrade subsonic on Fedoraにも書いてあったりするのだけど、あまり初心者向けじゃない。単純なアップグレードだったら、単純にアンインストールして、新しいバージョン入れれば良いんだろうけど、ユーザー情報とかも移行したいじゃん?!
完全な形でDBを移行して、アップグレードってのが理想だったが、うまくいなかった。だけど、まあ完全に一から設定し直すよりはましになったので、一応手順をメモ。
Subsonicのデータベースは
sourceforge.net/apps/mediawiki/subsonic/index.php?title=Database
上記サイトに、詳細が載っているが、http://<yourserver>:[port]/[context_path]/db.view
の画面で見ることが可能だ。
例として
http://192.168.x.x:xxxx/subsonic/index.view
がSubsonicへのアクセスURIだったら、
http://192.168.x.x:xxxx/subsonic/db.view
に遷移することで見ることができる。
この画面でSQL Queryをそのまま書いて「OK」を押下すれば、実行される。select文ならともかく、insert、update、deleteも発行できて、正常なら何もメッセージは出ない。コミットもそのままされてしまうので、ロールバックとか、無理。
select * from CUSTOM_AVATAR
select * from INTERNET_RADIO
select * from MUSIC_FILE_INFO
select * from MUSIC_FOLDER
select * from PLAYER
select * from PLAYER_TRANSCODING
select * from PODCAST_CHANNEL
select * from PODCAST_EPISODE
select * from ROLE
select * from SYSTEM_AVATAR
select * from TRANSCODING
select * from USER
select * from USER_RATING
select * from USER_ROLE
select * from USER_SETTINGS
select * from VERSION
主要なテーブルは、先のサイトにあるとおり。デフォルトとして登録されているテーブルも多いので、実際は MUSIC_FOLDER、USER、USER_SETTINGSの3つぐらいじゃないかな・・・とりあえず、移行したいテーブルのデータをエクセルか何かで貼り付けて、保存しておく。そこから、
insert into USER values ('test', 'enc:xxxxxxxxxxxxxxxxxxxxxxxxxxx', '107667', '5535', '25333', 'TRUE', 'xxxxxxxx@mail.xxx');
みたいなinsert文を作って、バージョンアップした後に、 db.view画面からそのinsert文を実行させれば、めでたく移行できる。複数のSQL文もセミコロンで区切れば、一括で実行できる。adminとかは既に登録されているレコードに対しては、update文に置き換える。主キーが重複するものを登録しようとしても
Violation of unique constraint $$: duplicate value(s) for column(s)
$$: SYS_PK_50
と出てしまうので、登録する前にはどういう状態になっているかを確認しておいたが良い。ちなみに custom_avatarは画像ファイルがBINARYで保存しているので、表示された文字列をINSERT文に置き換えて、そのまま移行するのは無理。BOOLEAN型は’TRUE’、‘FALSE’でも大丈夫。しかし、NULLを登録する場合は、‘‘だと駄目で、NULLと置き換える必要がある。
あと、必要なものとしてはsubsonicディレクトリ配下にあるsubsonic.properties。これはそのまま持ってくればいいのかと思ったが、差分を見ると新しい項目や削られた項目がある(?)。そこら辺は差分確認しながら、自分でマージするしかない。といっても、必要なのはIndexString(索引の頭文字)ぐらいかな・・・そもそも、直に設定ファイルいじるよりは、設定画面ごとキャプチャーしておくか、テキストでもっておいて、画面から再設定した方が安全かつ、確実ですね。
実際、warを展開するにあたっては、
sudo rm -r /var/subsonic/
sudo rm -r /var/lib/tomcat6/webapps/subsonic
とバッサリ削除。
新しいwarファイルを /var/lib/tomcat6/webapps/
配下にセット。
sudo mkdir /var/subsonic
sudo mkdir /var/subsonic/playlists
sudo mkdir /var/subsonic/transcode
sudo chown -R tomcat6:tomcat6 /var/subsonic
sudo chown -R tomcat6:tomcat6 /var/lib/tomcat6/webapps/subsonic.war
sudo ln -s /usr/bin/ffmpeg /var/subsonic/transcode/ffmpeg
sudo ln -s /usr/bin/lame /var/subsonic/transcode/lame
そしたら、
sudo service tomcat6 restart
tomcat再起動。
上記に作成しておいたinsert、update文を db.viewで実行。そして、設定画面で再設定。 subsonic.propertiesの差分を確認して完了。アップグレードの手順って感じじゃなくなってしまったが、まあいいや。
ちなみにライセンスはアップグレードしても、再度登録しなおせば有効。