2013年8月2日金曜日

[解説] SupersonicまたはSubsonicストリーミングサーバ DB破壊と復旧

中華パッドやAndroidの話題以外でBlogを書くのは久々だったりしますが…:)

私は自宅のNASの音楽データをsupersonicというsubsonic音楽サーバのクローンソフトウェアを使って、外出先でもストリーミングで聞けるようにしている。通勤の音楽はもとより、子守の時の童謡であるとか、アンパンマンの歌(泣)とか、プリキュアの主題歌(泣)とか、そういうのも携帯端末の容量気にせず、とりあえず電波の届き具合だけ気にしたらどこでも聞けるわけです。

いや、別にプリキュアのCDの紹介をしたいわけではなく…。
ローソンにスタンプ押しに行かされてますが(泣)

Subsonic/Supersonicとは何か


個人用の音楽ストリーミングサーバです。

再生はWebインタフェースで聞けるほか、Android用にはSubsonic純正クライアントUltrasonicという機能強化版(フリー)があって、出先のスマートフォンやタブレットからも聞けてとても便利。家族で共有するようなことがあれば、複数の人がチャットすることだってできる。しないけど。

Ultrasonicは超オススメ。まだベータ版で時々不具合起こすし、デザインがまだ今ひとつなところもありますが。オリジナルのSubsonicクライアントを超えています。

Ultrasonic, a sophisticated subsonic client.



Web画面はこんなの


Supersonic 4.7 beta web UI.

かっこいいです。というかごちゃごちゃしすぎです。iTunesから何か学んで欲しいですね(棒)。

