ラベル icecast の投稿を表示しています。 すべての投稿を表示
ラベル icecast の投稿を表示しています。 すべての投稿を表示

2016/04/18

さくらVPSのUbuntuをアップグレード

Ubuntu 12.04 LTS のままずっと使ってきてて、「14.04にアップグレードできます」というのがずっと出てきてたから、面倒になって14.04にしちゃいました。

データやらスクリプトやらのバックアップを取るのが大変。せっせとbox.comに移して、えいや!っとやっちゃいました。

Ubuntuのアップグレードって、結構失敗した経験があって怖かったんだけど、そこは進歩したんだな。何の問題もなく、いろいろすっきりしましたとさ。

気になっていたのは

1) crontab
2) codecs
3) xrdp
4) davfs2

など。

1と2は無問題。3と4はうまく環境が引き継げませんでした。

3) xrdp

ログイン画面までは出てくるんだけど、ログインに失敗するもんだから、ここの過去のエントリをたどって

■ Ubuntu Cmasa「xrdp再び」
http://ubun2.wiki.fc2.com/wiki/xrdp%E5%86%8D%E3%81%B3

にたどりつき、vino-preferencesを見る。(必要かどうか分からないけど)設定を見直す。で、うまくいかない。

さらに先人の知恵をたどり、「14.04」というキーワードで次のサイトにたどり着いた。

■ watariseinの日記「Windows7からUbuntu 14.04にリモートデスクトップ接続」
http://watarisein.hatenablog.com/entry/2014/12/29/145024

で、取り敢えず正常にログインできるようになりました。

4) davfs2

これはまだ解決してません。

追記:
解決。次の1行を実行し再度 mount 実行したらすんなり。

sudo chmod u+s /sbin/mount.davfs

※下記のエントリに記述
http://qubuntu.blogspot.jp/2016/03/boxcom-davfs2.html


追記:
5) icecast

うまく動かない。一番面倒そうなところがダメになってる。


6) fstab

特に問題なしでした。

----

Apr.18, 2016(追記:Apr.18, 2016)

2013/01/23

icecast2 で複数のストリームを流す(下)


(上)の続きです。

取り敢えず試みたけど失敗しました、あるいは必要ありませんでした、という作業の記録を残します。


(1)icecast2 の名前を変えたコピーを複数作って起動  → 失敗


これは Windows で Shoutcast の DNAS を複数起動する時に使った手です。首尾良く、こんなブログエントリが見つかりました。ただ、Windows のそれと違って設定のファイルがあちこちに散乱しているので、ホントに手間が掛かりました。

■ 別ポートでIcecastサーバーを複数起動する
http://se-suganuma.blogspot.jp/2009/09/icecasticecast.html

手取り足取りとても丁寧に解説されていて、思わずひゃっほーい!と声を上げて試してみたのですが、起動してみるといきなり最初の1文字も表示せずに止まってしまいます。よーく読むとこれ、 icecast2 ではなくて無印 icecast だったのです。icecast2 ではこういう需要にデフォルトで対応したんでしょうね。

あ、それから起動スクリプトは Ubuntu 12.04 だと /etc/init.d にありましたよ。



(2)複数のユーザでそれぞれ icecast2 を起動  → 失敗


以下は、長くなるのですが…本筋には全く関係ない作業ログです。自分が悪いのかもしれないけど、トラブルの渦に巻き込まれ、冷や汗かきながら復活を試みました。ローカルのマシンなら CD/DVD/USB memory でブートしてあれこれリカバリーしようと思うんだろうけど、安い VPS だからそれもままならず。何とかキーボードとマウスでできる方法で解決するしかなかったのです。


linux のユーザを複数作ってそれぞれで icecast2 を動かしたら複数ストリーム出せるんじゃないかと思って実際にやってみたら、見事に失敗(必要ないプロセスなので詳細は割愛)。おまけに後始末でとんでもない荷物を背負ってしまいます。useradd の時に /home にディスクスペースを割り振らなかったり(だってHDDの容量が 100GB しかないし!) -o オプションで複数のユーザに同じ gid を割り振ったり、仕組みがよく分かってないのにむちゃなことをしたのがいけなかったのかな…とか、いまはとても反省しています。

で、結局のところ要らなくなったユーザをバッサリ userdel し、再起動したところから悪夢が始まります。

lightdm のログイン画面では、なぜかそのゾンビアカウント以外のアカウントを選択できなくなっていて、ゲストログイン以外のログインができなくなってしまったのです。なぜに? なんでやねーん!

仕方ないのでリブートして SSH でコンソールログインして、ユーザの強制削除を試みました。ところがゾンビを userdell しようとしても「ログインしている」とうそをつくのでうまく削除できない。本当にログインしている時の対処法である「まず当該ユーザのプロセスを kill」しようにもそもそも存在していないのだから、もうよちよちユーザとしてはお手上げです。


■ Linuxでユーザを削除出来なかった時の対処
http://rfs.jp/server/コマンドライン/userdeltec.html


