Changeset 310


Ignore:
Timestamp:
02/07/08 19:59:40 (5 years ago)
Author:
bruno
Message:
  • Fixes for CVS support: remove CVSROOT
  • prepare chroot support
  • fix for debian build in case a debian dir/link already exists in the project
  • only call qemu tools if using qemu as a VM :-)
Location:
devel/pb
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • devel/pb/bin/pb

    r309 r310  
    146146} elsif ($action =~ /^newver$/) { 
    147147    pb_newver(); 
     148} elsif ($action =~ /^newchroot$/) { 
     149    pb_launchchroot($ENV{'PBCHROOT'},1); 
    148150} elsif ($action =~ /^newvm$/) { 
    149151    pb_launchvm($ENV{'PBVM'},1); 
     
    428430 
    429431            chdir "$pbpkg-$pbver" || die "Unable to chdir to $pbpkg-$pbver"; 
     432            pb_rm_rf("debian"); 
    430433            symlink "pbconf/$ddir-$dver","debian" || die "Unable to symlink to pbconf/$ddir-$dver"; 
    431434            chmod 0755,"debian/rules"; 
     
    662665} 
    663666 
     667sub pb_launchchroot { 
     668    # Virtual env. 
     669    my $ve = shift; 
     670    my $create = shift || 0;        # By default do not create a chroot 
     671 
     672    #die "-i iso parameter needed" if (((not defined $iso) || ($iso eq "")) && ($create != 0)); 
     673    #die "No VM defined, unable to launch" if (not defined $ve); 
     674 
     675    # Keep only the first chroot in case many were given 
     676    $ve =~ s/,.*//; 
     677 
     678    # Launch the chroot 
     679    my ($ptr,$veopt,$veport,$vepath,$vetmout,$vesize) = pb_conf_get("vetype","veopt","veport","vepath","vetmout","vesize"); 
     680    my $vetype = $ptr->{$ENV{'PBPROJ'}}; 
     681    if (not defined $ENV{'PBCHROOTOPT'}) { 
     682        $ENV{'PBCHROOTOPT'} = ""; 
     683    } 
     684    if (defined $veopt->{$ENV{'PBPROJ'}}) { 
     685        $ENV{'PBVMOPT'} .= " $veopt->{$ENV{'PBPROJ'}}" if ($ENV{'PBVMOPT'} !~ / $veopt->{$ENV{'PBPROJ'}}/); 
     686    } 
     687    my $nport = $veport->{$ENV{'PBPROJ'}}; 
     688    $nport = "$pbport" if (defined $pbport); 
     689 
     690    my $cmd; 
     691    my $vecmd;      # has to be used for pb_check_ps 
     692    my $vem;        # has to be used for pb_check_ps 
     693    if ($vetype eq "qemu") { 
     694        my $arch = `uname -m`; 
     695        chomp($arch); 
     696        my $qemucmd32; 
     697        my $qemucmd64; 
     698        if ($arch eq "x86_64") { 
     699            $qemucmd32 = "/usr/bin/qemu-system-i386"; 
     700            $qemucmd64 = "/usr/bin/qemu"; 
     701        } else { 
     702            $qemucmd32 = "/usr/bin/qemu"; 
     703            $qemucmd64 = "/usr/bin/qemu-system-x86_64"; 
     704        } 
     705        if ($ve =~ /_64/) { 
     706            $vecmd = "$qemucmd64 -no-kqemu"; 
     707        } else { 
     708            $vecmd = "$qemucmd32"; 
     709        } 
     710        $vem = "$vepath->{$ENV{'PBPROJ'}}/$ve.qemu"; 
     711        if ($create != 0) { 
     712            $ENV{'PBVMOPT'} .= " -cdrom $iso -boot d"; 
     713        } 
     714        $cmd = "$vecmd $ENV{'PBVMOPT'} -redir tcp:$nport:10.0.2.15:22 $vem" 
     715    } elsif ($vetype eq "xen") { 
     716    } elsif ($vetype eq "vmware") { 
     717    } else { 
     718        die "VM of type $vetype not supported. Report to the dev team"; 
     719    } 
     720    my ($tmpcmd,$void) = split(/ +/,$cmd); 
     721    my $veexist = pb_check_ps($tmpcmd,$vem); 
     722    my $vepid = 0; 
     723    if (! $veexist) { 
     724        if ($create != 0) { 
     725            pb_system("/usr/bin/qemu-img create -f qcow2 $vem $vesize->{$ENV{'PBPROJ'}}","Creating the QEMU VM"); 
     726        } 
     727        if (! -f "$vem") { 
     728            print "Unable to find VM $vem\n"; 
     729        } else { 
     730            pb_system("$cmd &","Launching the VM $vem"); 
     731            pb_system("sleep $vetmout->{$ENV{'PBPROJ'}}","Waiting for VM $ve to come up"); 
     732            $vepid = pb_check_ps($tmpcmd,$vem); 
     733        } 
     734    } else { 
     735        print "Found an existing VM $vem (pid $veexist)\n"; 
     736    } 
     737    return($veexist,$vepid); 
     738} 
     739 
    664740sub pb_launchvm { 
    665741    my $vm = shift; 
     
    718794    if (! $vmexist) { 
    719795        if ($create != 0) { 
    720             pb_system("/usr/bin/qemu-img create -f qcow2 $vmm $vmsize->{$ENV{'PBPROJ'}}","Creating the QEMU VM"); 
     796            if (($vmtype eq "qemu") || ($vmtype eq "xen")) { 
     797                pb_system("/usr/bin/qemu-img create -f qcow2 $vmm $vmsize->{$ENV{'PBPROJ'}}","Creating the QEMU VM"); 
     798            } elsif ($vmtype eq "vmware") { 
     799            } else { 
     800            } 
    721801        } 
    722802        if (! -f "$vmm") { 
     
    907987    print "Syntax: pb [-vhqt][-r pbroot][-p project][[-s script -a account -P port] -m \"mach-1[,...]\"][-i iso] <action> [<pkg1>...]\n"; 
    908988    print "\n"; 
    909     print "-h : This help file\n"; 
    910     print "-q : Quiet mode\n"; 
    911     print "-t : Test mode (not done yet)\n"; 
    912     print "-v : Verbose mode\n"; 
    913     print "\n"; 
    914     print "-m machine : Name of the Virtual Machines (VM) you want\n"; 
    915     print "             to build on (coma separated). All if none precised\n"; 
    916     print "             (or use the env variable PBVM)       \n"; 
    917     print "\n"; 
    918     print "-s script  : Name of the script you want\n"; 
    919     print "             to execute on the related VMs.\n"; 
    920     print "\n"; 
    921     print "-i iso     : Name of the ISO image of the distribution you want\n"; 
    922     print "             to install on the related VMs.\n"; 
    923     print "\n"; 
    924     print "-a account : Name of the account to use\n"; 
    925     print "             to connect on the related VMs.\n"; 
    926     print "\n"; 
    927     print "-P port    : Number of the port to use\n"; 
    928     print "             to connect on the related VMs.\n"; 
    929     print "\n"; 
    930     print "-p project : Name of the project you're working on\n"; 
    931     print "             (or use the env variable PBPROJ)     \n"; 
    932     print "\n"; 
    933     print "-r pbroot  : Path Name of project under the CMS \n"; 
    934     print "             (or use the env variable PBROOT)   \n"; 
    935     print "\n"; 
    936     print "-V newver  : New version of the project to create\n"; 
    937     print "             from the current one.              \n"; 
     989    print "-h: This help file\n"; 
     990    print "-q: Quiet mode\n"; 
     991    print "-t: Test mode (not done yet)\n"; 
     992    print "-v: Verbose mode\n"; 
     993    print "\n"; 
     994    print "-m machine: Name of the Virtual Machines (VM) you want\n"; 
     995    print "            to build on (coma separated). All if none precised\n"; 
     996    print "            (or use the env variable PBVM)       \n"; 
     997    print "\n"; 
     998    print "-s script: Name of the script you want\n"; 
     999    print "            to execute on the related VMs.\n"; 
     1000    print "\n"; 
     1001    print "-i iso:    Name of the ISO image of the distribution you want\n"; 
     1002    print "            to install on the related VMs.\n"; 
     1003    print "\n"; 
     1004    print "-a account: Name of the account to use\n"; 
     1005    print "            to connect on the related VMs.\n"; 
     1006    print "\n"; 
     1007    print "-P port:    Number of the port to use\n"; 
     1008    print "            to connect on the related VMs.\n"; 
     1009    print "\n"; 
     1010    print "-p project: Name of the project you're working on\n"; 
     1011    print "            (or use the env variable PBPROJ)     \n"; 
     1012    print "\n"; 
     1013    print "-r pbroot: Path Name of project under the CMS \n"; 
     1014    print "            (or use the env variable PBROOT)   \n"; 
     1015    print "\n"; 
     1016    print "-V newver: New version of the project to create\n"; 
     1017    print "            from the current one.              \n"; 
    9381018    print "\n"; 
    9391019    print "<action> can be:\n"; 
    9401020    print "\n"; 
    941     print "\tcms2build: Create tar files for the project under your CMS\n"; 
    942     print "\t           CMS supported are SVN and CVS\n"; 
    943     print "\t           parameters are packages to build\n"; 
    944     print "\t           if not using default list\n"; 
    945     print "\n"; 
    946     print "\tbuild2pkg: Create packages for your running distribution  \n"; 
    947     print "\n"; 
    948     print "\tcms2pkg:   cms2build + build2pkg\n"; 
    949     print "\n"; 
    950     print "\tbuild2ssh: Send the tar files to a SSH host               \n"; 
    951     print "\n"; 
    952     print "\tcms2ssh:   cms2build + build2ssh\n"; 
    953     print "\n"; 
    954     print "\tpkg2ssh:   Send the packages built to a SSH host          \n"; 
    955     print "\n"; 
    956     print "\tbuild2vm:  Create packages in VMs, launching them if needed\n"; 
    957     print "\t           and send those packages to a SSH host once built\n"; 
    958     print "\t           VM type supported are QEMU            \n"; 
    959     print "\n"; 
    960     print "\tcms2vm:    cms2build + build2vm\n"; 
    961     print "\n"; 
    962     print "\tlaunchvm:  Launch one virtual machine\n"; 
    963     print "\n"; 
    964     print "\tscript2vm: Launch one virtual machine if needed        \n"; 
    965     print "\t           and executes a script on it                 \n"; 
    966     print "\n"; 
    967     print "\tnewvm:     Create a new virtual machine\n"; 
    968     print "\n"; 
    969     print "\tnewver:    Create a new version of the project derived \n"; 
    970     print "\t           from the current one                        \n"; 
    971     print "\n"; 
    972     print "\tnewproj:   Create a new project and a template set of  \n"; 
    973     print "\t           configuration files under pbconf            \n"; 
    974     print "\n"; 
    975 } 
     1021    print "\tcms2build:    Create tar files for the project under your CMS\n"; 
     1022    print "\t              CMS supported are SVN and CVS\n"; 
     1023    print "\t              parameters are packages to build\n"; 
     1024    print "\t              if not using default list\n"; 
     1025    print "\n"; 
     1026    print "\tbuild2pkg:    Create packages for your running distribution  \n"; 
     1027    print "\n"; 
     1028    print "\tcms2pkg:      cms2build + build2pkg\n"; 
     1029    print "\n"; 
     1030    print "\tbuild2ssh:    Send the tar files to a SSH host               \n"; 
     1031    print "\n"; 
     1032    print "\tcms2ssh:      cms2build + build2ssh\n"; 
     1033    print "\n"; 
     1034    print "\tpkg2ssh:      Send the packages built to a SSH host          \n"; 
     1035    print "\n"; 
     1036    print "\tbuild2vm:     Create packages in VMs, launching them if needed\n"; 
     1037    print "\t              and send those packages to a SSH host once built\n"; 
     1038    print "\t              VM type supported are QEMU            \n"; 
     1039    print "\n"; 
     1040    print "\tbuild2chroot: Create packages in a chroot, creating it if needed\n"; 
     1041    print "\t              and send those packages to a SSH host once built\n"; 
     1042    print "\n"; 
     1043    print "\tcms2vm:       cms2build + build2vm\n"; 
     1044    print "\n"; 
     1045    print "\tlaunchvm:     Launch one virtual machine\n"; 
     1046    print "\n"; 
     1047    print "\tscript2vm:    Launch one virtual machine if needed        \n"; 
     1048    print "\t              and executes a script on it                 \n"; 
     1049    print "\n"; 
     1050    print "\tnewvm:        Create a new virtual machine\n"; 
     1051    print "\n"; 
     1052    print "\tnewchroot:    Create a new chroot environment\n"; 
     1053    print "\n"; 
     1054    print "\tnewver:       Create a new version of the project derived \n"; 
     1055    print "\t              from the current one                        \n"; 
     1056    print "\n"; 
     1057    print "\tnewproj:      Create a new project and a template set of  \n"; 
     1058    print "\t              configuration files under pbconf            \n"; 
     1059    print "\n"; 
     1060} 
  • devel/pb/lib/ProjectBuilder/Base.pm

    r300 r310  
    809809    # Export content if needed 
    810810    # 
    811     my ($cvsroot,$cvsrsh) = pb_conf_get("cvsroot","cvsrsh"); 
    812     $ENV{'CVSROOT'} = $cvsroot->{$proj} if (defined $cvsroot->{$proj}); 
     811    my ($cvsrsh) = pb_conf_get("cvsrsh"); 
    813812    $ENV{'CVS_RSH'} = $cvsrsh->{$proj} if (defined $cvsrsh->{$proj}); 
    814813} else { 
     
    852851    } 
    853852    # CVS needs a relative path ! 
    854     pb_system("cd $dir ; cvs export -D \"$pbdate\" -d $base $tmp1","Exporting $source from CVS to $destdir"); 
     853    my ($cvsroot) = pb_conf_get("cvsroot"); 
     854    pb_system("cd $dir ; cvs -d $cvsroot->{$ENV{'PBPROJ'}} export -D \"$pbdate\" -d $base $tmp1","Exporting $source from CVS to $destdir"); 
    855855} else { 
    856856    die "cms $cms->{$ENV{'PBPROJ'}} unknown"; 
Note: See TracChangeset for help on using the changeset viewer.