Home | History | Annotate | Line # | Download | only in files
ec2_init revision 1.3
      1  1.1  jmcneill #!/bin/sh
      2  1.1  jmcneill #
      3  1.3   rhialto # $NetBSD: ec2_init,v 1.3 2021/07/15 19:03:17 rhialto Exp $
      4  1.1  jmcneill #
      5  1.1  jmcneill # PROVIDE: ec2_init
      6  1.1  jmcneill # REQUIRE: NETWORKING
      7  1.1  jmcneill # BEFORE:  LOGIN
      8  1.1  jmcneill 
      9  1.1  jmcneill $_rc_subr_loaded . /etc/rc.subr
     10  1.1  jmcneill 
     11  1.1  jmcneill name="ec2_init"
     12  1.1  jmcneill rcvar=${name}
     13  1.1  jmcneill start_cmd="ec2_init"
     14  1.1  jmcneill stop_cmd=":"
     15  1.1  jmcneill 
     16  1.2  jmcneill EC2_USER="ec2-user"
     17  1.1  jmcneill METADATA_URL="http://169.254.169.254/latest/meta-data/"
     18  1.1  jmcneill SSH_KEY_URL="public-keys/0/openssh-key"
     19  1.1  jmcneill HOSTNAME_URL="hostname"
     20  1.1  jmcneill 
     21  1.2  jmcneill SSH_KEY_FILE="/home/${EC2_USER}/.ssh/authorized_keys"
     22  1.2  jmcneill 
     23  1.3   rhialto OS_METADATA_URL="http://169.254.169.254/openstack/latest/meta_data.json"
     24  1.3   rhialto 
     25  1.2  jmcneill ec2_newuser()
     26  1.2  jmcneill {
     27  1.2  jmcneill 	echo "Creating EC2 user account ${EC2_USER}"
     28  1.2  jmcneill 	useradd -g users -G wheel,operator -m "${EC2_USER}"
     29  1.2  jmcneill }
     30  1.1  jmcneill 
     31  1.1  jmcneill ec2_init()
     32  1.1  jmcneill {
     33  1.1  jmcneill 	(
     34  1.1  jmcneill 	umask 022
     35  1.2  jmcneill 
     36  1.3   rhialto 	# set hostname; it may be 5-10 seconds for the metadata service
     37  1.3   rhialto 	# to  become reachable.
     38  1.3   rhialto 	try=0
     39  1.3   rhialto 	while [ $((try++)) -lt 20 ]
     40  1.3   rhialto 	do
     41  1.3   rhialto 		HOSTNAME=$(ftp -o - -q 1 "${METADATA_URL}${HOSTNAME_URL}")
     42  1.3   rhialto 		if [ -n "$HOSTNAME" ]; then
     43  1.3   rhialto 			echo "Setting EC2 hostname: ${HOSTNAME}"
     44  1.3   rhialto 			echo "$HOSTNAME" > /etc/myname
     45  1.3   rhialto 			hostname "$HOSTNAME"
     46  1.3   rhialto 			break
     47  1.3   rhialto 		fi
     48  1.3   rhialto 		echo "EC2 hostname not available yet (try $try)"
     49  1.3   rhialto 		sleep 1
     50  1.3   rhialto 	done
     51  1.3   rhialto 
     52  1.2  jmcneill 	# create EC2 user
     53  1.2  jmcneill 	id "${EC2_USER}" >/dev/null 2>&1 || ec2_newuser
     54  1.2  jmcneill 
     55  1.3   rhialto 	# fetch the public key from Amazon Web Services
     56  1.3   rhialto 	EC2_SSH_KEY=$(ftp -o - -q 1 "${METADATA_URL}${SSH_KEY_URL}")
     57  1.1  jmcneill 
     58  1.1  jmcneill 	if [ -n "$EC2_SSH_KEY" ]; then
     59  1.1  jmcneill 		# A key pair is associated with this instance, add it
     60  1.2  jmcneill 		# to EC2_USER's 'authorized_keys' file
     61  1.1  jmcneill 		mkdir -p $(dirname "$SSH_KEY_FILE")
     62  1.2  jmcneill 		chown "${EC2_USER}:users" $(dirname "$SSH_KEY_FILE")
     63  1.1  jmcneill 		touch "$SSH_KEY_FILE"
     64  1.2  jmcneill 		chown "${EC2_USER}:users" "$SSH_KEY_FILE"
     65  1.1  jmcneill 		cd $(dirname "$SSH_KEY_FILE")
     66  1.1  jmcneill 
     67  1.1  jmcneill 		grep -q "$EC2_SSH_KEY" "$SSH_KEY_FILE"
     68  1.1  jmcneill 		if [ $? -ne 0 ]; then
     69  1.3   rhialto 			echo "Setting EC2 SSH public key for user ${EC2_USER}: ${EC2_SSH_KEY##* }"
     70  1.1  jmcneill 			echo "$EC2_SSH_KEY" >> "$SSH_KEY_FILE"
     71  1.1  jmcneill 		fi
     72  1.1  jmcneill 	fi
     73  1.1  jmcneill 
     74  1.3   rhialto 	# May contain a "random_seed". Everything else doesn't matter.
     75  1.3   rhialto 	OS_METADATA="$(ftp -o - -q 1 ${OS_METADATA_URL})"
     76  1.3   rhialto 	if echo "$OS_METADATA" | grep -q random_seed; then
     77  1.3   rhialto 		echo "$OS_METADATA" >> /dev/urandom
     78  1.3   rhialto 	fi
     79  1.1  jmcneill 	)
     80  1.1  jmcneill }
     81  1.1  jmcneill 
     82  1.1  jmcneill load_rc_config $name
     83  1.1  jmcneill run_rc_command "$1"
     84