「Raspberry Pi」カテゴリーアーカイブ

Raspberry Pi の ntp 設定を変更する

小ネタです。調べ物をしてたら、 Raspberry Pi OS には標準で NTP サーバーの機能が埋め込まれており、 Debian の NTP サーバーにアクセスしているということでした。必ずしも変更する必要もないかもしれませんが、気になったので日本のサーバーに変更しました。

状態確認

● systemd-timesyncd.service - Network Time Synchronization
   Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
  Drop-In: /usr/lib/systemd/system/systemd-timesyncd.service.d
           └─disable-with-time-daemon.conf
   Active: active (running) since Sun 2021-01-10 15:17:18 JST; 1 weeks 2 days ago
     Docs: man:systemd-timesyncd.service(8)
 Main PID: 309 (systemd-timesyn)
   Status: "Synchronized to time server for the first time [2001:19f0:200:144b::2000]:123 (2.debian.pool.ntp.org)."
    Tasks: 2 (limit: 4915)
   CGroup: /system.slice/systemd-timesyncd.service
           └─309 /lib/systemd/systemd-timesyncd

 1月 10 15:17:17 raspberrypi systemd[1]: Starting Network Time Synchronization...
 1月 10 15:17:18 raspberrypi systemd[1]: Started Network Time Synchronization.
 1月 10 15:18:07 raspberrypi systemd-timesyncd[309]: Synchronized to time server for the first time [2600:3c04::f03c:92ff:fe41:5a9c]:123 (2.deb
 1月 16 11:18:17 raspberrypi systemd-timesyncd[309]: Timed out waiting for reply from [2001:1620:2777:b::128]:123 (2.debian.pool.ntp.org).
 1月 16 11:18:18 raspberrypi systemd-timesyncd[309]: Synchronized to time server for the first time [2001:19f0:200:144b::2000]:123 (2.debian.po

これが、設定前の Network Time Synchronization System の設定です。 debian.pool.ntp.org に読みに行ってます。これを ntp.nict.jp に変えます。

設定変更

設定ファイルは /etc/systemd/timesyncd.conf です。任意のエディタで編集します。

#NTP=
 ↓
NTP=ntp.nict.jp

これで OK なんですが、これまで標準だった debian サーバーの設定が残ったままで、 nict.jp にアクセスするか不明なので、 Debian サーバーにアクセスしないようにします。といっても、コメントアウトされた 1 文から#を取り去るだけです。

#FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org
 ↓
FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org

これで設定はおしまいです。簡単ですなぁ。

再起動と確認

では、設定ファイルをセーブして、 Network Time Synchronization System を再起動します。そして、設定を確認します。

$ sudo systemctl restart systemd-timesyncd.service
$ sudo systemctl status systemd-timesyncd.service

2行目の status コマンドで、設定が上手くいっているか確認します。エラーが出ていなければ次のようなステータスが表示されると思います。

● systemd-timesyncd.service - Network Time Synchronization
   Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
  Drop-In: /usr/lib/systemd/system/systemd-timesyncd.service.d
           └─disable-with-time-daemon.conf
   Active: active (running) since Tue 2021-01-19 20:42:16 JST; 18s ago
     Docs: man:systemd-timesyncd.service(8)
 Main PID: 30168 (systemd-timesyn)
   Status: "Synchronized to time server for the first time [2001:ce8:78::2]:123 (ntp.nict.jp)."
    Tasks: 2 (limit: 4915)
   CGroup: /system.slice/systemd-timesyncd.service
           └─30168 /lib/systemd/systemd-timesyncd

 1月 19 20:42:16 raspberrypi systemd[1]: Starting Network Time Synchronization...
 1月 19 20:42:16 raspberrypi systemd[1]: Started Network Time Synchronization.
 1月 19 20:42:16 raspberrypi systemd-timesyncd[30168]: Synchronized to time server for the first time [2001:ce8:78::2]:123 (ntp.nict.jp).

ちゃんと ntp.nict.jp から時間を読んでます。完成ですね。

まとめ

簡単な変更ですし、順番にやれば問題なるところはないはずです。 ntp サーバーの詳しいシステムに関してはよく分かってないのですが、遅延がなければより正しい時間を表示されるはずですよね。 Debian のサーバーがどこにあるのかわかりませんが、日本国内ではないと思います。多少の遅延が生じているのかもしれませんね。

絶対に直さなければならないと言うわけではありませんが、気になったので直してみました。

Wacthdog の設定

Raspberry Pi zero がハングアップしていました。何が原因かはっきりしませんが、ハングアップは困るので、対策をとってみます。

Raspberry Pi OS には、 Wacthdog Timer というのがあらかじめ仕込んであるそうです。ただ、通常はこの機能が OFF になっています。 Wacthdog というのは、システムが一定間隔で生存確認を行い、生存確認が取れなかった場合にリスタートしてくれるというものです。 Wacthdog のシステム自体がダウンしてしまったら、当然リスタートもされないと思うのですが、システムのコア部分に組み込まれているので、よほどのことがない限り大丈夫でしょう。では設定していきます。

ブート・コンフィグに追記

$ sudo nano /boot/config.txt

ブート・パーティションにあるということからもわかる通り、システムのコア部分で起動するものですね。慎重に作業しましょう。次の1文を追記します

dtparam=watchdog=on

蛇足ながら、 ON を OFF にすることで Wacthdog 機能が OFF になります。もちろん、最初にこの1文は入っていませんでしたから、 Wacthdog は OFF ですね。

初期設定する

カーネルモジュールの初期設定を行います。これもテキストの修正だけです。作業そのものは簡単ですが、スペルミスは Wacthdog の動作に影響しますので、慎重に行いましょう。

$ sudo nano /etc/modprobe.d/bcm2835-wdt.conf

このファイルは最初、存在していませんでした。新規作成ですね。もしあったら以前に Wacthdog を設定しているかもしれませんね。

options bcm2835_wdt heartbeat=14 nowayout=0

heartbeat=14 が設定時間になります。14秒ですね。ここは自分の設定時間でいいと思います。次の nowatout=0 は、 heartbeat (心拍)が止まったのを感知してからリスタートするまでの時間ですが、特別な理由がない限り0で良いですね。

Systemd の設定

次に、 systemd の設定です。これで最後になります。

$ sudo nano /etc/systemd/system.conf

この中にはすでに設定部分がコメントアウトされた形で書き込まれていますので、検索して見つけましょう。おそらく先頭に # が入った形でコメントアウトされていると思うので、 # を削除した上で上で設定した heartbeat (心拍)時間と一致させます。

#RuntimeWatchdogSec=0
            ↓
RuntimeWatchdogSec=14

動作確認

以上の設定が終わったら、 Raspberry Pi をリスタートさせます。再起動したら、次の1文を打ち込みます。

$ dmesg | grep bcm2835-wdt

私のシステムでは、

[    2.816764] bcm2835-wdt bcm2835-wdt: Broadcom BCM2835 watchdog timer

という応答が帰ってきました。先頭部分の数字は変わります。何も応答が帰ってこない場合は、 Wacthdog が起動していないことが考えられます。スペルミスなどがないか、チェックしてください。実際にシステムをハングさせて見れば確実ですが、私怖くて出来ませんでした。 Wacthdog を信じることにします。

まとめ

私は、再起動が完了したらメールを飛ばすように設定しました。常にメールをチェックできるわけではないのですが、メールが来た時間から逆算してシステムがどうしてハングアップしてしまったのか推測できますね。

あえてここには書きませんが、システムをハングさせる方法はいくつかありますので、検索してください。 Raspberry Pi は現在、5台稼働していますので、それぞれに同様の設定をします。想定外のシステムストップがなくなると良いなぁ。

unattended-upgrades を動かす

表題の通りなんですが、私インストールすれば動くのかと思っていました。大きな間違いでしたね。道理で Update されてないわけだ。

内容に関しては、以下のブログを参照してください。何て不親切な私。

  1. 寝ている間に Raspberry Pi を全自動アップデート!~ unattended-upgrades を使おう - みかんのゆるふわ技術ブログ
  2. はなぴょんブログ [Ubuntu]メールサーバ構築 (Postfix)
  3. Raspberry Pi に Postfix を入れてコマンドラインから Gmail 経由でメールを送ろう - みかんのゆるふわ技術ブログ

メール送信まで出来ます。上記は Raspberry Pi で動かすための記事です。下2つはメール送信を行う時に参照しました。2だけで設定するとエラーが出てしまうので(もしかしたら私の環境だけかも)、3を参照しました。

さて、これを Raspberry Pi 5台+ FerenOS 1台に設定しました。設定ファイルは NAS に置いておいて参照するようにしたので、最初にやったヤツほど他のヤツには時間かかりませんでしたが、エラーが出る。 SYSLOG を見る。スペルミスや、設定のミスを見つけてやり直す。繰り返しましたね。 Linux のことを知るには良い素材でした。

最初に書くべきでしたが、 unattended-upgrades ってのは、 Linux の Update を自動で検知して、実行する。というプログラムです。 Update が終わるとメールを送ってくれます。便利ですね。 cron でも出来るんですが、メールを送るとなるとちょっと大変ですし、スマートじゃありません。設定さえ間違えなければ、簡単に目的が達成できますね。

この例では、 gmail を経由させてメールを送ります。メールの文面はカスタマイズできそうもないので、合計6台に同じメールをセットしてあってちょっと不便です。文面をカスタマイズ出来ないなら、メールアドレスの方を細工しようと思っています。 gmail はご存じの方も多いと思いますが、アドレス中にピリオドを入れてメールアドレスを分けたり、プラス記号を入れて違うアドレスのようにしたり出来ます。これを使って、どこから来たメールなのかを判断しようと言うことですね。

今日は、設定しただけでおしまいで、メール・エイリアスを使った処理は明日にしようと思ってます。うまくいくかな。

SDカードを“割った”

こういう間抜けなことをするのは、私だけでしょうか。多分私ぐらいでしょうね。

先ほど説明した、LCDケースにSDカードを入れたままケースを外したり、閉じようとしたりして力をかけました。どうなったかというと、アイキャッチ画像にもあるように、真っ二つになりました。ケースはSDカードを抜いて外したり閉じたりするように出来ています。SDカードを入れたままでは無理な力がかかるんですね。

内部で断線していたんだと思いますが、何度電源をON / OFFしても Raspberry Pi OS が立ち上がらないんですね。どうもおかしいと思いまして、SDカードを抜いたら、真っ二つです。

このカード、16GBなんですね。基本的なデーターのやりとりはNASを経由するので本体の容量は16GB程度で十分なんです。でも、ストックなくなりました。仕方ないので、32GBのSDカードを使います。

いやぁ、割れるとは思ってなかった。

LCDケースの覚え書き

今年の念頭に購入していたLCD付きの Raspberry Pi 用ケースについてすっかり忘れていたのと、ここ数日の Raspberry Pi セットアップシリーズに乗っかって、このLCDケースについても書いてみます。

Amazon | STARTO 3.5 インチ Raspberry Pi 用ディスプレイ 保護ケース付属 タッチパネル 320*480 解像度 デュアルディスプレイ同時表示 ゲームとビデオ可能 Raspberry Pi ZeroW A A+ B B+ 2B 3B 3B+ に対応 ラズベリーパイ 3 TS11 | STARTO | ベアボーン PC 通販

購入したのは Amazon 。正常に起動できるようになるまでのプロセスは前のエントリーと一緒です。正常に起動できるようになってから、 ssh で操作します。

$ sudo apt install git
$ git clone https://github.com/waveshare/LCD-show.git
$ cd LCD-show/
$ sudo ./LCD35-show

これで基本的なドライバーはインストール完了。自動的にリスタートします。

次にヘッドレス環境の場合、表示されることは表示されるのですが、エラーが出ます。これを回避します。

$ sudo nano /etc/rc.local
---------
# fbcp &

編集するのは /boot/rc.local というファイル。これの終わり頃にある fbcp & という行をコメントアウトします。これでエラーが出なくなります。当然、リスタートは必要ですね。

更に、これだけだと解像度が高すぎても字が細かく見ていられないので、解像度を下げます。コマンドは sudo raspi-config 。

これで解像度が低くなってログも見やすくなります。

基本的にヘッドレス運用しますので、こういうのはありがたいですね。これで2台「とりあえず」動くようにしました。あとは、 Raspberry Pi 4+ と Raspberry Pi zero W 。それぞれほったらかしになっているので、用途を見つけなきゃ。いじっていると楽しくなります。

Raspberry Pi セットアップ (2)

昨日は Raspberry Pi が立ち上がるところまでしました。最低限の設定ですね。ここからはお好みの世界です。昨日までは HDD をつなぐことを考えていましたが、どうせならつないだ HDD から立ち上げてみようと言うことに方向転換しました。今までの作業は無駄になりません。ちなみに接続したのは古い320 GB のハードディスク。実はここからSDカードなしで立ち上げる方法もやってみたのですが、うまくいきませんでした。なので、ブートローダーとしてSDカードも使います。

7.接続HDDのフォーマットなど

Linux では ext4 が標準です。無理矢理他のフォーマットにしても意味がないので、 HDD をつないで ext4 にフォーマットします。

$ sudo parted /dev/sda # /dev/sdaは変わる可能性あり
GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt                                                      
Warning: The existing disk label on /dev/sda will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? y                                                                 
(parted) mkpart primary ext4 0% 100%                                      
(parted) p                                                                
Model: I-O DATA HDPC-U (scsi)
Disk /dev/sda: 320GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End    Size   File system  Name     Flags
 1      1049kB  320GB  320GB  ext4         primary

(parted) q                                                                
Information: You may need to update /etc/fstab.

パーティション作成ツールの応答も含めてコピペしました。 (parted) というのがプロンプトになります。この例では、 ext4 で全ての領域をフォーマットしました。「分割したい」という方、ググってください。

8.システムのコピー

前日作った環境をそっくり HDD にコピーします。ここでミスるとやり直しになります。慎重にいきましょう。まずは現在の状況を確認します。

$ sudo fdisk -l
(省略)
Disk /dev/mmcblk0: 14.9 GiB, 15931539456 bytes, 31116288 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x352a458b

Device         Boot  Start      End  Sectors  Size Id Type
/dev/mmcblk0p1        8192   532479   524288  256M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      532480 31116287 30583808 14.6G 83 Linux


Disk /dev/sda: 298.1 GiB, 320072933376 bytes, 625142448 sectors
Disk model: HDPC-U          
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 14D08399-DC65-4293-9CCD-08C23DAFD12A

Device     Start       End   Sectors   Size Type
/dev/sda1   2048 625141759 625139712 298.1G Linux filesystem

fdisk というコマンドで現在の状況をダンプします。ここで、 /dev/sda が HDD 。 /dev/mmcblk0 がSDカードになります。その他にもいっぱいダンプされますが、省略。HDDを2台つなげたりしているマニアの方は、変わってきますのでよく確認してください。

いよいよコピーです。

$ sudo dd if=/dev/mmcblk0p2 of=/dev/sda1 bs=32M conv=noerror,sync status=progress

if インプットの i です。 of アウトプットの o です。これひっくり返したりすると大変なことになります ( 多分クラッシュする ) 。慎重に。SDカードからHDDへのコピーですね。最後の status=progress はなくてもいいと思いますが、進捗状況がわからないと不安になるのでつけます。時間がかかるので、コーヒーでもどうぞ。

続いて、ディスクのチェックとHDDの領域解放を行います。領域解放って適切な言葉が見つからないので勝手に作りましたが、SDカードからコピーしただけだと、残りの領域を使えないことになるんだそうで、それをHDD本来の容量まで使えるようにする。ということですね。

$ sudo e2fsck -f /dev/sda1
(略)
$ sudo resize2fs /dev/sda1

最初の e2fsck では、フリーブロックのカウントがおかしいよ。というメッセージが出る場合があります。私がやった場合は2回出ました。それぞれ「 y 」で進めてOKです。

9.ブートシステムを調整する

今までは準備。ここからが本番です。といっても操作は比較的簡単なんですが、間違えてしまうと後戻りできません。まずは、HDDの固有番号というか partuuid というのを調べます。

$ ls -l /dev/disk/by-partuuid/
lrwxrwxrwx 1 root root 15 12月 31 11:11 352a458b-01 -> ../../mmcblk0p1
lrwxrwxrwx 1 root root 15 12月 31 11:11 352a458b-02 -> ../../mmcblk0p2
lrwxrwxrwx 1 root root 10 12月 31 12:04 5bf1e314-89aa-40ec-944e-12b488a25d99 -> ../../sda1

私の結果をそのまんまコピったけど、並んでいる記号のような部分は違うので、自分の環境に応じて置き換えてくださいね。このままコピーしても UUID が違うので、間違いなく起動しません。

上の例でいくと「 5bf1e…. 」の部分が partuuid です。この部分メモしておきましょう。

次にHDDの中のファイルを読み書きするんですが、まだマウントされていないので、マウントします。 /mnt/ フォルダにマウントしますね。別にここじゃなければダメって訳ではありませんが、後々面倒なので、 /mnt/ フォルダでいきます。

$ sudo mount -t ext4 -o defaults /dev/sda1 /mnt

HDDの内容が、 /mnt/ 以下にマウントされます。で、先ほどSDカードからコピーしたファイルの中で、 /etc/fstab というファイルを編集したいんですが、HDDは /mnt/ にマウントされていますから fstab の場所は、 /mnt/etc/fstab になります。これを編集します。

$ sudo nano /mnt/etc/fstab
------
PARTUUID=352a458b-01  /boot           vfat    defaults          0       2
PARTUUID=5bf1e314-89aa-40ec-944e-12b488a25d99  /   ext4    defaults,noatime  0       1

上記は編集後です。ルート (/) がマウントする場所をSDカードからHDDに変更します。最初先ほどダンプした partuuid のリストで mmcblk0p2 がマウントされていたのが、ルート (/) になっているはずです。それを先ほどメモしたHDDの uuid に書き換えます。私何度もこの fstab ファイルを編集していますが、間違えると間違いなく塡まります。起動しなくなって泣きを見ることも多々ありました。特に今回はヘッドレスでやってますので、お手上げになりますね。

書き換えたらセーブします。くれぐれも間違いのないように。

 $ sudo nano /boot/cmdline.txt
------
console=serial0,115200 console=tty1 root=PARTUUID=5bf1e314-89aa-40ec-944e-12b488a25d99 rootfstype=ext4 elevator=deadline fsck.repair=yes rootw

最終段階です。今度はブートシステムのSDカード上のファイルを編集します。上記例の一番上。 cmdline.txt を編集します。ここの root= のところを書き換えます。例によって先ほどメモした uuid に書き換えます。これも間違えてしまうと起動しなくなりますので、慎重に。

ここまで出来たらOKです。再起動しましょう。うまくHDDから立ち上がれば万々歳ですね。ダメだったら … また1からやり直しましょう。上手くいったら下記のコマンドで確認します。

$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
/dev/root        294G  1.6G  280G    1% /
devtmpfs         430M     0  430M    0% /dev
tmpfs            463M     0  463M    0% /dev/shm
tmpfs            463M   12M  451M    3% /run
tmpfs            5.0M  4.0K  5.0M    1% /run/lock
tmpfs            463M     0  463M    0% /sys/fs/cgroup
/dev/mmcblk0p1   253M   48M  205M   19% /boot
tmpfs             93M     0   93M    0% /run/user/1000

一番上、 /dev/root サイズが 294 GBですね。成功です。320 GB のハードディスクを使ってますが、色々使って294 GB になってます。問題ありません。

10. NAS のマウント

セットアップの最後に NAS をマウントします。私はファイルのやりとりに NAS を使うことが多いです。そこで、自動的に NAS をマウントして使えるようにしたいのでですね。早速、手順を説明しますが、手順は2つ。まずマウントする場所を作ってやります。さっき、一時的に /mnt/ フォルダにマウントしましたが、今度は /mnt/ フォルダ以下にフォルダを作ってそこにマウントさせます。

$ sudo mkdir /mnt/nas
$ sudo chmod 777 /mnt/nas

次に、先ほども出てきた fstab を編集します。ただし、今度はすでにルート (/) にマウントされた状態ですので、アドレスは /etc/fstab になります。さっきとは違いますので、注意してください。

$ sudo nano /etc/fstab
------
//192.168.●.●/freenas/home /mnt/nas cifs username=●●,password=●●,iocharset=utf8,defaults 0 0

fstab に今度は「追記」します。最終行に上記例のコードを書き加えます。途中で改行を入れないで1行にして入力します。 /freenas/home というのは、私の環境に設置した NAS のフォルダなので、自分の環境に合わせてください。自宅だとパスワードなしで運用している人もいるかもしれませんね。その場合は password=, で OK です。さっきも書きましたが、 fstab の記述が間違っていると、起動時にエマージェンシーモードに入ってしまいます。これはヘッドレス環境では操作できないので、慎重に。

セーブしたら確認しましょう。

$ sudo mount -a

これでエラーが出なければよし。エラーが出てしまうようだと何かが間違っていますので、再度見直してください。

$ df -h
ファイルシス                サイズ  使用  残り 使用% マウント位置
/dev/root                     294G  1.6G  280G    1% /
devtmpfs                      430M     0  430M    0% /dev
tmpfs                         463M     0  463M    0% /dev/shm
tmpfs                         463M   12M  451M    3% /run
tmpfs                         5.0M  4.0K  5.0M    1% /run/lock
tmpfs                         463M     0  463M    0% /sys/fs/cgroup
/dev/mmcblk0p1                253M   48M  205M   19% /boot
//192.168.●.●/freenas/home   5.2T  2.2T  3.0T   43% /mnt/nas
tmpfs                          93M     0   93M    0% /run/user/1000

下から2行目に NAS がマウントされています。 OK ですね。

まとめにかえて

長々と書いてきました。ほとんどが、ネット上の受け売りです。自分の環境に合わせるために試行錯誤したところはあります。しかし、先人達には感謝しかありません。ハードディスクから起動できるようになりましたので、SDカードの寿命を気にすることはほぼなくなりました。HDDがクラッシュしたら泣きますけど。

ここまでで、本当の基本設定が終わりました。次は … なんに使おうかまだ決まってません。先のエントリーでも言っていましたが、分散処理システムには興味あります。情報があまりないので手詰まりなんですけどね。さて、もう一台もセットアップしようかな。

Raspberry Pi セットアップ (1)

昨日、 Raspberry Pi のことを書きました。せっかくなので、使ってなかったヤツをアップデートしようと思ったら、SDカードがいかれていました。しょうがないので、1からセットアップしようとしました。「しました」? ええ、しました。なんと途中で大きなミスをしてアクセスできなくなりました。もうね、もう一回やります。このブログでメモ取りながらやりますとも。

1.ダウンロード&SDカードへ書込み

ダウンロード先ちょっと見ないうちに変わりましたね。4B+用にいろんなディストロビューションが用意されています。

Operating system images – Raspberry Pi

Raspberry Pi OS というのを選択しますが、3種類ありますね。この中の Lite を選択しました。

SDカードへの書込みには balenaEtcher – Flash OS images to SD cards & USB drives を選びました。以前に比べて、エラーチェックを厳格にしているみたいで、一つ一つの動作が緩慢になりましたね。OSとの関係もあるのかもしれませんね。操作法に関しては省略。ググると出てきます。

2.ヘッドレスで操作するための一手間

今回、 Raspberry Pi をヘッドレスで設定しようとしています。ヘッドレスってのは、モニターをつながず他の PC から ssh で接続することを言いますが、標準では ssh が通りません。そこで一手間かけます。

先ほど書き込んだSDカードを再度マウントさせます。 boot というのがマウントされると思うので、内容のない「 ssh 」という名前のファイルを置きます。 macOS だと

$ touch /Volumes/boot/ssh

で OK ですね。最初の起動でこのファイルが読み込まれ、標準的な ssh が通るようになります。ここで出来たSDカードを Raspberry Pi にセットして電源を接続。起動するまで待ちましょう。以後は別のマシンのターミナルから操作します。

3.最初のログイン

私は、 Router にあらかじめ MAC アドレスに紐付く形で IP アドレスを割り当てておりまして、今回使う Raspberry Pi にはすでに決められたアドレスが割り当てられています。なので簡単なのですが、 IP アドレスが DHCP によって振り分けられている場合は IP アドレスがわからないので、探さなければなりませんね。スミマセンが省略です。

ssh の初期設定は、ユーザー名が「 pi 」、ログインパスワードが「 raspberry 」、ポートは 22 になっています。この情報を元に ssh 接続します。

4 .ユーザー名とパスワードの変更

なんぼなんでも初期設定のまま使い続けるのは、セキュリティ上まずいので、ユーザー名とパスワード、それと接続ポートを変更します。実は最初にやったときに、接続ポートの変更で設定ミスして ssh の接続ポートがわからなくなってしまいました。こうなるとお手上げです。ちゃんと確認しながらやりましょうね。

さて、そのままでは変更できないので、一時的なユーザーを作ってそいつでログインし、ユーザー名を変更します。この部分、ログイン・ログアウト、ユーザー名、パスワードが各々違ったりして紛らわしいので注意してください。

まずは一時的なユーザー (temp) を作ります。

$ sudo useradd -m temp
$ sudo gpasswd -a temp sudo
Adding user temp to group sudo
$ sudo passwd temp
New password:●●●●
Retype new password:●●●●
passwd: password updated successfully
$ exit

$ で始まる行が入力する行になります。1行目で「 temp 」ユーザーを作ります。2行目ではそのユーザーを sudo グループに入れます。これしないと、 temp ユーザーが sudo 出来ません。続いて temp ユーザーのパスワードを決めます。「●●●●」の部分がパスワードになりますが、エコーバックはありませんので、気をつけて入力してください。

次は今作った temp ユーザーでログインします。先ほどは pi ユーザーでした。今度は temp ユーザーです。パスワードも異なりますので注意です。

$ sudo usermod -l newuser pi
$ sudo usermod -d /home/newuser -m newuser
$ sudo groupmod -n newuser pi
$ exit

1行目で pi ユーザー名を新しいユーザー名に変えます。ここでは「 newuser 」としました。2行目はホームフォルダを変更し、3行目でグループを変えます。ここまでで temp ユーザーはお役御免になりますので、 exit します。

さて、新しいユーザー newuser でログインするんですが、この newuser 君のパスワードはまだ変わっていません。 newuser 君はもともと pi ユーザーの名前を変えたものですから、ユーザー名: newuser 、パスワード: raspberry です。この条件でログインします。

$ sudo userdel temp
$ sudo passwd newuser
New password:●●●●
Retype new password:●●●●
passwd: password updated successfully
$ sudo rm /etc/sudoers.d/010_pi-nopasswd
$ exit

1行目で先ほどお役御免になった temp ユーザーを削除します。2行目は newuser のパスワードを設定します。先ほどと同じように「●●●●」の部分が、パスワードでエコーバックはありません。もちろん、 temp ユーザーと newuser ユーザーで違うパスワードで全く問題ありません。最後にファイルを一つ削除しています。これは、 pi ユーザー(変更しました)がパスワードなしで作業できるようにするための設定で、残っていていいことはありませんので、削除します。

以上のユーザー名変更のセクションは、「[Raspbian]ユーザ名変更の個人的に「正しい」と思うやり方 | 純規の暇人趣味ブログ」を参考にって言うか、まるっきり一緒だったりします。言葉足らずの部分はリンク先を参照してください。

5.秘密鍵・公開鍵を設定

これ端折ります。先ほど作った newuser でログインしてそのホームに「 .ssh 」というフォルダを作り、そこに公開鍵をコピーします。この辺、たくさん解説しているサイトがあるので、ググってみてください。(長くなってきてるもんで … )

6.アップデート

これをまず最初にやるべきだという声がありそうですね(汗

$ sudo apt update
$ sudo apt -y upgrade
$ sudo apt -y dist-upgrade
$ sudo rpi-update
$ sudo reboot

上2行は定期的に行う通常のアップデートで、その下は何かあったときにやればいいやつです。特に4行目はファームウェアのアップデートで、これをやった後は必ずリスタートしなければなりません。

<小休止>

長くなってきたので、エントリーを分けます。後半では、 USB に接続した HDD のマウント。ネット越しの NAS マウント。などを行います。後半は明日。

Raspberry Pi の使い道

結構自虐的なエントリーなんですが、 Raspberry Pi ってあるじゃないですか。私の自宅にもたくさんあります。たくさんあります。複数台あるんですね。で、完全に使い道があるのは1台だけだったりするんです。う〜ん、あんまり制御系には興味ないし、言語習得とか言うジャンルには他の PC で OK です。なんに使おうか。。。

いやね、 Raspberry Pi って安いじゃないですか。つい買っちゃうんです。現在手元にあるのが、3 model B が2台、4 model B が1台、 zero W が1台。使い道がないのだけで4台あるんですね。ヤバいです。もったいないっす。何とかしなくちゃならんと思ってます。

試作用とか、制御系に使われることが多い Raspberry Pi ですが、小さな筐体でありながら、PCとして使うことが出来るのは素晴らしいです。唯一使っているのは zero W でして、小型液晶と組み合わせてサーバーに蓄積された画像を引っ張ってきて一定間隔で表示する、ミニサイネージとして使っています。このブログでも何度か出てきているので、検索してみてください。

使い道がないままではかわいそうなので、何とかしたいのです。 Raspberry Pi を使って samba の使い方を覚えましたし、 Linux の基本操作習得にも役立ってくれました。これまで、全く使ってこなかったわけではないのです。愛着もあるのでなおのことです。今考えているのは、複数台あるというのを生かして連携して何か出来ないかなぁと思っています。動画のエンコードなど、マシンパワーが必要なものなど使えないかなぁ。ググってみても、クラスターコンピューティングというのはもう古いのかなぁ。開発が止まっているものが多いみたい。

分散処理システムに利用できないか、引き続きリサーチしてみようと思います。

Update で Boot Option が外れてしまった (Raspberry Pi)

ちょっとしたことだったのだけど、はまってしまったので、メモを残しておく。

Raspberry Pi を使ったデジタル・フォトビューアーを作って使っています。 Raspberry Pi zero W でドライブしているので、複雑なことはしていません。 NAS の特定の場所にある写真を読み込んで、一定の時間表示しては次の写真を読みに行く。以後繰り返し。至ってい単純な仕組みです。

しかし、 Raspberry Pi はちょっと癖があって、起動時に一定の時間ウェイトを置かないとネットワークにつながりません。上の説明でも書きましたが、 NAS に画像ファイルを置いている関係で、ネットワークにつながらないとらちがあきません。そこで、ネットワークにつながってから起動プロセスを続行するというオプションがあります。

本日、この Raspberry Pi zero W に Update がたまっていたので適用した。リブートを求められたので、何の疑問も持たずにリブートさせました。ハイ、お察しの通り NAS につながりません。普段キーボードをつなげていませんので、 SSH での接続しようとしたのですが、うまくつながるときとつながらないときがあります。アレ? ネットワークが不安定なんだなと思ったのですが、手動で NAS をマウントさせようとするとマウントします。しかしブート直後はつながりません。何度か繰り返して、ブート・オプションが外れているのではないかと気がつきました ( 遅いよ ) 。

事実、再設定したら、何の問題もなく NAS をマウントします。最初の 1 回で気がつくべきですね。自分のスキルのなさに涙が出ます。

グラビアアイドル・サイネージ

7 インチの液晶を Raspberry Pi zero W でドライブして、グラビアアイドルが延々と出てくるホームサイネージを作って運用しています。グラビアアイドルの写真は、ネットでたくさん出てますね。ごっそりダウンロードしてローカルファイルにしています。

で、写真の枚数もかなりになって、フォルダ分けしてあります。更に、そのフォルダもかなりの数になっています。

1 日に表示する写真は、フォルダ単位でシャッフルして 1 日ごとに更新するようにしました。少し前のエントリーで上げた、外付け HDD から起動出来ないというのは、まさにこのシャッフル・プログラムです。 1 日 1 回深夜に立ち上がってフォルダ単位でシャッフルして作業フォルダ内に保存フォルダ内の画像ファイルを展開する。そんなことをしています。

この液晶、安かった割に発色も良く、満足しています。ただ、写真でもわかるかもしれませんが、コードがあっちこっちに生えていて見た目がよろしくありません。このコードを隠す意味でも、フレームを自作しようと思っているのですが、そういうことには疎いので二の足を踏んでいます。

液晶にスピーカーがついているのがわかるかもしれませんね。 HDMI から音声を出力出来そうなのですが、 Raspberry Pi でその辺どうやってドライブすれば良いのかわかりません。そこも課題かな。

こんな感じで、表されます。何秒に設定していたか忘れてしまいましたが、設定された時間になるとエフェクトなしで画像が切り替わります。

液晶を固定する方法も四隅についていた穴にリングを通し、天井からワイヤーでつるす。と言う方法です。パソコンからは、ほんの少し離れてしまうので、それも改善点かな。

と言うことで、ホームサイネージを紹介しました。課題はまだ山積しているんですが、到達点としては良いところまで行っているので満足しています。

プログラムは行き当たりばったりで作っているので、とてもここには出せません。フレームができたら完成ですかね。


たかがわが一生、されどわが人生

菅谷昭