You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
2.8 KiB

package main
import (
"fmt"
"os"
"path/filepath"
)
func install() error {
kioskInfof("checking firefox installation")
var firefoxInstallErr error
firefoxInstalled := isFirefoxInstalled()
firefoxUsable := false
if firefoxInstalled {
firefoxUsable = isFirefoxUsable()
}
markerExists := hasFirefoxInstallMarker()
kioskInfof("firefox startup state installed=%v usable=%v markerExists=%v", firefoxInstalled, firefoxUsable, markerExists)
switch {
case firefoxInstalled && firefoxUsable:
kioskInfof("firefox installed and usable")
fmt.Println("Firefox is installed and usable")
if err := writeFirefoxInstallMarker("usable"); err != nil {
kioskWarnf("write firefox install marker failed err=%v", err)
}
case firefoxInstalled:
kioskWarnf("firefox is installed but version check failed; skip automatic reinstall")
fmt.Println("Firefox installed but unusable; skip automatic reinstall on startup")
case markerExists:
kioskWarnf("firefox executable missing but install marker exists; skip automatic reinstall")
fmt.Println("Firefox missing; skip automatic reinstall on startup")
case shouldAutoInstallFirefox(firefoxInstalled, markerExists):
kioskWarnf("firefox executable missing and no install marker; starting first-time install")
fmt.Println("Firefox missing, installing...")
if err := installFirefox(); err != nil {
kioskErrorf("firefox first-time install failed err=%v", err)
fmt.Printf("install Firefox failed: %v\n", err)
firefoxInstallErr = fmt.Errorf("install Firefox failed: %w", err)
} else {
if err := writeFirefoxInstallMarker("installed"); err != nil {
kioskWarnf("write firefox install marker after install failed err=%v", err)
}
kioskInfof("firefox first-time install success")
fmt.Println("Firefox install success")
}
}
appPath, err := os.Executable()
if err != nil {
kioskErrorf("read executable path failed err=%v", err)
fmt.Printf("read executable path failed: %v\n", err)
return fmt.Errorf("read executable path failed: %w", err)
}
kioskInfof("current executable path=%s workdir=%s", appPath, filepath.Dir(appPath))
if !isAutoStartEnabled(appPath) {
kioskWarnf("autostart service missing or mismatched; reinstalling service=%s", autoStartServiceFile(appPath))
fmt.Println("setting autostart...")
if err := enableAutoStart(appPath); err != nil {
kioskErrorf("autostart setup failed service=%s err=%v", autoStartServiceFile(appPath), err)
fmt.Printf("setup autostart failed: %v\n", err)
return fmt.Errorf("setup autostart failed: %w", err)
}
fmt.Println("autostart setup success")
} else {
fmt.Println("autostart already configured")
}
if firefoxInstallErr != nil {
return firefoxInstallErr
}
return nil
}
func shouldAutoInstallFirefox(installed bool, markerExists bool) bool {
return !installed && !markerExists
}