Skip to content

Commit

Permalink
Add "-r target-root" command line option for "run", "manifest" and "b…
Browse files Browse the repository at this point in the history
…uild" commands
  • Loading branch information
mkhon committed Feb 14, 2019
1 parent da6d095 commit 266a228
Show file tree
Hide file tree
Showing 8 changed files with 51 additions and 24 deletions.
4 changes: 4 additions & 0 deletions .gitignore
@@ -0,0 +1,4 @@
/.staging
/image
/ops
/tags
1 change: 1 addition & 0 deletions lepton/config.go
Expand Up @@ -18,6 +18,7 @@ type Config struct {
NightlyBuild bool
RunConfig RunConfig
Force bool
TargetRoot string
}

// Runtime configs
Expand Down
23 changes: 10 additions & 13 deletions lepton/elf.go
Expand Up @@ -7,16 +7,13 @@ import (
"github.com/go-errors/errors"
)

func lookupFile(path string) (string, error) {
func lookupFile(targetRoot string, path string) (string, error) {
_, err := os.Lstat(path)
if err == nil || !os.IsNotExist(err) {
// file exists or other error
return path, err
}

// try to find in $NANOS_TARGET_ROOT
//targetRoot := os.Getenv("NANOS_TARGET_ROOT")
targetRoot := ""
if targetRoot == "" {
return path, err
}
Expand Down Expand Up @@ -47,17 +44,17 @@ func lookupFile(path string) (string, error) {
return targetPath, nil
}

func findLib(libDirs []string, path string) (string, error) {
func findLib(targetRoot string, libDirs []string, path string) (string, error) {
if path[0] == '/' {
if _, err := lookupFile(path); err != nil {
if _, err := lookupFile(targetRoot, path); err != nil {
return "", err
}
return path, nil
}

for _, libDir := range(libDirs) {
lib := filepath.Join(libDir, path)
_, err := lookupFile(lib)
_, err := lookupFile(targetRoot, lib)
if err == nil {
return lib, nil
} else if !os.IsNotExist(err) {
Expand All @@ -68,8 +65,8 @@ func findLib(libDirs []string, path string) (string, error) {
return "", os.ErrNotExist
}

func _getSharedLibs(path string) ([]string, error) {
path, err := lookupFile(path)
func _getSharedLibs(targetRoot string, path string) ([]string, error) {
path, err := lookupFile(targetRoot, path)
if err != nil {
return nil, errors.WrapPrefix(err, path, 0)
}
Expand Down Expand Up @@ -102,14 +99,14 @@ func _getSharedLibs(path string) ([]string, error) {
}

// append library
absLibpath, err := findLib(dt_runpath, libpath)
absLibpath, err := findLib(targetRoot, dt_runpath, libpath)
if err != nil {
return nil, errors.WrapPrefix(err, libpath, 0)
}
libs = append(libs, absLibpath)

// append library dependencies
deplibs, err := _getSharedLibs(absLibpath)
deplibs, err := _getSharedLibs(targetRoot, absLibpath)
if err != nil {
return nil, err
}
Expand All @@ -132,8 +129,8 @@ func unique(a []string) []string {
return result
}

func getSharedLibs(path string) ([]string, error) {
libs, err := _getSharedLibs(path)
func getSharedLibs(targetRoot string, path string) ([]string, error) {
libs, err := _getSharedLibs(targetRoot, path)
if err != nil {
return nil, err
}
Expand Down
4 changes: 3 additions & 1 deletion lepton/elf_test.go
@@ -1,11 +1,13 @@
package lepton

import (
"os"
"testing"
)

func TestGetSharedLibs(t *testing.T) {
deps, err := getSharedLibs("../data/webg")
targetRoot := os.Getenv("NANOS_TARGET_ROOT")
deps, err := getSharedLibs(targetRoot, "../data/webg")
if err != nil {
t.Fatal(err)
}
Expand Down
9 changes: 7 additions & 2 deletions lepton/image.go
Expand Up @@ -151,7 +151,7 @@ func BuildManifest(c *Config) (*Manifest, error) {

// run ldd and capture dependencies
fmt.Println("Finding dependent shared libs")
deps, err := getSharedLibs(c.Program)
deps, err := getSharedLibs(c.TargetRoot, c.Program)
if err != nil {
return nil, errors.Wrap(err, 1)
}
Expand Down Expand Up @@ -210,7 +210,12 @@ func buildImage(c *Config, m *Manifest) error {
elfmanifest = m.String()
// invoke mkfs to create the filesystem ie kernel + elf image
createFile(mergedImg)
mkfs := exec.Command(c.Mkfs, mergedImg)
args := []string{}
if c.TargetRoot != "" {
args = append(args, "-r", c.TargetRoot)
}
args = append(args, mergedImg)
mkfs := exec.Command(c.Mkfs, args...)
stdin, err := mkfs.StdinPipe()
if err != nil {
return errors.Wrap(err, 1)
Expand Down
2 changes: 2 additions & 0 deletions lepton/manifest_test.go
@@ -1,6 +1,7 @@
package lepton

import (
"os"
"fmt"
"sort"
"strings"
Expand Down Expand Up @@ -72,6 +73,7 @@ func TestManifestWithDeps(t *testing.T) {
var c Config
initDefaultImages(&c)
c.Program = "../data/main"
c.TargetRoot = os.Getenv("NANOS_TARGET_ROOT")
m, err := BuildManifest(&c)
if err != nil {
t.Fatal(err)
Expand Down
28 changes: 21 additions & 7 deletions ops.go
Expand Up @@ -93,6 +93,11 @@ func runCommandHandler(cmd *cobra.Command, args []string) {
panic(err)
}

targetRoot, err := cmd.Flags().GetString("target-root")
if err != nil {
panic(err)
}

tapDeviceName, _ := cmd.Flags().GetString("tapname")
config, _ := cmd.Flags().GetString("config")
config = strings.TrimSpace(config)
Expand All @@ -103,6 +108,7 @@ func runCommandHandler(cmd *cobra.Command, args []string) {
if debugflags {
c.Debugflags = []string{"trace", "debugsyscalls", "futex_trace", "fault"}
}
c.TargetRoot = targetRoot

c.RunConfig.TapName = tapDeviceName
c.RunConfig.Verbose = verbose
Expand Down Expand Up @@ -145,19 +151,23 @@ func buildImages(c *api.Config) {
}

func buildCommandHandler(cmd *cobra.Command, args []string) {
targetRoot, _ := cmd.Flags().GetString("target-root")
config, _ := cmd.Flags().GetString("config")
config = strings.TrimSpace(config)
c := unWarpConfig(config)
c.Program = args[0]
c.TargetRoot = targetRoot
buildImages(c)
fmt.Printf("Bootable image file:%s\n", api.FinalImg)
}

func printManifestHandler(cmd *cobra.Command, args []string) {
targetRoot, _ := cmd.Flags().GetString("target-root")
config, _ := cmd.Flags().GetString("config")
config = strings.TrimSpace(config)
c := unWarpConfig(config)
c.Program = args[0]
c.TargetRoot = targetRoot
m, err := api.BuildManifest(c)
if err != nil {
fmt.Println(err)
Expand Down Expand Up @@ -431,6 +441,7 @@ func main() {
var nightly bool
var search string
var tap string
var targetRoot string

cmdRun.PersistentFlags().StringArrayVarP(&ports, "port", "p", nil, "port to forward")
cmdRun.PersistentFlags().BoolVarP(&force, "force", "f", false, "update images")
Expand All @@ -441,6 +452,7 @@ func main() {
cmdRun.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "verbose")
cmdRun.PersistentFlags().BoolVarP(&bridged, "bridged", "b", false, "bridge networking")
cmdRun.PersistentFlags().StringVarP(&tap, "tapname", "t", "tap0", "tap device name")
cmdRun.PersistentFlags().StringVarP(&targetRoot, "target-root", "r", "", "target root")

var cmdNetSetup = &cobra.Command{
Use: "setup",
Expand Down Expand Up @@ -468,13 +480,16 @@ func main() {
Run: buildCommandHandler,
}
cmdBuild.PersistentFlags().StringVarP(&config, "config", "c", "", "ops config file")
cmdBuild.PersistentFlags().StringVarP(&targetRoot, "target-root", "r", "", "target root")

var cmdPrintConfig = &cobra.Command{
Use: "manifest [ELF file]",
Short: "Print the manifest to console",
Args: cobra.MinimumNArgs(1),
Run: printManifestHandler,
}
cmdPrintConfig.PersistentFlags().StringVarP(&config, "config", "c", "", "ops config file")
cmdPrintConfig.PersistentFlags().StringVarP(&targetRoot, "target-root", "r", "", "target root")

var cmdVersion = &cobra.Command{
Use: "version",
Expand All @@ -495,13 +510,6 @@ func main() {
Args: cobra.MinimumNArgs(1),
Run: loadCommandHandler,
}

var cmdUpdate = &cobra.Command{
Use: "update",
Short: "check for updates",
Run: updateCommandHandler,
}

cmdLoadPackage.PersistentFlags().StringArrayVarP(&ports, "port", "p", nil, "port to forward")
cmdLoadPackage.PersistentFlags().BoolVarP(&force, "force", "f", false, "update images")
cmdLoadPackage.PersistentFlags().BoolVarP(&nightly, "nightly", "n", false, "nightly build")
Expand All @@ -511,6 +519,12 @@ func main() {
cmdLoadPackage.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "verbose")
cmdLoadPackage.PersistentFlags().BoolVarP(&bridged, "bridged", "b", false, "bridge networking")

var cmdUpdate = &cobra.Command{
Use: "update",
Short: "check for updates",
Run: updateCommandHandler,
}

var rootCmd = &cobra.Command{Use: "ops"}
rootCmd.AddCommand(cmdRun)
cmdNet.AddCommand(cmdNetReset)
Expand Down
4 changes: 3 additions & 1 deletion ops_test.go
Expand Up @@ -16,7 +16,7 @@ import (
func TestDownloadImages(t *testing.T) {
// remove the files to force a download
// ignore any error from remove
os.Remove(api.Mkfs)
//os.Remove(api.Mkfs)
os.Remove(api.BootImg)
os.Remove(api.KernelImg)
api.DownloadBootImages()
Expand Down Expand Up @@ -56,6 +56,7 @@ func executeCommandC(root *cobra.Command, args ...string) (c *cobra.Command, out
func runHyperVisor(userImage string, expected string, t *testing.T) {
var c api.Config
c.Program = userImage
c.TargetRoot = os.Getenv("NANOS_TARGET_ROOT")
err := api.BuildImage(c)
if err != nil {
t.Fatal(err)
Expand Down Expand Up @@ -89,6 +90,7 @@ func TestImageWithStaticFiles(t *testing.T) {
var c api.Config
c.Dirs = []string{"data/static"}
c.Program = "data/main"
c.TargetRoot = os.Getenv("NANOS_TARGET_ROOT")
err := api.BuildImage(c)
if err != nil {
t.Fatal(err)
Expand Down

0 comments on commit 266a228

Please sign in to comment.