Open13

Raspberry Piでお遊び。

はじめに

手元に発掘されたRasPIをつかって、"こそっと"ちいさな思い付きを実行しようと考えてます。

  • ちょっとだけ新しいことをやる。
  • API叩いて色々と
  • ヘルスケア関連をまとめたい
  • 環境情報の収集と制御

できる未来

  • まぁ、あと10年は平和に生きたい。体調と環境関連でなんかできないか?
  • 仮想通貨とか面白い。色々試したい。儲かるとGood!
  • サーバ(ってほどでもないけど)管理系とかすっかり忘れてるので

Raspberry Pi 2B+以外も入手したのでタイトルを変えた。

環境

  • Raspberry Pi 2B+
  • tp-link TL-WN725N (Wi-Fi)
  • tp-link UB400 (Bluetooth)
  • (SDCard)

OS


Network設定

  • USBデバイスの確認
$ lsusb
Bus 001 Device 004: ID 0bda:8179 Realtek Semiconductor Corp. RTL8188EUS 802.11n Wireless Network Adapter
(ほか省略)
  • WiFiデバイスの確認
$ iwconfig
wlan0  unassociated Nickname:"<WIFI@REALTEK>"
     Mode:Managed Frequency=2.412 GHz Access Point: Not-Associated
     Sensitivity:0/0
     Retry:off RTS thr:off Fragment thr:off
     Power Management:off
     Link Quality:0 Signal level:0 Noise level:0
     Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
     Tx excessive retries:0 Invalid misc:0 Missed beacon:0

lo    no wireless extensions.

eth0   no wireless extensions.

本体はデバイスを認識してる事がわかる。

  • ネットワーク設定を編集
$ sudo vi /etc/network/interfaces

以下を追加

auto wlan0
allow-hotplug wlan0
iface wlan0 inet manual
wireless-essdid <SSID ステルスの場合>
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
  • Wifi設定
    コマンドで設定値を知る。

wpa_passphrase <接続先のSSID> <パスワード>

$ wpa_passphrase "SSID" "パスワード"
network={
    ssid="SSID"
    #psk="パスワード"
    psk=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
}

この情報を次のファイルに追加する。

$ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
        ssid="SSID"
        psk="パスワード"
        proto=RSN
        key_mgmt=WPA-PSK
        priority=2
}

パスワードの部位はwpa_passphrase でえられる値(HASH値)を使える。こちらのほうが安全。
priority=2にしているのは、有線LAN接続の場合はそちらを優先にするため。

WIFIに接続して通信ができているはずです。

(未設定)

ホスト名を解決する。

このままではDHCPで動的にIPが振られるだけで、他端末から接続するのに苦労する。
基本ssh接続だしね。
そこで、他端末からも参照できるようにホスト名でアクセスできるよういしたい。

デフォルトホスト名を変更する。

デフォルトは、”raspberrypi”です。
これを好きなホスト名に変更する。

変更するのは以下のファイル。
/etc/hostname
/etc/hosts

avahi-daemonのインストール

sudo apt-get install avahi-daemon

いわゆるBonjour /Zeroconfですね。
Macでは問題なくホスト名が参照できます。

https://qiita.com/takish/items/1a640576caa2d0dfefc4#avahiの設定

Windowsでは多少設定設定が必要です。私の場合はiTunesをインストールして、FW設定をちょっと変えて対応しています。(メモなし)

結果

ホスト名をpi01とした場合
他の対応ホストからは、pi01.localという名称で見えるはずです。
Windowsの場合は.localを省略しても繋がります(仕様??)


$ ssh pi@pi01.local

別のセグメントへの接続に変更しているので、繋がらない。セグメント越える方法を探す。

追記

いつのまにかlite版でもデフォルトでインストールされるようになってますね。
デフォルトホスト名はraspberrypi。これを都合に合わせて修正するだけ。

Python v3.6をインストールしてみる。

入っていたのは

$ python -V
Python 2.7.16
$ python3 -V
Python 3.7.3

これを参考に。

