lgerhardt/chos
Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Repository files navigation
CHOS Introduction ------------ CHOS is a kernel module and utilities that facilitates supporting multiple Linux releases simultaneously on a single system. With chos, you can have a base OS (the true root tree for the system) and allows users to select from other accessible OS trees. The trees must be compatible with the booted kernel. For example, you could install Fedora Core 2 as your base operating system and allows users to transparently use RedHat 7.3, RedHat 8, and SuSE 9.0. This allows users to select the distribution that works for them (or their collaboration). See the INSTALL file for notes on installing and deploying chos. Theory ------ In the end, CHOS is just doing a chroot into the OS tree. The kernel module is only needed to simply the framework and allow the framework to be used for multiple OS trees. For example, if you installed a system as follows... / (base OS - OS1) /OS-2 (second OS) /OS-3 (third OS) You could chroot into /OS-2 and it would function if everything was installed correctly. However, for it to fully work you would need some things to be available in the chroot tree. For example, /proc would have to be mounted under each tree (i.e. /OS-2/proc, /OS-3/proc). Also, if NFS mounts are used, they would need to be mounted under each tree. This makes it awkward to support more than a handful of OS trees. The kernel module provides a process dependent symbolic link. This link will resolve differently for different processes. Also, children processes automatically inherit the value of their parent. Using the kernel modules, you only need this... / (base OS - OS1) /chos /chos/proc /chos/ostrees/OS2 /chos/ostrees/OS3 The link, which is accessed through /proc/chos/link, points to the base of the OS. The rest of the chos directory contains the subdirectories that would normally be present in an OS (/bin, /sbin, /usr, etc), but they are all symlinks that traverse through the special link. So, /chos/bin would point to /proc/chos/link/bin, which could translate to /ostrees/OS2/bin for one user and /ostrees/OS3/bin for another user.