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 |