Last active
June 3, 2023 09:20
-
-
Save onsah/8b2605b64bfcbe2346474a7a4a9ed65a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /usr/bin/env bash | |
# Script to install NixOS from the Hetzner Cloud NixOS bootable ISO image. | |
# (tested with Hetzner's `NixOS 20.03 (amd64/minimal)` ISO image). | |
# | |
# This script wipes the disk of the server! | |
# | |
# Instructions: | |
# | |
# 1. Mount the above mentioned ISO image from the Hetzner Cloud GUI | |
# and reboot the server into it; do not run the default system (e.g. Ubuntu). | |
# 2. To be able to SSH straight in (recommended), you must replace hardcoded pubkey | |
# further down in the section labelled "Replace this by your SSH pubkey" by you own, | |
# and host the modified script way under a URL of your choosing | |
# (e.g. gist.github.com with git.io as URL shortener service). | |
# 3. Run on the server: | |
# | |
# # Replace this URL by your own that has your pubkey in | |
# curl -L https://raw.githubusercontent.com/nix-community/nixos-install-scripts/master/hosters/hetzner-cloud/nixos-install-hetzner-cloud.sh | sudo bash | |
# | |
# This will install NixOS and power off the server. | |
# 4. Unmount the ISO image from the Hetzner Cloud GUI. | |
# 5. Turn the server back on from the Hetzner Cloud GUI. | |
# | |
# To run it from the Hetzner Cloud web terminal without typing it down, | |
# you can either select it and then middle-click onto the web terminal, (that pastes | |
# to it), or use `xdotool` (you have e.g. 3 seconds to focus the window): | |
# | |
# sleep 3 && xdotool type --delay 50 'curl YOUR_URL_HERE | sudo bash' | |
# | |
# (In the xdotool invocation you may have to replace chars so that | |
# the right chars appear on the US-English keyboard.) | |
# | |
# If you do not replace the pubkey, you'll be running with my pubkey, but you can | |
# change it afterwards by logging in via the Hetzner Cloud web terminal as `root` | |
# with empty password. | |
set -e | |
# Hetzner Cloud OS images grow the root partition to the size of the local | |
# disk on first boot. In case the NixOS live ISO is booted immediately on | |
# first powerup, that does not happen. Thus we need to grow the partition | |
# by deleting and re-creating it. | |
sgdisk -d 1 /dev/sda | |
sgdisk -N 1 /dev/sda | |
partprobe /dev/sda | |
mkfs.ext4 -F /dev/sda1 # wipes all data! | |
mount /dev/sda1 /mnt | |
nixos-generate-config --root /mnt | |
# Delete trailing `}` from `configuration.nix` so that we can append more to it. | |
sed -i -E 's:^\}\s*$::g' /mnt/etc/nixos/configuration.nix | |
# Extend/override default `configuration.nix`: | |
echo ' | |
boot.loader.grub.devices = [ "/dev/sda" ]; | |
# Initial empty root password for easy login: | |
users.users.root.initialHashedPassword = ""; | |
services.openssh.permitRootLogin = "prohibit-password"; | |
services.openssh.enable = true; | |
users.users.root.openssh.authorizedKeys.keys = [ | |
# Replace this by your SSH pubkey! | |
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCQ+ULM/1XmGlCF/3nsR5P6lS9TKDNn5QblJWxIjBzbkD8L5SVLTAuVEkQ3mDpIa5v/i/M9vwzohUp01yhpODWfFOvDJbvFrbC1nTBEXR+pw5uGvvFpNYgKqk/Zc5vPdXAxooA6dvd4Nw2ja/U7dliBOZ3YcKyw4qddEqKU9FboZdvkkPVrBiXb1Hoph7P8+PD6X98LbzR2asgxoYBWT1Q1kHb8fr1fdfXXOUZWzj8Aj6ydcvnZ/KtZFub/EoSXdzvzC3lp0n7MD49GdQeeu60SzHt9Zti5Ktekz8VsyjjLVhEL5XAh6vumu8dqooBZDLzVTj9ASvqoajXZ6zwJac76/uxxXAl8dGGM6Y0vZj34iX8EOB0N8HPCPZ11dao/zcs7x7HQlyHD8LP5wE5EG/yRVNfKW648q/SM1rKq410lrakvV0eVOEFFlLVfEjlZdNdkUuaA/y0vWe2pPTA0vQe3wbtUKvSA72SO5CCMJ6mj6DA8Ida361ZzQ6i5Nw1eiTk= aiono@aiono-fedora" | |
]; | |
} | |
' >> /mnt/etc/nixos/configuration.nix | |
nixos-install --no-root-passwd | |
poweroff |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment