summaryrefslogtreecommitdiff
path: root/distrib/utils
diff options
context:
space:
mode:
authorjmcneill <jmcneill@NetBSD.org>2022-10-15 18:32:30 +0000
committerjmcneill <jmcneill@NetBSD.org>2022-10-15 18:32:30 +0000
commit40e6bb2f060cb7fe74abca76980fe53cf76e2032 (patch)
treef167f47fefdcaac5c7002ec1cc596380328b8d5d /distrib/utils
parentdbddedca78d61438f25297ab34fba48811c6105e (diff)
ec2_init: Add support for Oracle Cloud
Diffstat (limited to 'distrib/utils')
-rw-r--r--distrib/utils/embedded/conf/arm64.conf4
-rw-r--r--distrib/utils/embedded/conf/evbarm.conf20
-rw-r--r--distrib/utils/embedded/files/ec2_init40
3 files changed, 50 insertions, 14 deletions
diff --git a/distrib/utils/embedded/conf/arm64.conf b/distrib/utils/embedded/conf/arm64.conf
index 40bb5a8a793..5da16ab7b43 100644
--- a/distrib/utils/embedded/conf/arm64.conf
+++ b/distrib/utils/embedded/conf/arm64.conf
@@ -1,4 +1,4 @@
-# $NetBSD: arm64.conf,v 1.14 2021/10/16 14:05:48 jmcneill Exp $
+# $NetBSD: arm64.conf,v 1.15 2022/10/15 18:32:30 jmcneill Exp $
# ARM64 customization script used by mkimage
#
board=arm64
@@ -28,7 +28,7 @@ customize() {
mdnsd=YES
devpubd=YES
wscons=\$(dev_exists wsdisplay0)
-ec2_init=\$(dev_exists ena0)
+ec2_init=\$(is_cloud)
if checkyesno ec2_init ; then
dhcpcd_flags="\$dhcpcd_flags -w"
else
diff --git a/distrib/utils/embedded/conf/evbarm.conf b/distrib/utils/embedded/conf/evbarm.conf
index de1ba3b6dca..b5d27bd7ca4 100644
--- a/distrib/utils/embedded/conf/evbarm.conf
+++ b/distrib/utils/embedded/conf/evbarm.conf
@@ -1,4 +1,4 @@
-# $NetBSD: evbarm.conf,v 1.39 2021/07/06 11:49:36 jmcneill Exp $
+# $NetBSD: evbarm.conf,v 1.40 2022/10/15 18:32:30 jmcneill Exp $
# evbarm shared config
#
image=$HOME/${board}.img
@@ -145,6 +145,24 @@ dev_exists() {
fi
}
+is_cloud() {
+ ret=NO
+
+ # AWS EC2
+ if [ "\$(dev_exists ena0)" = "YES" ]; then
+ ret=YES
+ fi
+
+ # Oracle OCI
+ case "\$(/sbin/sysctl -n machdep.dmi.chassis-asset-tag)" in
+ OracleCloud*)
+ ret=YES
+ ;;
+ esac
+
+ printf \$ret
+}
+
rc_configured=YES
hostname=${hostname:-${board}}
no_swap=YES
diff --git a/distrib/utils/embedded/files/ec2_init b/distrib/utils/embedded/files/ec2_init
index 3c6ea5c61f9..76bb165ed1f 100644
--- a/distrib/utils/embedded/files/ec2_init
+++ b/distrib/utils/embedded/files/ec2_init
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# $NetBSD: ec2_init,v 1.4 2021/07/20 19:31:23 rhialto Exp $
+# $NetBSD: ec2_init,v 1.5 2022/10/15 18:32:30 jmcneill Exp $
#
# PROVIDE: ec2_init
# REQUIRE: NETWORKING
@@ -13,9 +13,27 @@ rcvar=${name}
start_cmd="ec2_init"
stop_cmd=":"
-EC2_USER="ec2-user"
-METADATA_URL="http://169.254.169.254/latest/meta-data/"
-SSH_KEY_URL="public-keys/0/openssh-key"
+CLOUD_TYPE=EC2 # default
+
+case "$(/sbin/sysctl -n machdep.dmi.chassis-asset-tag)" in
+OracleCloud*)
+ CLOUD_TYPE=OCI
+ ;;
+esac
+
+case ${CLOUD_TYPE} in
+EC2)
+ EC2_USER="ec2-user"
+ METADATA_URL="http://169.254.169.254/latest/meta-data/"
+ SSH_KEY_URL="public-keys/0/openssh-key"
+ ;;
+OCI)
+ EC2_USER="opc"
+ METADATA_URL="http://169.254.169.254/opc/v1/instance/"
+ SSH_KEY_URL="metadata/ssh_authorized_keys"
+ ;;
+esac
+
HOSTNAME_URL="hostname"
SSH_KEY_FILE="/home/${EC2_USER}/.ssh/authorized_keys"
@@ -24,7 +42,7 @@ OS_METADATA_URL="http://169.254.169.254/openstack/latest/meta_data.json"
ec2_newuser()
{
- echo "Creating EC2 user account ${EC2_USER}"
+ echo "Creating ${CLOUD_TYPE} user account ${EC2_USER}"
useradd -g users -G wheel,operator -m "${EC2_USER}"
}
@@ -39,25 +57,25 @@ ec2_init()
umask 022
# set hostname; it may be 5-10 seconds for the metadata service
- # to become reachable.
+ # to become reachable.
try=0
while [ $((try++)) -lt 20 ]
do
HOSTNAME=$(ftp -o - -q 2 "${METADATA_URL}${HOSTNAME_URL}")
if [ -n "$HOSTNAME" ]; then
- echo "Setting EC2 hostname: ${HOSTNAME}"
+ echo "Setting ${CLOUD_TYPE} hostname: ${HOSTNAME}"
echo "$HOSTNAME" > /etc/myname
hostname "$HOSTNAME"
break
fi
- echo "EC2 hostname not available yet (try $try)"
+ echo "${CLOUD_TYPE} hostname not available yet (try $try)"
sleep 1
done
- # create EC2 user
+ # create cloud user
id "${EC2_USER}" >/dev/null 2>&1 || ec2_newuser
- # fetch the public key from Amazon Web Services
+ # fetch the public key from the metadata service
EC2_SSH_KEY=$(ftp -o - -q 2 "${METADATA_URL}${SSH_KEY_URL}")
if [ -n "$EC2_SSH_KEY" ]; then
@@ -71,7 +89,7 @@ ec2_init()
grep -q "$EC2_SSH_KEY" "$SSH_KEY_FILE"
if [ $? -ne 0 ]; then
- echo "Setting EC2 SSH public key for user ${EC2_USER}: ${EC2_SSH_KEY##* }"
+ echo "Setting ${CLOUD_TYPE} SSH public key for user ${EC2_USER}: ${EC2_SSH_KEY##* }"
echo "$EC2_SSH_KEY" >> "$SSH_KEY_FILE"
fi
fi