sqlinsight-pro/docs/opdatering.md
Claude 3121b598f9
Some checks are pending
CI / Build og unit tests (push) Waiting to run
CI / Integration (mcr.microsoft.com/mssql/server:2017-latest) (push) Blocked by required conditions
CI / Integration (mcr.microsoft.com/mssql/server:2019-latest) (push) Blocked by required conditions
CI / Integration (mcr.microsoft.com/mssql/server:2022-latest) (push) Blocked by required conditions
CI / Integration (mcr.microsoft.com/mssql/server:2025-latest) (push) Blocked by required conditions
Fase 3: signed updates of rule packs and the application
Rule packs (support dates and newest CU per release) are published in a
signed feed and hot-loaded without a restart; the verified pack is
reloaded at startup. New versions are announced (Notify) or downloaded
and staged by the unprivileged agent (Automatic), and installed by a
privileged apply-update task that re-verifies signature and hash in an
admin-only folder, keeps appsettings/web.config, health-checks the
services and rolls back on failure. Stable and preview channels,
manifest expiry and rollback protection, https or folder/share feeds
for offline sites. Vendor tool gains rulepack and publish; the Hub can
serve the feed; the web UI gets a System page with update, rule pack,
license and exactly what is sent to the Hub.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E3EExwndy8Z22EK2Qpt6BK
2026-09-29 09:19:41 +00:00

6.2 KiB

Opdateringer

SQLInsight Pro holder sig selv opdateret på to måder:

Hvad Indhold Hvordan
Regelpakken Microsofts supportdatoer og seneste CU/sikkerhedsopdatering pr. SQL Server-version Hentes og tages i brug automatisk, uden genstart. Det er data, ikke kode.
Programmet Agent og webbrugerflade Tilstanden Off, Notify eller Automatic. Installeres af en privilegeret opdateringsopgave med backup og automatisk tilbagerulning.

Begge kommer fra et opdateringsfeed: en https-adresse eller en mappe/et fildrev. Feedet behøver ikke at være betroet. Alt i det er signeret af SEOSoft (ECDSA P-256), og hver fil er låst af sin SHA-256 i det signerede manifest.

Opsætning

I agentens appsettings.json:

"SQLInsight": {
  "Updates": {
    "Feed": "https://hub.example.com/updates/",
    "Channel": "stable",
    "RulePacks": true,
    "Application": "Notify",
    "CheckInterval": "06:00:00",
    "MaintenanceWindow": "02:00-05:00"
  }
}
Indstilling Betydning
Feed https-adresse, lokal mappe eller UNC-sti (\\filserver\sqlinsight-feed). Tom: ingen opdateringstjek.
Channel stable (anbefalet i produktion) eller preview (nye regler og funktioner før alle andre).
RulePacks Hent nyere regelpakker automatisk. Standard: til.
Application Off: aldrig. Notify: vis i webbrugerfladen, at en ny version findes; en administrator installerer. Automatic: agenten henter og verificerer; opdateringsopgaven installerer i vedligeholdelsesvinduet.
MaintenanceWindow Lokal tid for automatisk installation, fx 02:00-05:00. Tom: når som helst.
Components Hvad der opdateres. Standard: agenten selv. Se Web på samme server.
DataDirectory Agentens datamappe. Standard %ProgramData%\SQLInsight eller /var/lib/sqlinsight.

Status for opdateringer, regelpakke og licens ses under System i webbrugerfladen.

Installation af en ny version

Manuelt (Notify)

Som administrator på agentens server:

& "C:\Program Files\SQLInsight\Agent\SQLInsight.Agent.exe" update check
& "C:\Program Files\SQLInsight\Agent\SQLInsight.Agent.exe" update apply

update apply henter pakken, verificerer den, stopper tjenesten, tager backup, kopierer de nye filer ind (uden at røre appsettings*.json og web.config), starter tjenesten og holder øje med den i et minut. Stopper den, rulles der automatisk tilbage.

Automatisk (Automatic)

Agenten kører som en konto med få rettigheder og kan ikke selv udskifte programfiler. Det gør en planlagt opgave, der kører som SYSTEM/root, og som selv verificerer signatur og hash igen, før noget installeres.

Windows:

