From ca93edeb4ad51a907d16ed1b7c08fa97ff252fa9 Mon Sep 17 00:00:00 2001 From: Andrew Rynhard Date: Mon, 23 Jul 2018 21:19:33 -0700 Subject: [PATCH] feat(initramfs): set the platform explicitly (#124) --- src/image/src/entrypoint.sh | 9 +++++-- src/image/src/packer.json | 2 +- .../cmd/init/pkg/constants/constants.go | 4 +++ .../cmd/init/pkg/platform/platform.go | 26 +++++++++++++++---- 4 files changed, 33 insertions(+), 8 deletions(-) diff --git a/src/image/src/entrypoint.sh b/src/image/src/entrypoint.sh index 9f384d109..e92a051f8 100755 --- a/src/image/src/entrypoint.sh +++ b/src/image/src/entrypoint.sh @@ -108,7 +108,7 @@ DEFAULT Dianemo LABEL Dianemo KERNEL /boot/vmlinuz INITRD /boot/initramfs.xz - APPEND ip=dhcp consoleblank=0 console=tty0 console=ttyS0,9600 dianemo.autonomy.io/root=${DIANEMO_ROOT} dianemo.autonomy.io/userdata=${DIANEMO_USERDATA} + APPEND ip=dhcp consoleblank=0 console=tty0 console=ttyS0,9600 dianemo.autonomy.io/root=${DIANEMO_ROOT} dianemo.autonomy.io/userdata=${DIANEMO_USERDATA} dianemo.autonomy.io/platform=${DIANEMO_PLATFORM} EOF } @@ -122,6 +122,7 @@ function cleanup { DIANEMO_ROOT="sda" DIANEMO_USERDATA="" +DIANEMO_PLATFORM="bare-metal" RAW_IMAGE="/out/image.raw" VMDK_IMAGE="/out/image.vmdk" ISO_IMAGE="/out/image.iso" @@ -131,7 +132,7 @@ RAW=false case "$1" in image) shift - while getopts "b:flt:u:" opt; do + while getopts "b:flt:p:u:" opt; do case ${opt} in b ) DEVICE=${OPTARG} @@ -148,6 +149,10 @@ case "$1" in RAW=true echo "Using loop device ${RAW_IMAGE} as installation media" ;; + p ) + DIANEMO_PLATFORM=${OPTARG} + echo "Using kernel parameter dianemo.autonomy.io/platform=${DIANEMO_PLATFORM}" + ;; t ) DIANEMO_ROOT=${OPTARG} echo "Using kernel parameter dianemo.autonomy.io/root=${DIANEMO_ROOT}" diff --git a/src/image/src/packer.json b/src/image/src/packer.json index 768106944..38b46536f 100644 --- a/src/image/src/packer.json +++ b/src/image/src/packer.json @@ -70,7 +70,7 @@ "sudo add-apt-repository \"deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\"", "sudo apt-get -y update", "sudo apt-get -y install docker-ce", - "sudo docker run --privileged --volume /dev:/dev autonomy/dianemo:{{ user `version` }} image -b /dev/xvdf -t /dev/xvda -f -u none" + "sudo docker run --privileged --volume /dev:/dev autonomy/dianemo:{{ user `version` }} image -b /dev/xvdf -t /dev/xvda -f -p aws -u none" ] } ] diff --git a/src/initramfs/cmd/init/pkg/constants/constants.go b/src/initramfs/cmd/init/pkg/constants/constants.go index d15dd681e..b58cd9c92 100644 --- a/src/initramfs/cmd/init/pkg/constants/constants.go +++ b/src/initramfs/cmd/init/pkg/constants/constants.go @@ -9,6 +9,10 @@ const ( // to the user data. KernelParamUserData = "dianemo.autonomy.io/userdata" + // KernelParamPlatform is the kernel parameter name for specifying the + // platform. + KernelParamPlatform = "dianemo.autonomy.io/platform" + // NewRoot is the path where the switchroot target is mounted. NewRoot = "/root" diff --git a/src/initramfs/cmd/init/pkg/platform/platform.go b/src/initramfs/cmd/init/pkg/platform/platform.go index e751bc16d..526f105a3 100644 --- a/src/initramfs/cmd/init/pkg/platform/platform.go +++ b/src/initramfs/cmd/init/pkg/platform/platform.go @@ -3,6 +3,10 @@ package platform import ( + "fmt" + + "github.com/autonomy/dianemo/src/initramfs/cmd/init/pkg/constants" + "github.com/autonomy/dianemo/src/initramfs/cmd/init/pkg/kernel" "github.com/autonomy/dianemo/src/initramfs/cmd/init/pkg/platform/baremetal" "github.com/autonomy/dianemo/src/initramfs/cmd/init/pkg/platform/cloud/aws" "github.com/autonomy/dianemo/src/initramfs/pkg/userdata" @@ -17,11 +21,23 @@ type Platform interface { // NewPlatform is a helper func for discovering the current platform. func NewPlatform() (p Platform, err error) { - if aws.IsEC2() { - p = &aws.AWS{} - } else { - p = &baremetal.BareMetal{} + arguments, err := kernel.ParseProcCmdline() + if err != nil { + return + } + if platform, ok := arguments[constants.KernelParamPlatform]; ok { + switch platform { + case "aws": + if aws.IsEC2() { + p = &aws.AWS{} + } else { + return nil, fmt.Errorf("failed to verify EC2 PKCS7 signature") + } + case "bare-metal": + p = &baremetal.BareMetal{} + default: + return nil, fmt.Errorf("no platform specified") + } } - return p, nil }