mirror of
https://github.com/safing/portmaster
synced 2025-09-01 18:19:12 +00:00
Remove upgrade mechanism from pmctl
This commit is contained in:
parent
f3b5cb89ce
commit
1cc90f1eee
2 changed files with 0 additions and 154 deletions
|
@ -89,35 +89,5 @@ func initPmCtl(cmd *cobra.Command, args []string) error {
|
|||
return errors.New("please supply the database directory using the --db flag")
|
||||
}
|
||||
|
||||
// check if we are root/admin for self upgrade
|
||||
userInfo, err := user.Current()
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
switch runtime.GOOS {
|
||||
case "linux":
|
||||
if userInfo.Username != "root" {
|
||||
return nil
|
||||
}
|
||||
case "windows":
|
||||
if !strings.HasSuffix(userInfo.Username, "SYSTEM") { // is this correct?
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
err = removeOldBin()
|
||||
if err != nil {
|
||||
fmt.Printf("%s warning: failed to remove old upgrade: %s\n", logPrefix, err)
|
||||
}
|
||||
|
||||
update := checkForUpgrade()
|
||||
if update != nil {
|
||||
err = doSelfUpgrade(update)
|
||||
if err != nil {
|
||||
return fmt.Errorf("%s failed to upgrade self: %s", logPrefix, err)
|
||||
}
|
||||
fmt.Println("upgraded portmaster-control")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
124
pmctl/upgrade.go
124
pmctl/upgrade.go
|
@ -1,124 +0,0 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
|
||||
"github.com/safing/portbase/info"
|
||||
"github.com/safing/portmaster/updates"
|
||||
)
|
||||
|
||||
var (
|
||||
oldBinSuffix = "-old"
|
||||
)
|
||||
|
||||
func checkForUpgrade() (update *updates.File) {
|
||||
info := info.GetInfo()
|
||||
file, err := updates.GetLocalPlatformFile("control/portmaster-control")
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
if info.Version != file.Version() {
|
||||
return file
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func doSelfUpgrade(file *updates.File) error {
|
||||
|
||||
// FIXME: fix permissions if needed
|
||||
|
||||
// get destination
|
||||
dst, err := os.Executable()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
dst, err = filepath.EvalSymlinks(dst)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// mv destination
|
||||
err = os.Rename(dst, dst+oldBinSuffix)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// hard link
|
||||
err = os.Link(file.Path(), dst)
|
||||
if err != nil {
|
||||
fmt.Printf("%s failed to hardlink self upgrade: %s, will copy...\n", logPrefix, err)
|
||||
err = copyFile(file.Path(), dst)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// check permission
|
||||
if runtime.GOOS != "windows" {
|
||||
info, err := os.Stat(dst)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to get file info on %s: %s", dst, err)
|
||||
}
|
||||
if info.Mode() != 0755 {
|
||||
err := os.Chmod(dst, 0755)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to set permissions on %s: %s", dst, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func copyFile(srcPath, dstPath string) (err error) {
|
||||
srcFile, err := os.Open(srcPath)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer srcFile.Close()
|
||||
|
||||
dstFile, err := os.Create(dstPath)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer func() {
|
||||
closeErr := dstFile.Close()
|
||||
if err == nil {
|
||||
err = closeErr
|
||||
}
|
||||
}()
|
||||
|
||||
_, err = io.Copy(dstFile, srcFile)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = dstFile.Sync()
|
||||
return
|
||||
}
|
||||
|
||||
func removeOldBin() error {
|
||||
// get location
|
||||
dst, err := os.Executable()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
dst, err = filepath.EvalSymlinks(dst)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// delete old
|
||||
err = os.Remove(dst + oldBinSuffix)
|
||||
if err != nil {
|
||||
if !os.IsNotExist(err) {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
fmt.Println("removed previous portmaster-control")
|
||||
return nil
|
||||
}
|
Loading…
Add table
Reference in a new issue