schtasks /Create /TN "SQLInsight Update" /SC HOURLY /RU SYSTEM /RL HIGHEST `
  /TR "\"C:\Program Files\SQLInsight\Agent\SQLInsight.Agent.exe\" apply-update"

Linux (/etc/systemd/system/sqlinsight-update.service og .timer):

[Unit]
Description=SQLInsight Pro: installér hentede opdateringer

[Service]
Type=oneshot
ExecStart=/opt/sqlinsight/agent/SQLInsight.Agent apply-update
[Unit]
Description=SQLInsight Pro: kig efter hentede opdateringer hver time

[Timer]
OnCalendar=hourly
RandomizedDelaySec=10m

[Install]
WantedBy=timers.target
sudo systemctl enable --now sqlinsight-update.timer

Agentens systemd-enhed skal have StateDirectory=sqlinsight, så den kan skrive i /var/lib/sqlinsight.

Web på samme server

Skal webbrugerfladen opdateres sammen med agenten, angives begge komponenter:

"Components": [
  { "Name": "Agent", "Path": "C:\\Program Files\\SQLInsight\\Agent", "Service": "SQLInsight Agent" },
  { "Name": "Web",   "Path": "C:\\Program Files\\SQLInsight\\Web",   "Service": "SQLInsight Web" }
]

Kører web i IIS, angives "AppOffline": true i stedet for Service. Så lægges app_offline.htm i mappen, mens filerne udskiftes.

Uden internetadgang

Feed kan pege på en mappe eller et fildrev. Kopiér feed-mappen fra SEOSoft (eller fra en server med internetadgang) derhen. Signaturen kontrolleres på samme måde. Et manifest udløber efter 90 dage, så et gammelt feed ikke kan genbruges i det uendelige. Hent et nyt, inden det udløber.

Sikkerhed

  • Kun manifester signeret med en nøgle i trusted-keys.json (indbygget) eller SQLInsight:Updates:TrustedKeys accepteres.
  • Hver fil (regelpakke og programpakke) er låst af størrelse og SHA-256 i manifestet. En ændret fil bliver aldrig brugt.
  • Ingen nedgradering. Et manifest, der er ældre end et allerede set, afvises, og en version, der ikke er nyere end den installerede, installeres ikke.
  • Opdateringsopgaven stoler ikke på agentens datamappe. Den kopierer pakken til sin egen mappe (.sqlinsight-update ved siden af installationen, kun skrivbar for administratorer), verificerer den der og installerer derfra.
  • Den gemte regelpakke verificeres igen ved hver start. Fejler den, bruges den indbyggede.
  • Den seneste backup ligger i .sqlinsight-update\work\backup indtil næste opdatering. Log: .sqlinsight-update\update.log.

For SEOSoft: udgiv en opdatering

# Regelpakke ud fra katalogfilerne i src/SQLInsight.Rules/Lifecycle
dotnet run --project tools/SQLInsight.LicenseTool -- rulepack --version 2026.10.14 --out rulepack-2026.10.14.json

# Programpakker: én zip pr. platform med mapperne Agent/ og Web/
dotnet publish src/SQLInsight.Agent -c Release -r win-x64 --self-contained false -p:Version=1.1.0 -o pkg/win-x64/Agent
dotnet publish src/SQLInsight.Web   -c Release -r win-x64 --self-contained false -p:Version=1.1.0 -o pkg/win-x64/Web

# Signér kanalens manifest (det, der ikke angives, overtages fra det eksisterende manifest)
dotnet run --project tools/SQLInsight.LicenseTool -- publish --key sqlinsight-k20260929.private.pem --kid k20260929 \
  --feed feed --channel stable --rulepack rulepack-2026.10.14.json \
  --release 1.1.0 --asset win-x64=sqlinsight-1.1.0-win-x64.zip --asset linux-x64=sqlinsight-1.1.0-linux-x64.zip \
  --notes https://git.seosoft.dk/seo/sqlinsight-pro/releases

Udgiv først på preview, og flyt til stable, når versionen har kørt et stykke tid. Feed-mappen kan serveres af SQLInsight Hub (SQLInsight:Hub:UpdateFeedPath, adressen bliver https://hub…/updates/) eller af enhver webserver.