distro/rhel84: use a random uuid for XFS partition
Imagine this situation: You have a RHEL system booted from an image produced
by osbuild-composer. On this system, you want to use osbuild-composer to
create another image of RHEL.
However, there's currently something funny with partitions:
All RHEL images built by osbuild-composer contain a root xfs partition. The
interesting bit is that they all share the same xfs partition UUID. This might
sound like a good thing for reproducibility but it has a quirk.
The issue appears when osbuild runs the qemu assembler: it needs to mount all
partitions of the future image to copy the OS tree into it.
Imagine that osbuild-composer is running on a system booted from an imaged
produced by osbuild-composer. This means that its root xfs partition has this
uuid:
efe8afea-c0a8-45dc-8e6e-499279f6fa5d
When osbuild-composer builds an image on this system, it runs osbuild that
runs the qemu assembler at some point. As I said previously, it will mount
all partitions of the future image. That means that it will also try to
mount the root xfs partition with this uuid:
efe8afea-c0a8-45dc-8e6e-499279f6fa5d
Do you remember this one? Yeah, it's the same one as before. However, the xfs
kernel driver doesn't like that. It contains a global table[1] of all xfs
partitions that forbids to mount 2 xfs partitions with the same uuid.
I mean... uuids are meant to be unique, right?
This commit changes the way we build RHEL 8.4 images: Each one now has a
unique uuid. It's now literally a unique universally unique identifier. haha
[1]: a349e4c659/fs/xfs/xfs_mount.c (L51)
This commit is contained in:
parent
ae0d1b8663
commit
973639d372
23 changed files with 150 additions and 114 deletions
|
|
@ -44,6 +44,8 @@ type rpmMD struct {
|
|||
func main() {
|
||||
var rpmmdArg bool
|
||||
flag.BoolVar(&rpmmdArg, "rpmmd", false, "output rpmmd struct instead of pipeline manifest")
|
||||
var seedArg int64
|
||||
flag.Int64Var(&seedArg, "seed", 0, "seed for generating manifests (default: 0)")
|
||||
flag.Parse()
|
||||
|
||||
// Path to composeRequet or '-' for stdin
|
||||
|
|
@ -152,7 +154,8 @@ func main() {
|
|||
},
|
||||
repos,
|
||||
packageSpecs,
|
||||
buildPackageSpecs)
|
||||
buildPackageSpecs,
|
||||
seedArg)
|
||||
if err != nil {
|
||||
panic(err.Error())
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ func getManifest(bp blueprint.Blueprint, t distro.ImageType, a distro.Arch, d di
|
|||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
manifest, err := t.Manifest(bp.Customizations, distro.ImageOptions{}, repos, pkgs, buildPkgs)
|
||||
manifest, err := t.Manifest(bp.Customizations, distro.ImageOptions{}, repos, pkgs, buildPkgs, 0)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ package cloudapi
|
|||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"net/http"
|
||||
|
||||
"github.com/go-chi/chi"
|
||||
|
|
@ -81,6 +82,9 @@ func (server *Server) Compose(w http.ResponseWriter, r *http.Request) {
|
|||
imageRequests := make([]imageRequest, len(request.ImageRequests))
|
||||
var targets []*target.Target
|
||||
|
||||
// use the same seed for all images so we get the same IDs
|
||||
manifestSeed := rand.Int63()
|
||||
|
||||
for i, ir := range request.ImageRequests {
|
||||
arch, err := distribution.GetArch(ir.Architecture)
|
||||
if err != nil {
|
||||
|
|
@ -139,7 +143,7 @@ func (server *Server) Compose(w http.ResponseWriter, r *http.Request) {
|
|||
}
|
||||
}
|
||||
|
||||
manifest, err := imageType.Manifest(nil, imageOptions, repositories, packages, buildPackages)
|
||||
manifest, err := imageType.Manifest(nil, imageOptions, repositories, packages, buildPackages, manifestSeed)
|
||||
if err != nil {
|
||||
http.Error(w, fmt.Sprintf("Failed to get manifest for for %s/%s/%s: %s", ir.ImageType, ir.Architecture, request.Distribution, err), http.StatusBadRequest)
|
||||
return
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ type ImageType interface {
|
|||
// Returns an osbuild manifest, containing the sources and pipeline necessary
|
||||
// to build an image, given output format with all packages and customizations
|
||||
// specified in the given blueprint.
|
||||
Manifest(b *blueprint.Customizations, options ImageOptions, repos []rpmmd.RepoConfig, packageSpecs, buildPackageSpecs []rpmmd.PackageSpec) (Manifest, error)
|
||||
Manifest(b *blueprint.Customizations, options ImageOptions, repos []rpmmd.RepoConfig, packageSpecs, buildPackageSpecs []rpmmd.PackageSpec, seed int64) (Manifest, error)
|
||||
}
|
||||
|
||||
// The ImageOptions specify options for a specific image build
|
||||
|
|
|
|||
|
|
@ -16,6 +16,8 @@ import (
|
|||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
const RandomTestSeed = 0
|
||||
|
||||
func TestDistro_Manifest(t *testing.T, pipelinePath string, prefix string, distros ...distro.Distro) {
|
||||
assert := assert.New(t)
|
||||
fileNames, err := filepath.Glob(filepath.Join(pipelinePath, prefix))
|
||||
|
|
@ -89,7 +91,8 @@ func TestDistro_Manifest(t *testing.T, pipelinePath string, prefix string, distr
|
|||
},
|
||||
repos,
|
||||
tt.RpmMD.Packages,
|
||||
tt.RpmMD.BuildPackages)
|
||||
tt.RpmMD.BuildPackages,
|
||||
RandomTestSeed)
|
||||
|
||||
if (err == nil && tt.Manifest == nil) || (err != nil && tt.Manifest != nil) {
|
||||
t.Errorf("distro.Manifest() error = %v", err)
|
||||
|
|
|
|||
|
|
@ -183,7 +183,8 @@ func (t *imageType) Manifest(c *blueprint.Customizations,
|
|||
options distro.ImageOptions,
|
||||
repos []rpmmd.RepoConfig,
|
||||
packageSpecs,
|
||||
buildPackageSpecs []rpmmd.PackageSpec) (distro.Manifest, error) {
|
||||
buildPackageSpecs []rpmmd.PackageSpec,
|
||||
seed int64) (distro.Manifest, error) {
|
||||
pipeline, err := t.pipeline(c, options, repos, packageSpecs, buildPackageSpecs)
|
||||
if err != nil {
|
||||
return distro.Manifest{}, err
|
||||
|
|
|
|||
|
|
@ -183,7 +183,8 @@ func (t *imageType) Manifest(c *blueprint.Customizations,
|
|||
options distro.ImageOptions,
|
||||
repos []rpmmd.RepoConfig,
|
||||
packageSpecs,
|
||||
buildPackageSpecs []rpmmd.PackageSpec) (distro.Manifest, error) {
|
||||
buildPackageSpecs []rpmmd.PackageSpec,
|
||||
seed int64) (distro.Manifest, error) {
|
||||
pipeline, err := t.pipeline(c, options, repos, packageSpecs, buildPackageSpecs)
|
||||
if err != nil {
|
||||
return distro.Manifest{}, err
|
||||
|
|
|
|||
|
|
@ -95,7 +95,8 @@ func (t *imageType) Manifest(c *blueprint.Customizations,
|
|||
options distro.ImageOptions,
|
||||
repos []rpmmd.RepoConfig,
|
||||
packageSpecs,
|
||||
buildPackageSpecs []rpmmd.PackageSpec) (distro.Manifest, error) {
|
||||
buildPackageSpecs []rpmmd.PackageSpec,
|
||||
seed int64) (distro.Manifest, error) {
|
||||
|
||||
return json.Marshal(
|
||||
osbuild.Manifest{
|
||||
|
|
|
|||
|
|
@ -185,7 +185,8 @@ func (t *imageType) Manifest(c *blueprint.Customizations,
|
|||
options distro.ImageOptions,
|
||||
repos []rpmmd.RepoConfig,
|
||||
packageSpecs,
|
||||
buildPackageSpecs []rpmmd.PackageSpec) (distro.Manifest, error) {
|
||||
buildPackageSpecs []rpmmd.PackageSpec,
|
||||
seed int64) (distro.Manifest, error) {
|
||||
pipeline, err := t.pipeline(c, options, repos, packageSpecs, buildPackageSpecs)
|
||||
if err != nil {
|
||||
return distro.Manifest{}, err
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@ import (
|
|||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"math/rand"
|
||||
"sort"
|
||||
|
||||
"github.com/osbuild/osbuild-composer/internal/disk"
|
||||
|
|
@ -50,7 +52,7 @@ type imageType struct {
|
|||
bootable bool
|
||||
rpmOstree bool
|
||||
defaultSize uint64
|
||||
partitionTableGenerator func(imageOptions distro.ImageOptions, arch distro.Arch) disk.PartitionTable
|
||||
partitionTableGenerator func(imageOptions distro.ImageOptions, arch distro.Arch, rng *rand.Rand) disk.PartitionTable
|
||||
assembler func(pt *disk.PartitionTable, options distro.ImageOptions, arch distro.Arch) *osbuild.Assembler
|
||||
}
|
||||
|
||||
|
|
@ -188,8 +190,11 @@ func (t *imageType) Manifest(c *blueprint.Customizations,
|
|||
options distro.ImageOptions,
|
||||
repos []rpmmd.RepoConfig,
|
||||
packageSpecs,
|
||||
buildPackageSpecs []rpmmd.PackageSpec) (distro.Manifest, error) {
|
||||
pipeline, err := t.pipeline(c, options, repos, packageSpecs, buildPackageSpecs)
|
||||
buildPackageSpecs []rpmmd.PackageSpec,
|
||||
seed int64) (distro.Manifest, error) {
|
||||
source := rand.NewSource(seed)
|
||||
rng := rand.New(source)
|
||||
pipeline, err := t.pipeline(c, options, repos, packageSpecs, buildPackageSpecs, rng)
|
||||
if err != nil {
|
||||
return distro.Manifest{}, err
|
||||
}
|
||||
|
|
@ -230,10 +235,10 @@ func sources(packages []rpmmd.PackageSpec) *osbuild.Sources {
|
|||
}
|
||||
}
|
||||
|
||||
func (t *imageType) pipeline(c *blueprint.Customizations, options distro.ImageOptions, repos []rpmmd.RepoConfig, packageSpecs, buildPackageSpecs []rpmmd.PackageSpec) (*osbuild.Pipeline, error) {
|
||||
func (t *imageType) pipeline(c *blueprint.Customizations, options distro.ImageOptions, repos []rpmmd.RepoConfig, packageSpecs, buildPackageSpecs []rpmmd.PackageSpec, rng *rand.Rand) (*osbuild.Pipeline, error) {
|
||||
var pt *disk.PartitionTable
|
||||
if t.partitionTableGenerator != nil {
|
||||
table := t.partitionTableGenerator(options, t.arch)
|
||||
table := t.partitionTableGenerator(options, t.arch, rng)
|
||||
pt = &table
|
||||
}
|
||||
|
||||
|
|
@ -497,7 +502,7 @@ func (t *imageType) selinuxStageOptions() *osbuild.SELinuxStageOptions {
|
|||
}
|
||||
}
|
||||
|
||||
func defaultPartitionTable(imageOptions distro.ImageOptions, arch distro.Arch) disk.PartitionTable {
|
||||
func defaultPartitionTable(imageOptions distro.ImageOptions, arch distro.Arch, rng *rand.Rand) disk.PartitionTable {
|
||||
if arch.Name() == "x86_64" {
|
||||
return disk.PartitionTable{
|
||||
Size: imageOptions.Size,
|
||||
|
|
@ -531,7 +536,7 @@ func defaultPartitionTable(imageOptions distro.ImageOptions, arch distro.Arch) d
|
|||
UUID: "6264D520-3FB9-423F-8AB8-7A0A8E3D3562",
|
||||
Filesystem: &disk.Filesystem{
|
||||
Type: "xfs",
|
||||
UUID: "efe8afea-c0a8-45dc-8e6e-499279f6fa5d",
|
||||
UUID: uuid.Must(newRandomUUIDFromReader(rng)).String(),
|
||||
Label: "root",
|
||||
Mountpoint: "/",
|
||||
FSTabOptions: "defaults",
|
||||
|
|
@ -567,7 +572,7 @@ func defaultPartitionTable(imageOptions distro.ImageOptions, arch distro.Arch) d
|
|||
UUID: "6264D520-3FB9-423F-8AB8-7A0A8E3D3562",
|
||||
Filesystem: &disk.Filesystem{
|
||||
Type: "xfs",
|
||||
UUID: "efe8afea-c0a8-45dc-8e6e-499279f6fa5d",
|
||||
UUID: uuid.Must(newRandomUUIDFromReader(rng)).String(),
|
||||
Label: "root",
|
||||
Mountpoint: "/",
|
||||
FSTabOptions: "defaults",
|
||||
|
|
@ -592,7 +597,7 @@ func defaultPartitionTable(imageOptions distro.ImageOptions, arch distro.Arch) d
|
|||
Start: 10240,
|
||||
Filesystem: &disk.Filesystem{
|
||||
Type: "xfs",
|
||||
UUID: "efe8afea-c0a8-45dc-8e6e-499279f6fa5d",
|
||||
UUID: uuid.Must(newRandomUUIDFromReader(rng)).String(),
|
||||
Mountpoint: "/",
|
||||
FSTabOptions: "defaults",
|
||||
FSTabFreq: 0,
|
||||
|
|
@ -612,7 +617,7 @@ func defaultPartitionTable(imageOptions distro.ImageOptions, arch distro.Arch) d
|
|||
Bootable: true,
|
||||
Filesystem: &disk.Filesystem{
|
||||
Type: "xfs",
|
||||
UUID: "efe8afea-c0a8-45dc-8e6e-499279f6fa5d",
|
||||
UUID: uuid.Must(newRandomUUIDFromReader(rng)).String(),
|
||||
Mountpoint: "/",
|
||||
FSTabOptions: "defaults",
|
||||
FSTabFreq: 0,
|
||||
|
|
@ -673,6 +678,17 @@ func ostreeCommitAssembler(options distro.ImageOptions, arch distro.Arch) *osbui
|
|||
)
|
||||
}
|
||||
|
||||
func newRandomUUIDFromReader(r io.Reader) (uuid.UUID, error) {
|
||||
var id uuid.UUID
|
||||
_, err := io.ReadFull(r, id[:])
|
||||
if err != nil {
|
||||
return uuid.Nil, err
|
||||
}
|
||||
id[6] = (id[6] & 0x0f) | 0x40 // Version 4
|
||||
id[8] = (id[8] & 0x3f) | 0x80 // Variant is 10
|
||||
return id, nil
|
||||
}
|
||||
|
||||
// New creates a new distro object, defining the supported architectures and image types
|
||||
func New() distro.Distro {
|
||||
const GigaByte = 1024 * 1024 * 1024
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ func (t *TestImageType) BuildPackages() []string {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (t *TestImageType) Manifest(b *blueprint.Customizations, options distro.ImageOptions, repos []rpmmd.RepoConfig, packageSpecs, buildPackageSpecs []rpmmd.PackageSpec) (distro.Manifest, error) {
|
||||
func (t *TestImageType) Manifest(b *blueprint.Customizations, options distro.ImageOptions, repos []rpmmd.RepoConfig, packageSpecs, buildPackageSpecs []rpmmd.PackageSpec, seed int64) (distro.Manifest, error) {
|
||||
return json.Marshal(
|
||||
osbuild.Manifest{
|
||||
Sources: osbuild.Sources{},
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import (
|
|||
"encoding/json"
|
||||
"fmt"
|
||||
"log"
|
||||
"math/rand"
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
|
|
@ -87,6 +88,9 @@ func (h *apiHandlers) PostCompose(ctx echo.Context) error {
|
|||
kojiFilenames := make([]string, len(request.ImageRequests))
|
||||
kojiDirectory := "osbuild-composer-koji-" + uuid.New().String()
|
||||
|
||||
// use the same seed for all images so we get the same IDs
|
||||
manifestSeed := rand.Int63()
|
||||
|
||||
for i, ir := range request.ImageRequests {
|
||||
arch, err := d.GetArch(ir.Architecture)
|
||||
if err != nil {
|
||||
|
|
@ -119,7 +123,7 @@ func (h *apiHandlers) PostCompose(ctx echo.Context) error {
|
|||
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Failed to depsolve build packages for %s/%s/%s: %s", ir.ImageType, ir.Architecture, request.Distribution, err))
|
||||
}
|
||||
|
||||
manifest, err := imageType.Manifest(nil, distro.ImageOptions{Size: imageType.Size(0)}, repositories, packages, buildPackages)
|
||||
manifest, err := imageType.Manifest(nil, distro.ImageOptions{Size: imageType.Size(0)}, repositories, packages, buildPackages, manifestSeed)
|
||||
if err != nil {
|
||||
return echo.NewHTTPError(http.StatusBadGateway, fmt.Sprintf("Failed to get manifest for for %s/%s/%s: %s", ir.ImageType, ir.Architecture, request.Distribution, err))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ func FixtureBase() *Store {
|
|||
if err != nil {
|
||||
panic("invalid image type qcow2 for x86_64 @ fedoratest")
|
||||
}
|
||||
manifest, err := imgType.Manifest(nil, distro.ImageOptions{}, nil, nil, nil)
|
||||
manifest, err := imgType.Manifest(nil, distro.ImageOptions{}, nil, nil, nil, 0)
|
||||
if err != nil {
|
||||
panic("could not create manifest")
|
||||
}
|
||||
|
|
@ -160,7 +160,7 @@ func FixtureFinished() *Store {
|
|||
if err != nil {
|
||||
panic("invalid image type qcow2 for x86_64 @ fedoratest")
|
||||
}
|
||||
manifest, err := imgType.Manifest(nil, distro.ImageOptions{}, nil, nil, nil)
|
||||
manifest, err := imgType.Manifest(nil, distro.ImageOptions{}, nil, nil, nil, 0)
|
||||
if err != nil {
|
||||
panic("could not create manifest")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ func (suite *storeTest) SetupSuite() {
|
|||
suite.myDistro = test_distro.New()
|
||||
suite.myArch, _ = suite.myDistro.GetArch("test_arch")
|
||||
suite.myImageType, _ = suite.myArch.GetImageType("test_type")
|
||||
suite.myManifest, _ = suite.myImageType.Manifest(&suite.myCustomizations, suite.myImageOptions, suite.myRepoConfig, nil, suite.myPackageSpec)
|
||||
suite.myManifest, _ = suite.myImageType.Manifest(&suite.myCustomizations, suite.myImageOptions, suite.myRepoConfig, nil, suite.myPackageSpec, 0)
|
||||
suite.mySourceConfig = SourceConfig{
|
||||
Name: "testSourceConfig",
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import (
|
|||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"math/rand"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/url"
|
||||
|
|
@ -1846,7 +1847,8 @@ func (api *API) composeHandler(writer http.ResponseWriter, request *http.Request
|
|||
},
|
||||
api.allRepositories(),
|
||||
packages,
|
||||
buildPackages)
|
||||
buildPackages,
|
||||
rand.Int63())
|
||||
if err != nil {
|
||||
errors := responseError{
|
||||
ID: "ManifestCreationFailed",
|
||||
|
|
|
|||
|
|
@ -461,7 +461,7 @@ func TestCompose(t *testing.T) {
|
|||
require.NoError(t, err)
|
||||
imgType, err := arch.GetImageType("qcow2")
|
||||
require.NoError(t, err)
|
||||
manifest, err := imgType.Manifest(nil, distro.ImageOptions{}, nil, nil, nil)
|
||||
manifest, err := imgType.Manifest(nil, distro.ImageOptions{}, nil, nil, nil, 0)
|
||||
require.NoError(t, err)
|
||||
expectedComposeLocal := &store.Compose{
|
||||
Blueprint: &blueprint.Blueprint{
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ func TestCreate(t *testing.T) {
|
|||
if err != nil {
|
||||
t.Fatalf("error getting image type from arch")
|
||||
}
|
||||
manifest, err := imageType.Manifest(nil, distro.ImageOptions{Size: imageType.Size(0)}, nil, nil, nil)
|
||||
manifest, err := imageType.Manifest(nil, distro.ImageOptions{Size: imageType.Size(0)}, nil, nil, nil, 0)
|
||||
if err != nil {
|
||||
t.Fatalf("error creating osbuild manifest")
|
||||
}
|
||||
|
|
@ -84,7 +84,7 @@ func TestCancel(t *testing.T) {
|
|||
if err != nil {
|
||||
t.Fatalf("error getting image type from arch")
|
||||
}
|
||||
manifest, err := imageType.Manifest(nil, distro.ImageOptions{Size: imageType.Size(0)}, nil, nil, nil)
|
||||
manifest, err := imageType.Manifest(nil, distro.ImageOptions{Size: imageType.Size(0)}, nil, nil, nil, 0)
|
||||
if err != nil {
|
||||
t.Fatalf("error creating osbuild manifest")
|
||||
}
|
||||
|
|
@ -121,7 +121,7 @@ func TestUpdate(t *testing.T) {
|
|||
if err != nil {
|
||||
t.Fatalf("error getting image type from arch")
|
||||
}
|
||||
manifest, err := imageType.Manifest(nil, distro.ImageOptions{Size: imageType.Size(0)}, nil, nil, nil)
|
||||
manifest, err := imageType.Manifest(nil, distro.ImageOptions{Size: imageType.Size(0)}, nil, nil, nil, 0)
|
||||
if err != nil {
|
||||
t.Fatalf("error creating osbuild manifest")
|
||||
}
|
||||
|
|
@ -152,7 +152,7 @@ func TestUpload(t *testing.T) {
|
|||
if err != nil {
|
||||
t.Fatalf("error getting image type from arch")
|
||||
}
|
||||
manifest, err := imageType.Manifest(nil, distro.ImageOptions{Size: imageType.Size(0)}, nil, nil, nil)
|
||||
manifest, err := imageType.Manifest(nil, distro.ImageOptions{Size: imageType.Size(0)}, nil, nil, nil, 0)
|
||||
if err != nil {
|
||||
t.Fatalf("error creating osbuild manifest")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3065,7 +3065,7 @@
|
|||
"options": {
|
||||
"filesystems": [
|
||||
{
|
||||
"uuid": "efe8afea-c0a8-45dc-8e6e-499279f6fa5d",
|
||||
"uuid": "0194fdc2-fa2f-4cc0-81d3-ff12045b73c8",
|
||||
"vfs_type": "xfs",
|
||||
"path": "/",
|
||||
"options": "defaults"
|
||||
|
|
@ -3083,7 +3083,7 @@
|
|||
{
|
||||
"name": "org.osbuild.grub2",
|
||||
"options": {
|
||||
"root_fs_uuid": "efe8afea-c0a8-45dc-8e6e-499279f6fa5d",
|
||||
"root_fs_uuid": "0194fdc2-fa2f-4cc0-81d3-ff12045b73c8",
|
||||
"kernel_opts": "console=ttyS0,115200n8 console=tty0 net.ifnames=0 rd.blacklist=nouveau nvme_core.io_timeout=4294967295 crashkernel=auto",
|
||||
"legacy": "i386-pc",
|
||||
"uefi": {
|
||||
|
|
@ -3140,7 +3140,7 @@
|
|||
"uuid": "6264D520-3FB9-423F-8AB8-7A0A8E3D3562",
|
||||
"filesystem": {
|
||||
"type": "xfs",
|
||||
"uuid": "efe8afea-c0a8-45dc-8e6e-499279f6fa5d",
|
||||
"uuid": "0194fdc2-fa2f-4cc0-81d3-ff12045b73c8",
|
||||
"label": "root",
|
||||
"mountpoint": "/"
|
||||
}
|
||||
|
|
@ -8589,7 +8589,7 @@
|
|||
},
|
||||
"image-info": {
|
||||
"boot-environment": {
|
||||
"kernelopts": "root=UUID=efe8afea-c0a8-45dc-8e6e-499279f6fa5d console=ttyS0,115200n8 console=tty0 net.ifnames=0 rd.blacklist=nouveau nvme_core.io_timeout=4294967295 crashkernel=auto"
|
||||
"kernelopts": "root=UUID=0194fdc2-fa2f-4cc0-81d3-ff12045b73c8 console=ttyS0,115200n8 console=tty0 net.ifnames=0 rd.blacklist=nouveau nvme_core.io_timeout=4294967295 crashkernel=auto"
|
||||
},
|
||||
"bootloader": "grub",
|
||||
"bootmenu": [
|
||||
|
|
@ -8606,6 +8606,14 @@
|
|||
}
|
||||
],
|
||||
"fstab": [
|
||||
[
|
||||
"UUID=0194fdc2-fa2f-4cc0-81d3-ff12045b73c8",
|
||||
"/",
|
||||
"xfs",
|
||||
"defaults",
|
||||
"0",
|
||||
"0"
|
||||
],
|
||||
[
|
||||
"UUID=7B77-95E7",
|
||||
"/boot/efi",
|
||||
|
|
@ -8613,14 +8621,6 @@
|
|||
"defaults,uid=0,gid=0,umask=077,shortname=winnt",
|
||||
"0",
|
||||
"2"
|
||||
],
|
||||
[
|
||||
"UUID=efe8afea-c0a8-45dc-8e6e-499279f6fa5d",
|
||||
"/",
|
||||
"xfs",
|
||||
"defaults",
|
||||
"0",
|
||||
"0"
|
||||
]
|
||||
],
|
||||
"groups": [
|
||||
|
|
@ -9106,7 +9106,7 @@
|
|||
"size": 6335479296,
|
||||
"start": 106954752,
|
||||
"type": "0FC63DAF-8483-4772-8E79-3D69D8477DE4",
|
||||
"uuid": "efe8afea-c0a8-45dc-8e6e-499279f6fa5d"
|
||||
"uuid": "0194fdc2-fa2f-4cc0-81d3-ff12045b73c8"
|
||||
}
|
||||
],
|
||||
"passwd": [
|
||||
|
|
@ -9218,4 +9218,4 @@
|
|||
],
|
||||
"timezone": "UTC"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3304,7 +3304,7 @@
|
|||
"options": {
|
||||
"filesystems": [
|
||||
{
|
||||
"uuid": "efe8afea-c0a8-45dc-8e6e-499279f6fa5d",
|
||||
"uuid": "0194fdc2-fa2f-4cc0-81d3-ff12045b73c8",
|
||||
"vfs_type": "xfs",
|
||||
"path": "/",
|
||||
"options": "defaults"
|
||||
|
|
@ -3322,7 +3322,7 @@
|
|||
{
|
||||
"name": "org.osbuild.grub2",
|
||||
"options": {
|
||||
"root_fs_uuid": "efe8afea-c0a8-45dc-8e6e-499279f6fa5d",
|
||||
"root_fs_uuid": "0194fdc2-fa2f-4cc0-81d3-ff12045b73c8",
|
||||
"kernel_opts": "ro net.ifnames=0",
|
||||
"legacy": "i386-pc",
|
||||
"uefi": {
|
||||
|
|
@ -3389,7 +3389,7 @@
|
|||
"uuid": "6264D520-3FB9-423F-8AB8-7A0A8E3D3562",
|
||||
"filesystem": {
|
||||
"type": "xfs",
|
||||
"uuid": "efe8afea-c0a8-45dc-8e6e-499279f6fa5d",
|
||||
"uuid": "0194fdc2-fa2f-4cc0-81d3-ff12045b73c8",
|
||||
"label": "root",
|
||||
"mountpoint": "/"
|
||||
}
|
||||
|
|
@ -9171,7 +9171,7 @@
|
|||
},
|
||||
"image-info": {
|
||||
"boot-environment": {
|
||||
"kernelopts": "root=UUID=efe8afea-c0a8-45dc-8e6e-499279f6fa5d ro net.ifnames=0"
|
||||
"kernelopts": "root=UUID=0194fdc2-fa2f-4cc0-81d3-ff12045b73c8 ro net.ifnames=0"
|
||||
},
|
||||
"bootloader": "grub",
|
||||
"bootmenu": [
|
||||
|
|
@ -9193,6 +9193,14 @@
|
|||
"cockpit"
|
||||
],
|
||||
"fstab": [
|
||||
[
|
||||
"UUID=0194fdc2-fa2f-4cc0-81d3-ff12045b73c8",
|
||||
"/",
|
||||
"xfs",
|
||||
"defaults",
|
||||
"0",
|
||||
"0"
|
||||
],
|
||||
[
|
||||
"UUID=7B77-95E7",
|
||||
"/boot/efi",
|
||||
|
|
@ -9200,14 +9208,6 @@
|
|||
"defaults,uid=0,gid=0,umask=077,shortname=winnt",
|
||||
"0",
|
||||
"2"
|
||||
],
|
||||
[
|
||||
"UUID=efe8afea-c0a8-45dc-8e6e-499279f6fa5d",
|
||||
"/",
|
||||
"xfs",
|
||||
"defaults",
|
||||
"0",
|
||||
"0"
|
||||
]
|
||||
],
|
||||
"groups": [
|
||||
|
|
@ -9730,7 +9730,7 @@
|
|||
"size": 4187995648,
|
||||
"start": 106954752,
|
||||
"type": "0FC63DAF-8483-4772-8E79-3D69D8477DE4",
|
||||
"uuid": "efe8afea-c0a8-45dc-8e6e-499279f6fa5d"
|
||||
"uuid": "0194fdc2-fa2f-4cc0-81d3-ff12045b73c8"
|
||||
}
|
||||
],
|
||||
"passwd": [
|
||||
|
|
@ -9846,4 +9846,4 @@
|
|||
],
|
||||
"timezone": "UTC"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3433,7 +3433,7 @@
|
|||
"options": {
|
||||
"filesystems": [
|
||||
{
|
||||
"uuid": "efe8afea-c0a8-45dc-8e6e-499279f6fa5d",
|
||||
"uuid": "0194fdc2-fa2f-4cc0-81d3-ff12045b73c8",
|
||||
"vfs_type": "xfs",
|
||||
"path": "/",
|
||||
"options": "defaults"
|
||||
|
|
@ -3451,7 +3451,7 @@
|
|||
{
|
||||
"name": "org.osbuild.grub2",
|
||||
"options": {
|
||||
"root_fs_uuid": "efe8afea-c0a8-45dc-8e6e-499279f6fa5d",
|
||||
"root_fs_uuid": "0194fdc2-fa2f-4cc0-81d3-ff12045b73c8",
|
||||
"kernel_opts": "console=tty0 console=ttyS0,115200n8 no_timer_check net.ifnames=0 crashkernel=auto",
|
||||
"legacy": "i386-pc",
|
||||
"uefi": {
|
||||
|
|
@ -3518,7 +3518,7 @@
|
|||
"uuid": "6264D520-3FB9-423F-8AB8-7A0A8E3D3562",
|
||||
"filesystem": {
|
||||
"type": "xfs",
|
||||
"uuid": "efe8afea-c0a8-45dc-8e6e-499279f6fa5d",
|
||||
"uuid": "0194fdc2-fa2f-4cc0-81d3-ff12045b73c8",
|
||||
"label": "root",
|
||||
"mountpoint": "/"
|
||||
}
|
||||
|
|
@ -9507,7 +9507,7 @@
|
|||
},
|
||||
"image-info": {
|
||||
"boot-environment": {
|
||||
"kernelopts": "root=UUID=efe8afea-c0a8-45dc-8e6e-499279f6fa5d console=tty0 console=ttyS0,115200n8 no_timer_check net.ifnames=0 crashkernel=auto"
|
||||
"kernelopts": "root=UUID=0194fdc2-fa2f-4cc0-81d3-ff12045b73c8 console=tty0 console=ttyS0,115200n8 no_timer_check net.ifnames=0 crashkernel=auto"
|
||||
},
|
||||
"bootloader": "grub",
|
||||
"bootmenu": [
|
||||
|
|
@ -9524,6 +9524,14 @@
|
|||
}
|
||||
],
|
||||
"fstab": [
|
||||
[
|
||||
"UUID=0194fdc2-fa2f-4cc0-81d3-ff12045b73c8",
|
||||
"/",
|
||||
"xfs",
|
||||
"defaults",
|
||||
"0",
|
||||
"0"
|
||||
],
|
||||
[
|
||||
"UUID=7B77-95E7",
|
||||
"/boot/efi",
|
||||
|
|
@ -9531,14 +9539,6 @@
|
|||
"defaults,uid=0,gid=0,umask=077,shortname=winnt",
|
||||
"0",
|
||||
"2"
|
||||
],
|
||||
[
|
||||
"UUID=efe8afea-c0a8-45dc-8e6e-499279f6fa5d",
|
||||
"/",
|
||||
"xfs",
|
||||
"defaults",
|
||||
"0",
|
||||
"0"
|
||||
]
|
||||
],
|
||||
"groups": [
|
||||
|
|
@ -10091,7 +10091,7 @@
|
|||
"size": 10630446592,
|
||||
"start": 106954752,
|
||||
"type": "0FC63DAF-8483-4772-8E79-3D69D8477DE4",
|
||||
"uuid": "efe8afea-c0a8-45dc-8e6e-499279f6fa5d"
|
||||
"uuid": "0194fdc2-fa2f-4cc0-81d3-ff12045b73c8"
|
||||
}
|
||||
],
|
||||
"passwd": [
|
||||
|
|
@ -10219,4 +10219,4 @@
|
|||
],
|
||||
"timezone": "UTC"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3485,7 +3485,7 @@
|
|||
"options": {
|
||||
"filesystems": [
|
||||
{
|
||||
"uuid": "efe8afea-c0a8-45dc-8e6e-499279f6fa5d",
|
||||
"uuid": "0194fdc2-fa2f-4cc0-81d3-ff12045b73c8",
|
||||
"vfs_type": "xfs",
|
||||
"path": "/",
|
||||
"options": "defaults"
|
||||
|
|
@ -3503,7 +3503,7 @@
|
|||
{
|
||||
"name": "org.osbuild.grub2",
|
||||
"options": {
|
||||
"root_fs_uuid": "efe8afea-c0a8-45dc-8e6e-499279f6fa5d",
|
||||
"root_fs_uuid": "0194fdc2-fa2f-4cc0-81d3-ff12045b73c8",
|
||||
"kernel_opts": "console=tty0 console=ttyS0,115200n8 no_timer_check net.ifnames=0 crashkernel=auto debug",
|
||||
"legacy": "i386-pc",
|
||||
"uefi": {
|
||||
|
|
@ -3628,7 +3628,7 @@
|
|||
"uuid": "6264D520-3FB9-423F-8AB8-7A0A8E3D3562",
|
||||
"filesystem": {
|
||||
"type": "xfs",
|
||||
"uuid": "efe8afea-c0a8-45dc-8e6e-499279f6fa5d",
|
||||
"uuid": "0194fdc2-fa2f-4cc0-81d3-ff12045b73c8",
|
||||
"label": "root",
|
||||
"mountpoint": "/"
|
||||
}
|
||||
|
|
@ -9617,7 +9617,7 @@
|
|||
},
|
||||
"image-info": {
|
||||
"boot-environment": {
|
||||
"kernelopts": "root=UUID=efe8afea-c0a8-45dc-8e6e-499279f6fa5d console=tty0 console=ttyS0,115200n8 no_timer_check net.ifnames=0 crashkernel=auto debug"
|
||||
"kernelopts": "root=UUID=0194fdc2-fa2f-4cc0-81d3-ff12045b73c8 console=tty0 console=ttyS0,115200n8 no_timer_check net.ifnames=0 crashkernel=auto debug"
|
||||
},
|
||||
"bootloader": "grub",
|
||||
"bootmenu": [
|
||||
|
|
@ -9634,6 +9634,14 @@
|
|||
}
|
||||
],
|
||||
"fstab": [
|
||||
[
|
||||
"UUID=0194fdc2-fa2f-4cc0-81d3-ff12045b73c8",
|
||||
"/",
|
||||
"xfs",
|
||||
"defaults",
|
||||
"0",
|
||||
"0"
|
||||
],
|
||||
[
|
||||
"UUID=7B77-95E7",
|
||||
"/boot/efi",
|
||||
|
|
@ -9641,14 +9649,6 @@
|
|||
"defaults,uid=0,gid=0,umask=077,shortname=winnt",
|
||||
"0",
|
||||
"2"
|
||||
],
|
||||
[
|
||||
"UUID=efe8afea-c0a8-45dc-8e6e-499279f6fa5d",
|
||||
"/",
|
||||
"xfs",
|
||||
"defaults",
|
||||
"0",
|
||||
"0"
|
||||
]
|
||||
],
|
||||
"groups": [
|
||||
|
|
@ -10203,7 +10203,7 @@
|
|||
"size": 10630446592,
|
||||
"start": 106954752,
|
||||
"type": "0FC63DAF-8483-4772-8E79-3D69D8477DE4",
|
||||
"uuid": "efe8afea-c0a8-45dc-8e6e-499279f6fa5d"
|
||||
"uuid": "0194fdc2-fa2f-4cc0-81d3-ff12045b73c8"
|
||||
}
|
||||
],
|
||||
"passwd": [
|
||||
|
|
@ -10333,4 +10333,4 @@
|
|||
],
|
||||
"timezone": "London"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3259,7 +3259,7 @@
|
|||
"options": {
|
||||
"filesystems": [
|
||||
{
|
||||
"uuid": "efe8afea-c0a8-45dc-8e6e-499279f6fa5d",
|
||||
"uuid": "0194fdc2-fa2f-4cc0-81d3-ff12045b73c8",
|
||||
"vfs_type": "xfs",
|
||||
"path": "/",
|
||||
"options": "defaults"
|
||||
|
|
@ -3277,7 +3277,7 @@
|
|||
{
|
||||
"name": "org.osbuild.grub2",
|
||||
"options": {
|
||||
"root_fs_uuid": "efe8afea-c0a8-45dc-8e6e-499279f6fa5d",
|
||||
"root_fs_uuid": "0194fdc2-fa2f-4cc0-81d3-ff12045b73c8",
|
||||
"kernel_opts": "ro biosdevname=0 rootdelay=300 console=ttyS0 earlyprintk=ttyS0 net.ifnames=0",
|
||||
"legacy": "i386-pc",
|
||||
"uefi": {
|
||||
|
|
@ -3354,7 +3354,7 @@
|
|||
"uuid": "6264D520-3FB9-423F-8AB8-7A0A8E3D3562",
|
||||
"filesystem": {
|
||||
"type": "xfs",
|
||||
"uuid": "efe8afea-c0a8-45dc-8e6e-499279f6fa5d",
|
||||
"uuid": "0194fdc2-fa2f-4cc0-81d3-ff12045b73c8",
|
||||
"label": "root",
|
||||
"mountpoint": "/"
|
||||
}
|
||||
|
|
@ -9082,7 +9082,7 @@
|
|||
},
|
||||
"image-info": {
|
||||
"boot-environment": {
|
||||
"kernelopts": "root=UUID=efe8afea-c0a8-45dc-8e6e-499279f6fa5d ro biosdevname=0 rootdelay=300 console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
|
||||
"kernelopts": "root=UUID=0194fdc2-fa2f-4cc0-81d3-ff12045b73c8 ro biosdevname=0 rootdelay=300 console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
|
||||
},
|
||||
"bootloader": "grub",
|
||||
"bootmenu": [
|
||||
|
|
@ -9104,6 +9104,14 @@
|
|||
"cockpit"
|
||||
],
|
||||
"fstab": [
|
||||
[
|
||||
"UUID=0194fdc2-fa2f-4cc0-81d3-ff12045b73c8",
|
||||
"/",
|
||||
"xfs",
|
||||
"defaults",
|
||||
"0",
|
||||
"0"
|
||||
],
|
||||
[
|
||||
"UUID=7B77-95E7",
|
||||
"/boot/efi",
|
||||
|
|
@ -9111,14 +9119,6 @@
|
|||
"defaults,uid=0,gid=0,umask=077,shortname=winnt",
|
||||
"0",
|
||||
"2"
|
||||
],
|
||||
[
|
||||
"UUID=efe8afea-c0a8-45dc-8e6e-499279f6fa5d",
|
||||
"/",
|
||||
"xfs",
|
||||
"defaults",
|
||||
"0",
|
||||
"0"
|
||||
]
|
||||
],
|
||||
"groups": [
|
||||
|
|
@ -9636,7 +9636,7 @@
|
|||
"size": 4187995648,
|
||||
"start": 106954752,
|
||||
"type": "0FC63DAF-8483-4772-8E79-3D69D8477DE4",
|
||||
"uuid": "efe8afea-c0a8-45dc-8e6e-499279f6fa5d"
|
||||
"uuid": "0194fdc2-fa2f-4cc0-81d3-ff12045b73c8"
|
||||
}
|
||||
],
|
||||
"passwd": [
|
||||
|
|
@ -9756,4 +9756,4 @@
|
|||
],
|
||||
"timezone": "UTC"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3121,7 +3121,7 @@
|
|||
"options": {
|
||||
"filesystems": [
|
||||
{
|
||||
"uuid": "efe8afea-c0a8-45dc-8e6e-499279f6fa5d",
|
||||
"uuid": "0194fdc2-fa2f-4cc0-81d3-ff12045b73c8",
|
||||
"vfs_type": "xfs",
|
||||
"path": "/",
|
||||
"options": "defaults"
|
||||
|
|
@ -3139,7 +3139,7 @@
|
|||
{
|
||||
"name": "org.osbuild.grub2",
|
||||
"options": {
|
||||
"root_fs_uuid": "efe8afea-c0a8-45dc-8e6e-499279f6fa5d",
|
||||
"root_fs_uuid": "0194fdc2-fa2f-4cc0-81d3-ff12045b73c8",
|
||||
"kernel_opts": "ro net.ifnames=0",
|
||||
"legacy": "i386-pc",
|
||||
"uefi": {
|
||||
|
|
@ -3206,7 +3206,7 @@
|
|||
"uuid": "6264D520-3FB9-423F-8AB8-7A0A8E3D3562",
|
||||
"filesystem": {
|
||||
"type": "xfs",
|
||||
"uuid": "efe8afea-c0a8-45dc-8e6e-499279f6fa5d",
|
||||
"uuid": "0194fdc2-fa2f-4cc0-81d3-ff12045b73c8",
|
||||
"label": "root",
|
||||
"mountpoint": "/"
|
||||
}
|
||||
|
|
@ -8718,7 +8718,7 @@
|
|||
},
|
||||
"image-info": {
|
||||
"boot-environment": {
|
||||
"kernelopts": "root=UUID=efe8afea-c0a8-45dc-8e6e-499279f6fa5d ro net.ifnames=0"
|
||||
"kernelopts": "root=UUID=0194fdc2-fa2f-4cc0-81d3-ff12045b73c8 ro net.ifnames=0"
|
||||
},
|
||||
"bootloader": "grub",
|
||||
"bootmenu": [
|
||||
|
|
@ -8740,6 +8740,14 @@
|
|||
"cockpit"
|
||||
],
|
||||
"fstab": [
|
||||
[
|
||||
"UUID=0194fdc2-fa2f-4cc0-81d3-ff12045b73c8",
|
||||
"/",
|
||||
"xfs",
|
||||
"defaults",
|
||||
"0",
|
||||
"0"
|
||||
],
|
||||
[
|
||||
"UUID=7B77-95E7",
|
||||
"/boot/efi",
|
||||
|
|
@ -8747,14 +8755,6 @@
|
|||
"defaults,uid=0,gid=0,umask=077,shortname=winnt",
|
||||
"0",
|
||||
"2"
|
||||
],
|
||||
[
|
||||
"UUID=efe8afea-c0a8-45dc-8e6e-499279f6fa5d",
|
||||
"/",
|
||||
"xfs",
|
||||
"defaults",
|
||||
"0",
|
||||
"0"
|
||||
]
|
||||
],
|
||||
"groups": [
|
||||
|
|
@ -9248,7 +9248,7 @@
|
|||
"size": 4187995648,
|
||||
"start": 106954752,
|
||||
"type": "0FC63DAF-8483-4772-8E79-3D69D8477DE4",
|
||||
"uuid": "efe8afea-c0a8-45dc-8e6e-499279f6fa5d"
|
||||
"uuid": "0194fdc2-fa2f-4cc0-81d3-ff12045b73c8"
|
||||
}
|
||||
],
|
||||
"passwd": [
|
||||
|
|
@ -9365,4 +9365,4 @@
|
|||
],
|
||||
"timezone": "UTC"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue