2014年1月11日土曜日

【備忘録】Ubuntu 13.10 の KVM 仮想環境上に PT3 と epgrec による録画環境の構築実験(パススルー非使用版)

以前の  【備忘録】Ubuntu 13.10 の KVM 仮想環境上に PT3 と epgrec による録画環境の構築実験(失敗) にて、 AMD-Vi パススルーで PT3 を動かす野望は潰えたのだが、諦めない、ネヴァーギヴアップ!

というわけで、別の方法を模索してみた。
基本戦略としては、epgrec をゲストで動作させ、ICカードリーダー、PT3 および recpt1 をホストで動作させる。
ゲストから、ssh 接続経由で、ホストの recpt1 を呼び出して、録画を行う。


環境
MB:GIGABYTE GA-990FXA-UD5(IOMMU 対応)
CPU:AMD Phenom II X4 955 Black Edition
MEM:8G
HDD:Seagate 2TB X 1(システム用)、2TB X 4(KVM ストレージプール用)
OS:Ubuntu Server 13.10 amd64
ICカードリーダー:PLEX PX-ICCR01
アースソフト PT3 Rev.A

ホストOSをインストール

Ubuntu のインストーラを起動
システム用 HDD 28GB の領域に LVM 構成で自動パーティショニングを行った。
以下のインストールソフトウェアを選択
Basic Ubuntu server
OpenSSH server
Samba file server
Virtual Machine host
Ubuntu desktop

アップデート
sudo aptitude update
sudo aptitude full-upgrade

必要なパッケージをインストール
sudo aptitude install ssh mdadm git build-essential libtool automake paco

リンカが gold になるように設定

もう少し言うと、通常のリンカと簡単に切り替え可能にし、gold の優先度を高く設定して、自動的に gold が有効になる、ということ。
sudo update-alternatives --install /usr/bin/ld ld /usr/bin/ld.bfd 1
sudo update-alternatives --install /usr/bin/ld ld /usr/bin/ld.gold 2
update-alternatives --display ld

作業用のパーティション作成

システム用 HDD の残り VG 領域に、作業用パーティションを作成。
sudo lvcreate --name=work --extents=100%FREE phenom-vg
sudo mkfs.ext4 /dev/phenom-vg/work
sudo lvs

パーティションの UUID を調べる
sudo blkid
/dev/mapper/phenom--vg-work: UUID="5ed97836-21ce-49b5-a92a-66b3ca75a12a" TYPE="ext4"

sudo vi /etc/fstab
末尾に追加
UUID=5ed97836-21ce-49b5-a92a-66b3ca75a12a    /mnt/work    ext4    rw    0    2

マウント先を作成
sudo mkdir /mnt/work
sudo chmod 777 /mnt/work

マウント
sudo mount /mnt/work

カードリーダーの設定

パッケージをインストール sudo aptitude install pcscd libpcsclite-dev pcsc-tools
カードリーダーの動作チェック
pcsc_scan

PT3 ドライバのインストール

ドライバをビルド

git clone http://github.com/m-tsudo/pt3.git
cd pt3
make clean
make
sudo paco -lp pt3-driver "make install"

ドライバを組み込む

sudo modprobe pt3_drv

因みに、以下のようにパラメータを渡すとデバッグレベルを指定できる
sudo modprobe pt3_drv debug=7

渡すことの出来るパラメータなどは、ソースの README を確認するか、以下のように調べる。
modinfo pt3_drv
filename:       /lib/modules/3.11.0-15-generic/kernel/drivers/video/pt3_drv.ko
license:        GPL
description:    PCI Earthsoft PT3 driver
author:         anyone
srcversion:     0A1D05542951609033BEAFC
alias:          pci:v00001172d00004C15sv*sd*bc*sc*i*
depends:
vermagic:       3.11.0-15-generic SMP mod_unload modversions
parm:           debug:debug level (0-7) (int)
parm:           lnb:LNB level (0:OFF 1:+11V 2:+15V) (int)

ドライバの動作確認

