2019/12/08

RaspberryPi で radikoを録音して Podcastで配信する(第3章)

raspi-configにOverlay FSの設定が追加されたので、
radcastサーバーをread-onlyで構築してみよう。

母艦での作業


Raspbianインストール

$ sudo dd bs=4M if=2019-09-26-raspbian-buster-lite.img of=/dev/sdb status=progress conv=fsync

事前準備


SSH有効化

$ touch /media/****/boot/ssh

bluetooth無効化、UART有効化

$ vi /media/****/boot/config.txt
追加
# Disable Bluetooth
dtoverlay=disable-bt

# Enable UART
enable_uart=1
wi-fi接続設定

$ vi /media/****/boot/wpa_supplicant.conf
追加
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
暗号化したパスフレーズを追記

$ wpa_passphrase "YourSSID" "YourPassphrase" >> /media/****/boot/wpa_supplicant.conf

固定IPの設定

$ sudo vi /media/****/rootfs/etc/dhcpcd.conf
追加
interface wlan0
  static ip_address=192.168.0.81/24
  static routers=192.168.0.1
  static domain_name_servers=192.168.0.1 8.8.8.8
リポジトリの変更(近場へ)

$ sudo vi /media/****/rootfs/etc/apt/sources.list
変更
deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
↓
deb http://ftp.tsukuba.wide.ad.jp/Linux/raspbian/raspbian/ buster main contrib non-free rpi

IPv6の無効化

$ sudo vi /media/****/rootfs/etc/sysctl.conf
追加
# Disable IPv6
net.ipv6.conf.all.disable_ipv6 = 1

ラズパイでの作業


SSHログイン

母艦$ ssh pi@192.168.0.81
pi@192.168.0.81's password: raspberry

初期設定


viを高機能版に変更

$ sudo apt update
$ sudo apt -y install vim
$ sudo update-alternatives --config editor
⇛ "vim.basic"を選択する

Raspberry Pi 設定(raspi-configのコマンドラインで)

メモリ割り当て

$ sudo raspi-config nonint do_memory_split 16

タイムゾーン

$ sudo raspi-config nonint do_change_timezone "Asia/Tokyo"

ロケール

$ sudo raspi-config nonint do_change_locale "ja_JP.UTF-8"

ホスト名

$ sudo raspi-config nonint do_hostname radcast
再起動
$ sudo reboot
母艦$ ssh pi@192.168.0.81

操作ユーザーの作成

$ sudo useradd -m -s /bin/bash radcast
$ sudo passwd radcast
新しい UNIX パスワードを入力してください: [Password]
新しい UNIX パスワードを再入力してください: [Password]
passwd: パスワードは正しく更新されました

rootユーザーにパスワードを設定する
$ sudo passwd root
新しい UNIX パスワードを入力してください: [RootPassword]
新しい UNIX パスワードを再入力してください: [RootPassword]
passwd: パスワードは正しく更新されました

操作ユーザーでsudoが使えるようにする

$ sudo usermod -aG sudo radcast

システム更新

$ sudo apt update && sudo apt -y dist-upgrade
$ sudo apt -y autoremove && sudo apt autoclean

SSHのホスト鍵を更新

$ sudo rm -v /etc/ssh/ssh_host*
$ sudo dpkg-reconfigure openssh-server

Overlay FS を構築するため、一旦有効化

$ sudo raspi-config
[7 Advanced Options] → [AA Overlay FS]
→ <はい> → <了解> → <いいえ> → <了解>
<finish>でリブート
母艦$ ssh pi@192.168.0.81

Overlay FS を無効化

$ sudo raspi-config
[7 Advanced Options] → [AA Overlay FS]
→ <いいえ> → <了解> → <了解>
<finish>でリブート
操作ユーザーでログイン
母艦$ ssh radcast@192.168.0.81

Piユーザーの停止(パスワードを期限切れに)

$ sudo passwd -l pi

チャレンジレスポンス認証を許可

$ sudo vi /etc/ssh/sshd_config
変更
ChallengeResponseAuthentication yes
NTPの設定

$ sudo vi /etc/systemd/timesyncd.conf
追加
NTP=ntp.nict.jp ntp.jst.mfeed.ad.jp
FallbackNTP=time.google.com
不要サービスの停止

$ sudo systemctl disable avahi-daemon
$ sudo systemctl disable triggerhappy

swapの停止

$ sudo systemctl disable dphys-swapfile
$ sudo dphys-swapfile uninstall

必須ソフトのインストール

