Files
clr-installer/kernel/kernel.go
John Akre 439542e7e4 Support loading configs from chroot
To support offline installs, the bundles listed in the default and
kernel configs from within the installer image must be known. This
change adds functions to read these config files from within a chroot
which can be used to read the config files within the installer image.

Signed-off-by: John Akre <john.w.akre@intel.com>
2019-09-23 16:08:10 -07:00

90 lines
2.1 KiB
Go

// Copyright © 2018 Intel Corporation
//
// SPDX-License-Identifier: GPL-3.0-only
package kernel
import (
"encoding/json"
"io/ioutil"
"github.com/clearlinux/clr-installer/conf"
"github.com/clearlinux/clr-installer/errors"
)
// Kernel describes a linux kernel to be installed
type Kernel struct {
Bundle string // Bundle is the bundle name containing this kernel
Name string // Name the bundle name for a given kernel
Desc string // Desc is the kernel description
userDefined bool
}
// Arguments defines the set of arguments to be added and/or removed
// from the list of kernel comand line arguments
type Arguments struct {
Add []string // Add is the set of arguments to be added
Remove []string // Remove is the set of arguments to be removed
}
// LoadKernelList loads the kernel definitions
func LoadKernelList() ([]*Kernel, error) {
return LoadKernelListChroot("")
}
// LoadKernelListChroot loads the kernel definitions within the specified chroot
func LoadKernelListChroot(pathPrefix string) ([]*Kernel, error) {
path, err := conf.LookupDefaultChrootKernels(pathPrefix)
if err != nil {
return nil, err
}
root := struct {
Kernels []*Kernel `json:"kernels"`
}{}
data, err := ioutil.ReadFile(path)
if err != nil {
return nil, errors.Wrap(err)
}
if err = json.Unmarshal(data, &root); err != nil {
return nil, errors.Wrap(err)
}
return root.Kernels, nil
}
// IsUserDefined returns true if the configuration was interactively
// defined by the user
func (k *Kernel) IsUserDefined() bool {
return k.userDefined
}
// MarshalYAML marshals Kernel into YAML format
func (k *Kernel) MarshalYAML() (interface{}, error) {
return k.Bundle, nil
}
// UnmarshalYAML unmarshals Kernel from YAML format
func (k *Kernel) UnmarshalYAML(unmarshal func(interface{}) error) error {
var bundle string
if err := unmarshal(&bundle); err != nil {
return err
}
k.Bundle = bundle
k.userDefined = false
return nil
}
// Equals compares tow Kernels instances
func (k *Kernel) Equals(comp *Kernel) bool {
if comp == nil {
return false
}
return k.Bundle == comp.Bundle
}