diff options
Diffstat (limited to 'perl-install/standalone/drakgw')
| -rwxr-xr-x | perl-install/standalone/drakgw | 566 |
1 files changed, 0 insertions, 566 deletions
diff --git a/perl-install/standalone/drakgw b/perl-install/standalone/drakgw deleted file mode 100755 index f7a0bd481..000000000 --- a/perl-install/standalone/drakgw +++ /dev/null @@ -1,566 +0,0 @@ -#!/usr/bin/perl - -# -# Guillaume Cottenceau (gc@mandrakesoft.com) -# -# Copyright 2000 MandrakeSoft -# -# This software may be freely redistributed under the terms of the GNU -# public license. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# - -use lib qw(/usr/lib/libDrakX); - -use common qw(:system :file); -use interactive; -use standalone; -use log; -use c; -use netconnect; -use detect_devices; - -$::isEmbedded = ($::XID, $::CCPID) = "@ARGV" =~ /--embedded (\w+) (\w+)/; -$::isWizard = "@ARGV" =~ /--wizard/; - -local $_ = join '', @ARGV; - -/-h/ and die "usage: drakgw [--version --verbose]\n"; -/-version/ and die 'version: $Id$ '."\n"; - -$::verbose = /-verbose/; -$::direct = /-direct/; - -my $in = vnew interactive('su'); - - -my $sysconf_network = "/etc/sysconfig/network"; -my $conf_linuxconf = "/etc/conf.linuxconf"; -my $rc_firewall = "/etc/rc.d/rc.firewall.inet_sharing"; -my $dhcpd_conf = "/etc/dhcpd.conf"; -my $cups_conf = "/etc/cups/cupsd.conf"; - - -my $drakgw_setup = "/etc/sysconfig/inet_sharing"; - -sub start_daemons() -{ - my $cups_used = 0; - log::l("[drakgw] Starting daemons\n"); - if (-f "/etc/rc.d/init.d/cups") - { - if (grep(/is running/, `/etc/rc.d/init.d/cups status`)) - { - $cups_used = 1; - (system("/etc/rc.d/init.d/cups stop") == 0) or die "Could not stop the CUPS daemon"; - } - } - grep(/is running/, `/etc/rc.d/init.d/dhcpd status`) and ((system("/etc/rc.d/init.d/dhcpd stop") == 0) or die "Could not stop the dhcp server"); - grep(/error: cannot connect/, `/etc/rc.d/init.d/named status 2>&1`) or ((system("/etc/rc.d/init.d/named stop") == 0) or die "Could not stop the named server"); - (system("/etc/rc.d/init.d/network restart") == 0) or die "Could not restart the network"; - (system("sh /etc/rc.d/rc.firewall") == 0) or die "Could not start the firewall script"; - (system("/etc/rc.d/init.d/named start") == 0) or die "Could not start the caching nameserver"; - (system("/sbin/chkconfig --level 345 named on") == 0) or die "Could not chkconfig named"; - (system("/etc/rc.d/init.d/dhcpd start") == 0) or die "Could not start the dhcp server"; - (system("/sbin/chkconfig --level 345 dhcpd on") == 0) or die "Could not chkconfig dhcpd"; - if ($cups_used == 1) - { - (system("/etc/rc.d/init.d/cups start") == 0) or die "Could not start the CUPS daemon"; - } - local *DRAKGW_SETUP; open DRAKGW_SETUP, ">$drakgw_setup" or die "Can't open $drakgw_setup"; - print DRAKGW_SETUP "INET_SHARING=enabled\n"; - close DRAKGW_SETUP; -} - -sub stop_daemons() -{ - log::l("[drakgw] Stopping daemons\n"); - grep(/is running/, `/etc/rc.d/init.d/dhcpd status`) and ((system("/etc/rc.d/init.d/dhcpd stop") == 0) or die "Could not stop the dhcp server"); - grep(/Connection refused/, `/etc/rc.d/init.d/named status 2>&1`) or ((system("/etc/rc.d/init.d/named stop") == 0) or die "Could not stop the named server"); - (system("/etc/rc.d/init.d/ipchains stop") == 0) or die "Could not stop ipchains"; - (system("/sbin/chkconfig --level 345 named off") == 0) or die "Could not chkconfig named"; - (system("/sbin/chkconfig --level 345 dhcpd off") == 0) or die "Could not chkconfig dhcpd"; - - local *DRAKGW_SETUP; open DRAKGW_SETUP, ">$drakgw_setup" or die "Can't open $drakgw_setup"; - print DRAKGW_SETUP "INET_SHARING=disabled\n"; - close DRAKGW_SETUP; -} - -sub fatal_quit($) -{ - log::l("[drakgw] FATAL: $_[0]\n"); - (defined $wait_configuring) and (undef $wait_configuring); - $in->ask_warn('', $_[0]); - $in->exit(-1); -} - -begin: - -#- ********************************** -#- * 0th step: verify if we are already set up - -$::isEmbedded and kill USR2, $::CCPID; -if (-f $drakgw_setup) -{ - open DRAKGW_SETUP, "$drakgw_setup" or die "Can't open $drakgw_setup"; - my @drakgw_setup_content = <DRAKGW_SETUP>; - close DRAKGW_SETUP; - - if (grep(/enabled/, @drakgw_setup_content)) - { - my $r = $in->ask_from_list(_("Internet Connection Sharing currently enabled"), - _("The setup of Internet connection sharing has already been done. -It's currently enabled.\n -What would you like to do?"), - [ _("disable"), _("reconfigure"), _("dismiss") ]); - if ($r eq _("disable")) - { - stop_daemons(); - -f "$dhcpd_conf.drakgwdisable" and (unlink("$dhcpd_conf.drakgwdisable") or die "Could not unlink $dhcpd_conf.drakgwdisable"); - rename($dhcpd_conf, "$dhcpd_conf.drakgwdisable") or die "Could not rename $dhcpd_conf to $dhcpd_conf.drakgwdisable"; - -f "$rc_firewall.drakgwdisable" and (unlink("$rc_firewall.drakgwdisable") or die "Could not unlink $rc_firewall.drakgwdisable"); - rename($rc_firewall, "$rc_firewall.drakgwdisable") or die "Could not rename $rc_firewall to $rc_firewall.drakgwdisable"; - log::l("[drakgw] Disabled\n"); - $in->exit(0); - } - ($r eq _("dismiss")) and $in->exit(0); - } - elsif (grep(/disabled/, @drakgw_setup_content)) - { - my $r = $in->ask_from_list(_("Internet Connection Sharing currently disabled"), - _("The setup of Internet connection sharing has already been done. -It's currently disabled.\n -What would you like to do?"), - [ _("enable"), _("reconfigure"), _("dismiss") ]); - if ($r eq _("enable")) - { - -f $dhcpd_conf and rename($dhcpd_conf, "$dhcpd_conf.old"); - rename("$dhcpd_conf.drakgwdisable", $dhcpd_conf) or die "Could not find configuration. Please reconfigure."; - -f $rc_firewall and rename($rc_firewall, "$rc_firewall.old"); - rename("$rc_firewall.drakgwdisable", $rc_firewall) or die "Could not find configuration. Please reconfigure."; - start_daemons(); - log::l("[drakgw] Enabled\n"); - $in->exit(0); - } - ($r eq _("dismiss")) and $in->exit(0); - } - else - { - $in->ask_warn("Unrecognized config file", _("Config file content could not be interpreted.")); - $in->exit(-1); - } -} - - - -#- ********************************** -#- * 1st step: detect/setup - -$::direct or $in->ask_okcancel(_("Internet Connection Sharing"), - _("Your computer can be configured to share its Internet connection.\n -Note: you need a dedicated Network Adapter to set up a Local Area Network (LAN).\n -Would you like to setup the Internet Connection Sharing?"), 1) or $in->exit(0); - -#my @pci_ethernet_cards; -#OBSOLETE! require pci_probing::main; -#($_->[0] =~ /NETWORK_ETHERNET/) and (push @pci_ethernet_cards, $_) foreach (pci_probing::main::probe('.')); - -#(@pci_ethernet_cards == ()) and $in->ask_warn('', _("No PCI network ethernet devices found!")) and $in->exit(0); -# -## push @pci_ethernet_cards, [ "NETWORK_ETHERNET", "Fake ne2000", "ne2k" ]; - -my @configured_devices = map { /ifcfg-(\S+)/; $1 } `ls /etc/sysconfig/network-scripts/ifcfg*`; - -#my @active_devices = `/sbin/ifconfig | grep ^[a-z] | awk '{print \$1}'`; chop @active_devices; - -my %aliased_devices; (/^alias\s+(eth[0-9])\s+(\S+)/) and ($aliased_devices{$1} = $2) foreach cat_("/etc/modules.conf"); -my $card_netconnect = netconnect::get_net_device("/"); -(defined $card_netconnect) and log::l("[drakgw] Information from netconnect: ignore card $card_netconnect\n"); -my @all_cards_getnet = detect_devices::getNet(); -my @all_cards; -foreach my $card (@all_cards_getnet) -{ - log::l("[drakgw] Have network card: $card\n"); - next if ($card eq $card_netconnect); - push @all_cards, exists $aliased_devices{$card} ? "Interface $card ("._("using module")." $aliased_devices{$card})" : "Interface $card"; -} -log::l("[drakgw] Available network cards: ".join(" ; ", @all_cards)."\n"); - -# print "pci_detection: "; print ">".$_->[2]."< " foreach (@pci_ethernet_cards); -# print "\nconfigured: "; print ">".$_."< " foreach (@configured_devices); -# print "\nactive: "; print ">".$_."< " foreach (@active_devices); -# print "\naliased: "; print ">".$_." => ".$aliased_devices{$_}."< " foreach (keys %aliased_devices); -# print "\n"; -# print "\nall_cards: "; print ">".$_."< " foreach (@all_cards); - -# -#foreach $pci_card (@pci_ethernet_cards) -#{ -# my $this_card = $pci_card->[1]; -# foreach $aliased_dev (keys %aliased_devices) -# { -# if ($pci_card->[2] eq $aliased_devices{$aliased_dev}) -# { -# $this_card .= ", hardware-configured"; -# grep(/$aliased_dev/, @configured_devices) and $this_card .= ", software-configured"; -# grep(/$aliased_dev/, @active_devices) and $this_card .= ", active"; -# } -# } -# push @all_cards, $this_card; -#} - - -#- setup the network interface we shall use - -my $interface; -if (@all_cards == ()) -{ - $in->ask_warn(_("No network adapter on your system!"), - _("No ethernet network adapter has been detected on your system. Please run the hardware configuration tool.")); - quit_global($in); -} -elsif (@all_cards == 1) -{ - $interface = $all_cards[0]; - $::verbose and ($in->ask_okcancel(_("Network interface"), - _("There is only one configured network adapter on your system:\n\n$interface\n\nWould you like to setup your Local Area Network with that adapter?"), 1) or quit_global($in)); -} -else -{ - $interface = $in->ask_from_list(_("Choose the network interface"), - _("Please choose what network adapter will be connected to your Local Area Network."), - \@all_cards, - ); - defined $interface or quit_global($in); -} -my ($device) = $interface =~ /(eth[0-9]+)/ or die("Internal error"); -log::l("[drakgw] Choosing network card: $device\n"); - -grep(/$device/, @configured_devices) and - ($in->ask_okcancel('', _("Warning, the network adapter is already configured.\nWould you like to reconfigure?")) or quit_global($in)); - - -#- setup the address for the LAN - -my $full_lan_address = "192.168.0.0"; -#$::expert and ($full_lan_address = $in->ask_from_entry(_("Local Area Network specification"), -# _("You may now decide which class C network to use.\n"), -# _("Network:"), $full_lan_address, -# ) or $in->exit(0)); -my ($lan_address) = - $full_lan_address =~ /^([0-9]+\.[0-9]+\.[0-9]+)\.0$/ or die "Invalid network.\n"; - - -#- test for potential conflict with other networks - -foreach (@configured_devices) -{ - if ($_ ne $device) - { - my @ifcfg_content = cat_("/etc/sysconfig/network-scripts/ifcfg-$_"); - grep(/$lan_address/, @ifcfg_content) and - $in->ask_warn('', _("Potential LAN address conflict found in current config of $_!\n")) and quit_global($in); - } -} - - -#- test for potential conflict with previous firewall config - -my @chain_rules; -(-f "/etc/sysconfig/ipchains" or ((-x "/sbin/ipchains") and (@chain_rules = `/sbin/ipchains -L`) and (@chain_rules > 3))) - and ($in->ask_okcancel(_("Firewalling configuration detected!"), - _("Warning! An existing firewalling configuration has been detected. You may need some manual fix after installation. Proceed?"), 1) or quit_global($in)); - - -#- ask for confirmation -# -#$in->ask_okcancel(_("Internet Connection Sharing - setup"), -# _("The local network is about to be configured.\n") . -# "You will then be able to connect other computers to this network, with automatic ". -# "DHCP configuration."), 1) or $in->exit(0); - -#- ********************************** -#- * 2nd step: configure - -$wait_configuring = $in->wait_message(_("Configuring..."), _("Configuring scripts, installing software, starting servers...")); - -#- setup the /etc/sysconfig/network-script/ script - -my $network_scripts = "/etc/sysconfig/network-scripts"; --f "$network_scripts/ifcfg-$device" and rename("$network_scripts/ifcfg-$device", "$network_scripts/old.ifcfg-$device"); -my $ifcfg = "$network_scripts/ifcfg-$device"; -output($ifcfg, qq( -DEVICE=$device -BOOTPROTO=static -IPADDR=$lan_address.1 -NETMASK=255.255.255.0 -NETWORK=$lan_address.0 -BROADCAST=$lan_address.255 -ONBOOT=yes -)); - - - -#- install and setup the RPM packages - -my $rpms_to_install; -my %bin2rpm = ( "/sbin/ipchains" => "ipchains", - "/usr/sbin/dhcpd" => "dhcp", - $conf_linuxconf => "linuxconf", - "/usr/sbin/named" => "bind", - "/var/named/named.local" => "caching-nameserver" ); - --e $_ or $rpms_to_install .= "$bin2rpm{$_} " foreach (keys %bin2rpm); -standalone::pkgs_install($rpms_to_install); --e $_ or fatal_quit(_("Problems installing package $bin2rpm{$_}")) foreach (keys %bin2rpm); - - -#- setup the masquerading configuration - -if (-f "/etc/rc.d/rc.firewall") -{ - local *RCFIREWALL; - open RCFIREWALL, "/etc/rc.d/rc.firewall" or die "Can't open /etc/rc.d/rc.firewall"; - my @rcfirewall_content = <RCFIREWALL>; - close RCFIREWALL; - grep(m|\Q/etc/rc.d/rc.firewall.inet_sharing|, @rcfirewall_content) or push @rcfirewall_content, "# Added by drakgw\n[ -x /etc/rc.d/rc.firewall.inet_sharing ] && /etc/rc.d/rc.firewall.inet_sharing\n"; - open RCFIREWALL, ">/etc/rc.d/rc.firewall" or die "Can't open /etc/rc.d/rc.firewall"; - print RCFIREWALL @rcfirewall_content; - close RCFIREWALL; -} -else -{ - local *RCFIREWALL; open RCFIREWALL, ">/etc/rc.d/rc.firewall" or die "Can't open /etc/rc.d/rc.firewall"; - print RCFIREWALL <<EOF; -#!/bin/sh -# -# Automatically generated by drakgw - -[ -x /etc/rc.d/rc.firewall.inet_sharing ] && /etc/rc.d/rc.firewall.inet_sharing -EOF - chmod 0700, "/etc/rc.d/rc.firewall"; -} - --f $rc_firewall and rename($rc_firewall, "$rc_firewall.old"); -local *RCFIREWALL; open RCFIREWALL, ">$rc_firewall" or die "Can't open $rc_firewall"; -print RCFIREWALL <<EOF; -#!/bin/sh -# -# rc.firewall - Initial SIMPLE IP Masquerade test for 2.1.x and 2.2.x kernels using IPCHAINS -# -# Load all required IP MASQ modules -# -# NOTE: Only load the IP MASQ modules you need. All current IP MASQ modules -# are shown below but are commented out from loading. - -# Needed to initially load modules -# -/sbin/depmod -a - -# Supports the proper masquerading of FTP file transfers using the PORT method -# -/sbin/modprobe ip_masq_ftp - -# Supports the masquerading of RealAudio over UDP. Without this module, -# RealAudio WILL function but in TCP mode. This can cause a reduction -# in sound quality -# -/sbin/modprobe ip_masq_raudio - -# Supports the masquerading of IRC DCC file transfers -# -/sbin/modprobe ip_masq_irc - - -# Supports the masquerading of Quake and QuakeWorld by default. This modules is -# for for multiple users behind the Linux MASQ server. If you are going to play -# Quake I, II, and III, use the second example. -# -# NOTE: If you get ERRORs loading the QUAKE module, you are running an old -# ----- kernel that has bugs in it. Please upgrade to the newest kernel. -# -#Quake I / QuakeWorld (ports 26000 and 27000) -#/sbin/modprobe ip_masq_quake -# -#Quake I/II/III / QuakeWorld (ports 26000, 27000, 27910, 27960) -/sbin/modprobe ip_masq_quake 26000,27000,27910,27960 - - -# Supports the masquerading of the CuSeeme video conferencing software -# -/sbin/modprobe ip_masq_cuseeme - -#Supports the masquerading of the VDO-live video conferencing software -# -/sbin/modprobe ip_masq_vdolive - - -#CRITICAL: Enable IP forwarding since it is disabled by default since -# -# Redhat Users: you may try changing the options in /etc/sysconfig/network from: -# -# FORWARD_IPV4=false -# to -# FORWARD_IPV4=true -# -echo "1" > /proc/sys/net/ipv4/ip_forward - - -# Dynamic IP users: -# -# If you get your IP address dynamically from SLIP, PPP, or DHCP, enable this following -# option. This enables dynamic-ip address hacking in IP MASQ, making the life -# with Diald and similar programs much easier. -# -#echo "1" > /proc/sys/net/ipv4/ip_dynaddr - - -# MASQ timeouts -# -# 2 hrs timeout for TCP session timeouts -# 10 sec timeout for traffic after the TCP/IP "FIN" packet is received -# 160 sec timeout for UDP traffic (Important for MASQ'ed ICQ users) -# -/sbin/ipchains -M -S 7200 10 160 - - -# DHCP: For people who receive their external IP address from either DHCP or BOOTP -# such as ADSL or Cablemodem users, it is necessary to use the following -# before the deny command. The "bootp_client_net_if_name" should be replaced -# the name of the link that the DHCP/BOOTP server will put an address on to? -# This will be something like "eth0", "eth1", etc. -# -# This example is currently commented out. -# -# -#/sbin/ipchains -A input -j ACCEPT -i bootp_clients_net_if_name -s 0/0 67 -d 0/0 68 -p udp - -# Enable simple IP forwarding and Masquerading -# -# NOTE: The following is an example for an internal LAN address in the 192.168.0.x -# network with a 255.255.255.0 or a "24" bit subnet mask. -# -# Please change this network number and subnet mask to match your internal LAN setup -# -/sbin/ipchains -P forward DENY -/sbin/ipchains -A forward -s $lan_address.0/24 -j MASQ -EOF -close RCFIREWALL; -chmod 0700, $rc_firewall; - - -#- be sure that FORWARD_IPV4 is enabled in /etc/sysconfig/network - -open SYSCONF_NETWORK, "$sysconf_network" or die "Can't open $sysconf_network"; -my @sysconf_network_content = <SYSCONF_NETWORK>; -close SYSCONF_NETWORK; -($_ =~ /^FORWARD_IPV4=/ and $_="FORWARD_IPV4=true\n") foreach @sysconf_network_content; -grep(/^FORWARD_IPV4=/, @sysconf_network_content) or push @sysconf_network_content, "FORWARD_IPV4=true\n"; -open SYSCONF_NETWORK, ">$sysconf_network" or die "Can't open $sysconf_network"; -print SYSCONF_NETWORK @sysconf_network_content; -close SYSCONF_NETWORK; - - -#- setup the DHCP server - --f $dhcpd_conf and rename($dhcpd_conf, "$dhcpd_conf.old"); -local *DHCPDCONF; open DHCPDCONF, ">$dhcpd_conf" or die "Can't open $dhcpd_conf"; -print DHCPDCONF <<EOF; -subnet $lan_address.0 netmask 255.255.255.0 { - # default gateway - option routers $lan_address.1; - option subnet-mask 255.255.255.0; - - option domain-name "homelan.org"; - option domain-name-servers $lan_address.1; - - range dynamic-bootp $lan_address.16 $lan_address.253; - default-lease-time 21600; - max-lease-time 43200; -} -EOF -close DHCPDCONF; - - -#- put the interface for the dhcp server in linuxconf config, for the /etc script of dhcpd - -my @conf_linuxconf_content = cat_($conf_linuxconf); -(/^DHCP.interface/ and $_="DHCP.interface $device\n") foreach @conf_linuxconf_content; -grep(/DHCP.interface/, @conf_linuxconf_content) or push @conf_linuxconf_content, "DHCP.interface $device\n"; -output($conf_linuxconf, @conf_linuxconf_content); - - -#- Set up /etc/cups/cupsd.conf to make the broadcasting of the printer info -#- working correctly: -#- -#- 1. ServerName <server's IP address> # because clients do necessarily -#- # know the server's name -#- -#- 2. BrowseAddress <server's Broadcast IP> # broadcast printer info into -#- # the local network. -#- -#- These steps are only done when the CUPS package is installed. - -if (-f $cups_conf) -{ - my @cups_conf_content = cat_($cups_conf); - /ServerName[^:]/ and $_ = "ServerName $lan_address.1\n" foreach @cups_conf_content; - push @cups_conf_content, "ServerName $lan_address.1\n" if grep /ServerName[^:]/, @cups_conf_content; - push @cups_conf_content, "BrowseAddress $lan_address.255\n" if grep /^BrowseAddress $lan_address.255/, @cups_conf_content; - output($cups_conf, @cups_conf_content); -} - -#- start the daemons - -start_daemons(); - - -#- bye-bye message - -undef $wait_configuring; - -$in->ask_warn(_("Congratulations!"), - _("Everything has been configured. -You may now share Internet connection with other computers on your Local Area Network, using automatic network configuration (DHCP).")); - - -log::l("[drakgw] Installation complete, exiting\n"); -quit_global($in); - -sub quit_global { - my ($in)=@_; - $::isEmbedded ? kill(USR1, $::CCPID) : $in->exit(0); - goto begin -} - - - -#------------------------------------------------- -#- $Log$ -#- Revision 1.23 2001/03/01 00:18:17 damien -#- updated embedded mode -#- -#- Revision 1.22 2001/02/26 18:39:12 prigaux -#- pixelization -#- -#- Revision 1.21 2001/02/08 10:11:37 damien -#- implemented or updated embedded mode -#- -#- Revision 1.20 2001/02/08 07:00:41 damien -#- added embedded and (ugly) wizard mode. -#- -#- Revision 1.19 2001/01/10 00:32:42 prigaux -#- use standalone and standalone::pkgs_install -#- -#- Revision 1.18 2000/12/16 16:13:34 prigaux -#- use ldetect-lst -#- -#- Revision 1.17 2000/11/13 15:48:33 gc -#- Integrate Till's patches for better work with Cups. -#- -#- Revision 1.16 2000/10/10 15:31:50 gc -#- make only one call to urpmi in order to install all the needed rpm's -#- |
