ec2_init revision 1.4
11.1Sjmcneill#!/bin/sh 21.1Sjmcneill# 31.4Srhialto# $NetBSD: ec2_init,v 1.4 2021/07/20 19:31:23 rhialto Exp $ 41.1Sjmcneill# 51.1Sjmcneill# PROVIDE: ec2_init 61.1Sjmcneill# REQUIRE: NETWORKING 71.1Sjmcneill# BEFORE: LOGIN 81.1Sjmcneill 91.1Sjmcneill$_rc_subr_loaded . /etc/rc.subr 101.1Sjmcneill 111.1Sjmcneillname="ec2_init" 121.1Sjmcneillrcvar=${name} 131.1Sjmcneillstart_cmd="ec2_init" 141.1Sjmcneillstop_cmd=":" 151.1Sjmcneill 161.2SjmcneillEC2_USER="ec2-user" 171.1SjmcneillMETADATA_URL="http://169.254.169.254/latest/meta-data/" 181.1SjmcneillSSH_KEY_URL="public-keys/0/openssh-key" 191.1SjmcneillHOSTNAME_URL="hostname" 201.1Sjmcneill 211.2SjmcneillSSH_KEY_FILE="/home/${EC2_USER}/.ssh/authorized_keys" 221.2Sjmcneill 231.3SrhialtoOS_METADATA_URL="http://169.254.169.254/openstack/latest/meta_data.json" 241.3Srhialto 251.2Sjmcneillec2_newuser() 261.2Sjmcneill{ 271.2Sjmcneill echo "Creating EC2 user account ${EC2_USER}" 281.2Sjmcneill useradd -g users -G wheel,operator -m "${EC2_USER}" 291.2Sjmcneill} 301.1Sjmcneill 311.4Srhialtoextract_random_seed() 321.4Srhialto{ 331.4Srhialto sed -n -e '/random_seed/s/.*"random_seed": *"\([A-Za-z0-9+/=]*\)".*/\1/p' 341.4Srhialto} 351.4Srhialto 361.1Sjmcneillec2_init() 371.1Sjmcneill{ 381.1Sjmcneill ( 391.1Sjmcneill umask 022 401.2Sjmcneill 411.3Srhialto # set hostname; it may be 5-10 seconds for the metadata service 421.3Srhialto # to become reachable. 431.3Srhialto try=0 441.3Srhialto while [ $((try++)) -lt 20 ] 451.3Srhialto do 461.4Srhialto HOSTNAME=$(ftp -o - -q 2 "${METADATA_URL}${HOSTNAME_URL}") 471.3Srhialto if [ -n "$HOSTNAME" ]; then 481.3Srhialto echo "Setting EC2 hostname: ${HOSTNAME}" 491.3Srhialto echo "$HOSTNAME" > /etc/myname 501.3Srhialto hostname "$HOSTNAME" 511.3Srhialto break 521.3Srhialto fi 531.3Srhialto echo "EC2 hostname not available yet (try $try)" 541.3Srhialto sleep 1 551.3Srhialto done 561.3Srhialto 571.2Sjmcneill # create EC2 user 581.2Sjmcneill id "${EC2_USER}" >/dev/null 2>&1 || ec2_newuser 591.2Sjmcneill 601.3Srhialto # fetch the public key from Amazon Web Services 611.4Srhialto EC2_SSH_KEY=$(ftp -o - -q 2 "${METADATA_URL}${SSH_KEY_URL}") 621.1Sjmcneill 631.1Sjmcneill if [ -n "$EC2_SSH_KEY" ]; then 641.1Sjmcneill # A key pair is associated with this instance, add it 651.2Sjmcneill # to EC2_USER's 'authorized_keys' file 661.1Sjmcneill mkdir -p $(dirname "$SSH_KEY_FILE") 671.2Sjmcneill chown "${EC2_USER}:users" $(dirname "$SSH_KEY_FILE") 681.1Sjmcneill touch "$SSH_KEY_FILE" 691.2Sjmcneill chown "${EC2_USER}:users" "$SSH_KEY_FILE" 701.1Sjmcneill cd $(dirname "$SSH_KEY_FILE") 711.1Sjmcneill 721.1Sjmcneill grep -q "$EC2_SSH_KEY" "$SSH_KEY_FILE" 731.1Sjmcneill if [ $? -ne 0 ]; then 741.3Srhialto echo "Setting EC2 SSH public key for user ${EC2_USER}: ${EC2_SSH_KEY##* }" 751.1Sjmcneill echo "$EC2_SSH_KEY" >> "$SSH_KEY_FILE" 761.1Sjmcneill fi 771.1Sjmcneill fi 781.1Sjmcneill 791.4Srhialto # May contain a "random_seed". 801.4Srhialto OS_METADATA="$(ftp -o - -q 2 ${OS_METADATA_URL})" 811.3Srhialto if echo "$OS_METADATA" | grep -q random_seed; then 821.4Srhialto echo "$OS_METADATA" | extract_random_seed | 831.4Srhialto base64 -di >> /dev/urandom 841.3Srhialto fi 851.1Sjmcneill ) 861.1Sjmcneill} 871.1Sjmcneill 881.1Sjmcneillload_rc_config $name 891.1Sjmcneillrun_rc_command "$1" 90