泣きたいとまでは思わなかったけど、これじゃぁPCいじりが趣味の人以外にはお勧めできない…と思いました(普通のデスクトップユーザはそもそもこういうトラブルに巻き込まれることはないだろうけど)。

次に、 lightdm から gdm にしてみました。つか、gdm は入ってなかったからインストール。

■ How do I make GDM the default display manager?
http://askubuntu.com/questions/151334/how-do-i-make-gdm-the-default-display-manager

$ sudo apt-get install gdm

続けて、

$ sudo dpkg-reconfigure gdm

必要な操作(gdm への切り替え)をした後、

$ sudo reboot

あるいは、


■ How do I switch from LightDM to GDM?
http://askubuntu.com/questions/152256/how-do-i-switch-from-lightdm-to-gdm


$ sudo service lightdm stop
$ sudo service gdm start

でもよさそうです。



余談ですが…SSH ではなく「ログイン画面でCtrl+Alt+F1を押して仮想コンソールを起動する」なんて技があったということは、ついさっき知りました。

■ Ubuntu12.04にログインできなくなった時の対処法
http://blog.shironoo.org/2012/05/01/230



で、晴れてログインすると確かにほかのユーザ(存在している俺のアカウント)でログインできるようにはなりましたが、アカウントマネジャをみると「自分のアカウント」の名前が自分のではなくゾンビの名前になっていて、またまたびっくり! 「ロック解除」してそいつを削除しようと思ったけどロック解除のボタンが押せず(てか、それ自分自身だし!)、しかたないからアカウントマネジャを sudo で起動してみたけど、それでもロック解除させてくれないし、ゾンビの影も払拭できない地獄のような状況に陥ってしまいました。


途中、そのゾンビユーザ名の文字列を含んでいるファイルを / から再帰検索して *.conf の類から pico でガッツリ削除したりとかやったんだけど、どうしても「自分のアカウント」の名前がゾンビのまんま。

■ 特定の文字列を含むテキストファイルを検索するLinuxコマンド
http://labo.tsuchinokopro.com/2011/05/630/

$ find ./ -name "*.*" -exec grep -l "検索対象文字列" {} \;

とまぁ、3時間ほどあれこれもがいていたら、取り敢えず lightdm のログイン画面でできないように設定されていた「他のユーザ名も入力できるようにする」というのを enable できることが分かりました。「デフォルトユーザ以外のユーザ名でログインできない」原因は、この設定だったようです。つか、なんでそれがデフォルトになったの??? って感じなんですけど…いつからそんな風でしたっけ???

気を取り直してディスプレイマネジャを lightdm に戻して、試してみました。

■ winbind ユーザも lightdm からログインする
http://d.hatena.ne.jp/dayflower/20120607/1339050566


こちらによると、/etc/lightdm/lightdm.conf を開いて [SeatDefaults] セクションに下記のような設定を付け足すそうであります。

[SeatDefaults]
greeter-show-manual-login=true

それで何とか普通にログインできる状態にまでは回復しました。本当に、救いの神でした。感謝感謝です。

その後、アカウントマネジャで「ロック解除」のボタンが押せるようになっているのを発見し、「自分のアカウント」の名前をゾンビでなく自分自身のユーザ名に変更するところまではできました。でも lightdm のログインでデフォルトユーザを選択してパスワードを入れても「パスワードが一致しない」といわれてログインできません。まぁ、基本的に起動しっぱなしなのだからそう面倒なことではないけれど、気分悪いっつぅか、どのファイルをいじればいいんだろう…って思っちゃいました。

その部分はまだ解決していないのです。

スクリプト類のバックアップ取って、再インストールしようかな…とかまた安易な解決に走ることを考えていたり…。


----
(Jan.23, 2013)

2013/01/22

icecast2 で複数のストリームを流す(上)

とある、春に咲き春に散る花の名前を冠した会社の VPS を1年契約して、Ubuntu 12.04 の上で icecast2 サーバを稼働させています。

複数の異なるストリームを出したいと思っていたのですが、ちっともうまくいかず、2カ月の苦闘を経てやっときょう成功しました。超遠回りしたけど実はすごく簡単で、なぜもっと隅から隅まで設定を確認しなかったのか後悔しています。2カ月前、一番最初に試したことが一番正しい解決方法だったのに、おそらくはたった1つの設定ミスで、壮大な遠回りをしてしまいました。

その愚かな記録です。

----

サウンドカードがない VPS のマシンなので、サウンドシステムに依存しない(つまりはパイプでデータをやり取りする形で)仕組みを作っていくことにしました。大雑把にいうと次のような感じでパイプをつないでいます。

外の世界

icecast2

 ezstream  ←  ffmpeg  ←  (音を鳴らすアプリ)   … 1つのスクリプト

このうち、icecast2 はバックグラウンドで動いていて、ezstream までがクライアント系のスクリプトになっています(それぞれパイプで接続)。「音を鳴らすアプリ」は、ffmpeg に PCM の音データをパイプで渡せるものなら何でもOK。本当は aacplus を使いたいんだけど、stdin を直接 icecast2 なり shoutcast server なりに送り込んでくれる、しかもサウンドシステムにがなくても動いてくれるクライアントが ezstream 以外に見つけられなかったので、しかたなくこういう形をとっています。

