89 lines
2.7 KiB
Perl
89 lines
2.7 KiB
Perl
|
package xCAT::Yum;
|
||
|
use DBI;
|
||
|
use File::Find;
|
||
|
sub localize_yumrepo {
|
||
|
my $self = shift;
|
||
|
my $installroot = shift;
|
||
|
my $distname = shift;
|
||
|
my $arch = shift;
|
||
|
my $dosqlite = 0;
|
||
|
my $repomdfile;
|
||
|
my $primaryxml;
|
||
|
my @xmlines;
|
||
|
my $dirlocation = "$installroot/$distname/$arch/";
|
||
|
find(\&check_tofix,$dirlocation);
|
||
|
}
|
||
|
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 $oldsha=`/usr/bin/sha1sum $dirlocation/primary.xml.gz`;
|
||
|
my $olddbsha;
|
||
|
$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);
|
||
|
}
|
||
|
|
||
|
|
||
|
1;
|