#!/usr/bin/python3 import subprocess import sys def cleanUpChroot(chrootPath): returnVal, listmountpoints = findmountpoints(chrootPath) if not returnVal: return False sortmountpoints(listmountpoints) print(listmountpoints) if not unmountmountpoints(listmountpoints): return False if not removeAllFilesFromChroot(chrootPath): return False return True def removeAllFilesFromChroot(chrootPath): cmd = "rm -rf " + chrootPath process = subprocess.Popen("%s" %cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) retval = process.wait() if retval != 0: print("Unable to remove files from chroot " + chrootPath) return False return True def unmountmountpoints(listmountpoints): if listmountpoints is None: return True result = True for mountpoint in listmountpoints: cmd = "umount " + mountpoint process = subprocess.Popen("%s" %cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) retval = process.wait() if retval != 0: result = False print("Unable to unmount " + mountpoint) break if not result: print("Unable to unmount all mounts. Unable to clean up the chroot") return False return True def findmountpoints(chrootPath): if not chrootPath.endswith("/"): chrootPath = chrootPath + "/" cmd = "mount | grep " + chrootPath + " | cut -d' ' -s -f3" process = subprocess.Popen("%s" %cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) retval = process.wait() if retval != 0: print("Unable to find mountpoints in chroot") return False, None mountpoints = process.communicate()[0].decode() mountpoints = mountpoints.replace("\n", " ").strip() if mountpoints == "": print("No mount points found") return True, None listmountpoints = mountpoints.split(" ") return True, listmountpoints def sortmountpoints(listmountpoints): if listmountpoints is None: return True sortedmountpoints = listmountpoints sorted(sortedmountpoints) sortedmountpoints.reverse() def main(): if len(sys.argv) < 2: print("Usage: ./clean-up-chroot.py ") sys.exit(1) if not cleanUpChroot(sys.argv[1]): sys.exit(1) sys.exit(0) if __name__ == "__main__": main()