summaryrefslogtreecommitdiffstats
path: root/perl-install/any.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/any.pm')
-rw-r--r--perl-install/any.pm458
1 files changed, 280 insertions, 178 deletions
diff --git a/perl-install/any.pm b/perl-install/any.pm
index 48a610b27..e809ed7af 100644
--- a/perl-install/any.pm
+++ b/perl-install/any.pm
@@ -9,6 +9,7 @@ use strict;
use common;
use detect_devices;
use partition_table;
+use fs::proc_partitions;
use fs::type;
use lang;
use run_program;
@@ -19,7 +20,7 @@ use fs;
use c;
sub facesdir() {
- "$::prefix/usr/share/mdk/faces/";
+ "$::prefix/usr/share/mga/faces/";
}
sub face2png {
my ($face) = @_;
@@ -81,6 +82,7 @@ sub create_user {
? ('-l', $u->{name}, $u->{rename_from})
: $u->{name}));
symlink($u->{home}, $symlink_home_from) if $symlink_home_from;
+ eval { run_program::rooted($::prefix, 'systemctl', 'try-restart', 'accounts-daemon.service') };
}
my (undef, undef, $uid, $gid, undef, undef, undef, $home) = getpwnam($u->{name});
@@ -116,8 +118,7 @@ sub install_acpi_pkgs {
my $acpi = bootloader::get_append_with_key($b, 'acpi');
my $use_acpi = !member($acpi, 'off', 'ht');
if ($use_acpi) {
- $do_pkgs->ensure_is_installed('acpi', '/usr/bin/acpi', $::isInstall);
- $do_pkgs->ensure_is_installed('acpid', '/usr/sbin/acpid', $::isInstall);
+ $do_pkgs->ensure_files_are_installed([ [ qw(acpi acpi) ], [ qw(acpid acpid) ] ], $::isInstall);
}
require services;
services::set_status($_, $use_acpi, $::isInstall) foreach qw(acpi acpid);
@@ -130,12 +131,13 @@ sub setupBootloaderBeforeStandalone {
my $allow_fb = listlength(cat_("/proc/fb"));
my $cmdline = cat_('/proc/cmdline');
my $vga_fb = first($cmdline =~ /\bvga=(\S+)/);
- my $quiet = $cmdline =~ /\bsplash=silent\b/;
- setupBootloaderBefore($do_pkgs, $b, $all_hds, $fstab, $keyboard, $allow_fb, $vga_fb, $quiet);
+ my $splash = $cmdline =~ /\bsplash\b/;
+ my $quiet = $cmdline =~ /\bquiet\b/;
+ setupBootloaderBefore($do_pkgs, $b, $all_hds, $fstab, $keyboard, $allow_fb, $vga_fb, $splash, $quiet);
}
sub setupBootloaderBefore {
- my ($do_pkgs, $bootloader, $all_hds, $fstab, $keyboard, $allow_fb, $vga_fb, $quiet) = @_;
+ my ($_do_pkgs, $bootloader, $all_hds, $fstab, $keyboard, $allow_fb, $vga_fb, $splash, $quiet) = @_;
require bootloader;
#- auto_install backward compatibility
@@ -144,12 +146,6 @@ sub setupBootloaderBefore {
$bootloader->{message_text} = delete $bootloader->{message};
}
- #- remove previous ide-scsi lines
- bootloader::modify_append($bootloader, sub {
- my ($_simple, $dict) = @_;
- @$dict = grep { $_->[1] ne 'ide-scsi' } @$dict;
- });
-
if (cat_("/proc/cmdline") =~ /mem=nopentium/) {
bootloader::set_append_with_key($bootloader, mem => 'nopentium');
}
@@ -175,10 +171,18 @@ sub setupBootloaderBefore {
} elsif (bootloader::get_append_simple($bootloader, 'noresume')) {
} else {
if (my ($biggest_swap) = sort { $b->{size} <=> $a->{size} } grep { isSwap($_) } @$fstab) {
- bootloader::set_append_with_key($bootloader, resume => fs::wild_device::from_part('', $biggest_swap));
+ my $biggest_swap_dev = fs::wild_device::from_part('', $biggest_swap);
+ bootloader::set_append_with_key($bootloader, resume => $biggest_swap_dev);
+ mkdir_p("$::prefix/etc/dracut.conf.d");
+ output("$::prefix/etc/dracut.conf.d/51-mageia-resume.conf", qq(add_device+="$biggest_swap_dev"\n));
}
}
+ #- set nokmsboot if a conflicting driver is configured.
+ if (-x "$::prefix/sbin/display_driver_helper" && !run_program::rooted($::prefix, "/sbin/display_driver_helper", "--is-kms-allowed")) {
+ bootloader::set_append_simple($bootloader, 'nokmsboot');
+ }
+
#- check for valid fb mode to enable a default boot with frame buffer.
my $vga = $allow_fb && (!detect_devices::matching_desc__regexp('3D Rage LT') &&
!detect_devices::matching_desc__regexp('Rage Mobility [PL]') &&
@@ -202,9 +206,11 @@ sub setupBootloaderBefore {
my $need_fb = -e "$::prefix/usr/share/bootsplash/scripts/make-boot-splash";
bootloader::suggest($bootloader, $all_hds,
vga_fb => ($force_vga || $vga && $need_fb) && $vga_fb,
+ splash => $splash,
quiet => $quiet);
$bootloader->{keytable} ||= keyboard::keyboard2kmap($keyboard);
+ log::l("setupBootloaderBefore end");
}
sub setupBootloader {
@@ -219,7 +225,11 @@ sub setupBootloader {
setupBootloader__boot_bios_drive($in, $b, $all_hds->{hds}) or goto general;
{
local $::Wizard_finished = 1 if $::isStandalone;
- setupBootloader__entries($in, $b, $all_hds, $fstab) or goto general;
+ if (bootloader::main_method($b->{method}) eq 'grub2') {
+ setupBootloader__grub2($in, $b, $all_hds, $fstab) or goto general;
+ } else {
+ setupBootloader__entries($in, $b, $all_hds, $fstab) or goto general;
+ }
}
1;
}
@@ -230,7 +240,9 @@ sub setupBootloaderUntilInstalled {
my $before = fs::fstab_to_string($all_hds);
setupBootloader($in, $b, $all_hds, $fstab, $security) or $in->exit;
if ($before ne fs::fstab_to_string($all_hds)) {
- #- for /tmp using tmpfs when "clean /tmp" is chosen
+ #- ovitters: This fstab comparison was needed for optionally
+ #- setting up /tmp using tmpfs. That code was removed. Not removing
+ #- this code as I'm not sure if something still relies on this
fs::write_fstab($all_hds);
}
} while !installBootloader($in, $b, $all_hds);
@@ -239,6 +251,9 @@ sub setupBootloaderUntilInstalled {
sub installBootloader {
my ($in, $b, $all_hds) = @_;
return if detect_devices::is_xbox();
+
+ return 1 if arch() =~ /arm/;
+
install_bootloader_pkgs($in->do_pkgs, $b);
eval { run_program::rooted($::prefix, 'echo | lilo -u') } if $::isInstall && !$::o->{isUpgrade} && -e "$::prefix/etc/lilo.conf" && glob("$::prefix/boot/boot.*");
@@ -270,11 +285,6 @@ Assign a new Volume ID?", $dev)))) {
$in->ask_warn('', [ N("Installation of bootloader failed. The following error occurred:"), $err ]);
return;
}
- } elsif (arch() =~ /ppc/) {
- if (detect_devices::get_mac_model() !~ /IBM/) {
- my $of_boot = bootloader::dev2yaboot($b->{boot});
- $in->ask_warn('', N("You may need to change your Open Firmware boot-device to\n enable the bootloader. If you do not see the bootloader prompt at\n reboot, hold down Command-Option-O-F at reboot and enter:\n setenv boot-device %s,\\\\:tbxi\n Then type: shut-down\nAt your next boot you should see the bootloader prompt.", $of_boot));
- }
}
1;
}
@@ -286,7 +296,7 @@ sub setupBootloader_simple {
require bootloader;
bootloader::ensafe_first_bios_drive($hds)
- || $b->{bootUnsafe} || arch() =~ /ppc/ or return 1; #- default is good enough
+ || $b->{bootUnsafe} or return 1; #- default is good enough
if (arch() !~ /ia64/) {
setupBootloader__mbr_or_not($in, $b, $hds, $fstab) or return 0;
@@ -302,8 +312,7 @@ sub setupBootloader_simple {
sub setupBootloader__boot_bios_drive {
my ($in, $b, $hds) = @_;
- if (arch() =~ /ppc/ ||
- !is_empty_hash_ref($b->{bios})) {
+ if (!is_empty_hash_ref($b->{bios})) {
#- some bios mapping already there
return 1;
} elsif (bootloader::mixed_kind_of_disks($hds) && $b->{boot} =~ /\d$/) { #- on a partition
@@ -314,7 +323,7 @@ sub setupBootloader__boot_bios_drive {
log::l("_ask_boot_bios_drive");
my $hd = $in->ask_from_listf('', N("You decided to install the bootloader on a partition.
-This implies you already have a bootloader on the hard drive you boot (eg: System Commander).
+This implies you already have a bootloader on the hard disk drive you boot (eg: System Commander).
On which drive are you booting?"), \&partition_table::description, $hds) or return 0;
log::l("mixed_kind_of_disks chosen $hd->{device}");
@@ -340,14 +349,6 @@ sub setupBootloader__mbr_or_not {
log::l("setupBootloader__mbr_or_not");
- if (arch() =~ /ppc/) {
- if (defined $partition_table::mac::bootstrap_part) {
- $b->{boot} = $partition_table::mac::bootstrap_part;
- log::l("set bootstrap to $b->{boot}");
- } else {
- die "no bootstrap partition - yaboot.conf creation failed";
- }
- } else {
my $floppy = detect_devices::floppy();
my @l = (
@@ -372,17 +373,11 @@ sub setupBootloader__mbr_or_not {
#- remove bios mapping if the user changed the boot device
delete $b->{bios} if $new_boot && $new_boot ne $b->{boot};
$b->{boot} = $new_boot or return;
- }
1;
}
-sub get_apple_boot_parts {
- my ($fstab) = @_;
- map { "/dev/$_" } (map { $_->{device} } (grep { isAppleBootstrap($_) } @$fstab));
-}
-
sub setupBootloader__general {
- my ($in, $b, $all_hds, $fstab, $security) = @_;
+ my ($in, $b, $all_hds, $_fstab, $_security) = @_;
return if detect_devices::is_xbox();
my @method_choices = bootloader::method_choices($all_hds);
@@ -390,32 +385,38 @@ sub setupBootloader__general {
my $prev_enable_apic = my $enable_apic = !bootloader::get_append_simple($b, 'noapic');
my $prev_enable_lapic = my $enable_lapic = !bootloader::get_append_simple($b, 'nolapic');
my $prev_enable_smp = my $enable_smp = !bootloader::get_append_simple($b, 'nosmp');
- my $prev_clean_tmp = my $clean_tmp = any { $_->{mntpoint} eq '/tmp' } @{$all_hds->{special} ||= []};
my $prev_boot = $b->{boot};
my $prev_method = $b->{method};
$b->{password2} ||= $b->{password} ||= '';
$::Wizard_title = N("Boot Style Configuration");
- if (arch() !~ /ppc/) {
- my (@boot_devices, %boot_devices);
+ my (@boot_devices, %boot_devices);
+ if (is_uefi()) {
+ @boot_devices = 'ESP';
+ %boot_devices = (ESP => N("EFI System Partition"));
+ } else {
foreach (bootloader::allowed_boot_parts($b, $all_hds)) {
my $dev = "/dev/$_->{device}";
push @boot_devices, $dev;
- $boot_devices{$dev} = $_->{info} ? "$dev ($_->{info})" : $dev;
+ my $name = $_->{mntpoint} || $_->{info} || $_->{device_LABEL};
+ unless ($name) {
+ $name = formatXiB($_->{size}*512) . " " if $_->{size};
+ $name .= $_->{fs_type};
+ }
+ $boot_devices{$dev} = $name ? "$dev ($name)" : $dev;
}
+ }
- $in->ask_from_({ #messages => N("Bootloader main options"),
- title => N("Bootloader main options"),
- interactive_help_id => 'setupBootloader',
- }, [
+ $in->ask_from_({ #messages => N("Bootloader main options"),
+ title => N("Bootloader main options"),
+ interactive_help_id => 'setupBootloader',
+ }, [
#title => N("Bootloader main options"),
{ label => N("Bootloader"), title => 1 },
{ label => N("Bootloader to use"), val => \$b->{method},
list => \@method_choices, format => \&bootloader::method2text },
- if_(arch() !~ /ia64/,
- { label => N("Boot device"), val => \$b->{boot}, list => \@boot_devices,
+ { label => N("Boot device"), val => \$b->{boot}, list => \@boot_devices, allow_empty_list => 1,
format => sub { $boot_devices{$_[0]} } },
- ),
{ label => N("Main options"), title => 1 },
{ label => N("Delay before booting default image"), val => \$b->{timeout} },
{ text => N("Enable ACPI"), val => \$force_acpi, type => 'bool', advanced => 1 },
@@ -429,30 +430,12 @@ sub setupBootloader__general {
my $ok = $b->{password} eq $b->{password2}
or $in->ask_warn('', [ N("The passwords do not match"), N("Please try again") ]);
my $ok2 = !($b->{password} && $b->{method} eq 'grub-graphic')
- or $in->ask_warn('', N("You can not use a password with %s",
+ or $in->ask_warn('', N("You cannot use a password with %s",
bootloader::method2text($b->{method})));
$ok && $ok2;
} },
{ label => N("Password (again)"), val => \$b->{password2}, hidden => 1 },
- { text => N("Clean /tmp at each boot"), val => \$clean_tmp, type => 'bool', advanced => 1 },
]) or return 0;
- } else {
- $b->{boot} = $partition_table::mac::bootstrap_part;
- $in->ask_from_({ messages => N("Bootloader main options"),
- title => N("Bootloader main options"),
- interactive_help_id => 'setupYabootGeneral',
- }, [
- { label => N("Bootloader to use"), val => \$b->{method},
- list => \@method_choices, format => \&bootloader::method2text },
- { label => N("Init Message"), val => \$b->{'init-message'} },
- { label => N("Boot device"), val => \$b->{boot}, list => [ get_apple_boot_parts($fstab) ] },
- { label => N("Open Firmware Delay"), val => \$b->{delay} },
- { label => N("Kernel Boot Timeout"), val => \$b->{timeout} },
- { label => N("Enable CD Boot?"), val => \$b->{enablecdboot}, type => "bool" },
- { label => N("Enable OF Boot?"), val => \$b->{enableofboot}, type => "bool" },
- { label => N("Default OS?"), val => \$b->{defaultos}, list => [ 'linux', 'macos', 'macosx', 'darwin' ] },
- ]) or return 0;
- }
#- remove bios mapping if the user changed the boot device
delete $b->{bios} if $b->{boot} ne $prev_boot;
@@ -484,14 +467,6 @@ sub setupBootloader__general {
($enable_lapic ? \&bootloader::set_append_simple : \&bootloader::remove_append_simple)->($b, 'lapic');
}
- if ($prev_clean_tmp != $clean_tmp) {
- if ($clean_tmp && !fs::get::has_mntpoint('/tmp', $all_hds)) {
- push @{$all_hds->{special}}, { device => 'none', mntpoint => '/tmp', fs_type => 'tmpfs' };
- } else {
- @{$all_hds->{special}} = grep { $_->{mntpoint} ne '/tmp' } @{$all_hds->{special}};
- }
- }
-
if (bootloader::main_method($prev_method) eq 'lilo' &&
bootloader::main_method($b->{method}) eq 'grub') {
log::l("switching for lilo to grub, ensure we don't read lilo.conf anymore");
@@ -516,7 +491,8 @@ sub setupBootloader__entries {
my %root_descr = map {
my $info = delete $hd_infos{$_->{rootDevice}};
my $dev = "/dev/$_->{device}";
- my $info_ = $info ? "$dev ($info)" : $dev;
+ my $hint = $info || $_->{info} || $_->{device_LABEL};
+ my $info_ = $hint ? "$dev ($hint)" : $dev;
($dev => $info_, fs::wild_device::from_part('', $_) => $info_);
} @$fstab;
@@ -524,15 +500,13 @@ sub setupBootloader__entries {
if ($e->{type} eq "image") {
@l = (
{ label => N("Image"), val => \$e->{kernel_or_dev}, list => [ map { "/boot/$_" } bootloader::installed_vmlinuz() ], not_edit => 0 },
-{ label => N("Root"), val => \$e->{root}, list => [ map { fs::wild_device::from_part('', $_) } @$fstab ], format => sub { $root_descr{$_[0]} } },
+{ label => N("Root"), val => \$e->{root}, list => [ map { fs::wild_device::from_part('', $_) } grep { !isSwap($_) } @$fstab ], format => sub { $root_descr{$_[0]} } },
{ label => N("Append"), val => \$append },
if_($e->{xen},
{ label => N("Xen append"), val => \$e->{xen_append} }
),
- if_($b->{password}, { label => N("Requires password to boot"), val => \$e->{lock}, type => "bool"}),
- if_(arch() !~ /ppc|ia64/,
+ if_($b->{password}, { label => N("Requires password to boot"), val => \$e->{lock}, type => "bool" }),
{ label => N("Video mode"), val => \$vga, list => [ '', Xconfig::resolution_and_depth::bios_vga_modes() ], format => \&Xconfig::resolution_and_depth::to_string, advanced => 1 },
-),
{ label => N("Initrd"), val => \$e->{initrd}, list => [ map { if_(/^initrd/, "/boot/$_") } all("$::prefix/boot") ], not_edit => 0, advanced => 1 },
{ label => N("Network profile"), val => \$netprofile, list => [ sort(uniq('', $netprofile, network::network::netprofile_list())) ], advanced => 1 },
);
@@ -541,26 +515,15 @@ sub setupBootloader__entries {
{ label => N("Root"), val => \$e->{kernel_or_dev}, list => [ map { "/dev/$_->{device}" } @$fstab, detect_devices::floppies() ] },
);
}
- if (arch() !~ /ppc/) {
@l = (
{ label => N("Label"), val => \$e->{label} },
@l,
{ text => N("Default"), val => \$default, type => 'bool' },
);
- } else {
- unshift @l, { label => N("Label"), val => \$e->{label}, list => ['macos', 'macosx', 'darwin'] };
- if ($e->{type} eq "image") {
- @l = ({ label => N("Label"), val => \$e->{label} },
- (@l[1..2], { label => N("Append"), val => \$append }),
- { label => N("NoVideo"), val => \$e->{novideo}, type => 'bool' },
- { text => N("Default"), val => \$default, type => 'bool' }
- );
- }
- }
$in->ask_from_(
{
- interactive_help_id => arch() =~ /ppc/ ? 'setupYabootAddEntry' : 'setupBootloaderAddEntry',
+ interactive_help_id => 'setupBootloaderAddEntry',
callbacks => {
complete => sub {
$e->{label} or $in->ask_warn('', N("Empty label not allowed")), return 1;
@@ -584,8 +547,7 @@ sub setupBootloader__entries {
my @labels = map { $_->{label} } @{$b->{entries}};
my ($e, $prefix);
if ($in->ask_from_list_('', N("Which type of entry do you want to add?"),
- [ N_("Linux"), arch() =~ /sparc/ ? N_("Other OS (SunOS...)") : arch() =~ /ppc/ ?
- N_("Other OS (MacOS...)") : N_("Other OS (Windows...)") ]
+ [ N_("Linux"), N_("Other OS (Windows...)") ]
) eq "Linux") {
$e = { type => 'image',
root => '/dev/' . fs::get::root($fstab)->{device}, #- assume a good default.
@@ -593,7 +555,7 @@ sub setupBootloader__entries {
$prefix = "linux";
} else {
$e = { type => 'other' };
- $prefix = arch() =~ /sparc/ ? "sunos" : arch() =~ /ppc/ ? "macos" : "windows";
+ $prefix = "windows";
}
$e->{label} = $prefix;
for (my $nb = 0; member($e->{label}, @labels); $nb++) {
@@ -616,7 +578,7 @@ sub setupBootloader__entries {
my @entries = @{$b->{entries}};
my ($index) = grep { $entries[$_]{label} eq $e->{label} } 0..$#entries;
if ($index > 0) {
- (@{$b->{entries}}->[$index - 1], @{$b->{entries}}->[$index]) = (@{$b->{entries}}->[$index], @{$b->{entries}}->[$index - 1]);
+ ($b->{entries}[$index - 1], $b->{entries}[$index]) = ($b->{entries}[$index], $b->{entries}[$index - 1]);
}
1;
};
@@ -626,7 +588,7 @@ sub setupBootloader__entries {
my @entries = @{$b->{entries}};
my ($index) = grep { $entries[$_]{label} eq $e->{label} } 0..$#entries;
if ($index < $#entries) {
- (@{$b->{entries}}->[$index + 1], @{$b->{entries}}->[$index]) = (@{$b->{entries}}->[$index], @{$b->{entries}}->[$index + 1]);
+ ($b->{entries}[$index + 1], $b->{entries}[$index]) = ($b->{entries}[$index], $b->{entries}[$index + 1]);
}
1;
};
@@ -638,7 +600,7 @@ You can create additional entries or change the existing ones."), [ {
format => sub {
my ($e) = @_;
ref($e) ?
- ($b->{default} eq $e->{label} ? "  * " : "   ") . "$e->{label} ($e->{kernel_or_dev})" :
+ ($b->{default} eq $e->{label} ? " * " : " ") . "$e->{label} ($e->{kernel_or_dev})" :
translate($e);
}, list => $b->{entries},
} ], Add => $Add, Modify => $Modify, Remove => $Remove, Up => $Up, Down => $Down)) {
@@ -649,21 +611,87 @@ You can create additional entries or change the existing ones."), [ {
}
}
+sub setupBootloader__grub2 {
+ my ($in, $b, $_all_hds, $_fstab) = @_;
+
+ # update entries (so that we can display their list below):
+ my $error;
+ run_program::rooted($::prefix, 'update-grub2', '2>', \$error) or die "update-grub2 failed: $error";
+
+ # read grub2 auto-generated entries (instead of keeping eg: grub/lilo ones):
+ my $b2 = bootloader::read_grub2();
+
+ # get default parameters:
+ my $append = $b->{default_append} || $b->{entries}[0]{append} || bootloader::get_grub2_append($b2);
+ my $default = $b2->{default};
+
+ require Xconfig::resolution_and_depth;
+
+ require network::network; #- to list network profiles
+ my $vga = Xconfig::resolution_and_depth::from_bios($b->{vga});
+ my $os_prober = run_program::rooted($::prefix, 'rpm', '-q', 'os-prober');
+
+ my $res = $in->ask_from_(
+ {
+ title => N("Bootloader Configuration"),
+ },
+ [
+ { label => N("Default"), val => \$default,
+ list => [ map { $_->{label} } @{$b2->{entries}} ] },
+ { label => N("Append"), val => \$append },
+ { label => N("Video mode"), val => \$vga, list => [ '', Xconfig::resolution_and_depth::bios_vga_modes() ],
+ format => \&Xconfig::resolution_and_depth::to_string, advanced => 1 },
+ { text => N("Do not touch ESP or MBR"), val => \$b->{no_esp_or_mbr}, type => 'bool', advanced => 1,
+ validate => sub {
+ $b->{no_esp_or_mbr} and $in->ask_warn(N("Warning"),
+ N("Not installing on ESP or MBR means that the installation is not bootable unless chain loaded from another OS!"));
+ 1;
+ },
+ },
+ { text => N("Probe Foreign OS"), val => \$os_prober, type => 'bool' },
+ ]);
+ if ($res) {
+ $b->{entries} = $b2->{entries};
+ $b->{default} = $default;
+ $b->{vga} = ref($vga) ? $vga->{bios} : $vga;
+ $b->{default_append} = $append;
+ if ($os_prober) {
+ $in->do_pkgs->ensure_is_installed('os-prober', '/usr/bin/os-prober');
+ } else {
+ $in->do_pkgs->remove('os-prober');
+ }
+ 1;
+ } else {
+ '';
+ }
+}
+
+sub adapt_desktop_for_plasma {
+ my ($desktop) = @_;
+ my %h = (
+ 'Plasma' => '01plasma',
+ 'GNOMEClassic' => 'gnome-classic',
+ );
+ $h{$desktop} ? $h{$desktop} . '.desktop' : lc("${desktop}.desktop");
+}
+
sub get_autologin() {
my %desktop = getVarsFromSh("$::prefix/etc/sysconfig/desktop");
my $gdm_file = "$::prefix/etc/X11/gdm/custom.conf";
- my $kdm_file = common::read_alternative('kdm4-config');
+ my $sddm_file = "$::prefix/etc/sddm.conf";
+ my $lightdm_conffile = "$::prefix/etc/lightdm/lightdm.conf.d/50-mageia-autologin.conf";
+ my $lxdm_conffile = "$::prefix/etc/lxdm/lxdm.conf";
my $autologin_file = "$::prefix/etc/sysconfig/autologin";
my $desktop = $desktop{DESKTOP} || first(sessions());
my %desktop_to_dm = (
GNOME => 'gdm',
- KDE4 => 'kdm',
- xfce4 => 'gdm',
- LXDE => 'gdm',
+ PLASMA => 'sddm',
+ xfce4 => 'lightdm',
+ LXDE => 'lxdm',
);
my %dm_canonical = (
gnome => 'gdm',
- kde => 'kdm',
+ plasma => 'sddm',
);
my $dm =
lc($desktop{DISPLAYMANAGER}) ||
@@ -675,9 +703,16 @@ sub get_autologin() {
if ($dm eq "gdm") {
my %conf = read_gnomekderc($gdm_file, 'daemon');
$autologin_user = text2bool($conf{AutomaticLoginEnable}) && $conf{AutomaticLogin};
- } elsif ($dm eq "kdm") {
- my %conf = read_gnomekderc($kdm_file, 'X-:0-Core');
- $autologin_user = text2bool($conf{AutoLoginEnable}) && $conf{AutoLoginUser};
+ } elsif ($dm eq "sddm") {
+ my %conf = read_gnomekderc($sddm_file, 'Autologin');
+ $autologin_user = $conf{User};
+ } elsif ($dm eq "lightdm") {
+ my %conf = read_gnomekderc($lightdm_conffile, 'Seat:*');
+ $autologin_user = text2bool($conf{'#dummy-autologin'}) && $conf{"autologin-user"};
+ } elsif ($dm eq "lxdm") {
+ my %conf = read_gnomekderc($lxdm_conffile, 'base');
+ $autologin_user = $conf{autologin};
+ $autologin_user =~ s/^.//;
} else {
my %conf = getVarsFromSh($autologin_file);
$autologin_user = text2bool($conf{AUTOLOGIN}) && $conf{USER};
@@ -686,25 +721,30 @@ sub get_autologin() {
{ user => $autologin_user, desktop => $desktop, dm => $dm };
}
+sub is_standalone_autologin_needed {
+ my ($dm) = @_;
+ return member($dm, qw(slim xdm));
+}
+
sub set_autologin {
- my ($do_pkgs, $autologin) = @_;
+ my ($do_pkgs, $autologin, $o_auto) = @_;
log::l("set_autologin $autologin->{user} $autologin->{desktop}");
my $do_autologin = bool2text($autologin->{user});
$autologin->{dm} ||= 'xdm';
- $do_pkgs->ensure_is_installed($autologin->{dm})
+ $do_pkgs->ensure_is_installed($autologin->{dm}, undef, $o_auto)
or return;
- if ($autologin->{user} && $autologin->{dm} eq 'xdm') {
- $do_pkgs->ensure_is_installed('autologin', '/usr/bin/startx.autologin')
+ if ($autologin->{user} && is_standalone_autologin_needed($autologin->{dm})) {
+ $do_pkgs->ensure_is_installed('autologin', '/usr/bin/startx.autologin', $o_auto)
or return;
}
- #- Configure KDM / MDKKDM
- my $kdm_conffile = common::read_alternative('kdm4-config');
- eval { common::update_gnomekderc_no_create($kdm_conffile, 'X-:0-Core' => (
- AutoLoginEnable => $do_autologin,
- AutoLoginUser => $autologin->{user},
- )) } if -e $kdm_conffile;
+ #- Configure SDDM
+ my $sddm_conffile = "$::prefix/etc/sddm.conf";
+ eval { common::update_gnomekderc_no_create($sddm_conffile, 'Autologin' => (
+ Session => adapt_desktop_for_plasma($autologin->{desktop}),
+ User => $autologin->{user},
+ )) } if -e $sddm_conffile;
#- Configure GDM
my $gdm_conffile = "$::prefix/etc/X11/gdm/custom.conf";
@@ -713,8 +753,33 @@ sub set_autologin {
AutomaticLogin => $autologin->{user},
)) } if -e $gdm_conffile;
+ #- Configure LIGHTDM
+ my $lightdm_conffile = "$::prefix/etc/lightdm/lightdm.conf.d/50-mageia-autologin.conf";
+ eval { update_gnomekderc($lightdm_conffile, 'Seat:*' => (
+ '#dummy-autologin' => $do_autologin,
+ 'autologin-user' => $autologin->{user}
+ )) } if -e $lightdm_conffile;
+
+ #- Configure LXDM
+ my $lxdm_conffile = "$::prefix/etc/lxdm/lxdm.conf";
+ eval { update_gnomekderc($lxdm_conffile, 'base' => (
+ if_($autologin->{user}, 'autologin' => '@' . $autologin->{user})
+ ));
+ if ($autologin->{user} && $autologin->{desktop} && !member($autologin->{desktop}, qw(default failsafe))) {
+ my $xsession_file = find {
+ my %xsession = read_gnomekderc($_, 'Desktop Entry');
+ $xsession{Name} eq $autologin->{desktop};
+ } glob("$::prefix/usr/share/xsessions/*.desktop");
+ $xsession_file =~ s!\.[^.]+$!!;
+ $xsession_file =~ s!.*/!!;
+ $xsession_file ||= $autologin->{desktop};
+ update_gnomekderc($lxdm_conffile, $autologin->{user} => (
+ 'user' => $autologin->{user},
+ 'session' => $xsession_file,
+ )) } } if -e $lxdm_conffile;
+
my $xdm_autologin_cfg = "$::prefix/etc/sysconfig/autologin";
- if ($autologin->{dm} eq 'xdm') {
+ if (is_standalone_autologin_needed($autologin->{dm})) {
setVarsInShMode($xdm_autologin_cfg, 0644,
{ USER => $autologin->{user}, AUTOLOGIN => bool2yesno($autologin->{user}), EXEC => '/usr/bin/startx.autologin' });
} else {
@@ -771,7 +836,7 @@ sub writeandclean_ldsoconf {
my @l = chomp_(cat_($file));
my @default = ('/lib', '/usr/lib'); #- no need to have /lib and /usr/lib in ld.so.conf
- my @suggest = ('/usr/X11R6/lib', '/usr/lib/qt3/lib'); #- needed for upgrade where package renaming can cause this to disappear
+ my @suggest = ('/usr/lib/qt3/lib'); #- needed for upgrade where package renaming can cause this to disappear
if (arch() =~ /x86_64/) {
@default = map { $_, $_ . '64' } @default;
@@ -866,7 +931,7 @@ sub ask_user_and_root {
my $id = $u->{$field} or return 'ok';
my $name = $field eq 'uid' ? N("User ID") : N("Group ID");
$id =~ /^\d+$/ or $in->ask_warn('', N("%s must be a number", $name)), return;
- $id >= 500 or $in->ask_yesorno('', N("%s should be above 500. Accept anyway?", $name)) or return;
+ $id >= 1000 or $in->ask_yesorno('', N("%s should be above 1000. Accept anyway?", $name)) or return;
'ok';
};
my $ret = $in->ask_from_(
@@ -875,7 +940,9 @@ sub ask_user_and_root {
if_($::isInstall && $superuser, cancel => ''),
}, [
$superuser ? (
+ if_(0,
{ text => N("Enable guest account"), val => \$xguest, type => 'bool', advanced => 1 },
+ ),
{ label => N("Set administrator (root) password"), title => 1 },
{ label => N("Password"), val => \$superuser->{password}, hidden => 1, alignment => 'right', weakness_check => 1,
focus => sub { 1 },
@@ -889,7 +956,7 @@ sub ask_user_and_root {
),
{ label => N("Real name"), val => \$u->{realname}, alignment => 'right', focus_out => sub {
$u->{name} ||= lc(Locale::gettext::iconv($u->{realname}, "utf-8", "ascii//TRANSLIT"));
- $u->{name} =~ s/[^a-zA-Z0-9_-]//g; # drop any charcter that would break login program
+ $u->{name} =~ s/[^a-zA-Z0-9_-]//g; # drop any character that would break login program
},
focus => sub { !$superuser },
},
@@ -902,9 +969,10 @@ sub ask_user_and_root {
{ label => N("Shell"), val => \$u->{shell}, list => [ shells() ], advanced => 1 },
{ label => N("User ID"), val => \$u->{uid}, advanced => 1, validate => sub { $validate_uid_gid->('uid') } },
{ label => N("Group ID"), val => \$u->{gid}, advanced => 1, validate => sub { $validate_uid_gid->('gid') } },
- if_($security > 3,
+ if_($security >= 1,
+ { label => N("Extra Groups:"), advanced => 1, title => 1 },
map {
- { label => $_, val => \$groups{$_}, text => $high_security_groups{$_}, type => 'bool' };
+ { label => $_, val => \$groups{$_}, text => $high_security_groups{$_}, type => 'bool', advanced => 1 };
} keys %high_security_groups,
),
],
@@ -924,7 +992,10 @@ sub ask_user_and_root {
}
sub sessions() {
- split(' ', run_program::rooted_get_stdout($::prefix, '/usr/sbin/chksession', '-l'));
+ my $old = chdir('$::prefix/usr/share/xsessions/');
+ my @l = map { s/.desktop$//; $_ } glob("*.desktop");
+ chdir($old);
+ @l;
}
sub sessions_with_order() {
my %h = map { /(.*)=(.*)/ } split(' ', run_program::rooted_get_stdout($::prefix, '/usr/sbin/chksession', '-L'));
@@ -934,18 +1005,25 @@ sub sessions_with_order() {
sub urpmi_add_all_media {
my ($in, $o_previous_release) = @_;
- my $binary = find { whereis_binary($_, $::prefix) } 'gurpmi.addmedia', 'urpmi.addmedia' or return;
+ my $binary = find { whereis_binary($_, $::prefix) } if_(check_for_xserver(), 'gurpmi.addmedia'), 'urpmi.addmedia';
+ if (!$binary) {
+ log::l("urpmi.addmedia not found!");
+ return;
+ }
#- configure urpmi media if network is up
require network::tools;
- return if !network::tools::has_network_connection();
+ if (!network::tools::has_network_connection()) {
+ log::l("no network connexion!");
+ return;
+ }
my $wait;
my @options = ('--distrib', '--mirrorlist', '$MIRRORLIST');
if ($binary eq 'urpmi.addmedia') {
$wait = $in->wait_message(N("Please wait"), N("Please wait, adding media..."));
} elsif ($in->isa('interactive::gtk')) {
push @options, '--silent-success';
- mygtk2::flush();
+ mygtk3::flush();
}
my $reason = join(',', $o_previous_release ?
@@ -955,7 +1033,29 @@ sub urpmi_add_all_media {
local $ENV{URPMI_ADDMEDIA_REASON} = $reason;
my $log_file = '/root/drakx/updates.log';
- run_program::rooted($::prefix, $binary, '>>', $log_file, '2>>', $log_file, @options);
+ my $val = run_program::rooted($::prefix, $binary, '>>', $log_file, '2>>', $log_file, @options);
+
+ undef $wait;
+ $val;
+}
+
+sub format_wm {
+ my ($wm) = @_;
+ return {
+ cinnamon => 'Cinnamon',
+ enlightenment => 'Enlightenment',
+ 'gnome-classic' => 'Gnome Classic',
+ gnome => 'Gnome',
+ i3 => 'I3',
+ 'i3-with-shmlog' => 'I3 with shmlog',
+ lxqt => 'LxQt',
+ mate => 'Mate',
+ openbox => 'OpenBox',
+ 'plasma-mediacenter' => 'Plasma Mediacenter',
+ '01plasma' => 'Plasma',
+ sugar => 'Sugar',
+ xfce => 'XFCE',
+ }->{$wm};
}
sub autologin {
@@ -976,7 +1076,7 @@ sub autologin {
messages => N("I can set up your computer to automatically log on one user.") },
[ { text => N("Use this feature"), val => \$use_autologin, type => 'bool' },
{ label => N("Choose the default user:"), val => \$o->{autologin}, list => \@users, disabled => sub { !$use_autologin } },
- { label => N("Choose the window manager to run:"), val => \$o->{desktop}, list => \@wm, disabled => sub { !$use_autologin } } ]
+ { label => N("Choose the window manager to run:"), val => \$o->{desktop}, list => \@wm, disabled => sub { !$use_autologin }, format => \&format_wm } ]
);
delete $o->{autologin} if !$use_autologin;
} else {
@@ -988,38 +1088,33 @@ sub display_release_notes {
my ($in, $release_notes) = @_;
if (!$in->isa('interactive::gtk')) {
$in->ask_from_({ title => N("Release Notes"),
- messages => $release_notes, #formatAlaTeX(messages::main_license()),
+ messages => $release_notes,
}, [ {} ]);
return;
}
- # workaround too small fonts:
- $release_notes =~ s!(<head>)!$1 <style type="text/css">
- body { font-family: sans-serif; font-size: 13px }
- table { font-family: sans-serif; font-size: 13px }
- </style>!x;
-
- require Gtk2::WebKit;
- require ugtk2;
- ugtk2->import(':all');
- require mygtk2;
- mygtk2->import('gtknew');
- my $view = gtknew('WebKit_View', no_popup_menu => 1);
- $view->load_html_string($release_notes, '/');
+ require Gtk3::WebKit2;
+ Gtk3::WebKit2->import;
+ require ugtk3;
+ ugtk3->import(':all');
+ require mygtk3;
+ mygtk3->import('gtknew');
+ my $view = gtknew('WebKit2_WebView', no_popup_menu => 1);
+ $view->load_html($release_notes, '/');
- my $w = ugtk2->new(N("Release Notes"), transient => $::main_window, modal => 1, pop_it => 1);
+ my $w = ugtk3->new(N("Release Notes"), transient => $::main_window, modal => 1, pop_it => 1);
gtkadd($w->{rwindow},
- gtkpack_(Gtk2::VBox->new,
- 1, create_scrolled_window(ugtk2::gtkset_border_width($view, 5),
+ gtkpack_(Gtk3::VBox->new,
+ 1, create_scrolled_window(ugtk3::gtkset_border_width($view, 5),
[ 'never', 'automatic' ],
),
0, gtkpack(create_hbox('end'),
gtknew('Button', text => N("Close"),
- clicked => sub { Gtk2->main_quit })
+ clicked => sub { Gtk3->main_quit })
),
),
);
- mygtk2::set_main_window_size($w->{rwindow});
+ mygtk3::set_main_window_size($w->{rwindow});
$w->{real_window}->grab_focus;
$w->{real_window}->show_all;
$w->main;
@@ -1040,7 +1135,7 @@ sub get_release_notes {
my $d = find { -e "$_/$file" } glob_("/usr/share/doc/*-release-*");
$d && cat_("$d/$file");
}
- } "release-notes$ext", 'release-notes.' . arch() . $ext);
+ } "release-notes$ext", 'release-notes.' . $ext);
# we do not handle links:
$release_notes =~ s!<a href=".*?">(.*?)</a>!$1!g;
@@ -1050,26 +1145,22 @@ sub get_release_notes {
sub run_display_release_notes {
my ($release_notes) = @_;
output('/tmp/release_notes.html', $release_notes);
+ local $ENV{LC_ALL} = $::o->{locale}{lang} || 'C';
run_program::raw({ detach => 1 }, '/usr/bin/display_release_notes.pl');
}
sub acceptLicense {
- my ($in, $google) = @_;
+ my ($in) = @_;
require messages;
my $release_notes = get_release_notes($in);
my $r = $::testing ? 'Accept' : 'Refuse';
- my $license = join("\n\n\n",
- messages::main_license($google, $google),
- messages::warning_about_patents(),
- if_($google, messages::google_provisions()));
-
$in->ask_from_({ title => N("License agreement"),
focus_first => 1,
cancel => N("Quit"),
- messages => formatAlaTeX($license),
+ messages => formatAlaTeX(messages::main_license()),
interactive_help_id => 'acceptLicense',
callbacks => { ok_disabled => sub { $r eq 'Refuse' } },
},
@@ -1094,7 +1185,7 @@ sub reboot() {
$o->exit;
} else {
# when refusing license in finish-install:
- exec("/sbin/reboot");
+ exec("/bin/reboot");
}
}
@@ -1130,10 +1221,11 @@ sub selectLanguage_install {
my $non_utf8 = 0;
add2hash($common, { cancel => '',
focus_first => 1,
- advanced_messages => formatAlaTeX(N("Mandriva Linux can support multiple languages. Select
+ advanced_messages => formatAlaTeX(N("%s can support multiple languages. Select
the languages you would like to install. They will be available
-when your installation is complete and you restart your system.")),
- advanced_label => N("Multi languages"),
+when your installation is complete and you restart your system.", N("Mageia"))),
+ advanced_label => N("Multiple languages"),
+ advanced_title => N("Select Additional Languages"),
});
$in->ask_from_($common, [
@@ -1177,7 +1269,7 @@ sub selectLanguage_standalone {
]);
$locale->{utf8} = !$non_utf8;
lang::set($locale);
- Gtk2->set_locale if $in->isa('interactive::gtk');
+ c::init_setlocale() if $in->isa('interactive::gtk');
lang::lang_changed($locale) if $old_lang ne $locale->{lang};
}
@@ -1221,7 +1313,7 @@ sub selectCountry {
$in->ask_from_(
{ title => N("Country / Region"),
messages => N("Please choose your country"),
- interactive_help_id => 'misc-params.html#drakxid-selectCountry',
+ interactive_help_id => 'selectCountry.html',
if_(@best, advanced_messages => N("Here is the full list of available countries")),
advanced_label => @best ? N("Other Countries") : N("Advanced"),
},
@@ -1247,26 +1339,32 @@ sub set_login_serial_console {
substInFile { s/^s$port:.*//; $_ = $line if eof } "$::prefix/etc/inittab";
}
-sub report_bug {
- my (@other) = @_;
-
- sub header { "
+sub header { "
********************************************************************************
* $_[0]
********************************************************************************";
- }
+}
+
+sub fdisk() {
+ my @devs = grep { !m!^/dev/(loop|ram)\d+! && !/\d$/ } map { "/dev/$_->{dev}" } fs::proc_partitions::read_raw();
+ `fdisk -l @devs`;
+
+}
+
+sub report_bug {
+ my (@other) = @_;
join '', map { chomp; "$_\n" }
header("lspci"), detect_devices::stringlist(),
header("pci_devices"), cat_("/proc/bus/pci/devices"),
- header("dmidecode"), `dmidecode`,
- header("fdisk"), arch() =~ /ppc/ ? `pdisk -l` : `fdisk -l`,
+ header("dmidecode"), arch() =~ /86/ ? `dmidecode` : (),
+ header("fdisk"), `fdisk -l`,
header("scsi"), cat_("/proc/scsi/scsi"),
header("/sys/bus/scsi/devices"), -d '/sys/bus/scsi/devices' ? `ls -l /sys/bus/scsi/devices` : (),
header("lsmod"), cat_("/proc/modules"),
header("cmdline"), cat_("/proc/cmdline"),
header("pcmcia: stab"), cat_("$::prefix/var/lib/pcmcia/stab") || cat_("$::prefix/var/run/stab"),
- header("usb"), cat_("/proc/bus/usb/devices"),
+ header("usb"), cat_("/sys/kernel/debug/usb/devices"),
header("partitions"), cat_("/proc/partitions"),
header("cpuinfo"), cat_("/proc/cpuinfo"),
header("syslog"), cat_("/tmp/syslog") || cat_("$::prefix/var/log/syslog"),
@@ -1281,10 +1379,14 @@ sub report_bug {
header("grub: menu.lst"), join('', map { s/^(\s*password)\s+(.*)/$1 xxx/; $_ } cat_("$::prefix/boot/grub/menu.lst")),
header("grub: install.sh"), cat_("$::prefix/boot/grub/install.sh"),
header("grub: device.map"), cat_("$::prefix/boot/grub/device.map"),
+ header("grub2: grub"), cat_("$::prefix/etc/default/grub"),
+ header("grub2: grub.cfg"), join('', map { s/^(\s*password_pbkdf2)\s+grub.pbkdf2.*/$1 xxx/; $_ } cat_("$::prefix/boot/grub2/grub.cfg")),
+ header("grub2: install.sh"), cat_("$::prefix/boot/grub2/install.sh"),
header("xorg.conf"), cat_("$::prefix/etc/X11/xorg.conf"),
header("urpmi.cfg"), cat_("$::prefix/etc/urpmi/urpmi.cfg"),
header("modprobe.preload"), cat_("$::prefix/etc/modprobe.preload"),
header("sysconfig/i18n"), cat_("$::prefix/etc/sysconfig/i18n"),
+ header("locale.conf"), cat_("$::prefix/etc/locale.conf"),
header("/proc/iomem"), cat_("/proc/iomem"),
header("/proc/ioport"), cat_("/proc/ioports"),
map_index { even($::i) ? header($_) : $_ } @other;
@@ -1331,7 +1433,7 @@ Allowing this will permit users to simply click on \"Share\" in konqueror and na
nfs => [ 'nfs-utils', 'nfs-server',
N("NFS: the traditional Unix file sharing system, with less support on Mac and Windows.")
],
- smb => [ 'samba-server', 'smb',
+ smb => [ 'samba', 'smb',
N("SMB: a file sharing system used by Windows, Mac OS X and many modern Linux systems.")
],
);
@@ -1347,7 +1449,7 @@ Allowing this will permit users to simply click on \"Share\" in konqueror and na
}
foreach (keys %types) {
my ($pkg, $service, $_descr) = @{$types{$_}};
- my $file = "/etc/init.d/$service";
+ my $file = "/usr/lib/systemd/system/${service}.service";
if ($l{$_}) {
$in->do_pkgs->ensure_is_installed($pkg, $file) or return;
services::start($service);
@@ -1381,7 +1483,6 @@ You can use userdrake to add a user to this group.")
sub monitor_full_edid() {
return if $::noauto;
- devices::make('zero');
my ($vbe, $edid);
{
# prevent warnings in install's logs:
@@ -1410,7 +1511,7 @@ sub monitor_full_edid() {
# FIXME: is buggy regarding multiple sessions
sub running_window_manager() {
- my @window_managers = qw(ksmserver kwin gnome-session icewm wmaker afterstep fvwm fvwm2 fvwm95 mwm twm enlightenment xfce4-session blackbox sawfish olvwm fluxbox compiz drakx-matchbox-window-manager);
+ my @window_managers = qw(drakx-matchbox-window-manager ksmserver kwin gnome-session icewm wmaker afterstep fvwm fvwm2 fvwm95 mwm twm enlightenment xfce4-session blackbox sawfish olvwm fluxbox compiz lxsession);
foreach (@window_managers) {
my @pids = fuzzy_pidofs(qr/\b$_\b/) or next;
@@ -1435,10 +1536,11 @@ sub ask_window_manager_to_logout {
'gnome-session' => "gnome-session-save --kill",
'icewm' => "killall -QUIT icewm",
'xfce4-session' => "xfce4-session-logout --logout",
+ 'lxsession' => "lxde-logout",
);
my $cmd = $h{$wm} or return;
if (member($wm, 'ksmserver', 'kwin', 'gnome-session') && $> == 0) {
- #- we can not use dcop when we are root
+ #- we cannot use dcop when we are root
if (my $user = $ENV{USERHELPER_UID} && getpwuid($ENV{USERHELPER_UID})) {
$cmd = "su $user -c '$cmd'";
} else {
@@ -1478,7 +1580,7 @@ sub ask_for_X_restart {
if (!$wm) {
# no window manager, ctrl-alt-del may not be supported, but we still have to restart X..
$in->ask_okcancel('', N("You need to logout and back in again for changes to take effect. Press OK to logout now."), 1) or return;
- system('killall Xorg');
+ system('killall', 'Xorg');
}
else {
$in->ask_okcancel('', N("You need to log out and back in again for changes to take effect"), 1) or return;
@@ -1538,7 +1640,7 @@ sub configure_time_more {
my $tz_prefix = timezone::get_timezone_prefix();
local $ENV{TZ} = ':' . $tz_prefix . '/' . $timezone->{timezone};
- $in->ask_from_({ interactive_help_id => 'misc-params#drakxid-configureTimezoneGMT',
+ $in->ask_from_({ interactive_help_id => 'configureTimezoneUTC',
title => N("Date, Clock & Time Zone Settings"),
}, [
{ label => N("Date, Clock & Time Zone Settings"), title => 1 },