All about sops

This commit is contained in:
Joseph Hanson 2024-05-28 16:42:34 -05:00
parent bd610e1759
commit ec567d2c03
Signed by: jahanson
SSH key fingerprint: SHA256:vy6dKBECV522aPAwklFM3ReKAVB086rT3oWwiuiFG7o
9 changed files with 97 additions and 40 deletions

1
.envrc Normal file
View file

@ -0,0 +1 @@
export SOPS_AGE_KEY_FILE="$(expand_path ./age.key)"

3
.gitignore vendored
View file

@ -2,4 +2,5 @@
# Ignore build outputs from performing a nix-build or `nix build` command
result
result-*
.decrypted~secrets.yaml
.decrypted~secrets.yaml
age.key

View file

@ -3,10 +3,12 @@ keys:
- &jahanson age18kj3xhlvgjeg2awwku3r8d95w360uysu0w5ejghnp4kh8qmtge5qwa2vjp
- hosts:
- &telperion age1z3vjvkead2h934n3w4m5m7tg4tj5qlzagsq6ly84h3tcu7x4ldsqd3s5fg
- &gandalf age1nuj9sk2k8ede06f8gk5twdlc593uuc7lll2dvuy20nxw9zn97u5swrcjpj
creation_rules:
- path_regex: secrets.yaml$
- path_regex: secrets.sops.yaml$
key_groups:
- age:
- *jahanson
- *telperion
- *telperion
- *gandalf

View file

@ -0,0 +1,18 @@
---
# yaml-language-server: $schema=https://taskfile.dev/schema.json
version: "3"
tasks:
re-encrypt:
desc: Decrypt and re-encrypt all sops secrets
silent: true
dir: "{{.USER_WORKING_DIR}}"
vars:
SECRET_FILES:
sh: find . -type f -name '*.sops.yaml' ! -name ".sops.yaml"
cmds:
- for: { var: SECRET_FILES }
cmd: |
echo "Re-encrypting {{ .ITEM }}"
sops --decrypt --in-place "{{ .ITEM }}"
sops --encrypt --in-place "{{ .ITEM }}"

15
Taskfile.yaml Normal file
View file

@ -0,0 +1,15 @@
---
# yaml-language-server: $schema=https://taskfile.dev/schema.json
# go-task runner file - rest of config in .taskfiles/**.*.yaml
version: "3"
includes:
sops:
taskfile: ".taskfiles/sops"
dir: .taskfiles/sops
tasks:
default:
silent: true
cmds:
- task -l

View file

