// copies a user's config file from user's home directory to the equivalent // location in the chroot func copyUserConfigFile(source, chroot string) error { userInfo, err := user.Current() if err != nil { return err } sourcepath := filepath.Join(userInfo.HomeDir, source) if _, err := os.Stat(sourcepath); err != nil { return nil } chrootHome := filepath.Join(chroot, "home", userInfo.Username) sourceDir := filepath.Dir(source) if sourceDir != "." { if err := os.MkdirAll( filepath.Join(chrootHome, sourceDir), 0700); err != nil { return err } } tartgetpath := filepath.Join(chrootHome, source) if err := system.CopyRegularFile(sourcepath, tartgetpath); err != nil { return err } return nil }
func Setup(name string) error { chroot := filepath.Join(RepoRoot(), name) u, err := user.Current() if err != nil { return err } var sc bytes.Buffer if err := scriptTemplate.Execute(&sc, u); err != nil { return err } plog.Info("Configuring SDK chroot") sh := exec.Command( "sudo", sudoPrompt, "chroot", chroot, "/usr/bin/env", "-i", "/bin/bash", "--login") sh.Stdin = &sc sh.Stderr = os.Stderr if plog.LevelAt(capnslog.INFO) { out, err := sh.StdoutPipe() if err != nil { return err } go util.LogFrom(capnslog.INFO, out) } if plog.LevelAt(capnslog.DEBUG) { sh.Args = append(sh.Args, "-x") } return sh.Run() }
// Set a default email address so repo doesn't explode on 'u@h.(none)' func setDefaultEmail(environ []string) []string { username := "******" if u, err := user.Current(); err == nil { username = u.Username } domain := system.FullHostname() email := fmt.Sprintf("%s@%s", username, domain) return setDefault(environ, "EMAIL", email) }