コード例 #1
0
ファイル: stage1hash.go プロジェクト: coderhaoxin/rkt
func getStage1HashFromPath(fn *image.Finder, imgLoc, imgFileName string) (*types.Hash, error) {
	var fetchErr error
	var fallbackErr error
	if imgLoc != "" {
		hash, err := fn.FindImage(imgLoc, "", apps.AppImagePath)
		if err == nil {
			return hash, nil
		}
		fetchErr = err
	}
	if imgFileName != "" {
		exePath, err := os.Readlink("/proc/self/exe")
		if err != nil {
			fallbackErr = err
		} else {
			// using stage1 image in rkt's path, don't check the signature
			fn.Ks = nil
			rktDir := filepath.Dir(exePath)
			imgPath := filepath.Join(rktDir, imgFileName)
			hash, err := fn.FindImage(imgPath, "", apps.AppImagePath)
			if err == nil {
				return hash, nil
			}
			fallbackErr = err
		}
	}
	return nil, mergeStage1Errors(fetchErr, fallbackErr)
}
コード例 #2
0
ファイル: stage1hash.go プロジェクト: hwinkel/rkt
func getCustomStage1Hash(fn *image.Finder, path string) (*types.Hash, error) {
	s1img, err := fn.FindImage(path, "", apps.AppImageGuess)
	if err != nil {
		return nil, errwrap.Wrap(fmt.Errorf("error finding stage1 image %q", path), err)
	}
	return s1img, nil
}
コード例 #3
0
ファイル: stage1hash.go プロジェクト: hwinkel/rkt
func getDefaultStage1HashFromStore(fn *image.Finder) *types.Hash {
	// we make sure we've built rkt with a clean git tree,
	// otherwise we don't know if something changed
	if !strings.HasSuffix(defaultStage1Version, "-dirty") {
		stage1AppName := fmt.Sprintf("%s:%s", defaultStage1Name, defaultStage1Version)
		fn.StoreOnly = true
		s1img, _ := fn.FindImage(stage1AppName, "", apps.AppImageName)
		fn.StoreOnly = false
		return s1img
	}
	return nil
}
コード例 #4
0
ファイル: stage1hash.go プロジェクト: hwinkel/rkt
func getLocalDefaultStage1Hash(fn *image.Finder) (*types.Hash, error) {
	var firstErr error = nil
	// Guard against relative path to default stage1 image. It
	// could be fine for some custom stage1 path passed via
	// --stage1-image parameter, but not for default, not
	// overridden ones. Usually, if the path is relative, then it
	// means we simply didn't pass --with-stage1-image-path
	// parameter to configure script, so it defaulted to desired
	// filename like "stuff/yadda/stage1-lkvm.aci" (or something).
	if filepath.IsAbs(defaultStage1Image) {
		s1img, err := fn.FindImage(defaultStage1Image, "", apps.AppImagePath)
		if s1img != nil {
			return s1img, nil
		}
		firstErr = err
	}
	// could not find default stage1 image in a given path
	// (or we ignored it), lets try to load one in the
	// same directory as rkt itself
	imgBase := filepath.Base(defaultStage1Image)
	exePath, err := os.Readlink("/proc/self/exe")
	if err != nil {
		if firstErr != nil {
			innerErr := errwrap.Wrap(firstErr, err)
			return nil, errwrap.Wrap(fmt.Errorf("error finding stage1 images %q and %q in rkt binary directory", defaultStage1Image, imgBase), innerErr)
		} else {
			return nil, errwrap.Wrap(fmt.Errorf("error finding stage1 image %q in rkt binary directory", imgBase), err)
		}
	}
	fallbackPath := filepath.Join(filepath.Dir(exePath), imgBase)
	s1img, err := fn.FindImage(fallbackPath, "", apps.AppImagePath)
	if err != nil {
		if firstErr != nil {
			innerErr := errwrap.Wrap(firstErr, err)
			return nil, errwrap.Wrap(fmt.Errorf("error finding stage1 images %q and %q", defaultStage1Image, fallbackPath), innerErr)
		} else {
			return nil, errwrap.Wrap(fmt.Errorf("error finding stage1 image %q", fallbackPath), err)
		}
	}
	return s1img, nil
}