@ -7,7 +7,7 @@
];
sops = {
defaultSopsFile = ../secrets.yaml;
defaultSopsFile = ../secrets.sops.yaml;
validateSopsFiles = false;
age = {

View file

@ -260,6 +260,16 @@ in
PGID = "102";
PUID = "999";
};
lego-auto = {
image = "ghcr.io/bjw-s/lego-auto:v0.3.0";
autoStart = true;
volumes = [
"/eru/containers/volumes/unifi/cert:/certs"
];
environment = {
TZ = "America/Chicago";
EMAIL = "";
};
};
# # Xen-orchestra container
# xen-orchestra = {
@ -284,6 +294,7 @@ in
# };
};
};
};
# ZFS automated snapshots
services.sanoid = {

45
secrets.sops.yaml Normal file
View file

@ -0,0 +1,45 @@
1password-credentials.json: ENC[AES256_GCM,data:WBFSyiq30df5D2A3jAvYHLHz1b7nnk4MR0W4E8qDblIo2gug3uBbugR0Dcg2XQRSKfTDpk1kc9KPMrqYPsPtAgKjqQzL1XzuAL9i0C/xBO4+VzFoG8Puwm43791bVjFcG4hxdoMiKY28Pi2MnKlQZEivZUatSNHJqouYfTM/pIuLhRkng6YmUIzT2w47bl0K3Sdu+lh+aGxFsL+k1zepMALq+GZO7IHC9xBq32HwhpWd8UDpgCNqdICaJJ6G8iJxjSqUHjoijkU9QUS+WwWFpVGJ8f1WkmQZ6/gcKudMNg8msMrcyobPw/JgeigxDzF3SpujShRJN6O8QdtE8TBnxb2RZSxC5uNojvqgJVcR4ZvQH5wEZZ9PmNbhpS2vo5nb2/b5fmSFvkIsugOveZ/92O6ffA3rSqT7Eb+nPIH9H1BAu7cUxu0RPXBmM72ohMtFoMpPNXJBkJHODcYNxCYrzWaMfa3673jS5QElzJYeKn0Ir45MFIwWArttq2EVW38Vuwx2YA6qqTrpIiNmhOvKalnVW5f678lwIIzpHDP+1XfiK2MhIXTXst3nV3t/7z4wop4mRLAclS6nmnHMEZ8QrbvK4vVQLUgLDw8r2wRcYa8v8BcdqXdLbkrrHVoPUTn4XHZ0tgO+dfAR5KwkESI/l4B0gxNAlIbYs7edfapphZdbWsyUSbURxt+u70fXovXvgISf9EPT/FcUribInzf4V2PM++x7R72VRARilSXysEouNdeAqreFER/fuMKnXO+7+ywSMwMPLPk2q/J3/u1F+MXTVq4wWJD4UKHek+csAE3qk847/u/XTCJmtVzRLEjJMG5ShNxLI1HuH4Pvf5ebB4MQIeO2gZhiXP2fWNtWt1w+A47FL1GcdXx+Oyl3Mjhze+/762vwVODu9fsY5ySqa86TT96xH67RiVfDp+iTRQYKirwui69LsRACpB6LnKt4yNX3QlS0mawFZhWSuzy6EUqhufQI0I/Pzf2DatyYXtLwHrw/8AYf+J2ouDpew6tghsdSy4s0BnypSL6UmP8OitpDmD+IHSom/eeOCG/vXtUD2KOzzmCR7FFRXrqyYtyQ10djq4jUKO43bzKkWINm/NDVzfQf8NQdXTAR6eneyXJ6Zt+FzMtmbHVjfdrCfLNdXROSfhRFX/YZHVwF+HwtK33RK0DOwpFZGOnW1bceQ2BhgEQbv06IPK6mS9WGx6ymDJ6C/nldTBXLbc5LV/S5sKnnIi8stkd47e3olJSp3xs9ri/ZSFrT3JxVIU2mUL8PGjuOuHDknv8VTZlx1WFp1xqj0l3kgz40SzpWcvSyavHFnPs/+W5UN0N4xBZo7Wuf21u1gqAagypDzoUCnWakjHXQK2LsREFcN72FXHRihpcJLQOjWnZEuQDpH+1Dk5RpUjIZl3M0VQFb0XPwHlnK0pBaBn9eiKZU17gyElXKAz8=,iv:YqHHD0nHnil9s2rG7nmaTjCSvH1TtiiOEi6uqcZKdMM=,tag:/bRmXUnt25SJBJMu6IywTA==,type:str]
bind:
rndc-keys:
main: ENC[AES256_GCM,data:NemSD9HDjU9nj4D7zo5X+xKM2KqnjwKhef7UX8w4k1wWY0BKEa7DHniHynYTs3JIoJ5rP+sU+8xXSpiZlC6dM+BzdUESBNnEKyON6EObxz9opo4UgC6fnjuO1Cu6/iCAgqUdZGx8,iv:Rl5S0neTGSJ+OVobY/kAxOkW/7yEg5AVKwicJOdMFyk=,tag:3HCcyA75Bk5q2ZB2Jjozng==,type:str]
externaldns: ENC[AES256_GCM,data:rOc4mcKV13ljFdQKD6XLW5YHIa1vZ3iVq8dBBgiAmZ2b8Ygzx/j7dZLo0Fa+twbE55CcwEc218PsviiTbs5erO1lAC2g8NhRbXeN1Kblnk/duYscv5U8eM3vRAvBIMoX+1gByYQoaClu,iv:egLkYDIyLggpQQ78lypgzsKAO0H7bxWtzJ/hOeirLqY=,tag:lCMfoMcYCYkMmm0/6hgkkg==,type:str]
zones:
jahanson.tech: ENC[AES256_GCM,data:CNMyJcQhLkJZZ2pre9PobKvf1I1RW+7BcU8jFblnPzkAhQc2ljfFdkPWw1fet+Cza5Zeh+KdxWEFwgqGE0WgIi6mPk2EMFdDgapa9AQNXxHVXMoSmTyVxQJGpHX3ENI/xP6hMSM6KaxoHntPLmNu4QS1pPk+J/pz0LreDL1NfF7WEYbZPbWuKg8+/ZQrx7CcNOi+l8uudrNlyxHc+MjR90SpqluxPOvVhYGV640IZNkcsnoZJIgVgVGEDHDDWcpG0jVmu0N1lP9mhVySliKYHY1RgwB/icajwCJuvOfnk4vBIdjM2mdnA5Ql1pzwMAZ7uZQm2+rZt9/Rmpgd3wIGdGjM6OSHa2qg61WUpIeDtQQdzF+dvrbWlXrXbQNak/GMAoXs8CgivD/uF7xVsITxRMJGRsH+p6WOdr+GtSdo2rCFvb/smAqXKRf76BlJLgRz+G7IJi+08IwZnHC5kS/0A26G9ln5pgzTScPMzUYZ8oVJ0cwCCn9CntyhdwS39/+PYAA7r8sVzo5NVp2yWOL22EzB83ZPoVCuVxn1WGHTbo3ZncyzTxCS8xwEtNsqbxZ0NRe7A6+mZbNAnNGYIlBCL1C+HLmVC/SBTVcmu5rsNOw+3smg2XgJ7+Cpq5lAIabXj8ZS5l3y7JApalwVBirfK0tJmg06AFSmeDDa7040+ulloLQh7zMP0fpOSqotYtFLRAY5Fkx7YiziwewosJkNS4UyTQrJjz8FdNTRptRvIOWpegfd40nduE1Y1fqTAE4VEgGkdZ/3IAv42S4JfsaFxB9XAZVSGuada35FVZtO7V/0KfoBA0ZtBHxQDtnDBrCOsCGdY0+/PuHSkAlhvf3nCGHbasCnv7LY8cVpupDImZ5NSUvhdg3HDTX/0Zpz+0cPSy38GQ4N21s+GDd71U6nLEdtUsku2Uh75eCCqoK3cJDyqqHFdz2GQ7XUv2aOKIB3BGPzISVvRj+pFFRyuIkay1IqyKEdrAWGf5pRNwVOgtWPUcGJIT6vDNtw416DBjUGhHHBnUPQBrtzwbORQuNfZXzop8hgy1X7Og==,iv:B/9nPaUwMY/syfv2SyE9+MA1WHphpNkgr8KsgL0FCaQ=,tag:oGXXI89rxW0q1jVi6zRn6w==,type:str]
sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age:
- recipient: age18kj3xhlvgjeg2awwku3r8d95w360uysu0w5ejghnp4kh8qmtge5qwa2vjp
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBCOU45eFJjUHVzVFcwblVy
TC8zSk5XR2dXcnozNVpaaElJa1BteVpTaDN3ClN0L0JrOCtvRkE3RWU4eTh4dXdG
TUZBNnhKSlBRNUw4KzQwVER2QTBNWkUKLS0tIFgxY29mTnFyMlc0Yk9CVFg1aE9J
U0MzK2NXNzBYR3RHOE9qRjhVZzZpWmsKFz7SPBk//ZCcpLAVwhV6dlLR/8airRNy
tTznN6y9kksWFQg4NR+v/hOl9ZAKVhck9KiVyg7SHnwRj80+meEm3w==
-----END AGE ENCRYPTED FILE-----
- recipient: age1z3vjvkead2h934n3w4m5m7tg4tj5qlzagsq6ly84h3tcu7x4ldsqd3s5fg
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAxSUE1TVg1dGRDM0VNNWVl
S1ZaZjhEZ1BWdmhDelNWNWVyTVBWTTk1eXdrCmR0TEMwdE5LVERjblE5bythMXdZ
TlJCRk95WkVXMzZmaXBlNTF1YU4zR1kKLS0tIFVPOE9icktXZmdjcXAvZHV3ZUQ1
YjZmTWUwRVdyUEdWaUppKzI1ZkV2NTAKQh3RAJo+yavr5RTPJcW77AvdCTX5KtW2
TYmNPz1GCI5QN3yqAjcuuzn6IYMRxWR+Kbd6G0jO45PkO7NuEoSeTg==
-----END AGE ENCRYPTED FILE-----
- recipient: age1nuj9sk2k8ede06f8gk5twdlc593uuc7lll2dvuy20nxw9zn97u5swrcjpj
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBqdFZlNkRSMmFLM3FVQVdC
QW4reVhuMm9JNjY1OHNFU29YTkNsUEo5VmkwCkFCWVFXdFZBcnNvRFVMbTJ1a1Iy
NnVBOW9vWm1nV2labEhQVWR1VGFvbG8KLS0tIC9OTGVlUEhrK1dQSi9icVZyRk9I
L3I3c1VHZTNUQUNjVjFYaXZXMHlsUTgKplXR6ZN5+Z25n5IlC7jGDHYLH/6g8dWI
MtkYR0606ZC+b4w8PmsHyf6SBfocb8kP9uZKhJAHCtgzn1IQakPN+A==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2024-05-28T21:41:30Z"
mac: ENC[AES256_GCM,data:wuPcfauGrw67p071Sjr+9TXrFRC/0DOsKbr+t5wM9j3rASN1KOLRCxkyVIkvST02Q62IrjbYJhs3A6Iwl+H0e1VD55ZgR5u5nMZjpxRu+sH9Vl3KZVgKbKgeA+tVvsaK3KNPLUp6rHPVb9f9c0aUAfOD8q4RHE57esdGA5pY0yI=,iv:mL4RMh5LgWO6O03uuoeo6VfCyH9IUQTpk2GXd7VWzqo=,tag:dVqRHlA4P4FIueWg6eVgzw==,type:str]
pgp: []
unencrypted_suffix: _unencrypted
version: 3.8.1

View file

@ -1,36 +0,0 @@
1password-credentials.json: ENC[AES256_GCM,data:lVFciFilowAdIpLHheFffOA631Qqerwat5pvj6Yn+b2kJvnNd7rNgMWPbp3cElY2pnKOXI6jDeLiWSw6VyNmXzxkJuQRN1rRRdP5F1kwoF2ZSMllxCTs+uXh+LVmV0WR5cO1U6IVLkBBFY35n46U4rmGeuEWQWI8XOoUo/MpfNVjITFOBTfFw9jTWLDuLnDM13BAbKx3km4RiOJMiTzKsoIOhHZg+QhuCB0y34V0K20Rw1cdj4JfWFyIWBe9/HSUYPbl3yPzxHGSgmV+rQlEJ6EvAkvN54/JYsiicoTPFses5dtRzgP5Sfe7QQhE/di11g6sSg8PJdndXv8jdVS7wnA8HLv+VyOcesIlau9JqXWZ9esQZQ4UrXof31R4j8zNinci/hErLx5yDY/cei0A0hFmYr0RmgY+J1JSgkqWw5h+Df3SK4QGfZ78lAUPlQ7iozITEZMU1JL7pVbmuVDDQCTNmjsogCUrEhxE4aWN8k57kBcuEHqpxaIA4XOxYZ6Pid6pbxOfS6IjzwMU6hiIu5hbQTauCnEUba5l54ZAbe5Y71XZNYT23QwbbbIdYByJ9+stSCRHhrJyzElyeIgT1KJFPsIIadrrC2HuS+1pEIOPGhvwkJNLJAJiSZiTtU45d14YCIfr9sfzPLnfyi7ke8ca/qG6WDwTSWVqfuK0HeSt30ZeOksHZ6hSMjGAWYLZE+LbbVJ3KAJzIemwiCry0uM6DnJOFMzsJbV+1Src9Iixmaz/piCZvuGCvPp9iHezTqvRzs7hps1I4ngWMPPKWLkho+yRrRxUsMS0mxgB0UDhJg2Iwn95HfGyApYMtBHBlOu6KVGc8/24f1UXqLOf1MsGkeKNsy09OkvGcGH8B58w2eHLfWjHlA595wnp9Jwiu1NirN0CjZtlNC1Q6Atuvf+42C+h5fWnZaq/ou7IQyYMcS/XqlcxRVXZr9diahowLHOq3WdBJgl2gCJQOpE+5VyrzwtTpaFeEvVx1hSe4ksFx4KvCUwPksb0/jpt+nV1T7ks9PJ0tfdE+0Rg3PT+cElAHecJL57YZnUp1dUtLhPhmE0aFJOHzqJUZ1VcANkR+4Eoeqv2PoDOOwB/oViacERDnJilTKmjPN7AJcsB6f+o+xI2eDOei4EWsTCkWu7zpJLk1mHu1ZeYAUmPiEFdzw2SsXbG/VJD3Rnu3mw+2drSWbA6YHNfw02UcLoVoDVBf6UI/mt3rA38ccsNM2JypJR5qRrluodOYjqNcThOJwm9h0zOPOl/B0JFMdPGRS66WCpwQYvVr5cJob0z+rTGW215KLeeq0xCVPhpMv1AvC4GTP8FcCX2+MCjT1MtRgGc1IScjzgSf85ER+/YHB/u+0yIqbc8QZlDLVQuNIY4hBSW4uw9wLgkcIToBy8vVSkPE153ruxKUK+VBcRH5sgC0r7oj0f6FL4sBYP7FnbBXOM=,iv:jW0DRHr9Q0DzsAq0V5sZlnpCI3hjfE377SzlU7Xew00=,tag:q/hfk04RQMDSUT6F62LTDw==,type:str]
bind:
rndc-keys:
main: ENC[AES256_GCM,data:kHDSEJ9bX8vugV923GXRIibrnx3vRjdvzv5VtDaam3GSI8CSjJd9aIT5K70sJXRRkh+en5dLJlUO/LHPjwIybwQgZpj5DgOcyE0ks3FEyJsgpxYRXrQtGtUb83c5CaY07f4vL9oy,iv:rENbmwqpsos6lBIo8B6gp8XE+dYA/eWWH+4dv6tK/Rc=,tag:Jgr12K+nIPzc2P+RtBRlRA==,type:str]
externaldns: ENC[AES256_GCM,data:spx/NK8VszoN7P9AkbZBxbjU0cV9ddo2G91tMe74b0L6DoID/ZSPef7J+NwDl6g+3M6WcQVyXHjhHU/j0NsTj284WnByHfJrKIHJJe1lJQld6aw+/Ax7IDP94kPVYfVEHR9SF0G7odPV,iv:fxqj2BF1F/WgYKb6rWYkggWh/0ngvYd8pN/d4Zw2YWM=,tag:FbG/96/10gmc132J+SXOMA==,type:str]
zones:
jahanson.tech: ENC[AES256_GCM,data:c3Dd7WxDZiRWPwwnOzZzhHCU70dSrDpJtIxkzGi0BBfiVoggO3UD3wDIUUnjkDpt4d/+7Y0W4fwLvEV57DRWJ4YE0fBYF2seHWj15gIRfAReGb+A4EEHJOJsRHMaVf8G7sciDAs4x09JWEKYdKAKOa4ML/N0VX+p/uQgq5O/fp2Hx8P3Qh/JDO6XwCZvl8vqJVzrq1QF1hkU9TBgebAG05KBlfONNhrdlPFy1sFlu/C3jChP6dgWCEV+rOkSQMHI3UCv+xSv91MIbjhst8ouX6ZoMaFMtb7M3WlWRCkhDuYePn/8M1Tk+DZSZAUIRcXCthi7Lsimr8hKz4PKmoDQ9Z8OHOCo7z7W7ksM6+QhvMflOfbS9qjIru0mnidqCJKyxTlGoFVvLLRZQOcAd6yDfq/+0nezxuG3F8fgvCikBDjJmf8y7PZ8egZvspNrXCGFbe/9Hrsz7qmWDlz6FJb37XfE8FNMY6NaAg2nKNIvxQoxYRjspPwPPfr2OZVVFDIvyN/OhjggUAWfy4bd9bPUCKZhGnWbpY7UmjleRKsVAqB3L6wZkhKOD0PSuE7bu5nXwwJqsrFyZii+4oEKMeSdoIbz9vDcN393z4MyGx4ddJH1jYwlPpPm96lvyc5CjrmmCLeZZZ9pUhkDf7pjjPFTuH0l9Xa25tpu/wIVyH1oYebL0i8HSz8Ar+ouGowEh6Wx14xg8MGFbLPVBrFpKTewc7AuTboNlbhFaykJetEUhcjiDqC8ejonXYov9sSq2AzAl7Blh4y40SRKbVQhYecyHxeKJID3ApDJtMRUp2W9c0JpRKQAdspB0eMC9xMzYKa5LJfKGD9k8nGuaDAcFRBFzNURC57R6aLvMIXm95u4bdaz/wGswxbVciYCRPsHr3o0N2ZqBnfHuPsoTyl6YZWREtyjTMdW5ANKZUo1LDSZdq76Al0HgelgZVVH5BTGMkFdIiL2rZhX9K/QjQeq1fU4kxfRicXjT1mTgOdukWg2zybTfuHUkQBW3ueIprNcMD+sqVdNi9wn7z0JwWG6Zyd4qIeZDNbmeuF+SA==,iv:m4/6Nm1hkHOulULTupYwTJtKLAloySxrXwWHu7CN1cM=,tag:uKy851IaKDSkQxzXBEiniQ==,type:str]
sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age:
- recipient: age18kj3xhlvgjeg2awwku3r8d95w360uysu0w5ejghnp4kh8qmtge5qwa2vjp
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBVNzRsKytjQ25NN2xsU0hI
MWZuRTZjRWNibnhnWkJsYklScmt5UFl2T2pBCnU4L2ZWVnRMclJaN2QyWHQwMVF2
Z1hTZUEwMXAwamxRWXgyQ0VQMUY3UVkKLS0tIHVVUXljMzh1MEExTURPSkFoV09u
MFB0VDhVUmxCc2JBaTlLV1BVTGJhVkEK2DtRNL6KBkBS23ywub66hpUcRn/Jea6k
+oXXU8kcQ30WqSupI6kUUK0Dd+at0vrV1tV/IkvfW0Qs5OzjgtPo5w==
-----END AGE ENCRYPTED FILE-----
- recipient: age1z3vjvkead2h934n3w4m5m7tg4tj5qlzagsq6ly84h3tcu7x4ldsqd3s5fg
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBoT3RINjA2SUVsT21EWFpm
a2V2YytIMktRbSsrNkhlOGI4c2dRS2ZpakFZCmFTNGs5aXA4SW1PQnhSSHlQM0hL
cFZvZzlXdGtXbjg2WDNDYytqQkpwYmsKLS0tIFAyUEkrVXJEYkhSNktQR2pQOWFz
SHZmN3JDL1ExVHZ5K2txM2h6MzRKWE0KbS3kO9teIcRDY4hnb54LgWzcRQu7aGGf
TjnTJzqKqmRRMLOs5be6wbrxBiRe9p5nCN/WJ9nqhr7rfNNMUiZePw==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2024-04-30T23:29:09Z"
mac: ENC[AES256_GCM,data:x4ElnDRzdwcSf1qNZ6MNPzqDJwtAvQyc/ugrfxpdGyS/PxfhZPcTKshdl1xS6dhAfARVa2Wo343vKJ5fOA/9XNPqa4JL2i9bv1qmd23hgPkz4fFtZ1y5eWUKf2/yaRJrssi1CBQqZWMPPLgggokE80cGOMvD/F5KtcdIhnZjBQI=,iv:VrOtAFB8+Jm7H0JBlo6FsWKXmBZSOkGKuAfIZPbfDy4=,tag:qYJenhFym4iCeXLJqATu0Q==,type:str]
pgp: []
unencrypted_suffix: _unencrypted
version: 3.8.1