Changeset 142 in ProjectBuilder
- Timestamp:
- Sep 13, 2007, 10:16:54 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
devel/pb/bin/pb
r141 r142 122 122 pb_build2vm(); 123 123 } elsif ($action =~ /^launchvm$/) { 124 pb_launchvm(); 124 pb_launchvm($ENV{'PBVM'}); 125 } elsif ($action =~ /^script2vm$/) { 126 pb_script2vm($pbscript); 125 127 } elsif ($action =~ /^clean$/) { 126 128 } else { … … 372 374 my $cmt = shift; 373 375 my $vm = shift || undef; 376 my $vmexist = shift || 0; # 0 is FALSE 374 377 my $host = shift || "sshhost"; 375 378 my $login = shift || "sshlogin"; … … 406 409 if ($cmt eq "VMs") { 407 410 $src="$src $ENV{'PBDESTDIR'}/pbscript $ENV{'PBCONF'}/$ENV{'PBPROJ'}.pb $ENV{'PBDESTDIR'}/$pbprojver-$pbprojtag.pb $ENV{'PBETC'}"; 411 } elsif ($cmt eq "Script") { 412 $src="$src $ENV{'PBDESTDIR'}/pbscript"; 408 413 } elsif ($cmt eq "Packages") { 409 414 # Get package list from file made during build2pkg … … 432 437 my $tdir; 433 438 my $bdir; 434 if ( $cmt eq "Sources") {439 if (($cmt eq "Sources") || ($cmt eq "Script")) { 435 440 $tdir = "$sshdir->{$ENV{'PBPROJ'}}/src"; 436 441 } elsif ($cmt eq "VMs") { … … 468 473 print KEEP "$odir/$over/*\n"; 469 474 close(KEEP); 470 #pb_system("ssh -q -p $port $mac \"rm -rf dirname("$sshdir->{$ENV{'PBPROJ'}}"); sudo /usr/bin/poweroff\"","VM cleanup and halt on $mac"); 475 if (! $vmexist) { 476 pb_system("ssh -q -p $port $mac \"rm -rf $tdir; sudo /usr/bin/poweroff \"; sleep 120 ; if [-d /proc/$vmexist]; then kill $vmexist; fi ; sleep 10","VM cleanup and halt on $mac"); 477 } 471 478 pb_send2ssh("Packages","$odir"."_"."$over"); 472 479 pb_rm_rf("$ENV{'PBBUILDDIR'}/$odir"); … … 474 481 } 475 482 476 sub launchvm {477 my ($vm,$all) = pb_get_vm();483 sub pb_script2vm { 484 my $pbscript=shift; 478 485 479 486 # Prepare the script to be executed on the VM 480 487 # in $ENV{'PBDESTDIR'}/pbscript 481 copy($pbscript,"$ENV{'PBDESTDIR'}/pbscript") || die "Unable to create $ENV{'PBDESTDIR'}/pbscript"; 482 chmod 0755,"$ENV{'PBDESTDIR'}/pbscript"; 488 if ((defined $pbscript ) && ($pbscript ne "$ENV{'PBDESTDIR'}/pbscript")) { 489 copy($pbscript,"$ENV{'PBDESTDIR'}/pbscript") || die "Unable to create $ENV{'PBDESTDIR'}/pbscript"; 490 chmod 0755,"$ENV{'PBDESTDIR'}/pbscript"; 491 } 492 493 my ($vm,$all) = pb_get_vm(); 483 494 484 495 foreach my $v (@$vm) { 485 # Launch the VMs 486 my ($ptr,$vmopt,$vmport,$vmpath) = pb_conf_get("vmtype","vmopt","vmport","vmpath"); 487 my $vmtype = $ptr->{$ENV{'PBPROJ'}}; 488 if (defined $vmopt->{$ENV{'PBPROJ'}}) { 489 $ENV{'PBVMOPT'} = $vmopt->{$ENV{'PBPROJ'}}; 496 # Launch the VM 497 my $vmexist = pb_launchvm($v); 498 if (! $vmexist) { 499 pb_system("sleep 300","Waiting for it to come up"); 500 } 501 502 # Gather all required files to send them to the VM 503 # and launch the build thourgh pbscript 504 pb_send2ssh("Script","$v",$vmexist,"vmhost","vmlogin","pbrc","vmport"); 505 } 506 } 507 508 sub pb_launchvm { 509 my $vm = shift; 510 511 die "No VM defined, unable to launch" if (not defined $vm); 512 # Keep only the first VM in case many were given 513 $vm =~ s/,.*//; 514 515 # Launch the VMs 516 my ($ptr,$vmopt,$vmport,$vmpath) = pb_conf_get("vmtype","vmopt","vmport","vmpath"); 517 my $vmtype = $ptr->{$ENV{'PBPROJ'}}; 518 if (defined $vmopt->{$ENV{'PBPROJ'}}) { 519 $ENV{'PBVMOPT'} = $vmopt->{$ENV{'PBPROJ'}}; 520 } else { 521 $ENV{'PBVMOPT'} = ""; 522 } 523 524 my $cmd; 525 my $vmcmd; # has to be used for pb_check_ps 526 my $vmm; # has to be used for pb_check_ps 527 if ($vmtype eq "qemu") { 528 my $arch = `uname -m`; 529 chomp($arch); 530 my $qemucmd32; 531 my $qemucmd64; 532 if ($arch eq "x86_64") { 533 $qemucmd32 = "/usr/bin/qemu-system-i386"; 534 $qemucmd64 = "/usr/bin/qemu"; 490 535 } else { 491 $ENV{'PBVMOPT'} = ""; 492 } 493 494 my $cmd; 495 if ($vmtype eq "qemu") { 496 my $arch = `uname -m`; 497 chomp($arch); 498 my $qemucmd; 499 my $qemucmd32; 500 my $qemucmd64; 501 if ($arch eq "x86_64") { 502 $qemucmd32 = "/usr/bin/qemu-system-i386"; 503 $qemucmd64 = "/usr/bin/qemu"; 504 } else { 505 $qemucmd32 = "/usr/bin/qemu"; 506 $qemucmd64 = "/usr/bin/qemu-system-x86_64"; 507 } 508 if ($v =~ /_64/) { 509 $qemucmd = "$qemucmd64 -no-kqemu"; 510 } else { 511 $qemucmd = "$qemucmd32"; 512 } 513 if (! -f "$vmpath->{$ENV{'PBPROJ'}}/$v.qemu") { 514 print "Unable to find VM $vmpath->{$ENV{'PBPROJ'}}/$v.qemu"; 515 next; 516 } 517 $cmd = "$qemucmd $ENV{'PBVMOPT'} -redir tcp:$vmport->{$ENV{'PBPROJ'}}:10.0.2.15:22 $vmpath->{$ENV{'PBPROJ'}}/$v.qemu" 518 } elsif ($vmtype eq "xen") { 519 } elsif ($vmtype eq "vmware") { 536 $qemucmd32 = "/usr/bin/qemu"; 537 $qemucmd64 = "/usr/bin/qemu-system-x86_64"; 538 } 539 if ($vm =~ /_64/) { 540 $vmcmd = "$qemucmd64 -no-kqemu"; 520 541 } else { 521 die "VM of type $vmtype not supported. Report to the dev team"; 522 } 542 $vmcmd = "$qemucmd32"; 543 } 544 $vmm = "$vmpath->{$ENV{'PBPROJ'}}/$vm.qemu"; 545 if (! -f "$vmm") { 546 print "Unable to find VM $vmm"; 547 return; 548 } 549 $cmd = "$vmcmd $ENV{'PBVMOPT'} -redir tcp:$vmport->{$ENV{'PBPROJ'}}:10.0.2.15:22 $vmm" 550 } elsif ($vmtype eq "xen") { 551 } elsif ($vmtype eq "vmware") { 552 } else { 553 die "VM of type $vmtype not supported. Report to the dev team"; 554 } 555 my $vmexist = pb_check_ps($vmcmd,$vmm); 556 if (! $vmexist) { 523 557 pb_system("$cmd &","Launching the VM"); 524 pb_system("sleep 300","Waiting for it to come up"); 525 526 # Gather all required files to send them to the VM and launch the build thourgh pbscript 527 pb_send2ssh("VMs","$v","vmhost","vmlogin","pbrc","vmport"); 528 } 529 } 558 } 559 return($vmexist); 560 } 561 530 562 sub pb_build2vm { 531 my ($vm,$all) = pb_get_vm();532 533 563 # Prepare the script to be executed on the VM 534 564 # in $ENV{'PBDESTDIR'}/pbscript … … 553 583 chmod 0755,"$ENV{'PBDESTDIR'}/pbscript"; 554 584 585 my ($vm,$all) = pb_get_vm(); 586 555 587 # Send tar files when we do a global generation 556 588 pb_build2ssh() if ($all == 1); 557 589 558 590 foreach my $v (@$vm) { 559 # Launch the VMs 560 my ($ptr,$vmopt,$vmport,$vmpath) = pb_conf_get("vmtype","vmopt","vmport","vmpath"); 561 my $vmtype = $ptr->{$ENV{'PBPROJ'}}; 562 if (defined $vmopt->{$ENV{'PBPROJ'}}) { 563 $ENV{'PBVMOPT'} = $vmopt->{$ENV{'PBPROJ'}}; 564 } else { 565 $ENV{'PBVMOPT'} = ""; 566 } 567 568 my $cmd; 569 if ($vmtype eq "qemu") { 570 my $arch = `uname -m`; 571 chomp($arch); 572 my $qemucmd; 573 my $qemucmd32; 574 my $qemucmd64; 575 if ($arch eq "x86_64") { 576 $qemucmd32 = "/usr/bin/qemu-system-i386"; 577 $qemucmd64 = "/usr/bin/qemu"; 578 } else { 579 $qemucmd32 = "/usr/bin/qemu"; 580 $qemucmd64 = "/usr/bin/qemu-system-x86_64"; 581 } 582 if ($v =~ /_64/) { 583 $qemucmd = "$qemucmd64 -no-kqemu"; 584 } else { 585 $qemucmd = "$qemucmd32"; 586 } 587 if (! -f "$vmpath->{$ENV{'PBPROJ'}}/$v.qemu") { 588 print "Unable to find VM $vmpath->{$ENV{'PBPROJ'}}/$v.qemu"; 589 next; 590 } 591 $cmd = "$qemucmd $ENV{'PBVMOPT'} -redir tcp:$vmport->{$ENV{'PBPROJ'}}:10.0.2.15:22 $vmpath->{$ENV{'PBPROJ'}}/$v.qemu" 592 } elsif ($vmtype eq "xen") { 593 } elsif ($vmtype eq "vmware") { 594 } else { 595 die "VM of type $vmtype not supported. Report to the dev team"; 596 } 597 pb_system("$cmd &","Launching the VM"); 598 pb_system("sleep 300","Waiting for it to come up"); 599 600 # Gather all required files to send them to the VM and launch the build thourgh pbscript 601 pb_send2ssh("VMs","$v","vmhost","vmlogin","pbrc","vmport"); 591 # Launch the VM 592 my $vmexist = pb_launchvm($v); 593 if (! $vmexist) { 594 pb_system("sleep 300","Waiting for it to come up"); 595 } 596 597 # Gather all required files to send them to the VM 598 # and launch the build thourgh pbscript 599 pb_send2ssh("VMs","$v",$vmexist,"vmhost","vmlogin","pbrc","vmport"); 602 600 } 603 601 } … … 643 641 } 644 642 643 sub pb_check_ps { 644 my $vmcmd = shift; 645 my $vmm = shift; 646 my $vmexist = 0; # FALSE by default 647 648 open(PS, "ps auxhww|") || die "Unable to call ps"; 649 while (<PS>) { 650 next if (! /$vmcmd/); 651 next if (! /$vmm/); 652 my ($void1, $void2); 653 ($void1, $vmexist, $void2) = split(/ +/); 654 last; 655 } 656 return($vmexist); 657 } 658 659 645 660 sub pb_extract_build_files { 646 661 … … 675 690 print "-v : Verbose mode\n"; 676 691 print "\n"; 677 print "-m machine : Name of the Virtual Machines you want\n";678 print " to build on ( spaceseparated). All if none precised\n";692 print "-m machine : Name of the Virtual Machines (VM) you want\n"; 693 print " to build on (coma separated). All if none precised\n"; 679 694 print " (or use the env variable PBVM) \n"; 680 695 print "\n"; … … 703 718 print "\tcms2pkg: cms2build + build2pkg\n"; 704 719 print "\n"; 705 print "\tbuild2vm: Create packages in a Virtual Machine \n"; 706 print "\t adn send them to a SSH host once built\n"; 707 print "\t VM supported are QEMU \n"; 708 print "\n"; 709 print "\tlaunchvm: Launch a virtual machine and execute potentially\n"; 710 print "\t a script on it\n"; 720 print "\tbuild2vm: Create packages in VMs, launching them if needed\n"; 721 print "\t and send those packages to a SSH host once built\n"; 722 print "\t VM type supported are QEMU \n"; 723 print "\n"; 724 print "\tlaunchvm: Launch one virtual machine\n"; 725 print "\n"; 726 print "\tscript2vm: Launch one virtual machine if needed \n"; 727 print "\t and executes a script on it \n"; 711 728 print "\n"; 712 729 print "\tcms2vm: cms2build + build2vm\n";
Note:
See TracChangeset
for help on using the changeset viewer.