3cf304f3e1
Signed-off-by: Jess Frazelle <jess@mesosphere.com>
56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/base64"
|
|
"os"
|
|
|
|
"github.com/docker/docker/pkg/archive"
|
|
"github.com/docker/docker/pkg/idtools"
|
|
"github.com/opencontainers/runtime-spec/specs-go"
|
|
)
|
|
|
|
func unpackRootfs(spec *specs.Spec) error {
|
|
data, err := base64.StdEncoding.DecodeString(DATA)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if len(spec.Linux.UIDMappings) > 0 && len(spec.Linux.GIDMappings) > 0 {
|
|
if err := idtools.MkdirAs(defaultRootfsDir, 0755, int(spec.Linux.UIDMappings[0].HostID), int(spec.Linux.GIDMappings[0].HostID)); err != nil {
|
|
return err
|
|
}
|
|
} else {
|
|
if err := os.MkdirAll(defaultRootfsDir, 0755); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
uidMaps := []idtools.IDMap{}
|
|
gidMaps := []idtools.IDMap{}
|
|
for _, u := range spec.Linux.UIDMappings {
|
|
uidMaps = append(uidMaps, idtools.IDMap{
|
|
ContainerID: int(u.ContainerID),
|
|
HostID: int(u.HostID),
|
|
Size: int(u.Size),
|
|
})
|
|
}
|
|
|
|
for _, g := range spec.Linux.GIDMappings {
|
|
gidMaps = append(gidMaps, idtools.IDMap{
|
|
ContainerID: int(g.ContainerID),
|
|
HostID: int(g.HostID),
|
|
Size: int(g.Size),
|
|
})
|
|
}
|
|
|
|
r := bytes.NewReader(data)
|
|
if err := archive.Untar(r, defaultRootfsDir, &archive.TarOptions{
|
|
UIDMaps: uidMaps,
|
|
GIDMaps: gidMaps,
|
|
}); err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|