[rhel7/master] Use low level file i/o for rpm callback logging (#1035745)

Brian C. Lane bcl at redhat.com
Fri Aug 8 21:17:11 UTC 2014


Mixing the python file object with the low level fd as used by rpm
resulted in mixed output. This switches to using a fd for logging from
the callback so that its output and the script output will be
synchronized.
---
 scripts/anaconda-yum | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/scripts/anaconda-yum b/scripts/anaconda-yum
index f214d0a..e6752fd 100755
--- a/scripts/anaconda-yum
+++ b/scripts/anaconda-yum
@@ -152,8 +152,8 @@ def run_yum_transaction(release, arch, yum_conf, install_root, ts_file, script_l
         yb.ts.clean()
 
         # Write scriptlet output to a file to be logged later
-        logfile = open(script_log, "w")
-        yb.ts.ts.scriptFd = logfile.fileno()
+        logfile = os.open(script_log, os.O_WRONLY|os.O_CREAT)
+        yb.ts.ts.scriptFd = logfile
         rpm.setLogFile(logfile)
 
         # create the install callback
@@ -179,7 +179,7 @@ def run_yum_transaction(release, arch, yum_conf, install_root, ts_file, script_l
             print("INFO: transaction complete")
         finally:
             yb.ts.close()
-            logfile.close()
+            os.close(logfile)
     except Exception as e:
         print("ERROR: transaction error: %s" % e)
     finally:
@@ -210,14 +210,14 @@ class RPMCallback(object):
     def __init__(self, yb, arch, log, debug=False):
         """ :param yb: YumBase object
             :type yb: YumBase
-            :param log: script logfile
-            :type log: string
+            :param log: file-descriptor of script logfile
+            :type log: int
             :param statusQ: status communication back to other process
             :type statusQ: Queue
         """
         self.yb = yb                # yum.YumBase
         self.base_arch = arch
-        self.install_log = log      # logfile for yum script logs
+        self.install_log = log      # fd of logfile for yum script logs
         self.debug = debug
 
         self.package_file = None    # file instance (package file management)
@@ -273,7 +273,7 @@ class RPMCallback(object):
             log_msg = msg_format % (txmbr.po,
                                     self.completed_actions,
                                     self.total_actions)
-            self.install_log.write(log_msg+"\n")
+            os.write(self.install_log, log_msg+"\n")
             print("PROGRESS_INSTALL: %s" % progress_msg)
 
         try:
-- 
1.9.3



More information about the anaconda-patches mailing list