TV録画機の再構築 ~1.RapsberryPi4の再セットアップ~

概要

これまでもRaspberry PiをTV録画機として活用してきた。
運用にかかる負担を、これまでよりも軽くするために再構築を試みる。

この記事ではRapberry Pi4のOSを設定し終えるところまでを記載する。

全体の構成図

※ 赤枠部が本記事での対象

最終的に達成したい内容

  • Raspberry PimicroSDカードを不要として故障を予防
  • HDDをSSDに変更して騒音を減らす
  • Mirakurun/EPGStationをDockerでコンテナ化

ハードウェア一覧

  • Raspberry Pi4 4GB
  • PLEX PX-W3U4
  • SSD 512GB & 2.5インチ外付けケース(USB)

ソフトウェア一覧

  • OS:
    • Raspberry Pi OS Lite
      • Release date: April 4th 2022
      • System: 64-bit
      • Kernel version: 5.15
      • Debian version: 11 (bullseye)

作業の流れ

  1. 既存環境をバックアップ(記事では省略)

    • 設定ファイル
      • /etc/samba/smb.conf
      • systemd/system/の下
      • (変更量が少ないものは手動で変更)
    • 共有フォルダー
      • SFTP
      • Macとの共有
      • 録画ファイル
      • TimeMachine
    • 自作プログラム
      • .sh系(MySh)
      • .py系(Code)
  2. SSDからOSを起動する設定

  3. Raspberry Pi OSの設定

    • ログイン
    • raspi-configをアップデート
    • ロケールの設定
    • タイムゾーンの確認
    • 時刻同期
    • セキュリティ設定
    • 有線LANにIPアドレスを固定設定
    • 公開鍵を登録する
    • パスワード認証の無効化
    • クライアント側の設定(Mac)

SSDからOSを起動する設定

ファームウェアをアップデート

# 現在のバージョンを確認
vcgencmd bootloader_version

# Sep 10 2019 10:41:50
# version f626c772b15ba1b7e0532a8d50a761b3ccbdf3bb (release)
# timestamp 1568112110
# OSのパッケージをアップデート
sudo apt update

# アップデートの対象を表示する
sudo apt list --upgradable

# grep rpi-ee* した結果
# rpi-eeprom-images/oldstable 13.12-1~buster all [1.3-1 からアップグレード可]
# rpi-eeprom/oldstable 13.12-1~buster all [1.3-1 からアップグレード可]

# eepromに関連するパッケージのみインストール
sudo apt install rpi-eeprom-images rpi-eeprom

# ブートローダーの確認
ls /lib/firmware/raspberrypi/bootloader/stable/

# ブートローダーをアップデート
sudo rpi-eeprom-update -a

*** INSTALLING EEPROM UPDATES ***

BOOTLOADER: update available
   CURRENT: 2019910日 火曜日 10:41:50 UTC (1568112110)
    LATEST: 2022125日 火曜日 14:30:41 UTC (1643121041)
   RELEASE: default (/lib/firmware/raspberrypi/bootloader/default)
            Use raspi-config to change the release.

  VL805_FW: Dedicated VL805 EEPROM
   VL805: update available
   CURRENT: 00013701
    LATEST: 000138a1
   CURRENT: 2019910日 火曜日 10:41:50 UTC (1568112110)
    UPDATE: 2022125日 火曜日 14:30:41 UTC (1643121041)
    BOOTFS: /boot

# 再起動
sudo reboot

# アップデート後のバージョンを確認
vcgencmd bootloader_version

2022/01/25 14:30:41
version 6efe41bd9d1e5546fa3715e72e1775b7bd813237 (release)
timestamp 1643121041

# 設定画面を起動
sudo raspi-config

# 設定
設定画面で以下の順に行う

7. Advanced Option Configure advanced settings
-> A7. Bootloader Version Select latest or default boot ROM Software
-> E1. Latest Use the latest version boot ROM software

Configの先頭画面に戻るので Bootを行うDeviceを選択
6.Advanced Option Configure advanced settings
-> A6. Boot Order Choose network or USB device boot
-> B2. USB Boot Boot from USB if available, otherwise boot from SD Card を選択

もし、これらの選択項目が出てこない場合、raspi-configが古いことが原因として考えられる。
その場合は、メニューの8. Updateを選択して、raspi-configを最新版にすることで解決できる。

SSDにOSをインストール

Raspberry Pi Imagerをインストール

  1. Raspberry Pi OSのダウンロードとmicroSDカードへ書き込むために使うRaspberry Pi Imagerをインストールする

  2. Raspberry Pi公式サイト(https://www.raspberrypi.com/)を開く。

  3. 上部メニューからSoftwareを選択

  4. "Install Raspberry Pi OS using Raspberry Pi Imager" の部分で Download for macOSを選択

  5. ダウンロードしたRaspberry Pi Imager(imager_1.7.2.dmg)をダブルクリックして実行

  6. 新規ウィンドウが開いた中で、Raspberry Pi Imager.app(左側)をApplication(右側)へドラッグアンドドロップ

  7. LaunchPadからアプリケーションを実行する

  8. 「開いてもよろしいですか?」の確認画面で、開くを選択

  9. 以下のように入力

  10. OS: RASPBERRY PI OS LITE(64-BIT)
  11. ストレージ: Crucial_CT525MX300SSD1(525GB USB接続)
  12. 右下の歯車:

    • SSHを有効化するにチェック
      • パスワード認証を使う
      • 公開鍵認証のみを許可する
        ※公開鍵認証の設定をしたいが、"Authentication failed (publickey)" になるため使わない
    • ユーザー名とパスワードを設定するにチェック
      • ユーザー名とパスワードを入れる
    • ロケール設定をするにチェック
      • タイムゾーンをAsia/Tokyo、キーボードレイアウトをjpとする
        Wifiのパスワードをシステムのキーチェーンから読み取るかどうかはNoを選択。Wifiを設定しないため。
    • 設定が終わったら、保存を選択
  13. WRITEボタンを選択すると、削除してしまうことの確認(Imagerのアプリ)とパスワード入力(OSによる確認)とが2回出るので確認をして続行する

  14. 正常に完了したことが表示される(1分もかからないくらい)

Rapberry Pi OSの設定

Raspberry Piをシャットダウンし、USB-SSDを接続しMicroSDカードを外して、電源をONにする

ログイン

Macの場合

$ cd ~
$ vi .ssh/config

Host RP4
  HostName [ホスト名/IPアドレス]
  User [ユーザー名]
  #  IdentityFile [秘密鍵があるファイルへのフルパス]

HostNameのところは通常IPアドレスを設定しているが、このタイミングではDHCPで割り振られるのでわからない。
raspberrypi.localとしていったん接続すると良い。
また、このタイミングでは、公開鍵認証を使えないのでIdentityFileの行をコメントアウト

ターミナルから以下のようにして接続

$ ssh RP4

raspi-configをアップデート

$ sudo raspi-config

8 Updateを選択して最新版へとアップデートする。

ロケールの設定

$ sudo raspi-config

5 Localisation Options -> Locale -> ja_JP.UTF-8を選択(2回選択)

タイムゾーンの確認

インストール時に可能となったため、設定は不要。確認事項のみ。

$ timedatectl status

# @raspberrypi:~ $ timedatectl status
#               Local time: Sun 2022-08-14 16:40:26 JST
#           Universal time: Sun 2022-08-14 07:40:26 UTC
#                 RTC time: n/a
#                Time zone: Asia/Tokyo (JST, +0900)
#System clock synchronized: yes
#              NTP service: active
#          RTC in local TZ: no

Local timeがJSTとなっていることと、Time zoneがAsia/Tokyoになっていることを確認

時刻同期

/etc/systemd/timesyncd.conf をviで開く(sudoが必要)

以下のように設定する

$ sudo vi /etc/systemd/timesyncd.conf

[Time]
NTP=ntp.jst.mfeed.ad.jp ntp.nict.jp

デーモンを再起動

$ sudo systemctl restart systemd-timesyncd

同期されていることを再確認

$ timedatectl status

セキュリティ設定

パスワード無しでのsudoを禁止する

$ sudo vi /etc/sudoers.d/010_pi-nopasswd

1行しかないファイルが表示される。コメントアウトする。
readonlyのファイルとなっている。
viで終了する際に、「:w !sudo tee %」コマンドを入力して強制的に保存する。

以下参考
Raspbianでpiユーザ名とパスワードをうまいこと変更する

sudoの有効化

$ groups [ユーザー名]
[ユーザー名] : [所属しているグループの一覧]

sudoグループに所属していなかったら、ユーザーをsudoグループへ追加する

$ sudo gpasswd -a [ユーザー名] sudo
Adding user [ユーザー名] to group sudo

有線LANにIPアドレスを固定設定

/etc/dhcpcd.conf で設定

$ sudo vi /etc/dhcpcd.conf

以下の4行を追加

interface eth0
static ip_address=192.168.1.3/24
static routers=192.168.1.1
static domain_name_servers=8.8.4.4 8.8.8.8

dhcpcdをリロード

$ sudo service dhcpcd reload

公開鍵を登録する

事前にクライアント側でSFTPができるように設定し、SFTPを使ってRaspberry Piへ公開鍵を転送する。

# ホームディレクトリに専用のフォルダを作成
$ cd ~
$ mkdir .ssh

# 公開鍵を移動してリネーム
$ mv id_rsa_openssh.pub .ssh/authorized_keys

# 権限を設定
$ chmod 700 .ssh
$ chmod 600 .ssh/authorized_keys

# sshd_configを編集
$ sudo vi /etc/ssh/sshd_config

# 以下の2つをコメントイン
`#PubkeyAuthentication yes`
`#AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2`

# sshdを再起動
$ sudo systemctl restart sshd.service

このタイミングで、公開鍵認証によるsshログインが成功することを確認する。

成功したことを確認した上で、以下のパスワード認証の無効化を実施する。

パスワード認証の無効化

# sshd_configを編集
$ sudo vi /etc/ssh/sshd_config

# パスワード認証を無効にする
#PasswordAuthentication yes
↓
PasswordAuthentication no
これを行うと、秘密鍵なしでログインできなくなる。

# sshdを再起動
$ sudo systemctl restart sshd.service

パスワード認証でログインを試みて、失敗することを確認する。

クライアント側の設定(Mac

~/.ssh/ の下に秘密鍵を置く

sshクライアントのコンフィグを作成

$ vi ~/.ssh/config
Host [ホスト名]
  HostName [IPアドレス]
  User [ユーザー名]
  IdentityFile ~/.ssh/[秘密鍵のファイル名].ppk

以下の省略したコマンドでRaspberryPiへ接続可能になる。

$ ssh [ホスト名]

実際のコマンドは以下のとおり。

$ ssh -i [IdentityFile] [User]@[Host]