Browse Source

use a symlink instead of a copy

Victor Vieux 11 years ago
parent
commit
f9901ead06
1 changed files with 9 additions and 13 deletions
  1. 9 13
      runtime.go

+ 9 - 13
runtime.go

@@ -582,7 +582,7 @@ func NewRuntimeFromDirectory(config *DaemonConfig) (*Runtime, error) {
 		return nil, err
 	}
 
-	if err := copyLxcStart(config.Root); err != nil {
+	if err := linkLxcStart(config.Root); err != nil {
 		return nil, err
 	}
 	g, err := NewGraph(path.Join(config.Root, "graph"))
@@ -647,25 +647,21 @@ func (runtime *Runtime) Close() error {
 	return runtime.containerGraph.Close()
 }
 
-func copyLxcStart(root string) error {
+func linkLxcStart(root string) error {
 	sourcePath, err := exec.LookPath("lxc-start")
 	if err != nil {
 		return err
 	}
 	targetPath := path.Join(root, "lxc-start-unconfined")
-	sourceFile, err := os.Open(sourcePath)
-	if err != nil {
-		return err
-	}
-	defer sourceFile.Close()
-	targetFile, err := os.Create(targetPath)
-	if err != nil {
+
+	if _, err := os.Stat(targetPath); err != nil && !os.IsNotExist(err) {
 		return err
+	} else if err == nil {
+		if err := os.Remove(targetPath); err != nil {
+			return err
+		}
 	}
-	defer targetFile.Close()
-	os.Chmod(targetPath, 0755)
-	_, err = io.Copy(targetFile, sourceFile)
-	return err
+	return os.Symlink(sourcePath, targetPath)
 }
 
 // History is a convenience type for storing a list of containers,