Chinachu + NUC + Ubuntu + PT3で録画サーバ

NUC+PT3の写真

夏コミ(C86)で買ったChinachu本(ちなつの動く城)に,NUCで録画サーバについての記事があって面白そうだったので作ってみました.

Chinachu : <https://chinachu.moe/>
ちなつの動く城:<https://rec.booth.pm/items/35194>


目次

  1. 買ったもの
  2. 組み立て
  3. OSのインストール
  4. 録画環境の構築
  5. Chinachuのインストール
  6. 使ってみての感想など

1. 買ったもの

製品 値段(2014/9/14くらい)
NUC(Celeron N2820) 16179円 (アマゾン)
メモリ(CFD D3N1600Q-L4G) 4590円(アマゾン)
2.5″ HDD(TOSHIBA MQ01ABD050) 4600円(ドスパラ)
PT3 9990円(ドスパラ)
mPCIe -> PCIe x1変換(KZ-B24) 5380円(アマゾン)
合計 40739円

その他,持っていなければ

  • カードリーダー(BCASも)
  • 分配・分波器
  • スペーサー(PT3についてる白いやつ)
  • アクリル板(今回は手を抜いて使っていませんが)

などが必要になると思います.(合わせて5000円くらい?)
5万円くらいあればNUCで1から録画サーバが構築できそうです.

2. 組み立て

買ってきたパーツをつけていきます.
まずは,メモリー,mPCIe変換,HDDです.
今回購入したNUCはmPCIeに無線モジュールが標準搭載されているので,それを外して変換モジュールをつけます.外した無線モジュールはグレーの袋の上に乗ってるやつです.
メモリーやmPCIeへの付け方は,斜めに差し込んだ後,ボードと水平になるように押さえると装着できます.このタイプは初めてだったので最初壊れないのか心配だった.

mPCIe

メモリー,mPCIe,無線モジュール

HDDは標準の入れ物がいい感じだったのでそこにつけています.

HDD

もともとのケースはPT3をつけるとなると使えないので,カバー部分は使わないこととしました.それ以外の部分(HDDつけてるところ)はそのまま使えそうなので活用します.そのうちファンの上部にアクリル板をちゃんとつけないと...

NUC

PT3には,余っていたスペーサー(白いやつ)をつけて自立するようにしました.ブラケットは邪魔なので外します.

PT3+スペーサー

3. OSインストール

OSをインストールします.今回はUbuntu Server 14.04.1をインストールしました.
インストールは,Universal USB InstallerでUSBでインストールしました.
Intelのページには,Ubuntuの場合Legacy BootをDisableにしろと書いてありますが,自分がインストールした際はUEFI Bootでインストールするとインストール処理はうまくいきますがその後OSがブートしませんでした.(BIOSバージョンは最新にしています)
よってUEFI BootをDisableにしてLegacy BootのみEnableでUSBをブートしてインストールしてLegacy BootでOSがブートされるようにしました.
# 別の現象ですが色々あるようですね http://www.slideshare.net/syuu1228/intel-nuc
# あとLegacy Bootにすることによる弊害があるかどうか何も調べてないです...

4. 録画環境の構築

pt3ドライバ,recpt1, arib25のインストールです.ここは先人の知恵をコピペですんなり完了でした.あとカードリーダの必要パッケージをインストール.

5. Chinachuのインストール

Chinachuをインストールします.詳細はGithubのページを参照してください.
<https://github.com/kanreisa/Chinachu/wiki/Installation>

以下の4ステップでインストールが完了してとても簡単です.インストール(Full)では必要なライブラリのコンパイルが行われるため時間がかかりました.

  1. 必要パッケージのインストール
  2. Gitからクローン
  3. インストールスクリプトを実行
  4. 設定ファイルの編集

6. 使ってみての感想など

NUCについて
コンパクトなところはとても素晴らしいと思う.録画サーバとしてはmini itxサイズで1台運用中だけど2分の1程度のスペースで済みそう.ただ,OSのインストールでうまくいかなかったあたり,まだ使っている人は少ないのかなと感じた.

Chinachuについて
インストールが簡単でいいですね.見た目,検索,キーワード予約など機能面も揃っていて良いと思いました.(主に現在使っているfoltiaと比較して)
まだ全く使い込めてないのでしばらく様子見

以上です.

カテゴリー: サーバ | コメントする

docomo Developer supportの知識Q&Aを使ってみた

日本の首都は?

知識Q&A「日本の首都は」

