先日100円ショップのダイソーに数カ月ぶりに行ったところ550円で32GのmicroSDとUSBメモリが売られていました.
秋葉原や通信販売であれば著名メーカーの同等以上のものが変える値段ですが,今日必要と行った場合には家電量販店やコンビニエンスストアでもっと高い値段で売られています.(未だにclass 4なんかも売っていたり……)
メーカーは磁気研究所で謎メーカーよりは良さそうだし保証期間も1年あるので普通に使えるようなら急に必要になったときに便利かもとmicroSD を1枚買って少し試してみました.
カテゴリー: Raspberry Pi
AWK製FPSゲームの「TERMMAZE3D」
TERMMAZE3D という端末上で動作するAWK製のFPSゲームを見つけたので遊んでみました.
カラフルでかわいい prettyping
pingのカラフルなラッパーの prettyping
というものを知りました.
少し試してみました.
$ curl -O https://raw.githubusercontent.com/denilsonsa/prettyping/master/prettyping
$ install -m 755 ./prettyping ~/bin/
$ ls -l ~/bin/prettyping
-rwxr-xr-x 1 pi pi 23396 Apr 1 22:08 /home/pi/bin/prettyping
$ ~/bin/prettyping 1.1.1.1
0 ▁ 10 ▂ 20 ▃ 30 ▄ 40 ▅ 50 ▆ 60 ▇ 70 █ 80 ▁ 90 ▂ 100 ▃ 110 ▄ 120 ▅ 130 ▆ 140 ▇ 150 █ 160 ▁ 170 ▂
180 ▃ 190 ▄ 200 ▅ 210 ▆ 220 ▇ 230 █ ∞
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
▂▅█▁▄▂█
0/ 7 ( 0%) lost; 76/ 107/ 178ms; last: 76ms
0/ 7 ( 0%) lost; 76/ 107/ 178/ 27ms (last 7)
カラーで見るときれいです.
安定した回線だと緑で面白くないので不安定な回線や遠くのアドレスを指定するといいかもしれません.今回は電波状況の悪い携帯回線で試しました.(-120dBM前後の圏外になったり戻ったりな場所)
https://www.youtube.com/watch?v=gL87DBohRaQ
$ dpkg-query -W iputils-ping curl coreutils coreutils 8.30-3 curl 7.64.0-4+deb10u1 iputils-ping 3:20180629-2+deb10u2 $ lsb_release -dr Description: Raspbian GNU/Linux 10 (buster) Release: 10 $ arch armv7l $ cat /proc/device-tree/model ;echo Raspberry Pi 3 Model B Rev 1.2
標準入力の結果をシームレスに選択してクリップボードにコピーする「yank」
ターミナルからの標準入力の結果をシームレスに選択してクリップボードにコピーしてくれる yank
というコマンドを知りました.
yankは各種環境のパッケージが用意されています.
Debian sid amd64 / Ubuntu 21,04 amd64 / Raspberry Pi OS buster armhf では yank
というパッケージで提供されているのでこれを導入します.
$ sudo apt install yank (1)
$ yank (2)
bash: yank: command not found
$ dpkg -L yank | grep bin/ (3)
/usr/bin/yank-cli
yank
パッケージを導入- yankコマンドが見つからない
- Debian系では名前空間の衝突のためにコマンド名が
yank-cli
になっている.
とりあえず導入できましたが,Debian環境だと yank
コマンドが見つかりません.他のパッケージと名前が競合してしまっているので yank-cli
として提供されているようです.
The binary is installed at /usr/bin/yank-cli due to a naming conflict.
$ apt-file search /bin/yank
emboss: /usr/bin/yank
yank: /usr/bin/yank-cli
競合しているのはなんds楼と検索してみると emboss
というパッケージのようです.
ヨーロッパ分子生物学オープンソフトウェアスイート
EMBOSS は、分子生物学のユーザコミュニティ (例: EMBnet) のために開発された オープンソースな解析用ソフトウェアパッケージです。このソフトウェアを 使うことで、様々なフォーマットで書かれたデータを自動的に処理したり、 ウェブから配列データを透過的に取得したりもできます。また、このパッケージには 拡張ライブラリが含まれているので、真のオープンソース精神に則って ソフトウェアを開発しリリースできるプラットフォームです。 さらに、EMBOSS は様々な配列解析用パッケージやツールとシームレスに 統合されています。EMBOSS は、長く続いた商用パッケージソフトウェアへの流れを 断ち切ったのです。
なかなか熱そうなプロジェクトのようです.
使わないならalias等でyankに向けてもいいかもしれません.
とりあえず導入出来たので試してみます.
$ apt-cache search yank | yank-cli
elpa-csv-mode - Emacs major mode for editing comma/char separated values
python3-readlike - GNU Readline-like line editing module
yank - interactively select and yank terminal output to stdout or xsel
apt-cache search の結果を yank で受けてカーソルなどで単語単位で移動してEnterで選択した部分をクリップボードにコピーします.
クリップボード貼付けをするとたしかにコピーされていました.
例えばパッケージ名をコピーして, $ sudo apt install \`xsel\`
のようにして使うと便利そうです.
その他便利そうなオプションとして, -d
があります.cutコマンドの-dと同じようにデリミタが指定できます.
$ nkf -w mntemsadext00_rct.csv | yank-cli -d,
こんな感じでcsvファイルに ,
を指定してあげると,各項目がコピーできます.
しかし,yankはページ跨ぎが出来ないようです.1ページ目のものしかコピーできません.こういう場合はyankに渡す前にフィルタしてあげるといいようです.grepや,昨日このblogで紹介したyankと同じ作者の「pick」もこういうときに便利です.
$ nkf -w mntemsadext00_rct.csv | grep 田代 | yank-cli -d,`
$ nkf -w mntemsadext00_rct.csv | pick | yank-cli -d,`
なにかの結果の一部が欲しいときに便利そうです.
$ dpkg-query -W yank pick pick 2.0.2-1 yank 1.1.0-2 $ lsb_release -dr Description: Raspbian GNU/Linux 10 (buster) Release: 10 $ uname -m armv7l $ cat /proc/device-tree/model ;echo Raspberry Pi 3 Model B Rev 1.2
$ dpkg-query -W yank pick pick 2.0.2-1.1 yank 1.2.0-1 $ lsb_release -dr Description: Debian GNU/Linux bullseye/sid Release: unstable $ uname -m x86_64
ターミナルダッシュボードのWTFを少し試す
WTFというGo製のターミナルダッシュボードを見かけたので少し試してみました.
導入はLinuxのamd64/armv6/arm64,macOSのamd64/arm64はGitHub releaseページにあるのでそれを使うのが手っ取り早いです.
今回はarmv6をRaspberry Pi 3 Model BのRaspberry Pi OS armhfで試しました.
$ wget https://github.com/wtfutil/wtf/releases/download/v0.36.0/wtf_0.36.0_linux_armv6.tar.gz https://github.com/wtfutil/wtf/releases/download/v0.36.0/wtf_0.36.0_checksums.txt (1)
$ sha256sum -c ./wtf_0.36.0_checksums.txt 2>&1 | grep wtf_0.36.0_linux_armv6.tar.gz: (2)
wtf_0.36.0_linux_armv6.tar.gz: OK
$ tar tvf ./wtf_0.36.0_linux_armv6.tar.gz (3)
-rw-r--r-- ccummer/staff 34534 2021-03-23 19:20 wtf_0.36.0_linux_armv6/CHANGELOG.md
-rw-r--r-- ccummer/staff 14878 2018-12-01 01:13 wtf_0.36.0_linux_armv6/LICENSE.md
-rw-r--r-- ccummer/staff 39700 2021-03-20 13:46 wtf_0.36.0_linux_armv6/README.md
-rwxr-xr-x ccummer/staff 41615360 2021-03-23 19:35 wtf_0.36.0_linux_armv6/wtfutil
$ tar xf ./wtf_0.36.0_linux_armv6.tar.gz (4)
$ wtf_0.36.0_linux_armv6/wtfutil (5)
- Releases ページから最新のバイナリとチェックサムファイルを入手
- チェックサムファイルの中を見ると桁数的にsha256のようだったので,sha256sumでチェックサムを確認
- アーカイブの確認
- アーカイブの展開
- WTF起動
バイナリアーカイブをダウンロードして展開しました.
wtf_0.36.0_linux_armv6/wtfutil
を実行すると既定値で起動します.しかし娘の設定だとターミナルサイズ固定だったりあまり嬉しくありません.
リポジトリの _sample_configs
以下にサンプルがあるのでこれを指定して起動してみます.
設定ファイルは既定値は ~/.config/wtf/config.yml
を使います.存在しない場合はデフォルトのものが生成されます.若しくは wtf の -c, --config=
オプションで指定した設定ファイルを指定できます.
$ wtf_0.36.0_linux_armv6/wtfutil --config=../src/wtf/_sample_configs/sample_config.yml
wtfリポジトリの _sample_configs/sample_config.yml
を指定して起動するとこんな感じでターミナルサイズにも追従していい感じです.
diff --git a/_sample_configs/sample_config.yml b/_sample_configs/sample_config.yml
index e16690a0..fa3bf5c0 100644
--- a/_sample_configs/sample_config.yml
+++ b/_sample_configs/sample_config.yml
@@ -73,10 +73,21 @@ wtf:
width: 1
refreshInterval: 15
sort: "alphabetical"
+ feedreader:
+ enabled: true
+ feeds:
+ - https://nitter.matoken.org/matoken1/rss
+ feedLimit: 10
+ position:
+ top: 1
+ left: 3
+ height: 1
+ width: 1
+ updateInterval: 14400
battery:
type: power
title: "⚡️"
- enabled: true
+ enabled: false
position:
top: 1
left: 3
Raspberry Piは電源ステータスは見えないので無効にして代わりにfeedreaderを有効にしてNitter経由でTwitterのRSSフィードを表示してみました.
日本語や絵文字も崩れず表示できて良さそうですね.
その他にもたくさんのモジュールがあるようです.こちらのページから確認できます.(Nitterを通さなくてもTwitterモジュールもあった)
自分の用途に合わせて設定していくと便利そうです.
$ wtf_0.36.0_linux_armv6/wtfutil --version 0.36.0 (2021-03-23T10:33:30Z) $ lsb_release -dr Description: Raspbian GNU/Linux 10 (buster) Release: 10 $ uname -m armv7l $ cat /proc/device-tree/model ;echo Raspberry Pi 3 Model B Rev 1.2
Raspberry Pi の OSイメージを書き込む Raspberry Pi Imager v1.6 の新機能で書き込み時にカスタマイズ
Raspberry Pi で利用するストレージへのOSイメージ書き込みツールのRaspberry Pi Imagerの最新版のv1.6がリリースされたようです.
自分は出た当初少し試しただけで他のツールに比べて嬉しいことがあまりないと感じたので使っていなかったのですが,このv1.6ではイメージのカスタマイズ機能が入ったようなので試してみました.
Raspberry Pi Imagerの導入
$ sudo apt install rpi-imager
Raspberry Pi OSであればパッケージが存在するのでこれを導入すればokです.
Linux/Windows/macOSはGitHubのreleaseページから入手できます.
若しくは,Raspberry Pi downloadsページにもあります.こちらだとGutHubとファイル名が違いますがamd64の.debをdiffしてみると同じもので署名ファイルもあります..AppImageもありますが試してみると最新ではないようでした.
$ wget https://github.com/raspberrypi/rpi-imager/releases/download/v1.6/rpi-imager_1.6_amd64.deb (1)
$ wget https://downloads.raspberrypi.org/imager/imager_1.6_amd64.deb https://downloads.raspberrypi.org/imager/imager_1.6_amd64.deb.sig (2)
$ diff ./imager_1.6_amd64.deb ./rpi-imager_1.6_amd64.deb (3)
$ gpg2 --verify ./imager_1.6_amd64.deb.sig (4)
gpg: assuming signed data in './imager_1.6_amd64.deb'
gpg: Signature made Tue 16 Mar 2021 08:56:51 PM JST
gpg: using RSA key 54C3DD610D9D1B4AF82A37758738CD6B956F460C
gpg: Good signature from "Raspberry Pi Downloads Signing Key" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 54C3 DD61 0D9D 1B4A F82A 3775 8738 CD6B 956F 460C
$ gpg2 --verify ./imager_1.6_amd64.deb.sig ./rpi-imager_1.6_amd64.deb
gpg: Signature made Tue 16 Mar 2021 08:56:51 PM JST
gpg: using RSA key 54C3DD610D9D1B4AF82A37758738CD6B956F460C
gpg: Good signature from "Raspberry Pi Downloads Signing Key" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 54C3 DD61 0D9D 1B4A F82A 3775 8738 CD6B 956F 460C
$ sudo apt install ././imager_1.6_amd64.deb (5)
- GitHubからダウンロード
- downloads.raspberrypi.orgからダウンロード
- ファイル名は違うけど同じ内容なのを確認
- 署名確認
- インストール
Debian sid amd64環境ではAppImageが古いので.debを導入しました.
Imagerの起動と書き込み設定
Raspberry Pi ロゴのアイコンの「Imager」や, rpi-imager
を実行すると起動します.
ここで,「ctrl + shift + x」を押すことで今回のカスタマイズ用の拡張オプション画面が表示されます.
今回はhostnameの修正,SSHの有効化,ssh公開鍵の登録,Wi-Fi 設定,タイムゾーンの設定を行いました.
「SAVE」して「RASPBERRY PI OS LITE (32-BIT)」を書き込んでみました.
書き込みが終了しても1つ目のパーティション(/boot)がマウントされたままでした.これはバグかな?(1回しか試していないので勘違いかもしれない)
$ mount | grep /dev/mmcblk0p1 (1)
/dev/mmcblk0p1 on /media/matoken/boot type vfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2)
$ sudo umount /dev/mmcblk0p1 (2)
- 1つ目のパーティションがマウントされたまま
- アンマウントする
カスタマイズ内容確認
書き込まれたメディアの中を見ると /boot/firstrun.sh
が作成されていました.Raspberry Pi Imagerは直接設定を書き換えるわけではなく,OSイメージを書き込んだあと子のファイルを作って,Raspberry Pi OSの初回起動時にこのscriptを実行して設定を反映していくようです.
#!/bin/bash
set +e
CURRENT_HOSTNAME=`cat /etc/hostname | tr -d " \t\n\r"`
echo raspberrypi-custom >/etc/hostname
sed -i "s/127.0.1.1.*$CURRENT_HOSTNAME/127.0.1.1\traspberrypi-custom/g" /etc/hosts
FIRSTUSER=`getent passwd 1000 | cut -d: -f1`
FIRSTUSERHOME=`getent passwd 1000 | cut -d: -f6`
install -o "$FIRSTUSER" -m 700 -d "$FIRSTUSERHOME/.ssh"
install -o "$FIRSTUSER" -m 600 <(echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPgwY9aZPxN/YoBBzd7TOcCk7EuGO0E9PuUjCHPtTuHP mk@x220") "$FIRSTUSERHOME/.ssh/authorized_keys"
echo 'PasswordAuthentication no' >>/etc/ssh/sshd_config
systemctl enable ssh
cat >/etc/wpa_supplicant/wpa_supplicant.conf <<WPAEOF
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
ap_scan=1
update_config=1
network={
ssid="matoken"
psk="○○○○○○○○○○○○"
}
WPAEOF
chmod 600 /etc/wpa_supplicant/wpa_supplicant.conf
rfkill unblock wifi
for filename in /var/lib/systemd/rfkill/*:wlan ; do
echo 0 > $filename
done
rm -f /etc/xdg/autostart/piwiz.desktop
rm -f /etc/localtime
echo "Asia/Tokyo" >/etc/timezone
dpkg-reconfigure -f noninteractive tzdata
cat >/etc/default/keyboard <<KBEOF
XKBMODEL="pc105"
XKBLAYOUT="us"
XKBVARIANT=""
XKBOPTIONS=""
KBEOF
dpkg-reconfigure -f noninteractive keyboard-configuration
rm -f /boot/firstrun.sh
sed -i 's| systemd.run.*||g' /boot/cmdline.txt
exit 0
ちょっと雑かなと感じるところもありますが便利な感じです.
( /etc/wpa_supplicant/wpa_supplicant.conf
は wpa_passphrase
コマンドを通してpskにしておきたいとか)
自分はsd card書き込み前にPCでマウントしてパッケージを最新にしたりインストールしたりといったことをしているので,sd card書き込みをしなくてもこのファイルを書き出してくれると嬉しいかなと思いました.
アンインストール
$ sudo apt purge rpi-imager
$ rm -r ~/.config/Raspberry\ Pi/Imager.conf ~/.cache/Raspberry\ Pi/Imager
パッケージを削除して,設定ファイルとキャッシュを削除しました.
環境
$ dpkg-query -W rpi-imager
rpi-imager 1.6
$ lsb_release -dr
Description: Debian GNU/Linux bullseye/sid
Release: unstable
$ uname -m
x86_64
Raspberry Pi OS armhfでWidevineDRMビデオを観られるようになったので試す
Raspberry Pi OS armhfに libwidevinecdm0
パッケージが入ったようです.Raspberry Pi 3 Model Bでも動作したのでメモしておきます.
libwidevinecdm0
パッケージはWidevineというDRM付きコンテンツを閲覧するためのパッケージです.
Widevineは結構あちこちで見かけます.siteには以下のようなサービスが載っていました.
まずWidevineに非対応な状態でNetflixのコンテンツを閲覧しようとするとこのようなエラーになります.
Note
|
Netflixの会員じゃなくても次で試せます. TV番組・ドラマを無料で視聴 | Netflix お試し無料配信 |
ここで libwidevinecdm0
パッケージを導入してChromiumを起動しなおせばOKなはずですがうまく行きません.
chrome://components/
を見ても Widevine
が出てきません.
https://bitmovin.com/demos/drm にアクセスしてみると, Detected , using No DRM
と表示されDRMが使えないようです.
Raspberry Pi 4 Model B/400以外の事例が見当たらないのでもしかして何らかの要件が足りなくてRaspberry Pi 4 より前のバージョンでは動かないのかな?とか思ったのですが,もう少し調べるとRaspberry Pi OSのChromiumには chromium
と chromium-browser
の2つのパッケージがあるようです.
$ apt show chromium
Package: chromium
Version: 88.0.4324.146-1~deb10u1
Priority: optional
Section: web
Maintainer: Debian Chromium Team <chromium@packages.debian.org>
Installed-Size: 114 MB
Provides: gnome-www-browser, www-browser
Depends: libasound2 (>= 1.0.16), libatk-bridge2.0-0 (>= 2.5.3), libatk1.0-0 (>= 2.2.0), libatomic1 (>= 4.8), libatspi2.0-0 (>= 2.9.90), libavcode
c58 (>= 7:4.0), libavformat58 (>= 7:4.1), libavutil56 (>= 7:4.0), libc6 (>= 2.28), libcairo2 (>= 1.6.0), libcups2 (>= 1.7.0), libdbus-1-3 (>= 1.9
.14), libdrm2 (>= 2.4.38), libevent-2.1-6 (>= 2.1.8-stable), libexpat1 (>= 2.0.1), libflac8 (>= 1.3.0), libfontconfig1 (>= 2.12.6), libfreetype6
(>= 2.3.9), libgbm1 (>= 17.1.0~rc2), libgcc1 (>= 1:4.0), libgdk-pixbuf2.0-0 (>= 2.22.0), libglib2.0-0 (>= 2.39.4), libgtk-3-0 (>= 3.19.12), libha
rfbuzz0b (>= 2.2.0), libicu63 (>= 63.1-1~), libjpeg62-turbo (>= 1.5.0), libjsoncpp1 (>= 1.7.4), liblcms2-2 (>= 2.2+git20110628), libminizip1 (>=
1.1), libnspr4 (>= 2:4.9-2~), libnss3 (>= 2:3.22), libopenjp2-7 (>= 2.2.0), libopus0 (>= 1.1), libpango-1.0-0 (>= 1.14.0), libpng16-16 (>= 1.6.2-
1), libpulse0 (>= 0.99.1), libre2-5 (>= 20160901), libsnappy1v5, libstdc++6 (>= 7), libvpx5 (>= 1.6.0), libwebp6 (>= 0.5.1), libwebpdemux2 (>= 0.
5.1), libwebpmux3 (>= 0.6.1-2), libx11-6 (>= 2:1.4.99.1), libxcb1 (>= 1.9.2), libxcomposite1 (>= 1:0.3-1), libxdamage1 (>= 1:1.1), libxext6, libx
fixes3, libxml2 (>= 2.7.4), libxrandr2, libxslt1.1 (>= 1.1.25), zlib1g (>= 1:1.2.2), chromium-common (= 88.0.4324.146-1~deb10u1)
Recommends: chromium-sandbox
Suggests: chromium-l10n, chromium-shell, chromium-driver
Conflicts: libgl1-mesa-swx11, libnettle4, libsecret-1-0 (<< 0.18)
Breaks: chromium-lwn4chrome (<= 1.0-2), chromium-tt-rss-notifier (<= 0.5.2-2)
Homepage: http://www.chromium.org/Home
Download-Size: 48.9 MB
APT-Sources: http://raspbian.raspberrypi.org/raspbian buster/main armhf Packages
Description: web browser
Web browser that aims to build a safer, faster, and more stable internet
browsing experience.
.
This package contains the web browser component.
$ apt show chromium-browser
Package: chromium-browser
Version: 88.0.4324.187-rpt1
Priority: optional
Section: web
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Installed-Size: 329 MB
Provides: chromium, chromium-browser-inspector, www-browser
Pre-Depends: dpkg (>= 1.15.6)
Depends: libasound2 (>= 1.0.16), libatk-bridge2.0-0 (>= 2.5.3), libatk1.0-0 (>= 2.2.0), libatspi2.0-0 (>= 2.9.90), libc6 (>= 2.18), libcairo2 (>=
1.6.0), libcups2 (>= 1.7.0), libdbus-1-3 (>= 1.9.14), libdrm2 (>= 2.4.38), libexpat1 (>= 2.0.1), libgbm1 (>= 17.1.0~rc2), libgcc1 (>= 1:4.3), li
bgdk-pixbuf2.0-0 (>= 2.22.0), libglib2.0-0 (>= 2.39.4), libgtk-3-0 (>= 3.21.5), libnspr4 (>= 2:4.9-2~), libnss3 (>= 2:3.22), libpango-1.0-0 (>= 1
.14.0), libx11-6 (>= 2:1.4.99.1), libxcb1 (>= 1.9.2), libxcomposite1 (>= 1:0.3-1), libxdamage1 (>= 1:1.1), libxext6, libxfixes3, libxkbcommon0 (>
= 0.5.0), libxrandr2, libxtst6, bash (>= 4), xdg-utils, chromium-codecs-ffmpeg-extra (= 88.0.4324.187-rpt1) | chromium-codecs-ffmpeg (= 88.0.4324
.187-rpt1), libraspberrypi0, libgl1-mesa-dri
Recommends: chromium-browser-l10n
Suggests: webaccounts-chromium-extension, unity-chromium-extension, adobe-flashplugin
Conflicts: chromium, chromium-browser-inspector
Replaces: chromium, chromium-browser-inspector
Homepage: https://chromium.googlesource.com/chromium/src/
Download-Size: 103 MB
APT-Manual-Installed: no
APT-Sources: http://archive.raspberrypi.org/debian buster/main armhf Packages
Description: Chromium web browser, open-source version of Chrome
An open-source browser project that aims to build a safer, faster, and more
stable way for all Internet users to experience the web.
そしてうまく行かなかったのは chromium
でした.
chromium-browser
を入れて(排他なので chromim
パッケージは削除される)再度試すと,chrome://components/
に Widevine
が現れて,
https://bitmovin.com/demos/drm にアクセスしてみると, Detected , using widevine
と表示されるようになりNetflixのコンテンツも閲覧できました.
Note
|
攻殻機動隊 SAC_2045 より.なんだかOPがPortal感 |
ということで,Raspberry Pi 3 Model B + Raspberry Pi OS armhf でも libwidevinecdm0
パッケージと chromium-browser
パッケージを導入することでWidevineのDRMコンテンツが観られるようになりました :)
(DRMなしで閲覧できたほうが嬉しいですが)
$ sudo apt update
$ sudo apt install chromium-browser libwidevinecdm0
$ chromium-browser &
$ dpkg-query -W chromium-browser* libwidevinecdm0
chromium-browser 88.0.4324.187-rpt1
chromium-browser-inspector
chromium-browser-l10n 88.0.4324.187-rpt1
libwidevinecdm0 4.10.1679.0-1
$ lsb_release -dr
Description: Raspbian GNU/Linux 10 (buster)
Release: 10
$ uname -m
armv7l
$ cat /proc/device-tree/model ;echo
Raspberry Pi 3 Model B Rev 1.2
Raspberry Pi の温度管理をソフトウェアで頑張る
この記事は日本Androidの会秋葉原支部ロボット部 Advent Calendar 2020 の12/07分の記事です.
内容は 日本Androidの会秋葉原支部ロボット部 第96回勉強会 で発表した内容を加筆修正したものです.
はじめに
Raspberry Pi という英国発の教育向けとして2012年に発売された安価なシングルボードコンピュータがあります.教育向けとして発売されましたが趣味にもよく使われています.OSは標準ではLinux(DebianベースのRaspberry Pi OS)が採用されています.
私はもっぱら省電力のLinuxマシンとして使うことが多いです.
トラブル
今夏空調のない部屋の自宅サーバの横でRaspberry Pi 3 model B + Raspberry Pi OS arm64(β)で計算をさせていたのですが,しばらく動かしていると固まるようになりました.
再起動すればしばらく動きますがしばらくするとやはり固まります.これをどうにか出来ないかと調べてみました.
ログの取得
まずはログを録ってみます.
* * * * * printf "`date +\%s`,`cat /sys/class/thermal/thermal_zone0/temp`,`echo "obase=2; ibase=16; \`vcgencmd get_throttled | cut -f2 -dx\`" | bc`,`vcgencmd measure_clock arm|cut -f2 -d=`\n" >> ~/.temp.log
内容はこんな感じです.(外気温度も録ればよかった)
- UNIX Time
date +%s
- SoC温度
/sys/class/thermal/thermal_zone0/temp
- スロットリング周りのフラグ
vcgencmd get_throttled
- arm周波数
vcgencmd measure_clock arm
ログがファイルに書かれる間にフリーズしてデータが失われるのを防ぐために /etc/fstab
のマウントオプションに sync
オプションも付けておきます.(再起動かremountで反映)
ログを取得している状態で負荷を掛けます.今回は /dev/urandom
をcatすることで計算させました.今回のRaspberry Pi 3 model Bは4coreあるので4つ動かしています.
$ cat /dev/urandom > /dev/null & $ cat /dev/urandom > /dev/null & $ cat /dev/urandom > /dev/null & $ cat /dev/urandom > /dev/null &
熱が原因?
しばらく動かしてRaspberry Piが固まった後にログを確認してみます.
SoCの温度が85度を何度か記録した後に固まっているようです.
85度というのはRaspberry Pi OSでの標準のSoC制限温度のようです.この温度の5度前(標準では80度)からサーマルスロットリングが始まるようです.
サーマルスロットリングでクロックが下がって温度が下がれば問題無さそうだけど80度からクロックが下がっても85度を超えて固まってしまっているようです.
ベータ版のRaspberry Pi OS amd64を使っているせいかもしれないと思い,標準のRaspberry Pi OS armhf(32bit)版に変更して同様に試してみましたが同様の動きのようです.
正攻法としてはヒートシンク,ファンの増設や空調を入れるとよさそうですが,金欠なのでとりあえずソフトだけでどうにか出来ないかと試しました.
SoC制限温度を下げる
まずSoCの制限温度ですが,公式フォーラムで70度以下にしたほうがいいという書き込みを見かけました.逆に100度でも大丈夫という人も居るのですが安全側の70度にしてみます.
この設定は /boot/config.txt
でパラメータを設定できます.以下は70度に設定たときの例です.この状態で再起動すると反映されます.
temp_limit=70
再起動後以下のコマンドで設定が反映されているか確認が出来ます.
$ vcgencmd get_config int | grep ^temp_limit= temp_limit=70
この状態で負荷を掛けると70度を越えるくらいで固まりました.やはり制限温度を越えると固まってい舞うようです.
SoCの最大周波数を下げてみる
Raspberry Pi 3 model B のSoCは最大周波数1.2GHzです.これを下げてみます.
/boot/config.txt
の arm_freq=
で設定できます.以下は800MHzに設定したときの例です.再起動で反映されます.
arm_freq=800
再起動後に設定が反映されているか確認します.
$ vcgencmd get_config int | grep ^arm_freq= arm_freq=800
この状態で負荷を掛けるとやはり固まります.まあサーマルスロットリングが効いても固まるので仕方がない感じです.
SoCの最小周波数を下げてみる(これが効くのでは?)
次にSoC最小周波数を下げてみます.既定値は600MHzで,サーマルスロットリングでもここまで下がっているのでこれを更に下げると温度が下がりそうな気がします.
/boot/config.txt
の arm_freq_min=
で設定できます.以下は400MHzに設定したときの例です.再起動で反映されます.
arm_freq_min=400
しかし再起動後に確認してみると600MHzより下には設定できないみたいで600MHzになってしまいます.
$ vcgencmd get_config int | grep ^arm_freq_min= arm_freq_min=600
この状態で負荷を掛けるとやはり600Mhzまでしか下がらず固まります.
残念ながらRaspberry Pi のスロットリングでは無理そうです.
maxcpusでコアを制限してみる
Linuxのブートパラメータで maxcpus
を指定することでコアを制限できます.Raspberry Pi の場合は /boot/cmdline.txt
で設定できます.
設定後以下のコマンドで確認できます.
$ grep -o -E 'maxcpus=.{0,9} ' /proc/cmdline maxcpus=1 $ grep ^processor /proc/cpuinfo | wc -l 1
これでCPU core1津で動作しています.しかし最大周波数を600MHzかつ1coreでも同様にフリーズしてしまいました.
cpufreqでクロック制御
IntelCPUのNotePCなどではcoufreqを使ってこのあたりの制御をするのですが,これでも600mHzより下には下げられないようで駄目でした.
LimitCPUで指定プロセスの制限を行う
LimitCPUは指定プロセスを監視し,CPU利用率や%で制限するプログラムです.Linux, MacOS, *BSDなどのUNIX-Likesystemで利用できます.
Raspberry Pi OSではcpulimitパッケージとしてパッケージングされており,コマンドもcoulimitです.
$ sudo apt install cpulimit
cpulimitコマンドに制限したいプロセスIDやプロセス名と制限を指定することで動作します.
cat
からはじまるプロセスを50%に制限$ pgrep ^cat | xargs -n1 -I{} sh -c "cpulimit -p {} -l 50 -v &"
cpulimitで50%に制限してみたt頃温度が下がるのを確認できました.数日動かしても固まらなくなったようです.
定期的にSoCの温度を確認して制限を変更していくと良さそうでうs.
LimitCPUはCPUlimitの開発が止まった後のフォークですが,その後CPUlimitが新しく開発が始まっているようです.詳細は以下のページを参照してください.
cgroupでCPUリソース制限(未確認)
LimitCPUが効いたので恐らくcgroupでのCPUリソース制限でも大丈夫そうです.(未確認)
おわりに
現在は気温も下がり制限などしなくても問題ありません.でもきっと来夏にまた起こると思うのでそこでまた確認するつもりです.
しかし,今回の解決方法はCPUのリソースを制限して温度を下げて居るので計算量は減っています.空調を入れたりCPUファンを導入するのが正攻法になるのかなと思います.
CPUファンはサードパーティーから各種発売されているのでそれらを使うかDIYする感じになると思います.
そういえば最近Raspberry Pi OSの設定コマンドの raspi-config
の中に Set behaviour of GPIO fan
というメニューが出来たり,Raspberry Pi 4には公式のCPUファンが発売されているのでこれらを使うのが良さそうです.
Raspberry Pi公式のOS書き込みソフトウェアの Raspberry Pi Imager を少し試す
Instagram の動画がわかりやすいですね.
Raspberry Pi公式のOSイメージ書き込みソフトウェアです.少し試してみました.
導入
ダウンロードページにはWindows/macOSの他 Ubuntu amd64
向けの.debへのリンクしか無いのですが, https://downloads.raspberrypi.org/imager/
にアクセスすると AppImage と .sig がありました.
どちらも amd64 なので他のArchtectureじゃ使えないようです.Raspbianのarmhf版くらいは欲しいですね.
とりあえず Ubuntu 20.04 amd64 では .deb を,Debian sid amd64 では AppImage を試してみました.
ダウンロードして署名検証して dpkg -i
で導入したのですがpkgが足りなくてエラーが出力されました.足りないパッケージは apt install -f
で導入しました.足りなかったパッケージは qml-module-qt-labs-settings
と libdleyna-core-1.0-5
でした.(環境により変わるはず)
$ wget https://downloads.raspberrypi.org/imager/imager_amd64.deb https://downloads.raspberrypi.org/imager/imager_amd64.deb.sig
$ gpg --verify ./imager_amd64.deb.sig
gpg: assuming signed data in './imager_amd64.deb'
gpg: Signature made Fri Mar 6 20:49:08 2020 JST
gpg: using RSA key 54C3DD610D9D1B4AF82A37758738CD6B956F460C
gpg: Good signature from "Raspberry Pi Downloads Signing Key" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 54C3 DD61 0D9D 1B4A F82A 3775 8738 CD6B 956F 460C
$ sudo dpkg -i ./imager_amd64.deb
$ sudo apt install -f
$ sudo rpi-imager
ダウンロードして署名検証して実行権を付けるだけです.
$ wget https://downloads.raspberrypi.org/imager/imager_amd64.AppImage https://downloads.raspberrypi.org/imager/imager_amd64.AppImage.sig
$ gpg --verify ./imager_amd64.AppImage.sig
gpg: assuming signed data in './imager_amd64.AppImage'
gpg: Signature made Fri 06 Mar 2020 10:34:08 PM JST
gpg: using RSA key 54C3DD610D9D1B4AF82A37758738CD6B956F460C
gpg: Good signature from "Raspberry Pi Downloads Signing Key" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 54C3 DD61 0D9D 1B4A F82A 3775 8738 CD6B 956F 460C
$ chmod +x ./imager_amd64.AppImage
$ sudo ./imager_amd64.AppImage
$ ar x ./imager_amd64.deb
$ tar xf data.tar.xz
$ sudo ./usr/bin/rpi-imager
起動
root権が必要です.一般ユーザでも起動できるのですが,書き込み時にSD cardにアクセスできないエラーが出てしまいます.
OS list 取得エラー(一時的なサーバ側の問題)
現在サーバ側でSSLの問題があり大抵以下のようなエラーになります.9回に1回の割合で成功するらしいですが,私は30回ほど試してやっとうまく行きました.数日待てば治るそうなのでしばらく待ってから試す方がいいかもしれません.
Caleb says:5th Mar 2020 at 3:32 pm
Currently giving me a “Error downloading OS list from Internet” when running it on a raspberry pi 4bAvatar Gordon Hollingworth says:5th Mar 2020 at 5:05 pm
Yes, that’s because downloads.raspberrypi.org needs its SSL stuff updated. It should happen in the next few days!Otherwise keep loading it, there’s a 1 in 9 chance you’ll get through to the server that does work!
Gordon
ちなみにOS listが取得できなくても自分でダウンロードしたイメージの書き込みやSD cardの消去は出来ます.
Imagerの起動
起動するとこんな画面です.「CHOOSE OS」でOSイメージの選択(Raspbian各種とLibreELEC),ユーティリティ,消去,カスタムが選択できます.
「CHOOSE SD CARD」でSD cardやUSBメモリなどが選択できます.
OSイメージの選択
SD card等の選択「CHOOSE SD CARD」
この画面を表示してからSD cardやUSBメモリ等を挿入するとリアルタイムに表示さるのでわかりやすいです.内蔵diskは出てきませんが,マウント中のHDDなどは出てくるので間違えないように注意しましょう.
選択できるストレージは1度に1つだけのようです.複数のメディアに書き込む場合は複数回の実行が必要です.
OSイメージ書き込み
「WRITE」ボタンを押すことで書き込みが開始されます.SecureEraseを試みてイメージ書き込み,ベリファイを行います.終わるまでしばらく待ちましょう.
自動ダウンロードしたイメージ
deb版の方は ~root/.cache/Raspberry Pi/Imager/lastdownload.cache
として 最後に利用したものだけ が残るようです.なので同じイメージであれば2回目はダウンロードせずに済みます.
別のイメージを利用すると上書きされてそのイメージになります.
AppImage は /tmp/runtime-root
以下のようなので再起動したら消えてしまいますね.
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to ‘/tmp/runtime-root’
# sha256sum ./lastdownload.cache
80cd38e0a576f75caaecf511970ae563c5b605896074809643aecfdc91344bcf ./lastdownload.cache
# wget http://releases.libreelec.tv/LibreELEC-RPi.arm-9.2.0.img.gz
# sha256sum LibreELEC-RPi.arm-9.2.0.img.gz
80cd38e0a576f75caaecf511970ae563c5b605896074809643aecfdc91344bcf LibreELEC-RPi.arm-9.2.0.img.gz
# diff -as lastdownload.cache LibreELEC-RPi.arm-9.2.0.img.gz
Files lastdownload.cache and LibreELEC-RPi.arm-9.2.0.img.gz are identical
おわりに
てことで応用が聞かない感じなのでRaspberry Piを初めて使う人向けかなーと感じました.LibreELECなんかも同じようなツールを用意しているしOSイメージ書き込みで躓く人が多いのでツールが用意されているのかもしれないですね.
更に面倒だという人はOSイメージ入りのストレージを購入すると良さそうです.
個人的なおすすめは現在だとダウンロードは手動で書き込みには balenaEtcher
がいいかなと思います.これもマルチプラットホーム対応で更に同時に複数のストレージに書き込みも可能です.
試した環境
$ dpkg-query -W rpi-imager qml-module-qt-labs-settings libdleyna-core-1.0-5
libdleyna-core-1.0-5:amd64
qml-module-qt-labs-settings:amd64 5.12.5-5
rpi-imager 1.0
$ lsb_release -dr
Description: Ubuntu Focal Fossa (development branch)
Release: 20.04
$ uname -m
x86_64
$ lsb_release -dr Description: Debian GNU/Linux bullseye/sid Release: unstable $ uname -m x86_64
Megatoolsを新規アカウントで利用しようとするとエラーとなる( ERROR: Can’t login to mega.nz: API call ‘us’ failed: Server returned error ENOENT )
Mega.nz のサービスをコマンドラインで行うためのツール群の Megatools というものがあります.
これを新規アカウントで利用しようとするとこのようなエラーになります.
$ megadf ERROR: Can't login to mega.nz: API call 'us' failed: Server returned error ENOENT
これは Mega.nz のユーザ登録の仕様が変わったせいなようで新規に Mega.nz のウェブから登録したアカウントで起こるらしいです.
仕様変更前に登録したアカウントや,現在でも Megatools の megareg
コマンドで登録したアカウントならMegatools が利用できるようです.
ということで megareg
コマンドでアカントを登録し直して試してみました.
megareg
コマンドにユーザー名、メールアドレス、パスワードを指定する
$ megareg --register -n 'REALNAME' -e 'EMAIL' -p 'PASSWORD' Registration email was sent to EMAIL. To complete registration, you must run: megareg --verify 7e2c96BDD0DFnrlfo2hXmg==:/Lw2hwBBBBBBBBBBF2Lk1B==:5ceaxAEvkXQ @LINK@ (Where @LINK@ is registration link from the 'MEGA Signup' email)
登録確認メールが届くので、上の例の @LINK@
部分をそのメールに書かれているURLに書き換えて megareg --verify
を実行する
$ megareg --verify 7e2c96BDD0DFnrlfo2hXmg==:/Lw2hwBBBBBBBBBBF2Lk1B==:5ceaxAEvkXQ 'https://mega.nz/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' Account registered successfully!
利用できるか試してみる
$ megadf -u 'EMAIL' -p 'PASSWORD' Total: 53687091200 Used: 0 Free: 53687091200
うまく行きました.
毎回コマンドの引数にアカウント情報は書きたくないので設定ファイルを用意して使います.
設定ファイルは, ~/.megarc
, ./.megarc
若しくは --config $CONFIGFILE
で指定します.設定ファイルの内容は最低限以下のような感じで詳細は man megarc
を参照.
[Login] Username = your@email Password = yourpassword
$ dpkg-query -W megatools megatools 1.10.2-1 $ lsb_release -dr Description: Raspbian GNU/Linux 10 (buster) Release: 10 $ uname -m armv7l
$ dpkg-query -W megatools megatools 1.10.2-1 $ lsb_release -dr Description: Debian GNU/Linux bullseye/sid Release: unstable $ uname -m x86_64