https://gist.github.com/dschep/24aa61672a2092246eaca2824400d37f
とりあえすビルドツールをインストール
$ sudo apt-get update
$ sudo apt-get install build-essential tk-dev libncurses5-dev libncursesw5-dev libreadline6-dev libdb5.3-dev libgdbm-dev libsqlite3-dev libssl-dev libbz2-dev libexpat1-dev liblzma-dev zlib1g-dev

ソースコード

https://www.python.org/downloads/source/
サンプルのより新しいv3.6.7かなと。
$ wget https://www.python.org/ftp/python/3.6.7/Python-3.6.7.tar.xz
$ tar xf Python-3.6.7.tar.xz
$ cd Python-3.6.7/
$ ./configure
$ make
$ sudo make altinstall

動作確認

$ python3.6 -V
Python 3.6.7

うまくいったようだ。

自宅ネットワーク改善計画に伴い

  • ネットワーク監視系の機能を考えよう。
  • ダッシュボード的なこと。
  • 親セグメントのnameとか作れると良いかも。
  • RPiが古い(遅い)ので他機器考えなければならないかも・

SDCardのbackup/restore

ZABBIXの導入で容量的に不安です。
そんな訳で16GBのSDCardを手持ちの64GBに変更すべく、まずはbackupを。

Windowsで作業するのは簡単そうだけど

結論から言うと、Card Readerがダメなのか、俺の環境ではうまく機能しなかった。
でもまぁ一般的にはこれで事足りるみたい。

https://sourceforge.net/projects/win32diskimager/

MacでBackup

ddコマンド久々すぎて忘れてしまっていたけど。

SDCardを挿してからとりあえずmountの状態確認

$ diskutil list
/dev/disk0 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *500.3 GB   disk0
   1:                        EFI EFI                     314.6 MB   disk0s1

(省略)

/dev/disk2 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *15.7 GB    disk2
   1:             Windows_FAT_32 boot                    268.4 MB   disk2s1
   2:                      Linux

/dev/disk2がSDCardだとわかる。これをunmountする。

$ diskutil unmountDisk /dev/disk2
Unmount of all volumes on disk2 was successful

あとはddコマンドです。

dd if=<Backup対象のDisk> of=<イメージファイル名> bs=1m

$ sudo dd if=/dev/disk2 of=backup.img bs=1m
Password:

MacでRestore

新しいSDCardを挿して、unmountまでは同じ手順。

dd if=<イメージファイル名> of=<SDCardのdevice> bs=1m

$ dd if=backup.img of=/dev/disk2 bs=1m

めっちゃ時間かかる。
この場合/dev/rdisk2という具合にrをつけると早くなるしい。

参考

https://www.sutekishift.tokyo/entry/raspi-backup-sdcard

ファームウェア

とりあえず、アップデートしてみようと思う。

Package をアップデート

$ sudo apt update
$ sudo apt upgrade
$ sudo apt dist-upgrade

ファームウエアのアップデート

$ sudo rpi-update

再起動

$ sudo reboot

更新の確認

$ vcgencmd version

2B+をUSBブートにする。

/boot/conofig.txtに設定を追加

$ echo "program_usb_boot_mode=1" | sudo tee -a /boot/config.txt
program_usb_boot_mode=1
$ echo "program_usb_boot_timeout=1" | sudo tee -a /boot/config.txt
program_usb_boot_timeout=1

再起動する。

$ sudo reboot

これでUSBdeviceからブートするはず。

参考

http://www.lifewithunix.jp/notes/2020/09/15/raspberry-pi-2_3-boot-os-from-usb-memory/
https://raspberrypi.akaneiro.jp/archives/1431

結果

うまくいっていない。ううむ...
どうもH/Wには'PCB Revision`というものがあるらしく、2B+ はRev1.2からこれら方法でUSBブートができるらしい。そんでもって調べた。

cpuinfoのRevisionから

$ cat /proc/cpuinfo | grep Revision
Revision	: a01041

bit単位で解釈できるらしく。面倒だと思っていたけど見つけてしまった。

https://elinux.org/RPi_HardwareHistory

ううむ、Rev1.1か。
残念。

RPi 2B+ tuning

