CentOS7 で RTL8125B を使えるようにした

comfastというメーカーのネットワークボードを購入し、
Windowsでは問題なく動作したのですが、CentOSの端末にさしても認識してなかったので対応を行いました。

まず、公式のドライバを入れようとしてみましたが、
./autorun.sh を実行するとエラーが発生してうまくいかないため、
ELRepoから入れることに。
(最初から表示されてるのは、M/B上の今まで使用していたものです)

# nmcli device
DEVICE     TYPE      STATE      CONNECTION
enp0sxxxx  ethernet  connected  enp0sxxxx
lo         loopback  unmanaged  --
# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
# sudo yum install kmod-r8125
# reboot

インストールができたので一旦リブート

# nmcli device
DEVICE     TYPE      STATE        CONNECTION
enp0sxxxx  ethernet  connected    enp0sxxxx
enp6sxxxx  ethernet  unavailable  --
lo         loopback  unmanaged    --
# nmcli connection add type ethernet ifname enp6sxxxx con-name enp6sxxxx
# vi /etc/sysconfig/network-scripts/ifcfg-enp6sxxxx #好みに編集
# reboot

私はここでケーブルの繋ぎ変えを行いました。

# nmcli device
DEVICE     TYPE      STATE      CONNECTION
enp6sxxxx  ethernet  connected  enp6sxxxx
enp0sxxxx  ethernet  connected  enp0sxxxx
lo         loopback  unmanaged  --

ということで、正常につながりました。
よかったよかった。

WindowsでIMEの切り替えショートカットが利かなくなった

Windowsのアップデートの影響か、元々[Shift]+[Space]でやっていた切り替えが最近できなくなったので、メモを兼ねて

結論から言うと、下画像のキーの割り当てがオフの状態になっていた。
その下の設定もデフォルトでは何か違うことになっていた。

英語キーボードなので、無変換とか変換キーとかそもそも物理的に存在しないので、
デフォルトそのまま。

Raid Zのディスクが異常になったので交換した

root からのメール

11/23

CurrentPendingSector

Device: /dev/sdd [SAT], 8 Currently unreadable (pending) sectors
OfflineUncorrectableSector

Device: /dev/sdd [SAT], 8 Offline uncorrectable sectors

11/24

FailedReadSmartData

Device: /dev/sdd [SAT], failed to read SMART Attribute Data

12/3

CurrentPendingSector

Device: /dev/sdd [SAT], 16 Currently unreadable (pending) sectors
OfflineUncorrectableSector

Device: /dev/sdd [SAT], 16 Offline uncorrectable sectors

12/4

FailedReadSmartData

Device: /dev/sdd [SAT], failed to read SMART Attribute Data

ZFS の状況確認

# zpool status
  pool: tank
 state: DEGRADED
status: One or more devices has been removed by the administrator.
        Sufficient replicas exist for the pool to continue functioning in a
        degraded state.
action: Online the device using 'zpool online' or replace the device with
        'zpool replace'.
  scan: resilvered 55.5G in 0 days 00:15:39 with 0 errors on Thu Dec  3 16:27:00 2020
config:

        NAME                                 STATE     READ WRITE CKSUM
        tank                                 DEGRADED     0     0     0
          raidz1-0                           DEGRADED     0     0     0
            ata-ST4000DM004-2CV104_ZFN15XX1  ONLINE       0     0     0
            ata-ST4000DM004-2CV104_ZFN15XX2  REMOVED      0     0     0
            ata-ST4000DM004-2CV104_ZFN15XX3  ONLINE       0     0     0
            ata-ST4000DM004-2CV104_ZFN15XX4  ONLINE       0     0     0
            ata-ST4000DM004-2CV104_ZFN15XXr  ONLINE       0     0     0

errors: No known data errors

隔離されてる。
2年半使っていて保証切れてるし、交換(4TB->8TB)することに。
まずは注文

