furtka/webinstaller/templates/install/step2.html
Daniel Maksymilian Syrnicki 8bcbaec621 fix(installer): safer disk picker, single install at a time, surface silent archinstall failures
- drives: classify by lsblk TRAN/ROTA (SATA SSDs were labelled HDD and lost
  to bigger spinning disks); drop zram, eMMC boot/rpmb areas, read-only and
  0-byte disks; grey out disks under 16 GB; rank USB disks last; warn about
  >2 TB disks on BIOS (MBR); boot-stick fallback via archiso kernel args
  when bootmnt is gone; timeouts on lsblk/smartctl/blkid
- step 2 only accepts a disk that was actually offered
- /install/run refuses a second concurrent install and disables the button
- archinstall's exit code is tracked: OOM kills / signals now show as errors
  instead of a progress bar stuck forever
- disk-probe exceptions land in the install log instead of a bare 500

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 12:53:24 +02:00

54 lines
2.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. We pre-select the drive that looks fastest and healthiest.</p>
{% set usable = drives | selectattr("usable") | list %}
{% set pick = selected if (selected and usable | selectattr("name", "equalto", selected) | list) else (usable[0].name if usable else "") %}
{% if error %}
<div class="alert alert-error">{{ error }}</div>
{% endif %}
{% if not usable %}
<div class="alert alert-error">
{% if drives %}
None of the disks in this computer is big enough for Furtka (it needs at least 16 GB).
{% else %}
No disk found to install onto. Check that the disk is connected, and in the BIOS/UEFI settings
that the SATA mode is "AHCI" rather than "RAID" or "Intel RST" — Linux can't see disks in RAID mode.
{% endif %}
</div>
{% endif %}
<form method="post" action="{{ url_for('install_step_2') }}">
<div class="drive-list">
{% for d in drives %}
<label class="drive{% if not d.usable %} drive-disabled{% endif %}">
<input type="radio" name="boot_drive" value="{{ d.name }}"
{% if not d.usable %}disabled{% elif d.name == pick %}checked{% endif %} />
<span class="name">{{ d.name }}</span>
{% if not selected and d.usable and loop.first %}
<span class="badge-recommended">Recommended</span>
{% endif %}
<span class="meta">
<span class="chip">{{ d.size }}</span>
<span class="chip">{{ d.type_label }}</span>
{% if d.usable %}<span class="chip">{{ d.health_label }}</span>{% endif %}
</span>
{% if d.reason %}<span class="drive-note">{{ d.reason }}</span>{% endif %}
{% if d.warning %}<span class="drive-note">{{ d.warning }}</span>{% endif %}
</label>
{% endfor %}
</div>
<div class="actions">
<button type="submit" class="btn btn-primary" {% if not usable %}disabled{% endif %}>Next — review</button>
<a href="{{ url_for('install_step_1') }}" class="btn btn-link">← Back</a>
</div>
</form>
{% endblock %}