git://git.onelab.eu
/
util-vserver-pl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix comment
[util-vserver-pl.git]
/
python
/
vserver.py
diff --git
a/python/vserver.py
b/python/vserver.py
index
4fc552d
..
5278806
100644
(file)
--- a/
python/vserver.py
+++ b/
python/vserver.py
@@
-129,6
+129,26
@@
class VServerConfig:
os.path.walk(self.dir, add_to_cache, self.cache)
os.path.walk(self.dir, add_to_cache, self.cache)
+def adjust_lim(goal, curr):
+ gh = goal[0]
+ gs = goal[1]
+ gm = goal[2]
+ soft = curr[0]
+ hard = curr[1]
+ if gm != VC_LIM_KEEP:
+ if gm > soft or gm == resource.RLIM_INFINITY:
+ soft = gm
+ if gm > hard or gm == resource.RLIM_INFINITY:
+ hard = gm
+ if gs != VC_LIM_KEEP:
+ if gs > soft or gs == resource.RLIM_INFINITY:
+ soft = gs
+ if gh != VC_LIM_KEEP:
+ if gh > hard or gh == resource.RLIM_INFINITY:
+ hard = gh
+ return (soft, hard)
+
+
class VServer:
INITSCRIPTS = [('/etc/rc.vinit', 'start'),
class VServer:
INITSCRIPTS = [('/etc/rc.vinit', 'start'),
@@
-181,6
+201,10
@@
class VServer:
resource_type = RLIMITS[type]
try:
vserverimpl.setrlimit(self.ctx, resource_type, hard, soft, min)
resource_type = RLIMITS[type]
try:
vserverimpl.setrlimit(self.ctx, resource_type, hard, soft, min)
+ if hasattr(resource, 'RLIMIT_' + type):
+ lim = resource.getrlimit(resource_type)
+ lim = adjust_lim((hard, soft, min), lim)
+ 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))
except OSError, e:
self.log("Error: setrlimit(%d, %s, %d, %d, %d): %s"
% (self.ctx, type.lower(), hard, soft, min))
@@
-277,7
+301,7
@@
class VServer:
try:
vserverimpl.unsetdlimit(self.dir, self.ctx)
except OSError, e:
try:
vserverimpl.unsetdlimit(self.dir, self.ctx)
except OSError, e:
- self.log("Unexpected error with unsetdlimit for context %d
" % self.ctx
)
+ self.log("Unexpected error with unsetdlimit for context %d
: %r" % (self.ctx,e)
)
return
if self.vm_running:
return
if self.vm_running:
@@
-297,7
+321,7
@@
class VServer:
vserverimpl.DLIMIT_INF, # inode limit
2) # %age reserved for root
except OSError, e:
vserverimpl.DLIMIT_INF, # inode limit
2) # %age reserved for root
except OSError, e:
- self.log("Unexpected error with setdlimit for context %d
" % self.ctx
)
+ self.log("Unexpected error with setdlimit for context %d
: %r" % (self.ctx, e)
)
self.config.update('dlimits/0/space_total', block_limit)
self.config.update('dlimits/0/space_total', block_limit)
@@
-380,7
+404,7
@@
class VServer:
# set the initial runlevel
# set the initial runlevel
- vserverimpl.setrunlevel(self.dir + "/utmp", runlevel)
+ vserverimpl.setrunlevel(self.dir + "/
var/run/
utmp", runlevel)
# mount /proc and /dev/pts
self.__do_mount("none", self.dir, "/proc", "proc")
# mount /proc and /dev/pts
self.__do_mount("none", self.dir, "/proc", "proc")
@@
-443,7
+467,7
@@
class VServer:
# open state file to record vserver info
state_file = open("/var/run/vservers/%s" % self.name, "w")
# 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
+ # use /dev/null for stdin, /var/log/
nm
for stdout/err
fd = os.open("/dev/null", os.O_RDONLY)
if fd != 0:
os.dup2(fd, 0)
fd = os.open("/dev/null", os.O_RDONLY)
if fd != 0:
os.dup2(fd, 0)
@@
-456,7
+480,7
@@
class VServer:
self.__do_chroot()
removed = self.__cleanvar()
self.__do_chroot()
removed = self.__cleanvar()
- log = open("/var/log/
boot.log
", "a", 0)
+ log = open("/var/log/
nm
", "a", 0)
if log.fileno() != 1:
os.dup2(log.fileno(), 1)
os.dup2(1, 2)
if log.fileno() != 1:
os.dup2(log.fileno(), 1)
os.dup2(1, 2)
@@
-477,6
+501,8
@@
class VServer:
if os.path.isfile(cmd[0]):
print >>log, "executing '%s'" % " ".join(cmd_args)
os.spawnvp(os.P_NOWAIT,cmd[0],cmd_args)
if os.path.isfile(cmd[0]):
print >>log, "executing '%s'" % " ".join(cmd_args)
os.spawnvp(os.P_NOWAIT,cmd[0],cmd_args)
+ else:
+ print >>log, "WARNING: could not run %s"%cmd[0]
except:
print >>log, traceback.format_exc()
except:
print >>log, traceback.format_exc()