Browse code

Merge remote-tracking branch 'origin/416-lxc_0_9_compatibliity-fix'

Solomon Hykes authored on 2013/04/18 03:35:12
Showing 2 changed files
... ...
@@ -390,21 +390,26 @@ func (container *Container) Start() error {
390 390
 		params = append(params, "-u", container.Config.User)
391 391
 	}
392 392
 
393
+	if container.Config.Tty {
394
+		params = append(params, "-e", "TERM=xterm")
395
+	}
396
+
397
+	// Setup environment
398
+	params = append(params,
399
+		"-e", "HOME=/",
400
+		"-e", "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
401
+	)
402
+
403
+	for _, elem := range container.Config.Env {
404
+		params = append(params, "-e", elem)
405
+	}
406
+
393 407
 	// Program
394 408
 	params = append(params, "--", container.Path)
395 409
 	params = append(params, container.Args...)
396 410
 
397 411
 	container.cmd = exec.Command("lxc-start", params...)
398 412
 
399
-	// Setup environment
400
-	container.cmd.Env = append(
401
-		[]string{
402
-			"HOME=/",
403
-			"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
404
-		},
405
-		container.Config.Env...,
406
-	)
407
-
408 413
 	// Setup logging of stdout and stderr to disk
409 414
 	if err := container.runtime.LogToDisk(container.stdout, container.logPath("stdout")); err != nil {
410 415
 		return err
... ...
@@ -415,10 +420,6 @@ func (container *Container) Start() error {
415 415
 
416 416
 	var err error
417 417
 	if container.Config.Tty {
418
-		container.cmd.Env = append(
419
-			[]string{"TERM=xterm"},
420
-			container.cmd.Env...,
421
-		)
422 418
 		err = container.startPty()
423 419
 	} else {
424 420
 		err = container.start()
... ...
@@ -53,8 +53,7 @@ func changeUser(u string) {
53 53
 }
54 54
 
55 55
 // Clear environment pollution introduced by lxc-start
56
-func cleanupEnv() {
57
-	env := os.Environ()
56
+func cleanupEnv(env ListOpts) {
58 57
 	os.Clearenv()
59 58
 	for _, kv := range env {
60 59
 		parts := strings.SplitN(kv, "=", 2)
... ...
@@ -91,10 +90,13 @@ func SysInit() {
91 91
 	var u = flag.String("u", "", "username or uid")
92 92
 	var gw = flag.String("g", "", "gateway address")
93 93
 
94
+	var flEnv ListOpts
95
+	flag.Var(&flEnv, "e", "Set environment variables")
96
+
94 97
 	flag.Parse()
95 98
 
99
+	cleanupEnv(flEnv)
96 100
 	setupNetworking(*gw)
97
-	cleanupEnv()
98 101
 	changeUser(*u)
99 102
 	executeProgram(flag.Arg(0), flag.Args())
100 103
 }