package main import ( "fmt" "os" "os/exec" "strings" "syscall" ) // Run the given command, showing output. func run_command(command []string) error { fmt.Println(strings.Repeat("=", 64)) fmt.Println(command) cmd := exec.Command(command[0], command[1:]...) // Connections cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr cmd.Stdin = os.Stdin cmd.SysProcAttr = &syscall.SysProcAttr{} cmd.SysProcAttr.Credential = &syscall.Credential{Uid: 0, Gid: 0} err := cmd.Run() fmt.Println(strings.Repeat("=", 50)) if err != nil { fmt.Println("Did you forget to:") fmt.Println(" sudo chown root:root aptgrade") fmt.Println(" sudo chmod a+s aptgrade") fmt.Println("Command failed:", err) } return err } func main() { if os.Geteuid() != 0 { fmt.Println("Use `sudo install -g 0 -o 0 -m 4755 aptgrade ~/bin/aptgrade`") fmt.Println("This program requires SETUID.") os.Exit(2) } run_command([]string{"/usr/bin/apt", "update"}) run_command([]string{"/usr/bin/apt", "upgrade", "-y"}) fmt.Println("Done") }