2026年4月30日木曜日

マインクラフトクローンのluantiを使ってみる

今空前のマイクラブームが来ている(我が家の娘たちの中で)。
といってもただyoutubeのマイクラで作った動画をただ見ているだけである。 

ただyoutubeをダラダラ見るよりは、ゲームをやったほうが多少なりとも能動的に何かをするという点でマシではないかと個人的には思っているが、ゲームはNGという嫁の許可が出なかった。マイクラであれば教育にも使われていて良さそうだという適当な話が嫁の耳に入ってきているようなので、やっても良さそうな雰囲気が出てきた。

luanti - voxelibre

マインクラフトを買い与えようかと一瞬思ったが、どうせすぐ飽きるし、不器用なので操作できないと言って放り出す可能性がかなり高い。そんなものに何千円も払うのはもったいないので、とりあえずマイクラクローンを与えて様子を見てみることにした。 

とりあえずluantiを入れる。

apt install luanti

これはマイクラっぽいものを作るゲームエンジンであって、これだけだとゲームにならない。luantiの上にゲームを入れる必要がある。minecloniaとvoxelibreが有名どころのようだ。  

画面下段の+ボタンからVoxeLibreを入れてワールドを新規作成すれば遊べる。左のホストサーバーにチェックを入れると、他のPCから「ゲームに参加」でマルチプレイができる。

いきなりモンスターに襲われたら怖くてやめそうなので、ダメージ有効のチェックを外しておく。minecloniaだとダメージ無効にしても襲っては来てしまう。voxelibreだと透明人間になったような扱いで怖くなさそうなので、voxelibreを使うことにした。

コントローラー

とりあえず手元に有ったPS4コントローラーを使おうと思ったが、なかなか思うように設定できない。コントローラー入力をキー入力に変換するプログラムAntiMicroXというのが有ったのでそれを使用することにした。

本物のマイクラを触ったことが無いので正しい配置はわからないが、とりあえず以下で設定。中華linuxゲーム機にrocknixを入れるとluantiが実行でき、そのキー設定が以下のようになっていたので真似した形。

左ジョイスティック上下左右 - WSAD
右ジョイスティック上下左右 - マウス(視点変更)
↑ - C (カメラ変更)
←→ - マウススクロール(アイテム選択)
↓- I (インベントリ)
□ - Q (捨てる)
△ - V (ミニマップ表示)
◯ - K (飛行モード)
× - スペース (ジャンプ)
L1 - 左シフト (しゃがむ)
L2 - J (高速モード)
R1 - 左クリック(攻撃等)
R2 - 右クリック(アイテム設置)
OPTION - ESC

luanti-server

とりあえず遊ぶには上記でいいが、マルチプレイで遊ぶには、誰かのPCを動かしておく必要がある。 いちいち子供が遊ぶときにパソコンを動かすのは面倒なので、常時動かしているraspberry-piにサーバーを入れることにした。

apt install luanti-server

これで起動すると、voxelibreではなく、ほんとうに基本的なゲームであるminetestが起動する。voxelibreを使いたいのでやり方を調べた。

VoxeLibreを起動する設定

まずは、先程単体で動かしたときにダウンロードしたvoxelibreが~/.minetest/games/mineclone2に入っているので、これをサーバー上の/usr/share/luanti/games/mineclone2/に置く。 (voxelibreは旧名mineclone2だったようでファイル名等はmineclone2のままになっていたりする)

/usr/lib/systemd/system/luanti-server.serviceを見ると、/etc/luanti/default.envで起動するゲームを選択するようだ。

LUANTI_GAMEID=mineclone2

worldデータ置き場も環境変数で設定できるようだが、デフォルトでは/usr/lib/luanti/default/worldsになっているので、ここに単体で動かしたときにできた~/.minetest/worldsのデータを持ってきて置く

ダメージ無効とかの設定は/etc/luanti/default.confで行う

cat /etc/luanti/default.conf
server_description = Luanti server powered by Debian
server_announce = false
ipv6_server = true
motd = Welcome to Luanti. Enjoy your stay!
enable_pvp = false
enable_damage = false
name = ユーザ名

