def make_process(app_dir): my_root = FileNamespace() caller_root = plash.env.get_root_dir() proc = Process() proc.cwd_path = "/" for var in ["HOME"]: if var in os.environ: proc.env[var] = os.environ[var] state = plash.pola_run_args.ProcessSetup(proc) state.caller_root = caller_root state.cwd = ns.resolve_dir(state.caller_root, os.getcwd()) state.handle_args( ["-fw", "/dev/null", "-f", "/dev/urandom", "-f", "/dev/random", "-f", "/etc/localtime", "--x11", "--net"]) lib_dir_path = os.environ.get("PLASH_LIBRARY_DIR", "/usr/lib/plash/lib") lib_dir = my_root.get_obj(lib_dir_path) for dir_entry in lib_dir.dir_list(): leafname = dir_entry["name"] file_obj = lib_dir.dir_traverse(leafname) proc.get_namespace().attach_at_path(os.path.join("/lib", leafname), file_obj) root_dir = ns.make_cow_dir(my_root.get_obj( os.path.join(app_dir, "write_layer")), my_root.get_obj( os.path.join(app_dir, "unpacked"))) proc.get_namespace().attach_at_path("/", root_dir) return (proc, state)
def copy_cwd(self, args): self.cwd = ns.resolve_dir(self.caller_root, os.getcwd())
def __init__(self): self._root = plash.env.get_root_dir() self._cwd = ns.resolve_dir(self._root, os.getcwd())
def set_cwd(self, dir_path): self.cwd = ns.resolve_dir(self.caller_root, dir_path, cwd=self.cwd)