mirror of
https://github.com/elitak/nixos-infect.git
synced 2024-12-22 16:18:29 +03:00
Support for Vultr
This commit is contained in:
parent
20853bf8d8
commit
5596ad166a
2 changed files with 41 additions and 7 deletions
37
README.md
37
README.md
|
@ -1,15 +1,25 @@
|
|||
This script aims to install NixOS on Digital Ocean droplets
|
||||
(starting from one of the distros that Digital Ocean supports out of the box)
|
||||
This script aims to install NixOS on Digital Ocean droplets, Vultr servers, or
|
||||
OVH Virtual Private Servers (starting from distros that these services upports
|
||||
out of the box)
|
||||
|
||||
These are the only supported Digital Ocean images:
|
||||
## Source Distros
|
||||
|
||||
This script has been tested and can install NixOS from the following source distros:
|
||||
|
||||
On Digital Ocean:
|
||||
- Fedora 24 x64
|
||||
- Ubuntu 16.04 x64
|
||||
|
||||
It has also been successfully tested on OVH Virtual Private Servers (with debian)
|
||||
On Vultr:
|
||||
- Ubuntu 18.10 x64
|
||||
|
||||
On OVH Virtual Private Servers (experimental):
|
||||
- Debian
|
||||
|
||||
YMMV with any other hoster + image combination.
|
||||
|
||||
## Considerations
|
||||
|
||||
nixos-infect is so named because of the high likelihood of rendering a system
|
||||
inoperable. Use with caution and preferably only on newly-provisioned
|
||||
systems.
|
||||
|
@ -20,6 +30,8 @@ runs to completion. Any errors halt execution. It's advised to run with
|
|||
inconsistent state, requiring a rebuild (in DigitalOcean panel: Droplet
|
||||
Settings -> "Destroy" -> "Rebuild from original").
|
||||
|
||||
## Digital Ocean
|
||||
|
||||
*TO USE:*
|
||||
- Add any custom config you want (see notes below)
|
||||
- Deploy the droplet indicated at the top of the file, enable ipv6, add your ssh key
|
||||
|
@ -32,7 +44,7 @@ cat and EOF in the Digital Ocean Web UI (or HTTP API):
|
|||
#cloud-config
|
||||
|
||||
runcmd:
|
||||
- curl https://raw.githubusercontent.com/elitak/nixos-infect/master/nixos-infect | NIX_CHANNEL=nixos-18.09 bash 2>&1 | tee /tmp/infect.log
|
||||
- curl https://raw.githubusercontent.com/elitak/nixos-infect/master/nixos-infect | PROVIDER=digitalocean NIX_CHANNEL=nixos-18.09 bash 2>&1 | tee /tmp/infect.log
|
||||
```
|
||||
Potential tweaks:
|
||||
- `/etc/nixos/{,hardware-}configuration.nix`: rudimentary mostly static config
|
||||
|
@ -50,10 +62,23 @@ write_files:
|
|||
environment.systemPackages = with pkgs; [ vim ];
|
||||
}
|
||||
runcmd:
|
||||
- curl https://raw.githubusercontent.com/elitak/nixos-infect/master/nixos-infect | NIXOS_IMPORT=./host.nix NIX_CHANNEL=nixos-18.09 bash 2>&1 | tee /tmp/infect.log
|
||||
- curl https://raw.githubusercontent.com/elitak/nixos-infect/master/nixos-infect | PROVIDER=digitalocean NIXOS_IMPORT=./host.nix NIX_CHANNEL=nixos-18.09 bash 2>&1 | tee /tmp/infect.log
|
||||
|
||||
```
|
||||
|
||||
## Vultr
|
||||
|
||||
From a Vultr server, log into the box and invoke the following command:
|
||||
|
||||
```bash
|
||||
curl https://raw.githubusercontent.com/elitak/nixos-infect/master/nixos-infect | PROVIDER=vultr NIX_CHANNEL=nixos-18.09 bash
|
||||
```
|
||||
|
||||
(One ought to be able to use a "Startup Script" for this but it seems like the
|
||||
installation around the time Nix gets installed for some reason.)
|
||||
|
||||
## Motivation
|
||||
|
||||
Motivation for this script: nixos-assimilate should supplant this script
|
||||
entirely, if it's ever completed. nixos-in-place was quite broken when I
|
||||
tried it, and also took a pretty janky approach that was substantially more
|
||||
|
|
11
nixos-infect
11
nixos-infect
|
@ -10,11 +10,14 @@ makeConf() {
|
|||
# NB <<"EOF" quotes / $ ` in heredocs, <<EOF does not
|
||||
mkdir -p /etc/nixos
|
||||
local IFS=$'\n'; keys=($(grep -vE '^[[:space:]]*(#|$)' /root/.ssh/authorized_keys))
|
||||
local network_import=""
|
||||
|
||||
[ "$PROVIDER" = "digitalocean" ] && network_import="./networking.nix # generated at runtime by nixos-infect"
|
||||
cat > /etc/nixos/configuration.nix << EOF
|
||||
{ ... }: {
|
||||
imports = [
|
||||
./hardware-configuration.nix
|
||||
./networking.nix # generated at runtime by nixos-infect
|
||||
$network_import
|
||||
$NIXOS_IMPORT
|
||||
];
|
||||
|
||||
|
@ -37,6 +40,10 @@ EOF
|
|||
}
|
||||
EOF
|
||||
|
||||
[ "$PROVIDER" = "digitalocean" ] && makeNetworkingConf
|
||||
}
|
||||
|
||||
makeNetworkingConf() {
|
||||
# XXX It'd be better if we used procfs for all this...
|
||||
local IFS=$'\n'
|
||||
eth0_name=$(ip address show | grep '^2:' | awk -F': ' '{print $2}')
|
||||
|
@ -238,6 +245,8 @@ infect() {
|
|||
/nix/var/nix/profiles/system/bin/switch-to-configuration boot
|
||||
}
|
||||
|
||||
[ -z "$PROVIDER" ] && PROVIDER="digitalocean" # you may also prepend PROVIDER=vultr to your call instead
|
||||
|
||||
prepareEnv
|
||||
checkEnv
|
||||
makeConf
|
||||
|
|
Loading…
Reference in a new issue