Jak zmusić Linux-a, żeby korzystał z informacji DHCP od Windows 95<newline> <author>Autor:Dan Halbert, <htmlurl url="mailto:halbert@world.std.com" name="halbert@world.std.com"><newline> lub<newline> <htmlurl url="mailto:halbert@bbn.com" name="halbert@bbn.com"><newline> 6 Grudnia 1996<newline> <bf>Wersja polska: Bartosz Maruszewski <htmlurl url="mailto:B.Maruszewski@zsmeie.torun.pl" name="B.Maruszewski@zsmeie.torun.pl"><newline> </bf> v1.02, 26 Lipca 1997 <abstract> Dokument ten został napisany w standardzie ISO-8859-2. Wersja oryginalna znajduje się pod adresem <url url="ftp://ftp.icm.edu.pl:/pub/Linux/sunsite/docs/HOWTO/mini/" name="ftp.icm.edu.pl">. </abstract> <toc> <sect>Wprowadzenie. <p> 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 <it/winipcfg.exe/ odkryłem, że ma on nieudokumentowaną opcję, która pozwala zapisać informacje do pliku (domyślnie jest to <it/Winipcfg.out/). Pozwoliło mi to, na zrobienie takiego trick-u: <enum> <item>Start Win95. Klient DHCP pobierze potrzebne informacje od serwera DHCP. <item>Uruchomienie <it/Winipcfg.exe/ i zapis wyniku do pliku. <item>Start Linux-a. <item>Zamontować system plików Win95. <item>Przeczytać plik utworzony przez <it/Winipcfg/. <item>Dostarczyć potrzebne informacje Linux-owi. </enum> Wersję oryginalną tego dokumentu możesz znaleźć na <url url="ftp://ftp.icm.edu.pl:/pub/Linux/sunsite/docs/HOWTO/mini" name="SUNSite Polska">. Na temat wersji tłumaczenia patrz sekcja <ref id="tlum" name="Od tłumacza">. <sect>Metoda. <p> Teraz szczegóły na temat tego jak to robię: <enum> <item>W moim folderze startowym Win95 uruchamiam to polecenie. Kiedy Win95 startuje, Winipcfg zapisuje otrzymane od serwera DHCP informacje: <verb> winipcfg -all -batch c:\winipcfg.out </verb> Opcje muszą być podane w podanym porządku. Nie podanie <it/-all/ spowoduje brak niektórych informacji. Nie podanie ścieżki do pliku <it/winipcfg.out/ spowoduje zapisanie tego pliku w katalogu bieżącym. Poniżej jest załączony przykładowy plik <it/winipcfg.out/. <item>Natychmiast (albo jakiś czas później) po starcie Win95, startuję Linux-a. Używam <it/loadlin-a/ uruchamianego z batch-a DOS-owego. Możesz użyć tego albo czegoś innego.<newline> (Nie możliwe jest połączenie loadlin-a i winipcfg w jednym batch-u ponieważ najprzypuszczalniej plik <it/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ń.) <item>Podczas startu Linux-a wykonywany jest program napisany w Perlu (<it/winipcfg.pl/) dołączony na końcu tego dokumentu. Program ten musi być wykonany <bf/po/ zamontowaniu systemu plików Win95, a <bf/przed/ uruchomieniem skryptów sieciowych. Ja używam dystrybucji <it/Debian/: poniżej załączony jest wyjątek z pliku <tt>/etc/init.d/boot</tt> 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 <it/winipcfg.pl/ zapisuje nowe wersje plików: <tt>/etc/hostname, /etc/resolv.conf oraz /etc/init.d/network</tt>. Skrypt <it/network/ wykonuje polecenie <it/ifconfig/ z podanymi parametrami. </enum> 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 <it/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. -------------------------------------------------------------------------------<newline> <bf/Od autora/: Oto lokalizacje plików odpowiedzialnych za konfigurację sieci oraz plików incjacyjnych: <itemize> <item>RedHat: pliki odpowiadające za konfigurację sieci znajdują się w <tt>/etc/sysconfig/network-scripts</tt> natomiast montowanie odbywa się w pliku <tt>/etc/rc.d/rc.sysinit</tt> <item>Slackware: plik sieciowy to <tt>/etc/rc.d/rc.inet1</tt>, a plik montujący systemy, to <tt>/etc/rc.d/rc.S</tt>. </itemize> -------------------------------------------------------------------------------<newline> Oto załączniki (jeden na stronę): <code> ============================================================================== 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(".", $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); ============================================================================== </code> <sect1>Od tłumacza.<label id="tlum"> <p> Tłumaczenie to jest chronione prawami autorskimi © Bartosza Maruszewskiego. Dozwolone jest rozprowadzanie i dystrybucja na prawach takich samych jak dokument oryginalny. Jeśli znalazłeś jakieś rażące błędy ortograficzne, gramatyczne, składniowe, techniczne to pisz do mnie: <htmlurl url="mailto:B.Maruszewski@zsmeie.torun.pl" name="B.Maruszewski@zsmeie.torun.pl"> Oficjalną stroną tłumaczeń HOWTO jest <htmlurl url="http://www.jtz.org.pl/" name="http://www.jtz.org.pl/"> Aktualne wersje przetłumaczonych dokumentów znajdują się na tejże stronie. Dostępne są także poprzez anonimowe ftp pod adresem <htmlurl url="ftp://ftp.ippt.gov.pl/pub/Linux/JTZ/" name="ftp.ippt.gov.pl"> w katalogu <tt>/pub/Linux/JTZ/</tt>. Przetłumaczone przeze mnie dokumenty znajdują się także na <url url="http://www.zsmeie.torun.pl/~bart/tlumaczenie.html" name="mojej stronie WWW."> Są tam też odwołania do Polskiej Strony Tłumaczeniowej. Kontakt z naszą grupą, grupą tłumaczy możesz uzyskać poprzez listę dyskusyjną jtz@ippt.gov.pl. Jeśli chcesz sie na nią zapisać, to wyślij list o treści <tt>subscribe jtz Imię Nazwisko</tt> na adres <tt>listproc@ippt.gov.pl</tt> Zmiany wprowadzone przez tłumacza, to dodatek o lokalizacji plików startowych w innych dystrybucjach. </article>