From 2f81b69ad1fb78bbf60ec626f8259b34848229e3 Mon Sep 17 00:00:00 2001 From: Ludovic Vielle Date: Fri, 31 Jul 2026 11:07:39 +0200 Subject: [PATCH] Fix manual agent install download instructions Repo-wide /releases/latest pointed at the wrong assets when other tracks published more recently. Point users at probo-agent/v* releases and split download vs enroll into separate copy blocks with placeholder URLs they fill in. Signed-off-by: Ludovic Vielle --- apps/console/src/_locales/en-US.json | 2 +- apps/console/src/_locales/fr-FR.json | 3 + .../_components/EnrollmentInstructions.tsx | 75 ++++++++++++------- 3 files changed, 52 insertions(+), 28 deletions(-) diff --git a/apps/console/src/_locales/en-US.json b/apps/console/src/_locales/en-US.json index 3083d31bb..04f3a81b7 100644 --- a/apps/console/src/_locales/en-US.json +++ b/apps/console/src/_locales/en-US.json @@ -2515,7 +2515,7 @@ "accessReviewSource": { "documentation": "Documentation", "regions": { "label": "Region", "placeholder": "Select a region", "unitedStates": "United States", "europe": "Europe" } }, "devices": { "title": "Devices", "description": "Manage computers enrolled with the Probo posture agent.", "empty": "No devices enrolled yet", "actions": { "add": "Add device", "new": "New device", "reassign": "Re-assign", "revoke": "Revoke", "delete": "Delete" }, "fields": { "organization": "Organization", "hostname": "Hostname", "owner": "Owner", "state": "State", "platform": "Platform", "osVersion": "OS version", "hardwareUuid": "Hardware UUID", "serialNumber": "Serial number", "agentVersion": "Agent version", "enrolledAt": "Enrolled at", "lastSeen": "Last seen" }, "values": { "pending": "(pending)", "never": "Never", "unassigned": "Unassigned" }, "messages": { "ownerUpdated": "Device owner updated", "revoked": "Device revoked", "deleted": "Device deleted" }, "errors": { "create": "Failed to create device", "reassign": "Failed to re-assign device", "revoke": "Failed to revoke device", "delete": "Failed to delete device" }, "confirmations": { "revoke": "Revoke device \"{{hostname}}\"? The agent on the device will stop reporting and must be re-enrolled.", "delete": "Delete device \"{{hostname}}\"? This removes it from the inventory." }, "postures": { "currentTitle": "Current postures", "empty": "No posture checks recorded", "values": { "on": "On", "off": "Off", "immediate": "Immediate", "seconds": "{{seconds}}s", "minPasswordLength": "Min length {{length}}", "configured": "Configured", "none": "None", "unknown": "Unknown" }, "checks": { "diskEncryption": "Disk encryption", "screenLock": "Screen lock", "firewallEnabled": "Firewall enabled", "timeSync": "Time sync", "osVersion": "OS version", "autoUpdate": "Auto update", "passwordPolicy": "Password policy", "remoteLogin": "Remote login", "malwareProtection": "Malware protection" } }, "history": { "title": "Report history", "empty": "No posture reports yet", "checkCount_one": "{{count}} check reported", "checkCount_other": "{{count}} checks reported", "columns": { "time": "Time", "checks": "Checks", "correlationId": "Correlation ID" }, "actions": { "copyCorrelationId": "Copy correlation ID", "correlationIdCopied": "Correlation ID copied" } } }, "employeeDevices": { "title": "Your devices" }, - "deviceEnrollment": { "pageTitle": "Enroll device", "title": "Device enrollment", "setup": "Setup", "stepProgress": "Step {{current}} of {{total}}", "steps": { "privacy": { "title": "Privacy", "description": "Review collected data" }, "organization": { "title": "Organization", "description": "Choose destination workspace" }, "enroll": { "title": "Open and wait", "description": "Finish setup in the desktop agent" } }, "unavailable": { "title": "Enrollment unavailable", "description": "You do not have permission to enroll devices in any organization." }, "intro": { "title": "Before you start", "description": "Probo collects the following device metadata for inventory and posture reporting:" }, "privacy": { "identity": "Device identity: hardware UUID, hostname, and serial number (when available).", "systemDetails": "System details: platform, OS version, and Probo agent version.", "activitySignals": "Activity signals: enrollment time, heartbeats, and posture check results." }, "organization": { "title": "Choose organization", "description": "Pick which organization will own and manage this device." }, "openAgent": { "title": "Open the Probo agent", "description": "Open the desktop agent to finish setup, then keep this page open until enrollment is confirmed." }, "actions": { "backToOrganizations": "Back to organizations", "enrollNew": "Enroll new device", "openAgent": "Open Probo agent", "preparing": "Preparing…" }, "status": { "enrolledWithHostname": "{{hostname}} is enrolled.", "enrolled": "This device is enrolled.", "closeWindow": "You can close this window.", "waitingForCheckIn": "Waiting for the agent's first check-in…", "timedOut": "We haven't heard from the agent yet. Make sure the desktop agent is installed and running, then try again." }, "manual": { "cannotEnroll": "Can't enroll new device?", "tryCreating": "Try creating it manually", "title": "Manual enrollment", "creating": "Creating device…" }, "token": { "title": "Enrollment token generated", "description": "Share this enrollment token only with the device owner through a secure channel. It can be used once and expires after seven days.", "manualInstall": "Manual install (CLI / MDM)", "installUnix": "Install on macOS or Linux (run from a shell with sudo access)", "installWindows": "Install on Windows (run from an elevated PowerShell session)", "securityNotice": "The token is passed as a CLI flag (not via curl-piped-to-shell or sudo env vars). Once installed, the agent self-updates from GitHub Releases with cosign signature verification." }, "messages": { "created": "Device created. Copy the enrollment token now — it will not be shown again." }, "errors": { "copyToClipboard": "Failed to copy to clipboard" } }, + "deviceEnrollment": { "pageTitle": "Enroll device", "title": "Device enrollment", "setup": "Setup", "stepProgress": "Step {{current}} of {{total}}", "steps": { "privacy": { "title": "Privacy", "description": "Review collected data" }, "organization": { "title": "Organization", "description": "Choose destination workspace" }, "enroll": { "title": "Open and wait", "description": "Finish setup in the desktop agent" } }, "unavailable": { "title": "Enrollment unavailable", "description": "You do not have permission to enroll devices in any organization." }, "intro": { "title": "Before you start", "description": "Probo collects the following device metadata for inventory and posture reporting:" }, "privacy": { "identity": "Device identity: hardware UUID, hostname, and serial number (when available).", "systemDetails": "System details: platform, OS version, and Probo agent version.", "activitySignals": "Activity signals: enrollment time, heartbeats, and posture check results." }, "organization": { "title": "Choose organization", "description": "Pick which organization will own and manage this device." }, "openAgent": { "title": "Open the Probo agent", "description": "Open the desktop agent to finish setup, then keep this page open until enrollment is confirmed." }, "actions": { "backToOrganizations": "Back to organizations", "enrollNew": "Enroll new device", "openAgent": "Open Probo agent", "preparing": "Preparing…" }, "status": { "enrolledWithHostname": "{{hostname}} is enrolled.", "enrolled": "This device is enrolled.", "closeWindow": "You can close this window.", "waitingForCheckIn": "Waiting for the agent's first check-in…", "timedOut": "We haven't heard from the agent yet. Make sure the desktop agent is installed and running, then try again." }, "manual": { "cannotEnroll": "Can't enroll new device?", "tryCreating": "Try creating it manually", "title": "Manual enrollment", "creating": "Creating device…" }, "token": { "title": "Enrollment token generated", "description": "Share this enrollment token only with the device owner through a secure channel. It can be used once and expires after seven days.", "manualInstall": "Manual install (CLI / MDM)", "releaseListHint": "Browse probo-agent releases on GitHub (tags probo-agent/v*), then pick the archive for your OS and architecture (for example probo-agent_Darwin_arm64.tar.gz, probo-agent_Linux_x86_64.tar.gz, or probo-agent_Windows_x86_64.zip). Replace vX.Y.Z, OS, and ARCH in the download command with the values from the asset you chose.", "installUnix": "Install on macOS or Linux (run from a shell with sudo access)", "installWindows": "Install on Windows (run from an elevated PowerShell session)", "downloadStep": "Download and place the binary", "enrollStep": "Configure the device and start the agent", "securityNotice": "The token is passed as a CLI flag (not via curl-piped-to-shell or sudo env vars). Once installed, the agent self-updates from GitHub Releases with cosign signature verification." }, "messages": { "created": "Device created. Copy the enrollment token now — it will not be shown again." }, "errors": { "copyToClipboard": "Failed to copy to clipboard" } }, "thirdPartyRiskAssessmentRow": { "expired": "Expired", "notes": "Notes" diff --git a/apps/console/src/_locales/fr-FR.json b/apps/console/src/_locales/fr-FR.json index b47fb640d..b438f96bd 100644 --- a/apps/console/src/_locales/fr-FR.json +++ b/apps/console/src/_locales/fr-FR.json @@ -6101,8 +6101,11 @@ "title": "Jeton d’enrôlement généré", "description": "Ne partagez ce jeton d’enrôlement qu’avec le propriétaire de l’appareil, via un canal sécurisé. Il ne peut être utilisé qu’une seule fois et expire après sept jours.", "manualInstall": "Installation manuelle (CLI / MDM)", + "releaseListHint": "Consultez les versions probo-agent sur GitHub (tags probo-agent/v*), puis choisissez l’archive correspondant à votre OS et architecture (par exemple probo-agent_Darwin_arm64.tar.gz, probo-agent_Linux_x86_64.tar.gz ou probo-agent_Windows_x86_64.zip). Remplacez vX.Y.Z, OS et ARCH dans la commande de téléchargement par les valeurs de l’asset choisi.", "installUnix": "Installer sur macOS ou Linux (exécuter depuis un shell avec accès sudo)", "installWindows": "Installer sur Windows (exécuter depuis une session PowerShell élevée)", + "downloadStep": "Télécharger et placer le binaire", + "enrollStep": "Configurer l’appareil et démarrer l’agent", "securityNotice": "Le jeton est transmis sous forme d’indicateur CLI (et non via un curl redirigé vers un shell ou des variables d’environnement sudo). Une fois installé, l’agent se met à jour automatiquement depuis les GitHub Releases avec vérification de signature cosign." }, "messages": { diff --git a/apps/console/src/pages/organizations/employee/_components/EnrollmentInstructions.tsx b/apps/console/src/pages/organizations/employee/_components/EnrollmentInstructions.tsx index f6ccc2ab9..f69037500 100644 --- a/apps/console/src/pages/organizations/employee/_components/EnrollmentInstructions.tsx +++ b/apps/console/src/pages/organizations/employee/_components/EnrollmentInstructions.tsx @@ -19,10 +19,23 @@ // SOFTWARE. import { Button, Card, useToast } from "@probo/ui"; -import { useTranslation } from "react-i18next"; +import { Trans, useTranslation } from "react-i18next"; -const RELEASE_BASE_URL - = "https://github.com/getprobo/probo/releases/latest/download"; +const AGENT_RELEASES_URL + = "https://github.com/getprobo/probo/releases?q=probo-agent"; + +const UNIX_DOWNLOAD_COMMAND = `curl -fsSL "https://github.com/getprobo/probo/releases/download/probo-agent/vX.Y.Z/probo-agent_OS_ARCH.tar.gz" -o /tmp/probo-agent.tar.gz +tar -xzf /tmp/probo-agent.tar.gz -C /tmp +sudo install -m 0755 /tmp/probo-agent_OS_ARCH/probo-agent /usr/local/bin/probo-agent +rm -rf /tmp/probo-agent.tar.gz /tmp/probo-agent_OS_ARCH`; + +const WINDOWS_DOWNLOAD_COMMAND = `$zip = "$env:TEMP\\probo-agent.zip" +$dst = "$env:ProgramFiles\\Probo" +Invoke-WebRequest -Uri "https://github.com/getprobo/probo/releases/download/probo-agent/vX.Y.Z/probo-agent_Windows_ARCH.zip" -OutFile $zip +Expand-Archive -Path $zip -DestinationPath $env:TEMP -Force +New-Item -ItemType Directory -Force -Path $dst | Out-Null +Move-Item -Force "$env:TEMP\\probo-agent_Windows_ARCH\\probo-agent.exe" "$dst\\probo-agent.exe" +Remove-Item -Recurse -Force $zip, "$env:TEMP\\probo-agent_Windows_ARCH"`; interface EnrollmentInstructionsProps { enrollmentToken: string; @@ -34,32 +47,22 @@ export function EnrollmentInstructions( ) { const { t } = useTranslation(); - const unixCommand = `# 1. Download and install the probo-agent binary -OS=$(uname -s); ARCH=$(uname -m | sed 's/aarch64/arm64/; s/amd64/x86_64/') -NAME="probo-agent_\${OS}_\${ARCH}" -curl -fsSL "${RELEASE_BASE_URL}/\${NAME}.tar.gz" -o /tmp/probo-agent.tar.gz -tar -xzf /tmp/probo-agent.tar.gz -C /tmp -sudo install -m 0755 "/tmp/\${NAME}/probo-agent" /usr/local/bin/probo-agent -rm -rf /tmp/probo-agent.tar.gz "/tmp/\${NAME}" + const downloadComment = `# ${t("deviceEnrollment.token.downloadStep")}`; + const enrollComment = `# ${t("deviceEnrollment.token.enrollStep")}`; -# 2. Configure the device and start the agent service + const unixDownloadCommand = `${downloadComment} +${UNIX_DOWNLOAD_COMMAND}`; + + const unixInstallCommand = `${enrollComment} sudo /usr/local/bin/probo-agent install \\ --server ${serverUrl} \\ --enrollment-token '${enrollmentToken}'`; - const windowsCommand = `# 1. Download and install the probo-agent binary -$arch = if ($env:PROCESSOR_ARCHITECTURE -eq 'ARM64') { 'arm64' } else { 'x86_64' } -$name = "probo-agent_Windows_$arch" -$zip = "$env:TEMP\\probo-agent.zip" -$dst = "$env:ProgramFiles\\Probo" -Invoke-WebRequest -Uri "${RELEASE_BASE_URL}/$name.zip" -OutFile $zip -Expand-Archive -Path $zip -DestinationPath $env:TEMP -Force -New-Item -ItemType Directory -Force -Path $dst | Out-Null -Move-Item -Force "$env:TEMP\\$name\\probo-agent.exe" "$dst\\probo-agent.exe" -Remove-Item -Recurse -Force $zip, "$env:TEMP\\$name" + const windowsDownloadCommand = `${downloadComment} +${WINDOWS_DOWNLOAD_COMMAND}`; -# 2. Configure the device and start the agent service -& "$dst\\probo-agent.exe" install \` + const windowsInstallCommand = `${enrollComment} +& "$env:ProgramFiles\\Probo\\probo-agent.exe" install \` --server ${serverUrl} \` --enrollment-token '${enrollmentToken}'`; @@ -77,18 +80,36 @@ Remove-Item -Recurse -Force $zip, "$env:TEMP\\$name"
-
+

+ + ), + }} + /> +

+ +

{t("deviceEnrollment.token.installUnix")}

- + +
-
+

{t("deviceEnrollment.token.installWindows")}

- + +