X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;ds=sidebyside;f=lbs-util;fp=lbs-util;h=37f5e9fd8bf23052914d5f7fbaa4aa33dc9101dc;hb=d5c4e1bb88d87664740e0bb4f1d313b0ce4c4043;hp=0000000000000000000000000000000000000000;hpb=d3519c88bf18df470a2cc35286448181e1544cbb;p=cumulus.git diff --git a/lbs-util b/lbs-util new file mode 100755 index 0000000..37f5e9f --- /dev/null +++ b/lbs-util @@ -0,0 +1,52 @@ +#!/usr/bin/perl -w +# +# lbs-util: Tool for managing LBS archives. +# +# Usage: lbs-util +# +# Available commands: +# --list-snapshots +# --list-segments + +use strict; +use LBS qw(parse_headers); + +die "Too few arguments!\n" unless scalar(@ARGV) >= 2; +die "Must specify a repository!\n" unless -d $ARGV[0]; + +my $store = new LBS::Store $ARGV[0]; +my $cmd = $ARGV[1]; +my @args = @ARGV[2 .. $#ARGV]; + +if ($cmd eq "--list-snapshots") { + foreach ($store->list_snapshots()) { + print $_, "\n"; + } +} elsif ($cmd eq "--list-segments") { + foreach ($store->list_segments()) { + print $_, "\n"; + } +} elsif ($cmd eq "--verify-snapshot") { + my $snapshot = $store->load_snapshot($args[0]); + my %info = parse_headers($snapshot); + print "Root: $info{Root}\n"; + + my $metadata = new LBS::MetadataParser $store, $info{Root}; + while ((my %item = $metadata->get_item())) { + print $item{name}, "\n"; + if ($item{type} eq '-') { + my $size = 0; + my $verifier = new LBS::ChecksumVerifier $item{checksum}; + foreach (split /\s+/, $item{data}) { + my $data = $store->load_ref($_); + $verifier->add($data); + $size += length($data); + } + if (!$verifier->verify() || $size != $item{size}) { + fprintf STDERR "Verification failure for $item{name}\n"; + } + } + } +} else { + die "Unknown command: $cmd\n"; +}