39 lines
1.4 KiB
Go
39 lines
1.4 KiB
Go
package mkcw
|
|
|
|
import (
|
|
"fmt"
|
|
"os/exec"
|
|
"strings"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
// MakeFS formats the imageFile as a filesystem of the specified type,
|
|
// populating it with the contents of the directory at sourcePath.
|
|
// Recognized filesystem types are "ext2", "ext3", "ext4", and "btrfs".
|
|
// Note that krun's init is currently hard-wired to assume "ext4".
|
|
// Returns the stdout, stderr, and any error returned by the mkfs command.
|
|
func MakeFS(sourcePath, imageFile, filesystem string) (string, string, error) {
|
|
var stdout, stderr strings.Builder
|
|
// N.B. mkfs.xfs can accept a protofile via its -p option, but the
|
|
// protofile format doesn't allow us to supply timestamp information or
|
|
// specify that files are hard linked
|
|
switch filesystem {
|
|
case "ext2", "ext3", "ext4":
|
|
logrus.Debugf("mkfs -t %s --rootdir %q %q", filesystem, sourcePath, imageFile)
|
|
cmd := exec.Command("mkfs", "-t", filesystem, "-d", sourcePath, imageFile)
|
|
cmd.Stdout = &stdout
|
|
cmd.Stderr = &stderr
|
|
err := cmd.Run()
|
|
return stdout.String(), stderr.String(), err
|
|
case "btrfs":
|
|
logrus.Debugf("mkfs -t %s --rootdir %q %q", filesystem, sourcePath, imageFile)
|
|
cmd := exec.Command("mkfs", "-t", filesystem, "--rootdir", sourcePath, imageFile)
|
|
cmd.Stdout = &stdout
|
|
cmd.Stderr = &stderr
|
|
err := cmd.Run()
|
|
return stdout.String(), stderr.String(), err
|
|
}
|
|
return "", "", fmt.Errorf("don't know how to make a %q filesystem with contents", filesystem)
|
|
}
|