fix arch detection

This commit is contained in:
2026-01-13 12:55:03 +00:00
parent 3c023582c2
commit e9c04ad1de
2 changed files with 43 additions and 12 deletions

View File

@@ -12,6 +12,14 @@ A simple, rsync-based PocketBase deployment tool.
## deploy ## deploy
Deploys pocketbase to a remote server. This will:
1. Setup up a firewall.
2. Install and setup Caddy.
3. Download pocketbase and setup a systemd service.
4. Copy pb_public, pb_migrations and pb_hooks.
5. Start the service.
## logs ## logs
## secrets ## secrets

View File

@@ -17,7 +17,7 @@ import (
const ( const (
defaultServiceDirTemplate = "/root/pb/{service}" defaultServiceDirTemplate = "/root/pb/{service}"
defaultEnvFileTemplate = "/root/pb/{service}/.env" defaultEnvFileTemplate = "/root/pb/{service}/.env"
totalDeploySteps = 7 totalDeploySteps = 6
) )
type pbToml struct { type pbToml struct {
@@ -81,9 +81,7 @@ func runDeploy() error {
step := 1 step := 1
printStep(step, totalDeploySteps, "validating configuration") printStep(step, totalDeploySteps, "validating configuration")
step++ remoteOS, err := runSSHOutput(serverIP, "uname -s")
printStep(step, totalDeploySteps, "probing remote host")
remoteOS, err := runSSHOutput(serverIP, "/bin/uname -s")
if err != nil { if err != nil {
return fmt.Errorf("failed to determine remote OS: %w", err) return fmt.Errorf("failed to determine remote OS: %w", err)
} }
@@ -91,15 +89,13 @@ func runDeploy() error {
return fmt.Errorf("unsupported remote OS %q", remoteOS) return fmt.Errorf("unsupported remote OS %q", remoteOS)
} }
machineArch, err := runSSHOutput(serverIP, "/bin/uname -m") arch, err := detectRemoteArch(serverIP)
if err != nil {
return fmt.Errorf("failed to determine remote architecture: %w", err)
}
arch, err := translateMachineArch(machineArch)
if err != nil { if err != nil {
return err return err
} }
fmt.Printf("arch; %s", arch)
assetName := pocketbaseAsset(version, "linux", arch) assetName := pocketbaseAsset(version, "linux", arch)
assetURL := fmt.Sprintf("https://github.com/pocketbase/pocketbase/releases/download/v%s/%s", version, assetName) assetURL := fmt.Sprintf("https://github.com/pocketbase/pocketbase/releases/download/v%s/%s", version, assetName)
@@ -151,7 +147,7 @@ func loadPBConfig(path string) (*pbToml, error) {
} }
func printStep(idx, total int, message string) { func printStep(idx, total int, message string) {
fmt.Printf("\nStep %d/%d: %s\n", idx, total, message) fmt.Printf("Step %d/%d: %s\n", idx, total, message)
} }
func renderServiceTemplate(tpl, serviceName string) string { func renderServiceTemplate(tpl, serviceName string) string {
@@ -160,6 +156,7 @@ func renderServiceTemplate(tpl, serviceName string) string {
func translateMachineArch(value string) (string, error) { func translateMachineArch(value string) (string, error) {
machine := strings.TrimSpace(strings.ToLower(value)) machine := strings.TrimSpace(strings.ToLower(value))
switch machine { switch machine {
case "x86_64", "amd64": case "x86_64", "amd64":
return "amd64", nil return "amd64", nil
@@ -175,6 +172,32 @@ func translateMachineArch(value string) (string, error) {
return "", fmt.Errorf("unsupported remote architecture %q", value) return "", fmt.Errorf("unsupported remote architecture %q", value)
} }
func detectRemoteArch(server string) (string, error) {
probes := []string{
"uname -m",
"arch",
}
var lastErr error
for _, probe := range probes {
output, err := runSSHOutput(server, probe)
if err != nil {
lastErr = fmt.Errorf("%s failed: %w", probe, err)
continue
}
arch, err := translateMachineArch(output)
if err != nil {
lastErr = fmt.Errorf("%s -> %w", probe, err)
continue
}
return arch, nil
}
if lastErr != nil {
return "", fmt.Errorf("failed to determine remote architecture: %w", lastErr)
}
return "", fmt.Errorf("failed to determine remote architecture")
}
func pocketbaseAsset(version, osName, arch string) string { func pocketbaseAsset(version, osName, arch string) string {
return fmt.Sprintf("pocketbase_%s_%s_%s.zip", version, osName, arch) return fmt.Sprintf("pocketbase_%s_%s_%s.zip", version, osName, arch)
} }
@@ -279,14 +302,14 @@ systemctl restart pb@%s
} }
func runSSHCommand(server, script string) error { func runSSHCommand(server, script string) error {
cmd := exec.Command("ssh", append(sshArgs(server), "bash", "-lc", script)...) cmd := exec.Command("ssh", append(sshArgs(server), "bash", "--noprofile", "--norc", "-c", script)...)
cmd.Stdout = os.Stdout cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr cmd.Stderr = os.Stderr
return cmd.Run() return cmd.Run()
} }
func runSSHOutput(server, script string) (string, error) { func runSSHOutput(server, script string) (string, error) {
cmd := exec.Command("ssh", append(sshArgs(server), "bash", "-lc", script)...) cmd := exec.Command("ssh", append(sshArgs(server), "bash", "--noprofile", "--norc", "-c", script)...)
var out bytes.Buffer var out bytes.Buffer
cmd.Stdout = &out cmd.Stdout = &out
cmd.Stderr = os.Stderr cmd.Stderr = os.Stderr