- # Windows version?
-}
-
-sub check_grub
-{
- local $_;
- my $r = shift;
-
- # Grub version, if we care.
-}
-
-#print Dumper (\%fses);
-
-#----------------------------------------------------------------------
-# Now find out how many operating systems we've got. Usually just one.
-
-my %oses = ();
-
-foreach (sort keys %fses) {
- if ($fses{$_}->{is_root}) {
- my %r = (
- root => $fses{$_},
- root_device => $_
- );
- get_os_version (\%r);
- assign_mount_points (\%r);
- $oses{$_} = \%r;
- }
-}
-
-sub get_os_version
-{
- local $_;
- my $r = shift;
-
- $r->{os} = $r->{root}->{fsos} if exists $r->{root}->{fsos};
- $r->{distro} = $r->{root}->{osdistro} if exists $r->{root}->{osdistro};
- $r->{version} = $r->{root}->{osversion} if exists $r->{root}->{osversion};
-}
-
-sub assign_mount_points
-{
- local $_;
- my $r = shift;
-
- $r->{mounts} = { "/" => $r->{root_device} };
- $r->{filesystems} = { $r->{root_device} => $r->{root} };
-
- # Use /etc/fstab if we have it to mount the rest.
- if (exists $r->{root}->{fstab}) {
- my @fstab = @{$r->{root}->{fstab}};
- foreach (@fstab) {
- my ($spec, $file) = @$_;
-
- my ($dev, $fs) = find_filesystem ($spec);
- if ($dev) {
- $r->{mounts}->{$file} = $dev;
- $r->{filesystems}->{$dev} = $fs;
- if (exists $fs->{used}) {
- $fs->{used}++
- } else {
- $fs->{used} = 1
- }
- }
- }
- }
-}
-
-# Find filesystem by device name, LABEL=.. or UUID=..
-sub find_filesystem
-{
- local $_ = shift;
-
- if (/^LABEL=(.*)/) {
- my $label = $1;
- foreach (sort keys %fses) {
- if (exists $fses{$_}->{label} &&
- $fses{$_}->{label} eq $label) {
- return ($_, $fses{$_});
- }
- }
- warn "unknown filesystem label $label\n";
- return ();
- } elsif (/^UUID=(.*)/) {
- my $uuid = $1;
- foreach (sort keys %fses) {
- if (exists $fses{$_}->{uuid} &&
- $fses{$_}->{uuid} eq $uuid) {
- return ($_, $fses{$_});
- }
- }
- warn "unknown filesystem UUID $uuid\n";
- return ();
- } else {
- return ($_, $fses{$_}) if exists $fses{$_};
-
- if (m{^/dev/hd(.*)} && exists $fses{"/dev/sd$1"}) {
- return ("/dev/sd$1", $fses{"/dev/sd$1"});
- }
- if (m{^/dev/xvd(.*)} && exists $fses{"/dev/sd$1"}) {
- return ("/dev/sd$1", $fses{"/dev/sd$1"});
- }
-
- return () if m{/dev/cdrom};
-
- warn "unknown filesystem $_\n";
- return ();
- }
-}
-
-#print Dumper(\%oses);
-
-#----------------------------------------------------------------------