Repository navigation
v0.1.15-alpha
Pre-releaseİmzalı sürüm (ed25519).
manifest.jsonvemanifest.json.sigrelease'e dahildir; açık anahtar depodakeys/pops_release_ed25519.pub.pem. Doğrulama için bkz.keys/README.md. Ajan içinPOps-Agent-*-win-x64.msiönerilir (sessiz kurulum ve özellikleri:Installer/README.md); zip eski elle kurulum yoludur. Ajan paketleri Windows'ta SmartScreen uyarısı verebilir (Authenticode imzası henüz yok). MSI kendi .NET 10 çalışma zamanını getirir; uç noktada önceden bir şey kurmak gerekmez.
The agent moves to .NET 10 and ships its own runtime: no .NET prerequisite on the PC. Features can be turned off for the whole organisation or per lab (modules, with "Okul laboratuvarı" and "Kurum" profiles); the server enforces it and agents follow it. A device key stays on the hardware it was issued to, and POpsAgent.exe --generalize prepares disk images. The panel has no browser pop-ups any more, shares one design and several buttons that did nothing work. The server keeps running while its disk stalls, and a deploy stops before pip when the venv belongs to another user.
Upgrading: update the server first (Sistem & Sürüm → Sunucuyu güncelle; migration 0018). Then fetch 0.1.15-alpha on Ajan güncelleme and send it to one PC first: the MSI is about 41 MB (it contains the .NET 10 runtime) and replaces the framework-dependent build; if the new version does not start, the agent rolls back by itself. The .NET 8 runtime stays on the PC. Nothing changes for modules until a superadmin turns one off.
Added
- Server: modules and install profiles (server side). Vision, remote commands, file deployment, scheduled tasks, Windows Update, software inventory, licences, helpdesk, DNS policy, quarantine, Wake-on-LAN and reports can be turned off for the whole organisation or per lab (
module_settings, migration0018); the most specific setting wins and without a setting everything stays on, so upgrading changes nothing. A superadmin sets them withPOST /api/modules/{id}or applies the "Okul laboratuvarı" / "Kurum" profile. A module that is off is enforced on the server: its endpoints answer409(X-POps-Module), the task queue and the scheduler skip its devices, turning Vision off closes open sessions and turning remote commands off denies waiting tasks. Agents that send their key with the policy request also get the module list of their lab. The panel page follows.
Fixed
- Panel: an older release is no longer offered as an update. While a new version was tagged but its GitHub release not yet published, the server ran the new version and Sistem & Sürüm offered the previous one as "Yeni sürüm"; versions are now compared, not just checked for a difference (server and agent package).
- Release: the agent package step runs. A PowerShell string (
"$drawing:") read as a scope prefix and stopped the first self-contained build. - Panel: the dashboard chart shows something. "Ağdaki PC Sayısı" plotted the number of registered PCs from the moment the page opened (one point at first, so the chart looked empty, and the number hardly ever changes). It now shows how many PCs are online over the last 10 minutes, out of the registered total, and keeps the history while you move between pages.
- Panel: buttons that did nothing work. Devices: the flat/by-lab view switch only redrew when the table's HTML length changed by more than 50 characters, so it, status changes and selections often did not show. Labs: every lab whose name contains a space was hidden. Task queue and Logs: the type filters compared a field the server no longer sends (
log_type; logs carrycategoryandrisk_level), so every filter except "all" was empty. Terminal: "Wake" did nothing for a single PC. Deployment: the live tracker stayed at "queued" forever; it now follows the tasks it created. - Panel: actions report what really happened. Bulk restart/shutdown, quick commands, quarantine, wake, package delete and other actions no longer say "sent" before the server answered; errors show the server's reason (validation errors included, they used to read "[object Object]"). A Vision session the server refuses no longer leaves the switch on without a picture. Retry is offered only for finished tasks.
- Panel: renaming a PC from the Terminal is validated (Windows rules: at most 15 letters, digits and hyphens); the name used to go into the PowerShell command unchecked.
- Server: a deploy whose virtual environment holds files of another user stops before
pip.pops-deploy-backendchecks that every file in the venv belongs toOWNERbefore installing changed requirements; otherwise it changes nothing and prints thechowncommand. On the development server, packages once installed as root madepipfail half-way through the 0.1.14 update. - Server: a task result is shown only for the device's own task. A result whose task ID belongs to another device or no longer exists is still acknowledged (the agent stops resending it) but is no longer broadcast to the panels.
- Server: a stalled log destination no longer freezes the server. Log lines were written to stderr on the event loop, so when the write waited (a stalled disk, journald or a Docker log pipe not reading) every connection waited with it: agent WebSocket handshakes timed out and HTTP requests hung. On the project server a stalled disk held appends to a log file for 5–30 seconds (PostgreSQL commits waited just as long). Lines are still formatted where they are logged (same
request_id), but one background thread writes them in order. If 10 000 lines are waiting, new ones are dropped, and when the writer catches up it logs onelog yazımı yetişemediwarning with thedroppedcount. - Panel: the server-update confirmation names what is installed (the latest published release, or
mainon the development channel); it always saidmain.
Changed
- Panel: no browser pop-ups. Every
confirm,alertandprompt(about 35, on 11 pages) is an in-page dialog with focus handling, Esc and Enter, and destructive actions in red; results appear as toasts. One request helper for all pages (session expiry goes to the login page, the server's error text is shown). Pages share one design: consistent buttons with hover, focus and loading states, tables with row hover, empty and loading states, and every page fits a phone screen. The Devices and Task queue pages are rebuilt; the scheduled-task form opens in a dialog.
Agent
-
Modules (agent side). The policy request carries the device key (
X-Agent-Id+X-Agent-Secret). Themodulesreturned for the PC's lab are kept in memory, never incapabilities.json. A feature works only when the module is on and the local capability allows it, and it comes back by itself within a minute when the server turns the module on again. Withoutmodules(older server, no key) everything is on. Per module, while it is off:terminal:executegets exit code -5 andcapability_deniedwithreason: module_disabled.vision: no tunnel, preview or remote input (capability_denied,module_disabled); an open session is ended.helpdesk: the tray hides "Sorun bildir" and "Taleplerim" (HELPDESK_MENUover the pipe).software: no inventory is sent; when the module opens, the list is resent.patches: no Windows Update scan or report;scan_updatesandinstall_updatesare refused.wol:wake_peeris refused.
Changes are logged once and written to the event log as 1080.
dns_policyandquarantineneed nothing on the agent: the server sends an empty list andauto_quarantine: false. -
.NET 10, self-contained: no prerequisite on the PC. .NET 8 support ends on 10 November 2026. The agent, tray, watchdog and updater now target .NET 10 (LTS) and are published self-contained into one folder that shares the runtime, so the MSI installs the runtime with them and no longer requires the .NET 8 Desktop Runtime (its check is gone). A framework-dependent .NET 10 package would have failed to install on PCs without that runtime, and the updater would have rolled every such PC back. The MSI grows from about 4 MB to about 41 MB (about 270 files, 117 MB installed); only Turkish satellite resources are included. No ReadyToRun: it added 9 MB without a measurable start-up gain. The tray is published last because it needs the WindowsDesktop builds of
System.Drawing.dllandMicrosoft.VisualBasic.dll; the release workflow checks this. Updating from 0.1.14 works as before; rolling back from 0.1.15 to an earlier version runs that version on the .NET 8 runtime still installed on the PC. Packages move to 10.0.x; Dependabot ignores major (11.x) updates. Decision D-19. -
A copied installation no longer uses the original's key. When the agent receives its key (
set_secret) it writesC:\POpsData\secure\hw.bind: the SHA-256 ofuuid|bios_sn(normalized as indna_payload), separate digests of the values that are real, and the ID the key belongs to; also inPersistDirwhen set. Installations that already have a key write today's hardware on their first start (trust on first use). Every start, before the ID and key are read, compares the values that were real both times. If all of them changed (a copied image on another PC changes both; a single comparable value decides alone),identity.key, the key (and itsPersistDircopy),bypass.device,hw.bindand unconfirmed task results (pending-results.json) are moved (not deleted) tosecure\clone-<UTC time>\, Windows event 1070 is written, the ID is derived from the hardware again and the agent enrolls withenroll.tokenif there is one; the original's task results are not sent under the new ID. If one changed and the other did not (motherboard service, a corrected BIOS serial, a VM setting), nothing is touched, it is logged and event 1072 is written once per start; the server's4409covers a real copy. Empty, all-zero, shared or placeholder values ("To be filled by O.E.M.", "Default string") are never compared; when nothing can be compared, it is logged once and nothing is touched. On frozen PCs withPersistDirthe newerhw.bindwins and the ID it holds is restored. An image captured with 0.1.14 or older has nohw.bind; each copy trusts its own hardware and only the server's4409stops it. -
POpsAgent.exe --generalize [--enroll-token <token>]prepares a disk image: needs an elevated prompt, stops the service and the watchdog, deletes the ID, key (andPersistDircopy),bypass.device,hw.bind, unconfirmed task and update results, the software-inventory record andsecure\clone-*, and writes the token tosecure\enroll.token, so every PC started from the image enrolls itself. Exit codes 0 done, 1 incomplete, 2 not administrator, 3 service or watchdog not stopped, 4 invalid arguments; with 2–4 nothing is changed.docs/agent.md(Disk images) recommends a multi-use token. -
Close code
4409(ID connected from another PC): the agent waits 10 minutes plus jitter before reconnecting instead of the normal back-off, logs every refusal and writes Windows event 1071 once per service start. -
Software inventory load is spread. The first report after start comes 1–31 minutes later (random per start) instead of after a fixed minute, so 2000 PCs switched on together send about 65 reports a minute instead of all in the same minute; 30 minutes stays inside a 40-minute lesson. A list identical to the last successful send (SHA-256 of the sorted list, same device ID) is not sent again for 7 days, and the record (
C:\POpsData\software-inventory.json) survives restarts, so a reboot no longer means a resend; a new key (set_secret) forgets it. When the list is not sent,agent_health.last_inventory_uploadis still refreshed: the server's copy is known to be current, so the panel does not show it as old.