実は壊れてなかった、ラズパイ5

経緯を整理すると、

① 途中にMacBookのrebootが入っていたと思うけど、立ち上げてもVNCに接続できないのが起点

② boot時の動作確認用のファンも回転しないので壊れたと認識して新規購入

新規購入品での挙動不審だったので色々やったけど、結局問題は、

① ラズパイ5のEEPROMが破損してたらしい(EEPROM書き込みSSDで復旧、書き換えSDで起動時の緑LEDの点滅では分かりづらいから時間待ちが確実)

新規購入品でもSDとUSB SSDを切り替えたら、また壊れたのでUSB SSDだけで運用

② VPN(tail scale)はMacBookの再起動でdown状態になるようだ、tail scale upしてるかはmagic DNS(例えば ssh pi@rasp5、rasp5.localじゃなく、を受け付ければup状態)でも状態は確認できる、tailscale statusでも良いけどね、

Expiry disabledで設定してもそのデバイスが削除されないだけで、upしていることとは別だよということ

 

①の発生原因は今のところ不明、回避方法はどちらかの媒体のみ挿入して、起動時の選択を無くする、書き換え用のSDカード常備というのは必要そうである

 

以上の結果から、もしやと思って古い方のラズパイ5にEEPROM書き換え実行して、tailscale up状態でVNC接続、つまり正常動作、を確認できたから実は壊れたと勘違いしてたようだ

②の永続化(rebootで自動up)するためには、

brew install --formula tailscale
sudo brew services start tailscale
sudo tailscale up

最後のupでwarning出るけど無視して良いようだ、sudo tailscale upでsudoが必要なのはデーモンモードだから、アプリ版ならsudoは不要

% sudo tailscale up
Warning: client version "1.94.2-t2de4d317a" != tailscaled server version "1.94.2-t0a29cf18b-g3f044c9f6"

 

予備機ができたから使い道考えよう、ヘッドレス運用というのはネットワーク経由とオンボードのLEDしか稼働状態判らないのがネック

 

admin

ラズパイ5壊れた、新規購入

突然死したので新規購入、電源ONでboot upしなくなりました、緑LEDが点灯しっぱなし状態

SDカード、USB SSDどちらも媒体にアクセスしに行かない

下が壊れたラズパイ5、上が購入品、冷却ファンだけは使い回しできそうなので外して保存しときます、サーマルパッドは一度外すと新規に取り付けしないと期待した性能にはならないだろうし

しかし去年の一月末購入で24時間かどうでもないのに逝ってしまうのはハズレだったんだろうね

 

admin

Libreofficeの削除

VMware上で動かしているUbuntu、デフォでLibreoffice入っているけど使うことないから削除

https://ja.console-linux.com/?p=21730

24系でも上の通りで削除できた、

$ sudo apt-get remove --purge libreoffice*

$ sudo apt clean

$ sudo apt-get autoremove

3GBぐらいSSD領域削減できたかもしれない

 

admin

VMwareでUbuntu起動時の待ち(デフォルト2分)

タイトル通りですが、Ubuntu更新後のVM再起動時に必ず2分も待つので無駄だろうから、聞いてみると特にUbuntuとVMwareの組み合わせでは問題ないようでsystemdを無効化した

$ sudo systemctl disable --now systemd-networkd-wait-online.service 

で2分待ちを解除するとサクサク立ち上がった、ネットワークの安定化待ちのようですね、2分も待つのという感じですが

 

admin

Carbon Copy Cloner(CCC)を使う

USB SSDで細かな時間間隔でtimemachineバックアップ、USB HDDには例えば一週間単位ぐらいでのバックアップを考えた時にtimemachineよりも、Carbon Copy Cloner(CCC)の方が完全クローンだから復元が楽だろうと思うから、HDD側にクローン作成した

https://bombich.com

無償期間は30日ですが、完全クローン作成や復元ならば無償期間終了しても使えるようです

初期画面でコピー元はMacのSSD、コピー先にはUSB HDDのバックアップパーティションを指定するといくつかの手順は必要ですが、バックアップを開始します

およそ2時間弱でクローンの作成完了、発見済みが1.8Tぐらいになっているのですが実際にコピーされるのは、

無論Macで使われている領域だけ、完全クローンなので復元も確実だろうと思う、作業は手動で起動になりますが

P.S. 2026/3/5

書き込みベリファイを追加

時間はかかるけど、書き込みデータのチェックはした方が良さそうなので、設定で「コピーされたファイルを再確認」にチェック入れる

 

admin

NASやめたのでUSB HDDにもtimemachineバックアップを取る

あまりに遅すぎて捨てた2021年エントリーモデルのNAS(qnap TS-230)、そこに時間限定運転で使ってたHDD(WD 6TB)はほとんど稼働時間ないから、USB 3.2のHDDケース購入(GW3.5AM-SU3G2P)してバックアップ用にしてみた

