| OLD | NEW |
| 1 import os, logging, datetime, glob | 1 import os, logging, datetime, glob |
| 2 import shutil | 2 import shutil |
| 3 from autotest_lib.client.bin import utils, os_dep | 3 from autotest_lib.client.bin import utils, os_dep |
| 4 from autotest_lib.client.common_lib import error | 4 from autotest_lib.client.common_lib import error |
| 5 import kvm_utils | 5 import kvm_utils |
| 6 | 6 |
| 7 | 7 |
| 8 def check_configure_options(script_path): | 8 def check_configure_options(script_path): |
| 9 """ | 9 """ |
| 10 Return the list of available options (flags) of a given kvm configure build | 10 Return the list of available options (flags) of a given kvm configure build |
| (...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 385 bin_list=self.qemu_bin_paths, | 385 bin_list=self.qemu_bin_paths, |
| 386 unittest=self.unittest_prefix) | 386 unittest=self.unittest_prefix) |
| 387 self.reload_modules_if_needed() | 387 self.reload_modules_if_needed() |
| 388 if self.save_results: | 388 if self.save_results: |
| 389 save_build(self.srcdir, self.results_dir) | 389 save_build(self.srcdir, self.results_dir) |
| 390 | 390 |
| 391 | 391 |
| 392 class KojiInstaller(YumInstaller): | 392 class KojiInstaller(YumInstaller): |
| 393 """ | 393 """ |
| 394 Class that handles installing KVM from the fedora build service, koji. | 394 Class that handles installing KVM from the fedora build service, koji. |
| 395 It uses yum to install and remove packages. | 395 |
| 396 It uses yum to install and remove packages. Packages are specified |
| 397 according to the syntax defined in the PkgSpec class. |
| 396 """ | 398 """ |
| 397 load_stock_modules = True | 399 load_stock_modules = True |
| 398 def set_install_params(self, test, params): | 400 def set_install_params(self, test, params): |
| 399 """ | 401 """ |
| 400 Gets parameters and initializes the package downloader. | 402 Gets parameters and initializes the package downloader. |
| 401 | 403 |
| 402 @param test: kvm test object | 404 @param test: kvm test object |
| 403 @param params: Dictionary with test arguments | 405 @param params: Dictionary with test arguments |
| 404 """ | 406 """ |
| 405 super(KojiInstaller, self).set_install_params(test, params) | 407 super(KojiInstaller, self).set_install_params(test, params) |
| 406 default_koji_cmd = '/usr/bin/koji' | |
| 407 default_src_pkg = 'qemu' | |
| 408 self.src_pkg = params.get("src_pkg", default_src_pkg) | |
| 409 self.tag = params.get("koji_tag", None) | 408 self.tag = params.get("koji_tag", None) |
| 410 self.build = params.get("koji_build", None) | 409 self.koji_cmd = params.get("koji_cmd", None) |
| 411 self.koji_cmd = params.get("koji_cmd", default_koji_cmd) | 410 if self.tag is not None: |
| 411 kvm_utils.set_default_koji_tag(self.tag) |
| 412 self.koji_pkgs = eval(params.get("koji_pkgs", "[]")) |
| 412 | 413 |
| 413 | 414 |
| 414 def _get_packages(self): | 415 def _get_packages(self): |
| 415 """ | 416 """ |
| 416 Downloads the specific arch RPMs for the specific build name. | 417 Downloads the specific arch RPMs for the specific build name. |
| 417 """ | 418 """ |
| 418 downloader = kvm_utils.KojiDownloader(cmd=self.koji_cmd) | 419 koji_client = kvm_utils.KojiClient(cmd=self.koji_cmd) |
| 419 downloader.get(src_package=self.src_pkg, tag=self.tag, | 420 for pkg_text in self.koji_pkgs: |
| 420 build=self.build, dst_dir=self.srcdir) | 421 pkg = kvm_utils.KojiPkgSpec(pkg_text) |
| 422 if pkg.is_valid(): |
| 423 koji_client.get_pkgs(pkg, dst_dir=self.srcdir) |
| 424 else: |
| 425 logging.error('Package specification (%s) is invalid: %s', pkg, |
| 426 pkg.describe_invalid()) |
| 427 |
| 428 |
| 429 def _clean_previous_installs(self): |
| 430 kill_qemu_processes() |
| 431 removable_packages = " ".join(self._get_rpm_names()) |
| 432 utils.system("yum -y remove %s" % removable_packages) |
| 421 | 433 |
| 422 | 434 |
| 423 def install(self): | 435 def install(self): |
| 424 super(KojiInstaller, self)._clean_previous_installs() | 436 self._clean_previous_installs() |
| 425 self._get_packages() | 437 self._get_packages() |
| 426 super(KojiInstaller, self)._install_packages() | 438 self._install_packages() |
| 427 self.install_unittests() | 439 self.install_unittests() |
| 428 create_symlinks(test_bindir=self.test_bindir, | 440 create_symlinks(test_bindir=self.test_bindir, |
| 429 bin_list=self.qemu_bin_paths, | 441 bin_list=self.qemu_bin_paths, |
| 430 unittest=self.unittest_prefix) | 442 unittest=self.unittest_prefix) |
| 431 self.reload_modules_if_needed() | 443 self.reload_modules_if_needed() |
| 432 if self.save_results: | 444 if self.save_results: |
| 433 save_build(self.srcdir, self.results_dir) | 445 save_build(self.srcdir, self.results_dir) |
| 434 | 446 |
| 435 | 447 |
| 448 def _get_rpm_names(self): |
| 449 all_rpm_names = [] |
| 450 koji_client = kvm_utils.KojiClient(cmd=self.koji_cmd) |
| 451 for pkg_text in self.koji_pkgs: |
| 452 pkg = kvm_utils.KojiPkgSpec(pkg_text) |
| 453 rpm_names = koji_client.get_pkg_rpm_names(pkg) |
| 454 all_rpm_names += rpm_names |
| 455 return all_rpm_names |
| 456 |
| 457 |
| 458 def _get_rpm_file_names(self): |
| 459 all_rpm_file_names = [] |
| 460 koji_client = kvm_utils.KojiClient(cmd=self.koji_cmd) |
| 461 for pkg_text in self.koji_pkgs: |
| 462 pkg = kvm_utils.KojiPkgSpec(pkg_text) |
| 463 rpm_file_names = koji_client.get_pkg_rpm_file_names(pkg) |
| 464 all_rpm_file_names += rpm_file_names |
| 465 return all_rpm_file_names |
| 466 |
| 467 |
| 468 def _install_packages(self): |
| 469 """ |
| 470 Install all downloaded packages. |
| 471 """ |
| 472 os.chdir(self.srcdir) |
| 473 rpm_file_names = " ".join(self._get_rpm_file_names()) |
| 474 utils.system("yum --nogpgcheck -y localinstall %s" % rpm_file_names) |
| 475 |
| 476 |
| 436 class SourceDirInstaller(BaseInstaller): | 477 class SourceDirInstaller(BaseInstaller): |
| 437 """ | 478 """ |
| 438 Class that handles building/installing KVM directly from a tarball or | 479 Class that handles building/installing KVM directly from a tarball or |
| 439 a single source code dir. | 480 a single source code dir. |
| 440 """ | 481 """ |
| 441 def set_install_params(self, test, params): | 482 def set_install_params(self, test, params): |
| 442 """ | 483 """ |
| 443 Initializes class attributes, and retrieves KVM code. | 484 Initializes class attributes, and retrieves KVM code. |
| 444 | 485 |
| 445 @param test: kvm test object | 486 @param test: kvm test object |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 632 userspace_srcdir = os.path.join(self.srcdir, "kvm_userspace") | 673 userspace_srcdir = os.path.join(self.srcdir, "kvm_userspace") |
| 633 kvm_utils.get_git_branch(user_repo, user_branch, userspace_srcdir, | 674 kvm_utils.get_git_branch(user_repo, user_branch, userspace_srcdir, |
| 634 user_commit, user_lbranch) | 675 user_commit, user_lbranch) |
| 635 self.userspace_srcdir = userspace_srcdir | 676 self.userspace_srcdir = userspace_srcdir |
| 636 | 677 |
| 637 if user_patches: | 678 if user_patches: |
| 638 os.chdir(self.userspace_srcdir) | 679 os.chdir(self.userspace_srcdir) |
| 639 for patch in user_patches: | 680 for patch in user_patches: |
| 640 utils.get_file(patch, os.path.join(self.userspace_srcdir, | 681 utils.get_file(patch, os.path.join(self.userspace_srcdir, |
| 641 os.path.basename(patch))) | 682 os.path.basename(patch))) |
| 642 utils.system('patch -p1 %s' % os.path.basename(patch)) | 683 utils.system('patch -p1 < %s' % os.path.basename(patch)) |
| 643 | 684 |
| 644 if kernel_repo: | 685 if kernel_repo: |
| 645 kernel_srcdir = os.path.join(self.srcdir, "kvm") | 686 kernel_srcdir = os.path.join(self.srcdir, "kvm") |
| 646 kvm_utils.get_git_branch(kernel_repo, kernel_branch, kernel_srcdir, | 687 kvm_utils.get_git_branch(kernel_repo, kernel_branch, kernel_srcdir, |
| 647 kernel_commit, kernel_lbranch) | 688 kernel_commit, kernel_lbranch) |
| 648 self.kernel_srcdir = kernel_srcdir | 689 self.kernel_srcdir = kernel_srcdir |
| 649 if kernel_patches: | 690 if kernel_patches: |
| 650 os.chdir(self.kernel_srcdir) | 691 os.chdir(self.kernel_srcdir) |
| 651 for patch in kernel_patches: | 692 for patch in kernel_patches: |
| 652 utils.get_file(patch, os.path.join(self.userspace_srcdir, | 693 utils.get_file(patch, os.path.join(self.userspace_srcdir, |
| 653 os.path.basename(patch))) | 694 os.path.basename(patch))) |
| 654 utils.system('patch -p1 %s' % os.path.basename(patch)) | 695 utils.system('patch -p1 < %s' % os.path.basename(patch)) |
| 655 else: | 696 else: |
| 656 self.kernel_srcdir = None | 697 self.kernel_srcdir = None |
| 657 | 698 |
| 658 if kmod_repo: | 699 if kmod_repo: |
| 659 kmod_srcdir = os.path.join (self.srcdir, "kvm_kmod") | 700 kmod_srcdir = os.path.join (self.srcdir, "kvm_kmod") |
| 660 kvm_utils.get_git_branch(kmod_repo, kmod_branch, kmod_srcdir, | 701 kvm_utils.get_git_branch(kmod_repo, kmod_branch, kmod_srcdir, |
| 661 kmod_commit, kmod_lbranch) | 702 kmod_commit, kmod_lbranch) |
| 662 self.kmod_srcdir = kmod_srcdir | 703 self.kmod_srcdir = kmod_srcdir |
| 663 if kmod_patches: | 704 if kmod_patches: |
| 664 os.chdir(self.kmod_srcdir) | 705 os.chdir(self.kmod_srcdir) |
| 665 for patch in kmod_patches: | 706 for patch in kmod_patches: |
| 666 utils.get_file(patch, os.path.join(self.userspace_srcdir, | 707 utils.get_file(patch, os.path.join(self.userspace_srcdir, |
| 667 os.path.basename(patch))) | 708 os.path.basename(patch))) |
| 668 utils.system('patch -p1 %s' % os.path.basename(patch)) | 709 utils.system('patch -p1 < %s' % os.path.basename(patch)) |
| 669 else: | 710 else: |
| 670 self.kmod_srcdir = None | 711 self.kmod_srcdir = None |
| 671 | 712 |
| 672 configure_script = os.path.join(self.userspace_srcdir, 'configure') | 713 configure_script = os.path.join(self.userspace_srcdir, 'configure') |
| 673 self.configure_options = check_configure_options(configure_script) | 714 self.configure_options = check_configure_options(configure_script) |
| 674 | 715 |
| 675 | 716 |
| 676 def _build(self): | 717 def _build(self): |
| 677 make_jobs = utils.count_cpus() | 718 make_jobs = utils.count_cpus() |
| 678 cfg = './configure' | 719 cfg = './configure' |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 788 return c | 829 return c |
| 789 | 830 |
| 790 | 831 |
| 791 def make_installer(params): | 832 def make_installer(params): |
| 792 # priority: | 833 # priority: |
| 793 # - 'install_mode' param | 834 # - 'install_mode' param |
| 794 # - 'mode' param | 835 # - 'mode' param |
| 795 mode = params.get("install_mode", params.get("mode")) | 836 mode = params.get("install_mode", params.get("mode")) |
| 796 klass = _installer_class(mode) | 837 klass = _installer_class(mode) |
| 797 return klass(mode) | 838 return klass(mode) |
| OLD | NEW |