Add support for AWS Lightsail (#125)

Co-authored-by: Eric Litak <elitak@gmail.com>
This commit is contained in:
Scott Stephens 2022-12-19 23:31:13 -06:00 committed by GitHub
parent 263470891c
commit e72cd89d99
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 0 deletions

View file

@ -19,6 +19,7 @@ This script has successfully been tested on at least the follow hosting provider
* [Cockbox](https://cockbox.org) * [Cockbox](https://cockbox.org)
* [Google Cloud Platform](https://cloud.google.com/) * [Google Cloud Platform](https://cloud.google.com/)
* [Contabo](https://contabo.com) * [Contabo](https://contabo.com)
* [AWS Lightsail](https://aws.amazon.com/lightsail/)
* [Windcloud](https://windcloud.de/) * [Windcloud](https://windcloud.de/)
* [Clouding.io](https://clouding.io) * [Clouding.io](https://clouding.io)
@ -244,6 +245,13 @@ Tested on Cloud VPS. Contabo sets the hostname to something like `vmi######.cont
|------------|-----------------|-----------|----------| |------------|-----------------|-----------|----------|
|Ubuntu | 22.04 |**success**|2022-09-26| |Ubuntu | 22.04 |**success**|2022-09-26|
### AWS Lightsail
Make sure to set `PROVIDER="lightsail"`.
Setting a root ssh key manually is not necessary, the key provided as part of the instance launch process will be used.
If you run into issues, debug using the most similar ec2 instance that is on the Nitro platform. Nitro platform instances have a serial console that allow you to troubleshoot boot issues, and Lightsail instances are just EC2 with a different pricing model and UI.
### Windcloud ### Windcloud
Tested on vServer. The network configuration seems to be important so the same tweaks as for DigitalOcean are necessary (see above). Tested on vServer. The network configuration seems to be important so the same tweaks as for DigitalOcean are necessary (see above).
#### Tested on #### Tested on
@ -259,6 +267,7 @@ Requires the same static network settings that Digital Ocean does.
#### Tested on #### Tested on
|Distribution| Name | Status | test date| |Distribution| Name | Status | test date|
|------------|-----------------|-----------|----------| |------------|-----------------|-----------|----------|
|Debian | 11.4 |**success**|2022-12-12|
|Ubuntu | 20.04 | success |2022-11-26| |Ubuntu | 20.04 | success |2022-11-26|
### Clouding.io ### Clouding.io

25
nixos-infect Executable file → Normal file
View file

@ -7,6 +7,13 @@ set -e -o pipefail
makeConf() { makeConf() {
# Skip everything if main config already present # Skip everything if main config already present
[[ -e /etc/nixos/configuration.nix ]] && return 0 [[ -e /etc/nixos/configuration.nix ]] && return 0
# Lightsail config is not like the others
if [ "$PROVIDER" = "lightsail" ]; then
makeLightsailConf
return 0
fi
# NB <<"EOF" quotes / $ ` in heredocs, <<EOF does not # NB <<"EOF" quotes / $ ` in heredocs, <<EOF does not
mkdir -p /etc/nixos mkdir -p /etc/nixos
# Prevent grep for sending error code 1 (and halting execution) when no lines are selected : https://www.unix.com/man-page/posix/1P/grep # Prevent grep for sending error code 1 (and halting execution) when no lines are selected : https://www.unix.com/man-page/posix/1P/grep
@ -76,6 +83,16 @@ EOF
[[ -n "$doNetConf" ]] && makeNetworkingConf || true [[ -n "$doNetConf" ]] && makeNetworkingConf || true
} }
makeLightsailConf() {
mkdir -p /etc/nixos
cat > /etc/nixos/configuration.nix << EOF
{ config, pkgs, modulesPath, ... }:
{
imports = [ "\${modulesPath}/virtualisation/amazon-image.nix" ];
}
EOF
}
makeNetworkingConf() { makeNetworkingConf() {
# XXX It'd be better if we used procfs for all this... # XXX It'd be better if we used procfs for all this...
local IFS=$'\n' local IFS=$'\n'
@ -318,6 +335,12 @@ infect() {
# Reify resolv.conf # Reify resolv.conf
[[ -L /etc/resolv.conf ]] && mv -v /etc/resolv.conf /etc/resolv.conf.lnk && cat /etc/resolv.conf.lnk > /etc/resolv.conf [[ -L /etc/resolv.conf ]] && mv -v /etc/resolv.conf /etc/resolv.conf.lnk && cat /etc/resolv.conf.lnk > /etc/resolv.conf
# Set label of root partition
if [ -n "$newrootfslabel" ]; then
echo "Setting label of $rootfsdev to $newrootfslabel"
e2label "$rootfsdev" "$newrootfslabel"
fi
# Stage the Nix coup d'état # Stage the Nix coup d'état
touch /etc/NIXOS touch /etc/NIXOS
echo etc/nixos >> /etc/NIXOS_LUSTRATE echo etc/nixos >> /etc/NIXOS_LUSTRATE
@ -337,6 +360,8 @@ infect() {
/nix/var/nix/profiles/system/bin/switch-to-configuration boot /nix/var/nix/profiles/system/bin/switch-to-configuration boot
} }
[ "$PROVIDER" = "digitalocean" ] && doNetConf=y # digitalocean requires detailed network config to be generated
[ "$PROVIDER" = "lightsail" ] && newrootfslabel="nixos"
if [[ "$PROVIDER" = "digitalocean" ]] || [[ "$PROVIDER" = "servarica" ]]; then if [[ "$PROVIDER" = "digitalocean" ]] || [[ "$PROVIDER" = "servarica" ]]; then
doNetConf=y # some providers require detailed network config to be generated doNetConf=y # some providers require detailed network config to be generated
fi fi