Skip to content

Commit

Permalink
Podman: disable selinux labels when extracting the tarball to prevent…
Browse files Browse the repository at this point in the history
… permission errors
  • Loading branch information
elegos committed May 7, 2020
1 parent f3d5c57 commit 9c43c47
Showing 1 changed file with 11 additions and 1 deletion.
12 changes: 11 additions & 1 deletion pkg/drivers/kic/oci/volumes.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import (
"bytes"
"fmt"
"os/exec"
"runtime"
"strings"

"github.com/golang/glog"
Expand Down Expand Up @@ -80,7 +81,16 @@ func allVolumesByLabel(ociBin string, label string) ([]string, error) {
// ExtractTarballToVolume runs a docker image imageName which extracts the tarball at tarballPath
// to the volume named volumeName
func ExtractTarballToVolume(ociBin string, tarballPath, volumeName, imageName string) error {
cmd := exec.Command(ociBin, "run", "--rm", "--entrypoint", "/usr/bin/tar", "-v", fmt.Sprintf("%s:/preloaded.tar:ro", tarballPath), "-v", fmt.Sprintf("%s:/extractDir", volumeName), imageName, "-I", "lz4", "-xvf", "/preloaded.tar", "-C", "/extractDir")
cmdArgs := []string{"run", "--rm", "--entrypoint", "/usr/bin/tar"}
// Podman:
// when selinux setenforce is enforced, normal mount will lead to file permissions error (-?????????)
// - option 1: label the file as container private (mount option :Z), but will alter the file in the host machine
// - option 2*: keep the file untouched and set --security-opt label=disable (no changes to file)
if ociBin == Podman && runtime.GOOS == "linux" {
cmdArgs = append(cmdArgs, "--security-opt", "label=disable")
}
cmdArgs = append(cmdArgs, "-v", fmt.Sprintf("%s:/preloaded.tar:ro", tarballPath), "-v", fmt.Sprintf("%s:/extractDir", volumeName), imageName, "-I", "lz4", "-xvf", "/preloaded.tar", "-C", "/extractDir")
cmd := exec.Command(ociBin, cmdArgs...)
if _, err := runCmd(cmd); err != nil {
return err
}
Expand Down

0 comments on commit 9c43c47

Please sign in to comment.