sops miniserver, git, workstation

This commit is contained in:
Danilo Reyes 2024-06-16 16:31:31 -06:00
parent 8f14fc46ef
commit 4fc2c9fdf9
6 changed files with 43 additions and 22 deletions

View File

@ -3,9 +3,11 @@ keys:
- &devkey age1lufn6t35gs4wgevyr2gud4eec7lvkn7pgnnv4tja64ww3hef7gqq8fas37 - &devkey age1lufn6t35gs4wgevyr2gud4eec7lvkn7pgnnv4tja64ww3hef7gqq8fas37
- &hosts: - &hosts:
- &workstation age17jlsydpgl35qx5ahc3exu44jt8dfa63chymt6xqp9xx0r6dh347qpg55cz - &workstation age17jlsydpgl35qx5ahc3exu44jt8dfa63chymt6xqp9xx0r6dh347qpg55cz
- &miniserver age13w4elx3x6afrte2d82lak59mwr2k25wfz3hx79tny6sfdk66lqjq989dzl
creation_rules: creation_rules:
- path_regex: secrets/secrets.yaml$ - path_regex: secrets/secrets.yaml$
key_groups: key_groups:
- age: - age:
- *devkey - *devkey
- *workstation - *workstation
- *miniserver

View File

@ -94,7 +94,7 @@
}; };
documentation.enable = false; documentation.enable = false;
environment = { environment = {
systemPackages = with pkgs; [ wget ]; systemPackages = with pkgs; [ wget sops ];
variables = rec { variables = rec {
# PATH # PATH
XDG_CACHE_HOME = "\${HOME}/.cache"; XDG_CACHE_HOME = "\${HOME}/.cache";

View File

@ -45,8 +45,6 @@
ffmpeg4discord.enable = true; ffmpeg4discord.enable = true;
}; };
}; };
sops.secrets."private_keys/workstation".path =
"/home/jawz/.ssh/ed25519_workstation";
networking = { networking = {
hostName = "workstation"; hostName = "workstation";
firewall = let firewall = let

View File

@ -3,12 +3,16 @@
jawz-password.neededForUsers = true; jawz-password.neededForUsers = true;
"private_keys/age".path = "/home/jawz/.ssh/ed25519_age"; "private_keys/age".path = "/home/jawz/.ssh/ed25519_age";
"public_keys/age".path = "/home/jawz/.ssh/ed25519_age.pub"; "public_keys/age".path = "/home/jawz/.ssh/ed25519_age.pub";
# "private_keys/server".path = "/home/jawz/.ssh/ed25519_server"; "private_keys/${config.networking.hostName}" = {
# "public_keys/server".path = "/home/jawz/.ssh/ed25519_server.pub"; owner = config.users.users.jawz.name;
# "private_keys/miniserver".path = "/home/jawz/.ssh/ed25519_miniserver"; inherit (config.users.users.jawz) group;
# "public_keys/miniserver".path = "/home/jawz/.ssh/ed25519_miniserver.pub"; path = "/home/jawz/.ssh/ed25519_${config.networking.hostName}";
# "public_keys/galaxy" = { }; };
# "public_keys/deacero" = { }; "git_private_keys/${config.networking.hostName}" = {
owner = config.users.users.jawz.name;
inherit (config.users.users.jawz) group;
path = "/home/jawz/.ssh/ed25519_git";
};
}; };
users.users.jawz = { users.users.jawz = {
isNormalUser = true; isNormalUser = true;
@ -29,7 +33,7 @@
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB5GaQM4N+yGAByibOFQOBVMV/6TjOfaGIP+NunMiK76 gpodeacerocdreyes@100CDREYES" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB5GaQM4N+yGAByibOFQOBVMV/6TjOfaGIP+NunMiK76 gpodeacerocdreyes@100CDREYES"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMkpeIV9G26W2/e9PsjBx3sNwPGoicJ807ExRGh4KjhW jawz@server" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMkpeIV9G26W2/e9PsjBx3sNwPGoicJ807ExRGh4KjhW jawz@server"
(builtins.readFile ./secrets/ssh/ed25519_workstation.pub) (builtins.readFile ./secrets/ssh/ed25519_workstation.pub)
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILgKVjMLYdE0u+96Y2RjTh5Pf8f4n0h3oMUG6728YGHw jawz@miniserver" (builtins.readFile ./secrets/ssh/ed25519_miniserver.pub)
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINBEblxSDhWPEo33crSjooeUg4W02ruENxHLmmBqCuIo jawz@galaxy" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINBEblxSDhWPEo33crSjooeUg4W02ruENxHLmmBqCuIo jawz@galaxy"
]; ];
}; };

