ubuntu20でpt2、recpt1、epgrecUNA、dkmsを用いたchardev版ドライバの設定を行ったので忘れないようにメモ

標準のdvbドライバでrecdvbを使用してepgrecUNAをやってみたが、recdvbだとwww-dataで使用できないようだった。ユーザが実行すると録画できるが、www-dataで録画実行するとチューナが使えないエラーになる。くわしくないので原因はよくわかりません。

 

参考

 

○カードリーダー用ドライバのインストール
$sudo apt -y install pcscd pcsc-tools libpcsclite-dev
$pcsc_scan
 最後にJapanese Chijou Digital B-CAS Card (pay TV)と出ればOK
○arib25インストール
$sudo apt install git
$git clone https://github.com/stz2012/libarib25.git
$cd libarib25

$ sudo apt install build-essential cmake pkg-config
$ cmake .   '.'も必要)
$ make
$ sudo make install

○chardev版ドライバインストール(dkms使用)

参照

 

・必要なパッケージをインストール

sudo apt-get install -y mercurial dkms linux-headers-`uname -r` 

 

・ソースを取得

hg clone http://hg.honeyplanet.jp/pt1 

(pt1フォルダができ、中にdriverとrecpt1のフォルダができる)

 

 ・バージョンを変数に代入(echo $REVISIONで値を確認できる)

cd pt1

REVISION=`hg log -r tip | sed -n -e '1s/.*://p'` 

 

・下記はバグの修正(詳細は参照ブログ内)

cd .. 

sed -i -e '/^static int pt1_release(struct inode \*inode, struct file \*file)$/,/^}$/s/mutex_unlock(&channel->ptr->lock);/\/\* mutex_unlock(\&channel->ptr->lock); \*\//' pt1/driver/pt1_pci.c 

sed -i -e '/^static int pt1_release(struct inode \*inode, struct file \*file)$/,/^}$/s/^\treturn 0;$/\tmutex_unlock(\&channel->ptr->lock);\n\n\treturn 0;/' pt1/driver/pt1_pci.c 

 

・ソースをコピー

sudo cp -r pt1/driver/ /usr/src/pt1_drv-$REVISION/ 

 

・dkms.confを作成

cat << EOT | sudo tee /usr/src/pt1_drv-$REVISION/dkms.conf 

PACKAGE_NAME="pt1_drv" 

PACKAGE_VERSION="$REVISION" 

MAKE[0]="make KVER=\${kernelver}" 

CLEAN[0]="make clean" 

BUILT_MODULE_NAME[0]="pt1_drv" 

DEST_MODULE_LOCATION[0]="/kernel/drivers/video" 

AUTOINSTALL="YES" 

EOT 

 

・ドライバインストール

sudo dkms add -m pt1_drv -v $REVISION 

sudo dkms build -m pt1_drv -v $REVISION 

sudo dkms install -m pt1_drv -v $REVISION

・dvb版のドライバが読み込まれないようにする
echo 'blacklist earth-pt1' | sudo tee -a /etc/modprobe.d/blacklist.conf

・dkmsでドライバーをインストールするとrootアクセスのみになる(0600)ので、

/etc/udev/rules.d/50-udev-default.rules (ファイルがないので新規作成)

に以下を記載し再起動

#pt1video
KERNEL=="pt1video*",MODE="0666",GROUP="video"

 

ls -l /dev/pt1video*

で確認すると

rw-rw-rw- root video

になっている

 

※録画ができなくなって、モジュールが消えて、modprobeすると

ERROR: could not insert 'pt1_drv': Exec format error

と出る場合

 

 

$ cd pt1 (pt1のフォルダに行って)

$ REVISION=`hg log -r tip | sed -n -e '1s/.*://p'` (バージョンを取得)

$ sudo dkms remove -m pt1_drv/$REVISION --all (モジュール削除)

以下で再インストール

$sudo dkms build -m pt1_drv -v $REVISION 

$sudo dkms install -m pt1_drv -v $REVISION

 

 

※アンインストール方法

 ・ドライバモジュールのアンインストール

   $ sudo dkms uninstall -m pt1_drv -v バージョン

 ・ソースパッケージの登録削除

   $ sudo dkms remove -m pt1_drv -v バージョン --all

 

 

○recpt1

・パッケージインストール

$ apt install pkg-config autoconf mercurial libpcsclite-dev ffmpeg libavformat-dev libdlna-dev libupnp-dev

・recpt1 httpサーバ機能追加パッチ 新本家[c8688d7d6382]以降対応版をダウンロード

・ダウンロードしたrecpt1-http-rev4.tar.gzを解凍

$ tar -zxvf recpt1-http-rev4.tar.gz

 

・文字化けを治す

$ sudo apt-get install nkf

$ nkf -w8 recpt1-http-rev4/recpt1-http.diff > http4.patch

http4.patchとドライバのところでダウンロードしたrecpt1/が同じフォルダにある状態で