Supersonicはその派生版のフリー実装…実際にはSubsonicのプレミアム版でしか使えない機能とかそのへんの蓋を(多分)外しただけなんですが。

  • LinuxBoxの中の音楽ファイル(動画ファイルも可能)をリアルタイムトランスコードしてストリーム再生(クライアントはAndroid、WebUI、iOS、などなど沢山
  • プレイリスト管理
  • 曲のMP3タグやカバーアートをWebUIから管理
  • Last.fm(audioScrobbler)連携
  • ジュークボックス機能(サーバのオーディオデバイスから音声出力。選曲は遠隔端末なんかから)
  • 音声ファイルのアップロードとダウンロード…などなど

まったくいかがわしいソフトですねw Javaで書かれたWebアプリのようです(jetty+spring frameworkというくみあわせらし)。

そのサーバのインストール方法は…割愛(笑)。ここは自分で調べてやって下さい(単に面倒なだけです)。Ubuntu/DebianあたりだとSubsonicのパッケージはあります。  みんなの大好きなかじられリンゴとか割れた窓用もあります。

もちろんサーバからのストリームは暗号化し、アカウントはパスワードで保護するなど公衆送信とみなされないようにご注意。

形あるものはいつか壊れる

さて…これが最近ぱったりと停止してしまった。

具体的には曲を聞こうとすると10KBほど何かをロードして停止する。

何かってなんやねん(笑)

どうもエラーを示すトレースバックを受信しているようです。サーバ側のログ(/var/supersonic/supersonic_sh.log)あたりを読むと役に立ちそうにないJavaの馬鹿長いだけのエラーログがてんこ盛りで出てきます。しかしなんでJavaアプリのエラーログってこんなに見辛い上に役に立ちそうにない(いや、プロは役に立てるんでしょうけれど)んでしょうか。それはいいとして。とにかくエラーログからどうしたら直りそうなのか見当がつかない。

SQLのクエリが長すぎるとかファイルがデカイとかそんなふうなことが書かれていますが。

要は

管理用DBが壊れたよ

ということらしい。ならそう書けよ…勿体つけやがって。Java嫌い。マジで。そしてPython大好き(偏見です)。

これを復旧しました。

こうします

ヒントはこちら。

[HowTo] Database broken : Import old settings

1. stop subsonic service2. rename the subsonic/db directory3. start subsonic service : a new database is created.
4. open the old subsonic.script file (in the directory you renamed)5. select the lines you want to keep (INSERT INTO MUSIC_FOLDER VALUES... INSERT INTO USER VALUES... INSERT INTO USER_ROLE VALUES ... INSERT INTO USER_SETTINGS VALUES ...)6. in your subsonic webpage, replace "index.view" with "db.view"7. paste the selected lines
適当訳。


  1. subsonic(またはsupersonic)サーバソフトを停止する
  2. dbディレクトリ(Linuxの場合、 /var/subsonic/db)をリネームする(たとえばdb.savなんかに)
  3. 再度subsonic(またはsupersonic)サーバを起動する
  4. リネームしたdbディレクトリ(例えばdb.sav) に降りて、subsonic.scriptというファイルを開く
  5. 中に、INSERT INTO MUSIC_FOLDER VALUES... INSERT INTO USER VALUES... INSERT INTO USER_ROLE VALUES ... INSERT INTO USER_SETTINGS VALUES ...とか文字列があるので、その中から必要なものだけをコピー・ペーストする(kateとかgeditとかに)
  6. 続いて、起動されたsubsonicのURLの末尾を、通常index.viewとなっているのをdb.viewにして開く
    db.view for administratives
  7. 先ほどコピーした文字列を貼ってクエリ実行する
    たとえばこういう行が要ると思います(パスワードは"*"で隠してます)。
    INSERT INTO ROLE VALUES(1,'admin')
    INSERT INTO ROLE VALUES(2,'download')
    INSERT INTO ROLE VALUES(3,'upload')
    INSERT INTO ROLE VALUES(4,'playlist')
    INSERT INTO ROLE VALUES(5,'coverart')
    INSERT INTO ROLE VALUES(6,'comment')
    INSERT INTO ROLE VALUES(7,'podcast')
    INSERT INTO ROLE VALUES(8,'stream')
    INSERT INTO ROLE VALUES(9,'settings')
    INSERT INTO ROLE VALUES(10,'jukebox')
    INSERT INTO ROLE VALUES(11,'share')
    INSERT INTO USER VALUES('admin','enc:********',0,0,0,FALSE,NULL)
    INSERT INTO USER VALUES('hogehoge','enc:**********',93901677617,120659602,0,FALSE,'hogehoge@gmail.com')
    INSERT INTO USER_ROLE VALUES('admin',1)
    INSERT INTO USER_ROLE VALUES('admin',2)
    INSERT INTO USER_ROLE VALUES('admin',3)
    INSERT INTO USER_ROLE VALUES('admin',4)
    INSERT INTO USER_ROLE VALUES('admin',5)
    INSERT INTO USER_ROLE VALUES('admin',6)
    INSERT INTO USER_ROLE VALUES('admin',7)
    INSERT INTO USER_ROLE VALUES('admin',8)
    INSERT INTO USER_ROLE VALUES('admin',9)
    INSERT INTO USER_ROLE VALUES('admin',10)
    INSERT INTO USER_ROLE VALUES('admin',11)
    INSERT INTO USER_ROLE VALUES('hogehoge',1)
    INSERT INTO USER_ROLE VALUES('hogehoge',2)
    INSERT INTO USER_ROLE VALUES('hogehoge',3)
    INSERT INTO USER_ROLE VALUES('hogehoge',4)
    INSERT INTO USER_ROLE VALUES('hogehoge',5)
    INSERT INTO USER_ROLE VALUES('hogehoge',6)
    INSERT INTO USER_ROLE VALUES('hogehoge',8)
    INSERT INTO USER_ROLE VALUES('hogehoge',9)
    INSERT INTO USER_ROLE VALUES('hogehoge',10)
    
  8. subsonicの通常URLを管理者権限でアクセスする
  9. 足らない設定を補う。ユーザを設定する。音楽フォルダを設定して再スキャンする。
  10. 復活!
良かったです。これで自宅サーバから外出先でアンパンマンの歌が聞けます。娘に文句言われなくて済みます。ありがとうございました。


0 件のコメント:

コメントを投稿