resource.setrlimit(resource_type, lim)
except OSError, e:
self.log("Error: setrlimit(%d, %s, %d, %d, %d): %s"
- % (self.ctx, type.lower(), hard, soft, min))
+ % (self.ctx, type.lower(), hard, soft, min, e))
return update
os.chroot(self.dir)
os.chdir("/")
- def chroot_call(self, fn, *args):
+ def chroot_call(self, fn, *args, **kwargs={}):
cwd_fd = os.open(".", os.O_RDONLY)
try:
root_fd = os.open("/", os.O_RDONLY)
try:
self.__do_chroot()
- result = fn(*args)
+ result = fn(*args, **kwargs)
finally:
os.fchdir(root_fd)
os.chroot(".")
def start(self, runlevel = 3):
-
if (os.fork() != 0):
# Parent should just return.
self.vm_running = True
else:
# child process
try:
- # so we don't chcontext with priv'ed fds
- close_nonstandard_fds()
-
- # get a new session
- os.setsid()
+ subprocess.call("/usr/sbin/vserver %s start" % self.name,
+ shell=True)
- # open state file to record vserver info
- state_file = open("/var/run/vservers/%s" % self.name, "w")
-
- # use /dev/null for stdin, /var/log/boot.log for stdout/err
- fd = os.open("/dev/null", os.O_RDONLY)
- if fd != 0:
- os.dup2(fd, 0)
- os.close(fd)
-
- # perform pre-init cleanup
- self.__prep(runlevel)
-
- self.config.cache_it()
- self.__do_chroot()
- removed = self.__cleanvar()
-
- log = open("/var/log/nm", "a", 0)
- if log.fileno() != 1:
- os.dup2(log.fileno(), 1)
- os.dup2(1, 2)
-
- print >>log, ("%s: removing %s" %
- (time.asctime(time.gmtime()), removed))
- print >>log, ("%s: starting the virtual server %s" %
- (time.asctime(time.gmtime()), self.name))
- # execute each init script in turn
- # XXX - we don't support all scripts that vserver script does
- self.__do_chcontext(state_file)
+ # execute initscripts
for cmd in self.INITSCRIPTS:
try:
# enter vserver context
arg_subst = { 'runlevel': runlevel }
- cmd_args = [cmd[0]] + map(lambda x: x % arg_subst,
- cmd[1:])
- if os.path.isfile(cmd[0]):
- print >>log, "executing '%s'" % " ".join(cmd_args)
- os.spawnvp(os.P_NOWAIT,cmd[0],cmd_args)
+ cmd_args = [cmd[0]] + map(lambda x: x % arg_subst, cmd[1:])
+ cmd_file = "/vservers/" + self.name + cmd[0]
+ self.log(cmd_file)
+ if os.path.isfile(cmd_file):
+ self.log("executing '%s'" % " ".join(cmd_args))
+ self.chroot_call(subprocess.call, " ".join(cmd_args), shell=True)
else:
- print >>log, "WARNING: could not run %s"%cmd[0]
+ self.log("WARNING: could not run %s on %s" % (cmd[0], self.name))
except:
- print >>log, traceback.format_exc()
+ self.log(traceback.format_exc())
# we get here due to an exception in the top-level child process
except Exception, ex:
self.log(traceback.format_exc())
os._exit(0)
+
def set_resources(self,setup=False):
""" Called when vserver context is entered for first time,