def apply_profile (self): argv = APPLY_TOOL_ARGV + [ "-s", self.profile_file, ("--admin-log-config=%s" % util.get_admin_log_config_filename ()), ("--readable-log-config=%s" % util.get_readable_log_config_filename ()) ] mprint ("Running sabayon-apply: %s" % argv) try: pipe = subprocess.Popen (argv, stderr = subprocess.PIPE, env = os.environ) except Exception, e: raise errors.FatalApplyErrorException (("Could not create the 'sabayon-apply' process: %s\n" + "The command used is '%s'\n" + "Child traceback:\n%s") % (e.message, " ".join (argv), e.child_traceback))
def start(self): self.user_profile_path = self.__copy_to_user(self.profile_path) protosession.clobber_user_processes(self.username) self.temp_homedir = protosession.setup_shell_and_homedir(self.username) display_number = protosession.find_free_display() self.temp_xauth_path = self.__copy_xauthority() def child_setup_fn(self): os.setgid(self.pw.pw_gid) os.setuid(self.pw.pw_uid) os.setsid() os.umask(022) # FIXME: get_readable_log_config_filename() doesn't work here. # Create a temporary copy of the log config file and use *that*. argv = SESSION_TOOL_ARGV + [ ("--admin-log-config=%s" % util.get_admin_log_config_filename()), ("--readable-log-config=%s" % util.get_readable_log_config_filename()), self.profile_name, self.user_profile_path, str(display_number), ] envp = self.build_envp_for_child() cwd = self.temp_homedir # FIXME: do we need any special processing if this throws an exception? # We'll catch it in the toplevel and exit with a fatal error code, anyway. (pid, oink, oink, oink) = gobject.spawn_async( argv, envp, cwd, gobject.SPAWN_DO_NOT_REAP_CHILD, child_setup_fn, self, None, None, None ) # stdin, stdout, stderr self.session_pid = pid # self.session_stderr = os.fdopen (stderr_fd) # self.session_stderr_watch_id = gobject.io_add_watch (stderr_fd, # gobject.IO_IN | gobject.IO_HUP, # self.session_stderr_io_cb, self) self.session_child_watch = gobject.child_watch_add(self.session_pid, self.__session_child_watch_handler)