forked from fediversity/fediversity
		
	
		
			
				
	
	
		
			96 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# Infra
 | 
						|
 | 
						|
This directory contains the definition of [the VMs](../machines/machines.md) that host our
 | 
						|
infrastructure.
 | 
						|
 | 
						|
## Provisioning VMs with an initial configuration
 | 
						|
 | 
						|
> NOTE[Niols]: This is still very manual and clunky. Two things will happen:
 | 
						|
> 1. In the near future, I will improve the provisioning script to make this a bit less clunky.
 | 
						|
> 2. In the far future, NixOps4 will be able to communicate with Proxmox directly and everything will become much cleaner.
 | 
						|
 | 
						|
1. Choose names for your VMs. It is recommended to choose `fediXXX`, with `XXX`
 | 
						|
   above 100. For instance, `fedi117`.
 | 
						|
 | 
						|
2. Add a basic configuration for the machine. These typically go in
 | 
						|
   `machines/dev/<name>/default.nix`. You can look at other `fediXXX` VMs to
 | 
						|
   find inspiration. You probably do not need a `nixos.module` option at this
 | 
						|
   point.
 | 
						|
 | 
						|
2. Add a file for each of those VM's public keys, eg.
 | 
						|
   ```
 | 
						|
   touch keys/systems/fedi117.pub
 | 
						|
   ```
 | 
						|
   Those files need to exist during provisioning, but their content matters only
 | 
						|
   when updating the machines' configuration.
 | 
						|
 | 
						|
   > FIXME: Remove this step by making the provisioning script not fail with the public key does not exist yet.
 | 
						|
 | 
						|
3. Run the provisioning script:
 | 
						|
   ```
 | 
						|
   sh infra/proxmox-provision.sh fedi117
 | 
						|
   ```
 | 
						|
   The script can take several ids at the same time. It requires some
 | 
						|
   authentication options and provides several more. See `--help`.
 | 
						|
 | 
						|
4. (Optional) Add a DNS entry for the machine; for instance `fedi117.abundos.eu
 | 
						|
   A 95.215.187.117`.
 | 
						|
 | 
						|
5. Grab the public host keys for the machines in question, and add it to the
 | 
						|
   repository. For instance:
 | 
						|
   ```
 | 
						|
   ssh fedi117.abundos.eu 'sudo cat /etc/ssh/ssh_host_ed25519_key.pub' > keys/systems/fedi117.pub
 | 
						|
   ```
 | 
						|
 | 
						|
   > FIXME: Make the provisioning script do that for us.
 | 
						|
 | 
						|
7. Regenerate the list of machines:
 | 
						|
   ```
 | 
						|
   sh machines/machines.md.sh
 | 
						|
   ```
 | 
						|
   Commit it with the machine's configuration, public key, etc.
 | 
						|
 | 
						|
8. At this point, the machine contains a very basic configuration that contains
 | 
						|
   just enough for it to boot and be reachable. Go on to the next section to
 | 
						|
   update the machine and put an actual configuration.
 | 
						|
 | 
						|
   > FIXME: Figure out why the full configuration isn't on the machine at this
 | 
						|
   point and fix it.
 | 
						|
 | 
						|
## Updating existing VM configurations
 | 
						|
 | 
						|
Their configuration can be updated via NixOps4. Run
 | 
						|
 | 
						|
```sh
 | 
						|
nixops4 deployments list
 | 
						|
```
 | 
						|
 | 
						|
to see the available deployments.
 | 
						|
This should be done from the root of the repository,
 | 
						|
otherwise NixOps4 will fail with something like:
 | 
						|
 | 
						|
```
 | 
						|
    nixops4 error: evaluation: error:
 | 
						|
           … while calling the 'getFlake' builtin
 | 
						|
 | 
						|
           error: path '/nix/store/05nn7krhvi8wkcyl6bsysznlv60g5rrf-source/flake.nix' does not exist, evaluation: error:
 | 
						|
           … while calling the 'getFlake' builtin
 | 
						|
 | 
						|
           error: path '/nix/store/05nn7krhvi8wkcyl6bsysznlv60g5rrf-source/flake.nix' does not exist
 | 
						|
```
 | 
						|
 | 
						|
Then, given a deployment (eg. `fedi200`), run
 | 
						|
 | 
						|
```sh
 | 
						|
nixops4 apply <deployment>
 | 
						|
```
 | 
						|
 | 
						|
Alternatively, to run the `default` deployment, which contains all the VMs, run
 | 
						|
 | 
						|
```sh
 | 
						|
nixops4 apply
 | 
						|
```
 | 
						|
 | 
						|
## Removing an existing VM
 | 
						|
 | 
						|
See `infra/proxmox-remove.sh --help`.
 |