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
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
137 lines
6.2 KiB
Markdown
137 lines
6.2 KiB
Markdown
# 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.
|