SEAGATE 3.5インチ内蔵HDD8TB ST8000DM004 (8TB SATA) 代理店保証1年
価格:13816円(税込、送料別) (2020/12/9時点)楽天で購入

届いたら、電源を切り、HDD入れ替え
IDを確認

# ls -lh /dev/disk/by-id/

zpoolの状況を確認

$ zpool status
  pool: tank
 state: DEGRADED
status: One or more devices could not be used because the label is missing or
        invalid.  Sufficient replicas exist for the pool to continue
        functioning in a degraded state.
action: Replace the device using 'zpool replace'.
   see: http://zfsonlinux.org/msg/ZFS-8000-4J
  scan: resilvered 55.5G in 0 days 00:15:39 with 0 errors on Thu Dec  3 16:27:00 2020
config:

        NAME                                 STATE     READ WRITE CKSUM
        tank                                 DEGRADED     0     0     0
          raidz1-0                           DEGRADED     0     0     0
            ata-ST4000DM004-2CV104_ZFN15XX1  ONLINE       0     0     0
            9999999999999994100              UNAVAIL      0     0     0  was /dev/disk/by-id/ata-ST4000DM004-2CV104_ZFN15XX2-part1
            ata-ST4000DM004-2CV104_ZFN15XX3  ONLINE       0     0     0
            ata-ST4000DM004-2CV104_ZFN15XX4  ONLINE       0     0     0
            ata-ST4000DM004-2CV104_ZFN15XX5  ONLINE       0     0     0

errors: No known data errors

差し替え

# zpool replace tank ata-ST4000DM004-2CV104_ZFN15XX2 ata-ST8000DM004-2CX188_ZCTXXXXX

再同期中の様子

# zpool status
  pool: tank
 state: DEGRADED
status: One or more devices is currently being resilvered.  The pool will
        continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
  scan: resilver in progress since Tue Dec  8 17:23:26 2020
        186G scanned at 9.80G/s, 9.62M issued at 519K/s, 12.3T total
        0B resilvered, 0.00% done, no estimated completion time
config:

        NAME                                   STATE     READ WRITE CKSUM
        tank                                   DEGRADED     0     0     0
          raidz1-0                             DEGRADED     0     0     0
            ata-ST4000DM004-2CV104_ZFN15XX1    ONLINE       0     0     0
            replacing-1                        DEGRADED     0     0     0
              9999999999999994100              UNAVAIL      0     0     0  was /dev/disk/by-id/ata-ST4000DM004-2CV104_ZFN15XX2-part1
              ata-ST8000DM004-2CX188_ZCTXXXXX  ONLINE       0     0     0
            ata-ST4000DM004-2CV104_ZFN15XX3    ONLINE       0     0     0
            ata-ST4000DM004-2CV104_ZFN15XX4    ONLINE       0     0     0
            ata-ST4000DM004-2CV104_ZFN15XX5    ONLINE       0     0     0

errors: No known data errors

今現在、22時間経っていますが、半分くらいの時間は書き込みも読み込みも行っており、
こんな感じで半分が進んだ程度。

$ zpool status
  pool: tank
 state: DEGRADED
status: One or more devices is currently being resilvered.  The pool will
        continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
  scan: resilver in progress since Tue Dec  8 17:23:26 2020
        8.79T scanned at 116M/s, 8.37T issued at 110M/s, 12.3T total
        1.67T resilvered, 68.11% done, 0 days 10:22:24 to go

その後、再同期完了後にpoolを確認すると、エラーの表示が

$ zpool status -x
  pool: tank
 state: ONLINE
status: One or more devices has experienced an unrecoverable error.  An
        attempt was made to correct the error.  Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
        using 'zpool clear' or replace the device with 'zpool replace'.
   see: http://zfsonlinux.org/msg/ZFS-8000-9P
  scan: resilvered 2.43T in 1 days 07:34:55 with 0 errors on Thu Dec 10 00:58:21 2020