手持ちの2B+がUSBブート不可だと分かったのでSDCardの延命化に取り組み始めることに。

swapを無効化する。

$ sudo swapoff --all
$ sudo systemctl stop dphys-swapfile
$ sudo systemctl disable dphys-swapfile

確認

$ free
              total        used        free      shared  buff/cache   available
Mem:         945372      333772      232836       31864      378764      523160
Swap:             0           0           0

swapが0になった。

Bluetooth

使わないので落とす。

$ sudo systemctl stop hciuart.service
$ sudo systemctl stop bluealsa.service
$ sudo systemctl stop bluetooth.service

自動起動も

$ sudo systemctl disable hciuart.service
$ sudo systemctl disable bluealsa.service
$ sudo systemctl disable bluetooth.service

Wifi

これも結局使ってないので落とす。

$ sudo iwconfig wlan0 txpower off
$ sudo iwconfig wlan0 txpower auto 

2B+では意味なかったけど。(内蔵してないからかな)

ログ保存

これも減らす。

/etc/rsyslog.conf

(途中省略)

###############
#### RULES ####
###############

#
# First some standard log files.  Log by facility.
#
auth,authpriv.*                 /var/log/auth.log
*.*;auth,authpriv.none          -/var/log/syslog
#cron.*                         /var/log/cron.log
#daemon.*                       -/var/log/daemon.log
#kern.*                         -/var/log/kern.log
#lpr.*                          -/var/log/lpr.log
#mail.*                         -/var/log/mail.log
#user.*                         -/var/log/user.log

#
# Logging for the mail system.  Split it up so that
# it is easy to write scripts to parse these files.
#
#mail.info                      -/var/log/mail.info
#mail.warn                      -/var/log/mail.warn
#mail.err                       /var/log/mail.err

#
# Some "catch-all" log files.
#
#*.=debug;\
#       auth,authpriv.none;\
#       news.none;mail.none     -/var/log/debug
*.=info;*.=notice;*.=warn;\
        auth,authpriv.none;\
        cron,daemon.none;\
        mail,news.none          -/var/log/messages

#
# Emergencies are sent to everybody logged in.
#
*.emerg                         :omusrmsg:*

起動しているタスク分もあるけど...

tmpフォルダ の RAMディスク化

状況を確認

$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/root         15G  3.9G  9.7G   29% /
devtmpfs         430M     0  430M    0% /dev
tmpfs            462M     0  462M    0% /dev/shm
tmpfs            462M   18M  444M    4% /run
tmpfs            5.0M  4.0K  5.0M    1% /run/lock
tmpfs            462M     0  462M    0% /sys/fs/cgroup
/dev/mmcblk0p1   253M   49M  205M   20% /boot
tmpfs             93M     0   93M    0% /run/user/1000

/etc/fstab に追加。

tmpfs /tmp tmpfs defaults,size=32m 0 0
tmpfs /var/tmp tmpfs defaults,size=16m 0 0

再起動すると

$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/root         15G  3.9G  9.7G   29% /
devtmpfs         430M     0  430M    0% /dev
tmpfs            462M     0  462M    0% /dev/shm
tmpfs            462M  6.2M  456M    2% /run
tmpfs            5.0M  4.0K  5.0M    1% /run/lock
tmpfs            462M     0  462M    0% /sys/fs/cgroup
tmpfs             32M     0   32M    0% /tmp
tmpfs             16M     0   16M    0% /var/tmp
/dev/mmcblk0p1   253M   49M  205M   20% /boot
tmpfs             93M     0   93M    0% /run/user/1000

/tmp /var/tmpがRAMディスク化できたので、SDCard上のものは消す。

