2016年1月21日木曜日

Chinachu + BonDriverProxy + TVTest によるリアルタイム視聴&recbondによる録画機能

この記事は過去に作成した「Chinachu + BonDriverProxy + TVTest によるリアルタイム視聴」の更新版の為、内容はほぼ同一です

  • OSをdebianからCentOSへ変更
  • 録画プログラムを同梱のsampleからrecbondを利用するよう変更

目的

  • Linux(CentOS or Debian)でPT3運用を行いたい
  • Chinachuを利用したルール予約&同時録画機能
  • TVTestでリアルタイム視聴を可能とする

注意事項

  1. Linuxサーバの構築および運用が可能な方を前提にしております
  2. サーバ側ではB25/MULTI2 復号を省略しています
    理由:ストリーミング再生する性能もないため、B25復号が不要(あとは実装できなかった)
    * 追記:sample.cppにb25デコードパッチを適用するとB25復号が可能となりました
  3. 当方の環境は名古屋/BS,CS無しのため、chinachuのチャンネル設定は都度変更してください
    ただしCSの場合sampleがsid指定出来ないため、視聴可否は確認できておりません
  4. ChinachuではEPG取得時に設定された全てのチューナーが利用されます
    よってTVTest視聴中に突然チャンネルが変更される場合があります

    * 追記:Chinachu config.json "noEpg: true"指定にてEPGスキャン除外が出来るようになりました

2015年3月3日火曜日

dockerメモ

ある件にて真面目に検討中
個人的メモとして残す

2015年2月17日火曜日

nginx + LibreSSL ビルド用shell

各種パラメータ類は環境に合わせて変更してください

2014年8月27日水曜日

Chinachu + BonDriverProxy + TVTest によるリアルタイム視聴&録画機能

目的

  • Linux(CentOS or Debian)でPT3運用を行いたい
  • Chinachuを利用したルール予約&同時録画機能
  • TVTestでリアルタイム視聴を可能とする

注意事項

  1. Linuxサーバの構築および運用が可能な方を前提にしております
  2. サーバ側ではB25/MULTI2 復号を省略しています
    理由:ストリーミング再生する性能もないため、B25復号が不要(あとは実装できなかった)
    * 追記:sample.cppにb25デコードパッチを適用するとB25復号が可能となりました
  3. 当方の環境は名古屋/BS,CS無しのため、chinachuのチャンネル設定は都度変更してください
    ただしCSの場合sampleがsid指定出来ないため、視聴可否は確認できておりません
  4. ChinachuではEPG取得時に設定された全てのチューナーが利用されます
    よってTVTest視聴中に突然チャンネルが変更される場合があります

    * 追記:Chinachu config.json "noEpg: true"指定にてEPGスキャン除外が出来るようになりました

2014年7月14日月曜日

Fedora20 + recfriio メモ


久しぶりにFriioが使いたくなり、ハマったのでメモ

make: *** [IoThread.o] エラー 1
$ g++ -O2 -march=native -g -Wall -pthread -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DB25  -DUDP   `pkg-config --cflags glib-2.0`   -c -o IoThread.o IoThread.cpp

In file included from /usr/include/glib-2.0/glib/gtypes.h:37:0,
                 from /usr/include/glib-2.0/glib/galloca.h:34,
                 from /usr/include/glib-2.0/glib.h:32,
                 from IoThread.cpp:12:
RingBuf.hpp: コンストラクタ ‘RingBuf::RingBuf(size_t)’ 内:
RingBuf.hpp:108:51: エラー: expected unqualified-id before numeric constant
   boost::xtime_get(&(node_top[i].timeout), boost::TIME_UTC);

といったエラーが出た

どうやら1.50より仕様がかわり、TIME_UTCを使う場合はTIME_UTC_に書き替えが必要とのこと
http://d.hatena.ne.jp/pyopyopyo/20120712/p1

cp -p RingBuf.hpp RingBuf.hpp.org
cat RingBuf.hpp.org | sed "s/boost::TIME_UTC/boost::TIME_UTC_/" > RingBuf.hpp

2014年4月16日水曜日

