# HG changeset patch # User Heiko Schlittermann # Date 1263941290 -3600 # Node ID d4942418a9ea19ae0f398c2d57149f6c83b96dac # Parent fd87c1e3b4512ba02087ac476e095677484bf22e [perltidy] diff -r fd87c1e3b451 -r d4942418a9ea SI/blkid.pm --- a/SI/blkid.pm Tue Jan 19 23:45:54 2010 +0100 +++ b/SI/blkid.pm Tue Jan 19 23:48:10 2010 +0100 @@ -9,11 +9,10 @@ use SI::tools; - sub ids($\%) { my ($file, $devs) = @_; - my @volumes = sort keys %{$devs->{volume}}; + my @volumes = sort keys %{ $devs->{volume} }; verbose("reading blkids: @volumes"); foreach (`blkid -c /dev/null @volumes`) { my $dev = (split /:/)[0]; @@ -22,35 +21,36 @@ my ($type) = /\sTYPE=.(.*?).\s/; my ($label) = /\sLABEL=.(.*?).\s/; - if (exists $devs->{volume}{$dev}) { + if (exists $devs->{volume}{$dev}) { $devs->{volume}{$dev}{uuid} = $uuid; $devs->{volume}{$dev}{type} = $type; $devs->{volume}{$dev}{label} = $label; - my ($of, $oh); - if (defined $uuid) { - $of = sprintf $file, "uuid." . basename $dev; - $oh = new IO::File ">$of" or die "ERR: Can't open $of: $!\n"; - $oh->print("$uuid\n"); - } + my ($of, $oh); + if (defined $uuid) { + $of = sprintf $file, "uuid." . basename $dev; + $oh = new IO::File ">$of" or die "ERR: Can't open $of: $!\n"; + $oh->print("$uuid\n"); + } - if (defined $label) { - $of = sprintf $file, "label." . basename $dev; - $oh = new IO::File ">$of" or die "ERR: Can't open $of: $!\n"; - $oh->print("$label\n"); - } + if (defined $label) { + $of = sprintf $file, "label." . basename $dev; + $oh = new IO::File ">$of" or die "ERR: Can't open $of: $!\n"; + $oh->print("$label\n"); + } - if (defined $type) { - $of = sprintf $file, "type." . basename $dev; - $oh = new IO::File ">$of" or die "ERR: Can't open $of: $!\n"; - $oh->print("$type\n"); - } + if (defined $type) { + $of = sprintf $file, "type." . basename $dev; + $oh = new IO::File ">$of" or die "ERR: Can't open $of: $!\n"; + $oh->print("$type\n"); + } - } + } } verbose("\n"); } 1; + # vim:sts=4 sw=4 aw ai si: diff -r fd87c1e3b451 -r d4942418a9ea SI/dumper.pm --- a/SI/dumper.pm Tue Jan 19 23:45:54 2010 +0100 +++ b/SI/dumper.pm Tue Jan 19 23:48:10 2010 +0100 @@ -9,17 +9,19 @@ sub dump($\%) { my ($file, $devs) = @_; - foreach my $volume ( map { { name => $_, %{$devs->{volume}{$_}}}} keys %{$devs->{volume}}) { - next if !defined $volume->{type} or $volume->{type} !~ /^ext/i; - - system("fsck -f -C0 $volume->{name}"); - die "ERR: fsck failed\n" if $? > 2; + foreach my $volume (map { { name => $_, %{ $devs->{volume}{$_} } } } + keys %{ $devs->{volume} }) + { + next if !defined $volume->{type} or $volume->{type} !~ /^ext/i; - verbose("dumping volume $volume->{name}"); - my $dumpdev = $volume->{name}; - my $of = sprintf $file, basename($volume->{name}); - run("dump -0 -z -f $of $dumpdev"); - verbose("\n"); + system("fsck -f -C0 $volume->{name}"); + die "ERR: fsck failed\n" if $? > 2; + + verbose("dumping volume $volume->{name}"); + my $dumpdev = $volume->{name}; + my $of = sprintf $file, basename($volume->{name}); + run("dump -0 -z -f $of $dumpdev"); + verbose("\n"); } } diff -r fd87c1e3b451 -r d4942418a9ea SI/lvm.pm --- a/SI/lvm.pm Tue Jan 19 23:45:54 2010 +0100 +++ b/SI/lvm.pm Tue Jan 19 23:48:10 2010 +0100 @@ -18,9 +18,10 @@ my $devs = shift; # find the physical volumes we've already recognised as „non-removable“ - my @known = keys %{$devs->{volume}}, keys %{$devs->{disk}}; + my @known = keys %{ $devs->{volume} }, keys %{ $devs->{disk} }; - my @pvs = grep { $_ ~~ @known } map { s/\s*//; (split /:/)[0] } `pvdisplay -c`; + my @pvs = + grep { $_ ~~ @known } map { s/\s*//; (split /:/)[0] } `pvdisplay -c`; @volumegroups = map { (split /:/)[1] } `pvdisplay -c @pvs 2>/dev/null`; run("vgchange -ay @volumegroups 2>&1 >/dev/null"); return @volumegroups; @@ -33,12 +34,12 @@ # physical devices known to lvm, not just the non-removable my @vgs = _vgs(%$devs); - my @lvs = - map { abs_path ((dirname $_) . "/" . readlink) } - map { s/^\s*//; (split /:/)[0] } - grep { (split /:/)[1] ~~ @vgs } `lvdisplay -c`; + my @lvs = + map { abs_path((dirname $_) . "/" . readlink) } + map { s/^\s*//; (split /:/)[0] } + grep { (split /:/)[1] ~~ @vgs } `lvdisplay -c`; foreach (@lvs) { - $devs->{volume}{$_} = { origin => "lvm" }; + $devs->{volume}{$_} = { origin => "lvm" }; } } @@ -47,9 +48,10 @@ # we save it vg by vg to have the restore more easy my @vgs = _vgs(%$devs); - foreach ( map { s/^\s*(.*)/$1/; $_ = (split /:/)[0] } `vgs --noheadings --separator : @vgs`) + foreach (map { s/^\s*(.*)/$1/; $_ = (split /:/)[0] } + `vgs --noheadings --separator : @vgs`) { - verbose("saving vg $_\n"); + verbose("saving vg $_\n"); my $file = sprintf $file, $_; run("vgcfgbackup -f '$file' '$_' >/dev/null"); } @@ -61,4 +63,5 @@ } 1; + # vim:sts=4 sw=4 aw ai si: diff -r fd87c1e3b451 -r d4942418a9ea SI/mbr.pm --- a/SI/mbr.pm Tue Jan 19 23:45:54 2010 +0100 +++ b/SI/mbr.pm Tue Jan 19 23:48:10 2010 +0100 @@ -9,17 +9,17 @@ use SI::tools; sub save($\%) { - my ($file, $devs) = @_; - + my ($file, $devs) = @_; - foreach my $disk (keys %{$devs->{disk}}) { - verbose("saving mbr of $disk\n"); - open((my $o), $_ = sprintf(">$file", basename($disk))) or die "Can't open $_: $!\n"; + foreach my $disk (keys %{ $devs->{disk} }) { + verbose("saving mbr of $disk\n"); + open((my $o), $_ = sprintf(">$file", basename($disk))) + or die "Can't open $_: $!\n"; - local $/ = \512; - my $in = new IO::File $disk or die "Can't open $disk: $!\n"; - print $o $_ = <$in>; - } + local $/ = \512; + my $in = new IO::File $disk or die "Can't open $disk: $!\n"; + print $o $_ = <$in>; + } } 1; diff -r fd87c1e3b451 -r d4942418a9ea SI/ptable.pm --- a/SI/ptable.pm Tue Jan 19 23:45:54 2010 +0100 +++ b/SI/ptable.pm Tue Jan 19 23:48:10 2010 +0100 @@ -18,48 +18,50 @@ # non-removable block devices (this may include # LVs (used as disk itself) too) foreach (glob("/sys/block/*")) { - my $name = basename($_); - my $dev = "/dev/$name"; + my $name = basename($_); + my $dev = "/dev/$name"; - next if !-e "$_/device"; - next if (grep { /ATTR{removable}/ } `udevadm info --attribute-walk --name $name`)[0] !~ /==.0./; - next if (stat $dev)[0] == (stat $0)[0]; + next if !-e "$_/device"; + next + if (grep { /ATTR{removable}/ } + `udevadm info --attribute-walk --name $name`)[0] !~ /==.0./; + next if (stat $dev)[0] == (stat $0)[0]; - # exclude the device (stick) we're part of - this HACK is - # only useful on KVM - the usb stick doesn't appear as a removeable - # device - next if (stat $0)[0] ~~ [map { (stat)[6] } map { "/dev/" . basename(dirname $_) } glob("$_/*/partition")]; - + # exclude the device (stick) we're part of - this HACK is + # only useful on KVM - the usb stick doesn't appear as a removeable + # device + next + if (stat $0)[0] ~~ [map { (stat)[6] } + map { "/dev/" . basename(dirname $_) } glob("$_/*/partition")]; - verbose("\n"); - verbose("device $dev\n"); - - die "ERR: $dev does not exist. (should not happen): $!" - if !-b $dev; + verbose("\n"); + verbose("device $dev\n"); - # now the physical disk -- let's ask for the partition table + die "ERR: $dev does not exist. (should not happen): $!" + if !-b $dev; - my @sfdisk = `sfdisk -d /dev/$name 2>/dev/null`; + # now the physical disk -- let's ask for the partition table - my $of = sprintf $file, $name; - my $oh = new IO::File ">$of" or die "Can't open >$of: $!\n"; - print $oh @sfdisk; + my @sfdisk = `sfdisk -d /dev/$name 2>/dev/null`; + + my $of = sprintf $file, $name; + my $oh = new IO::File ">$of" or die "Can't open >$of: $!\n"; + print $oh @sfdisk; - $devs->{disk}{"/dev/$name"} = { - pt => \@sfdisk - }; + $devs->{disk}{"/dev/$name"} = { pt => \@sfdisk }; - # and let's prepare the volume entries - foreach (@sfdisk) { - /^(\S+)\s*:.*Id=\s*([[:xdigit:]]+)/ or next; - $devs->{volume}{$1} = { - origin => "ptable", - ptable_type => $2, - }; - } + # and let's prepare the volume entries + foreach (@sfdisk) { + /^(\S+)\s*:.*Id=\s*([[:xdigit:]]+)/ or next; + $devs->{volume}{$1} = { + origin => "ptable", + ptable_type => $2, + }; + } } return; } 1; + # vim:sts=4 sw=4 aw ai si: diff -r fd87c1e3b451 -r d4942418a9ea SI/system.pm --- a/SI/system.pm Tue Jan 19 23:45:54 2010 +0100 +++ b/SI/system.pm Tue Jan 19 23:48:10 2010 +0100 @@ -9,31 +9,36 @@ $ENV{LC_ALL} = "C"; sub id() { + # hope it's eth* or wlan* local $_ = (sort grep { /^(eth|wlan)/ } `ifconfig -a`)[0]; /^(?\S+)\s.*HWaddr\s+(?[\da-f:]+)\s*$/i - and return $+{mac}; + and return $+{mac}; die "ERR: Can't get system identification (MAC address)\n"; } sub hostname(\%) { - my $devs = shift; - my $mnt = tempdir(CLEANUP => 1); - my $r; + my $devs = shift; + my $mnt = tempdir(CLEANUP => 1); + my $r; - foreach my $fs (grep { $devs->{volume}{$_}{type} =~ /^ext/i } - grep { exists $devs->{volume}{$_}{type} } - keys %{$devs->{volume}}) { - run("mount -r $fs $mnt"); - if (-f "$mnt/etc/hostname") { - die "ERR: found 2nd hostname" if defined $r; - chomp($r = cat("$mnt/etc/hostname")); - } - run("umount $mnt"); - } + foreach my $fs ( + grep { $devs->{volume}{$_}{type} =~ /^ext/i } + grep { exists $devs->{volume}{$_}{type} } + keys %{ $devs->{volume} } + ) + { + run("mount -r $fs $mnt"); + if (-f "$mnt/etc/hostname") { + die "ERR: found 2nd hostname" if defined $r; + chomp($r = cat("$mnt/etc/hostname")); + } + run("umount $mnt"); + } - return $r; + return $r; } 1; + # vim:sts=4 sw=4 aw ai si: diff -r fd87c1e3b451 -r d4942418a9ea SI/tools.pm --- a/SI/tools.pm Tue Jan 19 23:45:54 2010 +0100 +++ b/SI/tools.pm Tue Jan 19 23:48:10 2010 +0100 @@ -11,27 +11,28 @@ our @EXPORT = qw(&run &verbose &find_by_devid &cat &barf); sub run(@) { - system(@_); - die "$_[0] failed with exit code " . ($? >> 8) . "\n" - if $?; + system(@_); + die "$_[0] failed with exit code " . ($? >> 8) . "\n" + if $?; } -sub barf(@) { die Dumper @_ } +sub barf(@) { die Dumper @_ } sub cat($) { - my $fh = new IO::File $_[0] - or die "Can't open $_[0]: $!\n"; - return(<$fh>) if wantarray; + my $fh = new IO::File $_[0] + or die "Can't open $_[0]: $!\n"; + return (<$fh>) if wantarray; return join "", <$fh>; } my $last = "\n"; -sub verbose(@) { + +sub verbose(@) { print $last eq "\n" ? "" : " " - if not(@_ == 1 and length($_[0]) == 1); + if not(@_ == 1 and length($_[0]) == 1); print @_; $last = substr($_[-1], -1, 1); -}; +} sub find_by_devid($$) { my ($dir, $id) = @_; @@ -48,6 +49,6 @@ return $found[0]; } +1; -1; # vim:sts=4 sw=4 aw ai si: diff -r fd87c1e3b451 -r d4942418a9ea si --- a/si Tue Jan 19 23:45:54 2010 +0100 +++ b/si Tue Jan 19 23:48:10 2010 +0100 @@ -22,24 +22,25 @@ use SI::system; my $opt_exit = ""; -my $opt_dir = ""; +my $opt_dir = ""; MAIN: { - GetOptions("exit=s" => \$opt_exit, - "dir=s" => \$opt_dir) - or die "Bad usage\n"; + GetOptions( + "exit=s" => \$opt_exit, + "dir=s" => \$opt_dir + ) or die "Bad usage\n"; - my %devices; # the overall data collector + my %devices; # the overall data collector my $dir; - + if ($opt_dir ne "") { - $dir = $opt_dir; - } + $dir = $opt_dir; + } else { - $dir = dirname($0) . "/../image-" . SI::system::id(); - remove_tree($dir); - -d $dir or mkdir($dir, 0700) or die "Can't mkdir $dir: $!\n"; + $dir = dirname($0) . "/../image-" . SI::system::id(); + remove_tree($dir); + -d $dir or mkdir($dir, 0700) or die "Can't mkdir $dir: $!\n"; } make_path(map { "$dir/$_" } qw(ptable lvm blkid mbr dump)); @@ -61,7 +62,7 @@ SI::dumper::dump("$dir/dump/%s", %devices); my $o = new IO::File ">$dir/devices" - or die "ERR: Can't open $dir/devices: $!\n"; + or die "ERR: Can't open $dir/devices: $!\n"; $o->print(Dumper \%devices); # we wait until now, since now it's sure that @@ -70,9 +71,8 @@ my $hostname = SI::system::hostname(%devices); symlink(basename($dir), "../image-$hostname"); - exit; - } +} # vim:sts=4 sw=4 aw ai si: