diff options
Diffstat (limited to 'perl-install/network/network.pm')
-rw-r--r-- | perl-install/network/network.pm | 367 |
1 files changed, 201 insertions, 166 deletions
diff --git a/perl-install/network/network.pm b/perl-install/network/network.pm index abd0cf486..12085f636 100644 --- a/perl-install/network/network.pm +++ b/perl-install/network/network.pm @@ -3,48 +3,38 @@ package network::network; # $Id$wir #-###################################################################################### #- misc imports #-###################################################################################### - -use strict; - use Socket; + use common; use detect_devices; use run_program; -use network::tools; use any; -use vars qw(@ISA @EXPORT); use log; +use vars qw(@ISA @EXPORT); @ISA = qw(Exporter); -@EXPORT = qw(add2hosts addDefaultRoute configureNetwork2 dns dnsServers down_it findIntf gateway guessHostname is_ip is_ip_forbidden masked_ip netmask read_all_conf read_conf read_interface_conf read_resolv_conf resolv sethostname up_it write_conf write_resolv_conf); +@EXPORT = qw(resolv configureNetworkIntf netmask dns is_ip masked_ip findIntf addDefaultRoute write_interface_conf read_all_conf dnsServers guessHostname configureNetworkNet read_resolv_conf read_interface_conf add2hosts gateway configureNetwork2 write_conf sethostname miscellaneousNetwork down_it read_conf write_resolv_conf up_it); #-###################################################################################### #- Functions #-###################################################################################### sub read_conf { my ($file) = @_; - +{ getVarsFromSh($file) }; -} - -sub read_resolv_conf_raw { - my ($file) = @_; - $file ||= "$::prefix/etc/resolv.conf"; - { nameserver => [ cat_($file) =~ /^\s*nameserver\s+(\S+)/mg ], - search => [ if_(cat_($file) =~ /^\s*search\s+(.*)/m, split(' ', $1)) ] }; + my %netc = getVarsFromSh($file); + \%netc; } sub read_resolv_conf { my ($file) = @_; - my $resolv_conf = read_resolv_conf_raw($file); - +{ - (mapn { $_[0] => $_[1] } [ qw(dnsServer dnsServer2 dnsServer3) ], $resolv_conf->{nameserver}), - (mapn { $_[0] => $_[1] } [ qw(DOMAINNAME DOMAINNAME2 DOMAINNAME3) ], $resolv_conf->{search}), - }; + my @l = map { if_(/^\s*nameserver\s+(\S+)/, $1) } cat_($file); + + my %netc = mapn { $_[0] => $_[1] } [ qw(dnsServer dnsServer2 dnsServer3) ], \@l; + \%netc; } sub read_interface_conf { my ($file) = @_; - my %intf = getVarsFromSh($file); + my %intf = getVarsFromSh($file) or die "cannot open file $file: $!"; $intf{BOOTPROTO} ||= 'static'; $intf{isPtp} = $intf{NETWORK} eq '255.255.255.255'; @@ -52,31 +42,6 @@ sub read_interface_conf { \%intf; } -sub read_dhcpd_conf { - my ($file) = @_; - $file ||= "$::prefix/etc/dhcpd.conf"; - { option_routers => [ cat_($file) =~ /^\s*option routers\s+(\S+);/mg ], - subnet_mask => [ if_(cat_($file) =~ /^\s*option subnet-mask\s+(.*);/mg, split(' ', $1)) ], - domain_name => [ if_(cat_($file) =~ /^\s*option domain-name\s+"(.*)";/mg, split(' ', $1)) ], - domain_name_servers => [ if_(cat_($file) =~ /^\s*option domain-name-servers\s+(.*);/m, split(' ', $1)) ], - dynamic_bootp => [ if_(cat_($file) =~ /^\s*range dynamic-bootp\s+\S+\.(\d+)\s+\S+\.(\d+)\s*;/m, split(' ', $1)) ], - default_lease_time => [ if_(cat_($file) =~ /^\s*default-lease-time\s+(.*);/m, split(' ', $1)) ], - max_lease_time => [ if_(cat_($file) =~ /^\s*max-lease-time\s+(.*);/m, split(' ', $1)) ] }; -} - -sub read_tmdns_conf { - my ($file) = @_; - local *F; open F, $file or die "cannot open file $file: $!"; - local $_; - my %outf; - - while (<F>) { - ($outf{ZEROCONF_HOSTNAME}) = /^\s*hostname\s*=\s*(\w+)/ and return \%outf; - } - - \%outf; -} - sub up_it { my ($prefix, $intfs) = @_; $_->{isUp} and return foreach values %$intfs; @@ -94,24 +59,25 @@ sub down_it { sub write_conf { my ($file, $netc) = @_; - if ($netc->{HOSTNAME} && $netc->{HOSTNAME} =~ /\.(.+)$/) { - $netc->{DOMAINNAME} = $1; + if ($netc->{HOSTNAME}) { + $netc->{HOSTNAME} =~ /\.(.*)$/; + $1 and $netc->{DOMAINNAME} = $1; } - $netc->{NETWORKING} = 'yes'; - - setVarsInSh($file, $netc, qw(HOSTNAME NETWORKING GATEWAY GATEWAYDEV NISDOMAIN)); -} + ($netc->{DOMAINNAME}) ||= 'localdomain'; + add2hash($netc, { + NETWORKING => "yes", + FORWARD_IPV4 => "false", + HOSTNAME => "localhost.$netc->{DOMAINNAME}", + }); -sub write_zeroconf { - my ($file, $zhostname) = @_; - eval { substInFile { s/^\s*(hostname)\s*=.*/$1 = $zhostname/ } $file }; + setVarsInSh($file, $netc, qw(NETWORKING FORWARD_IPV4 DHCP_HOSTNAME HOSTNAME DOMAINNAME GATEWAY GATEWAYDEV NISDOMAIN)); } sub write_resolv_conf { my ($file, $netc) = @_; my %new = ( - search => [ grep { $_ } uniq(@$netc{'DOMAINNAME', 'DOMAINNAME2', 'DOMAINNAME3'}) ], + search => [ grep { $_ } uniq(@$netc{'DOMAINNAME', 'DOMAINNAME2'}) ], nameserver => [ grep { $_ } uniq(@$netc{'dnsServer', 'dnsServer2', 'dnsServer3'}) ], ); @@ -142,43 +108,32 @@ sub write_resolv_conf { my @old = map { "# nameserver $_\n" } @{$prev{nameserver}}; @new, @old; }; - output_with_perm($file, 0644, @search, @nameserver, (map { "# $_\n" } @unknown), "\n# ppp temp entry\n"); - + output($file, @search, @nameserver, (map { "# $_\n" } @unknown), "\n# ppp temp entry\n"); + #-res_init(); # reinit the resolver so DNS changes take affect 1; } else { - log::explanations("neither domain name nor dns server are configured"); + log::l("neither domain name nor dns server are configured"); 0; } } sub write_interface_conf { - my ($file, $intf, $_netc, $prefix) = @_; - - if ($intf->{HWADDR} && -e "$prefix/sbin/ip") { - $intf->{HWADDR} = undef; - if (my $s = `LC_ALL= LANG= $prefix/sbin/ip -o link show $intf->{DEVICE} 2>/dev/null`) { - if ($s =~ m|.*link/ether\s([0-9a-z:]+)\s|) { - $intf->{HWADDR} = $1; - } - } - } + my ($file, $intf, $prefix) = @_; + my @ip = split '\.', $intf->{IPADDR}; my @mask = split '\.', $intf->{NETMASK}; - + my $hwaddr; + $::o->{miscellaneous}{track_network_id} and $hwaddr = -e "$prefix/sbin/ip" && `LC_ALL= LANG= $prefix/sbin/ip -o link show $intf->{DEVICE} 2>/dev/null`; + if ($hwaddr) { chomp $hwaddr; $hwaddr =~ s/.*link\/ether\s([0-9a-z:]+)\s.*/$1/ } + $hwaddr and $intf->{HWADDR} = undef; add2hash($intf, { BROADCAST => join('.', mapn { int($_[0]) | ((~int($_[1])) & 255) } \@ip, \@mask), NETWORK => join('.', mapn { int($_[0]) & $_[1] } \@ip, \@mask), - ONBOOT => bool2yesno(!member($intf->{DEVICE}, map { $_->{device} } detect_devices::pcmcia_probe())), + ONBOOT => bool2yesno(!member($intf->{DEVICE}, map { $_->{device} } detect_devices::probeall())), + if_($::o->{miscellaneous}{track_network_id}, HWADDR => $hwaddr) }); - - $intf->{BOOTPROTO} =~ s/dhcp.*/dhcp/; - - setVarsInSh($file, $intf, qw(DEVICE BOOTPROTO IPADDR NETMASK NETWORK BROADCAST ONBOOT HWADDR MII_NOT_SUPPORTED), - qw(WIRELESS_MODE WIRELESS_ESSID WIRELESS_NWID WIRELESS_FREQ WIRELESS_SENS WIRELESS_RATE WIRELESS_ENC_KEY WIRELESS_RTS WIRELESS_FRAG WIRELESS_IWCONFIG WIRELESS_IWSPY WIRELESS_IWPRIV), - if_($intf->{BOOTPROTO} eq "dhcp", qw(DHCP_HOSTNAME NEEDHOSTNAME)) - ); - log::explanations("written $intf->{DEVICE} interface configuration in $file"); + setVarsInSh($file, $intf, qw(DEVICE BOOTPROTO IPADDR NETMASK NETWORK BROADCAST ONBOOT HWADDR), if_($intf->{wireless_eth}, qw(WIRELESS_MODE WIRELESS_ESSID WIRELESS_NWID WIRELESS_FREQ WIRELESS_SENS WIRELESS_RATE WIRELESS_ENC_KEY WIRELESS_RTS WIRELESS_FRAG WIRELESS_IWCONFIG WIRELESS_IWSPY WIRELESS_IWPRIV))); } sub add2hosts { @@ -190,7 +145,7 @@ sub add2hosts { my $sub_hostname = $hostname =~ /(.*?)\./ ? " $1" : ''; $l{$_} = "\t\t$hostname$sub_hostname" foreach grep { $_ } @ips; - log::explanations("writing host information to $file"); + log::l("writing host information to $file"); output($file, map { "$_$l{$_}\n" } keys %l); } @@ -203,9 +158,9 @@ sub guessHostname { write_resolv_conf("$prefix/etc/resolv.conf", $netc); - my $name = gethostbyaddr(Socket::inet_aton($intf->{IPADDR}), Socket::AF_INET()) or log::explanations("reverse name lookup failed"), return 0; + my $name = gethostbyaddr(Socket::inet_aton($intf->{IPADDR}), Socket::AF_INET()) or log::l("reverse name lookup failed"), return 0; - log::explanations("reverse name lookup worked"); + log::l("reverse name lookup worked"); add2hash($netc, { HOSTNAME => $name }); 1; @@ -218,16 +173,14 @@ sub addDefaultRoute { sub sethostname { my ($netc) = @_; - my $text; - syscall_("sethostname", $netc->{HOSTNAME}, length $netc->{HOSTNAME}) ? ($text="set sethostname to $netc->{HOSTNAME}") : ($text="sethostname failed: $!"); - log::explanations($text); + syscall_("sethostname", $netc->{HOSTNAME}, length $netc->{HOSTNAME}) or log::l("sethostname failed: $!"); } sub resolv($) { my ($name) = @_; is_ip($name) and return $name; my $a = join(".", unpack "C4", (gethostbyname $name)[4]); - #-log::explanations("resolved $name in $a"); + #-log::l("resolved $name in $a"); $a; } @@ -242,31 +195,14 @@ sub findIntf { $intf->{$device}{DEVICE} = $device; $intf->{$device}; } - +#PAD \s* a la fin my $ip_regexp = qr/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/; - sub is_ip { my ($ip) = @_; my @fields = $ip =~ $ip_regexp or return; - every { 0 <= $_ && $_ <= 255 } @fields or return; + return if grep { $_ < 0 || $_ > 255 } @fields; @fields; } - -sub ip_compare { - my ($ip1, $ip2) = @_; - my (@ip1_fields) = $ip1 =~ $ip_regexp; - my (@ip2_fields) = $ip2 =~ $ip_regexp; - - every { $ip1_fields[$_] eq $ip2_fields[$_] } (0 .. 3); -} - -sub is_ip_forbidden { - my ($ip) = @_; - my @forbidden = ('127.0.0.1', '255.255.255.255'); - - any { ip_compare($ip, $_) } @forbidden; -} - sub is_domain_name { my ($name) = @_; my @fields = split /\./, $name; @@ -276,7 +212,7 @@ sub is_domain_name { sub netmask { my ($ip) = @_; return "255.255.255.0" unless is_ip($ip); - $ip =~ $ip_regexp or warn "IP_regexp failed\n" and return "255.255.255.0"; + $ip =~ $ip_regexp; if ($1 >= 1 && $1 < 127) { "255.0.0.0"; #-1.0.0.0 to 127.0.0.0 } elsif ($1 >= 128 && $1 <= 191) { @@ -305,70 +241,168 @@ sub dns { join(".", @masked); } - sub gateway { my ($ip) = @_; my @masked = masked_ip($ip) =~ $ip_regexp; $masked[3] = 1; join(".", @masked); + } -sub proxy_configure { - my ($u) = @_; - setExportedVarsInSh("$::prefix/etc/profile.d/proxy.sh", $u, qw(http_proxy ftp_proxy)); - setExportedVarsInCsh("$::prefix/etc/profile.d/proxy.csh", $u, qw(http_proxy ftp_proxy)); +sub configureNetworkIntf { + my ($netc, $in, $intf, $net_device, $skip, $module) = @_; + my $text; + my @wireless_modules = qw(aironet_cs aironet4500_cs hermes airo orinoco_cs orinoco airo_cs netwave_cs ray_cs wavelan_cs wvlan_cs airport); + my $flag = 0; + foreach (@wireless_modules) { + $module =~ /$_/ and $flag = 1; + } + if ($flag) { + $intf->{wireless_eth} = 1; + $netc->{wireless_eth} = 1; + $intf->{WIRELESS_MODE} = "Managed"; + $intf->{WIRELESS_ESSID} = "any"; +#- $intf->{WIRELESS_NWID} = ""; +#- $intf->{WIRELESS_FREQ} = ""; +#- $intf->{WIRELESS_SENS} = ""; +#- $intf->{WIRELESS_RATE} = ""; +#- $intf->{WIRELESS_ENC_KEY} = ""; +#- $intf->{WIRELESS_RTS} = ""; +#- $intf->{WIRELESS_FRAG} = ""; +#- $intf->{WIRELESS_IWCONFIG} = ""; +#- $intf->{WIRELESS_IWSPY} = ""; +#- $intf->{WIRELESS_IWPRIV} = ""; + } + if ($net_device eq $intf->{DEVICE}) { + $skip and return 1; + $text = N("WARNING: this device has been previously configured to connect to the Internet. +Simply accept to keep this device configured. +Modifying the fields below will override this configuration."); + } + else { + $text = N("Please enter the IP configuration for this machine. +Each item should be entered as an IP address in dotted-decimal +notation (for example, 1.2.3.4)."); + } + my $pump = $intf->{BOOTPROTO} =~ /^(dhcp|bootp)$/; + delete $intf->{NETWORK}; + delete $intf->{BROADCAST}; + my $onboot = 1; + my @fields = qw(IPADDR NETMASK); + $::isStandalone or $in->set_help('configureNetworkIP'); + $in->ask_from(N("Configuring network device %s", $intf->{DEVICE}), + (N("Configuring network device %s", $intf->{DEVICE}) . ($module ? N(" (driver %s)", $module) : '') . "\n\n") . + $text, + [ { label => N("IP address"), val => \$intf->{IPADDR}, disabled => sub { $pump } }, + { label => N("Netmask"), val => \$intf->{NETMASK}, disabled => sub { $pump } }, + { label => N("Automatic IP"), val => \$pump, type => "bool", text => N("(bootp/dhcp)") }, + if_($::expert, { label => N("Start at boot"), val => \$onboot, type => "bool" }), + if_($intf->{wireless_eth}, + { label => "WIRELESS_MODE", val => \$intf->{WIRELESS_MODE}, list => [ "Ad-hoc", "Managed", "Master", "Repeater", "Secondary", "Auto" ] }, + { label => "WIRELESS_ESSID", val => \$intf->{WIRELESS_ESSID} }, + { label => "WIRELESS_NWID", val => \$intf->{WIRELESS_NWID} }, + { label => "WIRELESS_FREQ", val => \$intf->{WIRELESS_FREQ} }, + { label => "WIRELESS_SENS", val => \$intf->{WIRELESS_SENS} }, + { label => "WIRELESS_RATE", val => \$intf->{WIRELESS_RATE} }, + { label => "WIRELESS_ENC_KEY", val => \$intf->{WIRELESS_ENC_KEY} }, + { label => "WIRELESS_RTS", val => \$intf->{WIRELESS_RTS} }, + { label => "WIRELESS_FRAG", val => \$intf->{WIRELESS_FRAG} }, + { label => "WIRELESS_IWCONFIG", val => \$intf->{WIRELESS_IWCONFIG} }, + { label => "WIRELESS_IWSPY", val => \$intf->{WIRELESS_IWSPY} }, + { label => "WIRELESS_IWPRIV", val => \$intf->{WIRELESS_IWPRIV} } + ), + ], + complete => sub { + $intf->{BOOTPROTO} = $pump ? "dhcp" : "static"; + return 0 if $pump; + for (my $i = 0; $i < @fields; $i++) { + unless (is_ip($intf->{$fields[$i]})) { + $in->ask_warn('', N("IP address should be in format 1.2.3.4")); + return (1,$i); + } + return 0; + } + if ($intf->{WIRELESS_FREQ} !~ /[0-9.]*[kGM]/) { + $in->ask_warn('', N("Freq should have the suffix k, M or G (for example, \"2.46G\" for 2.46 GHz frequency), or add enough \'0\'.")); + return (1,6); + } + if ($intf->{WIRELESS_RATE} !~ /[0-9.]*[kGM]/) { + $in->ask_warn('', N("Rate should have the suffix k, M or G (for example, \"11M\" for 11M), or add enough \'0\'.")); + return (1,8); + } + }, + focus_out => sub { + $intf->{NETMASK} ||= netmask($intf->{IPADDR}) unless $_[0] + } + ) or return; + $intf->{ONBOOT} = bool2yesno($onboot); +} + +sub configureNetworkNet { + my ($in, $netc, $intf, @devices) = @_; + + $netc->{dnsServer} ||= dns($intf->{IPADDR}); + my $gateway_ex = gateway($intf->{IPADDR}); +#- $netc->{GATEWAY} ||= gateway($intf->{IPADDR}); + + $::isInstall and $in->set_help('configureNetworkHost'); + $in->ask_from(N("Configuring network"), +N("Please enter your host name. +Your host name should be a fully-qualified host name, +such as ``mybox.mylab.myco.com''. +You may also enter the IP address of the gateway if you have one"), + [ { label => N("Host name"), val => \$netc->{HOSTNAME} }, + { label => N("DNS server"), val => \$netc->{dnsServer} }, + { label => N("Gateway (e.g. %s)", $gateway_ex), val => \$netc->{GATEWAY} }, + if_(@devices > 1, + { label => N("Gateway device"), val => \$netc->{GATEWAYDEV}, list => \@devices }, + ), + ], + complete => sub { + if ($netc->{dnsServer} and !is_ip($netc->{dnsServer})) { + $in->ask_warn('', N("DNS server address should be in format 1.2.3.4")); + return 1; + } + if ($netc->{GATEWAY} and !is_ip($netc->{GATEWAY})) { + $in->ask_warn('', N("Gateway address should be in format 1.2.3.4")); + return 1; + } + 0; + } + ); +} + +sub miscellaneousNetwork { + my ($in, $clicked, $no_track_net) = @_; + my $u = $::o->{miscellaneous} ||= {}; + $::isInstall and $in->set_help('configureNetworkProxy'); + $u->{track_network_id} = detect_devices::isLaptop(); + $::expert || $clicked and ($in->ask_from('', + N("Proxies configuration"), + [ { label => N("HTTP proxy"), val => \$u->{http_proxy} }, + { label => N("FTP proxy"), val => \$u->{ftp_proxy} }, + if_(!$no_track_net, { label => N("Track network card id (useful for laptops)"), val => \$u->{track_network_id}, type => "bool" }), + ], + complete => sub { + $u->{http_proxy} =~ m,^($|http://), or $in->ask_warn('', N("Proxy should be http://...")), return 1,0; + $u->{ftp_proxy} =~ m,^($|ftp://|http://), or $in->ask_warn('', N("Url should begin with 'ftp:' or 'http:'")), return 1,1; + 0; + } + ) or return); + 1; } sub read_all_conf { - my ($prefix, $netc, $intf, $o_netcnx) = @_; + my ($prefix, $netc, $intf) = @_; $netc ||= {}; $intf ||= {}; - my $netcnx = $o_netcnx || {}; add2hash($netc, read_conf("$prefix/etc/sysconfig/network")) if -r "$prefix/etc/sysconfig/network"; - add2hash($netc, read_resolv_conf()); - add2hash($netc, read_tmdns_conf("$prefix/etc/tmdns.conf")) if -r "$prefix/etc/tmdns.conf"; + add2hash($netc, read_resolv_conf("$prefix/etc/resolv.conf")) if -r "$prefix/etc/resolv.conf"; foreach (all("$prefix/etc/sysconfig/network-scripts")) { - if (/^ifcfg-(\w+)$/ && $1 ne 'lo') { + if (/ifcfg-(\w+)/ && $1 ne 'lo') { my $intf = findIntf($intf, $1); add2hash($intf, { getVarsFromSh("$prefix/etc/sysconfig/network-scripts/$_") }); } } - $netcnx->{type} or probe_netcnx_type($prefix, $netc, $intf, $netcnx); -} - -sub probe_netcnx_type { - my ($prefix, $_netc, $intf, $netcnx) = @_; - #- try to probe $netcnx->{type} which is used almost everywhere. - unless ($netcnx->{type}) { - #- ugly hack to determine network type (avoid saying not configured in summary). - -e "$prefix/etc/ppp/peers/adsl" and $netcnx->{type} ||= 'adsl'; # enough ? - -e "$prefix/etc/ppp/ioptions1B" || -e "$prefix/etc/ppp/ioptions2B" and $netcnx->{type} ||= 'isdn'; # enough ? - $intf->{ppp0} and $netcnx->{type} ||= 'modem'; - $intf->{eth0} and $netcnx->{type} ||= 'lan'; - } -} - -sub easy_dhcp { - my ($netc, $intf) = @_; - - return if text2bool($netc->{NETWORKING}); - - require modules; - require network::ethernet; - modules::load_category('network/main|gigabit|usb'); - my @all_cards = network::ethernet::conf_network_card_backend(); - - #- only for a single network card - (any { $_->[0] eq 'eth0' } @all_cards) && (every { $_->[0] ne 'eth1' } @all_cards) or return; - - log::explanations("easy_dhcp: found eth0"); - - network::ethernet::conf_network_card_backend($netc, $intf, 'dhcp', 'eth0'); - - put_in_hash($netc, { - NETWORKING => "yes", - DHCP => "yes", - }); - 1; } #- configureNetwork2 : configure the network interfaces. @@ -398,22 +432,23 @@ sub easy_dhcp { sub configureNetwork2 { my ($in, $prefix, $netc, $intf) = @_; my $etc = "$prefix/etc"; - if (!$::testing) { - $netc->{wireless_eth} and $in->do_pkgs->ensure_is_installed('wireless-tools', '/sbin/iwconfig', 'auto'); - write_conf("$etc/sysconfig/network", $netc); - write_resolv_conf("$etc/resolv.conf", $netc) if ! $netc->{DHCP}; - write_interface_conf("$etc/sysconfig/network-scripts/ifcfg-$_->{DEVICE}", $_, $netc, $prefix) foreach grep { $_->{DEVICE} ne 'ppp0' } values %$intf; - add2hosts("$etc/hosts", $netc->{HOSTNAME}, map { $_->{IPADDR} } values %$intf) if $netc->{HOSTNAME} && !$netc->{DHCP}; - add2hosts("$etc/hosts", "localhost", "127.0.0.1"); - - any { $_->{BOOTPROTO} eq "dhcp" } values %$intf and $in->do_pkgs->install($netc->{dhcp_client} || 'dhcp-client'); - $in->do_pkgs->ensure_is_installed('tmdns', '/sbin/tmdns', 'auto') if !$in->do_pkgs->is_installed('bind'); - $in->do_pkgs->ensure_is_installed('zcip', '/sbin/zcip', 'auto'); - $netc->{ZEROCONF_HOSTNAME} and write_zeroconf("$etc/tmdns.conf", $netc->{ZEROCONF_HOSTNAME}); - any { $_->{BOOTPROTO} =~ /^(pump|bootp)$/ } values %$intf and $in->do_pkgs->install('pump'); + + $netc->{wireless_eth} and $in->do_pkgs->install(qw(wireless-tools)); + write_conf("$etc/sysconfig/network", $netc); + write_resolv_conf("$etc/resolv.conf", $netc); + write_interface_conf("$etc/sysconfig/network-scripts/ifcfg-$_->{DEVICE}", $_, $prefix) foreach grep { $_->{DEVICE} } values %$intf; + add2hosts("$etc/hosts", $netc->{HOSTNAME}, map { $_->{IPADDR} } values %$intf); + + if (grep { $_->{BOOTPROTO} =~ /^(dhcp)$/ } values %$intf) { + $in->do_pkgs->install($netc->{dhcp_client} ? $netc->{dhcp_client} : 'dhcpcd'); + } + if (grep { $_->{BOOTPROTO} =~ /^(pump|bootp)$/ } values %$intf) { + $in->do_pkgs->install('pump'); } + #-res_init(); #- reinit the resolver so DNS changes take affect - proxy_configure($::o->{miscellaneous}); + any::miscellaneousNetwork(); } + 1; |