Wires the live-ISO wizard from "shows three screens" to "actually invokes archinstall on the chosen disk", plus first-pass styling so it stops looking like raw <h1>/<form>. Webinstaller flow: - S1 form gains username/password/password2/language with server-side validation (hostname/username regex, ≥8 char password, match check). - /install/run writes user_configuration.json + user_credentials.json (creds 0600) to FURTKA_STATE_DIR (default /tmp/furtka), then execs `archinstall --config … --creds … --silent` as a backgrounded subprocess. - /install/log renders the subprocess output via meta-refresh polling. - FURTKA_DRY_RUN=1 short-circuits the exec for testing. - archinstall flag names verified against `archinstall --help` in an archlinux container before committing. Drive list: - drives.py now filters via `lsblk … -o NAME,SIZE,TYPE` keeping TYPE=disk, so the live ISO's own squashfs (loop) and CD-ROM (rom) stop appearing as install targets. Boot menu: - iso/build.sh sed-rebrands "Arch Linux install medium" → "Furtka Live Installer" across grub/, syslinux/, and efiboot/loader/ entries. Verified zero leftovers against the current releng profile. Styling: - static/style.css adopts the website's design tokens (palette, typography, gate-mark accent), with light + dark via prefers-color-scheme. - New base.html with header (gate SVG + FURTKA·INSTALLER wordmark + step indicator) and footer; all install templates extend it. - Drive picker uses radio cards with score chip; overview uses a summary table and a destructive "wipe drive" button. Tests: 17 pass (4 new in test_app.py covering validation + config builders, 2 new in test_drives.py covering the lsblk filter). Ruff clean. README roadmap updated to mark these done and explicitly defer the 26.0-alpha release until archinstall actually completes end-to-end on a VM. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
36 lines
1.3 KiB
HTML
36 lines
1.3 KiB
HTML
{% extends "base.html" %}
|
|
|
|
{% block title %}Step 2 — Boot drive · Furtka Installer{% endblock %}
|
|
{% block step_indicator %}<span class="step-indicator">Step 2 of 3</span>{% endblock %}
|
|
|
|
{% block content %}
|
|
<h1>Boot drive</h1>
|
|
<p class="lede">Pick the disk Furtka will install onto. The highest-scored drive is recommended.</p>
|
|
|
|
{% if not drives %}
|
|
<div class="alert alert-error">
|
|
No physical disks detected. The live ISO can't see any install targets — check your BIOS / SATA controller.
|
|
</div>
|
|
{% endif %}
|
|
|
|
<form method="post" action="{{ url_for('install_step_2') }}">
|
|
<div class="drive-list">
|
|
{% for d in drives %}
|
|
<label class="drive">
|
|
<input type="radio" name="boot_drive" value="{{ d.name }}"
|
|
{% if (selected and d.name == selected) or (not selected and loop.first) %}checked{% endif %} />
|
|
<span class="name">{{ d.name }}</span>
|
|
<span class="meta">
|
|
<span>{{ d.size }}</span>
|
|
<span class="score">score {{ d.score }}</span>
|
|
</span>
|
|
</label>
|
|
{% endfor %}
|
|
</div>
|
|
|
|
<div class="actions">
|
|
<button type="submit" class="btn btn-primary" {% if not drives %}disabled{% endif %}>Next — review</button>
|
|
<a href="{{ url_for('install_step_1') }}" class="btn btn-link">← Back</a>
|
|
</div>
|
|
</form>
|
|
{% endblock %}
|