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.

62 lines
2.1 KiB

package main
import (
"fmt"
"os"
"path/filepath"
)
func install() error {
kioskInfof("checking firefox usability")
var firefoxInstallErr error
if isFirefoxUsable() {
kioskInfof("firefox is usable")
fmt.Println("Firefox is installed and usable")
if err := writeFirefoxInstallMarker("usable"); err != nil {
kioskWarnf("write firefox install marker failed err=%v", err)
}
} else if hasFirefoxInstallMarker() {
kioskWarnf("firefox unusable but install marker exists; skip automatic repair")
fmt.Println("Firefox unusable; skip automatic repair on startup")
} else {
kioskWarnf("firefox unusable and no install marker; starting first-time install")
fmt.Println("Firefox missing or unusable, 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
}