2018/05/23

RaspberryPi で radikoを録音して Podcastで配信する(総集編)

radicast構築記事を自分用にひとまとめ記事に。

・RaspberryPi で radikoを録音して Podcastで配信する(OS編)
・RaspberryPi で radikoを録音して Podcastで配信する(構築編)
・RaspberryPi で radikoを録音して Podcastで配信する(改造編)
・RaspberryPi で radikoを録音して Podcastで配信する(改造編2)

Raspberry Pi zero W に Raspbian Stretch Lite で radicast 専用機を構築します。

Raspbian のインストール(母艦での作業)


microSDを差し込み、fdiskでパーティション削除

$ sudo fdisk /dev/sdb

Raspbianのコピー

$ sudo dd if=2018-04-18-raspbian-stretch-lite.img of=/dev/sdb bs=1M

SSH有効化の準備

$ touch /media/******/boot/SSH

bluetoothの無効化

$ vi /media/******/boot/config.txt
末尾に追加

# Disable Bluetooth
dtoverlay=pi3-disable-bt

Wi-Fi接続情報の設定

$ vi /media/******/boot/wpa_supplicant.conf
平文の場合

country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
  ssid="**YourSSID**"
  psk="**YourPassphrase**"
}

平文が気になる場合は「wpa_passphrase」コマンドで暗号化する

$ wpa_passphrase YourSSID YourPassphrase
network={
  ssid="YourSSID"
  #psk="YourPassphrase" ← 削除
  psk=01afe38da0c3176176b3484f3185ce7f3dc504dc4d51a17a8126f7c0786ced26
}
置き換える

固定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/hosts.deny
末尾に追加

ALL:ALL

$ sudo vi /media/******/rootfs/etc/hosts.allow
末尾に追加

ALL:127.0.0.1
ALL:192.168.0.0/24

リポジトリの変更

$ sudo vi /media/******/rootfs/etc/apt/sources.list
現行サーバ定義をコメント化し、末尾に追加

#deb http://mirrordirector.raspbian.....
deb http://ftp.tsukuba.wide.ad.jp/Linux/raspbian/raspbian/ stretch main contrib non-free rpi

microSDをラズパイに差し込んで。。。

ラズパイ入電!


SSHログイン


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

初期設定


viを高機能版に変更

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

Raspberry Pi 設定(raspi-configを使わずに対話式で)

メモリ割り当て

$ sudo raspi-config nonint do_memory_split 16

タイムゾーン

$ sudo timedatectl set-timezone Asia/Tokyo

言語

$ sudo perl -pe 's/^# (ja_JP.UTF-8 UTF-8)/$1/g' -i /etc/locale.gen
$ sudo locale-gen
$ sudo update-locale LANG=ja_JP.UTF-8

ホスト名

$ sudo raspi-config nonint do_hostname radicast

再起動

$ sudo reboot

操作ユーザーの作成

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

rootユーザーにパスワードを設定する

$ sudo passwd root
新しい UNIX パスワードを入力してください: [Password]
新しい UNIX パスワードを再入力してください: [Password]
passwd: パスワードは正しく更新されました

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

$ sudo visudo
# User privilege specification の下に追加

radicast ALL=(ALL:ALL) ALL

システム更新

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

ファーム更新

$ sudo rpi-update

SSHのホスト鍵を更新

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

再起動して操作ユーザーでログインしなおす

$ sudo reboot
母艦$ ssh radicast@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

USBメディアの登録

可能な限りSDカードへの書き込みを減らすべく
録音ファイルはUSBメディアへ書き込むようにする

ベースディレクトリ
$ sudo mkdir /var/radicast

ディレクトリオーナーの変更
$ sudo chown radicast.radicast /var/radicast

メディアのマウント定義と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/radicast ext4   defaults          0     0

電源を落としてUSBメディアを差し込む

$ sudo halt

電源を入れて操作ユーザーでログイン

母艦$ ssh radicast@192.168.0.81

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

$ sudo apt-get -y install libav-tools swftools rtmpdump git

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

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

解凍して配置
$ sudo tar -C /usr/local -xzf go1.10.2.linux-armv6l.tar.gz

環境変数の設定
$ sudo vi /etc/profile
変更

export PATH=$PATH:/usr/local/go/bin

反映のために再起動
$ sudo reboot

radicast のセットアップ


radicastの取得

$ go get github.com/soh335/radicast
動作確認

$ ./go/bin/radicast -setup
地元ラジオ局がつらつらと表示されればOK

radicastの改造

・無劣化録音対応
・05時開始番組が録音できない不具合の対応
・チャンネルのアイコン設定
・番組のアイコン取得
・他

対象ソースは4本
・converter.go
・podcast.go
・radiko.go
・server.go






Build & Install

$ cd ~/go/src/
$ go build github.com/soh335/radicast/
$ sudo cp ./radicast /usr/local/bin/radicast

設定ファイルの構築

$ cd ~
$ radicast -setup > radicast.json
$ sudo cp ./radicast.json /usr/local/etc/radicast.json
$ sudo chown radicast.radicast /usr/local/etc/radicast.json

録音番組編集

$ vi /usr/local/etc/radicast.json

過去ファイルの自動廃棄設定

$ sudo crontab -e
追加

0 5 * * * find /var/radicast/ -type d
                              -mtime +15
                              | xargs rm -rf
※1行で記述すること
※日次05時に、作成から15日経過したディレクトリを削除

チャンネルアイコン

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

radicastの自動起動設定

サービス定義ファイル
$ sudo vi /etc/systemd/system/radicast.service

[Unit]
Description=radicast [recording radiko and serving rss for podcast]
After=network.target multi-user.target

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

[Install]
WantedBy=multi-user.target
※ExecStart行は1行で記述すること
systemctlに読み込ませる
$ sudo systemctl daemon-reload

サービスの自動起動設定
$ sudo systemctl enable radicast.service

完成!


再起動してエラー確認

2018/05/13

RaspberryPi で radikoを録音して Podcastで配信する(改造編2)

radicast をちょっと弄ってアイコンを表示させる。

・OSインストール編
・システム構築編
・改造編1(無劣化録音対応)

対象ソースは1本
・server.go

差分は次のとおり。


Build & Install

$ cd go/src/
$ go build github.com/soh335/radicast/
$ sudo cp ./radicast /usr/local/bin/

ファイル廃棄の設定変更

$ sudo crontab -e
変更

0 5 * * * find /var/radicast/ -mtime +22 -not -name '*.png' -delete
※毎日05時に22日経過したファイルを削除(ただし、.png は除外)

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

これでお好み画像がアイコン表示される。めでたしめでたし。

フォロワー