🐧

さくらのクラウドでNixOSを使う

2021/03/24に公開

概要

さくらのクラウドではNixOSのパブリックアーカイブを提供していませんが、 スタートアップスクリプトnixos-infect を使って、NixOSのサーバを作成できます。

ここではNixOSについては説明しません。
興味のある方は https://nixos.org を参照してください。

スタートアップスクリプト

このスタートアップスクリプトをサーバ作成時に使用すると、作成したサーバでNixOSが起動します。
サーバ作成時はパブリックアーカイブから Ubuntu Server 20.04.1 LTS 64bit を選択してください。

#!/bin/bash
# @sacloud-name "nixos-infect"
# @sacloud-once
# @sacloud-desc https://github.com/elitak/nixos-infect
# @sacloud-require-archive distro-ubuntu distro-ver-20.04*
# @sacloud-text required shellarg maxlen=20 default=nixos-21.05 nix_channel 'Nix Channel'

NIX_CHANNEL=@@@nix_channel@@@

export DEBIAN_FRONTEND=noninteractive
mkdir -p /root/.ssh
cat /home/ubuntu/.ssh/authorized_keys > /root/.ssh/authorized_keys
chmod 644 /root/.ssh/authorized_keys
keys=$(sed -E 's/^.*((ssh|ecdsa)-[^[:space:]]+)[[:space:]]+([^[:space:]]+)([[:space:]]*.*)$/\1 \3\4/' "/root/.ssh/authorized_keys")

mkdir -p /etc/nixos
cat <<EOF > /etc/nixos/host.nix
{pkgs, ...}:
{
  environment.systemPackages = with pkgs; [ vim ];
  
  users.groups.nixos = {
    name = "nixos";
    members = [ "nixos" ];
  };
  users.users.nixos = {
    description     = "NixOS User";
    name            = "nixos";
    group           = "nixos";
    extraGroups     = [ "users" "wheel" ];
    password        = "nixos";
    home            = "/home/nixos";
    createHome      = true;
    useDefaultShell = true;
    isNormalUser    = true;
    openssh.authorizedKeys.keys = [$(while read -r line; do echo -n "
      \"$line\" "; done <<< "$keys")
    ];
  };
}
EOF
chmod 644 /etc/nixos/host.nix
curl https://raw.githubusercontent.com/elitak/nixos-infect/master/nixos-infect | NIXOS_IMPORT=./host.nix NIX_CHANNEL=$NIX_CHANNEL bash

host.nix を必要に応じて変更することで最初からWebサーバやデータベースなどのミドルウェアが起動した状態にすることもできます。
設定について詳しくは NixOS Manual - Part II. Configuration を参照してください。

参考

Discussion