View File

@ -8,6 +8,13 @@ public_keys:
private_keys: private_keys:
age: ENC[AES256_GCM,data:0mWdTKWFvAuqt25+POw2eZMFLQNNyFhs4Lh9ZDL1X6KObrK4wDZa31n2Ugug684+jx2cqeWU/luRLz0zBUpbfbf/36cOuXjU/FX2wGpg+WZ8xwUNLSCXUnmufIwZqF4jwLEvU0HYTxMufH20KBqMZVZhWdvsiTL8fLqS5tOtph0+Yxrs7VpyQB7aSlkM4Mgc3IbtQ1CFcYe7BQNBekbR1EnB8qsoPFX/7qeLHoR941d6W11GbPSl0QdLX5UUEMdMbK8E4uMpOvVJUJzi58RcJnJJNc9lSWd7QJdxEgaSSqB28vS6PVC2vVcuL+Oq2/AO12BLIVBZPbcMkyG+EE8H/+TyEs+HoWYuuUB8yNCE87BxgOHoDDqT38wrtfIzeja00qF0/sQSP/w9uJWbnNNrOq6iPatK/+gbSLufzrgo0rw/Rdc02zegk4sLQEYkt7YB9gN5dQp8S21taX7y5tkLU1Mh8O08Pjonhu4tznH/yG06m/WFMB1ucP6YsHFXIze6fG4BG4df+um+qpNdTiykNcpNYwglXyP1kDWS,iv:/trMsiMCfwiV5Oh7xW4MJgCfiWZJkvU8h3KJcxXcABw=,tag:4kMb+DfRJAN5gcodhFCd4Q==,type:str] age: ENC[AES256_GCM,data:0mWdTKWFvAuqt25+POw2eZMFLQNNyFhs4Lh9ZDL1X6KObrK4wDZa31n2Ugug684+jx2cqeWU/luRLz0zBUpbfbf/36cOuXjU/FX2wGpg+WZ8xwUNLSCXUnmufIwZqF4jwLEvU0HYTxMufH20KBqMZVZhWdvsiTL8fLqS5tOtph0+Yxrs7VpyQB7aSlkM4Mgc3IbtQ1CFcYe7BQNBekbR1EnB8qsoPFX/7qeLHoR941d6W11GbPSl0QdLX5UUEMdMbK8E4uMpOvVJUJzi58RcJnJJNc9lSWd7QJdxEgaSSqB28vS6PVC2vVcuL+Oq2/AO12BLIVBZPbcMkyG+EE8H/+TyEs+HoWYuuUB8yNCE87BxgOHoDDqT38wrtfIzeja00qF0/sQSP/w9uJWbnNNrOq6iPatK/+gbSLufzrgo0rw/Rdc02zegk4sLQEYkt7YB9gN5dQp8S21taX7y5tkLU1Mh8O08Pjonhu4tznH/yG06m/WFMB1ucP6YsHFXIze6fG4BG4df+um+qpNdTiykNcpNYwglXyP1kDWS,iv:/trMsiMCfwiV5Oh7xW4MJgCfiWZJkvU8h3KJcxXcABw=,tag:4kMb+DfRJAN5gcodhFCd4Q==,type:str]
workstation: ENC[AES256_GCM,data:AHNvGeoYMzUJePOpXlHiaJ/OEpWmadIRvfND+0kipNpHlfsVWM/+mGEhoABIf98vpNlPanRrfDYgkpatEUrw5L28oj214SreGS0S7YJiO383LRqbl5NsnYPwxwY7UdPGH5dSkKWHAlO8JKbDasLaCDO8VyjdzIkXalyha4DM6LcZMGM8UH86keyNImMgwdTDLwJoWiQ0AamYcaMqlWLBxMLMkoB5ug0ynF1FIAX1loBv+Ajd8JLUhHDYwA5jwKlS+4EgkoTk21I/7GbZ9sBpsnWIyvnzMuf2fyB1jjQ7cOzHBRc5mEDecrKKI+IuIlAY4MnQh91uTv+APi2abelurvnwIhsx/KaJW77Qc0i/0G1ucKFMwXE03OSLvNW3K5PHkK0Z+M4G/uoEDwM/0M81jz3yutgWmrxTQ/TAjNbt2Zk6x0a6CnwCdHGdoXGByiE316LIKDKziY29stEiLNWVnptq1yerj2lU1R46sXmqzWzL6b+VbXkaubT9JPifCIXB9V5LyUhwfc4HhSbuz9d5DV529aJq3tZh3kdzjT/PEs3H+XM8jKAGuLZV0tS/q/CLonBlps5DfC2S9/PodakEZDwA3igbM5enpapGv7we7LA=,iv:J4ktWtFHK0XRkg7K88fJJu7/JaSTqip+nIF9HUtMNDc=,tag:jwvttM2bicGBIgX9TmDeXg==,type:str] workstation: ENC[AES256_GCM,data:AHNvGeoYMzUJePOpXlHiaJ/OEpWmadIRvfND+0kipNpHlfsVWM/+mGEhoABIf98vpNlPanRrfDYgkpatEUrw5L28oj214SreGS0S7YJiO383LRqbl5NsnYPwxwY7UdPGH5dSkKWHAlO8JKbDasLaCDO8VyjdzIkXalyha4DM6LcZMGM8UH86keyNImMgwdTDLwJoWiQ0AamYcaMqlWLBxMLMkoB5ug0ynF1FIAX1loBv+Ajd8JLUhHDYwA5jwKlS+4EgkoTk21I/7GbZ9sBpsnWIyvnzMuf2fyB1jjQ7cOzHBRc5mEDecrKKI+IuIlAY4MnQh91uTv+APi2abelurvnwIhsx/KaJW77Qc0i/0G1ucKFMwXE03OSLvNW3K5PHkK0Z+M4G/uoEDwM/0M81jz3yutgWmrxTQ/TAjNbt2Zk6x0a6CnwCdHGdoXGByiE316LIKDKziY29stEiLNWVnptq1yerj2lU1R46sXmqzWzL6b+VbXkaubT9JPifCIXB9V5LyUhwfc4HhSbuz9d5DV529aJq3tZh3kdzjT/PEs3H+XM8jKAGuLZV0tS/q/CLonBlps5DfC2S9/PodakEZDwA3igbM5enpapGv7we7LA=,iv:J4ktWtFHK0XRkg7K88fJJu7/JaSTqip+nIF9HUtMNDc=,tag:jwvttM2bicGBIgX9TmDeXg==,type:str]
miniserver: ENC[AES256_GCM,data:69JH6rT1c5JB50Q0KWQ5wKhzLZhENEFGrtJRObNMmjBSpHCfJmU7/lHoVme0V3j9IydQ+CEWHD19RMXHioC5MJb5s5XanUL8I1qAVsFXl32lr/cyUZYsLLEuH6jpGke8S4gyOTeHUSSUSW71J1pMSzF4Wbxuch3qJCQtnM9dX5XqNiGx1CG1ibRWDQnncFRWbIAxJlArT4Q8f4Q7GyZOIvBj3DzuzYIxWAXEhmpPpVTUvYJHsoMlJbcZ2Ba2cf6AjDZKK7+3NOPVhZ9XrQqwKQSn8dhlxUFxhNEtd2Hn+F2lbfuLZGVyimD6A9Mgah7MMjPHCRhKDTpvqBM8sZCIUNSnhgRY7BRLDHcGUFsmb2sMTrTZyG3bWUotgCg2PNOXDrc0cSE/DhF2irmle0IWzHNvGdtgdPY7StL1E508T8gkIM3XinimQCbFnTTldQTLsFfaO2Jd3YNJYTfMJeEJg27+V5Fc3psUyywOvotrk1m/v0/FCo1yZ3YITANFB+tvusu0wd8rrYJ+FCUQyRhQQBNK5XV8v/bmiDTi2tiZQa04oz0sMB/03PYzEpAWsDCtbMolF+0FE/ki9sdIJue1LOxGlzSU6Tl++oI2jkb22zk=,iv:776BGqzXkROueTqCZteWJnB9ojZCRU6+avIitKdDSR8=,tag:aDv3+Z+B0k7YJ04CTGWKxw==,type:str]
git_public_keys:
workstation: ENC[AES256_GCM,data:ITR7SHPslNn2CAGauw1UEicf1QhHlqq9brDhqeA67dsXQLDoHvAjVI+7qkeJ31c5OthGb/3TobeuwoY91k7F//4/4vZ/d3rmwugQUwdVrhMe8TxkmB5vXrWFLvVZEsGjPA==,iv:vTMMkRKOO5eTMXg0X9D2RbSOgJxHKSgKEqxNF6ZlqUs=,tag:HRMvjDa4nAWqG9xcJJTheA==,type:str]
miniserver: ENC[AES256_GCM,data:O8ye6YX6DhAXbjLAJHruApHjR9ruUefZ2kv2gGOdgIYJri58mh5D9eZKyKjDv7x8Z4rkIbUxeRikpcHKJZgC5qKBBmkZPdNXzc+t0vWElTQaPBDoHQ1u8sUNasg6/zBA,iv:tmbUDO/upPEJtHqUtjjsfgxnrkqS7lGRv4NhJwHv1Rw=,tag:Vcl7aiQUdABqO+npTQA9qw==,type:str]
git_private_keys:
workstation: ENC[AES256_GCM,data:qK3bP6aTsfx5HtvAVITahVMPIqIj0shfUtOq5b9cxoUAf0tEwN3fEpvZ6rj4qrsJzeu6CbrLa9kUxdkDac2WSba8hpi0Pr3rQRy4RVUgZwJ8t1Bscb4s7KeHuR8z8X0rgB9ZKzJJHjKQetKytJF07Qze5jkKlsogmzVCE8D5SdWvLvJ7z4hONXMlPK9HAGesvrUKD54okshhK4WbfmC5uZ03g9SEqc/QMTmgo4NVEmhfBIXbqSBch4zLWk95RGleHfIB68dO3hsEzAy+X63caZ0Vrx5l8YNEGXxm01ZI7RsjEQXYlQpM2siaOgwixVZvn5fr9Zs4fIK3EyVqCM2m31Mtn/u8QJr2bKqredWBNL5q7CqtEGb3JscXm13q/ttqfdPgYREuo2NTPN1dra+tmsVNcJK0KbJJKCoIy1CX7NV0FgmJnj21f9mzbOvGvHfaChLiLBj8at8IDHB78wWVLoiIMf4fIQa51aiyzCx86/1hu4Lpi4q56KLXabwt9vUynuDiGds4Rq33rmfOjNrEkxVNd1Mz1I2qnx08,iv:v8RzxevJBagr0an8o7sUuCuhtyWEAb8B6fyXxfegekI=,tag:kwx6BdejSJmPAqFPa8lEDg==,type:str]
miniserver: ENC[AES256_GCM,data:yXAHB0l2RzCrBqmIr0BSdiKw5e/lPOAp9u9ibdZqUvEcs5tCWFc7823bZ6hFpw+o0UcYojobVBRejUoPqAq34TGciB8RqHlbekvHfg7qXr7XKxYKMesBMPwmaSUsPTtPib2ahLlGGaw9giO+EV7g+g2k+UD1mIUu7LwwTVb96qSiG6ffzOz69EpOgp+v9b/5yww0Mz+Hg9boonhdAMwUbVBPKjwwIPald4MibjtAiL0/JYzw+NpNYwHIxL4oKcyqnM3f03e43fI3smi4Hta76rCTF45hn0TLklZbnuGWtwmP/U9oQJ/+Id8kpzR+U0GJysIKgGKBNeL4bNqsx6L/cknzTeeb1KB28sjGTTL5w16k2PGizwys+NELCZD9suuQLk0hGBlwouwslihwFxne1RjYrsWC9ODgM0Kiqxkvud30FBe9f/C/kKz+hBTLROkNBmm2pMbwIFTmrbdpNDOeySA4VtY4xrXTUfz02KbxNm7xAOY2A3Ux/TIbQ6oBSv8O+ChvI9H/tTJYhpJLO6/FA+sbzEbYkU0d4nbu,iv:Ar4lKLkrfnkueZKvOcajeJjmb8O8hSS0rw8c6xjgL68=,tag:ZEB44TnG98q8baCoUyICKg==,type:str]
jawz-password: ENC[AES256_GCM,data:jLChyJ7xysx3ceNoqS6sRzJ223te9RQFoUSupqSJTsuqcuUc/iR8rKswtFmbeKWBWrpYKEly/hdtlG4BPiYNjuwXB0FG+b34tQ==,iv:5RyglR1c5228FgiLWzdYXbSLk52OzcmYFrnTXL7ofSE=,tag:J1MDLWC1YMYCMwwoYBmhaQ==,type:str] jawz-password: ENC[AES256_GCM,data:jLChyJ7xysx3ceNoqS6sRzJ223te9RQFoUSupqSJTsuqcuUc/iR8rKswtFmbeKWBWrpYKEly/hdtlG4BPiYNjuwXB0FG+b34tQ==,iv:5RyglR1c5228FgiLWzdYXbSLk52OzcmYFrnTXL7ofSE=,tag:J1MDLWC1YMYCMwwoYBmhaQ==,type:str]
sops: sops:
kms: [] kms: []
@ -18,23 +25,32 @@ sops:
- recipient: age1lufn6t35gs4wgevyr2gud4eec7lvkn7pgnnv4tja64ww3hef7gqq8fas37 - recipient: age1lufn6t35gs4wgevyr2gud4eec7lvkn7pgnnv4tja64ww3hef7gqq8fas37
enc: | enc: |
-----BEGIN AGE ENCRYPTED FILE----- -----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBkOFN6bHNqczB4Tm81WXhU YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA4aUo3KzYrY01iaDEzNDdj
bG1mSW02ZUtjVlBjOUd2bUZtVm04Z2hSWHlFCnNnMmNhZ1dLd0dqbGZlU3pGN3dT azlpUnd2dHNGVFhEclQ0Qzh6Y3l1S0p2MVFNCnMwaWRLZ0VHRTVtUklkanpkQ2lQ
M3FraTRJNkZGLzJEbVo0VG8wR2RGdWMKLS0tIFBQNkFqSDBnUjQzTTljZ0hEMnpw NENEUVdXMjJ6eUk5MVJLM01Za3FXU3cKLS0tIFV1azlwc1p2bDhUVGR5VlN4TXpn
cldxNWJQSzM5LzIwTDR0djVlTGFOcDAK7nBGyn0pUvWV7LKEIHe2g/qKeiybKXFI R2RzSHN3cmNUS1lYbnJIQjcxMXpLdUUKmVqmIMyyQeHsA8A75pPxU5NHVGM3/Bys
vT1/Tdrs3xNfU+aJiULV5ZhuPil7dqvqK7C5MU8BojnmTkIv4OaCFQ== JnME2kNPZ7DOPtKfEWQ3uo+HyH5RNv4cWs1I6R3bvGsDSYHxLpyjAA==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
- recipient: age17jlsydpgl35qx5ahc3exu44jt8dfa63chymt6xqp9xx0r6dh347qpg55cz - recipient: age17jlsydpgl35qx5ahc3exu44jt8dfa63chymt6xqp9xx0r6dh347qpg55cz
enc: | enc: |
-----BEGIN AGE ENCRYPTED FILE----- -----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBsbnhNeDNpV2g5QWlkMitq YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBydEJTTnl2N3ZBMnR2QWFL
ekYyeHUwQll2VG5KdWF6Vm1RcVNiK2UweEQ4CmhteVJoM1A0aDNUTWZWZ0pXa2lQ YkZwQzVoNlNsaGF4V25hc3BualVpb3ZNd0NnCm5GcE1jN0ZGUWVDbHErZzlSYjJN
bHY3RkZvbEhFeFhoQlgxTlZnc2VJS00KLS0tIDR2RVUxMXpPSjhUSXB1MzRJU2o1 cVNhNDg4VWhEVDJyc0JGbHRhK29Cck0KLS0tIGcxcjc4YTNSUTJxbk9oa0QwYkNZ
NmJ1bytHaHVTMllpaGFPSXp6cTZ3RDQKJiLWu8UysNrYgelnmHmW6LFIciv4l5C0 ZmY0QTB4U2ZxVVUxaDNUQ09zT1UwaEEKmKdFb3nZ1jSDq8nQl/tR8dkM6rHFw/9U
4kJ3POqsoSd3B3Hw7QrHxKElCsgZDCPW7nIPp2EXXrdGc4dINDAf0A== ccOUSwZ0MTiX7R+CiY5L38xzUL0PrlR80GZ1UUf+AR0a1PE35F8ysw==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
lastmodified: "2024-06-16T20:53:25Z" - recipient: age13w4elx3x6afrte2d82lak59mwr2k25wfz3hx79tny6sfdk66lqjq989dzl
mac: ENC[AES256_GCM,data:lcftXZEgu311TaTt2zgGszQ68ka+dPQSJrGgmoCe3DCfzFQloN+OVHKRorqEaVmw0WrgFW090waQoPsrsc+zu0SwdoPMoDTa4XESFfZOGBCiOmwyePqe9utBdO0jjcbWp9MOwUebW47fK4snXRMs/cFziMQWokMeVAAm+bN5y+s=,iv:QP5AW/X4LnI1Jwm6pk344Uh7QPFCtAOLURqvrElFyTU=,tag:Tnx3s3GgeU3ZIIFT1cbsDA==,type:str] enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB1SnBCaU05VGEwSEJVNVZ3
bUxwd3M2NTVTWEZzdTNwNE8xQm12dzJON3djCnkwMDRFRk0yUWcxNUVuSmJ4M0FU
eVdmUjg1alh4MWtTNi9oekREbk9TbkUKLS0tIE1kRXN5QndNUUdJR0Exci95R2F2
ekZxL0IvYWJTbDNtWXVSOGc3QXVjaEkKGNyLUn5dyag4pvN06ekMziyTI3vUpx/j
4ZhNrvDgAY226p5kfka0NpPmNlsIcR+5gbIuHliGvcQ2W5WqghLDow==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2024-06-16T22:25:46Z"
mac: ENC[AES256_GCM,data:7UQ5e4cymchYLx5phNz7v6PtjQtvM//0QzYD0zcf+mMOH7Ct9ztEO0+InbFGze72mlcighrUIRafOsyDMJq0qoO1FELuG09cYobomi41l5ZrS4jK3Hd/IoijY1x5HH3Nu7y13yY0Xwe8bWOrayKIhO6O5QkQF5f9tqSC/SJwWfA=,iv:U3XClUOyvF0bSuJzIp8vhj8H14b3p8SkhAq6e1EShJE=,tag:4cmkjC9bFJNfvt7yzB8dZg==,type:str]
pgp: [] pgp: []
unencrypted_suffix: _unencrypted unencrypted_suffix: _unencrypted
version: 3.8.1 version: 3.8.1

View File

@ -0,0 +1 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILgKVjMLYdE0u+96Y2RjTh5Pf8f4n0h3oMUG6728YGHw jawz@miniserver