Raspberry PiのEEPROM更新とKernel更新

今日は午前中のゴタゴタで、よくわからないスイッチが入ったので、らずぱいをいじってます。
但しテスト環境。
24x7なやつは、あと2日で丸2年も寡黙に動いてくれた状態になるので、uptimeが730日を超えるまでは静観:-)
まだ22.04LTSから24.04へのアップグレードは出来ないみたい。

んでEEPROMのアップデートとか、忘れてましたよ!
#sudo rpi-eeprom-update
して、なんかあるよって出てきたら
#sudo rpi-eeprom-update -a
してスケジューリングされたらreboot。

んで、uname -aしてみたら、ん?
5.4.0???
ふるいねー。なんで?
ちなみに24x7で運用している方も同じ。
https://www.hpe.com/jp/ja/servers/linux/matrix/index-26-ubuntu.html
コレ見ると。なんか20.04LTSのGA Kernelを引きずってるの?
ということで
#sudo apt install linux-generic
これで5.15.0に。
んでServerなのでdefaultがGA KernelなんだけどHWE Kernelも選べる。
https://ubuntu.com/kernel/lifecycle#installation-22-04
これによれば
#sudo apt-get install --install-recommends linux-generic-hwe-22.04
こうしろと。
で、1回目はGA Kernel走ってるで~でエラー。無視してrebootしろと表示されるのでreboot。
もう1回、同じコマンドを叩くとHWK Kernelのinitrdイメージを作ってくれる。
しかし、またエラー....
Using DTB: bcm2711-rpi-4-b.dtb
Couldn't find DTB bcm2711-rpi-4-b.dtb on the following paths: /etc/flash-kernel/dtbs /usr/lib/linux-image-6.5.0-35-generic /lib/firmware/6.5.0-35-generic/device-tree/
これが原因か...
/boot/firmware/
にはあるけど
/etc/flash-kernel/dtbs/
にはない。
#sudo cp -p /boot/firmware/bcm2711-rpi-4-b.dtb /etc/flash-kernel/dtbs/
してあげて、もう1度!
これで、ノーエラーで出来上がるので満を期してreboot。
うーん、ならんかった...
よく分からん。/bootの下、ぐちゃぐちゃ...

2ndry nameserver

ずっと立ち上げたつもりでいたけど、全く何もやってなかった(^^;
やってあったのは、nameserverとしてのDNS登録だけ。
すでにWindows Server 2台でnameserverは構成されている状態なので、まあ、わざわざ立てなくてもいいんだけど、多少なりともヘテロな環境構築をやっておかないと、脳ミソ衰えるだけなんで...

ということで、久しぶりにらずぱいをいじりました。
ほんと、安定運用し始めると、セキュリティアップデート以外は、放置。
スバラシイ!の一言。

さーて、man namedとかやってもsection 8のmanualが表示されません。
そんなわけで
$ sudo apt install bind9*
とかやって、BIND9関係を一気にインストール。
$ sudo mandb
してDBも再構築しておきます。
あ、他の基本的なmanも入っていなかったりするので
$ sudo apt install manpages*
も事のついでやっておく方が良いです。ディスク容量気にして、ちまちまこれとあれとか選ぶよりこっちの方が効率的。

作業は/etc/bindで行います。
2ndryでいいなら、いじるのは/etc/bind/named.conf.localだけ
書く中身は...
zone "前方参照Zone" IN {
type slave;
masters { マスター1; マスター2; };
file "/var/cache/bind/前方参照Zoneファイル";
};
zone "IPv4逆引き参照Zone" IN {
type slave;
masters { マスター1; マスター2; };
file "/var/cache/bind/IPv4逆引き参照Zoneファイル";
};
zone "IPv6逆引き参照Zone" IN {
type slave;
masters { マスター1; マスター2; };
file "/var/cache/bind/IPv6逆引き参照Zoneファイル";
};
こんなの追加したら
$ named-checkconf named.conf.local
してエラーが無いことを確認。
エラーが無ければ
$ sudo systemctl restart named
します。
digコマンド使って確認。逆引きは-xオプション、IPv6はAAAAオプション、nameserver指定は@指定オプションを駆使して、status: NOERRORで確認したい結果が得られるかを確認していきます。

なお、通常の小規模な環境というか、色々Webの解説見てると、Masterが1台のケースで書かれている例が多いですよね。多分、複数台あるときの書き方はあってると思います...
Windows AD ServerでDNS動かすと、それぞれMasterになるんですな。AD連携しているので。
なので、併記。IPアドレスもIPv6があったって、IPv4指定で問題なしです。IPv6だけで運用していない限りは。

そんでもって、Ubuntuで追加するサーバーは2ndryなので、Windows側でnameserverとして登録したり、逆引きアドレス登録したり、Zone転送先サーバーとして指定したりしてあげないとダメです。
逆引きは、前方参照側で「PTRレコードを更新する」にチェックを入れてあげます。入れずに逆引き側で個別に登録しても、そのうち消されます...
Windowsの動的更新ってイマイチふるまいがよく分からず、Multi IPでADを運用するときにDNSのlistenのIPを絞っちゃうと、そのIPしかDNSに登録されなくなっちゃったり、個別に登録しても消されたりとか、よー分からんです。
とにかく、Windows DNSのMaster Server様が絶対なので、従うしかありません。

ちなみに、うちは元々Solaris/Linuxでnameserverを静的に運用していて、そのころはIPv6はまともに運用していなかったのでIPv6の逆引き参照ZoneはWindows ADのnameserverに移行した後も存在していませんでした。
今回、意を新たに作成。
https://atmarkit.itmedia.co.jp/ait/articles/1307/04/news113.html
こちらの記事が参考になります。

らずぱい追加調達

お遊び用の4GB品は入手しましたが、おうちさーばーのスレーブ用機材として8GB品が欲しく、色々入荷連絡登録してたのですが、いつも入荷連絡に気づいてアクセスしても売り切れ状態。

たまたま出社時の休み時間に
https://akiba-pc.watch.impress.co.jp/docs/wakiba/find/1410629.html
これに気が付くも、売り切れ。
お昼ぐらいには、まだ買えたみたいです。

店頭在庫が尽きたtweetがないので、帰宅時に秋葉原へ。
sengoku-202205.jpg
いつもお世話になっております。

んで
pi4-8gb-202205.jpg
麗しの8GB品。

MACアドレスは"e4:5f:01"(Windowsだと"e4-5f-01"の標記)からです。
予備品が出来たので、SSD boot化でも試してみよう:-)

