Module Name:    src
Committed By:   jmcneill
Date:           Sat Oct 15 18:32:31 UTC 2022

Modified Files:
        src/distrib/utils/embedded/conf: arm64.conf evbarm.conf
        src/distrib/utils/embedded/files: ec2_init

Log Message:
ec2_init: Add support for Oracle Cloud


To generate a diff of this commit:
cvs rdiff -u -r1.14 -r1.15 src/distrib/utils/embedded/conf/arm64.conf
cvs rdiff -u -r1.39 -r1.40 src/distrib/utils/embedded/conf/evbarm.conf
cvs rdiff -u -r1.4 -r1.5 src/distrib/utils/embedded/files/ec2_init

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/distrib/utils/embedded/conf/arm64.conf
diff -u src/distrib/utils/embedded/conf/arm64.conf:1.14 src/distrib/utils/embedded/conf/arm64.conf:1.15
--- src/distrib/utils/embedded/conf/arm64.conf:1.14	Sat Oct 16 14:05:48 2021
+++ src/distrib/utils/embedded/conf/arm64.conf	Sat Oct 15 18:32:30 2022
@@ -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

Index: src/distrib/utils/embedded/conf/evbarm.conf
diff -u src/distrib/utils/embedded/conf/evbarm.conf:1.39 src/distrib/utils/embedded/conf/evbarm.conf:1.40
--- src/distrib/utils/embedded/conf/evbarm.conf:1.39	Tue Jul  6 11:49:36 2021
+++ src/distrib/utils/embedded/conf/evbarm.conf	Sat Oct 15 18:32:30 2022
@@ -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

Index: src/distrib/utils/embedded/files/ec2_init
diff -u src/distrib/utils/embedded/files/ec2_init:1.4 src/distrib/utils/embedded/files/ec2_init:1.5
--- src/distrib/utils/embedded/files/ec2_init:1.4	Tue Jul 20 19:31:23 2021
+++ src/distrib/utils/embedded/files/ec2_init	Sat Oct 15 18:32:30 2022
@@ -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/
 
 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

Reply via email to