$ patch -p1 < http4.patch

$ cd recpt1

$ ./autogen.sh 
$ ./configure --enable-b25
$ make
$ sudo make install

 

・録画確認

適当なフォルダで下記録画コマンドでtsファイルができればOK

$recpt1 --b25 --strip 17 10 test.ts (17はチャンネル、10は10秒)

$recpt1 --b25 --strip 211 10 test1.ts (211はBS11イレブン)

 

○パッケージ追加

$sudo apt install ntp at nginx php-fpm php-cli mysql-server php-mysql php-xml php-mbstring

 

○at

・atコマンドをwww-dataで使用できるように書き換え

   $sudo sed -i".org" 's/www-data//g' /etc/at.deny

○MySQL
・下記ファイルに追記
 /etc/mysql/mysql.conf.d/mysqld.cnf
 [mysqld]に以下を追加
 sql_mode             = ''

・MySQLを再起動
 $sudo service mysql restart

$ sudo mysql -u root -p (sudoでログインでいいのかわからない。とりあえずできた)

  sudoのパスワード入力

・必要なら文字コードを確認

mysql> show variables like "char%";

utf8mb4になってればOK。systemはutf8mb3でOK?

・データベース(epgrec)作成

mysql> create database epgrec;

mysql> create user epgrec@localhost identified by 'epgrec';
mysql> grant all on epgrec.* to epgrec@localhost;
mysql> exit;
 
○PHP
・disable_functions設定を無効に、タイムゾーンを日本に変更
$ sudo sed -i".org" 's/^disable_functions/;disable_functions/g' /etc/php/7.4/fpm/php.ini
$ sudo sed -i".org" 's/^;date.timezone =/date.timezone = "Asia\/Tokyo"/g' /etc/php/7.4/fpm/php.ini
$sudo service php7.4-fpm restart
 
○nginx
$cd /etc/nginx/sites-enabled/
$sudo rm default
$cd ../sites-available/
epgrecという新規ファイルに下記を書いて保存
************************************
server {
    listen 80 default_server;
    server_name localhost;

    root /var/www/epgrec;

    charset utf-8;
    index index.php index.html;

    location ~ [^/]\.php {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $request_filename;
        fastcgi_pass unix:/run/php/php-fpm.sock;
    }
}
*****************************************
$ cd ../sites-enabled/
$ sudo ln -s ../sites-available/epgrec
$ sudo service nginx restart
 

○epgdump

 epgdumpUNA160127をダウンロード

 解凍してepgdumpフォルダに入って

 $make

  $sudo make install

 

○epgrecUNA

下記ファイルをダウンロード

epgrecUNA151114

epgrecUNA151114Fix1

epgrecUNA151114Fix2

 

 

 

 

解凍して

epgrecUNA151114に順番にFix1を上書きコピー、Fix2を上書きコピー。

 

epgrec/templates/programTable.htmlを書き換え(PHP7が16進数を読まないので番組検索ができなくなる)

666行目:
{if $k_category != 15 || $k_sub_genre>=0x3f }
↓
{if $k_category != 15 || $k_sub_genre>=63 }

679行目:
<b> 曜日:</b>{if $weekofday == 0x7f}なし{else}{$wds_name}{/if}
↓
<b> 曜日:</b>{if $weekofday == 127}なし{else}{$wds_name}{/if}

 

○epgrec/config.phpを書き換え

 

・地上波のチャンネルを住んでる場所に合わせる

・下記の0をチューナ数に合わせて変更(0→2)

 // 第一チューナー設定(主にPTn)
 define( 'TUNER_UNIT1', 0 );      

・必要に応じて下記変更

 リアルタイム視聴有効で下記FALSE→TRUE
  // リアルタイム視聴
  define( 'REALVIEW', FALSE );       
  define( 'REALVIEW_HTTP', FALSE );   

 epg廃止チャンネルを自動指定は下記FALSE→TRUE

  define( 'EXTINCT_CH_AUTO_DELETE', FALSE );

・epgrecフォルダを/var/www/にコピー
  epgrecの上のフォルダで
  $ sudo cp -a epgrec /var/www/
 $ cd /var/www/epgrec/
  $ sudo chown -R www-data:www-data ../
・録画フォルダの変更(videoを消して、videoのシンボリックリンクを作る)
  $ sudo rm -r video/
  $ sudo ln -s 保存するフォルダのパス video
・videoの所有者変更
  $ sudo chown -h www-data:www-data video

○最後の設定
http://localhostにアクセス
MySQLのホスト名:localhost
MySQLのユーザ名:epgrec
MySQLのパスワード:epgrec
使用データベース名:epgrec
 
録画ファイル名で下記を使うと、ファイル名に”:”が入り、samba接続で見たとき文字化けする
%DURAHMS%
 
完了画面に表示された下記を実施
$ sudo cp /var/www/epgrec/cron.d/shepherd /etc/cron.d/