- if new_initscript != self.initscript:
- self.initscript = new_initscript
- # not used anymore, we always check against the installed script
- #self.initscriptchanged = True
- self.refresh_slice_vinit()
+ if new_initscript == self.initscript:
+ return
+ logger.log("initscript.configure {}".format(self.name))
+ self.initscript = new_initscript
+ code = self.initscript
+ sliver_initscript = "/vservers/%s/etc/rc.d/init.d/vinit.slice" % self.name
+ if tools.replace_file_with_string(sliver_initscript, code, remove_if_empty=True, chmod=0755):
+ if code:
+ logger.log("Initscript: %s: Installed new initscript in %s" % (self.name, sliver_initscript))
+ if self.is_running():
+ # Only need to rerun the initscript if the vserver is
+ # already running. If the vserver isn't running, then the
+ # initscript will automatically be started by
+ # /etc/rc.d/vinit when the vserver is started.
+ self.rerun_slice_vinit()
+ else:
+ logger.log("Initscript: %s: Removed obsolete initscript %s" % (self.name, sliver_initscript))
+
+ def install_and_enable_vinit(self):
+ "prepare sliver rootfs init and systemd so the vinit service kicks in"
+ # the fact that systemd attempts to run old-style services
+ # says we should do either one or the other and not both
+ # but actually if that was true we could just do it for init and be fine
+ # which is not what we've seen starting with f18
+ # so we try for a systemd system, and if it fails it means
+ # one of the dir does not exist and so we are dealing with an init-based rootfs
+ try:
+ self.install_and_enable_vinit_for_systemd ()
+ except:
+ self.install_and_enable_vinit_for_init ()