mirror of
https://github.com/Noratrieb/vps.git
synced 2026-01-14 16:55:00 +01:00
improve the backup situation
This commit is contained in:
parent
b8a6a9aeac
commit
56cf4e9212
35 changed files with 159 additions and 57 deletions
|
|
@ -39,12 +39,10 @@ in
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
services.custom-backup.jobs = [
|
services.custom-backup-restic.jobs = [{
|
||||||
{
|
app = "does-it-build";
|
||||||
app = "does-it-build";
|
path = "/var/lib/does-it-build/db.sqlite";
|
||||||
file = "/var/lib/does-it-build/db.sqlite";
|
}];
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
users.users.does-it-build = {
|
users.users.does-it-build = {
|
||||||
isSystemUser = true;
|
isSystemUser = true;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
{ config, ... }: {
|
{ config, lib, pkgs, ... }: {
|
||||||
age.secrets.forgejo_s3_key_secret.file = ../../secrets/forgejo_s3_key_secret.age;
|
age.secrets.forgejo_s3_key_secret.file = ../../secrets/forgejo_s3_key_secret.age;
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -51,8 +51,23 @@
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
services.custom-backup.jobs = [{
|
services.custom-backup-restic.jobs = [{
|
||||||
app = "forgejo";
|
app = "forgejo";
|
||||||
file = "/var/lib/forgejo/data/forgejo.db";
|
# this is a mess. do not question it. it is a beautiful mess.
|
||||||
|
dynamicFilesFrom = "${lib.getExe pkgs.sudo} --user=forgejo ${lib.getExe (pkgs.writeShellApplication {
|
||||||
|
name = "backup-forgejo.sh";
|
||||||
|
runtimeInputs = [ pkgs.unzip ];
|
||||||
|
text = ''
|
||||||
|
rm -rf /tmp/forgejo-backup
|
||||||
|
mkdir -p /tmp/forgejo-backup
|
||||||
|
{
|
||||||
|
cd /tmp/forgejo-backup
|
||||||
|
${lib.getExe config.services.forgejo.package} dump -c ${config.services.forgejo.customDir}/conf/app.ini
|
||||||
|
unzip forgejo-dump-* >/dev/null
|
||||||
|
rm forgejo-dump-*
|
||||||
|
} >&2
|
||||||
|
echo /tmp/forgejo-backup
|
||||||
|
'';
|
||||||
|
})}";
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,10 +25,10 @@ in
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
services.custom-backup.jobs = [
|
services.custom-backup-restic.jobs = [
|
||||||
{
|
{
|
||||||
app = "killua";
|
app = "killua";
|
||||||
file = "${dataDir}/trivia_questions.json";
|
path = dataDir;
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -178,6 +178,7 @@
|
||||||
./modules/podman
|
./modules/podman
|
||||||
./modules/registry
|
./modules/registry
|
||||||
./modules/backup
|
./modules/backup
|
||||||
|
./modules/restic
|
||||||
|
|
||||||
# apps
|
# apps
|
||||||
./apps/website
|
./apps/website
|
||||||
|
|
@ -227,6 +228,7 @@
|
||||||
./modules/wg-mesh
|
./modules/wg-mesh
|
||||||
./modules/garage
|
./modules/garage
|
||||||
./modules/backup
|
./modules/backup
|
||||||
|
./modules/restic
|
||||||
|
|
||||||
# apps
|
# apps
|
||||||
./apps/website
|
./apps/website
|
||||||
|
|
|
||||||
74
nix/modules/restic/default.nix
Normal file
74
nix/modules/restic/default.nix
Normal file
|
|
@ -0,0 +1,74 @@
|
||||||
|
{ config, lib, ... }: with lib;
|
||||||
|
let
|
||||||
|
jobOptions = { ... }: {
|
||||||
|
options = {
|
||||||
|
app = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
description = "The app name, used as the directory in the bucket";
|
||||||
|
};
|
||||||
|
environmentFile = mkOption {
|
||||||
|
type = types.nullOr types.path;
|
||||||
|
default = null;
|
||||||
|
};
|
||||||
|
path = mkOption {
|
||||||
|
type = types.nullOr types.str;
|
||||||
|
default = null;
|
||||||
|
};
|
||||||
|
dynamicFilesFrom = mkOption {
|
||||||
|
type = types.nullOr types.str;
|
||||||
|
default = null;
|
||||||
|
};
|
||||||
|
pgDump = mkOption {
|
||||||
|
type = types.nullOr (types.submodule ({ ... }: {
|
||||||
|
options = {
|
||||||
|
containerName = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
};
|
||||||
|
dbName = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
};
|
||||||
|
userName = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}));
|
||||||
|
default = null;
|
||||||
|
};
|
||||||
|
#mongo_dump = { };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.services.custom-backup-restic = {
|
||||||
|
jobs = mkOption {
|
||||||
|
default = [ ];
|
||||||
|
type = types.listOf (types.submodule jobOptions);
|
||||||
|
description = "Backup jobs to execute";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = {
|
||||||
|
age.secrets.restic_backup.file = ../../secrets/restic_backup.age;
|
||||||
|
age.secrets.generic_backup_password.file = ../../secrets/generic_backup_password.age;
|
||||||
|
|
||||||
|
services.restic.backups =
|
||||||
|
builtins.listToAttrs (map
|
||||||
|
(job: {
|
||||||
|
name = job.app;
|
||||||
|
value = {
|
||||||
|
paths = if job.path != null then [ job.path ] else null;
|
||||||
|
dynamicFilesFrom = job.dynamicFilesFrom;
|
||||||
|
initialize = true;
|
||||||
|
timerConfig = {
|
||||||
|
OnCalendar = "00:00";
|
||||||
|
RandomizedDelaySec = "5h";
|
||||||
|
};
|
||||||
|
passwordFile = config.age.secrets.generic_backup_password.path;
|
||||||
|
repository = "s3:http://localhost:3900/backups-restic/${job.app}";
|
||||||
|
environmentFile = config.age.secrets.restic_backup.path;
|
||||||
|
};
|
||||||
|
})
|
||||||
|
config.services.custom-backup-restic.jobs);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
Binary file not shown.
Binary file not shown.
|
|
@ -1,5 +1,5 @@
|
||||||
age-encryption.org/v1
|
age-encryption.org/v1
|
||||||
-> ssh-ed25519 qM6TYg 8JUZfDdX9AEAdOITGWTvE7DRH7VPUqsM9T7u7AhExlQ
|
-> ssh-ed25519 qM6TYg kxQujT+O6ZGlzTONdS/18DUVoxNapwtxitQo8GKr2hc
|
||||||
UJhh3gVlfXc6ij/DFdd3a4I2QfZu8mZ0CrLaotxQ+Ck
|
b7KjCjuvhmWcqNB6BvNruL17Ww6yWkVKjjm/MGd+jlE
|
||||||
--- eUV5GMuqhgxWHxZZ5Ee3QobSg42A3ja8h1nuxAeWt1Y
|
--- q3EzroLr8b0T2gKQ4xUR67YOLSwFP1V8UxAnKY0PP24
|
||||||
DóѬvúZË_ò<5F>%ŠðÅC ŠFþ._é:ñâ§R®™»1Uj²«ší€O«PÇ+ƒ}
|
゚l貊0嬌1スCXq<58>謎{T姻tg傅リ゚ュヘ<EFBDAD>ロ捕詑<E68D95>ヲ<EFBFBD>s5<13>hxk-
|
||||||
|
|
@ -1,8 +1,5 @@
|
||||||
age-encryption.org/v1
|
age-encryption.org/v1
|
||||||
-> ssh-ed25519 qM6TYg UP4wmNgpJ9JErCdgk4oCAjwVw8w8MOE9IRdZfDADYgQ
|
-> ssh-ed25519 qM6TYg yxVVZ7LOgN9NiKsl1+dN7Rp6Rsf0zlqb25Y6w43styk
|
||||||
xXd++OFcjJvkyYzow0WAVy0n2AV/0MZUXy+MYbIwZxo
|
gQ5g7TL8+lyGp0SxdcoRg0nTpu1w6WbZZK0ERyqRpkc
|
||||||
--- 6aQIiK6E6tp6wXkaRdJcMfVYHh5zFzSmL9r2iU60wEo
|
--- 5uKpMbkW4zZ035mNXCuty+64IZ360gly/ezxnwtRX/0
|
||||||
¥°Sps}z¢ç
|
šË<EFBFBD>ô±ëSϸ>q!ŁźěOß·żźŤ”ÉT››CU˙ż¸ŁŇşž<C59F>Ď[ń*󅬟«’\wźÝ‹tcÇ×Őíg?
|B±ŘĹë;’»"*îd<C3AE>Wţ<57>ţÔvŔ/vĚnqe
|
||||||
½Ò
|
|
||||||
ûœØÊÞ@\Hž_)úŠ”…£äUÊûÛ½åœ<C3A5>*ôâ
|
|
||||||
¾Jœ48¡i]š¨D¼èÓð+_…uÉù‹Ð,Ζ2‰m³âj(˜…¶’.ÓÙ¯lA
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
age-encryption.org/v1
|
age-encryption.org/v1
|
||||||
-> ssh-ed25519 qM6TYg P1fCQKmzsmKh0JnB185cO8KhfJ1Nyf9c4Ld90TdMg1w
|
-> ssh-ed25519 qM6TYg L6XQVJyw/T2kwH2iOa3dAxwxlAInVTKXek5QHUKsU3g
|
||||||
quzrkpAmOStHDT1CUwE7hMBf5NyoGZ/tF0vUatVGrl8
|
Mm8VXH3CITbrJTqBcjdMHGm1k7Kztd4irHqWnF0yKWM
|
||||||
-> ssh-ed25519 91VHug C6sFv6lpxgOQNnABrtZEwv82n71wzKo67dQ4hE0LaW0
|
-> ssh-ed25519 91VHug 2PoHH6c5lVj6hfTH6+2NLzJcpXh20LgYgUHYrpY9Wg4
|
||||||
dkHAjqWF201gRr9DivqUfycT3/lkrhDJajUnxVBaws4
|
iSaKgUoh0eSjeoiZ7mggn7LWV9C9xsM2foZrpJZY/ok
|
||||||
-> ssh-ed25519 XzACZQ 7OpgE7ZvoFOd380AkrS4wZZQtpiXwKG9xq+w5EzzxD0
|
-> ssh-ed25519 XzACZQ xyYG90gHM9XHAxIv2cFU/WvZsdLo6prAPQgRKADP0UY
|
||||||
w4aGa7AUwTvcl6DEfwJhFp4uOD1gyQG+MZkgUCHN5KA
|
XdiJz1Zmh3S+IvaOCZBqrF8DSWBrrqePjy+ZiEwuaSA
|
||||||
-> ssh-ed25519 51bcvA pYE+ZDrXfjSf0cKBZwo0OZ4BXQvTZhDll9/fn11Mj3I
|
-> ssh-ed25519 51bcvA IYyt435x3NPiTKDKCVb8dIK5naOSyU/Wh7dOLQ6SRAM
|
||||||
l/2Z0lN2irj216+5EEIDvRd2sGWFCWWnqOXqGUtRR1w
|
M0s39vyjDY24Mlb16UHy9lFEseaJxzZhtCvszKxwVSA
|
||||||
-> ssh-ed25519 vT7ExA 9WGSmvdL9I0Hv6aPPQgUSEXmUBfJfv6Zbi3ywG2BBTQ
|
-> ssh-ed25519 vT7ExA ZBvUjCU8vYFddKgNfnuROuiDnDXhitG6eR6ek4+1R1E
|
||||||
qTsDY/NN/RVJcznCjoGC0ABYhWaorzEBB206X214HRo
|
fiyuqamkakZ4t1MosIUqZaR0WEh7XVAwJiwH8lz3bsc
|
||||||
--- yUwt0ca0wolODUhl1JwYyiF4PoLzd7N0KkEef9de4YQ
|
--- zvHNHd6bOMd0f3eIrl1qzyRh6zUe7G8mdrraYGtrnXU
|
||||||
iš@>jĽP<C4BD>N+<2B>s6Ú‰’€VČ+8eL‹Ě"˙Őł,WŁéŢ1‡ů©”Š~é(“71‚ĺNwĽ2UŚŔ1u<31>©ŃOÝ<4F>8c›‹÷I<C3B7>§am ¤c•çČ˙_9~8ĺ€IĹ€Ž<E282AC>® ˙Ă–~.Đš(¶ŹTŃÖ…Rľq…Îď<X…#wĄĎő!?A}
|
¿Ÿ%iFr Ñ™Ù`|)Ñ+é¢ÏŽúÜ<C3BA>ÿšS—”®ŽGÎNP²ß>ƒ?E{Ö¦<C396>mda‡dä<64>j`Ôˆ¾îþVÙü uÅn¢§ÅZ¥Ö»X±ÂïUæ—½}ú¾>Ðj_´Dü_; 5ŠOpaò;
|
||||||
KT|ޤĆMečç‘ý±¨DMëš˙Îjó~ëV 9«´íCo?tő]©›ĘĚ`€IęWK
|
Ÿ¾Þ~4bðwZ'7¬µ0æ^Œ2Žã+wZ0j;<3B>4ÕyTdp·•1'9Ù ²7Zësbøó¿ß.JÁ*(§¦y”Wö
_‡P¡‹g`S^Gäàrƒ
|
||||||
14
nix/secrets/generic_backup_password.age
Normal file
14
nix/secrets/generic_backup_password.age
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
age-encryption.org/v1
|
||||||
|
-> ssh-ed25519 qM6TYg IBVFRlOVLHcuS6xa7UVGA1z9NTBtNwGbt94c/yTB8wE
|
||||||
|
T+VtsTngND9kAd6DAtksXN4xYs+E8JZSxDeOm+G23tc
|
||||||
|
-> ssh-ed25519 91VHug nUkRwHgpn2i56NNY0VAuG+r3CX1rjt1M0ZVKj+ijwGo
|
||||||
|
ea8Ry6JIJlPOObY+v2Q5MkdcZqCeDLAOxC583WY38Hg
|
||||||
|
-> ssh-ed25519 XzACZQ 7f+8YcecMvwnOgwxjRMUUUm9Sp4cyKpIZWWMDrrCtzg
|
||||||
|
Bqhd2kpuTg3Xchme5wHfg4zkuikeM4H9GdOZVUv+HZk
|
||||||
|
-> ssh-ed25519 51bcvA DUk4CsGXhdj4uIqzYpoGmtHs5dnjIBUb0c9zj1DEum4
|
||||||
|
hGe3j5Ycn/WVV5wgg+vZuh2KhnamHACkHrDWcVgkSjo
|
||||||
|
-> ssh-ed25519 vT7ExA Zf67OkbMvOpgABZDuXw3U94KqX32VG8nnjo3Xmkbih0
|
||||||
|
5K5fnBxkQDaYwuMPhyNU5ZrZLjkgknG7dzMzyuANMuU
|
||||||
|
--- Jon4j4/xeZqS/6KsWszsVOoVOgJgsPEKxmtC7PcocCA
|
||||||
|
Ú솳—µ’~Š…
|
||||||
|
¢íNŒ+jKþ߬Ÿ/á]Ó !ä‚¶Œ¢.7\«–„k~<÷ñfÃCÖT.ªOŸêÅ¥*aÁ
•Û
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
age-encryption.org/v1
|
age-encryption.org/v1
|
||||||
-> ssh-ed25519 XzACZQ lWHvBQNaeM4hMI6u36HvYCqLS3G/ScLbwOThzdGSzSA
|
-> ssh-ed25519 XzACZQ OeTS5wU4ac+Qh7s1PXbdFH3LDlRW1LV+qFtoVGI47XQ
|
||||||
PGPpaoY0V84v6CRutJk+K6M9BM7XaRwp2awPsB/Db6k
|
JsixYPLzpnF45ODQH7nuVowXzwbNQi8lWx1Bp2YFVWc
|
||||||
--- hlo1/uWQVHBmhfMRLPiA+9H0TGKYF/+gxUzzdAM4rYU
|
--- MEG4bfGwoFRm9HizYdqtK7KApYhYH+QjAIEp7CpLznA
|
||||||
ä+@96YĘđďą‹~ť I—Ř]OčhMş6T{3€XˇČĚý(q‘ZśËVR]CLp®O-ĂÇÖ>`/-Ł
÷Üń.2ˇĚŮYMÓjăĺťŮýyÝUȰî^GŚn¤ŮçS
|
CŒ¢µÍ/wC
|
||||||
|
F‘<EFBFBD>zÙ?ŸMÀõókÙr‰ Žx£N¸©'NTzùà¼WŽÈb¹åº{›ÞóÕéAj3X6m¹Ý²²J@í¼OI—{u<15>ßý”Ï?¹ A,CÃdûý^
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1,5 +1,6 @@
|
||||||
age-encryption.org/v1
|
age-encryption.org/v1
|
||||||
-> ssh-ed25519 qM6TYg qhB01I5HcTnTHTJTEYLEtJi416tlC1EMD4yjoBIK7gw
|
-> ssh-ed25519 qM6TYg amvNJk2G0JJHgGOwAWCtYIJgylqBAYDSXTKNYKwb4mo
|
||||||
h8CcWgY/GslHI1FbXi5k5QXFs7YbM7wr7JWtez6ct84
|
aBXr7jN0/VUDTxCGvn+obz3JIU0boKcm4BbwFAidm1o
|
||||||
--- oLyc6wK3Bgl/zxjpZJYWoGAxWnXx4LN/+iT+r8RPOco
|
--- B6s8naj3JiQdjBDdwzY+PqW01QZFgKMpKSOVXHDfbHw
|
||||||
\,Ý µÄ˜f‡¬#
`¾‡ünSÊK×ÕÌPVv”Vʵ<÷ œÙ-:Ÿçxg™´“屄þM(Yòiu€¹Šcìþl^‹aí°pਬ%^ô¸÷+"‘w»ªV‚<56>
|
˛Tą1ôÄQđ˛qÎýŇ”Ś?)W“Ĺ<E2809C>‰ť€˙ŘÚ<C598><C39A>‡4ę¬zŃc"CĎ+ĹŚHÓmQ)ö·ËÔ‹ˇ#Ś1HăßýÂnc«¬^ĆaÜűGş›±.™µ'Â
|
||||||
|
$ bc´Ě
|
||||||
Binary file not shown.
BIN
nix/secrets/restic_backup.age
Normal file
BIN
nix/secrets/restic_backup.age
Normal file
Binary file not shown.
Binary file not shown.
|
|
@ -26,6 +26,8 @@ in
|
||||||
"forgejo_s3_key_secret.age".publicKeys = [ vps1 ];
|
"forgejo_s3_key_secret.age".publicKeys = [ vps1 ];
|
||||||
"upload_files_s3_secret.age".publicKeys = [ vps1 ];
|
"upload_files_s3_secret.age".publicKeys = [ vps1 ];
|
||||||
"pyroscope_s3_secret.age".publicKeys = [ vps3 ];
|
"pyroscope_s3_secret.age".publicKeys = [ vps3 ];
|
||||||
|
"restic_backup.age".publicKeys = [ vps1 vps2 vps3 vps4 vps5 ];
|
||||||
|
"generic_backup_password.age".publicKeys = [ vps1 vps2 vps3 vps4 vps5 ];
|
||||||
"wg_private_dns1.age".publicKeys = [ dns1 ];
|
"wg_private_dns1.age".publicKeys = [ dns1 ];
|
||||||
"wg_private_dns2.age".publicKeys = [ dns2 ];
|
"wg_private_dns2.age".publicKeys = [ dns2 ];
|
||||||
"wg_private_vps1.age".publicKeys = [ vps1 ];
|
"wg_private_vps1.age".publicKeys = [ vps1 ];
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -1,6 +1,5 @@
|
||||||
age-encryption.org/v1
|
age-encryption.org/v1
|
||||||
-> ssh-ed25519 LZU5Eg PttdTzbbxLbUw+V+mCZjRREsWuIHhGeVvIKkPCAkvQQ
|
-> ssh-ed25519 LZU5Eg o+MPatbYPM3sZq0MCqvvxlvKMQwlbajHURPQ+0g0qm8
|
||||||
3adTE4nRuPaMYo3wslgO2kND5dVYv5NOKYpi129kRrE
|
UUurAYkPWXCaow746EV4dAQ+qTJnHIehcorUmanBc+o
|
||||||
--- eKBS0RAp1BiY55dJ2vdJZdkJIA6wk/OA+JA2aTvLAFE
|
--- BV+bxd0OIc3J4uT39al2odyn8ScDpq58SiwnW5pvRj4
|
||||||
†F‡]Y@JÈÞU”M„“—ȯø4æ9£1®÷ 4<C2A0>§cböÏ““B9»^š.¯Ñ\™ù~È’èg‚kS’Gz÷Þ
|
òçT7W
í|õfJÞÜ%"cõôäqÁ{TãP~f<>v,;Ñ:å…<C3A5>¾êŒ-ÓÏšÛ4þ€a† æ-¯uÌ\Lƒ_-¼VHâøûš³½%
|
||||||
ìÌôµ
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1,6 +1,5 @@
|
||||||
age-encryption.org/v1
|
age-encryption.org/v1
|
||||||
-> ssh-ed25519 XzACZQ 4f3Sm/Xpuu+lgnR+C5sLxrsADC4KjAwRCvb91zrPlg4
|
-> ssh-ed25519 XzACZQ lm64+fQEWa9hF98cV/x1U3Mz+6zuM23dAV3XkwE7iz4
|
||||||
Iok5RHD15fZmRWIay0nHzy1rtZjgt3Pbq23z6n6Zr78
|
7Rgqd13DThp/JLryCe5xTdXwDujaTj4viR2CBTdXYLs
|
||||||
--- 4pu7oE7I2dV3Gd3r+cbezJWZULNS4n98B//0D+Vj55U
|
--- pwebssA2O2VjzPFRAQ0/65+qiiF/MijCIIXexwH5mgk
|
||||||
Ýâćß%3<>'=Ú¨@x^-`ę[
|
\ ‹fóËæÅv×̤ä[§ýÚŸÆIŒ´†[—5á÷*×·90²'ý4Âôî+áV<C3A1>;L›‹~jÌÂà¦
‹úœ†;ÝÒSÁª2y·b
|
||||||
ÖŮJÚ_•;·WęLEʨ—@-ĆőS‡„ŢAyĘ›©Ś› eöuÚqÎŐzâLĄâÇřQ‚ß
|
|
||||||
Binary file not shown.
|
|
@ -1,5 +1,5 @@
|
||||||
age-encryption.org/v1
|
age-encryption.org/v1
|
||||||
-> ssh-ed25519 vT7ExA cGTbCRJ9dO5DMMYVZyMGswdyx6q114yInksFITtJR1U
|
-> ssh-ed25519 vT7ExA G9mqOZiAvq+ot4OUevoxvNPIkgWgS8KqMY76uGsxeGs
|
||||||
EmFSgbzljek+luv2MncANyEoCRlCxrQN1OOrn5ejf6U
|
AMEwoZoFc+axirDc5q+FM3e76IedkxblC3vVqUjmPL8
|
||||||
--- Sap30+9H/NG4GrkJTxjXUI0rxIugDMB5JIlh0PgSPhk
|
--- oXGSsFKfJRPvcU1X3zHN7M6vd0IxBpNowyh4sPesq3A
|
||||||
£–Xó@~ô¶<C3B4>îŽL¬_®äA²m3 ñýƒûÜXS)g‚rÇ<>ínwH<77>ñž%lƒ¦µ
J²’€ŸcDŸü¨´Ï£öÎ5ãPK«S¦‡
|
¢¡i3<><18>¥Ÿûôc—ÿòØMÄTN0—‰}r"Зs˜Œ§ö~þ<>OrP˜®ÃîFP`Q•˜¯<º%å:7ø3ç‚
|
||||||
Binary file not shown.
Binary file not shown.
BIN
secrets-git-crypt/generic_backup_password
Normal file
BIN
secrets-git-crypt/generic_backup_password
Normal file
Binary file not shown.
BIN
secrets-git-crypt/restic_backup
Normal file
BIN
secrets-git-crypt/restic_backup
Normal file
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue