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>
30 lines
1.3 KiB
HTML
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 %}
|