예제 #1
0
// Install executes the apt-get command to install the named package. If the
// version is specified, the version is also passed to apt-get command.
func Install(name string, version string) error {
	args := []string{"install", "-y"}
	args = append(args, InstallOptions...)
	if version != "" {
		args = append(args, exec.ShellEscape(name+"="+version))
	} else {
		args = append(args, exec.ShellEscape(name))
	}
	cmd := exec.Command(APTGetPath, args...)
	cmd.Env = append(cmd.Env, os.Environ()...)
	cmd.Env = append(cmd.Env, "DEBIAN_FRONTEND=noninteractive")
	return cmd.Run()
}
예제 #2
0
// IsNotInstalled tests whether the named package is not installed on the system.
// If the package is installed or execution fails, it returns an error.
func IsNotInstalled(name string) error {
	cmd := exec.Command(DPKGQueryPath, "--show", exec.ShellEscape(name))
	cmd.Env = append(cmd.Env, os.Environ()...)
	out, err := cmd.CombinedOutput()
	if err != nil {
		// TODO:
		// I could not find the apt/dpkg command to retrieve status of uninstalled
		// package. just check output message.
		if bytes.Contains(out, []byte("no packages found")) {
			return nil
		}
		return err
	}
	return errors.New("the package is installed")
}
예제 #3
0
// IsInstalled tests whether the named package is installed on the system.
// If the named package is not installed, or the execution fails, it returns
// an error.
//
// If the version is specified, it checks whether the specified version is
// linked.
//
// To test whether the package is NOT installed, Use IsNotInstalled function
// instead of this.
func IsInstalled(name string, version string) error {
	cmd := exec.Command(DPKGQueryPath, "--showformat=${Status}\\n${Version}", "--show", exec.ShellEscape(name))
	cmd.Env = append(cmd.Env, os.Environ()...)
	out, err := cmd.Output()
	if err != nil {
		return err
	}
	if !bytes.HasPrefix(out, []byte("install ok installed\n")) {
		return errors.New("the package is not installed")
	}
	if version != "" {
		if i := bytes.IndexRune(out, '\n'); i > 0 {
			if !bytes.HasPrefix(out[i+1:], []byte(version)) {
				return errors.New("the different version is installed")
			}
		} else {
			return errors.New("failed to parse the result of dpkg-query")
		}
	}
	return nil
}
예제 #4
0
// Identify detects the platform and returns Info of the platform.
func Identify() (state.Facts, error) {
	out, err := exec.Command("/usr/bin/sw_vers").Output()
	if err != nil {
		return nil, err
	}

	parser := &LineParser{
		Delimiter:  ':',
		TrimSpaces: true,
	}
	attrs, err := parser.Parse(out)
	if err != nil {
		return nil, err
	}

	return &Info{
		Platform:     PlatformOSX,
		Family:       FamilyOSX,
		Version:      string(attrs["ProductVersion"]),
		BuildVersion: string(attrs["BuildVersion"]),
	}, err
}
예제 #5
0
// Remove executes the apt-get command to remove the named package.
func Remove(name string) error {
	cmd := exec.Command(APTGetPath, "remove", "-y", exec.ShellEscape(name))
	cmd.Env = append(cmd.Env, os.Environ()...)
	cmd.Env = append(cmd.Env, "DEBIAN_FRONTEND=noninteractive")
	return cmd.Run()
}
예제 #6
0
// Update executes updating lists of apt packages.
func Update() error {
	return exec.Command(APTGetPath, "update").Run()
}