1
0
Files
homelab-public-context/runtime/history/nfro-260806-1630-9c2f.json
2026-08-06 13:44:52 +00:00

39 lines
39 KiB
JSON

{
"schema_version": 1,
"channel": "homelab-runtime",
"command_id": "nfro-260806-1630-9c2f",
"status": "OK",
"rc": 0,
"host": "pve01",
"mode": "verify",
"component": "newfi-portal",
"started_at_utc": "2026-08-06T13:44:40Z",
"finished_at_utc": "2026-08-06T13:44:51Z",
"reference_register_checked": true,
"reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e",
"error_register_checked": true,
"error_register_sha256": "24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83",
"command_sha256": "0f5beea2185628e7b6e33ef92110753cad5b9a009ab6203ce75c06fe1bca17cd",
"duplicate_failed_command_blocked": false,
"block_reason": null,
"execution_started": true,
"change_declared": false,
"result_contract_valid": true,
"result_contract_status": null,
"result_contract_error": null,
"command_rc": 0,
"changes_made": false,
"rollback_started": false,
"rollback_restored": null,
"mutation_outcome": "NO_MUTATION",
"sanitized": true,
"secrets_included": false,
"private_addresses_included": false,
"raw_evidence_retained_locally": true,
"raw_evidence_sha256": "738dc788a996093e6210ccfb7ae6ff47b280283a48c7bc4f053efe73b3bddf43",
"sanitized_output_sha256": "5933d6e26c09a66ec65d3698e388094d233f305a883381a7e3a83bac5cff8790",
"output_truncated_in_json": false,
"full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt",
"output": "HOMELAB_READ_ONLY_INVENTORY_BEGIN\ncommand_id=nfro-260806-1630-9c2f\ncomponent=newfi-portal\nstarted_at_utc=2026-08-06T13:44:40Z\nread_only=true\nproduction_change_declared=false\n\n===== HOST IDENTITY =====\n\n--- date and timezone ---\nCOMMAND: date -Is 2>/dev/null || date; date -u -Is 2>/dev/null || date -u; printf \"TZ=%s\\n\" \"${TZ:-}\"\n2026-08-06T16:44:40+03:00\n2026-08-06T13:44:40+00:00\nTZ=Europe/Moscow\n[command_rc=0]\n\n--- identity ---\nCOMMAND: hostname -f 2>/dev/null || hostname; id; whoami; pwd; umask\npve01.gram1.ru\nuid=0(root) gid=990(homelab-command-portal) groups=990(homelab-command-portal)\nroot\n/\n0077\n[command_rc=0]\n\n--- operating system ---\nCOMMAND: uname -a; test -r /etc/os-release && cat /etc/os-release || true\nLinux pve01 7.0.12-1-pve #1 SMP PREEMPT_DYNAMIC PMX 7.0.12-1 (2026-06-09T21:07Z) x86_64 GNU/Linux\nPRETTY_NAME=\"Debian GNU/Linux 13 (trixie)\"\nNAME=\"Debian GNU/Linux\"\nVERSION_ID=\"13\"\nVERSION=\"13 (trixie)\"\nVERSION_CODENAME=trixie\nDEBIAN_VERSION_FULL=13.5\nID=debian\nHOME_URL=\"https://www.debian.org/\"\nSUPPORT_URL=\"https://www.debian.org/support\"\nBUG_REPORT_URL=\"https://bugs.debian.org/\"\n[command_rc=0]\n\n--- resources ---\nCOMMAND: uptime 2>/dev/null || true; free -h 2>/dev/null || true; df -hT 2>/dev/null || df -h\n 16:44:40 up 9 days, 2:39, 0 users, load average: 0.42, 0.38, 0.38\n total used free shared buff/cache available\nMem: 31Gi 22Gi 3.8Gi 169Mi 5.0Gi 8.3Gi\nSwap: 9Gi 0B 9Gi\nFilesystem Type Size Used Avail Use% Mounted on\n/dev/mapper/pve-root ext4 98G 15G 79G 16% /\nudev devtmpfs 15G 0 15G 0% /dev\ntmpfs tmpfs 16G 66M 16G 1% /dev/shm\ntmpfs tmpfs 3.2G 3.8M 3.2G 1% /run\ntmpfs tmpfs 5.0M 0 5.0M 0% /run/lock\nefivarfs efivarfs 192K 135K 53K 72% /sys/firmware/efi/efivars\ntmpfs tmpfs 16G 89M 16G 1% /tmp\n/dev/nvme0n1p2 vfat 1022M 9.1M 1013M 1% /boot/efi\n/dev/mapper/pve-homelab--staging ext4 295G 148G 132G 53% /mnt/staging\n/dev/fuse fuse 128M 1.4M 127M 2% /etc/pve\noverlay overlay 98G 15G 79G 16% /var/lib/containers/storage/overlay/c638354547700f5f06ca229429e8a557150144d8c21fb899d880f76665f74690/merged\nshm tmpfs 63M 0 63M 0% /var/lib/containers/storage/overlay-containers/aa350cac62aa0235a41c70f8650092e69fa92e815c08c8e4e2aeea65a8accc46/userdata/shm\n[command_rc=0]\n\n--- processes relevant to portal ---\nCOMMAND: ps auxww 2>/dev/null | grep -Ei \"[g]itea|[x]enforo|[n]ewfi|[n]ginx|[p]hp-fpm|[m]ariadb|[m]ysqld|[r]edis|[k]3s|[k]ube\" | head -300 || true\nroot 3334259 0.0 0.0 7620 3540 ? Ss 16:44 0:00 bash /usr/local/sbin/homelab-chat-run nfro-260806-1630-9c2f verify newfi-portal -- /usr/bin/bash /var/lib/homelab-command-adapter/capsules/3abb6bd6d742e01a236e70b15721df1f1cefdac62044cbc93a62dc58700a2a67/payload/newfi_readonly_inventory.sh\nroot 3334282 0.0 0.0 6016 1948 ? S 16:44 0:00 timeout --foreground --preserve-status 900 /usr/bin/bash /var/lib/homelab-command-adapter/capsules/3abb6bd6d742e01a236e70b15721df1f1cefdac62044cbc93a62dc58700a2a67/payload/newfi_readonly_inventory.sh\nroot 3334283 0.0 0.0 7620 3524 ? S 16:44 0:00 /usr/bin/bash /var/lib/homelab-command-adapter/capsules/3abb6bd6d742e01a236e70b15721df1f1cefdac62044cbc93a62dc58700a2a67/payload/newfi_readonly_inventory.sh\nroot 3334319 0.0 0.0 7620 2024 ? S 16:44 0:00 /usr/bin/bash /var/lib/homelab-command-adapter/capsules/3abb6bd6d742e01a236e70b15721df1f1cefdac62044cbc93a62dc58700a2a67/payload/newfi_readonly_inventory.sh\n[command_rc=0]\n\n--- listeners ---\nCOMMAND: ss -lntup 2>/dev/null | head -300 || netstat -lntup 2>/dev/null | head -300 || true\nNetid State Recv-Q Send-Q Local Address:Port Peer Address:PortProcess \nudp UNCONN 0 0 0.0.0.0:51820 0.0.0.0:* \nudp UNCONN 0 0 127.0.0.1:3128 0.0.0.0:* users:((\"netbird\",pid=1286,fd=17)) \nudp UNCONN 0 0 [PRIVATE_IP]:5405 0.0.0.0:* users:((\"corosync\",pid=1741,fd=28)) \nudp UNCONN 0 0 100.100.131.41:53 0.0.0.0:* users:((\"netbird\",pid=1286,fd=24)) \nudp UNCONN 0 0 0.0.0.0:111 0.0.0.0:* users:((\"rpcbind\",pid=883,fd=5),(\"systemd\",pid=1,fd=311)) \nudp UNCONN 0 0 127.0.0.1:323 0.0.0.0:* users:((\"chronyd\",pid=1177,fd=5)) \nudp UNCONN 0 0 [::]:51820 [::]:* \nudp UNCONN 0 0 [::]:111 [::]:* users:((\"rpcbind\",pid=883,fd=7),(\"systemd\",pid=1,fd=313)) \nudp UNCONN 0 0 [::1]:323 [::]:* users:((\"chronyd\",pid=1177,fd=6)) \ntcp LISTEN 0 100 127.0.0.1:25 0.0.0.0:* users:((\"master\",pid=1521,fd=13)) \ntcp LISTEN 0 4096 127.0.0.1:85 0.0.0.0:* users:((\"pvedaemon worke\",pid=3306169,fd=6),(\"pvedaemon worke\",pid=2967018,fd=6),(\"pvedaemon worke\",pid=2621560,fd=6),(\"pvedaemon\",pid=1799,fd=6))\ntcp LISTEN 0 5 0.0.0.0:8099 0.0.0.0:* users:((\"python3\",pid=1279,fd=3)) \ntcp LISTEN 0 16 127.0.0.1:3493 0.0.0.0:* users:((\"upsd\",pid=1820,fd=4)) \ntcp LISTEN 0 4096 100.100.131.41:53 0.0.0.0:* users:((\"netbird\",pid=1286,fd=25)) \ntcp LISTEN 0 5 127.0.0.1:18787 0.0.0.0:* users:((\"python3\",pid=3558039,fd=6)) \ntcp LISTEN 0 4096 0.0.0.0:111 0.0.0.0:* users:((\"rpcbind\",pid=883,fd=4),(\"systemd\",pid=1,fd=310)) \ntcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:((\"sshd\",pid=1327,fd=6)) \ntcp LISTEN 0 4096 127.0.0.1:8086 0.0.0.0:* users:((\"conmon\",pid=1583,fd=5)) \ntcp LISTEN 0 5 [PRIVATE_IP]:18788 0.0.0.0:* users:((\"python3\",pid=1282,fd=3)) \ntcp LISTEN 0 5 0.0.0.0:9101 0.0.0.0:* users:((\"python3\",pid=1278,fd=3)) \ntcp LISTEN 0 16 [PRIVATE_IP]:3493 0.0.0.0:* users:((\"upsd\",pid=1820,fd=5)) \ntcp LISTEN 0 5 [PRIVATE_IP]:18094 0.0.0.0:* users:((\"python3\",pid=1131485,fd=3)) \ntcp LISTEN 0 5 [PRIVATE_IP]:18095 0.0.0.0:* users:((\"python3\",pid=1516647,fd=3)) \ntcp LISTEN 0 4096 *:8006 *:* users:((\"pveproxy worker\",pid=3306165,fd=6),(\"pveproxy worker\",pid=3199145,fd=6),(\"pveproxy worker\",pid=3074659,fd=6),(\"pveproxy\",pid=1846,fd=6)) \ntcp LISTEN 0 4096 [::]:111 [::]:* users:((\"rpcbind\",pid=883,fd=6),(\"systemd\",pid=1,fd=312)) \ntcp LISTEN 0 128 [::]:22 [::]:* users:((\"sshd\",pid=1327,fd=7)) \ntcp LISTEN 0 4096 *:3128 *:* users:((\"spiceproxy work\",pid=381351,fd=6),(\"spiceproxy\",pid=1855,fd=6)) \ntcp LISTEN 0 100 [::1]:25 [::]:* users:((\"master\",pid=1521,fd=14)) \ntcp LISTEN 0 4096 *:9100 *:* users:((\"prometheus-node\",pid=980,fd=3)) \n[command_rc=0]\n\n--- systemd services ---\nCOMMAND: systemctl list-units --type=service --all --no-pager 2>/dev/null | grep -Ei \"gitea|newfi|xenforo|nginx|php|maria|mysql|redis|docker|containerd|k3s|kube\" | head -300 || true\n● docker.service not-found inactive dead docker.service\n homelab-docker-health.service loaded inactive dead Homelab Docker health readonly collector\n[command_rc=0]\n\n--- systemd timers ---\nCOMMAND: systemctl list-timers --all --no-pager 2>/dev/null | grep -Ei \"backup|gitea|newfi|xenforo|cert|renew|database|mysql|maria\" | head -300 || true\nFri 2026-08-07 00:00:00 MSK 7h Thu 2026-08-06 00:00:07 MSK 16h ago dpkg-db-backup.timer dpkg-db-backup.service\n[command_rc=0]\n\n===== DNS HTTP TLS FOR NEWFI.RU =====\n\n--- resolver configuration ---\nCOMMAND: cat /etc/resolv.conf 2>/dev/null || true; getent hosts newfi.ru 2>/dev/null || true; getent ahosts newfi.ru 2>/dev/null || true\n# Generated by NetBird\n# The original file can be restored from /etc/resolv.conf.original.netbird\n\nsearch netbird.selfhosted gram1.ru\nnameserver 100.100.131.41\n95.84.154.183 newfi.ru\n95.84.154.183 STREAM newfi.ru\n95.84.154.183 DGRAM \n95.84.154.183 RAW \n[command_rc=0]\n\n--- DNS records ---\nCOMMAND: if command -v dig >/dev/null 2>&1; then for t in A AAAA CNAME NS MX TXT SOA CAA; do echo \"### $t\"; timeout 15 dig +time=3 +tries=1 newfi.ru \"$t\"; done; elif command -v nslookup >/dev/null 2>&1; then nslookup newfi.ru; else echo \"NO_DNS_TOOL\"; fi\n### A\n\n; <<>> DiG 9.20.23-1~deb13u1-Debian <<>> +time=3 +tries=1 newfi.ru A\n;; global options: +cmd\n;; Got answer:\n;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32658\n;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1\n\n;; OPT PSEUDOSECTION:\n; EDNS: version: 0, flags:; udp: 1212\n;; QUESTION SECTION:\n;newfi.ru.\t\t\tIN\tA\n\n;; ANSWER SECTION:\nnewfi.ru.\t\t134\tIN\tA\t95.84.154.183\n\n;; Query time: 1 msec\n;; SERVER: 100.100.131.41#53(100.100.131.41) (UDP)\n;; WHEN: Thu Aug 06 16:44:40 MSK 2026\n;; MSG SIZE rcvd: 61\n\n### AAAA\n\n; <<>> DiG 9.20.23-1~deb13u1-Debian <<>> +time=3 +tries=1 newfi.ru AAAA\n;; global options: +cmd\n;; Got answer:\n;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1055\n;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1\n\n;; OPT PSEUDOSECTION:\n; EDNS: version: 0, flags:; udp: 1212\n;; QUESTION SECTION:\n;newfi.ru.\t\t\tIN\tAAAA\n\n;; AUTHORITY SECTION:\nnewfi.ru.\t\t1634\tIN\tSOA\tsara.ns.cloudflare.com. dns.cloudflare.com. 2409716222 10000 2400 604800 1800\n\n;; Query time: 1 msec\n;; SERVER: 100.100.131.41#53(100.100.131.41) (UDP)\n;; WHEN: Thu Aug 06 16:44:40 MSK 2026\n;; MSG SIZE rcvd: 121\n\n### CNAME\n\n; <<>> DiG 9.20.23-1~deb13u1-Debian <<>> +time=3 +tries=1 newfi.ru CNAME\n;; global options: +cmd\n;; Got answer:\n;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12283\n;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1\n\n;; OPT PSEUDOSECTION:\n; EDNS: version: 0, flags:; udp: 1212\n;; QUESTION SECTION:\n;newfi.ru.\t\t\tIN\tCNAME\n\n;; AUTHORITY SECTION:\nnewfi.ru.\t\t1800\tIN\tSOA\tsara.ns.cloudflare.com. dns.cloudflare.com. 2409716222 10000 2400 604800 1800\n\n;; Query time: 7 msec\n;; SERVER: 100.100.131.41#53(100.100.131.41) (UDP)\n;; WHEN: Thu Aug 06 16:44:40 MSK 2026\n;; MSG SIZE rcvd: 121\n\n### NS\n\n; <<>> DiG 9.20.23-1~deb13u1-Debian <<>> +time=3 +tries=1 newfi.ru NS\n;; global options: +cmd\n;; Got answer:\n;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57211\n;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1\n\n;; OPT PSEUDOSECTION:\n; EDNS: version: 0, flags:; udp: 1212\n;; QUESTION SECTION:\n;newfi.ru.\t\t\tIN\tNS\n\n;; ANSWER SECTION:\nnewfi.ru.\t\t6873\tIN\tNS\tvern.ns.cloudflare.com.\nnewfi.ru.\t\t6873\tIN\tNS\tsara.ns.cloudflare.com.\n\n;; Query time: 1 msec\n;; SERVER: 100.100.131.41#53(100.100.131.41) (UDP)\n;; WHEN: Thu Aug 06 16:44:40 MSK 2026\n;; MSG SIZE rcvd: 125\n\n### MX\n\n; <<>> DiG 9.20.23-1~deb13u1-Debian <<>> +time=3 +tries=1 newfi.ru MX\n;; global options: +cmd\n;; Got answer:\n;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36967\n;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1\n\n;; OPT PSEUDOSECTION:\n; EDNS: version: 0, flags:; udp: 1212\n;; QUESTION SECTION:\n;newfi.ru.\t\t\tIN\tMX\n\n;; AUTHORITY SECTION:\nnewfi.ru.\t\t1800\tIN\tSOA\tsara.ns.cloudflare.com. dns.cloudflare.com. 2409716222 10000 2400 604800 1800\n\n;; Query time: 7 msec\n;; SERVER: 100.100.131.41#53(100.100.131.41) (UDP)\n;; WHEN: Thu Aug 06 16:44:40 MSK 2026\n;; MSG SIZE rcvd: 121\n\n### TXT\n\n; <<>> DiG 9.20.23-1~deb13u1-Debian <<>> +time=3 +tries=1 newfi.ru TXT\n;; global options: +cmd\n;; Got answer:\n;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14684\n;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1\n\n;; OPT PSEUDOSECTION:\n; EDNS: version: 0, flags:; udp: 1212\n;; QUESTION SECTION:\n;newfi.ru.\t\t\tIN\tTXT\n\n;; ANSWER SECTION:\nnewfi.ru.\t\t300\tIN\tTXT\t\"v=spf1 -all\"\n\n;; Query time: 8 msec\n;; SERVER: 100.100.131.41#53(100.100.131.41) (UDP)\n;; WHEN: Thu Aug 06 16:44:40 MSK 2026\n;; MSG SIZE rcvd: 69\n\n### SOA\n\n; <<>> DiG 9.20.23-1~deb13u1-Debian <<>> +time=3 +tries=1 newfi.ru SOA\n;; global options: +cmd\n;; Got answer:\n;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56593\n;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1\n\n;; OPT PSEUDOSECTION:\n; EDNS: version: 0, flags:; udp: 1212\n;; QUESTION SECTION:\n;newfi.ru.\t\t\tIN\tSOA\n\n;; ANSWER SECTION:\nnewfi.ru.\t\t1800\tIN\tSOA\tsara.ns.cloudflare.com. dns.cloudflare.com. 2409716222 10000 2400 604800 1800\n\n;; Query time: 8 msec\n;; SERVER: 100.100.131.41#53(100.100.131.41) (UDP)\n;; WHEN: Thu Aug 06 16:44:40 MSK 2026\n;; MSG SIZE rcvd: 121\n\n### CAA\n\n; <<>> DiG 9.20.23-1~deb13u1-Debian <<>> +time=3 +tries=1 newfi.ru CAA\n;; global options: +cmd\n;; Got answer:\n;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42605\n;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1\n\n;; OPT PSEUDOSECTION:\n; EDNS: version: 0, flags:; udp: 1212\n;; QUESTION SECTION:\n;newfi.ru.\t\t\tIN\tCAA\n\n;; AUTHORITY SECTION:\nnewfi.ru.\t\t1800\tIN\tSOA\tsara.ns.cloudflare.com. dns.cloudflare.com. 2409716222 10000 2400 604800 1800\n\n;; Query time: 8 msec\n;; SERVER: 100.100.131.41#53(100.100.131.41) (UDP)\n;; WHEN: Thu Aug 06 16:44:40 MSK 2026\n;; MSG SIZE rcvd: 121\n\n[command_rc=0]\n\n--- HTTP probe ---\nCOMMAND: if command -v curl >/dev/null 2>&1; then for u in http://newfi.ru/ https://newfi.ru/ https://www.newfi.ru/; do echo \"### $u\"; timeout 25 curl -k -sS -L --max-redirs 5 --connect-timeout 7 --max-time 20 -D - -o /dev/null \"$u\" || true; done; else echo \"NO_CURL\"; fi\n### http://newfi.ru/\nHTTP/1.1 301 Moved Permanently\nDate: Thu, 06 Aug 2026 13:44:40 GMT\nContent-Type: text/html\nContent-Length: 140\nConnection: keep-alive\nLocation: https://newfi.ru/\nOrigin-Agent-Cluster: ?1\nX-DNS-Prefetch-Control: off\nX-Content-Type-Options: nosniff\nX-Permitted-Cross-Domain-Policies: none\nReferrer-Policy: strict-origin-when-cross-origin\n\nHTTP/2 200 \ndate: Thu, 06 Aug 2026 13:44:40 GMT\ncontent-type: text/html\ncontent-length: 3999\nvary: Accept-Encoding\nlast-modified: Wed, 01 Jul 2026 16:54:46 GMT\norigin-agent-cluster: ?1\nx-dns-prefetch-control: off\nx-content-type-options: nosniff\nx-permitted-cross-domain-policies: none\nreferrer-policy: strict-origin-when-cross-origin\nx-parked-domains: managed\n\n### https://newfi.ru/\nHTTP/2 200 \ndate: Thu, 06 Aug 2026 13:44:40 GMT\ncontent-type: text/html\ncontent-length: 3999\nvary: Accept-Encoding\nlast-modified: Wed, 01 Jul 2026 16:54:46 GMT\norigin-agent-cluster: ?1\nx-dns-prefetch-control: off\nx-content-type-options: nosniff\nx-permitted-cross-domain-policies: none\nreferrer-policy: strict-origin-when-cross-origin\nx-parked-domains: managed\n\n### https://www.newfi.ru/\nHTTP/2 200 \ndate: Thu, 06 Aug 2026 13:44:43 GMT\ncontent-type: text/html\ncontent-length: 3999\nvary: Accept-Encoding\nlast-modified: Wed, 01 Jul 2026 16:54:46 GMT\norigin-agent-cluster: ?1\nx-dns-prefetch-control: off\nx-content-type-options: nosniff\nx-permitted-cross-domain-policies: none\nreferrer-policy: strict-origin-when-cross-origin\nx-parked-domains: managed\n\n[command_rc=0]\n\n--- HTTPS body prefix ---\nCOMMAND: if command -v curl >/dev/null 2>&1; then timeout 25 curl -k -sS -L --max-redirs 5 --connect-timeout 7 --max-time 20 --range 0-65535 https://newfi.ru/ | head -c 65536; printf \"\\n\"; else echo \"NO_CURL\"; fi\n<!doctype html>\n<html lang=\"ru\">\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <meta name=\"robots\" content=\"noindex,nofollow\">\n <title>Домен припаркован</title>\n <style>\n :root {\n color-scheme: dark;\n --bg1: #0f172a;\n --bg2: #312e81;\n --bg3: #7c2d12;\n --card: rgba(15, 23, 42, .72);\n --line: rgba(255,255,255,.14);\n --text: #f8fafc;\n --muted: #cbd5e1;\n --accent: #a7f3d0;\n --accent2: #93c5fd;\n }\n * { box-sizing: border-box; }\n html, body { height: 100%; }\n body {\n margin: 0;\n font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n color: var(--text);\n background:\n radial-gradient(circle at 18% 20%, rgba(147,197,253,.28), transparent 28rem),\n radial-gradient(circle at 82% 18%, rgba(167,243,208,.22), transparent 26rem),\n radial-gradient(circle at 50% 100%, rgba(251,146,60,.18), transparent 30rem),\n linear-gradient(135deg, var(--bg1), var(--bg2) 55%, var(--bg3));\n display: grid;\n place-items: center;\n overflow: hidden;\n }\n .noise {\n position: fixed;\n inset: 0;\n opacity: .16;\n background-image: linear-gradient(rgba(255,255,255,.08) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,.08) 1px, transparent 1px);\n background-size: 44px 44px;\n mask-image: radial-gradient(circle at center, black, transparent 78%);\n pointer-events: none;\n }\n main {\n width: min(920px, calc(100vw - 32px));\n padding: clamp(28px, 5vw, 56px);\n border: 1px solid var(--line);\n border-radius: 32px;\n background: var(--card);\n box-shadow: 0 28px 90px rgba(0,0,0,.42);\n backdrop-filter: blur(22px) saturate(130%);\n position: relative;\n }\n .badge {\n display: inline-flex;\n gap: 10px;\n align-items: center;\n padding: 8px 12px;\n border: 1px solid var(--line);\n border-radius: 999px;\n color: var(--accent);\n background: rgba(15, 23, 42, .46);\n font-size: 14px;\n letter-spacing: .02em;\n }\n .dot {\n width: 9px;\n height: 9px;\n border-radius: 50%;\n background: var(--accent);\n box-shadow: 0 0 18px var(--accent);\n }\n h1 {\n margin: 26px 0 14px;\n max-width: 760px;\n font-size: clamp(42px, 8vw, 86px);\n line-height: .92;\n letter-spacing: -.065em;\n }\n p {\n margin: 0;\n max-width: 680px;\n color: var(--muted);\n font-size: clamp(17px, 2.2vw, 22px);\n line-height: 1.6;\n }\n .chips {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n margin-top: 34px;\n }\n .chip {\n padding: 12px 16px;\n border-radius: 16px;\n border: 1px solid var(--line);\n background: rgba(255,255,255,.07);\n color: var(--text);\n font-weight: 650;\n letter-spacing: .01em;\n }\n footer {\n display: flex;\n flex-wrap: wrap;\n gap: 12px 18px;\n justify-content: space-between;\n margin-top: 42px;\n color: rgba(226,232,240,.68);\n font-size: 14px;\n }\n code { color: var(--accent2); }\n </style>\n</head>\n<body>\n <div class=\"noise\" aria-hidden=\"true\"></div>\n <main>\n <div class=\"badge\"><span class=\"dot\"></span><span>PARKED_PAGE_OK · homelab</span></div>\n <h1>Здесь скоро появится новый проект.</h1>\n <p>Домен уже подключён к инфраструктуре, но основной сервис пока не опубликован. Сейчас это аккуратная техническая заглушка для свободных доменов.</p>\n <div class=\"chips\" aria-label=\"Припаркованные домены\">\n </div>\n <footer>\n <span>edge → parked-domains</span>\n <span><code>noindex</code> · static · HTTPS-ready</span>\n </footer>\n </main>\n</body>\n</html>\n\n[command_rc=0]\n\n--- TLS certificate ---\nCOMMAND: if command -v openssl >/dev/null 2>&1; then timeout 20 sh -c \"printf \\\"\\\" | openssl s_client -connect newfi.ru:443 -servername newfi.ru 2>/dev/null | openssl x509 -noout -subject -issuer -serial -dates -ext subjectAltName\"; else echo \"NO_OPENSSL\"; fi\nsubject=CN=newfi.ru\nissuer=C=US, O=Let's Encrypt, CN=YE1\nserial=05857CDD0AC0102BE9D7AA729B23F41AA698\nnotBefore=Jul 1 14:53:39 2026 GMT\nnotAfter=Sep 29 14:53:38 2026 GMT\nX509v3 Subject Alternative Name: \n DNS:newfi.ru, DNS:www.newfi.ru\n[command_rc=0]\n\n===== CONTAINER RUNTIMES =====\n\n--- tool versions ---\nCOMMAND: for c in git curl jq python3 php docker podman kubectl helm k3s crictl nerdctl mysql mariadb redis-cli openssl; do if command -v \"$c\" >/dev/null 2>&1; then printf \"%-12s %s\\n\" \"$c\" \"$(command -v \"$c\")\"; case \"$c\" in git) git --version;; curl) curl --version | head -1;; jq) jq --version;; python3) python3 --version;; php) php -v | head -2;; docker) docker --version;; podman) podman --version;; kubectl) kubectl version --client 2>/dev/null || true;; helm) helm version --short 2>/dev/null || true;; k3s) k3s --version | head -2;; crictl) crictl --version;; nerdctl) nerdctl --version;; mysql|mariadb) \"$c\" --version;; redis-cli) redis-cli --version;; openssl) openssl version;; esac; fi; done\ngit /usr/bin/git\ngit version 2.47.3\ncurl /usr/bin/curl\ncurl 8.14.1 (x86_64-pc-linux-gnu) libcurl/8.14.1 OpenSSL/3.5.6 zlib/1.3.1 brotli/1.1.0 zstd/1.5.7 libidn2/2.3.8 libpsl/0.21.2 libssh2/1.11.1 nghttp2/1.64.0 nghttp3/1.8.0 librtmp/2.3 OpenLDAP/2.6.10\njq /usr/bin/jq\njq-1.7\npython3 /usr/bin/python3\nPython 3.13.5\npodman /usr/bin/podman\npodman version 5.4.2\nopenssl /usr/bin/openssl\nOpenSSL 3.5.6 7 Apr 2026 (Library: OpenSSL 3.5.6 7 Apr 2026)\n[command_rc=0]\n\n--- Docker containers ---\nCOMMAND: if command -v docker >/dev/null 2>&1; then docker ps -a --no-trunc --format \"table {{.ID}}\\t{{.Names}}\\t{{.Image}}\\t{{.Status}}\\t{{.Ports}}\"; docker volume ls; docker network ls; else echo \"NO_DOCKER\"; fi\nNO_DOCKER\n[command_rc=0]\n\n--- Docker relevant mounts ---\nCOMMAND: if command -v docker >/dev/null 2>&1; then for c in $(docker ps -a --format \"{{.Names}}\" | grep -Ei \"gitea|newfi|xenforo|maria|mysql|redis\" | head -50); do echo \"### $c\"; docker inspect --format \"Image={{.Config.Image}} Restart={{.HostConfig.RestartPolicy.Name}} Mounts={{range .Mounts}}{{.Type}}:{{.Source}}->{{.Destination}};{{end}}\" \"$c\" 2>/dev/null || true; done; else echo \"NO_DOCKER\"; fi\nNO_DOCKER\n[command_rc=0]\n\n--- Podman containers ---\nCOMMAND: if command -v podman >/dev/null 2>&1; then podman ps -a --no-trunc; podman volume ls; else echo \"NO_PODMAN\"; fi\nCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\naa350cac62aa0235a41c70f8650092e69fa92e815c08c8e4e2aeea65a8accc46 ghcr.io/analogj/scrutiny:latest-omnibus /init 9 days ago Up 9 days 127.0.0.1:8086->8080/tcp scrutiny\n[command_rc=0]\n\n===== KUBERNETES INVENTORY =====\nKUBECTL_NOT_AVAILABLE\n\n===== GITEA DISCOVERY =====\n\n--- Gitea binary and safe configuration keys ---\nCOMMAND: \n if command -v gitea >/dev/null 2>&1; then gitea --version; fi\n find /etc /var/lib/gitea /data /srv /opt /home -maxdepth 6 -type f \\\n \\( -name app.ini -o -name gitea.ini \\) -print 2>/dev/null | head -100 \\\n | while read -r f; do\n echo \"### CONFIG $f\"\n stat -c \"%A %U:%G %s %y %n\" \"$f\" 2>/dev/null || true\n grep -nE \"^[[:space:]]*(APP_NAME|RUN_USER|RUN_MODE|DOMAIN|SSH_DOMAIN|HTTP_ADDR|HTTP_PORT|ROOT_URL|DISABLE_REGISTRATION|INSTALL_LOCK|DB_TYPE|PATH|LFS_START_SERVER|OFFLINE_MODE)[[:space:]]*=\" \"$f\" 2>/dev/null || true\n done\n\n[command_rc=0]\n\n--- Gitea API probes ---\nCOMMAND: \n if command -v curl >/dev/null 2>&1; then\n for base in \\\n http://127.0.0.1:3000 \\\n http://127.0.0.1:3001 \\\n http://gitea:3000 \\\n http://gitea-http:3000 \\\n http://gitea-http.gitea.svc.cluster.local:3000 \\\n https://git.gram1.ru\n do\n echo \"### BASE $base\"\n timeout 12 curl -k -fsS --connect-timeout 4 --max-time 10 \"$base/api/v1/version\" || true\n printf \"\\n\"\n for q in newfi newfdom newf xenforo; do\n echo \"QUERY=$q\"\n timeout 15 curl -k -fsS -G --connect-timeout 4 --max-time 12 \\\n --data-urlencode \"q=$q\" --data-urlencode \"limit=50\" \\\n \"$base/api/v1/repos/search\" || true\n printf \"\\n\"\n done\n done\n else\n echo \"NO_CURL\"\n fi\n\n### BASE http://127.0.0.1:3000\ncurl: (7) Failed to connect to 127.0.0.1 port 3000 after 0 ms: Could not connect to server\n\nQUERY=newfi\ncurl: (7) Failed to connect to 127.0.0.1 port 3000 after 0 ms: Could not connect to server\n\nQUERY=newfdom\ncurl: (7) Failed to connect to 127.0.0.1 port 3000 after 0 ms: Could not connect to server\n\nQUERY=newf\ncurl: (7) Failed to connect to 127.0.0.1 port 3000 after 0 ms: Could not connect to server\n\nQUERY=xenforo\ncurl: (7) Failed to connect to 127.0.0.1 port 3000 after 0 ms: Could not connect to server\n\n### BASE http://127.0.0.1:3001\ncurl: (7) Failed to connect to 127.0.0.1 port 3001 after 0 ms: Could not connect to server\n\nQUERY=newfi\ncurl: (7) Failed to connect to 127.0.0.1 port 3001 after 0 ms: Could not connect to server\n\nQUERY=newfdom\ncurl: (7) Failed to connect to 127.0.0.1 port 3001 after 0 ms: Could not connect to server\n\nQUERY=newf\ncurl: (7) Failed to connect to 127.0.0.1 port 3001 after 0 ms: Could not connect to server\n\nQUERY=xenforo\ncurl: (7) Failed to connect to 127.0.0.1 port 3001 after 0 ms: Could not connect to server\n\n### BASE http://gitea:3000\ncurl: (6) Could not resolve host: gitea\n\nQUERY=newfi\ncurl: (6) Could not resolve host: gitea\n\nQUERY=newfdom\ncurl: (6) Could not resolve host: gitea\n\nQUERY=newf\ncurl: (6) Could not resolve host: gitea\n\nQUERY=xenforo\ncurl: (6) Could not resolve host: gitea\n\n### BASE http://gitea-http:3000\ncurl: (6) Could not resolve host: gitea-http\n\nQUERY=newfi\ncurl: (6) Could not resolve host: gitea-http\n\nQUERY=newfdom\ncurl: (6) Could not resolve host: gitea-http\n\nQUERY=newf\ncurl: (6) Could not resolve host: gitea-http\n\nQUERY=xenforo\ncurl: (6) Could not resolve host: gitea-http\n\n### BASE http://gitea-http.gitea.svc.cluster.local:3000\ncurl: (6) Could not resolve host: gitea-http.gitea.svc.cluster.local\n\nQUERY=newfi\ncurl: (6) Could not resolve host: gitea-http.gitea.svc.cluster.local\n\nQUERY=newfdom\ncurl: (6) Could not resolve host: gitea-http.gitea.svc.cluster.local\n\nQUERY=newf\ncurl: (6) Could not resolve host: gitea-http.gitea.svc.cluster.local\n\nQUERY=xenforo\ncurl: (6) Could not resolve host: gitea-http.gitea.svc.cluster.local\n\n### BASE https://git.gram1.ru\n{\"version\":\"1.26.2\"}\nQUERY=newfi\n{\"ok\":true,\"data\":[]}\nQUERY=newfdom\n{\"ok\":true,\"data\":[]}\nQUERY=newf\n{\"ok\":true,\"data\":[]}\nQUERY=xenforo\n{\"ok\":true,\"data\":[]}\n[command_rc=0]\n\n===== GITEA REPOSITORY FILESYSTEM =====\n\n--- known repository roots ---\nCOMMAND: \n for d in \\\n /var/lib/gitea/data/gitea-repositories \\\n /var/lib/gitea/gitea-repositories \\\n /data/git/repositories \\\n /data/gitea/gitea-repositories \\\n /srv/gitea/data/gitea-repositories \\\n /home/git/gitea-repositories\n do\n if [ -d \"$d\" ]; then\n echo \"ROOT=$d\"\n stat -c \"%A %U:%G %s %y %n\" \"$d\" 2>/dev/null || true\n find \"$d\" -maxdepth 3 -type d -name \"*.git\" -print 2>/dev/null | sort | head -1000\n fi\n done\n\n[command_rc=0]\n\n===== WORKING COPY DISCOVERY =====\n\n--- candidate Git worktrees ---\nCOMMAND: \n for root in /srv /opt /var/www /data /home /workspace /workspaces /mnt; do\n [ -d \"$root\" ] || continue\n find \"$root\" -maxdepth 7 -type d -name .git -print 2>/dev/null\n done | sed \"s#/.git$##\" | sort -u | grep -Ei \"newfi|newfdom|newf|xenforo|portal\" | head -200\n\nsed: -e expression #1, char 9: unterminated `s' command\n[command_rc=0]\n\n===== XENFORO DISCOVERY =====\n\n--- XenForo files ---\nCOMMAND: \n for root in /srv /opt /var/www /data /home /workspace /workspaces /mnt; do\n [ -d \"$root\" ] || continue\n find \"$root\" -maxdepth 9 -type f -path \"*/src/XF.php\" -print 2>/dev/null\n done | sort -u | head -100\n\n[command_rc=0]\n\n===== KUBERNETES POD INTERNAL READ-ONLY PROBES =====\n\n===== BACKUP AND STORAGE EVIDENCE =====\n\n--- backup directories metadata ---\nCOMMAND: \n for d in /backup /backups /var/backups /srv/backup /srv/backups /data/backup /data/backups /mnt/backup /mnt/backups; do\n [ -d \"$d\" ] || continue\n echo \"### $d\"\n stat -c \"%A %U:%G %s %y %n\" \"$d\" 2>/dev/null || true\n find \"$d\" -maxdepth 3 -type f -printf \"%TY-%Tm-%TdT%TH:%TM:%TS %s %p\\n\" 2>/dev/null \\\n | sort -r | head -200\n done\n\n### /var/backups\ndrwxr-xr-x root:root 4096 2026-08-05 19:26:22.485925089 +0300 /var/backups\n2026-08-05T19:26:22.4871881170 1676 /var/backups/skladchik-moderator-assistant/HOMELAB-SKLADCHIK-MODERATOR-CORE-INSTALL-V2-20260805T162500Z/manifest.json\n2026-08-05T18:23:38.8848347980 1064 /var/backups/homelab-cluster-admin/HOMELAB-CLUSTER-ADMIN-UPDATES-V30-INDEX-WATCHER-ATOMIC-CHANGE-20260805T151800Z/manifest.json\n2026-08-05T18:03:06.2838781070 1064 /var/backups/homelab-cluster-admin/HOMELAB-CLUSTER-ADMIN-UPDATES-V28-MEMBERS-FIXED-ATOMIC-CHANGE-20260805T150500Z/manifest.json\n2026-07-24T13:17:50.1829042900 9886 /var/backups/homelab-vm-local-dumps-2cloud/desired.pre-drain-442.sh\n2026-07-24T13:17:50.1767855920 9886 /var/backups/homelab-vm-local-dumps-2cloud/runtime.pre-drain-442.sh\n2026-07-24T04:27:35.8455169720 121 /var/backups/gitea-relay/gitea-20260724T012733Z.zip.sha256\n2026-07-24T04:27:35.7305152140 38476973 /var/backups/gitea-relay/gitea-20260724T012733Z.zip\n2026-07-23T04:30:17.1876546570 121 /var/backups/gitea-relay/gitea-20260723T013014Z.zip.sha256\n2026-07-23T04:30:17.0676528050 35213513 /var/backups/gitea-relay/gitea-20260723T013014Z.zip\n2026-07-22T23:44:23.5207990880 1176 /var/backups/homelab-reader/homelab-chat-run-linked.pre-270.20260722T205130Z\n2026-07-22T23:38:55.8093299500 686 /var/backups/homelab-reader/homelab-chat-run-linked.pre-267.20260722T204423Z\n2026-07-22T17:07:19.0811873920 482 /var/backups/homelab-reference/OPERATIONS.md.before-tail-closeout.20260722T140719Z\n2026-07-22T11:03:47.1137759030 561 /var/backups/homelab-reference/20260722T081210949547Z/README.md\n2026-07-22T11:03:47.1132880790 1471 /var/backups/homelab-reference/20260722T081210949547Z/manifest.json\n2026-07-22T10:34:58.6978834310 603 /var/backups/homelab-reference/20260722T080015404968Z/README.md\n2026-07-22T10:34:58.6966043260 1743 /var/backups/homelab-reference/20260722T080015404968Z/manifest.json\n2026-07-18T13:52:30.4157800660 20463 /var/backups/skladchik-reports-monitor-supervisor/supervisor.pre-cookie-race-fix-423.py\n2026-07-06T18:49:49.7406450500 7272 /var/backups/homelab-vm-local-dumps-2cloud/runtime.pre-434.sh\n2026-07-06T18:49:49.7406450500 7272 /var/backups/homelab-vm-local-dumps-2cloud/desired.pre-434.sh\n2026-06-30T16:24:58.9872367120 819301 /var/backups/dpkg.status.0\n2026-06-29T21:03:45.6401889080 221140 /var/backups/dpkg.status.1.gz\n2026-06-29T21:03:44.2631678590 6098 /var/backups/apt.extended_states.0\n2026-06-24T11:54:21.1275314850 220453 /var/backups/dpkg.status.2.gz\n2026-06-23T03:39:15.2281940980 219584 /var/backups/dpkg.status.3.gz\n2026-06-23T03:38:46.5077573390 810 /var/backups/apt.extended_states.1.gz\n2026-06-21T01:09:08.3504122800 219552 /var/backups/dpkg.status.4.gz\n2026-06-21T01:08:56.4252370290 799 /var/backups/apt.extended_states.2.gz\n2026-06-20T23:27:28.6047672330 209054 /var/backups/dpkg.status.5.gz\n2026-06-17T11:19:07.3554401710 193756 /var/backups/dpkg.status.6.gz\n2026-06-16T23:16:02.5625482060 256 /var/backups/apt.extended_states.3.gz\n2026-06-15T20:15:32.5513041750 198 /var/backups/apt.extended_states.4.gz\n2026-06-15T00:00:23.6784006090 40960 /var/backups/alternatives.tar.0\n2026-06-14T17:55:00.1310108600 180 /var/backups/apt.extended_states.5.gz\n2026-06-14T12:00:14.9378376070 353 /var/backups/dpkg.diversions.6.gz\n2026-06-14T12:00:14.9378376070 353 /var/backups/dpkg.diversions.5.gz\n2026-06-14T12:00:14.9378376070 353 /var/backups/dpkg.diversions.4.gz\n2026-06-14T12:00:14.9378376070 353 /var/backups/dpkg.diversions.3.gz\n2026-06-14T12:00:14.9378376070 353 /var/backups/dpkg.diversions.2.gz\n2026-06-14T12:00:14.9378376070 353 /var/backups/dpkg.diversions.1.gz\n2026-06-14T12:00:14.9378376070 1709 /var/backups/dpkg.diversions.0\n2026-06-14T10:03:00.2421098020 290 /var/backups/dpkg.statoverride.0\n2026-06-14T10:03:00.2421098020 186 /var/backups/dpkg.statoverride.6.gz\n2026-06-14T10:03:00.2421098020 186 /var/backups/dpkg.statoverride.5.gz\n2026-06-14T10:03:00.2421098020 186 /var/backups/dpkg.statoverride.4.gz\n2026-06-14T10:03:00.2421098020 186 /var/backups/dpkg.statoverride.3.gz\n2026-06-14T10:03:00.2421098020 186 /var/backups/dpkg.statoverride.2.gz\n2026-06-14T10:03:00.2421098020 186 /var/backups/dpkg.statoverride.1.gz\n2026-05-21T14:31:34.0000000000 6 /var/backups/dpkg.arch.0\n2026-05-21T14:31:34.0000000000 38 /var/backups/dpkg.arch.6.gz\n2026-05-21T14:31:34.0000000000 38 /var/backups/dpkg.arch.5.gz\n2026-05-21T14:31:34.0000000000 38 /var/backups/dpkg.arch.4.gz\n2026-05-21T14:31:34.0000000000 38 /var/backups/dpkg.arch.3.gz\n2026-05-21T14:31:34.0000000000 38 /var/backups/dpkg.arch.2.gz\n2026-05-21T14:31:34.0000000000 38 /var/backups/dpkg.arch.1.gz\n[command_rc=0]\n\n--- cron backup references ---\nCOMMAND: for f in /etc/crontab /etc/cron.d/*; do [ -f \"$f\" ] || continue; echo \"### $f\"; grep -nEi \"backup|dump|mysqldump|mariadb|gitea|newfi|xenforo|restic|borg|rclone\" \"$f\" 2>/dev/null || true; done\n### /etc/crontab\n### /etc/cron.d/e2scrub_all\n### /etc/cron.d/homelab-context-refresh\n### /etc/cron.d/homelab-context-refresh.bak.20260721T105117Z\n### /etc/cron.d/homelab-context-refresh.bak.20260721T110341Z\n### /etc/cron.d/homelab-context-refresh.bak.20260721T110857Z\n### /etc/cron.d/homelab-context-refresh.bak.20260721T110932Z\n### /etc/cron.d/vzdump\n1:# cluster wide vzdump cron schedule\n### /etc/cron.d/zfsutils-linux\n[command_rc=0]\n\n--- backup tools ---\nCOMMAND: for c in restic borg rclone duplicity pg_dump mysqldump mariadb-dump; do command -v \"$c\" >/dev/null 2>&1 && { echo \"### $c\"; \"$c\" --version 2>&1 | head -5; }; done\n### restic\nunknown flag: --version\n### rclone\nrclone v1.60.1-DEV\n- os/version: debian 13.5 (64 bit)\n- os/kernel: 7.0.12-1-pve (x86_64)\n- os/type: linux\n- os/arch: amd64\n[command_rc=1]\n\n===== FINAL READ-ONLY ASSERTIONS =====\nchanges_made=false\nmutation_outcome=NO_MUTATION\nproduction_changed=false\nrollback_started=false\nrollback_restored=null\ninventory_finished_at_utc=2026-08-06T13:44:51Z\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"nfro-260806-1630-9c2f\",\"status\":\"SUCCESS\",\"rc\":0,\"changes_made\":false,\"mutation_outcome\":\"NO_MUTATION\",\"production_changed\":false,\"rollback_started\":false,\"rollback_restored\":null,\"control_plane_error\":null}\n"
}