Aterm WH832A,WH862A/O IPv6

コミュファのHGW Aterm832AでDHCPv6-PD機能がサポートされていたので、
IX2105で利用できるかテスト
接続構成
      +-----+ LAN1
  WAN |     |------------------------------[PC]
------| HGW | LAN2  Gi0.0          Gi1:1.0
      |     |-------------[IX2105]---------[Server]
      +-----+
IX2105はHGWに対してDHCPv6 Client,
配下のサーバに対してはDHCPv6 Serverとして動作するように設定する

注意

DHCPv6-PD機能はHGWの機能であり、コミュファではサポートしていない(まぁ当たり前か...)
複数台つなぐ場合についても聞いてみたが、答えられないとのこと

繋げばプレフィックスはもらえると思うが、DHCPv6クライアントの要請順番で割り当てプレフィックスが変わりそう
(配下のサーバが固定IPv6設定しているので、うちだと使えない...)

複数プレフィックスが欲しい場合は「IPv6静的ルーティング」で対処する必要があるなーと思ってたら、
http://www.aterm.jp/function/wh862a/list/main/m01_m43.html
※なお、本商品が管理してるprefix内のIPv6アドレスに関するルーティングエントリは、ホスト指定(/128)でのみ追加可能です。

と、(使えない)機能として存在

現状複数DHCPv6クライアントを置く場合は気を付けるしかない(または/128を必要分書くのか?!)

またHGWからは割り当てられたプレフィックスは見れないので、
IX側でshow ipv6 interfaceにて確認するしかなさそう

IX2105 DHCPv6設定

下記は実際にIX2105で利用しているDHCPv6設定の抜粋

・接続Interfaceは適宜修正すること
・dhcp-cl-profile_v6内のsubscriberは対象Interfaceに割り当てられるプレフィックスのホスト部を指定しているが、ここも適宜修正 ・IPv4も利用したい場合も修正(今回はあえて無効)

! NEC Portable Internetwork Core Operating System Software
! IX Series IX2105 (magellan-sec) Software, Version 8.8.22, RELEASE SOFTWARE
!
ipv6 dhcp enable
!
proxy-dns ipv6 enable
!
ipv6 dhcp client-profile dhcp-cl-profile_v6
  option-request dns-servers
  ia-pd subscriber GigaEthernet1:1.0 ::0:0:dead:beef/64
!
ipv6 dhcp server-profile dhcp-sv-profile_v6
  dns-server dhcp
!
interface GigaEthernet0.0
  no ip address
  ipv6 enable
  ipv6 dhcp client dhcp-cl-profile_v6
  no shutdown
!
interface GigaEthernet1:1.0
  no ip address
  ipv6 enable
  ipv6 dhcp server dhcp-sv-profile_v6
  ipv6 nd ra enable
  ipv6 nd ra min-interval 60
  ipv6 nd ra max-interval 180
  ipv6 nd ra other-config-flag
  no shutdown
!

今のところこれで問題なく運用できている
Gi0.0をセグメントA(/64)とした場合、Gi1:1.0には異なるセグメントB(/64)が割り当てられる
せっかく/58をもらってても有効活用できてなかったので、これでまだ遊べる

おまけ

そもそもIX2105であればコミュファのIPv4/v6 DualStack接続&複数プレフィックス利用できるのは言うまでもなく...
wiki

2013年12月17日火曜日

HP ProLiant

 ここからHP ProLiantの各種ファイル落とせるのね。。。知らんかった
http://downloads.linux.hp.com/SDR/downloads/ProLiantSupportPack/

2013年10月30日水曜日

PHP5.6 php-fpm作成時のconfigureメモ

5.6に更新
中身は5.5と代わり有りません

OPcache導入と合わせて整理
・disable-allを使いたかったが、pherやsimplexmlもNGとなるため断念

// yumは5.4流用(一部足りないものがあるはず)
# yum install make gcc gcc-c++ pcre-devel openssl-devel subversion autoconf \
libevent-devel libxml2-devel bzip2-devel libcurl-devel libjpeg-devel libpng-devel \
freetype-devel gmp-devel libmcrypt-devel aspell-devel libxslt-devel expat-devel libtool-ltdl-devel expat-devel libmcrypt-devel