お腹も減ったので、秋葉原と言えば30年以上お世話になっている
jyangara-akihabara-202205-0.jpg
こちら。
待たずには入れたので、何より。

秋葉原駅改札内にも...
jyangara-akihabara-202205-1.jpg
なんか出来てました。

Postscript
コメントいただいていた記事、replyしました。

久々のらずぱい

なかなかRaspberry Pi Zero 2の技適の進捗が開示されず、転売品を買っても、肝心の電波を飛ばせないので、しょーがねーなー状態なのですが、とりあえず、年末発注、年始着荷でPi Zero WHを入手。
先週、納期を見てて、たまたまクロールしてたら在庫があったPi 4B 4GB品を入手。
raspberrypi-2022-0.jpg
どっちも、転売品以外は入手困難品です。
わたしは、秋月電商さんから、正規の価格で入手出来ました:-)

んで、週末だし、動確しなきゃ... ってPi 4B 4GBの動作確認作業したら、起動しない...
赤LEDは点灯。
緑LEDは点滅を繰り返します。
arp -aしても、変化無し。もち、RJ45の口のLEDも点きません...
HDMIにも何も出ない...

イメージを変えるも、変化無し。
同じメディアをPi Zero WHに挿すと動く...

しょうがないので、1年以上、ずーっと動いていたPi4 8GB品を止めて、手元で動かしてみると、あ.............. 同じ現象になりました。
これで、原因が判明。
USB Type-Cケーブル。
iPad Proが充電出来ないのと同じ理由だな。
捨てましたよ、タコケーブル。

理由が分かれば、後は簡単。
ただ、数日前に、Pi OSのイメージが更新されたようで、UK IoT法対策でデフォルトアカウント設定が削除されたようで、イメージを焼き込む時に設定しておかないと、一旦、デスクトップを立ち上げて、アカウント作って、SSHが動くように変更する必要があります。
参考:https://akkiesoft.hatenablog.jp/entry/20220409/1649471075

デスクトップからだと、最初のステップでアカウントを作成するので、そこまではよし。
自動的にUpdateも走らせられるので、それもよし。
その後、一度再起動することになります。
再起動後
cd /boot
sudo touch ssh
して、次回起動後からは、外からsshで繋ぐことが出来ます。

なお、MACアドレスは"ef:5f:01"から(Windowsだと"ef-5f-01"の標記)のようです。lan0/wlan0共に。

また、起動しない時は
https://mikolabo.net/index.php/2020/07/13/rasp4-trouble/
こちらのサイトも参考にさせていただきました。

しかし、Pi OS、これまたよくわからん...

Pi4 Ubuntu 20.04 LTSで時刻設定

