git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@1562 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
		
			
				
	
	
		
			110 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
| package xCAT::Yum;
 | |
| use DBI;
 | |
| use File::Find;
 | |
| use File::Spec;
 | |
| use File::Path;
 | |
| my $yumrepofile;
 | |
| my $distname;
 | |
| my $arch;
 | |
| my $installpfx;
 | |
| sub localize_yumrepo {
 | |
|    my $self = shift;
 | |
|    my $installroot = shift;
 | |
|    $distname = shift;
 | |
|    $arch = shift;
 | |
|    my $dosqlite = 0;
 | |
|   my $repomdfile;
 | |
|   my $primaryxml;
 | |
|   $installpfx = "$installroot/$distname/$arch";
 | |
|   mkpath("$installroot/postscripts/repos/$distname/$arch/");
 | |
|   open($yumrepofile,">","$installroot/postscripts/repos/$distname/$arch/local-repository.tmpl");
 | |
|   find(\&check_tofix,$installpfx);
 | |
|   close($yumrepofile);
 | |
| }
 | |
| sub check_tofix {
 | |
|    if (-d $File::Find::name and $File::Find::name =~ /\/repodata$/) {
 | |
|       fix_directory($File::Find::name);
 | |
|    }
 | |
| }
 | |
| sub fix_directory { 
 | |
|   my $dirlocation = shift;
 | |
|   my @dircomps = File::Spec->splitdir($dirlocation);
 | |
|   pop(@dircomps);
 | |
|   my $yumurl = File::Spec->catdir(@dircomps);
 | |
|   $yumurl =~ s!$installpfx!http://#INSTSERVER#/install/$distname/$arch/!;
 | |
|   my $reponame = $dircomps[$#dircomps];
 | |
|   print $yumrepofile "[local-$distname-$arch-$reponame]\n";
 | |
|   print $yumrepofile "name=xCAT configured yum repository for $distname/$arch/$reponame\n";
 | |
|   print $yumrepofile "baseurl=$yumurl\n";
 | |
|   print $yumrepofile "enabled=1\n";
 | |
|   print $yumrepofile "gpgcheck=0\n\n";
 | |
|   my $oldsha=`/usr/bin/sha1sum $dirlocation/primary.xml.gz`;
 | |
|   my $olddbsha; 
 | |
|   my @xmlines;
 | |
|   @xmlines = ();
 | |
|   $oldsha =~ s/\s.*//;
 | |
|   chomp($oldsha);
 | |
|   unlink("$dirlocation/primary.xml");
 | |
|   system("/bin/gunzip  $dirlocation/primary.xml.gz");
 | |
|   my $oldopensha=`/usr/bin/sha1sum $dirlocation/primary.xml`;
 | |
|   $oldopensha =~ s/\s+.*//;
 | |
|   chomp($oldopensha);
 | |
|   open($primaryxml,"+<$dirlocation/primary.xml");
 | |
|   while (<$primaryxml>) {
 | |
|      s!xml:base="media://[^"]*"!!g;
 | |
|      push @xmlines,$_;
 | |
|   }
 | |
|   seek($primaryxml,0,0);
 | |
|   print $primaryxml (@xmlines);
 | |
|   truncate($primaryxml,tell($primaryxml));
 | |
|   @xmlines=();
 | |
|   close($primaryxml);
 | |
|   my $newopensha=`/usr/bin/sha1sum $dirlocation/primary.xml`;
 | |
|   system("/bin/gzip $dirlocation/primary.xml");
 | |
|   my $newsha=`/usr/bin/sha1sum $dirlocation/primary.xml.gz`;
 | |
|   $newopensha =~ s/\s.*//;
 | |
|   $newsha =~ s/\s.*//;
 | |
|   chomp($newopensha);
 | |
|   chomp($newsha);
 | |
|   my  $newdbsha;
 | |
|   my $newdbopensha;
 | |
|   my $olddbopensha;
 | |
|   if (-r "$dirlocation/primary.sqlite.bz2") { 
 | |
|    $olddbsha =`/usr/bin/sha1sum $dirlocation/primary.sqlite.bz2`;
 | |
|    $olddbsha =~ s/\s.*//;
 | |
|    chomp($olddbsha);
 | |
|    unlink("$dirlocation/primary.sqlite");
 | |
|    system("/usr/bin/bunzip2  $dirlocation/primary.sqlite.bz2");
 | |
|    $olddbopensha=`/usr/bin/sha1sum $dirlocation/primary.sqlite`;
 | |
|    $olddbopensha =~ s/\s+.*//;
 | |
|    chomp($olddbopensha);
 | |
|    my $pdbh = DBI->connect("dbi:SQLite:$dirlocation/primary.sqlite","","",{AutoCommit=>1});
 | |
|    $pdbh->do('UPDATE "packages" SET "location_base" = NULL');
 | |
|    $pdbh->disconnect;
 | |
|    $newdbopensha=`/usr/bin/sha1sum $dirlocation/primary.sqlite`;
 | |
|    system("/usr/bin/bzip2 $dirlocation/primary.sqlite");
 | |
|    $newdbsha=`/usr/bin/sha1sum $dirlocation/primary.sqlite.bz2`;
 | |
|    $newdbopensha =~ s/\s.*//;
 | |
|    $newdbsha =~ s/\s.*//;
 | |
|    chomp($newdbopensha);
 | |
|    chomp($newdbsha);
 | |
|   }
 | |
|   open($primaryxml,"+<$dirlocation/repomd.xml");
 | |
|   while (<$primaryxml>) { 
 | |
|      s!xml:base="media://[^"]*"!!g;
 | |
|      s!$oldsha!$newsha!g;
 | |
|       s!$oldopensha!$newopensha!g;
 | |
|       if ($olddbsha) { s!$olddbsha!$newdbsha!g; }
 | |
|       if ($olddbsha) { s!$olddbopensha!$newdbopensha!g; }
 | |
|       push @xmlines,$_;
 | |
|   }
 | |
|   seek($primaryxml,0,0);
 | |
|   print $primaryxml (@xmlines);
 | |
|   truncate($primaryxml,tell($primaryxml));
 | |
|   close($primaryxml);
 | |
|   @xmlines=();
 | |
| }
 | |
| 
 | |
| 
 | |
| 1;
 |