From: Madhuri Appana <[email protected]>
Signed-off-by: Madhuri Appana <[email protected]> --- client/tests/kvm/build.cfg.sample | 9 ++++ client/virt/base_installer.py | 9 ++++ client/virt/installer.py | 5 ++ client/virt/kvm_installer.py | 8 +++- client/virt/virt_utils.py | 95 +++++++++++++++++++++++++++++++++++++ 5 files changed, 125 insertions(+), 1 deletions(-) diff --git a/client/tests/kvm/build.cfg.sample b/client/tests/kvm/build.cfg.sample index 6e3d134..fd5217d 100644 --- a/client/tests/kvm/build.cfg.sample +++ b/client/tests/kvm/build.cfg.sample @@ -1,5 +1,6 @@ # Copy this file to build.cfg and edit it. +include config.cfg vm_type = kvm variants: @@ -23,6 +24,14 @@ variants: # QEMU installation from a local source directory # local_src_qemu_path = /tmp/qemu-0.15.1 + # Guest Kernel installation from a GIT repo + git_repo_guest_kernel_uri = git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git + git_repo_guest_kernel_branch = master + #git_repo_guest_kernel_patches = ['http://foo/bar.patch', 'http://foo/baz.patch'] + guest_kernel_config = http://foo/bar/kernel-config + guest_kernel_build_target = bzImage + guest_kernel_build_image = arch/x86/boot/bzImage + # QEMU installation from a GIT repo git_repo_qemu_uri = git://git.qemu.org/qemu.git git_repo_qemu_configure_options = --target-list=x86_64-softmmu --enable-spice diff --git a/client/virt/base_installer.py b/client/virt/base_installer.py index a414fde..94c2a4e 100644 --- a/client/virt/base_installer.py +++ b/client/virt/base_installer.py @@ -687,6 +687,15 @@ class GitRepoInstaller(BaseLocalSourceInstaller): self._set_build_helper() +class GitRepoKernelInstaller(BaseLocalSourceInstaller): + def set_install_params(self, test, params): + super(GitRepoKernelInstaller, self).set_install_params(test, params) + + self.content_helper = virt_utils.GitRepoParamHelper(params, self.name, + self.source_destination) + self.build_helper = virt_utils.LinuxKernelBuildHelper(params, self.name, + self.source_destination) + class FailedInstaller: """ Class used to be returned instead of the installer if a installation fails diff --git a/client/virt/installer.py b/client/virt/installer.py index 4e96853..b3f2b2e 100644 --- a/client/virt/installer.py +++ b/client/virt/installer.py @@ -103,6 +103,8 @@ INSTALLER_REGISTRY.register('koji', base_installer.KojiInstaller) INSTALLER_REGISTRY.register('git_repo', base_installer.GitRepoInstaller) +INSTALLER_REGISTRY.register('git_kernel', + base_installer.GitRepoKernelInstaller) INSTALLER_REGISTRY.register('local_src', base_installer.LocalSourceDirInstaller) INSTALLER_REGISTRY.register('local_tar', @@ -122,6 +124,9 @@ INSTALLER_REGISTRY.register('koji', INSTALLER_REGISTRY.register('git_repo', kvm_installer.GitRepoInstaller, 'kvm') +INSTALLER_REGISTRY.register('git_kernel', + kvm_installer.GitRepoKernelInstaller, + 'kvm') INSTALLER_REGISTRY.register('local_src', kvm_installer.LocalSourceDirInstaller, 'kvm') diff --git a/client/virt/kvm_installer.py b/client/virt/kvm_installer.py index c4002bc..f8b49d8 100644 --- a/client/virt/kvm_installer.py +++ b/client/virt/kvm_installer.py @@ -10,7 +10,7 @@ from autotest_lib.client.common_lib import error from autotest_lib.client.virt import base_installer -__all__ = ['GitRepoInstaller', 'LocalSourceDirInstaller', +__all__ = ['GitRepoInstaller', 'GitRepoKernelInstaller', 'LocalSourceDirInstaller', 'LocalSourceTarInstaller', 'RemoteSourceTarInstaller'] @@ -215,6 +215,12 @@ class GitRepoInstaller(KVMBaseInstaller, ''' pass +class GitRepoKernelInstaller(KVMBaseInstaller, + base_installer.GitRepoKernelInstaller): + ''' + Installer that deals with source code on Git repositories + ''' + pass class LocalSourceDirInstaller(KVMBaseInstaller, base_installer.LocalSourceDirInstaller): diff --git a/client/virt/virt_utils.py b/client/virt/virt_utils.py index 1b90d0f..952a559 100644 --- a/client/virt/virt_utils.py +++ b/client/virt/virt_utils.py @@ -3055,6 +3055,101 @@ class GnuSourceBuildHelper(object): self.configure() self.make() +class LinuxKernelBuildHelper(object): + ''' + Handles Building Linux Kernel. + + ''' + def __init__(self, params, name, source): + ''' + @type source: string + @param source: source directory or tarball + @type prefix: string + @param prefix: installation prefix + @throws: GnuSourceBuildInvalidSource + ''' + self.params = params + self.name = name + self.source = source + self._parse_params() + + def _parse_params(self): + ''' + Parses the params items for entries related to guest kernel + + ''' + configure_opt_key = '%s_config' % self.name + self.config = self.params.get(configure_opt_key, '') + + build_image_key = '%s_build_image' % self.name + self.build_image = self.params.get(build_image_key, 'arch/x86/boot/bzImage') + + build_target_key = '%s_build_target' % self.name + self.build_target = self.params.get(build_target_key, 'bzImage') + + kernel_path_key = '%s_kernel_path' % self.name + self.kernel_path = self.params.get(kernel_path_key, '/tmp/kvm_autotest_root/images/' + self.build_target) + + logging.info('Parsing Linux kernel build parameters for %s' % self.name) + + + def make_guest_kernel(self): + ''' + Runs "make", using a single job + ''' + os.chdir(self.source) + logging.info("Building guest kernel") + logging.debug("Kernel config is %s" % self.config) + utils.get_file(self.config, '.config') + + # FIXME currently no support for builddir + # run old config + utils.system('yes "" | make oldconfig > /dev/null') + parallel_make_jobs = utils.count_cpus() + make_command = "make -j %s %s" % (parallel_make_jobs, self.build_target) + logging.info("Running parallel make on src dir") + utils.system(make_command) + + def make_clean(self): + ''' + Runs "make clean" + ''' + os.chdir(self.source) + utils.system("make clean") + + + def make(self, failure_feedback=True): + ''' + Runs a parallel make + + @param failure_feedback: return information on build failure by raising + the appropriate exceptions + @raise: GnuSourceBuildParallelFailed if parallel build fails, or + ''' + try: + self.make_clean() + self.make_guest_kernel() + except error.CmdError: + if failure_feedback: + raise GnuSourceBuildParallelFailed + + def cp_linux_kernel(self): + ''' + Copying Linux kernel to target path + ''' + os.chdir(self.source) + utils.force_copy(self.build_image, self.kernel_path) + + + install = cp_linux_kernel + + + def execute(self): + ''' + Runs appropriate steps for *building* this source code tree + ''' + self.make() + class GnuSourceBuildParamHelper(GnuSourceBuildHelper): ''' -- 1.7.6.4 _______________________________________________ Autotest mailing list [email protected] http://test.kernel.org/cgi-bin/mailman/listinfo/autotest