$ sudo apt -y install ffmpeg swftools rtmpdump git

Go言語のインストール(Goは最新版をサイトから落として入れる)

https://golang.org/dl/
公式サイトから Linux ARMv6 の最新版パッケージをwgetで取得
$ wget https://dl.google.com/go/goX.XX.X.linux-armv6l.tar.gz

解凍して配置

$ sudo tar -C /usr/local -xzf goX.XX.X.linux-armv6l.tar.gz

環境変数の設定

$ sudo vi /etc/profile
変更
export PATH=
↓
export PATH=$PATH:/usr/local/go/bin
反映のために再起動
$ sudo reboot
母艦$ ssh radcast@192.168.0.81

radcast のセットアップ


radcastの取得

$ go get github.com/omiso46/radcast
動作確認

$ ./go/bin/radcast -setup
地元ラジオ局がつらつらと表示されればOK
アプリインストール

$ sudo cp ./go/bin/radcast /usr/local/bin/radcast

cronの設定

$ sudo crontab -e
過去ファイルの廃棄設定
0 5 * * * find /var/radcast/ -type d -mtime +28 | xargs rm -rf
※毎日05時に、録音から28日経過した番組を削除

定期リブート
45 4 * * 1 /sbin/reboot
※毎週月曜04時45分にリブート

USBメディアの登録

ベースディレクトリ

$ sudo mkdir /var/radcast

ディレクトリオーナーの変更

$ sudo chown radcast.radcast /var/radcast

メディアのマウント定義とRAMDiskの有効化(/tmpなどをtmpfsへ)

$ sudo vi /etc/fstab
変更&追加
proc       /proc       proc     defaults          0     0
PARTUUID=00000000-01   /boot       vfat  defaults         0     2
PARTUUID=00000000-01   /           ext4  defaults,noatime 0     1
↓↓
proc       /proc       proc     defaults          0     0
PARTUUID=00000000-01   /boot       vfat  defaults         0     0
PARTUUID=00000000-01   /           ext4  defaults,noatime 0     0
tmpfs      /tmp          tmpfs  defaults,size=96m 0     0
tmpfs      /var/tmp      tmpfs  defaults,size=8m  0     0
tmpfs      /var/log      tmpfs  defaults,size=8m  0     0
/dev/sda1  /var/radcast  ext4   defaults          0     0
電源を落としてUSBメディアを差し込む
$ sudo halt
母艦$ ssh radcast@192.168.0.81

設定ファイルの構築

$ radcast -setup > radcast.json
$ sudo cp ./radcast.json /var/radcast/radcast.json
$ sudo chown radcast.radcast /var/radcast/radcast.json

録音番組編集

$ vi /var/radcast/radcast.json

チャンネルアイコン

アイコンにしたいお好み画像ファイル(pngフォーマット)を
「 radcast.png 」にリネームして、
/var/radcast/
に格納する。

radicastの自動起動設定
サービス定義ファイル(起動時遅延処理)

$ sudo systemctl edit --force --full initialdelay.service
[Unit]
Description=Initial Delay Service
After=network.target multi-user.target

[Service]
Type=oneshot
User=radcast
ExecStart=sleep 60
TimeoutSec=90

[Install]
WantedBy=multi-user.target
サービス定義ファイル(本体用)

$ sudo systemctl edit --force --full radcast.service
[Unit]
Description=radcast [recording radiko and serving rss for podcast]
After=network.target multi-user.target initialdelay.service

[Service]
Type=simple
Restart=always
User=radcast
ExecStart=/usr/local/bin/radcast
            -config /var/radcast/radcast.json
            -host 192.168.0.81
            -output /var/radcast
            -buffer 30
ExecStop=/bin/kill -WINCH ${MAINPID}

[Install]
WantedBy=multi-user.target
※ExecStart行は1行で記述すること

systemctlに読み込ませる

$ sudo systemctl daemon-reload

サービスの自動起動設定

$ sudo systemctl enable initialdelay.service
$ sudo systemctl enable radcast.service

再起動してエラー確認

$ sudo reboot

秘密鍵をコピーしてログイン時にパスワード入力を省く

母艦$ ssh-copy-id radcast@192.168.0.81
Password: [Password]

Overlay FS を有効化

$ sudo raspi-config
[7 Advanced Options] → [AA Overlay FS]
→ <はい> → <了解> → <はい> → <了解>
<finish>でリブート

完成!


思う存分、電源ブチギリを楽しんでください。

フォロワー