merged from stable default tip
authorHeiko Schlittermann <hs@schlittermann.de>
Fri, 29 Oct 2010 00:23:06 +0200
changeset 41 24d57a2e8df7
parent 37 a61b92c60367 (current diff)
parent 39 06bffc9d8977 (diff)
merged from stable
--- a/is	Sun Jan 31 23:58:01 2010 +0100
+++ b/is	Fri Oct 29 00:23:06 2010 +0200
@@ -45,15 +45,14 @@
     do "$src/info/devices";
     my %devices = %$VAR1;
 
-    #SI::ptable::restore(%devices);
-    #SI::ptable::mkfs(%devices);
-    #SI::lvm::pvcreate(%devices);
-    #SI::lvm::vgcfgrestore("$src/lvm/vg.*", %devices);
-    #SI::lvm::mkfs(%devices);
-    #SI::dumper::restore("$src/dump/*", %devices);
+    SI::ptable::restore(%devices);
+    SI::ptable::mkfs(%devices);
+    SI::lvm::pvcreate(%devices);
+    SI::lvm::vgcfgrestore("$src/lvm/vg.*", %devices);
+    SI::lvm::mkfs(%devices);
+    SI::dumper::restore("$src/dump/*", %devices);
     SI::grub::restore(%devices);
 
-
     exit;
     die Dumper \%devices;
 
--- a/lib/SI/dumper.pm	Sun Jan 31 23:58:01 2010 +0100
+++ b/lib/SI/dumper.pm	Fri Oct 29 00:23:06 2010 +0200
@@ -10,6 +10,7 @@
 
 sub dump($\%) {
     my ($file, $devs) = @_;
+    my $dumpdates = dirname($file) . "/dumpdates";
 
     foreach my $volume (
         map { { name => $_, %{ $devs->{volume}{$_} } } }
@@ -21,7 +22,7 @@
         verbose("dumping volume $volume->{name}");
         my $dumpdev = $volume->{name};
         my $of = sprintf $file, basename($volume->{name});
-        run("dump -0 -z -f $of $dumpdev");
+        run("dump -D $dumpdates -u -0 -z -f $of $dumpdev");
         verbose("\n");
     }
 }
@@ -30,7 +31,7 @@
     my @dumps = glob(shift);
     my $devs = shift;
 
-    my $tmpdir = tempdir (CLEANUP => 1);
+    my $tmpdir = tempdir (CLEANUP => 0);
 
     foreach my $dump (@dumps) {
 	# suppose it's gzipped
@@ -47,15 +48,20 @@
 
 	verbose("restore $dump -> $dev : $fs\n");
 	run("mount -t $fs $dev $tmpdir");
-	my $pid = fork or do {
-	    open(STDIN, $dump) or die "Can't open $dump as STDIN: $!\n";
-	    chdir $tmpdir  or die "Can't chdir to $tmpdir: $!\n";
-	    exec restore => "-orf-";
-	    die "Can't exec restore: $!\n";
+
+	eval {
+		my $pid = fork or do {
+		    open(STDIN, $dump) or die "Can't open $dump as STDIN: $!\n";
+		    chdir $tmpdir  or die "Can't chdir to $tmpdir: $!\n";
+		    exec restore => "-orf-";
+		    die "Can't exec restore: $!\n";
+		};
+		waitpid($pid, 0);
 	};
-	waitpid($pid, 0);
 	run("umount $tmpdir");
+	die $@ if $@;
     }
+    rmdir($tmpdir);
 }
 
 
--- a/lib/SI/grub.pm	Sun Jan 31 23:58:01 2010 +0100
+++ b/lib/SI/grub.pm	Fri Oct 29 00:23:06 2010 +0200
@@ -58,7 +58,8 @@
 
 	run("chroot $tmpdir grub-mkdevicemap");
 	run("chroot $tmpdir /usr/sbin/grub-install '(hd0)'");
-	#system("/bin/bash --login");
+	system("/bin/bash --login")
+		if $ENV{_SHELL};
     };
     if ($@) {
 	warn "** EVAL: $@\n";
--- a/si	Sun Jan 31 23:58:01 2010 +0100
+++ b/si	Fri Oct 29 00:23:06 2010 +0200
@@ -45,10 +45,9 @@
     $dir =~ s/\/+/\//g;
 
     rmtree($dir);
-    mkpath(map { "$dir/$_" } qw(info ptable lvm blkid mbr dump),
-        { verbose => 1 });
+    mkpath([map { "$dir/$_" } qw(info ptable lvm blkid mbr dump)]);
 
-    warn grep { -l && readlink =~ /\/.*-$sys_id$/ } glob("$opt_base");
+    #print grep { -l && readlink =~ /\/.*-$sys_id$/ } glob("$opt_base");
 
     SI::ptable::volumes("$dir/ptable/%s", %devices);
     die Dumper \%devices if $opt_exit =~ /ptable/;