Raspberry PiにKodiをセットアップして、ISOファイルをテレビで見る

# 背景

子どもたちの成長の記録をDVDに記録している。
ただ、プレイヤーに毎回入れ替えて観るのが面倒になってきたので、DVDをISO形式に変換して取り込み、テレビで直接見る方法を検討。

自宅に眠っていた[Raspberry Pi](https://www.raspberrypi.org/)にオープンソースのホームシアターソフト[Kodi](https://kodi.tv/)をインストールして、テレビにHDMIで接続することで実現することに。

数年前に構築したが、時々ハードウェア更新などで再セットアップをしていて、その都度調べながら構築していたので、思い切って手順を書き起こした。
主に自分用に書いたものなので、ところどころ体裁が整っていない点はご容赦いただきたい。

# ハードウェア

## 本体

* Raspberry Pi3 Model B
    * 性能がアップした最新版の`Raspberry Pi4 Model B`もあるので、今から買うなら最新版でも可。
    * 普通に買うと基板単体なのでケース付きがオススメ

## microSDカード

* 容量16GB以上が1枚あれば十分。
* ただし、class10規格対応必須。読み込み速度80MB/s以上だとGood。
* 相性問題について
    * TOSHIBA製　`推奨`
        * 相性問題の報告見つからず
        * 我が家でも、現在はTOSHIBA製のmicroSDカードを使用しているが、半年以上使い続けても不具合なし
    * SunDisk製　`非推奨`
        * 相性問題の報告が多い
        * 我が家でも、複数のSunDisk製microSDカードを使用したことがあるが、最初は問題なく使えていても数カ月後に起動しなくなるという事象を幾度となく経験した

## USB電源とmicroUSBケーブル（5V、2.5A）

* 5V、2.5A程度を供給できるUSB電源とmicroUSBケーブルがあればOK。
* なければ、ラズベリーパイ公式の電源を用意する。

## USBの外付けハードディスク
* DVDのデータを保存するハードディスク

## HDMIケーブル
* ラズベリーパイ本体とテレビを接続するため

## LANケーブル
* ラズベリーパイ本体をネットに繋げるため
（ルーターからテレビ付近に伸ばしておく）

# ソフトウェア

## Raspbianイメージの入手

国内ミラー：
http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian/images/


## Raspbianイメージのカスタマイズ

VMware Player上に、Ubuntu 18.04LTSのVMを構築して実施した。

```bash
# アーカイブを解凍する
$ unzip 2019-09-26-raspbian-buster.zip
$ ll 2019-09-26-raspbian-buster.img 
-rw-r--r-- 1 user user 3829399552 Sep 25 17:31 2019-09-26-raspbian-buster.img

# イメージをマウントする
$ sudo apt install kpartx
$ sudo kpartx -a 2019-09-26-raspbian-buster.img
$ ll /dev/mapper/
合計 0
drwxr-xr-x  2 root root     100 Oct  4 06:28 ./
drwxr-xr-x 18 root root    4260 Oct  4 06:28 ../
crw-------  1 root root 10, 236 Oct  4 06:26 control
lrwxrwxrwx  1 root root       7 Oct  4 06:28 loop14p1 -> ../dm-0
lrwxrwxrwx  1 root root       7 Oct  4 06:28 loop14p2 -> ../dm-1

# bootパーティションをマウントしてSSHを有効化
$ sudo mkdir /mnt/pi
$ sudo mount /dev/mapper/loop14p1 /mnt/pi
$ sudo touch /mnt/pi/ssh
$ sudo umount /mnt/pi 

# dataパーティションをマウント
$ sudo mount /dev/mapper/loop14p2 /mnt/pi

# 国内リポジトリに変更
# ping速度の早い順に記載しておくと良い
# 2019/10/04 22:48時点で（我が家の場合）
#   - ftp.tsukuba.wide.ad.jp    8.284 ms
#   - ftp.yz.yamagata-u.ac.jp  15.722 ms
#   - ftp.jaist.ac.jp          16.049 ms
# ベースのDabianバージョンが変わっている場合は「buster」の部分を該当するコードネームに書き換える
$ sudo nano /mnt/pi/etc/apt/sources.list
deb http://ftp.tsukuba.wide.ad.jp/Linux/raspbian/raspbian/ buster main contrib non-free rpi
deb http://ftp.yz.yamagata-u.ac.jp/pub/linux/raspbian/raspbian/ buster main contrib non-free rpi
deb http://ftp.jaist.ac.jp/raspbian buster main contrib non-free rpi

# （任意）Wi-Fi設定
$ sudo nano /mnt/pi/etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP
network={
   ssid="HIKARI"
   psk="takumana1014"
}

# dataパーティションのマウントを解除
$ sudo umount /mnt/pi 

# イメージのマウントを解除する
$ sudo kpartx -d 2019-09-26-raspbian-buster.img
$ ll 2019-09-26-raspbian-buster.img 
-rw-r--r-- 1 user user 3829399552 Oct  4 07:03 2019-09-26-raspbian-buster.img

# 転送用にイメージを再度圧縮
$ zip 2019-09-26-raspbian-buster.zip 2019-09-26-raspbian-buster.img 
```

## Raspbianイメージの書き込み

* 書き込みソフト：  
https://www.balena.io/etcher/

## Raspberry Piへの接続

コマンドプロンプト、PowerShell，WSLなど好みのターミナルから、Raspberry Piに接続する。

```bash
$ ping raspberrypi.local
$ ssh pi@raspberrypi.local
```

## Raspberry Piの初期設定

```bash
# raspi-configによる初期設定
# 8 Update
# 1 Change User Password
# 4 Localisation Options > Change Locale
# 4 Localisation Options > Change Timezone
# 4 Localisation Options > Change Wi-fi Country
# 7 Advanced Options > Memory Split > 256
$ sudo raspi-config

# パッケージリストの更新＆パッケージの更新
$ sudo apt update && sudo apt upgrade -y
# カーネルの更新
$ sudo apt dist-upgrade
# 不要パッケージ＆ソースファイルの自動削除
$ sudo apt autoremove -y && sudo apt autoclean -y

# 再起動
$ sudo reboot
```

## Kodiのセットアップ

```bash
# Kodiのインストール
$ sudo apt-get update && sudo apt-get install kodi -y

# 自動起動の設定
$ sudo nano /lib/systemd/system/kodi.service
[Unit]
Description = Kodi Media Center
After = remote-fs.target network-online.target
Wants = network-online.target
[Service]
User = pi
Group = pi
Type = simple
ExecStart = /usr/bin/kodi
Restart = on-abort
RestartSec = 5
[Install]
WantedBy = multi-user.target

$ sudo systemctl enable kodi.service

# 再起動
$ sudo reboot
```

# USB接続した外付けHDDのマウント

```bash
# デバイス名を確認
$ sudo fdisk -l
Disk /dev/sda: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: HDP-U
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 2B1D277F-A5FF-4D5A-8EFD-B19868879CA6

Device      Start        End    Sectors   Size Type
/dev/sda1      34     262177     262144   128M Microsoft reserved
/dev/sda2  264192 1953523711 1953259520 931.4G Microsoft basic data

# UUIDを確認
$ sudo blkid /dev/sda2
/dev/sda2: UUID="7CF45484F4544296" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="c38a8a2e-f742-4dc6-bdec-13d0bf36688d"

# マウント先を作成
$ sudo mkdir /mnt/usb1

# 自動マウントの設定
$ sudo vi /etc/fstab
proc            /proc           proc    defaults          0       0
PARTUUID=d9b3f436-01  /boot           vfat    defaults          0       2
PARTUUID=d9b3f436-02  /               ext4    defaults,noatime  0       1
UUID="7CF45484F4544296"  /mnt/usb1             ntfs    defaults,noatime,nofail  0       0

# 再起動
$ sudo reboot
```

# Kodi Tips

## サムネイルの設定

### フォルダのサムネイル

サムネイルを適用したいフォルダーの直下に`folder.jpg`を配置。

### コンテンツのサムネイル

コンテンツと同じファイル名で拡張子を`*.tbn`に変更した画像ファイルを配置。

### 例

```text
[幼稚園]
　+-- folder.jpg  // フォルダのサムネイル画像
　+-- 年少.iso
　+-- 年少.tbn    // "年少.iso"のサムネイル画像
　+-- 年中.iso
　+-- 年中.tbn    // "年中.iso"のサムネイル画像
　+-- 年長.iso
　+-- 年長.tbn    // "年長.iso"のサムネイル画像
```