[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[PATCH 16/16] Move handling of /proc/bus/usb and /selinux into storage.



---
 pyanaconda/livecd.py             |   22 ----------------------
 pyanaconda/rescue.py             |    6 ------
 pyanaconda/storage/__init__.py   |   27 ++++++++++++++++++++++++---
 pyanaconda/storage/formats/fs.py |   15 +++++++++++++++
 pyanaconda/yuminstall.py         |   25 -------------------------
 5 files changed, 39 insertions(+), 56 deletions(-)

diff --git a/pyanaconda/livecd.py b/pyanaconda/livecd.py
index 0f6dc3e..54fb7c3 100644
--- a/pyanaconda/livecd.py
+++ b/pyanaconda/livecd.py
@@ -148,19 +148,7 @@ class LiveCDCopyBackend(backend.AnacondaBackend):
     def _getLiveSizeMB(self):
         return self._getLiveSize() / 1048576
 
-    def _unmountNonFstabDirs(self, anaconda):
-        # unmount things that aren't listed in /etc/fstab.  *sigh*
-        dirs = []
-        if flags.selinux:
-            dirs.append("/selinux")
-        for dir in dirs:
-            try:
-                isys.umount("%s/%s" %(anaconda.rootPath,dir), removeDir = False)
-            except Exception, e:
-                log.error("unable to unmount %s: %s" %(dir, e))
-
     def postAction(self, anaconda):
-        self._unmountNonFstabDirs(anaconda)
         try:
             anaconda.storage.umountFilesystems(swapoff = False)
             os.rmdir(anaconda.rootPath)
@@ -168,9 +156,6 @@ class LiveCDCopyBackend(backend.AnacondaBackend):
             log.error("Unable to unmount filesystems: %s" % e) 
 
     def doPreInstall(self, anaconda):
-        if anaconda.dir == DISPATCH_BACK:
-            self._unmountNonFstabDirs(anaconda)
-            return
         anaconda.storage.umountFilesystems(swapoff = False)
 
     def doInstall(self, anaconda):
@@ -350,13 +335,6 @@ class LiveCDCopyBackend(backend.AnacondaBackend):
             os.chown(dest, st.st_uid, st.st_gid)
             os.chmod(dest, stat.S_IMODE(st.st_mode))
 
-        # ensure that non-fstab filesystems are mounted in the chroot
-        if flags.selinux:
-            try:
-                isys.mount("/selinux", anaconda.rootPath + "/selinux", "selinuxfs")
-            except Exception, e:
-                log.error("error mounting selinuxfs: %s" %(e,))
-
         wait.pop()
 
     def _resizeRootfs(self, anaconda, win = None):
diff --git a/pyanaconda/rescue.py b/pyanaconda/rescue.py
index aea3c94..ee023a0 100644
--- a/pyanaconda/rescue.py
+++ b/pyanaconda/rescue.py
@@ -415,12 +415,6 @@ def runRescue(anaconda):
 
                 # and /selinux too
                 if flags.selinux and os.path.isdir("%s/selinux" %(anaconda.rootPath,)):
-                    try:
-                        isys.mount("/selinux", "%s/selinux" %(anaconda.rootPath,),
-                                   "selinuxfs")
-                    except Exception, e:
-                        log.error("error mounting selinuxfs: %s" %(e,))
-
                     # we have to catch the possible exception
                     # because we support read-only mounting
                     try:
diff --git a/pyanaconda/storage/__init__.py b/pyanaconda/storage/__init__.py
index ae700c8..e815c20 100644
--- a/pyanaconda/storage/__init__.py
+++ b/pyanaconda/storage/__init__.py
@@ -1542,6 +1542,8 @@ class FSSet(object):
         self._sysfs = None
         self._proc = None
         self._devshm = None
+        self._usb = None
+        self._selinux = None
         self.preserveLines = []     # lines we just ignore and preserve
 
     @property
@@ -1588,6 +1590,22 @@ class FSSet(object):
         return self._devshm
 
     @property
+    def usb(self):
+        if not self._usb:
+            self._usb = NoDevice(format=getFormat("usbfs",
+                                                  device="usbfs",
+                                                  mountpoint="/proc/bus/usb"))
+        return self._usb
+
+    @property
+    def selinux(self):
+        if not self._selinux:
+            self._selinux = NoDevice(format=getFormat("selinuxfs",
+                                                      device="selinuxfs",
+                                                      mountpoint="/selinux"))
+        return self._selinux
+
+    @property
     def devices(self):
         return sorted(self.devicetree.devices, key=lambda d: d.path)
 
@@ -1637,7 +1655,8 @@ class FSSet(object):
             device.format = getFormat("bind",
                                       device=device.path,
                                       exists=True)
-        elif mountpoint in ("/proc", "/sys", "/dev/shm", "/dev/pts"):
+        elif mountpoint in ("/proc", "/sys", "/dev/shm", "/dev/pts",
+                            "/selinux", "/proc/bus/usb"):
             # drop these now -- we'll recreate later
             return None
         else:
@@ -1889,7 +1908,8 @@ class FSSet(object):
                          skipRoot=False):
         intf = anaconda.intf
         devices = self.mountpoints.values() + self.swapDevices