媒体チェックはMacのFirst Aidでは今時点は問題なし、

これで問題あるならほぼ終わりだろうけど、

timemachineで6Tは必要ないからパーティション切って3Tをtimemachineに割り当て、

HDDのベンチマークでシーケンシャルread 200MB/sちょい、write 150MB/sあたりなのでNASに比べるとかなり早い、フルバックアップ(およそ500GB)も一時間程度で終了したから、これがNASだと6時間ぐらいかな

USB SSDは定時バックアップで、USB HDDは週一ぐらいの運用でいくかな、SSD/HDD両方をバックアップデバイスにしてしとくと交互にバックアップするらしいけどね、

 

admin

TigerVNCで一般ユーザの専用デスクトップを持たせる

実現する形態、

<ラズピコ5はサーバー運用>

・Luantiサーバー(ユーザー接続はtailscaleを使う)

・管理者:サーバー運用とユーザー管理

・一般ユーザー:ユーザーごとにLuantiサーバーを起動、つまり個別のワールドを持てる様にして、デスクトップも分離させて持たせる

<目的に合いそうなVNCサーバー>

TigerVNCがピッタリ感



tigervncのインストール、
$ sudo apt install tigervnc-standalone-server tigervnc-common -y

アカウント(luanti1)を作る、

$ sudo adduser luanti1

$ groups luanti1
luanti1 : luanti1 users

$ tigervncpasswd // tigervncのpw設定する(tigervnc login時必要)

<設定ファイル:サービスの定義>

luanti1@rasp5:~ $ cat ~/.config/systemd/user/tigervnc@.service
[Unit]
Description=TigerVNC Server
After=network.target

# direct to the user directory
[Service]
Type=forking
ExecStartPre=/bin/rm -f /home/luanti1/.vnc/%H:%i.pid		

ExecStart=/usr/bin/tigervncserver %i -geometry 1280x800 -localhost no -SecurityTypes VncAuth,TLSVnc -xstartup /home/luanti1/.vnc/xstartup

ExecStop=/usr/bin/tigervncserver -kill %i
Restart=on-failure

[Install]
WantedBy=default.target

<設定ファイル:サービス起動設定>

luanti1@rasp5:~ $ cat ~/.vnc/xstartup

#!/bin/bash
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
exec dbus-launch --exit-with-session startlxde-pi

<ブート時自動起動の設定>

ユーザごとにログインして以下を実行する、

サーバーでboot時に有効にするなら、
# linger有効化(一般ユーザでやれば他人は変更できないからそれがお勧め)
$ loginctl enable-linger username        // usernameは実際のユーザ名(ここではpi)に置き換え
# userサービス enable
$ systemctl --user enable tigervnc@:1
# 今すぐ起動
$ systemctl --user start tigervnc@:1

ステータス確認、
$ systemctl --user status tigervnc@:1
● tigervnc@:1.service - TigerVNC Server
~~以下略

 $ ss -tlnp | grep 5901
LISTEN 0      5                          0.0.0.0:5901       0.0.0.0:*    users:(("Xtigervnc",pid=203908,fd=7))
LISTEN 0      5                             [::]:5901          [::]:*    users:(("Xtigervnc",pid=203908,fd=8))

tigervnc@:1はそのユーザーの仮想画面番号を指定する

 

VNCクライアントの管理画面はこんな感じ、

・LAN内のアクセスは禁止している

・予備のためにRealVNC(port 5900:piのみ接続可能)は活かしてある

・TigerVNCの画面はport 5901(pi用)/5902(luanti1用)を用意してある

以上で複数ユーザーがユーザーごとにLuantiサーバーの起動とデスクトップ画面の使用できる様な環境設定を完了、sshも許可してるからそれは非常用かな

 

admin

ufwの設定方法

以前設定したつもりになってたけど、実は設定されてなかったufwをインストールから順を追って記録

ufwというのは実はiptablesのラッパー機能になっていて、見え方をわかりやすくしたものと思えば良いのでしょうね

インストールから設定までのコマンドの使い方、tailscaleでの限定開放の例です、この様に指定するとLAN内の接続要求はリジェクトされます

$ sudo apt install ufw -y

ポート解放設定
$ sudo ufw allow in on tailscale0 to any port 22 proto tcp
$ sudo ufw allow in on tailscale0 proto tcp to any port 5900:5910

$ sudo ufw default deny incoming
$ sudo ufw default allow outgoing

$ sudo ufw enable	// set to active

 $ sudo ufw status 
Status: active

To                         Action      From
--                         ------      ----
22/tcp on tailscale0       ALLOW       Anywhere                  
5900:5910/tcp on tailscale0 ALLOW       Anywhere                  
22/tcp (v6) on tailscale0  ALLOW       Anywhere (v6)             
5900:5910/tcp (v6) on tailscale0 ALLOW       Anywhere (v6)  


