From 07ab4018d8e9a9b7cf186cc3eab942ed4383e217 Mon Sep 17 00:00:00 2001 From: Rodrigo Arias Mallo Date: Tue, 11 Feb 2025 12:56:30 +0100 Subject: [PATCH] Add new fox machine --- flake.nix | 1 + keys.nix | 3 +- m/common/xeon/net.nix | 4 +++ m/fox/configuration.nix | 38 +++++++++++++++++++++++++ m/module/slurm-client.nix | 6 ++-- secrets/ceph-user.age | Bin 1002 -> 1023 bytes secrets/gitea-runner-token.age | 16 +++++------ secrets/gitlab-bsc-docker-token.age | 18 ++++++------ secrets/gitlab-runner-docker-token.age | 17 +++++------ secrets/gitlab-runner-shell-token.age | 16 +++++------ secrets/jungle-robot-password.age | Bin 477 -> 477 bytes secrets/munge-key.age | Bin 2007 -> 2006 bytes secrets/nix-serve.age | Bin 641 -> 534 bytes 13 files changed, 82 insertions(+), 37 deletions(-) create mode 100644 m/fox/configuration.nix diff --git a/flake.nix b/flake.nix index ca0a530..037bba2 100644 --- a/flake.nix +++ b/flake.nix @@ -25,6 +25,7 @@ in bay = mkConf "bay"; lake2 = mkConf "lake2"; raccoon = mkConf "raccoon"; + fox = mkConf "fox"; }; packages.x86_64-linux = self.nixosConfigurations.hut.pkgs // { diff --git a/keys.nix b/keys.nix index 681fcbc..a2b8c2c 100644 --- a/keys.nix +++ b/keys.nix @@ -9,10 +9,11 @@ rec { koro = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIImiTFDbxyUYPumvm8C4mEnHfuvtBY1H8undtd6oDd67 koro"; bay = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICvGBzpRQKuQYHdlUQeAk6jmdbkrhmdLwTBqf3el7IgU bay"; lake2 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINo66//S1yatpQHE/BuYD/Gfq64TY7ZN5XOGXmNchiO0 lake2"; + fox = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDa9lId4rB/EKGkkCCVOy0cuId2SYLs+8W8kx0kmpO1y fox"; }; hostGroup = with hosts; rec { - compute = [ owl1 owl2 ]; + compute = [ owl1 owl2 fox ]; playground = [ eudy koro ]; storage = [ bay lake2 ]; monitor = [ hut ]; diff --git a/m/common/xeon/net.nix b/m/common/xeon/net.nix index a5d87b6..ce1d3bc 100644 --- a/m/common/xeon/net.nix +++ b/m/common/xeon/net.nix @@ -85,6 +85,10 @@ 10.0.40.8 eudy xeon08 xeon08-eth0 10.0.42.8 eudy-ib xeon08-ib0 10.0.40.108 eudy-ipmi xeon08-ipmi0 + + # fox + 10.0.40.26 fox + 10.0.40.126 fox-ipmi ''; }; } diff --git a/m/fox/configuration.nix b/m/fox/configuration.nix new file mode 100644 index 0000000..38d69be --- /dev/null +++ b/m/fox/configuration.nix @@ -0,0 +1,38 @@ +{ lib, config, pkgs, ... }: + +{ + imports = [ + ../common/xeon.nix + ../module/ceph.nix + ../module/emulation.nix + ../module/slurm-client.nix + ../module/slurm-firewall.nix + ]; + + # Select the this using the ID to avoid mismatches + boot.loader.grub.device = "/dev/disk/by-id/wwn-0x500a07514b0c1103"; + + # No swap, there is plenty of RAM + swapDevices = lib.mkForce []; + + boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod" ]; + boot.kernelModules = [ "kvm-amd" ]; + + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + hardware.cpu.intel.updateMicrocode = lib.mkForce false; + + networking = { + hostName = "fox"; + interfaces.enp1s0f0np0.ipv4.addresses = [ { + address = "10.0.40.26"; + prefixLength = 24; + } ]; + }; + + # Configure Nvidia driver to use with CUDA + hardware.nvidia.package = config.boot.kernelPackages.nvidiaPackages.production; + hardware.graphics.enable = true; + nixpkgs.config.allowUnfree = true; + nixpkgs.config.nvidia.acceptLicense = true; + services.xserver.videoDrivers = [ "nvidia" ]; +} diff --git a/m/module/slurm-client.nix b/m/module/slurm-client.nix index 7b2acb9..d745310 100644 --- a/m/module/slurm-client.nix +++ b/m/module/slurm-client.nix @@ -43,12 +43,14 @@ in { clusterName = "jungle"; nodeName = [ "owl[1,2] Sockets=2 CoresPerSocket=14 ThreadsPerCore=2 Feature=owl" + "fox Sockets=2 CoresPerSocket=96 ThreadsPerCore=2 Feature=fox" "hut Sockets=2 CoresPerSocket=14 ThreadsPerCore=2" ]; partitionName = [ - "owl Nodes=owl[1-2] Default=YES DefaultTime=01:00:00 MaxTime=INFINITE State=UP" - "all Nodes=owl[1-2],hut Default=NO DefaultTime=01:00:00 MaxTime=INFINITE State=UP" + "owl Nodes=owl[1-2] Default=YES DefaultTime=01:00:00 MaxTime=INFINITE State=UP" + "fox Nodes=fox Default=NO DefaultTime=01:00:00 MaxTime=INFINITE State=UP" + "all Nodes=owl[1-2],hut Default=NO DefaultTime=01:00:00 MaxTime=INFINITE State=UP" ]; # See slurm.conf(5) for more details about these options. diff --git a/secrets/ceph-user.age b/secrets/ceph-user.age index f23e2ff0558e216abb9940ca7ebc26287849466d..880fbbf33f23b68b298d1efcfde58e2581d46ba7 100644 GIT binary patch literal 1023 zcmZY7J?rCi003Z7IJkJ{A_#&)CYMsvG;a;+LEf6zU)rQi(qv21^p`Zvd)g$OeER@` zP7dPY9XKjD34*)eeFT>S9h?+I9K88|pWs=Z5XRHEh?=qL(z1BBY#?^Uk?A9}ZIfwy zm{SzaqMX0D={+ivCI`r!%iEHxmACbhX3dG%u5<#(I~YhqhSx<5r4?r(i|*9ft13zL zp`TxNx0BKMima_0x4kvVv0ac$jVUrMP1?I!3%M}o&{o|#J7Dy6&{J8I+_cGo3^k+v+pJ1pky*Wj=_nJspZxNbtm1`Gz~XAh^iBTOg(+M z+EmgwUV4HYgQ^=ekkjh1lyir{27NK}4k?E?Hzm;P^Qoj@!sa@8lJ0&Hp}*Fm~X zHK>@!ZN8xe^{zJAO0H+2_)fCro;|}dFF9h=w1I(z;!>?L2VJI)j!EB6wPG1VkBFVm z8nU(_$^{b%tc-0}P$mWhJ zDqAPN$l+e0e9hQjjezy}+w+rzQ|gw_jGf0A%De$0mCRgS2t>5Fv5;KHd+)#crEk9c_v=^wc==oGiT2>Vzkj>`+-QeGkx-j7FHI1HH1A2%Hf`PygeLjsrAd?KrFk24a&d4L zH*s-s@Rpkd7Y9#-9|&@bi`(ITlZfD0|AG$>Jf|4UK@rsBwN1<7gR+hn9SY4qnl()_ z2jP++PkY-GF*EK_QUpmGR+NZ>J zt?$>OhLQPR>6^5sI6;gD9>P79#bUQh1Cp`otr&05{nYyAlni^yN*!W{^+HMad7a&B zlDixa@r)+PAzDU8!H{-^++4?ZJbkB~ib^(=fc5nwz42I)-z7Mt#{>ux{a8;G;HvJV z4KNW^DdmjDnE`C$E=)mjNVnkr*VYEN%U+)W#9WqHEy|^N-9&r$EFT8cqL(#~C7z99 zg#sct$Fj8^LmO~rOm&^Z?LO(tfE5tLlZ;7_k45iLWlV`3xTKmKjOBfsqM#c)p6S_S zH2aDc!vq$#)8d5toKJ7`T@8eB00v8-<~Bs5=8Qn6vCdUc@J6Ih66(=mZSi*1Ogiw> zK(v$&Ad4$o3=B`*Yb;}nxIW93jZMSh(2XUBC+-9sz%TH6QbEb{n%8AT0BI6u4`;K-!)?l<39i*9eN)vy#_B#BnDqsL3BlF8 zto-kiPpHd>t7snA;M4#p=j2S0Z)8i-7mw)KLy!;#rzxnFfd*6NkYW3MW&whRS{_ih-eDr*v$G;!`;$Qpv lpHF|&UVm%#@rx%9+86N8@4o!=)tf)O{pc~(YTrIQ{TF#?P$&QZ diff --git a/secrets/gitea-runner-token.age b/secrets/gitea-runner-token.age index 1c799cf..31d52cf 100644 --- a/secrets/gitea-runner-token.age +++ b/secrets/gitea-runner-token.age @@ -1,9 +1,9 @@ age-encryption.org/v1 --> ssh-ed25519 HY2yRg DQdgCk16Yu524BsrWVf0krnwWzDM6SeaJCgQipOfwCA -Ab9ocqra/UWJZI+QGMlxUhBu5AzqfjPgXl+ENIiHYGs --> ssh-ed25519 CAWG4Q KF9rGCenb3nf+wyz2hyVs/EUEbsmUs5R+1fBxlCibC8 -7++Kxbr3FHVdVfnFdHYdAuR0Tgfd+sRcO6WRss6LhEw --> ssh-ed25519 MSF3dg aUe4DhRsu4X8CFOEAnD/XM/o/0qHYSB522woCaAVh0I -GRcs5cm2YqA/lGhUtbpboBaz7mfgiLaCr+agaB7vACU ---- 9Q7Ou+Pxq+3RZilCb2dKC/pCFjZEt4rp5KnTUUU7WJ8 -1Mw4 :H@/gLtM,ƥ*zNV5mNoj1 $TG_E{%1ǯHAp \ No newline at end of file +-> ssh-ed25519 HY2yRg eRVX5yndWDLg9hw7sY1Iu8pJFy47luHvdL+zZGK2u1s +e1nXXiMW0ywkZYh2s6c7/quGMfBOJOaRhNQDjCD2Iyc +-> ssh-ed25519 CAWG4Q gYG7GRxRpJ0/5Wz0Z0J2wfLfkMFNmcy81dQEewM7gUA +lamdUdx+xOFWF1lmUM4x9TT0cJtKu9Sp7w9JHwm13u0 +-> ssh-ed25519 MSF3dg HEzfpR8alG6WPzhaEjAmmjOFoFcMSQUldx46dBsXri4 +OAD5H/zZGhfevYrFJzJrbNKPomKZDOS9Qx5tmTp78Jo +--- A0sMSiNXWaEIgRXR0x6UAIaluuVH6Zlv4CJ9sI0NXOw +6ph{>F|iv E}{ruƷ}^>c6j gGW:J3||Z \ No newline at end of file diff --git a/secrets/gitlab-bsc-docker-token.age b/secrets/gitlab-bsc-docker-token.age index 74b83e0..8c97f32 100644 --- a/secrets/gitlab-bsc-docker-token.age +++ b/secrets/gitlab-bsc-docker-token.age @@ -1,11 +1,9 @@ age-encryption.org/v1 --> ssh-ed25519 HY2yRg WSdjyQPzBJ4JbzQpGeq1AAYpWKoXmLI1ZtmNmM5QOzs -qGDlDT31DQF1DdHen0+5+52DdsQlabJdA2pOB5O1I6g --> ssh-ed25519 CAWG4Q wioWMDxQjN+d4JdIbCwZg0DLQu1OH2mV6gukRprjuAs -670fE61hidOEh20hHiQAhP0+CjDF0WMBNzgwkGT8Yqg --> ssh-ed25519 MSF3dg DN19uvAEtqq4708P6HpuX9i/o/qAvHX6dj69dCF2H1o -4Lu9GnjiFLMeXJ2C7aVPJsCHCQVlhylNWJi896Av92s ---- 7cKBwOYNOUZ2h3/kAY09aSMASZSxX7hZIT4kvlIiT6w -6fQF5=bX+v e`7/A~PѦ7 -A)h=oZ$ ^V0/܅r -kubĶ:R>^gik_*% a7KG&PIn \ No newline at end of file +-> ssh-ed25519 HY2yRg 4Xns3jybBuv8flzd+h3DArVBa/AlKjt1J9jAyJsasCE +uyVjJxh5i8aGgAgCpPl6zTYeIkf9mIwURof51IKWvwE +-> ssh-ed25519 CAWG4Q T2r6r1tyNgq1XlYXVtLJFfOfUnm6pSVlPwUqC1pkyRo +9yDoKU0EC34QMUXYnsJvhPCLm6oD9w7NlTi2sheoBqQ +-> ssh-ed25519 MSF3dg Bh9DekFTq+QMUEAonwcaIAJX4Js1O7cHjDniCD0gtm8 +t/Ro0URLeDUWcvb7rlkG2s03PZ+9Rr3N4TIX03tXpVc +--- E5+/D4aK2ihKRR4YC5XOTmUbKgOqBR0Nk0gYvFOzXOI +yKF~djr%'P&_-l&o_rr߁0,U7nCTe[f97C!DEW*LAx6# sqiϟk,ݓ \ No newline at end of file diff --git a/secrets/gitlab-runner-docker-token.age b/secrets/gitlab-runner-docker-token.age index 103d6a6..cd1432e 100644 --- a/secrets/gitlab-runner-docker-token.age +++ b/secrets/gitlab-runner-docker-token.age @@ -1,9 +1,10 @@ age-encryption.org/v1 --> ssh-ed25519 HY2yRg 0sEIUEJBJQ0k0rBfHaOEbq1pNBqsPin4Xq85v0ds9jY -4wzjLapoOcq53nT2K3hSGED4jTDXci25GLHkl/fL4EI --> ssh-ed25519 CAWG4Q f68ZbJGwXuCZVnqhwbh+8dh0X/MCdjEd+sVtPyBu/hU -u2TQreyWQvP6PGuwuUNKA/AL68560flqSlaItN3k41I --> ssh-ed25519 MSF3dg HdrtRW2j7mfkLH0/4aJK5R0cWdjf56HYtEZgzHi9EAs -A6MF6tXmSUq2RF2bpmav0GFTRERwluSZGh2snP/KqkA ---- drsezqi7J/g8gm6N10SkfeAWnYct99WUraB5djLJqpo -g (J!M63eA?\1yeFN\/MN`K^+"Y^>dH]PJ`x{ڱySyPX{wS ^5XJP;v \ No newline at end of file +-> ssh-ed25519 HY2yRg GdmdkW+BqqwBgu30b846jv3J7jtCM+a3rgOERuA050A +FeGqM75jG9egesR+yyVKHm0/M+uBBp5Hclg4+qN0BR8 +-> ssh-ed25519 CAWG4Q a0wTWHgulQUYDAMZmXf3dOf6PdYgCqNtSylzWVVRNVM +Bx+WSYaiY4ZwlSZJo2a1XPMQmbKOU7F0tKAqVRLBOPo +-> ssh-ed25519 MSF3dg KccUvZZUbxbCrRWUWrX8KcHF6vQ5FV/BqUqI59G7dj4 +CFr7GXpZ9rPgy7HBfOyiYF9FnZUw6KcZwq9f7/0KaU8 +--- E0Rp6RR/8+o0jvB1lRdhnlabxvI6uu/IgL2ZpPXzTc8 +#H$F;%62rfX\Dn шȉx>&;cUI=M?TǸ"pxӭ\sbFWD{ +AW>?UHԳ \ No newline at end of file diff --git a/secrets/gitlab-runner-shell-token.age b/secrets/gitlab-runner-shell-token.age index aaf939c..7c718fd 100644 --- a/secrets/gitlab-runner-shell-token.age +++ b/secrets/gitlab-runner-shell-token.age @@ -1,9 +1,9 @@ age-encryption.org/v1 --> ssh-ed25519 HY2yRg VY8s9s1zuHOv2axmIacwKg2ozsJnskHTQtslRZ3YI1M -fKkJuydLOzF/ciPYSYu4ziSCozdl6sowvDMYZmxqmHY --> ssh-ed25519 CAWG4Q 2ARFd/7RWQ/QOk47FnJFChaVBgoV4LE6EA+JHezkXgg -MV4g4Llv8Qcd/wUgJyoNG5AXb6o3aFTrOYGC+lXlSzw --> ssh-ed25519 MSF3dg SKoxWe8Mi8EkBjkESxStOCI5V4C0KYEXIOx7OdENgTA -p/owKwQ4e4pcGV+hqej2AfPU5QaM2i8VfxhlkjCM4Z4 ---- 0VWKU5CQiGbiOtQ2tsZZg88oZm1qcUDEnU5zDTtV+KU -ucl`M'Vk6Y!=Ly-OAzƘVEKR_qL|1V[)qƓLDy0_q)-T,ƪ_9 ?ib1 \ No newline at end of file +-> ssh-ed25519 HY2yRg xWRxJGWSzA5aplRYCYLB6aBwrUrQQJ2MtDYaD75V5nI +J07XF3NQiaYKKKNRcNWi9MloJD2wXHd+2K7bo6lF+QU +-> ssh-ed25519 CAWG4Q jNWymbyCczcm8RcaIEbFQBlOMALsuxTl4+pLUi0aR20 +z5NixlrRD+Y7Z/aFPs6hiDW4/lp8CBQCeJYpbuG9yYM +-> ssh-ed25519 MSF3dg QsUQloEKN3k1G49FQnNR/Do6ILgGpjFcw3zu5kk1Ako +IHwyFWUEWqCStNcFprnpBa8L5J6zKIsn+7HcgGRv3sM +--- oUia0fsL6opeYWACyXtHAu/Ld+bUIt/7S1VszYTvwgU +V*t2-7h&͢_!տ+(n (/}CNͷ|Nu5ù勚Kl"klOXyAe$ \ No newline at end of file diff --git a/secrets/jungle-robot-password.age b/secrets/jungle-robot-password.age index de9bf22ab4a215dacd44608e30f8f45b8b8c8cb7..7b8cd84284e84acf2ffa496148466fc590495dc0 100644 GIT binary patch delta 423 zcmV;Y0a*Us1Kk6VEPqCLFf%oIMNU&hNh>c(Lsd#;GifVMYFKwcSX5LtX>M*uIb=;` zI8SafI0{dBNJ%nIFjO!`Gi78!RC#AdS$9lrOJzk(PibU!Q!8d=XmV+Cb#gXVMG7rG zAaiqQEoEdfH8n9gAVWb{M>J6&R76i>PD5%hI5%i{OL|o=I7WIyGFokOVNOVRT2En8 zQY&>#P;7WaP%Bhp3Nde5QF3WgVnb_qL1;K`X?bchGiW$iO;T4cVOM53Ha9e5M>ttD zL^nc3k?|LQGDTT=OK^8%bx%@NR8?n4aA;6;aaL1kF;6daSb8);H$-MgQB7HOVpKQ^ zICWWPP*XQkHY-YQFj+ZhD_KQQHg7deFlk0`FlJU%Vq$1(NKI&BcVkrwEiEk|STam; zICe)eN=QmaWNc$pYG_4yZErMqPDyw(L04%*L3%k>b#`t!LPKL&3I_iUl1@o0KB)dWnOO$NiVfvhrfly8_IEf*s zhZT%RR1$9q0xMNi*{kzbrDQm3LZ%Un8wk%!s}ATgYtDCo=(SOY_nm~Mt*E=ydB_m` z)R|>m6ltoRI`gg;gK7v1lVlv9^=EtTG+XosnwPs4eD>@1D%u*=9LSq^$3U4`Eot6C zJuz)o!%Q(ma^D_>bg2}!qt%GOmuhI&KzhL@8V;v@)N_OFTq8vm4g^u`WRPzcfs{`Q zf}*I3IdWiu+EW!Tbk$tef~5j5SthUpWt&$xSLwT13(z4DXGHPw^vT8L+xP0@Z~FJE z%Rhe?$9K&yM~!Lg=jR_U8y9DHHgRk7!=rPSI%^(1z482@{$Ta{07sPsa>*~$d P0Rrzny*j@ayuSVqci5S^ diff --git a/secrets/munge-key.age b/secrets/munge-key.age index ead42c816eb6d3ba2973e4dcb0a62c55e6f5ac8b..ce50c123cb06c52273d098937b9cb0072650ee4f 100644 GIT binary patch literal 2006 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 diff --git a/secrets/nix-serve.age b/secrets/nix-serve.age index f59c32341e96a262c51e2a8338b0adb713897fe2..ecd0593eb5b92071f8dedb20f3aa0d1ba2646b05 100644 GIT binary patch delta 480 zcmV<60U!Q>1(pPmEq`ZJFk>=fMovXbQ+QQQGB#o~S9VxVNI7qGNNQ|ac6LoKP;oeK zazj#Y3Tk9QNlZv-YcnxrYDi;cOJq=TM0RRxFnBRbXH!peb~bcvXjy1^b8KW)3N1b$ zb8~1dWn?lnH8D9LLqS(ZG*KWyFfUJQayL>{FG5aiXE0_(T178aa9S%XHfw5BbWc@7 zLwHazVRb`tP%%XcXJ~guZ)Y}HVN_6TL{&v^HFZ{VZFfv|H+e=?^az;;8ZB=bgW@1W1Wj9kdZb4W`RYzfKId(*BQF975 zbxmejGIMEWOj$u>Vp&pJMo?jQN@Zepc5!4dMJrN4W^*}sMtL`4bU_L&EiE8IR8)Fz zIdwxpj>2h-YE4P81#7Y!3OIN|TqN&rjUM&>*Jh W<|+_vcbonF>Idb$2gb2V>!OlQ-?{7n delta 587 zcmWm9OKZ~r007{FddXSYVBmTf$fzYro21EnK-x4-+NA56N1LLDws|#8pJ|$;9?H<0 z8#o;Up%)Ql7Z2)X=$L|n;z1M*r3yftY8YROiFfbV2vdEri_%VSk zdZk*I?gvsEKpJQ+)8M3@t8q#_-{?g-(p%z+O}DbhI#g2zajaJvbZkvpJD3_V9YZ2% zhRZvM2i4RJ(-l1(w*#ReYBI4%HvyxCON{(jyAy~?ILtpW;X%tXWW?fA4xoXJ+<#-CM$ifgys5KxGiGqq8KtZj{zy+3d9hwO(5 zzR}UxGp~BecQFm