2026-01-20 10:03:55 +02:00

59 lines
1.5 KiB
Go

package installers
import (
"fmt"
"io"
"os"
"os/exec"
)
// OlricInstaller handles Olric server installation
type OlricInstaller struct {
*BaseInstaller
version string
}
// NewOlricInstaller creates a new Olric installer
func NewOlricInstaller(arch string, logWriter io.Writer) *OlricInstaller {
return &OlricInstaller{
BaseInstaller: NewBaseInstaller(arch, logWriter),
version: "v0.7.0",
}
}
// IsInstalled checks if Olric is already installed
func (oi *OlricInstaller) IsInstalled() bool {
_, err := exec.LookPath("olric-server")
return err == nil
}
// Install downloads and installs Olric server
func (oi *OlricInstaller) Install() error {
if oi.IsInstalled() {
fmt.Fprintf(oi.logWriter, " ✓ Olric already installed\n")
return nil
}
fmt.Fprintf(oi.logWriter, " Installing Olric...\n")
// Check if Go is available
if _, err := exec.LookPath("go"); err != nil {
return fmt.Errorf("go not found - required to install Olric. Please install Go first")
}
cmd := exec.Command("go", "install", fmt.Sprintf("github.com/olric-data/olric/cmd/olric-server@%s", oi.version))
cmd.Env = append(os.Environ(), "GOBIN=/usr/local/bin")
if err := cmd.Run(); err != nil {
return fmt.Errorf("failed to install Olric: %w", err)
}
fmt.Fprintf(oi.logWriter, " ✓ Olric installed\n")
return nil
}
// Configure is a placeholder for Olric configuration
func (oi *OlricInstaller) Configure() error {
// Configuration is handled by the orchestrator
return nil
}