zengxyz / rpms / anaconda

Forked from rpms/anaconda 4 months ago
Clone
fbcaed
From cbcd5de3b4a37b620388f1de420721d1ae3d4130 Mon Sep 17 00:00:00 2001
fbcaed
From: Colin Walters <walters@verbum.org>
fbcaed
Date: Fri, 25 Apr 2014 08:57:47 -0400
fbcaed
Subject: [PATCH 08/20] install: Handle distinct physical root/sysroot
fbcaed
fbcaed
Recent changes introduced the ability to have distinct physical root
fbcaed
and sysroot.  In this case, because we run the bootloader binaries
fbcaed
inside the target, we need to ensure that e.g. /boot is mounted inside
fbcaed
that target root.
fbcaed
fbcaed
Note in this case, we also use a new Blivet API to update its
fbcaed
knowledge of the system root.
fbcaed
fbcaed
This patch also updates the storage write logic to note if
fbcaed
ksdata.ostreesetup.osname is set, because the storage will have to be
fbcaed
written after the packaging.
fbcaed
fbcaed
Resolves: rhbz#1113535
fbcaed
Port of rpmostreepayload patches from master
fbcaed
commit 0bbc9adf41b33062bbbfe478b3373a3404de21aa
fbcaed
---
fbcaed
 pyanaconda/install.py | 30 +++++++++++++++++++++++++++---
fbcaed
 1 file changed, 27 insertions(+), 3 deletions(-)
fbcaed
fbcaed
diff --git a/pyanaconda/install.py b/pyanaconda/install.py
fbcaed
index 8068bf0..68551cc 100644
fbcaed
--- a/pyanaconda/install.py
fbcaed
+++ b/pyanaconda/install.py
fbcaed
@@ -30,6 +30,7 @@ from pyanaconda import timezone
fbcaed
 from pyanaconda.i18n import _
fbcaed
 from pyanaconda.threads import threadMgr
fbcaed
 import logging
fbcaed
+import blivet
fbcaed
 log = logging.getLogger("anaconda")
fbcaed
 
fbcaed
 def _writeKS(ksdata):
fbcaed
@@ -148,7 +149,9 @@ def doInstall(storage, payload, ksdata, instClass):
fbcaed
     payload.preStorage()
fbcaed
 
fbcaed
     turnOnFilesystems(storage, mountOnly=flags.flags.dirInstall)
fbcaed
-    if not flags.flags.livecdInstall and not flags.flags.dirInstall:
fbcaed
+    write_storage_late = (flags.flags.livecdInstall or ksdata.ostreesetup.seen
fbcaed
+                          and not flags.flags.dirInstall)
fbcaed
+    if not write_storage_late:
fbcaed
         storage.write()
fbcaed
 
fbcaed
     # Do packaging.
fbcaed
@@ -169,8 +172,29 @@ def doInstall(storage, payload, ksdata, instClass):
fbcaed
     payload.preInstall(packages=packages, groups=payload.languageGroups())
fbcaed
     payload.install()
fbcaed
 
fbcaed
-    if flags.flags.livecdInstall:
fbcaed
-        storage.write()
fbcaed
+    if write_storage_late:
fbcaed
+        if iutil.getSysroot() != iutil.getTargetPhysicalRoot():
fbcaed
+            blivet.setSysroot(iutil.getTargetPhysicalRoot(),
fbcaed
+                              iutil.getSysroot())
fbcaed
+            storage.write()
fbcaed
+
fbcaed
+            # Now that we have the FS layout in the target, umount
fbcaed
+            # things that were in the legacy sysroot, and put them in
fbcaed
+            # the target root, except for the physical /.  First,
fbcaed
+            # unmount all target filesystems.
fbcaed
+            storage.umountFilesystems()
fbcaed
+
fbcaed
+            # Explicitly mount the root on the physical sysroot
fbcaed
+            rootmnt = storage.mountpoints.get('/')
fbcaed
+            rootmnt.setup()
fbcaed
+            rootmnt.format.setup(rootmnt.format.options, chroot=iutil.getTargetPhysicalRoot())
fbcaed
+
fbcaed
+            # Everything else goes in the target root, including /boot
fbcaed
+            # since the bootloader code will expect to find /boot
fbcaed
+            # inside the chroot.
fbcaed
+            storage.mountFilesystems(skipRoot=True)
fbcaed
+        else:
fbcaed
+            storage.write()
fbcaed
 
fbcaed
     # Do bootloader.
fbcaed
     if not flags.flags.dirInstall:
fbcaed
-- 
fbcaed
1.9.3
fbcaed