[master 1/1] Add kickstart %pre-install section support
bcl
installerbot-noreply at redhat.com
Mon Apr 20 22:52:39 UTC 2015
From: "Brian C. Lane" <bcl at redhat.com>
The %pre-install section will run scripts after all the filesystems have
been setup and mounted on /mnt/sysimage, but before any packages have
been installed.
---
anaconda.spec.in | 2 +-
pyanaconda/install.py | 9 ++++++---
pyanaconda/kickstart.py | 16 ++++++++++++++--
3 files changed, 21 insertions(+), 6 deletions(-)
diff --git a/anaconda.spec.in b/anaconda.spec.in
index ded52e6..f09ab44 100644
--- a/anaconda.spec.in
+++ b/anaconda.spec.in
@@ -21,7 +21,7 @@ Source0: %{name}-%{version}.tar.bz2
# Also update in AM_GNU_GETTEXT_VERSION in configure.ac
%define gettextver 0.18.3
%define intltoolver 0.31.2-3
-%define pykickstartver 2.5
+%define pykickstartver 2.6
%define yumver 3.4.3-91
%define dnfver 0.6.4
%define partedver 1.8.1
diff --git a/pyanaconda/install.py b/pyanaconda/install.py
index 937c778..6356b64 100644
--- a/pyanaconda/install.py
+++ b/pyanaconda/install.py
@@ -33,6 +33,7 @@
from pyanaconda.i18n import _
from pyanaconda.threads import threadMgr
from pyanaconda.ui.lib.entropy import wait_for_entropy
+from pyanaconda.kickstart import runPostScripts, runPreInstallScripts
import logging
import blivet
log = logging.getLogger("anaconda")
@@ -55,8 +56,6 @@ def _writeKS(ksdata):
iutil.eintr_retry_call(os.chmod, path, 0o600)
def doConfiguration(storage, payload, ksdata, instClass):
- from pyanaconda.kickstart import runPostScripts
-
willWriteNetwork = not flags.flags.imageInstall and not flags.flags.dirInstall
willRunRealmd = ksdata.realm.discovered
@@ -150,7 +149,7 @@ def doInstall(storage, payload, ksdata, instClass):
# Update every 10% of packages installed. We don't know how many packages
# we are installing until it's too late (see realmd later on) so this is
# the best we can do.
- steps += 10
+ steps += 11
# pre setup phase, post install
steps += 2
@@ -199,6 +198,10 @@ def doInstall(storage, payload, ksdata, instClass):
if not write_storage_late and not flags.flags.dirInstall:
storage.write()
+ # Run %pre-install scripts with the filesystem mounted and no packages
+ with progress_report(_("Running pre-installation scripts")):
+ runPreInstallScripts(ksdata.scripts)
+
# Do packaging.
# Discover information about realms to join,
diff --git a/pyanaconda/kickstart.py b/pyanaconda/kickstart.py
index b5114dc..77c4729 100644
--- a/pyanaconda/kickstart.py
+++ b/pyanaconda/kickstart.py
@@ -65,13 +65,13 @@
from pyanaconda.pwpolicy import F22_PwPolicy, F22_PwPolicyData
from pykickstart.constants import CLEARPART_TYPE_NONE, FIRSTBOOT_SKIP, FIRSTBOOT_RECONFIG, KS_SCRIPT_POST, KS_SCRIPT_PRE, \
- KS_SCRIPT_TRACEBACK, SELINUX_DISABLED, SELINUX_ENFORCING, SELINUX_PERMISSIVE
+ KS_SCRIPT_TRACEBACK, KS_SCRIPT_PREINSTALL, SELINUX_DISABLED, SELINUX_ENFORCING, SELINUX_PERMISSIVE
from pykickstart.base import BaseHandler
from pykickstart.errors import formatErrorMsg, KickstartError, KickstartValueError
from pykickstart.parser import KickstartParser
from pykickstart.parser import Script as KSScript
from pykickstart.sections import Section
-from pykickstart.sections import NullSection, PackageSection, PostScriptSection, PreScriptSection, TracebackScriptSection
+from pykickstart.sections import NullSection, PackageSection, PostScriptSection, PreScriptSection, PreInstallScriptSection, TracebackScriptSection
from pykickstart.version import returnClassForVersion
import logging
@@ -2010,6 +2010,7 @@ def handleCommand(self, lineno, args):
def setupSections(self):
self.registerSection(PreScriptSection(self.handler, dataObj=AnacondaKSScript))
+ self.registerSection(NullSection(self.handler, sectionOpen="%pre-install"))
self.registerSection(NullSection(self.handler, sectionOpen="%post"))
self.registerSection(NullSection(self.handler, sectionOpen="%traceback"))
self.registerSection(NullSection(self.handler, sectionOpen="%packages"))
@@ -2031,6 +2032,7 @@ def handleCommand(self, lineno, args):
def setupSections(self):
self.registerSection(PreScriptSection(self.handler, dataObj=self.scriptClass))
+ self.registerSection(PreInstallScriptSection(self.handler, dataObj=self.scriptClass))
self.registerSection(PostScriptSection(self.handler, dataObj=self.scriptClass))
self.registerSection(TracebackScriptSection(self.handler, dataObj=self.scriptClass))
self.registerSection(PackageSection(self.handler))
@@ -2121,6 +2123,16 @@ def runPreScripts(scripts):
log.info("All kickstart %%pre script(s) have been run")
+def runPreInstallScripts(scripts):
+ preInstallScripts = [s for s in scripts if s.type == KS_SCRIPT_PREINSTALL]
+
+ if len(preInstallScripts) == 0:
+ return
+
+ log.info("Running kickstart %%pre-install script(s)")
+ map (lambda s: s.run("/"), preInstallScripts)
+ log.info("All kickstart %%pre-install script(s) have been run")
+
def runTracebackScripts(scripts):
log.info("Running kickstart %%traceback script(s)")
for script in filter(lambda s: s.type == KS_SCRIPT_TRACEBACK, scripts):
--
To view this commit on github, visit https://github.com/rhinstaller/anaconda/commit/da44f538d7e1e5fd7369b8253276e465a259056c
More information about the anaconda-patches
mailing list