エラーをclearすることに

$ sudo zpool clear tank
$ zpool status -x
all pools are healthy

一回再起動しとこう。。

Raspberry pi 3 と KTV-FSUSB2 で録画鯖を作った

言いたいことなど

先にあとがき

実運用というより今後のためのテスト目的だったが、そういった意味ではうまく行った。
苦労したくないなら、ハードウェアは新しいものを使ったほうが情報が集まりやすくて良いのではないかと思う。

後日談

NFSを使ってファイル鯖に動画を保存するようなことも試したが、
ラズパイ3のエンコードはおそすぎるので役割を分割し、
EPGStation は自作ファイル鯖で動作させるようにした。
また、ラズパイ3は100Mbpsの有線ネットワークなので、
Gigabit対応のUSBのLAN(ただしUSB2.0接続なので、480Mbpsが上限)を接続し、
有線の速度をマシにした。
テストは無事だったのでラズパイ4買うか。

使用したもの

  • ラズパイ3
  • microSD 32GB
  • KTV-FSUSB2(10年程前にpatchV2適用済み)
  • 青BCASカード
  • カードリーダーは不要。カードはFSUSB2本体に挿して使う。

作業の流れ

OSの準備

Raspberry Pi 初期設定

RECFSUSB2Nのインストール

# インストール
sudo apt install gcc g++ libboost-thread-dev libboost-system-dev libboost-filesystem-dev
git clone https://github.com/stz2012/recfsusb2n.git
cd recfsusb2n
make
sudo make install
sudo gpasswd -a pi video
sudo reboot
# 確認
lsusb | grep 0511
# => "Bus 001 Device 004: ID 0511:0029 N'Able (DataBook) Technologies, Inc."

# 録画テスト ※地域に合わせてチャンネル指定を。
# https://www.maspro.co.jp/contact/bro/bro_ch.html
# 下記の例だと、26チャンネルを30秒録画する
recfsusb2n -bv 26 30 test.ts

別の端末に持ってきて適当なプレイヤーで再生テストする。
scp user@ip:test.ts .

再生できたらもう作業の殆どが終わり。

Mirakurunのインストール

当初Docker版を入れようとしてたが、
armは非対応だったため、npmでインストールすることになった。
公式ドキュメントはこちらだが、
nodejs ver.14 だとEPGStationが対応してないようなので、ver.12で以下のように入れた。

curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo npm install pm2 -g
sudo npm install mirakurun -g --unsafe-perm --production
# 必要であれば編集する
sudo mirakurun config server
# RECFSUSB2Nとの連携を設定する
sudo mirakurun config tuners
#- name: KTV-FSUSB2
#  types:
#    - GR
#  command: recfsusb2n -bv <channel> - -
#  isDisabled: false

# 東京タワー以外の方はチャンネルも更新する
# 先程のマスプロのリンク参照
sudo mirakurun config channels

# 起動
sudo mirakurun start
sudo mirakurun status

# テスト
curl http://localhost:40772/api/version
バージョンが返ってきたらOK

EPGStation のインストール

公式ドキュメント通り進める。

git clone https://github.com/l3tnun/EPGStation.git
cd EPGStation/
npm install --no-save
cp config/config.sample.json config/config.json
cp config/operatorLogConfig.sample.json config/operatorLogConfig.json
cp config/serviceLogConfig.sample.json config/serviceLogConfig.json
## ffmpeg ffprobe のパスの書き換え
vi config/config.json
#    "ffmpeg": "/usr/bin/ffmpeg",
#    "ffprobe": "/usr/bin/ffprobe",

# encoder はlibx264だと現実的な速度がでないので、h264_omx を利用したほうが良いと思われる。
# 下のブロックに変更内容を記載する。

# 自動起動設定
sudo pm2 startup
pm2 start dist/server/index.js --name "epgstation"
pm2 save

