diff options
Diffstat (limited to 'perl-install/harddrake/autoconf.pm')
| -rw-r--r-- | perl-install/harddrake/autoconf.pm | 141 | 
1 files changed, 125 insertions, 16 deletions
| diff --git a/perl-install/harddrake/autoconf.pm b/perl-install/harddrake/autoconf.pm index 061d738af..fba5078cd 100644 --- a/perl-install/harddrake/autoconf.pm +++ b/perl-install/harddrake/autoconf.pm @@ -1,46 +1,155 @@  package harddrake::autoconf;  use common; -use any;  sub xconf { -    my ($modules_conf, $o) = @_; +    my ($modules_conf, $o, $o_skip_fb_setup, $o_resolution_wanted) = @_;      log::l('automatic XFree configuration');      require Xconfig::default; -    $o->{raw_X} = Xconfig::default::configure(do_pkgs_standalone->new); +    require do_pkgs; +    my $do_pkgs = do_pkgs_standalone->new; +    $o->{raw_X} = Xconfig::default::configure($do_pkgs); +    my $old_x = { if_($o_resolution_wanted, resolution_wanted => $o_resolution_wanted) }; +      require Xconfig::main; -    require do_pkgs; -    Xconfig::main::configure_everything_auto_install($o->{raw_X}, do_pkgs_standalone->new, {}, { allowFB => 1 }); +    Xconfig::main::configure_everything_auto_install($o->{raw_X}, $do_pkgs, $old_x, { allowFB => listlength(cat_("/proc/fb")), skip_fb_setup => $o_skip_fb_setup }); + +    #- always disable compositing desktop effects when configuring a new video card +    require Xconfig::glx; +    Xconfig::glx::write({});      modules::load_category($modules_conf, 'various/agpgart');   } +sub setup_ethernet_device { +    my ($in, $device) = @_; + +    require network::connection; +    require network::connection::ethernet; +    require network::connection::wireless; +    my @connection_types = qw(network::connection::ethernet  network::connection::wireless); +    my @all_connections = map { $_->get_connections(automatic_only => 1) } @connection_types; +    my $interface = network::connection::ethernet::device_to_interface($device) +      or return; +    my $connection = find { $_->get_interface eq $interface } @all_connections +      or return; + +    require network::connection_manager; +    my $net = {}; +    network::network::read_net_conf($net); +    my $cmanager = network::connection_manager->new($in, $net); +    $cmanager->set_connection($connection); + +    # this will installed required packages +    $cmanager->setup_connection; +} +  sub network_conf { -    my ($obj) = @_; -    require network::network; -    network::network::easy_dhcp($obj->{modules_conf}, $obj->{netc}, $obj->{intf}) and $obj->{netcnx}{type} = 'lan'; +    my ($modules_conf, $in, $added) = @_; +    $modules_conf->remove_alias_regexp('^(wlan|eth)[0-9]*$'); +    modules::load_category($modules_conf, 'network/main|gigabit|usb|wireless|firewire|pcmcia'); + +    setup_ethernet_device($in, $_) foreach @{$added || {}}; + +    require network::connection::ethernet; +    network::connection::ethernet::configure_eth_aliases($modules_conf); +    require network::rfswitch; +    network::rfswitch::configure(); +    require network::shorewall; +    network::shorewall::update_interfaces_list(); +    $modules_conf->write;  }  sub mouse_conf {      my ($modules_conf) = @_;      require do_pkgs;      require mouse; -    mouse::write_conf(do_pkgs_standalone->new, $modules_conf, mouse::detect($modules_conf), 1); +    mouse::write_conf(do_pkgs_standalone->new, $modules_conf, my $mouse = mouse::detect($modules_conf), 1); +    mouse::load_modules($mouse);  }  sub pcmcia {      my ($pcic) = @_; +    require modules; +    modules::set_preload_modules("pcmcia", if_($pcic, $pcic)); +} + +sub bluetooth { +    my ($enable) = @_; +    # do not disable bluetooth service if adapter disappears +    # (for example if disabled by Fn keys) +    # systemd will automatically disable the service if needed +    return if !$enable; + +#- FIXME: make sure these packages are installed when needed +#     if ($enable) { +#         require do_pkgs; +#         my $do_pkgs = do_pkgs_standalone->new; +#         $do_pkgs->ensure_is_installed("bluez-utils", "/usr/bin/rfcomm"); +#     } +    require services; +    services::set_status("bluetooth", $enable); +    my $kbluetoothd_cfg = '/etc/kde/kbluetoothrc'; +    update_gnomekderc($kbluetoothd_cfg, +                      'General', +                      'AutoStart' => bool2text($enable)) if -f $kbluetoothd_cfg; +} + +sub laptop { +    my ($on_laptop) = @_; +#- FIXME: make sure these packages are installed when needed +#     require do_pkgs; +#     my $do_pkgs = do_pkgs_standalone->new; +#     if ($on_laptop) { +#         $do_pkgs->ensure_is_installed("cpufreq", "/etc/rc.d/init.d/cpufreq"); +#         $do_pkgs->ensure_is_installed("apmd", "/usr/bin/apm"); +#         $do_pkgs->ensure_is_installed("hotkeys", "/usr/bin/hotkeys"); +#         $do_pkgs->ensure_is_installed("laptop-mode-tools", "/usr/sbin/laptop_mode"); +#     } else { +#         $do_pkgs->ensure_is_installed("numlock", "/etc/rc.d/init.d/numlock"); +#     } +    require services; +    services::set_status("apmd", -e "/proc/apm"); +    services::set_status("laptop-mode", $on_laptop); +    services::set_status("numlock", !$on_laptop); +} -    #- should be set after installing the package above otherwise the file will be renamed. -    setVarsInSh("$::prefix/etc/sysconfig/pcmcia", { -     PCMCIA    => bool2yesno($pcic), -     PCIC      => $pcic, -     PCIC_OPTS => "", -     CORE_OPTS => "", -    }); +sub cpufreq() { +    require cpufreq; +    modules::set_preload_modules("cpufreq", cpufreq::get_modules()); +} + +sub floppy() { +    require detect_devices; +    modules::set_preload_modules("floppy", if_(detect_devices::floppy(), "floppy")); +} + +sub fix_aliases { +    my ($modules_conf) = @_; +    require modalias; +    my %new_aliases; +    #- first pass: find module targets whose modalias is not valid anymore +    foreach my $module ($modules_conf->modules) { +	if (my $aliased_to = $modules_conf->get_alias($module)) { +	    my @valid_modaliases = modalias::get_modules($module, 'skip_config') or next; +	    my ($found, $others) = partition { $_ eq $aliased_to } @valid_modaliases; +	    $new_aliases{$aliased_to} = @{$others || []} == 1 && $others->[0] if is_empty_array_ref($found); +	} +    } +    #- second pass: adapt module targets that are not valid anymore +    foreach my $module ($modules_conf->modules) { +	if (my $aliased_to = $modules_conf->get_alias($module)) { +	    if (my $new = exists $new_aliases{$aliased_to} && $new_aliases{$aliased_to}) { +		$modules_conf->set_alias($module, $new); +	    } else { +		$modules_conf->remove_alias($module); +	    } +	} +    } +    $modules_conf->write;  }  1; | 
