From 24b41c4fafbd14272c3b69a6ff30896a6cf26394 Mon Sep 17 00:00:00 2001 From: Chloe Bethel Date: Mon, 10 Feb 2025 11:47:09 +0000 Subject: [PATCH] initial snapshot --- config.nix | 25 +++++++++ disable-systemd-security.nix | 101 +++++++++++++++++++++++++++++++++++ dnsmasq.conf | 5 ++ flake.lock | 43 +++++++++++++++ flake.nix | 66 +++++++++++++++++++++++ go.sh | 14 +++++ html/index.html | 2 + html/logo.png | Bin 0 -> 24079 bytes lancom-kernel.nix | 53 ++++++++++++++++++ lancom.nix | 11 ++++ minimal.nix | 14 +++++ nginx.nix | 13 +++++ ppc.nix | 40 ++++++++++++++ sd-image.nix | 10 ++++ ssh-keys.nix | 15 ++++++ wiiu-kernel.nix | 40 ++++++++++++++ 16 files changed, 452 insertions(+) create mode 100644 config.nix create mode 100644 disable-systemd-security.nix create mode 100644 dnsmasq.conf create mode 100644 flake.lock create mode 100644 flake.nix create mode 100755 go.sh create mode 100644 html/index.html create mode 100644 html/logo.png create mode 100644 lancom-kernel.nix create mode 100644 lancom.nix create mode 100644 minimal.nix create mode 100644 nginx.nix create mode 100644 ppc.nix create mode 100644 sd-image.nix create mode 100644 ssh-keys.nix create mode 100644 wiiu-kernel.nix diff --git a/config.nix b/config.nix new file mode 100644 index 0000000..412d5bb --- /dev/null +++ b/config.nix @@ -0,0 +1,25 @@ +{...} : { +networking.hostName = "nixos"; + services.openssh.enable = true; + + users.users.stary = { + isNormalUser = true; + createHome = true; + extraGroups = [ "wheel" ]; + }; + + time.timeZone = "Europe/London"; + i18n.defaultLocale = "en_GB.UTF-8"; + console = { + font = "Lat2-Terminus16"; + keyMap = "uk"; + }; + + system.stateVersion = "24.11"; + + nixpkgs.overlays = [ + (final: super: { + makeModulesClosure = x: super.makeModulesClosure (x // { allowMissing = true; }); + }) + ]; +} \ No newline at end of file diff --git a/disable-systemd-security.nix b/disable-systemd-security.nix new file mode 100644 index 0000000..b031dde --- /dev/null +++ b/disable-systemd-security.nix @@ -0,0 +1,101 @@ +{...}: { + # who needs security lmao + systemd.services.systemd-journald = { + serviceConfig = { + DeviceAllow = ""; + IPAddressDeny = ""; + LockPersonality = "no"; + MemoryDenyWriteExecute = "no"; + NoNewPrivileges = "no"; + ProtectClock = "no"; + RestrictAddressFamilies = ""; + RestrictNamespaces = ""; + RestrictRealtime = "no"; + RestrictSUIDSGID = "no"; + }; + }; + systemd.services.systemd-udevd = { + serviceConfig = { + DeviceAllow = ""; + IPAddressDeny = ""; + LockPersonality = "no"; + MemoryDenyWriteExecute = "no"; + NoNewPrivileges = "no"; + ProtectClock = "no"; + RestrictAddressFamilies = ""; + RestrictNamespaces = ""; + RestrictRealtime = "no"; + RestrictSUIDSGID = "no"; + }; + }; + systemd.services.systemd-oomd = { + serviceConfig = { + DeviceAllow = ""; + IPAddressDeny = ""; + LockPersonality = "no"; + MemoryDenyWriteExecute = "no"; + NoNewPrivileges = "no"; + ProtectClock = "no"; + RestrictAddressFamilies = ""; + RestrictNamespaces = ""; + RestrictRealtime = "no"; + RestrictSUIDSGID = "no"; + }; + }; + systemd.services.systemd-timesyncd = { + serviceConfig = { + DeviceAllow = ""; + IPAddressDeny = ""; + LockPersonality = "no"; + MemoryDenyWriteExecute = "no"; + NoNewPrivileges = "no"; + ProtectClock = "no"; + RestrictAddressFamilies = ""; + RestrictNamespaces = ""; + RestrictRealtime = "no"; + RestrictSUIDSGID = "no"; + }; + }; + systemd.services.systemd-logind = { + serviceConfig = { + DeviceAllow = ""; + IPAddressDeny = ""; + LockPersonality = "no"; + MemoryDenyWriteExecute = "no"; + NoNewPrivileges = "no"; + ProtectClock = "no"; + RestrictAddressFamilies = ""; + RestrictNamespaces = ""; + RestrictRealtime = "no"; + RestrictSUIDSGID = "no"; + }; + }; + systemd.services.dhcpcd = { + serviceConfig = { + DeviceAllow = lib.mkForce ""; + IPAddressDeny = lib.mkForce ""; + LockPersonality = lib.mkForce false; + MemoryDenyWriteExecute = lib.mkForce "no"; + NoNewPrivileges = lib.mkForce "no"; + ProtectClock = lib.mkForce "no"; + RestrictAddressFamilies = lib.mkForce ""; + RestrictNamespaces = lib.mkForce ""; + RestrictRealtime = lib.mkForce "no"; + RestrictSUIDSGID = lib.mkForce "no"; + }; + }; + systemd.services.nginx = { + serviceConfig = { + DeviceAllow = lib.mkForce ""; + IPAddressDeny = lib.mkForce ""; + LockPersonality = lib.mkForce false; + MemoryDenyWriteExecute = lib.mkForce "no"; + NoNewPrivileges = lib.mkForce "no"; + ProtectClock = lib.mkForce "no"; + RestrictAddressFamilies = lib.mkForce ""; + RestrictNamespaces = lib.mkForce ""; + RestrictRealtime = lib.mkForce "no"; + RestrictSUIDSGID = lib.mkForce "no"; + }; + }; +} \ No newline at end of file diff --git a/dnsmasq.conf b/dnsmasq.conf new file mode 100644 index 0000000..fe9e61b --- /dev/null +++ b/dnsmasq.conf @@ -0,0 +1,5 @@ +port=0 # disable DNS server +interface=enp5s0u2u2 +bind-interfaces + +enable-tftp diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..c6b383c --- /dev/null +++ b/flake.lock @@ -0,0 +1,43 @@ +{ + "nodes": { + "common": { + "locked": { + "lastModified": 1718657915, + "narHash": "sha256-bOWGumfGVCkRn5wwqtLoVnFjDPiWSUzw6aksy7ZeDXU=", + "owner": "stary2001", + "repo": "nix-common", + "rev": "c88a9f284c17790aa5d003c557883fc25d71890a", + "type": "github" + }, + "original": { + "owner": "stary2001", + "repo": "nix-common", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1739114754, + "narHash": "sha256-SJhqKsnVleQKbD77pg53z9fjN4xfxq6ExDe+JJty2Jw=", + "owner": "stary2001", + "repo": "nixpkgs", + "rev": "4490ff4c27c1bc175982b1b46d4d0b4c24f219e8", + "type": "github" + }, + "original": { + "owner": "stary2001", + "ref": "stary/ppc32", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "common": "common", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..211126a --- /dev/null +++ b/flake.nix @@ -0,0 +1,66 @@ +# based on https://artemis.sh/2023/06/06/cross-compile-nixos-for-great-good.html +{ + description = "system configuration for ppc"; + + inputs = { + nixpkgs.url = "github:stary2001/nixpkgs/stary/ppc32"; + common.url = "github:stary2001/nix-common"; + }; + + outputs = + { + self, + common, + nixpkgs, + }: + rec { + formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixfmt-rfc-style; + formatter.aarch64-linux = nixpkgs.legacyPackages.aarch64-linux.nixfmt-rfc-style; + + nixosConfigurations.lancom = nixpkgs.legacyPackages.x86_64-linux.pkgsCross.powerpc.nixos { + imports = [ + (import ./minimal.nix) + (import ./ssh-keys.nix) + (import ./locale.nix) + + common.nixosModules.wait-online-any + (import ./ppc.nix) + (import ./nginx.nix) + (import ./config.nix) + + (import ./disable-systemd-security.nix) + + ( + { pkgs, lib, ... }: + { + networking.hostName = "lancom"; + boot.kernelPackages = pkgs.linuxPackagesFor (pkgs.callPackage ./lancom-kernel.nix { }); + system.boot.loader.kernelFile = "uImage"; + } + ) + ]; + }; + + nixosConfigurations.wiiu = nixpkgs.legacyPackages.x86_64-linux.pkgsCross.powerpc.nixos { + imports = [ + (import ./minimal.nix) + (import ./ssh-keys.nix) + + common.nixosModules.wait-online-any + (import ./ppc.nix) + (import ./nginx.nix) + (import ./config.nix) + + ( + { pkgs, lib, ... }: + { + networking.hostName = "nixos"; + boot.kernelPackages = pkgs.linuxPackagesFor (pkgs.callPackage ./wiiu-kernel.nix { }); + + system.boot.loader.kernelFile = "dtbImage.wiiu"; + } + ) + ]; + }; + }; +} diff --git a/go.sh b/go.sh new file mode 100755 index 0000000..08f7f39 --- /dev/null +++ b/go.sh @@ -0,0 +1,14 @@ +# nix build .#pkgsCross.powerpc.ubootNwApp2 +# nix build .#pkgsCross.powerpc.nixosConfigurations.ppc.config.boot.kernelPackages.kernel +nix build .#nixosConfigurations.ppc.config.system.build.toplevel --no-eval-cache +ls -l result +sed "s^INIT^$(readlink result)/init^" tftp/boot.txt.tmpl > tftp/boot.txt +mkimage -T script -n 'Boot script' -d tftp/boot.txt tftp/boot.scr + +sudo cp result/kernel tftp/uImage +sudo cp result/initrd tftp/initrd +# dtb is fine. i hope + +sudo ip addr add 10.0.0.1/24 dev enp5s0u2u2 +sudo ip link set enp5s0u2u2 up +sudo dnsmasq -C dnsmasq.conf --tftp-root $(pwd)/tftp -d diff --git a/html/index.html b/html/index.html new file mode 100644 index 0000000..2f49816 --- /dev/null +++ b/html/index.html @@ -0,0 +1,2 @@ +Hello from NixOS on PowerPC! + diff --git a/html/logo.png b/html/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..5ce77577f3897bc0b6da72a87f4235009b9be2e9 GIT binary patch literal 24079 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