home *** CD-ROM | disk | FTP | other *** search
/ Caldera Network Desktop 1.0 / caldera-network-desktop-1.0.bin / images / savesetup.pl < prev    next >
Perl Script  |  1995-10-25  |  6KB  |  234 lines

  1. #!/usr/bin/perl
  2.  
  3. if (@ARGV) {
  4.     $path = $ARGV[0];
  5. } else {
  6.     $path = "/mnt/floppy"
  7. }
  8.  
  9. # check the file paths
  10. ((-d "$path/boot") && (-f "$path/vmlinuz")) ||
  11.     die("$path doesn't appear to have a boot disk mounted there");
  12.  
  13. # if the defaults directory doesn't exist, create if
  14. if (! (-d "$path/defaults")) {
  15.     mkdir("$path/defaults", 755) || 
  16.     die("I couldn't create $path/defaults for some reason");
  17. }
  18.  
  19. # first grab the fstab
  20.  
  21. open(FSTAB, "/etc/fstab") || die("I can't open /etc/fstab");
  22.  
  23. open(OUTFSTAB, ">$path/defaults/fstab") ||
  24.     die("I can't create a new $path/defaults/fstab");
  25.  
  26. # this remembers ext2, msdos, and hpfs partitions only -- the rest get trashed
  27. # the options aren't saved either, which may be bad (what if /dos is mounted
  28. # ro)
  29.  
  30. while (<FSTAB>) {
  31.     s/#.*//;
  32.     s/\t/ /;
  33.     s/^  *//;
  34.     s/  *$//;
  35.     s/   */ /g;
  36.  
  37.     if (($device, $mntpoint, $type, $options) =
  38.     /^([^ ]*) ([^ ]*) ([^ ]*) (.*)$/) {
  39.     next if ($device =~ m,/dev/fd,);
  40.     if ($type eq "ext2" || $type eq "msdos" || $type eq "hpfs") {
  41.         print OUTFSTAB "$device $mntpoint $type\n";
  42.         print "$device is mounted at $mntpoint\n";
  43.     }    
  44.     }
  45. }
  46. close(FSTAB);
  47. close(OUTFSTAB);
  48.  
  49. print "\n";
  50.  
  51. # now grab the networking stuff
  52.  
  53. open(IFCONFIG, "/sbin/ifconfig eth0 2>/dev/null|") ||
  54.     die("I can't read from /sbin/ifconfig eth0");
  55.  
  56. while (<IFCONFIG>) {
  57.     if (/inet addr/) {
  58.     ($addr, $bcast, $mask) =
  59.         /inet addr:([0-9\.]+) *Bcast:([0-9\.]+) *Mask:([0-9\.]+)/;
  60.           #inet addr:199.183.24.4  Bcast:199.183.24.255  Mask:255.255.255.0
  61.     }
  62. }
  63.  
  64. close(IFCONFIG);
  65.  
  66. if (! defined $addr) {
  67.     print "You don't have any networking setup for eth0. If you use PPP or\n";
  68.     print "SLIP, be sure to back up your setup scripts before installing\n";
  69.     print "Red Hat.\n\n";
  70. } else {
  71.     print "It looks like your ip address is $addr\n";
  72.     print "It looks like your broadcast address is $bcast\n";
  73.     print "It looks like your net mask is $mask\n";
  74.  
  75.     # get the hostname and domain
  76.     open(HOSTNAME, "/bin/uname -n|") || die("I can't read from /bin/uname -n");
  77.     $_ = <HOSTNAME>;
  78.     chop($_);
  79.     close HOSTNAME;
  80.  
  81.     ($name, $domain) = /([^\.]+)\.(.*)/;
  82.     if (! $name) {
  83.     # uname did not return the FQDN
  84.     $name = $_;
  85.     # The following if() is from Arnt Gulbrandsen <agulbra@troll.no>
  86.     if ( open( HOSTS, "< /etc/hosts" ) ) {
  87.         while ( <HOSTS> ) {
  88.         s/\#.*//;
  89.         $domain = $1 if ( /\b$name\.([-a-zA-Z0-9\.]+)\b/ );
  90.         }
  91.         close HOSTS;
  92.     }
  93.     }
  94.  
  95.  
  96.     # grab the default gateway
  97.  
  98.     $gw = "none";
  99.     open(ROUTES, "/sbin/route -n|") || die("I can't read from /sbin/route\n");
  100.  
  101.     while (<ROUTES>) {
  102.     if (/^default/) {
  103.         s/#.*//;
  104.         s/\t/ /;
  105.         s/^  *//;
  106.         s/  *$//;
  107.         s/   */ /g;
  108.         
  109.         ($a, $gw) = /([^ ]+) *([^ ]+)/;
  110.     }
  111.     }
  112.  
  113.     close(ROUTES);
  114.  
  115.     print "Your gateway is $gw\n";
  116.  
  117. #    if (defined($gw) && !($gw =~ /^[0-9]/)) {
  118. #    open(HOST, "/usr/bin/host $gw|") ||
  119. #    die("I can't read from /usr/bin/host $gw\n");
  120. #    while (<HOST>) {
  121. #        if (/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]/) {
  122. #        ($gw) = /([0-9]+\.[0-9]+\.[0-9]+\.[0-9])/;
  123. #        }
  124. #    }
  125. #    close(HOST);
  126. #    }
  127.  
  128.     # read nameservers
  129.     if (open (RESOLV, "</etc/resolv.conf")) {
  130.     s/#.*//;
  131.     s/\t/ /;
  132.     s/^  *//;
  133.     s/  *$//;
  134.     s/   */ /g;
  135.     while (<RESOLV>) {
  136.         if (! $domain) {
  137.         if (/^domain/) {
  138.             ($domain) = /\S+\s+(\S+)/;
  139.         }
  140.         }
  141.         if (/^nameserver/) {
  142.         ($ns) = /([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/;
  143.         push(@ns, "\"$ns\"");
  144.         print "You're using $ns as a nameserver\n";
  145.         }
  146.     }
  147.     }
  148.  
  149.     # We should now have the hostname and domainname
  150.     print "Your hostname is $name and domain is $domain\n";
  151.  
  152.     open(NETWORK, ">$path/defaults/network") ||
  153.     die("I can't create a new $path/defaults/network");
  154.  
  155.     print NETWORK "\$ipaddr=\"$addr\";\n";
  156.     print NETWORK "\$broadcast=\"$bcast\";\n";
  157.     print NETWORK "\$netmask=\"$mask\";\n";
  158.     ($a, $b, $c, $d) = split(/\./, $addr);
  159.     ($am, $bm, $cm, $dm) = split(/\./, $mask);
  160.     $network = sprintf("%d.%d.%d.%d", int($a) & int($am), int($b) & int($bm),
  161.                int($c) & int($cm), int($d) & int($dm));
  162.     print NETWORK "\$network=\"$network\";\n";
  163.  
  164.     print "It looks like your network is $network\n";
  165.  
  166.     print NETWORK "\$hostname=\"$name\";\n";
  167.     print NETWORK "\$domainname=\"$domain\";\n";
  168.     print NETWORK "\$fqdn=\"$name.$domain\";\n";
  169.  
  170.     print NETWORK "\$gateway=\"$gw\";\n";
  171.  
  172.     if (defined @ns) {
  173.     printf(NETWORK "\@nslist = (%s);\n",  join(", ", @ns));
  174.     }
  175.  
  176.     print NETWORK "\$iface=\"eth0\";\n";
  177.     print NETWORK "\n1;\n";
  178.  
  179.     close NETWORK;
  180. }
  181.  
  182. if ( -f "/etc/XF86Config" ) {
  183.     $config = "/etc/XF86Config";
  184. } elsif ( -f "/etc/X11/XF86Config") {
  185.     $config = "/etc/X11/XF86Config";
  186. } elsif ( -f "/usr/lib/X11/XF86Config") {
  187.     $config = "/usr/lib/X11/XF86Config";
  188. }
  189.  
  190. if (defined $config) {
  191.     print "Saving $config\n";
  192.     open(IN, "<$config") || die("cannot open $config");
  193.     open(OUT, ">$path/defaults/XF86Config") ||
  194.     die("cannot open $path/defaults/XF86Config");
  195.     while (<IN>) {
  196.     s&usr/X11/&usr/X11R6/&;
  197.     s&usr/X386/&usr/X11R6/&;
  198.     print OUT;
  199.     }
  200.     close IN.
  201.     close OUT;
  202. }
  203.  
  204. $xserver = "X";
  205. chdir("/usr/bin/X11");
  206. while (-l $xserver) {
  207.     $what = readlink($xserver);
  208.     if (($dir, $xserver) = ($what =~ /(.+)\/(.*)/)) {
  209.         chdir($dir);
  210.     } else {
  211.     $xserver = $what;
  212.     }
  213. }
  214.  
  215. if ($xserver =~ /^XF86_/) {
  216.     print "It looks like $xserver is your X server\n";
  217.     ($type) = ($xserver =~ /XF86_(.*)/);
  218. }
  219.  
  220. open(XSETUP, ">$path/defaults/xsetup") ||
  221.     die("I can't create a new $path/defaults/xsetup");
  222.  
  223. print XSETUP "\$xserver = \"$type\";\n";
  224.  
  225. if (-l "/dev/mouse") {
  226.     $mouseport = readlink("/dev/mouse");
  227.     print "Your /dev/mouse is a link to $mouseport\n";
  228.     print XSETUP "\$mouseport = \"$mouseport\";\n";
  229. }    
  230.  
  231. print XSETUP "\n1;\n";
  232. close XSETUP;
  233.  
  234.