| ... | ... |
@@ -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 |
} |