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 . ______________________________________________________________________ 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 . 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. 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.