dmesg | grep -i pt3
[ 2954.181817] pt3_drv: module verification failed: signature and/or required key missing - tainting kernel
[ 2954.186493] PT3: pt3_drv 0.0.1rev99 2013-08-05
[ 2954.186592] pt3_drv 0000:04:00.0: enabling device (0000 -> 0002)
[ 2954.186736] PT3: Bus Mastering Enabled.
[ 2955.392717] PT3: device[0]=          (null)
[ 2955.394590] PT3: card_number=0 channel=0
[ 2955.396751] PT3: card_number=0 channel=1
[ 2955.398812] PT3: card_number=0 channel=2
[ 2955.400922] PT3: card_number=0 channel=3

デバイスファイルが存在することを確認

ls -la /dev/pt3*
crw-rw-rw- 1 root video 250, 0  1月  6 23:39 /dev/pt3video0
crw-rw-rw- 1 root video 250, 1  1月  6 23:39 /dev/pt3video1
crw-rw-rw- 1 root video 250, 2  1月  6 23:39 /dev/pt3video2
crw-rw-rw- 1 root video 250, 3  1月  6 23:39 /dev/pt3video3

arib25 のインストール

wget http://hg.honeyplanet.jp/pt1/archive/c44e16dbb0e2.zip
unzip c44e16dbb0e2.zip
cd pt1-c44e16dbb0e2/arib25
make clean
make
sudo paco -lp arib25 "make install"

recpt1 のインストール

git clone http://github.com/stz2012/recpt1.git stz_recpt1
cd stz_recpt1/recpt1
./autogen.sh


この環境では、以下のように、なぜか libarib25 を見つけられずにビルドが失敗する。
./configure --enable-b25
checking for create_arib_std_b25 in -larib25... no
configure: WARNING: libarib25 is not available.

make
gcc -O2 -g -pthread -I../driver -Wall -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64  -c -o decoder.o decoder.c
In file included from decoder.c:4:0:
decoder.h:26:5: error: unknown type name ‘uint8_t’
make: *** [decoder.o] エラー 1

しょうがないので、応急手当。
vi Makefile.in
LDFLAGS  =
LDFLAGS  = @LDFLAGS@


LDFLAGS="-L/usr/local/lib" ./configure --enable-b25
make clean
make
sudo paco -lp recpt1 "make install"

動作確認

recpt1 --b25 --strip 27 20 test.ts


KVM 環境構築

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

以下のパッケージは、インストール時に選択したパッケージに含まれるもの。よって、インストール済みなはず。
sudo aptitude install kvm bridge-utils qemu-kvm-spice

以下のパッケージは、新規にインストールする必要があるもの。
sudo aptitude install virt-manager qemu-system virt-viewer spice-client spice-client-gtk python-spice-client-gtk guestfish libguestfs-tools

qemu-kvm-spice と spice-client は、SPICE (VNCのようなもの)で接続ために必要。
guestfish と libguestfs-tools は、ゲストのストレージをあれこれ操作するために必要。
guestfish コマンドとか virt-rescue コマンドなどで、バックアップや、レスキューができる。

ログインユーザーの補助グループに libvirtd を追加

sudo usermod $(whoami) -a -G libvirtd
cat /etc/group | grep libvirtd

再起動する。
再起動をしないと、virt-manager 起動時に「libvirt に接続できませんでした」と怒られる。

仮想ブリッジを定義

sudo vi /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
#NetworkManager#auto eth0
#NetworkManager#iface eth0 inet dhcp
# ここから追加
auto eth0
iface eth0 inet manual
up /sbin/ifconfig eth0 promisc
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_maxwait 1

ネットワーク設定を有効化

sudo service networking restart

確認
ifconfig -a
br0       Link encap:イーサネット  ハードウェアアドレス 00:24:8c:52:c1:65
          inetアドレス:192.168.1.102  ブロードキャスト:192.168.1.255  マスク:255.255.255.0
          inet6アドレス: fe80::224:8cff:fe52:c165/64 範囲:リンク
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1
          RXパケット:58 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:89 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:0
          RXバイト:5686 (5.6 KB)  TXバイト:15970 (15.9 KB)
