Thomas Hipp 6db895de08
*: Remove init() code
Resolves #12.

Signed-off-by: Thomas Hipp <thomas.hipp@canonical.com>
2018-02-21 19:28:28 +01:00

87 lines
1.8 KiB
Go

package shared
import (
"fmt"
"io"
"os"
"os/exec"
"path/filepath"
lxd "github.com/lxc/lxd/shared"
)
// Copy copies a file.
func Copy(src, dest string) error {
var err error
srcFile, err := os.Open(src)
if err != nil {
return err
}
defer srcFile.Close()
destFile, err := os.Create(dest)
if err != nil {
return err
}
defer destFile.Close()
_, err = io.Copy(destFile, srcFile)
if err != nil {
return err
}
return destFile.Sync()
}
// RunCommand runs a command hereby setting the SHELL and PATH env variables,
// and redirecting the process's stdout and stderr to the real stdout and stderr
// respectively.
func RunCommand(name string, arg ...string) error {
cmd := exec.Command(name, arg...)
cmd.Env = []string{
"PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin",
"SHELL=/bin/sh",
"TERM=xterm"}
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
return cmd.Run()
}
// VerifyFile verifies a file using gpg.
func VerifyFile(signedFile, signatureFile string, keys []string, keyserver string) (bool, error) {
var out string
gpgDir := filepath.Join(os.TempDir(), "distrobuilder.gpg")
err := os.MkdirAll(gpgDir, 0700)
if err != nil {
return false, err
}
defer os.RemoveAll(gpgDir)
out, err = lxd.RunCommand("gpg", append([]string{
"--homedir", gpgDir, "--keyserver", keyserver, "--recv-keys"}, keys...)...)
if err != nil {
return false, fmt.Errorf("Failed to receive keys: %s", out)
}
if signatureFile != "" {
out, err = lxd.RunCommand("gpg", "--homedir", gpgDir, "--verify", signatureFile, signedFile)
if err != nil {
return false, fmt.Errorf("Failed to verify: %s", out)
}
} else {
out, err = lxd.RunCommand("gpg", "--homedir", gpgDir, "--verify", signedFile)
if err != nil {
return false, fmt.Errorf("Failed to verify: %s", out)
}
}
return true, nil
}