I have a RHEL 6 based server grade machine which hosts vms belonging to RHEL 6, RHEL 7 and Fedora rawhide. In some instances, I need to be able to compile kernels based on the git tree for a certain guest machine. Trying to do this on a vm usually means I need to export the git tree over NFS and given the resources the vm has, takes a long time. The idea is to compile kernels on the more capable host machine and simply run "make install modules_install" on the guest system.
I export the filesystem containing the git trees using NFS
# cat /etc/exports
To setup mock,
1) Install mock.
# yum install -y mock
2) Set the epel7 environment as the default environment.
cd /etc/mock; ln -s epel-7-kernel-x86_64.cfg default.cfg
3) Edit epel-7-kernel-x86_64.cfg and add the lines below.
Since the environment is intended to build kernels, install the required dependencies along with some other tools.
config_opts['install'] ='elfutils dwarves rpm-build flex bison inotify-tools bc openssl openssl-devel openssh-clients rsync'Allow bind mounts. Mount the local directory /NotBackedUp/scratch to /scratch in the mock environment
config_opts['plugin_conf']['bind_mount_enable'] = True
config_opts['plugin_conf']['bind_mount_opts']['dirs'].append(('/NotBackedUp/scratch', '/scratch' ))
4) Add user and group mock
5) Switch over to user mock and initialise the mock environment using the command
$ mock --init
6) Switch over to the mock shell
$ mock shell
At this point, we are in a chroot shell as a root user in the mock EPEL 7 environment. The directory containing the git tree is available at the directory specified in the mock configuration file. In my case, this is /scratch.
7) On the guest machine, make sure you mount the exported NFS share and run
to setup the .config file.
8) Switch back over to the mock environment on the host machine and run
make; make modules
to build the kernel and the modules.
9) Once the build is done, on the guest vm, go back to the git tree and run
make install modules_install
to install the newly built kernel.
10) Setup grub on the guest machine and reboot into the new kernel.