-        devices.extend([self.dev, self.devshm, self.devpts, self.sysfs, self.proc])
+        devices.extend([self.dev, self.devshm, self.devpts, self.sysfs,
+                        self.proc, self.selinux, self.usb])
         devices.sort(key=lambda d: getattr(d.format, "mountpoint", None))
 
         for device in devices:
@@ -2004,7 +2024,8 @@ class FSSet(object):
 
     def umountFilesystems(self, ignoreErrors=True, swapoff=True):
         devices = self.mountpoints.values() + self.swapDevices
-        devices.extend([self.dev, self.devshm, self.devpts, self.sysfs, self.proc])
+        devices.extend([self.dev, self.devshm, self.devpts, self.sysfs,
+                        self.proc, self.usb, self.selinux])
         devices.sort(key=lambda d: getattr(d.format, "mountpoint", None))
         devices.reverse()
         for device in devices:
diff --git a/pyanaconda/storage/formats/fs.py b/pyanaconda/storage/formats/fs.py
index 7887bd2..f055ce2 100644
--- a/pyanaconda/storage/formats/fs.py
+++ b/pyanaconda/storage/formats/fs.py
@@ -1480,3 +1480,18 @@ class BindFS(FS):
 register_device_format(BindFS)
 
 
+class SELinuxFS(NoDevFS):
+    _type = "selinuxfs"
+
+    @property
+    def mountable(self):
+        return flags.selinux and super(FS, self).mountable
+
+register_device_format(SELinuxFS)
+
+
+class USBFS(NoDevFS):
+    _type = "usbfs"
+
+register_device_format(USBFS)
+
diff --git a/pyanaconda/yuminstall.py b/pyanaconda/yuminstall.py
index 47a5762..5438d66 100644
--- a/pyanaconda/yuminstall.py
+++ b/pyanaconda/yuminstall.py
@@ -1535,14 +1535,6 @@ reposdir=/etc/anaconda.repos.d,/tmp/updates/anaconda.repos.d,/tmp/product/anacon
         self.ayum.dsCallback = None
 
     def doPreInstall(self, anaconda):
-        if anaconda.dir == DISPATCH_BACK:
-            for d in ("/selinux", "/dev", "/proc/bus/usb"):
-                try:
-                    isys.umount(anaconda.rootPath + d, removeDir = False)
-                except Exception, e:
-                    log.error("unable to unmount %s: %s" %(d, e))
-            return
-
         if anaconda.upgrade:
             # An old mtab can cause confusion (esp if loop devices are
             # in it).  Be extra special careful and delete any mtab first,
@@ -1574,23 +1566,6 @@ reposdir=/etc/anaconda.repos.d,/tmp/updates/anaconda.repos.d,/tmp/product/anacon
 
         self.initLog(anaconda.rootPath)
 
-        # SELinux hackery (#121369)
-        if flags.selinux:
-            try:
-                os.mkdir(anaconda.rootPath + "/selinux")
-            except Exception, e:
-                pass
-            try:
-                isys.mount("/selinux", anaconda.rootPath + "/selinux", "selinuxfs")
-            except Exception, e:
-                log.error("error mounting selinuxfs: %s" %(e,))
-
-        # For usbfs
-        try:
-            isys.mount("/proc/bus/usb", anaconda.rootPath + "/proc/bus/usb", "usbfs")
-        except Exception, e:
-            log.error("error mounting usbfs: %s" %(e,))
-
         # write out the fstab
         if not anaconda.upgrade:
             anaconda.storage.fsset.write(anaconda.rootPath)
-- 
1.7.3.2


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]