fix(installer): Validate hostname, parse disk models, skip zram
- screen_hostname: reject names that break /etc/hostname and /etc/hosts. - screen_disk: parse lsblk -P by regex so multi-word/empty MODELs show correctly, and never offer /dev/zram* (TYPE=disk) as a target. - packages: add python-distro, the undeclared runtime dep of the shipped ssh-import-id (it always crashed and fell back to curl). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
e63f9cb14f
commit
699ed6a935
@@ -336,15 +336,17 @@ screen_disk() {
|
|||||||
live_dev="/dev/${pk:-$(basename "$src")}"
|
live_dev="/dev/${pk:-$(basename "$src")}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local disks=()
|
# -P quotes every field (and escapes quotes inside), so multi-word or
|
||||||
|
# empty MODELs parse correctly - matched by regex, never eval'd.
|
||||||
|
local disks=() line name size model
|
||||||
|
local re='^NAME="([^"]*)" SIZE="([^"]*)" MODEL="([^"]*)" TYPE="disk"$'
|
||||||
while IFS= read -r line; do
|
while IFS= read -r line; do
|
||||||
local name size model
|
[[ "$line" =~ $re ]] || continue
|
||||||
name=$(echo "$line" | awk '{print $1}')
|
name=${BASH_REMATCH[1]} size=${BASH_REMATCH[2]} model=${BASH_REMATCH[3]}
|
||||||
size=$(echo "$line" | awk '{print $2}')
|
|
||||||
model=$(echo "$line" | awk '{$1=$2=""; sub(/^[ \t]+/,""); print}')
|
|
||||||
[[ "$name" == "$live_dev" ]] && continue
|
[[ "$name" == "$live_dev" ]] && continue
|
||||||
disks+=("${name} ${size} ${model}")
|
[[ "$name" == /dev/zram* ]] && continue # compressed RAM swap, TYPE=disk
|
||||||
done < <(lsblk -dpno NAME,SIZE,MODEL,TYPE | awk '$NF=="disk" {print $1,$2,$3}')
|
disks+=("${name} ${size} ${model:-unknown model}")
|
||||||
|
done < <(lsblk -dpnP -o NAME,SIZE,MODEL,TYPE)
|
||||||
|
|
||||||
(( ${#disks[@]} > 0 )) || die "No disks found."
|
(( ${#disks[@]} > 0 )) || die "No disks found."
|
||||||
|
|
||||||
@@ -456,9 +458,11 @@ screen_hostname() {
|
|||||||
clear
|
clear
|
||||||
header "Hostname"
|
header "Hostname"
|
||||||
echo ""
|
echo ""
|
||||||
HOSTNAME=$(gum input --placeholder "archlinux" --char-limit 64 --header "+ Hostname") \
|
HOSTNAME=$(gum input --placeholder "archlinux" --char-limit 63 --header "+ Hostname") \
|
||||||
|| die "No hostname entered."
|
|| die "No hostname entered."
|
||||||
[[ -z "$HOSTNAME" ]] && HOSTNAME="archlinux"
|
[[ -z "$HOSTNAME" ]] && HOSTNAME="archlinux"
|
||||||
|
[[ "$HOSTNAME" =~ ^[A-Za-z0-9]([A-Za-z0-9-]{0,62})$ && "$HOSTNAME" != *- ]] \
|
||||||
|
|| die "Invalid hostname. Use letters, digits and '-' (max 63, no leading/trailing '-')."
|
||||||
log "Hostname: $HOSTNAME"
|
log "Hostname: $HOSTNAME"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -272,6 +272,7 @@ pptpclient
|
|||||||
pv
|
pv
|
||||||
pwgen
|
pwgen
|
||||||
python-aiohttp
|
python-aiohttp
|
||||||
|
python-distro
|
||||||
python-hatchling
|
python-hatchling
|
||||||
python-installer
|
python-installer
|
||||||
python-packaging
|
python-packaging
|
||||||
|
|||||||
Reference in New Issue
Block a user