2020-06-28 18:32:52 +00:00
|
|
|
# SPDX-FileCopyrightText: 2020 Luke Granger-Brown <depot@lukegb.com>
|
|
|
|
#
|
|
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
|
|
|
|
{ depot, lib, pkgs, rebuilder, config, ... }:
|
|
|
|
let
|
|
|
|
inherit (depot.ops) secrets;
|
|
|
|
in {
|
|
|
|
imports =
|
2020-10-10 19:39:26 +00:00
|
|
|
[ ../../../third_party/nixpkgs/nixos/modules/installer/scan/not-detected.nix ../lib/client.nix ../lib/whitby-distributed.nix ];
|
2020-06-28 18:32:52 +00:00
|
|
|
|
|
|
|
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usb_storage" "usbhid" "sd_mod" ];
|
|
|
|
boot.kernelModules = lib.mkAfter [ "kvm-intel" ];
|
|
|
|
boot.kernelParams = [ "mitigations=off" ];
|
|
|
|
|
|
|
|
fileSystems = let
|
|
|
|
zfs = device: {
|
|
|
|
device = device;
|
|
|
|
fsType = "zfs";
|
|
|
|
};
|
|
|
|
in {
|
|
|
|
"/" = zfs "zboot/safe/root";
|
|
|
|
"/nix" = zfs "zboot/local/nix";
|
|
|
|
|
|
|
|
"/home" = zfs "tank/safe/home";
|
2020-07-04 19:36:38 +00:00
|
|
|
"/export" = zfs "tank/safe/export";
|
2020-06-28 18:32:52 +00:00
|
|
|
|
|
|
|
"/boot" = {
|
|
|
|
device = "/dev/disk/by-uuid/D178-4E19";
|
|
|
|
fsType = "vfat";
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
# Use the systemd-boot EFI boot loader.
|
|
|
|
boot.loader.systemd-boot.enable = true;
|
|
|
|
boot.loader.efi.canTouchEfiVariables = true;
|
|
|
|
|
|
|
|
nix.maxJobs = lib.mkDefault 8;
|
|
|
|
powerManagement.cpuFreqGovernor = lib.mkDefault "performance";
|
2020-09-13 15:16:03 +00:00
|
|
|
virtualisation = {
|
|
|
|
podman.enable = true;
|
|
|
|
};
|
2020-06-28 18:32:52 +00:00
|
|
|
|
2020-07-19 16:59:20 +00:00
|
|
|
# Extra packages.
|
|
|
|
environment.systemPackages = with pkgs; [
|
|
|
|
oven-media-engine
|
2020-10-15 13:22:18 +00:00
|
|
|
(depot.nix.pkgs.secretsync.configure {
|
|
|
|
workingDir = "/home/lukegb/depot";
|
|
|
|
gitlabAccessToken = secrets.deployer.gitlabAccessToken;
|
|
|
|
manifestVariable = "SECRETS_MANIFEST";
|
|
|
|
variablesToFile = {
|
|
|
|
"OPS_SECRETS_DEFAULT_NIX" = "ops/secrets/default.nix";
|
|
|
|
};
|
|
|
|
})
|
2020-07-19 16:59:20 +00:00
|
|
|
];
|
|
|
|
|
2020-06-28 18:32:52 +00:00
|
|
|
# Networking!
|
|
|
|
networking = {
|
|
|
|
hostName = "totoro"; # Define your hostname.
|
|
|
|
domain = "lukegb.xyz";
|
|
|
|
hostId = "676c08c4";
|
|
|
|
useDHCP = false;
|
2020-06-28 22:22:43 +00:00
|
|
|
interfaces.br-ext.useDHCP = true;
|
|
|
|
bridges.br-ext.interfaces = [ "enp0s31f6" ];
|
2020-10-31 17:04:30 +00:00
|
|
|
|
|
|
|
interfaces.br-int = {
|
|
|
|
virtual = true;
|
|
|
|
useDHCP = false;
|
|
|
|
ipv4.addresses = [{ address = "10.0.0.2"; prefixLength = 24; }];
|
|
|
|
};
|
|
|
|
bridges.br-int.interfaces = [];
|
2020-06-28 22:22:43 +00:00
|
|
|
};
|
2020-11-01 18:25:01 +00:00
|
|
|
my.ip.tailscale = "100.122.86.11";
|
2020-06-28 22:22:43 +00:00
|
|
|
|
|
|
|
# Virtualisation
|
|
|
|
virtualisation.libvirtd = {
|
|
|
|
enable = true;
|
|
|
|
allowedBridges = [ "virbr0" "br-ext" ];
|
2020-06-28 18:32:52 +00:00
|
|
|
};
|
2020-06-28 22:23:43 +00:00
|
|
|
users.users.lukegb = {
|
2020-07-08 18:35:48 +00:00
|
|
|
packages = with depot.pkgs; [ irssi ];
|
2020-06-28 22:23:43 +00:00
|
|
|
extraGroups = lib.mkAfter [ "libvirtd" ];
|
|
|
|
};
|
2020-06-28 18:32:52 +00:00
|
|
|
|
2020-07-04 19:36:38 +00:00
|
|
|
# NFS
|
|
|
|
services.nfs.server = {
|
|
|
|
enable = true;
|
|
|
|
exports = ''
|
|
|
|
/export 192.168.1.0/24(rw,sync,nohide,no_subtree_check,no_root_squash,wdelay,fsid=0,insecure,crossmnt)
|
2020-09-13 15:16:03 +00:00
|
|
|
/export/openshift 192.168.1.0/24(rw,sync,nohide,no_subtree_check,no_root_squash,no_wdelay,insecure,crossmnt)
|
2020-07-04 19:36:38 +00:00
|
|
|
'';
|
|
|
|
};
|
2020-09-13 15:16:03 +00:00
|
|
|
|
|
|
|
networking.firewall.allowedTCPPorts = [ 111 2049 80 443 6443 22623 ];
|
2020-07-04 19:36:38 +00:00
|
|
|
networking.firewall.allowedUDPPorts = [ 111 2049 ];
|
|
|
|
|
2020-09-13 15:16:03 +00:00
|
|
|
# LB
|
|
|
|
services.haproxy = {
|
|
|
|
enable = true;
|
|
|
|
config = ''
|
|
|
|
global
|
|
|
|
maxconn 50000
|
|
|
|
nbthread 4
|
|
|
|
|
|
|
|
defaults
|
|
|
|
log global
|
|
|
|
mode tcp
|
|
|
|
option tcplog
|
|
|
|
maxconn 3000
|
|
|
|
timeout connect 10s
|
|
|
|
timeout client 1m
|
|
|
|
timeout server 1m
|
|
|
|
|
|
|
|
frontend k8sapi
|
|
|
|
bind 192.168.1.40:6443
|
|
|
|
default_backend k8sapi-backend
|
|
|
|
|
|
|
|
backend k8sapi-backend
|
|
|
|
balance roundrobin
|
|
|
|
mode tcp
|
|
|
|
server okd1 192.168.1.41:6443 check
|
|
|
|
server okd2 192.168.1.42:6443 check
|
|
|
|
server okd3 192.168.1.43:6443 check
|
|
|
|
|
|
|
|
frontend machineconfig
|
|
|
|
bind 192.168.1.40:22623
|
|
|
|
default_backend machineconfig-backend
|
|
|
|
|
|
|
|
backend machineconfig-backend
|
|
|
|
balance roundrobin
|
|
|
|
mode tcp
|
|
|
|
server okd1 192.168.1.41:22623 check
|
|
|
|
server okd2 192.168.1.42:22623 check
|
|
|
|
server okd3 192.168.1.43:22623 check
|
|
|
|
|
|
|
|
frontend https
|
|
|
|
bind 192.168.1.40:443
|
|
|
|
default_backend https-backend
|
|
|
|
|
|
|
|
backend https-backend
|
|
|
|
balance roundrobin
|
|
|
|
mode tcp
|
|
|
|
server okd1 192.168.1.41:443 check
|
|
|
|
server okd2 192.168.1.42:443 check
|
|
|
|
server okd3 192.168.1.43:443 check
|
|
|
|
|
|
|
|
frontend http
|
|
|
|
bind 192.168.1.40:80
|
|
|
|
default_backend http-backend
|
|
|
|
|
|
|
|
backend http-backend
|
|
|
|
balance roundrobin
|
|
|
|
mode tcp
|
|
|
|
server okd1 192.168.1.41:80 check
|
|
|
|
server okd2 192.168.1.42:80 check
|
|
|
|
server okd3 192.168.1.43:80 check
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
|
|
|
# Expose subnet 192.168.1.0/24 via Tailscale.
|
|
|
|
boot.kernel.sysctl = {
|
|
|
|
"net.ipv4.ip_forward" = 1;
|
|
|
|
};
|
|
|
|
|
2020-06-28 18:32:52 +00:00
|
|
|
system.stateVersion = "20.03";
|
|
|
|
}
|