ユーザ名はluantiに参加するときに登録するIDで、ここで指定したユーザはサーバ管理者権限を持つ模様。banとかができる。

起動

systemctl start luanti-server

自動起動にしておく

systemctl enable luanti-server

ゲームに参加

あとはluantiのクライアントからゲームに参加する。最初はユーザ名を登録する必要がある。

あとは普通に遊べる

 

android用も出ており、スマホからもログインして遊べる。 

raspberry-piでは、samba、immich、pxeブート用のtftp/http、gitea、minidlna、tailscale、radiko録音とSIPサーバーを入れてあって、あとこのluantiサーバーが動いている。 ちょっと負荷が心配だったがサーバーを動かすだけならraspberry-piの負荷も大した事なさそう。 

pxeboot完全に理解した

 pxeboot完全に理解した(チュートリアル的設定が出来た)ので設定メモっておこうと思っていたがついつい時間が経って大半を忘れてしまった。

再確認する気力は起きないので、覚えている範囲で書いて終わりにしておく。覚えている範囲では書いたつもりだが、ちょっと自信がない。

いざというときのためにSystemRescueCDをpxebootで実行できるようにしておきたかったのがきっかけで設定した。  

サーバの設定 

たぶんこの辺を参考にして設定したような気がする。 他にも色々見て回ったが忘れてしまった。 

dhcpの設定

dnsmasqを使う。/etc/dnsmasq.d/pxeboot.conf を編集。いろいろやって最終的には以下のようになった(詳細は後述)。サーバのIPは仮に192.168.11.50とする。

interface=lo,eth0
# dhcpはルータがやる。dhcp-proxyでpxeのところだけraspberry-piのdnsmasqがやる設定?
dhcp-range=192.168.11.0,proxy
# iPXE check: iPXEだと175が設定されるので、175が設定されてたらiPXEタグをセット
dhcp-match=set:iPXE,175
# キーで選択できるようにする(タイムアウト5秒)、F8は変えられないっぽい?
pxe-prompt="press F8 to select menu",5
# after iPXE
# tag:iPXEで、iPXEが設定されている場合のメニュー
pxe-service=tag:iPXE,x86PC,"BIOS autoexec.ipxe",ipxe/bios/autoexec.ipxe,192.168.11.50
pxe-service=tag:iPXE,x86-64_EFI,"EFI autoexec.ipxe",ipxe/efi/autoexec.ipxe,192.168.11.50
# 旧BIOS起動用
pxe-service=x86PC,"BIOS System Rescue CD",lpxelinux.0,192.168.11.50
pxe-service=x86PC,"BIOS iPXE",ipxe/bios/undionly.kpxe,192.168.11.50
pxe-service=x86PC,"BIOS netboot.xyz",netboot.xyz/pxelinux.0,192.168.11.50
# UEFI用
pxe-service=x86-64_EFI,"EFI System Rescue CD",syslinux.efi,192.168.11.50
#pxe-service=x86-64_EFI,"EFI iPXE",ipxe/efi/ipxe.efi,192.168.11.50
#pxe-service=x86-64_EFI,"EFI iPXE-legacy",ipxe/efi/ipxe-legacy.efi,192.168.11.50
#pxe-service=x86-64_EFI,"EFI iPXE-snponly",ipxe/efi/snponly.efi,192.168.11.50
#pxe-service=x86-64_EFI,"EFI iPXE-sb",ipxe/efi-sb/ipxe.efi,192.168.11.50
#pxe-service=x86-64_EFI,"EFI iPXE-sb-snponly",ipxe/efi-sb/snponly.efi,192.168.11.50
pxe-service=x86-64_EFI,"EFI netboot",ipxe/netboot.xyz-snp.efi,192.168.11.50

tftpサーバー

openmediavaultを入れているので、tftpを設定するだけだった。/mnt/disk/tftpを作成してそこを指定した。

httpサーバー

