furtka/webinstaller/templates/install/log.html
Daniel Maksymilian Syrnicki 3a259beb98 feat: install progress bar + fix docker group creation order
Two tangled changes to the install flow, batched because they're both
small and hit app.py:

1. Phase-based progress bar on /install/log. parse_install_progress()
   scans the archinstall log for ordered phase markers ("Wiping
   partitions", "Installing packages: ['base'", "Adding bootloader",
   "Installation completed without any errors", …) and exposes
   percent + user-facing phase label + status (running/done/error).
   Template wraps the raw log in a collapsed <details> so the default
   view stays calm; the meta-refresh stops once status is terminal.
   If archinstall changes its stdout wording the bar stalls on the
   last recognized phase — the install itself is unaffected.

2. Drop "docker" from the user's groups in creds and do the
   `gpasswd -a <user> docker` via custom_commands instead.
   archinstall creates users before pacstrapping the extras list, so
   the docker group doesn't exist at user-create time —
   caused the second real install to crash with
   `gpasswd: group 'docker' does not exist`. custom_commands runs
   at the very end, after docker is installed. Username is validated
   by USERNAME_RE so no shell injection.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 17:07:57 +02:00

30 lines
1.3 KiB
HTML

{% extends "base.html" %}
{% block title %}Installing… · Furtka Installer{% endblock %}
{% block head_extra %}
{% if progress.status == "running" %}<meta http-equiv="refresh" content="3">{% endif %}
{% endblock %}
{% block step_indicator %}<span class="step-indicator">Installing</span>{% endblock %}
{% block content %}
{% if progress.status == "done" %}
<h1>Furtka is ready</h1>
<p class="lede">Installation finished. Remove the USB / eject the installer image, then reboot.</p>
{% elif progress.status == "error" %}
<h1>Installation hit a snag</h1>
<p class="lede">Something went wrong. Open the details below and share them so we can help.</p>
{% else %}
<h1>Installing Furtka</h1>
<p class="lede">This takes a few minutes. Don't close this page or power off the machine.</p>
{% endif %}
<div class="progress" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="{{ progress.percent }}">
<div class="progress-bar{% if progress.status == 'error' %} progress-bar-error{% endif %}{% if progress.status == 'done' %} progress-bar-done{% endif %}" style="width: {{ progress.percent }}%;"></div>
</div>
<p class="progress-phase">{{ progress.phase }} · {{ progress.percent }}%</p>
<details class="log-details">
<summary>Show details</summary>
<pre class="log">{{ log or "(waiting for install to start)" }}</pre>
</details>
{% endblock %}