Added dracut cmdline generation

This commit is contained in:
oddlama 2020-04-25 15:12:35 +02:00
parent 2b323d0c0d
commit f2909a7c72
No known key found for this signature in database
GPG Key ID: 88EA325D51D53908
3 changed files with 42 additions and 11 deletions

View File

@ -25,6 +25,8 @@ USED_LUKS=false
# An array of disk related actions to perform
DISK_ACTIONS=()
# An array of dracut parameters needed to boot the selected configuration
DISK_DRACUT_CMDLINE=()
# An associative array from disk id to a resolvable string
declare -A DISK_ID_TO_RESOLVABLE
# An associative array from disk id to parent gpt disk id (only for partitions)
@ -159,6 +161,7 @@ create_raid() {
local new_id="${arguments[new_id]}"
create_resolve_entry "$new_id" mdadm "${DISK_ID_TO_UUID[$new_id]}"
DISK_DRACUT_CMDLINE+=("rd.md.uuid=$(uuid_to_mduuid "$new_id")")
DISK_ACTIONS+=("action=create_raid" "$@" ";")
}
@ -175,9 +178,11 @@ create_luks() {
create_new_id new_id
verify_existing_id id
local id="${arguments[id]}"
local new_id="${arguments[new_id]}"
local name="${arguments[name]}"
create_resolve_entry "$new_id" luks "$name"
DISK_DRACUT_CMDLINE+=("rd.luks.uuid=$id")
DISK_ACTIONS+=("action=create_luks" "$@" ";")
}

View File

@ -139,12 +139,9 @@ generate_initramfs() {
}
get_cmdline() {
local cmdline=()
cmdline+=("root=UUID=$rootuuid")
# TODO in order....
cmdline+=("rd.md.uuid=$todo")
cmdline+=("rd.luks.uuid=$todo")
echo -n "${cmdline[*]}"
local rootdev="$(resolve_device_by_id "$DISK_ID_ROOT")"
local rootuuid="$(get_blkid_field_by_device 'UUID' "$rootdev")"
echo -n "${DISK_DRACUT_CMDLINE[*]} root=UUID=$rootuuid"
}
install_kernel_efi() {
@ -166,11 +163,10 @@ install_kernel_efi() {
# Create boot entry
einfo "Creating efi boot entry"
local linuxdev="$(resolve_device_by_id "$DISK_ID_ROOT")"
local efipartdev="$(resolve_device_by_id "$DISK_ID_EFI")"
local efipartnum="${efipartdev: -1}"
local gptdev="$(resolve_device_by_id "${DISK_ID_PART_TO_GPT_ID[$DISK_ID_EFI]}")"
try efibootmgr --verbose --create --disk "$gptdev" --part "$efipartnum" --label "gentoo" --loader '\EFI\vmlinuz.efi' --unicode 'initrd=\EFI\initramfs.img'
try efibootmgr --verbose --create --disk "$gptdev" --part "$efipartnum" --label "gentoo" --loader '\EFI\vmlinuz.efi' --unicode 'initrd=\EFI\initramfs.img'" $(get_cmdline)"
}
install_kernel_bios() {
@ -188,6 +184,17 @@ install_kernel_bios() {
einfo "Installing syslinux"
local biosdev="$(resolve_device_by_id "$DISK_ID_BIOS")"
syslinux --install "$biosdev"
# Create syslinux.cfg
cat >/boot/syslinux/syslinux.cfg <<EOF
DEFAULT gentoo
PROMPT 0
TIMEOUT 0
LABEL gentoo
LINUX ../vmlinuz-gentoo
APPEND initrd=initramfs.img $(get_cmdline)
EOF
}
install_kernel() {

View File

@ -116,17 +116,31 @@ download() {
wget --quiet --https-only --secure-protocol=PFS --show-progress -O "$2" -- "$1"
}
get_blkid_field_by_device() {
local blkid_field="$1"
local device="$2"
blkid -g \
|| die "Error while executing blkid -g"
local val
val="$(blkid -o export "$device")" \
|| die "Error while executing blkid '$device'"
val="$(grep -- "$blkid_field" <<< "$val")" \
|| die "Could not find $blkid_field=... in blkid output"
val="${val#"$blkid_field="}"
echo -n "$val"
}
get_device_by_blkid_field() {
local blkid_field="$1"
local field_value="$2"
blkid -g \
|| die "Error while executing blkid"
|| die "Error while executing blkid -g"
local dev
dev="$(blkid -o export -t "$blkid_field=$field_value")" \
|| die "Error while executing blkid to find $blkid_field=$field_value"
dev="$(grep DEVNAME <<< "$dev")" \
|| die "Could not find DEVNAME=... in blkid output"
dev="${dev:8}"
dev="${dev#"DEVNAME="}"
echo -n "$dev"
}
@ -150,10 +164,15 @@ get_device_by_ptuuid() {
echo -n "$dev"
}
get_device_by_mdadm_uuid() {
uuid_to_mduuid() {
local mduuid="${1,,}"
mduuid="${mduuid//-/}"
mduuid="${mduuid:0:8}:${mduuid:8:8}:${mduuid:16:8}:${mduuid:24:8}"
echo -n "$mduuid"
}
get_device_by_mdadm_uuid() {
local mduuid="$(uuid_to_mduuid "$1")"
local dev
dev="$(mdadm --examine --scan)" \
|| die "Error while executing mdadm to find array with UUID=$mduuid"