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
/NotBackedUp/scratch 192.168.140.0/24(rw,no_root_squash)
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
make menuconfig/oldconfig/localmodconfig
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.