From 59aaa55bf9ade53eece1e8c336fdcc04bd5e2f93 Mon Sep 17 00:00:00 2001 From: homelab-runtime-publisher Date: Fri, 11 Sep 2026 23:33:30 +0000 Subject: [PATCH] runtime: publish SUPPORT-260912-INFRA-DR-BACKUPV2-CONTROL-BACKUP-LOGIC-255R1 --- ...R-BACKUPV2-CONTROL-BACKUP-LOGIC-255R1.json | 38 +++ ...DR-BACKUPV2-CONTROL-BACKUP-LOGIC-255R1.txt | 123 +++++++ runtime/latest.json | 16 +- runtime/latest.txt | 303 +++++------------- 4 files changed, 249 insertions(+), 231 deletions(-) create mode 100644 runtime/history/SUPPORT-260912-INFRA-DR-BACKUPV2-CONTROL-BACKUP-LOGIC-255R1.json create mode 100644 runtime/history/SUPPORT-260912-INFRA-DR-BACKUPV2-CONTROL-BACKUP-LOGIC-255R1.txt diff --git a/runtime/history/SUPPORT-260912-INFRA-DR-BACKUPV2-CONTROL-BACKUP-LOGIC-255R1.json b/runtime/history/SUPPORT-260912-INFRA-DR-BACKUPV2-CONTROL-BACKUP-LOGIC-255R1.json new file mode 100644 index 00000000..ebacfdd9 --- /dev/null +++ b/runtime/history/SUPPORT-260912-INFRA-DR-BACKUPV2-CONTROL-BACKUP-LOGIC-255R1.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "SUPPORT-260912-INFRA-DR-BACKUPV2-CONTROL-BACKUP-LOGIC-255R1", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "read-only", + "component": "infra-dr-backupv2-control-backup-logic", + "started_at_utc": "2026-09-11T23:33:29Z", + "finished_at_utc": "2026-09-11T23:33:29Z", + "reference_register_checked": true, + "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", + "error_register_checked": true, + "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", + "command_sha256": "2c1d227e011446eb686ecf97218c70c89f651616f45b4bb3e68f32bba3533ace", + "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": "4be463d9015eac40cac32a68aa1b48e571e45d59f953244a55f8eba2d6e159cb", + "sanitized_output_sha256": "f367fb4787ad044b2e839dc8ca1d49f1687c27df5a650940aeacd85661a27130", + "output_truncated_in_json": false, + "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", + "output": "LOGIC255_BEGIN\nCOMMAND_ID=SUPPORT-260912-INFRA-DR-BACKUPV2-CONTROL-BACKUP-LOGIC-255R1\nMODE=READ_ONLY_LOCAL_SOURCE_LOGIC\nCLOUD_CALLS_BY_255=0\nRCLONE_COMMANDS_EXECUTED_BY_255=0\nERROR_REGISTER_CHECK=READ\nERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0\nREFERENCE_CHECK=READ\nREFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66\nAUTHORITY_FRESH_READ=OK\nTARGET_PATH=/usr/local/sbin/homelab-control-backup\nTARGET_SHA256=0b3a0f685d4e67cb86250df89a4918aff2e6c67799b7d35b0e54b1bbc016ee57\nTARGET_SHA_MATCH=YES\nUNIT_PATH=/etc/systemd/system/homelab-control-backup.service\nUNIT_SHA256=428d3e1f3042c3347b7c34b6f190e44fa35f7a97264eec3974239f581c9b9250\nUNIT_SHA_MATCH=YES\nTARGET_LINE_COUNT=150\nFUNCTION_COUNT=0\nSOURCE_SKELETON_BEGIN\nSRC_LINE_001=#!/usr/bin/env bash\nSRC_LINE_002=set -Eeuo pipefail\nSRC_LINE_003=umask 077\nSRC_LINE_004=LOGICAL_ID=control-bootstrap-v2\nSRC_LINE_005=DUE_SECONDS=43200\nSRC_LINE_006=SLA_SECONDS=86400\nSRC_LINE_007=STATE_ROOT=\nSRC_LINE_008=STATE_DIR=$STATE_ROOT/$LOGICAL_ID\nSRC_LINE_009=EVIDENCE_ROOT=\nSRC_LINE_010=HEALTH=.json\nSRC_LINE_011=STAGE_ROOT=\nSRC_LINE_012=VERIFY_ROOT=\nSRC_LINE_013=LOCK=.lock\nSRC_LINE_014=HEAVY_LOCK=/run/homelab-backup-heavy.lock\nSRC_LINE_015=RCLONE_CONFIG_SOURCE=${RCLONE_CONFIG:-/root/.config/rclone/[SENSITIVE_FILE]}\nSRC_LINE_016=TRANSPORT=\nSRC_LINE_017=TRANSPORT_SHA=\nSRC_LINE_018=BUILDER=\nSRC_LINE_019=BUILDER_SHA=\nSRC_LINE_020=REMOTE_A=pve01-mail-01-crypt:homelab-backups\nSRC_LINE_021=REMOTE_B=pve01-mail-02-crypt:homelab-backups\nSRC_LINE_022=CLOUD_WRITE_MARKER=${:-}\nSRC_LINE_023=\nSRC_LINE_024=die(){ printf 'CONTROL_BACKUP_ERROR=%s' \"$1\" >&2; exit \"${2:-65}\"; }\nSRC_LINE_025=for c in jq date find sort tail cut sha256sum stat flock rclone mktemp cmp awk mkdir rm install xargs grep cat mv chmod; do command -v \"$c\" >/dev/null || die \"TOOL_MISSING_$c\" 69; done\nSRC_LINE_026=[[ -x \"$TRANSPORT\" && ! -L \"$TRANSPORT\" ]] || die TRANSPORT_UNSAFE 69\nSRC_LINE_027=[[ \"$(sha256sum \"$TRANSPORT\"|awk '{print $1}')\" == \"$TRANSPORT_SHA\" ]] || die TRANSPORT_SHA_DRIFT 65\nSRC_LINE_028=[[ -x \"$BUILDER\" && ! -L \"$BUILDER\" ]] || die BUILDER_UNSAFE 69\nSRC_LINE_029=[[ \"$(sha256sum \"$BUILDER\"|awk '{print $1}')\" == \"$BUILDER_SHA\" ]] || die BUILDER_SHA_DRIFT 65\nSRC_LINE_030=\nSOURCE_SKELETON_END\nSOURCE_REDACTED_LINE_COUNT=0\nFIXED_REMOTE_PVE01_MAIL_01_CRYPT_LINES=20\nFIXED_REMOTE_PVE01_MAIL_02_CRYPT_LINES=21\nMARKER_RCLONE_LINES=15,25,66,67,68,74,79,94\nMARKER_SEALED_LINES=43,46,92,114,129,142\nMARKER_VERIFY_SEALED_LINES=92\nMARKER_BACKUP_DELETE_LINES=129,139\nMARKER_LOCAL_CLEANUP_LINES=NONE\nMARKER_RUN_BACKUP_LINES=109,146,147\nMARKER_VERIFY_GENERATION_LINES=87,120,129,141,148\nMARKER_CLEANUP_VERIFY_LINES=95,106\nMARKER_RECONSTRUCT_LINES=70,97,103\nMARKER_SPLIT_LINES=NONE\nMARKER_536870912_LINES=NONE\nMARKER_512M_LINES=NONE\nMARKER_PART_LINES=71,72,73,74,78,79,80,81,82\nUNIT_LINE_COUNT=16\nUNIT_SKELETON_BEGIN\nUNIT_LINE_001=[Unit]\nUNIT_LINE_002=Description=Homelab recurring CONTROL cloud quorum backup\nUNIT_LINE_003=After=network-online.target\nUNIT_LINE_004=Wants=network-online.target\nUNIT_LINE_005=ConditionPathExists=\nUNIT_LINE_006=ConditionPathExists=\nUNIT_LINE_007=\nUNIT_LINE_008=[Service]\nUNIT_LINE_009=Type=oneshot\nUNIT_LINE_010=ExecStart= run\nUNIT_LINE_011=User=root\nUNIT_LINE_012=Group=root\nUNIT_LINE_013=UMask=0077\nUNIT_LINE_014=Nice=10\nUNIT_LINE_015=IOSchedulingClass=best-effort\nUNIT_LINE_016=IOSchedulingPriority=7\nUNIT_SKELETON_END\nUNIT_REDACTED_LINE_COUNT=0\nFILES_WRITTEN_BY_PAYLOAD=0\nSYSTEMD_MUTATIONS_BY_255=0\nLOGIC255_READY_FOR_MINIMAL_PATCH=YES\nLOGIC255_END\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-260912-INFRA-DR-BACKUPV2-CONTROL-BACKUP-LOGIC-255R1\",\"status\":\"OK\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\n" +} diff --git a/runtime/history/SUPPORT-260912-INFRA-DR-BACKUPV2-CONTROL-BACKUP-LOGIC-255R1.txt b/runtime/history/SUPPORT-260912-INFRA-DR-BACKUPV2-CONTROL-BACKUP-LOGIC-255R1.txt new file mode 100644 index 00000000..3d53ef7a --- /dev/null +++ b/runtime/history/SUPPORT-260912-INFRA-DR-BACKUPV2-CONTROL-BACKUP-LOGIC-255R1.txt @@ -0,0 +1,123 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=SUPPORT-260912-INFRA-DR-BACKUPV2-CONTROL-BACKUP-LOGIC-255R1 +STATUS=OK +RC=0 +HOST=pve01 +MODE=read-only +COMPONENT=infra-dr-backupv2-control-backup-logic +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 +COMMAND_SHA256=2c1d227e011446eb686ecf97218c70c89f651616f45b4bb3e68f32bba3533ace +DUPLICATE_FAILED_COMMAND_BLOCKED=false +EXECUTION_STARTED=true +CHANGE_DECLARED=false +RESULT_CONTRACT_VALID=true +RESULT_CONTRACT_STATUS=NOT_APPLICABLE +RESULT_CONTRACT_ERROR=NONE +COMMAND_RC=0 +CHANGES_MADE=false +ROLLBACK_STARTED=false +ROLLBACK_RESTORED=null +MUTATION_OUTCOME=NO_MUTATION +SANITIZED=yes +SECRETS_INCLUDED=no +PRIVATE_ADDRESSES_INCLUDED=no +RAW_EVIDENCE_SHA256=4be463d9015eac40cac32a68aa1b48e571e45d59f953244a55f8eba2d6e159cb +SANITIZED_OUTPUT_SHA256=f367fb4787ad044b2e839dc8ca1d49f1687c27df5a650940aeacd85661a27130 +OUTPUT_BEGIN +LOGIC255_BEGIN +COMMAND_ID=SUPPORT-260912-INFRA-DR-BACKUPV2-CONTROL-BACKUP-LOGIC-255R1 +MODE=READ_ONLY_LOCAL_SOURCE_LOGIC +CLOUD_CALLS_BY_255=0 +RCLONE_COMMANDS_EXECUTED_BY_255=0 +ERROR_REGISTER_CHECK=READ +ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 +REFERENCE_CHECK=READ +REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 +AUTHORITY_FRESH_READ=OK +TARGET_PATH=/usr/local/sbin/homelab-control-backup +TARGET_SHA256=0b3a0f685d4e67cb86250df89a4918aff2e6c67799b7d35b0e54b1bbc016ee57 +TARGET_SHA_MATCH=YES +UNIT_PATH=/etc/systemd/system/homelab-control-backup.service +UNIT_SHA256=428d3e1f3042c3347b7c34b6f190e44fa35f7a97264eec3974239f581c9b9250 +UNIT_SHA_MATCH=YES +TARGET_LINE_COUNT=150 +FUNCTION_COUNT=0 +SOURCE_SKELETON_BEGIN +SRC_LINE_001=#!/usr/bin/env bash +SRC_LINE_002=set -Eeuo pipefail +SRC_LINE_003=umask 077 +SRC_LINE_004=LOGICAL_ID=control-bootstrap-v2 +SRC_LINE_005=DUE_SECONDS=43200 +SRC_LINE_006=SLA_SECONDS=86400 +SRC_LINE_007=STATE_ROOT= +SRC_LINE_008=STATE_DIR=$STATE_ROOT/$LOGICAL_ID +SRC_LINE_009=EVIDENCE_ROOT= +SRC_LINE_010=HEALTH=.json +SRC_LINE_011=STAGE_ROOT= +SRC_LINE_012=VERIFY_ROOT= +SRC_LINE_013=LOCK=.lock +SRC_LINE_014=HEAVY_LOCK=/run/homelab-backup-heavy.lock +SRC_LINE_015=RCLONE_CONFIG_SOURCE=${RCLONE_CONFIG:-/root/.config/rclone/[SENSITIVE_FILE]} +SRC_LINE_016=TRANSPORT= +SRC_LINE_017=TRANSPORT_SHA= +SRC_LINE_018=BUILDER= +SRC_LINE_019=BUILDER_SHA= +SRC_LINE_020=REMOTE_A=pve01-mail-01-crypt:homelab-backups +SRC_LINE_021=REMOTE_B=pve01-mail-02-crypt:homelab-backups +SRC_LINE_022=CLOUD_WRITE_MARKER=${:-} +SRC_LINE_023= +SRC_LINE_024=die(){ printf 'CONTROL_BACKUP_ERROR=%s' "$1" >&2; exit "${2:-65}"; } +SRC_LINE_025=for c in jq date find sort tail cut sha256sum stat flock rclone mktemp cmp awk mkdir rm install xargs grep cat mv chmod; do command -v "$c" >/dev/null || die "TOOL_MISSING_$c" 69; done +SRC_LINE_026=[[ -x "$TRANSPORT" && ! -L "$TRANSPORT" ]] || die TRANSPORT_UNSAFE 69 +SRC_LINE_027=[[ "$(sha256sum "$TRANSPORT"|awk '{print $1}')" == "$TRANSPORT_SHA" ]] || die TRANSPORT_SHA_DRIFT 65 +SRC_LINE_028=[[ -x "$BUILDER" && ! -L "$BUILDER" ]] || die BUILDER_UNSAFE 69 +SRC_LINE_029=[[ "$(sha256sum "$BUILDER"|awk '{print $1}')" == "$BUILDER_SHA" ]] || die BUILDER_SHA_DRIFT 65 +SRC_LINE_030= +SOURCE_SKELETON_END +SOURCE_REDACTED_LINE_COUNT=0 +FIXED_REMOTE_PVE01_MAIL_01_CRYPT_LINES=20 +FIXED_REMOTE_PVE01_MAIL_02_CRYPT_LINES=21 +MARKER_RCLONE_LINES=15,25,66,67,68,74,79,94 +MARKER_SEALED_LINES=43,46,92,114,129,142 +MARKER_VERIFY_SEALED_LINES=92 +MARKER_BACKUP_DELETE_LINES=129,139 +MARKER_LOCAL_CLEANUP_LINES=NONE +MARKER_RUN_BACKUP_LINES=109,146,147 +MARKER_VERIFY_GENERATION_LINES=87,120,129,141,148 +MARKER_CLEANUP_VERIFY_LINES=95,106 +MARKER_RECONSTRUCT_LINES=70,97,103 +MARKER_SPLIT_LINES=NONE +MARKER_536870912_LINES=NONE +MARKER_512M_LINES=NONE +MARKER_PART_LINES=71,72,73,74,78,79,80,81,82 +UNIT_LINE_COUNT=16 +UNIT_SKELETON_BEGIN +UNIT_LINE_001=[Unit] +UNIT_LINE_002=Description=Homelab recurring CONTROL cloud quorum backup +UNIT_LINE_003=After=network-online.target +UNIT_LINE_004=Wants=network-online.target +UNIT_LINE_005=ConditionPathExists= +UNIT_LINE_006=ConditionPathExists= +UNIT_LINE_007= +UNIT_LINE_008=[Service] +UNIT_LINE_009=Type=oneshot +UNIT_LINE_010=ExecStart= run +UNIT_LINE_011=User=root +UNIT_LINE_012=Group=root +UNIT_LINE_013=UMask=0077 +UNIT_LINE_014=Nice=10 +UNIT_LINE_015=IOSchedulingClass=best-effort +UNIT_LINE_016=IOSchedulingPriority=7 +UNIT_SKELETON_END +UNIT_REDACTED_LINE_COUNT=0 +FILES_WRITTEN_BY_PAYLOAD=0 +SYSTEMD_MUTATIONS_BY_255=0 +LOGIC255_READY_FOR_MINIMAL_PATCH=YES +LOGIC255_END +HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-260912-INFRA-DR-BACKUPV2-CONTROL-BACKUP-LOGIC-255R1","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null} + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index 4cf96ae4..ebacfdd9 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,19 +1,19 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "SUPPORT-260912-INFRA-DR-BACKUPV2-CONTROL-BACKUP-STATIC-254R1", + "command_id": "SUPPORT-260912-INFRA-DR-BACKUPV2-CONTROL-BACKUP-LOGIC-255R1", "status": "OK", "rc": 0, "host": "pve01", "mode": "read-only", - "component": "infra-dr-backupv2-control-backup-static", - "started_at_utc": "2026-09-11T23:29:07Z", - "finished_at_utc": "2026-09-11T23:29:07Z", + "component": "infra-dr-backupv2-control-backup-logic", + "started_at_utc": "2026-09-11T23:33:29Z", + "finished_at_utc": "2026-09-11T23:33:29Z", "reference_register_checked": true, "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", "error_register_checked": true, "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", - "command_sha256": "0d1c1e2624f3ddfc06d59a300295efe0f8010bee2dfd582760022ba3bfac16f3", + "command_sha256": "2c1d227e011446eb686ecf97218c70c89f651616f45b4bb3e68f32bba3533ace", "duplicate_failed_command_blocked": false, "block_reason": null, "execution_started": true, @@ -30,9 +30,9 @@ "secrets_included": false, "private_addresses_included": false, "raw_evidence_retained_locally": true, - "raw_evidence_sha256": "1daa06d99f984ed4228e1380fc92b69a832c3c7dd89f74d9838e95a51a875daf", - "sanitized_output_sha256": "1daa06d99f984ed4228e1380fc92b69a832c3c7dd89f74d9838e95a51a875daf", + "raw_evidence_sha256": "4be463d9015eac40cac32a68aa1b48e571e45d59f953244a55f8eba2d6e159cb", + "sanitized_output_sha256": "f367fb4787ad044b2e839dc8ca1d49f1687c27df5a650940aeacd85661a27130", "output_truncated_in_json": false, "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "STATIC254_BEGIN\nCOMMAND_ID=SUPPORT-260912-INFRA-DR-BACKUPV2-CONTROL-BACKUP-STATIC-254R1\nMODE=READ_ONLY_LOCAL_STATIC_INSPECTION\nCLOUD_CALLS_BY_254=0\nRCLONE_COMMANDS_EXECUTED_BY_254=0\nERROR_REGISTER_CHECK=READ\nERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0\nREFERENCE_CHECK=READ\nREFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66\nAUTHORITY_FRESH_READ=OK\nTARGET_PATH=/usr/local/sbin/homelab-control-backup\nTARGET_SHA256=0b3a0f685d4e67cb86250df89a4918aff2e6c67799b7d35b0e54b1bbc016ee57\nTARGET_EXPECTED_SHA256=0b3a0f685d4e67cb86250df89a4918aff2e6c67799b7d35b0e54b1bbc016ee57\nTARGET_SHA_MATCH=YES\nTARGET_SIZE=11862\nTARGET_MODE=0755\nTARGET_LINE_COUNT=150\nTARGET_SHEBANG_CLASS=SHELL\nFUNCTION_COUNT=7\nFUNCTION_01_NAME=latest_state\nFUNCTION_01_START_LINE=31\nFUNCTION_01_END_LINE=34\nFUNCTION_01_BODY_SHA256=bec501f7ff7546300cd64d2544a149d608e5c682ce2de15996f53d847645f797\nFUNCTION_02_NAME=state_decision\nFUNCTION_02_START_LINE=35\nFUNCTION_02_END_LINE=57\nFUNCTION_02_BODY_SHA256=50a7cb6579d12dde99f66d43b9e323a8339f96abece487e1ef8c60124419b8a2\nFUNCTION_03_NAME=mark_cloud_write\nFUNCTION_03_START_LINE=58\nFUNCTION_03_END_LINE=65\nFUNCTION_03_BODY_SHA256=780374f488da4bf93632d8a0de2db31cd351329b6c5581bf5ef7a8a4f63a6002\nFUNCTION_04_NAME=prepare_rclone\nFUNCTION_04_START_LINE=66\nFUNCTION_04_END_LINE=69\nFUNCTION_04_BODY_SHA256=9894074a28ce27f1a50447d4b6e33b4f5dde259754ad71f2dd982831ef9fe0c5\nFUNCTION_05_NAME=reconstruct\nFUNCTION_05_START_LINE=70\nFUNCTION_05_END_LINE=86\nFUNCTION_05_BODY_SHA256=19062cac5f312d1f9a6930f3e9f5e7c96ea37b265f69acc51425b4b74187ff0e\nFUNCTION_06_NAME=verify_generation\nFUNCTION_06_START_LINE=87\nFUNCTION_06_END_LINE=108\nFUNCTION_06_BODY_SHA256=a5ddad1c6e8de963c1b9fc548a1fe2716af4e57e0e591a0966ffcd2e78691e16\nFUNCTION_07_NAME=run_backup\nFUNCTION_07_START_LINE=109\nFUNCTION_07_END_LINE=150\nFUNCTION_07_BODY_SHA256=e086b8a4c2bf8bcd159cdd65733b8552d73ff3266c360e156ed2c97e93bdd60d\nASSIGNMENT_COUNT=44\nASSIGN_001_LINE=4\nASSIGN_001_NAME=LOGICAL_ID\nASSIGN_001_CLASS=SAFE_SCALAR\nASSIGN_002_LINE=5\nASSIGN_002_NAME=DUE_SECONDS\nASSIGN_002_CLASS=SAFE_SCALAR\nASSIGN_003_LINE=6\nASSIGN_003_NAME=SLA_SECONDS\nASSIGN_003_CLASS=SAFE_SCALAR\nASSIGN_004_LINE=7\nASSIGN_004_NAME=STATE_ROOT\nASSIGN_004_CLASS=PATH_LITERAL\nASSIGN_005_LINE=8\nASSIGN_005_NAME=STATE_DIR\nASSIGN_005_CLASS=OTHER\nASSIGN_006_LINE=9\nASSIGN_006_NAME=EVIDENCE_ROOT\nASSIGN_006_CLASS=PATH_LITERAL\nASSIGN_007_LINE=10\nASSIGN_007_NAME=HEALTH\nASSIGN_007_CLASS=PATH_LITERAL\nASSIGN_008_LINE=11\nASSIGN_008_NAME=STAGE_ROOT\nASSIGN_008_CLASS=PATH_LITERAL\nASSIGN_009_LINE=12\nASSIGN_009_NAME=VERIFY_ROOT\nASSIGN_009_CLASS=PATH_LITERAL\nASSIGN_010_LINE=13\nASSIGN_010_NAME=LOCK\nASSIGN_010_CLASS=PATH_LITERAL\nASSIGN_011_LINE=14\nASSIGN_011_NAME=HEAVY_LOCK\nASSIGN_011_CLASS=PATH_LITERAL\nASSIGN_012_LINE=15\nASSIGN_012_NAME=RCLONE_CONFIG_SOURCE\nASSIGN_012_CLASS=OTHER\nASSIGN_013_LINE=16\nASSIGN_013_NAME=TRANSPORT\nASSIGN_013_CLASS=PATH_LITERAL\nASSIGN_014_LINE=17\nASSIGN_014_NAME=TRANSPORT_SHA\nASSIGN_014_CLASS=SAFE_SCALAR\nASSIGN_015_LINE=18\nASSIGN_015_NAME=BUILDER\nASSIGN_015_CLASS=PATH_LITERAL\nASSIGN_016_LINE=19\nASSIGN_016_NAME=BUILDER_SHA\nASSIGN_016_CLASS=SAFE_SCALAR\nASSIGN_017_LINE=20\nASSIGN_017_NAME=REMOTE_A\nASSIGN_017_CLASS=FIXED_CRYPT_REMOTE\nASSIGN_018_LINE=21\nASSIGN_018_NAME=REMOTE_B\nASSIGN_018_CLASS=FIXED_CRYPT_REMOTE\nASSIGN_019_LINE=22\nASSIGN_019_NAME=CLOUD_WRITE_MARKER\nASSIGN_019_CLASS=OTHER\nASSIGN_020_LINE=39\nASSIGN_020_NAME=status\nASSIGN_020_CLASS=OTHER\nASSIGN_021_LINE=46\nASSIGN_021_NAME=sha\nASSIGN_021_CLASS=OTHER\nASSIGN_022_LINE=47\nASSIGN_022_NAME=epoch\nASSIGN_022_CLASS=OTHER\nASSIGN_023_LINE=49\nASSIGN_023_NAME=ev\nASSIGN_023_CLASS=OTHER\nASSIGN_024_LINE=53\nASSIGN_024_NAME=age\nASSIGN_024_CLASS=OTHER\nASSIGN_025_LINE=72\nASSIGN_025_NAME=expected_manifest\nASSIGN_025_CLASS=OTHER\nASSIGN_026_LINE=73\nASSIGN_026_NAME=manifest\nASSIGN_026_CLASS=OTHER\nASSIGN_027_LINE=76\nASSIGN_027_NAME=idx\nASSIGN_027_CLASS=SAFE_SCALAR\nASSIGN_028_LINE=79\nASSIGN_028_NAME=part\nASSIGN_028_CLASS=OTHER\nASSIGN_029_LINE=80\nASSIGN_029_NAME=got_size\nASSIGN_029_CLASS=OTHER\nASSIGN_030_LINE=89\nASSIGN_030_NAME=gen\nASSIGN_030_CLASS=OTHER\nASSIGN_031_LINE=90\nASSIGN_031_NAME=state\nASSIGN_031_CLASS=OTHER\nASSIGN_032_LINE=94\nASSIGN_032_NAME=work\nASSIGN_032_CLASS=OTHER\nASSIGN_033_LINE=96\nASSIGN_033_NAME=base_a\nASSIGN_033_CLASS=OTHER\nASSIGN_034_LINE=99\nASSIGN_034_NAME=verify_json\nASSIGN_034_CLASS=OTHER\nASSIGN_035_LINE=101\nASSIGN_035_NAME=archive_sha\nASSIGN_035_CLASS=OTHER\nASSIGN_036_LINE=102\nASSIGN_036_NAME=tmp\nASSIGN_036_CLASS=OTHER\nASSIGN_037_LINE=105\nASSIGN_037_NAME=tmp\nASSIGN_037_CLASS=OTHER\nASSIGN_038_LINE=114\nASSIGN_038_NAME=incompletes\nASSIGN_038_CLASS=OTHER\nASSIGN_039_LINE=116\nASSIGN_039_NAME=line\nASSIGN_039_CLASS=OTHER\nASSIGN_040_LINE=117\nASSIGN_040_NAME=gen\nASSIGN_040_CLASS=OTHER\nASSIGN_041_LINE=123\nASSIGN_041_NAME=decision\nASSIGN_041_CLASS=SAFE_SCALAR\nASSIGN_042_LINE=126\nASSIGN_042_NAME=state\nASSIGN_042_CLASS=OTHER\nASSIGN_043_LINE=133\nASSIGN_043_NAME=now\nASSIGN_043_CLASS=OTHER\nASSIGN_044_LINE=135\nASSIGN_044_NAME=payload\nASSIGN_044_CLASS=OTHER\nFIXED_REMOTE_PVE01_MAIL_01_CRYPT_PRESENT=YES\nFIXED_REMOTE_PVE01_MAIL_01_CRYPT_LINES=20\nFIXED_REMOTE_PVE01_MAIL_02_CRYPT_PRESENT=YES\nFIXED_REMOTE_PVE01_MAIL_02_CRYPT_LINES=21\nDYNAMIC_TERM_COUNT=0\nRCLONE_REFERENCE_LINE_COUNT=8\nRCLONE_REF_01_LINE=15\nRCLONE_REF_01_VERBS=UNKNOWN\nRCLONE_REF_02_LINE=25\nRCLONE_REF_02_VERBS=cat,mkdir\nRCLONE_REF_03_LINE=66\nRCLONE_REF_03_VERBS=UNKNOWN\nRCLONE_REF_04_LINE=67\nRCLONE_REF_04_VERBS=UNKNOWN\nRCLONE_REF_05_LINE=68\nRCLONE_REF_05_VERBS=UNKNOWN\nRCLONE_REF_06_LINE=74\nRCLONE_REF_06_VERBS=cat\nRCLONE_REF_07_LINE=79\nRCLONE_REF_07_VERBS=cat\nRCLONE_REF_08_LINE=94\nRCLONE_REF_08_VERBS=UNKNOWN\nMARKER_SEALED_PRESENT=YES\nMARKER_SEALED_LINES=43,114,129,142\nMARKER_VERIFY_SEALED_PRESENT=YES\nMARKER_VERIFY_SEALED_LINES=92\nMARKER_BACKUP_DELETE_PRESENT=YES\nMARKER_BACKUP_DELETE_LINES=129,139\nMARKER_LOCAL_CLEANUP_PRESENT=NO\nMARKER_LOCAL_CLEANUP_LINES=NONE\nMARKER_536870912_PRESENT=NO\nMARKER_536870912_LINES=NONE\nMARKER_HOMELAB_CLOUD_QUORUM_PAYLOAD_V1_PRESENT=NO\nMARKER_HOMELAB_CLOUD_QUORUM_PAYLOAD_V1_LINES=NONE\nDELETE_LIKE_LINE_COUNT=8\nDELETE_LIKE_LINES=25,79,82,85,95,129,139,140\nWRAPPER_UNIT_COUNT=1\nWRAPPER_01_UNIT=homelab-control-backup.service\nWRAPPER_01_PATH=/etc/systemd/system/homelab-control-backup.service\nWRAPPER_01_SHA256=428d3e1f3042c3347b7c34b6f190e44fa35f7a97264eec3974239f581c9b9250\nWRAPPER_01_SIZE=411\nWRAPPER_01_ACTIVE=inactive\nWRAPPER_01_ENABLED=static\nSTATIC_FIXED_PAIR_PRESENT=YES\nSTATIC_DYNAMIC_ALLOCATOR_PRESENT=NO\nSTATIC_512M_PART_MARKER_PRESENT=NO\nSTATIC_SEALED_VERIFY_GATE_PRESENT=YES\nSTATIC_DELETE_PATH_PRESENT=YES\nSTATIC_COMPATIBLE_WITH_DYNAMIC_2_OF_13=NO\nFILES_WRITTEN_BY_PAYLOAD=0\nSYSTEMD_MUTATIONS_BY_254=0\nSTATIC254_READY_FOR_MINIMAL_PATCH_DESIGN=YES\nSTATIC254_END\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-260912-INFRA-DR-BACKUPV2-CONTROL-BACKUP-STATIC-254R1\",\"status\":\"OK\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\n" + "output": "LOGIC255_BEGIN\nCOMMAND_ID=SUPPORT-260912-INFRA-DR-BACKUPV2-CONTROL-BACKUP-LOGIC-255R1\nMODE=READ_ONLY_LOCAL_SOURCE_LOGIC\nCLOUD_CALLS_BY_255=0\nRCLONE_COMMANDS_EXECUTED_BY_255=0\nERROR_REGISTER_CHECK=READ\nERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0\nREFERENCE_CHECK=READ\nREFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66\nAUTHORITY_FRESH_READ=OK\nTARGET_PATH=/usr/local/sbin/homelab-control-backup\nTARGET_SHA256=0b3a0f685d4e67cb86250df89a4918aff2e6c67799b7d35b0e54b1bbc016ee57\nTARGET_SHA_MATCH=YES\nUNIT_PATH=/etc/systemd/system/homelab-control-backup.service\nUNIT_SHA256=428d3e1f3042c3347b7c34b6f190e44fa35f7a97264eec3974239f581c9b9250\nUNIT_SHA_MATCH=YES\nTARGET_LINE_COUNT=150\nFUNCTION_COUNT=0\nSOURCE_SKELETON_BEGIN\nSRC_LINE_001=#!/usr/bin/env bash\nSRC_LINE_002=set -Eeuo pipefail\nSRC_LINE_003=umask 077\nSRC_LINE_004=LOGICAL_ID=control-bootstrap-v2\nSRC_LINE_005=DUE_SECONDS=43200\nSRC_LINE_006=SLA_SECONDS=86400\nSRC_LINE_007=STATE_ROOT=\nSRC_LINE_008=STATE_DIR=$STATE_ROOT/$LOGICAL_ID\nSRC_LINE_009=EVIDENCE_ROOT=\nSRC_LINE_010=HEALTH=.json\nSRC_LINE_011=STAGE_ROOT=\nSRC_LINE_012=VERIFY_ROOT=\nSRC_LINE_013=LOCK=.lock\nSRC_LINE_014=HEAVY_LOCK=/run/homelab-backup-heavy.lock\nSRC_LINE_015=RCLONE_CONFIG_SOURCE=${RCLONE_CONFIG:-/root/.config/rclone/[SENSITIVE_FILE]}\nSRC_LINE_016=TRANSPORT=\nSRC_LINE_017=TRANSPORT_SHA=\nSRC_LINE_018=BUILDER=\nSRC_LINE_019=BUILDER_SHA=\nSRC_LINE_020=REMOTE_A=pve01-mail-01-crypt:homelab-backups\nSRC_LINE_021=REMOTE_B=pve01-mail-02-crypt:homelab-backups\nSRC_LINE_022=CLOUD_WRITE_MARKER=${:-}\nSRC_LINE_023=\nSRC_LINE_024=die(){ printf 'CONTROL_BACKUP_ERROR=%s' \"$1\" >&2; exit \"${2:-65}\"; }\nSRC_LINE_025=for c in jq date find sort tail cut sha256sum stat flock rclone mktemp cmp awk mkdir rm install xargs grep cat mv chmod; do command -v \"$c\" >/dev/null || die \"TOOL_MISSING_$c\" 69; done\nSRC_LINE_026=[[ -x \"$TRANSPORT\" && ! -L \"$TRANSPORT\" ]] || die TRANSPORT_UNSAFE 69\nSRC_LINE_027=[[ \"$(sha256sum \"$TRANSPORT\"|awk '{print $1}')\" == \"$TRANSPORT_SHA\" ]] || die TRANSPORT_SHA_DRIFT 65\nSRC_LINE_028=[[ -x \"$BUILDER\" && ! -L \"$BUILDER\" ]] || die BUILDER_UNSAFE 69\nSRC_LINE_029=[[ \"$(sha256sum \"$BUILDER\"|awk '{print $1}')\" == \"$BUILDER_SHA\" ]] || die BUILDER_SHA_DRIFT 65\nSRC_LINE_030=\nSOURCE_SKELETON_END\nSOURCE_REDACTED_LINE_COUNT=0\nFIXED_REMOTE_PVE01_MAIL_01_CRYPT_LINES=20\nFIXED_REMOTE_PVE01_MAIL_02_CRYPT_LINES=21\nMARKER_RCLONE_LINES=15,25,66,67,68,74,79,94\nMARKER_SEALED_LINES=43,46,92,114,129,142\nMARKER_VERIFY_SEALED_LINES=92\nMARKER_BACKUP_DELETE_LINES=129,139\nMARKER_LOCAL_CLEANUP_LINES=NONE\nMARKER_RUN_BACKUP_LINES=109,146,147\nMARKER_VERIFY_GENERATION_LINES=87,120,129,141,148\nMARKER_CLEANUP_VERIFY_LINES=95,106\nMARKER_RECONSTRUCT_LINES=70,97,103\nMARKER_SPLIT_LINES=NONE\nMARKER_536870912_LINES=NONE\nMARKER_512M_LINES=NONE\nMARKER_PART_LINES=71,72,73,74,78,79,80,81,82\nUNIT_LINE_COUNT=16\nUNIT_SKELETON_BEGIN\nUNIT_LINE_001=[Unit]\nUNIT_LINE_002=Description=Homelab recurring CONTROL cloud quorum backup\nUNIT_LINE_003=After=network-online.target\nUNIT_LINE_004=Wants=network-online.target\nUNIT_LINE_005=ConditionPathExists=\nUNIT_LINE_006=ConditionPathExists=\nUNIT_LINE_007=\nUNIT_LINE_008=[Service]\nUNIT_LINE_009=Type=oneshot\nUNIT_LINE_010=ExecStart= run\nUNIT_LINE_011=User=root\nUNIT_LINE_012=Group=root\nUNIT_LINE_013=UMask=0077\nUNIT_LINE_014=Nice=10\nUNIT_LINE_015=IOSchedulingClass=best-effort\nUNIT_LINE_016=IOSchedulingPriority=7\nUNIT_SKELETON_END\nUNIT_REDACTED_LINE_COUNT=0\nFILES_WRITTEN_BY_PAYLOAD=0\nSYSTEMD_MUTATIONS_BY_255=0\nLOGIC255_READY_FOR_MINIMAL_PATCH=YES\nLOGIC255_END\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-260912-INFRA-DR-BACKUPV2-CONTROL-BACKUP-LOGIC-255R1\",\"status\":\"OK\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\n" } diff --git a/runtime/latest.txt b/runtime/latest.txt index 52e823be..3d53ef7a 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,15 +1,15 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=SUPPORT-260912-INFRA-DR-BACKUPV2-CONTROL-BACKUP-STATIC-254R1 +COMMAND_ID=SUPPORT-260912-INFRA-DR-BACKUPV2-CONTROL-BACKUP-LOGIC-255R1 STATUS=OK RC=0 HOST=pve01 MODE=read-only -COMPONENT=infra-dr-backupv2-control-backup-static +COMPONENT=infra-dr-backupv2-control-backup-logic REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 -COMMAND_SHA256=0d1c1e2624f3ddfc06d59a300295efe0f8010bee2dfd582760022ba3bfac16f3 +COMMAND_SHA256=2c1d227e011446eb686ecf97218c70c89f651616f45b4bb3e68f32bba3533ace DUPLICATE_FAILED_COMMAND_BLOCKED=false EXECUTION_STARTED=true CHANGE_DECLARED=false @@ -24,14 +24,14 @@ MUTATION_OUTCOME=NO_MUTATION SANITIZED=yes SECRETS_INCLUDED=no PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=1daa06d99f984ed4228e1380fc92b69a832c3c7dd89f74d9838e95a51a875daf -SANITIZED_OUTPUT_SHA256=1daa06d99f984ed4228e1380fc92b69a832c3c7dd89f74d9838e95a51a875daf +RAW_EVIDENCE_SHA256=4be463d9015eac40cac32a68aa1b48e571e45d59f953244a55f8eba2d6e159cb +SANITIZED_OUTPUT_SHA256=f367fb4787ad044b2e839dc8ca1d49f1687c27df5a650940aeacd85661a27130 OUTPUT_BEGIN -STATIC254_BEGIN -COMMAND_ID=SUPPORT-260912-INFRA-DR-BACKUPV2-CONTROL-BACKUP-STATIC-254R1 -MODE=READ_ONLY_LOCAL_STATIC_INSPECTION -CLOUD_CALLS_BY_254=0 -RCLONE_COMMANDS_EXECUTED_BY_254=0 +LOGIC255_BEGIN +COMMAND_ID=SUPPORT-260912-INFRA-DR-BACKUPV2-CONTROL-BACKUP-LOGIC-255R1 +MODE=READ_ONLY_LOCAL_SOURCE_LOGIC +CLOUD_CALLS_BY_255=0 +RCLONE_COMMANDS_EXECUTED_BY_255=0 ERROR_REGISTER_CHECK=READ ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 REFERENCE_CHECK=READ @@ -39,228 +39,85 @@ REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d6 AUTHORITY_FRESH_READ=OK TARGET_PATH=/usr/local/sbin/homelab-control-backup TARGET_SHA256=0b3a0f685d4e67cb86250df89a4918aff2e6c67799b7d35b0e54b1bbc016ee57 -TARGET_EXPECTED_SHA256=0b3a0f685d4e67cb86250df89a4918aff2e6c67799b7d35b0e54b1bbc016ee57 TARGET_SHA_MATCH=YES -TARGET_SIZE=11862 -TARGET_MODE=0755 +UNIT_PATH=/etc/systemd/system/homelab-control-backup.service +UNIT_SHA256=428d3e1f3042c3347b7c34b6f190e44fa35f7a97264eec3974239f581c9b9250 +UNIT_SHA_MATCH=YES TARGET_LINE_COUNT=150 -TARGET_SHEBANG_CLASS=SHELL -FUNCTION_COUNT=7 -FUNCTION_01_NAME=latest_state -FUNCTION_01_START_LINE=31 -FUNCTION_01_END_LINE=34 -FUNCTION_01_BODY_SHA256=bec501f7ff7546300cd64d2544a149d608e5c682ce2de15996f53d847645f797 -FUNCTION_02_NAME=state_decision -FUNCTION_02_START_LINE=35 -FUNCTION_02_END_LINE=57 -FUNCTION_02_BODY_SHA256=50a7cb6579d12dde99f66d43b9e323a8339f96abece487e1ef8c60124419b8a2 -FUNCTION_03_NAME=mark_cloud_write -FUNCTION_03_START_LINE=58 -FUNCTION_03_END_LINE=65 -FUNCTION_03_BODY_SHA256=780374f488da4bf93632d8a0de2db31cd351329b6c5581bf5ef7a8a4f63a6002 -FUNCTION_04_NAME=prepare_rclone -FUNCTION_04_START_LINE=66 -FUNCTION_04_END_LINE=69 -FUNCTION_04_BODY_SHA256=9894074a28ce27f1a50447d4b6e33b4f5dde259754ad71f2dd982831ef9fe0c5 -FUNCTION_05_NAME=reconstruct -FUNCTION_05_START_LINE=70 -FUNCTION_05_END_LINE=86 -FUNCTION_05_BODY_SHA256=19062cac5f312d1f9a6930f3e9f5e7c96ea37b265f69acc51425b4b74187ff0e -FUNCTION_06_NAME=verify_generation -FUNCTION_06_START_LINE=87 -FUNCTION_06_END_LINE=108 -FUNCTION_06_BODY_SHA256=a5ddad1c6e8de963c1b9fc548a1fe2716af4e57e0e591a0966ffcd2e78691e16 -FUNCTION_07_NAME=run_backup -FUNCTION_07_START_LINE=109 -FUNCTION_07_END_LINE=150 -FUNCTION_07_BODY_SHA256=e086b8a4c2bf8bcd159cdd65733b8552d73ff3266c360e156ed2c97e93bdd60d -ASSIGNMENT_COUNT=44 -ASSIGN_001_LINE=4 -ASSIGN_001_NAME=LOGICAL_ID -ASSIGN_001_CLASS=SAFE_SCALAR -ASSIGN_002_LINE=5 -ASSIGN_002_NAME=DUE_SECONDS -ASSIGN_002_CLASS=SAFE_SCALAR -ASSIGN_003_LINE=6 -ASSIGN_003_NAME=SLA_SECONDS -ASSIGN_003_CLASS=SAFE_SCALAR -ASSIGN_004_LINE=7 -ASSIGN_004_NAME=STATE_ROOT -ASSIGN_004_CLASS=PATH_LITERAL -ASSIGN_005_LINE=8 -ASSIGN_005_NAME=STATE_DIR -ASSIGN_005_CLASS=OTHER -ASSIGN_006_LINE=9 -ASSIGN_006_NAME=EVIDENCE_ROOT -ASSIGN_006_CLASS=PATH_LITERAL -ASSIGN_007_LINE=10 -ASSIGN_007_NAME=HEALTH -ASSIGN_007_CLASS=PATH_LITERAL -ASSIGN_008_LINE=11 -ASSIGN_008_NAME=STAGE_ROOT -ASSIGN_008_CLASS=PATH_LITERAL -ASSIGN_009_LINE=12 -ASSIGN_009_NAME=VERIFY_ROOT -ASSIGN_009_CLASS=PATH_LITERAL -ASSIGN_010_LINE=13 -ASSIGN_010_NAME=LOCK -ASSIGN_010_CLASS=PATH_LITERAL -ASSIGN_011_LINE=14 -ASSIGN_011_NAME=HEAVY_LOCK -ASSIGN_011_CLASS=PATH_LITERAL -ASSIGN_012_LINE=15 -ASSIGN_012_NAME=RCLONE_CONFIG_SOURCE -ASSIGN_012_CLASS=OTHER -ASSIGN_013_LINE=16 -ASSIGN_013_NAME=TRANSPORT -ASSIGN_013_CLASS=PATH_LITERAL -ASSIGN_014_LINE=17 -ASSIGN_014_NAME=TRANSPORT_SHA -ASSIGN_014_CLASS=SAFE_SCALAR -ASSIGN_015_LINE=18 -ASSIGN_015_NAME=BUILDER -ASSIGN_015_CLASS=PATH_LITERAL -ASSIGN_016_LINE=19 -ASSIGN_016_NAME=BUILDER_SHA -ASSIGN_016_CLASS=SAFE_SCALAR -ASSIGN_017_LINE=20 -ASSIGN_017_NAME=REMOTE_A -ASSIGN_017_CLASS=FIXED_CRYPT_REMOTE -ASSIGN_018_LINE=21 -ASSIGN_018_NAME=REMOTE_B -ASSIGN_018_CLASS=FIXED_CRYPT_REMOTE -ASSIGN_019_LINE=22 -ASSIGN_019_NAME=CLOUD_WRITE_MARKER -ASSIGN_019_CLASS=OTHER -ASSIGN_020_LINE=39 -ASSIGN_020_NAME=status -ASSIGN_020_CLASS=OTHER -ASSIGN_021_LINE=46 -ASSIGN_021_NAME=sha -ASSIGN_021_CLASS=OTHER -ASSIGN_022_LINE=47 -ASSIGN_022_NAME=epoch -ASSIGN_022_CLASS=OTHER -ASSIGN_023_LINE=49 -ASSIGN_023_NAME=ev -ASSIGN_023_CLASS=OTHER -ASSIGN_024_LINE=53 -ASSIGN_024_NAME=age -ASSIGN_024_CLASS=OTHER -ASSIGN_025_LINE=72 -ASSIGN_025_NAME=expected_manifest -ASSIGN_025_CLASS=OTHER -ASSIGN_026_LINE=73 -ASSIGN_026_NAME=manifest -ASSIGN_026_CLASS=OTHER -ASSIGN_027_LINE=76 -ASSIGN_027_NAME=idx -ASSIGN_027_CLASS=SAFE_SCALAR -ASSIGN_028_LINE=79 -ASSIGN_028_NAME=part -ASSIGN_028_CLASS=OTHER -ASSIGN_029_LINE=80 -ASSIGN_029_NAME=got_size -ASSIGN_029_CLASS=OTHER -ASSIGN_030_LINE=89 -ASSIGN_030_NAME=gen -ASSIGN_030_CLASS=OTHER -ASSIGN_031_LINE=90 -ASSIGN_031_NAME=state -ASSIGN_031_CLASS=OTHER -ASSIGN_032_LINE=94 -ASSIGN_032_NAME=work -ASSIGN_032_CLASS=OTHER -ASSIGN_033_LINE=96 -ASSIGN_033_NAME=base_a -ASSIGN_033_CLASS=OTHER -ASSIGN_034_LINE=99 -ASSIGN_034_NAME=verify_json -ASSIGN_034_CLASS=OTHER -ASSIGN_035_LINE=101 -ASSIGN_035_NAME=archive_sha -ASSIGN_035_CLASS=OTHER -ASSIGN_036_LINE=102 -ASSIGN_036_NAME=tmp -ASSIGN_036_CLASS=OTHER -ASSIGN_037_LINE=105 -ASSIGN_037_NAME=tmp -ASSIGN_037_CLASS=OTHER -ASSIGN_038_LINE=114 -ASSIGN_038_NAME=incompletes -ASSIGN_038_CLASS=OTHER -ASSIGN_039_LINE=116 -ASSIGN_039_NAME=line -ASSIGN_039_CLASS=OTHER -ASSIGN_040_LINE=117 -ASSIGN_040_NAME=gen -ASSIGN_040_CLASS=OTHER -ASSIGN_041_LINE=123 -ASSIGN_041_NAME=decision -ASSIGN_041_CLASS=SAFE_SCALAR -ASSIGN_042_LINE=126 -ASSIGN_042_NAME=state -ASSIGN_042_CLASS=OTHER -ASSIGN_043_LINE=133 -ASSIGN_043_NAME=now -ASSIGN_043_CLASS=OTHER -ASSIGN_044_LINE=135 -ASSIGN_044_NAME=payload -ASSIGN_044_CLASS=OTHER -FIXED_REMOTE_PVE01_MAIL_01_CRYPT_PRESENT=YES +FUNCTION_COUNT=0 +SOURCE_SKELETON_BEGIN +SRC_LINE_001=#!/usr/bin/env bash +SRC_LINE_002=set -Eeuo pipefail +SRC_LINE_003=umask 077 +SRC_LINE_004=LOGICAL_ID=control-bootstrap-v2 +SRC_LINE_005=DUE_SECONDS=43200 +SRC_LINE_006=SLA_SECONDS=86400 +SRC_LINE_007=STATE_ROOT= +SRC_LINE_008=STATE_DIR=$STATE_ROOT/$LOGICAL_ID +SRC_LINE_009=EVIDENCE_ROOT= +SRC_LINE_010=HEALTH=.json +SRC_LINE_011=STAGE_ROOT= +SRC_LINE_012=VERIFY_ROOT= +SRC_LINE_013=LOCK=.lock +SRC_LINE_014=HEAVY_LOCK=/run/homelab-backup-heavy.lock +SRC_LINE_015=RCLONE_CONFIG_SOURCE=${RCLONE_CONFIG:-/root/.config/rclone/[SENSITIVE_FILE]} +SRC_LINE_016=TRANSPORT= +SRC_LINE_017=TRANSPORT_SHA= +SRC_LINE_018=BUILDER= +SRC_LINE_019=BUILDER_SHA= +SRC_LINE_020=REMOTE_A=pve01-mail-01-crypt:homelab-backups +SRC_LINE_021=REMOTE_B=pve01-mail-02-crypt:homelab-backups +SRC_LINE_022=CLOUD_WRITE_MARKER=${:-} +SRC_LINE_023= +SRC_LINE_024=die(){ printf 'CONTROL_BACKUP_ERROR=%s' "$1" >&2; exit "${2:-65}"; } +SRC_LINE_025=for c in jq date find sort tail cut sha256sum stat flock rclone mktemp cmp awk mkdir rm install xargs grep cat mv chmod; do command -v "$c" >/dev/null || die "TOOL_MISSING_$c" 69; done +SRC_LINE_026=[[ -x "$TRANSPORT" && ! -L "$TRANSPORT" ]] || die TRANSPORT_UNSAFE 69 +SRC_LINE_027=[[ "$(sha256sum "$TRANSPORT"|awk '{print $1}')" == "$TRANSPORT_SHA" ]] || die TRANSPORT_SHA_DRIFT 65 +SRC_LINE_028=[[ -x "$BUILDER" && ! -L "$BUILDER" ]] || die BUILDER_UNSAFE 69 +SRC_LINE_029=[[ "$(sha256sum "$BUILDER"|awk '{print $1}')" == "$BUILDER_SHA" ]] || die BUILDER_SHA_DRIFT 65 +SRC_LINE_030= +SOURCE_SKELETON_END +SOURCE_REDACTED_LINE_COUNT=0 FIXED_REMOTE_PVE01_MAIL_01_CRYPT_LINES=20 -FIXED_REMOTE_PVE01_MAIL_02_CRYPT_PRESENT=YES FIXED_REMOTE_PVE01_MAIL_02_CRYPT_LINES=21 -DYNAMIC_TERM_COUNT=0 -RCLONE_REFERENCE_LINE_COUNT=8 -RCLONE_REF_01_LINE=15 -RCLONE_REF_01_VERBS=UNKNOWN -RCLONE_REF_02_LINE=25 -RCLONE_REF_02_VERBS=cat,mkdir -RCLONE_REF_03_LINE=66 -RCLONE_REF_03_VERBS=UNKNOWN -RCLONE_REF_04_LINE=67 -RCLONE_REF_04_VERBS=UNKNOWN -RCLONE_REF_05_LINE=68 -RCLONE_REF_05_VERBS=UNKNOWN -RCLONE_REF_06_LINE=74 -RCLONE_REF_06_VERBS=cat -RCLONE_REF_07_LINE=79 -RCLONE_REF_07_VERBS=cat -RCLONE_REF_08_LINE=94 -RCLONE_REF_08_VERBS=UNKNOWN -MARKER_SEALED_PRESENT=YES -MARKER_SEALED_LINES=43,114,129,142 -MARKER_VERIFY_SEALED_PRESENT=YES +MARKER_RCLONE_LINES=15,25,66,67,68,74,79,94 +MARKER_SEALED_LINES=43,46,92,114,129,142 MARKER_VERIFY_SEALED_LINES=92 -MARKER_BACKUP_DELETE_PRESENT=YES MARKER_BACKUP_DELETE_LINES=129,139 -MARKER_LOCAL_CLEANUP_PRESENT=NO MARKER_LOCAL_CLEANUP_LINES=NONE -MARKER_536870912_PRESENT=NO +MARKER_RUN_BACKUP_LINES=109,146,147 +MARKER_VERIFY_GENERATION_LINES=87,120,129,141,148 +MARKER_CLEANUP_VERIFY_LINES=95,106 +MARKER_RECONSTRUCT_LINES=70,97,103 +MARKER_SPLIT_LINES=NONE MARKER_536870912_LINES=NONE -MARKER_HOMELAB_CLOUD_QUORUM_PAYLOAD_V1_PRESENT=NO -MARKER_HOMELAB_CLOUD_QUORUM_PAYLOAD_V1_LINES=NONE -DELETE_LIKE_LINE_COUNT=8 -DELETE_LIKE_LINES=25,79,82,85,95,129,139,140 -WRAPPER_UNIT_COUNT=1 -WRAPPER_01_UNIT=homelab-control-backup.service -WRAPPER_01_PATH=/etc/systemd/system/homelab-control-backup.service -WRAPPER_01_SHA256=428d3e1f3042c3347b7c34b6f190e44fa35f7a97264eec3974239f581c9b9250 -WRAPPER_01_SIZE=411 -WRAPPER_01_ACTIVE=inactive -WRAPPER_01_ENABLED=static -STATIC_FIXED_PAIR_PRESENT=YES -STATIC_DYNAMIC_ALLOCATOR_PRESENT=NO -STATIC_512M_PART_MARKER_PRESENT=NO -STATIC_SEALED_VERIFY_GATE_PRESENT=YES -STATIC_DELETE_PATH_PRESENT=YES -STATIC_COMPATIBLE_WITH_DYNAMIC_2_OF_13=NO +MARKER_512M_LINES=NONE +MARKER_PART_LINES=71,72,73,74,78,79,80,81,82 +UNIT_LINE_COUNT=16 +UNIT_SKELETON_BEGIN +UNIT_LINE_001=[Unit] +UNIT_LINE_002=Description=Homelab recurring CONTROL cloud quorum backup +UNIT_LINE_003=After=network-online.target +UNIT_LINE_004=Wants=network-online.target +UNIT_LINE_005=ConditionPathExists= +UNIT_LINE_006=ConditionPathExists= +UNIT_LINE_007= +UNIT_LINE_008=[Service] +UNIT_LINE_009=Type=oneshot +UNIT_LINE_010=ExecStart= run +UNIT_LINE_011=User=root +UNIT_LINE_012=Group=root +UNIT_LINE_013=UMask=0077 +UNIT_LINE_014=Nice=10 +UNIT_LINE_015=IOSchedulingClass=best-effort +UNIT_LINE_016=IOSchedulingPriority=7 +UNIT_SKELETON_END +UNIT_REDACTED_LINE_COUNT=0 FILES_WRITTEN_BY_PAYLOAD=0 -SYSTEMD_MUTATIONS_BY_254=0 -STATIC254_READY_FOR_MINIMAL_PATCH_DESIGN=YES -STATIC254_END -HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-260912-INFRA-DR-BACKUPV2-CONTROL-BACKUP-STATIC-254R1","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null} +SYSTEMD_MUTATIONS_BY_255=0 +LOGIC255_READY_FOR_MINIMAL_PATCH=YES +LOGIC255_END +HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-260912-INFRA-DR-BACKUPV2-CONTROL-BACKUP-LOGIC-255R1","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null} OUTPUT_END CHAT_OUTPUT_END