// mountOEM waits for the presence of and mounts the oem partition at oemMountPath. func mountOEM(l *log.Logger) error { dev := []string{oemDevicePath} if err := systemd.WaitOnDevices(dev, "oem-cmdline"); err != nil { l.Err("failed to wait for oem device: %v", err) return err } if err := os.MkdirAll(oemMountPath, 0700); err != nil { l.Err("failed to create oem mount point: %v", err) return err } if err := l.LogOp( func() error { return syscall.Mount(dev[0], oemMountPath, "ext4", 0, "") }, "mounting %q at %q", oemDevicePath, oemMountPath, ); err != nil { return fmt.Errorf("failed to mount device %q at %q: %v", oemDevicePath, oemMountPath, err) } return nil }
func RenderFile(l *log.Logger, f types.File) *File { var contents []byte var err error fetch := func() error { contents, err = util.FetchResource(l, url.URL(f.Contents.Source)) return err } validate := func() error { return util.AssertValid(f.Contents.Verification, contents) } decompress := func() error { contents, err = decompressFile(l, f, contents) return err } if l.LogOp(fetch, "fetching file %q", f.Path) != nil { return nil } if l.LogOp(validate, "validating file contents") != nil { return nil } if l.LogOp(decompress, "decompressing file contents") != nil { return nil } return &File{ Path: f.Path, Contents: []byte(contents), Mode: os.FileMode(f.Mode), Uid: f.User.Id, Gid: f.Group.Id, } }
// umountOEM unmounts the oem partition at oemMountPath. func umountOEM(l *log.Logger) { l.LogOp( func() error { return syscall.Unmount(oemMountPath, 0) }, "unmounting %q", oemMountPath, ) }