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
wi-fi接続設定追加 # Disable Bluetooth dtoverlay=disable-bt # Enable UART enable_uart=1
$ 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
<finish>でリブート[7 Advanced Options] → [AA Overlay FS] → <はい> → <了解> → <いいえ> → <了解>
母艦$ ssh pi@192.168.0.81
Overlay FS を無効化
$ sudo raspi-config
<finish>でリブート[7 Advanced Options] → [AA Overlay FS] → <いいえ> → <了解> → <了解>
操作ユーザーでログイン
母艦$ ssh radcast@192.168.0.81
Piユーザーの停止(パスワードを期限切れに)
$ sudo passwd -l pi
チャレンジレスポンス認証を許可
$ sudo vi /etc/ssh/sshd_config
NTPの設定変更 ChallengeResponseAuthentication yes
$ 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
電源を落としてUSBメディアを差し込む変更&追加 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
$ 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
<finish>でリブート[7 Advanced Options] → [AA Overlay FS] → <はい> → <了解> → <はい> → <了解>
完成!
思う存分、電源ブチギリを楽しんでください。