タグ: centos

epgdump と epgrec の導入

今回は録画を簡単に行うというところまで。
途中、LAMPの構築が入っちゃってやたら長い記事に…
設定から録画テストまではこちらの記事を参照。

  1. epgdumpのインストール
    1. epgdumpをsourceforgeから持ってくる。
      # wget http://iij.dl.sourceforge.jp/epgrec/53385/epgdumpr2_20111001.tar.gz
    2. 解凍。
      # tar -zxvf epgdumpr2_20111001.tar.gz
    3. epgdumpr2ディレクトリに移動してmakeしたいのだけど、
      # cd epgdumpr2
      # make
      make: `all' に対して行うべき事はありません.

      と言われてしまう。
      ので、

      # touch *
      # make clean
      rm -f core epgdump *.o
      # make

      のように、touch と make clean を挟んでからmakeする。

    4. 出来上がったepgdumpを/usr/local/bin/にコピーする。
      # cp epgdump /usr/local/bin/
    5. コピーしたepgdumpが正常に動作するか確認。
      # epgdump test /tmp/test_video.ts -
      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE tv SYSTEM "xmltv.dtd">
      <tv generator-info-name="tsEPG2xml" generator-info-url="http://localhost/">
      ……………………
      ……………………
      </tv>

      と、番組情報がダーっと出てくれば動作している事になる。

  2. epgrecで必要になるものを事前にインストール
    epgrecはPHPで書かれているので、事前にPHPが動作するWebサーバ(Apacheでもnginxでも)が必要。
    ついでにMySQLも利用するので、これも必要。
    要するにLAMP環境が必要。

    1. Apache をインストール
      # yum install httpd

      以上。

    2. Apache の設定
      1. httpd.conf を編集
        # vi /etc/httpd/conf/httpd.conf

        で、
        292行目辺りの

        DocumentRoot "/var/www/html"

        317行目辺りの

        <Directory "/var/www/html">

        を好きなディレクトリに変更する。

    3. PHP のインストール
      # yum install php?php-cli php-mysql?php-mbstring php-xml

      ぐらい?
      あとで、あれこれ足りないと言われるのが面倒なら、少々乱暴だが

      # yum install php*

      で、PHPと名のつくものが全部入る。
      まともにサーバ作るならこんな事してちゃダメ。
      ちゃんと必要な物を考えて入れましょう。

    4. PHPの設定
      1. php.ini を編集
        # vi /etc/php.ini

        で、
        946行目辺りの

        ;date.timezone =

        のコメントアウトを外して、

        date.timezone = Asia/Tokyo

        としておく。

      2. php.conf の存在確認
        /etc/httpd/conf.d/ 配下に php.conf が存在することを確認しておく。
    5. MySQLをインストール
      # yum install mysql-server mysql

      で、バージョン5.1 辺りを入れてくれると思う。
      もうちょっと新しいものを入れたいなら、MySQLのリポジトリを導入して、

      # yum --enablerepo=mysql-community install mysql-server mysql

      でもいい。

    6. MySQLの設定
      1. MySQLにログイン
        # mysql -u root -p
         Enter password:

        一番初めはパスワードは無いので、そのままReturnで入れる。

      2. まずはrootのパスワードを設定。
        > grant all privileges on *.* to root@localhost identified by 'rootのPW' with grant option;

        設定したら一度ログアウトして、

        • パスワードが正しく設定されていること
        • パスワード無しではログイン出来ないこと

        を確認しておく。

      3. epgrec 用のデータベースの作成
        > create database データベース名;
        で、データベースを作成しておく。データベース名は epgrec_database でもなんでもいいので、わかりやすく好きなものを。
      4. epgrec 用のMySQLユーザの作成
        別に root でもいいけど、epgrec で使用するMySQLユーザを作成しておく。

        > grant all privileges on epgrec_database.* to epgrec用のID@localhost identified by 'epgrec用のPW' with grant option;
      5. ここまで出来たら、MySQL ログアウト。
    7. chkconfig の変更
      # chkconfig httpd on
      # chkconfig mysqld on

      で、Apache と MySQL が自動的に起動するようにしておく。

  3. epgrecのインストール
    1. epgrecをsourceforgeから持ってくる。
      # wget http://iij.dl.sourceforge.jp/epgrec/53387/epgrec_20111001.tar.gz
    2. 解凍。
      # tar -zxvf?epgrec_20111001.tar.gz
    3. 出来上がった epgrec ディレクトリを Apache の公開ディレクトリ配下にコピーする。
      # cp -r /tmp/epgrec /var/www/html/epgrec
    4. コピー先のディレクトリに移動して、config ファイルを作成・編集する。
      # cd /var/www/html/epgrec
      # cp config.php.sample config.php
      # vi config.php
      
      $GR_CHANNEL_MAP = array(
              "GR27" => "27",         // NHK
              "GR26" => "26",         // Eテレ
              "GR25" => "25",         // NTV
              "GR22" => "22",         // TBS
              "GR21" => "21",         // フジ
              "GR24" => "24",         // TV朝日
              "GR23" => "23",         // TV東京
              "GR28" => "28",         // 放送大学
              "GR18" => "18",         // TVK
              "GR20" => "20",         // 東京MX
              "GR30" => "30",         // 千葉テレ
              "GR32" => "32",         // テレ玉
              "GR19" => "19",         // YOUプレミアム
              "GR53" => "53",         // YOUテレビ
      );

      うちで見ることができるリストはこんなカンジに。
      各地域のチャンネルリストはマスプロ電工のページにある。

    5. 録画用のshファイルもサンプルから作成しておく。
      cp do-record.sh.pt1 do-record.sh
    6. いくつかのディレクトリのパーミッションを777に変更しなくてはならない。
      # chmod 777 templates_c/
      # chmod 777 video/
      # chmod 777 thumbs/
      # chmod 777 settings/
      # chmod 777 cache/
    7. この段階までやってからブラウザで
      http://[SERVER_ADDR]/epgrec/index.php

      にアクセス。
      インストール状態をチェックしてくれる。

      1. ディレクトリとファイルのパーミッションチェック
        地上デジタルのチャンネル設定チェック
      2. MySQL設定
        インストール関連設定
      3. デジタルチューナー設定
        録画関連設定
        録画ファイル名の形式は[ %CH%_%ST%_%TITLE% ]に変更。

      すべて記入したら「EPGの初回受信」リンクを押す。
      50分ぐらいかかるかもという記述があったが、自分の環境では10分ちょっとで終わった。

    8. インストール最終ステップのページに
      「/etc/cron.d/以下にcronによるEPG受信の自動実行を設定する必要があります」
      との記述があるので、これを設定する。
      CentOSなので、ubuntu用の設定は使えない。
      けど「要はgetepg.phpを走らせれば良い」ということなので、

      # crontab -e
      30 10 * * * php -f /var/www/html/epgrec/getepg.php

      で走らせることにする。
      該当チャンネルが放送時間帯でなければいけないので、放送大学の放送がない深夜帯には設定できなかった。

  4. epgrec で録画テスト
    1. epgrec の画面が出たら予約してみる。
      「custom job番号の取得に失敗」というエラーが出たらatコマンドがインストールされていない。

      # yum install at

      でインストールする。

    2. 録画先がepgrecディレクトリ内のvideoディレクトリなので、これを変更しておく。

prefork と worker の切り替え

Apache はデフォルトではプロセスベースの ‘prefork’ モデルが使用されるが、
スレッドベースの ‘worker’ モデルを使用することもできる。
切り替えは逐次できるわけではなくて、サービスの再起動とか必要になるわけだけど、
いちおう、そのやり方。
vi /etc/sysconfig/httpd
で中身を見てみると、9行目に
#HTTPD=/usr/sbin/httpd.worker
という部分がコメントアウトされているので、これを外す。

nginxをyumでインストール

リポジトリが入ってしまえばyumでインストールするだけ。

yum --enablerepo=nginx install nginx

ただ、configureもなにもないので、どのモジュールが入ってるか分からない。
nginxはDSOには対応していないらしいので、yumで入るものにどのモジュールが入っているのか確認しておく。

# nginx -V
nginx version: nginx/1.4.4
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC) 
TLS SNI support enabled
configure arguments: 
  --prefix=/etc/nginx 
  --sbin-path=/usr/sbin/nginx 
  --conf-path=/etc/nginx/nginx.conf 
  --error-log-path=/var/log/nginx/error.log 
  --http-log-path=/var/log/nginx/access.log 
  --pid-path=/var/run/nginx.pid 
  --lock-path=/var/run/nginx.lock 
  --http-client-body-temp-path=/var/cache/nginx/client_temp 
  --http-proxy-temp-path=/var/cache/nginx/proxy_temp 
  --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp 
  --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp 
  --http-scgi-temp-path=/var/cache/nginx/scgi_temp 
  --user=nginx 
  --group=nginx 
  --with-http_ssl_module 
  --with-http_realip_module 
  --with-http_addition_module 
  --with-http_sub_module 
  --with-http_dav_module 
  --with-http_flv_module 
  --with-http_mp4_module 
  --with-http_gunzip_module 
  --with-http_gzip_static_module 
  --with-http_random_index_module 
  --with-http_secure_link_module 
  --with-http_stub_status_module 
  --with-mail 
  --with-mail_ssl_module 
  --with-file-aio 
  --with-ipv6 
  --with-cc-opt='-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic'

spdyとかは入ってないみたい。

nginxリポジトリの追加

nginx は通常のリポジトリには入っていない。
nginxのサイトにリポジトリ用のRPMがあるので、これを入れておく。
nginx: Linux packages

wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

で、ダウンロードしたら

rpm -ivh nginx-release-centos-6-0.el6.ngx.noarch.rpm

でインストール。
enabled=1
になっているので、

vi /etc/yum.repos.d/nginx.repo

で、
enabled=0
に変更しておく。

Column count of mysql.proc is wrong. Expected 20, found 16. The table is probably corrupted

「mysql.procの列数が間違っています。 20の予想される、16を発見した。テーブルが破損している可能性があり」
だ、そうです。Google翻訳曰く。。。

こないだ再起動したときには出てなかったのにな。
仕方がないので、さらにググる。

mysql_upgrade --force -u root -p

forceってところが気になるけど、やるしか無いのでやってみる。

消えた。。。

PT3 装着から録画テストまで

CentOS6.5 に PT3 を装備してみる。
今回は録画できるようにするところまで。

PT3の設定(CentOS6)さま、
CentOS6.1にアースソフトPT2をセットアップさま
あたりを参考にがんばってみる。
minimum でクリーンインストール、yum updateは実施済み、という設定で始めます。

  1. 事前に途中で必要になるものをインストール
    1. yum で入るものをまずインストール
      # yum install kernel-devel wget unzip gcc ccid pcsc-lite pcsc-lite-devel pcsc-lite-libs
    2. RPMForgeリポジトリのインストール
      # cd /tmp/
      # wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
      # rpm -ivh rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm

      2013/12/21時点での最新は0.5.3。

    3. RPMForgeリポジトリのenable変更。
      # vi /etc/yum.repos.d/rpmforge.repo
      
      enable=0

      に変更して、必要なときは「enablerepo」で有効化する。

    4. perl-Gtk2 インストール。
      # yum install --enablerepo=rpmforge perl-Gtk2
  2. カードリーダのインストール
    1. pcsc-perl と pcsc-tool というものが必要らしいので、fedora のRPMを持ってくる。
      # wget http://ftp.kddlabs.co.jp/033/Linux/packages/fedora.archive/releases/13/Everything/x86_64/os/Packages/pcsc-perl-1.4.8-2.fc13.x86_64.rpm
      # wget http://ftp.kddlabs.co.jp/033/Linux/packages/fedora.archive/releases/13/Everything/x86_64/os/Packages/pcsc-tools-1.4.16-1.fc13.x86_64.rpm
      # rpm -ivh pcsc-perl-1.4.8-2.fc13.x86_64.rpm
      # rpm -ivh pcsc-tools-1.4.16-1.fc13.x86_64.rpm

      できれば最新のものを持ってきたいところだけど、CentOS6.5 の yum で入る perl が 5.10 なので、Fedora13 向けの pcsc-perl と pcsc-tools が最新、ということになる。

    2. pcscd を起動する。
      # /etc/init.d/messagebus start
      # /etc/init.d/haldaemon start
      # /etc/init.d/pcscd start
    3. カードを認識しているか確認。
      # pcsc_scan
      ……………………
      ……………………
      Possibly identified card (using /root/.smartcard_list.txt):
      Japanese Chijou Digital B-CAS Card (pay TV)

      と出れば、認識している。
      Ctrl+C で抜ける。

      Possibly identified card (using /root/.smartcard_list.txt):
      NONE

      となった場合は、

      # wget http://ludovic.rousseau.free.fr/softwares/pcsc-tools/smartcard_list.txt --output-document=/root/.smartcard_list.txt

      で最新のカード情報を入手する。

  3. arib25 のインストール
    1. arib25 を入手。
      # wget http://hg.honeyplanet.jp/pt1/archive/c44e16dbb0e2.tar.bz2
    2. 入手したファイルを解凍する。
      # tar -xvjf c44e16dbb0e2.tar.bz2
    3. make して make install でインストール。
      # cd pt1-c44e16dbb0e2/arib25/
      # make
      # make install
    4. ライブラリは/usr/local/lib/に配置される。が、このディレクトリはCentOSではデフォルトでは読み込まれない。
      arib25用のconfファイルを新規作成する。

      # vi /etc/ld.so.conf.d/arib25.conf
      
      /usr/local/lib

      の1行を記入して保存。

    5. 作成したら
      # ldconfig

      でldconfigのconfファイルを再読み込みしておく。

    6. ライブラリにarib25が読み込まれているか確認する。
      # ldconfig -p | grep libarib
      
      libarib25.so.0 (libc6) => /usr/local/lib/libarib25.so.0
      libarib25.so (libc6) => /usr/local/lib/libarib25.so

      の2行が存在するか確認。

  4. recpt1 のインストール
    1. 先に入手した arib25 ファイルの中に recpt1 ディレクトリがある。
      # cd ../recpt1
    2. recpt1.h ファイルをPT3用に変更する。
      # vi recpt1.h
      char *bsdev[NUM_BSDEV] = {
      "/dev/pt3video1",
      "/dev/pt3video0",
      "/dev/pt3video5",
      "/dev/pt3video4",
      "/dev/pt3video9",
      "/dev/pt3video8",
      "/dev/pt3video13",
      "/dev/pt3video12"
      };
      char *isdb_t_dev[NUM_ISDB_T_DEV] = {
      "/dev/pt3video2",
      "/dev/pt3video3",
      "/dev/pt3video6",
      "/dev/pt3video7",
      "/dev/pt3video10",
      "/dev/pt3video11",
      "/dev/pt3video14",
      "/dev/pt3video15"
      };

      8〜15行目、18〜25行目の「pt1video1」のような部分をすべて「pt3video1」という用に変更する。

    3. make して make install でインストール。
      # make
      # make install
  5. PT3 ドライバのインストール
    1. blacklist.conf を編集。
      # vi /etc/modprobe.d/blacklist.conf
      
      blacklist earth_pt1

      を最下行に追加して保存。

    2. pt3 用のドライバを入手。
      # wget https://github.com/m-tsudo/pt3/archive/master.zip
      # unzip master
    3. ディレクトリ移動して、make、make install する。
      # cd pt3-master/
      # make
      # make install
    4. # modprobe pt3_drv
    5. ドライバ認識のために、一旦再起動。
    6. 再起動後、/dev配下に [ pt3video0 ] 〜 [ pt3video3 ] が存在することを確認する。
  6. TS ファイルが作成できるかテスト
    1. # recpt1 --b25 --strip 22 10 /tmp/test.ts --device /dev/pt3video2

      tsファイルはVLCで確認できる。

ServerProtect がコア1つ占有してる

ひっさびさにzabbix見てみたら、プロセスの占有率こんなだったっけ?
と、ふと気になったので過去にさかのぼってみた。

zabbix_graph

2週間前からコア1つぐらい100%で動いてる?
別の案件にかまけてて気付かなかった。

これやってるの誰?ということで、topで見てみると「splxmain」が100%で稼働中、コア1つを占有してた。
そんな事をもろともせずに普段通り仕事をこなしてくれたxeonに感謝しつつ、この splxmain を調べる。
あー。ServerProtect for Linux、君だ。
特に2週間前になにかやったこともないし、他の業務に支障はなさそうだったが、
ServerProtectの本来の業務が出来ていない気がしたので、リスタートをかけることにする。

# pstree -p | grep splxmain
|-crond(1640)—crond(31952)—sh(31953)—splxmain(31954)—splxmain(31961)

で、splxmain のPIDを見つけ出す。
今回は 31954 と 31961 なので

# kill -9 31954 31961

で、強制終了。
load average がみるみる減っていく・・・
このままだとServerProtectがいないままなので

# /etc/init.d/splx restart

で、リスタート。
無事、再起動完了。

ifcfg-eth0 が重複してると

ifcfg-eth0 を書き換える時、オリジナルを残しておこう、とか。
このファイルに限らずあるかとは思いますが。

/etc/sysconfig/network-scripts/
配下にオリジナルのファイルを同居させるときに
「ifcfg-eth0_bak_20131219」
とかファイル名を付けてしまうと変なことになります。

どうやら定義ファイルを探すときにファイル名を前方一致で検索をかけているようなので、
ファイルが2つ見つかってしまう、ということになるようです。

うちでは、現行ファイルとバックアップファイル、両方ともstaticなIPを指定していたので
内側から見るとIPを2つ持っている状態、でも外からは現行ファイルのIPのみ見れる、という不思議な状態に陥ってしまいました。

状況が固定化されるなら使い方によっては便利、なことがあるのかなぁ。

MySQL Replication for 5.6

前に書いた MySQL Replication の焼き直しです。
バージョンを5.6で揃えることになったので、他のバージョンとの差異を気にする必要がない、はず。

  1. [マスター・スレーブ]
    それぞれ作る。
    mysql.comにリポジトリがあるので、これを使用する。
  2. [マスター・スレーブ]
    vi /etc/my.cnf
    で、以下を書き足す or コメントアウトを外す。
    server-idは重複しないよう気をつける。
    (第2オクテット~第4オクテットの9桁で被らないと思っている)

    [mysqld]
    log-bin=mysql-bin
    server-id=168001012
  3. [マスター]
    スレーブから接続するユーザを作成しておく。

    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.0/255.255.255.0' IDENTIFIED BY 'repl_password';
  4. [マスター]
    ダンプ出力する。

    mysqldump -u root -p --all-databases --master-data --apply-slave-statements >> /tmp/sqldump_all_databases.sql

    [ –single-transaction ]がないと、
    始めのデータベースと最後のデータベースでダンプしてる間に更新されている場合が出てきたりするかも。
    でも、[ –master-data ]で、[ –lock-all-tables ]が自動的に追加されるからそれでイイのかな?

    [ –opt ]
    ※–opt はデフォルトでONなので、明示的に書く必要はない。
    自動的にセットされるオプション・・・

    [ –all-databases ]
    全てのデータベースを出力。

    [ –master-data ]
    ダンプファイルの先頭に「CHANGE MASTER TO…」を書き込む。
    自動的にセットされるオプション・・・
    (ただし、[ –single-transaction ]オプションが指定されている場合を除く)

    自動的に解除されるオプション・・・

    [ –apply-slave-statements ]
    ダンプファイルの先頭、「CHANGE MASTER TO…」文より前に「STOP SLAVE;」、
    末尾に「START SLAVE;」を書き込む。

  5. [スレーブ]
    マスターにあるダンプファイルを取得。

    scp -Cqp user@192.168.1.12:/tmp/sqldump_all_databases.sql /tmp/sqldump_all_databases.sql
  6. [スレーブ]
    [ –master-data ]オプションをつけていれば、「CHANGE MASTER TO…」文も同時にやってくれているはず。
    [ –apply-slave-statements ]オプションをつけていれば、自動的にSLAVEとしてスタートしているはず。

    mysql -u root -p < /tmp/sqldump_all_databases.sql
  7. [スレーブ]
    動作状況を確認しておく。

    show slave status;

    で、

    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes

    が両方ともYesになっている事を確認。

    Slave_SQL_Running_State: Reading event from the relay log

    は、「差分読み込み中。
    よく見ると、

    Seconds_Behind_Master: 11771

    という表記もあって、マスターから遅れている秒数を表示してくれている。

    Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it

    は、「全ての差分読み込み完了。マスターのアップデート待ち」という状態。

これで、スレーブ出来上がる、はず。

USBメディアをマウント

コンソールのみの端末でUSBメモリを認識・マウントさせる方法。

  1. 事前に
    mkdir /mnt/usb
    chmod 777 /mnt/usb
    でUSBのマウントポイントを作成しておく。
  2. USBメモリを接続する。
  3. dmesg | grep sd*
    で、接続情報確認。
    (以下はsdbに接続情報があったと仮定。)
  4. mount -t vfat /dev/sdb1 /mnt/usb/
    で、マウントする。

アンマウントするときは

  1. umount /mnt/usb/
    で。
    アクセスランプが消えていることを確認して、取り外す。

CentOSで「コマンドが見つかりません」とか言われる (yum search)

[ locate ]とか、[ c++ ]とか、minimumでインストールするといろいろなものが入っていない状態。
後から必要に応じて入れることになるのだけれど、そのコマンド名自体で入るわけではないものが結構ある。
今回はその探し方。

yum search ******

で。
locateだとこんなカンジ。

# yum search locate
Loaded plugins: fastestmirror
Determining fastest mirrors
* base: ftp.iij.ad.jp
* extras: centos.ustc.edu.cn
* updates: centos.mirror.cdnetworks.com
base | 3.7 kB 00:00
extras | 3.4 kB 00:00
updates | 3.4 kB 00:00
updates/primary_db | 768 kB 00:00
============================= N/S Matched: locate ==============================
mlocate.x86_64 : An utility for finding files by name
which.x86_64 : Displays where a particular program in your path is located

Name and summary matches only, use "search all" for everything.

なので、

yum install locate

ではなく

yum install mlocate

でインストール、ということになる。

.htaccess に mod_rewrite を書き足す

もう「?」の後ろにGETくっつけて次のページに指示を送るの飽きた!
wordpressみたいにスラッシュで区切って送りたい!

と思ったので、mod_rewrite をいじってみたかった。
けどサーバは既に運用中。httpd.conf を適当に書き換えるのはいただけない。
ので、.htaccess を書いてそのディレクトリのみに今回の仕様を適用することにします。

マニュアルは http://httpd.apache.org/docs/current/mod/mod_rewrite.html
日本語はちょっと古いけど http://japache.infoscience.co.jp/japanese_1_3_6/manual/mod/mod_rewrite.html このへんかな?

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#RewriteRule \.(jpg|gif|ico|css|js)$ - [L]
RewriteRule ^(.*)$ index.php?com=$1 [QSA,L]

こんな?
あとは com 以下の文章が普通に投げられるので、この部分を色々切り取ったりしてコマンドにする、と。