(抜粋)

# 引数で実行オプション指定
# bitrateout
# portout
# channels

# プレイヤーからstdinでデータを受け取るエンコーダーの設定
# pipe:0, pipe:1 ともに "-" でよいはず

cmdEncoder="avconv -i pipe:0 -y -vn -f mp3 -b ${bitrateout} -ac ${channels} -ar 44100 pipe:1"

# icecast2 にデータを渡す ezstream のコマンド
# 入力ソースや出力先ポート、マウントポイント
# ezstream.xml で設定
cmdStreamer="ezstream -c /home/foo/icecast/ezstream_${portout}.xml"

# stdoutに PCM データを出力するプレイヤーなら
# 何でも音源になる
cmdSource="(プレイヤー実行のコマンド)"

# 単にパイプでつなぐだけwww
$cmdSource | $cmdEncoder | $cmdStreamer


で、「複数のストリームを出したい」というのは、音源は同じだけどビットレートが違うものを準備したいということでして、お恥ずかしながらこの2カ月ほど悪戦苦闘していました。

icecast2 に関しては、俺みたいなしろーとにも分かりやすい日本語で書かれたまとまった説明があーんまりなく、しかたなく英語のチュートリアルを渡り歩く感じ。自信のない読解力によると「icecast2 は複数のストリームを出せる」と書いてあり、/etc/icecast2/icecast.conf にポートとマウントポイント、ストリームの名前などを複数設定して、別々のクライアントから接続すれば何の問題もなくストリーミングを開始できるはずでした。

ところが…クライアント側のターミナルには「Failed writing」と表示が出て、icecast2 への送出に失敗してしまいます。icecast.xml などの設定を見直しても見直しても、やはりエラーが起こって、2つめ以降のクライアントを接続できません。正直、途方に暮れました。Shoutcast server のことも考えたけど、結局 stdin が使えるソースクライアントが見つからず icecast2 でやるしかないんだろう…という結論は変わりませんでした。

で、icecast.xml の「受けポート」の設定はこんな風。

<listen-socket> <port>54321</port> <!-- <bind-address>127.0.0.1</bind-address> --> <shoutcast-mount>/live24</shoutcast-mount> </listen-socket> <mount> <mount-name>/live24</mount-name> <username>source</username> <password>hackmenot</password> <stream-name>Live Streaming 24</stream-name> </mount>
普通に常識的に処理すればよさそうです。bind-address というのをまだよく理解してませんが、クライアントが localhost の範囲内ならコメントを外す必要もないんでしょう。

問題はここからだったんです。つか、icecast の設定ばかりに気を取られていたら、実は問題は ezstream の設定の方にあったんです。これにきょうのきょうまで気付いていませんでした。

実は ezstream.xml の冒頭 ezstream タグの次の行に、ストリームの URL を指定する行があるのですが、ここの

<url>http://localhost:54321/stream</url>
の設定がいけなかったようなんです。本当は、

<url>http://localhost:54321/live</url>
じゃなきゃいかんかった、ということです。マウントポイントの問題です。1つめのストリームはマウントポイントをデフォルトの /stream にしていたのですが、2つめ以降は何か別のものに変えなきゃいかんわけでして(無論、1つめから変えちゃっても構わないでしょ)、ということにも正直気付いてませんでした。ポート変えたらマウントポイントは同じでいいんでしょ?って勝手に思ってました。

さらにいけなかったのは、gedit のスコープの問題です(と他者のせいにする)。普通俺はこういう設定ファイルを編集する時に gedit を使うのですが、このファイルを見直す時に真ん中から下の方ばかり見て、この先頭の方の行をまったくチェックしていなかったのです。gedit のスコープ(見えてる範囲)から外れている最上部にそんな重要な項目があるという認識がまったくなかったのです。

ちゃんちゃん。全部、俺が悪いんです。石投げないでください。

で、これだけのことなら記録に残すことはなかったと思うのですが、ここまでやってきた試行錯誤の後始末でとんでもないトラブルを起こしてしまい(あるいは巻き込まれてしまい)、これは(まったく何の役にも立たないだろうけど)記録しとかなきゃ!と思ったので、(下)に続きます。

----

追伸:
今後の to do...

・24kbps とかなら aacplus のストリームにしたい
  ↓
・shoutcast を使いたい
  ↓
・darkice が必要
  ↓
・サウンドアダプタなしの環境で pulseaudio / jack を使いたい

ほかには…

・リレーとはいかに使用するものか追求
・外部のソースクライアントからデータを受ける方法を追求
・ストリームを再生する時のポートとマウントポイントの関係を知ること

----
(Jan.22, 2013)

楽天モバイルを台湾で使ってみた

GWに、久しぶりに台湾に赴きました。コロナ禍の間に延命していた台湾大哥大と中華電信の回線のうち中華電信の方を失効させてしまい(なぜ中華電信だけ失効したんだろう)、今回の滞在は台湾大哥大と楽天モバイルの2回線で賄うことにしました。テザリングでAndroidスマホ1台とiPad、Ma...