cdイメージを全部tftpから持ってくるとかなり遅いらしく、イメージはhttpから取ってくるものがある模様。よってhttpサーバーを立てる必要があるものがある。

いちいちhttpサーバー立てるのが面倒なので、openmediavaultのWebDAVを設定した。httpで取ってこれるので大丈夫そう。 tftpと同じところを指すようにした。openmediavaultの設定ではhttp://192.168..11.50/webdav/*でアクセスできる。

イメージの準備

SystemRescueCD 

イメージはCDから持ってきて、ブートのところはsyslinux/pxelinuxをつかったはず。

ブートのところ 

apt install syslinux-efi pxelinux 

インストールした以下のファイルをtftpのところに持ってくる。lpxelinuxとpxelinuxはどっちかでいいはず。なんかlpxelinuxのほうが良さそうなので、lpxelinuxを選んだ。

/usr/lib/PXELINUX/lpxelinux.0
/usr/lib/PXELINUX/pxelinux.0
/usr/lib/SYSLINUX.EFI/efi64/syslinux.efi
/usr/lib/syslinux/modules/bios/ldlinux.c32
/usr/lib/syslinux/modules/efi32/ldlinux.e32
/usr/lib/syslinux/modules/efi64/ldlinux.e64

syslinux/modulesの中には他にも色々ファイルがある。syslinuxの全機能を使いたいなら全部持ってきて置いておいたほうがいいのかもしれない。

dnsmasqの設定としては以下の部分となる。とりあえずこれでsyslinuxブートする。

# 旧BIOS起動用
pxe-service=x86PC,"BIOS System Rescue CD",lpxelinux.0,192.168.11.50
# UEFI用
pxe-service=x86-64_EFI,"EFI System Rescue CD",syslinux.efi,192.168.11.50 

ディスクイメージ

ディスクイメージの中のsysresccdをtftpとhttpサーバーに置く。 

mount -o loop image.iso /tmp/disk
cp -a /tmp/disk/sysresccd /mnt/disk/tftp 

syslinuxがブートしたらtftpのpxelinux.cfg/defaultが読まれるので、そこにブート設定を書く。どうやって読まれるファイルを調べたかというとvirtualboxでpxeブートしているところをwiresharkで調べた。マニュアルは読んでないので他にいいやり方があるかもしれないが知らない。

設定の内容はhttps://www.system-rescue.org/manual/PXE_network_booting/に書いてあるのを参考にjp106だけ追加設定した。 

DEFAULT sysresccd
LABEL sysresccd
  LINUX sysresccd/boot/x86_64/vmlinuz
  INITRD sysresccd/boot/intel_ucode.img,sysresccd/boot/amd_ucode.img,sysresccd/boot/x86_64/sysresccd.img
  APPEND archisobasedir=sysresccd ip=dhcp archiso_http_srv=http://192.168.11.50/webdav/ checksum setkmap=jp106
  SYSAPPEND 3

LINUX,INITRDまではtftpで取ってきて、それ以降はinitrd上で動いたlinuxでhttpで取ってくると思われる。 

SystemRescueCDは確かこれでうまく行ったような気がする。

netboot.xyz 

pxebootについて調べているうちにnetboot.xyzとやらを見つけた。pxebootで色々なdistributionのCDブートイメージでブートできるようになるらしい。これも動かせるようになっておくと、なんか便利そうだったので入れてみた。

netboot.xyzはただのPXEではなく、iPXEが必要らしい。おそらくhttpアクセスとかが必要だからだろう。当然うちの激古パソコンにはそんなものはないので、一旦PXEブートでiPXEになってからnetboot.xyzをブートしなくてはいけないようだった。

 iPXEブート

