KS_SCRIPT_POST = 1
KS_SCRIPT_TRACEBACK = 2
KS_SCRIPT_RUN = 3
+KS_SCRIPT_UMOUNT = 4
KS_WAIT = 0
KS_REBOOT = 1
retval += '\n%traceback'
elif self.type == constants.KS_SCRIPT_RUN:
retval += '\n%runscript'
+ elif self.type == constants.KS_SCRIPT_UMOUNT:
+ retval += '\n%post-umount'
if self.interp != "/bin/sh" and self.interp != "":
retval += " --interpreter=%s" % self.interp
self.registerSection(PostScriptSection(self.handler, dataObj=Script))
self.registerSection(TracebackScriptSection(self.handler, dataObj=Script))
self.registerSection(RunScriptSection(self.handler, dataObj=Script))
+ self.registerSection(PostUmountScriptSection(self.handler, dataObj=Script))
self.registerSection(PackageSection(self.handler))
parser.registerSection with an instance of your new class.
"""
from constants import *
+from errors import *
from options import KSOptionParser
from version import *
class RunScriptSection(ScriptSection):
sectionOpen = "%runscript"
+
def _resetScript(self):
ScriptSection._resetScript(self)
self._script["type"] = KS_SCRIPT_RUN
+
+ def finalize(self):
+ ScriptSection.finalize(self)
+ if self.handler:
+ for s in self.handler.scripts:
+ if s.type == KS_SCRIPT_UMOUNT:
+ raise KickstartError("%runscript and %post-umount " \
+ "can not be defined together")
+
+class PostUmountScriptSection(ScriptSection):
+ sectionOpen = "%post-umount"
+
+ def _resetScript(self):
+ ScriptSection._resetScript(self)
+ self._script["type"] = KS_SCRIPT_UMOUNT
+
+ def finalize(self):
+ ScriptSection.finalize(self)
+ if self.handler:
+ for s in self.handler.scripts:
+ if s.type == KS_SCRIPT_RUN:
+ raise KickstartError("%runscript and %post-umount " \
+ "can not be defined together")
+
class PackageSection(Section):
sectionOpen = "%packages"
self._instloops = []
self._imgdir = None
+ self._umountdir = None
if self.ks:
self.__image_size = kickstart.get_image_size(self.ks,
except:
pass
+ def _get_sign_scripts_env(self):
+ env = BaseImageCreator._get_sign_scripts_env(self)
+
+ # Directory path of %post-umounts scripts
+ if self._umountdir:
+ env['UMOUNT_SCRIPTS_PATH'] = str(self._umountdir)
+
+ return env
+
def _stage_final_image(self):
if self.pack_to or self.shrink_image:
msger.verbose("Move attachment %s to %s" % (item, dpath))
shutil.move(item, dpath)
+ def move_post_umount_scripts(self):
+ scripts_dir = self._instroot + "/var/tmp/post_umount_scripts"
+ if not os.path.exists(scripts_dir):
+ return
+ self._umountdir = self._mkdtemp("umount")
+ msger.info("Moving post umount scripts...")
+ for item in os.listdir(scripts_dir):
+ spath = os.path.join(scripts_dir, item)
+ dpath = os.path.join(self._umountdir, item)
+ msger.verbose("Move post umount scripts %s to %s" % (spath, dpath))
+ shutil.move(spath, dpath)
+ shutil.rmtree(scripts_dir)
+
+ def postinstall(self):
+ BaseImageCreator.postinstall(self)
+ self.move_post_umount_scripts()
+
def create_manifest(self):
if self.compress_image:
self.image_files.update({'compress': self.compress_image})
def get_sign_scripts(ks):
scripts = []
for s in ks.handler.scripts:
- if s.type != ksparser.KS_SCRIPT_RUN:
- continue
- scripts.append(s)
+ if (s.type == ksparser.KS_SCRIPT_RUN or \
+ s.type == ksparser.KS_SCRIPT_UMOUNT):
+ scripts.append(s)
return scripts
+
def add_repo(ks, repostr):
args = repostr.split()
repoobj = ks.handler.repo.parse(args[1:])