eth0      Link encap:イーサネット  ハードウェアアドレス 00:24:8c:52:c1:65
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  メトリック:1
          RXパケット:29029 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:8515 エラー:0 損失:0 オーバラン:0 キャリア:3
          衝突(Collisions):0 TXキュー長:1000
          RXバイト:22073164 (22.0 MB)  TXバイト:762722 (762.7 KB)
lo        Link encap:ローカルループバック
          inetアドレス:127.0.0.1  マスク:255.0.0.0
          inet6アドレス: ::1/128 範囲:ホスト
          UP LOOPBACK RUNNING  MTU:16436  メトリック:1
          RXパケット:190 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:190 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:0
          RXバイト:22165 (22.1 KB)  TXバイト:22165 (22.1 KB)
virbr0    Link encap:イーサネット  ハードウェアアドレス d2:c4:a1:7e:c2:82
          inetアドレス:192.168.122.1  ブロードキャスト:192.168.122.255  マスク:255.255.255.0
          UP BROADCAST MULTICAST  MTU:1500  メトリック:1
          RXパケット:0 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:0 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:0
          RXバイト:0 (0.0 B)  TXバイト:0 (0.0 B)


不要なネットワーク設定を無効化

virbr0 は、KVM をインストールすると自動的に作成される。
外部から接続するような場合には、上記で作成した仮想ブリッジの方が便利なようなので、virbr0 を無効化しておく。

定義の確認
virsh net-list
virsh net-dumpxml default

停止
virsh net-destroy default

自動起動を停止
virsh net-autostart default --disable

確認
virsh net-list --all

ゲストOS 格納用ストレージプール作成

ストレージプールは、LVM 上に確保する。
LVM に利用するストレージは、RAID10 構成とする。

パーティションを作成

sudo parted /dev/sdb
(parted) mktable gpt
(parted)  mkpart disk0 0% 100%
(parted) set 1 raid on

(parted) quit

mkpart で、開始を 1 にしているのは、
同じように全ドライブにパーティションを作成

RAID10 作成

sudo mdadm --create /dev/md0 --level=10 --raid-devices=4 /dev/sd[b-e]
mdadm: /dev/sdb1 appears to contain an ext2fs file system
    size=975872K  mtime=Thu Oct 24 11:51:29 2013
mdadm: /dev/sdc1 appears to contain an ext2fs file system
    size=975872K  mtime=Thu Jan  1 09:00:00 1970
mdadm: /dev/sdd1 appears to contain an ext2fs file system
    size=975872K  mtime=Thu Jan  1 09:00:00 1970
mdadm: /dev/sde1 appears to contain an ext2fs file system
    size=975872K  mtime=Thu Jan  1 09:00:00 1970
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

RAID の状態を確認
cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid10 sde[3] sdd[2] sdc[1] sdb[0]
      3906765824 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
      [....................]  resync =  0.1% (6511360/3906765824) finish=319.4min speed=203480K/sec

Physical Volume 作成

sudo pvcreate /dev/md0
  Physical volume "/dev/md0" successfully created

Volume Group 作成

sudo vgcreate vg0 /dev/md0
  Volume group "vg0" successfully created

Logical Volume は、KVM ゲスト作成時に自動的に作成されるので、ここでは作成しなくてよい。


KVM ゲスト用ストレージプール作成
virsh pool-define-as pool logical - - - vg0 /dev/vg0
プール pool が定義されました

virsh pool-autostart pool
プール pool が自動起動としてマークされました

virsh pool-start pool
プール pool が起動されました

virsh pool-list --all
名前               状態     自動起動
-----------------------------------------
pool                動作中  はい (yes)

録画ファイル保存用ストレージを作成

Logical Volume 作成

前述のストレージプール用に作成した Volume Group に作成する。
容量は 3TB とする。
sudo lvcreate --name=record-video --size=3t vg0
sudo mkfs.ext4 /dev/vg0/record-video

ゲストOS インストール

