Start splitting image type definitions into separate files by logical groups (mostly by footprint and cloud platform) for easier navigation, like we did for rhel9. Split AMI and Edge image types; the rest will follow in separate commits. Image specific package sets are defined in the file for the image type grouping instead of the package_sets file. A notable difference with the way it was done in rhel9 is that every image type is defined in a function rather than a global where possible and a function when distro version specific configuration is needed. This is done for consistency and the change will likely be done in the other distributions as well. Also, instead of passing only required values to the image type constructor (for example, osVersion and a RHEL boolean), we pass the whole distribution object and each constructor can read whatever information it needs.
716 lines
14 KiB
Go
716 lines
14 KiB
Go
package rhel8
|
|
|
|
// This file defines package sets that are used by more than one image type.
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/osbuild/osbuild-composer/internal/distro"
|
|
"github.com/osbuild/osbuild-composer/internal/rpmmd"
|
|
)
|
|
|
|
// BUILD PACKAGE SETS
|
|
|
|
// distro-wide build package set
|
|
func distroBuildPackageSet(t *imageType) rpmmd.PackageSet {
|
|
ps := rpmmd.PackageSet{
|
|
Include: []string{
|
|
"dnf",
|
|
"dosfstools",
|
|
"e2fsprogs",
|
|
"glibc",
|
|
"lorax-templates-generic",
|
|
"lorax-templates-rhel",
|
|
"lvm2",
|
|
"policycoreutils",
|
|
"python36",
|
|
"python3-iniparse",
|
|
"qemu-img",
|
|
"selinux-policy-targeted",
|
|
"systemd",
|
|
"tar",
|
|
"xfsprogs",
|
|
"xz",
|
|
},
|
|
}
|
|
|
|
switch t.arch.Name() {
|
|
|
|
case distro.X86_64ArchName:
|
|
ps = ps.Append(x8664BuildPackageSet(t))
|
|
|
|
case distro.Ppc64leArchName:
|
|
ps = ps.Append(ppc64leBuildPackageSet(t))
|
|
}
|
|
|
|
return ps
|
|
}
|
|
|
|
// x86_64 build package set
|
|
func x8664BuildPackageSet(t *imageType) rpmmd.PackageSet {
|
|
return rpmmd.PackageSet{
|
|
Include: []string{"grub2-pc"},
|
|
}
|
|
}
|
|
|
|
// ppc64le build package set
|
|
func ppc64leBuildPackageSet(t *imageType) rpmmd.PackageSet {
|
|
return rpmmd.PackageSet{
|
|
Include: []string{"grub2-ppc64le", "grub2-ppc64le-modules"},
|
|
}
|
|
}
|
|
|
|
// installer boot package sets, needed for booting and
|
|
// also in the build host
|
|
|
|
func anacondaBootPackageSet(t *imageType) rpmmd.PackageSet {
|
|
ps := rpmmd.PackageSet{}
|
|
|
|
grubCommon := rpmmd.PackageSet{
|
|
Include: []string{
|
|
"grub2-tools",
|
|
"grub2-tools-extra",
|
|
"grub2-tools-minimal",
|
|
},
|
|
}
|
|
|
|
efiCommon := rpmmd.PackageSet{
|
|
Include: []string{
|
|
"efibootmgr",
|
|
},
|
|
}
|
|
|
|
switch t.arch.Name() {
|
|
case distro.X86_64ArchName:
|
|
ps = ps.Append(grubCommon)
|
|
ps = ps.Append(efiCommon)
|
|
ps = ps.Append(rpmmd.PackageSet{
|
|
Include: []string{
|
|
"grub2-efi-ia32-cdboot",
|
|
"grub2-efi-x64",
|
|
"grub2-efi-x64-cdboot",
|
|
"grub2-pc",
|
|
"grub2-pc-modules",
|
|
"shim-ia32",
|
|
"shim-x64",
|
|
"syslinux",
|
|
"syslinux-nonlinux",
|
|
},
|
|
})
|
|
case distro.Aarch64ArchName:
|
|
ps = ps.Append(grubCommon)
|
|
ps = ps.Append(efiCommon)
|
|
ps = ps.Append(rpmmd.PackageSet{
|
|
Include: []string{
|
|
"grub2-efi-aa64-cdboot",
|
|
"grub2-efi-aa64",
|
|
"shim-aa64",
|
|
},
|
|
})
|
|
|
|
default:
|
|
panic(fmt.Sprintf("unsupported arch: %s", t.arch.Name()))
|
|
}
|
|
|
|
return ps
|
|
}
|
|
|
|
func installerBuildPackageSet(t *imageType) rpmmd.PackageSet {
|
|
return distroBuildPackageSet(t).Append(
|
|
rpmmd.PackageSet{
|
|
Include: []string{
|
|
"isomd5sum",
|
|
"xorriso",
|
|
},
|
|
})
|
|
}
|
|
|
|
func anacondaBuildPackageSet(t *imageType) rpmmd.PackageSet {
|
|
ps := rpmmd.PackageSet{
|
|
Include: []string{
|
|
"squashfs-tools",
|
|
},
|
|
}
|
|
|
|
ps = ps.Append(installerBuildPackageSet(t))
|
|
ps = ps.Append(anacondaBootPackageSet(t))
|
|
|
|
return ps
|
|
}
|
|
|
|
// BOOT PACKAGE SETS
|
|
|
|
func bootPackageSet(t *imageType) rpmmd.PackageSet {
|
|
if !t.bootable {
|
|
return rpmmd.PackageSet{}
|
|
}
|
|
|
|
var addLegacyBootPkg bool
|
|
var addUEFIBootPkg bool
|
|
|
|
switch bt := t.getBootType(); bt {
|
|
case distro.LegacyBootType:
|
|
addLegacyBootPkg = true
|
|
case distro.UEFIBootType:
|
|
addUEFIBootPkg = true
|
|
case distro.HybridBootType:
|
|
addLegacyBootPkg = true
|
|
addUEFIBootPkg = true
|
|
default:
|
|
panic(fmt.Sprintf("unsupported boot type: %q", bt))
|
|
}
|
|
|
|
ps := rpmmd.PackageSet{}
|
|
|
|
switch t.arch.Name() {
|
|
case distro.X86_64ArchName:
|
|
if addLegacyBootPkg {
|
|
ps = ps.Append(x8664LegacyBootPackageSet(t))
|
|
}
|
|
if addUEFIBootPkg {
|
|
ps = ps.Append(x8664UEFIBootPackageSet(t))
|
|
}
|
|
|
|
case distro.Aarch64ArchName:
|
|
ps = ps.Append(aarch64UEFIBootPackageSet(t))
|
|
|
|
case distro.Ppc64leArchName:
|
|
ps = ps.Append(ppc64leLegacyBootPackageSet(t))
|
|
|
|
case distro.S390xArchName:
|
|
ps = ps.Append(s390xLegacyBootPackageSet(t))
|
|
|
|
default:
|
|
panic(fmt.Sprintf("unsupported boot arch: %s", t.arch.Name()))
|
|
}
|
|
|
|
return ps
|
|
}
|
|
|
|
// x86_64 Legacy arch-specific boot package set
|
|
func x8664LegacyBootPackageSet(t *imageType) rpmmd.PackageSet {
|
|
return rpmmd.PackageSet{
|
|
Include: []string{
|
|
"dracut-config-generic",
|
|
"grub2-pc",
|
|
},
|
|
}
|
|
}
|
|
|
|
// x86_64 UEFI arch-specific boot package set
|
|
func x8664UEFIBootPackageSet(t *imageType) rpmmd.PackageSet {
|
|
return rpmmd.PackageSet{
|
|
Include: []string{
|
|
"dracut-config-generic",
|
|
"efibootmgr",
|
|
"grub2-efi-x64",
|
|
"shim-x64",
|
|
},
|
|
}
|
|
}
|
|
|
|
// aarch64 UEFI arch-specific boot package set
|
|
func aarch64UEFIBootPackageSet(t *imageType) rpmmd.PackageSet {
|
|
return rpmmd.PackageSet{
|
|
Include: []string{
|
|
"dracut-config-generic",
|
|
"efibootmgr",
|
|
"grub2-efi-aa64",
|
|
"grub2-tools",
|
|
"shim-aa64",
|
|
},
|
|
}
|
|
}
|
|
|
|
// ppc64le Legacy arch-specific boot package set
|
|
func ppc64leLegacyBootPackageSet(t *imageType) rpmmd.PackageSet {
|
|
return rpmmd.PackageSet{
|
|
Include: []string{
|
|
"dracut-config-generic",
|
|
"grub2-ppc64le",
|
|
"grub2-ppc64le-modules",
|
|
"powerpc-utils",
|
|
},
|
|
}
|
|
}
|
|
|
|
// s390x Legacy arch-specific boot package set
|
|
func s390xLegacyBootPackageSet(t *imageType) rpmmd.PackageSet {
|
|
return rpmmd.PackageSet{
|
|
Include: []string{"dracut-config-generic", "s390utils-base"},
|
|
}
|
|
}
|
|
|
|
// OS package sets
|
|
|
|
func qcow2CommonPackageSet(t *imageType) rpmmd.PackageSet {
|
|
ps := rpmmd.PackageSet{
|
|
Include: []string{
|
|
"@core",
|
|
"authselect-compat",
|
|
"chrony",
|
|
"cloud-init",
|
|
"cloud-utils-growpart",
|
|
"cockpit-system",
|
|
"cockpit-ws",
|
|
"dhcp-client",
|
|
"dnf",
|
|
"dnf-utils",
|
|
"dosfstools",
|
|
"dracut-norescue",
|
|
"net-tools",
|
|
"NetworkManager",
|
|
"nfs-utils",
|
|
"oddjob",
|
|
"oddjob-mkhomedir",
|
|
"psmisc",
|
|
"python3-jsonschema",
|
|
"qemu-guest-agent",
|
|
"redhat-release",
|
|
"redhat-release-eula",
|
|
"rsync",
|
|
"tar",
|
|
"tcpdump",
|
|
"yum",
|
|
},
|
|
Exclude: []string{
|
|
"aic94xx-firmware",
|
|
"alsa-firmware",
|
|
"alsa-lib",
|
|
"alsa-tools-firmware",
|
|
"biosdevname",
|
|
"dnf-plugin-spacewalk",
|
|
"dracut-config-rescue",
|
|
"fedora-release",
|
|
"fedora-repos",
|
|
"firewalld",
|
|
"fwupd",
|
|
"iprutils",
|
|
"ivtv-firmware",
|
|
"iwl1000-firmware",
|
|
"iwl100-firmware",
|
|
"iwl105-firmware",
|
|
"iwl135-firmware",
|
|
"iwl2000-firmware",
|
|
"iwl2030-firmware",
|
|
"iwl3160-firmware",
|
|
"iwl3945-firmware",
|
|
"iwl4965-firmware",
|
|
"iwl5000-firmware",
|
|
"iwl5150-firmware",
|
|
"iwl6000-firmware",
|
|
"iwl6000g2a-firmware",
|
|
"iwl6000g2b-firmware",
|
|
"iwl6050-firmware",
|
|
"iwl7260-firmware",
|
|
"langpacks-*",
|
|
"langpacks-en",
|
|
"langpacks-en",
|
|
"libertas-sd8686-firmware",
|
|
"libertas-sd8787-firmware",
|
|
"libertas-usb8388-firmware",
|
|
"nss",
|
|
"plymouth",
|
|
"rng-tools",
|
|
"udisks2",
|
|
},
|
|
}.Append(bootPackageSet(t)).Append(distroSpecificPackageSet(t))
|
|
|
|
// Ensure to not pull in subscription-manager on non-RHEL distro
|
|
if t.arch.distro.isRHEL() {
|
|
ps = ps.Append(rpmmd.PackageSet{
|
|
Include: []string{
|
|
"subscription-manager-cockpit",
|
|
},
|
|
})
|
|
}
|
|
|
|
return ps
|
|
}
|
|
|
|
func vmdkCommonPackageSet(t *imageType) rpmmd.PackageSet {
|
|
return rpmmd.PackageSet{
|
|
Include: []string{
|
|
"@core",
|
|
"chrony",
|
|
"cloud-init",
|
|
"firewalld",
|
|
"langpacks-en",
|
|
"open-vm-tools",
|
|
"selinux-policy-targeted",
|
|
},
|
|
Exclude: []string{
|
|
"dracut-config-rescue",
|
|
"rng-tools",
|
|
},
|
|
}.Append(bootPackageSet(t))
|
|
|
|
}
|
|
|
|
func openstackCommonPackageSet(t *imageType) rpmmd.PackageSet {
|
|
return rpmmd.PackageSet{
|
|
Include: []string{
|
|
// Defaults
|
|
"@Core", "langpacks-en",
|
|
|
|
// From the lorax kickstart
|
|
"selinux-policy-targeted", "cloud-init", "qemu-guest-agent",
|
|
"spice-vdagent",
|
|
},
|
|
Exclude: []string{
|
|
"dracut-config-rescue", "rng-tools",
|
|
},
|
|
}.Append(bootPackageSet(t))
|
|
|
|
}
|
|
|
|
// common GCE image
|
|
func gceCommonPackageSet(t *imageType) rpmmd.PackageSet {
|
|
return rpmmd.PackageSet{
|
|
Include: []string{
|
|
"@core",
|
|
"langpacks-en", // not in Google's KS
|
|
"acpid",
|
|
"dhcp-client",
|
|
"dnf-automatic",
|
|
"net-tools",
|
|
//"openssh-server", included in core
|
|
"python3",
|
|
"rng-tools",
|
|
"tar",
|
|
"vim",
|
|
|
|
// GCE guest tools
|
|
"google-compute-engine",
|
|
"google-osconfig-agent",
|
|
"gce-disk-expand",
|
|
|
|
// Not explicitly included in GCP kickstart, but present on the image
|
|
// for time synchronization
|
|
"chrony",
|
|
"timedatex",
|
|
// EFI
|
|
"grub2-tools-efi",
|
|
},
|
|
Exclude: []string{
|
|
"alsa-utils",
|
|
"b43-fwcutter",
|
|
"dmraid",
|
|
"eject",
|
|
"gpm",
|
|
"irqbalance",
|
|
"microcode_ctl",
|
|
"smartmontools",
|
|
"aic94xx-firmware",
|
|
"atmel-firmware",
|
|
"b43-openfwwf",
|
|
"bfa-firmware",
|
|
"ipw2100-firmware",
|
|
"ipw2200-firmware",
|
|
"ivtv-firmware",
|
|
"iwl100-firmware",
|
|
"iwl1000-firmware",
|
|
"iwl3945-firmware",
|
|
"iwl4965-firmware",
|
|
"iwl5000-firmware",
|
|
"iwl5150-firmware",
|
|
"iwl6000-firmware",
|
|
"iwl6000g2a-firmware",
|
|
"iwl6050-firmware",
|
|
"kernel-firmware",
|
|
"libertas-usb8388-firmware",
|
|
"ql2100-firmware",
|
|
"ql2200-firmware",
|
|
"ql23xx-firmware",
|
|
"ql2400-firmware",
|
|
"ql2500-firmware",
|
|
"rt61pci-firmware",
|
|
"rt73usb-firmware",
|
|
"xorg-x11-drv-ati-firmware",
|
|
"zd1211-firmware",
|
|
// RHBZ#2075815
|
|
"qemu-guest-agent",
|
|
},
|
|
}.Append(bootPackageSet(t)).Append(distroSpecificPackageSet(t))
|
|
}
|
|
|
|
// GCE BYOS image
|
|
func gcePackageSet(t *imageType) rpmmd.PackageSet {
|
|
return gceCommonPackageSet(t)
|
|
}
|
|
|
|
// GCE RHUI image
|
|
func gceRhuiPackageSet(t *imageType) rpmmd.PackageSet {
|
|
return rpmmd.PackageSet{
|
|
Include: []string{
|
|
"google-rhui-client-rhel8",
|
|
},
|
|
}.Append(gceCommonPackageSet(t))
|
|
}
|
|
|
|
func bareMetalPackageSet(t *imageType) rpmmd.PackageSet {
|
|
ps := rpmmd.PackageSet{
|
|
Include: []string{
|
|
"@core",
|
|
"authselect-compat",
|
|
"chrony",
|
|
"cockpit-system",
|
|
"cockpit-ws",
|
|
"dhcp-client",
|
|
"dnf",
|
|
"dnf-utils",
|
|
"dosfstools",
|
|
"dracut-norescue",
|
|
"iwl1000-firmware",
|
|
"iwl100-firmware",
|
|
"iwl105-firmware",
|
|
"iwl135-firmware",
|
|
"iwl2000-firmware",
|
|
"iwl2030-firmware",
|
|
"iwl3160-firmware",
|
|
"iwl3945-firmware",
|
|
"iwl4965-firmware",
|
|
"iwl5000-firmware",
|
|
"iwl5150-firmware",
|
|
"iwl6000-firmware",
|
|
"iwl6000g2a-firmware",
|
|
"iwl6000g2b-firmware",
|
|
"iwl6050-firmware",
|
|
"iwl7260-firmware",
|
|
"lvm2",
|
|
"net-tools",
|
|
"NetworkManager",
|
|
"nfs-utils",
|
|
"oddjob",
|
|
"oddjob-mkhomedir",
|
|
"policycoreutils",
|
|
"psmisc",
|
|
"python3-jsonschema",
|
|
"qemu-guest-agent",
|
|
"redhat-release",
|
|
"redhat-release-eula",
|
|
"rsync",
|
|
"selinux-policy-targeted",
|
|
"tar",
|
|
"tcpdump",
|
|
"yum",
|
|
},
|
|
Exclude: nil,
|
|
}.Append(bootPackageSet(t)).Append(distroSpecificPackageSet(t))
|
|
|
|
// Ensure to not pull in subscription-manager on non-RHEL distro
|
|
if t.arch.distro.isRHEL() {
|
|
ps = ps.Append(rpmmd.PackageSet{
|
|
Include: []string{
|
|
"subscription-manager-cockpit",
|
|
},
|
|
})
|
|
}
|
|
|
|
return ps
|
|
}
|
|
|
|
// packages that are only in some (sub)-distributions
|
|
func distroSpecificPackageSet(t *imageType) rpmmd.PackageSet {
|
|
if t.arch.distro.isRHEL() {
|
|
return rpmmd.PackageSet{
|
|
Include: []string{"insights-client"},
|
|
}
|
|
}
|
|
return rpmmd.PackageSet{}
|
|
}
|
|
|
|
// INSTALLER PACKAGE SET
|
|
|
|
func installerPackageSet(t *imageType) rpmmd.PackageSet {
|
|
ps := rpmmd.PackageSet{
|
|
Include: []string{
|
|
"anaconda-dracut",
|
|
"curl",
|
|
"dracut-config-generic",
|
|
"dracut-network",
|
|
"hostname",
|
|
"iwl100-firmware",
|
|
"iwl1000-firmware",
|
|
"iwl105-firmware",
|
|
"iwl135-firmware",
|
|
"iwl2000-firmware",
|
|
"iwl2030-firmware",
|
|
"iwl3160-firmware",
|
|
"iwl5000-firmware",
|
|
"iwl5150-firmware",
|
|
"iwl6000-firmware",
|
|
"iwl6050-firmware",
|
|
"iwl7260-firmware",
|
|
"kernel",
|
|
"less",
|
|
"nfs-utils",
|
|
"openssh-clients",
|
|
"ostree",
|
|
"plymouth",
|
|
"prefixdevname",
|
|
"rng-tools",
|
|
"rpcbind",
|
|
"selinux-policy-targeted",
|
|
"systemd",
|
|
"tar",
|
|
"xfsprogs",
|
|
"xz",
|
|
},
|
|
}
|
|
|
|
switch t.arch.Name() {
|
|
case distro.X86_64ArchName:
|
|
ps = ps.Append(rpmmd.PackageSet{
|
|
Include: []string{
|
|
"biosdevname",
|
|
},
|
|
})
|
|
}
|
|
|
|
return ps
|
|
}
|
|
|
|
func anacondaPackageSet(t *imageType) rpmmd.PackageSet {
|
|
|
|
// common installer packages
|
|
ps := installerPackageSet(t)
|
|
|
|
ps = ps.Append(rpmmd.PackageSet{
|
|
Include: []string{
|
|
"aajohan-comfortaa-fonts",
|
|
"abattis-cantarell-fonts",
|
|
"alsa-firmware",
|
|
"alsa-tools-firmware",
|
|
"anaconda",
|
|
"anaconda-install-env-deps",
|
|
"anaconda-widgets",
|
|
"audit",
|
|
"bind-utils",
|
|
"bitmap-fangsongti-fonts",
|
|
"bzip2",
|
|
"cryptsetup",
|
|
"dbus-x11",
|
|
"dejavu-sans-fonts",
|
|
"dejavu-sans-mono-fonts",
|
|
"device-mapper-persistent-data",
|
|
"dnf",
|
|
"dump",
|
|
"ethtool",
|
|
"fcoe-utils",
|
|
"ftp",
|
|
"gdb-gdbserver",
|
|
"gdisk",
|
|
"gfs2-utils",
|
|
"glibc-all-langpacks",
|
|
"google-noto-sans-cjk-ttc-fonts",
|
|
"gsettings-desktop-schemas",
|
|
"hdparm",
|
|
"hexedit",
|
|
"initscripts",
|
|
"ipmitool",
|
|
"iwl3945-firmware",
|
|
"iwl4965-firmware",
|
|
"iwl6000g2a-firmware",
|
|
"iwl6000g2b-firmware",
|
|
"jomolhari-fonts",
|
|
"kacst-farsi-fonts",
|
|
"kacst-qurn-fonts",
|
|
"kbd",
|
|
"kbd-misc",
|
|
"kdump-anaconda-addon",
|
|
"khmeros-base-fonts",
|
|
"libblockdev-lvm-dbus",
|
|
"libertas-sd8686-firmware",
|
|
"libertas-sd8787-firmware",
|
|
"libertas-usb8388-firmware",
|
|
"libertas-usb8388-olpc-firmware",
|
|
"libibverbs",
|
|
"libreport-plugin-bugzilla",
|
|
"libreport-plugin-reportuploader",
|
|
"libreport-rhel-anaconda-bugzilla",
|
|
"librsvg2",
|
|
"linux-firmware",
|
|
"lklug-fonts",
|
|
"lldpad",
|
|
"lohit-assamese-fonts",
|
|
"lohit-bengali-fonts",
|
|
"lohit-devanagari-fonts",
|
|
"lohit-gujarati-fonts",
|
|
"lohit-gurmukhi-fonts",
|
|
"lohit-kannada-fonts",
|
|
"lohit-odia-fonts",
|
|
"lohit-tamil-fonts",
|
|
"lohit-telugu-fonts",
|
|
"lsof",
|
|
"madan-fonts",
|
|
"metacity",
|
|
"mtr",
|
|
"mt-st",
|
|
"net-tools",
|
|
"nmap-ncat",
|
|
"nm-connection-editor",
|
|
"nss-tools",
|
|
"openssh-server",
|
|
"oscap-anaconda-addon",
|
|
"pciutils",
|
|
"perl-interpreter",
|
|
"pigz",
|
|
"python3-pyatspi",
|
|
"rdma-core",
|
|
"redhat-release-eula",
|
|
"rpm-ostree",
|
|
"rsync",
|
|
"rsyslog",
|
|
"sg3_utils",
|
|
"sil-abyssinica-fonts",
|
|
"sil-padauk-fonts",
|
|
"sil-scheherazade-fonts",
|
|
"smartmontools",
|
|
"smc-meera-fonts",
|
|
"spice-vdagent",
|
|
"strace",
|
|
"system-storage-manager",
|
|
"thai-scalable-waree-fonts",
|
|
"tigervnc-server-minimal",
|
|
"tigervnc-server-module",
|
|
"udisks2",
|
|
"udisks2-iscsi",
|
|
"usbutils",
|
|
"vim-minimal",
|
|
"volume_key",
|
|
"wget",
|
|
"xfsdump",
|
|
"xorg-x11-drivers",
|
|
"xorg-x11-fonts-misc",
|
|
"xorg-x11-server-utils",
|
|
"xorg-x11-server-Xorg",
|
|
"xorg-x11-xauth",
|
|
},
|
|
})
|
|
|
|
ps = ps.Append(anacondaBootPackageSet(t))
|
|
|
|
switch t.arch.Name() {
|
|
case distro.X86_64ArchName:
|
|
ps = ps.Append(rpmmd.PackageSet{
|
|
Include: []string{
|
|
"biosdevname",
|
|
"dmidecode",
|
|
"memtest86+",
|
|
},
|
|
})
|
|
|
|
case distro.Aarch64ArchName:
|
|
ps = ps.Append(rpmmd.PackageSet{
|
|
Include: []string{
|
|
"dmidecode",
|
|
},
|
|
})
|
|
|
|
default:
|
|
panic(fmt.Sprintf("unsupported arch: %s", t.arch.Name()))
|
|
}
|
|
|
|
return ps
|
|
}
|