]> git.ipfire.org Git - ipfire-2.x.git/commitdiff
Add initscript that automatically configures IPFire on AWS EC2
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 6 Jun 2018 11:19:17 +0000 (12:19 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 21 Jun 2018 15:45:40 +0000 (16:45 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
config/rootfiles/common/aarch64/initscripts
config/rootfiles/common/armv5tel/initscripts
config/rootfiles/common/i586/initscripts
config/rootfiles/common/x86_64/initscripts
lfs/initscripts
src/initscripts/system/aws [new file with mode: 0644]

index 9e9e1a71a50d893dae15ccbf7e324b12552993b0..6a40bc1ff09c317b7432d60859143be9f0fc243b 100644 (file)
@@ -5,6 +5,7 @@ etc/rc.d/helper/getdnsfromdhcpc.pl
 #etc/rc.d/init.d
 etc/rc.d/init.d/acpid
 etc/rc.d/init.d/apache
+etc/rc.d/init.d/aws
 etc/rc.d/init.d/beep
 etc/rc.d/init.d/checkfs
 etc/rc.d/init.d/cleanfs
@@ -184,6 +185,7 @@ etc/rc.d/rcsysinit.d/S50cleanfs
 etc/rc.d/rcsysinit.d/S60setclock
 etc/rc.d/rcsysinit.d/S70console
 etc/rc.d/rcsysinit.d/S73swconfig
+etc/rc.d/rcsysinit.d/S74aws
 etc/rc.d/rcsysinit.d/S75firstsetup
 etc/rc.d/rcsysinit.d/S80localnet
 etc/rc.d/rcsysinit.d/S81pakfire
index 9e9e1a71a50d893dae15ccbf7e324b12552993b0..6a40bc1ff09c317b7432d60859143be9f0fc243b 100644 (file)
@@ -5,6 +5,7 @@ etc/rc.d/helper/getdnsfromdhcpc.pl
 #etc/rc.d/init.d
 etc/rc.d/init.d/acpid
 etc/rc.d/init.d/apache
+etc/rc.d/init.d/aws
 etc/rc.d/init.d/beep
 etc/rc.d/init.d/checkfs
 etc/rc.d/init.d/cleanfs
@@ -184,6 +185,7 @@ etc/rc.d/rcsysinit.d/S50cleanfs
 etc/rc.d/rcsysinit.d/S60setclock
 etc/rc.d/rcsysinit.d/S70console
 etc/rc.d/rcsysinit.d/S73swconfig
+etc/rc.d/rcsysinit.d/S74aws
 etc/rc.d/rcsysinit.d/S75firstsetup
 etc/rc.d/rcsysinit.d/S80localnet
 etc/rc.d/rcsysinit.d/S81pakfire
index cc0e4580d8d1c65c75a3e584be48e5509a18230e..f3ea7922305eb5a3afc9fb78d63403f191152971 100644 (file)
@@ -5,6 +5,7 @@ etc/rc.d/helper/getdnsfromdhcpc.pl
 #etc/rc.d/init.d
 etc/rc.d/init.d/acpid
 etc/rc.d/init.d/apache
+etc/rc.d/init.d/aws
 etc/rc.d/init.d/beep
 etc/rc.d/init.d/checkfs
 etc/rc.d/init.d/cleanfs
@@ -182,6 +183,7 @@ etc/rc.d/rcsysinit.d/S45udev_retry
 etc/rc.d/rcsysinit.d/S50cleanfs
 etc/rc.d/rcsysinit.d/S60setclock
 etc/rc.d/rcsysinit.d/S70console
+etc/rc.d/rcsysinit.d/S74aws
 etc/rc.d/rcsysinit.d/S75firstsetup
 etc/rc.d/rcsysinit.d/S80localnet
 etc/rc.d/rcsysinit.d/S81pakfire
index cc0e4580d8d1c65c75a3e584be48e5509a18230e..f3ea7922305eb5a3afc9fb78d63403f191152971 100644 (file)
@@ -5,6 +5,7 @@ etc/rc.d/helper/getdnsfromdhcpc.pl
 #etc/rc.d/init.d
 etc/rc.d/init.d/acpid
 etc/rc.d/init.d/apache
+etc/rc.d/init.d/aws
 etc/rc.d/init.d/beep
 etc/rc.d/init.d/checkfs
 etc/rc.d/init.d/cleanfs
@@ -182,6 +183,7 @@ etc/rc.d/rcsysinit.d/S45udev_retry
 etc/rc.d/rcsysinit.d/S50cleanfs
 etc/rc.d/rcsysinit.d/S60setclock
 etc/rc.d/rcsysinit.d/S70console
+etc/rc.d/rcsysinit.d/S74aws
 etc/rc.d/rcsysinit.d/S75firstsetup
 etc/rc.d/rcsysinit.d/S80localnet
 etc/rc.d/rcsysinit.d/S81pakfire
index 0d7f40cadb8951c47ee6b18615ed4d7ac145d79f..9b611a2765bc2e323e7be680f58049bbfe5c80fc 100644 (file)
@@ -173,6 +173,7 @@ $(TARGET) :
        ln -sf ../init.d/setclock    /etc/rc.d/rc0.d/K47setclock
        ln -sf ../init.d/setclock    /etc/rc.d/rc6.d/K47setclock
        ln -sf ../init.d/console     /etc/rc.d/rcsysinit.d/S70console
+       ln -sf ../init.d/aws         /etc/rc.d/rcsysinit.d/S74aws
        ln -sf ../init.d/firstsetup  /etc/rc.d/rcsysinit.d/S75firstsetup
        ln -sf ../init.d/localnet    /etc/rc.d/rcsysinit.d/S80localnet
        ln -sf ../init.d/pakfire     /etc/rc.d/rcsysinit.d/S81pakfire
diff --git a/src/initscripts/system/aws b/src/initscripts/system/aws
new file mode 100644 (file)
index 0000000..a61834b
--- /dev/null
@@ -0,0 +1,103 @@
+#!/bin/sh
+########################################################################
+# Begin $rc_base/init.d/aws
+########################################################################
+
+. /etc/sysconfig/rc
+. ${rc_functions}
+
+MD_URL="http://169.254.169.254/latest/meta-data"
+
+# https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/identify_ec2_instances.html
+running_on_ec2() {
+       local uuid
+
+       # Check if the hypervisor UUID starts with ec2
+       if [ -r "/sys/hypervisor/uuid" ]; then
+               uuid=$(</sys/hypervisor/uuid)
+
+               [ "${uuid:0:3}" = "ec2" ] && return 0
+       fi
+
+       # Check if the DMI product UUID starts with EC2
+       if [ -r "/sys/devices/virtual/dmi/id/product_uuid" ]; then
+               uuid=$(</sys/devices/virtual/dmi/id/product_uuid)
+
+               [ "${uuid:0:3}" = "EC2" ] && return 0
+       fi
+
+       # We are not running on AWS EC2
+       return 1
+}
+
+case "${1}" in
+       start)
+               # Do nothing if we are not running on AWS EC2
+               running_on_ec2 || exit 0
+
+               boot_mesg "Setting up system to run on AWS EC2..."
+
+               # Find the first interface to use
+               for i in /sys/class/net/*; do
+                       [ -d "${i}" ] || continue
+                       i=$(basename ${i})
+
+                       # Skip loopback
+                       [ "${i}" = "lo" ] && continue
+
+                       # Use whatever we have found
+                       intf="${i}"
+                       break
+               done
+
+               # Check if we found a network interface
+               if [ ! -n "${intf}" ]; then
+                       echo_failure
+
+                       boot_mesg -n "Could not find a network interface" ${FAILURE}
+                       boot_mesg "" ${NORMAL}
+               fi
+
+               # Assign ourselves an IP address to communicate with the meta-data service
+               ip addr add 169.254.169.1/24 dev "${intf}"
+               ip link set "${intf}" up
+
+               # Initialise system settings
+               if [ ! -s "/var/ipfire/main/settings" ]; then
+                       hostname=$(curl ${MD_URL}/local-hostname)
+
+                       (
+                               echo "HOSTNAME=${hostname%%.*}"
+                               echo "DOMAINNAME=${hostname#*.}"
+                               echo "THEME=ipfire"
+                               echo "LANGUAGE=en"
+                               echo "KEYMAP=/lib/kbd/keymaps/i386/qwerty/us.map.gz"
+                               echo "TIMEZONE=/usr/share/zoneinfo/posix/UTC"
+                       ) > /var/ipfire/main/settings
+               fi
+
+               # Remove any IP addresses
+               ip addr flush dev "${intf}"
+               echo_ok
+
+               # This script has now completed the first steps of setup
+               touch /var/ipfire/main/firstsetup_ok
+               ;;
+
+       status)
+               if running_on_ec2; then
+                       echo "This system is running on AWS EC2"
+                       exit 0
+               else
+                       echo "This system is NOT running on AWS EC2"
+                       exit 1
+               fi
+               ;;
+
+       *)
+               echo "Usage: ${0} {start|status}"
+               exit 1
+               ;;
+esac
+
+# End $rc_base/init.d/aws