Install NixOS on GCE: Difference between revisions
imported>Tubro Google Cloud Shell has a 5GB storage limit... the Git is bigger, so shallow clone is needed |
update example to 24.11 |
||
(8 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
This is a recipe for creating a NixOS machine on Google Compute Engine (GCE) which is part of [https://cloud.google.com/ Google Cloud Platform]. | This is a recipe for creating a NixOS machine on Google Compute Engine (GCE) which is part of [https://cloud.google.com/ Google Cloud Platform]. | ||
This tutorial assumes you have already set up and account and project under Google Cloud Platform. | This tutorial assumes you have already set up and account and project under Google Cloud Platform. We also assume that you have [https://nixos.org/download nix-shell] and KVM virtualization support, the latter is not available in Google Cloud Shell. | ||
There are no publicly provided images of recent releases of NixOS. There are some old releases at [https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/virtualisation/gce-images.nix <nixpkgs/nixos/modules/virtualisation/gce-images.nix>] and in the <code>gs://nixos-images</code> and <code>gs://nixos-cloud-images</code> public buckets, but these have not been updated in years. Instead, it is recommended you build your own image. | There are no publicly provided images of recent releases of NixOS. There are some old releases at [https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/virtualisation/gce-images.nix <nixpkgs/nixos/modules/virtualisation/gce-images.nix>] and in the <code>gs://nixos-images</code> and <code>gs://nixos-cloud-images</code> public buckets, but these have not been updated in years. Instead, it is recommended you build your own image. | ||
This guide is for people who really need NixOS... not just the Nix package manager. If Nix is all you need, you can install it automatically with a [https://cloud.google.com/compute/docs/instances/startup-scripts/linux startup script]. Debian 12 startup script example: | |||
<syntaxhighlight lang="bash"> | |||
#!/bin/bash | |||
HOME="/root" sh <(curl -L https://nixos.org/nix/install) --daemon --yes | |||
source /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh | |||
nix-env -i cowsay | |||
cowsay 'nix is fully operational' | |||
</syntaxhighlight> | |||
== Bootstrapping a NixOS image from the build of your choice == | == Bootstrapping a NixOS image from the build of your choice == | ||
This assumes you have created a Google Cloud project and a Google Cloud Storage bucket in that project. Set them as variables: | This assumes you have created a Google Cloud project and a Google Cloud Storage bucket that allows public access and uses Fine-grained access control (as opposed to Uniform) in that project. Set them as variables: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
Line 26: | Line 36: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
git clone --depth=1 --branch | $ git clone --depth=1 --branch nixos-24.11 https://github.com/NixOS/nixpkgs.git | ||
$ BUCKET_NAME=my_bucket_name nixpkgs/nixos/maintainers/scripts/gce/create-gce.sh | $ BUCKET_NAME=my_bucket_name nixpkgs/nixos/maintainers/scripts/gce/create-gce.sh | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Line 44: | Line 54: | ||
## <b>Metadata</b> | ## <b>Metadata</b> | ||
### <b>key</b> : <i>enable-oslogin</i> | ### <b>key</b> : <i>enable-oslogin</i> | ||
### <b>value</b> : <i>TRUE</i> | ### <b>value</b> : <i>"TRUE"</i> | ||
# Click <b>Create</b> | # Click <b>Create</b> | ||
# Wait until your VM instance is ready | # Wait until your VM instance is ready | ||
Line 79: | Line 89: | ||
At this point you may want to snapshot this image and use this snapshot to make future VMs. | At this point you may want to snapshot this image and use this snapshot to make future VMs. | ||
[[Category:Server]] | [[Category:Server]][[Category:Cookbook]] | ||
[[Category:Deployment]] |