diff --git a/Makefile b/Makefile
index b265755d..9375a763 100644
--- a/Makefile
+++ b/Makefile
@@ -5,7 +5,7 @@ PACKER_LOG ?= '1'
PACKER_LOG_PATH = .spel/$(SPEL_VERSION)/packer.log
CHECKPOINT_DISABLE ?= '1'
SPEL_CI ?= false
-SPEL_BUILDERS ?= amazon-ebs.minimal-rhel-7-hvm,amazon-ebs.minimal-centos-7-hvm,amazon-ebs.minimal-rhel-8-hvm,amazon-ebs.minimal-centos-8stream-hvm,amazon-ebs.minimal-ol-8-hvm
+SPEL_BUILDERS ?= amazon-ebssurrogate.minimal-rhel-7-hvm,amazon-ebssurrogate.minimal-centos-7-hvm,amazon-ebssurrogate.minimal-rhel-8-hvm,amazon-ebssurrogate.minimal-centos-8stream-hvm,amazon-ebssurrogate.minimal-ol-8-hvm
BUILDER_REGION = $(or $(PKR_VAR_aws_region),$(AWS_REGION))
export PATH := $(HOME)/bin:$(PATH)
diff --git a/README.md b/README.md
index d1ca2a8f..33faf971 100644
--- a/README.md
+++ b/README.md
@@ -390,18 +390,18 @@ For all inputs to the template, see [spel/README.md](spel/README.md)
The Minimal Linux `packer` template includes the following builders:
-| Builder Name | Description |
-|-----------------------------------------|-----------------------------------------------------------|
-| `amazon-ebs.minimal-centos-8stream-hvm` | amazon-ebs builder for a minimal CentOS Stream 8 HVM AMI |
-| `amazon-ebs.minimal-ol-8-hvm` | amazon-ebs builder for a minimal Oracle Linux 8 HVM AMI |
-| `amazon-ebs.minimal-rhel-8-hvm` | amazon-ebs builder for a minimal RHEL 8 HVM AMI |
-| `amazon-ebs.minimal-centos-7-hvm` | amazon-ebs builder for a minimal CentOS 7 HVM AMI |
-| `amazon-ebs.minimal-rhel-7-hvm` | amazon-ebs builder for a minimal RHEL 7 HVM AMI |
-| `azure-arm.minimal-centos-7-image` | azure-arm builder for a minimal CentOS 7 Image |
-| `azure-arm.minimal-rhel-7-image` | azure-arm builder for a minimal RHEL 7 Image |
-| `azure-arm.minimal-rhel-8-image` | azure-arm builder for a minimal RHEL 8 Image |
-| `openstack.minimal-centos-7-image` | openstack builder for a minimal CentOS 7 Image |
-| `virtualbox-iso.minimal-centos-7-image` | virtualbox-iso builder for a minimal CentOS 7 Vagrant Box |
+| Builder Name | Description |
+|--------------------------------------------------|-----------------------------------------------------------|
+| `amazon-ebssurrogate.minimal-centos-8stream-hvm` | amazon-ebs builder for a minimal CentOS Stream 8 HVM AMI |
+| `amazon-ebssurrogate.minimal-ol-8-hvm` | amazon-ebs builder for a minimal Oracle Linux 8 HVM AMI |
+| `amazon-ebssurrogate.minimal-rhel-8-hvm` | amazon-ebs builder for a minimal RHEL 8 HVM AMI |
+| `amazon-ebssurrogate.minimal-centos-7-hvm` | amazon-ebs builder for a minimal CentOS 7 HVM AMI |
+| `amazon-ebssurrogate.minimal-rhel-7-hvm` | amazon-ebs builder for a minimal RHEL 7 HVM AMI |
+| `azure-arm.minimal-centos-7-image` | azure-arm builder for a minimal CentOS 7 Image |
+| `azure-arm.minimal-rhel-7-image` | azure-arm builder for a minimal RHEL 7 Image |
+| `azure-arm.minimal-rhel-8-image` | azure-arm builder for a minimal RHEL 8 Image |
+| `openstack.minimal-centos-7-image` | openstack builder for a minimal CentOS 7 Image |
+| `virtualbox-iso.minimal-centos-7-image` | virtualbox-iso builder for a minimal CentOS 7 Vagrant Box |
### Minimal Linux Packer Post-Provisioners
diff --git a/build/build.sh b/build/build.sh
index ab4eda8b..78976551 100644
--- a/build/build.sh
+++ b/build/build.sh
@@ -35,7 +35,7 @@ then
SUCCESS_BUILDERS=$(IFS=, ; echo "${SUCCESS_BUILDS[*]}")
echo "Successful builds being tested: ${SUCCESS_BUILDERS}"
packer build \
- -only "$SUCCESS_BUILDERS" \
+ -only "${SUCCESS_BUILDERS//amazon-ebssurrogate./amazon-ebs.}" \
-var "spel_identifier=${SPEL_IDENTIFIER:?}" \
-var "spel_version=${SPEL_VERSION:?}" \
tests/minimal-linux.pkr.hcl
diff --git a/spel/README.md b/spel/README.md
index 6b5e64c2..c9029800 100644
--- a/spel/README.md
+++ b/spel/README.md
@@ -47,7 +47,6 @@ No resources.
| [amigen\_aws\_cfnbootstrap](#input\_amigen\_aws\_cfnbootstrap) | URL of the tar.gz bundle containing the CFN bootstrap utilities | `string` | `"https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-py3-latest.tar.gz"` | no |
| [amigen\_aws\_cliv1\_source](#input\_amigen\_aws\_cliv1\_source) | URL of the .zip bundle containing the installer for AWS CLI v1 | `string` | `""` | no |
| [amigen\_aws\_cliv2\_source](#input\_amigen\_aws\_cliv2\_source) | URL of the .zip bundle containing the installer for AWS CLI v2 | `string` | `"https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip"` | no |
-| [amigen\_build\_device](#input\_amigen\_build\_device) | Path of the build device that will be partitioned to create the image | `string` | `"/dev/nvme0n1"` | no |
| [amigen\_fips\_disable](#input\_amigen\_fips\_disable) | Toggles whether FIPS will be disabled in the images | `bool` | `false` | no |
| [amigen\_grub\_timeout](#input\_amigen\_grub\_timeout) | Timeout value to set in the grub config of each image | `number` | `1` | no |
| [amigen\_use\_default\_repos](#input\_amigen\_use\_default\_repos) | Modifies the behavior of `amigen_repo_names`. When true, `amigen_repo_names` are appended to the enabled repos. When false, `amigen_repo_names` are used exclusively | `bool` | `true` | no |
diff --git a/spel/minimal-linux.pkr.hcl b/spel/minimal-linux.pkr.hcl
index f8364ef2..2a93f80e 100644
--- a/spel/minimal-linux.pkr.hcl
+++ b/spel/minimal-linux.pkr.hcl
@@ -6,7 +6,7 @@ packer {
required_plugins {
amazon = {
source = "github.com/hashicorp/amazon"
- version = "~> 1"
+ version = ">= 1.3.1"
}
azure = {
source = "github.com/hashicorp/azure"
@@ -434,12 +434,6 @@ variable "virtualbox_vagrantcloud_username" {
# Variables used by all AMIGEN platforms
###
-variable "amigen_build_device" {
- description = "Path of the build device that will be partitioned to create the image"
- type = string
- default = "/dev/nvme0n1"
-}
-
variable "amigen_amiutils_source_url" {
description = "URL of the AMI Utils repo to be cloned using git, containing AWS utility rpms that will be installed to the AMIs"
type = string
@@ -834,23 +828,39 @@ variable "spel_version" {
# Start of source blocks
###
-source "amazon-ebs" "base" {
+source "amazon-ebssurrogate" "base" {
+ ami_root_device {
+ source_device_name = "/dev/xvdf"
+ delete_on_termination = true
+ device_name = "/dev/sda1"
+ volume_size = var.spel_root_volume_size
+ volume_type = "gp3"
+ }
ami_groups = var.aws_ami_groups
ami_name = "${var.spel_identifier}-${source.name}-${var.spel_version}.x86_64-gp3"
ami_regions = var.aws_ami_regions
ami_users = var.aws_ami_users
+ ami_virtualization_type = "hvm"
associate_public_ip_address = true
communicator = "ssh"
- deprecate_at = local.aws_ami_deprecate_at
- ena_support = true
- force_deregister = var.aws_force_deregister
- instance_type = var.aws_instance_type
+ # Not yet supported for ebssurrogate builder, see:
+ # * https://github.com/hashicorp/packer-plugin-amazon/issues/478
+ # deprecate_at = local.aws_ami_deprecate_at
+ ena_support = true
+ force_deregister = var.aws_force_deregister
+ instance_type = var.aws_instance_type
launch_block_device_mappings {
delete_on_termination = true
device_name = "/dev/sda1"
volume_size = var.spel_root_volume_size
volume_type = "gp3"
}
+ launch_block_device_mappings {
+ delete_on_termination = true
+ device_name = "/dev/xvdf"
+ volume_size = var.spel_root_volume_size
+ volume_type = "gp3"
+ }
max_retries = 20
region = var.aws_region
sriov_support = true
@@ -870,6 +880,7 @@ source "amazon-ebs" "base" {
subnet_id = var.aws_subnet_id
tags = { Name = "" } # Empty name tag avoids inheriting "Packer Builder"
temporary_security_group_source_cidrs = var.aws_temporary_security_group_source_cidrs
+ use_create_image = true
user_data_file = "${path.root}/userdata/userdata.cloud"
}
@@ -902,7 +913,6 @@ source "azure-arm" "base" {
vm_size = var.azure_vm_size
}
-
source "openstack" "base" {
flavor = var.openstack_flavor
floating_ip_network = var.openstack_floating_ip_network_name
@@ -979,7 +989,7 @@ locals {
# AMIgen builds
build {
- source "amazon-ebs.base" {
+ source "amazon-ebssurrogate.base" {
ami_description = format(local.description, "CentOS 7 AMI")
name = "minimal-centos-7-hvm"
source_ami_filter {
@@ -993,7 +1003,7 @@ build {
}
}
- source "amazon-ebs.base" {
+ source "amazon-ebssurrogate.base" {
ami_description = format(local.description, "CentOS Stream 8 AMI")
name = "minimal-centos-8stream-hvm"
source_ami_filter {
@@ -1007,7 +1017,7 @@ build {
}
}
- source "amazon-ebs.base" {
+ source "amazon-ebssurrogate.base" {
ami_description = format(local.description, "CentOS Stream 9 AMI")
name = "minimal-centos-9stream-hvm"
source_ami_filter {
@@ -1021,7 +1031,7 @@ build {
}
}
- source "amazon-ebs.base" {
+ source "amazon-ebssurrogate.base" {
ami_description = format(local.description, "Oracle Linux 8 AMI")
name = "minimal-ol-8-hvm"
source_ami_filter {
@@ -1035,7 +1045,7 @@ build {
}
}
- source "amazon-ebs.base" {
+ source "amazon-ebssurrogate.base" {
ami_description = format(local.description, "Oracle Linux 9 AMI")
name = "minimal-ol-9-hvm"
source_ami_filter {
@@ -1049,7 +1059,7 @@ build {
}
}
- source "amazon-ebs.base" {
+ source "amazon-ebssurrogate.base" {
ami_description = format(local.description, "RHEL 7 AMI")
name = "minimal-rhel-7-hvm"
source_ami_filter {
@@ -1063,7 +1073,7 @@ build {
}
}
- source "amazon-ebs.base" {
+ source "amazon-ebssurrogate.base" {
ami_description = format(local.description, "RHEL 8 AMI")
name = "minimal-rhel-8-hvm"
source_ami_filter {
@@ -1077,7 +1087,7 @@ build {
}
}
- source "amazon-ebs.base" {
+ source "amazon-ebssurrogate.base" {
ami_description = format(local.description, "RHEL 9 AMI")
name = "minimal-rhel-9-hvm"
source_ami_filter {
@@ -1127,7 +1137,7 @@ build {
# Azure EL7 provisioners
provisioner "shell" {
- execute_command = "chmod +x {{ .Path }}; {{ .Vars }} sudo -E sh -ex '{{ .Path }}'"
+ execute_command = "{{ .Vars }} sudo -E sh -ex '{{ .Path }}'"
inline = [
"yum update -y --disablerepo='*' --enablerepo='*microsoft*'",
]
@@ -1137,28 +1147,12 @@ build {
]
}
- # Azure EL8 provisioners
- provisioner "shell" {
- execute_command = "chmod +x {{ .Path }}; {{ .Vars }} sudo -E sh -ex '{{ .Path }}'"
- inline = [
- "/usr/bin/cloud-init status --wait",
- "setenforce 0 || true",
- "yum -y update",
- ]
- only = [
- "azure-arm.minimal-rhel-8-image",
- ]
- }
-
# Common provisioners
provisioner "shell" {
environment_vars = [
"DNF_VAR_ociregion=",
"DNF_VAR_ocidomain=oracle.com",
]
- except = [
- "azure-arm.minimal-rhel-8-image",
- ]
execute_command = "{{ .Vars }} sudo -E /bin/sh -ex '{{ .Path }}'"
inline = [
"/usr/bin/cloud-init status --wait",
@@ -1182,15 +1176,13 @@ build {
scripts = [
"${path.root}/scripts/builder-prep-9.sh",
]
- start_retry_timeout = "15m"
only = [
- "amazon-ebs.minimal-centos-9stream-hvm",
- "amazon-ebs.minimal-ol-9-hvm",
- "amazon-ebs.minimal-rhel-9-hvm",
+ "amazon-ebssurrogate.minimal-centos-9stream-hvm",
+ "amazon-ebssurrogate.minimal-ol-9-hvm",
+ "amazon-ebssurrogate.minimal-rhel-9-hvm",
]
}
-
provisioner "shell" {
environment_vars = [
"DNF_VAR_ociregion=",
@@ -1202,6 +1194,11 @@ build {
"${path.root}/scripts/pivot-root.sh",
]
start_retry_timeout = "15m"
+ only = [
+ "azure-arm.minimal-centos-7-image",
+ "azure-arm.minimal-rhel-7-image",
+ "azure-arm.minimal-rhel-8-image",
+ ]
}
provisioner "shell" {
@@ -1213,8 +1210,6 @@ build {
"fuser -vmk /oldroot",
]
only = [
- "amazon-ebs.minimal-centos-7-hvm",
- "amazon-ebs.minimal-rhel-7-hvm",
"azure-arm.minimal-centos-7-image",
"azure-arm.minimal-rhel-7-image",
]
@@ -1225,11 +1220,8 @@ build {
scripts = [
"${path.root}/scripts/free-root.sh",
]
- except = [
- "amazon-ebs.minimal-centos-7-hvm",
- "amazon-ebs.minimal-rhel-7-hvm",
- "azure-arm.minimal-centos-7-image",
- "azure-arm.minimal-rhel-7-image",
+ only = [
+ "azure-arm.minimal-rhel-8-image",
]
}
@@ -1241,13 +1233,17 @@ build {
"echo Unmounting /oldroot",
"test $( grep -c /oldroot /proc/mounts ) -eq 0 || umount /oldroot",
]
+ only = [
+ "azure-arm.minimal-centos-7-image",
+ "azure-arm.minimal-rhel-7-image",
+ "azure-arm.minimal-rhel-8-image",
+ ]
}
# AWS EL7 provisioners
provisioner "shell" {
environment_vars = [
"SPEL_AMIGENBRANCH=${var.amigen7_source_branch}",
- "SPEL_AMIGENBUILDDEV=${var.amigen_build_device}",
"SPEL_AMIGENCHROOT=/mnt/ec2-root",
"SPEL_AMIGENMANFST=${var.amigen7_package_manifest}",
"SPEL_AMIGENPKGGRP=${local.amigen7_package_groups}",
@@ -1269,11 +1265,12 @@ build {
"SPEL_FIPSDISABLE=${var.amigen_fips_disable}",
"SPEL_GRUBTMOUT=${var.amigen_grub_timeout}",
"SPEL_USEDEFAULTREPOS=${var.amigen_use_default_repos}",
+ "SPEL_USEROOTDEVICE=false",
]
execute_command = "{{ .Vars }} sudo -E /bin/sh '{{ .Path }}'"
only = [
- "amazon-ebs.minimal-centos-7-hvm",
- "amazon-ebs.minimal-rhel-7-hvm",
+ "amazon-ebssurrogate.minimal-centos-7-hvm",
+ "amazon-ebssurrogate.minimal-rhel-7-hvm",
]
scripts = [
"${path.root}/scripts/amigen7-build.sh",
@@ -1290,7 +1287,6 @@ build {
"SPEL_AMIGENBOOTDEVSZ=${var.amigen8_bootdev_size}",
"SPEL_AMIGENBOOTSIZE=17m",
"SPEL_AMIGENBRANCH=${var.amigen8_source_branch}",
- "SPEL_AMIGENBUILDDEV=${var.amigen_build_device}",
"SPEL_AMIGENCHROOT=/mnt/ec2-root",
"SPEL_AMIGENMANFST=${var.amigen8_package_manifest}",
"SPEL_AMIGENPKGGRP=${local.amigen8_package_groups}",
@@ -1307,12 +1303,13 @@ build {
"SPEL_FIPSDISABLE=${var.amigen_fips_disable}",
"SPEL_GRUBTMOUT=${var.amigen_grub_timeout}",
"SPEL_USEDEFAULTREPOS=${var.amigen_use_default_repos}",
+ "SPEL_USEROOTDEVICE=false",
]
execute_command = "{{ .Vars }} sudo -E /bin/sh '{{ .Path }}'"
only = [
- "amazon-ebs.minimal-centos-8stream-hvm",
- "amazon-ebs.minimal-ol-8-hvm",
- "amazon-ebs.minimal-rhel-8-hvm",
+ "amazon-ebssurrogate.minimal-centos-8stream-hvm",
+ "amazon-ebssurrogate.minimal-ol-8-hvm",
+ "amazon-ebssurrogate.minimal-rhel-8-hvm",
]
scripts = [
"${path.root}/scripts/amigen8-build.sh",
@@ -1329,7 +1326,6 @@ build {
"SPEL_AMIGENBOOTDEVSZ=${var.amigen9_boot_dev_size}",
"SPEL_AMIGENBOOTDEVSZMLT=${var.amigen9_boot_dev_size_mult}",
"SPEL_AMIGENBRANCH=${var.amigen9_source_branch}",
- "SPEL_AMIGENBUILDDEV=${var.amigen_build_device}",
"SPEL_AMIGENCHROOT=/mnt/ec2-root",
"SPEL_AMIGENMANFST=${var.amigen9_package_manifest}",
"SPEL_AMIGENPKGGRP=${local.amigen9_package_groups}",
@@ -1348,12 +1344,13 @@ build {
"SPEL_FIPSDISABLE=${var.amigen_fips_disable}",
"SPEL_GRUBTMOUT=${var.amigen_grub_timeout}",
"SPEL_USEDEFAULTREPOS=${var.amigen_use_default_repos}",
+ "SPEL_USEROOTDEVICE=false",
]
execute_command = "{{ .Vars }} sudo -E /bin/sh '{{ .Path }}'"
only = [
- "amazon-ebs.minimal-centos-9stream-hvm",
- "amazon-ebs.minimal-ol-9-hvm",
- "amazon-ebs.minimal-rhel-9-hvm",
+ "amazon-ebssurrogate.minimal-centos-9stream-hvm",
+ "amazon-ebssurrogate.minimal-ol-9-hvm",
+ "amazon-ebssurrogate.minimal-rhel-9-hvm",
]
scripts = [
"${path.root}/scripts/amigen9-build.sh",
diff --git a/spel/scripts/amigen7-build.sh b/spel/scripts/amigen7-build.sh
index 459c6e59..cadf0018 100644
--- a/spel/scripts/amigen7-build.sh
+++ b/spel/scripts/amigen7-build.sh
@@ -7,7 +7,6 @@
PROGNAME="$(basename "$0")"
AMIGENBOOTSIZE="${SPEL_AMIGENBOOTSIZE:-500m}"
AMIGENBRANCH="${SPEL_AMIGENBRANCH:-master}"
-AMIGENBUILDDEV="${SPEL_AMIGENBUILDDEV:-/dev/nvme0n1}"
AMIGENCHROOT="${SPEL_AMIGENCHROOT:-/mnt/ec2-root}"
AMIGENFSTYPE="${SPEL_AMIGENFSTYPE:-ext4}"
AMIGENMANFST="${SPEL_AMIGENMANFST}"
@@ -33,6 +32,7 @@ FIPSDISABLE="${SPEL_FIPSDISABLE}"
GRUBTMOUT="${SPEL_GRUBTMOUT:-5}"
HTTP_PROXY="${SPEL_HTTP_PROXY}"
USEDEFAULTREPOS="${SPEL_USEDEFAULTREPOS:-true}"
+USEROOTDEVICE="${SPEL_USEROOTDEVICE:-true}"
read -r -a BUILDDEPS <<< "${SPEL_BUILDDEPS:-lvm2 parted yum-utils unzip git}"
@@ -360,6 +360,45 @@ function ComposeDiskSetupString {
fi
}
+function PrepBuildDevice {
+ local ROOT_DEV
+ local ROOT_DISK
+ local DISKS
+
+ # Select the disk to use for the build
+ err_exit "Detecting the root device..." NONE
+ ROOT_DEV="$( grep ' / ' /proc/mounts | cut -d " " -f 1 )"
+ if [[ ${ROOT_DEV} == /dev/nvme* ]]
+ then
+ ROOT_DISK="${ROOT_DEV//p*/}"
+ IFS=" " read -r -a DISKS <<< "$(echo /dev/nvme*n1)"
+ else
+ err_exit "ERROR: This script supports nvme device naming. Could not determine root disk from device name: ${ROOT_DEV}"
+ fi
+
+ if [[ "$USEROOTDEVICE" = "true" ]]
+ then
+ AMIGENBUILDDEV="${ROOT_DISK}"
+ elif [[ ${#DISKS[@]} -gt 2 ]]
+ then
+ err_exit "ERROR: This script supports at most 2 attached disks. Detected ${#DISKS[*]} disks"
+ else
+ AMIGENBUILDDEV="$(echo "${DISKS[@]/$ROOT_DISK}" | tr -d '[:space:]')"
+ fi
+ err_exit "Using ${AMIGENBUILDDEV} as the build device." NONE
+
+ # Make sure the disk has a GPT label
+ err_exit "Checking ${AMIGENBUILDDEV} for a GPT label..." NONE
+ if ! blkid "$AMIGENBUILDDEV"
+ then
+ err_exit "No label detected. Creating GPT label on ${AMIGENBUILDDEV}..." NONE
+ parted -s "$AMIGENBUILDDEV" -- mklabel gpt
+ blkid "$AMIGENBUILDDEV"
+ err_exit "Created empty GPT configuration on ${AMIGENBUILDDEV}" NONE
+ else
+ err_exit "GPT label detected on ${AMIGENBUILDDEV}" NONE
+ fi
+}
set -x
set -e
@@ -443,6 +482,9 @@ then
done
fi
+# Prepare the build device
+PrepBuildDevice
+
# Invoke disk-partitioner
ComposeDiskSetupString
bash -euxo pipefail "${ELBUILD}/DiskSetup.sh" "${DISKSETUPARGS[@]}" || \
diff --git a/spel/scripts/amigen8-build.sh b/spel/scripts/amigen8-build.sh
index 4ff9e991..954e3a69 100755
--- a/spel/scripts/amigen8-build.sh
+++ b/spel/scripts/amigen8-build.sh
@@ -10,7 +10,6 @@ AMIGENBOOTDEVMULT="${SPEL_AMIGENBOOTDEVMULT:-1.2}"
AMIGENBOOTDEVSZ="${SPEL_AMIGENBOOTDEVSZ:-1024}"
AMIGENBOOTSIZE="${SPEL_AMIGENBOOTSIZE}"
AMIGENBRANCH="${SPEL_AMIGENBRANCH:-master}"
-AMIGENBUILDDEV="${SPEL_AMIGENBUILDDEV:-/dev/xvda}"
AMIGENCHROOT="${SPEL_AMIGENCHROOT:-/mnt/ec2-root}"
AMIGENFSTYPE="${SPEL_AMIGENFSTYPE:-xfs}"
AMIGENICNCTURL="${SPEL_AMIGENICNCTURL}"
@@ -35,6 +34,7 @@ FIPSDISABLE="${SPEL_FIPSDISABLE}"
GRUBTMOUT="${SPEL_GRUBTMOUT:-5}"
HTTP_PROXY="${SPEL_HTTP_PROXY}"
USEDEFAULTREPOS="${SPEL_USEDEFAULTREPOS:-true}"
+USEROOTDEVICE="${SPEL_USEROOTDEVICE:-true}"
read -r -a BUILDDEPS <<< "${SPEL_BUILDDEPS:-lvm2 yum-utils unzip git}"
@@ -184,6 +184,9 @@ retry()
function BuildChroot {
local STATUS_MSG
+ # Prepare the build device
+ PrepBuildDevice
+
# Invoke disk-partitioner
bash -euxo pipefail "${ELBUILD}"/$( ComposeDiskSetupString ) || \
err_exit "Failure encountered with DiskSetup.sh"
@@ -549,6 +552,46 @@ function PostBuildString {
echo "${POSTBUILDCMD}"
}
+function PrepBuildDevice {
+ local ROOT_DEV
+ local ROOT_DISK
+ local DISKS
+
+ # Select the disk to use for the build
+ err_exit "Detecting the root device..." NONE
+ ROOT_DEV="$( grep ' / ' /proc/mounts | cut -d " " -f 1 )"
+ if [[ ${ROOT_DEV} == /dev/nvme* ]]
+ then
+ ROOT_DISK="${ROOT_DEV//p*/}"
+ IFS=" " read -r -a DISKS <<< "$(echo /dev/nvme*n1)"
+ else
+ err_exit "ERROR: This script supports nvme device naming. Could not determine root disk from device name: ${ROOT_DEV}"
+ fi
+
+ if [[ "$USEROOTDEVICE" = "true" ]]
+ then
+ AMIGENBUILDDEV="${ROOT_DISK}"
+ elif [[ ${#DISKS[@]} -gt 2 ]]
+ then
+ err_exit "ERROR: This script supports at most 2 attached disks. Detected ${#DISKS[*]} disks"
+ else
+ AMIGENBUILDDEV="$(echo "${DISKS[@]/$ROOT_DISK}" | tr -d '[:space:]')"
+ fi
+ err_exit "Using ${AMIGENBUILDDEV} as the build device." NONE
+
+ # Make sure the disk has a GPT label
+ err_exit "Checking ${AMIGENBUILDDEV} for a GPT label..." NONE
+ if ! blkid "$AMIGENBUILDDEV"
+ then
+ err_exit "No label detected. Creating GPT label on ${AMIGENBUILDDEV}..." NONE
+ parted -s "$AMIGENBUILDDEV" -- mklabel gpt
+ blkid "$AMIGENBUILDDEV"
+ err_exit "Created empty GPT configuration on ${AMIGENBUILDDEV}" NONE
+ else
+ err_exit "GPT label detected on ${AMIGENBUILDDEV}" NONE
+ fi
+}
+
# Disable strict hostkey checking
function DisableStrictHostCheck {
local HOSTVAL
diff --git a/spel/scripts/amigen9-build.sh b/spel/scripts/amigen9-build.sh
index 278abe5a..3d73c019 100755
--- a/spel/scripts/amigen9-build.sh
+++ b/spel/scripts/amigen9-build.sh
@@ -9,7 +9,6 @@ PROGNAME="$(basename "$0")"
AMIGENBOOTSIZE="${SPEL_AMIGENBOOTDEVSZ:-768}"
AMIGENBOOTLABL="${SPEL_AMIGENBOOTDEVLBL:-boot_disk}"
AMIGENBRANCH="${SPEL_AMIGENBRANCH:-main}"
-AMIGENBUILDDEV="${SPEL_AMIGENBUILDDEV:-/dev/nvme0n1}"
AMIGENCHROOT="${SPEL_AMIGENCHROOT:-/mnt/ec2-root}"
AMIGENFSTYPE="${SPEL_AMIGENFSTYPE:-xfs}"
AMIGENICNCTURL="${SPEL_AMIGENICNCTURL}"
@@ -34,10 +33,9 @@ FIPSDISABLE="${SPEL_FIPSDISABLE}"
GRUBTMOUT="${SPEL_GRUBTMOUT:-5}"
HTTP_PROXY="${SPEL_HTTP_PROXY}"
USEDEFAULTREPOS="${SPEL_USEDEFAULTREPOS:-true}"
+USEROOTDEVICE="${SPEL_USEROOTDEVICE:-true}"
-read -r -a BUILDDEPS <<< "${SPEL_BUILDDEPS:-lvm2 yum-utils unzip git dosfstools python3-pip}"
-
ELBUILD="/tmp/el-build"
# Make interactive-execution more-verbose unless explicitly told not to
@@ -174,6 +172,9 @@ retry()
function BuildChroot {
local STATUS_MSG
+ # Prepare the build device
+ PrepBuildDevice
+
# Invoke disk-partitioner
bash -euxo pipefail "${ELBUILD}"/$( ComposeDiskSetupString ) || \
err_exit "Failure encountered with DiskSetup.sh"
@@ -552,27 +553,45 @@ function PostBuildString {
echo "${POSTBUILDCMD}"
}
-# Disable strict hostkey checking
-function DisableStrictHostCheck {
- local HOSTVAL
+function PrepBuildDevice {
+ local ROOT_DEV
+ local ROOT_DISK
+ local DISKS
- if [[ ${1:-} == '' ]]
+ # Select the disk to use for the build
+ err_exit "Detecting the root device..." NONE
+ ROOT_DEV="$( grep ' / ' /proc/mounts | cut -d " " -f 1 )"
+ if [[ ${ROOT_DEV} == /dev/nvme* ]]
then
- err_exit "No connect-string passed to function [${0}]"
+ ROOT_DISK="${ROOT_DEV//p*/}"
+ IFS=" " read -r -a DISKS <<< "$(echo /dev/nvme*n1)"
else
- HOSTVAL="$( sed -e 's/^.*@//' -e 's/:.*$//' <<< "${1}" )"
+ err_exit "ERROR: This script supports nvme device naming. Could not determine root disk from device name: ${ROOT_DEV}"
fi
- # Git host-target parameters
- err_exit "Disabling SSH's strict hostkey checking for ${HOSTVAL}" NONE
- (
- printf "Host %s\n" "${HOSTVAL}"
- printf " Hostname %s\n" "${HOSTVAL}"
- printf " StrictHostKeyChecking off\n"
- ) >> "${HOME}/.ssh/config" || \
- err_exit "Failed disabling SSH's strict hostkey checking"
-}
+ if [[ "$USEROOTDEVICE" = "true" ]]
+ then
+ AMIGENBUILDDEV="${ROOT_DISK}"
+ elif [[ ${#DISKS[@]} -gt 2 ]]
+ then
+ err_exit "ERROR: This script supports at most 2 attached disks. Detected ${#DISKS[*]} disks"
+ else
+ AMIGENBUILDDEV="$(echo "${DISKS[@]/$ROOT_DISK}" | tr -d '[:space:]')"
+ fi
+ err_exit "Using ${AMIGENBUILDDEV} as the build device." NONE
+ # Make sure the disk has a GPT label
+ err_exit "Checking ${AMIGENBUILDDEV} for a GPT label..." NONE
+ if ! blkid "$AMIGENBUILDDEV"
+ then
+ err_exit "No label detected. Creating GPT label on ${AMIGENBUILDDEV}..." NONE
+ parted -s "$AMIGENBUILDDEV" -- mklabel gpt
+ blkid "$AMIGENBUILDDEV"
+ err_exit "Created empty GPT configuration on ${AMIGENBUILDDEV}" NONE
+ else
+ err_exit "GPT label detected on ${AMIGENBUILDDEV}" NONE
+ fi
+}
##########################
## Main program section ##
@@ -582,14 +601,6 @@ set -x
set -e
set -o pipefail
-# Dismount /oldroot as needed
-if [[ $( mountpoint /oldroot ) =~ "is a mountpoint" ]]
-then
- err_exit "Dismounting /oldroot..." NONE
- umount /oldroot || \
- err_exit "Failed dismounting /oldroot"
-fi
-
echo "Restarting networkd/resolved for DNS resolution"
systemctl restart systemd-networkd systemd-resolved
@@ -604,19 +615,5 @@ fi
# Pull build-tools from git clone-source
git clone --branch "${AMIGENBRANCH}" "${AMIGENSOURCE}" "${ELBUILD}"
-echo "(Re-)Stopping remaining services"
-for SERVICE in $(
- systemctl list-units --type=service --state=running | \
- awk '/loaded active running/{ print $1 }' | \
- grep -Ev '(audit|sshd|systemd-networkd|systemd-resolved|user@)'
-)
-do
- echo "Killing ${SERVICE}"
- systemctl stop "${SERVICE}"
-done
-
-echo "Sleeping for 15s to let everything settle..."
-sleep 15
-
# Execute build-tools
BuildChroot
diff --git a/tests/minimal-linux.pkr.hcl b/tests/minimal-linux.pkr.hcl
index 91edc449..f3ec17ac 100644
--- a/tests/minimal-linux.pkr.hcl
+++ b/tests/minimal-linux.pkr.hcl
@@ -5,42 +5,42 @@ variable "aws_region" {
variable "aws_source_ami_centos7_hvm" {
type = string
- default = env("amazon_ebs_minimal_centos_7_hvm")
+ default = env("amazon_ebssurrogate_minimal_centos_7_hvm")
}
variable "aws_source_ami_centos8stream_hvm" {
type = string
- default = env("amazon_ebs_minimal_centos_8stream_hvm")
+ default = env("amazon_ebssurrogate_minimal_centos_8stream_hvm")
}
variable "aws_source_ami_centos9stream_hvm" {
type = string
- default = env("amazon_ebs_minimal_centos_9stream_hvm")
+ default = env("amazon_ebssurrogate_minimal_centos_9stream_hvm")
}
variable "aws_source_ami_ol_8_hvm" {
type = string
- default = env("amazon_ebs_minimal_ol_8_hvm")
+ default = env("amazon_ebssurrogate_minimal_ol_8_hvm")
}
variable "aws_source_ami_ol_9_hvm" {
type = string
- default = env("amazon_ebs_minimal_ol_9_hvm")
+ default = env("amazon_ebssurrogate_minimal_ol_9_hvm")
}
variable "aws_source_ami_rhel7_hvm" {
type = string
- default = env("amazon_ebs_minimal_rhel_7_hvm")
+ default = env("amazon_ebssurrogate_minimal_rhel_7_hvm")
}
variable "aws_source_ami_rhel8_hvm" {
type = string
- default = env("amazon_ebs_minimal_rhel_8_hvm")
+ default = env("amazon_ebssurrogate_minimal_rhel_8_hvm")
}
variable "aws_source_ami_rhel9_hvm" {
type = string
- default = env("amazon_ebs_minimal_rhel_9_hvm")
+ default = env("amazon_ebssurrogate_minimal_rhel_9_hvm")
}
variable "aws_ssh_interface" {