Closes the loop end-to-end. The ISO build now bundles the furtka/ package and the apps/ tree as a tarball; webinstaller hands it to archinstall via custom_commands; the installed system gets the `furtka` CLI, a boot-scan systemd unit, and the fileshare app ready to install. - iso/build.sh: stages furtka/ + apps/ into a tmpdir, drops __pycache__, tarballs into airootfs/opt/furtka-resource-manager.tar.gz. - webinstaller/app.py: _resource_manager_commands() reads the staged payload at request-time, base64-encodes it into a single untar command, and writes /usr/local/bin/furtka (PYTHONPATH wrapper, no pip needed) + furtka-reconcile.service. Python pacstrapped so the wrapper has an interpreter. - Graceful degradation: dev box / CI without an ISO build has no payload tarball, so those commands are skipped (logs a warning). Tests cover both branches. - furtka-reconcile.service is conditionally enabled only if the unit file actually landed — keeps the systemctl enable line green when the payload was absent. - apps/fileshare/: first real Furtka app. dperson/samba on host network, single named volume, .env.example with placeholder creds. Manifest matches the schema locked in slice 1. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
4 lines
314 B
XML
4 lines
314 B
XML
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
|
|
<path d="M3 7v12a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-7l-2-2H5a2 2 0 0 0-2 2z"/>
|
|
<path d="M8 13h8M8 17h5"/>
|
|
</svg>
|