xcat-core/perl-xCAT-2.0/xCAT/Yum.pm

89 lines
2.7 KiB
Perl
Raw Normal View History

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;