タイトル通りですが、Ubuntu更新後のVM再起動時に必ず2分も待つので無駄だろうから、聞いてみると特にUbuntuとVMwareの組み合わせでは問題ないようでsystemdを無効化した
$ sudo systemctl disable --now systemd-networkd-wait-online.service で2分待ちを解除するとサクサク立ち上がった、ネットワークの安定化待ちのようですね、2分も待つのという感じですが
admin

la vie libre
タイトル通りですが、Ubuntu更新後のVM再起動時に必ず2分も待つので無駄だろうから、聞いてみると特にUbuntuとVMwareの組み合わせでは問題ないようでsystemdを無効化した
$ sudo systemctl disable --now systemd-networkd-wait-online.service で2分待ちを解除するとサクサク立ち上がった、ネットワークの安定化待ちのようですね、2分も待つのという感じですが
admin
USB SSDで細かな時間間隔でtimemachineバックアップ、USB HDDには例えば一週間単位ぐらいでのバックアップを考えた時にtimemachineよりも、Carbon Copy Cloner(CCC)の方が完全クローンだから復元が楽だろうと思うから、HDD側にクローン作成した
無償期間は30日ですが、完全クローン作成や復元ならば無償期間終了しても使えるようです
初期画面でコピー元はMacのSSD、コピー先にはUSB HDDのバックアップパーティションを指定するといくつかの手順は必要ですが、バックアップを開始します
およそ2時間弱でクローンの作成完了、発見済みが1.8Tぐらいになっているのですが実際にコピーされるのは、
無論Macで使われている領域だけ、完全クローンなので復元も確実だろうと思う、作業は手動で起動になりますが
P.S. 2026/3/5
書き込みベリファイを追加
時間はかかるけど、書き込みデータのチェックはした方が良さそうなので、設定で「コピーされたファイルを再確認」にチェック入れる
admin
あまりに遅すぎて捨てた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
実現する形態、
<ラズピコ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というのは実は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
ラズパイ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自体は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
ラズパイ5なら軽量なLuantiサーバーなら動かせるのですが、リモートでどうやるかだったのですが、VPNを使えば良いと
ラズパイ5(Luanti service)- VPN ~~~~~~~ VPN – client
<VPN : tailscale>
VPNは今は第二世代とでもいうべき時代で、WireGuardと言われる最新のVPNプロトコルを使った無償で使えるVPN製品(カーネル空間動作で高速、軽量、最新の暗号化技術でセキュア)が注目で中でもtailscaleは広く使われているようです
特徴は中央集権型のサービスで、アカウントログオンしてクラウド側にデバイスを登録すると、登録したデバイス間でセキュアな通信が確保され、さらにMagicDNSという仕組みでそれぞれの登録デバイスにDNS情報が転送されるので、その情報を使って登録デバイス間の接続にはIPアドレスの意識さえ不要という優れもの
# tailscale起動、以下のコマンドでログイン画面のURLが出てくるからブラウザログイン
$ sudo tailscale up
# 以降の起動時には自動起動するように、以下を実行する
$ sudo systemctl enable minetest-server
# IPアドレスラズパイ側の確認(Magic DNS使うからIPアドレスを触る必要はない)
$ tailscale ip -4
100.83.206.1
% tailscale status
100.88.161.30 macbookpro login_account@ macOS -
100.83.206.1 rasp5 login_account@ linux -クライアントにはtailscaleのサイトからプラットフォーム対応のpkgを引っ張ってきてインストールして、起動時に同時にラズパイログオンアカウントと同じアカウントでログインすればマシンが追加されます、その後に例えばsshならば、
$ ssh usr@rasp5
でログオンできます、rasp5はMagic DNSの登録名です
Luantiならば、
こんな感じでアクセス
公開にあたってのセキュリティ運用対応、VPNそのものは信頼度高いのでtailscaleのログイン情報の保護に尽きる
1. 管理者アカウントを1個に固定
→ 「新しい端末を追加できるのは管理者だけ」
2. デバイス承認をON(超重要)
管理画面 → Settings → Device approval
これONにすると:
新しい端末がログインしても
管理者が承認しないと通信不可
3. キーは使わない(人力ログインのみ)
Tailscale自体は:
パスワードを持たない設計
全部:
Google / GitHub / Microsoft
の認証に丸投げ。
4. 不要端末の自動削除
Settings → Key Expiry
180日(default)に設定。
5. Subnet / Exit Node は使わない
デフォルトはOFFになってる
6. デフォルトユーザーpiのパスワードは安全性の高いものに安全性の高いものに変える
<Debain版のLunatic serverのインストール>
snap版では不都合あったので、ヘッドレス版(Debian公式の minetest-server デーモン)を入れる
% sudo apt install minetest-server
# サービスの自動起動enableと一時的な起動
% sudo systemctl enable minetest-server
% sudo systemctl start minetest-server
<ユーザーの追加と別ワールドの作成>
・指針:ユーザーは当然限定アクセスだけでroot権限は与えない
・ワールド:プレイ用の30000(dafult)ポート以外に編集や個人用のワールドは例えば30001ポートで起動するようにして環境は分離する
・手順:ユーザーluanti1を作ってサーバー起動
$ sudo adduser luanti1
$ su - luanti1
$ mkdir -p ~/.minetest/worlds/test // 編集用のdirectory(test)を作る
$ /usr/lib/minetest/minetestserver --world ~/.minetest/worlds/luanti1 --port 30001 --quiet --logfile ""
複数のlunatiサーバー立ち上げても、元が軽量だからラズパイ5では今のところ余裕です
admin
VS codeのCursorからRAG機能の呼び出しうまくいかなかったので、Open WebUIから呼び出しているollamaで動作するLocal LLMにRAG機能を追加してみた
Open WebUIを使えば完全にノーコードでRAG機能が追加できます、でも無論ハルシネーションもでるだろうけど、数年前の知識しかないLocal LLMから見れば大きな進歩だろうと思う
実はOpen WebUIには、ベクターDBもWebクローラー機能(実は内部ではfirecrawlとパイプラインでつながってるとのこと)も実装されてるから実現できるわけですが、チームでの使用とかには荷が重いと思いますが個人で使うならこれで当面は間に合うんじゃないかと思う
以下のイメージはチャットモードで作成済みのLocal LLM qwen2.5-coder:14B + RAGのモデル(Qwen2.5)がモデル選択メニューから見えてるとこ
で、このモデルの作り方は、ワークスペースを選択するとこの画面(モデル名はQwenにリネーム前)になります、今現在入力しているのは「モデル」と「ナレッジベース」だけ、プロンプトとツールは必要になった時点で追加します、モデルそのものは画面右上のNew Modelボタンを押して作成します
これはすでに作成したナレッジベースですが、
ナレッジの追加は、コレクションの追加メニューで右上の+ボタンを押すと種々の方法で追加できます、ここではwebpageから内部的にはおそらくmarkdown形式で取り込まれてます、これらはgithubから取り込んだmarkdownファイルですね
チャット画面で、投げたプロンプトに対して、回答の下部に(1 Source)というのが参考にされたナレッジになります
その部分の拡大は、以下のとおりでmarkdownからの抽出になってますね
しばらくはこの環境でパーソナルエージェント的な使い方をやってみます、違うエージェントが必要になればその時はモデル追加すれば良い、自分が持っているいろんなファイルをぶち込んでしまいたいと思う
P.S. 2026/2/10
Local LLMも分野特化してきていて、例えばqwen2.5-coder:14Bは英語は全くダメ、qwen2.5:14Bはちゃんと使えるから、用途ごとに専門家用意しとく感覚だね
admin
昨日はとりあえずのcodeサポート用のモデルを入れてみたけど、結構重量級だったので同等性能でも負荷が軽いモデルに、同時に編集時のtab補完してくれる軽量モデルを設定してみた
% ollama list
NAME ID SIZE MODIFIED
qwen2.5-coder:14B 9ec8897f747e 9.0 GB 28 minutes ago
qwen2.5-coder:7b dae161e27b0e 4.7 GB 44 minutes agoContinueのconfig.jsonファイルの設定
tabAutocompleteModel:このブロックがタブ補完時のLLM指定
{
"models":[
{
"title": "Main Coder (14B)",
"provider": "ollama",
"model": "qwen2.5-coder:14b"
}
],
"tabAutocompleteModel": {
"title": "Tab Autocomplete",
"provider": "ollama",
"model": "qwen2.5-coder:7b"
}
}qwen2.5-coder:14b:メモリ使用量がmaxでも24GB程度で収まるようになったので、こちらにしよう
しかしLocal LLMは特にプログラム言語系の変化の早い領域ではRAG使うようにしないと実質的には使えないね、次はRAG使えるようにしよう
-> 2026/2/3:やってみたけどできなかった(@rag search “hello”が通らない)、まだ流動的なところが多そうだからしばしサスペンド
admin