diff --git a/pkg/packagemanager/install.go b/pkg/packagemanager/install.go index 78e20b9..cea9d95 100644 --- a/pkg/packagemanager/install.go +++ b/pkg/packagemanager/install.go @@ -173,7 +173,8 @@ func CloneAndInstallFromAUR(repoURL string, skipConfirmation bool) (string, erro } // Build the package using makepkg as the non-root user - cmdMakePkg := exec.Command("sudo", "-u", sudoUser, "makepkg", "-si", "--noconfirm") + cmdMakePkg := exec.Command("makepkg", "-si", "--noconfirm") + cmdMakePkg.Env = []string{"HOME=" + usr.HomeDir, "USER=" + usr.Username, "LOGNAME=" + usr.Username} if output, err := cmdMakePkg.CombinedOutput(); err != nil { logger.Errorf("error building package with makepkg: %s, %v", output, err) return "", fmt.Errorf("error building package with makepkg: %s, %v", output, err) diff --git a/pkg/packagemanager/installer_utils.go b/pkg/packagemanager/installer_utils.go index 40cdc32..b4dbccb 100644 --- a/pkg/packagemanager/installer_utils.go +++ b/pkg/packagemanager/installer_utils.go @@ -7,6 +7,10 @@ import ( "strings" "fmt" "pixelridgesoftworks.com/AllPac/pkg/logger" + "os/exec" + "os/user" + "strconv" + "syscall" ) // reads the PKGBUILD file and extracts the package version @@ -56,3 +60,32 @@ func confirmAction(question string) bool { } } } + +// this is unused, just incase I need to do it this way since makepkg is being a pain in the neck +func RunMakepkgAsUser(username string) error { + // Lookup the non-root user + usr, err := user.Lookup(username) + if err != nil { + return err + } + + // Convert UID and GID to integers + uid, _ := strconv.Atoi(usr.Uid) + gid, _ := strconv.Atoi(usr.Gid) + + // Set UID and GID of the process + err = syscall.Setgid(gid) + if err != nil { + return err + } + err = syscall.Setuid(uid) + if err != nil { + return err + } + + // Now run makepkg as the non-root user + cmd := exec.Command("makepkg", "-si", "--noconfirm") + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + return cmd.Run() +}