//RPMforgeの設定
// epelでも可
#yum install yum-conf-rpmforge.x86_64
#yum --enablerepo=rpmforge install libmcrypt-devel

これ以外にphalcon,xhprofモジュール導入

CFLAGS="-march=native -O3 -m64 -pipe -fomit-frame-pointer -mfpmath=sse -msse4 -msse4.1 -msse4.2" \
CXXFLAGS="-march=native -O3 -m64 -pipe -fomit-frame-pointer -mfpmath=sse -msse4 -msse4.1 -msse4.2" \
./configure \
--host=x86_64-redhat-linux-gnu \
--build=x86_64-redhat-linux-gnu \
--target=x86_64-redhat-linux \
--program-prefix= \
--prefix=/usr \
--exec-prefix=/usr \
--bindir=/usr/bin \
--sbindir=/usr/sbin \
--sysconfdir=/etc \
--datadir=/usr/share \
--includedir=/usr/include \
--libdir=/usr/lib64 \
--libexecdir=/usr/libexec \
--localstatedir=/var \
--sharedstatedir=/usr/com \
--mandir=/usr/share/man \
--infodir=/usr/share/info \
--cache-file=./config.cache \
--with-libdir=lib64 \
--with-config-file-path=/etc \
--with-config-file-scan-dir=/etc/php.d \
--disable-dba \
--disable-debug \
--disable-rpath \
--disable-short-tags \
--enable-bcmath \
--enable-calendar \
--enable-dom \
--enable-exif \
--enable-fpm \
--enable-ftp \
--enable-gd-native-ttf \
--enable-json \
--enable-libxml \
--enable-mbregex \
--enable-mbstring \
--enable-mysqlnd \
--enable-opcache \
--enable-pdo \
--enable-shmop \
--enable-soap \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-wddx \
--enable-xml \
--enable-xmlreader \
--enable-xmlwriter \
--enable-zip \
--with-curl \
--with-freetype-dir=/usr \
--with-gd \
--with-gettext \
--with-gmp \
--with-iconv \
--with-jpeg-dir=/usr \
--with-kerberos \
--with-layout=GNU \
--with-libexpat-dir=/usr \
--with-libxml-dir=/usr \
--with-mcrypt \
--with-mhash \
--with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-openssl \
--with-pcre-regex \
--with-pic \
--with-png-dir \
--with-png-dir=/usr \
--with-unixODBC=shared,/usr \
--with-xsl \
--with-zlib \
--without-gdbm \
--without-unixODBC \
//ユーザ/グループは適宜修正
--with-fpm-group=nginx \
--with-fpm-user=nginx 
// openSUSEだとdevelがなくてNG
--with-bz2
--with-pspell
 
-----------------------------------------
systemdで起動するためのスクリプト
# cat /usr/lib/systemd/system/php-fpm.service
[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target

[Service]
Type=forking
PIDFile=/var/run/php-fpm.pid
EnvironmentFile=/etc/sysconfig/php-fpm
ExecStart=/usr/sbin/php-fpm -D
ExecReload=/bin/kill -USR2 $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
-----------------------------------------
これで行けるはず
/etc/sysconfig/php-fpmが無いとエラーなのでtouchしてファイルを作成するか、
EnvironmentFileを空にする
またPIDFileはphp-fpm.confと合わせておくか--pidオプションで指定する 
 
 

2013年5月16日木曜日

OpenBlockS 266 BOOTP + tftp 復旧メモ

OpenBlockS 266 ファームウェア 復旧手順でBOOTP + tftpを利用する方法があるが、
これが上手くいかない場合があったのでメモ

ftp://ftp.plathome.co.jp/pub/OBS266/manual/UsersGuide_200.pdf

結論
 Server -> OBSのARP解決ができない為

解決策
 Server側でARPテーブルに手動で書き込む

000A8503B8xx
arp -i eth0 -s 192.168.0.180 00:0a:85:03:b8:xx

これで3時間くらい潰した・・・
OBS -> ServerはARP解決するのに分け分からん・・・

2012年3月28日水曜日

ZFSメモ

pool作成
/dev/sd*でも作成できるのだが、再起動するとデバイス名が変更されるため接続箇所で設定
裏では/dev/sd*にリンクされているのでこれでも作成可能
udevでデバイス名を固定設定するより簡単


//storageはプール名
//raidz=raidz1≒RAID5相当(1本がパリティ)


# zpool create zfspool raidz -f \
/dev/disk/by-path/pci-0000:03:00.0-scsi-0:0:0:0 \
/dev/disk/by-path/pci-0000:03:00.0-scsi-1:0:0:0 \
/dev/disk/by-path/pci-0000:03:00.0-scsi-2:0:0:0 \
/dev/disk/by-path/pci-0000:03:00.0-scsi-3:0:0:0

//raid1+0構成
# zpool create zfspool \
mirror /dev/disk/by-path/pci-0000:03:00.0-scsi-0:0:0:0 \
/dev/disk/by-path/pci-0000:03:00.0-scsi-1:0:0:0 \
mirror /dev/disk/by-path/pci-0000:03:00.0-scsi-2:0:0:0 \
/dev/disk/by-path/pci-0000:03:00.0-scsi-3:0:0:0



---
プールのリスト
# zpool list


---
プールの状態
# zpool status


---
マウントポイントを設定
# zfs set mountpoint=/mnt/archive zfspool
//変更するとマウントが解除されるのでzfs mountが必要


---
zfsをマウント
# zfs mount [-a]


---
プール内のディスクを停止(offline)
# zpool offline storage /dev/~


---
プール内のディスクを起動(online)
# zpool online storage /dev/~

2012年2月12日日曜日

postfix メモ

久しぶりにpostfixでハマったのでメモ

> mechanismを設定していても
smtp_sasl_mechanism_filter = plain,login

> このようなエラーが出て送信できない
status=deferred (SASL authentication failed;
cannot authenticate to server smtp.hogehoge.com: no mechanism available)

>ふと思い出してsasl-plainが足りなかったのでインストール
yum install cyrus-sasl-plain.x86_64 cyrus-sasl-md5.x86_64

なおmechanismを調べるにはEHLOを送信すると応答が帰ってくる
$ telnet smtp.hogehoge.com 587
EHLO kickitout.net
250-smtp.hogehoge
250-PIPELINING
250-SIZE 20971520
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN CRAM-MD5
250-AUTH=PLAIN LOGIN CRAM-MD5
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

2011年12月27日火曜日

mysql-cluster ndb_mgmd 2台構成

サーバ2台でndb_mgmd, ndbd, mysqlを動かした際のメモ

 sv1      sv2
+----------+ +----------+
| ndb_mgmd | | ndb_mgmd |
|  ndbd  | |  ndbd  |
|  mysql | |  mysql |
+----------+ +----------+

*****************************************************

// sv1, sv2共通
# vi /var/lib/mysql-cluster/config.ini

-----------------------------------------------------
# Example Ndbcluster storage engine config file.
#
[ndbd default]
NoOfReplicas= 2
ServerPort = 63132
MaxNoOfConcurrentOperations= 10000
# DataMemory= 1G
# IndexMemory= 64M
TimeBetweenWatchDogCheck= 30000
DataDir= /var/lib/mysql-cluster
MaxNoOfOrderedIndexes= 512

[ndb_mgmd default]
DataDir= /var/lib/mysql-cluster

[ndb_mgmd]
Id = 1
HostName = sv1.kickitout.net

[ndb_mgmd]
Id = 2
HostName = sv2.kickitout.net

[ndbd]
Id = 11
HostName = sv1.kickitout.net

[ndbd]
Id = 12
HostName = sv2.kickitout.net

[mysqld]
Id = 21
HostName = sv1.kickitout.net

[mysqld]
Id = 22
HostName = sv2.kickitout.net

# choose an unused port number
# in this configuration 63132, 63133, and 63134
# will be used
[tcp default]
PortNumber= 63132
-----------------------------------------------------


// sv1 抜粋
# vi /etc/my.cnf

-----------------------------------------------------
[mysql_cluster]
ndb-connectstring = sv1.kickitout.net

[mysqld]
ndbcluster
ndb-connectstring = sv1.kickitout.net

[ndb_mgmd]
config_file=/var/lib/mysql-cluster/config.ini
-----------------------------------------------------


// sv2 抜粋
# vi /etc/my.cnf

-----------------------------------------------------
[mysql_cluster]
ndb-connectstring = sv2.kickitout.net

[mysqld]
ndbcluster
ndb-connectstring = sv2.kickitout.net

[ndb_mgmd]
config_file=/var/lib/mysql-cluster/config.ini
-----------------------------------------------------


*****************************************************

あとはiptablesで該当ポート1186,63132を開けておく
(忘れていてこれにはまった)

起動はndb_mgmd(sv1,sv2) -> ndbd(sv1,sv2) -> mysql(sv1,sv2)で順に行う

2011年12月14日水曜日

gitメモ

git config --add receive.denyCurrentBranch ignore

jsvcメモ

jsvcを必要とする機会があったのでその際のインストールメモ

//最初にopenjdkを準備
# yum install java-1.6.0-openjdk.x86_64 java-1.6.0-openjdk-devel.x86_64

$ wget http://ftp.riken.jp/net/apache//commons/daemon/source/commons-daemon-1.0.8-src.tar.gz
$ tar xzf commons-daemon-1.0.8-src.tar.gz
$ cd commons-daemon-1.0.8-src/src/native/unix/
//configure作成(既にあるけど)
$ ./support/buildconf.sh

//configure
$ CC=gcc44 CXX=g++44 \
CFLAGS="-march=native -O3 -m64 -pipe -fomit-frame-pointer -mmmx -mfpmath=sse -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2" \
CXXFLAGS="-march=native -O3 -m64 -pipe -fomit-frame-pointer -mmmx -mfpmath=sse -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2" \
./configure \
--host=x86_64-redhat-linux-gnu \
--build=x86_64-redhat-linux-gnu \
--target=x86_64-redhat-linux \
--program-prefix= \
--prefix=/usr \
--exec-prefix=/usr \
--bindir=/usr/bin \
--sbindir=/usr/sbin \
--sysconfdir=/etc \
--datadir=/usr/share \
--includedir=/usr/include \
--libdir=/usr/lib64 \
--libexecdir=/usr/libexec \
--localstatedir=/var \
--sharedstatedir=/usr/com \
--mandir=/usr/share/man \
--infodir=/usr/share/info \
--cache-file=./config.cache \
--with-libdir=lib64 \
--with-java=/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/

$ make -j4

//同じ場所にjsvcが作成されるので利用する

2011年11月14日月曜日

D-ITG インストールメモ

訳あってD-ITGを入れる必要があったのでその際のメモ

$ wget http://www.grid.unina.it/software/ITG/codice/D-ITG-2.7.0-Beta2.tgz

$ tar xvf D-ITG-2.7.0-Beta2.tgz

$ CC="gcc" \
GCC="gcc" \
CXX="g++" \
CFLAGS="-march=native -O2 -m64 -pipe -fomit-frame-pointer -mfpmath=sse -msse4 -msse4.1 -msse4.2" \
CXXFLAGS="-march=native -O2 -m64 -pipe -fomit-frame-pointer -mfpmath=sse -msse4 -msse4.1 -msse4.2" \
CPPFLAGS=-I/usr/lib/x86_64-redhat-linux5E/include \
make

//stropts.hが無いといわれたら…

# yum provides */stropts.h
# yum install compat-glibc-headers-2.5-46.2.x86_64


CPPFLAGS=-I/usr/lib/x86_64-redhat-linux5E/include
を追加して再度makeする

2011年10月12日水曜日

AMFフォーマットからPHPで値を抜き出す方法

AMFファイルから必要な値だけ出す方法がなかなか見つからなかったので調べてみた
Zend FrameworkにはZend_Amfがあり、この中にAMFフォーマットを処理する部分があることを
睨んで調べてみたら簡単にできた

これでUstreamのamfが読めるようになった

$url = "http://cdngw.ustream.tv/Viewer/getStream/1/7811835.amf";
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
$result = curl_exec( $ch );
curl_close($ch);

$request = new Zend_Amf_Request();
$request->initialize($result);
var_dump($request->getAmfBodies());

後はdump結果から欲しい値のキーを探して取得するだけ

2011年9月27日火曜日

Ustream Liveの録画メモ

HINATABOCCOを録画した際に、(一部)うまく行ったのをメモ
・CDN(LimeLight)利用時なのでほかは不明
・rtmpdumpを利用
・解析はStreamTransportを利用
(StreamTransport自体はダウンロードできなかった)
・帯域が安定している自宅Linuxサーバより遠隔でダウンロード実施

rtmpdump -v -r "rtmp://ustreamvip.fc.llnwd.net:1935/ustreamvip/ustreamvip_llnw_live_1_76452776" \
-s "http://cdn1.ustream.tv/swf/4/viewer.381.swf" \
-p "http://www.ustream.tv/channel/hinatabocco1" \
-o HINATABOCCO5.flv

これで録画は可能

-rにはStreamのURL(StreamTransportで解析可能)
-sにはPlayerUrl(不要?)
-pには視聴していたchannelURL(不要?)

あとはnohupしておくべきだったと後悔
(この後PCが切断→SSHセッション断→dump失敗に)

----------------------------------------
[チラシの裏]
これうまく使って録画サーバできないかな…
・外出先等でUstLiveが見たくても見れない時に
 後から録画
・でも著作権の保護観点から予約した人しか見れない
・同じ番組を予約した人がいたら、一番最初の人が予約した動画を共有
・できれば友人間だけは録画した動画を共有
 (URLで共有するとか)
・一週間ほどで削除

・同じチャンネルでも時間によって放送してたり、StreamURLが変わったりする
 どうやってそれを監視するか

結構Ustreamのみたい番組が多いのだが、
忘れてたりそもそも見れる環境じゃない(場所or勤務中)だとすごく困る
ソフトを使うにしても自宅のPCじゃないといけないので、
なんとか外出先からも録画できるといいなと思う

2011年8月11日木曜日

z_X10_audio_stutter_fix

z_X10_audio_stutter_fix.zipを手に入れたのでその時のメモ

> adb shell
$ su -
//ここでandroidでroot権限を許可させる

# mount -o remount,rw /dev/block/mtdblock3 /system

# cd /system/lib/
# cp -p libaudio.so libaudio.so.org
# cp -p libaudioflinger.so libaudioflinger.so.org
# cp -p libaudiopolicy.so libaudiopolicy.so.org
# cp -p libmedia.so libmedia.so.org

# cp /mnt/sdcard/z_X10_audio_stutter_fix/system/lib/libaudio.so /system/lib/
# cp /mnt/sdcard/z_X10_audio_stutter_fix/system/lib/libaudioflinger.so /system/lib/
# cp /mnt/sdcard/z_X10_audio_stutter_fix/system/lib/libaudiopolicy.so /system/lib/
# cp /mnt/sdcard/z_X10_audio_stutter_fix/system/lib/libmedia.so /system/lib/

// mount -o remount,ro /dev/block/mtdblock3 /system
// roに戻せないので再起動

これで音質良くなるのだろうか…

2011年5月29日日曜日

Muninでnginxを監視するためのメモ

プラグインがあるので導入

/usr/share/munin/plugins
wget http://exchange.munin-monitoring.org/plugins/nginx_status/version/3/download -O nginx_status
wget http://exchange.munin-monitoring.org/plugins/nginx_request/version/2/download -O nginx_request
wget http://exchange.munin-monitoring.org/plugins/nginx_vhost_traffic/version/2/download -O nginx_vhost_traffic
chmod 755 nginx_*

cd /etc/munin/plugins
ln -s /usr/share/munin/plugins/nginx_request .
ln -s /usr/share/munin/plugins/nginx_status .
ln -s /usr/share/munin/plugins/nginx_vhost_traffic .

service munin-node restart