前回、散々コンソールでインストールをしたので、今回は GUI で楽をすることにした。

ubuntu のインストールイメージファイルを /mnt/work にコピーしておく。
共有作成メモ:
net usershare add work /mnt/work "work" "Everyone:F" guest_ok=y
net usershare list
net usershare delete work


ホストで virt-manager をログインユーザー権限で起動。
virt-manager

新しい仮想マシンを作成する。

ステップ1

名前:record
ローカルインストールメディアからインストール。

ステップ2

ISO イメージに /mnt/work にコピーしたイメージファイルを指定。
OS の種類:Linux
バージョン:Ubuntu 13.10 (Saucy Salamander)

ステップ3

メモリー:2048
CPU:4

ステップ4

管理しているストレージか、他の既存のストレージを選択する
参照ボタン押下
「Storage Pools」から pool を選択
新規ボリュームボタンを押下
名前:record
最大容量:20480 MB
割り当て:20480 MB
完了ボタン押下
作成した record ボリュームを選択
ボリュームを選択ボタンを押下

ステップ5

インストールの前に設定をカスタマイズするをチェック

グラフィックを Spice に切り替え

ディスプレイ VNC を選択
種類:Spice
パスワード:任意のパスワード(未設定でも可)
キーマップ:ja
適用ボタン押下
チャンネルを add したいですか?に 「はい」ボタン押下

インストールの開始ボタンを押下

日本語を選択
Ubuntu Serverをインストールを選択
選択された言語では完全ではありません。と言われるが、「はい」
あとは、日本か日本語を選択

ホスト名:record
ユーザ、パスワードは任意
ホームディレクトリを暗号化しますか?:いいえ
タイムゾーン Asia/Tokyo:はい
ガイド - ディスク全体を使い LVM をセットアップするを選択

自動的にアップデートしないを選択

インストールするソフトウェアは以下のものを選択
OpenSSH server
Samba file server

インストールが完了したら、ゲストを停止する。

録画ファイル保存用ストレージを追加

※仮想マシンの作成時にやろうとしたが、定義が重複してるだのヌカスノデ・・・

仮想マシンの情報を表示ボタンを押下
ハードウェアを追加ボタンを押下
Storage を選択
管理しているストレージか、他の既存のストレージを選択する
参照ボタンを押下
pool を選択
record-video (/dev/vg0/record-video) を選択
ボリュームを選択ボタンを押下
デバイスの種類:Virtio disk
キャッシュモデル:writethrough
ストレージ形式:raw
完了ボタン押下

ゲストを起動する

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

参考:ubuntu13.10+pt3+epgrecの環境構築

システムを更新

sudo aptitude update
sudo aptitude full-upgrade

開発関連のパッケージをインストール

sudo aptitude install git automake build-essential libtool binutils-gold paco

リンカが gold になるように設定

sudo update-alternatives --install /usr/bin/ld ld /usr/bin/ld.bfd 1
sudo update-alternatives --install /usr/bin/ld ld /usr/bin/ld.gold 2
update-alternatives --display ld

epgrec 関連のパッケージをインストール

sudo aptitude install apache2 php5 mysql-server mysql-client php5-mysql libav-tools


念のため、ゲストを再起動しておく

recpt1 に関する設定

今回のこの方法は、セキュリティ的にヨロシクナイ。
河豚は食いたし、命は惜しし。

公開鍵認証の設定

www-data ユーザが、ssh 接続をする場合に、コマンド入力を発生させないよう、公開鍵認証方式でホストに接続できるようにする。
接続先ホスト:192.168.1.104
接続先ユーザ:user1
秘密鍵:/var/www/.ssh/id_rsa
公開鍵:/var/www/.ssh/id_rsa.pub

鍵の格納先を作成

sudo mkdir /var/www/.ssh
sudo chmod 700 /var/www/.ssh
sudo chown www-data:www-data /var/www/.ssh

鍵を作成

sudo -H -u www-data /usr/bin/ssh-keygen -N "" -t rsa

公開鍵をホスト側に設定

sudo -H -u www-data /usr/bin/ssh-copy-id user1@192.168.1.104

