diff options
Diffstat (limited to 'tiny-ec2-bootstrap')
-rw-r--r-- | tiny-ec2-bootstrap | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/tiny-ec2-bootstrap b/tiny-ec2-bootstrap new file mode 100644 index 0000000..510f4f7 --- /dev/null +++ b/tiny-ec2-bootstrap | |||
@@ -0,0 +1,66 @@ | |||
1 | #!/sbin/openrc-run | ||
2 | # vim:set ft=bash: | ||
3 | |||
4 | description="Provides EC2 cloud bootstrap" | ||
5 | |||
6 | depend() { | ||
7 | need net | ||
8 | provide cloud-final | ||
9 | } | ||
10 | |||
11 | _get_metadata() { | ||
12 | local uri="$1" | ||
13 | wget -qO - "http://169.254.169.254/latest/$uri" 2>/dev/null | ||
14 | } | ||
15 | |||
16 | _update_hostname() { | ||
17 | local ec2_fqdn="$(_get_metadata meta-data/hostname)" | ||
18 | local short_hostname="${ec2_fqdn%%\.*}" | ||
19 | echo "$short_hostname" > /etc/hostname | ||
20 | hostname -F /etc/hostname | ||
21 | echo -e "127.0.1.1\t$ec2_fqdn $short_hostname" >> /etc/hosts | ||
22 | } | ||
23 | |||
24 | _set_ssh_keys() { | ||
25 | local user="$1" | ||
26 | local group="$(getent passwd $user | cut -d: -f4)" | ||
27 | local ssh_dir="$(getent passwd $user | cut -d: -f6)/.ssh" | ||
28 | local keys_file="$ssh_dir/authorized_keys" | ||
29 | |||
30 | if [ ! -d "$ssh_dir" ]; then | ||
31 | mkdir -p "$ssh_dir" | ||
32 | chmod 755 "$ssh_dir" | ||
33 | fi | ||
34 | |||
35 | [ -f "$keys_file" ] && rm "$keys_file" | ||
36 | |||
37 | touch "$keys_file" | ||
38 | chmod 600 "$keys_file" | ||
39 | chown -R $user:$group "$ssh_dir" | ||
40 | |||
41 | for key in "$(_get_metadata meta-data/public-keys/)"; do | ||
42 | echo $(_get_metadata "meta-data/public-keys/${key%=*}/openssh-key/") >> "$keys_file" | ||
43 | done | ||
44 | } | ||
45 | |||
46 | _run_userdata() { | ||
47 | user_data=$(_get_metadata user-data) | ||
48 | if echo $user_data | grep '^#!/' 2>&1 >/dev/null; then | ||
49 | echo "$user_data" > /var/lib/cloud/user-data.sh | ||
50 | chmod +x /var/lib/cloud/user-data.sh | ||
51 | /var/lib/cloud/user-data.sh > /var/log/cloud-bootstrap.log 2>&1 | ||
52 | fi | ||
53 | } | ||
54 | |||
55 | start() { | ||
56 | # Don't bootstrap if the host has already been bootstrapped | ||
57 | [ -f "/var/lib/cloud/.bootstrap-complete" ] && return 0 | ||
58 | |||
59 | [ -d "/var/lib/cloud" ] || mkdir -p /var/lib/cloud | ||
60 | |||
61 | ebegin "Setting ec2 hostname"; _update_hostname; eend $? | ||
62 | ebegin "Setting ec2 user ssh keys"; _set_ssh_keys "alpine"; eend $? | ||
63 | ebegin "Running ec2 user data script"; _run_userdata; eend $? | ||
64 | |||
65 | touch "/var/lib/cloud/.bootstrap-complete" | ||
66 | } | ||