LoginSignup
11
21

More than 1 year has passed since last update.

Raspberry Pi 3/4 (RaspberryPi OS 64bit) 一括セットアップ手順: node-redでスマートホーム用

Last updated at Posted at 2021-05-05

新規インストールからの一連の設定手順です

いわゆるスマートホーム用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も)。その場合以下のような設定が必要になります。

/etc/tmpfiles.d/50_nginx.conf
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をインストールする場合、以下も必要。

/etc/tmpfiles.d/50_cron-apt.conf
d /var/log/cron-apt 0755 root adm - none

Samba

/etc/tmpfiles.d/50_samba.conf
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のコア数を制限(おすすめしません)

/boot/cmdline.txt
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

上記設定後にこれ

/etc/mackerel-agent/mackerel-agent.conf
[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

ネットワークパラメータのチューニング

/etc/sysctl.conf
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr

USB接続HDDのiowait低減

OpenMediaVaultをインストールして、USB接続HDDをtimemachine backup先とした場合、CPUのiowaitがかなり高くなるので先読みを128KB→32KBに設定。ただし気休め程度です。

/etc/rc.local
echo 32 > /sys/block/sda/queue/read_ahead_kb 

SDカード関連

再起動時にfsckをする

shutdown -rF now

SDイメージのバックアップをサイズが違う別のSDにレストアする場合

RPiのSDをバックアップして別のSDに書き込む : サイズが違う場合のパーティション操作

11
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
21