DHCP.pl.txt

(11 KB) Pobierz
  Jak zmusić Linux-a, żeby korzystał z informacji DHCP od Win­
  dows 95
  Autor:Dan Halbert, halbert@world.std.com
  lub
  halbert@bbn.com
  6 Grudnia 1996
  Wersja polska: Bartosz Maruszewski
  B.Maruszewski@zsmeie.torun.pl
  v1.02, 26 Lipca 1997


  Dokument ten został napisany w standardzie ISO-8859-2.  Wersja orygi­
  nalna znajduje się pod adresem ftp.icm.edu.pl
  <ftp://ftp.icm.edu.pl:/pub/Linux/sunsite/docs/HOWTO/mini/>.
  ______________________________________________________________________

  Spis&nbsp;tre¶ci


  1. Wprowadzenie.

  2. Metoda.

     2.1 Od tłumacza.


  ______________________________________________________________________

  1.  Wprowadzenie.


  Mój Linux na PC-cie musi otrzymać IP oraz inne informacje o sieci z
  sewera DHCP. Ale nie mogłem znaleĽć takiego klienta, który działałby z
  moim serwerem.

  Mój PC-et normalnie startuje z Windows 95, a Linux jest rzadziej
  używany. Klient DHCP pod Windows 95 działa u mnie dobrze. Mogłem
  skopiować mój adres IP, "nameserver" itp. ręcznie do Linux-a, ale
  chciałem zautomatyzować ten proces.

  Windows 95 dostarcza program (\Windows\Winipcfg.exe), który wy¶wietla
  informacje DHCP w ładny graficzny sposób. Po przejrzeniu pliku
  winipcfg.exe odkryłem, że ma on nieudokumentowan± opcję, która pozwala
  zapisać informacje do pliku (domy¶lnie jest to Winipcfg.out).
  Pozwoliło mi to, na zrobienie takiego trick-u:


  1. Start Win95. Klient DHCP pobierze potrzebne informacje od serwera
     DHCP.

  2. Uruchomienie Winipcfg.exe i zapis wyniku do pliku.

  3. Start Linux-a.

  4. Zamontować system plików Win95.

  5. Przeczytać plik utworzony przez Winipcfg.

  6. Dostarczyć potrzebne informacje Linux-owi.

  Wersję oryginaln± tego dokumentu możesz znaleĽć na SUNSite Polska
  <ftp://ftp.icm.edu.pl:/pub/Linux/sunsite/docs/HOWTO/mini>. Na temat
  wersji tłumaczenia patrz sekcja ``Od tłumacza''.



  2.  Metoda.


  Teraz szczegóły na temat tego jak to robię:


  1. W moim folderze startowym Win95 uruchamiam to polecenie. Kiedy
     Win95 startuje, Winipcfg zapisuje otrzymane od serwera DHCP
     informacje:


             winipcfg -all -batch c:\winipcfg.out



  Opcje musz± być podane w podanym porz±dku. Nie podanie -all spowoduje
  brak niektórych informacji. Nie podanie ¶cieżki do pliku winipcfg.out
  spowoduje zapisanie tego pliku w katalogu bież±cym. Poniżej jest
  zał±czony przykładowy plik winipcfg.out.

  2. Natychmiast (albo jaki¶ czas póĽniej) po starcie Win95, startuję
     Linux-a. Używam loadlin-a uruchamianego z batch-a DOS-owego. Możesz
     użyć tego albo czego¶ innego.
     (Nie możliwe jest poł±czenie loadlin-a i winipcfg w jednym batch-u
     ponieważ najprzypuszczalniej plik winipcfg.out nie zostanie
     przepisany z cache'u na dysk przed startem loadlin-a. Nie znalazłem
     sposobu na zapisanie zawarto¶ci cache'u na dysk z wiersza poleceń.)

  3. Podczas startu Linux-a wykonywany jest program napisany w Perlu
     (winipcfg.pl) doł±czony na końcu tego dokumentu. Program ten musi
     być wykonany po zamontowaniu systemu plików Win95, a przed
     uruchomieniem skryptów sieciowych. Ja używam dystrybucji Debian:
     poniżej zał±czony jest wyj±tek z pliku /etc/init.d/boot z
     zanotowanymi moimi dodatkami. Twoja dystrybucja może mieć inne
     skrypty startowe, więc może będziesz musiał to trochę zmienić.
     (aut. Patrz kilka linijek niżej na temat innych
     dystrybucji).Program winipcfg.pl zapisuje nowe wersje plików:
     /etc/hostname, /etc/resolv.conf oraz /etc/init.d/network. Skrypt
     network wykonuje polecenie ifconfig z podanymi parametrami.

  To tyle. Zapamiętaj oczywi¶cie, że nie powiniene¶ trzymać Linux-a
  uruchomionego dłużej niż pozwala na to DHCP. Ja startuję tylko na
  kilka godzin, więc nie ma u mnie tego problemu.

  Będziesz musiał dopasować program winipcfg.pl je¶li masz więcej niż
  jeden adapter sieciowy albo pseudo-adapter. Na przykład,
  oprogramowanie AOL ustawia udawany (fake) adapter sieciowy, i musisz
  zignorować jego informacje.

  -------------------------------------------------------------------------------
  Od autora: Oto lokalizacje plików odpowiedzialnych za konfigurację
  sieci oraz plików incjacyjnych:


  ·  RedHat: pliki odpowiadaj±ce za konfigurację sieci znajduj± się w
     /etc/sysconfig/network-scripts natomiast montowanie odbywa się w
     pliku /etc/rc.d/rc.sysinit

  ·  Slackware: plik sieciowy to /etc/rc.d/rc.inet1, a plik montuj±cy
     systemy, to /etc/rc.d/rc.S.

     -------------------------------------------------------------------------------

  Oto zał±czniki (jeden na stronę):


  ______________________________________________________________________

  ==============================================================================
  Przykładowy plik winipcfg.out zrobiony przez Win95 "winipcfg -all -batch"
  (adresy zostały zmienione ze względów bezpieczeństwa)
  ==============================================================================
  Windows 95 IP Configuration

          Host Name . . . . . . . . . : foo.bar.com
          DNS Servers . . . . . . . . : 11.222.33.8
                                        11.222.33.9
          Node Type . . . . . . . . . : Broadcast
          NetBIOS Scope ID. . . . . . :
          IP Routing Enabled. . . . . : No
          WINS Proxy Enabled. . . . . : No
          NetBIOS Resolution Uses DNS : Yes

  Ethernet adapter :

          Description . . . . . . . . : ELNK3 Ethernet Adapter
          Physical Address. . . . . . : 00-AA-BB-99-88-77
          DHCP Enabled. . . . . . . . : Yes
          IP Address. . . . . . . . . : 11.222.33.222
          Subnet Mask . . . . . . . . : 255.255.255.0
          Default Gateway . . . . . . : 11.222.33.1
          DHCP Server . . . . . . . . : 11.222.33.10
          Primary WINS Server . . . . :
          Secondary WINS Server . . . :
          Lease Obtained. . . . . . . : Wed Oct 16 96 10:17:26 PM
          Lease Expires . . . . . . . : Wed Oct 30 96 10:17:26 PM
  ==============================================================================

  ==============================================================================
  Wyj±tek z pliku /etc/init.d/boot, z moimi dodatkami.
  ==============================================================================
  ...
  # Mount local file systems in /etc/fstab.
  echo "Mounting local file systems..."
  mount -avt nonfs

  # Execute swapon command again, in case we want to swap to
  # a file on a now mounted filesystem.
  swapon -a 2>/dev/null

  #### Dodatek o DHCP info ####################################################
  # Uaktualnij plik z informacjami sieciowymi według informacji z
  # klienta DHCP pod Win95
  if [ -f /c/winipcfg.out -a -x /usr/local/sbin/winipcfg.pl ]
  then
    echo "Setting network information from Windows 95 DHCP info."
    # To powoduje zapisanie nowszych wersji hostname, resolv.conf oraz
    # init.d/network.
    # Katalog /c to tam, gdzie montuję system plików Win95
    /usr/local/sbin/winipcfg.pl /c/winipcfg.out
    if [ $? != 0 ]
    then
      echo "Error getting network information. Using existing network info."
    fi
  else
    echo "** Windows 95 DHCP info not available. Using existing network info."
  fi
  #### koniec dodatku o DHCP info #############################################

  # Setup the network interfaces. Note that /var/run and /var/lock
  # are cleaned up after this, so don't put anything in the "network"
  # script that leave a pidfile or a lockfile.
  if [ -x /etc/init.d/network ]
  then
    /etc/init.d/network
  fi

  # Set hostname.
  hostname --file /etc/hostname

  # Now that TCP/IP is configured, mount the NFS file systems in /etc/fstab.
  echo "Mounting remote file systems..."
  mount -a -t nfs

  ...
  ==============================================================================

  ==============================================================================
  /usr/local/sbin/winipcfg.pl:
  To jest program perlowy wywoływany ze skryptu startowego.
  ==============================================================================
  #!/usr/bin/perl

  while (<>) {
      # Remove any trailing CR and LF.
      s/\r//g;
      s/\n//g;

      if (/^\tHost Name.*: (.*)$/i) {
          ($hostname, $domain) = split(/\./, $1, 2);
      } elsif (/^\tDNS Servers.*: *(.*)$/i) {
          push @nameservers, $1;
      } elsif (/^\t +([\.0-9]+)$/) {
          push @nameservers, $1;
      } elsif (/^\tIP Address.*: (.*)$/i) {
          $ip_address = $1;
      } elsif (/^\tSubnet Mask.*: (.*)$/i) {
          $netmask = $1;
      } elsif (/^\tDefault Gateway.*: (.*)$i/) {
          $gateway = $1;
      }
  }

  $hostname || die "Hostname not given";
  $domain || die "Domain not given";
  $ip_address || die "IP address not given";
  $netmask || die "Netmask not given";
  $gateway || die "Gateway not given";
  $#nameservers != -1 || die "No nameservers given";

  open(HOSTNAME, ">/etc/hostname") ||
      die "Could not open /etc/hostname for writing\n";
  open(RESOLV, ">/etc/resolv.conf") ||
      die "Could not open /etc/resolv.conf for writing\n";
  open(NETWORK, ">/etc/init.d/network") ||
      die "Could not open /etc/init.d/network for writing\n";
  chmod 0755, "/etc/init.d/network";

  print HOSTNAME "$hostname\n";
  print RESOLV "domain $domain\n";
  print RESOLV "search $domain\n";
  foreach (@nameservers) {
      print RESOLV "nameserver $_\n";
  }

  @ip_address = split(/\./, $ip_address, 4);
  @netmask = split(/\./, $netmask, 4);
  $network = join(".",
                  $ip_address[0]+0 & $netmask[0]+0,
                  $ip_address[1]+0 & $netmask[1]+0,
                  $ip_address[2]+0 & $netmask[2]+0,
                  $ip_address[3]+0 & $netmask[3]+0);
  $broadcast = join(".",
     ...
Zgłoś jeśli naruszono regulamin