# 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`: ```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](#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: ```powershell & "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: ```powershell 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`): ```ini [Unit] Description=SQLInsight Pro: installér hentede opdateringer [Service] Type=oneshot ExecStart=/opt/sqlinsight/agent/SQLInsight.Agent apply-update ``` ```ini [Unit] Description=SQLInsight Pro: kig efter hentede opdateringer hver time [Timer] OnCalendar=hourly RandomizedDelaySec=10m [Install] WantedBy=timers.target ``` ```bash 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: ```json "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 ```bash # 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.