今頃ですが、syslogの時刻がJSTじゃないことに気が付きました(^^;
そーいや、Time Zoneを設定してない。
それでも、timesyncdでntp.ubuntu.comに繋いでくれて、UTCとしては正しい。

まず、JSTにするには

$ sudo timedatectl set-timezone Asia/Tokyo
とすれば、OK。

次に、NTP Serverを近場のもの(例えばntp.nict.jp)に変えるのであれば/etc/systemd/timesyncd.confの

[Time]
#NTP=

となっているところを

[Time]
NTP=ntp.nict.jp

に変更してあげればよし。restartしなくても、すぐに反映されるようです。

Pi4 Ubuntu 20.04 LTSでDHCPv4 & DHCPv6が自動起動しない...

設定変更の確認のため、rebootをしていたら、dhcpdが立ち上がっていないことに気が付きました。
起動後にloginしてps -ef | grep dhcpすると、いないんです...

/var/log/syslogを見てみると

No subnet6 declaration for eth0 (no IPv6 addresses).



No subnet declaration for eth0 (no IPv4 addresses).

で、エラー。
でも

$ systemctl is-enabled isc-dhcp-server isc-dhcp-server6
enabled
enabled
ってなってるんだよな~とぐぐって調べてみても、ろくな答えは書いてない...

色々調べていくと/etc/default/isc-dhcp-serverにMulti Hostな場合のインターフェースを記載するようです。これが

INTERFACESv4=""
INTERFACESv6=""
となっていて、ここにeth0を書いてあげればいいのかと思ったら、何も変化無し...

実際に、起動するときのscriptは/etc/systemd/system/multi-user.target.wantsの下にある

isc-dhcp-server.service
isc-dhcp-server6.service

で、これらは/lib/systemd/system以下の同名のファイルへのsymbolic link。
こいつには、/bin/shに食わせるコマンドとして

exec dhcpd -user dhcpd -group dhcpd -f -4 -pf /run/dhcp-server/dhcpd.pid -cf $CONFIG_FILE $INTERFACES

とか

exec dhcpd -user dhcpd -group dhcpd -f -6 -pf /run/dhcp-server/dhcpd6.pid -cf $CONFIG_FILE $INTERFACES

とか書いてある...
どっちも$INTERFACESぢゃん... /etc/default/isc-dhcp-serverに書き込んだところで、反映されないのはこのため。
なので、/etc/default/isc-dhcp-serverに1行加えて

INTERFACES="eth0"

と書き加えてあげたら、見事に立ち上がりました。
bugかな...

んで、おまけ。
systemdによる起動は
https://milestone-of-se.nesuke.com/sv-basic/linux-basic/systemctl-list-dependencies/
こちらにあるように、グラフィカルに表示可能です。

$ systemctl list-dependencies
とすれば、赤丸付いているのは、起動に失敗と言うことがすぐに分かります。
また起動順序をグラフィカルに確認するには

systemd-analyze plot > /tmp/plot.svg
とかして、Web browserで表示させると良いです。
今回、desktop環境はインストールしていないので、sftpでWindows側に持ってきて表示しましたが、わかりやすいですね:-)

なお、今回は、radvdの設定でManaged FlagをOFFしたときの挙動を確認するためでした。
アドレスをDHCPv6で割り当てなくても、経路情報を設定してInternalなname serverにきちんとアクセス出来ることが確認出来たので、こっちで運用かな。

Pi4 Ubuntu 20.04 LTSでradvdの設定

さらに
https://straycats.blog.ss-blog.jp/2021-01-02-1
の続きです。

RA情報を流すにはradvdなるモノを使うようです。
http://www.litech.org/radvd/
Linux IPv6 Router Advertisement Daemonだそうです。
ついでにradvdumpなるモノもあるので、これも入れます。

$ sudo apt install radvd
$ sudo apt install radvdump
manとかないんですよ...
ってなことで
https://linux.die.net/man/5/radvd.conf
こちら参照しながらです。

パッケージインストール直後に、起動させようとして、/etc/radvd.confが無いから起動出来ないよんと言って、落ちるので、わかりやすい奴です。
GitHubにサンプル
https://github.com/reubenhwk/radvd/blob/master/radvd.conf.example
もあります。

radvd使ってやりたいことは...
home-network-05.jpg
こういうこと。

とりあえず

$ sudo radvdump
とかして、WindowsからIPv6アドレスを再取得させてあげると、RAが流れるので、dump出来ます。
ちなみに、同じところでradvd動かしてても、そっちの情報は取ってくれない感じです...
なので、上書き出来ているかどうかは、client頼み(^^;

今回は主だってM-flagをONにする事が目的なので、設定は最小限に:-)

interface eth0 {
AdvManagedFlag on;
AdvOtherConfigFlag on;
AdvSendAdvert on;

prefix ZZZZ:YYYY:XXXX:WWWW::0/64 {
AdvOnLink on;
AdvAutonomous on;
};
};
だけです。
これで

$ sudo systemctl enable radvd
$ sudo systemctl restart radvd
してあげれば、管理されたアドレスがClientに付与されるはず!

試してみましょう。
Windows 10 clientで

> ipconfig /release6
> ipconfig /renew6
> ipconfig /all
これでIPv6アドレスとして、ZZZZ:YYYY:XXXX:WWWW::/64なdhcpd6.confで指定したアドレスが取得出来ていれば、成功です。
念のため、clientを再起動して、試してみましょう。
home-network-06.jpg
でけた:-)

実は、最初に試していたときは、ZZZZ:YYYY:XXXX:WWWW::/64への経路情報がDHCP6 clientに設定されず、アドレスとname serverアドレスは期待値なんだけど、経路情報が無いのでname serverにパケットが届かず、使えない状態でした。
ipconfigコマンドだけ使っていると、静的に設定しているDesktop環境との差が分かりません。
routeコマンドを使って、気づきました。
でも、WindowsってUNIX由来のコマンドだと、あまり細かいことが出来なくて...
PowerShellでnetshコマンドを使うことになります。

この辺は、次回。