bootstrapping

default bootstrap password

think this is required

pw update

pseudoterm

change pw
This commit is contained in:
Jakub Kropáček 2025-01-02 16:21:43 +01:00
parent 3d7a1d7b44
commit 08a7004dda
10 changed files with 126 additions and 14 deletions

View file

@ -23,17 +23,16 @@
inputs@{ self, nixpkgs, ... }: inputs@{ self, nixpkgs, ... }:
let let
kclib = import ./lib.nix { kclib = import ./lib.nix {
nixpkgs = inputs.nixpkgs;
inputs = inputs; inputs = inputs;
}; };
in in
{ {
nixosConfigurations = { nixosConfigurations = {
tailscale-proxy = kclib.mkHost { bootstrap = kclib.mkHost {
name = "tailscale-proxy"; name = "bootstrap";
}; };
entrypoint = kclib.mkHost { etcd0 = kclib.mkHost {
name = "entrypoint"; name = "etcd0";
}; };
hydra = kclib.mkHost { hydra = kclib.mkHost {
name = "hydra"; name = "hydra";

View file

@ -1,7 +1,5 @@
{ {
config,
lib, lib,
pkgs,
modulesPath, modulesPath,
... ...
}: }:

View file

@ -0,0 +1,7 @@
{ ... }:
{
kropcloud = {
networking.enable = false;
admin.password = "changeme";
};
}

18
hosts/etcd0/default.nix Normal file
View file

@ -0,0 +1,18 @@
{ ... }:
{
kropcloud =
let
serverIp = "192.168.1.161";
in
{
services = {
};
networking = {
ipv4 = {
address = serverIp;
prefixLength = 24;
defaultGateway = "192.168.1.1";
};
};
};
}

View file

@ -1,5 +1,4 @@
{ {
nixpkgs,
inputs, inputs,
}: }:
{ {
@ -8,7 +7,7 @@
name, name,
arch ? "x86_64-linux", arch ? "x86_64-linux",
}: }:
nixpkgs.lib.nixosSystem { inputs.nixpkgs.lib.nixosSystem {
system = arch; system = arch;
modules = [ modules = [
./hosts/base ./hosts/base

View file

@ -14,6 +14,11 @@ in
default = [ ]; default = [ ];
description = "List of SSH public keys to authorize for the admin user."; description = "List of SSH public keys to authorize for the admin user.";
}; };
password = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
description = "Password for the admin user. Should be used only for initial setup.";
};
}; };
config = { config = {
@ -21,11 +26,15 @@ in
age.secrets.mypassword.file = ../../secrets/mypassword.age; age.secrets.mypassword.file = ../../secrets/mypassword.age;
# Define the admin user # Define the admin user
users.users.${cfg.user} = { users = {
passwordFile = config.age.secrets.mypassword.path; mutableUsers = false;
isNormalUser = true; users.${cfg.user} = {
extraGroups = [ "wheel" ]; password = if cfg.password != null then cfg.password else null;
openssh.authorizedKeys.keys = cfg.sshKeys; hashedPasswordFile = if cfg.password != null then null else config.age.secrets.mypassword.path;
isNormalUser = true;
extraGroups = [ "wheel" ];
openssh.authorizedKeys.keys = cfg.sshKeys;
};
}; };
}; };
} }

23
scripts/bootstrap.sh Executable file
View file

@ -0,0 +1,23 @@
#!/usr/bin/env bash
# Parameters
ip=$1
if [ -z "$ip" ]; then
echo "Usage: $0 <ip>"
exit 1
fi
# This script is used to bootstrap nixos machine so I can get their ssh keys
nix run \
github:nix-community/nixos-anywhere \
-- \
--flake '.#bootstrap' \
--target-host root@$ip \
--build-on-remote
ret=$?
if [ $ret -ne 0 ]; then
echo "Failed to bootstrap $ip"
exit $ret
fi

34
scripts/install.sh Executable file
View file

@ -0,0 +1,34 @@
#!/usr/bin/env bash
# Parameters
ip=$1
host=$2
if [ -z "$ip" ] || [ -z "$host" ]; then
echo "Usage: $0 <ip> <host>"
exit 1
fi
# This script is used to bootstrap nixos machine so I can get their ssh keys
nixos-rebuild boot \
--flake ".#$host" \
--fast \
--target-host krop@$ip \
--build-host krop@$ip \
--use-remote-sudo
ret=$?
if [ $ret -ne 0 ]; then
echo "Failed to install $host"
exit $ret
fi
echo "Successfully installed $host, rebooting"
ssh -t krop@$ip "sudo reboot now"
ret=$?
if [ $ret -ne 0 ]; then
echo "Failed to reboot $host"
exit $ret
fi

25
scripts/update.sh Executable file
View file

@ -0,0 +1,25 @@
#!/usr/bin/env bash
# Parameters
ip=$1
if [ -z "$ip" ]; then
echo "Usage: $0 <ip>"
exit 1
fi
# This script is used to bootstrap nixos machine so I can get their ssh keys
nixos-rebuild switch \
--flake ".#$host" \
--fast \
--target-host krop@$ip \
--build-host krop@$ip \
--use-remote-sudo
ret=$?
if [ $ret -ne 0 ]; then
echo "Failed to update $ip"
exit $ret
fi
echo "Successfully updated $ip, rebooting"

Binary file not shown.