Files
snapd/boot/booted_kernel_partition_linux.go
Ian Johnson 8f6646eb0e boot/booted_kernel_partition_linux.go: add TODO about using lk bloader param
The littlekernel bootloader will need to inform us of what disk to find
partitions on for littlekernel bootloader environment modifications, so we can
possibly use that information to determine which disk we booted the kernel off
of too.

Signed-off-by: Ian Johnson <ian.johnson@canonical.com>
2020-11-19 17:45:02 -06:00

57 lines
1.8 KiB
Go

// -*- Mode: Go; indent-tabs-mode: t -*-
/*
* Copyright (C) 2020 Canonical Ltd
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package boot
import (
"fmt"
"strings"
"github.com/snapcore/snapd/bootloader/efi"
)
const (
// note the vendor ID 4a67b082-0a4c-41cf-b6c7-440b29bb8c4f is systemd, this
// variable is populated by shim
loaderDevicePartUUID = "LoaderDevicePartUUID-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f"
)
// FindPartitionUUIDForBootedKernelDisk returns the partition uuid for the
// partition that the booted kernel is located on.
func FindPartitionUUIDForBootedKernelDisk() (string, error) {
// try efi variables first
partuuid, _, err := efi.ReadVarString(loaderDevicePartUUID)
if err == nil {
// the LoaderDevicePartUUID is in all caps, but lsblk,
// etc. use lower case so for consistency just make it
// lower case here too
return strings.ToLower(partuuid), nil
}
if err == efi.ErrNoEFISystem {
return "", err
}
// TODO:UC20: use the kernel command line parameter from the little kernel
// bootloader if we have a littlekernel bootloader
// TODO:UC20: add more fallbacks here, even on amd64, when we don't have efi
// i.e. on bios?
return "", fmt.Errorf("could not find partition uuid for booted kernel: %v", err)
}