トルコの人口は?

知識Q&A「トルコの人口は?」

参議院の任期は?

知識Q&A「参議院の任期は?」

ゆるゆりの主人公は?

知識Q&A「ゆるゆりの主人公は?」

一般常識はいけそうですね.

カテゴリー: 雑記 | コメントする

ピアのチケット先行受付システムが怪しかった話

ラ◯ライブのチケット最速先行申し込みはピアのシステムを使っているようなんですが,そのシステムがどうも怪しい,,,申込時に入力するシリアルが正しかったかどうかユーザが確認する方法がないらしい...

チケットの申し込みはブルーレイに付いているシリアル番号を入力して申し込みを行う必要があります.そのシリアル番号はオークション等に多く出品されていて,ブルーレイを買うより安上がりなのでいくつか購入してました.

オークションではブルーレイに入っているシリアル番号を取引連絡用の掲示板を通して教えてもらうことで送料がかからず取引を終わらせることができます.
ここで一つ確かめたくなったのは
不正なシリアルだった場合,ちゃんとわかるんだよね?
ってことでした.詐欺も不安ですが,一番ありえるのは写し間違えとかがありそうで怖いなと.まぁ申し込みが完了せずにエラーになるんだろうと思いながら,申し込みできないことを確認するために適当なシリアルを指定して申し込みを行ってみたんですがちゃんと「申込完了通知」がメールで来てしまった...
申し込みの説明には以下の記述があるんだけど...

5.申込完了
お申込完了のメッセージが表示されますと、お申し込みは完了です。これで正常に受付が終了したものとなります。
※申込完了メールが配信されます

可能性としてたまたま,正規のシリアル番号にあたっていたなんてこともあるんだろうけど相当確率低いだろうし,正確なことは利用者にはわからんということで問い合わせ先へ質問しました.
その結果を要約すると以下です.

【質問】
シリアル番号が正しく入力されていることの確認方法を教えて下さい.
【回答】
受付期間中に正しいシリアルナンバーで申込完了できているかの確認はできません.誤ったシリアル番号で申し込みを行った場合でも申し込み自体は完了となります.入力ミスが不安な場合には再度申し込みを行ってください.

だそうです.おかしくないか?間違って入力しちゃった人はどうすんの?
と思ったんですがまぁこれ以上時間使うのもめんどくさいし,オークションで取引するときはちゃんとシリアルが書かれた紙を郵送してもらうことで対処しました.

しかし本日,抽選結果発表だったのですが,一度試した適当なシリアルで申し込んだ申し込みに対して「落選」通知がきました.これはどういうことだ?

  1. 適当に入力したシリアル番号がたまたま正規のものだった
  2. シリアルのチェックはシステム側で行っておらず,ちゃんと抽選が行われ結果が帰ってきた
  3. シリアルが正しくないため抽選対象からは除外され,「落選」というかたちでユーザに通知した

1.は可能性があるけど英数字10桁のシリアルでそれはありえないと思う.
2.はチケット申し込みシステムとして成り立ってないし
ということは3.が一番ありえるのかなと思うんだけど,コレって間違えて入力しちゃった人が可哀想すぎないか?説明では「正常に受付が終了」ってあるから申込完了画面がでたら大丈夫だとおもうよね?一応2度入力させるようにしてはいるけどコピペしてる人多いと思う.
というかそれ以上に問題だと思うのが,適当な文字列でもそれが不正だったことは最後まで確認できないってことで,つまりオークションで適当な文字列を売ってもばれないってことだと思う.詐欺し放題ですね.

以上です.

カテゴリー: 雑記 | コメントする

rails consoleを起動しようとしたらreadlineがないとエラーが出た場合

ソースからインストールしたrubyを使ってRuby on Rails環境を構築した際に,rails consoleを起動したら以下のエラーが表示された.

$ rails c
/usr/local/lib/ruby/1.9.1/irb/completion.rb:9:in `require': no such file to load -- readline (LoadError)
        from /usr/local/lib/ruby/1.9.1/irb/completion.rb:9:in `<top (required)>'
        from /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.2.11/lib/rails/commands/console.rb:3:in `require'
        from /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.2.11/lib/rails/commands/console.rb:3:in `<top (required)>'
        from /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.2.11/lib/rails/commands.rb:38:in `require'
        from /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.2.11/lib/rails/commands.rb:38:in `<top (required)>'
        from script/rails:6:in `require'
        from script/rails:6:in `<main>'

