  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
  WWeerrssjjaa ppoollsskkaa:: BBaarrttoosszz MMaarruusszzeewwsskkii BB..MMaarruusszzeewwsskkii@@jjttzz..oorrgg..ppll
  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 treci


  1. Wprowadzenie.

  2. Metoda.

     2.1 Od tumacza.


  ______________________________________________________________________

  11..  WWpprroowwaaddzzeenniiee..


  Mj Linux na PC-cie musi otrzyma IP oraz inne informacje o sieci z
  serwera DHCP. Ale nie mogem znale takiego klienta, ktry dziaaby
  z moim serwerem.

  Mj PC-et normalnie startuje z Windows 95, a Linux jest rzadziej
  uywany. Klient DHCP pod Windows 95 dziaa u mnie dobrze. Mogem
  skopiowa mj adres IP, "nameserver" itp. rcznie do Linux-a, ale
  chciaem zautomatyzowa ten proces.

  Windows 95 dostarcza program (\Windows\Winipcfg.exe), ktry wywietla
  informacje DHCP w adny graficzny sposb. Po przejrzeniu pliku
  _w_i_n_i_p_c_f_g_._e_x_e odkryem, e ma on nieudokumentowan opcj, ktra pozwala
  zapisa informacje do pliku (domylnie jest to _W_i_n_i_p_c_f_g_._o_u_t).
  Pozwolio mi to, na zrobienie takiego trick-u:


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

  2. Uruchomienie _W_i_n_i_p_c_f_g_._e_x_e i zapis wyniku do pliku.

  3. Start Linux-a.

  4. Zamontowa system plikw Win95.

  5. Przeczyta plik utworzony przez _W_i_n_i_p_c_f_g.

  6. Dostarczy potrzebne informacje Linux-owi.

  Wersj oryginaln tego dokumentu moesz znale na SUNSite Polska
  <ftp://ftp.icm.edu.pl:/pub/Linux/sunsite/docs/HOWTO/mini>. Na temat
  wersji tumaczenia patrz sekcja ``Od tumacza''.




  22..  MMeettooddaa..


  Teraz szczegy 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 porzdku. Nie podanie _-_a_l_l spowoduje
  brak niektrych informacji. Nie podanie cieki do pliku _w_i_n_i_p_c_f_g_._o_u_t
  spowoduje zapisanie tego pliku w katalogu biecym. Poniej jest
  zaczony przykadowy plik _w_i_n_i_p_c_f_g_._o_u_t.

  2. Natychmiast (albo jaki czas pniej) po starcie Win95, startuj
     Linux-a. Uywam _l_o_a_d_l_i_n_-_a uruchamianego z batch-a DOS-owego. Moesz
     uy tego albo czego innego.
     (Nie moliwe jest poczenie loadlin-a i winipcfg w jednym batch-u
     poniewa najprzypuszczalniej plik _w_i_n_i_p_c_f_g_._o_u_t nie zostanie
     przepisany z cache'u na dysk przed startem loadlin-a. Nie znalazem
     sposobu na zapisanie zawartoci cache'u na dysk z wiersza polece.)

  3. Podczas startu Linux-a wykonywany jest program napisany w Perlu
     (_w_i_n_i_p_c_f_g_._p_l) doczony na kocu tego dokumentu. Program ten musi
     by wykonany ppoo zamontowaniu systemu plikw Win95, a pprrzzeedd
     uruchomieniem skryptw sieciowych. Ja uywam dystrybucji _D_e_b_i_a_n:
     poniej zaczony jest wyjtek z pliku /etc/init.d/boot z
     zanotowanymi moimi dodatkami. Twoja dystrybucja moe mie inne
     skrypty startowe, wic moe bdziesz musia to troch zmieni.
     (aut. Patrz kilka linijek niej na temat innych
     dystrybucji).Program _w_i_n_i_p_c_f_g_._p_l zapisuje nowe wersje plikw:
     /etc/hostname, /etc/resolv.conf oraz /etc/init.d/network. Skrypt
     _n_e_t_w_o_r_k wykonuje polecenie _i_f_c_o_n_f_i_g z podanymi parametrami.

  To tyle. Zapamitaj oczywicie, e nie powiniene trzyma Linux-a
  uruchomionego duej ni pozwala na to DHCP. Ja startuj tylko na
  kilka godzin, wic nie ma u mnie tego problemu.

  Bdziesz musia dopasowa program _w_i_n_i_p_c_f_g_._p_l jeli masz wicej ni
  jeden adapter sieciowy albo pseudo-adapter. Na przykad,
  oprogramowanie AOL ustawia udawany (fake) adapter sieciowy, i musisz
  zignorowa jego informacje.

  -------------------------------------------------------------------------------
  OOdd aauuttoorraa: Oto lokalizacje plikw odpowiedzialnych za konfiguracj
  sieci oraz plikw inicjacyjnych:


    RedHat: pliki odpowiadajce 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 montujcy
     systemy, to /etc/rc.d/rc.S.

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

  Oto zaczniki (jeden na stron):


  ______________________________________________________________________

  ==============================================================================
  Przykadowy plik winipcfg.out zrobiony przez Win95 "winipcfg -all -batch"
  (adresy zostay zmienione ze wzgldw bezpieczestwa)
  ==============================================================================
  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
  ==============================================================================

  ==============================================================================
  Wyjtek 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 wedug 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 plikw 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 wywoywany 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(".",
                    $ip_address[0]+0 | ~($netmask[0]+0) & 255,
                    $ip_address[1]+0 | ~($netmask[1]+0) & 255,
                    $ip_address[2]+0 | ~($netmask[2]+0) & 255,
                    $ip_address[3]+0 | ~($netmask[3]+0) & 255);
  print NETWORK
  "ifconfig eth0 $ip_address netmask $netmask broadcast $broadcast
  route add -net $network netmask $netmask
  route add default gw $gateway metric 1
  ";

  print
  "DHCP info: $hostname.$domain ($ip_address)
    netmask: $netmask broadcast: $broadcast gateway: $gateway
    nameservers: @nameservers
  ";
  exit(0);
  ==============================================================================
  ______________________________________________________________________




  22..11..  OOdd ttuummaacczzaa..


  Tumaczenie to jest chronione prawami autorskimi  Bartosza
  Maruszewskiego.  Dozwolone jest rozprowadzanie i dystrybucja na
  prawach takich samych jak dokument oryginalny.

  Jeli znalaze jakie race bdy ortograficzne, gramatyczne,
  skadniowe, techniczne to pisz do mnie:

  B.Maruszewski@jtz.org.pl

  Oficjaln stron tumacze HOWTO jest http://www.jtz.org.pl/

  Aktualne wersje przetumaczonych dokumentw znajduj si na teje
  stronie. Dostpne s take poprzez anonimowe ftp pod adresem
  ftp.jtz.org.pl w katalogu HOWTO.

  Przetumaczone przeze mnie dokumenty znajduj si take na mojej
  stronie WWW. <http://www.jtz.org.pl/bartek/tlumaczenie.html> S tam
  te odwoania do Polskiej Strony Tumaczeniowej.

  Kontakt z nasz grup, grup tumaczy moesz uzyska poprzez list
  dyskusyjn jtz@ippt.gov.pl. Jeli chcesz si na ni zapisa, to wylij
  list o treci subscribe jtz Imi Nazwisko na adres
  majordomo@ippt.gov.pl

  Zmiany wprowadzone przez tumacza, to dodatek o lokalizacji plikw
  startowych w innych dystrybucjach.










