1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- package main
- import (
- "fmt"
- "os"
- "os/exec"
- "path/filepath"
- cp "github.com/otiai10/copy"
- )
- /*
- ArozOS Launcher
- For auto update and future extension purpose
- Author: tobychui
- */
- const (
- launcherVersion = "1.0"
- )
- func main() {
- //Print basic information
- fmt.Println("[LAUNCHER] ArozOS Launcher ver " + launcherVersion)
- binaryName := autoDetectExecutable()
- fmt.Println("[LAUNCHER] Choosing binary executable: " + binaryName)
- //Check if updates exists. If yes, overwrite it
- if fileExists("./updates") && fileExists("./updates/web/") && fileExists("./updates/system") {
- //All component exists. Update it
- newArozBinary, err := getUpdateBinaryFilename()
- if err != nil {
- fmt.Println("[LAUNCHER] Unable to access update files: ", err.Error())
- } else {
- //Binary file got. Update it
- //Backup the current executables and system files
- fmt.Println("[LAUNCHER] Starting system backup process (to ./arozos.old)")
- os.MkdirAll("./arozos.old", 0775)
- copy(binaryName, filepath.Join("./arozos.old", filepath.Base(binaryName)))
- cp.Copy("./system", "./arozos.old/system/")
- cp.Copy("./web", "./arozos.old/web/")
- //Success. Continue binary replacement
- fmt.Println("[LAUNCHER] Copying updates to runtime environment")
- copy(newArozBinary, binaryName)
- cp.Copy("./updates/system", "./system/")
- cp.Copy("./updates/web", "./web/")
- fmt.Println("[LAUNCHER] Update Completed. Removing the update files")
- os.RemoveAll("./updates/")
- }
- } else if fileExists("./updates") && (!fileExists("./updates/web/") || !fileExists("./updates/system")) {
- //Update folder exists but some components is broken
- fmt.Println("[LAUNCHER] Detected damaged / incomplete update package. Skipping update process")
- }
- cmd := exec.Command(binaryName, os.Args[1:]...)
- cmd.Stdout = os.Stdout
- cmd.Stderr = os.Stderr
- cmd.Run()
- }
|