新規インストールからの一連の設定手順です
いわゆるスマートホーム用Raspberry Piの設定。ディスプレイもキーボードもつなげずに使うこと前提です。
2021/10末リリースのBullsEyeには未対応(未確認)です。
利用目的
- node-redでいろいろ
- Amazon Echo + eRemote mini (RM Mini3) を使った家電の音声コントロール
- LINEメッセージをGoogle Homeで読上げ
- BLE温度・湿度センサーの情報取得
- ひかり電話で相手側電話番号の情報をLINEに通知と読上げ
- tailscale VPNを使って、外から家にアクセス
64bit版RaspberryPi OSのインストール
-
Raspberry Pi Imagerをダウンロードし、PCにインストール
https://www.raspberrypi.org/downloads/ -
SDカードをPCにさす
自分はSDFormatterでフォーマットしますが、必須ではないです。 -
Raspberry Pi Imagerを起動し、SDカードにRaspberry Pi OSを書き込む。
2021/05時点ではRaspberry Pi OS 64bitが選択できないので、RaspiOS lite arm64のダウンロードページで、GUI無し版のLite ARM64をダウンロード。zipを展開し、2021-03-04-RASPIOS-BUSTER-ARM64-LITE.imgを指定。
Raspberry Piをモニタ・キーボードなしで設定する場合
- SDカードを抜き差しし、PCに再度認識させる
- bootというボリューム名がSDカード。sshという空ファイルをここに追加する。Macなら以下のコマンドとなります。
touch /Volumes/boot/ssh
raspi-config
有線LANをつないで起動。PCからssh pi@raspberrypi.localを実行し(ただしMacOSの場合。Windowsだと名前解決できません)、デフォルトのuser:pi, password:raspberryでログインし、sudo raspi-config
で以下の設定。
- 1.System Options
- S3.Password
- S4.Hostname (複数のRaspiがある場合変更を推奨)
- S1.Wireless LAN
- 3.Interfaceing Options - SSH - Enable
- 4.Performance Options - GPU Memory - 16 (画面表示はしないのでGPUメモリを最小限に)
- 5.Localisation Options - Timezone
- 6.Advanced Options - Bootloader Version - Latest
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に以下を追加。再起動するとログは消えるので注意。
pip3 install broadlink
でビルド時に/tmp容量が必要なので256mにしてますが、broadlinkが必要ない場合は32mでも問題を感じたことはないです。
tmpfs /tmp tmpfs defaults,size=256m,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
なお、/var/log/ 以下にディレクトリが存在するのが前提のソフトウェアがあると問題が起きます。典型的な例がnginxです(apacheも)。その場合以下のような設定が必要になります。
d /var/log/nginx 0755 root adm - none
f /var/log/nginx/access.log 0640 www-data adm - none
f /var/log/nginx/error.log 0640 www-data adm - none
OpenMediaVaultをインストールする場合、以下も必要。
d /var/log/cron-apt 0755 root adm - none
Samba
d /var/log/samba 0755 root adm - none
参考: TOSHIBA:DebianにおけるSDカードへの書込み回数の低減方法
SDカードへの書き出しの頻度を下げる
/etc/fstabで/(root)ファイルシステムのオプションにcommit=240を追加。※4分経たないとSDカードに書き込まれないので注意。
/dev/mmcblk0p2 / ext4 defaults,noatime,commit=240 0 1
/boot/configの設定
OS起動中はパワーLED点滅、WiFiのOFF
/boot/overlays/READMEを見て、以下の設定が有効か確認してから設定することをお勧めします。
dtparam=pwr_led_trigger=heartbeat
dtparam=pwr_led_activelow=off
dtoverlay=disable-wifi
Raspberry Pi Zeroの場合は、pwr_ledではなくact_led
dtparam=act_led_trigger=heartbeat
dtparam=act_led_activelow=off
新しいRaspberry Pi4でboost clockを1.8GHzに
比較的新しいRaspberry Pi4だと、boost clockの値が1.5GHzから1.8GHzになっています。
arm_boost=1
省電力設定
あまりおすすめしません。省電力設定が重要な場合に限る。
CPUのコア数を制限(おすすめしません)
maxcpus=2
HDMIをオフにする。10mA程度の節約 (おすすめしません)
sudo /opt/vc/bin/tvservice --off (-pでon)
USBをオフにする。100mAの節約 (おすすめしません)
有線LANが無効になる。上のdisable-wifiと同時に設定してはいけない。
Raspberry Pi 3においては、WiFiをオフにするより有線LAN(USB)をオフにしたほうが効果が大きい。
echo 0 | sudo tee /sys/devices/platform/soc/*.usb/buspower
必要なアプリケーションのインストール
まずは最新に更新
sudo apt-get update
sudo apt-get -y upgrade
apt-getで一括インストール
sudo apt-get -y install emacs-nox whois git bc mosh parallel iotop glances
sudo apt-get -y install arp-scan iftop tcpdump iperf iptraf-ng
gitの初期設定
git config --global user.name "My Name"
git config --global user.email "email address"
node-red
参考: Amazon Echoとラズパイで、音声で照明をon/offする
なお、curlで取得するURLは現在上記ページとは異なっているので下記内容を使用してください。
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
あと、Editor & Admin API securityを参考に、ユーザ認証を追加しておくのもお勧め。
BlackBeam社のスマートリモコン関連
sudo apt-get -y install python3-dev python3-pip libffi-dev libssl-dev rustc cargo
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
catt (Google Nest HubでWebページ表示)
sudo apt-get -y install python3-pip
sudo pip3 install catt
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 で監視する
ただし、ダウンロードするファイルは以下のようにmackerel-agent_linux_arm.tar.gzではなくmackerel-agent_linux_arm64.tar.gzです。
curl -sL https://github.com/mackerelio/mackerel-agent/releases/latest/download/mackerel-agent_linux_arm64.tar.gz | tar xz
sudo mkdir -p /usr/local/bin /etc/mackerel-agent
sudo cp mackerel-agent_linux_arm64/mackerel-agent /usr/local/bin
sudo cp mackerel-agent_linux_arm64/mackerel-agent.conf /etc/mackerel-agent
上記設定後にこれ
[plugin.checks.nas]
command = "ping -c 3 192.168.2.xxx"
max_check_attempts = 1
check_interval = 11
memo = "Health check of ReadyNAS."
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}
VPN (tailscale)
面倒な設定がいらないtailscaleを使う
参考:Setting up Tailscale on Raspbian Buster
sudo apt-get -y install apt-transport-https
curl -fsSL https://pkgs.tailscale.com/stable/raspbian/buster.gpg | sudo apt-key add -
curl -fsSL https://pkgs.tailscale.com/stable/raspbian/buster.list | sudo tee /etc/apt/sources.list.d/tailscale.list
sudo apt-get update
sudo apt-get -y install tailscale
遠隔設置のRaspberryPiの場合、tailscaleの管理画面で該当デバイスの再認証を不要にしておく。Key Expiry
ネットワークパラメータのチューニング
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
USB接続HDDのiowait低減
OpenMediaVaultをインストールして、USB接続HDDをtimemachine backup先とした場合、CPUのiowaitがかなり高くなるので先読みを128KB→32KBに設定。ただし気休め程度です。
echo 32 > /sys/block/sda/queue/read_ahead_kb
SDカード関連
再起動時にfsckをする
shutdown -rF now
SDイメージのバックアップをサイズが違う別のSDにレストアする場合
RPiのSDをバックアップして別のSDに書き込む : サイズが違う場合のパーティション操作