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 <ludovic@probo.com>
This commit is contained in:
@@ -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 <link>probo-agent releases on GitHub</link> (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"
|
||||
|
||||
@@ -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 <link>versions probo-agent sur GitHub</link> (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": {
|
||||
|
||||
@@ -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"
|
||||
</summary>
|
||||
|
||||
<div className="mt-4 space-y-4">
|
||||
<div className="space-y-2">
|
||||
<p className="text-sm text-txt-secondary">
|
||||
<Trans
|
||||
i18nKey="deviceEnrollment.token.releaseListHint"
|
||||
components={{
|
||||
link: (
|
||||
<a
|
||||
href={AGENT_RELEASES_URL}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="text-txt-primary underline hover:no-underline"
|
||||
/>
|
||||
),
|
||||
}}
|
||||
/>
|
||||
</p>
|
||||
|
||||
<div className="space-y-3">
|
||||
<h3 className="text-sm font-medium">
|
||||
{t("deviceEnrollment.token.installUnix")}
|
||||
</h3>
|
||||
<CopyableCodeBlock code={unixCommand} />
|
||||
<CopyableCodeBlock code={unixDownloadCommand} />
|
||||
<CopyableCodeBlock code={unixInstallCommand} />
|
||||
</div>
|
||||
|
||||
<div className="space-y-2">
|
||||
<div className="space-y-3">
|
||||
<h3 className="text-sm font-medium">
|
||||
{t("deviceEnrollment.token.installWindows")}
|
||||
</h3>
|
||||
<CopyableCodeBlock code={windowsCommand} />
|
||||
<CopyableCodeBlock code={windowsDownloadCommand} />
|
||||
<CopyableCodeBlock code={windowsInstallCommand} />
|
||||
</div>
|
||||
|
||||
<p className="text-xs text-txt-secondary">
|
||||
|
||||
Reference in New Issue
Block a user