1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
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)) { #- 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 set_cdrom_symlink {
my ($raw_hds) = @_;
foreach (grep { $_->{media_type} eq 'cdrom' } @$raw_hds) {
next if $_->{device_alias};
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");
}
}
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");
}
}
sub create_minimal_files() {
mkdir "$::prefix/$_", 0755 foreach
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);
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) = @_;
fs::any::create_minimal_files();
eval { fs::mount::mount('none', "$::prefix/proc", 'proc') };
eval { fs::mount::mount('none', "$::prefix/sys", 'sysfs') };
eval { fs::mount::usbfs($::prefix) };
#- needed by lilo
if (-d '/dev/mapper' && !$::local_install) {
my @vgs = map { $_->{VG_name} } @{$all_hds->{lvms}};
-e "/dev/$_" and cp_af("/dev/$_", "$::prefix/dev") foreach 'mapper', @vgs;
}
}
1;
|