1448 use yip (#135)

Co-authored-by: Mauro Morales <mauro.morales@spectrocloud.com>
Co-authored-by: Itxaka <itxaka.garcia@spectrocloud.com>
This commit is contained in:
Dimitris Karakasilis 2023-07-04 15:52:26 +03:00 committed by GitHub
parent 62831b8ecf
commit 13b06d9e35
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 38 additions and 1552 deletions

View File

@ -25,7 +25,7 @@ install() {
inst_multiple immucore
inst_multiple kairos-agent
# add utils used by yip stages
inst_multiple partprobe sync udevadm parted mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.vfat mkfs.fat blkid e2fsck resize2fs mount umount sgdisk rsync cryptsetup
inst_multiple partprobe sync udevadm parted mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.vfat mkfs.fat blkid lsblk e2fsck resize2fs mount umount sgdisk rsync cryptsetup
# missing mkfs.xfs xfs_growfs in image?
inst_script "${moddir}/generator.sh" "${systemdutildir}/system-generators/immucore-generator"
# SERVICES FOR SYSTEMD-BASED SYSTEMS

53
go.mod
View File

@ -2,16 +2,6 @@ module github.com/kairos-io/immucore
go 1.20
// replace any upstream elemental dep with our own
replace github.com/rancher/elemental-cli v0.2.1 => github.com/kairos-io/elemental-cli v0.1.0
replace github.com/rancher/elemental-cli v0.2.0 => github.com/kairos-io/elemental-cli v0.1.0
// Until yip is fixed, replace with an older known working version
replace github.com/mudler/yip v1.0.0 => github.com/mudler/yip v0.11.5-0.20230124143654-91e88dfb6648
replace github.com/mudler/yip v1.0.1 => github.com/mudler/yip v0.11.5-0.20230124143654-91e88dfb6648
require (
github.com/avast/retry-go v3.0.0+incompatible
github.com/containerd/containerd v1.6.19
@ -24,16 +14,15 @@ require (
github.com/kairos-io/kcrypt v0.6.0
github.com/moby/sys/mountinfo v0.6.2
github.com/mudler/go-kdetect v0.0.0-20210802130128-dd92e121bed8
github.com/mudler/yip v1.0.0
github.com/mudler/yip v1.3.1-0.20230704124832-e5812d0f5890
github.com/onsi/ginkgo/v2 v2.9.4
github.com/onsi/gomega v1.27.6
github.com/rancher/elemental-cli v0.2.0
github.com/rs/zerolog v1.29.1
github.com/sirupsen/logrus v1.9.0
github.com/spectrocloud-labs/herd v0.4.2
github.com/twpayne/go-vfs v1.7.2
github.com/urfave/cli/v2 v2.25.1
golang.org/x/sys v0.7.0
golang.org/x/sys v0.8.0
gopkg.in/yaml.v3 v3.0.1
)
@ -46,7 +35,6 @@ require (
github.com/Microsoft/go-winio v0.6.0 // indirect
github.com/Microsoft/hcsshim v0.9.7 // indirect
github.com/ProtonMail/go-crypto v0.0.0-20230117203413-a47887b8f098 // indirect
github.com/Sabayon/pkgs-checker v0.8.4 // indirect
github.com/StackExchange/wmi v1.2.1 // indirect
github.com/acomagu/bufpipe v1.0.3 // indirect
github.com/anatol/devmapper.go v0.0.0-20220907161421-ba4de5fc0fd1 // indirect
@ -58,16 +46,9 @@ require (
github.com/containerd/cgroups v1.0.4 // indirect
github.com/containerd/console v1.0.3 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
github.com/crillab/gophersat v1.3.2-0.20210701121804-72b19f5b6b38 // indirect
github.com/davidcassany/linuxkit/pkg/metadata v0.0.0-20230124104020-93ac9dd5b8e1 // indirect
github.com/denisbrodbeck/machineid v1.0.1 // indirect
github.com/dgryski/go-camellia v0.0.0-20191119043421-69a8a13fb23d // indirect
github.com/diskfs/go-diskfs v1.2.1-0.20230123115902-fce1828bbbfa // indirect
github.com/distribution/distribution v2.8.1+incompatible // indirect
github.com/docker/distribution v2.8.0+incompatible // indirect
github.com/docker/docker v20.10.23+incompatible // indirect
github.com/docker/go-units v0.5.0 // indirect
github.com/docker/libnetwork v0.8.0-dev.2.0.20200917202933-d0951081b35f // indirect
github.com/diskfs/go-diskfs v1.3.0 // indirect
github.com/emirpasic/gods v1.18.1 // indirect
github.com/ghodss/yaml v1.0.0 // indirect
github.com/go-git/gcfg v1.5.0 // indirect
@ -80,44 +61,31 @@ require (
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/google/go-cmp v0.5.9 // indirect
github.com/google/pprof v0.0.0-20230228050547-1710fef4ab10 // indirect
github.com/google/renameio v1.0.0 // indirect
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
github.com/google/uuid v1.3.0 // indirect
github.com/gookit/color v1.5.3 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-version v1.3.0 // indirect
github.com/huandu/xstrings v1.4.0 // indirect
github.com/imdario/mergo v0.3.15 // indirect
github.com/ishidawataru/sctp v0.0.0-20210707070123-9a39160e9062 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/itchyny/gojq v0.12.12 // indirect
github.com/itchyny/timefmt-go v0.1.5 // indirect
github.com/jaypipes/pcidb v1.0.0 // indirect
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
github.com/jinzhu/copier v0.0.0-20180308034124-7e38e58719c3 // indirect
github.com/kairos-io/kairos v1.24.3-56.0.20230329142538-b6ae4b58c07d // indirect
github.com/kendru/darwin/go/depgraph v0.0.0-20221105232959-877d6a81060c // indirect
github.com/kevinburke/ssh_config v1.2.0 // indirect
github.com/knqyf263/go-deb-version v0.0.0-20190517075300-09fca494f03d // indirect
github.com/lithammer/fuzzysearch v1.1.5 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.17 // indirect
github.com/mattn/go-runewidth v0.0.14 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
github.com/mitchellh/go-homedir v1.1.0 // indirect
github.com/mitchellh/hashstructure/v2 v2.0.2 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/moby/libnetwork v0.8.0-dev.2.0.20200612180813-9e99af28df21 // indirect
github.com/moby/moby v20.10.9+incompatible // indirect
github.com/moby/sys/mount v0.3.0 // indirect
github.com/moby/moby v23.0.2+incompatible // indirect
github.com/mudler/entities v0.0.0-20220905203055-68348bae0f49 // indirect
github.com/mudler/go-pluggable v0.0.0-20230126220627-7710299a0ae5 // indirect
github.com/mudler/luet v0.0.0-20230117111542-5d3751888844 // indirect
github.com/mudler/topsort v0.0.0-20201103161459-db5c7901c290 // indirect
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799 // indirect
github.com/opencontainers/runc v1.1.2 // indirect
github.com/otiai10/copy v1.9.0 // indirect
github.com/packethost/packngo v0.29.0 // indirect
github.com/phayes/permbits v0.0.0-20190612203442-39d7c581d2ee // indirect
github.com/pierrec/lz4 v2.6.1+incompatible // indirect
@ -126,6 +94,7 @@ require (
github.com/pkg/xattr v0.4.9 // indirect
github.com/pterm/pterm v0.12.59 // indirect
github.com/qeesung/image2ascii v1.0.1 // indirect
github.com/rancher-sandbox/linuxkit v1.0.1-0.20230517173613-432a87ba3e09 // indirect
github.com/rivo/uniseg v0.4.4 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/samber/lo v1.37.0 // indirect
@ -133,19 +102,20 @@ require (
github.com/sergi/go-diff v1.3.1 // indirect
github.com/shopspring/decimal v1.3.1 // indirect
github.com/spf13/cast v1.5.0 // indirect
github.com/spf13/cobra v1.7.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/tredoe/osutil/v2 v2.0.0-rc.16 // indirect
github.com/ulikunitz/xz v0.5.11 // indirect
github.com/urfave/cli v1.22.12 // indirect
github.com/vishvananda/netlink v1.2.1-beta.2 // indirect
github.com/vishvananda/netns v0.0.4 // indirect
github.com/vmware/vmw-guestinfo v0.0.0-20220317130741-510905f0efa3 // indirect
github.com/wayneashleyberry/terminal-dimensions v1.1.0 // indirect
github.com/willdonnelly/passwd v0.0.0-20141013001024-7935dab3074c // indirect
github.com/xanzy/ssh-agent v0.3.1 // indirect
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect
github.com/zcalusic/sysinfo v0.9.5 // indirect
github.com/zloylos/grsync v1.6.1 // indirect
go.opencensus.io v0.23.0 // indirect
go.opencensus.io v0.24.0 // indirect
golang.org/x/crypto v0.7.0 // indirect
golang.org/x/exp v0.0.0-20220916125017-b168a2c6b86b // indirect
golang.org/x/mod v0.10.0 // indirect
@ -159,9 +129,6 @@ require (
gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
howett.net/plist v1.0.0 // indirect
k8s.io/klog/v2 v2.30.0 // indirect
k8s.io/mount-utils v0.23.0 // indirect
k8s.io/utils v0.0.0-20211116205334-6203023598ed // indirect
pault.ag/go/modprobe v0.1.2 // indirect
pault.ag/go/topsort v0.1.1 // indirect
)

1423
go.sum

File diff suppressed because it is too large Load Diff

View File

@ -44,7 +44,7 @@ func NewYipExecutor(l logger.Interface) executor.Executor {
plugins.Environment,
plugins.SystemdFirstboot,
plugins.DataSources,
YipLayoutPlugin,
plugins.Layout,
),
)
return exec
@ -56,7 +56,12 @@ func RunStage(stage string) (bytes.Buffer, error) {
var buffer bytes.Buffer
log := logrus.New()
log.SetOutput(&buffer)
log.SetLevel(logrus.InfoLevel)
// Set debug logger
debug := len(ReadCMDLineArg("rd.immucore.debug")) > 0
debugFromEnv := os.Getenv("IMMUCORE_DEBUG") != ""
if debug || debugFromEnv {
log.SetLevel(logrus.DebugLevel)
}
yip := NewYipExecutor(log)
c := ImmucoreConsole{}

View File

@ -10,11 +10,8 @@ import (
"time"
"github.com/avast/retry-go"
"github.com/jaypipes/ghw"
"github.com/jaypipes/ghw/pkg/block"
"github.com/joho/godotenv"
"github.com/kairos-io/kairos-sdk/state"
"github.com/kairos-io/kairos-sdk/utils"
)
// BootStateToLabelDevice lets us know the device we need to mount sysroot on based on labels.
@ -236,23 +233,3 @@ func GetHostProcCmdline() string {
}
return proc
}
// GetPartByLabel will identify the device by a given label.
func GetPartByLabel(label string, attempts int) (string, error) {
for tries := 0; tries < attempts; tries++ {
_, _ = utils.SH("udevadm settle")
blockDevices, err := block.New(ghw.WithDisableTools(), ghw.WithDisableWarnings())
if err != nil {
return "", err
}
for _, d := range blockDevices.Disks {
for _, part := range d.Partitions {
if part.FilesystemLabel == label {
return filepath.Join("/dev/", part.Name), nil
}
}
}
time.Sleep(1 * time.Second)
}
return "", errors.New("no device found")
}

View File

@ -1,80 +0,0 @@
package utils
import (
"errors"
"fmt"
"strings"
"github.com/kairos-io/immucore/internal/constants"
"github.com/mudler/yip/pkg/logger"
"github.com/mudler/yip/pkg/plugins"
"github.com/mudler/yip/pkg/schema"
"github.com/rancher/elemental-cli/pkg/partitioner"
"github.com/twpayne/go-vfs"
)
// YipLayoutPlugin is the immucore implementation of Layout yip's plugin based
// on partitioner package.
func YipLayoutPlugin(l logger.Interface, s schema.Stage, _ vfs.FS, _ plugins.Console) (err error) {
if s.Layout.Device == nil {
return nil
}
var dev *partitioner.Disk
if len(strings.TrimSpace(s.Layout.Device.Label)) > 0 {
partDevice, err := GetPartByLabel(s.Layout.Device.Label, 5)
if err != nil {
l.Errorf("Exiting, disk not found:\n %s", err.Error())
return err
}
dev = partitioner.NewDisk(
partDevice,
)
} else if len(strings.TrimSpace(s.Layout.Device.Path)) > 0 {
dev = partitioner.NewDisk(
s.Layout.Device.Path,
)
} else {
l.Warnf("No target device defined, nothing to do")
return nil
}
if !dev.Exists() {
l.Errorf("Exiting, disk not found:\n %s", s.Layout.Device.Path)
return errors.New("target disk not found")
}
if s.Layout.Expand != nil {
l.Infof("Extending last partition up to %d MiB", s.Layout.Expand.Size)
out, err := dev.ExpandLastPartition(s.Layout.Expand.Size)
if err != nil {
l.Error(out)
return err
}
}
for _, part := range s.Layout.Parts {
_, err := GetPartByLabel(part.FSLabel, 1)
if err == nil {
l.Warnf("Partition with FSLabel: %s already exists, ignoring", part.FSLabel)
continue
}
// Set default filesystem
if part.FileSystem == "" {
part.FileSystem = constants.LinuxFs
}
l.Infof("Creating %s partition", part.FSLabel)
partNum, err := dev.AddPartition(part.Size, part.FileSystem, part.PLabel)
if err != nil {
return fmt.Errorf("Failed creating partitions: %w", err)
}
out, err := dev.FormatPartition(partNum, part.FileSystem, part.FSLabel)
if err != nil {
return fmt.Errorf("Formatting partition failed: %s\nError: %w", out, err)
}
}
return nil
}