From 5b848a5819d79ba35d8e3a16d055dabf8dd034f8 Mon Sep 17 00:00:00 2001 From: gapul <92638132+gapul@users.noreply.github.com> Date: Wed, 2 Sep 2026 02:00:12 +0900 Subject: [PATCH] =?UTF-8?q?feat(homelab):=203D=20=E3=83=97=E3=83=AA?= =?UTF-8?q?=E3=83=B3=E3=82=BF=E3=81=AE=E6=93=8D=E4=BD=9C=E7=9B=A4=20(Bambu?= =?UTF-8?q?ddy)=20=E3=82=92=E5=BB=BA=E3=81=A6=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bambu の Authorization Control で、サードパーティのスライサーから印刷を開始する 経路が塞がれている。プリンタを LAN Only + Developer Mode にすればローカルからの 制御は戻るが、代償に Bambu Handy が死ぬ (クラウド前提のアプリなので、同じ Wi-Fi にいても繋がらない)。Handy が持っていた「外から様子を見る」「ファイルを選んで 刷る」の行き先を用意する。 Home Assistant の ha-bambulab は既に入っているが役割が違うので両方置く。あちらは 監視とオートメーション側で、公開サービスが send_command 一つだけ、pybambu に FTP が無いので SD のファイル一覧が取れない。置く・選ぶ・消すはこちらが持つ。 LAN-only 向けのファームウェア更新ヘルパーも入っているので、月一で新版を見に行く 先もここになる。 bridge で動かす。上流の compose は host networking を既定にしているが、それは SSDP でプリンタを見つけるためで、この箱では 8000 も 3000 も既に埋まっている。プリンタは IP で足せるので discovery は捨てた。仮想プリンタ機能も使わないので、開けるのは UI の 8010 だけ。 --- nix/homelab/bambuddy.nix | 67 ++++++++++++++++++++++++++++++++++++++++ nix/homelab/default.nix | 1 + nix/hosts/homeserver.nix | 3 ++ 3 files changed, 71 insertions(+) create mode 100644 nix/homelab/bambuddy.nix diff --git a/nix/homelab/bambuddy.nix b/nix/homelab/bambuddy.nix new file mode 100644 index 00000000..0014aa49 --- /dev/null +++ b/nix/homelab/bambuddy.nix @@ -0,0 +1,67 @@ +# Bambu プリンタの操作盤 (Bambuddy)。スマホから「SD の中から選んで刷る」をやる先。 +# +# 経緯。Bambu の Authorization Control で、サードパーティのスライサーから印刷を開始 +# する経路が塞がれた。プリンタを LAN Only + Developer Mode にすればローカルからの制御 +# は戻るが、代償に Bambu Handy が死ぬ — クラウド前提のアプリなので、同じ Wi-Fi にいて +# も繋がらない。Handy が持っていた「外から様子を見る」「ファイルを選んで刷る」の行き先 +# がここになる。 +# +# Home Assistant の ha-bambulab とは役割が違うので両方置く。あちらは監視と +# オートメーション側で、公開サービスは send_command 一つだけ、pybambu に FTP が無いので +# SD のファイル一覧が取れない。置く・選ぶ・消すはこちらが持つ。 +# +# LAN-only 向けのファームウェア更新ヘルパーも入っている。公開済みの全バージョンに +# Usable / Unavailable / Installed のバッジが付くので、月一で見に行く先もここでいい +# (LAN Only の間は OTA が来ないので、更新作業そのものは microSD 経由の手作業)。 +# +# bridge で動かす。上流の compose は host networking を既定にしているが、それは SSDP で +# プリンタを見つけるためで、この箱では 8000 も 3000 も既に埋まっている。プリンタは IP で +# 足せる (192.168.116.97) ので、discovery を捨てて衝突を避けるほうが得。仮想プリンタ機能 +# (990 / 8883 / 322 / 50000-) も使わないから、開けるのは UI の 1 ポートだけでいい。 +# +# 秘密は要らない。プリンタのアクセスコードは UI から入れてデータディレクトリの中に入る。 +# rebuild の前に手で置くファイルは無い。 +{ + lib, + ... +}: + +{ + # 新規サービスなので旧ホストから移ってくるデータが無い。bind mount の元を先に作る。 + systemd.tmpfiles.rules = [ + "d /var/lib/homelab/bambuddy 0700 root root -" + "d /var/lib/homelab/bambuddy/data 0700 root root -" + "d /var/lib/homelab/bambuddy/logs 0700 root root -" + ]; + + virtualisation.oci-containers.containers."bambuddy" = { + # beta タグ (0.2.2b1 など) は latest にならない作りなので、latest は安定版を指す。 + # 他のスタックと揃えて latest でよい。 + image = "ghcr.io/maziggy/bambuddy:latest"; + environment = { + "TZ" = "Asia/Tokyo"; + # entrypoint が /app/data と /app/logs を chown してから gosu で降格する。 + # 既定の 1000:1000 だと root 所有の bind mount 元に書けないので、他のスタックと + # 同じく root のまま走らせる。 + "PUID" = "0"; + "PGID" = "0"; + # host networking を前提にした変数だが、bridge でもコンテナ内の listen ポートを + # 決めるので明示しておく。外向きは下の ports で 8010 に出す。 + "PORT" = "8000"; + }; + volumes = [ + "/var/lib/homelab/bambuddy/data:/app/data:rw" + "/var/lib/homelab/bambuddy/logs:/app/logs:rw" + ]; + ports = [ + "8010:8000/tcp" + ]; + log-driver = "journald"; + }; + + systemd.services."podman-bambuddy" = { + serviceConfig = { + Restart = lib.mkOverride 90 "always"; + }; + }; +} diff --git a/nix/homelab/default.nix b/nix/homelab/default.nix index 1fa7bfb9..a2cea8d0 100644 --- a/nix/homelab/default.nix +++ b/nix/homelab/default.nix @@ -39,6 +39,7 @@ ./anki.nix ./archivebox.nix ./attic.nix + ./bambuddy.nix ./atuin.nix ./backup.nix ./calnode.nix diff --git a/nix/hosts/homeserver.nix b/nix/hosts/homeserver.nix index 6322e1b2..b331d1db 100644 --- a/nix/hosts/homeserver.nix +++ b/nix/hosts/homeserver.nix @@ -57,6 +57,9 @@ let # 止まったが web は開いていた)。それは dawarich-freshness.nix の方で見る。 track.upstream = "127.0.0.1:3005"; navidrome.upstream = "127.0.0.1:4533"; + # 3D プリンタの操作盤 (Bambuddy)。プリンタを LAN Only + Developer Mode にした結果 + # Bambu Handy が使えなくなったので、スマホから触る先がここになる。homelab/bambuddy.nix。 + bambu.upstream = "127.0.0.1:8010"; # 家計簿 (fava)。台帳は beancount のテキストで /var/lib/homelab/fava にある。 # fava 自体はログインを持たないので、境界はここの vhost が tailnet アドレス # にしか生えていないこと。外に出すなら認証を足すこと。