$ sudo ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp on tailscale0       ALLOW IN    Anywhere                  
[ 2] 5900:5910/tcp on tailscale0 ALLOW IN    Anywhere                  
[ 3] 22/tcp (v6) on tailscale0  ALLOW IN    Anywhere (v6)             
[ 4] 5900:5910/tcp (v6) on tailscale0 ALLOW IN    Anywhere (v6) 

不要なルールの削除

$ sudo ufo delete n(番号、複数削除するときは上位番号から削除する

若い番号から消すと順序が乱れるだろうから、最上位側から消すのが普通と思う

サーバーであればポート開放を限定的にするのはほぼ必須です、tailscaleを使っているので、それと合わせてアクセス制限は二重化されています

 

admin

tailscaleで管理者とユーザーを分離する

ラズパイ5のluantiサーバーの管理者とユーザーは少なくとも別のメールアカウントにしないと、サーバー含めた管理者エリアへのアクセスができてしまうので現実運用に即した多少のアップデート

つまり管理者エリアとユーザエリアはメールアカウントを別にして、ユーザアカウントの管理画面には最悪アクセスできても管理者エリアの管理画面へのアクセスは禁止する設定

ユーザデバイスは以下のuser@gmail.com(仮想のアドレスです)の配下に登録、管理者デバイスはadmin@gmail.comの配下に登録します

	"groups": {
		"group:admin":   ["admin@gmail.com"],
		"group:players": ["admin@gmail.com", "user@gmail.com"],
	},
	// Define the tags which can be applied to devices and by which users.
	// "tagOwners": {
	//  	"tag:example": ["autogroup:admin"],
	// },
	"tagOwners": {
		"tag:luanti-server": ["group:admin"],
	},
	// Define grants that govern access for users, groups, autogroups, tags,
	// Tailscale IP addresses, and subnet ranges.

	"acls": [
		{
			"action": "accept",
			"src":    ["group:players"],
			"dst": [
				"tag:luanti-server:30000-30010",
				"tag:luanti-server:22",
        "tag:luanti-server:5900",
				"tag:luanti-server:5901",
			],
		},
	],

user@gmail.com側のドメインではACL設定はできないので、user@gmail.com側の相互ユーザ分離はできないですが、それは通常のWi-Fi環境下と大差はないだろうから現実的運用では、管理者エリアとユーザエリアを分離だけでも相当にセキュアだろうと思う

P.S. 2026/2/21

"tag:luanti-server:5900",
"tag:luanti-server:5901",

5900 portも通過許容に変更、そうしないとVNCがtailscale経由では通らない

 

P.S. 2026/2/23

tailscaleの管理者機能で、

tailscaleのアカウント切り替えは、一台のクライアントで登録は一個だけに限定されるからログアウトして再登録する必要がある、VMwareで例えばLinux動かしとけば、実質二台のPCとして使えるから2個のtailscaleアカウントを一台で持つことができる

 

admin

 

tailscaleのセキュリティ設定

tailscale自体はtailnet以外からのアクセスに対しては強固ですが、前の記事で述べた通りいくつか考慮すべきポイントがあります

その中でもクライアント同士(特にユーザクライアントから管理クライアント)でアクセスできてしまうというのは避けなければいけない項目でしょう

そのための設定がACLです、tailscaleの管理画面で、”Access controls”のjsonファイルに以下のように書き込んで、クライアントからサーバーへのアクセスだけ許可します、ここで許可した以外は全部deny扱いなのでクライアント間は完全分離です

	"groups": {
		"group:admin":   ["user@gmail.com"],
		"group:players": ["user@gmail.com"],
	},
	// Define the tags which can be applied to devices and by which users.
	// "tagOwners": {
	//  	"tag:example": ["autogroup:admin"],
	// },
	"tagOwners": {
		"tag:luanti-server": ["group:admin"],
	},
	// Define grants that govern access for users, groups, autogroups, tags,
	// Tailscale IP addresses, and subnet ranges.
	"acls": [
		{
			"action": "accept",
			"src":    ["group:players"],
			"dst": [
				"tag:luanti-server:30000-30010",
				"tag:luanti-server:22",
				"tag:luanti-server:5901",
			],
		},
	],

jsonファイルを編集してセーブすると、Machinesの選択メニューでEdit ACL tagsが現れて、これを選択するとデバイスにタグ付できます

タグ付すると、

のようにmachinesのデバイス名の下にtag表示されるようになりますから、このタグがACL設定の"tag:luanti-server": ["group:admin"]と合致してアクセス(フロー)制御が実行できます

ラズパイ5のufw設定(使うポートだけ許可する)と、unattended-upgradesを使った自動セキュリティアップデートも追加しておきます

tailscaleのfree版だとアクセスの権限制限設定できないけれども、身内の運用ならばあえて管理画面のことは伝えずに運用だね

 

admin