125 lines
6.0 KiB
Go
125 lines
6.0 KiB
Go
package constants
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
const (
|
|
GrubDefEntry = "Kairos"
|
|
EfiLabel = "COS_GRUB"
|
|
ISOLabel = "COS_LIVE"
|
|
MountBinary = "/usr/bin/mount"
|
|
EfiFs = "vfat"
|
|
IsoRootFile = "rootfs.squashfs"
|
|
IsoEFIPath = "/boot/uefi.img"
|
|
BuildImgName = "elemental"
|
|
EfiBootPath = "/EFI/BOOT"
|
|
GrubEfiImagex86 = "/usr/share/grub2/x86_64-efi/grub.efi"
|
|
GrubEfiImageArm64 = "/usr/share/grub2/arm64-efi/grub.efi"
|
|
GrubEfiImagex86Dest = EfiBootPath + "/bootx64.efi"
|
|
GrubEfiImageArm64Dest = EfiBootPath + "/bootaa64.efi"
|
|
GrubCfg = "grub.cfg"
|
|
GrubPrefixDir = "/boot/grub2"
|
|
GrubEfiCfg = "search --no-floppy --file --set=root " + IsoKernelPath +
|
|
"\nset prefix=($root)" + GrubPrefixDir +
|
|
"\nconfigfile $prefix/" + GrubCfg
|
|
|
|
GrubFont = "/usr/share/grub2/unicode.pf2"
|
|
GrubBootHybridImg = "/usr/share/grub2/i386-pc/boot_hybrid.img"
|
|
SyslinuxFiles = "/usr/share/syslinux/isolinux.bin " +
|
|
"/usr/share/syslinux/menu.c32 " +
|
|
"/usr/share/syslinux/chain.c32 " +
|
|
"/usr/share/syslinux/mboot.c32"
|
|
IsoLoaderPath = "/boot/x86_64/loader"
|
|
GrubCfgTemplate = `search --no-floppy --file --set=root /boot/kernel
|
|
set default=0
|
|
set timeout=10
|
|
set timeout_style=menu
|
|
set linux=linux
|
|
set initrd=initrd
|
|
if [ "${grub_cpu}" = "x86_64" -o "${grub_cpu}" = "i386" -o "${grub_cpu}" = "arm64" ];then
|
|
if [ "${grub_platform}" = "efi" ]; then
|
|
if [ "${grub_cpu}" != "arm64" ]; then
|
|
set linux=linuxefi
|
|
set initrd=initrdefi
|
|
fi
|
|
fi
|
|
fi
|
|
if [ "${grub_platform}" = "efi" ]; then
|
|
echo "Please press 't' to show the boot menu on this console"
|
|
fi
|
|
set font=($root)/boot/${grub_cpu}/loader/grub2/fonts/unicode.pf2
|
|
if [ -f ${font} ];then
|
|
loadfont ${font}
|
|
fi
|
|
menuentry "%s" --class os --unrestricted {
|
|
echo Loading kernel...
|
|
$linux ($root)/boot/kernel cdroot root=live:CDLABEL=%s rd.live.dir=/ rd.live.squashimg=rootfs.squashfs rd.live.overlay.overlayfs console=tty1 console=ttyS0 rd.cos.disable
|
|
echo Loading initrd...
|
|
$initrd ($root)/boot/initrd
|
|
}
|
|
|
|
if [ "${grub_platform}" = "efi" ]; then
|
|
hiddenentry "Text mode" --hotkey "t" {
|
|
set textmode=true
|
|
terminal_output console
|
|
}
|
|
fi`
|
|
GrubBiosTarget = "i386-pc"
|
|
GrubI386BinDir = "/usr/share/grub2/i386-pc"
|
|
GrubBiosImg = GrubI386BinDir + "/core.img"
|
|
GrubBiosCDBoot = GrubI386BinDir + "/cdboot.img"
|
|
GrubEltoritoImg = GrubI386BinDir + "/eltorito.img"
|
|
//TODO this list could be optimized
|
|
GrubModules = "ext2 iso9660 linux echo configfile search_label search_fs_file search search_fs_uuid " +
|
|
"ls normal gzio png fat gettext font minicmd gfxterm gfxmenu all_video xfs btrfs lvm luks " +
|
|
"gcry_rijndael gcry_sha256 gcry_sha512 crypto cryptodisk test true loadenv part_gpt " +
|
|
"part_msdos biosdisk vga vbe chain boot"
|
|
|
|
IsoHybridMBR = "/boot/x86_64/loader/boot_hybrid.img"
|
|
IsoBootCatalog = "/boot/x86_64/boot.catalog"
|
|
IsoBootFile = "/boot/x86_64/loader/eltorito.img"
|
|
|
|
// These paths are arbitrary but coupled to grub.cfg
|
|
IsoKernelPath = "/boot/kernel"
|
|
IsoInitrdPath = "/boot/initrd"
|
|
|
|
// Default directory and file fileModes
|
|
DirPerm = os.ModeDir | os.ModePerm
|
|
FilePerm = 0666
|
|
NoWriteDirPerm = 0555 | os.ModeDir
|
|
TempDirPerm = os.ModePerm | os.ModeSticky | os.ModeDir
|
|
|
|
ArchAmd64 = "amd64"
|
|
Archx86 = "x86_64"
|
|
ArchArm64 = "arm64"
|
|
)
|
|
|
|
// GetDefaultSquashfsOptions returns the default options to use when creating a squashfs
|
|
func GetDefaultSquashfsOptions() []string {
|
|
return []string{"-b", "1024k"}
|
|
}
|
|
|
|
func GetXorrisoBooloaderArgs(root string) []string {
|
|
args := []string{
|
|
"-boot_image", "grub", fmt.Sprintf("bin_path=%s", IsoBootFile),
|
|
"-boot_image", "grub", fmt.Sprintf("grub2_mbr=%s/%s", root, IsoHybridMBR),
|
|
"-boot_image", "grub", "grub2_boot_info=on",
|
|
"-boot_image", "any", "partition_offset=16",
|
|
"-boot_image", "any", fmt.Sprintf("cat_path=%s", IsoBootCatalog),
|
|
"-boot_image", "any", "cat_hidden=on",
|
|
"-boot_image", "any", "boot_info_table=on",
|
|
"-boot_image", "any", "platform_id=0x00",
|
|
"-boot_image", "any", "emul_type=no_emulation",
|
|
"-boot_image", "any", "load_size=2048",
|
|
"-append_partition", "2", "0xef", filepath.Join(root, IsoEFIPath),
|
|
"-boot_image", "any", "next",
|
|
"-boot_image", "any", "efi_path=--interval:appended_partition_2:all::",
|
|
"-boot_image", "any", "platform_id=0xef",
|
|
"-boot_image", "any", "emul_type=no_emulation",
|
|
}
|
|
return args
|
|
}
|