新規インストールからの一連の設定手順です
いわゆるスマートホーム用Raspberry Piの設定。ディスプレイもキーボードもつなげずに使うこと前提です。
利用目的
- node-redでいろいろ
- Amazon Echo + eRemote mini (RM Mini3) を使った家電の音声コントロール
- LINEメッセージをGoogle Homeで読上げ
- BLE温度・湿度センサーの情報取得
- ひかり電話で相手側電話番号の情報をLINEに通知と読上げ
Raspbianのインストール
Raspbian Buster Liteをダウンロード
Raspberry Piのダウンロードページで、GUI無し版のRaspbian Buster Liteをダウンロード
SDカードをSDFormatterでフォーマット
Macでddを使って書き込み
SDカードのデバイスが/dev/disk2なのを確認。
$ diskutil list
/dev/disk0 (internal, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *121.3 GB disk0
1: EFI EFI 209.7 MB disk0s1
2: Apple_CoreStorage Macintosh HD 120.5 GB disk0s2
3: Apple_Boot Recovery HD 650.0 MB disk0s3
/dev/disk1 (internal, virtual):
#: TYPE NAME SIZE IDENTIFIER
0: Apple_HFS Macintosh HD +120.1 GB disk1
Logical Volume on disk0s2
Unlocked Encrypted
/dev/disk2 (internal, physical):
#: TYPE NAME SIZE IDENTIFIER
0: FDisk_partition_scheme *16.0 GB disk2
1: Windows_FAT_32 STRETCHLITE 16.0 GB disk2s1
unmount
$ diskutil unmountDisk /dev/disk2s1
Unmount of all volumes on disk2 was successful
書き込み (XXXは適切なデバイス名に置き換えること)
SDカードのデバイスが/dev/disk2の場合、/dev/rdisk2のように'r'をつけて指定すると高速に書き込みできます。
$ sudo dd bs=1m if=~/Downloads/2018-06-27-raspbian-stretch-lite.img of=/dev/rdiskXXX conv=sync
いつ終わるのか気になる人は、Ctrl+tを押せば途中経過が表示される。
raspi-config
とりあえず、HDMIモニタとキーボードを繋げてデフォルトのuser:pi, password:raspberryでログインし、sudo raspi-config
で以下の設定。
- 1.Change User Password
- 2.Network Options - Hostname (複数のRaspiがある場合要変更)
- 2.Network Options - Wi-fi
- 4.Localisation - Timezone
- 5.Interfaceing Options - SSH - Enable
- 7.Advanced Options - Memory Split - 16 (画面表示はしないのでGPUメモリを最小限に)
hostnname変更時は以下も行う (Busterでは自動で追加されてるようなので不要)
sudo sh -c 'echo 127.0.1.1 $(hostname) >> /etc/hosts'
SDカード延命措置
参考:Raspberry PiのSDカードが壊れた!寿命を延ばす方法 5+1選!
swap無効化
sudo dphys-swapfile swapoff
sudo systemctl stop dphys-swapfile
sudo systemctl disable dphys-swapfile
/tmp, /var/tmp, /var/logのtmpfs化
/etc/fstabに以下を追加。再起動するとログは消えるので注意。
tmpfs /tmp tmpfs defaults,size=32m,noatime,mode=1777 0 0
tmpfs /var/tmp tmpfs defaults,size=16m,noatime,mode=1777 0 0
tmpfs /var/log tmpfs defaults,size=32m,noatime,mode=0755 0 0
ローテートされたログの保存数を減らす: /etc/logrotate.conf 中のrotateを修正(4 → 1)
# keep 4 weeks worth of backlogs
#rotate 4
rotate 1
SDカードへの書き出しの頻度を下げる
/etc/fstabで/(root)ファイルシステムのオプションにcommit=240を追加。※4分立たないとSDカードに書き込まれないので注意。
/dev/mmcblk0p2 / ext4 defaults,noatime,commit=240 0 1
省電力設定
それほどの効果はないと思います。全部やってるわけではないです。
/boot/config.txt (パワーLED点滅、CPUクロック下げる、WiFiのOFF)
dtparam=pwr_led_trigger=heartbeat
arm_freq_min=300
dtoverlay=pi3-disable-wifi
# dtoverlay=pi3-disable-bt
/boot/cmdline.txt (あまりおすすめしません)
maxcpus=2
HDMIをオフにする。10mA程度の節約 (おすすめしません)
sudo /opt/vc/bin/tvservice --off (-pでon)
USBをオフにする。100mAの節約 (おすすめしません)
有線LANが無効になる。上のpi3-disable-wifiと同時に設定してはいけない。
Raspberry Pi 3においては、WiFiをオフにするより有線LAN(USB)をオフにしたほうが効果が大きい。
echo 0 | sudo tee /sys/devices/platform/soc/*.usb/buspower
必要なアプリケーションのインストール
apt-getで一括インストール
sudo apt-get -y install emacs-nox whois git bc mosh parallel iotop
gitの初期設定
git config --global user.name "My Name"
git config --global user.email "email address"
node-red
参考: Amazon Echoとラズパイで、音声で照明をon/offする
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
sudo systemctl start nodered.service
sudo systemctl enable nodered.service
あと、Raspberry PiにおけるNode-REDの活用についての「セキュリティ設定」も適用したほうがいいですね。
BlackBeam社のスマートリモコン関連
sudo apt-get -y install python3-dev python3-pip
sudo pip3 install broadlink
mkdir ~/git
cd ~/git
git clone https://github.com/mjg59/python-broadlink.git
Bluetooth (noble)
sudo apt-get -y install bluetooth libbluetooth-dev libudev-dev
avahi (Google Homeを喋らせるのに必要)
sudo apt-get -y install avahi-daemon avahi-utils libnss-mdns libavahi-compat-libdnssd-dev
sshサービスを公開する
参考: avahi-daemonを設定してDNSサーバ運用をやめた
/etc/avahi/services/ssh.service
<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name replace-wildcards="yes">%h</name>
<service>
<type>_ssh._tcp</type>
<port>22</port>
</service>
</service-group>
sudo systemctl restart avahi-daemon.service
これで、ssh pi@raspberrypi.local でsshログインできるようになる(ただし、Windowsからは不可)。
Mackerelでの監視設定
Mackerelとは、はてなが提供しているサーバー監視サービスで、無料プランでも5台まで監視できるのでRaspberry Piの監視にちょうどいいです。問題発生時にメールだけでなくLINEに通知するようにもできます。
基本的な設定はこちらを参考: Raspberry Pi を Mackerel で監視する
上記設定後にこれ
baresip (ひかり電話の相手番号取得)
参考: Linux でひかり電話にかかってきた電話番号を取得する
sudo apt-get -y install baresip-core
インストール後、一度baresipを起動しCtrl+Cで終了
~/.baresip/configを編集。stdio.so, alsa.soをコメントアウト誌、cons.soを追加
#module stdio.so
#module alsa.so
module cons.so
~/.baresip/accounts に以下を追加
<sip:{内線番号}:{password}@{電話ルータのIPアドレス}>;auth_user={userId}
SD関連
起動時にfsckをする
shutdown -rF now
RPiのSDをバックアップして別のSDに書き込む : サイズが違う場合のパーティション操作