接続確認

sudo -H -u www-data /usr/bin/ssh -oStrictHostKeyChecking=no user1@192.168.1.104 ls

recpt1 のラッパー作成

ホスト側の recpt1 を ssh 経由で呼び出すラッパーコマンドを作成する。

sudo touch /usr/local/bin/recpt1
sudo chmod 755 /usr/local/bin/recpt1

sudo vi /usr/local/bin/recpt1
#!/bin/bash

SSH=/usr/bin/ssh
SSH_OPT=-oStrictHostKeyChecking=no
REMOTE_USER=user1
REMOTE_HOST=192.168.1.104
REMOTE_CMD=/usr/local/bin/recpt1

cmd_opt="$@"

if [ 3 -le $# ]; then
  # 引数が 3 つ以上の場合
  # 最後の引数を出力ファイルとして取得
  outfile=${*:$#}
  if [ - != ${outfile:0:1} ]; then
    # 出力ファイルの先頭1文字が - でない場合
    # 最後の引数以外を取り出し、出力ファイルにリダイレクト
    cmd_opt="${@:1:$#-1} - > '$outfile'"
  elif [ 2 -le ${#outfile} ]; then
    echo 最後の引数は、出力ファイルを指定して下さい。 1>&2
    exit 1
  fi
fi

# コマンドを実行(:? は、値が設定されていない場合エラーとなる指定)
eval ${SSH:?} $SSH_OPT $REMOTE_USER${REMOTE_USER:+@}${REMOTE_HOST:?} ${REMOTE_CMD:?} $cmd_opt

動作確認

sudo -H -u www-data /usr/local/bin/recpt1 27 10 /tmp/test.ts

ls -la /tmp/test.ts
-rw-r--r-- 1 www-data www-data 21561344  1月 11 10:05 /tmp/test.ts

sudo rm /tmp/test.ts

epgdump のインストール

git clone http://github.com/stz2012/epgdump.git stz_epgdump
cd stz_epgdump
make clean
make
sudo paco -lp epgdump "make install"

epgrec のインストール

at コマンドを epgrec から利用できるように設定

sudo vi /etc/at.deny
以下の行を削除
www-data

MySQL の設定

文字コードを UTF-8 に設定。

以前アップデートした時に、文字化けして痛い目を見たので、設定しておくことにする。
sudo vi /etc/mysql/my.cnf
[client] および [mysqld] に以下の設定を追加する。

[client]
default-character-set = utf8

[mysqld]
character-set-server = utf8

MySQL の再起動

sudo service mysql restart

設定の確認

mysql -u root -p
mysql> show variables like 'character_set%';
+--------------------------+----------------------------+
| Variable_name                  | Value                                |
+--------------------------+----------------------------+
| character_set_client           | utf8                           |
| character_set_connection   | utf8                            |
| character_set_database      | utf8                           |
| character_set_filesystem    | binary                         |
| character_set_results         | utf8                           |
| character_set_server         | utf8                           |
| character_set_system        | utf8                           |
| character_sets_dir             | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

データベースおよびユーザ作成

mysql> create database epgrec;
mysql> grant all on epgrec.* to epgrec@localhost identified by 'パスワードをここに記述'; mysql> flush privileges;

epgrec をダウンロード

cd /var/www
sudo git clone http://github.com/stz2012/epgrec.git epgrec

録画ファイル保存用ストレージのマウント設定

マウントディレクトリ内のファイルを削除

sudo rm /var/www/epgrec/video/*

UUID を調べる

sudo blkid
/dev/vdb: UUID="9e7ef31a-a571-44be-94c8-fa8e5b124f2e" TYPE="ext4"

fstab に追加

sudo vi /etc/fstab
UUID=9e7ef31a-a571-44be-94c8-fa8e5b124f2e /var/www/epgrec/video  ext4  defaults  0  2

マウント

sudo mount /var/www/epgrec/video

video ディレクトリ内のファイルを元に戻す

cd /var/www/epgrec
sudo git checkout .

epgrec の設定

cd /var/www
sudo chown -R www-data:www-data ./epgrec
cd epgrec
sudo cp do-record.sh.pt1 ./do-record.sh
sudo chown www-data:www-data do-record.sh
sudo chmod 755 do-record.sh
sudo chmod 777 cache settings templates_c thumbs video
sudo chmod 666 thumbs/index.html video/index.html
sudo cp config.php.sample config.php

sudo vi config.php
以下のように変更した。ただし、地域が変われば設定も変わる。
--- config.php.sample   2014-01-07 20:53:30.667557000 +0900
+++ config.php  2014-01-07 20:51:59.699557000 +0900
@@ -14,9 +14,10 @@
        "GR24" => "24",         // テレ朝
        "GR23" => "23",         // テレ東
 //     "GR20" => "20",         // MX TV
-//     "GR18" => "18",         // テレ神
-       "GR30" => "30",         // 千葉
-//     "GR32" => "32",         // テレ玉
+       "GR20" => "16",         // MX TV
+       "GR18" => "18",         // テレ神
+//     "GR30" => "30",         // 千葉
+       "GR32" => "32",         // テレ玉
        "GR28" => "28",         // 大学
 );

定期的に番組表を取得するクーロンを設定

sudo cp /var/www/epgrec/cron.d/getepg  /etc/cron.d

2箇所の php.ini を同様に編集

sudo vi /etc/php5/cli/php.ini
sudo vi /etc/php5/apache2/php.ini

以下の行をコメントアウト
disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,・・・・・

;disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,・・・・・

以下の行をコメントインして値を設定
;date.timezone =

date.timezone = "Asia/Tokyo"

Apache のデフォルト文字コードを UTF-8 に設定

sudo vi /etc/apache2/conf-available/charset.conf
#AddDefaultCharset UTF-8
AddDefaultCharset UTF-8


Apache を再起動

sudo service apache2 restart

ブラウザで接続

http://record/epgrec

次の画面での設定
変更した箇所だけ列挙する。
MySQL接続ユーザー名:epgrec
MySQL接続パスワード:データベース作成時に設定したパスワード
使用データベース名:epgrec
インストールURL:http://サーバー名/epgrec
サムネールの使用:使用する
ffmpegのパス:/usr/bin/avconv

設定を保存するボタンを押下

次の画面の設定は、好みに応じて適宜行うこと。

さらに進めて、EPG の初回受信を行う。
画面の説明で、cron の設定について書いてあるが、前述の設定で既に設定済みとなっている。

EPG 受信の手動実行方法
初回受信で失敗した場合、手動で実行してみる。
sudo -H -u www-data /var/www/epgrec/getepg.php


これで、設定はすべて完了。





おまけ

番組表表示で、チャンネルの並び順が、お気に召さなかったので、ちょっとパッチをした。
stz 版のソート順は、sid の昇順となっているようだ。

チャンネルテーブルにソート順カラムを追加
mysql -u epgrec -D epgrec -p
ALTER TABLE Recorder_channelTbl ADD sort INT(6) NOT NULL DEFAULT 500;

ソースにパッチ
sudo vi /var/www/epgrec/index.php
 45 // チャンネルマップ
 46 $tmprec = new DBRecord(CHANNEL_TBL);
-47 $recarr = $tmprec->fetch_array( "type", $type, "id > 0 ORDER BY sid+0 ASC" );
+47 $recarr = $tmprec->fetch_array( "type", $type, "id > 0 ORDER BY sort, sid+0" );

お好みのソート順を設定
TOKYO MX, tvk1, テレビ東京, テレ玉
UPDATE Recorder_channelTbl SET sort = 100 WHERE type = 'GR' AND channel IN ('16', '18', '23','32');

フジテレビ, TBS, テレビ朝日, 日テレ
UPDATE Recorder_channelTbl SET sort = 200 WHERE type = 'GR' AND channel IN ('21', '22', '24', '25');

放送大学
UPDATE Recorder_channelTbl SET sort = 1000 WHERE type = 'GR' AND channel = '28';