diff options
Diffstat (limited to 'perl-install/fs/any.pm')
-rw-r--r-- | perl-install/fs/any.pm | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/perl-install/fs/any.pm b/perl-install/fs/any.pm new file mode 100644 index 000000000..53e526ba1 --- /dev/null +++ b/perl-install/fs/any.pm @@ -0,0 +1,66 @@ +package fs::any; # $Id$ + +use diagnostics; +use strict; + +use common; +use fsedit; +use fs::mount_point; + +sub get_hds { + my ($all_hds, $fstab, $manual_fstab, $partitioning_flags, $skip_mtab, $o_in) = @_; + + my $probed_all_hds = fsedit::get_hds($partitioning_flags, $o_in); + my $hds = $probed_all_hds->{hds}; + + if (is_empty_array_ref($hds) && !$::move) { #- no way + die N("An error occurred - no valid devices were found on which to create new filesystems. Please check your hardware for the cause of this problem"); + } + + #- try to figure out if the same number of hds is available, use them if ok. + @{$all_hds->{hds} || []} == @$hds and return 1; + + fs::get_raw_hds('', $probed_all_hds); + fs::add2all_hds($probed_all_hds, @$manual_fstab); + + %$all_hds = %$probed_all_hds; + @$fstab = fs::get::really_all_fstab($all_hds); + + if (!$skip_mtab) { + #- do not mount the windows partition + fs::merge_info_from_mtab($fstab); + fs::mount_point::suggest_mount_points_always($fstab); + } + + 1; +} + +sub write_hds { + my ($all_hds, $fstab, $set_mount_defaults, $on_reboot_needed, $opts) = @_; + if (!$::testing) { + my $hds = $all_hds->{hds}; + partition_table::write($_) foreach @$hds; + $_->{rebootNeeded} and $on_reboot_needed->() foreach @$hds; + } + + fs::set_removable_mntpoints($all_hds); + fs::mount_options::set_all_default($all_hds, %$opts, lang::fs_options($opts->{locale})) + if $set_mount_defaults; + + @$fstab = fs::get::fstab($all_hds); +} + +sub check_hds_boot_and_root { + my ($all_hds, $fstab) = @_; + fs::get::root_($fstab) or die "Oops, no root partition"; + + if (arch() =~ /ppc/ && detect_devices::get_mac_generation() =~ /NewWorld/) { + die "Need bootstrap partition to boot system!" if !(defined $partition_table::mac::bootstrap_part); + } + + if (arch() =~ /ia64/ && !fs::get::has_mntpoint("/boot/efi", $all_hds)) { + die N("You must have a FAT partition mounted in /boot/efi"); + } +} + +1; |