diff --git a/runtime/history/SUPPORT-260923-SKLADCHIK-CURRENT-EDGE-UPDATER-SOURCE-944R1.json b/runtime/history/SUPPORT-260923-SKLADCHIK-CURRENT-EDGE-UPDATER-SOURCE-944R1.json new file mode 100644 index 00000000..317f295b --- /dev/null +++ b/runtime/history/SUPPORT-260923-SKLADCHIK-CURRENT-EDGE-UPDATER-SOURCE-944R1.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "SUPPORT-260923-SKLADCHIK-CURRENT-EDGE-UPDATER-SOURCE-944R1", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "read-only", + "component": "skladchik-current-edge-updater-source", + "started_at_utc": "2026-09-23T12:14:20Z", + "finished_at_utc": "2026-09-23T12:14:20Z", + "reference_register_checked": true, + "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", + "error_register_checked": true, + "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", + "command_sha256": "0171a3ced661558ed6f0ab909ba014aea79053b21400f6b2f2eceba92257d7b8", + "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": "ba150554aca68c2348134a9f0017b998a31eba97431978781bb51e7cf1999c75", + "sanitized_output_sha256": "ba150554aca68c2348134a9f0017b998a31eba97431978781bb51e7cf1999c75", + "output_truncated_in_json": false, + "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", + "output": "SKLADCHIK944_BEGIN=true\nCOMMAND_ID=SUPPORT-260923-SKLADCHIK-CURRENT-EDGE-UPDATER-SOURCE-944R1\nMODE=read-only\nCOMPONENT=skladchik-current-edge-updater-source\nPREDECESSOR_943=STALE_MIGRATION_PREFLIGHT_EXPECTS_ORIGINAL_SHA\nMUTATION_BOUNDARY=NONE_READ_ONLY\nVERSIONED_EDGE_BEGIN\nVERSIONED_EDGE_PATH_BASENAME=skladchik-reports-monitor-cookie-update-edge\nVERSIONED_EDGE_PRESENT=true\nVERSIONED_EDGE_SHA256=10fe854274dca1a053cfd8c0155340bd689bf3f6555c70dbc14b890cbafb93fa\nVERSIONED_EDGE_BYTES=5247\nVERSIONED_EDGE_LINES=178\nVERSIONED_EDGE_LINE_0001=#!/usr/bin/env bash\nVERSIONED_EDGE_LINE_0002=set -Eeuo pipefail\nVERSIONED_EDGE_LINE_0003=umask 077\nVERSIONED_EDGE_LINE_0004=\nVERSIONED_EDGE_LINE_0005=SECRETS=/etc/skladchik-reports-monitor/secrets.env\nVERSIONED_EDGE_LINE_0006=MONITOR=/opt/skladchik-reports-monitor/monitor.py\nVERSIONED_EDGE_LINE_0007=COOKIE_JAR=/var/lib/skladchik-reports-monitor/cookies.jar\nVERSIONED_EDGE_LINE_0008=HEALTH=/var/lib/skladchik-reports-monitor/health.txt\nVERSIONED_EDGE_LINE_0009=OUTPUT=/tmp/skladchik-cookie-update-monitor.out\nVERSIONED_EDGE_LINE_0010=TIMER=skladchik-reports-monitor.timer\nVERSIONED_EDGE_LINE_0011=SERVICE=skladchik-reports-monitor.service\nVERSIONED_EDGE_LINE_0012=\nVERSIONED_EDGE_LINE_0013=TMP=\"$(mktemp)\"\nVERSIONED_EDGE_LINE_0014=NO_COOKIE_SECRET=\"$(mktemp)\"\nVERSIONED_EDGE_LINE_0015=SECRETS_BACKUP=\"\"\nVERSIONED_EDGE_LINE_0016=JAR_BACKUP=\"\"\nVERSIONED_EDGE_LINE_0017=JAR_EXISTED=0\nVERSIONED_EDGE_LINE_0018=AUTH_MUTATED=0\nVERSIONED_EDGE_LINE_0019=FINALIZED=0\nVERSIONED_EDGE_LINE_0020=\nVERSIONED_EDGE_LINE_0021=TIMER_WAS_ENABLED=\"$(systemctl is-enabled \"$TIMER\" 2>/dev/null || true)\"\nVERSIONED_EDGE_LINE_0022=TIMER_WAS_ACTIVE=\"$(systemctl is-active \"$TIMER\" 2>/dev/null || true)\"\nVERSIONED_EDGE_LINE_0023=\nVERSIONED_EDGE_LINE_0024=on_err(){\nVERSIONED_EDGE_LINE_0025= local rc=$?\nVERSIONED_EDGE_LINE_0026= trap - ERR\nVERSIONED_EDGE_LINE_0027= printf 'ROOT_CAUSE=UNEXPECTED_COOKIE_UPDATE_ERROR\\nROOT_CAUSE_COUNT=1\\nDETAIL=line=%s rc=%s\\n' \"${1:-0}\" \"$rc\"\nVERSIONED_EDGE_LINE_0028= exit \"$rc\"\nVERSIONED_EDGE_LINE_0029=}\nVERSIONED_EDGE_LINE_0030=\nVERSIONED_EDGE_LINE_0031=restore_timer_state(){\nVERSIONED_EDGE_LINE_0032= systemctl stop \"$TIMER\" >/dev/null 2>&1 || true\nVERSIONED_EDGE_LINE_0033= if [ \"$TIMER_WAS_ENABLED\" = enabled ]; then\nVERSIONED_EDGE_LINE_0034= systemctl enable \"$TIMER\" >/dev/null 2>&1 || true\nVERSIONED_EDGE_LINE_0035= else\nVERSIONED_EDGE_LINE_0036= systemctl disable \"$TIMER\" >/dev/null 2>&1 || true\nVERSIONED_EDGE_LINE_0037= fi\nVERSIONED_EDGE_LINE_0038= if [ \"$TIMER_WAS_ACTIVE\" = active ]; then\nVERSIONED_EDGE_LINE_0039= systemctl start \"$TIMER\" >/dev/null 2>&1 || true\nVERSIONED_EDGE_LINE_0040= fi\nVERSIONED_EDGE_LINE_0041=}\nVERSIONED_EDGE_LINE_0042=\nVERSIONED_EDGE_LINE_0043=restore_auth_state(){\nVERSIONED_EDGE_LINE_0044= if [ \"$AUTH_MUTATED\" -eq 1 ]; then\nVERSIONED_EDGE_LINE_0045= if [ -n \"$SECRETS_BACKUP\" ] && [ -s \"$SECRETS_BACKUP\" ]; then\nVERSIONED_EDGE_LINE_0046= install -m 0600 -o root -g root \"$SECRETS_BACKUP\" \"$SECRETS\"\nVERSIONED_EDGE_LINE_0047= fi\nVERSIONED_EDGE_LINE_0048= if [ \"$JAR_EXISTED\" -eq 1 ] && [ -n \"$JAR_BACKUP\" ] && [ -s \"$JAR_BACKUP\" ]; then\nVERSIONED_EDGE_LINE_0049= install -m 0600 -o root -g root \"$JAR_BACKUP\" \"$COOKIE_JAR\"\nVERSIONED_EDGE_LINE_0050= else\nVERSIONED_EDGE_LINE_0051= rm -f \"$COOKIE_JAR\"\nVERSIONED_EDGE_LINE_0052= fi\nVERSIONED_EDGE_LINE_0053= AUTH_MUTATED=0\nVERSIONED_EDGE_LINE_0054= fi\nVERSIONED_EDGE_LINE_0055=}\nVERSIONED_EDGE_LINE_0056=\nVERSIONED_EDGE_LINE_0057=cleanup(){\nVERSIONED_EDGE_LINE_0058= local rc=$?\nVERSIONED_EDGE_LINE_0059= trap - ERR\nVERSIONED_EDGE_LINE_0060= trap - EXIT INT TERM HUP\nVERSIONED_EDGE_LINE_0061= set +e\nVERSIONED_EDGE_LINE_0062= if [ \"$FINALIZED\" -ne 1 ]; then\nVERSIONED_EDGE_LINE_0063= restore_auth_state\nVERSIONED_EDGE_LINE_0064= restore_timer_state\nVERSIONED_EDGE_LINE_0065= fi\nVERSIONED_EDGE_LINE_0066= rm -f \"$TMP\" \"$NO_COOKIE_SECRET\"\nVERSIONED_EDGE_LINE_0067= [ -z \"$SECRETS_BACKUP\" ] || rm -f \"$SECRETS_BACKUP\"\nVERSIONED_EDGE_LINE_0068= [ -z \"$JAR_BACKUP\" ] || rm -f \"$JAR_BACKUP\"\nVERSIONED_EDGE_LINE_0069= exit \"$rc\"\nVERSIONED_EDGE_LINE_0070=}\nVERSIONED_EDGE_LINE_0071=\nVERSIONED_EDGE_LINE_0072=trap 'on_err \"$LINENO\"' ERR\nVERSIONED_EDGE_LINE_0073=trap cleanup EXIT\nVERSIONED_EDGE_LINE_0074=trap 'exit 130' INT\nVERSIONED_EDGE_LINE_0075=trap 'exit 143' TERM\nVERSIONED_EDGE_LINE_0076=trap 'exit 129' HUP\nVERSIONED_EDGE_LINE_0077=\nVERSIONED_EDGE_LINE_0078=systemctl stop \"$TIMER\"\nVERSIONED_EDGE_LINE_0079=\nVERSIONED_EDGE_LINE_0080=WAIT_SECONDS=90\nVERSIONED_EDGE_LINE_0081=DEADLINE=$((SECONDS + WAIT_SECONDS))\nVERSIONED_EDGE_LINE_0082=while systemctl is-active --quiet \"$SERVICE\" || pgrep -f '/opt/skladchik-reports-monitor/monitor.py' >/dev/null; do\nVERSIONED_EDGE_LINE_0083= if (( SECONDS >= DEADLINE )); then\nVERSIONED_EDGE_LINE_0084= restore_timer_state\nVERSIONED_EDGE_LINE_0085= FINALIZED=1\nVERSIONED_EDGE_LINE_0086= printf 'MONITOR_QUIESCENCE_TIMEOUT\\n'\nVERSIONED_EDGE_LINE_0087= exit 75\nVERSIONED_EDGE_LINE_0088= fi\nVERSIONED_EDGE_LINE_0089= sleep 2\nVERSIONED_EDGE_LINE_0090=done\nVERSIONED_EDGE_LINE_0091=\nVERSIONED_EDGE_LINE_0092=printf \"Вставь полный новый Cookie header для skladchik.org без слова Cookie: и нажми Enter:\\n\"\nVERSIONED_EDGE_LINE_0093=IFS= read -r -s NEW_COOKIE\nVERSIONED_EDGE_LINE_0094=printf '\\n'\nVERSIONED_EDGE_LINE_0095=if [ -z \"$NEW_COOKIE\" ]; then\nVERSIONED_EDGE_LINE_0096= printf 'COOKIE_EMPTY\\n'\nVERSIONED_EDGE_LINE_0097= exit 1\nVERSIONED_EDGE_LINE_0098=fi\nVERSIONED_EDGE_LINE_0099=case \"$NEW_COOKIE\" in\nVERSIONED_EDGE_LINE_0100= *$'\\r'*|*$'\\n'*)\nVERSIONED_EDGE_LINE_0101= printf 'COOKIE_INVALID_LINE_BREAK\\n'\nVERSIONED_EDGE_LINE_0102= exit 64\nVERSIONED_EDGE_LINE_0103= ;;\nVERSIONED_EDGE_LINE_0104=esac\nVERSIONED_EDGE_LINE_0105=\nVERSIONED_EDGE_LINE_0106=SECRETS_BACKUP=\"$(mktemp /etc/skladchik-reports-monitor/.secrets.env.rollback.XXXXXX)\"\nVERSIONED_EDGE_LINE_0107=cp -a \"$SECRETS\" \"$SECRETS_BACKUP\"\nVERSIONED_EDGE_LINE_0108=\nVERSIONED_EDGE_LINE_0109=if [ -s \"$COOKIE_JAR\" ]; then\nVERSIONED_EDGE_LINE_0110= JAR_BACKUP=\"$(mktemp /var/lib/skladchik-reports-monitor/.cookies.jar.rollback.XXXXXX)\"\nVERSIONED_EDGE_LINE_0111= cp -a \"$COOKIE_JAR\" \"$JAR_BACKUP\"\nVERSIONED_EDGE_LINE_0112= JAR_EXISTED=1\nVERSIONED_EDGE_LINE_0113=fi\nVERSIONED_EDGE_LINE_0114=AUTH_MUTATED=1\nVERSIONED_EDGE_LINE_0115=\nVERSIONED_EDGE_LINE_0116=awk '!/^SKLADCHIK_COOKIE=/' \"$SECRETS\" >\"$TMP\"\nVERSIONED_EDGE_LINE_0117=printf 'SKLADCHIK_COOKIE=%s\\n' \"$NEW_COOKIE\" >>\"$TMP\"\nVERSIONED_EDGE_LINE_0118=install -m 0600 -o root -g root \"$TMP\" \"$SECRETS\"\nVERSIONED_EDGE_LINE_0119=\nVERSIONED_EDGE_LINE_0120=# The monitor prefers a non-empty cookie jar over SKLADCHIK_COOKIE.\nVERSIONED_EDGE_LINE_0121=# Removing the stale jar forces the first probe to use the newly entered Cookie header.\nVERSIONED_EDGE_LINE_0122=rm -f \"$COOKIE_JAR\"\nVERSIONED_EDGE_LINE_0123=: >\"$OUTPUT\"\nVERSIONED_EDGE_LINE_0124=\nVERSIONED_EDGE_LINE_0125=set +e\nVERSIONED_EDGE_LINE_0126=python3 \"$MONITOR\" run >>\"$OUTPUT\" 2>&1\nVERSIONED_EDGE_LINE_0127=FIRST_RUN_RC=$?\nVERSIONED_EDGE_LINE_0128=set -e\nVERSIONED_EDGE_LINE_0129=FIRST_RUN_STATUS=\"$(awk -F= '$1==\"STATUS\"{print $2;exit}' \"$HEALTH\" 2>/dev/null || true)\"\nVERSIONED_EDGE_LINE_0130=\nVERSIONED_EDGE_LINE_0131=SECOND_RUN_RC=1\nVERSIONED_EDGE_LINE_0132=SECOND_RUN_STATUS=NOT_RUN\nVERSIONED_EDGE_LINE_0133=if [ \"$FIRST_RUN_RC\" -eq 0 ] && [ \"$FIRST_RUN_STATUS\" = OK ] && [ -s \"$COOKIE_JAR\" ]; then\nVERSIONED_EDGE_LINE_0134= # Prove unattended persistence: temporarily remove the header secret, then run only from the new jar.\nVERSIONED_EDGE_LINE_0135= awk '!/^SKLADCHIK_COOKIE=/' \"$TMP\" >\"$NO_COOKIE_SECRET\"\nVERSIONED_EDGE_LINE_0136= install -m 0600 -o root -g root \"$NO_COOKIE_SECRET\" \"$SECRETS\"\nVERSIONED_EDGE_LINE_0137= set +e\nVERSIONED_EDGE_LINE_0138= python3 \"$MONITOR\" run >>\"$OUTPUT\" 2>&1\nVERSIONED_EDGE_LINE_0139= SECOND_RUN_RC=$?\nVERSIONED_EDGE_LINE_0140= set -e\nVERSIONED_EDGE_LINE_0141= SECOND_RUN_STATUS=\"$(awk -F= '$1==\"STATUS\"{print $2;exit}' \"$HEALTH\" 2>/dev/null || true)\"\nVERSIONED_EDGE_LINE_0142= install -m 0600 -o root -g root \"$TMP\" \"$SECRETS\"\nVERSIONED_EDGE_LINE_0143=fi\nVERSIONED_EDGE_LINE_0144=\nVERSIONED_EDGE_LINE_0145=if [ \"$FIRST_RUN_RC\" -ne 0 ] || [ \"$FIRST_RUN_STATUS\" != OK ] || [ ! -s \"$COOKIE_JAR\" ] || [ \"$SECOND_RUN_RC\" -ne 0 ] || [ \"$SECOND_RUN_STATUS\" != OK ]; then\nVERSIONED_EDGE_LINE_0146= restore_auth_state\nVERSIONED_EDGE_LINE_0147= restore_timer_state\nVERSIONED_EDGE_LINE_0148= FINALIZED=1\nVERSIONED_EDGE_LINE_0149= printf 'COOKIE_UPDATE_FAILED_ROLLED_BACK\\n'\nVERSIONED_EDGE_LINE_0150= printf 'FIRST_RUN_RC=%s\\nFIRST_RUN_STATUS=%s\\n' \"$FIRST_RUN_RC\" \"$FIRST_RUN_STATUS\"\nVERSIONED_EDGE_LINE_0151= printf 'SECOND_JAR_ONLY_RUN_RC=%s\\nSECOND_JAR_ONLY_RUN_STATUS=%s\\n' \"$SECOND_RUN_RC\" \"$SECOND_RUN_STATUS\"\nVERSIONED_EDGE_LINE_0152= printf 'HEALTH_BEGIN\\n'\nVERSIONED_EDGE_LINE_0153= cat \"$HEALTH\" 2>/dev/null || true\nVERSIONED_EDGE_LINE_0154= printf 'HEALTH_END\\n'\nVERSIONED_EDGE_LINE_0155= printf 'MONITOR_OUTPUT_TAIL\\n'\nVERSIONED_EDGE_LINE_0156= tail -n 40 \"$OUTPUT\" 2>/dev/null || true\nVERSIONED_EDGE_LINE_0157= exit 1\nVERSIONED_EDGE_LINE_0158=fi\nVERSIONED_EDGE_LINE_0159=\nVERSIONED_EDGE_LINE_0160=AUTH_MUTATED=0\nVERSIONED_EDGE_LINE_0161=rm -f \"$SECRETS_BACKUP\"\nVERSIONED_EDGE_LINE_0162=SECRETS_BACKUP=\"\"\nVERSIONED_EDGE_LINE_0163=if [ -n \"$JAR_BACKUP\" ]; then\nVERSIONED_EDGE_LINE_0164= rm -f \"$JAR_BACKUP\"\nVERSIONED_EDGE_LINE_0165= JAR_BACKUP=\"\"\nVERSIONED_EDGE_LINE_0166=fi\nVERSIONED_EDGE_LINE_0167=\nVERSIONED_EDGE_LINE_0168=systemctl reset-failed \"$SERVICE\" \"$TIMER\" >/dev/null 2>&1 || true\nVERSIONED_EDGE_LINE_0169=systemctl enable --now skladchik-reports-monitor.timer >/dev/null 2>&1 || true\nVERSIONED_EDGE_LINE_0170=FINALIZED=1\nVERSIONED_EDGE_LINE_0171=echo \"COOKIE_UPDATE_OK\"\nVERSIONED_EDGE_LINE_0172=echo \"FRESH_COOKIE_FORCED=YES\"\nVERSIONED_EDGE_LINE_0173=echo \"STALE_COOKIE_JAR_BYPASSED=YES\"\nVERSIONED_EDGE_LINE_0174=echo \"SECOND_JAR_ONLY_PERSISTENCE_RUN=OK\"\nVERSIONED_EDGE_LINE_0175=echo \"SECRET_PRINTED=NO\"\nVERSIONED_EDGE_LINE_0176=echo \"HEALTH_BEGIN\"\nVERSIONED_EDGE_LINE_0177=cat \"$HEALTH\" 2>/dev/null || true\nVERSIONED_EDGE_LINE_0178=echo \"HEALTH_END\"\nVERSIONED_EDGE_END\nVERSIONED_WRAPPER_BEGIN\nVERSIONED_WRAPPER_PATH_BASENAME=skladchik-reports-monitor-cookie-update\nVERSIONED_WRAPPER_PRESENT=true\nVERSIONED_WRAPPER_SHA256=ea2d89ce67893a6d89b29610e4d46e207932ecc157173454585f67890f58810c\nVERSIONED_WRAPPER_BYTES=638\nVERSIONED_WRAPPER_LINES=16\nVERSIONED_WRAPPER_LINE_0001=#!/usr/bin/env bash\nVERSIONED_WRAPPER_LINE_0002=set -Eeuo pipefail\nVERSIONED_WRAPPER_LINE_0003=export SYSTEMD_PAGER=cat PAGER=cat SYSTEMD_LESS=FRXMK\nVERSIONED_WRAPPER_LINE_0004=EDGE=debian@[PRIVATE_IP]\nVERSIONED_WRAPPER_LINE_0005=EDGE_SCRIPT=/usr/local/sbin/skladchik-reports-monitor-cookie-update-edge\nVERSIONED_WRAPPER_LINE_0006=SSH=(-o BatchMode=yes -o ConnectTimeout=15 -o StrictHostKeyChecking=yes -o UserKnownHostsFile=[SENSITIVE_PATH]\nVERSIONED_WRAPPER_LINE_0007=printf '\\033[93m%s\\033[0m\\n' 'SKLADCHIK CONTROLLED COOKIE UPDATE'\nVERSIONED_WRAPPER_LINE_0008=printf 'SAFE_OUTPUT=YES\\nSECRET_PRINTED=NO\\nSTEP=SKLADCHIK_REPORTS_MONITOR_COOKIE_UPDATE\\n'\nVERSIONED_WRAPPER_LINE_0009=if ssh -tt \"${SSH[@]}\" \"$EDGE\" sudo -n \"$EDGE_SCRIPT\"; then\nVERSIONED_WRAPPER_LINE_0010= rc=0\nVERSIONED_WRAPPER_LINE_0011=else\nVERSIONED_WRAPPER_LINE_0012= rc=$?\nVERSIONED_WRAPPER_LINE_0013=fi\nVERSIONED_WRAPPER_LINE_0014=printf 'SSH_COOKIE_UPDATE_RC=%s\\n' \"$rc\"\nVERSIONED_WRAPPER_LINE_0015=printf '\\033[93m%s\\033[0m\\n' 'END'\nVERSIONED_WRAPPER_LINE_0016=exit \"$rc\"\nVERSIONED_WRAPPER_END\nLIVE_WRAPPER_BEGIN\nLIVE_WRAPPER_PATH_BASENAME=skladchik-reports-monitor-cookie-update\nLIVE_WRAPPER_PRESENT=true\nLIVE_WRAPPER_SHA256=ea2d89ce67893a6d89b29610e4d46e207932ecc157173454585f67890f58810c\nLIVE_WRAPPER_BYTES=638\nLIVE_WRAPPER_LINES=16\nLIVE_WRAPPER_LINE_0001=#!/usr/bin/env bash\nLIVE_WRAPPER_LINE_0002=set -Eeuo pipefail\nLIVE_WRAPPER_LINE_0003=export SYSTEMD_PAGER=cat PAGER=cat SYSTEMD_LESS=FRXMK\nLIVE_WRAPPER_LINE_0004=EDGE=debian@[PRIVATE_IP]\nLIVE_WRAPPER_LINE_0005=EDGE_SCRIPT=/usr/local/sbin/skladchik-reports-monitor-cookie-update-edge\nLIVE_WRAPPER_LINE_0006=SSH=(-o BatchMode=yes -o ConnectTimeout=15 -o StrictHostKeyChecking=yes -o UserKnownHostsFile=[SENSITIVE_PATH]\nLIVE_WRAPPER_LINE_0007=printf '\\033[93m%s\\033[0m\\n' 'SKLADCHIK CONTROLLED COOKIE UPDATE'\nLIVE_WRAPPER_LINE_0008=printf 'SAFE_OUTPUT=YES\\nSECRET_PRINTED=NO\\nSTEP=SKLADCHIK_REPORTS_MONITOR_COOKIE_UPDATE\\n'\nLIVE_WRAPPER_LINE_0009=if ssh -tt \"${SSH[@]}\" \"$EDGE\" sudo -n \"$EDGE_SCRIPT\"; then\nLIVE_WRAPPER_LINE_0010= rc=0\nLIVE_WRAPPER_LINE_0011=else\nLIVE_WRAPPER_LINE_0012= rc=$?\nLIVE_WRAPPER_LINE_0013=fi\nLIVE_WRAPPER_LINE_0014=printf 'SSH_COOKIE_UPDATE_RC=%s\\n' \"$rc\"\nLIVE_WRAPPER_LINE_0015=printf '\\033[93m%s\\033[0m\\n' 'END'\nLIVE_WRAPPER_LINE_0016=exit \"$rc\"\nLIVE_WRAPPER_END\nSOURCE_RELATION_BEGIN\nVERSIONED_EDGE_SHA_EXPECTED=10fe854274dca1a053cfd8c0155340bd689bf3f6555c70dbc14b890cbafb93fa\nVERSIONED_EDGE_SHA_MATCH=true\nVERSIONED_WRAPPER_SHA_EXPECTED=ea2d89ce67893a6d89b29610e4d46e207932ecc157173454585f67890f58810c\nVERSIONED_WRAPPER_SHA_MATCH=true\nLIVE_WRAPPER_EQUALS_VERSIONED=true\nSOURCE_RELATION_END\nCHANGES_MADE_BY_944=false\nROLLBACK_STARTED=false\nROLLBACK_RESTORED=null\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-260923-SKLADCHIK-CURRENT-EDGE-UPDATER-SOURCE-944R1\",\"status\":\"OK\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\nSKLADCHIK944_END=true\n" +} diff --git a/runtime/history/SUPPORT-260923-SKLADCHIK-CURRENT-EDGE-UPDATER-SOURCE-944R1.txt b/runtime/history/SUPPORT-260923-SKLADCHIK-CURRENT-EDGE-UPDATER-SOURCE-944R1.txt new file mode 100644 index 00000000..41cfac1f --- /dev/null +++ b/runtime/history/SUPPORT-260923-SKLADCHIK-CURRENT-EDGE-UPDATER-SOURCE-944R1.txt @@ -0,0 +1,281 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=SUPPORT-260923-SKLADCHIK-CURRENT-EDGE-UPDATER-SOURCE-944R1 +STATUS=OK +RC=0 +HOST=pve01 +MODE=read-only +COMPONENT=skladchik-current-edge-updater-source +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 +COMMAND_SHA256=0171a3ced661558ed6f0ab909ba014aea79053b21400f6b2f2eceba92257d7b8 +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=ba150554aca68c2348134a9f0017b998a31eba97431978781bb51e7cf1999c75 +SANITIZED_OUTPUT_SHA256=ba150554aca68c2348134a9f0017b998a31eba97431978781bb51e7cf1999c75 +OUTPUT_BEGIN +SKLADCHIK944_BEGIN=true +COMMAND_ID=SUPPORT-260923-SKLADCHIK-CURRENT-EDGE-UPDATER-SOURCE-944R1 +MODE=read-only +COMPONENT=skladchik-current-edge-updater-source +PREDECESSOR_943=STALE_MIGRATION_PREFLIGHT_EXPECTS_ORIGINAL_SHA +MUTATION_BOUNDARY=NONE_READ_ONLY +VERSIONED_EDGE_BEGIN +VERSIONED_EDGE_PATH_BASENAME=skladchik-reports-monitor-cookie-update-edge +VERSIONED_EDGE_PRESENT=true +VERSIONED_EDGE_SHA256=10fe854274dca1a053cfd8c0155340bd689bf3f6555c70dbc14b890cbafb93fa +VERSIONED_EDGE_BYTES=5247 +VERSIONED_EDGE_LINES=178 +VERSIONED_EDGE_LINE_0001=#!/usr/bin/env bash +VERSIONED_EDGE_LINE_0002=set -Eeuo pipefail +VERSIONED_EDGE_LINE_0003=umask 077 +VERSIONED_EDGE_LINE_0004= +VERSIONED_EDGE_LINE_0005=SECRETS=/etc/skladchik-reports-monitor/secrets.env +VERSIONED_EDGE_LINE_0006=MONITOR=/opt/skladchik-reports-monitor/monitor.py +VERSIONED_EDGE_LINE_0007=COOKIE_JAR=/var/lib/skladchik-reports-monitor/cookies.jar +VERSIONED_EDGE_LINE_0008=HEALTH=/var/lib/skladchik-reports-monitor/health.txt +VERSIONED_EDGE_LINE_0009=OUTPUT=/tmp/skladchik-cookie-update-monitor.out +VERSIONED_EDGE_LINE_0010=TIMER=skladchik-reports-monitor.timer +VERSIONED_EDGE_LINE_0011=SERVICE=skladchik-reports-monitor.service +VERSIONED_EDGE_LINE_0012= +VERSIONED_EDGE_LINE_0013=TMP="$(mktemp)" +VERSIONED_EDGE_LINE_0014=NO_COOKIE_SECRET="$(mktemp)" +VERSIONED_EDGE_LINE_0015=SECRETS_BACKUP="" +VERSIONED_EDGE_LINE_0016=JAR_BACKUP="" +VERSIONED_EDGE_LINE_0017=JAR_EXISTED=0 +VERSIONED_EDGE_LINE_0018=AUTH_MUTATED=0 +VERSIONED_EDGE_LINE_0019=FINALIZED=0 +VERSIONED_EDGE_LINE_0020= +VERSIONED_EDGE_LINE_0021=TIMER_WAS_ENABLED="$(systemctl is-enabled "$TIMER" 2>/dev/null || true)" +VERSIONED_EDGE_LINE_0022=TIMER_WAS_ACTIVE="$(systemctl is-active "$TIMER" 2>/dev/null || true)" +VERSIONED_EDGE_LINE_0023= +VERSIONED_EDGE_LINE_0024=on_err(){ +VERSIONED_EDGE_LINE_0025= local rc=$? +VERSIONED_EDGE_LINE_0026= trap - ERR +VERSIONED_EDGE_LINE_0027= printf 'ROOT_CAUSE=UNEXPECTED_COOKIE_UPDATE_ERROR\nROOT_CAUSE_COUNT=1\nDETAIL=line=%s rc=%s\n' "${1:-0}" "$rc" +VERSIONED_EDGE_LINE_0028= exit "$rc" +VERSIONED_EDGE_LINE_0029=} +VERSIONED_EDGE_LINE_0030= +VERSIONED_EDGE_LINE_0031=restore_timer_state(){ +VERSIONED_EDGE_LINE_0032= systemctl stop "$TIMER" >/dev/null 2>&1 || true +VERSIONED_EDGE_LINE_0033= if [ "$TIMER_WAS_ENABLED" = enabled ]; then +VERSIONED_EDGE_LINE_0034= systemctl enable "$TIMER" >/dev/null 2>&1 || true +VERSIONED_EDGE_LINE_0035= else +VERSIONED_EDGE_LINE_0036= systemctl disable "$TIMER" >/dev/null 2>&1 || true +VERSIONED_EDGE_LINE_0037= fi +VERSIONED_EDGE_LINE_0038= if [ "$TIMER_WAS_ACTIVE" = active ]; then +VERSIONED_EDGE_LINE_0039= systemctl start "$TIMER" >/dev/null 2>&1 || true +VERSIONED_EDGE_LINE_0040= fi +VERSIONED_EDGE_LINE_0041=} +VERSIONED_EDGE_LINE_0042= +VERSIONED_EDGE_LINE_0043=restore_auth_state(){ +VERSIONED_EDGE_LINE_0044= if [ "$AUTH_MUTATED" -eq 1 ]; then +VERSIONED_EDGE_LINE_0045= if [ -n "$SECRETS_BACKUP" ] && [ -s "$SECRETS_BACKUP" ]; then +VERSIONED_EDGE_LINE_0046= install -m 0600 -o root -g root "$SECRETS_BACKUP" "$SECRETS" +VERSIONED_EDGE_LINE_0047= fi +VERSIONED_EDGE_LINE_0048= if [ "$JAR_EXISTED" -eq 1 ] && [ -n "$JAR_BACKUP" ] && [ -s "$JAR_BACKUP" ]; then +VERSIONED_EDGE_LINE_0049= install -m 0600 -o root -g root "$JAR_BACKUP" "$COOKIE_JAR" +VERSIONED_EDGE_LINE_0050= else +VERSIONED_EDGE_LINE_0051= rm -f "$COOKIE_JAR" +VERSIONED_EDGE_LINE_0052= fi +VERSIONED_EDGE_LINE_0053= AUTH_MUTATED=0 +VERSIONED_EDGE_LINE_0054= fi +VERSIONED_EDGE_LINE_0055=} +VERSIONED_EDGE_LINE_0056= +VERSIONED_EDGE_LINE_0057=cleanup(){ +VERSIONED_EDGE_LINE_0058= local rc=$? +VERSIONED_EDGE_LINE_0059= trap - ERR +VERSIONED_EDGE_LINE_0060= trap - EXIT INT TERM HUP +VERSIONED_EDGE_LINE_0061= set +e +VERSIONED_EDGE_LINE_0062= if [ "$FINALIZED" -ne 1 ]; then +VERSIONED_EDGE_LINE_0063= restore_auth_state +VERSIONED_EDGE_LINE_0064= restore_timer_state +VERSIONED_EDGE_LINE_0065= fi +VERSIONED_EDGE_LINE_0066= rm -f "$TMP" "$NO_COOKIE_SECRET" +VERSIONED_EDGE_LINE_0067= [ -z "$SECRETS_BACKUP" ] || rm -f "$SECRETS_BACKUP" +VERSIONED_EDGE_LINE_0068= [ -z "$JAR_BACKUP" ] || rm -f "$JAR_BACKUP" +VERSIONED_EDGE_LINE_0069= exit "$rc" +VERSIONED_EDGE_LINE_0070=} +VERSIONED_EDGE_LINE_0071= +VERSIONED_EDGE_LINE_0072=trap 'on_err "$LINENO"' ERR +VERSIONED_EDGE_LINE_0073=trap cleanup EXIT +VERSIONED_EDGE_LINE_0074=trap 'exit 130' INT +VERSIONED_EDGE_LINE_0075=trap 'exit 143' TERM +VERSIONED_EDGE_LINE_0076=trap 'exit 129' HUP +VERSIONED_EDGE_LINE_0077= +VERSIONED_EDGE_LINE_0078=systemctl stop "$TIMER" +VERSIONED_EDGE_LINE_0079= +VERSIONED_EDGE_LINE_0080=WAIT_SECONDS=90 +VERSIONED_EDGE_LINE_0081=DEADLINE=$((SECONDS + WAIT_SECONDS)) +VERSIONED_EDGE_LINE_0082=while systemctl is-active --quiet "$SERVICE" || pgrep -f '/opt/skladchik-reports-monitor/monitor.py' >/dev/null; do +VERSIONED_EDGE_LINE_0083= if (( SECONDS >= DEADLINE )); then +VERSIONED_EDGE_LINE_0084= restore_timer_state +VERSIONED_EDGE_LINE_0085= FINALIZED=1 +VERSIONED_EDGE_LINE_0086= printf 'MONITOR_QUIESCENCE_TIMEOUT\n' +VERSIONED_EDGE_LINE_0087= exit 75 +VERSIONED_EDGE_LINE_0088= fi +VERSIONED_EDGE_LINE_0089= sleep 2 +VERSIONED_EDGE_LINE_0090=done +VERSIONED_EDGE_LINE_0091= +VERSIONED_EDGE_LINE_0092=printf "Вставь полный новый Cookie header для skladchik.org без слова Cookie: и нажми Enter:\n" +VERSIONED_EDGE_LINE_0093=IFS= read -r -s NEW_COOKIE +VERSIONED_EDGE_LINE_0094=printf '\n' +VERSIONED_EDGE_LINE_0095=if [ -z "$NEW_COOKIE" ]; then +VERSIONED_EDGE_LINE_0096= printf 'COOKIE_EMPTY\n' +VERSIONED_EDGE_LINE_0097= exit 1 +VERSIONED_EDGE_LINE_0098=fi +VERSIONED_EDGE_LINE_0099=case "$NEW_COOKIE" in +VERSIONED_EDGE_LINE_0100= *$'\r'*|*$'\n'*) +VERSIONED_EDGE_LINE_0101= printf 'COOKIE_INVALID_LINE_BREAK\n' +VERSIONED_EDGE_LINE_0102= exit 64 +VERSIONED_EDGE_LINE_0103= ;; +VERSIONED_EDGE_LINE_0104=esac +VERSIONED_EDGE_LINE_0105= +VERSIONED_EDGE_LINE_0106=SECRETS_BACKUP="$(mktemp /etc/skladchik-reports-monitor/.secrets.env.rollback.XXXXXX)" +VERSIONED_EDGE_LINE_0107=cp -a "$SECRETS" "$SECRETS_BACKUP" +VERSIONED_EDGE_LINE_0108= +VERSIONED_EDGE_LINE_0109=if [ -s "$COOKIE_JAR" ]; then +VERSIONED_EDGE_LINE_0110= JAR_BACKUP="$(mktemp /var/lib/skladchik-reports-monitor/.cookies.jar.rollback.XXXXXX)" +VERSIONED_EDGE_LINE_0111= cp -a "$COOKIE_JAR" "$JAR_BACKUP" +VERSIONED_EDGE_LINE_0112= JAR_EXISTED=1 +VERSIONED_EDGE_LINE_0113=fi +VERSIONED_EDGE_LINE_0114=AUTH_MUTATED=1 +VERSIONED_EDGE_LINE_0115= +VERSIONED_EDGE_LINE_0116=awk '!/^SKLADCHIK_COOKIE=/' "$SECRETS" >"$TMP" +VERSIONED_EDGE_LINE_0117=printf 'SKLADCHIK_COOKIE=%s\n' "$NEW_COOKIE" >>"$TMP" +VERSIONED_EDGE_LINE_0118=install -m 0600 -o root -g root "$TMP" "$SECRETS" +VERSIONED_EDGE_LINE_0119= +VERSIONED_EDGE_LINE_0120=# The monitor prefers a non-empty cookie jar over SKLADCHIK_COOKIE. +VERSIONED_EDGE_LINE_0121=# Removing the stale jar forces the first probe to use the newly entered Cookie header. +VERSIONED_EDGE_LINE_0122=rm -f "$COOKIE_JAR" +VERSIONED_EDGE_LINE_0123=: >"$OUTPUT" +VERSIONED_EDGE_LINE_0124= +VERSIONED_EDGE_LINE_0125=set +e +VERSIONED_EDGE_LINE_0126=python3 "$MONITOR" run >>"$OUTPUT" 2>&1 +VERSIONED_EDGE_LINE_0127=FIRST_RUN_RC=$? +VERSIONED_EDGE_LINE_0128=set -e +VERSIONED_EDGE_LINE_0129=FIRST_RUN_STATUS="$(awk -F= '$1=="STATUS"{print $2;exit}' "$HEALTH" 2>/dev/null || true)" +VERSIONED_EDGE_LINE_0130= +VERSIONED_EDGE_LINE_0131=SECOND_RUN_RC=1 +VERSIONED_EDGE_LINE_0132=SECOND_RUN_STATUS=NOT_RUN +VERSIONED_EDGE_LINE_0133=if [ "$FIRST_RUN_RC" -eq 0 ] && [ "$FIRST_RUN_STATUS" = OK ] && [ -s "$COOKIE_JAR" ]; then +VERSIONED_EDGE_LINE_0134= # Prove unattended persistence: temporarily remove the header secret, then run only from the new jar. +VERSIONED_EDGE_LINE_0135= awk '!/^SKLADCHIK_COOKIE=/' "$TMP" >"$NO_COOKIE_SECRET" +VERSIONED_EDGE_LINE_0136= install -m 0600 -o root -g root "$NO_COOKIE_SECRET" "$SECRETS" +VERSIONED_EDGE_LINE_0137= set +e +VERSIONED_EDGE_LINE_0138= python3 "$MONITOR" run >>"$OUTPUT" 2>&1 +VERSIONED_EDGE_LINE_0139= SECOND_RUN_RC=$? +VERSIONED_EDGE_LINE_0140= set -e +VERSIONED_EDGE_LINE_0141= SECOND_RUN_STATUS="$(awk -F= '$1=="STATUS"{print $2;exit}' "$HEALTH" 2>/dev/null || true)" +VERSIONED_EDGE_LINE_0142= install -m 0600 -o root -g root "$TMP" "$SECRETS" +VERSIONED_EDGE_LINE_0143=fi +VERSIONED_EDGE_LINE_0144= +VERSIONED_EDGE_LINE_0145=if [ "$FIRST_RUN_RC" -ne 0 ] || [ "$FIRST_RUN_STATUS" != OK ] || [ ! -s "$COOKIE_JAR" ] || [ "$SECOND_RUN_RC" -ne 0 ] || [ "$SECOND_RUN_STATUS" != OK ]; then +VERSIONED_EDGE_LINE_0146= restore_auth_state +VERSIONED_EDGE_LINE_0147= restore_timer_state +VERSIONED_EDGE_LINE_0148= FINALIZED=1 +VERSIONED_EDGE_LINE_0149= printf 'COOKIE_UPDATE_FAILED_ROLLED_BACK\n' +VERSIONED_EDGE_LINE_0150= printf 'FIRST_RUN_RC=%s\nFIRST_RUN_STATUS=%s\n' "$FIRST_RUN_RC" "$FIRST_RUN_STATUS" +VERSIONED_EDGE_LINE_0151= printf 'SECOND_JAR_ONLY_RUN_RC=%s\nSECOND_JAR_ONLY_RUN_STATUS=%s\n' "$SECOND_RUN_RC" "$SECOND_RUN_STATUS" +VERSIONED_EDGE_LINE_0152= printf 'HEALTH_BEGIN\n' +VERSIONED_EDGE_LINE_0153= cat "$HEALTH" 2>/dev/null || true +VERSIONED_EDGE_LINE_0154= printf 'HEALTH_END\n' +VERSIONED_EDGE_LINE_0155= printf 'MONITOR_OUTPUT_TAIL\n' +VERSIONED_EDGE_LINE_0156= tail -n 40 "$OUTPUT" 2>/dev/null || true +VERSIONED_EDGE_LINE_0157= exit 1 +VERSIONED_EDGE_LINE_0158=fi +VERSIONED_EDGE_LINE_0159= +VERSIONED_EDGE_LINE_0160=AUTH_MUTATED=0 +VERSIONED_EDGE_LINE_0161=rm -f "$SECRETS_BACKUP" +VERSIONED_EDGE_LINE_0162=SECRETS_BACKUP="" +VERSIONED_EDGE_LINE_0163=if [ -n "$JAR_BACKUP" ]; then +VERSIONED_EDGE_LINE_0164= rm -f "$JAR_BACKUP" +VERSIONED_EDGE_LINE_0165= JAR_BACKUP="" +VERSIONED_EDGE_LINE_0166=fi +VERSIONED_EDGE_LINE_0167= +VERSIONED_EDGE_LINE_0168=systemctl reset-failed "$SERVICE" "$TIMER" >/dev/null 2>&1 || true +VERSIONED_EDGE_LINE_0169=systemctl enable --now skladchik-reports-monitor.timer >/dev/null 2>&1 || true +VERSIONED_EDGE_LINE_0170=FINALIZED=1 +VERSIONED_EDGE_LINE_0171=echo "COOKIE_UPDATE_OK" +VERSIONED_EDGE_LINE_0172=echo "FRESH_COOKIE_FORCED=YES" +VERSIONED_EDGE_LINE_0173=echo "STALE_COOKIE_JAR_BYPASSED=YES" +VERSIONED_EDGE_LINE_0174=echo "SECOND_JAR_ONLY_PERSISTENCE_RUN=OK" +VERSIONED_EDGE_LINE_0175=echo "SECRET_PRINTED=NO" +VERSIONED_EDGE_LINE_0176=echo "HEALTH_BEGIN" +VERSIONED_EDGE_LINE_0177=cat "$HEALTH" 2>/dev/null || true +VERSIONED_EDGE_LINE_0178=echo "HEALTH_END" +VERSIONED_EDGE_END +VERSIONED_WRAPPER_BEGIN +VERSIONED_WRAPPER_PATH_BASENAME=skladchik-reports-monitor-cookie-update +VERSIONED_WRAPPER_PRESENT=true +VERSIONED_WRAPPER_SHA256=ea2d89ce67893a6d89b29610e4d46e207932ecc157173454585f67890f58810c +VERSIONED_WRAPPER_BYTES=638 +VERSIONED_WRAPPER_LINES=16 +VERSIONED_WRAPPER_LINE_0001=#!/usr/bin/env bash +VERSIONED_WRAPPER_LINE_0002=set -Eeuo pipefail +VERSIONED_WRAPPER_LINE_0003=export SYSTEMD_PAGER=cat PAGER=cat SYSTEMD_LESS=FRXMK +VERSIONED_WRAPPER_LINE_0004=EDGE=debian@[PRIVATE_IP] +VERSIONED_WRAPPER_LINE_0005=EDGE_SCRIPT=/usr/local/sbin/skladchik-reports-monitor-cookie-update-edge +VERSIONED_WRAPPER_LINE_0006=SSH=(-o BatchMode=yes -o ConnectTimeout=15 -o StrictHostKeyChecking=yes -o UserKnownHostsFile=[SENSITIVE_PATH] +VERSIONED_WRAPPER_LINE_0007=printf '\033[93m%s\033[0m\n' 'SKLADCHIK CONTROLLED COOKIE UPDATE' +VERSIONED_WRAPPER_LINE_0008=printf 'SAFE_OUTPUT=YES\nSECRET_PRINTED=NO\nSTEP=SKLADCHIK_REPORTS_MONITOR_COOKIE_UPDATE\n' +VERSIONED_WRAPPER_LINE_0009=if ssh -tt "${SSH[@]}" "$EDGE" sudo -n "$EDGE_SCRIPT"; then +VERSIONED_WRAPPER_LINE_0010= rc=0 +VERSIONED_WRAPPER_LINE_0011=else +VERSIONED_WRAPPER_LINE_0012= rc=$? +VERSIONED_WRAPPER_LINE_0013=fi +VERSIONED_WRAPPER_LINE_0014=printf 'SSH_COOKIE_UPDATE_RC=%s\n' "$rc" +VERSIONED_WRAPPER_LINE_0015=printf '\033[93m%s\033[0m\n' 'END' +VERSIONED_WRAPPER_LINE_0016=exit "$rc" +VERSIONED_WRAPPER_END +LIVE_WRAPPER_BEGIN +LIVE_WRAPPER_PATH_BASENAME=skladchik-reports-monitor-cookie-update +LIVE_WRAPPER_PRESENT=true +LIVE_WRAPPER_SHA256=ea2d89ce67893a6d89b29610e4d46e207932ecc157173454585f67890f58810c +LIVE_WRAPPER_BYTES=638 +LIVE_WRAPPER_LINES=16 +LIVE_WRAPPER_LINE_0001=#!/usr/bin/env bash +LIVE_WRAPPER_LINE_0002=set -Eeuo pipefail +LIVE_WRAPPER_LINE_0003=export SYSTEMD_PAGER=cat PAGER=cat SYSTEMD_LESS=FRXMK +LIVE_WRAPPER_LINE_0004=EDGE=debian@[PRIVATE_IP] +LIVE_WRAPPER_LINE_0005=EDGE_SCRIPT=/usr/local/sbin/skladchik-reports-monitor-cookie-update-edge +LIVE_WRAPPER_LINE_0006=SSH=(-o BatchMode=yes -o ConnectTimeout=15 -o StrictHostKeyChecking=yes -o UserKnownHostsFile=[SENSITIVE_PATH] +LIVE_WRAPPER_LINE_0007=printf '\033[93m%s\033[0m\n' 'SKLADCHIK CONTROLLED COOKIE UPDATE' +LIVE_WRAPPER_LINE_0008=printf 'SAFE_OUTPUT=YES\nSECRET_PRINTED=NO\nSTEP=SKLADCHIK_REPORTS_MONITOR_COOKIE_UPDATE\n' +LIVE_WRAPPER_LINE_0009=if ssh -tt "${SSH[@]}" "$EDGE" sudo -n "$EDGE_SCRIPT"; then +LIVE_WRAPPER_LINE_0010= rc=0 +LIVE_WRAPPER_LINE_0011=else +LIVE_WRAPPER_LINE_0012= rc=$? +LIVE_WRAPPER_LINE_0013=fi +LIVE_WRAPPER_LINE_0014=printf 'SSH_COOKIE_UPDATE_RC=%s\n' "$rc" +LIVE_WRAPPER_LINE_0015=printf '\033[93m%s\033[0m\n' 'END' +LIVE_WRAPPER_LINE_0016=exit "$rc" +LIVE_WRAPPER_END +SOURCE_RELATION_BEGIN +VERSIONED_EDGE_SHA_EXPECTED=10fe854274dca1a053cfd8c0155340bd689bf3f6555c70dbc14b890cbafb93fa +VERSIONED_EDGE_SHA_MATCH=true +VERSIONED_WRAPPER_SHA_EXPECTED=ea2d89ce67893a6d89b29610e4d46e207932ecc157173454585f67890f58810c +VERSIONED_WRAPPER_SHA_MATCH=true +LIVE_WRAPPER_EQUALS_VERSIONED=true +SOURCE_RELATION_END +CHANGES_MADE_BY_944=false +ROLLBACK_STARTED=false +ROLLBACK_RESTORED=null +HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-260923-SKLADCHIK-CURRENT-EDGE-UPDATER-SOURCE-944R1","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null} +SKLADCHIK944_END=true + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index c2bff37a..317f295b 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,19 +1,19 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "SUPPORT-260923-SPB-TLS-BRIDGE-9189-LOCAL-CARRIER-RCA-9190R1", + "command_id": "SUPPORT-260923-SKLADCHIK-CURRENT-EDGE-UPDATER-SOURCE-944R1", "status": "OK", "rc": 0, "host": "pve01", "mode": "read-only", - "component": "spb-tls-bridge-9189-local-carrier-rca", - "started_at_utc": "2026-09-23T12:11:08Z", - "finished_at_utc": "2026-09-23T12:11:11Z", + "component": "skladchik-current-edge-updater-source", + "started_at_utc": "2026-09-23T12:14:20Z", + "finished_at_utc": "2026-09-23T12:14:20Z", "reference_register_checked": true, "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", "error_register_checked": true, "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", - "command_sha256": "67f2bec7a01f39fbfdf79b5496aec0aae6532cca8cfd5192bb6552cbcbe851b9", + "command_sha256": "0171a3ced661558ed6f0ab909ba014aea79053b21400f6b2f2eceba92257d7b8", "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": "575faa031e1c1f1224a7c9cae59ecf22d97781ab22ca48ffdb8a6b50cc3e528c", - "sanitized_output_sha256": "575faa031e1c1f1224a7c9cae59ecf22d97781ab22ca48ffdb8a6b50cc3e528c", + "raw_evidence_sha256": "ba150554aca68c2348134a9f0017b998a31eba97431978781bb51e7cf1999c75", + "sanitized_output_sha256": "ba150554aca68c2348134a9f0017b998a31eba97431978781bb51e7cf1999c75", "output_truncated_in_json": false, "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "RECOVERY9190_BEGIN=true\nTARGET_CHANGE_CID=SUPPORT-260923-SPB-TLS-BRIDGE-SELF-PUBLISHING-FINAL-9189R1\nTARGET_LOCAL_CID=SUPPORT-260923-SPB-TLS-BRIDGE-SELF-PUBLISHING-FINAL-9189R1\nTARGET_CHANGE_EXACT_GITEA=404\nTARGET_LOCAL_EXACT_GITEA=404\nMUTATION_BOUNDARY=READ_ONLY_ONLY;NO_VM130_WRITE;NO_SPB_WRITE;NO_DNS_WRITE;NO_NGINX_RELOAD\nLOCAL_ARTIFACT=dir.txt|PRESENT=true\nLOCAL_ARTIFACT_META=dir.txt|SIZE=182|SHA16=09fb7d225bf69875\nLOCAL_SAFE=dir.txt|L1|endpoint.b64\nLOCAL_SAFE=dir.txt|L2|local-preflight-err.txt\nLOCAL_SAFE=dir.txt|L3|local-preflight-out.txt\nLOCAL_SAFE=dir.txt|L4|local-summary.env\nLOCAL_SAFE=dir.txt|L5|outer.b64\nLOCAL_SAFE=dir.txt|L6|outer.sh\nLOCAL_SAFE=dir.txt|L7|preflight.b64\nLOCAL_SAFE=dir.txt|L8|preflight.ps1\nLOCAL_SAFE=dir.txt|L9|spb-probe-err.txt\nLOCAL_SAFE=dir.txt|L10|spb-probe-out.txt\nLOCAL_SAFE=dir.txt|L11|sudo.b64\nLOCAL_ARTIFACT=local-preflight-err.txt|PRESENT=true\nLOCAL_ARTIFACT_META=local-preflight-err.txt|SIZE=0|SHA16=e3b0c44298fc1c14\nLOCAL_ARTIFACT=local-preflight-out.txt|PRESENT=true\nLOCAL_ARTIFACT_META=local-preflight-out.txt|SIZE=0|SHA16=e3b0c44298fc1c14\nLOCAL_ARTIFACT=local-summary.env|PRESENT=true\nLOCAL_ARTIFACT_META=local-summary.env|SIZE=365|SHA16=8c6afc015d07d942\nLOCAL_SAFE=local-summary.env|L1|LOCAL_PREFLIGHT_BEGIN=true\nLOCAL_SAFE=local-summary.env|L2|CID=SUPPORT-260923-SPB-TLS-BRIDGE-SELF-PUBLISHING-FINAL-9189R1\nLOCAL_SAFE=local-summary.env|L3|PLINK_PRESENT=true\nLOCAL_SAFE=local-summary.env|L4|WINDOWS_ENDPOINT_SHA16=6d6149f42864ce03\nLOCAL_SAFE=local-summary.env|L5|WINDOWS_DNS_IPV4_COUNT=1\nLOCAL_SAFE=local-summary.env|L6|WINDOWS_ENDPOINT_HASH_MATCH=true\nLOCAL_SAFE=local-summary.env|L7|WINDOWS_PINNED_SPB_PROBE_RC=0\nLOCAL_SAFE=local-summary.env|L8|WINDOWS_EDGEADMIN_MATCH=false\nLOCAL_SAFE=local-summary.env|L9|WINDOWS_DPAPI_DECRYPTABLE_COUNT=1\nLOCAL_SAFE=local-summary.env|L10|LOCAL_PREFLIGHT_STATUS=FAIL\nLOCAL_SAFE=local-summary.env|L11|LOCAL_PREFLIGHT_END=true\nLOCAL_ARTIFACT=status.txt|PRESENT=false\nLOCAL_ARTIFACT=stdout.txt|PRESENT=false\nLOCAL_ARTIFACT=stderr.txt|PRESENT=false\nLOCAL_ARTIFACT=preflight.ps1|PRESENT=true\nLOCAL_ARTIFACT_META=preflight.ps1|SIZE=5509|SHA16=ccc6689ad5229a5f\nLOCAL_ARTIFACT=outer.sh|PRESENT=true\nLOCAL_ARTIFACT_META=outer.sh|SIZE=24740|SHA16=1444bb7fae636e67\nTARGET_LEDGER_MATCH_COUNT=0\nTARGET_LOCAL_FILE_COUNT=0\nTARGET_PROCESS_COUNT=0\nTARGET_RUN_FILE_COUNT=1\nTARGET_JOURNAL_MATCH_COUNT=0\nVM130_QGA_TRANSPORT_RC=0\nVM130_QGA_STDERR_SHA16=e3b0c44298fc1c14\nVM130_QGA_EXITCODE=0\nVM130_GUEST_STDERR_SHA16=e3b0c44298fc1c14\nRECOVERY9188_VM130={\"bridge_root_exists\":false,\"certs\":{\"git-read.gram1.ru\":{\"checkend48h\":false,\"checkhost\":false,\"dir_exists\":false,\"fullchain_exists\":false,\"privkey_exists\":false,\"spki_match\":false},\"www.hbarhub.ru\":{\"checkend48h\":false,\"checkhost\":false,\"dir_exists\":false,\"fullchain_exists\":false,\"privkey_exists\":false,\"spki_match\":false},\"www.newfilya.ru\":{\"checkend48h\":false,\"checkhost\":false,\"dir_exists\":false,\"fullchain_exists\":false,\"privkey_exists\":false,\"spki_match\":false}},\"classification\":\"CLEAN_BASELINE\",\"configs\":{\"991201.conf\":{\"exists\":false},\"991202.conf\":{\"exists\":false},\"991203.conf\":{\"exists\":false}},\"https\":{\"git-read.gram1.ru\":{\"code\":\"000\",\"rc\":60,\"stderr_sha16\":\"6039978cbf174c90\"},\"www.hbarhub.ru\":{\"code\":\"000\",\"rc\":60,\"stderr_sha16\":\"6039978cbf174c90\"},\"www.newfilya.ru\":{\"code\":\"000\",\"rc\":60,\"stderr_sha16\":\"6039978cbf174c90\"}},\"nginx_test\":{\"rc\":0,\"stderr_sha16\":\"9cb221b6993277a1\"},\"npm_root_exists\":true,\"npmplus\":{\"data_mount_exact\":true,\"health\":\"healthy\",\"inspect_rc\":0,\"running\":true},\"proxy_root_exists\":true,\"uid\":0}\nACTUAL_VM130_CLASSIFICATION=CLEAN_BASELINE\nRECOVERY9190_COMPLETE=true\nCHANGES_MADE=NO\nTASK_COMPLETE=true\nTASK_RESULT=PASS_SPB_TLS_BRIDGE_9189_LOCAL_CARRIER_RCA\nDECISION=READ_EXACT_9190_AND_FIX_ONLY_PROVEN_9189_LOCAL_STAGE\nNEXT_GATE=EXACT_9190_LOCAL_ERROR_AND_VM130_CLASSIFICATION\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-260923-SPB-TLS-BRIDGE-9189-LOCAL-CARRIER-RCA-9190R1\",\"status\":\"OK\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\n" + "output": "SKLADCHIK944_BEGIN=true\nCOMMAND_ID=SUPPORT-260923-SKLADCHIK-CURRENT-EDGE-UPDATER-SOURCE-944R1\nMODE=read-only\nCOMPONENT=skladchik-current-edge-updater-source\nPREDECESSOR_943=STALE_MIGRATION_PREFLIGHT_EXPECTS_ORIGINAL_SHA\nMUTATION_BOUNDARY=NONE_READ_ONLY\nVERSIONED_EDGE_BEGIN\nVERSIONED_EDGE_PATH_BASENAME=skladchik-reports-monitor-cookie-update-edge\nVERSIONED_EDGE_PRESENT=true\nVERSIONED_EDGE_SHA256=10fe854274dca1a053cfd8c0155340bd689bf3f6555c70dbc14b890cbafb93fa\nVERSIONED_EDGE_BYTES=5247\nVERSIONED_EDGE_LINES=178\nVERSIONED_EDGE_LINE_0001=#!/usr/bin/env bash\nVERSIONED_EDGE_LINE_0002=set -Eeuo pipefail\nVERSIONED_EDGE_LINE_0003=umask 077\nVERSIONED_EDGE_LINE_0004=\nVERSIONED_EDGE_LINE_0005=SECRETS=/etc/skladchik-reports-monitor/secrets.env\nVERSIONED_EDGE_LINE_0006=MONITOR=/opt/skladchik-reports-monitor/monitor.py\nVERSIONED_EDGE_LINE_0007=COOKIE_JAR=/var/lib/skladchik-reports-monitor/cookies.jar\nVERSIONED_EDGE_LINE_0008=HEALTH=/var/lib/skladchik-reports-monitor/health.txt\nVERSIONED_EDGE_LINE_0009=OUTPUT=/tmp/skladchik-cookie-update-monitor.out\nVERSIONED_EDGE_LINE_0010=TIMER=skladchik-reports-monitor.timer\nVERSIONED_EDGE_LINE_0011=SERVICE=skladchik-reports-monitor.service\nVERSIONED_EDGE_LINE_0012=\nVERSIONED_EDGE_LINE_0013=TMP=\"$(mktemp)\"\nVERSIONED_EDGE_LINE_0014=NO_COOKIE_SECRET=\"$(mktemp)\"\nVERSIONED_EDGE_LINE_0015=SECRETS_BACKUP=\"\"\nVERSIONED_EDGE_LINE_0016=JAR_BACKUP=\"\"\nVERSIONED_EDGE_LINE_0017=JAR_EXISTED=0\nVERSIONED_EDGE_LINE_0018=AUTH_MUTATED=0\nVERSIONED_EDGE_LINE_0019=FINALIZED=0\nVERSIONED_EDGE_LINE_0020=\nVERSIONED_EDGE_LINE_0021=TIMER_WAS_ENABLED=\"$(systemctl is-enabled \"$TIMER\" 2>/dev/null || true)\"\nVERSIONED_EDGE_LINE_0022=TIMER_WAS_ACTIVE=\"$(systemctl is-active \"$TIMER\" 2>/dev/null || true)\"\nVERSIONED_EDGE_LINE_0023=\nVERSIONED_EDGE_LINE_0024=on_err(){\nVERSIONED_EDGE_LINE_0025= local rc=$?\nVERSIONED_EDGE_LINE_0026= trap - ERR\nVERSIONED_EDGE_LINE_0027= printf 'ROOT_CAUSE=UNEXPECTED_COOKIE_UPDATE_ERROR\\nROOT_CAUSE_COUNT=1\\nDETAIL=line=%s rc=%s\\n' \"${1:-0}\" \"$rc\"\nVERSIONED_EDGE_LINE_0028= exit \"$rc\"\nVERSIONED_EDGE_LINE_0029=}\nVERSIONED_EDGE_LINE_0030=\nVERSIONED_EDGE_LINE_0031=restore_timer_state(){\nVERSIONED_EDGE_LINE_0032= systemctl stop \"$TIMER\" >/dev/null 2>&1 || true\nVERSIONED_EDGE_LINE_0033= if [ \"$TIMER_WAS_ENABLED\" = enabled ]; then\nVERSIONED_EDGE_LINE_0034= systemctl enable \"$TIMER\" >/dev/null 2>&1 || true\nVERSIONED_EDGE_LINE_0035= else\nVERSIONED_EDGE_LINE_0036= systemctl disable \"$TIMER\" >/dev/null 2>&1 || true\nVERSIONED_EDGE_LINE_0037= fi\nVERSIONED_EDGE_LINE_0038= if [ \"$TIMER_WAS_ACTIVE\" = active ]; then\nVERSIONED_EDGE_LINE_0039= systemctl start \"$TIMER\" >/dev/null 2>&1 || true\nVERSIONED_EDGE_LINE_0040= fi\nVERSIONED_EDGE_LINE_0041=}\nVERSIONED_EDGE_LINE_0042=\nVERSIONED_EDGE_LINE_0043=restore_auth_state(){\nVERSIONED_EDGE_LINE_0044= if [ \"$AUTH_MUTATED\" -eq 1 ]; then\nVERSIONED_EDGE_LINE_0045= if [ -n \"$SECRETS_BACKUP\" ] && [ -s \"$SECRETS_BACKUP\" ]; then\nVERSIONED_EDGE_LINE_0046= install -m 0600 -o root -g root \"$SECRETS_BACKUP\" \"$SECRETS\"\nVERSIONED_EDGE_LINE_0047= fi\nVERSIONED_EDGE_LINE_0048= if [ \"$JAR_EXISTED\" -eq 1 ] && [ -n \"$JAR_BACKUP\" ] && [ -s \"$JAR_BACKUP\" ]; then\nVERSIONED_EDGE_LINE_0049= install -m 0600 -o root -g root \"$JAR_BACKUP\" \"$COOKIE_JAR\"\nVERSIONED_EDGE_LINE_0050= else\nVERSIONED_EDGE_LINE_0051= rm -f \"$COOKIE_JAR\"\nVERSIONED_EDGE_LINE_0052= fi\nVERSIONED_EDGE_LINE_0053= AUTH_MUTATED=0\nVERSIONED_EDGE_LINE_0054= fi\nVERSIONED_EDGE_LINE_0055=}\nVERSIONED_EDGE_LINE_0056=\nVERSIONED_EDGE_LINE_0057=cleanup(){\nVERSIONED_EDGE_LINE_0058= local rc=$?\nVERSIONED_EDGE_LINE_0059= trap - ERR\nVERSIONED_EDGE_LINE_0060= trap - EXIT INT TERM HUP\nVERSIONED_EDGE_LINE_0061= set +e\nVERSIONED_EDGE_LINE_0062= if [ \"$FINALIZED\" -ne 1 ]; then\nVERSIONED_EDGE_LINE_0063= restore_auth_state\nVERSIONED_EDGE_LINE_0064= restore_timer_state\nVERSIONED_EDGE_LINE_0065= fi\nVERSIONED_EDGE_LINE_0066= rm -f \"$TMP\" \"$NO_COOKIE_SECRET\"\nVERSIONED_EDGE_LINE_0067= [ -z \"$SECRETS_BACKUP\" ] || rm -f \"$SECRETS_BACKUP\"\nVERSIONED_EDGE_LINE_0068= [ -z \"$JAR_BACKUP\" ] || rm -f \"$JAR_BACKUP\"\nVERSIONED_EDGE_LINE_0069= exit \"$rc\"\nVERSIONED_EDGE_LINE_0070=}\nVERSIONED_EDGE_LINE_0071=\nVERSIONED_EDGE_LINE_0072=trap 'on_err \"$LINENO\"' ERR\nVERSIONED_EDGE_LINE_0073=trap cleanup EXIT\nVERSIONED_EDGE_LINE_0074=trap 'exit 130' INT\nVERSIONED_EDGE_LINE_0075=trap 'exit 143' TERM\nVERSIONED_EDGE_LINE_0076=trap 'exit 129' HUP\nVERSIONED_EDGE_LINE_0077=\nVERSIONED_EDGE_LINE_0078=systemctl stop \"$TIMER\"\nVERSIONED_EDGE_LINE_0079=\nVERSIONED_EDGE_LINE_0080=WAIT_SECONDS=90\nVERSIONED_EDGE_LINE_0081=DEADLINE=$((SECONDS + WAIT_SECONDS))\nVERSIONED_EDGE_LINE_0082=while systemctl is-active --quiet \"$SERVICE\" || pgrep -f '/opt/skladchik-reports-monitor/monitor.py' >/dev/null; do\nVERSIONED_EDGE_LINE_0083= if (( SECONDS >= DEADLINE )); then\nVERSIONED_EDGE_LINE_0084= restore_timer_state\nVERSIONED_EDGE_LINE_0085= FINALIZED=1\nVERSIONED_EDGE_LINE_0086= printf 'MONITOR_QUIESCENCE_TIMEOUT\\n'\nVERSIONED_EDGE_LINE_0087= exit 75\nVERSIONED_EDGE_LINE_0088= fi\nVERSIONED_EDGE_LINE_0089= sleep 2\nVERSIONED_EDGE_LINE_0090=done\nVERSIONED_EDGE_LINE_0091=\nVERSIONED_EDGE_LINE_0092=printf \"Вставь полный новый Cookie header для skladchik.org без слова Cookie: и нажми Enter:\\n\"\nVERSIONED_EDGE_LINE_0093=IFS= read -r -s NEW_COOKIE\nVERSIONED_EDGE_LINE_0094=printf '\\n'\nVERSIONED_EDGE_LINE_0095=if [ -z \"$NEW_COOKIE\" ]; then\nVERSIONED_EDGE_LINE_0096= printf 'COOKIE_EMPTY\\n'\nVERSIONED_EDGE_LINE_0097= exit 1\nVERSIONED_EDGE_LINE_0098=fi\nVERSIONED_EDGE_LINE_0099=case \"$NEW_COOKIE\" in\nVERSIONED_EDGE_LINE_0100= *$'\\r'*|*$'\\n'*)\nVERSIONED_EDGE_LINE_0101= printf 'COOKIE_INVALID_LINE_BREAK\\n'\nVERSIONED_EDGE_LINE_0102= exit 64\nVERSIONED_EDGE_LINE_0103= ;;\nVERSIONED_EDGE_LINE_0104=esac\nVERSIONED_EDGE_LINE_0105=\nVERSIONED_EDGE_LINE_0106=SECRETS_BACKUP=\"$(mktemp /etc/skladchik-reports-monitor/.secrets.env.rollback.XXXXXX)\"\nVERSIONED_EDGE_LINE_0107=cp -a \"$SECRETS\" \"$SECRETS_BACKUP\"\nVERSIONED_EDGE_LINE_0108=\nVERSIONED_EDGE_LINE_0109=if [ -s \"$COOKIE_JAR\" ]; then\nVERSIONED_EDGE_LINE_0110= JAR_BACKUP=\"$(mktemp /var/lib/skladchik-reports-monitor/.cookies.jar.rollback.XXXXXX)\"\nVERSIONED_EDGE_LINE_0111= cp -a \"$COOKIE_JAR\" \"$JAR_BACKUP\"\nVERSIONED_EDGE_LINE_0112= JAR_EXISTED=1\nVERSIONED_EDGE_LINE_0113=fi\nVERSIONED_EDGE_LINE_0114=AUTH_MUTATED=1\nVERSIONED_EDGE_LINE_0115=\nVERSIONED_EDGE_LINE_0116=awk '!/^SKLADCHIK_COOKIE=/' \"$SECRETS\" >\"$TMP\"\nVERSIONED_EDGE_LINE_0117=printf 'SKLADCHIK_COOKIE=%s\\n' \"$NEW_COOKIE\" >>\"$TMP\"\nVERSIONED_EDGE_LINE_0118=install -m 0600 -o root -g root \"$TMP\" \"$SECRETS\"\nVERSIONED_EDGE_LINE_0119=\nVERSIONED_EDGE_LINE_0120=# The monitor prefers a non-empty cookie jar over SKLADCHIK_COOKIE.\nVERSIONED_EDGE_LINE_0121=# Removing the stale jar forces the first probe to use the newly entered Cookie header.\nVERSIONED_EDGE_LINE_0122=rm -f \"$COOKIE_JAR\"\nVERSIONED_EDGE_LINE_0123=: >\"$OUTPUT\"\nVERSIONED_EDGE_LINE_0124=\nVERSIONED_EDGE_LINE_0125=set +e\nVERSIONED_EDGE_LINE_0126=python3 \"$MONITOR\" run >>\"$OUTPUT\" 2>&1\nVERSIONED_EDGE_LINE_0127=FIRST_RUN_RC=$?\nVERSIONED_EDGE_LINE_0128=set -e\nVERSIONED_EDGE_LINE_0129=FIRST_RUN_STATUS=\"$(awk -F= '$1==\"STATUS\"{print $2;exit}' \"$HEALTH\" 2>/dev/null || true)\"\nVERSIONED_EDGE_LINE_0130=\nVERSIONED_EDGE_LINE_0131=SECOND_RUN_RC=1\nVERSIONED_EDGE_LINE_0132=SECOND_RUN_STATUS=NOT_RUN\nVERSIONED_EDGE_LINE_0133=if [ \"$FIRST_RUN_RC\" -eq 0 ] && [ \"$FIRST_RUN_STATUS\" = OK ] && [ -s \"$COOKIE_JAR\" ]; then\nVERSIONED_EDGE_LINE_0134= # Prove unattended persistence: temporarily remove the header secret, then run only from the new jar.\nVERSIONED_EDGE_LINE_0135= awk '!/^SKLADCHIK_COOKIE=/' \"$TMP\" >\"$NO_COOKIE_SECRET\"\nVERSIONED_EDGE_LINE_0136= install -m 0600 -o root -g root \"$NO_COOKIE_SECRET\" \"$SECRETS\"\nVERSIONED_EDGE_LINE_0137= set +e\nVERSIONED_EDGE_LINE_0138= python3 \"$MONITOR\" run >>\"$OUTPUT\" 2>&1\nVERSIONED_EDGE_LINE_0139= SECOND_RUN_RC=$?\nVERSIONED_EDGE_LINE_0140= set -e\nVERSIONED_EDGE_LINE_0141= SECOND_RUN_STATUS=\"$(awk -F= '$1==\"STATUS\"{print $2;exit}' \"$HEALTH\" 2>/dev/null || true)\"\nVERSIONED_EDGE_LINE_0142= install -m 0600 -o root -g root \"$TMP\" \"$SECRETS\"\nVERSIONED_EDGE_LINE_0143=fi\nVERSIONED_EDGE_LINE_0144=\nVERSIONED_EDGE_LINE_0145=if [ \"$FIRST_RUN_RC\" -ne 0 ] || [ \"$FIRST_RUN_STATUS\" != OK ] || [ ! -s \"$COOKIE_JAR\" ] || [ \"$SECOND_RUN_RC\" -ne 0 ] || [ \"$SECOND_RUN_STATUS\" != OK ]; then\nVERSIONED_EDGE_LINE_0146= restore_auth_state\nVERSIONED_EDGE_LINE_0147= restore_timer_state\nVERSIONED_EDGE_LINE_0148= FINALIZED=1\nVERSIONED_EDGE_LINE_0149= printf 'COOKIE_UPDATE_FAILED_ROLLED_BACK\\n'\nVERSIONED_EDGE_LINE_0150= printf 'FIRST_RUN_RC=%s\\nFIRST_RUN_STATUS=%s\\n' \"$FIRST_RUN_RC\" \"$FIRST_RUN_STATUS\"\nVERSIONED_EDGE_LINE_0151= printf 'SECOND_JAR_ONLY_RUN_RC=%s\\nSECOND_JAR_ONLY_RUN_STATUS=%s\\n' \"$SECOND_RUN_RC\" \"$SECOND_RUN_STATUS\"\nVERSIONED_EDGE_LINE_0152= printf 'HEALTH_BEGIN\\n'\nVERSIONED_EDGE_LINE_0153= cat \"$HEALTH\" 2>/dev/null || true\nVERSIONED_EDGE_LINE_0154= printf 'HEALTH_END\\n'\nVERSIONED_EDGE_LINE_0155= printf 'MONITOR_OUTPUT_TAIL\\n'\nVERSIONED_EDGE_LINE_0156= tail -n 40 \"$OUTPUT\" 2>/dev/null || true\nVERSIONED_EDGE_LINE_0157= exit 1\nVERSIONED_EDGE_LINE_0158=fi\nVERSIONED_EDGE_LINE_0159=\nVERSIONED_EDGE_LINE_0160=AUTH_MUTATED=0\nVERSIONED_EDGE_LINE_0161=rm -f \"$SECRETS_BACKUP\"\nVERSIONED_EDGE_LINE_0162=SECRETS_BACKUP=\"\"\nVERSIONED_EDGE_LINE_0163=if [ -n \"$JAR_BACKUP\" ]; then\nVERSIONED_EDGE_LINE_0164= rm -f \"$JAR_BACKUP\"\nVERSIONED_EDGE_LINE_0165= JAR_BACKUP=\"\"\nVERSIONED_EDGE_LINE_0166=fi\nVERSIONED_EDGE_LINE_0167=\nVERSIONED_EDGE_LINE_0168=systemctl reset-failed \"$SERVICE\" \"$TIMER\" >/dev/null 2>&1 || true\nVERSIONED_EDGE_LINE_0169=systemctl enable --now skladchik-reports-monitor.timer >/dev/null 2>&1 || true\nVERSIONED_EDGE_LINE_0170=FINALIZED=1\nVERSIONED_EDGE_LINE_0171=echo \"COOKIE_UPDATE_OK\"\nVERSIONED_EDGE_LINE_0172=echo \"FRESH_COOKIE_FORCED=YES\"\nVERSIONED_EDGE_LINE_0173=echo \"STALE_COOKIE_JAR_BYPASSED=YES\"\nVERSIONED_EDGE_LINE_0174=echo \"SECOND_JAR_ONLY_PERSISTENCE_RUN=OK\"\nVERSIONED_EDGE_LINE_0175=echo \"SECRET_PRINTED=NO\"\nVERSIONED_EDGE_LINE_0176=echo \"HEALTH_BEGIN\"\nVERSIONED_EDGE_LINE_0177=cat \"$HEALTH\" 2>/dev/null || true\nVERSIONED_EDGE_LINE_0178=echo \"HEALTH_END\"\nVERSIONED_EDGE_END\nVERSIONED_WRAPPER_BEGIN\nVERSIONED_WRAPPER_PATH_BASENAME=skladchik-reports-monitor-cookie-update\nVERSIONED_WRAPPER_PRESENT=true\nVERSIONED_WRAPPER_SHA256=ea2d89ce67893a6d89b29610e4d46e207932ecc157173454585f67890f58810c\nVERSIONED_WRAPPER_BYTES=638\nVERSIONED_WRAPPER_LINES=16\nVERSIONED_WRAPPER_LINE_0001=#!/usr/bin/env bash\nVERSIONED_WRAPPER_LINE_0002=set -Eeuo pipefail\nVERSIONED_WRAPPER_LINE_0003=export SYSTEMD_PAGER=cat PAGER=cat SYSTEMD_LESS=FRXMK\nVERSIONED_WRAPPER_LINE_0004=EDGE=debian@[PRIVATE_IP]\nVERSIONED_WRAPPER_LINE_0005=EDGE_SCRIPT=/usr/local/sbin/skladchik-reports-monitor-cookie-update-edge\nVERSIONED_WRAPPER_LINE_0006=SSH=(-o BatchMode=yes -o ConnectTimeout=15 -o StrictHostKeyChecking=yes -o UserKnownHostsFile=[SENSITIVE_PATH]\nVERSIONED_WRAPPER_LINE_0007=printf '\\033[93m%s\\033[0m\\n' 'SKLADCHIK CONTROLLED COOKIE UPDATE'\nVERSIONED_WRAPPER_LINE_0008=printf 'SAFE_OUTPUT=YES\\nSECRET_PRINTED=NO\\nSTEP=SKLADCHIK_REPORTS_MONITOR_COOKIE_UPDATE\\n'\nVERSIONED_WRAPPER_LINE_0009=if ssh -tt \"${SSH[@]}\" \"$EDGE\" sudo -n \"$EDGE_SCRIPT\"; then\nVERSIONED_WRAPPER_LINE_0010= rc=0\nVERSIONED_WRAPPER_LINE_0011=else\nVERSIONED_WRAPPER_LINE_0012= rc=$?\nVERSIONED_WRAPPER_LINE_0013=fi\nVERSIONED_WRAPPER_LINE_0014=printf 'SSH_COOKIE_UPDATE_RC=%s\\n' \"$rc\"\nVERSIONED_WRAPPER_LINE_0015=printf '\\033[93m%s\\033[0m\\n' 'END'\nVERSIONED_WRAPPER_LINE_0016=exit \"$rc\"\nVERSIONED_WRAPPER_END\nLIVE_WRAPPER_BEGIN\nLIVE_WRAPPER_PATH_BASENAME=skladchik-reports-monitor-cookie-update\nLIVE_WRAPPER_PRESENT=true\nLIVE_WRAPPER_SHA256=ea2d89ce67893a6d89b29610e4d46e207932ecc157173454585f67890f58810c\nLIVE_WRAPPER_BYTES=638\nLIVE_WRAPPER_LINES=16\nLIVE_WRAPPER_LINE_0001=#!/usr/bin/env bash\nLIVE_WRAPPER_LINE_0002=set -Eeuo pipefail\nLIVE_WRAPPER_LINE_0003=export SYSTEMD_PAGER=cat PAGER=cat SYSTEMD_LESS=FRXMK\nLIVE_WRAPPER_LINE_0004=EDGE=debian@[PRIVATE_IP]\nLIVE_WRAPPER_LINE_0005=EDGE_SCRIPT=/usr/local/sbin/skladchik-reports-monitor-cookie-update-edge\nLIVE_WRAPPER_LINE_0006=SSH=(-o BatchMode=yes -o ConnectTimeout=15 -o StrictHostKeyChecking=yes -o UserKnownHostsFile=[SENSITIVE_PATH]\nLIVE_WRAPPER_LINE_0007=printf '\\033[93m%s\\033[0m\\n' 'SKLADCHIK CONTROLLED COOKIE UPDATE'\nLIVE_WRAPPER_LINE_0008=printf 'SAFE_OUTPUT=YES\\nSECRET_PRINTED=NO\\nSTEP=SKLADCHIK_REPORTS_MONITOR_COOKIE_UPDATE\\n'\nLIVE_WRAPPER_LINE_0009=if ssh -tt \"${SSH[@]}\" \"$EDGE\" sudo -n \"$EDGE_SCRIPT\"; then\nLIVE_WRAPPER_LINE_0010= rc=0\nLIVE_WRAPPER_LINE_0011=else\nLIVE_WRAPPER_LINE_0012= rc=$?\nLIVE_WRAPPER_LINE_0013=fi\nLIVE_WRAPPER_LINE_0014=printf 'SSH_COOKIE_UPDATE_RC=%s\\n' \"$rc\"\nLIVE_WRAPPER_LINE_0015=printf '\\033[93m%s\\033[0m\\n' 'END'\nLIVE_WRAPPER_LINE_0016=exit \"$rc\"\nLIVE_WRAPPER_END\nSOURCE_RELATION_BEGIN\nVERSIONED_EDGE_SHA_EXPECTED=10fe854274dca1a053cfd8c0155340bd689bf3f6555c70dbc14b890cbafb93fa\nVERSIONED_EDGE_SHA_MATCH=true\nVERSIONED_WRAPPER_SHA_EXPECTED=ea2d89ce67893a6d89b29610e4d46e207932ecc157173454585f67890f58810c\nVERSIONED_WRAPPER_SHA_MATCH=true\nLIVE_WRAPPER_EQUALS_VERSIONED=true\nSOURCE_RELATION_END\nCHANGES_MADE_BY_944=false\nROLLBACK_STARTED=false\nROLLBACK_RESTORED=null\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-260923-SKLADCHIK-CURRENT-EDGE-UPDATER-SOURCE-944R1\",\"status\":\"OK\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\nSKLADCHIK944_END=true\n" } diff --git a/runtime/latest.txt b/runtime/latest.txt index f57f49c5..41cfac1f 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,15 +1,15 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=SUPPORT-260923-SPB-TLS-BRIDGE-9189-LOCAL-CARRIER-RCA-9190R1 +COMMAND_ID=SUPPORT-260923-SKLADCHIK-CURRENT-EDGE-UPDATER-SOURCE-944R1 STATUS=OK RC=0 HOST=pve01 MODE=read-only -COMPONENT=spb-tls-bridge-9189-local-carrier-rca +COMPONENT=skladchik-current-edge-updater-source REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 -COMMAND_SHA256=67f2bec7a01f39fbfdf79b5496aec0aae6532cca8cfd5192bb6552cbcbe851b9 +COMMAND_SHA256=0171a3ced661558ed6f0ab909ba014aea79053b21400f6b2f2eceba92257d7b8 DUPLICATE_FAILED_COMMAND_BLOCKED=false EXECUTION_STARTED=true CHANGE_DECLARED=false @@ -24,70 +24,258 @@ MUTATION_OUTCOME=NO_MUTATION SANITIZED=yes SECRETS_INCLUDED=no PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=575faa031e1c1f1224a7c9cae59ecf22d97781ab22ca48ffdb8a6b50cc3e528c -SANITIZED_OUTPUT_SHA256=575faa031e1c1f1224a7c9cae59ecf22d97781ab22ca48ffdb8a6b50cc3e528c +RAW_EVIDENCE_SHA256=ba150554aca68c2348134a9f0017b998a31eba97431978781bb51e7cf1999c75 +SANITIZED_OUTPUT_SHA256=ba150554aca68c2348134a9f0017b998a31eba97431978781bb51e7cf1999c75 OUTPUT_BEGIN -RECOVERY9190_BEGIN=true -TARGET_CHANGE_CID=SUPPORT-260923-SPB-TLS-BRIDGE-SELF-PUBLISHING-FINAL-9189R1 -TARGET_LOCAL_CID=SUPPORT-260923-SPB-TLS-BRIDGE-SELF-PUBLISHING-FINAL-9189R1 -TARGET_CHANGE_EXACT_GITEA=404 -TARGET_LOCAL_EXACT_GITEA=404 -MUTATION_BOUNDARY=READ_ONLY_ONLY;NO_VM130_WRITE;NO_SPB_WRITE;NO_DNS_WRITE;NO_NGINX_RELOAD -LOCAL_ARTIFACT=dir.txt|PRESENT=true -LOCAL_ARTIFACT_META=dir.txt|SIZE=182|SHA16=09fb7d225bf69875 -LOCAL_SAFE=dir.txt|L1|endpoint.b64 -LOCAL_SAFE=dir.txt|L2|local-preflight-err.txt -LOCAL_SAFE=dir.txt|L3|local-preflight-out.txt -LOCAL_SAFE=dir.txt|L4|local-summary.env -LOCAL_SAFE=dir.txt|L5|outer.b64 -LOCAL_SAFE=dir.txt|L6|outer.sh -LOCAL_SAFE=dir.txt|L7|preflight.b64 -LOCAL_SAFE=dir.txt|L8|preflight.ps1 -LOCAL_SAFE=dir.txt|L9|spb-probe-err.txt -LOCAL_SAFE=dir.txt|L10|spb-probe-out.txt -LOCAL_SAFE=dir.txt|L11|sudo.b64 -LOCAL_ARTIFACT=local-preflight-err.txt|PRESENT=true -LOCAL_ARTIFACT_META=local-preflight-err.txt|SIZE=0|SHA16=e3b0c44298fc1c14 -LOCAL_ARTIFACT=local-preflight-out.txt|PRESENT=true -LOCAL_ARTIFACT_META=local-preflight-out.txt|SIZE=0|SHA16=e3b0c44298fc1c14 -LOCAL_ARTIFACT=local-summary.env|PRESENT=true -LOCAL_ARTIFACT_META=local-summary.env|SIZE=365|SHA16=8c6afc015d07d942 -LOCAL_SAFE=local-summary.env|L1|LOCAL_PREFLIGHT_BEGIN=true -LOCAL_SAFE=local-summary.env|L2|CID=SUPPORT-260923-SPB-TLS-BRIDGE-SELF-PUBLISHING-FINAL-9189R1 -LOCAL_SAFE=local-summary.env|L3|PLINK_PRESENT=true -LOCAL_SAFE=local-summary.env|L4|WINDOWS_ENDPOINT_SHA16=6d6149f42864ce03 -LOCAL_SAFE=local-summary.env|L5|WINDOWS_DNS_IPV4_COUNT=1 -LOCAL_SAFE=local-summary.env|L6|WINDOWS_ENDPOINT_HASH_MATCH=true -LOCAL_SAFE=local-summary.env|L7|WINDOWS_PINNED_SPB_PROBE_RC=0 -LOCAL_SAFE=local-summary.env|L8|WINDOWS_EDGEADMIN_MATCH=false -LOCAL_SAFE=local-summary.env|L9|WINDOWS_DPAPI_DECRYPTABLE_COUNT=1 -LOCAL_SAFE=local-summary.env|L10|LOCAL_PREFLIGHT_STATUS=FAIL -LOCAL_SAFE=local-summary.env|L11|LOCAL_PREFLIGHT_END=true -LOCAL_ARTIFACT=status.txt|PRESENT=false -LOCAL_ARTIFACT=stdout.txt|PRESENT=false -LOCAL_ARTIFACT=stderr.txt|PRESENT=false -LOCAL_ARTIFACT=preflight.ps1|PRESENT=true -LOCAL_ARTIFACT_META=preflight.ps1|SIZE=5509|SHA16=ccc6689ad5229a5f -LOCAL_ARTIFACT=outer.sh|PRESENT=true -LOCAL_ARTIFACT_META=outer.sh|SIZE=24740|SHA16=1444bb7fae636e67 -TARGET_LEDGER_MATCH_COUNT=0 -TARGET_LOCAL_FILE_COUNT=0 -TARGET_PROCESS_COUNT=0 -TARGET_RUN_FILE_COUNT=1 -TARGET_JOURNAL_MATCH_COUNT=0 -VM130_QGA_TRANSPORT_RC=0 -VM130_QGA_STDERR_SHA16=e3b0c44298fc1c14 -VM130_QGA_EXITCODE=0 -VM130_GUEST_STDERR_SHA16=e3b0c44298fc1c14 -RECOVERY9188_VM130={"bridge_root_exists":false,"certs":{"git-read.gram1.ru":{"checkend48h":false,"checkhost":false,"dir_exists":false,"fullchain_exists":false,"privkey_exists":false,"spki_match":false},"www.hbarhub.ru":{"checkend48h":false,"checkhost":false,"dir_exists":false,"fullchain_exists":false,"privkey_exists":false,"spki_match":false},"www.newfilya.ru":{"checkend48h":false,"checkhost":false,"dir_exists":false,"fullchain_exists":false,"privkey_exists":false,"spki_match":false}},"classification":"CLEAN_BASELINE","configs":{"991201.conf":{"exists":false},"991202.conf":{"exists":false},"991203.conf":{"exists":false}},"https":{"git-read.gram1.ru":{"code":"000","rc":60,"stderr_sha16":"6039978cbf174c90"},"www.hbarhub.ru":{"code":"000","rc":60,"stderr_sha16":"6039978cbf174c90"},"www.newfilya.ru":{"code":"000","rc":60,"stderr_sha16":"6039978cbf174c90"}},"nginx_test":{"rc":0,"stderr_sha16":"9cb221b6993277a1"},"npm_root_exists":true,"npmplus":{"data_mount_exact":true,"health":"healthy","inspect_rc":0,"running":true},"proxy_root_exists":true,"uid":0} -ACTUAL_VM130_CLASSIFICATION=CLEAN_BASELINE -RECOVERY9190_COMPLETE=true -CHANGES_MADE=NO -TASK_COMPLETE=true -TASK_RESULT=PASS_SPB_TLS_BRIDGE_9189_LOCAL_CARRIER_RCA -DECISION=READ_EXACT_9190_AND_FIX_ONLY_PROVEN_9189_LOCAL_STAGE -NEXT_GATE=EXACT_9190_LOCAL_ERROR_AND_VM130_CLASSIFICATION -HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-260923-SPB-TLS-BRIDGE-9189-LOCAL-CARRIER-RCA-9190R1","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null} +SKLADCHIK944_BEGIN=true +COMMAND_ID=SUPPORT-260923-SKLADCHIK-CURRENT-EDGE-UPDATER-SOURCE-944R1 +MODE=read-only +COMPONENT=skladchik-current-edge-updater-source +PREDECESSOR_943=STALE_MIGRATION_PREFLIGHT_EXPECTS_ORIGINAL_SHA +MUTATION_BOUNDARY=NONE_READ_ONLY +VERSIONED_EDGE_BEGIN +VERSIONED_EDGE_PATH_BASENAME=skladchik-reports-monitor-cookie-update-edge +VERSIONED_EDGE_PRESENT=true +VERSIONED_EDGE_SHA256=10fe854274dca1a053cfd8c0155340bd689bf3f6555c70dbc14b890cbafb93fa +VERSIONED_EDGE_BYTES=5247 +VERSIONED_EDGE_LINES=178 +VERSIONED_EDGE_LINE_0001=#!/usr/bin/env bash +VERSIONED_EDGE_LINE_0002=set -Eeuo pipefail +VERSIONED_EDGE_LINE_0003=umask 077 +VERSIONED_EDGE_LINE_0004= +VERSIONED_EDGE_LINE_0005=SECRETS=/etc/skladchik-reports-monitor/secrets.env +VERSIONED_EDGE_LINE_0006=MONITOR=/opt/skladchik-reports-monitor/monitor.py +VERSIONED_EDGE_LINE_0007=COOKIE_JAR=/var/lib/skladchik-reports-monitor/cookies.jar +VERSIONED_EDGE_LINE_0008=HEALTH=/var/lib/skladchik-reports-monitor/health.txt +VERSIONED_EDGE_LINE_0009=OUTPUT=/tmp/skladchik-cookie-update-monitor.out +VERSIONED_EDGE_LINE_0010=TIMER=skladchik-reports-monitor.timer +VERSIONED_EDGE_LINE_0011=SERVICE=skladchik-reports-monitor.service +VERSIONED_EDGE_LINE_0012= +VERSIONED_EDGE_LINE_0013=TMP="$(mktemp)" +VERSIONED_EDGE_LINE_0014=NO_COOKIE_SECRET="$(mktemp)" +VERSIONED_EDGE_LINE_0015=SECRETS_BACKUP="" +VERSIONED_EDGE_LINE_0016=JAR_BACKUP="" +VERSIONED_EDGE_LINE_0017=JAR_EXISTED=0 +VERSIONED_EDGE_LINE_0018=AUTH_MUTATED=0 +VERSIONED_EDGE_LINE_0019=FINALIZED=0 +VERSIONED_EDGE_LINE_0020= +VERSIONED_EDGE_LINE_0021=TIMER_WAS_ENABLED="$(systemctl is-enabled "$TIMER" 2>/dev/null || true)" +VERSIONED_EDGE_LINE_0022=TIMER_WAS_ACTIVE="$(systemctl is-active "$TIMER" 2>/dev/null || true)" +VERSIONED_EDGE_LINE_0023= +VERSIONED_EDGE_LINE_0024=on_err(){ +VERSIONED_EDGE_LINE_0025= local rc=$? +VERSIONED_EDGE_LINE_0026= trap - ERR +VERSIONED_EDGE_LINE_0027= printf 'ROOT_CAUSE=UNEXPECTED_COOKIE_UPDATE_ERROR\nROOT_CAUSE_COUNT=1\nDETAIL=line=%s rc=%s\n' "${1:-0}" "$rc" +VERSIONED_EDGE_LINE_0028= exit "$rc" +VERSIONED_EDGE_LINE_0029=} +VERSIONED_EDGE_LINE_0030= +VERSIONED_EDGE_LINE_0031=restore_timer_state(){ +VERSIONED_EDGE_LINE_0032= systemctl stop "$TIMER" >/dev/null 2>&1 || true +VERSIONED_EDGE_LINE_0033= if [ "$TIMER_WAS_ENABLED" = enabled ]; then +VERSIONED_EDGE_LINE_0034= systemctl enable "$TIMER" >/dev/null 2>&1 || true +VERSIONED_EDGE_LINE_0035= else +VERSIONED_EDGE_LINE_0036= systemctl disable "$TIMER" >/dev/null 2>&1 || true +VERSIONED_EDGE_LINE_0037= fi +VERSIONED_EDGE_LINE_0038= if [ "$TIMER_WAS_ACTIVE" = active ]; then +VERSIONED_EDGE_LINE_0039= systemctl start "$TIMER" >/dev/null 2>&1 || true +VERSIONED_EDGE_LINE_0040= fi +VERSIONED_EDGE_LINE_0041=} +VERSIONED_EDGE_LINE_0042= +VERSIONED_EDGE_LINE_0043=restore_auth_state(){ +VERSIONED_EDGE_LINE_0044= if [ "$AUTH_MUTATED" -eq 1 ]; then +VERSIONED_EDGE_LINE_0045= if [ -n "$SECRETS_BACKUP" ] && [ -s "$SECRETS_BACKUP" ]; then +VERSIONED_EDGE_LINE_0046= install -m 0600 -o root -g root "$SECRETS_BACKUP" "$SECRETS" +VERSIONED_EDGE_LINE_0047= fi +VERSIONED_EDGE_LINE_0048= if [ "$JAR_EXISTED" -eq 1 ] && [ -n "$JAR_BACKUP" ] && [ -s "$JAR_BACKUP" ]; then +VERSIONED_EDGE_LINE_0049= install -m 0600 -o root -g root "$JAR_BACKUP" "$COOKIE_JAR" +VERSIONED_EDGE_LINE_0050= else +VERSIONED_EDGE_LINE_0051= rm -f "$COOKIE_JAR" +VERSIONED_EDGE_LINE_0052= fi +VERSIONED_EDGE_LINE_0053= AUTH_MUTATED=0 +VERSIONED_EDGE_LINE_0054= fi +VERSIONED_EDGE_LINE_0055=} +VERSIONED_EDGE_LINE_0056= +VERSIONED_EDGE_LINE_0057=cleanup(){ +VERSIONED_EDGE_LINE_0058= local rc=$? +VERSIONED_EDGE_LINE_0059= trap - ERR +VERSIONED_EDGE_LINE_0060= trap - EXIT INT TERM HUP +VERSIONED_EDGE_LINE_0061= set +e +VERSIONED_EDGE_LINE_0062= if [ "$FINALIZED" -ne 1 ]; then +VERSIONED_EDGE_LINE_0063= restore_auth_state +VERSIONED_EDGE_LINE_0064= restore_timer_state +VERSIONED_EDGE_LINE_0065= fi +VERSIONED_EDGE_LINE_0066= rm -f "$TMP" "$NO_COOKIE_SECRET" +VERSIONED_EDGE_LINE_0067= [ -z "$SECRETS_BACKUP" ] || rm -f "$SECRETS_BACKUP" +VERSIONED_EDGE_LINE_0068= [ -z "$JAR_BACKUP" ] || rm -f "$JAR_BACKUP" +VERSIONED_EDGE_LINE_0069= exit "$rc" +VERSIONED_EDGE_LINE_0070=} +VERSIONED_EDGE_LINE_0071= +VERSIONED_EDGE_LINE_0072=trap 'on_err "$LINENO"' ERR +VERSIONED_EDGE_LINE_0073=trap cleanup EXIT +VERSIONED_EDGE_LINE_0074=trap 'exit 130' INT +VERSIONED_EDGE_LINE_0075=trap 'exit 143' TERM +VERSIONED_EDGE_LINE_0076=trap 'exit 129' HUP +VERSIONED_EDGE_LINE_0077= +VERSIONED_EDGE_LINE_0078=systemctl stop "$TIMER" +VERSIONED_EDGE_LINE_0079= +VERSIONED_EDGE_LINE_0080=WAIT_SECONDS=90 +VERSIONED_EDGE_LINE_0081=DEADLINE=$((SECONDS + WAIT_SECONDS)) +VERSIONED_EDGE_LINE_0082=while systemctl is-active --quiet "$SERVICE" || pgrep -f '/opt/skladchik-reports-monitor/monitor.py' >/dev/null; do +VERSIONED_EDGE_LINE_0083= if (( SECONDS >= DEADLINE )); then +VERSIONED_EDGE_LINE_0084= restore_timer_state +VERSIONED_EDGE_LINE_0085= FINALIZED=1 +VERSIONED_EDGE_LINE_0086= printf 'MONITOR_QUIESCENCE_TIMEOUT\n' +VERSIONED_EDGE_LINE_0087= exit 75 +VERSIONED_EDGE_LINE_0088= fi +VERSIONED_EDGE_LINE_0089= sleep 2 +VERSIONED_EDGE_LINE_0090=done +VERSIONED_EDGE_LINE_0091= +VERSIONED_EDGE_LINE_0092=printf "Вставь полный новый Cookie header для skladchik.org без слова Cookie: и нажми Enter:\n" +VERSIONED_EDGE_LINE_0093=IFS= read -r -s NEW_COOKIE +VERSIONED_EDGE_LINE_0094=printf '\n' +VERSIONED_EDGE_LINE_0095=if [ -z "$NEW_COOKIE" ]; then +VERSIONED_EDGE_LINE_0096= printf 'COOKIE_EMPTY\n' +VERSIONED_EDGE_LINE_0097= exit 1 +VERSIONED_EDGE_LINE_0098=fi +VERSIONED_EDGE_LINE_0099=case "$NEW_COOKIE" in +VERSIONED_EDGE_LINE_0100= *$'\r'*|*$'\n'*) +VERSIONED_EDGE_LINE_0101= printf 'COOKIE_INVALID_LINE_BREAK\n' +VERSIONED_EDGE_LINE_0102= exit 64 +VERSIONED_EDGE_LINE_0103= ;; +VERSIONED_EDGE_LINE_0104=esac +VERSIONED_EDGE_LINE_0105= +VERSIONED_EDGE_LINE_0106=SECRETS_BACKUP="$(mktemp /etc/skladchik-reports-monitor/.secrets.env.rollback.XXXXXX)" +VERSIONED_EDGE_LINE_0107=cp -a "$SECRETS" "$SECRETS_BACKUP" +VERSIONED_EDGE_LINE_0108= +VERSIONED_EDGE_LINE_0109=if [ -s "$COOKIE_JAR" ]; then +VERSIONED_EDGE_LINE_0110= JAR_BACKUP="$(mktemp /var/lib/skladchik-reports-monitor/.cookies.jar.rollback.XXXXXX)" +VERSIONED_EDGE_LINE_0111= cp -a "$COOKIE_JAR" "$JAR_BACKUP" +VERSIONED_EDGE_LINE_0112= JAR_EXISTED=1 +VERSIONED_EDGE_LINE_0113=fi +VERSIONED_EDGE_LINE_0114=AUTH_MUTATED=1 +VERSIONED_EDGE_LINE_0115= +VERSIONED_EDGE_LINE_0116=awk '!/^SKLADCHIK_COOKIE=/' "$SECRETS" >"$TMP" +VERSIONED_EDGE_LINE_0117=printf 'SKLADCHIK_COOKIE=%s\n' "$NEW_COOKIE" >>"$TMP" +VERSIONED_EDGE_LINE_0118=install -m 0600 -o root -g root "$TMP" "$SECRETS" +VERSIONED_EDGE_LINE_0119= +VERSIONED_EDGE_LINE_0120=# The monitor prefers a non-empty cookie jar over SKLADCHIK_COOKIE. +VERSIONED_EDGE_LINE_0121=# Removing the stale jar forces the first probe to use the newly entered Cookie header. +VERSIONED_EDGE_LINE_0122=rm -f "$COOKIE_JAR" +VERSIONED_EDGE_LINE_0123=: >"$OUTPUT" +VERSIONED_EDGE_LINE_0124= +VERSIONED_EDGE_LINE_0125=set +e +VERSIONED_EDGE_LINE_0126=python3 "$MONITOR" run >>"$OUTPUT" 2>&1 +VERSIONED_EDGE_LINE_0127=FIRST_RUN_RC=$? +VERSIONED_EDGE_LINE_0128=set -e +VERSIONED_EDGE_LINE_0129=FIRST_RUN_STATUS="$(awk -F= '$1=="STATUS"{print $2;exit}' "$HEALTH" 2>/dev/null || true)" +VERSIONED_EDGE_LINE_0130= +VERSIONED_EDGE_LINE_0131=SECOND_RUN_RC=1 +VERSIONED_EDGE_LINE_0132=SECOND_RUN_STATUS=NOT_RUN +VERSIONED_EDGE_LINE_0133=if [ "$FIRST_RUN_RC" -eq 0 ] && [ "$FIRST_RUN_STATUS" = OK ] && [ -s "$COOKIE_JAR" ]; then +VERSIONED_EDGE_LINE_0134= # Prove unattended persistence: temporarily remove the header secret, then run only from the new jar. +VERSIONED_EDGE_LINE_0135= awk '!/^SKLADCHIK_COOKIE=/' "$TMP" >"$NO_COOKIE_SECRET" +VERSIONED_EDGE_LINE_0136= install -m 0600 -o root -g root "$NO_COOKIE_SECRET" "$SECRETS" +VERSIONED_EDGE_LINE_0137= set +e +VERSIONED_EDGE_LINE_0138= python3 "$MONITOR" run >>"$OUTPUT" 2>&1 +VERSIONED_EDGE_LINE_0139= SECOND_RUN_RC=$? +VERSIONED_EDGE_LINE_0140= set -e +VERSIONED_EDGE_LINE_0141= SECOND_RUN_STATUS="$(awk -F= '$1=="STATUS"{print $2;exit}' "$HEALTH" 2>/dev/null || true)" +VERSIONED_EDGE_LINE_0142= install -m 0600 -o root -g root "$TMP" "$SECRETS" +VERSIONED_EDGE_LINE_0143=fi +VERSIONED_EDGE_LINE_0144= +VERSIONED_EDGE_LINE_0145=if [ "$FIRST_RUN_RC" -ne 0 ] || [ "$FIRST_RUN_STATUS" != OK ] || [ ! -s "$COOKIE_JAR" ] || [ "$SECOND_RUN_RC" -ne 0 ] || [ "$SECOND_RUN_STATUS" != OK ]; then +VERSIONED_EDGE_LINE_0146= restore_auth_state +VERSIONED_EDGE_LINE_0147= restore_timer_state +VERSIONED_EDGE_LINE_0148= FINALIZED=1 +VERSIONED_EDGE_LINE_0149= printf 'COOKIE_UPDATE_FAILED_ROLLED_BACK\n' +VERSIONED_EDGE_LINE_0150= printf 'FIRST_RUN_RC=%s\nFIRST_RUN_STATUS=%s\n' "$FIRST_RUN_RC" "$FIRST_RUN_STATUS" +VERSIONED_EDGE_LINE_0151= printf 'SECOND_JAR_ONLY_RUN_RC=%s\nSECOND_JAR_ONLY_RUN_STATUS=%s\n' "$SECOND_RUN_RC" "$SECOND_RUN_STATUS" +VERSIONED_EDGE_LINE_0152= printf 'HEALTH_BEGIN\n' +VERSIONED_EDGE_LINE_0153= cat "$HEALTH" 2>/dev/null || true +VERSIONED_EDGE_LINE_0154= printf 'HEALTH_END\n' +VERSIONED_EDGE_LINE_0155= printf 'MONITOR_OUTPUT_TAIL\n' +VERSIONED_EDGE_LINE_0156= tail -n 40 "$OUTPUT" 2>/dev/null || true +VERSIONED_EDGE_LINE_0157= exit 1 +VERSIONED_EDGE_LINE_0158=fi +VERSIONED_EDGE_LINE_0159= +VERSIONED_EDGE_LINE_0160=AUTH_MUTATED=0 +VERSIONED_EDGE_LINE_0161=rm -f "$SECRETS_BACKUP" +VERSIONED_EDGE_LINE_0162=SECRETS_BACKUP="" +VERSIONED_EDGE_LINE_0163=if [ -n "$JAR_BACKUP" ]; then +VERSIONED_EDGE_LINE_0164= rm -f "$JAR_BACKUP" +VERSIONED_EDGE_LINE_0165= JAR_BACKUP="" +VERSIONED_EDGE_LINE_0166=fi +VERSIONED_EDGE_LINE_0167= +VERSIONED_EDGE_LINE_0168=systemctl reset-failed "$SERVICE" "$TIMER" >/dev/null 2>&1 || true +VERSIONED_EDGE_LINE_0169=systemctl enable --now skladchik-reports-monitor.timer >/dev/null 2>&1 || true +VERSIONED_EDGE_LINE_0170=FINALIZED=1 +VERSIONED_EDGE_LINE_0171=echo "COOKIE_UPDATE_OK" +VERSIONED_EDGE_LINE_0172=echo "FRESH_COOKIE_FORCED=YES" +VERSIONED_EDGE_LINE_0173=echo "STALE_COOKIE_JAR_BYPASSED=YES" +VERSIONED_EDGE_LINE_0174=echo "SECOND_JAR_ONLY_PERSISTENCE_RUN=OK" +VERSIONED_EDGE_LINE_0175=echo "SECRET_PRINTED=NO" +VERSIONED_EDGE_LINE_0176=echo "HEALTH_BEGIN" +VERSIONED_EDGE_LINE_0177=cat "$HEALTH" 2>/dev/null || true +VERSIONED_EDGE_LINE_0178=echo "HEALTH_END" +VERSIONED_EDGE_END +VERSIONED_WRAPPER_BEGIN +VERSIONED_WRAPPER_PATH_BASENAME=skladchik-reports-monitor-cookie-update +VERSIONED_WRAPPER_PRESENT=true +VERSIONED_WRAPPER_SHA256=ea2d89ce67893a6d89b29610e4d46e207932ecc157173454585f67890f58810c +VERSIONED_WRAPPER_BYTES=638 +VERSIONED_WRAPPER_LINES=16 +VERSIONED_WRAPPER_LINE_0001=#!/usr/bin/env bash +VERSIONED_WRAPPER_LINE_0002=set -Eeuo pipefail +VERSIONED_WRAPPER_LINE_0003=export SYSTEMD_PAGER=cat PAGER=cat SYSTEMD_LESS=FRXMK +VERSIONED_WRAPPER_LINE_0004=EDGE=debian@[PRIVATE_IP] +VERSIONED_WRAPPER_LINE_0005=EDGE_SCRIPT=/usr/local/sbin/skladchik-reports-monitor-cookie-update-edge +VERSIONED_WRAPPER_LINE_0006=SSH=(-o BatchMode=yes -o ConnectTimeout=15 -o StrictHostKeyChecking=yes -o UserKnownHostsFile=[SENSITIVE_PATH] +VERSIONED_WRAPPER_LINE_0007=printf '\033[93m%s\033[0m\n' 'SKLADCHIK CONTROLLED COOKIE UPDATE' +VERSIONED_WRAPPER_LINE_0008=printf 'SAFE_OUTPUT=YES\nSECRET_PRINTED=NO\nSTEP=SKLADCHIK_REPORTS_MONITOR_COOKIE_UPDATE\n' +VERSIONED_WRAPPER_LINE_0009=if ssh -tt "${SSH[@]}" "$EDGE" sudo -n "$EDGE_SCRIPT"; then +VERSIONED_WRAPPER_LINE_0010= rc=0 +VERSIONED_WRAPPER_LINE_0011=else +VERSIONED_WRAPPER_LINE_0012= rc=$? +VERSIONED_WRAPPER_LINE_0013=fi +VERSIONED_WRAPPER_LINE_0014=printf 'SSH_COOKIE_UPDATE_RC=%s\n' "$rc" +VERSIONED_WRAPPER_LINE_0015=printf '\033[93m%s\033[0m\n' 'END' +VERSIONED_WRAPPER_LINE_0016=exit "$rc" +VERSIONED_WRAPPER_END +LIVE_WRAPPER_BEGIN +LIVE_WRAPPER_PATH_BASENAME=skladchik-reports-monitor-cookie-update +LIVE_WRAPPER_PRESENT=true +LIVE_WRAPPER_SHA256=ea2d89ce67893a6d89b29610e4d46e207932ecc157173454585f67890f58810c +LIVE_WRAPPER_BYTES=638 +LIVE_WRAPPER_LINES=16 +LIVE_WRAPPER_LINE_0001=#!/usr/bin/env bash +LIVE_WRAPPER_LINE_0002=set -Eeuo pipefail +LIVE_WRAPPER_LINE_0003=export SYSTEMD_PAGER=cat PAGER=cat SYSTEMD_LESS=FRXMK +LIVE_WRAPPER_LINE_0004=EDGE=debian@[PRIVATE_IP] +LIVE_WRAPPER_LINE_0005=EDGE_SCRIPT=/usr/local/sbin/skladchik-reports-monitor-cookie-update-edge +LIVE_WRAPPER_LINE_0006=SSH=(-o BatchMode=yes -o ConnectTimeout=15 -o StrictHostKeyChecking=yes -o UserKnownHostsFile=[SENSITIVE_PATH] +LIVE_WRAPPER_LINE_0007=printf '\033[93m%s\033[0m\n' 'SKLADCHIK CONTROLLED COOKIE UPDATE' +LIVE_WRAPPER_LINE_0008=printf 'SAFE_OUTPUT=YES\nSECRET_PRINTED=NO\nSTEP=SKLADCHIK_REPORTS_MONITOR_COOKIE_UPDATE\n' +LIVE_WRAPPER_LINE_0009=if ssh -tt "${SSH[@]}" "$EDGE" sudo -n "$EDGE_SCRIPT"; then +LIVE_WRAPPER_LINE_0010= rc=0 +LIVE_WRAPPER_LINE_0011=else +LIVE_WRAPPER_LINE_0012= rc=$? +LIVE_WRAPPER_LINE_0013=fi +LIVE_WRAPPER_LINE_0014=printf 'SSH_COOKIE_UPDATE_RC=%s\n' "$rc" +LIVE_WRAPPER_LINE_0015=printf '\033[93m%s\033[0m\n' 'END' +LIVE_WRAPPER_LINE_0016=exit "$rc" +LIVE_WRAPPER_END +SOURCE_RELATION_BEGIN +VERSIONED_EDGE_SHA_EXPECTED=10fe854274dca1a053cfd8c0155340bd689bf3f6555c70dbc14b890cbafb93fa +VERSIONED_EDGE_SHA_MATCH=true +VERSIONED_WRAPPER_SHA_EXPECTED=ea2d89ce67893a6d89b29610e4d46e207932ecc157173454585f67890f58810c +VERSIONED_WRAPPER_SHA_MATCH=true +LIVE_WRAPPER_EQUALS_VERSIONED=true +SOURCE_RELATION_END +CHANGES_MADE_BY_944=false +ROLLBACK_STARTED=false +ROLLBACK_RESTORED=null +HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-260923-SKLADCHIK-CURRENT-EDGE-UPDATER-SOURCE-944R1","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null} +SKLADCHIK944_END=true OUTPUT_END CHAT_OUTPUT_END