$ sudo rm -rf /tmp/*
$ sudo rm -rf /var/tmp/*

これらを初期化するために、リブート設定をする。毎日5:00設定。

$ sudo crontab -e
0 5 * * * /sbin/reboot

Webmin

便利かな〜とか思って、とりあえず2B+に導入してみた。

https://blog.smallserver.jp/raspberry-pi-3-に-webmin-をインストール/

使ってみる。

http://<host_name>:10000へアクセス

https://<host_name>:10000へアクセス

Chromeでは使えない。
Safariは突破できる。(スクリーンショットなし)

rootでログインできる。

悪くはないけど、重い。ZABBIXが同居しているからかな。
でもしばらく使ってみる。
OKならSSHは落として良いかもと思った。

(追加)
パッケージのアップデートがきたので、試してみてるけどもう30分ぐらい終わらない。

TODO:

  • Chromeで使えるようにする。
  • 4B+ (64bit版raspberry pi OS)でも試す。

Argon ONE V2 Case memo

ドキュメントなどは見つからず、ユーティリティーのインストール方法など小冊子がついてくるだけなので目元して残してみる。

https://www.waveshare.com/wiki/PI4-CASE-ARGON-ONE

コントローラのインストール

$ curl https://download.argon40.com/argon1.sh | bash

Fanの制御や搭載されている(らしい)irの制御、電源キーでのシャットダウンなどができるようになるらしい。shellかpythonで書かれている。

ファン制御

$ argonone-config
--------------------------------------
Argon One Fan Speed Configuration Tool
--------------------------------------
WARNING: This will remove existing configuration.
Press Y to continue:Y
Thank you.

Select fan mode:
  1. Always on
  2. Adjust to temperatures (55C, 60C, and 65C)
  3. Customize behavior
  4. Cancel
NOTE: You can also edit /etc/argononed.conf directly
Enter Number (1-4):2

Please provide fan speeds for the following temperatures:
55C (0-100 only):100
60C (0-100 only):100
65C (0-100 only):100
Configuration updated.

select fan modeは温度でFanの使用率を決められる。
常に100%にしたくなります。理由は下記で。

使用感

  • HDMIがフルサイズにしてもらえるのは好印象です。あと、上のユーティリティーを入れれば電源ボタンでシャットダウンとか良い感じです。
  • sata接続ではあるけどM.2が使えます。オプションになっている商品もあるのでご注意を。
  • 基本的に内蔵のFanは小さく全力運転でも静かでよいのですが、筐体全体で放熱しているので筐体は常にホッカホカな状態です。ちょっと心配になるぐらい。
  • 筐体デザインと筐体での放熱で積み重ねできない。何かの上に置くにもちょっと気を使わねばなりません。

irとかもそのうち試して追記します。

参考

https://www.youtube.com/watch?v=CeopZyWZU6A

Geekworm NASPi 2.5" SATA HDD/SSD Kit

2台目に買ったRPI用ケースです。

https://www.amazon.co.jp/gp/product/B096RLX5RF/ref=ppx_yo_dt_b_asin_title_o04_s00?ie=UTF8&psc=1
https://geekworm.com/products/geekworm-naspi-2-5-sata-hdd-ssd-kit-for-raspberry-pi-4-model-b?variant=39426059731032

Documents

https://wiki.geekworm.com/X-C1_Kit

https://wiki.geekworm.com/X-C1_Software

X-C1と呼ばれるボードが付いていて、それを制御するソフトウエアですね。

使用感

  • 電源(USB-C)とマイクロHDIMが近すぎる。付属するフルサイズへの変換器が干渉して使えない。HDMIが2個あるので大きな問題にはならないけど干渉する方がプライマリらしいのでちょっとね。
    別ボードなのだからマイクロHDMIをフルサイズにして欲しかった。

  • Argon oneのようにケース全体で熱を逃しているわけではない。ケースファンは不足しているけど。
    電源ぼボタンによるShutdownなどはうまく機能しているけど、何度かrebootが出来なかった。RPiのfirmwareが古かったかも?最近はその問題はでない。

  • 2.5インチ SSD/HDD対応でうまくまとめられていると思う。SATA M.2であるArgon oneってほとんど意味ないです。2.5インチの方が選択肢多いから。

  • Argon oneはSSDを装着するケースを使うとSDカードの出し入れができなくなる(ケースを開ける必要はある)がこちらはSDCardがちゃんと抜き差しできる。

参考

https://www.youtube.com/watch?v=mABM3ox2WFY
作成者以外のコメントは許可されていません