summaryrefslogtreecommitdiffstats
path: root/perl-install/fs.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/fs.pm')
-rw-r--r--perl-install/fs.pm51
1 files changed, 31 insertions, 20 deletions
diff --git a/perl-install/fs.pm b/perl-install/fs.pm
index 9973c5780..ed23f77e4 100644
--- a/perl-install/fs.pm
+++ b/perl-install/fs.pm
@@ -24,6 +24,11 @@ sub add_options(\$@) {
$$option = join(',', keys %l) || "defaults";
}
+sub raw_hds {
+ detect_devices::floppies(), detect_devices::cdroms(),
+ (map { $_->{device} .= '4'; $_ } detect_devices::zips());
+}
+
sub read_fstab($) {
my ($file) = @_;
@@ -61,22 +66,28 @@ sub check_mounted($) {
}
sub get_mntpoints_from_fstab {
- my ($fstab, $prefix, $uniq) = @_;
-
+ my ($l, $prefix, $uniq) = @_;
log::l("reading fstab");
foreach (read_fstab("$prefix/etc/fstab")) {
- next if $uniq && fsedit::mntpoint2part($_->{mntpoint}, $fstab);
+ next if $uniq && fsedit::mntpoint2part($_->{mntpoint}, $l);
+ ($_->{device} = expand_symlinks(($_->{device} =~ m|^/| ? '' : '/dev/') . $_->{device})) =~ s|^/dev/||;
- foreach my $p (@$fstab) {
+ foreach my $p (@$l) {
$p->{device} eq $_->{device} or next;
$_->{type} ne 'auto' && $_->{type} ne type2fs($p->{type}) and
log::l("err, fstab and partition table do not agree for $_->{device} type: " . (type2fs($p->{type}) || type2name($p->{type})) . " vs $_->{type}"), next;
delete $p->{unsafeMntpoint} || !$p->{mntpoint} or next;
+ $p->{type} ||= $_->{type};
$p->{mntpoint} = $_->{mntpoint};
$p->{options} = $_->{options};
}
}
}
+sub get_all_mntpoints_from_fstab {
+ my ($all_hds, $prefix, $uniq) = @_;
+ my @l = (fsedit::get_all_fstab($all_hds), @{$all_hds->{raw_hds}});
+ get_mntpoints_from_fstab(\@l, $prefix, $uniq);
+}
#- mke2fs -b (1024|2048|4096) -c -i(1024 > 262144) -N (1 > 100000000) -m (0-100%) -L volume-label
#- tune2fs
@@ -161,10 +172,10 @@ sub real_format_part {
$part->{isFormatted} = 1;
}
sub format_part {
- my ($raid, $part, $prefix) = @_;
- if (isMDRAID($part)) {
+ my ($raids, $part, $prefix) = @_;
+ if (isRAID($part)) {
require raid;
- raid::format_part($raid, $part);
+ raid::format_part($raids, $part);
} elsif (isLoopback($part)) {
loopback::format_part($part, $prefix);
} else {
@@ -173,25 +184,25 @@ sub format_part {
}
sub formatMount_part {
- my ($part, $raid, $fstab, $prefix, $callback) = @_;
+ my ($part, $raids, $fstab, $prefix, $callback) = @_;
if (isLoopback($part)) {
- formatMount_part($part->{device}, $raid, $fstab, $prefix, $callback);
+ formatMount_part($part->{loopback_device}, $raids, $fstab, $prefix, $callback);
}
if (my $p = up_mount_point($part->{mntpoint}, $fstab)) {
- formatMount_part($p, $raid, $fstab, $prefix, $callback) unless loopback::carryRootLoopback($part);
+ formatMount_part($p, $raids, $fstab, $prefix, $callback) unless loopback::carryRootLoopback($part);
}
if ($part->{toFormat}) {
$callback->($part) if $callback;
- format_part($raid, $part, $prefix);
+ format_part($raids, $part, $prefix);
}
mount_part($part, $prefix);
}
sub formatMount_all {
- my ($raid, $fstab, $prefix, $callback) = @_;
- formatMount_part($_, $raid, $fstab, $prefix, $callback)
+ my ($raids, $fstab, $prefix, $callback) = @_;
+ formatMount_part($_, $raids, $fstab, $prefix, $callback)
foreach sort { isLoopback($a) ? 1 : isSwap($a) ? -1 : 0 } grep { $_->{mntpoint} } @$fstab;
#- ensure the link is there
@@ -206,7 +217,7 @@ sub formatMount_all {
};
}
-sub mount($$$;$) {
+sub mount {
my ($dev, $where, $fs, $rdonly) = @_;
log::l("mounting $dev on $where as type $fs");
@@ -252,7 +263,7 @@ sub mount($$$;$) {
}
#- takes the mount point to umount (can also be the device)
-sub umount($) {
+sub umount {
my ($mntpoint) = @_;
$mntpoint =~ s|/$||;
log::l("calling umount($mntpoint)");
@@ -261,7 +272,7 @@ sub umount($) {
substInFile { $_ = '' if /(^|\s)$mntpoint\s/ } '/etc/mtab'; #- don't care about error, if we can't read, we won't manage to write... (and mess mtab)
}
-sub mount_part($;$$) {
+sub mount_part {
my ($part, $prefix, $rdonly) = @_;
#- root carrier's link can't be mounted
@@ -271,7 +282,7 @@ sub mount_part($;$$) {
unless ($::testing) {
if (isSwap($part)) {
- swap::swapon(isLoopback($part) ? $prefix . loopback::file($part) : $part->{device});
+ swap::swapon($part->{device});
} else {
$part->{mntpoint} or die "missing mount point";
@@ -279,7 +290,7 @@ sub mount_part($;$$) {
my $mntpoint = ($prefix || '') . $part->{mntpoint};
if (isLoopback($part)) {
eval { modules::load('loop') };
- $dev = $part->{real_device} = devices::set_loop($prefix . loopback::file($part)) || die;
+ $dev = $part->{real_device} = devices::set_loop($part->{device}) || die;
} elsif (loopback::carryRootLoopback($part)) {
$mntpoint = "/initrd/loopfs";
}
@@ -290,7 +301,7 @@ sub mount_part($;$$) {
$part->{isMounted} = $part->{isFormatted} = 1; #- assume that if mount works, partition is formatted
}
-sub umount_part($;$) {
+sub umount_part {
my ($part, $prefix) = @_;
$part->{isMounted} or return;
@@ -420,7 +431,7 @@ sub write_fstab($;$$@) {
#isThisFs("reiserfs", $_) && $_ == fsedit::get_root($fstab, 'boot') and add_options($options, "notail");
my $dev = isLoopback($_) ?
- ($_->{mntpoint} eq '/' ? "/initrd/loopfs$_->{loopback_file}" : loopback::file($_)) :
+ ($_->{mntpoint} eq '/' ? "/initrd/loopfs$_->{loopback_file}" : $_->{device}) :
($_->{device} =~ /^\// ? $_->{device} : "$dir$_->{device}");
local $_->{mntpoint} = do {