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 WWeerrssjjaa ppoollsskkaa:: BBaarrttoosszz MMaarruusszzeewwsskkii BB..MMaarruusszzeewwsskkii@@jjttzz..oorrgg..ppll 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 tre¶ci 1. Wprowadzenie. 2. Metoda. 2.1 Od t³umacza. ______________________________________________________________________ 11.. WWpprroowwaaddzzeenniiee.. Mój Linux na PC-cie musi otrzymaæ IP oraz inne informacje o sieci z serwera 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 _w_i_n_i_p_c_f_g_._e_x_e odkry³em, ¿e ma on nieudokumentowan± opcjê, która pozwala zapisaæ informacje do pliku (domy¶lnie jest to _W_i_n_i_p_c_f_g_._o_u_t). Pozwoli³o 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 plików Win95. 5. Przeczytaæ plik utworzony przez _W_i_n_i_p_c_f_g. 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''. 22.. MMeettooddaa.. 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 _-_a_l_l spowoduje brak niektórych informacji. Nie podanie ¶cie¿ki do pliku _w_i_n_i_p_c_f_g_._o_u_t spowoduje zapisanie tego pliku w katalogu bie¿±cym. Poni¿ej jest za³±czony przyk³adowy plik _w_i_n_i_p_c_f_g_._o_u_t. 2. Natychmiast (albo jaki¶ czas pó¼niej) po starcie Win95, startujê Linux-a. U¿ywam _l_o_a_d_l_i_n_-_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 _w_i_n_i_p_c_f_g_._o_u_t 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 (_w_i_n_i_p_c_f_g_._p_l) do³±czony na koñcu tego dokumentu. Program ten musi byæ wykonany ppoo zamontowaniu systemu plików Win95, a pprrzzeedd uruchomieniem skryptów sieciowych. Ja u¿ywam dystrybucji _D_e_b_i_a_n: 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 _w_i_n_i_p_c_f_g_._p_l zapisuje nowe wersje plików: /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. 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 _w_i_n_i_p_c_f_g_._p_l 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. ------------------------------------------------------------------------------- OOdd aauuttoorraa: Oto lokalizacje plików odpowiedzialnych za konfiguracjê sieci oraz plików inicjacyjnych: · 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(".", $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); ============================================================================== ______________________________________________________________________ 22..11.. OOdd tt³³uummaacczzaa.. 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: B.Maruszewski@jtz.org.pl Oficjaln± stron± t³umaczeñ HOWTO jest 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 ftp.jtz.org.pl w katalogu HOWTO. Przet³umaczone przeze mnie dokumenty znajduj± siê tak¿e na mojej stronie WWW. <http://www.jtz.org.pl/bartek/tlumaczenie.html> 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 siê na ni± zapisaæ, to wy¶lij list o tre¶ci subscribe jtz Imiê Nazwisko na adres majordomo@ippt.gov.pl Zmiany wprowadzone przez t³umacza, to dodatek o lokalizacji plików startowych w innych dystrybucjach.