readlineがないよということなので,ライブラリをインストール.
(ubuntu環境です.)

$ sudo apt-get install libreadline-dev

再びconfigure, make, make installすればいけるとおもいきや
以下のようにする必要がありました.

$ cd src/ruby-1.9.2-p290/ext/readline
$ ruby extconf.rb
$ make
$ sudo make install

以上で完了です.
無事にrails consoleが起動出来ました.

$ rails c
Loading development environment (Rails 3.2.11)
irb(main):001:0>
カテゴリー: Ruby, サーバ | タグ: , , | コメントする

[Ruby] httpのGETリクエスト、書き方いっぱいあるけど中身どうなってんの?(特異メソッド)

前記事「[Ruby] httpのGETリクエスト」の続き.内部実装を見てみました.(ruby層だけ)

まず,特異メソッドな方たちから.
まぁ,冒頭にこんなコメントがあるのでそういうことです.

#
# short cut methods
#
  • get(uri) -> String
  • get(host, path, port = 80) -> String
def HTTP.get(uri_or_host, path = nil, port = nil)
  get_response(uri_or_host, path, port).body
end
  • get_print(uri) -> ()
  • get_print(host, path, port = 80) -> ()
def HTTP.get_print(uri_or_host, path = nil, port = nil)
  get_response(uri_or_host, path, port) {|res|
    res.read_body do |chunk|
      $stdout.print chunk
    end
  }
  nil
end

ということで,HTTP.get_responseが呼ばれてるだけでした.
じゃあ,HTTP.get_responseはどうなってるのかというと以下です.

  • get_response(uri) -> Net::HTTPResponse
  • get_response(host, path = nil, port = nil) -> Net::HTTPResponse
def HTTP.get_response(uri_or_host, path = nil, port = nil, &block)
  if path
    host = uri_or_host
    new(host, port || HTTP.default_port).start {|http|
      return http.request_get(path, &block)
    }
  else
    uri = uri_or_host
    new(uri.host, uri.port).start {|http|
      return http.request_get(uri.request_uri, &block)
    }
  end
end

HTTP.get_responseでは,,,

  1. 引数pathがnil or false以外なら(hostが渡された場合)
    1. Net::HTTPインスタンスを引数のhost, portから生成してhttpセッションをstart
      (portがnil or falseならデフォルトのポート番号を指定)
    2. request_getで指定されたpathに対してリクエスト
  2. 引数pathがnil or falseなら(URIオブジェクトが渡された場合)
    1. Net::HTTPインスタンスを引数のURIオブジェクト(uri.host, uri.port)から生成してhttpセッションをstart
    2. request_getでuri.request_uriに対してリクエスト

get_response(host, path = nil, port = nil) -> Net::HTTPResponse
こう書いてあるとpath, portは省略可で,pathが指定されなかった場合に’/’が使われたりするもんなのかなと思ってたけど,中を見るとpathがnilの場合URIが指定されたものとして扱っててそう言うもんではないとわかった.
次は,インスタンスメソッドを見てこの先を追って行きたい.
長くなったし別記事にする.

カテゴリー: Ruby | コメントする

[Ruby] httpのGETリクエスト

GETしてボディ部分を標準出力に表示する.

$ ruby -v
ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux]

その1

  • get(uri) -> String
require 'net/http'
require 'uri'

uri = URI.parse('http://kimson.name/')

puts Net::HTTP.get(uri)

その2

  • get(host, path, port = 80) -> String
require 'net/http'

puts Net::HTTP.get('kimson.name', '/')

その3

  • get_print(uri) -> ()
require 'net/http'
require 'uri'

uri = URI.parse('http://kimson.name/')

Net::HTTP.get_print(uri)

その4

  • get_print(host, path, port = 80) -> ()
require 'net/http'

Net::HTTP.get_print('kimson.name', '/')

その5

  • get_response(uri) -> Net::HTTPResponse
require 'net/http'
require 'uri'

uri = URI.parse('http://kimson.name/')

res = Net::HTTP.get_response(uri)
puts res.body

その6
get_response(host, path = nil, port = nil) -> Net::HTTPResponse

require 'net/http'

res = Net::HTTP.get_response('kimson.name', '/')
puts res.body

その7

  • start(address, port = 80, proxy_addr = nil, proxy_port = nil, proxy_user=nil, proxy_pass=nil) {|http| …. } -> object
require 'net/http'

Net::HTTP.start('kimson.name') do |http|
  res = http.get('/')
  puts res.body