# 動作確認
curl -I http://localhost:8888/
$ # エンコードは最低レベルの変更で以下のように変更した。
$ #yadifを入れると、変換速度が半分ほどになり、15fpsほどしか出ないので速度重視なら抜いてもいいかも。
$ git diff
diff --git a/config/enc.js b/config/enc.js
index 81ae7c8..8e9191f 100644
--- a/config/enc.js
+++ b/config/enc.js
@@ -11,7 +11,8 @@ const videoHeight = parseInt(process.env.VIDEORESOLUTION, 10);
 const isDualMono = parseInt(process.env.AUDIOCOMPONENTTYPE, 10) == 2;
 const audioBitrate = videoHeight > 720 ? '192k' : '128k';
 const preset = 'veryfast';
-const codec = 'libx264';
+const codec = 'h264_omx';
+const bitrate = '3000k';
 const crf = 23;
 
 const args = ['-y', '-analyzeduration', analyzedurationSize, '-probesize', probesizeSize];
@@ -32,9 +33,9 @@ Array.prototype.push.apply(args,['-movflags', 'faststart']);
 
 // video filter 設定
 let videoFilter = 'yadif';
-if (videoHeight > 720) {
-    videoFilter += ',scale=-2:720'
-}
+//if (videoHeight > 720) {
+//    videoFilter += ',scale=-2:720'
+//}
 Array.prototype.push.apply(args, ['-vf', videoFilter]);
 
 // その他設定
@@ -42,7 +43,8 @@ Array.prototype.push.apply(args,[
     '-preset', preset,
     '-aspect', '16:9',
     '-c:v', codec,
-    '-crf', crf,
+    '-b:v', bitrate,
+//    '-crf', crf,
     '-f', 'mp4',
     '-c:a', 'aac',
     '-ar', '48000',

楽しむ

ローカルネットワーク内のブラウザから
http://<IP of RaspberryPi>:8888/
にアクセスして表示されたら作業完了。

CentOSが7.8にアップグレードしてたけど、zfsが対応してないようなのでダウングレードした

ファイルサーバにつながらなくてサーバを再起動したのですが、
やはりつながらない。
軽く確認したところ、

[root@xfs ~]# zpool list
The ZFS modules are not loaded.
Try running '/sbin/modprobe zfs' as root to load them.
[root@xfs ~]# /sbin/modprobe zfs
modprobe: FATAL: Module zfs not found.

また、このパターン

そして、

[root@xfs ~]# cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
[root@xfs ~]# history | grep zfson
258 sudo yum install http://download.zfsonlinux.org/epel/zfs-release.el7_7.noarch.rpm
259 gpg --quiet --with-fingerprint /etc/pki/rpm-gpg/RPM-GPG-KEY-zfsonlinux

バージョンあってなさそう。。

公式リポジトリを確認したことろ、7.8対応のバージョンはまだなさそう。
ということで、CentOSのバージョンを落とすことに。

ダウングレードした後は、reboot
そして、zfsを最初からインストールし直し。

[root@xfs ~]# zpool list
The ZFS modules are not loaded.
Try running '/sbin/modprobe zfs' as root to load them.
[root@xfs ~]# /sbin/modprobe zfs
modprobe: FATAL: Module zfs not found.

まだ動かない。
カーネルのバージョンが問題の様子(7.8導入のカーネルが動いている)

[root@xfs ~]# uname -r
3.10.0-1127.el7.x86_64

ということで、古いカーネルをインストール(削除したので)

[root@xfs ~]# yum install kernel.x86_64 0:3.10.0-1062.el7

マシンを再起動し、起動中のカーネル選択画面で、1062を選択
無事起動したら、最新カーネルを削除する

[root@xfs ~]# yum remove kernel-3.10.0-1127.el7.x86_64

そして、改めてzfsの再インストール
再度、reboot
そして、、復活!!

自宅マシンとは言え、勝手にバージョンが上がるのは問題あるなと痛感。