Blog literacki, portal erotyczny - seks i humor nie z tej ziemi
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
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
";
"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.
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.