Documentation ¶
Index ¶
- Constants
- func NewVolIDFromRand(r *rand.Rand) string
- type Argon2id
- type Btrfs
- func (b *Btrfs) AlignUp(size uint64) uint64
- func (b *Btrfs) Clone() Entity
- func (b *Btrfs) CreateMountpoint(mountpoint string, size uint64) (Entity, error)
- func (b *Btrfs) GenUUID(rng *rand.Rand)
- func (b *Btrfs) GetChild(n uint) Entity
- func (b *Btrfs) GetItemCount() uint
- func (b *Btrfs) IsContainer() bool
- type BtrfsSubvolume
- func (bs *BtrfsSubvolume) Clone() Entity
- func (bs *BtrfsSubvolume) EnsureSize(s uint64) bool
- func (bs *BtrfsSubvolume) GetFSSpec() FSSpec
- func (bs *BtrfsSubvolume) GetFSTabOptions() FSTabOptions
- func (bs *BtrfsSubvolume) GetFSType() string
- func (bs *BtrfsSubvolume) GetMountpoint() string
- func (bs *BtrfsSubvolume) GetSize() uint64
- func (subvol *BtrfsSubvolume) IsContainer() bool
- type ClevisBind
- type Container
- type Entity
- type EntityCallback
- type FSSpec
- type FSTabOptions
- type Filesystem
- func (fs *Filesystem) Clone() Entity
- func (fs *Filesystem) GenUUID(rng *rand.Rand)
- func (fs *Filesystem) GetFSSpec() FSSpec
- func (fs *Filesystem) GetFSTabOptions() FSTabOptions
- func (fs *Filesystem) GetFSType() string
- func (fs *Filesystem) GetMountpoint() string
- func (fs *Filesystem) IsContainer() bool
- type LUKSContainer
- type LVMLogicalVolume
- type LVMVolumeGroup
- func (vg *LVMVolumeGroup) AlignUp(size uint64) uint64
- func (vg *LVMVolumeGroup) Clone() Entity
- func (vg *LVMVolumeGroup) CreateLogicalVolume(lvName string, size uint64, payload Entity) (Entity, error)
- func (vg *LVMVolumeGroup) CreateMountpoint(mountpoint string, size uint64) (Entity, error)
- func (vg *LVMVolumeGroup) GetChild(n uint) Entity
- func (vg *LVMVolumeGroup) GetItemCount() uint
- func (vg *LVMVolumeGroup) IsContainer() bool
- func (vg *LVMVolumeGroup) MetadataSize() uint64
- type Mountable
- type MountableCallback
- type MountpointCreator
- type Partition
- func (p *Partition) Clone() Entity
- func (p *Partition) EnsureSize(s uint64) bool
- func (p *Partition) GetChild(n uint) Entity
- func (pt *Partition) GetItemCount() uint
- func (p *Partition) GetSize() uint64
- func (p *Partition) IsBIOSBoot() bool
- func (p *Partition) IsContainer() bool
- func (p *Partition) IsPReP() bool
- type PartitionTable
- func (pt *PartitionTable) AlignUp(size uint64) uint64
- func (pt *PartitionTable) BytesToSectors(size uint64) uint64
- func (pt *PartitionTable) Clone() Entity
- func (pt *PartitionTable) ContainsMountpoint(mountpoint string) bool
- func (pt *PartitionTable) CreateMountpoint(mountpoint string, size uint64) (Entity, error)
- func (pt *PartitionTable) EnsureDirectorySizes(dirSizeMap map[string]uint64)
- func (pt *PartitionTable) EnsureSize(s uint64) bool
- func (pt *PartitionTable) FindMountable(mountpoint string) Mountable
- func (pt *PartitionTable) ForEachEntity(cb EntityCallback) error
- func (pt *PartitionTable) ForEachMountable(cb MountableCallback) error
- func (pt *PartitionTable) GenUUID(rng *rand.Rand)
- func (pt *PartitionTable) GenerateUUIDs(rng *rand.Rand)
- func (pt *PartitionTable) GetBuildPackages() []string
- func (pt *PartitionTable) GetChild(n uint) Entity
- func (pt *PartitionTable) GetItemCount() uint
- func (pt *PartitionTable) GetSize() uint64
- func (pt *PartitionTable) HeaderSize() uint64
- func (pt *PartitionTable) IsContainer() bool
- func (pt *PartitionTable) SectorsToBytes(size uint64) uint64
- type PartitioningMode
- type Sizeable
- type UniqueEntity
- type VolumeContainer
Constants ¶
const ( // Default sector size in bytes DefaultSectorSize = 512 DefaultGrainBytes = uint64(1048576) // 1 MiB // UUIDs BIOSBootPartitionGUID = "21686148-6449-6E6F-744E-656564454649" BIOSBootPartitionUUID = "FAC7F1FB-3E8D-4137-A512-961DE09A5549" FilesystemDataGUID = "0FC63DAF-8483-4772-8E79-3D69D8477DE4" FilesystemDataUUID = "CB07C243-BC44-4717-853E-28852021225B" EFISystemPartitionGUID = "C12A7328-F81F-11D2-BA4B-00A0C93EC93B" EFISystemPartitionUUID = "68B2905B-DF3E-4FB3-80FA-49D1E773AA33" EFIFilesystemUUID = "7B77-95E7" LVMPartitionGUID = "E6D6D379-F507-44C2-A23C-238F2A3DF928" PRePartitionGUID = "9E1A2D38-C612-4316-AA26-8B49521E5A8B" RootPartitionUUID = "6264D520-3FB9-423F-8AB8-7A0A8E3D3562" // Extended Boot Loader Partition XBootLDRPartitionGUID = "BC13C2FF-59E6-4262-A352-B275FD6F7172" )
const LVMDefaultExtentSize = 4 * common.MebiByte
Default physical extent size in bytes: logical volumes created inside the VG will be aligned to this.
Variables ¶
This section is empty.
Functions ¶
func NewVolIDFromRand ¶
NewVolIDFromRand creates a random 32 bit hex string to use as a volume ID for FAT filesystems
Types ¶
type Btrfs ¶
type Btrfs struct { UUID string Label string Mountpoint string Subvolumes []BtrfsSubvolume }
func (*Btrfs) CreateMountpoint ¶
func (*Btrfs) GetItemCount ¶
func (*Btrfs) IsContainer ¶
type BtrfsSubvolume ¶
type BtrfsSubvolume struct { Name string Size uint64 Mountpoint string GroupID uint64 MntOps string // UUID of the parent volume UUID string }
func (*BtrfsSubvolume) Clone ¶
func (bs *BtrfsSubvolume) Clone() Entity
func (*BtrfsSubvolume) EnsureSize ¶
func (bs *BtrfsSubvolume) EnsureSize(s uint64) bool
func (*BtrfsSubvolume) GetFSSpec ¶
func (bs *BtrfsSubvolume) GetFSSpec() FSSpec
func (*BtrfsSubvolume) GetFSTabOptions ¶
func (bs *BtrfsSubvolume) GetFSTabOptions() FSTabOptions
func (*BtrfsSubvolume) GetFSType ¶
func (bs *BtrfsSubvolume) GetFSType() string
func (*BtrfsSubvolume) GetMountpoint ¶
func (bs *BtrfsSubvolume) GetMountpoint() string
func (*BtrfsSubvolume) GetSize ¶
func (bs *BtrfsSubvolume) GetSize() uint64
func (*BtrfsSubvolume) IsContainer ¶
func (subvol *BtrfsSubvolume) IsContainer() bool
type ClevisBind ¶
type Container ¶
type Container interface { Entity // GetItemCount returns the number of actual child entities. GetItemCount() uint // GetChild returns the child entity at the given index. GetChild(n uint) Entity }
Container is the interface for entities that can contain other entities. Together with the base Entity interface this allows to model a generic entity tree of theoretically arbitrary depth and width.
type Entity ¶
type Entity interface { // IsContainer indicates if the implementing type can // contain any other entities. IsContainer() bool // Clone returns a deep copy of the entity. Clone() Entity }
Entity is the base interface for all disk-related entities.
type EntityCallback ¶
type FSTabOptions ¶
type Filesystem ¶
type Filesystem struct { Type string // ID of the filesystem, vfat doesn't use traditional UUIDs, therefore this // is just a string. UUID string Label string Mountpoint string // The fourth field of fstab(5); fs_mntops FSTabOptions string // The fifth field of fstab(5); fs_freq FSTabFreq uint64 // The sixth field of fstab(5); fs_passno FSTabPassNo uint64 }
Filesystem related functions
func (*Filesystem) GenUUID ¶
func (fs *Filesystem) GenUUID(rng *rand.Rand)
func (*Filesystem) GetFSSpec ¶
func (fs *Filesystem) GetFSSpec() FSSpec
func (*Filesystem) GetFSTabOptions ¶
func (fs *Filesystem) GetFSTabOptions() FSTabOptions
func (*Filesystem) GetFSType ¶
func (fs *Filesystem) GetFSType() string
func (*Filesystem) GetMountpoint ¶
func (fs *Filesystem) GetMountpoint() string
func (*Filesystem) IsContainer ¶
func (fs *Filesystem) IsContainer() bool
type LUKSContainer ¶
type LUKSContainer struct { Passphrase string UUID string Cipher string Label string Subsystem string SectorSize uint64 // password-based key derivation function PBKDF Argon2id Clevis *ClevisBind Payload Entity }
func (*LUKSContainer) Clone ¶
func (lc *LUKSContainer) Clone() Entity
func (*LUKSContainer) GenUUID ¶
func (lc *LUKSContainer) GenUUID(rng *rand.Rand)
func (*LUKSContainer) GetChild ¶
func (lc *LUKSContainer) GetChild(n uint) Entity
func (*LUKSContainer) GetItemCount ¶
func (lc *LUKSContainer) GetItemCount() uint
func (*LUKSContainer) IsContainer ¶
func (lc *LUKSContainer) IsContainer() bool
func (*LUKSContainer) MetadataSize ¶
func (lc *LUKSContainer) MetadataSize() uint64
type LVMLogicalVolume ¶
func (*LVMLogicalVolume) Clone ¶
func (lv *LVMLogicalVolume) Clone() Entity
func (*LVMLogicalVolume) EnsureSize ¶
func (lv *LVMLogicalVolume) EnsureSize(s uint64) bool
func (*LVMLogicalVolume) GetChild ¶
func (lv *LVMLogicalVolume) GetChild(n uint) Entity
func (*LVMLogicalVolume) GetItemCount ¶
func (lv *LVMLogicalVolume) GetItemCount() uint
func (*LVMLogicalVolume) GetSize ¶
func (lv *LVMLogicalVolume) GetSize() uint64
func (*LVMLogicalVolume) IsContainer ¶
func (lv *LVMLogicalVolume) IsContainer() bool
type LVMVolumeGroup ¶
type LVMVolumeGroup struct { Name string Description string LogicalVolumes []LVMLogicalVolume }
func (*LVMVolumeGroup) AlignUp ¶
func (vg *LVMVolumeGroup) AlignUp(size uint64) uint64
func (*LVMVolumeGroup) Clone ¶
func (vg *LVMVolumeGroup) Clone() Entity
func (*LVMVolumeGroup) CreateLogicalVolume ¶
func (*LVMVolumeGroup) CreateMountpoint ¶
func (vg *LVMVolumeGroup) CreateMountpoint(mountpoint string, size uint64) (Entity, error)
func (*LVMVolumeGroup) GetChild ¶
func (vg *LVMVolumeGroup) GetChild(n uint) Entity
func (*LVMVolumeGroup) GetItemCount ¶
func (vg *LVMVolumeGroup) GetItemCount() uint
func (*LVMVolumeGroup) IsContainer ¶
func (vg *LVMVolumeGroup) IsContainer() bool
func (*LVMVolumeGroup) MetadataSize ¶
func (vg *LVMVolumeGroup) MetadataSize() uint64
type Mountable ¶
type Mountable interface { // GetMountPoint returns the path of the mount point. GetMountpoint() string // GetFSType returns the file system type, e.g. 'xfs'. GetFSType() string // GetFSSpec returns the file system spec information. GetFSSpec() FSSpec // GetFSTabOptions returns options for mounting the entity. GetFSTabOptions() FSTabOptions }
A Mountable entity is an entity that can be mounted.
type MountableCallback ¶
type MountpointCreator ¶
type MountpointCreator interface { CreateMountpoint(mountpoint string, size uint64) (Entity, error) // AlignUp will align the given bytes according to the // requirements of the container type. AlignUp(size uint64) uint64 }
A MountpointCreator is a container that is able to create new volumes.
CreateMountpoint creates a new mountpoint with the given size and returns the entity that represents the new mountpoint.
type Partition ¶
type Partition struct { Start uint64 // Start of the partition in bytes Size uint64 // Size of the partition in bytes Type string // Partition type, e.g. 0x83 for MBR or a UUID for gpt Bootable bool // `Legacy BIOS bootable` (GPT) or `active` (DOS) flag // ID of the partition, dos doesn't use traditional UUIDs, therefore this // is just a string. UUID string // If nil, the partition is raw; It doesn't contain a payload. Payload Entity }
func (*Partition) EnsureSize ¶
Ensure the partition has at least the given size. Will do nothing if the partition is already larger. Returns if the size changed.
func (*Partition) GetItemCount ¶
func (*Partition) IsBIOSBoot ¶
func (*Partition) IsContainer ¶
type PartitionTable ¶
type PartitionTable struct { Size uint64 // Size of the disk (in bytes). UUID string // Unique identifier of the partition table (GPT only). Type string // Partition table type, e.g. dos, gpt. Partitions []Partition SectorSize uint64 // Sector size in bytes ExtraPadding uint64 // Extra space at the end of the partition table (sectors) StartOffset uint64 // Starting offset of the first partition in the table (Mb) }
func NewPartitionTable ¶
func NewPartitionTable(basePT *PartitionTable, mountpoints []blueprint.FilesystemCustomization, imageSize uint64, mode PartitioningMode, requiredSizes map[string]uint64, rng *rand.Rand) (*PartitionTable, error)
func (*PartitionTable) AlignUp ¶
func (pt *PartitionTable) AlignUp(size uint64) uint64
AlignUp will align the given bytes to next aligned grain if not already aligned
func (*PartitionTable) BytesToSectors ¶
func (pt *PartitionTable) BytesToSectors(size uint64) uint64
Convert the given bytes to the number of sectors.
func (*PartitionTable) Clone ¶
func (pt *PartitionTable) Clone() Entity
func (*PartitionTable) ContainsMountpoint ¶
func (pt *PartitionTable) ContainsMountpoint(mountpoint string) bool
Returns if the partition table contains a filesystem with the given mount point.
func (*PartitionTable) CreateMountpoint ¶
func (pt *PartitionTable) CreateMountpoint(mountpoint string, size uint64) (Entity, error)
func (*PartitionTable) EnsureDirectorySizes ¶
func (pt *PartitionTable) EnsureDirectorySizes(dirSizeMap map[string]uint64)
EnsureDirectorySizes takes a mapping of directory paths to sizes (in bytes) and resizes the appropriate partitions such that they are at least the size of the sum of their subdirectories plus their own sizes. The function will panic if any of the directory paths are invalid.
func (*PartitionTable) EnsureSize ¶
func (pt *PartitionTable) EnsureSize(s uint64) bool
func (*PartitionTable) FindMountable ¶
func (pt *PartitionTable) FindMountable(mountpoint string) Mountable
FindMountable returns the Mountable entity with the given mountpoint in the PartitionTable. Returns nil if no Entity has the target as a Mountpoint.
func (*PartitionTable) ForEachEntity ¶
func (pt *PartitionTable) ForEachEntity(cb EntityCallback) error
ForEachEntity runs the provided callback function on each entity in the PartitionTable.
func (*PartitionTable) ForEachMountable ¶
func (pt *PartitionTable) ForEachMountable(cb MountableCallback) error
ForEachMountable runs the provided callback function on each Mountable in the PartitionTable.
func (*PartitionTable) GenUUID ¶
func (pt *PartitionTable) GenUUID(rng *rand.Rand)
GenUUID generates and sets UUIDs for all Partitions in the PartitionTable if the layout is GPT.
func (*PartitionTable) GenerateUUIDs ¶
func (pt *PartitionTable) GenerateUUIDs(rng *rand.Rand)
Generate all needed UUIDs for all the partiton and filesystems
Will not overwrite existing UUIDs and only generate UUIDs for partitions if the layout is GPT.
func (*PartitionTable) GetBuildPackages ¶
func (pt *PartitionTable) GetBuildPackages() []string
GetBuildPackages returns an array of packages needed to support the features used in the PartitionTable.
func (*PartitionTable) GetChild ¶
func (pt *PartitionTable) GetChild(n uint) Entity
func (*PartitionTable) GetItemCount ¶
func (pt *PartitionTable) GetItemCount() uint
func (*PartitionTable) GetSize ¶
func (pt *PartitionTable) GetSize() uint64
func (*PartitionTable) HeaderSize ¶
func (pt *PartitionTable) HeaderSize() uint64
func (*PartitionTable) IsContainer ¶
func (pt *PartitionTable) IsContainer() bool
func (*PartitionTable) SectorsToBytes ¶
func (pt *PartitionTable) SectorsToBytes(size uint64) uint64
Convert the given number of sectors to bytes.
type PartitioningMode ¶ added in v0.12.0
type PartitioningMode string
const ( // AutoLVMPartitioningMode creates a LVM layout if the filesystem // contains a mountpoint that's not defined in the base partition table // of the specified image type. In the other case, a raw layout is used. AutoLVMPartitioningMode PartitioningMode = "auto-lvm" // LVMPartitioningMode always creates an LVM layout. LVMPartitioningMode PartitioningMode = "lvm" // RawPartitioningMode always creates a raw layout. RawPartitioningMode PartitioningMode = "raw" // DefaultPartitioningMode is AutoLVMPartitioningMode and is the empty state DefaultPartitioningMode PartitioningMode = "" )
type Sizeable ¶
type Sizeable interface { // EnsureSize will resize the entity to the given size in case // it is currently smaller. Returns if the size was changed. EnsureSize(size uint64) bool // GetSize returns the size of the entity in bytes. GetSize() uint64 }
Sizeable is implemented by entities that carry size information.
type UniqueEntity ¶
A UniqueEntity is an entity that can be uniquely identified via a UUID.
GenUUID generates a UUID for the entity if it does not yet have one.
type VolumeContainer ¶
type VolumeContainer interface { // MetadataSize returns the size of the container's metadata (in // bytes), i.e. the storage space that needs to be reserved for // the container itself, in contrast to the data it contains. MetadataSize() uint64 }
VolumeContainer is a specific container that contains volume entities