From 98c4490b4e40a33724593a9ee2299a248dea04a4 Mon Sep 17 00:00:00 2001 From: Valentin Gagarin <valentin.gagarin@tweag.io> Date: Tue, 18 Mar 2025 09:51:27 +0100 Subject: [PATCH 01/18] update fedi201 host public key (#251) this is a hack in order to be able to redeploy; that machine was still provisioned manually Reviewed-on: https://git.fediversity.eu/Fediversity/Fediversity/pulls/251 --- keys/systems/fedi201.pub | 2 +- secrets/forgejo-database-password.age | 33 ++++++++++++------------- secrets/forgejo-email-password.age | 33 ++++++++++++------------- secrets/forgejo-runner-token.age | Bin 809 -> 809 bytes secrets/panel-secret-key.age | 32 ++++++++++++------------ secrets/wiki-basicauth-htpasswd.age | 34 +++++++++++++------------- secrets/wiki-password.age | Bin 905 -> 905 bytes secrets/wiki-smtp-password.age | Bin 926 -> 926 bytes 8 files changed, 66 insertions(+), 68 deletions(-) diff --git a/keys/systems/fedi201.pub b/keys/systems/fedi201.pub index 1e769352..6eadc66f 100644 --- a/keys/systems/fedi201.pub +++ b/keys/systems/fedi201.pub @@ -1 +1 @@ -ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILhSlUo7L/TjoAILfLv/BDxlBT+rGudh9VoK50Uiu2lZ root@fedi201 +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKBpnV6zzgdJN5pjw2oWryneE6kZ5rQ343Ut4ed12Cm9 root@fedi201 diff --git a/secrets/forgejo-database-password.age b/secrets/forgejo-database-password.age index b5229f4a..412a4d7d 100644 --- a/secrets/forgejo-database-password.age +++ b/secrets/forgejo-database-password.age @@ -1,18 +1,17 @@ age-encryption.org/v1 --> ssh-ed25519 Jpc21A aY4iHQUrjmuTgBkIwG3vg8XBK458PWXpiZ5E/m/UHnU -VCuYTllN1tW5RzIigPiN+p/W5uI3Urh0J3IpLXDL1H4 --> ssh-ed25519 BAs8QA pP6PTq+vp+fP1oOv3ep4dWspwANxj9DSS94t0a+1Q1o -tpqUnXqp/wmfXFMe2iXRRda+JmW5ZgypduKOS8meCJw --> ssh-ed25519 ofQnlg om0geQk3YR3+WXsPdIC46wL02M57Qror6MD/PynrTAs -Yj5xcXf203kW70SndVBBagh62yAn0T41lzg3ReD1kEs --> ssh-ed25519 COspvA bvBwdWb0kO89Myw3u2heNwd/4vN1+4tiWjNyoF3t+hM -eCX26mAJy8stuYrRijqicgODAlyKt3zjeZchCkBpfOI --> ssh-ed25519 2XrTgw wQMvYCYmw4Iql/EmUSW5HG0fz4POn/VIZrMsL5vuUBc -RaDLMF7OadInlWbQ70/5gpQ4tpwae8i74hu5Wftf6Yg --> ssh-ed25519 1MUEqQ ygipOVN6+Z09bfMZFdHRT8Wx+H4Ml0YM0w0vrUANugA -XvtQMpD+iEpEKGwPVcq9mAftfaRlOJXTXUdcqyvVn9w --> ssh-ed25519 Fa25Dw qc7z4aL3dHjoOTdPBVm4q6V458BuTGLMekP5Hlk0bk0 -kZuabCaiH7DBhO8mDta8AXUxH65Cpm8u9P9ntw8A5pI ---- zpGb6Td6MdLKxE3mkK1a7JqBH77th6045mcdGIsNth0 -�r*"DQ��-����`�U����`�ҹ�u{��C�]�GZ(p -��Uf� \ No newline at end of file +-> ssh-ed25519 Jpc21A JzLWMEH98I5/A8O55mKUMy5zo2kg3Qk8SfXnHvkjwT4 +8f7zDHSp3AHoAQy0dVWMa1TurCBLnsHNtbNjaD++7ow +-> ssh-ed25519 BAs8QA eCD3saYXdv1bjAoQghmyVqHjMBu/o2lWgu7grk1vgRs +//pOnkzqQTK3xmeCjruo46ju2X136KEt6DpsegMouFQ +-> ssh-ed25519 ofQnlg ePjq7GmM36qaGxcJ0qnW8FdKDjwlXtFqOBK8OgWY3Co +gVmsDP9rMcQD/B6BpNhCn+avdgjhyyohNUXlatXpXo0 +-> ssh-ed25519 COspvA lrQB/NEmMUR2RWxfRzE2iTDkjMYsrIaiKn8thxZR+RA +MU23Z28v+cNk2VxpAYaYoFb53js2Zr9/KAM9uMe6+EA +-> ssh-ed25519 2XrTgw z1ixx5dYCNbgw6wWV45b4wn69X/5/4MzesTomWa4WB4 +eNSlP6+nUW9rpsGyzqOEQ+7IVpGeU3UcZpyfB9XT2/4 +-> ssh-ed25519 1MUEqQ c6ps9RB6Dw9JtR0+4eB1NDx44uUes8YjLrY7RCpD0jg +GwVRqR5t07ctbWhwH76T+SAe2Y6Vv1uY/AHkzd/gw/c +-> ssh-ed25519 Fa25Dw jTqtV2RWsXBH4zgWAYr9tBGC/BbXKBvr3uyL8IgmI1o +qBirnzIpi9hB61xwyS+5U6XBobAquEJrV3cleDtG8/4 +--- j/vJgDV+47UmKokdvztXntBIhCLEyUm2aYoGJ2WMKbU +����i���Q�f������DN��B"��vs�B6P�Q�orF��� \ No newline at end of file diff --git a/secrets/forgejo-email-password.age b/secrets/forgejo-email-password.age index 4fdc373c..d1fc3a85 100644 --- a/secrets/forgejo-email-password.age +++ b/secrets/forgejo-email-password.age @@ -1,18 +1,17 @@ age-encryption.org/v1 --> ssh-ed25519 Jpc21A ExqTXUYWuoVsdKwuWzCD72NctIpGvAF4QknTU04he2M -rN48eYUwPJtTc/UBpB79FayC0W2UnrKdjFTdWKShtc0 --> ssh-ed25519 BAs8QA xODgENkmP/KjT6IGiMW3cBkdrY+o5rbAGywY7Fx99EY -DNAlVBdObTlgeVhKYtzPv46RCtn7zNm1aURWBOpBXEs --> ssh-ed25519 ofQnlg cEM500igumTfcCWWCH55z22Pp8QqLcqmjTD5e1lp1T0 -oKBWnaFpaFiEGf51fPqObAkRfRE4gywjQrYGB9kygUs --> ssh-ed25519 COspvA gQbazYgzv8oBeND0VtZ3P241kZM9klO2qysjkc20CFQ -nW558CrEvtuUEpLo6EUeUTVK6EVUXbNZwP4+GLVVH3A --> ssh-ed25519 2XrTgw QlyQRFaRkniJ4BrJEVEP5muS+POPdKSmpS5u4ORiRTc -/UeO72Y/U9aml3S2s9wE9HUIXPoR+6GDSXF+PT141Qg --> ssh-ed25519 1MUEqQ oMz1Cq68FuE1jm63H2Rfr/WqhkCeJ2SQrVtk88FBYGo -ou2ZRPuGTlLxsV/DhXoRUhqaQq9Ub+1ZdOcqqazrBZM --> ssh-ed25519 Fa25Dw USp87LMAo6HfD6gHdA+lrRlwHzKtMwXGjELImsQ7onk -g8GvPArugT7KIdpgpfWjHFUNyXgL9rRuymQg/RIiQJw ---- 6oCFkdV4DmaxMe7lDoDSKgtCKySGqVqrbDv8aRa/h/o -�W)E��{��b���rۛ� -�3OVx)��Q�Ȭ6�b��O�O�ܗ�ȑ%� \ No newline at end of file +-> ssh-ed25519 Jpc21A l6Xwv4JBlTeRTC7RgjxY9gDrCk96atMUH/62P+u55Qs +CrYsLZgDFAiR8up87lhGZqsbAEZtOXG+l5IzLh2uaqg +-> ssh-ed25519 BAs8QA lgtmfoc4vKfRpI/XbIS258BMyIB4mTdquEx/Kxm5OTI +3gQL8Rnqc7JfqsRmKYU3rD0cWMKdnIeVXbY3eFM07RU +-> ssh-ed25519 ofQnlg 0vwuCrduMLjssA3CK3gfVPMSPYKO9cF7HH1JF/oJv18 +2KrZgQmpvw/tNDJrDArinnbEjopkkmuG8s7t6klBXcQ +-> ssh-ed25519 COspvA NT+/h2KsiZN2XbaWAlrTlDwyAPmHWrwgr6f0uhSbEGs +QpoAd+69VYrZwAC0LwDm1m/zfslVgzxpVFihQWDcqzE +-> ssh-ed25519 2XrTgw QoJ/74FOqYFxHJYXJEkyzbGY0xptSjorNvnyUS1p6zk +0sJ2F6IFuTrRvXO5ND1QL4CZ2lr1BAU3iQffC6Uc3h4 +-> ssh-ed25519 1MUEqQ xxgEUIhvWN/ZfRMGfu3fKQ+fWM5WSz8OexXPm6jaXDk +RXe0JMZ0sYMdQvrbi+zAs9F3d98ocRFnsSGUuUWccRk +-> ssh-ed25519 Fa25Dw tw4sqQcO86Gh0FGUD+O3bJ+8OcaN5rm8R6qocXvDbRg +7hiWa4qznHTV45kvC7ucj7j7FbPrqYK5OcCcByrcSxg +--- kvZDYq5n/OXu7xe2Kf5vGN0zosl9fgH4CAf3K0Tq3U4 +�D!��j]2�݃T+� �U��cg�oP�� �F._vb���d�9 \ No newline at end of file diff --git a/secrets/forgejo-runner-token.age b/secrets/forgejo-runner-token.age index 9abc8a98bed421d7f2d85582ded28f18ee6523c9..e541a38e5af990d7fa1b77fc0ebcaf1f1000414c 100644 GIT binary patch literal 809 zcmZ9{xvSfD007{nL(rTog@Qtsz{8bf`H(_d`jek5S+Xtbmerxix~#*x?{w^vp-TfH z8A1{QAwwXULrI~O1~PUjl+K;Yo4OR**?+;uXZh~PP3)r2svu21PYWMuFlh88T$aa? z>x`#UjD)$&9%BHWi^C33F}kY7*d&uO_ngB?SIFTo3s{C0#DJTYR93Hb6&mU?JMvkD z_F5-~=y03>rrIwBX?0Xnj^(JmM+5eNXj}ALqd-ZB0NzpFNw(3<@~6Whrx2QNg5uKX zV|N>jOMhdcodPxi*e+AZul*{FNkuLhvEKEW81SZ<7jw?r@UqitEW_|_(|gN{=v+%Z zF^PRx5*;$!^$C$Q*sxe1XvHECj>1W=HE;tpNS}^vR;RrMfaWGm(UaUV)v7SoHfmcY zQhD5RuaN5HKGK@nqHI*wsH1(ZErc>_0G!2}*^cWYO+vS|TnLdAfmv+}gPH~5(&7&; zNrskIh;j?fL1a5Y7z(l-bvV-*t&w6pK9O7%@6cYiPI2d009)$dTpJsO;<xa{*c95v zl+;sFvzkU^X}^(X?yA{|X{U=);`5xd9!DB$L&czTtNQ<0T^G&D(U8e}J6>#SqMIm4 zV_U?^mGa=?6d|i~4cn-6F2baW;fLv3m}D}4j2oS<BBuzIlO{}4Cbu00U!7bGupv8v zh;~8Db<^B$OiLQ?V+K#@YEFu_xdFsXDbz!wxDimJyoE-i5o{3h;M7yP?{~a3>#Q|G z)V#w=HgY*{H6|FMX@nY9Qn(`Y=E?QHUjOuKc<;9dFK_0ft4GY87e9yM)z{zr^4%BL zuD-wZ;i>cfcJLMA;qQL<G<o~-U#NKY$(=v$Kl|+c?^XBk#^0~My?gf`<N2TOKK}Ul F)qhvV6!QQ8 literal 809 zcmZY6JFDAP007_)8H(v#XhJXAG6=_dS+W`k=-RR@UCDa-*wWHSvL3e1mE<E^vXnVX z>C){&OENcw(k&%R0wIt&TWD#ZWC(?j?17NXx4+;UK0k^2Q68eU+;58fMuCz+P4@b? zu&PS?(V7|#Ngh+mkRk;vXxt?vrU|Py#hg@*CGdRxz}iB(6`g32mXORA1J;5Yxo1OA zE22_tRLh_z4Hv4}9yw|NnA|@n0cFtzo)F?#YnaR0sZfnf0UN2IG^q~iu$aYZQyXnt zOM7lkl}*5TX@#rv(sxkI0Vwuh=F06Pp~H5@Lrr#T$RN){L2HwP7%V-`=w?KSbk7=H z){5B7VS)ud6ScWqHv3J>3ndG{j#nEgKl*mM+I8l(=zNewb+KZ4fS;jJJ44b$7PkI| z<|1^|S=k)q9Te&j?gUbava-+%?Xou3tFjibGPi?p3McU{r=fOE=EBnO7wjknt4X#` z@q$yAlIa~gTkiSuSYWKs69D0ioyAT)o0U4-9FnzrR4LiF=J2e>Esqnz%Nn&pPSRkw zl5dr<WALU}6}Fof0dc0BbqIGi#t{K46Pb-m)uU2mdJX~gslmG}QZ;j#194?5NgIyy zpi=@KM(*Gg#Kh@#mHqFH)E45-#5BH~`p1?c7z-`wnY35@D$6>Vb+yq!iGZ?<Dv4=S z5mY_=Gr|rTj@1M=v1mNlP<kv)D?4mTLxb501{S+p7tQ+fTfdKK>tWuR0lPyqVGvdm znUbyyV%nS7yS+Tja&3}Onr_b7q$hp(?x#O~dHj8M{kw-Re|vRt=l9p*#oP05|NQq+ z_3M+b)4N~2dj0po*uMGU#=RFe@BjS8$<@EEJ$-Zg*@ySnWB1C(k5BJD{PCOr{C`f2 J=gp%Bp8%gm7Bv6> diff --git a/secrets/panel-secret-key.age b/secrets/panel-secret-key.age index 2b51856d..fd5e8892 100644 --- a/secrets/panel-secret-key.age +++ b/secrets/panel-secret-key.age @@ -1,17 +1,17 @@ age-encryption.org/v1 --> ssh-ed25519 Jpc21A jzJ5wTSLBsJ0DxelUDsT7BxM9qc73hPsCvB/1R3qGC4 -5giHjKIjnBVmn4NAtGLSIgKQGts9kOc+EPS6AKugn1s --> ssh-ed25519 BAs8QA J/y7P+A4z1iETfzta1UBf2AnKOD5lFTuGRo7EjWF4Qw -zUBV+byTPL2kbKS6ZCbu8mk9Lp/fq1iF2Sii0XHxB5I --> ssh-ed25519 ofQnlg w1RFmJnfOSpKu9tiVvPy3WdLVGO1vUdPW1exb+M7xEM -jk6/yzZMJCvzW1/5T+DKze+PxduLcWDrBGcVN6k5Vfo --> ssh-ed25519 COspvA DEBQL0y8GQpdib3WUkj1a/FVLVF8aMAZ77MdxLqJkVE -V96fUeVJD3v2/V1H5GLo5YIKlIU7fuyYBr7F48gzJ60 --> ssh-ed25519 2XrTgw ixdrdSfgH9Ch1Y4aflWP1QG6khhKN8mD1jFyOXhDTyA -Kd8QfZ1IqWqiaAY4C8+J/AE6vqIRNAZtU6jbIjRYvCA --> ssh-ed25519 1MUEqQ Mwda57DHcYYsBJr0L6q9IcO4xyr6NvfTlXyRK/sfjWk -WX2CsIJBJL1Q9ZMsLzLS2s2L1b+7Mm0WXF+PqRVh1p4 --> ssh-ed25519 ChtTUw trZu9wftz3Hjd2xTKf8TYM9oLpNBcwQX47Pfi/cetjE -5F1McxV1iLHyIVYdPDeR2twB5aq1fz9g/nrjAF5ys2w ---- 7p/n8TyrrtmVay+dPSX+bdlEqzFByuWk/6FyKFKh758 -I�B�U�3M:ƶ,����?n��-{�7�h�3�#7����'�g�~L&�)�=�bB:9h�A�TOS� \ No newline at end of file +-> ssh-ed25519 Jpc21A fBhVzGFs61K63QtA8RdOuuGfHFjMe/Dp0M6TXGLGWDU +qppnUZ+LQCXhuMCFMYv2D2CkmEfjb7mpmJufIeVjjaM +-> ssh-ed25519 BAs8QA PNicZCWLkbvM4ih77/F4z6FzHomL9EsJCuSCjbdRTwA +qIpTl/v7Xl08qBB//dFeW9qQiZg10YrYLnfyQrgDRfQ +-> ssh-ed25519 ofQnlg 9/vSN3V25ysXBOvS4UJQEzm0734zqO0gXjhgzX63tTs +AH9Q1lWr+RgICfW3h+D2SgCTFr+azI0x3J3eFnaz/XA +-> ssh-ed25519 COspvA IB1nWOMaVZVcvEog6UaqCak2fcKxIUN2yXvvRSTDxGw +Ti7JuBgU6phlI+oXfDDvx42dRu95kTwesRUKu4QsXZ4 +-> ssh-ed25519 2XrTgw 7S9ZhJvUFMw9tDCc0HvkRsRqjvmn47GFGVg/jkxIy1I +cj27gqqihSZG3Jcab9h9FyNJ1J8FjlUiyVlDot+sbWQ +-> ssh-ed25519 1MUEqQ l9mVTLD9rZXisBEz0sU2AdFNrJQ/+zuFTiIod5R/HCI +2q3csSEvMW5vtzqGHYTtZ1nZ0J1vT23bjhuj9HTsdWk +-> ssh-ed25519 kXy85Q BCrDvkPZLvx2Kvgapa3BT+AmpS6Fa5kpkgBnRVso2BE +ZBi+x/2ilJIzhzGipdZQJoGOjSqCuAttsqCDVFlYJ8Y +--- iWtseKyfUMBkQTUl9QzwXXLQcodEJeZt1Wuj5sR18yY ++2,� ���JrҨ>���z?�i������x�M0z��Ԓqҙ���^�Ⱥ�H����I+1��� \ No newline at end of file diff --git a/secrets/wiki-basicauth-htpasswd.age b/secrets/wiki-basicauth-htpasswd.age index cb5e2274..cae51926 100644 --- a/secrets/wiki-basicauth-htpasswd.age +++ b/secrets/wiki-basicauth-htpasswd.age @@ -1,18 +1,18 @@ age-encryption.org/v1 --> ssh-ed25519 Jpc21A vsNSibhHXdlRVArHkFqPy2vapvpo+lfs6QNESfZHk0c -ArMZEQCONAIGQwyEh/QkJ3m5Bnru2/A1fQdJNtPraII --> ssh-ed25519 BAs8QA 7vfPIUymPXpfX7vhUyNVqBmTllXgJ99gCSHOgWH66HA -gaueu0eHyqY+VAkNIzPb/aLQ1VG13kSpth2tJfhK7sU --> ssh-ed25519 ofQnlg iaJY3mcaKyLjTAqNVnzyivIVRwXxxFzP0ru35s/TU3Q -mfKliFvPT+hEOpOPtkdR/UEmEadXZGpQ8+iWg+S/Q8c --> ssh-ed25519 COspvA +LC5rnZIS2R5DA3mIyeo2hR45mcBwNUjRS051qN+q2w -yLYl5g8o29ApSCn+H4Df8P8y+eFv2Hbj6b/nHrzFMdA --> ssh-ed25519 2XrTgw dG9hmRFpaCBgaoHIkWmJM1Ls/mBqnV5gueGjCTEmRE0 -YkIQDWAwpr3pjjFozGEa3+4+WqJan0KQzUeYNxRjUPc --> ssh-ed25519 1MUEqQ 0Mtf2NGpVP3TYuFGrTPyQM+h6PjpgJNwW9amz1w7h0w -J8RM+vl/e8JifUP3dqwH5L9AUqu24pALv6wqxaNhy3g --> ssh-ed25519 dgBsjw 9Y1n4J8E5T022V8QCApLykKoX56Zto8eLiy5KZvPuR4 -3piVQigR7rFry43YTTHmXkBSDIAFa/ife1Vuq6/3ubk ---- 5Mr3Xe9RF1mneoWBno4SVkNqHx76EilFG0UvsHbqRQo -��&�mu�.��N���:%����P� ]`L<��� ����]���e/T(s"a�ō���-��$M�A�%L�ɜv� -�m���@+9����%oa/�K*��& \ No newline at end of file +-> ssh-ed25519 Jpc21A BfHJN3vILbsfY91kEjSQ+STrn6vQfn83Fx3cBCNshRQ +0O8GJYfF8WFS4Xsgj5v1cly4JP1MgSN40OgRdW/i0rA +-> ssh-ed25519 BAs8QA Ue0NLMpmZDSTGvwZ8lhzes7pcmit9F6uwzeT4XhiwC0 +jsvvuOW344i8GR4B139SX0LwTqzKQEgBvsy8oRppqBU +-> ssh-ed25519 ofQnlg 9iSMQeTJn1OUqTF+M2sHpp69lblb8E6TVbgZs7vgD2U +uMQI1gTTMvYW7ea9xBAln118JEeNvv3nqbq32zJoat8 +-> ssh-ed25519 COspvA YxCyfe0li23JoI2q4XFVUx4vrWApLwSnJD31PHXuPBg +8xuT9+W2mnTag9tm6F6LXzHkIh2Nou/8lgxd64OpvWk +-> ssh-ed25519 2XrTgw jEzw0A9Wd1b1Zoryzp/W/QZ6bd99E7sySnr/W2xcnDs +IyMrojJ3AChS6lhj599caNM+02i16qtpc6cocln14b4 +-> ssh-ed25519 1MUEqQ haiI/5EkuTZ2YHxsqSVlqfM0VVR24DIDrMS3RmXwAhU +qVIAvLp2qG4A3f3OKUqAKqH1eOicJz54nfblPSUKrSw +-> ssh-ed25519 dgBsjw /vCnznu73U99onCWcM0aQlW0azscyUe4BB2kKeZvtHs +MPnvXR/WVsl/tJ1YPoc7nk2Ls2x9bbtJdNp3CQTuuWI +--- OzkqKlw4xu3McMk20orQN0h+VPYfUUSDC+DsgRU1tSw +�^@�m���`B��#{��� GUu��|�� �� r��jb�:ԓd��] G�Ω���-�M�����l�3m��)��@���e?���e��Z +Y}�!f� \ No newline at end of file diff --git a/secrets/wiki-password.age b/secrets/wiki-password.age index e3d26a37bead1f24dfe39c67d2b05607a07b01da..c38c1279e4bebad2c196c62e87daac17e74f7c11 100644 GIT binary patch literal 905 zcmZ9}y9(=M007{{K{|;bh%ONoghOr9B+dULh-ofOnl!iOT13pfNs}~b?hysS)!9WC z1qa_j&f?$$I60hM5L`szh@f+y;2S<KiI!0r+^4EdZ{@qUd$Q`$#qxcmX)ens+z<o` zkwX=1PzuqxS?#cx*?^M~jik&FISc)m9<_QkMm+127jnn7u(GHH5TCF#vu{Y$f@sEC zT6WhhP4+`$-uYV_X4h){L`2*BJUnVUssS2>a2pA-7pMrWr^ZyE<F#BWTG`W+5$!{r z$WPtcuAQ_q*9$C@@)oZt30qm>6#FWvuUF*B90s+rW5PA<Va^yuW+(8d-D0iG6J#fa zJGncsqnx`evvN3-m<v~J71STQqMKAT2^vtJB-ULFLW-eHi`yrtY&_CB6mG==H7$}^ z>IZW>+t;3_CxB1dqed%D)l<m6pn-d~dh9%;p~r~kRl1Dp9GFU>55#$w9>E=7nLasE zi$R1CKR2i+HC62bT)2{C9UeWl$(r?<lRHskl)clG#qm+wICmo%kY>B7Nm1d?dYu-u zF?h2BC9^N9!0qO7i1V&+qOELk7+Bb)Qt<+evR=QR?^@?I2J23>3d#xNN2o#nF#F=V zQUv@_Lysm~YY3DjUMG}6DU(#vlg_xtgjkyVJpk*%D|~uDVW_I2s)5CxN#La4bkkE& zQSnxlLUXA^)702;O-BnUqpnyz2d+dtYGJZ#vH_91oIa{;uqo0*&byU!%rxH2gB34$ z4o=nc=$ywE1oo9(wDbkD8HiE<ZV12ugO9?{={=t$TSLg?Y(Kg(W8J*n|8L7Baudt~ zBMMKc3tn26X)IO~+e;OH5{vdS3I@S2T|`@FCRqIJ8J~Uq{JURY{4>V?{^FOnKK$zU z_nv<6)4v~o|N1Mhe*Vsv*e8~qym0*V&DXy919~t0v;FqRA3pl)xv_ouw`XrWL*9P+ E9~yHkH2?qr literal 905 zcmZ9}JrAQ~003YUw?+r!b`v{SftNxdMlXC*3Z+0>poxjJe3kN5pnSXzH{9UhY;<tA z&BU0PxN019($&R5Hyzb~aM8KH;2EAEiRMvxZl=1sROLHWlVCkDo4=2=Z90!aKv4vX zX!RKo93tga=EoB~a^_NiRbabm4w|mrp#zpzqL~>4a1L9m<NaAeL{vssVm%45zGF#T zOl?M!e8A>pgep0`34I~;S6yX2YCP967KgBrNv`lAcUrW+$Asbg4!@RjH@WS2e6Qbd zce92gSMM!+w$=-pzF>QyakTViy1CQW>#Vl0izJW}rBJTXAGIVqaLJ=q#a5Xoh+Shn zASg!Cr6ayuV`J$VV}TyJ!PYx#OGIE<z?*vMz+#qMlgoX`Vlx!5wo$1ow4$hFGgcdO zBF9}PFPdB#A`V_3HNkA_o<qE8G`o|bpD6CY(>-b09WB!85iQi4Ptr@CQ+9r{Q)Ahh z-Q{LUB-}7<F%mM9Qq-R2onqkbwUh`LscQTHE#i&m7>^q8nq4v=ntN=hJEYfj*P&%( zm&ZLkU9$wh5*92<2`$Jjw_@Ve{VY|$0*WiWam=19-TQJ{@*zvfi{?~9lY~QG1=o$Q z7%uau5yoD+S;%BrA+4<!w4)juf6t8WU59Cavg`VQw|bl>N2laDb3L}RGm1x{T`Y7y zJ!KQkZwpBjaIaQ^-n7TjJ4gj)-@#yWi$^U?_%<65upw5|6gGEeFD4G*DL?~P$nE%U zlUt4C7(PcD&Y_aQdFC;y%4XugayH$_D6J@P5!5HBNo4JA&nHDb-ef*^wc!7^`5cLE zF^B+Ev))x?VRP?D$>*tpE~1MZXt5pWx)V-)9)!~D+fTm#?fKWQzk1`nCqI7r^e5); zm(K=rdh4n2)yGtb{rk}eKfHMD8}SeR&$IFNcfY*(^IxlfKK%06FP{DW?)=qf`OD9f F{{WW?E4lyx diff --git a/secrets/wiki-smtp-password.age b/secrets/wiki-smtp-password.age index 01be849eb3f310e4f616d57b9334eb84b2b80711..26145509eb09432f24b801be2929742a9893a2ce 100644 GIT binary patch literal 926 zcmZ9~z3by-0KjoXr+|9niAzA7LN864=GWXHJW2D~<Y|+pPm^wWPntAIo3v@7!{I2x z?YD@7aDw8bi;FsmIOyS^ql+MTe}E|B&HW2LeBtXQ(I_f|Q(w1PRX(Ur33;Kg(K~q4 zq@yULr&Ef<wK||FfcM^T^{8vSm%PiJvQ;lp!l!|*dTwcUOj#)e9dhW{3;7Jww@J>; z!@V-iTN91}XCV{LRy?g2P9vf$?X-Hs07;p<w;B(cnF(;Gv}8hc=h0-l<Y5FIiCM^k zBBOSfOl&%Lw6;4S!0%Cqg|QacyTd%zNqTV>$BvaO>5W@7jpvSS+K=qx#$IG)S~a&? z6`N&|;6CD`JH+>;cDn0AwDtDcqCh#Q5>03%k$^cegQbKf-53L#GGO@*u4#8QP)CW+ z=d$M%Voji-2qL*C^q^JJBc&L(ny_r@3&2CsWsIYt##uN(KH}Pqv9oIpb}lTAM48lt zr9*KG8I)iv!i`B5f=ZQyc(DwbKA&eUOUvZMwsU6Rx>|m6U2@Imw;Ju7?4-j9DYp#G zq78a+DlM*@S;ncQ4(vE(>daw|Y(THh&{O-o!a!JW1${>jdU$aAXbYSPS(qA|(!L>g z(u`SXNUyF3#sjw+Wo*Qwi68V0*A-dVWr3yhe!BKJ5OyWiPF97{l>(A?mq=P~dC|bA zHdE$)Wo4<H48+yz3loICW4?F@+2dkzbyZ(t+iF~kw_2F+&A!9AmT=sC8PxUNas?`m znqD0R#!0zq)bmj%EktR(M8;&AV{&>%E42p!>Z#d9k*E6F5(goA5u5Mk4utTmcFShR z$rUyljc}G-DE`%RWMiI{7gq2EI@G5Z1r8P`Y9VmLq1p^^S}s)VmA^iyUsE2Q?*Ez_ zUq1c#uz4tFe|)RI^)~tGy>HGxK7RJRczyWoEAsp2+|$3``{mXD-uwsr{Mpwu`1jqH gKL<F40_=w;FMapO`r^^=`w!pv=>7GdKYjA-e`&5Zn*aa+ literal 926 zcmZY4yRO@0003Y%q|g}z12S}}WTkd|i4zGS*^Xn!K8`Q3<JeM>?BCbp_;T{c*9BCy zsw(ILJOIN%3@k_tAO<!Dn4lvPtnE-HMuY_O=@WeV{3M!2B{&WBIjhRM)hWT+*<|`Y z0%1ChLV~7eOGK^#F=LUa*1@o0+h`Ybk>H??xNHoiDrj58(s=KCJ&2QjJP|7}Noad> z(nhxJNQuqRQSEde)4j_)s~Um{NqFp)nn1x)rEY2*3l|29_z-t%ba8+}R<>5bTic;n zM;KM)ZVi$PD4!RES;u^qcax}HEcI*yBbjsYdCfa~0Kz6vOy{g&F|)!gYF0O%>UQc) zt%{BEm>?7jz$|Z4sZ>l~DR)^!Lf}aws6?&bd1S?Tf#E0sj`k!l1=Dn?{6w~>G^S*e zbD>qlZ6B^wtxDH{Aj@+ct>IO7Q{y#Qw=BY`hGJWAi*2qNvPV^CxdsNuhYMf1SQ94( zt=SH^rQ-6{Bo?`&tzmYnNe+ST=`O|GybOfMW_I&~>6z)0E)qQ|l$UPA;bbKpBGH#y zs~px!x^)?h5v3ZRdyv`^DotMY<007}0Ie&Yk^g^ldb5OZ7N7%6H%pY|O@?9PI>K;` z3JA+zw?PWTVSirSyv<ZwxH1s7(t*C)q=mj+bsfXzradS6`B~1+8@gMm79OAq=b;N8 zOhTv*(oT$|7|#`#;wnxb&$_NwfbI{6lB!y-Tkc39%wE#MgoBqIl7~$y%vUL7n#@`O zdBl&&HeZvnXw&RoU>5vd9#;iadv{`8xS>(>PA<;cW~h$|Gb)vWHm1?>>85S+tgy_5 zPpW)AnNFvOr}%7HJ6$|#?UhpLZtXcbV0??&*>L8LEz!jkljS`}O+No_ef{jqcceRy zzSZ8oc=G-IH*Yb&Js*B}>x0)GzTQ6i=JC7te!4rF&))dw&+89w-TwE%?_Yg<@5l1f l=fB)OJ*~g^`=ci>VE^l1pZ)yaCts(p-05FDz5e4>??3DIIs*Uz From 9c40fd0bfbfb1f9ddb2ea6d2032360439b72fe32 Mon Sep 17 00:00:00 2001 From: Kiara Grouwstra <kiara@procolix.eu> Date: Tue, 11 Mar 2025 13:12:09 +0100 Subject: [PATCH 02/18] WIP: trigger nixops from panel Closes #76. Note I had not yet manage to successfully test this. Manually trying the parameterized NixOps4 I tried using the following command, tho I had yet to get this to work as well: ```sh DEPLOYMENT='{"domain": "fediversity.net", "mastodon": {"enable": false}, "pixelfed": {"enable": true}, "peertube": {"enable": false}}' nix develop --extra-experimental-features "configurable-impure-env" --command nixops4 apply test ``` (or rather, I used a hardcoded Nix here so as to make it not use Lix.) So far this had failed for me with: ``` the following units failed: acme-mastodon.web.garage.fediversity.net.service ... nixops4 error: Failed to create resource garage-configuration ``` --- flake.nix | 4 +++- infra/flake-part.nix | 14 ++++++++++++-- infra/machines/fedi201/fedipanel.nix | 9 +++++++++ panel/README.md | 5 +++++ panel/default.nix | 2 ++ panel/src/panel/templates/configuration_form.html | 4 ++-- panel/src/panel/views.py | 10 ++++++++++ 7 files changed, 43 insertions(+), 5 deletions(-) diff --git a/flake.nix b/flake.nix index 96e4f815..ca7259a5 100644 --- a/flake.nix +++ b/flake.nix @@ -58,7 +58,9 @@ packages = [ pkgs.nil inputs'.agenix.packages.default - inputs'.nixops4.packages.default + (inputs'.nixops4.packages.default.overrideAttrs { + impureEnvVars = [ "DEPLOYMENT" ]; + }) pkgs.httpie pkgs.jq ]; diff --git a/infra/flake-part.nix b/infra/flake-part.nix index 08be9cfe..a154c5bb 100644 --- a/infra/flake-part.nix +++ b/infra/flake-part.nix @@ -21,7 +21,7 @@ let makeResourceModule = { vmName, isTestVm }: { - _module.args = { inherit inputs; }; + _module.args = { inherit self inputs; }; imports = [ ./common/resource.nix (if isTestVm then ./test-machines + "/${vmName}" else ./machines + "/${vmName}") @@ -143,7 +143,17 @@ in ## - We add a “test” deployment with all test machines. nixops4Deployments = genAttrs machines makeDeployment' // { default = makeDeployment machines; - test = makeTestDeployment (fromJSON (readFile ./test-machines/configuration.json)); + test = makeTestDeployment ( + fromJSON ( + let + env = builtins.getEnv "DEPLOYMENT"; + in + if env != "" then + env + else + builtins.trace "env var DEPLOYMENT not set, falling back to ./test-machines/configuration.json!" (readFile ./test-machines/configuration.json) + ) + ); }; flake.nixosConfigurations = genAttrs machines (makeConfiguration false) diff --git a/infra/machines/fedi201/fedipanel.nix b/infra/machines/fedi201/fedipanel.nix index 5312eafb..85696b9d 100644 --- a/infra/machines/fedi201/fedipanel.nix +++ b/infra/machines/fedi201/fedipanel.nix @@ -1,4 +1,5 @@ { + self, config, ... }: @@ -11,7 +12,12 @@ in ../../../panel/nix/configuration.nix ]; + nix.settings = { + extra-experimental-features = "configurable-impure-env"; + }; + environment.systemPackages = [ + self panel ]; @@ -36,4 +42,7 @@ in STATIC_ROOT = "/var/lib/${name}/static"; }; }; + systemd.services.${name}.env = { + REPO_DIR = builtins.trace self self; + }; } diff --git a/panel/README.md b/panel/README.md index 5dcab93c..cc01c82b 100644 --- a/panel/README.md +++ b/panel/README.md @@ -4,6 +4,11 @@ The Fediversity Panel is a web service for managing Fediversity deployments with ## Development +- In your [nix.conf](https://nix.dev/manual/nix/latest/command-ref/conf-file) (Nix) / `nix.settings` (NixOS), +to your [`experimental-features`](https://nix.dev/manual/nix/latest/command-ref/conf-file#conf-experimental-features) +add [`configurable-impure-env`](https://nix.dev/manual/nix/latest/development/experimental-features#xp-feature-configurable-impure-env). +Note that this features is only available in Nix, not in Lix. + - To obtain all tools related to this project, enter the development environment with `nix-shell`. If you want to do that automatically on entering this directory: diff --git a/panel/default.nix b/panel/default.nix index b0ec435e..dc8e81ef 100644 --- a/panel/default.nix +++ b/panel/default.nix @@ -34,6 +34,8 @@ in export CREDENTIALS_DIRECTORY=${builtins.toString ./.credentials} export DATABASE_URL="sqlite:///${toString ./src}/db.sqlite3" ''; + # FIXME: ending a path in a non-name produces a double hash :( + REPO_DIR = ./..; }; tests = pkgs'.callPackage ./nix/tests.nix { }; diff --git a/panel/src/panel/templates/configuration_form.html b/panel/src/panel/templates/configuration_form.html index 154b5e02..474aa4f6 100644 --- a/panel/src/panel/templates/configuration_form.html +++ b/panel/src/panel/templates/configuration_form.html @@ -5,7 +5,7 @@ {{ form.as_p }} - <button class="button" disabled>Deploy</button> - <button class="button" type="submit" >Save</button> + <button class="button" type="submit" name="deploy">Deploy</button> + <button class="button" type="submit" name="save">Save</button> </form> {% endblock %} diff --git a/panel/src/panel/views.py b/panel/src/panel/views.py index 13a8f80a..7134ff06 100644 --- a/panel/src/panel/views.py +++ b/panel/src/panel/views.py @@ -1,6 +1,8 @@ from enum import Enum from django.urls import reverse_lazy +import os +import subprocess from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.models import User from django.views.generic import TemplateView, DetailView @@ -41,6 +43,14 @@ class ConfigurationForm(LoginRequiredMixin, FormView): operator=self.request.user, ) + button_name = self.request.POST.get('save_draft') or self.request.POST.get('publish') + print(f"self.request.POST: {self.request.POST}") + print(f"button_name: {button_name}") + if button_name == 'deploy': + print("DEPLOYING:") + print(os.getenv("REPO_DIR")) + print(obj) + subprocess.run(["nix", "develop", "--command", "nixops4", "apply", "test"], cwd=os.getenv("REPO_DIR"), env={"DEPLOYMENT": obj}) return obj # TODO(@fricklerhandwerk): From bc670296d7615d8e58834ef692445216e3d66587 Mon Sep 17 00:00:00 2001 From: lois <lois@procolix.eu> Date: Tue, 11 Mar 2025 14:46:11 +0100 Subject: [PATCH 03/18] Convert configuration form to json WIP: Get nix in scope --- panel/default.nix | 1 + panel/nix/configuration.nix | 1 + panel/nix/package.nix | 2 ++ panel/src/panel/views.py | 13 +++++++------ 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/panel/default.nix b/panel/default.nix index dc8e81ef..0246337f 100644 --- a/panel/default.nix +++ b/panel/default.nix @@ -22,6 +22,7 @@ in packages = [ pkgs.npins manage + pkgs.nix ]; env = { NPINS_DIRECTORY = toString ../npins; diff --git a/panel/nix/configuration.nix b/panel/nix/configuration.nix index d790e30c..7e6cb437 100644 --- a/panel/nix/configuration.nix +++ b/panel/nix/configuration.nix @@ -37,6 +37,7 @@ let django-libsass django_4 setuptools + pkgs.nix ] ++ cfg.package.propagatedBuildInputs ); diff --git a/panel/nix/package.nix b/panel/nix/package.nix index e6196686..c43d850c 100644 --- a/panel/nix/package.nix +++ b/panel/nix/package.nix @@ -2,6 +2,7 @@ lib, sqlite, python3, + nix, }: let src = @@ -50,6 +51,7 @@ python3.pkgs.buildPythonPackage { in [ sqlite + nix ] ++ pythonPackages; diff --git a/panel/src/panel/views.py b/panel/src/panel/views.py index 7134ff06..6629ade2 100644 --- a/panel/src/panel/views.py +++ b/panel/src/panel/views.py @@ -12,6 +12,7 @@ from panel import models from panel.configuration import forms + class Index(TemplateView): template_name = 'index.html' @@ -43,14 +44,14 @@ class ConfigurationForm(LoginRequiredMixin, FormView): operator=self.request.user, ) - button_name = self.request.POST.get('save_draft') or self.request.POST.get('publish') - print(f"self.request.POST: {self.request.POST}") - print(f"button_name: {button_name}") - if button_name == 'deploy': + # Check for deploy button + if "deploy" in self.request.POST.keys(): print("DEPLOYING:") print(os.getenv("REPO_DIR")) - print(obj) - subprocess.run(["nix", "develop", "--command", "nixops4", "apply", "test"], cwd=os.getenv("REPO_DIR"), env={"DEPLOYMENT": obj}) + config_dict = obj.parsed_value.model_dump_json() + print(f"config_dict: {config_dict}") + subprocess.run(["nix", "develop", "--command", "nixops4", "apply", + "test"], cwd=os.getenv("REPO_DIR"), env={"DEPLOYMENT": config_dict}) return obj # TODO(@fricklerhandwerk): From 3b6fcc28783c52c60a3404935ad640fb8c88da3b Mon Sep 17 00:00:00 2001 From: Kiara Grouwstra <kiara@procolix.eu> Date: Tue, 11 Mar 2025 15:25:03 +0100 Subject: [PATCH 04/18] add NIX_DIR --- infra/machines/fedi201/fedipanel.nix | 2 ++ panel/default.nix | 1 + panel/src/panel/views.py | 16 +++++++--------- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/infra/machines/fedi201/fedipanel.nix b/infra/machines/fedi201/fedipanel.nix index 85696b9d..99e02a0e 100644 --- a/infra/machines/fedi201/fedipanel.nix +++ b/infra/machines/fedi201/fedipanel.nix @@ -1,6 +1,7 @@ { self, config, + pkgs, ... }: let @@ -44,5 +45,6 @@ in }; systemd.services.${name}.env = { REPO_DIR = builtins.trace self self; + NIX_DIR = pkgs.nix; }; } diff --git a/panel/default.nix b/panel/default.nix index 0246337f..b47473bb 100644 --- a/panel/default.nix +++ b/panel/default.nix @@ -37,6 +37,7 @@ in ''; # FIXME: ending a path in a non-name produces a double hash :( REPO_DIR = ./..; + NIX_DIR = pkgs.nix; }; tests = pkgs'.callPackage ./nix/tests.nix { }; diff --git a/panel/src/panel/views.py b/panel/src/panel/views.py index 6629ade2..82c0f380 100644 --- a/panel/src/panel/views.py +++ b/panel/src/panel/views.py @@ -12,23 +12,18 @@ from panel import models from panel.configuration import forms - class Index(TemplateView): template_name = 'index.html' - class AccountDetail(LoginRequiredMixin, DetailView): model = User template_name = 'account_detail.html' - def get_object(self): return self.request.user - class ServiceList(TemplateView): template_name = 'service_list.html' - class ConfigurationForm(LoginRequiredMixin, FormView): template_name = 'configuration_form.html' success_url = reverse_lazy('configuration_form') @@ -48,10 +43,13 @@ class ConfigurationForm(LoginRequiredMixin, FormView): if "deploy" in self.request.POST.keys(): print("DEPLOYING:") print(os.getenv("REPO_DIR")) - config_dict = obj.parsed_value.model_dump_json() - print(f"config_dict: {config_dict}") - subprocess.run(["nix", "develop", "--command", "nixops4", "apply", - "test"], cwd=os.getenv("REPO_DIR"), env={"DEPLOYMENT": config_dict}) + print(os.getenv("NIX_DIR")) + env={ + "DEPLOYMENT": obj.parsed_value.model_dump_json(), + "PATH": f"{os.getenv("NIX_DIR")}/bin/", + } + print(f"env: {env}") + subprocess.run(["nix", "develop", "--command", "nixops4", "--show-trace", "--verbose", "apply", "test"], cwd=os.getenv("REPO_DIR"), env=env) return obj # TODO(@fricklerhandwerk): From 7b6e8fa9ba1ab6d4075de78f09856707f3467f83 Mon Sep 17 00:00:00 2001 From: lois <lois@procolix.eu> Date: Tue, 11 Mar 2025 16:12:43 +0100 Subject: [PATCH 05/18] Pass REPO_DIR implicitly --- panel/default.nix | 2 -- panel/src/panel/views.py | 12 ++++++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/panel/default.nix b/panel/default.nix index b47473bb..dbc6325b 100644 --- a/panel/default.nix +++ b/panel/default.nix @@ -35,8 +35,6 @@ in export CREDENTIALS_DIRECTORY=${builtins.toString ./.credentials} export DATABASE_URL="sqlite:///${toString ./src}/db.sqlite3" ''; - # FIXME: ending a path in a non-name produces a double hash :( - REPO_DIR = ./..; NIX_DIR = pkgs.nix; }; diff --git a/panel/src/panel/views.py b/panel/src/panel/views.py index 82c0f380..cf2e232b 100644 --- a/panel/src/panel/views.py +++ b/panel/src/panel/views.py @@ -1,4 +1,5 @@ from enum import Enum +import os from django.urls import reverse_lazy import os @@ -12,18 +13,23 @@ from panel import models from panel.configuration import forms + class Index(TemplateView): template_name = 'index.html' + class AccountDetail(LoginRequiredMixin, DetailView): model = User template_name = 'account_detail.html' + def get_object(self): return self.request.user + class ServiceList(TemplateView): template_name = 'service_list.html' + class ConfigurationForm(LoginRequiredMixin, FormView): template_name = 'configuration_form.html' success_url = reverse_lazy('configuration_form') @@ -44,12 +50,14 @@ class ConfigurationForm(LoginRequiredMixin, FormView): print("DEPLOYING:") print(os.getenv("REPO_DIR")) print(os.getenv("NIX_DIR")) - env={ + env = { "DEPLOYMENT": obj.parsed_value.model_dump_json(), "PATH": f"{os.getenv("NIX_DIR")}/bin/", } print(f"env: {env}") - subprocess.run(["nix", "develop", "--command", "nixops4", "--show-trace", "--verbose", "apply", "test"], cwd=os.getenv("REPO_DIR"), env=env) + print(f"Path: {os.getcwd()}/..") + subprocess.run(["nix", "develop", "--command", "nixops4", "--show-trace", + "--verbose", "apply", "test"], cwd=os.getenv("REPO_DIR") or f"{os.getcwd()}/..", env=env) return obj # TODO(@fricklerhandwerk): From f39f5d295aba9e4896a12c71b72f21d67d1f8549 Mon Sep 17 00:00:00 2001 From: lois <lois@procolix.eu> Date: Tue, 11 Mar 2025 16:22:24 +0100 Subject: [PATCH 06/18] Remove addding nixpkgs (did not fix the issue) --- panel/default.nix | 1 - panel/nix/configuration.nix | 1 - panel/nix/package.nix | 2 -- 3 files changed, 4 deletions(-) diff --git a/panel/default.nix b/panel/default.nix index dbc6325b..d9c7db99 100644 --- a/panel/default.nix +++ b/panel/default.nix @@ -22,7 +22,6 @@ in packages = [ pkgs.npins manage - pkgs.nix ]; env = { NPINS_DIRECTORY = toString ../npins; diff --git a/panel/nix/configuration.nix b/panel/nix/configuration.nix index 7e6cb437..d790e30c 100644 --- a/panel/nix/configuration.nix +++ b/panel/nix/configuration.nix @@ -37,7 +37,6 @@ let django-libsass django_4 setuptools - pkgs.nix ] ++ cfg.package.propagatedBuildInputs ); diff --git a/panel/nix/package.nix b/panel/nix/package.nix index c43d850c..e6196686 100644 --- a/panel/nix/package.nix +++ b/panel/nix/package.nix @@ -2,7 +2,6 @@ lib, sqlite, python3, - nix, }: let src = @@ -51,7 +50,6 @@ python3.pkgs.buildPythonPackage { in [ sqlite - nix ] ++ pythonPackages; From 4987e9f530aea3c80dec044d9659aae62be23de0 Mon Sep 17 00:00:00 2001 From: Kiara Grouwstra <kiara@procolix.eu> Date: Wed, 12 Mar 2025 09:06:38 +0100 Subject: [PATCH 07/18] pass `self` thru in flake --- flake.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/flake.nix b/flake.nix index ca7259a5..3f2b4a37 100644 --- a/flake.nix +++ b/flake.nix @@ -12,8 +12,8 @@ }; outputs = - inputs@{ flake-parts, ... }: - flake-parts.lib.mkFlake { inherit inputs; } { + inputs@{ self, flake-parts, ... }: + flake-parts.lib.mkFlake { inherit self inputs; } { systems = [ "x86_64-linux" "aarch64-linux" From 7b77e2ad72f1462a26208402a6e38ff083a0625a Mon Sep 17 00:00:00 2001 From: Kiara Grouwstra <kiara@procolix.eu> Date: Wed, 12 Mar 2025 14:22:32 +0100 Subject: [PATCH 08/18] use imputs over self --- flake.nix | 4 ++-- infra/flake-part.nix | 2 +- infra/machines/fedi201/default.nix | 17 ++++++++++++----- infra/machines/fedi201/fedipanel.nix | 6 +++--- 4 files changed, 18 insertions(+), 11 deletions(-) diff --git a/flake.nix b/flake.nix index 3f2b4a37..ca7259a5 100644 --- a/flake.nix +++ b/flake.nix @@ -12,8 +12,8 @@ }; outputs = - inputs@{ self, flake-parts, ... }: - flake-parts.lib.mkFlake { inherit self inputs; } { + inputs@{ flake-parts, ... }: + flake-parts.lib.mkFlake { inherit inputs; } { systems = [ "x86_64-linux" "aarch64-linux" diff --git a/infra/flake-part.nix b/infra/flake-part.nix index a154c5bb..f90bd2ff 100644 --- a/infra/flake-part.nix +++ b/infra/flake-part.nix @@ -21,7 +21,7 @@ let makeResourceModule = { vmName, isTestVm }: { - _module.args = { inherit self inputs; }; + _module.args = { inherit inputs; }; imports = [ ./common/resource.nix (if isTestVm then ./test-machines + "/${vmName}" else ./machines + "/${vmName}") diff --git a/infra/machines/fedi201/default.nix b/infra/machines/fedi201/default.nix index 2f8978d7..239c85c0 100644 --- a/infra/machines/fedi201/default.nix +++ b/infra/machines/fedi201/default.nix @@ -1,4 +1,10 @@ { + inputs, + config, + pkgs, + ... +}@args: +builtins.trace args { fediversityVm = { vmId = 201; proxmox = "fediversity"; @@ -15,9 +21,10 @@ }; }; - nixos.module = { - imports = [ - ./fedipanel.nix - ]; - }; + # nixos.module = { + # imports = [ + # ./fedipanel.nix + # ]; + # }; + nixos.module = import ./fedipanel.nix { inherit inputs config pkgs; }; } diff --git a/infra/machines/fedi201/fedipanel.nix b/infra/machines/fedi201/fedipanel.nix index 99e02a0e..2b341148 100644 --- a/infra/machines/fedi201/fedipanel.nix +++ b/infra/machines/fedi201/fedipanel.nix @@ -1,5 +1,5 @@ { - self, + inputs, config, pkgs, ... @@ -18,7 +18,7 @@ in }; environment.systemPackages = [ - self + inputs panel ]; @@ -44,7 +44,7 @@ in }; }; systemd.services.${name}.env = { - REPO_DIR = builtins.trace self self; + REPO_DIR = builtins.trace inputs inputs; NIX_DIR = pkgs.nix; }; } From b0a869051112c0441f01a335f3d10b485b21594a Mon Sep 17 00:00:00 2001 From: lois <lois@procolix.eu> Date: Wed, 12 Mar 2025 16:39:30 +0100 Subject: [PATCH 09/18] WIP: change env to environment --- infra/flake-part.nix | 30 +++++++++++++++------------- infra/machines/fedi201/default.nix | 5 +++-- infra/machines/fedi201/fedipanel.nix | 9 +++++---- 3 files changed, 24 insertions(+), 20 deletions(-) diff --git a/infra/flake-part.nix b/infra/flake-part.nix index f90bd2ff..0636c692 100644 --- a/infra/flake-part.nix +++ b/infra/flake-part.nix @@ -141,20 +141,22 @@ in ## - Each normal machine gets a deployment. ## - We add a “default” deployment with all normal machines. ## - We add a “test” deployment with all test machines. - nixops4Deployments = genAttrs machines makeDeployment' // { - default = makeDeployment machines; - test = makeTestDeployment ( - fromJSON ( - let - env = builtins.getEnv "DEPLOYMENT"; - in - if env != "" then - env - else - builtins.trace "env var DEPLOYMENT not set, falling back to ./test-machines/configuration.json!" (readFile ./test-machines/configuration.json) - ) - ); - }; + nixops4Deployments = + builtins.trace (builtins.attrNames inputs) genAttrs machines makeDeployment' + // { + default = makeDeployment machines; + test = makeTestDeployment ( + fromJSON ( + let + env = builtins.getEnv "DEPLOYMENT"; + in + if env != "" then + env + else + builtins.trace "env var DEPLOYMENT not set, falling back to ./test-machines/configuration.json!" (readFile ./test-machines/configuration.json) + ) + ); + }; flake.nixosConfigurations = genAttrs machines (makeConfiguration false) // genAttrs testMachines (makeConfiguration true); diff --git a/infra/machines/fedi201/default.nix b/infra/machines/fedi201/default.nix index 239c85c0..28397a84 100644 --- a/infra/machines/fedi201/default.nix +++ b/infra/machines/fedi201/default.nix @@ -3,8 +3,9 @@ config, pkgs, ... -}@args: -builtins.trace args { +}: +# builtins.trace args.pkgs +{ fediversityVm = { vmId = 201; proxmox = "fediversity"; diff --git a/infra/machines/fedi201/fedipanel.nix b/infra/machines/fedi201/fedipanel.nix index 2b341148..154bd6ea 100644 --- a/infra/machines/fedi201/fedipanel.nix +++ b/infra/machines/fedi201/fedipanel.nix @@ -1,13 +1,14 @@ { inputs, config, - pkgs, + # pkgs, ... }: let name = "panel"; panel = (import ../../../panel/default.nix { }).package; in +# builtins.trace args.pkgs { imports = [ ../../../panel/nix/configuration.nix @@ -43,8 +44,8 @@ in STATIC_ROOT = "/var/lib/${name}/static"; }; }; - systemd.services.${name}.env = { - REPO_DIR = builtins.trace inputs inputs; - NIX_DIR = pkgs.nix; + systemd.services.${name}.environment = { + REPO_DIR = inputs; + # NIX_DIR = pkgs.nix; }; } From 29f841d1db945f1ac4c65eea2e9a38f30db6e2db Mon Sep 17 00:00:00 2001 From: Kiara Grouwstra <kiara@procolix.eu> Date: Thu, 13 Mar 2025 13:29:23 +0100 Subject: [PATCH 10/18] pass flake path as inputs.self.outPath? --- infra/flake-part.nix | 30 +++++++++++++--------------- infra/machines/fedi201/default.nix | 1 - infra/machines/fedi201/fedipanel.nix | 8 ++++---- 3 files changed, 18 insertions(+), 21 deletions(-) diff --git a/infra/flake-part.nix b/infra/flake-part.nix index 0636c692..f90bd2ff 100644 --- a/infra/flake-part.nix +++ b/infra/flake-part.nix @@ -141,22 +141,20 @@ in ## - Each normal machine gets a deployment. ## - We add a “default” deployment with all normal machines. ## - We add a “test” deployment with all test machines. - nixops4Deployments = - builtins.trace (builtins.attrNames inputs) genAttrs machines makeDeployment' - // { - default = makeDeployment machines; - test = makeTestDeployment ( - fromJSON ( - let - env = builtins.getEnv "DEPLOYMENT"; - in - if env != "" then - env - else - builtins.trace "env var DEPLOYMENT not set, falling back to ./test-machines/configuration.json!" (readFile ./test-machines/configuration.json) - ) - ); - }; + nixops4Deployments = genAttrs machines makeDeployment' // { + default = makeDeployment machines; + test = makeTestDeployment ( + fromJSON ( + let + env = builtins.getEnv "DEPLOYMENT"; + in + if env != "" then + env + else + builtins.trace "env var DEPLOYMENT not set, falling back to ./test-machines/configuration.json!" (readFile ./test-machines/configuration.json) + ) + ); + }; flake.nixosConfigurations = genAttrs machines (makeConfiguration false) // genAttrs testMachines (makeConfiguration true); diff --git a/infra/machines/fedi201/default.nix b/infra/machines/fedi201/default.nix index 28397a84..9558de9e 100644 --- a/infra/machines/fedi201/default.nix +++ b/infra/machines/fedi201/default.nix @@ -4,7 +4,6 @@ pkgs, ... }: -# builtins.trace args.pkgs { fediversityVm = { vmId = 201; diff --git a/infra/machines/fedi201/fedipanel.nix b/infra/machines/fedi201/fedipanel.nix index 154bd6ea..64e42ca0 100644 --- a/infra/machines/fedi201/fedipanel.nix +++ b/infra/machines/fedi201/fedipanel.nix @@ -1,7 +1,7 @@ { inputs, config, - # pkgs, + pkgs, ... }: let @@ -19,7 +19,7 @@ in }; environment.systemPackages = [ - inputs + inputs.self.outPath panel ]; @@ -45,7 +45,7 @@ in }; }; systemd.services.${name}.environment = { - REPO_DIR = inputs; - # NIX_DIR = pkgs.nix; + REPO_DIR = inputs.self.outPath; + NIX_DIR = pkgs.nix; }; } From fbd1f2f57685d5edfa483ae6733025b579bca0b8 Mon Sep 17 00:00:00 2001 From: Kiara Grouwstra <kiara@procolix.eu> Date: Thu, 13 Mar 2025 13:50:49 +0100 Subject: [PATCH 11/18] move from documenting to automating configurable-impure-env --- panel/README.md | 5 ----- panel/src/panel/views.py | 15 +++++++++++++-- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/panel/README.md b/panel/README.md index cc01c82b..5dcab93c 100644 --- a/panel/README.md +++ b/panel/README.md @@ -4,11 +4,6 @@ The Fediversity Panel is a web service for managing Fediversity deployments with ## Development -- In your [nix.conf](https://nix.dev/manual/nix/latest/command-ref/conf-file) (Nix) / `nix.settings` (NixOS), -to your [`experimental-features`](https://nix.dev/manual/nix/latest/command-ref/conf-file#conf-experimental-features) -add [`configurable-impure-env`](https://nix.dev/manual/nix/latest/development/experimental-features#xp-feature-configurable-impure-env). -Note that this features is only available in Nix, not in Lix. - - To obtain all tools related to this project, enter the development environment with `nix-shell`. If you want to do that automatically on entering this directory: diff --git a/panel/src/panel/views.py b/panel/src/panel/views.py index cf2e232b..4077ebbe 100644 --- a/panel/src/panel/views.py +++ b/panel/src/panel/views.py @@ -56,8 +56,19 @@ class ConfigurationForm(LoginRequiredMixin, FormView): } print(f"env: {env}") print(f"Path: {os.getcwd()}/..") - subprocess.run(["nix", "develop", "--command", "nixops4", "--show-trace", - "--verbose", "apply", "test"], cwd=os.getenv("REPO_DIR") or f"{os.getcwd()}/..", env=env) + cmd = [ + "nix", + "develop", + "--extra-experimental-features", + "configurable-impure-env", + "--command", + "nixops4", + "--show-trace", + "--verbose", + "apply", + "test", + ] + subprocess.run(cmd, cwd=os.getenv("REPO_DIR") or f"{os.getcwd()}/..", env=env) return obj # TODO(@fricklerhandwerk): From 0bd65f1ed5b7be4092a608b72d62c8efd2a051d2 Mon Sep 17 00:00:00 2001 From: Kiara Grouwstra <kiara@procolix.eu> Date: Thu, 13 Mar 2025 16:30:37 +0100 Subject: [PATCH 12/18] add openssh to devshell, as seemingly needed to trigger nixops4 by flake in django --- flake.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/flake.nix b/flake.nix index ca7259a5..e633ad9a 100644 --- a/flake.nix +++ b/flake.nix @@ -61,6 +61,7 @@ (inputs'.nixops4.packages.default.overrideAttrs { impureEnvVars = [ "DEPLOYMENT" ]; }) + pkgs.openssh pkgs.httpie pkgs.jq ]; From 8fbe59af55e1f19c4e1a7b2cbba58024bd2d359f Mon Sep 17 00:00:00 2001 From: Kiara Grouwstra <kiara@procolix.eu> Date: Mon, 17 Mar 2025 13:24:22 +0100 Subject: [PATCH 13/18] default form to .net as .eu subdomains are used for live services --- panel/src/panel/configuration/forms.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/panel/src/panel/configuration/forms.py b/panel/src/panel/configuration/forms.py index 73216169..13bc6974 100644 --- a/panel/src/panel/configuration/forms.py +++ b/panel/src/panel/configuration/forms.py @@ -43,7 +43,7 @@ class Configuration(BaseModel): NET = "fediversity.net" domain: Domain = Field( - default=Domain.EU, + default=Domain.NET, description="DNS domain where to expose services" ) From 6275e8b2dc1e7dd4091e9f2d1bb58a9f2acab09d Mon Sep 17 00:00:00 2001 From: Kiara Grouwstra <kiara@procolix.eu> Date: Mon, 17 Mar 2025 13:50:55 +0100 Subject: [PATCH 14/18] pass in dummy initialUser to trigger orchestration from the panel --- panel/src/panel/views.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/panel/src/panel/views.py b/panel/src/panel/views.py index 4077ebbe..a43ddff2 100644 --- a/panel/src/panel/views.py +++ b/panel/src/panel/views.py @@ -1,5 +1,6 @@ from enum import Enum import os +import json from django.urls import reverse_lazy import os @@ -50,8 +51,17 @@ class ConfigurationForm(LoginRequiredMixin, FormView): print("DEPLOYING:") print(os.getenv("REPO_DIR")) print(os.getenv("NIX_DIR")) + submission = obj.parsed_value.model_dump_json() + deployment = json.dumps(json.loads(submission) | { + "initialUser": { + "displayName": "Testy McTestface", + "username": "test", + "password": "testtest", + "email": "test@test.com", + }, + }) env = { - "DEPLOYMENT": obj.parsed_value.model_dump_json(), + "DEPLOYMENT": deployment, "PATH": f"{os.getenv("NIX_DIR")}/bin/", } print(f"env: {env}") From e3a7cdde96aa492979866135495e1f3d55ae8f7f Mon Sep 17 00:00:00 2001 From: Kiara Grouwstra <kiara@procolix.eu> Date: Mon, 17 Mar 2025 14:10:25 +0100 Subject: [PATCH 15/18] comment fediversity.eu option as its subdomains named after our services are used for production instances https://git.fediversity.eu/Fediversity/Fediversity/src/commit/08d109cc826c2979af104af0919c75143bd79616/services/fediversity/sharedOptions.nix#L44 --- panel/src/panel/configuration/forms.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/panel/src/panel/configuration/forms.py b/panel/src/panel/configuration/forms.py index 13bc6974..c4adb73b 100644 --- a/panel/src/panel/configuration/forms.py +++ b/panel/src/panel/configuration/forms.py @@ -39,7 +39,7 @@ class Configuration(BaseModel): # XXX: hard-code available apex domains for now, # they will be prefixed by the user name class Domain(Enum): - EU = "fediversity.eu" + # EU = "fediversity.eu" NET = "fediversity.net" domain: Domain = Field( From 3e2c83435d447171cefc8f1539299775ec259c3e Mon Sep 17 00:00:00 2001 From: Kiara Grouwstra <kiara@procolix.eu> Date: Mon, 17 Mar 2025 14:23:29 +0100 Subject: [PATCH 16/18] import the regular way, fixing `error: attribute 'age' missing` --- infra/machines/fedi201/default.nix | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/infra/machines/fedi201/default.nix b/infra/machines/fedi201/default.nix index 9558de9e..2f8978d7 100644 --- a/infra/machines/fedi201/default.nix +++ b/infra/machines/fedi201/default.nix @@ -1,9 +1,3 @@ -{ - inputs, - config, - pkgs, - ... -}: { fediversityVm = { vmId = 201; @@ -21,10 +15,9 @@ }; }; - # nixos.module = { - # imports = [ - # ./fedipanel.nix - # ]; - # }; - nixos.module = import ./fedipanel.nix { inherit inputs config pkgs; }; + nixos.module = { + imports = [ + ./fedipanel.nix + ]; + }; } From 77cbc752a878bae3ea6884d3239d915044f4fb23 Mon Sep 17 00:00:00 2001 From: Kiara Grouwstra <kiara@procolix.eu> Date: Tue, 18 Mar 2025 11:38:24 +0100 Subject: [PATCH 17/18] remove inputs parameter from fedipanel.nix makes `nixops4 apply` go thru, tho the service still fails on `No module named 'django_pydantic_field'` --- infra/machines/fedi201/fedipanel.nix | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/infra/machines/fedi201/fedipanel.nix b/infra/machines/fedi201/fedipanel.nix index 64e42ca0..b64e926b 100644 --- a/infra/machines/fedi201/fedipanel.nix +++ b/infra/machines/fedi201/fedipanel.nix @@ -1,5 +1,5 @@ { - inputs, + # inputs, config, pkgs, ... @@ -19,7 +19,8 @@ in }; environment.systemPackages = [ - inputs.self.outPath + # inputs.self.outPath + # ../../.. panel ]; @@ -45,7 +46,8 @@ in }; }; systemd.services.${name}.environment = { - REPO_DIR = inputs.self.outPath; + # REPO_DIR = inputs.self.outPath; + REPO_DIR = ../../..; NIX_DIR = pkgs.nix; }; } From b409fd7719be8f538e167c8a4ee5d38784a0ebcf Mon Sep 17 00:00:00 2001 From: Kiara Grouwstra <kiara@procolix.eu> Date: Tue, 18 Mar 2025 14:46:22 +0100 Subject: [PATCH 18/18] move STATIC_ROOT, solves error `ModuleNotFoundError` on missing `django_pydantic_field` --- infra/machines/fedi201/fedipanel.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/infra/machines/fedi201/fedipanel.nix b/infra/machines/fedi201/fedipanel.nix index b64e926b..14a74a16 100644 --- a/infra/machines/fedi201/fedipanel.nix +++ b/infra/machines/fedi201/fedipanel.nix @@ -42,10 +42,10 @@ in settings = { DATABASE_URL = "sqlite:///var/lib/${name}/db.sqlite3"; CREDENTIALS_DIRECTORY = "/var/lib/${name}/.credentials"; - STATIC_ROOT = "/var/lib/${name}/static"; }; }; systemd.services.${name}.environment = { + STATIC_ROOT = "/var/lib/${name}/static"; # REPO_DIR = inputs.self.outPath; REPO_DIR = ../../..; NIX_DIR = pkgs.nix;