Hi Madhuri, I've posted your patch set, with some changes at:
https://github.com/clebergnu/autotest/tree/guest_kernel_9p The current version is working for me, but in case you want to change anything, now is the time. Let's work on that towards a final version! Thanks for the great work you've done! Cheers, CR. On 12/26/2011 09:31 AM, Madhuri Appana wrote: > 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): > ''' _______________________________________________ Autotest mailing list [email protected] http://test.kernel.org/cgi-bin/mailman/listinfo/autotest
