summaryrefslogtreecommitdiffstats
path: root/perl-install/fs/any.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/fs/any.pm')
-rw-r--r--perl-install/fs/any.pm85
1 files changed, 61 insertions, 24 deletions
diff --git a/perl-install/fs/any.pm b/perl-install/fs/any.pm
index 65ca02403..ce4de2ca3 100644
--- a/perl-install/fs/any.pm
+++ b/perl-install/fs/any.pm
@@ -1,11 +1,15 @@
-package fs::any; # $Id: any.pm 269745 2010-06-02 11:21:42Z pterjan $
+package fs::any;
use diagnostics;
use strict;
+use c;
use common;
use fsedit;
+use fs::get;
use fs::mount_point;
+use fs::type;
+use run_program;
sub get_hds {
my ($all_hds, $fstab, $manual_fstab, $partitioning_flags, $skip_mtab, $o_in) = @_;
@@ -58,21 +62,26 @@ sub set_cdrom_symlink {
my $alias = basename($_->{mntpoint}) or next;
log::l("using alias $alias for $_->{device}");
$_->{device_alias} = $alias;
- symlink($_->{device}, "/dev/$alias") if $::prefix; # do create the symlink to have it during install (otherwise fs::wild_device::from_part will give a non accessible device)
- symlink($_->{device}, "$::prefix/dev/$alias");
+ symlink($_->{device}, "/dev/$alias");
}
}
sub check_hds_boot_and_root {
- my ($all_hds, $fstab) = @_;
+ my ($all_hds, $fstab, $isUpgrade, $o_match_all_hardware) = @_;
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");
+ return if $o_match_all_hardware || $::local_install;
+
+ if (is_uefi()) {
+ if (!fs::get::has_mntpoint("/boot/EFI", $all_hds)) {
+ die N("You must have a ESP FAT32 partition mounted in /boot/EFI");
+ }
+ } else {
+ # if we are doing an upgrade, the user may still be using a legacy bootloader
+ return if $isUpgrade;
+ if (is_boot_bios_part_needed($all_hds)) {
+ die N("You must have a BIOS boot partition for non-UEFI GPT-partitioned disks. Please create one before continuing.");
+ }
}
}
@@ -81,28 +90,24 @@ sub create_minimal_files() {
qw(dev etc etc/profile.d etc/rpm etc/sysconfig etc/sysconfig/console
etc/sysconfig/network-scripts etc/sysconfig/console/consolefonts
etc/sysconfig/console/consoletrans
- home mnt tmp var var/tmp var/lib var/lib/rpm var/lib/urpmi);
+ home mnt run tmp var var/tmp var/lib var/lib/rpm var/lib/urpmi);
mkdir "$::prefix/$_", 0700 foreach qw(root root/tmp root/drakx);
-
- devices::make("$::prefix/dev/null");
- chmod 0666, "$::prefix/dev/null";
}
-sub prepare_minimal_root {
- my ($all_hds) = @_;
+sub prepare_minimal_root() {
- fs::any::create_minimal_files();
+ create_minimal_files();
+ # ensure we've all needed devices, for bootloader install and mkinitrd:
+ run_program::run('mount', '--bind', '/dev', "$::prefix/dev");
+ run_program::run('mount', '--bind', '/run', "$::prefix/run");
eval { fs::mount::mount('none', "$::prefix/proc", 'proc') };
eval { fs::mount::mount('none', "$::prefix/sys", 'sysfs') };
- eval { fs::mount::usbfs($::prefix) };
-
- # copy all needed devices, for bootloader install and mkinitrd
- cp_af("/dev", "$::prefix");
+ eval { fs::mount::sys_kernel_debug($::prefix) };
}
-sub getAvailableSpace {
- my ($fstab, $o_skip_mounted) = @_;
+sub getNeededMinSpace {
+ my ($n) = @_;
#- make sure of this place to be available for installation, this could help a lot.
#- currently doing a very small install use 36Mb of postinstall-rpm, but installing
@@ -110,9 +115,15 @@ sub getAvailableSpace {
#- 65mb may be a good choice to avoid almost all problem of insuficient space left...
my $minAvailableSize = 65 * sqr(1024);
+ max(0.1 * $n, $minAvailableSize);
+}
+
+sub getAvailableSpace {
+ my ($fstab, $o_skip_mounted, $o_skip_min_space) = @_;
+
my $n = !$::testing && !$o_skip_mounted && getAvailableSpace_mounted($::prefix) ||
getAvailableSpace_raw($fstab) * 512 / 1.07;
- $n - max(0.1 * $n, $minAvailableSize);
+ $o_skip_min_space ? $n : $n - getNeededMinSpace($n);
}
sub getAvailableSpace_mounted {
@@ -136,4 +147,30 @@ sub getAvailableSpace_raw {
die "missing root partition";
}
+=head3 is_boot_bios_part_needed($all_hds)
+
+Returns whether a Boot BIOS Partition is needed
+
+Returns true if all of the following are true:
+ - legacy boot (not UEFI)
+ - all disks are (or will be) GPT
+ - no disks have a BIOS boot partition
+
+=cut
+
+sub is_boot_bios_part_needed {
+ my ($all_hds) = @_;
+ # never needed for UEFI boot
+ return if is_uefi();
+ # do we already have one?
+ my @parts = map { partition_table::get_normal_parts($_) } fs::get::hds($all_hds);
+ return if any { isBIOS_GRUB($_) } @parts;
+ # do we have any non-GPT disks?
+ foreach my $hd (@{$all_hds->{hds}}) {
+ my $type = $hd->{pt_table_type} || partition_table::default_type($hd);
+ return if $type ne 'gpt';
+ }
+ 1;
+}
+
1;