まずはiPXEにならなければならない。netboot.xyz(https://netboot.xyz/downloads)とか、iPXE本家(https://ipxe.org/download) からiPXEブートするバイナリを取ってきてtftpに置く。

それをブートする設定が以下のあたり。 やってみたところ、UEFIはどうしてもその後のnetboot.xyzからの起動ができなかった。パソコンが古いせいかもしれない。色々コメントしてあるのはその試行錯誤の残骸である。

BIOSはうまく行った(はず)。iPXEになりさえすれば、iPXEのバイナリでもnetboot.xyzのバイナリでもどっちでもいいはず。 

# 旧BIOS起動用
pxe-service=x86PC,"BIOS iPXE",ipxe/bios/undionly.kpxe,192.168.11.50
pxe-service=x86PC,"BIOS netboot.xyz",netboot.xyz/pxelinux.0,192.168.11.50
# UEFI用
#pxe-service=x86-64_EFI,"EFI iPXE",ipxe/efi/ipxe.efi,192.168.11.50
#pxe-service=x86-64_EFI,"EFI iPXE-legacy",ipxe/efi/ipxe-legacy.efi,192.168.11.50
#pxe-service=x86-64_EFI,"EFI iPXE-snponly",ipxe/efi/snponly.efi,192.168.11.50
#pxe-service=x86-64_EFI,"EFI iPXE-sb",ipxe/efi-sb/ipxe.efi,192.168.11.50
#pxe-service=x86-64_EFI,"EFI iPXE-sb-snponly",ipxe/efi-sb/snponly.efi,192.168.11.50
pxe-service=x86-64_EFI,"EFI netboot",ipxe/netboot.xyz-snp.efi,192.168.11.50

iPXEブート後

iPXEブート後は、tftpからiPXE用のスクリプトを取ってきて動く。dnsmasqの設定だと以下の部分。iPXEブート後、iPXEタグが設定されてないとメニューに出てこない設定。

# after iPXE
# tag:iPXEで、iPXEが設定されている場合のメニュー
pxe-service=tag:iPXE,x86PC,"BIOS autoexec.ipxe",ipxe/bios/autoexec.ipxe,192.168.11.50
pxe-service=tag:iPXE,x86-64_EFI,"EFI autoexec.ipxe",ipxe/efi/autoexec.ipxe,192.168.11.50

 tftpのipxe/*/autoexec.ipxeにスクリプトを置いておく。中身は以下のような感じ。biosとUEFIで違うので、ディレクトリ分けて置いておく。netboot.xyzのQuickStartに書いてあるやつ。

#!ipxe

dhcp
chain --autofree http://boot.netboot.xyz/ipxe/netboot.xyz.lkrn

これでなんとかBIOSでは起動したが、結構な確率でブートが失敗する。メニューが読み込めなかったり、ブートイメージを選択できてもブートイメージを取ってくる途中で止まったり。

iPXEのバイナリと古いPCのLANドライバ?的なものの相性が悪いのかもしれないし、全世界からアクセスされていてサーバが重いのかもしれない。よくわからないが結構不安定だ。

SytemRescueCDもnetboot.xyzに入ってるので、個別に入れる必要はなかったかと思ったが、netboot.xyzはかなり起動が不安定だったので、個別に入れて正解だった。 

そして気づいたのは、これを使おうとする場合、いちいちLANケーブルをささないと使えないということだ。新しいパソコンならwifiからpxeブートできたりするのかなあ。 

2026年4月19日日曜日

DNSサーバーを立てて外出先と家の中で同じホスト名を使いたい

自宅サーバーを立てているが、家の中だと192.168.*、外出先だとtailscaleを使ってtailscaleのIPになる。immichのアプリだとssidで判定して切り替えてくれるが、ssidは一つしか登録できないので、2.5GHzと5GHzでssid変わると機能しない。他にもsshとかブラウザのブックマークは全部2通り登録して切り替えないといけないのでめんどくさい。なんとかならないかと思って試行錯誤。

とりあえず家の中のwifiに繋がっている間は自宅サーバーのDNSを見に行って、その他はtailscale dnsを見に行ってくれればいい(tailscaleが繋がってない間はアクセスできなくていい)ので、ルーターが配信するDNSを自宅サーバーで動かすDNSに切り替えてみることにした。

やったこと 

自宅サーバーであるraspberrypiにdnsmasqを入れる

apt install dnsmasq 
systemctl start dnsmasq 

systemd/resolvdとやらがdnsを使っているのでエラーになる。いらないのでdns機能を停止。 

vi /etc/systemd/resolvd.conf.d/98-disabledns.conf
[Resolve]
DNSStubListener=no

dnsmasqにホスト名とIPを設定

vi /etc/dnsmasq.d/dns.conf
no-resolv
# サーバのホスト名とローカルIPを設定
address=/tailscaleと同じホスト名/192.168.11.50
# ルータのIP (親DNSになる)
server=192.168.11.1
# 念の為のgoogledns
server=8.8.8.8

動かしてみる

systemctl start dnsmasq
systemctl enable dnsmasq

digとかnslookupで確認し、ルータのDHCP設定のDNSをこのサーバのIPにする

結果 

PCではこれでうまく行った。自宅内ならtailscaleに繋いでても繋いでなくても192.168.11.50に行く。
スマホで5Gにしてtailscaleに繋げばtailscale dnsでつながる。
ただし、PCではうまく行くのにスマホ(android)の場合だけ自宅内のdnsがうまく行かなかった。どうやらプライベートDNSとやらのせいのようだ。

androidの場合、wifiに繋いでdnsを使う際にプライベートDNSを有効にしてあるとルータから指定されたDNSではなく勝手に独自のDNSを見に行くようになっているようだ。このせいでせっかく立てたDNSサーバーが意味をなさなくなる。

プライベートDNSとして DNS over TLSが使えなかったら普通のDNSになるという話を見てtcp853をブロックしたりしてみたが、どうも思った動きをしていない。アプリによってはやっぱり自宅内DNSを見に行かないようだ。プライベートDNSを無効にすると思った通りの動作となる。

ブロックされたらOS?としてのプライベートDNSは無効になるけど、webviewとかはプライベートDNS有効の設定が生きていて DNS over SSLとかで引いてきてしまうとかかもしれないが、SSLは流石にブロックできない。

androidが悪そう? 

結局どうにもこうにもうまく行かないので諦めた。PCだけはOKになったのでまあ良しとする。プライベートDNSを無効にすれば思った通り動作するが、偽サイトに誘導されそうでやっぱりちょっと怖い。全部2通りのアドレスをブックマークするかしかないのか。

というか特定のwifiではプライベートDNS無効にするとかできてもいいと思うんだけど、ネットを漁った感じでは5年以上進歩してないようなので期待薄な感じ。

PCでもfirefoxはブラウザ独自にプライベートDNSっぽいことはやってそうだけど、これは思った通り動いている。なんかいい感じのアルゴリズムで適切に処理してくれてるんだろう。firefoxさまさまである。

よって、androidがなんか変なことやってる気がする。試しにDNS調べるサイト見てみたらgoogleのDNSっぽいのがずらずら(20個くらい)出てきた。googleだしなんか信用できないな。やっぱりプライベートDNS無効にしようかな?

2026年2月26日木曜日

Godot Engineを使ってみようとしたらフリーズした

ちょっとした3Dを表示したりするのにゲームエンジンがよさそうかなと思って調べていた。有名どころではUnityとかUnrealEngineとかがある。

UnrealEngineはなんか多機能すぎてわけがわからない。Unityは会社で使おうとすると有料になりそう。会社でも使えそうなGodotを使ってみようとした。

フリーズする

何度起動してもフリーズする。なんかwindowsごと固まっている感じだけど、すでに動いているほかのアプリ(firefoxとか)は無事っぽい。タスクマネージャーも固まってプロセスを殺すこともできない。シャットダウンもできなくなるので電源ぶち切りするしかなくなる。

githubのissue見てみたけどv4.6からダメだとか(v.4.4.1まで戻してもNG)、エディタをsingle windowモードにしないとダメだとか(やっても変わらず)、何ともならない。

解決

使ってるPCではIntel  HD GraphicsとNVIDIA GeForceが認識されている。ふと思い立ってIntel HD Graphicsのドライバを無効にしてみたところ、フリーズしなくなった。どうやら2つのGPUがあったときにどっちを使うかみたいな感じで止まってしまっているのだと思う。おそらくwindows 11のせいだろう。linuxでやってたら問題なかったんじゃないだろうか。

その後いろいろやってみたところ、ドライバを無効にしなくてもGPUを固定しておけばよさそうだということが分かった。windowsの設定→システム→ディスプレイ→グラフィックでgodotのexeを指定してGPUを固定する。

どういう仕組みでどうGPUが使われているのかさっぱり分からないが、これで普通に使えるようになった。

試しに作ってみる 

とりあえずhttps://www.godot-tutorial.net/というサイトの3Dチュートリアルをやってみる。

書いてる通りそのままだと結構引っかかるところがあった。置いてある完成版と見比べながら修正していく。

引っかかったところ1:Meshの登録の仕方

Meshはいったん左下のファイルシステムのところにドラッグアンドドロップで入れて、そこからMeshInstance3Dにドラッグアンドドロップすると適用された。以前blenderで作ったモデルをfbxに変換して入れてみたりできそう。

引っかかったところ2:シグナル

player.gdの最初に以下が必要(emitするsignalを宣言する)

signal collected

Mainからsignalへのつなげ方も変わっているようだ。(ついでにサイトのコピペのままだと何も生成されなかったのでcreate_objectを呼ぶようにする。)

func _ready():
    $Player.collected.connect(_on_item_collected)
    create_object() 

引っかかったところ3:シグナルのつなげ方 

PlayerのArea3Dでほかの物体に当たった時のシグナルbody_enteredをCharacterBody3Dの関数に接続する。ただコードを書くだけじゃなくて以下のような操作が必要。

 

引っかかったところ4:すり抜ける 

見た目(MeshInstance3D)と当たり判定(CollisionShape3D)は別物になっていて、scaleで小さくしたときに当たり判定が小さくなりすぎると、地面をすり抜けて落ちて行ってしまう。適度な大きさを設定しておく必要がある。

 

とりあえず闇雲にチュートリアルをこなしてみた。blenderで作ったモデルも読み込めるようだったので、適当にミャクミャクと未来のたまごとサーキュラーを読んでみた。(以前作ったやつ

ただ、当たったら消えるだけなのでつまらない。どうやら物理演算されているっぽいので、なんかやってみたいんだけど、やり方がわからない。

とりあえず動いたので、今日はここまででヨシとする。 

 

2026年2月11日水曜日

gitea入れた

ちょっとしたリポジトリを管理したいがgithubに入れるほどでもない。というかgithubはなんか遅くて普段使いには向かない気がする。

単に置いとくだけだと何を作ったのかすらわからなくなる。せっかくraspiを買ったのでgitサーバを入れようと思った。 

ローカルで動かすgithubみたいなものとしてgitlabがあるけど、自分しか使わないのにローカルで動かすには重すぎる。できるだけ軽そうなやつを探してgiteaとやらを入れてみた。

インストール 

raspi debianにパッケージはなさそうだったので手動で入れる。
参考URL: https://docs.gitea.com/installation/install-from-binary

書いてある通りにユーザを作る 

# On Ubuntu/Debian:
adduser \
   --system \
   --shell /bin/bash \
   --gecos 'Git Version Control' \
   --group \
   --disabled-password \
   --home /home/git \
   git

次にインストール先を作る
見たところインストール先は任意に決められそうだったので、設定やらなにやら全部一か所にまとめて入れることにした。 

cd /mnt/disk/gitea
mkdir -p etc var/lib/{custom,data,log} bin

インストール先のディレクトリ構成は以下のような感じにした。etcに設定ファイル、binに実行ファイルを入れる。varにリポジトリ等が入るはず。

gitea/
gitea/etc
gitea/var
gitea/var/lib
gitea/var/lib/log
gitea/var/lib/custom
gitea/var/lib/data
gitea/bin 

binにバイナリを置く

wget https://dl.gitea.com/gitea/1.25.4/gitea-1.25.4-linux-arm64
chmod a+x gitea-1.25.4-linux-arm64
mv gitea-1.25.4-linux-arm64 gitea/bin

systemdのサービスを置く。サンプルがあるので取ってきて編集。
参考URL: https://docs.gitea.com/installation/linux-service 

wget https://raw.githubusercontent.com/go-gitea/gitea/refs/heads/release/v1.25/contrib/systemd/gitea.service
mv gitea.service gitea/etc

gitea.serviceを編集。以下の行を変えたくらい

WorkingDirectory=/mnt/disk/gitea/var/lib/
ExecStart=/mnt/disk/gitea/bin/gitea web --config /mnt/disk/gitea/etc/app.ini
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/mnt/disk/gitea/var/lib

とりあえず全部gitユーザにする

chown -R git:git gitea/ 

systemdに置く

cp /mnt/disk/gitea/gitea.service /etc/systemd/system 

サービス有効&サービス起動

systemctl enable gitea
systemctl start gitea

動いた。(以下はいくつかリポジトリを登録した後)

 

まだ大して使ってないが、なかなか軽くてよさげな気がする。gitlabよりgithubに近い感じ。

これで適当に書き散らかしていたプログラムを集約できる。(すでに行方不明になっているものも多いが) 

sshアクセス

httpで毎回パスワード聞かれるのがうっとおしいのでsshでアクセスしたい。が、sshでcloneしようとするとgitユーザになってパスワードを聞かれる。ssh-keygenで作ったpubkeyは登録してあるが。。。

git clone git@192.168.11.50:ttfugapiyo/photofix.git
git@192.168.11.50's password:

検索したところgitユーザをssd_configで許可すればいいようだ。
参考URL: https://forum.gitea.com/t/gitea-requests-password-with-a-correct-ssh-key/7870

/etc/ssh/ssd_configを見ると、うちのraspiではAllowGroupsで_sshグループが許可されている。(いつ入ったのか不明。raspi osのデフォルトなのか、openmediavaultの設定なのか)
なのでgitユーザを_sshグループに入れればよさそう。

usermod -aG _ssh git

これでclone / push / pullできた。

2025年12月21日日曜日

immichのupgrade

immichのバージョンが上がったようなので、upgradeしてみる。

サーバupgrade

https://docs.immich.app/install/upgrading

を参考に

docker compose pull && docker compose up -d

とりあえずこれで何事もなくupgradeされる。

一応docker-compose.ymlも更新してもう一度やってみる(参考: https://docs.immich.app/overview/quick-start

newにダウンロードしなおして差を見てみる 

mkdir new && cd new
wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env
diff -uNr ../immich-app ./

何かわからないがdocker-compose.ymlの方でredisとやらも変わっていたのでdocker-compose.ymlを置き換えてもう一度upgradeした。問題なかった。

アプリのupgrade

サーバを上げたら更新ボタンになり、google playから更新できた 

2025年12月19日金曜日

raspberry-pi 4b miuzeiのケースのねじ

raspberry-piで写真サーバを立てた際、あまりにも簡単で最も苦労したのはケースの組み立てだった。

その苦労した点の写真が以下。

 

ねじがはみ出している。ゴム足も妙にでかいが、それでも微妙に足りていない。このままでは床がやられてしまう。

ほかの人のブログを見たけど、ねじの長さは丁度よさそうに見える。はずれを引いたようだ。 

力技で何とかしようとして無理やりペンチでねじ切り、ねじ山をつぶしてナットが回らなくなった。

しかたないのでホームセンターに行き、うろ覚えでねじを購入するも全く同じサイズのねじを買ってしまう。(測っとけよ)

こんなこともあろうかと、ねじとナットがセットのやつを買っておいたので、上にもナットをつけて何とか以下のように解決していた。

 

そして今日正解が見つかった。上下逆にすればよかったのだ。

これしきの事が思いつかないとは。。

説明書を鵜吞みにして考えることを放棄していたようだ。老化とは恐ろしい。