end

その8

  • new(address, port = 80, proxy_addr = nil, proxy_port = nil, proxy_user=nil, proxy_pass=nil) -> Net::HTTP
  • get(path, header = nil, dest = nil) -> Net::HTTPResponse
require 'net/http'

http = Net::HTTP.new('kimson.name')

res = http.get('/')
puts res.body

その9

  • new(address, port = 80, proxy_addr = nil, proxy_port = nil, proxy_user=nil, proxy_pass=nil) -> Net::HTTP
  • request_get(path, header = nil) -> Net::HTTPResponse
require 'net/http'

http = Net::HTTP.new('kimson.name')

res = http.request_get('/')
puts res.body

その10

  • new(address, port = 80, proxy_addr = nil, proxy_port = nil, proxy_user=nil, proxy_pass=nil) -> Net::HTTP
  • get2(path, header = nil) -> Net::HTTPResponse
require 'net/http'

http = Net::HTTP.new('kimson.name')

res = http.get2('/')
puts res.body
カテゴリー: Ruby | コメントする

StartComで無料のSSL証明書を取得してみた2(SSL証明書の取得)

これ「StartComで無料のSSL証明書を取得してみた1(アカウントの登録まで)」の続きです。

証明書ですが以下の2つがあれば取得できます。

  • トップレベルドメイン
  • webmasterかpostmasterかhostmaster@hostnameなメールアドレス

まずドメインの登録。validations wizardでDomain name validationを選択して次へ。

StartCom SSL証明書の取得2-1

続きを読む

カテゴリー: サーバ | タグ: | コメントする

StartComで無料のSSL証明書を取得してみた1(アカウントの登録まで)

個人利用なら無料で正規のSSL証明書が取得できるらしいのでやってみました。
http://www.startcom.org/

StartCom SSL証明書の取得1

図1


続きを読む

カテゴリー: サーバ | タグ: , | コメントする

mpeg2-ts : SDT(Service Description Table)の情報を表示

mpeg2-tsファイルからSDTの情報を(一部)表示するプログラムを書いてみた。
SDTに配置される可能性のある記述子はいくつかあるんだけど、その内で
必須となっているサービス記述子のみを表示します。
表示するといってもサービス記述子に含まれる文字列はそのまま、バイト列で
表示するだけです。
いくつかTSファイルを試してみるとSDTにはサービス記述子とロゴ伝送記述子
が多く含まれていたので、ロゴ伝送記述子についても表示できるように改良したい。
続きを読む

カテゴリー: 未分類 | タグ: , | コメントする

ubuntu11.10 : ffmpeg + libfaac + libx264 でTSファイルのエンコード

ffmpegでlibx264を使ってのエンコードは公式パッケージのffmpegではライセンスの問題で使えないので,ソースからインストールかどこかのPPAからもらってくるとかする必要があります.
今回はソースからインストールしてみました.ただのメモです.
インストールに関してはほぼ参考サイトのとおりです.
(参考:最新FFmpegとx264をUbuntu Lucid Lynx 10.04 にインストール

libx264をインストール

$ git clone git://git.videolan.org/x264
$ cd x264
$ ./configure –enable-static
$ make
$ make install

これはいらないかもしれないです.ffmpeg自体に含まれている?
libfaacのインストール.

$ sudo apt-get install libfaac-dev

そしてffmpegをインストール.

$ git clone git://git.videolan.org/ffmpeg
$ cd ffmpeg
$ ./configure –enable-gpl –enable-version3 –enable-nonfree –enable-postproc –enable-libfaac –enable-libx264
$ make
$ make install

これでOK.
あとはプリセットをどうするかですが,これも参考サイトのものを使う.
参考サイト:ffmpeg で TS をできるだけ高画質な mp4 へ変換してみた
参考サイトのスクリプトを少し変えて使わせてもらってます.

  • -vpre -> -fpre プリセットの指定オプションが変更されててサンプルのままだとエラーとなるので変更
  • -s 1960×1080 に変更
  • -vsync 1で音ズレ対策ができるようなので追加
  • -deinterlace を追加.あまりよろしくないようですが手軽にデインターレースできるので

だいたい30分で2.4GByteのTSファイルが400MByte前後になる.
Xeon 3040@1.86GHz(2cores),メモリ1GByteで約3時間.
Core i7 860@2.8GHz (4cores, 8threads),メモリ4GByteで約1時間.

 

カテゴリー: 未分類 | タグ: , , | コメントする