From e3bd15590c392c078d221c533730bc0ba82b994b Mon Sep 17 00:00:00 2001 From: Adam Brady Date: Thu, 5 Sep 2024 17:11:49 +1000 Subject: [PATCH 01/31] Initial setup for dogebox --- configuration.nix | 96 +----------------------------------- dkm.nix | 27 ++++++++++ dogebox.nix | 23 +++++++++ dogeboxd.nix | 27 ++++++++++ setup/default.nix | 14 ------ setup/dnsmasq.conf | 8 --- setup/initial-setup-check.sh | 32 ------------ setup/leave-setup-mode.sh | 20 -------- setup/switch-to-wired.sh | 15 ------ setup/switch-to-wireless.sh | 15 ------ 10 files changed, 79 insertions(+), 198 deletions(-) create mode 100644 dkm.nix create mode 100644 dogebox.nix create mode 100644 dogeboxd.nix delete mode 100644 setup/default.nix delete mode 100644 setup/dnsmasq.conf delete mode 100755 setup/initial-setup-check.sh delete mode 100755 setup/leave-setup-mode.sh delete mode 100755 setup/switch-to-wired.sh delete mode 100755 setup/switch-to-wireless.sh diff --git a/configuration.nix b/configuration.nix index e1ccde5..d34e8b3 100644 --- a/configuration.nix +++ b/configuration.nix @@ -4,20 +4,14 @@ { config, lib, pkgs, ... }: -let dogebox = import { inherit pkgs; }; in { imports = [ #./bootloader ./hardware-configuration.nix + ./dogebox.nix ] - #++ lib.optional(builtins.pathExists ... ) ......nix ; - networking.hostName = "dogebox"; - # Pick only one of the below networking options. - # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. - # networking.networkmanager.enable = true; # Easiest to use and most distros use this by default. - nix.settings = { #allowed-users = [ "*" ]; auto-optimise-store = false; @@ -39,60 +33,13 @@ let dogebox = import { inherit pkgs; }; in # Set your time zone. time.timeZone = "Australia/Brisbane"; - # Configure network proxy if necessary - # networking.proxy.default = "http://user:password@proxy:port/"; - # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; - - # Select internationalisation properties. - # i18n.defaultLocale = "en_US.UTF-8"; - # console = { - # font = "Lat2-Terminus16"; - # keyMap = "us"; - # useXkbConfig = true; # use xkb.options in tty. - # }; - - # Enable sound. - # sound.enable = true; - # hardware.pulseaudio.enable = true; - - users.groups.dogeboxd = {}; - - users.users.dogeboxd = { - isSystemUser = true; - group = "dogeboxd"; - # extraGroups = [ "wheel" ]; - # packages = with pkgs; [ - # ]; - }; - + # Install a few utility packages environment.systemPackages = with pkgs; [ - dnsmasq git vim wget - dogebox.dogeboxd - #dogebox.dogecoin-core - #dogebox.dogemap - #dogebox.dogenet - #dogebox.jampuppy - #dogebox.libdogecoin ]; - # Some programs need SUID wrappers, can be configured further or are - # started in user sessions. - # programs.mtr.enable = true; - # programs.gnupg.agent = { - # enable = true; - # enableSSHSupport = true; - # }; - - # List services that you want to enable: - - # Enable the OpenSSH daemon. - # services.openssh.enable = true; - - # TODO : look in to system.activationScripts - # /media does not exist by default, and devmon's default config # will mount devices at '/media//' rather # than '/media/' for some reason, so this should @@ -102,45 +49,6 @@ let dogebox = import { inherit pkgs; }; in ]; services.devmon.enable = true; -# services.gvfs.enable = true; -# services.udisks2.enable = true; - services.nix-serve = { - enable = true; - }; - - services.nginx = { - enable = true; - recommendedProxySettings = true; - }; - - # Open ports in the firewall. - networking.firewall.allowedTCPPorts = [ 22 80 443 ]; - networking.firewall.allowedUDPPorts = [ ]; - # Or disable the firewall altogether. - # networking.firewall.enable = false; - - # Copy the NixOS configuration file and link it from the resulting system - # (/run/current-system/configuration.nix). This is useful in case you - # accidentally delete configuration.nix. - # system.copySystemConfiguration = true; - - # This option defines the first version of NixOS you have installed on this particular machine, - # and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions. - # - # Most users should NEVER change this value after the initial install, for any reason, - # even if you've upgraded your system to a new NixOS release. - # - # This value does NOT affect the Nixpkgs version your packages and OS are pulled from, - # so changing it will NOT upgrade your system. - # - # This value being lower than the current NixOS release does NOT mean your system is - # out of date, out of support, or vulnerable. - # - # Do NOT change this value unless you have manually inspected all the changes it would make to your configuration, - # and migrated your data accordingly. - # - # For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion . system.stateVersion = "23.11"; # Did you read the comment? - } diff --git a/dkm.nix b/dkm.nix new file mode 100644 index 0000000..03e6f58 --- /dev/null +++ b/dkm.nix @@ -0,0 +1,27 @@ +{ config, lib, pkgs, ... }: + +let dogebox = import { inherit pkgs; }; in +{ + environment.systemPackages = [ + dogebox.dkm + ]; + + users.users.dkm = { + isNormalUser = true; + group = "dogebox"; + extraGroups = []; + }; + + systemd.services.dkm = { + after = [ "network.target" ]; + wantedBy = [ "multi-user.target" ]; + + serviceConfig = { + # TODO: This needs a storage path + ExecStart = "$TODO{pkgs.dogebox.dkm}/bin/dkm"; + Restart = "always"; + User = "dkm"; + Group = "dogebox"; + }; + }; +} diff --git a/dogebox.nix b/dogebox.nix new file mode 100644 index 0000000..5be68cd --- /dev/null +++ b/dogebox.nix @@ -0,0 +1,23 @@ +{ config, lib, pkgs, ... }: + +let dogebox = import { inherit pkgs; }; in +{ + imports = [ + ./dkm.nix + # ./dogeboxd.nix + ] ++ lib.optionals (builtins.pathExists "/opt/dogebox/nix/dogebox.nix") [ + /opt/dogebox/nix/dogebox.nix + ]; + + users.groups.dogebox = {}; + + # users.users.dogeboxd = { + # isSystemUser = true; + # group = "dogeboxd"; + # extraGroups = [ "wheel" ]; + # }; + + # These will be overridden by the included dogebox.nix file above, but set defaults. + networking.wireless.enable = lib.mkDefault false; + networking.networkmanager.enable = lib.mkForce false; +} diff --git a/dogeboxd.nix b/dogeboxd.nix new file mode 100644 index 0000000..61c72e9 --- /dev/null +++ b/dogeboxd.nix @@ -0,0 +1,27 @@ +{ config, lib, pkgs, ... }: + +let dogebox = import { inherit pkgs; }; in +{ + environment.systemPackages = [ + dogebox.dogeboxd + ]; + + users.users.dogeboxd = { + isNormalUser = true; + group = "dogebox"; + extraGroups = []; + }; + + systemd.services.dogeboxd = { + after = [ "network.target" ]; + wantedBy = [ "multi-user.target" ]; + + serviceConfig = { + # TODO: This needs a storage path + ExecStart = "${dogebox.dogeboxd}/build/dogeboxd"; + Restart = "always"; + User = "dogeboxd"; + Group = "dogebox"; + }; + }; +} diff --git a/setup/default.nix b/setup/default.nix deleted file mode 100644 index 1ccdda9..0000000 --- a/setup/default.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ config, libs, pkgs, ... }: - -{ - systemd.services.initial-setup-check = { - description = ""; - after = [ "network.target" ]; # We want the network config completed, as we'll override it if we go into setup mode - wantedBy = [ "multi-user.target" ]; - serviceConfig = { - Type = "oneshot"; - RemainAfterExit = "yes"; - ExecStart = "/etc/nixos/setup/initial-setup-check.sh"; - }; - }; -} diff --git a/setup/dnsmasq.conf b/setup/dnsmasq.conf deleted file mode 100644 index 678ff73..0000000 --- a/setup/dnsmasq.conf +++ /dev/null @@ -1,8 +0,0 @@ -conf-file=/etc/dnsmasq-conf.conf -dhcp-host=10.0.0.1 -dhcp-leasefile=/var/lib/dnsmasq/dnsmasq.leases -dhcp-range=enp0s3,10.0.0.2,10.0.0.22,24h -domain-needed -interface=enp0s3 -no-resolv -resolv-file=/etc/dnsmasq-resolv.conf diff --git a/setup/initial-setup-check.sh b/setup/initial-setup-check.sh deleted file mode 100755 index 222582c..0000000 --- a/setup/initial-setup-check.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/run/current-system/sw/bin/bash - -# For package 'dogebox-initial-setup' ? -# use ${pkg.xx} paths if so - -WIRED=enp0s3 - -SYSTEMCTL=/run/current-system/sw/bin/systemctl -IFCONFIG=/run/current-system/sw/bin/ifconfig -DNSMASQ=/run/current-system/sw/bin/dnsmasq -IFPLUGD=/run/current-system/sw/bin/ifplugd -PKILL=/run/current-system/sw/bin/pkill - -if ls /media/*/RECOVERY.txt 2>&1 >/dev/null; then - echo "RECOVERY.txt found, entering initial setup/recovery mode:" - - if $SYSTEMCTL is-active --quiet dhcpcd; then - echo "Stopping dhcpcd . . ." - $SYSTEMCTL stop dhcpcd - fi - - echo "Reconfiguring enp0s3 . . ." - $IFCONFIG $WIRED 10.0.0.69 netmask 255.255.0.0 - - $PKILL dnsmasq - echo "Starting dnsmasq . . ." - $DNSMASQ --enable-dbus -C -i $WIRED /etc/nixos/setup/dnsmasq.conf - - $IFPLUGD -i $WIRED -r /etc/nixos/setup/interface-check.sh -else - echo "No RECOVERY.txt, this is a normal boot." -fi diff --git a/setup/leave-setup-mode.sh b/setup/leave-setup-mode.sh deleted file mode 100755 index aa227fc..0000000 --- a/setup/leave-setup-mode.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/run/current-system/sw/bin/bash - -# For package 'dogebox-initial-setup' ? -# use ${pkg.xx} paths if so -# TODO : have this process be reversable when setup is done -# - stopping dnsmasq -# - stopping ifplugd -# - dhcpcd should be started by new network config -# if it was selected - -SYSTEMCTL=/run/current-system/sw/bin/systemctl -IFCONFIG=/run/current-system/sw/bin/ifconfig -DNSMASQ=/run/current-system/sw/bin/dnsmasq -IFPLUGD=/run/current-system/sw/bin/ifplugd -PKILL=/run/current-system/sw/bin/pkill - -echo "Stopping dnsmasq . . ." -$PKILL dnsmasq -echo "Stopping ifplugd . . ." -$IFPLUGD -k diff --git a/setup/switch-to-wired.sh b/setup/switch-to-wired.sh deleted file mode 100755 index 1ab7d5e..0000000 --- a/setup/switch-to-wired.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/run/current-system/sw/bin/bash - -IFCONFIG=/run/current-system/sw/bin/ifconfig -DNSMASQ=/run/current-system/sw/bin/dnsmasq -PKILL=/run/current-system/sw/bin/pkill - -echo "Bringing down . . ." -$IFCONFIG down - -echo "Bringing up enp0s3 . . ." -$IFCONFIG enp0s3 10.0.0.69 netmask 255.255.0.0 - -echo "Restarting dnsmasq . . ." -$PKILL dnsmasq -$DNSMASQ --enable-dbus -C /etc/nixos/setup/dnsmasq.conf diff --git a/setup/switch-to-wireless.sh b/setup/switch-to-wireless.sh deleted file mode 100755 index 7b40972..0000000 --- a/setup/switch-to-wireless.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/run/current-system/sw/bin/bash - -IFCONFIG=/run/current-system/sw/bin/ifconfig -DNSMASQ=/run/current-system/sw/bin/dnsmasq -PKILL=/run/current-system/sw/bin/pkill - -echo "Bringing down enp0s3 . . ." -$IFCONFIG enp0s3 down - -echo "Bringing up . . ." -$IFCONFIG 10.0.0.69 netmask 255.255.0.0 - -echo "Restarting dnsmasq . . ." -$PKILL dnsmasq -$DNSMASQ --enable-dbus -C /etc/nixos/setup/dnsmasq.conf From d5ec9103e7b29bd3ba70c9b03d626fe2279198ea Mon Sep 17 00:00:00 2001 From: Adam Brady Date: Fri, 6 Sep 2024 13:42:11 +1000 Subject: [PATCH 02/31] some more stuff --- dkm.nix | 5 ++--- dogebox.nix | 26 ++++++++++++++++++++------ dogeboxd.nix | 25 ++++++++++++++++++++++--- 3 files changed, 44 insertions(+), 12 deletions(-) diff --git a/dkm.nix b/dkm.nix index 03e6f58..4679523 100644 --- a/dkm.nix +++ b/dkm.nix @@ -7,7 +7,7 @@ let dogebox = import { inherit pkgs; }; in ]; users.users.dkm = { - isNormalUser = true; + isSystemUser = true; group = "dogebox"; extraGroups = []; }; @@ -17,8 +17,7 @@ let dogebox = import { inherit pkgs; }; in wantedBy = [ "multi-user.target" ]; serviceConfig = { - # TODO: This needs a storage path - ExecStart = "$TODO{pkgs.dogebox.dkm}/bin/dkm"; + ExecStart = "${dogebox.dkm}/bin/dkm"; Restart = "always"; User = "dkm"; Group = "dogebox"; diff --git a/dogebox.nix b/dogebox.nix index 5be68cd..4bc9b32 100644 --- a/dogebox.nix +++ b/dogebox.nix @@ -4,18 +4,32 @@ let dogebox = import { inherit pkgs; }; in { imports = [ ./dkm.nix - # ./dogeboxd.nix + ./dogeboxd.nix ] ++ lib.optionals (builtins.pathExists "/opt/dogebox/nix/dogebox.nix") [ /opt/dogebox/nix/dogebox.nix ]; + users.motd = '' ++===================================================+ +| | +| ____ ___ ____ _____ ____ _____ __ | +| | _ \ / _ \ / ___| ____| __ ) / _ \ \/ / | +| | | | | | | | | _| _| | _ \| | | \ / | +| | |_| | |_| | |_| | |___| |_) | |_| / \ | +| |____/ \___/ \____|_____|____/ \___/_/\_\ | +| | ++===================================================+ +''; + users.groups.dogebox = {}; - # users.users.dogeboxd = { - # isSystemUser = true; - # group = "dogeboxd"; - # extraGroups = [ "wheel" ]; - # }; + users.users.shibe = { + isNormalUser = true; + extraGroups = [ "wheel" ]; + + # Very temporary, until we have SSH key management in dpanel. + password = "suchpass"; + }; # These will be overridden by the included dogebox.nix file above, but set defaults. networking.wireless.enable = lib.mkDefault false; diff --git a/dogeboxd.nix b/dogeboxd.nix index 61c72e9..aafcd9e 100644 --- a/dogeboxd.nix +++ b/dogeboxd.nix @@ -7,21 +7,40 @@ let dogebox = import { inherit pkgs; }; in ]; users.users.dogeboxd = { - isNormalUser = true; + isSystemUser = true; group = "dogebox"; extraGroups = []; }; + systemd.tmpfiles.rules = [ + "d /opt/dogebox 0700 dogeboxd dogebox -" + ]; + + # TODO: Add /bin to $PATH + systemd.services.dogeboxd = { after = [ "network.target" ]; wantedBy = [ "multi-user.target" ]; serviceConfig = { - # TODO: This needs a storage path - ExecStart = "${dogebox.dogeboxd}/build/dogeboxd"; + ExecStart = "${dogebox.dogeboxd}/dogeboxd/bin/dogeboxd --addr 0.0.0.0 --data /opt/dogebox --nix /opt/dogebox/nix --port 3000 --uiport 8080 --uidir ${dogebox.dogeboxd}/dpanel/src"; Restart = "always"; User = "dogeboxd"; Group = "dogebox"; }; }; + + security.wrappers.nixosrebuildswitch = { + source = "${dogebox.dogeboxd}/dogeboxd/bin/nixosrebuildswitch"; + owner = "root"; + group = "root"; + setuid = true; + }; + + security.wrappers.machinectlstop = { + source = "${dogebox.dogeboxd}/dogeboxd/bin/machinectlstop"; + owner = "root"; + group = "root"; + setuid = true; + }; } From cd755ff3a65ce2f1dd7e44bea147e76ad7a475f0 Mon Sep 17 00:00:00 2001 From: Adam Brady Date: Fri, 6 Sep 2024 14:34:09 +1000 Subject: [PATCH 03/31] start docs --- README.md | 50 ++++++++------------------------------ docs/BUILDING.md | 43 ++++++++++++++++++++++++++++++++ docs/img/dogebox-logo.png | Bin 0 -> 191587 bytes 3 files changed, 53 insertions(+), 40 deletions(-) create mode 100644 docs/BUILDING.md create mode 100644 docs/img/dogebox-logo.png diff --git a/README.md b/README.md index 7f3525d..3dd0cd1 100644 --- a/README.md +++ b/README.md @@ -1,45 +1,15 @@ -# dogebox -Dogebox is a NixOS distribution that runs the Dogebox Runtime Environment +

+ Dogebox Logo + DOGEBOX is a NixOS distribution that runs the Dogebox Runtime Environment -## SD and SD installer images +

- These are built with FriendlyElec's sd-fuse_rk3588. Documentation TBA. +> [!CAUTION] +> Dogebox is currently in a pre-alpha developer preview. Do not use it for any production workloads, and definitely don't send any money to addresses generated by it. -## Container/VM images -Quick notes on building a container or VM image from a configuration.nix file: +## Getting It - - make sure the configuration.nix doesn't mention a bootloader, an appropriate one is included automatically and one defined here can conflict. +Builds are available on our [Github Releases](https://github.com/dogeorg/dogebox/releases) page. - - install 'nixos-generators', if you have the nix package manager or are running NixOS you can just run 'nix-shell -p nixos-generators' - - - build the desired image with 'nixos-generate -c configuration.nix -f ' - - Tested image formats include: - - docker - - install-iso - - iso - - lxc / lxc-metadata - - proxmox-lxc - - qcow - - vmware - - - The build output should tell you the name and location of the built image. - -### 'docker' for docker/podman -Use 'docker import' or 'podman import' to generate a container image. You will need to manually specify a run CMD. - -### 'install-iso / iso' for optical media images -Generates a bootable iso, 'install-iso' will give you an installer, 'iso' will be a live CD. - -### 'lxc / lxc-metadata, proxmox-lxc' for linux containers -Use 'lxc' and 'lxc-metadata' for a manual container, or load the file generated by 'proxmox-lxc' as a CT template to generate a container in proxmox. - -### 'qcow' for qemu qcow2 -Can be used as a disk image for qemu. - -### 'vmware' for VMWare and VirtualBox -Generates a VMDK file that can be used by VMware or VirtualBox VMs directly - -If you'd prefer a VDI, you can convert with 'VBoxManage clonehd --format VDI .vmdk .vdi' - -Generating a VDI out of the box with '-f virtualbox' doesn't appear to be working currently with the default config. +> [!NOTE] +> All releases currently have hardcoded credentials until we work on SSH management. These are `shibe:suchpass` diff --git a/docs/BUILDING.md b/docs/BUILDING.md new file mode 100644 index 0000000..a31e565 --- /dev/null +++ b/docs/BUILDING.md @@ -0,0 +1,43 @@ +# Building Dogebox + +## SD and SD installer images + +These are built with FriendlyElec's sd-fuse_rk3588. Documentation TBA. + +## Container/VM images + +Quick notes on building a container or VM image from a configuration.nix file: + +- Make sure the configuration.nix doesn't mention a bootloader, an appropriate one is included automatically and one defined here can conflict. + +- Install `nixos-generators`, if you have the nix package manager or are running NixOS you can just run 'nix-shell -p nixos-generators' + +- Build the desired image with `nixos-generate -c configuration.nix -f $format` + +Tested image formats include: `docker`, `install-iso`, `iso`, `lxc`, `lxc-metadata`, `proxmox-lxc`, `qcow`, `vmware` + +- The build output should tell you the name and location of the built image. + +### 'docker' for docker/podman + +Use `docker import` or 'podman import' to generate a container image. You will need to manually specify a run CMD. + +### 'install-iso / iso' for optical media images + +Generates a bootable iso, `install-iso` will give you an installer, `iso` will be a live CD. + +### 'lxc / lxc-metadata, proxmox-lxc' for linux containers + +Use `lxc` and `lxc-metadata` for a manual container, or load the file generated by `proxmox-lxc` as a CT template to generate a container in proxmox. + +### 'qcow' for qemu qcow2 + +Can be used as a disk image for qemu. + +### 'vmware' for VMWare and VirtualBox + +Generates a VMDK file that can be used by VMware or VirtualBox VMs directly + +If you'd prefer a VDI, you can convert with `VBoxManage clonehd --format VDI .vmdk .vdi` + +Generating a VDI out of the box with `-f virtualbox` doesn't appear to be working currently with the default config. diff --git a/docs/img/dogebox-logo.png b/docs/img/dogebox-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..252dcc64a6a2a0453b6858807d3ca0287d8686be GIT binary patch literal 191587 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%0AtA_*ORrm%x0j839HjG~D^5Yh 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℘GGIE)`{ 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 literal 0 HcmV?d00001 From 076f87e39bfa568de9167fe5831b981da4028987 Mon Sep 17 00:00:00 2001 From: Adam Brady Date: Fri, 6 Sep 2024 14:59:47 +1000 Subject: [PATCH 04/31] docs --- README.md | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 58 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 3dd0cd1..533d0ac 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,7 @@ -

+

> [!CAUTION] > Dogebox is currently in a pre-alpha developer preview. Do not use it for any production workloads, and definitely don't send any money to addresses generated by it. @@ -11,5 +10,59 @@ Builds are available on our [Github Releases](https://github.com/dogeorg/dogebox/releases) page. -> [!NOTE] +> [!NOTE] > All releases currently have hardcoded credentials until we work on SSH management. These are `shibe:suchpass` + +## Running It + +Currently, only "virtual machine" images are being released. We plan to release ARM (`aarch64`) and `x86_64` compatible hardware images over the next couple of weeks. + +See details below for specific setups: + +
+ Running in QEMU + +1. First, grab the latest QEMU release. + +2. Launch the image with the following command: + +```bash +qemu-system-x86_64 \ +-drive file=dogebox.qcow2,format=qcow2 \ +-m 4G \ +-smp 2 \ +-nographic \ +-netdev user,id=net0,hostfwd=tcp::2222-:22 \ +-device virtio-net,netdev=net0 +``` + +
+ +
+ Running in VMWare + +TODO :) + +
+ +
+ Running in Virtualbox + +TODO :) + +
+ +
+ Running on Proxmox + +TODO :) + +
+ +## Issues + +If you're struggling to get something working, please open a github issue with a description of the problem. + +## Contributing + +If you want to contribute, please check the current [roadmap](https://docs.google.com/spreadsheets/d/1FfJ_c-PjJdzkTAB3QFmDd2PRadrtNgvOhuDJTBEeOWU/view?gid=759122314#gid=759122314), and join our discord server (TODO) to start chatting with other developers. From 62a3c1c486bcbf05ab59b9b5ffafa2e8d6084cd3 Mon Sep 17 00:00:00 2001 From: Adam Brady Date: Fri, 6 Sep 2024 15:09:53 +1000 Subject: [PATCH 05/31] move everything into a nix folder --- .../aarch64}/hardware-configuration.nix | 0 nix/aarch64/hardware-configuration.nix | 31 ++++++++++++++++ .../bootloader/bootloader}/default.nix | 0 .../bootloader/bootloader}/extlinux.nix | 0 .../bootloader/bootloader}/systemd-boot.nix | 0 nix/bootloader/default.nix | 24 +++++++++++++ nix/bootloader/extlinux.nix | 8 +++++ nix/bootloader/systemd-boot.nix | 12 +++++++ configuration.nix => nix/configuration.nix | 0 dkm.nix => nix/dkm.nix | 0 dogebox.nix => nix/dogebox.nix | 0 dogeboxd.nix => nix/dogeboxd.nix | 0 .../hardware-configuration.nix | 0 .../x86_64}/hardware-configuration.nix | 0 nix/x86_64/x86_64/hardware-configuration.nix | 35 +++++++++++++++++++ 15 files changed, 110 insertions(+) rename {aarch64 => nix/aarch64/aarch64}/hardware-configuration.nix (100%) create mode 100644 nix/aarch64/hardware-configuration.nix rename {bootloader => nix/bootloader/bootloader}/default.nix (100%) rename {bootloader => nix/bootloader/bootloader}/extlinux.nix (100%) rename {bootloader => nix/bootloader/bootloader}/systemd-boot.nix (100%) create mode 100644 nix/bootloader/default.nix create mode 100644 nix/bootloader/extlinux.nix create mode 100644 nix/bootloader/systemd-boot.nix rename configuration.nix => nix/configuration.nix (100%) rename dkm.nix => nix/dkm.nix (100%) rename dogebox.nix => nix/dogebox.nix (100%) rename dogeboxd.nix => nix/dogeboxd.nix (100%) rename hardware-configuration.nix => nix/hardware-configuration.nix (100%) rename {x86_64 => nix/x86_64}/hardware-configuration.nix (100%) create mode 100644 nix/x86_64/x86_64/hardware-configuration.nix diff --git a/aarch64/hardware-configuration.nix b/nix/aarch64/aarch64/hardware-configuration.nix similarity index 100% rename from aarch64/hardware-configuration.nix rename to nix/aarch64/aarch64/hardware-configuration.nix diff --git a/nix/aarch64/hardware-configuration.nix b/nix/aarch64/hardware-configuration.nix new file mode 100644 index 0000000..f57e49d --- /dev/null +++ b/nix/aarch64/hardware-configuration.nix @@ -0,0 +1,31 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ config, lib, pkgs, modulesPath, ... }: + +{ + imports = + [ (modulesPath + "/profiles/qemu-guest.nix") + ]; + + boot.initrd.availableKernelModules = [ "virtio_pci" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-label/DOGEBOX"; + fsType = "ext4"; + }; + + swapDevices = [ ]; + + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking + # (the default) this is the recommended approach. When using systemd-networkd it's + # still possible to use this option, but it's recommended to use it in conjunction + # with explicit per-interface declarations with `networking.interfaces..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.enp0s1.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux"; +} diff --git a/bootloader/default.nix b/nix/bootloader/bootloader/default.nix similarity index 100% rename from bootloader/default.nix rename to nix/bootloader/bootloader/default.nix diff --git a/bootloader/extlinux.nix b/nix/bootloader/bootloader/extlinux.nix similarity index 100% rename from bootloader/extlinux.nix rename to nix/bootloader/bootloader/extlinux.nix diff --git a/bootloader/systemd-boot.nix b/nix/bootloader/bootloader/systemd-boot.nix similarity index 100% rename from bootloader/systemd-boot.nix rename to nix/bootloader/bootloader/systemd-boot.nix diff --git a/nix/bootloader/default.nix b/nix/bootloader/default.nix new file mode 100644 index 0000000..0bcd5fd --- /dev/null +++ b/nix/bootloader/default.nix @@ -0,0 +1,24 @@ +{ config, libs, pkgs, ... }: + +{ + + boot = if pkgs.system == "aarch64-linux" then { + + # Use the extlinux boot loader. (NixOS wants to enable GRUB by default) + loader.grub.enable = false; + # Enables the generation of /boot/extlinux/extlinux.conf + loader.generic-extlinux-compatible.enable = true; + + } else { + + # Use the GRUB 2 boot loader. + # boot.loader.grub.enable = true; + # boot.loader.grub.efiSupport = true; + # boot.loader.grub.efiInstallAsRemovable = true; + # boot.loader.efi.efiSysMountPoint = "/boot/efi"; + # Define on which hard drive you want to install Grub. + # boot.loader.grub.device = "/dev/sda"; # or "nodev" for efi only + loader.systemd-boot.enable = true; + + }; +} diff --git a/nix/bootloader/extlinux.nix b/nix/bootloader/extlinux.nix new file mode 100644 index 0000000..09864ff --- /dev/null +++ b/nix/bootloader/extlinux.nix @@ -0,0 +1,8 @@ +{ config, libs, pkgs, ... }: + +{ + # Use the extlinux boot loader. (NixOS wants to enable GRUB by default) + boot.loader.grub.enable = false; + # Enables the generation of /boot/extlinux/extlinux.conf + boot.loader.generic-extlinux-compatible.enable = true; +} diff --git a/nix/bootloader/systemd-boot.nix b/nix/bootloader/systemd-boot.nix new file mode 100644 index 0000000..790af2e --- /dev/null +++ b/nix/bootloader/systemd-boot.nix @@ -0,0 +1,12 @@ +{ config, libs, pkgs, ... }: + +{ + # Use the GRUB 2 boot loader. + # boot.loader.grub.enable = true; + # boot.loader.grub.efiSupport = true; + # boot.loader.grub.efiInstallAsRemovable = true; + # boot.loader.efi.efiSysMountPoint = "/boot/efi"; + # Define on which hard drive you want to install Grub. + # boot.loader.grub.device = "/dev/sda"; # or "nodev" for efi only + boot.loader.systemd-boot.enable = true; +} diff --git a/configuration.nix b/nix/configuration.nix similarity index 100% rename from configuration.nix rename to nix/configuration.nix diff --git a/dkm.nix b/nix/dkm.nix similarity index 100% rename from dkm.nix rename to nix/dkm.nix diff --git a/dogebox.nix b/nix/dogebox.nix similarity index 100% rename from dogebox.nix rename to nix/dogebox.nix diff --git a/dogeboxd.nix b/nix/dogeboxd.nix similarity index 100% rename from dogeboxd.nix rename to nix/dogeboxd.nix diff --git a/hardware-configuration.nix b/nix/hardware-configuration.nix similarity index 100% rename from hardware-configuration.nix rename to nix/hardware-configuration.nix diff --git a/x86_64/hardware-configuration.nix b/nix/x86_64/hardware-configuration.nix similarity index 100% rename from x86_64/hardware-configuration.nix rename to nix/x86_64/hardware-configuration.nix diff --git a/nix/x86_64/x86_64/hardware-configuration.nix b/nix/x86_64/x86_64/hardware-configuration.nix new file mode 100644 index 0000000..ad15a0c --- /dev/null +++ b/nix/x86_64/x86_64/hardware-configuration.nix @@ -0,0 +1,35 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ config, lib, pkgs, modulesPath, ... }: + +{ + imports = [ ]; + + boot.initrd.availableKernelModules = [ "ata_piix" "ohci_pci" "ehci_pci" "sd_mod" "sr_mod" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-label/DOGEBOX"; + fsType = "ext4"; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/7FCD-A2D1"; + fsType = "vfat"; + }; + + swapDevices = [ ]; + + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking + # (the default) this is the recommended approach. When using systemd-networkd it's + # still possible to use this option, but it's recommended to use it in conjunction + # with explicit per-interface declarations with `networking.interfaces..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.enp0s3.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + virtualisation.virtualbox.guest.enable = true; +} From c40a44446ef101cfa22b3f550415526e7df8842c Mon Sep 17 00:00:00 2001 From: Adam Brady Date: Sun, 8 Sep 2024 19:52:10 +1000 Subject: [PATCH 06/31] commit --- Makefile | 17 +++++++++ .../aarch64/hardware-configuration.nix | 31 ---------------- nix/aarch64/hardware-configuration.nix | 10 ++++++ nix/bootloader/bootloader/default.nix | 24 ------------- nix/bootloader/bootloader/extlinux.nix | 8 ----- nix/bootloader/bootloader/systemd-boot.nix | 12 ------- nix/bootloader/default.nix | 10 ++++++ nix/bootloader/extlinux.nix | 10 ++++++ nix/bootloader/systemd-boot.nix | 10 ++++++ nix/configuration.nix | 24 ++++++------- nix/dkm.nix | 18 ++++++++-- nix/dogebox.nix | 16 +++++++-- nix/dogeboxd.nix | 14 +++++++- nix/hardware-configuration.nix | 13 +++++-- nix/result | 1 + nix/x86_64/hardware-configuration.nix | 16 +++++++-- nix/x86_64/x86_64/hardware-configuration.nix | 35 ------------------- shell.nix | 7 ++++ 18 files changed, 144 insertions(+), 132 deletions(-) create mode 100644 Makefile delete mode 100644 nix/aarch64/aarch64/hardware-configuration.nix delete mode 100644 nix/bootloader/bootloader/default.nix delete mode 100644 nix/bootloader/bootloader/extlinux.nix delete mode 100644 nix/bootloader/bootloader/systemd-boot.nix create mode 120000 nix/result delete mode 100644 nix/x86_64/x86_64/hardware-configuration.nix create mode 100644 shell.nix diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..025627c --- /dev/null +++ b/Makefile @@ -0,0 +1,17 @@ +ROOT_CONFIG = nix/configuration.nix +VM_NAME = dogebox-$(shell date +%s) + +virtualbox: + @echo "Generating VirtualBox OVA..." + @nixos-generate -c $(ROOT_CONFIG) -f virtualbox + +virtualbox-launch: virtualbox + @echo "Importing and launching the VirtualBox VM..." + # Capture the generated OVA path from the nixos-generate output + OVA_FILE=$$(nixos-generate -c $(ROOT_CONFIG) -f virtualbox | grep -o '.*\.ova$$'); \ + BRIDGE_ADAPTER=$$(VBoxManage list bridgedifs | grep '^Name:' | head -n1 | awk '{print $$2}'); \ + VBoxManage import $$OVA_FILE --vsys 0 --vmname "$(VM_NAME)" && \ + VBoxManage modifyvm "$(VM_NAME)" --nic1 bridged --bridgeadapter1 $$BRIDGE_ADAPTER && \ + VBoxManage startvm "$(VM_NAME)" + +.PHONY: virtualbox virtualbox-launch diff --git a/nix/aarch64/aarch64/hardware-configuration.nix b/nix/aarch64/aarch64/hardware-configuration.nix deleted file mode 100644 index f57e49d..0000000 --- a/nix/aarch64/aarch64/hardware-configuration.nix +++ /dev/null @@ -1,31 +0,0 @@ -# Do not modify this file! It was generated by ‘nixos-generate-config’ -# and may be overwritten by future invocations. Please make changes -# to /etc/nixos/configuration.nix instead. -{ config, lib, pkgs, modulesPath, ... }: - -{ - imports = - [ (modulesPath + "/profiles/qemu-guest.nix") - ]; - - boot.initrd.availableKernelModules = [ "virtio_pci" ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ ]; - boot.extraModulePackages = [ ]; - - fileSystems."/" = - { device = "/dev/disk/by-label/DOGEBOX"; - fsType = "ext4"; - }; - - swapDevices = [ ]; - - # Enables DHCP on each ethernet and wireless interface. In case of scripted networking - # (the default) this is the recommended approach. When using systemd-networkd it's - # still possible to use this option, but it's recommended to use it in conjunction - # with explicit per-interface declarations with `networking.interfaces..useDHCP`. - networking.useDHCP = lib.mkDefault true; - # networking.interfaces.enp0s1.useDHCP = lib.mkDefault true; - - nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux"; -} diff --git a/nix/aarch64/hardware-configuration.nix b/nix/aarch64/hardware-configuration.nix index f57e49d..631d5a3 100644 --- a/nix/aarch64/hardware-configuration.nix +++ b/nix/aarch64/hardware-configuration.nix @@ -3,6 +3,9 @@ # to /etc/nixos/configuration.nix instead. { config, lib, pkgs, modulesPath, ... }: +let + configDir = ./.; +in { imports = [ (modulesPath + "/profiles/qemu-guest.nix") @@ -28,4 +31,11 @@ # networking.interfaces.enp0s1.useDHCP = lib.mkDefault true; nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux"; + + # Copy self into build image. + environment.etc = { + "nixos/aarch64/hardware-configuration.nix" = { + source = "${configDir}/hardware-configuration.nix"; + }; + }; } diff --git a/nix/bootloader/bootloader/default.nix b/nix/bootloader/bootloader/default.nix deleted file mode 100644 index 0bcd5fd..0000000 --- a/nix/bootloader/bootloader/default.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ config, libs, pkgs, ... }: - -{ - - boot = if pkgs.system == "aarch64-linux" then { - - # Use the extlinux boot loader. (NixOS wants to enable GRUB by default) - loader.grub.enable = false; - # Enables the generation of /boot/extlinux/extlinux.conf - loader.generic-extlinux-compatible.enable = true; - - } else { - - # Use the GRUB 2 boot loader. - # boot.loader.grub.enable = true; - # boot.loader.grub.efiSupport = true; - # boot.loader.grub.efiInstallAsRemovable = true; - # boot.loader.efi.efiSysMountPoint = "/boot/efi"; - # Define on which hard drive you want to install Grub. - # boot.loader.grub.device = "/dev/sda"; # or "nodev" for efi only - loader.systemd-boot.enable = true; - - }; -} diff --git a/nix/bootloader/bootloader/extlinux.nix b/nix/bootloader/bootloader/extlinux.nix deleted file mode 100644 index 09864ff..0000000 --- a/nix/bootloader/bootloader/extlinux.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ config, libs, pkgs, ... }: - -{ - # Use the extlinux boot loader. (NixOS wants to enable GRUB by default) - boot.loader.grub.enable = false; - # Enables the generation of /boot/extlinux/extlinux.conf - boot.loader.generic-extlinux-compatible.enable = true; -} diff --git a/nix/bootloader/bootloader/systemd-boot.nix b/nix/bootloader/bootloader/systemd-boot.nix deleted file mode 100644 index 790af2e..0000000 --- a/nix/bootloader/bootloader/systemd-boot.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ config, libs, pkgs, ... }: - -{ - # Use the GRUB 2 boot loader. - # boot.loader.grub.enable = true; - # boot.loader.grub.efiSupport = true; - # boot.loader.grub.efiInstallAsRemovable = true; - # boot.loader.efi.efiSysMountPoint = "/boot/efi"; - # Define on which hard drive you want to install Grub. - # boot.loader.grub.device = "/dev/sda"; # or "nodev" for efi only - boot.loader.systemd-boot.enable = true; -} diff --git a/nix/bootloader/default.nix b/nix/bootloader/default.nix index 0bcd5fd..a2cb7dc 100644 --- a/nix/bootloader/default.nix +++ b/nix/bootloader/default.nix @@ -1,5 +1,8 @@ { config, libs, pkgs, ... }: +let + configDir = ./.; +in { boot = if pkgs.system == "aarch64-linux" then { @@ -21,4 +24,11 @@ loader.systemd-boot.enable = true; }; + + # Copy self into build image. + environment.etc = { + "nixos/bootloader/default.nix" = { + source = "${configDir}/default.nix"; + }; + }; } diff --git a/nix/bootloader/extlinux.nix b/nix/bootloader/extlinux.nix index 09864ff..4908ba8 100644 --- a/nix/bootloader/extlinux.nix +++ b/nix/bootloader/extlinux.nix @@ -1,8 +1,18 @@ { config, libs, pkgs, ... }: +let + configDir = ./.; +in { # Use the extlinux boot loader. (NixOS wants to enable GRUB by default) boot.loader.grub.enable = false; # Enables the generation of /boot/extlinux/extlinux.conf boot.loader.generic-extlinux-compatible.enable = true; + + # Copy self into build image. + environment.etc = { + "nixos/bootloader/extlinux.nix" = { + source = "${configDir}/extlinux.nix"; + }; + }; } diff --git a/nix/bootloader/systemd-boot.nix b/nix/bootloader/systemd-boot.nix index 790af2e..366227f 100644 --- a/nix/bootloader/systemd-boot.nix +++ b/nix/bootloader/systemd-boot.nix @@ -1,5 +1,8 @@ { config, libs, pkgs, ... }: +let + configDir = ./.; +in { # Use the GRUB 2 boot loader. # boot.loader.grub.enable = true; @@ -9,4 +12,11 @@ # Define on which hard drive you want to install Grub. # boot.loader.grub.device = "/dev/sda"; # or "nodev" for efi only boot.loader.systemd-boot.enable = true; + + # Copy self into build image. + environment.etc = { + "nixos/bootloader/systemd-boot.nix" = { + source = "${configDir}/systemd-boot.nix"; + }; + }; } diff --git a/nix/configuration.nix b/nix/configuration.nix index d34e8b3..5c4da4f 100644 --- a/nix/configuration.nix +++ b/nix/configuration.nix @@ -4,6 +4,8 @@ { config, lib, pkgs, ... }: +let configDir = ./.; +in { imports = [ #./bootloader @@ -33,22 +35,20 @@ # Set your time zone. time.timeZone = "Australia/Brisbane"; - # Install a few utility packages environment.systemPackages = with pkgs; [ + # Install a few utility packages git vim wget ]; + + # Copy self into build image. + environment.etc = { + "nixos/configuration.nix" = { + source = "${configDir}/configuration.nix"; + }; + }; - # /media does not exist by default, and devmon's default config - # will mount devices at '/media//' rather - # than '/media/' for some reason, so this should - # ensure it exists. - systemd.tmpfiles.rules = [ - "d /media 0755 root root -" - ]; - - services.devmon.enable = true; - - system.stateVersion = "23.11"; # Did you read the comment? + # DO NOT CHANGE THIS. EVER. EVEN WHEN UPDATING YOUR SYSTEM PAST 24.05. + system.stateVersion = "24.05"; } diff --git a/nix/dkm.nix b/nix/dkm.nix index 4679523..c4e9070 100644 --- a/nix/dkm.nix +++ b/nix/dkm.nix @@ -1,6 +1,9 @@ { config, lib, pkgs, ... }: -let dogebox = import { inherit pkgs; }; in +let + dogebox = import { inherit pkgs; }; + configDir = ./.; +in { environment.systemPackages = [ dogebox.dkm @@ -11,16 +14,27 @@ let dogebox = import { inherit pkgs; }; in group = "dogebox"; extraGroups = []; }; + + systemd.tmpfiles.rules = [ + "d /opt/dkm 0700 dkm dogebox -" + ]; systemd.services.dkm = { after = [ "network.target" ]; wantedBy = [ "multi-user.target" ]; serviceConfig = { - ExecStart = "${dogebox.dkm}/bin/dkm"; + ExecStart = "${dogebox.dkm}/bin/dkm --dir /opt/dkm"; Restart = "always"; User = "dkm"; Group = "dogebox"; }; }; + + # Copy self into build image. + environment.etc = { + "nixos/dkm.nix" = { + source = "${configDir}/dkm.nix"; + }; + }; } diff --git a/nix/dogebox.nix b/nix/dogebox.nix index 4bc9b32..dcf7728 100644 --- a/nix/dogebox.nix +++ b/nix/dogebox.nix @@ -1,6 +1,9 @@ { config, lib, pkgs, ... }: -let dogebox = import { inherit pkgs; }; in +let + dogebox = import { inherit pkgs; }; + configDir = ./.; +in { imports = [ ./dkm.nix @@ -25,7 +28,7 @@ let dogebox = import { inherit pkgs; }; in users.users.shibe = { isNormalUser = true; - extraGroups = [ "wheel" ]; + extraGroups = [ "wheel" "dogebox" ]; # Very temporary, until we have SSH key management in dpanel. password = "suchpass"; @@ -34,4 +37,13 @@ let dogebox = import { inherit pkgs; }; in # These will be overridden by the included dogebox.nix file above, but set defaults. networking.wireless.enable = lib.mkDefault false; networking.networkmanager.enable = lib.mkForce false; + + networking.firewall.enable = true; + + # Copy self into build image. + environment.etc = { + "nixos/dogebox.nix" = { + source = "${configDir}/dogebox.nix"; + }; + }; } diff --git a/nix/dogeboxd.nix b/nix/dogeboxd.nix index aafcd9e..2703b3b 100644 --- a/nix/dogeboxd.nix +++ b/nix/dogeboxd.nix @@ -1,6 +1,9 @@ { config, lib, pkgs, ... }: -let dogebox = import { inherit pkgs; }; in +let + dogebox = import { inherit pkgs; }; + configDir = ./.; +in { environment.systemPackages = [ dogebox.dogeboxd @@ -30,6 +33,8 @@ let dogebox = import { inherit pkgs; }; in }; }; + networking.firewall.allowedTCPPorts = [ 3000 8080 ]; + security.wrappers.nixosrebuildswitch = { source = "${dogebox.dogeboxd}/dogeboxd/bin/nixosrebuildswitch"; owner = "root"; @@ -43,4 +48,11 @@ let dogebox = import { inherit pkgs; }; in group = "root"; setuid = true; }; + + # Copy self into build image. + environment.etc = { + "nixos/dogeboxd.nix" = { + source = "${configDir}/dogeboxd.nix"; + }; + }; } diff --git a/nix/hardware-configuration.nix b/nix/hardware-configuration.nix index 52ab7b1..875c818 100644 --- a/nix/hardware-configuration.nix +++ b/nix/hardware-configuration.nix @@ -1,5 +1,8 @@ { config, lib, pkgs, modulesPath, ... }: +let + configDir = ./.; +in { fileSystems."/" = lib.mkDefault @@ -8,12 +11,18 @@ fsType = "ext4"; }; - fileSystems."/boot" = lib.mkDefault + fileSystems."/boot" = lib.mkForce { device = "/dev/sda1"; - fsType = "vfat"; + fsType = "ext4"; }; networking.useDHCP = lib.mkDefault true; + # Copy self into build image. + environment.etc = { + "nixos/hardware-configuration.nix" = { + source = "${configDir}/hardware-configuration.nix"; + }; + }; } diff --git a/nix/result b/nix/result new file mode 120000 index 0000000..4d3e9fb --- /dev/null +++ b/nix/result @@ -0,0 +1 @@ +/nix/store/hwal3qzmfiz30yhn9shdj0z3sl2rb8y8-dkm-0.1 \ No newline at end of file diff --git a/nix/x86_64/hardware-configuration.nix b/nix/x86_64/hardware-configuration.nix index ad15a0c..289af85 100644 --- a/nix/x86_64/hardware-configuration.nix +++ b/nix/x86_64/hardware-configuration.nix @@ -3,6 +3,9 @@ # to /etc/nixos/configuration.nix instead. { config, lib, pkgs, modulesPath, ... }: +let + configDir = ./.; +in { imports = [ ]; @@ -16,9 +19,9 @@ fsType = "ext4"; }; - fileSystems."/boot" = + fileSystems."/boot" = lib.mkForce { device = "/dev/disk/by-uuid/7FCD-A2D1"; - fsType = "vfat"; + fsType = "ext4"; }; swapDevices = [ ]; @@ -31,5 +34,12 @@ # networking.interfaces.enp0s3.useDHCP = lib.mkDefault true; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - virtualisation.virtualbox.guest.enable = true; + #virtualisation.virtualbox.guest.enable = true; + + # Copy self into build image. + environment.etc = { + "nixos/x86_64/hardware-configuration.nix" = { + source = "${configDir}/hardware-configuration.nix"; + }; + }; } diff --git a/nix/x86_64/x86_64/hardware-configuration.nix b/nix/x86_64/x86_64/hardware-configuration.nix deleted file mode 100644 index ad15a0c..0000000 --- a/nix/x86_64/x86_64/hardware-configuration.nix +++ /dev/null @@ -1,35 +0,0 @@ -# Do not modify this file! It was generated by ‘nixos-generate-config’ -# and may be overwritten by future invocations. Please make changes -# to /etc/nixos/configuration.nix instead. -{ config, lib, pkgs, modulesPath, ... }: - -{ - imports = [ ]; - - boot.initrd.availableKernelModules = [ "ata_piix" "ohci_pci" "ehci_pci" "sd_mod" "sr_mod" ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ ]; - boot.extraModulePackages = [ ]; - - fileSystems."/" = - { device = "/dev/disk/by-label/DOGEBOX"; - fsType = "ext4"; - }; - - fileSystems."/boot" = - { device = "/dev/disk/by-uuid/7FCD-A2D1"; - fsType = "vfat"; - }; - - swapDevices = [ ]; - - # Enables DHCP on each ethernet and wireless interface. In case of scripted networking - # (the default) this is the recommended approach. When using systemd-networkd it's - # still possible to use this option, but it's recommended to use it in conjunction - # with explicit per-interface declarations with `networking.interfaces..useDHCP`. - networking.useDHCP = lib.mkDefault true; - # networking.interfaces.enp0s3.useDHCP = lib.mkDefault true; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - virtualisation.virtualbox.guest.enable = true; -} diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000..0a81e84 --- /dev/null +++ b/shell.nix @@ -0,0 +1,7 @@ +{ pkgs ? import {} }: + +pkgs.mkShell { + buildInputs = [ + pkgs.nixos-generators + ]; +} From 1e3919ef42ff8bbf873008c4042c5de12390b91f Mon Sep 17 00:00:00 2001 From: Adam Brady Date: Sun, 8 Sep 2024 21:11:37 +1000 Subject: [PATCH 07/31] make vbox work --- Makefile | 5 ++-- nix/{configuration.nix => base.nix} | 14 +++++----- nix/hardware-configuration.nix | 8 +++--- nix/result | 1 - nix/vbox.nix | 42 +++++++++++++++++++++++++++++ 5 files changed, 55 insertions(+), 15 deletions(-) rename nix/{configuration.nix => base.nix} (89%) delete mode 120000 nix/result create mode 100644 nix/vbox.nix diff --git a/Makefile b/Makefile index 025627c..38f4502 100644 --- a/Makefile +++ b/Makefile @@ -1,14 +1,13 @@ -ROOT_CONFIG = nix/configuration.nix VM_NAME = dogebox-$(shell date +%s) virtualbox: @echo "Generating VirtualBox OVA..." - @nixos-generate -c $(ROOT_CONFIG) -f virtualbox + @nixos-generate -c nix/vbox.nix -f virtualbox virtualbox-launch: virtualbox @echo "Importing and launching the VirtualBox VM..." # Capture the generated OVA path from the nixos-generate output - OVA_FILE=$$(nixos-generate -c $(ROOT_CONFIG) -f virtualbox | grep -o '.*\.ova$$'); \ + OVA_FILE=$$(nixos-generate -c nix/vbox.nix -f virtualbox | grep -o '.*\.ova$$'); \ BRIDGE_ADAPTER=$$(VBoxManage list bridgedifs | grep '^Name:' | head -n1 | awk '{print $$2}'); \ VBoxManage import $$OVA_FILE --vsys 0 --vmname "$(VM_NAME)" && \ VBoxManage modifyvm "$(VM_NAME)" --nic1 bridged --bridgeadapter1 $$BRIDGE_ADAPTER && \ diff --git a/nix/configuration.nix b/nix/base.nix similarity index 89% rename from nix/configuration.nix rename to nix/base.nix index 5c4da4f..6f6a841 100644 --- a/nix/configuration.nix +++ b/nix/base.nix @@ -8,8 +8,8 @@ let configDir = ./.; in { imports = - [ #./bootloader - ./hardware-configuration.nix + [ + # ./hardware-configuration.nix ./dogebox.nix ] ; @@ -41,14 +41,14 @@ in vim wget ]; + + # DO NOT CHANGE THIS. EVER. EVEN WHEN UPDATING YOUR SYSTEM PAST 24.05. + system.stateVersion = "24.05"; # Copy self into build image. environment.etc = { - "nixos/configuration.nix" = { - source = "${configDir}/configuration.nix"; + "nixos/base.nix" = { + source = "${configDir}/base.nix"; }; }; - - # DO NOT CHANGE THIS. EVER. EVEN WHEN UPDATING YOUR SYSTEM PAST 24.05. - system.stateVersion = "24.05"; } diff --git a/nix/hardware-configuration.nix b/nix/hardware-configuration.nix index 875c818..328ea8b 100644 --- a/nix/hardware-configuration.nix +++ b/nix/hardware-configuration.nix @@ -7,14 +7,14 @@ in fileSystems."/" = lib.mkDefault { - device = "/dev/disk/by-label/DOGEBOX"; + device = "/dev/disk/by-label/dogebox"; fsType = "ext4"; }; - fileSystems."/boot" = lib.mkForce + fileSystems."/boot" = lib.mkDefault { - device = "/dev/sda1"; - fsType = "ext4"; + device = "/dev/sda"; + fsType = "vfat"; }; networking.useDHCP = lib.mkDefault true; diff --git a/nix/result b/nix/result deleted file mode 120000 index 4d3e9fb..0000000 --- a/nix/result +++ /dev/null @@ -1 +0,0 @@ -/nix/store/hwal3qzmfiz30yhn9shdj0z3sl2rb8y8-dkm-0.1 \ No newline at end of file diff --git a/nix/vbox.nix b/nix/vbox.nix new file mode 100644 index 0000000..b8ae4e2 --- /dev/null +++ b/nix/vbox.nix @@ -0,0 +1,42 @@ +# Edit this configuration file to define what should be installed on +# your system. Help is available in the configuration.nix(5) man page, on +# https://search.nixos.org/options and in the NixOS manual (`nixos-help`). + +{ config, lib, pkgs, ... }: + +let configDir = ./.; +in +{ + imports = + [ + ./base.nix + ] + ; + + # Copy self into build image. + environment.etc = { + "nixos/configuration.nix" = { + source = "${configDir}/vbox.nix"; + }; + }; + + /* Below copied from ${nixpkgs}/nixos/modules/virtualisation/virtualbox-image.nix */ + + fileSystems = { + "/" = { + device = "/dev/disk/by-label/nixos"; + autoResize = true; + fsType = "ext4"; + }; + }; + + boot.growPartition = true; + boot.loader.grub.device = "/dev/sda"; + + swapDevices = [{ + device = "/var/swap"; + size = 2048; + }]; + + virtualisation.virtualbox.guest.enable = true; +} From ec3c9d67163661d06a246f338f1faea26a7723cf Mon Sep 17 00:00:00 2001 From: Timothy Stebbing Date: Mon, 9 Sep 2024 15:18:03 +1000 Subject: [PATCH 08/31] Update README.md --- README.md | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 533d0ac..15be975 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,47 @@ > [!CAUTION] > Dogebox is currently in a pre-alpha developer preview. Do not use it for any production workloads, and definitely don't send any money to addresses generated by it. + +## What is Dogebox +Dogebox is a Linux OS with a web-based management interface and permission-based routing and container system designed to +provide a platform and DRE (Dogecoin Runtime Environment) for building services and apps on top of the Dogecoin blockchain. + +Services & applications packaged for Dogebox are called 'pups', these are standard linux services that are executed in +isolated containers, with access to other 'pups' and the Dogecoin blockchain via ACL/Permission controlled internal routing. + +## Current Status + +**As a pre-alpha preview, these images are provided for people to get an idea of how the system works, while we push to +complete all the 'glue' that brings the whole system together. We expect rapid acceleration of functionality over the +next two weeks (now - 20th Sept 2024).** + +Expect that these images will be rapidly replaced as we get closer to a complete working system! + +### Functionality in current nightly: + +- **Builtin: dogeboxd / DKM (doge key manager) running** +- *Setup Dogebox & configure password / master keys* +- *Install a 'test-pup' and stop/start it* + + +### Functionality end of week: + +- **Builtin: Dogenet running** (Dogebox meta-gossip-protocol service for node communication) +- **Builtin: Internal Pup API Router** (Pups talking to eachother) +- *SPV node pup available* +- *Core node pup available* +- *GigaWallet pup avaialble* + +### Functionality remaining (end Sept): + +- *Network Map pup available* +- *Identity pup available* +- *dPanel: pup realtime logging* +- *dPanel: resolve API deps when installing pups* +- **ARM builds available** + + + ## Getting It Builds are available on our [Github Releases](https://github.com/dogeorg/dogebox/releases) page. @@ -65,4 +106,4 @@ If you're struggling to get something working, please open a github issue with a ## Contributing -If you want to contribute, please check the current [roadmap](https://docs.google.com/spreadsheets/d/1FfJ_c-PjJdzkTAB3QFmDd2PRadrtNgvOhuDJTBEeOWU/view?gid=759122314#gid=759122314), and join our discord server (TODO) to start chatting with other developers. +If you want to contribute, please check the current [roadmap](https://docs.google.com/spreadsheets/d/1FfJ_c-PjJdzkTAB3QFmDd2PRadrtNgvOhuDJTBEeOWU/view?gid=759122314#gid=759122314), and join our [discord server](https://discord.gg/VEUMWpThg9) to start chatting with other developers. From c14fd817ab036276432434b27f610f74c6c39a44 Mon Sep 17 00:00:00 2001 From: Stephen Quoll Date: Mon, 9 Sep 2024 16:10:43 +1000 Subject: [PATCH 09/31] Adding pve config --- Makefile | 6 +++++- nix/pve.nix | 23 +++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 nix/pve.nix diff --git a/Makefile b/Makefile index 38f4502..6a30983 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,9 @@ VM_NAME = dogebox-$(shell date +%s) +pve: + @echo "Generating Proxmox LXC..." + @nixos-generate -c nix/pve.nix -f proxmox-lxc + virtualbox: @echo "Generating VirtualBox OVA..." @nixos-generate -c nix/vbox.nix -f virtualbox @@ -13,4 +17,4 @@ virtualbox-launch: virtualbox VBoxManage modifyvm "$(VM_NAME)" --nic1 bridged --bridgeadapter1 $$BRIDGE_ADAPTER && \ VBoxManage startvm "$(VM_NAME)" -.PHONY: virtualbox virtualbox-launch +.PHONY: pve virtualbox virtualbox-launch diff --git a/nix/pve.nix b/nix/pve.nix new file mode 100644 index 0000000..d1a479a --- /dev/null +++ b/nix/pve.nix @@ -0,0 +1,23 @@ +# Edit this configuration file to define what should be installed on +# your system. Help is available in the configuration.nix(5) man page, on +# https://search.nixos.org/options and in the NixOS manual (`nixos-help`). + +{ config, lib, pkgs, ... }: + +let configDir = ./.; +in +{ + imports = + [ + ./base.nix + ] + ; + + # Copy self into build image. + environment.etc = { + "nixos/configuration.nix" = { + source = "${configDir}/pve.nix"; + }; + }; + +} From 0937ec68dc0255f42a1295d65f4e7e227f889c5b Mon Sep 17 00:00:00 2001 From: Stephen Quoll Date: Mon, 9 Sep 2024 17:06:07 +1000 Subject: [PATCH 10/31] Added lxc workflow to branch --- .github/workflows/generate-proxmox-lxc.yml | 61 ++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 .github/workflows/generate-proxmox-lxc.yml diff --git a/.github/workflows/generate-proxmox-lxc.yml b/.github/workflows/generate-proxmox-lxc.yml new file mode 100644 index 0000000..c35bb9d --- /dev/null +++ b/.github/workflows/generate-proxmox-lxc.yml @@ -0,0 +1,61 @@ +name: 'generate-proxmox-lxc' + +# Controls when the workflow will run +on: + # Triggers the workflow on push or pull request events but only for the "main" branch + #push: + # branches: [ "main" ] + #pull_request: + # branches: [ "main" ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# The following permissions are required for softprops/action-gh-release@v1. +permissions: + contents: write + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + generate: + runs-on: ubuntu-latest + + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v4 + + - name: Install nix + uses: cachix/install-nix-action@v24 + with: + github_access_token: ${{ secrets.GITHUB_TOKEN }} + nix_path: nixpkgs=channel:nixos-24.05 + + - name: Add dogebox channel + run: | + nix-channel --add https://github.com/dogeorg/dogebox-nur-packages/archive/main.tar.gz dogebox + nix-channel --update + +# - name: nixos-rebuild based on configuration-builder.nix +# run: | +# nix-env --install nixos-rebuild +# sudo NIXOS_CONFIG=/home/runner/work/dogebox/dogebox/configuration-builder.nix nixos-rebuild switch + + - name: Generate NixOS configuration + run: | + nix run github:nix-community/nixos-generators -- -f proxmox-lxc -c nix/pve.nix | { + read path + echo "BUILD_PATH=$path" >> $GITHUB_ENV + } + + - name: Move the build artifact to a working directory. + run: | + NEW_FILENAME="$(basename ${{ env.BUILD_PATH }})" + RELEASE_PATH="${{ github.workspace }}/$NEW_FILENAME" + cp "${{ env.BUILD_PATH }}" "$RELEASE_PATH" + echo "RELEASE_PATH=$RELEASE_PATH" >> $GITHUB_ENV + + # Create a GitHub release and attach the generated container template. + - name: Release + uses: softprops/action-gh-release@v1 + with: + files: ${{ env.RELEASE_PATH }} From aad2f12a7d819ba1db7d48fcaca71c7d79e5a224 Mon Sep 17 00:00:00 2001 From: stephenquoll Date: Mon, 9 Sep 2024 17:26:04 +1000 Subject: [PATCH 11/31] Update generate-proxmox-lxc.yml --- .github/workflows/generate-proxmox-lxc.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/generate-proxmox-lxc.yml b/.github/workflows/generate-proxmox-lxc.yml index c35bb9d..2f58e22 100644 --- a/.github/workflows/generate-proxmox-lxc.yml +++ b/.github/workflows/generate-proxmox-lxc.yml @@ -42,7 +42,7 @@ jobs: - name: Generate NixOS configuration run: | - nix run github:nix-community/nixos-generators -- -f proxmox-lxc -c nix/pve.nix | { + nix run -I /nix/var/nix/profiles/per-user/root/channels/dogebox github:nix-community/nixos-generators -- -f proxmox-lxc -c nix/pve.nix | { read path echo "BUILD_PATH=$path" >> $GITHUB_ENV } From 9fd19095eed433dbb1589e53ec6f74320d90cf2b Mon Sep 17 00:00:00 2001 From: stephenquoll Date: Mon, 9 Sep 2024 17:29:49 +1000 Subject: [PATCH 12/31] Update generate-proxmox-lxc.yml --- .github/workflows/generate-proxmox-lxc.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/generate-proxmox-lxc.yml b/.github/workflows/generate-proxmox-lxc.yml index 2f58e22..876708f 100644 --- a/.github/workflows/generate-proxmox-lxc.yml +++ b/.github/workflows/generate-proxmox-lxc.yml @@ -42,7 +42,7 @@ jobs: - name: Generate NixOS configuration run: | - nix run -I /nix/var/nix/profiles/per-user/root/channels/dogebox github:nix-community/nixos-generators -- -f proxmox-lxc -c nix/pve.nix | { + nix -I /nix/var/nix/profiles/per-user/root/channels/dogebox run github:nix-community/nixos-generators -- -f proxmox-lxc -c nix/pve.nix | { read path echo "BUILD_PATH=$path" >> $GITHUB_ENV } From 005d0ddc07c84be4793ea02251e0ae06de8633e8 Mon Sep 17 00:00:00 2001 From: stephenquoll Date: Mon, 9 Sep 2024 17:52:09 +1000 Subject: [PATCH 13/31] Update generate-proxmox-lxc.yml --- .github/workflows/generate-proxmox-lxc.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/generate-proxmox-lxc.yml b/.github/workflows/generate-proxmox-lxc.yml index 876708f..319233c 100644 --- a/.github/workflows/generate-proxmox-lxc.yml +++ b/.github/workflows/generate-proxmox-lxc.yml @@ -42,7 +42,7 @@ jobs: - name: Generate NixOS configuration run: | - nix -I /nix/var/nix/profiles/per-user/root/channels/dogebox run github:nix-community/nixos-generators -- -f proxmox-lxc -c nix/pve.nix | { + nix --extra-nix-path dogebox:/nix/var/nix/profiles/per-user/root/channels/dogebox run github:nix-community/nixos-generators -- -f proxmox-lxc -c nix/pve.nix | { read path echo "BUILD_PATH=$path" >> $GITHUB_ENV } From 31a1102ef988ccb83fb6370f1a0b9ad195974b11 Mon Sep 17 00:00:00 2001 From: stephenquoll Date: Mon, 9 Sep 2024 18:25:59 +1000 Subject: [PATCH 14/31] Update generate-proxmox-lxc.yml --- .github/workflows/generate-proxmox-lxc.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/generate-proxmox-lxc.yml b/.github/workflows/generate-proxmox-lxc.yml index 319233c..f8151e5 100644 --- a/.github/workflows/generate-proxmox-lxc.yml +++ b/.github/workflows/generate-proxmox-lxc.yml @@ -34,6 +34,7 @@ jobs: run: | nix-channel --add https://github.com/dogeorg/dogebox-nur-packages/archive/main.tar.gz dogebox nix-channel --update + nix-channel --list # - name: nixos-rebuild based on configuration-builder.nix # run: | @@ -42,7 +43,7 @@ jobs: - name: Generate NixOS configuration run: | - nix --extra-nix-path dogebox:/nix/var/nix/profiles/per-user/root/channels/dogebox run github:nix-community/nixos-generators -- -f proxmox-lxc -c nix/pve.nix | { + nix run github:nix-community/nixos-generators -- -f proxmox-lxc -c nix/pve.nix | { read path echo "BUILD_PATH=$path" >> $GITHUB_ENV } From f92bfc067ed3401916da7c3b6c0113da36306f5f Mon Sep 17 00:00:00 2001 From: stephenquoll Date: Mon, 9 Sep 2024 18:50:30 +1000 Subject: [PATCH 15/31] Update generate-proxmox-lxc.yml --- .github/workflows/generate-proxmox-lxc.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/generate-proxmox-lxc.yml b/.github/workflows/generate-proxmox-lxc.yml index f8151e5..346c97d 100644 --- a/.github/workflows/generate-proxmox-lxc.yml +++ b/.github/workflows/generate-proxmox-lxc.yml @@ -35,7 +35,10 @@ jobs: nix-channel --add https://github.com/dogeorg/dogebox-nur-packages/archive/main.tar.gz dogebox nix-channel --update nix-channel --list - + echo "Profiles dir:" + find /nix/var/nix/profiles/per-user/root/ + export + # - name: nixos-rebuild based on configuration-builder.nix # run: | # nix-env --install nixos-rebuild From e2612b81885d0ba422acd315e4ac1331b6836633 Mon Sep 17 00:00:00 2001 From: stephenquoll Date: Mon, 9 Sep 2024 19:15:55 +1000 Subject: [PATCH 16/31] Update generate-proxmox-lxc.yml --- .github/workflows/generate-proxmox-lxc.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/generate-proxmox-lxc.yml b/.github/workflows/generate-proxmox-lxc.yml index 346c97d..1b55cba 100644 --- a/.github/workflows/generate-proxmox-lxc.yml +++ b/.github/workflows/generate-proxmox-lxc.yml @@ -28,15 +28,16 @@ jobs: uses: cachix/install-nix-action@v24 with: github_access_token: ${{ secrets.GITHUB_TOKEN }} - nix_path: nixpkgs=channel:nixos-24.05 + #nix_path: nixpkgs=channel:nixos-24.05 - name: Add dogebox channel run: | + nix-channel --add https://nixos.org/channels/nixos-24.05 nixos nix-channel --add https://github.com/dogeorg/dogebox-nur-packages/archive/main.tar.gz dogebox nix-channel --update nix-channel --list echo "Profiles dir:" - find /nix/var/nix/profiles/per-user/root/ + find /nix/var/nix/profiles/per-user/root/channels export # - name: nixos-rebuild based on configuration-builder.nix From 22ae30e5dc3ca441d857d01388eeebdee78d51e9 Mon Sep 17 00:00:00 2001 From: stephenquoll Date: Mon, 9 Sep 2024 19:21:30 +1000 Subject: [PATCH 17/31] Update generate-proxmox-lxc.yml --- .github/workflows/generate-proxmox-lxc.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/generate-proxmox-lxc.yml b/.github/workflows/generate-proxmox-lxc.yml index 1b55cba..b2e5279 100644 --- a/.github/workflows/generate-proxmox-lxc.yml +++ b/.github/workflows/generate-proxmox-lxc.yml @@ -29,6 +29,7 @@ jobs: with: github_access_token: ${{ secrets.GITHUB_TOKEN }} #nix_path: nixpkgs=channel:nixos-24.05 + #find /nix/var/nix/profiles/per-user/root/channels - name: Add dogebox channel run: | @@ -37,7 +38,6 @@ jobs: nix-channel --update nix-channel --list echo "Profiles dir:" - find /nix/var/nix/profiles/per-user/root/channels export # - name: nixos-rebuild based on configuration-builder.nix From 883f48712b232f5b4d65aad7f9016e95ef0521bb Mon Sep 17 00:00:00 2001 From: stephenquoll Date: Mon, 9 Sep 2024 19:45:30 +1000 Subject: [PATCH 18/31] Update generate-proxmox-lxc.yml --- .github/workflows/generate-proxmox-lxc.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/generate-proxmox-lxc.yml b/.github/workflows/generate-proxmox-lxc.yml index b2e5279..38c2a4a 100644 --- a/.github/workflows/generate-proxmox-lxc.yml +++ b/.github/workflows/generate-proxmox-lxc.yml @@ -38,6 +38,8 @@ jobs: nix-channel --update nix-channel --list echo "Profiles dir:" + ls -a + sudo find ~/.nix-defxper export # - name: nixos-rebuild based on configuration-builder.nix From 1235f467acfe3cc05a3e26432c70562916f0f528 Mon Sep 17 00:00:00 2001 From: stephenquoll Date: Mon, 9 Sep 2024 20:10:33 +1000 Subject: [PATCH 19/31] Update generate-proxmox-lxc.yml --- .github/workflows/generate-proxmox-lxc.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/generate-proxmox-lxc.yml b/.github/workflows/generate-proxmox-lxc.yml index 38c2a4a..e803bcc 100644 --- a/.github/workflows/generate-proxmox-lxc.yml +++ b/.github/workflows/generate-proxmox-lxc.yml @@ -39,7 +39,7 @@ jobs: nix-channel --list echo "Profiles dir:" ls -a - sudo find ~/.nix-defxper + sudo find /nix/store | grep dogebox export # - name: nixos-rebuild based on configuration-builder.nix From b9356a3c38f57088affa86ea7a7d8558a9373357 Mon Sep 17 00:00:00 2001 From: stephenquoll Date: Mon, 9 Sep 2024 20:22:05 +1000 Subject: [PATCH 20/31] Update generate-proxmox-lxc.yml --- .github/workflows/generate-proxmox-lxc.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/generate-proxmox-lxc.yml b/.github/workflows/generate-proxmox-lxc.yml index e803bcc..ef1c327 100644 --- a/.github/workflows/generate-proxmox-lxc.yml +++ b/.github/workflows/generate-proxmox-lxc.yml @@ -40,6 +40,10 @@ jobs: echo "Profiles dir:" ls -a sudo find /nix/store | grep dogebox + echo "Runner's home" + find /home/runner/ + echo "store profiles dir" + find /nix/var/nix/profiles/ export # - name: nixos-rebuild based on configuration-builder.nix From c10939d599983b3633b4747517cf0de020d96e14 Mon Sep 17 00:00:00 2001 From: stephenquoll Date: Mon, 9 Sep 2024 20:44:00 +1000 Subject: [PATCH 21/31] Update generate-proxmox-lxc.yml --- .github/workflows/generate-proxmox-lxc.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/generate-proxmox-lxc.yml b/.github/workflows/generate-proxmox-lxc.yml index ef1c327..e7655a7 100644 --- a/.github/workflows/generate-proxmox-lxc.yml +++ b/.github/workflows/generate-proxmox-lxc.yml @@ -28,7 +28,7 @@ jobs: uses: cachix/install-nix-action@v24 with: github_access_token: ${{ secrets.GITHUB_TOKEN }} - #nix_path: nixpkgs=channel:nixos-24.05 + nix_path: nixpkgs=channel:nixos-24.05 #find /nix/var/nix/profiles/per-user/root/channels - name: Add dogebox channel From ad03cceed14961220ed7f7afe7e26a0cac1d1ff1 Mon Sep 17 00:00:00 2001 From: stephenquoll Date: Mon, 9 Sep 2024 20:48:12 +1000 Subject: [PATCH 22/31] Update generate-proxmox-lxc.yml --- .github/workflows/generate-proxmox-lxc.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/generate-proxmox-lxc.yml b/.github/workflows/generate-proxmox-lxc.yml index e7655a7..2fe22b8 100644 --- a/.github/workflows/generate-proxmox-lxc.yml +++ b/.github/workflows/generate-proxmox-lxc.yml @@ -41,7 +41,7 @@ jobs: ls -a sudo find /nix/store | grep dogebox echo "Runner's home" - find /home/runner/ + ls -la /home/runner/ echo "store profiles dir" find /nix/var/nix/profiles/ export From 5c9efff38b298b24f09064de55f9e2f9907c8b3c Mon Sep 17 00:00:00 2001 From: stephenquoll Date: Mon, 9 Sep 2024 21:10:38 +1000 Subject: [PATCH 23/31] Update generate-proxmox-lxc.yml --- .github/workflows/generate-proxmox-lxc.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/generate-proxmox-lxc.yml b/.github/workflows/generate-proxmox-lxc.yml index 2fe22b8..3222786 100644 --- a/.github/workflows/generate-proxmox-lxc.yml +++ b/.github/workflows/generate-proxmox-lxc.yml @@ -33,18 +33,18 @@ jobs: - name: Add dogebox channel run: | - nix-channel --add https://nixos.org/channels/nixos-24.05 nixos nix-channel --add https://github.com/dogeorg/dogebox-nur-packages/archive/main.tar.gz dogebox nix-channel --update nix-channel --list - echo "Profiles dir:" - ls -a - sudo find /nix/store | grep dogebox - echo "Runner's home" - ls -la /home/runner/ - echo "store profiles dir" - find /nix/var/nix/profiles/ - export + #echo "Profiles dir:" + #ls -a + #sudo find /nix/store | grep dogebox + #echo "Runner's home" + #ls -la /home/runner/ + #echo "store profiles dir" + #find /nix/var/nix/profiles/ + #export + NIX_PATH=$NIX_PATH:`ls -d /nix/store/*dogebox/dogebox` # - name: nixos-rebuild based on configuration-builder.nix # run: | From 187a1bdd16ec4e999b13cfbf03cc03e7ed843d86 Mon Sep 17 00:00:00 2001 From: stephenquoll Date: Mon, 9 Sep 2024 21:13:17 +1000 Subject: [PATCH 24/31] Update generate-proxmox-lxc.yml --- .github/workflows/generate-proxmox-lxc.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/generate-proxmox-lxc.yml b/.github/workflows/generate-proxmox-lxc.yml index 3222786..bd16b1c 100644 --- a/.github/workflows/generate-proxmox-lxc.yml +++ b/.github/workflows/generate-proxmox-lxc.yml @@ -44,7 +44,7 @@ jobs: #echo "store profiles dir" #find /nix/var/nix/profiles/ #export - NIX_PATH=$NIX_PATH:`ls -d /nix/store/*dogebox/dogebox` + NIX_PATH=$NIX_PATH:`ls -d /nix/store/*dogebox/` # - name: nixos-rebuild based on configuration-builder.nix # run: | From ada2f4c5c08433788a08b2adab202f858408e607 Mon Sep 17 00:00:00 2001 From: stephenquoll Date: Mon, 9 Sep 2024 21:17:49 +1000 Subject: [PATCH 25/31] Update generate-proxmox-lxc.yml --- .github/workflows/generate-proxmox-lxc.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/generate-proxmox-lxc.yml b/.github/workflows/generate-proxmox-lxc.yml index bd16b1c..e11d7cb 100644 --- a/.github/workflows/generate-proxmox-lxc.yml +++ b/.github/workflows/generate-proxmox-lxc.yml @@ -53,7 +53,8 @@ jobs: - name: Generate NixOS configuration run: | - nix run github:nix-community/nixos-generators -- -f proxmox-lxc -c nix/pve.nix | { + echo $NIX_PATH + NIX_PATH=$NIX_PATH:$(ls -d /nix/store/*dogebox/dogebox) nix run github:nix-community/nixos-generators -- -f proxmox-lxc -c nix/pve.nix | { read path echo "BUILD_PATH=$path" >> $GITHUB_ENV } From b6488d3aa4e20ec52229169919e1eda41ddd7ee5 Mon Sep 17 00:00:00 2001 From: stephenquoll Date: Mon, 9 Sep 2024 21:21:48 +1000 Subject: [PATCH 26/31] Update generate-proxmox-lxc.yml --- .github/workflows/generate-proxmox-lxc.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/generate-proxmox-lxc.yml b/.github/workflows/generate-proxmox-lxc.yml index e11d7cb..43a59f9 100644 --- a/.github/workflows/generate-proxmox-lxc.yml +++ b/.github/workflows/generate-proxmox-lxc.yml @@ -54,7 +54,7 @@ jobs: - name: Generate NixOS configuration run: | echo $NIX_PATH - NIX_PATH=$NIX_PATH:$(ls -d /nix/store/*dogebox/dogebox) nix run github:nix-community/nixos-generators -- -f proxmox-lxc -c nix/pve.nix | { + NIX_PATH=$NIX_PATH:$(ls -d /nix/store/*dogebox/) nix run github:nix-community/nixos-generators -- -f proxmox-lxc -c nix/pve.nix | { read path echo "BUILD_PATH=$path" >> $GITHUB_ENV } From cc17472b74f10b893bdf1ef5aa57b14cd7bf2846 Mon Sep 17 00:00:00 2001 From: stephenquoll Date: Mon, 9 Sep 2024 21:39:19 +1000 Subject: [PATCH 27/31] Update generate-proxmox-lxc.yml --- .github/workflows/generate-proxmox-lxc.yml | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/.github/workflows/generate-proxmox-lxc.yml b/.github/workflows/generate-proxmox-lxc.yml index 43a59f9..69d1adb 100644 --- a/.github/workflows/generate-proxmox-lxc.yml +++ b/.github/workflows/generate-proxmox-lxc.yml @@ -29,28 +29,14 @@ jobs: with: github_access_token: ${{ secrets.GITHUB_TOKEN }} nix_path: nixpkgs=channel:nixos-24.05 - #find /nix/var/nix/profiles/per-user/root/channels - name: Add dogebox channel run: | nix-channel --add https://github.com/dogeorg/dogebox-nur-packages/archive/main.tar.gz dogebox nix-channel --update nix-channel --list - #echo "Profiles dir:" - #ls -a - #sudo find /nix/store | grep dogebox - #echo "Runner's home" - #ls -la /home/runner/ - #echo "store profiles dir" - #find /nix/var/nix/profiles/ - #export - NIX_PATH=$NIX_PATH:`ls -d /nix/store/*dogebox/` - -# - name: nixos-rebuild based on configuration-builder.nix -# run: | -# nix-env --install nixos-rebuild -# sudo NIXOS_CONFIG=/home/runner/work/dogebox/dogebox/configuration-builder.nix nixos-rebuild switch - + export NIX_PATH=$NIX_PATH:`ls -d /nix/store/*dogebox/` + - name: Generate NixOS configuration run: | echo $NIX_PATH From 6b522b24abbc19832cee2d27d068b03e2a41c030 Mon Sep 17 00:00:00 2001 From: stephenquoll Date: Mon, 9 Sep 2024 22:24:50 +1000 Subject: [PATCH 28/31] Update generate-proxmox-lxc.yml --- .github/workflows/generate-proxmox-lxc.yml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.github/workflows/generate-proxmox-lxc.yml b/.github/workflows/generate-proxmox-lxc.yml index 69d1adb..9893fc5 100644 --- a/.github/workflows/generate-proxmox-lxc.yml +++ b/.github/workflows/generate-proxmox-lxc.yml @@ -34,18 +34,15 @@ jobs: run: | nix-channel --add https://github.com/dogeorg/dogebox-nur-packages/archive/main.tar.gz dogebox nix-channel --update - nix-channel --list - export NIX_PATH=$NIX_PATH:`ls -d /nix/store/*dogebox/` - - name: Generate NixOS configuration + - name: Generate LXC image run: | - echo $NIX_PATH NIX_PATH=$NIX_PATH:$(ls -d /nix/store/*dogebox/) nix run github:nix-community/nixos-generators -- -f proxmox-lxc -c nix/pve.nix | { read path echo "BUILD_PATH=$path" >> $GITHUB_ENV } - - name: Move the build artifact to a working directory. + - name: Move the build artifact to a working directory run: | NEW_FILENAME="$(basename ${{ env.BUILD_PATH }})" RELEASE_PATH="${{ github.workspace }}/$NEW_FILENAME" From de29dba8c9ffa3415196d1a5e10df982dd5bb5ba Mon Sep 17 00:00:00 2001 From: Adam Brady Date: Tue, 10 Sep 2024 14:46:23 +1000 Subject: [PATCH 29/31] Make things work. --- Makefile | 4 +- README.md | 3 +- nix/aarch64/hardware-configuration.nix | 10 ---- nix/base.nix | 18 +----- nix/bootloader/default.nix | 10 ---- nix/bootloader/extlinux.nix | 10 ---- nix/bootloader/systemd-boot.nix | 10 ---- nix/dkm.nix | 8 --- nix/dogebox.nix | 77 ++++++++++++++++++++------ nix/dogeboxd.nix | 32 +++++++++-- nix/hardware-configuration.nix | 10 ---- nix/vbox-entry.nix | 41 ++++++++++++++ nix/vbox.nix | 22 +------- nix/x86_64/hardware-configuration.nix | 10 ---- 14 files changed, 133 insertions(+), 132 deletions(-) create mode 100644 nix/vbox-entry.nix diff --git a/Makefile b/Makefile index 6a30983..e03f262 100644 --- a/Makefile +++ b/Makefile @@ -6,12 +6,12 @@ pve: virtualbox: @echo "Generating VirtualBox OVA..." - @nixos-generate -c nix/vbox.nix -f virtualbox + @nixos-generate -c nix/vbox-entry.nix -f virtualbox virtualbox-launch: virtualbox @echo "Importing and launching the VirtualBox VM..." # Capture the generated OVA path from the nixos-generate output - OVA_FILE=$$(nixos-generate -c nix/vbox.nix -f virtualbox | grep -o '.*\.ova$$'); \ + OVA_FILE=$$(nixos-generate -c nix/vbox-entry.nix -f virtualbox | grep -o '.*\.ova$$'); \ BRIDGE_ADAPTER=$$(VBoxManage list bridgedifs | grep '^Name:' | head -n1 | awk '{print $$2}'); \ VBoxManage import $$OVA_FILE --vsys 0 --vmname "$(VM_NAME)" && \ VBoxManage modifyvm "$(VM_NAME)" --nic1 bridged --bridgeadapter1 $$BRIDGE_ADAPTER && \ diff --git a/README.md b/README.md index 15be975..e1524db 100644 --- a/README.md +++ b/README.md @@ -89,7 +89,8 @@ TODO :)
Running in Virtualbox -TODO :) +1. Install Virtualbox :) +2. Run `make virtualbox-launch`
diff --git a/nix/aarch64/hardware-configuration.nix b/nix/aarch64/hardware-configuration.nix index 631d5a3..f57e49d 100644 --- a/nix/aarch64/hardware-configuration.nix +++ b/nix/aarch64/hardware-configuration.nix @@ -3,9 +3,6 @@ # to /etc/nixos/configuration.nix instead. { config, lib, pkgs, modulesPath, ... }: -let - configDir = ./.; -in { imports = [ (modulesPath + "/profiles/qemu-guest.nix") @@ -31,11 +28,4 @@ in # networking.interfaces.enp0s1.useDHCP = lib.mkDefault true; nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux"; - - # Copy self into build image. - environment.etc = { - "nixos/aarch64/hardware-configuration.nix" = { - source = "${configDir}/hardware-configuration.nix"; - }; - }; } diff --git a/nix/base.nix b/nix/base.nix index 6f6a841..3973d8f 100644 --- a/nix/base.nix +++ b/nix/base.nix @@ -2,17 +2,10 @@ # your system. Help is available in the configuration.nix(5) man page, on # https://search.nixos.org/options and in the NixOS manual (`nixos-help`). -{ config, lib, pkgs, ... }: +{ lib, pkgs, ... }: -let configDir = ./.; -in { - imports = - [ - # ./hardware-configuration.nix - ./dogebox.nix - ] - ; + imports = [ ./dogebox.nix ]; nix.settings = { #allowed-users = [ "*" ]; @@ -44,11 +37,4 @@ in # DO NOT CHANGE THIS. EVER. EVEN WHEN UPDATING YOUR SYSTEM PAST 24.05. system.stateVersion = "24.05"; - - # Copy self into build image. - environment.etc = { - "nixos/base.nix" = { - source = "${configDir}/base.nix"; - }; - }; } diff --git a/nix/bootloader/default.nix b/nix/bootloader/default.nix index a2cb7dc..0bcd5fd 100644 --- a/nix/bootloader/default.nix +++ b/nix/bootloader/default.nix @@ -1,8 +1,5 @@ { config, libs, pkgs, ... }: -let - configDir = ./.; -in { boot = if pkgs.system == "aarch64-linux" then { @@ -24,11 +21,4 @@ in loader.systemd-boot.enable = true; }; - - # Copy self into build image. - environment.etc = { - "nixos/bootloader/default.nix" = { - source = "${configDir}/default.nix"; - }; - }; } diff --git a/nix/bootloader/extlinux.nix b/nix/bootloader/extlinux.nix index 4908ba8..09864ff 100644 --- a/nix/bootloader/extlinux.nix +++ b/nix/bootloader/extlinux.nix @@ -1,18 +1,8 @@ { config, libs, pkgs, ... }: -let - configDir = ./.; -in { # Use the extlinux boot loader. (NixOS wants to enable GRUB by default) boot.loader.grub.enable = false; # Enables the generation of /boot/extlinux/extlinux.conf boot.loader.generic-extlinux-compatible.enable = true; - - # Copy self into build image. - environment.etc = { - "nixos/bootloader/extlinux.nix" = { - source = "${configDir}/extlinux.nix"; - }; - }; } diff --git a/nix/bootloader/systemd-boot.nix b/nix/bootloader/systemd-boot.nix index 366227f..790af2e 100644 --- a/nix/bootloader/systemd-boot.nix +++ b/nix/bootloader/systemd-boot.nix @@ -1,8 +1,5 @@ { config, libs, pkgs, ... }: -let - configDir = ./.; -in { # Use the GRUB 2 boot loader. # boot.loader.grub.enable = true; @@ -12,11 +9,4 @@ in # Define on which hard drive you want to install Grub. # boot.loader.grub.device = "/dev/sda"; # or "nodev" for efi only boot.loader.systemd-boot.enable = true; - - # Copy self into build image. - environment.etc = { - "nixos/bootloader/systemd-boot.nix" = { - source = "${configDir}/systemd-boot.nix"; - }; - }; } diff --git a/nix/dkm.nix b/nix/dkm.nix index c4e9070..77b58ce 100644 --- a/nix/dkm.nix +++ b/nix/dkm.nix @@ -2,7 +2,6 @@ let dogebox = import { inherit pkgs; }; - configDir = ./.; in { environment.systemPackages = [ @@ -30,11 +29,4 @@ in Group = "dogebox"; }; }; - - # Copy self into build image. - environment.etc = { - "nixos/dkm.nix" = { - source = "${configDir}/dkm.nix"; - }; - }; } diff --git a/nix/dogebox.nix b/nix/dogebox.nix index dcf7728..7a024f2 100644 --- a/nix/dogebox.nix +++ b/nix/dogebox.nix @@ -1,8 +1,7 @@ -{ config, lib, pkgs, ... }: +{ lib, pkgs, ... }: let dogebox = import { inherit pkgs; }; - configDir = ./.; in { imports = [ @@ -12,18 +11,6 @@ in /opt/dogebox/nix/dogebox.nix ]; - users.motd = '' -+===================================================+ -| | -| ____ ___ ____ _____ ____ _____ __ | -| | _ \ / _ \ / ___| ____| __ ) / _ \ \/ / | -| | | | | | | | | _| _| | _ \| | | \ / | -| | |_| | |_| | |_| | |___| |_) | |_| / \ | -| |____/ \___/ \____|_____|____/ \___/_/\_\ | -| | -+===================================================+ -''; - users.groups.dogebox = {}; users.users.shibe = { @@ -34,16 +21,70 @@ in password = "suchpass"; }; + security.sudo.wheelNeedsPassword = false; + # These will be overridden by the included dogebox.nix file above, but set defaults. networking.wireless.enable = lib.mkDefault false; networking.networkmanager.enable = lib.mkForce false; networking.firewall.enable = true; - # Copy self into build image. - environment.etc = { - "nixos/dogebox.nix" = { - source = "${configDir}/dogebox.nix"; + environment.etc."first-boot-script.sh" = { + text = '' + #${pkgs.bash}/bin/bash + if [ ! -f /opt/first-boot-done ]; then + echo "Sleeping for 10 seconds to ensure network is actually up..." + sleep 10 + export NIX_PATH=nixpkgs=/nix/var/nix/profiles/per-user/root/channels/nixos:nixos-config=/etc/nixos/configuration.nix:/nix/var/nix/profiles/per-user/root/channels + export PATH=$PATH:${pkgs.git}/bin + echo "Adding nixpkgs channel..." + ${pkgs.nix}/bin/nix-channel --add https://nixos.org/channels/nixos-24.05 nixpkgs + echo "Adding dogebox nix channel..." + ${pkgs.nix}/bin/nix-channel --add https://github.com/dogeorg/dogebox-nur-packages/archive/main.tar.gz dogebox + echo "Updating nix channel..." + ${pkgs.nix}/bin/nix-channel --update + echo "Rebuilding system..." + # This MUST use boot and not switch, or you will get errors + # about nix trying to replace in-process unit files (the one executing this script) + ${pkgs.nixos-rebuild}/bin/nixos-rebuild boot + echo "First boot commands completed." + touch /opt/first-boot-done + echo "Rebooting into new configuration..." + sleep 3 + # Reboot to apply the new configuration we built above. + reboot + else + echo "Not first boot, skipping." + fi + ''; + mode = "0755"; + }; + + systemd.services.runOnceOnFirstBoot = { + description = "[DOGEBOX] Initial Dogebox setup.. this could take a while on first boot :)"; + wants = [ "network-online.target" ]; + after = [ "network-online.target" ]; + wantedBy = [ "multi-user.target" ]; + before = [ "getty@tty1.service" ]; + serviceConfig = { + Type = "oneshot"; + RemainAfterExit = true; + ExecStart = "${pkgs.bash}/bin/bash /etc/first-boot-script.sh"; + # Print to the TTY so people can actually see the system is doing things the first time they boot. + StandardOutput = "tty"; + StandardError = "tty"; + TTYPath = "/dev/tty1"; + TTYReset = true; + TTYVHangup = true; }; }; + + # These are all needed for the oneshot boot process above. + environment.systemPackages = [ + pkgs.nixos-rebuild + pkgs.bash + pkgs.nix + pkgs.nixos-rebuild + pkgs.git + ]; } diff --git a/nix/dogeboxd.nix b/nix/dogeboxd.nix index 2703b3b..6d6e29d 100644 --- a/nix/dogeboxd.nix +++ b/nix/dogeboxd.nix @@ -2,10 +2,11 @@ let dogebox = import { inherit pkgs; }; - configDir = ./.; in { environment.systemPackages = [ + pkgs.systemd + pkgs.nixos-rebuild dogebox.dogeboxd ]; @@ -30,11 +31,19 @@ in Restart = "always"; User = "dogeboxd"; Group = "dogebox"; + Environment = "PATH=/run/wrappers/bin:${pkgs.systemd}/bin:${pkgs.nixos-rebuild}/bin:${pkgs.coreutils}/bin:${pkgs.bash}/bin:$PATH"; }; }; networking.firewall.allowedTCPPorts = [ 3000 8080 ]; + security.wrappers.nixosrebuildboot = { + source = "${dogebox.dogeboxd}/dogeboxd/bin/nixosrebuildboot"; + owner = "root"; + group = "root"; + setuid = true; + }; + security.wrappers.nixosrebuildswitch = { source = "${dogebox.dogeboxd}/dogeboxd/bin/nixosrebuildswitch"; owner = "root"; @@ -49,10 +58,21 @@ in setuid = true; }; - # Copy self into build image. - environment.etc = { - "nixos/dogeboxd.nix" = { - source = "${configDir}/dogeboxd.nix"; - }; + security.wrappers.reboot = { + source = "${pkgs.systemd}/bin/reboot"; + owner = "root"; + group = "root"; + setuid = true; }; + + # TEMPORARY. Remove this when we can figure out how to point it to _just_ the wrappers? + security.sudo.extraRules = [ + { + users = [ "dogeboxd" ]; + commands = [ { + command = "ALL"; + options = [ "NOPASSWD" ]; + } ]; + } + ]; } diff --git a/nix/hardware-configuration.nix b/nix/hardware-configuration.nix index 328ea8b..b0dfe4b 100644 --- a/nix/hardware-configuration.nix +++ b/nix/hardware-configuration.nix @@ -1,8 +1,5 @@ { config, lib, pkgs, modulesPath, ... }: -let - configDir = ./.; -in { fileSystems."/" = lib.mkDefault @@ -18,11 +15,4 @@ in }; networking.useDHCP = lib.mkDefault true; - - # Copy self into build image. - environment.etc = { - "nixos/hardware-configuration.nix" = { - source = "${configDir}/hardware-configuration.nix"; - }; - }; } diff --git a/nix/vbox-entry.nix b/nix/vbox-entry.nix new file mode 100644 index 0000000..d142fe6 --- /dev/null +++ b/nix/vbox-entry.nix @@ -0,0 +1,41 @@ +{ pkgs, ... }: + +let + vboxFile = pkgs.writeTextFile { + name = "vbox.nix"; + text = builtins.readFile ./vbox.nix; + }; + + baseFile = pkgs.writeTextFile { + name = "base.nix"; + text = builtins.readFile ./base.nix; + }; + + dogeboxFile = pkgs.writeTextFile { + name = "dogebox.nix"; + text = builtins.readFile ./dogebox.nix; + }; + + dogeboxdFile = pkgs.writeTextFile { + name = "dogeboxd.nix"; + text = builtins.readFile ./dogeboxd.nix; + }; + + dkmFile = pkgs.writeTextFile { + name = "dkm.nix"; + text = builtins.readFile ./dkm.nix; + }; +in +{ + imports = [ ./vbox.nix ]; + + system.activationScripts.copyFiles = '' + mkdir -p /opt/nixos + echo "vbox" >> /opt/build-type + cp ${vboxFile} /etc/nixos/configuration.nix + cp ${baseFile} /etc/nixos/base.nix + cp ${dogeboxFile} /etc/nixos/dogebox.nix + cp ${dogeboxdFile} /etc/nixos/dogeboxd.nix + cp ${dkmFile} /etc/nixos/dkm.nix + ''; +} diff --git a/nix/vbox.nix b/nix/vbox.nix index b8ae4e2..474c8aa 100644 --- a/nix/vbox.nix +++ b/nix/vbox.nix @@ -1,27 +1,7 @@ -# Edit this configuration file to define what should be installed on -# your system. Help is available in the configuration.nix(5) man page, on -# https://search.nixos.org/options and in the NixOS manual (`nixos-help`). - -{ config, lib, pkgs, ... }: - -let configDir = ./.; -in { - imports = - [ - ./base.nix - ] - ; - - # Copy self into build image. - environment.etc = { - "nixos/configuration.nix" = { - source = "${configDir}/vbox.nix"; - }; - }; + imports = [ ./base.nix ]; /* Below copied from ${nixpkgs}/nixos/modules/virtualisation/virtualbox-image.nix */ - fileSystems = { "/" = { device = "/dev/disk/by-label/nixos"; diff --git a/nix/x86_64/hardware-configuration.nix b/nix/x86_64/hardware-configuration.nix index 289af85..0ff6fa4 100644 --- a/nix/x86_64/hardware-configuration.nix +++ b/nix/x86_64/hardware-configuration.nix @@ -3,9 +3,6 @@ # to /etc/nixos/configuration.nix instead. { config, lib, pkgs, modulesPath, ... }: -let - configDir = ./.; -in { imports = [ ]; @@ -35,11 +32,4 @@ in nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; #virtualisation.virtualbox.guest.enable = true; - - # Copy self into build image. - environment.etc = { - "nixos/x86_64/hardware-configuration.nix" = { - source = "${configDir}/hardware-configuration.nix"; - }; - }; } From f6440112d7eb697affc5c78ac3f4ebf507e7f031 Mon Sep 17 00:00:00 2001 From: Adam Brady Date: Tue, 10 Sep 2024 15:27:56 +1000 Subject: [PATCH 30/31] rename entryfiles to make easier to understand --- Makefile | 8 +++--- nix/default-builder.nix | 35 ++++++++++++++++++++++++ nix/pve.nix | 23 ---------------- nix/{vbox-entry.nix => vbox-builder.nix} | 0 4 files changed, 39 insertions(+), 27 deletions(-) create mode 100644 nix/default-builder.nix delete mode 100644 nix/pve.nix rename nix/{vbox-entry.nix => vbox-builder.nix} (100%) diff --git a/Makefile b/Makefile index e03f262..88e2bff 100644 --- a/Makefile +++ b/Makefile @@ -2,19 +2,19 @@ VM_NAME = dogebox-$(shell date +%s) pve: @echo "Generating Proxmox LXC..." - @nixos-generate -c nix/pve.nix -f proxmox-lxc + @nixos-generate -c nix/default-builder.nix -f proxmox-lxc virtualbox: @echo "Generating VirtualBox OVA..." - @nixos-generate -c nix/vbox-entry.nix -f virtualbox + @nixos-generate -c nix/vbox-builder.nix -f virtualbox virtualbox-launch: virtualbox @echo "Importing and launching the VirtualBox VM..." # Capture the generated OVA path from the nixos-generate output - OVA_FILE=$$(nixos-generate -c nix/vbox-entry.nix -f virtualbox | grep -o '.*\.ova$$'); \ + OVA_FILE=$$(nixos-generate -c nix/vbox-builder.nix -f virtualbox | grep -o '.*\.ova$$'); \ BRIDGE_ADAPTER=$$(VBoxManage list bridgedifs | grep '^Name:' | head -n1 | awk '{print $$2}'); \ VBoxManage import $$OVA_FILE --vsys 0 --vmname "$(VM_NAME)" && \ VBoxManage modifyvm "$(VM_NAME)" --nic1 bridged --bridgeadapter1 $$BRIDGE_ADAPTER && \ VBoxManage startvm "$(VM_NAME)" -.PHONY: pve virtualbox virtualbox-launch +.PHONY: pve qcow virtualbox virtualbox-launch diff --git a/nix/default-builder.nix b/nix/default-builder.nix new file mode 100644 index 0000000..9e2d239 --- /dev/null +++ b/nix/default-builder.nix @@ -0,0 +1,35 @@ +{ pkgs, ... }: + +let + baseFile = pkgs.writeTextFile { + name = "base.nix"; + text = builtins.readFile ./base.nix; + }; + + dogeboxFile = pkgs.writeTextFile { + name = "dogebox.nix"; + text = builtins.readFile ./dogebox.nix; + }; + + dogeboxdFile = pkgs.writeTextFile { + name = "dogeboxd.nix"; + text = builtins.readFile ./dogeboxd.nix; + }; + + dkmFile = pkgs.writeTextFile { + name = "dkm.nix"; + text = builtins.readFile ./dkm.nix; + }; +in +{ + imports = [ ./base.nix ]; + + system.activationScripts.copyFiles = '' + mkdir -p /opt/nixos + echo "default" >> /opt/build-type + cp ${baseFile} /etc/nixos/configuration.nix + cp ${dogeboxFile} /etc/nixos/dogebox.nix + cp ${dogeboxdFile} /etc/nixos/dogeboxd.nix + cp ${dkmFile} /etc/nixos/dkm.nix + ''; +} diff --git a/nix/pve.nix b/nix/pve.nix deleted file mode 100644 index d1a479a..0000000 --- a/nix/pve.nix +++ /dev/null @@ -1,23 +0,0 @@ -# Edit this configuration file to define what should be installed on -# your system. Help is available in the configuration.nix(5) man page, on -# https://search.nixos.org/options and in the NixOS manual (`nixos-help`). - -{ config, lib, pkgs, ... }: - -let configDir = ./.; -in -{ - imports = - [ - ./base.nix - ] - ; - - # Copy self into build image. - environment.etc = { - "nixos/configuration.nix" = { - source = "${configDir}/pve.nix"; - }; - }; - -} diff --git a/nix/vbox-entry.nix b/nix/vbox-builder.nix similarity index 100% rename from nix/vbox-entry.nix rename to nix/vbox-builder.nix From 53cbc03af8639d9b3ae2b8f12defae1ab9453a6f Mon Sep 17 00:00:00 2001 From: Adam Brady Date: Tue, 10 Sep 2024 15:28:59 +1000 Subject: [PATCH 31/31] Add MOTD back --- nix/dogeboxd.nix | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/nix/dogeboxd.nix b/nix/dogeboxd.nix index 6d6e29d..04850df 100644 --- a/nix/dogeboxd.nix +++ b/nix/dogeboxd.nix @@ -10,6 +10,18 @@ in dogebox.dogeboxd ]; + users.motd = '' ++===================================================+ +| | +| ____ ___ ____ _____ ____ _____ __ | +| | _ \ / _ \ / ___| ____| __ ) / _ \ \/ / | +| | | | | | | | | _| _| | _ \| | | \ / | +| | |_| | |_| | |_| | |___| |_) | |_| / \ | +| |____/ \___/ \____|_____|____/ \___/_/\_\ | +| | ++===================================================+ +''; + users.users.dogeboxd = { isSystemUser = true; group = "dogebox";