doc-linux-pl-2002.06.14.orig/ 0042755 0001750 0001750 00000000000 07502346620 014400 5 ustar coven coven doc-linux-pl-2002.06.14.orig/html/ 0042755 0001750 0001750 00000000000 07502336565 015353 5 ustar coven coven doc-linux-pl-2002.06.14.orig/html/3-Button-Mouse.pl.html 0100644 0001750 0001750 00000105564 07007144760 021354 0 ustar coven coven
Ten dokument jest oddany do użytkowania w dobrej wierze, jako zawierający w sobie tylko bezpieczne programowanie i operacje. Autor nie bierze odpowiedzialności za żadne szkody i uszkodzenia powstałe w jakikolwiek sposób u jakichkolwiek osób i sprzętu, jako bezpośrednie lub niebezpośrednie następstwo wypełniania podanych zaleceń.
Najnowsza wersja tego dokumentu (w oryginale ) jest zawsze dostępna : http://kipper.york.ac.uk/mouse.html
Istnieje japońska wersja tego dokumentu : http://jf.gee.kyoto-u.ac.jp/JF/JF-ftp/euc/3-Button-Mouse.euc i francuska pod adresem http://www.freenix.fr/linux/HOWTO/mini/3-Button-Mouse.html. Inne tłumaczenia mogą być dostępne - sprawdź lokalne mirrory LDP.
Od tłumacza: moja wiedza dotycząca myszy jest ograniczona. Jeśli zauważyłeś jakieś błędy lub niedociągnięcia poinformuj mnie o tym. Pod adresem kpjas@priv.onet.pl.
Większość aplikacji X Window jest pisana z założeniem, że użytkownik będzie używał trzyprzyciskowej myszy. Myszy szeregowe są zazwyczaj stosowane w zestawach komputerowych i są tanie. Wiele z tych myszy ma trzy klawisze i opisane są, iż używają protokołu Microsoft, co teoretycznie znaczy, że idealnie nadają się do systemu X Window. ( Obecnie rekord najniższej ceny za działającą trzyprzyciskową mysz szeregową wynosi $1.14!)
Większość myszy o podwójnym protokole będzie działać w dwóch trybach:
Ponieważ dystrybucje stają się coraz łatwiejsze do zainstalowania, część
problemów powinna zniknąć. Na przykład, RedHat ma program mouseconfig
który ustawia pewne rzeczy za użytkownika.
Jednak, niektóre wersje RH5.0 miały błąd w mouseconfig, więc
upewnij się że posiadasz łatki.
Pierwszą rzecz, którą trzeba sprawdzić to czy oprogramowanie może odnaleźć
myszkę. Dowiedz się, do którego portu szeregowego twoja mysz jest podłączona
- zazwyczaj będzie to /dev/ttyS0 ( COM1 w DOS-ie ) lub
dev/ttyS1 (COM2). ( ttyS0 jest zwykle 9-pinowym gniazdem,
ttyS1 25-pinowym, ale oczywiście nie ma w tej sprawie
sztywno ustalonych reguł). Istnieje też odpowiadająca liczba
urządzeń /dev/cua, które są prawie identyczne z /dev/ttyS
ale odradza się ich używania. Dla wygody należy wykonać nowe powiązanie
/dev/mouse z tym portem. Na przykład dla ttyS0:
ln -s /dev/ttyS0 /dev/mouse
Niektóre myszy, zazwyczaj nie te najtańsze, mają przełącznik na spodzie oznaczony `2/3'. Czasem może to być `PC/MS'. W tym wypadku oznaczenie `2' dotyczy trybu dwuprzyciskowego Microsoft-u, a `3' trzyprzyciskowego trybu MouseSystems. Przełącznik `PC/MS' jest nieco bardziej skomplikowany. Prawdopodobnie stwierdzisz, że ustawienie `MS' oznacza tryb Microsoft, a `PC' oznacza tryb MouseSystems. Możliwe, że ustawienie `PC' będzie opisane jako ps/2, ale powinno ono działać także jako tryb MouseSystems. Jeśli posiadasz taką mysz, możesz przełączyć ją w ustawienie `3' lub `PC', wstawić ustawienie dla MouseSystems w Xconfigs (patrz poniżej) i mysz powinna doskonale działać w trybie trzyprzyciskowym.
Jeżeli nie masz żadnych przełączników i nie masz instrukcji, to trzeba trochę eksperymentować. Po pierwsze spróbuj założyć, że producent myszy mówi prawdę, i mysz obsługuje w pełni tryb Microsoft. Ustaw w Xconfig tak żeby spodziewał się myszy Microsoft (zobacz w rozdziale Przykłady plików XF86Config i Xconfig) i wypróbuj to.
Jeśli mysz w ogóle nie działa, wtedy nie jest to mysz Microsoft, lub jest jakiś inny problem. Wypróbuj inne ustawienia w konfiguracji, najlepiej zacząć od dokumentacji systemowej dla pliku konfiguracyjnego. Także zajrzyj do Różne problemy w rozdziale poniżej.
Zauważysz prawdopodobnie, że kiedy uruchomisz X-y, mysz działa doskonale, ale tylko zewnętrzne przyciski coś robią. Możesz to oczywiście zaakceptować i emulować trzeci przycisk ( naciśnij oba przyciski jednocześnie, aby kliknąć środkowy ), tak jak to się robi z myszą dwuprzciskową. Aby to zrobić, zmień swój plik Xconfig jak to pokazano w rozdziale Przykłady plików XF86Config i Xconfig poniżej. Może to oznaczać, że niepotrzebnie kupiłeś mysz trzyprzyciskową i nie posuwasz się do przodu. A więc, teraz musisz przyjrzeć się swojemu sprzętowi.
Nawet tanie myszy mogą pracować w protokole MouseSystems, z wszystkimi trzema przyciskami działającymi. Sztuczka polega na tym, aby mysz myślała, że jest myszą Mouse System, coś co rzadko znajduje się w instrukcjach.
Kiedy mysz otrzymuje zasilanie i jeżeli lewy przycisk jest wciśnięty, mysz przełącza się w tryb MouseSystems. To proste, ale nie zawsze opisywane zjawisko. Zwróć uwagę, że soft reboot komputera może nie odciąć zasilania myszy i dlatego może nie działać. Jest kilka sposobów przełączania trybu, które mogą działać lub nie z twoim rodzajem myszy. Niektóre z nich są mniej drastyczne niż rebootowanie komputera, a dwa są bardziej !
echo "*n" > /dev/mouse,
co powinno mieć ten sam efekt co odłączenie jej od komputera.
Wciśnij lewy przycisk myszy dla MouseSystems, a nie wciskaj go dla Microsoft.
Można to wstawić do któregokolwiek skryptu używanego do uruchamiania X
Window.)echo "*n" nie działa ( i
vice versa ). Możesz znaleźć źródła tego programu w
http://kipper.york.ac.uk/src/fix-mouse.c
-----------
| o | o | o | SW1
-----------
1 2 3
Spróbuj połączyć piny 1-2 lub 2-3 i sprawdź czy to zmieni zachowanie myszy.
Jeżeli tak, to albo możesz zainstalować mały przełącznik albo zalutować to
połączenie by uzyskać szybkie i trwałe rozwiązanie.
ChordMiddle
w XF86Config i już środkowy przycisk działa.
Pin 3 Mode
----- ----
Open Default Microsoft. MouseSystems jeśli przycisk jest wciśnięty przy
włączeniu zasilania.
GND Zawsze MouseSystems.
Vdd Zawsze Microsoft.
( Piny są ponumerowane w następujący sposób: )
____
pin1 -| \/ |-
pin2 -| |-
pin3 -| |-
-| |-
-| |-
-| |-
-| |-
pin8 -|____|-
(Ta informacja prezentowana dzięki uprzejmości Hans-Christopha Wirtha i
Juergena Exnera, którzy przysłali ją do de.comp.os.linux.hardware.
Możesz przylutować połączenie między pinem 3 i gnd, co spowoduje że
mysz będzie działać w trybie MouseSystems.
-----
--- R ---------O------ + Supply
| ----- | | C = 100nF capacitor
| | E | R = 100kOhm
| __ / | T = BC557 transistor
| / \ O
| B | #V | T /
|-----|-# | / Przełącznik lewego przycisku myszy
| | #\ | O
| \__/ |
--- \ C |
--- C ------O----------> (gdzieś głęboko wewnątrz myszy)
|
### Ground
Testowanym modelem myszy była mysz no-name model MUS2S - czy to działa z
innymi modelami myszy zależy od budowy myszy jeżeli, przełącznik jest połączony
do ground a nie do +Supply, npn-transistor taki jak BC547 powinien działać,
R i C muszą być wtedy także zamienione.To już wszystko, wybór należy do was. Pozostańcie przy dwóch klawiszach trybu Microsoft, albo znajdźcie sposób, aby przełączyć tryb i ustawić tak X-y, aby z tego korzystały.
Myszy z kółkiem pojawiły się w ciągu ostatnich lat, zaczęło się od Microsoft Intellimouse i rozniosło się na innych producentów. Kółko można klikać jak przycisk lub kręcić w górę i w dół. Bez wątpienia najlepszym źródłem informacji jest http://www.inria.fr/koala/colas/mouse-wheel-scroll/ gdzie opisane jest jak sprawić żeby wiele aplikacji X Window wykorzystywało funkcję skrolowania.
W zasadzie, potrzebny jest w miarę nowy X serwer żeby używać funkcji skrolowania, lecz niektóre starsze serwery rozpoznają funkcję klikania. Na przykład, Intellimouse jest wspierana przez XFree 3.3.1 i późniejsze.
gpm jest programem, który pozwala używać myszy w konsoli.
Jest on zazwyczaj dołączany do dystrybucji linuksowych i można go
uruchomić z linii poleceń lub w skrypcie startowym /etc/rc.d/rc.local.
Należy zwrócić uwagę, że dystrybucje nie zawsze posiadają najnowszą wersję
( obecnie 1.13 ), która jest dostępna na mirrorach sunsite.unc.edu.
Podstawowe tryby dla myszy szeregowych z gpm to:
gpm -t ms
gpm -t msc
gpm -t help
dla trybu Microsoft lub MouseSystems, lub aby przetestować mysz
i wyświetlić wyniki. Aby uruchomić mysz w trybie MouseSystems,
może być potrzebna flaga -3 oraz być może opcja DTR
przez użycie flagi -o dtr :
gpm -3 -o dtr -t msc
gpm często potrafi rozpoznać trzy przyciski myszy nawet w
trybie Microsoft. A nowsze wersje ( wersja 1.0 i późniejsze (?))
potrafią udostępnić tą informację innym programom. Działa to po
uruchomieniu gpm z flagą -R w ten sposób :
gpm -R -t ms
To spowoduje reeksport danych myszy do nowego urządzenia, nazywanego
/dev/gpmdata, jest odczytywane jako mouse przez inne programy.
Zwróć uwagę, że to urządzenie zawsze korzysta z protokołu Mouse
Systems.
Można, tak zapisać Xconfig, aby używała tego zamiast /dev/mouse
tak jak to pokazano poniżej, ale oczywiście miej na uwadze, aby gpm zawsze
działało, kiedy używasz X-ów. Niektórzy pisali do mnie, że niektóre eventy X-ów
nie są poprawnie interpretowane przez X-y przy użyciu tego sposobu,
co może być związane z indywidualnym ustawieniem myszy.
Zmiana mapowania przycisku dla gpm i X ( gustafso@math.utah.edu)
Można stwierdzić, że gpm używa różne defaultowe mapowanie przycisków dla X, więc używanie obu systemów na tej samej maszynie może być frustrujące. Aby X-y używały tych samych przycisków jak gpm dla operacji wyboru i wklejania zastosuj polecenie X-ów :
xmodmap -e "pointer = 1 3 2"
co powoduje, że lewy przycisk wybiera, a prawy przycisk wkleja, zarówno
w myszach dwu- i trzyprzyciskowych.
Aby wymusić na gpm użycie standardowego mapowania przycisków, uruchom
go z poleceniem -B, np.:
gpm -t msc -B 132
W niektórych przypadkach, na przykład w laptopie z wbudowanym urządzeniem
wskazującym, ktoś może chcieć używać jako drugiego urządzenia myszy szeregowej.
W większości przypadków, wbudowane urządzenie używa protokołu PS/2 i można
go pominąć jeśli nie chce się go używać. Po prostu skonfiguruj gpm lub X-y
do używania /dev/ttyS0 ( lub innego) w sposób typowy.
Aby używać obu jednocześnie, można użyć gpm -M do reeksportu
urządzeń. Więcej szczegółów w podręczniku systemowym w rozdziale
dotyczącym gpm. Poza tym, XFree 3.3.1 i późniejsze wspierają wiele
input devices, z użyciem mechanizmu XInput. Automatycznie wygenerowane
pliki XF86Config powinny mieć potrzebne komentarze.
Lokalizacja pliku konfiguracyjnego dla X-ów zależy od konkretnej wersji i
rodzaju dystrybucji. Prawdopodobnie będzie to albo /etc/Xconfig,
/etc/XF86Config albo /usr/X11/lib/X11/XF86Config.
Powinieneś zobaczyć, który to jest kiedy uruchomisz X - będzie wypisany
na ekranie zanim wszystkie opcje będą wyświetlone. Składnia nieco się
różni pomiędzy poszczególnymi plikami XF86Config i Xconfig, więc oba
będą tu podane.
Mysz szeregowa Microsoft
Section "Pointer"
Protocol "microsoft"
Device "/dev/mouse"
EndSection
#
# Definicja myszy i powiązanych parametrów
#
Microsoft "/dev/mouse"
Mysz szeregowa Microsoft z emulacją myszy trójprzyciskowej
Section "Pointer"
Protocol "microsoft"
Device "/dev/mouse"
Emulate3Buttons
EndSection
#
# Definicja myszy i powiązanych parametrów
#
Microsoft "/dev/mouse"
Emulate3Buttons
Trójprzyciskowa mysz MouseSystems
Section "Pointer"
Protocol "mousesystems"
Device "/dev/mouse"
ClearDTR # Te dwie linie nie będą prawdopodobnie
ClearRTS # potrzebne spróbuj bez, a potem po prostu DTR
EndSection
#
# Definicja myszy i związane z tym parametry
#
MouseSystems "/dev/mouse"
ClearDTR # Te dwie linie nie będą prawdopodobnie potrzebne
ClearRTS # spróbuj bez, a potem po prostu DTR
Microsoft Serial Mouse z gpm -R
Section "Pointer"
Protocol "MouseSystems"
Device "/dev/gpmdata"
EndSection
#
# Definicja myszy i powiązanych parametrów
#
MouseSystems "/dev/gpmdata"
Jedyne przewody potrzebne w kablu myszy to: TxD i RxD do przesyłu danych, RTS i/lub DTR dla zasilania i ground. Co przekłada się na numery pinów, w ten sposób:
port 9-pinowy port 25-pinowy
TxD 3 2
RxD 2 3
RTS 7 4
DTR 4 20
Gnd 5 7
Powyższa tabela może być użyteczna jeśli chcesz robić przelotki
między 9- i 25-pinowymi wtyczkami, lub kable przedłużające.
setserial, uruchamiane
z pliku startowego /etc/rc.d/rc.serial. Sprawdź w
podręczniku systemowym hasło setserial i
/etc/rc.d/rc.serial.
aby uzyskać więcej szczegółów.
Warto trochę poeksperymentować z typami, na przykład spróbuj setserial
/dev/mouse uart 16550 lub 16550a niezależnie od rodzaju
portu, który naprawdę posiadasz. (Na przykład, myszy nie lubią 16c550AF.)ClearDTR może nie działać prawidłowo w niektórych
systemach, chyba że wyłączysz RTS/CTS handshaking za pomocą polecenia:
stty -crtscts < /dev/mouse
(Sprawdzone na UART 16450/Pentium przez Vladimira Geogjaeva
geogjaev@wave.sio.rssi.ru)ChordMiddle aby włączyć
funkcjonowanie środkowego z trzech przycisków.
Ten wiersz zastępuje Emulate3Buttons lub ma być umieszczony za
wierszem /dev/mouse w pliku konfiguracyjnym.
Prawdopodobnie potrzebne będą linie ClearDTR i ClearRTS
w Xconfig. Niektóre myszy Logitech zdecydowanie nie wymagają linii
ChordMiddle - objawem tego problemu jest to że menu wydają się
poruszać z myszą zamiast skrolowac się w dół.
(Od:
chang@platform.com)xmodmap do
zmiany który rzeczywisty rejestr przycisku jest stosowany przy
kliknięciu myszy. np.: xmodmap -e "pointer = 3 2 1"
odwróci kolejność przycisków dla lewej ręki. Jeśli masz tylko
mysz dwuprzyciskową to są to numery 1 & 2.xset m aby zmienić
ustawienia myszy. np.: xset m 2 ustawi przyśpieszenie na 2.
Szczegóły w podręczniku systemowym.Invert_VCLK/InvertVCLK, lub EarlySC.
Ta informacja pochodzi od Billa Lavendera
(
lavender@MCS.COM) i Simon Hargrave'a.
W XF86Config, może to wyglądać następująco:
Subsection "Display"
Modes "1024x768" "800x600" "640x480" "1280x1024"
Invert_VCLK "*" 1
...
linear, lub może nolinear do sekcji karty graficznej
lub jeśli jest to karta PCI opcje
tgui_pci_write_off i tgui_pci_read_off.
(Wydaje się, że jest to problem z kartami Trident.)"sw_cursor" w sekcji Device pliku
konfiguracyjnego.gpm w wersji 1.13 i wyższych powinno także wspierać myszy 2.1A,
z użyciem pnp jako typu myszy. (Zobacz w rozdziale
gpm jak to reeksportować.)
Także mysz ``Microsoft Intellimouse''powoduje kłopoty, lecz powinna być
wspierana przez XFree w wersji 3.3 lub późniejszej.
Jest wiele różnych myszy na świecie i nie mogę z czystym sercem powiedzieć, że powinieneś iść i kupić raczej tą mysz, a nie tamtą. To co mogę zrobić to wyliczyć co te myszy potrafią, opierając się na doświadczeniu i pogłoskach. Nawet z tymi informacjami ostrożność jest wskazana - mieliśmy w biurze dwie identyczne myszy przy dwóch komputerach i niektóre rzeczy działały z jedną myszą i nie działały z drugą. Wszelkie dodatki do tego wyliczenia będą mile widziane.
Optyczna mysz MouseSystems, wersja szeregowa
Działa dobrze (jak można by się spodziewać po nazwie!) bez
ClearDTR lub ClearRTS w konfiguracji.
WiN mouse, sprzedawana przez Office World za osiem funtów.
Standardowa dwutrybowa mysz Microsoft/MouseSystems.
Agiler Mouse 2900
Standardowa dwutrybowa mysz Microsoft/MouseSystems.
SYSGRATION SYS2005i układ scalony nadaje się do lutowania.
Sicos mouse,
Działa ok, wymaga ClearDTR & Clear RTS w konfiguracji.
Index sprzedają mysz za 10 funtów,
Nie działa w trybie 3 przyciskowym, ale ma fajną instrukcję :-)
Artec mouse
Zwyczajna mysz o podwójnym protokole, wymaga `ClearDTR'
ustawionego w konfiguracji, NIE `ClearRTS'
DynaPoint 3 przyciskowa mysz szeregowa.
Zwyczajna mysz o podwójnym protokole, wymaga
`ClearDTR' i `ClearRTS' w konfiguracji X-ów.
Genius Easymouse mysz 3-przyciskowa
Doskonale działa w protokole Mouseman bez ustawiania parametru
ChordMiddle.
Od Roderick Johnstone (
rmj@ast.cam.ac.uk)
Truemouse, made in Taiwan
Działa OK, wymaga `ClearDTR' w konfiguracji. (Od
Tim MacEachern)
Mysz marki Champ
Wymaga przełączenia w tryb PC, co uaktywnia także protokół
MouseSystems. (Od tnugent@gucis.cit.gu.edu.au)
Mysz MicroSpeed
Zwykła mysz o podwójnym protokole.
Mysz marki Venus ($7)
Ma w środku przełącznik między trybem 2 i 3 przyciskowym.
(Od
mhoward@mth.com )
Saturn
Mysz z przełącznikiem, działa OK jako mysz MouseSystems w pozycji 3-przyciskowej.
(Od
grant@oj.rsmas.miami.edu .)
Manhattan mouse.
Jest przełącznik trybów `MS AM' / `PC AT', tryb MS działa doskonale z
rozwiązaniem z gpm -R. (Od
komanec@umel.fee.vutbr.cz).
Mysz Inland.
Przełącznik dla trybów `PC/MS', działa doskonale. (Od
http://ptsg.eecs.berkeley.edu/~venkates).
qMouse (3-przyciskowa), FCC ID E6qmouse X31.
Sprzedawana w USA za około $10. działa z `gpm -t msc -r 20'.
Nie ma jumperów lub
przełączników do 3-przyciskowego trybu MouseSystems. Nie jest
godna polecenia w X.
Nie reaguje na echo "*n" > /dev/mouse.
Mitsumi Mouse (2-przyciskowa), FCC ID EW4ECM-S3101.
Sprzedawana w USA za około $12. Godna polecenia w X i w gpm,
łagodny klik. (Te dwa od
gustafso@math.utah.edu)
Myszy PC Accessories które kupiłem w CompUSA poniżej $10.
Ma przełącznik PC/MS na spodzie. Działa OK. (Od
steveb@communique.net)
First Mouse - naprawdę tanio za 7.79 funtów w Tempo.
Dwutrybowa mysz Microsoft/MouseSystems, tryb ustawiany przez
wciśnięcie przycisku przy włączeniu zasilania.
Nie ma przełączników, ani połączeń. Cztero kablowe połączenie,
echo '*n' nie działa. `gpm -R' działa wspaniale. (Od
peterk@henhouse.demon.co.uk)
Mysz 3-przyciskowa Trust.
O dwóch trybach z przełącznikiem, działa dobrze jako MouseSystems
w trybie `PC'. gpm gryzie się z trybem Microsoft.
Chic 410
działa doskonale w ustawionym trybie ms i przy użyciu polecenia gpm -R
Od Stephena M. Weissa
(
steve@esc.ie.lehigh.edu)
Trzyprzyciskowa mysz KeyMouse.
działa prawidłowo z ClearDTR i ClearRTS w Xconfig;
w gpm konieczne `-o dtr' . (Od
EZ4PHIL@aol.com)
Klawiatura Qtronix `Scorpio 60'
Wszystkie trzy przyciski działają w protokole MouseSystems. (Od
hwe@uebemc.siemens.de)
Laptop Tecra 720
Glidepoint jest na /dev/cua0; rysik na /dev/psaux.
(Od
apollo@anl.gov)
Mysz Anubis
Działa doskonale, wymaga przytrzymywania lewego przycisku
przy przełączaniu do wirtualnej konsoli X.
(Od
Joel Crisp)
Yakumo No.1900 mouse
Działa z eksportem do X-ów gpm -R -t ms.
(Od
Oliver Schwank)
Genius `Easy Trak' Trackball
Nie jest zgodna z trybem Microsoft, użyj Mouseman
w konfiguracji X-ów i będzie działać doskonale.
(Od
VTanger@aol.com.)
Highscreen Mouse Pro
`Działa doskonale' twierdzi
alfonso@univaq.it.
Logitech CA series
Działa w X-ach używając protokołu MMseries, przy 2400 Baud, 150 SampleRate.
(Powinno też odnosić się do myszy Logitech CC, CE, C7 & C9). (Od
vkochend@nyx.net.)
Mysz A4-Tech
Działa OK, wymaga wpisu DTR pod X-ami i gpm.
(Od
deane@gooroos.com)
Mysz Vertech
Prawidłowe zachowanie Microsoft/Mousesystems, można zalutować do
ustawienia na stałe.
(Od
duncan@fs3.ph.man.ac.uk.)
Boeder M-7 ``Bit Star'' (i inne z serii M oprócz M13)
Przełącza się w tryb Mousesystems trzymając lewy przycisk przy
włączaniu zasilania.
(Od
mailto:sjt@tappin.force9.co.uk.)
Mouse Systems ``Scroll'' Mouse (cztery przyciski i roller/przycisk)
Ma przełącznik 2/3 - w trybie 3 działa jako trzyprzyciskowa mysz
MouseSystems,
bez działającego dodatkowego przycisku & kółka.
Nie wymaga ClearRTS/DTR.
(Od
parker1@airmail.net.)
Mysz Szeregowa 3-przyciskowa Radio Shack
Model 26-8432, dostępny w Tandy za około 20 funtów. Działa jako
Mousesystems z ClearDTR.
(Od
Sherilyn@sidaway.demon.co.uk.)
Myszy szeregowe Dexxa
Działają doskonale w trybie Microsoft w Xconfig, nie jest potrzebne
ChordMiddle lub nic podobnego.
(Od
mailto: slevy@ncsa.uiuc.edu.)
Myszy 3-przyciskowe Belkin
Kupowane w Sears (\$10), wymagają -o rts z gpm
(i prawdopodobnie ClearRTS w X) gdy jest w trybie PC.
(Od
mailto: mmicek@csz.com.)
Większość informacji w tym dokumencie została zaczerpnięta z różnych linuksowych grup dyskusyjnych. Przepraszam, że nie umieściłem informacji o wszystkich, którzy pośrednio przyczynili się w ten sposób, dziękuję bardzo wam wszystkim.
Podsumowując :
doc-linux-pl-2002.06.14.orig/html/AX25-HOWTO.pl.html 0100664 0001750 0001750 00000376337 06770264140 020243 0 ustar coven coven
Dokument ten był początkowo załącznikiem do HAM-HOWTO ale urósł za bardzo, aby można go było w ten sposób nadal pisać. Dokument ten opisuje w jaki sposób zainstalować i skonfigurować rodzimą obsługę protokołów AX25, NetRom oraz Rose na Linuxie. Podano tutaj kilka typowych konfiguracji, które mogą posłużyć jako model do dalszej pracy.
Wersje protokołów radia amatorskiego pod Linuxem są bardzo elastyczne. Dla ludzi, którzy nie są zbytnio zapoznani z systemem operacyjnym Linux proces konfiguracji wydawać się może uciążliwy i skomplikowany. Zajmie ci to trochę czasu zanim zrozumiesz w jaki sposób wszystko ze sobą pasuje. Konfiguracja jest bardzo trudna jeśli wpierw nie zapoznasz się z Linuxem ogólnie. Nie oczekuj, że uda ci się przejść z jakiegoś środowiska do Linuxa bez zapoznania się uprzednio z samym Linuxem.
dołączyłem informacje o łatce dla modułów. Dodałem parę ogólnych informacji o strukturze jądra.
Poprawiłem konfiguracje ax25d - podziękowania dla John Tanner, VK2ZXQ. Poprzestawiałem mnóstwo rzeczy, powinno teraz być bardziej logicznie.
Poprawić sekcję o SCC, obecna jest chyba zła. Rozwinąć sekcję programowania. Dodać odnośniki do dokumentacji źródeł AX25 i NetRom.
Jest wiele związanych z tym tematem dokumentów. Jest sporo dokumentów traktujących o sprawach sieciowych pod Linuxem w sposób bardziej ogólny, które bardzo polecam ponieważ pomogą ci one w twoich wysiłkach i dadzą ci głebszy wgląd w inne możliwe konfiguracje.
Oto one:
Najlepszym miejscem do znalezienia ostatniej wersji tego dokumentu jest Archiwum Linux Documentation Project. Linux Documentation Project prowadzi Web Server i dokument niniejszy pojawia się tam jako The AX25-HOWTO. Możesz też skontaktować się ze mną ale zwykle przekazuję ostatnie wersje tego dokumentu koordynatorowi projektu LDP, więc jeśli go tam nie ma to są duże szanse, że jeszcze go nie skończyłem.
Protokół AX.25 oferuje dwa tryby operacji: connected i connectionless. Używany jest albo do połączeń typu stacja-do-stacji albo jako medium dla innych protokołow takich jak TCP/IP lub NetRom.
Podobny jest w swej strukturze do X.25 level 2 z pewnymi modyfikacjami, które czynią go bardziej użytecznym do pracy w środowisku radia amatorskiego.
Protokół NetRom jest próbą pełnego protokołu sieciowego i w swej najniższej warstwie używa AX.25 jako protokołu typu datalink. Dostarcza on sieciowej warstwy, która jest adaptowaną formą AX.25. Protokół NetRom cechuje się dynamicznym routingiem, posiada też funkcję pseudonimów dla węzłów.
Protokół Rose został wynaleziony i po raz pierwszy zastosowany przez Tom'a Moulton, W2VY, i jest wariacją protokołu X.25 w warstwie packet. Pomyślany jest tak, że AX.25 jest jego warstwą typu datalink. Sam również dostarcza warstwę sieciową. Adresy Rose przyjmują formę 10 cyfrowych numerków. Pierwsze cztery cyfry stanowią Data Network Identification Code (DNIC) i wzięte zostały z załącznika B z zaleceń CCITT X.121. Więcej informacji na temat protokołu Rose można uzyskać z Serwera RATS.
Początkowo, wczesne oprogramowanie AX.25 współpracujące z jądrem Linuxa wypracował Alan Cox. Następnie Jonathon Naylor przejął rozwijający się projekt dodając obługę NetRomu i Rose; obecnie on właśnie zajmuje się opracowywaniem źródeł AX.25 współpracujego z jądrem Linuxa. DAMA zostało napisane przez Joerg Reuter. Obsługę karty dźwiękowej jako modemu oraz modem Baycom dodał Thomas Sailor. Programy narzędziowe AX.25 są obecnie prowadzone przeze mnie.
Linux obsługuje TNC w trybie KISS (Terminal Node Controllers), kartę Ottawa PI, kartę Gracillis PacketTwin oraz inne oparte na scalaku SCC Z8530, modem Baycom zarówno seryjny jak i równoległy. Nowy, od Tomasza, sterownik DźwiękoModemu obsługuje karty dźwiękowe SoundBlaser oraz te zbudowane w oparciu o Crystal chipset.
Programy użytkownika zawierają prosty PMS (Personal Message System), program latarnie, liniowy program 'call' do połaczeń, 'listen' przykładowy program do uchwycenia surowych ramek AX.25 na poziomie interfejsu, oraz programy do konfiguracji NetRomu. Załączono również program, ktory jest jakby serwerem AX.25 przechwytującym i rozprowadzającym wchodzące połączenia; jest też demonik dla NetRomu, który wykonuje całą czarną robotę dla obsługi protokołu NetRom.
AX.25 pod Linuxem jest zupełnie nową implementacją. Choć na pozór wygląda podobnie do NOS, BPQ lub innych implementacji AX.25 to jednak nie przypomina żadnej z nich ani nie jest identyczną z żadną z nich. AX.25 pod Linuxem można skonfigurować tak, że będzie zachowywać się niemalże tak jak inne implementacje AX.25 ale proces konfiguracyjny jest bardzo odmienny.
Aby dopomóc ci w sposobie myślenia przy konfigurowaniu, sekcja ta stara się wyjaśnić niektóre strukturalne cechy AX.25 oraz umieszcza je w ogólnej strukturze Linuxa.
Uproszczony schemat warstw protokołów sieciowych.
-----------------------------------------------
| AF_AX25 | AF_NETROM | AF_INET | AF_ROSE |
|=========|===========|=============|=========|
| | | | |
| | | TCP/IP | |
| | ---------- | |
| | NetRom | | Rose |
| -------------------------------------
| AX.25 |
-----------------------------------------------
Schemat ten ilustruje poprostu, że NetRom, TCP/IP i Rose wszystkie razem rezydują na protokole AX.25 ale że każdy z nich traktowany jest osobno u poziomu programowania na interfejsie. Nazwy 'AF' to nazwy nadawane dla Address Family każdego z tych protokołów podczas pisania dla nich programów. Ważne tutaj jest to, że konfiguracja urządzenia AX.25 kluczowo wpływa na to jak będą konfigurowane NetRom, Rose oraz TCP/IP.
Schemat modułów w implementacji sieciowej Linuxa
----------------------------------------------------------------------------
User | Programs | call node || Daemons | ax25d mheardd
| | pms mheard || | inetd netromd
----------------------------------------------------------------------------
| Sockets | open(), close(), listen(), read(), write(), connect()
| |------------------------------------------------------
| | AF_AX25 | AF_NETROM | AF_ROSE | AF_INET
|------------------------------------------------------------------
Kernel | Protocols | AX.25 | NetRom | Rose | IP/TCP/UDP
|------------------------------------------------------------------
| Devices | ax0,ax1 | nr0,nr1 | rose0,rose1 | eth0,ppp0
|------------------------------------------------------------------
| Drivers | Kiss PI2 PacketTwin SCC BPQ | slip ppp
| | Soundmodem Baycom | ethernet
----------------------------------------------------------------------------
Hardware | PI2 Card, PacketTwin Card, SCC card, Serial port, Ethernet Card
----------------------------------------------------------------------------
Ten schemat jest troszeczkę bardziej ogólny od pierwszego. Stara się on ukazać zależność pomiędzy programami narzędziowymi, jądrem oraz sprzętem. Pokazuje też zależność pomiędzy interfejsem programowania gniazd dla aplikacji, właściwymi modułami protokołów, interfejsami sieciowymi jądra, oraz sterownikami urządzeń. Każdy element schematu polega na tym elemencie, który jest poniżej niego samego i konfigurację trzeba rozpoczynać od samego dołu w górę. Więc dla przykładu, jeśli chesz odpalać program call to musisz również skonfigurować sprzęt, następnie upewnić się, że jądro posiada odpowiedni sterownik urządzenia, dalej musisz stworzyć właściwy interfejs sieciowy oraz, że jądro zawiera właściwy protokół, który oferuje odpowiedni dla programu call interfejs programowania. W takiej hierarchii starałem się też rozłozyć ten dokument.
Oprogramowanie AX.25 składa się z trzech części: źrodeł jądra, narzędzi do konfiguracji sieci oraz programów narzędziowych.
Wersje jądra Linuxa 2.0.xx zawierają w sobie pierwotnie sterowniki dla AX.25, NetRom, dla kart Z8530 SCC, PacketTwin i Gracillis. Zostały one znacząco udoskonalone w jądrach 2.1.xx. Niestety, pozostała część jądra 2.1.* czyni je bardzą chwiejnymi i nie nadają sie w takim stanie do załączenia w stabilnych wersjach jąder. Aby zaradzić temu problemowi, Jonathon Naylor przygotował zespół łatek, które oblugę protokołów radia amatorskiego w jądrach 2.0.xx wynoszą do poziomu standardu jąder 2.1.*. Jest to bardzą łatwe w zaaplikowaniu i wprowadza wachlarz usług, które są nieobecne w standardowych jądrach, np. obługę Rose.
Źródła jądra należy szukać w jego zwyczajnym miejscu:
ftp://ftp.funet.fi//pub/Linux/PEOPLE/Linus/v2.0/linux-2.0.29.tar.gz
Obecna kopia zespołu łatek według Jonathon'a znajduje się na:
ftp://ftp.cs.nott.ac.uk/jsn/ax25-module-12.tar.gz
Ostatnia wersja alpha standardowych narzędzi sieciowych Linuxa obsługuje AX.25 i NetRom i można ją znależć tutaj:
ftp://ftp.inka.de/pub/comp/Linux/networking/net-tools/net-tools-1.32-alpha.tar.gz
lub
ftp://ftp.linux.org.uk/pub/linux/Networking/base/net-tools-1.32-alpha.tar.gz
Ostani pakiet ipfwadm można znaleźć tu:
ftp://ftp.xos.nl/pub/linux/ipfwadm/
Istnieją dwie odmienne żyły programów narzędziowych AX.25. Jedna przeznaczona jest do pracy z jądrami 2.0.* a druga albo do jąder 2.1.* lub do kombinacji: jądro 2.0.28+łatka module10. Numer wersji pakietu ax25-utils wskazuje na najstarszą wersję jądra, z którą mogą pracować. Wybierz sobie taką wersję pakietu ax25-utils, która będzie pracować z jądrem twojego systemu.
Programy narzędziowe dla 2.1.22 i późniejszych, oraz ax25-utils+module można znaleźć na domowej stronie Jonathon'a Naylor:
ftp://ftp.cs.nott.ac.uk/jsn/ax25-utils-2.1.22b.tar.gz
lub na:
ftp://sunsite.unc.edu/pub/Linux/apps/ham/ax25/ax25-utils-2.1.22b.tar.gz
Starsze narzędzia, zdolne do pracy z niepołatanym jądrem 2.0.29 nazywają się ax25-utils-2.0.12c.tar.gz w tym samym miejscu.
Aby w sposób udany zainstalować obsługę AX.25/NetRom na systemie Linux należy skonfigurować i zainstalaować właściwe jądro a następnie programy narzędziowe AX.25.
Jeśli jesteś już zaznajomiony z kompilowaniem jądra na Linuxie to możesz pominąć tę sekcję, upewnij się tylko, że wybrałeś właściwe opcje dla jądra. Jeśli nie, to czytaj dalej.
Normalnie, źródła jądra należy rozpakowywać będąc w katalogu /usr/src do podkatalogu zwanego linux. Aby to uczynić należy się zalogować jako root a następnie wykonać takie czynności:
# cd /usr/src
# mv linux linux.old
# tar xvfz linux-2.0.29.tar.gz
# tar xvfz ax25-module-12.tar.gz
# patch -p0 < /usr/src/ax25-module-12/ax25-2.0.29-2.1.22.diff
# cd linux
Po tym jak rozpakowałeś i połatałeś jądro, musisz odpalić skrypt konfiguracyjny i zaznaczyć opcje, które odpowiadają układowi twojego sprzętu oraz te, które chcesz, aby były obecne w jądrze. Wystarczy napisać:
# make config
Jeśli wolisz metodę opartą o menu to można też spróbować:
# make menuconfig
Opiszę tutaj metodę zasadniczą, a ty wybierz taką jaka ci najbardziej odpowiada. W obu przypadkach zostaniesz postawiony wobec pytań, na które trzeba odpowiedzieć "tak" lub "nie". (Zauważ, że można też odpowiedzieć naciśnięciem "M" jeśli używaż modułów w Linuxie. Dla uproszczenia jednak przyjmuję, że ich nie używasz, więc dokonaj właściwych poprawek jeśli jest przeciwnie.)
Najbardziej zasadniczymi opcjami dla skonfigurowania AX.25 są:
Code maturity level options --->
...
[*] Prompt for development and/or incomplete code/drivers
...
General setup --->
...
[*] Networking support
...
Networking options --->
...
[*] TCP/IP networking
[?] IP: forwarding/gatewaying
...
[?] IP: tunneling
...
[?] IP: Allow large windows (not recommended if <16Mb of memory)
...
[*] Amateur Radio AX.25 Level 2
[?] Amateur Radio NET/ROM
[?] Amateur Radio X.25 PLP (Rose)
...
Network device support --->
[*] Network device support
...
[*] Radio network interfaces
[?] BAYCOM ser12 and par96 driver for AX.25
[?] Soundcard modem driver for AX.25
[?] Soundmodem support for Soundblaster and compatible cards
[?] Soundmodem support for WSS and Crystal cards
[?] Soundmodem support for 1200 baud AFSK modulation
[?] Soundmodem support for 4800 baud HAPN-1 modulation
[?] Soundmodem support for 9600 baud FSK G3RUH modulation
[?] Serial port KISS driver for AX.25
[?] BPQ Ethernet driver for AX.25
[?] Gracilis PackeTwin support for AX.25
[?] Ottawa PI and PI/2 support for AX.25
[?] Z8530 SCC KISS emulation driver for AX.25
...
Opcje, które oznakowałem jako '*' to te, na które musisz odpowiedzieć 'Y' - tak. Reszta jest zależna od sprzętu, jaki posiadasz oraz od opcji, które sobie życzysz. Niektóre z tych opcji są opisane trochę poźniej, więc jeśli nie wiesz jeszcze czego chcesz to czytaj dalej a potem tutaj wróć.
Po skończeniu konfiguracji jądra powinieneś teraz gładko skompilować jądro:
# make dep
# make clean
# make zImage
Upewnij się, aby skopiować plik arch/i386/boot/zImage tam gdzie być powinien oraz zrób edycje /etc/lilo oraz restartuj lilo, abyś faktycznie odpalił system z nowego jądra.
Jądra 2.1.* zawierają udoskonalone wersję niemalże wszyskich protokołów oraz sterowników. Najbardziej znaczące nowinki to:
modularyzacja
protokoły i sterowniki zostały zmodularyzowane tak, że można nimi do woli żąglować poleceniami insmod, rmmod. Redukuje to wymogi pamięciowe dla jądra przy sporadycznie używanych modułach oraz sprawia, że polowanie na pluskwy i pielęgancja są łatwiejsze.
wszystkie sterowniki są teraz sterownikami sieciowymi
wszelkie urządzenia jak Baycom, SCC, PacketTwin, Gracillis itp. oferują teraz normalny interfejs sieciowy, tzn. wyglądają teraz tak jak sterownik Ethernetu; nie wyglądają już tak jak TNC w trybie KISS. Na życzenie, można zbudować interfejs kiss do tych urządzeń przy pomocy programiku 'net2kiss'.
usunięto pluskwy
wiele pluskw zostało wykrytych i zniszczonych dodano też do sterowników i protokołów sporo nowych cech i funkcji.
Teraz, po wykompilowaniu jądra, powinieneś również skompilować nowe narzędzia do konfiguracji sieci. Przy ich pomocy będziesz mógł manipulować interfejsami sieciowymi oraz dodawać routing do tablic routingowych.
Nowa wersja alpha standardowego pakietu net-tools zawiera obsługę AX.25 i NetRom. Sprawdzałem to i wydaje się, że u mnie działa to świetnie.
Nie zapomnij przeczytać pliku Readme i zastosować się to wszelkich tam podanych wskazówek. Czynności jakie ja wykonałem, by skompilować net-tools to:
# cd /usr/src
# tar xvfz net-tools-1.32-alpha.tar.gz
# cd net-tools-1.32-alpha
# make config
W tym stadium zaoferowane ci zostaną pytania podobnie jak przy kompilacji jądra. Upewnij się, aby zaznaczyć obsługę jakichkolwiek protoków, które zamierzasz używać.W razie, gdybyś nie wiedział co odpowiedzieć, zaznacz "Y".
Net-tools powinny skompilować się gładko ze źródłami jądra bez żadnych ostrzeżeń. gdy kompilacja ustanie, wówczas wydaj polecenie:
# make installto zainstaluje programy w ich właściwe miejsca.
Jeśli planujesz używać usługę IP firewall to potrzebujesz ostatnich narzędzi ipfwadm do administracji ściany ogniowej. Narzędzie to podmienia starsze ipfw, które nie pracuje już z nowszymi jądrami.
Programik ipfwadm skompilowałem w taki sposób:
# cd /usr/src
# tar xvfz ipfwadm-2.0beta2.tar.gz
# cd ipfwadm-2.0beta2
# make install
# cp ipfwadm.8 /usr/man/man8
# cp ipfw.4 /usr/man/man4
Po skompilowaniu i restarcie nowego jądra, potrzebujesz jeszcze skompilować programy narzędziowe. Aby skompilować programy narzędziowe należy wykonać takie czynności:
# cd /usr/src
# tax xvfz ax25-utils-2.1.22b.tar.gz
# cd ax25-utils-2.1.22b
# make config
# make
# make install
Pliki zostaną zainstalowane pierwotnie do katalogu /usr w podkatalogi takie jak:
bin, sbin, etc and man.
Jeśli pokażą ci się ostrzeżenia podobnej treści:
gcc -Wall -Wstrict-prototypes -O2 -I../lib -c call.c call.c: In function `statline': call.c:268: warning: implicit declaration of function `attron' call.c:268: `A_REVERSE' undeclared (first use this function) call.c:268: (Each undeclared identifier is reported only once call.c:268: for each function it appears in.)zatem powinieneś pozprawdzać czy masz na swoim systemie zainstalowany poprawnie pakiet
ncurses. Skrypt konfiguracyjny stara się zlokalizować pakiet ncurses na twoim systemie w znanych katalogach. Niektóre jednak instalacje źle wpisują ncurses i skryp nie potrafi ich znaleźć.
Każdy port AX.25 lub NetRom na twoim systemie musi mieć przydzielony znak i przypięty do niego numeryczny identyfikator stacji. Rzeczy te konfigurujemy w plikach, które zostały opisane dalej. Niektóre implementacje AX.25, np. BPQ lub NOS, pozwalają na przypisanie tego samego znaku/indentyfikatora na obu portach AX.25 i NetRom. Linux na to nie pozwala z pewnych technicznych, skomplikowanych powodów. W praktyce, nie jest to taki wielki problem.
Oznacza to, że przy konfigurowaniu trzeba być świadomy tych rzeczy i wziąć je pod uwagę:
znakach/identyfikatorach i w dodatku można te znaki duplikować po wszelakich portach.Analogicznie, tak jak nie każdy radiooperator jest inżynierem, tak samo nie każda implementacja AX.25 jest zgodna ze standardem TNC2. Linux stosuje nomenklaturę, która różni się w pewnym względzie od tej, jakiej używałbyś,jeśli jedynym twoim doświadczeniem w packet radio byłby TNC. Podana niżej tablica powinna być pomocna w interpretacji czym są poszczególne elementy, które daje się konfigurować, zatem jeśli napotkasz je później w tym tekście pomoże ci to w ich zrozumieniu.
-------------------------------------------------------------------
Linux | TAPR TNC | Description
-------------------------------------------------------------------
T1 | FRACK | czas wyczekiwania przed retransmisją
| | niepotwierdzonej ramki
-------------------------------------------------------------------
T2 | RESPTIME | minimalny czas wyczekiwania na inną ramkę
| | przed transmisją potwierdzenia
| |
-------------------------------------------------------------------
T3 | CHECK | czas wyczekiwania pomiędzy sprawdzeniami czy
| | lącze jest nadal aktywne
-------------------------------------------------------------------
N2 | RETRY | ilość retransmisji zanim założymy, że lącze
| | padło
-------------------------------------------------------------------
Idle | | okres czasu, który łącze może stać bezczynnie
| | zanim zostanie zamknięte
-------------------------------------------------------------------
Window | MAXFRAME | maksymalna liczba niepotwierdzonych,
| | wytransmitowanych ramek
-------------------------------------------------------------------
Jądra 2.1.* oraz 2.0.29+module mają nową cechę, która pozwala na zmianę uprzednio niemożliwych do manipulacji wartości w trakcie pracy. Jeśli uważnie przyjrzysz się strukturze katalogu /proc/sys/net/ to zauważysz parę plików o sugestywnych nazwach, które wskazują na różne parametry do konfigurowania sieci. Każdy plik w katalogu /proc/sys/net/ax25 reprezentuje jeden ustawiony port AX.25. Nazwa pliku odnosi się do nazwy portu. Struktura plików wygląda następująco:
No. Nazwa Znaczenie Wartość domyślna 1 IP Default Mode 0=DG 1=VC 0 2 AX.25 Default Mode 0=Normal 1=Extended 0 3 Allow Vanilla Connects 0=No 1=Yes 1 4 Backoff 0=Linear 1=Exponential 1 5 Connected Mode 0=No 1=Yes 1 6 Standard Window 1 <= N <= 7 2 7 Extended Window 1 <= N <= 63 32 8 T1 Timeout 1s <= N <= 30s 10s 9 T2 Timeout 1s <= N <= 20s 3s 10 T3 Timeout 0s <= N <= 3600s 300s 11 Idle Timeout 0m <= N 20m 12 N2 1 <= N <= 31 10 13 AX.25 Frame Length 1 <= N <= 512 256 14 Max Queue 1 <= N <= 20 2 15 Digipeater Mode 0=None 1=Inband 2=XBand 3=Both 3
W powyższej tablicy T1, T2, T3 zostały podane w sekundach a Idle Timout podano w minutach. Zauważ jednak, że wartości używane przez interfejs sysctl mierzone są wartościami wewnętrznymi, gdzie czas w sekundach mnożony jest przez 10, co pozwala na rozdrobnienie na 1/10 sekundy. Tam, gdzie liczniki pozwalają na wartość zero, np. T3 lub Idle, zero oznacza, że licznik jest wyłączony.
Każdy program AX.25 wpierw czyta plik konfiguracyjny, aby uzyskać potrzebne parametry poszczególnego portu AX.25, obecnego na twoim systemie Linux. Dla portów AX.25 jest to plik /etc/ax25/axports. Każdy port AX.25, który chcesz mieć na swoim systemie, musi być w tym pliku opisany.
Plik /etc/ax25/axports to prosty tekstowy plik, który tworzymy zwykłym edytorem. Format pliku /etc/ax25/axports jest następujący:
portname callsign baudrate paclen window description
Gdzie:
portname
to wolna nazwa, krórą należy ochrzcić port, używana do nazewnictwa tego portu
callsign
znak/identyfikator, który przypisujesz dla portu AX.25
paclen
to maksymalna długość pakietów, które będą możliwe na tym porcie przy transmisjch AX.25 w trybie 'connected'.
window
to parametr (K) AX.25 window. To samo co MAXFRAME w wielu urządzeniach TNC.
description
to dowolny opis tego portu
W moim przypadku wygląda to tak:
radio VK2KTJ-15 4800 256 2 4800bps 144.800 MHz
ether VK2KTJ-14 10000000 256 2 BPQ/ethernet device
Pamiętaj, że należy przypisać unikalny znak/identyfikator dla każdego portu AX.25, który utworzysz. Wprowadź jeden wpis dla każdego urządzenia AX.25, które chcesz używać. Odnosi się to do portów: KISS, Baycom, SCC, PI, PT, DźwiękoModem. W tym miejscu każdy wpis ma odnosić się do każdego z osobna urządzenia AX.25. Wpisy w tym pliku powiązane są z interfejsami sieciowymi poprzez ich znak/identyfikator.
Plik ten używany będzie przez programy opisane dalej.
Interfejs sieciowy jest tym, co widać na ekranie po wydaniu polecenia 'ifconfig'. Jest to objekt, poprzez który jądro Linuxa odbiera i wysyła dane sieciowe. Prawie zawsze interfejs sieciowy związany jest z fizycznym portem, są jednak wypadki, kiedy nie jest to konieczne. Interfejs sieciowy odnosi się wówczas bezpośrednio do sterownika urządzenia fizycznego. W oprogramowaniu AX.25 pod Linuxem istnieje wiele sterowników urządzeń fizycznych. Najpopularniejszym jest zapewne sterownik KISS, lecz są też inne jak np. sterownik SCC, Baycom czy SoundModem (DźwiękoModem).
Każdy z tych sterowników, przy uruchomianiu go, spowoduje również otworzenie interfejsu sieciowego.
Najczęściej spotykaną konfiguracją bedzię chyba KISS TNC na porcie seryjnym. Należy uprzednio skonfigurować sam TNC i doczepić go do portu seryjnego. Aby wprowadzić swój TNC w tryb KISS można użyć programu terminala, jak np. minicom lub seyon. Z kolei, aby utworzyć urządzenie KISS należy użyć polecenia 'kissattach', które to polecenie w swej najprostszej formie może wyglądać tak:
# /usr/sbin/kissattach /dev/ttyS0 radio
# kissparms -p radio -t 100 -s 100 -r 25
Polecenie kissattach utworzy też sieciowy interfejs KISS. Interfejsy te noszą wtedy nazwę od 'ax[0-9]'. Przy pierwszym wydaniu polecenia 'kissattach' powstaje 'ax0', przy następnym 'ax1', itd. Każdy interfejs KISS powiązany jest ze swoim portem seryjnym.
Polecenie 'kissparms' pozwala na manipulowanie różnymi parametrami interfejsu KISS.
W podanym wyżej przykładzie dołączony zostałby sieciowy interfejs KISS do seryjnego urządzenia w Linuxie '/dev/ttyS0' i do portu oznaczonego w pliku /etc/ax25/axports jako 'radio'. Następnie konfigurowany on jest z wartościami 100 milisekund dla txdelay oraz slottime i wartością 25 dla ppersist.
Więcej informacji można znaleźć w man pages w Linuxie.
Programik 'mkiss', zawarty w programach narzędziowych ax25-utils, pozwala na wykorzystanie obydwu modemów w urądzeniach TNC o dwóch portach. Ustawienie jest dość proste. Programik ten działa tak, że biorąc pojedyncze urządzenie dołaczone do wieloportowego TNC przedstawia je tak, iż wygląda ono, jakby to były dwa urządzenia, każde z własnym TNC. Czynność tę trzeba wykonać zanim zaczniesz jakąkolwiek konfigurację AX.25. Powstałe na skutek tego interfejsy pseudo-TTY, (/dev/ttypf*), które nie są rzeczywistymi urządzeniami seryjnymi, wykorzystywane są z kolei do konfiguracji AX.25. Interfejsy Pseudo-TTY wyprowadzają swego rodzaju fajkę, poprzez którą programy umiejące nadawać do urządzeń /dev/tty mogą sie porozumiewać między sobą. Każda fajka posiada końcówkę master i slave. Końcówki master są ogólnie oznaczane jako /dev/ptyp*, końcówki slave mają emblem /dev/ttyp*. Pomiędzy master a slave istnieje intymna zależnośc, zatem /dev/ptyp0 stanowi koncówkę master dla przewodu, ktory ma /dev/ttyp0 na końcówce slave. Zanim otworzysz końcówkę slave, musisz najpierw otworzyć końcówkę master. 'mkiss' wykorzystuje ten właśnie mechanizm do rozczepienia pojedynczego urządzenia seryjnego, na osobne.
Przykład: jeśli posiadasz TNC o dwóch portach i jest ono doczepione do seryjnego urządzenia /dev/ttyS0 o prędkości 9600 bps, to polecenie:
# /usr/sbin/mkiss -s 9600 /dev/ttyS0 /dev/ptyp0 /dev/ptyp1
# /usr/sbin/kissattach /dev/ttyp0 port1
# /usr/sbin/kissattach /dev/ttyp1 port2
utworzy dwa interfejsy pseudo-tty, a każde z nich wyglądać będzie tak, jakby było pojedynczym seryjnym portem, każde z własnym TNC. Wowczas interfejsy /dev/ttyp0 i /dev/ttyp1 możesz potraktować tak jak inne konwencjonalne seryjne porty z doczepionymi do nich urządzeniami TNC. W praktyce oznacza to, ze odpaliłbyś dla obydwu polecenie 'kissattach' przy zachowaniu wpisów o portach AX.25 jako port1 i port2. Nie należy odpalać polecenia 'kissattach' dla rzeczywistego urządzenia /dev/ttyS0 ponieważ zajęte zostało ono przez program 'mkiss'.
Polecenie 'mkiss' przyjmuje szereg dodatkowych argumentów, które są do twojej dyspozycji. Oto ich streszczenie:
-c pozwala na dodanie checksum o jednym byte.
Większość implementacji KISS tego nie obsluguje, jest to
możliwe przy użyciu Rom'u G8BPG KISS.
-s <speed>
ustawia prędkość portu urządzenia seryjnego.
-h omożliwia hardware handshaking na porcie seryjnym, pierwotnie
jest wyłączone. Większść implementacji KISS tego nie obsługuje.
Niektóre jednak to mają.
-l umożliwia prowadzenie log'u do plików typu syslog.
Wbrew powszechnemu przekonaniu, że nie będzie to zbyt dobrze działać, Thomas Sailor podjął się rozbudowy obsługi modemów Baycom pod Linuxem. Jego sterowniki obsługują modemy Ser12 na port seryjny, oraz Par96 i udoskonalony PicPar na porty równoległe. Więcej informacji o samych modemach można uzyskać na Web Serverze Baycoma
Najpierw musisz sprawdzić adres wejścia/wyścia oraz adresy bazowe portu seryjnego lub równoległego, do którego masz doczepiony modem Baycom. Z tą informacją możesz dopiero konfigurować sterownik samego Baycom'a.
Programik sethdlc pozwala na użycie tych parametrów ze sterownikiem, lub, jeśli masz tylko jeden modem Baycom i używasz modułów w Linuxie to można te parametry podać ręcznie jako opcje dla programu 'insmod' ładującego moduł Baycom'a.
Dla przykladu, prosty układ. Wyłączenie sterownika urządzenia seryjnego COM1:, a następnie ustawienie tam sterownika modemu Baycom Ser12 na COM1: z użyciem detekcji typu software DCD:
# setserial /dev/ttyS0 uart none # insmod baycom mode="ser12*" iobase=0x3f8 irq=4
Albo modem Par96 na porcie równoległym LPT1: z użyciem detekcji hardware DCD:
# insmod baycom mode="par96" iobase=0x378 irq=7 options=0Nie jest to jednak najlepszy sposób. Programik
sethdlc działa dobrze zarówno z jednym jak i z wieloma urządzeniami.
Podręcznik systemowy 'man' programiku sethdlc opisuje szczegóły na ten temat, jednak kilka przykładów pozwoli zilustrować ważniejsze aspekty tejże konfiguracji. Poniższy przykład zakłada, że załadowałeś już moduł Baycom'a poleceniem:
# insmod baycomUstawienie sterownika dla interfejsu bc0 stusując równoległy modem Baycom na LPT1: detekcja typu software DCD:
# sethdlc -p -i bc0 mode par96 io 0x378 irq 7
Ustawienie sterownika dla interfejsu bc1 stosując seryjny modem Baycom na COM1::
# sethdlc -p -i bc1 mode "ser12*" io 0x3f8 irq 4
Parametry dostępu do kanałów AX.25 są analogiczne do parametrów KISS, takich jak ppersist, txdelay, slottime. Tutaj też używamy programiku sethdlc.
I znów podręcznik systemowy 'man' jest głównym źródłem informacji na temat sethdlc, ale jak zwykłe jeden czy drugi przykład nie zaszkodzi:
Ustawienie interfejsu bc0 z wartością 200ms dla TxDelay, 100ms dla Slottime, wartość 40 dla ppersist oraz half-duplex:
# sethdlc -i bc0 -a txd 20 slot 10 ppersist 40 half
Zauważ, że wartości licznika są tutaj podane w 10-tkach milisekund.
Thomas Sailor napisał nowy sterownik dla jądra Linuxa pozwalający na użycie karty dźwiękowej komputera jako modemu do packet radio. Można teraz podłączyć radio bezpośrednio do karty dźwiękowej i zabawić się w packet!! Thomas poleca przynajmniej procesor 486DX/66 ponieważ cały ciężar obliczeniowy sygnału cyfrowego spada w tym wypadku na CPU.
Obecnie sterownik emuluje takie typy modemów: 1200 bps AFSK, 4800 HAPN and 9600 FSK (G3RUH compatible). Jedyne karty, które są obługiwane tym sterownikiem to te, zgodne z SoundBlaster oraz WindowsSoundSystem. Karty dźwiękowe potrzebują dodatkowego układu wspomagającego układ PTT a informację na ten tema można zasięgnąć na domowej stronie Thomas'a Sailora, tutaj. Istnieje szereg możliwości: detekcja syganłu z karty dźwiękowej, lub przez port równoległy, seryjny, port midi. Przykłady schematów są na stronie Thomas'a.
Przy załączeniu sterownik DźwiękoModemu dołącza interfejsy sieciowe: sm0, sm1, sm2, itp.
Uwaga: Sterownik DźwiękoModemu współzawodniczy w zagarnianiu zasobów komputera ze sterownikiem karty dźwiękowej. Jeśli więc planujesz używać sterownik DźwiękoModemu to upewnij się, czy sterownik karty dźwiękowej jest wyinstalowany. Jak zwykłe możesz obydwa skompilować jako moduły i używać je wtedy, gdy jest to wygodne.
Sterownik DźwiękoModemu nie wzbudza karty dźwiękowej przy ładowniu się systemu. Pakiet ax25-utils zawiera programik 'setcrystal', który obluguje karty oparte o Crystal Chipset. jeśli posiadasz inną kartę to potrzebujesz innego oprogramowania, aby ją pobudzić. Składnia programiku jest oczywista:
setcrystal [-w wssio] [-s sbio] [-f synthio] [-i irq] [-d dma] [-c dma2]
Jeśli, zatem życzysz sobie doczepić kartę soundblaster na adresie 0x388, irq 10 i DMA 1, to dj tak:
# setcrystal -s 0x388 -i 10 -d 1
Jeśli ustawiasz kartę WinSoundSystem na adresie 0x534, irq 5, DMA 3, to daj tak:
# setcrystal -w 0x534 -i 5 -d 3
Parametr [-f synthio] służy do zdeklarowania adresu syntezatora, a [-c dma2] do podania drugiej wartości dla DMA, ktora pozwala na operację full-duplex.
Po skonfigurowaniu karty dźwiękowej musisz teraz powiedzieć strownikowi DźwiękoModemu gdzie może jej szukać oraz jakiego rodzaju modem ma emulować.
Parametry te mogą zostać zdeklarowane programikiem 'sethdlc', lub, jeśli używać będziesz tylko jednej karty można je podać ręcznie programowi 'insmod', który ładuje sterownik Dźwiękomodemu. Dla przykładu, prosta konfiguracja: jedna karta dźwiękowa SoundBlaster ustawiona według powyższego przykładu i emulująca modem 1200 pbs:
# insmod soundmodem mode="sbc:afsk1200" iobase=0x220 irq=5 dma=1
Nie jest to jednak najlepszy sposób. Programik sethdlc działa dobrze zarówno z jednym jak i z wieloma urządzeniami.
Man pages programiku sethdlc piszą w szczegółach na ten temat, jednak kilka przykładów pozwoli zilustrować ważniejsze aspekty tejże konfiguracji. Poniższy przykład zakłada, ze załadowałeś już moduł sterownika DźwiękoModemu poleceniem:
# insmod soundmodem
Ustawienie sterownika do obługi uprzednio skonfigurowanej karty WinSoundSystem, aby emulował modem G3RUH 9600 jako interfejs sieciowy sm0, na porcie równoległym z układem PTT o adresie 0x378:
# sethdlc -p -i sm0 mode wss:fsk9600 io 0x534 irq 5 dma 3 pario 0x378
# ifconfig sm0 up
Ustawienie sterownika uprzednio skonfigurowanej karty SoundBlaster, aby emulował modem HAPN 4800 bps jako interfejs sieciowy sm1 z ukladem PTT na porcie seryjnym o adresie 0x2f8:
# sethdlc -p -i sm1 mode sbc:hapn4800 io 0x388 irq 10 dma 1 serio 0x2f8
# ifconfig sm1 up
Ustawienie sterownika uprzednio skonfigurowanej karty SoundBlaster, aby emulował modem AFSK 1200 bps jako interfejs sieciowy sm1, na seryjnym porcie z układem PTT o adresie 0x2f8:
# sethdlc -p -i sm1 mode sbc:afsk1200 io 0x388 irq 10 dma 1 serio 0x2f8
# ifconfig sm1 up
Parametry dostępu do kanałów AX.25 są analogiczne do parametrów KISS, takich jak ppersist, txdelay, slottime. Tutaj też używamy programiku sethdlc.
I znów man pages są głównym źródłem informacji na temat sethdlc, ale jak zwykle jeden czy drugi przykład nie zaszkodzi:
Ustawienie interfejsu sm0 z wartością 100ms dla TxDelay, 50ms dla Slottime, wartość 128 dla ppersist oraz half-duplex:
# sethdlc -i sm0 -a txd 10 slot 5 ppersist 128 full
Zauważ, że wartości licznika są tutaj podane w 10-tkach milisekund.
Każdy modem radiowy domaga się do poprawnej pracy właściwej regulacji poziomu audio. Dotyczy to również DźwiękoModem'u. Thomas napisał programy narzędziowe, które ułatwiają to zadanie. Są to: 'smdiag' i 'smmixer'.
smdiag
dostarcza dwóch typów wyświetlacza, typu oscyloskopowego i typu "eye pattern"
smmixer
pozwała na właściwe wyregulowanie poziomu nadawania i odbioru.
To polecenie odpala programik 'smdiag' w trybie "eye" dla interfejsu sm0:
# smdiag -i sm0 -e
To polecenie odpala programik 'smmixer' dla interfejsu sm0:
# smmixer -i sm0
Sterownik DźwiękoModemu powoduje dołączenie standardowego interfejsu sieciowego, gotowego do wykorzystania przez jądro. Konfiguracja przypomina tę, jaką stosujemu przy kartach PacketTwin oraz PI.
Najpierw, interfejsowi trzeba przypisać znak/identyfikator. Używamy programu 'ifconfig'. Polecenie:
# /sbin/ifconfig sm0 hw ax25 VK2KTJ-15 upprzypisze interfejsowi sm0, należącemu do DźwiękoModemu, znak/identyfikator VK2KTJ-15 w protokole AX.25.
Następny krok to dokonanie wpisu do pliku /etc/ax25/axports podobnie jak dla innych urządzeń fizycznych. Tenże wpis w pliku ax25ports jest powiązany z interfejsem sieciowym, który powyżej skonfigurowałeś na tymże znaku/identyfikatorze. Wpis w pliku axports noszący znak/identyfikator, ktorego użyłeś przy DźwiękoModemie będzie używany jako odnośnik do tego modemu.
Tak ustawione urządzenie AX.25 możesz teraz spożytkować jak każde inne. Skonfiguruj je do pracy w TCP/IP, dodaj je do demona ax25d, użyj do NetRom lub Rose, jak tylko chcesz.
Sterownik karty PI generuje powstanie interfejsów sieciowych typu `pi[0-9][ab]. Pierwszej wykrytej karcie PI zostanie przypisany interfejs pi0, kolejnej pi1, itd. Literki 'a' i 'b' odnoszą sie do fizycznych portów znajdujących się na karcie PI. Jeśli zbudowałeś jądro z obsługą karty PI, oraz jeśli została ona poprawnie wykryta to możesz skonfigurować sobie interfejs sieciowy w taki sposób:
# /sbin/ifconfig pi0a hw ax25 VK2KTJ-15 up
Polecenie to skonfigurowałoby pierwszy port pierwszej wykrytej karty PI przypisując jej znak/identyfikator VK2KTJ-15 i uczyniłoby go aktywnym. Zauważ, że znak musi mieć swój odpowiednik w pliku /etc/ax25/axports, aby móc używać tego portu.
Sterownik do karty PI napisany został przez David'a Perry, dp@hydra.carleton.edu
Sterownik karty PacketTwin generuje powstanie interfejsów sieciowych typu `pt[0-9][ab]. Pierwszej wykrytej karcie PacketTwin zostanie przypisany interfejs pt0, kolejnej pt1, itd. Literki 'a' i 'b' odnoszą sie do fizycznych inerfejsów znajdujących się na karcie PacketTwin. Jeśli zbudowałeś jądro z obsługą karty PacketTwin, oraz jeśli została ona poprawnie wykryta to możesz skonfigurować sobie interfejs sieciowy w taki sposób:
# /sbin/ifconfig pt0a hw ax25 VK2KTJ-15 up
Polecenie to skonfigurowałoby pierwszy port pierwszej wykrytej karty PacketTwin przypisując jej znak/identyfikator VK2KTJ-15 i uczyniłoby go aktywnym. Zauważ, że znak musi mieć swój odpowiednik w pliku /etc/ax25/axports, aby móc używać tego portu.
Sterownik karty PacketTwin został napisany przez Craig Small, VK2XLZ, csmall@triode.apana.org.au.
Joerg Reuter, DL1BKE, jreuter@lykos.tng.oche.de wypracował sterownik do generycznej obsługi kart opartych o scalak Z8520 SCC. Sterownik ten daje się konfigurować do obsługi wielorakich kart oferując interfejs, który zachowuje się tak jak TNC w trybie KISS. Traktuj więc go tak, jakby to był TNC w trybie KISS.
Choć sterownik zawarty jest w standardowym żródle jądra to jednak Joerg uwalnia wciąż nowsze wersje źródłowe razem ze specjalnymi narzędziami do konfiguracji, które również potrzebujesz.
Pakiet z narzędziami do konfiguracji znajdziesz tutaj:
db0bm.automation.fh-aachen.de
/incoming/dl1bke/
lub:
insl1.etec.uni-karlsruhe.de
/pub/hamradio/linux/z8530/
lub:
ftp.ucsd.edu
/hamradio/packet/tcpip/linux
/hamradio/packet/tcpip/incoming/
Znajdziesz tam różnorakie wersje, więc wybierz te, które odpowiadają twojej wersji jądra:
z8530drv-2.4a.dl1bke.tar.gz 2.0.* z8530drv-utils-3.0.tar.gz 2.1.6 lub nowszeOto polecenia, które musiałem wykonać, aby skompilować i zainstalować ów pakiet z jądrem 2.0.25:
# cd /usr/src # gzip -dc z8530drv-2.4a.dl1bke.tar.gz | tar xvpofz - # cd z8530drv # make clean # make dep # make module # jeśli chcesz aby sterownik był modułem # make for_kernel # Jeśli chcesz, aby sterownik był wbudowany w jądro # make installPo zakończonej operacji powinieneś mieć trzy programy w katalogu /sbin: gencfg, sccinit i sccstat. To właśnie one nadają się do tego, aby skonfigurować sterownik dla twojej karty.
Zostanie rownież utworzona specjalna grupa plików w katalogu /dev/ zwanych scc0 .. scc7. Zostaną one później użyte jako urządzenia KISS i właśnie te będziesz stosował.
Jeśli zdecydujesz sie na polecenie 'make for_kernel', wówczas będziesz musiał przebudować jądro. Przy budowaniu jądra po wydaniu polecenia 'make config' zadbaj o to, abyś odpowiedział "Y" na pytanie o obsługę `Z8530 SCC kiss emulation driver for AX.25'.
Nie potrzebyjesz przebudowywać jądra jeśli wybierzesz polecenie 'make module', wówczas plik scc.o zostanie umieszczony w odpowiednim katalogu /lib/modules. Nie zapomnij o poleceniu 'insmod' przed próbą użycia i konfiguracji starownika.
Sterownik Z8530 SCC został pomyślany, tak aby dał się nagiąć do niemalże każdej karty. Lecz z elastycznością idzie w parze trud jej konfiguracji. Bardziej pouczającej lektury dostarczą pliki samego pakietu i powinieneś tam szukać informacji. A w szczególności należy zajrzeć tutaj: doc/scc_eng.doc or doc/scc_ger.doc. Zparafrazowałem poniżej parę ważniejszych detali, lecz w rezultacie pominąłem szczegóły niższego rzędu.
Program sccinit czyta najpierw plik /etc/z8530drv.conf. Plik dzieli się na dwa etapy: ustawienie parametrów dla sprzętu i dla kanału AX.25. Po tym wystarczy tylko dać polecenie:
# sccinit
pierwsza sekcja dzieli się na strofy, każda strofa reprezentuje scalak 8530. Strofy to poprostu lista 'słów' i 'argumentów'. Można w tym pliku zdeklarować do 4 scalaków SCC. Jeśli potrzebujesz więcej to da się to zrobić w pliku scc.c ustawiając żądaną wartosć w #idef MAXSCC 4.
Dozwolone 'słowa' i 'argumenty' to:
chip
słowo chip służy do oddzielania strof. jego argumentem może być wszystko. Argumenty nie są używane.
data_a
używane do zdeklarowania adresu portu "data" dla kanału 'A'. Argument w formie hexadecymalnej, tj. 0x300.
ctrl_a
używany do zdeklarowania adresu portu "control" dla kanału 'A'. Argument w formie hexadecymalnej, tj. 0x304
data_b
używany do zdeklarowania adresu portu "data" dla kanału 'B'. Argument w formie hexadecymalnej, tj. 0x301.
ctrl_b
używany do zdeklarowania adresu portu "control" dla kanału 'B'. Argument w formie hexadecymalnej, tj. 0x305
irq
używany do zdeklarowania IRQ używanego przez 8530 SCC w beżącej strofie. Argument w formie liczby całkowitej, tj. 5
pclock
używany do zdeklarowania częstotliwości zegara na igle PCLK w 8530.. Argument w formie liczby całkowitej w Hz. Wartość domyślna wynosi 4915200.
board
typ płyty. Argumentem jest napis. A oto dozwolone wartości:
PA0HZP
karta PA0HZP SCC
EAGLE
karta Eagle
PC100
karta DRSI PC100 SCC
PRIMUS
karta PRIMUS-PC (DG9BL)
BAYCOM
karta BayCom (U)SCC
escc
jest nie dobowiązkowe i dołącza obsługę polepszonych scalaków, takich jak:8580, 85180, lub 85280. Argumentem jest tylko 'yes' lub 'no'.
vector
dla kart PA0HZP jest to wartość tzw. "intack port". Może być tylko jeden dla wszystkich scalaków. Wartość domyślna = 0. Nieobowiązkowy.
special
określa rejestry funkcyjne na niektórych kartach. Nieobowiązkowy. Wartość domyślna = 0.
option
jest nieobowiązkowy i przyjmuje warość domyślną 0.
Oto przykładowe konfiguracje dla najbardziej popularnych kart:
BayCom USCC
chip 1
data_a 0x300
ctrl_a 0x304
data_b 0x301
ctrl_b 0x305
irq 5
board BAYCOM
#
# SCC chip 2
#
chip 2
data_a 0x302
ctrl_a 0x306
data_b 0x303
ctrl_b 0x307
board BAYCOM
PA0HZP SCC
chip 1
data_a 0x153
data_b 0x151
ctrl_a 0x152
ctrl_b 0x150
irq 9
pclock 4915200
board PA0HZP
vector 0x168
escc no
#
#
#
chip 2
data_a 0x157
data_b 0x155
ctrl_a 0x156
ctrl_b 0x154
irq 9
pclock 4915200
board PA0HZP
vector 0x168
escc no
DRSI SCC
chip 1
data_a 0x303
data_b 0x301
ctrl_a 0x302
ctrl_b 0x300
irq 7
pclock 4915200
board DRSI
escc no
Jeśli twoja karta pracuje pod NOS'em i masz do niej konfigurację, to możesz użyć polecenia 'gencfg' do konwersji poleceń sterownika PE1CHL NOS. Powstaje wtedy plik przydatny do załączenia w pliku konfiguracyjnym dla sterownika z8530.
Polecenia 'gencfg' odpala się z tymi samymi paramatrami co sterownik PE1CHL pod NET/NOS, np.:
# gencfg 2 0x150 4 2 0 1 0x168 9 4915200
Powyższe wygeneruje szkic konfiguracyjny dla karty OptoSCC.
Sekcja Konfiguracji Kanału zajmuje się zdeklarowniem tych wszystkich parametrów, które rządzą portem , na którym chcesz pracować. Znów mamy tutaj strofy. Każda strofa reprezentuje jeden logiczny port, zatem będziemy mieli dwie strofy ponieważ każda karta 8530 SCC może mieć dwa porty.
Poniższe 'słowa' i 'argumenty' są również zapisywane do pliku /etc/z8530drv.conf i muszą występować za sekcją o parametrach sprzętu.
Kolejność w tej sekcji jest bardzo istotna, lecz jeśli będziesz podążał za sugerowaną sekwencją to powinno działać wszystko w porządku. Dozwolone 'słowa' i 'argumenty to:
device
musi stać w pierszym wierszu deklaracji portu i określa nazwę pliku w katalogu /dev/ stanowiącego podstawę dalszej konfiguracji, tj. /dev/scc0
speed
określa prędkość interfejsu w bitach na sekundę. Argumentem jest liczba calkowita, np. 1200.
clock
określa w parametry dla zegara. Dozwolone wartości to:
dpll
normalny tryb halfduplex
external
MODEM dostarcza swój własny zegar Rx/Tx
divider
użycie devidera fullduplex, jeśli jest zainstalowany
mode
określa czy kodowanie danych ma być załaczone. Argumentami są: nrzi lub nrz
rxbuffers
określa liczbę buforów odbioru, dla których należy rezerwować pamięć. Argumentem jest liczba całkowita, np. 8.
txbuffers
określa liczbę buforów nadawania, dla których należy rezerwować pamięć. Argumentem jest liczba całkowita, np. 8.
bufsize
określa rozmiary buforów odbioru i transmisji. Argumentem jest liczba bytów i stanowi on od sumę wszystkich 'ramek', zatem trzeba więc wziąć pod uwagę również nagłówki protokołu AX.25 a nie li tylko pole danych. Słowo to jest nieobowiązkowe i przyjmuje wartość domyślną 384.
txdelay
to wartość opóżnienia transmisji dla KISS, argumentem jest liczba całkowita.
persist
to wartość parametru persist dla KISS, argumentem jest liczba całkowita.
slot
to jest wartość slottime dla KISS. argumentem jest liczba całkowita w mS.
tail
to jest wartość tail dla KISS. argumentem jest liczba całkowita w mS.
fulldup
to jest oznaczenie fullduplex dla KISS, argumentem jest liczba całkowita. 1==Full Duplex, 0==HALF DUPLEX.
wait
to jest wartość wait dla KISS, argumentem jest liczba całkowita w mS.
min
to jest wartość min dla KISS, argumentem jest liczba całkowita w S.
maxkey
to jest wartość maximum keyup dla KISS, argumentem jest liczba całkowita w S.
idle
to jest wartość licznika idle dla KISS, argumentem jest liczba całkowita w S.
maxdef
to jest wartość maxdef dla KISS, argumentem jest liczba całkowita.
group
to jest wartość group dla KISS, argumentem jest liczba całkowita.
txoff
to jest wartość txoff dla KISS, argumentem jest liczba całkowita w mS.
softdcd
to jest wartość softdcd dla KISS, argumentem jest liczba całkowita.
slip
to jest oznaczenie slip dla KISS, argumentem jest liczba całkowita.
Przy używaniu sterownika traktujemy urządzenia /dev/scc* tak, jak urządzenie seryjne tty z doczepionym TNC w trybie KISS. Na przykład, aby skonfigurować jądro do obługi sieci pod Linuxem przy użyciu swojej karty należy użyć polecenia:
# kissattach -s 4800 /dev/scc0 VK2KTJ
Można też doczepić NOS'a w dokładnie taki sam sposób. Z JNOS'a, np. wykonać mógłbyś polecenie:
attach asy scc0 0 ax25 scc0 256 256 4800
Pomocnym przy diagnostyce urządzenia SCC jest program 'sccstat'. Wyświetla on bieżącą konfigurację. Spróbuj go tak uruchomić:
# sccstat /dev/scc0
wyświetli to szeroką gamę informacji związanych z ustawieniem i ogólną kondycją portu /dev/scc0 SCC.
Polecenie 'sccparam' pozwala na zmianę i modyfikowanie parametrów podczas pracy. Składnia przypomina polecenie 'param' z NOS'a, zatem aby ustawić txtail urządzenia na 100mS, należałoby napisać:
# sccparam /dev/scc0 txtail 0x8d
Linux jest kompatybilny z BPQ Ethernet. Umożliwia to na przepust protokołu AX.25 po Lokalnej Sieci ethernetowej i doczepienie swojej maszyny do innej obsługującej BPQ na Lokalnej Sieci.
Interfejsy sieciowe typu BPQ noszą nazwę 'bpq[0-9]'. Interfejs 'bpq0' powiązane jest z interfejsem 'eth0', a 'bpq1' z interfejsem 'eth1', itd.
Konfiguracja jest trywialna. Najpierw trzeba ustawić standardowe urządzenie Ethernet. To oznacza, że po wkompilowaniu obsługi karty Ethernet do jądra należy zobaczyć czy pracuje poprawnie. Zajrzyj do Ethernet-HOWTO jak tego dokonać.
Aby ustawić obsługę BPQ potrzebujesz przypisać interfejsowi Ethernet znak/identyfikator AX.25. Oto polecenie, które to spowoduje:
# /sbin/ifconfig bpq0 hw ax25 vk2ktj-14 up
I znów, nie zapomnij, że znak/identyfikator, który tutaj podajesz musi zgadzać się z wpisem w pliku /etc/ax25/axports dla portu, którego chcesz używać.
W normalnych warunkach BPQ Ethernet stosuje adres multicast. Pod Linuxem tak nie jest, zamiast tego stosowany jest zwyczajny Ethernetowy adres broadcast. Należy zatem zmodyfikować plik NET.CFG dla sterownika BPQ ODI w nasępujący sposób:
LINK SUPPORT
MAX STACKS 1
MAX BOARDS 1
LINK DRIVER E2000 ; lub inne MLID według własnej karty
INT 10 ;
PORT 300 ; według własnej karty
FRAME ETHERNET_II
PROTOCOL BPQ 8FF ETHERNET_II ; wymagane dla BPQ - zmienić PID
BPQPARAMS ; nieobowiązkowe - tylko wtedy,
; gdy znieniasz docelowy adres
ETH_ADDR FF:FF:FF:FF:FF:FF ; docelowy adres
Pakiet ax25-utils zawiera w sobie program narzędziowy 'axctl', który pozwala na ustawienie różnorodnych parametrów interfejsu AX.25.
Polecenie to jest zupełnie proste w użyciu a podręcznik systemowy 'man' dostarcza kompletnego opisu, przykładowym jednak sposobem użycia tego programu może być:
# /usr/sbin/axctl radio -window 2 -t1 5 -n2 10
Powyższe polecenie ustawiłoby wartości takie jak Window, T1 oraz N2 dla portu AX.25 nazwanego tu 'radio'.
Jeśli jest potrzeba można ustawić domyślne ścieżki do digipeaterów dla konkretnych węzłow. Przydaje się to przy zarówno czystych łączach AX.25 jak i opartych o IP. Robimy to poleceniem 'axparms'. Znowu, podręcznik systemowy 'man' podaje wszystkie szczegóły, lecz prosty przykład może być taki:
# /usr/sbin/axparms -route add radio VK2XLZ VK2SUT
Polecenie to utworzyłoby ścieżkę digipeatera dla stacji VK2XLZ przez stację VK2SUT na porcie AX.25 noszącego nazwę 'radio'.
Ustawienie portu AX.25 do pracy w TCP/IP jest bardzo proste. Jeśli posiadasz interfejs KISS to masz dwie metody do ustawienia adresu IP. Polecenie 'kissattach' posiada opcję, która pozwala na określenie adresu IP. Metoda konwencjonalna przy użyciu polecenia 'ifconifg' zadziała na wszystkich typach interfejsów.
A zatem, zmieniając poprzedni przykład dla KISS:
# /usr/sbin/kissattach -i 44.136.8.5 -m 512 /dev/ttyS0 radio
# /sbin/route add -net 44.136.8.0 netmask 255.255.255.0 ax0
# /sbin/route add default ax0
utworzy to interfejs AX.25 z adresem IP 44.136.8.5 oraz MTU 512 bytów. Jeśli zachodzi potrzeba to należy inne parametry ustawić tez poleceniem 'ifconfig' raz jeszcze.
Jeśli posiadasz jakikolwiek inny typ interfejsu to stosujesz polecenie 'ifconfig' do ustawienia adresu ip i netmask dla danego portu i dodajesz routing przez ów port, tak jak zrobiłbyś to dla każdego jednego interfejsu TCP/IP. Poniższy przykład jest dla interfejsu Karty PI, ale zadziała równie dobrze dla każdego interfejsu sieciowego AX.25:
# /sbin/ifconfig pi0a 44.136.8.5 netmask 255.255.255.0 up
# /sbin/ifconfig pi0a broadcast 44.136.8.255 mtu 512
# /sbin/route add -net 44.136.8.0 netmask 255.255.255.0 pi0a
# /sbin/route add default pi0a
Polecenia powyższe powinny być znane dla tych, którzy używali NOS lub jego pochodne lub jakiekolwiek inne oprogramowanie TCP/IP. Zauważ, że jeśli masz już ustawione jakiś interfejs sieciowy to routing domyślny nie jest ci potrzebny.
Aby to wypróbować zpróbuj 'zapingować' lub zrób telnet do lokalnego węzła:
# ping -i 5 44.136.8.58Zauważ zastosowanie '-i 5', które sprawia, że pingowanie odbywa się co 5 sekund, a nie jak pierwotnie co 1 sekundę.
Protokół Netrom wykorzystuje i zależy od portów AX.25, które utworzyłeś uprzednio. Protokół NetRom biega po plecach protokołu AX.25. Należy zrobić edycję dwóch plików, aby ustawić sobie NetRom na interfejsie AX.25. Jeden plik określa interfejsy NetRomu, a drugi porty AX.25, po których NetRom będzie biegał.
Na początek plik /etc/ax25/nrports. Plik ten określa porty NetRomu podobnie jak plik /etc/ax25/axports określa porty AX.25. Każde urządzenie NetRom musi zawierać swój wpis w pliku /etc/ax25/nrports. Normalnie, na Linuxie spotykamy tylko jedno urządzenie Netrom, które używa wielu zdeklarowanych portów AX.25. W niektórych tylko wypadkach, jak np. z BBS'em, można utworzyć dodatkowy pseudonim dla węzła NetRom, wówczas będzie więcej niż jeden.
Plik ten ma taką formę:
name callsign alias paclen description
Gdzie:
name
to tekst, według którego chcesz odwoływać sie do tego portu.
callsign
to jest znak/identyfikator, na którym pracować będzie protokół NetRom. Uwaga: nie jest to znak, do którego użytkownicy będą się łączyć, aby wejść do twojego węzła. (program 'node' opisany jest dalej). Znak ten powinien być unikalny i nie powinien powtarzać się nigdzie w pliku /etc/ax25/axports lub /etc/ax25/nrports.
alias
to jest przypisany pseudonim dla portu NetRom
paclen
to jest maksymalny rozmiar ramek NetRom transmitowanych przez ten port
description
dowolna nazwa dla tego portu
Oto jak może to wyglądać:
netrom VK2KTJ-9 LINUX 236 Linux Switch Port
Plik ten używany jest m. in. przez program call.
Następny plik to /etc/ax25/nrbroadcast. Zawiera on parę wpisów. Normalnie potrzebny jest jeden apis dla każdego portu AX.25 po którym puszczany będzie protokół NetRom.
Plik przyjmuje taki format:
axport min_obs def_qual worst_qual verbose
Gdzie:
axport
to nazwa portu uzyskana z pliku /etc/ax25/axports. Jeśli w pliku /etc/ax25/axports nie ma wpisu dla danego portu oznacza to, że zabraknie routingu dla NetRom na tym porcie oraz, że broadcasts będą ignorowane.
min_obs
jest to wartość dla min obscelecence dla tego portu
def_qual
określa wartość default quality dla NetRomu na tym porcie
worst_qual
określa wartość 'worst quality' dla NetRomu na tym porcie, wszystki routingi o tej wartości będą ignorowane
verbose
to jest oznakowanie czy z tego portu wychodzić będzie NetRom broadcast w pełnej formie czy też jednynie broadcast o tym wężle.
Oto przykład:
radio 1 200 100 1
Po ustawieniu powyższych dwóch plików należy teraz utworzyć urządzenie NetRom w bardzo podobny sposób do tego, w jaki czyniliśmy do dla urządzeń AX.25. Tym razem stosujemy polecenie 'nrattach'. Działa ono tak samo jak 'axattach' z tą różnicą, że powoduje doczepienie sieciowych interfejsów zwanych 'nr[0-9]'. I znów, przy pierwszym użyciu utworzon zostaje interfejs 'nr0', przy następnym użyciu, 'nr1' itd. Zatem, aby doczepić sieciowy interfejs do portu NetRom, który zdefiniowaliśmy uprzednio, wydalibyśmy polecenie:
# nrattach netrom
Polecenie to wygenerowało by pojawienie się interfejsu (nr0), z parametrami według szczegółów określonych w pliku /etc/ax25/nrports dla portu 'netrom'.
Jądro Linuxa obsługuje wszystkie mechanizmy protokołu NetRom, nie potrafi tylko wykonać niektórych funkcji. Demon NetRomu bierze na siebie tablice routingowe i broadcasty NetRomu. Uruchamiamy go poleceniem:
# /usr/sbin/netromd -i
Po pewnej chwili powinieneś zobaczyć jak plik /proc/net/nr_neigh wypełnia się powoli informacjami o sąsiednich stacjach NetRom.
Nie zapomnij umieścić polecenia /usr/sbin/netromd w jednym z plików *rc, aby zostało odpalone przy ładowaniu systemu operacyjnego.
Możliwe jest ustawienie statycznych ścieżek NetRom do poszczególnych węzłów. Pozwala na to polecenie 'nrparms'. podręcznik systemowy 'man' podaje kompletny opis, a tutaj mamy prosty przkład:
# /usr/sbin/nrparms -nodes VK2XLZ-10 + #MINTO 120 5 radio VK2SUT-9
Polecenie to utworzyłoby ścieżkę statyczną #MINTO:VK2XLZ-10 poprzez sąsiada VK2SUT-9 na porcie AX.25 o nazwie 'radio'.
Można też ręcznie dokonać wpisu dla sąsiednich stacji przy użyciu polecenia nrparms, Przyklad:
# /usr/sbin/nrparms -routes radio VK2SUT-9 + 120
polecenie to wpisałoby VK2SUT-9 jako sąsiada z wartością 'quality' 120, wpis nie zostanie usunięty automatycznie lecz jest stały.
Ustawianie interfejsu NetRom dla pracy w TCP/IP przypomina zupełnie konfigurowanie interfejsu AX.25 dla pracy w TCP/IP. Tutaj też, można albo określić adres IP i wartość MTU w wierszu poleceń dla 'nrattach', albo zastosować polecenie 'ifconfig' i 'route'. Należy jednak ręcznie wprowadzić wpisy ARP dla węzłów, do których chcesz mieć routing ponieważ brakuje mechanizmu, dzięki któremu twój komputer mógłby dowiedzieć się o adresach NetRom, które powinien użyć aby dotrzeć do poszczególnego węzła IP.
Zatem, doczepimy teraz interfejs nr0 z adresem IP 44.136.8.5 i MTU 512 oraz ustawimy go według szczegółów zawartych w pliku /etc/ax25/nrports na porcie NetRom o nazwie "netrom":
# /usr/sbin/nrattach -i 44.136.8.5 -m 512 netrom
# route add 44.136.8.5 nr0
lub można zrobić to tak, ale ręcznie:
# /usr/sbin/nrattach netrom
# ifconfig nr0 44.136.8.5 netmask 255.255.255.0 hw netrom VK2KTJ-9
# route add 44.136.8.5 nr0
Następnie, dla każdego węzła IP, który chesz aby był osiągalny, potrzeba dopisać recznie wartości dla ARP i route. Dopiszmy zatem węzeł docelowy z adresem IP 44.136.80.4 o adresie NetRom BBS:VK3BBS osiągalnego przez sąsiada VK2SUT-0:
# route add 44.136.80.4 nr0
# arp -t netrom -s 44.136.80.4 vk2sut-0
# nrparms -nodes vk3bbs + BBS 120 6 sl0 vk2sut-0
Argumenty '120' i '6' podane dla 'nrparms' to 'quality' i 'absolecence' dla NetRomu, który używa ich dla tej ścieżki.
Sieciowa warstwa packet protokołu Rose przypomina trzecią warstwę specyfikacji protokołu X.25. Obsługa Rose w jądrze Linuxa jest odmianą implementacji Rose przyjętej przez FPAC. http://fpac.lmi.ecp.fr/f1oat/f1oat.html
Sieciowa warstwa packet protokołu Rose używa i polega na portach AX.25, które uprzednio utworzyłeś. Protokół Rose biega po plecach protokołu AX.25. Aby ustawić Rose potrzeba dopisać plik konfiguracyjny dla portów Rose.
Plikiem, gdzie dopisujemy interfejsy dla Rose jest /etc/ax25/rsports. Określa on porty Rose w podobny sposób jak plik /etc/ax25/axports robi to dla portów AX.25. Oto jego format:
name addresss description
Gdzie:
name
jest tekstem, według którego chcesz odwoływać się do tego portu.
address
jest 10-cio cyfrowym adresem Rose, który przypisujesz temu portowi.
description
jest dowolnym tekstem opisującym port.
Oto jak można to wpisać:
rose 5050294760 Rose Port
Zauważ, że Rose używać będzie domyślnie znaku/identyfikatora podanego dla portu AX.25 , chyba że specjalnie podasz inny.
Aby podać osobny znak/identyfikator dla Rose, który używany będzie na każdym używanym porcie, trzeba wydać polecenie 'rsparms' w taki sposób:
# /usr/sbin/rsprams -call VK2KTJ-10
Przykład ten spowodowałby, że Linux słuchałby na znaku/identyfikatorze VK2TKJ-10 i używałby tegoż znaku na wszystkich portach AX.25 ustawionych dla łączności drogą Rose.
Po utworzeniu pliku /etc/ax25/rsports można doczepić urządzenie Rose w taki sam spoób jak urządzeia AX.25. Tym razem używa się polecenia 'rsattach'. Polecenie 'rsattach' doczepia sieciowe interfejse zwane 'rose[0-5]'. Przy pierwszym poleceniu rsattach powstaje interfejs 'rose0', przy drugim, 'rose1', itd. Przykład:
# rsattach rose
Polecenie to wygeneruje interfejs Rose (rose0) ustawiony według szczegółów podanych w pliku /etc/ax25/rsports dla wpisu nazwanego 'rose'.
Obecnie, protokół Rose obsługuje jedynie ścieżki statyczne. Program 'rsparms' pozwala na zapisanie tablic routingowych dla Rose pod Linuxem.
Na przykład:
# rsparms -nodes add 5050295502 radio vk2xlz
Powyższe dodałoby ścieżkę do węzła Rose 5050295502 na porcie AX.25 'radio' znajdującego w pliku /etc/ax25/axports przez stację sąsiednią o znaku VK2XLZ.
Możliwe jest ustawienie ścieżki, która uchwyci wiele docelowych stacji Rose w formacie jednego wpisu. Składnia wygląda następująco:
# rsparms -nodes add 5050295502/4 radio vk2xlz
co jest jednoznaczne w wyżej podanym przykładem z tą różnicą, że uchwycone zostają tutaj wszystkie stacje docelowe rozpoczynające się od 4 cyfr początkowych, w tym wypadku 5050. Jeszcze inaczej można zapisać to tak:
# rsparms -nodes add 5050/4 radio vk2xlz
co jest chyba mniej dwuznaczne.
Po zaktywizowaniu i ustawieniu wszystkich interfejsów AX.25, NetRom i Rose można w końcu popróbować łaczności.
Pakiet programów narzędziowych AX.25 zawiera program zwany 'call', który jest programem terminala z rozłącznym ekranem dla AX.25, NetRom i Rose.
Prosta łączność wygląda tak:
/usr/bin/call radio VK2DAY via VK2SUT
Łączność z węzłem NetRom o pseudonimie SUNBBS wygląda tak:
/usr/bin/call netrom SUNBBS
Łączność przez Rose do stacji HEARD o węźle 5050882960, w ten sposób:
/usr/bin/call rose HEARD 5050882960
Uwaga: 'call' musi wiedzieć na jakim porcie odbywa się łączność ponieważ te same stacje mogą być przecież osiągalne przez jakikolwiek port uprzednio skonfigurowany.
'call' pracuje w trybie liniowym w łącznościach przez AX.25. Traktuje on wiersze rozpoczynające się od '~' jako polecenia. Polecenie '~.' zamyka łączność.
Więcej informacji można znaleźć w podręczniku systemowym 'man'.
Linux jako system operacyjny posiada ogromne możliwości i nagina się do wielu sytuacji, gdy trzeba go konfigurować. Z elastycznością przychodzi też trud ustawiena go tak, żeby robił to czego chcemy. Trzeba zadać sobie wiele pytań przed rozpoczęciem ustawienia Linuxa do przyjmowania łączności z zewnątrz przez Rose, AX.25 i NetRom. Najważniejszym z nich jest:"Co chcę, aby użytkownicy zobaczyli podczas łączności?". Ludzie piszą rozmaite ciekawe programy, które mogą służyć użytkownikom, na przykład 'pms' zawarty w ax25-utils, lub 'node', bardziej rozbudowany' też dostępny w ax25-utils. Można też dać użytkownikom szansę zalogowania sie i użycia powłoki systemowej lub napisać własny program, jakąś grę lub bazę danych i pozwolić użytkownikom zrobić do niej łączność. Cokolwiek postanowisz musisz określić to oprogramowaniu AX.25, aby wiedziało co odpalić podczas wchodzących łączności.
Program 'ax25d' przypomina 'inetd' stosowany powszechnie do przyjmowania wchodzących łączności TCP/IP na unixach. Czuwa on i nasłuchuje na wchodzące łączności. Jeśli ją wykryje to sprawdza swój plik systemowy, aby zdecydować jakim programem usłużyć tej konkretnej łączności. Wytłumaczymy zatem jak ustawić ten plik, który jest standardowy, narzędziem do przyjmowania wchodzących łączności.
Plik ten ustawia demona 'ax25d' protokołu AX.25, który to demon zajmuje się wchodzącymi łącznościami AX.25, NetRom i Rose.
Na perwszy rzut oka jest troche powikłane ale po chwili przekonasz się, że "nie taki diabeł czarny, jak go malują". Trzeba być tylko świadomy paru małych pułapek.
Ogólny format pliku ax25d.conf jest taki:
# This is a comment and is ignored by the ax25d program.
[port_name] || <port_name> || {port_name}
<peer1> window T1 T2 T3 idle N2 <mode> <uid> <cmd> <cmd-name> <arguments>
<peer2> window T1 T2 T3 idle N2 <mode> <uid> <cmd> <cmd-name> <arguments>
parameters window T1 T2 T3 idle N2 <mode>
<peer3> window T1 T2 T3 idle N2 <mode> <uid> <cmd> <cmd-name> <arguments>
default window T1 T2 T3 idle N2 <mode> <uid> <cmd> <cmd-name> <arguments>
Gdzie:
#
stając na początku wiersza oznacza komentarz i jest całkowicie pomijane przez program 'ax25d'.
<port name>
nazwa portu AX.25, NetRom lub Rose korespondująca kolejno do plików /etc/ax25/axports, /etc/ax25/nrports and /etc/ax25/rsports. Nazwa portu objęta jest nawiasem '[]' dla portu AX.25, '<>' dla NetRom, '{}' dla Rose. Można też inaczej zapisać to pole stosując 'znak/identyfikator via' przed nazwą portu, pokazując w ten sposób, że będzie można łączyć się do tego interfejsu przez podany tutaj znak. Podamy dalej przykład, który to zilustruje.
<peer>
znak/identyfikator węzła wchodzącego, dla którego te ustawienia będą obowiązywać. Jeśli nie podasz tutaj numerycznego identyfikatora to każdy będzie pasował.
window
parametr Window dla AX.25 (K) lub MAXFRAME dla tego ustawienia
T1
licznik retransmisji Ramki (T1) w jednoskach półsekundowych
T2
czas wyczekiwania oprogramowania AX.25 na następną ramkę przed przygotowaniem odpowiedzi, w jednostkach jednosekundowych.
T3
czas wyczekiwania zanim oprogramowanie AX.25 zamknie bezczynną łączność, mierzone w jednostkach 1 sekundy.
idle
wartość licznika braku akrywności w sekundach
N2
liczba kolejnych retransmisji, które nastąpią zanim łącze zostanie zamknięte.
<mode>
dostarcza mechanizmu pozwalającego na określenie pewnego typu zezwoleń. Podając rozmaite literki, każda reprezentuje jakieś zezwolenie, można manipulować tą funkcją. Literki muszą być albo małe albo duże i muszą być w jednym ciągu bez spacji. Oto do one:
u/U
UTMP - nie używane
v/V
Validate call - nie używane
q/Q
Quiet - nie prowadzi log-u dla łączności
n/N
check NetRom Neighbour - nie używane
d/D
Disallow Digipeaters - łączność musi być bezpośrednia, bez digi
l/L
Lockout - odrzuca łączność
*/0
marker - ustawia znaczek, nie zmienia zezwoleń
<uid>
'userid' w Linuxie dla programu, który będzie obsługiwał wchodzącą łącznśść
<cmd>
pełna ścieżka dostępu programu, bez żadnych argumentów
<cmd-name>
tekst, który wystąpi dla tego programu po wydaniu polecenia systemowego
'ps' (Najczęsciej nazwa własna programu bez ścieżki dostępu).
<arguments>
są to argumenty podawane w wierszu poleceń dla <cmd>. Argumenty
te przybierają rozmaite znaczenie w zależności od poniższych ustawień:
%d Nazwa portu, na którym przyjęto łączność.
%U znak/identyfikator AX.25 dołączonej stacji bez numerka SSID, dużymi
literami.
%u znak/identyfikator AX.25 dołączonej stacji bez numerka SSID, małymi
literami.
%S znak/identyfikator AX.25 dołączonej stacji z numerkiem SSID, dużymi
literami.
%s znak/identyfikator AX.25 dołączonej stacji z numerkiem SSID, małymi
literami.
%P znak/identyfikator węzła, od którego dokonuje się
łączność, bez numerka SSID, dużymi literami
%p znak/identyfikator węzła, od którego dokonuje się
łączność, bez numerka SSID, małymi literami
%R znak/identyfikator węzła, od którego dokonuje się
łączność, z numerkiem SSID, dużymi literami
%r znak/identyfikator węzła, od którego dokonuje się
łączność, z numerkiem SSID, małymi literami
Potrzebna jest jedna sekcja według powyższego formatu dla każdego interfejsu AX.25, NetRom i Rose, na którym przyjmowane mają być wchodzące łączności typu AX.25, NetRom i Rose.
W paragrafie tym są jeszcze dwa specjalne wiersze, jeden rozpoczyna się od słowa 'parameters' a drugi od 'default' (tak, tak, różnią się). Wiersze te służą do specjalnych cełów.
Wiersz 'default' służy jako siatka-na-wszystko. Wchodzące łączności, które nie mają własnych zezwoleń na danym interfejsie <interface_call> dostaną wartości domyślne podane w 'default'. Jeśli wpisu 'default' nie ma w ogóle to wszystkie wchodzące łączności nie posiadające własnych zezwoleń będą natychmiast odrzucone bez ostrzeżenia.
Wiersz 'parameters' jest trochę bardziej subtelny i to tutaj jest ta pułapka, o której wspominałem u początku. Jakiekolwiek pole, którejkolwiek deklaracji dla węzła wchodzącego można wypełnić znaczekiem '*' by uzyskać 'wartość domyślną'. Wiersz 'parameters' jest wierszem, który deklaruje wspomniane 'wartości domyślne'. Oprogramowanie jądra z kolei posiada swoje własne wartości domyślne, których użyje jeśli nic nie określisz w wierszu 'parameters'. Pułapka polega na tym, że wartościustawione wierszem 'parameters' działają tylko w dól, a nie w górę. Można mieć więcej niż tylko jeden wpis 'parameters' dla poszczególnych interfejsów grupując sobie wartości domyślne.
No dobrze, teraz ilustracja:
# ax25d.conf for VK2KTJ - 02/03/97
# This configuration uses the AX.25 port defined earlier.
# <peer> Win T1 T2 T3 idl N2 <mode> <uid> <exec> <argv[0]>[<args....>]
[VK2KTJ-0 via radio]
parameters 1 10 * * * * * root /usr/sbin/axspawn axspawn %u +
VK2XLZ * * * * * * *
VK2DAY * * * * * * *
NOCALL * * * * * * L
default 1 10 5 100 180 5 * root /usr/sbin/pms pms -a -o vk2ktj
[VK2KTJ-1 via radio]
default * * * * * 0 root /usr/sbin/node node
<netrom>
parameters 1 10 * * * * *
NOCALL * * * * * * L
default * * * * * * 0 root /usr/sbin/node node
{VK2KTJ-0 via rose}
parameters 1 10 * * * * * root /usr/sbin/axspawn axspawn %u +
VK2XLZ * * * * * * *
VK2DAY * * * * * * *
NOCALL * * * * * * L
default 1 10 5 100 180 5 * root /usr/sbin/pms pms -a -o vk2ktj
{VK2KTJ-1 via rose}
default * * * * * 0 root /usr/sbin/node node radio
Powyżej ukazane jest, że ktokolwiek usiłujący łączności do znaku `VK2KTJ-0' na porcie AX.25 o nazwie 'radio' otrzyma takie zezwolenia:
Jeśli ktoś ma ustawione 'NOCALL' zostanie odrzucony, patrz użycie literki 'L'.
Wiersz 'parameters' zmienia dwie wartości spośród domyślnych wartości jądra (Windows i T1) oraz wyznacza program /usr/sbin/axspawn program, aby był odpalony. Ktorakolwiek instancja programu 'axspawn' uruchomiona w ten sposób będzie widoczna po wydaniu polecenia 'ps' w Linuxie jako axspawn. Dwa następne wiersze dostarczają definicji dla dwóch stacji, do których powyższe reguły zostaną zastosowane.
Ostatni wiersz w paragrafie jest definicją typu siatka-na-wszystko i zostanie zastosowana do wszystkich innych stacji (łącznie z VK2XLZ i VK2DAY jeśli mieć będą inne numerki SSID niż -1). Definicja ta ustawia wprost wszystkie wartości, dodatkowo odpala wchodzącym łącznościom typu AX.25 program 'pms' informując go, że łączność jest typu AX.25 i że właścicielem jest znak VK2KTJ. (Patrz 'Ustawianie PMS'a' poniżej).
Następna konfiguracja przyjmuje łączności do znaku VK2KTJ-1 przez port 'radio'. Odpala ona program 'node' dla wszystkich, którzy się do niego łączą.
Kolejna konfiguracja obsługuje NetRom. Zauważ zastosowanie nawiasów znaku-większości i znaku-mniejszości zamiast nawiasów kwadratowych. One właśnie deklarują wejście do NetRom. Ustawienie jest prostsze i mówi tylko tyle, że ktokolwiek wchodzi do stacji przez NetRom na porcie zwanym 'netrom' otrzyma program 'node', chyba że ma znak 'NOCALL' i wtedy zostanie odrzucony.
Dwie ostanie konfiguracje przeznaczone są dla wchodzących łączności Rose. Pierwsza dla ludzi, którzy poprzez adres naszego węzła Rose wołają znak 'vk2ktj-0' a druga dal tych, co wołają znak 'VK2KTJ-1'. Działają one w dokładnie ten sam sposób. Zauważ zastosowane nawiasy, które odróżniają port Rose.
Powyższy przykład jest zmyślony ale myślę, że jasno ilustruje ważne cechy składni pliku konfiguracyjnego. Pełny opis pliku znajdziesz w podręczniku systemowym 'man' dla ax25d.conf. Załączono bardziej szczegółowy przykład w pakiecie ax25-utils, który też się może przydać.
Po edycji wspomnianych dwóch plików można odpalić program ax25d poleceniem:
# /usr/sbin/ax25d
Gdy program pracuje, wówczas użytkownicy powinni móc łączyć się przez AX.25 do twojego Linuxa. Pamiętaj, abyś umieścił polecenie ax25d w plikach rc, aby startowało za każdym razem gdy właczasz komputer.
Oprogramowanie węzła zostało zrobione przez Tomi'ego Manninen tomi.manninen@hut.fi i opierało się głownie na programie PMS. Dostarcza ono dość elastycznych i kompletnych możliwości dla węzła, które łatwo ustawić. Użytkownicy, po ustaleniu łączności, mogą odpalić Telnet, wykonać dalsze łączności NetRom, Rose lub AX.25 jak również uzuskiwać rozmaite informacje tak jak Finger, lista Węzłow i stacji ostanio słyszanych, itp. Węzeł można ustawić dość prosto tak, że zaserwuje on jakąkolwiek usługę dostępną pod Linuxem.
Normalnie, 'node' wywoływany może być przez program 'ax25d', odpowie on też na wezwania wchodzące drogą TCP/IP dzięki 'inetd', który wpuści użytkownika i odpali go dla niego, lub można go uruchomić z wiersza poleceń.
Plik node.conf decyduje o głównej konfiguracji węzła. Jest prostym plikiem tekstowym, a jego składnia jest taka:
# /etc/ax25/node.conf # configuration file for the node(8) program. # # Linie rozpoczynające się od # są komentarzami i są ignorowane. # Hostname # deklaruje nazwę 'hostname' dla węzła hostname radio.gw.vk2ktj.ampr.org # Local Network # pozwala na określenie tego co 'local' w celach rewizji zezwoleń # przy użyciu node.perms localnet 44.136.8.96/29 # Hide Ports # Jeśli wpisane, pozwala na ukrycie portów przed użytkownikami. Podane porty # nie będą wyświetlane poleceniem (P)orts. hiddenports rose netrom # Callserver # jeśli wpisane, pozwoli użytkownikom na dostęp do callserver'a. callserver zone.oh7rba.ampr.org # Node Identification. # to pojawi się w zachęcie systemowej węzła NodeId LINUX:VK2KTJ-9 # NetRom port # To jest nazwa portu NetRom, który używany będzie do wychodzących łączności # z węzła 'node'. NrPort netrom # Node Idle Timeout # Określa w sekundach wartość "idle time" dla łączności z tym węzłem idletimout 1800 # Connection Idle Timeout # określa licznik "idle" dla łączności uczynionych przez ten węzeł, w sekundach # seconds. conntimeout 1800 # Reconnect # Określa czy łączność z użytkownikami powinna być ponowiona gdy ich łączność # z innymi stacjami została przerwana czy też mają być rozłączeni na dobre. # reconnect on # Pseudonimy dla poleceń # pozwala na uproszczenie uwikłanych poleceń węzła alias CONV "telnet vk1xwt.ampr.org 3600" alias BBS "connect radio vk2xsb" # Pseudonimy dla poleceń zewnętrzych # Pozwala na odpalanie programów z zewnątrz spod węzła 'node'. # extcmd <cmdname> <flag> <userid> <command> # Flag == 1 to jest jedyna dotychczas stosowana funkcja. # <command> jest pisane tak jak dla ax25d.conf extcmd PMS 1 root /usr/sbin/pms pms -u %U -o VK2KTJ # Logging # Ustawienie log-u do log-u systemowego. 3 - najbardziej gadatliwe, # 0 - wyłączone. loglevel 3
Węzeł 'node' pozwala na ustawienie pewnych zezwoleń dla użytkowników. Zezwolenia te pozwalają ci decydować, którzy użytkownicy mogą używać opcji takich jak (T)elnet, i (C)onnect, na przykład, a którzy nie mogą. Plik node.perms zawiera właśnie te informacje i składa się z pięciu kluczowych pól. Jeśli pole zawiera znaczek '*' to zastępuje cokolwiek. Przydaje się to do definicji reguł domyślnych.
user
zawiera znak lub użytkownik do którego kolejne zezwolenia się tyczą.
Numerki SSID są ignorowane, zatem umieścić tutaj należy goły znak.
method
każdy protokól i metoda dostępu może otrzymać swoje zezwolenia. Na przyklad
możesz zezwolić użytkownikom dołączonym protokołem AX.25 i NetRom używać
opcji (C)onnect, ale zabronić tego innym, którzy weszli telnetem
z nie-lokalnego węzła. Drugie pole zatem pozwala określenie reguł
dla łączności, które weszły różnymi metodami. Oto te metody:
method description
------ -----------------------------------------------------------
ampr Użytkownik wszedł telnetem z adresu amprnet (44.0.0.0)
ax25 Użytkownik wszedł drogą AX.25
host Użytkownik wszedł odpalając 'node' z wiersza poleceń
inet Użytkownik wszedł telnetem z adresu 'non-local'i z poza amprnet
local Użytkownik wszedł telnetem z komputera typu 'local'
netrom Użytkownik wszedł drogą NetRom
rose Użytkownik wszedł drogą Rose
* Użytkownik wszedł jakkolwiek.
port
Dla użytkowników wchodzących przez AX.25 można udzielać zezwoleń osobno
każdy port Ax.25. Pozwala to decydować co użytkownicy AX.25 mogą robić
zależnie od tego do jakiego portu się podłączyli. Trzecie pole zawiera
nazwę owych portów, jeśli używasz tej funkcji. Działa to tylko dla
łączności przez AX.25.
password
nieobowiązkowo, można ustawić węzeł tak, że przedstawi on użytkownikom
zachętę systemową, aby wprowadzili hasło zanim się dołączą. Przydaje się
to do ochrony tych użytkowników, którzy ustawiony mają wysoki stopień
zezwoleń. Jeśli czwarte pole ma być wypełnione to jego wartość jest
hasłem, które będzie przyjęte.
permissions
to pole stoi jako ostanie dla każdego wpisu w pliku. Jest ono kodowane
bitowo tak, że każda usługa posiada swoją wartość bitową, której wpisanie
powoduje, że zezwolenie na usługę jest udzielone lub zabronione. Oto
lista usług i im korespondujących warości bitowych:
value description
----- -------------------------------------------------
1 Zezwolenie na Login
2 Zezwolenie na (C)onnect drogą AX.25
4 Zezwolenie na (C)onnect drogą NetRom
8 Zezwolenie na (T)elnet do 'lokalnych' węzłów
16 Zezwolenie na (T)elnet do węzłów z sieci amprnet (44.0.0.0)
32 Zezwolenie na (T)elnet do 'nie-lokalnych', węzłów z poza amprnet
64 Zezwolenie na (C)onnect drogą AX.25 przez ukryte porty
128 Zezwolenie na (C)onnect drogą Rose
Aby zakodować wartość zezwoleń dla danej reguły poprostu wybierz te zezwolenia, które chcesz, aby użytkownik miał i dodaj ich wartości bitowe. Otrzymaną w ten sposób cyfrę należy umieścić w polu nr. 5.
Oto jak można ustawić plik node.perms:
# /etc/ax25/node.perms
#
# Operatorem węzła jest VK2KTJ, posiada hasło 'secret' i wolno mu szystko
# jakąkolwiek metodą wszedł
vk2ktj * * secret 255
# Ci użytkownicy są nie wejdą w ogóle
NOCALL * * * 0
PK232 * * * 0
PMS * * * 0
# Użytkownicy INET też nie wejdą w ogóle
* inet * * 0
# Ci, którzy weszli drogą AX.25,NetRom, Local, Host i AMPR mają zezwolenie
# na (C)onnect i (T)elnet do węzłów 'lokalnych' i amprnet, ale nie innych
# adresów IP.
* ax25 * * 159
* netrom * * 159
* local * * 159
* host * * 159
* ampr * * 159
Program 'node' powinien normalnie być uruchamiany przez program 'ax25d'. Dokonujemy tego wpisując odpowiednie reguły w pliku /etc/ax25/ax25d.conf. Na mojej maszynie chcialem, aby użytkownicy mieli wybór łączności do węzła lub innych programów usługowych. 'ax25d' pozwala właśnie na to jeśli sprytnie powpisujesz pseudonimy portów. Dla przykładu, stosując powyższą konfigurację ax25d chcę ustawić 'node' tak, aby użytkownicy łączący się do VK2KTJ-1 dostali się do węzła 'node'. Wpisałem zatem takie wiersze do pliku /etc/ax25/ax25d.conf:
[vk2ktj-1 via radio]
default * * * * * 0 root /usr/sbin/node node
To oznacza, że oprogramowanie jądra Linuxa odpowie na prośbę o łączność dla znaku 'VK2KTJ-1' na porcie AX.25 nazwanego 'radio', i odpali potem program node.
Jeśli chcesz, aby użytkownicy mogli wejść telnetem do twojej maszyny i uzyskać dostęp do węzła 'node' to nie ma nic prostszego. Najpierw zdecyduj na jaki port użytkownicy powinni się łaczyć. W tym wypadku wybrałem arbitralny numer 4000, choć Tomi podaje w swojej dokumentacji szczegóły na temat jak podmienić zwyczajnego demona telnetu na demona węzła 'node'.
Potrzebujesz zmodyfikować dwa pliki.
Do pliku /etc/services powinieneś dodać:
node 4000/tcp #OH2BNS's node software
a do pliku /etc/inetd.conf dodaj:
node stream tcp nowait root /usr/sbin/node node
Po wykonaniu tego i po restarcie programu 'inetd' użytkownicy, którzy wchodzą telnetem na port 4000 w twojej maszynie dostaną zachętę systemową, aby się zalogować, i jeśli zostało to dla nich skonfigurowane to hasło, po podaniu którego podłączeni zostaną do węzła 'node'.
Program axspawn pozwala wchodzącym drogą AX.25 stacjom na zalogowanie się do twojego komputera. Może on zostać wywołany programem ax25d w taki sam sposób jak program 'node'. Należy dodać tego typu zapis do pliku /etc/ax25/ax25d.conf, jeśli pragniesz, aby użytkownicy mogli logować się do twojego komputera:
default * * * * * 1 root /usr/sbin/axspawn axspawn %u
Jeśli wiersz zakończony zostanie znaczniek '+' to użytkownicy, przed zalogowaniem, będą musieli uderzyć przycisk 'Return'. Wartość domyślna ma to wyłączone. Poszczególne zapisy dla stacji, które występują pod tym wierszem spowodują uruchomienie programu 'axspawn' podczas wchodzącej łączności. Po uruchomieniu, 'axspawn' najpierw sprawdza czy na wierszu poleceń ukazał się legalny znak/edentyfikator, pozbawia go numerka SSID, a potem sprawdza plik /etc/passwd czy użytkownik posiada założone konto. Jeśli tak, i hasło jest ""(puste) lub '+', wtedy wpuszcza użytkownika. Jeśli w polu hasła jest cokolwiek innego to użytkownik jest odpytywany o swoje hasło. Przy nieistaniejących kontach w pliku /etc/passwd 'axspawn' można ustawić tak, że utworzy je sam.
Zachowanie programu axspawn można zmieniać plikiem /etc/ax25/axspawn.conf. Plik ten ma formę:
# /etc/ax25/axspawn.conf
#
# pozwala na automatyczne zakładanie kont dla użytkowników
create yes
#
# wpuszcza użytkownika 'gość' jeśli wyżej jest 'no' lub niepowiodły sie
# inne rzeczy. Wyłacza sie 'no'.
guest no
#
# ID dla groupy lub nazwa konta dla samozakładania konta
group ax25
#
# first user id to use
first_uid 2001
#
# maximum user id
max_uid 3000
#
# gdzie umieszczać katalog domowy dla nowych użytkowników
home /home/ax25
#
# powłoka systemowa dla użytkownika
shell /bin/bash
#
# kojarzenie znaków z użytkownikami dla łączności wychodzących.
associate yes
Powyższe osiem ustawialnych przełaczników mają takie znaczenie:
# wskazuje, ze to komentarz
create
jeśli ustawione na 'yes' to 'axspawn usiłuje sam założyć konto dla
użytkownika, który jeszcze nie ma wpisu w pliku /etc/passwd.
guest
pole to określa nazwę login-u konta dla ludzi włączających się ale
nie mających jeszcze konta przy 'create' ustawionym na 'no'. Zwykle
jest to ax25 lub guest
group
to pole określa nazwę grupy, jaka zostanie użyta dla włączających się
użytkowników nie mających jeszcze wpisu w pliku /etc/passwd.
first_uid
jest to cyfra pierwszego userid wybieranego automatycznie dla nowych
użytkowników.
max_uid
jest to najwyższy numer, jaki będzie użyty dla userid nowych użytkowników
home
to jest katalog domowy (login) dla nowych uzytkowników
shell
to określa powłokę systemową dla nowych użytkowników
associate
to oznaczenie wskazuje czy użytkownik, po zalogowaniu się, wykonujący
łączność wychodzącą będzie miał swój własny znak, czy też znak twojej
stacji.
Program pms to implementacja prostego 'personal message system' napisanego początkowo przez Alan'a Cox. Dalszy rozwój podjęty został przez David'a Brown, N2RGT, dcb@vectorbd.com. Obecnie jest nadal bardzo prosty mający mozliwość wysłania e-mail'a do właściciela systemu i uzyskać ograniczone informacje maszynie lecz David pracuje nad tym, jak poszerzyć jego możliwości i uczynić go bardziej użytecznym.
Pozostało więc teraz parę prostych plików do stworzenia, które udzielą użytkownikom pewnych informacji o samym systemie, a potem dodać odpowiedni zapis do pliku ax25d.conf, aby dołączający się użytkownicy dostali się do PMS.
Plik /etc/ax25/pms.motd zawiera 'wiadomość dnia', którą użytkownicy ujrzą po ustaleniu łączności i zwykłym nagłóku BBS. Ten prosty plik jest tekstowy i wiadomość w nim zawarta będzie wysłana do użytkowników.
Plik /etc/ax25/pms.info również ma zawierać tekstowe, bardziej szczegółowe informacje na tremat twojej stacji. Informacja w nim zawarta przedstawiana jest użytkownikom w odpowiedzi na ich polecenie 'Info' z zachęty PMS>.
Gdy jakiś użytkownik wysyła pocztę do znaku AX.25 to 'pms' spodziewa się, że znak ten jest własnością prawdziwego użytkownika z kontem na twojej maszynie. Opisane jest to w osobnej sekcji.
Dodanaie programu 'pms' do pliku /etc/ax25/ax25d.conf jest bardzo proste. Trzeba jednak pamiętać o jednej malutkiej rzeczy. Dave dodał możliwość podania argumentów dla PMS na wierszu poleceń, które kontrolują kilkanaście konwencji związanych z końcem wiersza. Konwencje AX.25 i NetRom oczekują, że 'end-of-line' to 'carriage return', 'linefeed' podczas gdy w unixach to jest poprostu 'newline'.Więc, dla przykładu, jeśli checiałbyś dodać zapis, który oznaczałby, że należy odpalić PMS dla wchodzącej łączności przez port AX.25, to dadaj taki wiersz:
default 1 10 5 100 5 0 root /usr/sbin/pms pms -a -o vk2ktj
To poprostu odpala program pms mówiąc mu, że jest to łączność wchodząca drogą AX.25 i że właścicielem PMS'a jest vk2ktj. Popatrz na podręcznik systemowy 'man' w sprawie innych argumentów dla innych metod dostępu.
Aby sprawdzić czy PMS działa sprubuj taką komendę z wiersza poleceń:
# /usr/sbin/pms -u vk2ktj -o vk2ktjPodstaw swój własny znak w miejsce mojego. Polecenie to odpali PMS mówiąc mu, że ma używać uniksowych konwencji end-of-line, i że użytkownikiem logującym się jest vk2ktj. Możesz zrobić teraz wszystko to, co użytkownicy łączący się z zewnątrz.
Dodatkowo mógłbyś poprosić jakąś inną stację, aby się do ciebie dołączyła, aby potwierdzić, że ustawienie pliku ax25d.conf działa poprawnie.
Programy 'user_call' to w rzeczywistości są 'ax25_call' i 'netrom_call'. Pomuślane są one tak, że mogą być wezwane z 'ax25d', w celu zautomatyzowania łączności z odległymi komputerami. Naturalnie można je wywołać z wielu innych miejsc, np. z powłoki systemowej, lub innych demonów, jak np. programu 'node'.
Przupominają w swej prostocie program 'call'. Nie zajmują się obróbką żadnych danych, zatem sam musisz zadbać o to jak traktowane będzie end-of-line.
Rozpocznijmy od tego jak można ich używać. Wyobraź sobie, że posiadasz małą sieć w domu i że jednym komputerem jest Linux spelniający rolę bramki radiowej, oraz drugi komputer, który jest węzłem BPQ. Komputery złączone są razem ethernetem.
Noramlnie, użytkownicy radiowi, aby móc łączyć się z węzłem BPQ musieliby robić to przez digipeating poprzez twojego linuxa, lub połączyć się wpierw z programem 'node' na twoim linuxie, a stamtąd wykonać następne połączenie do węzła BPQ.
Wyobraź sobie, że węzeł BPQ ma znak VK2KTJ-9 a linux ma port o nazwie 'bpq' obsługujący AX.25/ethernet. Również dodajmy, że bramka radiowa Linux posiada port radiowy 'radio'.
Zapis do pliku /etc/ax25/ax25d.conf wyglądałby w ten deseń:
[VK2KTJ-1 via radio]
default * * * * * * *
root /usr/sbin/ax25_call ax25_call bpq %u vk2ktj-9
i umożliwiłby użytkownikom połączenie wprost do `VK2KTJ-1' co w gruncie rzeczy jest demonem ax25d pod Linuxem a następnie przełoczyłoby ich na łączność AX.25 do `VK2KTJ-9' przez interfejs 'bpq'.
Jest cały asortyment innych możliwych kombinacji, które są do wypróbowania. Programy 'netrom_call' oraz 'rose_call' pracują w podobny sposób. Jeden z radioamatorów wykorzystał tę funkcję, aby ułatwić łączność do odległego BBS-u. Noramalnie użytkownik musiałby wprowadzić dlugą strunę poleceń, aby wykonać tę łączność więc on dokonał wpisu, który sprawiał, że wspomniany BBS wyglądał tak, jakby dostępny on był na sieci lokalnej; demon ax25d pośredniczył w łączności do odległego BBS-u.
Istnieje wiele sutuacji, w których pożądane jest, aby powiązać znak z kontem użytkownika Linuxa. Jedną z takich sutuacji byłaby, gdy wielu radioamatorów dzielą ze sobą tę samą maszynę a chcą używać swoich znaków dla wychodzących łączności. Innym przykładem jest PMS, którego użytkownicy chcieliby rozmawiać z jakimś użytkownikiem na twoim komputerze.
Oprogramowanie AX.25 dostarcza sposobu pozwalającego na skojarzenie znaku z kontem użytkownika. Wspominaliśmy to już wcześniej w sekcji o PMS, ale podkreślam to raz jeszcze, żeby nie umknęło to twej uwadze.
Kojarzenia dokonujemy poleceniem 'axparms'. Ota jak wygląda przykład:
# axparms -assoc vk2ktj terry
Polecenie to kojarzy powyższy znak AX.25 vk2ktj z kontem 'terry' na tym komputerze. Więc przykładowo, każda poczta dla vk2ktj z pms-u będzie dostarczona do konta 'terry' pod Linuxem.
Zapamiętaj, aby wpisać te kojarzenia do plików rc, aby dostępne były za każdym razem, gdy odpalasz komputer.
Zauważ, że nigdy nie powinieneś kojarzyć znaku z kontem 'root' ponieważ spowoduje to dużo problemów konfiguracyjnych w innych programach.
Wielu ludzi preferuje którąś z wersji NOS uruchamianą w Linuxie ponieważ oferują one wiele cech funkcji, do któtych przywykli. Większość tych ludzi chciałoby również mieć taką mozliwość, aby NOS mógł mówić do jądra Linuxa po to, by móc zaoferować jego niektóre usługi dla użytkowników radiowych.
Następująca informacja jest wkładem Brandon'a S. Albery, KF8NH, który wytłumaczył jak wzajemnie połączyć NOS'a uruchomionego pod Linuxem z samym jądrem Linuxa przy użyciu urządzenia 'fajka'.
Ponieważ zarówno Linux jak NOS obsługują protokół 'slip' możliwe jest połączenie nich obu ustawiając łącze slip. Kosztownym sposobem możnaby to zrobić za pomocą pętli kablowej i dwóch portów seryjnych; byłoby to powolne łącze. Linux dostarcza funkcji, która dostępna jest na wielu innych Unixo-podobnych systemach operacyjnych, zwanej 'fajką'. Są to specjalne pseudo interfejsy, które przedstawiają się dla oprogramowania jako standardowe urządzenia tty, lecz faktycznie są tylko pętlami do następnej 'fajki'. Urządzenia te mogą być używane jeśli program pierwszy otworzy je ze strony 'master', a następnie program drugi ze strony 'slave'. Gdy oba końce zostaną otworzone, wówczas programy mogą się komunikować ze sobą pisząc poprostu literki przez 'fajkę' jakby to było normalne urządzenie terminalowe.
Zanim połączysz jakąś wersję NOS-a lub innego programu z jadrem Linuxa, wpierw musisz wybrać jakąś 'fajkę'. Znajdziesz ją szukając w katalogu '/dev'. Końcówki 'master' nazywają się ptyp[1-f] a końcówki 'slave' znane są jako: ttyp[1-f]. Pamiętaj, że występują parami. Jeśli weźmiesz 'fajkę' /dev/ptypf jako końcówkę 'master' to musisz dobrać 'fajkę' /dev/ttypf jako 'slave'.
Po wybraniu pary urządzeń 'fajka', należy przypisać końcówkę 'master' dla jądra a końcówkę 'slave' dla programu NOS ponieważ jądro Linuxa rozpoczyna jako pierwsze, a 'master' musi być otworzone na początku. Linux, warto wiedzieć, powinien mieć odmienny IP adres od adresu NOS-a, zatem musisz mu przypisać unikalny adres, jeśli jeszcze tego nie uczyniłeś.
'Fajkę' ustawiamy tak samo jak urządzenie seryjne, więc aby utworzyć łącze slip na jądrze Linuxa mógłbyś użyć coś takiego:
# /sbin/slattach -s 38400 -p slip /dev/ptypf &
# /sbin/ifconfig sl0 broadcast 44.255.255.255 pointopoint 44.70.248.67 /
mtu 1536 44.70.4.88
# /sbin/route add 44.70.248.67 sl0
# /sbin/route add -net 44.0.0.0 netmask 255.0.0.0 gw 44.70.248.67
W tym przykładzie jądro linuxa otrzynało adres IP 44.70.4.88 a program NOS adres IP 44.70.248.67. Polecenie 'route' w ostatnim wierszu instruuje jądro linuxa, że wszelkie datagramy z przeznaczeniem dla amprnet-u mają iść poprzez łącze slip utworzone poleceniem slattach. Zwykle polecenia powyższe umieścić należałoby w w plikach /etc/rc.d/rc.inet2 po tym jak wszystkie inne ustawienia siciowe zostaną wykonane, po to, aby łącze slip było dostępne po przeładowaniu komputera. Uwaga: nie ma powodów, aby używać cslip zamiast slip gdyż to właściwe redukuje osiągi ponieważ łącze to jest virtualne i zachodzi wystarczająco szybko, a uprzenia kompresja nagłówków zabiera więcej czasu aniżeli przesył nieskompresowanych datagramów.
Ustawienie łącza po stronie NOS-a można pokusić się i zrobić tak:
# interfejs można nazwać jak ci się podoba. ja nazwałem go dla wygody
# 'linux'
#
attach asy ttypf - slip linux 1024 1024 38400
route addprivate 44.70.4.88 linux
Polecenia te utworzą port slip zwany 'linux' na 'fajce' z końcówką 'slave' i dołączą go do jadra linuxa, dodadzą 'ścieżkę', aby łącze pracowało. Po wystartowaniu NOS-a pod Linuxem powinieneś móc 'zapingować' Linuxa i odwrotnie. Jeśli nie, posprawdzaj, że nie popełniłeś żadnych błędów, szczególnie przy adresach i na końcówkach 'fajek'.
System plików /proc zawiera pewną liczbę plików związanych bezpośrednio z oprogramowaniem jądra dla AX.25 i NetRom. Używane są one głownie przez programy z pakietu ax25-utils ale mają taki format,że być może chciałbyś je przeczytać. Foramt jest naprawdę łatwy i nie sądzę, że trzeba wiele tłumaczyć.
/proc/net/arp
zawiera mapę dla protokołu Address Resolution pomiędzy adresami IP
a adresami protokołu warstwy MAC. Te obejmują AX.25, ethernet i niektóre
protokoły wartstwy MAC
/proc/net/ax25
zawiera listę otwartych gniazd AX.25. Mogą one albo sluchać na
nadchodzące łączności lub są aktywne.
/proc/net/ax25_bpqether
zawiera mapę dla AX.25 a BPQ o znakach
/proc/net/ax25_calls
zawiera mapę o userid i znakach ustawioną przez polecenie
axparms -assoc command.
/proc/net/ax25_route
zawiera informację na temat ścieżki digipeaterów
/proc/net/nr
zawiera listę gniazd NetRom, które są otwarte na skutek tego, że
sluchają lub, że są aktywne.
/proc/net/nr_neigh
zawiera informacje o sąsiadach, o których NetRom jest świadome.
/proc/net/nt_nodes
zawiera informacje o węzłach znanych dla oprogramowania NetRom
/proc/net/rose
zawiera listę otwartych gniazd Rose na skutek tego, że albo słuchają
albo są aktywne
/proc/net/Rose_nodes
zawiera mapę o docelowych stacjach Rose przez sąsiadów Rose
/proc/net/rose_neigh
zawiera listę węzłów, które Rose zna
/proc/net/rose_routes
zawiera listę wszystkich aktywnych łączy Rose
Podane są poniżej przykłady niektórych typowych konfiguracji. Są to tylko rady ponieważ jest tyle sposobów ustawienia swojej sieci ile istnieje sieci do skonfigurawania, ale te mogą przydać ci się na początek.
Wielu z was posiada małe, lokalne sieci w domu i chcecie podłaczyć te komputery do swojej lokalnej sieci radiowej. Właśnie takiego układu używam sam w domu. Zadbałem o to, aby dostać odpowiednią liczbę właściwych adresów, tak, aby można było je uchwycić jednym routingiem dla wygody i używam ich na swojej lokalnej sieci ethernet. Wasz koordynator adresów IP pomoże wam w tym również jeśli chcecie tego sprobować. Adresy mojej lokalne sieci Ethernet tworzą podsekcję adresów sieci radiowej. Następujące ustawienie jest rzeczywistę dla linuxa jako routera na mojej sieci w domu:
--- .
| Network /---------\ . Network
| 44.136.8.96/29| | . 44.136.8/24 \ | /
| | Linux | . \|/
| | | . |
| eth0 | Router | . /-----\ /----------\ |
|---------------| |-----| TNC |----| Radio |---/
| 44.136.8.97 | and | . \-----/ \----------/
| | | sl0
| | Server | 44.136.8.5
| | | .
| | | .
| \_________/ .
--- . . . . . .
#!/bin/sh
# /etc/rc.net
# To ustawienie dostarcza jednego portu AX.25 w KISS i jednego interfejsu
# Ethernet.
echo "/etc/rc.net"
echo " Configuring:"
echo -n " loopback:"
/sbin/ifconfig lo 127.0.0.1
/sbin/route add 127.0.0.1
echo " done."
echo -n " ethernet:"
/sbin/ifconfig eth0 44.136.8.97 netmask 255.255.255.248 \
broadcast 44.136.8.103 up
/sbin/route add 44.136.8.97 eth0
/sbin/route add -net 44.136.8.96 netmask 255.255.255.248 eth0
echo " done."
echo -n " AX.25: "
kissattach -i 44.136.8.5 -m 512 /dev/ttyS1 4800
ifconfig sl0 netmask 255.255.255.0 broadcast 44.136.8.255
route add -host 44.136.8.5 sl0
route add -net 44.136.8.0 window 1024 sl0
echo -n " Netrom: "
nrattach -i 44.136.8.5 netrom
echo " Routing:"
/sbin/route add default gw 44.136.8.68 window 1024 sl0
echo " default route."
echo done.
# end
/etc/ax25/axports
# name callsign speed paclen window description
4800 VK2KTJ-0 4800 256 2 144.800 MHz
/etc/ax25/nrports
# name callsign alias paclen description
netrom VK2KTJ-9 LINUX 235 Linux Switch Port
/etc/ax25/nrbroadcast
# ax25_name min_obs def_qual worst_qual verbose
4800 1 120 10 1
W jądrze trzeba uaktywnić IP_FARWARDING.
Pliki konfiguracyjne AX.25 są mniej więcej takie same ja przykłady we wcześniejszych sekcjach, więc zajrzyj do nich gdy trzeba.
Zdecydowałem się przypisać adres IP dla portu radiowego, który nie nałeży do bloku mojej domowej sieci. Nie musiałem tak robić, można było śmiało użyć 44.136.8.97 na tym porcie.
44.136.8.68 to moja lokalna bramka do enkapsulacji IPIP, zatem tutaj kieruję ścieżkę domyślną.
Każdy komputer na sieci Ethernet ma ścieżkę:
route add -net 44.0.0.0 netmask 255.0.0.0 \
gw 44.136.8.97 window 512 mss 512 eth0
Stosowanie parametrów mss i window oznacza, że uzyskuję maksymalne osiągi zarówno na płączeniach Ethernet jak i radiowych.
- na routerze mam odpalone rzownież ftp, http, smail i inne demony więc jest on jedynym komputerem, który innym serwuje usługi - mój router to pokorne 386DX20 z 20 Mb twardego dysku i bardzo minimalną wersją linuxa.
Linux jest obecnie pospolicie używany jako bramka dla enkapsulacji TCP/IP po całym świecie. Nowy sterownik 'tunnel' obsługuje wielokrotne ścieżki enkapsulacji i sprawia, że demon ipip jest przestarzały.
Typowa konfiguracja wygłądałaby w takowy sposób:
--- .
| Network /---------\ . Network
| 154.27.3/24 | | . 44.136.16/24 \ | /
| | Linux | . \|/
| | | . |
| eth0 | IPIP | . /-----\ /----------\ |
---|---------------| |-----| TNC |----| Radio |---/
| 154.27.3.20 | Gateway | . \-----/ \----------/
| | | sl0
| | | 44.136.16.1
| | | .
| | | .
| \_________/ .
--- . . . . . .
Pliki którymi trzeba się zająć to:
# /etc/rc.net
# ustawiamy tutaj jeden port radiowy AX.25 w trybie KISS, jeden Ethernet,
# używamy sterownika 'tunnel' do IPIP encap/decapsulation
#
#
echo "/etc/rc.net"
echo " Configuring:"
#
echo -n " loopback:"
/sbin/ifconfig lo 127.0.0.1
/sbin/route add 127.0.0.1
echo " done."
#
echo -n " ethernet:"
/sbin/ifconfig eth0 154.27.3.20 netmask 255.255.255.0 \
broadcast 154.27.3.255 up
/sbin/route add 154.27.3.20 eth0
/sbin/route add -net 154.27.3.0 netmask 255.255.255.0 eth0
echo " done."
#
echo -n " AX.25: "
kissattach -i 44.136.16.1 -m 512 /dev/ttyS1 4800
/sbin/ifconfig sl0 netmask 255.255.255.0 broadcast 44.136.16.255
/sbin/route add -host 44.136.16.1 sl0
/sbin/route add -net 44.136.16.0 netmask 255.255.255.0 window 1024 sl0
#
echo -n " tunnel:"
/sbin/ifconfig tunl0 44.136.16.1 mtu 512 up
#
echo done.
#
echo -n "Routing ... "
source /etc/ipip.routes
echo done.
#
# end.
and:
# /etc/ipip.routes
# This file is generated using the munge script
#
/sbin/route add -net 44.134.8.0 netmask 255.255.255.0 tunl0 gw 134.43.26.1
/sbin/route add -net 44.34.9.0 netmask 255.255.255.0 tunl0 gw 174.84.6.17
/sbin/route add -net 44.13.28.0 netmask 255.255.255.0 tunl0 gw 212.37.126.3
...
...
...
/etc/ax25/axports
# name callsign speed paclen window description
4800 VK2KTJ-0 4800 256 2 144.800 MHz
Niektóre uwagi do zanotowania:
- Nowy sterownik 'tunnel' używa pola gw w tablicach routingowych w miejsce parametru 'pointopoint' do określenia adresu odległej bramki IPIP. Oto dlaczego obecnie obsługuje wielokrotne ścieżki na każdym interfejsie. - Można ustawić dwa interfejsy sieciowe z tym samym adresem. W tym przykładzie zarówno interfejs sl0 jak i tunl0 przyjęły adres IP portu radiowego. Czyni się tak w tym celu, aby odległa bramka widziała poprawne adresy na enkapsulo- wanych datagramach wysyłanych do niej z twojej bramki. - polecenia 'route' do określania enkapsulowanych ścieżek można wygenerować używając modyfikowanej wersji "skryptu munge". Podane jest to niżej. Polecenia route wpisane byłyby potem do osobnego pliku i czytane przez bash z /etc/ipip.routes (założywszy, że nazwałeś plik z poleceniami routingu nazwą /etc/ipip.routes) tak jak na ilustracji. Plik źródłowy musi mieć format w stylu poleceń 'route' pod NOS-em. - Zauważ stosowanie argumentu 'window' dla polecenia 'route'. Ustawienie tego parametru na właściwą wartość polepsza osiągi na łączu radiowym
Oto nowy skrypt 'tunnel-munge':
#!/bin/sh
#
# From: Ron Atkinson <n8fow@hamgate.cc.wayne.edu>
#
# This script is basically the 'munge' script written by Bdale N3EUA
# for the IPIP daemon and is modified by Ron Atkinson N8FOW. It's
# purpose is to convert a KA9Q NOS format gateways route file
# (usually called 'encap.txt') into a Linux routing table format
# for the IP tunnel driver.
#
# Usage: Gateway file on stdin, Linux route format file on stdout.
# eg. tunnel-munge < encap.txt > ampr-routes
#
# NOTE: Before you use this script be sure to check or change the
# following items:
#
# 1) Change the 'Local routes' and 'Misc user routes' sections
# to routes that apply to your own area (remove mine please!)
# 2) On the fgrep line be sure to change the IP address to YOUR
# gateway Internet address. Failure to do so will cause serious
# routing loops.
# 3) The default interface name is 'tunl0'. Make sure this is
# correct for your system.
echo "#"
echo "# IP tunnel route table built by $LOGNAME on `date`"
echo "# by tunnel-munge script v960307."
echo "#"
echo "# Local routes"
echo "route add -net 44.xxx.xxx.xxx netmask 255.mmm.mmm.mmm dev sl0"
echo "#"
echo "# Misc user routes"
echo "#"
echo "# remote routes"
fgrep encap | grep "^route" | grep -v " XXX.XXX.XXX.XXX" | \
awk '{
split($3, s, "/")
split(s[1], n,".")
if (n[1] == "") n[1]="0"
if (n[2] == "") n[2]="0"
if (n[3] == "") n[3]="0"
if (n[4] == "") n[4]="0"
if (s[2] == "1") mask="128.0.0.0"
else if (s[2] == "2") mask="192.0.0.0"
else if (s[2] == "3") mask="224.0.0.0"
else if (s[2] == "4") mask="240.0.0.0"
else if (s[2] == "5") mask="248.0.0.0"
else if (s[2] == "6") mask="252.0.0.0"
else if (s[2] == "7") mask="254.0.0.0"
else if (s[2] == "8") mask="255.0.0.0"
else if (s[2] == "9") mask="255.128.0.0"
else if (s[2] == "10") mask="255.192.0.0"
else if (s[2] == "11") mask="255.224.0.0"
else if (s[2] == "12") mask="255.240.0.0"
else if (s[2] == "13") mask="255.248.0.0"
else if (s[2] == "14") mask="255.252.0.0"
else if (s[2] == "15") mask="255.254.0.0"
else if (s[2] == "16") mask="255.255.0.0"
else if (s[2] == "17") mask="255.255.128.0"
else if (s[2] == "18") mask="255.255.192.0"
else if (s[2] == "19") mask="255.255.224.0"
else if (s[2] == "20") mask="255.255.240.0"
else if (s[2] == "21") mask="255.255.248.0"
else if (s[2] == "22") mask="255.255.252.0"
else if (s[2] == "23") mask="255.255.254.0"
else if (s[2] == "24") mask="255.255.255.0"
else if (s[2] == "25") mask="255.255.255.128"
else if (s[2] == "26") mask="255.255.255.192"
else if (s[2] == "27") mask="255.255.255.224"
else if (s[2] == "28") mask="255.255.255.240"
else if (s[2] == "29") mask="255.255.255.248"
else if (s[2] == "30") mask="255.255.255.252"
else if (s[2] == "31") mask="255.255.255.254"
else mask="255.255.255.255"
if (mask == "255.255.255.255")
printf "route add -host %s.%s.%s.%s gw %s dev tunl0\n"\
,n[1],n[2],n[3],n[4],$5
else
printf "route add -net %s.%s.%s.%s gw %s netmask %s dev tunl0\n"\
,n[1],n[2],n[3],n[4],$5,mask
}'
echo "#"
echo "# default the rest of amprnet via mirrorshades.ucsd.edu"
echo "route add -net 44.0.0.0 gw 128.54.16.18 netmask 255.0.0.0 dev tunl0"
echo "#"
echo "# the end"
Największą bodajże zaletą stosowania protokołów radioamatorskiego radia packet opartego o jądro linuxa jest łatwość, z jaką możesz pisać aplikacje i programy i je na nim używać.
Choć temat Programowania Sieci pod Unixem przekracza ramy tegoż dokumentu, to jednak opiszę tutaj elementarne szczegóły dotyczące jak wykorzystać protokoły AX.25, NetRom i Rose wewnątrz swojego oprogramowania.
Programowanie sieciowe pod Linuxem dla AX.25, NetRom i Rose przypomina programowanie dla TCP/IP. Najwięszą różnicą jest stosowana rodzina adresu i jego struktura, którą należy poprzekręcać w odpowiednie miejsce.
Nazwy rodziny adresów dla AX.25, NetRom i Rose to kolejno AF_AX25, AF_NETROM oraz AF_ROSE.
Zawsze należy dołączyć plik 'ax25.h', 'netrom.h' i rose.h' jeśli masz do czynienia z tymi protokołami. Prosty szkielet górnej części wyglądałby tak:
Dla AX.25:
#include <ax25.h>
int s, addrlen = sizeof(struct full_sockaddr_ax25);
struct full_sockaddr_ax25 sockaddr;
sockaddr.fsa_ax25.sax25_family = AF_AX25
Dla NetRom:
#include <ax25.h>
#include <netrom.h>
int s, addrlen = sizeof(struct full_sockaddr_ax25);
struct full_sockaddr_ax25 sockaddr;
sockaddr.fsa_ax25.sax25_family = AF_NETROM;
Dla Rose:
#include <ax25.h>
#include <rose.h>
int s, addrlen = sizeof(struct sockaddr_rose);
struct sockaddr_rose sockaddr;
sockaddr.srose_family = AF_ROSE;
W bibliotekach /lib/ax25.a zawartych w pakiecie progamów narzędziowych ax25-utils znajdują się wbudowane rutyny konwerujące znaki wywoławcze. Jeśli chcesz możesz napisać swoje własne.
Program narzędziowy user_call jest wyśmienitym przykładem na początek. Źródła dla tych rutyn zawarte są w pakiecie programów narzędziowych AX.25-utils. Po spędzeniu paru chwil pracując nad nimi zauważysz, że 90 procent roboty to przygotowanie otworzenia 'socket-u'. Wykonanie łączności jest łatwe podczas gdy przygotowanie zajmuje trochę czasu.
Przykłady są na tyle proste, że nie wprowadzają zamieszania. Jeśli masz jakieś pytanie to kieruj je na listę linux-hams, gdzie znajdą się ludzie gotowi udzielć ci odpowiedzi.
Jest wiele miejsc, gdzie dyskutuje się na temat Radio Amatorskiego i Linuxa, na przykład na comp.os.linux.* lub na liście pocztowej vger.rutgers.edu. Inne miejsca, gdzie się to czyni, to listy pocztowe tcp-group na ucsd.edu (ojczyzna dyskusji na temat TCP/IP i radia amatorskiego), jak również kanał #linpeople w sieci linuxnet na IRC.
Aby zapisać się na listę dyskusyjną linux-hams, wyślij pocztę do:
Majordomo@vger.rutgers.edu
z tekstem:
subscribe linux-hamsw częsci listu. Wiersz 'subject:' jest pomijany.
Archiwum listy linux-hams znajduje się na: http://zone.pspt.fi/archive/linux-hams/ oraz na http://zone.oh7rba.ampr.org/archive/linux-hams/. Staraj się zajrzeć tam zanim rozpoczniesz dyskusję ponieważ odpowiedziano tam na wiele powszechnych pytań.
Aby zapisać się na listę tcp-group, wyślij list do:
listserver@ucsd.edu
z tekstem:
subscribe tcp-group
w częsci listu.
Zauważ, że lista tcp-group jest przeznaczona głównie do dyskusji o zaawansowanych protokołach, których TCP/IP jest przykładem, w Radiu Amatorskim. Nie zadaje się tam pytań dotyczących Linuxa.
Następujące osoby przyczyniły się do stworzenia tego dokumentu na przeróżne sposoby, w sposób świadomy lub nieświadomy. Podaję ich bez szczególnego uszeregowania (tak jak pamiętam): Jonathon Naylor, Thomas Sailer, Joerg Reuter, Rot Atkinson, Alan Cox, Craig Small, John Tanner, Brandon Allbery.
AX25-HOWTO, informacja na temat jak zainstalować i ustawić niektóre z ważniejszych pakietów obsługujących AX.25 pod Linuxem.
Jest to oproramowanie darmowe; może być modyfikowane i rozprowadzane na warunkach Ogólnej Licencji Publicznej GNU opublikowanej przez
Copyright © 1996 Terry Dawson.Free Software Foundation; licencja o wersji numer 2, lub dowolnie, jakakolwiek późniejsza.
Program ten rozprowadzany jest z nadzieją, że będzie użyteczny, lecz BEZ JAKIEJKOLWIEK GWARANCJI; nawet bez gwarancji, że moze być SPRZEDAWANY lub UŻYTECZNY DLA JAKIEGOKOLWIEK CELU. Więcej szczegółów znajdzesz w Ogólnej Licencji Publicznej GNU.
Powinieneś był otrzymać egzemplarz Ogólnej Licencji Publicznej z tym programem; jeśli nie to napisz do:
Free Software Foundation, Inc., 657 Mass Ave, Cambridge, MA 02139, USA.
AX25-HOWTO - tłumaczenie na język polski. Informacja jak zainstalować i ustawić niektóre z najważniejszym pakietów do obsługi protokołu AX.25 pod Linuxem.
Copyright © 1997 Benedict P. Barszcz.
Wiele terminów, które w tym dokumencie zastosowałem może brzmieć dziwnie w uszach polskiego czytelnika. Przepraszam, wynika to z tego, że polska terminologia radia packet jest mi zupełnie nie znana. Radioamatorem zostałem tutaj w USA i polskie nazewnictwo nie było wymogiem do egzaminu. To jest błąd.
Niektórych zwrotów nie tłumaczyłem ze wzgłędow na ich ewidentność, ale na pewno w tym miejscu się grubo mylę. Inne zwroty są niezgrabne i w tym miejscu masz szerokie pole do popisu, czytelniku. Ślij poprawki do poseidon@ziplink.net. Zwroty idiomatyczne starałem się zastępować naszymi, polskimi odpowiednikami. Czasem przesadziłem, albo zupełnie minąłem się z celem:-)
Mam wrażenie, że popełniłem też błędy merytoryczne. Nie poprawiłem ich bo nie wiem gdzie:-).
Są też neologizmy, które nie zostały konsekwentnie używane w dokumencie, np. DźwiękoModem.
Fragmenty w skrypcie 'munge' nie są tlumaczone ponieważ należą do pliku i są komentarzem autora pliku.
Zmiany w stosunku do oryginału:
Port 4000 i port 3694/tcp dla node przez inetd; autor nie był konsekwentny. Wybrałem port 4000.
Odwałanie do Net-2-HOWTO zamieniłem na NET-3-HOWTO wskazując jednocześnie na jego polskie tłumaczenie. Zdaje się, że Net-2-howto już nie istnieje.
W jednym z odwołań, Terry podał tylko imię, a na innym miejscu również nawisko. Dla czytelności w pierwszym wypadku podałem zarówno imię jak i nazwisko.
kolejność komend budowy jądra poprawiona, aby faktycznie działalo tak, jak autor zamierzył. cd /usr/src postawione przed mv linux linux.old. Odciąłem też ścieżkę od nazwy pliku ax25-utils-12.tar.gz tak, aby zadziałało zgodnie z zamierzeniem autora.
Bardzo serdecznie chciałbym podziękować Terry'emu Dawson, że napisał ten dokument. Dopiero przy tłumaczeniu go, zrozumiałem jaki kawał roboty odwalił!
Chciałbym podziękować Bartkowi Maruszewskiemu, Piotrowi Tęczyńskiemu oraz Piotrowi Pogorzelskiemu za (świadomą i nie świadomą) pomoc i natchnienie, aby ten dokument powstał.
Jednocześnie chciałbym przypomnieć Waldkowi Ogonowskiemu, SP2ONG, że to on jest wszystkiemu winiem - zaraził mnie Linuxem i nie wskazał kliniki, gdzie sie to paskuctwo leczy:-).
Oraz dziękuje wszystkim, którzy nadeślą poprawki, które na pewno udoskonalą to tłumaczenie.
doc-linux-pl-2002.06.14.orig/html/Alpha-HOWTO.pl.html 0100664 0001750 0001750 00000061115 06770264140 020572 0 ustar coven coven
Alpha jest 64-bitową architekturą RISC Digitala. Projekt Alpha został rozpoczęty w połowie 1989 roku, jego celem było stworzenie wysokowydajnej alternatywy dla użytkowników VAX'a. Nie była to pierwsza architektura RISC zaprojektowana przez Digitala, ale jako pierwsza osiągnęła sukces rynkowy. Kiedy Digital ogłosił wyprodukowanie Alphy w marcu 1992, zdecydował się wejść na rynek półprzewodników, sprzedając mikroprocesory Alpha.
Alpha jest czasami nazywana Alphą AXP, z tajemniczych powodów, które nie są warte wyjaśniania. Wystarczy powiedzieć, że jest to jedno i to samo.
Digital Semiconductor (DS) jest oddziałem firmy Digital Equipment Corporation (Digital - nie lubimy nazwy DEC), który sprzedaje półprzewodniki. Do produktów Digitala zaliczają się procesory (CPU), chipsety, mostki PCI-PCI i układy peryferyjne PCI dla telekomunikacji i multimediów.
Obecnie istnieją dwie generacje rdzenia CPU (core), które są implementacją architektury Alpha:
Są różne opinie na temat znaczenia ,,EV'' (uwaga D.M.: prawdziwa odpowiedź to oczywiście ,,Electro Vlassic" [1]), numer odpowiada generacji technologii CMOS Digitala, w której został wykonany rdzeń. A więc EV4 był pierwotnie zaimplementowany w CMOS4. Z biegiem czasu, procesor zwiększa swoją wydajność, poprzez optyczne pomniejszenie do następnej generacji procesu CMOS. EV45 jest więc rdzeniem EV4 zaimplementowanym w technologii CMOS5. Istnieje duża różnica pomiędzy dostosowywaniem projektu do danej technologii, a implementowaniem go od podstaw w tej technologii (nie będę się jednak teraz w to wgłębiał). Jest też parę innych symboli: CMOS4S (pomniejszenie CMOS4) i CMOS5L.
Prawdziwi technofile będą chcieli wiedzieć, że CMOS4 jest technologią 0.75 mikronową, CMOS5 jest technologią 0.5 mikronową, a CMOS6 0.35 mikronową.
A oto konkretne procesory z różnymi rdzeniami:
21064-150,166
EV4 (pierwotnie), EV4S (obecnie)
21064-200
EV4S
21064A-233,275,300
EV45
21066
LCA4S (rdzeń EV4, z jednostką zmiennoprzecinkową EV4)
21066A-233
LCA45 (rdzeń EV4, ale z jednostką zmiennoprzecinkową EV45)
21164-233,300,333
EV5
21164A-417
EV56
21264
EV6
Rdzeń EV4 jest dwuinstrukcyjny (dual-issue), znaczy to, że może wykonać dwie instrukcje na jednostkę zegara, posiada superpotokowy rdzeń z jednostką liczb całkowitych (superpipelined core with integer unit), jednostkę zmiennoprzecinkową i przewidywanie instrukcji (branch prediction). Jest w pełni krosowalny (bypassed), korzysta z technologii 64-bitowej i ośmiokilobajtowych pamięci cache, po jednej dla Instrukcji i Danych. Jednostki cache obsługują technologię ,,write-through'' - nigdy nie zostają ,,zanieczyszczone''.
Rdzeń EV45 ma parę usprawnień w stosunku do EV4 - usprawniono trochę jednostkę zmiennoprzecinkową i dodano 16KB cache (po jednym dla Instrukcji i Danych, obsługuje parzystość). (uwaga D.M.: w wiadomości email Neil Crook zauważył, że zmiany w jednostce FPU (jednostka zmiennoprzecinkowa, ang. floating point unit) poprawiają wydajność podzielnika. Podzielnikowi FPU EV4 dzielenie o pojedyńczej precyzji zabiera 34 cykle zegara, a dzielenie o podwójnej precyzji 63 cykle (niezależnie od danych). Dla porównania FPU EV45 zabiera to zwykle 19 cykli (do 34) i 29 cykli (do 63) (zależnie od danych).)
Rdzeń EV5 jest czteroinstrukcyjny, superpotokowany, w pełni krosowalny itp. Posiada 8 kilobajtowe pamięci cache, po jednej dla I i D. Cache te obsługują metodę ,,write-through''. Ma też 96 kilobajtowy trójdrożny cache drugiego poziomu Scache (w procesorze), używający metody ,,write-back'' (może zostać zanieczyszczony). Całkowity wzrost wydajności EV4->EV5 jest większy niż wzrost spowodowany samym zwiększeniem szybkości zegara. Została też ulepszona mikroarchitektura, dla zmniejszenia opóźnień producenta/klienta na niektórych trasach danych.
EV56 posiada mikroarchitekturę podobną do EV5, jednakże dodaje nowe instrukcje dla 8 i 16-bitowych obciążeń (zobacz sekcję ,, O bajtach''. Instrukcje te znajdują zastosowanie głównie w sterownikach urządzeń. Rdzeń EV56 jest zaimplementowany w CMOS6, który jest technologią 2.0V.
21064 został ukończony w marcu 1992. Używa rdzenia EV4, ze 128-bitową szyną danych. Szyna obsługuje ,,łatwe'' podłączenie zewnętrznego cache'u drugiego poziomu, z rozmiarem bloku 256 bitów. Zegar Bcache jest konfigurowalny całkowicie programowo. 21064 może też być skonfigurowana do używania 64-bitowej szyny zewnętrznej (nie jestem jednak pewien, czy jakakolwiek płyta główna dostępna w sprzedaży używa tego trybu). 21064 nie wymusza żadnego sposobu używania Bcache'u, jednakże zazwyczaj jest on skonfigurowany jako write-back cache. 21064 zawiera obejścia pozwalające zewnętrznemu sprzętowi utrzymać zgodność cache'u z Bcache'm i wewnętrzną pamięcią podręczną, ale nie polecam tego sposobu.
21066 używa rdzenia EV6; zawiera wewnętrzny kontroler pamięci oraz mostek PCI. Dla oszczędzania wyprowadzeń procesora, kontroler pamięci ma 64-bitową szynę danych (ale wewnętrzne pamięci podręczne mają rozmiar blokowy 256 bitów, tak jak 21064, a więc wypełnienie bloku zajmuje 4 cykle zegara szyny). Kontroler pamięci obsługuje zewnętrzny Bcache i zewnętrzne DRAM'y. Częstotliwość zegara Bcache i DRAM'ów jest konfigurowana całkowicie programowo, może być dostosowana do rozdzielczości cyklu zegara CPU. Czterocyklowy proces wypełniania bloku cache nie jest taki zły, na jaki wygląda, ponieważ dostęp do DRAM'u działa w trybie stronicowania. Niestety, kontroler pamięci nie obsługuje żadnego z nowych ezoterycznych DRAM'ów (SDRAM, EDO lub BEDO), ani synchronicznych RAM pamięci podręcznej. Interfejs szyny PCI jest w pełni zgodny z normą rev2.0 i działa na częstotliwości 33MHz.
21164 ma 128-bitową szynę danych; obsługuje odczyt rozdzielony (split read), do 2 odczytów na raz (pozwala to na stuprocentowe wykorzystanie szyny danych w idealnych warunkach - można teoretycznie przesyłać 128 bitów danych w każdym cyklu zegara szyny). 21164 pozwala na łatwe podłączenie zewnętrznego cache'u trzeciego poziomu (Bcache), pozwala na synchronizację zewnętrznych systemów ze wszystkimi pamięciami podręcznymi. Rozwiązania wieloprocesorowe są więc łatwe do zaimplementowania.
21164A został ukończony w październiku 1995. Używa rdzenia EV56; jego wyprowadzenia są kompatybilne z 21164, jednak wymaga on oddzielnych szyn zasilających - wszystkie piny zasilania pobierające +3.3V w 21164 zostały podzielone na dwie grupy; jedna pobiera 2.0V dla rdzenia CPU, a druga 3.3V dla sekcji I/O (wejścia-wyjścia). Inaczej niż w innych implementacjach, wyprowadzenia 21164 nie tolerują pięciu woltów. Rezultatem tych zmian jest niekompatybilność płyt głównych 21164 z procesorami 21164A (zauważ jednak, że zaprojektowanie płyty 21164A obsługującej 21164 nie byłoby trudne). 21164A ma też kilka nowych wyprowadzeń dla obsługi nowych 8 i 16-bitowych obciążeń. Polepsza też obsługę synchronicznych SRAM'ów do implementacji zewnętrznego Bcache.
21064 i 21066 mają ten sam rdzeń (EV4). Jeżeli ten sam program zostanie uruchomiony na 21064 i 21066, przy takiej samej szybkości zegara, różnica w wydajności jest tylko rezultatem [większej] przepustowości Bcache/pamięci. Każdy wątek kodu, mający duży współczynnik współpracy z wewnętrznymi pamięciami cache, będzie wykonywał się tak samo na obu jednostkach. Istnieją dwa główne ograniczniki wydajności:
Jeżeli porównasz 21064A i 21066A, powstaje dodatkowy czynnik w postaci różnych rozmiarów Icache i Dcache w tych procesorach.
21164 rozwiązuje oba problemy: osiąga znacznie większe przepustowości szyny systemowej (pomimo tego, że ma taką samą ilość wyprowadzeń sygnałowych - tak, wiem, że ma dwa razy więcej pinów niż 21064, ale wszystkie dodatkowe to zasilanie i masa! (tak, naprawdę!!)), posiada również pamięć podręczną pracującą w trybie write-back. Jedyny problem, który pozostaje, to odpowiedź na pytanie ,,ile kosztuje?''.
Wszystkie obecnie produkowane procesory Alpha używają szybkich zegarów, ponieważ ich mikroarchitektury zostały zaprojektowane w tzw. systemie krótkich cykli zegara (short-tick design). Dlatego też żadna z szyn systemowych nie musi działać z potwornymi prędkościami.
Uwaga: Ktoś zasugerował, że wydajność jego 21066 była za niska, ponieważ kontroler pamięci tego procesora pracował tylko na 33MHz. Jednak superszybkie systemy 21064A posiadają kontrolery pamięci taktowane ,,tylko'' 33MHz.
DS sprzedaje dwa chipsety wspomagające CPU. Chipset 2107x (APECS) obsługuje 21064(A), a 2117x (ALCOR) obsługuje 21164. Zapowiadany jest 2117xA (ALCOR 2), stosowany w 21164A.
Oba chipsety posiadają kontrolery pamięci i mostki PCI dla procesorów. APECS korzysta z 32-bitowego mostka PCI, ALCOR natomiast z 64-bitowego, który (zgodnie z wymaganiami specyfikacji PCI) może obsługiwać zarówno 32, jak i 64-bitowe urządzenia PCI.
APECS składa się z 6 208-pinowych układów (cztery 32-bitowe przełączniki danych (DECADE), jeden kontroler systemu (COMANCHE), jeden kontroler PCI (EPIC)). Zapewnia kontroler DRAM (128-bitowa szyna pamięci) i interfejs PCI. Wykonuje też całą pracę potrzebną do utrzymania zgodności pamięci, kiedy urządzenie PCI wykonuje bezpośredni dostęp do/z pamięci (ang. DMA, Direct Memory Acces).
ALCOR zawiera 5 układów (4 64-bitowe przełączniki danych (Data Switch, DSW) - 208-pinowe PQFP i jeden kontrolny (Kontrola, Adresy I/O, CIA) - 383-pinowy plastykowy PGA). Zapewnia kontroler DRAM (265-bitowa szyna pamięci), oraz interfejs PCI. W ten sam sposób co APECS obsługuje DMA.
Nie istnieje chipset dla 21066, ponieważ kontroler pamięci i mostek PCI są zintegrowane z procesorem.
Grupa inżynieryjna DS produkuje wzorcowe projekty, używające Alphy i w/w chipsety. Są to w większości płyty rozmiaru PC-AT, z funkcjonalnością nowoczesnej płyty głównej do Pentium. Pierwotnie te przykładowe płyty miały być używane jako punkty startu dla firm produkujących tego typu produkty. Te projekty pierwszej generacji były nazywane płytami ewaluacyjnymi (Evaluation Board, EB). Ponieważ ilość czynności inżynieryjnych potrzebnych do wykonania płyty głównej wzrosła (z powodu zegarów o dużych prędkościach i norm emisji i podatności na zakłócenia), nacisk został postawiony na produkcję płyt głównych nadających się do sprzedaży detalicznej.
Oddziały płyt głównych Digitala wyprodukowały kilka generacji maszyn używających procesorów Alpha. Niektóre z tych systemów używają logiki wspomagającej zaprojektowanej przez te oddziały, a inne chipsetów DS. W niektórych przypadkach, płyty używają kombinacji obu tych technik.
Rózne firmy produkują płyty używające procesorów Alpha. Niektóre projektują systemy od podstaw, inne zaś używają chipsetów DS, powielają lub modyfikują przykładowe projekty Digitala, a nawet produkują komputery oparte na zbudowanych i przetestowanych płytach DS.
EB64: Nie używana już płyta do 21064 z kontrolerem pamięci wykorzystującym logikę programowalną. Wejście/Wyjście jest zapewnione przez użycie logiki programowalnej do interfejsowania układu-mostu 486<->ISA. Wbudowany Ethernet, SuperI/O (2 p. szeregowe, 1 p. równoległy, FDD) i ISA. Rozmiar PC-AT. Wykorzystuje standardowe zasilacze PC.
EB64+: Do 21064/21064A (wykorzystuje APECS). Posiada szyny ISA i PCI (3 ISA, 2 PCI, jedna para jest dzielona). Obsługuje 36-bitowe SIMM'y DRAM. Most do ISA'y jest tworzony za pomocą mostka Intel SaturnI/O PCI-ISA. Płyta posiada wbudowany kontroler SCSI (NCR 810 na PCI), Ethernet (Digital 21040), kontroler klawiatury i myszy (złącze PS/2), SuperI/O (2 sz. 1 r., FDD), RTC (ang. Real Time Clock - zegar czasu rzeczywistego - przyp. tłum.)/NVRAM. Boot ROM to EPROM (to niedobrze - vide MILO HOWTO - przyp. tłum.). Rozmiar PC-AT. Wykorzystuje standardowe zasilacze PC.
EB66: Do 21066 lub 21066A. Podsystem Wejścia/Wyjścia jest identyczny do EB64+. Rozmiar PC-AT. Wykorzystuje standardowe zasilacze PC. Schemat EB66 został opublikowany jako plakat reklamowy dla 21066 jako "pierwszy mikroprocesor na świecie posiadający wewnętrzny kontroler PCI" (dla fanów plotek: są dwie wersje tego plakatu - ja narysowałem obwody i napisałem hasło [reklamowe] dla pierwszej, a jacyś Amerykanie zmienili hasło dla drugiej wersji).
EB164: Do 21164 (i to jest w IMHO najlepszy wybór - sam na takim systemie pracuję - a pracowałem na wielu alfach - przyp. tłum.), używa ALCOR'a. Posiada szyny ISA i PCI (3 sloty ISA, 2 64-bitowe sloty PCI (jeden jest współdzielony ze slotem ISA) i dwa 32-bitowe sloty PCI). Używa SIMM'ów ,,plug-in'' do Bcache. Podsystem I/O zawiera SuperI/O (2 sz., 1 r., FDD), kontroler klawiatury i myszy (złącze PS/2), RTC/NVRAM. Boot ROM to Flash (EEPROM - przyp. tłum.). Rozmiar płyty PC-AT. Wymaga zasilacza o napięciu 3.3V.
AlphaPC64 (Cabriolet): pochodzi od EB64+, ale teraz to płyta baby-AT z Flash Boot ROM. Nie posiada kontrolera SCSI ani Ethernetu. Trzy sloty ISA, cztery sloty PCI (jedna para to slot dzielony), używa SIMM'ów Bcache typu ,,plug-in''. Wymaga zasilacza o napięciu 3.3V.
AXPpci33 (NoName): jest bazowany na EB66. Ta płyta jest produkowana przez Techniczny OEM (TOEM) Digitala. Jest przeznaczona dla procesora 21066 o szybkości 166MHz albo 233MHz. Jest to płyta rozmiaru baby-AT i wykorzystuje standardowe zasilacze PC. Posiada 5 slotów ISA i 3 sloty PCI (jedna para jest dzielona). Są dwie wersje płyty - ze złączami klawiatury typu PS/2 lub dużego DIN.
Inne płyty główne dla procesorów 21066: większość, jeżeli nie wszystkie płyty dla 21066 są bazowane na EB66 - nie ma wielu rozwiązań systemowych dla płyt 21066, ponieważ kontrola jest wykonywana w procesorze.
Multia (Universal Desktop Box): Jest to bardzo mały system podstawowy, wykorzystujący 21066. Na płycie znajdują się: 2 gniazda PCMCIA, chip grafiki TGA (21030), Ethernet (chip 21040), kontroler SCSI NCR 810, oraz kontroler stacji dysków, dwa porty szeregowe i jeden równoległy. Ma małe możliwości rozszerzenia (jeden slot PCI), ze względu na mały rozmiar. (Jest jakieś ograniczenie w używaniu slotu PCI, nie pamiętam jakie) (Zauważ, że są też Multie do 21066A i Pentium).
DEC PC 150 AXP (Jensen): Jest to bardzo stary system Digitala - jeden z systemów Alpha pierwszej generacji. Jest tutaj załączony tylko z powodu dostępności takich płyt na rynku komputerów używanych. Jensen jest stojącą na podłodze wieżą. Używa 150MHz 21064 (późniejsze wersje używały szybszych procesorów, ale nie jestem pewien co do prędkości). Płyta używała logiki programowalnej do interfejsowania mostu 486 EISA - CPU.
Inne systemy 21064(A): Istnieją 3 lub 4 płyty (nie załączam tu systemów Digitala) i wszystkie, które znam, wyeluowały z EB64+. Są to:
Inne systemy 21164(A): Jedyne, które znam, a nie są klonami EB164, to płyta wykonana przez DeskStation. System ten został zaimplementowany przy użyciu kontrolerów I/O oraz pamięci stosowanych przez DeskStation. Nie znam ich stosunku do Linuxa.
Kiedy architektura Alpha została przedstawiona, była unikalna pośród innych architektur RISC z powodu przetwarzania 8 i 16-bitowych obciążeń i zmiennych. Wspomagała też 32 i 64-bitowe. (,,longword'' i ,,quadword'' wg. nomenklatury Digitala). Projektanci (Dick Sites, Rich Witek) wyjaśnili tą decyzję następującymi zaletami:
Alpha kompensuje to przez zapewnienie silnych instrukcji manipulujących grupami bajtów w rejestrach 64-bitowych. Standardowe programy testujące operacje na łańcuchach (strings) (np. programy testujące magazynu ,,Byte'') pokazują, że wydajność Alphy jest bardzo wysoka przy operacjach na bajtach.
Absencja bajtowych obciążeń i ładunków zmienia działanie przełączników (semaphores) w oprogramowaniu, oraz podsystemów wejścia/wyjścia. Rozwiązanie problemu I/O Digitala, to użycie kilku niskopoziomowych linii adresowych do zdefiniowania rozmiaru danych podczas przesyłania I/O, oraz do dekodowania tych danych jako bajtów. Jest to tzw. rozproszone adresowanie (sparse addressing). Marnuje ono przestrzeń adresową i powoduje fragmentację pamięci I/O (więcej o skutkach rozproszonego adresowania kiedy uda mi się coś o tym napisać). Zauważ, że pamięć I/O w tym kontekście odnosi się do wszystkich zasobów systemowych PCI i dlatego odnosi się zarówno do pamięci PCI, jak i do przestrzeni adresowej PCI.
Kiedy na rynek wyszedł 21164A, architektura Alphy musiała już zawierać adresowanie bajtów. Wykonywanie tych nowych instrukcji na wcześniejszych procesorach spowoduje wyjątek ,,OPCDEC'' kodu PAL, a wtedy kod będzie obsługiwał ten wyjątek, co będzie miało wpływ na wydajność. Skutkiem tego powninno być (wg. mnie) ograniczenie korzystania z tych instrukcji do sterowników urządzeń, a nie kodu aplikacji.
Te nowe bajtowe obciążenia i ładunki znaczą, że przyszłe chipsety będą w stanie obsługiwać zdefragmentowaną przestrzeń I/O.
To jest miejsce na sekcję opisującą kod PAL. Napiszę ją, jeżeli będzie wystarczające zainteresowanie.
Możliwość uruchamiania Linuxa na każdej maszynie z Alphą jest ograniczona tylko twoimi możliwościami zdobycia informacji małych detali jej wnętrza. Ponieważ istnieją wersje Linuxa na EB66, EB64+ i EB164, wszystkie systemy oparte na 21066, 21064/APECS lub 21164/ALCOR powinny działać pod Linuxem z małymi albo bez żadnych modyfikacji. Główna różnica pomiędzy tymi płytami głównymi, to sposób, w jaki route'ują przerwania. Są trzy źródła przerwań:
Wszystkie systemy użwają mostku Intel System I/O (SIO), jako mostu PCI <-> ISA (główna szyna I/O to PCI, ISA jest drugorzędną szyną używaną do obsługi wolniejszych i ,,wywłaszczających'' (ang. legacy) urządzeń). SIO składa się z tradycyjnej, połączonej pary 8259-tek.
Niektóre systemy (np. NoName) route'ują wszystkie przerwania przez SIO do procesora, a inne mają oddzielny kontroler przerwań i route'ują wszystkie przerwania PCI i przerwanie SIO (wyjście 8295) przez niego, a wszystkie przerwania ISA przez SIO.
Inne różnice pomiędzy systemami to:
Wszystkie płyty ewaluacyjne Digital Semiconductor oraz projekty płyt głównych nie są zastrzeżone, a cały zestaw dokumentacji do jednego projektu kosztuje około 50$. Składają się na niego wszystkie schematy, źródła części programowalnych, arkusze danych dla procesora i chipsetu. Zestawy dokumentacji można zakupić u dystrybutorów Digital Semiconductors. Nie sugeruję tutaj, żeby szybko iść i kupić te zestawy, ale chcę zaznaczyć, że takie informacje są dostępne.
Mam nadzieję, że to HOWTO było pomocne. Komentarze/uaktualnienia/sugestie rozwoju przesyłaj do Neala Crooka.
[1]
Bill Hamburgen, Jeff Mogul, Brian Reid, Alan Eustace, Richard Swan, Mary Jo Doherty
i Joel Bartlett.
Opis Organicznych Systemów Iluminacyjnych. DEC WRL, Uwaga Techniczna 13,
Kwiecień 1989.
Ponieważ było to HOWTO dosyć skomplikowane pod względem technicznym, użyłem
tutaj wielu wyrażeń niezrozumiałych dla ludzi nie zajmujących się elektroniką
cyfrową. Jeden rzut oka do książki o elektronice dla początkujących powinien
rozwiać te wątpliwości.
To HOWTO jest jednym z dwóch potrzebnych do uruchomienia Linuxa na Alfie.
Drugie to MILO-HOWTO, które znajduje się w wersji polskiej na serwerze projektu
JTZ (
http://www.jtz.org.pl/).
Opisuje ono program ładujący Linuxa na Alfę (odpowiednik LILO).
Jak zwykle, jeżeli znajdziesz jakieś błędy albo masz ciekawe sugestie,
napisz do mnie.
doc-linux-pl-2002.06.14.orig/html/Assembly-HOWTO.pl.html 0100664 0001750 0001750 00000170622 06770264140 021330 0 ustar coven coven
Copyright © 1996,1997,1998 by François-René Rideau.
Ten dokument jest wolnym oprogramowaniem, możesz go redystrybuować i/lub modyfikować zgodnie z założeniami GNU General Public License opublikowanym przez Free Software Foundation; wersja 2 Licencji, lub (w twoim przypadku) inna późniejsza wersja.
To jest interaktywnie rozwijany dokument: jesteś specjalnie proszony do zadawania pytań, udzielania odpowiedzi na pytania, poprawiania odpowiedzi, dodawania nowych odpowiedzi na FAQ, wskazywania na inne oprogramowanie, wskazywania osobie prowadzącej błędy lub braki na stronach. Jeśli jesteś zmotywowany, mógłbyś przejąć prowadzenie tego HOWTO. Słowem, działaj !
By przejąć prowadzenie skontaktuj się z kimkolwiek, kto wydaje się prowadzić Assembly-HOWTO. W trakcie tego pisania to jestem ja, np. François-René Rideau. Jakkolwiek, minęło trochę czasu od kiedy poszukiwałem mocnego gościa by podmienił mnie jako prowadzącego ten dokument. Niekorzyścią jest to, iż musisz spędzić trochę czasu trzymając dokument na czasie, poprawiając go, i ucząc się narzędzi publikacyjnych LDP. Korzyścią jest to, iż zdobędziesz trochę sławy i możesz otrzymać wolne kopie kompendiów HOWTO.
Ten dokument ma na celu udzielenie odpowiedzi na najczęściej zadawane pytania przez ludzi, którzy programują lub chcą programować w 32-bitowym assemblerze x86 używając wolnych assemblerów, zwłaszcza w systemie operacyjnym Linux. Może on także wskazywać inne dokumenty o nie-wolnych, nie-x86, lub nie-32-bitowych assemblerach, chociaż nie jest to jego pierwszorzędnym celem.
Ponieważ głównym celem programowania w assemblerze jest budowa wnętrzności systemów operacyjnych, interpretatorów, kompilatorów, i gier, gdzie kompilator C zawodzi nie dostarczając potrzebnych środków wyrazu, (wykonanie jest coraz rzadszym tematem), skoncentrujemy się na rozwoju takiego oprogramowania.
Ten dokument zawiera odpowiedzi na pewne najczęściej zadawane pytania. W wielu miejscach, zostały umiejscowione adresy URL by wskazać na pewne oprogramowanie lub magazyny dokumentacji.
Sprawdź gdzie są skopiowane najbardziej użyteczne magazyny, i spróbuj dobrać się do najbliższej z nich; uchronisz w ten sposób Internet przed niepotrzebym ruchem w sieci, i zaoszczędzisz swój cenny czas.
W szczególności pewne wielkie magazyny na całym świecie, sa kopiami innych popularnych magazynów. Powinieneś się nauczyć i zapamiętać miejsca umiejscowione blisko ciebie (roztropność-sieciowa). Czasami, lista takich kopii jest wypisana w pliku, lub we wiadomości wejściowej. Miej na uwadze te porady. W przeciwnym wypadku zapytaj archie o oprogramowaniu którego szukasz...
Najświeższe wersje tego dokumentu znajdują się w http://www.tunes.org/~fare/Assembly-HOWTO lub http://www.tunes.org/~fare/Assembly-HOWTO.sgml
ale to co jest w magazynach Linux HOWTO powinno być także na czasie (ale tego nie wiem):
ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/ (?)
Francuska wersja tego HOWTO może być znaleziona w
ftp://ftp.lip6.fr/pub/linux/french/HOWTO/
COPYING,
z wersją biblioteczną w pliku o nazwie COPYING.LIB.
Literatura z
FSF
(fundacja wolnego oprogramowania) może także ci pomóc.
Każda wersja zawiera kilka napraw i mniejszych korekt, których nie będzie trzeba ciągle poprawiać.
Francois-Rene "Faré" Rideau <fare@tunes.org> tworzy i publikuje pierwsze mini-HOWTO, ponieważ ``Jestem chory od ciągłego odpowiadania na te same pytania na comp.lang.asm.x86''
*
*
*
Utworzenie Historii. Dodanie wskaźników w sekcji o cross-kompilacji. Dodanie sekcji o programowaniu I/O pod Linux-em (w szczególności video).
więcej o cross-kompilacji - Zobacz na sunsite: devel/msdos/
NASM łatwo przechodzi
wskazanie na tłumaczenie francuskie
Co ? Zapomniałem wskazac na terse???
*
tekst mini-HOWTO przekształca się w pełne linuxdoc-sgml-owe HOWTO, by zobaczyć jak wyglądają narzędzia SGML.
pierwsze jako takie wypuszczenie tego HOWTO.
dołożono sekcję Wyrazy Uznania
przesunięcie NASM: teraz jest przed AS86
Dodano sekcję "CZY POTRZEBUJESZ ASSEMBLACJI ?"
Vapor oznajmia o nowym przewodnictwie Assembly-HOWTO.
Wypuszczenie o DrLinux
*
*
wciąż więcej na temat "jak nie używać assemblacji"; unowocześnienie o NASM, GAS.
info o 16-bitowym trybie dostępu z Linux-a.
*
*
wypuszczenie o szóstej edycji LSL.
poprawki o wywołaniu gcc
To jest jeszcze inne ostatnie-wydanie-przez-Faré-przed-przejęciem-przez-nowego prowadzącego (?)
Chaciałbym podziękować następującym osobom, w kolejności występowania:
No, nie chciałbym przeszkadzać w tym co robisz, ale tu jest kilka porad ciężko zarobionego doświadczenia.
Assemblacja może wyrazić mocno niskopoziomowe rzeczy:
Assemblacja jest bardzo nisko-poziomowym językiem (najniższym jest ręczne-kodowanie w kodach binarnych instrukcji).
To znaczy
Podsumowując, chociaż możesz uznać że użycie assemblacji jest czasami konieczne, a nawet pożyteczne w kilku przypadkach gdzie nie jest konieczne, będziesz chciał:
Nawet w przypadkach kiedy Assemblacja jest konieczna (np. rozwój OS) możesz uznać, że nie aż do tego stopnia i trzymać się w/w zasad.
Obejrzyj źrodła jądra Linux-a zwracając uwagę: jak mało assemblacji jest konieczne, by uzyskać szybki, niezawodny, przenośny, utrzymywalny OS. Także udana gra taka jak DOOM została prawie całkowicie napisana w C, z mała częścią napisaną w assemblerze tylko do przyśpieszenia jej działania.
Jak rzekł Charles Fiterman na comp.compilers o 'człowieku kontra kod assemblera wygenerowany przez komputer',
``Człowiek powinien zawsze wygrać i oto przyczyna.
Języki takie jak ObjectiveCAML, SML, CommonLISP, Scheme, ADA, Pascal, C, C++, wsród innych, wszystkie mają wolne zoptymalizowane kompilatory, które zoptymalizują masę twoich programów, i często będą lepsze niż ręczny kod assemblera nawet dla szczelnych pętli, umożliwiając ci skoncentrowanie się na wysokopoziomowych szczegółach, i bez zakazywania ci złapania kilku procent wykonania w wyżej wymieniony sposób w momencie gdy osiągniesz stabilny rozwój. Oczywiście, są także komercyjne zoptymalizowane kompilatory dla większości z tych języków.
Pewne języki mają kompilatory produkujące kod w C, który może być dalej zoptymalizowany przez dany kompilator C. Takimi są LIST, Scheme, Perl i wiele innych. Prędkość jest całkiem dobra.
W celu przyspieszenia kodu powinieneś robić zrobić to tylko dla fragmentów programu które narzędzie profilujące konsekwentnie określa jako wąskie gardło wykonania.
Stąd, jeśli określisz fragmenty kodu jako zbyt wolne, powinieneś
Na końcu, przed zejściem do pisania w assemblerze, powinieneś prześledzić wygenerowany kod, sprawdzając czy problem nie leży faktycznie w złej generacji kodu, co jest możliwe ale nie w wypadkach: kod wygenerowany przez kompilator może być lepszy niż mógłbyć napisać, w szczególności na nowoczesnych architekturach! Wolne części programu mogą być równie zagmatwane. Największym problemem nowoczesnych architektur z szybkimi procesorami są pewne opóźnienia dostępu do pamięci, nietrafiony dostęp do cache, i TLB oraz błędy stronnicowania; optymalizacja z użyciem rejestrów staje się wtedy mniej użyteczna, i zyskałbyć więcej po przemyśleniu struktury danych oraz wykorzystując wątkowanie gdyż uzyskałbyś lepsze umiejscowienie w dostępie do pamięci. Być może poźniej dopiero całkowicie odmienne spojrzenie na problem, pomoże go rozwiązać.
Jest wiele powodów do sprawdzenia kodu generowanego przez kompilator. Tu jest zawarte co robić z takim kodem:
Standardową metodą uzyskania kodu assemblera
jest wywołanie twojego kompilatora z flagą -S.
Działa to dla większości Unix-owych kompilatorów,
włączając w to GNU C Compiler (GCC), ale YMMV.
Dla GCC, bardziej zrozumiały kod assemblera będzie wyprodukowany
po użyciu opcji -fverbose-asm.
Oczywiście, jeśli chcesz dostać dobry kod assemblera,
nie zapomnij użyć opcji optymalizacji i wskazówek!
Dobrze znany kompilator GNU C/C++ (GCC), zoptymalizowany 32-bitowy kompilator będący sercem projektu GNU, wspiera całkiem dobrze architekturę x86, włączając w to zdolność wstawiania kodu assemblera w programach w C, w sposób gdzie zarządzanie rejestrami może być wyspecyfikowane lub pozostawione GCC. GCC działa na większości dostępnych platform, dla godnych uwagi Linux-a, *BSD, VST, OS/2, *DOS-a, WIN*, itd.
Orginalny adres GCC jest adresem FTP GNU ftp://prep.ai.mit.edu/pub/gnu/ razem ze wszystkimi wersjami aplikacji z projektu GNU. Przekompilowane i skonfigurowane dla Linux-a wersje są w ftp://sunsite.unc.edu/pub/Linux/GCC/ Istnieje wiele kopii FTP obu adresów, na całym świecie a także na nośnikach CD.
Rozwój GCC został podzielony niedawno na dwie części. Więcej na temat eksperymentalnej wersji egcs mozna znaleźć na http://www.cygnus.com/egcs/
Źródła przystosowane do twojej ulubionego OS, oraz przekompilowane binaria można znaleźć na zwykłych adresach FTP.
Najbardziej popularny port GCC dla DOS-a nosi nazwę DJGPP i może być znaleziony w katalogach o takiej nazwie na adresach FTP. Zobacz:
Jest także port GCC na OS/2 nazwany EMX, działający także pod DOS-em, zawierający wiele bibliotek emulujących wywołania funkcji unix-a. Zobacz:
http://www.leo.org/pub/comp/os/os2/gnu/emx+gcc/
http://warp.eecs.berkeley.edu/os2/software/shareware/emx.html
ftp://ftp-os2.cdrom.com/pub/os2/emx09c/
Dokumentacja GCC zawiera pliki w formacie texinfo. Możesz przekompilować je TeX-em i wydrukować rezultat, lub przekonwertować je do .info i oglądać emacs-em, lub przekonwertować je do .html. Możesz przekonwertować je (właściwymi narzędziami) do tego co lubisz najbardziej, lub czytać takie jakie są. Pliki .info są ogólnie dostarczane z każdą dobrą instalacją GCC.
Właściwą sekcją do sprawdzenia jest:
C Extensions::Extended Asm::
Sekcja
Invoking GCC::Submodel Options::i386 Options::
może być ci także pomocna.
W szczególności, podaje ci specyficzne ograniczenia nazw rejestrów:
abcdSDB korespondują do
%eax, %ebx, %ecx, %edx,
%esi, %edi, %ebp
wyłączając (nie ma litery dla %esp).
Zasoby gier dla DJGPP (nie tylko dla hackerów gier) mają swoją stronę specjalnie o assemblerze:
http://www.rt66.com/~brennan/djgpp/djgpp_asm.html
Jest jeszcze strona www nazwana ``DJGPP Quick ASM Programming Guide'', zawierająca od URL-i do FAQ, AT&T Składnia ASM x86 , Pewne informacje o inline ASM, i konwertowanie plików .obj/.lib:
http://remus.rutgers.edu/~avly/djasm.html
GCC zależy od GAS podczas assemblacji, i śledzi jego składnię (patrz poniżej); pamiętając że inline asm wymaga znaków procent podczas cytowania by mogły przejść do GAS. Zobacz poniższą sekcję o GAS.
Znajdziesz pełno użytecznych przykładów w podkatalogu linux/include/asm-i386/
źródeł jądra Linux-a.
Ponieważ funkcje assemblera w źródłach jądra
(i bardzo prawdopodobnie twoje własne nagłówki,
jeśli spróbujesz stworzyć twoje oprogramowanie w assemblerze tak czyste
jak to jest w jądrze linuxa)
są osadzone w funkcjach extern inline,
GCC musi zostać wywołąny z -O flag (or -O2, -O3, itd),
by te funkcje były dostępne.
Jeśli nie, twój kod może się skompiluje, ale nie zostanie właściwie zlinkowany,
gdyż będzie szukał funkcji extern które nie są inline
w bibliotekach z którymi twój program będzie linkowany !!!.
Innym sposobem jest zlinkowanie z bibliotekimi zawierającymi wycofane
wersje tych funkcji.
Assemblacja inline może zostać wyłączona opcją -fno-asm,
która każe zaprzestać kompilatorowi działania gdy zostanie użyte rozszerzenie składni o inline asm,
w przeciwnym wypadku wygeneruje wywołanie funkcji zewnętrznej o nazwie asm(),
która nie zostanie właściwie rozwiązana przez linker.
Opcja -fasm przywraca działanie słowa kluczowego asm.
Bardziej ogólnie, dobrymi opcjami dla GCC na platformie x86 są
gcc -O2 -fomit-frame-pointer -W -Wallpp
-O2 jest dobrym poziomem optymalizacji w większości przypadków.
Optymalizacja ponadto zajmuje więcej czasu, otrzymując kod który jest mocno dłuższy, ale tylko trochę szybszy;
taka optymalizacja może być użyteczna tylko dla ciasnych pętli (jeśli takie są),
którą możesz jakkolwiek zrealizować w assemblerze.
W przypadkach gdy koniecznie potrzebujesz silnej optymalizacji ze strony kompilatora dla kilku plików, rozważ użycie -O6.
-fomit-frame-pointer pozwala generować kod omijający głupie
zarządzanie ramką wskaźników, co daje mniejszy i szybszy kod,
i zwalnia rejestry do dalszych optymalizacji.
Wyklucza to łatwe użycie narzędzi odpluskwiających (gdb),
ale kiedy chcesz ich użyć, nie martw się o rozmiar i prędkość kodu.
-W -Wall włącza generowanie wszytkich ostrzeżeń i pomaga wychwycić
głupie błędy.
Możesz dodać specyficzne dla danego procecora -m486 lub inne flagi tak, że
GCC wyprodukuje kod bardziej zaadaptowany dla danego komputera.
Zauważ, że EGCS (i chyba GCC 2.8) mają -mpentium i tego typu flagi,
podczas gdy GCC 2.7.x i starsze wersje nie.
Niezły wybór flag specyfikujących procesor powinien być w jądrze Linux-a.
Sprawdź dokumentację texinfo o zainstalowanej u ciebie wersji GCC.
-m386 pomoże zoptymalizować wielkość,
a także prędkość na komputerach gdzie pamięć jest w pełni wykorzystana,
odkąd wielkie programy są przyczyną wymiany pamięci,
jakakolwiek "optymalizacja" jest sensowna dla większego kodu.
Przy takich ustawieniach, może być pomocne przestanie korzystania z C,
i w zamian skorzystanie z języka ułatwiającego kod faktoryzujący (przyp.tłum.)
taki jak funkcjonalny język i/lub FORTH;
i używać implementacji bazującej na wykorzystaniu bajtów i słów.
Zapamiętaj, że możesz używać rożnych flag dla różnych plików, więc używaj maksymalnej optymalizacji tam, gdzie program wykonuje się najdłużej, podczas gdy pozostałe pliki optymalizuj pod względem rozmiaru.
Do optymalizacji może być pomocna opcja -mregparm=2
i/lub korespondujące atrybuty funkcji,
ale mogą stwarzać wiele problemów podczas linkowania obcego kodu,
włączająć w to libc.
Są sposoby by właściwie zadeklarować użycie obcych funkcji,
tak, że zostaną wygenerowane właściwe wywołania,
lecz możesz być zmuszony rekompilować obce biblioteki tak,
by używały takich samych konwencji wywołań opartych na rejestrach...
Zapamiętaj, że możesz ustawić te flagi jako domyślne edytując plik
/usr/lib/gcc-lib/i486-linux/2.7.2.3/specs
lub gdziekolwiek on jest w twoim systemie (lepiej nie dodawaj tam -Wall).
Dokładną lokalizację plików specyfikatorów GCC w twoim systemie
możesz uzyskać wołająć gcc -v.
GAS jest GNU Assemblerem, na którym opiera się GCC.
Znajdziesz go w tym samym miejscu gdzie GCC, w paczce o nazwie binutils.
W związku z tym, że GAS został pomyślany by wspierać 32-bitowe kompilatory unixowe używa on standardowej składni ``AT&T'', która składnią mocno przypomina standardowe assemblery m68k, i jest standardem w świecie UNIX-a. Składnia nie jest ani gorsza, ani lepsza niż składnia ``Intel-owska''. Jest po prostu inna. Kiedy będziesz zamierzał używać jej, zauważysz bardziej regularna składnię niż w Intel-u, chociaż trochę nudniejszą.
Oto najważniejsze ostrzeżenia odnośnie składni GAS:
%, więc
wygląd rejestrów %eax, %dl itd
zamiast tylko eax, dl, itd.
Dzięki temu możliwe jest włączanie zewnętrznych symboli w C bezpośrednio
w kodzie assemblera, bez zamieszania i konieczności
stosowania okropnych podkreśleń jako przedrostków.
mov ax,dx (wstaw rejestr
dx w rejestr ax w składni att będzie wyglądało następująco:
mov %dx, %ax.b dla (8-bitów) bajtu,
w dla (16-bitów) słowa,
i l dla (32-bitów) podwójnego słowa.
Na przykład, właściwą składnią powyższej instrukcji
będzie movw %dx,%ax.
Jakkolwiek, gas nie wymaga ścisłej składni att,
więc przyrostek jest opcjonalny, kiedy długość operandu może być wywnioskowana z
rejestrów, w przeciwnym przypadku, domyślnie zostanie wstawiony 32-bitowy operand (z ostrzeżeniem).
$,
tak jak w addl $5,%eax
(dodaj wymuszające long dla wartość 5 do rejestru %eax).
movl $foo,%eax
wstawia zawartość adresu zmiennej foo w rejestr %eax,
ale movl foo,%eax
wstawia zawartość zmiennej foo w rejestr %eax.
testb $0x80,17(%ebp)
(sprawdza najstarszy bit bajtu o offsecie 17
z komórki wskazanej przez %ebp). Istnieje program pomagający w konwersji programów ze składni TASM do składni AT&T. Zobacz
ftp://x2ftp.oulu.fi/pub/msdos/programming/convert/ta2asv08.zip
GAS ma obszerną dokumentację w formacie TeXinfo,
którą można znaleźć co najmniej w dystrybucji źródłowej.
Przegląd wyciągniętych stron .info z Emacs-a lub innych programów.
Zdarzały się pliki o nazwach gas.doc lub as.doc
gdzieś w pakietach źródłowych GAS, ale zostały włączone w dokumentacje TeXinfo.
Oczywiście, w razie wątpliwości, alternatywną dokumentacją
są same źródła!
Sekcją, która szczególnie cię zainteresuje to
Machine Dependencies::i386-Dependent::
Znowu, źródła Linux-a (jądra systemu), są dobrymi przykładami;
zobacz w linux/arch/i386, następujące pliki:
kernel/*.S, boot/compressed/*.S, mathemu/*.S
Jeśli piszesz jakiś język, pakiet obsługi wątków, itd. możesz obejrzeć jak inne języki (OCaml, gforth, itd.), lub pakiety obsługi wątków (QuickThreads, MIT pthreads, LinuxThreads, itd), lub cokolwiek, zrób to.
Na końcu, po prostu skompiluj program w C do assemblera dzięki czemu zobaczysz interesującą cię składnię. Zobacz sekcję Czy potrzebuję Assemblacji?.
GAS jest 32-bitowym assemblerem, zadaniem którego jest wspomóc 32-bitowy kompilator.
Aktualnie ma on jedno ograniczenie 16-bitowego trybu,
który zawiera niedokończone użycie 32-bitowych przedrostków do instrukcji,
tak więc piszesz 32-bitowy kod, który chodzi w 16-bitowym trybie na 32 bitowym procesorze.
W obu trybach, wspiera on 16-bitowe używanie rejestrów,
ale nie wspiera 16-bitowego adresowania.
Użycie dyrektywy .code16 and .code32 przełącza pomiędzy trybami.
Zapamiętaj, że dyrektywa inline assembly
asm(".code16\n")
pozwoli GCC wygenerować 32-bitowy kod, który uruchomi się w trybie rzeczywistym!
Stwierdziłem już, że większa część kodu potrzebnego do pełnego wspomagania 16-bitowego trybu programowania została dodana do GAS przez Bryan'a Ford'a (proszę o potwierdzenie?), ale ostatecznie, nie pojawiła się w żadnej dystrybucji którą sprawdziłem, aż do binutils-2.8.1.x ... więcej informacji na ten temat będzie mile widziane.
Cienkim rozwiązaniem jest definiowanie makr (patrz poniżej), które produkuja
kod binarny (z .byte) który potrzebujesz tylko dla 16-bitowych instrukcji
(prawie żadnych jeśli użyjesz code16 jak powyżej,
i możesz spokojnie założyć, że kod będzie działał na zgodnych 32-bitowych procesorach x86).
By znaleźć właściwe kodowanie, możesz zainspirować się
źródłami 16-bitowych assemblerami.
GASP jest Preprocesorem GAS. Dodaje makra i trochę milszą składnię do GAS.
GASP jest zawarty razem z GAS w archiwum GNU binutils.
Działa jako filtr, w stylu cpp i jemu podobnym. Nie pamiętam szczegółów, ale przychodzi on z własną dokumentacją w texinfo, więc przejrzyj ją (w .info), wydrukuj, prześledź (?). GAS z GASP-em według mnie jest typowym makro-assemblerem.
Projekt Netwide Assembler wypuszcza jeszcze jeden assembler, napisany w C, który powinien być dość modelowy do ewentualnego wsparcia znanych składni i formatów obiektów.
Wersja binarna jest na kopii sunsite w
devel/lang/asm/
Powinna być także dostępna jako .rpm lub .deb w dystrybucjach RedHat/Debian
w dystrybucyjnym contrib.
W momencie pisania tego HOWTO, wersja NASM to 0.97.
Składnia jest w stylu Intel-a. Część makroprocesora jest zintegrowana.
Wspierane formaty plików obiektowych to
bin, aout, coff, elf, as86,
(DOS) obj, win32, (ich własny format) rdf.
NASM może być używany jako wspomaganie dla wolnego kompilatora LCC (pliki wspierające są zawarte).
NASM rozwija się zbyt szybko by to HOWTO było aktualne. Jeżeli nie używasz BCC jako 16-bitowego kompilatora (który wykracza poza to 32-bitowe HOWTO), powinieneś używać NASM zamiast powiedzmy AS86 lub MASM, ponieważ jest mocno wspierany online i chodzi na wszystkich platformach.
Uwaga: NASM przychodzi także z disassemblerem, NDISASM.
Jego ręcznie napisany parser powoduje, że pracuje szybciej niż GAS, chociaż oczywiście nie wspiera trzech bilionów różnych architektur. Do x86, on powienien być assemblerem wyboru...
AS86 jest 80x86 16- i 32-bitowym assemblerem i jest częścią kompilatora języka C (BCC) Bruce'a Evans'a. Ma on głównie składnię Intel-owską, chociaż różni się nieznacznie np w trybach adresowania.
Całkowicie przestarzała wersja AS86 jest dystrybuowana przez HJLu tylko do kompilacji jądra Linux-a, w pakiecie o nazwie bin86 (aktualna wersja 0.4), dostępnej w dowolnym magazynie oprogramowania GCC dla Linux-a.
Ale nie radzę nikomu używania go do czegokolwiek innego niż przekompilowania Linux-a. Ta wersja wspiera tylko plik obiektowy hacked minix, który nie jest wspierany przez GNU binutils ani nic innego, i ma parę błędów w trybie 32-bitowym, więc powienieneś lepiej trzymać go tylko do kompilacji Linux-a.
Ostatnie wersje Bruce'a Evans'a (bde@zeta.org.au) są publikowane wraz z dystrybucją FreeBSD. No, były: Nie mogę znaleźć źródeł z dystrybucji 2.1 na :( Odtąd, wkładam źródła w moim miejscu:
http:///www.tunes.org/~fare/files/bcc-95.3.12.src.tgz
Projekt Linux/8086 (aka ELKS) jest w pewnym stopniu pozostałością bcc (chociaż nie sądze by zawierał 32-bitowe łaty). Obejrzyj http://www.linux.org.uk/Linux8086.html ftp://linux.mit.edu/.
Między innymi, ostatnie wersje, w przeciwieństwie do HJLu's, wspierają Linux-owy format GNU a.out, więc możesz linkować twój kod z programami Linux-owymi, i/lub używać zwykłych narzędzi z pakietu GNU binutil do manipulacji danymi. Ta wersja może ko-egzystować bez szkody z poprzednią wersją (zobacz poniższe pytanie).
BCC z 12 marca 1995 roku i wcześniejsze jego wersje mają brak składnika jakim
jest odkładanie/pobieranie ze stosu rejestrów segmentowych jako 16-bitowych,
co jest uciążliwe gdy programujesz w trybie 32-bitowym.
Łata jest opublikowana w projekcie Tunes
http://www.tunes.org/
podstrona
files/tgz/tunes.0.0.0.25.src.tgz
w rozpakowanym katalogu
LLL/i386/
Łata powinna być także dostępna bezpośrednio z
http://www.tunes.org/~fare/files/as86.bcc.patch.gz
Bruce Evans zaakceptował tę łatę, więc jeśli któregoś dnia pojawi się
nowa wersja bcc, powinna zawierać tę łatę...
Oto wpis GNU Makefile do używania bcc
do transformacji .s asm
w oba GNU a.out .o obiekt
i .l listing:
%.o %.l: %.s
bcc -3 -G -c -A-d -A-l -A$*.l -o $*.o $<
Usuń %.l, -A-l, and -A$*.l,
jeśli nie chcesz listingu.
Jeśli chcesz czegoś więcej niż GNU a.out,
możesz przejrzeć dokumentację bcc o wspieranych formatach,
i/lub użyć objcopy z pakietu GNU binutils.
Dokumentacje które są, zawierają się w pakiecie bcc. Podręczniki są także dostępne gdzieś pod adresem FreeBSD. Kiedy masz wątpliwości, źródła same w sobie są często dobrą dokumentacją: to nie jest zbyt dobrze komentowane, ale styl programowania jest zrozumiały. Możesz spróbować obejrzeć jak as86 jest używany w Tunes 0.0.0.25...
Linus jest zasypywany listami i moja łata kompilująca Linux-a z Linuxowym a.out as86 chyba do niego nie dotarła (!) (od tłum. trudno to przetłumaczyć - proszę o poprawki). Teraz, nie powinno to mieć znaczenia: trzymaj tylko as86 z pakietu bin86 w /usr/bin i daj zainstalować bcc dobry as86 w /usr/local/libexec/i386/bcc/as gdzie powinien być. Nie będziesz nigdy wołał wprost tego ``dobrego'' as86, ponieważ bcc robi wszystko właściwie, włączając konwersję to Linux-owego a.out, gdy jest wywołany z właściwymi opcjami; więc assembluj pliki wyłącznie z bcc jako głownym assemblerem, nie bezpośrednio z as86.
To są inne, nieregularne, opcje, w przypadku, gdy powyższe cię niesatysfakcjonowały (dlaczego?), których nie zalecam w przypadku użytkowania (?), ale mogę udowodnić użyteczność jeśli assembler musi być zintegrowany w oprogramowaniu które rozwijasz (np. OS lub aplikacje rozwojowe).
Win32Forth jest wolnym 32-bitowym systemem ANS FORTH który działa pod Win32s, Win95, Win/NT. Zawiera wolny 32-bitowy assembler (zawiera przed/przyrostkową składnię) zintegrowany w języku FORTH. Przetwarzanie makr jest przez pełną moc języka FORTH; jakkolwiek, jedynym wspieranym wejścia i wyjścia jest Win32For (żadnego zrzutu do plików .obj -- możesz oczywiście dodać to samemu). Znajdziesz to na ftp://ftp.forth.org/pub/Forth/win32for/
Terse jest narzędziem programowania dostarczającym NAJBARDZIEJ zwartą składnie assemblera dla rodziny x86! Zobacz http://www.terse.com. Mówiono, że jest gdzieś jakiś wolny klon który został porzucony po pustych pretensjach, że składnia powinna być własnością autora; i zapraszam cię do przejęcia tego, jeśli taka składnia cię interesuje.
Możesz znaleźć więcej o nich, wraz z podstawami programowania w assemblerze x86 w FAQ Raymond'a Moon'a dla comp.lang.asm.x86 http://www2.dgsys.com/~raymoon/faq/asmfaq.zip
Zapamiętaj, że wszystkie bazujace na DOS-ie assemblery powinny pracować w Linuxowym emulatorze DOS-u tak dobrze jak inne podobne emulatory, więc jeśli już masz jakiś możesz go nadal używać w prawdziwym OS. Ostatnie assemblery bazujące na DOS-ie także wspierają COFF i/lub inne formaty plików obiektowych, które są wspierane przez bibliotekę GNU BFD, więc możesz używać ich razem z wolnymi 32-bitowymi wolnymi narzędziami, być może używająć GNU objcopy (część binutils) jako filtr konwertujący.
Assemblacja programów jest nudna, ale do krytycznych części programów.
Powinieneś używać właściwego narzędzia do właściwego zadania, więc nie wybieraj assemblacji kiedy nie jest stosowna; C, OCAML, perl, Scheme, mogą być lepszym wyborem dla większości twojego programowania.
Jakkolwiek, są wypadki gdy te narzędzia nie dają ci wystarczającej kontroli nad maszyną, i assemblacja jest wtedy użyteczna i konieczna. W takich wypadkach, docenisz system makroprzetwarzania i metaprogramowania które pozwolą ci wracać do raz przygotowanych wzorców z których każdy z nich jest przygotowany jako wielokrotna definicja, co pozwala bezpiecznie programować i automatycznie przechodzić modyfikację takich wzorców itd. "Goły" assembler jest często niewystarczający, nawet jeśli chcesz robić tylko małe operacje w połączeniu z C.
Tak, wiem że ta sekcja nie zawiera użytecznych informacji. Masz swobodę do prowadzenia jej, jeśli odkryjesz coś ciekawego...
GCC pozwala (i wymaga) wyspecyfikować ograniczenia rejestrów w twoim kodzie ``inline assembly'', więc optymalizer zawsze wie o tym. W ten sposób, assemblacja kodu inline jest tak naprawdę realizowana przez wzorce, a nie wymuszana.
Później możesz umieścić twój kod assemblera w makrach CPP, i funkcjach inline w C, więc każdy może użyć go jako funkcje w C lub makro.
Funcje inline są bardzo podobne do makr, ale są czasami czystsze w użyciu.
Strzeż się tych wypadków, kod będzie zduplikowany,
tak więc tylko lokalne etykiety (w stylu 1:) powinny być definiowane w kodzie assemblera.
Jakkolwiek, makro powinno pozwolić nazwie dla nie lokalnej etykiety
być przekazaną jako parametr (lub inaczej, powinienes używać dodatkowych
meta-programowych metod).
Zapamiętaj także, że rozejście się kodu jako inline assemblera będzie potencjalnie rozprowadzał nim błędy,
więc uważaj dokładnie w kwestii ograniczeń rejestu w kodzie inline asm.
Ostatecznie, język C w sobie może być rozważany jako dobra abstrakcja programowania w assemblerze, co przyniesie ci ulgę z większością kłopotów z assemblacją.
Strzeż się pewnych optymalizacji które zawile przekazują argumenty do funkcji; przez rejestry mogą powodować niedopasowanie tych funkcji do wywołań z zewnętrznych (w szczególności ręcznie napisanego kodu assemblera) funkcji w standardowy sposób; atrybut "asmlinkage" może chronić funkcję przed kłopotami z taką flagą optymalizacyjną; obejrzyj źródła jądra linux-a dla przykładów.
GAS ma możliwość włączania pewnych makr, jak opisano w dokumentacji texinfo. Oprócz tego, podczas gdy GCC rozpoznaje pliki .s jako surowy assembler do wysłania do GAS, także rozpoznaje pliki .S jako pliki do przepuszczenia przez CPP przed wpuszczeniem ich do GAS. Znowu, znowu, zobacz źródła Linux-a dla przykładów.
Dodaje wszelkie użyteczne dodatki makroassemblacji do GAS. Obejrzyj jego dokumentację texinfo.
NASM także zawiera pewne wsparcie makr. Zobacz dokumentację. Jeśli masz jakieś dobre pomysły, możesz chcieć skontaktować się z autorami, jako, że oni aktywnie go rozwijają. W międzyczasie, zobacz poniżej zewnętrzne filtry.
On także ma trochę prostego wsparcia makrami, ale nie mogłem nigdzie znaleźć dokumentacji. Teraz źródła są bardzo przejrzyste, więc jeśli jesteś zainteresowany, łatwo powienieneś je zrozumieć. Jeśli potrzebujesz więcej niż tylko bazę, powinieneś użyć zewnętrznego filtra (zobacz poniżej).
Jakiekolwiek jest wsparcie makr twojego assemblera, lub jakikolwiek język używasz (nawet C !), jeśli język nie jest dla ciebie wystarczająco wyrazisty, możesz chcieć przepuścić pliki przez zewnętrzny filtr z regułami w Makefile takimi jak te:
%.s: %.S other_dependencies
$(FILTER) $(FILTER_OPTIONS) < $< > $@
CPP nie jest bardzo wyrazisty, ale wystarczający do wielu łatwych rzeczy, jest standardem, i jest przezroczyście wywoływany przez GCC.
Dla przykładu jego ograniczeń, nie możesz deklarować obiektów, takich że destruktory wywoływane automatycznie na końcu deklarowanego bloku; nie możesz więc zmieniać kierunki widoczności, itd.
CPP przychodzi wraz z kompilatorem C. Jeśli mógłbyś robić to bez niego, nie zawracaj sobie głowy przynoszeniem CPP (chociaż myślę jakbyś mógł).
M4 daje ci pełną moc makroprzetwarzania, z językiem równym Turingowi, rekursją, wyrażeniami regularnymi, itd. Możesz robić wszystko czego CPP nie.
Zobacz macro4th/This4th z ftp://ftp.forth.org/pub/Forth/ in Reviewed/ ANS/ (?), lub źródła Tunes 0.0.0.25 jako przykłady zaawansowanego makroprogramowania z użyciem m4.
Jakkolwiek, jego niefunkcjonalna semantyka cytowania i odcytowywania zmusza cię do używania jawnego ogonkowo-kontynuacyjno-przejściowego (przyp. tłum.) stylu makr jeśli chcesz robić zaawansowane makro programowanie (czego przypomnieniem jest TeX -- BTW, czy ktoś próbował używać TeX-a jako makroprocesora do czegoś innego niż typesetting ?) To NIE jest gorsze niż CPP, który nie pozwala na cytowanie i rekursję.
Właściwą wersją m4 jest GNU m4 1.4 (lub późniejsza jeśli istnieje) która zawiera większość składników i mniej błędów lub ograniczeń. m4 został pomyślany jakko wolny do czegokolwiek ale prosty w użyciu, może być więc nadal dobry dla większości programów w assemblerze (chyba nie piszesz programów z milionami linii w assemblerze?).
Możesz pisać twój własny prosty filtr rozszerzający makra z użyciem zwykłych narzędzi: perl, awk, sed, itd. To jest szybki sposób i możesz wszystko kontrolować. Ale oczywiście, moc makroprzetwarzania musi coś kosztować.
Zamiast używania zewnętrznych filtrów które rozszerzają makra, jedną z dróg jest pisanie programów, które piszą część lub całość innych programów.
Dla przykładu, mógłbyś użyć programu produkującego kod źródłowy
Kompilatory takie jak SML/NJ, Objective CAML, MIT-Scheme, itd, mają własną część wspomagającą assembler, którą możesz ale nie musisz wykorzystywać, jeśli zamierzasz generować kod półautomatycznie z wymienionych języków.
Jest projekt, używający języka programowania Icon, do budowy podstawowych rzeczy do produkcji manipulacji na kodzie assemblera. Zobacz http://www.cs.virginia.edu/~nr/toolkit/
Projekt Tunes OS rozwija swój własny assembler jako rozszerzenie języka Scheme i jako część procesu rozwojowego. Nie działa to jeszcze, ale pomoc jest widziana.
Assembler manipuluje symbolicznymi drzewami składni, więc możesz prawie mieć podstawę do translacji składni assemblera, disassembler, wspólną część wspomagającą assembler/kompilator, itd. Także, pełna moc języka Scheme czyni go nie do pokonania z makroprzetwarzaniem/metaprogramowaniem.
To jest preferowany sposób.
Sprawdź dokumentację i przykłady GCC z plików .S jądra Linux-a
które są przepuszczane przez gas (nie takie, które są przepuszczane przez as86).
32-bitowe argumenty są odkładane na stos w odwrotnej kolejności występowania
(stąd dostęp / pobieranie jest we właściwej kolejności),
zwracając bliski 32-bitowy adres.
%ebp, %esi,
%edi, %ebx są zapamiętywane,
inne rejestry też są zapamiętywane podczas wywołania;
%eax jest używany do przechowywania wyniku,
a %edx:%eax do przechowywania wyników 64-bitowych.
FP stack: Nie jestem pewien,
ale myślę że wynik jest w st(0), cały stos jest zapamiętany.
Pamiętaj, że GCC ma opcje modyfikujące konwencje wywołań przez rezerwowanie rejestrów, przekazywanie argumentów w rejestrach, nie używanie FPU, itd. Sprawdź strony .info i386.
Pamiętaj, że musisz zadeklarować atrybut cdecl
dla funkcji używających standardowej konwencji wywołań GCC
(nie wiem co daje użycie zmodyfikowanej konwencji wywołań).
Zobacz w stronach info GCC sekcję:
C Extensions::Extended Asm::
Pewne kompilatory poprzedają podkreśleniem każdy symbol, podczas gdy inne nie.
W szczególności, Linux-owy GCC a.out ma takie poprzedniki, podczas gdy Linux-owy ELF GCC nie.
Jeśli musisz poradzić sobie z wykorzystaniem obu formatów zobacz jak robią to istniejące pakiety. Dla przykładu, weź stare drzewo źródłowe Linux-a z pakietami Elk, qthreads lub OCAML...
Możesz także nadpisać niejawnie C->asm zmieniając nazwę
przez wstawienie wyrażeń takich jak to
void foo asm("bar") (void);
Zapamiętaj, że program objcopy, z pakietu binutils,
powinien pozwolić ci przekonwertować obiekty a.out w obiekty ELF,
i być może w przeciwną stronę także, w pewnych wypadkach.
Bardziej ogólnie, program ten realizuje konwersję formatów wielu plików.
To NIE jest rekomendowane,
ponieważ konwencje zmieniają się od czasu do czasu
od jądra do jądra (cf L4Linux),
dodatkowo to nie jest przenośne,
i niezyskowne w pisaniu biorąc pod uwagę libc,
I wyłącza poprawki i rozszerzenia które pojawiają się w libc,
takie, jak np. biblioteka zlibc,
która w locie przezroczyście dekompresuje spakowane gzip-em pliki.
Standardem i rekomendowaną drogą wywołań systemowych usług Linux-a jest
i tak zostanie, przejście przez libc.
Obiekty dzielone powinny trzymać twoje programy małymi.
I jeśli naprawdę chcesz mniejszych binariów, używaj #! ,
z interpretera mającego nad sobą wszystko czego nie chcesz w swoich
binariach.
Teraz, jeśli z pewnych powodów nie chcesz linkować programów z libc weź się za nią i zrozum jak działa! Po tym wszystkim, nadal zamierzasz zamienić ją ?
Możesz zerknąć także jak mój eforth 1.0c robi to.
Źródła Linux-a są także użyteczne,
szczególnie plik nagłówkowy asm/unistd.h
który opisuje jak wywoływać funkcje systemowe...
Podstawowo, wywołujesz int $0x80
z __NR_numerem funkcji systemowej (z asm/unistd.h)
w %eax,
i parametrami (do pięciu) w
%ebx, %ecx, %edx,
%esi, %edi.
Rezultat jest zwracany w %eax
z wartością ujemną w przypadku błędu
której przeciwną wartość libc umieszcza w errno.
Stos użytkownika jest nietknięty
więc nie musisz mieć go właściwego podczas wywołania systemowego.
Jeśli chcesz korzystać bezpośrednio z I/O pod Linux-em
jest coś prostego co nie uzależnia od OS,
i powinieneś obejrzeć IO-Port-Programming mini-HOWTO;
lub potrzebuje to sterownik urządzenia, powinieneś spróbować nauczyć się o
łamaniu jądra, rozwijaniu sterowników urządzeń, modułów jądra itd,
dla których są inne wspaniałe HOWTO i dokumenty z LDP.
W szczególności, jeśli chcesz zająć się programowaniem Grafiki przyłącz się do projektu GGI: http://www.ggi-projectorg/
Jakkolwiek, we wszystkich przypadkach, zrobisz lepiej używając GCC inline assembly z makrami z linux/asm/*.h, niż pisząc pliki źródłowe w samym assemblerze.
Taka rzecz jest teoretycznie możliwa (dowód: zobacz jak DOSEMU może selektywnie dawać dostęp portów do urządzeń programom), i słyszałem pogłoskę że ktoś gdzieś już to zrobił (w sterowniku PCI? W dostępie do VESA ? ISA PnP ? nie wiem). Jeśli masz więcej precyzyjnych informacji na ten temat będa mile widziane. Jakkolwiek, by uzyskać więcej informacji dobrymi miejscami są źródła jądra Linuxa, źródła DOSEMU (i innych programów w DOSEMU repository), oraz źródła różnych niskopoziomowych programów działających pod Linux-em... (być może GGI jeśli wspiera standard VESA).
Zasadniczo, musisz używać 16-bitowego trybu chronionego lub trybu vm86.
Na początku jest w miarę prosto to ustawić, ale będzie to działać tylko z dobrze-zrobionym kodem The first is simpler to setup, but only works with well-behaved code nie wykorzystującym jakiejkolwiek arytmetyki segmentowej that won't do any kind of segment arithmetics lub bezwzględnego adresowania segmentu (w szczególności adresowania segmentu 0), or absolute segment addressing (particularly addressing segment 0), do czasu zmian że wszystkie używane segmenty mogą być ustawione w zaawansowany sposób w LDT.
Później pozwala się na większą zgodność z vanilla 16-bitowym otoczeniem (? przyp.tłum.), ale wymaga to bardziej skomplikowanej manipulacji.
W obu przypadkach, przed wykonaniem skoku do 16-bitowego kodu musisz
Większość DOS-owych extenderów zawiera interfejs do usług DOS-a.
Poczytaj dokumentacje na ich temat,
ale często, symulują one tylko int $0x21 i inne,
więc robisz ``jakbyś'' był w trybie rzeczywistym
(mam wątpliwości czy nie są tylko łącznikami
i rozszerzają rzeczy by pracowały z 32-bitowymi operandami;
najczęściej są tylko przejściem w przerwanie
do trybu rzeczywistego lub przez uchwyt vm86).
Dokumentacja na temat DPMI i inne (oraz znacznie więcej) możesz znaleźć na ftp://x2ftp.oulu.fi/pub/msdos/programming/
DJGPP przychodzi z własną (ograniczoną) glibc pochodną/podzestawem/wymienioną, także.
Jest możliwa cross-kompilacja z Linux-a do DOS-a, zobacz katalog devel/msdos/ najbliższej kopii FTP serwera sunsite.unc.edu Zobacz także ekstender-dosa MOSS z projektu Flux w utah.
Inne dokumenty i FAQ są bardziej skoncentrowane na DOS-ie. Nie zalecamy rozwoju pod DOS.
(od tłum. Autor tego dokumentu nie przepada za Windows, słusznie zresztą, i dlatego część tej podsekcji nie będzie mile widziana przez zwolenników tego systemu :). Hej, ten dokument zawiera tylko wolne oprogramowanie. Zadzwoń kiedy Winwybuchy staną się wolne, lub gdzie będą dostępne wolne narzędzia do tego!
No, po tym wszystkim, jest : Cygnus Solutions rozwijający bibliotekę cygwin32.dll, dla programów GNU to uruchomienia pod platformami MakroGówna.
Jakkolwiek, możesz używać GCC, GAS, wszytkich narzędzi GNU, i wielu innych Unix-owych aplikacji. Zerknij na ich stronę domową. Ja (Faré) nie zamierzam rozszerzać Losedoze (od tłum. Windows -> Windoze -> Losedoze (Lose) - przegrywać) programowania. ale jestem pewny że wszędzie możesz znaleźć pełno dokumentów na tem temat...
Kontrola jest tym co przyciąga wielu programistów do assemblacji, chcących najczęściej rozwijać OS co prowadzi lub pochodzi od łamania w assemblerze. Zapamiętaj, że każdy system pozwalający na samorozwój może być określony jako "OS" nawet mimo tego, że może chodzić "nad" pracującym systemem z wielozadaniowością lub I/O (takim jak Linux na Mach lub OpenGenera na Unix-ie), itd. Stąd, dla łatwiejszego usuwania błędów, możesz rozwijać twój ``OS'' najpierw jako proces chodzący pod Linux-em (pomimo powolnego działania), a potem użyć Flux OS kit (co daje możliwość użycia sterowników Linux-a i BSD w twoim własnym OS) by zrobić go niezależnym. Gdy twój OS jest stabilny, jest jeszcze czas by napisać sterowniki jeśli naprawdę to lubisz.
To HOWTO nie zawiera wewnątrz tematów takich jak kod Boot loadera & wchodzenie w tryb 32-bitowy, Zarządzanie Przerwaniami, Podstawy o intelowskim ``trybie chronionym'' lub ``V86/R86'', definiowania twoich formatów obiektów i konwencji wywołań. Głównym miejscem gdzie możesz znaleźć pochodne informacje o tym wszystkim to kody źródłowe istniejących OS i bootloaderów. Masa wskaźników jest na poniższej stronie WWW: http://www.tunes.org/~tunes/doc/Review/OSes.html
Author's .sig:
## Faré | VN: ĐŁng-Vű Bân | Join the TUNES project! http://www.tunes.org/ ## ## FR: François-René Rideau | TUNES is a Useful, Not Expedient System ## ## Reflection&Cybernethics | Project for a Free Reflective Computing System ##
To jest pierwsze tłumaczenie tego HOWTO. Z pewnością zawiera ono masę błędów i niektóre sentencje mogą mieć inne znaczenie niż ja im nadałem. Dlatego proszę o email jeśli znajdziesz jakieś błędy (merytoryczne, gramatyczne i inne). Postaram się poprawić dokument w jak najkrótszym czasie i opublikować. Uwagi i komentarze ślij na Zbigniew Michał Kempczyński. Szczególne podziękowania składam mojej koleżance Annie Dzieniszewskiej za pomoc w trudnych gramatycznych kawałkach tego tekstu. Jeśli ktoś wie jak przetłumaczyć Legal Blurp to proszę o email.
doc-linux-pl-2002.06.14.orig/html/Beowulf-HOWTO.pl.html 0100644 0001750 0001750 00000145507 06773242740 021163 0 ustar coven coven
Nie ponosimy żadnej odpowiedzialności za jakiekolwiek błędne informacje zawarte w tym dokumencie, ani za uszkodzenia które mogą one spowodować.
Copyright © 1997 - 1998 Jacek Radajewski and Douglas Eadline. Udzielono zezwolenia na dystrybucję i modyfikowanie tego dokumentu zgodnie z licencją GNU General Public Licence.
Jacek Radajewski rozpoczął pracę nad tym dokumentem w październiku 1997, niedługo potem dołączył do niego Douglas Eadline. W przeciągu kilku miesięcy dokument Beowulf HOWTO znacznie się rozrósł, i w sierpniu 1998 został podzielony na trzy dokumenty: Beowulf HOWTO, Beowulf Architecture Design HOWTO, oraz Beowulf Installation and Administration HOWTO. Wersja 1.0.0 Beowulf HOWTO została wydana w ramach Linux Documentation Project (Projektu Dokumentacji Linuxa) 11 października 1998. Mamy nadzieję, że to jedynie początek tego, co stanie się wkrótce Beowulf Documentation Project (Projektem Dokumentacji Beowulfa).
Pisanie Beowulf HOWTO było długim procesem, zakończonym dzięki wielu osobom. Chciałem podziękować następującym ludziom za pomoc i wkład w ten dokument.
Jako że wydajność sprzętu komputerowego i sieciowego wciąż rośnie, a jego ceny spadają, bardziej praktyczne niż kupowanie bardzo kosztownego superkomputera staje się budowanie równoległych systemów obliczeniowych ze składników dostępnych w każdym sklepie. W rzeczywistości wskaźnik wydajności do ceny maszyny typu Beowulf jest od trzech do dziesięciu razy wyższy niż tradycyjnych superkomputerów. Architektura Beowulf jest łatwo skalowalna, łatwa w budowie i płaci się jedynie za sprzęt, jako że większość oprogramowania jest darmowa.
To HOWTO jest zaprojektowane dla osoby mającej przynajmniej podstawowe doświadczenie z systemem operacyjnym Linux. Znajomość technologii Beowulf czy rozumienie bardziej złożonych koncepcji związanych z systemami operacyjnymi i sieciami nie jest konieczne, ale podstawowa wiedza o przetwarzaniu równoległym będzie przydatna (w końcu musisz mieć jakiś powód, czytając ten dokument). To HOWTO nie odpowie na wszystkie możliwe pytania na temat Beowulf'a, ale być może da ci pomysły i poprowadzi we właściwym kierunku. Celem tego dokumentu jest udzielenie podstawowych informacji, oraz odnośników do bardziej zaawansowanych dokumentów.
Famed was this Beowulf: far flew the boast of him, son of Scyld, in the Scandian lands. So becomes it a youth to quit him well with his father's friends, by fee and gift, that to aid him, aged, in after days, come warriors willing, should war draw nigh, liegemen loyal: by lauded deeds shall an earl have honor in every clan. Beowulf to najstarszy zachowany poemat epicki w języku angielskim. Jest to opowieść o bohaterze dysponującym wielką siłą i odwagą, który pokonał potwora zwanego Grendel. Patrz do działu Historia aby dowiedzieć się więcej o walecznym Beowulf'ie.
Prawdopodobnie istnieje co najmniej tyle definicji Beowulf'a, ile ludzi którzy budowali lub korzystali z architektury superkomputera Beowulf. Niektórzy twierdzą że system może zostać nazwany Beowulf tylko jeśli został zbudowany tak samo, jak oryginalna maszyna NASA. Inni zmierzają do drugiej skranności, nazywając imieniem Beowulf każdy system stacji roboczych wykonujących kod równoległy. Moja definicja Beowulf'a mieści się mniej więcej pośrodku, i jest oparta na wielu opiniach z listy dyskusyjnej Beowulf'a:
Beowulf to wielo-komputerowa architektura która może zostać użyta do obliczeń równoległych. Jest to system, który na ogól składa się z jednego węzłą-serwera i jednego lub więcej węzła-klienta połączonego przez Ethernet lub jakąś inną sieć. Jest to system zbudowany w oparciu o powszechnie dostępne komponenty sprzętowe, jak każdy PC zdolny do uruchomienia Linuxa, standardowe karty Ethernet i switch'e. Nie zawiera żadnych unikalnych komponentów sprzętowych i jest łatwy w tworzeniu. Beowulf korzysta również ze zwykłego oprogramowania, jak system operacyjny Linux, Parallel Virtual Machine (PVM) oraz Message Passing Interface (MPI). Węzeł-serwer kontroluje cały klaster i udostępnia pliki klientom. Pełni on także funkcję konsoli klastra i jest jego bramą do zewnętrznego świata. Duże maszyny Beowulf mogą posiadać więcej niż jeden węzeł-serwer, oraz inne węzły stworzone dla specyficznych zadań, na przykład konsole lub stacje monitorujące. W większości przypadków węzły-klienci w systemie Beowulf są głupie, im głupsze tym lepiej. Węzły są konfigurowane i kontrolowane przez węzeł-serwer, i robią tylko to, co kazano im robić. W konfiguracji bezdyskowej klienci nie znają nawet swojego adresu IP lub nazwy, dopóki serwer im ich nie poda. Jedną z podstawowych różnic pomiędzy Beowulf'em a architekturą Cluster of Workstations (COW) jest to, że Beowulf zachowuje się bardziej jak jedna maszyna, niż wiele stacji roboczych. W większości przypadków węzły-klienci nie posiadają klawiatur czy monitorów, a dostęp do nich jest możliwy jedynie przez odległe logowanie bądz opcjonalny terminal szeregowy. Wezły Beowulf można sobie wyobrazić jako pakiej CPU + pamięć, który może zostać podłączony do klastra, tak jak CPU czy moduł pamięci może zostać dołączony do płyty głównej.
Beowulf to nie żaden specjalny pakiet oprogramowania, nowa topologia sieci
czy nowa nakładka na jądro. Beowulf to technologia łączenia komputerów Linux
aby utworzyć równoległy, wirtualny superkomputer. Chociaż istnieje wiele
pakietów oprogramowania, takich jak modyfikacje jądra, biblioteki PVM i MPI,
narzędzia konfiguracyjne, które przyspieszają architekturę Beowulf,
ułatwiają konfigurację i zwiększają użyteczność, jednak możliwe jest
zbudowanie maszyny Beowulf wykorzystując standardową dystrybucję Linux, bez
żadnego dodatkowego oprogramowania. Jeśli masz przynajmniej dwa usieciowione
komputery Linux które dzielą przynajmniej katalog /home poprzez
NFS, i ufają sobie nawzajem na tyle, aby uruchomić odległą powłokę (rsh),
możesz się upierać że dysponujesz prostą, dwu-węzłową maszyną Beowulf.
Systemy Beowulf za konstruowane z różnorodnych części. W celu zwiększenia możliowści obliczeniowych czasami korzysta cię z pewnych niedostępnych powszechnie komponentów (tzn. produkowanych przez pojedynczego producenta). W celu odróżnienia osiągów różnych typów systemów, i ułatwienia dyskusji na ich temat, proponujemy następującą klasyfikację:
BEOWULF KLASY I:
Maszyna tej klasy jest zbudowana wyłącznie z powszechnie dostępnych komponentów. W celu sprawdzenia powszechności elementów przeprowadzmy test przy użyciu "Computer Shopper" (calowej grubości miesięcznika/katalogu systemów PC i komponentów). Test ten wygląda następująco:
Beowulf KLASY I to maszyna, która może zostać skonstruowana z części znalezionych przynajmiej w 3 krajowych/ogólnoświatowych katalogach reklamowych.
Zalety systemów KLASY I to:
Wady systemów KLASY I to:
BEOWULF KLASY II
Beowulf KLASY II to po prostu każda maszyna która nie przejdzie testu z użyciem "Computer Shopper". To nie jest coś złego, jest to jedynie klasyfikacja maszyny.
Zalety systemów KLASY II to:
Wady systemów KLASY II to:
Żadna KLASA nie jest lepsza niż inna. Wszystko zależy wyłącznie do potrzeb i możliwości finansowych. Ta klasyfikacja została utworzona jedynie w celu ułatwienia i większej zwięzłości dyskusji na temat systemów Beowulf. Dział "Projektowanie systemu" może pomóc ustalić, który typ systemu pardziej pasuje do twoich potrzeb.
Myślę, że najlepszym sposobem opisu architektury superkomputera Beowulf
jest użycie przykładu, który jest bardzo podobny do prawdziwego Beowulf'a, ale
znany większości administratorów systemu. Przykład najbliższy Beowulf'owi to
laboratorium komputerów Unix z serwerem i klientami. Aby być bardziej
szczegółowym użyję jako przykładu laboratorium komputerów DEC Alpha na
Katedrze Nauk Komputerowych, USQ. Serwer nazywa się beldin, a klienci
nazywają się scilab01, scilab02, aż do scilab20. Wszyscy
klienci mają zainstalowaną lokalną kopię systemu operacyjnego Digital Unix
4.0, ale korzystają z katalogów użytkownika (/home) oraz
/usr/local serwera poprzez NFS (Network File System). Każdy klient
posiada wpis dla serwera i wszystkich pozostałych klientów w swoim pliku
/etc/hosts.equiv, więc wszyscy klienci mogą uruchomić rsh na każdym
innym. Serwer jest jednocześnie serwerem NIS dla całego laboratorium, więc
informacje księgowania są identyczne dla wszystkich maszyn. Osoba może
siedzieć przed konsolą scilab02, zalogować się i pracować w tym samym
środowisku, w jakim pracowała by gdyby zalogowała się z serwera bądz z
scilab15. Spowodowane jest to tym, że system operacyjny na wszystkich
komputerach jest zainstalowany i skonfigurowany w ten sam sposób, a katalogi
użytkownika /home i /usr/local mieszczą się fizycznie na
serwerze, i są udostępniane przez NFS. Więcej informacji o NIS i NFS
znajdziesz w dokumentach HOWTO
NIS oraz
NFS.
Gdy mamy już jakieś pojęcie o architekturze systemu, możemy spojrzeć jak
wykorzystać dostępne cykle CPU maszyn w laboratorium komputerowym.
Każda osoba może zalogować się na dowolnej maszynie, i uruchomić program i
swoim katalogu domowym, ale może także wykonać to zadanie na innej maszynie
wywołując po prostu odległą powłokę. Przykładowo załóżmy że chcemy obliczyć
sumę pierwiastków kwadratowych wszystkich liczb całkowitych od 1 do 10
włącznie. Piszemy prosty program nazwany sigmasqrt (patrz
kod źródłowy), który wykonuje oblicznia. Aby obliczyć
sumę pierwiastków kwadratowych liczb od 1 do 10 wykonujemy:
[jacek@beldin sigmasqrt]$ time ./sigmasqrt 1 10 22.468278 real 0m0.029s user 0m0.001s sys 0m0.024sKomenda
time pozwala nam śledzić upływ czasu podczas wykonywania
zadania. Jak widać, ten przykład zajął jedynie mały ułamek sekundy (0.029s),
ale co będzie jeśli spróbujemy dodać pierwiastki kwadratowe liczb od 1 do
1000000000? Spróbujmy, ponownie obliczając upływ czasu.
[jacek@beldin sigmasqrt]$ time ./sigmasqrt 1 1000000000 21081851083600.559000 real 16m45.937s user 16m43.527s sys 0m0.108s
Tym razem wykonianie programu trwało znacznie dłużej. Oczywistym pytaniem jest co możemy zrobić aby przyspieszyć wykonanie programu? Jak możemy zmienić sposób wykonania zadania aby zmniejszyć upływ czasu? Oczywistą odpowiedzią jest rozbicie zadania na wiele pod-zadań równoległych na wszystkich komputerach. Możemy rozbić jedno duże zadanie dodawania na 20 części, obliczając jeden zakres pierwiastków kwadratowych i dodając je na każdym węźle. Gdy wszystkie węzły zakończą obliczenia i zwrócą rezultaty, 20 liczb powinno zostać dodanych do siebie aby otrzymać końcowy wynik.
[jacek@beldin sigmasqrt]$ mkfifo output [jacek@beldin sigmasqrt]$ ./prun.sh & time cat output | ./sum [1] 5085 21081851083600.941000 [1]+ Done ./prun.sh real 0m58.539s user 0m0.061s sys 0m0.206s
Tym razem zajęło to około 58.5s. Jest to czas od rozpoczęcia zadania do zakończenia go przez wszystkie węzły i zwrócenia rezultatu przez potok. Ten czas nie zawiera końcowego dodania 20 liczb, ale to jedynie mały ułamek sekundy, który może zostać zignorowany. Zauważamy że nastąpiła znaczna poprawa przy równoległym wykonaniu zadania. Równoległe zadanie wykonało się ponad 17 razy szybciej, co jest bardzo dobrym wynikiem przy 20-krotnym zwiększeniu ilości CPU. Powyższy przykład ma na celu zilustrowanie najprostszej metody zmiany zwykłego kodu na równoległy. W praktyce takie proste przypadki są niezwykle rzadkie, i różne techniki (takie jak API PVM i PMI) są wykorzystywane do osiągnięcia równoległości.
Laboratorium komputerowe opisane powyżej jest doskonałym przykładem klastra stacji roboczych (COW). Tak więc co jest szczególnego w Beowulf'ie, i w jaki sposób różni się on od COW? Prawdą jest, że nie jest to wielka różnica, ale Beowulf posiada kilka unikalnych cech. Po pierwsze, w większości przypadków węzły-klienci klastra Beowulf nie posiadają klawiatury, myszy, karty graficznej czy monitora. Dostęp do węzłów-klientów odbywa się poprzez odległe połączenia z węzła-serwera, dedykowanego węzła-konsoli lub konsoli szeregowej. Jako że węzły-klienci nie muszą mieć dostępu do maszyn spoza klastra, ani maszyny spoza klastra nie muszą mieć bezpośredniego dostępu do węzłów-klientów, powszechnie stosowaną praktyką jest nadawanie węzłom-klientom prywatnych adresów IP, z prywatnych zakresów takich jak 10.0.0.0/8 czy 192.168.0.0/16 (RFC 1918 http://www.alternic.net/rfcs/1900/rfc1918.txt.html). Na ogół jedyną maszyną podłączoną do świata zewnętrznego za pomocą drugiej karty sieciowej jest węzeł-serwer. Najczęściej korzysta się z systemu poprzez bezpośredni dostęp do konsoli serwera, lub poprzez telnet czy odległe logowanie na serwer z odległej stacji roboczej. Na serwerze użytkownicy mogą edytować i kompilować swój kod, a także uruchamiać procesy na wszystkich węzłach w klastrze. W większości przypadków systemy COW są używane do obliczeń równoległych w nocy i w weekendy, gdy użytkownicy nie korzystają ze swoich stacji roboczych do pracy, wykorzystując w ten sposób z niepotrzebne cykle procesora. Z kolei maszyna Beowulf jest maszyną dedykowaną do przetwarzania równoległego, i zoptymalizowaną w tym celu. Beowulf zapewnia także większy współczynnik ceny do wydajności, jako że jest zbudowany z ogólnie dostępnych komponentów i korzysta na ogół z darmowego oprogramowania. Beowulf ma także więcej cech pojedynczego systemu, które pomagają użytkownikom dostrzegać klaster Beowulf jako pojedynczą obliczeniową stację roboczą.
Przed zakupem sprzętu dobrym pomysłem może okazać się przemyślenie planu gotowego systemu. Przy tworzeniu systemu Beowulf należy wziąść pod uwagę przede wszystkim dwie główne kwestie sprzętowe: typ komputerów/węzłów których masz zamiar użyć, oraz sposób ich połączenia. Istnieje jedna kwestia programowa, która może wpłynąć na decyzję w sprawie sprzętu: biblioteka komunikacyjna lub API. Bardziej szczegółowe rozważania na temat sprzętu i oprogramowania znajdują się w innym miejscu tego dokumentu.
Mimo że wybór nie jest zbyt wielki, istnieją jednak pewne istotne decyzje które muszą zostać podjęte przy konstruowaniu systemu Beowulf. Jako że dziedzina wiedzy (bądź sztuka) "przetwarzanie równoległe" posiada wiele możliwych interpretacji, poniżej zamieszczone wprowadzenie do niej. Jeśli nie jesteś zainteresowany takim materiałem wprowadzającym, możesz pominąć tą sekcję, jednak zaleca się, abyś przeczytał sekcję Suitability zanim podejmiesz ostateczne decyzje sprzętowe.
Ta sekcja stanowi wprowadzenie do koncepcji przetwarzania równoległego. NIE jest to wyczerpujący materiał, jest to jedynie krótki opis spraw, które mogą być istotne dla projektanta i użytkownika Beowulf'a.
Podczas projektowania i budowania Beowulf'a, wiele z opisanych poniżej zagadnień może okazać się istotnych dla twoich decyzji. Ze względu na szczególne cechy komponentów superkomputera Beowulf, należy uważnie zastanowić się nad wieloma aspektami, dopóki jeszcze zależą one od ciebie. Wcale nie jest tak trudno zrozumieć podstawowe zagadnienia związane z przetwarzaniem równoległym. W rzeczywistości gdy już zrozumie się te zagadnienia, oczekiwania okażą się bardziej rzeczywiste i sukces będzie bardziej prawdopodobny. W przeciwieństwie do "świata sekwencyjnego", gdzie szybkość procesora jest najważniejszym aspektem, szybkość procesora w "świecie równoległym" jest tylko jednym z wielu aspektów wpływających na ogólną wydajność i efektywność systemu.
Przetwarzanie równoległe może zostać osiągnięte w różny sposób. Z perspektywy użytkownika istotne jest rozpatrzenie zalet i wad każdej metody. Poniższe działy próbują dostarczyć informacji na temat metod przetwarzania równoległego i stwierdzają, czy maszyna Beowulf podpada pod tę kategorię.
Odpowiedź na to pytanie jest bardzo istotna. Korzystanie z 8 procesorów aby uruchomić twój ulubiony edytor tekstów to lekka przesada. A co z serwerem www, bazą danych, programem renderującym? Może więcej CPU pomoże. A co ze złożoną symulacją, kodem dynamiki cieczy czy aplikacją górniczą? Dodatkowe CPU na pewno pomogą w tych przypadkach. Faktem jest że architektury wieloprocesorowe są wykorzystywane do rozwiązywania coraz większej liczby problemów.
Najczęściej następnym pytaniem jest: "Dlaczego potrzebuję dwóch czy czterech CPU? Po prostu poczekam na turbo-hiper układ 986." Istnieje kilka powodów:
Jeśli do rozwiązania złożonego problemu potrzebujesz szybkości, przetwarzanie równoległe jest warte rozważenia. Ponieważ przetwarzanie równoległe może zostać zaimplementowane na różne sposoby, rozwiązanie problemu wymaga podjęcia pewnych bardzo ważnych decyzji. Te decyzje mogą drastycznie wpłynąć na przenośność, wydajność i koszt systemu.
Zanim dojdziemy do spraw technicznych, spójrzmy na realny problem dla przetważania równoległego, korzystając z przykładu który dobrze znamy -- oczekiwania w długich kolejkach w sklepie.
Rozważmy wielki sklep z ośmioma kasami zgrupowanymi razem na przedzie sklepu. Załóżmy że każda kasa/każdy kasjer jest CPU, a każdy klient jest programem komputerowym. Wielkość zamówienia każdego klienta jest rozmiarem programu komputerowego (ilością pracy). Te analogie mogą zostać wykorzystane do zilustrowania pojęć przetwarzania równoległego.
Tylko jedna kasa jest otwarta, i musi obsłużyć każdego klienta pojedynczo.
Przykład: MS-DOS
Otwarta jest jedna kasa, ale teraz przetwarzany jest tylko fragment zamówienia klienta, a następnie obsługiwany jest fragment zamówienia klienta następnego. Każdemu wydaje się, że wszyscy są obsługiwani jednocześnie, ale jeśli nie ma nikogo innego w kolejce klient zostanie obsłużony szybciej.
Przykład: UNIX, NT korzystający z jednego CPU
Teraz sklep dysponuje wieloma kasami. Każde zamówienie może zostać przetworzone przez odrębną kasę i kolejka może zostać obsłużona szybciej. Nazywane jest to SMP -- Symmetric Multi-processing. Mimo że istnieje wiele kas, to jeśli jesteś sam w kolejce, nie zostaniesz obsłużony szybciej, niż gdyby istniała tylko jedna kasa.
Przykład: UNIX oraz NT z wieloma CPU
Jeśli podzielisz produkty w zamówieniu, być może zdołasz szybciej przejść przez kolejkę korzystając z kilku kas jednocześnie. Najpierw musimy założyć, że posiadasz dużą ilość towaru, ponieważ czas poświęcony na rozbijanie zamówienia musi zwrócić się przez korzystanie z wielu kas. Teoretycznie powinieneś przejść kolejkę n-razy szybciej niż poprzednio, gdzie `n' to ilość kas. Gdy kasjer musi podsumować zamówienie, może wymienić informację i komunikować się z wszystkimi innymi `lokalnymi' kasami. Kasy mogą nawet `zaglądać' do innych kas aby uzyskać informację, która przyspieszy ich pracę. Istnieje jednak limit ilości kas w jednym sklepie, aby praca przebiegała efektywnie.
Prawo Amdala także ogranicza prędkość programu do prędkości jego najwolniejszego, sekwencyjnego fragmentu.
Przykład: UNIX lub NT z wielona CPU na jednej płycie głównej uruchamiające programy wielo-wątkowe.
Aby zwiększyć wydajność, sklep dodaje 8 kas na tyłach sklepu. Jako że nowe kasy są daleko od kas z przodu, kasjerzy muszą przekazywać sobie sumy cząstkowe przez telefon. Ta odległość zwiększa nieco opóźnienie w komunikacji między kasjerami, ale jeśli uda się zminimalizować komunikację, to wszystko jest w porządku. Jeśli masz naprawdę wielkie zamówienie, wymagające wszystkich kas jednocześnie, to przed obliczeniem zysków czasowych należy rozważyć opóźnienia komunikacji. W pewnych przypadkach sklep może posiadać pojedyncze kasy (lub zgrupowania kas) rozmieszczone na terenie całego sklepu -- każda kasa (lub zgrupowanie) musi komunikować się przez telefon. Jako że każdy kasjer może rozmawiać z dowolnym innym, nie jest istotne gdzie oni się znajdują.
Przykład: Jedna lub więcej kopii UNIX lub NT z wieloma CPU na tej samej lub innej płycie głównej, porozumiewających się poprzez komunikaty.
Powyższe scenariusze, mimo że niedokładne, są dobym przykładem ograniczeń nakładanych na system równoległy. W przeciwieństwie do pojedynczego CPU (lub kasy) komunikacja jest istotna.
Popularne metody i architektury przetwarzania równoległego są zaprezentowane poniżej. Mimo że opis ten nie jest pod żadnym względem wyczerpujący, jest jednak wystarczający do zrozumienia podstaw projektu Beowulf.
Istnieją dwa podstawowe sposoby łączenia sprzętu:
Typowy Beowulf to zbiór jednoprocesorowych maszyn połączonych przez szybką sieć Ethernet, a więc jest systemem z własną pamięcią. System SMP to maszyna z pamięcią dzieloną, która może zostać wykorzystana do przetwarzania równoległego -- aplikacje równoległe komunikują się przez pamięć dzieloną. Tak jak w przykładzie sklepu, maszyny z pamięcią lokalną (pojedyncze kasy) są skalowalne do dużej liczby CPU, gdy liczba CPU maszyn z pamięcią dzieloną jest ograniczona przez pamięć.
Jest jednak możliwe połączenie wielu maszyn z pamięcią dzieloną aby utworzyć "hybrydową" maszynę z pamięcią dzieloną. Te hybrydowe maszyny wyglądają dla użytkownika jak pojedyncze, duże maszyny SMP i często zwane są maszynami NUMA (non uniform memory access -- nietypowy dostęp do pamięci), ponieważ globalna pamięć widoczna dla programisty i dzielona przez wszystkie CPU może być ukrywana. Jednak na pewnym poziomie maszyna NUMA musi przekazywać wiadomości pomiędzy lokalnymi obszarami pamięci dzielonej.
Możliwe jest także podłączenie maszyn SMP jako lokalnych węzłów obliczeniowych. Typowe płyty główne KLASY I mają 2 lub 4 procesory, jest to sposób zredukowania kosztów. Wewnętrzny scheluder Linuxa określa, w jaki sposób te CPU są dzielone. W tym przypadku użytkownik nie może określić odrębnego zadania dla konkretnego procesora SMP. Użytkownik może jednak rozpocząć dwa niezależne procesy lub proces wielowątkowy i spodziewać się poprawy wydajności w stosunku do systemu z pojedynczym CPU.
Istnieją dwa podstawowe sposoby określania momentów zbieżnych w programie:
Istnieją inne metody, ale powyższe są najszerzej wykorzystywane. Należy zapamiętać, że sposób określania zbieżności nie musi zależeć od warstwy sprzętowej. Zarówno komunikaty, jak i wątki mogą zostać zaimplementowane w systemach SMP, NUMA-SMP jak i klastrach -- mimo że, jak wyjaśniono poniżej, istotnymi kwestiami są efektywność i przenośność.
Z punktu widzenia historii, technologia przekazywania komunikatów odzwierciedla projekty wczesnych komputerów równoległych z lokalną pamięcią. Komunikaty wymagają kopiowania danych, podczas gdy wątki korzystają z danych na miejscu. Tajność i szybkość kopiowania komunikatów to wartości ograniczające ten model. Komunikat jest stosunkowo prosty: jakieś dane oraz procesor docelowy. Najpopularniejsze API do przesyłania komunikatów to: PVM lub MPI. Przekazywanie komunikatów może zostać efektywnie zaimplementowane przy wykorzystaniu wątków, a komunikaty pracują równie dobrze na maszynach SMP i pomiędzy klastrami maszyn. Zaletą korzystania z komunikatów na maszynach SMP, w przeciwieństwie do wątków, jest to, że jeśli zdecydujesz się na korzystanie w przyszłości z klastrów, dodawanie maszyn i skalowanie aplikacji będzie bardzo łatwe.
Wątki systemu operacyjnego zostały stworzone, ponieważ projekty SMP (symmetrical multiprocessing -- symetryczna wieloprocesowość) dopuszczały bardzo szybką komunikację poprzez pamięć dzieloną, oraz synchronizację pomiędzy zbieżnymi fragmentami programu. Wątki działają bardzo dobrze na systemie SMP, ponieważ komunikuje się on poprzez pamięć dzieloną. Z tego powodu użytkownik musi oddzielić dane lokalne od globalnych, w przeciwnym wypadku programy nie będą działać poprawnie. W przeciwieństwie do komunikatów, wiele operacji kopiowania może zostać wyeliminowanych przez użycie wątków, ponieważ dane są dzielone pomiędzy procesami (wątkami). Linux wspomaga wątki POSIX. W przypadku wątków problemem jest to, że trudno rozszerzyć ich zasięg poza maszynę SMP oraz, ponieważ dane ją dzielone pomiędzy procesory, koherencja pamięci podręcznej może doprowadzić do opóźnień. Efektywne rozciągnięcie wątków poza granicę SMP wymaga technologi NUMA, która jest kosztowna i nie wspomagana bezpośrednio przez Linuxa. Implementacja wątków poprzez wiadomości jest możliwa ( http://syntron.com/ptools/ptools_pg.htm), ale wątki są często nieefektywne gdy zaimplementowane przy użyciu komunikatów.
Można wyciągnąc następujące wnioski jeśli chodzi o wydajność:
wydajność na wydajność w skalowalność
maszynie SMP klastrze
----------- --------------- -----------
messages dobra najlepsza najlepsza
threads najlepsza słaba* słaba*
* wymaga kosztownej technologii NUMA.
Aby uruchomić aplikację równolegle na wielu CPU, musi ona zostać rozbita na konkurencyjne części. Standardowa jednoprocesorowa aplikacja nie będzie działać szybciej na wielu procesorach. Istnieją pewne narzędzia i kompilatory, które potrafią podzielić program, ale przekształcenie kodu na równoległy nie jest operacją "plug and play". Zależnie od aplikacji, może to być proste, ekstremalnie trudne a w pewnych przypadkach nawet niemożliwe, ze względu na zależności algorytmów.
Zanim zostaną omówione kwestie sprzętowe, koncepcja musi zostać wprowadzona. Before the software issues can be addressed the concept of Suitability needs to be introduced.
Odpowiedzią na większość pytań dotyczących przetwarzania równoległego jest:
"Wszystko zależy od zastosowania."
Zanim przejdziemy do tego tematu, należy dokonać jeszcze jednego bardzo ważnego podziału -- różnicy pomiędzy KONKURENCYJNYM i RÓWNOLEGŁYM. Dla celów tej dyskusji zdefiniujemy te dwa pojęcia następująco:
KONKURENCYJNE części programu, to te, które mogą zostać wykonane niezależnie.
RÓWNOLEGŁE części programu, to te KONKURENCYJE części, które są wykonywane na osobnym procesorze w tym samym czasie.
Różnica jest bardzo ważna, ponieważ KONKURENCJA to własność programu, a efektywna RÓWNOLEGŁOŚĆ, to właśność maszyny. Na ogół wykonywanie RÓWNOLEGŁE powoduje przyspieszenie pracy. Czynnikiem ograniczającym wydajność systemu równoległego jest prędkość komunikacji i opóźnienie pomiędzy węzłami (opóźnienie występuje także w wielowątkowych aplikacji SMP, z powodu koherencji pamięci podręcznej). Większość programów testujących wydajność jest wysoce równoległa, a komunikacja i opóźnienia nie są wąskim gardłem. Ten tym zadania można nazwać "typowo równoległym". Inne aplikacje nie są takie proste i wywołanie KONKURENCYJNYCH części programu RÓWNOLEGLE może spowolnić go, zmniejszając tym samym zysk z innych KONKURENCYJNYCH części. Mówiąc prosto, koszt czasu komunikacji musi zwrócić się w oszczędnościach czasu obliczenia, w przeciwnym wypadku RÓWNOLEGŁE wykonanie KONKURENCYJNEJ części jest nieefektywne.
Zadaniem programisty jest stwierdzenie, które KONKURENCYJNE części programu POWINNY być wykonane RÓWNOLEGLE, a które NIE. Od odpowiedź na te pytania zależy EFEKTYWNOŚĆ aplikacji. Poniższy wykres podsumowuje sytuację:
| *
| *
| *
% | *
zasto- | *
sowań | *
| *
| *
| *
| *
| *
| ****
| ****
| ********************
+-----------------------------------
czas komunikacji/czas przetwarzania
W idealnym komputerze równoległym, wskaźnik komunikacji/przetwarzania jest równy i wszystko, co jest KONKURENCYJNE może zostać zaimplementowane RÓWNOLEGLE. Niestety, rzeczywiste komputery równoległe, włączając w to maszyny z pamięcią dzieloną, podlegają efektom pokazanym na wykresie. Podczas projektowania Beowulfa, użytkownicy powinni zapamiętać ten wykres, ponieważ efektywność równoległa zależy do wskaźnika czasu komunikacji do czasu przetwarzania dla KONKRETNEGO KOMPUTERA RÓWNOLEGŁEGO. Aplikacje mogą być przenośne, ale nie można zagwarantować że będą efektywne na innej platformie.
NA OGÓŁ NIE ISTNIEJE PRZENOŚNY I EFEKTYWNY PROGRAM RÓWNOLEGŁY
Jest jeszcze jedna konsekwencja powyższego wykresu. Jako że efektywność zależy od wskaźnika komunikacji/przetwarzania, zmiana jedynie jednego elementu wskaźnika nie musi koniecznie powodować wzrostu szybkości. Zmiana prędkości procesora, nie zmieniając czasu komunikacji, może mieć nietypowy wpływ na program. Na przykład podwojenie albo potrojenie prędkości CPU, zachowując tę samą prędkość komunikacji, może sprawić, że poprzednio efektywne RÓWNOLEGŁE fragmenty programu staną się bardziej efektywne gdy zostaną uruchomione SEKWENCYJNIE. To znaczy uruchomienie poprzednio RÓWNOLEGŁYCH fragmentów jako SEKWENCYJNE może okazać się lepsze. Wykonywanie nieefektywnych części programu równolegle uniemożliwia uzyskanie maksymalnej prędkości. Tak więc dodając szybszy procesor, możesz spowolnić aplikację (CPU nie wykorzystuje swojej pełnej szybkości).
ZMIANA CPU NA SZYBSZY MOŻE SPOWOLNIĆ APLIKACJĘ
Podsumowując, aby wiedzieć, czy można wykorzystać środowisko równoległe, należy przyjrzeć się, czy konkretna maszyna pasuje do aplikacji. Musisz wziąść pod uwagę wiele kwestii, takich jak prędkość CPU, kompilator, API przekazywania komunikatów, sieć itd. Należy zauważyć, że zwykłe profilowanie aplikacji nie zamyka sprawy. Możesz zidentyfikować fragment programu wymagający wielu obliczeń, ale nie znasz kosztów komunikacji tego fragmentu. Może się zdarzyć, że koszty komunikacji sprawią, że kod równoległy nie będzie efektywny.
Ostatnia uwaga na temat pewnego niedomówienia. Często twierdzi się, że program "jest RÓWNOLEGŁY", ale w rzeczywistości jedynie zidentyfikowano KONKURENCYJNE fragmenty. Z powodów podanych powyżej program nie jest RÓWNOLEGŁY. Efektywna RÓWNOLEGŁOŚĆ jest własnością maszyny.
Gdy zdecydujesz, że potrzebujesz przetwarzania równoległego i chcesz zaprojektować i zbudować Beowulfa, dobrym pomysłem jest kilka chwil zastanowienia nad aplikacją, z poszanowaniem wcześniejszych uwag.
No ogół możesz zrobić dwie różne rzeczy:
W każdym z przypadków w pewnym momencie musisz zastanowić się nad kwestiami efektywności. Na ogół powinieneś zrobić trzy rzeczy:
Przyjrzyjmy się im po kolei.
Ten krok jest często nazywany "urównolegleniem programu". Decyzje podejmiemy dopiero w kroku 2. Teraz musisz jedynie wyznaczyć zależności pomiędzy danymi.
Z praktycznego punktu widzenia, aplikacje mogą wykazywać dwa typy konkurencji: obliczeń i wejścia/wyjścia. Mimo że w wielu wypadkach konkurencje obliczeń i wejścia/wyjścia są niezależne, to istnieją aplikacje, które wymagają obu. Istnieją narzędzia, które mogą wykonać analizę konkurencji istniejącej aplikacji. Wiele z tych narzędzi jest projektowanych dla FORTANa. Są dwa powody dla których używa się FORTAN: historycznie większość aplikacji obliczeniowych było pisanych w FORTANie oraz jest on łatwiejszy w analizie. Jeśli nie istnieją żadne narzędzia, to ten krok może okazać się dość trudny dla istniejących aplikacji.
Bez pomocy narzędzi, ten krok wymagał by użycia metody prób i błędów, lub po prostu zgadywania. Jeśli bierzesz pod uwagę pojedynczą aplikację, postaraj się określić czy jest ograniczona przez CPU (granica obliczeniowa) lub przez twardy dysk (granica wejścia/wyjścia). Wymagania Beowulfa mogą być dość różne, zależnie od potrzeb. Na przykład problem ograniczony obliczeniowo może wymagać kilku bardzo szybkich CPU i szybkiej sieci z małym opóźnieniem, gdy problem ograniczony przez wejście/wyjście może działać lepiej na wolniejszym CPU i szybkiej sieci Ethernet.
To zalecenem często zaskakuje wiele osób, ponieważ zwykle uważa się, że szybszy procesor jest zawsze lepszy. Jest to prawdą jeśli dysponuje się nieograniczonym budżetem, jednak w przypadku prawdziwych systemów powinno się minimalizować koszty. Dla problemów ograniczonych przez wejście/wyjście istnieje prosta zasada (zwana Prawem Eadline'a-Dedkova) która jest dość pomocna:
Z dwóch komputerów równoległych o tej samym zsumowanym wskaźniku wydajności CPU lepszą wydajność dla aplikacji z dominującymi operacjami wejścia/wyjścia będzie miał ten, który posiada wolniejsze procesory (i prawdopodobnie także wolniejszą komunikację międzyprocesorową).
Dowód tego prawa wychodzi poza zakres tego dokumenty, jednak może zainteresować cię dokument Performance Considerations for I/O-Dominant Applications on Parallel Computers (w formacie Postscript 109K) (ftp://www.plogic.com/pub/papers/exs-pap6.ps)
Gdy już określiłeś typ konkurencji aplikacji, musisz obliczyć jak efektywna będzie ona równolegle. Patrz dział Oprogramowanie aby znaleźć opis narzędzi programowych.
W razie nieobecności narzędzi, możesz próbować po prostu zgadnąć. Jeśli pętla obliczeniowa trwa minuty, a dane mogą zostać przesłane w ciągu sekund, to prawdopodobnie jest to dobry kandydat na program równoległy. Ale pamiętaj, jeśli rozbijesz 16-minutową pętle na 32 części, a transfer danych wymaga kilku sekund, to zaczyna robić się ciasno.
Istnieje kilka sposobów opisu konkurencyjnych części programu: There are several ways to describe concurrent parts of your program:
Te dwa sposoby różnią się głównie tym, że równoległość "wyraźna" jest określana przez użytkownika, a domniemana jest określana przez kompilator.
Są to po prostu metody, w których użytkownik musi zmodyfikować kod źródłowy specjalnie dla komputera równoległego. Użytkownik musi dodać obsługę komunikatów korzystając z PVM lub MPI, albo wątków korzystając z wątków POSIX (pamiętaj jednak że wątki nie działają na komputerach SMP).
Metody wyraźne są bardzo trudne w implementacji i poprawianiu błędów. Użytkownicy najczęściej osadzają wyraźne wywołania funkcji w standardowym kodzie źródłowym FORTAN 77 lub C/C++. Biblioteka MPI dodaje pewne funkcje ułatwiające implementację standardowych równoległych metod (np. funkcje scatter/gather). Dodatkowo możliwe jest także użycie standardowych bibliotek napisanych dla równoległych komputerów. Pamiętaj jednak, że przenośność nie idzie w parze z efektywnością.
Ze względów historycznych, większość programów operujących na liczbach zostało napisanych w FORTANie. Z tego powodu FORTAN posiada największe wsparcie (narzędzia, biblioteki itp.) dla przetwarzania rówoległego. Teraz wielu programistów korzysta z C, lub przepisuje istniejące programy FORTAN w C, jako że C działa szybciej. Może jest prawdą, że C jest najbliższe uniwersalnemu kodowi maszynowemu, posiada jednak kilka poważnych wad. Użycie wskaźników w C znacznie utrudnia wyznaczanie zależności pomiędzy danymi. Automatyczna analiza wskaźników jest bardzo trudna. Jeśli dysponujesz gotowym programem w FORTANie i myślisz, że mógłbyś uczynić go równoległym w przyszłości -- NIE KONWERTUJ GO NA C!
Domniemane metody to te, w których użytkownik pozostawia niektóre (lub wszystkie) decyzje dotyczące równoległości kompilatorowi. Przykładem jest FORTAN 90, High Performance FORTAN, Bulk Synchronous Parallel (BSP) oraz cała lista metod rozwijanych obecnie.
Metody domyślne wymagają od użytkownika podania pewnych informacji na temat konkurencyjnej natury aplikacji, ale to kompilator podejmie następnie decyzje jak wykonywać tą konkurencję równolegle. Te metody gwarantują pewien stopień przenośności i efektywności, jednak ciągle nie istnieje najlepszy sposób opisu problemu konkurencyjnego dla komputera równoległego.
/* Jacek Radajewski jacek@usq.edu.au */
/* 21/08/1998 */
#include <stdio.h>
#include <math.h>
int main (void) {
double result = 0.0;
double number = 0.0;
char string[80];
while (scanf("%s", string) != EOF) {
number = atof(string);
result = result + number;
}
printf("%lf\n", result);
return 0;
}
/* Jacek Radajewski jacek@usq.edu.au */
/* 21/08/1998 */
#include <stdio.h>
#include <math.h>
int main (int argc, char** argv) {
long number1, number2, counter;
double result;
if (argc < 3) {
printf ("usage : %s number1 number2\n",argv[0]);
exit(1);
} else {
number1 = atol (argv[1]);
number2 = atol (argv[2]);
result = 0.0;
}
for (counter = number1; counter <= number2; counter++) {
result = result + sqrt((double)counter);
}
printf("%lf\n", result);
return 0;
}
#!/bin/bash # Jacek Radajewski jacek@usq.edu.au # 21/08/1998 export SIGMASQRT=/home/staff/jacek/beowulf/HOWTO/example1/sigmasqrt # $OUTPUT must be a named pipe # mkfifo output export OUTPUT=/home/staff/jacek/beowulf/HOWTO/example1/output rsh scilab01 $SIGMASQRT 1 50000000 > $OUTPUT < /dev/null& rsh scilab02 $SIGMASQRT 50000001 100000000 > $OUTPUT < /dev/null& rsh scilab03 $SIGMASQRT 100000001 150000000 > $OUTPUT < /dev/null& rsh scilab04 $SIGMASQRT 150000001 200000000 > $OUTPUT < /dev/null& rsh scilab05 $SIGMASQRT 200000001 250000000 > $OUTPUT < /dev/null& rsh scilab06 $SIGMASQRT 250000001 300000000 > $OUTPUT < /dev/null& rsh scilab07 $SIGMASQRT 300000001 350000000 > $OUTPUT < /dev/null& rsh scilab08 $SIGMASQRT 350000001 400000000 > $OUTPUT < /dev/null& rsh scilab09 $SIGMASQRT 400000001 450000000 > $OUTPUT < /dev/null& rsh scilab10 $SIGMASQRT 450000001 500000000 > $OUTPUT < /dev/null& rsh scilab11 $SIGMASQRT 500000001 550000000 > $OUTPUT < /dev/null& rsh scilab12 $SIGMASQRT 550000001 600000000 > $OUTPUT < /dev/null& rsh scilab13 $SIGMASQRT 600000001 650000000 > $OUTPUT < /dev/null& rsh scilab14 $SIGMASQRT 650000001 700000000 > $OUTPUT < /dev/null& rsh scilab15 $SIGMASQRT 700000001 750000000 > $OUTPUT < /dev/null& rsh scilab16 $SIGMASQRT 750000001 800000000 > $OUTPUT < /dev/null& rsh scilab17 $SIGMASQRT 800000001 850000000 > $OUTPUT < /dev/null& rsh scilab18 $SIGMASQRT 850000001 900000000 > $OUTPUT < /dev/null& rsh scilab19 $SIGMASQRT 900000001 950000000 > $OUTPUT < /dev/null& rsh scilab20 $SIGMASQRT 950000001 1000000000 > $OUTPUT < /dev/null&
doc-linux-pl-2002.06.14.orig/html/BootPrompt-HOWTO.pl.html 0100664 0001750 0001750 00000242312 06770264140 021652 0 ustar coven coven
/pub/Linux/sunsite/docs/HOWTO.
Jądro ma ograniczoną możliwość przyjmowania informacji podczas startu w formie poleceń wydawanych z wiersza poleceń, podobnych do listy argumentów jakie podałbyś do zwykłego programu. W ogólności stosuje się to do przekazywania pewnych informacji do jądra na temat przyłączonych urządzeń, których ono samo nie mogłoby wykryć, lub w celu zmiany ustawień, tych urządzeń.
Jeśli skopiujesz jądro bezpośrednio na dyskietkę,
(np. cp zImage dev/fd0) wtedy nie masz możliwosci przekazania
żadnych argumentów do tego jądra. Dlatego większość użytkowników
Linux-a używa specjalnych programów takich jak LILO czy
loadlin służących do przekazywania tych argumentów do
jądra i do ładowania go.
WAŻNA UWAGA DLA UŻYTKOWNIKÓW MODUŁÓW: Argumenty podczas
ładowania jądra odnoszą się zwykle do sterowników sprzętowych
wkompilowanych w jądro na stałe. Nie odnoszą one żadnego
skutku w stosunku do sterowników łądownych jako moduły. Większość
dystrybucji używa modułów. Jeśli nie jesteś pewien, to spójrz do
man depmod i man nmodprobe jak również do
/etc/conf/modules.
Bieżąca wersja tego dokumentu dotyczy jądra do wersji 2.0.33 włącznie oraz wersji rozwojowych do 2.1.84.
Dokument ten został pierwotnie napisany i opiekuje się nim:
Paul Gortmaker, gpg109@rsphy1.anu.edu.au
***** UWAGA !!!!! *****
Argumenty jądra nie dotyczące urządzeń i portów specyficznych dla maszyn
typu i386 (szczególnie Atari/Amiga) nie są obecnie udokumentowane.
***********************
Dokument ten nie jest idealny i najlepszy. Aczkolwiek jest on przypuszczalnie najświeższym, i zawiera najświeższe dane, które będziesz w stanie znaleźć. Nikt nie jest odpowiedzialny za to co stanie się z twoimi urządzeniami poza tobą. Jeśli twój komputer zacznie się palić (... co jest raczej niemożliwe!) ja nie biorę odpowiedzialności, tzn: AUTOR NIE JEST ODPOWIEDZIALNY ZA JAKIEKOLWIEK ZNISZCZENIA POWSTAŁE NA SKUTEK PODJĘTYCH DZIAŁAŃ NA PODSTAWIE TEGO DOKUMENTU. (Tłumacz też nie ; )) )
Dokument ten jest chroniony prawami autorskimi (C) 1995-1998 Paula Gortmakera.
Dokument ten może być kopiowany zgodnie z warunkami licencji GNU,
v2, która jest tu zawarta poprzez odwołanie się do niej. Więcej na
temat szczegółów znajdziesz w pliku linux/COPYING, który
jest zawarty w dystrybucji źródeł jądra.
Jeśli zamierzasz wydać ten dokument jako pracę drukowaną, skontaktuj się z autorem, a on postara się sprawdzić czy masz najświeższe dostępne informacje. W przeszłości publikowane były przestarzałe dokumenty, które powodowały zasypywanie programistów pytaniami, które zostały już rozwiązane w najnowszych dokumentach.
Najświeższą dokumentacją będzie zawsze wersja źródłowa jądra. Ale
poczekaj, nie uciekaj ! Nie musisz znać żadnego języka
programowania, aby czytać komentarze zawarte w źródłach. Na
przykład jeśli szukasz jakie argumenty mogą być przekazane do
sterownika AHA1542 SCSI, zajrzyj do katalogu
linux/drivers/scsi i pliku aha1542.c - a w
pierwszych 100 liniach znajdziesz czysty tekst w języku
angielskim (niestety, ale nie ma fizycznej możliwosci na
tłumaczenie tych tekstów) opisujący argumenty, których szukasz.
Następnymi najlepszymi dokumentami będą te, dystrybuowane ze
źródłami jądra. Jest tam ich teraz nawet całkiem sporo, a
większość z nich znajduje się w podkatalogu Documentation
i jego dalszych podkatalogach. Źródła jądra znajdują się zwykle w
katalogu /usr/src/linux. Czasami można znaleźć pliki
README.xx w odpowiednich podkatalogach.
Jeśli już wiesz jakich parametrów chcesz używać i chcesz teraz
wiedzieć jak przekazać je do jądra to spójrz na dokumentację,
która przychodzi razem z oprogramowaniem, którego będziesz używał,
aby załadować jądro (najczęściej jest to LILO lub
loadlin). Krótki przegląd znajduje się poniżej, ale nie
zastępuje on dokumentacji dostarczanej wraz z danym oprogramowaniem.
Jeśli masz jakieś pytania dotyczące przekazywania parametrów do jądra, PRZECZYTAJ najpierw ten dokument. Jeśli ten i związane z nim wymienione wcześniej dokumenty nie odpowiedzą na twoje pytania wtedy możesz spróbować poczytać grupy dyskusyjne. Jednak zanim zaczniesz na ślepo wysyłać listy najpierw poczytaj przez kilka dni daną grupę, bo może akurat ktoś już zaczął ten temat, a może nawet twoje pytanie zalicza się do często zadawanych pytań (Frequently Asked Questions - FAQ). Szybkie przejrzenie jakiegoś dokumentu FAQ może być dobrym pomysłem zanim zaczniesz wysyłać pytania do grup dyskusyjnych.
Ogólne pytania jak skonfigurować swój system kieruj na grupę pl.comp.os.linux. Przestrzegaj poprzedniego paragrafu oraz nie wysyłaj pytań do wielu grup na raz ponieważ z reguły czytają je te same osoby.
Nowe wersje będą się znajdować pod adresem
ftp.icm.edu.pl w
katalogu /pub/Linux/sunsite/docs/HOWTO.
Będą one sukcesywnie uaktualniane jak tylko będą się pojawiać nowe
sterowniki bądź informacje.
Dokument ten został stworzony przy pomocy systemu SGML, który został przygotowany specjalnie dla projektu Linux HOWTO. Dzięki temu dostępne są różne wersje tego dokumentu takie jak: postscript, dvi, ascii, html a wkrótce także Texinfo.
Wszystkie te wersje są dostępne na ftp.icm.edu.pl w
katalogu /pub/Linux/sunsite/doc/HOWTO.
Zalecałbym przeglądanie tego dokumentu jako html lub postscript,
gdyż jest tu wiele odwołań, których brakuje w zwykłym tekście.
Ta sekcja podaje kilka przykładów oprogramowania, które może być użyte do przekazywania argumentów do jądra i do ładowania go. Podaje także sposób interpretacji argumentów, jakie są na nie ograniczenia i jak są filtrowane dla odpowiedniego urządzenia. Ważne jest aby NIE używać odstępów w argumentach, tylko pomiędzy nimi. Wartości jakie mają być przekazane mają być oddzielone przecinkami bez żadnych odstępów. Spójrz na następujący przykład:
ether=9,0x300,0xd0000,0xd4000,eth0 root=/dev/hda1 *DOBRZE*
ether = 9, 0x300, 0xd0000, 0xd4000, eth0 root = /dev/hda1 *ŹLE*
Najczęściej używanym programem służącym do ładowania Linux-a jest
LILO (LInux LOader), napisany przez Wernera Amesbergera. Ma możliwość
ładowania różnych jąder (jak i systemów) a swoją konfigurację
zapisuje w pliku tekstowym. Większość dystrybucji jest
rozprowadzana z LILO jako domyślnym programem ładującym. LILO umie
załadować DOS-a, OS/2, Linux-a, FreeBSD i wiele innych systemów
bez żadnych trudności i jest dość elastyczny. W typowej
konfiguracji LILO zatrzyma się krótko po włączeniu komputera i
wyświetli LILO:. Przez następnych kilka sekund będzie
czekać na podanie ewentualnych argumentów a następnie zacznie
ładować domyślny system. Typowymi etykietami opisującymi systemy i
używanymi w LILO są linux, backup, linux-old, old, dos, msdos.
Jeśli chcesz wpisać jakieś argumenty, wpisujesz je zaraz po nazwie
systemu jaki chcesz załadować, tak jak w przykładzie poniżej:
LILO: linux root=/dev/hda1
Bardzo przydatne jest polecenie append= jeśli ktoś chce
dodać jakiś argument na stałe. Tak więc aby nie wpisywać go za
każdym razem wystarczy po prostu dodać linijkę
append = "xxx=yyy" do plik /etc/lilo.conf. Może być ona
dodana albo na początku pliku, wtedy będzie się odnosić do wszystkich
sekcji, albo w danej sekcji image, tak aby odnosiła się
tylko do niej. Zajrzyj do dokumentacji LILO aby dowiedzieć się
więcej szczegółów.
Innym często używanym programem do ładowania Linux-a jest loadlin.exe. Jest to DOS-owy program, który potrafi załadować jądro (wraz z argumentami startowymi) z wiersza poleceń DOS-a zakładając, że są dostępne pewne zasoby. Jest to dobre rozwiązanie dla tych, którzy używają DOS-a i chcą się z niego szybko (lub niekoniecznie) przełączyć na Linux-a.
Jest on także bardzo przydatny jeśli masz jakieś urządzenie, które
aby było przydatne do użycia musi zostać ustawione przez sterownik
DOS-owy. Dobrym przykładem mogą być tutaj karty kompatybilne z
SoundBlaster, które muszą mieć ustawione kilka rejestrów przez
sterownik DOS-owy aby ustawić je w tryb kompatybilności z
SoundBlaster. Ładowanie DOS-a wraz ze sterownikiem, a potem
ładowanie Linux-a z wiersza poleceń DOS-a programem
LOADLIN.EXE zapobiega zresetowaniu
karty, co miałoby miejsce gdybyśmy zresetowali komputer, aby
uruchomić Linux-a. W ten sposób karta zostaje w trybie
kompatybilności z SoundBlaster i jest przydatna do użycia pod
Linux-em.
Są także inne programy służące do ładowania Linux-a. Aby poznać
kompletną listę takich programów zajrzyj do swojego lokalnego
serwera ftp do katalogu system/Linux-boot.
Jest kilka argumentów startowych, których wartości domyślne są
zapisane w różnych bajtach w samym jądrze. Jest narzędzie zwane
rdev zainstalowane na większości systemów, które wie
gdzie te bajty się znajdują i jak je zmienić. Potrafi ono także
zmienić różne rzeczy, które nie mają swoich argumentów startowych,
jak na przykład domyślny tryb wyświetlania.
Narzędzie rdev może być zwykle zastąpione przez swapdev,
ramsize, vidmode i rootflags. Jest to pięć rzeczy,
które rdev potrafi zmienić: główny system plików (katalog "/"),
urządzenie swap, parametry RAM-dysku, domyślny tryb graficzny i
ustawienia głównego systemu plików jako tylko-do-odczytu bądź w
tryb odczytu-zapisu.
Więcej informacji na temat rdev można znaleźć pisząc w
wierszu poleceń rdev -h bądź w podręczniku systemowym
man.
Większość argumentów startowych ma następującą składnię:
nazwa=[wartość_1][,wartość_2]...[,wartość_11]
gdzie "nazwa" jest unikalnym słowem kluczowym identyfikującym część jądra, do którego odnoszą się podane wartości. Większa ilość argumentów startowych to lista powyższych wywołań oddzielonych od siebie odstępem. Zauważ, że maksymalna ilość wartości to 11. Jądro rzeczywiście rozpoznaje tylko 11 elementów oddzielonych przecinkami przy danym słowie kluczowym. (Chociaż możesz użyć ponownie tego samego słowa kluczowego z dodatkowymi 11 argumentami w jakichś niezwykle skomplikowanych sytuacjach, zakładając, że dane funkcja ustawiająca (patrz niżej) to dopuszcza). Zwróć uwagę na fakt, iż jądro dzieli tę listę na maksimum 10 argumentów typu integer, i następujący po nich łańcuch, więc tak naprawdę nie możesz podać 11 argumentów typu integer o ile nie przerobisz sterownika tak, aby sam sobie zamienił ten 11 element na liczbę typu integer.
Wiekszość sortowania odbywa się w linux/init/main.c.
Najpierw jądro sprawdza czy argument jest jednym ze specjalnych
argumentów: root=, ro, rw, debug. Znaczenie tych
parametrów jest opisane dalej w tym dokumencie.
Następnie sprawdza listę argumentów zawartych w tablicy
bootsetups czy podany łańcuch nie został przypisany
którejś z funkcji ustawiającej konkretne urządzenie bądź część
jądra. Jeśli przekazałeś do jądra linię xxx=3,4,5,6,yyy
wtedy jądro przeszukałoby tablicę bootsetups aby zobaczyć
czy xxx jest tam wymienione. Jeśli byłoby wymienione wtedy
uruchomiłoby funkcję związaną z xxx i przekazałoby jej argumenty
typu integer: 3,4,5,6 oraz ostatni łańcuch yyy.
Wszystko w formie "xxx=yyy", co nie jest funkcją ustawiającą
opisaną powyżej jest interpretowane jako zmienna środowiskowa,
mająca być ustawiona. (bezużytecznym?) Przykładem mogłoby być
użycie TERM=vt100 jako argumentu startowego.
Wszystkie pozostałe argumenty startowe, które nie zostały
rozpoznane jako funkcje ustawiające, czy zmienne środowiskowe są
przekazywane do procesu o numerze 1, którym zazwyczaj jest
init. Najczęstszym przekazywanym argumentem do programu
init jest słowo single oznaczające uruchomienie
systemu w trybie jednego użytkownika nie uruchamiając demonów,
które zwykle są uruchamiane. Sprawdź w podręczniku man jaką
masz wersję programu "init" i jakie argumenty możesz mu przekazać.
Są to argumenty nie dotyczące żadnych konkretnych sterowników czy urządzeń peryferyjnych. Odnoszą się natomiast do wewnętrznych parametrów jądra, takich jak: obsługa pamięci, obsługa RAM-dysku, obsługa głównego systemu plików itd.
Następujące argumenty mają wpływ na to jak jądro będzie obsługiwać główny system plików:
Poprzez ten argument możemy przekazać do jądra które urządzenie ma
być użyte jako główny system plików. Domyślnym ustawieniem jest
tutaj urządzenie, na którym był główny system plików, podczas
tworzenia (kompilacji) jądra. Na przykład jeśli dane jądro
było utworzone na systemie, w którym główny system plików był na
urządzeniu /dev/hda1 wtedy domyślnym ustawieniem będzie
"/dev/hda1". Aby to zmienić i ustawić drugą stację dyskietek jako
główny system plików trzeba użyć argumentu root= w
następujący sposób:
root=/dev/fd1
Główny system plików może być zamontowany na następujących urządzeniach:
(1) /dev/hdaN do /dev/hddN, gdzie N jest numerem partycji na dysku
pierwszym, drugim, trzecim lub czwartym kompatybilnym z ST-506.
(2) /dev/sdaN do /dev/sdeN, gdzie N jest numerem partycji na dysku
pierwszym, drugim, trzecim, czwartym lub piątym kompatybilnym z SCSI.
(3) /dev/xdaN do /dev/xdbN, gdzie N jest numerem partycji na dysku
pierwszym lub drugim kompatybilnym z XT.
(4) /dev/fdN, gdzie N jest numerem stacji dyskietek (N=0 - A:, N=1 - B:)
(5) /dev/nfs, co raczej nie jest urządzeniem a argumentem, który mówi,
żeby zamontować główny system plików poprzez sieć.
Inna znacznie bardziej kłopotliwa i skomplikowana metoda
przekazania, na którym urządzeniu ma być główny system plików jest
podanie liczby głównej i pobocznej (np. /dev/sda3 to liczba główna - 8,
liczba poboczna - 3 a więc mógłbyś napisać root=0x803.
To jest jeden z kilku argumentów startowych, który ma zapisaną
domyślną wartość w jądrze, i który przez to może być zmieniany za
pomocą rdev.
Kiedy jądro ładuje system, potrzebuje głównego systemu plików, aby
odczytać z niego podstawowe informacje. To jest główny system
plików montowany podczas ładowania. Chociaż, jeśli system ten
jest zamontowany z możliwoscią zapisu, nie możesz dokładnie
sprawdzić jego integralności (poprawności) jeśli akurat trwa
zapis pliku. Argument ro przekazuje do jądra
informację, aby zamontować główny system plików jako
tylko-do-odczytu, tak więc jakikolwiek program sprawdzający
poprawność systemu plików może założyć, że nie ma żadnych częściowo
zapisanych plików podczas sprawdzania. Żaden program ani proces
nie może zapisać niczego do pliku dopóki system plików nie
zostanie przemontowany w tryb odczytu-zapisu (read-write).
To jest jeden z kilku argumentów startowych, który ma zapisaną
domyślną wartość w jądrze, i który przez to może być zmieniany za
pomocą rdev.
To jest dokładną odwrotnością poprzedniego argumentu, czyli
przekazuje do jądra, aby zamontować główny system plików z
możliwoscią zapisu. Tak czy inaczej ostatecznie chcemy mieć
możliwość zapisu na głównym systemie plików. Ale pamiętaj, aby nie
uruchamiać żadnych programów testujących (typu fsck)
system plików kiedy jest on zamontowany z możliwością zapisu.
Ta sama wartość zapisana w jądrze wspomniana wyżej jest używana do
tego argumentu, dostępna przez rdev.
Następujące argumenty są związane z tym jak jądro obsługuje RAM-dysk, który jest zwykle używany do bootstrappingu podczas instalacji lub na maszynach ze sterownikami w postaci modułów, które muszą być zainstalowane aby mieć dostęp do głównego systemu plików.
Aby pozwolić obrazowi jądra na przebywanie na dyskietce wraz ze
skompresowanym obrazem RAM-dysku dodany został argument
`ramdisk_start=<offset>'. Jądro nie może być zawarte w
skompresowanym obrazie głównego systemu plików na RAM-dysku,
ponieważ musi ono być zapisane poczynając od bloku 0, tak aby BIOS
mógł załadować bootsektor i wtedy jądro może zacząć się
ładować.
Uwaga: Jeśli używasz rozpakowanego obrazu RAM-dysku, wtedy jądro może być częścią obrazu głównego systemu plików, który jest ładowany do RAM-dysku i system może wystartować z tej dyskietki, albo obraz głównego systemu plików i jądro mogą być dwiema oddzielnymi dyskietkami, tak jak w przypadku skompresowanego obrazu.
Jeśli używasz dwóch dyskietek (bootdysk z jądrem i rootdysk z
obraze RAM-dysku) wtedy RAM-dysk zaczyna się od bloku 0 i jako
offset w naszym przykładzie trzeba wpisać 0. Ponieważ
jest to domyślna wartość nie musisz w tym przypadku używać tego
argumentu.
Ten argument informuje jądro czy ma ono ładować RAM-dysk czy nie.
Pisząc load_ramdisk=1 informujesz jądro, aby załadować
zawartość dyskietki do RAM-dysku. Domyślną wartością jest 0, czyli
jądro nie ma ładować zawartości dyskietki do RAM-dysku.
Dokładny opis argumentów startowych dotyczących RAM-dysku
znajdziesz w linux/Documentation/ramdiskt.txt. Jest tam
także opisane w jaki sposób można zapisać w jądrze wartość tego
parametru poleceniem rdev.
Ten argument informuje jądro czy wypisywać prośbę o włożenie
dyskietki z zawartością RAM-dysku czy nie. W konfiguracji z jedną
dyskietką zawartość RAM-dysku jest na tej samej dyskietce co jądro,
które się właśnie przestało ładować, a więc prośba nie jest
potrzebna. W tym wypadku można użyć prompt_ramdisk=0.
W konfiguracji z dwiema dyskietkami potrzebujesz czasu na zamianę
dyskietek a więc należy użyć prompt_ramdisk=1. Ponieważ
to jest wartość domyślna nie trzeba tego pisać.
(Uwaga historyczna: Co sprytniejsi używali opcji LILO vga=ask,
aby na chwilę przerwać start systemu i zamienić dyskietki.)
Dokładny opis argumentów startowych dotyczących RAM-dysku
znajdziesz w linux/Documentation/ramdiskt.txt. Jest tam
także opisane w jaki sposób można zapisać w jądrze wartość tego
parametru poleceniem rdev.
Ponieważ prawdą jest, że zawartość RAM-dysku rośnie dynamicznie wraz z coraz nowszymi wersjami systemu, jest górne ograniczenie jego rozmiaru, tak aby nie zabrał całej pamięci RAM i nie zostawił nas na lodzie. Domyślną wartością jest 4096 (czyli 4MB), która powinna być wystarczająco duża dla większości potrzeb. Możesz zmienić tę wartość zależnie od potrzeb na mniejszą lub większą przy pomocy tego argumentu.
Dokładny opis argumentów startowych dotyczących RAM-dysku
znajdziesz w linux/Documentation/ramdiskt.txt. Jest tam
także opisane w jaki sposób można zapisać w jądrze wartość tego
parametru poleceniem rdev.
(UWAGA: Ten argument jest przestarzały i nie powinien być używany z jądrami w wersji wyższej niż 1.3.47. Argumenty, których należy używać zostały opisane powyżej.)
Argument ten określa rozmiar RAM-dysku w kB. Na przykład jeśli ktoś chciałby mieć główny system plików na dyskietce 1.44MB załadowanej do RAM-dysku użyłby następującego argumentu:
ramdisk=1440
To jest jeden z kilku argumentów startowych, który ma zapisaną
domyślną wartość w jądrze, i który przez to może być zmieniany
za pomocą rdev.
Jądra w wersji 2.x i wyższej mają możliwość wykonywania
/linuxrc z zawartości RAM-dysku. Możliwość ta jest zwykle
wykorzystywana, aby umożliwić ładowanie modułów potrzebnych do
zamontowania rzeczywistego głównego systemu plików (np. załaduj
sterownik SCSI zapisany w RAM-dysku, a potem zamontuj rzeczywisty
główny system plików znajdujący się na dysku SCSI.)
Właściwy argument "noinitrd" określa co dzieje się z danymi initrd
po tym jak jądro się załadowało. Jeśli podamy ten argument dane te
staną się dostępne poprzez urządzenie specjalne /dev/initrd,
które może być czytane zanim pamięć RAM zostanie przywrócona systemowi,
zamiast być zapisanymi do RAM-dysku. Odnośnie szczegółów dotyczących
używania startowego RAM-dysku, przeczytaj
linux/Documentation/initrd.txt. Najnowsza wersja LILO
oraz loadlin.exe powinna mieć także dodatkowe informacje
na ten temat.
Następujące argumenty określają jak Linux wykrywa i obsługuje pamięć fizyczną i wirtualną w twoim systemie.
Ten argument ma dwa przeznaczenia: Pierwotnym założeniem było
określenie ilości zainstalowanej pamięci (lub wartość mniejsza
jeśli chciałeś użyć mniej pamięci niż masz w rzeczywistości).
Drugim (prawie wcale nie używanym) przeznaczeniem jest podanie
mem=nopentium co informuje jądro, aby nie używało stron
pamięci o rozmiarze 4MB.
Oryginalne odwołanie do BIOS-u w specyfikacji PC, które zwraca ilość zainstalowanej pamięci zostało tak zaprojektowane, że było w stanie zwrócić co najwyżej 64MB. (Tak! Następny przykład na brak patrzenia w przyszłość, zupełnie tak samo jak w przypadku ilości cylindrów dysku ograniczonej do 1024... eh). Linux używa tego odwołania BIOS-u podczas startu, aby określić ilość zainstalowanej pamięci. Jeśli masz więcej niż 64MB RAM-u, możesz użyć tego argumentu, aby poinformować jądro, ile rzeczywiście masz pamięci RAM. Oto cytat Linusa na temat jak używać tego argumentu:
"Jądro zaakceptuje jakikolwiek argument "mem=xx" jaki mu podasz, a
jeśli stwierdzi, że je okłamałeś, wywali się z wielkim hukiem wcześniej
czy później. Argument ten określa najwyższy dostępny adres pamięci
RAM, więc mem=0x1000000 znaczy, że masz 16MB RAM-u na
przykład. Dla maszyny z 96MB RAM-u byłoby to: mem=0x6000000.
UWAGA UWAGA UWAGA: niektóre maszyny mogą używać najwyższych adresów do cache'owania BIOS-u czy czegoś podobnego, więc mógłbyś nie mieć pełnych 96MB RAM-u dostępnego. I na odwrót: niektóre procesory odwzorowują pamięć fizyczną, która jest zakryta przez BIOS tuż za najwyższym dostępnym adresem, tak więc ten najwyższy adres mógłby być np: 96MB + 384kB. Jeśli poinformujesz Linux-a, że ma więcej pamięci niż w rzeczywistości, będą się dziać złe rzeczy: może nie od razu, ale kiedyś na pewno."
Zauważ, że wartość tego argumentu nie musi być podana szesnastkowo
a przyrostki "k" i "M" (wielkość liter nie ważna) mogą być
użyte do określenia odpowiednio kilobajtów i Megabajtów. ("k"
spowoduje przesunięcie 10 bitowe podanej wartości, a "M" - 20
bitowe) Powyższe ostrzeżenie jest wciąż ważne, ponieważ maszyna z
96MB pamięci może działać z argumentem mem=97920k ale
może nie działać z mem=98304k lub mem=96M.
Argument ten pozwala użytkownikowi podać kilka parametrów pamięci wirtualnej, które są związane z pamięcią swap. Można tu podać następujące parametry:
MAX_PAGE_AGE
PAGE_ADVANCE
PAGE_DECLINE
PAGE_INITIAL_AGE
AGE_CLUSTER_FRACT
AGE_CLUSTER_MIN
PAGEOUT_WEIGHT
BUFFEROUT_WEIGHT
Zainteresowani hackerzy proszeni są o przeczytanie linux/mm/swap.c
a także /proc/sys/vm.
Podobnie do argumentu "swap=" ten pozwala użytkownikowi podać kilka parametrów związanych z obsługą pamięci buforowej. Akceptuje następujące parametry:
MAX_BUFF_AGE
BUFF_ADVANCE
BUFF_DECLINE
BUFF_INITIAL_AGE
BUFFEROUT_WEIGHT
BUFFERMEM_GRACE
Zainteresowani hackerzy proszeni są o przeczytanie linux/mm/swap.c
a także /proc/sys/vm.
Linux obsługuje bezdyskowe stacje robocze, które mają zamontowany
główny system plików jako NFS (Network File System). Argumenty te
używane są, aby przekazać systemowi z jakiego komputera ma sobie
zamontować główny system plików. Zauważ także, że wymagany jest w
tym przypadku argument root=/dev/nfs. Szczegóły na temat
używania głównego systemu plików zamontowanego jako NFS znajdują
się w pliku linux/Documentation/nfsroot.txt. Powinieneś
go przeczytać, gdyż ten paragraf jest tylko streszczeniem tamtego
pliku.
Argument ten informuje jądro jakiej maszyny użyć, jakiego katalogu na niej i jakich opcji NFS podczas montowania głównego systemu plików. Argument ten ma następującą postać:
nfsroot=[<serwer-ip>:]<gł.sys.pl.>[,<opcje-nfs>]
Jeśli argument nfsroot nie jest podany wtedy użyte
zostanie "/tftpboot/%s". Kolejne opcje tego argumentu
oznaczają:
<serwer-ip> - Określa adres IP serwera NFS. Jeśli to pole nie jest podane, użyta zostanie wartość zmiennej nfsaddrs (patrz poniżej). Jedną z możliwości użycia tego parametru jest na przykład pozwolenie na użycie różnych serwerów dla RARP i NFS. Zwykle możesz zostawić ten parametr pusty.
<gł.sys.pl.> - Nazwa katalogu na serwerze, który ma być zamontowany jako główny system plików. Jeśli użyty jest znak "%s", zostanie on zamieniony na znakową reprezentację numeru IP klienta.
<opcje-nfs> - Standardowe opcje NFS. Wszystkie opcje są oddzielone od siebie przecinkami. Jeśli pole "opcje-nfs" nie jest podane, zostaną użyte następujące wartości domyślne:
port = podany przez demona "portmap" z serwera
rsize = 1024
wsize = 1024
timeo = 7
retrans = 3
acregmin = 3
acregmax = 60
acdirmin = 30
acdirmax = 60
flags = hard, nointr, noposix, cto, ac
Ten argument ustawia różne adresy interfejsu sieciowego, które są wymagane do komunikacji przez sieć. Jeśli argument ten nie jest podany, wtedy jądro próbuje użyć protokołów RARP bądź BOOTP, aby znaleźć te parametry. Argument ten ma następująca postać:
nfsaddrs=<mój-ip>:<serw-ip>:<r-ip>:<netmask>:<nazwa>:<urz>:<auto>
<mój-ip> - Adres IP klienta. Jeśli jest on pusty, zostanie wykryty przy pomocy RARP albo BOOTP. Jaki protokół jest używany, zależy od tego co zostało udostępnione podczas kompilacji jądra i od parametru <auto>. Jeśli parametr ten nie jest pusty, ani RARP ani BOOTP nie zostanie użyty.
<serw-ip> - Adres IP serwera NFS. Jeśli RARP został użyty do wykrycia adresu klienta i parametr ten nie jest pusty akceptowane będą odpowiedzi tylko z wyspecyfikowanego serwera. Aby użyć różnych serwerów RARP i NFS, podaj swój serwer RARP tutaj (lub zostaw pusty), a serwer NFS podaj w argumencie nfsroot (patrz wyżej). Jeśli parametr ten jest pusty, użyty jest adres serwera, który odpowiedział na pytanie RARP lub BOOTP.
<r-ip> - Adres IP rutera jeśli serwer jest w innej podsieci. Jeśli opcja ta jest pusta żaden ruter nie jest używany i przyjmowane jest, że serwer znajduje się w sieci lokalnej, o ile nie odebrano wartości poprzez BOOTP.
<netmask> - Maska sieci dla lokalnego interfejsu sieciowego. Jeśli opcja ta jest pusta, maska jest wyprowadzana z numeru IP klienta, o ile nie otrzymano wartości poprzez BOOTP.
<nazwa> - Nazwa klienta. Jeśli opcja ta jest pusta, adres IP klienta używany jest w notacji znakowej lub wartość otrzymana poprzez BOOTP.
<urz> - Nazwa urządzenia sieciowego, które ma zostać użyte. Jeśli opcja ta jest pusta, wszystkie urządzenia są używane do żądań RARP, a pierwsze znalezione dla BOOTP. Dla NFS używane jest to urządzenie, dla którego zostały otrzymane odpowiedzi RARP lub BOOTP. Jeśli masz tylko jedno urządzenie możesz spokojnie zostawić tę opcję pustą.
<auto> - Metoda, która ma być użyta do autokonfiguracji. Jeśli jest to "rarp" lub "bootp" używany jest podany protokół. Jeśli wartością jest "both" lub opcja ta jest pusta, oba protokoły są używane jeśli tylko są wkompilowane w jądrze. Używając "none" informujesz, aby nie używać autokonfiguracji. W tym przypadku musisz podać wszystkie potrzebne wartości poprzednich pól.
Parametr <auto> może pojawić się samotnie jako wartość argumentu "nfsaddrs" (bez tych wszystkich ":" znaków przedtem) wtedy używana jest autokonfiguracja. Aczkolwiek wartość "none" nie jest dostępna w tym przypadku.
Te różne argumenty startowe pozwalają użytkownikowi ustawić pewne wewnętrzne parametry jądra.
Jądro podaje ważne (i mniej ważne) informacje do użytkownika
poprzez funkcję printk(). Jeśli informacja jest
rozpoznawana jako ważna, funkcja printk() umieści kopię
na bieżącej konsoli jak również przekaże ją do demona klogd
tak aby wiadomość ta została zapisana na dysk. Powód, dla którego
informacje te są wysyłane na konsolę jak i zapisywane na dysk jest
taki, że w pewnych nieszczęśliwych warunkach (np: awaria dysku)
informacje te mogą nie dotrzeć na dysk i zostałyby stracone.
Próg, wg. którego informacja jest uważana za ważną lub nie
ustawiany jest przez zmienną console_loglevel. Wartością
domyślną jest zapisywanie wszystkiego ważniejszego (o mniejszym
poziomie, a tym samym większym priorytecie) niż DEBUG
(poziom 7) na konsolę. (poziomy te zdefiniowane są w pliku
nagłówkowym kernel.h). Podanie argumentu startowego
debug ustawi poziom logowania na konsolę na 10, tak, że
wszystkie informacje z jądra pojawią się na konsoli.
Poziom logowania na konsolę może zwykle być ustawiony także
podczas normalnej pracy systemu poprzez opcję programu
klogd. Sprawdź w systemie pomocy "man" jak to zrobić.
Jądro standardowo po załadowaniu się uruchamia program "init",
który następnie zajmuje się przygotowaniem systemu dla użytkownika
poprzez uruchomienie programów getty, skryptów "rc" itp. Jądro
najpierw szuka /sbin/init, następnie /etc/init a
na końcu spróbuje użyć /bin/sh (możliwie w /etc/rc).
Jeśli na przykład twój program init popsuł się i nie jest możliwy
restart systemu, możesz użyć argumentu init=/bin/sh,
który spowoduje uruchomienie shell-a natychmiast po załadowaniu
jądra, umożliwiając ci zamianę popsutego programu na dobry.
Niektóre koprocesory i387 mają błędy, które pojawiają się jeśli używamy 32-bitowego trybu chronionego. Na przykład niektóre wczesne procesory ULSI-387 mogą powodować poważne zawieszenia podczas używania operacji zmiennoprzecinkowych, widocznie z powodu błędu w instrukcjach FRSAV/FRRESTOR. Użycie argumentu startowego "no387" spowoduje ignorowanie koprocesora przez Linux-a nawet jeśli go masz. Oczywiście musisz mieć wkompilowaną emulację koprocesora w jądrze! Może to być także przydatne jeśli masz jedną z tych naprawdę starych maszyn 386, które mogą używać 80287 FPU, a Linux nie umie tego używać.
Rodzina procesorów i386 (a co za tym idzie i nowsze) mają instrukcję "hlt", która informuje procesor, że nic się nie stanie dopóki jakieś zewnętrzne urządzenie (klawiatura, modem, dysk, itp.) nie zażąda jakiejś akcji. To pozwala na użycie trybu "low-power", który powoduje, że procesor siedzi jak zombi i czeka aż coś zażąda jakiejś akcji (zwykle poprzez przerwanie), co powoduje mniejsze zużycie prądu. Niektóre z wczesnych procesorów i486DX-100 miały problem z tą instrukcją, przez co nie mogły niezawodnie powrócić do trybu działania po użyciu tej instrukcji. Używając argumentu "no-hlt" informujesz Linux-a, aby po prostu robił sobie nieskończoną pętlę jeśli nie ma nic mądrzejszego do roboty, a nie zatrzymywał procesora jeśli nic się nie dzieje. To pozwala ludziom z tymi popsutymi procesorami używać Linux-a, chociaż lepiej, żeby spróbowali wymienić ten procesor.
Użycie tego argumentu startowego powoduje wyłączenie możliwości scrolowania, która powoduje utrudnienie użycia terminali Braille'a.
W nieprawdopodobnym przypadku paniki jądra (tj. wewnętrznego błędu,
który został wykryty przez jądro, i który jądro decyduje się uważać
na tyle poważnie, aby głośno jęknąć i wszystko zatrzymać) domyślnym
zachowaniem się jądra jest po prostu siedzieć i czekać aż ktoś
przyjdzie i zauważy informację o panice i zresetuje maszynę.
Aczkolwiek jeśli maszyna jest rzadko odwiedzana, sensowny jest
automatyczny reset. Na przykład używając "panic=30" podczas startu
informujemy jądro aby po 30 sekundach spróbowało zresetować
maszynę. Wartość 0 powoduje zachowanie domyślne.
Zauważ, że wartość ta może być także podana poprzez funkcję
sysctl wywołaną na interfejsie /proc/sys/kernel/panic.
Ci, którzy chcą ingerować w wewnętrzne działanie jądra, mogą podać
argument, który pozwala na określenie jak i gdzie jądro ma spędzać
cykle procesora, aby doprowadzić do maksymalnego wykorzystania
jego możliwości. Ten argument pozwala ustawić licznik przesunięć
podczas startu. Typowo ustawiony jest on na dwa. Możesz także
skompilować jądro z domyślnie ustawioną możliwością profilowania.
W każdym z tych przypadków potrzebujesz takiego narzędzia jak
readprofile.c, które umie używać /proc/profile.
Opcja ta kontroluje sposób w jaki Linux restartuje komputer
(typowo poprzez /sbin/init, który obsługuje kombinację
klawiszy Control-Alt-Delete). Domyślnym zachowaniem co do późnych
jąder jest tzw. "zimny" restart (tzn. pełen restart, wraz ze
sprawdzaniem pamięci przez BIOS itp.) zamiast "ciepłego" restartu
(tj. niepełen restart, bez testowania pamięci). Wartość domyślną
zmieniono na "zimny" ponieważ taki restart, w przeciwieństwie do
"ciepłego", wydaje się działać na tanim/popsutym sprzęcie. Aby
przywrócić dawne zachowanie (tj. "ciepły" restart) użyj
reboot=w albo właściwie jakiekolwiek słowo zaczynające się na
w zadziała.
Po co zawracać sobie głowę? Niektóre kontrolery dysków z własną pamięcią cache może wykrywać "ciepły" restart, i zapisywać wszystkie dane z pamięci cache na dysk. Podczas "zimnego" restartu, karta może zostać zrestartowana i wszystkie dane z cache'u zostaną stracone. Inni raportowali systemy, którym sprawdzanie pamięci zabierało dużo czasu czy dłuższy czas inicjalizacji BIOS-ów SCSI.
Argument ten jest używany do ochrony obszarów portów I/O przed przeszukiwaniem.
reserve=iobase,extent[,iobase,extent]...
W niektórych maszynach może być konieczne, aby powstrzymać sterowniki urządzeń przed automatyczną próbą wykrycią urządzenia w konkretnych obszarach. Może to być spowodowane źle zrobionymi urządzeniami, które powodują zawieszanie podczas startu (tak jak niektóre karty Ethernetowe), urządzeniami błędnie rozpoznanymi, urządzeniami, których stan został zmieniony podczas wcześniejszej próby wykrycia, albo po prostu tym, że nie chcesz aby jakieś urządzenie zostało wykryte.
Argument startowy reserve eliminuje te problemy przez
podanie obszaru adresów I/O, który nie ma być sprawdzany. Obszar
ten jest oznaczany w tablicy rejestracyjnej portów jądra tak jakby
jakieś urządzenie zostało już w tym obszarze wykryte (słowem
reserved). Zauważ, że ten proceder nie jest konieczny na
wszystkich maszynach. Tylko jeśli występuje problem lub sytuacja
wyjątkowa, wymagająca użycia tego argumentu.
Porty I/O w podanym obszarze są chronione przed próbą
automatycznego wykrywania, która używa funkcji check_region()
przed wykrywaniem na ślepo w pewnym regionie adresów I/O. Argument
ten wprowadzono, aby używać go kiedy jakiś sterownik wisi na
karcie NE2000 lub identyfikuje jakieś inne urządzenie jako swoje.
Poprawny sterownik nie powinien przeszukiwać zarezerwowanego
obszaru, o ile inny argument startowy nie poinformuje go wyraźnie,
że ma to zrobić. Wynika z tego, że argument reserve jest
najczęściej używany w konfiguracji z innymi argumentami
startowymi. Tak więc jeśli podasz jakiś obszar, aby chronić jakieś
urządzenie, musisz zwykle podać wyraźnie port tego urządzenia.
Większość sterowników ignoruje tablicę rejestracji portów jeśli
mają podany konkretny adres. Na przykład poniższa linia:
reserve=0x300,32 bla=0x300
0x300-0x31F.
Jako zwykły argument startowy argument reserve ma limit na ilość
parametrów (11), tak więc możesz podać tylko 5 obszarów
zarezerwowanych przez każdy argument reserve. Jeśli masz
powód, aby użyć więcej argumentów reserve możesz to zrobić.
Zauważ, że tak naprawdę to nie jest argument startowy. Jest to
opcja, która jest interpretowana przez LILO, a nie przez jądro,
tak jak wszystkie inne argumenty startowe. Jednak jej użycie stało się
tak popularne, że wymaga ona tutaj wzmianki. Można to także
ustawić przy pomocy rdev -v albo równoważnie vidmode w
pliku vmlinuz.
Argument ten pozwala na zmianę trybu wyświetlania poprzez BIOS
jeszcze przed załadowaniem jądra. Typowe tryby to 80x50, 132x44
itd. Najlepszym sposobem jest użycie tego argumentu w postaci
vga=ask. Wyświetli on wtedy listę dostępnych trybów i
będzie czekał na podanie jednego z nich. Później, jak już będziesz
znał numer trybu jaki chcesz używać możesz go wpisać zamiast słowa
"ask". Jeśli chcesz wiedzieć więcej zajrzyj do pliku
linux/Documentation/svga.txt, który przychodzi wraz ze
źródłami jądra.
Zauważ, że nowsze jądra (v2.1 i nowsze) mają kod ustawiania, który zmienia tryb video jako opcję, pokazaną jako Video mode selection support więc musisz włączyć tę opcję jeśli chcesz używać tej właściwości.
Sekcja ta zawiera opis argumentów startowych używanych do przekazywania informacji na temat dołączonych adapterów i urządzeń SCSI.
Sterowniki średniego poziomu obsługują takie rzeczy jak dyski, CD-ROM-y i taśmy bez wdawania się w szczegóły kontrolerów.
Każde urządzenie SCSI może mieć pewną ilość "pod-urządzeń" zawartych w nim. Najpopularniejszym przykładem może być tutaj jeden z nowych CD-ROM-ów SCSI, który obsługuje więcej niż jeden dysk na raz. Każdy z tych dysków jest adresowany numerem logicznej jednostki (ang. Logical Unit Number LUN) danego urządzenia. Ale większość urządzeń takich jak dyski twarde, taśmy to pojedyncze urządzenia a zatem ich numer logicznej jednostki będzie wynosił 0.
Problem powstaje przy pojedynczych źle wykonanych urządzeniach LUN. Niektóre źle zaprojektowane urządzenia SCSI (stare i niestety nowe) zawieszają się gdy przeszukuje się je w celu znalezienia urządzenia o numerze LUN różnym od zera, a czasami zawieszają także całą szynę SCSI.
Nowsze jądra mają argument startowy, który pozwala ci podać maksymalny numer urządzenia LUN, które będzie szukane. Domyślny numer szukanego urządzenia to 0, aby zapobiec problemowi opisanemu powyżej.
Aby podać ilość poszukiwanych urządzeń LUN przy starcie, podajemy jako argument startowy "max_scsi_luns=n", gdzie n jest liczbą pomiędzy 1 a 8. Aby zapobiec problemom opisanym wyżej podajemy n=1.
Niektóre konfiguracje startowe sterownika taśm SCSI można podać w następujący sposób:
st=rozm_buf[,próg_zap[,max_bufs]]
Pierwsze dwie liczby są podawane w kilobajtach (kB). Domyślną
wartością rozm_buf jest 32kB, a maksymalny rozmiar jaki
może być podany to śmieszne 16384kB.
próg_zap to wartość, przy osiągnięciu której zawartość
bufora zapisywana jest na taśmę. Domyślną wartością jest 30kB.
Maksymalna ilość buforów różni się w zależności od ilości wykrytych
napędów i ma wartość domyślną = 2. Przykładem może być:
st=32,30,2
Szczegóły można znaleźć w pliku README.st, który znajduje
się w podkatalogu scsi źródeł jądra.
Uwaga ogólna dla tej sekcji:
IOBASE - pierwszy port I/O, który jest używany przez
kontroler SCSI. Wartość ta podawana jest szesnastkowo, i zwykle
mieści się w przedziale od 0x200 do 0x3FF.
IRQ - przerwanie sprzętowe, na które jest skonfigurowana
karta. Odpowiednie wartości są zależne od konkretnej karty, ale
zwykle są to 5, 7, 9, 10, 11, 12 i 15. Pozostałe wartości są
zwykle używane przez popularne urządzenia takie jak dyski twarde
IDE, napędy dyskietek, porty szeregowe itp.
dma - kanał DMA (Direct Memory Access), którego używa karta.
W zasadzie odnosi się tylko do kart bus-mastering. Karty PCI i VLB
mają domyślnie tryb bus-mastering i nie wymagają kanału ISA DMA.
SCSI-ID - identyfikator, którego używa dany kontroler do
samoidentyfikacji na szynie SCSI. Tylko niektóre kontrolery
pozwalają na zmianę tej wartości, ponieważ większość ma ją
zapisaną wewnątrz siebie. Standardową wartością jest 7, ale
urządzenia Seagate i Future Domain TMC-950 używają 6.
PARITY - czy dany kontroler spodziewa się od przyłączonych
urządzeń kontroli parzystości przy wymianie wszystkich informacji.
1 oznacza włączenie sprawdzania parzystości, 0 je wyłącza. I znowu
nie wszystkie kontrolery pozwalają na zmianę tej wartości.
Numery aha odnoszą się do kart a numery aic do właściwego procesora SCSI na kartach tego typu, włączając kartę SoundBlaster-16 SCSI.
Podczas przeszukiwania tej karty, jądro próbuje znaleźć zainstalowany BIOS, a jeśli go nie ma, jądro nie znajdzie twojej karty. Wtedy musisz użyć argumentu startowego w postaci:
aha152x=IOBASE[,IRQ[,SCSI-ID[,powt[,parity]]]]
Zauważ, że jeśli sterownik został skompilowany z włączoną opcją debug, możliwa jest do podania także szósta wartość ustawiająca poziom śledzenia.
Wszystkie parametry zostały opisane powyżej, a parametr powt
pozwala na odłączenie lub ponowne podłączenie urządzenia jeśli
jego wartością nie jest 0. Przykładowe użycie może być takie:
aha152x=0x340,11,7,1
Zauważ, że parametry muszą być podane w odpowiedniej kolejności; to znaczy, że jeśli chcesz podać wartość parzystości musisz podać najpierw IOBASE, IRQ, SCSI-ID, i POWT.
To są karty serii aha154x. Seria kart aha1542 ma w sobie wbudowany kontroler stacji dyskietek i82077, a aha1540 - nie ma. Są to karty typu busmaster i mają parametry do ustawienia swojej "uczciwości", która jest używana do dzielenia się szyną z innymi urządzeniami. Odpowiedni argument startowy wygląda następująco:
aha1542=IOBASE[,buson,busoff[,dmaspeed]]
Możliwe wartości IOBASE to:
0x130, 0x134, 0x230, 0x234, 0x330, 0x334.
Klony oryginalnych kart mogą przyjmować inne wartości.
Wartości buson i busoff odnoszą się do liczby mikrosekund
przez jaką karta przejmuje kontrolę nad szyną ISA. Wartościami
domyślnymi są: buson - 11us, busoff - 4us, tak aby inne karty (jak
np. ISA LANCE Ethernet) miały szansę się dostać do szyny ISA.
Wartość dmaspeed odnosi się do prędkości (w MB/s), z jaką
działają transfery DMA (Direct Memory Access). Wartością domyślną
jest 5 MB/s. Nowe typy kart pozwalają na ustawienie tej
wartości programowo, starsze - poprzez zworki. Możesz podać
wartość do 10 MB/s zakładając, że twoja płyta główna to wytrzyma.
Eksperymentuj ostrożnie jeśli używasz wartości większych od 5 MB/s.
Kontrolery te przyjmują argument w postaci:
aic7xxx=extended,no_reset
Wartość extended, jeśli jest różna od zera, określa czy
tłumaczenie geometrii dużych dysków jest włączone czy nie.
Argument no_reset, jeśli jest różny od zera, informuje
sterownik, aby nie resetować szyny SCSI podczas ustawiania
kontrolera.
Sterownik AdvanSys przyjmuje do czterech adresów I/O, które będą
przeszukiwane w celu znalezienia karty SCSI AdvanSys. Zauważ, że
wartości te (jeśli są używane) nie wpływają w żaden sposób na
wykrywanie EISA czy PCI. Mają znaczenie tylko w przypadku kart ISA
i VLB. Dodatkowo, jeśli sterownik został skompilowany z włączoną
opcją śledzenia, poziom śledzenia może być ustawiony poprzez
dodanie parametru 0xdeb[0-F]. Znaki 0-F
pozwalają na ustawienie poziomu śledzenia na jeden z 16 poziomów.
W przeciwieństwie do innych adapterów SCSI, ten adapter używa przedrostków w postaci łańcuchów ASCII dla swoich wartości liczbowych. Oto lista jego parametrów:
IOPORT:ADDR - gdzie ADDR jest adresem I/O karty (zwykle bez ROM-u).
NORESET - Nie ma dodatkowych parametrów. Zapobiega zresetowaniu szyny SCSI podczas startu.
NOSYNC:X - X jest maską bitów, gdzie pierwsze siedem bitów odpowiada siedmiu możliwym sterownikom SCSI (bit 0 - urządzeniu #0, itd). Ustaw dany bit, aby zapobiec synchronicznym negocjacjom na tym urządzeniu. Standardowo synchroniczne negocjacje są wyłączone w sterowniku dla wszystkich urządzeń.
PERIOD:NS - NS jest minimalną ilością nanosekund w cyklu transferu danych SCSI. Domyślną wartością jest 500; inne akceptowane wartości to 250 i 1000.
DISCONNECT:X - X=0 - nie pozwalaj na odłączenia, X=1 - rób adaptacyjne odłączenia, X=2 - zawsze pozwalaj na odłączenia.
DEBUG:X - jeśli zdefiniowano symbol "DEBUGGING_ON" X jest maską
bitów, która ustawia różne sposoby wydruku śledzenia - odnośnie
konkretnych wartości zajrzyj do pliku /linux/drivers/scsi/in2000.h.
PROC:X - jeśli zdefiniowano symbol "PROC_INTERFACE", X jest maską
bitów, która określa jak działa interfejs /proc i co robi - odnośnie
konkretnych wartości zajrzyj do pliku /linux/drivers/scsi/in2000.h.
Oto niektóre przykładowe użycia tego argumentu:
in2000=ioport:0x220,noreset
in2000=period:250,disconnect:2,nosync:0x03
in2000=debug:0x1e
in2000=proc:3
W przeciwieństwie do innych sterowników ten nie przyjmuje parametrów I/O, IRQ, czy DMA. (Ponieważ AM53C974 jest urządzeniem PCI, nie ma potrzeby tego robić) W zamian za to, podawane parametry używane są do ustawiania trybów i prędkości transferu, które mają być używane pomiędzy adapterem a urządzeniem docelowym. Najlepiej opisać to przykładem:
AM53C974=7,2,8,15
Linijka ta zostałaby zinterpretowana następująco: Do komunikacji
pomiędzy kontrolerem o numerze SCSI-ID 7 a urządzeniem o numerze
SCSI-ID 2 mają być użyte: transfer - 8MHz w trybie synchronicznym
z maksimum 15-bajtowym offsetem. Więcej szczegółów znajduje
się w pliku linux/drivers/scsi/README.AM53C974.
W starszych wersjach jądra, sterownik buslogic akceptuje tylko
jeden parametr, który jest adresem I/O. Ma to być jedna z
następujących wartości:
0x130, 0x134, 0x230, 0x234, 0x330, 0x334.
W wersjach jądra 2.x, sterownik BusLogic przyjmuje wiele parametrów. (!!! Uważaj na wielkość liter w argumencie !!!). Następujący opis jest wzięty bezpośrednio ze sterownika Leonarda N. Zubkoffa ze źródeł jądra 2.x.
Argumentem startowym dla tego sterownika jest jego nazwa "BusLogic=" (jeszcze raz przypominam o zachowaniu wielkości liter), po której następuje lista parametrów liczbowych oddzielonych przecinkami oraz ewentualnie lista parametrów łańcuchowych także oddzielonych przecinkami. Większa ilość argumentów "BusLogic=" może być użyta w systemach z większą ilością adapterów BusLogic.
Pierwsza liczba określa adres I/O, pod którym znajduje się kontroler. Jeśli nie jest podana, wartością domyślną jest 0, co oznacza aby resztę wartości odnieść do pierwszego znalezionego kontrolera BusLogic. Jeśli podane zostaną jakiekolwiek parametry adresowe I/O wtedy standardowe przeszukiwanie nie odbywa się.
Druga liczba określa głębokość kolejki (Tagged Queue), która ma być użyta dla urządzenia docelowego, które obsługuje kolejkowanie. Głębokość kolejki jest ilością poleceń SCSI jaka jest możliwa do umieszczenia w kolejce poleceń do wykonania. Jeśli parametr ten nie jest podany, wartością domyślną jest 0, co oznacza użycie wartości wykrytej automatycznie opartej na całkowitej głębokości kolejki adaptera i numerze, typie, prędkości oraz możliwościach wykrytego urządzenia docelowego. Dla kontrolerów wymagających buforów bounce ISA, głębokość kolejki jest automatycznie ustawiana na BusLogic_TaggedQueueDepth_B, aby uniknąć nadmiernej prealokacji pamięci na bufory bounce DMA. Urządzenia docelowe, które nie obsługują kolejkowania, używają głębokości kolejki BusLogic_UntaggedQueueDepth.
Trzecia liczba określa czas stabilizacji szyny w sekundach. Jest to ilość czasu do odczekania pomiędzy twardym resetem kontrolera, który inicjuje reset szyny SCSI a wykonaniem polecenia SCSI. Jeśli nie jest ona podana, wartością domyślną jest 0, co oznacza użycie BusLogic_DefaultBusSettleTime.
Czwarta liczba określa opcje lokalne. Jeśli nie jest ona podana, wartością domyślną jest 0. Zauważ, że opcje lokalne odnoszą się tylko do specyficznych kontrolerów.
Piąta liczba określa opcje globalne. Jeśli nie jest ona podana, wartością domyślna jest 0. Zauważ, że opcje globalne odnoszą się do wszystkich kontrolerów.
Parametry łańcuchowe podaje się w celu kontrolowania kolejkowania, naprawy błędów i wyszukiwania kontrolera.
Parametr odnośnie kolejkowania zaczyna się od "TQ:" i pozwala na wyraźne podanie czy kolejkowanie jest dopuszczone na urządzeniu docelowym, które je obsługuje. Następujące opcje tego parametru są dozwolone:
TQ:Default - kolejkowanie będzie dopuszczone i oparte na firmowej wersji kontrolera BusLogic i na tym czy wartość głębokości kolejki pozwala na kolejkowanie poleceń.
TQ:Enable - kolejkowanie będzie dozwolone dla wszystkich urządzeń docelowych na danym kontrolerze zamazując wszelkie limity, które wynikałyby z ustawień firmowych.
TQ:Disable - kolejkowanie będzie niedozwolone dla wszystkich urządzeń docelowych na danym adapterze.
TQ:<Per-Target-Spec> - kolejkowanie będzie kontrolowane indywidualnie dla każdego urządzenia docelowego. <Per-Target-Spec> - ciąg znaków "N" i "X". "Y" zezwala na kolejkowanie, "N" nie pozwala na nie, a "X" używa wartości domyślnej opartej na wersji firmowej. Pierwszy znak odnosi się do urządzenia 0, drugi - do urządzenia 1 itd. Jeśli ciąg znaków "Y", "N" i "X" nie pokrywa wszystkich urządzeń docelowych, dla urządzeń nie pokrytych używany jest znak "X" czyli wartość domyślna.
Zauważ, że wyraźne żądanie kolejkowania może prowadzić do problemów; możliwość ta została wprowadzona, aby wyłączać kolejkowanie dla urządzeń docelowych, które nie obsługują go poprawnie.
Parametr odnośnie naprawy błędów zaczyna się od "ER:" i pozwala na wyraźne zezwolenie uruchamiania sekwencji naprawy błędów kiedy wywołane zostanie polecenie ResetCommand z powodu niepowodzenia wykonania jakiegoś polecenia SCSI. Dostępne są następujące opcje dla tego parametru:
ER:Default - sekwencja naprawy błędów wybierze pomiędzy twardym resetem a resetem szyny w zależności od zaleceń podsystemu SCSI.
ER:HardReset - sekwencja naprawy błędów zainicjuje twardy reset adaptera, który także spowoduje reset szyny SCSI.
ER:BusDeviceReset - sekwencja naprawy błędów wyśle do urządzenia docelowego powodującego błąd polecenie resetujące szynę. Jeśli sekwencja naprawy błędów jest ponownie inicjowana dla tego urządzenia docelowego i żadne polecenie SCSI do tego urządzenia nie wykonało się poprawnie od momentu wysłania polecenia resetującego, wtedy zostanie zainicjowany twardy reset.
ER:None - sekwencja naprawy błędów zostanie zatrzymana. Opcja ta powinna być podana tylko jeśli reset szyny SCSI i reset szyny powodują całkowite i nieodwracalne zawieszenie urządzenia docelowego.
ER:<Per-Target-Spec> - sekwencja naprawy błędów będzie kontrolowana indywidualnie dla każdego urządzenia docelowego. <Per-Target-Spec> jest ciągiem znaków "H", "B" i "N". "D" powoduje zachowanie domyślne, "H" - twardy reset, "B" - reset szyny, "N" - zatrzymanie sekwencji naprawy błędów. Pierwszy znak odnosi się do urządzenia 1, drugi - do drugiego, itd. Jeśli ciąg znaków nie pokrywa wszystkich urządzeń docelowych, wtedy dla urządzeń nie pokrytych przyjmuje się "D" czyli zachowanie domyślne.
Parametry odnośnie przeszukiwania adaptera są następujące:
NoProbe - nie przeprowadzać żadnego przeszukiwania - żadne kontrolery BusLogic nie zostaną znalezione.
NoProbeISA - nie przeprowadzać standardowego przeszukiwania adresów I/O ISA - wykryte zostaną tylko kontrolery PCI.
NoSortPCI - kontrolery PCI zostaną ponumerowane wg. porządku ustalonego przez PCI BIOS, ignorując jakiekolwiek ustawienia opcji AutoSCSI "Use Bus and Device # For PCI Scanning Seq.".
Od późnych wersji 2.0 jądra, sterownik EATA przyjmuje argument startowy, który specyfikuje adres bazowy I/O, który ma być przeszukiwany. Forma tego argumentu to:
eata=iobase1[,iobase2][,iobase3]...[,iobaseN]
Sterownik będzie przeszukiwał adresy w takiej kolejności w jakiej zostały podane.
Algorytm wyszukujący dla tych urządzeń SCSI szuka zainstalowanego BIOS-u, a jeśli taki nie jest zainstalowany, karta nie zostanie znaleziona. Albo jeśli sygnatura twojego BIOS-u nie zostanie rozpoznana wtedy karta także nie zostanie znaleziona. W tych przypadkach będziesz musiał użyć argumentu startowego w formie:
tmc8xx=mem_base,irq
Wartość mem_base określa ilość pamięci przeznaczonej na
odwzorowanie obszaru I/O używanego przez daną kartę. Zwykle jest to
jedna z poniższych wartości:
0xc8000, 0xca000, 0xcc000, 0xce000, 0xdc000, 0xde000.n
Sterownik wykrywa te karty na podstawie znanych sygnatur ROM
BIOS-ów. Pełną listę znanych BIOS-ów znajdziesz w pliku
linux/drivers/scsi/fdomain.c, jak i wiele innych
informacji. Jeśli twój BIOS nie jest znany, to możesz podać
parametry bezpośrednio w formie:
fdomain=iobase,irq[,scsi_id]
Ten argument przeznaczony jest dla kontrolera SCSI portu równoległego SCSI, który jest wbudowany w sterownik IOMEGA ZIP. Może także działać z oryginalnym urządzeniem IOMEGA PPA3. Argument startowy dla tego sterownika ma formę:
ppa=iobase,speed_high,speed_low,nybble
Wszystkie wartości oprócz IOBASE są opcjonalne. Jeśli chcesz
zmieniać którąś z tych trzech opcjonalnych wartości lepiej
przeczytaj plik linux/drivers/scsi/README.ppa.
W zależności od twojej karty, 5380 może odwzorowywać albo porty I/O albo pamięć. (Adres poniżej 0x400 zwykle oznacza odwzorowywanie adresów I/O, ale PCI i EISA używają adresów I/O powyżej 0x3FF.) W każdym z przypadków podajesz adres, numer IRQ i numer kanału DMA. Przykładem dla karty z odwzorowywaniem portów I/O może być:
ncr5380=0x350,5,3
Jeśli karta nie używa IRQ, wtedy podajemy 255 (0xFF) jako numer
IRQ. Wartość 254 (0xFE) oznacza automatyczne wykrycie numeru
przerwania. Więcej szczegółów znajdziesz w pliku
linux/drivers/scsi/README.g_NCR5380.
Kontroler ten jest obsługiwany przez ten sam sterownik co opisany wyżej 5380. Argument startowy przyjmuje identyczne wartości za wyjątkiem DMA, którego 53c400 nie używa.
Argument startowy tego sterownika ma formę:
ncr53c406a=PORTBASE,IRQ,FASTPIO
gdzie IRQ i FASTPIO są parametrami opcjonalnymi. Wartość
przerwania = 0, wyłącza użycie przerwania. Wartość FASTPIO = 1
włącza użycie instrukcji insl i outsl zamiast instrukcji
jedno-bajtowych inb i outb. Sterownik może także
przyjmować DMA jako opcję podczas kompilacji.
PAS16 używa układu SCSI NCR5380, a nowsze modele obsługują konfigurację bezzworkową. Argument startowy ma postać:
pas16=iobase,irq
Jedyną różnicą jest to, że możesz podać numer przerwania 255 (0xFF), które poinformuje sterownik, żeby pracował bez używania przerwania, aczkolwiek przy utracie jakości. IOBASE ma zwykle wartość 0x388.
Algorytm wyszukiwania dla tych kontrolerów szuka zainstalowanego BIOS-u, a jeśli takiego nie znajdzie, lub jeśli sygnatura w BIOS-ie nie zostanie rozpoznana, karta nie zostanie zidentyfikowana. W takich przypadkach musisz użyć argumentu startowego w formie:
st0x=mem_base,irq
Wartość mem_base określa obszar adresów I/O odwzorowywany,
którego używa karta. Jest to zwykle jedna z poniższych wartości:
0xc8000, 0xca000, 0xcc000, 0xce000, 0xdc000, 0xde000.
Te karty są także oparte na układzie NCR5280 i akceptują następujące parametry:
t128=mem_base,irq
Wartości dla mem_base to z reguły:
0xcc000, 0xc8000, 0xdc000, 0xd8000.
Zauważ, że zdaje się, że są dwa niezależne sterowniki dla tej
karty, tj. CONFIG_SCSI_U14_34F, który używa u14-34f.c i
CONFIG_SCSI_ULTRASTOR, który używa ultrastor.c. u14-34f
jest tym (w późnych jądrach 2.0), który przyjmuje argument
startowy w formie:
u14-34f=iobase1[,iobase2][,iobase3]...[,iobaseN]
Sterownik będzie przeszukiwał adresy w podanej kolejności.
Sterownik dla wd7000 szuka znanego łańcucha BIOS ROM i zna kilka standardowych ustawień konfiguracji. Jeśli ustawienia te nie są poprawne albo masz nierozpoznaną wersję BIOS-u, możesz użyć argumentu startowego w formie:
wd7000=irq,dma,iobase
Obecnie następujące karty nie przyjmują żadnych argumentów startowych. W niektórych wypadkach możesz na siłę zmienić wartości, edytując kod źródłowy sterownika, jeśli już musisz.
Adaptec aha1740 (próbkowanie EISA),
NCR53c7xx,8xx (PCI, oba sterowniki),
Qlogic Fast (0x230, 0x330),
Qlogic ISP (PCI)
Ta sekcja wymienia wszystkie argumenty startowe związane ze standardowymi dyskami twardymi takimi jak: MFM/RLL, ST-506, XT i IDE. Zauważ, że oba sterowniki IDE jak i ST-506 akceptują ten sam argument: "hd=".
Sterownik IDE akceptuje wiele parametrów, od określenia geometrii
dysku do obsługi zaawansowanych, czy źle wykonanych układów
kontrolerów. Poniżej wymienione są wszystkie możliwe argumenty
startowe. Aby dowiedzieć się więcej na temat szczegółowego opisu
naprawdę powinienieś zajrzeć do pliku
linux/Documentation/ide.txt, z którego to streszczenie
zostało wyciągnięte.
"hdx=" - jest rozpoznawalny przez wszystkie "x" od "a" do "h",
jak np. "hdc".
"idex=" - jest rozpoznawalny przez wszystkie "x" od "0" do "3",
jak np. "ide1".
"hdx=noprobe" - napęd może być, ale go nie szukaj,
"hdx=none" - napędu nie ma, zignoruj CMOS i nie szukaj go,
"hdx=nowerr" - zignoruj bit WRERR_STAT w tym napędzie,
"hdx=cdrom" - napęd jest obecny i jest CD-ROM-em,
"hdx=cyl,head,sect" - napęd jest obecny z podaną geometrią,
"hdx=autotune" - sterownik będzie próbował ustawić prędkość
interfejsu na najszybsze obsługiwane PIO jeśli jest to możliwe
tylko dla tego napędu. Nie jest to obsługiwane przez wszystkie
układy, i całkiem prawdopodobne, że będzie sprawiało kłopoty
przy starszych/dziwnych napędach IDE.
"idex=noprobe" - nie próbuj używać tego interfejsu,
"idex=base" - szukaj interfejsu w podanym adresie, gdzie base
to przeważnie 0x1F0 lub 0x170 a "ctl" to "base"+0x206,
"idex=base,ctl" - określenie base i ctl,
"idex=base,ctl,irq - określenie base, ctl i irq,
"idex=autotune" - sterownik będzie próbował ustawić prędkość
interfejsu na najszybsze obsługiwane PIO, dla wszystkich
napędów na tym interfejsie. Nie jest to obsługiwane przez wszystkie
układy, i całkiem prawdopodobne, że będzie sprawiało kłopoty
przy starszych/dziwnych napędach IDE,
"idex=noautotune" - sterownik nie będzie próbował ustawić
prędkości interfejsu. Jest to zachowanie standardowe
większości układów oprócz cmd640.
"idex=serialize" - nie nakładaj operacji na idex i ide(x^1).
Następujące parametry są ważne TYLKO dla ide0, a wartości domyślnych dla portów base i ctl nie wolno zmieniać.
"ide0=dtc2278" : szukaj/obsługuj interfejs DTC2278,
"ide0=ht6560b" : szukaj/obsługuj interfejs HT6560B,
"ide0=cmd640_vlb" : *WYMAGANE* dla kart VLB z układem CMD640,
(nie dla PCI - wykrywane automatycznie)
"ide0=qd6580" : szukaj/obsługuj interfejs qd6580,
"ide0=ali14xx" : szukaj/obsługuj układy ali14xx (ALI M1439/M1445),
"ide0=umc8672" : szukaj/obsługuj układy umc8672,
Wszystko inne jest odrzucane z informacją "BAD OPTION" (czyli "zła opcja").
Standardowy sterownik dysku może zaakceptować parametry dotyczące geometrii dysków podobnych do sterownika IDE. Aczkolwiek zauważ, że spodziewa się on tylko trzech wartości (C/H/S) - jedna mniej lub więcej i po cichutku cię zignoruje. Akceptuje on tylko argument "hd=", tak, że "hda=", "hdb=" itd. nie są brane pod uwagę. Format tego argumentu to:
hd=cyls,heads,sects
gdzie cyls to ilość cylindrów, heads - głowic; sects - sektorów. Jeśli są zainstalowane dwa dyski, należy powyższe powtórzyć z geometrią dysku drugiego.
Jeśli jesteś na tak nieszczęśliwym miejscu i używasz jednej z tych starych kart, które przenoszą dane z zabójczą prędkością dochodzącą w porywach do 125kB/s WYRZUĆ JĄ NATYCHMIAT I KUP NOWĄ !!! A poważnie. Algorytm wyszukiwania dla tych kart szuka zainstalowanego BIOS-u, a jeśli takiego nie znajdzie, lub jeśli sygnatura w BIOS-ie nie zostanie rozpoznana, karta nie zostanie zidentyfikowana. W takich przypadkach musisz użyć argumentu startowego w formie:
xd=type,irq,iobase,dma_chan
Wartość type określa konkretnego wykonawcę karty, i jest
jedną z: 0=generic; 1=DTC; 2,3,4=Western Digital, 5,6,7=Seagate; 8=OMTI.
Jedyną różnicą pomiędzy różnymi typami tego samego wykonawcy jest
łańcuch w BIOS-ie używany do autodetekcji, który nie jest używany
jeśli jest podany typ.
Funkcja xd_setup() nie sprawdza wartości, i przyjmuje, że
wpisałeś wszystkie cztery. Nie załamuj się. Tutaj jest przykład
dla kontrolera WD1002 z wyłączonym/usuniętym BIOS-em, używającym
domyślnych parametrów kontrolera XT:
xd=2,5,0x320,3
Ta sekcja wymienia wszystkie możliwe argumenty startowe odnoszące się do CD-ROM-ów. Zauważ, że nie zawierają się tutaj CD-ROM-y typu SCSI czy IDE/ATAPI. Przeczytaj odpowiednią sekcję dla tych CD-ROM-ów.
Zauważ też, że większość z tych CD-ROM-ów ma pliki z dokumentacją,
które powinieneś przeczytać. Wszystkie są w katalogu
linux/Documentation/cdrom.
Składnia argumentu dla tej karty to:
aztcd=iobase[,magic_number]
Jeśli ustawisz parametr magic_number na 0x79 sterownik
będzie próbował się uruchomić i uruchomi się w przypadku
nieznanego typu urządzenia firmowego. Wszystkie inne wartości są
ignorowane.
Ten interfejs CD-ROM-u znajduje się na niektórych kartach dźwiękowych Pro Audio Spectrum i innych kartach obsługujących interfejs Sony. Składnia tego argumentu to:
cdu31a=iobase,[irq[,is_pas_card]]
Podając wartość IRQ = 0 informujesz sterownik, że przerwania sprzętowe nie są obsługiwane (jak na niektórych kartach PAS). Jeśli twoja karta obsługuje przerwania, powinieneś ich użyć ponieważ zmniejszają użycie procesora na karcie.
Jeśli używasz karty Pro Audio Spectrum podaj parametr "is_pas_card" jako PAS, a jeśli nie to nie powinieneś go wcale podawać.
Składnia argumentu dla tego interfejsu to:
sonycd535=iobase[,irq]
Zero może być użyte dla wartości iobase jako "znak zajmujący miejsce" (bez żadnego znaczenia dla sterownika) jeśli ktoś chce podać wartość IRQ.
Składnia argumentu dla tego interfejsu to:
gscd=iobase
gdzie iobase jest adresem I/O.
Składnia argumentu dla tego interfejsu to:
isp16=[port[,irq[,dma]]][[,]drive_type]
Podając 0 dla IRQ lub DMA informujesz sterownik, że nie
będą one używane. Wartość parametru drive_type to jedna
z: noisp16, Sanyo, Panasonic, Sony i Mitsumi.
Podanie wartości noisp16 wyłączy sterownik zupełnie.
Składnia argumentu dla tego interfejsu to:
mcd=iobase,[irq[,wait_value]]
Wartość wait_value jest używana jako wewnętrzna wartość
timeout dla tych, którzy mają problemy ze swoimi napędami i
może, ale nie musi być zaimplementowana. Zależy to od definicji
odpowiedniego symbolu podczas kompilacji.
Obecnie ten "eksperymentalny" sterownik ma funkcję ustawiającą, ale nie przyjmuje ona jeszcze żadnych parametrów (1.3.15). (Od tłumacza: W wersji jądra 2.0.18 także nie przyjmuje.) Odnosi się on do tego samego sprzętu co powyżej tyle, że ma trochę rozszerzone możliwości.
Składnia argumentu dla tej karty to:
optcd=iobase
Składnia argumentu dla tej karty to:
cm206=[iobase][,irq]
Sterownik zakłada, że liczby między 3 a 11 to numery przerwań IRQ, a
liczby pomiędzy 0x300 a 0x370 to porty I/O, tak więc możesz podać
jeden lub oba argumenty w jakimkolwiek porządku. Można także podać
cm206=auto, aby sterownik sam znalazł kartę.
Składania argumentu dla tej karty to:
sjcd=iobase[,irq[,dma_channel]]
Składnia argumentu dla tej karty to:
sbpcd=iobase,type
gdzie type jest jednym z łańcuchów: SounBlaster,
LaserMate lub SPEA. (Wielkość liter jest ważna !!!). I/O base jest
adresem I/O interfejsu CD-ROM-u, a nie interfejsu
dźwiękowego.
Wszelkie urządzenia, które nie zaliczają się do wyżej wymienionych zostały wrzucone tutaj.
Różne sterowniki przyjmują różne parametry, ale wszystkie przyjmują przynajmniej nazwę, IRQ oraz adres I/O. W najbardziej ogólnej postaci wyglądą to mniej więcej tak:
ether=irq,iobase[,param_1[,param_2,...param_8]]],name
Pierwszy argument, który nie jest liczbą uznawany jest za nazwę.
Wartości param_n zwykle mają różne znaczenie dla każdej
karty czy sterownika. Typowe wartości to adres pamięci dzielonej,
określenie interfejsu, kanały DMA itp.
Najpopularniejszym użyciem tego parametru jest wymuszenie szukania drugiej karty Ethernet ponieważ domyślnie szuka się tylko jednej. Tak wyglądałby przykład:
ether=0,0,eth1
Zauważ, że wartości 0 przy IRQ i adresie I/O w powyższym przykładzie informują sterownik, aby sam ich poszukał.
WAŻNA UWAGA DLA UŻYTKOWNIKÓW MODUŁÓW: Powyższe nie wymusi
poszukiwania drugiej karty jeśli używasz sterownik-a/ów jako moduł
(zamiast wkompilować je w jądro). Większość dystrybucji Linux-owych
jest zbudowana na bazie małego statycznego jądra i dużej ilości
ładowalnych modułów. Parametr ether= odnosi się tylko do
sterowników wkompilowanych w jądro.
Zauważ też, że Ethernet-HowTo ma pełną dokumentację na temat używania większej ilości kart i na temat parametrów dla konkretnych kart. Zainteresowani powinni zajrzeć do tamtego dokumentu, aby dowiedzieć się szczegółów na temat swojej karty.
Jest wiele parametrów do tego sterownika i wszystkie są wymienione
w pliku /linux/drivers/block/README.fd. Następująca
informacja została zaczerpnięta bezpośrednio stamtąd.
floppy=mask,allowed_drive_mask
Ustawia maskę bitów dopuszczonych napędów na mask.
Domyślnie są to kanały 0 i 1 każdego kontrolera. Jest tak, ponieważ
pewne niestandardowe urządzenia (płyty główne ASUS PCI) zmieniają
układ znaków na klawiaturze kiedy próbują dostać się do kanału 2 czy 3.
Ten parametr jest trochę przestarzały z powodu opcji CMOS-u.
floppy=all_drives
Ustawia maskę bitów dopuszczonych napędów na wszystkie napędy. Użyj tego jeśli masz więcej niż dwa napędy podłączone do kontrolera dyskietek.
floppy=asus_pci
Ustawia maskę bitów, aby dopuścić tylko kanały 0 i 1. (Wartość domyślna)
floppy=daring
Informuje sterownik, że masz "dobrze zachowujący się" kontroler do dyskietek. Pozwala to na bardziej wydajną i płynniejszą pracę, ale może się nie udać przy niektórych kontrolerach. Może to przyspieszyć pewne operacje.
floppy=0,daring
Informuje sterownik, aby używać kontrolera ostrożnie.
floppy=one_fdc
Informuje sterownik, że masz tylko jeden kontroler. (wartość domyślna)
floppy=two_fdc lub floppy=address,two_fdc
Informuje sterownik, że masz dwa kontrolery do dyskietek. Drugi
sterownik znajduje się pod adresem address. Jeśli adres
ten nie jest podany - przyjmuje się wartość domyślną, tj. 0x370.
floppy=thinkpad
Informuje sterownik, że masz kontroler Thinkpad, który używa odwrotnego oznaczenia linii zmiany dyskietek.
floppy=0,thinkpad
Informuje sterownik, że nie masz kontrolera Thinkpad.
floppy=drive,type,cmos
Ustawia typ CMOS-u napędu drive na type.
Dodatkowo, napęd ten jest dopuszczony w masce bitów. Jest to
przydatne jeśli masz więcej niż dwa napędy (w fizycznym cmos-ie
można opisać tylko dwa), lub jeśli twój BIOS używa
niestandardowych typów CMOS-u.
Ustawienie CMOS-u na 0 dla pierwszych dwóch napędów (domyślnie)
zmusza sterownik do czytania fizycznego CMOS-u dla tych napędów.
floppy=unexpected_interrupts
Wyświetl informację ostrzegającą jeśli odebrano niespodziewane przerwanie. (zachowanie domyślne)
floppy=no_unexpected_interrupts lub floppy=L40SX
Nie wyświetlaj informacji ostrzegającej kiedy odebrano niespodziewane przerwanie. Jest to potrzebne na niektórych laptopach IBM L40SX w pewnych trybach wyświetlania. (Wygląda na to, że jest jakaś interakcja pomiędzy grafiką a dyskietkami. Niespodziewane przerwania dotyczą wydajności i mogą być spokojnie ignorowane.)
Sterownik dźwięku może także przyjmować parametry, które zmieniają
wartości zapisane podczas kompilacji. Nie jest to zalecane
ponieważ jest to operacja skomplikowana. Jest (Była?) ona opisana w pliku
linux/drivers/sound/Readme.Linux. Forma argumentu
startowego dla sterownika dźwięku to:
sound=urz1[,urz2[,urz3...[,urz11]]]
gdzie każda wartość urzN ma postać 0xTaaaID.
Symbole oznaczają w tym formacie:
T - typ urządzenia: 1=FM, 2=SB, 3=PAS, 4=GUS, 5=MPU401, 6=SB16, 7=SB16-MPU401,
aaa - adres I/O szesnastkowo,
I - numer IRQ szesnastkowo (tj, 10=a, 11=b, ...),
D - kanał DMA.
Jak widzisz jest tu trochę bałaganu. Także lepiej wkompiluj swoje
własne wartości w sterowniku. Podanie sound=0 spowoduje
wyłączenie sterownika dźwięku zupełnie.
Ten sterownik przyjmuje tylko jeden parametr: jest to wartość IRQ.
Ten sterownik przyjmuje tylko jeden parametr: jest to wartość IRQ.
Co do jąder w wersji większej niż 1.3.75, możesz przekazać sterownikowi jakich portów używać a jakich nie używać. To drugie jest przydatne jeśli nie chcesz, żeby sterownik zajął wszystkie dostępne porty, aby inne sterowniki (np.: PLIP, PPA) mogły ich używać.
Forma tego argumentu to pary adres_I/O,IRQ. Na przykład
takie wywołanie lp=0x3BC,0,0x378,7 spowoduje użycie portu
o adresie 0x3BC w trybie bezprzerwaniowym, i przerwania 7 dla
portu o adresie 0x378. Port o adresie 0x278 (jeśli taki by był)
nie byłby przeszukiwany, ponieważ automatyczne przeszukiwanie ma
miejsce tylko jeśli nie podano argumentu "lp". Aby wyłączyć
sterownik od drukarki należy podać lp=0.
Argument startowy dla tego sterownika to:
icn=iobase,membase,icn_id1,icn_id2
gdzie iobase jest adresem portu I/O karty, membase
jest adresem pamięci dzielonej karty, a dwa ostatnie parametry są
unikalnymi łańcuchami identyfikującymi.
Argument ten przyjmuje pary liczb w postaci:
pcbit=membase1,irq1[,membase2,irq2]
gdzie membaseN jest adresem pamięci dzielonej N-tej karty,
a irqN jest numerem przerwania N-tej karty. Wartościami
domyślnymi są: IRQ = 5, membase = 0xD0000.
Argument dla tego sterownika ma postać:
teles=iobase,irq,membase,protocol,teles_id
gdzie iobase jest adresem portu I/O karty, membase
jest adresem pamięci dzielonej karty, irq jest kanałem
przerwania używanym przez kartę, a teles_id jest
unikalnym łańcuchem identyfikującym.
Sterownik ten przyjmuje łańcuch sześciu oddzielonych przecinkiem identyfikatorów lub liczb. Te sześć wartości to odpowiednio:
Włącz/wyłącz kartę. (E/D)
Typ karty: PC/Xi(0), PC/Xe(1), PC/Xeve(2), PC/Xem(3)
Włącz/wyłącz dodatkowe ustawienie zworkami. (E/D)
Ilość portów na tej karcie.
Adresy portów I/O tej karty (szesnastkowo jeśli używasz
identyfikatorów łańcuchowych)
Podstawa okna pamięci (szesnastkowo jeśli używasz
identyfikatorów łańcuchowych).
Oto poprawny przykład użycia tego argumentu (w obu formach: z łańcuchami i liczbami):
digi=E,PC/Xi,D,16,200,D0000
digi=1,0,0,16,512,851968
Wartościami domyślnymi są: adres I/O - 0x200, adres pamięci
dzielonej - 0xD0000. W przypadku tego sterownika nie jest
dokonywane automatyczne wyszukiwanie urządzenia. Więcej szczegółów
znajdziesz w pliku linux/Documentation/digiboard.txt.
Jądro może obsłużyć do czterech kart podając cztery unikalne
wartości dla portów I/O dla każdej indywidualnej karty. Dalsze
szczegóły znajdziesz w pliku linux/Documentation/riscom8.txt.
Argument dla tego sterownika ma postać:
baycom=modem,io,irq,opcje[,modem,io,irq,opcje]
Podając modem=1 informujesz, że masz urządzenie ser12, modem=2 -
urządzenie par96. Opcje=0 oznacza sprzęt DCD, opcje=1 -
oprogramowanie DCD. I/O i IRQ są jak zwykle: adresem portów
I/O i numerem IRQ. Więcej szczegółów na temat tego sterownika znajdziesz
w pliku /linux/drivers/char/README.baycom.
Jeśli znalazłeś jakieś przestarzałe informacje, to napisz do autora tego dokumentu:
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:
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/pub/Linux/JTZ/
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 w tym dokumencie to odnośniki do polskich serwerów ftp i WWW. doc-linux-pl-2002.06.14.orig/html/Bootdisk-HOWTO.pl.html 0100644 0001750 0001750 00000325423 06773242740 021333 0 ustar coven coven
Uwaga: Ten dokument może być przestarzały. Jeśli upłynęło więcej niż sześć miesięcy od daty podanej na stronie tytułowej, to poszukaj nowej wersji tego dokumentu na stronie Linux Documentation Project http://metalab.unc.edu/LDP/HOWTO/Bootdisk-HOWTO.html.
Dokument ten powinien być czytelny w formacie tekstowym, jednak dzięki
wykorzystaniu typografii wygląda on znacznie lepiej w formacie Postscript
(.ps) lub HTML. Zachęcamy do wybrania jednego z tych formatów. Wersja
w formacie Info jest tak okrojona, że staje się bezużyteczna.
Graham Chapman (grahamc@zeta.org.au) napisał oryginalną wersję
Bootdisk-HOWTO i opiekował się tym dokumentem aż do wersji 3.1. Tom Fawcett
(fawcett@croftj.net) dodał sporo materiału na temat jądra 2.0
i jest on opiekunem tego dokumetu od wersji 3.2. W dokumencie pozostało sporo
oryginalnego tekstu Chapmana.
Dokument ten jest napisany w oparciu o jądro Linux-a w wesji 2.0 lub późniejszej. Jeśli posiadasz starsze jądro (1.2.xx lub niższe), to zajrzyj do poprzedniej wersji Bootdisk-HOWTO, którą możesz znaleźć na Stronie domowej Grahama Chapmana.
Informacje zawarte w tym dokumencie dotyczą platformy Intel. Wiele z nich może być również poprawnych dla innych procesorów, ale nie mamy na ten temat żadnych danych. Prosimy o kontakt ludzi mających doświadczenia z dyskietkami startowymi na innych platformach sprzętowych.
Czekamy na wszystkie opinie, czy to dobre, czy złe, na temat zawartości tego dokumentu. Staraliśmy się, aby informacje w nim umieszczone były jak najbardziej pewne i dokładne. Daj nam znać gdy znajdziesz jakieś błędy.
Dziekujemy ludziom, którzy pomagali nam przysyłając poprawki czy sugestie. Ich wkład uczynił ten dokument o wiele lepszym, niż gdybyśmy tworzyli go sami.
Wysyłaj komentarze, sugestie i poprawki na adres email autora podany powyżej. Nie mam nic przeciwko odpowiadaniu na pytania, jednak radzę najpierw przeczytać dział Rozwiązywanie problemów.
Copyright © 1995,1996,1997,1998,1999 by Tom Fawcett and Graham Chapman. Ten dokument może zostać rozpowszechniany na warunkach ustalonych przez Licencję Linux Documentation Project, znajdującą się pod adresem http://metalab.unc.edu/LDP/HOWTO/Bootdisk-HOWTO.html. Skontaktuj się z autorem, jeśli nie jesteś w stanie otrzymać licencji.
Ta dokumentacja jest darmowa. Jest rozpowszechniana z nadzieją, że okaże się użyteczna, jednak bez żadnej gwarancji.
Dyskietki startowe są przydatne w wielu sytuacjach, takich jak:
libc.so.
Istnieje kilka sposobów otrzymywania dyskietek startowych:
Niektórzy używają tej ostatniej metody i robią wszystko sami. Dzięki temu jeśli coś pójdzie nie tak, to wiadomo co zrobić aby to naprawić. Dodatkowo jest to bardzo dobra metoda na nauczenie się jak działa Linux.
Ten dokument zakłada podstawową znajomość zasad administracji systemu Linux.
Przykładowo powinieneś wiedzieć coś katalogach, systemach plików i
dyskietkach. Powinieneś wiedzieć, jak używać poleceń mount i df.
Powinieneś wiedzieć, do czego służą i jak wyglądają pliki
/etc/passwd i fstab. Powinieneś wiedzieć, że
większość poleceń w tym HOWTO powinna być wykonywana gdy jesteś zalogowany
jako root.
Konstruowanie swojej własnej dyskietki startowej od zera może być skomplikowane. Jeśli nie czytałeś Linux FAQ i powiązanych dokumentów, takich jak Linux Installation HOWTO i Linux Installation Guide, to nie powinieneś tworzyć dyskietek startowych. Jeśli potrzebujesz jedynie działającej dyskietki startowej na wypadek awarii, to o wiele łatwiej będzie ściągnąć gotową. Aby je znaleźć, zajrzyj do dodatku Gotowe dyskietki.
Dyskietka startowa jest po prostu miniaturowym systemem Linux na dyskietce. Musi on spełniać wiele funkcji wykonywanych przez zwykły, pełnowymiarowy system Linux. Zanim spróbujesz stworzyć własną dyskietkę, musisz zrozumieć podstawy startowania systemu Linux. Prezentujemy tutaj jedynie podstawy, które są wystarczające do zrozumienia reszty tego dokumentu. Wiele szczegółów i opcji alternatywnych zostało ominiętych.
Wszystkie komputery PC rozpoczynają proces startu systemu przez wykonanie
kodu znajdującego się w pamięci ROM (konkretnie w BIOS-ie), który
ładuje jeden sektor z sektora 0, cylindra 0 napędu startowego. Napęd
startowy to zazwyczaj pierwszy napęd dyskietek (oznaczony A: w DOS-ie
i /dev/fd0 w Linuxie). Następnie BIOS próbuje wykonać zawartość
tego sektora. Na większości dyskietek startowych sektor 0, cylinder 0
zawiera:
Jeśli jądro Linuxa zostało przekopiowane bezpośrednio na dyskietkę, to pierwszy sektor dyskietki będzie jednocześnie pierwszym sektorem jądra. Kod znajdujący się w pierwszym sektorze będzie kontynuował proces startu ładując resztę jądra z dyskietki.
Gdy jądro zostanie w całości załadowane, rozpoczyna ono inicjalizację sterowników. Następnie próbuje ono załadować i zamontować główny system plików z jednego z urządzeń. Główny system plików to po prostu system montowany jako ``/''. Jądro musi wiedzieć, gdzie szukać głównego systemu plików, jeśli nie znajdzie tam obrazu który można załadować, zawiesza się.
W niektórych sytuacjach -- często w czasie startowania z dyskietki -- główny system plików zostaje załadowany do ramdysku, czyli do pamięci RAM która jest traktowana przez system tak, jakby była dyskiem. Istnieją dwa powody dla których system ładuje się do ramdysku. Po pierwsze, RAM jest o wiele szybszy niż dyskietka, tak więc operacje systemowe są wykonywane szybko. Po drugie, jądro może załadować skompresowany system plików z dyskietki i rozpakować go do ramdysku, dzieki czemu na dyskietce można zmieścić o wiele więcej plików.
Gdy główny system plików zostanie załadowany i zamontowany, ujrzysz taką informację:
VFS: Mounted root (ext2 filesystem) readonly.
Następnie system odnajduje w głównym systemie plików program init (w
katalogu /bin lub /sbin) i wykonuje go. init odczytuje
swój plik konfiguracyjny /etc/inittab, szuka lini oznaczonej
sysinit i wykonuje podany tam skrypt. Skrypt sysinit to najczęściej
plik /etc/rc, /etc/init.d/boot lub podobny. Ten
skrypt to seria komend powłoki, które inicjalizują podstawowe usługi systemu,
oraz wykonują czynności takie jak:
fsck na wszystkich dyskach,fstab.
Ten skrypt często wywołuje inne skrypty odpowiadające za inicjalizację poszczególnych modułów. Na przykład, w typowej procedurze inicjalizacyjnej systemów zgodnych z SysV, katalog /etc/rc.d/ zawiera złożoną strukturę podkatalogów, których pliki odpowiedzialne są za załączanie i wyłączanie poszczególnych usług systemu. Jednak na dyskietce startowej skrypty sysinit są na ogół bardzo proste.
Gdy skrypt sysinit zakończy pracę, kontrola powraca do programu init,
który następnie wchodzi na domyślny poziom pracy, podany w pliku
inittab przy słowie kluczowym initdefault. Linie poziomów pracy na
ogół wyszczególniają program taki jak getty, który jest
odpowiedzialny za obsługę komunikacji przez konsolę i terminale. To własnie
program getty wypisuje znaną wszystkim linię zachęty ``login:''.
Wywołuje on następnie program login, który przeprowadza
weryfikacje i ustanawia sesję użytkownika.
Po zapoznaniu się z podstawami procesu startowania systemu, możemy zdefiniować różne typy dyskietek. Dzielimy je na cztery rodzaje.
Dyskietka zawierająca jądro które może zostać uruchomione. Dyskietka może zostać użyta do wystartowania jądra, które następnie może załadować główny system plików z innego dysku. Jądro na dyskietce startowej zwykle musi wiedzieć, gdzie znaleźć swój główny system plików.
Często dyskietka startowa ładuje główny system plików z innej dyskietki, ale
jest także móżliwe ładowanie głównego systemu plików z twardego dysku.
Najczęściej robi się to po to, aby przetestować nowe jądro (w
rzeczywistości podczas kompilacji nowego jądra polecenie ``make zdisk''
utworzy taką dyskietkę startową).
Dyskietka z systemem plików zawierającym pliki wymagane do uruchomienia systemu Linux. Taka dyskietka nie musi zawierać jądra czy programu ładującego.
Gdy jądro zostało już wystartowane, główna dyskietka może zostać użyta, aby uruchomić system niezależnie od innego dysku. Zazwyczaj główna dyskietka jest automatycznie kopiowana do ramdysku. Znacznie przyspiesza to dostęp do danych, oraz zwalnia miejsce w stacji na dyskietkę narzędziową.
Dyskietka zawierająca zarówno jądro, jak i główny system plików. Innymi słowy zawiera ona wszystko, co potrzebne do wystartowania i uruchomienia Linuxa bez twardego dysku. Zaletą takich dyskietek jest ich zwięzłość -- wszystko znajduje się na jednej dyskietce. Jednak rozmiary wszystkich elementów ciągle się powiększają, więc coraz trudniej zmieścić wszystko na jednej dyskietce, nawet przy użyciu kompresji.
Dyskietka ta zawiera system plików, ale nie jest on jednak montowany jako główny system plików. Jest to dodatkowa dyskietka z danymi. Używa się jej aby dostarczyć dodatkowe programy narzędziowe niemieszczące się na głównej dyskietce.
Gdy mówimy o ``tworzeniu dyskietki startowej'', mamy na myśli tworzenie zarówno części startowej (jądra) jak i głównej (plików). Mogą one znajdować się razem lub osobno. Najbardziej elastycznym rozwiązaniem w przypadku dyskietek ratunkowych jest użycie osobnej dyskietki startowej i głównej, oraz jednej lub więcej dyskietki narzędziowej.
Tworzenie głównego systemu plików wymaga wyselekcjonowania plików niezbędnych dla działania systemu. W tym rozdziale opiszemy, jak zbudować skompresowany główny system plików. Rzadziej spotykanym rozwiązaniem jest stworzenie nieskompresowanego systemu plików na dyskietce, która będzie mogła zostać bezpośrednio zamontowana jako główna. Taka alternatywa jest opisana w rozdziale Systemy plików bez ramdysku.
Główny system plików musi zawierać to wszystko, co potrzebne jest do prawidłowego działania pełnego systemu Linux. Aby tego dokonać, dyskietka musi spełniać minimalne wymagania dla systemu Linux, to znaczy musi posiadać:
/dev, /proc, /bin, /etc, /lib, /usr,
/tmp,sh, ls, cp, mv,
itd.,rc, inittab, fstab,
itd.,/dev/hd*, /dev/tty*, /dev/fd0, etc.,Oczywiście system staje się użyteczny tylko wtedy, gdy można coś na nim uruchomić. Dyskietka główna w zasadzie staje się użyteczna tylko wtedy, gdy można wykonać poniższe czynności:
fsck sprawdzający dysk twardy gdy nie jest on zamontowany.
cpio, tar, gzip
i ftape.
Opiszemy jak stworzyć skompresowany system plików, nazwany tak dlatego, że jest on spakowany na dyskietce a podczas startu systemu zostaje zdekompresowany do ramdysku. W skompresowanym systemie plików można zmieścić sporo plików (około sześć megabajtów) na standardowej dyskietce 1.44MB. System plików jest większy niż dyskietka, więc nie można go tworzyć na dyskietce. Musimy stworzyć go gdzie indziej, skompresować a następnie skopiować na dyskietkę.
Aby stworzyć główny system plików potrzebne jest wolne urządzenie, na którym muszą zmieścić się pliki przed kompresją. Potrzebujesz urządzenia o rozmiarze co około czterech megabajtów. Istnieje kilka możliwości:
RAMDISK_SIZE = nnn
która ustala ilość przydzielanej pamięci RAM. Wartością domyślną jest 4096K,
co powinno wystarczyć do naszych celów. Prawdopodobnie nie powinieneś
tworzyć takiego ramdysku na komputerze z mniej niż 8MB RAM.
Upewnij się czy istnieje urządzenie /dev/ram0, /dev/ram czy
/dev/ramdisk. Jeśli nie, to utwórz /dev/ram0 za
pomocą polecenia mknod (liczba główna 1, poboczna 0).
man losetup aby uzyskać informacje na temat korzystania z urządzeń
zwrotnych. Jeśli nie posiadasz losetup, możesz go znaleźć razem z
kompatybilnymi wersjami mount i umount w pakiecie util-linux
pod adresem
ftp://ftp.win.tue.nl/pub/linux/utils/util-linux/.
Jeśli nie posiadasz urządzenia zwrotnego (/dev/loop0,
/dev/loop1, itd.) w systemie, to musisz je stworzyć za pomocą
polecenia ``mknod /dev/loop0 b 7 0''. Po zainstalowaniu nowych
wersji mount i umount stwórz na dysku plik tymczasowy o
odpowiednim rozmiarze (np. /tmp/fsfile). Możesz użyć komendy
dd if=/dev/zero of=/tmp/fsfile bs=1k count=<it/nnn/
aby stworzyć plik o długości nnn bloków.
W poniższych przykładach użyj nazwy pliku zamiast słowa URZĄDZENIE. Gdy
montujesz taki plik, musisz dodać opcję ``-o loop'' aby
poinformować system, że jest to urządzenie zwrotne.
Na przykład polecenie
mount -o loop -t ext2 /tmp/fsfile /mnt
zamontuje plik /tmp/fsfile (poprzez urządzenie zwrotne) w
katalogu /mnt. Polecenie df potwierdzi to.
Gdy już wybrałeś jedną z tych możliwości, przygotuj URZĄDZENIE za pomocą polecenia:
dd if=/dev/zero of=URZĄDZENIE bs=1k count=3000
Ta komenda wyzerowuje urządzenie. Ten krok jest bardzo ważny, ponieważ system plików zostanie później skompresowany, więc niewykorzystany obszar powinien zostać wypełniony zerami, aby otrzymać jak najlepszą kompresję.
Następnie stwórz system plików. Jądro Linuxa rozpoznaje i kopiuje z
dyskietki głównej do ramdysku dwa rodzaje systemów plików. Są to minix i
ext2, jednak preferowany jest ten drugi. Jeśli zdecydujesz się na ext2, to
przydatna może okazać się opcja -i, dzięki której możesz stworzyć
więcej i-węzłów niż jest to przyjęte domyślnie. Zalecane jest użycie opcji
-i 2000, aby nie zabrakło ci i-węzłów. Ewentualnie możesz zaoszczędzić
sporo i-węzłów poprzez usunięcie wielu niepotrzebnych plików z katalogu
/dev. Na dyskietce 1.44MB polecenie mke2fs domyślnie utworzy
360 i-węzłów. Na mojej dyskietce ratunkowej wystarcza w zupełności 120
i-węzłów, jednak gdy dołączysz wszystkie urządzenia z katalogu
/dev z pewnością przekroczysz 360. Użycie skompresowanego systemu
plików daje do dyspozycji więcej miejsca, czyli jednocześnie większą ilość
domyślnych i-węzłów, ale ciągle może okazać się konieczna redukcja liczby
plików czy zwiększenie liczby i-węzłów.
Tak więc polecenie które użyjesz powinno wyglądać mniej więcej tak:
mke2fs -m 0 -i 2000 URZĄDZENIE
(Jeśli korzystasz z urządzenia zwrotnego, to w miejsce URZĄDZENIA powinieneś
podać nazwę pliku. W tej sytuacji program mke2fs zapyta czy naprawdę
chcesz to zrobić, odpowiedz tak).
Program mke2fs automatycznie wykryje ilość wolnego miejsca i
odpowiednio się skonfiguruje. Opcja -m 0 zapobiega rezerwowaniu miejsca
dla użytkownika root, powiększając w ten sposób dostępny obszar na dysku.
Następnie zamontuj urządzenie:
mount -t ext2 URZĄDZENIE /mnt
(Musisz stworzyć katalog /mnt jeśli jeszcze nie intnieje.) W
pozostałych działach wszystkie nazwy katalogów będą podawane wzgędem
katalogu /mnt.
Poniżej znajduje się minimalny zestaw katalogów dla twojego głównego systemu plików:
/dev -- Urządzenia, wymagane do operacji wejścia/wyjścia/proc -- Katalog wymagana przez system plików proc/etc -- Pliki konfiguracyjne systemu/sbin -- Programy krytyczne dla działania systemu/bin -- Podstawowe programy uważane za część systemu/lib -- Biblioteki dzielone/mnt -- Miejsce montowania innych systemów plików/usr -- Dodatkowe narzędzia i aplikacje(Pokazana tutaj struktura katalogów odnosi się jedynie do głównych dyskietek. Prawdziwe systemy Linux używają bardziej złożonych i rygorystycznych zasad ustalania gdzie plik powinien się znajdować, zwanych Filesystem Hierarchy Standard).
Trzy katalogi w głównym systemie plików pozostaną puste, więc wystarczy je
utworzyć komendą mkdir. Katalog /proc to po prostu miejsce, w
którym umieszczony zostanie system plików proc. Katalogi /mnt i
/usr są tylko miejscami montowania innych systemów plików gdy
dyskietka startowa/główna już działa. Także te katalogi wystarczy jedynie
utworzyć.
Pozostałe cztery katalogi są opisane w następnych działach.
Katalog /dev zawiera specjalne pliki dla każdego wykorzystywanego
przez system urządzenia, katalog ten jest obowiązkowy. Jest to zwykły
katalog, więc może zostać stworzony poleceniem mkdir. Jednak
poszczególne pliki urządzeń muszą zostać utworzone w nietypowy sposób,
za pomocą komendy mknod.
Istnieje jednak droga na skróty, możesz skopiować zawartość istniejącego już
katalogu /dev i skasować niepotrzebne pliki. Podczas kopiowania
musisz użyć opcji -R, dzięki temu nie będzie kopiowana zawartość
plików. Upewnij się, że użyłeś R pisanego wielką literą. Jeśli
użyjesz małej litery -r, prawdopodobnie będziesz kopiował zawartość
wszystkich swoich twardych dysków, a raczej tyle, ile się z nich zmieści na
dyskietce. Tak więc uważaj i użyj komedy:
cp -dpR /dev /mnt
przyjmując że system plików jest zamontowany w /mnt. Opcja dp
spowoduje, że połączenia symboliczne zostaną skopiowane jako połączenia, a
nie odpowiadające im pliki, oraz zostaną zachowane oryginalne atrybuty
plików, włączając w to prawa własności.
Jeśli jednak masz ochotę trochę się pomęczyć, użyj komendy ls -l aby
wyświetlić główne i pomniejsze numery potrzebnych urządzeń, a następnie
utwórz je w katalogu docelowym używając polecenia mknod.
Gdy pliki zostaną skopiowane, warto sprawdzić czy posiadasz wszystkie
potrzebne urządzenia. Na przykład ftape korzysta z napędów
taśmowych, więc musisz skopiować to urządzenie jeśli chcesz mieć dostęp do
napędu taśmowego z dyskietki startowej.
Pamiętaj, że każdy plik urządzenia wymaga jednego i-węzła, więc
i-węzły są cennym zasobem, szególnie w przypadku systemów
dyskietkowych. Dobrym pomysłem jest usunięcie niepotrzebnych urządzeń z
katalogu /dev dyskietki. Wiele urządzeń jest kompletnie
nieprzydatnych w konkretnych systemach. Na przykład jeśli nie posiadasz
żadnych dysków SCSI, możesz bez żadnych problemów usunąć wszystkie urządzenia
zaczynające się na sd. Jeśli nie masz zamiaru korzystać z portu
szeregowego, możesz usunąc wszystkie pliki zaczynające się od cua.
Upewnij się, że posiadasz następujące urządzenia:
console, kmem, mem, null, ram, tty1.
Ten katalog musi zawierać pliki konfiguracyjne. Zwykle pliki w tym katalogu dzielą się na trzy grupy:
rc, fstab, passwd.
Pliki, które nie są najważniejsze, mogą zostać znalezione za pomocą komendy:
ls -ltru
Wyświetla ona listę plików posortowaną według daty ostatniego dostępu, więc jeśli plik nie był czytany, to znaczy że można go pominąć na głównej dyskietce.
Na mojej głównej dyskietce mam około 15 plików konfiguracyjnych. Zmniejsza to ilość pracy, którą trzeba poświecić na poprawę trzch grup plików:
rc.d/* -- skrypty startu systemu i zmiany poziomu pracyfstab -- lista systemów plików, które należy
zamontowaćinittab -- parametry dla programu init,
uruchamianego przy starcie systemu.
passwd -- spis użytkowników, katalogów domowych itd.group -- grupy użytkowników
shadow -- hasła użytkowników, możesz nie posiadać tego pliku.
termcap -- the terminal capability database.passwd i shadow powinny zostać
okrojone, aby uniemożliwić kopiowanie haseł poza system.
Upewnij się, że plik passwd zawiera przynajmniej użytkownika
root. Jeśli chcesz umożliwić logowanie się innym użytkownikom, to
upewnij się czy istnieją ich powłoki i katalogi domowe.
termcap, baza danych terminali, zwykle liczy kilkaset kilobajtów.
Wersja znajdująca się na dyskietce powinna być okrojona tak, aby zawierała
jedynie używany terminal(e), czyli najczęściej jedynie wpis
linux-console.
Teraz trzeba skonfigurować jedynie dwa pliki, ich zawartość jest zaskakująco mała.
rc powinien zawierać:
#!/bin/sh
/bin/mount -av
/bin/hostname Kangaroo
Upewnij się, że katalogi są poprawne. W zasadzie nie musisz uruchamiać
hostname, jednak jest to zalecane.
fstab powinien zawierać conajmniej:
/dev/ram0 / ext2 defaults
/dev/fd0 / ext2 defaults
/proc /proc proc defaults
Możesz też skopiować pozycje z istniejącego pliku fstab, ale nie
powinieneś automatycznie montować partycji na twardym dysku. Użyj przy nich
opcji noauto. Pamiętaj, twój dysk twardy może być uszkodzony, gdy
będziesz korzystał z dyskietki startowej.
Plik inittab powinien być zmodyfikowany tak, aby pozycja
sysinit uruchamiała rc, czy jakiś inny skrypt startowy.
Dodatkowo, jeśli nie chcesz pozwolić użytkownikom logować się przez port
szeregowy, dodaj znak komentarza przed każdą linią getty zawierającą
na końcu urządzenie ttys lub ttyS. Pozostaw porty tty, abyś
mógł się zalogować z konsoli.
Minimalny plik inittab wygląda tak:
id:2:initdefault:
si::sysinit:/etc/rc
1:2345:respawn:/sbin/getty 9600 tty1
2:23:respawn:/sbin/getty 9600 tty2
Plik inittab określa, co system robi w niektórych sytuacjach i
na poszczególnych poziomach pracy. Upewnij się, że istnieją wszystkie nazwy
plików wymienione w inittab, init zawiesi się bez żadnego
komunikatu o błędzie, jeśli nie znajdzie któregoś z wymienionych tam
programów.
Należy sprawdzić, czy komendy znajdujące
się w pliku inittab odpołują się do programów, które istnieją w
odpowiednim katalogu. Jeśli umieścisz programy na dyskietce korzystając ze
spisu w dodatku
Spis plików przykładowej dyskietki głównej i skopiujesz plik inittab z dysku bez dokonania poprawek, to
prawdopodobnie ponad połowa wpisów w tym pliku będzie się odwoływała do
nieistniejących programów czy nieprawidłowych katalogów.
Niektóre programy nie mogą zostać przeniesione gdzie indziej, ponieważ inne
programy szuają ich w ściśle określonym miejscu. Na przykład w moim systemie
/etc/shutdown wymaga /etc/reboot. Jeśli przeniosę
reboot do /bin/reboot i wykonam komendę shutdown, to
wystąpi błąd, ponieważ nie może on znaleźć pliku reboot.
Jeśli chodzi o resztę, to skopiuj pozostałe pliki tekstowe oraz potrzebne
programy z katalogu /etc. Jako przykład może służyć dodatek
Spis plików przykładowej dyskietki startowej.
Prawdopodobnie wystarczy skopiować tylko te pliki, które tam wypisano,
jednak poszczególne systemy bardzo się różnią, więc nie możesz być pewien,
czy nazwy pliku na tej liście pokrywają się z nazwami w twoim systemie.
Jedyną pewną metodą jest sprawdzenie w pliku inittab, które pliki są
wymagane.
Większość systemów posiada katalog /etc/rc.d/ zawierający
skrypty dla poszczególnych poziomów pracy. Aby system działał, wymagany jest
przynajmniej jeden skrypt rc, jednak prościej skopiować plik
inittab i katalog /etc/rc.d z istniejącego
systemu i wyciąć niepotrzebne dla systemu dyskietkowego pozycje ze skryptów w
katalogu rc.d.
Katalog /bin jest odpowiednim miejscem dla dodatkowych programów
użytkowych wykonujących podstawowe operacje, takich jak ls, mv,
cat czy dd. W dodatku
Spis plików przykładowej dyskietki startowej znajdziesz przykładową listę plików
katalogu /bin i /sbin. Nie zawiera ona jednak programów
potrzebnych do odtwarzania plików z kopii zapasowych, takich jak cpio,
tar i gzip, ponieważ, aby zaoszczędzić miejsce, umieszczam je na
osobnej dyskietce narzędziowej. Gdy główna/startowa dyskietka zostaje
wystartowana, zostaje ona skopiowana do ramdysku, pozostawiając miejsce w
napędzie do zamontowania kolejnej dyskietki --- dyskietki narzędziowej.
Zwykle montuję ją w katalogu /usr.
Tworzenie dyskietki narzędziowej jest opisane dalej, w dziale Budowanie dyskietki narzędziowej. Zalecane jest skopiowanie tych samych wersji programów, co użyte do stworzenia kopii zapasowej, aby nie zdarzyło się, że nie możesz odtworzyć swojej kopii, ponieważ wersje są niekompatybilne.
Upewnij się, że skopiowałeś następujące programy: init,
getty lub ich odpowiedniki, login, mount, jakąś powłokę
potrafiącą uruchomić skrypty rc, dowiązanie sh do powłoki.
W katalogu /lib umieszczasz potrzebne biblioteki dzielone oraz
programy służące do ich ładowania. Jeśli wymagane biblioteki nie zostaną
odnalezione w katalogu /lib, to system się nie zostanie
wystartowany. Przy odrobinie szczęścia możesz ujrzeć komunikat mówiący o
błędzie.
Prawie każdy program wymaga co najmniej biblioteki libc,
libc.so.N, gdzie N to numer wersji. Sprawdz w swoim
katalogu /lib. Plik libc.so.N jest na ogół symbolicznym
dowiązaniem do aktualnej wersji:
% ls -l /lib/libc*
-rwxr-xr-x 1 root root 4016683 Apr 16 18:48 libc-2.1.1.so*
lrwxrwxrwx 1 root root 13 Apr 10 12:25 libc.so.6 ->
W tym przypadku potrzebny jest plik libc-2.1.1.so. Aby dowiedzieć się,
jakie jeszcze biblioteki są potrzebne, powinieneś sprawdzić wszystkie pliki
wykonywalne które chcesz umieścić na dyskietce i sprawdzić ich zależności
komendą ldd. Na przykład:
% ldd /sbin/mke2fs
libext2fs.so.2 => /lib/libext2fs.so.2
libcom_err.so.2 => /lib/libcom_err.so.2
libuuid.so.1 => /lib/libuuid.so.1
libc.so.5 => /lib/libc.so.5
Wymagany jest każdy plik po prawej stronie. Pamiętaj, że wymienione biblioteki mogą być tylko symbolicznymi dowiązaniami.
Zauważ, że niektóre biblioteki są całkiem spore i mogą nie zmieścić się w
głównym systemie plików. Na przykład biblioteka libc.so wspomniana
wyżej liczy około 4MB. Prawdopodobnie będziesz musiał okroić biblioteki
przed kopiowaniem. Zajrzyj do działu
Redukowanie głównego systemu plików po więcej informacji.
Dodatkowo w katalogu /lib musisz umieścić program ładujący
biblioteki. Jest to plik ld.so (dla bibliotek a.out) lub ld-linux.so
(dla bibliotek ELF). Jeśli nie jesteś pewien którego z nich potrzebujesz,
wykonaj komendę file z nazwą biblioteki jako parametr. Na przykład:
% file/lib/libc.so.4.7.2 /lib/libc.so.5.4.33 /lib/libc-2.1.1.so
/lib/libc.so.4.7.2: Linux/i386 demand-paged executable (QMAGIC), stripped
/lib/libc.so.5.4.33: ELF 32-bit LSB shared object, Intel 80386, version 1, stripped
/lib/libc-2.1.1.so: ELF 32-bit LSB shared object, Intel 80386, version 1, not stripped
QMAGIC oznacza, że wersja 4.7.2 jest biblioteką a.out, a ELF
oznacza, że wersja 5.4.33 i 2.1.1 jest biblioteką ELF.
Skopiuj odpowiedni program ładujący biblioteki do tworzonego głównego systemu plików. Powinieneś dokładnie sprawdzić, czy posiadasz wszystkie konieczne biblioteki i odpowiedni program ładujący. Jeśli jądro nie potrafi załadować potrzebnej biblioteki, na ogół zawiesza się bez żadnego komunikatu.
System może wymagać dynamicznie ładowanych bibliotek niewidocznych dla ldd.
Jeśli twój system korzysta z PAM (Pluggable Authentication Modules), to musisz się na to przygotować, ponieważ w przeciwnym wypadku nie będziesz mógł się zalogować. Ogólnie mówiąc PAM to skomplikowany modularny sposób uwierzytelniania użytkowników i kontroli ich dostępu do usług. Jeśli w katalogu /etc znajduje się katalog pam.conf lub pam.d, musisz dołączyć pewne minimalne wsparcie dla PAM. (Możesz także uruchomić ldd na pliku login, jeśli w wyjściu znajdzie się tekst libpam.so, potrzebujesz PAM).
Na szczęście kwestie bezpieczeństwa nie są zazwyczaj istotne przy tworzeniu dyskietki startowej, jako że każdy posiadający fizyczny dostęp do komputera może z nim zrobić wszystko. Tak więc możesz po prostu wyłączyć PAM tworząc w głównym systemie plików prosty plik /etc/pam.conf, taki jak ten:
OTHER auth optional /lib/security/pam_permit.so OTHER account optional /lib/security/pam_permit.so OTHER password optional /lib/security/pam_permit.so OTHER session optional /lib/security/pam_permit.so
Skopiuj także plik /lib/security/pam_permit.so do głównego systemu plików. Ta biblioteka liczy jedynie 8KB.
Zauważ, że taka konfiguracja daje każdemu pełny dostęp do plików i usług w systemie. Jeśli z jakiś względów bezpieczeństwo dyskietki startowej jest dla ciebie ważne, musisz skopiować niektóre lub wszystkie pliki konfiguracyjne PAM z twardego dysku. Przeczytaj uważnie dokumentację PAM i skopuj wszystkie potrzebne biblioteki z /lib/security do głównego systemu plików.
Musisz także skopiować na dyskietkę plik /lib/libpam.so, ale o
tym już wiesz, ponieważ uruchomiłeś ldd na /bin/login, który
pokazał zależność.
Jeśli korzystasz z glibc (aka libc6), będziesz musiał przygotować się na usługi nazw, w przeciwnym wypadku nie będziesz mógł się zalogować. Plik /etc/nsswitch.conf kontroluje dostęp do bazy danych dla poszczególnych usług. Jeśli nie planujesz korzystać z usług przez sieć (np. DNS i NIS), musisz przygotować jedynie prosty plik nsswitch.conf, taki jak ten:
passwd: files
shadow: files
group: files
hosts: files
services: files
networks: files
protocols: files
rpc: files
ethers: files
netmasks: files
bootparams: files
automount: files
aliases: files
netgroup: files
publickey: files
Określa to, że każda usługa będzie udostępniana jedynie poprzez lokalne
pliki. Będziesz musiał także dołączyć plik
/lib/libnss_files.so.1, który będzie dynamicznie ładowany
aby obsłużyć żądania.
Jeśli chcesz mieć dostęp do sieci z dyskietki startowej, możesz utworzyć
bardziej rozbudowany plik nsswitch.conf. Aby dowiedzieć się więcej,
zajrzyj na stronę man nsswitch. Pamiętaj że musisz dołączyć plik
/lib/libnss_usługa.so.1
dla każdej usługi.
Jeśli posiadasz jądro obsługujące moduły, to musisz zastanowić się, które
moduły mogą być potrzebne po wystartowaniu systemu. Prawdopodobnie
potrzebujesz modułów ftape i zftape jeśli posiadasz napęd taśmowy,
modułów do urządzeń SCSI jeśli takie posiadasz i ewentualnie modułów do
obsługi PPP i SLIP jeśli chcesz mieć dostęp do sieci.
Te moduły powinny zostać umieszczone w katalogu /lib/modules.
Powinieneś także dołączyć programy insmod, rmmod i lsmod.
Jeśli chcesz automatycznie ładować moduły, to możesz dołączyć modprobe,
depmod i swapout. Jeśli korzystasz z kerneld, to dołącz go
razem z plikiem /etc/conf.modules.
Jednak największą zaletą korzystania z modułów jest możliwość przeniesienia niektórych z nich na dystkietkę narzędziową, oszczędzając w ten sposób miejsce na głównej dyskietce. Gdy potrzebna jest obsługa wielu różnych urządzeń, takie podejście jest lepsze niż budowa jednego wielkiego jądra z wieloma wbudowanymi sterownikami.
Pamiętaj, aby wystartować skompresowany system plików ext2, musisz posiadać wbudowaną w jądro obsługę ext2 i ramdysku. Nie mogą znajdować się one w postaci modułów.
Pewne programy systemowe, takie jak login, do poprawnego działania
wymagają pliku /var/run/utmp i katalogu /var/log.
Tak więc:
mkdir -p /mnt/var/{log,run}
touch /mnt/var/run/utmp
Na koniec, gdy skopiowałeś już wszystkie wymagane biblioteki, uruchom
program ldconfig aby odświeżyć plik /etc/ld.so.cache w
głównym systemie plików. Plik ten informuje program ładujący gdzie znaleźć
biblioteki. Aby odświeżyć ld.so.cache wykonaj następujące komendy:
chdir /mnt; chroot /mnt /sbin/ldconfig
Polecenie chroot jest konieczne, ponieważ ldconfig zawsze
odświeża plik cache dla głównego katalogu.
Gdy już skończyłeś tworzenie głównego systemu plików, odmontuj go, skopiuj do pliku i skompresuj:
umount /mnt
dd if=URZĄDZENIE bs=1k | gzip -v9 > rootfs.gz
Zostanie utworzony plik rootfs.gz który jest skompresowanym głównym
systemem plików. Powinieneś sprawdzić, czy zmieści się na dyskietce, jeśli
nie, to będziesz musiał cofnąć się i usunąć jakieś pliki. Dział
Redukowanie głównego systemu plików zawiera kilka
porad na ten temat.
W tej chwili posiadasz skompresowany główny system plików. Następny krok to zbudowanie lub wybranie jądra. W wiekszości przypadków możliwe jest skopiowanie aktualnego jądra i wystartowanie z niego dyskietki. Jednak w niektórych przypadkach będziesz chciał stworzyć swoje własne jądro.
Pierwszym powodem jest jego rozmiar. Jeśli tworzysz pojedyńczą dyskietkę startową/główna, to jądro będzie jednym z największych plików na dyskietce, więc będziesz musiał jak najbardziej zredukować jego rozmiar. Aby zmniejszyć rozmiar jądra, skompiluj je z minimalną liczbą opcji konieczną do działania systemu. Powinieneś wyłączyć wszystko, co nie jest potrzebne. Można spokojnie wyrzucić obsługę sieci, jak również obsługę wszystkich napędów i innych urządzeń których nie potrzebujesz w czasie korzystania z dyskietki. Pamiętaj, że twoje jądro musi posiadać wbudowaną obsługę ramdysku oraz systemu plików ext2.
Po wybraniu minimalnej konfiguracji jądra, powinieneś zastanowić się co jeszcze może być ci potrzebne. Naczęściej korzysta się z dyskietki startowej aby sprawdzić i odzyskać uszkodzone dane w systemie plików, a do tego możesz potrzebować wbudowanej obsługi w jądrze. Na przykład jeśli swoje kopie zapasowe przechowujesz na taśmie używając Ftape, to jeśli utracisz swój system plików i napędy zawierające Ftape, nie będziesz mógł odtworzyć danych z taśm zapasowych. Będziesz musiał przeinstalować Linuxa, ściągnąć i przeinstalować ftape i dopiero wtedy odczytywać kopie zapasowe.
Generalnie chodzi o to, aby instalować w jądze obsługę wszystkich potrzebnych urządzeń wejścia/wyjścia.
Procedura kompilowania jądra jest opisana w dokumentacji dołączonej do
jądra. Jest ona bardzo łatwa, najpierw zajrzyj do katalogu
/usr/src/linux. Jeśli masz probemy ze skompilowaniem jądra, to
raczej nie powinieneś brać się do tworzenia dyskietki startowej. Pamiętaj,
aby skompresować jądro poleceniem ``make zImage''.
W tym momencie powinieneś posiadać jądro oraz skompresowany główny system plików. Jeśli tworzysz dyskietkę startową/główną, sprawdź, czy oba pliki zmieszczą się na dyskietce. Jeśli tworzysz osobno dystkietkę startową i główną, sprawdź, czy główny system plików zmieści się na jednej dyskietce.
Powinieneś zdecydować, czy używać LILO do wystartowania jądra. Alternatywnym
rozwiązaniem jest skopiowanie jądra bezpośrednio na dyskietkę i
wystartowanie bez LILO. Zaletą korzystania z LILO jest to, że
umożliwia on przekazanie pewnych parametrów do jądra które mogą być
konieczne do inicjalizacji sprzętu. Sprawdź plik
/etc/lilo.conf. Jeśli istnieje on i zawiera linię
``append=...'', prawdopodobnie musisz przekazać jakieś parametry. Wadą
korzystania z LILO jest to, że tworzenie dyskietki jest bardziej
skomplikowane, i zajmuje trochę więcej miejsca. Musisz utworzyć odrębny
system plików, który nazwiemy systemem plików jądra, do którego
skopiujesz jądro i kilka innych plików wymaganych przez LILO.
Jeśli zamierzasz korzystać z LILO, czytaj dalej. Jeśli chcesz skopiować jądro bezpośrednio na dyskietkę, przejdź do działu Przenoszenie jądra bez LILO.
Pierwszą rzeczą, która musisz zrobić, jest stworzenie małego pliku konfiguracyjnego dla LILO. Powinien on wyglądać mniej więcej tak:
boot =/dev/fd0
install =/boot/boot.b
map =/boot/map
read-write
backup =/dev/null
compact
image = KERNEL
label = Bootdisk
root =/dev/fd0
Znaczenia tych parametrów szukaj w dokumentacji LILO. Prawdopodobnie
będziesz chciał również dodać do pliku linię append=... taką samą, jak
w pliku /etc/lilo.conf na dysku twardym.
Zapisz ten plik jako bdlilo.conf.
Następnie musisz stworzyć mały system plików, który nazwiemy systemem plików jądra, aby odróżnić go od głównego systemu plików.
Najpierw sprawdź, jak duży powinien być ten system plików. Weź rozmiar
twojego jądra w blokach (rozmiar pokazywany przez komendę ``ls -l
KERNEL'' podzielony przez 1024 i zaokrąglony w górę) i dodaj 50.
Około pięćdziesiąt bloków to obszar potrzebny na i-węzły oraz pozostałe
pliki. Jeśli chcesz, możesz dokładnie obliczyć ten obszar, lub po prostu
użyć liczby 50. Jeśli tworzysz osobno dyskietkę startową i główną, to możesz
spokojnie przeznaczyć nawet więcej miejsca, jako że pierwsza dyskietka jest
w całości przeznaczona na jądro. Nazwijmy tę liczbę BLOKI_JĄDRA.
Włóż dyskietkę do stacji dysków (przyjmiemy że jest nią /dev/fd0) i utwórz na niej system plików ext2:
mke2fs -i 8192 -m 0 /dev/fd0 BLOKI_JĄDRA
Opcja ``-i 8192'' oznacza, że chcemy jeden inode co 8192 bajty.
Następnie zamontuj system plików, usuń katalog lost+found oraz utwórz
katalogi dev i boot dla LILO:
mount /dev/fd0 /mnt
rm -rf /mnt/lost+found
mkdir /mnt/{boot,dev}
Następnie utwórz urządzenia /dev/null i /dev/fd0.
Zamiast szukania ich numerów, możesz po prostu skopiować je z twardego dysku
używając opcji -R:
cp -R /dev/{null,fd0} /mnt/dev
LILO wymaga kopii swojego programu startującego, boot.b, który
możesz przegrać z twardego dysku. Zwykle znajduje się on w katalogu
/boot:
cp /boot/boot.b /mnt/boot
Na koniec skopiuj plik konfiguracyjny LILO który utworzyłeś poprzednio oraz swoje jądro. Oba pliki mogą zostać umieszczone w głównym katalogu:
cp bdlilo.conf KERNEL /mnt
W tej chwili w systemie plików jądra znajduje się wszystko co potrzebne dla
LILO, więc jesteś teraz gotowy do uruchomienia go. Opcja -r oznacza
instalowanie programu startującego w katalogu innym niż główny:
lilo -v -C bdlilo.conf -r /mnt
LILO powinien zakończyć działanie bez żadnych błędów, następnie system plików powinien wyglądać podobnie jak poniżej:
total 361 1 -rw-r--r-- 1 root root 176 Jan 10 07:22 bdlilo.conf 1 drwxr-xr-x 2 root root 1024 Jan 10 07:23 boot/ 1 drwxr-xr-x 2 root root 1024 Jan 10 07:22 dev/ 358 -rw-r--r-- 1 root root 362707 Jan 10 07:23 vmlinuz boot: total 8 4 -rw-r--r-- 1 root root 3708 Jan 10 07:22 boot.b 4 -rw------- 1 root root 3584 Jan 10 07:23 map dev: total 0 0 brw-r----- 1 root root 2, 0 Jan 10 07:22 fd0 0 crw-r--r-- 1 root root 1, 3 Jan 10 07:22 null
Nie przejmuj się, jeśli rozmiary plików sę nieco inne.
Następnie pozostaw dysk w napędzie i przenieś się do działu Konfiguracja słowa ramdysku.
Jeśli nie korzystasz z LILO, to skopiuj jądro na dyskietkę startową
używając komendy dd:
% dd if=KERNEL of=/dev/fd0 bs=1k
353+1 records in
353+1 records out
W tym przykładzie dd zapisał 353 kompletne rekordy oraz 1 niekompletny,
tak więc jądro zajmuje teraz pierwsze 353 bloki na dyskietce. Nazwij tę
liczbę BLOKI_JĄDRA i zapamiętaj ją, ponieważ będzie ona
potrzebna w następnym dziale.
Na koniec ustaw dyskietkę jako główne urządzenie i skonfigguruj je tak, aby było dostępne do zapisu i odczytu:
rdev /dev/fd0 /dev/fd0
rdev -R /dev/fd0 0
Pamiętaj, aby użyć opcji -R pisanej wielką literą w drugiej komendzie
rdev.
Wewnątrz obrazu jądra znajduje się słowo ramdysku, które
mówi, gdzie znajduje się główny system plików, oraz zawiera pewne inne opcje.
Słowo to można zmieniać za pomocą polecenia rdev, a interpretowane jest w
następujący sposób:
bity 0-10: Przemieszczenie ramdysku, w blokach 1024-bajtowych
bity 11-13: nieużywane
bit 14: Flaga oznaczająca, że ramdysk na zostać załadowany
bit 15: Flaga oznaczająca, aby pytać przez ładowaniem
głównego systemu plików
Jeśli bit 15 jest ustawiony, to podczas startu zostaniesz poproszony o włożenie do napędu nowej dyskietki. Jest to konieczne w przypadku korzystania z dwóch dyskietek.
Istnieją dwa przypadki, w zależności od tego, czy budujesz pojedynczą dyskietkę startową/główną, czy dwie osobne dyskietki, startową i główną.
BLOKI_JĄDRA). Bit 14 zostanie ustawiony na 1, a
bit 15 będzie wynosił zero.
Po skrupulatnych obliczniach wartości słowa ramdysku, ustaw ją poleceniem
rdev -r. Upewnij się, że podałeś wartość dziesiętną. Jeśli
korzystasz z LILO, to argumentem dla rdev powinna być ścieżka do
jądra, np. /mnt/vmlinuz. Jeśli kopiowałeś jądro za pomocą polecenia
dd, to użyj zamiast tego nazwę urządzenia stacji dysków (np.
/dev/fd0).
rdev -r JĄDRO_LUB_STACJA_DYSKÓW WARTOŚĆ
Jeśli korzystasz z LILO, odmontuj teraz dyskietkę.
Ostatnim krokiem jest przeniesienie głównego systemu plików.
dd z opcją
seek, która określa ile bloków należy przeskoczyć:
dd if=rootfs.gz of=/dev/fd0 bs=1k seek=BLOKI_JĄDRA
dd if=rootfs.gz of=/dev/fd0 bs=1k
Moje gratulacje, dyskietki są już gotowe! Zawsze powninieneś przetestować swoje dyskietki startowe zanim odłożysz je na bok do czasu awarii! Jeśli coś się nie uda, czytaj dalej.
Po stworzeniu dyskietek kilka pierwszych prób wystartowania systemu często kończy się niepowodzeniem. Najlepszym podejściem podczas budowania głównego systemu plików jest łączenie elementów istniejącego systemu tak, aby system dyskietkowy przynajmiej wyświetlał komunikaty na konsoli. Gdy zacznie on komunikować się z tobą, jesteś już w połowie drogi do sukcesu, ponieważ możesz zobaczyć, co sprawia problemy i naprawić je pojedynczo aż system będzie działał poprawnie. Jeśli system po prostu wiesza się bez żadnego komunikatu, to odnalezienie przyczyny staje się trudne. Stworzenie systemu, który zostanie poprawnie wystartowany do momentu, w którym będzie mógł komunikować się z użytkownikiem, wymaga zainstalowania i skonfigurowania kilku komponentów. Zalecaną metoda badania problemu gdy system nie chce się komunikować z użytkownikiem jest następująca:
Kernel panic: VFS: Unable to mount root fs on XX:YYJest to powszechny problem i ma jedynie kilka przyczyn. Po pierwsze, sprawdz nazwę urządzenia XX:YY z listą. Czy to poprawne urządzenie główne? Jeśli nie, prawdopodobnie nie uruchomiłeś
rdev -R, lub zrobiłeś to na
złym obrazie. Jeśli kod urządzenia jest poprawny, sprawdź uważnie sterowniki
włączone do jądra. Upewnij się że stacja dysków, ramdysk i system plików
ext2 zostały wbudowane.
/bin.
/dev na dysku
twardym istnieją także dla odpowiednich urządzeń na głównej dyskietce.
W wielu sytuacjach szczególnie istotne jest /dev/console.
/dev/tty1, /dev/null, /dev/zero,
/dev/mem, /dev/ram i /dev/kmem.
Gdy przeanalizujesz już wszystkie powyższe przypadki, możesz sprawdzić następujące pliki:
ldd init aby sprawdzić biblioteki wymagane przez
init. Na ogół jest to jedynie libc.so, ale zawsze warto sprawdzić.
Upewnij się, że istnieją wymagane biblioteki i program ładujący.
ld.so dla bibliotek a.out lub ld-linux.so dla bibliotek
ELF.
getty (lub podobnego programu, jak
agetty, mgetty czy getty_ps) w pliku inittab.
Porównaj je z plikiem inittab na dysku twardym. Przejrzyj strony man
używanych programów. Właśnie w pliku inittab może wystąpić najwięcej
problemów, ponieważ jego składnia zależy od konkretnego systemu i wersji
programu init. Jedynym rozwiązaniem jest przeczytanie stron man o
init oraz inittab, prześledzenie, co dokładnie system robi po
wystartowaniu. Sprawdź, czy w pliku /etc/inittab znajduje się
pozycja inicjalizacji systemu. Zawiera ona ścieżkę do skryptu inicjalizacji
systemu, który musi istnieć.
init, uruchom ldd podając jako
parametr twój program getty i sprawdź, czy istnieją wszystkie
potrzebne biblioteki oraz program ładujący.
bash czy ash), która
potrafi wykonać wszystkie skrypty rc.
Jeśli init startuje, ale otrzymujesz komunikat:
Id xxx respawning too fast: disabled for 5 minutes
pochodzi on z programu init i oznacza, że getty lub login
kończą pracę zaraz po uruchomieniu.
Sprawdz pliki getty i login i wszystkie potrzebne im biblioteki.
Upewnij się, że ich wywołania w pliku /etc/inittab są
prawidłowe. Jeśli otrzymujesz dziwne komunikaty od getty, może to
oznaczać, że jego wywołanie z /etc/inittab jest nieprawidłowe.
Opcje dla programów getty są zróżnicowane, nawet poszczególne wersje
agetty posiadają niekompatybilne ze sobą opcje przy
wywołaniu.
Jeśli podajesz poprawną nazwę użytkownika, ale system pyta natychmiast o inną nazwę, to problemem może być PAM bądź NSS. Zajrzyj do działu PAM i NSS. Problem może być także spowodowany tym, że korzystasz z haseł shadow, ale nie skopiowałeś pliku /etc/shadow na dyskietkę.
Jeśli próbujesz uruchomić jakiś program, przykładowo df, który znajduje
się na dyskietce, ale otrzymujesz komunikat: df: not found, to sprawdź
dwie rzeczy. Po pierwsze, upewnij się, że katalog w którym znajduje się
program jest w zmiennej PATH. Po drugie, sprawdź, czy istnieją wszystkie
potrzebne biblioteki oraz program ładujący.
Czasem główny system plików jest zbyt duży, aby zmieścić się na dyskietce, nawet po kompresji. Poniżej podano kilka sposobów zmniejszenia rozmiaru systemu plików, uporządkowanych według efetywności:
Standardowo dyskietki są formatowane na 1440K, ale dostępne są formaty o większej gęstości. Program fdformat umożliwia formatowanie dyskietki na następujące wielkości: 1600, 1680, 1711, 1743, 1760, 1840 i 1920. Większość napędów 1440K obsługuje dyskietki 1722K, więc dla dyskietek startowych zawsze używam tego formatu. Zobacz stronę man fdformat oraz /usr/src/linux/Documentation/devices.txt.
Najbardziej populare powłoki dla Linuxa, takie jak
bash i tcsh, zajmują bardzo dużo miejsca i wymagają wielu
bibliotek. Istnieją jednak alternatywne powłoki, takie jak
ash, lsh, kiss czy smash, które są o wiele mniejsze i
wymagają mniej (lub żadnych) bibliotek. Większość tych zastępczych powłok
jest dostępna pod adresem
http://metalab.unc.edu/pub/Linux/system/shells/. Upewnij się, że
powłoka z której korzystasz potrafi wykonać wszystkie polecenia w plikach
rc na dyskietce.
Biblioteki i programy są często nieobcięte (zawierają symbole dla debuggera).
Taki plik po uruchomieniu na nim file będzie oznaczony jako `not
stripped'. Podczas kopiowania programów do głównego systemu plików dobrym
pomysłem jest korzystanie z polecenia:
objcopy --strip-all ŹRÓDŁO CEL
Gdy kopiujesz biblioteki, użyj:
objcopy --strip-debug ŹRÓDŁÓ CEL
Jeśli jakieś programy nie są wymagane do wystartowania systemu i zalogowania się, to możesz przenieść je na dyskietkę narzędziową. Szczegółów szkukaj w dziale Tworzenie dyskietki narzędziowej. Możesz także zastanowić się nad przeniesieniem modułów na dyskietkę narzędziową.
Dział Budowanie głównego systemu plików zawiera informacje na temat tworzenia skompresowanego głównego systemu plików, który po uruchomieniu systemu jest ładowany do ramdysku. Ta metoda posiada wiele zalet, więc jest często używana. Jednak niektóre systemy posiadają za mało pamięci RAM, w takich sytuacjach główny system plików może zostać zamontowany bezpośrednio, a nie kopiowany do ramdysku.
W sumie łatwiej stworzyć taki właśnie system plików niż skompresowany, ponieważ może on zostać zbudowany bezpośrednio na dyskietce, a nie na jakimś innym urządzeniu i nie musi on być kompresowany. Opiszemy tutaj ogólnie różnice w tworzeniu takiego właśnie systemu plików. Jeśli zdecydujesz się z niego korzystać, pamiętaj, że będziesz miał do dyspozycji o wiele mniej miejsca.
mke2fs utwórz na dyskietce główny system
plików o odpowiedniej wielkości.
rdev z
odpowiednimi parametrami.
Istnieje kilka dróg na skróty. Jeśli budujesz dwu-dyskietkowy zestaw, to możesz stworzyć kompletny system plików bezpośrednio na drugiej dyskietce, bez potrzeby przenoszenia go na twardy dysk i z powrotem. Jeśli budujesz pojedynczą dyskietkę startową/główną i korzystasz z LILO, to możesz zbudować jeden system plików na całej dyskietce, zawierający jądro, pliki LILO oraz pliki główne, a następnie uruchomić LILO jako ostatni krok.
Tworzenie dyskietki narzędziowej jest stosunkowo proste, wystarczy stworzyć system plików na sformatowanej dyskietce i skopiować do niego pliki. Aby korzystać z niej podczas używania dyskietki startowej, wystarczy zamontować ją ręcznie po uruchomieniu systemu.
We wcześniejszych rozdziałach wspomnieliśmy, że dyskietka narzędziowa
powinna zostać zamontowana w katalogu /usr. W tej systuacji
programy powinny być umieszczone w katalogu /bin dyskietki
narzędziowej, aby po zamontowaniu były dostępne pod ścieżką
/usr/bin. Dodatkowe biblioteki wymagane przez programy powinny
zostać umieszczone w katalogu /lib na dyskietce.
Istnieje kilka istotnych aspektów, o których należy pamiętać podczas projektowania dyskietki narzędziowej:
W Dodatku
Spis plików przykładowej dyskietki startowej możesz zobaczyć przykładowe pliki na dyskietce narzędziowej.
Oto kilka pomysłow na programy, które mogą okazać się przydatne: programy do
badania i manipulacji dyskami (format, fdisk) i systemami plików
(mke2fs, fsck, debugfs, isofs.o), mały edytor tekstów (elvis, jove),
narzędzia do kompresji i archiwizacji (gzip, tar, cpio, afio),
narzędzia do obsługi taśm (mt, tob, taper), narzędzia komunikacyjne
(ppp.o, slip.o, minicom) i narzędzia do obsługiu urządzeń
(setserial, mknod).
Pewnie zauważyłeś, że dyskietki startowe używane przez największe dystrybucje, takie jak Slackware, RedHat czy Debian, wydają się o wiele bardziej skomplikowane, niż te opisane w tym dokumencie. Profesjonalne dyskietki startowe są bazowane na tych samych założeniach, które tu podaliśmy, ale wykorzystują różne triki, ponieważ takie dyskietki mają o wiele większe wymagania. Po pierwsze, muszą współpracować z szeroką gamą sprzętu, tak więc muszą one umieć komunikować się z użytkownikiem i ładować odpowiednie sterowniki urządzeń. Po drugie, muszą być przygotowane do działania z wieloma różnymi opcjami instalacji, dodatkowo wykonując pewne działania automatycznie. Po trzecie dystrybucyjne dyskietki startowe na ogół spęłniają zarówno rolę instalacyjną, jak i ratunkową.
Niektóre dyskietki startowe korzystają z usługi zwanej initrd
(initial ramdisk). Została ona wprowadzona w jądrze wersji 2.0.x
i daje o wiele większą elastyczność,
startując jądro w dwóch fazach. Na początku ładowany jest początkowy obraz
ramdysku z dyskietki startowej. Początkowy ramdysk to główny system plików
zawierający programy, które zostaną uruchomione zanim zostanie załadowany
prawdziwy główny system plików. Ten program najczęściej bada otoczenie i/lub
prosi użytkownika o wybranie różnych opcji startowych, takich jak
urządzenie, z którego zostanie załadowany prawdziwy główny system plików.
Często ładuje on też dodatkowe moduły nie wbudowane do jądra. Gdy działanie
tego programu zakończy się, jądro ładuje prawdziwy główny obraz i
uruchamianie jest kontynuowanie normalnie. Więcej informacji o initrd
szukaj w /usr/src/linux/Documentation/initrd.txt i
ftp://elserv.ffm.fgan.de/pub/linux/loadlin-1.6/initrd-example.tgz.
Poniżej znajduje się podsumowanie tego, jak działają dyskietki startowe poszczególnych dystrybucji, oparte na przeglądaniu ich systemu systemu plików i/lub kodu źródłowego. Nie gwarantujemy, że ta informacja jest dokładna, ani że nic się nie zmieniło od czasu opisanej wersji.
Slackware (v.2.1) po prostu startuje system przy użyciu LILO, tak jak to
opisano w dziale
Przenoszenie jądra z LILO.
Dyskietki startowe Slackware przy starcie wypisują komunikat (``Welcome
to the Slackware Linux bootkernel disk!'') używając do tego parametru
LILO message. Informuje to użytkownika, że może podać dodatkowe
parametry startowe, jeśli to konieczne. Po wystartowaniu, główny system
plików jest ładowany z drugiej dyskietki. Użytkownik uruchamia skrypt
setup który rozpoczyna instalację. Zamiast korzystać z jądra opartego
na modułach, Slackware daje użytkownikowi do dyspozycji wiele różnych jąder,
do wyboru zależnie od konfiguracji sprzętowej.
RedHat (v.4.0) także korzysta z LILO. Ładuje skompresowany ramdysk z
pierwszej dyskietki, który uruchamia specjalnie napisany program init.
Program ten pyta o sterowniki i, jeśli to konieczne, ładuje pliki z dodatkowej
dyskietki.
Debian (v.1.3) jest prawdopodobnie najbardziej skomplikowanym zestawem
dyskietek startowych. Korzysta on z programu ładującego SYSLINUX, który
ustala osopowiednie parametry, a następnie używa obrazu
initrd aby poprowadzić użytkownika przez procedurę
instalacji. Wygląda na to, że korzysta on zarówno z przerobionego programu
init, jak i z przerobionej powłoki.
Q. Próbuje wystartować system z dyskietki, ale nic się nie dzieje. Co mam zrobić?
Zajrzyj do działu Rozwiązywanie problemów powyżej.
Q. Jak działają dyskietki startowe dystrybucji Slackware/Debian/RedHat?
Zajrzyj do działu Jak to robią profesjonaliści powyżej.
Q. W jaki sposób stworzyć dyskietkę startową ze sterownikiem XYZ?
Najłatwiej zdobyć jądro z dystrybucji Slackware. Jądra Slackware zawierają sterowniki do jak największej ilości urządzeń, więc jeśli posiadasz kontroler IDE lub SCSI, istnieją duże szanse, że sterownik do urządzenia jest dołączony do jednego z jąder Slackware.
Przejdz do katalogu a1 i wybierz jądro odpowiednie dla posiadanego
typu kontrolera. Sprawdz w pliku xxxxkern.cfg dla odpowiedniego jądra
czy zawiera ono odpowiednie sterowniki. Jeśli urządzenie jest na tej liście,
to jądro to powinno wystartować twój system. Ściągnij plik xxxxkern.tgz i
skopiuj go na dyskietkę, tak jak opisano powyżej, w dziale na temat
tworzenia dyskietek startowych.
Następnie musisz sprawdzić główne urządzenie tego jądra, korzystając z komendy rdev:
rdev zImage
Komenda rdev wyświetli aktualne główne urządzenie dla tego jądra.
Jeśli nie odpowiada ono twojemu głównemu urządzeniu, użyj rdev aby
je zmienić. Na przykład jądro korzysta z /dev/sda2, ale moja
główna partycja SCSI znajduje się na urządzeniu /dev/sda8.
Aby zmienić główne urządzenie na dyskietkę, musisz użyć komendy:
rdev zImage /dev/fd0
Informacje na temat tworzenia głównych dyskietek Slackware wykraczają poza zakres tego dokumentu, więc sugeruje zajrzeć do Linux Install Guide lub zdobyć dystrybucję Slackware. Zobacz także dział ``Odnośniki'' w tym HOWTO.
Q. Jak uaktualnić jądro na mojej dyskietce?
Jeśli dyskietka startowa nie zawiera systemu plików, po prostu skopiuj jądro
za pomocą komendy dd. W przypadku dyskietki startowej/głównej użyj
komendy cp. Zajrzyj do działu ``Startowanie'' aby dowiedzieć się
szczegółów na temat tworzenia dyskietki startowej. Ten opis odnosi się także
do uaktualniania jądra.
Q. Jak dodać nowe pliki do mojej głównej dyskietki?
Najprostszym sposobem jest skopiowanie systeku plików z dyskietki z powrotem do użytego URZĄDZENIA (z działu Tworzenie systemu plików powyżej). Następnie zamontuj system plików i dokonaj zmian. Musisz wiedzieć, w którym bloku zaczynał się system plików i ile bloków zajmował:
dd if=/dev/fd0 bs=1k skip=POCZĄTEK count=BLOKI | gunzip > URZĄDZENIE
mount -t ext2 URZĄDZENIE /mnt
Po dokonaniu zmian, postępuj tak jak poprzednio (w dziale Tworzenie dyskietki) i przenieś główny system plików z powrotem na dyskietkę. Nie musisz przenosić ponownie jądra czy ponownie przeliczać słowa ramdysku jeśli nie zmieniłeś pozycji nowego systemu plików.
Q. Jak mogę usunąć LILO aby ponownie korzystać ze startowania DOS?
Tak na prawdę ten temat nie dotyczy dyskietek startowych, ale ludzie często o to pytają. Z poziomu Linuxa możesz użyć komendy:
/sbin/lilo -u
Możesz także wykorzystać dd aby przenieść kopię zapasową stworzoną
przez LILO z powrotem do bootsektora. Zajrzyj do dokumentacji LILO, jeśli
chcesz się dowiedzieć jak to zrobić.
Z poziomu systemu DOS lub Windows możesz skorzystać z polecenia DOS'a:
FDISK /MBR
MBR oznacza Master Boot Record i zastępuje bootsektor nowym DOS'owym, nie zmieniając przy tym tablicy partycji. Niektórzy puryści nie zgadzają się z tym, ale nawet autor LILO, Werner Almesberger, sugeruje to rozwiązanie. Jest ono proste, no i działa.
Q. Jak mogę wystartować system jeśli zgubiłem jądro oraz moją dyskietkę startową?
Jeśli nie masz dyskietki startowej, to najprostszym sposobem będzie zdobycie odpowiedniego jądra Slackware jak to opisano powyżej w odpowiedzi na pytanie ``Jak mogę stworzyć dyskietkę startową ze sterownikiem XXX?''. Następnie możesz wystartować komputer używając tego jądra i naprawić wszystkie problemy.
Jądro to może nie mieć ustawionego odpowiedniego głównego urządzenia. Na przykład typowe jądro SCSI Slackware za główne urządzenie uznaje /dev/sda2, a moja główna partycja Linuxowa to /dev/sda8. W tej sytuacji główne urządzenie w jądrze musi zostać zmienione.
Główne urządzenie oraz wartość słowa ramdysku możesz zmienić nawet wtedy, gdy posiadasz jedynie jądro i jakiś inny system operacyjny, na przykład DOS.
Polecenie rdev zmienia ustawienia poprzez zmianę wartości konkretnych
bajtów w pliku jądra, więc możesz zrobić to samo, jeśli tylko posiadasz
edytor heksadecymalny pracujący pod innym działającym systemem
-- przykładowo Norton Disk Editor z pakietu Norton Utilities pod DOS.
Następnie musisz sprawdzić i, jeśli to konieczne, zmienić wartości pod
następującymi przesunięciami:
HEX DEC OPIS
0x01F8 504 Młodszy bajt słowa ramdysku
0x01F9 505 Starszy bajt słowa ramdysku
0x01FC 508 Poboczny numer urządzenia - patrz niżej
0X01FD 509 Główny numer urządzenia - patrz niżej
Znaczenie słowa ramdysku zostało opisane w dziale Ustawianie słowa ramdysku powyżej.
Poboczny i głowny numer musi odpowiadać urządzeniu, na którym znajduje się główny system plików. Niektóre najczęściej używane wartości to:
DEVICE GŁÓWNY POBOCZNY
/dev/fd0 2 0 Pierwsza stacja dysków
/dev/hda1 3 1 Pierwsza partycja na pierwszym dysku IDE
/dev/sda1 8 1 Pierwsza partycja na pierwszym dysku SCSI
/dev/sda8 8 8 Ósma partycja na pierwszym dysku SCSI
Gdy już ustawisz odpowiednie wartości, możesz zapisać plik na dyskietce
korzystając z Norton Utilities Disk Editor, albo programu rawrite.exe,
który znajduje się we wszystkich dystrybucjach. Jest to program DOS'owy
który zapisuje dane w czystej postaci zaczynając od boot sektora dyskietki,
zamiast zapisywać do systemu plików. Jeśli używasz Norton Utilities, musisz
zapisać plik do fizycznej dyskietki zaczynając od jej początku.
Q. W jaki sposób mogę stworzyć dodatkowe kopie dyskietek?
Jako że nośniki magnetyczne z czasem tracą swe właściwości, powinieneś posiadać kilka kopii swoich dyskietek ratunkowych, w razie gdyby oryginały uległy uszkodzeniu.
Najprostszą metodą tworzenia kopii każdej dyskietki, włączając w to
dyskietki startowe czy narzędziowe, jest użycie komendy dd aby
skopiować zawartość oryginalnej dyskietki do pliku na dysku twardym, a
następnie użyć tej samej komendy aby skopiować plik z powrotem na dyskietkę.
Zauważ, że nie powinieneś montować dyskietek, ponieważ dd korzysta
bezpośrednio z urządzenia.
Aby skopiować oryginał, użyj polecenia:
dd if=URZĄDZENIE of=PLIK
gdzie URZĄDZENIE jest nazwą urządzenia stacji dyskietek
a PLIK jest nazwą docelowego pliku na twardym dysku
Pominięcie parametru count powoduje skopowanie całej dyskietki
(2880 bloków jeśli jest to dyskietka HD).
Aby skopiować plik spowrotem na dyskietkę, włóż dyskietkę do stacji i użyj komendy:
dd if=PLIK of=URZĄDZENIE
Zauważ, że powyższy opis zakłada, że posiadasz tylko jedną stację dysków. Jeśli posiadasz dwa napędy tego samego typu, możesz skopiować dyskietki używając komendy:
dd if=/dev/fd0 of=/dev/fd1
Q. Jak wystartować system bez wpisywania za każdym razem "ahaxxxx,nn,nn,nn"?
Jeśli dysk nie może zostać automatycznie wykryty, koniecznie jest dostarczenie parametrów do jądra, takich jak:
aha152x=0x340,11,3,1
Ten parametr może zostać dostarczony na kilka sposobów, korzystając z LILO:
lock'' aby linia poleceń została
zachowana jako domyślna, używana przy każdym starcie systemu.
append= w pliku konfiguracyjnym LILO. Pamiętaj, że
parametr musi zostać ujęty w cudzysłowy.
Przykładaowa linia poleceń dla podanego powyżej parametru może wyglądać następująco:
zImage aha152x=0x340,11,3,1 root=/dev/sda1 lock
Przekaże ona opcje urządzenia do jądra, ustawi w jądrze główne urządzenie na /dev/sda1 i zapisze linie poleceń do użycia przy każdym następnym starcie systemu.
Przykładowa opcja append wygląda następująco
append = "aha152x=0x340,11,3,1"
Pamiętaj, że parametr w linii poleceń nie może być ujęty w cudzyłowy,
ale musi być ujęty w cudzysłowy jeśli występuje w opcji append.
Pamiętaj także, że w jądrze musi znajdować się sterownik dla podanego typu
urządzenia. Jeśli tak nie jest, będziesz musiał przekompilować jądro
aby zawierało odpowiednie sterowniki. Szczegóły na temat rekompilacji jądra
znajdziesz w pliku README w katalogu /usr/src/linux oraz w
Linux FAQ i Installation HOWTO. Ewentualnie możesz zdobyć odpowiednie jądro
dla tego urządzenia i zainstalować je.
Przed ekperymentami z LILO zalecane jest zapoznanie się z jego dokumentacją.
Nieprawidłowe użycie opcji BOOT może uszkodzić partycję.
Q. Podczas staru otrzymuje komunikat błędu "A: cannot execute
B". Co to oznacza?
W niektórych przypadkach ścieżki do plików są na stałe zapisane w niektórych
programach. Nie zdarza się to zawsze, ale może wyjaśnić dlaczego program nie
może zostać odnaleziony w twoim systemie nawet jeśli jesteś pewien że się
tam znajduje. Możesz sprawdzić, czy program ma zapisaną na stałe lokalizację
jakiegoś innego programu korzystając z komendy strings i przepuszczając
jej wyjście przez filtr grep.
Niektóre znane przypadki zapisanych na stałe lokalizacji:
shutdown mają zapisaną na stałe lokalizację
/etc/reboot, tak więc reboot musi zostać umieszczony
w katalogu /etc.
init.
Aby naprawić ten problem przenieś program do odpowiedniego katalogu, lub
zmień pliki konfiguracyjne (np. inittab) aby wskazywały na poprawny
katalog. Jeśli masz wątpliwości, umieść program w tym samym katalogu,
w którym znajdował się na dysku twardym oraz użyj tych samych plików
inittab i /etc/rc.d.
Q. Moje jądro posiada obsługę ramdysku, ale inicjuje go z wielkością 0K.
W takiej sytuacji podczas startu systemu pojawi się informacja:
Ramdisk driver initialized : 16 ramdisks of 0K size
Dzieje się tak dlatego, że rozmiar ramdysko został ustawiony na 0 przez jądro podczas startu systemu. Najprawdopodobniej dzieje się tak przez parametr w pliku konfiguracyjnym LILO:
ramdisk= 0
Który w starszych dystrybucjach został umieszczany w przykładowym pliku konfiguracyjnym LILO. Jeśli posiadasz taką linię, usuń ją.
Skutki korzystania z ramdysku o rozmiarze 0K są nieprzewidywalne i mogą doprowadzić do błędów jądra.
Gdy ściągasz pakiet, zawsze znajdź jego najnowszą wersję, chyba że masz dobre powody aby tego nie robić.
Poniżej znajdują się odnośniki do dyskietek startowych poszczególnych dystrybucji. Zawsze korzystaj z mirrorów, aby zredukować obciążenie serwera.
Oprócz tych dyskietek dystrybucyjnych, dostępne są także poniższe dyskietki ratunkowe. Są one dostępne w katalogu http://metalab.unc.edu/pub/Linux/system/recovery/!INDEX.html, chyba że podano inaczej.
tomsrtbt, autorstwa Toma Oehser, to pojedyncza dyskietka
startowa/główna oparta na jądrze 2.0 z duża ilością dodatkowych funkcji i
programów. Obsługuje IDE, SCSI, napęd taśmowy, karty sieciowe, PCMCIA i inne.
Zawartych jest ponad 100 programów narzędziowych do naprawy i odtwarzania
dysków. Pakiet zawiera także skrypty służące do rozłożenia i złożenia z
powrotem obrazu dyskietki tak, aby można było zmodyfikować jej zawartość.
rescue02, autorstwa Johna Comyns, to dyskietka ratunkowa oparta na
jądrze 1.2.84, z obsługą IDE, Adaptec 1542 oraz NCR53C7,8xx. Korzysta z
plików wykonywalnych ELF, ale ma wystarczająco dużo komend, więc może zostać
wykorzystana pod każdym systemem. Zawiera moduły dla pozostałych kart SCSI,
które mogą zostać załadowane po wystartowaniu systemu. Prawdopodobnie
dyskietka ta nie będzie działać na systemach z 4MB RAM, ponieważ
korzysta z ramdysku wielkości 3MB.
resque_disk-2.0.22, autorstwa Sergei'a Viznyuk, to
dyskietka startowa oparta o jądro 2.0.22 z wbudowaną obsługą IDE, wielu
różnych kontrolerów SCSI oraz ELF/a.out. Dodatkowo zawiera wiele modułów i
użytecznych narzędzi do naprawy i odtwarzania twardego dysku.
cramdisk oparte na jądrze 2.0.23 działają już na
maszynach z 4 i 8MB RAM. Zawierają emulację koprocesora, obsługę sieci (PPP,
NE2000, 3C509) lub obsługę napędu ZIP. Te dyskietki wystartują na komputerze
386 z 4MB RAM. Obsługują DOS, więc możesz ściągnąć je z sieci na partycję
DOS.
http://metalabs.unc.edu/pub/Linux/system/recovery/images/
Na metalab.unc.edu można znaleźć kilka pakietów do tworzenia dyskietek ratunkowych. Korzystając z tych pakietów najczęściej wybierasz pliki do załączenia na dyskietce, a reszta dzieje się automatycznie (do pewnego stopnia). Aby uzyskać więcej informacji przeczytaj plik http://metalab.unc.edu/pub/Linux/system/recovery/!INDEX.html. Sprawdź daty utworzenia poszczególnych pakietów -- niektóre z nich nie były uaktualniane od kilku lat i nie pozwalają na tworzenie skompresowanego systemu plików ładowanego do ramdysku. Z tego co wiem jedynie Yard posiada obsługę ramdysku.
Graham Chapman napisał zestaw skryptów użytecznych jako przykłady jak tworzyć dyskietki startowe. Skrypty te w poprzedniej wersji tego dokumentu znajdowały się w załączniku, ale zostały z niego usunięte i umieszczone na stronie WWW:
http://www.zeta.org.au/~grahamc/linux.html
Skrypty te mogą okazać się pożyteczne, ale zawsze czytaj uważnie instrukcje do nich dołączone -- jeśli przykładowo wybierzesz złe urządzenie wymiany, twój główny system plików zostanie w całości i nieodwracalnie usunięty. Upewnij się że skonfigurowałeś wszystko poprawnie zanim użyjesz skryptów!
Napisany przez Wernera Almesberger. Doskonały program ładujący, zawierający w dokumentacji informacje na temat bootsektora oraz pierwszych faz startowania systemu.
Znajdziesz go pod adresem ftp://tsx-11.mit.edu/pub/linux/packages/lilo/. Jest on także dostępny na Metalab i jego mirrorach.
Dokumenty te dostępne są one z wielu źródeł. Przeglądnij grupę usenet
news.answers oraz comp.os.linux.announce.
FAQ jest dostępne pod adresem http://metalab.unc.edu/pub/Linux/docs/faqs/linux-faq a dokumenty HOWTO pod adresem http://metalab.unc.edu/pub/Linux/docs/HOWTO.
Większość dokumentacji do Linuxa dostępna jest na stronie The Linux Documentation Project homepage.
Ewentualnie możesz wysłać list pod adres mail-server@rtfm.mit.edu
ze słowem ``help'' w treści wiadomości, i robić to, co podają otrzymane
instrukcje.
Od tłumacza: Polskie wersje dokumentów HOWTO znajdziesz pod adresem Jak To Zrobić.
Doskonały opis działania ramdysku znajduje się w dokumentacji dostarczanej razem z jądrem Linuxa. Zajrzyj do pliku /usr/src/linux/Documentation/ramdisk.txt. Został on napisany przez Paula Gortmaker i zawiera dział na temat tworzenia skompresowanego ramdysku.
Więcej szczegółow na temat procesu startowania Linuxa znajdziesz w następujących miejscach:
shigio@wafu.netgate.net). Poniżej znajdują się
niektóre interesujące pliki:
Zawiera kod w assemblerze dotyczący bootsektora.
Zawiera kod dekompresujący jądro.
Katalog zawierający kod inicjujący jądro. Plik setup.c zawiera słowo
ramdysku
Zawiera sterownik ramdysku. Procedury rd_load oraz
rd_load_image ładują bloki z urządzenia do ramdysku.
Procedura identify_ramdisk_image ustala, jaki tym
systemu plików został znaleziony oraz czy jest on skompresowany.
W usenecie ludzie często zadają pytania na ten temat, więc umieściliśmy je tutaj dla szerszego grona. To podsumowanie pochodzi z LILO User Documentation Wernera Almsberger, dostępnego pod adresem ftp://metalab.unc.edu/pub/Linux/system/boot/lilo/lilo-u-21.ps.gz.
Gdy LILO ładuje się, wyświetla słowo ``LILO''. Każda litera jest
wyświetlana po lub przed wykonaniem jakiejś czynności. Jeśli w pewnym
momencie wystąpi błąd, można wykorzystać litery do zidentyfikowania
problemu.
Żadna część LILO nie została załadowana. LILO nie został zainstalowany, albo partycja w której bootsektorze LILO został zainstalowany nie jest aktywna.
Rozpoczęła się pierwsza faza programu ładującego, ale niemożliwe jest przejście do drugiej fazy. Dwucyfrowy kod błędu oznacza rodzaj błędu (patrz także dział ``Disk error codes''). Zwykle dzieje się tak z powodu awarii nośnika lub złych parametrów dysku.
Program ładujący pierwszej fazy załadował drugą fazę, ale nie udało mu się jej uruchomić. Może być to spowodowane błednymi parametrami dysku lub przeniesieniem pliku /boot/boot.b bez wywołania instalatora.
Rozpoczął się program ładujący drugiej fazy, ale nie udało mu się załadaować tablicy deskryptorów z pliku mapy. Najczęściej jest to spowodowane awarią nośnika lub błędnymi parametrami dysku.
Program ładujący drugiej fazy został załadowany pod nieprawidłowym adresem. Zwykle jest to spowodowane błędnymi parametrami dysku lub przeniesieniem pliku /boot/boot.b bez uruchomienia instalatora.
Tablica deskryptorów jest nieprawidłowa. Może to być spowodowane błędnymi parametrami dysku lub przeniesieniem pliku /boot/map bez uruchomienia istalatora mapy.
Wszystkie elementy LILO zostały prawidłowo załadowane.
Jeśli BIOS zasygnalizuje błąd gdy LILO próbuje załadować obraz startowy,
wyświetlany jest odpowiedni kod błędu. Kody te są z zakresu od 0x00 do
0xbb. W LILO User Guide znajduje się ich wyjaśnienie.
Poniżej znajduje się zawartość przykładowej dyskietki głównej i narzędziowej.
Root directory:
drwx--x--x 2 root root 1024 Nov 1 15:39 bin
drwx--x--x 2 root root 4096 Nov 1 15:39 dev
drwx--x--x 3 root root 1024 Nov 1 15:39 etc
drwx--x--x 4 root root 1024 Nov 1 15:39 lib
drwx--x--x 5 root root 1024 Nov 1 15:39 mnt
drwx--x--x 2 root root 1024 Nov 1 15:39 proc
drwx--x--x 2 root root 1024 Nov 1 15:39 root
drwx--x--x 2 root root 1024 Nov 1 15:39 sbin
drwx--x--x 2 root root 1024 Nov 1 15:39 tmp
drwx--x--x 7 root root 1024 Nov 1 15:39 usr
drwx--x--x 5 root root 1024 Nov 1 15:39 var
/bin:
-rwx--x--x 1 root root 62660 Nov 1 15:39 ash
-rwx--x--x 1 root root 9032 Nov 1 15:39 cat
-rwx--x--x 1 root root 10276 Nov 1 15:39 chmod
-rwx--x--x 1 root root 9592 Nov 1 15:39 chown
-rwx--x--x 1 root root 23124 Nov 1 15:39 cp
-rwx--x--x 1 root root 23028 Nov 1 15:39 date
-rwx--x--x 1 root root 14052 Nov 1 15:39 dd
-rwx--x--x 1 root root 14144 Nov 1 15:39 df
-rwx--x--x 1 root root 69444 Nov 1 15:39 egrep
-rwx--x--x 1 root root 395 Nov 1 15:39 false
-rwx--x--x 1 root root 69444 Nov 1 15:39 fgrep
-rwx--x--x 1 root root 69444 Nov 1 15:39 grep
-rwx--x--x 3 root root 45436 Nov 1 15:39 gunzip
-rwx--x--x 3 root root 45436 Nov 1 15:39 gzip
-rwx--x--x 1 root root 8008 Nov 1 15:39 hostname
-rwx--x--x 1 root root 12736 Nov 1 15:39 ln
-rws--x--x 1 root root 15284 Nov 1 15:39 login
-rwx--x--x 1 root root 29308 Nov 1 15:39 ls
-rwx--x--x 1 root root 8268 Nov 1 15:39 mkdir
-rwx--x--x 1 root root 8920 Nov 1 15:39 mknod
-rwx--x--x 1 root root 24836 Nov 1 15:39 more
-rws--x--x 1 root root 37640 Nov 1 15:39 mount
-rwx--x--x 1 root root 12240 Nov 1 15:39 mt
-rwx--x--x 1 root root 12932 Nov 1 15:39 mv
-r-x--x--x 1 root root 12324 Nov 1 15:39 ps
-rwx--x--x 1 root root 5388 Nov 1 15:39 pwd
-rwx--x--x 1 root root 10092 Nov 1 15:39 rm
lrwxrwxrwx 1 root root 3 Nov 1 15:39 sh -> ash
-rwx--x--x 1 root root 25296 Nov 1 15:39 stty
-rws--x--x 1 root root 12648 Nov 1 15:39 su
-rwx--x--x 1 root root 4444 Nov 1 15:39 sync
-rwx--x--x 1 root root 110668 Nov 1 15:39 tar
-rwx--x--x 1 root root 19712 Nov 1 15:39 touch
-rwx--x--x 1 root root 395 Nov 1 15:39 true
-rws--x--x 1 root root 19084 Nov 1 15:39 umount
-rwx--x--x 1 root root 5368 Nov 1 15:39 uname
-rwx--x--x 3 root root 45436 Nov 1 15:39 zcat
/dev:
lrwxrwxrwx 1 root root 6 Nov 1 15:39 cdrom -> cdu31a
brw-rw-r-- 1 root root 15, 0 May 5 1998 cdu31a
crw------- 1 root root 4, 0 Nov 1 15:29 console
crw-rw-rw- 1 root uucp 5, 64 Sep 9 19:46 cua0
crw-rw-rw- 1 root uucp 5, 65 May 5 1998 cua1
crw-rw-rw- 1 root uucp 5, 66 May 5 1998 cua2
crw-rw-rw- 1 root uucp 5, 67 May 5 1998 cua3
brw-rw---- 1 root floppy 2, 0 Aug 8 13:54 fd0
brw-rw---- 1 root floppy 2, 36 Aug 8 13:54 fd0CompaQ
brw-rw---- 1 root floppy 2, 84 Aug 8 13:55 fd0D1040
brw-rw---- 1 root floppy 2, 88 Aug 8 13:55 fd0D1120
brw-rw---- 1 root floppy 2, 12 Aug 8 13:54 fd0D360
brw-rw---- 1 root floppy 2, 16 Aug 8 13:54 fd0D720
brw-rw---- 1 root floppy 2, 120 Aug 8 13:55 fd0D800
brw-rw---- 1 root floppy 2, 32 Aug 8 13:54 fd0E2880
brw-rw---- 1 root floppy 2, 104 Aug 8 13:55 fd0E3200
brw-rw---- 1 root floppy 2, 108 Aug 8 13:55 fd0E3520
brw-rw---- 1 root floppy 2, 112 Aug 8 13:55 fd0E3840
brw-rw---- 1 root floppy 2, 28 Aug 8 13:54 fd0H1440
brw-rw---- 1 root floppy 2, 124 Aug 8 13:55 fd0H1600
brw-rw---- 1 root floppy 2, 44 Aug 8 13:55 fd0H1680
brw-rw---- 1 root floppy 2, 60 Aug 8 13:55 fd0H1722
brw-rw---- 1 root floppy 2, 76 Aug 8 13:55 fd0H1743
brw-rw---- 1 root floppy 2, 96 Aug 8 13:55 fd0H1760
brw-rw---- 1 root floppy 2, 116 Aug 8 13:55 fd0H1840
brw-rw---- 1 root floppy 2, 100 Aug 8 13:55 fd0H1920
lrwxrwxrwx 1 root root 7 Nov 1 15:39 fd0H360 -> fd0D360
lrwxrwxrwx 1 root root 7 Nov 1 15:39 fd0H720 -> fd0D720
brw-rw---- 1 root floppy 2, 52 Aug 8 13:55 fd0H820
brw-rw---- 1 root floppy 2, 68 Aug 8 13:55 fd0H830
brw-rw---- 1 root floppy 2, 4 Aug 8 13:54 fd0d360
brw-rw---- 1 root floppy 2, 8 Aug 8 13:54 fd0h1200
brw-rw---- 1 root floppy 2, 40 Aug 8 13:54 fd0h1440
brw-rw---- 1 root floppy 2, 56 Aug 8 13:55 fd0h1476
brw-rw---- 1 root floppy 2, 72 Aug 8 13:55 fd0h1494
brw-rw---- 1 root floppy 2, 92 Aug 8 13:55 fd0h1600
brw-rw---- 1 root floppy 2, 20 Aug 8 13:54 fd0h360
brw-rw---- 1 root floppy 2, 48 Aug 8 13:55 fd0h410
brw-rw---- 1 root floppy 2, 64 Aug 8 13:55 fd0h420
brw-rw---- 1 root floppy 2, 24 Aug 8 13:54 fd0h720
brw-rw---- 1 root floppy 2, 80 Aug 8 13:55 fd0h880
brw-rw---- 1 root disk 3, 0 May 5 1998 hda
brw-rw---- 1 root disk 3, 1 May 5 1998 hda1
brw-rw---- 1 root disk 3, 2 May 5 1998 hda2
brw-rw---- 1 root disk 3, 3 May 5 1998 hda3
brw-rw---- 1 root disk 3, 4 May 5 1998 hda4
brw-rw---- 1 root disk 3, 5 May 5 1998 hda5
brw-rw---- 1 root disk 3, 6 May 5 1998 hda6
brw-rw---- 1 root disk 3, 64 May 5 1998 hdb
brw-rw---- 1 root disk 3, 65 May 5 1998 hdb1
brw-rw---- 1 root disk 3, 66 May 5 1998 hdb2
brw-rw---- 1 root disk 3, 67 May 5 1998 hdb3
brw-rw---- 1 root disk 3, 68 May 5 1998 hdb4
brw-rw---- 1 root disk 3, 69 May 5 1998 hdb5
brw-rw---- 1 root disk 3, 70 May 5 1998 hdb6
crw-r----- 1 root kmem 1, 2 May 5 1998 kmem
crw-r----- 1 root kmem 1, 1 May 5 1998 mem
lrwxrwxrwx 1 root root 12 Nov 1 15:39 modem -> ../dev/ttyS1
lrwxrwxrwx 1 root root 12 Nov 1 15:39 mouse -> ../dev/psaux
crw-rw-rw- 1 root root 1, 3 May 5 1998 null
crwxrwxrwx 1 root root 10, 1 Oct 5 20:22 psaux
brw-r----- 1 root disk 1, 1 May 5 1998 ram
brw-rw---- 1 root disk 1, 0 May 5 1998 ram0
brw-rw---- 1 root disk 1, 1 May 5 1998 ram1
brw-rw---- 1 root disk 1, 2 May 5 1998 ram2
brw-rw---- 1 root disk 1, 3 May 5 1998 ram3
brw-rw---- 1 root disk 1, 4 May 5 1998 ram4
brw-rw---- 1 root disk 1, 5 May 5 1998 ram5
brw-rw---- 1 root disk 1, 6 May 5 1998 ram6
brw-rw---- 1 root disk 1, 7 May 5 1998 ram7
brw-rw---- 1 root disk 1, 8 May 5 1998 ram8
brw-rw---- 1 root disk 1, 9 May 5 1998 ram9
lrwxrwxrwx 1 root root 4 Nov 1 15:39 ramdisk -> ram0
*** Dołączyłem jedynie urządzenia IDE dla partycji których używam.
*** Jeśli korzystasz ze SCSI, użyj zamiast nich urządzeń /dev/sdXX.
crw------- 1 root root 4, 0 May 5 1998 tty0
crw--w---- 1 root tty 4, 1 Nov 1 15:39 tty1
crw------- 1 root root 4, 2 Nov 1 15:29 tty2
crw------- 1 root root 4, 3 Nov 1 15:29 tty3
crw------- 1 root root 4, 4 Nov 1 15:29 tty4
crw------- 1 root root 4, 5 Nov 1 15:29 tty5
crw------- 1 root root 4, 6 Nov 1 15:29 tty6
crw------- 1 root root 4, 7 May 5 1998 tty7
crw------- 1 root tty 4, 8 May 5 1998 tty8
crw------- 1 root tty 4, 9 May 8 12:57 tty9
crw-rw-rw- 1 root root 4, 65 Nov 1 12:17 ttyS1
crw-rw-rw- 1 root root 1, 5 May 5 1998 zero
/etc:
-rw------- 1 root root 164 Nov 1 15:39 conf.modules
-rw------- 1 root root 668 Nov 1 15:39 fstab
-rw------- 1 root root 71 Nov 1 15:39 gettydefs
-rw------- 1 root root 389 Nov 1 15:39 group
-rw------- 1 root root 413 Nov 1 15:39 inittab
-rw------- 1 root root 65 Nov 1 15:39 issue
-rw-r--r-- 1 root root 746 Nov 1 15:39 ld.so.cache
*** Plik ld.so.cache jest tworzony przez ldconfig i przechowuje
*** lokalizacje bibliotek. Podczas startowania wystąpi wiele błędów
*** jeśli brakuje ld.so.cache. Możesz odtworzyć go po stworzeniu
*** dyskietki, albo dodać ldconfig do dyskietki i uruchamiać go ze
*** skryptu rc.x.
-rw------- 1 root root 32 Nov 1 15:39 motd
-rw------- 1 root root 949 Nov 1 15:39 nsswitch.conf
drwx--x--x 2 root root 1024 Nov 1 15:39 pam.d
-rw------- 1 root root 139 Nov 1 15:39 passwd
-rw------- 1 root root 516 Nov 1 15:39 profile
-rwx--x--x 1 root root 387 Nov 1 15:39 rc
-rw------- 1 root root 55 Nov 1 15:39 shells
-rw------- 1 root root 774 Nov 1 15:39 termcap
-rw------- 1 root root 78 Nov 1 15:39 ttytype
lrwxrwxrwx 1 root root 15 Nov 1 15:39 utmp -> ../var/run/utmp
lrwxrwxrwx 1 root root 15 Nov 1 15:39 wtmp -> ../var/log/wtmp
/etc/pam.d:
-rw------- 1 root root 356 Nov 1 15:39 other
/lib:
*** Posiadam system ELF z glibc, więc potrzebuję loadera ld-2.so
-rwxr-xr-x 1 root root 45415 Nov 1 15:39 ld-2.0.7.so
lrwxrwxrwx 1 root root 11 Nov 1 15:39 ld-linux.so.2 -> ld-2.0.7.so
-rwxr-xr-x 1 root root 731548 Nov 1 15:39 libc-2.0.7.so
lrwxrwxrwx 1 root root 13 Nov 1 15:39 libc.so.6 -> libc-2.0.7.so
lrwxrwxrwx 1 root root 17 Nov 1 15:39 libcom_err.so.2 -> libcom_err.so.2.0
-rwxr-xr-x 1 root root 6209 Nov 1 15:39 libcom_err.so.2.0
-rwxr-xr-x 1 root root 153881 Nov 1 15:39 libcrypt-2.0.7.so
lrwxrwxrwx 1 root root 17 Nov 1 15:39 libcrypt.so.1 -> libcrypt-2.0.7.so
-rwxr-xr-x 1 root root 12962 Nov 1 15:39 libdl-2.0.7.so
lrwxrwxrwx 1 root root 14 Nov 1 15:39 libdl.so.2 -> libdl-2.0.7.so
lrwxrwxrwx 1 root root 16 Nov 1 15:39 libext2fs.so.2 -> libext2fs.so.2.4
-rwxr-xr-x 1 root root 81382 Nov 1 15:39 libext2fs.so.2.4
-rwxr-xr-x 1 root root 25222 Nov 1 15:39 libnsl-2.0.7.so
lrwxrwxrwx 1 root root 15 Nov 1 15:39 libnsl.so.1 -> libnsl-2.0.7.so
-rwx--x--x 1 root root 178336 Nov 1 15:39 libnss_files-2.0.7.so
lrwxrwxrwx 1 root root 21 Nov 1 15:39 libnss_files.so.1 -> libnss_files-2.0.7.so
lrwxrwxrwx 1 root root 14 Nov 1 15:39 libpam.so.0 -> libpam.so.0.64
-rwxr-xr-x 1 root root 26906 Nov 1 15:39 libpam.so.0.64
lrwxrwxrwx 1 root root 19 Nov 1 15:39 libpam_misc.so.0 -> libpam_misc.so.0.64
-rwxr-xr-x 1 root root 7086 Nov 1 15:39 libpam_misc.so.0.64
-r-xr-xr-x 1 root root 35615 Nov 1 15:39 libproc.so.1.2.6
lrwxrwxrwx 1 root root 15 Nov 1 15:39 libpwdb.so.0 -> libpwdb.so.0.54
-rw-r--r-- 1 root root 121899 Nov 1 15:39 libpwdb.so.0.54
lrwxrwxrwx 1 root root 19 Nov 1 15:39 libtermcap.so.2 -> libtermcap.so.2.0.8
-rwxr-xr-x 1 root root 12041 Nov 1 15:39 libtermcap.so.2.0.8
-rwxr-xr-x 1 root root 12874 Nov 1 15:39 libutil-2.0.7.so
lrwxrwxrwx 1 root root 16 Nov 1 15:39 libutil.so.1 -> libutil-2.0.7.so
lrwxrwxrwx 1 root root 14 Nov 1 15:39 libuuid.so.1 -> libuuid.so.1.1
-rwxr-xr-x 1 root root 8039 Nov 1 15:39 libuuid.so.1.1
drwx--x--x 3 root root 1024 Nov 1 15:39 modules
drwx--x--x 2 root root 1024 Nov 1 15:39 security
/lib/modules:
drwx--x--x 4 root root 1024 Nov 1 15:39 2.0.35
/lib/modules/2.0.35:
drwx--x--x 2 root root 1024 Nov 1 15:39 block
drwx--x--x 2 root root 1024 Nov 1 15:39 cdrom
/lib/modules/2.0.35/block:
-rw------- 1 root root 7156 Nov 1 15:39 loop.o
/lib/modules/2.0.35/cdrom:
-rw------- 1 root root 24108 Nov 1 15:39 cdu31a.o
/lib/security:
-rwx--x--x 1 root root 8771 Nov 1 15:39 pam_permit.so
*** Katalogi do montowania.
/mnt:
drwx--x--x 2 root root 1024 Nov 1 15:39 SparQ
drwx--x--x 2 root root 1024 Nov 1 15:39 cdrom
drwx--x--x 2 root root 1024 Nov 1 15:39 floppy
/proc:
/root:
-rw------- 1 root root 176 Nov 1 15:39 .bashrc
-rw------- 1 root root 182 Nov 1 15:39 .cshrc
-rw------- 1 root root 47 Nov 1 15:39 .glintrc
-rwx--x--x 1 root root 455 Nov 1 15:39 .profile
-rw------- 1 root root 4014 Nov 1 15:39 .tcshrc
/sbin:
-rwx--x--x 1 root root 23976 Nov 1 15:39 depmod
-rwx--x--x 2 root root 274600 Nov 1 15:39 e2fsck
-rwx--x--x 1 root root 41268 Nov 1 15:39 fdisk
-rwx--x--x 1 root root 9396 Nov 1 15:39 fsck
-rwx--x--x 2 root root 274600 Nov 1 15:39 fsck.ext2
-rwx--x--x 1 root root 29556 Nov 1 15:39 getty
-rwx--x--x 1 root root 6620 Nov 1 15:39 halt
-rwx--x--x 1 root root 23116 Nov 1 15:39 init
-rwx--x--x 1 root root 25612 Nov 1 15:39 insmod
-rwx--x--x 1 root root 10368 Nov 1 15:39 kerneld
-rwx--x--x 1 root root 110400 Nov 1 15:39 ldconfig
-rwx--x--x 1 root root 6108 Nov 1 15:39 lsmod
-rwx--x--x 2 root root 17400 Nov 1 15:39 mke2fs
-rwx--x--x 1 root root 4072 Nov 1 15:39 mkfs
-rwx--x--x 2 root root 17400 Nov 1 15:39 mkfs.ext2
-rwx--x--x 1 root root 5664 Nov 1 15:39 mkswap
-rwx--x--x 1 root root 22032 Nov 1 15:39 modprobe
lrwxrwxrwx 1 root root 4 Nov 1 15:39 reboot -> halt
-rwx--x--x 1 root root 7492 Nov 1 15:39 rmmod
-rwx--x--x 1 root root 12932 Nov 1 15:39 shutdown
lrwxrwxrwx 1 root root 6 Nov 1 15:39 swapoff -> swapon
-rwx--x--x 1 root root 5124 Nov 1 15:39 swapon
lrwxrwxrwx 1 root root 4 Nov 1 15:39 telinit -> init
-rwx--x--x 1 root root 6944 Nov 1 15:39 update
/tmp:
/usr:
drwx--x--x 2 root root 1024 Nov 1 15:39 bin
drwx--x--x 2 root root 1024 Nov 1 15:39 lib
drwx--x--x 3 root root 1024 Nov 1 15:39 man
drwx--x--x 2 root root 1024 Nov 1 15:39 sbin
drwx--x--x 3 root root 1024 Nov 1 15:39 share
lrwxrwxrwx 1 root root 10 Nov 1 15:39 tmp -> ../var/tmp
/usr/bin:
-rwx--x--x 1 root root 37164 Nov 1 15:39 afio
-rwx--x--x 1 root root 5044 Nov 1 15:39 chroot
-rwx--x--x 1 root root 10656 Nov 1 15:39 cut
-rwx--x--x 1 root root 63652 Nov 1 15:39 diff
-rwx--x--x 1 root root 12972 Nov 1 15:39 du
-rwx--x--x 1 root root 56552 Nov 1 15:39 find
-r-x--x--x 1 root root 6280 Nov 1 15:39 free
-rwx--x--x 1 root root 7680 Nov 1 15:39 head
-rwx--x--x 1 root root 8504 Nov 1 15:39 id
-r-sr-xr-x 1 root bin 4200 Nov 1 15:39 passwd
-rwx--x--x 1 root root 14856 Nov 1 15:39 tail
-rwx--x--x 1 root root 19008 Nov 1 15:39 tr
-rwx--x--x 1 root root 7160 Nov 1 15:39 wc
-rwx--x--x 1 root root 4412 Nov 1 15:39 whoami
/usr/lib:
lrwxrwxrwx 1 root root 17 Nov 1 15:39 libncurses.so.4 -> libncurses.so.4.2
-rw-r--r-- 1 root root 260474 Nov 1 15:39 libncurses.so.4.2
/usr/sbin:
-r-x--x--x 1 root root 13684 Nov 1 15:39 fuser
-rwx--x--x 1 root root 3876 Nov 1 15:39 mklost+found
/usr/share:
drwx--x--x 4 root root 1024 Nov 1 15:39 terminfo
/usr/share/terminfo:
drwx--x--x 2 root root 1024 Nov 1 15:39 l
drwx--x--x 2 root root 1024 Nov 1 15:39 v
/usr/share/terminfo/l:
-rw------- 1 root root 1552 Nov 1 15:39 linux
-rw------- 1 root root 1516 Nov 1 15:39 linux-m
-rw------- 1 root root 1583 Nov 1 15:39 linux-nic
/usr/share/terminfo/v:
-rw------- 2 root root 1143 Nov 1 15:39 vt100
-rw------- 2 root root 1143 Nov 1 15:39 vt100-am
/var:
drwx--x--x 2 root root 1024 Nov 1 15:39 log
drwx--x--x 2 root root 1024 Nov 1 15:39 run
drwx--x--x 2 root root 1024 Nov 1 15:39 tmp
/var/log:
-rw------- 1 root root 0 Nov 1 15:39 wtmp
/var/run:
-rw------- 1 root root 0 Nov 1 15:39 utmp
/var/tmp:
total 579
-rwxr-xr-x 1 root root 42333 Jul 28 19:05 cpio*
-rwxr-xr-x 1 root root 32844 Aug 28 19:50 debugfs*
-rwxr-xr-x 1 root root 103560 Jul 29 21:31 elvis*
-rwxr-xr-x 1 root root 29536 Jul 28 19:04 fdisk*
-rw-r--r-- 1 root root 128254 Jul 28 19:03 ftape.o
-rwxr-xr-x 1 root root 17564 Jul 25 03:21 ftmt*
-rwxr-xr-x 1 root root 64161 Jul 29 20:47 grep*
-rwxr-xr-x 1 root root 45309 Jul 29 20:48 gzip*
-rwxr-xr-x 1 root root 23560 Jul 28 19:04 insmod*
-rwxr-xr-x 1 root root 118 Jul 28 19:04 lsmod*
lrwxrwxrwx 1 root root 5 Jul 28 19:04 mt -> mt-st*
-rwxr-xr-x 1 root root 9573 Jul 28 19:03 mt-st*
lrwxrwxrwx 1 root root 6 Jul 28 19:05 rmmod -> insmod*
-rwxr-xr-x 1 root root 104085 Jul 28 19:05 tar*
lrwxrwxrwx 1 root root 5 Jul 29 21:35 vi -> elvis*
doc-linux-pl-2002.06.14.orig/html/Bzip2-HOWTO.pl.html 0100664 0001750 0001750 00000052235 06770264140 020536 0 ustar coven coven
Bzip2 to superowy nowy algorytm kompresji danych. Ogólnie rzecz biorąc tworzy pliki, które są 60-70% mniejsze od takich samych plików spakowanych gzip-em.
Ten dokument opisze kilka typowych zastosowań bzip2-a.
Przyszłe wersje tego dokumentu będą dotyczyły planowanej bzip2 library którą autor bzip2-a, Julian Seward opisuje następująco:
Pracuję nad następną wersją bzip2-a, która będzie używać tego samego formatu pliku .bz2; główną nowością będzie biblioteka podobna do zlib służąca do odczytywania i zapisu danych w tym formacie z poziomu programu.
Przyszłe wersje tego dokumentu mogą także zawierać podsumowanie dyskusji nad tym czy (i jak) bzip2 powinno być zastosowane w jądrze Linux-a.
Zaktualizowałem rozdział Pobieranie binariów bzip2, dodałem S.u.S.E.
Poprawiłem błąd w pisowni i poprawiłem kilka idiomów shell-a w rozdziale o używaniu bzip2-a z tar-em. Podziękowania dla Alessandro Rubini za nie.
Poprawiłem aby narzędzie buzzit nie [to stomp] oryginalnego archiwum bzip2-a.
Dodałem bgrep, narzędzie podobne do zgrep-a.
Poprawiłem problem z gcc 2.7.*. Podziękowanie dla Ulrika Dickow-a za wskazanie go.
Dodałem elegancki sposób Leonard-a Jean-Marc-a posługiwania się tar-em.
Dodałem szwedzkie tłumaczenie Linus-a Ăkerlund-a.
Poprawiłem rozdział o wu-ftpd np. sugestii Arnaud Launay-a.
Przeniosłem tłumaczenia ich odpowiednich rozdziałów.
Wstawiłem buzzit i tar.diff do sgml-a tam gdzie ich miejsceg. Poprawiłem interpunkcję i formatowanie. Podziękowania dla Arnaud Launay za jego pomoc w poprawianiu mojej własnej wersji. :-)
Porzuciłem xv project na razie z powodu braku większego zainteresowania.
Wspomniałem o tipsach w przyszłych wersjach tego dokumentu.
Dodałem aplikację buzzit. Poprawiłem patch do nałożenia na gnu tar.
Dodałem tip TenThumbs-a dot. Netscape.
Także zmieniłem lesspipe.sh dzięki jego sugestii. Powinien teraz lepiej działać.
Dodałem francuskie tłumaczenie Arnaud Launay-a, i jego plik wu-ftpd.
Dodałem japońskie tłumaczenie Tetsu Isaji-ego.
Dodałem plik Ulrik Dickow-a .emacs do emacs-a 19.30 lub wyższej wersji.
(także poprawiłem patch jka-compr.el do emacs-a dzięki jego sugestii. Ojej! Bzip2 nie ma jeszcze(?) flagi "append".)
Zmienilem patch do emacs-a aby automagicznie rozpoznawał pliki .bz2.
Dodałem patch dla emacs-a.
Runda 1.
Home page Bzip2-a znajduje się na Home site w Wielkiej Brytanii. Mirror site w U.S.A jest tu. Można też znaleźć go na site-cie FTP Red Hat-a tu.
Osoby posługujące się językiem francuskim mogą skierować się do francuskich dokumentów Arnaud Launay-a. Wersja WWW jest tu, a ftp można użyć tu Z Arnaud można skontaktować się pocztą elektroniczną pod tym adresem
Osoby posługujące się językiem japońskim mogą skierować się do japońskich dokumentów Tetsu Isaji tu. Z Isaji można skotaktować się na jego stronie WWW, lub pocztą elektroniczną pod tym adresem.
Osoby posługujące się językiem szwedzkim mogą skierować się do szwedzkich Linus-a Ăkerlund-a tu. Z Linus-em można się skontaktować pocztą elektroniczną pod tym adresem.
Zobacz Home site-y.
Binarium Debian Intel jest tu.
Binarium alpha Red Hat-a jest tu.
Binarium Intel Red Hat-a jest tu.
Binarium SPARC Red Hat-a jest tu.
Binarium Intel Slackware jest tu.
Binarium Intel S.u.S.E jest tu.
Wyżej wymienione są także dostępne w analogicznuch miejscach różnych lustrzanych site-ów.
Znajdują się na oficjalnych site-ach (zobacz w Jak zdobyć Bzip2 gdzie, albo Red Hat ma je tu).
Jeśli masz gcc 2.7.*, zmień linijkę która brzmi
CFLAGS = -O3 -fomit-frame-pointer -funroll-loops
na
CFLAGS = -O2 -fomit-frame-pointer
to jest, zamień -O3 na -O2 i pomiń -funroll-loops. You may also wish to add any -m* flags (like -m486, for example) you use when compiling kernels.
Usunięcie -funroll-loops jest najistotniejszą częścią, ponieważ może to spowodować wiele gcc 2.7-ów będzie generowało nieprawidłowy kod, a wszystkie gcc 2.7-y będą większy i wolniejszy kod wynikowy. Dla innych kompilatorów (lcc, egcs, gcc 2.8.x) standartowe CFLAGS są w porządku.
Potem, po prostu make
i zainstaluj wg README.
Przeczytaj Wspanaiałą Stronę Podręcznika Systemowego :)
Poniżej są opisane trzy metody używania bzip2 z tar-em, a mianowicie
Ta metoda nie wyamga wcale żadnych zmian. Aby od-tar-ować bzip2-owane archiwum tar-owe, foo.tar.bz2 w aktualnym katalogu, wykonaj
/path/to/bzip2 -cd foo.tar.bz2 | tar xf -
To działa, ale może być wnerwiające jeśli wypisuje się to zbyt często.
Dzięki dla Leonard Jean-Marc za ten tip. Dzięki także dla Alessandro Rubini za wprawadzenie różnic specyficznych dla csh.
W swoim .bashrc, możesz wstawić taką linijkę :
alias btar='tar --use-compress-program /usr/local/bin/bzip2 '
W .tcshrc, lub .cshrc, analogiczna linijka wygląda tak:
alias btar 'tar --use-compress-program /usr/local/bin/bzip2'
Nałóż poniższy patch na gnu tar 1.12 w następujący sposób:
cd tar-1.12/src; patch < /path/to/tar.diff
skompiluj go, i zainstaluj go, i wszystko już gotowe do działania.
Upewnij się ze zarówno
tar jak i bzip2 są w twojej $PATH poprzez "which tar" i "which bzip2."
Aby użyć nowego tar-a, po prostu zrób
tar xyf foo.tar.bz2
aby zdekompresować plik.
Aby utworzyć nowe archiwum, podobnie zrób:
tar cyf foo.tar.bz2 file1 file2 file3...directory1 directory2...
A oto patch:
*** tar.c Thu Jun 11 00:09:23 1998
--- tar.c.new Thu Jun 11 00:14:24 1998
***************
*** 196,201 ****
--- 196,203 ----
{"block-number", no_argument, NULL, 'R'},
{"block-size", required_argument, NULL, OBSOLETE_BLOCKING_FACTOR},
{"blocking-factor", required_argument, NULL, 'b'},
+ {"bzip2", required_argument, NULL, 'y'},
+ {"bunzip2", required_argument, NULL, 'y'},
{"catenate", no_argument, NULL, 'A'},
{"checkpoint", no_argument, &checkpoint_option, 1},
{"compare", no_argument, NULL, 'd'},
***************
*** 372,377 ****
--- 374,380 ----
PATTERN at list/extract time, a globbing PATTERN\n\
-o, --old-archive, --portability write a V7 format archive\n\
--posix write a POSIX conformant archive\n\
+ -y, --bzip2, --bunzip2 filter the archive through bzip2\n\
-z, --gzip, --ungzip filter the archive through gzip\n\
-Z, --compress, --uncompress filter the archive through compress\n\
--use-compress-program=PROG filter through PROG (must accept -d)\n"),
***************
*** 448,454 ****
Y per-block gzip compression */
#define OPTION_STRING \
! "-01234567ABC:F:GK:L:MN:OPRST:UV:WX:Zb:cdf:g:hiklmoprstuvwxz"
static void
set_subcommand_option (enum subcommand subcommand)
--- 451,457 ----
Y per-block gzip compression */
#define OPTION_STRING \
! "-01234567ABC:F:GK:L:MN:OPRST:UV:WX:Zb:cdf:g:hiklmoprstuvwxyz"
static void
set_subcommand_option (enum subcommand subcommand)
***************
*** 805,810 ****
--- 808,817 ----
case 'X':
exclude_option = 1;
add_exclude_file (optarg);
+ break;
+
+ case 'y':
+ set_use_compress_program_option ("bzip2");
break;
case 'z':
Aby dekompresować pliki bzip2 w locie, tj. aby móc używać less-a do czytania ich bez wcześniejszego bunzip2-owania ich, należy zrobić lesspipe.sh (man less) w ten sposób:
#!/bin/sh
# To jest preprocessor dla 'less-a'. Jest on używany, gdy ta zmienna
# środowiskowa jest ustawiona: LESSOPEN="|lesspipe.sh %s"
case "$1" in
*.tar) tar tvvf $1 2>/dev/null ;; # Oglądaj zawartość różnych plików tar-owych
*.tgz) tar tzvvf $1 2>/dev/null ;;
# Działa dla niezmodyfikowanej wersji tar-a
*.tar.bz2) bzip2 -cd $1 $1 2>/dev/null | tar tzvvf - ;;
# Działa z spatchowaną wersją tar-a
# *.tar.bz2) tyvvf $1 2>/dev/null ;;
*.tar.gz) tar tzvvf $1 2>/dev/null ;;
*.tar.Z) tar tzvvf $1 2>/dev/null ;;
*.tar.z) tar tzvvf $1 2>/dev/null ;;
*.bz2) bzip2 -dc $1 2>/dev/null ;; # Oglądaj spakowane pliki
*.Z) gzip -dc $1 2>/dev/null ;;
*.z) gzip -dc $1 2>/dev/null ;;
*.gz) gzip -dc $1 2>/dev/null ;;
*.zip) unzip -l $1 2>/dev/null ;;
*.1|*.2|*.3|*.4|*.5|*.6|*.7|*.8|*.9|*.n|*.man) FILE=`file -L $1` ; # groff src
FILE=`echo $FILE | cut -d ' ' -f 2`
if [ "$FILE" = "troff" ]; then
groff -s -p -t -e -Tascii -mandoc $1
fi ;;
*) cat $1 2>/dev/null ;;
# *) FILE=`file -L $1` ; # Check to see if binary, if so -- view with 'strings'
# FILE1=`echo $FILE | cut -d ' ' -f 2`
# FILE2=`echo $FILE | cut -d ' ' -f 3`
# if [ "$FILE1" = "Linux/i386" -o "$FILE2" = "Linux/i386" \
# -o "$FILE1" = "ELF" -o "$FILE2" = "ELF" ]; then
# strings $1
# fi ;;
esac
Napisalem ten patch do jka-compr.el który dodaje bzip2 do auto-compression-mode.
Disclaimer: Spawdziłem go tylko z emacs-20.2, ale nie mam powodów by sądzić, że podobne postępowanie nie będzie działać z innymi wersjami.
By go użyć,
patch < jka-compr.el.diff
M-x byte-compile-file jka-compr.el
--- jka-compr.el Sat Jul 26 17:02:39 1997
+++ jka-compr.el.new Thu Feb 5 17:44:35 1998
@@ -44,7 +44,7 @@
;; The variable, jka-compr-compression-info-list can be used to
;; customize jka-compr to work with other compression programs.
;; The default value of this variable allows jka-compr to work with
-;; Unix compress and gzip.
+;; Unix compress and gzip. David Fetter dodał bzip2 support :)
;;
;; If you are concerned about the stderr output of gzip and other
;; compression/decompression programs showing up in your buffers, you
@@ -121,7 +121,9 @@
;;; I have this defined so that .Z files are assumed to be in unix
-;;; compress format; and .gz files, in gzip format.
+;;; compress format; and .gz files, in gzip format, and .bz2 files,
+;;; in the snappy new bzip2 format from http://www.muraroa.demon.co.uk.
+;;; Keep up the good work, people!
(defcustom jka-compr-compression-info-list
;;[regexp
;; compr-message compr-prog compr-args
@@ -131,6 +133,10 @@
"compressing" "compress" ("-c")
"uncompressing" "uncompress" ("-c")
nil t]
+ ["\\.bz2\\'"
+ "bzip2ing" "bzip2" ("")
+ "bunzip2ing" "bzip2" ("-d")
+ nil t]
["\\.tgz\\'"
"zipping" "gzip" ("-c" "-q")
"unzipping" "gzip" ("-c" "-q" "-d")
Podziękowania za to mależą się Ulrik-owi Dickow-owi, ukd@kampsax.dk, programiście systemowemu w Kampsax Technology:
Aby móc używać bzip2 automatycznie gdy nie jesteś sysadmin-em, po prostu dodaj co następuje do swojego pliku .emacs.
;; Automatic (un)compression on loading/saving files (gzip(1) and similar)
;; We start it in the off state, so that bzip2(1) support can be added.
;; Code thrown together by Ulrik Dickow for ~/.emacs with Emacs 19.34.
;; Should work with many older and newer Emacsen too. No warranty though.
;;
(if (fboundp 'auto-compression-mode) ; Emacs 19.30+
(auto-compression-mode 0)
(require 'jka-compr)
(toggle-auto-compression 0))
;; Now add bzip2 support and turn auto compression back on.
(add-to-list 'jka-compr-compression-info-list
["\\.bz2\\(~\\|\\.~[0-9]+~\\)?\\'"
"zipping" "bzip2" ()
"unzipping" "bzip2" ("-d")
nil t])
(toggle-auto-compression 1 t)
Podziękowania dla Arnaud Launay za tego oszczędzacza bandwidth-u. To co następuje powinno się znaleźć w /etc/ftpconversions aby wykonywać kompresję i dekompresję on-the-fly za pomocą bzip2. Upewnij się, że ścieżki takie jak (like /bin/compress) są poprawne.
:.Z: : :/bin/compress -d -c %s:T_REG|T_ASCII:O_UNCOMPRESS:UNCOMPRESS : : :.Z:/bin/compress -c %s:T_REG:O_COMPRESS:COMPRESS :.gz: : :/bin/gzip -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:GUNZIP : : :.gz:/bin/gzip -9 -c %s:T_REG:O_COMPRESS:GZIP :.bz2: : :/bin/bzip2 -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:BUNZIP2 : : :.bz2:/bin/bzip2 -9 -c %s:T_REG:O_COMPRESS:BZIP2 : : :.tar:/bin/tar -c -f - %s:T_REG|T_DIR:O_TAR:TAR : : :.tar.Z:/bin/tar -c -Z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+COMPRESS : : :.tar.gz:/bin/tar -c -z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+GZIP : : :.tar.bz2:/bin/tar -c -y -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+BZIP2
Ten użytek, który nazwałem bgrep, jest niewielką modyfikacją zgrep który jest dostarczany z Linux-em. Można go używać do grep-owania plików bez bunzip2-owania ich najpierw.
#!/bin/sh
# bgrep -- a wrapper around a grep program that decompresses files as needed
PATH="/usr/bin:$PATH"; export PATH
prog=`echo $0 | sed 's|.*/||'`
case "$prog" in
*egrep) grep=${EGREP-egrep} ;;
*fgrep) grep=${FGREP-fgrep} ;;
*) grep=${GREP-grep} ;;
esac
pat=""
while test $# -ne 0; do
case "$1" in
-e | -f) opt="$opt $1"; shift; pat="$1"
if test "$grep" = grep; then # grep is buggy with -e on SVR4
grep=egrep
fi;;
-*) opt="$opt $1";;
*) if test -z "$pat"; then
pat="$1"
else
break;
fi;;
esac
shift
done
if test -z "$pat"; then
echo "grep through bzip2 files"
echo "usage: $prog [grep_options] pattern [files]"
exit 1
fi
list=0
silent=0
op=`echo "$opt" | sed -e 's/ //g' -e 's/-//g'`
case "$op" in
*l*) list=1
esac
case "$op" in
*h*) silent=1
esac
if test $# -eq 0; then
bzip2 -cd | $grep $opt "$pat"
exit $?
fi
res=0
for i do
if test $list -eq 1; then
bzip2 -cdfq "$i" | $grep $opt "$pat" > /dev/null && echo $i
r=$?
elif test $# -eq 1 -o $silent -eq 1; then
bzip2 -cd "$i" | $grep $opt "$pat"
r=$?
else
bzip2 -cd "$i" | $grep $opt "$pat" | sed "s|^|${i}:|"
r=$?
fi
test "$r" -ne 0 && res="$r"
done
exit $res
tenthumbs@cybernex.net pisze:
Znalazłem sposób aby spowodować żeby Linux-owy Netscape używał bzip2-a do
Content-Encoding tak jak używa gzip-a. Dodaj to do $HOME/.Xdefaults lub
$HOME/.Xresources
Używam opcji -s ponieważ wolę stracić trochę z szybkości dekompresji
na korzyść zużycia RAM-u. Możn pominąć tą opcję, jeśli ktoś tak chce.
Netscape*encodingFilters: \
x-compress : : .Z : uncompress -c \n\
compress : : .Z : uncompress -c \n\
x-gzip : : .z,.gz : gzip -cdq \n\
gzip : : .z,.gz : gzip -cdq \n\
x-bzip2 : : .bz2 : bzip2 -ds \n
Ten program w perl-u pobiera plik skompresowany w innych formatach (.tar.gz, .tgz. .tar.Z, and .Z ) i przepakowuje je dla lepszej kompresji. Kod żródłowy w perl-u ma wiele porządnej dokumentacji dotyczącej tego co robi i jak to robi co robi.
#!/usr/bin/perl -w
#######################################################
# #
# Ten program pobiera pliki skompresowane programami #
# compress i gzip w aktualnym katalogu i zamienia je #
# do formatu bzip2. Obsługuje rozdszerzenie .tgz w #
# prawidłowy sposób, tworząc plik .tar.bz2. #
# #
#######################################################
$counter = 0;
$saved_bytes = 0;
$totals_file = '/tmp/machine_bzip2_total';
$machine_bzip2_total = 0;
while(<*[Zz]>) {
next if /^bzip2-0.1pl2.tar.gz$/;
push @files, $_;
}
$total = scalar(@files);
foreach (@files) {
if (/tgz$/) {
($new=$_) =~ s/tgz$/tar.bz2/;
} else {
($new=$_) =~ s/\.g?z$/.bz2/i;
}
$orig_size = (stat $_)[7];
++$counter;
print "Repacking $_ ($counter/$total)...\n";
if ((system "gzip -cd $_ |bzip2 >$new") == 0) {
$new_size = (stat $new)[7];
$factor = int(100*$new_size/$orig_size+.5);
$saved_bytes += $orig_size-$new_size;
print "$new is about $factor% of the size of $_. :",($factor<100)?')':'(',"\n";
unlink $_;
} else {
print "Arrgghh! Something happened to $_: $!\n";
}
}
print "You've ",
($saved_bytes>=0)?"saved":"lost",
" $saved_bytes bytes of storage space :",
($saved_bytes>=0)?")":"(", "\n";
unless (-e '/tmp/machine_bzip2_total') {
system ('echo "0" >/tmp/machine_bzip2_total');
system ('chmod', '0666', '/tmp/machine_bzip2_total');
}
chomp($machine_bzip2_total = `cat $totals_file`);
open TOTAL, ">$totals_file"
or die "Can't open system-wide total: $!";
$machine_bzip2_total += $saved_bytes;
print TOTAL $machine_bzip2_total;
close TOTAL;
print "That's a machine-wide total of ",`cat $totals_file`," bytes saved.\n";
doc-linux-pl-2002.06.14.orig/html/CD-Writing-HOWTO.pl.html 0100664 0001750 0001750 00000147675 06770264140 021474 0 ustar coven coven
Wielu ludzi wypala płyty CD przy pomocy Linuksa ponieważ jest to sposób niezawodny i łatwy. Nie ma "niebieskich ekranów" podczas wypalania i nie musisz się przejmować tym, żeby dobrać odpowiedni sprzęt i oprogramowanie do niego. Po prostu jak wszystko raz poprawnie ustawisz tak działa. Dokument ten omawia konfigurację, jak umieścić dane na medium i podaje trochę ciekawych aplikacji, który zostały wspomniane przez uprzejmych czytelników.
Prawa autorskie (C) posiada Winfried Trümper 1996,1997,1998,1999. Wszystkie prawa zastrzeżone.
Redystrybucja i użytkowanie, z modyfikacjami lub bez, jest dozwolone o ile nazwisko autora nie jest wykorzystywane do promocji czy sygnowania wszelkich produktów powstałych z tego dokumentu bez konkretnego, wcześniejszego, pisemnego pozwolenia.
Autor zrzeka się wszelkich gwarancji odnośnie tego dokumentu, włącznie z wszystkimi włączonymi gwarancjami handlowymi. W żadnym wypadku nie jestem odpowiedzialny za jakiekolwiek bezpośrednie i pośrednie zniszczenia, w wyniku których nastąpiła utrata używalności, danych czy dochodów wynikające z używania tego dokumentu.
Krótko: używaj na własną odpowiedzialność.
CD-R FAQ, to ogólny dokument zawierający często zadawane pytania na temat płyt CD do nagrywania (CD-R), nagrywarek płyt i wymaganego oprogramowania.
Ponieważ wiekszość nagrywarek CD można używać także do czytania płyt CD; możliwe, że będziesz chciał przeczytać także CDROM-HOWTO, SCSI-HOWTO i Kernel-HOWTO
CD-ROM to skrót od "Compact Disc Read Only Memory", nośnik danych wykorzystujący laser optyczny do wyczuwania mikroskopijnych zagłębień na srebrnym, błyszczącym dysku. Błyszczenie pochodzi od aluminiowej warstwy, która jest nośnikiem. Zaglebienia reprezentują bity informacji (w pewien sposób) i są takie malutkie, że jakieś kilka bilionów mieści się na płycie. Przez to CD jest nośnikiem dużych ilości danych.
Termin CD-R jest skrótem od "CD-ROM Recordable" i odnosi się do płyty CD, która nie ma tych mikrospijnych zagłębień na powierzchni... i przez to jest pusta.
Zamiast srebrnej aluminiowej warstwy ma specjalny "film" (kolorowy), w którym "mikroskopijne zagłębienia)" mogą być wypalone. Robi się to przez nadanie laserowi, który normalnie tylko wykrywa zagłębienia, trochę większej mocy, tak że zagłębienia są wypalane. Takie działanie może być podjęte tylko raz na CD-R.
Jednak można sobie zostawić miejsce na późniejsze nagrywanie, tworząc wielosesyjną płytę CD.
CD-ROM rewritable (czyli CD do wielokrotnego zapisu; w skrócie CD-RW zostały wynalezione, aby obejść ograniczenia CD-R. W tych płytach laser nie tylko może wypalić takie mikroskopijne zagłębienia, ale może także przywrócić płytę do oryginalnego stanu sprzed zapisu. Jest to możliwe, ponieważ laser tak naprawdę nie wypala dziur - nie widzisz przecież dymu podczas wypalania i żaden głos z góry nie mówi ci "cel zniszczony". To co laser robi naprawdę, to wyzwala zmianę fazy (trigger a phase change), i stąd nazwa dla nagrywarek CD-RW "urządzenia do zmiany fazy". Przykład bardzo podobnej procedury, to samochód czyszczący na lodowisku hokejowym; w czasie przerw samochód ten przejeżdża przez lodowisko i wypełnia zadrapania w lodzie (cząstki zawierające rodzaj informacji o grze... :) ) roztopionymi kawałkami lodu.
[Od tłumacza] Dobra... Wiem, że przetłumaczyłem to ... powiedzmy nieciekawie... Jeśli masz ciekawsze tłumaczenie tego fragmentu, to zapraszam.
To HOWTO objaśnia zadanie zapisu na CD-R i CD-RW. Witamy na pokładzie, kapitanie!
Szczegółowa lista modeli, które zostały podane jako działające lub nie z różnymi unix-ami jest dostępna pod adresem ( www.guug.de).
Oto obszerne zestawienie napędów, które zdają się działać z cdrecord:
Acer: CDRW 6206A
BTC: BCE 621E (IDE)
Compro: CW-7502, CW-7502B
Dysan: CRW-1622
Elite: Elite b444.41
Grundig: CDR 100 IPW
Guillemot: Maxi CD-R 4X/8X
HP: SureStore 4020i, SureStore 6020i,
C4324, C4325
CD-Writer+ 7100, CD-Writer+ 7200i,
CD-Writer+ 8100i, CD-Writer+ 8110i,
Hi-Val: CDD-3610
JVC: XR-W2001, XR-W2010, XR-W2042, R-2626
Kodak: PCD 200, PCD 225, PCD 260, PCD 600
Matsushita: CW-7502
Memorex: CRW-620, CRW-1622
Microboards: PlayWrite 2000, PlayWrite 4000RW, PlayWrite 4001RW
MicroNet: MasterCD Plus 4x4, MasterCD Plus 4x6
Mitsubishi: CDRW-226
Mitsumi: CR-2401-TS, CR-2600 TE, CR-2801 TE, CR-4801 TE
Nomai: 680.RW
OTI: CDRW 965
Olympus: CDS 615E, CDS 620E
Optima: DisKovery 650 CD-R
OTI: CDRW 965
Panasonic: CW-7502, CW-7582
Philips: CDD-521/10, CDD-522
CDD-2000, CDD-2600, CDD-3600, CDD-3610
Omniwriter 26, Omniwriter 26A
Plasmon: CDR 480, CDR 4220, RF-4100, RF-4102, CDR 4400
Plextor: CDR PX-24 CS, PX-412 C, PX-R412 C
PX-R810Ti, PleXwriter 412C
Procom: PCDR 4
Ricoh: RO-1420C+, MP 1420C, MP 6200S, MP 6201S
Sanyo: CRD-R24S
Smart and
Friendly: CD-RW226, CD-R1002, CD-R1002/PRO, CD-R1004,
CD-R2004, CD-R2006 PLUS, CD-R2006 PRO,
CD-R4000, CD-R4006, CD-R4012
Sony: CDU 920S, CDU 924, CDU 926S, CDU-928E,
CDU 948S, CDRX 100E
Taiyo Yuden: EW-50
TEAC: CD-R50S, CD-R55S, CDR-55S
Traxdata: CRW 2260, CDR 4120, CDRW 4260,
Turtle Beach: 2040R
WPI (Wearnes): CDRW-622, CDR-632P
YAMAHA: CDR-100, CDR 102, CDR-200, CDR-200t, CDR-200tx
CDR-400, CDR-400c, CDR-400t, CDR-400tx, CDR-400Atx
CRW-2260, CRW-2260t,
CRW-4250tx, CRW-4260 t, CRW-4260 tx, CRW-4261,
CRW-4416 S
Tabela 1: Nagrywarki obsługiwane przez Linuksa
Jeśli twój sprzęt nie jest obsługiwany, to wciąż możesz użyć Linuksa do przygotowania materiału na CD. Możesz tak postąpić, ponieważ większość oprogramowania DOS-owego nie umie obsłużyć RockRidge Extensions. Ale musisz wtedy użyć DOS-owego oprogramowania do wypalenia płyty.
Są dwie klasy narzędzi do zapisywania CD-R: sterowniki sprzętowe i formatery danych. Sterowniki sprzętowe obsługują następujące cechy:
Cecha cdwrite-2.1 cdrecord-1.7
--------------------------------------------
IDE/ATAPI nie tak
Port równoległy nie tak
CD-RW nie tak
Wielosesyjność tylko częściowo tak
Tabela 2: Cechy sterowników sprzętowych
cdwrite to stare oprogramowanie i wzmiankowane jest tylko dla
zachowania kompletności. Używaj proszę zamiast tego cdrecord,
ponieważ obsługuje on znacznie więcej sprzetu i ma o wiele więcej
możliwości. Celem formaterów danych jest organizacja danych na
płycie (umieszczenie na nich systemu plików).
Cecha mkisofs mkhybrid
--------------------------------------------
ISO9660 tak tak
RockRidge tak tak
El Torito tak tak
HFS nie tak
Joliet nie tak
Tabela 3: Cechy formaterów danych
Najbardziej oczywistą różnicą między systemem plików ISO9660 a Extended-2 jest możliwość modyfikacji plików na tym drugim po zapisaniu ich. Ograniczenia na ISO9660 to:
RockRidge jest rozszerzeniem pozwalającym na dłuższe nazwy i głębszą strukturę katalogów dla systemu plików ISO9660. Rozszerzenia te (RockRidge) nie są dostepne pod DOS-em czy Windows.
El Torito może być używane do tworzenia startowych (bootable) płyt CD. BIOS twojego komputera musi mieć możliwość uruchamiania takich płyt. Mówiąc wprost: pierwsze 1,44 MB na płycie zawiera dyskietkę startową zrobioną przez ciebie. Obraz takiej dyskietki jest traktowany jako dyskietka i system z niej startuje.
HFS pozwala na odczytanie CD-ROM-u na Macintosh-u, tak jakby był to wolumin HFS (rodzinny system plików MacOS).
Joliet pozwala na długie nazwy (między innymi) dla Windows (95, 98, NT). Autor nie zna żadnego narzędzia, które pozwalałoby mieć dłuższe nazwy pod DOS-em czy Windows 3.11.
Sekcja 2.8 pokazuje skąd można pobrać wspomniane oprogramowanie.
Jeśli chcesz się przyłączyć do grupy rozwojowej (w celu aktywnej
pomocy), wyślij list na adres
cdwrite-request@other.debian.org i umieść słowo subscribe w
treści listu.
Najnowsza wersja tego dokumentu jest zawsze dostępna pod adresem www.guug.de.
Jesli uda ci się pokonfigurować sprzęt i system, to polecenie
cdrecord -scanbus wyświetli ci listę urządzeń, dostępnym do
zapisu. Celem tego rozdziału jest poprowadzenie cię poprzez
konfigurację Linuksa, tak abyś na końcu zobaczył coś takiego:
$> cdrecord -scanbus
Cdrecord release 1.7a1 Copyright (C) 1995-1998 Jörg Schilling
scsibus0:
0) 'Quantum ' 'XP34300 ' 'F76D' Disk
1) 'SEAGATE ' 'ST11200N ' '8334' Disk
2) *
3) 'TOSHIBA ' 'MK537FB/ ' '6258' Disk
4) 'WANGTEK ' '5150ES SCSI-36 ' 'ESB6' Removable Tape
5) 'EXABYTE ' 'EXB-8500-85QUE ' '0428' Removable Tape
6) 'TOSHIBA ' 'XM-3401TASUNSLCD' '3593' Removable CD-ROM
7) *
scsibus1:
100) 'Quantum ' 'XP31070W ' 'L912' Disk
101) *
102) *
103) 'TEAC ' 'CD-R55S ' '1.0H' Removable CD-ROM
104) 'MATSHITA' 'CD-R CW-7502 ' '4.02' Removable CD-ROM
105) *
106) 'YAMAHA ' 'CDR400t ' '1.0d' Removable CD-ROM
107) *
Listing 1: Wykrywanie urządzeń na kontrolerze SCSI.
Przykład ten został dostarczony przez Jörga Schillinga. Widać tutaj cztery nagrywarki. Nie można rozróżnić zwykłego CD-ROMu od nagrywarek. Ale identyfikator produktu ma często w sobie wskazówki w stylu R, -R czy -RW.
Jądro można wyposażyć w sterowniki służące do różncyh celów. Można je wkompilować na stałe lub jako moduły ładowane na żądanie. Ta druga metoda jest preferowana dla sterowników niekrytycznych dla systemu. Np. jeśli masz system na dysku IDE, to sterownik do tego dysku musisz mieć w jądrze (a nie jako moduł).
Są trzy rodzaje nagrywarek: SCSI, IDE/ATAPI i zewnętrzne podłączane do portu równoległego. Tabela 4 pokazuje jak skonfigurować jądro dla tych typów nagrywarek. Pierwsza kolumna, to sekcja w menu konfiguracji jądra, gdzie można znaleźć dane ustawienie. Druga kolumna, to opis tej opcji. Trzecia kolumna, to nazwa modułu powstałego po kompilacji.
Y to tak (yes) i oznacza, że masz to wkompilować w jądro. M to moduł, i oznacza, że ma to być wkompilowane jako moduł. Y/M pozwala tobie wybrać czy ma to być moduł czy wkompilowanie w jądro. Puste ustawienia oznaczają, że nie trzeba tego modyfikować. Nie zmienianie tego ustawienia zwiększa szanse, że jadro będzie działać (jeśli działało wcześniej).
Aby sprawdzić jakie sterowniki są aktywne (tak statyczne jak i dynamiczne) w twoim jądrze, możesz odczytać plik /proc/devices. Aby sprawdzić jakie moduły są załadowane wydaj plecenie 'lsmod'. Aby sprawdzić jakie moduły są dostępne do załadowania wydaj polecenie 'modprobe -l'. Jeśli potrzebujesz modułu niedostępnego w twoim systemie, musisz przekompilować jądro. Przeczytaj Kernel-HOWTO na temat szczegółów kompilacji. Najświeższe informacje na temat obsługi modułów jądra znajdziesz w Module-HOWTO.
Sekcja Opis Moduł SCSI IDE PP
------------------------------------------------------------
BLOCK Enhanced IDE/MFM/RLL... Y
BLOCK IDE/ATAPI CDROM ide-cd M/N/Y
BLOCK SCSI hostadaptor emulation ide-scsi M
BLOCK Loopback device loop M M M
PARIDE Parallel port IDE device paride Y/M
PARIDE Parallel port ATAPI CD-ROMs M
PARIDE Parallel port generic ATAPI M
PARIDE (select a low-level driver) Y
SCSI SCSI support scsi_mod Y/M Y/M
SCSI SCSI CD-ROM support sr_mod Y/M Y/M
SCSI Enable vendor-specific Y Y
SCSI SCSI generic support sg Y/M Y/M
SCSI (select a low-level driver) Y
FS ISO 9660 CDROM filesystem iso9660 Y Y Y
FS Microsoft Joliet cdrom... joliet M M M
Tabela 4: Konfiguracja jądra
Jeśli udało ci się już skompilować jądro czy znaleźć potrzebne moduły, to albo dodaj je do /etc/modules albo pozwól ładować je automatycznym narzędziom (kmod, kerneld). Jeśli nie jesteś pewien, skonsultuj to z dokumenctacją swojej dystrybucji.
Opcja "SCSI hostadaptor emulation" we wczesniejszych jądrach nazywa się "SCSI emulation" (około 2.0.36). Jeśli jądro na to pozwala, skompiluj sterownik dla CD-ROM-ów IDE/ATAPI jako moduł. Jeśli nie, to wyłącz go (N) i użyj zamiast niego sterownika do CD-ROM-ów SCSI. W jądrach serii 2.2, nie możliwe jest uruchamianie sterowników do IDE i SCSI na tym samym fizycznym urządzeniu w tym samym czasie (jeśli masz 2.0.36, to przeczytaj poniżej).
Urządzenie loopback jest opcjonalne i pozwala przetestować obraz płyty przed zapisaniem.
Jeśli chcesz móc czytać płyty, to potrzebujesz obsługi systemu plików ISO 9660. Sterownik ten zawiera w sobie obsługę RockRidge Extensions. Jeśli chcesz mieć także obsługę MS Joliet ERxtensions, to skompiluj je jako moduł i załaduj.
[Od tłumacza] O ile się nie mylę, to Joliet jest obsługiwany przez jądro 2.0.36...
W każdym przypadku potrzebujesz sterownik niskiego poziomu dla swojego sprzętu. "Niskiego poziomu" odnosi się do sterownika, który komunikuje się bezpośrednio ze sprzętem. Dla urządzeń SCSI i podłączanych przez port równoległy jest wiele sterowników niskiego poziomu. Są one opisane poniżej.
W jądrze 2.2.1 nie włączaj na raz opcji CONFIG_SCSI_MULTI_LUN ('probe for multiple luns') i obsługi ide-scsi. Znany jest błąd ide-scsi, który nie pozwala na to. W każdym razie zaleca się uaktualnienie do wersji 2.2.5.
Niektórzy użytkownicy zgłaszali konflikty między prekompilowanymi binariami a jądrem 2.2. Jest to problem z jądrem. Oto rozwiązania:
Jądra w wersji wcześniejszej niż 2.0.31 mają kilka błedów i nie mogą czytać ostatniego pliku na płycie. Uaktualnij je do wersji 2.0.36.
W jądrze 2.0.36 możesz podać który sterownik (IDE czy SCSI) użyć
do którego urządzenia ATAPI. Dokładniej: możesz włączyć opcję
"SCSI emulation" w jądrze i uaktywnić ją dla
konkretnego urządzenia przed lub podczas ładowania jądra. Np. jesli
twojej nagrywarce odpowiada plik /dev/hdb, to dodaj polecenie
hdb=ide-scsi.
image=/boot/zImage-2.0.36
label=Linux
read-only
append="hdb=ide-scsi"
Listing 2: Przykładowa konfiguracja dla lilo (/etc/lilo.conf)
linux "Linux 2.0.36" {
image=/boot/zImage-2.0.36
cmdline= root=/dev/hda5 readonly hdb=ide-scsi
}
Listing 3: Przykłądowa konfiguracja dla chos (/etc/chos.conf)
Jak już zainstalowałeś wszystkie potrzbne sterowniki, wystartuj nowe jądro. Powinno się tam już znajdować wszystko czego będziesz potrzebować do do następnych rozdziałów.
[Użytkownicy devfs nie muszą się przejmować następnymi krokami (ręczną konfiguracją plików urządzeń. Jeśli używasz devfs, wszystko pojawi się automagicznie na swoim miejscu.]
Przejdź do katalogu /dev i sprawdź czy masz urządzenia
loopback. Nie jest to konieczne, żebyś musiał je mieć ale
wygodniejsze (zobacz punkt 3.5). Jeśli już je
masz, to polecenie ls powinno pokazać loop0 - loop7:
$ > cd /dev
$ > ls loop*
loop0 loop1 loop2 loop3 loop4 loop5 loop6 loop7
Listing 4: pliki urządzenia loopback
Jeśli nie masz tych urządzeń, to stwórz je przy pomocy skryptu
/dev/MAKEDEV:
$ > cd /dev/
$ > modprobe loop
$ > ./MAKEDEV loop
Listing 5: polecenia do tworzenia plików urządzeń loopback
Ostatnie polecenie powiedzie się tylko jeśli masz skompilowany moduł
loop. To co przeczytałeś dotąd na temat obsługi plików
urzdzenia loopback odnosi się do wszystkich plików urządzeń (sg*,
pg*, hd*, ...) i nie piszę wyraźnie o tym dalej.
ATAPI oznacza "polecenia SCSI przez szynę IDE". Innymi słowy napędy IDE/ATAPI porozumiewają się poprzez protokół SCSI (z pewnymi ograniczeniami) i w ten sposób mogą imitować urządzenia SCSI.
W Linuksie nagrywarka IDE może pojawić się jako SCSI dzięki opcji "SCSI (hostadaptor) emulation". Tak więc uaktywnij odpowiedni moduł jądra ide-scsi, jak to opisano powyżej i potem możesz robić wszystko tak jakbyś miał nagrywarkę SCSI.
Upewnij się, że twoja nagrywarka jest rozpoznawana przez BIOS twojego komputera. Nie ma sensu robić czegokolwiek dalej jeśli twój komputer nie zaakceptuje sprzętu. (fakt, że komputer nie wypluje nagrywarki nie jest potwierdzeniem; na ekranie musi pojawić się odpowiedni napis).
Jeśli planujesz podłączyć swój napęd SCSI do portu równoległego, będziesz potrzebował specjalnego kabla i specjalnego sterownika w jądrze. Więcej na ten temat możesz poczytać pod adresem www.torque.net/parport/parscsi.html.
Pliki urządzeń /dev/sd* i /dev/sr* używane do komunikacji z dyskami i CD-ROM-ami SCSI mają zaimplementowany tylko transfer zorientowny na bloki danych. To właśnie czyni je tak szybkimi i idealnymi do zapisu danych. Sterowanie laserem nagrywarki to bardziej skomplikowane zadanie i wymaga trochę więcej niż transferu danych w postaci bloków. Aby utrzymać tę jakość urządzeń sd* i sr* stworzono nowy rodzaj plików urządzeń SCSI; tzw ogólne urządzenia SCSI.
Ponieważ poprzez ogólne urządzenia SCSI można zrobić wszystko ze sprzętem SCSI nie są one przeznaczone do jakiegoś konkretnego celu - stąd nazwa ogólne (generic).
Tak jak inne pliki urządzeń i te można znaleźć w katalogu /dev/:
$ > cd /dev
$ > ls sg*
sg0 sg1 sg2 sg3 sg4 sg5 sg6 sg7
Jeśli nie masz tych plików urządzeń, to stwórz je używając skryptu
/dev/MAKEDEV:
$ > cd /dev/
$ > ./MAKEDEV sg
Przykro mi, ale nie mam pojęcia na ten temat. Przeczytaj informacje
zawarte na
stronie WWW poświęconej temu tematowi albo plik na swoim dysku
/usr/src/linux/Documentation/paride.txt.
Przegląd narzędzi służących do nagrywania płyt znajduje się pod adresem www.fokus.gmd.de. Project tworzenia CD dla Unix-a.
Jedno z poniższych narzędzi potrzebne jest aby wygenerować obraz płyty.
mkisofs mkhybrid
W zależności od modelu twojej nagrywarki (zobacz 1.3) potrzebne jest jedno z poniższych narzędzi do zapisania danych na CD:
Nie wierz podręcznikowi systemowemu od (starego) mkisofs, który stwierdza, że potrzebujesz wersji 1.5. Po prostu użyj programu cdrecord i będzie w porządku. Zauważ, że program mkisofs dostarczany wraz z cdrecord ma kilka rozszerzeń wspomnianych w dokumentacji programu.
Front-endy w Linuksie to rzeczywiste front-endy. Oznacza to, że ciągle musisz zainstalować narzędzia obsługiwane z linii poleceń, ale masz do nich dostęp w ładniejszy sposób.
X-CD-Roast to pakiet stworzony do ułatwienia tworzenia płyt w Linuksie. Łączy on narzędzia sterowane z linii poleceń jak cdrecord i mkisofs z ładnym graficznym interfejsem.
www.fh-muenchen.de
BurnIT to front-end napisany w Javie do cdrecord, mkisofs i cdda2wav-0.95, co czyni z niego kompletny pakiet do wypalania płyt CD na platformach unixowych. Ściągnąć go można z adresu sunsite.auc.dk.
Imperator Nero na temat palenia swoich własnych klasycznych CD [AD64; on się na tym kompletnie nie zna] "Jeśli do ognia się obrócisz, zabawiać się nie przestanę póki się palisz."
[tłum.: Z góry przepraszam za tłumaczenie, ale poetą nie jestem.]
Zapis CD w Linuksie składa się z dwóch kroków:
Rozdział ten opisuje kroki tworzenia płyt z danymi i audio.
Pamiętaj, że zebranie wszystkiego do płyty zabiera o wiele więcej niż się można spodziewać. Jednak pamiętaj też, że brakujących plików nie można dopisać do płyty jak jest już zapisana i zakończona.
Pamiętaj także, że pewna ilość miejsca na płycie jest używana do przechowywania informacji na temat systemu plików iso9660 (zwykle kilka MB). 620 MB danych zawsze się zmieści na 650MB płycie CD-R.
Zanim jakiś nośnik danych (dyskietka, dysk twardy czy kompakt) będzie mógł być użyty trzeba na nim założyć system plików (mówiąc po DOS-owemu: trzeba go sformatować). System plików jest odpowiedzialny za organizację i zapis plików na nośniku.
Zwykle, narzędzia do tworzenia systemu plików na partycji dyskowej, zapisuja na niej pusty system plików, który jest potem montowany i wypełniany plikami przez użytkownika. Zapisywalne płyty CD są zapisywalne tylko raz, więc jeśli zapisałbyś na nim pusty system plików, zostałoby sformatowane - ale pozostałoby puste na zawsze. Jest to także prawda dla nośników wielokrotnego zapisu, ponieważ nie można zmienić dowolnie zawartości sektorów, ale trzeba ją całą najpierw skasować.
Więc to czego potrzebujemy, to narzędzie, które tworzy system plików podczas nagrywania plików na płycie. Narzędzie to nazywa się mkisofs. Przykładowe użycie może być takie:
mkisofs -r -o obraz_cd moja_kolekcja/
`---------' `-------------'
| |
dokąd zapisać nagraj z tego katalogu
Opcja -r ustawia prawa dostępu wszystkich plików na odczyt dla
wszystkich i włącza RockRidge Extensions. To jest zwykle to, co
chcesz osiągnąć i użycie tej opcji jest zalecane, no chyba, że wiesz
dokładnie co robisz. (wskazówka: bez -r pliki na kompakcie będą miały
prawa jak moja_kolekcja!).
mkisofs spróbuje
odwzorować wszystkie nazwy plików na format 8.3 używany przez DOS,
aby zapewnić jak największą kompatybilność. W razie gdy pliki w
formacie 8.3 nazywają się tak samo, używane są liczby, a informacja
o takich plikach wysyłana jest do STDERR - zwykle ekran.
Nie panikuj:
Pod Linuksem nigdy nie zobaczysz tych nazw w formacie 8.3, ponieważ
Linux umie korzystać z RockRidge Extensions, które zawierają
oryginalne atrybuty pliku (prawa dostępu, nazwy, itp.).
Teraz możesz się zastanawiać dlaczego rezultat nie jest wysyłany bezpośrednio do nagrywarki. Z dwóch powodów:
Metodę zapisu płyty w jednym kroku opiszę poniżej.
Możnaby stworzyć dodatkową partycję na dysku i tam zapisywać wynik działania mkisofs. Jednak ja jestem przeciwny takiemu rozwiązaniu ponieważ jedną literówką możnaby sobie zniszczyć całą partycję Linuksową (czytaj: co mi się przytrafiło...). Co więcej, to jest marnowanie miejsca na dysku, bo dane te są tylko czasowe i można je usunąć po zapisaniu na płytę. Jednak jeśli masz wystarczająco dużo miejsca na dysku, dodatkowa partycja może ci zaoszczędzić czasu na kasowanie obrazu.
Linux ma możliwość montowania plików tak jakby były one partycją. Cecha ta przydaje się do testowania obrazu płyty, czy prawa dostępu są takie jak chcesz. Pomimo, iż nośniki są teraz bardzo tanie, to zapis płyty zabiera trochę czasu i możesz chociaż zaoszczędzić swój czas sprawdzając obraz.
Aby zamontować w katalogu /cdrom taki plik stworzony wcześniej
wpisz:
mount -t iso9660 -o ro,loop=/dev/loop0 cd_image /cdrom
Teraz możesz sprawdzić pliki w katalogu /cdrom - pojawią
się tam dokładnie tak samo jak będą wyglądać na płycie. Aby odmontować
ten plik po prostu napisz umount /cdrom. Uwaga: Jeśli masz
jądro starsze niż 2.0.31, to ostatni plik na płycie może nie być
czytany. Użyj nowszego jądra, jak np. 2.0.36. Opcja -pad w
programie cdrecord odnosi się tylko do płyt audio, a dodatkowa
opcja -pad programu mkisofs wymaga łaty, co jest taką samą
pracą jak uaktualnienie do nowego jądra.
Uwaga:
Niektóre stare wersje mount nie umieją obsługiwać urządzeń
loopback. Jeśli masz taką starą wersję mount, to jest to
wskazówka, żeby uaktualnić swoją dystrybucję.
Kilku ludzi sugerowało już, żeby zamieścić tu informację skąd wziąć
najnowsze narzędzia do montowania, ale ja zawsze odmawiam. Jeśli
twoja dystrybucja dostarcza takiej starej wersji mount, to
zgłoś to do nich jako błąd. Jeśli twoja dystrybucja nie jest łatwa
do uaktualnienia, zgłoś to jako błąd.
Jeśli dołączyłbym tutaj wszystkie informacje potrzebne do poprawienia błędów w źle zaprojektowanej dystrybucji to HOWTO byłoby o wiele większe i trudniejsze do czytania.
Już nie ma dużo do zrobienia. Jeśli jeszcze nie próbowałeś, to jest dobra chwila na polecenie:
cdrecord -scanbus
Polecenie to pokaże ci do którego urządzenia SCSI dołączona jest twoja nagrywarka. Wszystkie inne metody zgadywania informacji wyświetlanych przez cdrecord zostały usunięte z tego HOWTO (szczególnie ten cokolwiek niebezbieczny schemat nazewnictwa ogólnych urządzeń SCSI).
Zanim pokażę ci ostatnie polecenie, pozwól się ostrzec, że nagrywarki "lubią być karmione" ciągłym strumieniem danych ponieważ mają tylko mały bufor danych. Tak więc proces zapisu obrazu CD na płytę nie może być przerwany, bo w wyniku otrzymamy źle nagraną płytę. Łatwo jest przerwać taki strumień danych np. przez skasowanie dużego pliku. Przykład: Jeśli skasujesz plik o rozmiarze 650 MB, to jądro musi uaktualnić informacje o 650.000 bloków na dysku (zakładając, że masz na swoim systemie plików bloki 1 kB). Zajmuje to trochę czasu i bardzo prawdopodobne, że zwolni działalność dysku na tyle, że strumień danych zostanie przerwany na kilka sekund. Jednak na szybkich maszynach czytanie poczty, surfowanie po sieci czy nawet kompilacja jądra nie mają wpływu na nagrywanie.
Zauważ proszę, że żadna nagrywarka nie potrafi ponownie ustawić lasera i nie może kontynuować od miejsca, w którym zostało przerwane nagrywanie. Przez to każda silniejsza wibracja a nawet wstrząs zniszczy płytę.
Jeśli jesteś już psychicznie przygotowany, ubierz się w czarną szatę, pomnóż numer SCSI-ID nagrywarki przez numer SCSI-revision i zapal tyleż samo świeczek, wymów dwa wiersze z "ASR-FAQ" (grupa dyskusyjna alt.sysadmin.recovery) i ostatecznie wpisz:
$ > SCSI_BUS=0 # wzięte z listingu "scsibus0:"
$ > SCSI_ID=6 # wzięte z listingu "TOSHIBA XM-3401"
$ > SCSI_LUN=0
$ > cdrecord -v speed=2 dev=$SCSI_BUS,$SCSI_ID,$SCSI_LUN \
-data cd_image
# to samo co wyżej, ale krótsze
$ > cdrecord -v speed=2 dev=0,6,0 -data cd_image
Dla zwiększenia czytelnośći, namiary na nagrywarkę zapisane są do
trzech zmiennych o wymownych nazwach: SCSI_BUS, SCSI_ID, SCSI_LUN.
Opcja -data nie jest konieczna, ale została tutaj podana, aby
odróżnić tę linijkę o linijki służącej do nagrywania płyt audio.
Jeśli używasz programu cdrecord do nadpisania płyty CD-RW, musisz
podać opcję blank=..., aby skasować poprzednią zawartość.
Poczytaj stronę podręcznika man, aby dowiedzieć się więcej na temat
różnych metod zerowania płyty CD-RW.
W czasach kiedy wszyscy oprócz mnie posiadają 400 MHz maszyny, ludzie nagrywają płyty w locie bez tworzenia obrazu. Czyli łączą wyjście programu mkisofs z wejściem programu cdrecord:
$ > IMG_SIZE=`mkisofs -R -q -print-size private_collection/`
$ > mkisofs -r private_collection/ \
|cdrecord speed=2 dev=0,6,0
tsize=${IMG_SIZE}s -data -
# nie zapomnij o s --^ ^-- czytaj dane z STDIN
Pierwsze polecenie jest pustym poleceniem służącym do określenia rozmiatu obrazu (potrzebujesz mkisofs z pakietu cdrecord, aby to działało). Może twoja nagrywarka nie musi znać rozmiaru obrazu, który będzie zapisany, wtedy możesz to opuścić. Wyświetlony rozmiar musi być przekazany jako parametr tsize do polecenia cdrecord (jest zapisany w zmiennej środowiskowej IMG_SIZE). Ostatnie polecenie to połączenie poleceń mkisofs i cdrecord przez potok.
Zapisanie takiej płyty jest bardzo podobne do wymienionych powyżej kroków/ Dwie główne różnice, to fakt, że płyty audio składają się ze ścieżek audio, które są zorganizowane w osobne obrazy. Więc jeśli chcesz mieć 10 ścieżek, to musisz mieć 10 obrazów. Drugą różnicą jest format tych obrazów. Już nie ISO 9660 (czy jaki tam system plików wolisz), ale 16-bitowe sample w kodowaniu PCM z częstotliwością próbkowania 44,1 kHz.
Jednym z narzędzi do zamiany twoich plików dźwiękowych do wymaganego formatu jest sox. Użycie jest bardzo proste:
$ > sox killing-my-software.wav killing-my-software.cdr
Polecenie to zamienia utwór killing-my-software z formatu WAV na format CDR. Poczytaj stronę podręcznika systemowego man programu sox na temat rozszerzeń i formatów plików rozpoznawanych przez niego. Z powodu sporej ilości dysku potrzbnej na konwersję, jest to wbudowana cecha programu cdrecord dla formatów WAV i AU. Tak więc dopóki twoje pliki muzyczne są w postaci plików .wav czy .au i są to 16-bitowe próbki z częstotliwością 44,1 kHz możesz ich używać bez ręcznej zamiany.
Cdrecord zapisuje obrazy jako ścieżki audio jeśli podamy opcję
-audio. Inne opcje są identyczne z tymi do zapisywania danych
(o ile nie masz jakichś bardzo specyficznych wymagań). Poniższe
trzy przykłady robią to samo, ale czytają obrazy z innych plików:
$ > cdrecord -v speed=2 dev=0,6,0 -audio track1.cdr track2.cdr...
$ > cdrecord -v speed=2 dev=0,6,0 -audio track1.wav track2.wav...
$ > cdrecord -v speed=2 dev=0,6,0 -audio track1.au track2.au...
Szczególnym przypadkiem są pliki MPEG3, które mogą być zamienione przy pomocy programu 'mpg123 -s track1.mp3 > track1.cdr'. W drugą stronę działa 8hz-mp3 dla plików WAV.
W takim układzie jak powyżej wypalisz płyty z 2-sekundową przerwą pomiędzy każdymi dwoma ścieżkami audio. Jeśli twoja nagrywarka umożliwia nagrywanie w trybie "disc at once" (DAO), możesz wypróbować najnowszej wersji cdrecord, aby się tych przerw pozbyć.
Niewiele do powiedzenia. Po prostu określ typ oklejnych obrazów
opcjami -data lub -audio. Przykład:
cdrecord -v dev=0,6,0 -data cd_image -audio track*.cdr
Odpowiedź: To zależy od twojej nagrywarki. Nowsze powinny mieć bufor danych o pojemności ok. 1MB lub coś koło tego i może wytrzymać jakieś 1-2 sekund bez dopływu danych. Jeśli chcesz znać jakieś szczegóły, to zajrzyj do podręcznika albo zapytaj producenta. Niezależnie od rozmiaru tego bufora musisz zagwarantować stały przepływ danych w granicach 300 kb/s - 600 kb/s.
Procesy intensywnie wykorzystujące dysk, jak np. uaktualnianie bazy "locate", obniżają maksymalny przepływ i mogą zniszczyć płytę; lepiej sprawdź czy takie procesy nie są uruchamiane przez cron-a, at lub anacron-a podczas gdy wypalasz płytę.
Z drugiej strony niektórzy kompilowali jądro podczas wypalania płyty i nic ich płytom się nie działo. Do takich eksperymentów potrzebujesz jednak szybkiej maszyny.
Fragmentacja jest zwykle taka mała, że jej wpływ jest niezauważalny. Jednak możesz łatwo skonstruować patologiczne przypadki fragmentacji, które obniżą prędkość przepływu danych do 100 kb/s. Więc nie rób tego. :-)
Tak, pliki przez lata fragmentują się na dysku. Tym szybciej, im szybciej system plików jest pełny. Zostawiaj zawsze 10% - 20% wolnego miejsca i powinno być dobrze.
Jeśli nie jesteś pewny, to spójrz na komunikaty wypisywane podczas startu, procent fragmentaji jest podawany podczas sprawdzania systemu plików. Możesz sprawdzić tę wartość bardzo niebezpiecznym poleceniem
$ > e2fsck -n /dev/sda5 # '-n' jest ważne!
[różne komunikaty usunięte - zignoruj wszelkie błędy]
/dev/sda5: 73/12288 files (12.3% non-contiguous)
W tym przykładzie fragmetacja jest bardzo wysoka - ale na tym systemie plików są tylko 73 małe pliki (użyte w /tmp) więc wartość ta nie jest alarmująca.
Jest eksperymentalne narzędzie zwane e2defrag służące do defragmentacji systemu plików Extended-2. Obecna wersja nie działa zbyt pewnie, aby używać jej nawet w domowych komputerach. Jeśli naprawdę chcesz zdefragmentować swój system plików, zrób kopię zapasową (lepiej: dwie kopie), poćwicz odzyskiwanie danych, stwórz nowy system plików (to zniszczy ten stary) i odtwórz dane. Jest to najbezpieczniejsza technika.
Tak. Jedyny system plików, który jest nieodpowiedni do tego celu to NFS (sieciowy system plików).
Ja używam UMSDOS, żeby dzielić mejsce na dysku pomiędzy Linuksem a DOS/Win na PC-cie (486/66) przeznaczonym do nagrywania płyt.
Tak. Na płycie możesz umieścić jakikolwiek system plików. Ale inne systemy operacyjne nie będą potrafiły obsłużyć takiej płyty.
Oto przepis:
dd if=/dev/zero of="empty_file" bs=1024k count=650
$ > /sbin/mke2fs -b 2048 pusty_plik
pusty_plik is not a block special device.
Proceed anyway? (y,n) y
mount -t ext2 -o loop=/dev/loop1 empty_file /mnt
/mnt i odmontuj potem ten
katalog.Jeśli chcesz wstawić pozycję do /etc/fstab dla takich
płyt, to wyłącz ich sprawdzanie, np.
/dev/cdrom /cdrom ext2 defaults,ro 0 0
Pierwsze 0 oznacza "nie dołączaj tego systemu plików do kopii zapasowych", drugie (ważne) oznacza, "nie sprawdzaj błędów podczas startu" (polecenie fsck nie powiedzie się podczas sprawdzania błędów na płycie).
Jest kilka dostępnych pakietów. Najnowszym jest "cdparanoia"; ściągnąć go można z
www.mit.edu
Albo możesz spróbować kombinację programów "cdda2wav" i "sox" dostępne z serwera w Polsce:
ftp.icm.edu.pl. Pierwszy w podkatalogucdrom/a drugi wconvert/.
Pakiet cdda2wav umożliwia odczytanie podanego przedziału czasowego
(albo całej ścieżki) z płyty muzycznej i zamianę odczytanych danych
na format pliku WAV. sox natomiast zamienia format pliku WAV na
format zapisu na płytach muzycznych, tak że dane te mogą zostać
zapisane na płytę przy pomocy cdrecord. Nie potrzebujesz
koniecznie sox jeśli używasz nowszej wersji cdrecord,
ponieważ program ten posiada wbudowaną opcję zamiany plików .wav i
.au na odpowiedni format.
Plik drivers/scsi/scsi.c zawiera taką informację:
"Użycie: echo "SCSI add-single-device 0 1 2 3" >/proc/scsi/scsi
Zamień "0 1 2 3" na swoje numery "Host Channel Id Lun".
Ta cecha jest BETĄ.
UWAGA: Programu tego nie można używać do podłączania urządzeń SCSI
podczas działania systemu ponieważ urządzenia te nie zostały
przygotowane do tego i możesz sobie zniszczyć sprzęt!
Ale może można włączyć już podłączone urządzenie. Jednak nie ma
żadnej gwarancji, że urządzenie to nie zniszczy nadchodzących
danych."
Używać tego można tylko jeśli dodajesz urządzenia SCSI na końcu łańcucha. Jeśli umieścisz urządzenie SCSI gdzieś w istniejący łańcuch, to popsuje to kolejność w katalogu /dev/ i można zniszczyć całą zawartość twojego dysku.
Tak. Ale powinieneś zdawać sobie sprawę z tego, iż wszelkie błędy podczas odczytu oryginału (z powodu kurzu czy rys) spowodują błędy także w kopii.
Pierwszy przypadek: masz nagrywarkę i oddzielny napęd CDROM. Wykonując polecenie:
cdrecord -v dev=3,0 speed=2 -isosize /dev/scd0
odczytujesz strumień danych z CD-ROM-u podłączonego jako /dev/scd0
i zapisujesz go bezpośrednio poprzez urządzenie SCSI o ID=3 na nagrywarkę.
Drugi przypadek: nie masz oddzielnego napędu CD-ROM. W tym przypadku musisz użyć nagrywarki, żeby odczytać dane:
dd if=/dev/scd0 of=obraz_cd
Polecenie to jest równoważne mkisofs więc powinieneś postępować dalej tak, jak to opisano w rozdziale 3. Zauważ, że ta metoda nie zadziała w przypadku płyt muzycznych.
Tak. Nowsze jądra (2.0.36 i seria 2.2) mają wbudowaną obsługę
systemu plików Joliet. Pamiętaj, że musisz użyć obu opcji w pliku
/etc/fstab: iso9660 i joliet (to drugie, to rzeczywiste
rozszerzenie). Więcej szczegółów przeczytasz na stronie
www-plateau.cs.berkeley.edu/people/chaffee/joliet.htm.
Tak jak to robisz ze zwykłymi napędami. Żadnych sztuczek. Zauważ,
że musisz użyć urządzeń scd (SCSI CD-ROM), aby zamontować
płytę do czytania. Przykładowa pozycja z /etc/fstab:
/dev/scd0 /cdrom iso9660 ro,user,noauto 0 0
Użyj bzip2 zamiast jakiegoś innego kompresora jak np.:
gzip czy pkzip. Zaoszczędzi ci to przy większych plikach
(100 kB) około 30% miejsca na dysku. Można go ściągnąć z:
www.muraroa.demon.co.uk/
Zamiast nagrywać prawdziwe płyty audio możesz zamienić swoje pliki .wav w .mp3 i zapisać je na systemie plików ISO 9660 jako zwykłe pliki. Format MPEG III umożliwia kompresję około 1:10.
Oczywiście większość odtwarzaczy CD nie umie czytać plików... i to jest wada. Jednak z drugiej strony, dlaczego na następnej prywatce nie puszczać muzyki z twardego dysku ? 18 GB to wystarczająco dużo miejsca na 3000-4000 plików .mp3. :-)
Program do tworzenia plików MPEG III można ściągnąć z
www.stud.ifi.uio.no/~larsi/other/
Odtwarzacz do MPEG III można ściągnąć z
homepages.uni-tuebingen.de/student/michael.hipp/mpg123/
Jeśli masz nagraną mowę, to możesz spróbować zredukować jej rozmiar algorytmem "GSM lossy speech compression":
ftp://svr-ftp.eng.cam.ac.uk/pub/comp.speech/
Musisz mieć dyskietkę startową. Stwórz jej dokładny obraz poleceniem:
dd if=/dev/fd0 of=boot.img bs=18k
Umieść ten obraz w katalogu z danymi do płyty (albo w jakimś
jego podkatalogu). Poinformuj mkisofs o tym pliku poprzez opcję
-b i użyj także opcji -c. Szczegóły znajdziesz w pliku
README.eltorito w pakiecie mkisofs.
Interesującym zastosowaniem może być system DOS czy Windows zabezpieczony przed wirusami. Zaoszczędza to pieniędzy na dyski (jeśli masz sieć i używasz samby do wsytawiania danych użytkowików na serwerze plików). Jednak jest to czysta teoria, bo nikt mi jak dotąd nie dostarczył konkretów.
Trochę szczegółów na temat startowych płyt z RedHatem można poczytać po adresem www.channel1.com/users/rodsmith/rhjol-technical.html.
Jest dostępna taka nakładka na system plików Linuksa, która montowana jest na CD-ROM i przyjmuje wszystkie operacje zapisu. Nowe i zmodyfikowane pliki zapisywane są gdzie indziej, ale dla użytkownika wygląda to, tak jakby operacje były wykonywane na płycie. Więcej informacji znajdziesz pod adresem home.att.net/~artnaseef/ovlfs/ovlfs.html.
Jeśli to ci nie wystarczy, to poczekaj na system plików UDF, który ma być obsługiwany przez Linuksa. Albo pomóż go rozwijać trylinux.com/projects/udf/.
Tak. Chociaż zostało to przetestowane na razie z dwoma nagrywarkami. I potrzebujesz też łaty na jądro zapewniającej więcej buforów dla sterownika ogólnego urządzenia SCSI ( ftp://ftp.fokus.gmd.de/pub/unix/cdrecord/alpha).
Niemiecki magazyn komputerowy "c't" ma listę wskazówek dotyczących kompaktów "noname" w wydaniu listopadowym 1996:
Zawsze pamiętaj, że popsutą płytę można wciąż użyć jako podstawki. :-)
Sprawdź najpierw czy nagrywarka działa w innych systemach. A konkretnie:
Jeśli "to nie działa" nawet w innych systemach, to masz jakiś konflikt sprzętowy albo popsuty sprzęt.
Jeśli działa w innych systemach operacyjnych i używasz loadlina, aby startować Linuksa, to tu masz problem. Loadlin robi gorący reset i zostawia cały sprzęt już zainicjalizowany a to przeszkadza jądru Linuksa.
W Linuksie niektóre wersje bibilioteki C są niekompatybilne (mają błędy), i program skompilowany z jedną nie będzie działał z inną. Przykładem może być:
[root@Blue /dev]# cdrecord -eject dev=2,0
cdrecord: No such file or directory. No read access for 'dev=2,0'.
Najprzypuszczlaniej błędy te są powodowane:
W różnych warunkach urządzenia SCSI odłączają się i podłączają ponownie samemu (elektronicznie) do szyny SCSI. Jeśli taka cecha nie jest dostępna (sprawdź parametry kontrolera i jądra) niektóre nagrywarki mają problemy podczas wypalania czy utrwalania danych na kompakcie.
Szczególnie sterownik NCR 53c7,8xx SCSI ma standardowo wyłączoną tę cechę, więc możesz najpierw to sprawdzić:
NCR53c7,8xx SCSI support [N/y/m/?] y
always negotiate synchronous transfers [N/y/?] (NEW) n
allow FAST-SCSI [10MHz] [N/y/?] (NEW) y
allow DISCONNECT [N/y/?] (NEW) y
dostarczył pomysł na umieszczanie systemów plików innych niż ISO 9660 na płytach.
zgłosił literówki
zauważył potrzebę posiadania nowszych narzędzi mount do montowania przy pomocy urządzenia loopback.
dobra argumentacja, żeby wyrzucić cdwrite z tego HOWTO.
wygładził słownictwo.
podał informację o liście dyskusyjnej programu cdwrite.
pomógł w ulepszeniu sekcji na temat tworzenia obrazu CD.
URL do narzędzia mkhybrid
sprawdził nagrywanie CD-ROM-u EXT2 (zobacz 4.4)
adres do łaty dla jądra potrzebnej do czytania płyt Joliet.
informacje na temat cdrecord.
zauważył problem w 4.9
pomógł przy tworzeniu przepisu jak zrobić kopię 1:1
wskazówka na temat domyślnego wyłączenia cechy rozłączania/ponownego podłączania w sterowniku ncr.
informacje i doświadczenia na temat nagrywania płyt muzycznych.
dostarczył wskazówkę na temat zapisu płyt muzycznych.
zasugerował użycie popsutych płyt jako podstawkę pod napoje.
zgłosił problem z wcześniej zainicjalizowanymi nagrywarkami przy starcie przy pomocy loadlin.
Tłumaczenie to jest chronione prawami autorskimi © Bartosza Maruszewskiego 1997-1999. 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:
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 /JTZ/.
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 sie na nią zapisać, to
wyślij list o treści subscribe jtz Imię Nazwisko na adres
majordomo@ippt.gov.pl
Zmiany w tym dokumencie wprowadzone przez tłumacza to:
doc-linux-pl-2002.06.14.orig/html/CDROM-HOWTO.pl.html 0100664 0001750 0001750 00000233414 06770264140 020414 0 ustar coven coven
To jest dokument "Linux CD-ROM HOWTO". Przeznaczony on jest jako szybki podręcznik zawierający wszystko co musisz wiedzieć, aby zainstalować i skonfigurować CD-ROM pod Linux-em. Zawarte są tutaj także odpowiedzi na często zadawane pytania oraz podane są odwołania do innych źródeł informacji związanych z aplikacjami i techniką CD-ROM.
Większość z tych informacji pochodzi z dokumentaji, z plików źródłowych dostarczanych wraz z jądrem Linux-a, z FAQ grupy dyskusyjnej alt.cd-rom oraz od użytkowników Linux-a.
Dzięki pakietowi sgml-tools dokument ten jest dostępny w kilku formatach, wszystkie wygenerowane z jednego pliku źródłowego.
Pierwsza wersja dostępna publicznie.
CDU33A jest wyraźnie obsługiwany od jądra 1.1.20; uwagi na temat Reveal FIX; info na temat czytania ścieżek audio; info na temat kilku sterowników alfa; dodano sekcję Rozwiązywanie problemów; kilka innych mniejszych dodatków.
system plików ISO-9660 musi być montowany tylko-do-odczytu począwszy od jądra 1.1.33; wyjaśnione, że SB16 SCSI jest obsługiwane i nowsze napędy Aztech nie są; odwołania do programów photocd i xpcd; notka na temat nowej cechy SBPCD "auto eject".
Mała zmiana co do tego, że cecha "eject" w SBPCD jest domyślnie wyłączona od jądra 1.1.49; dodana informacja o dyskach XA i jak je zidentyfikować
HOWTO dostępne jest teraz w innych językach; napędy IBM i Longshine są obsługiwane przez SBPCD; alfa sterownik dla napędów Aztech; sterownik CDU-33 już nie szuka automatycznie, obsługuje PhotoCD i audio; obsługiwane są więcej niż 2 napędy SCSI; nowy sterownik dla IDE; przypomnienie o sprawdzeniu ustawienia zworek; można już ustawić SBPCD auto-eject przez IOCTL; lista napędów z obsługą wielosesyjności; pytanie na temat błyskania światełka na CDU-33
Duża aktualizacja (byłem zajęty); dokument umieszczony w warunkach GPL; informacja na temat wielu nowych sterowników w jądrze; więcej informacji na temat konfiguracji i rozwiązywania problemów; dodano wiele odwołań HTML; i wiele innych mniejszych zmian.
Dodane odwołanie do programu eject; pytanie o łatę dla praw dostępu plików; odwołanie do strony Creative Labs; odwołanie do FAQ ATA/EIDE i serwera FTP; uwaga, że wiele napędów Creative Labs i Mitsumi to już EIDE; wzmianka o Supermount; napędy podane jako obsługujące dane cyfrowe są przestarzałe, zobacz cdda2wav; więcej informacji na temat zapisu płyt CD; informacja o wielodyskowych napędach EIDE; poprawione kilka lietrówek.
nowa wersja jądra; większość plików README zostałą przeniesiona do /usr/src/linux/Documentation; niektóre sterowniki nie są już eksperymentalne; kilka następnych obsługiwanych napędów; wyraźne wskazanie, że większość napędów jest teraz IDE/ATAPI; dodane pytania o obsługę Plug and Play i identyfikacji prędkości napędu; listy dyskusyjne vger zostały zamknięte; inne różne drobne zmiany.
pytania o to czemu CD-ROM przestaje pracować po zainstalowaniu; sterownik aztcd obsługuje teraz dwa napędy CyCDROM; kolejne prośby, żeby nie używać sterownika SBPCD z napędami IDE; obsługa zmiany dysków w niektórych napędach ATAPI; uwaga na temat (braku) obsługi napędów podłączanych przez port równoległy; najnowsze stabilne jądro to 2.0; inne różne drobne zmiany.
kilka starych pytań usunięte; nowy adres pocztowy autora; dostępne tłumaczenie Chińskie; zmienione kilka odwołań, aby wskazywały na najnowsze pakiety programów; więcej informacji na temat książek multimedialnych; małe zmiany literówek i gramatyczne.
wyjaśnienie, że nowe napędy Aztech są ATAPI; dodane opcje CDU31A dla modularnego sterownika; opcja montowania do czytania plików ukrytych; dodałem sześciomiesięczną "datę ważności"; nowy URL do strony WWW o książce; mniejsze zmiany literówek i gramatyczne.
dodane odwołania na temat napędów podłączanych przez porty równoległe; dodana informacja o sterowniku bpcd; nowy URL dla wersji Chińskiej; kolejny sterownik CR-56x; informacje na temat startowalnych (bootable) płyt; odpowiedź na pytanie o CD-ROM API; "Linux Multimedia Guide" jest teraz dostępny po japońsku i francusku.
dodany odwołanie do polskiego tłumaczenia; CD-Writing już nie jest mini-HOWTO; dodane dwa pytania odnośnie systemu plików Joliet
dodane pozycje dla indeksu [Od tłum.: jeszcze nie w polskiej wersji.]; HOWTO umieszczone pod licencją LDP zamiast GPL; SuperProbe zamienione na odwołanie do automountera opartego na jądrze.
Nowe wersje będą wysyłane okresowo na grupę dyskusyjną comp.os.linux.answers. Będą także umieszczane w różnych archiwach składujących takie dokumenty włącznie z ftp.icm.edu.pl - polską kopią SunSITE.
Hipertekstowe wersje tego i wielu innych HOWTO są dostępne na wielu
strona WWW, włączając
http://sunsite.icm.edu.pl/. Większość dystrybucji Linux-a na CD-ROM-ach
zawiera HOWTO, często w katalogu /usr/doc/, można także
kupić drukowane wersje u różnych dystrybutorów. Czasami wersje
dostępne na kompaktach, serwerach ftp, drukowane są
przestarzałe. Jeśli data tego HOWTO jest starsza niż 6 miesięcy, to
przypuszczalnie dostępna jest już nowsza wersja.
Francuskie tłumaczenie Bruno Corneca dostępne jest pod adresem ftp.ibp.fr.
Japońskie tłumaczenie Itsushi Minoura dostępne jest pod adresem jf.linux.or.jp.
Chińskie tłumaczenie (kodowanie BIG-5) Yung-kang Wu dostępne jest pod adresem linux.ntcic.edu.tw.
Polskie tłumaczenie właśnie czytasz.
Większość tłumaczeń tego i innych HOWTO można także znaleźć pod adresem ftp.icm.edu.pl
Jeśli przetłumaczyłeś to HOWTO na inny język, daj mi znać a dołączę tutaj odwołanie.
Polegam na tobie, czytelniku, aby uczynić to HOWTO użytecznym. Jeśli masz jakieś sugestie, poprawki, czy komentarze, proszę przyślij mi je tranter@pobox.com, a spróbuje zawrzeć je w następnej wersji.
Jestem także chętny odpowiadać na ogólne pytania dotyczące CD-ROM-ów w Linux-ie. Zanim zadasz takie pytanie, przeczytaj proszę wszystkie informacje zawarte tutaj, a potem wyślij mi szczegółowe informacje o twoim problemie. Nie zadawaj proszę pytań na temat używania CD-ROM-ów w innych systemach niż Linux.
Jeśli wydasz ten dokument na CD-ROM-ie albo w jakiejś trwałej kopii, to prosiłbym o przysłanie mi autorskiej kopii; zapytaj mnie pocztą elektroniczną o zwykły adres pocztowy. Rozważ także czy możesz udzielić jakiejś dotacji na rzecz "Linux Documentation Project", aby wspomóc darmową dokumentację dla Linux-a. Skontaktuj się z koordynatorem Linux HOWTO, Timem Bynamem, aby uzyskać więcej informacji.
Prawa autorskie należą do Jeffa Trantera (C) 1995-1998.
Dokument ten może być dystrybuowany na warunkach ustalonych w licencji LDP ( http://sunsite.icm.edu.pl/pub/Linux/Documentation/COPYRIGHT.html)
"CD-ROM jest pamięcią tylko-do-odczytu a system audio dla płyt kompaktowych jest dostępny jako pakiet danych cyfrowych. Kiedy słuchasz płyt z muzyką, włóż proszę wtyczkę od słuchawek do karty dźwiękowej." -- z podręcznika CD-ROM-u
Nie panikuj! Świat technologii CD-ROM nie jest taki skomplikowany jak twój podręcznik.
CD-ROM to skrót od "Compact Disc Read Only Memory", nośnik danych wykorzystujący laser optyczny, aby mikroskopijne zagłębienia na aluminiowanej warstwie dysku poliwęglanowego. Ten sam format używany jest dla płyt muzycznych. Z powodu dużej pojemności, niezawodności i niskiego kosztu, CD-ROM stał się najbardziej popularnym medium do zapisywania danych.
Pojemność CD-ROM-u to około 650 MB, równowartość 500 dyskietek 3,5" lub 250.000 wklepanych stron.
Napędy pierwszej generacji (znane jako pojedynczej prędkości), pracowały z prędkością ok. 150 kb/s. Producenci sprzętu zaprezentowali potem napędu podwójnej prędkości (300 kb/s), czterokrotnej prędkości (600 kb/s) i szybsze. Kiedy ja to piszę, są już dostępne napędu o prędkości 24-krotnej.
Większość napędów CD-ROM używa albo "Small Computer Systems Interface" (SCSI), ulepszony interfejs IDE ATAPI, albo interfejs sprzedawcy. Mają zwykle także możliwość słuchania płyt muzycznych poprzez zewnętrzne słuchawki, albo wyjście zewnętrzne. Niektóre kompakty pozwalają także na czytanie ramek danych z kompaktu muzycznego w formie cyfrowej.
CD-ROM-y są zwykle sformatowane systemem plików ISO-9660 (wcześniej zwanym High Sierra). Format ten ogranicza nazwy plików do stylu MS-DOS-a (8+3). Rock Ridge Extensions wykorzystuje niezdefiniowane pola w standardzie ISO-9660, aby obsługiwać dłuższe nazwy i dodatkowo informacje typowo unix-owe (właściciel pliku, symboliczne dowiązania itp.)
PhotoCD to standard rozwinięty przez Kodak-a dla zapisywania fotografii jako danych cyfrowych na CD-ROM-ach. Posiadając odpowiednie oprogramowanie, możesz te obrazki oglądać, obrabiać je lub wysłać na drukarkę. Informacje mogą być później dodane do PhotoCD; jest to znane jako wielosesyjność.
Nagrywarki CD (CD-R) są także dostępne i są coraz bardziej opłacalne. Używają one innych środków i specjalizowanego wyposażenia do nagrywania, ale płyta wynikowa może być odczytana przez jakikolwiek napęd CD-ROM.
W przyszłości spodziewa się, że sprzedawy CD-ROM-ów zaoferują nowe technologie, które będą zwiększały pojemność wraz ze wzrostem zapotrzebowania.
W sekcji tej znajdują się sterowniki oraz interfejsy, które są obecnie obsługiwane przez Linux-a. Informacje oparte są na najnowszym stabilnym jądrze - 2.0.33. Rozwojowe jądra (2.1.x) są także dostępne, ale nie ma gwarancji, że będą stabilne.
Informacje te są ważne tylko dla Linux-a na platformie Intel. Wiele z nich można także zastosować dla innych platform, ale nie mam żadnych doświadczeń czy informacji z pierwszej ręki.
ATAPI (ATA Packet Interface) jest protokołem do kontrolowania urządzeń masowego zapisu. Tworzy on interfejs ATA (AT Attachment), oficjalna standardowa nazwa ANSI dla intrfejsów IDE rozwijanych dla napędów dysków twardych. ATAPI jest popularnie stosowany do dysków twardych, CD-ROM-ów, taśm i innych urządzeń. Obecnie najbardziej popularny interfejs - oferuje większość funkcji SCSI, bez drogich kontrolerów czy kabli.
Jądro Linux-a ma sterownik urządzenia, który powinien współpracować z każdym napędem CD-ROM ATAPI. Sprzedawcy dostarczający kompatybilne napędy to: Aztech, Mitsumi, NEC, Sony, Creative Labs i Vertos. Jeśli nabyłeś ostatnio napęd CD-ROM, szczególnie jeśli jest on czterokrotnej prędkości lub szybszy, to jest to prawie na pewno IDE/ATAPI.
SCSI (Small Computer Systems Interface) jest popularnym formatem dla napędów CD-ROM. Głównymi zaletami są rozsądnie szybka prędkość działania, możliwość podłączania wielu urządzeń, i obsługa na wielu platformach komputerowych. Jedną z wad jest droga karta kontrolera i kabli.
Każdy napęd CD-ROM SCSI z blokami o rozmiarze 512 lub 2048 bajtów powinien działać pod Linxu-em; zawiera się tu stanowcza większość napędów CD-ROM dostępnych na rynku.
Będziesz także potrzebował obsługiwanej karty SCSI; w SCSI HOWTO znajdziesz więcej informacji na temat interfejsów sprzętowych.
Zauważ, że niektóre CD-ROM-y zawierają swoje własne kontrolery ze zmodyfikowanym interfejsem, który nie jest w peni kompatybilny z SCSI (np. może nie pozwalać na dodawanie innych urządzeń na szynie SCSI). Taki sprzęt raczej nie będzie działać na Linux-ie.
Dostępne jest kilka takich CD-ROM-ów; interfejs jest z reguły dostarczany na karcie dźwiękowej. Proste karty z takimi interfejsami równorzędnymi do tych na kartach dźwiękowych są także dostępne. Napędy te są z reguły tańsze i mniejsze niż napędy SCSI. Głównymi ich wadami są brak stadaryzacji i możliwości rozszerzania.
Zauważ, że własne interfejsy są czasami mylnie nazywane interfejsami IDE, ponieważ tak jak dyski IDE, używają prostego interfejsu opartego na szynie PC/AT. Żeby zwiększyć całe zamieszanie niektórzy dostawcy, najczęściej Creative Labs, dostarczyli wiele różnych typów napędów CD-ROM i oferowali swoje interfejsy, interfejsy SCSI i ATAPI na swoich kartach dźwiękowych.
W tabeli poniżej znajdują się napędy CD-ROM z własnymi
interfejsami, które działają pod Linux-em. Sterowniki dla
dodatkowych urządzeń mogą być dostępne w ostatniej wersji
rozwojowej jądra albo jako łaty do jądra. Te drugie można
najczęściej znaleźć na
ftp.icm.edu.pl. Sprawdź także ostatnie informacje zawarte w
plikach README dostarczanych wraz z jądrem Linux-a umieszczonych w
katalogu /usr/src/linux/Documentation/cdrom.
Napędy CD-ROM ze swoimi interfejsami
Sprzedawca Model Sterownik w jądrze Uwagi
------ ----- ------------- --------
Panasonic CR-521 sbpcd 1
Panasonic CR-522 sbpcd 1
Panasonic CR-523 sbpcd 1
Panasonic CR-562 sbpcd 1
Panasonic CR-563 sbpcd 1
Creative Labs CD-200 sbpcd
IBM External ISA sbpcd 2
Longshine LCS-7260 sbpcd
Teac CD-55A sbpcd
Sony CDU-31A cdu31a
Sony CDU-33A cdu31a
Sony CDU-535 sonycd535 3
Sony CDU-531 sonycd535
Aztech CDA268-01A aztcd 4
Orchid CDS-3110 aztcd
Okano/Wearnes CDD110 aztcd
Conrad TXC aztcd
CyCDROM CR520ie aztcd
CyCDROM CR940ie aztcd
GoldStar R420 gscd 5
Philips/LMS CM206 cm206 6
Mitsumi CRMC LU005S mcd/mcdx 7, 8
Mitsumi FX001 mcd/mcdx 7, 8
Optics Storage Dolphin 8000AT optcd
Lasermate CR328A optcd
Sanyo H94A sjcd
various various isp16 9
MicroSolutions Backpack bpcd
Uwagi:
Jeśli napęd podany w powyższej liście nie jest obsługiwany przez jądro, to pewnie musisz uaktualnić je do nowszej wersji.
Jeśli twój napęd nie jest którymś z podanych wyżej, szczególnie jeśli został kupiony ostatnio i jest czterokrotnej prędkości lub szybszy, to najprzypuszczalnej używa on interfejsu IDE/ATAPI, wymienionego w poprzedniej sekcji. Prostym najpopularniejszym błędem popełnianym przez użytkowników CD-ROM-u na Linux-ie jest zakładanie, że każdy napęd podłączony do karty SoundBlaster powinien używać sterownika SBPCD. Creative Labs i większość innych sprzedawców nie sprzedają już napędów z własnymi interfejsami, przychylają się do standardu ATAPI/IDE.
Niektórzy sprzedawcy sprzedają takie właśnie CD-ROM-y. Jedyny napęd tego rodzaju obsługiwany obecnie przez Linux-a, to MicroSolutions Backpack.
Sterowniki dla jeszcze kilku takich napędów są dostępne osobno jako łaty na jądro albo ładowalne moduły. Najnowsze informacje na ten temat możesz znaleźć pod adresem http://www.torque.net/linux-pp.html.
Jest jeszcze jeden sterownik w jądrze dla napędów Panasonic/Matsushita CR-56x - pcd-0.29.tar.gz. Napisany został przez Zoltana Vorosbaranyi. Można go znaleźć pod adresem ftp.tarki.hu.
Kolejne sekcje omawiają każdy ten punkt w szczegółach.
Postępuj zgodnie ze wskazówkami producenta, albo poproś sprzedawcę o zainstalowanie. Szczegóły będą się różniły w zależności od tego czy napęd jest wewnętrzny czy zewnętrzny, od typu interfejsu. Nie ma żadnych specjalnych wymagań instalacyjnych co do Linux-a. Możesz musieć poustawiać odpowiednio zworki na napędzie i/lub karcie z interfejsem; niektóre sterowniki w jądrze zawierają pliki README, w których są takie informacje.
Jak to jest wyjaśnione w pliku ide-cd, CD-ROM-y ATAPI powinny
być ustawione jako "single" lub "master", a nie "slave" jeśli tylko
jedno urządzenie IDE jest podłączone do interfejsu (chociaż w
ostatnich jądrach to ograniczenie nie jest już stosowane).
Jeśli instalujesz Linux-a z CD-ROM-u to najprawdopodobniej użyjesz dyskietek "boot" i/lub "root" dostarczonych jako część dystrybucji Linux-a. Jeśli jest to możliwe, powinieneś wybrać dyskietkę startową z jądrem zawierającym sterownik dla twojego CD-ROM-u. Jeśli nie możesz znaleźć takiej dyskietki, to jest kilka rozwiązań:
W Installation-HOWTO (dostępnym również w języku polskim) znajdziesz więcej informacji na temat instalacji Linux-a. Jeśli kupiłeś Linux-a na CD-ROM-ie, to przypuszczalnie zawarte są jakieś informacje dotyczące instalacji (taka mała książeczka wewnątrz skrzyneczki na biżuterię i/lub pliki na płycie).
Po zainstalowaniu Linux-a, większość użytkowników chce skompilować jądro, zwykle z jednego z tych powodów:
Szczegóły na temat kompilacji jądra można znaleźć w Kernel-HOWTO dostępnym w języku polskim. Ja wspomnę tutaj tylko kilka rzeczy specyficznych dla CD-ROM-ów.
Oczywiście, musisz zaznaczyć obsługę swojego CD-ROM-u podczas wykonywania polecenia "make config".
Jeśli masz CD-ROM ATAPI, to musisz odpowiedzieć "yes" na te pytania:
Enhanced IDE/MFM/RLL disk/cdrom/tape support (CONFIG_BLK_DEV_IDE) [Y/n/?]
Include IDE/ATAPI CDROM support (CONFIG_BLK_DEV_IDECD) [Y/n/?]
dla napędów SCSI włącz te opcje:
SCSI support (CONFIG_SCSI) [Y/n/m/?]
SCSI CD-ROM support (CONFIG_BLK_DEV_SR) [Y/n/m/?]
Włącz także obsługę swojego kontrolera:
Adaptec AHA152X support (CONFIG_SCSI_AHA152X) [Y/n/m/?]
Dla napędów z własnymi interfejsami włącz odpowiedni sterownik. Możesz użyć tabeli podanej wcześniej, aby zobaczyć jaki sterownik jest potrzebny dla twojego modelu.
Wirtualnie wszystkie CD-ROM-y używają systemu plików ISO-9660, więc musisz także włączyć jego obsługę:
ISO9660 cdrom filesystem support (CONFIG_ISO9660_FS) [Y/n/m/?]
Chociaż nie jest to potrzebne do działania CD-ROM-u, jeśli masz kartę dźwiękową, która jest obsługiwana przez Linux-a, to możesz także dołączyć jej obsługę. Odpowiednim dokumentem będzie tutaj Sound-HOWTO dostępne także w języku polskim.
Powinieneś potem postępować zgodnie ze zwykłą procedurą kompilacji i instalacji jądra. Nie startuj nowego jądra dopóki nie stworzysz plików urządzeń i nie ustawisz parametrów startowych tak jak to jest opisane w następnej sekcji.
Obsługa systemu plików ISO-9660, tak jak prawie wszystkie sterowniki do CD-ROM-ów może być stworzona jako ładowalny moduł. Pozwala to na ładowanie i usuwanie go z pamięci bez potrzeby restartu komputera, uwalniając pamięć. Polecam, zebyś spróbował najpierw zainstalować CD-ROM ze sterownikami wkompilowanymi w jądro. Jak używać modułów opisane jest w dokumentaji dołączonej do nich i w Kernel-HOWTO.
Jeśli twój napęd nie jest obsługiwany przez twoje jądro, to musisz pewnie uaktualnić je.
Możliwe też, że musisz użyć sterownika, który dostarczany jest osobno. To z reguły łączy się z łataniem jądra. Jeszcze raz Kernel-HOWTO wyjaśnia jak się to robi.
Zauważ, że możesz także wybrać konfigurację a'la menu poleceniem "make menuconfig" oraz konfigurację w okienkach X11 "make xconfig". Wszystkie trzy rodzaje konfiguracji mają podręczną pomoc.
Jądro używa plików urządzeń aby zidentyfikować którego sterownika
urządzeń użyć. Jeśli masz standardową dystrybucję, to możliwe, że
stworzyłeś te pliki podczas instalacji. Na przykład w Slackware
jest narzędzie setup w postaci menu, które zawiera ustawienie
CD-ROM-u oraz większość systemów ma skrypt /dev/MAKEDEV.
Jeśli nie użyjesz tych metod, to możesz to zrobić ręcznie, jak to
jest opisane dalej w tym dokumencie. Nawet jeśli skorzystasz z tych
metod, to zaleca się żebyś chociaż zweryfikował te pliki z
informacjami zawartymi tutaj.
Pliki urządzeń tworzy się poleceniami wykonywanymi w powłoce, w
zależności od twojego napędu. Powinieneś to robić jako
root. Zauważ, że niektóre dystrybucje Linux-a mogą używać
trochę innego nazewnictwa niż podane tutaj.
Zaleca się także, żebyś zrobił symboliczne dowiązanie do urządzenia CD-ROM-u, aby łatwiej je zapamiętać. Na przykład, dowiązanie dla napędu IDE, który jest drugim urządzeniem na drugim interfejsie, należy zrobić poleceniem:
# ln -s /dev/hdd /dev/cdrom
Jeśli chcesz słuchać płyt audio, to będziesz musiał ustawić odpowiednie prawa dostępu dla pliku urządzenia (tego prawdziwego, a nie dowiązania), aby pozwolić wszystkim użytkownikom z niego czytać, np.
# chmod 664 /dev/hdd
# ls -l /dev/hdd
brw-rw-r-- 1 root disk 22, 64 Feb 4 1995 /dev/hdd
Podczas startu Linux-a, sterownik urządzenia próbuje sprawdzić czy
obecne są odpowiednie urządzenia, zwykle robi to, sprawdzając
specyficzne adresy. Wiele z tych sterowników sprawdza kilka
adresów, ale z powodu różnic w konfiguracji, możliwych konfliktów
urządzeń, ograniczeń sprzętowych, potrzebują one czasami pomocy w
identyfikacji adresów i innych parametrów. Większość sterowników
obsługuje opcje podawane w linii poleceń jądra, aby przekazać te
informacje do sterownika urządzenia. Może się to odbyć
interaktywnie, albo częściej, wpisując tę informację do
konfiguracji programu ładującego system. Np. przy LILO, dodałbyś do
swojego pliku /etc/lilo.conf polecenie append, takie
jak poniżej:
append = "sbpcd=0x230,SoundBlaster"
Więcej informacji znajdziesz w dokumentacji do LILO.
W następnej sekcji omówię sprawy dotyczące konkretnych sterowników,
włącznie z plikami urządzeń, parametrami startowymi i możliwościami
poszczególnych sterowników. Przypuszczalnie powinieneś przeczytać
tylko sekcję dla twojego typu napędu. Pliki README są zwykle w
katalogu /usr/src/linux/Documentation/cdrom.
Autor główny: Eberhard Moenkeberg (emoenke@gwdg.de) Obsługa wielosesyjności: tak (but not all drives) Obsługa wielu napędów: tak Obsługa ładowalnego modułu: tak Czytanie ramek audio: tak (CR-562, CR-563, CD-200 only) Automatyczne wykrywanie: tak Plik urządzenia: /dev/sbpcd, major 25 Plik konfiguracyjny: sbpcd.h Opcja konfiguracyjna dla jądra: Matsushita/Panasonic CDROM support? Plik README: sbpcd
Sterownik ten przyjmuje następujące parametry:
sbpcd=<io-address>,<interface-type>
Pierwszy parametr to adres bazowy urządzenia (np. 0x230) a
<interface-type> to jedno z "SoundBlaster", "LaserMate"
lub "SPEA". W pliku sbpcd.h znajdziesz wskazówki którego typu
interfejsu użyć. Parametr sbpcd=0 wyłącza automatyczne
wykrywanie, wyłączając tym samym sterownik.
Plik urządzenia może być stworzony poleceniem:
# mknod /dev/sbpcd b 25 0
Obsługiwane jest do czterech napędów na kontrolerze. Następne trzy napędy na pierwszym kontrolerze miałyby numery poboczne urządzenia od 1 do 3. Jeśli masz więcej niż jeden kontroler, stwórz urządzenia z liczbą główną 26, 27 i 28, aż do maksimum 4 kontrolerów (to w sumie 16 napędów CD-ROM; mam nadzieję, że dla większości użytkowników to wystarczająco :-).
Więcej informacji na temat tego sterownika znajdziesz w pliku
sbpcd.
Jeśli kupiłeś ostatnio napęd CD-ROM, to nie zakładaj, że jeśli podłączy się go do karty SoundBlaster, to powinien on używać tego sterownika. Większość napędów sprzedawanych teraz przez Creative Labs to napędy EIDEATAPI.
Autor główny: Ken Pizzini (ken@halcyon.com) Obsługa wielosesyjności: nie Obsługa wielu napędów: nie Obsługa ładowalnego modułu: tak Czytanie ramek audio: nie Automatyczne wykrywanie: nie Plik urządzenia: /dev/sonycd535, major 24 Plik konfiguracyjny: sonycd535.h Opcja konfiguracyjna dla jądra: Sony CDU535 CDROM support? Plik README: sonycd535
Sterownik ten przyjmuje parametry w postaci:
sonycd535=<io-address>
<io-address> oznacza adres bazowy kontrolera
(np. 0x320). Alternatywnie możesz ustawić ten adres w pliku
sonycd535.h i wkompilować tę wartość na stałe.
Plik urządzenia może być stworzony poleceniem:
# mknod /dev/sonycd535 b 24 0
Niektóre dystrybucje Linux-a używają /dev/sonycd dla tego
urządzenia. Starsze wersje sterownika używały głównego numeru 21;
upewnij się, że twój plik urządzenia jest poprawny.
Sterownik ten był wcześniej dystrybuowany jako łata, ale teraz jest
częścią standardowego jądra. Więcej informacji na temat tego
strownika znajdziesz w pliku sonycd535.
Autor główny: Corey Minyard (minyard@-rch.cirr.com) Obsługa wielosesyjności: tak Obsługa wielu napędów: nie Obsługa ładowalnego modułu: tak Czytanie ramek audio: tak Automatyczne wykrywanie: nie Plik urządzenia: /dev/cdu31a, major 15 Plik konfiguracyjny: cdu31a.h Opcja konfiguracyjna dla jądra: Sony CDU31A/CDU33A CDROM support? Plik README: cdu31a
Sterownik ten przyjmuje opcje w postaci:
cdu31a=<io-address>,<interrupt>,PAS
Pierwszy numer, to adres bazowy I/O karty (np. 0x340). Drugi jest numerem przerwania, którego należy użyć (0 oznacza próbkowanie(polling) i/o). Opcjonalny trzeci parametr pownien mieć wartość PAS jeśli napęd podłączony jest do karty dźwiękowej Pro Audio Spectrum 16, w innym przypadku należy go opuścić.
Jeśli sterownik jest modułem, to używa on trochę innego formatu. Podczas ładowania modułu programem modprobe lub insmod parametry przyjmują postać:
cdu31a_port=<io-address> cdu31a_irq=<interrupt>
Adres bazowy I/O jest wymagany, ale numer przerwania - nie.
Plik urządzenia może być stworzony przy pomocy:
# mknod /dev/cdu31a b 15 0
Więcej informacji na temat tego sterownika znajdziesz w pliku
cdu31a.
Zajrzyj także na stronę WWW zrobioną przez Jeffreya Oxenreidera ( zureal@infinet.com), która zawiera opis wielu problemów dotyczących tych sterowników. Można ją znaleźć pod adresem www.infinet.com.
Autor główny: Werner Zimmermann (zimmerma@rz.fht-esslingen.de) Obsługa wielosesyjności: tak Obsługa wielu napędów: nie Obsługa ładowalnego modułu: tak Czytanie ramek audio: nie Automatyczne wykrywanie: nie Plik urządzenia: /dev/aztcd0, major 29 Plik konfiguracyjny: aztcd.h Opcja konfiguracyjna dla jądra: Aztech/Orchid/Okano/Wearnes (non IDE) CDROM support? Plik README: aztcd
Sterownik ten przyjmuje parametry w postaci:
aztcd=<io-address>
Parametrem jest tutaj adres bazowy I/O karty (np. 0x340).
Plik urządzenia może być stworzony przy pomocy:
# mknod /dev/aztcd0 b 29 0
Zauważ, że sterownik ten jest przeznaczony tylko dla modelu CDA268-01A. Inne modele, włącznie z CDA268-03I i CDA269-031SE, nie posiadają własnych interfejsów i powinny używać standardowego sterownika IDECD (ATAPI).
Więcej informacji na temat tego sterownika znajdziesz w pliku aztcd.
Autor główny: Oliver Raupach (raupach@nwfs1.rz.fh-hannover.de) Obsługa wielosesyjności: nie Obsługa wielu napędów: nie Obsługa ładowalnego modułu: tak Czytanie ramek audio: nie Automatyczne wykrywanie: nie Plik urządzenia: /dev/gscd0, major 16 Plik konfiguracyjny: gscd.h Opcja konfiguracyjna dla jądra: Goldstar R420 CDROM support? Plik README: gscd
Sterownik ten przyjmuje parametry w postaci:
gscd=<io-address>
Jedynym parametrem jest tutaj adres bazowy I/O karty (np. 0x340).
Plik urządzenia może być stworzony przy pomocy:
# mknod /dev/gscd0 b 16 0
Więcej informacji na temat tego sterownika znajdziesz w pliku
gscd oraz na stronie WWW
linux.rz.fh-hannover.de.
Autor główny: Martin (martin@bdsi.com) Obsługa wielosesyjności: nie bsługa wielu napędów: nie Obsługa ładowalnego modułu: tak Czytanie ramek audio: nie Automatyczne wykrywanie: nie Plik urządzenia: /dev/mcd, major 23 Plik konfiguracyjny: mcd.h Opcja konfiguracyjna dla jądra: Standard Mitsumi CDROM support? Plik README: mcd
To jest starszy sterownik dla napędów Mitsumi, który był dostępny
przez jakiś czas. Możesz spróbować nowszego sterownika mcdx,
który ma kilka nowych funkcji, ale jest przypuszczalnie mniej
stabilny.
Sterownik ten przyjmuje następujące parametry:
mcd=<io-address>,<irq>
Kolejne parametry to adres bazowy I/O karty (np. 0x340) oraz numer przerwania.
Plik urządzenia można stworzyć poleceniem:
# mknod /dev/mcd b 23 0
Więcej informacji na temat tego sterownika znajdziesz w pliku
mcd.
Autor główny: Heiko Schlittermann Obsługa wielosesyjności: tak Obsługa wielu napędów: tak Obsługa ładowalnego modułu: tak Czytanie ramek audio: nie (brak obsługi sprzętowej) Automatyczne wykrywanie: nie Plik urządzenia: /dev/mcdx0, major 20 Plik konfiguracyjny: mcdx.h Opcja konfiguracyjna dla jądra: Experimental Mitsumi support? Plik README: mcdx
Jest to nowszy sterownik dla napędów Mitsumi. Starszy i
przypuszczalnie bardziej stabilny - mcd - jest nadal dostępny.
Sterownik ten przyjmuje następujące parametry:
mcdx=<io-address>,<irq>
Kolejne parametry to adres bazowy I/O karty (np. 0x340) i numer przerwania.
Plik urządzenia można stworzyć poleceniem:
# mknod /dev/mcdx0 b 20 0
Jeśli kupiłeś ostatnio napęd CD-ROM Mitsumi, to nie zakładaj, że powinien on używać tego sterownika. Niektóre modele mitsumi są teraz typu EIDE/ATAPI i powinny używać standardowego sterownika idecd.
Więcej informacji na temat tego sterownika znajdziesz w pliku
mcdx.
Autor główny: David A. van Leeuwen (david@tm.tno.) Obsługa wielosesyjności: tak Obsługa wielu napędów: nie Obsługa ładowalnego modułu: tak Czytanie ramek audio: nie Automatyczne wykrywanie: tak Plik urządzenia: /dev/cm206cd, major 32 Plik konfiguracyjny: cm206.h Opcja konfiguracyjna dla jądra: Philips/LMS CM206 CDROM support? Plik README: cm206
Sterownik ten przyjmuje następujące parametry:
cm206=<io-address>,<interrupt>
Pierwszy numer jest adresem bazowym I/O karty (np. 0x340). Drugi to numer przerwania.
Plik urządzenia może być stworzony poleceniem:
# mknod /dev/cm206cd b 32 0
Więcej informacji na temat tego sterownika znajdziesz w pliku
cm206.
Autor główny: Leo Spiekman (spiekman@dutette.et.tudelft.nl) Obsługa wielosesyjności: tak Obsługa wielu napędów: nie Obsługa ładowalnego modułu: tak Czytanie ramek audio: nie Automatyczne wykrywanie: nie Plik urządzenia: /dev/optcd0, major 17 Plik konfiguracyjny: optcd.h Opcja konfiguracyjna dla jądra: Experimental Optics Storage ... CDROM support? Plik README: optcd
Sterownik ten przyjmuje następujące parametry:
optcd=<io-address>
Parametrem jest tutaj adres bazowy I/O karty (np. 0x340).
Plik urządzenia można stworzyć:
# mknod /dev/optcd0 b 17 0
Więcej informacji na temat tego sterownika znajdziesz w pliku
optcd.
Autor główny: Vadim V. Model (vadim@rbrf.msk.su) Obsługa wielosesyjności: nie Obsługa wielu napędów: nie Obsługa ładowalnego modułu: tak Czytanie ramek audio: nie Automatyczne wykrywanie: nie Plik urządzenia: /dev/sjcd, major 18 Plik konfiguracyjny: sjcd.h Opcja konfiguracyjna dla jądra: Experimental Sanyo H94A CDROM support? Plik README: sjcd
Sterownik ten przyjmuje następujące parametry:
sjcd=<io-address>,<interrupt>,<dma>
Kolejne parametry to: adres bazowy, przerwanie i kanał DMA (np. sjcd=0x340,10,5).
Plik urządzenia może być stworzony poleceniem:
# mknod /dev/sjcd b 18 0
Więcej informacji na temat tego sterownika znajdziesz w pliku
sjcd.
Autor główny: Grant R. Guenther (grant@torque.net) Obsługa wielosesyjności: nie wiadomo Obsługa wielu napędów: nie Obsługa ładowalnego modułu: tak Czytanie ramek audio: nie Automatyczne wykrywanie: tak Plik urządzenia: /dev/bpcd, major 41 Plik konfiguracyjny: bpcd.h Opcja konfiguracyjna dla jądra: MicroSolutions backpack CDROM support? Plik README: bpcd
Sterownik ten przyjmuje parametry w postaci:
bpcd=<io-address>
Parametr oznacza tu adres bazowy (np. bpcd=0x3bc).
Plik urządzenia można stworzyć poleceniem:
# mknod /dev/bpcd b 41 0
Sterownik ten jest zawarty w jądrach wersji 2.1. Więcej informacji
na temat tego sterownika znajdziesz w pliku bpcd.
Autor główny: David Giller Obsługa wielosesyjności: tak (zależy od napędu) Obsługa wielu napędów: tak Obsługa ładowalnego modułu: tak Czytanie ramek audio: nie Automatyczne wykrywanie: tak Plik urządzenia: /dev/scd0, major 11 Plik konfiguracyjny: cdrom.h Opcja konfiguracyjna dla jądra: SCSI CDROM support? Plik README: brak
Parametry podawane podczas startu są zależne od typu kontrolera SCSI. Więcej informacji znajdziesz w SCSI HOWTO.
Obsługiwana jest większa ilość sterowników (ilość ograniczona jest maksymalną ilością urządzeń na szynie SCSI). Stwórz pliki urządzeń z liczbą główną 11 i liczbą poboczną począwszy od 0:
# mknod /dev/scd0 b 11 0
# mknod /dev/scd1 b 11 1
Sterownik sam z siebie nie ma możliwości czytania cyfrowych ramek audio, ale niektóre napędy SCSI mają taką możliwość i będą działać z programem cdda2wav (który używa ogólnego interfejsu SCSI jądra).
Autor główny: Scott Snyder (snyder@fnald0.fnal.gov)
Obsługa wielosesyjności: tak
Obsługa wielu napędów: tak
Obsługa ładowalnego modułu: nie
Czytanie ramek audio: tak (w obsługiwanych napędach)
Automatyczne wykrywanie: tak
Plik urządzenia: /dev/hd{a,b,c,d}, major 22
Plik konfiguracyjny: cdrom.h
Opcja konfiguracyjna dla jądra: Include support for IDE/ATAPI CDROMs?
Plik README: ide-cd
Sterownik ten jest przeznaczony dla CD-ROM-ów ATAPI. Sterownik przyjmuje następujące parametry:
hdx=cyls,heads,sects,wpcom,irq
lub
hdx=cdrom
hdx może być jednym z: hda,hdb,hdc,hdd, albo po prostu hd i
wtedy oznacza kolejny napęd. Tylko pierwsze trzy parametry są
wymagane (cyls,heads,sects). Np. hdc=1050,32,64 hdd=cdrom.
Zmuszenie sterownika IDE, aby rozpoznał twój CD-ROM, może
przysparzać trochę kłopotów, szczególnie jeśli masz więcej niż 2
urządzenia albo więcej niż 1 kontroler IDE. Zwykle wszystko co jest
wymagane, to podać poprawne opcje z LILO. Szczegółówe informacje
jak to zrobić znajdziesz w pliku /usr/src/linux/Documentation/ide-cd.
Przeczytaj go dokładnie.
Nowsze jądra mają lepszą obsługę dla większej ilości urządzeń IDE. Jeśli masz problemy ze starszym jądrem, to uaktualnienie może pomóc.
Niektóre kontrolery mają problemy sprzętowe, które sterownik może obejść. Możliwe, że musisz podać dodatkowe parametry sterownikowi, aby to umożliwić. Zajrzyj do dokumenctaji.
Możesz teraz wystartować system z nowym jądrem. Pilnuj czy nie pojawi się komunikat podobny do tego:
hdd: NEC CD-ROM DRIVE:282, ATAPI CDROM drive
który informuje, że CD-ROM został odnaleziony przez sterownik (komunikat będzie się różnił w zależności od napędu).
Jeśli komunikaty podczas startu pojawiają się zbyt szybko, to
możesz do nich powrócić wciskając SHIFT-PgUp (jeśli nie przełączałeś
konsol), albo wyświetlić je poleceniami dmesg lub tail
/var/adm/messages.
Jeśli napęd nie może być odnaleziony, to jest problem. Zobacz sekcję na temat rozwiązywania problemów..
Aby zamontować CD-ROM, włóż płytę do napędu, i uruchom polecenie
mount jako root (zakłąda się tutaj, że stworzyłeś
symboliczne dowiązanie do twojego pliku urządzenia tak jak to było
zalecane powyżej oraz że istnieje pusty katalog /mnt/cdrom):
# mount -t iso9660 -r /dev/cdrom /mnt/cdrom
Zawartość kompaktu znajduje się teraz w katalogu
/mnt/cdrom.
Są jeszcze inne opcje dla polecenia mount, które możesz użyć; zobacz w podręczniku systemowym "man" mount(8).
Możesz dodać pozycję do pliku /etc/fstab, aby
automatycznie montować CD-ROM podczas startu, albo żeby podać
parametry jakie mają być użyte podczas montowania; zobacz w
podręczniku systemowym "man" fstab(8).
Zauważ, że żeby odtwarzać płyty myzyczne nie powinieneś próbować ich montować.
Aby odmontować CD-ROM, użyj jako root polecenia umount:
# umount /mnt/cdrom
Płyta może być odmontowana tylko wtedy kiedy żaden proces nie żąda do niego dostępu (włączając w to przypadek, kiedy bieżącym katalogiem jest któryś z podkatalogów płyty lub jej katalog główny). Możesz potem wyjąć płytę. Większość napędów ma przycisk do wyjmowania płyt; Jest także osobny program służący do tego celu - eject.
Pamiętaj, że nie możesz wyjmować płyty podczas gdy jest ona zamontowana (to może lub nie być możliwe w zależności od rodzaju napędu jaki posiadasz). Niektóre sterowniki CD-ROM potrafią automatycznie wysuwać szufladkę jeśli płyta jest odmontowywana i wsuwać ją kiedy jest montowana (można wyłączyć tę funkcję podczas kompilacji albo przy pomocy programu).
Możliwe jest, że po słuchaniu płyty muzycznej nie będziesz mógł zamontować płyty. Musisz wysłać polecenie audio "stop" (przy pomocy jakiegoś programu do odtwarzania) przed próbą montowania. Problem ten wydaje się pojawiać tylko ze sterownikiem SBPCD.
Ostatnie wersje jądra 2.0 i 2.1 obsługują automounter oparty na jądrze, który dostarcza przeźroczyste dla użytkownika montowanie usuwalnych mediów włącznie z CD-ROM-em. Potrzebne narzędzia znajdziesz pod adresem ftp.icm.edu.pl.
Jeśli wciąż masz problemy po przejściu przez instalację wg. tego HOWTO, to tutaj jest kilka rzeczy, które należy sprawdzić. Punkty są umieszczone wg. narastającej złożoności. Jeśli któryś z nich zawiedzie, to rozwiąż ten problem zanim posuniesz się dalej.
Możesz sprawdzić datę jądra, aby zobaczyć czy jest to to z
obsługą CD-ROM-u. Można to zrobić poleceniem uname:
% uname -a
Linux fizzbin 2.0.18 #1 Fri Sep 6 10:10:54 EDT 1996 i586
albo wyświetlając zawartość pliku /proc/version:
% cat /proc/version
Linux version 2.0.18 (root@fizzbin) (gcc version 2.7.2) #1 Fri Sep 6 10:10:54 EDT 1996
Jeśli data się nie zgadza, to masz cały czas stare jądro. Czy
aby na pewno zresetowałeś komputer? Jeśli używasz LILO, czy
przeinstalowałeś je (z reguły pisząc /sbin/lilo)? Jeśli
startujesz z dyskietki, czy zrobiłeś nową dyskietkę i użyłeś jej
podczas startu?
Sprawdzić to możesz wyświetlając zawartość pliku
/proc/devices:
% cat /proc/devices
Character devices:
1 mem
2 pty
3 ttyp
4 ttyS
5 cua
7 vcs
Block devices:
3 ide0
22 ide1
Najpierw poszukaj sterownika swojego CD-ROM-u. Są to wszystko
urządzenia blokowe, w tym przypadku widać, że obecny jest sterownik
idecd z numerem głównym 22.
Upewnij się także, że wkompilowana jest obsługa systemu plików
ISO-9660 przez wyświetlenie zawartości pliku /proc/filesystems:
% cat /proc/filesystems
ext2
msdos
nodev proc
iso9660
Możesz też sprawdzić, które adresy I/O są używane przez sterownik
zaglądając do pliku /proc/ioports:
howto % cat /proc/ioports
...
0230-0233 : sbpcd
...
Jeśli któryś ze sterowników, który myslałeś, że wkompilowałeś, się nie pojawia, to coś poszło nie tak z konfiguracją lub kompilacją jądra. Zacznij proces instalacji jeszcze raz począwszy od konfiguracji i kompilacji jądra.
Upewnij się, że CD-ROM został wykryty podczas startu jądra.
Powinieneś zobaczyć odpowiedni komunikat. Jeśli komunikat ten
przesunął się poza ekran, to możesz go sprawdzić poleceniem
dmesg.
% dmesg
lub
% tail /var/adm/messages
Jeśli twój napęd nie został zidentyfikowany, to coś jest nie tak. Upewnij się, że jest podłączony do prądu i że wszystkie kable są poprawnie podłączone. Jeśli twój napęd posiada zworki do przełączania zakresów adresów, to sprawdź czy są poprawnie ustawione (np. napęd 0 jeśli masz tylko jeden napęd). CD-ROM-y ATAPI muszą być ustawione jako "single" lub "master", a nie "slave" jeśli do interfejsu jest podłączone tylko jedno urządzenie. Jeśli napęd działa pod DOS-em, to jest pewne, że sprzęt działa.
Wiele sterowników używa automatycznego wykrywania, ale niektóre nie i wykrywanie to nie zawsze działa. Użyj parametrów startowych podanych dla twojego typu sterownika. Jeśli nie jesteś pewien co do adresów I/O czy innych parametrów, to popróbuj kilka razy. LILO może być (i zwykle jest) tak skonfigurowane, żeby przyjmować parametry wpisane ręcznie podczas startu.
Inna możliwość jest taka, że użyłeś złego sterownika. Czasami dokumentacja może odwoływać się do interfejsów własnych jako do IDE, myląc użytkownika, który myśli, że jego napęd jest ATAPI.
Jeszcz inna możliwość to: twój napęd (albo karta interfejsu)
jest jedną z "kompatybilnych", która potrzebuje inicjalizacji przez
sterownik DOS-owy. Spróbuj wystartować DOS-a i załadować sterownik
dostarczony przez sprzedawcę. Potem zresetuj miękko przy pomocy
klawiszy Control-Alt-Delete.
Jeśli twojego napędu nie ma w tym dokumencie, to możliwe jest, że po prostu nie ma sterownika pod Linux-a dla niego. Możesz sprawdzić w adresach podanych pod koniec tego dokumentu.
Spróbuj odczytać coś z CD-ROM-u. Przy następującym poleceniu światełko (jeśli je masz) powinno się zapalić i nie powinno być żadnych błędów. Upewnij się, że płyta jest włożona i użyj odpowiedniego dla siebie pliku urządzenia.
# dd if=/dev/cdrom of=/dev/null bs=2048
^C
124+0 records in
124+0 records out
Jeśli to działa, to jądro porozumiewa się z napędem i możesz przejść do kroku 5.
Jeśli nie, to możliwą przyczyną jest plik urządzenia. Upewnij się,
że plik urządzenia w katalogu /dev ma poprawne liczby
główną i poboczną zgodnie z tym co był podane wcześniej dla twojego
typu napędu. Sprawdź czy prawa dostępu pozwalają na odczyt i zapis.
Raczej mniej prawdopodobnym jest żebyś miał jakiś problem sprzętowy. Spróbuj potestować napęd pod DOS-em, jeśli to możliwe, żeby sprawdzić czy to mogłoby być przyczyną.
Jeśli możesz czytać z napędu, ale nie możesz go zamontować, to
sprawdź najpierw czy wkompilowałeś obsługę systemu plików ISO-9660
wyświetlając zawartość pliku /proc/filesystems jak
poprzednio.
Upewnij się, że montujesz napęd z opcjami "-t iso9660" i "-r" i że
dobry i znany ci kompakt ISO-9660 (nie muzyczny) jest w
napędzie. Normalnie musisz montować napęd jako użytkownik
root.
Upewnij się, że katalog, do którego montujesz, istnieje i że jest pusty.
Jeśli CD-ROM jest montowany automatycznie podczas startu, to upewnij się, że masz poprawny wpis w pliku /etc/fstab.
Jeśli jest u ciebie uruchomiony syslog demon, to mogą być
komunikaty o błędach pochodzące od jądra, których nie
widzisz. Spróbuj użyć polecenia dmesg:
% dmesg
SBPCD: sbpcd_open: no disk in drive
W zależności od konfiguracji twojego systemu, błędy mogą być także
zapisane w katalogu /var/adm.
Jeśli napęd działa z CD-ROM-ami, ale nie odtwarza płyt audio, oto kilka możliwych rozwiązań.
Potrzebujesz programu do odtwarzania płyt muzycznych. Niektóre z nich mogą być popsute, albp mogą nie współpracować z twoim napędem. Spróbuj użyć innych i/lub przekompilować je samemu. Dobrym miejscem do poszukania takich programów jest ftp.icm.edu.pl.
Kilka sterowników nie obsługuje odtwarzania płyt audio. Sprawdź plik README albo źródło sterownika czy to ten przypadek.
Sprawdź czy płytę słychać przez wejście słuchawkowe. Jeśli tak to problem leży tu raczej w twojej karcie muzycznej. Użyj programu miksującego, aby ustawić urządzenie wejściowe i poziom głośności. Upewnij się, że założyłeś kabel audio z napędu CD-ROM-u do karty muzycznej. Upewnij się, że sterownik do karty dźwiękowej działa (zobacz Sound-HOWTO dostępne po polsku).
Jeśli ciągle masz problemy to tutaj jest jeszcze kilka ostatnich rzeczy, których możesz spróbować:
pl.comp.os.linux albo
jakąś inną związaną z Linux-em./usr/src/linux/MAINTAINERS)Esc-x doctor :-)
W sekcji tej znajdują się niektóre aplikacje związane z CD-ROM-ami dostępne pod Linux-a. Najnowsze informacje na temat archwiów oprogramowania znajdziesz w "Linux Software Map".
Jest kilka programów umożliwiających słuchanie płyt muzycznych zarówno poprzez wyjście słuchawkowe jak przez kartę muzyczną.
- graficzna odtwarzarka pod X11, z bazą kompaktów i wieloma innymi funkcjami.
- interaktywna odtwarzarka tekstowa.
- prosta odtwarzarka pod X11.
- bardzo prosta odtwarzarka obsługiwana z linii poleceń.
- odtwarzarka pod X11 napisana dla Motif-a
- inna odtwarzarka pod X11 dla napędów Mitsumi
- inna odtwarzarka pod X11 połączona z mikserem dźwięku i programem do pomiaru VU.
- narzędzia obsługiwane z linii poleceń do odtwarzania płyt audio.
Niektóre z tych programów są zaprogramowane, aby używać konkretnego
urządzenia dla CD-ROM-u (np. /dev/cdrom). Możliwe, że
możesz podać prawidłowe urządzenie jako parametr, albo możesz
stworzyć symboliczne dowiązanie w katalogu /dev. Jeśli
wysyłasz wyjście do karty muzycznej, to możliwe, że chcesz użyć
miksera, aby ustawić głośność, albo żeby podać wejście z kompaktu,
żeby coś nagrać.
Płyty PhotoCD używają systemu plików ISO-9660 zawierający pliki z obrazami we własnym formacie. Nie wszystkie napędy CD-ROM pozwalają na czytanie w tym formacie.
Program Hadmuta Danischa - hpcdtoppm - zamienia pliki
PhotoCD na przenośny format pixmap. Można go ściągnąć z
ftp.gwdg.de albo jako część
narzędzi PBM (Portable Bit Map) dostępnych w wielu archiwach
(poszukaj "pbm" lub "netpbm").
Program photocd Gerda Knorra
kraxel@cs.tu-berlin.de
może zamieniać obrazy PhotoCD w pliki Targa lub bitmapy Windows i
OS/2.
Ten sam autor napisał program xpcd pod X11 obsługujący obrazy
PhotoCD. Możesz wybrać obraz myszką, zobaczyć widok roboczy w małym
okienku i załadować go w pięciu możliwych rozdzielczościach. Możesz
także zaznaczyć część obrazu i załadować tylko tę zaznaczoną
część. Pakietów tych możesz poszukać w
ftp.cs.tu-berlin.de.
Program do obróbki obrazów ImageMagic także obsługuje pliki PhotoCD. Jest dostępny z ftp.x.org
Pakiet mkisofs Erica Youngdale'a pozwala tworzyć system plików
ISO-9660 na partycjach twardego dysku. Może to być wykorzystane
później przy sprawdzaniu systemu plików CD-ROM-u przed zapisaniem
go na płytę.
Narzędzia dla właściwego zapisu danych na nagrywarkach są raczej specyficzne dla danego sprzedawcy. Wymagają także zapisu danych bez przerywania, tak że wielozadaniowy system taki jak Linux nie jest dobrym wyborem.
Są pewne narzędzia służące do weryfikowania kompaktu sformatowanego na ISO-9660; możesz ich użyć do sprawdzania podejrzanych płyt. Pakiet można znaleźć na ftp.cdrom.com. Napisane zostały przez Billa Siegmunda i Richa Morina.
Większość poleceń mount posiada opcję user. Jeśli zrobisz
taką pozycję w /etc/fstab:
/dev/sbpcd /mnt/cdrom iso9660 user,noauto,ro
to zwykły użytkownik będzie mógł zamontować i odmontować płytę poleceniami:
% mount /mnt/cdrom
% umount /mnt/cdrom
Płyta zostanie zamontowana z pewnymi opcjami, które zwiększają bezpieczeństwo (np. programy nie mogą być wykonywane, pliki urządzeń są ignorowane); w niektórych przypadkach może to być zbyt rygorystyczne.
Inną metodą jest zdybycie pakietu usermount, który pozwala
użytkownikom innym niż root montować i odmontowywać urządzenia
wyjmowalne takie jak dyskietki i CD-ROM-y, ale zmniejsza dostęp do
innych urządzeń (takich jak partycje twardych dysków). Dostępny jest
na większości serwerów ftp.
Pod adresem ftp.cdrom.com znajduje się plik źródłowy
mount.c, który pozwala na montowanie i odmontowywanie
CD-ROM-ów (tylko) przez normalnych użytkowników. Uruchamiany jest z
prawami root-a.
Płyta nie może być odmontowana jeśli jakikolwiek proces żąda do
niej dostępu, włącznie z przypadkiem kiedy bierzącym katalogiem
jest któryś z podkatalogów płyty lub jej katalog główny. Jeśli nie
możesz znaleźć procesu używającego płytę, to możesz użyć polecenia
fuser tak jak to pokazano poniżej:
% umount /cdrom
umount: /dev/hdd: device is busy
% fuser -v /cdrom
USER PID ACCESS COMMAND
/mnt/cdrom tranter 133 ..c.. bash
Na niektórych systemach możliwe, że musisz być root-em, żeby
uruchomić polecenie fuser, żeby zobaczyć procesy innych
użytkowników.
Musisz dodać pozycję do pliku /etc/exports. Wtedy
użytkownicy na tamtej maszynie będą mogli zamontować to
urządzenie. Szczegóły znajdziesz w poleceniu "man 5 exports".
Przy instalacji Linux-a najpopularniejszą metodą jest użycie dyskietki startowej. Niektóre dystrybucje pozwalają na start Linux-a bezpośrednio z płyty.
Michael Fulbright (
msf@redhat.com) zgłosił, że jeśli posiada się dobry CD-ROM,
ROM BIOS i napęd CD-ROM ATAPI, to jest możliwe startowanie z
płyty. Najnowsza wersja mkisofs także obsługuje tworzenie
takich dysków. Dodał on jakieś łaty do obsługi standardu El Torito
dla startowalnych CD-ROM-ów.
Heiko Eissfeldt (
heiko@colossus.escape.de) i Olaf Kindel napisali narzędzie,
które czyta dane audio i zachowuje je jako pliki dźwiękowe w
formacie .wav. Pakiet nazywa się cdda2wav.tar.gz i można
go pobrać z ftp.icm.edu.pl.
Ponieważ napędy CD-ROM zmieniają się bardzo szybko, trudno jest
powiedzieć które modele obsługują czytanie danych
cyfrowych. Najlepiej zdobyć najnowszy pakiet cdda2wav i
przeczytać zawartą tam dokumentację.
Więcej informacji na ten temat znajdziesz na stronie www.tardis.ed.ac.uk oraz w FAQ grupy alt.cd-rom wymienionym w referencjach.
Jeśli używasz tego polecenia na kompakcie w formacie ISO-9660 bez
Rock Ridge Extensions, to musisz dodać opcję -noleaf. Więcej
szczegółów w poleceniu "man find".
(Z moich doświadczeń wynika, że prawie wszystkie nowsze płyty Linux-a używają Rock Ridge Extensions, więc ten problem powinien występować bardzo rzadko.)
Pakiet X-CD-Roast jest graficznym interfejsem do obsługi nagrywarek
CD. Pakiet można znaleźć na ftp.icm.edu.pl w kataloogu
/pub/Linux/sunsite/utils/disk-management/.
Zobacz także "Linux CD-Writing HOWTO" pod adresem www.jtz.org.pl dostępne w języku polskim.
CD-ROM jest nośnikiem tylko do odczytu. We wcześniejszych wersjach jądra można było zamontować płytę CD do zapisu i odczytu, ale zapis był po prostu ignorowany. Od wersji 1.1.33 zostało to poprawione i CD-ROM-y muszą być montowane tylko-do-odczytu (np. z opcją -r).
Od wersji jądra 1.1.38, sterownik sbpcd wysuwa szufladkę kiedy płyta jest odmontowywana. Jeśli zamykasz system, to zamontowana płyta zostanie odmontowana i szufladka wysunięta.
Funkcja ta ma pomóc przy zmianie płyt. Jeśli szufladka jest wysunięta, to przy próbie odczytu lub zamontowania zostanie zamknięta automatycznie.
Stwierdziłem, że to powoduje problemy z niektórymi programami (np. cdplay i workbone). Od wersji 1.1.60 jądra można tę funkcję kontrolować programowo. Przykładowy program zawarty jest w dokumentacji do sterownika sbpcd programu (albo użyj eject).
Ten specjalny kompakt to pewnie płyta XA (jak wszystkie PhotoCD czy "one-offs" stworzone przy użyciu nagrywarek). Większość sterowników CD-ROM-ów nie obsługuje płyt XA, chociaż może znajdziesz gdzieś jakąś łatę, która dodaje obsługę takich płyt.
Sterownik sbpcd obsługuje XA. Jeśli używasz tego sterownika, to możesz sprawdzić czy płyta jest XA w ten sposób: otwórz plik sbpcd.c i włącz wyświetlanie "Table of Contents" (DBG_TOC). Skompiluj i zainstaluj nowe jądra i wystartuj je. Podczas każdego montowania TOC będzie wyświetlane na konsoli, albo logowane do pliku). Jeśli pierwszą wartością w TOC jest 20, to jest to płyta XA. Bajt ten ma wartość 00 w normalnych płytach. Jeśli TOC pokazuje różne ścieżki, to jest to także znak, że jest to płyta XA.
(dzięki dla Eberharda Moenkeberga za powyższą informację)
Innymi możliwościami dla nieodczytywalnych CD-ROM-ów są:
Kilku użytkowników zgłosiło, że osiągnęło jakieś sukcesy z wielopłytowymi napędami CD-ROM SCSI. Musisz przypuszczalnie włączyć opcję "Probe all LUNs on each SCSI device" przy konfiguracji jądra. Przynajmniej jeden użytkownik musiał także zwiększyć wartość oczekiwania (timeout) dla SCSI w sterowniku. Zgłoszono mi, że Nakamichi MBR-7 7 i Pioneer 12 działają.
Dostępne są także napędy wielopłytowe EIDE/ATAPI. Jądro w wersji
2.0 ma szczątkową obsługę dla napędów korzystających z funkcji
ioctl CDROM_SELECT_DISC. Plik z dokumentacją do sterownika IDE-CD
zawiera źródła krótkiego programu do wybierania kompaktów, albo
możesz użyć nowszej wersji opisanego wcześniej programu eject.
Niektóre płyty mają tak ustawione prawa dostępu do swojego głównego katalogu, że tylko użytkownik root może go czytać. Przykładem może tutaj być płyta InfoMagic z marca 1995. Jest to wyraźna niedogodność.
Następująca łata, grzeczność ze strony Christopha Lametera ( clameter@waterf.org) obchodzi ten problem w jądrze.
From: clameter@waterf.org (Christoph Lameter)
Newsgroups: comp.os.linux.setup
Subject: InfoMagic Developers Set: Fix for CD-ROM permissions
Date: 12 Apr 1995 20:32:03 -0700
Organization: The Water Fountain - Mining for streams of Living Water
NNTP-Posting-Host: waterf.org
X-Newsreader: TIN [version 1.2 PL2]
Zbiór płyt "InfoMagic Developers" z marca 1995 ma błędy ponieważ
informacja o prawach dostępu zapisana w katalogu głównym przysparza
następujących problemów:
1. Płyta 1 będzie zawsze miała właściciela/grupę 5101/51 i ma
dozwolony zapis (?)
2. Płyta 2 i 3 mają ustawione prawa rwx dla root-a i żadnych praw dla
innych użytkowników/grupy. Płyty tej nie można odczytać z innego
użytkownika niż root! Mam uruchomionego BBS-a i muszę je udostępnić do
zgrywania dla innych.
Widziałem już gdzieś tam kilka poprawek do tego. Jednak kłopot w tym,
że poprawki te zmieniają prawa dla WSZYSTKICH katalogów na płycie. Ta
poprawka zmienia TYLKO prawa dostępu do katalogu głównego płyty. Jeśli
chcesz uruchamiać części Linux-a bezpośrednio z tej płyty to możesz
wpaść w kłopoty jeśli wszystkie katalogi są czytelne dla wszystkich i
jeśli właścicielem wszystkich jest root.
Poprawka ta zmieni prawa dostępu dla katalogu głównego na r-xr-xr-x i
właściciela/grupę na wartości odpowiadające opcjom uid i gid polecenia
mount.
Aby założyć poprawkę:
cd /usr/src/linux/fs/isofs
patch <**TEN LIST**
i skompiluj ponownie jądro (możliwe, że musisz poprawić trochę tę
poprawkę w zależności od wersji twojego jądra).
Poprawka ta powinna się przypuszczalnie znaleźć w jądrze. Jaki interes
mają dane na płycie w grzebaniu prawami/właścicielem katalogu do
zamontowania?
--- inode.c.ORIG Wed Apr 12 17:24:36 1995
+++ inode.c Wed Apr 12 17:59:12 1995
@@ -552,7 +552,15 @@
these numbers in the inode structure. */
if (!high_sierra)
- parse_rock_ridge_inode(raw_inode, inode);
+ { parse_rock_ridge_inode(raw_inode, inode);
+ /* check for access to the root directory rights/owner CL */
+ if((inode->i_sb->u.isofs_sb.s_firstdatazone) == inode->i_ino)
+ { /* Change owner/rights to the ones demanded by the mount command */
+ inode->i_uid = inode->i_sb->u.isofs_sb.s_uid;
+ inode->i_gid = inode->i_sb->u.isofs_sb.s_gid;
+ inode->i_mode = S_IRUGO | S_IXUGO | S_IFDIR;
+ }
+ }
#ifdef DEBUG
printk("Inode: %x extent: %x\n",inode->i_ino, inode->u.isofs_i.i_first_extent);
@@ -805,4 +813,3 @@
}
#endif
-
Zauważ, że powyższa łata jest raczej stara i przypuszczalnie nie zainstaluje się gładko w jądrze wersji 2.0. Zobacz także pytanie na temat plików ukrytych w dalszej części tego dokumentu.
Co to znaczy jak otrzymam komunikat o błędzie od sterownika CD-ROM-u - np. taki: "hdxx: code: xx key: x asc: xx ascq: x"?
To jest komunikat o statusie/błędzie od napędu IDE
CD-ROM. Domyślnie sterownik IDECD wypisuje informacje otrzymane
przez napęd bez "zawracania jądru głowy". Możesz zmienić to domyślne
zachowanie, aby wyświetlał właściwy komunikat o błędzie, przez
zmianę wartości VERBOSE_IDE_CD_ERRORS w pliku
/usr/src/linux/drivers/block/ide-cd.c na 1 i rekompilację
jądra.
Oto jeden sposób. Polecenie to mierzy jaki czas przeznaczony jest na odczytanie 1500K danych z płyty:
% time -p dd if=/dev/cdrom of=/dev/null bs=1k count=1500
1500+0 records in
1500+0 records out
real 5.24
user 0.03
sys 5.07
Prędkość CD-ROM-u o pojedynczej prędkości wynosi 150 kb na sekundę, co powinno zabrać około 10 sekund. Przy prędkości podwójnej zabrałoby to 5 sekund, przy czterokrotnej - 2,5, itd...
Czas "real" powyżej jest przypuszczalnie tym, na który należy patrzeć - w tym przypadku jest to CD-ROM podwójnej prędkości. Możesz zwiększyć ilość danych, aby otrzymać bardziej dokładną wartość (w razie gdybyś pytał, to te dane nie są cache'owane). Przypuszczalnie powinieneś uruchomić to polecenie kilka razy i wziąć średnią z nich wszystkich.
Zwykłym symptomem jest to, że dysk startowy użyty do instalacji rozpoznał twój CD-ROM, ale po tym jak Linux został zainstalowany na dysku twardym czy dyskietce i zrestartowany - przestał rozpoznawać twój napęd.
Najpopularniejszym powodem jest tutaj fakt, że w niektórych
dystrybucjach jądro instalowane nie zawsze jest tym samym jądrem,
które znajduje się na twojej dyskietce startowej. Wybrałeś
dyskietkę, która obsługiwała twój CD-ROM, podczas gdy jądro, które
zainstalowałeś, jest jądrem "ogólnym" i nie ma w nim obsługi
CD-ROM-u. Możesz to sprawdzić postępując zgodnie ze wskazówkami
zawartymi w sekcji Rozwiązywanie problemów wcześniej w
tym dokumencie (np. zacznij od sprawdzenia /proc/devices).
Rozwiązaniem jest ponowna kompilacja jądra, upewniając się jednocześnie, że wszystkie sterowniki jakie potrzebujesz są włączone. Zobacz Kernel-HOWTO (po polsku) jeśli nie wiesz jak to zrobić.
Jeśli przekazałeś jakieś parametry startowe do dyskietki (np. "hdc=cdrom"), to musisz je dodać do konfiguracji twojego programu startującego (zwykle jest to plik /etc/lilo.conf).
Niektóre płyty posiadają pliki z ustawionym bitem "hidden". Normalnie nie można zobaczyć tych plików. Jeśli zamontujesz płytę z opcją "unhide", to wtedy pliki te powinny być dostępne (jakoś nie widać, żęby to było gdziekolwiek udokumentowane).
Jeśli chcesz napisać własną aplikację, jak np. odtwarzarka audio, to będziesz musiał zrozumieć API - interfejs programowana aplikacji (application programming interface).
Oryginalnie sterownik CD-ROM-u używał swojej własnej funkcji
ioctl(), aby obsłużyć funkcje specyficzne dla każdego napędu. Pliki
nagłówkowe takie jak /usr/include/linux/sbpcd.h opisują
je. Ponieważ wiele sterowników bazowało na innych sterownikach,
interfejsy, jeśli nie są identyczne, to mają wiele wspólnego.
Ostatnio powstała inicjatywa ustandaryzowania interfejsu dla
napędów CD-ROM kierowana przez Davida van Leeuwena
(
david@tm.tno.nl).
Polega ona na umieszczeniu ogólnego kodu w jednym miejscu i
upewnieniu się, że wszystkie sterowniki zachowują sie tak samo
Jest to udokumentowane w pliku
/usr/src/linux/Documentation/cdrom/cdrom-standard.tex. Kilka
sterowników to obsługuje. Spodziewam się, że w następnej głównej
wersji jądra (3.0?) wszyskie sterowniki CD-ROM-ów dostosują się do
tego API.
Moja książka, Linux Multimedia Guide, poświęca o wiele więcej miejsca tematowi programowania CD-ROM-ów, szczególnie jeśli chodzi o funkcje audio. Zobacz na koniec sekcji Referencje.
Jeśli masz CD-ROM, który ma długie nazwy pod Windows, ale nie pod Linux-em, może on być zformatowany do Microsoft-owego systemu plików Joliet. Rozwiązanie znajdziesz w odpowiedzi na następne pytanie.
Microsoft stworzył rozszerzenie do formatu ISO CD-ROM o nazwie Joliet. W czasie pisania obsługa dla Joliet była w trakcie opracowywania; łaty były dostępne z adresu url url="http://www-plateau.cs.berkeley.edu/people/chaffee/joliet.html"> lub ftp://www-plateau.cs.berkeley.edu/pub/multimedia/linux/joliet/.
Wspomniałem już o plikach README, zwykle zainstalowanych w
/usr/src/linux/Documentation/cdrom. Mogą być one "kopalnią
złota" jeśli chodzi o informacje.
Następujące dokumenty FAQ są okresowo wysyłane na grupę dyskusyjną news.answers i archiwizowane w takich miejscach w Internecie jak rtfm.mit.edu:
Przynajmniej tuzin firm sprzedaje dystrybucje Linux-a na CD-ROM-ach; większość z nich jest podana w Distribution HOWTO.
Następujące grupy dyskusyjne mają coś wspólnego z CD-ROM-ami:
Dobrym źródłem informacji są także grupy comp.os.linux.
Duże archiwum informacji z CD-ROM-ów jest na ftp.cdrom.com.
[Od tłumacza.] W Polsce polecam wspomniane już wcześniej ftp.icm.edu.pl.
Dokument FAQ na temat urządzeń IDE i ATA można zanleźć pod adresem rtfm.mit.edu oraz www.seagate.com.
Western Digital- firma, która zapoczątkowała protokół IDE - ma informacje na temat tego protokołu na swoim serwerze ftp.
Stronę WWW poświęconą multimediom można także znaleźć na viswiz.gmd.de. Creative Labs ma swoją stronę pod adresem www.creaf.com.
W Linux Documentation Project powstało kilka książek na temat Linux-a, włączając Linux Installation and Getting Started. Są one dostępne za darmo poprzez anonimowane FTP z większości archiwów Linux-owych albo można je otrzymać w formie trwałej.
Linux Software Map (LSM), czyli mapa oprogramowania pod Linux-a jest nieocenionym źródłem. LSM można znaleźć na różnych serwerach ftp włącznie z ftp.icm.edu.pl.
Lista dyskusyjna na temat Linux-a ma kilka "kanałów" poświęconych różnym tematom. Aby się dowiedzieć jak się dołączyć, wyślij list ze słowem "help" w treści na adres majordomo@vger.rutgers.edu. (Zauważ, że podczas pisania tego dokumentu listy te były porządnie przeciążone i szukano jakiegoś miejsca zastępczego.)
Na koniec bezwstydna reklama: Jeśli chcesz się dowiedzieć o wiele więcej na temat multimediów pod Linux-em (szczególnie na temat aplikacji i programowania CD-ROM-ów i kart muzycznych), zobacz moją książkę Linux Multimedia Guide, ISBN 1-56592-219-0, wydaną przez O'Reilly and Associates. Tak jak oryginalna wersja angielska, w druku są wersje francuska i japońska. Po szczegóły zadzwoń 800-998-9938 w Północnej Ameryce, albo sprawdź adres www.ora.com albo moją stronę domową www.pobox.com.
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:
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 /JTZ/.
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@jtz.org.pl. Jeśli chcesz sie na nią zapisać, to
wyślij list o treści subscribe jtz Imię Nazwisko na adres
majordomo@ippt.gov.pl
Zmiany w tym dokumencie wprowadzone przez tłumacza to:
- cofnięcie ekranu SHIFT-PgUp
- info o polskiej liście i grupie dyskusyjnej.
doc-linux-pl-2002.06.14.orig/html/Cyrillic-HOWTO.pl.html 0100664 0001750 0001750 00000211227 06770264140 021320 0 ustar coven coven
Dokument ten obejmuje to czego potrzebujesz aby skutecznie pisać, oglądać i drukować dokumenty po rosyjsku pod Linuxem. Chociaż dokument ten zakłada że jako systemu operacyjnego używasz Linuxa, większość z przedstawionych informacji stosuje się także do innych odmian Unixa. Postaram się zachować rozróżnienie tak widocznym jak to możliwe.
Istnieje pewna liczba popularnych dystrybucji linuxowych. Jako system przykładowy opiszę Linuxa Red Hat 3.0.3 (Picasso) oraz Red Hat 4.1 (Vanderbildt) - tego którego osobiście używam. Niemniej jednak postaram się zaznaczyć różnice, jeśli takowe istnieją, w instalacji Linux Slackware.
Ponieważ taka instalacja bezpośrednio modyfikuje i rozszerza system operacyjny, powinieneś zdawać sobie sprawę z tego co robisz. Chociaż starałem się sprawy maksymalnie uprościć, posiadanie pewnego doświadczenia z danym programem jest korzystne. Nie zamierzam opisywać czym jest system X Windows i jak składać dokumenty używając TeXa lub LaTeXa, albo jak zainstalować drukarkę w Linuxie. Problemy te omawiane są w innych dokumentach.
Z tych samych powodów opisuję instalację na skalę systemową, domyślnie wymagającą uprawnień administratora. Jeśli jednak istnieje możliwość instalacji na poziomie użytkownika, nie omieszkam jej wspomnieć.
Uwaga: system X Windows, TeX i inne składniki Linuxa są złożonymi systemami z wyrafinowaną konfiguracją. Jeśli coś sknocisz, możesz nie tylko nie dokonać instalacji cyrilicy, ale popsuć składnik, jeśli nie cały system. Nie ma to na celu cię odstraszać, lecz tylko sprawić abyś zrozumiał powagę operacji i był ostrożnym. Wstępna kopia zapasowa plików konfiguracyjnych jest wielce pożądana. Posiadanie pod ręką jakiegoś guru zawsze się przydaje.
Dokument ten dostępny jest na sunsite.unc.edu lub tsx-11.mit.edu jako część Linux Documentation Project. Może także być dostępny w różnych archiwach zawierających Linuxa. Co więcej, może także wchodzić w skład dystrybucji Linuxa.
Można go wreszcie otrzymać bezpośrednio od autora, na ftp.netvision.net.il.
Jeśli masz jakieś pytania dotyczące tego dokumentu, nie wahaj się, proszę, skontaktować się ze mną pod adresem belikoff@netvision.net.il. Każda nowa i użyteczna informacja na temat obsługi Cyrilicy w różnych Unixach jest mile widziana. Pamiętaj, pomoże to innym.
Wielu ludzi pomogło mi (i nie tylko mi) wartościowymi informacjami oraz sugestiami. Jeszcze więcej ludzi dołożyło oprogramowania na użytek publiczny. Przepraszam jeżeli zapomniałem kogoś wymienić.
Oto więc oni: Bas v. de Bakker, David Daves, Siergiej Wakulenko, Siergiej O. Naoumow, Winfried Trümper, Michael van Canneyt.
Ten dokument jest (c) 1995 Aleksander L. Belikoff. Można go używać i rozpowszechniać zgodnie ze zwykłymi warunkami Linux HOWTO opisanymi poniżej.
Poniższe jest notką o prawach autorskich Linux HOWTO:
Dokumenty Linux HOWTO stanowią prawną własność ich autorów, chyba że zaznaczono inaczej. Dokumenty Linux HOWTO mogą być reprodukowane i rozposzechniane w całości lub części, w każdym fizycznym lub elektronicznym środku przekazu, tak długo jak w każdej kopii pozostaje niniejsza notka o prawach autorskich. Redystrybucja komercyjna jest dozwolona i popierana; autorzy jednak woleliby zostać o takich dystrybucjach powiadomieni.
Wszystkie tłumaczenia, prace pochodne i zbiorowe zawierające dokumenty Linux HOWTO muszą podlegać po tą notkę o prawach autorskich. To jest, nie możesz stworzyć z HOWTO pracy pochodnej i nałożyć dodatkowe ograniczenia na jej dystrybucję. Wyjątki do tych reguł mogą być udzielone pod pewnymi warunkami; proszę skontaktować się z koordynatorem Linux HOWTO pod adresem podanym poniżej.
W skrócie, chcielibyśmy promować rozprzestrzenianie się tych informacji tak wieloma kanałami jak to możliwe. Pragnęlibyśmy jednakże zachować prawa autorskie do dokumentów HOWTO, i być powiadamianymi o każdych planach ich redystrybucji.
Jeśli masz pytania, skontaktuj się proszę z Gregiem Hankinsem,
koordynatorem Linux HOWTO, pod adresem gregh@sunsite.unc.edu.
Możesz użyć tego adresu z programem finger by zdobyć numer telefonu
i inne dodatkowe informacje dotyczące kontaktu.
Unix jest zastrzeżonym znakiem przemysłowym X/Open Ltd.; MS-DOS, Windows, Windows NT i Windows 95 są zastrzeżonymi znakami Microsoft Corp.; System X Windows jest znakiem zastrzeżonym Consortium X, Inc. Wszystkie inne znaki zastrzeżone należą do ich odpowiednich posiadaczy.
Ażeby zrozumieć i wyświetlać znaki różnych języków, system i programy muszą być zdolne odróżniać je od innych znaków. To jest, każdy pojedynczy znak musi mieć odrębną reprezentację wewnątrz systemu operacyjnego, bądź konkretnego pakietu programów. Taka kolekcja wszystkich odrębnych znaków które jakiś system jest w stanie reprezentować w danym momencie nazywa się zestawem znaków.
W czasie tworzenia największych systemów operacyjnych nikt nie dbał o to aby programy były wielojęzyczne. Dlatego też najpopularniejszym zestawem znaków był (i ciągle jest) ASCII (American Standard Code for Information Interchange).
Standardowy ASCII (aka siedmiobitowy ASCII) zawiera 128 odrębnych kodów. Niektóre z nich ASCII definiuje jako faktyczne drukowalne znaki, a niektóre są tak zwanymi znakami kontrolnymi, które posiadały specjalne znaczenia w starszych protokołach komunikacyjnych. Każdy element zestawu identyfikuje kod będący liczbą całkowitą (0-127). Podzbiór znaków drukowalnych przedstawia te które znaleźć można na klawiaturze maszyny do pisania, z niewielkimi dodatkami. Każdy znak zajmuje siedem najmniej znaczących bitów bajtu, podczas gdy najbardziej znaczący używany był dla celów kontrolnych (np. kontroli transmisji w starszych pakietach komunikacyjnych).
Koncepcję ASCII siedmiobitowego rozszerzył ASCII ośmiobitowy (aka rozszerzony ASCII). W tym zestawie zakres kodów znaków to 0-255. Dolna połowa (0-127) to czysty ASCII, podczas gdy górna zawiera 127 dodatkowych znaków. Ponieważ zestaw ten jest wstecznie kompatybilny z ASCII (znak ciągle zajmuje osiem bitów, kody odpowiadają staremu ASCII), zyskał on sobie szeroką popularność.
ASCII ośmiobitowe nie definiuje zawartości górnej połówki zestawu. Dlatego ISO powzięło zadanie ustalenia rodziny standardów znanych jako rodzina ISO-8859-X. Jest to zbiór kodowań ośmiobitowych, w których niższa połowa każdego kodowania (0-127) odpowiada ASCII, a wyższa definiuje znaki dla różnych języków. Zdefiniowano na przykład następujące kodowania:
W Latin 1 górna połowa tabeli definiuje różne znaki które nie są częścią alfabetu angielskiego, ale znajdują się w różnych językach zachodnioeuropejskich (umlauty niemieckie, akcenty francuskie).
Programy które nie zakładają nic co do ósmego bitu danych ASCII zwane są ośmiobitowo czystymi. Niektóre starsze programy, napisane z myślą o ASCII 7-bitowym, nie są czyste ośmiobitowe i mogą działać niepoprawnie z danymi ośmiobitowymi. Większość jednak pakietów domyślnie radzi sobie z ośmiobitowym ASCII, albo wymaga bardzo prostego ustawienia. UWAGA: zanim wyślesz pytanie "Wszystko ustawiłem poprawnie, a nie mogę wprowadzać/oglądać znaków cyrylicowych!", zajrzyj do sekcji 8 co do uwag o programie którego używasz.
Ponieważ na większości systemów ASCII zajmuje osiem bitów, nie ma już możliwość aby ciągle je rozszerzać. Sposobem na zaimplementowanie nowych symboli w kodowaniach opartych na ASCII jest stworzenie innej implementacji rozszerzonego ASCII. W taki właśnie sposób zaimplementowane zostało kodowanie cyrylicy w ASCII.
Wspomnieliśmy już o standardzie ISO-8859-5 jako określającym kodowanie cyrylicy. Lecz jak to często bywa ze standardami, stworzono go nie biorąc pod uwagę istniejącej praktyki w byłym ZSRR. Jedyną więc rzeczą jaką ten standard osiągnął było spotęgowanie zamieszania. Nie powiedziałbym że gdzieś się znacząco używa ISO-8859-5.
Innymi standardami kodowania cyrylicy są tak zwane kodowanie Alt i strona kodowa 1251 Microsoftu. Ta pierwsza stworzona została (przez kogo?) dość dawno temu na potrzeby MS-DOS. W tamtych czasach nie było jeszcze tego całego szumu o internetowaniu, intencją więc było uczynienie jej jak najbardziej kompatybilnej ze standardem IBM. Dlatego kodowanie Alt jest w rzeczywistości stroną kodową IBM, gdzie wszystkie specjalne znaki europejskie w górnej połówce zastąpiono cyrylicznymi, z wyłączeniem pseudografiki. Nie rujnowało to łatwego tworzenia okienek i dawało także znaki cyrylicowe. Standard Alt ciągle żyje i jest niesłychanie popularny w świecie MS-DOSa.
Strona kodowa 1251 to po prostu próba Microsoftu pokazania nowego standardu dla kodowania cyrylicy w Windows. Na ile wiem, nie jest ona kompatybilna z czymkolwiek (niezbyt dziwne, co?)
I w końcu istnieje KOI-8. Jest ono również stare, ale zaprojektowano je mądrze i dzisiaj założenia tego projektu wyglądają naprawdę użytecznie.
I znów, jest ono kompatybilne z ASCII, a znaki cyrylicy umieszczone są w górnej połówce. Lecz głównym założeniem projektowania KOI-8 jest to że pozycje znaków cyrylicy muszą odpowiadać znakom angielskim o zbliżonej wymowie. Konkretnie, jeśli ustawimy ósmy bit w angielskim 'a', dostaniemy 'a' cyrylicowe. Oznacza to że jeśli mamy tekst pisany cyrylicą w KOI-8, możemy uciąć ósmy bit z każdego znaku i dalej mieć czytelny tekst. Bardzo to dzisiaj ważne, ponieważ w Internecie jest wiele węzłów pocztowych które po prostu po cichu obcinają ósmy bit, pewne że wszyscy na całej Ziemi mówią po angielsku.
Nic dziwnego że KOI-8 szybko stał się de facto standardem dla cyrylicy w Internecie. Andriej A. Czernow poczynił ogromne nakłady pracy aby ustalić w tym obszarze standard. Jest on autorem RFC 1489 ("Registration of a Cyrillic character set").
Te dwa standardy [Alt i KOI-8] różnią się tylko pozycjami znaków cyrylicowych w tabeli (to jest kodami znaków cyrylicowych)/
Główną różnicą jest to że kodowanie Alt używane jest tylko przez użytkowników MS-DOS, podczas gdy KOI-8 używane jest w Unixie, a także w MS-DOSie (chociaż w tym drugim jest znacznie mniej popularne). Ponieważ robimy to co trzeba (to znaczy pracujemy w systemie Unixowym) skupimy się głównie na KOI-8.
Co do standardu ISO, jest on bardziej popularny jako standard cyrylicy. w Europie i USA. W Rosji zdecydowanie przoduje KOI-8.
Istnieją i inne standardy, różne od ASCII i o wiele bardziej elastyczne. Najbardziej znanym jest Unicode. Nie są jednak one zaimplementowane tak dobrze jak te podstawowe w Unixie w ogólności i Linuxie w szczególności. Dlatego też nie będę ich tu opisywał.
Zasadniczo tryb tekstowy jest najprostszą metodą pokazywania i wprowadzania znaków cyrylicy. Istnieje jednak jedna zasadnicza komplikacja: fonty w trybie tekstowym i operacje na układzie klawiatury zależą od implementacji sterownika terminala. Nie ma więc przenośnej metody dla osiągnięcia tego celu między różnymi systemami.
Za chwilę opiszę sposób radzenia sobie ze sterownikiem konsoli Linuxa. Tak więc jeśli masz inny system, nie spodziewaj się że będzie to działać u ciebie. Zajrzyj raczej do dokumentacji swojego sterownika terminala. Poślij mi jednakże jakiekolwiek informacje jakie znajdziesz, tak aby mógł włączyć je do przyszłych wersji tego dokumentu.
Sterownik konsoli Linuxa jest dość elastycznym kawałkiem software'u. Potrafi on zmieniać fonty oraz układy klawiatury. Aby to osiągnąć, będziesz potrzebował pakietu kbd. RedHat i Slackware instalują kbd jako część systemu.
Pakiet kbd zawiera narzędzia do kontrolowania klawiatury oraz znaczny zbiór fontów i układów klawiatury.
By ustawić cyrylicę, trzeba wykonać dwie rzeczy:
setfont. Pliki z czcionkami umieszczone są w
/usr/lib/kbd/consolefonts.
UWAGA: Nigdy nie uruchamiaj programu setfont pod X, ponieważ zawiesi
on twój system. Dzieje się tak ponieważ działa on z odwołaniami
niskiego poziomu do karty graficznej, których nie lubi X.
loadkeys.UWAGA: W RedHat 3.0.3 /usr/bin/loadkeys ma zbyt zawężone
prawa dostępu, konkretnie 700 (rwx------). Nie ma powodu aby tak
było, ponieważ każdy może skompilować swoją własną kopię i uruchomić
ją (odpowiednie odwołania do systemu nie są zarezerwowane tylko dla
administratora). Poproś więc swojego sysadmina aby ustawił dlań
bardziej sensowne prawa dostępu (na przykład 755).
Oto wyciąg z mojego skryptu cyrload, który ustawia tryb cyrylicy
dla konsoli linuxowej.
if [ notset.$DISPLAY != notset. ]; then
echo "`basename $0`: nie działa pod X"
exit
fi
loadkeys /usr/lib/kbd/keytables/ru.map
setfont /usr/lib/kbd/consolefonts/Cyr_a8x16
mapscrn /usr/lib/kbd/consoletrans/koi2alt
echo -ne "\033(K" # magiczna sekwencja
echo "Użyj prawego Ctrl aby zmienić tryb"
Pozwól mi to nieco wyjaśnić. Ładujesz odpowiednie mapowanie klawiatury.
Następnie ładujesz font odpowiadający zestawowi znaków Alt. Później,
aby móc poprawnie wyświetlać tekst w KOI-8, ładujesz tablicę przekodowywania
ekranowego. Dokonuje ona translacji niektórych znaków z górnej połówki
kodowania na kodowanie Alt. Kluczowe znaczenie ma słowo 'niektóre' - nie
wszystkie znaki podlegają translacji, dlatego też niektóre z nich, jak
pseudograficzne znaki IBM, trafiają na ekran niezmodyfikowane i wyświetlają
się poprawnie, ponieważ są one kompatybilne z kodowaniem Alt, w
przeciwieństwie do KOI-8. Aby się upewnić, uruchom mc i udawaj że
jesteś znów w MS-DOS 3.3...
W końcu, owa magiczna sekwencja jest ważna, ale nie mam żadnego pojęcia co takiego robi [resetuje konsolę i mapy odwzorowań; patrz Keyboard-HOWTO - przyp. GSN]. Pożyczyłem/podkradłem ją z German-HOWTO jeszcze w 1994, kiedy było no chyba jedynym HOWTO zorientowanym na języki narodowe. Jeśli masz jakiś pomysł co do tej magicznej sekwencji, powiadomij mnie, proszę.
Dla tych purystów którzy nie chcą próbować kodowania Alt dołączam jeszcze jedną wersję powyższego skryptu, używającą rdzennych fontów KOI-8.
if [ notset.$DISPLAY != notset. ]; then
echo "`basename $0`: cannot run under X"
exit
fi
loadkeys /usr/lib/kbd/keytables/ru.map
setfont /usr/lib/kbd/consolefonts/koi-8x16
echo "Użyj prawego Ctrl aby zmienić tryb"
Nie spodziewaj się jednak ładnych ramek w swoich okienkowych aplikacjach tekstowych.
Chcesz to pewnie teraz wypróbować. Ustaw bash lub tcsh jak trzeba, uruchom je ponownie, potem naciśnij prawy klawisz Ctrl i upewnij się że otrzymujesz prawidłowe znaki cyrylicy. Klawisz 'q' musi dawać rosyjskie 'krótkie i', w generować 'c' itd.
Jeśli coś pokręciłeś, najlepszą rzeczą jest przywrócenie ustawień oryginalnych (tj. amerykańskich). Wykonaj następujące komendy:
loadkeys /usr/lib/kbd/keytables/defkeymap.map
setfont /usr/lib/kbd/consolefonts/default8x16
UWAGA: niestety sterownik konsoli nie jest w stanie zachować swojego statusu (a przynajmniej nie w prosty sposób) podczas uruchamiania X Windows. Dlatego, kiedy wyjdziesz z X (albo przełączysz zeń na konsolę), będziesz musiał ponownie załadować rosyjski font konsolowy.
Nie używam FreeBSD, tak więc nie mogłem przetestować poniższej informacji.
Trzeba zacząć od tego że wszystkie dane w tej sekcji należy traktować jako
wskaźniki. Strona domowa projektu FreeBSD może mieć jakieś informacje
na ten temat. Innym dobrym źródłem jest grupa newsowa relcom.fido.ru.unix.
Sprawdź także zasoby wyliczone w sekcji 11.
W każdym razie, oto co Ilja K. Orechow sugeruje zrobić aby konsola FreeBSD mówiła po rosyjsku:
/etc/sysconfig:
keymap=ru.koi8-r
keyrate=fast
# UWAGA: ^[ poniżej to pojedynczy znak kontrolny [ESC]
keychange="61 ^[[K"
cursor=destructive
scrnmap=koi8-r2cp866
font8x16=cp866b-8x16
font8x14=cp866-8x14
font8x8=cp866-8x8
/etc/csh.login:
setenv ENABLE_STARTUP_LOCALE
setenv LANG ru_SU.KOI8-R
setenv LESSCHARSET latin1
Podobnie jak tryb konsoli, środowisko X również wymaga nieco konfiguracji. Zawiera się w niej ustawienie trybu wprowadzania i Xowych czcionek. Oba aspekty omówione są poniżej.
Po pierwsze zdobyć musisz kolekcję czcionek posiadających znaki cyrylicy w odpowiednich miejscach.
Jeśli używasz najnowszej dystrybucji X (lub XFree86), istnieje szansa że masz już takie czcionki. W końcu 1995 X Windows System włączył zestaw czcionek cyrylicowych, stworzonych przez Cronyxa. Zapytaj swojego administratora systemu, albo jeśli to ty nim jesteś, sprawdź swój system, to jest:
xlsfonts | grep koi8. Jeśli wyliczono jakieś
czcionki, twój X-serwer już o nich wie.
find /usr -name crox\*.pcf\*
aby znaleźć miejsce czcionek cyrylicowych na serwerze. Będziesz musiał
włączyć te czcionki dla X-serwera, jak wyjaśniam poniżej.Jeśli nie znalazłeś takich fontów zainstalowanych, będziesz musiał to sam zrobić.
Istnieje pewna rozbieżność co do czcionek. XFree86 twierdzi że kolekcję
czcionek rosyjskich zamieszczonych w dystrybucji stworzył Cronyx. Niemniej
na sieci znaleźć można inne czcionki cyrylicowe Cronyxa (np. na
ftp.klae.su), znane jako pakiet xrus (nie myl go z programem
xrus, który używany jest do ustawienia układu klawiatury cyrylicy).
Na szczęście ten drugi został ostatnio przemianowany na xruskb.
xrus ma mniej czcionek niż kolekcja w XFree86 (38 wobec 68), ale
te drugie czcionki nie chciały działać z moim ustawieniem Netscape -
dawały mi jakąś strasznie dużą czcionkę w pasku menu. Pakiet xrus
nie stwarzał tego problemu.
Sugerowałbym ściągnięcie i wypróbowanie obydwu. Wybierz ten który bardziej
ci się podoba. Mam także zamiar wkrótce stworzyć pakiety RPM dla obu
kolekcji i podładować je do ftp.redhat.com oraz mojego FTP.
Istnieją także starsze rzeczy, na przykład pakiet VakuFonts, stworzony przez
Sergieja Wakulenko (
mailto:vak@cronyx.ru), który
tworzył podstawę dla tego w dystrubucji X. Istnieją też inne. Ważną rzeczą
jest to że nazwy czcionek w starszych kolekcjach nie całkiem ściśle
stosowały się do standardów. Późniejsze są w zasadzie w porządku, ale
czasami wywołać mogą różne dziwne błędy. Miałem na przykład niemiłe
doświadczenia z Maple V dla Linuxa, który wykładał się tajemniczo z
pakietem VakuFonts, ale działał bez zarzutu ze "standardowymi".
Zacznijmy więc od czcionek:
xrus znaleźć
można na ftp.klae.su.
/usr/lib/X11/fonts/cyrillic
dla instalacji całosystemowej, albo po prostu utwórz katalog prywatny dla
użytku osobistego.
bdftopcf -o name.pcf name.bdf
Jeśli twój serwer obsługuje czcionki skompresowane, skompresuj je używając
programu compress
compress name.pcf
Jeśli chcesz wsadzić nowe czcionki do już istniejącego katalogu, będziesz
musiał połączyć stary i nowy font.alias. w przypadku gdy oba istnieją,
np.
cat font.alias.new >> font.aliasTeraz, żeby wszystko ustawić, powinieneś wykonać trzy rzeczy:
fonts.dir. Nie
musisz jej tworzyć ręcznie. Zamiast tego, wykonaj
cd <katalog_z_nowymi_czcionkami> mkfontdir
XF86Config. Aby znaleźć
położenie tego pliku spójrz na wyjście startx. Patrz też
XF86Config{4,5} po szczegóły.xinit. Dodaj katalog
startowy do pliku startowego xinit. Patrz xinit(1x) i następny punkt
po szczegóły.~/.xinitrc (albo ~/.Xclients, albo ~/.xsession
dla użytkowników RedHata). Dodaj do niego następujące komedy:
xset +fp katalog_z_czcionkami
xset fp rehash
Aby klienci X używali czcionek cyrylicowych, musisz ustawić odpowiednie X-zasoby. Na przykład, ustawiam czcionkę rosyjską jako domyślną w swoim /.Xdefaults:
*font 6x13
Ponieważ moje czcionki cyrylicowe są pierwsze na liście ścieżek do czcionek (patrz rezultaty [xinit, wybrana zostanie pierwsza czcionka o aliasie 6x13)]
To prostszy przykład. Jeśli chcesz ustawić odpowiednią część X-klienta by używała czcionek cyrylicowych, musisz znaleźć nazwę zasobu (np. za pomocą editres(1x) i ustalić go albo w bazie danych zasobów, albo w linii komend. Oto kilka przykładów:
$ xterm -font '-cronyx-*-bold-*-*-*-19-*-*-*-*-*-*-*'
$ xfontsel -xrm '*quitButton.font: -*-times-*-*-*-*-13-*-*-*-*-*-koi8-*'
W najnowszych wersjach X (X11R61 i wyższych) istnieją dwie "standardowe"
metody wprowadzania znaków: pierwotna, działająca z użyciem programu
xmodmap, oraz nowa, zwana (Xkb) XKeyBoard. Pierwsze co powinieneś
zrobić to wyłączyć metodę Xkb! Nie daj się oczarować jej możliwościami
ustawienia "cyrylicznej klawiatury". Wygląda na to że ta metoda używa
klawsymów zdefiniowanych w keysymdef.h. Plik ten definiuje klawsymy
dla wielu języków. Jednym problemem jest to że te definicje nie mają
nic wspólnego z rozszerzonym zestawem znaków ASCII - jedynym na którym
potrafi wyłącznie operować większość programów! Ledwie wiem o jakiś
programach które zdolne są przetworzyć klawsymy z keysymdef.h
różne od ośmiobitowego ASCII. Jednakowoż naszym celem jest sprawienie
żeby obsługa KOI-8 zadziałała.
Aby wyłączyć obsługę Xkb, przeglądnij sekcję Keyboard w swoim pliku
XF86Config i wykomentuj wszystkie linie zaczynające się od Xkb
(wielkość liter bez znaczenia). Zamiast nich, wstaw następującą linię:
XkbDisable
Program xmodmap pozwala na dopasowanie kodów które wysyłają różne
znaki i ich kombinacje. Ustawia on to opierając się na pliku zawierającym
tabelę tłumaczeń.
Jeśli nie chcesz zajmować się wszystkimi tymi trikami i wolisz rozwiązanie
od ręki, [bądź to] ściągnij odpowiednią tablicę xmodmapową, dostępną na
wielu ftpach zajmujących się cyrylicą, na przykład ftp.kiae.su albo
ftp.funet.fi. Sam sporządziłem również mapę opisaną poniżej, dostępną
przez mój ftp.
Bardziej odpowiednią alternatywą jest instalacja pakietu xruskb,
który pozwala ci skonfigurować większość parametrów translacji wejściowej
bez potrzeby obeznania się z xmodmap.
Poniżej uproszczony opis przystosowania wejścia. Jeśli chcesz jakiś bardziej wyrafinowanych trików, zajrzyj do xmodmap(1) lub, jeszcze lepiej, poczekaj na następną wersję główną X, która miejmy nadzieję zajmie się bieżącymi problemami ze wprowadzaniem danych.
W naszym przypadku, tablica tłumaczeń powinna definiować dwie rzeczy:
Jest to w zasadzie sekwencja dyrektyw które przypisują pewne klawsymy określonym kodom klawiszy. Ogólna składnia to:
keycode kod = sym1 sym2 sym3 sym4
gdzie kod to numeryczny kod określonego klawisza na klawiaturze (zajrzyj
do tablicy standardowej dla twojego systemu. W moim przypadku znajduje
się ona w pliku /usr/lib/X11/etc/xmodmap.std). "Symy" definiują klawsymy
wysyłane przez ten klawisz w różnych stanach. Sym1 jest klawsymem
wysyłanym w stanie normalnym, sym2 odpowiada klawiszowi z naciśniętym
Shift (zwykle), Sym3 i sym4 definiują klawsymy wysyłane przy aktywnym
Mode_switch dla stanów normalnych i ze Shiftem odpowiednio (grupa 2,
zgodnie z X Protocol Specification). W naszym przypadku aktywny Mode_switch
odpowiada wprowadzaniu w trybie cyrylicy.
Wartościami powinny być albo kody szesnastkowe, albo stałe symboliczne
z /usr/include/X11/keysymdef.h (bez początkowego "XK_").
Tak więc jeżeli chcielibyśmy aby klawisz odpowiadający łacińskiemu "a" wypisywał "a" rosyjskie w trybie alternatywnym, napisalibyśmy jak niżej:
keycode 38 = a A 0xC1 0xE1
Czytelnik ciekaw być może dlaczego nie użyłem stałych Cyrillic_a oraz Cyrillic_A, odpowiednio. Odpowiedż brzmi: nie działają one dla mnie. Nie jestem zbyt obeznany z wnętrznościami specyfikacji systemu X Windows, ale mam następujące wytłumaczenie: symboliczne stałe powyżej mają wartości 0x6C1 oraz 0x6E1 odpowiednio. Oznacza to że w rzeczywiście multijęzykowym środowisku możnaby używać ich bez ich nakładania się na inne zestawy znaków. Jednak standard KOI-8 nie jest szczególnie przystosowany do takiego środowiska. Ponieważ więc chcemy pozostać kompatybilni z przeszłością, naruszymy reguły obsługi wielu języków w systemie X Windows.
Oto tabela dla najbardziej popularnej rosyjskiej klawiatury w układzie JCUKEN (tabele te pochodzą od tych z pakietu VakuFonts).
keysym 4 = 4 dollar 4 quotedbl
keysym 5 = 5 percent 5 colon
keysym 6 = 6 asciicircum 6 comma
keysym 7 = 7 ampersand 7 period
keysym q = q Q 0xCA 0xEA
keysym w = w W 0xC3 0xE3
keysym e = e E 0xD5 0xF5
keysym r = r R 0xCB 0xEB
keysym t = t T 0xC5 0xE5
keysym y = y Y 0xCE 0xEE
keysym u = u U 0xC7 0xE7
keysym i = i I 0xDB 0xFB
keysym o = o O 0xDD 0xFD
keysym p = p P 0xDA 0xFA
keysym bracketleft = bracketleft braceleft 0xC8 0xE8
keysym bracketright = bracketright braceright 0xDF 0xFF
keysym a = a A 0xC6 0xE6
keysym s = s S 0xD9 0xF9
keysym d = d D 0xD7 0xF7
keysym f = f F 0xC1 0xE1
keysym g = g G 0xD0 0xF0
keysym h = h H 0xD2 0xF2
keysym j = j J 0xCF 0xEF
keysym k = k K 0xCC 0xEC
keysym l = l L 0xC4 0xE4
keysym semicolon = semicolon colon 0xD6 0xF6
keysym apostrophe = apostrophe quotedbl 0xDC 0xFC
keysym grave = grave asciitilde 0xA3 0xB3
keysym z = z Z 0xD1 0xF1
keysym x = x X 0xDE 0xFE
keysym c = c C 0xD3 0xF3
keysym v = v V 0xCD 0xED
keysym b = b B 0xC9 0xE9
keysym n = n N 0xD4 0xF4
keysym m = m M 0xD8 0xF8
keysym comma = comma less 0xC2 0xE2
keysym period = period greater 0xC0 0xE0
Dla używających rosyjskiego układu JAWERTY dołączyłem następującą tabelę:
keysym q = q Q 0xD1 0xF1
keysym w = w W 0xD7 0xF7
keysym e = e E 0xC5 0xE5
keysym r = r R 0xD2 0xF2
keysym t = t T 0xD4 0xF4
keysym y = y Y 0xD9 0xF9
keysym u = u U 0xD5 0xF5
keysym i = i I 0xC9 0xE9
keysym o = o O 0xCF 0xEF
keysym p = p P 0xD0 0xF0
keysym bracketleft = bracketleft braceleft 0xDB 0xFB
keysym bracketright = bracketright braceright 0xDD 0xFD
keysym a = a A 0xC1 0xE1
keysym s = s S 0xD3 0xF3
keysym d = d D 0xC4 0xE4
keysym f = f F 0xC6 0xE6
keysym g = g G 0xC7 0xE7
keysym h = h H 0xC8 0xE8
keysym j = j J 0xCA 0xEA
keysym k = k K 0xCB 0xEB
keysym l = l L 0xCC 0xEC
keysym z = z Z 0xDA 0xFA
keysym x = x X 0xD8 0xF8
keysym c = c C 0xC3 0xE3
keysym v = v V 0xD6 0xF6
keysym b = b B 0xC2 0xE2
keysym n = n N 0xCE 0xEE
keysym m = m M 0xCD 0xED
keysym backslash = backslash bar 0xDC 0xFC
keysym grave = grave asciitilde 0xC0 0xE0
keysym equal = equal plus 0xDE 0xFE
keysym 3 = 3 numbersign 3 0xDF
keysym 4 = 4 dollar 4 0xFF
Jest to zasadniczo część konfiguracji Xowej cyrylicy wymagająca najwięcej wiedzy. Zdefiniować powinieneś warunki w których tryb bieżący przełączany jest między trybem zwykłym i cyrylicy. Dzięki mądremu zaprojektowaniu translacji wejścia w X, jest ona nieprzenośna, nieelastyczna, niekompletna i ogólnie mówiąc do kitu. Nic dziwnego że ludzie przenoszą się na MS Windows.
Obecnie dużo się dzieje w rozwijaniu XFree86 w ogólności i modelu wejścia w X w szczególności. Rezultat jest taki że twoja konfiguracja może działać z jedną wersją XFree86 i nie działać z inną. Co gorsza, czasami rzeczy różnią się między różnymi serwerami w tej samej dystrybucji.
Najpierw opiszę moje ustawienia, które w obecnej chwili działają dla mnie.
Pracuję w XFree86 3.3, serwer SVGA. W moim pliku XF86Config (w
dystrybucji RedHata umieszczony jest on w /etc/X11, w sekcji
"Keyboard" mam następujące dyrektywy:
Istnieją dwa sposoby osiągnięcia tego w Linuxie. Jedna jest specyficzna dla XFree86, podczas gdy druga jest bardziej ogólna (nie za bardzo może, jak i pokażę niżej).
LeftAlt Meta
RightAlt ModeShift
ScrollLock ModeLock
RightCtl Control
UWAGA: Metoda ustawiania reguł przełączania trybów poprzez plik
XF86Config jest specyficzna dla XFree86. Nie będzie ona działać
w innych wersjach X.
Teraz ładuję tabelę opisaną w poprzedniej sekcji i zachowaną w jakimś pliku używając narzędzia xmodmap(1x):
xmodmap <plik_z_tabelą>
Teraz mam możliwość zaznaczenia trybu wprowadzania cyrylicy używając prawego klawisza Alt oraz przełączenia na cyrylicę i z powrotem używając ScrollLock. Zdziwisz się jeśli zobaczysz że ani CapsLock ani klawisze Control nie działają w trybie wprowadzania cyrylicy. Cóż, powiem to raz jeszcze: model wejścia X jest do kitu!
Resztę tej sekcji zajmuje zwięzły opis zwykłej konfiguracji translacji wejścia w X. Działała ona dla starszych wydań XFree86, ale teraz wykazuje rozmaite problemy. Pozostawiłem ją tutaj, tak aby co bardziej ciekawi z was mogli spróbować części tego i zużytkować to.
Powinieneś zrobić co następuje:
Teraz klawisz do którego przypisany jest ModeShift będzie działał jako przełącznik trybów. Oznacza to że gdy jest przyciśnięty, klawiatura znajduje się w trybie alternatywnym.
Co więcej, jeśli dodasz klawsym Mode_lock do tego układu, będzie on ustawiał na stałe tryb alternatywny.
Uwaga: są jednak pewne problemy. Siergiej Wakulenko (vax@cronyx.com)
wskazał że różne implementacje X-serwerów mają różne zasady przypisywania
przełączników trybu (np. niektóre serwery ograniczają zestaw klawiszy które
mogą działać w trybie przełącznika do, powiedzmy, CapsLock, NumLock oraz
ScrollLock). Na szczęście ma się to zmienić w następnym wydaniu
systemu X Windows. Po szczegóły patrz specyfikacja X Protocol.
Niestety nie udało mi się zmusić CapsLock aby miał tą samą funkcjonalność w trybie alternatywnym, konkretnie aby na stałe włączał duże litery. Wydaje mi się że nie można tego dokonać z powodu idiotycznego zaprojektowania translacji wejścia w X. Jeśli się mylę, proszę mnie poprawić.
Zobaczmy przykład. Załóżmy że chce się używać prawego Alt jako przełącznika trybów i ScrollLock do ustawiania trybu na stałe. Najpierw powinno się sprawdzić domyślny układ modyfikatorów. Osiąga się to uruchamiając xmodmap bez argumentów.
$ xmodmap
xmodmap: up to 2 keys per modifier, (keycodes in parentheses):
shift Shift_L (0x32), Shift_R (0x3e)
lock Caps_Lock (0x42)
control Control_L (0x25)
mod1 Alt_L (0x40), Alt_R (0x71)
mod2 Num_Lock (0x4d)
mod3
mod4
mod5
Zgodnie z powyższym, plan ataku wygląda jak następuje:
Oto więc rozwiązanie:
remove mod1 = Alt_R
keysym Alt_R = Mode_switch
keycode 78 = Scroll_Lock
add mod3 = Mode_switch
add mod3 = Scroll_Lock
Jeśli użyjesz tego drugiego rozwiązania, możesz połączyć tabelę i
dyrektywy dotyczące trybów w swoim pliku ~/.Xmodmap.
Pliki takie dostarczane są przeważnie razem z różnymi pakietami do obsługi cyrylicy pod X. Dobrym przykładem są tabele w doskonałym pakiecie Siergieja Wakulenki, opisanym wyżej.
Gdy już masz taki plik zawierający tabelę, powinieneś wykonać komendę:
xmodmap filename
Plik dla całego systemu to /usr/lib/X11/xinit/xinitrc; osobisty
to albo ~/.xinitrc, albo ~/.Xclients, albo
~/.xsession, zależnie od tego co masz [zainstalowane].
UWAGA: Jeśli xmodmap narzeka na twoją tabelę, spróbuj załadować
najpierw domyślną. Tabela domyślna znajduje się zwykle w
/usr/lib/X11/etc/xmodmap.std.
W tej sekcji opiszę kilka sposobów nakłonienia TeXa i LaTeXa do składania tekstu
w cyrylicy. Istnieje kilka sposobów, które różnią się wyrafinowaniem
instalacji i wygodą w obsłudze. Dla przykładu, jedną z możliwości jest
zacząć bez żadnej wstępnej instalacji i użyć fontów cyrylicowych Washington
AMSTeX. Z drugiej strony, możesz zainstalować pakiet LaTeX, który zapewnia
wysoki stopień ustawień dotyczących cyrylicy. Mam pewne doświadczenia z dwoma
pakietami. Pierwszy to pakiet cmcyralt
autorstwa Wadima W. Żytnikowa
(
mailto:vvzhy@phy.ncu.edu.tw)
i Aleksandra Harina
(
harin@lourie.und.ac.za), a ten drugi to pakiet LH
autorstwa CyrTUG
[Cyrillic TeX Users Group] ze stylami i dzieleniem wyrazów
dla LaTeX2e
autorstwa Sergieja O. Naoumowa (
serge@astro.unc.edu).
Opiszę obydwa.
Zauważ że dostępne są dwie wersje LaTeXa : 2.09 jest wersją starszą, podczas gdy 2e jest nowszym wydaniem pre-3.0. Jeśli używasz LaTeXa 2.09, przestaw się szybko na 2e. Ten drugi pozostaje kompatybilny z tym pierwszym, ale ma o wiele więcej funkcji. Miejmy nadzieję że wersja 3 zostanie wkrótce wypuszczona. Opiszę ustawienia dla LaTeXa 2e.
Uwaga: oba te pakiety wymagają aby tekst w cyrylicy składany był z użyciem zestawu znaków Alt, nie KOI-8! Spowodowane jest to przyczynami historycznymi, ponieważ twórcy tych pakietów pracowali byli z EmTeXem - MS-DOSową wersją TeXa (nie wiedzieli jeszcze o Linuxie :-). Przestawienie ich na KOI-8 wymaga nieco wysiłku i spodziewane jest niebawem. Na razie, używaj jakiegoś narzędzia do konwersji tekstu rosyjskiego z KOI-8 do Alt. Patrz sekcja "Narzędzia użytkownika".
Pakiet ten został stworzony przez American Mathematics Society w celu uzupełnienia dokumentów o odnośniki po rosyjsku. Dlatego też autorzy nie byli zbyt uważni, a czcionki wyglądają raczej niezręcznie. Pakiet ten określa się zwykle jako 'całkiem kiepski pakiet cyrylicy dla TeXa'.
Niemniej jednak omówimy go, ponieważ jest on bardzo łatwy w użyciu i nie wymaga żadnej konfiguracji - kolekcja ta dostarczana jest z większością dystrybucji TeXa.
Oczywiście nie będziesz mógł sobie pozwolić na taki luksus jak automatyczne przenoszenie wyrazów, ale jednak...
\input cyracc.def
\font\tencyr=wncyr10
\def\cyr{\tencyr\cyracc}
\cyri używasz odpowiedniej litery łacińskiej albo komendy TeXa. I tak małe litery rosyjskiego alfabetu wyrażają następujące kody: a b v g d e \"e zh z i {\u l} k l m n o p q r s t u f kh c ch sh shch {\cprime} y {\cdprime} \'e yu ya
Jest bardzo niewygodnym przekonwertować twoje teksty rosyjskie na takie kodowanie, lecz proces można zautomatyzować. Program translit (sekcja 11) obsługuje wynik w postaci TeXowej.
Pojawił się jakiś nowy pakiet teTeX-rus. Podobno obsługuje on zestaw znaków
KOI-8 i ma wszystkie podstawowe rzeczy wymagane dla TeXa i LaTeXa. Osobiście
jeszcze go nie próbowałem, chociaż słyszałem o pomyślnym go używaniu.
Pakiet cmcyralt znaleźć można na każdym z węzłów CTAN (Comprehensive TeX
Archive Network), jak ftp.dante.de. Powinieneś zdobyć dwie kolekcje:
kolekcję fontów z [katalogu] /fonts/cmcyralt oraz style i reguły
dzielenia wyrazów z [katalogu]
/macros/latex/contrib/others/cmcyralt.
Uwaga: upewnij się że masz zainstalowany pakiet Sauter, bowiem cmcyralt
potrzebuje z niego niektórych fontów. Pakiet ten możesz również
zdobyć z węzła CTAN.
Powinieneś teraz zrobić co następuje:
cmcyralt w
/usr/lib/texmf/fonts/cm/. Utwórz w nim podkatalogi src,
tfm i vf. Umieść tam pliki .mf, .tfm oraz
.vf, odpowiednio.*.fd) z archiwum stylów
w odpowiednim miejscu (w moim przypadku był to
/usr/lib/texmf/tex/latex/fd).*.sty) w odpowiednim katalogu stylów
LaTeXa (w moim przypadku /usr/lib/texmf/tex/latex/sty).Teraz konfiguracja dzielenia wyrazów. Wymaga to przerobienia pliku bazowego LaTeXa.
hyphen.cfg zawiera dyrektywy dla dzielenia wyrazów
w angielskim i rosyjskim. Wytnij to co tyczy się rosyjskiego
i umieść to w pliku konfiguracji dzielenia wyrazów LaTeXa,
lthyphen.ltx. W moim przypadku plik ten znajdował się w
/usr/lib/texmf/tex/latex/latex-base.rhyphen.tex. Potrzebny jest
on do stworzenia nowego pliku bazowego. Później możesz go usunąć.make. Nie zapomnij stworzyć odnośnika
z Makefile do Makefile.unx. Podczas wykonywania make sprawdź
komunikaty. Powinno się pojawić:
Loading hyphenation patterns for Russian
Jeśli wszystko pójdzie poprawnie, otrzymasz w tym katalogu nowy
latex.fmt. Wstaw go w odpowiednie miejsce, tam gdzie znajdował się
poprzedni (np. /usr/lib/texmf/ini/). Nie zapomnij zachować starego
pliku!
Otoż i to. Instalacja gotowa. Spróbuj przetworzyć przykłady z archiwum stylów. Jeśli możesz stworzyć pliki postscriptowe bez żadnych problemów, wszystko jest w porządku. Teraz aby używać cyrylicy w LaTeXie, wstaw na początek swojego dokumentu poniższą dyrektywę:
\usepackage{cmcyralt}
Po szczegóły patrz plik README w archiwum stylów cmcyralt.
Uwaga: jeśli masz problemy z przykładami, założywszy że instalowałeś
prawidłowo, to prawdopodobnie twój system TeX nie został zainstalowany
poprawnie. Na przykład, przy mojej pierwszym teście każda próba
stworzenia plików .pk dla czcionek rosyjskich nie udawała się (etap
MakeTeXPK). Dokładne przyjrzenie się plikom wykryło pewien niejawny
konflikt między konfiguracjami METAFONT localfont i ljfour. Kiedyś
było to działało, ale rozpadło się po instalacji cmcyralt. Skontaktuj
się ze swoim lokalnym guru od TeXa - TeX jest bardzo (czasami za
bardzo) złożony aby rekonfigurować go bez wcześniejszej znajomości.
Pakiet CyrTUG uzyskać możesz z archiwum SunSite
(
ftp://sunsite.unc.edu/pub/academic/russian-studies/Software).
Zrzuć stamtąd pliki CyrTUGfonts.tar.gz, CyrTUGmacro.tar.gz i
hyphen.tar.Z.
Proces instalacji nie różni się od opisanego powyżej.
Eksperci powiadają że PostScript jest łatwy. Nie potrafię osądzić - mam zbyt wiele rzeczy do nauczenia się aby poświęcić trochę czasu na naukę PostScriptu. Spróbuję więc opisać moje smutne z nim doświadczenia. Mile widziałbym wsparcie od każdego kto wie więcej na ten temat ode mnie (ok. 99% ludzkości).
Zasadniczo aby wydrukować tekst z użyciem PostScriptu, musisz się upewnić co do następujących rzeczy:
Nie ma rozwiązania na tyle ogólnego aby je polecić jako środek ostateczny, Spróbuję nakreślić różne sposoby radzenia sobie z różnymi problemami odnośnie tematu.
Jednym ze sposobów podejścia do konfiguracji cyrylicy jest użycie Ghostscripta. Ghostscript (lub po prostu gs w nowomowie) to darmowy (no, quasi-darmowy) interpreter PostScriptu. Ma on wiele zalet, pomiędzy nimi:
To co ważne w naszym konkretnym przypadku to to że gdy już raz skonfigurujemy Ghostscripta, możemy za jego pomocą dokonywać całości drukowania, eliminując tym samym ekstra konfigurację dla innych urządzeń postscriptowych (np. HP Laserjet IV).
Jest to ważne, ponieważ zapewne nie będziesz chciał polegać na innych
programach przy umieszczaniu w wynikowym postscripcie czcionek cyrylicowych.
Zamiast tego dodajesz je do gs. i po prostu zmuszasz programy aby
generowały wyjście w cyrylicy kompatybilne z czcionkami.
Aby dodać do gs nową czcionkę (w formacie .pfa lub .pfb), musisz:
gs (np.
/usr/lib/ghostscript/fonts).Fontmap w
katalogu gsOstatnio pojawił się porządny zestaw czcionek cyrylicowych dla GhostScripta.
Znajduje się on na ftp.kapella.gpi.ru. Ma on nawet konieczny wpis
który trzeba dodać do pliku Fontmap. Ściągnąć musisz zawartość
katalogu /pub/cyrillic/psfonts/. Plik README opisuje
niezbędne szczegóły.
Drukowanie zawsze jest rzeczą zawiłą. Istnieją różne drukarki różnych producentów z różnymi możliwościami. Nawet co do drukowania w "gołym" formacie nie ma jednorodnego rozwiązania (odnosi się to nie tylko do Unixa, ale również do innych systemów operacyjnych).
Drukarki mają różne języki kontrolne, a często mają bardzo różne poglądy na obsługę innych takich języków. Dobrą wiadomością jest to że jeden taki język kontrolny wydaje się być uznawany za de facto standard dla opisywania zadań związanych z drukiem - to język PostScript, stworzony przez Adobe Corporation.
Innym problemem jest różnorodność wymagań związanych z usługą drukowania. Na przykład, czasem chcesz po prostu wydrukować kawałek programu w C z rosyjskimi komentarzami, więc nie potrzebujesz żadnego ładnego drukowania - po prostu czysty wydruk ASCII w pojedynczej czcionce. Innym razem, kiedy projektujesz pocztówkę dla swojej dziewczyny, będziesz zapewne musiał ją złożyć używając różnych czcionek, i tak dalej. Będzie to wymagało z pewnością więcej wysiłku w kwestii ustawienia obsługi cyrylicy.
Aby podołać pierwszemu zadaniu będziesz musiał po prostu zmusić swoją drukarkę aby rozumiała jeden font cyrylicowy i (być może) zainstalować jakiś program filtrujący, który będzie wypisywał dane w odpowiednim formacie. Aby dokonać tego drugiego [zadania], będziesz musiał nauczyć swoją drukarkę różnych czcionek i mieć specjalny software.
Istnieje także sytuacja pośrodku, gdy masz program który wie jak wygenerować i fonty i odpowiednie dane dla drukarki, możesz więc, powiedzmy, wykonać parę ładnych wydruków kodu źródłowego bez wyrafinowanych systemów obróbki tekstu.
Wszystkie te opcje zostaną mniej lub bardziej omówione poniżej.
Jeśli masz starą dobrą drukarkę igłową i potrzebujesz tylko wydrukować czysty tekst w KOI-8, spróbuj poniższego:
ftp.
simtel.net)Tak więc mając znaki cyrylicowe w górnej połówce zestawu znaków drukarki będziesz mógł drukować teksty po rosyjsku bez żadnych ceregieli.
Alternatywnie z czcionkami KOI-8 możesz użyć czcionek Alt. Są ku temu dwa powody:
Niemniej w tym przypadku będziesz musiał przekodować swoje teksty z KOI-8
na Alt przed posłaniem ich do drukarki. Jest to całkiem łatwe, ponieważ
pełno jest programów które to robią (patrz "translit", na przykład), tak
więc wystarczy że właściwie wywołasz ten program w polu if /etc/
printcap. Na przykład dla programu translit napisać możesz:
if=/usr/bin/translit -t koi8-alt.rus
Patrz printcap(5) po szczegóły.
Jednym świetnym sposobem poradzenia sobie z różnymi czcionkami i drukarkami jest użycie TeXa. Sterowniki TeXa zajmują się wszelkimi detalami, więc skoro już raz nauczyłeś TeXa rozumieć czcionki cyrylicowe, sprawa załatwiona.
Inną możliwością jest użycie PostScriptu. Zdecydowałem się poświęcić temu cały rozdział, ponieważ nie jest to łatwe.
W końcu, są i inne edytory tekstów które mają sterowniki drukarek. Nigdy nie próbowałem niczego poza TeXem, więc nie mogę niczego zasugerować
Jeśli tym czego potrzebujesz jest wydrukowanie tekstu w ASCII bez żadnego
dodatkowego przetworzenia, możesz spróbować użyć kilku programów które
przerobią twój tekst w cyrylicy na gotowe do przetworzenia plik TeXa.
Jednym z najlepszych programów do tego celu jest translit. W tym
przypadku nie musisz się nawet kłopotać instalowaniem czcionek cyrylicowych
dla TeXa, ponieważ translit używa pakietu Washington Cyriliic, który
włączony jest do większości dystrybucji TeXa (a może się mylę?)
Czasami masz tekst w czystym KOI-8 i chcesz go wydrukować tylko po to żeby mieć go na papierze. Jedną z najprostszych metod osiągnięcia tego jest użycie specjalnych programów konwertujących tekst do postscriptu.
Istnieje pewna liczba programów dokonujących takiej konwersji. Osobiście
preferuję a2ps. Stworzony początkowo jako prosty konwerter tekstu
do postscriptu, stał się on dużym i wysoce konfigurowalnym programem
z wieloma opcjami, pozwalając ci obsłużyć różne wielkości strony,
podświetlanie składni itp. Inne narzędzie (obecnie dostępne jako część
projektu GNU) to enscript
Głównym problemem z takimi programami jest to że nie wiedzą one nic o czcionkach cyrylicowych. Właśnie rozważam możliwość zawierania w nich czcionek cyrylicowych, tak aby rozumiały cyrylicę.
Niemniej cała ta powyższa gadanina byłaby bezcelowa bez żadnej rzeczywistej rady. Oto więc ona:
Jak zwykle, GNU wygrywa. GNUsowy program enscript zaprojektowany
został do konwersji tekstu na postscript i ma doskonałą obsługę
nie-ASCIIowych zestawów znaków. Nie zawiera on cyrylicowych czcionek
postscriptowych, ale bardzo łatwo je zdobyć, jak wyjaśniono poniżej
(podziękowania dla Michaela Van Canneyta).
enscript. Jak na razie najświeższą wersją
jest 1.5. Możesz ściągnąć go albo z ftp GNU, albo jako pakiet RPM z
ftp RedHata.ftp://ftp.redhat.com/pub/
contrib/i386/enscript-fonts-koi8-1.0.1-i386.rpm)textbook.tar.gz z
Cyrillic Software Collection na ftp://sunsite.unc.edu/pub/academic/russian-studies/Software/). Rozpakuj go do katalogu w którym zainstalowane
są czcionki enscripta. Przejdź teraz do tego katalogu i wykonaj:
mkamfmap *.afm
enscript --font=Textbook8 --encoding=koi8 jakis_plik
Jeśli chcesz jakiegoś szybkiego rozwiązania i nie dbasz o jakość wydruku,
a wszystkim czego potrzebujesz jest cyrylica na papierze, spróbuj pakietu
rtxt2ps. Jest to bardzo prosty i niewyszukany konwerter tekstu do
postscriptu. Jakość wydruku jest nienajlepsza (albo, mówiąc szczerze,
całkiem zła), ale robi on to co powinien.
Jeszcze inną deską ratunku jest przerobiona wersja a2ps. Jest ona
dość stara, więc nie spodziewaj się tych wszystkich fajerwerków z nowszych
wersji. Ale drukuje ona tekst w cyrylicy, a jakość wydruku jest znacząco
lepsza niż ta rtxt2ps. Doświadczyłem przy niej jednak różnych rodzajów
problemów, np. nie mogłem wydrukować więcej niż dwóch stron (???)
Ogólnie, aby przestawić pewne narzędzia w trybie operowania cyrylicą wymagane jest po prostu umożliwienie danych ośmiobitowych. W kilku przypadkach wymagane jest powiedzenie aplikacji aby pokazała rozszerzone znaki ASCII w ich bazowej formie.
Aby bash rozumiał ośmiobitowe znaki, powinieneś ustawić trzy zmienne,
Najlepszym miejscem jest plik ~/.inputrc. Ustaw co następuje:
set meta-flag on
set convert-meta off
set output-meta on
Powinienieś ustawić poniższe w .cshrc:
setenv LC_CTYPE iso_8859_5
stty pass8
Jeśli nie masz stty zgodnego z POSIX (niemożliwe w Linuxie), zastąp ostatnie wywołanie przez:
stty -istrip cs8
Minimalną obsługę cyrylicy w emacsie zapewnia dodanie poniższych
wywołań do pliku .emacs (zakładając że zainstalowana jest obsługa
zestawu znaków cyrylicy dla konsoli lub X, odpowiednio).
(standard-display-european t)
(set-input-mode (car (current-input-mode))
(nth 1 (current-input-mode))
0)
Umożliwia to użytkownikowi oglądanie i wprowadzanie rosyjskich dokumentów.
Taki tryb nie jest jednak wielką wygodą, ponieważ emacs nie rozpoznaje
zwykłych komend klawiatury gdy znajduje się w trybie wprowadzania
cyrylicy. Istnieje pewna liczba pakietów które używają innego podejścia.
Nie polegają one na "input mode" ustalonym przez środowisko (X lub
konsolę). Zamiast tego, pozwalają użytkownikowi przełączać tryb wprowadzania
specjalnymi komendami emacsa, a emacs sam jest odpowiedzialny za
przedefiniowanie zestawu znaków. Autor miał szansę zaznajomić się z trzema
takimi pakietami. Pakiet russian.el Walerego Aleksiejewa
(
mailto:ava@math.jhu.edu)
pozwala użytkownikowi przełączać się między trybami cyrylicy i zwykłym
oraz tłumaczyć zawartość bufora z jednego kodowania cyrylicy na drugie
(co jest szczególnie użyteczne przy czytaniu tekstów przeniesionych
z MS-DOS). rustable.el (nie znam niestety autora) dodaje do emacsa reguły
składniowe zestawu znaków (granice słów, reguły zmiany wielkości liter
itd.) Pakiety te znaleźć można w większości archiwów emacsowego Lispa.
Jedyną niewygodą jest to że emacs ciągle traktuje znaki rosyjskie jako specjalne, nie rozpoznaje więc granic słów rosyjskich i zmian wielkości liter. Aby to poprawić, musisz zmodyfikować składnię i tablice wielkości liter emacsa:
;; w zmiennych poniżej znajdują się śmiecie, ponieważ SGML nie lubi
;; znaków cyrylicy. Będziesz musiał wstawić duże i małe litery
;; rosyjskiego alfabetu, odpowiednio (patrz faktyczne pliki)
(setq *russian-abc-ucase* "tu wstaw duże litery")
(setq *russian-abc-lcase* "tu wstaw małe litery")
(let ((i 0)
(len (length *russian-abc-ucase*)))
(while (< i len)
(modify-syntax-entry (elt *russian-abc-ucase* i) "w ")
(modify-syntax-entry (elt *russian-abc-lcase* i) "w ")
(set-case-syntax-pair (elt *russian-abc-ucase* i)
(elt *russian-abc-lcase* i)
(standard-case-table))
(setq i (+ i 1))))
Dla tego celu stworzyłem plik rusup.el który tego dokonuje, podobnie
jak kilka poręcznych funkcji. Musisz załadować go w swoim ~/.emacs.
Jeszcze jeden pakiet to remap, który próbuje bardziej utypowić obsługę
cyrylicy. Pakiet ten napisał Per Abrahamsen
(
mailto:abraham@iesd.auc.dk), i dostępny jest on na
ftp.iesd.auc.dk.
We własnej opinii, sugerowałbym zacząć od russian.el, bowiem jest on
bardzo łatwy w konfiguracji i użyciu.
Istnieje dodatek rspell do pakietu GNU ispell, stworzony przez
Neala Daltona (nrd@cray.com), ale doświadczyłem z nim kilku
problemów próbując go zmusić do natychmiastowego działania. Spróbuj go -
może tobie się poszczęści.
Spróbuj opcji -asis
Co do implementacji public domain ksh, pdksh 5.1.3, możesz
wprowadzać znaki ośmiobitowe tylko w trybie vi. Użyj
set -o vi
Jak na razie, less nie obsługuje zestawu znaków KOI-8, ale poniższa
zmienna środowiskowa załatwia sprawę:
LESSCHARSET=latin1
Od wersji 2.6 możesz wybrać odpowiednią wartość dla opcji Display Character Set.
Aby poprawnie wyświetlać znaki cyrylicy, zaznacz opcję 'full 8 bits' w menu Options/Display.
Jeśli masz problem z brzydkimi ramkami okien, zobacz sekcję ''
Off topic: jeśli chcesz zmusić mc do używania kolorów w oknie xterma,
ustaw zmienną COLORTERM
COLORTERM= ; export COLORTERM
Upewnij się że używasz wersji Netscape'a większej niż 3. Jeśli twój Netscape jest starszy, ściągnij nowszego z www.netscape.com.
Aby móc oglądać tekst cyrylicą w większej części dokumentów HTMLowych, zrób co następuje:
UWAGA: konfiguracja ta będzie działała z większą częścią dokumentu. Jednakże nie będziesz mógł wyświetlać tekstu cyrylicą w nagłówku okna, menu i niektórych dialogach. Aby naprawić te problemy:
Andriej A. Czernow wie więcej niż inni o KOI-8 w ogóle i o Netscape w szczególności. Odwiedź jego doskonałą stronę o KOI-8 i ściągnij łatę do pliku zasobów Netscape, co sprawi że Netscape będzie mówiło po rosyjsku na tyle na ile może.
Wstaw następującą dyrektywę do ~/.pinerc dla konfiguracji
osobistej, albo do /usr/lib/pine.conf dla globalnej:
character-set=ISO-8859-5
Upewnij się że powłoka na serwerze docelowym jest ustawiona poprawnie.
Potem, jeśli twój rlogin nie działa domyślnie [prawidłowo],
użyj rlogin -8.
Od wersji 8 sendmail domyślnie prawidłowo radzi sobie z 8-bitowymi danymi.
Jeśli nie jest tak u ciebie, sprawdź opcję EightBitMode i opcję -7
przekazywaną mailerom w twoim /etc/sendmail.cf. Patrz "Sendmail;
Installation and Operation Guide" po szczegóły.
Używaj w ten sam sposób jak csh (patrz sekcja o csh). Plikami
startowymi w tym przypadku są .zshrc oraz /etc/zshrc.
Istnieje pewna liczba programów zdolna konwertować z KOI-8 na Alt
i z powrotem. Poszukaj w SovInformBureau albo na ftp.funet.fi
listy poręcznych małych programików. Możesz też użyć specjalnego
trybu emacsa (patrz sekcja o emacsie).
Szczególnie polecałbym jednakże pakiet translit. Obsługuje on
wiele popularnych zestawów znaków i potrafi nawet stworzyć pliki TeXa
(patrz sekcja 5.1). z tekstu rosyjskiego. Użytkownicy RedHata mają
do dyspozycji translit w postaci pliku RPM.
Jak dotąd objaśniałem sposoby zmuszenia programów do akceptowania i wyświetlania zestawu znaków cyrylicy. Niemniej pełne przystosowanie systemu do warunków lokalnych obejmuje o wiele więcej. To co omówiono powyżej nie wystarcza. System powinien być przyjazny dla użytkownika, który niekoniecznie musi znać angielski. W mojej opinii, nie jest wielką sprawą obeznanie się z angielskim na poziomie komunikatów programów. Jednakże nie jest całkiem fair tego wymagać.
Tak więc następny poziom przystosowania wymaga aby programy były dostosowywalne do wymagań różnych języków i zwyczajów w przedstawianiu danych.
Wcześniej dokonywano tego poprzez rozwijanie pewnej abstrakcji komunikatów będących rezultatem kodu programu. Teraz ten mechanizm jest (mniej czy więcej) ustandaryzowany. I, oczywiście, istnieją jego darmowe implementacje!
Dobra wiadomość to to że GNU w końcu przyjęło sposób tworzenia
zinternacjonalizowanych aplikacji. Ulrich Drepper
(
mailto:drepper@ipd.info.uni-karlsruhe.de)
stworzył pakiet gettext, dostępny we wszystkich
repozytoriach GNU, takich jak
ftp://prep.ai.mit.edu/pub/gnu/.
Pozwala on tworzyć programy w sposób który łatwo można roszerzyć
na obsługę wielu języków. Nie zamierzam opisywać technik programistycznych,
zwłaszcza że pakiet gettext zawiera doskonały podręcznik.
Tak więc jeżeli tworzysz programy które wypisują jakieś komunikaty (a stworzyłeś kiedyś taki który by ich wypisywał?), nie leń się i włóż ociupinę (naprawdę ociupinę) wysiłku w uczynienie swojego programu świadomym locale.
Prośba o współpracę: jeśli chcesz nauczyć się pakietu gettext i
równocześnie dołożyć coś do projektu GNU; lub nawet jeśli tylko chcesz
dołożyć, możesz to zrobić! GNU się internacjonalizuje, więc wszystkie
narzędzia przerabiane są na świadome locale. Problemem jest
przetłumaczenie komunikatów z angielskiego na rosyjski (i inne
języki, jak wam się podoba). Zasadniczo, to co trzeba zrobić to
zdobyć specjalny plik .po, składający się z angielskich komunikatów
konkretnego narzędzia i dołączyć do każdego komunikatu jego odpowiednik
po rosyjsku. W ostatecznym rozrachunku sprawi to że system będzie
odzywał się po rosyjsku, jeśli zechce tego użytkownik! Po więcej
szczegółów i dalsze wskazówki skontaktuj się z Ulrichem Drepperem
(
mailto:drepper@ipd.info.uni-karlsruhe.de)
Strona domowa a2ps:
http://www-inf.enst.fr/~demaille/a2ps.html
Strona A. Czernowa o KOI-8:
http://www.nagual.ru/~ache/koi8.html
Ogólna informacja o Linuxie:
http://sunsite.unc.edu/mdw/linux.html
Moja kolekcja rzeczy związanych z konfiguracją cyrylicy:
ftp://netvision.net.il/pub/home/b/belikoff/cyrillic/
Kolekcja cyrylicowa na ftp.kiae.su:
ftp://ftp.kiae.su/cyrillic
Kolekcja cyrylicowa na ftp.relcom.ru:
ftp://ftp.relcom.ru/cyrillic/
Kolekcja programów cyrylizujących
ftp://ftp.funet.fi/pub/culture/russian/comp/
Cronyx
http://www.cronyx.ru/ - twórcy czcionek cyrylicowych dla systemu X Windows.
Pakiet remap dla emacsa
ftp://frp.iesd.auc.dk/
Czcionki cyrylicowe dla Ghostscripta:
ftp://ftp.kapella.gpi.ru/pub/cyrillic/psfonts
Czcionki cyrylicowe dla X:
ftp://ftp.kiae.su/cyrillic/x11/fonts/xrus-2.1.1-src.tgz
Ghostscript:
http://www.cs.wisc.edu/~ghost/index.html
GNU nenscript:
ftp://ftp.prep.ai.mit.edu/pub/gnu
Informacja o Cyrlillic Software:
http://sunsite.oit.unc.edu/sergei/Software/Software.html
Grupa newsowa relcom.fido.ru.unix.
RFC 1489:
http://ds.internic.net/rfc/rfc1489.txt
Użyteczne pakiety obsługujące cyrylicę:
ftp://sunsite.unc.edu/pub/academic/russian-studies/Software
Pakiet kbd dla Linuxa:
ftp://sunsite.unc.edu/pub/Linux/system/Keyboards/
Kolekcje czcionek X:
ftp://ftp.switch.ch/mirror/linux/X11/fonts/
SovInformBureau:
http://www.siber.com/sib/russify/
Pakiet rusyfikujący teTeX:
ftp://xray.sai.msu.su/pub/outgoing/teTeX-rus/
rtxt2ps i przerobiony a2ps:
http://www.siber.com/sib/russify/converters/
Pakiet translit:
ftp://ftp.osc.edu/pub/russian/translit/translit.tar.Z
Pakiet xruskb:
ftp://ftp.relcom.ru/x11/cyrillic/
rspell:
ftp://sunsite.unc.edu/pub/academic/russian-studies/Software/rspell.tar.gz
FTP XFree86:
http://www.xfree86.org
doc-linux-pl-2002.06.14.orig/html/DNS-HOWTO.pl.html 0100664 0001750 0001750 00000210257 06776743140 020204 0 ustar coven coven
Słowa kluczowe: DNS, bind, bind-4, bind-8, named, dialup, ppp, slip, isdn, Internet, domain, name, hosts, resolving
(C)opyright 1995 Nicolai Langfeldt. Nie zmieniać bez zachowania praw autorskich. Dokument ten może być dowolnie rozpowszechniany dotąd, dokąd zostanie zachowana wiadomość o prawach autorskich.
Chciałbym podziękować Arntowi Gulbrandsenowi, który przeczytał szkice tej pracy niezliczoną ilość razy i dostarczył wielu przydatnych sugestii. Chcę też podziękować ludziom, którzy wysyłali mi e-mailem sugestie i uwagi.
Ten dokument nigdy nie będzie ukończony - wysyłaj mi listy o twoich problemach i sukcesach, może to sprawić, że HOWTO będzie dokładniejsze. Pieniądze, komentarze i/lub pytania możesz wysyłać do janl@math.uio.no. Jeżeli wyślesz mi e-mail i będziesz żądał odpowiedzi, upewnij się, że adres zwrotny jest poprawny i działający. Proszę, przeczytaj sekcję FAQ przed wysłaniem do mnie listu.
Jeśi chcesz przetłumaczyć to HOWTO, zawiadom mnie, abym mógł śledzić, w jakich językach zostałem opublikowany, mogę też zawiadamiać cię, kiedy HOWTO będzie uaktualniane.
To HOWTO jest dedykuję dla Anne Line Norheim Langfeldt. Zresztą pewnie nigdy tego nie przeczyta, bo nie jest tego rodzaju dziewczyną.
Czym ten dokument jest, a czym nie.
Dla początkujących: DNS to System Nazw Domen (Domain Name System). DNS przekształca nazwy maszyn na numery IP, które są ich adresami, mapuje z nazwy na adres i odwrotnie. To HOWTO opisuje, jak zdefiniować takie mapowanie używając systemu Linux. Mapowanie to po prostu związek jednej rzeczy z drugą, w tym przypadku nazwy maszyny, jak ftp.linux.org i jej adresu IP, 199.249.150.4.
DNS jest dla początkujących (ciebie ;-)) jednym z najtrudniejszych zagadnień administracji sieci. To HOWTO wyjaśnia parę rzeczy - opisuje jak postawić prosty serwer nazw DNS, zaczynając z serwerem cache i przechodząc do ustawiania podstawowego (primary) serwera DNS dla domeny. Żeby uzyskać informację o bardziej złożnonych konfiguracjach, zobacz sekcję FAQ tego dokumentu. Jeżeli i tam nie znajdziesz potrzebnego opisu, bedziesz musiał przeczytać Prawdziwą Dokumentację. Powrócę do jej składników w ostatnim rodziale.
Zanim zaczniesz, powinieneś tak skonfigurować swoją maszynę, żebyś mógł telnetować
się na nią i z niej, oraz z powodzeniem przeprowadzić wszystkie rodzaje
połączeń
z siecią, a zwłaszcza móc wykonać telnet 127.0.0.1
i uzyskać połączenie z własnym komputerem (przetestuj to teraz!).
Potrzebne będą też poprawne: /etc/nsswitch.conf (lub
/etc/host.conf), /etc/resolv.conf i /etc/hosts,
jako punkt startowy, ponieważ nie będę wyjaśniał tu ich funkcji.
Jeśli nie masz tego wszystkiego ustawionego i działającego, NET-3 HOWTO
i/lub PPP-HOWTO wyjaśniają jak to ustawić. Przeczytaj je.
Kiedy mówię ,,twoja maszyna'', mam na myśli komputer, na którym chcesz ustawić DNS, a nie żadną inną maszynę, jaką możesz mieć, która jest związana z twoją siecią.
Przyjmuję, że nie jesteś za żadnym rodzajem ściany ognia (firewall), która blokuje zapytania (queries) o nazwy. Jeżeli jesteś, będziesz potrzebował specjalnej konfiguracji, przeczytaj sekcję FAQ.
Serwerem nazw w Unixie jest program nazywany named.
Jest on częścią pakietu bind, który jest koordynowana przez Paula Vixie z
Internet Software Consortium. Named jest załączony w większości
dystrybucji Linuxa i zazwyczaj zainstalowany jako /usr/sbin/named.
Jeżeli masz już named, możesz go prawdopodobnie używać; jeśli nie,
możesz wziąć binaria z jakiegoś Linuxowego serwera ftp, lub najnowsze
i najlepsze źródła z
ftp.isc.org/isc/bind/src/cur/bind-8/.
To HOWTO opisuje wersję 8 bind'a. Stara wersja tego HOWTO (o bind 4) jest
dostępna na
http://www.math.uio.no/~janl/DNS/.
Jeżeli strona man named'a mówi o named.conf masz bind'a 8, a jeżeli
o named.boot, bind 4. Jeśli masz 4 i obchodzi cię bezpieczeństwo,
naprawdę powinieneś dokonać rozszerzenia do nowego 8.
DNS to baza danych szeroka jak sama sieć. Uważaj, co do niej wkładasz. Jeżeli włożysz do niej śmieci, ty i inni wyjmą także śmieci. Jeżeli utrzymasz swój DNS w czystości i ciągłości, będzie ci dobrze służył. Naucz się go używać, administrować i znajdować błędy, a zostaniesz kolejnym dobrym administratorem, utrzymującym sieć przed upadnięciem na kolana z powodu przeładowania niedobrym zarządzaniem.
W tym dokumencie napisałem parę wyjaśnień, które nie są całkowicie prawdziwe (jednakże są przynajmniej w połowie prawdą). Wszystko w interesie uproszczenia. Wszystko będzie (prawdopodobnie ;-)) działać, jeżeli uwierzysz w to, co mówię.
Podpowiedź: Zrób kopie zapasowe wszystkich plików, które będziesz zmieniać, żebyś mógł wrócić do starej, działającej konfiguracji, jeżeli nic się nie powiedzie.
Pierwszy krok w konfigurowaniu DNS'u, bardzo przydatny dla korzystających z modemu.
Serwer z pamięcią podręczną będzie szukał odpowiedzi na zapytania o nazwy i pamiętał odpowiedź, żebyś mógł jej użyć następnym razem, kiedy będziesz jej potrzebował. To skróci czas oczekiwania za drugim razem kiedy będziesz potrzebował nazwy, zwłaszcza jeżeli korzystasz z wolnego połączenia.
Po pierwsze, potrzebujesz pliku /etc/named.conf. Jest on
czytany, kiedy named zostaje uruchamiany. Narazie powinien po prostu zawierać:
// Plik konfiguracyjny dla serwera nazw ,,caching''
options {
directory "/var/named";
// Odkomentowanie tego może pomóc, jeżeli musisz przejść przez
// ścianę ognia (firewall), a coś nie działa:
// query-source address * port 53;
};
zone "." {
type hint;
file "root.hints";
};
zone "0.0.127.in-addr.arpa" {
type master;
file "pz/127.0.0";
};
Linia directory mówi named'owi, gdzie szukać plików. Wszystkie pliki
w podkatalogach będą odpowiadały tej zmiennej. A więc pz jest
podkatalogiem
w /var/named, czyli /var/named/pz. /var/named to
odpowiedni katalog, zgodnie z Linux File system Standard.
Plik o nazwie /var/named/root.hints jest zdefiniowany w named.conf.
Powinien on zawierać następujące rekordy:
. 6D IN NS G.ROOT-SERVERS.NET. . 6D IN NS J.ROOT-SERVERS.NET. . 6D IN NS K.ROOT-SERVERS.NET. . 6D IN NS L.ROOT-SERVERS.NET. . 6D IN NS M.ROOT-SERVERS.NET. . 6D IN NS A.ROOT-SERVERS.NET. . 6D IN NS H.ROOT-SERVERS.NET. . 6D IN NS B.ROOT-SERVERS.NET. . 6D IN NS C.ROOT-SERVERS.NET. . 6D IN NS D.ROOT-SERVERS.NET. . 6D IN NS E.ROOT-SERVERS.NET. . 6D IN NS I.ROOT-SERVERS.NET. . 6D IN NS F.ROOT-SERVERS.NET. G.ROOT-SERVERS.NET. 5w6d16h IN A 192.112.36.4 J.ROOT-SERVERS.NET. 5w6d16h IN A 198.41.0.10 K.ROOT-SERVERS.NET. 5w6d16h IN A 193.0.14.129 L.ROOT-SERVERS.NET. 5w6d16h IN A 198.32.64.12 M.ROOT-SERVERS.NET. 5w6d16h IN A 202.12.27.33 A.ROOT-SERVERS.NET. 5w6d16h IN A 198.41.0.4 H.ROOT-SERVERS.NET. 5w6d16h IN A 128.63.2.53 B.ROOT-SERVERS.NET. 5w6d16h IN A 128.9.0.107 C.ROOT-SERVERS.NET. 5w6d16h IN A 192.33.4.12 D.ROOT-SERVERS.NET. 5w6d16h IN A 128.8.10.90 E.ROOT-SERVERS.NET. 5w6d16h IN A 192.203.230.10 I.ROOT-SERVERS.NET. 5w6d16h IN A 192.36.148.17 F.ROOT-SERVERS.NET. 5w6d16h IN A 192.5.5.241
BARDZO WAŻNE: W niektórych wersjach tego dokumentu zawartość powyższego pliku będzie posiadać kilka spacji albo tab przed pierwszym wypełnionym (non blank) znakiem. Nie powinny się one znaleźć w pliku. Skasuj każdą poprzedzającą spację w plikach, które wycinasz i wklejasz z tego HOWTO.
Pamiętaj, co powiedziałem o poprzedzających spacjach!
Plik opisuje główne serwery (root servers) na świecie. Dane zmieniają się z biegiem czasu i muszą być nadzorowane. Przeczytaj sekcję o nadzorze, żeby uzyskać informacje o uaktualnianiu serwera.
Następna linia w named.conf to linia primary. Wyjaśnię jej
funkcję w następnym rozdziale, a teraz tylko utwórz plik 127.0.0
w podkatalogu pz:
@ IN SOA linux.bogus. hostmaster.linux.bogus. (
1 ; Numer seryjny
8H ; Odświeżenie
2H ; Powtórzenie
1W ; Przedawnienie
1D) ; Minimalny TTL
NS ns.linux.bogus.
1 PTR localhost.
Następnie, potrzebujesz pliku /etc/resolv.conf, wyglądającego
następująco:
search poddomena.twoja-domena.edu twoja-domena.edu nameserver 127.0.0.1
Linia ,,search'' ustala, które domeny powinny być przeszukane dla
jakichkolwiek nazw węzłów, z jakimi chcesz się połączyć. Linia
nameserver definiuje adres twojego serwera nazw, w tym przypadku twoją
własną maszynę, ponieważ tu pracuje named (127.0.0.1 wystarczy, nie ma
znaczenia, czy twój komputer ma inny adres). Jeśli chcesz wyznaczyć kilka
serwerów nazw, wstaw oddzielną linię ,,nameserver'' dla każdego.
(Zauważ: Named nigdy nie czyta tego pliku, robi to resolver, który używa
named.)
Żeby zilustrować, co ten plik robi: Jeśli klient próbuje znaleźć foo,
wtedy jako pierwsze próbowane jest foo.poddomena.twoja-domena.edu,
potem foo.twoja-domena.edu, a w końcu foo. Jeżeli klient
próbuje szukać sunsite.unc.edu, najpierw próbowane jest
sunsite.unc.edu.poddomena.twoja-domena.edu
(tak, to jest głupie, ale w ten sposób działa), potem
sunsite.unc.edu.twoja-domena.edu, a w końcu sunsite.unc.edu.
Nie wpisuj za wielu domen w linii search, ponieważ zabiera to trochę czasu,
żeby je wszystkie przeszukać.
Przykład przyjmuje, że należysz do domeny
poddomena.twoja-domena.edu, twój komputer jest wtedy prawdopodownie
nazwany twój-komputer.poddomena.twoja-domena.edu. Linia search nie
powinna zawierać twojej TLD (Top Level Domain, Domena Najwyższego Poziomu,
w tym przypadku edu). Jeżeli często łączysz się z węzłami w innej
domenie, możesz dodać tą domenę do linii search w ten sposób:
search poddomena.twoja-domena.edu twoja-domena.edu inna-domena.com
i tak dalej. Oczywiście musisz wpisać prawdziwe nazwy domen zamiast podanych. Zauważ brak kropek na końcach nazw domen.
Następnie, zależnie od twojej wersji libc, musisz poprawiać
albo /etc/nsswitch.conf, albo /etc/host.conf. Jeżeli już masz
nsswitch.conf, będziemy poprawiać właśnie ten plik, a jeśli nie,
host.conf. (NAPRAWDĘ zalecam poprawianie host.conf we
wszystkich systemach, w których istnieje, np. u mnie jest i jeden
i drugi - przyp. tłum.)
/etc/nsswitch.conf
Jest to długi plik, który ustala, skąd wziąć różne rodzaje typów danych,
z jakiego pliku lub bazy. Zazwyczaj zawiera on na górze pomocne
komentarze, które powinieneś teraz przeczytać. Potem znajdź linię zaczynającą
się na ,,hosts:'' - powinna zawierać:
hosts: files dns
Jeżeli nie ma linii zaczynającej się na ,,hosts:'', wpisz powyższą.
Mówi, że programy powinny najpierw spojrzeć do pliku /etc/hosts, potem
sprawdzić DNS zgodnie z resolv.conf.
/etc/host.conf
Prawdopodobnie zawiera kilka linii, jedna powinna zaczynać się na
order i wyglądać następująco:
order hosts,bind
Jeżeli nie ma linii ,,order'' powinieneś ją dopisać. Mówi ona
procedurom szukającym nazw, żeby najpierw zajrzeć do /etc/hosts,
a potem spytać serwer nazw (który ustaliłeś w pliku resolv.conf
jako 127.0.0.1).
Te dwa pliki są omówione w podręczniku man resolv(8)
(wykonaj polecenie ,,man 8 resolv'') w większości dystrybucji Linuxa.
Ta strona man jest według mnie całkiem możliwa do zrozumienia, a każdy,
zwłaszcza administratorzy DNS, powinni ją przeczytać. Zrób to teraz -
jeżeli powiesz sobie ,,później'', nigdy nie będziesz miał okazji ich przeczytać.
Po tym wszystkim nadszedł czas, aby uruchomić named. Jeżeli używasz połączenia
modemowego, połącz się najpierw. Wpisz ,,ndc start'', bez opcji,
i naciśnij
enter. Jeżeli to nie działa, spróbuj
,,/usr/sbin/ndc start''.
Jeśli to też nie działa, zobacz sekcję
FAQ.
Teraz możesz przetestować swoją konfigurację. Jeżeli obejrzysz plik z
komunikatami sysloga (zazwyczaj /var/adm/messages, inny katalog
w którym można ich szukać to /var/log, inną nazwą pliku jest
syslog) kiedy uruchamiasz named (wykonaj tail -f /var/log/messages),
powinieneś ujrzeć coś takiego:
(linie kończące się na \ są kontynuowane w następnej linii)
Feb 15 01:26:17 roke named[6091]: starting. named 8.1.1 Sat Feb 14 \
00:18:20 MET 1998 ^Ijanl@roke.uio.no:/var/tmp/bind-8.1.1/src/bin/named
Feb 15 01:26:17 roke named[6091]: cache zone "" (IN) loaded (serial 0)
Feb 15 01:26:17 roke named[6091]: master zone "0.0.127.in-addr.arpa" \
(IN) loaded (serial 1)
Feb 15 01:26:17 roke named[6091]: listening [127.0.0.1].53 (lo)
Feb 15 01:26:17 roke named[6091]: listening [129.240.230.92].53 (ippp0)
Feb 15 01:26:17 roke named[6091]: Forwarding source address is [0.0.0.0].1040
Feb 15 01:26:17 roke named[6092]: Ready to answer queries.
Jeżeli pojawią się jakieś komunikaty o błędach, popełniłeś jakiś. Named powie, w którym pliku jest błąd (mam nadzieję, że jest to named.conf albo root.hints :-)). Zabij named i sprawdź plik. (jest też bardziej ,,humanitarny'' :-) od zabijania sposób - napisz ,,ndc stop'', odczekaj dłuższą chwilę i nameserver zostanie wyłączony - przyp. tłum.)
Teraz uruchom nslookup, żeby sprawdzić twoje robótki ręczne.
$ nslookup
Default Server: localhost
Address: 127.0.0.1
>
Jeżeli otrzymałeś takie coś, to znaczy, że działa. Miejmy nadzieję.
Jeśli co innego, sprawdź wszystko od początku. Za każdym razem, kiedy zmienisz
plik named.conf musisz ponownie uruchomić named komendą
ndc restart.
Teraz możesz wprowadzić zapytanie. Spróbuj poszukać jakiegoś komputera blisko
ciebie. pat.uio.no jest blisko mnie, na Uniwersytecie w Oslo:
> pat.uio.no
Server: localhost
Address: 127.0.0.1
Name: pat.uio.no
Address: 129.240.130.16
Nslookup poprosił twojego named'a o poszukanie maszyny pat.uio.no.
Połączył się wtedy z jednym z serwerów nazw w twoim pliku root.hints
i zapytał stamtąd o drogę.
Może to zająć troszeczkę czasu, zanim otrzymasz wynik, ponieważ szuka we
wszystkich domenach, które wymieniłeś w /etc/resolv.conf.
Jeżeli zapytasz znowu o to samo, otrzymasz coś takiego:
> pat.uio.no
Server: localhost
Address: 127.0.0.1
Non-authoritative answer:
Name: pat.uio.no
Address: 129.240.2.50
Zwróć uwagę na linię ,,Non-authoritative answer:'', która pojawiła się
tym razem. Znaczy to, że named nie szukał nazwy w sieci, tylko popatrzył
w swojej pamięci podręcznej i tam ją znalazł. Ale informacja z pamięci
podręcznej może być przedawniona. Zostajesz więc poinformowany
o tym (bardzo niewielkim) niebezpieczeństwie, poprzez komunikat
,,Non-authorative answer:''. Kiedy nslookup mówi to za drugim
razem, kiedy pytasz o komputer, jest to pewny znak, że named zapamiętuje
informacje i działa. Możesz wyjść z nslookup wydając komendę
exit.
Teraz już wiesz, jak postawić przyspieszający (caching) named. Wypij piwo, mleko, lub cokolwiek innego, żeby to uczcić.
Jak skonfigurować własną domenę.
Zanim naprawdę zaczniemy ten rozdział, zamierzam podać ci trochę
teorii o działaniu DNSu. A ty to przeczytasz, ponieważ jest to przydatne.
Jeśli nie chcesz, powinieneś przynajmniej przejść przez to bardzo
szybko. Przestań przeglądać, kiedy dojdziesz do opisu, mówiącego co powinieneś
wstawić do pliku named.conf.
DNS to system hierarchiczny. Najwyższa pozycja to ,,.'', nazywa się
,,root''. Pod . istnieje kilka Domen Najwyższego Poziomu (Top Level Doamins, TLD),
najpopularniejsze to ORG, COM, EDU i NET, ale jest jeszcze wiele innych.
(np. MIL, GOV, ART, NOM, PRIV - przyp. tłum.)
Kiedy poszukiwany jest komputer, zapytanie jest przeprowadzane rekursywnie,
zgodnie z hierarchią, począwszy od góry. Jeżeli chcesz znaleźć adres
komputera prep.ai.mit.edu, twój serwer nazw musi znaleźć serwer
obsługujący domenę edu. Pyta serwer . (zna już serwery . -
po to jest plik root.hints), serwer . zwraca listę serwerów
edu:
$ nslookup
Default Server: localhost
Address: 127.0.0.1
Zacznij pytać server root:
> server c.root-servers.net.
Default Server: c.root-servers.net
Address: 192.33.4.12
Ustaw typ zapytania na NS (rekordy serwerów nazw):
%gt; set q=ns
Spytaj o edu:
> edu.
Końcowa kropka jest wymagana, mówi serwerowi, że edu jest pod . (to zawęża obszar poszukiwań).
edu nameserver = A.ROOT-SERVERS.NET
edu nameserver = H.ROOT-SERVERS.NET
edu nameserver = B.ROOT-SERVERS.NET
edu nameserver = C.ROOT-SERVERS.NET
edu nameserver = D.ROOT-SERVERS.NET
edu nameserver = E.ROOT-SERVERS.NET
edu nameserver = I.ROOT-SERVERS.NET
edu nameserver = F.ROOT-SERVERS.NET
edu nameserver = G.ROOT-SERVERS.NET
A.ROOT-SERVERS.NET internet address = 198.41.0.4
H.ROOT-SERVERS.NET internet address = 128.63.2.53
B.ROOT-SERVERS.NET internet address = 128.9.0.107
C.ROOT-SERVERS.NET internet address = 192.33.4.12
D.ROOT-SERVERS.NET internet address = 128.8.10.90
E.ROOT-SERVERS.NET internet address = 192.203.230.10
I.ROOT-SERVERS.NET internet address = 192.36.148.17
F.ROOT-SERVERS.NET internet address = 192.5.5.241
G.ROOT-SERVERS.NET internet address = 192.112.36.4
Wynik mówi nam, że *.root-servers.net podaje edu.,
możemy więc
dalej pytać c. Teraz chcemy wiedzieć, kto obsługuje następny poziom
nazwy domeny: mit.edu.:
> mit.edu.
Server: c.root-servers.net
Address: 192.33.4.12
Non-authoritative answer:
mit.edu nameserver = W20NS.mit.edu
mit.edu nameserver = BITSY.mit.edu
mit.edu nameserver = STRAWB.mit.edu
Authoritative answers can be found from:
W20NS.mit.edu internet address = 18.70.0.160
BITSY.mit.edu internet address = 18.72.0.3
STRAWB.mit.edu internet address = 18.71.0.151
STRAWB, W20NS i BITSY obsługują mit,
wybierz jeden i pytaj o ai.mit.edu:
> server W20NS.mit.edu.
Serwery nazw nie rozróżniają wielkości liter, ale używam myszki do wycinania i wklejania, więc kopiuje wynik prosto z ekranu.
Server: W20NS.mit.edu
Address: 18.70.0.160
> ai.mit.edu.
Server: W20NS.mit.edu
Address: 18.70.0.160
Non-authoritative answer:
ai.mit.edu nameserver = ALPHA-BITS.AI.MIT.EDU
ai.mit.edu nameserver = GRAPE-NUTS.AI.MIT.EDU
ai.mit.edu nameserver = TRIX.AI.MIT.EDU
ai.mit.edu nameserver = MUESLI.AI.MIT.EDU
ai.mit.edu nameserver = LIFE.AI.MIT.EDU
ai.mit.edu nameserver = BEET-CHEX.AI.MIT.EDU
ai.mit.edu nameserver = MINI-WHEATS.AI.MIT.EDU
ai.mit.edu nameserver = COUNT-CHOCULA.AI.MIT.EDU
ai.mit.edu nameserver = MINTAKA.LCS.MIT.EDU
Authoritative answers can be found from:
AI.MIT.EDU nameserver = ALPHA-BITS.AI.MIT.EDU
AI.MIT.EDU nameserver = GRAPE-NUTS.AI.MIT.EDU
AI.MIT.EDU nameserver = TRIX.AI.MIT.EDU
AI.MIT.EDU nameserver = MUESLI.AI.MIT.EDU
AI.MIT.EDU nameserver = LIFE.AI.MIT.EDU
AI.MIT.EDU nameserver = BEET-CHEX.AI.MIT.EDU
AI.MIT.EDU nameserver = MINI-WHEATS.AI.MIT.EDU
AI.MIT.EDU nameserver = COUNT-CHOCULA.AI.MIT.EDU
AI.MIT.EDU nameserver = MINTAKA.LCS.MIT.EDU
ALPHA-BITS.AI.MIT.EDU internet address = 128.52.32.5
GRAPE-NUTS.AI.MIT.EDU internet address = 128.52.36.4
TRIX.AI.MIT.EDU internet address = 128.52.37.6
MUESLI.AI.MIT.EDU internet address = 128.52.39.7
LIFE.AI.MIT.EDU internet address = 128.52.32.80
BEET-CHEX.AI.MIT.EDU internet address = 128.52.32.22
MINI-WHEATS.AI.MIT.EDU internet address = 128.52.54.11
COUNT-CHOCULA.AI.MIT.EDU internet address = 128.52.38.22
MINTAKA.LCS.MIT.EDU internet address = 18.26.0.36
A więc muesli.ai mit.edu jest serwerem nazw dla ai.mit.edu:
> server MUESLI.AI.MIT.EDU
Default Server: MUESLI.AI.MIT.EDU
Address: 128.52.39.7
Teraz zmieniamy typ zapytania - znaleźliśmy serwer nazw, więc teraz zapytajmy go
o wszystko, co wie o prep.ai.mit.edu.
> set q=any
> prep.ai.mit.edu.
Server: MUESLI.AI.MIT.EDU
Address: 128.52.39.7
prep.ai.mit.edu CPU = dec/decstation-5000.25 OS = unix
prep.ai.mit.edu
inet address = 18.159.0.42, protocol = tcp
ftp telnet smtp finger
prep.ai.mit.edu preference = 1, mail exchanger = gnu-life.ai.mit.edu
prep.ai.mit.edu internet address = 18.159.0.42
ai.mit.edu nameserver = beet-chex.ai.mit.edu
ai.mit.edu nameserver = alpha-bits.ai.mit.edu
ai.mit.edu nameserver = mini-wheats.ai.mit.edu
ai.mit.edu nameserver = trix.ai.mit.edu
ai.mit.edu nameserver = muesli.ai.mit.edu
ai.mit.edu nameserver = count-chocula.ai.mit.edu
ai.mit.edu nameserver = mintaka.lcs.mit.edu
ai.mit.edu nameserver = life.ai.mit.edu
gnu-life.ai.mit.edu internet address = 128.52.32.60
beet-chex.ai.mit.edu internet address = 128.52.32.22
alpha-bits.ai.mit.edu internet address = 128.52.32.5
mini-wheats.ai.mit.edu internet address = 128.52.54.11
trix.ai.mit.edu internet address = 128.52.37.6
muesli.ai.mit.edu internet address = 128.52.39.7
count-chocula.ai.mit.edu internet address = 128.52.38.22
mintaka.lcs.mit.edu internet address = 18.26.0.36
life.ai.mit.edu internet address = 128.52.32.80
Zaczynając od ., znaleźliśmy sukcesywne serwery nazw dla
następnych poziomów w nazwie domeny. Jeżeli używałbyś własnego serwera DNS
zamiast wszystkich innych, twój named zapisałby wszystkie informacje w czasie
poszukiwań, nie musiałbyś więc znowu ich pytać przez jakiś czas.
O wiele mniej mówi się o, tak samo ważnej domenie in-addr.arpa.
Jest ona też podzielona jak normalne domeny.
in-addr.arpa pozwala otrzymywać nazwy maszyn kiedy posiadamy ich
adresy.
Ważne: numery IP w domenie in-addr.arpa są pisane w odwrotnej
kolejności. Jeżeli adres maszyny to 192.128.52.43, named poszukuje tak, jak
dla przykładu z prep.ai.mit.edu: znaleźć serwery arpa..
Znaleźć seerwery in-addr.arpa., znaleźć serwery
192.in-addr.arpa., znaleźć serwery 128.192.in-addr.arpa.,
znaleźć serwery 52.128.192.in-addr.arpa..
Znaleźć potrzebne rekordy dla 43.52.128.192.in-addr.arpa..
Sprytne, no nie? (Powiedz ,,tak''.) Odwracanie numerów IP może sprawiać kłopoty
przez pierwsze dwa lata.
Właśnie skłamałem. DNS nie działa dokładnie tak jak przedstawiłem. Ale byłem wystarczająco blisko.
Teraz zdefiniujemy naszą własną domenę. Nazwijmy ją linux.bogus (,,bogus'', to po angielsku coś fałszywego, bzdurnego - przyp. tłum.) i zdefiniujemy w niej maszyny. Używam całkowicie bzdurnej (bogus) nazwy domeny, żeby upenić się, że nie przeszkadzamy nikomu Gdzieś Tam.
Jeszcze jedna rzecz zanim zaczniemy: Nie wszystkie znaki mogą wchodzić w skład
nazw komputerów. Jesteśmy ograniczeni do znaków angielskiego alfabetu, tzn.
a-z,
numerów 0-9 i znaku ,,-'' (łącznika). Trzymajmy się tych znaków. Wielkie i małe
litery nie są rozróżniane przez DNS, a więc pat.uio.no jest identyczne
z Pat.UiO.No.
Już zaczeliśmy część z linią 0.0.127 w pliku named.conf:
zone "0.0.127.in-addr.arpa" {
type master;
file "pz/127.0.0";
};
Zauważ brak kropki na końcu nazw domen w tym pliku -
definiujemy strefę 0.0.127.in-addr.arpa, że jesteśmy głównym jej
serwerem i jest zapisana w pliku pz/127.0.0. Mamy już ten plik,
zawiera on:
@ IN SOA ns.linux.bogus. hostmaster.linux.bogus. (
1 ; Serial
8H ; Refresh
2H ; Retry
1W ; Expire
1D) ; Minimum TTL
NS ns.linux.bogus.
1 PTR localhost.
Zauważ znak ,,.'' na końcu wszystkich pełnych nazw domen w tym pliku,
kontrastuje to z plikiem named.conf powyżej. Niektórzy ludzie lubią
rozpocząć każdą strefę z dyrektywą $ORIGIN, ale to już
ekstrawagancja. Origin (pochodzenie - gdzie znajduje się w hierarchii DNS),
pliku strefy jest zdefiniowany w linii strefy w pliku named.conf,
w tym przypadku 0.0.127.in-addr.arpa.
Ten ,,plik strefy'' zawiera 3 ,,rekordy zasobów'' (resource records, RR): RR SOA, RR NS i RR PTR. SOA to skrót od Start of Authority. Znak ,,@'' jest specjalną notacją znaczącą pochodzenie (origin), a jeżeli kolumna domeny dla tego pliku to ,,0.0.127.in-addr.arpa'', pierwsza linia tak naprawdę znaczy
0.0.127.in-addr.arpa. IN SOA ...
NS to RR Name Server - rekord serwera nazw. Nie jest potrzebne ,,@'' na końcu tej linii, ponieważ ostatnia linia zaczęła sie na ,,@''. Oszczędza to trochę pisania. A więc linia NS tak naprawdę znaczy
0.0.127.in-addr.arpa. IN NS ns.linux.bogus
Mówi DNS'owi, która maszyna jest serwerem nazw domeny
0.0.127.in-addr.arpa - jest to ns.linux.bogus. ,,ns'' to
zazwyczaj stosowana nazwa serwera nazw, ale skoro serwery www są nazywane
www.cośtam, nazwą może być cokolwiek.
I w końcu rekord PTR. Mówi, że komputer o adresie 1 w podsieci
0.0.127.in-addr.arpa, np. 127.0.0.1, nazywa się localhost.
Rekord SOA jest początkiem wszystkich plików stref. W każdym pliku
musi być dokładnie jeden, jako pierwszy rekord. Opisuje strefę, z której
pochodzi (z maszyny nazwanej ns.linux.bogus), osobę, która jest
za nią odpowiedzialna (hostmaster@linux.bogus), wersję pliku strefy
(numer seryjny: 1) i inne rzeczy mające związek z zapamiętywaniem (caching)
i drugorzędnymi (secondary) serwerami DNS. Dla reszty pól: odświeżenia,
powtórzenia, przedawnienia i minimalnego TTL użycie wartości podanych w tym
HOWTO powinno być bezpieczne.
Teraz uruchom ponownie named'a (komendą ndc restart)
i użyj nslookup, żeby sprawdzić, co zrobiłeś:
$ nslookup
Default Server: localhost
Address: 127.0.0.1
> 127.0.0.1
Server: localhost
Address: 127.0.0.1
Name: localhost
Address: 127.0.0.1
a więc udaje mu się otrzymać localhost ze 127.0.0.1, to dobrze.
Teraz nasze główne zadanie, domena linux.bogus. Wstaw nową sekcję
,,zone'' w pliku named.conf:
zone "linux.bogus" {
notify no;
type master;
file "pz/linux.bogus";
};
Zauważ dalszy brak kończącej kropki w nazwie domeny w pliku
named.conf.
W pliku strefy linux.bogus umieścimy pewne całkowicie bzdurne (bogus) dane:
;
; Plik strefy dla linux.bogus
;
; Pełny plik strefy
;
@ IN SOA ns.linux.bogus. hostmaster.linux.bogus. (
199802151 ; numer seryjny, dzisiejsza data i numer zmiany
8H ; odświeżanie, w sekundach
2H ; powtórzenie, w sekundach
1W ; przedawnienie, w sekundach
1D ) ; minimum, w sekundach
;
NS ns ; Adres Internetowy serwera nazw
MX 10 mail.linux.bogus ; Podstawowy serwer poczty
MX 20 mail.friend.bogus. ; Drugorzędny serwer poczty
;
localhost A 127.0.0.1
ns A 192.168.196.2
mail A 192.168.196.4
Należy zwrócić uwagę na dwie rzeczy w rekordzie SOA. ns.linux.bogus musi być prawdziwą maszyna z rekordem A. Nie jest dozwolone wpisaanie rekordu CNAME dla maszyny w rekordzie SOA. Jej nazwą nie musi być ,,ns'', może być jakąkolwiek dozwoloną nazwą komputera. Po drugie, hostmaster.linux.bogus powinien być odczytany jako hostmaster@linux.bogus, a powinien być to alias pocztowy lub oddzielna skrzynka, gdzie osoba(y) nadzorujące DNS powinny często czytać pocztę. Jakikolwiek list w sprawie domeny będzie wysłany na adres podany w tej linii. Nazwą nie musi być ,,hostmaster'', może to być jakikolwiek dozwolony adres e-mail, ale adres ,,hostmaster'' będzie również działał.
Jest jeden nowy typ RR w tym pliku, MX czyli Mail eXchanger.
Mówi systemom pocztowym gdzie wysyłać pocztę zaadresowaną do
ktośtam@linux.bogus, odpowiednio do mail.linux.bogus lub
mail.friend.bogus. Liczba przed każdą nazwą maszyny oznacza
priorytet MX'ów. RR z najmniejszą liczbą (10) jest tym, do którego poczta
powinna być wysyłana najpierw. Jeżeli to się nie uda, może być wysłana do
serwera z wyższą liczbą, drugorzędnego serwera poczty, np.
mail.friend.bogus, który ma tu priorytet 20.
Uruchom ponownie named, używając komendy ndc restart. Sprawdź wynik
z nslookup:
$ nslookup
> set q=any
> linux.bogus
Server: localhost
Address: 127.0.0.1
linux.bogus
origin = ns.linux.bogus
mail addr = hostmaster.linux.bogus
serial = 199802151
refresh = 28800 (8 hours)
retry = 7200 (2 hours)
expire = 604800 (7 days)
minimum ttl = 86400 (1 day)
linux.bogus nameserver = ns.linux.bogus
linux.bogus preference = 10, mail exchanger = mail.linux.bogus.linux.bogus
linux.bogus preference = 20, mail exchanger = mail.friend.bogus
linux.bogus nameserver = ns.linux.bogus
ns.linux.bogus internet address = 192.168.196.2
mail.linux.bogus internet address = 192.168.196.4
Przy dokładnym sprawdzaniu, odkryjesz błąd. Linia
linux.bogus preference = 10, mail exchanger = mail.linux.bogus.linux.bogus
jest niepoprawna. Powinno być
linux.bogus preference = 10, mail exchanger = mail.linux.bogus
Specjalnie popełniłem błąd, żebyś mógł się z niego uczyć :-) Patrząc na plik strefy zobaczymy, że w linii
MX 10 mail.linux.bogus ; Podstawowy serwer poczty
brakuje kropki. Można też powiedzieć, że ma o jeden człon ,,linux.bogus'' za
dużo. Jeżeli nazwa komputera nie kończy się kropką w pliku strefy, pochodzenie
(origin) zostaje dodane do niej, powodując podwójny
linux.bogus.linux.bogus. Więc piszemy albo
MX 10 mail.linux.bogus. ; Podstawowy serwer poczty
albo
MX 10 mail ; Podstawowy serwer poczty
Oba są poprawne. Wolę ostatnią formę, mniej pisania. Są znani użytkownicy bind'a którzy nie zgadzają się z tym, są też tacy, którzy zgadzają się z tą regułą. W pliku strefy domena powinna bądź to być całkowita i zakończona kropką, bądź to nie powinna być wogóle załączona, w tym przypadku zawiera domyślne pochodzenie (origin).
Muszę zaznaczyć, że w pliku named.conf nie powinno być kropek po
nazwach domen. Nie masz pojęcia, jak często ludzie głupieli i klęli na czym
świat stoi z powodu znaku ,,.''.
A więc po wyjaśnieniu mojej uwagi, mamy nowy plik strefy, zawierający trochę dodatkowych informacji:
;
; Plik strefy dla linux.bogus
;
; Pełny plik strefy
;
@ IN SOA ns.linux.bogus. hostmaster.linux.bogus. (
199802151 ; numer seryjny, dzisiejsza data + numer zmiany
8H ; odświeżanie, w sekundach
2H ; powtórzenie, w sekundach
1W ; przedawnienie, w sekundach
1D ) ; minimum, w sekundach
;
TXT "Linux.Bogus, twoi konsultanci DNS"
NS ns ; Adresy Internetowe serwerów nazw
NS ns.friend.bogus.
MX 10 mail ; Podstawowy MX
MX 20 mail.friend.bogus. ; Drugorzędny MX
localhost A 127.0.0.1
gw A 192.168.196.1
HINFO "Cisco" "IOS"
TXT "Router"
ns A 192.168.196.2
MX 10 mail
MX 20 mail.friend.bogus.
HINFO "Pentium" "Linux 2.0"
www CNAME ns
donald A 192.168.196.3
MX 10 mail
MX 20 mail.friend.bogus.
HINFO "i486" "Linux 2.0"
TXT "DEK"
mail A 192.168.196.4
MX 10 mail
MX 20 mail.friend.bogus.
HINFO "386sx" "Linux 1.2"
ftp A 192.168.196.5
MX 10 mail
MX 20 mail.friend.bogus.
HINFO "P6" "Linux 2.1.86"
Jest tu kilka nowych RR'ów: HINFO (Host INFOrmation) ma dwie części, dobrym zwyczajem jest branie każdej w cudzysłowy. Pierwsza część określa nazwę sprzętową lub procesor komputera, a druga oprogramowanie lub system operacyjny. Maszyna nazwana ,,ns'' ma procesor Pentium i Linuxa 2.0. CNAME (Canonical NAME) jest sposobem nadawania każdej maszynie kilku nazw. Www jest więc aliasem ns.
Używanie rekordów CNAME jest trochę kontrowesyjne. Ale bezpiecznie jest przestrzegać zasady, że rekordy MX, CNAME lub SOA nigdy nie powinny odnosić się do rekordu CNAME, powinny odnosić się do czegoś z rekordem A, więc źle jest
foobar CNAME www ; NIE!
ale poprawnie
foobar CNAME ns ; Tak!
Jest też bezpiecznie przyjąć, że CNAME nie jest dozwoloną nazwą komputera
dla adresu e-mail: webmaster@www.linux.bogus jest niedozwolonym
adresem, jeżeli przyjąć powyższe ustawienia. Możesz się spodziewać, że
wielu adminów Gdzieś Tam będzie wymagało tej zasady, nawet jeśli to działa
u ciebie. Sposobem uniknięcia tego jest używanie rekordów A (i może innych,
takich jak MX) zamiast CNAME:
www A 192.168.196.2
Kilku ,,czarodziejów'' bind'a radzi, aby nie używać CNAME. Zastanów się więc nad tym bardzo poważnie.
Ale jak widzisz, to HOWTO i wiele serwerów nie przestrzega tej zasady.
Załaduj nową bazę danych komendą ndc reload, sprawi to, że named
przeczyta ponownie swoje pliki.
$ nslookup
Default Server: localhost
Address: 127.0.0.1
> ls -d linux.bogus
Znaczy to, że wszystkie rekordy powinny być wymienione. Wyświetli:
[localhost]
$ORIGIN linux.bogus.
@ 1D IN SOA ns hostmaster (
199802151 ; numer seryjny
8H ; odświeżanie
2H ; powtórzenie
1W ; przedawnienie
1D ) ; minimum
1D IN NS ns
1D IN NS ns.friend.bogus.
1D IN TXT "Linux.Bogus, twoi konsultanci DNS"
1D IN MX 10 mail
1D IN MX 20 mail.friend.bogus.
gw 1D IN A 192.168.196.1
1D IN HINFO "Cisco" "IOS"
1D IN TXT "Router"
mail 1D IN A 192.168.196.4
1D IN MX 10 mail
1D IN MX 20 mail.friend.bogus.
1D IN HINFO "386sx" "Linux 1.0.9"
localhost 1D IN A 127.0.0.1
www 1D IN CNAME ns
donald 1D IN A 192.168.196.3
1D IN MX 10 mail
1D IN MX 20 mail.friend.bogus.
1D IN HINFO "i486" "Linux 1.2"
1D IN TXT "DEK"
ftp 1D IN A 192.168.196.5
1D IN MX 10 mail
1D IN MX 20 mail.friend.bogus.
1D IN HINFO "P6" "Linux 1.3.59"
ns 1D IN A 192.168.196.2
1D IN MX 10 mail
1D IN MX 20 mail.friend.bogus.
1D IN HINFO "Pentium" "Linux 1.2"
@ 1D IN SOA ns hostmaster (
199802151 ; numer seryjny
8H ; odświeżanie
2H ; powtórzenie
1W ; przedawnienie
1D ) ; minimum
To jest w porządku. Jak widzisz, wygląda prawie jak plik strefy. Sprawdźmy co powie o samym www:
> set q=any
> www.linux.bogus.
Server: localhost
Address: 127.0.0.1
www.linux.bogus canonical name = ns.linux.bogus
linux.bogus nameserver = ns.linux.bogus
linux.bogus nameserver = ns.friend.bogus
ns.linux.bogus internet address = 192.168.196.2
Inaczej mówiąc, prawdziwa nazwa www.linux.bogus to
ns.linux.bogus. Daje ci to też trochę informacji, które ma o ns,
wystarczjąco dużo, żeby się z nim połączyć, jeżeli byłbyś programem.
Jesteśmy w połowie drogi.
Teraz programy mogą konwertować nazwy w linux.bogus na adresy, z którymi mogą się połączyć. Ale potrzebna jest też strefa odwrotna, która pozwala DNS'owi przekształcać adresy na nazwy (FTP, IRC, WWW i inne), żeby zdecydować, czy chcą z tobą rozmawiać, czy nie, a jeżeli tak, może nawet zdecydują jaki priorytet powinien być ci nadany. Strefa odwrotna jest wymagana dla pełnego dostępu do wszystkich usług Internetu.
Wstaw następujące linie w named.conf:
zone "196.168.192.in-addr.arpa" {
notify no;
type master;
file "pz/192.168.196";
};
Tak samo jak z 0.0.127.in-addr.arpa, zawartość także jest podobna:
@ IN SOA ns.linux.bogus. hostmaster.linux.bogus. (
199802151 ; Numer seryjny, data + numer
8H ; odświeżanie
2H ; powtarzanie
1W ; przedawnienie
1D) ; minimalny TTL
NS ns.linux.bogus.
1 PTR gw.linux.bogus.
2 PTR ns.linux.bogus.
3 PTR donald.linux.bogus.
4 PTR mail.linux.bogus.
5 PTR donald.linux.bogus.
Teraz uruchom ponownie named (ndc restart) i sprawdź swoją pracę
znowu korzystając z nslookup:
> 192.168.196.4 Server: localhost Address: 127.0.0.1 Name: mail.linux.bogus Address: 192.168.196.4
Wygląda w porządku, spróbuj wyświetlić wszystko, żeby to sprawdzić:
> ls -d 196.168.192.in-addr.arpa
[localhost]
$ORIGIN 196.168.192.in-addr.arpa.
@ 1D IN SOA ns.linux.bogus. hostmaster.linux.bogus. (
199802151 ; serial
8H ; refresh
2H ; retry
1W ; expiry
1D ) ; minimum
1D IN NS ns.linux.bogus.
1 1D IN PTR gw.linux.bogus.
2 1D IN PTR ns.linux.bogus.
3 1D IN PTR donald.linux.bogus.
4 1D IN PTR mail.linux.bogus.
5 1D IN PTR donald.linux.bogus.
@ 1D IN SOA ns.linux.bogus. hostmaster.linux.bogus. (
199802151 ; numer seryjny
8H ; odświeżanie
2H ; powtarzanie
1W ; przedawnienie
1D ) ; minimum
Wygląda dobrze!
Jest kilka rzeczy, które powinienem tu dodać. Numery IP używane w przykładach
pochodzą z jednego z bloków ,,sieci prywatnych'', tzn. nie wolno używać ich
publicznie w internecie. Są bezpieczne do pokazania jako przykład w HOWTO.
Druga rzecz, to linia notify no;. Mówi named, żeby nie zawiadamiać
serwera drugorzędnego (secondary, slave), kiedy jeden z plików stref zostanie
uaktualniony. W bind'dzie-8 named może zawiadamiać inne serwery wymienione
w rekordach NS w pliku strefy, kiedy strefa zostanie uaktualniona. Jest to
przydatne do użytku zwykłego, ale dla prywatnych eksperymentów ze strefami
ta opcja powinna być wyłączona, nie chcemy przecież chyba, żeby nasz
eksperyment zaśmiecał Internet, czyż nie tak?
No i oczywiście ta domena jest nieprawdziwa (bogus) i takie też są wszystkie adresy w niej. Zobacz następny rozdział dla przykładu z prawdziwą domeną.
Tutaj opisujemy trochę prawdziwych plików stref.
Użytkownicy zasugerowali, żebym załączył prawdziwy przykład działającej domeny razem z teoretycznym przykładem.
Używam tego przykładu z zezwoleniem Davida Bullock'a z LAND-5. Te pliki były aktualne 24 Września 1996 i zostały zmienione przeze mnie, żeby pasowały do formatu bind-8, używają też moich rozszerzeń. A więc, to co tu widzisz różni się trochę od tego, co otrzymasz po wysłaniu zapytania do serwerów nazw LAND-5 obecnie.
Tutaj znajdziemy linie główne dla dwóch potrzebnych stref odwrotnych:
sieci 127.0.0, jak i sieci 206.6.177 należącej do LAND-5, oraz
linię primary dla przedniej strefy land-5.com. Zauważ także, że zamiast
umieszczać pliki w katalogu o nazwie pz, jak robię to w tym HOWTO,
znajdują się one w katalogu zone (strefa).
// Plik ładujący dla serwera nazw LAND-5
options {
directory "/var/named";
};
zone "." {
type hint;
file "root.hints";
};
zone "0.0.127.in-addr.arpa" {
type master;
file "zone/127.0.0";
};
zone "land-5.com" {
type master;
file "zone/land-5.com";
};
zone "177.6.206.in-addr.arpa" {
type master;
file "zone/206.6.177";
};
Jeżeli wstawisz to do swojego named.conf, żeby się pobawić, PROSZĘ,
wstaw notify no; w sekcji stref dla dwóch stref land-5, żeby uniknąć
wypadków.
Pamiętaj, że ten plik zmienia się, a ten jest stary. Powinieneś używać nowszego pliku wyprodukowanego używając dig, będzie to wytłumaczone później. (UWAGA: autor napisał, że było to wytłumaczone wcześniej, ale jest to wytłumaczone PÓŹNIEJ - przyp. tłum.)
; <<>> DiG 8.1 <<>> @A.ROOT-SERVERS.NET. ; (1 server found) ;; res options: init recurs defnam dnsrch ;; got answer: ;; ->>HEADER<<- opCODE: QUERY, status: NOERROR, id: 10 ;; flags: qr aa rd; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 13 ;; QUERY SECTION: ;; ., type = NS, class = IN ;; ANSWER SECTION: . 6D IN NS G.ROOT-SERVERS.NET. . 6D IN NS J.ROOT-SERVERS.NET. . 6D IN NS K.ROOT-SERVERS.NET. . 6D IN NS L.ROOT-SERVERS.NET. . 6D IN NS M.ROOT-SERVERS.NET. . 6D IN NS A.ROOT-SERVERS.NET. . 6D IN NS H.ROOT-SERVERS.NET. . 6D IN NS B.ROOT-SERVERS.NET. . 6D IN NS C.ROOT-SERVERS.NET. . 6D IN NS D.ROOT-SERVERS.NET. . 6D IN NS E.ROOT-SERVERS.NET. . 6D IN NS I.ROOT-SERVERS.NET. . 6D IN NS F.ROOT-SERVERS.NET. ;; ADDITIONAL SECTION: G.ROOT-SERVERS.NET. 5w6d16h IN A 192.112.36.4 J.ROOT-SERVERS.NET. 5w6d16h IN A 198.41.0.10 K.ROOT-SERVERS.NET. 5w6d16h IN A 193.0.14.129 L.ROOT-SERVERS.NET. 5w6d16h IN A 198.32.64.12 M.ROOT-SERVERS.NET. 5w6d16h IN A 202.12.27.33 A.ROOT-SERVERS.NET. 5w6d16h IN A 198.41.0.4 H.ROOT-SERVERS.NET. 5w6d16h IN A 128.63.2.53 B.ROOT-SERVERS.NET. 5w6d16h IN A 128.9.0.107 C.ROOT-SERVERS.NET. 5w6d16h IN A 192.33.4.12 D.ROOT-SERVERS.NET. 5w6d16h IN A 128.8.10.90 E.ROOT-SERVERS.NET. 5w6d16h IN A 192.203.230.10 I.ROOT-SERVERS.NET. 5w6d16h IN A 192.36.148.17 F.ROOT-SERVERS.NET. 5w6d16h IN A 192.5.5.241 ;; Total query time: 215 msec ;; FROM: roke.uio.no to SERVER: A.ROOT-SERVERS.NET. 198.41.0.4 ;; WHEN: Sun Feb 15 01:22:51 1998 ;; MSG SIZE sent: 17 rcvd: 436
Tylko podstawy, obowiązujący rekord SOA i rekord, który mapuje 127.0.0.1 na
localhost. Oba są wymagane. Nic więcej nie powinno znajdować się w tym
pliku. Prawdopodobnie nigdy nie będzie musiał być uaktualniany, chyba że
twój serwer nazw lub hostmaster zmienią adres.
@ IN SOA land-5.com. root.land-5.com. (
199609203 ; Serial
28800 ; Refresh
7200 ; Retry
604800 ; Expire
86400) ; Minimum TTL
NS land-5.com.
1 PTR localhost.
Widzimy tu obowiązujący rekord SOA i potrzebne rekordy NS. Możemy zobaczyć, że drugorzędny serwer nazw ma adres ns2.psi.net. Jest tak, jak powinno być, zawsze musi być drugorzędny serwer w innym miejscu Internetu. Jest tu komputer główny o nazwie land-5, który zajmuje się wieloma różnymi usługami Internetowymi, jest to załatwione za pomocą rekordów CNAME (alternatywnie można używać rekordów A).
Jak widzidsz z rekordu SOA, plik strefy pochodzi z land-5.com, osobą kontaktową
jest root@land-5.com. hostmaster jest innym często używanym adresem.
Numer seryjny składa się z daty w formacie yyyymmdd i dziennego numeru
seryjnego; jest to prawdopodobnie szósta wersja pliku strefy z 20 Września
1996. Pamiętaj, że numer seryjny musi zwiększać się monotonicznie,
tutaj jest tylko jedna cyfra numeru seryjnego, więc po 9 zmianach
trzeba czekać do następnego dnia z następnymi edycjami. Rozważ użycie dwóch
cyfr.
@ IN SOA land-5.com. root.land-5.com. (
199609206 ; serial, todays date + todays serial #
8H ; refresh, seconds
2H ; retry, seconds
1W ; expire, seconds
1D ) ; minimum, seconds
NS land-5.com.
NS ns2.psi.net.
MX 10 land-5.com. ; Primary Mail Exchanger
localhost A 127.0.0.1
router A 206.6.177.1
land-5.com. A 206.6.177.2
ns A 206.6.177.3
www A 207.159.141.192
ftp CNAME land-5.com.
mail CNAME land-5.com.
news CNAME land-5.com.
funn A 206.6.177.2
@ TXT "LAND-5 Corporation"
;
; Workstations
;
ws-177200 A 206.6.177.200
MX 10 land-5.com. ; Primary Mail Host
ws-177201 A 206.6.177.201
MX 10 land-5.com. ; Primary Mail Host
ws-177202 A 206.6.177.202
MX 10 land-5.com. ; Primary Mail Host
ws-177203 A 206.6.177.203
MX 10 land-5.com. ; Primary Mail Host
ws-177204 A 206.6.177.204
MX 10 land-5.com. ; Primary Mail Host
ws-177205 A 206.6.177.205
MX 10 land-5.com. ; Primary Mail Host
; {Many repetitive definitions deleted - SNIP}
ws-177250 A 206.6.177.250
MX 10 land-5.com. ; Primary Mail Host
ws-177251 A 206.6.177.251
MX 10 land-5.com. ; Primary Mail Host
ws-177252 A 206.6.177.252
MX 10 land-5.com. ; Primary Mail Host
ws-177253 A 206.6.177.253
MX 10 land-5.com. ; Primary Mail Host
ws-177254 A 206.6.177.254
MX 10 land-5.com. ; Primary Mail Host
Jeżeli sprawdzisz serwer nazw land-5, zobaczysz, że nazwy komputerów
składają się z ws_numer. Późne wersje named'a w bind'dzie 4
zaczęły wymagać ograniczeń znaków składających się na nazwy komputerów.
A więc wogóle nie działałoby to z bind-8, zamieniłem ,,_'' na ,,-''.
Inna rzecz warta zauważenia to fakt, że stacje robocze nie mają własnych nazw, a raczej prefiks i dwie ostatnie części numeru IP. Używanie takiej konwencji może znacznie uprościć nadzór, ale jest trochę bezosobowe i może być źródłem niezadowolenia wśród twoich użytkowników.
Możemy także zobaczyć, że funn.land-5.com jest aliasem land-5.com, ale używającym rekordu A, a nie CNAME.
Skomentuję ten plik na jego końcu.
@ IN SOA land-5.com. root.land-5.com. (
199609206 ; Serial
28800 ; Refresh
7200 ; Retry
604800 ; Expire
86400) ; Minimum TTL
NS land-5.com.
NS ns2.psi.net.
;
; Servers
;
1 PTR router.land-5.com.
2 PTR land-5.com.
2 PTR funn.land-5.com.
;
; Workstations
;
200 PTR ws-177200.land-5.com.
201 PTR ws-177201.land-5.com.
202 PTR ws-177202.land-5.com.
203 PTR ws-177203.land-5.com.
204 PTR ws-177204.land-5.com.
205 PTR ws-177205.land-5.com.
; {Dużo powtarzających się rekordów - usunięto}
250 PTR ws-177250.land-5.com.
251 PTR ws-177251.land-5.com.
252 PTR ws-177252.land-5.com.
253 PTR ws-177253.land-5.com.
254 PTR ws-177254.land-5.com.
Strefa odwrotna jest kawałkiem ustawień wydającym się sprawiać najwięcej kłopotów. Jest używany do znalezienia nazwy komputera, jeżeli masz jego numer IP. Przykład: jesteś serwerem IRC i akceptujesz połączenia od klientów IRC. Jednakże jesteś serwerem norweskim, a więc chcesz akceptować połączenia tylko z Norwegii i innych krajów skandynawskich. Kiedy otrzymasz połączenie od klienta, biblioteka C jest w stanie przekazać ci numer IP łączącej się maszyny, ponieważ numer IP klienta jest zawarty we wszystkich pakietach przekazywanych przez sieć. Teraz możesz przywołać funkcję o nazwie gethostbyaddr, która szuka nazwy komputera z podanym numerem IP. Gethostbyaddr spyta serwer DNS, który wtedy przetrawersuje DNS, poszukując maszyny. Przyjmijmy, że połączenie nadeszło z ws-177200.land-5.com. Numer IP podany przez bibliotekę C serwerowi IRC to 206.6.177.200. Żeby poznać nazwę tej maszyny, musimy znaleźć 200.177.6.206.in-addr.arpa. Serwer DNS najpierw odwróci ścieżkę przez 206, potem przez 6, aż w końcu znajdzie serwer dla strefy 177.6.206.in-addr.arpa na land-5, z którego na końcu dostanie odpowiedź, że dla 200.177.6.206.in-addr.arpa mamy rekord ,,PTR ws-177200.land-5.com'', który znaczy, że nazwa 206.6.177.20 to ws-177200.land-5.com. Tak jak z wyjaśnieniem, jak zostaje znaleziony prep.ai.mit.edu, jest to trochę fikcyjne.
Wracając do przykładu serwera IRC. Serwer IRC akceptuje połączenia tylko z krajów skandynawskich, tj. *.no, *.se, *.dk. Od razu widać, że nazwa ws-177200.land-5.com nie pasuje do żadnego z nich, a więc serwer odmówi połączenia. Jeżeli nie było mapowania odwrotnego dla 206.6.177.200 przez strefę in-addr.arpa, serwer nie mógłby znaleźć nazwy i porównałby 206.6.177.200 z *.no, *.se i *.dk, oczywiście żadna z nich nie będzie pasowała.
Niektórzy ludzie będą mówili ci, że odwrotne mapowanie jest ważne tylko dla serwerów, albo wogóle nie ważne. Nie zawsze: wiele serwerów ftp, news, IRC i nawet niektóre http (WWW) nie będą akceptowały połączeń z maszyn, których nazw nie będą w stanie znaleźć. A więc mapowanie odwrotne jest obowiązkowe.
Utrzymywanie w ciągłym działaniu
Jest jedno zadanie nadzorcze, które musisz wykonywać z named'ami, inne niż
utrzymywanie ich w działaniu, tzn. uaktualnianie pliku root.hints.
Najłatwiej jest to zrobić używając dig'a. Najpierw uruchom dig bez żadnych
argumentów, otrzymasz zawartość pliku root.hints zgodnie ze swoim
własnym serwerem. Wtedy spytaj jeden z wymienionych serwerów głównych komendą
dig @rootserver. Zauważysz, że to co otrzymasz będzie bardzo podobne
do pliku root.hints. Zapisz to do pliku
(dig @e.root-servers.net . ns >root.hints.new) i zamień na niego
stary plik root.hints.
Pamiętaj, żeby uruchomić ponownie named po zamianie pliku cache.
Al Longyear wysłał mi ten skrypt. Może on być uruchamiany automatycznie
w celu uaktualniania root.hints. Dodaj wpis do tablicy cron'a,
żeby był uruchamiany raz na miesiąc. Ten skrypt przyjmuje, że masz działający
system
pocztowy i zdefniowany alias pocztowy ,,hostmaster''. Musisz zagłębić się
w ten plik, żeby dostosować go do twoich ustawień.
#!/bin/sh # # Uaktualnianie pliku cache raz na miesiąc. # Ten skrypt jest uruchamiany automatycznie przez cron'a. # ( echo "To: hostmaster <hostmaster>" echo "From: system <root>" echo "Subject: Automatyczne uaktualnienie pliku named.conf" echo export PATH=/sbin:/usr/sbin:/bin:/usr/bin: cd /var/named dig @rs.internic.net . ns >root.hints.new echo "Plik named.conf został uaktualniony i zawiera następujące informacje:" echo cat root.hints.new chown root.root root.hints.new chmod 444 root.hints.new rm -f root.hints.old mv root.hints root.hints.old mv root.hints.new root.hints ndc restart echo echo "Serwer nazw został uruchomiony ponownie, aby wprowadzić zmiany" echo "Poprzedni plik nazywa się teraz /var/named/root.hints.old." ) 2>&1 | /usr/lib/sendmail -t exit 0
Niektórzy z was mogli zauważyć, że plik root.hints jest też dostępny przez ftp z Internic'u. Proszę, nie używaj ftp do uaktualniania root.hints, powyższa metoda jest o wiele bardziej przyjazna dla sieci.
Poprzednio była to sekcja o używaniu bind'a 8 napisana przez David'a E. Smith'a (dave@bureau42.ml.org). Trochę ją zmieniłem, żeby pasowała do nowej nazwy sekcji.
Nie ma tego wiele. Poza używaniem named.conf zamiast named.boot, wszystko jest identyczne. Bind-8 jest dostarczany ze skryptem konwertującym pliki w ,,starym stylu'' na nowe. Przykładowy named.conf (stary) dla serwera cache:
directory /var/named cache . root.hints primary 0.0.127.IN-ADDR.ARPA 127.0.0.zone primary localhost localhost.zone
W linii komend, w katalogu bind8/src/bin/named (Przyjmuję, że masz dystrybucję źródłową. Jeżeli masz paczkę z binariami skrypt też gdzieś musi być, jednakże nie jestem pewien gdzie. -ed.), napisz:
./named-bootconf.pl < named.conf > named.conf
Co stworzy named.conf:
// generated by named-bootconf.pl
options {
directory "/var/named";
};
zone "." {
type hint;
file "root.hints";
};
zone "0.0.127.IN-ADDR.ARPA" {
type master;
file "127.0.0.zone";
};
zone "localhost" {
type master;
file "localhost.zone";
};
Metoda ta konwertuje wszystko, co można wpisać do named.conf, jednakże nie dodaje żadnych nowych rozszerzeń i opcji konfiguracji, które można uzyskać w bind-8. Oto bardziej kompletny named.conf, który robi te same rzeczy, ale trochę bardziej sprawnie.
// To jest plik konfiguracyjny named (bind-8 lub późniejszy)
// Powinien być zainstalowany jako /etc/named.conf.
// Jedyna zmiana pliku ,,fabrycznego'' (poza tym komentarzem :))
// to odkomentowanie linii directory, ponieważ mam już pliki stref
// w /var/named.
options {
directory "/var/named";
check-names master warn; /* domyślne. */
datasize 20M;
};
zone "localhost" IN {
type master;
file "localhost.zone";
check-names fail;
allow-update { none; };
allow-transfer { any; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "127.0.0.zone";
check-names fail;
allow-update { none; };
allow-transfer { any; };
};
zone "." IN {
type hint;
file "root.hints";
};
bind8/src/bin/named/test ma ten plik oraz kopie plików stref, które wiele ludzi może skopiować i od razu używać.
Formaty plików stref i root.hints są identyczne, tak jak komendy ich uaktualniania.
W tej sekcji wymienię kilka spośród najczęściej zadawanych pytań związanych z DNS'em i tym HOWTO, oraz odpowiedzi na nie. :-) Przeczytaj tą sekcję przed wysłaniem do mnie listu.
Czytasz złe HOWTO. Przeczytaj starą wersję tego dokumentu, która opisuje bind 4, na http://www.math.uio.no/~janl/DNS/.
Kilka podpowiedzi: ,,forwarders'', ,,slave'' oraz spojrzenie na listę literatury na końcu tego HOWTO.
Utwórz kilka rekordów A dla www.zajęty.serwer i użyj bind'a 4.9.3 lub późniejszego. Wtedy bind będzie pokolei przełączał adresy. Nie będzie to działać z wcześniejszymi wersjami bind'a.
Nie zakładaj pliku root.hints, tylko pliki stref. To znaczy także, że nie będziesz musiał uaktualniać tego pliku.
Jeżeli podstawowy (primary) serwer ma adres 127.0.0.1 wstaw następującą linię w named.conf drugorzędnego serwera:
zone "linux.bogus" {
type slave;
file "sz/linux.bogus";
masters { 127.0.0.1; };
};
Możesz wymienić kilka alternatywnych serwerów głównych, z których
strefa może być kopiowana w liście masters, oddzielone przez ,,;''.
Otrzymałem taki list od Ian'a Clark'a <ic@deakin.edu.au>, gdzie wyjaśnia on jego sposób dokonania tego:
Uruchamiam named na mojej ,,maskującej się'' maszynie. Mam dwa pliki
root.hints, jeden nazywa się root.hints.real i zawiera prawdziwe nazwy serwerów
nazw głównych, oraz drugi, root.hints.fake, który zawiera...
----
; root.hints.fake
; ten plik nie zawiera żadnych informacji
----
Kiedy rozłączam się, kopiuję root.hints.fake do root.hints i uruchamiam
named ponownie.
Kiedy łączę się, kopiuję root.hints.real do root.hints i restartuję named.
To jest wykonywane odpowiednio przez ip-down i ip-up.
Pierwszy raz, kiedy przeprowadzam zapytanie off-line o nazwę domeny, named
nie ma szczegółów, a więc wstawia taki komunikat w pliku messgaes:
Jan 28 20:10:11 hazchem named[10147]: No root nameserver for class IN
z czym można żyć.
U mnie to działa. Mogę używać serwera nazw dla maszyn lokalnych bez opóźnienia,
jak w przypadku zewnętrznych nazw domen, a kiedy jestem w sieci, zapytania
o zewnętrzne domeny funkcjonują normalnie.
Pamięć podręczna jest zapamiętywana całkowicie w pamięci, nie jest zapisywana na dysk. Za każdym razem kiedy zabijesz named cache będzie stracony. Cache nie daje się w żaden sposób kontrolować. Named zarządza nim zgodnie z pewnymi prostymi zasadami i nie da się tego ominąć. Nie możesz kontrolować cache'u ani jego rozmiaru w żaden sposób i z żadnego powodu. Jeżeli chcesz, możesz ,,naprawić'' to zmieniając kod named. Jednakże nie jest to zalecane.
Nie, named nie zapisuje pamięci podręcznej kiedy umiera. Znaczy to, że cache musi być zbudowany od nowa za każdym razem, kiedy zabijasz i uruchamiasz named ponownie. Nie ma sposobu, żeby zmusić go do zapisywania cache'u w pliku. Jeżeli chcesz, możesz to ,,naprawić'' zmieniając kod named. Nie jest to jednak zalecane.
Dokumentacja i narzędzia
Prawdziwa Dokumentacja istnieje. Online i drukowana. Przeczytanie kilku z tych publikacji jest wymagane, żeby zrobić krok od małoetatowego do pełnoetatowego administratora DNS. W druku, standardową książką jest DNS i BIND, autorstwa C. Liu i P. Albitz'a, wydawnictwa O'Reilly & Associates, Sebastopol, CA, ISBN 0-937175-82-X. Czytałem ją, jest świetna. Jest też sekcja o DNS w książce TCP/IP - Administracja sieci, autorstwa Craig'a Hunt'a z wydawnictwa O'Reilly..., ISBN 0-937175-82-X. Inna książka koniecznie do przeczytania przez dobrego admina DNS (lub kogokowiek dobrego z tej branży) jest Zen i Sztuka Naprawy Motocykli Roberta M. Prisiga, :-) dostępne pod ISBN 0688052304 i inne.
Online znajdziesz różne rzeczy na http://www.dns.net/dnsrd/, http://www.isc.org/bind.html; FAQ, podręcznik (BOG - Bind Operators Guide), specyfikacje i definicje protokołów, oraz sztuczki DNS (te, i wiele, jeżeli nie wszystkie RFC wspomniane poniżej, także znajdują się w dystrybucji bind'a). Nie czytałem większości z nich, ale przez to nie jestem pełnoetatowym administratorem DNS. Natomiast Arnt Gulbrandsen przeczytał BOG i bardzo mu się on spodobał :-). Jest też grupa news news://comp.protocols.tcp-ip.domains o DNS. Dodatkowo, jest też trochę RFC o DNS'ie, najważniejsze są prawdopodobnie te:
A. Gulbrandsen, P. Vixie, A DNS RR for specifying the location of services (DNS SRV), October 1996
Y. Rekhter, R. Moskowitz, D. Karrenberg, G. de Groot, E. Lear, Address Allocation for Private Internets, 02/29/1996.
D. Barr, Common DNS Operational and Configuration Errors, 02/28/1996.
B. Barr Errors in RFC 1912, jest on dostępny na http://www.cis.ohio-state.edu/~barr/rfc1912-errors.html
A. Romao, Tools for DNS debugging, 11/03/1994.
C. Farrell, M. Schulze, S. Pleitner, D. Baldoni, DNS Encoding of Geographical Location, 11/01/1994.
R. Ullmann, P. Mockapetris, L. Mamakos, C. Everhart, New DNS RR Definitions, 10/08/1990.
P. Mockapetris, Domain names - implementation and specification, 11/01/1987.
P. Mockapetris, Domain names - concepts and facilities, 11/01/1987.
M. Lottor, Domain administrators operations guide, 11/01/1987.
M. Stahl, Domain administrators guide, 11/01/1987.
C. Partridge, Mail routing and the domain system, 01/01/1986.
To jest druga wersja DNS-HOWTO. Pierwsza wersja, dotycząca bind'a 4 została
przetłumaczona przez Piotra Pogorzelskiego
<piotr.pogorzelski@ippt.gov.pl>. Prawa autorskie tłumaczenia
pierwszej
wersji należą właśnie do niego, a ponieważ ja przetłumaczyłem drugą wersję
od początku, prawa autorskie tłumaczenia drugiej wersji należą do mnie.
Wersja 2.1 jest znacznie poprawiona w stosunku do 2.0.
Jak zwykle, jeżeli znajdziesz jakieś błedy, daj mi znać.
doc-linux-pl-2002.06.14.orig/html/DNS49-HOWTO.pl.html 0100664 0001750 0001750 00000200135 06770264140 020343 0 ustar coven coven
Słowa kluczowe: DNS, bind, named, dialup, ppp, slip, Internet, domain, name, hosts, resolving
(C)opyright 1995 Nicolai Langfeldt. Do not modify without amending copyright, distribute freely but retain copyright message.
Chciałbym podziękować Arnt Gulbrandsen, który niezliczoną liczbę razy czytał ten dokumend dostarczając wielu pożytecznych sugestii. Dziękuję również ludziom, którzy przysłali swoje sugestie pocztą elektroniczną. Dziękuje. Pomogliście mi w pracy nad tym dokumentem.
Ten dokument nigdy nie będzie skończony, wszelkie uwagi (ogólne - nie dotyczące polskiej wersji tego dokumentu) proszę przesyłać autorowi. Czeka na uwagi o sukcesach i kłopotach, dzięki nim dokument stanie się pełniejszy i lepszy. Tak więc pieniądze, pytania/uwagi kierujcie na adres janl@ifi.uio.no. Jeśli wysyłacie pocztą elektroniczną, upewnijcie się, że adres zwrotny jest poprawny. Proszę, przed wysłaniem listu zapoznajcie się wcześniej z rodziałem FAQ dotyczącym najczęsciej pojawiających się pytań.
Ten dokument HOWTO jest dedykowany Anne Line Norheim. Pomimo, że prawdopodobnie nigdy go nie przeczyta.
Co tu znajdziecie, a czego nie.
Dla początkujących, DNS oznacza Domain NAme System, Zasady i programy umożliwiające odwzorowanie (zamianę) nazw symbolicznych nadawnych komuterom na odpowiadające imadresy IP. Niniejszy dokument przedstawia w jaki sposób stworzyć takie odwzrowanie wykorzystując do tego Linuxa. Wspomniane odwzorowanie to proste skojarzenie dwóch rzeczy, symbolicznej nazwy komputera np. ftp.linux.org z adresem IP tego komputera, 199.249.150.4.
DNS to jeden z bardziej niezauważalnych obszarów zarządzania siecią. Niniejszy dokument postara się wyjaśnić kilka pojęć. Opisuje w jaki sposób zestawić prosty serwer DNS. Rozpoczynając od podręzcnego serwera DNS aż do uruchomienia podstawowego serwera domeny. Bardziej skomplikowane konfiguracje mogą być opisane w rozdziale FAQ. Jeśli nie znajdziesz tam rozwiązania swoich problemów, musisz zapoznać się z Prawdziwą Dokumentacją. Później napiszę co to jest Prawdziwa dokumentacja the last chapter.
Zanim zaczeniesz działać musisz wpierw skonfigurować swój komputer,
tak abyć mógł łączyć się z niego i do niego za pomocą programu telnet,
oraz wykonywać inne różnego rodzaju połączenia sieciowe. W
szczególności powinieneś móc połączyć sie ze swoim komputerem wydając
polecenie telnet 127.0.0.1 (sprawdź to teraz!). Potrzebujesz
poprawnie skonfigurowanych plików /etc/host.conf (lub
/etc/nsswitch.conf), /etc/resolv.conf i
/etc/hosts ponieważ nie będę w tym dokumencie omawiał ich
funkcji. Jeśli nie masz potrzebnej konfiguracji sieciowej pomże ci
dokument NET-2-HOWTO. Przeczytaj go.
Jeśli korzystasz ze SLIPa lub PPP, muszą poprawnie działać. Jeśli tak nie jest przeczytaj PPP-HOWTO.
Kiedy mówię `twój komputer', to znaczy, że mam na myśli komputer na którym próbujesz uruchomić serwer DNS, a nie jakikolwiek inny komputer który może być pośrednio związany z działaniem sieci.
Zakładam, że nie znajdujesz się za żadną 'ścianą ogniową', która uniemożliwia komuniekację DNS ze światem zewnętrznym. Jeśli tak nie jest, będziesz potrzebował specjalnej konfiguracji, zapoznaj się z rozdziałem FAQ.
Serwowanie nazw pod systemem UNIX jest wykonywane przez program o
nazwie named. Jest to część pakietu bind, który prowadzi i którym
opiekuje się Paul Vixie z The Internet Software Consortium. Named
jest dostarczany przez większość dystrybucji Linuxa i zwykle można go
znaleźć w /usr/sbin/named. Jeśli jest on zainstalowany na
twoim komputerze, prawdopodobnie możesz z niego skorzystać, jeśli nie,
możesz zainstalować jego najnowszą wersje, którą znajdziesz w
ftp.vix.com:/pub/bind.
DNS jest ogólnosieciową bazą danych. Trzeba uważać co się do niej wkłada. Jeśłi włoży się śmiecie, ty i inni otrzymacie z niej śmiecie. Muszisz utrzymywać swoją część DNSu uporządkowaną i poprawną. Wtedy będzie ci dobrze służyć. Naucz się jak z niej korzystać, jak nią zarządzać, jak ją odpluskwiać, a staniesz się kolejnym dobrym administratorem zapobiegając przeciązenim sieci wywołanym jej złym zarządzaniem.
W tym dokumencie wypowiadam sądy o pewnych rzeczach, które nie są do końca prawdziwe (choć są co najmniej w połowie prawdziwe). Wszystko po to, aby zachować prostotę tego dokumentu. Jeśli mi uwierzysz wszystko powinno działać.
Wskazówka: Zrób kopie wszystkich plików, które każe zmienić, tak aby w przypadku niepowodzenia całej konfiguracji bys mógł wrócić do stanu pierwotnego.
Pierwszy etap konfiguracji DNS, pożyteczny dla osób łączących się z Internetem przez modem.
Podręczny serwer DNS znajdzie odpowiedzi na pytania o nazwy komputerów i zapamięta je, tak aby mógł natychmiast odpowiedzieć, gdy będziesz ich potrzebował ponownie.
Po pierwsze potrzebny jest plik /etc/named/.boot. Jest
czytany podczas uruchamiania programu named. W naszym przypadku
powienien po prostu zawierać:
; Plik startowy podręcznego serwera DSN ; directory /var/named ; ; rodzaj domena plik lub komputer źródłowy cache . root.cache primary 0.0.127.in-addr.arpa pz/127.0.0
BARDZO WAŻNE: W niektórych formatach tego dokumentu, zawartość wspomnianego pliku będzie poprzedzona kilkoma spacjami lub znakami tabulacji. Znaki te nie mogą znależć się w prawdzimym pliku konfiguracyjnym. Usuń wszelkie wiodące spacje w plikach utworzonych na podstawie tego dokumnetu (np przez kopiowanie fragmentów).
Wiersz z poleceniem `directory' wskazuje, gdzie program named
powienien szukać plików. Wszystkie podawane póżniej nazwy plików będą
nazwami względem tego katalogu.
/var/named jest właściwym miejscem, zgodnym ze Standardem
systemów plików w systemie Linux (FSS).
Plik o nazwie /var/named/root.cache powienien zawierać:
. 518400 NS D.ROOT-SERVERS.NET. . 518400 NS E.ROOT-SERVERS.NET. . 518400 NS I.ROOT-SERVERS.NET. . 518400 NS F.ROOT-SERVERS.NET. . 518400 NS G.ROOT-SERVERS.NET. . 518400 NS A.ROOT-SERVERS.NET. . 518400 NS H.ROOT-SERVERS.NET. . 518400 NS B.ROOT-SERVERS.NET. . 518400 NS C.ROOT-SERVERS.NET. ; D.ROOT-SERVERS.NET. 3600000 A 128.8.10.90 E.ROOT-SERVERS.NET. 3600000 A 192.203.230.10 I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17 F.ROOT-SERVERS.NET. 3600000 A 192.5.5.241 G.ROOT-SERVERS.NET. 3600000 A 192.112.36.4 A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4 H.ROOT-SERVERS.NET. 3600000 A 128.63.2.53 B.ROOT-SERVERS.NET. 3600000 A 128.9.0.107 C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12
Pamiętaj co mówiłem o wiodących odstępach!.
Plik określa główne serwery DNS na świecie. Ta informacja zmienia się z czasem i musi być poprawiana. Patrz Rozdziało utrzymaniu serwera, znajdziesz tam rady skąd uzyskiwać aktualne informacje. Jest to opisane na stronie podręcznika dotyczącej programu named, lecz IMHO nadaje się dla ludzi, którzy już rozumieją jak pracuje named.
Kolejny wiersz w named.boot zawiera słowo kłuczowe
primary. Później opiszę jego zadanie, teraz po prostu utwórz
w katalogu pz plik o nazwie 127.0.0 zawierający:
@ IN SOA linux.bogus. hostmaster.linux.bogus. (
1 ; Serial
28800 ; Refresh
7200 ; Retry
604800 ; Expire
86400) ; Minimum TTL
NS ns.linux.bogus.
1 PTR localhost.
Do tego potrzebujesz jeszcze plik /etc/resolv.conf, który
by wyglądał mniej więcej tak:
search poddomena.twoja.domena. twoja.domena nameserver 127.0.0.1
Wiersz `search' określa, które domeny powinny być
przeglądane w poszukiwaniu komputera z którym chcemy nawiązać
połączenie. Wiersz `nameserver' zawiera adres IP komputera,
serwera DNS, z którego może korzystać twój komputer. W tym przypadku
jest to twój komputer ponieważ to właśnie na nim chcesz uruchomić
program named. (Uwaga: Ten plik jest czytany przez procedury resolwera
biblioteki libc, program named nie zagląda do tego pliku.)
Mała ilustracja do czego służy ten plik: jeśli program otrzyma za
zadanie znalezienie adresu komputera foo, najpierw jest
sprawdzane czy istnieje komputer foo.poddomena.twoja.domena, a w
przypadku niepowodzenia następnie sprawda się foo.twoja.domena, a
na końcu foo. Jeśli należy znaleźć sunsite.unc.edu wpierw
sprawdza się istnienie sunsite.unc.edu.poddomena.twoja.domena
(tak, jest to glupie, ale tak musi być),
następnie sunsite.unc.edu.twoja.domena, a na końcu
sunsite.unc.edu. Możesz nie chcieć umieszczać w tym pliku zbyt
wielu domen, każde wyszukanie zajmuje trochę czasu.
W kolejnym przykładzie zakładamy, że należysz do domeny
poddomena.twoja.domena, twój komputer nowsi nazwę
twój-komputer.poddomena.twoja.domena. Wiersz z poleceniem search
nie powinien zawierać domeny najwyższego poziomu (TLD -Top Level
Domain) (a w Polsce domeny drugiego poziomu np. edu.pl,
/com.pl/). Jeśli bardzo często łączysz się z komputerami należącymi do
innej domeny, możesz ją dodać do wiersza z poleceniem search:
search poddomena.twoja.domena. inna-domena.com.pl.
itd. Oczywiście należy wpisać istniejące domeny. Zwróć uwagę na brak kropki kończącej nazwę domeny.
Następnie, zależnie od wersji biblioteki libc, której używasz
musisz poprawić albo plik /etc/nsswitch.conf lub
/etc/host.conf. Jeśli w twoim systemie już jest plik
/etc/nsswitch.conf to znaczy, że należy poprawić ten właśnie
plik, jęsli go nie ma, będziemy poprawiwać /etc/hosts.conf.
/etc/nsswitch.conf
To spory plik okreśłający skąd system ma pobierać różnego rodzaju
informacje, z których plików, lub sieciowychs baz danych. Zwykle
zawiera pomocne komentarze. Znajdź wiersz zaczywnający się słowem
`hosts:', powinien wyglądać następująco:
hosts: files dns
Jeśli nie ma wiersza zaczynającego się od `hosts', to dodaj
przedstawiony powyżej. Deiniuje on, że programy wpierw powinny
zajżeć do pliku /etc/hosts i dopiero w następnej
kolejności sprawdzać w DNSie, w sposób zgodny z wytycznymi
znajdującymi się w pliku /etc/resolv.conf.
/etc/host.conf
Prawdopodowbie zawiera kilkanaście wierszym jeden z nich powinien wyglądać następująco:
order hosts,bind
Jeśli nie ma wiersza rozpoczynającego się słowem order powinno
się taki dodać. Określa on sposób działania procedur rozwiązujących
nazwy komputerów, które w podanej konfiguracji wpierw sprawdzają plik
/etc/hosts , a następnie pytają serwer DNS (który jest
zdefiniowany w pliku /etc/resolv.conf jako 127.0.0.1). Te
pliki są dokładniej opisane na stronach podręcznika, można je
przeczytać pisząc `man 8 resolv (w większości dystrybucji
Linuxa). IMHO jest to całkiem zrozumiały tekst i powinien się z nim
zapoznać każdy administrator DNSu. Zrób to teraz, jeśli odłożysz to na
później, nigdy tego nie zrobisz.
Cect1>Uruchamianie programu named.
Przyszedł nareszcie czas uruchomic program named. Jeśli korzystasz
z połączenia dzwonionego, przed uruchomieniem programu zestaw
połaczenie. Nastepnie uruchom `ndc start' i wciśnij ENTER. Gdyby
powloka nie mogła znaleźć progrmu ndc, spróbuj `/usr/sbin/ndc
start'. Jeśli tam też nie ma tego programu zajżyj do rozdziału
FAQ.
Teraz możesz przetestować swoją konfigurację. Jeśli
podczas uruchamiania programu named będziesz podglądał plik dziennika
(zwykle tail -f /var/log/messages ) powinieneś zobaczyć
komunikaty podobne do tych poniżej:
Jun 30 21:50:55 roke named[2258]: starting. named 4.9.4-REL Sun Jun 30 21:29:03 MET DST 1996 janl@roke.slip.ifi.uio.no:/var/tmp/bind/named
Jun 30 21:50:55 roke named[2258]: cache zone "" loaded (serial 0)
Jun 30 21:50:55 roke named[2258]: primary zone "0.0.127.in-addr.arpa" loaded (serial 1)
Jeśli zobaczysz jakiekolwiek komunikaty o błędach, named wskaże
plik zawierający błąd (mam nadzieję, że named.boot lub named.cache
:-). Zabij proces named (ndc stop) i sprawdź wskazany plik.
$ nslookup
Default Server: localhost
Address: 127.0.0.1
>
Jeśli wyświetlone komunikaty są zbliżone do tych powyżej, to
znaczy, że wszystko działa. Mamy taką nadzieję. W każdym innym
przypadku musisz wrócić i sprawdzić raz jeszcze pliki konfiguracyjne.
Po każdej modyfikacji pliku /etc/named.boot musisz
zrestartować program wydając polecenie ndc restart.
Teraz możesz wydawać zapytania. Spróbuj odnaleźć komputer blisko
ciebie. pat.uio.no jest blisko mnie, Uniwersytet w Oslo:
> pat.uio.no
Server: localhost
Address: 127.0.0.1
Name: pat.uio.no
Address: 129.240.2.50
nslookup poprosił nameda o wyszukanie komputera
pat.uio.no. Named skontaktował się z jednym z serwerów
nazw wymienionych w pliku root.cache i tam rozpoczął swą
drogę. Zanim zobaczysz rezultat zapytania, może upłynąć całkiem spora
chwila, ponieważ named przeszukuje wszystkie domeny wymienione w pliku
/etc/resolv.conf/
Jeśli spróbujesz raz jeszcze otrzymasz taką odpowiedź:
> pat.uio.no
Server: localhost
Address: 127.0.0.1
Non-authoritative answer:
Name: pat.uio.no
Address: 129.240.2.50
Zwróć uwagę na frazę `Non-authoritative answer:'. Oznacza, że
tym razem named skorzystał ze swojej pamięci podręcznej i nie
przeszukiwał sieci w poszukiwaniu odpowiedzi na twoje pytanie. Lecz
informacja z pamięci podręcznej może być nieaktualna. Dlatetgo
jesteś informowany o tym (pomijalnym) niebezpieczeństwie właśnie
frazą `Non-authoritative answer:' (Odpwowiedź z nieautoryzowanego
źródła). Jeśli nslookup w taki sposób odpowie na drugie zapytanie
o ten sam komputer, jest to znak, że zapamiętuje odpowiedzi
przychodzące z sieci, a to znaczy, że działa poprawnie. Aby zakończyć
pracę z programem nslookup należy wydać polecenie exit.
Jeśli korzystasz z protokołów ppp, slip, zapoznaj się z rozdziałem FAQ<@@ref>autpo połączeniach modemowych, znajdziesz tam dla siebie kilka porad.
Teraz już wiesz jak skonfigurować podręczny serwer nazw (DNS). Polecam piwo, mleko lub inny ulubiony napój aby uczcić to wydarzenie.
Jak skonfigurować własną domenę.
Zanim naprawdę rozpoczniemy ten rozdział, mam zamiar
przedstawić ci trochę teorii na temat pracy DNSu. A ty to przeczytasz,
ponieważ jest to ci potrzebne. Jeśli ci się nie chce, powinieneś choć
zapoznać się z nim powierzchownie. Możesz przestać, gdy dojdziesz do
wyjaśnień, co należy umieścić w pliku named.boot.
DNS jest systemem hierarchicznym. Domena główna (najwyższego
poziomu) jest oznaczana kropką `.' i nazywana `root'. W domenie
. można znaleźć kilka "Domen najwyższego poziomu (TLD)" np. ORG, COM,
EDU czy NET. Lecz jest ich znacznie więcej. Gdy chcesz znaleźć adres
kompuera prep.ai.mit.edu twój serwer musi odnaleźć komputer
obsługujący domenę edu. Zadaje pytanie serwerowi domeny .
(serwery domeny . zna z pliku root.cache), otrzymuje listę
serwerów obsługujących domenę edu. Oto mała ilustracja:
$ nslookup
Default Server: localhost
Address: 127.0.0.1
rozpoczynamy od zapytania serwera domeny głównej
> server c.root-servers.net.
Default Server: c.root-servers.net
Address: 192.33.4.12
Ustawiamy rodzj zapytania: rekordy NS (adresy serwrów DNS)
> set q=ns
pytamy się o domenę edu.
> edu.
Kropka po słowie edu ma znaczenie, informuje serwer, że pytamy się o
edu, które jest bezpośrednio w domenie głównej, w ten sposób wyłączamy
z przeszukiwania domeny podane w pliku /etc/resolv.conf.
edu nameserver = A.ROOT-SERVERS.NET
edu nameserver = H.ROOT-SERVERS.NET
edu nameserver = B.ROOT-SERVERS.NET
edu nameserver = C.ROOT-SERVERS.NET
edu nameserver = D.ROOT-SERVERS.NET
edu nameserver = E.ROOT-SERVERS.NET
edu nameserver = I.ROOT-SERVERS.NET
edu nameserver = F.ROOT-SERVERS.NET
edu nameserver = G.ROOT-SERVERS.NET
A.ROOT-SERVERS.NET internet address = 198.41.0.4
H.ROOT-SERVERS.NET internet address = 128.63.2.53
B.ROOT-SERVERS.NET internet address = 128.9.0.107
C.ROOT-SERVERS.NET internet address = 192.33.4.12
D.ROOT-SERVERS.NET internet address = 128.8.10.90
E.ROOT-SERVERS.NET internet address = 192.203.230.10
I.ROOT-SERVERS.NET internet address = 192.36.148.17
F.ROOT-SERVERS.NET internet address = 192.5.5.241
G.ROOT-SERVERS.NET internet address = 192.112.36.4
Otrzymaliśmy informacje, że domenę edu obsługują serwery
*.root-servers.net, tak więc możemy kontynuować nasze pytanie
kierując je nadal do serwera c.root-serwers.net. Teraz chcemy
wiedzieć, kto obsługuje domenę następnego poziomu: mit.edu.:
> mit.edu.
Server: c.root-servers.net
Address: 192.33.4.12
Non-authoritative answer:
mit.edu nameserver = STRAWB.mit.edu
mit.edu nameserver = W20NS.mit.edu
mit.edu nameserver = BITSY.mit.edu
Authoritative answers can be found from:
STRAWB.mit.edu internet address = 18.71.0.151
W20NS.mit.edu internet address = 18.70.0.160
BITSY.mit.edu internet address = 18.72.0.3
steawb, w20ns i bitsy obsługują mit, wybierz jeden
z nich i spytaj się o ai.mit.edu:
> server W20NS.mit.edu.
W nazwach kompyterów wielkość liter nie ma znaczenia, lecz ja do przenoszenia tekstu używam myszy, zapytanie ma taką samą formę jak poprzedzająca je odpowiedź.
Server: W20NS.mit.edu
Address: 18.70.0.160
> ai.mit.edu.
Server: W20NS.mit.edu
Address: 18.70.0.160
Non-authoritative answer:
ai.mit.edu nameserver = WHEATIES.AI.MIT.EDU
ai.mit.edu nameserver = ALPHA-BITS.AI.MIT.EDU
ai.mit.edu nameserver = GRAPE-NUTS.AI.MIT.EDU
ai.mit.edu nameserver = TRIX.AI.MIT.EDU
ai.mit.edu nameserver = MUESLI.AI.MIT.EDU
Authoritative answers can be found from:
AI.MIT.EDU nameserver = WHEATIES.AI.MIT.EDU
AI.MIT.EDU nameserver = ALPHA-BITS.AI.MIT.EDU
AI.MIT.EDU nameserver = GRAPE-NUTS.AI.MIT.EDU
AI.MIT.EDU nameserver = TRIX.AI.MIT.EDU
AI.MIT.EDU nameserver = MUESLI.AI.MIT.EDU
WHEATIES.AI.MIT.EDU internet address = 128.52.32.13
WHEATIES.AI.MIT.EDU internet address = 128.52.35.13
ALPHA-BITS.AI.MIT.EDU internet address = 128.52.32.5
ALPHA-BITS.AI.MIT.EDU internet address = 128.52.37.5
GRAPE-NUTS.AI.MIT.EDU internet address = 128.52.32.4
GRAPE-NUTS.AI.MIT.EDU internet address = 128.52.36.4
TRIX.AI.MIT.EDU internet address = 128.52.32.6
TRIX.AI.MIT.EDU internet address = 128.52.38.6
MUESLI.AI.MIT.EDU internet address = 128.52.32.7
MUESLI.AI.MIT.EDU internet address = 128.52.39.7
Okazuje się, że weaties.ai.mit.edu jest serwerem nazw dla doemny ai.mit.edu:
> server WHEATIES.AI.MIT.EDU.
Default Server: WHEATIES.AI.MIT.EDU
Addresses: 128.52.32.13, 128.52.35.13
Teraz zmieniam rodzaj zapytania. Znamy już nazwę serwera nazw
dla interesującej nas domeny, spytamy sie o jakiekolwiek informacje
jakie serwer posiada na temat prep.ai.mit.edu.
> set q=any
> prep.ai.mit.edu.
Server: WHEATIES.AI.MIT.EDU
Addresses: 128.52.32.13, 128.52.35.13
prep.ai.mit.edu CPU = dec/decstation-5000.25 OS = unix
prep.ai.mit.edu
inet address = 18.159.0.42, protocol = tcp
#21 #23 #25 #79
prep.ai.mit.edu preference = 1, mail exchanger = life.ai.mit.edu
prep.ai.mit.edu internet address = 18.159.0.42
ai.mit.edu nameserver = alpha-bits.ai.mit.edu
ai.mit.edu nameserver = wheaties.ai.mit.edu
ai.mit.edu nameserver = grape-nuts.ai.mit.edu
ai.mit.edu nameserver = mini-wheats.ai.mit.edu
ai.mit.edu nameserver = trix.ai.mit.edu
ai.mit.edu nameserver = muesli.ai.mit.edu
ai.mit.edu nameserver = count-chocula.ai.mit.edu
ai.mit.edu nameserver = life.ai.mit.edu
ai.mit.edu nameserver = mintaka.lcs.mit.edu
life.ai.mit.edu internet address = 128.52.32.80
alpha-bits.ai.mit.edu internet address = 128.52.32.5
wheaties.ai.mit.edu internet address = 128.52.35.13
wheaties.ai.mit.edu internet address = 128.52.32.13
grape-nuts.ai.mit.edu internet address = 128.52.36.4
grape-nuts.ai.mit.edu internet address = 128.52.32.4
mini-wheats.ai.mit.edu internet address = 128.52.32.11
mini-wheats.ai.mit.edu internet address = 128.52.54.11
mintaka.lcs.mit.edu internet address = 18.26.0.36
Jak widać rozpoczynając od domeny głównej . znaleźliśmy
kolejne serwery DNS. Gdybyśmy skorzystali z własnego serwera DNS,
named zpamiętałby wszystkie informacje otrzymywane z sieci i nie
musiałby przej jakiś czas pytać się serwerów, korzystając z
przechowywanych informacji.
Mniej opisywaną lecz równie ważną domeną jest
in-addr.arpa. Tak jak zwykłe domeny również posiada strukturę
hierachiczną. in-addr.arpa pozwala na znalezienie nazwy
komputera, jeśli tylko posiadamy jego adres IP. Należy tu zwrócić
uwagę, że adres IP jest zapisywany w odwrotnej kolejności. Jeśli twój
komputer posiada adres 192.128.52.43 named będzie się zachowywał tak
samo jak w przykładzie poszukiwania informacji na temat komputera
prep.ai.mit.edu: znajdź serwery domey arpa., znajdź serwery
in-addr.arpa., znajdź serwery 192.in-addr.arpa., znajdź
serwery 128.192.in-addr.arpa./, znajdź serwery
52.128.192.in-addr.arpa./, znjdź niezbędne rekordy dla
43.52.128.192.in-addr.arpa..
Jasne, nie ?! (opowiedz 'tak'). Przez pierwsze dwa lata odwracanie
kolejności częsci adresu IP sprawia małe kłopoty.
Właśnie skłamałem. DNS nie pracuje dokładnie w taki sposów jaki wam przed chwilą przedstawiłem. Lecz jest to bardzo dobre przbliżenie.
Teraz zdefiniujemy naszą własną domenę. Nazwijmy ją linux.bogus. Umieśćmy w niej jeden komputer. Specjalnie używam całkowicie bzdurną nazwę domeny, aby mieć pewność, że nie przeszkodzimy nikomu z Sieci.
Rozpoczęliśmy tę część dodając do named.boot wiersz:
primary 0.0.127.in-addr.arpa pz/127.0.0
Proszę zwrócić uwagę na brak kropki `.' kończącej nazwy domen.
Pierwszy wiersz określa, że plik pz/127.0.0 zawiera informacje
definiujące domenę 0.0.127.in-addr.arpa. Plik ten już został utworzony,
wygląda następująco:
@ IN SOA linux.bogus. hostmaster.linux.bogus. (
1 ; Serial
28800 ; Refresh
7200 ; Retry
604800 ; Expire
86400) ; Minimum TTL
NS ns.linux.bogus.
1 PTR localhost.
Proszę zwrócić uwagę na kropkę `.' kończącą pełne nazwy domen,
w przeciwieństwie do omawianego wcześniej pliku
named.boot. Niektórzy wolą rozpoczynać każdy plik strefy
dyrektywą $ORIGIN lecz nie jest to konieczne. Pochodzenie
(miejsce w hierarchi DNS, do którego przynależy) pliku strefy jest
określone w kolumnie `domain' w pliku named.boot, w tym przypadku
jest to 0.0.127.in-addr.arpa.
Powyższy plik strefy zawiera trzy rekordy (RR): SOA RR, NS RR i PTR RR. SOA jest skrótem Start Of Authority. Znak `@' jest znakiem specjalnym określającym pochodzenie, a ponieważ kolumna `domain' odpowiadająca temu plikowi mówi 0.0.127.in-addr.arpa, dlatego pierwszy wiersz tak naprawdę ma postać:
0.0.127.IN-ADDR.ARPA. IN SOA ...
NS to rekord serwera nazw. Wskazuje komputer, który jest serwerem nazw dla tej domeny. I na koniec rekord PTR mówi, że 1 (w pełnej formie 1.0.0.127.in-addr-arpa, tzn. 127.0.0.1) nosi nazwę localhost.
Rekord SOA stanowi nagłówek wszystkich plików stref, w każdym
z plików powinien znajdować się dokładnie jeden rekord SOA, powinien
to być pierwszy rekord w pliku. Opisuje on strefę, z której pochodzi
(komputer o nazwie linux.bogus), kto jest odpowiedzialny za
jej zawartość (hostmaster@linux.bogus), numer wersji pliku strefy
(serial 1) oraz inne informacje, mające znaczenie dla pracy
serwerów drugorzędnych. Jeśli dla pól refresh, retry, expire i minimum
będziesz używał wartości jakie występują w tym dokumencie wszystko
powinno działać poprawnie.
Rekord NS określna kto serwuje informacje DNS na temat
0.0.127.in-addr.arpa, jest to ns.linux.bogus.
Rekord PTR mówi nam, że 1.0.0.127.in-addr.arpa (aka 127.0.0.1) jest
znany pod nazwą localhost.
Teraz zrestartuj proces named (poleceniem ndc restart) i sprawdź
poczynione zmiany programem nslookup:
$ nslookup
Default Server: localhost
Address: 127.0.0.1
> 127.0.0.1
Server: localhost
Address: 127.0.0.1
Name: localhost
Address: 127.0.0.1
jak widać udało się pobrać informacje o localhost z komputera 127.0.0.1,
to dobrze. Teraz nasze podstawowe zadanie, domena linux.bogus, dodaj
do pliku named.boot wiersz definiujący nową domenę:
primary linux.bogus pz/linux.bogus
Zwróć uwagę na powtarząjący sie brak znaku `.' kończących nazwy
domen w pliku named.boot.
In the linux.bogus zone file we'll put some totally bogus data:
;
; Plik strefy linux.bogus
;
; Obowiązkowy zestaw minimum potrzebny do prawidłowej definicje domeny
;
@ IN SOA linux.bogus. hostmaster.linux.bogus. (
199511301 ; serial, todays date + todays serial #
28800 ; refresh, seconds
7200 ; retry, seconds
3600000 ; expire, seconds
86400 ) ; minimum, seconds
NS ns.linux.bogus.
NS ns.friend.bogus.
MX 10 mail.linux.bogus ; Primary Mail Exchanger
MX 20 mail.friend.bogus. ; Secondary Mail Exchanger
localhost A 127.0.0.1
ns A 127.0.0.2
mail A 127.0.0.4
Należy zrócić uwagę na dwie rzeczy dotyczące rekordu SOA. ns.linux.bogus musi byc rekordem RR typu A, czyli nazwą komputera, która posiada przydzielony numer IP. Niedopuszczalne jest, aby nazwa uzywana w rekordzie SOA byla rekordem tymu CNAME. Sam komputer nie musi nosic nazwy 'ns', może to byc dowolna poprawna nazwa. hostamster.linux.bogus należy odczytać jako hostmaster@linux.bogus, musi to byc adres (lub alias do) osoby (lub osób) opiekujących się DNSem dla tej domeny (i czytajacyh regularnie tę pocztę). Wszelka korespondencja dotycząca tej domeny będzie wysyłana na ten adres, może to być dowolny adres e-mail, choć kązdy spodziewa się, że adres 'hostmaster' będzie również adresem kontaktowym domeny.
W powyższym pliku znalazł się rekord RR nowego typu, a mianowicie
rekord MX, inaczej rekord Mail eXchanger. Dostarcza on systemowi
pocztowemu informacji, dokąd wysyłać pocztę adresowaną
ktoś@linux.bogus, w tym przypadku do mail.linux.bogud lub
mail.friend.bogus. Liczba poprzedzająca nazwę komputera oznacza
priorytet rekordu. System pocztowy powinien korzystać w pierwszej
kolejności z rekordów o najmniejszym priorytecie (w naszym przypadku
10). Jeśli nie uda się dostarczyć poczty na ten adres, należy
spróbować innego adresu, o wyższym priorytecie. W naszym przypadku
byłby to mail.friend.bogus, który posiada priorytet 20.
Teraz trzeba zrestartowac program named wydając polecenie ndc
restart. Rezultaty naszej pracy mozemy sprawdzić programem nslookup.
$ nslookup
> set q=any
> linux.bogus
Server: localhost
Address: 127.0.0.1
linux.bogus
origin = linux.bogus
mail addr = hostmaster.linux.bogus
serial = 199511301
refresh = 28800 (8 hours)
retry = 7200 (2 hours)
expire = 604800 (7 days)
minimum ttl = 86400 (1 day)
linux.bogus nameserver = ns.linux.bogus
linux.bogus nameserver = ns.friend.bogus
linux.bogus preference = 10, mail exchanger = mail.linux.bogus.linux.bogus
linux.bogus preference = 20, mail exchanger = mail.friend.bogus
linux.bogus nameserver = ns.linux.bogus
linux.bogus nameserver = ns.friend.bogus
ns.linux.bogus internet address = 127.0.0.2
mail.linux.bogus internet address = 127.0.0.4
Przypatrując się dokładnie widzimy, że popełniliśmy błąd. Wiersz
linux.bogus preference = 10, mail exchanger = mail.linux.bogus.linux.bogus
jest niepoprawny. powinien wyglądać następująco:
linux.bogus preference = 10, mail exchanger = mail.linux.bogus
Specjalnie popełniłem błąd, abyście mogli się na nim uczyć :-). Przyglądając się plikowi źródłowemu zauważamy, że w wierszu
@ MX 10 mail.linux.bogus ; Primary Mail Exchanger
brakuje kropki. Lub inaczej mówiać ma zbyt wiele członów
'linux.bogus'. Gdy nazwa komputera występująca w pliku żródłowym
strefy nie kończy się kropką, program na koniec dokleja 'origin'
(pochodzenie, domenę definiowaną przez ten plik źródłowy).
Dlatego nazwy komputerów należy podawać w sposób pełny, pilnując
końcowej kropki
@ MX 10 mail.linux.bogus. ; Primary Mail Exchanger
lub uproszczony
@ MX 10 mail ; Primary Mail Exchanger
.) lub
w ogole nie powinna być podawana. W takim przypadku domyślnie
przyjmuje się tzw. origin. Muszę podkreślić, że nazwy domen w pliku
named.boot nie powinny się kończyć kropką. Nie macie pojęcia, jak
wiele razy nadmierna liczba kropek, lub ich brak spowodowała
zamieszanie i ogłupiła mnóstwo ludzi.
Skoro już powiedziłąem co miałęm do powiedzenia, poniżej przedstawiam nowy źródłowy plik strefy z nowymi, dodatkowymi informacjami:
;
; Plik strefy dla linux.bogus
;
; Obowiązkowy zestaw minimum potrzebny do prawidłowej definicje domeny
;
@ IN SOA linux.bogus. hostmaster.linux.bogus. (
199511301 ; serial, todays date + todays serial #
28800 ; refresh, seconds
7200 ; retry, seconds
604800 ; expire, seconds
86400 ) ; minimum, seconds
NS ns ; Inet Address of name server
NS ns.friend.bogus.
MX 10 mail ; Primary Mail Exchanger
MX 20 mail.friend.bogus. ; Secondary Mail Exchanger
localhost A 127.0.0.1
ns A 127.0.0.2
mail A 127.0.0.4
;
; Extras
;
@ TXT "Linux.Bogus, your DNS consultants"
ns MX 10 mail
MX 20 mail.friend.bogus.
HINFO "Pentium" "Linux 1.2"
TXT "RMS"
richard CNAME ns
www CNAME ns
donald A 127.0.0.3
MX 10 mail
MX 20 mail.friend.bogus.
HINFO "i486" "Linux 1.2"
TXT "DEK"
mail MX 10 mail
MX 20 mail.friend.bogus.
HINFO "386sx" "Linux 1.0.9"
ftp A 127.0.0.5
MX 10 mail
MX 20 mail.friend.bogus.
HINFO "P6" "Linux 1.3.59"
Moglibyście chcieć przesując pierwsze trzy rekordy A, tak aby sąsiadowały z innymi rekordami tego typu, zamiast siedzieć na początku listy.
W powyższym przykładzie pojawiły się rekordy nowego typu: HINFO (Host INFOrmation) składa się z dwóch częsci, dobrym zwyczajem jest umiesczenie obu w cudzysłowach. Pierwsza część określa hardware, lub procesor komputera, druga oprogramowanie lub pracujący na nim system operacyjny. Komputer ns to Pentium, pracujące pod Linuxem 1.2. Rekord TXT może zawierać dowolny tekst. Można go wykorzystywać do różnych celów. CNAME (Cannonical NAME) to sposób na nadanie wielu nazw jednemu komputerowi. Tak więc richard i www są aliasami komputera ns. To ważne aby pamiętać, że rekordy A, MX, CNAME i SOA nigdy nie powinny wskazywać na rekord CNAME. Zawsze powinny wsazywać na rekord A. Dlatego ta forma jest niepoprawna
foobar CNAME richard ; NO!
i powinna zostać zastąpiona przez
foobar CNAME ns ; Yes!
Równie ważne jest pamiętanie, że rekord CNAME nie jest poprawną
nazwą, którą można stosować w adresach e-mail. Nawiązując do
poprzedniego przykładu, adres wmail webmaster@www.linux.bogus nie
jest niepoprawny. Możesz oczekiwać, że całkiem spora liczba
administratorów pocztowych Stamtąd będzie wymagała popdorządkowania
się tej regule pomimo, że w twoim przypadku wszystko może działać
poprawnie. Sposobem na uniknięcie kłopotów jest stosowanie rekordów A
(i być może również innych, np. rekordów MX):
www A 127.0.0.2
Paul Vixie, największy z wizardów programu named, sugeruje aby nie korzystać z rekordów CNAME. Dlatego bardzo poważnie zastanów się nad ograniczeniem uzywania rekordów CNAME.
Załaduj nową wersję bazy wydając polecenie ndc reload, wymusi
ona na procesie ponowne odczytanie plików konfiguracyjnych.
$ nslookup
Default Server: localhost
Address: 127.0.0.1
> ls -d linux.bogus
Powyższe polecenie spowoduje przedstawienie wszystkich rekordów.
[localhost]
linux.bogus. SOA linux.bogus hostmaster.linux.bogus. (1995
11301 28800 7200 604800 86400)
linux.bogus. NS ns.linux.bogus
linux.bogus. NS ns.friend.bogus
linux.bogus. MX 10 mail.linux.bogus
linux.bogus. MX 20 mail.friend.bogus
linux.bogus. TXT "Linux.Bogus, your DNS consultants"
localhost A 127.0.0.1
mail A 127.0.0.4
mail MX 10 mail.linux.bogus
mail MX 20 mail.friend.bogus
mail HINFO 386sx Linux 1.0.9
donald A 127.0.0.3
donald MX 10 mail.linux.bogus
donald MX 20 mail.friend.bogus
donald HINFO i486 Linux 1.2
donald TXT "DEK"
www CNAME ns.linux.bogus
richard CNAME ns.linux.bogus
ftp A 127.0.0.5
ftp MX 10 mail.linux.bogus
ftp MX 20 mail.friend.bogus
ftp HINFO P6 Linux 1.3.59
ns A 127.0.0.2
ns MX 10 mail.linux.bogus
ns MX 20 mail.friend.bogus
ns HINFO Pentium Linux 1.2
ns TXT "RMS"
linux.bogus. SOA linux.bogus hostmaster.linux.bogus. (1995
11301 28800 7200 604800 86400)
Jest dobrze. Zobaczmy jaką odpowiedź otrymamy pytając się wyłącznie o komputer www:
> set q=any
> www.linux.bogus.
Server: localhost
Address: 127.0.0.1
www.linux.bogus canonical name = ns.linux.bogus
... Innymi słowy, prawdziwa nazwa komputera www.linux.bogus to ns.linux.bogus.
linux.bogus nameserver = ns.linux.bogus
linux.bogus nameserver = ns.friend.bogus
ns.linux.bogus internet address = 127.0.0.2
a ns.linux.bogus ma adres 127.0.0.2. To również wygląda poprawnie.
Oczywiście powyższa domena jest nierzeczywista, jak również adresy IP podane w przykładzie, co może utrudniać zrozumienie. Przykład przwdziwej domeny znjdziecie w następnym rozdziale.
Skąd wziąć pliki prawdziwej domeny.
UZytkownicy zwrócili mi uwagę, że powinienem dołączyć przykład plików definiujących prawdziwą domene, ponieważ różnica pomiędzy domeną przykładową i prawdziwą nie była do ońca jasna.
Jedna uwaga dotycząca tego przykładu: nie wprowadzajcie tych plików do swoich serwerów DNS! Przedstawione pliki służą jedynie jako punkt odniesienia. Jeśli chcesz eksperymentować, wykorzystaj domenę przykładową linux.bogus. Korzystam z tego przykładau za pozwoleniem Davida Bullocka z LAND-5. Prezentowane informacje były aktualne 14 sierpnia 1196 roku, i mogą się róznić od aktualnych. Należy ciągle pamiętać o uwagach na temat wiodących odstępów w plikach przykładowych.
Oto dwa wiersze potrzebne d ozdefiniowania dwóch stref (domen)
odwrotnych.: siec 127.0.0 oraz siec LAND-5 o numerach 206.6.177. Oraz
wiersz deklarujący, że nasz serwer jest serwerem podstawowym domeny
land-5.com. Proszę zauważyc, że zamiast umieszczania plików z danymi w
sugerowanym wcześcniej przeze mnie katalogu pz, tutaj pliki są
umieszczane w katalogu zone.
; Boot file for LAND-5 name server ; directory /var/named ; ; type domain source file or host cache . root.cache primary 0.0.127.in-addr.arpa zone/127.0.0 primary 177.6.206.in-addr.arpa zone/206.6.177 primary land-5.com zone/land-5.com
Proszę pamiętać, że ten plik się zmienia, i ten przedstawiony tutaj jest już stary. Lepiej skorzystaj z tego, genrowanego programem dig.
; <<>> DiG 2.1 <<>> ;; res options: init recurs defnam dnsrch ;; got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6 ;; flags: qr rd ra; Ques: 1, Ans: 9, Auth: 0, Addit: 9 ;; QUESTIONS: ;; ., type = NS, class = IN ;; ANSWERS: . 518357 NS H.ROOT-SERVERS.NET. . 518357 NS B.ROOT-SERVERS.NET. . 518357 NS C.ROOT-SERVERS.NET. . 518357 NS D.ROOT-SERVERS.NET. . 518357 NS E.ROOT-SERVERS.NET. . 518357 NS I.ROOT-SERVERS.NET. . 518357 NS F.ROOT-SERVERS.NET. . 518357 NS G.ROOT-SERVERS.NET. . 518357 NS A.ROOT-SERVERS.NET. ;; ADDITIONAL RECORDS: H.ROOT-SERVERS.NET. 165593 A 128.63.2.53 B.ROOT-SERVERS.NET. 165593 A 128.9.0.107 C.ROOT-SERVERS.NET. 222766 A 192.33.4.12 D.ROOT-SERVERS.NET. 165593 A 128.8.10.90 E.ROOT-SERVERS.NET. 165593 A 192.203.230.10 I.ROOT-SERVERS.NET. 165593 A 192.36.148.17 F.ROOT-SERVERS.NET. 299616 A 192.5.5.241 G.ROOT-SERVERS.NET. 165593 A 192.112.36.4 A.ROOT-SERVERS.NET. 165593 A 198.41.0.4 ;; Total query time: 250 msec ;; FROM: land-5 to SERVER: default -- 127.0.0.1 ;; WHEN: Fri Sep 20 10:11:22 1996 ;; MSG SIZE sent: 17 rcvd: 312
Tylko podstawowe rekordy, obowiązkowo rekord SOA, rekord
odwzorujący 127.0.0.1 na localhost. Oba są konieczne.
Nic więcej w tym pliku nie jest potrzebne.PRzwdopodobnie nigdy już nie
powinny byćmodyfikowane, cgyba, że zmieni się adres serwera DNS lub
adres email uzywany w rekordzie SOA.
@ IN SOA land-5.com. root.land-5.com. (
199609203 ; Serial
28800 ; Refresh
7200 ; Retry
604800 ; Expire
86400) ; Minimum TTL
NS land-5.com.
1 PTR localhost.
Tutaj możemy zobaczyć obowiązkowy rekord SOA, potrzebne rekordy NS. Widzimy, że drugorzędny serwer DNS to ns1.psi.net. Jest tak, jak być powinno, zawsze musi być drugi, zapasowy serwer DNS umieszczony poza twoją siecią. Widzimy również, że komputergem głównym jest land-5, serwujący rózne usługi do których kierują odpowiednie rekorddy CNAME (alternatywa jest używanie rekordów A).
Patrząc na rekord SOA widzimy, że ta strefa(domena) dns pochodzi z
komutera land-5.com. W sprawach związanyc hz tą domeną należy
kontaktować się z root@land-5.com. hostmaster to inny,
często używany w takich przypadkach adres e-mail. Numer seryjny w
powszechnie przyjętym formacie rrrrmmdd z dodaną liczbą zmian danego
dnia wskazuje, że jest to prawdopodobnie szósta wersja tego pliku w
dniu 20. września 1996. Pamiętaj, że numer seryjny musi
monotonicznie rosnąć. W tym przypadku pozostawiono jedna cyfrę jalo
kicznik zmian jednego dnia. Po wykonaniu dziewięciu poprawek, następną
mozna wykonac dopiero następnego dnia. Dlatego rozważ stosowanie dwóch
pozycji do oznaczania liczby modyfikacji jednego dnia.
@ IN SOA land-5.com. root.land-5.com. (
199609206 ; serial, todays date + todays serial #
10800 ; refresh, seconds
7200 ; retry, seconds
10800 ; expire, seconds
86400 ) ; minimum, seconds
NS land-5.com.
NS ns2.psi.net.
MX 10 land-5.com. ; Primary Mail Exchanger
localhost A 127.0.0.1
router A 206.6.177.1
land-5.com. A 206.6.177.2
ns CNAME land-5.com.
ftp CNAME land-5.com.
www CNAME land-5.com.
mail CNAME land-5.com.
news CNAME land-5.com.
funn A 206.6.177.3
illusions CNAME funn.land-5.com.
@ TXT "LAND-5 Corporation"
;
; Workstations
;
ws_177200 A 206.6.177.200
MX 10 land-5.com. ; Primary Mail Host
ws_177201 A 206.6.177.201
MX 10 land-5.com. ; Primary Mail Host
ws_177202 A 206.6.177.202
MX 10 land-5.com. ; Primary Mail Host
ws_177203 A 206.6.177.203
MX 10 land-5.com. ; Primary Mail Host
ws_177204 A 206.6.177.204
MX 10 land-5.com. ; Primary Mail Host
ws_177205 A 206.6.177.205
MX 10 land-5.com. ; Primary Mail Host
; {Many repetitive definitions deleted - SNIP}
ws_177250 A 206.6.177.250
MX 10 land-5.com. ; Primary Mail Host
ws_177251 A 206.6.177.251
MX 10 land-5.com. ; Primary Mail Host
ws_177252 A 206.6.177.252
MX 10 land-5.com. ; Primary Mail Host
ws_177253 A 206.6.177.253
MX 10 land-5.com. ; Primary Mail Host
ws_177254 A 206.6.177.254
MX 10 land-5.com. ; Primary Mail Host
Można jeszcze zwrócić uwagę na to, że stacje robocze nie posiadają indywidualnych nazw, lecz raczej prefix po którym następuje dwuczłonowy fragmnet adresu IP. Korzystanie z takiej konwencji może znacznie ułatwić opiekę nad DNSem, lecz nie jest przez wszystkich najmilej widziane.
Komentarz później.
@ IN SOA land-5.com. root.land-5.com. (
199609206 ; Serial
28800 ; Refresh
7200 ; Retry
604800 ; Expire
86400) ; Minimum TTL
NS land-5.com.
NS ns2.psi.net.
;
; Servers
;
1 PTR router.land-5.com.
2 PTR land-5.com.
3 PTR funn.land-5.com.
;
; Workstations
;
200 PTR ws_177200.land-5.com.
201 PTR ws_177201.land-5.com.
202 PTR ws_177202.land-5.com.
203 PTR ws_177203.land-5.com.
204 PTR ws_177204.land-5.com.
205 PTR ws_177205.land-5.com.
; {Many repetitive definitions deleted - SNIP}
250 PTR ws_177250.land-5.com.
251 PTR ws_177251.land-5.com.
252 PTR ws_177252.land-5.com.
253 PTR ws_177253.land-5.com.
254 PTR ws_177254.land-5.com.
definicja domeny odwrotnej powoduje zwykle najwięcej kłopotów. Służy do znajdywania nazwy komputera, znając jego adres IP. Przykład: Posiadasz serwer IRC i przyjmujesz połączenia od klientów. Jednakże jako serwer Norweski chcesz jedynie zezwalać na połączenia komputerów norweskich lub skandynawskich. Po nawiązaniu połączenia procedury biblioteki C są w stanie ustalić spod jakiego adresu IP zostało nawiązane nowe połączenie, ponieważ adres IP zdalnego komputera jest przekazywany w pakietach danych przesyłanych siecią. Teraz możesz skorzystać z funkcji gethostbyaddr, która znajduje nazwę odpowiadającą podanemu adresowi IP. Gethostbyaddr zapyta serwer DNS, który z kolei dokona całego wyszukania. Zakładając, że klient połączył się z komputera ws_177200.land-5.com, adres IP przekazany przez proceduty biblioteki lib C do serwera DNS będzie brzmiał: 206.6.177.200. Aby dowiedzieć się jaka nazwa odpowiada temu adresowi musimy znależć wartość rekordu 100.177.6.206.in-addr.arpa. Serwer DNS wpierw znajdzei serwery domane arpa, in-addr.arpa, 206.in-addr.arpa, 6.206.in-addr.arpa dochodząc do serwera 177.6.206.in-addr.arpa w land-5. Ostatecznie otrzyma stamtąd odpowiedź, że dla 200.177.6.206.in-addr.arpa istnieje rekord PTR o wartości ws_177200.land-5.com, co znaczy, że adresowi 206.6.177.200 odpowiada nazwa ws_177200.land-5.com. Podobnie jak w przypadku wyjaśnien odszukiwania adresu dla nazwy prep.ai.mit.edu, powuższe wyjaśnienie trochę mija się z rzeczywistością.
Powracając do przykładu IRC. Serwer IRC akceptuje połączenia pochodzące z krajów skandynawskich, tzn. *.no, *.se, *.dk. Nazwa ws_177200.land-5.com nie pasuje do żadnego z powyższych wzorców i serwer odmówi połączenia. Gdyby nie istniało odwzorowanie odwrotne adresu 206.6.177.200 poprzez strefę in-addr.arpa, wtedy serwer nie miałby możliwości znalezienia nazwy łączącego się komputera a porównywanie adresów ip z wzorcami domen, nigdy nie przynosiłoby poprawnych rezultatów.
Niektórzy twierdzą, żę odwrotne odwzorowanie adresów IP jest ważne jedynie dla serwerów, lub nie jest ważne w ogóle. Nie do końca: wiele serwerów ftp, news, irc, a nawet niektóre serwery http (WWW) nie zezwolą na połączenia z komputerów, których adresy nie są zarejestrowane w domenie odwrotnej. Dlatego faktem jest, że rejestracja w domenie odwrotnej jest konieczna.
Utrzymywanie w pracy ciągłej.
Prócz pilnowania aby proces named byl zawsze katywny pozostaje
jedynie pilnowanie, aby plik root.cache był zawsze
aktualny. Najprostszą metodą jest skorzystanie z programu dig,
wpierw należy go uruchomić bez żadnych argumentóww, otrzymamy plik
root.cache uzywany przez nasz serwer. Następnie należy o to samo
zapytać jeden z głównych serwerów DNS (root servers) wydając polecenie
dig @rootserver. Zauważysz, że wynik tego polecenia bardzo
przypomina plik root.cache z dokładnością do kilku liczb. Te
liczby nie mogą uczynić nam żadnej szkody. Zapisz wynik polecenia do
pliku (dig @e.root-servers.net >root.cache.new), a następnie
zastąp nim stary plik root.cache.
Pamiętaj, aby po zamianie pliku root.cache zrestartować proces
named.
Al Longyear przysłał mi poniższy skrypt, który można uruchamić
i automatycznie uaktualniac plik root.cache. Zainstaluj go w
crontabie i zpomnij. Niniejszy skrypt zakłada, że na twoim komputerze
działa system poczty elektornicznej i istnieje alias pocztowy
hostmaster. Przed uruchomieniem powinienes go dostosować so
swoich ustawien.
#!/bin/sh # polish translation piotr.pogorzelski@ippt.gov.pl 1997 # Uaktualnianie informacji o głównych serwerach DNS. # Ten skrypt powinien byc uruchamiany automatycznie raz w miesiacu # przez program cron. # ( echo "To: hostmaster <hostmaster>" echo "From: system <root>" echo "Subject: Automatyczne uaktualnienie pliku named.cache" echo export PATH=/sbin:/usr/sbin:/bin:/usr/bin: cd /var/named dig @rs.internic.net . ns >named.cache.new echo "Plik named.cache zostal uwaktualniony i zawiera teraz następujące informacje:" echo cat named.boot.new chown root.root named.cache.new chmod 444 named.cache.new rm -f named.cache.old mv named.cache named.cache.old mv named.cache.new named.cache ndc restart echo echo "Program serwera DNS został uruchomiony na nowo, aby zapewnić korzystanie z nowych informacji." " echo "Stary plik został zachowany jako named.cache.old" /var/named/named.cache.old." ) 2>&1 | /usr/lib/sendmail -t exit 0
Niektórzy z was mogłi zauważyć, że root.cahce jest również dostępny w Internicu przez ftp. Proszę nie korzystajcie z ftp aby uaktualnić plik root.cache, przedstawiona powyżej metoda jest bardziej przyjazna sieci.
W tym rozdziale wyjaśnię w jaki sposób skonfigurowałem swój
system, aby automatyzować wszsytkei zadania. Moj sposób rozwiązania
problemu może zupełnie nie nadawać się do twojej konfiguracji, lecz
zawsze możesz skorzystać z pomysłów. Poza tym ja korzystam z ppp,
wiele osób używa slip lub cslip, tak więc niemal wszystkie szczegóły
twojej konfiguracji mogą różnić się od mojej. Lecz program dip
używany do obsługi połączeń slip powinien być w stanie zrealizować
wiele pomysłów, z których korzystam.
Zwykle, gdy nie jestem przyłączony do sieci, moj plik
resolv.conf zawiera po prostu wiersz
domain uio.no
Taka konfiguracja zapewnia, że nie muszę czekać na gdy procedury
biblioteki odpowiedzialne za rozwiązywanie nazw bedą staraly się
nawiazac połączenia z zewnętrznymi serwerami DNS. Lecz gdy jestem
połączony chce posiadać uruchomiony proces named, a plik
resolv.conf powinien zawierac informacje niezbędne do poprawnej
pracy DNSu. Rozwiązałem ten problem tworząc dwa wzorce pliku
resolv.conf, resolv.conf.local i
resolv.conf.connected. Ten ostatni wygląda jak opisywany
wcześniej resolv.conf.
Aby połączyć się z siecią uruchamiam skrypt o nazwie 'ppp-on':
#!/bin/sh echo calling... pppd
pakiet pppd posiada plik o nazwie options, w którym deklaruje
się szczególy dotyczące sposobu nawiązywania połączeń. Tuż po
zestawieniu połączenia PPP, pppd uruchamia skrypt o nazwie ip-up
(jest to dokładnie opisane na stronie podręcznika programu pppd).
Oto fragment powyższego skryptu:
#!/bin/sh interface="$1" device="$2" speed="$3" myip="$4" upip="$5" ... cp -v /etc/resolv.conf.connected /etc/resolv.conf ... /usr/sbin/named
To znaczy uruchom named. Kiedy PPP jest rozłączanie, pppd
uruchamia skrypt ip-down:
#!/bin/sh cp /etc/resolv.conf.local /etc/resolv.conf read namedpid </var/run/named.pid kill $namedpid
W ten sposób named jest uruchamiany po nawiazaniu połączenia i zabijany po jego rozłączeniu.
Niektóre programy, irc lub talk, przyjmują zbyt wiele założeń
dlatego aby talk i udogodnienie dcc w irc działały poprawnie trzeba
również poprawić plik hosts. Do swojego skryptu if-up dodałem
polecenia:
cp /etc/hosts.ppp /etc/hosts echo $myip roke >>/etc/hosts
hosts.ppp zawiera po prostu
127.0.0.1 localhost
,a polecenie echo dodaje numer ip, ktory otrzymalem dla mojego
komputera (roke). Zamiast tego powinieneś użyć nazwy komputera, którą
sam używasz. Możesz ją poznaćwykonując polecenie hostname.
Uruchamianie demona named gdy nie jest się przyłączonym do sieci prawdopodobnie nie jest najlepszym rozwiazaniem. Dlatego, że named będzie starał się wysłać zapytania, a ponieważ posiada dlugi czas oczekiwania, każdy program, który będzie próbował rozwiązać nazwę korzystając z dńśu będzie musiał równie długo oczekiwać na odpowiedź, która i tak nigdy nie nadejdzie. Jeśli przyłączasz się do Internetu przez łącze dzwonione, powinieneś uruchamiac named tuz po zestawieniu łącza i zabijać go w momencie rozłączenia. Dodatkowe wskazówki w tym temacie znajdziesz w rozdziale FAQ.
Niektórzy z pracujacych na wolnych łączach lubią korzystać z dyrektywy
forwarders. Jeśli twój dostawca internetu posiada serwery DNS o adresach
1.2.3.4 i 1.2.3.5, możesz do pliku named.boot dodać wiersz
forwarders 1.2.3.4 1.2.3.5
Plik named.cache powinien pozostać pusty. W ten sposób zmiejszysz
ruch generowany przez twój komputer i prawdopodobnie wszystko zacznie
działać szybciej. Jest to szczególnie ważne, gdy płacisz za przesłane
bajty. Dodatkowa zaleta tego rozwiązania polega na tym, że pozwala
pozbyć się obowiązku opieki i nadzorowania oprogramowania DNS,
ponieważ pusty plik named.cache nie wymaga odświerzania.
W tym rozdziale przedstawię kilka z najczęściej zadawanych pytań dotyczących DNSu i tego dokumentu. Prócz pytań będą również odpowiedzi, przeczytaj dokładnie ten rozdział, zanim zdecydujesz się wysłać do mnie list.
Kilka wskazówek: `forwarders',`slave', zapoznaćsię z literaturą prezentowaną na końcu.
Nazwa www.bardzo.zajęty.serwer musi posiadać kilka rekordów A. bind 4.9.3 i nowszy przekazuje kolejne adresy z puli. Takie rozwiązanie nie zadziała ze starszymi wersjami binda.
Pomiń root.cahce, zajmij się jedynie plikami stref/domen. To znaczy, ze niu musisz już pilnować aby root.cache był aktualny.
To znaczy, że w twoim komputerze jest zainstalowany stary, trochę
przestarzały program bind. Jeśli bezopieczeństwo sieci jest dla ciebie
ważne, natychmiast zainstaluj najnowszą wersję binda. Jeśli nie,
możesz pracować dalej tak jak jest. Tylko zamiast uruchamiac ndc
start muszisz wydać poleceni named. ndc reload to
named.reload, a ndc restart to named.restart. Większość
tych programów znajduje się w /usr/sbin.
Jeśłi serwer podstawowy posiada adres 127.0.0.1, to do pliku
named.boot musisz dodac wiersz:
secondary linux.bogus 127.0.0.1 sz/linux.bogus
Ian Clark przesłał mi następującą wiadomość, w której wyjaśnia jak to zrobić:
Moj named działa na komputerze. ktory robi 'Masquerade'. Posiadam dwa
pliki root.cache, jeden root.cache.real zawierający prawdziwe adresy
serwerów głównych i drugi root.cache.fake zawierający ...
--------------
; root.cache.fake
; this file contains no information
--------------
Po rozłączeniu kopiuje root.cache.fake na root.cache i restartuje
named.
Po podłączeniu, kopiuje root.cache.real na root.cache i restartuje
named.
Jest to robione automatycznie w skryptach, odpowiednio ip-down i
ip-up.
Przy pierwszym zapytaniu w trybie off-line, serwer nie posiada
wszystkich niezbędnych informacji i raportuje t ow syslogu, ale jakoś
mogę z tym żyć:
Jan 28 20:10:11 hazchem named[10147]: No root nameserver for class IN
U mnie ten schemat działa poprwnie.Mogę korzystać z nameserwera na
komputerach lokalnych bez dodatkowych czasów oczekiwania na połączenie
z nieosiągalnymi serwerami zewnętrzymi w trybie off-line i poprawnie
działającym DNSem w trybie on-line.
Wszelkie pośrednie informacje są gromadzone w pamięci, nigdy nie są zachowywane na dysku. Za każdym razem, kedy named konćzy prace, inforamacje przechowywane w pamięci podręcznej są gubione. Administrator nie ma żadnej kontroli nad pamięcią podręczną, ani nad jej rozmiarem (najnowsze wersje pozwalaja sterowac rozmiarem pamieci cache [pp]). Możesz to naprawic "modyfikując" named. Nie jest to jednak zalecane.
Nie, named nie zachowuje pamięci podręcznej na dysk w momencie zakończenia pracy. To znaczy, że informacje w pamięc podręczna muszą być odtwarzne od początku po każdym zrestartowaniu programu. Możesz to naprawic "modyfikując" named. Nie jest to jednak zalecane.
Dokumnetacja i narzędzia.
Istnieje prwdziwa dokumentacja. Drukowana i OnLine. Aby stać się prawdziwym administratorem DNS należy przeczytać kilkanaście pozycji. Jeśli ktoś preferuje papier polecam DNS and BIND by C. Liu and P. Albitz from O'Reilly & Associates, Sebastopol, CA, ISBN 0-937175-82-X. Czytałem, jest doskonała. Rozdział poświęcony DNSowi można znaleźć w TCP/IP Network Administration, by Craig Hunt from O'Reilly..., ISBN 0-937175-82-X. Dobry administrator DNS (lub jakikolwiek) musi również przeczytać Zen and the Art of Motorcycle Maintenance by Robert M. Prisig :-) Dostępne jako ISBN 0688052304 oraz inne pozycje.
ONLine dostępne są na przykład takie pozycje: http://www.dns.net/dnsrd/, http://www.vix.com/isc/bind.html; FAQ, podręcznik (BOG; Bind Operations Guide) jak również dokumenty opisujące protokoły i chwyty dotyczące DNSu. Większości z tego nie przeczytałem, dlatego nie jestem pełnoetatowym administratorem DNS. Z drugiej strony Arnt Gulbrandsen przeczytał BOG i jest nim zachwycony. Grupa nowinkowa comp.protocols.tcp-ip.domains jest poświęcona DNSowi. I na koniec wiele dokumentów RFC dotyczy DNSu. Prawdopodobnie najważniejsze z nich to:
A. Gulbrandsen, P. Vixie, A DNS RR for specifying the location of services (DNS SRV), October 1996
Y. Rekhter, R. Moskowitz, D. Karrenberg, G. de Groot, E. Lear, Address Allocation for Private Internets, 02/29/1996.
D. Barr, Common DNS Operational and Configuration Errors, 02/28/1996.
A. Romao, Tools for DNS debugging, 11/03/1994.
C. Farrell, M. Schulze, S. Pleitner, D. Baldoni, DNS Encoding of Geographical Location, 11/01/1994.
R. Ullmann, P. Mockapetris, L. Mamakos, C. Everhart, New DNS RR Definitions, 10/08/1990.
P. Mockapetris, Domain names - implementation and specification, 11/01/1987.
P. Mockapetris, Domain names - concepts and facilities, 11/01/1987.
M. Lottor, Domain administrators operations guide, 11/01/1987.
M. Stahl, Domain administrators guide, 11/01/1987.
C. Partridge, Mail routing and the domain system, 01/01/1986.
Zdaje sobie sprawę, że niniejsze tłumaczenie zawiera mnóstwo błędów. Niestety nie jestem w stanie dokładnie sprawdzić całego dokumentu i świadomie pozostawiam tę pracę czytelnikowi. Będę wdzięczny za wszelkie uwagi na temat tego dokumentu, wytykanie błędów, literówek, składni i wszelkie inne, które mogą przyczynić się do jego ulepszenia.
Wszelkie tego typu uwagi proszę przesyłać na adres piotr.pogorzelski@ippt.gov.pl
Inne przetłumaczone dokumenty można znaleźć na stronie http://www.jtz.org.pl/. Zapraszamy!.
piotr.pogorzelski@ippt.gov.pl. doc-linux-pl-2002.06.14.orig/html/DOSEMU-HOWTO.pl.html 0100664 0001750 0001750 00000154542 06770264140 020550 0 ustar coven coven
Cytując podręcznik, dosemu jest programem dla wszystkich użytkowników danego serwera, który korzysta z pewnych specjalnych cech jądra Linuksa oraz procesora 80386, aby uruchomić system MS-DOS/FreeDOS/DR-DOS. Emulator tego systemu, kombinacja sprzętowych i programowych trick-ów, ma następujące właściwości:
W tym miejscu chciałbym podziękować Piotrowi Tęczyńskiemu oraz Wojtkowi Gałązce za pomoc w przetłumaczeniu powyższych pięciu punktów.
DOSEMU zostało pierwotnie napisane dla Linuksa. Działa także w NetBSD i możliwe, że także w FreeBSD, jednak emulacje graficzne racej nie będą działać w NetBSD. Co oznacza, że wszystkie programy DOS-owe używające trybu graficznego (większość programów) nie będą działały.
Działa tylko na rodzinie Intel 80x86, czyli 80386, 80486, Pentium itp.
DOSEMU działa tylko na rodzinie procesorów x86, ale są wyjścia alternatywne: Bochs (http://www.bochs.com) jest shareware'owym emulatorem komputera PC z dostępem do kodu źródłowego, który to emulator działa na większości Uniksów (jak również na MS-Windows). A są jeszcze inne opcje (non-free) - poczytaj FAQ grupy comp.emulators.misc dostępne w Polsce pod adresem ftp.icm.edu.pl/pub/doc/usenet/comp/emulators/misc/
Nie. Potrzebujesz jakiejś wersji DOS-a, ale nie musi to być koniecznie MS-DOS. Przeczytaj rozdział "Jakie wersje DOS-a działają z DOSEMU ?".
Nie jest to rozsądne. Lepiej żebyś użył emulatorra Windows -- Wine (http://www.winehq.com). Jeśli upierasz się, aby uruchomić Windows w DOSEMU, to poczytaj rozdział 8 -- DOSEMU i MS-Windows 3.1.
Przeczytaj punkt 1.4.
(xx/yy/zz) oznacza dzień xx, miesiąc yy, rok zz (9/2/97).
winemu oznacza uruchomienie WinOS/2 w dosemu (10/2/97).
Dosemu używa tego samego schematu numerowania wersji co jądro. Drugie liczby nieparzyste oznaczają wersję rozwojową, czyli niestabilną, drugie parzyste liczby oznaczają wersję uznaną za stabilną. Podczas pisania tego dokumentu, v0.98.6 jest najnowszą stabilną wersją, podczas gdy v0.99.10 jest najnowszą wersją rozwojową. Tak więc jeśli chcesz używać dosemu, zdobądź najnowszą stabilną wersję.
Najnowszą wersją dosemu na dzień dzisiejszy (9/4/99) jest dosemu0.98.6 i można ją znaleźć na:
SUNSite Polska
ftp.dosemu.org
[Od tłum.]
Lepiej używać adresu w Polsce, bo z
zagranicy czas ściągania może się znacznie wydłużyć.
Pamiętaj, że to jest kod ALPHA: mogą być tam poważne błędy i mało dokumentacji na temat nowości. W wersji testowej znajdują się błędy. Używaj jej tylko jeśli chcesz się aktywnie włączyć w jej rozwój. Nie zgłaszaj błędów w wersji rozwojowej - napraw je.
Jeśli masz problemy związane z instalacją i uruchamianiem dosemu po przeczytaniu dokumentacji, najpierw spróbuj sobie sam pomóc: Twoje pytanie zostało już pewnie zadane i odpowiedź udzielona. Spróbuj poszukać tej informacji w Internecie. Np. możesz zajrzeć do
DejaNews - największego zbioru artykułów z grup
dyskusyjnych z całego świata.
aby znaleźć wszystkie artykuły, które zawierają podane przez ciebie słowo. W ten sposób pomożesz sobie prędzej niż zadawaniem dobrze znanego pytania na jakiejś liście. To także uwalnia programistów od odpowiadania na trywialne pytania i przyczynia się do tego, aby nowsze wersje oprogramowania powstawały szybciej.
[Od tłumacza] Istnieje także polska grupa dyskusyjna na temat Linuksa, gdzie możesz pytać o dosemu pod warunkiem, że instalujesz je na Linuksie. Jej nazwa to pl.comp.os.linux, można się także na nią zapisać listownie pod adresem listserv@ict.pwr.wroc.pl.
Jeśli chcesz zadać pytanie lub zgłosić błąd w dosemu, powinieneś rozważyć zapisanie się na listę dyskusyjną linux-msdos. Aby zapisać się na nią, wyślij list na adres Majordomo@vger.rutgers.edu o treści
subscribe linux-msdos imię_nazwisko@twoj.adres.pocztowy
Jeśli będziesz chciał się kiedyś wypisać z tej listy, to wyślij pocztę o treści
unsubscribe linux-msdos imię_nazwisko@twoj.adres.pocztowy
pod ten sam adres co powyżej(11/8/95). Kiedy jesteś zapisany na tę listę możesz na nią wysyłać listy kierując pocztę na adres linux-msdos@vger.rutgers.edu. Istnieje bramka pomiędzy tą listą a grupą dyskusyjną linux.dev.msdos. Jeśli twój dostawca Internetu nie prowadzi tej grupy, to poproś go o dodanie jej(10/2/97). Zanim zadasz pytanie powinieneś przeczytać dokładnie całą dokumentację, włącznie z tym HOWTO i sprawdzić jedno z archiwów listy dyskusyjnej wymienione na www.dosemu.org i sprawdzić czy twoje pytanie zostało już zadane i czy ktoś na nie odpowiedział.
Dokumentacja jest zawarta w pakiecie DOSEMU. Główne pliki z dokumentacją (README.txt i README-tech.txt) pokrywają ogólnie wszystkie aspekty DOSEMU i mogą być bardziej aktualne niż to HOWTO.
Podręcznik pod nazwą "dosemu Novice's Altering Guide", albo w skrócie DANG stanowi mapę wewnętrznego sposobu działania dosemu. Jest on przeznaczony dla żądnych przygody, dla tych którzy chcą modyfikować kod źródłowy. DANG jest pod opieką Alistair MacDonald ( alistair@slitesys.demon.co.uk) i można go znaleźć w katalogu doc w drzewie katalogów dosemu.
Lista niepowodzeń EMU (EMUfailure.txt) jest listą programów, o których wiadomo, że NIE działają DOSEMU.
No i oczywiście jest dosemu FAQ/HOWTO. Ale o tym już wiesz, nie? Jest ono wysyłane raz na jakiś czas na listę dyskusyjną i znajduje się też w katalogu doc w drzewie katalogów dosemu. Najnowsza wersja oryginału znajduje się pod adresem www.dosemu.org.
Najpierw sprawdź czy powodem nie jest coś co wiadomo, że nie działa w DOSEMU, wymienione w EMUfailure.txt. Jeśli uważasz, że znalazłeś coś nowego, to zgłoś to do linux-msdos@vger.rutgers.edu. Możliwe, że uda się to uruchomić z pomocą innych. Podaj szczegółowe informacje na temat twojej konfiguracji, wersję jądra, DOSEMU itp. No i podaj też zaobserwowane błędy. Możesz użyć xdos, żeby przekleić myszką błędy, ale postaraj się utrzymać czytelność raportu. Znamy też zawartość pliku ../etc/config.dist więc wyślij tylko te linijki z dosemu.conf, które mają jakieś znaczenie. Spróbuj uruchomić DOSEMU z trybem śledzenia (debug mode) i przyślij nam najpierw tylko te części, które wydają się mieć związem z problem. Naprawdę mało ludzi ma ochotę wczytywać się w czyjeś długie załączniki, żeby wyśledzić co jest nie tak. Ale trzymaj te logi pod ręką w razie gdyby się ktoś dopytywał szczegółów.
Preferowaną metodą jest edycja pliku dosemu-HOWTO-xx.x.sgml, żeby nanieść zmiany, stworzenie pliku z różnicami przez napisanie czegoś takiego:
diff -uw plik-oryginalny plik-nowy > zmiany
i wysłanie pliku zmiany na adres
davidhodges@altavista.iname.com.
Jeśli nie znasz SGML-a, to nie szkodzi. Zmiany będą akceptowane w
jakiejkolwiek formie. Stworzenie pliku "zmiany", to po prostu
ułatwienie życia opiekunowi HOWTO. :-)
O ile nie stwierdza się inaczej, dokumenty HOWTO są chronione prawami autorskimi ich autorów. Mogą one być rozprowadzane w całości lub w części, w jakiejkolwiek postaci fizycznej czy elektronicznej tak długo, dopóki znajduje się w nich ta wzmianka. Dystrybucja komercyjna jest dozwolona, a nawet zachęca się do niej; chociaż autor chciałby być poinformowany o takowej.
Wszelkie tłumaczenia, prace pochodne, prace zebrane zawierające dokumenty HOWTO muszą zawierać tę notatkę o prawach autorskich. Oznacza to, że nie możesz stworzyć pracy pochodzącej z HOWTO i nałożyć na jej dystrybucję dodatkowych ograniczeń. Wyjątki od tej zasady mogą być uczynione pod pewnymi warunkami; skontaktuj się z koordynatorem programu Linux HOWTO pod niżej podanym adresem.
Krótko mówiąc, chcemy promować szerzenie tych dokumentów przez wszelkie dostępne kanały. Chcielibyśmy także utrzymać prawa autorskie nałożone na te dokumenty, i być powiadomieni o planach dotyczących redystrybucji HOWTO.
Jeśli masz pytania skontaktuj się z Gregiem Hankisem, koordynatorem programu Linux HOWTO pod adresem gregh@sunsite.unc.edu(11/8/95).
Znajdują się one w pliku "QuickStart" dołączonym do dystrybucji.
Poczynając od wersji 0.64.4 nie ma już obsługi formatu a.out. Jeśli koniecznie jej potrzebujesz, musisz użyć wersji 0.64.3.1. Skrypt konfiguracyjny powinien się tym zając jeśli masz standardową konfigurację.
Marty Leisner (leisner@sdsp.mc.xerox.com) zgłosił (8/4/95)
"Jeśli masz problemy z pamięcią, np. kończy się swap, to możesz
dodać wyrażenie CFLAGS+=-fno-inline za definicją CFLAGS w
pliku dpmi/Makefile. Bądź ostrożny i sprawdź czy masz
swap. Przekonałem się, że Linux często pada jeśli nie ma swap-u."
Przypuszczalnie zainstalowałeś swoją wersję biblioteki Slang i podczas kompilacji miałeś ustawienie slangforce off w pliku Makefile. Musisz to zmienić na slangforce on.
W pliku compiletime-settings.help znajdziesz opis takich opcji. W README.txt znajdziesz opis opcji, które możesz zmieniać po kompilacji.
Nie. Chociaż DOSEMU porzuca przywileje root-a gdzie tylko jest to możliwe. Bezpieczniej jest nie uruchamiać DOSEMU jako root, szczególnie jeśli uruchamiasz w nim programy korzystające z DPMI. Większość programów nie potrzebuje, żeby DOSEMU działało z przywilejami root-a, szczególnie jeśli uruchamiasz DOSEMU pod X-ami. Nie powinieneś pozwalać użytkownikom na uruchamianie wersji suid root jeśli to tylko możliwe, a tylko wersję bez uprawnień root-a. Można to skonfigurować dla każdego użytkownika osobno w pliku /etc/dosemu.users.
Programy, które wymagają bezpośredniego dostępu do portów sprzętu (np. jeśli jakiś program musi komunikować się ze sprzętem nie obsługiwanym przez Linuksa i DOSEMU) wymagają, aby DOSEMU działało z prawami root-a. Ale drukarki, porty szeregowe, myszy i karty graficzne (i w małym zakresie dżwiękowe) są emulowane przez DOSEMU i nie potrzeba bezpośredniego dostępu do sprzętu. Nie potrzeba wtedy także praw root-a, aby to działało.
Jeśli łatasz dosemu z jednej wersji do drugiej, napisz "make pristine;./configure; make". Jeśli nie napiszesz "make pristine", przynajmniej nowa wersja wykonywalna będzie zła jeśli całość się w ogóle skompiluje(9/2/97).
Wszystkie wersje DOS-a powinny działać z DOSEMU, jednak z pewnymi kruczkami:
FreeDOS nie ma jeszcze działającego przekierowywania, więc nie będziesz mógł mieć dostępu do partycji Linuksa czy do Novella. Pamiętaj też, że FreeDOS to wersja bardzo beta i może się wywalić kiedykolwiek psując system plików itp., itd.
DOS 4.01 miał problemy sam w sobie więc także w DOSEMU nie będzie działał.
MsDos-7 czyli Win 95 także działa, ale zakładając, że nie masz włączonego logo startowego i nie wystartujesz środowiska graficznego. Jeśli uczynisz obraz dysku startowym tak zwaną "dyskietką ratunkową", która jest ci oferowana podczas instalacji Windows-ów, będziesz miał dobre ustawienia. Jeśli użyjesz normalnej instalacji Win95, aby przenieść pliki systemowe, to zajrzyj do pliku msdos.sys zapisanym na obrazie dysku i zmień ustawienia w sekcji [Options] na takie:
[Options] Logo=0 BootGUI=0
(7/3/97)
Po pierwsze zamontuj parytcję DOS-ową jako podkatalog w drzewie Linux-a. Na przykład stwórz katalog "/dos" w Linux-ie (mkdir -m 755 /dos) i dodaj taką linię
/dev/hda1 /dos msdos umask=022
do pliku /etc/fstab. (W tym przykładzie, partycja jest zamontowana w trybie tylko-do-odczytu. Możesz go zamontować w trybie odczyt-zapis zamieniając "022" na "000" i używając w poleceniu mkdir opcji -m 777). Teraz mount /dos.
W README.txt czytamy:
można mieć jakiś katalog Linuksa z całą zawartością jako C:. Skopiuj IO.SYS, MSDOS.SYS czy co tam trzeba do tego katalogu (np. /var/lib/dosemu/bootdir), do pliku /etc/dosemu.conf wpisz:
$_hdimage = "bootdir"
i już. DOSEMU zrobi z tego przekierowany napęd i będzie mogło wystartować z niego. Przed wystartowaniem DOSEMU możesz zmodyfikować config.sys i autoexec.bat w tym katalogu. Idąc dalej; można mieć bardziej wyrafinowaną konfigurację. Zakładając, że chcesz mieć ten sam napęd co wtedy kiedy startujesz prawdziwego DOS-a, musisz poprostu zamontować tę partycję w Linuksie (np: /dos) i umieścić linki do podkatalogów w katalogu, z którego DOSEMU startuje. W ten sposób decydujesz które katalogi/pliki są widzialne w DOSEMU a które nie. Oto mały i niekompletny przykład takiej konfiguracji:
config.sys autoexec.bat command.com -> /dos/command.com io.sys -> /dos/io.sys msdos.sys -> /dos/msdos.sys dos -> /dos/dos bc -> /dos/bc windows -> /dos/windows
Jest jednak jedna wada; nie można używać w tej konfiguracji jądra DosC (FreeDOS), ponieważ nie posiada ono jeszcze działającego przekierowania (przypuszczalnie będzie kiedyś w przyszłości).
Użyj mtools. Do pliku /etc/mtools.conf dopisz linię:
drive n: file="/var/lib/dosemu/hdimage" MTOOLS_SKIP_CHECK=1 \ MTOOLS_LOWER_CASE=1 MTOOLS_NO_VFAT=1 partition=1 offset=128
Potem możesz już używać mtools, np. "mdir n:". "mcopy n:/config.emu /tmp" skopiuje plik config.emu z obrazu dysku DOS-owego do katalogu /tmp na Linuksie. Możesz go tam zmodyfikować i skopiować z powrotem. Użyj takiej litery dla dysku jaką chcesz, N: jest tylko przykładem.
W tej chwili standardowe jądro nie potrafi obsłużyć takich dysków przy pomocy programów "lredir" czy "emufs". Jest jednak łata, przy pomocy której można zamontować skompresowane pliki. Nazywa się "dmsdosfs". Można ją znaleźć w Polsce na
SUNSite Polska,
albo w USA pod adresem
sunsite.unc.edu.
Dobrym pomysłem jest też zaglądanie do katalogu incoming w poszukiwaniu nowszej wersji. Oryginalna zawartość jest pod adresem sunsite.unc.edu. Opcja "wholedisk" ze starszych wersji DOSEMU nie działa w nowszych wersjach, chociaż linia:
$_hdimage = "/dev/hda1"
może działać. Jednak ryzykujesz utratę danych na tej partycji w przypadku wywalenia się DOSEMU.
Jeśli twoja partycja DOS-owa jest już zamontowana z dostępem dla zapisu i próbujesz uruchomić dosemu z dostępem do parytcji, to wyświetli ono komunikat o błędzie i przerwie działanie. Takie zachowanie zapobiega robieniu przez Linuksa i DOS-a niezależnych zapisów na twojej partycji, co w konsekwencji zaśmieciłoby ci tylko dysk(11/8/95).
---------------------
Jeśli masz zainstalowane LILO, to powyższe nie będzie działać. Chociaż...
Thomas Mockridge (thomas@aztec.co.za) zgłosił (5/8/94)
Aby wystartować (boot) dosemu z LILO i Stacker-em 4.0 robisz małe obejście...
disk {partition "/dev/hda? ?"}
W nowszych wersjach DOSEMU musisz zmienić linię
disk {partition "/dev/hda? ?"}
na
$_hdimage = "/dev/hda1"
Holger Schemel (q99492@pbhrzx.uni-paderborn.de) zgłosił (10/2/97), że
Działa nawet dobrze pod dosemu z MS-DOS-em 6.0. Jeśli masz jakieś kłopoty, to musisz ręcznie zmodyfikować plik "DBLSPACE.INI" i zmienić literę dysku na taką jaką twój dysk otrzymuje pod dosemu.
Darren J Moffat (moffatd@dcs.gla.ac.uk) zgłosił także (27/3/94)
"...jeśli tylko możesz to używaj 6.2! Tylko upewnij się, że masz dyskietkę startową z LILO pod ręką ponieważ DOS 6{.2} zmieni MBR."
Najłatwiej użyć programu mkdexe - szczegóły znajdziesz w plik README.txt. Starym sposobem (nie wiem po co ktokolwiek miałby to robić w ten sposób, no ale tak na wszelki wypadek podaję) robi się to tak:
Jest dodatkowy program mkfatimage16, który pozwala na tworzenie nagłówków plików hdimage. Pełna informacja na ten temat znajduje się na stronie podręcznika systemowego (man/mkfatimage16.1) dołączonej do twojej dystrybucji.
Aby stworzyć obraz dysku z geometrią odpowiadającą prawdziwemu dyskowi o pojemności 32 MB wykonaj polecenie:
mkfatimage16 -k 32768 > hdimage
W większości przypadków będzie to za dużo; jeśli potrzbujesz tak dużo miejsca, to pomyśl nad wykorzystaniem przekierowania.
Zwykle dobrym pomysłem jest sformatowanie napędu po takiej operacji.
Przeczytaj README.txt i sekcję na temat portów w ../etc/config.dist
Aby móc logować każdy dostęp do portu, każdy taki dostęp wywołuje przerwanie z poza trybu vm86. To zabiera trochę czasu. Jeśli nie chcesz, żeby dostęp do portów był logowany, użyj klucza "fast" w odpowiedniej sekcji.
Tom Kimball (tk@pssparc2.oc.com) zgłosił(24/11/93)
Kilku ludzi mówiło, aby używać różnych sterowników i zasugerowało niektóre. Znalazłem parę, które wydają się działać.
oak.oakland.edu:/pub/msdos/mouse/mouse701.zip (mscmouse) oak.oakland.edu:/pub/msdos/mouse/gmous102.zip (gmouse)
Normalnie możesz używać wewnętrznego sterownika z dosemu, więc nie potrzebujesz żadnego dodatkowego sterownika do myszy w dosemu poza winemu(10/2/97).
Mark Rejhon (mdrejhon@magi.com) zgłosił(7/4/95)
Jeśli uruchomisz sterownik do myszy, a on się po prostu zawiesi (może to trwać około 30-60 sekund), ale jeśli czekasz dłużej niż minutę, aby sterownik zaczął działać, spróbuj podać w linii poleceń port COM, na którym jest mysz.
Rob Janssen (rob@pe1chl.ampr.org) zgłosił(24/3/94)
Według jmorriso@bogomips.ee.ubc.ca, "dosemu wciąż blokuje COM4 (0x2e8, IRQ 5). Portu 0x2e8 nie ma w tablicy ports{} w pliku konfiguracyjnym. Muszę uruchamiać setserial /dev/cua3 irq 5 po zakończeniu dosemu."
Jest to spowodowane BIOS-em karty VGA. Stwierdziłem to włączając śledzenie portu i wypatrzyłem kiedy się to dzieje.
Wyłącz opcję "allowvideoportaccess" w pliku konfiguracyjnym i
będzie dobrze. Jeśli będziesz miał wtedy problemy z wizją, to
spróbuj bardziej ograniczyć zasięgi portów IO (np. 40-43).
John Taylor (taylor@pollux.cs.uga.edu) zgłosił(25/5/94)
Mam Linux-a 1.1.13 i chcę wskazać dużą zaletę, którą należy chronić i należy uniknąć jej zniknięcia (moim skromnym zdaniem). Wraz z wersją 52 mogę uruchomić program "screen". Ze screen-a, mogę wywołać DOS-a -D-a. To co jest najlepsze, to to, że polecenia screen-a (polecenia z CTRL-A) wciąż działają. Oznacza to, że mogę wcisnąć CTRL-A C i otworzyć nowe okno z powłoką unix-ową i przełączać się pomiędzy nimi (DOS/UNIX). Pozwala mi to kontrolować linię szeregową poprzez dosemu bardzo efektywnie, ponieważ przełączanie się jest bardzo proste.
W pliku konfiguracyjnym dosemu.conf znajdują się linie, które przekierowują wyjście drukarki do programu lpr albo do pliku. Jeśli chcesz mieć bezpośredni dostęp do gołego żelastwa, to wykomentuj te linie i dodaj taką:
$_ports { device /dev/lp0 fast range 0x3bc 0x3bf } # lpt0
dla portu drukarki z kartą kontrolną (odpowiada to /dev/lp0), albo
$_ports { device /dev/lp1 fast range 0x378 0x37f } # lpt1
lub
$_ports { device /dev/lp1 fast range 0x278 0x27f } # lpt2
odpowiednio dla LPT1 (/dev/lp1) i LPT2 (/dev/lp2)(9/2/97).
Hans Lermen (lermen@dosemu.org) pisze:
Ale UWAGA: Linii tych nie należy po prostu _dodawać_, łańcuchy te powinny być łączone, o tak:
$_ports = "...." $_ports = $_ports, " device /dev/lp0 fast range 0x3bc 0x3bf" = Puste miejsce jest ważne.
Tak. Można skonfigurować DOSEMU dla każdego użytkownika osobno. Szczegóły znajdziesz w README.txt.
Możesz zrobić to w jeden z następujących sposobów: 1. przekieruj plik do standardowego wejścia DOSEMU, 2. użyj opcji konfiguracyjnej keystroke i opcji -I podczas uruchamiania jak to jest opisane w README.txt, aby podać znaki, które mają być zinterpretowane tak jakby były wpisane z klawiatury podczas działania DOSEMU. 3. użyj programu mkdexe, aby zrobić plik DEXE - mały system plików DOS-a zawierający tylko program do uruchomienia - szczegóły znajdziesz w README.txt.
Oto kilka dodatkowych alternatyw:
Daniel T. Schwager (danny@dragon.s.bawue.de) zgłosił(2/7/94), że
Możesz użyć różnych plików konfiguracyjnych (i różnych obrazów startowych z różnymi plikami autoexec.bat) i wywoływać dosemu w ten sposób:
$ dos -F mój_zrobiony_dosemu.conf
---------------------
Dietmar Braun (braun@math20.mathematik.uni-bielefeld.de) zgłosił(4/7/94), że
Nie ma żadnego problemu jeśli użyjesz przekierowania z dosemu. Jest możliwe przekierowania litery dysku na katalog Linux-owy podany w zmiennej środowiskowej.
Tak więc ja mam skrypt w powłoce nazwany "DOS", który robi coś takiego:
mkdir /tmp/dos.$$ DOSTMP=/tmp/dos.$$; export DOSTMP
a potem mały trick, żeby "echo $* > $DOSTMP/startup.bat" rzeczywiście zadziałało (właściwie mały programik w C, który zamienia '/' na '\' i poprawnie oznacza końce linii, i dodaje ^Z na końcu pliku), tworzy pliki startowe, dołączenia itd. w tym katalogu, a potem uruchamia dosemu. W pliku "autoexec.bat" dysk C: jest odwzorowany z obrazu dysku na ten katalog tymczasowy, który ma dołączenia dla $HOME i $PWD.
Tak więc jeśli chcę zobaczyć nazwy moich plików skróconych do wersji 8.3, mogę napisać "DOS dir" i mam zawartość mojego bierzącego katalogu. Tak więc mam pełno-wieloużytkownikowego DOS-a (nie mam żadnej partycji DOS-owej a odwzorowanie na Linux-a zachowuje odpowiednie prawa dostępu dla użytkownika) i wielozadaniowego (sesje dosemu są zupełnie niezależne). Zrobiłem tak raz, żeby móc używać sterownika do drukarki pod DOS-a. Pole df z mojego printcap-a wskazuje właściwie na program DOS-owy. Tak więc możesz nawet robić programy DOS-owe, które będą działać jako filtry dl lpr-a.
Jak zwykle preferowany jest dostęp z systemu plików Linux-a. Zamontuj dyski z Netware'a przy pomocy narzędzi Caldera's Netware albo darmowego narzędzia Volker-a Lendecke - ncpfs ( ftp.icm.edu.pl a adres macierzysty to ftp://ftp.gwdg.de:/pub/linux/misc/ncpfs). Jeśli potrzebujesz rzeczywistego dostępu do IPX-a np. aby uruchomić program "syscon" z Novell-a, przeczytaj plik ../doc/NOVELL-HOWTO.txt. W tej chwili najprawdopodobniej nie można się dostać do Netware przy pomocy FreeDOS.
Ronald Schalk (R.Schalk@uci.kun.nl) zgłosił (17/1/94), że
Tak, nie ma problemu. Tylko pamietaj, aby używać CTRL-ALT-<Fn>
do poruszania się pomiędzy wirtualnymi konsolami i możesz
uruchamiać jakiekolwiek aplikacje pod Linux-a (dosemu to też
aplikacja pod Linux-a). Prawie zawsze mam uruchomionego WP5.1 w
sesji dosemu.
[Uwaga: Użyj CTRL-ALT-F7, aby przełączyć się z powrotem do
X-ów jeśli X-y uruchomione są na 7 virtualnej konsoli.]
Jeśli masz zainstalowane X-y i udało ci się skompilować dosemu oraz
uruchomić go w trybie tekstowym, to powinieneś móc uruchomić
"xdos" lub "dos -X", żeby uruchomić je w oknie w
X-ach. Jeśli to nie działa, to sprawdź następujące punkty.
xmodmap -e "keycode 22 = 0xff08"
xmodmap -e "keycode 107 = 0xffff"
Linie te ustawiają poprawną obsługę klawiszy odpowiednio backspace
i delete.Możesz też uruchomić dosemu w kolorowym xterm-ie, co nie jest zalecane ponieważ większość kolorowych xterm-ów źle obsługuje złożone metody wyświetlania tekstu w dosemu. To nie wymaga włączonej obsługi X-ów w dosemu. Chociaż jeśli naprawdę chcesz to zrobić, to postępuj według poniższych kroków:
xmodmap -e "keycode 22 = 0xff08"
xmodmap -e "keycode 107 = 0xffff"
Linie te ustawiają poprawną obsługę klawiszy odpowiednio backspace
i delete.Marty Leisner (leisner@sdsp.mc.xerox.com) zgłosił (31/3/95)
W bazie danych xrdb mam następujące zasoby:
dosxterm*Font: vga dosxterm*geometry: 80x25 dosxterm*saveLines: 25
albo mam alias-a"dosxterm=term -fn vga -title dosxterm
-geometry 80x25 -sl 25"
Jeśli używasz metody z xrdb, to wszystko co musisz zrobić to
napisać "xterm -name dosxterm".
W tej chwili, dosemu używa rozszerzeń MIT do pamięci dzielonej. Rozszerzenia te działają tylko na lokalnym ekranie. Jeśli chcesz uruchomić dosemu na odległym ekranie, to skompiluj dosemu z ustawieniem "mitshm off" w pliku z opcjami do kompilacji po poleceniu "make pristine" albo na czystym drzewie ze źródłami.(9/2/97).
Sprawdź czy czcionki VGA, które zainstalowałeś są na liście font.dir w katalogu, w którym je instalowałeś:
hertz:~> grep misc /usr/X11R6/lib/X11/XF86Config
FontPath "/usr/X11R6/lib/X11/fonts/misc/"
hertz:~> grep vga /usr/X11R6/lib/X11/fonts/misc/fonts.dir
vga.pcf vga
vga11x19.pcf vga11x19
hertz:~> ls /usr/X11R6/lib/X11/fonts/misc/vga*
/usr/X11R6/lib/X11/fonts/misc/vga.pcf
/usr/X11R6/lib/X11/fonts/misc/vga11x19.bdf
/usr/X11R6/lib/X11/fonts/misc/vga11x19.pcf
Jeśli zainstalowałeś jakieś czcionki pod X-y, tak jak wtedy kiedy pierwszy raz instalowałeś dosemu z obsługą X-ów, musisz uruchomić programy "mkfontdir" a potem "xset fp rehash". Instalacja dosemu powinna się zająć poleceniem "mkfontdir" i poinformuje cię o "xset fp rehash". Powiedz nam jeśli ci to nie działa.
Poszukaj czcionek vga11x19. (13/2/97).
Jak już to zostało powiedziane wcześniej dosemu domyślnie używa rozszerzeń MIT do pamięci dzielonej. W XFree86 są one dostępne tylko w wersji 3.1.2 i nowszej. Jeśli masz starszą wersję, to zastanów się nad uaktualnieniem lub skonfiguruj dosemu tak, aby nie używało tych rozszerzeń (zobacz ostatnią sekcję)(9/2/97).
Marty Leisner (leisner@sdsp.mc.xerox.com) zgłosił(31/3/95), że
Tak. Używam nnansi.com pod X-ami. tryby 25-, 43- i 50-liniowe
działają poprawnie, chociaż tryb 50-liniowy jest trudny w użyciu
przy rozdzielczości 1024x768 (o ile nie użyjesz mniejszych czcionek
albo większego monitora). Tryb 43-liniowy zmieni rozmiar xterm-a
tak, aby zawierał on 43 linie.
W pliku ../doc/README.Windows czytamy:
*************************************************************** * UWAGA!!! UWAGA!!! UWAGA!!! UWAGA!!! UWAGA!!! UWAGA!!! * * * * Uwaga! Nie jest to jeszcze w pełni obsługiwane i jest * * wiele znanych błędów! Wielkie programy prawie na pewno * * NIE BĘDĄ DZIAŁAĆ!!! BĄDŹ PRZYGOTOWANY NA PADY SYSTEMU * * JEŚLI TEGO SPRÓBUJESZ!!! * * * * UWAGA!!! UWAGA!!! UWAGA!!! UWAGA!!! UWAGA!!! UWAGA!!! * ***************************************************************
No dobra, możliwe jest wystartowanie WINOS2 (zmodyfikowanej wersji Windows 3.1, której używa OS/2) pod dosemu. Wielkie dzięki dla Lutz-a & Dong-a!
Ale, POTRZEBUJESZ OBU LICENCJI, dla WINDOWS 3.1 oraz OS/2 !!!
Jest wiele znanych problemów. Windows-y bardzo często się wywalają i mogą za sobą pociągnąć dane. Wielkie programy nie będą się ładować itp., itd.
Innymi słowy nie jest to jeszcze gotowe do codziennego użytku. Wiele kart graficznych ma problemy (możesz zobaczyć miły biały ekran, chociaż poszukaj dalej win31-in-xdos). Twoje grupy programów będą znikać... Po prostu - fatalnie.
Więcej szczegółów znajdziesz w README.txt.
Przykro mi, nie. Win32 musi działać na najniższym poziomie, a to jest niewykonalne w Linuksie. (27/04/97)
Jak to już zostało wyjaśnione wcześniej winemu nie umie obsłużyć 32-bitowych programów. Wszystkie sterowniki kończące się na 386 są 32-bitowe. Aby uruchomić winemu musisz wyrzucić z pliku win.ini wszystkie odwołania do sterowników .386 (27/04/97)
Jeśli chodzi o wersję 0.64.3, to jest ona w stanie uruchomić Windows-y w xdos. Oczywiście nie jest to wcale zalecane, ale jeśli rzeczywiście chcesz spróbować, jest to bezpieczniejsze niż uruchamianie Windows 3.1 na konsoli, ponieważ _kiedy_ padnie, nie zablokuje ci klawiatury czy ekranu.
Wskazówki:
Nie, nie możesz. DOS powie ci coś w stylu:
The XMS driver you have on your system is not
compatible with Windows...
Musisz zainstalować Windows-y z DOS-a. Możesz skopiować drzewo z Windows-ami gdzieś do Linux-a i użyć lredir, aby zamontować ten katalog w tym samym miejscu, w którym jest pod dosem. Na przykład:
Masz Windows-y w d:\windows
Katalog ten jest zamontowany pod Linux-em na /dosc
Kopiujesz drzewo z Windows-ami na Linux-a,
np: "cp -a /dosd/windows/ /usr/share"
W dosemu przekierowujesz skopiowane drzewo w ten sposób:
lredir d: linux\fs\dosd
Teraz dosemu nie może mieszać w twoim katalogu z Windows-ami, ale także zmiany w tym katalogu nie są widoczne przez dosemu. Jeśli chcesz zrobić to samo z Windows-ami na C:, to zobacz w FAQ jak przekierować C:.
Ale możesz też użyć "setup-u" z katalogu Windows-ów, żeby zainstalować jakieś sterowniki lub pozmieniać jakieś ustawienia.(14/2/97)
[windows]
MouseThreshold1=0
MouseThreshold2=0
MouseSpeed=0
(10/2/97)
MS-Windows i WinOS2 różnie obsługują grupę "Program Manager". MS-Win zapisuje ustawienia w "progman.ini", WINOS2 zapisuje zawartość "progman.ini" w "system.ini". Oto wskazówka od (friest@acm.org (Todda T. Friesa)):
cat progman.ini >> system.ini
Pamiętaj żebyś użył ">>" :-)
Mark Rejhon (mdrejhon@magi.com) zgłosił(8/4/95)
Biorąc pod uwagę ostatnie poprawki w implementacji DPMI, które pojawiły się w wersji 0.60 można teraz w dosemu uruchamiać niektóre gry z 32-bitową grafiką. Jeśli gra jest kompatybilna z sesją DOS-ową w OS/2, to są spore szanse, że zadziała także w dosemu. (Przykładami takich gier są Descent, Dark Forces, Mortal Kombat 2,Rise of The Triad, Wszystkie zostały uruchomione z pozytywnym skutkiem w dosemu.)
Zanim uruchomisz jakąś grę z grafiką, klawiaturę musisz mieć skonfigurowaną na tryb surowy (raw mode) i włączone tryby graficzne VGA w pliku /etc/dosemu.conf.
Zauważ jednak, że będziesz musiał wyłączyć dźwięk w grze. (Ktoś będzie musiał zaprogramować emulację karty dźwiękowej zanim będziemy mogli tego uniknąć). Zauważ też, że odświeżanie w grze może być trochę wolne, z powodu wielozadaniowości Linux-a i braku obsługi dużej częstotliwości odświeżania.. Tak więc gry mogą działać w prędkości od 5 do 100 procent swojej mocy. Typowa prędkość, to ok. 50 procent w ostatnich wersjach dosemu i ma ostatecznie wzrosnąć.
Kto wie, może to nawet będzie działać. Jeśli nie chce ci to działać, sprawdź listę "EMUfailure" czy program tam nie występuje, albo czy nie jest w kategorii programów, które teraz ani przupuszcalnie w ogóle nie będą działać w dosemu. Jeśli sądzisz, że powinno się go wymienić na liście "EMUfailrue", to zgłoś to do linux-msdos@vger.rutgers.edu.
Jeśli włączysz DPMI i dosemu uruchamiane jest z prawem "suid root", to automatycznie robisz sobie dziurę w systemie (szczególnie jeśli używasz gier bazujących na dos4gw), klient jest w stanie dostać się do całej przestrzeni użytkownika, więc może także modyfikować kod dosemu. Włączenie opcji "secure" w pliku /etc/dosemu.conf
$_secure = "ngd" # opcja secure dla: n (zwykłych użytkowników), g (guest), d (dexe)
blokuje to. W każdym razie w X-ach lepiej jest uruchamiać DOSEMU jako zwykły użytkownik niż jako root.
(8/4/95)
Problem jest w tym, że informacje o czcionce dla tekstowego ekranu nie są zachowywane. Zdobądź pakiet "svgalib". Bieżące źródła są w SUNSite Polska.
Może też znajdować się w twojej dystrybucji Linux-a jako
prekompilowany pakiet. Użyj programu savetextmode, aby
zachować bieżący tryb tekstowy i czcionki w pliku w katalogu
/tmp zanim uruchomisz dosemu. Potem, po wyjściu z dosemu
uruchom textmode, żeby odzyskać stan sprzed uruchomienia.
Dodatek od (lermen@elserv.ffm.fgan.de(11/2/97)):
Spójrz także do src/arch/linux/debugger/README.recover i README.dosdebug, dosdebug może ci pomóc w naprawie.
W DOSEMU znajduje się szczątkowy emulator SoundBlaster (SBemu) - dokumentacja do niego znajduje się pod adresem www.slitesys.demon.co.uk/a.macdonald/dosemu/sound/. Całość jest dopiero na etapie tworzenia więc większość programów DOS-owych korzystających z dżwięku nie będzie działać poprawnie.
Hans Lermen <lermen@elserv.ffm.fgan.de> napisał:(16/2/97)
Duke3d musi być skonfigurowany przez setup. Musisz tam wybrać 'keyboard + mouse', w przeciwnym wypadku nie będzie działać.
Aby dosemu mogło być w pełni wykorzystane musi być "suid root". Większość programów DOS-owych tego nie potrzebuje. Działając pod X-ami raczej nie potrzebujesz uprawnień root-a. DOSEMU działa z takimi uprawnieniami tylko tam gdzie jest to konieczne, i jak najszybciej się takich uprawnień pozbywa. Ale w przypadku DPMI, program dos-owy ma dostęp do całego obszaru użytkownika, a więc może tez modyfikować kod dosemu. Użycie opcji 'secure on' w pliku /etc/dosemu.conf blokuje tę możliwość. Jest jeszcze kilka innych ważnych aspektów związanych z bezpieczeństwem omówionych w README.txt.
Zdarza się to wtedy kiedy program używam DPMI, a ty nie włączyłeś obsługi DPMI. Spróbuj zmienić w /etc/dosemu.conf linię:
$_dpmi = (off)
na
$_dpmi = (nnnn)
gdzie nnn jest liczbą określającą pamięć w kB, którą chcesz przeznaczyć na programy DOS-owe (Np. DOOM wymaga około 4000 kB). Jeśli to zrobisz, nie powinieneś uruchamiać DOSEMU z prawami root-a (zobacz punkt o bezpieczeństwie) - zawsze lepiej jest nie uruchamiać DOSEMU z prawami root-a jeśli to tylko możliwe.
Innym możliwym powodem jest fakt, że program taki używa VCPI (przeczytaj EMUfailure.txt), albo w inny sposób przełącza się w tryb chroniony (inaczej niż przez DPMI). W takim przypadku nigdy nie będzie działać w DOSEMU.
Jeśli żadne z powyższych nie odpowiada twojemu przypadkowi, to przeczytaj punkt 1.14 "Mam program, który nie działa i nie jest w EMUfailure.txt"
Dosemu zakłada, że wersje DOS-u na obrazie dysku oraz na napędzie, który odwzorowujesz są takie same. Jeśli nie, to dosemu padnie wcześniej czy później. Podczas wyboru jaki daje Win95 po wciśnięciu klawiszy F4, F5 lub F8 po tekście "Uruchamianie systemu Win95" wersje na dysku Win95 mogą się zamienić. Miej szczególnie na uwadze command.com. Niech zmienna "shell" w config.emu wskazuje na poprawną statyczną wersję command.com-a, np: shell=c:\win95\command.com c:\ /P /E:1024 (97/02/28)
Przełącz się na inną konsolę i uruchom program dosdebug, potem
wpisz kill - może to potrwać chwilę, ale zadziała.
Daniel Barlow(jo95004@sable.ox.ac.uk) zgłosił(8/4/95)
Jeśli nie masz terminala, ani dostępu poprzez sieć, żeby się zalogować,
możliwe, że będziesz musiał wcisnąć przycisk "RESET". Jeśli jednak
możesz w jakiś sposób dostać się do używalnej powłoki, to uruchom
"kbd_mode -a", aby przełączyć klawiaturę w tryb ASCII, i/lub
"stty sane", na konsoli żebyś widział co piszesz.
Mądrą rzeczą jest uruchamianie dosemu poprzez skrypt, w którym
polecenie "kbd_mode -a" byłoby wykonywane zaraz po zakończeniu
dosemu. Kiedy dosemu padnie, skrypt powinien wykonać polecenie
kbd_mode.
Rob Janssen (rob@pe1chl.ampr.org) zgłosił(11/7/94)
Nie zapomnij załadować dostarczanego ems.sys z pliku config.sys.
(11/8/94)
Zdobądź i zainstaluj klogd (sysklogd). Powinieneś znaleźć ten
program na
SUNSite Polska.
Aldy Hernandez (aldy@sauron.cc.andrews.edu) zgłosił(8/7/94), że
Powinieneś wyłączyć cache grafiki i/lub BIOS-u.
JyiJiin Luo (jjluo@casbah.acns.nwu.edu)(19/4/94) zgłosił
Przedtem miałem dokładnie ten sam problem. Stwierdziłem, że muszę wyłączyć całkowicie przesłanianie (shadow) grafiki w BIOS-ie. Od tej pory dosemu działa dobrze na moim systemie.
W niektórych przypadkach ciekawe efekty można uzyskać poprzez
próbowanie różnych wartości zmiennej HogThreshold w pliku
dosemu.conf.
Daniel Barlow(jo95004@sable.ox.ac.uk) zgłosił(8/4/95)
Zmienna HogThreshold powinna być teraz ustawiana na conajmniej połowę wartości BogoMips jaką wskazuje system podczas ładowania.
Vinod G Kulkarni (vinod@cse.iitb.ernet.in)(7/4/94) zgłosił, że
Kiedy CDROM jest montowany spod Linux-a i używany pod dosemu (napęd odwzorowany), mogą wystąpić problemy. Sterownik do CDROM-u (iso9660) umieszczony w jądrze próbuje zgadnąć typ pliku (tj. binarny czy tekstowy). Jeśli nie zgadnie, to próbuje dalej używając heurystyki. Metoda ta zawodzi w pewnych okolicznościach kiedy (prawie) tekstowy plik ma być potraktowany jako binarny. (Nie wiem czy to jest błąd czy zaleta.)
Wynikiem tego jest to, że jeśli skopiujesz taki plik z CDROM-u (z
Linux-a - niekoniecznie z dosemu), to plik wynikowy będzie większy
niż plik oryginalny. (Puste znaki sa dodawane przed ^J i
^M.) Więc program uruchamiany w dosemu podaje komunikat o
błędzie lub się zawiesza, co może dawać mylne wrażenie o problemach
z dosemu.
Rob Janssen (pe1chl@rabo.nl) zgłosił(10/8/94), że
Sposobem na rozwiązanie tego problemu jest wyłączenie konwersji. Podczas montowania CDROM-u dodaj opcję "-o conv=binary" do polecenia mount, albo użyj takiego wpisu w /etc/fstab:
/dev/cdrom /cdrom iso9660 conv=binary,ro
Nie są potrzebne łaty do jądra.
Co do wersji 0.60 wyniki te są przekierowywane do pliku podanego w
linii poleceń. Użyj polecenia "dos -D+a -o /tmp/debug",
aby zapisać wszystkie wyniki śledzenia w pliku
/tmp/debug. Nie powinno być już potrzeby przekierowywania
stderr.
Nick Holloway (alfie@dcs.warwick.ac.uk) zgłosił(22/2/94), że
Zdarza się to tylko jeśli uruchamiasz DOS-a na konsoli z ustawionym "istrip". Sądze, że jest to spowodowane tym, że surowe kody klawiszy są powielane przez "istrip, tak że puszczenie klawisza widziane jest jako jego wciśnięcie.
Tak, że obsługa wejściowa musi być wyłączona jeśli używasz kodów klawiszy na konsoli (nie byłoby to dobrym pomysłem na terminalu).
Przy kartach nie do końca obsługiwanych w dosemu, z włączonym dostepem do grafiki na konsoli pad dosemu może pozostawić konsolę w prawie nieużywalnym stanie. Aby przygotować się na taką sytuację, Spudgun <spudgun@earthlight.co.nz> wysłał następujące rozwiązanie. Najpierw zapisz swoje rejestry z konsoli
~> cat /usr/bin/savetextmode ~> restoretextmode -w /etc/textregs ~> restorefont -w /etc/fontdata
Potem, kiedy dosemu padnie, uruchom następujący skrypt:
restoretextmode -r /etc/textregs restorefont -r /etc/fontdata restorepalette
Jeśli to nie pomoże, to nic nie pomoże.
Przekonałem się także, że uruchomiony Xserwer ustawiał moją kartę
graficzną w dziwny stan, a ten skrypt tylko pogarszał
sprawę. Myślę, że pomogła zmiana Xserwer-a i/lub uruchamianie
savetextmode na vt podczas działania X-ów.(08/04/97)
FoxPro 2.6 nie chce działać na napędach sieciowych. Alexey Naidyonov
<growler@growler.tsu.tula.ru> stwierdza:
Sądzę, że twoje pliki są na przekierowanym dysku, tak? Problem w
tym, że FoxPro nie działa na takich dyskach, ale kiedy ustawiłem
disk { partition ... } w /etc/dosemu.conf, to działał.
Dosemu tworzone jest na podstawie pracy Matthiasa Lautnera i Roberta Sandersa. Hans Lermen (lermen@elserv.ffm.fgan.de) jest odpowiedzialny za organizację najnowszej wersji dosemu.
Historia DOSEMU
Wersja Data Osoba
-------------------------------------------------
0.1 3 Września 1992 Matthias Lautner
0.2 13 Września 1992 Matthias Lautner
0.3 ??? Matthias Lautner
0.4 26 Listopada 1992 Matthias Lautner
0.47 27 Stycznia 1993 Robert Sanders
0.47.7 5 Lutego 1993 Robert Sanders
0.48 16 Lutego 1993 Robert Sanders
0.48pl1 18 Lutego 1993 Robert Sanders
0.49 20 Maja 1993 Robert Sanders
0.49pl2 18 Listopada 1993 James MacLean
0.49pl3 30 Listopada 1993 James MacLean
0.49pl3.3 3 Grudnia 1993 James MacLean
0.50 4 Marca 1994 James MacLean
0.50pl1 18 Marca 1994 James MacLean
0.52 16 Czerwca 1994 James MacLean
0.60 9 Kwietnia 1995 James MacLean
0.64.4 9 Lutego 1997 Hans Lermen
0.66.3 20 Kwietnia 1997 Hans Lermen
0.98.1 9 Grudnia 1998 Hans Lermen
0.98.6 21 Marca 1999 Hans Lermen
Projekt dosemu jest rezultatem wysiłku drużynowego. Jeśli chcesz wnieść jakiś wkład, to przeczytaj DPR (dosemu Project Register). Aktualną kopię możesz znaleźć w doc/DANG.
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:
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 sie na nią zapisać, to
wyślij list o treści subscribe jtz Imię Nazwisko na adres
majordomo@ippt.gov.pl
Zmiany w tym dokumencie wprowadzone przez tłumacza to:
doc-linux-pl-2002.06.14.orig/html/Dos2Linux-HOWTO.pl.html 0100664 0001750 0001750 00000156112 06770264140 021376 0 ustar coven coven
/pub/Linux/docs/HOWTO.
Nowsza wersja zawiera uaktualnione wskazania na katalog z jądrami na
ftp.icm.edu.pl.
Więc chcesz przejść z DOS-a na Linux-a ? Dobry pomysł, ale ostrzegam: może ci to wyjść bokiem. Według mnie nie ma takiego czegoś jak "najlepszy komputer" czy "najlepszy system operacyjny"; wszystko zależy od tego do czego dana konfiguracja ma służyć. Dlatego też nie wierzę, że Linux jest najlepszym wyjściem dla każdego - nawet jeśli jest on technicznie lepszy od wielu komercyjnych systemów operacyjnych. Naprawdę nie pożałujesz Linux-a jeśli to czego szukałeś, to software do programowania, Internet, TeX... w ogóle techniczny software, ale jeśli w większości potrzebujesz software'u komercyjnego, jeśli nie czujesz się na siłach uczyć setek poleceń i wklepywać je z klawiatury, to szukaj gdzie indziej.
Linux nie jest (jak na razie) tak łatwy w użytkowaniu i konfigurowaniu jak Windows czy Mac, tak więc przygotuj się do grzebania w plikach konfiguracyjnych. Pomimo tych przestróg, powiem ci, że jestem 100% przekonany, że jeśli należysz do tej dobrej grupy użytkowników, to odnajdziesz w Linux-ie swoją komputerową Nirvanę.
Zakładam, że
bash/pub/Linux/sunsite/docs/LDP/.To HOWTO zastępuje poprzednie mini-HOWTO o tym samym tytule.
Zainstalowałeś Linux-a na PC-cie. Założyłeś sobie konto, wykonując
instrukcje podczas instalacji (jeśli nie, to wpisz adduser
teraz !!!) i Linux działa. Właśnie wpisałeś swój login
(indentyfikator) i hasło (password) i patrzysz na ekran myśląc:
"No... i co teraz?"
Teraz - nie rozpaczaj. Jesteś prawie gotów robić to samo co w DOS-ie i wiele więcej. Jeślibyś działał na DOS-ie a nie na Linux-ie zrobiłbyś jedną z tych rzeczy:
Ucieszysz się bardzo jeśli dowiesz się, że to samo można robić pod Linux-em w podobny sposób jak pod DOS-em. Pod DOS-em przciętny użytkownik używa tylko kilku poleceń z ponad 100 dostępnych; to samo można powiedzieć o Linux-ie. Jeśli przypadkowo nie znasz poleceń do wykonywania tego co jest w liście powyżej, to odpuść sobie - nie czytaj. Nie będę wyjaśniał co to katalog czy zmienna PATH.
Kilka notek zanim pójdziemy dalej:
tar -tf
<plik.tar> [plik_log] plik.tar musi być
podany, a przekierowanie wyjścia do pliku plik_log - nie.
b. od teraz skrót "PPS" oznacza "Przeczytaj Podręcznik Systemowy
man, aby uzyskać więcej informacji.
(Od tłumacza: oto trzy najczęściej używane skróty wśród "Linux-owców":
RTFM - Read The Fascinating (Fucking) Manual (Przeczytaj Fascynujący
[albo jak kto woli Pieprzony] Manual [man])
FAQ - Frequently Asked Questions - dokukment z Często Zadawanymi Pytaniami
HOWTO - dokument taki jak ten - Jak To Zrobić)Jesteś teraz gotowy, aby uczyć się Linux-a.
Nie możesz się już doczekać ? No to masz tu skrót poleceń Linux-a:
DOS Linux Uwagi
------------------------------------------------------------------------------
BACKUP tar -Mcvf device dir/ zupełnie coś innego
CD dirname\ cd dirname/ prawie ta sama składnia
COPY file1 file2 cp file1 file2 ------ " ------
DEL file rm file UWAGA: nie ma UNDELETE
DELTREE dirname rm -R dirname/ ------ " ------
DIR ls nie zupełnie ta sama
składnia
EDIT file vi file raczej ci się nie spodoba
emacs file ten jest lepszy
jstar file podobny do EDIT-a
FORMAT fdformat,
mount, umount raczej inna składnia
HELP command man command ta sama filozofia
MD dirname mkdir dirname/ prawie ta sama składnia
MOVE file1 file2 mv file1 file2 ------ " ------
NUL /dev/null ------ " ------
PRINT file lpr file ------ " ------
PRN /dev/lp0,
/dev/lp1 ------ " ------
RD dirname rmdir dirname/ ------ " ------
REN file1 file2 mv file1 file2 nie dotyczy wielu plików
RESTORE tar -Mxpvf device inna składnia
TYPE file less file o wiele lepszy
WIN startx dwa różne bieguny !!!
Linux posiada system plików - co oznacza "struktura katalogów i plików" - bardzo podobny do DOS-owego. Pliki posiadają nazwy, które podlegają specjalnym zasadom, są zapisywane w katalogach, niektóre są wykonywalne, a wśród tych większość ma różne opcje. Możesz też używać masek ('*', '?'), przekierowań strumieni oraz potoków. Jest tylko trochę mniejszych różnic.
ls (odpowiednik
DOS-owego DIR) otrzymasz listę plików w bieżącym katalogu, ale
jeśli napiszesz LS i wciśniesz <<ENTER>> to otrzymasz błąd mówiący,
że nie ma takiego polecenia.
ls.
ls -F
- na zielono jeśli masz kolorowy monitor i wydasz polecenie
ls --color
Pod DOS-em pliki z rozszerzeniem .BAK to kopie zapasowe; Pod
Linux-em takie pliki kończą sie na ~
Możesz teraz skoczyć do sekcji Tłumaczenie poleceń z DOS-a na Linux-a, ale na twoim miejscu czytałbym dalej.
Systemy typu Unix mają taki typ pliku, który nie istnieje pod
DOS-em - symboliczne dołączenie. Można to uważać za wskaźnik na
plik lub katalog i może być używany zamiast tego pliku czy
katalogu, na który wskazuje. Coś podobnego do skrótów w Win'95.
Przykładami dołączeń symbolicznych mogą być:
/usr/X11, który wskazuje na /usr/X11R6;
/dev/modem, który wskazuje na /dev/cua0 lub
/dev/cua1.
Aby utworzyć symboliczne dołączenie napisz:
ln -s <plik_lub_katalog> <nazwa_dołączenia>
Na przykład:
$ ln -s /usr/doc/g77/DOC g77podrecznik.txt
Teraz możesz wykonywać operacje na g77podrecznik.txt zamiast na
/usr/doc/g77/DOC.
Każdy plik i katalog w Linux-ie ma swoje prawa dostępu, zwane przez użytkowników DOS-a atrybutami. Postaram się przybliżyć to pojęcie i wyjaśnić co oznacza magiczne 755.
Jak wydasz polecenie ls -l to wyświetli się coś na kształt:
-rw-r--r-- 1 root root 32251 Feb 15 14:32 DOS2Linux -rw-r--r-- 1 root root 38338 Feb 20 13:15 DOS2Linux.pl.sgml -rw-r--r-- 1 root root 18144 Feb 19 18:34 Locales-HOWTO.sgml -rw-r--r-- 1 root root 1398 Feb 19 18:30 howto.dat -rw-r--r-- 1 root root 317 Feb 14 14:24 next.gif -rw-r--r-- 1 root root 37 Feb 19 20:03 plik_log -rw-r--r-- 1 root root 317 Feb 14 14:24 prev.gif -rw-r--r-- 1 root root 610 Feb 19 12:01 slowniczek -rw-r--r-- 1 root root 5655 Feb 16 21:54 slowniczek.uwagi -rw-r--r-- 1 root root 2601 Feb 18 22:29 tlumaczenie.howto -rw-r--r-- 1 root root 316 Feb 14 14:24 toc.gif -rw-r--r-- 1 root root 723 Feb 20 12:40 todo -rw-r--r-- 1 root root 1307 Feb 19 19:36 zasady
Pierwsza kolumna z lewej to właśnie wspomniane prawa dostępu, 3. i 4. to właściciel i grupa do jakiej dany plik należy. Ogólnie wygląda to tak:
- rwx rwx rwx
r - read (możliwość czytania)
w - write (możliwość zapisu)
x - execute (możliwość wykonywania, bądź dla katalogów możliwość
przeszukiwania i ustawienia go jako bieżący cd)
Oczywiście w rzeczywostości nie ma tam spacji, ale je robię dla
czytelności. W miejscu pierwszej kreski może znajdować się jedna z
liter: d, l, b, c - są to tylko najpopularniejsze. I tak oznaczają
one odpowiednio: katalog, symboliczne dołączenie, urządzenie
blokowe, urządzenie znakowe.
Dalej: od lewej: pierwsza trójka liter to prawa dla właściciela
pliku, druga trójka - dla grupy do jakiej należy plik, trzecia -
dla pozostałych użytkowników. W pierwszej i drugiej trójce mogą
się pojawić litery s lub S zamiast x - oznacza to, żeby wykonać
plik z takimi prawami jakie ma właściciel pliku albo grupa, a nie
ten kto go uruchamia. Na przykład plik /usr/bin/passwd ma
ustawione pierwsze x na s, żeby mógł dokonać zapisu do pliku
/etc/passwd, do którego może pisać tylko root, a nie zwykły
użytkownik, który uruchamia ten program.
Polecenie chmod pozwala zmieniać te prawa dostępu - jeśli
jesteś właścicielem pliku.
Podstawmy sobie następujące wartośći:
- rwx rwx rwx
421 421 421
4 2 1 - te wartości są dla s, S i t
(na temat 't' zobacz "man chmod")
Żeby ustawić jakieś prawa dostępu należy dodać do siebie te liczby, które stoją przy prawach, które chcemy ustawić, ale dla każdej trójki osobno. Trochę przykładów dla lepszego zrozumienia:
- r-x --- --- nazwa_pliku
4 1
To będzie 4+0+1, 0+0+0, 0+0+0 czyli 500. chmod 500 nazwa_pliku
zmieni prawa dostępu na odczyt i wykonywanie dla właściciela i
zabierze wszystkie prawa dla grupy i innych użytkowników.
- rwx r-x r-x nazwa_pliku
421 4-1 4-1
To będzie 4+2+1, 4+0+1, 4+0+1 czyli 755 - to jest chyba najczęstsze ustawienie.
- rws r-x r-x
421 4 1 4 1
4
To będzie 4+0+0 - najważniejsze są wartości s, S, t chyba, że ich nie ma - 4+2+1 4+0+1, 4+0+1 czyli 4755
Teraz łatwiejszy sposób na zmianę praw dostępu. Polecenie chmod może też przyjmować takie parametry:
chmod ugoa+-=rwx <plik>
I tak: u - user (właściciel pliku), g - group (grupa do jakiej plik należy), o - others (pozostała część użytkowników). + ustawia podane prawa, a - zabiera. = czyni podane prawa jedynymi prawami jakie posiada dany plik.
Przykłady:
chmod u+x <plik> - nadaje właścicielowi pliku prawo do
wykonywania go.
chmod ug+rx <plik> - nadaje właścicielowi i grupie, do której
należy plik prawa do odczytu i wykonywania
To powinno wyjaśnić wiele spraw związanych z prawami dostępu. Więcej szczegółów znajdziesz w podręczniku systemowym "man".
DOS Linux
COPY cp
DEL rm
REN mv
TYPE cat
MORE more, less - można też używać jako polecenie, nie tylko
jako filtr (ten drugi jest lepszy, ma więcej
możliwości)
Przekierowywanie strumieni i potoki wygladają tak samo.
Maski: '*', '?' oraz [znaki]
[znaki] - oznacza pokolei każdy, ale zawsze jeden, z
wymienionych w środku znaków, np:
ls *[abc] - wyświetl nazwy plików kończących się na 'a' lub 'b' lub 'c'
ls *[a-g] - wyświetli nazwy plików kończących się na jedną z
liter od a do g
nul /dev/null
prn,lst /dev/lp0, lpr
PRZYKŁADY
DOS Linux
C:\GUIDO>copy joe.txt joe.doc $ cp joe.txt joe.doc
C:\GUIDO>copy *.* total $ cat * > total
C:\GUIDO>copy fractals.doc prn $ cat fractals.doc | lpr
C:\GUIDO>del temp $ rm temp
C:\GUIDO>del *.bak $ rm *~
C:\GUIDO>ren paper.txt paper.asc $ mv paper.txt paper.asc
C:\GUIDO>type letter.txt $ more letter.txt
C:\GUIDO>type letter.txt $ less letter.txt
C:\GUIDO>type letter.txt > nul $ cat letter.txt >/dev/null
n/d $ more *.txt *.asc
n/d $ cat section*.txt
n/d - niedostępne
Uwagi:echo
$shellcp -i oraz mv -i, aby zostać ostrzeżonym,
kiedy plik ma zostać zmazany.
Aby uruchomić program podaj jego nazwę i wciśnij <<ENTER>>. Jeśli katalog (sekcja Katalogi), w którym znajduje się dany program, jest w zmiennej PATH (sekcja Inicjacja systemu), program się uruchomi. Wyjątek: W przeciwieństwie do DOS-a, pod Linux-em jeśli program znajduje się w katalogu bieżącym nie uruchomi się, o ile katalog bieżący nie jest w zmiennej PATH. Rozwiązanie: wpisz ./<prog>.
Oto jak wygląda typowy wiersz poleceń: $ polecenie -o1 -o2 ... -on par1 par2 ... parn <wejście >wyjście gdzie o1,2,...,n to opcje polecenia, a par1,2,...,n to parametry. Możliwe jest uruchomienie kilku poleceń w jednym wierszu poleceń: $ polecenie1; polecenie2; ...; polecenien
To by było wszystko na temat uruchamiania programów, gdyby nie jedna z najważniejszych zalet Unix-ów a tym samym i Linux-a czyli wielozadaniowość. Słowo to oznacza, że systemy operacyjne typu Unix mogą wykonywać kilka programów (od teraz procesów) na raz. Można uruchomić procesy w tle oraz w pierwszym planie. Można także działać na kilku sesjach na raz - to tak jakbyś pracował na kilku komputerach na raz !
- Na konsoli (czyli na komputerze, na którym jest zainstalowany
Linux) dostępnych jest standardowo 6-7 wirtualnych ekranów
(zwanych wirtualnymi konsolami); aby się pomiędzy nimi przełączać
użyj klawiszy ALT+F1..6-7, albo ALT+strzałka
- Aby uruchomić nową sesję bez opuszczania bieżącej napisz
su - <identyfikator>
Jest to pożyteczne kiedy na przykład jesteś zalogowany jako
zwykły użytkownik, a chcesz zamontować dysk (sekcja
Dyskietki) - tylko root może to zrobić
- Aby zakończyć sesję wpisz exit. Jeśli są jakieś zawieszone
zadania (zobacz dalej) zostaniesz ostrzeżony
- Aby odpalić proces w pierwszym planie napisz:
$ program [-opcje] [parametry] [<wejście] [>wyjście]
- Aby odpalić proces w tle napisz:
$ program [-opcje] [parametry] [<wejście] [>wyjście] &
- Aby zobaczyć ile jest procesów napisz:
ps
Polecenie to pokaże listę procesów aktualnie działających. Każdy
z nich ma swój niepowtarzalny numer PID (Process IDentifier)
- Aby zakończyć/zabić proces napisz
$ kill <PID>
Możesz zabić proces jeśli np. nie wiesz jak go normalnie
zakończyć. Czasami proces się stawia i nie chce dać się zabić (no ja
też bym się stawiał ;) ), ale i tak jest na niego sposób:
$ kill -9 <PID>
W dodatku powłoka (odpowiednik COMMAND.COM-u; większość używa
bash-a) pozwala na zatrzymanie lub czasowe zawieszenie procesu,
wysłanie procesu w tło, powrót procesu do pierwszego planu. W
tym kontekście procesy nazywają się "jobs" (czyli zadania).
- Aby zobaczyć ile jest zadań napisz
$ jobs
zadania są identyfikowane poprzez numer jaki nada im powłoka a
nie poprzez PID
- Aby zatrzymać proces uruchomiony w pierwszym planie
wciśnij CTRL+C lub CTRL+D - nie zawsze zadziała
- Aby zawiesić proces uruchomiony w pierwszym planie wciśnij
CTRL+Z
- Aby wysłać zawieszony proces w tło napisz
$ bg <nr_zadania>
- Aby przywrócić proces do pierwszego planu napisz
$ fg <nr_zadania>
- I jeszcze raz, aby zabić zadanie napisz:
$ kill %<nr_zadania>
Używając tych poleceń możesz jednocześnie formatować dysk, archiwizować jakieś pliki, kompresować jakieś pliki, kompilować program, albo kilka, rozpakowywać jakieś archiwum i jeszcze na dodatek mieć wiersz poleceń do swojej dyspozycji HA !! Spróbuj zrobić to pod DOS-em albo nawet Windowsami, a zobaczysz różnicę między Unixami a domowymi systemami operacyjnymi.
Aby uruchomić jakiś program na odległym komputerze, którego adres
to daleko.wielki.pl, napisz:
telnet daleko.wielki.pl
Po zalogowaniu się uruchom swoje ulubione programy. Oczywiście nie muszę mówić, że trzeba mieć konto na odległym komputerze.
Jeśli masz X11 możesz nawet uruchamiać aplikacje pod XWindows na
tamtym komputerze i wyswietlać je na swoim ekranie. Niech
daleko.wielki.pl będzie odłegłym komputerem obsługującym
XWindows, a tutaj.linux.pl twoim komputerem. Aby uruchomić z
tutaj.linux.pl program pod XWindows tak, aby uruchomił się on na
daleko.wielki.pl
xterm lub jakiś inny emulator
terminala i napisz:
xhost +wielki.daleko.pl telnet wielki.daleko.pl
DISPLAY=tutaj.linux.pl:0.0 <nazwa_programu> &zamiast
DISPLAY... możesz napisać setenv DISPLAY
tutaj.linux.pl:0.0. To zależy od powłoki na komputerze odległym.Et voila! Teraz program będzie działał na komputerze odległym, a wyniki jego działania będą wyświetlane na twoim ekranie. Nie próbuj tego robić przez łącze PPP.
Poznaliśmy już różnicę między plikami w DOS-ie i Linux-ie. Co do katalogów, to w DOS-ie katalogiem głównym jest \, natomiast w Linux-ie jest to /. Tak samo kolejne podkatalogi oznacza się aaa/sss/ddd. Przykłady: DOS: \PROGRAMS\C++\SOURCES\HELLO.CPP Linux: /home/guido/papers/geology/mid_eocene.tex
Jak zwykle '..' to katalog nadrzędny, a '.' to katalog bieżący.
Pamiętaj, że Linux nie pozwoli ci na wykonywanie poleceń cd,
rd czy md, gdzie ci się podoba. Każdy użytkownik zaczyna pracę w
systemie w swoim domowym katalogu nadanym mu przez administratora;
np. u mnie jest to: /home/guido.
Katalogi także mają swoje prawa dostępu. To czego dowiedziałeś się
z sekcji
Prawa dostępu odnosi się
również do katalogów. Atrybut 'x' oznacza, że możesz dany katalog
uczynić katalogiem bieżącym (cd), w - możesz skasować z niego
pliki (zależnie od ich praw dostępu) albo sam katalog.
Na przykład, aby zabronić innym użytkownikom dostępu do swojego
katalogu domowego /home/guido/ napisz:
chmod o-rwx /home/guido
DOS Linux
DIR ls, find, du
CD cd, pwd
MD mkdir
RD rmdir
PRZYKŁADY
C:\GUIDO>dir $ ls
C:\GUIDO>dir file.txt $ ls file.txt
C:\GUIDO>dir *.h *.c $ ls *.h *.c
C:\GUIDO>dir/p $ ls | more
C:\GUIDO>dir \*.tmp /s $ find / -name "*.tmp"
C:\GUIDO>cd $ pwd
n/d - patrz uwaga $ cd
n/d - patrz uwaga $ cd ~
n/d - patrz uwaga $ cd ~/temp
C:\GUIDO>cd \other $ cd /other
C:\GUIDO>cd ..\temp\trash $ cd ../temp/trash
C:\GUIDO>md newprogs $ mkdir newprogs
C:\GUIDO>md \progs\turbo $ mkdir /progs/turbo
C:\GUIDO>rd newprogs $ rmdir newprogs
C:\GUIDO>rd \progs\turbo $ rmdir /progs/turbo
Uwaga 1: jeśli chcesz skasować katalog rmdir musi on być
pusty; możesz skasować katalog wraz z zawartością poleceniem
rm -r.cd i cd ~ zmienią ścieżkę bieżącą na twój
katalog domowy niezależnie od tego, gdzie jesteś w danym momencie;
polecenie cd ~/tmp zmieni bieżący katalog na
/home/twój_dom_kat/tmp. Rozumiesz zasadę ?cd - odwraca ostatnie polecenie cd.
Nigdy o tym nie myślałeś, ale DOS-owe polecenie FORMAT A: robi
o wiele więcej niż się wydaje. W rzeczywistości, kiedy wydajesz
polecenie FORMAT, to:
- sformatuje ono fizycznie dysk;
- stworzy katalog A:\ (czyli utworzy system plików na dyskietce)
- uczyni dyskietkę dostępną dla użytkownika (zamontuje ją).
Te trzy kroki są oddzielnymi zadaniami w Linux-ie. Możliwe jest
przygotowanie i używanie dyskietek w formacie MS-DOS, chociaż są
także dostępne inne formaty; najpopularniejeszym jest ext2, ale
dla dyskietek lepszy jest minix. Oto sposób w jaki można
przygotować dyskietkę (standardową 1.44 MB) do pracy:
- musisz się zalogować jako root,
- fdformat /dev/fd0H1440 lub mformat a: - żeby mieć dyskietkę w
formacie MS-DOS
- przed rozpoczęciem używania dyskietki musisz ją zamontować:
mount /dev/fd0 /mnt
katalog /mnt musi istnieć.
Teraz możesz używać dyskietki; jej obraz jest w katalogu /mnt.
BARDZO WAŻNE - zanim wyjmiesz dyskietkę ze
stacji - odmontuj ją:
umount /mnt
Oczywiście musisz formatować tylko nieużywane dyskietki. Jeśli
chcesz korzystać ze stacji B: to zamień wszędzie fd0 na fd1.
Wszystko co robiłeś poprzez A: czy B: robi się teraz poprzez katalog /mnt. Przykłady:
DOS Linux C:\GUIDO>dir a: $ ls /mnt C:\GUIDO>copy a:*.* \docs\temp $ cp /mnt/* /docs/temp C:\GUIDO>copy *.zip a:\zip $ cp *.zip /mnt/zip C:\GUIDO>a: $ cd /mnt A:\> /mnt$
Nie muszę chyba mówić, że tak jak możesz zamontować dyskietkę tak
i możesz zamontować dowolne urządzenie z danymi. (dysk twardy,
CD-ROM, taśma itp.) Spójrz do katalogu /dev, żeby zobaczyć jakie
możesz montować urządzenia. (UWAGA: jest tam około 1000 plików,
lepiej użyj ls /dev | less).
Np. Aby zamontować CD-ROM napisz
mount -t iso9660 /dev/cdrom /cdrom
To był "oficjalny" sposób na montowanie dyskietek, ale jest inny sposób - łatwiejszy. Ponieważ jest to uciążliwe ciągle się przełączać na root-a po to, aby zamontować dyskietkę - każdemu użytkownikowi możemy pozwolić na montowanie dyskietek. W taki sposób:
/mnt/a, /mnt/a: i /mnt/cdrom/etc/fstab nastepujące linie:
/dev/cdrom /mnt/cdrom iso9660 ro,user,noauto 0 0 /dev/fd0 /mnt/a: msdos user,noauto 0 0 /dev/fd0 /mnt/a ext2 user,noauto 0 0
Teraz żeby zamontować dyskietkę z systemem MS-DOS, ext2 albo CD-ROM napisz:
$ mount /mnt/a: $ mount /mnt/a $ mount /mnt/cdrom
/mnt/a, /mnt/a: i /mnt/cdrom są teraz
dostępne dla każdego użytkownika. Zauważyłem, że aby móc pisać do
/mnt/a od razu po przygotowaniu dyskietki trzeba napisać:
# mount /mnt/a # chmod 777 /mnt/a # umount /mnt/a
Pamiętaj, że udostępniając w ten sposób użytkownikom dyskietki robisz wielką dziurę w bezpieczeństwie systemu.
Teraz jak już umiesz się posługiwać dyskietką, kilka słów na temat
archiwizacji danych. Jest kilka pakietów, które mogą ci pomóc, ale
ten najpopularniejszy i najłatwiejszy do archiwizowania na wielu
nośnikach to tar.
# tar -M -cvf /dev/fd0H1440 /katalog_do_arch
Upewnij się, że dyskietka jest sformatowana i kilka innych jest gotowych. Aby odarchiwizować dane włóż dyskietkę do stacji i napisz:
# tar -M -xpvf /dev/fd0H1440
W DOS-ie są dwa pliki systemowe, które sa odpowiedzialne za konfigurację systemu podczas startu, ustawienie zmiennych i ewentualnie uruchomienie jakichś programów.
W Linux-ie jest o wiele więcej takich plików, z których kilku nie powinieneś ruszać dopóki nie będziesz wiedział dokładnie co robisz. Oto te najważniejsze:
PLIKI UWAGI /etc/inittab nie dotykaj ! /etc/rc.d/* nie dotykaj !
Jeśli wszystko czego chcesz, to ustawienie zmiennej PATH czy innej albo zmiana wyglądu komunikatu "login" albo automatyczne odpalenie jakiegoś programu podczas wlogowywania się, to zajrzyj do tych plików:
PLIK UWAGI
/etc/issue ustawia format komunikatu "login"
/etc/motd ustawia komunikat wyświetlający się
zaraz po wlogowaniu się
/etc/profile powłoka bash/sh - ustawia globalnie
(dla wszystkich użytkowników) różne zmienne
/etc/csh.cshrc to samo dla powłoki tcsh/csh - z tego
pliku nie może być nic wyświetlane na ekran
/etc/csh.login powłoka tcsh/csh - stąd możesz wyświetlać na ekran
/home/twoj_dom_kat/.profile powłoka bash/sh - robi to co chcesz
/home/t_d_k/.cshrc patrz wyżej - z tą różnicą, że
ustawienia dotyczą tylko ciebie
/home/t_d_k/.login -----"------
Jeśli pliki .login albo .profile istnieją, to zostaną przeczytane po zalogowaniu się na końcu i zostaną wykonane zawarte w nich polecenia (Coś jakby AUTOEXEC.BAT)
Przykład - spójrz na ten plik .profile:
# Jestem sobie komentarzem
echo Środowisko:
printenv | more # ekwiwalent polecenia SET pod DOS-em
alias d='ls -l' # chyba rozumiesz, co to jest alias
alias up='cd ..'
echo "Przypominam ci, że zmienna PATH zawiera: "$PATH
echo "Miłego dnia, "$LOGNAME
PATH i LOGNAME - tak, zgadłeś - to są zmienne środowiskowe
# To jest funkcja w powłoce
ctgz() # Wyświetla zawartość archiwum .tar.gz
{
for file in $*
do
gzip -dc ${file} | tar tf -
done
}
# koniec pliku .profile
Pod Linux-em wirtualnie wszysto można ustawić tak, jak chcesz.
Większość programów ma jeden lub więcej plików startowych, w
których możesz poustawiać różności. Często jest to
˙nazwa_programurc w twoim katalogu domowym. Zauważ, że są
one ukryte; pliki ukryte wyświetla się ls -a. Niektóre
programy, jak tin, elm, netscape, xfm tworzą katalogi .nazwa
i tam umieszczają swoje pliki startowe.
Pierwsze, które będziesz chciał modyfikować to:
~/.joerc - joe to bardzo popularny edytor - polecam
~/.xinitrc - używany podczas uruchamiania Xwindows (jeśli masz
mniej niż 8MB RAM-u to lepiej nie uruchamiaj) poleceniem
startx
~/.fvwmrc - używany przez menedżera okienek fvwm. Przykład
możesz znaleźć w
/usr/lib/X11/fvwm/system.fvwmrc
~/.xfm - używany przez menedżera plików xfm pod
Xwindows
~/.Xdefault - używany przez emulator terminala pod X - rxvt
Pamiętaj ! Dla tych wszystkich plików i innych, które spotkasz w przyszłości - PPS
Jeśli używałeś plików .BAT, aby ułatwić sobie życie (Ja używałem i to dużo), to to samo można zrobić w Linux-ie używając aliasów - zobacz przykład wyżej. Ale jeśli twoje pliki .BAT były bardziej skomplikowane, to polubisz programowanie w powłoce - jest tak samo wydajne jak QBasic, jeśli nie bardziej. (nawet jeśli nie używałeś bardziej skomplikowanych plików .BAT, to i tak będziesz z czasem programował w powłoce. Chociażby dlatego, że wszelkie wersje instalacyjne programów pod Linux-a są napisane w skryptach.) Powłoka ma takie elementy jak: zmienne, instrukcje while, case, for, if...then...else i wiele innych, co może być alternatywą nawet dla dobrego języka programowania.
Aby napisać skrypt, wszystko co musisz zrobić, to napisać zwykły plik
tekstowy zwierający polecenia, zapisać go i uczynić wykonywalnym.
To ostatnie możesz zrobić poleceniem: chmod u+x <nazwa>
Aby go wykonać wpisz jego nazwę - pamiętaj, że Linux nie widzi
plików w katalogu bieżącym więc dodaj ./ na początku nazwy, albo
dodaj katalog bieżący '.' do zmiennej PATH.
Słowo ostrzeżenia: Standardowy edytor systemowy 'vi' nie jest
najszczęśliwszym edytorem - szczególnie jeśli ktoś jest
przyzwyczajony do takich edytorów jak ne.exe czy te spod
środowiska Pascal/C++. Jak już to radziłem wcześniej lepiej używać
joe, który jest dostępny w każdej standardowej dystrybucji.
Na wszelki wypadek powiem, że:
- aby coś wpisać w 'vi' trzeba najpierw nacisnąć 'i'
- aby wyjść bez zachowania zmian: 'ESC:q!'
- aby wyjść z zachowaniem zmian: 'ESC:x'
Pisanie skryptów pod Unix-ami, to tak obszerny temat, że można by napisać książkę na ten temat (w istocie są książki na ten temat :) ), więc nie będę się tutaj dalej zagłębiaj, tylko podam przykład, który mam nadzieję przyda się i z którego możesz wyciągnąć kilka podstawowych zasad.
#!/bin/sh
# Jestem sobie komentarzem
# nie zmieniaj pierwszej linii !!! - musi tam być
echo "To jest system: `uname -a`" # użyj wyjścia polecenia uname
echo "Nazywam się $0" # zmienne wbudowane
echo "Podałeś mi następujące $# parametry: "$*
echo "Pierwszy parametr to: "$1
echo -n "Jak się nazywasz? " ; read imie
echo spójrz na róznicę: "Cześć $imie" # cytowanie z "
echo spójrz na różnicę: 'Cześć $imie' # cytowanie z '
DIRS=0 ; FILES=0
for file in `ls .` ; do
if [ -d ${file} ] ; then # jeśli plik jest katalogiem
DIRS=`expr $DIRS + 1` # DIRS = DIRS + 1
elif [ -f ${file} ] ; then
FILES=`expr $FILES + 1`
fi
case ${file} in
*.gif|*jpg) echo "${file}: plik graficzny" ;;
*.txt|*.tex) echo "${file}: plik tekstowy" ;;
*.c|*.f|*.for) echo "${file}: plik żródłowy" ;;
*) echo "${file}: inny plik" ;;
esac
done
echo "Jest ${DIRS} katalogów i ${FILES} plików"
ls | grep "ZxY--!!!WKW"
if [ $? != 0 ] ; then # kod wyjścia ostatniego polecenia
echo "ZxY--!!!WKW nie znaleziono"
fi
echo "wystarczy... jeśli chcesz wiedzieć więcej, to poczytaj"
echo "podręcznik systemowy""
Chyba nie spodziewałeś się znaleźć GW czy QBasic-a na Linux-ie ??
W Unix-ach językiem systemowym i podstawowym jest C, pokochaj
albo rzuć. Wiele innych języków (FORTAN, Pascal, Lisp, Basic,
Perl, awk ale nie Turbo Pascal) są także dostępne.
Zakładając, że znasz już C, oto kilka wytycznych dla tych, którzy
wychowali się na Turbo C++ czy innym z DOS-owych braci C.
Kompilator C pod Linux-em to gcc i wcale nie ma żadnych
gwizdków, dzwonków i bajerów, ktore mają DOS-owe wersje.
Żadnego środowiska, zintegrowanej pomocy (CTRL+F1) czy
zintegrowanego debuggera itp. Jest to goły kompilator wywoływany z
wiersza poleceń; bardzo wydajny z resztą. Żeby skompilować swoje
standardowe hello.c napisz:
gcc hello.c, a jeśli chcesz mieć nazwę pliku wynikowego
taką samą jak plik źródłowy to napisz gcc -o hello hello.c.
Pierwsze polecenie utworzy plik wykonywalny a.out.
Żeby dołączyć jakąś bibliotekę dodaj opcję -l<arg>, np.
gcc -o matma matma.c -lm
Opcja -l<arg> zmusza gcc, aby dołączyło bibliotekę
/usr/lib/lib<arg>.a, tak więc -lm dołączy /usr/lib/libm.a.
To wszystko jest dobre dopóki piszesz małe programy. Ale kiedy
twój program składa się z kilku plików źródłowych, musisz użyć
narzędzia make. Załóżmy, że napisałeś jakiś interpreter: jego
plik główny to parser.c i dołącza do siebie dwa pliki parser.h i
xy.h. Chcesz używać procedur zawartych w parser.c, w programie
calc.c, który znowu dołącza parser.h. Co za bałagan ! Co musisz
zrobić aby skompilować calc.c ?
Musisz napisać tzw. Makefile, który informuje kompilator o
zależnościach pomiędzy poszczególnymi programami. W naszym
przypadku to będzie:
# Oto plik Makefile używany do kompilacji calc.c
# W miejsce <TAB> naciśnij tabulator
calc: calc.o parser.o
<TAB>gcc -o calc calc.o parser.o -lm
# calc zależy od dwóch plików objektowych: calc.o i parser.o
calc.o: calc.c parser.h
<TAB>gcc -c calc.c
# calc.o zależy od dwóch plików żródłowych: calc.c i parser.h
parser.o: parser.c parser.h xy.h
<TAB>gcc -c parser.c
# parser.o zależy od trzech plików źródłowych
# koniec pliku Makefile
Zapisz ten plik jako Makefile i napisz make aby skompilować
calc.c; możesz także zapisać go jako calc.mak i wtedy napisać
make -f calc.mak. No i oczywiście PPS :) na temat make.
Wcześniej powiedziałem, że nie ma pomocy do C. To nie całkiem prawda... niektóre funkcje są opisane w podręczniku systemowym.
Jest bardzo dużo bibliotek do C; wśród pierwszych, które będziesz chciał użyć mogą znaleźć się:
Dwie ostatnie można znaleźć pod adresami:
bloch.phys.uwm.edu/pub/xforms
www.volftp.vol.it/IT/IT/ITALIANI/MORELLO/index.htm
Te biblioteki ułatwiają bardzo programowanie pod XWindows.
Jeśli nie możesz przeżyć bez IDE a'la Borland, to zdobądź pakiet
xwpe z
ftp.icm.edu.pl w katalogu /pub/Linux/sunsite/apps/editors.
Powinieneś go polubić.
Złym pomysłem jest logowanie się jako root, żeby robić zwykłe
codzienne rzeczy. Używanie tego konta jest dość niebezpieczne i
powinno być przeznaczone tylko do administracji. Aby utworzyć
konto dla siebie wykonaj polecenie: adduser podając następnie
informacje takie jak swój identyfikator, hasło, numer grupy itp.
(wciśnij <<ENTER>> na pytania, których nie rozumiesz.)
Od tłumacza: Może się tak zdarzyć, że pojawi się komunikat
'password locked' lub coś podobnego. Zajrzyj wtedy do katalogu
/etc i zobacz czy jest tam plik .passwd.lock lub o podobnej
nazwie i skasuj go.
Teoretycznie Linux może być uruchomiony już na 2MB RAM-u. Od tłumacza: Ale ja bym nie radził uruchamiania go przy takiej ilości pamięci, z resztą obecnie chyba żadna dystrybucja nie da się zainstalować jeśli masz mniej niż 4MB RAM-u, a niektóre wymagają nawet 8MB. Ale im więcej pamięci masz tym więcej możesz zrobić. XWindows jak już wspomniałem nie będą działać w miarę sensowanie jeśli masz mniej niż 8MB RAM-u. Aby dodać sobie jeszcze 8MB wirtulanej pamięci wpisz jako root w wierszu poleceń:
# dd if=/dev/zero of=/swapfile bs=1024 count=8192
# mkswap /swapfile 8192
# sync
# swapon /swapfile
Dodaj ostatnią linię do pliku /etc/rc.d/rc.local, aby udostępnić tę pamięć za każdym razem kiedy będziesz startował Linux-a.
W Unix-ach bardzo popularnymi programami do archiwizacji i
kompresji są tar i gzip.
Aby stworzyć archiwum wpisz w wierszu poleceń:
tar cvf <nazwa_archiwum.tar> <pliki_do_zarchiwizowania>
Aby wydobyć pliki z archiwum wpisz:
tar xpvf <nazwa_archiwum.tar> <pliki>
Aby wyświetlić zawartość archiwum napisz:
tar tf <nazwa_archiwum> | less
Opcja 'v' powoduje wyświetlenie plików archiwizowanych albo wyciąganych z archiwum, jeśli nie chcesz tego, możesz ja pominąć.
Aby skompresować pliki możesz użyć compress albo gzip.
Ten pierwszy jest już przestarzały i nie powinien być używany.
compress <plik> albo gzip <plik> skompresuje plik.
uncompress <plik>.Z albo gzip -d <plik>.gz odkompresuje
plik.
Jeśli ściągasz z sieci jakiś pakiet w 99% przypadków jest to
skompresowane archiwum (xxx.tar.gz lub xxx.tgz). Żeby rozpakować i
odarchiwizować za jednym zamachem wpisz:
tar xzf xxx.tar.gz
Opcji 'z' możesz także używać przy archiwizowaniu i przeglądaniu
archiuwm skompresowanego.
Przy okazji warto powiedzieć, że pakiety te są już tak
przygotowane, że możesz je rozpakować w katalogu głównym - / i
wszystkie programy znajdą się na swoim miejscu. Zakładając
oczywiście, że nie pogrzebałeś za bardzo na swoim systemie.
Programy arj, zip, unzip, rar, unrar także są dostępne pod
Linux-em.
Mieści się tutaj już to co wspomniałem o plikach xxx.tar.gz. Dystrybucja Slackware ma swój program, który pomaga przy instalacji pakietów - pkgtool. Dystrybucja Red Hat ma rpm - trochę mniej przyjazny. Dystrybucja Debian pewnie też coś takiego ma, ale ponieważ nie miałem z nią kontaktu, więc nie wiem.
Są też aplikacje, które mają swoje własne systemy instalacji. Jak
rozpakujesz jakiś pakiet przeczytaj zawsze pliki README albo
INSTALLATION, a znajdziesz tam informacje na temat jak
zainstalować dany pakiet. Duża część pakietów jest rozprowadzana
jako źródła i musisz je najpierw skompilować. Najlepiej rozpakować
je w katalogu /usr/src przeznaczonym na źródła i tam poczytać jak
dany pakiet skompilować i zainstalować. Z reguły wszystko co
musisz zrobić to rozpakować pakiet i napisać make albo
make install. Oczywiście będziesz potrzebował kompilatora gcc.
Pamiętaj, że instalacja pakietów to zadanie dla root-a.
Dopełnianie nazw poleceń i nazw plików/katalogów. Jeśli wpiszesz nie całą nazwę polecenia i naciśniesz <TAB> to powłoka dopełni za ciebie nazwę albo wyświetli wszystkie zaczynające się na podany ciąg. Np. zamiast pisać gcc dddddddllllllllluuuuga.nazwa.pliku - na dodatek nie pomylić się w ilości d l oraz u napisz gcc ddd<TAB>.
Oglądanie zawartości ekranu, która się przesunęła do góry: Możesz
to zrobić wciskając <SHIFT+PGUP> - ile możesz obejrzeć zależy od
tego ile masz pamięci na karcie graficznej. Jeśli podasz polecenie
script <plik> to wszystko co pojawi się na ekranie znajdzie
się także w pliku <plik> dopóki nie podasz polecenia exit.
Reset ekranu: jeśli zdarzy ci się wyświetlić plik binarny to może
się to skończyć tym, że zamiast znaku zachęty będziesz miał jakieś
krzaki. Napisz wtedy na ślepo, ale dokładnie, reset albo
echo <CTRL+V> <ESC> c <ENTER> albo echo <CTRL+V> <CTRL+O> <ENTER>
Komunikaty od jądra: spójrz do pliku /var/adm/messages albo /var/log/messages jako root, aby poczytać komunikaty od jądra włączając to co pojawiło się podczas startu systemu.
Po pierwsze - gdzie je znaleźć. Ponieważ wszyscy wiecie jak się poruszać po sieci i jak używać archie-go i ftp podam wam tylko najważniejsze adresy dla Linux-a. Są to:
Pierwsze dwa mają swoje kopie w Polsce pod adresem ftp.icm.edu.pl. Zalecam ich używać - o wiele szybszy transfer. I tak:
Programy:
awk '$2 ~ "abc" {print $1, "\t", $4}' dane.dat
Wyświteli pola 1. i 4. każdej linii z pliku dane.dat, której
drugie pole = abc
jstar
będziesz miał te same przypisania do klawiszy co w WordStar
lpq
exit.
bc, cal, chsh, cmp, cut, fmt, head, hexdump, nl, passwd, printf,
sort, split, strings, tac, tail, tee, touch, uniq, w, wall, wc,
whereis, write, xargs, znew.
W przyszłości na pewno zetkniesz się z wieloma rozszerzeniami. Oto lista tych najpopularniejszych:
Gratulacje ! Łyknąłeś trochę Unix-a i jesteś gotów do pracy i eksperymentowania. Pamiętaj, że twoja wiedza na temat systemu jest bardzo mała i jesteś zobowiązany dużo ćwiczyć, żeby dobrze się posługiwać Linux-em. Ale jeśli wszystko co miałeś zrobić to pościągać aplikacje i pracować z nimi, to założę się, że to co napisałem tutaj to wystarczająco. Na dzisiaj nie wiem wiele więcej, a jakoś udaje mi się pracować z Linux-em codziennie !
Jestem pewien, że Linux ci się spodoba i dalej będziesz się go uczył i poznawał. Założę się też, że już nigdy nie wrócisz do DOS-a ! Mam nadzieję, że wyraziłem się dostatecznie jasno i zrozumiale i zrobiłem dobry uczynek dla moich trzech czy czterech czytelników.
O ile nie stwierdza się inaczej, dokumenty HOWTO są chronione prawami autorskimi ich autorów. Mogą one być rozprowadzane w całości lub w części, w jakiejkolwiek postaci fizycznej czy elektronicznej tak długo, dopóki znajduje się w nich ta wzmianka. Dystrybucja komercyjna jest dozwolona, a nawet zachęca się do niej; chociaż autor chciałby być poinformowany o takowej.
Wszelkie tłumaczenia, prace pochodne, prace zebrane zawierające dokumenty HOWTO muszą zawierać tę notatkę o prawach autorskich. Oznacza to, że nie możesz stworzyć pracy pochodzącej z HOWTO i nałożyć na jej dystrybucję dodatkowych ograniczeń. Wyjątki od tej zasady mogą być uczynione pod pewnymi warunkami; skontaktuj się z koordynatorem programu Linux HOWTO pod niżej podanym adresem.
Krótko mówiąc, chcemy promować szerzenie tych dokumentów przez wszelkie dostępne kanały. Chcielibyśmy także utrzymać prawa autorskie nałożone na te dokumenty, i być powiadomieni o planach dotyczących redystrybucji HOWTO.
Jeśli masz pytania skontaktuj się z Gregiem Hankisem, koordynatorem programu Linux HOWTO po adresem gregh@sunsite.unc.edu.
"Szybkie przejście od DOS-a do Linux-a" zostało napisane przez Guido Gonzato, Guido@ibogfs.cineca.it. Wielkie dzięki dla Matta Welsha, autora podręcznika "Linux Installation and Getting Started", dla Ian Jackson, autora "Linux frequently asked questions with answers", dla Giuseppe Zanetti, autora "Linux - Il sistema operativo FREE SOFTWARE per personal computer 386/486", dla wszystkich, którzy przysłali mi pocztę z sugestiami no i szczególne podziękowania dla Linusa Torvaldsa i GNU, którzy dali nam Linuxa !!!
Dokument ten dostarczany jest "taki jaki jest". Włożyłem wiele wysiłku, aby napisać go tak dokładnie jak tylko potrafiłem, ale wykorzystujesz informacje tu zawarte na własne ryzyko. Nie jestem odpowiedzialny w żadnym wypadku za jakiekolwiek zniszczenia wynikłe z winy korzystania z tego dokumentu. Tłumacz także nie jest odpowiedzialny za żadne zniszczenia.
Wszelkie odzewy, prośby, sugestie, krytyki itd. są mile widziane.
Ciesz się z życia ! (i z Linux-a)
Guido =8-)
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:
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/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 sie na nią zapisać, to
wyślij list o treści subscribe jtz Imię Nazwisko na adres
majordomo@ippt.gov.pl
Zmiany w tym dokumencie wprowadzone przez tłumacza to:
doc-linux-pl-2002.06.14.orig/html/Firewall-HOWTO.pl.html 0100644 0001750 0001750 00000157012 07477234140 021314 0 ustar coven coven
Dokument ten Firewall-HOWTO został napisany przez Davida Ruddera mailto:drig@execpc.com. Chciałbym Mu podziękować za zezwolenie na uaktualnienie jego pracy.
Firewalle zyskały ostatnio wielką sławę jako defintywne rozwiązanie w dziedzinie bezpieczeństwa Internetu. Większość tej sławy jest zasłużona, jednak część wynika z nieporozumienia. To JTZ ma na celu przegląd: czym są firewalle, jak je konfigurować, czym są serwery proxy i jak je konfigurować oraz aplikacje (zastosowania) tej technologii poza zakresem bezpieczeństwa.
Wszelkie uwagi będą mile widziane. Proszę: DONOŚCIE O WSZELKICH NIEŚCISŁOŚCIACH W TYM DOKUMENCIE . Jestem człowiekiem, i jestem omylny. Jeśli znajdziesz jakieś popraw je (w moim najwyższym interesie). Będę próbował odpowiedzieć na wszystkie listy, ale jestem zajętym człowiekiem, tak więc nie obrażaj się proszę jeśli nie odpowiem.
Mój adres: markg@netplus.net
NIE ODPOWIADAM ZA JAKIEKOLWIEK ZNISZCZENIA WYNIKAJĄCE ZE STOSOWANIA TEGO DOKUMENTU Dokument ten jest pomyślany jako wprowadzenie do technologii firewalli i serwerów proxy. Nie jestem, i nie zamierzam sobie rościć pretensji do bycia ekspertem w sprawach bezpieczeństwa. Jestem po prostu człowiekiem który przeczytał co nieco, i pasjonuje się komputerami bardziej niż inni. Proszę, pisząc ten tekst chcę pomóc ludziom zaznajomić się z tym tematem, i nie jestem gotów dawać głowy za dokładność podawanych przeze mnie danych.
Jeśli nie jest powiedziane inaczej, prawa autorskie dokumenty z serii Linux Jak To Zrobić należą do każdego z autorów. Mogą być powielane i rozpowszechniane w w całości w częściach, w formie ,,papierowej'' i elektronicznej dopóki wszędzie (w każdej z części) zachowana jest informacja o prawach i autorstwie. Komercyjna redystrybucja jest dozwolona i wskazana; jednakże, autor powinien być poinformowany o tym fakcie.
Wszystkie tłumaczenia, poprawki językowe, i prace włączające muszą zawierać niniejszą notę o prawach autorskich.
Jeśli masz jakieś zapytania, proszę o kontakt: Mark Grennan mailto:markg@netplus.net.
Pomimo wielu dyskusji w grupach comp.os.linux.* (w ciągu ostatniego roku) na temat firewalli wydaje mi się trudnym znalezienie informacji których potrzebowałem do ustawienia i skonfigurowania firewalla. Oryginalna wersja tego HOWto była pomocna, ale nieaktualna. Mam nadzieję, że ta poprawiona wersja ,,Firewall HOWto'' autorstwa Davida Ruddera dostarczy wszystkim informacji jakiej potrzebują do stworzenia działających ,,ścian ognia'' w ciągu godzin, nie tygodni.
Poza tym uważam że powinienem zwrócić mój dług społeczności Linuxowej.
Węzeł pajęczyny należący do Trusted Information System's (TIS) posiada wspaniała kolekcję dokumentacji dotyczącej firewalli i pokrewnych tematów.
Poza tym pracuję na projektem dotyczącym bezpieczeństwa: ,,Bezpieczny Linux''. W miejscu tym zgromadziłem wszystkie informacje, dokumentacje i programy potrzebne do stworzenia bezpiecznego Linuxa. Napisz do mnie jeśli chcesz otrzymać więcej informacji.
Firewall - ,,ściana ogniowa'' jest terminem wziętym z konstrukcji samochodu. W samochodach firewalle fizycznynie oddzielają silnik od pasażerów. To znaczy, że chronią one pasażerów w wypadku gdy silnik zapali się cały czas dostarczając kontroli nad nim.
Komputerowe firewalle są urządzeniami, które chronią sieci prywatne od części publicznej (jakiej jak Internet).
Komputer będący ,,ścianą ognia'' od tej chwili nazywany ,,firewallem'' może (musi) być obecny tak w sieci chronionej jak i w Internecie. Chroniona sieć nie może być osiągalna z Internetu, podobnie jak Internet nie może być osiągalny z chronionej sieci.
Dla niektórych dosięgnięcie Internetu z izolowanej sieci jest możliwe jedynie poprzez zalogowanie się na firewallu (telnetem) i penetracja Sieci stamtąd.
Najprostszą formą firewalla jest podwójnie zadomowiony system (tj. system z podwójnym połączeniem sieciowym). Jeśli możesz ZAUFAĆ WSZYSTKIM swoim użytkownikom, możesz prosto skonfigurować Linuxa (wyłączając przy kompilacji jądra forwarding / gatewaying) Mogą oni logować się na tym systemie i używać aplikacji sieciowych takich jak telnet, FTP, czytać pocztę i innych jakich dostarczasz.
Z takim ustawieniem, tylko jeden komputer z twojej sieci widzi resztę świata poza firewallem. Pozostałe systemy w twojej chronionej sieci nie potrzebują nawet ustawienia domyślnego routingu.
Aby powyższy firewall działał MUSISZ UFAĆ WSZYSTKIM SWOIM UŻYTKOWNIKOM Nie jest to zalecane rozwiązanie.
Problemem filtrujących firewalli jest to, że ograniczają dostęp do twojej sieci z Internetu. Tylko usługi na filtrowanie których zezwoliłeś są dostępne. Na serwerach proxych użytkownicy mogą autoryzować się na firewallu i dopiero wtedy mają (z systemu wewnątrz sieci prywatnej) dostęp do Internetu.
Poza tym, nowe typy klientów sieciowych i serwerów przybywają prawie codziennie. Musisz wtedy wynaleźć nowy sposób zezwolenia na kontrolowany ich dostęp do twojej sieci, zanim będą użyte.
Istnieją dwa typy firewalli:
Firewalle filtrujące działają na poziomie pakietów IP. Są zaprojektowane do kontroli przepływu bazując na adresie źródłowym, docelowym, porcie i typie pakietu (zawartych w każdym z pakietów).
Ten typ firewalli jest bardzo bezpieczny, ale traci wiele typów zapisu. Może zablokować ludziom z dostęp z sieci prywatnej, ale nie powie, kto dostał się do twojego systemu publicznego, ani kto wyszedł z sieci lokalnej do Internetu.
Filtrujące firewalle są bezwzględnymi filtrami. Nawet jeśli chcesz dać komuś z zewnątrz dostęp do twoich serwerów ,,prywatnych'' nie jesteś w stanie bez dania tego dostępu wszystkim (tłum. jak rozumiem spod tego adresu)
Linux posiada opcję filtrowania pakietów w jądrach powyżej 1.3.x.
Serwery proxy pozwalają na niebezpośredni dostęp do Internetu, przez firewall. Najlepszym przykładem jak to pracuje jest osoba telnetująca się do systemu i stamtąd wykonująca następne połączenie. Tylko że w wypadku serwerów proxy proces ten następuje automatycznie. Gdy łączysz się z proxy serwerem za pomocą oprogramowania klienckiego startuje on swojego klienta i dostarcza ci danych których zarządzałeś.
Ponieważ serwery proxy podwajają każde połączenie, możliwe jest zapisywanie każdego z nich.
Wspaniałą rzeczą w serwerach proxy jest to, że są w pełni bezpieczne, gdy są prawidłowo ustawione. Nie pozwalają nikomu przejść. Nie dokonują bezpośredniego routingu.
Naszym przykładem nich będzie komputer i486-DX66 z 16 Mb RAMu oraz 500Mb partycją Linuxową. System ten posiada dwie karty sieciowe, jedną połączoną z naszą siecią prywatną, a drugą do sieci lokalnej nazywanej strefą zdemilitaryzowaną (DMZ). DMZ posiada router połączony do Internetu.
Jest to całkiem przyjemny standard dla biznesu. Powinieneś użyć jednej karty sieciowej oraz modemu z PPP do intenetu.
Firewall powinien posiadać dwa adresy IP.
Znam wielu ludzi posiadających małe LANy w domu z dwoma lub trzema komputerami. Możesz rozpatrzyć następujący model: włożyć wszystkie modemy do komputera z Linuxem (np. starą i386) i połączyć wszystkie do Internetu łączem komutowanym. Z takim ustawieniem, gdy tylko jedna osoba ciągnie dane może użyć wszystkich modemów (a więc i działać 2-3 krotnie szybciej ; -).
Jeśli wszystkim czego potrzebujesz jest filtrujący firewall potrzebujesz jedynie Linuxa i podstawowych pakietów sieciowych. Jednym z pakietów który może nie zawierać się w twojej dystrybucji jest IP Firewall Administration tool (przyp. tłum. w RedHacie 4.0 i Debianie 1.2.* jest) (IPFWADM) z http://www.xos.nl/linux/ipfwadm/
Jeśli chcesz postawić serwer proxy potrzebujesz jednego z niżej wymienionych pakietów:
Trusted Information System ( http://www.tis.com) jest fragmentem kolekcji programów zaprojektowanych dla firewalli. Program ten udostępnia podobne rzeczy jak SOCK, ale jest zbudowany na innych zasadach. Tam gdzie Socks posiada jeden program przeprowadzający wszystkie transakcje s internetem, TIS dostarcza jednego programu dla każdego z narzędzi których chcesz użyć w firrewallu.
Dla pokazania kontrastu użyjmy przykładów WWW i dostępu za pomocą telnetu. Używając SOCKS, ustawiasz jeden plik konfiguracyjny i jednego demona. Używając tego pliku tak telnet jak i WWW są dostępne, podobnie jak inne usługi których nie zakazałeś.
W pakiecie TIS ustawiasz jednego demona dla (osobno) WWW i Telnetu z osobnymi plikami konfiguracyjnymi. Po zrobieniu tego inne usługi internetowe są zakazane dopóki ich explicite nie ustawisz. Jeśli demon dla specyficznych usług jest niedostępny (tak jak talk), istnieją ,,plug-in-y'' dla demona, ale nie tak elastyczne i łatwe w konfiguracji jak inne narzędzia.
Różnica wygląda na niewielką, jest jednak istotna. SOCKS pozwala Ci być spokojnym. Przy kiepsko ustawionym SOCKS serwerze ktoś z wewnątrz może uzyskać większy dostęp do Internetu niż było początkowo planowane. Z pakietem TIS ludzie wewnątrz sieci mają jedynie taki dostęp na jaki zezwolił administrator.
SOCKS są łatwiejszy do konfiguracji, łatwiejszy do kompilacji i pozwala na większą elastyczność. TIS jest bardziej bezpieczny, jesli chcesz ustawiać użytkowników wewnątrz chronionej sieci. Oba dostarczają całkowitego bezpieczeństwa z zewnątrz.
Opiszę proces instalacji obydwu.
Zacznij od świeżej instalacji twojej dystrybucji Linuxowej (ja użyłem RedHata 3.0.3 (Picasso) i poniższe przykłady bazują na tej dystrybucji). Im mniej oprogramowania zainstalujesz tym mniej będzie w nim dziur, tylnych wejść i / lub błędów wprowadzających do twojego systemu problem bezpieczeństwa, więc zainstaluj jedynie minimalny zestaw aplikacji.
Użyj stabilnego jądra. Ja użyłem 2.0.14. Oto jest dokumentacja podstawowych ustawień:
Będziesz potrzebował rekompilować jądro sytemu z odpowiednimi
opcjami. (patrz Kernel-HOWto, Ethernet-HOWto oraz NET-2 HOWto jeśli
nie zrobiłeś tego wcześniej).
Oto są sieciowe ustawienia które poznałem wykonując komendę make
config
Teraz możesz dokonać rekompilacji i reinstalacji jądra oraz zrestartować system. Twoja karta/y sieciowa/e powinny pojawić się w trakcie procedury startowej. Jesli tak się nie dzieje sprawdź w innych JTZ, i próbuj dopóki nie będą działać.
Jeśli masz dwie kary sieciowe w swoim komputerze w większości
przypadków potrzebujesz dodać twierdzenie w pliku
/etc/lilo.conf opisujące ich IRQ i adresy. W moim wypadku
wygląda to tak:
append= " ether=12,0x300,eth0 ether=15,0x340,eth1 "
Jest to naprawdę interesująca część. Teraz jest czas na podjęcie kilku decyzji. Dopóki nie chcemy dać dostępu komputerom z Internetu do żadnej z części naszej sieci lokalnej nie musimy używać prawdziwych adresów. Istnieją numery wydzielone z internetowych do ustawienia odrębnych sieci prywatnych (przyp. tłumacza: klasa A 10.0.0.0-10.255.255.255, klasy B, i klasy C: 192.168.0.0.0-192.166.255.255) Ponieważ każdy potrzebuje więcej adresów i ponieważ adres nie mogą się powtarzać w Internecie jest to dobry wybór.
Wybraliśmy jedną z tych klas: 192.168.2.xxx, i użyjemy jej w naszym przykładzie.
Twój serwer proxy będzie członkiem obu sieci i będzie przekazywał dane do i z sieci prywatnej.
199.1.2.10 __________ 192.168.2.1 192.168.2.2
_ __ _ \ | | / ____/__________
| \/ \/ | \| Firewall |/ | Stacja |
/ Internet \--------| |------------| Robocza |
\_/\_/\_/\_/ |__________| |_______________|
Jeśli używasz filtrującego firewalla możesz używać tych numerów stosując IP masquearading Firewall będzie przesyłał pakiety i tłumaczył numery IP na ,,PRAWDZIWE'' adresy w Internecie.
Musisz przydzielić prawdziwy adres IP karcie sieciowej widocznej z Internetu (na zewnątrz). I przydzielić adres 192.168.2.1 karcie Ethernetowej wewnątrz. To będzie adres IP twojego gatewaya/proxy. Możesz przydzielić pozostałym maszynom ze swojej sieci numery z zakresu 192.168.2.2-192.168.2.254.
Odkąd używam RedHat Linux
do ustawienia sieci przy starcie dodaję plik ifcfg-eth1
w katalogu /etc/sysconfig/network-scripts/. Jest on czytany
w trakcie startu systemu i ustawiania sieci i tablic routingu.
Mój ifcfg-eth1 wygląda następująco:
#!/bin/sh #>>>Device type: ethernet #>>>Variable declarations: DEVICE=eth1 IPADDR=192.168.2.1 NETMASK=255.255.255.0 NETWORK=192.168.2.0 BROADCAST=192.168.2.255 GATEWAY=199.1.2.10 ONBOOT=yes #>>>End variable declarationsMożesz także użyć tego skryptu do automatycznego połączenia modemowego do twojego IPS. Spójrz na skrypt
ipup-pop
Jeśli używasz modemu do łączenia się z siecią twój zewnętrzny adres będzie przydzielony w trakcie połączenia.
Zacznij od sprawdzenia ifconfig i trasowania (routingu)
jeśli masz dwie karty wynik polecenia ifconfig powinien
wyglądać
następująco:
#ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.0 Bcast:127.255.255.255 Mask:255.0.0.0
UP BROADCAST LOOPBACK RUNNING MTU:3584 Metric:1
RX packets:1620 errors:0 dropped:0 overruns:0
TX packets:1620 errors:0 dropped:0 overruns:0
eth0 Link encap:10Mbps Ethernet HWaddr 00:00:09:85:AC:55
inet addr:199.1.2.10 Bcast:199.1.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0
TX packets:0 errors:0 dropped:0 overruns:0
Interrupt:12 Base address:0x310
eth1 Link encap:10Mbps Ethernet HWaddr 00:00:09:80:1E:D7
inet addr:192.168.2.1 Bcast:192.168.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0
TX packets:0 errors:0 dropped:0 overruns:0
Interrupt:15 Base address:0x350
a twoja tablica trasowania mniej więcej tak:
#route -n Kernel routing table Destination Gateway Genmask Flags MSS Window Use Iface 199.1.2.0 * 255.255.255.0 U 1500 0 15 eth0 192.168.2.0 * 255.255.255.0 U 1500 0 0 eth1 127.0.0.0 * 255.0.0.0 U 3584 0 2 lo default 199.1.2.10 * UG 1500 0 72 eth0
Uwaga: 199.1.2.0 jest numerem interface po internetowej stronie firewalla zaś 192.168.2.0 jest wewnątrz.
Teraz spróbuj pingnąć się do Internetu z firewalla. Ja zwykłem używać
nic.dnn.mil jako punktu testowego (w Polsce doradzałbym
bilbo.nask.org.pl 148.81.16.51). Jest to wciąż dobry test,
ale nie dostarcza tylu informacji ile by się chciało.
Jeśli nie rusza za pierwszym razem spróbuj zapukać do innych komputerów poza swoją siecią lokalną. Jeśli nie działa to znaczy że twoje połączenie PPP jest źle ustawione. Przeczytaj jeszcze raz Net-2 HOWto i spróbuj jeszcze raz.
Następnie pingnij się z firewalla do komputera wewnątrz chronionej sieci. Każdy komputer powinien móc sondować inny. Jeśli nie spójrz jeszcze raz do Net-2 HOWto i popraw ustawienia w swojej sieci.
Teraz spróbuj pingnąć zewnętrzny adres z wewnętrznej części chronionej sieci.
(Notka: to nie jest żaden z numerów IP zaczynających się od: 192.168.2.xxx.) Jeśli jest to możliwe, to znaczy że nie wyłączyłeś przesyłania IP w konfiguracji jądra. Upewnij się, że tego chcesz. Jeśli zostawisz tę opcję włączoną, musisz zapoznać się z częścią tego dokumentu opisującą filtrowanie pakietów IP.
Teraz spróbuj sondować internet zza swojego firewalla. Użyj tego samego adresu co poprzednio (np. bilbo.nask.org.pl). Znowu, jeśli wyłączyłeś IP Forwarding nie powinno działać. Albo powinno, jeśli włączyłeś.
Jeśli masz ustawiony IP Forwarding i używasz ,,PRAWDZIWYCH'' (nie 192.168.2.*) adresów IP i nie możesz wyjść na zewnątrz, ale możesz się dostać do internetowej strony swego firewalla sprawdź czy następny router przepuszcza pakiety z twojej sieci lokalnej (twój dostawca usług internetowych powinien coś o tym wiedzieć).
Jeśli przydzieliłeś swojej sieci adresy 192.168.2.*
pakiety i tak nie będą filtrowane. Jeśli przechodzą mimo wszystko
i masz
IP masquerading włączone ten test też został zdany.
Masz teraz podstawową konfigurację systemu.
Firewall nie spełnia swojego zadania jeśli zostawia otwarte okno dla ataków przez nieużywane usługi. ,,Źli chłopcy'' mogą zdobyć twierdzę i zmodyfikować ją dla swoich potrzeb.
Zacznij wyłączać niepotrzebne usługi. Spójrz na
/etc/inetd.conf.
Plik ten kontroluje coś co jest nazywane ,,super serwerem''.
Kontroluje uruchamianie usług na żądanie.
Kompletnie wyłącz: netstat, systat, tftp, bootp oraz finger. Aby wyłączyć usługę wystarczy postawić znak # (tzw. hash) jako pierwszy znak w linii. kiedy to zrobisz wyślij sygnał HUP do procesu inetd pisząc: " kill -HUP < pid > " , gdzie < pid > jest numerem procesu inetd. Spowoduje to powtórne przeczytanie przez inetd pliku konfiguracyjnego
(inetd.conf) i restart.
Sprawdź teraz czy jesteś w stanie dostać się do portu obsługującego
netstat
telnet localhost 15
Jeśli otrzymasz wynik z netstata nie zrestartowałeś inetd
prawidłowo.
By zacząć musisz włączyć przesyłanie pakietów IP w swoim jądrze i twój system powinien odsyłać wszystko co mu się prześle. Twoja tablica trasowania powinna być ustawiona i powinieneś miś dostęp tak wewnątrz jak do zewnętrznej Sieci.
Ale budujemy firwalla tak więc trzeba ograniczyć wszystkim dostęp do niego.
W moim systemie stworzyłem parę skryptów ustawiających zasady
odsyłania pakietów i polityki dostępu. Wywołuję je z w skryptach
z /etc/rc.d
w czasie konfiguracji.
Domyślnie IP Forwarding w jądrze systemu odsyła wszystko.
Dlatego twoje skrypty startowe firewalla powinny rozpoczynać swoja
pracę od
zakazania dostępu dla wszystkich i zerwania wszelkich połączeń
dozwolonych w
poprzednim uruchomieniu ipfw.
Skrypt ten wykorzystuje pewien trick.
# # Ustawianie rozliczania i odsyłania pakietów IP # # Forwarding # # Domyślnie wszystkie usługi są zakazane. ipfwadm -F -p deny # Zerwij wszystkie połączenia ipfwadm -F -f ipfwadm -I -f ipfwadm -O -fTeraz mamy doskonały firewall. Nic nie przechodzi. Bez wątpliwości pewna cześć usług powinna być przesyłana (i tego dotyczy następny przykład).
# przesyłanie poczty do twojego MTA ipfwadm -F -a accept -b -P tcp -S 0.0.0.0/0 1024:65535 -D 192.1.2.10 25 # przesyłanie połączeń pocztowych do innych MTA ipfwadm -F -a accept -b -P tcp -S 196.1.2.10 25 -D 0.0.0.0/0 1024:65535 # przesyłanie WWW do twojego serwera /sbin/ipfwadm -F -a accept -b -P tcp -S 0.0.0.0/0 1024:65535 -D 196.1.2.11 80 # przesyłanie WWW do serwerów zewnętrznych /sbin/ipfwadm -F -a accept -b -P tcp -S 196.1.2.* 80 -D 0.0.0.0/0 1024:65535 # przesyłanie ruchu DNS /sbin/ipfwadm -F -a accept -b -P udp -S 0.0.0.0/0 53 -D 196.1.2.0/24
Możesz byc zaintersowany w rozliczaniu ruchu przechodzącego przez twój firewall. Poniższy skrypt liczy każdy z pakietów. Powinieneś dodać linię albo liczyć ruch tylko dla jednego systemu.
# Zerwanie wszystkich połączeń ipfwadm -A -f # Rozliczanie /sbin/ipfwadm -A -f /sbin/ipfwadm -A out -i -S 196.1.2.0/24 -D 0.0.0.0/0 /sbin/ipfwadm -A out -i -S 0.0.0.0/0 -D 196.1.2.0/24 /sbin/ipfwadm -A in -i -S 196.1.2.0/24 -D 0.0.0.0/0 /sbin/ipfwadm -A in -i -S 0.0.0.0/0 -D 196.1.2.0/24Jeśli potrzebowałeś firewalla filtrującego możesz skończyć lekturę. Miłego konfigurowania. ; -)
TIS FWTK jest dostępny pod adresem: ftp://ftp.tis.com/.
Nie popełnij tego błędu co ja. Kiedy dostaniesz się na serwer TIS PRZECZYTAJ ,,README'' Pakiet TIS fwtk jest w ukrytym katalogu na ich serwerze.
TIS wymaga być wysłał email do fwtk-request@tis.com zawierającego tylko słowo SEND w ,,ciele'' wiadomości aby poznać nazwę tego ukrytego katalogu (nie jest potrzebny temat dla tego listu). Ich system wyśle Ci wiadomość z nazwą katalogu w ciągu 12 godzin.
Piszę o wersji 2.0 (beta) TIS FWTK. Wersja ta kompiluje się dobrze (z pewnymi wyjątkami) i wygląda że wszystko pracuje (u mnie). Gdy zostanie opublikowana wersja pełna uaktualnię to HowTo.
Aby zainstalować FWTK stwórz katalog fwtk-2.0
w /usr/src. Przenieś tak kopię (fwtk-2.0.tar.gz)
odpakuj ją (tar zxf fwtk-2.0.tar.gz).
FWTK nie pośredniczy w przekazywaniu SSL (bezpieczne dokumenty w WWW) ale posiada dodatek napisany przez Jean-Christophe Touvet. Jest on dostępny pod adresem ftp://ftp.edelweb.fr/pub/contrib/fwtk/ssl-gw.tar.Z. Touvet nie świadczy wsparcia technicznego dla tego kodu.
Używam zmodyfikowanej wersji: włączyłem moduł dostępu do bezpiecznych serwerów news Netscape napisany przez Eric Wedel ftp://mdi.meridian-data.com/pub/tis.fwtk/ssl-gw/ssl-gw2.tar.Z.
W naszych przykładach będę używał wersji Wedel'a.
Aby go zainstalować po prostu strwóż katalog ssl-gw w
katalogu
/usr/src/fwtk-2.0 i wsadź tam odpowiednie pliki.
Kiedy instalowałem tę bramę potrzebne były drobne zmiany zanim mogłem
skompilować
resztę zestawu.
Pierwsza zmiana nastąpiła w pliku ssl-gw.c .
Nie potrafił włączyć jednego z plików include.
#if defined(__linux) #include <sys/ioctl.h> #endifDruga zmiana polegała na stworzeniu pliku
Makefile.
Skopiowałem jeden z innej ,,bramy'' i zastąpiłem nazwę tego modułu
nazwą ssl-gw.
Wersja 2.0 FWTK kompiluje się łatwiej niż poprzednie. Wciąż jednak jest kilka rzeczy które powinny być zmienione zanim wersja beta będzie się kompilować bez przeszkód. Pozostaje mieć nadzieję, że do tak się stanie w pełnej wersji.
Aby to poprawić zacznij zmiany od katalogu
/usr/src/fwtk/fwtk
i skopiuj plik Makefile.config.linux na
Makefile.config.
Nie uruchamiaj FIXMAKE. Instrukcja mówi byś to zrobił. Jeśli chcesz zniszczyć Makefile we wszystkich podkatalogach...
Wykonałem poprawkę do fixmake Problem polegał na tym,
że fixmake dodawał '.' i '' do włączanych do
Makefile
linii.
sed 's/^include[ ]*\([^ ].*\)/include \1/' $name .proto > $name
Następnie będziemy musieli wyedytować Makeconfig.file.
Potrzebne będą dwie zmiany.
Autor programu ustawił źródła programu w swoim $HOME/.
My kompilujemy w /usr/src i powinniśmy zmienić zmienną
FWTKSRCDIR.
FWTKSRCDIR=/usr/src/fwtk/fwtk
Po drugie, przynajmniej niektóre Linuxy używają bazy danych w
formacie
gdbm. W Makefile.config jest używana dbm
Zapewne będziesz musiał to zmienić.
Ja w RedHacie 3.0.3 musiałem.
DBMLIB=-lgdbmOstania poprawka jest w katalogu x-gw. Błąd w wersji beta jest w pliku
socket.c. Poprawka polega na usunięciu tych linii.
#ifdef SCM_RIGHTS /* 4.3BSD Reno and later */
+ sizeof(un_name->sun_len) + 1
#endif
Jeśli dodałeś ssl-gw do swojego katalogu źródeł trzeba
jeszcze dodać
do listy katalogów w Makefile.
DIRS= smap smapd netacl plug-gw ftp-gw tn-gw rlogin-gw http-gw x-gw ssl-gw
Teraz uruchom make.
Uruchom make install.
Standardowo katalogiem instalacyjnym jest /usr/local/etc.
Możesz to zmienić (ja tego nie zrobiłem) na bardziej bezpieczny
katalog.
Ja zmieniłem prawa dostępu do niego na chmod 700 .
Na koniec pozostała nam konfiguracja firewalla.
Teraz naprawdę rozpoczynamy. Musisz nauczyć system wywoływania tych nowych usług i stworzyć tablice do ich kontroli.
Nie próbuję przepisywać tutaj dokumentacji do TIS FWTK. Chcę pokazać takie ustawienia jakie u mnie działały i wyjaśnić problemy jakie spotkałem.
Istnieją trzy pliki kontrolujące firewalla.
Aby uzyskać poprawne funkcjonowanie FWTK powinieneś wyedytować te
pliki
poczynając od góry. Edycja jedynie services bez inetd.conf
i
netperm-table ustawionych prawidłowo uczyni twój system
niedostępnym.
Plik ten odpowiada za kontrolę kto ma dostęp do usług nadzorowanych przez TIS FWTK. Powinieneś myśleć o ruch z obu stron firewalla. Ludzie z zewnątrz twojej sieci powinni zidentyfikować się przed otrzymaniem dostępu, ale ludzie z wewnątrz mogą zostać dopuszczeni od razu.
Aby ludzie moli się zidentyfikować firewall używa programu o nazwie authsrv do trzymania bazy danych o użytkownikach i ich hasłach. Sekcja dotycząca autentyfikacji w netperm-table pozwala kontrolować gdzie jest trzymana baza danych i kto ma do niej dostęp.
Miałem trochę kłopotów z blokowaniem dostępu do usług. Weź pod
uwagę że linia
którą pokazuję używa '*' do dawania dostępu dla każdego do tej
usługi.
Prawidłowe ustawienie tej linii jest następujące:
'' authsrv: premit-hosts localhost jeśli chcesz zachować
ją pracującą.
# # tablica konfiguracji serwera proxy # # Autentyfikacja: reguły serwera i klienta authsrv: database /usr/local/etc/fw-authdb authsrv: permit-hosts * authsrv: badsleep 1200 authsrv: nobogus true # Aplikacje klienckie używające serwera autentyfikacji *: authserver 127.0.0.1 114
Aby zaincjalizować bazę danych wykonaj su do root`a i
uruchom
./authsrv w katalogu /var/local/etc
by stworzyć rekord opisujący administratora systemu.
Oto jest przykładowa sesja.
Przeczytaj dokumentację FWTK, by dowiedzieć się jak dodać użytkowników i grupy.
# # authsrv authsrv# list authsrv# adduser admin " Auth DB admin " ok - user added initially disabled authsrv# ena admin enabled authsrv# proto admin pass changed authsrv# pass admin " plugh " Password changed. authsrv# superwiz admin set wizard authsrv# list Report for users in database user group longname ok? proto last ------ ------ ------------------ ----- ------ ----- admin Auth DB admin ena passw never authsrv# display admin Report for user admin (Auth DB admin) Authentication protocol: password Flags: WIZARD authsrv# ^D EOT #Kontrola przez bramę telnetu (tn-gw) polega na prostym przesłaniu i jest to pierwsza którą powinieneś ustawić.
W moim przykładzie pozwoliłem komputerom z wnętrza sieci prywatnej na dostęp bez autentyfikacji (permit-hosts 19961.2.* -passok).
Ale inni użytkownicy powinni wprowadzić swoją nazwę użytkownika i hasło. (permit-hosts * -auth)
Poza tym pozwoliłem jednemu innemu systemowi (196.1.2.202) na
dostęp
do firewalla bezpośrednio, bez przechodzenia przez procedury na
nim.
Sprawiają to dwie linie z inetacl-in.telnetd
Wyjaśnię ich działanie potem.
Powinieneś zachować krótki czas timeoutu.
# reguły dostępu telnetu do firewalla: tn-gw: denial-msg /usr/local/etc/tn-deny.txt tn-gw: welcome-msg /usr/local/etc/tn-welcome.txt tn-gw: help-msg /usr/local/etc/tn-help.txt tn-gw: timeout 90 tn-gw: permit-hosts 196.1.2.* -passok -xok tn-gw: permit-hosts * -auth # Tylko administrator może wykonać telnet na port 24 firewalla. netacl-in.telnetd: permit-hosts 196.1.2.202 -exec /usr/sbin/in.telnetdI to samo z r-command.
# reguły dostępu rlogin do firewalla rlogin-gw: denial-msg /usr/local/etc/rlogin-deny.txt rlogin-gw: welcome-msg /usr/local/etc/rlogin-welcome.txt rlogin-gw: help-msg /usr/local/etc/rlogin-help.txt rlogin-gw: timeout 90 rlogin-gw: permit-hosts 196.1.2.* -passok -xok rlogin-gw: permit-hosts * -auth -xok # Tylko administrator może wykonać telnet na port 24 firewalla. netacl-rlogind: permit-hosts 196.1.2.202 -exec /usr/libexec/rlogind -a
Nie powinieneś dawać nikomu bezpośredniego dostępu do firewalla, włączając w to dostęp prze FTP (tak pobieranie jak i wkładanie).
Jeszcze raz, linie zawierające permit-hosts pozwalają każdemu w chronionej na wolny dostęp do Internetu, zaś wszyscy inni muszą się autentyfikować. Włączyłem zapisywanie każdego pliku pobranego i wysłanego do mojej konfiguracji.
(-log { retr stor })
Timeouty FTP dają ci kontrolę nad tym jak długo będą utrzymywane ,,złe'' połączenia i jak długo będą utrzymywane połączenia bez żadnej aktywności.
# reguły dostępu ftp do firewalla
ftp-gw: denial-msg /usr/local/etc/ftp-deny.txt
ftp-gw: welcome-msg /usr/local/etc/ftp-welcome.txt
ftp-gw: help-msg /usr/local/etc/ftp-help.txt
ftp-gw: timeout 300
ftp-gw: permit-hosts 196.1.2.* -log { retr stor }
ftp-gw: permit-hosts * -authall -log { retr stor }
WWW, Gopher i bazujące na przeglądarkach FTP jest kontrolowane
przez
http-gw. Pierwsze dwie linie tworzą katalog gdzie będą składowane
pliki i dokumenty z FTP i WWW. Przy czym są one własnością root`a
i
są składowane w katalogu dostępnym tylko dla niego.
Połączenia WWW powinny być bardzo krótki. W ten sposób można kontrolować jak długo użytkownicy będą utrzymywać błędne połączenia.
# reguły dostępu dla WWW i Gophera
http-gw: userid root
http-gw: directory /jail
http-gw: timeout 90
http-gw: default-httpd www.afs.net
http-gw: hosts 196.1.2.* -log { read write ftp }
http-gw: deny-hosts *
ssl-gw ustawia się tak samo ja i inne bramy. Bądź z nią
ostrożny.
W tym przykładzie pozwalam wszystkim z sieci chronionej na łączenie
się
z każdym z serwerów na zewnątrz z wyjątkiem adresów 127.0.0.*
i 192.1.1.*
oraz (wtedy) na otwieranie portów 443 do 563 używanych jako znane
porty
dla SSL.
# zasady dla bramy ssl:
ssl-gw: timeout 300
ssl-gw: hosts 196.1.2.* -dest { !127.0.0.* !192.1.1.*
*:443:563 }
ssl-gw: deny-hosts *
Poniżej znajduje się przykład jak użyć plug-gw aby pozwolić
na
połączenie do serwera news. W tym przykładzie zezwalam każdemu z
sieci
lokalnej na dostęp do tylko jednego systemu i tylko na porcie
zajętym przez
news.
W drugiej linii pozwalam serwerowi news przesłać dane z powrotem do chronionej sieci.
Ponieważ większość klientów spodziewa się, że pozostaje podłączenie w czasie gdy użytkownik czyta wiadomości timeout dla news powinien być długi.
# brama dla modułu plug-gw i NetNews plug-gw: timeout 3600 plug-gw: port nntp 196.1.2.* -plug-to 199.5.175.22 -port nntp plug-gw: port nntp 199.5.175.22 -plug-to 196.1.2.* -port nntp
Brama dla fingera jest prosta. Każdy z chronionej sieci powinien się załogować i wtedy pozwalamy mu na użycie fingera na firewallu. Pozostali nie po prostu dostają wiadomość.
# uruchomienie usługi finger netacl-fingerd: permit-hosts 196.1.2.* -exec /usr/libexec/fingerd netacl-fingerd: permit-hosts * -exec /bin/cat /usr/local/etc/finger.txt
Nie mam ustawionych usług dla poczty elektronicznej i X-Windows więc nie daję przykładów. Jeśli ktoś ma działający przykład, proszę o przysłanie mi.
Oto jest kompletny plik /etc/inetd.conf .
Wszystkie niepotrzebne usługi zostały wykomentowane.
Włączyłem pełny plik aby pokazać co wyłączyć i jak ustawić nową
usługę
w ścianie ognia.
{od tłumacza: nie przekładam typowych dla tego pliku linii}
#echo stream tcp nowait root internal #echo dgram udp wait root internal #discard stream tcp nowait root internal #discard dgram udp wait root internal #daytime stream tcp nowait root internal #daytime dgram udp wait root internal #chargen stream tcp nowait root internal #chargen dgram udp wait root internal # brama FTP w ścianie ognia ftp-gw stream tcp nowait.400 root /usr/local/etc/ftp-gw ftp-gw # brama Telnetu w ścianie ognia telnet stream tcp nowait root /usr/local/etc/tn-gw /usr/local/etc/tn-gw # local telnet services telnet-a stream tcp nowait root /usr/local/etc/netacl in.telnetd # brama Gophera w ścianie ognia gopher stream tcp nowait.400 root /usr/local/etc/http-gw /usr/local/etc/http-gw # brama WWW w ścianie ognia http stream tcp nowait.400 root /usr/local/etc/http-gw /usr/local/etc/http-gw # SSL w ścianie ognia ssl-gw stream tcp nowait root /usr/local/etc/ssl-gw ssl-gw # NetNews firewall proxy (using plug-gw) nntp stream tcp nowait root /usr/local/etc/plug-gw plug-gw nntp #nntp stream tcp nowait root /usr/sbin/tcpd in.nntpd # SMTP (email) w ścianie ognia #smtp stream tcp nowait root /usr/local/etc/smap smap # # Shell, login, exec and talk are BSD protocols. # #shell stream tcp nowait root /usr/sbin/tcpd in.rshd #login stream tcp nowait root /usr/sbin/tcpd in.rlogind #exec stream tcp nowait root /usr/sbin/tcpd in.rexecd #talk dgram udp wait root /usr/sbin/tcpd in.talkd #ntalk dgram udp wait root /usr/sbin/tcpd in.ntalkd #dtalk stream tcp waut nobody /usr/sbin/tcpd in.dtalkd # # Pop and imap mail services et al # #pop-2 stream tcp nowait root /usr/sbin/tcpd ipop2d #pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d #imap stream tcp nowait root /usr/sbin/tcpd imapd # # The Internet UUCP service. # #uucp stream tcp nowait uucp /usr/sbin/tcpd /usr/lib/uucp/uucico -l # # Tftp service is provided primarily for booting. Most sites # run this only on machines acting as " boot servers. " Do not uncomment # this unless you *need* it. # #tftp dgram udp wait root /usr/sbin/tcpd in.tftpd #bootps dgram udp wait root /usr/sbin/tcpd bootpd # # Finger, systat and netstat give out user information which may be # valuable to potential "system crackers." Many sites choose to disable # some or all of these services to improve security. # # cfinger is for GNU finger, which is currently not in use in RHS Linux # finger stream tcp nowait root /usr/sbin/tcpd in.fingerd #cfinger stream tcp nowait root /usr/sbin/tcpd in.cfingerd #systat stream tcp nowait guest /usr/sbin/tcpd /bin/ps -auwwx #netstat stream tcp nowait guest /usr/sbin/tcpd /bin/netstat -f inet # # Time service is used for clock syncronization. # #time stream tcp nowait root /usr/sbin/tcpd in.timed #time dgram udp wait root /usr/sbin/tcpd in.timed # # Authentication # auth stream tcp wait root /usr/sbin/tcpd in.identd -w -t120 authsrv stream tcp nowait root /usr/local/etc/authsrv authsrv # # End of inetd.conf
Tutaj się wszystko zaczyna. Gdy klient łączy się ze ścianą ognia
dzieje się to na tzw. dobrze znanym porcie (niższym od
1024).
Na przykład telnet łączy się na porcie 23. Serwer inetd
słyszy prośbę o połączenie, i szuka nazwy tej usługi w
/etc/services. Później wzywa programy wyznaczony dla tej
usługi
w /etc/inedt.conf
Niektóre z usług nie są normalnie tworzone przez wywołanie w
/etc/serwices.
Można przydzielać niektóre porty jak chcemy, Na przykład ja
przydziałem usłudze ,,telnet administratora'' (telnet-a) port 24.
Ty możesz przydzielić tę usługę na portowi 2323, jeśli chcesz.
Dla administratora (CIEBIE) bezpośrednie połączenie ze ścianą ognia
na porcie 24 nie 23 noże być potrzebne, jeśli masz ustawioną swoją
chronionej sieci.
telnet-a 24/tcp ftp-gw 21/tcp # this named changed auth 113/tcp ident # User Verification ssl-gw 443/tcp
SOCKS proxy server dostępny jest z adresu:
ftp://sunsite.unc.edu/pub/Linux/system/Network/misc/socks-linux-src.tgz.
Zawiera przykładowy plik konfiguracyjny w katalogu nazwanym:
" socks-conf " . Zdekompresuj i untaruj te pliki
w dowolnym katalogu i postępuj według instrukcji.
Miałem kilka problemów kiedy kompilowałem go. Upewnij się, że twój
Makefile jest prawidłowy.
Jedną z ważniejszych rzeczy jest pamiętanie o konieczności dodania
serwera proxy do /etc/inetd.conf.
Aby móc odpowiedzieć na żądania musisz dopisać następującą linię:
socks stream tcp nowait nobody /usr/local/etc/sockd sockd
Program SOCKS potrzebuje dwóch oddzielnych plików konfiguracyjnych. Jeden z nich mówi tym komu udzielić dostępu a drugi w jaki sposób przekazywać żądania do właściwego serwera proxy. Plik decydujący o dostępie powinien znajdować się na serwerze. Plik dotyczący przekazywania dostępu (routingu) powinien znajdować się na każdej z maszyn Unixowych. W wypadku DOSa i częściowo MaCów komputery powinny mieć swój własny routing.
W wersji 4.2 Beta SOCSKsów plik dostępu nazywa się " sockd.conf " . powinien zawierać dwie linie: zezwolenia i zakazu. Każda z linii posiada trzy pozycje:
permit lub deny
Powinieneś użyć obu: każdy we właściwej linii.
Adres IP powinien zawierać czterobajtowy adres w typowej dal IP
notacji.
np. 192.168.2.0.
Modyfikator adresu także jest normalnym IP i pracuje jak maska.
Rozwinięcie tego adresu da 32 bity (1 albo zero).
Na przykład, w tej linii:
permit 192.168.2.23 255.255.255.255zezwalam na dostęp maszynom w których adres pasuje co do bitu z zadanym: pasuje tu tylko 192.168.2.23
permit 192.168.2.0 255.255.255.0zezwala na dostęp maszynom z gdyby od 192.168.2.0 do 192.168.2.255, w formie całej klasy C.
Nie powinieneś mieć następującej linii:
permit 192.168.2.0 0.0.0.0dającej dostęp dla wszystkich adresów.
Tak więc pierwsza linia daje zezwolenie dla tych adresów którym chcesz go dać, a druga zakazuje reszcie. Aby zezwolić na dostęp wszystkim z klasy 192.168.2.xxx potrzeba linii:
permit 192.168.2.0 255.255.255.0 deny 0.0.0.0 0.0.0.0Zwróć uwagę na pierwsze " 0.0.0.0 " w linii zakazu. Z maską 0.0.0.0 taki adres nie istnieje. Wszystkie zera zostały tam wprowadzone bo są łatwe do zapisu.
Dopuszczalne jest umieszczenie większej ilości jeden zapisów w
każdej
z linii.
Konkretni użytkownicy mogą ponadto otrzymać lub tracić prawo
dostępu.
jest to wykonywane przy pomocy autentyfikacji przy pomocy
ident. Nie wszystkie systemu używają ident,
włączając w to
Trumpet Winsock , dlatego też nie włączam tu przykładów.
Dokumentacja do SOCKS jest całkiem dobra w tej kwestii.
Tablica routingu w SOCS jest niestety nazywana
socks.conf.
Tablica routingu mówi klientom SOCKS kiedy używać socks a kiedy nie. Na przykład, w twojej sieci 192.168.2.3 nie potrzebuje używania socks do połączenia z 192.168.2.1. Po prostu łączy się bezpośrednio, po Ethernecie. Definiuje się automatycznie 127.0.0.1 jako loopback. Oczywiste jest, że nie potrzebujesz rozmawiać przez ścianę ogniową z samym sobą...
Są trzy typy rekordów:
Deny mówi SOCKS kiedy ma odmówić żądaniu. Rekord ten ma
takie
same trzy pola jak sockd.conf: identyfikator, adres i
maska.
Ogólnie, dopóki jest to modyfikowane przez sockd.conf,
maska w pliku dostępu jest ustawiona na 0.0.0.0. Jeśli chcesz
pozwolić
na dzwonienie do siebie możesz to zrobić tutaj.
Rekord direct mówi które do których adresów nie używać
SOCKS.
Te adresy będą doręczone bez serwera proxy.
Jeszcze raz, mamy trzy pola: identyfikator, adres i maska.
direct 192.168.2.0 255.255.255.0W ten sposób kierujesz bezpośrednio cały ruch w chronionej sieci.
Rekord z sockd
mówi komputerowi które z hostów są serwerem SOCKS
Składnia jest następująca:
sockd @=<serverlist> <IP address> <modifier>Zwróć uwagę na fragment: @= . Pozwala on na wprowadzenie listy serwerów proxy. W naszym przykładzie używamy tylko jednego. Ale możesz mieć wiele w celu zwiększenia przepustowości i obniżenia możliwości awarii.
Pola adresu IP i maski działają jak w innych przykładach. Specyfikujesz adres i zakres jego obowiązywania.
Aby twoje aplikacje działały z serwerami proxy
potrzebujesz je zsockisy... ( " sockified " ).
Będziesz potrzebował dwóch różnych telnetów (jeden do komunikacji
bezpośredniej drugi przez serwer proxy). SOCKS przychodzą z
instrukcją jak zSOCKifikować program, i z paroma programami
przygotowanymi na tę modłę. Jeśli używasz zSOCKIfowanej wersji
gdziekolwiek bezpośrednio SOCKS automatycznie przełączy cię na
właściwą
wersję. Z tego powodu trzeba zmienić nazwy wszystkich programów w
naszej
chronionej sieci i zstąpić je wersjami
zSOCKisowanymi. Finger stanie
się finger.orig, telnet stanie się
telnet.orig i
tak dalej.
Musisz powiedzieć SOCKS o każdym w pliku include/socks.h.
Dobre programy są w stanie dostarczać tablic trasowania i zsocksifikować się same. Jednym z nich jest Netscape Navigator. Możesz używać serwerów proxy przez wprowadzenie adresu serwera (192.168.2.1 w naszym wypadku) w polu SOCKs w Menu Proxies. Każda aplikacja potrzebuje przynajmniej minimalnej informacji o tym co jest serwerem proxy.
Trumpet Winsock przychodzi z wbudowanymi możliwościami współpracy z
serwerem proxy. W
setup menu wprowadź adres serwera, i adresy
komputerów dostępnych bezpośrednio. Program przekieruje na serwer
wszystkie pakiety mające wyjść na zewnątrz.
Pakiet SOCKS pracuje jedynie z pakietami TCP, pomijając UDP.
Powoduje to trochę mniejszą jego użyteczność. Wiele użytecznych
programów, takich jak na przykład talk i Archie
używa UDP. Jest jednak pakiet
który może być użyty jako serwer proxy dla UDP: UDPrelay
stworzony
przez Toma Fitzgeralda
fitz@wang.com. Niestety w chwili
pisania tego tekstu nie jest on zgodny z Linuxem.
Serwer proxy, jak pokazałem powyżej jest
narzędziem bezpieczeństwa.
Używanie go zwiększa dostępność do Internetu z ograniczoną liczbą
adresów
wiąże się jednak z wieloma niedogodnościami. Serwer proxy
pozwala
na większą dostępność internetu z sieci chronionej, ale pozostawia
wnętrze
całkowicie niedostępne z zewnątrz. Oznacza to brak możliwości
uruchomienia
wewnątrz sieci rozmaitych serwerów, talk i archie, oraz
bezpośredniego wysyłania listów do chronionej sieci.
Poniższe uchybienia wyglądają nieznacząca, ale sposób myślenia
przebiega następująco:
Przypadek FTP pokazuje jeszcze jeden problem z serwerami
proxymi. Kiedy pobieram pliki lub wydaję komendę ls,
serwer FTP otwiera gniazdo (,,socket'') na maszynie klienckiej
i wysyła o tym informację. Serwer proxy nie pozwala na to, tak
więc FTP nie działa w sposób prawidłowy.
Poza tym serwery pośredniczące działają powoli. Z powodu większej wydajności większość innych metod dostępu do Internetu będzie szybsza.
Jeśli masz przydzielony adres IP, i nie martwisz się o bezpieczeństwo,
nie używaj ścian ogniowych i/lub serwerów proxych.
Jeśli nie masz nr. IP, i także nie martwisz się o bezpieczeństwo
swojej sieci, możesz użyć jednego z ,,emulatorów IP'' takich jak
Term, Slirp lub TIA. Term jest dostępny z
ftp://sunsite.unc.edu/, Slirp z
ftp://blitzen.canberra.edu.au/pub/slirp, zaś TIA z
http://markertplace.com/.
Pakiety te pracują szybciej, pozwalają na szybsze połączenia i na
większy dostęp z sieci wewnętrznej do internetu.
Serwery pośredniczące są dobre dla tych który mają duże sieci
z komputerami mającymi mieć dostęp ,,w locie'' do internetu
z jednorazowym ustawieniem, i minimalnym wkładem pracy potem.
Przedstawiłem jedną konfigurację, którą wypróbowałem przez stworzeniem tego dokumentu. Przy czym ten zarys powinien wystarczyć dla większości ludzi. Myślę że poniższy opis zaawansowanych konfiguracji może rozwiać pozostałe wątpliwości. Jeśli oprócz tego masz jeszcze jakieś pytania poza tym co opisałem, albo cię to po prostu interesują cię szczegóły związane ze firewallami i serwerami proxy możesz przeczytać poniższy fragment.
Powiedzmy, na przykład, że jesteś szefem milicji obywatelskiej i chcesz ,,usieciowć'' swoją siedzibę. Masz pięćdziesiąt komputerów i 32 nr IP (5 bitów). Potrzebujesz możliwości dania różnych poziomów dostępu do sieci ponieważ powierzasz swoim współpracownikom różne zadania. Poza tym będziesz potrzebował izolacji określonych miejsc w sieci od reszty.
Poziomy dostępu:
Numery IP są ustawione w następujący sposób:
Teraz budujemy dwie izolowane sieci, każda w innym pokoju. Są one trasowane przez ekranowany ethernet i są kompletnie niewidoczne z innych pomieszczeń. Na szczęście ekranowany Ethernet zachowuje się tak samo jak zwyczajny ethernet.
Każda z tych sieci jest połączona do jednej ze stacji linuxowych na dodatkowych adresach IP.
Są to serwery plików połączone do obu chronionych sieci. Jest tak, ponieważ planujemy dać dostęp tak dla sieci Troops ja i wyższej.
Serwer plików nosi numery 192.168.2.17 dla sieci Troop i
192.168.2.23 dla sieci Mercenary.
Mają różne adresy ponieważ mają dwie różne karty sieciowe.
network. IP Forwarding jest wyłączony.
IP Forwarding na obu stacjach linuxowych także jest wyłączony.
Router nie powinien przesyłać pakietów przeznaczonych dla sieci
192.168.2.xxx dopóki mu tego wprost nie powiemy, tak więc dostęp do
internetu pozostaje wyłączony. Wyłączenie przesyłania IP ma na celu
zablokowanie połączeń z sieci Troop do sieci Mercenary na odwrót.
Serwer NFS może ponadto oferować różne pliki dla różnych sieci.
To łatwe przy drobnych operacjach z symbolicznymi odniesieniami można zrobić w ten sposób że wspólne pliki są dzielone przez wszystkich. Użycie tego typu ustawień i różnych kart sieciowych umożliwia Ci zastosowanie jednego serwera plików dla trzech sieci.
Teraz, dopóki wszystkie trzy poziomu będą możliwe do pracy w ramach wyznaczonych zadań będą potrzebowały dostępu do sieci. Zewnętrzna sieć jest połączona bezpośrednio z internetem, tak więc nie ma tu zastosowania dla serwera pośredniczącego. Sieci Mercenary i Troop znajdują się za ścianą ogniową więc potrzebny im serwer proxy. Konfiguracja obu jest bardzo podobna. Oba mają takie same adresu IP. Jedyna różnica polega na nieco innych parametrach.
Tak więc w pliku sockd.conf w linuxie w sieci Troop znajdzie
się następująca linia.
deny 192.168.2.17 255.255.255.255a w stacji przeznaczonej dla Mercenary:
deny 192.168.2.23 255.255.255.255Teraz w stacji linuxowej sieci Troop wpisujemy:
deny 0.0.0.0 0.0.0.0 eq 80Ten tekst mówi że zabraniamy dostępu wszystkich maszynom próbującym się dostać do portu równego (eq) 80 (http). Nadal pozwala się na dostęp do wszystkich usług z wyjątkiem WWW.
Teraz oba pliki powinny zawierać linie:
permit 192.168.2.0 255.255.255.0by zezwolić wszystkim komputerom z sieci 192.168.2.xxx na użycie tego serwera pośredniczącego zamiast tego który został zakazany (np. serwer plików i dostęp do WWW z sieci Troop).
W sieci Troop w pliku sockd.conf powinien wyglądać w ten
sposób:
deny 192.168.2.17 255.255.255.255 deny 0.0.0.0 0.0.0.0 eq 80 permit 192.168.2.0 255.255.255.0
a w sieci Mercenary mniej więcej tak:
deny 192.168.2.23 255.255.255.255 permit 192.168.2.0 255.255.255.0
To powinno zakończyć konfigurację wszystkiego. Każda z sieci jest izolowana, z prawidłowymi ustawieniami interakcji. Każdy powinien być szczęśliwy.
Dalej... Podbij świat...
Zdaję sobie sprawę ile w tym tekscie jest potknięć językowych, przeinaczeń.
Jeśli któreś cię drażnią prześlij mi swoje uwagi.
Aha, jeszcze jedno. Wyrażenia firewall i ściana ogniowa
oraz proxy i serwer pośredniczący traktuję
(przynajmniej na razie) zamiennie. (choc już większość polskich
odpowiedników (na życzenie publiczności) usunąłem.
Celowo pozostawiam tekst bez zwyczajowego (c) tłumacza ;-)
doc-linux-pl-2002.06.14.orig/html/Ftape-HOWTO.pl.html 0100664 0001750 0001750 00000176374 06770264140 020622 0 ustar coven coven
ftape. Sterownik ten obsługuje napędy zgodne z QIC-40, QIC-80,
QIC-3010 i QIC-3020. Standardy QIC-3010 i QIC-3020 znane są też jako
'Travan' (TR-2 i TR-3). Napędy te łączą się z komputerem przez kontroler dyskietek (FDC).
Niniejszy tekst nie dotyczy urządzeń SCSI ani streamerów zgodnych
z QIC-02. Napędy DAT zazwyczaj (zawsze?) komunikują się z komputerem przez sterownik SCSI. Tekst ten jest jednym z wielu dokumentów HOWTO. Listę tych prac można znaleźć
tutaj a
same dokumenty można ściągnąć przez ftp z ftp.icm.edu.pl, ftp.pwr.wroc.pl (to są polskie mirrory) lub z sunsite.unc.edu:pub/Linux/doc/HOWTO. Można też je oglądać
na WWW - każdy mirror LDP
Niniejszy dokument (ftape-HOWTO) może być reprodukowany i rozprowadzany w całości pod następującymi warunkami:
Copyright (c) 1993-1996 by Kai Harrekilde-Petersen
Email: khp@dolphinics.no
Copyright (c) 1996-1997 by Kevin Johnson
Email: kjj@pobox.com
Tłumaczenie na język polski:
Copyright (c) 1997 by Jakub Chmielewski
Email: yacoob@manager.ae.wroc.pl
Linux ftape-HOWTO jest darmowy; możesz go kopiować, modyfikować zachowując jednak postanowienia wesji drugiej (i następnych) Licencji GNU General Public Licence opublikowanej przez Free Software Foundation.
Dokument ten został napisany aby pomóc/usprawnić pracę użytkowników systemu Linux, jednak autor NIE DAJE ŻADNYCH GWARANCJI. Więcej szczegółów znajdziesz w GNU General Public Licence.
Autor zachęca do kopiowania i dytrybucji niniejszego dokumentu w celach prywatnych jak i komercyjnych, pod warunkiem, że pozostają one w zgodzie z zaleceniami GNU General Public Licence. Oznacza to, że można go kopiować jednak bez żadnych opłat (z wyjątkiem tych pokrywających koszty reprodukcji) - czyli bez zysku. Autor (no i tłumacz) wyraża niniejszym zgodę na reprodukowanie swojej pracy w jakiejkolwiek postaci - fizycznej bądź elektronicznej.
Uwaga! Prace oparte na Linux ftape-HOWTO (w szczególności tłumaczenia) muszą być dostępne zgodnie z GNU General Public Licence i oryginalny copyright musi zostać nienaruszony. Jeśli dodałeś nowe informacje do tego dokumentu, musisz utworzyć jego tekst źródłowy (tzn w formacie SGML) aby móc go uaktualniać. Prześlij, proszę swoje uaktualnienia do autora: kjj@pobox.com. Pozwoli to na dołączenie twoich informacji do oryginału i pozwoli wszystkim się z nimi zapoznać.
Autor zachęca do załączania niniejszego dokumentu do dokumentacji twoich programów. Zgodnie z wcześniejszym zezwoleniem możesz ten tekst drukować lub w innej formie przekazywać osobom trzecim (oczywiście zachowując copyright). Możesz także, jeśli uznasz to za stosowne dołączyć odpowiedni ,,dodatek instalacyjny'' dotyczący twojego programu lub zmienić treść odpowiednich rozdziałów.
Autor chciałby być informowany o jakichkolwiek planach publikowania tego tekstu w celach komercyjnych. Zapewni to Tobie dostęp do aktualnych wersji dokumentu. Jeśli zdarzy się, że jego nowsza wersja będzie miała ukazać się lada dzień, może zechcesz poczekać z publikacją twojej pracy do czasu ukazania się najświeższej wersji.
Jeśli rozprowadzasz ten dokument w celach komercyjnych, wszelkie wartości materialne (finansowo płynne) jak i wydrukowane egzemplarze dokumentu przekazane autorowi spotkają się z jego wielką wdzięcznością. Wesprzesz w ten sposób autorów darmowego oprogramowanie oraz Linux Documentation Project.
Jeśli masz pytania, komentarze, oto adres autora: kjj@pobox.com.
ftape jest teraz częścią jądra.
ftape'a
Sterownikiem ftape i jego źródłami administruje Claus Heine <claus@momo.math.rwth-aachen.de>. Jego strona WWW znajduje się w http://samuel.math.rwth-aachen.de/~LBFM/claus/ftape/ftape-page.html.
Jeśli masz jakieś problemy, pytania związane z ftape, spróbuj umieścić je na
liście linux.dev.tape. Jest to lista Usenet, która jest kopią listy dyskusyjnej
linux-tape@vger.rutger.edu (zobacz też punkt
Śledzenie rozwoju ftape'a) Polecam korzystanie
z grup dyskusyjnych zamiast bezpośrednio z listy, ponieważ serwer vger
jest co nieco przeciążony listami.
Wracając do streamerów osobiście używam ftape (to mój głównym
środek archiwizacji danych na mojej maszynce :-). Nie chciałbym tutaj
polecać jakiegokolwiek sprzętu. Ja używam Iomega Ditto Tape Insider 3200
i jest dla mnie wystarczający. Lista urządzeń obsługiwanych
przez sterownik znajduje się w punkcie
Napędy współpracujące z ftape'm.
Jeśli masz jakieś kłopoty ze streamerem a znalazłeś jakieś rozwiązanie
podziel się swoimi uwagami z innymi (lista dyskusujna - linux.dev.tape)
oraz ze mną (<kjj@pobox.com>).
Swoją pocztę przeglądam zwykle kilka razy na tydzień, staram się też odpowiadać
na każdy list, ale nie mogę gwarantować, że odpiszę natychmiast. Często też
przeglądam listy dyskusyjne linux.dev.tape oraz kernel'a
Jeśli niniejszy tekst dotarł do ciebie w formie drukowanej, lub też tylko w części odwiedź proszę stronę the Linux Documentation home page lub ftp to ftp://sunsite.unc.edu:/pub/Linux/doc/HOWTO aby dowiedzieć się czy nie ma nowszej wersji tego tekstu. Może to zaoszczędzić ci wiele kłopotu.
Jeśli zechcesz do mnie napisać, umieść proszę nagłówek ftape w linijce
tematu listu. Może to uchronić twój list przed wirtualną śmiercią,
ftape
ftape jest sterownikiem, który obsługuje różne typy tanich streamerów
podłączanych do kontrolera dyskietek.
ftape nie jest programem archiwizującym - jest tylko sterownikiem, który
pozwala używać tasiemca (tak samo jak sterownik SoundBlaster'a pozwala
wykorzystać tę kartę) poprzez pliki /dev/[n]rft[0-3].
Pierwsze wersje ftape zostały napisane przez Bas'a Laarhoven'a z
,,niewielką pomocą ze strony przyjaciół'', którzy pomogli rozgryźć ECC
(Error Correcting Code). Prawa autorskie do ftape'a należą do
Bas'a i są zgodne z GNU Genral Public Licence, która to mówi:
,,spoko, możesz kopiować i rozdawać to, tylko pozwól i innym
to robić''.
ftape jest już od dłuższego całkiem stabilnym sterownikiem. Jest
wystarczająco bezpieczny aby na taśmach można było składować ważne
dane (chociaż dobrym nawykiem jest sprawdzać swoje archiwa co jakiś
czas, żeby nie być (nie)mile zaskoczonym pewnego pięknego poranka...).
ftape współpracuje z napędaami zgodnymi ze specyfikacją QIC-117
oraz z jednym z następujących standardów: QIC-80, QIC-40, QIC-30101
lub QIC-3020.
ftape nie współpracuje z napędami QIC-02, IDE (ATAPI) ani SCSI.
Współpraca z napędami SCSI jest możliwa dzięki plikom
/dev/[n]st[0-70 oraz jądru, które zawiera sterowniki SCSI. Informacje
o napędach SCSI można znaleźć w SCSI-howto. Urządzenia ATAPI są
obsługiwane przez kernel (jądro) od wersji 1.3.46. Zajrzyj do punktów
Napędy współpracujące z ftape oraz
Napędy nie współpracujące z ftape, w których
znajduje się spis tych urządzeń.
ftape'a
ftape
Wersje 2.0.x jądra zawierają sterownik ftape w wersji 2.08.
Jednak najlepiej zdobyć najnowszą wersję kodu źródłowego. Nowsza wersja
zawiera pliki nie dołączone do jądra oraz dużo bogatszą dokumentację
dotyczącą instalacji itd.
Najświeższe wersje sterownika (2.11a i wyżej) dostępne są na stronie
http://samuel.math.rwth-aachen.de/~LBFM/claus/ftape/ftape-page.html.
Gdy piszę ten dokument dostępna jest już wersja 3.xx ftape'a. Niemniej
polecam starsze wydanie (2.xx), chyba że masz ochotę igrać z ogniem (3.xx
jest wersją rozwojową i z pewnością ma kilka robaczków :-) ).
Niniejszy punkt zawiera informacje dotyczące instalacji sterownika w2.11a i czynnościach, które muszą ją poprzedzać.
Zakładam, że masz już skompresowany kod źródłowy (najprawdopodobniej
ftape-2.11a.tar.gz). Umieść go w katalogu docelowym (np /usr/src
lub ~/src) rozpakuj komendą
tar xvzf ftape-2.11a.tar.gz
Wszystkie pliki zostaną umieszczone w podkatalogu ftape-2.11a czyli
w /usr/src/ftape-2.11a albo ~/src/ftape-2.11a. Można też
wrzucić cały pakiet do /usr/src/linux/drivers/char/ftape ale
osobiście radzę najpierw przeczytać dokumentację a potem zdecydować gdzie go
umieścić.
Na początek przeczytaj plik README - zawiera on bardzo ważne informacje.
Jeśli autor radzi zajrzeć do innych plików i zapoznać się z ich treścią - zrób
to. Uchroni cię to przed przykrymi niespodziankami później i znacznie uprości
dalszą instalację.
Dobra rada: NIE rozpoczynaj instalacji (kompilacji) pakietu jeśli dokładnie
nie przeczytałeś README lub Install-guide.
W pliku README autor wspomina o liście dyskusyjnej linux-tape. Ja
radzę jednak zapisać się na linux.dev.tape, ponieważ serwer obsługujący
tą pierwszą jest, jak już wspominałem, przeładowany.
Są dwa sposoby korzystania z ftape'a
Pierwsza metoda będzie zapewne nastręczać mniej kłopotów. Zaletą drugiej
jest fakt, że moduł ładowany jest do pamięci tylko wtedy, gdy jest potrzebny
(zawsze można go zdeinstalować bez konieczności przeładowania systemu).
Autor wczesnych wersji sterownika (Bas Laarhoven) twierdzi jednak, że nie był
on przeznaczony do kompilacji jako moduł (od tego czasu wiele się zmieniło i
teraz ftape działa bez zarzutu w obydwu wersjach - przynajmniej u mnie
- tłumacz :) ).
Na swoim komputerze sterownik kompiluję bezpośrednio do jądra. Myślę, że jest to lepsze rozwiązanie, ponieważ mniej jest z tym problemów. Radzę tak właśnie zrobić, chyba że masz dobry powód aby postąpić inaczej i jesteś przygotowany na komplikacje, które mogą wyniknąć podczas przygotowywania modułów. Jeśli zdecydujesz się kompilować sterownik bezpośrednio do jądra, to:
zftape zamiast ftape
ponieważ obydwa te programy używają tego samego bardziej znaczącego numeru sterownika,Jeśli używasz jądra w wersji 1.2, powinieneś zaopatrzyć się także w pakiet modules-1.3.57 a nie modules-1.2.8. (Bjø rn Ekwall, administrujący pakietem modules to właśnie zaleca).
Jeśli masz wersję 1.3.x jądra, powinieneś rozważyć przejście na wersję 2.0.x. Jądro 1.3.x było wersją rozwojową zanim powstała stabilna 2.0.x.
ftape'a
Rozwój ftape'a można śledzić dzięki liście Usenet linux.dev.tape.
Jak już wcześniej wspomniałem jest to kopia linux-tape@vger.rutgers.edu
ale ze względu na przeciążenie tego serwera, radzę korzystać z Usenet'u.
Jeśli nie masz dostępu do Usenet'u możesz zapisać się na tę listę wysyłając
e-mail'a do majordomo@vger.rutgers.edu o następującej treści:
subscribe linux-tape'. Na początek otrzymasz list zawierający
informacje o sposobie korzystania z listy (wysyłanie własnych uwag, sposób wypisania
się z listy itd.) Miej jednak na uwadze, że nie mam (NIE MAM) żadnych
przywilejów jeśli chodzi o tę listę. Nie jestem w stanie wypisać cię z niej,
jeśli serwer nie chce zrobić tego automatycznie, mogę
co najwyżej wysłać ci list z kondolencjami (co ci w niczym nie pomoże).
ftape i stacji dyskietek
Jako, że streamer i stacja dysków łączą się z tym samym kontrolerem (i
wykorzystują to samo przerwanie - IRQ6) nie mogą pracować równolegle. Dlatego,
jeśli zamontowałeś już (mount) stację dysków i spróbujesz odwołać się
do streamera, ftape wyświetli komunikat, że nie może przejąć przerwania
IRQ6 i odmówi współpracy. Staje się to szczególnie uciążliwe,
gdy chcesz stworzyć dyskietkę systemową (ratunkową), która korzystałaby z
ftape'a. Rozwiązaniem jest albo ładowanie dyskietki startowej do ramdysku
i wtedy odłączenie stacji dysków (umount) albo zaopatrzenie się w dwa
kontrolery FDC.
Zanim taśma jest zdatna do użytku, musi zostać najpierw sformatowana. Proces formatowania dzieli taśmę na sektory i zapisuje najważniejsze informacje na nośniku. Inne streamery (SCSI itd) zwykle nie wymagają formatowania, ale te podłączane do FDC muszą po prostu udawać dyskietki (trochę to dziwne, ale tak to już jest).
Nie. (Na razie, bo trwają już prace nad tym)
Dopóki nie można tego robić pod Linuxem, trzeba niestety używać
M* DOSa (Tfu!Błeeh...) albo kupować taśmy już sformatowane. Trzeba
jednak pamiętać, że niektóre preformatowane taśmy zostały
przygotowane bez sprawdzania czy nie zawierają błędnych sektorów!.
Jeśli ftape stwierdzi, że taśma nie ma zaznaczonych żadnych
błędnych sektorów, poinformuje cię o tym specjalnym ostrzeżeniem.
Jeśli ftape będzie miał kłopoty z odczytem/zapisem twojej nowej
taśmy, spróbuj sprawdzić ją pod DOS'em. Jeśli i dosowskiemu oprogramowaniu
nie spodoba się twoja taśma, rozwiązaniem może być przeformatowanie jej.
Pamiętaj jednak, że zanim będziesz mógł używać nowo sformatowane
taśmy, musisz je najpierw wyczyścić poleceniem:
# mt -f /dev/nftape erase
Poniżej wymienione zostały programy, które zostały sprawdzone i chodzą:
tape.exe)qs3.exe -- QICstream v3?)A te programy są mniej lub bardziej pewne:
W zasadzie większość programów pod DOS'em całkiem nadaje się do formatowania
taśm. Program Conner Backup Basics v1.0 miał błąd spowodowany złą interpretacją
specyfikacji QIC przez programistów (sic). Błąd ten został poprawiony w
wersji 1.1. ftape wykryje tę usterkę i nie ,,wysypie'' się na niej.
Od Dennisa T. Flaherty (<dennisf@denix.elk.miles.com>) dowiedziałem
się ostatnio, że posiadacze Connera C260MQ (niestety tylko w USA) mogą otrzymać
wersję 1.1 tego programu dzwoniąc pod numer 1-800-4Conner za darmo lub
płacąc tylko za dyskietkę. Dla innych pocieszenie - wersja dla Windows nie
ma tego błędu i powinna działać dobrze. Niektóre wersje oprogramowania pod Windows'y
dla streamerów Colorado mają
błąd, ale ftape rozpoznaje
i ,,obchodzi'' go.
Dobrym programem jest także Central Point Backup ale ten znów marnuje drogocenne miejsce na taśmie gdy znajdzie jakiś uszkodzony sektor.
UWAGA: Jeśli używasz innego oprogramowania pod DOS'a, nie wymienionego przeze mnie, napisz do mnie ( <kjj@pobox.com> żebym mógł uaktualnić powyższą listę.
Taśmy QIC są szczególnie wrażliwe na rozciąganie. Powodem tego jest fakt, że podczas preformatowania zapisywana jest na nich informacja o sektorach, podczas gdy w innych rodzajach streamerów informacje synchronizacji (pozycjonowania) są zapisywane wraz z twoimi danymi. Jeśli taka taśma rozciągnie się, mogą wystąpić przekłamania odczytu (sektor się wydłuża). Oczywiście im dłuższa taśma, tym większe niebezpieczeństwo uszkodzenia nośnika.
Dobrym rozwiązaniem jest więc kilkuktrotne ,,retensionowanie'' (czyli rozprężanie) nowej taśmy przed pierwszym użyciem (zapisem danych albo formatowaniem). Retensionowanie taśmy zalecane jest także wtedy, gdy podczas odczytu występują błędy oraz przed każdym dokonaniem zapisu na taśmę.
# mt -f /dev/nftape retension
Powierzchnia taśmy pokryta jest związkiem tlenu. Kiedy nośnik styka się z głowicą zostawia na jej powierzchni niewielką ilość osadu. Co jakiś czas powinieneś ją czyścić. najlepiej użyć miękkiej szmatki lub czegoś z naturalnych włókien (żeby nie porysować głowicy) oraz płynu czyszczącego zalecanego przez producenta streamera. (Producent Jumbo-250 poleca zwykły czysty spirytus - swój chłop - tłumacz). Sposób czyszczenia powinien być opisany w instrukcji.
Jeszcze jedna uwaga: jeśli zacząłeś korzystać z zupełnie nowej taśmy, powinieneś także wyczyścić głowicę - nowe taśmy zostawiają więcej osadu po pierwszym użyciu.
Podziękowania dla Neal'a Friedman'a za doradzenie aby te informacje umieścić w tym dokumencie.
ftape
Wszystkie napędy zgodne z QIC-117 oraz zgodne z QIC-40,
80, 3010 lub 3020 powinny działać. ftape rozpoznaje także
streamery QIC-WIDE i Travan (TR-1 to po prostu QIC-80 na 8 mm taśmie,
TR-2 i TR-3 to odpowiednio QIC-3010 i 3020).
Na dzień dzisiejszy znane mi są następujące urządzenia współpracujące z
ftape
<kosowsky@bellini.harvard.edu> poinformował mnie o kłopotach podczas archiwizowania 1GB danych za pomocą tapera.
działa z taśmami 3M Travan 400M (TR-1) 120M. Zgłoszono już kilkukrotnie, że mt zawiesza się, ale działa z archiwami utworzonymi przez tar. Jeśli chcesz posługiwać się cpio, korzystaj raczej z ftape a nie z zftape. (<millner@millner.bevc.blacksburg.va.us>)
Wiele osób miało problemy z zftape - napęd ciągle zatrzymywał się i wznawiał pracę (<75104.1756@compuserve.com>). Wydaje się, że winny jest napęd, który zbyt szybko czyta dane i komputer gubi je; bufory DMA są opróżniane zanim zdążą się zapełnić. Rozwiązanie jest tu proste - użyć nowszej wersji zftape albo stosować większe bufory DMA. (<millner@millner.bevc.blacksburg.va.us>).
Napęd ten zgłasza błedy zapisu i często repozycjonuje taśmę (Frank Stuess z Nacamar Data Communications).
Modele 400 i 800 współpracują tylko z taśmami TR-1.
Pracuje z taśmami TR-3 (tzn. tylko pojemność 1600MB) przy prędkości 1Mbps. Współpracuje też z QIC-WIDE 400m (Sony 5122?) (<chris@cs.wmich.edu>). Obsługuje też taśmy TR-3, QIC-3010 oraz QIC-3020. Napęd dostarczany jest z kontrolerem FDC z 2MB RAMU na pokładzie.
Prawdopodobnie współpracuje z ftape 2.05 jeśli podłączony jest do szybkiego kontrolera (żeby móc korzystać z QIC-3020). Niektórzy nie mogą odczytywać rzadkich dyskietek. Prawdopodobnie trzeba grzebać w IRQ/portach/DMA (<chris@yakkocs.wmich.edu>).
Działą z taśmami TR-1, Sony QW5122F (210m) i DC2120. Ponoć pracuje z ftape 2.02e (ale nie 2.03b) oraz z v2.05 (<khp@pip.dknet.dk>). Wymaga patcha ''the length patch''. Zgłoszono mi, że możesz potrzebować zmodyfikować Makefile żeby upewnić się, że ftape odwołuje się do pierwszego (PRIMARY) kontrolera dyskietek (<jzc@primenet.com>). Pojawia się także błąd "Timer expired" gdy używane są taśmy TR-1 i ftape 2.05-2.07) (<les@amc.uva.nl>).
CTT3200 jest przypuszczalnie odpowiednikiem Iomega Ditto 3200. Działa z dołączonym kontrolerem 2Mbps ale przy szybkości 1Mbps. Na niektórych maszynach nie działa pod DOSem (<jmorris@dtx.net>).
Działa z nośnikami QIC-WIDE (<pschmidt@slip.net>). Częściowo także z QIS-3200. Jeśli używasz kontrolera HSC-2, musisz zmienić numer kanału DMA (zwiększyć o 1, kanał 2? - w Makefile). Potem musisz zmodyfikować plik Makefile ftape'a, żeby ten uwzględnił zmiany. Jednak, nawet z tymi poprawkami ftape nie działa do końca poprawnie (co to znaczy flaky???) (<ttait@tiac.net>). Kontroler HSC może nie działać w trybie 2Mbps - wyświetlany jest tylko komunikat "dumb tape stop" i koniec. (<ttait@tiac.net>).
Działa z taśmami QIC-3010, wymaga jednak łatki (,,the length patch'').
Właśnie tego streamera używam. Z mojego doświadczenia wiem, że standardowe ustawienie jumperów uniemożliwia poprawne działanie napędu. Numer irq i ioport pozostaw bez zmian (odpowiednio 6 i 0x370) ale zmień DMA z 3 na 2.
W starszych wersjach ftape trzeba dodać następującą linię do
pliku vendors.h:
{0x08882, 80, wake_up_colorado, "Iomega 3200"}
Problemy występują także z ftape v2.07 i jądrem 1.12.13. Jakiegokolwiek
akceleratora by nie używać, na niektórych komputerach,
napęd może być użyty tylko raz (<erwin@box.nl>). Czasami, także po
pierwszym zapisie/odczycie, sterownik uznaje taśmę za zabezpieczoną przed zapisem
(<erwin@box.nl>, <M.J.Ammerlaan@dutiwy.twi.tudelft.nl>).
Zgłoszono raz wypadek przewinięcia taśmy poza swój koniec (czyli urwania jej...).
Na inny błąd natrafiono podczas tworzenia archiwum komendą dd. Na początku działa
poprawnie ale potem streamer zatrzymuje się, przewija taśmę do początku i
zaczyna czytać aż do końca taśmy. Dzieje się tak najprawdopodobniej dlatego, że
sterownik zatrzymuje taśmę na chwilę, co powinno spowodować przewinięcie jej
o 3 segmenty w tył, ale zamiast tego taśma przewija się do początku. Patch, który
miał naprawić te błędy niestety nie działa.
Można używać taśm Travan TR1, TR2 albo DC2120, ale trzeba użyć łatki ,,the length patch''
(<klein@informatik.uni-rostock.de>).
Zgłoszono, że nie działa z jądrem 1.3.79 i ftape (nie podano numeru wersji) oraz jądrem 1.2.13 i zftape 1.04 (<colin@colina.demon.co.uk>).
Jeśli twój kontroler to AHA1542B, musisz zwiększyć jego czas bus-on/bus-off.
Antti Virjo (<klanvi@uta.fi>), pisze, że można tego dokonać
zmieniając CMD_BUSON_TIME w pliku linux/drivers/scsi/aha1542.c z
4 na 12.
W pliku vendors.h (katalog linux/drivers/char/ftape) znajduje się
aktualna lista urządzeń obsługiwanych przez daną wersję ftape'a.
Jeśli chodzi o dobór sprzętu, to chociaż nie chciałbym tu specjalnie krytykować kontretnych urządzeń, doszły mnie słuchy, że Colorado Dj-20 (czyli Jumbo 250 - mój sprzęt! - tłumacz) jest raczej hałaśliwy (jak Jumbo Jet, ale co z tego? :( ). Mówi się, że nawet 5-10 razy głośniejszy od Connera (jakby to hałas miał jakikolwiek wpływ na dane - po prostu nie robić backupów w nocy i po kłopocie :).
UWAGA: Jeśli posiadasz sprzęt nie wymieniony na tej liście (albo vendors.h)
, który mimo to dobrze współpracuje z ftape'm zgłoś ten
fakt autorowi HOWTO (<kjj@pobox.com>).
ftape
ftape obsługuje następujące specjalne kontrolery :
Obsługę kontrolera FC-10 włączono do ftape'a w wersji 1.12.
Więcej informacji można znaleźć w plikach RELEASE-NOTES i
Makefile w pakiecie ftape.
Wersje 2.03 sterownika powinny obsługiwać już FC-20, ale dla
pewności sprawdź w RELEASE-NOTES.
MACH-2 działa ze sterownikiem w wersji 1.14d wzwyż.
Aby móc korzystać z Iomega Tape Accelerator II, musisz użyć -DMACH2 (Makefile)
oraz ustawić poprawne adresy I/O, IRQ oraz DMA. Będzie to działać przynajmniej
z ftape-2.02 (wypróbowane przez Scott'a Bailey'a
<sbailey@xcc.mc.xerox.com>)
Iomega Ditto Dash i inne kontrolery z możliwością transferu 2mbps używają układu Intel 82078-1. Obsługa tego układu jest cały czas w fazie rozwoju. Prace mają być zakończone w styczniu lub lutym '97 (czyli już dawno temu). Na razie jednak kontroler ten działa z normalną prędkością 1Mbps.
ftape
Jak już wcześniej wspomniałem WSZYSTKIE napędy podłączane do LPT nie są obsługiwane (a ja już wcześniej zauważyłem, że to się zmieniło ;) - tłumacz). Jest to spowodowane tym, że używają one innego sposobu komunikowania się z komputerem, który nie jest zgodny z QIC-117.
Irwin AX250L oraz IBM Internal Tape Backup Unit nie współpracują z ftape'm
ponieważ są zgodne jedynie z QIC-117 ale nie z QIC-80 (używają własnego formatu
(''servo (Rhomat)''). Nie wiem niestety nic o tym formacie ani gdzie można zdobyć
jakieś informacje o nim.
COREtape light nie reaguje na komendy inicjujące, wysyłane przez sterownik, co czyni ten napęd bezużytecznym.
Iomega 2GB Ditto także nie działa z ftape'm, ponieważ używa własnego
formatu, na temat którego Claus (zarządzający ftape) nie mógł uzyskać
żadnych informacji.
ftape'm
Jeśli masz kontroler FDC, posiadający żeńskie łącze DB37 i masz
możliwość dostarczenia zasilania do streamera, możesz używać go
z ftape'm. Dobra, nie jest to zbyt zrozumiałe. Spróbujmy inaczej.
Niektóre starsze kontrolery FDC mają złącze DB37 na krawędzi, służące do
podłączania zewnętrznych stacji dysków.
Jeśli zaopatrzysz się w odpowiedni kabel podłączany do tego wejścia (czytaj:
sam sobie go zrobisz), możesz zmusić ftape'a do obsługi twojego tasiemca.
Sterownik nie rozróżnia bowiem zewnętrznych i wewnętrznych urządzeń. I dlatego
dla niego oba warianty są identyczne.
UWAGA!! - dostępny jest już patch parport, który umożliwia obsługę urządzeń
podłączanych do LPT (nie tylko streamerów) oraz patch obsługujący Trakkera (patrz punkt
Od tłumacza).
Wtyczka zasilania to ta mała, taka jak w stacji 3,5". Musisz taką wtyczkę podłączyć do gniazda DB37. Jeśli chcesz użyć tylko jednego kable, możesz użyć 50 żyłowego i użyć kilku połączeń dla zasilania (i uziemienia).
Dotychczas nikt nie zgłosił mi, że takie coś działa. Jeśli tobie się uda pisz!
ftape
Niestety, niektóre płyty główne stwarzają problemy podczas używania
ftape'a. Niektórzy mieli kłopoty z odpaleniem ftape'a na płycie
PCI, a na zwykłęj 386-ce z ISA program chodził bez problemów (z tym samym
streamerem). Jeśli ty także masz podobny problem, przejrzyj plik README.PCI
w katalogu ftape'a.
Punkt ten opisuje niektóre funkcje tar i mt.
Do tego celu służą tar, dd, cpio, oraz afio.
Jednak aby móc w pełni wykorzystać możliwości swojej zabawki będziesz musiał
użyć komendy mt. Na początek radzę poznać tar, ponieważ
za jego pomocą można zarchiwizować całe drzewo katalogów oraz odtworzyć
pojedyncze pliki. cpio tworzy mniejsze archiwa, jest bardziej
elastyczny od tar'a, chociaż nie ma niektórych opcji, jak np nadawanie
nazw woluminom. afio tworzy archiwa, w których każdy plik
jest spakowany a następnie dołączony do archiwum. To pozwala odzyskać pliki
znajdujące się za miejscem wystąpienia błędu (np uszkodzania nośnika). Jeśli
takie archiwum utworzone byłoby tar'em i gzip'em wszystkie dane
znajdujące sie za tym miejscem zostałyby utracone! (Dla mnie jest to
dobry powód, żeby nie kompresować danych przy archiwizacji).
Wybór metody archiwizacji zależy od sytuacji oraz zalet i wad każdego z
tych programów. Polecam zapoznać się z każdym z nich i samemu ocenić
ich walory. Możliwe jest, że w przyszłości dokument ten zawierać będzie
więcej informacji na ten temat.
No to bierzmy się do roboty!
Aby zachować katalog /usr/src/linux wraz z podkatalogami
używając tar'a trzeba wydać polecenia:
# cd /usr/src
# tar cf /dev/ftape linux
Tą metodą dane zostaną zapisane bez kompresji, ale komputer
będzie mógł nadążyć z dostarczeniem danych do streamera (Taśma nie
będzie co chwila przewijana w tę i spowrotem). Jeśli chcesz
skompresować dane użyj parametr(*) -z, np:
`tar czf /dev/ftape linux'
Więcej informacji o tar, dd i mt można znaleźć
na stronach poręcznika (man pages) i w plikach texinfo dołączonych
do tych programów.
(*) tar zakłada, że piersze parametr jest opcją/parametrem programu, nie trzeba
więc używać `-'. Na przykład komendy `tar xzf /dev/ftape' oraz
`tar -xzf /dev/ftape' są interpretowane identycznie.
Dobra, teraz odtworzymy dane zapisane w poprzednim punkcie ( Archiwizowanie). Wpisz:
tar xf /dev/ftape
i to wszystko...
Jeśli skompresowałeś dane, napisz:
tar xzf /dev/ftape
Na samym końcy archiwum gzip najprawdopodobniej uraczy
cię komunikatem o jakichś smieciach (co zakończy się komunikatem
'broken pipe' - tu urwane archiwum). Zignoruj to.
Informacje o innych narzędziach znajdziesz na stronach podręcznika.
tar posiada opcję d która umożliwia wykrycie różnic między
archiwum na taśmie i plikami na dysku. Żeby zweryfikować poprawność
zapisanych danych napisz:
tar df /dev/ftape
Jeśli nie masz na swoim dysku strony podręcznika do tar, to listę
opcji możesz otrzymać pisząc:
`tar --help 2>&1 | less'
Żeby umieścić kilka archiwów na jednej taśmie musisz użyć programu
mt. Jeśli używasz, którejś z popularnych dystrybucji
(Slackware, Debian albo RedHat) najprawdopodobniej maż już go
zainstalowanego.
Programy takie jak tar and cpio tworzą pojedyncze Taśmowe ARchiwum
i nie mają bladego pojęcia o pozycjonowaniu taśmy (odnajdywaniu konkretnego
archiwum na taśmie), one po prostu czytają albo zapisują co im się pod głowice
napatoczy. mt potrafi przewijać taśmę do przodu i do tyłu ale nie umie
czytać danych. Jak już pewnie zauważyłeś umiejętne posługiwanie się
tar'em lub cpio oraz mt pozwoli na swobodne
przemieszczanie się po taśmie i pełną nad nią kontrolę.
Aby skorzystać z dobrodziejstw mt musisz korzystać z pseudo-plików
urządzeń nrft[0-3] (nftape), np:
mt -f /dev/nftape fsf 2
spowoduje przesunięcie taśmy o dwa pliki (file marks) do przodu (pliki
utworzone przez np tar'a). Potem używając tar'a lub cpio
odczytujemy interesujące nas pliki.
Najczęściej pliki nrft[0-3] (tzw non-rewinding - czyli takie, które
nie powodują przewinięcia taśmy automatycznie do początku po każdej zakończonej operacji)
używane są do dołączaniam nowego pliku na końcu taśmy. A oto konkretny przykład:
mt -f /dev/n???? eof
Taśma powinna zostać przesunięta na koniec taśmy (a konkretnie - pomiędzy
dwa znaczniki End-Of-File (EOF) 2*EOF=EOT) . Teraz napęd oczekuje kolejnych
komend i nie zacznie przewijać taśmy dopóki program/użytkownik
nie wyda stosownej komendy (np czytania/zapisu/przewinięcia
usunięcia modułu ftape z pamięci itd.)
Uwaga: na urządzeniach QIC można użyć krótszej komendy:
`mt eof'
# tar cf /dev/ftape linux
ftape
i zftape przechowują niektóre dane (które powinny być zapisane w
nagłówku taśmy) w pamięci operacyjnej. Dane te są umieszczane na
taśmie dopiero wtedy, gdy zostaje ona przewinięta! Buforowanie
to jest potrzebne, ponieważ bez niego komputer musiałby uaktualniać nagłówek
nośnika, po każdej operacji zapisu, a ciągłe przewijanie kasetki
jest czynnością dość zarówno długotrwałą jak i niezbyt ,,zdrową'' dla taśmy.
Wadą tego rozwiązania jest możliwość utraty danych, gdy zapomnisz o
przewinięciu taśmy.
,,Czy można rozszerzać archiwum - utworzyć je a poźniej dołączać pliki na jego końcu?''
Nie. Chociaż w dokumentacji tar'a stoi jak byk, że za pomocą
tar -Ar' można tego dokonać, z ftape'm to nie działa
(przynajmniej na razie).
Jako, że streamer nie tworzy żadnego formalnego systemu plików
(file system) na taśmie, nie można używać komendy mount/umount.
Operacji na zawartości nośnika dokonuje się tylko przy
użyciu tar'a albo innego programu przeznaczonego
do obsługi streamera.
ftape
Niniejszy rozdział zostałnapisany przez Clausa Tøndering
<ct@login.dknet.dk>.
Kiedy już zostaniesz szczęśliwym właścicielem streamera i całej kolekcji tasiemek z kopiami bezpieczeństwa zapytasz się pewnie: ,,Jeśli cały dysk twardy szlag weźmie i stracę wszystkie dane, w jaki sposób odtworzę zawartość moich taśm?''
Będziesz potrzebował zapasowej dyskietki startowej, zawierającej odpowiednie pliki (/dev/*rft*) oraz oprogramowania umożliwiających odtworzenie twojego twardziela z taśm.
Pierwszą rzeczą, którą powinieneś zrobić zanim zaczniesz czytać dalej jest zapoznanie się ,,Bootdisk HOWTO'' napisanym przez Grahama Chapmana <grahamc@zeta.org.au>. Dokument ten zawiera wszystkie przydatne informacje na temat tworzenia dyskietek systemowych. Poniższy tekst zawiera kilka dodatkowych wskazówek, które ułatwią ci pracę z Bootdisk-HOWTO.
/etc/init, /etc/inittab,
/etc/getty, ani /etc/rc.d/*. Jeśli Linux nie znajdzie
/etc/init/, uruchomi shell /bin/sh na twojej konsoli,
który wystarczy do odtworzenia danych. Skasowanie tamtych plików
zwiększy ilość wolnego miejsca na dyskietce, którego będziesz prawdopodobnie
potrzebował./bin/sh użyj jakiegoś małego jego
odpowiednika. Można je znaleźć na dyskietkach startowych wchodzących w
skład każdej dystrybucji Linuxa(RedHat, Debian....). To także da ci kilka
dodatkowych kilobajtów na dyskietce. Sugerowałbym tu ash, który
jest bardzo mały (około 62KB), a przy tym zgodny z bash'em./etc/fstab, który zostanie umieszczony na dystkietce
powinien wyglądać mniej więcej tak:
/dev/fd0 / minix defaults
none /proc proc defaults
/dev/hda /mnt ext2 defaults
Zaraz po wystartowaniu systemu z dystketki wpisz:
# mount -av
co spowoduje ,,zamontowanie''
Unable to grab IRQ6 for ftape driver
Pamiętakj bowiem, że streamer i stacja dysków używają tego samego przerwania.
To oznacza, że będziesz musiał załadować dyskietkę startową do
RAMDYSK'u. Jest to o tyle niewygodne, że programy służące do odtwarzania
zawartości taśmy nie mogą być uruchamiane z dyskietki. Masz dwie możliwości:
tar, cpio...)
na dyskietce systemowej (właśnie po to potrzebowałeś sporo wolnego miejsca
na niej). Programy te zostaną zgrane do RAMDYSK'u.tar'a (albo
cpio albo ....) na twardy dysk i stamtąd je uruchamiaj.mt.
Umieść go także na swojej dyskietce./dev/nrft0) także
znajduje się na niej.
Poniżej przytoczone zostały pytania, które mogą zostać potraktowane
jako FAQ. Jeśli uważasz, że poniższa lista powinna zostać rozszerzona,
napisz do mnie (dołącz odpowiedzi na zadane pytania :) dzięki! )
ftape współpracuje z Iomega 2GB?Niestety, nie. Iomega używa własnego formatu zapisu na swoich taśmach,
niezgodnego z QIC. Administrator ftape'a nie mógł uzyskać dokumentacji
tego formatu od producenta.
ftape?Używając ftape'a można osiągnąć całkiem przyzwoite prędkości
zapisu/odczytu. Oczywiście wszystko zależy od sprzętu: Colorado DJ-20
(Jumbo 250) oraz kontroler Adaptec 1542CF, weryfikując 70MB archiwum
utrzymywał stałą prędkość transferu danych na poziomie 4.25MB/min
(bez kompresji). Prędkość ftape'a zależy głównie od możliwości
kontrolera FDC: AHA1542CD posiada kontroler ''post-1991 82077'' i może przesyłać
dane z szybkością 1Mbit/sek. Jeśli twój FDC może przesyłać tylko 500Kbit/sek
wydajność twojego systemu będzie prawdopodobnie o około połowę mniejsza.
,,Trace level'' (poziom śledzenia) lub ,tracing'' jest to parametr mówiący sterownikowi ile (i jakie) informacje o pracy napędu przekazywać na konsolę.
Poszczególne wartości tego parametru mają następujące znaczenie:
Wartość tego parametru można zmienić na trzy sposoby:
insmodJeśli twój ftape jest modułem, możesz zdefiniować poziom jako
opcję tej komendy.
/sbin/insmod ftape.o tracing=<poziom-śledzenia>
mtPoziom śledzenia można także zmienić stosując małą ,,sztuczkę''.
Wykorzystując komendę fsr programu mt możemy zmienić
ten poziom. zftape niestety nie reaguje na to.
mt -f /dev/ftape fsr <poziom-śledzenia>
Stosowanie komendy fsr jest nieformalną metodą zmiany
poziomu śledzenia. W przyszłości najprawdopodobniej niemożliwe
będzie użycie jej.
Plik tracing.c zawiera linię int tracing=3; - tutaj
właśnie zdefiniowana jest domyślna wartość ,,tracingu''.
Zmień 3 na 0..8 i skompiluj.
Nie. Chociaż programy DOS'owskie stosują się do wszystkich zaleceń firmy QIC jeśli chodzi o specyfikację QIC-80, nie ma jeszcze programów, które pozwalałyby stosować taśmy nagrane w DOS'ie. Nie powinno być kłopotów z napisaniem takiego programu, pewnie większym problemem byłoby stworzenie przyjaznego interface'u użytkownika...
tar'em?Najlepiej przeczytać strony podręcznika (man) albo info
dotyczące tar'a. Jeśli nie masz żadnej z nich, możesz spróbować
'tar --help 2>&1 | less'.
Jeśli twój tar jest v.1.11.1 albo starszy, powinieneś uaktualnić
go do wersji 1.11.8. Dopiero ta obsługuje opcję -z czyli kompresję
archiwum. Wersja ta ma także rozbudowaną pomoc (--help).
Niestety niektóre karty SVGA oraz Ethernet niepoprawnie dekodują
swoje adresy. Zazwyczaj zdarza się to, gdy bufory ftape'a znajdują
się pomiędzy 0x1a0000 a 0x1c0000. DMA ,,gubi'' swoje cykle
i co drugi bajt zapisany ma wartość 0xff. Znana jest co najmniej
jedna karta, która takie problemy powoduje - ATI 16bit VGA.
Najprostszym rozwiązaniem jest włożyć kartę do 8-bitowego slotu
(niewystarcza przekofigurować jej na 8-bitowy transfer danych).
Przesunięcie buforów ftape'a w inne miejsce pamięci jest tylko
półśrodkiem - inne bufory DMA mogą mieć ten sam problem.
Powiedzmy sobie jasno - błędy te nie są zawinione przez ftape'a.
insmod twierdzi, że wersja jądra jest błędna!
insmod może porównywać nr wersji jądra dla którego ftape'a
został skompilowany z wersja aktualnie działającego jądra na dwa sposoby:
przez porównanie numeru wersji jądra zapisanego w kodzie sterownika
z nr działającego jądra albo, jeśli jądro i ftape zostały skompilowane
z tzw ,,versioned symbols'' przez porównanie tych symboli.
Jeśli uaktualniłeś GCC do wersji 2.7.0 lub późniejszej, musisz skompilować
narzędzia obsługujące moduły (m.in : insmod) jeszcze raz.
Nowsze wersje insmod pozwalają ,,zmusić'' jądro do załadowania
modułu nawet, jeśli wcześniej wspomniane numery wersji się nie zgadzają.
Jeśli podczas konfigurowania jądra (make config) na pytanie
CONFIG_MODVERSIONS odpowiedziałeś twierdząco, wszystkie symbole
jądra, które są eksportowane (tzn symbole, które ładowalne moduły
,,widzą'') są poszerzone o sumę kontrolną parametrów
wywołania oraz tych zwracanych przez funkcje systemowe.
Pozwala to np insmod'owi ustalić, czy definicja danej zmiennej albo
funkcji jądra zmieniła się od czasu ostatniej kompilacji ftape'a.
Ten sposób ,,znakowania'' symboli sprzyja bezpieczeństwu systemu i weryfikacji kompatybilności poszczególnych jego składników.
Jeśli włączysz opcję CONFIG_MODVERSIONS w jądrze, pamiętaj aby
wykasować znak '#' w linii MODULE_OPT znajdujący się przed
`-DMODVERSIONS -include /usr/include/linux/modversions.h'
w pliku ftapeMakefile. I na odwrót, jeśli wyłączysz tę opcję
wstaw ten znak (# - znak komentarza) na powrót.
insmod mówi, że jądro 1.2.0 różni się od 1.2.0
Czy wstawiłeś łatkę (patch) jądra dotyczącą ksyms.c? Jeśli
nie przeczytaj README.linux-1.2 dostarczany razem ze źródłem
sterownika.
ftape wyświetla komunikat ,,This tape has no 'Linux raw format'''
Komunikat taki przywita cię, gdy próbujesz bawić się niewykasowaną,
świeżo sformatowaną taśmą. Trzeba ją skasować, ponieważ ftape
wymaga ,,magicznego nagłówka'' na taśmie, który pozwala sterownikowi
posługiwać się nią. Wpisz:
# mt -f /dev/nftape erase
tar/mt/cpio/dd?
Wszystkie te narzędzia są tworzone jako projekt GNU i można je
znaleźć prawie na każdym serwerze ftp, (więc także na ftp.icm.edu.pl,
ftp.pwr.wroc.pl). Na pewno zaś można je znaleźć na serwerze
GNU : prep.ai.mit.edu[18.71.0.38]:/pub/gnu. Najnowsze wersje tych
programów (na dzień 12 września 1996) to:
cpio: 2.4.2 (cpio-2.4.2.tar.gz)
dd: 3.13 (fileutils-3.13.tar.gz)
mt: 2.4.2 (cpio-2.4.2.tar.gz)
tar: 1.11.8 (tar-1.11.8.tar.gz)
gzip: 1.2.4 (gzip-1.2.4.tar.gz)
Mogą być one skompilowane bez problemu w Linuxie v1.0.4, libc -
v4.5.19, gcc - v2.5.8.
Jeśli chcesz przyczynić się do rozwoju ftape'a lub stworzyć
własne narzędzia (na przykład program do formatowania taśm) będziesz musiał
zapoznać się z odpowiednimi specyfikacjami QIC.
Dokumenty, w które powinieneś się zaopatrzyć, to:
opis standardu QIC-80, -117, 3010 i 3020. QIC-117 dotyczy obsługi
napędu na niskim poziomie - sposób komunikowania się z urządzeniem - nie
będziesz więc go prawdopodobnie potrzebować.
QIC-80/3010/3020 dotyczą ,,wyższego'' poziomu działania streamera
(zawierają m.in. kody ECC, sposób zapisu samych plików na taśmie).
Wszystkie te dokumenty można otrzymać od samej firmy:
Quarter Inch Cartridge Drive Standards, Inc.
311 East Carrillo Street
Santa Barbara, California 93101
Phone: (805) 963-3853
Fax: (805) 962-1541
lub ściągając odpowiednie dokumenty (format Adobe Acrobat) z adresu
ftp.qic.org
tar'a?
Używając tar'a, dobrym pomysłem jest nakłonienie go do dzielenia
danych archiwizowanych na części. Ponieważ ftape tnie archiwa na
29 kilobajtowe bloki, opcja -b58' powinna zapewnić sprawne działanie.
,,Dlaczego akurat 29kB?'' zapytasz pewnie? Zacznijmy więc od początku.
Standard QIC-80 mówi, że dane powinny być chronione przez Error
Correcting Code (ECC), który pozwala na detekcję i korektę ewentualnych
błędów odczytu . Odmiana tego kodu stosowana przez QIC-80 znana
jest pod nazwą Reed-Solomon (R-S) code. Zgodnie z jego zaleceniami
ftape czyta 29 bajtów danych i na ich podstawie i tworzy 3 bajty parzystości.
Aby zwiększyć wydajność kodu ECC, bajty parzystości zapisywane są
zaraz po 29-ciu 1-kilobajtowych sektorów danych. ftape
zapisuje więc 29kB danych plus 3 kB kodów ECC (29kB * 3b/29b) - co
daje w sumie blok 32kB. ftape zawsze posługuje się 32kB blokami,
z których tylko 29kB to dane a reszta to dane ECC.
Jeśli chcesz dowiedzieć się więcej na temat ECC i Red-Solomon codes
przejrzyj pliki ecc.c oraz ecc.h.
ftape wykrywa więcej błędnych sektorów na taśmach QIC-3020 niż programy w DOS'ie
Jeśli dokładnie przyjrzysz się różnicy w ilości błędnych sektorów,
to zauważysz, że jest ona równa 2784.
Liczba, którą podaje ftape jest oczywiście poprawna ;-). Każda
''bezbłędnie'' sformatowana taśma ma 2784 sektory w stałych miejscach,
które są umieszczone na mapie błędnych sektorów. Oto fragment specyfikacji
dotyczących tych taśm:
''Ścieżki 5,7,9,11,13,15,17,19,21,23,25 i 27 wewnątrz 4 segmentów EOT lub BOT
narażone są na zwiększone występowanie błędów spowodowanych odciskaniem
się na nośniku otworów znajdujących się na początku taśmy (dzięki nim streamer
wie, gdzie jest początek taśmy -tłumacz). Dlatego też, sektory te
zostaną odznaczone jako błędne podczas formatowania i umieszczone na
mapie błędnych sektorów.''
Daje to więc 12 ścieżek * 2 * 4 segmenty *29 sektorów = 2784 sektorów.
ftape podaje więc prawdziwą ilość sektorów wyłączonych z użycia,
DOS zaś daje bardziej ,,optymistyczny'' obraz sytuacji, co lepiej
chyba pokazuje jakość taśmy. Zachowanie ftape'a może zmienić się
w przyszłości - być może podawane będą dwie wartości ilości błędnych
sektorów, jednak zadanie to ma stosunkowo niski priorytet.
Powyższe informacje dotyczą także taśm QIC-3010.
ftape'aOpcje NO_TRACE i NO_TRACE_AT_ALL służą do kontrolowania
ilości informacji przekazywanych do pliku log'u. Użyj jednej z tych
opcji w plik Makefile i skompiluj jeszcze raz.
,,Polerowanie'' to nieskończone przewijanie po kawałeczku taśmy w przód i w tył - tak jakby streamer chciał wypolerować i tak już błyszczącą taśmę. To niecodzienne zjawisko zostało zaobserwowane na Jumbo 250 (przez 74404.3051@compuserve.com) oraz na Iomega 250 Ditto Insider (tom@opus.cais.com). W drugim przypadku okazało się, że to wina twardziela SCSI podłączonego do Adapteca 1542cf. Skontaktuj się ze mną jeśli masz swoje własne teorie na temat takiego zachowania.
ftape otrzymuję błąd: modversions.h: no such file or directory
Plik modversions.h jest tworzony podczas kompilacji jądra
z włączoną opcją CONFIG_MODVERSIONS. Dokładniej, komenda
make dep powoduje jego utworzenie.
Jeśli występuje w/w błąd, to prawdopodobnie zbiór ten został skasowany
poleceniem make mrproper. Trzeba więc rekonfigurować jądro, i wykonać
make dep aby przywrócić ów plik.
mt eom' jeśli nadpisuję nowy plik w środku taśmy?
EOM znaczy End Of Recorded Media - czyli miejscę w którym kończy się jakikolwiek zapis na taśmie.
,,Pliki'' na taśmie są specyficznym rodzajem plików - są one zapisywane
sekwencyjnie (gęsiego) i taki jest też do nich dostęp.
Zapisując dane na taśmie możemy dołączać nowy plik na końcu gąśiennicy
lub też uciąć ją w połowie i wyrzucając ogon dokleić nasze nowe archiwum.
Ten drugi przypadek zachodzi właśnie wtedy gdy zapisujemy dane
w środku zapisanej taśmy. ftape przed utworzeniem takiego archiwum
kasuje (!) wszystkie pliki następujące po miejscu, w którym chcemy pisać
(przenosi znak EOM w to miejsce) i zaczyna archiwizować.
Oznacza to, że nowy znak EOM znajdzie się zaraz za naszym nowo utworzonym archiwum.
Jedną z konsekwencji tego, jest fakt, że zapisując plik w środku taśmy, zostaje skasowany nie tylko zbiór znajdujący się wcześniej w tym miejscu ale także wszystkie po nim następujące.
dmaalloc() failed!
Taki komunikat może pojawić się tylko wtedy, gdy instalujesz ftape'a jako
moduł. Spróbuj uruchomić swapout na początek. Program ten dostarczany
jest razem z kodem źródłowym ftape'a ale nie tym dostarczanym ze źródłami
jądra, lecz w osobnym pakiecie ftape.X.y.tgz.
Oto przykład fragmentu pliku rc.local, który może wybawić cię z kłopotu:
# Instaluj Streamera
if [ -f /boot/modules/`uname -r`/misc/ftape.o ]; then
echo Instaluję ftape'a, Linux w.`uname -r`
swapout
insmod /boot/modules/`uname -r`/misc/ftape.o
fi
Tego rodzaju błąd nie wystąpi, jeśli wkompilujesz ftape'a
bezpośrednio w jądro.
mt fsf, mt bsf taśma się nie przesuwa?
Oczywiście. Sterownik po prostu zmienia swój wewnętrzny licznik, gdy wydajesz jedną z tych komend. Taśma zostanie przewinięta w odpowiednie miejsce, kiedy wydasz polecenie zapisu/odczytu.
ftape.
ftape zawiesza się gdy ..... - czy to błąd?
Nie, tak miało być ;‐)
A teraz poważnie. Dobry program się nie wiesza. Szczególnie jądro tego
nie robi lub nie powinno tego robić. Jeśli jednak tak się stanie
i możesz udowodnić, że to ftape jest winowajcą, możesz uznać
to jako Błąd, Który Powinien Być Usunięty. Napisz do administratora
(<kjj@pobox.com>) oraz na listę dyskusyjną.
Na początek, upewnij się, że możesz odtworzyć sytuację w której wystąpił
,,błąd''. Fałszywe błędy są szczególnie wredne, bo bardzo trudno je wytropić
(podobnie jak i prawdziwe):-/. Oto krótka lista małego myśliwego:
ftape'aftape'a. Może zostaniesz poproszony o
wypróbowanie jakichś łatek albo posłużyć się innym testem wykrywającym
być może i inne potencjalne błędy.Zwiększ wartość ,,trace level'' do 7 (prawie maksymalny poziom śledzenia)
i uruchom program/komendę które sprawiały kłopot. Potem przeczytaj informacje
zawarte w logu jądra (lub /proc/kmsg/ zależnie od tego gdzie
jądro umieszcza swoje komunikaty). Sprawdź, co wypisuje tam ftape.
Na początku może to się wydawać kompletnym bełkotem ale komunikaty
jądra/ftape'a mogą okazać się ważnym źródłem informacji o twoich
problemach. Większość zapisów zawiera nazwę funkcji, która go
wysłała, co może uprościć znacznie odpluskwianie. Następnie przejrzyj
odpowiednie pliki źródłowe i spróbuj sam zlokalizować robaka ;-).
Jeśli wersja twojego jądra (lub ftape'a) jest nie pierwszej świeżości
spróbuj użyć nowszej (lub najnowszej) i wtedy sprawdź czy błąd
jeszcze występuje. Jeśli zdecydujesz się przesłać informacje o
nim, pamiętaj, żeby umieścić istotne informacje o twoim systemie -
wersje jądra, ftape'a, dane płycty głównej (ISA/PCI/....) szybkości
zegara, kontrolera FDC i samego tasiemca. Opisz dokładnie i zwięźle
sytuację. Niektórzy nie mogą odpalić streamera na płytach PCI a
na 396DX ISA wszystko gra i buczy (dlatego przyglądnij się dokładnie
punktowi
Płyty główne PCI i ftape).
Pomyśl także o tych biednych duszyczkach, które płacą niemało kapuchy za dostęp do Internetu - nie wysyłaj potężnych logów sterownika bez wyraźnego powodu. Zamiast tego opisz swój problem i zaoferuj, że wyślesz log do zainteresowanych.
Swoje spostrzeżenia/raport wyślij do <linux-tape@vger.rutgers.edu>.
Możesz także napisać do <claus@momo.math.rwth-aachen.de>.
Oto lista ludzi, którzy przyczynili się do powstania niniejszego dokumentu. Chciałbym także przeprosić tych, którzy powinni się znaleźć na niej a jakimś trafem tak się nie stało.
Kai Harrekilde-Petersen <khp@dolphinics.no>: Poprzedni
administrator ftape'a oraz HOWTO.
Andrew Martin <martin@biochemistry.ucl.ac.uk>: Wniósł wiele
dodatkowych informacji w HOWTO.
Bas Laarhoven <bas@vimec.nl>: Autor ftape'a.
W oryginalnej wersji Ftape-HOWTO autor nie zamieścił informacji na temat możliwości obsługi streamerów podłączanych do portu równoległego. Wkrótce jednak, mam nadzieję, zostanie zapełniona ta luka i będzie o tym można przeczytać w niniejszym Ftape-HOWTO.
Ze swojej strony mogę dodać, że jest już dostępna łatka na jądro
(2.0.29 i 2.0.30 oraz w wersjach rozwojowych 2.1.xx)
parport, która pozwala na obsługę urządzeń
podłączanych do portu równoległego - nie tylko streamerów.
Jedyny znany mi model stremaera działający z tą łatką to Trakker.
Bezpośrednią obsługą tego urządzenia zajmuje się druga, osobna łatka.
Miałem przyjemność pracować z owymi ,,nowościami'' oraz Trakkerem i moje
wrażenia są co najmniej pozytywne. Chociaż ,,testowałem'' dość wczesną wersję
trakker.c i na początku streamer nie chciał w ogóle odpalić,
wkrótce otrzymałem poprawioną wersję źródła i mogłem już tworzyć
pierwsze archiwa.
Więcej informacji o łatce parport można znaleźć na stronie
http://www.cyberelk.demon.co.uk/parport.html.
Informacje o łatce dla Trakkera są na stronie
http://www.informatik.uni-oldenburg.de/~delwi/trakker.html
Jeśli znasz inne urządzenia współpracujące z parport'em, daj mi znać
yacoob@manager.ae.wroc.pl.
Dzięki!
Jedyne zmiany w stosunku do oryginalnego tekstu, dotyczą adresów internetowych pod którymi można znaleźć inne dokumenty - wskazałem polskie mirrory. Inne zmiany są odznaczone w dokumencie dopiskiem tłumacz. Więcej grzechów nie pamiętam.
Najnowsze wersje niniejszego dokumentu znajdują się na stronie http://manager.ae.wroc.pl/~yacoob/ftape-HOWTO-pl.html
Jeśli masz jakieś uwagi/zastrzeżenia/skargi dotyczące tego dokumentu (tłumaczenia Ftape-HOWTO) podziel się nimi ze mną. Wszelkie wytknięte błędy (literówki, koślawe tłumaczenie, błędy merytoryczne) postaram się usunąć jak najszybciej.
Jakub Chmielewski yacoob@manager.ae.wroc.pl
doc-linux-pl-2002.06.14.orig/html/Hebrew-HOWTO.pl.html 0100664 0001750 0001750 00000060113 06770264140 020756 0 ustar coven coven
Każde ustawienia językowe różne od oryginalnego amerykańskiego angielskiego mają dwa aspekty:
ISO-8859-8.W hebrajskim jest o wiele więcej (pisanie od prawej do lewej, geometria w X-Windows itd.), ale to HOWTO (przynajmniej pierwszy szkic) zajmuje się tylko sprawami podstawowymi.
Więcej informacji znaleźć można w różnych "narodowych"
HOWTOs (German, Danish itd.) oraz w ISO-8859-1 HOWTO (
ftp://ftp.vlsivie.tuwien.ac.at/pub/8bit FAQ-ISO-8859-1).
Większość tego pliku pochodzi z pierwszego szkicu autorstwa Vlada Moseanu.
Dodane wyjątki z dokumentów z archiwum e-brew.zip z ftp://ftp.jer1.co.il/pub/software/msdos/communication, oraz kilka poprawek błędów z pomocą członków grupy JCT Linux-il.
Po pierwszym rozprowadzeniu Hebrew-HOWTO wśród Linux-il zawiera ono teraz wszystkie e-maile przysłane mi w związku z pisownią/gramatyką oraz TeX/XeT, Mule oraz vim.
To HOWTO przygotowano z pomocą całej grupy Linux-il - "Grupa
Izraelskich Użytkowników Linuxa", a zwłaszcza:
Grupa Linux-il (Linux-il@hagiga.jct.ac.il)
Vlad Moseanu (vlad@actcom.co.il)
Gili Granot (gil@csc.cs.technion.ac.il)
Harvey J. Stein (hjstein@math.huji.ac.il)
Dovie Adler (dadler@hobbes.jct.ac.il)
Gavrie Philipson (gavrie@shekel.jct.ac.il)
Żeby wyjaśnić raz na zawsze jedną rzecz: nie ma czegoś takiego jak ośmiobitowe ASCII. ASCII to tylko siedem bitów. Każdy ośmiobitowy kod nie jest ASCII, ale to nie znaczy że nie jest standardem. ISO-8859-8 jest standardem, ale nie [jest równoważne] ASCII. Dziękuję!
Kodowanie znaków hebrajskich zaczyna się od 128 dziesiętnie (alef). Wymaga więc ono ośmiu bitów. Jest to to co ma się na EPROMach kart wideo jako czcionkę sprzętową [w Izraelu - przyp. tłum.] Wszystkie DOSowe edytory hebrajskiego używają tej tabeli (Qtext, HED itd.)
Kodowanie znaków hebrajskich zaczyna się od 224 (alef). Jest to standard internetowy, międzynarodowy i faktyczny standard MS Windows i Macintoshów (Dagesh itd.)
Jest to kodowanie ośmiobitowe i wyparte z użytku, ponieważ zajmuje zasadniczo ten sam przedział ASCII co angielskie małe litery. Najlepiej więc jest go unikać. Niemniej kiedy hebrajski w ISO utraci ósmy bit wskutek działania jakiegoś ignoranckiego unixowego mailera (tak że otrzymasz plątaninę angielskich liter dla hebrajskiej części listu zmieszaną z normalnym angielskim, odwróconym lub nie). Jeśli w liście mieszały się hebrajski i angielski, jest to przykra sytuacja, bowiem otrzymasz albo hebrajski z bałaganem, albo angielski z bałaganem...
Oto kilka prostych komend do konwersji z każdego standardu na inny:
DOS - ISO: tr '\200-\232' '\340-\372' < {dos_file} > {iso_file}
ISO - DOS: tr '\340-\372' '\200-\232' < {iso_file} > {dos_file}
OLD - DOS: tr -z '\200-\232' < {old_Hebrew_file} > {dos_file}
UWAGA: Numery używane przez tr są w kodzie ósemkowym!
Każda dystrybucja Slackware dostarczana jest z kbd; pakiet ten
zwany jest keytbls w Slackware (dysk a4 w wersji 2.3.0 - kbd 0.90). Joel
Hoffman dostarczył hebrajskie czcionki i układy klawiatury ze swojego
oryginalnego pliku codepage.tar.Z. Zajrzyj do
/usr/lib/kbd/consolefonts
i poszukaj plików iso08.* (czcionki w standardzie ISO-8859-9, dostosowany
jest do nich układ klawiatury).
Wsadź poniższe linie do /etc/rc.d/rc.local:
-----
#!/bin/sh
# Wstaw tu swoją lokalną konfigurację
#
INITTY=/dev/tty[1-6]
PATH=/sbin:/etc:/bin:/usr/sbin:/usr/bin
#
# kbd - Ustaw czcionkę na konsoli i układ klawiatury
# ustaw NumLock i tryb metabitu na konsolach od /dev/tty1 do 6
for tty in $INITTY
do
# setleds -D +num < $tty > /dev/null
setmetamode metabit < $tty > /dev/null
done
# ISO-8859-8 (klawiatura i konsola)
setfont iso08.f16
mapscrn trivial
loadkeys Hebrew
# zezwól na odzworowywanie
for tty in $INITTY
do
echo -n -e "\\033(K" >$tty
done
-----
UWAGA: Jeśli używasz X Windows bądź ostrożny używając setleds,
może to spowodować zawieszenie się X-serwera.
Powyższe ustawienia działają bez zarzutu z hebrajską wersją pico i pine, i wyświetlają poprawny hebrajski w ISO-8859-8 (X Windows, MS Windows).
XFree86 3.1 dostarczany jest z dwoma [bitmapowymi] czcionkami hebrajskimi: heb6x13 i heb8x13. Dodatkowe czcionki znaleźć można w sieci:
dosemu pod X-Windows (przeczytaj tamtejszy
plik README).
/usr/lib/X11/fonts/misc) lub stwórz nowy
(/usr/lib/X11/fonts/Hebrew). Użyj compress (.Z, NIE GZIP!) by
spakować czcionki, dla zaoszczędzenia miejsca.
mkfontdir by (prze)tworzyć plik fonts.dir i
popraw fonts.alias (opcjonalne) definiując nowe aliasy.
mkfontdir nie działa. Musisz dodać
odpowiednie wpisy do fonts.dir ręcznie lub użyć narzędzia type1ins,
dostępnego na mirrorach SunSite - dop. tłum.]
Krótko mówiąc, musisz ustawić odpowiedni zasób.
Wstaw poniższą linię do $HOME/.Xresources:
lub po prostu uruchom xterm poprzez xterm -fn heb8x13. Powyższa
czcionka jest o wiele za mała, więc poszukaj lepszej... patrz uwagi
co do startu X11.
Zwykle użyć możesz czcionek hebrajskich z
snunit-project, Zainstaluj je
tak jak opisano, a potem wstaw poniższe wartości domyślne
do swojego lokalnego .Xdefaults, bądź do app-defaults/Netscape.
----
*documentFonts.latin1.variable.italic*slant: r
*documentFonts.latin1.variable.boldItalic*slant: r
*documentFonts.latin1.variable*family: web
*documentFonts.latin1.fixed*family: webmono
*documentFonts.latin1*registry: iso8859
*documentFonts.latin1*encoding: 8
----
Ogólnie rzecz biorąc, możesz wstawić dowolną czcionkę zamiast powyższych tak długo jak obsługuje ją X11, tak jak opisano.
Z jakiegoś powodu X-serwer nie dziedziczy układu klawiatury z poprzedniego paragrafu [tj. z konsoli - dop. tłum.], a zresztą i tak wolałbym przezdefiniować lewy Alt, prawy Alt i ScrollLock. Naciśnięcie Alt razem z jakimś klawiszem da znak hebrajski, ScrollLock zaś ustawi tryb hebrajski na stałe.
By tego dokonać użyjemy xmodmap. Poniższe jest plikiem .Xmodmap,
który poprawia również błędy dotyczące klawisza NumLock.
-----
! Hebrajski układ klawiatury dla XFree86 (dla klawiatury amerykańskiej)
! Vlad Moseanu
!
keysym Alt_L = Mode_switch
keysym Alt_R = Mode_switch
!clear Mod1
clear Mod2
!add Mod1 = Alt_L
add Mod2 = Mode_switch
!
! Przyporządkuj wartości każdemu klawiszowi
!
keycode 8 =
keycode 9 = Escape
keycode 10 = 1 exclam
keycode 11 = 2 at
keycode 12 = 3 numbersign
keycode 13 = 4 dollar
keycode 14 = 5 percent
keycode 15 = 6 asciicircum
keycode 16 = 7 ampersand
keycode 17 = 8 asterisk
keycode 18 = 9 parenleft
keycode 19 = 0 parenright
keycode 20 = minus underscore
keycode 21 = equal plus
keycode 22 = Delete
keycode 23 = Tab
keycode 24 = q Q slash Q
keycode 25 = w W apostrophe W
keycode 26 = e E 0x00f7 E
keycode 27 = r R 0x00f8 R
keycode 28 = t T 0x00e0 T
keycode 29 = y Y 0x00e8 Y
keycode 30 = u U 0x00e5 U
keycode 31 = i I 0x00ef I
keycode 32 = o O 0x00ed O
keycode 33 = p P 0x00f4 P
keycode 34 = bracketleft braceleft
keycode 35 = bracketright braceright
keycode 36 = Return
keycode 37 = Control_L
keycode 38 = a A 0x00f9 A
keycode 39 = s S 0x00e3 S
keycode 40 = d D 0x00e2 D
keycode 41 = f F 0x00eb F
keycode 42 = g G 0x00f2 G
keycode 43 = h H 0x00e9 H
keycode 44 = j J 0x00e7 J
keycode 45 = k K 0x00ec K
keycode 46 = l L 0x00ea L
keycode 47 = semicolon colon 0x00f3 colon
keycode 48 = apostrophe quotedbl comma quotedbl
keycode 49 = grave asciitilde semicolon asciitilde
keycode 50 = Shift_L
keycode 51 = backslash bar
keycode 52 = z Z 0x00e6 Z
keycode 53 = x X 0x00f1 X
keycode 54 = c C 0x00e1 C
keycode 55 = v V 0x00e4 V
keycode 56 = b B 0x00f0 B
keycode 57 = n N 0x00ee N
keycode 58 = m M 0x00f6 M
keycode 59 = comma less 0x00fa less
keycode 60 = period greater 0x00f5 greater
keycode 61 = slash question period question
keycode 62 = Shift_R
keycode 63 = KP_Multiply
!keycode 64 = Alt_L Meta_L
keycode 65 = space
keycode 66 = Caps_Lock
keycode 67 = F1
keycode 68 = F2
keycode 69 = F3
keycode 70 = F4
keycode 71 = F5
keycode 72 = F6
keycode 73 = F7
keycode 74 = F8
keycode 75 = Escape
keycode 76 = F10
keycode 77 = Num_Lock
keycode 78 = Scroll_Lock
keycode 79 = KP_7
keycode 80 = KP_8
keycode 81 = KP_9
keycode 82 = KP_Subtract
keycode 83 = KP_4
keycode 84 = KP_5
keycode 85 = KP_6
keycode 86 = KP_Add
keycode 87 = KP_1
keycode 88 = KP_2
keycode 89 = KP_3
keycode 90 = KP_0
keycode 91 = KP_Decimal
keycode 92 = Sys_Req
keycode 93 =
keycode 94 =
keycode 95 = F11
keycode 96 = F12
keycode 97 = Home
keycode 98 = Up
keycode 99 = Prior
keycode 100 = Left
keycode 101 = Begin
keycode 102 = Right
keycode 103 = End
keycode 104 = Down
keycode 105 = Next
keycode 106 = Insert
keycode 107 = Delete
keycode 108 = KP_Enter
keycode 109 = Control_R
keycode 110 = Pause
keycode 111 = Print
keycode 112 = KP_Divide
!keycode 113 = Alt_R Meta_R
keycode 114 = Break
!
! Tego pliku .Xmodmap używać można dla ustawienia prawidłowej klawiatury
! numerycznej przy ustawieniu ServerNumLock w pliku XF86Config. W tym
! wypadku obsługą NumLock zajmuje się X-serwer.
!
!
keycode 136 = KP_7
keycode 137 = KP_8
keycode 138 = KP_9
keycode 139 = KP_4
keycode 140 = KP_5
keycode 141 = KP_6
keycode 142 = KP_1
keycode 143 = KP_2
keycode 144 = KP_3
keycode 145 = KP_0
keycode 146 = KP_Decimal
keycode 147 = Home
keycode 148 = Up
keycode 149 = Prior
keycode 150 = Left
keycode 151 = Begin
keycode 152 = Right
keycode 153 = End
keycode 154 = Down
keycode 155 = Next
keycode 156 = Insert
keycode 157 = Delete
-----
Aby używać powyższego .Xmodmap zdefiniuh "Scroll-Lock Mode-Lock" w XF86Config.
Jeśli używasz xdm, plik $HOME/.xsession powinien wyglądać jak niżej:
-----
#!/bin/sh
# $XConsortium: Xsession,v 1.9 92/08/29 16:24:57 gildea Exp $
#
# General defs
#
export OPENWINHOME=/usr/openwin
export MANPATH=/usr/local/man:/usr/man/preformat:/usr/man:/usr/X11R6/man
#export HOSTNAME="`cat /etc/HOSTNAME`"
export PATH="/bin: /usr/bin: /usr/X11/bin: /usr/X386/bin: /usr/TeX/bini: /usr/local/bin: /usr/games:."
LESS=-MM
if [ -z $XAPPLRESDIR ]; then
XAPPLRESDIR=/usr/lib/X11/app-defaults:/usr/local/lib/X11/app-defaults
else
XAPPLRESDIR=$XAPPLRESDIR:/usr/lib/X11/app-defaults
fi
export XAPPLRESDIR
#
sysresources=/usr/lib/X11/Xresources
sysmodmap=/usr/lib/X11/Xmodmap
resources=$HOME/.Xresources
xmodmap=$HOME/.Xmodmap
if [ -f $sysresources ]; then
xrdb -merge $sysresources
fi
if [ -f $sysmodmap ]; then
xmodmap $sysmodmap
fi
if [ -f $resources ]; then
xrdb -merge $resources
fi
if [ -f $xmodmap ]; then
xmodmap $xmodmap
fi
#
# Uruchom aplikacje
#
# xterm -ls -sb &
xhost + # uważaj !!!
exec fvwm
-----
Jeśli wolisz startx, użyj powyższego jako przykładowego .xinitrc.
Po więcej szczegółów zajrzyj do ISO 8859-1 HOWTO.
Stwórz plik $HOME/.inputrc zawierający co następuje:
-----
set meta-flag On
set convert-meta Off
set output-meta On
-----
Zdefiniuj co następuje w pliku $HOME/.login lub /etc/csh.login:
setenv LANG iw_IL.ISO8859-8 (lub iw_IL)
Ponieważ jednak binarna wersja tcsh jest faktycznie skompliowana
bez NLS, zmienną LANG można ustawić dowolnie i nadal będzie ona działać
(nie ma potrzeby tworzenia /usr/lib/nls...).
Pine i towarzyszący mu edytor pico zostały przerobione przez Helen Zommer z CC-huji; adres e-mail do zgłaszania błędów to pineh-bug@horizon.cc.huji.ac.il. Można je ściągnąć z ftp://horizon.cc.huji.ac.il/pub.
emacsa 18.58 i pakiet w
elisp. Działa w porządku, ale nikt już dziś nie używa emacsa 18.*.
Można go zdobyć z
ftp://archive.cis.ohio-state.edu/pub/gnu/emacs/elisp-archive/misc/Hebrew.tar.Z.emacsem
19.*. Osiągalny z
ftp://archive.cis.ohio-state.edu/pub/gnu/emacs/elisp-archive/misc/Hebrew.el.Z.emacsa - MULE (MultiLingual Emacs) obsługuje
wiele języków, w tym hebrajski. Kompiluje się i działa pod Linuxem
bez żadnego problemu. Jest to pełny emacs, z obsługą hebrajskiego
i pisaniem w obie strony. Można go uzyskać z
ftp://kelim.jct.ac.il/pub/Hebrew
Dla dosemu na WK możesz użyć swojej czcionki hebrajskiej z
EPROMu karty graficznej, a jeśli jej nie masz, istnieje cała masa
DOSowych czcionek hebrajskich z obsługą od EGA do VGA.
Co do X-Windows, powinieneś zdobyć plik ftp://sunsite.unc.edu/pub/Linux/X11/fonts/hebxfonts-0.1.tgz. Zawiera on kilka czcionek, w tym jedną zwaną vgah.pcf, która powienieneś zainstalować w swoim katalogu z czcionkami jak opisano powyżej
Istnieje pisane od podstaw przeniesienie zwykłego xterma na użytek
z hebrajskimi czcionkami (XHTerm = xterm + obsługa hebrajskiego).
Wersja dla Suna udostępniona została z pomocą Danny'ego
<tt>danny@cs.huji.ac.il</tt>. Jewgienij ma jakąś łatę do używania
tej wersji pod Linuxa. Razem z jego wersją powinieneś znaleźć już
skompilowany XHTerm dla X11R5 oraz X11R6. xhterm używać powinieneś
z opcją -fn i hebrajską czcionką
jak opisano! Wersję Danny'ego (dla Suna) uzyskać można z
ftp://ftp.huji.ac.il/pub/local/xhterm,
a połatana wersja Jewgienija Stambulczika znajduje się w
ftp://plasma-gate.weizmann.ac.il/pub/software/linux.
Zdobądź ją stamtąd, a otrzymasz z nią pięć
czcionek: [heb10x20.pcf, heb6x13.bdf, heb6x13.pcf,
heb8x13.bdf, heb8x13.pcf]
Największym problemem z TeXem po hebrajsku jest to że znaki powinny
biec w tył względem widoku (tj. pico powinien wstawiać znaki od prawej
do lewej), tak więc najlepszą rzeczą jest zdobycie XHterm plus zwykły
emacs i pisanie hebrajskim od lewej do prawej, a także do tyłu.
Nowsze dystrybucje NTeXa na SunSite (v. 1.5) zawierają wszystko, w tym
TeX--XeT, skompilowany dla Linuxa. Zdobyć go można z
ftp://sunsite.unc.edu.gz/pub/Linux/apps/tex/ntex.
Starszą wersję TeX--XeT uzyskać można z
ftp://noa.huji.ac.il/tex.
Tą starszą wersję trzeba jednak zrekompilować (niepolecane).
Te wydania TeXa działają dobrze jeśli używasz LaTeXa 2.09. Jeśli chcesz
używać LaTeXa 2e (bieżący standard, de facto), masz problem. Alon Ziv
(alonz@csa.cs.technion.ac.il) pracuje obecnie nad obsługą
hebrajskiego w LaTeX 2e, z użyciem systemu Babel. Nie znam obecnego
stanu prac - zapytaj go!
Nie ma co dużo mówić: jeśli masz zwykłą drukarkę igłową ASCII (ktoż dzisiaj ma?) jest spora szansa że w EPROMie są hebrajskie znaki. Jeśli używasz postscriptu, powienieneś załadować czcionki do drukarki (zawsze możesz użyć do tego czcionek sieciowych wspomnianych powyżej. Czcionek tych można także używać z GhostScriptem.
Jeśli masz drukarkę PCL (LaserJet itd.) możesz użyć albo kasetek z czcionkami, albo GhostScriptu.
Obsługa hebrajskiego dla X Windows i Motifa, produkt El-Mar Software, która dodaje funkcjonalność hebrajską do wielu części i warstw X Windows i Motifa, w tym Xlib, wszystkie widgety Motifa, hterm (hebrajski xterm), dema i proste pożyteczne aplikacje (np. dwujęzykowy edytor oparty na Motif), czcionki (w tym skalowalne Type1), menedżera klawiatury uwzględniającego hebrajski oraz push-mode dla aplikacji nie-Motifowych itd. Mimo wprowadzenia wielu nowych cech i wariacji widgetów Motiffa, obsługa ta nie modyfikuje w żaden sposób wewnętrznej struktury danych Motifa, tak więc instniejące aplikacje, skompilowane i złączone w środowisku i bibliotekami niehebrajskimi można przełączyć (bez rekompilacji!) i uruchamiać z hebrajskim (dzielone biblioteki można zastępować, więc nawet przełączenie nie jest potrzebne!) Używając innego naszego narzędzia, Motif/Xplorer, możesz wziąć aplikacje komercyjne (bez źródła) i przetłumaczyć je na hebrajski. Takim sposobem dodano obsługę hebrajskiego do Oracle Forms 4, Kappy i OMW Intellicorpu, CA-Unicenter i wielu innych szeroko używanych narzędzi Unixowych sprzedawanych w Izraelu. Produkt ten zakupiła i zastosowała większość sprzedawców stacji roboczych (dziewięciu z nich, w tym najwięksi: Sun, HP, SGI), i wiele innych firm wytwarzających oprogramowanie. Pliki makefile istnieją na ponad 30 platform i systemów operacyjnych. Wierzymy tylko w "otwarte" oprogramowanie, tak więc wszyscy klienci otrzymują kompletny kod źródłowy. Posiadamy dobre stosunki z przodującymi siłami w tym przemyśle, w tym z działami technicznym X-Consortium oraz COSE.
Eli Marmor
El-Mar Software Ltd.
Tel.: 050-237338
FAX: 09-984279
marmor@sunshine.cs.biu.ac.ilPS. Zapowiedź obsługi arabskiego w X Windows i Motifie spodziewana jest w styczniu [1996]. Angielski, hebrajski i arabski obsługiwane będą ośmioma bitami (!), wliczając w to pełny zestaw znaków arabskich.
Linux jest całkowicie darmowym systemem operacyjnym zgodnym ze standardem POSIX, z rozszerzeniami SYSV i BSD (to znaczy, że wygląda jak Unix, ale nie jest oparty o jego kod). Dostępna jest zarówno jego skompilowana wersja, jak i kod źródłowy. Prawa autorskie do Linuksa należą do Linusa Torvaldsa (<torvalds@transmeta.com>) oraz osób współtworzących kod. Linux jest rozpowszechniany za darmo na warunkach określonych w licencji GNU. Treść tej licencji dołączana jest do pakietu ze źródłami systemu, można się z nią również zapoznać pod adresem ftp://prep.ai.mit.edu/pub/gnu/COPYING. (Od tłumacza: tłumaczenie licencji GPL na język polski znajduje się pod adresem http://www.linux.org.pl/gpl.php.)
Linux jako taki to tylko jądro systemu operacyjnego, część odpowiedzialna za obsługę sprzętu, zarządzanie plikami, procesami, itd. Dopiero odpowiednie zestawienie jądra ze zbiorem programów użytkowych i aplikacji tworzy całość systemu operacyjnego. Takie zestawienie nazywa się dystrybucją. Słowo Linux, chociaż tak naprawdę oznacza tylko jądro, używane jest powszechnie -- i poprawnie! -- w znaczeniu ,,system operacyjny oparty na jądrze Linuksa''. Zwięzły opis poszczególnych dystrybucji znajduje się w Distributions-HOWTO. Żadna z tych dystrybucji nie jest ,,oficjalnym Linuksem''.
Linux nie jest oprogramowaniem ,,public domain'' ani ,,shareware''. Jest to system darmowy, a powszechnie używanymi terminami są freeware lub oprogramowanie wolnodostępne (Open Source Software[tm], zob. http://www.opensource.org (od tłumacza: informacje nt. Open Source po polsku znajdują się pod adresem http://www.opensourcepl.org)). Rozdawnictwo i sprzedaż kopii Linuksa dozwolone są pod warunkiem jednoczesnego udostępnienia kodu źródłowego. W przypadku wprowadzenia własnych modyfikacji do kodu prawnie wymagane jest udostępnienie również źródeł owych modyfikacji. Szczegóły zawarte są w licencji GNU.
Linux jest wolnodostępny i takim pozostanie. Ze względu na naturę licencji GPL, o którą ten system jest oparty, nielegalne byłoby tworzenie go w inny sposób. Zwróć uwagę, że ,,wolnodostępny'' oznacza dostępność kodu źródłowego, a nie po prostu darmowość; dozwolone jest bowiem rozpowszechnianie Linuksa za pieniądze. Jedynym warunkiem jest udostępnianie z nim jego kodu źródłowego. To oczywiście uogólnienie; jeśli interesują Cię szczegóły, zapoznaj się z treścią licencji GPL.
Linux działa na komputerach 386/486/Pentium wyposażonych w szyny ISA, EISA, PCI i VLB. IBM-owska magistrala MCA nie jest najlepiej obsługiwana przez jądra 2.0.x i wcześniejsze, sytuacja zmieniła się jednak w wersji 2.1.x i kolejnych, zob. http://glycerine.itsmm.uni.edu/mca.
Istnieje wersja dla procesorów Motorola 680x0 (chodzi o komputery takie jak Amigi, Atari i VME), która działa już całkiem dobrze. Wersja ta pracuje na Motoroli 68020 z MMU, na 68030, 68040, 68050, wymaga też FPU. Działa już X Window System i sieć. Zob. news:comp.os.linux.m68k.
Linux działa dobrze również na procesorach Alpha DECa. Obecnie wspierane są takie platformy, jak "Jensen", "NoName", "Cabriolet", "Universal Desktop Box" (Multia) i inne. Zob. http://www.azstarnet.com/~axplinux/FAQ.html.
Wspierane są też SPARCi Suna (większość maszyn sun4c, sun4m i sun4u; rozwijane wsparcie dla sun4). Obecnie jedyną dostępną na SPARC dystrybucją jest Red Hat. Zob. http://www.redhat.com/support/docs/rhl-sparc/.
Aktywnie tworzona jest wersja na PowerPC (w tym PowerMac (Nubus i PCI), Motorola, IBM i Be). Zob. http://www.cs.nmt.edu/~linuxppc/ i http://www.linuxppc.org/.
Wersje na inne maszyny (również MIPS (zob. http://linus.linux.sgi.com i http://lena.fnet.fr/) i ARM) są na różnych etapach rozwoju; nie oczekuj zbyt wiele. Jeśli możesz zaangażować się w rozwój tych wersji, z pewnością znajdziesz współpracowników.
Rozwój Linuksa przekroczył już etap testowania; wersja 1.0 ukazała się 14 marca 1994. System nie jest wolny od błędów, a w trakcie pracy na nim na pewno pojawią się w nim i zostaną usunięte kolejne niedoskonałości. Linux rozwijany jest w sposób ,,otwarty'' -- wszystkie kolejne wersje, niezależnie od tego, czy można je uznać za ,,gotowe'', czy nie, są udostępniane użytkownikom. Informacja o stabilności kolejnych wersji zawarta jest w ich numerze: wersje n.x.y gdzie x jest liczbą parzystą są wersjami stabilnymi, a zwiększanie się liczby y oznaka kolejne poprawki (np. wersje 1.2.2 i 1.2.3 różnią się od siebie tylko ilością wprowadzonych poprawek, a nie możliwościami). Wersje n.x.y gdzie x jest liczbą nieparzystą są wersjami testowymi wypuszczanymi dla osób pracujących nad ich rozwojem; mogą być niestabilne i wieszać się, stale też zwiększają się ich możliwości. Gdy bieżąca wersja rozwojowa jądra zostaje uznana za stabilną, zostaje ona ,,zamrażana'' jako kolejna wersja stabilna, a rozwijana wersja otrzymuje nowy numer.
Większość wersji jądra, i stabilnych i rozwojowych, jest raczej godna zaufania; ,,stabilna'' oznacza w tym kontekście dodatkowo ,,powoli zmieniająca się''. Można używać którejkolwiek z tych wersji, jeśli działa ona zgodnie z oczekiwaniami (chyba, że koniecznie chcesz mieć wersję najnowszą). Na przykład pochodząca z 1992 roku wersja 0.97p1 bezproblemowo używana była na pewnym serwerze przez 136 dni bez przerwy (a działałaby pewnie dłużej, gdyby operator koparki przypadkowo nie uszkodził transformatora). Znane są przypadki ciągłego używania Linuksa przez ponad rok, wiadomo też o komputerze, na którym wg ostatnich wiadomości wersja 0.99p15s chodziła nieprzerwanie od 600 dni.
Obecną stabilną wersją jądra jest 2.0.35 (numer będzie się zmieniał w miarę dodawania nowych sterowników i wprowadzania poprawek), rozpoczęto też prace nad wersją 2.1.x. Pakiet z kodem źródłowym jądra Linuksa zawiera plik Documentation/Changes opisujący zmiany, o których należy wiedzieć przy zmienianiu używanej wersji na nowszą. Większość użytkowników Linuksa po prostu aktualizuje od czasu do czasu całą dystrybucję, a tym samym i jądro.
Jak już wspomniano, model rozwoju jądra Linuksa jest modelem otwartym i zdecentralizowanym (w przeciwieństwie do modelu stosowanego w przypadku rozwoju wielu innych rodzajów oprogramowania); oznacza to, że najnowsze wersje są zawsze udostępniane użytkownikom. Co za tym idzie, każda wersja posiadająca jakąś nową funkcjonalność zawiera błędy -- ale dzięki jej upublicznieniu błędy te są bardzo szybko (często w przeciągu godzin) wyłapywane i usuwane.
Natomiast zamknięty i scentralizowany model rozwoju oprogramowania oznacza, że tylko jedna osoba lub grupa pracuje nad projektem, a nowe wersje oprogramowania publikowane są tylko wtedy, gdy autorzy uznadzą je za wolne od błędów. Powoduje to często znaczne wydłużenie się czasu oczekiwania na nową wersję i na poprawki błędów oraz generalnie wolniejszy rozwój. Najnowsze wersje takiego oprogramowania są czasem wyższej jakości niż wersje oprogramowania tworzonego w sposób otwarty, ceną jednak jest znaczne spowolnienie rozwoju.
Oba w/w modele rozwoju oprogramowania omówione i zanalizowane zostały w The Cathedral and the Bazaar Erica Raymonda; zob. http://sagan.earthspace.net/~esr/writings/cathedral-bazaar/.
1 września 1998 ostatnią stabilną wersją jądra jest 2.0.35, a wersją rozwojową 2.1.119.
Prawdopodobnie najuboższą konfiguracją sprzętową umożliwiającą uruchomienie Linuksa jest 386SX/16, 1 MB RAM, stacja dysków 1.44 lub 1.2 MB, którakolwiek ze wspieranych kart graficznych (+ oczywiście klawiatura, monitor, itd). Taki sprzęt pozwoli na uruchomienie systemu i sprawdzenie, czy w ogóle działa on na tym komputerze; nie da się jednak na czymś takim wykonywać żadnej sensownej pracy. Omówienie minimalnych konfiguracji znajdziesz pod adresem http://rsphy1.anu.edu.au/~gpg109/mem.html.
Żeby móc cokolwiek zrobić potrzeba trochę miejsca na dysku twardym. 5 do 10 MB powinno wystarczyć na bardzo prostą instalację (zawierającą tylko podstawowe polecenia systemowe i może jedną lub dwie proste aplikacje -- np. program terminala). Taki system jest jednak bardzo ograniczony i niewygodny, zajmuje bowiem prawie całe dostępne miejsce -- chyba, że zainstalowane aplikacje są naprawdę małe. Generalnie nadaje się tylko do celów testowych, i przechwałek na temat niewielkich wymagań sprzętowych.
Jeśli zamierzasz uruchamiać wymagające dużej mocy obliczeniowej programy takie jak gcc, X, czy TeX, potrzebujesz procesora szybszego niż 386SX/16 -- chociaż cierpliwym i taki wystarczy.
W praktyce system bez X wymaga 4 MB, a z X 8 MB. Więcej niż 4 MB zalecane jest również w przypadku systemu obsługującego wielu użytkowników równocześnie, oraz systemu, pod którym jednocześnie będzie pracować kilka dużych programów (jak chociażby kompilacji). Oczywiście wszystko to będzie działać również przy mniejszej ilości pamięci; Linux wykorzysta w takim przypadku pamięć podręczną (powolną pamięć dyskową); jest to jednak tak wolne, że prawie nie da się tego używać. 16 MB znacząco ogranicza wykorzystanie pamięci dyskowej przy uruchomieniu wielu programów, a 32 MB przy normalnej pracy jednego użytkownika zazwyczaj całkowicie eliminuje problem. 64 i więcej MB zalecane jest przy jednoczesnym uruchamianiu wielu bardzo pamięciożernych aplikacji.
Wielkość wymaganej przestrzeni dyskowej zależy naturalnie od rodzaju instalowanego oprogramowania. Zwykły zestaw uniksowych narzędzi, powłok i programów do administrowania systemem swobodnie zmieści się na 10 MB -- zostanie nawet trochę miejsca na pliki użytkownika. System bardziej kompletny (np. Red Hat, Debian, czy inna dystrybucja) wymaga do 60 do 600 MB w zależności od instalowanych komponentów. Do tego dodać należy miejsce przeznaczone na pliki użytkowników. Przy dzisiejszych cenach twardych dysków nie ma sensu ryzykowanie, że nagle zabraknie miejsca. Warto więc nabyć dysk o pojemności co najmniej 2 GB, a lepiej 4 GB lub nawet więcej -- nie zmarnuje się, to pewne. Linux bezproblemowo obsługuje duże dyski twarde, np. popularne ostatnio dyski 11 GB na IDE i 18 GB na SCSI.
Jeśli chcesz/potrzebujesz/stać Cię na konfigurację lepszą od minimalnej, możesz rozszerzyć swój komputer o więcej pamięci, większy dysk twardy, szybszy procesor i inne urządzenia. Linux różni się tu bardzo od DOS-a, w którym rozszerzanie pamięci dawało umiarkowane zaledwie efekty -- w Linuksie różnica jest ogromna. Powodem jest oczywiście ograniczenie DOS-a do 640 Kb, ograniczenie, od którego Linux jest wolny.
Wszystko, co może uruchomić programy w trybie chronionym 386. Wszystkie modele 386, 486, Pentium, Pentium Pro, Pentium II i ich klony powinny działać (286 i starsze być może będą któregoś dnia obsługiwane przez mniejsze jądro zwane ELKS, nie należy od niego jednak oczekiwać tych samych możliwości). Wersje dla procesorów 680x0 (dla x=2+zewnętrzna jednostka zarządzania pamięcią (MMU), 3, 4 lub 6) obsługujących komputery Amiga i Atari dostępne są na serwerze tsx-11.mit.edu w katalogu 680x0. Wspierane jest również wiele maszyn DEC Alpha, SPARC i PowerPC. Trwają prace nad wersjami dla architektur ARM, StrongARM i MIPS.
PCI, ISA, EISA i VLB. Obsługa MCA (głównie PS/2) jest jeszcze niekompletna (prace trwają, patrz wyżej). Linux wymaga od sprzętu więcej niż DOS, Windows, czy większość pozostałych systemów operacyjnych. Oznacza to, że pod kontrolą tych mniej wymagających systemów sprzęt może działać bezbłędnie, a pod Linuksem zawiedzie. Linux jest doskonałym testerem pamięci...
Na platformach intelowskich do 1 GB; na platformach 64-bitowych więcej. Niektórzy (w tym Linus) zauważyli, że dodanie pamięci bez powiększenia bufora (cache) bardzo spowalnia ich komputer. Jeśli po rozszerzeniu pamięci zaobserwujesz podobne objawy, zwiększ cache. Niektóre komputery nie są w stanie zbuforować więcej niż określoną ilość pamięci (najczęściej jest to 64 MB), niezależnie od tego, ile fizycznie pamięci jest zainstalowane. Jest to spowodowane tym, że BIOS oryginalnie nie był przeznaczony do wykrywania pamięci ponad 64 MB. Jądra 2.1.x i nowsze automatycznie radzą sobie z takimi sytuacjami, natomiast jądra 2.0.35 i wcześniejsze wymagają podania im specjalnego parametru podczas inicjalizacji systemu.
Obsługiwane są typowe dyski AT (EIDE, IDE, 16-bitowe kontrolery z MFM, RDD lub ESDI), jak również dyski SCSI, CD-ROMy na obsługiwanej karcie SCSI i typowe kontrolery XT (8-bitowe kontrolery z MFM lub RLL). Wspierane karty SCSI to: Advansys, seria Adaptec 1542, 1522, 1740, 27xx, i 29xx (z kilkoma wyjątkami), Buslogic MultiMaster i Flashpoint, kontrolery oparte o NCR53c8xx, kontrolery DPT, Qlogic ISP i FAS, Seagate ST-01 i ST-02, seria Future Domain TMC-88x (lub inne karty z kością TMC950), TMC1660/1680, Ultrastor 14F, 24F i34F, Western Digital wd7000, i inne. Obsługiwane są również pamięci taśmowe SCSI, QIC-02, i niektóre QIC-80. Obok CD-ROMów IDE i SCSI wspierany jest też szereg CD-ROMów o zastrzeżonej architekturze (są to m.in. Matsushita/Panasonic, Mitsumi, Sony, Soundblaster, Toshiba, ATAPI (EIDE), SCSI i inne). Informacje o konkretnych modelach znajdują się w Hardware Compatibility HOWTO. Wykazy te są i zawsze będą niekompletne. Bardziej aktualnych informacji dostarczają producenci dystrybucji.
Pracę w trybie tekstowym umożliwiają karty VGA, EGA, CGA, Hercules (i zgodne). Wyświetlać grafikę i pracować z X-Window można za pomocą (co najmniej) zwykłych kart VGA, niektórych Super-VGA (większość z kart bazujących na kości Tseng, Paradise i niektórych Tridentach), S3, 8514/A, ATI, Matrox, i Herculesa (używanym przez Linuksa serwerem X jest XFree86, co determinuje, które karty są obsługiwane. Pełna lista samych wspieranych kości zajmuje ponad stronę. Patrz http://www.XFree86.org/).
Zbiór obsługiwanych kart sieciowych zawiera: 3COM 503/509/579/589/595/905 (501/505/507 są wspierane, ale nie polecane), AT&T GIS (neé NCR) WaveLAN, większość kart opartych o WD8390 lub WD80x3, NE1000/2000 i większość ich klonów, AC3200, Apricot 82596, AT1700, ATP, DE425/434/435/500, D-Link DE-600/620, DEPCA, DE100/101, DE200/201/202 Turbo, DE210, DE422, Cabletron E2100 (nie polecana), Intel EtherExpress (nie polecana), EtherExpress Pro, EtherExpress 100, DEC EtherWORKS 3, HP LAN, HP PCLAN/plus, większość kart opartych o AMD LANCE, NI5210, ni6510, SMC Ultra, DEC 21040 (tulip), Zenith Z-Note ethernet. Żadna z kart Zircom i Cabletron (oprócz E2100) nie jest obsługiwana, ponieważ producent odmówił udzielenia programistom odpowiednich informacji. Obsługa sieci światłowodowych: karty DEFxx DEC-a. Obsługa protokołu sieciowego Point-to-Point: PPP (zarówno dla urządzeń asynchronicznych (modemy), jak i połączeń synchronicznych (ISDN)), SLIP, CSLIP, PLIP. Ograniczona obsługa Token Ring.
Większość kart opartych o 16450 i 16550 UART, w tym AST Fourport, Usenet Serial Card II i inne. Wspierane inteligentne karty to: seria Cyclades Cyclom (wsparcie od producenta), seria Comtrol Rocketport (wsparcie od producenta), Stallion (większość kart: wsparcie od producenta), i Digi (niektóre karty: wsparcie od producenta). Obsługa ISDN, frame relay (tranzytu ramki) i łącza dzierżawionego.
SoundBlaster, ProAudio Spectrum 16, Gravis Ultrasound, większość pozostałych kart dźwiękowych, większość (wszystkie?) rodzajów myszy (Microsoft, Logitech, PS/2), itd.
Pod Linuksem dostępne są wersje większości podstawowych narzędzi i programów znanych z systemów uniksowych, w tym prawie całość oprogramowania opartego na licencji GNU i wiele pochodzących z różnych źródeł klientów X. Słowo `wersje' jest być może zbyt mocne, często bowiem dzięki zgodności Linuksa z normą POSIX programy te nie wymagają żadnych (lub prawie żadnych) modyfikacji do kompilacji pod tym systemem. Aplikacji nigdy za wiele; dla użytkowników i administratorów Linuksa pojawia się ich coraz więcej. Zapytaj producenta swojego ulubionego komercyjnego programu dla Unixa, czy wypuścił już jego wersję na Linuksa!
Poniżej znajduje się niekompletna lista oprogramowania działającego pod Linuksem:
ls, tr, sed, awk itp, itd, (wymień którąś -- i zapewne
będzie w Linuksie).
gcc, gdb, make, bison,
flex, perl, rcs, cvs, prof.
C, C++, Objective C, Java, Modula-3, Modula-2, Oberon, Ada95, Pascal, Fortran, ML, scheme, Tcl/tk, Perl, Python, Common Lisp i wiele innych.
GNOME i KDE (desktopy), X11R6 (XFree86 3.x), X11R5 (XFree86 2.x), MGR.
GNU Emacs, XEmacs, MicroEmacs, jove, ez, epoch,
elvis (GNU vi), vim, vile, joe, pico, jed i inne.
bash (zgodny z POSIX sh), zsh (zawiera tryb zgodności z ksh,
pdksh, tcsh, csh, rc, es, ash
(prawie całkowicie zgodna z sh powłoka używana jako /bin/sh w BSD),
i wiele więcej.
PPP, UUCP, SLIP, CSLIP, pełen zestaw narzędzi TCP/IP, kermit, szrz,
minicom, pcomm, xcomm, term
(pozwala na uruchamianie wielu powłok, przekierowywanie ruchu sieciowego i
zdalną pracę pod X, a wszystko to na jednej linii telefonicznej), Seyon
(popularny program komunikacyjny dla X), wiele pakietów do obsługi faksów i
poczty głosowej (przy użyciu ZyXELa i innych modemów). Zdalna praca przez port
szeregowy lub sieć też oczywiście jest możliwa.
C-news, innd, trn, nn, tin,
smail, elm, mh, exmh, pine, mutt, itd.
TeX, groff, doc, ez, LyX, Lout, Linuxdoc-SGML, i inne.
Nethack, wiele Mud-ów, gier dla X-ów i mnóstwo innych. Jedną z gier jest przeglądanie gier dostępnych na tsx-11 i sunsite. :-)
Wszystkie te programy (a nie jest to nawet setna część dostępnego oprogramowania) są darmowe. Zwiększa się też dostępność oprogramowania komercyjnego; spytaj producenta swojego ulubionego komercyjnego programu o wersję dla Linuksa!
Linux jest dostępny za darmo, nie trzeba nigdzie rejestrować posiadanych i używanych kopii -- trudno jest więc stwierdzić, ilu ludzi używa tego systemu. Jednak faktem jest, że kilka firm utrzymuje się wyłącznie ze jego sprzedaży, a linuksowe grupy są jednym z najbardziej obleganych zakątków Usenetu -- użytkowników musi więc być miliony; trudno jednak o konkretne dane. Najlepsze badania rynku szacują obecnie tę liczbę na 7,5 do 11 milionów.
Odważny człowiek, Harald T. Alvestrand
(<Harald.T.Alvestrand@uninett.no>),
podjął ambitną próbę policzenia użytkowników Linuksa ,,sztuka po sztuce''.
Jeśli chcesz zostać policzony, użyj formularzy dostępnych na stronach
http://counter.li.org/ lub wyślij e-mail o jednym z dwóch tematów:
I use Linux at home
(,,używam Linuksa w domu'') lub I use Linux at home and at work
(,,używam Linuksa w domu i w pracy'') na adres linux-counter@uninett.no.
Honorowane są również zgłoszenia nieosobiste, o szczegóły pytaj autora projektu.
Harald wysyła co miesiąc aktualne statystyki na grupę comp.os.linux.misc. Informacje te są również dostępne na WWW: http://counter.li.org/.
Wolną od ograniczeń w dystrybucji dokumentację Linuksa znajdziesz na serwerze the Linux Documentation Project: ftp://sunsite.unc.edu/pub/Linux/docs/LDP/ i http://sunsite.unc.edu/LDP/. (Od tłumacza: polskie wersje dużej części umieszczonych tam dokumentów znajdują się na stronach JTZ: http://www.jtz.org.pl/.)
Po najświeższe wiadomości zajrzyj na grupę comp.os.linux.announce.
Linuksa ściągnąć można z (m.in.) następujących anonimowych serwerów ftp:
Nazwa Adres IP Katalog
============================= =============== ===============
tsx-11.mit.edu 18.172.1.2 /pub/linux
sunsite.unc.edu 152.2.22.81 /pub/Linux
ftp.funet.fi 128.214.248.6 /pub/Linux
net.tamu.edu 128.194.177.1 /pub/linux
ftp.mcc.ac.uk 130.88.203.12 /pub/linux
src.doc.ic.ac.uk 146.169.2.1 /packages/linux
fgb1.fgb.mw.tu-muenchen.de 129.187.200.1 /pub/linux
ftp.informatik.tu-muenchen.de 131.159.0.110 /pub/comp/os/linux
ftp.dfv.rwth-aachen.de 137.226.4.111 /pub/linux
ftp.informatik.rwth-aachen.de 137.226.225.3 /pub/Linux
ftp.Germany.EU.net 192.76.144.75 /pub/os/Linux
ftp.lip6.fr 132.227.77.2 /pub/linux
ftp.uu.net 137.39.1.9 /systems/unix/linux
wuarchive.wustl.edu 128.252.135.4 mirrors/linux
ftp.win.tue.nl 131.155.70.100 /pub/linux
ftp.stack.urc.tue.nl 131.155.2.71 /pub/linux
srawgw.sra.co.jp 133.137.4.3 /pub/os/linux
cair.kaist.ac.kr /pub/Linux
ftp.denet.dk 129.142.6.74 /pub/OS/linux
NCTUCCCA.edu.tw 140.111.1.10 /Operating-Systems/Linux
nic.switch.ch 130.59.1.40 /mirror/linux
sunsite.cnlab-switch.ch 193.5.24.1 /mirror/linux
cnuce_arch.cnr.it 131.114.1.10 /pub/Linux
ftp.monash.edu.au 130.194.11.8 /pub/linux
ftp.dstc.edu.au 130.102.181.31 /pub/linux
ftp.sydutech.usyd.edu.au 129.78.192.2 /pub/linux
tsx-11.mit.edu
oraz fgb1.fgb.mw.tu-muenchen.de
są oficjalnymi serwerami GCC.
Niektóre serwery są kopiami innych -- jeśli możesz, użyj najbliższego (sieciowo) sobie.
Co najmniej sunsite.unc.edu
i ftp.informatik.tu-muenchen.de
udostępniają usługę ftp przez e-mail. Więcej informacji pod adresami
ftpmail@sunsite.unc.edu i ftp@informatik.tu-muenchen.de.
Jeśli czujesz się zagubiony, zajrzyj do Distribution-HOWTO, gdzie wymieniona jest część dystrybucji. W chwili obecnej, przynajmniej w USA, najpopularniejsze są Red Hat i Debian.
Większość ludzi instaluje Linuksa z kompaktów. Dystrybucje rozrosły się do setek megabajtów oprogramowania; ściąganie tego przez modem 28.8 lub ISDN trwa dłuuugo.
Linuksa na płytce można nabyć na dwa sposoby: jako część archiwów FTP, albo bezpośrednio od producenta. Nabycie archiwów często umożliwia wybór dystrybucji, oznacza jednak również rezygnację ze wsparcia technicznego. Przy zakupie od producenta dystrybucji zazwyczaj wybrać nie można, oferowana jest za to jakaś forma wsparcia (najczęściej pomoc w instalacji).
Istnieje więcej BBSów niż jest plików w dystrybucji Linuksa. Od czasu do czasu lista tych BBSów ogłaszana jest na grupie comp.os.linux.announce. Popytaj wśród przyjaciół i w LUGach (Grupach Użytkowników Linuksa), albo zamów którąś z komercyjnych dystrybucji (ich lista znajduje się w Linux distribution HOWTO dostępnym pod adresem http://sunsite.unc.edu/LDP/HOWTO/Distributions-HOWTO oraz w grupie comp.os.linux.announce).
(Od tłum.: w Polsce najłatwiejszą i najtańszą formą uzyskania Linuksa jest zakup jednego z czasopism komputerowych dołączających płytki z którąś z dystrybucji. O konkrety pytaj na grupie pl.comp.os.linux.)
Chociaż Linux dostarczany jest z kompletnym kodem źródłowym, system ten nie jest własnością publiczną -- jest oprogramowaniem chronionym prawami autorskimi, dostępnym jednakże za darmo na warunkach licencji GPL -- tam też znajdziesz więcej informacji na ten temat. Działające pod Linuksem programy również chronione są odpowiednimi prawami autorskimi, chociaż wiele z nich także dostępnych jest na licencji GPL. X Window rozpowszechniany jest na licencji MIT X, a niektóre programy użytkowe na licencji BSD. W każdym razie dozwolone jest rozpowszechnianie oprogramowania dostępnego na serwerze FTP (inaczej nie byłoby go tam).
Ponad cztery lata temu powstał miesięcznik Linux Journal.
Skierowany jest do wszystkich użytkowników Linuksa, zawiera artykuły o różnym
stopniu trudności. Prenumerata jednoroczna kosztuje 22 dolary w USA, 27
dolarów w Kanadzie i Meksyku, 32 dolary w pozostałych miejscach, płatne w
dolarach USA. Prenumeratę zamawia się pocztą elektroniczną (subs@ssc.com),
faksem (+1-206-782-7191), telefonicznie (+1-206-782-7733), lub pocztą
tradycyjną (Linux Journal, PO Box 85867, Seattle, WA 98145-1867, USA).
SSC udostępnia swój publiczny klucz PGP, kodując nim e-maila z zamówieniem
prenumeraty bez strachu można podać numer swojej karty kredytowej. W/w klucz
PGP uzyskuje się poleceniem finger info@ssc.com .
Istnieje szereg poświęconych Linuksowi grup oraz list dyskusyjnych. Linux FAQ zawiera więcej informacji o tych ostatnich (FAQ to znajduje się na wspomnianych serwerach FTP i w grupach dyskusyjnych).
Na moderowaną grupę comp.os.linux.announce wysyłane są ogłoszenia n/t Linuksa (nowe programy, poprawki, itd).
Na moderowaną grupę comp.os.linux.answers wysyłane są dokumenty FAQ (,,Najczęściej Zadawane Pytania''), HOWTO (,,Jak To Zrobić''), itp.
Niemoderowana grupa comp.os.linux.admin jest miejscem dyskusji o administrowaniu systemami linuksowymi.
Niemoderowana grupa comp.os.linux.development.system poświęcona jest rozwojowi jądra. Pytania dotyczące programów można tu zadawać wyłącznie, jeśli są one blisko powiązane z jądrem. Inne programistyczne zapytania kierować należy na grupę comp.unix, chyba, że dotyczą one konkretnych aplikacji. W takim przypadku właściwą grupą jest comp.os.linux.development.apps.
Niemoderowana grupa comp.os.linux.development.apps przeznaczona jest na dyskusje o rozwoju aplikacji dla Linuksa. Nie należy pytać tam, skąd takie aplikacje ściągnąć, nie jest to również miejsce na rozmowy o aplikacjach jeszcze nieistniejących.
Na grupę comp.os.linux.hardware wysyłać można pytania dot. działania sprzętu pod Linuksem.
Grupa comp.os.linux.networking poświęcona jest zagadnieniu rozwoju, działania i konfiguracji oprogramowania sieciowego pod Linuksem.
comp.os.linux.x zajmuje się systemem X Window.
Następczyni comp.os.linux, grupa comp.os.linux.misc, przeznaczona jest dla dyskusji na tematy niewymienione powyżej.
Powodem rozbicia comp.os.linux na podgrupy było zmniejszenie ruchu na grupie macierzystej, dlatego nie krospostuj między grupami comp.os.linux.*! Jedynym wyjątkiem jest wysłanie ogłoszenia do news:comp.os.linux.announce i którejś z niemoderowaych grup. Nie przestrzegając tej zasady narażasz się na niemiłe potraktowanie...
Źródłem wiadomości o Linuksie na WWW jest http://sunsite.unc.edu/LDP/.
Od czasu jądra 1.0 wprowadzono do systemu istotne ulepszenia. Linux 1.2 miał krótszy czas dostępu do dysków, udoskonalone terminale, ulepszone zarządzanie pamięcią wirtualną, wsparcie dla wielu platform, quoty i inne. Linux 2.0 (obecna stabilna wersja) zawiera jeszcze więcej poprawek, włączając w to poprawki w szybkości działania, nowe protokoły sieciowe, jedną z najszybszych na świecie wersję TCP/IP i znacznie więcej. Linux 2.2 będzie jeszcze szybszy i będzie obsługiwał większą ilość protokołów sieciowych oraz urządzeń niż obecnie.
Jednak, mimo że kod źródłowy jądra to już ponad 3/4 miliona linii, wiele jeszcze zostało do napisania, w tym również dokumentacji. Jeśli chciałbyś pomóc w jej tworzeniu, zasubskrybuj listę dyskusyjną linux-doc@vger.rutgers.edu; wyślij na adres majordomo@vger.rutgers.edu list zawierający słowo ,,help'' w treści (NIE w temacie).
Autor niniejszego dokumentu, Michael K. Johnson, <johnsonm@redhat.com> prosi o wszelkie, nawet drobne, uwagi; trudno bowiem stworzyć dobrą dokumentację całkowicie samemu.
Mniej-więcej bieżącą wersję tego tekstu znajdziesz zawsze pod adresem http://sunsite.unc.edu/LDP/.
Znaki handlowe są własnością ich posiadaczy. Nie udziela się żadnych gwarancji co do informacji zawartych w niniejszym dokumencie. Użycie i rozpowszechnianie na własne ryzyko. Zawartość tego dokumentu jest własnością publiczną (public domain), bądź jednak uprzejmy i przy cytowaniu zaznacz autorstwo.
Przetłumaczyłem najnowszą dostępną wersję dokumentu. Niestety, w momencie, w którym to piszę, tekst oryginalny nie był uaktualniany od dwóch lat; biorąc pod uwagę szybki rozwój Linuksa, liczyć się należy z możliwością, że część informacji jest przestarzała. Na pewno jednak wszystkie zmiany w stanie faktycznym, które nastąpiły w przeciągu tych dwóch lat, są zmianami na lepsze. :-)
Wersja oryginalna dokumentu ("INFO-SHEET") znajduje się pod adresem http://sunsite.unc.edu/LDP/. Z polskimi tłumaczeniami pozostałych dokumentów HOWTO zapoznać się możesz pod adresem http://www.jtz.org.pl/.
Copyright for the translation:
(c) 2000, 2001 by Tomasz 'tsca' Sienicki, <tsca@edb.dk>
doc-linux-pl-2002.06.14.orig/html/ISP-Hookup-HOWTO.pl.html 0100664 0001750 0001750 00000122571 06770264140 021447 0 ustar coven coven
Ten opis powstał aby odpowiedzieć na kilka pytań związanych z konfiguracją Linuxa umożliwijącą dzwonienie do dostawcy Internetu (ISP) i korzystanie z dostarczanych przez niego usług.
Aby wspomóc te osoby, które będą podłączały swego Linuxa do ISP po raz pierwszy, postarmy się przedyskutować większość napotkanych problemów. Nie unikniemy niestety pewnego nałożenia się tematyki tego dokumentu z innymi dokumentami JTZ (HOWTO) lub ksiązkami LDP. Postaramy się odwoływać do tych dokumentów aby zapewnić lepsze zrozumienie problemu i dokładniejszą informację.
Większość istniejącej dokumentacji jest pomyślana pod kątem użytkowników z pewnym doświadczeniem, początkującym użytkownikom może sprawiać sporo kłopotu wyłowienie odpowiedniej informacji.
Aby ułatwić sobie życie, w prezentowanych dalej przykładach przyjęto następujące założenia:
dirkPrettySecretacme.netmail.acme.netnews.acme.net193.212.1.012345678Nasz dirk bedzie nazywał swój komputer roderick.
Wszystkie odnośniki w tabeli powyżej powinny zostać zastąpione przez jakiekolwiek odpowiednie inforamcje dla twojego przypadku. Zwykle potrzebne są niewielkie zmiany w przypadku korzystania z innego dostawcy internetu.
Nowe wersje tego dokumentu będą okresowo wysyłane do pl.comp.os.linux.answers. Bedą również umieszczane w różnych archiwach ftp i WWW włączając:
ftp://sunsite.icm.edu.pl/pub/Linux/docs/HOWTO
Najnowszą wersję tego dokumentu można będzie znaleźć pod adresem
http://www.jtz.org.pl/Html/ISP-Hookup-HOWTO.pl.html
Wszelkie poprawki błędów, informacje dodatkowe, uwagi krytyczne i inne proszę kierować na adres
Żadnych gwarancji. Nie ponosimy żadnej odpowiedzialności za jakiekolwiek wykorzystanie informacji zawartych w tym dokumencie. Jest to jedna z pierwszysch wersji i istnieje możliwość, że przedstawione inforamcje nie są prawidłowe.
Przedstawiamy jedną z wielu możliwych konfiguracji. W świecie Linuxa zawsze jest wiele metod zrealizowania określonego zadania. Paragrafy zawierające wskazówki dla rozwiązań alternatywnych oznaczyliśmy tak:ALT: Również podawane odnośniki do serwerów FTP i WWW mogą stać się nieaktualne, wraz z pojawieniem się nowszych wersji programów.
Większość opisywanych programów jest dotępna wraz z kodem źródłowym na licencji GNU lub podobnej.
Prawa utorskie należą do (c)1996 Egil Kvaleberg (tłumaczenie (c)1997 Piotr Pogorzelski). Dokument jest dostępny pod następującymi warunkami:
gregh@sunsite.unc.edu
Numer telefonu i adres pocztowy mozna uzyskać poleceniem finger.
Zakładamy, że zostało zainstalowane niezbędne oprogramowanie sieciowe (np. podstawowe pakiety serii N w dystrybucji Slackware) i już wiesz, który port szeregowy jest wykorzystywany przez twój modem.
Domyślna konfiguracja pozwala na bezpośreni dostęp do urządzenia
/dev/modem jedynie administratorowi (użytkownik root).
Aby połączyć się z ISP i uzyskać tam dostęp do powłoki (interpretera
poleceń) można skorzystać z programu minicom. Jest bardzo prosty
i intuicyjny w użyciu.
Konfigurację komputera do pracy sieciowej musimy przeprowadzić
jako administrator (root). Zanim zaczniesz robić coś więcej
upewnij się, że plik /etc/hosts.deny zawiera nastpujący wiersz
ALL: ALL
Zwykle nie masz nic przeciwko korzystaniu przez siebie z komputera,
dodaj więc dodatkowy wiersz do /etc/hosts.allow:
ALL: LOCAL
lub jeśli się upierasz
ALL: 127.0.0.1
W ten sposób zabezpieczasz się przed dostępem do twojego
komputera z internetu, w tych rzadkich chwilach kiedy jesteś do niego
pezpośrednio połączony przez PPP lub SLIP.
Przedstawione poniżej inforamcje dotyczą połączenia PPP z dynamicznym przydziałem adresu IP.
Jeśli korzystasz z linii dzierżawionej, napotkasz na pewne różnice.
Przyjemnie jest mieć komputer o ładnej nazwie. Użytkownicy korzystający
z dynamicznie przydzielanych adresów IP mogą zupełnie dowolnie
wybrać nazwę swego komputera. Jeśli już się na jakąś zdecydowałęś umieść
ją w pliku /etc/HOSTNAME:
roderick
Kolejnym krokiem jest skonfigurowanie dostępu do serwera nazw (serwera
DNS), czego dokonujemy odpowiednio modyfikując plik /etc/resolv.conf:
search .
nameserver 193.212.1.0
Serwer nazw mnusi byc określony przez numer IP, który jest
rózny dla każdego dostawcy internetu (ISP). Jeśli jest to konieczne
można podać trzy róne srwery nazw. Będą przepytywane w kolejności
w jakiej występują w pliku.
Jeśli chesz miec możkiwość korzystanie z krótkich nazw np. jakiśkomputer
jako skrótu dla jakiśkomputer.acme.net, musisz zmienic pierwszy wiersz
pliku /etc/resolv.conf dodając:
search acme.net
Wymagane jest również minimalne skonfigurowanie pliku
/etc/hosts. W większości wypadków wystarczy aby zawierał:
127.0.0.1 localhost
0.0.0.0 roderick
Ci, którzy korzystają ze stałego adresu IP (linia dzierżawiona)
oczywiści zastąpią nim podane przez nas 0.0.0.0.
Podobne minimalna zwartość /etc/networks wygląda następująco:
loopback 127.0.0.0
localnet 0.0.0.0
Należy również ustalić nazwę zewnętrznej domeny pocztowej
i umieścić ją w pliku
/etc/mailname:
acme.net
Identyfikator użytkownika i hasło konta u dostawcy, musi
być zapisane w
/etc/ppp/pap-secrets
dirk * PrettySecret
Jeśli dostawca ISP zamiast protokołu PAP używa CHAP, właściwa nazwa pliku
jest następująca
/etc/ppp/chap-secrets.
I na koniec, zanim zostanie uruchomione PPP musimy zdefiniować
procedurę połączenia. Robimy to umieszczając anstępujące inforamcje w pliku
/etc/ppp/chatscript:
TIMEOUT 5
"" ATZ
OK ATDT12345678
ABORT "NO CARRIER"
ABORT BUSY
ABORT "NO DIALTONE"
ABORT WAITING
TIMEOUT 45
CONNECT ""
TIMEOUT 5
"name:" ppp
Może okazać się konieczne dopracowanie sczegółów. Numer telefonu
w trzecim wierszu musi byc oczywiście zmieniony. Być może, niektórzy
powinni zamienić sposób inicjownaia modemu ATZ na coś
bardziej wyrafinowanego, zależnie od rodzaju posiadanego
modemu. Ostatni wiersz oznacza, ze oczekujemy zachęty name:
na którą odpowiadamy ppp. Inne systemy/dostawcy mogą
mieć inne procedury wchodzenia do systemu.
Aby faktycznie zainicjować połączenie i protokół ppp naeży wydać następujące polecenie:
exec pppd connect \
'chat -v -f /etc/ppp/chatscript' \
-detach crtscts modem defaultroute \
user dirk \
/dev/modem 38400
Powinniśmy być w tej chwili połączeni aż do momentu, kiedy
program pppd zostanie zabity przez Ctrl-C. Wszelkie komunikaty dotyczące
zestawiania połączenia mozna znaleźć w plikach w katalogu /var/log.
Aby je odczytać spróbuj wykonać polecenie:
tail /var/log/messages
Tak długo jak PPP jest aktywne, posiadasz bezpośredni dostęp do Internetu możesz korzystać z takich programów, jak ftp, ncftp, rlogin, telnet, finger itp. Wszystkie te programy powinny być cześcią pakietów sieciowych (uprzednio przez ciebie zainstalowanych, patrz początek dokumnetu).
Więcej informacji na temat PPP jest dostępne w PPP-HOWTO i plikach:
/usr/lib/ppp/README.linux-chat
Na koniec uwaga na temat bezpieczeństwa.
Plik
/etc/inetd.conf zawiera listę wszystkich usług
jakie twój komputer oferuje na zewnątrz.
Po zmianach jakie wykonaliśmy w pliku /etc/hosts.deny
dostęp z zewnątrz do twego komputera nie jest możliwy.
Ci, którzy tego potrzebują, muszą uzyskać na to pozwolenie, pozwolenie musi być wydane przez
zmodyfikowanie pliku
/etc/hosts.allow. Pozwolenie na ruch lokalny wymaga
dopisania:
ALL: LOCAL
Wiecej informacji uzyskarz w podręczniku, patrz man 5 hosts_access.
I ostania mała uwaga: Istnieje małe nieporozumienie związane z
nazewnictwem protokołów POP. Definicja w pliku
/etc/services zgodna niemal ze wszystkim wygląda nastepująco:
pop2 109/tcp pop-2 # PostOffice V.2
pop3 110/tcp pop-3 pop # PostOffice V.3
ALT: Zamiast programu chatscript, można korzystać z
lepszego, dającego większą swobodę dip. Ale razem
z programem diald.
ALT: Ci sczęśliwcy, którzy mają stałe połączenie TCP/IP przez np. kartę Ethernet mogą całkowicie zignorować wszystko co było pisane na temat PPP i zacząć się uczyć jak skonfigurować swoją kartę sieciową.
ALT: Inni mogą nie mieć możliwości korzystania z PPP, lecz mają do dyspozycji SLIP, który jest obsługiwany w podobny sposób co PPP. Inna możliwością, którą należy rozważyć jest UUCP. Jescze inni mogą polegać na wymianie nowinek i poczty za pomocą SOUP. Opis tego ostatniego przypadku można znaleźć w:
ftp://ftp.sn.no/user/bjorn/Linux-offline.tgz
Kolejnym rozwiązanie m jest program TERM, patrz Term-HOWTO.
Jeśli uważasz, ze w WWW najważniejszy jest tekst, możesz chcieć skorzystać z przeglądarki Lynx. Można ją znaleźć pod adresem:
ftp://sunsite.unc.edu/pub/Linux/system/Network/info-systems/lynx-2.3.bin2.tar.gz
( Ostatnia znana wersja to 2.6. Zwykle kazda dystrybucja posiada
Lynxa,
wystarczy go wiec zainstalować tak jak inne programy)
Jeśli posiadasz zainstalowane X Window, możesz skorzystać z wielu przeglądarek graficznych. Chimerę możesz znaleźć w:
ftp://sunsite.unc.edu/pub/Linux/system/Network/info-systems/chimera-1.65.bin.ELF.tar.gz
Mosaic:
ftp://sunsite.unc.edu/pub/Linux/system/Network/info-systems/Mosaic-2.7b1-aout.tgz
ftp://ftp.NCSA.uiuc.edu/Web/Mosaic/Unix/binaries/2.6
Mozilla (Netscape):
ftp://sunsite.unc.edu/pub/Linux/system/Network/info-systems/netscape-v11b3.tar.gz
ftp://ftp.cs.uit.no/pub/www/netscape
przeglądarki się cały czas zmieniają, cały czas są dostępne coraz to nowe ich wersje.
Korzystanie z nich podlega pewnym warunkom. Zapoznaj się z nimi.
Po pierwszes sprawdz, czy zainstalowny jest sendmail.
(jesli uzywasz Debiana, uważaj. Debian uzywa smail'a nie sendmail'a).
Sendmail sortuje wewnętrzną i wychodzącą pocztę, buforuje wychodzące
listy do momentu kiedy może je przesłać dalej.
Sendmail bazuje na pliku konfiguracyjnym /etc/sendmail.cf.
Przykładowy plik konfiguracyjny, dobry dla użytkowników korzystających
z usług prowajdera internetu mozna znaleźć w:
ftp://ftp.sn.no/user/egilk/sendmail.cf
Ten z kolei wymaga zinstalowania programu procmail, lub może
być łatwo zmieniony, tak aby wykorzystywał program deliver.
Oczywiście konieczne jest posiadanie oficjalnej domeny dla
poczty wychodzącej na zewnątrz, coś co jest określone w /etc/sendmail.cf:
# who I masquerade as (null for no masquerading)
DMacme.net
Taka konfiguracja zakłada, ze lokalnie na komputerze korzystasz
z takiego samego identyfikatora, jak u dostawcy. Jeśli tak, to
sendmail jest już skonfigurowny do przesyłania poczty bezpośrednio
do adresata. Aby uniknąc długotrwałych powtarzających się połączeń z
komputerem odbierającym pocztę wygodnie jest korzystać z komputera
prowajdera jako bufora. Włączamy to modyfikując opcję DS w pliku
/etc/sendmail.cf:
# "Smart" relay host (may be null)
DSmail.acme.net
Pamiętaj, ze sendamil jest bardzo wrażliwy na znaki tabulatora w
pliku konfiguracyjnym sendmail.cf. Rozważ używanie
do tych celów edytora vi, aby mieć pewność ze znaki
tabulacji, które były w pliku konfiguracyjnym nie zostaną
zamienione na odstępy podczas zachowywania zmodyfikowanego pliku na dysku.
Odbieranie poczty może być wygodnie zrealizowane za pomocą protokołu POP3, który może być inicjowany za każym razem kiedy następuje zestawienie połączenia. Prosty skrypt do przetestowania tej możliwości wygląda następująco:
sendmail -q
popclient -3 -v mail.acme.net -u dirk -p "PrettySecret" \
-k -o /usr/spool/mail/dirk
Ten skrypt może być uruchamiany po zestawieniu połączenia PPP.
Pamiętaj, ze to jest jedynie skrypt testowy.
Upewnij się że lokalna skrzynka pocztowa pozostaje nietknięta.
Opcja -k oznacza, ze poczta jest pozostawiana
w skrzynce na komputerze prowajdera, a sciągana jest jedynie kopia
listu. Oczywiście po sprawdzeniu poprawności wszystkich
ustawień usuniesz tę opcje.
Pamiętaj, że twoje hasło będzie widoczne w wierszu poleceń (patrz program ps). To powinno zostać poprawione tak szybko jak to tylko możliwe (ASAP)
Bezpieczniejsza i lepsza wersja teko skryptu znajduje się pod adresem:
ftp://ftp.sn.no/user/egilk/pop-script.tar.gz
Wymaga aby był zainstalowany program procmail, lecz
tego raczej nie będziesz żałował.
ftp://sunsite.unc.edu/pub/Linux/system/Mail/mailhandlers/procmail-3.10-2.tar.gz
Procmail jest prostym i elastycznym narzędziem, które umożliwia sortowanie przychodzącej poczty na ogromną ilość sposobów. Dodatkowo może również zastąpić program vacation i podobne.
Pamiętaj, że używanie procmaila w taki sposób jak my to robimy
w tym przykładzie jest różne od tego co znajdziesz w dokumentacji
procmaila. .forward nie jest konieczny i jeśli
nie sortujemy przychodzącej poczty nie potrtzebujemy również
pliku .procmailrc.
Użytkownik, do czytania i wysyłania listów powinien korzystać z takich programów jak elm lub pine.
ALT: Szary człowiek korzystający z konta u prowajdera (tam
czytający pocztę)nie musi mieć działającego demona sendmaila.
Warto wtedy wyłaczyć uruchamianie sendmaila przy starcie komputera.
Trzeba w tym celu zmodyfikować /etc/rc.d/rc.M. (W RedHat'cie
skorzystaj z programu control-panel (sysvtool))
ALT: Zamiast sendmaila można też skorzystać z prostszego smaila. Dobry opis konfiguracji (oraz wiekszość informacji, którą do tej pory przedstawiliśmy) znajdzesz w Linux Network Administrator's Guide.
ALT: Do tworzenia nowych plików konfiguracyjnych
sendmail.cf wykorzystuje się pliki z makrodefinicajami m4.
Drobne zmiany jest lepiej jednak wykonywać bezpośrednio w pliku
/etc/sendmail.cf.
ALT: Istnieją również prostsze, choć nie tak elastyczne alternatywy. Mozna używać dobrze skonfigurowanego pine'a, lub nowszych wersji różnych przeglądarek WWW.
ALT: Wiele osób jest zachwycone pakietem Gnus towarzyszącemu programowi/edytorowi Emacs. Więcej informacji na tet temat szukaj pod adresem:
ALT: Alternatywą dla popclient jest
pop-perl5. Dostępny z:
ftp://sunsite.unc.edu/pub/Linux/System/Mail/pop-perl5-1.1.tar.gz
Tak długo, jak jest aktywne PPP, masz możliwość korzystania z nowinek
online. Istnieje mnóstwo dostępnego oprogramowania.
Zwykle wybiera sie pomiędzy
rtin i trn.
Aby rozpocząc czytanie nowinek trzeba jeszcze tylko powiadomić
czytnik, z którego serwera ma korzystać. Wystarczy zmodyfikować
plik .profile dodając nową zmienną środowiskową:
export NNTPSERVER=news.acme.net
Aby twoj adres (From) pojawiający się w wysyłanych na nowinki listach był poprawny, niektóre porgramy wymagają dodania jescze jednej zmiennej:
export NNTP_INEWS_DOMAIN=acme.net
Aby moc czytać nowinki offline, dzieki temu obniżyć rachunki za telefon, a jednocześnie uzyskać większą elastyczność, trzeba skonfigurować lokalny bufor nowinek (news-spool). Wymaga to pewnej konfiguracji, jak również wolnego miejsca na dysku. Po wstępnym skonfigurowaniu, później wszystko powino działać już samo z siebie, wymagając tylko trochę sprawdzenia i poprawek od czasu do czasu.
Opiszemy dwa rózne rozwiązania.
Rozwiązanie tutaj opisane opiera się na sewerze nowinek C News i protokole NNTP. C News powstało z myslą o pracy w zupełnie innej konfiguracji, lecz jest na tyle elastyczny, że potrafi sobie poradzić i w tej systuacji. Można również skorzystać z nowszego serwera INN, który może jednak wymagać trochę więcej zasobów. Pamiętaj aby nie zainstalować obu; nie potrafią współistnieć w pokoju.
Jest bardzo ważne aby wszelkie zabiegi kongiracyjno-pielęgnacyjne
wykonywać jako użytkownik news i aby wszystkie pliki
konfiguracyjne umieścić w /usr/lib/news. Będąc zalogowanym
jako root wystrczy napisać su news; cd.
Najważniejsze pliki konfiguracyjne:
active spis aktywnych list dyskusyjnych. Jest modyfikowany
przez program addgroup np.
addgroup comp.os.linux.networking y.organization powinien po prostu zawierać tekst jaki chcesz
aby się pokazywał w nagłówku Organization:, w naszym przykładzie
będzie to:
Dirk Gently's Holistic Detective Agency
mailname w naszym przykładzie będzie to
acme.net.whoami zawiera nazwę twego miejsca,
która pokazuje się w nagłówku Path:.
W opisywanej konfiguracji NewsX, ta nazwa nigdy
nie opuści twego komputera, więc może być dowolna, pod warunkiem, że będzie
jednoznaczna. W tym przypadku roderick.sys steruje pobieraniem i dalszą dystrybucją
artykułów. Zakładamy, że w naszym przykładzie dostawca do ścieżki
Path dodaje człon acme.net i że jest to jedyne nasze źródło
nowinek. Podany przykład zakłada, że bedziemy przyjmować wszystkie
nadsyłane artykuły, lecz my będziemy pisać jedynie do grup
acme.net.
Zakładamy, że w naszym przykładzie ISP dodaje do Path nazwę
acme.net, oraz że jest to nasze jedyne źródło nowinek. W podanym
przykładzie akceptujemy wszystkie przychodzące artykuły, lecz będziemy
wysyłać nasze artykuły jedynie do acme.net, ale tylko te, których
wcześniej nie otrzymaliśmy, i które zostały stworzone na naszym
komputerze.
W tej uproszczonej konfiguracji zakładamy, że wszystkie grupy będą
przychodzić z jednego źródła. /all określa nazwę dystrybucji,
i musi być dołączone. Ostatnie F mowi o (wskazuje),
że wychodzące artykuły będą gromadzone w pliku.
ME:all/all::
acme/acme.net:all,!junk/all:FL:
mkdir /var/spool/news/out.going/acme
mailpaths steruje wysyłaniem artykułów do grup
moderowanych, choć to zadanie można zawsze powierzyć naszemu
dostawcy.C News wymaga codziennej pielęgnacji, choć można to zrobić raz na
zawsze za pomocą polecenia crontab -e wydanego jako
użytkownik news. Sugerowane ustawienia są nastęujące, mogą
być dostosowane do indywidualnych potrzeb:
# obsłuż przychodzące i wychodzące paczki artykułów
10,40 * * * * /usr/lib/newsbin/input/newsrun
# usuń przeterminowane artykuły C News, raz dziennie
30 0 * * * /usr/lib/newsbin/expire/doexpire
# monitoruj i powiadom w razie kłopotów
00 2 * * sat /usr/lib/newsbin/maint/addmissing
40 3 * * * /usr/lib/newsbin/maint/newswatch
50 3 * * * /usr/lib/newsbin/maint/newsdaily
newsrun przesyła artykuły (dwa razy na godzinę), doexpire
usuwa artykuły, które są przestarzałe (każdej nocy o 00:30), a trzy
ostatnie polecenia wykonują różne działania administracyjne,
poprawiając napotkane błędy.
Powinno się również zapewnić wyczyszczenie katalogów podczas
uruchamiania systemu. Jako root dopisz następujący wiersz do pliku
/etc/rc.d/rc.local:
su news -c /usr/lib/newsbin/maint/newsboot
Nowinki mogą być pobierane z serwera NNTP programem NewsX.
Można go znaleźć pod adresem:
ftp://sunsite.unc.edu/pub/Linux/system/News/newsx-0.1.tar.gz
Or:
ftp://ftp.sn.no/user/egilk/newsx-0.3.tar.gz
Konfiguracja NewsX jest całkiem prosta. Instalacja to
klasyczny przykład kompilacji pakietu:
make
su
make install
exit
Po wykonani opisanych powyżej działań, jedyne co pozostaje to utworzenie grup, które zamierzamy czytać za pomocą polecenia "addgroup".
Aby pobrać artykuły, użytkownik news musi wydać polecenie
(zakładając, że jest już zestawione połączenie przez PPP lub podobne):
newsrun
newsx acme news.acme.net
newsrun
Opcja -d zmusza program do wyświetlania przez cały czas
komunikatów na ekranie. Więcej informacji w dokumentacji NewsX.
NewsX zajmie się również wysyłaniem artykułów do zewnętrznych grup.
Kontrola nad artykułami, które się starzeją wymaga utworzenia pliku
explist. Komentarze w naszym przykładzie powinny wyjaśnić co
jest naszym celem:
# historię trzymamy 14 dni, nikt nie będzie tu dłużej niż 120 dniu
/expired/ x 14 -
/bounds/ x 0-1-120 -
# utrzymuj artykuły tej grupy przez 2 miesiące
comp.sources,comp.os.linux.all x 60 -
# szum i smiecie wyrzucamu szybko, po dwóch dniach
junk,control x 2 -
# standardowo: 14 dni, bez archiwizacji
all x 14 -
ALT: W małej instalacji nowinek zwykle nie jest potrzebna
grupa control. Jej ruch jest duży porównując z jej użytecznością.
Głownym jej celem jest możliwość kasowania artykułków przez ich
nadwcę oraz automatyczne tworzenie nowych grup. Aby się upewnić, że
wiadomości zawierające polecenia newgroup nie namieszają w
naszej konfiguracji, tworzymy plik newgroupperm, który
definiuje na co w takich przypadkach pozwalamy:
comp.os.linux tale@uunet.com yv
all any nq
W tym przykładzie, wszyskie poprawne grupy w drzewie comp.os.linux
bedą tworzone (y), a użytkownik news bedzie o tym
informowany(v). Całą reszta będzie ignorowana (n) bez żadnych
komunikaów na ten temat(q). Jeśli chcesz tworzyć wszystkie nowe grypy
ręcznie wystarczy ostatni wiersz.
ALT: Alternatywą dla NewsX są suck lub
slurp połączone zpostit. Slurp korzysta z
NNTP NEWNEWS, które potrafi wyygenerować poważne obciązenie
na wielu serwerach nowinek.
Innym rozwiązaniem jest zainstalowanie i skonfigurowanie
zintegrowanego pakietu leafnode. Obsłuży wszelkie zadania
wymagane przez osobisty bufor nowinek i jest prosty w konfiguracji.
można go znaleźć pod adresem:
http://www.troll.no/freebies/leafnode.html
Podobnie jak w przypadku C News, wszelkie prace administracyjne
przy nowinkach nalezy wykonywać jako użytkownik news.
Katalogiem macierzystym dla leafnode jest
/usr/lib/leafnode. Instalacja wygląda następująco:
cd /usr/lib/leafnode
tar -xzvf leafnode-0.8.tgz
cd leafnode-0.8
make
su
make install
Nadal będąc zalogowanym jako root, zmodyfikuj wiersz w pliku
/etc/inetd.conf strujący obslugą protokołu nntp:
nntp stream tcp nowait news /usr/sbin/tcpd /usr/local/sbin/leafnode
I włącz :
killall -HUP inetd
Teraz znów musisz pracować jako news. Zmień wiesz w pliku
/usr/lib/leafnode/config definiujący serwer NNTP, z którego
będziemy korzystać. W naszym przykładzie:
server = news.acme.net
Leafnode potrafi o siebie zadbać jeśli do crotaba dopisze się
następujące polecenie (poprzez uruchomienie jako użytkownik
news polecenia crontab -e ):
# expire Leafnode, once a day
0 4 * * * /usr/local/sbin/texpire
Następujące polecenie, wydane jako użytkownik news powoduje
wymianę nowinek z serwerem (zakładamy, zę działa PPP):
/usr/local/sbin/fetch
Uzytkownicy, którzy chcą teraz czytać nęwsy powinni skorzystać z wcześniejszego opisu Jak skonfigurować czytanie nowinek online?, pamiętając, że konfiguracje trzeba wykonać dla lokalnego komputera tzn:
export NNTPSERVER=localhost
To by bylo wszystko. Pierwsze polecenie fetch skopiuje listę
dostępnych grup. Leafnode będzie monitorował, które grupy są czytane i
adaptował się do nowej systuacji przy następnym uruchomieniu.
ALT: Alternatywą dla leafnode jest
nntpcache dostępny pod adresem:
ftp://ftp.suburbia.net/pub/nntpcache/nntpcache.tgz
Pod Linuxem automatyczna obsługa wysyłania i przyjmowania poczty i nowinek jest całkiem prosta.
Po pierwsze należy utworzyć plik /usr/lib/ppp/ppp-on
odpowiedzialny za zainicjowanie połączenia z prowajderem. Czesto
będzie zawierał tylko tyle:
/usr/sbin/pppd
Kolejne niezbędne informacje należy umieścić w pliku
/etc/ppp/options:
connect "/usr/lib/ppp/chat -v -f /etc/ppp/chatscript"
crtscts
modem
defaultroute
asyncmap 00000000
user dirk
/dev/modem 38400
Zakończenie połączenia zapewni dostarczona wersja
/usr/lib/ppp/ppp-off.
Aby przetestować funkcjonalność tego rozwiązania należy stworzyć
skrypty odpowiedzialne za wykonanie kilku zadań. Skrypt do porania
poczty został opisany wcześniej, zakładamy, ze znajduje się w katalogu
/home/dirk/pop.
Skrypt do wymiany poczty może być utworzony np. w
/root/mail:
#! /bin/sh
#
# wymień pocztę z dostawcą
# 10 minutes timeout:
TIMEOUT=600
DT=10
# kopnij sendmaila (opróżnia kolejkę listów do wysłania)
sendmail -q &
# pobież pocztę:
su dirk -c /home/dirk/pop
# poczekaj aż sendmail zakończy pracę:
t=0
while ! mailq | grep -q "Mail queue is empty"; do
t=$[$t+$DT]
if [ $t -gt $TIMEOUT ] ; then
echo "sendmail -q timeout ($TIMEOUT).."
exit 1
fi
sleep $DT
done
exit 0
Skrypt do wymiany nowinek może być umieszczony np. w
/usr/lib/news/news:
#!/bin/sh
#
# wymień nowinki z prowajderem
# musi byc uruchomiony jako news
cd /usr/lib/news
#uaktualnij kolejkę wychodzącą (C News):
/usr/lib/newsbin/input/newsrun < /dev/null
#wymień nowinki:
/usr/lib/newsbin/newsx acme news.acme.net
#opróżnij kolejkę przychodzących nowinek:
/usr/lib/newsbin/input/newsrun < /dev/null
Skrypt łączący te wszytkie kawałki możne umieścić np. w:
/root/news+mail:
#!/bin/sh
#
# wymień poczte i nowinki z dostawcą
# musi być wykonywany jako root
#
if ! /usr/lib/ppp/ppp-on; then
exit 1
fi
trap "/usr/lib/ppp/ppp-off" 1 2 3 15
#wymien nowinki i pocztę :
/root/mail &
su news -c ~news/news
wait
#rozłącz się
/usr/lib/ppp/ppp-off
#uaktualnij kolejkę nowinek przychodzących (C News):
su news -c /usr/lib/newsbin/input/newsrun < /dev/null &
exit 0
Łatwo jest tak zmodyfikować przedstawione skrypty, że połączenie
będzie nawiązywane jedynie wtedy, gdy jakiś list lub artykuł
oczekiwał bedziena wysłanie. Nazwijmy go
/root/news+mail.cond, pamiętając jednak, że trzeba go
dostosować do własnej konfiguracji (nazewnicwa) bufora nowinek:
#!/bin/sh
#
# wymień poczte i nowinki jeśli cokolwiek czeka na wysłanie
# (C News spool)
if [ -s /var/spool/news/out.going/acme/togo ] ||
! ( mailq | grep -q "Mail queue is empty"); then
/root/news+mail
fi
Pozostaje jescze określić kiedy ten skrypt będzie wykonywany.
Skorzystamy z polecenia crontab -e jako użytkownik root
(pamiętamy, ze ten skrypt musi byc wykonywany jako root).
Załózmy, że zawsze chcemy wymieniać pocztę i nowinki po raz pierwszy
o 7 rano i potem co 4 godziny o jest coś do wysłania:
00 7 * * * /root/news+mail
00 11,15,19,23 * * * /root/news+mail.cond
Zanim połączysz wszystkie części razem, upewni się, że każda z nich
działa prawidlowo. Później do tych skryptów można dołączać kolejne,
wykonujące takie zadania, jak synchronizacja zegara (za pomocą
ntpdate) czy automatyczne uaktualnianie stron WWW u prowajdera (za
pomocą FTP),poprawianych na lokalnym komputerze.
ALT: W zależności od upodobań możliwe jest również odwrócenie
całego procesu. Za każdym razem, kiedy zostaje zainicjowane PPP
uruchamiany jest skrypt /etc/ppp/ip-up. Można do niego dodać
uruchamianie innych skryptów obsługujących wymianę poczty i nowinek.
Więcej inforamcji o PPP w podręczniku, patrz man pppd .
ALT: Możliwa jest również taka konfigracja, w której PPP jest uruchamiane automatycznie, w momencie wykrycia próby korzystania z sieci. W wielu przypadkach jest to bardziej eleganckie rozwiązanie, lecz zła konifuracja może spowodować częste (kosztowne) połączenia modemowe. Więcej informacji na ten temat można znaleźć pod adresem:
http://www.cs.toronto.edu/~schenk/diald.html
Program narzędziowy diald jest dostępny:
ftp://sunsite.unc.edu/pub/Linux/system/Network/serial/diald-0.13.tar.gz
Pod powyższym adresem można znleźć inne informacje o połączeniach PPP.
/etc/aliases. Pamiętaj o
uruchomieniu polecenia newaliases po każdorazowje
modyfikacji tego pliku. Przykład który powinien być wystarczający
w większości przypadków poniźej:
PostMaster: root
ftp: root
news: root
usenet: root
FaxMaster: root
fax: root
WebMaster: root
MAILER.DAEMON: root
ftp://sunsite.unc.edu/pub/Linux/.. należy skorzystać z
najbliższej kopii np ftp://sunsite.icm.edu.pl/pub/Linux/sunsite/...
ftp://ftp.nvg.unit.no/pub/linux/sunsite/...yarn2mf dostępnego pod adresem:
ftp://ftp.sn.no/user/egilk/yarn2mf.zip
Dokładniejsze informacje o dostawcach internetu można znaleźć w wielu miejscach:
Demon Internet (demon.co.uk)
ftp://ftp.demon.co.uk/pub/unix/linux/Demon/slack3.0.help.tgz
Easynet TBA
Netcom http://www.netcom.com/bin/webtech/NetCruiser/Operating_Systems/Linux/linux.cfg.html
PowerTech, Schibstednett, Telenor Online
http://home.sn.no/~egilk/no-isp.html
Primenet TBA
Stanford
http://www-leland.stanford.edu/~wkn/Linux/network/network.html
Jeśli znasz innych, tutaj nie przedstawionych, daj nam znać. Czekamy na informacje od polskich dostawców internetu. Chętnie je tutaj zamieścimy. Wyslij list na adres piotr.pogorzelski@ippt.gov.pl
Ksiązka oracowana w ramach projektu Linux Documentation Project p.t. Linux Administrator's Guide napisana przez Olafa Kircha wydaje się być lekturą obowiązkową dla każdego, kto zamierza zajmować się czymkolwiek w jakiś sposób związany z sieciami TCP/IP i Internetem.
ftp://sunsite.unc.edu/pub/Linux/docs/linux-doc-project/network-guide/nag-1.0.ascii.tar.gz
Dokumentacja poszczególnych pakietów oprogramowania zwykle dostarcza szczegówłowych informacji, której potrzebujesz. Nawet jeśli nie jest wystarczająca jest to zawsze jakiś początek. Pamiędaj o stronach podręcznika. Spróbuj:
man pppd
Cześć dokumentacji na temat różnych programów znajdziesz w katalogu
/usr/doc.
Bardzo polecamy następujące dokumenty HOWTO Niektóre z nich są już przetłumaczone na język polski.
Przedstawione informacje pochodzą z wielu źródeł. Podziękowania za bezpośredni lub pośredni wkład w powstanie tego dokumentu.
Adam Holt <holt@graphics.lcs.mit.edu>
Arne Coucheron <arneco@oslonett.no>
Arne Riiber <riiber@oslonett.no>
Arnt Gulbrandsen <agulbra@troll.no>
Bjorn Steensrud <bjornst@powertech.no>
Gisle Hannemyr <gisle@a.sn.no>
Hans Amund Rosbach <haro@sesam.dnv.no>
Hans Peter Verne <hpv@ulrik.uio.no>
Harald T Alvestrand <Harald.T.Alvestrand@uninett.no>
Harald Terkelsen <Harald.Terkelsen@adm.hioslo.no>
Haavard Engum <hobbes@interlink.no>
Johan S. Seland <johanss@sn.no>
John Phillips <john@linux.demon.co.uk>
Jorn Lokoy <jorn@oslonett.no>
Kenneth Tjostheim <kenneth.tjostheim@asplanviak.no>
Kjell M. Myksvoll <kjell.myksvoll@fou.telenor.no>
Kjetil T. Homme <kjetilho@math.uio.no>
Michael Meissner <meissner@cygnus.com>
N J Bailey <N.J.Bailey@leeds.ac.uk>
Nicolai Langfeldt <janl@math.uio.no>
Ove Ruben R Olsen <Ove.R.Olsen@ub.uib.no>
R. Bardarson <ronb@powernet.net>
Steinar Fremme <steinar@fremme.no>
Sverre H. Huseby <sverrehu@ifi.uio.no>
Trond Eivind Glomsrod <teg@stud.imf.unit.no>
Tommy Larsen <tommy@mix.hive.no>
Zdaje sobie sprawę, że niniejsze tłumaczenie zawiera mnóstwo błędów. Niestety nie jestem w stanie dokładnie sprawdzić całego dokumentu i świadomie pozostawiam tę pracę czytelnikowi. Będę wdzięczny za wszelkie uwagi na temat tego dokumentu, wytykanie błędów, literówek, składni i wszelkie inne, które mogą przyczynić się do jego ulepszenia.
Wszelkie tego typu uwagi proszę przesyłać na adres piotr.pogorzelski@ippt.gov.pl
Inne przetłumaczone dokumenty można znaleźć na stronie http://www.jtz.org.pl. Zapraszamy!.
doc-linux-pl-2002.06.14.orig/html/Install-HOWTO.pl.html 0100664 0001750 0001750 00000174002 06770264140 021153 0 ustar coven coven
Linux jest darmową implementacją systemu UNIX, zdolną pracować na niedrogich komputerach osobistych (powstał na koputerach PC386, w chwili obecnej można go uruchomić na 486, 586, Pentium PowerPC, SunSparc i DEC Alpha). Obsługuje szeroki zbiór róznego rodzaju oprogramowania włączając w to X Window, Emacs, sieć TCP/IP (SLIP/PPP) i wiele innych aplikacji.
Zakładamy, że wiesz już co nieco o Linuxie, przynajmniej tyle, że istnieje, a teraz chcesz się dowiedzieć jak najwięcej o samej instalacji. Skoncentrujemy się na wersji dla komputerów PC, która jest najbardziej popularna, lecz wiele z zamieszczonych poniżej informacji dotyczy również komputerów PowerPC, Alpha i Sparc.
Jeśli nigdy nie słyszałeś o Linuxie, jest kilka miejsc, gdzie można znaleźć podstawowe informacje o systemie. Poszukiwania należy rozpocząć od strony domowej Projektu LDP, którą można znaleźć pod adresem http://sunsite.unc.edu/mdw/linux.html. Najnowszą wersję niniejszego dokumnetu można znaleźć pod adresem http://www.jtz.org.pl/Html/Install-HOWTO.pl.html
Najnowszą wersję angielską zanjdziesz tutaj http://sunsite.unc.edu/pub/Linux/docs/HOWTO/Install-HOWTO.
Czytanie powinieneś rozpocząć od przejrzenia informacji zawartej w takich dokumnetach jak: Linux INFO-SHEET i Linux META-FAQ. Dokument `Linux Frequently Asked Questions' zawiera wiele popularnych pytań (i odpowiedzi!) na temat Linuxa -- nowi użytkownicy muszą go przeczytać.
Pomoc możesz również znaleźć w grupie Usenet News pl.comp.os.linux.
Projekt Dokumentacji Linuxa (LDP), przygotowuje zestaw podręczników i książek o Linuxie, wszystkie z nich są swobodnie rozpowszechniane w sieci i dostępne na stronie domowej projektu LDP.
Książka ``Linux Installation and Getting Started'' jest kompletnym przewodnikiem opisującyn jak zdobyć, zainstalować i korzystać z Linuxa. Zawiera kompletne wprowadzenie do użytkowania i prowadzenia systemu oraz o wiele więcej inforamcji niż przedstawiono tutaj. Możesz ją przeglądać lub pobrać kopię ze strony domowej projektu LDP.
Nowe wersje "Instalacja Linuxa - jak to zrobić" będą okresowe wysyłane na listę pl.comp.os.linux.odpowiedzi. Będzie również umieszczana w różnych archiwach WWW i FTP dotyczących Linuxa, włączając stronę domową LDP.
Ostatnią wersję tego dokumentu można zawsze znaleźć pod adresem http://www.jtz.org.pl/Html/Install-HOWTO.pl.html.
Jeśli masz jakiekolwiek uwagi lub poprawki do tego dokumnetu, proszę nie wahaj się napisać do piotr.pogorzelski@ippt.gov.pl. Jestem otwarty na wszelkie uwagi, również te krytyczne. Jeśli znajdziesz jakiś błąd w tym dokumencie, proszę powiadom mnie o tym, abym mógł go poprawić w następnej wersji. Dziękuję.
Proszę nie przysyłajcie mi pytań, jak sobie poradzić z kłopotami ze sprzętem jakie napotkaliście w czsie instalacji. Zapoznajcie się z ``Linux Installation and Getting Started'', informujcie producenta lub szukajcie pomocy w grupie pl.comp.os.linux. Ten dokument ma być zwięzłym źródłem informacji o zwykłej instalacji -- w przygotowaniu jest dokument poświęcony problemom, jakie napotykacie w czasie instalacji.
Zanim zaczniesz instalować Linuxa muszisz być absolutnie pewien, że komputer na którym chcesz to zrobić jest do tego odpowiedni, oraz zdecydować się, którą dystrybucję chcesz zainstalować.
Jakiego rodzaju komputer jest potrzebny do urchomienia Linuxa? Dobre pytanie. Wymagania sprzętowe zmieniają sie okresowo, Listę sprzętu, który pracuje pod Linuxem można znaleźć w Linux Hardware-HOWTO http://sunsite.unc.edu/mdw/HOWTO/Hardware-HOWTO.html. Inny spis można znależć w Linux INFO-SHEET, http://sunsite.unc.edu/mdw/HOWTO/INFO-SHEET.html.
W przypadku komputera, wydaje się, że przykładowa konfiguracja może wyglądać następująco:
Jakakolwiek płyta ISA, EISA, VESA Local Bus lub PCI, 80386, 80486, Pentium lub P-6. Aktualnie architektura MicroChannel (MCA) jaką można znaleźć w komputerach IBM PS/2 nie jest obsługiwana. Dowolny procesor od 386SX do P-6 bedzię działał. Koprocesor nie jest potrzebny, choc warto go mieć.
Potrzebne jest co najmniej 4MB RAM. Linux potrafi pracować nawet z 2MB RAM, lecz wiekszość instalacji i oprogramowania wymaga 4MB (RedHat do instalacji potrzebuje 8MB, potem działa na 4MB). Jeśli planujesz pracę pod X Window, proponuję 8, lub 16MB RAM.
Oczywiście niezbędny jest twardy dysk, oraz standardowy kontroler dyskowy AT. Wszystkie dyski i sterowniki typu MFM, RLL i IDE będą pracować poprawnie. Linux potrafi pracować z wieloma dyskami i sterownikami standardu SCSI. Więcej informacji na ten temat oraz na temat samego SCSI można znaleźć w Linux SCSI-HOWTO. Jeśli budujesz komputer od zera, specjalnie dla Linuxa, dodatkowy koszt przeznaczony na zakup urządzeń SCSI jest warty zwiększenia osiągów systemu i jego niezawodności.
Bedzie niezbędny napęd 3.5". Choć napędy 5.25" sa obsługiwane przez Linuxa, są one coraz mniej popularne i nie można liczyć, że uda się znaleźć dystrybucje przeznaczone na takie dyskietki. (Bardzo okrojony Linux może być uruchomiony na jednej dyskietce, lecz jego przydatność sprowadza się jedynie do sytuacji awaryjnych lub właśnie do samej instalacji nowego systemu.)
Potrzebna jest również karta grafiki snadardu MDA, Hercules, CGA, EGA, VGA, lub Super VGA oraz odpowiedni monitor. Ogólnie rzecz biorąc jeśli karta grafiki i monitor pracują pod MS-DOSem to powinny również pracować pod Linuxęm. Jeśli jednak planujesz uruchamiać X Window, istnieją dodatkowe ograniczenia dotyczące obsługiwanych kart graficznych. Więcej na ten temat można znaleźć w dokumencie Linux XFree86-HOWTO, http://www.jtz.org.pl/Html/XFree86-HOWTO.pl.html , który zawiera inforamcje nt uruchamiania i wymagań X Window.
Przydatny jest również CD-ROM. Jeśli jest to CD-ROM typu ATAPI, SCSI lub "prawdziwy" IDE to nie powinno być żadnych kłopotów.(Uważaj na tanie napędy reklamowane jako IDE, które nie są do końca prawdziwymi napędami IDE). Jeśli twój CD-ROM wykorzystuje firmową kartę rozszerzenia, może się zdarzyć, że jądro, które znajduje się na dyskietce instalcyjnej nie będzie w stanie go rozpoznać, co uniemożliwi instalację z plytki CD. Rownież napędy CD przyłączone do portu równoległego nie będą pracować. Jeśli masz wątpliwości zajżyj do Linux CD-ROM HOWTO, http://sunsite.unc.edu/mdw/HOWTO/CD-ROM-HOWTO.html, gdzie znajdziesz dokładną listę obsługiwanego sprzętu.
Tak zwane urządzenia "Plug'n'Play" mogą stanowić problem. Obsługa tych urządzeń jest aktywnie rozwijana, lecz nie ma jej jescze w jądrze 2.0.25. Na sczęście zwykle jest to problem z kartami dźwiękowymi lub sieciowymi kartami Ethernet.
Potrzebne jest wolne miejsce na twardym dysku. W zależności od tego jakie i ile oprogramowania planujesz zainstalować może to być od 40 do 500 MB. Większość instalacji wymaga od 40 do 80 MB. Obejmuje to miejsce na oprogramowanie, swap (pamięć wirtualną) i trochę wolnej przestrzeni dyskowej dla użytkowników.
Można uruchomić Linuxa również na 10 MB lub mniej, lecz równie dobrze pełna instalacja może zając ponad 500 MB. Ta wielkość zależy głównie od ilości oprogramowania, które zainstalujesz i ile przestrzeni dyskowej zostanie przeznaczone dla użytkowników.
Linux może współistnieć na tym samym dysku z innymi systemami operacyjnymi, takimi jak MS-DOS, Microsoft Windows czy OS/2. (W rzeczywistości możesz mieć nawet dostęp do plików DOSu, a nawet wykonywać niektóre niektóre programy DOSu po Linuxem). Innymi słowy podczas podziału dysku na partycje, Linux, MS-DOS i OS/2 zyją na własnych partycjach. Więcej inforamcji o takich mieszanych konfiguracjach później.
Nie musisz uruchamiać MS-DOSu czy OS/2 aby móc używać Linuxa. Linux jest zupełnie innym, niezależnym systemem operacyjnym i jego instalacja i użytkowanie nie zależy od innych systemów.
Podsumowując, minimalny zestaw dla Linuxa nie jest znacząco większy od tego wymaganego przez sprzedawane dzisiaj sytemy MS-DOS lub Windows 3.1 ( i jest dużo mniejszy od minimalnego zestawu potrzebnego do uruchomienia Windows 95!). Jeśli posiadasz 386 lub 486 z co najmniej 4MB RAM, to będziesz szczęśliwy pracując pod Linuxem. Linux nie wymaga dużej ilości przestrzeni dyskowej, pamięci czy mocy procesora. Matt Welsh, człowiek, który zapoczątkował ten dokument używał Linuxa na komputerze 386/16 MHz. (najwolniejszy komputer jaki można zdobyć) z 4 MB RAM i być całkiem z tego zadowolony. Im więcej chcesz robić tym więcej potrzebujesz pamięci, lepszego procesora. Z naszego doświadczenia wynika, że 486 z 16 MB RAM pracująca pod Linuxem jest lepsza od kilkunastu modeli drogich stacji roboczych.
Zanim będziesz mógł rozpocząć instalację Linuxa, musisz się zdecydować na jedną z dostępnych ``dystrybucji'' Linuxa. Nie ma jednej, standardowej dystrybucji Linuxa -- istnieje ich wiele. Każda z nich ma własną dokumentację i instrukcję instalacji.
Dystrybucje Linuxa są dostępne na krązkach CD, FTP, taśmie, dyskietkach. Linux Distribution HOWTO, http://sunsite.unc.edu/mdw/HOWTO/Distribution-HOWTO.html, zawiera opisy wielu dystrybucji Linuxa dostępnych przez FTP lub za zaliczeniem pocztowym (głównie w USA, już niedługo również w Polsce).
W zamierzchłych czasach, kiedy po raz pierwszy powstał ten dokument (1992-1993), większość zdobywała Linuxa wpierw sciągając go przez ftp (lub przez modem z różnych BBSów) na lokalny dysk, następnie kopiując je na niezliczone ilości dyskietek. Jedna z tych dyskietek służyłą następnie do wystartownia systemu i zainstalowania całej reszty. Mając szczęscie (i dobry nośnik na dyskietkach) kończyło się instalację po kilku godzinach, lub powtarzało ją na nowo.
Choć nadal można wybrać tę drogę, istnieją teraz mniej stresujące metody. Najprościej jest kupić jedną z wysokiej jakości dystrybucji komercyjnych, rozprowadzanych na krązkach CD takich, jak RedHat, Craftworks, LinuxPro lub WGS. Są one dostępne zwykle poniżej $50 w twojej księgarni lub sklepie komputerowym. Zaoszczędzsz wiele niepotrzebnie zmarnowanego czasu.
Można również kupić zestawy CD takie jak InfoMagic Linux Developer's Resource. Zawierają zwykle kilka dystrybucji Linuxa oraz świerzą kopię takich archiwów jak sunsite lub tsx-11.
Pod koniec tego dokumentu skoncentrujemy się jak zainstalować Linuxa z takiego właśnie zestawu, który nie posiada wydrukowanej instrukcji instalacji. Jeśli twój Linux jest zaopatrzony w w drukowaną instrukcję to ten dokument może stanowić dobre wprowadzenie lecz ostatecznie należy się kierować informacjami zawartymi w tej instrukcji.
Szkic instalacji Linuxa jest prosty:
Tak wyglądają podstawowe części dystrybucji instalacyjnej:
RAWRITE.EXE jest niezbędny, jeśli planujesz tworzenie dykietek instalacyjnych w środowisku MSDOS. Jęsli nasz dostęp do UNIXowej stacji robozcej, która posiada stację dsykietek, możesz zrobic dyskietki instalacyjne na niej, korzystając z programu `dd'. Czasami można znaleźć przygotowny skrypt do tworzenia dyskietek instalacyjnych,
Linux efektywniej wykorzystuje elementy twojego komputera niż MS-DOS, Windows czy Windows NT, ale w konsekwencji jest mniej tolerancyjny na źle skonfiguraowany sprzęt. Jest kilka rzeczy, które możesz zrobić, które zmiejszą prawdopodobieństwo, że instalacja zostanie przerwana przez tego typu problem.
Po pierwsze zgromadź wszelką dokumentację na temat posiadanego sprzętu -- plyty głównej, karty graficznej, monitora, modemu itp -- i umieść je gdzieś pod ręką.
Po drugie, zgromadź dostępną informacje o aktualnych ustawieniach
podzespołów twojego komputera. Jeśli masz na komputerze
zainstalowany MS-DOS (co najmniej v5.0) zrób wydruk informacji
jakie udziela narzędzie msd.exe. Zagwarantuje to pełną i poprawną
informacje na temat karty graficznej i myszy co będzie pomocne przy
konfiguracji X Window.
Po trzecie sprawdź czy komputer nie ma kłopotów sprzętowych, które mogą spowodować nieodwracalne blokady (zawieszenia) podczas samej instalacji.
Jeśli to możliwe zdobądź telefon bardziej zaawansowanego użytkownika Linuxa. W dziewięciu na dziesięc przypadków nie będziesz go potrzebował, lecz jaki to komfort mieć go podczas instalacji.
Ile czasu to może potrwać? Na podstawowy system, trzeba liczyć około godziny. Jesli na komputerze ma być więcej niż jeden sytem spodziewaj się trzech godzin (w takim przypadku jest większe prawdopodobieństwo wystąpienia błędów).
Twój krążek CD może zawierać materiały lub narzędzia pomocne przy
instalacji, które przeprowadzą cię przez proces tworzenia dyskietek
instalacyjnych przy pomocy prostych interacyjnych programów. Mogą
to być równie dobrze programy instalacyjne pracujące pod MS-DOSem
(patrz program redhat.exe w dystrybcji RedHat), pod UNIXem lub
pod jednym i drugim.
Jeśli w twojej dystrybucji znalazłeś taki program, powinieneś go użyć i potraktować resztę tego rozdziału jako materiał poglądowy. Skorzystaj z tego programu, jego autorzy na pewno lepiej wiedzieli o specyficznych cechach dystrybucji niż my. Zaoszczędzisz sobie wielu kłopotów.
Więcej dokładnych informacji na temat tworzenia dystkietek startowych (boot disk i root disk) znajdziesz w Linux Bootdisk HOWTO http://sunsite.unc.edu/mdw/HOWTO/Bootdisk-HOWTO.html.
Wpierw musisz wybrać plik dsyku startowego (disk boot image), który jest najleszy dla sprzętu, który posiadasz. Jeśli musisz to zrobić ręcznie, zwykle spostrzeżesz, ze (a) albo pliki mają nazwy, które ułataiwają wybranie odpowiedniego, lub (b) istnieje plik zawierający opis cech każdego z dostępnych plików dyskietki startowej.
Następnie należy przygotować dwie lub trzy dyskietki high-density sformatowane pod MS-DOSem. Muszą być tego samego rodzaju, to znaczy jeśli napęd startowy jest 3.5" obie dyskietki muszą być 3.5"-we. Następnie należy użyć RAWRITE.EXE do zapisania plików z obrazem dyskietek startowych na dyskietki.
Uruchom go bez żadnych prametrów, po postu tak:
C:\> RAWRITE
Odpowiedz na pytanie o nazwę pliku, który należy zapisać na
dyskietce nazwę napędu do którego pisać (np. A:). RAWRITE
skopiuje plik blok po bloku bezpośrednio na dyskietkę. Użyj RAWRITE
do zrobienia kolejnych dyskietek instalacyjnych (np COLOR144). Jak
skończysz staniesz się posiadaczem dwóch dyskietek: jednej
startowej i drugiej zawierającej system plików z katalogiem
głównym. Pamiętaj, że tych dyskietek nie można już odczytać pod
MS-DOSem ( wpewnym sensie są w formaci ``Linuxa'').
Pod Unixem to samo można zrobić wykorzystując program dd(1). (Potrzebna jest oczywiście stacja robocza z napędem dyskietek) Na przykład na komputerach Sun, na których dyskietkę reprezentuje plik specjalny /dev/rfd0, można zastosować następujące polecenie:
$ dd if=bare of=/dev/rfd0 obs=18k
Na niektórych stacjach roboczych należy koniecznie podać rozmiar bloku wyjściowego (np Sun) w przeciwnym wypadku kopiowanie się nie uda. Jesli napotksz na klópoty, podręcznik dd(1) powinien być pomocny.
Upewnij się, że używasz dobrej jakości dydkietek. Wykorzystywane dydkietki nie mogą mieć złych bloków.
Pamietaj, ze nie musisz mieć działającego Linuxa lub MS-DOS, aby móc zainstalować Linuxa. Posiadanie Linuxa lub dosu ułatwia zrobienie dyskietek instslscyjnych z plików znajdującyh się na CD.
Jeśli nie masz na swoim komputerze żadnego systemu skorzystaj z komputera kolegi. Przygotuj na nim dyskietki instalacyjne i posłuż się nimi na swoim komputerze.
W większości pracujacych systemów, twardy dysk jest już podzielony na partycje dla DOSu, OS/2 itd. Konieczna będzie zmiana rozmiaru tych partycji, tak aby zwolnić odpowiednią ilość miejsca dla Linuxa. Jesli planujesz instalację, gdzie na jednym dysku będą współistnieć różne systemy, mocno plecamy zapoznanie się z jednym lub więcej następujących mini-HOWTO, które opisują dokładniej różne konfiguracje instalacji wielosystemowych.
Nawet jęsli nie mają bezpośredniego zastosowania dla twojej sytuacji, na pewno pomogą w głębszym zrozumieniu idei i wyagań.
UWGA: Część dystrybucji może być zainstalowana na partycji MS-DOS w oddzielnym katalogu (to jest zupełnie cos innego niż instalowanie Z partycji MS-DOS). Linux wykorzystuje w tym celu system plików o nazwie UMSDOS, który pozwala na traktowanie podkatalogu na partycji MS-DOS jako systemu plików Linuxa. W ten sposób zmiana rozmiaru partycji nie jest konieczna.
Możemy zasugerować tę metodę w przypadkach, gdy dysk jest już podzielony na 4 partycje i zmiana partycji będzie bardziej kłopotliwa niż jest to warte. Lub w przypadku, gdy chesz sprawdzić jak wygląda Linux, przed podziałem dysku na partycje, wtedy jest to dobra metoda. Jednak w większośi wypadków sugerujemy zmianę rozmiarów partycji, tak jak jest to tutaj opisane. Jeśli zamierzasz korzystać z UMSDOS, robisz to na własną rękę -- nie jest to udokumentowane w tym dokumencie. Od tej chwili zakładamy, że NIE korzystasz z syztemu UMSDOS i, że przeprowadzisz operację zmiany partycji.
Partycja jest to część twardego dysku, wydzielona dla konkretnego systemu operacyjnego. Jeśli masz zainstalowany tylko MS-DOS, zatem prawdopodobnie masz na twardym dysku tylko jedną partycje przeznaczoną w całości na MSDOS. Aby korzystać z Linuxa muszisz jednak zmienić układ partycji, tak aby była jedna partycja dla MS-DOS i jedna (lub) więcej dla Linuxa.
Partycje dzielą się generalnie na 3 rodzaje : podstawowe (primary), rozszerzone (extended) i logiczne. W skrócie, partycje podstawowe są jednymi z czterech głównych partcji. Jednakże jeśli potrzebujesz więcej niż cztery partycje na jednym dysku, musisz utworzyć partycję rozszerzoną, która może zawierać wiele partycji logicznych. Dane są przchowywane wyłącznie na partycji podstawowej lub logicznej.
Inaczej mówiąc większość ludzi korzystają z partycji podstawowych. Jeśli potrzeba jest więcej niż 4 partycje należy utworzyć partycję rozszerzoną. Partycje logiczne są tworzone na partycji rozszerzonej, no i proszę mamy więcej niż 4 partycje na dysku.
Możesz zainstalować Linuxa również na drugim fizycznym dysku. Wystarczy podać nazwę odpowiedniego urządzenia podczas tworzenia partycji Linuxowej. Wiecej szczegółow na ten temat późnizej.
Wróćmy do zmiany rozkładu partycji na dysku. Problem polega na tym, że nie istnieje sposób, aby zrobić to (w łatwy sposób) bez zniszczenia danych znajdujących się na partycji, której rozmiar zmieniamy. Datego muszisz zrobić pełną kopię wszelkich danych na dysku, zanim zaczniesz zmieniać rozmiary partycji. Ziana rozmiaru partycji będzie polegała na jej usunięciu i odtworzeniu, lecz o mniejszym rozmiarze.
UWAGA: Istnieje program pod MSDOS służący do zmiany rozmiaru partycji bez konieczności jej uprzedniego usunięcia. Nazywa się FIPS. Patrz http://sunsite.unc.edu/Linux/system/Install. Korzystając z FIPSa, programu porządkującego dysk (takiego jak Norton Speed Disk) i mając trochę szczęścia powinieneś móc odpowiednio zmienić rozmiary partycji bez niszcenia znajdującyhc się na nich danych. Mimo wszystko nadal sugerujemy wykonanie pełnej kopii dysku, przed korzystaniem z programu FIPS.
Jednakże jeśli nie korzystasz zprogramu FIPS, klasyczna metoda polega n skorzystaniu z programu FDISK. Powiedzm, że masz dysk o pojemności 80MB i chciałbyś go podzielić na dwie części -- 40MB dla MS-DOS i 40 MB dla Linuxa. W tym celu musisz uruchomićpod MS-DOSem program FDISK, usunąc partycję 80MB przeznaczoną na DOS, następnie utworzyć w jeje miejscu nową partycję o rozmiarze 40MB i zakończyć program pozostawiając niezagospodarowane 40MB. Możesz następnie sformatować nowo utworzoną partycję i zainstaować swoje oprogramowanie z wykonanej uprzednio kopii. (Prosze pamietac, aby do wykonywanai operacji programem FDISK startować system z dyskietki, na krórej powinny znaleźć sie przynajmniej programy FDSIK, FORMAT i SYS). Póżniej w czasie instalacji Linuxa, pozostawione 40MB zostanie wykorzystane do utworzrnia partycji Linuxa i zaistalowanie na niej systemu.
W skrócie, aby zmienić rozmiar partycji należy wykonać następujace działania (za pomocą programu FDISK):
FORMAT /S A:
(uwaga, wszystkie dane na dyskietce zostana zniszczone).FDISK.EXE and FORMAT.COM,
oraz inne narzędzia, których będą ci potrzebne. (Np. narzędzia do
odtworzenia programów i systemu z wykonanej kopii.C: lub D:).FORMAT.Zwróć uwagę, że dosowy program FDISK da ci możliwość utworzenia ``Logical DOS drive'' (logicznego dysku MSDOS). Logiczny dysk MSDOS to po prostu partycja logiczna twojego dysku. Możesz zainstalowac Linuxa na partycji logicznej, lecz nie chcesz utworzenia taj partycji logicznej DOSowym programem FDISK. Jeśli aktualnie korzystasz z logicznego dysku MSDOS i chcesz w tym miejscu zainstalować Linuxa, powinieneś usunąć logiczny dysk MSDOS za pomocą DOSowego FDISK i (później) utworzyć w tym miejscu nową logiczną partycję dla Linuxa.
Sposób zmiany rozmiaru partycji dla OS/2 lub innych systemów operacyjnych jestpodobny. Szczegółów szukaj w dokumentacji tych systemów.
Po zmianie rozmiaru partycji, potrzebujesz utworzyć partycje dla Linuxa. Zanim powiemy jak to zrobić opowiemy wpierw o partycjach i systemach plików pod Linuxem.
Linux wymaga co najmniej jednej partycji dla głownego systemu plików (root filesystem), który będzie zaierał jądro Linuxa i dodatkowe oprogramowanie.
Możesz myśleć o systemie plików jako o partycji sformatowanej dla Linuxa. Systemy plików służą do przechowywania plików. Każdy system Linuxowy musi miec co najmniej główny system plików. Jednakże wielu użytkowników preferuje korzystanie z wielu systemów plików -- jeden dla każdej większej części poddrzewa katalogów. Na pryzkład możesz chieć utworzyć oddzielny system plików do przechowywania plików w katalogach poniżej katalogu /usr.(Zwróć uwagę, że na sytemach UNIX, katalogi oznacza się kreską pochyloną wprzód, a nie w tył jak to robi MSDOS.) W takim przypadku będziesz posadał zarówno główny system plików, jak i system plików dla katalogu /usr.
Każdy system plików wymaga oddzielnej partycji. Dlatego jeśli chesz korzystać z głównego sustemu plików i systemu plików /usr muszisz utworzyć dwie partycje.
Dodatkowo, większość użytkowników tworzy partycję dla pamięci wymiany (swap partition). Jesli masz, powiedzmy 4MB RAM i 10 MB partycji wymiany, tak długo jak dotyczy to Linuxa, posiadasz 14MB pamięci virtualnej.
Korzystając z obszaru wymiany, Linux przenosi na dysk niewykorzystywane sptrony pamięci, pozwalając uruzhomić więcej aplikacji w tym samym czasie. Ponieważ wymiana pamięci jest powolna, nie jest to sposób na zwiekszenie rozmairu pamięci RAM. Jednakże aplikacje, które wymagają dużej pamięci (jak X Window System) często polegają na pamięci wymiany, w przypadkach gdy jest niedostatecznie dużo pamięci RAM.
Niemal wszysy użytkwonicy Linuxa korzystają z partycji wymiany. Jeśli posiadasz 4MB RAM , partycja wymiany jest konieczna aby można zainstalować Linuxa. Mocno zalecamy utowrzenie partycji wymiany na stałe chyba, że posiadasz w swoim komputerze dużą ilość pamięci RAM.
Rozmaiar partycji wymiany zależy jak dużo potrzebujesz pamięci wirtualnej. Często zaleca się aby mieć minimum 16MB pamięci wirtualnej (RAM + pamięć wymiany). Czyli jeśli masz 8MB ram powinieneś utworzyć partycję wymiany o rozmiarze 8MB. Pamiętaj, że partycja wymiany nie może być większa niż 128 MB. Dlatego jeśli potrzebujesz pamięci wymiany więcej niż128 MB, musisz utworzyć większą liczbę partycji wymiany. Mozesz mieć nie więcej niż 16 partycji wymiany.
Wiećej inforamcji na temat teorii obszaru wymiany i partycji w dokumencie Linux Partition mini-HOWTO ( http://sunsite.unc.edu/mdw/HOWTO/mini/Partition).
Uwaga: jest możliwe (choć jest to trochę sztuczka) współdzielenie partycji wymiany między linuxem i Windows 95 w konfiuracjach, gdzie oba te systemy są zainstalowane. Więcej inforamcj w tym temacie zawiera dokument Linux Swap Space Mini-HOWTO, http://sunsite.unc.edu/mdw/HOWTO/mini/Swap-Space.
Uwaga #1: Ieśli posiadasz dysk EIDE z partycjką większą niż 504MB, twOj BIOS może nie pozwolić na wystartowanie zainstalowanego na niej Linuxa. Pamiętaj aby utrzymywać swoją partycję główną poniżej granicy 504MB. To nie powinno być problemem w przypadku sterowników SCSII, które mają zwykle własny BIOS. Szczególy techniczne znajdziesz w Large Disk Mini-HOWTO, http://sunsite.unc.edu/mdw/HOWTO/mini/Large-Disk.
Uwaga #2: Uzywasz jednocześnie dysków IDE i SCSI? Jesli tak, to uważaj. BIOS może nie pozwalać na usuchamianie systemu z dysku SCSI.
Poza partycją wymiany i partycją dla głównego systemu plików, będziesz chciał dodatkowe na przechowywanie oprogramowania i katalogów macierzystych użytkowników.
Teoretycznie możliwa jest konfiguracja z jedną duża partycją na wszystko, lecz niemal nikt tego nie robi. Posiadanie więcej niż jedna partycji ma kilka zalet:
W dzisiejszych czasach ogromnych dysków, dobra konfiguracja podstawowa używa małej partycji głównej (poniżej 80MB), średniego rozmiaru partycji /usr (do 300MB) na oprogramowanie systemowe i partycję /home przeznaczoną dla pliku użytkowników, która w zleżności od twojej decyzji może wykorzystywać pozostałą część dysku lub odpowiednią liczbę MB.
Jeśli przewidujesz uruchomoienie Usenet News, możesz przydzielić oddzielną partycję katalogowi /var przeznaczoną na pocztę, newsyi pliki tymczasowe lub wydzielić specjalną partyucję tylko dla obsługi Usenet News, kontrolując w ten sposób maksymalne możliwe wykorzystanie zasobów dyskowych przez Usenet News. Lecz w dzisiejszych czasach kiedy ogrome dyski są coraz tańsze ważniejsze jest aby to wszystko było dla ciebie zrozumiałe, dlatego swoją pierwszą instalację Linuxa zrób po prostu w najprostszy sposób.
Pierwszym krokiem jest uruchomienie systemu ze zrobionego przez ciebie dysku startowego. Zwykle Linux Laduje się bez jakiejkolwiek ręcznej ingerencji. Zachęta startowa zniknie po 10 sekundach. Lecz podając w zachęcie startowej po nazwie jądra różne parametry masz możliwość przekazaniu jądru różnych informacji o konfiguracji twojego sprzętu, np. adres i numer przerwania sterownika SCSI lub geometrię dysków. Jest to konieczne, gdy Linux sam nie wykryje kontrolera SCSI lub geometrii dysku.
W szczególnośći wiele sterowników SCSI bez BIOSu wymaga podania adresu portu i przerwania IRQ podczas ładowania systemu. Komputery IBM PS/1, ThinkPad i ValuePoint nie przechowują geometrii dysku w pamięci CMOS i należy je podać podczas uruchamiania systemu. (Później będziesz miał możliwość takiego skonfigurowania systemu aby sam mógł przekazywac niezbędne parametry).
Uważaj na komunikaty wyświetlane podczas ładowania systemu. Znajdziesz tam informacje o sprzęcie jaki został wykryty przez jądro. W sczególności jeśli masz sterownik SCSI powinieneś zobaczyć listę wykrytych urządzeń SCSI. Jeśli zobaczysz komunikat:
SCSI: 0 hosts
to znaczy, żę sterownik SCSI nie został wykryty i muszisz powiadomić jądro gdzie go szukać.
System będzie wyświetlał informacje o znalezionych partycjach i wykrytych urządzeniach. Jeśli któraś z tych informacji nie jest poprawna lu brakuje innej, której się spodziewałeś będziesz musiał wymusić wykrycie sprzędu prze podanie odpowienich parametrów na zachęcie startowej.
Z drugiej strony, gdy wszysko idzie jak po maśle i wygląda, zę wszystkie urządzenia zostały rozpoznane prawidłowo, przejdź do następnego rozdziału ``Ładowanie dysku z głównym systemem plików (root disk)''.
Wymuszenie wykracia urządzenia polega na wprowadzeniu w wierszu zachęty startowej ospowiednich parametrów wg. następującej składni:
linux <parameters...>
Dostępnych jest kila/nascie róznych parametrów. Przedstawimy kilka najbardziej popularnych. Nowoczesne instalacje konstruują dysk startowy w ten sposób, abyś mógł uzyskać dodatkową pomoc w czasie wpisywania danych w wierszu zachęty startowej. Bedą tam opisane parametry jądra które mozęsz wykorzystać.
linux hd=683,16,32
linux tmc8xx=0xca000,5
Pamiętaj o używaniu prefiksu 0x dla wszytkich wartości
podawanych szesnastkowo (hex). Dotyczy to wszystkich anstępujących
opcji:
Jeśli masz pytania dotyczące opcji startowych, proszę przeczytaj Linux SCSI HOWTO, które powinno być dostępne w każdym archimuwm FTP (lub tam skąd otrzymałkeś ten dokument). SCSI HOWTO dokładniej objaśnia sprawy związane z SCSI i Linuxem.
Po wystartowaniu systemu z dyskietki startowej zostaniesz poproszony o włożenie dyskietki(ek) z systemem plików. W tym momencie powinieneś wyjąć z napędu dyskietkę startową i włożyć w jej miejsce dyskietkę z systemem plików (root disk). Następnie wciśnij enter. Być może za chwilę będziesz musiał włożyć kolejną dyskietkę z systemem plików.
Co się w tej chili dzieje? Dyskietka z systemem plików zapewnia minimalne oprogramowanie tworząc miniaturowy system operacyjny wykorzystując do tego dysk w pamięci RAM (ponieważ twardy dysk nie jest jescze przygotowany) tzw. ramdysk.
Dysk z systemem plików ładuje do ramdysku mały zestaw niezbędnych plików i programów instalacyjnych, z których będziesz korzystał do przygotowania twardego dysku i zainstalowania później na nim (z krążka ćd lub innego nośnika) pełnego systemu.
Starsze dystrybucje (włączając Sackware) udostępniały w tym momencie interperter poleceń (shell) i wymagały wprowadzenia ręcznie poleceń instalacyjnych do tego w odpowiedniej kolejności. Jest to nadal możliwe, lecz nowsze dystrybucje uruchamiają programy instalacyjne (wybór z menu za pomoca klawiszy kursora), które starają się w sposób interaktywny poprowadzić cię przez procedurę instalacyjną, dając po drodze mnóstwo wskazówek.
Prawdopodobnie będziesz maił również możliwość skonfigurowania X, tak aby dalsza częsć instalacji mogła zostać przeprowadzona w trybie graficznym. Jeśli wybierzesz tę drogę, program instalcyjny przepyta cię jaką myszkę posiadasz, jaka karta graficzna jest zinstalowana w twoim komputerze, jakiego monitora używasz. Po zainstalowaniu Linuxa podane tutaj przez ciebie informacje zostaną zachowane dla ciebie. Będziesz mógł je później dostroić tak., aby lepiej wykorzystać posiadany sprzęt, ponieważ na tym stopniu instalcji wystarczy ustawić podstawową rozdzielczośc 640x480 SVGA.
X nie sa konieczne do instalacji, lecz (zakładając, że uda się je poprawnie skonfigurować) wielu ludzi znajduje ten sposób instalcji łatwiejszym w użyciu. Tak czy inaczej będziesz chciał uruchomić X, więc zrobienie tego na samym początku też ma trochę sensu.
Po prostu daj się prowadzić programowi. Przeprowadzi cię przez niezbędne stopnie instalacji: przygotowanie twardego dysku, utworzenie początkowych kont użytkowników, istalacja dodatkowych pakietów oprogramowania.
W kolejnych podrozdziałach opiszemy pewne obszary, które mogą sprawiać trochę trudności, tak jak byś musiał je wykonywać ręcznie. Powinno ci to pozwolić zrozumieć co tak na prawdę robi program instalacyjny i dlaczego to robi.
fdisk i cfdiskTwoim pierwszym zadanie mpo załadowaniu jądra Linux abędzie utworzenie lub zmiana tabel partycji na dyskach. Nawet jeśli już zrobiłeś coś za pomoćą DOSowgo programu FDISK, musisz teraz powrócić do tego tematu i wprowadzić dodatkowe, specyficzne dla Linuxa informacje.
To tworzenia lub zmiany partycji Linuxa korzystamy z programu
fdsik w wersji dla Linuxa, lub jego okienkowej wersji
cfdisk.
Zwykle program instalacyjny sprawdza czy istnieją już odpowiednie
tabele partycji i proponuje uruchonienie dla nich fdisk lub
cfdisk. cfdisk jest z pewnościa łatwiejszy w użyciu, lecz
jego aktualne wersje są również bardziej wrażliwe na nieprawidłowe
lub uszkodzone informacje jakie mogą znaleźć w tabeli partycji.
Dlatego (szczególnie podczas instalacji na nowym sprzęcie) może się
okazć, że musisz wpierw uruchomić fdisk aby nadał tabelom
partycji stan, który jest już odpowiedni dla programu
cfdisk. Spróbuj uruchomić cfdisk, jeśli będzie się na coś
skarżył, uruchom fdisk. (Jeśli budujesz system jedynie dla
Linuxa, to dobra może się okazać metoda uruchomienia fdsik i
usunięcia wszystkich partycji, a następnie założenie ich na nowej,
pustej tabeli partycji bardziej intuicyjnym programem cfdisk.)
Kilka uwag, które mają zastosowanie zarówno do fdisk, jak i
cfdisk. Oba rozumieją podany im argument jako nazwa dysku na
którym chcesz wykonać operację. W Linuxie kolejne dyski nazwywane
są następująco:
Przykład: aby utworzyć partycję Linuxa na pierwszym dysku SCSI, powinieneś użyć polecenia (twój program instalacyjny może ją wygenerować na podstawnie podanych przez ciebie informacji):
cfdisk /dev/sda
Jeśli uruchomisz fdisk lub cfdisk bez żadnych argumentów,
dyskiem domyślnym będzie w takiej systuacji /dev/hda.
Aby utworzyć partycję Linux na drugim dysku, po prostu podaj /dev/hdb w przypadku dysku IDE lub jeśli używasz dysków SCSI /dev/sdb.
Partycje Linuxa nie muszą być na tym samym fizycznym dysku. Mogłbyś
utworzyć partycję dla głównego systemu plików na dysku
/dev/hda i partycję wymiany na dysku /dev/hdb.
W takim przypadku uruchom fdisk lub cfdisk dla każdego
dysku.
Pod Linuxem, partycje otrzymują nazwy w zależności od dysku do którego należą. Np. perwsza partycja na dsyku /dev/hda nazywa się /dev/hda1,druga /dev/hda2 itd. Jeśli masz jakieś partycje logiczne ich nazwy rozpoczynają sę od /dev/hda5 i kolejno /dev/hda6 itd.
Uwaga: Nie powinieneś Linuxowymi programami fdsik lub
cfdisk tworzyć lub usuwać partycji dla systemów peracyjnych
innych niż Linux. To znaczy nie twórz lub usuwaj partycji MS-DOS
za pomocą narzędzi Linuxa; wykorzystaj w tym celu programy jakie
dostarcza MS-DOS (FDSIK). Jeśli stworzysz partycję MS-DOS za pomocą
programu fdsik lub cfdisk istnieje możliwość, żę msdos
jej nie rozpozna nie nie wystartuje poprawnie.
Oto przykład wykorzystania programu fdsik>. Mamy pojedynczą
partycję MS-DOS o rozmiarze 61693 bloków. Reszta dysku jest wolna
dla Linuxa (pod Linuxem jeden blok oznacz a1024 bajrty, czyli
61693 oznacza 61 MB). W tym przykładzie utworzymy dwie partycje,
wymiany(swap) i głównego systemu plików(root). Być może, po
przeczytaniu dyskucji o podziale dysku na partycje, powinieneś
rozszerzyć ten przykład do czterech partycji: wymiany, głownego
systemu plików (), systemu plików dla oprogramowania systemowego
(/usr) i partycji dla plików użytkowników (/home).
Na początku wydajemy polecenie ``p'' aby wyświetlić aktualny
stan tabeli partycji. Jak widać, /dev/hda1 (pierwsza
partycja dysku /dev/hda) jest partycją DOSową o rozmiarze
61693 bloków.
Command (m for help): p
Disk /dev/hda: 16 heads, 38 sectors, 683 cylinders
Units = cylinders of 608 * 512 bytes
Device Boot Begin Start End Blocks Id System
/dev/hda1 * 1 1 203 61693 6 DOS 16-bit >=32M
Command (m for help):
Następnie wydajemy polecenie ``n'' w celu utworzenia nowej
partycji. Partycja na główny system plików będzie miała 80MB.
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Tutaj program spytał się , czy chcemy utworzyć partycję podstawową czy rozszerzoną. W większości przypadków chesz utworzyć partycje podstawową, chyba, ze potrzebujesz podzielić dysk na więcej niż 4 partycje. Patrz rozniał ``Zmiana rozmiaru partycji'', tam ta sprawa byłą dyskutowana dokładniej.
Partition number (1-4): 2
First cylinder (204-683): 204
Last cylinder or +size or +sizeM or +sizeK (204-683): +80M
Pierwszy cylinder partycji powinien być pierwszym cylindrem za poprzednią partycją. W tym przypadku /dev/hda1 kończy się na cylindrze 203, więc rozpoczynamy nową partycję od cylindra 204.
Jak widać korzystamy z notacji ``+80M'', definiuje partycję o
rozmiarze 80MB. Podobnie notacja ``+80K'' określa partycje o
rozmiarze 80KB, a podanie ``+80'' stworzyło by partycję o
rozmiarze 80 bajtów.
Warning: Linux cannot currently use 33090 sectors of this partition
Ostrzeżenie: Linux nie może wykorzystać 33090 sektorów tej partycji.
Jeśli zobaczycs takie ostrzeżenie, możesz je zignorować. Pozostało ze starych czasów, kiedy system plików Linuxa nie mógł przekraczać rozmiaru 64MB. Jednakże nowe systemy plików przełamały tę brierę. W chwili obecnej partycje mogą mieć maksymalny rozmiar 4 terabajtów.
Następnie tworzymy partycję wymiany o rozmiarze 10 MB, /dev/hda3.
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 3
First cylinder (474-683): 474
Last cylinder or +size or +sizeM or +sizeK (474-683): +10M
Ponownie przeglądamy zawartość tabeli partycji. Pamiętaj o zanotowniu tych informacji, sczególnie rozmiarów poszcególnych partycji w blokach. Będziesz potrzebować tych informacji później.
Command (m for help): p
Disk /dev/hda: 16 heads, 38 sectors, 683 cylinders
Units = cylinders of 608 * 512 bytes
Device Boot Begin Start End Blocks Id System
/dev/hda1 * 1 1 203 61693 6 DOS 16-bit >=32M
/dev/hda2 204 204 473 82080 83 Linux native
/dev/hda3 474 474 507 10336 83 Linux native
Zwróć uwagę, że partycja wymiany (tutaj /dev/hda3) jest typu
``Linux native''. Musimy zmienić jej typ na ``Linux swap'', tak aby
program instlacyjny mogł ją rozpoznać. W tym celu wykonaj
polecenie t programu fdisk:
Command (m for help): t
Partition number (1-4): 3
Hex code (type L to list codes): 82
Jeśli skorzystasz z polecenia ``L'' to zobaczysz, że 82
odpowiada typowi Linux swap.
Aby zkończyć prace programu fdisk i zachować poczynione zmiany
na dysku, należy wydać polecenie ``w''. Aby wyjść BEZ
zachowywania jakichkolwiek zmian należy wcisnąć ``q''.
Po zakończeniu pracy z programem fdisk, system może
zasugerować restart komputera, aby upewnić się, że wprowadzone
zmiany zostaną zauważone przez system. Zasadniczo nie ma powodu do
restartu komputera po zakończeniu pracy fdisk -- nowe
wersje fdisk i cfdisk są na tyle sprytne, że potrafią
uaktualnić tabelę partycji bez restartowania systemu.
Po edycji tabeli partycji, program instalacyjny powinien zajrzeć do nich i zaoferować włączenie obszaru wymiany (swapa). Odpowiedz Tak.
(System pyta się o włączenie partycji wymiany, aby zminimalizować możliwość popełnienia błędu w sytuacji, gdy na dysku istniją partycje innych systemów operacyjnych i jedna z partycji nie należących do Linuxa zostanie mylnie rozpoznana jako partycja wymiany.)
Następnie program poprosi o przydzielenie nazw katalogów (takich jak /, /usr, /var, /tmp, /home itp) każdej partycji Linuxowej, którą pragniesz wykorzystać.
Istnieje tylko jedna prosta zasada. Musi istnieć system plików o nazwie / i musi umożliwiac załadowanie systemu (bootable). Pozostałe partycje mogą zostać nazwane zupełnie dowolnie. Lecz są pewne konwencje mowiące jak je nazwać ( w którym miejscu drzewa plików mają być zamontwane), które (jeśli się do nich dostosujesz) w przyszłości ułatwią ci życie.
Wcześnej polecaliśmy podstawową konfiguracje składającą siez trzech partycji, małej partycji głównej, średniego rozmiaru partycji przeznaczonej an oprogramowanie systemowe i dużej partycji dla katalogów macierzystych użytkowników. Tradycyjne partycje te będą montowane w katalogach /, /usr i /home. Nazwa /usr pochodzi z zamierzchłych czasów, gdy (znacznie mniejsze) systemy UNIX przechowywały pliki systemowe i katalogi użytkowników na jednej partycji (innej niż partycja główna /). Część oprogramowania nadal polega na tej właściwości.
Jeśli posiadasz więcej niż jeden obszar katalogów domowych użytkowników, zwykle nazywa się je /home1, /home2, /home3. Tak się może stać gdy posisadasz dwa fizyczne dyski. Na naszym komputerze układ systemu plików wygląda następująco.
Filesystem 1024-blocks Used Available Capacity Mounted on
/dev/sda1 30719 22337 6796 77% /
/dev/sda3 595663 327608 237284 58% /usr
/dev/sda4 1371370 1174 1299336 0% /home
/dev/sdb1 1000949 643108 306130 68% /home2
Drugi dysk (sdb1) nie jest w całości przydzielony do /home2/ Partycja wymiany znajdująca się na tym dysku nie została ujęta w wykazie. Możesz zobaczyć, że partycja /home jest największym obszarem na sda i /home2 jest obszarem użytkownika na dysku sdb.
Jeśli zamierzasz stworzyć partycję na pliki robocze (scratch), spool, tymczasowa, pocztową lub newsową nazwij ją ./var. FIXME W przeciwnym wypadku prawdopodobnie chcesz utowrzyć katalog /usr/var i utworzyć dowiązanie symbliczne /var wskazujące właśnie na ten katalog (/usr/var). Program instalacyjny może zaoferować zrobiebie tego za ciebie.
Po przygotowaniu partycji pozostała część instalacji powinna być automatyczna. Twój program instalacyjny poprowadzi cię przez liczne menu i pozwoli określić skąd będą instalowane pakiety, na kórych partycjach będzeie instalowany Linux itd.
Nie zamierzamy tutaj dokumentować wszystkich szegółow specyficznych dla tej części instalacji. Jes to część, która różni się najbardziej między dystrybucjami (utorzy tradycyjnie współzawodniczą aby zyskać tutaj jak najwięcej), lecz jest to również jedna z najprostszych częsci instalacji. A programy instalacyjne są intuicyjne, z ekranami pomocy, które można wywołać niema w dowolnym momencie instalowania pakietów.
Po zinstalowaniu pakietów z oprogramowaniem, jeśli wszystko przebiegło bez kłopotów, program instalacyjny, zanim po raz pierwszy załaduje jądro z twrdego dysku przeprowadzi cię przez kilka procedur konfiguracji poszczegórnych części systemu.
LILO (skrót od LInux LOader) jest programem, który pozwala załadować Linuxa (jak również inne systemy operacyjne, np. MS-DOS) z twardego dysku twojego komputera.
Program instalacyjny spyta się, czy zainstalować LILO na twoim dysku. Jeśli nie posiadasz na tym dysku OS/2, odpowiedz `tak'. OS/2 ma specjalne wymagania, patrz Wybrane konfiguracje LILO
Zainstalowanie LILO jako podstawowego ładowacza systemów powoduje, że dodatkowa dyskietka startowa staje się niepotrzebna. Przy każdym starcie komputera, możesz powiedzieć LILO, który system ma załadować.
Program instalacyjny może ci również dać szansę utworzenia ``standardowej dyskietki startowej'', której możesz użyć do uruchomienia twojego nowo zinstalowanego Linuxa. (Jest to starsza i mniej wygodan metoda, która zakłada, że zwykle bedziesz uruchamiał MS-DOS, lecz gdy będziesz chciał uruchomić Linuxa skorzystasz z tej dyskietki startowej.)
Aby ją zrobić, potrzebujesz czystej, foramtowanej dyskietki wysokiej gęstości (1.2, 1.44 takiej, jak naped A:) Po prostu kiedy cię o to poprosi program instalacyjny włóż dyskietkę do napędu i dyskietka startowa zostanie utworzona. (to nie jest to samo co instalacyjna dyskietka startowa i nie możesz ich wzajemnie zamieniać.)
Procedura poinstalacyjna może cię również prowadzić przez wiele menu, pozwalając skonfigurować twój system. To znaczy określic rodzaj i miejsce podłączenia myszy i modemu, strefę czasową i inne parametry. Po orostu staraj się odpowiadać na pytania.
System może ci również zaproponować utowrzenie kont użytkowników, lub założenie hasła na koto administratora (root). Nie jest to trudne i zwykle polega na przeczytaniu instrukcji i wykonaniu prosrych czynności.
Jeśli wszystko poszło zgodnie z planem, powinieneś mieć teraz mozliwość załadowania z twardego dysku Linuxa, wykorzystując do tego LILO. Alternatywą jest załadowanie Linuxa z nowo utworzonej dyskietki startowej (nie oryginalnej startowej dyskietki instalacyjnej). Po załadowaniu systemu zaloguj się jako root. Gratulacje! Masz swój własny system Linux.
Jeśli ładujesz system za pomocą LILO, spróbuj podczas restartu komputera przycisnąc (i trzymać przyciśnięty) przycisj shift, control, lub alt. Pozwoli to na uzyskanie dostępu do wiersza zachęty startowej (boot prompt). Wciśnij tab, a zobaczysz listę opcji. W ten sposób możesz załadować bezpośrednio przez LILO Linuxa, MS-DOS lub cokolwiek innego.
Powinieneś właśnie patrzeć na zachęte do wejścia do systemu. Gratulacje!
W zależności od tego jak przebiegła faza instalacji, możesz chcieć utworzyć konta użytkowników, zmienić nazwę swojego komputera lub skonfigurować (na powrót) X. Jest znacznie więcej rzeczy, które mogłbyć ustawiać i konfiguraować, urządenia do wykonywania kopii, połączenie SLIP/PPP z dostawcą Internetu itp.
Powinna ci pomóc dobra książka o administrowaniu systemem UNIX. (Sugerujemy Essential Systems Administration, O'Reilly and Associates.) Z czasem nabierzesz doświadczenia. Powinieneś przeczytać różne inne dokumenty Linux JTZ, takie jak NET-2-JTZ czy Printing-JTZ.
LILO jest programem ładującym systemy operacyjne , który można wykorzystać do wyboru w czasie uruchamiania komputera, który dokładnie system oeracyjny ma tym razem zostać załadowany. Sa duże szanse, że program instalcyjny automatycznie skonfigurował i zainstalował LILO podczas instalacji systemu (chyba, że używasz OS/2, wedy powinieneś wykonać to o czym tutaj piszemy). Jeśli tak, to możesz pominąć resztę tego rozdziału.
Jeśłi zainstalowałeś LILO jako podstawowy (primary) ładowacz systemu, będzie obsługiwał pierwszy stopień procesu ładowania systemu dla wszystkich systemów operacyjnych zainstalowanych na twardym dysku. Jednakże możesz pracowaćz OS/2 który ma własnego ładowacz, Boot Manager. W takim przypadku chesz aby Bot Manager był podstawowoym ładowaczem systemu i wykorzystywał lilo do załadowania Linuxa (jako drugorzędny ładowacz systemu).
Jeśli muszisz skonfigurować LILO ręcznie, bedzie to wymagało edycji pliku /etc/lilo.conf. Poniżej przedstawiamy przykład pliku konfiguracyjnego LILO, dla pryzpadku gdy główną partycją Linuxa jest /dev/hda2, a MS-dOS jest zainstalowany na /dev/hdb1 (na drugim fizycznym dysku).
# Powiedz LILO, aby się zainstalwoał jako podstawowoy ładowacz systemu na
# dysku /dev/hda.
boot = /dev/hda
# Plik z obrazem programu ładującego;prawdopodobnie nie powinieneś tego zmieniać
install = /boot/boot.b
# Schemat ładowania Linuxa
image = /vmlinuz # plik zawierający jądro
label = linux # nadajmy tej pozycji nazwę "linux"
root = /dev/hda2 # /dev/hda2 jako główny (root) syste, plików
vga = ask # zapytaj się o tryb VGA
append = "aha152x=0x340,11,7,1" # dodaj to do zachęty startowej
# (parametry przekazywane do jądra)
# w cely wykrycia sterownika SCSI
# schemat ładowania MS-DOSu
other = /dev/hdb1 # To jest partycja MS-DOS
label = msdos # nadajemy tej pozycji nazwę "msdos"
table = /dev/hdb # Tabela partycji drugiego dysku
Po zakończonej edycji pliku /etc/lilo.conf uruchom program /sbin/lilo jako root. W ten sposó zainstalujesz LILO na swoim dysku. Pamiętaj, ze muszisz uruchmić /sbin/lilo po każdej kompilacji jądra, aby ładowacz wskazywał na prawidłowy plik (coś czym się teraz nie powinieneś zupełnie przejmować, lecz należy pamiętać).
Zwróć uwagę na sposób wykorzystania opcji append w pliku /etc/lilo.conf w celu podania parametrów startowych, jak to robiliśmy uruchamiając system z instalacyjnej dyskietki startowej.
Możesz teraz zrestartować komputer i załadować system z twardego dysku. LILO załaduje domyślnie system który jest opisany w pliku konfiguracyjnym jako pierwszy. Aby uzyskać dostęp do wiersza zachęty starowej i menu dostępnych systemów, trzymaj w czasie startu komputera przyciśnięty klawisz shift, control lub alt; powinieneś zoaczyć taką zachętę:
Boot:
Podaj teraz etykietę/nazwę systemu operacjnego jaką nadałeś każdej
pozycji w pliku /etc/lilo.conf; w tym przypadku będzie to
albo linux albo msdos, lub wciśnij tab aby uzyskać
listę etykiet.
Załózmy teraz, ze chcesz wykorzystać LILO jako drugorzędny ładowacz sytemu,np. gdy chcesz ładować Linuxa za pomocą Boot Managera systemu OS/2. Aby załadować system z Partycji Linuxa pod Boot Managerem niestety musisz utworzyć tę partycję za pomocą programu FDISK systemu OS/2 (nie programem fdisk w dystrybucji Linuxa) i sformatować ją jako FAT lub HPFS, tak aby OS/2 o niej wiedział (podziekuj IBM).
Aby LILO ładowało Linuxa za pomocą Boot Managera, chcesz aby LILO zainstalowało się tylko na partycji głównej Linuxa (w naszym przykładzie jest to /dev/hda2). W takim przypadku plik konfiguracyjny LILO będzie wyglądał następująco:
boot = /dev/hda2
install = /boot/boot.b
compact
image = /vmlinuz
label = linux
root = /dev/hda2
vga = ask
Zwróć uwagę, na zmianę w wierszu boot. Po uruchomieniu /sbin/lilo powinieneś być w stanie dodać partycję Linuxa do listy Boot Managera. Ten sam schemat postępowania powinien działać również w przypadku innych systemów operacyjnych.
Prawa autorskie do tego dokumentu należą do 1996 by Eric S. Raymond. Możesz swobodnie korzystać z tego dokumentu, rozpowszechniać i kopiować pod warunkiem, że:
Powyższe ograniczenia mają na celu ochronę potencjalnych czytelników przed niepoprawnymi lub nieaktualnymi wersjami. Jeśli myślisz, że znalazłeś wyjątek o tej reguły, zapytaj mnie.
Podziękowania dla Matta D. Welsha, który zapoczątkował ten dokument. Usunąłem większość specyficzną dla dystrybucji Slackware i ukierunkowałem reszte dokumentu na istalację z napędu CD, lecz znaczna część dokumentu nadal należy do niego,
Wersja 4.1 była znacząco ulepszona dzięki uwagom David Shao <dshao@best.com>.
Prawa autorskie tłuamczenia należą do (c)1997 piotr.pogorzelski@ippt.gov.pl. Wersję polską można rozpowszechniać na warunkach opisanych powyżej. Zmiany w stosunku do wersji angielskiej:
Najnowsze wersje przetłumaczonych na język polski dokumentów HOWTO szukaj tutaj: http://www.jtz.org.pl.
Kontakt z osobami zajmującymi się tłumaczeniami: jtz@ippt.gov.pl.
Powodzenia.
doc-linux-pl-2002.06.14.orig/html/Intranet-Server-HOWTO.pl.html 0100664 0001750 0001750 00000126631 06770264140 022602 0 ustar coven coven
Mówiąc prosto, Intranet to opisowy wyraz używany dla implementacji technologii Internetowych w organizacjach korporacyjnych, bez zewnętrznego połączenia do globalnego Internetu. Ta implementacja jest wykonana w taki sposób, żeby dostarczyć ogromne zasoby informacyjne organizacji do każdego miejsca pracy, z minimalnym kosztem, czasem i wysiłkiem. Ten dokument stara się wytłumaczyć w prosty sposób, jak ustawić Intranet używając gotowych, tanich lub darmowych narzędzi.
Ten dokument przyjmuje, że wiesz już, jak zainstalować TCP/IP w twoim serwerze Linuxowym, oraz połączyć go fizycznie do sieci LAN używając karty sieciowej Ethernet. Przyjmuje też, że posiadasz podstawową wiedzę o systemach Netware, WinNT i Mac'ach. Konfiguracja serwera Netware została pokazana na przykładzie wersji 3.1x jako podstawy. Możesz też użyć INETCFG, uzyskując ten sam rezultat. Po stronie klientów, omawiamy Windows 3.1x, Windows for Workgroups, Win95, WinNT, oraz Apple PowerMac.
W przykładach używam prywatnych adresów sieci (RFC-1918) - 172.16.0.0 i 172.17.0.0. Możesz wybrać odpowiadające adresy, zależnie od twojej konfiguracji.
Serwer Serwer Serwer
Linuxowy Netware WFWG/NT
172.16.0.1 172.16.0.2 172.16.0.3
| | | 172.16.0.0
------+-----+-----+--------+--+--------------
| |
| | 172.16.0.254
Stacja robocza 1 Router
172.16.0.5 | 172.17.0.254
|
----------+-------+--------
172.17.0.0 |
Stacja robocza 2
172.17.0.5
Przed rozpoczęciem instalacji, będą potrzebne następujące programy:
Nowe wersje Linux Intranet Server HOWTO będą okresowo wysyłane na comp.os.linux.announce i comp.os.linux.help. Będą też umieszczane na różnych Linuxowych serwerach FTP, włącznie z sunsite.unc.edu.
Najświeższa wersja tego dokumentu jest dostępna w formacie HTML pod adresem http://www.inet.co.th/cyberclub/karnadp/http.html
Jeżeli masz pytania lub komentarze o tym dokumencie, wyślij do mnie list na adres karnad@indiamail.com.
Sugestie, krytyka i każdy inny rodzaj poczty są zawsze mile widziane. Jeżeli znajdziesz błąd w tym dokumencie, daj mi znać, żebym mógł go poprawić w następnej wersji. Dziękuję.
Kiedy ściągasz serwer, masz dwie opcje: pobrać źródła i skompilować je samodzielnie, albo wziąć binaria. Binaria pod Linuxa (ELF) są dostępne z NCSA, ale tylko najnowsza wersja.
Serwer NCSA poprowadzi cię przez kolejne opcje konfiguracji i przygotuje różne pliki. Ale zanim ściągniesz HTTPd, przygotuj odpowiedzi na następujące pytania:
Po pierwsze musisz wybrać między źródłami i binariami. Jeżeli twój system nie figuruje w menu, będziesz musiał pobrać domyślne źródła i skompilować je samemu.
Żeby sprawdzić wersję twojego Linuxa przejdź do linii poleceń twojej maszyny i napisz:
linux:~$ uname -a
powinna pojawić się linia podobna do tej
linux:~$ uname -a
Linux linux 2.0.29 #4 Tue Sep 13 04:05:51 CDT 1994 i586
linux:~$
Wersja Linuxa to 2.0.29.
Pozostałe parametry mogą być podane przed ściąganiem lub później, podczas
modyfikacji pliku srm.conf w katalogu
/usr/local/etc/httpd/conf.
Dokładne nazwy dyrektyw, które pojawiają się w pliku httpd.conf,
są pokazane w nawiasach. Jedyny wyjątek to dyrektywa DocumentRoot,
która pojawia się w pliku srm.conf.
Ta dyrektywa określa sposób działania serwera HTTPd na twoim komputerze. Preferowana metoda to ,,standalone''. Dzięki temu demon HTTP będzie działał cały czas. Jeżeli wybierzesz ładowanie HTTPd przez ,,inetd'', binaria serwera będą ładowane do pamięci na każde zapytanie przeglądarek, co może spowolnić twój serwer.
Dyrektywa ta definiuje port twojej maszyny, na którym HTTPd będzie nasłuchiwał zapytań HTTP. Jeżeli możesz zalogować się jako root, użyj standardowego ustawienia - 80. Jeżeli nie, wybierz port od 1025 do 65535.
Jest to nazwa użytkownika, jaką przybierze serwer podczas odpowiadania na zapytania HTTP i wykonywania operacji na plikach. Musisz to ustalić tylko jeżeli serwer jest uruchamiany jako root. Jeżeli nie masz uprawnień root'a, użyj swoją nazwę użytkownika, a jeśli jesteś administratorem systemu, możesz chcieć stworzyć specjalnego użytkownika, żeby kontrolować prawa dostępu do plików.
Określa identyfikator grupy serwera. Jest to dyrektywa bardzo podobna do poprzedniej i jest potrzebna tylko wtedy, gdy serwer pracuje w trybie ,,standalone''.
Jeżeli nie masz uprawnień root'a, użyj nazwy twojej głównej grupy. Możesz dowiedzieć się, do jakiej grupy należysz, wydając polecenie groups w linii poleceń Linuxa.
Gdy użytkownicy serwera mają problemy z serwerem, powinni wysyłać pocztę pod adres określony tą dyrektywą. Możesz tu umieścić swój osobisty adres e-mail.
Jest to miejsce, w którym znajduje się serwer. Jeżeli masz uprawnienia root'a,
umieść serwer w jego domyślnym katalogu - /usr/local/etc/httpd.
Jeżeli nie możesz zalogować się jako root, wybierz podkatalog w twoim katalogu
domowym. Możesz dowiedzieć się o nazwie twojego katalogu domowego komendą
pwd.
Ta dyrektywa określa miejsce plików HTML (nie tylko - np. plików graficznych,
skryptów CGI itp. - przyp. tłum.). Domyślny katalog to
/usr/local/etc/httpd/htdocs.
Możesz także wybrać katalog domowy specjalnego użytkownika, którego wybrałeś
dyrektywą ,,User'', albo podkatalog w twoim katalogu domowym, jeżeli nie możesz
logować się jako root.
Jeżeli nie wiesz, jakie ustawienia wybrać, użyj domyślnych. Teraz możesz już ściągnąć NCSA HTTPd z http://hoohoo.ncsa.uiuc.edu/docs/setup/OneStep.html.
Powinieneś przeczytać dokumentację HTTPd, znajdującą się na
http://hoohoo.ncsa.uiuc.edu/docs/,
zanim zaczniesz instalować HTTPd.
Jeżeli będziesz chciał skompilować kod źródłowy serwera, będziesz musiał
zmodyfikować pliki makefile w każdym z trzech katalogów (support, src,
cgi-src). Jeżeli twoja wersja Linuxa jest już obsługiwana przez te pliki,
wystarczy tylko napisać make linux w katalogu serwera
(np. /usr/local/etc/httpd). (? - przyp. tłum.)
Jest to prosta czynność - wystarczy napisać make linux w linii poleceń
w głównym katalogu serwera.
Uwaga: Użytkownicy starej wersji Linuxa, nie obsługującej binariów
ELF, muszą odkomentować linię #define NO_PASS w pliku
portablility.h (pamiętaj, że ,,#'' w pliku języka C jest dyrektywą
kompilatora - można tam wpisać ,,define'' lub ,,undef'' - chociaż może jest
to tam ,,zakomentowane'' dodatkowymi ,,#'' - przyp. tłum.) i ustawić
DBM_LIBS = -ldbm w pliku Makefile przed kompilacją HTTPd.
Po zainstalowaniu HTTPd, zaloguj się jako root i uruchom go, pisząc httpd &. (przyjmując, że zainstalowałeś go jako ,,standalone'') Powinieneś widzieć go teraz w liście generowanej przez polecenie ps. Najprostszy sposób przetestowania HTTPd, to telnet. W linii poleceń Linuxa napisz
linux:~$ telnet 172.16.0.1 80
gdzie 80 jest domyślnym portem dla HTTP. Jeżeli ustawiłeś dyrektywę ,,Port'' na inny niż 80, wpisz ten numer zamiast 80. Powinieneś otrzymać odpowiedź wyglądającą tak jak to:
Trying 172.16.0.1...
Connected to linux.mydomain.
Escape character is '^]'.
Teraz, kiedy wpiszesz jakikolwiek znak i naciśniesz enter, powinieneś otrzymać odpowiedź podobną do poniższej.
HTTP/1.0 400 Bad Request
Date: Wed, 10 Jan 1996 10:24:37 GMT
Server: NCSA/1.5
Content-type: text/html
<HEAD><TITLE>400 Bad Request < /TITLE> < /HEAD>
<BODY><H1>400 Bad Request < /H1>
Your client sent a query that this server could
not understand.<P>
Reason: Invalid or unsupported method.<P>
< /BODY>
Teraz możesz połączyć się z serwerem używając innych komputerów.
Odwołuję cię do diagramu w rozdziale Wprowadzenie, znajdują się tam używane w tym dokumencie adresy. Stacja robocza 1 (dalej nazywana W/S1) znajduje się w sieci 172.16.0.0 i może bezpośrednio połączyć się z serwerem Linuxowym, a Stacja Robocza 2 (W/S2) jest w sieci 172.17.0.0, musi więc używać bramki (gateway)/routera 170.17.0.254, żeby dostać się do maszyny Linuxowej. Adres bramki jest potrzebny tylko podczas konfiguracji W/S2. Netware odwołuje się do bramki jako do ,,ip_router''.
Uźyję W/S2 dla zilustrowania konfiguracji klientów. Żeby skonfigurować W/S1 zmień jedynie adres 172.17.0.5 na 172.16.0.5 i zignoruj wszystkie odwołania do bramki/routera.
Jeżeli nie masz routera, nie musisz czytać następnej sekcji - przejdź do
Jeżeli nie masz routera, możesz ominąć tą sekcję.
Musisz skonfigurować serwer Linuxowy, żeby rozpoznawał router. Dzięki temu bedzie pozwalał Stacji Roboczej 2 połączyć się z serwerem WWW. Powinieneś zalogować się jako root, żeby skonfigurować serwer Linuxowy. W linii poleceń serwera napisz
route add gw default 172.16.0.254
Żeby używać tej bramki za każdym razem, kiedy uruchamiasz serwer Linuxowy,
wyedytuj plik /etc/rc.d/rc.inet1 i zmień linię zawierającą definicję
bramki na GATEWAY = "172.16.0.254". Upewnij się, że linia GATEWAY
nie jest odkomentowana.
(W dystrybucji RedHat możesz umieścić informacje o bramce m.in. w pliku /etc/rc.d/rc.local - wstaw tam polecenie ,,route add default gw 172.16.0.254'' - przyp. tłum.)
Możesz też dodać routing do konkretnych sieci po drugiej stronie routera. Możesz to uzyskać poleceniem
route add -net 172.17.0.0 gw 172.16.0.254
W celu dodawania tego routingu przy każdym uruchomieniu Linuxa, dodaj powyższą
komendę do pliku /etc/rc.d/rc.local.
W celu skonfigurowania serwera Netware, powinieneś mieć uprawnienia nadzorcy (Supervisor) lub przynajmniej uprawnienia operatora konsoli (Console Operator). Jeżeli nie możesz ich uzyskać, poproś o pomoc twojego administratora sieci.
Na serwerze włącz typ ramek Ethernet_II w twojej sieci LAN, wydając następujące komendy, lub dołączając je do pliku AUTOEXEC.ncf.
load NE2000 frame=Ethernet_II name=IPNET
load TCPIP
bind IP to IPNET addr=172.16.0.2 mask=FF.FF.FF.0
Możliwe, że będziesz musiał podać numer slotu karty podczas ładowania drivera NE2000 (zależnie od twojej konfiguracji). (np. ,,load NE2000 slot=3 frame=...'')
Jeżeli używasz PC-tów, możesz wybrać pomiędzy Windows 3.1, WFWG (Windows for Workgroups - przyp. tłum.) i Windows '95. Procedura instalacji w Win95 różni się od starszych wersji windows jeżeli używasz 32 bitowego klienta Microsoftu lub Novella. Jeśli będziesz używać klienta 16 bitowego, procedura instalacji jest identyczna dla wszystkich tych środowisk, możesz więc używać instrukcji dotyczących Windows 3.x. Instrukcje instalacji klienta 32 bitowego znajdują się w sekcji Instalacja w Windows 95.
Jeżeli używasz Win3.1 lub WFWG, możesz zainstalować Klienta Netware (nazywanego ,,VLM'') i dodatkowe pliki dostarczane z dyskietką obsługi TCP/IP:
TCPIP.exe, VTCPIP.386, WINSOCK.dll i WLIBSOCK.dll
Zauważ, że plik WINSOCK.dll różni się od dostarczanych z Win95 i Trumpetem. Zainstaluj Klienta Netware z obsługą windows. Skopiuj pliki VTCPIP.386, WINSOCK.dll i WLIBSOCK.dll do katalogu SYSTEM, a plik TCPIP.exe do katalogu NWCLIENT. Zmodyfikuj teraz plik STARTNET.bat w katalogu NWCLIENT:
lsl
ne2000 ----> driver twojej karty sieciowej
c:\windows\odihlp.exe ----> jeżeli używasz WFWG
ipxodi
tcpip ----> dodaj tą linię
nwip ----> jeżeli używasz Netware/IP
vlm
Stwórz podkatalog, powiedzmy, \NET\TCP i skopiuj pliki HOSTS,
NETWORKS, PROTOCOLS i SERVICES z katalogu /etc serwera Linuxowego,
lub katalogu SYS:ETC na serwerze Netware. Zmodyfikuj skopiowany plik HOSTS,
dodając linię dotyczącą serwera Linuxowego. To pozwoli ci odwoływać się do
serwera jako http://linux.mydomain/ zamiast
http://172.16.0.1/, kiedy używasz przeglądarki WWW -
127.0.0.1 localhost
172.16.0.1 linux.mydomain
Zmodyfikuj plik NET.cfg w katalogu NWCLIENT
Link Driver NE2000
port 300
int 3
MEM D0000
FRAME Ethernet_802.2
; ---- dodaj te linie ----
FRAME Ethernet_II
Protocol TCPIP
PATH TCP_CFG C:\NET\TCP
ip_address 172.17.0.5
ip_netmask 255.255.255.0
ip_router 172.17.0.254 ---> dodaj adres twojej bramki tylko
---> wtedy, jeżeli musisz jej używać,
---> żeby dostać się do serwera HTTP
Link Support
MemPool 6192 ---> Minimum to 1024 - spróbuj użyć innych wartości
Buffers 10 1580 ---> To też może być wysterowane
;---------------------------------
; Jeżeli używasz Netware/IP będziesz musiał dodać takie linie
;
NWIP
NWIP_DOMAIN_NAME mydomain
NSQ_BROADCAST ON
NWIP1_1 COMPATIBILITY OFF
AUTORETRIES 1
AUTORETRY SECS 10
W pliku SYSTEM.ini w katalogu WINDOWS dodaj taki wpis dla VTCPIP.386:
[386Enh]
.....
network=*vnetbios, vipx.386, vnetware.386, VTCPIP.386
.....
Zrestartuj komputer i uruchom STARTNET.bat. Możesz teraz używać swojej ulubionej przeglądarki WWW, żeby oglądać twoje strony. Nie musisz logować się do sieci Netware i uruchamiać TCPMAN (jeżeli używasz Trumpet Winsock).
Sekcja ta opisuje instalację 32-bitowego klienta dla Windows 95. Po pierwsze musisz zainstalować następujące składniki:
W celu ich instalacji kliknij na ikonach: Mój Komputer, Panel Sterowania, Sieć. Kliknij ,,Dodaj''. Znajdziesz się w oknie, w którym wyświetlone są następujące napisy: Klient, Karta, Protokół, oraz Usługa.
Żeby zainstalować Klienta sieci Netware, wykonaj następujące czynności:
Żeby zainstalować protokół TCP/IP
Windows 95 domyślnie instaluje kilka innych protokołów. Usuń je, podświetlając je i klikając przycisk ,,Usuń''. Zazwyczaj Windows 95 instaluje protokół Microsoft NetBeui, oraz protokół kompatybilny z IPX/SPX. Możesz usunąć NetBeui, ale IPX/SPX będzie potrzebny, jeżeli będziesz chciał logować się na serwer Netware.
W celu skonfigurowania TCP/IP, kliknij na TCP/IP, Właściwości i na pasku ,,Adres IP''. Wprowadź adres IP w polu ,,Podaj adres IP'' jako 172.17.0.5. W polu ,,Maska Podsieci'' wprowadź 255.255.255.0. Następnie wybierz pasek ,,Bramka'' (lub ,,Router'' - przyp. tłum.); wprowadź adres bramki w polu ,,Nowa bramka'' - 172.17.0.254 i kliknij przycisk ,,Dodaj''. Adres bramki powinien znajdować się w polu zainstalowanych bramek. Kliknij OK.
Powinieneś zobaczyć prośbę o zrestartowanie komputera, zrób to. Powinieneś teraz być w stanie używać przeglądarki do połączenia się z serwerem HTTP.
Ta sekcja koncentruje się na opisaniu dostępu do sieci TCP/IP za pomocą Klienta Microsoft, korzystając z systemów
Uwaga: Żebyś mógł odwoływać się do serwera Linuxowego jako
http://linux.mojadomena/ zamiast http://172.16.0.1/
w przeglądarce WWW i programach intranetowych, musisz zmodyfikować plik
hosts. Możesz też dodać rekordy dla wszystkich twoich komputerów
(Netware, Unix, WinNT). Systemy Windows trzymają swój plik HOSTS w katalogu
\WINDOWS lub w \WINDOWS\SYSTEM, zależnie od
wersji. Zmodyfikuj ten plik, dodając linię dla serwera Linuxowego:
127.0.0.1 localhost
172.16.0.1 linux.mojadomena
172.16.0.2 netware.mojadomena
172.16.0.3 winNT.mojadomena
172.16.0.5 ws_1
Ta sekcja opisuje instalację 32-bitowego klienta w WFWG. Najpierw musisz
ściągnąć sterowniki TCP/IP dla Windows z serwera Microsoftu. Najnowsza obecnie
wersja to 3.11b z
ftp://ftp.microsoft.com/ lub z innych serwerów jako tcp32b.exe.
Upewnij się, że zainstalowałeś Win32 przed uruchomieniem 32-bitowego sterownika
TCP/IP.
Kiedy rozpakowałeś już pliki TCP/IP do tymczasowego katalogu (np.
C:\TEMP, sprawdź, czy masz plik OEMSETUP.INF w katalogu
\WINDOWS\SYSTEM. Jeżeli tak, zmień jego nazwę. Skopiuj
OEMSETUP.INF z katalogu TEMP do \WINDOWS\SYSTEM.
Jeżeli uruchamiałeś inne stosy TCP/IP w twoim systemie, usuń je zanim
przejdziesz dalej.
Uruchom Ustawienia Sieci lub Ustawienia Windows/Zmień Ustawienia Sieci.
Powinieneś zostać zapytany o kartę sieciową - wybierz odpowiednią. Jeżeli nie zostałeś zapytany,
Zostaniesz poproszony o skonfigurowanie stosu TCP/IP. Zawsze możesz zmienić konfigurację, podświetlając protokół TCP/IP pokazany w polu Karty Sieciowe i klikając przycisk Ustaw.
Kliknij OK. System poprosi cię o zrestartowanie komputera, zrób to. Powinieneś móc przeglądać strony na serwerze HTTP.
Ta sekcja opisuje instalację 32-bitowego klienta Microsoft w Windows 95. Najpierw musisz zainstalować następujące komponenty:
W celu ich instalacji kliknij na ikonie Mój Komputer, następnie Panel Sterowania, Sieć. Kliknij ,,Dodaj''. Znajdziesz się w oknie z napisami: Klient, Karta, Protokół, oraz Usługa.
Żeby zainstalować Klienta Sieci Microsoft:
Instalacja protokołu TCP/IP:
Domyślnie Windows 95 instaluje kilka protokołów. Usuń je, podświetlając je i klikając przycisk ,,Usuń''. Zazwyczaj Win95 instaluje protokół Microsoft NetBeui.
W celu konfiguracji TCP/IP, kliknij na ,,TCP/IP'', ,,Właściwości'', oraz na pasku ,,Adres IP''. Wprowadź twój adres IP w polu ,,Podaj adres IP'' - 172.14.0.5. W polu ,,Maska Podsieci'' wpisz 255.255.255.0. Wybierz pasek ,,Bramka'' i wprowadź adres routera w polu ,,Nowa Bramka'' - 172.17.0.254. Kliknij przycisk ,,Dodaj''.
Adres bramki powinien się teraz pojawić w polu zainstalowanych bramek. Kliknij OK. Powinieneś otrzymać prośbę o zrestartowanie systemu - zrób to. Możesz teraz użyć przeglądarki, żeby połączyć się z serwerem HTTP.
Ta sekcja opisuje instalację klienta TCP/IP dla WinNT 4.0.
Powinieneś zostać zapytany o kartę sieciową - wybierz odpowiednią.
W celu dodania protokołu
Zostaniesz poproszony o skonfigurowanie stosu TCP/IP. W każdej chwili możesz zmienić ustawienia, podświetlając protokół TCP/IP i klikając na ,,Właściwości''.
Kliknij OK. System poprosi cię o restart. Możesz teraz używać dowolnej przeglądarki do łączenia się z serwerem HTTP.
Jeżeli używasz Macintosha, możesz skorzystać z tej sekcji, opisującej instalację MacTCP na PowerMacach.
Uwaga: Żebyś mógł odowoływać się do serwera Linuxowego jako do
http://linux.mojadomena/ zamiast http://172.16.0.1/
w przeglądarce WWW i wszystkich twoich programach intranetowych,
musisz wyedytować plik hosts. Format tego pliku jest inny od
stostowanego w Unixach. Plik hosts Maca jest oparty na RFC-1035. Możesz też
dodać rekordy dla innych komputerów (Netware, Unix, WinNT). MacOS trzyma swój
plik HOSTS w ,,folderze Preferencji'' w ,,folderze Systemowym''. Do tego pliku
dodaj linię dla serwera Linuxowego:
linux.mojadomena A 172.16.0.1
netware.mojadomena A 172.16.0.2
winNT.mojadomena A 172.16.0.3
ws_1 A 172.16.0.5
Ta sekcja opisuje instalację MacTCP. Najpierw musisz ściągnąć MacTCP z serwera Apple lub zainstalować go z ,,Internet Connection CD''. W celu skonfigurowania MacTCP, kliknij Menu Jabłko/ Panel Sterowania/ TCP/IP. W oknie konfiguracji wybierz ,,Połącz przez:'' ,,Ethernet''. Zmień ,,Ustawienie'' na ,,Ręczne''
Kliknij OK. Możesz połączyć się teraz z serwerem HTTP.
Intranet nie jest kompletny bez możliwości dzielenia zasobów na róźnych platformach. Będziesz potrzebował obsługi innych systemów plików, w celu uzyskania dostępu do danych na nich. Ten dokument dostarcza informacji o podłączaniu Linuxa do komputerów z następującymi popularnymi systemami plików:
Te systemy plików mogą być wkompilowane do jądra Linuxa albo dodane jako moduły, zależnie od wersji Linuxa. Jeżeli nie wiesz, jak skompilować jądro, możesz odwołać się do Kernel HOWTO http://www.jtz.org.pl/Html/Kernel-HOWTO.pl.html i Module HOWTO http://www.jtz.org.pl/Html/Module-HOWTO.pl.html.
W celu współdzielenia plików z serwera Netware, będziesz potrzebował obsługi
NCP (ncpfs). NCPFS działa z jądrami od 1.2.x i 1.3.71. Nie działa z żadnym
starszym jądrem 1.3.x. Nie może odczytywać bazy danych NDS w Netware 4.x,
ale może używać adresowania (??? ,,bindery'' binder to spinacz albo np.
przydzielanie portów usługom - przyp. tłum.).
Jeżeli używasz Netware 4.0, możesz włączyć adresowanie dla konkretnych domen
(??? ,,containers'' pojemniki - przyp. tłum.) używając komendy
Set Bindery Context na konsoli:
set Bindery Context = KORPORACJA.MOJADOMENA;UŻYTKOWNIKWEB.MOJADOMENA
W powyższym przykładzie, włączono adresowanie dla tych dwóch domen.
Będziesz musiał ściągnąć programy systemu plików NCP z ftp://sunsite.icm.edu.pl/pub/Linux/system/filesystems/ncpfs/ncpfs.tgz (Obecnie ncpfs-2.0.10).
Żeby zainstalować ncpfs napisz
zcat ncpfs.tgz | tar xvf -
żeby rozpakować pliki do ich katalogu (można też łatwiej, tar xzvf
ncpfs.tgz - przyp. tłum.). W przypadku tego pliku otrzymasz katalog
ncpfs-2.0.10. Zmień katalog na ncpfs-2.0.10 przed kontynuowaniem
instalacji. Przeczytaj plik README i zmień Makefile, jeżeli jest to potrzebne.
Sposób instalacji ncpfs zależy od wersji twojego jądra. W 1.2 powinieneś po prostu napisać ,,make'', a potem ,,make install'' - zainstaluje to binaria i strony man.
Jeżeli używasz 1.3.71 lub późniejszego, będziesz musiał przekompilować jądro. Od tej wersji część jądra z ncpfs jest załączona w źródłach. Żeby sprawdzić, czy jądro musi być rekompilowane, napisz
cat /proc/filesystems
Powinna pokazać się (między innymi - przyp. tłum.) linia mówiąca o ncpfs.
Jeżeli nie, możesz albo przekompilować jądro, albo dodać ncpfs jako moduł. Żeby przekompilować jądro, musisz napisać ,,make config'', a kiedy program zapyta cię o
The IPX protocol (CONFIG_IPX) [N/y/?]
odpowiedz ,,y''. Prawdopodobnie nie jest ci potrzebna pełna sieć wewnętrzna,
o którą zostaniesz następnie zapytany. Kiedy jądro zostanie zainstalowane
zresetuj system, sprawdź /proc/filesystems, i jeżeli wszystko działa,
kontynułuj instalację programów ncpfs. Zmień katalog na zawierający ściągnięte
pliki ncpfs i napisz ,,make'', a po kompilacji ,,make install'', żeby
zainstalować różne programy i strony man.
W celu sprawdzenia typu instalacji napisz
ipx_configure --auto_interface=on --auto_primary=on
poczekaj 10 sekund i napisz
slist
Powinieneś uzyskać listę serwerów Netware. Jesteśmy gotowi do współdzielenia plików z serwera Netware.
Załóżmy, że musisz dostać się do plików HTML z katalogu
\home\htmldocs na dysku VOL1: serwera MOJADOMENA_NW.
Radzę stworzyć użytkownika (na przykład) ,,EXPORT'' z hasłem ,,EXP123''
na serwerze, do którego udzielasz dostępu do danego katalogu używając SYSCON
lub NWADMIN.
W maszynie Linuxowej stwórz nowy katalog /mnt/MOJADOMENA_NW.
Wpisz
ncpmount -S MOJADOMENA_NW -U EXPORT -P EXP123 /mnt/MOJADOMENA_NW
żeby zamontować katalog. Komenda
ls /mnt/MOJADOMENA_NW/vol1/home/htmldocs
wypisze listę wszystkich plików w
MOJADOMENA_NW/VOL1:\HOME\HTMLDOCS (używając notacji
Netware). Jeżeli napotkasz jakiś problem, przeczytaj IPX HOWTO
http://sunsite.unc.edu/mdw/HOWTO/IPX-HOWTO.html, żeby usyskać więcej
informacji o protokole IPX.
W celu współdzielenia plików z serwera Windowsowego, potrzebna ci będzie obsługa SMB (smbfs).
Będziesz musiał ściągnąć programy dla systemu plików SMB z ftp://sunsite.unc.edu/pub/Linux/system/filesystems/smbfs/smbfs.tgz (obecnie wersja smbfs-2.0.1).
Żeby zainstalować programy smbfs napisz
zcat smbfs.tgz | tar xvf -
żeby rozpakować pliki do ich katalogu (można też tar xzvf smbfs.tgz -
przyp. tłum.). W przypadku wersji 2.0.1 otrzymasz katalog smbfs-2.0.1.
Zmień katalog na ten z smbfs przed kontynuowaniem instalacji. Przeczytaj plik
README i zmień Makefile, jeżeli jest to potrzebne.
Sposób instalacji smbfs zależy od wersji twojego jądra. W 1.2, powinieneś napisać po prostu ,,make'', a potem ,,make install'', żeby zainstalować binaria i strony man.
Jeżeli używasz jądra 2.0 lub późniejszego, będziesz musiał przekompilować jądro. Od tej wersji, obsługa smbfs jest już w źródłach jądra. W celu sprawdzenia, czy jądro potrzebuje rekompilacji, napisz
cat /proc/filesystems
Powinna wyświetlić się (między innymi - przyp. tłum.) linia o smbfs.
Jeżeli nie, możesz albo przekompilować jądro, albo dodać obsługę smbfs jako
moduł. W celu rekompilacji jądra napisz ,,make config'', a kiedy program
zapyta się o dodanie obsługi systemu plików SMB, opowiedz tak. Kiedy jądro
zostanie poprawnie zainstalowane zresetuj system, sprawdź
/proc/filesystems i jeżeli wszystko jest w porządku kontynuuj
instalację programów smbfs. Zmień katalog na zawierający ściągnięte pliki smbfs
i napisz ,,make''. Po kompilacji napisz ,,make install'', żeby zainstalować
różne binaria i strony man.
W naszym przykładzie przyjmijmy, że serwer Windows NT nazywa się
,,MOJADOMENA_NT'' i współdzieli swój katalog C:\PUB\HTMLDOCS
o nazwie dzielonej ,,HTDOCS'' bez hasła. W maszynie Linuxowej stwórz nowy
katalog /mnt/MOJADOMENA_NT. Wpisz
smbmount //MOJADOMENA_NT/HTMLDOCS /mnt/MOJADOMENA_NT -n
żeby zamontować system plików SMB. Jeżeli to nie działa, spróbuj
smbmount //MOJADOMENA_NT/COMMON /mnt/MOJADOMENA_NT -n -I 172.16.0.3
Wpisanie komendy
ls /mnt/MOJADOMENA_NT
wypisze wszystkie pliki w \\MYDOM_NT\PUB\HTMLDOCS
(używając notacji Windowsowej).
Najpierw potrzebne jest ci jądro z obsługą NFS bądź to wkompilowaną, bądź jako moduł.
Załóżmy, że posiadasz komputer Unixowy z NFS'em o nazwie MOJADOMENA_UNIX i z adresem IP 172.16.0.4. Możesz sprawdzić udostępniane (exported) przez ten komputer katalogi pisząc
showmount -e 172.16.0.4
Kiedy znamy już udostępniane katalogi, możemy zamontować je wpisując odpowiednią komendę mount. Radzę ci utworzyć podkatalog w ,,/mnt/'' (powiedzmy ,,MOJADOMENA_UNIX'') i używać go jako punkt montowania.
mount -o rsize=1024,wsize=1024 172.16.0.4:/pub/htmldocs /mnt/MOJADOMENA_UNIX
Może zajść potrzeba zmiany rsize i wsize, zależnie od twojego środowiska. Jeżeli napotkasz jakiś problem, przeczytaj NFS HOWTO http://sunsite.unc.edu/mdw/HOWTO/NFS-HOWTO.html, żeby uzyskać więcej informacji o protokole NFS.
Teraz, kiedy skonfigurowaliśmy serwer HTTP i klientów, oraz połączyliśmy serwer Linuxowy z innymi serwerami, musimy wykonać parę małych ustawień na serwerze Linuxowym, żeby uzyskać możliwość dostępu do zamontowanych systemów plików z przeglądarek WWW.
Istnieją dwie metody dostępu do zamontowanych systemów plików przez strony HTML.
/usr/local/etc/httpd/htdocs), żeby odwoływać się do zamontowanych
katalogów jako
srm.conf w katalogu
/usr/local/etc/httpd.
# Alias nowanazwa prawdziwanazwa
Alias /icons/ /usr/local/etc/httpd/icons/
# aliasy dla serwerów
Alias /netware/ /mnt/MOJADOMENA_NW/vol1/home/htmldocs/
Alias /winNT/ /mnt/MOJADOMENA_NT/
Alias /unix/ /mnt/MOJADOMENA_UNIX/
...zrestartuj HTTPd. Możesz dostać się do dokumentów na serwerze netware,
odwołując się do niego jako http://linux.mojadomena/netware/index.htm,
lub podobnie dla innych serwerów.
Możesz połączyć twój intranet z Internetem, żeby uzyskać dostęp do poczty elektronicznej i wszystkich wspaniałych informacji, które zawiera. Proponuję napisanie krótkiej notatki opisującej jak to zrobić, dla przyszłej wersji dokumentu. Dokładne wyjaśnienie znajduje się w ISP Hookup HOWTO http://www.jtz.org.pl/Html/ISP-Hookup-HOWTO.html i Diald mini HOWTO http://www.jtz.org.pl/Html/mini/Diald.pl.html.
W biurze serwer HTTP może być używany do zapewnienia przezroczystego dostępu do informacji z innych serwerów, znajdujących się pod różnymi lokacjamii w różnych katalogach. Dane mogą być prostymi dokumentami w Wordzie, arkuszami kalkulacyjnymi w Lotusie lub złożonymi bazami danych.
Ta technologia jest zazwyczaj używana w następujące sposoby:
Tymi dokumentami mogą być listy nowości, raporty periodyczne, mapy, zakres działalności firmy, cenniki, informacje o produktach i każdy dokument będący potrzebny spółce.
Szybki dostęp do książek telefonicznych firmy itp. Te dane mogą być przedstawione jako strona WWW albo przez skrypty CGI; serwer może służyć jako bramka do istniejących lub nowych aplikacji. Znaczy to, że przy użyciu tych samych standardowych mechanizmów dostępu, informacje mogą być szerzej dostępne w prostszy sposób. Może być użyty do stworzenia interfejsu z RDBMS, jak ORACLE i SYBASE dla generowania informacji w czasie rzeczywistym. Oto lista odnośników do takich serwerów w Sieci.
Kiedy kultura w firmie zmienia się do punktu, w którym nawet każdy oddział przesuwa się w kierunku indywidualnych założeń, technologia Intranetu zapewnia idealny środek dostarczenia najświeższych informacji do odziału lub pracownika. Mocne technologie wyszukiwania zapewniają możliwość znalezienia grupy lub pojedynczej osoby posiadającej odpowiedzi na pytania powstające w normalnej procedurze robienia interesów.
Dzięki obsłudze formularzy HTML, serwery mogą zapewniać karty do wypełniania, ankiety i proste rozmieszczanie zadań w czasie.
Administratorzy mogą używać intranetu do dostarczania oprogramowania oraz uaktualninień ,,na żądanie'' do użytkowników przez sieć firmy. Może to być dokonane dzięki językowi ,,Java'', który pozwala na tworzenie i przezroczystą dystrybucję obiektów na żądanie, a nie tylko danych lub aplikacji. Jest to rzeczywiście możliwe, dzięki nowszym wersjom Linuxa, obsługującym Javę.
Dzięki swojej możliwości używania intranetowych produktów pocztowych ze standardowymi i prostymi metodami dołączania dokumentów, dźwięku, obrazu i innych multimediów, poczta jest opisywana jako prosta metoda komunikacji. Pod Linuxa dostępna jest duża liczba programów do systemu poczty elektronicznej, takich jak sendmail, pop3d i imapd.
Technologia intranetu rozwija się tak szybko, że dostępne narzędzia, a konkretnie HTML, mogą zostać użyte do przeprowadzenia olbrzymiej zmiany w sposobie korzystania z systemów. Dzięki HTML można zbudować interfejs, który jest ograniczony tylko wyobraźnią twórcy. Piękno używania technologi intranetu jest nim dlatego, że można korzystać z niego w bardzo prosty sposób. Kliknięcie odnośnika ze strony HTML może zabrać cię do następnej strony, włączyć alarm, wykonać procedurę zakończenia roku, lub zrobić cokolwiek, co robi program komputerowy.
Oto lista innych interesujących rzeczy, które możesz wykonać dzięki Linuxowemu serwerowi intranetu. Wszystkie programy wymienione poniżej należą do kategorii freeware lub sharewere.
Jeżeli znasz inne interesujące zastosowania serwera intranetu na Linuxie, napisz do mnie.
Dziękuję ludziom z NCSA za zapewnienie tak wspaniałej dokumentacji, Davidowi Andersonowi i innym za wypróbowanie tego HOWTO i przysyłanie komentarzy. Opis Netware/IP powstał dzięki Romelowi Floresowi (rom@mnl.sequel.net).
Prawa autorskie tego dokumentu: © 1996, 1997 Pramod Karnad. Jest on rozpowszechniany pod następującymi warunkami:
Jeżeli masz jakieś sugestie, albo znalazłeś błąd, daj mi znać. doc-linux-pl-2002.06.14.orig/html/JTZ-HOWTO.pl.html 0100644 0001750 0001750 00000113172 07405237160 020211 0 ustar coven coven
Wszystko zaczęło się od tego, że kilku osobom chciało się poświęcić troche czasu (bynajmniej nie wolnego) (choć jeden z nich sugerował, że podobno miał mieć jakieś ferie, czy coś w tym stylu, lecz przecież każdy rozsądny człowiek wie, że nie ma czegoś takiego jak ferie, urlop, wolna chwila. To są puste pojęcia wymyślone przez *owców, które mają jedynie namącić ludziom w głowach) i wspomóc World Linux Domination Project Polska (choć część z nich na pewno sobie nie zdawała sprawy z tego co robi) tłumacząc HOWTO na nasz rodzimy język.
Dosyć szybko zebrała się mała grupka ludzi, którzy rzuciwszy w kąt inne sprawy zabrali się do dyskusji co przetłumaczyć, jak to przetłumaczyć i co z tymi tłumaczeniami robić. Na szczęście nie byli w tym najlepsi (w tłumaczeniach też nie, jak sami zobaczycie), więc się zajęli innym sprawami (wesela, kino, spacer itp.).
Ku ogólnemu zdziwieniu okazało się, że ich wysiłek nie poszedł na marne i zaczęły pojawiać się pierwsze efekty ich działań (o nich za chwilę). Również ich dyskusje, zaowocowały pewnymi ustaleniami, które od tej pory stały się obowiązującym prawem.
Osobą koordynującą projekt jest Bartosz Maruszewski B.Maruszewski@jtz.org.pl
Te ogniste dyskusje, o których wcześniej pisałem (wymiana kilkunastu listów między trzema osobami) doprowadziły do przyjęcia następujących zasad :
HOWTO-info".
Otrzymasz wtedy dokładną listę kto co robi i jakie
dokumenty są wolne.
HOWTO-slownik".
Zapoznaj się z nim przed rozpoczęciem
tłumaczenia - uchroni cię to od niepotrzebnych, długotrwałych poprawek.
Słownik ten znajduje się także w tym dokumencie.
<title>Tytuł <author>Autor: Imię Nazwisko <htmlurl url="mailto:autor@adres" name="autor@adres"><newline> v0.75, 1 Sierpnia 1996<newline> <-- wersja i data oryginału <bf>Wersja polska: Imię Nazwisko tłumacza <htmlurl url="mailto:tłumacz@adres" name="tłumacz@adres"></bf><newline> v1.3, 28 Marca 1997 <-- wersja i data tłumaczenia
<abstract> Dokument ten został napisany w standardzie ISO-8859-2. Oryginał tego dokumentu znajduje się pod adresem... <it>jeśli autor nie podał, to podaj ftp.icm.edu.pl/pub/Linux/sunsite/docs/HOWTO/(mini)</it> </abstract>
newline.
Chwilowo jest nas niewielu. Ci, o których wiemy (być może są tacy, którzy samotnie, w zapomnieniu zrobili już tę całą robotę, lecz my o nich nic nie wiemy) to:
Jeśli chcesz do nas dołączyć zapisz się na naszą listę, lecz pamiętaj, że jest ona przeznaczona, dla osób pracujących nad tłumaczeniami, nie służy do przyglądania się, jak postępują prace. Adres listy to jtz@ippt.gov.pl lub jtz@jtz.org.pl. Aby się na nią zapisać wyślij na adres majordomo@ippt.gov.pl list zawierający
subscribe jtz Imię Nazwisko
Paweł Więcek coven@pwr.wroc.pl opiekuje się pakietem naszych tłumaczeń dostarczanym dla Debiana. Pakiet ten jest dostępny jako "unstable doc-linux-pl" pod adresem ftp://ftp.ists.pwr.wroc.pl/coven/debian lub na dowolnej kopii serwera GNU/Linux Debian.
Michał Malarski malarz@it.pw.edu.pl stworzył pakiet tłumaczeń przeznaczonych dla RedHata. Pakiet ten dostępny jest pod adresem ftp://srl.it.pw.edu.pl/pub/JTZ/RedHat.
Postanowiliśmy, że przetłumaczone dokumenty będą udostępniane szerszemu gronu dopiero, kiedy będą się do tego nadawały ;-). To znaczy, że przetłumaczony dokument musi wpierw troche poczekać, zostać ponownie sprawdzony przez autora i dopiero potem może pokazać się szerszej publiczności.
Chcemy jednak, abyście wiedzieli czego możecie oczekiwać w najbliższym czasie i jaki jest stopień zaawansowania prac. Czekamy również na wasze reakcje i oczekiwania. Wasze głosy mogą wpłynąć na kolejność w jakiej będą tłumaczone te dokumenty. Zajrzyj na Polską Stronę Tłumaczeń.
Jeśli chcesz wiedzieć nad czym w tej chwili pracujemy, wyślij na adres
B.Maruszewski@jtz.org.pl list, który w polu Subject: zawiera napis
HOWTO-info.
Otrzymasz mniej więcej taką odpowiedz:
From: Bartosz Maruszewski <B.Maruszewski@jtz.org.pl>
Subject: Re: HOWTO-info
Date: Tue, 25 Feb 1997 16:47:27 +0100 (MET)
Lines: 38
========== KTO ========== ===== CO ROBI ===== ===== CO ZROBIL =====
Ja SMB BootPrompt
Kernel
m. Locales
m. DOS2Linux
--------------------------------------------------------------------
Piotr P. META Instalation
Serial ISP-HookUp
NET2 LargeDisk
Ethernet
--------------------------------------------------------------------
Piotr T. XFree86,
WWW
Java-CGI
--------------------------------------------------------------------
Pawko O. Sound
Modules
========== SPIS ==========
Howtos:
BootPrompt(*), BootDisk(*), Instalation(*), Kernel(*), Modules(*),
Printing(-Usage), SCSI, SMB(*), Serial(*), Sound(*), UMSDOS, ISP-HookUp(*),
META(*), NET2(*), Ethernet(*)
Mini-Howtos:
LILO, LargeDisk(*), Colour-ls, Consoles(-Many), DOS2LINUX(*), Getty-ps,
KeySetup, Keystroke, Locales(*), Quota, Swap-Space, Upgrade, X*(*), Diald,
(*) - oznacza zrobione, badz w trakcie tlumaczenia
m. - mini HOWTO
Aktualne informacje znajdziesz na Polskiej Stronie Tłumaczeń.
Wszystkie przetłumaczone dokumenty (w różnych formatach) można znaleźć na naszym serwerze FTP ftp://ftp.jtz.org.pl/
Jeśli znajdziesz jakieś nowe słowo/wyrażenie, które nadaje się do słownika, albo znajdziesz lepsze określene dla któregoś słowa/wyrażenia już będącego w słowniku, to wyślij je do Bartka Maruszewskiego B.Maruszewski@jtz.org.pl.
**
v3.4.6
**
acknowledgement - podziękowania (jako tytuł sekcji), wyrazy uznania
actual - rzeczywisty, ostateczny, faktyczny, bieżący
adapter - sterownik
affect - dotyczyć, mieć negatywny wpływ na
aggregate works - prace zebrane
arrangement - ustawienie
aspect ratio - współczynik kształtu/obrazu
based - oparty na
bit bucket - kosz na bity
boot - załadować, wystartować system,
boot diskette - dyskietka startowa
boot prompt - zachęta startowa
broadcasting - rozgłaszanie, nadawanie
can access - ma dostęp
carry out - wypełnij, wykonać, przeprowadzić
chip - układ scalony
command - polecenie
command output - wynik/rezultat polecenia
(to) crash - wywalić się, załamanie, pad/paść
credits - wyrazy uznania
debug - odpluskwiać
derivative works - prace pochodne
disable - wyłączyć
disclaimer - zastrzeżenie
driver - sterownik
to edit - (z)modyfikowac
entry - pozycja
EPROM burner - programator eprom-ów
expire - wygasnąć
feed - zasilać, zasilanie, dostarczać
figure out - stwierdzić
filesystem - system plików
flexibility - elastyczność
for details - więcej na temat szczegółów dotyczących
hack - przerobić (odnośnie jądra Linuksa)
hardware - sprzęt
header/include files - pliki nagłówkowe
interface - interfejs
introduction - wprowadzenie
issue a command - wykonać
xxx issue - sprawa dotycząca xxx
jumper - zworka, przełącznik
kill - usun (o procesie)
learn about - nauczyć się, dowiedzieć się o
line - wiersz
maintain - opiekować się
maintained - prowadzony/pielęgnowany/utrzymywany przez
major - liczba główna
man - podręcznik (man)
map - odwzorowywać
masquerading - maskowanie
memory window - ramka pamięci
minor - liczba poboczna
mirror - kopia
normal - zwykly
note - zauważ, uwaga, zapamiętaj
obey - podlegać, być posłusznym
override -- zmienić, nadpisać
pipe -- potok
poll - sprawdzać, próbkować, monitorować
probe - przeszukiwać, sprawdzać, wykrywać, dokonywać detekcji
processed - interpretowane, przetwarzane
prompt - zachęta
put - umieścić
to query - pytać, sprawdzać
reboot - przeładowanie
reflect - odzwierciedlać
release - wersja, wydanie
root - administrator
root filesystem - główny system plików
section - rozdział
shadow - przesłaniać
share - współdzielić
shell - powłoka, interpreter
shell prompt - zachęta powłoki, interpretera
software - oprogramowanie
spool directory - katalog zadań, katalog buforowania
stream -- strumień
support - obsługiwać
symbolic link - dołączenie/dowiązanie/wskazanie symboliczne
system call - funkcja systemowa
terms of use - warunki stosowania/używania/korzystania
third-party books - książki wydawnictw/autorów, nie związanych z
firmą produkującą opisywaną rzecz
albo
książki osób trzecich
total - całkowity
tune - ustawić, dostroić
unlike - w przeciwieństwie do, niepodobny do
upgrade - odnawianie, odswieżanie, uaktualnianie
usage - stosowanie
using this technique - za pomocą tego sposobu, tym sposobem
utility, tool - narzędzie
work-around - obejści
X - nazwa systemu graficznych okienek uniksa to:
X
X Window System
X Version 11
X Window System, Version 11
X11
***** Żadnej innej _SZCZEGÓLNIE_ *XWindows* nie przyjmuję *****
skróty od zwrotów:
- według - wg
- wyżej wymienione - ww.
==========================================================
Wyrazy których nie tłumaczymy:
firewall, bridge, host, proxy, log, stdin, stdout, locale, *roff,
timeout, routing, router
mieszczą się tutaj także wszelkie polecenia systemowe i nazwy programów
X, emacs, *TeX, *script.
===========================================================
Jak odmieniać wyrazy nietłumaczone, zaczerpnięte z j. angielskiego oraz
wszelkie skróty?
Wyrazy zaczerpnięte z ang. to takie jak: Linux, Unix, fax...
***************
UWAGA
***************
Odmiana słowa Linux:
(podaję za słownikiem języka polskiego)
ten Linux
tego Linuksa
temu Linuksowi
tego Linuksa
z Linuksem
o Linuksie
O! Linuksie. :)
Żadnej innej nie przyjmuję. Jeśli znajdę w jakimś tłumaczeniu:
Linuxie, Linux-ie itp, to NIE AKCEPTUJE go.
Jeśli wyraz kończy się na spółgłoskę, to piszemy
końcówkę polską wg rodzaju jaki dany wyraz przyjmuje w j. polskim
(NIE STOSUJEMY myslnikow do oddzielenia polskiej koncowki od skrotu):
np: ten firewall -- tego firewalla
ten RAM -- tego RAMu
W dopełniaczu (kogo? czego?) skrótu kończącego się na spółgłoskę zawsze
używamy końcówki 'u': DOSu, BIOSu itd.
Jeśli wyraz kończy się na samogłoskę, to dodajemy apostrof i piszemy
końcówkę polską wg rodzaju jaki dany wyraz przyjmuje w j. polskim:
np: ten bridge - tego bridge'a
Jeśli wyraz kończy się na tzw. nieme "e", to lepiej unikać jego
odmiany, np: edytor joe -- w edytorze joe, edytora joe. A nie edytorze
joe'u czy edytora joe'a ...
Wcześniej już zostało wspomniane, że piszemy w formacie SGML. Format ten bardzo przypomina HTML więc jeśli znasz ten ostatni, to nie powinien on ci nastręczać większych trudności. Do konwersji z formatu SGML na inne formaty służy pakiet sgml-tools.
Wielu z was chce się przyłączyć, ale pisze do mnie, że nie zna SGMLa. No i piszę do każdego litanię wszystkich zasad itp. Żeby tego nie robić postanowiłem zamieścić kilka porad jak z niego korzystać.
/usr/doc/sgmltools-xxx./<,
to parser potraktuje, to jako koniec tagu.
Należy wtedy stosować tagi w pełnej postaci,
czyli np. <bf>tekst</bf>. Piszę to, bo można też stosować
skrótową formę: <bf/tekst/.To naprawdę nie jest trudne.
Więcej informacji o pakiecie sgml-tools można znaleźć na stronie projektu SGMLTools
Pakiet sgml-tools wywodzi się od dawnego pakietu linuxdoc-sgml. Zmianę nazwy pakietu argumentuje się tym, że poprzednia nazwa wiązała pakiet z Linuxem, co nie było zgodne z rzeczywistością. Można go było używać również pod kontrolą innych systemów operacyjnych.
Aktualnie projekt ten jest chwilowo zawieszony, więc z wszelkimi problemami musimy rodzić sobie sami. Aktualne wersje tego pakietu są dwie:
Ponieważ jesteśmy zainteresowani DTD linuxdoc to używamy wersji 1.0.9. Co prawda nie każę używać ci dokładnie tej wersji, ale nie jestem w stanie ci powiedzieć, czy wersja, którą używasz można łatwo przekonać do obsługi polskich tłumaczeń.
Jak już wspomniałem do konwersji z formatu SGML służy pakiet programów sgml-tools. Programy z tego pakietu, których będziesz używał to najprawdopodobniej:
Aby wygenerować poprawne JTZ-ty musisz prawdopodobnie zmodyfikować kilka plików z pakietu sgml-tools. Informacje jak to zrobić znajdzesz poźniej.
Do wygenerowania pięciu głównych formatów (poza SGML oczywiście) należy wykonać kolejno polecenia:
sgml2html -s 0 -l pl nazwa.pl.sgml sgml2txt -f -c latin nazwa.pl.sgml sgml2latex -o ps -p a4 nazwa.pl.sgml sgml2latex -o dvi -p a4 nazwa.pl.sgml sgml2latex -o tex -p a4 nazwa.pl.sgml
W powyższym przykładzie zmienna systemowa PLIK oznacza nazwę dokumentu poddawanego konwersji. Jeżeli często przeprowadzasz konwersję do wszystkich formatów polecam napisanie sobie podobnego skryptu.
#!/bin/sh sgml2html -s 0 $1.pl.sgml sgml2txt -f -l pl -c latin $1.pl.sgml sgml2latex -o ps -p a4 $1.pl.sgml sgml2latex -o dvi -p a4 $1.pl.sgml sgml2latex -o tex -p a4 $1.pl.sgml
Aby dokonać konwersji należy wywołać powyższy skrypt z parametrem bedącym nazwą dokumentu SGML (z pominięciem rozszerzeń .pl.sgml)
Oczywiście możesz również eksperymentować z innymi opcjami, ale ten zestaw opcji wydaje się być najwłaściwszy. Opcje te oznaczają:
Instrukcja ta dotyczy wersji 1.0.9-2 pakietu sgml-tools. Informacja ta nie oznacza, że w innych wersjach należy postąpić inaczej. Sposób postępowania na pewno nie zmienił się od wersji 1.0.7. Sposób postępowania dla starszych wersji pakietu sgml-tools czy też dla pakietu linuxdoc-sgml (poprzednika pakietu sgml-tools) opisany jest w sekcji historycznej.
Chcemy uzyskiwać poprawne dokumenty w formatach:
Spis Treści
Aby poradzić sobie z powyższymi problemami musimy zmodyfikować dwa pliki.
Pierwszy z nich odpowiada za odnośniki w wersjach HTML dokumentów. Jest to plik
/usr/lib/sgml-tools/SGMLTools/Lang.pmW pliku tym musimy dodać definicję języka polskiego, oraz odpowiednie napisy dla tej definicji.
Drugi z plików jest plikiem odpowiadającym za znaczniki w generowanym pliku w formacie LaTeX. Plikiem tym jest
/usr/lib/sgml-tools/dist/linuxdoc/latex2e/mappingw pliku tym modyfikujemy informację o nagłówku dokumentu LaTeX tworzonego podczas konwersji. Musimy zdefiniować użycie znaków wg. standardu Latin2 oraz języka polskiego.
Aby było łatwiej dokonać te zmiany przygotowałem odpowiedni patch do automatycznego dokonania potrzebnych zmian. Patch ten jest dostępny w sieci ftp://ftp.jtz.org.pl/tools.
Ponieważ niektórzy mogą mieć problem ze ściągnięciem ww. pliku jego zawartość zamieszczam też poniżej:
*** /usr/lib/sgml-tools/SGMLTools/org/Lang.pm Mon Mar 22 05:29:00 1999
--- /usr/lib/sgml-tools/SGMLTools/Lang.pm Tue May 18 22:44:50 1999
***************
*** 60,65 ****
--- 60,66 ----
pt portuges portuguese
ca catalŕ catalan
it italiano italian
+ pl polski polish
ro română romanian
);
***************
*** 164,169 ****
--- 165,171 ----
"pt" => "Página anterior",
"ca" => "Pŕgina anterior",
"it" => "Indietro",
+ "pl" => "Poprzednia",
"ro" => "Înapoi"
},
"Next" => {
***************
*** 177,182 ****
--- 179,185 ----
"pt" => "Página seguinte",
"ca" => "Pŕgina següent",
"it" => "Avanti",
+ "pl" => "Następna",
"ro" => "Înainte"
},
"Contents" => {
***************
*** 190,195 ****
--- 193,199 ----
"pt" => "Índice",
"ca" => "Índex",
"it" => "Indice",
+ "pl" => "Spis treści",
"ro" => "Cuprins"
},
"Table of Contents" => {
***************
*** 203,208 ****
--- 207,213 ----
"pt" => "Índice geral",
"ca" => "Índex general",
"it" => "Indice Generale",
epackage\[latin2\]{inputenc}\n"
"\\usepackage{t1enc}\n"
- "\\usepackage{babel}\n"
+ "\\usepackage\[polish\]{babel}\n"
"\\usepackage{epsfig}\n"
"\\usepackage{[OPTS]}\n"
"\\def\\addbibtoc{\n"
@@ -39,9 +39,9 @@
"\\usepackage{linuxdoc-sgml}\n"
"\\usepackage{qwertz}\n"
"\\usepackage{url}\n"
- "\\usepackage\[latin1\]{inputenc}\n"
+ "\\usepackage\[latin2\]{inputenc}\n"
"\\usepackage{t1enc}\n"
- "\\usepackage{babel}\n"
+ "\\usepackage\[polish\]{babel}\n"
"\\usepackage{epsfig}\n"
"\\usepackage{[OPTS]}\n"
"\\def\\addbibtoc{\n"
@@ -56,9 +56,9 @@
"\\usepackage{linuxdoc-sgml}\n"
"\\usepackage{qwertz}\n"
"\\usepackage{url}\n"
- "\\usepackage\[latin1\]{inputenc}\n"
+ "\\usepackage\[latin2\]{inputenc}\n"
"\\usepackage{t1enc}\n"
- "\\usepackage{babel}\n"
+ "\\usepackage\[polish\]{babel}\n"
"\\usepackage{epsfig}\n"
"\\usepackage{[OPTS]}\n"
"\\def\\title#1{\n"
Aby wykorzystać ten plik należy wykonać komendę:
patch -p0 < sgml-tools.patch
To jest wszystko co musisz zrobić. Powtórzę jeszcze raz: jedyne operacje jakie musisz wykonać, aby spolonizować sgml-tools 1.09 to:
Jeżeli ktoś jest zainteresowany co dokładnie zostało i dlaczego zmienione to zapraszam do sekcji Technikalia - historia.
Po pierwsze wszelkie poprawki trzeba nanosić w formacie SGML.
Jeśli znalazłeś literówki, to po prostu popraw je i wyślij poprawioną wersję do tłumacza. Upewnij się przedtem czy masz najnowszą wersję, bo może błędy, które poprawiasz są już poprawione w nowszej wersji.
Jeśli chcesz ingerować w treść dokumentu, to postępuj wg. poniższej instrukcji:
diff -Nu stara-wersja nowa-wersja > zmiany
zmiany wyślij do tłumacza
Ponieważ niektórzy korzystają ze starszych wersji oprogramowania i z różnych powodów nie chcą ich zmienić zdecydowaliśmy sie na pozostawienie starych sposobów zmuszenia do współpracy tamtego oprogramowania.
UWAGA!
Wraz z aktualnymi wersjami emacs'a dostarczany jest plik sgml-mode.elc
odpowiedzialny za tryb SGML pod emacsem.
Całkiem prosto:
LINUXDOCLIB=/usr/lib/linuxdoc-sgml
export LINUXDOCLIB
SGML_PATH=$LINUXDOCLIB/dtd/%N.dtd:$LINUXDOCLIB/dtd/%P.dtd:$LINUXDOCLIB/dist/linuxdoc/html/%N
export SGML_PATH
xemacsa i pisać!
UWAGA!
Konwersja na formaty TXT oraz HTML dla użytkowników pakietu linuxdoc-sgml.
Do konwersji pliku źródłowego SGMLa na HTML i TXT
służą odpowiednio programy sgml2html i sgml2txt. Wszystko co
musisz pamiętać, to użycie odpowiedniej opcji dla sgml2txt, żeby
zostawił polskie znaki w spokoju. Opcja ta, to -l. Podczas
konwersji występuje z reguły błąd Couldn't find font 'C' czy jakoś tak
- otóż nie ma się czym przejmować. Poprawny dokument tekstowy zostanie
wygenerowany.
Co do konwersji na HTML, to tutaj problemu z polskimi literami nie ma, ale
trzeba pamiętać, aby użyć opcji -L polish, żeby odwołania Next,
Table of Contents i Previous zamienić na polskie odpowiedniki.
Przed konwersją załóż plik /usr/lib/linuxdoc-sgml/rep/html/polish
i wpisz w nim:
PrevPage: Poprzednia NextPage: Następna TOC: Spis Treści
UWAGA!
O ile dobrze pamiętam opis ten dotyczy ostatniej wersji pakietu linuxdoc-sgml.
W poniższym tekście opisuję moje udane próby konwersji dokumentu z polskimi znakami diaktrycznymi zapisanego w formacie SGML na format LaTeX oraz DVI (Device Independent) i PS (PostScript).
Bezproblemowo znaki różnych alfabetów możemy używać tylko w nowym formacie
LaTeXa (tzw. LaTeXu 2e), standardowo pozwalającym na pisanie z ogonkami.
Aby można było używać jawnie polskich liter w LaTeXu w nagłówku dokumentu
w formacie LaTeX wygenerowanego przez program sgml2latex muszą
wystąpić następujące linie:
\usepackage{t1enc}
\usepackage[latin2]{inputenc}
\usepackage[polish]{babel}
Najważniejsza jest pierwsza z nich:
\usepackage{t1enc}
Kolejna linia:
\usepackage[latin2]{inputenc}
umożliwia zapisanie polskich liter w standardzie ISO Latin 2 (ISO 8859-2) a nie jakimiś przedziwnymi zaklęciami magicznymi LaTeXa.
Trzecia z nich, a mianowicie:
\usepackage[polish]{babel}
daje nam jedynie dodakowy bajer: słowa w języku polskim w razie potrzeby zostaną poprawnie podzielone (zgodnie z regułami języka polskiego oczywiście).
Niestety program sgml2latex, generujący za każdym razem najpierw
plik w formacie LaTeX, a dopiero później korzystając z tego pliku generuje
pliki w formatach DVI i/lub PS, nie generuje odpowiednich linii w tym
pliku.
Program sgml2latex umożliwia wygenerowanie pliku w formacie LaTeX
lub LaTeX2e (z opcją -2e). Wszystko byłoby fajnie gdyby ten plik był
poprawny dla nas (czyli zawierał linie wymienione powyżej). Niesety tak
nie jest. Żeby to poprawić wystarczy jedynie trochę zmodyfikować plik
/usr/lib/linuxdoc-sgml/rep/latex2e/mapping
w którym jest opisany sposób konwersji pliku SGML do formatu LaTeX2e. W
pliku tym we fragmencie dotyczącym konwersji tagu
<article> zamiast linii
"\\usepackage\[latin1\]{inputenc}\n"
"\\usepackage{t1enc}\n"
"\\usepackage\[latin2\]{inputenc}\n"
"\\usepackage\[polish\]{babel}\n"
Pierwsze dwie z tych linii muszą znaleźć się koniecznie, natomiast trzecia
wedle upodobania. Muszę jednak dodać, że w wypadku dodania trzeciej z
tych linii konieczne jest odpowiednie skonfigurowanie programu dvips
(przynajmniej ja to zrobiłem, w każdym razie korzystając z programu
texconfig dodałem polski sposób dzielenia wyrazów.
Jeżeli korzystając z formatu SGML tworzymy także inne dokumenty można w
taki sam sposób dokonać zmian w sekcjach dotyczących konwersji tagów
<report>, <book> oraz
<notes>. Te zmiany nie są jednak konieczne gdy pracujemy
wyłącznie z dokumentami HOWTO.
Już mamy poprawne generowanie plików w formacie LaTeX2e. Teraz jeszcze
musimy posiadać LaTeXa w wersji 2e. Jeżeli mamy zainstalowany pakiet tetex
(chyba jeden z popularniejszych w dystrybucjach Linuxa) to mamy
odpowiedni program. Ponieważ program sgml2latex oczekuje, że
program LaTeX2e wywołujemy przez latex2e to musimy mu taki
sposób wywołania tego programu zapewnić. Najprościej jest w katalogu
/usr/bin utworzyć skrót o nazwie latex2e do programu
latex, czyli:
cd /usr/bin ln -s latex latex2e
Po dokonaniu wyżej wymienionych modyfikacji żadne zmiany w dokumentzch
SGML nie są już konieczne. Wystarczą jedynie odpowiednie opcje programu
sgml2latex. Należy pamiętać o użyciu opcji -2e aby
program generował pliki w formacie LaTeX2e a nie w starszym (LaTeX).
Aby uzyskać wersję w formacie DVI używamy komendy:
sgml2latex -2e -a -d nasz_plik.sgml
Analogicznie możemy wygenerować pliki w formacie PS:
sgml2latex -2e -a -p nasz_plik.sgml
Rozwiązanie jest w paru miejscach trochę toporne, ale skuteczne. Osobiście były to moje pierwsze kroki w LaTeXu, więc opis do czynności, które należy wykonać może być trochę nieodpowiedni. Wszelkie informacje o LaTeXu jakie potrzebowałem do uzyskania satysfakcjonujących mnie wyników uzyskałem z Polskiej Strony Ogonkowej.
Wszelkie uwagi do treści tego dokument będą oczywiście mile widziane. Gwoli wyjaśnienia dodamy tylko, że osobą koordynująca całością prac jest tylko i wyłącznie Bartosz Maruszewski B.Maruszewski@jtz.org.pl. Wszelkie uwagi dotyczące sekcji Projekt JTZ oraz Słownik należy kierować więc wyłącznie do niego.
Natomiast jeżeli będziesz miał jakieś problemy od strony technicznej z konwersją dokumentów z formatu SGML, czy też uwagi dotyczące sekcji Technikalia zgłoś się do Michała Malarskiego malarz@it.pw.edu.pl
doc-linux-pl-2002.06.14.orig/html/Kernel-HOWTO.pl.html 0100664 0001750 0001750 00000173330 06770264140 020770 0 ustar coven coven
/pub/Linux/sunsite/docs/HOWTO.
Nowsza wersja zawiera uaktualnione wskazania na katalog zawierający jądra na
ftp.icm.edu.pl
Czy powinieneś to czytać? Hmm... zobaczmy czy masz następujące problemy:
Niektóre z przykładów zawartych tutaj zakładają, że masz
zainstalowane takie programy jak: GNU tar, find i xargs.
Są one właściwie standardowe; nie powinno być z tym problemów.
Zakłada się także, że znasz strukturę twojego systemu plików.
Jeśli nie znasz to koniecznie trzymaj w ręku wydruk tego co
pojawia się na ekranie po poleceniu mount, albo wydruk
zawartości pliku /etc/fstab jeśli umiesz go przeczytać.
Informacja ta jest ważna, i nie zmieni się dopóki nie zmienisz
układu partycji na twoim dysku.
Najnowszą wersją jądra, dostępną podczas pisania tego dokumentu, była wersja 2.2.9. To znaczy, że wszystko w tym dokumencie odnosi się do tej właśnie wersji. Chociaż staram się napisać ten dokument tak niezależnym jak się tylko da, jądro jest ciągle rozwijane, więc jeśli dostaniesz nowszą wersję, nieuniknionym jest, że będą jakieś różnice. Ale to wciąż nie powinno stanowić dużego problemu, co najwyżej mogą wystąpić jakieś drobne różnice.
Są dwie ogólne wersje źródeł jądra Linux-a, stabilne i testowe. Stabilne wersje zaczynają się od wersji 1.0.x i są numerowane liczbami parzystymi (chodzi o liczbę drugą); 1.0.x, 1.2.x, 2.0.x jak również 2.2.x. Wersje te są uważane za najbardziej stabilne, wolne od dziur i błędów podczas ich dystrybucji. Jądra testowe ( 2.1.x, 2.3.x) są jądrami przeznaczonymi dla tych, którzy chcą je testować, wprowadzać jakieś zmiany, może nawet współpracować przy tworzeniu go. W wersjach tych może byc pełno błędów, mogą się zawieszać chociaż to wcale nie jest regułą i niekoniecznie musi się dziać. Jakby co, to zostałeś ostrzeżony.
Tekst, który tak wygląda jest albo czymś co pojawi się na
ekranie, nazwą pliku, albo czymś co może być bezpośrednio wpisane
z klawiatury (np. polecenie, czy jego opcje). Jeśli czytasz ten
dokument jako zwykły plik tekstowy to tekst ten niczym się nie
różni.
Jądro w systemach typu Unix odgrywa rolę pośrednika między twoimi programami, a twoim sprzętem. Najpierw zajmuje się zarządzaniem pamięci dla wszystkich uruchomionych programów (procesów), i dba o to, aby wszystkie one dostały równą ilość czasu procesora. (albo nierówną jeśli tak zażądasz). Dodatkowo, posiada miły interfejs dla programów chcących "rozmawiać" z twoim sprzętem.
Jądro spełnia oczywiście o wiele więcej funkcji, ale to są najważniejsze, które należy znać.
Nowsze jądra z reguły mają wiekszą ilość sterowników, czyli mogą obsłużyć większą ilość urządzeń, mogą mieć ulepszone algorytmy zarządzania procesami, mogą działać szybciej niż starsze wersje, mogą być bardziej stabilne, mają także wiele poprawek błędów, które zdarzyły się w wersjach wcześniejszych. Większość ludzi odnawia swoje jądra ponieważ chcą większej ilości sterowników i naprawionych błędów.
Przeczytaj Hardware-HOWTO. Możesz także zajrzeć do pliku
config.in w źródłach jądra. Albo po prostu dowiedzieć się
samemu jak napiszesz make config. W poleceniu tym znajdą
się wszystkie obsługiwane przez dane jądro urządzenie. Ale nie będą
to wszystkie urządzenia, które obsługuje Linux. Wiele popularnych
sterowników (jak np. sterownik do PCMCIA i niektóre sterowniki do
taśm) są rozprowadzane osobno jako ładowalne moduły.
Aby zobaczyć jaką masz wersję napisz gcc -v.
Linus zaleca zawsze w pliku README wersję gcc, która
powinna być użyta do kompilacji danego jądra. Jeśli nie masz tej
wersji, dokumentacja w zalecanej wersji gcc powinna powiedzieć ci
czy musisz odnowić libc. Nie jest to trudne, ale ważne jest, aby
postępować zgodnie ze wskazówkami.
Są to części jądra, które nie są zawarte bezpośrednio w nim. Kompiluje się je osobno i można je umieścić a następnie usunąć z uruchomionego jądra prawie zawsze. Z powodu tej elastyczności jest to teraz preferowana metoda pisania niektórych fragmentów jądra. Wiele popularnych sterowników urządzeń to ładowalne moduły.
To zależy od twojej konkretnej konfiguracji. Skompresowane źródła zajmują mniej więcej 14 MB. Po rozkompresowaniu, skonfigurowaniu i kompilacji zajmuje kolejne 67 MB.
Na nowszych maszynach zabiera to NAPRAWDĘ mniej czasu niż na starych. Np. na AMD K6-2/300 z szybkim dyskiem kompilacja wersji 2.2.x może zająć około 4 minut podczas gdy kompilacja tego samego jądra na starym Pentium, 486 czy 386 może trwać nawet godziny, czy dni ...
Jeśli to cię martwi, a masz w pobliżu szybszy komputer, to skompiluj jądra na nim (zakładając, że ustawisz poprawne parametry, że twoje narzędzia systemowe są w odpowiednich wersjach itd), a potem przesnieś skompilowane jądro (obraz) na wolniejszy komputer.
Źródła możesz sciągnąć np. z
ftp.kernel.org:/pub/linux/kernel - jest to główny
serwer dla jądra Linux-a, albo z jakiejś bliższej ci kopii
tego serwera. W Polsce najlepszym miejscem jest
ftp.icm.edu.pl/pub/Linux/kernel. Z reguły nazwa
jądra to linux-x.y.z.tar.gz, gdzie x.y.z jest numerem
wersji. Tak jak już wspomniałem, wersje z nieparzystą drugą liczbą
to wersje rozwojowe i mogą być niestabilne. Obok wersji
.tar.gz są jeszcze wersje .bz2, które są mniejsze i
zabierają mniej czasu do ściągnięcia.
Najlepiej używać adresu ftp.xx.kernel.org, gdzie xx to kod
twojego kraju. Np. ftp.pl.kernel.org dla Polski.
Jeśli szukasz jakichś ogólnych informacji o Linux-ie, to zajrzyj pod adres www.linux.org. W Polsce także jest Polska Grupa Użytkowników Linux-a.
Zaloguj się jako root albo użyj polecenia su i
zmień katalog na /usr/src cd /usr/src.
Jeśli zainstalowałeś źródła do jądra podczas instalacji Linux-a w
katalogu tym znajdziesz dołączenie symboliczne linux,
które będzie wskazywało na katalog linux-x.y.z ze
źródłami, które wtedy zainstalowałeś. Jeśli chcesz zachować stare
źródła to usuń dołączenie linux poleceniem rm linux.
Jeśli takiego dołączenia nie ma, a jest katalog linux, to (jeśli
chcesz zachować źródła starej wersji jądra) zmień nazwę linux na
linux-x.y.z, gdzie x.y.z jest wersją tych źródeł. (zajrzyj do
pliku linux/Makefile - w pierwszych trzech linijkach
znajdziesz wersję źródeł znajdujących się w tym katalogu).
Jeśli chcesz możesz skasować cały katalog linux i pozbyć się
starych źródeł.
W każdym razie upewnij się, że nie ma katlogu linux przed
rozpakowanie źródeł.
Teraz w katalogu /usr/src rozpakuj źródła poleceniem
tar zxpvf linux-x.y.z.tar.gz, jeśli na końcu nazwy pliku
ze źródłami nie ma .gz to użyj polecenia tar xpvf
linux-x.y.z. Zawartość archiwum wyświetli się na ekranie.
Kiedy rozpakowywanie się skończy pojawi się nowy katalog linux.
Dobrym pomysłem byłoby w tym momencie zmienić jego nazwę na
linux-x.y.z i zrobić symboliczne dołączenie do tego
katalogu o nazwie linux. Aby to zrobić użyj polecenia
mv linux linux-x.y.z; ln -s linux-x.y.z linux. Teraz
zmień bieżący katalog na linux i przejrzyj plik
README. Znajdziesz tam sekcję o nazwie INSTALLING the
kernel. Przeczytaj ją uważnie i wypełnij wszystkie polecenia,
o których tam mowa.
Jeśli ściągnąłeś wersję .bz2 i masz program bzip2 (na jego
temat można przeczytać pod adresem
www.muraroa.demon.co.uk/), to zrób tak:
bzcat2 linux-x.y.z.tar.bz2 | tar xvf -
UWAGA: Niektóre z uwag zawartych tutaj są podobne do tych z pliku
Linusa README.
Polecenie make config wydane w katalogu
/usr/src/linux uruchamia skrypt konfiguracyjny, który
zadaje ci wiele pytań. Wymaga on zainstalowanego shella, więc
sprawdź czy go masz. (/bin/bash, /bin/sh lub $BASH)
W wersjach 2.0.x i nowszych istnieją jeszcze dwa sposoby na
konfigurację: make menuconfig jak sama nazwa wskazuje
jest to konfiguracja za pomocą menu tekstowego. Można też wydać
polecenie make xconfig co spowoduje uruchomienie miłej
konfiguracji pod Xwindow. Pierwszy sposób wymaga zainstalowanej
biblioteki (n)curses. Ta druga wymaga zainstalowanej biblioteki
Tcl/Tk. Obie są dostarczane wraz ze standardowymi dystrybucjami.
Te sposoby mają podstawową zaletę: jeśli się pomylisz, to łatwo
jest wrócić i poprawić błąd.
Można teraz odpowiadać na kolejne pytania ukazujące się na
ekranie. Odpowiada się zwykle literami "y" - tak i "n" - nie. Przy
sterownikach jest jeszcze dodatkowa opcja "m" - oznacza
skonfigurowanie go jako ładowalny moduł. Bardziej komicznym
sposobem wyjaśnienia tej litery jest "może". Niektóre z bardziej
oczywistych czy nie-krytycznych opcji nie zostały tutaj opisane;
zobacz w sekcji "Inne opcje konfiguracji." W make menuconfig
spacją zaznacza się daną opcję.
W wersjach 2.0.x i nowszych jest polecenie "?", która umożliwia wyświetlenie krótkiej pomocy na temat bieżącej opcji. Informacja ta jest prawdopodobnie najświeższa. Oto lista ważniejszych opcji, do jakiej hierarchii należą i krótki opis.
Pytanie to dotyczy emulacji koprocesora przez jądro. Jeśli nie masz koprocesora matematycznego (masz czysty 386 albo 486SX), musisz tu odpowiedzieć "y". Jeśli masz koprocesor a odpowiesz "y", nie martw się -- koprocesor będzie użyty, a emulacja ignorowana. W połowie przypadków w tej chwili odpowiedzią będzie nie, ale nie martw się jeśli przypadkowo odpowiesz tak; jeśli nie trzeba, to nie będzie to użyte.
Przypuszczalnie potrzebujesz tej obsługi. Opcja ta oznacza, że jądro będzie obsługiwać standardowe dyski do komputerów PC, które są w posiadaniu większości ludzi. Sterownik ten nie zawiera obsługi dla dysków SCSI, pytanie o to będzie później w konfiguracji.
Zostaniesz zapytany następnie o sterowniki "old disk-only" i "new IDE". Wybierz jeden z nich; główna różnica pomiędzy nimi to taka, że stary sterownik obsługuje tylko dwa dyski na pojedynczym interfejsie, a nowy obsługuje drugi interfejs i napędy IDE/ATAPI CD-ROM. Nowy sterownik jest o około 4 kB większy od starego i ma być lepszy. To znaczy, że pomijając mniejszą ilość błędów może działać bardziej wydajnie, szczególnie jeśli masz dysk typu EIDE.
Ogólnie powinieneś odpowiedzieć "y" jeśli twój komputer jest w sieci takiej jak Internet, albo jeśli chcesz używać protokołów SLIP czy PPP, aby mieć dostęp do Internetu. Aczkolwiek wiele pakietów (np. Xwindows) wymaga obsługi sieci nawet jeśli twój komputer nie jest podłączony do żadnej sieci; powinieneś tu odpowiedzieć "y". Później, zostaniesz zapytany czy chcesz obsługę protokołu TCP/IP; znowu, odpowiedz "y" jeśli nie jesteś absolutnie pewien.
Jedną z najlepszych definicji IPC (InterProcess Communication - Komunikacja Pomiędzy Procesami) znajduje się w glosariuszu w książce o Perlu. Nic więc dziwnego, że niektórzy programiści piszący w Perlu wykorzystują go do komunikacji między procesami, tak samo jak wiele innych pakietów (DOOM - z tych najbardziej znanych ;) ), więc odpowiedź "n" nie jest mądrym wyborem, o ile wiesz dokładnie co robisz.
Tradycyjnie, to wkompilowywało pewne optymalizacje dla konkretnego procesora; jądra działały dobrze także na inncyh procesoarch, ale były one troche większe. W nowszych wersjach się już tego nie stosuje i powinieneś odpowiedzieć na jaki procesor rzeczywiście kompilujesz jądro. Jądro skompilowane na 386 będzie działać na wszystkich procesorach.
Jeśli masz urządzenia SCSI odpowiedz "y". Zostaniesz następnie zapytany o dalsze informacje, jak np.: obsługa CD-ROM-u, dysków i twojego adaptera. Zajrzyj do SCSI-HOWTO po więcej szczegółów.
Jeśli masz kartę sieciową, albo chciałbyś używać protokołów SLIP, PPP, albo kontrolera portu równoległego aby połączyć się z Internetem odpowiedz "y". Konfigurator spyta cię następnie o typ karty i rodzaj protokołu.
Skrypt konfiguracyjny pyta cię następnie o to, jakie systemy plików chcesz obsługiwać:
Standard (minix) - Nowsze dystrybucje nie tworzą tego systemu
plików, a wielu ludzi go nie używa, ale jednak użycie go mogłoby
być dobrym pomysłem, ponieważ przydaje się on do odczytu dyskietek,
dla których system ten jest mniej bolesny niż ext2.
Second extended - To jest standardowy system plików Linuxa. Prawie
na pewno masz jeden z nich i musisz odpowiedzieć y.
msdos - Jeśli chcesz używać swej partycji dos-owej, albo montować dyskietki sformatowane pod ten system, odpowiedz "y".
Dostępne są jeszcze różne inne systemy plików z innych systemów operacyjnych.
/proc - (Pomysł jak mniemam z laboratorium Bella). Na
dysku nie tworzy się systemu plików proc. To jest system
plików, który służy do porozumiewania się z jądrem i procesami.
Wiele programów wyświetlających procesy, jak np. ps używa
tego systemu plików. Spróbuj czasami wykonać polecenie cat
/proc/meminfo albo cat /proc/devices.
Niektóre powłoki (w szczególności rc) używają /proc/self/fd
(znane jako /dev/fd na innych systemach) do funkcji I/O.
Powinieneś prawie na pewno odpowiedzieć tutaj "y". Wiele ważnych
narzędzi do Linux-a zależy od tego systemu plików.
NFS - Jeśli twój komputer jest w sieci i chcesz używać systemów plików, które znajdują się na innych systemach z NFS, odpowiedz "y".
ISO9660 - Ten system plików jest na przeważającej ilości CD-ROM-ów. Jeśli więc chcesz używać CD-ROM-u odpowiedz "y".
No dobra, napisz mount. Powinno się wyświetlić coś jak:
blah# mount
/dev/hda1 on / type ext2 (defaults)
/dev/hda3 on /usr type ext2 (defaults)
none on /proc type proc (defaults)
/dev/fd0 on /mnt type msdos (defaults)
Spójrz na każdą linijkę; słowo obok type jest typem
systemu plików. W tym przypadku / i /usr są typu second extended,
używany jest także proc i jest także zamontowana dyskietka
z systemem plików msdos (tfu!).
Możesz spróbować też cat /proc/filesystems jeśli masz
system proc. Wyświetli ci to systemy plików wkompilowane
w aktulanie używane jądro.
Konfiguracja rzadko używanych i nie krytycznych systemów plików może powodować niepotrzebne powiększanie się jądra; poczytaj sekcję o modułach jak tego uniknąć i sekcję "Pułapki", aby dowiedzieć się dlaczego powiększające się jądro nie jest pożądane.
Tutaj dołączasz sterowniki dla drukarki (równoległej, znaczy się), myszy szeregowej, myszy PS/2 (wiele Notebooków używa protokołu PS/2 dla swoich wbudowanych myszy), niektóre sterowniki do taśm, i inne tego typu "znakowe" urządzenia. Odpowiedz "y" kiedy znajdziesz urządzenie, którego używasz.
UWAGA: gpm to program, który pozwala na użycie myszy poza Xwindow i na kopiowanie tekstu pomiędzy wirtualnymi konsolami. Jest to całkiem przyjemne jeśli masz zwykłą myszkę szeregową, ponieważ koegzystuje ona z Xwindows, ale musisz uciekać się do specjalnych sztuczek dla innych.
Jeśli czujesz wielką potrzebę usłyszenia dźwięków wydobywających się z tej maszynerii to odpowiedz "y" i napisz wszystko co wiesz na temat szczegółów twojej karty dźwiękowej i skompiluje sterownik. (Uwaga o konfiguracji kart dźwiękowych: jeśli zapyta cię czy chcesz zainstalować pełną wersję sterownika, możesz odpowiedzieć "n" i zaoszczędzić trochę pamięci wybierając tylko to co jest ci potrzebne.)
Jeśli myślisz poważnie o karcie dźwiękowej, to zajrzyj na dwie strony darmowych sterowników:
Nie wszystkie opcje konfiguracyjne są tu wymienione ponieważ
zmieniają się zbyt często lub są oczywiste (na przykład: obsługa
3Com 3C509). Jest całkiem spora lista wszystkich opcji wraz ze
sposobem umieszczenia jej w skrypcie Configure. Zajmuje się tą
listą Axel Boldt (
boldt@math.ucsb.edu). Można go także zobaczyć jako jeden
duży plik w dystrybucji jądra Documentation/Configure.help
od wersji 2.0.
[Od tłumacza] Plik ten dla chyba dwóch wersji jądra jest przetłumaczony na język Polski. Zajrzyj pod adres www.jtz.org.pl/inne-polskie.html
Wzięte z pliku README napisanego przez Linusa: opcja "kernel hacking" daje w rezultacie większe i wolniejsze jądro, może nawet uczynić je mniej stabilnym, przez konfigurowanie niektórych procedur, tak aby aktywnie próbowały łamać złe algorytmy i żeby można było znaleźć problemy jądra. (kmalloc()). Tak więc powinieneś odpowiedzieć tutaj "n" jeśli chcesz mieć normalnie działające i stabilne jądro.
Jak już skończysz konfigurację pojawi
się na ekranie wiadomość, że jądro zostało skonfigurowane i że
należy sprawdzić top-level Makefile dla dodatkowej
konfiguracji.
Ten top-level Makefile to plik o nazwie Makefile w katalogu
/usr/src/linux. Zajrzyj tam. Przypuszczalnie nie będziesz
tam nic zmieniał, ale spojrzeć nie boli :). Jak już zainstalujesz
nowe jądro możesz zmienić jego opcje przy pomocy narzędzia
rdev. Jeśli czujesz się zagubiony patrząc na ten plik, to
nie przejmuj się nim.
Kiedy skrypt konfiguracyjny się skończy każe ci napisać make
dep i (przypuszczalnie) make clean. Tak więc
zaczynamy od make dep. Jest to pewne zabezpieczenie się,
które sprawdza różne zależności, jak na przykład: czy pliki
nagłówkowe są na swoich miejscach. Nie zajmuje to wiele czasu, no
chyba, że twój komputer jest naprawdę wolny.
W starszych wersjach powinieneś jeszcze wydać polecenie make
clean. To usuwa pozostałości po starej kompilacji jądra
(pliki objektowe itp). Nie zapomnij tego kroku !!!
Po czyszczeniu i sprawdzeniu zależności możesz wpisać make bzImage
lub make bzdisk (to jest ta część, która zabiera tyle
czasu). make bzImage skompiluje jądro i zostawi je w pliku
/usr/src/linux/arch/i386/boot/bzImage wśród innych rzeczy.
To jest nowe skompresowane jądro. make bzdisk robi to samo,
z tą różnicą, że umieszcza plik bzImage na dyskietce w
stacji A:, którą mam nadzieję włożysz na czas do stacji :). (ten
czas to sam koniec kompilacji, ale na wszelki wypadek radzę włożyć
od razu, bo potem można zapomnieć)
make bzdisk to dobry sposób na testowanie nowego jądra;
jeśli coś pójdzie nie tak, po prostu wyjmujesz dyskietkę ze stacji,
resetujesz i po krzyku. Może to być także pomocne jeśli
przypadkowo usuniesz jądro z dysku. (radzę uważać na to co się robi
w katalogu głównym a szczególnie w katalogu /boot). Możesz
jej także użyć do instalacji innych systemów, ponieważ wystarczy
przegrać zawartość tej dyskietki na inną.
Wszystkie, nawet te w połowie sensowne, jądra są skompresowane, z powodu literek "bz" na początku. Skompresowane jądro odkompresowuje się automatycznie w czasie wykonywania.
W starszych jądrach nie ma opcji bzImage. Było to po prostu
zImage. Opcja ta jest wciąż dostępna, jednak biorąc pod uwagę
obecne rozmiary jądra nie poleca się tego sposobu kompresji.
make mrproper spowoduje dokładniejsze wyczyszczenie.
Czasem jest to potrzebne; możesz to robić przy instalacji
każdej łaty (patch). make mrproper skasuje także twój
plik z bieżącą konfiguracją, więc możesz sobie zrobić kopię
tego pliku (.config).
make oldconfig spróbuje skonfigurować jądro na podstawie
starego pliku konfiguracyjnego; przejdzie za ciebie przez proces
konfiguracji (make config). Jeśli jeszcze nigdy przedtem nie
kompilowałeś jądra lub nie masz starego pliku konfiguracyjnego
wtedy przypuszczalnie nie powinieneś tego robić, bo będziesz
chciał zmienić konfigurację domyślną.
Przeczytaj sekcję o modułach na temat szczegółów dotyczących
make modules.
Jeśli masz już nowe jądra i wydaje ci się, że ono działa tak jak
chciałeś, czas aby je zainstalować. Większość ludzi używa do tego
celu LILO (Linux Loader). make bzlilo zainstaluje jądro,
uruchomi lilo, aby odświeżyć informacje i przygotuje wszystko, aby
zresetować i załadować nowe jądro. ALE TYLKO w przypadku,
gdy LILO jest skonfigurowane następująco:
jądro to /vmlinuz, lilo jest w /sbin, a twój
plik konfiguracyjny od lilo to /etc/lilo.conf i zgadza
się z tym co jest powyżej.
W innym przypadku musisz użyć bezpośrednio polecenia lilo.
Jest to pakiet całkiem prosty do zainstalowania i używania, ale ma
tendencję do załamywania ludzi swoim plikiem konfiguracyjnym.
Zajrzyj do pliku /etc/lilo/config - w starszych wersjach;
lub /etc/lilo.conf - w nowszych wersjach, i sprawdź
bieżące ustawienia. Plik ten wygląda tak:
image = /vmlinuz
label = Linux
root = /dev/hda1
...
image = odnosi się do aktualnej wersji zainstalowanego
jądra. Większość używa nazwy /vmlinuz. Ale równie dobrze
może to być nazwa xxx, jądro, czy pliczek (nie jestem pewien co
do polskich liter, ale zawsze można poeksperymentować :) )
label = używane jest przez LILO, aby dowiedzieć się jaki
system lub jądro załadować, a root = jest katalogiem
głównym danego systemu. Zrób kopię jądra, którego teraz używasz i
skopiuj nowo zrobione jądro na miejsce starego (czyli napisz
cp bzImage /vmlinuz jeśli używasz nazwy vmlinuz i jesteś w
katalogu /usr/src/linux/arch/i386/boot. Potem uruchom
LILO - w nowszych wersjach po prostu uruchamiasz lilo; w
starszych może będziesz musiał uruchomić /etc/lilo/install
albo nawet /etc/lilo/lilo -C /etc/lilo/config.
Jeśli chcesz wiedzieć więcej na temat konfiguracji LILO, albo nie masz LILO, zdobądź najnowszą wersję i poczytaj dokumentację.
Aby załadować jedną ze starszych wersji jądra, które mam nadzieję
zachowałeś :) skopiuj linie od image = xxx w pliku
konfiguracyjnym LILO na dół pliku, zmień xxx na nazwę twojego
zachowanego pliku (wraz z pełną ścieżką). Zmień label = zzz
na np. label = old-kernel i uruchom ponownie lilo.
Możesz też wstawić linię delay = x, gdzie x jest ilością
dziesiętnych części sekundy, do pliku konfiguracyjnego LILO, aby
zatrzymać ładowanie na określoną ilość sekund i przerwać je np.
klawiszem SHIFT, a potem wpisać nazwę którą nadałeś starszej
wersji jądra (tę label = z pliku konfiguracyjnego LILO, a
nie nazwę pliku jądra) w razie gdyby stało się coś nieprzyjemnego.
Pakiety, które pozwalają na odnowienie jądra to łaty. Na przykład:
jeśli masz wersję 1.1.45 i znajdziesz plik o nazwie patch46.gz
to znaczy, że możesz odnowić swoje jądro do wersji 1.1.46. Możesz
zrobić kopię źródeł, które masz (make clean a potem
cd /usr/src; tar zcvf old-kernel.tar.gz linux)
Tak więc kontynuując powyższy przykład załóżmy, że masz plik
patch46.gz w katalogu /usr/src. Bedąc w katalogu
/usr/src wydaj polecenie zcat pacth46.gz | patch -p0
albo patch -p0 < patch46 jeśli łata nie jest
skompresowana. Zobaczysz teraz trochę ścieżek i nazw plików
oraz komunikatów przelatujących przez ekran, o tym co się udało a co
nie. Wszystko to przelatuje zbyt szybko, żeby nadążyć z
czytaniem, także właściwie nie wiesz czy się udało czy nie. Możesz
użyć parametru -s do polecenia patch, aby
poinformować je, żeby wyświetlało tylko komunikaty o błędach. Aby
zobaczyć czy coś poszło nie tak, poszukaj plików z rozszerzeniem
.rej w katalogu /usr/src/linux. Niektóre wersje
patch (starsze wersje, które mogły być skompilowane na gorszym
systemie plików) zostawiają błędy w plikach z rozszerzeniem
#. Możesz użyć polecenia find, aby znaleźć
te pliki:
cd /usr/src/linux; find ./ -name '*.rej' -print
Polecenie to wyświetli wszystkie pliki z rozszerzeniem rej znajdujące się w bieżącym katalogu i jego podkatalogach.
Jeśli wszystko poszło dobrze, wydaj teraz po kolei polecenia
make clean, make config i make dep tak jak opisano w
sekcjach 3 i 4.
Do polecenia patch jest trochę opcji. Jak już wspomniałem,
patch -s spowoduje wyświetlenie na ekran tylko wiadomości
o błędach. Jeśli trzymasz źródła w innym katalogu niż
/usr/src/linux, polecenie patch -p1 wydane w tym
katalogu, gdzie trzymasz źródła zrobi wszystko bez błędów. Inne
opcje polcenia patch są dobrze opisane w podręczniku "man".
(Uwaga: ta sekcja odnosi się w głównej mierze do starszych wersji jądra.)
Najczęstszym problemem było to, że kiedy polecenie patch
modyfikowało plik config.in nie wyglądał on tak jak
powinien, bo zmodyfikowałeś go, aby pasował do twojego komputera.
Zostało to już poprawione, ale w starszych wersjach błąd ten
pozostał. Aby to naprawić, przeczytaj plik config.in.rej
i zobacz co pozostało z oryginalnej łaty. Zmiany są zwykle
zaznaczane znakami + i - na początku linii. Spójrz na linie
otaczające tę zaznaczoną i przypomnij sobie, czy były one
ustawione na tak, czy na nie. Teraz w pliku config.in
zmień "y" na "n" i "n" na "y" tam gdzie trzeba. Wydaj polecenie
patch -p0 < config.in.rej a jeśli poinformuje cię, że
się powiodło, wtedy możesz kontynuować konfigurację i kompilację.
Plik config.in.rej pozostanie, ale możesz go skasować.
Jeśli odkryjesz dalsze problemy, mogłeś zainstalować jakąś łatę
nie w kolejności. Jeśli na ekranie pojawi się taka wiadomość:
previously applied patch detected: Assume -R? oznacza to,
że przypuszczalnie próbujesz nałożyć łatę o wersji mniejszej niż
źródła twojego jądra. Jeśli odpowiesz "y", polecenie patch
spróbuje zdegradować twoją wersję, i najprzypuszcalnie się to nie
powiedzie, przez co będziesz musiał zdobyć całkiem nowe źródła.
(co w sumie wcale nie jest takim złym pomysłem).
Aby odinstalować jakąś łatę użyj patch -R na oryginalnej.
Jak już się wszystko tak pomiesza, że nie będziesz mógł dojść do ładu, to najlepszym sposobem jest zdobyć nowe źródła jądra i zacząć od nowa.
Po zaledwie kilku łatach pliki .orig zaczynają niebezpiecznie
rosnąć. Na przykład: usunięcie plików .orig z wersji 1.1.51, która
była ostatnio czyszczona w wersji 1.1.48 spowodowało zwolnienie
ponad 500 kB dysku.
find . -name '*.orig' -exec rm -f {} ';'
Polecenie to spowoduje usunięcie wszystkich plików .orig z bieżącego katalogu i jego podkatalogów.
Wersje patch, które używają plików .# zamiast plików .rej, używają tyldy (~) zamiast plików .orig.
Są lepsze sposoby pozbycia się plików .orig, które zależą od
polecenia GNU xargs:
find . -name '*.orig' | xargs rm
lub metoda całkiem bezpieczna ale trochę "głośna" (dużo komunikatówna ekranie):
find . -name '*.orig' -print0 | xargs --null rm --
Są jeszcze inne łaty (tzw. niestandardowe), niż te które dystrybuuje Linus. Jeśli ich użyjesz łaty Linusa mogą nie działać i będziesz musiał je albo odinstalować, dopasować źródła albo łatę, zainstalować nowe źródła, albo jakaś kombinacja tego. Może to być trochę frustrujące, więc jeśli nie chcesz grzebać w źródłach (z możliwością narobienia niezłego bajzlu), odinstaluj niestandardowe wersje łat zanim zainstalujesz łatę Linusa, albo po prostu zainstaluj nowe źródła. Wtedy możesz zobaczyć czy łaty niestandardowe wciąż działają. Jeśli nie to albo utknąłeś ze starym jądrem i będziesz próbował zmusić jakoś źródło albo łatę, żeby zaczęła działać, albo będziesz czekał (pewnie błagał) o nową łatę.
Jak pospolite są te niestandardowe łaty?
Przypuszczalnie o nich usłyszysz. Ja używałem łaty "noblink" na
moich wirtualnych konsolach, bo nienawidzę mrugającego kursora. Ta
łata jest (a przynajmniej była) często odnawiana dla nowszych
wersji jądra. Z większością nowych sterowników jako ładowalne
moduły, chociaż częstotliwość niestandardowych łat znacznie spada.
Jądro Linux-a ma wiele zalet, które nie znajdują się w źródłach. Są one rozprowadzane jako osobne pakiety. Niektóre z tych najbardziej popularnych są tu wymienione.
Konsola Linux-owa ma chyba więcej zalet niż na to zasługuje. Pomiędzy nimi znajdują się takie jak: zmiana czcionek, zmiana układu klawiszy, zmiana trybów wyświetlania (w nowszych wersjach). Pakiet kbd to programy, które pozwalają użytkownikowi na robienie tego wszystkiego plus wiele czcionek i układów klawiatur dla prawie wszystkich klawiatur i jest on dostępny z tego samego miejsca, gdzie znajdują się źródła jądra.
Rik Faith (
faith@cs.unc.edu ) złożył razem obszerną
kolekcję narzędzi do Linux-a, które dziwnym trafem nazywają się
util-linux. Obecnie zajmuje się nimi Andries Brouwer
(
util-linux@math.uio.no ). Dostępne są one poprzez
anonimowe ftp z
ftp.icm.edu.pl w katalogu /pub/Linux/sunsite/system/misc.
Zawiera ona takie narzędzia jak: setterm, rdev, czy
ctrlaltdel, które są związane z jądrem. Jak Rik twierdzi,
Nie instaluj tego zestawu bez zastanowienia. Nie trzeba
instalować całej zawartości pakietu, mogłoby to nawet spowodować
poważne problemy.
Jak więszkość pakietów, ten był łatą i dodatkiem dla jądra. Łaty zostały z czasem związane na stałe z jądrem, a ten program stał się osobnym pakietem. W rękach niedoświadczonego użytkownika jest on bardzo niebezpieczny. Więc nie używaj go jeśli nie wiesz co robisz.
gpm - general purpose mouse czyli, w dość wolnym tłumaczeniu :), mysz o ogólnym zastosowaniu. Program ten pozwala na przenoszenie zawartośći pomiędzy wirtualnymi konsolami i inne pożyteczne rzeczy jak np. tłumaczenie protokołów pomiędzy różnymi typami myszek, używanie wielu myszek...
Jeśli twoje nowe jądro zaczyna robić dziwne rzeczy po rutynowym
odnowieniu, przypuszczalnie zapomniałeś wydać polecenie make clean
przed kompilacją nowego jądra. Oznaki takie to może być cokolwiek
od zawieszania się systemu bez powodu, przez dziwne problemy z
funkcajmi I/O, do ślimaczej szybkości. Nie zapomnij także wydać
polecenia make dep.
Jeśli twoje jadro zżera ogromną ilość pamięci, jest zbyt duże, albo po prostu kompiluje się w nieskończoność nawet jeśli masz swoje nowiutkie Quadbazillium-III/4400, najprawdopodobniej skonfigurowałeś niepotrzebnie pełno sterowników. Jeśli czegoś nie używasz, to nie konfiguruj, bo to naprawdę zabiera niepotrzebnie pamięć. Najbardziej oczywistym symptomem przy zbyt dużym jądrze jest bardzo częste swapowanie (jeśli twój dysk ciągle rzęzi, a nie jest jednym z tych starych orłów Fujitsu, które brzmią jak lądujący odrzutowiec, przejrzyj konfigurację swojego jądra).
Możesz dowiedzieć się ile pamięci zabiera twoje jądro odejmując
wartość total mem z pliku /proc/meminfo albo z
polecenia free od całkowitej ilości pamięci w twoim
komputerze.
Opcje które musisz włączyć na PC-cie to: Najpierw w sekcji "General Setup" włącz "Parallel port support" oraz "PC-style hardware". Następnie w sekcji "Character devices" włącz "Parallel printer support".
No i potem zostają nazwy. W wersji 2.2 zastosowano inne nazwy niż w
starszych wersjach. Powodem tego jest, to że w starym jądrze miałeś
lp1 a teraz jest to lp0. Spójrz do dmesg albo w
katalogu /var/log/.
Jeśli się rzeczywiście nie kompiluje, to pewnie jakaś łata się nie zainstalowała poprawnie. Twoja wersja "gcc" może także być nie w porządku. Albo pliki nagłówkowe są skopane. Upewnij się także czy symboliczne dołączenie, o których Linus pisze w README, są poprawnie zrobione. W ogólności jeśli standardowe jądro się nie kompiluje, to coś poważnego jest z systemem i niezbędna jest ponowna instalacja niektórych narzędzi.
W niektórych przypadkach "gcc" może się wysypać z powodu
problemów sprzętowych. Komunikaty w tym przypadku to: xxx
exited with signal 15 i w ogólności są one bardzo tajemnicze.
Pewnie bym o tym nie wspominał, gdyby nie to, że mi się to
zdażyło - miałem kiedyś wadliwą pamięć cache a kompilator wtedy
hulał sobie po pamięci gdzie chciał. Najpierw spróbuj
przeinstalwać gcc. Podejrzenia na sprzęt rzucaj dopiero jeśli
jądro się kompiluje przy wyłączonym zewnętrznym cache'u, albo przy
zmniejszonej ilości pamięci RAM itp.
Z reguły ludzi to trochę denerwuje jak im powiesz, że mają popsuty sprzęt. Cóż, ja tego nie zmyślam. Jest FAQ na ten temat - www.bitwizard.nl/sig11/.
Albo nie uruchomiłeś lilo po skopiowaniu jądra na miejsce
starego, albo źle skonfigurowałeś. Najczęściej spotykanym
problemem jest nie wkompilowanie obsługi twoejgo dysku lub systemu
ext2. Kiedyś miałem problem z plikiem konfiguracyjnym LILO; było
tam boot = /dev/hda1 a powinno być boot =
/dev/hda. Na początku to może byc naprawdę denerwujące, ale
potem jak już masz dobry plik konfiguracyjny nie powinieneś go
zmieniać.
Oooj! Najlepszą rzeczą jaką można zrobić to załadować system z
dyskietki lub CDROMu (no trzeba je oczywiście mieć :) ) i przygotować nową
dyskietkę startującą (np. make zdisk). Musisz wiedzieć,
gdzie jest twój główny system plików i jakiego jest typu. (ext2,
minix). W przykładzie poniżej musisz także wiedzieć gdzie i na
jakim systemie jest /usr/src/linux i gdzie jest zwykle
zamontowany.
W następującym przykładzie "/" to /dev/hda1, a partycja, na której
znajduje się katalog linux to /dev/hda3 normalnie montowana na
/usr. Działające jądro jest w katalogu
/usr/src/linux/arch/i386/boot i nazywa się bzImage.
Pomysł polega na tym, że jeśli masz działające bzImage, można tego użyć dla nowej dyskietki. Inna alternatywa, która może, ale nie musi działać (to zależy jak bardzo namieszałeś) opisana jest za tym przykładem.
Najpierw, załaduj system z dyskietki, którą akurat masz i zamontuj system plików, na którym znajduje się działające jądro:
mkdir /mnt mount -t ext2 /dev/hda3 /mnt
Jeśli pojawi się komunikat, że katalog /mnt już jest - zignoruj go. Przy mount na pewno pojawi się komunikat ostrzegający, że montujesz niesprawdzony system plików - zignoruj go. Zmień katalog na ten, w którym znajduje się działające jądro (pamiętaj, że teraz masz dysk w katalogu /mnt). Umieść sformatowaną dyskietkę w stacji A: (nie dyskietkę, z której startowałeś !!!), przerzuć jądro na dyskietkę i skonfiguruj je dla twojego głównego systemu plików:
cd /mnt/src/linux/arch/i386/boot dd if=bzImage of=/dev/fd0 rdev /dev/fd0 /dev/hda1
Zmień katalog na / (cd /) i odmontuj katalog /mnt (umount /mnt). Powinieneś być teraz w stanie załadować system tak jak normalnie z tej dyskietki. Nie zapomnij uruchomić lilo po restarcie (czy co tam źle zrobiłeś).
Jak już wspomniałem jest jeszcze inna metoda. Jeśli masz kopię działającego jądra, możesz jej użyć dla zrobienia dyskietki startowej. Weźmy znów powyższe warunki i załóżmy, że działająca kopia to /vmlinuz. Zrób to samo co powyżej z tymi zmianami: /dev/hda3 zmień na /dev/hda1/ (gł. system plików) /mnt/src/linux na /mnt if=bzImage na if=vmlinuz
------------------------------------------------------------------
Od tłumacza:
Szczerze powiem/napiszę, że nie wiem po co ten człowiek tak komplikuje sprawę. Podam tu sposób, ktorego ja używam:
Najpierw sprawdź czy masz takie linijki na początku
pliku /etc/lilo.conf:
prompt timeout=50
Jeśli nie to je dopisz.
W swoim pliku /etc/lilo.conf mam zawsze dwie sekcje:
image=/boot/vmlinuz
label=linux
root=/dev/hda1
read-only
image=/boot/vmlinuz-old
label=linux-old
root=/dev/hda1
read-only
Ja nazywam jądra z wersją na końcu (/vmlinuz-2.0.18) i robię
symboliczne dołączenie ln -s /vmlinuz-2.0.18 /vmlinuz.
Jeśli kompiluję tę samą wersję jądra, to przed kompilacją/instalacją
ZAWSZE robię kopię jądra, które mi działa (powiedzmy
cp /vmlinuz-2.0.18 /vmlinuz.2.0.18.old);
Jak już skompiluję jądro to kopiuje je na /vmlinuz-wersja, przedtem
KOPIA !!! - tylko jeśli kompilujemy tę samą wersję jądra, którą
już używamy, bo nowsza wersja będzie miała inny numer na końcu. Po
skopiowaniu zmieniamy dołączenie symboliczne (jeśli instalujemy
nową wersję) - rm /vmlinuz; ln -s /vmlinuz-nowa_wersja /vmlinuz;
oraz ln -s /vmlinuz-2.0.18.old /vmlinuz-old;
potem uruchamiamy lilo i restartujemy komputer. Jeśli
nowe jądro nie działa, to startujemy stare jądro (wpisujemy po
pojawieniu się boot: lub LILO: na ekranie linux-old) i
po wciśnięciu ENETERa mamy znowu działający system.
Jeśli nie działające jądro było w tej samej wersji co poprzednie
(po prostu potrzebowałeś coś dodać), to trzeba uruchomić system w
trybie "single" (linux-old init single), odzyskać stare
moduły ze zrobionej poprzednio kopii katalogu
/lib/modules/x.y.z i zrestartować jeszcze raz system
pamiętając, żeby startować stare jądro. Albo po prostu zmień
odpowiednie dowiązanie /vmlinuz, żeby wskazywało też na starą
wersję jądra (ln -s /vmlinuz-x.y.z.old /vmlinuz) i NIE
ZAPOMNIJ po każdej takiej operacji uruchomić /sbin/lilo.
------------------------------------------------------------------
Używanie LILO z dużymi dyskami (z wiekszą ilością cylindrów niż 1023) może powodować problemy. Przeczytaj mini-HOWTO LILO i Large-Drives, jeśli chcesz znać więcej szczegółów.
No i dobrze, że pisze, bo to może być poważny problem. Poczynając
od wersji jądra 1.0.0 (około 20 kwietnia 1994) program update,
który okresowo zapisuje zawartość bufora na dysk, został zmieniony.
Zdobądź źródła programu "bdflush" (powinieneś je znaleźć tam gdzie
jądro) i skompiluj. Dopóki nie uruchomisz tego programu radzę
używać wersji jądra starszej od 1.0.0 (Czy ta wersja jest jeszcze
do zdobycia !!!?). Instaluje się samo jako update, a po
restarcie nowe jądro nie powinno juz narzekać.
Naprawdę dziwne. Bardzo dużo ludzi ma ten problem. Pewnie dlatego, że jest dużo przypadków, w których to się może dziać.
Jeśli twój CD-ROM to jedyne urządzenie na konkretnym interfejsie IDE, musi być skonfigurowany zworkami jako master lub single. To jest najczęstszy problem.
Creative Labs umieszcza teraz interfejs IDE na swoich kartach dźwiękowych. To prowadzi do ciekawego problemu, bo niektórzy mają tylko jeden interfejs IDE, wielu ma dwa interfejsy IDE na swoich płytach głównych (zwykle na IRQ15), więc najpopularniejszym rozwiązaniem jest uczynić interfejs na karcie dźwiękowej trzecim (IRQ11, a przynajmniej tak mi mówili).
To powoduje w Linux-ie problemy, ponieważ wersja 1.2.x nie obsługuje trzeciego interfejsu IDE (obsługa jest w którejś z wersji 1.3.x, ale pamiętaj - to jest wersja testowa, i nie wykrywa sama tego interfejsu). Aby to obejść masz trzy możliwości:
Jeśli masz już drugi interfejs, to przełóż CD-ROM na ten drugi interfejs jeśli jest wolny. Możesz wtedy wyłączyć interfejs z karty dźwiękowej, co zachowa jedno IRQ.
Jeśli nie masz drugiego interfejsu, ustaw interfejs na karcie dźwiękowej (ale nie ten od dźwięku, tylko IDE) na przerwanie IRQ15 za pomocą zworek. Powinno działać.
Weź nową wersję programu route i wszelkie inne programy,
które się zajmuja rutingiem.
/usr/include/linux/route.h (który właściwie jest plikiem
w /usr/src/linux) sie zmienił.
Weź wersję co najmniej 1.2.1.
Nie używaj jako jądra pliku vmlinux w katalogu
/usr/src/linux stworzonego podczas kompilacji. Plik,
który powinieneś użyć to:
/usr/src/linux/arch/i386/boot/bzImage.
Zmień słowo dumb na linux w pliku /etc/termcap
w sekcji dotyczącej konsoli. Mozliwe też, że będziesz musiał
zrobić terminfo.
Źródła jądra zawierają pewną liczbę plików nagłówkowych (te co się
kończą na .h), do których odwołują się standardowe pliki
nagłówkowe w /usr/include. Przeważnie wygląda to tak:
#include <linux/xxyy.h>
Zwykle w katalogu /usr/include jest symboliczne
dołączenie linux wskazujące na /usr/src/linux/include/linux.
Jeśli dołączenia tego nie ma, albo wskazuje na złe miejsce, to
rzeczywiście większość programów się nie skompiluje. Jeśli
zdecydowałeś, że źródła zajmują za dużo miejsca na dysku i
skasowałeś je, to to jest właśnie twój problem. Razem z tymi
źródłami skasowałeś pliki nagłówkowe. Inny problem to problem z
dostępem do plików: Jeśli twój root ma umask ustawiony tak, że
użytkownicy nie mogą widzieć plików przez niego stworzonych, i
rozpakowałeś źródła bez opcji p (zachowaj oryginalne flagi
dostępu), użytkownicy nie będą mogli użyć kompilatora. Najprościej
naprawić to w ten sposób:
zaloguj się jako root cd /usr/src/linux/ chmod -R go+r include/
Kilka następujących przykładowych poleceń może pomóc tym, którzy zastanawiają się jak zwiększyć pewne programowe ograniczenia wprowadzone przez jądro:
echo 4096 > /proc/sys/kernel/file-max echo 12288 > /proc/sys/kernel/inode-max echo 300 400 500 > /proc/sys/vm/freepages
Wersje jądra 2.0.x i 2.2.x wprowadziły trochę zmian w instalacji.
Plik Documentation/Changes zawiera informacje, które
powinieneś poznać, kiedy uaktualaniasz swoje jądro do którejś z
tych wersji.
Najprzypuszczalniej będziesz musiał odnowić także niektóre
kluczowe pakiety, takie jak: gcc, libc i SysVInit, i może
dostosować kilka plików systemowych. Ale nie panikuj !
Ładowalne moduły jądra mogą zaoszczędzić trochę pamięci i ułatwić konfigurację. Obszar działania modułów urósł już do tego, że zawierają one systemy plików, sterowniki do kart Ethernet, do taśm, do drukarek i wiele innych.
Narzędzia te sa dostępne stamtąd, skąd masz źródła jądra. Nazywają
się modutils-x.y.z.tar.gz; wybierz najwyższą wersję równą,
albo mniejszą od wersji twojego jądra. Rozpakuj poleceniem tar
zxvf modutils-x.y.z. Wejdź do stworzonego katalogu i poczytaj
plik README. Wypełnij dokładnie instrukcje na temat instalacji
(jest ona z reguły bardzo prosta: make install lub coś
podobnego). Powinieneś mieć teraz programy: insmod, rmmod,
ksyms, lsmod, genksyms, modprobe i depmod w katalogu /sbin.
Jeśli chcesz przetestować narzędzia z przykładowym sterownikiem
"hw" w insmod; przejrzyj plik INSTALL w tym
katalogu.
insmod ładuje moduł do uruchomionego jądra. Moduły mają z
reguły roszerzenie .o; przykładowy moduł wspomniany wyżej nazywa
się drv_hello.o, a więc aby go załadować, napisz:
insmod drv_hello.o. Aby zobaczyć jakie moduły są
aktualnie używane przez jądro użyj lsmod. Powinien
wyświetlić coś takiego
blah# lsmod Module: #pages: Usedby: drv_hello 1
drv_hello jest nazwą modułu, używa jednej strony (4kB) pamięci i
żadne inne moduły nie zależą od niego w tej chwili. Aby usunąć ten
moduł z jądra użyj rmmod drv_hello. Zauważ, że
rmmod chce nazwy modułu a nie pliku. Weź ją z polecenia
lsmod. Inne narzędzia modułowe są opisane w podręczniku
man.
Jeśli chodzi o wersję 2.0.30 większość sterowników dostępna jest w
postaci modułów. Aby ich użyć, najpierw upewnij się czy nie
skonfigurowałeś ich jako stałe części jądra. To znaczy: nie
odpowiadaj "y" na pytania ich dotyczące podczas konfiguracji, ale
"m" jeśli jest taka możliwość. Po skompilowaniu jądra napisz
make modules i make modules_install. Pierwsze
polecenie skompiluje wszystkie sterowniki wyspecyfikowane jako
moduły, a drugie zainstaluje je w katalogu /lib/modules/x.y.z,
gdzie x.y.z jest wersją jądra. Po zainstalowaniu tych modułów
wejdź do katalogu /lib/modules/x.y.z i napisz modprobe -a,
jeśli masz ten program.
$lsqb;Od tłumacza] Jeśli kompilujesz jądro o wersji takie
samej jak to które używasz obecnie, to na wszleki wypadek przed
poleceniem make modules_install, zrób w katalogu
/lib/modules/ kopię katalogu o nazwie takiej samej jak wersja
obecnego jądra.
Moduły są szczególnie przydatne do systemów plików albo sterowników
urządzeń, których rzadko używasz. Np. jeśli chcesz użyć dyskietki
msdos, to najpierw piszesz insmod /lib/modules/x.y.z/fs/msdos.o
i używasz tej dyskietki. Po skończeniu piszesz rmmod msdos.
Operacja ta zaoszczędza jakieś 50 kB RAM-u - niby nic ale jak się
uzbiera kilka takich sterowników to docenisz tę zaletę. Co do
systemu plików minix to powinien on być zawsze
wkompilowany w jądro na stałe, w razie użycia dyskietki startowej.
Na dyskietkach jest właśnie minix.
------------------------------------------------------------------
Od tłumacza:
Znowu facet skomplikował sprawę.
Jest narzędzie, które zajmuje się za ciebie ładowaniem i usuwaniem
odpowiednich modułów do i z pamięci. Nazywa się kerneld
czyli kernel daemon. Jeśli użyjesz czegoś co wymaga sterownika w
module, kerneld załaduje za ciebie ten moduł, a potem go wyrzuci jak
już przestaniesz tego używać. Aby go użyć musisz odpowiedzieć na pytanie
konfiguracyjne dotyczące kerneld "Kernel daemon support"
"y". Przedtem jeszcze odpowiedz "y" na pytanie "Modules support"
czy jakoś tak, żeby móc w ogóle używać modułów. Po kompilacji
jądra wszystko idzie tak samo jak opisane powyżej. Jeszcze jedno:
jeśli masz dystrybucję RH to sprawdź czy w pliku
/etc/rc.d/rc.sysinit jest uruchamiany /sbin/kerneld.
Jeśli nie, to sprawdź czy uruchamia się tam program depmod.
jeśli też nie to dopisz te linijki:
/sbin/depmod -a
if [ -x /sbin/kerneld ]; then
/sbin/kerneld
fi
za linijką która wygląda mniej więcej tak:
mount -n -o remount,rw /
Jeśli masz Slackware sprawdź czy w pliku /etc/rc.d/rc.M
jest uruchamiany /sbin/kerneld. Jeśli nie, to sprawdź czy uruchamia
się tam program depmod. Jeśli też nie, to dopisz te linijki
/sbin/depmod -a
if [ -x /sbin/kerneld ]; then
/sbin/kerneld
fi
za linijką która wygląda mniej więcej tak:
mount -n -o remount,rw /
Jeśli masz dystrybucję Debian to:
1) sprawdź czy jest plik /etc/init.d/kerneld, jeśli tak to
2) sprawdź czy w /etc/rcX.d/ jest dowiązanie do tego pliku
(będzie to plik SYYkerneld), jeśli jest, to wszystko jest w
porządku. X - numer runlevel-u który standardowo uruchamiasz.
(sprawdź w pliku /etc/inittab linijkę initdefault)
Jeśli któryś z tych warunków jest niespełniony to:
ad 1) załóż plik /etc/init.d/kerneld o treści:
#!/bin/bash
# source function library
. /etc/rc.d/init.d/functions
case "$1" in
start)
echo -n "Starting kerneld "
if [ -f "/sbin/kerneld" ]; then
/sbin/kerneld
/sbin/depmod -a
fi
touch /var/lock/subsys/kerneld
;;
stop)
echo -n "Shutting down kerneld: "
killproc kerneld
rm -f /var/lock/subsys/kernled
echo
;;
*)
echo "Usage: kerneld {start|stop}"
exit 1
esac
exit 0
ad 2) napisz
cd /etc/rcX.d/
ln -s /etc/init.d/kerneld SYYkerneld
YY musi być numerem przed ładowaniem modułów; najlpiej jak najwcześniej. ------------------------------------------------------------------
Jeśli chciałbyś mieć zapisane w pliku to co działo się podczas
wykonywania poleceń make i patch, możesz przekierować
wyjście tych komend do pliku. Najpierw dowiedz się w jakiej
powłoce pracujesz:
echo $shell
Jeśli jest to /bin/sh albo /bin/bash, wtedy przekierowywanie wyjścia wygląda tak:
polecenie 2>&1 | tee nazwa_pliku_do_zapisania
Jeśli jest to /bin/csh albo /bin/tcsh, to wygląda to tak
polecenie |& tee nazwa_pliku_do_zapisania
Jeśli używasz rc (a raczej nie używasz), wtedy wygląda to tak:
polecenie >[2=1] | tee nazwa_pliku_do_zapisania
Są jeszcze inne metody testowania nowego jądra bez ruszania starego, oprócz tych z dyskietkami. LILO ma możliwość ładowania jądra z jakiegokolwiek miejsca na dysku (jeśli twój dysk ma więcej niż 1023 cylindry [512 MB lub więcej], przeczytaj dokumentację LILO, żeby dowiedzieć się jakie są z tym związane problemy). Tak więc jeśli dodasz takie linie:
image = (tu wstaw katalog, w którym znajduje się nowe jądro)
label = new_kernel
na końcu pliku konfiguracyjnego LILO, możesz wybrać jakie jądro
chcesz ładować, bez ruszania starego jądra (po wykonaniu lilo
oczywiście). Najprostszym sposobem poinformowania LILO, które
jądro chcemy załadować jest wciśnięcie klawisz SHIFT podczas
startu (w momencie kiedy na ekranie pojawi się "LILO"). Wtedy
pojawi się znak zachęty. Wpisując tu new_kernel, lub
nazwę, którą nadałeś w pliku konfiguracyjnym LILO nowemu jądru,
poinformujesz LILO, żeby załadowało nowe jądro.
Jeśli chcesz trzymać kilka różnych źródeł jądra na dysku (to
zabiera DUŻO miejsca - ostrożnie) najprostszym sposobem
jest nazywanie ich linux-wersja_jądra. Musisz wtedy zrobić
symboliczne dołączenie ln -s linux-wersja linux żeby
używać wybranej wersji. Przed zrobieniem takiego dołączenie
upewnij się, że ostatni parametr do "ln" nie jest katalogiem, bo
wtedy nie będzie to to, czego się spodziewałeś.
Russel Nelson (
nelson@crynwr.com ) umieszcza zmiany jakie
zaszły w bieżącej wersji jądra. Są one krótkie i możesz zajrzeć
tam zanim postanowisz odnowić jądro. Są one dostępne poprzez
anonimowe ftp z ftp.emlist.com w katalogu pub/kchanges
lub poprzez WWW -
http://www.crynwr.com/kchanges.
Spis zmian możesz znaleźć także w
ftp.icm.edu.pl w katalogu /pub/Linux/sunsite/kernel/changes.
Autorem i człowiekim opiekującym się tym dokumentem jest Brian Ward bri@cs.uchicago.edu Proszę przysyłać mi wszelkie komentarze, dodatki, poprawki (te są najważniejsze).
Jak chcesz możesz zajrzeć na moją stronę WWW:
<htmlurl url="http://www.math.psu.edu/bri/" name="www.math.psu.edu/bri/">
Pomimo, iż staram się odpowiadać na pocztę kiedy tylko mogę, to musisz pamiętać, że dostaje dużo listów codziennie. Więc odpowiedzenie na twój list może zająć trochę czasu. Szczególnie jeśli wysłałeś mi jakieś pytanie, spróbuj być jak najbardziej dokładny. Jeśli piszesz o niedziałającym sprzęcie (czy coś podobnego) muszę wiedzieć jaka jest konfiguracja tego sprzętu. Jeśli piszesz o błędzie, to nie pisz, że "próbowałem, ale nie działa..." Muszę znać chociaż błąd jaki się pojawił. Chciałbym także wiedzieć jaka była wersja jądra, gcc i libc. Jeśli powiesz mi, że używasz tej-i-tej dystrybucji to mi wiele nie powie. Nie obchodzi mnie to, że zadajesz proste pytania. Kto pyta, nie błądzi! Chciałbym podziękować wszystkim, którzy wspierali mnie podzas pisania tego dokumentu.
Jeśli twoje pytanie nie było związane z jądrem albo jest w jakimś języku, którego nie znam, to mogę nie odpowiedzieć.
Jeśli wysłałeś do mnie list i nie otrzymałeś odpowiedzi w jakimś sensownym czasie (3+ tygodni). To całkiem możliwe, że przypadkowo skasowałem twój list (przepraszam). Napisz jeszcze raz.
Dostaję dużo poczty z pytaniami, które są właściwie problemami sprzętowymi. W porządku, ale pamiętaj, że przecież nie znam wszystkich urządzeń na świecie i nie wiem na ile mogę być pomocny. Osobiście używam maszyn z procesorem AMD, kontrolery SCSI Adaptec i Sybios oraz dyski SCSI IBM.
Wersja -0.1 została napisana 3 października 1994. Dokument ten jest dostępny w formatach: SGML, PostScript, TeX, roff i jako czysty tekst.
Sekcja na temat sztuczek i wskazówek jest jeszcze trochę mała. Mam nadzieję, że się rozrośnie wraz z przybywaniem sugestii. To samo odnosi się do sekcji pakiety dodatkowe. Potrzeba mi więcej informacji na temat śledzenia (debugging) i odzyskiwania po padach systemu.
Dołączona jest mała część README Linusa na temat opcji rozgryzania jądra.(kernel hacking) (Dzięki Ci Linus!)
uc@brian.lunetix.de (Ulrich Callmeier): polecenia patch -s, xargs.
quinlan@yggdrasil.com (Daniel Quinlan): poprawki i dodatki do wielu sekcji.
nat@nataa.fr.eu.org (Nat Makarevitch): mrproper, tar -p i wiele innych
boldt@math.ucsb.edu (Axel Boldt): uzbierany spis opcji konfiguracyjnych jądra dotyczących sieci. Przesłane mi.
lembark@wrkhors.psyber.com (Steve Lembark): sugestie odnośnie wyboru jądra przy starcie.
kbriggs@earwax.pd.uwa.edu.au (Keith Briggs): kilka sugestii i poprawek.
rmcguire@freenet.columbus.oh.us (Ryan McGuire): dodatki na temat "make"
dumas@excalibur.ibp.fr (Eric Dumas): tłumaczenie francuskie
simazaki@ab11.yamanashi.ac.jp (Yasutada Shimazaki): tłumaczenie japońskie
jjamor@lml.ls.fi.upm.es (Juan Jose Amor Iglesias): tłumaczenie hiszpańskie
mva@sbbs.se (Martin Wahlen): tłumaczenie szwedzkie
jzp1218@stud.u-szeged.hu (Zoltan Vamosi): tłumaczenie węgierskie
B.Maruszewski@jtz.org.pl (Bartosz Maruszewski): tłumaczenie polskie
donahue@tiber.nist.gov (Michael J Donahue): korekta literówek, wygrał konkurs o kromkę chleba
rms@gnu.ai.mit.edu (Richard Stallman): pomysł na bezpłatną dokumentację i dystrybucję
dak@Pool.Informatik.RWTH-Aachen.DE (David Kastrup): NFS
esr@snark.thyrsus.com (Eric Raymond): różności.
Ci, którzy przysyłali mi pytania z problemami także byli pomocni.
Dokument chroniony prawami autorskimi © Briana Warda, 1994-1999. Można rozprowadzać kopie tego dokumentu o ile na wszystkich będzie zachowana uwaga o prawach autorskich i to pozwolenie.
Można kopiować i dystrybuwać ten dokument w wersji modyfikowanej pod warunkiem dosłownego kopiowania zakładając, że praca pochodna jest dystrybuowana z takimi samymi prawami jak ten dokument. Tłumaczenia zaliczają się także do wersji modyfikowanych.
Gwarancja: Żadna.
Zalecenia: Dystrybucja komercyjna jest dozwolona. Jednak zaleca się najpierw kontakt z autorem, aby mieć najświeższe dane (możesz mi wysłać kopię tego co chcesz dystrybuować). Tłumacze są także zobowiązani najpierw się skontaktować ze mną. Wersja wydrukowana wygląda o wiele ładniej.
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:
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 /pub/Linux/JTZ/.
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 sie na nią zapisać, to
wyślij list o treści subscribe jtz Imię Nazwisko na adres
majordomo@ippt.gov.pl
Zmiany w tym dokumencie wprowadzone przez tłumacza to:
doc-linux-pl-2002.06.14.orig/html/Keyboard-HOWTO.pl.html 0100664 0001750 0001750 00000203760 06770264140 021311 0 ustar coven coven
Poniższe pakiety zawierają programy odnoszące się do klawiatury lub konsoli:
kbd-0.90.tar.gz zawiera loadkeys, dumpkeys, showkey,
setmetamode, setleds, setfont, showfont, mapscrn,
kbd_mode, chvt, resizecons, disalloc,
getkeycodes, setkeycodes.
util-linux-2.6 zawiera setterm, kbdrate. (Tak, more
w util-linux 2.6 zrzuca core z powodu konfliktu nazw. Zachowaj swoją
starą kopię, albo używaj util-linux-2.5, albo zmień 'savetty' na
'my_savetty' w more.c).
shutils-1.12 zawiera stty.
open-1.4.tgz zawiera open (które powinno się przemianować
na openvt. Patrz też dynamic-vc-1.1.tar.gz).
SVGATextMode-1.6.tar.gz zawiera SVGATextMode, program który
zastępuje stare resizecons
Dystrybucja X zawiera xmodmap, xset, kbd_mode
(patrz też X386keybd(1) co do sytuacji pod XFree86 1.3, oraz
Xserver(1) co do rozszerzenia XKEYBOARD pod X11R6).
termcap-2.0.8.tar.gz zawiera termcap, starą bazę danych właściwości
terminala. ncurses-1.9.9e.tar.gz zawiera bazę termlib która zastępuje
termcap (wiele programów jednak ciągle używa termcap).
Patrz loadkeys(1), setleds(1), setmetamode(1) co do kodów wysyłanych przez różne klawisze i ustawiania diod poza X. Pod X, użyj xmodmap(1).
Patrz setfont(8) co do ładowania czcionek konsoli. Wielu ludzi woli załadować jakąś czcionkę w rodzaju iso01.f16, ponieważ domyślna jest czcionką sprzętową karty graficznej, i często jest to czcionka "Code Page 437", w której brakuje akcentowanych znaków i innych symboli z zestawu Latin-1.
Patrz setterm(1), kbdrate(8) co do właściwości takich jak kolory tła i pisma, wygaszanie ekranu, szybkość powtarzania klawiszy - wszystko poza X. Pod X, patrz xset(1), też co do dźwięku przy naciśnięciu klawisza i głośności dzwonka.
Plik /etc/termcap definiuje Esc-sekwencje dla wielu programów
które odnoszą się do konsoli (lub innego terminala). Bardziej nowoczesna
wersja znajduje się w /usr/lib/terminfo. (Patrz terminfo(5).
Pliki terminfo są kompilowane kompilatorem terminfo
/usr/lib/terminfo/tic, patrz tic(1). Ich zawartość obejrzeć
można używając programu infocmp, patrz infocmp(1). Sekwencje konsoli
linuxowej opisane są w console_codes(4).
Naciskasz klawisz, a kontroler klawiatury wysyła kody skanowe do
sterownika klawiatury jądra. Niektóre klawiatury można programować,
ale przeważnie kody klawiszy odpowiadające klawiszom są stałe.
Sterownik klawiatury jądra przesyła po prostu cokolwiek otrzymuje
do programu aplikacji, gdy ta jest w trybie skanowania kodów,
na przykład podczas działania X. W przeciwnym razie przekłada
on strumień kodów skanowych na kody klawiszy, odpowiadające zdarzeniom
naciśnięcia i zwolnienia klawisza (pojedyncze naciśnięcie klawisza
może wytworzyć do sześciu kodów skanowych).
Kody te [klawiszy] są przesyłane do programu aplikacji gdy znajduje
się on w trybie kodów klawiszy (używane, na przykład, przez
showkey). W przeciwnym razie, owe kody klawiszy porównywane są
z rozkładem klawiatury, i znaleziony tam znak lub ciąg znaków jest
przesyłany do aplikacji, bądź następuje wykonanie opisanej tam
czynności.
(Na przykład, jeśli naciśnie się i zwolni klawisz a, klawiatura
wysyła kody skanowe 0x1e i 0x9e, przekształcane są one na kody klawiszy
30 i 158, a potem przesyłane jako 0141, kod ASCII lub Latin-1 litery 'a';
jeśli naciśnie się i zwolni Delete, klawiatura wysyła kody skanowe
0xe0 0x53 0xe0 0xd3, przekształcane na kody klawiszy 111 i 239, a potem
przesyłane jako czterosymbolowa sekwencja ESC [ 3 ~, wszystko
to zakładając amerykański układ klawiatury jako domyślny (przykładem
kombinacji klawiszy której przypisana jest czynność jest Ctrl-Alt-Del).
Tłumaczenia pomiędzy nieczęstymi kodami skanowymi i klawiszy można
dokonać używając narzędzia setkeycodes - tylko bardzo nieliczni
będą go potrzebować. Tłumaczenia pomiędzy kodami klawiszy i znakami bądź
ciągami znaków lub czynności, to jest układem klawiatury, dokonuje się
przy pomocy narzędzia loadkeys.
Po szczegóły patrz getkeycodes(8), setkeycodes(8), dumpkeys(1), loadkeys(1).
Tam gdzie w powyższym opisie piszę "przesłane do aplikacji", znaczy to rzeczywiście "przesłane do sterownika terminala". To jest, dalsze przetwarzanie jest bardzo podobne do przetwarzania tekstu który odbierany jest na złączu szeregowym. Szczegóły tego przetwarzania ustala program .
I odwrotnie, kiedy wypisujesz coś na konsolę, najpierw podpada to pod
standardowe przetwarzanie tty, a potem dostarczane jest sterownikowi
konsoli. Sterownik konsoli emuluje vt100 i przekłada dane wejściowe
aby rozpoznać Esc-sekwencje vt100 (ruchu kursora, czyszczenia ekranu itp.)
Znaki które nie są częścią Esc-sekwencji są najpierw przetwarzane na
Unicode, używając jednej z czterech tablic odwzorowań jeśli konsola
nie była od początku w trybie UTF-8, potem odnoszone do tabeli opisującej
zależność między wartościami Unicode i pozycjami w czcionce, a uzyskane
ośmio- lub dziewięciobitowe indeksy zapisywane są w pamięci ekranu,
gdzie powodują wyświetlenie kształtów znaków znalezionych w ROMie znakowym
karty graficznej. Do ROMu znakowego można załadować własne czcionki
używając setfont, załadować odpowiadającą tablicę odwzorowań Unicode
używając loadunimap, i załadować tablicę odwzorowań użytkownika
używając mapscrn. Więcej szczegółów poniżej.
Istnieje wiele konsol (zwanych Wirtualnymi Konsolami lub Wirtualnymi Terminalami) które dzielą ten sam ekran. Możesz ich używać jako oddzielnych urządzeń, albo uruchamiając na nich oddzielne sesje logowania, albo po prostu przesyłając na nie jakieś dane wyjściowe z początku czy końca system log. Patrz niżej ("Przełączanie konsol") co do tego jak je ustawiać i przełączać się między nimi.
Na ekranie są śmieci, a wszystkie naciśnięcia klawiszy dają w efekcie znaki do rysowania ramek. Co robić?
Wiele programów przerysuje ekran po naciśnięciu ^L. Może to pomóc
w sytuacji gdy na ekranie znajdują się śmieci z modemu lub nadany
komunikat. Komenda clear czyści ekran.
Komenda reset kasuje sterownik konsoli. Pomaga to w sytuacji
gdy ekran pełen jest dziwnych znaków graficznych, a także jeśli
skurczy się do jednej linii na dole. Jeśli nie masz tej komendy,
bądź jeśli robi ona coś innego, stwórz własną dodając poniższe
dwie linie do pliku wykonywalnego reset w swojej ścieżce:
#!/bin/sh
echo -e \\033c
to jest, masz zamiar posłać dwa znaki: Esc-c, na konsolę.
Dlaczego ekran czasami się miesza i wyświetlane jest 24 lub jedna linia, zamiast zwykłych 25? Cóż, głównym winowajcą jest tutaj TERM=vt100 (albo jakiś inny terminal z 24 liniami) zamiast TERM= linux przy łączeniu się zdalnie. Jeśli stanie się to na /dev/tty2 napisz:
% cat > /dev/tty2
^[c
^D
na jakieś innej WK (gdzie wpisujesz cztery symbole do cat: Esc, c,
Enter, Ctrl-D) i odśwież ekran na /dev/tty2 (możliwie używając ^L), co
przywróci porządek. Oczywiście stałym rozwiązaniem jest używanie
odpowiedniego kawałka termcap lub terminfo.
Dlaczego tak się dzieje że czasami dostajesz masę znaków do rysowania
ramek, np. po wysłaniu na ekran pliku binarnego za pomocą cat ?
Istnieje wiele Esc-sekwencji które zmieniają zestaw znaków, a twój
plik może przypadkiem zawierać niektóre z nich. Esc c to ogólne
przekasowanie, lekarstwo na wszystko, ale jeżeli wiesz dokładnie co
poszło nie tak, możesz to naprawić bez kasowania innych atrybutów
konsoli. Na przykład po
% cat
^N
^D
twój znak zachęty konsoli będzie się cały składał ze znaków do rysowania ramek. Napisz teraz (na ślepo):
% cat
^O
^D
I wszystko jest znów w porządku (wpisałeś trzy symbole do każdego cat:
^N lub ^O, Enter, ^D). Żeby zrozumieć co się dzieje, patrz "Zestawy znaków
konsoli" poniżej.
Jeśli załadowałeś jakiś dziwną czcionkę i chcesz powrócić do domyślnej.
% setfont
wystarczy (założywszy że zachowałeś domyślną czcionke w domyślnym miejscu). Jeśli ta czcionka nie zawiera osadzonej mapy unikodowej (i wypisuje złe symbole dla znaków akcentowanych), wpisz
% loadunimap
Na przykład, jeśli wykonam
% loadkeys de-latin1
będę miał niemiecką klawiaturę, a klawisz na lewo od Enter wypisze mi a-umlaut. Działa to, ponieważ a-umlaut występuje na stronie kodowej 437, i mapa unikodowa jądra jest inicjalizowana dla CP 437, a moja karta graficzna ma wbudowaną czcionkę CP 437. Jeśli teraz załaduję czcionkę ISO-8859-1 używając
% setfont iso01.f16
nadal wszystko działa, bowiem setfont podstawia jądru ważną mapę
unikodową (jeśli do czcionki nie jest dołączona mapa), a bez mapy jądro
odwołuje się bezpośrednio do czcionki, a to jest zupełnie poprawne dla
systemu ISO-8859-1 z czcionką iso01.f16. Ale przywrócenie poprzedniej
czcionki za pomocą
% setfont
daje dużą sigmę zamiast a-umlaut - wszystkie akcentowane znaki są pomieszane, ponieważ ta czcionka również nie ma osadzonej mapy unikodowej. Po wykonaniu
% loadunimap
która ładuje domyślną mapę unikodową (prawidłową dla domyślnej czcionki),
wszystko znów działa jak trzeba. Zwykle loadunimap nie jest
wywoływane bezpośrednio, lecz przez setfont. Tak więc poprzednie
dwie komendy można zastąpić przez
% setfont -u def
Czcionki etiopskie oraz lat1u*.psf mają osadzone tabele znaków Unicode. Większość pozostałych nie ma.
Na starych terminalach wydruk zawierający znaki tabulacji może wymagać opóźnienia, więc musisz napisać
% stty tab3
(patrz stty(1)).
Tryb graficzny zmienić możesz używając resizecons
albo SVGATextMode. To zwykle załatwia aspekt wyświetlania.
Po stronie wprowadzania może istnieć wiele potencjalnie niewłaściwych
rzeczy. Jeśli X, DOOM, albo jakiś inny program używający
trybu "surowego" pada, twoja konsola może ciągle znajdować się w stanie
"surowym" (lub "półsurowym"), i trudno jest wydawać polecenia. Patrz
"Jak wyjść z trybu surowego" poniżej. Jeśli załadowałeś zły układ
klawiatury, to
% loadkeys -d
ładuje ponownie układ domyślny, ale może się okazać że trudno jest napisać "-" ! Alternatywa to:
% loadkeys defkeymap
Czasami nawet litery są poplątane. Warto wiedzieć że istnieją cztery główne typy klawiatur: QWERTY, QWERTZ, AZERTY i Dvoraka. Trzy pierwsze nazwane są od pierwszych sześciu klawiszy i z grubsza odpowiadają krajom angielsko-, niemiecko-, i francuskojęzycznym. W porównaniu z QWERTY, układ QWERTZ zamienia Y i Z. W porównaniu z QWERTY, układ AZERTY zamienia Q i A, W i Z, i ma M na prawo od L, na pozycji średnika. Układ Dvoraka ma zupełnie inny porządek liter.
Coś może być nie w porządku na poziomie niższym niż wie o tym Linux. Istnieją co najmniej dwa różne niższe poziomy (klawiatura i sterownik klawiatury) w których wydać można komendę "wyłącz klawiaturę" sprzętowi za nią odpowiedzialnemu. Klawiatury często można zaprogramować na używanie jednego z trzech różnych zestawów kodów skanowych.
Niemniej nie wiem o żadnym przypadku w którym okazałoby się to jakimś problemem.
Niektóre klawiatury mają wbudowaną zdolność zmiany układów. Stormy
Henderson (stormy@ghost.net) pisze:
"Jeśli twoja klawiatura przeprogramowała się przez przypadek, możesz
(na klawiaturze Gateway AnyKey) nacisnąć control-alt-suspend_macro
by skasować ustawienia klawiszy do stanu normalnego".
Nakłonienie Delete i Backspace do prawidłowej pracy jest wcale trywialne,
zwłaszcza w środowisku mieszanym, gdzie komunikujesz się z konsolą, z X,
bash, emacsem, logujesz się zdalnie itd. Może będziesz musiał
wyedytować kilkanaście plików konfiguracyjnych żeby powiedzieć wszystkim
konkretnym programom czego dokładnie chcesz. Z jednej strony problemem
jest jakie klawisze wypisują jakie kody (i jak te kody przetrawia
kermit czy emacs), a z drugiej strony jakie funkcje są przypisane
jakim klawiszom.
Ludzie często skarżą się "mój klawisz wstecznej spacji nie działa", jak gdyby ten klawisz miał wbudowaną funkcję "skasuj poprzedni znak". Niestety wszystko co ten, albo każdy inny, klawisz robi to wypisanie kodu, i można tylko mieć nadzieję że sterownik tty jądra i wszystkie aplikacje można tak skonfigurować że klawisz wstecznej spacji rzeczywiście działa jako klawisz kasujący poprzedni znak.
Większość unixowych programów otrzymują swoje dane wejściowe tty przez
sterownik tty jądra w trybie "niesurowym", i zwykłe polecenie stty
ustala znak kasujący. Jednak programy takie jak bash, emacs
czy X przetwarzają dane wejściowe własnymi metodami, i muszą być
każde z osobna przekonane do właściwego działania.
% stty erase ^?
Jeśli znak jest kasowany, ale w dziwny sposób, coś jest nie w porządku
z twoimi ustawieniami tty. Jeśli ustawione jest echoprt, kasowane
znaki ujęte są między \ oraz /.
Jeśli echoe nie jest ustawione, znak kasowania jest wypisywany
(co jest rozsądne w przypadku gdy jest to znak drukujący, jak #).
Większość ludzi woli stty echoe -echoprt. Napisanie stty sane
zrobi to i więcej. Napisanie stty -a pokazuje bieżące ustawienia.
Jak to się stało że domyślnie nie były poprawne? Będą, jeżeli użyjesz
poprawnego getty.
Zauważ że wiele programów (jak bash, emacs itd.) mają swoje
własne przypisania klawiszy (zdefiniowane w ~/.inputrc,
~/.emacs itd.) i nie wpływa na nie ustawienie znaku kasowania.
Standardowy unixowy sterownik tty nie rozpoznaje kursora, ani klawiszy
(takich jak klawiszy strzałek) przesuwających bieżącą pozycję, i stąd
nie ma też komendy takiej jak "skasuj bieżący znak". Ale na przykład
możesz nauczyć bash na konsoli rozpoznawania Delete wstawiając
set editing-mode emacs
"\e[3~":delete-char
do ~/.inputrc
Dawniej, sterownik konsoli zwykle wypisywał BS-spacja-BS
(\010\040\010)
gdy otrzymał znak DEL (\177). Dzisiaj, znaki DEL są
ignorowane (tak jak powinny, ponieważ sterownik emuluje vt100). Zdobądź
lepsze getty, tj. takie które nie wypisuje DEL.
Przy pierwszej próbie, komunikujesz się z getty. Przy drugiej
próbie, komunikujesz się z login, innym programem.
Na konsoli lub, ściślej, gdy nie jesteś w trybie (pół)surowym, użyj
% loadkeys mykeys.map
A pod X użyj
% xmodmap mykeys.xmap
[gdzie mykeys.(x)map to oczywiście konkretny plik definicji klawiatury - przyp. tłum.]
Zauważ że (od XFree86-2.1) X czyta linuxowe ustawienia układów klawiatury
przy initializacji Xowego keymap. Chociaż oba systemy nie są w 100%
kompatybilne, oznacza to że w wielu przypadkach używanie xmodmap>
stało się zbędne.
Załóżmy, na przykład, że chcesz żeby twój klawisz Backspace dawał
wsteczną spację (^H, ósemkowe 010), a szary klawisz Delete DEL (ósemkowe
012), dodaj poniższe do etc/rc.local (albo tam gdzie trzymasz swoje
pliki inicjalizacyjne).
/usr/bin/loadkeys << EOF
keycode 14 = BackSpace
keycode 111 = Delete
EOF
Zauważ że zmieni to funkcję tych klawiszy tylko gdy nie używa się modyfikatorów. Domyślnie jądro Linuxa pozwala Ctrl-Backspace wypisywać wsteczną spację - czasami przydaje się to jako zapasowe wyjście, gdy stwierdzisz że możesz wypisywać tylko znaki DEL.
Lewy klawisz Alt jest czasem zwany klawiszem Meta, a domyślnie kombinacje AltL-X są przypisane do symbolu Meta-X. Ale jakim ciągiem znaków jest Meta-X? Ustalane jest to (via tty) przez znacznik Meta, ustawiony komendą setmetamode. Dwiema możliwościami są: Esc X albo X iloczyn logiczny 0200.
(i) Ponieważ vt100 miał klawisz Delete nad klawiszem Enter.
(ii) Bo Linus tak postanowił.
% xmodmap -e "keysym BackSpace = Delete" -e "keysym Delete = BackSpace"
Albo, jeśli chcesz tylko żeby klawisz Backspace dawał wsteczną spację:
% xmodmap -e "keycode 22 = BackSpace"
Albo, jeśli chesz tylko żeby klawisz Delete dawał Delete:
% xmodmap -e "keycode 107 = Delete"
(ale zwykle takie jest już domyślne przypisanie).
Wsadź do swojego pliku .emacs linie jak niżej:
(global-set-key "\?" 'delete-backward-char)
(global-set-key "\C-h" 'help-command)
Oczywiście możesz w ten sam sposób przypisać inne polecenia innym klawiszom. Zauważ że niektóre tryby główne i poboczne redefiniują przypisania klawiszy. Na przykład w trybie szukania przyrostowego [incremental mode] można znaleźć kod:
(define-key map "\177" 'isearch-delete-char)
(define-key map "\C-h" 'isearch-mode-help)
Oznacza to że używanie dwóch powyższych komend globalnych może nie
być dobrym pomysłem. Za dużo jest miejsc z wbudowanym założeniem ^H =
pomoc i Del = delete. Nie oznacza to że musisz ustawić klawisze tak
żeby Backspace dawało Del. Ale jeśli tak nie jest, najłatwiej jest
zmienić ich układ na najniższym możliwym poziomie emacsa.
Wsadź do swojego pliku .emacs linie jak niżej:
(setq keyboard-translate-table (make-string 128 0))
(let ((i 0))
(while (< i 128)
(aset keyboard-translate-table i i)
(setq i (1+ i))))
(aset keyboard-translate-table ?\b ?\^?)
(aset keyboard-translate-table ?\^? ?\b)
Ostatnie wersje emacsa mają funkcję keyboard-translate, więc
można uprościć powyższe do
(keyboard-translate ?\C-h ?\C-?)
(keyboard-translate ?\C-? ?\C-h)
Zauważ że pod X emacs może rozróżniać Ctrl-h i klawisz
Backspace (niezależnie od tego jakie kody oba wypisują na konsoli),
a domyślnie emacs będzie widział klawisz wstecznej spacji jako DEL
(wykonujący polecenia kasowania, przypisane temu znakowi, a nie
polecenia pomocy, przypisane do ^H). Można rożróżniać Backspace i Delete,
np. poprzez
(global-unset-key [backspace] )
(global-set-key [backspace] 'delete-backward-char)
(global-unset-key [delete] )
(global-set-key [delete] 'delete-char)
Wsadź do swojego pliku .kermrc linie jak niżej:
set key \127 \8
set key \8 \127
Xterm dziedziczy zwykle tryby tty po programie który go wywołał.
W xdm, domyślne klawisze kasowania i usuwania to # i @, jak
w starej dobrej wersji 6 Unixa.
Jeśli nie podoba ci się to, możesz wsadzić coś podobnego do
XTerm*ttymodes: erase ^? kill ^U intr ^C quit ^\ eof ^D susp ^Z start ^Q stop ^S eol ^@
do /usr/lib/X11/app-defaults/XTerm albo do
$HOME/.Xresources, zakładając że masz linię
xrdb $HOME/.Xresources
w swoim $HOME/.xinitrc.
Wsadzenie
*XmText.translations: #override\n\
<Key>osfDelete: delete-previous-character()
*XmTextField.translations: #override\n\
<Key>osfDelete: delete-previous-character()
do twojego $HOME/.Xresources pomoże.
W Netscape FAQ można jednak przeczytać:
Dlaczego mój klawisz Backspace nie działa w polach tekstowych?
Domyślnie, Linux i XFree86 dostarczane są ze źle skonfigurowanymi
klawiszami Backspace i Delete. Wszystkie programy oparte na Motif
(w tym oczywiście Netscape Navigator) będą w ten sam sposób źle
działać.
Specyfikacja Motif mówi że Backspace ma kasować poprzedni znak a
Delete ma kasować znak następny. Linux i XFree86 są dostarczane
z takim ustawieniem że oba klawisze - Backspace i Delete - wypisują
Delete.
Możesz to naprawić używając któregoś z programów xmodmap, xkeycaps
bądź loadkeys i sprawić że odpowiedni klawisz wypisuje klawsym
wsteczna spacja, a nie Delete.
Możesz to również naprawić używając pliku .motifbind; patrz
strona man VirtualBindings(3).
Uwaga: nie używaj zasobów *XmText.translations lub *XmTextField.
translations próbując naprawić ten problem. Jeśli tak zrobisz,
rozwalisz pozostałe przypisania klawiszy w polach tekstowych NN.
Ted Kandell (ted@tcg.net) sugeruje co następuje:
Dodaj poniższe gdzieś w swoim .profile:
stty erase ^H
Jeśli używasz basha, dodaj poniższe linie do swojego .inputrc:
"\C-?": delete-char
"\C-h": backward-delete-char
Dodaj następujące linie do swojego pliku .xinitrc:
xmodmap <<-EOF
keycode 22 = BackSpace osfBackSpace
keycode 107 = Delete
EOF
# wystartuj tu swojego managera okien, np.
#(fvwm) 2>&1 | tee /dev/tty /dev/console
stty sane
stty erase ^H
loadmap <<-EOF
keycode 14 = BackSpace
keycode 111 = Delete
EOF
Będzie to definitywnie działać dla klawiatury PC 101 lub 102-klawiszowej, z każdym rozkładem Linuxa/XFree86.
Ważną częścią uczenia aplikacji motifowych takich jak Netscape poprawnej pracy jest dodanie osfBackSpace do keycode 22, oprócz BackSpace.
Zauważ nie po obu stronach znaku = nie mogą się znajdować spacje.
Gdy ktoś ma problemy z wsteczną spacją, ma on tendencję do patrzenia w swój kawałek termcap (lub terminfo) opisujący terminal; i rzeczywiście, istnieje tam zdolność kb (lub kbs) opisująca kod wypisywany przez klawisz Backspace. Niemniej niewiele programów jej używa, więc - chyba że masz problemy z jednym konkretnym programem - prawdopodobnie błąd leży gdzie indziej. Oczywiście poprawienie swojego kawałka termcap (terminfo) nie jest złym pomysłem tak czy owak. Patrz niżej pod "Zmienna TERM".
Jądro próbuje wywnioskować najpierw jaki symbol rozumieć przez każdy podany przez użytkownika bajt, a następnie gdzie ten symbol jest umieszczony w bieżącej czcionce.
Jądro wie o pięciu tłumaczeniach bajtów na symbole konsoli-ekranu. W trybie Unicode (UTF-8) kod UTF-8 jest przekształacany bezpośrednio na Unicode. Założeniem jest że prawie wszystkie potrzebne symbole w Unicode się znajdują, a w przypadkach gdzie nie jest to prawdą zarezerwowane są kody 0x00ff* dla bezpośredniego dostępu do czcionki. Poza trybem Unicode, używa się jednej z tabeli tłumaczeń. Te cztery tabele to: a) Latin1 -> Unicode, b) grafika vt100 -> Unicode, c) PC -> Unicode, d) zdefiniowane przez użytkownika.
Istnieją dwa zestawy znaków, zwane G0 i G1, i jeden z nich jest zestawem bieżącym (początkowo G0). Wypisanie ^N spowoduje że bieżącym zestawem będzie G1, ^O że G0.
Zmienne G0 i G1 wskazują na tablice tłumaczeń, i mogą być zmienione przez użytkownika. Początkowo wskazują na tablice a) i b), odpowiednio. Sekwencje Esc(B, Esc(0, Esc(U, Esc(K powodują że G0 wskazuje na tablice tłumaczeń a), b), c), d), odpowiednio. Sekwencje Esc)B, Esc)0, Esc)U, Esc)K powodują że G1 wskazuje na tablice tłumaczeń a), b), c), d), odpowiednio.
Sekwencja Esc-c powoduje skasowanie terminala, czyli to czego chcesz
jeżeli ekran jest cały zaśmiecony. Często doradzane echo ^V^O
spowoduje tylko że zestawem bieżącym będzie G0, ale nie ma gwarancji że
G0 pokazuje na tablicę a).
W niektórych dystrybucjach istnieje program reset(1), który wypisuje
po prostu echo ^[c. Jeśli twój kawałek termcap dla konsoli jest
poprawny (i ma :rs=\Ec:), wtedy zadziała także
setterm -reset.
Zdefiniowaną przez użytkownika tablicę odwzorowań ustawić można
używając mapscrn(8). Rezultatem odwzorowania jest to że jeżeli
wypisywany jest symbol c, to wysyłany do pamięci ekranu jest
symbol s = map[c]. Obraz bitowy który odpowiada s
znajduje się w ROMie znakowym, i może zostać zmieniony przy
pomocy setfont(8).
Domyślnie przełączania konsoli dokonuje Alt-Fn lub Ctrl-Alt-Fn. Pod
X (lub nowszymi wersjami dosemu) działa tylko Ctrl-Alt-Fn.
Wiele układów klawiatur pozwala na cykliczne przemieszczanie się
między konsolami przy użyciu Alt-strzałka_w_prawo i Alt-strzałka_w_lewo.
XFree86 1.3 nie wie że przyciśnięty jest Alt gdy przełączasz się do okienka X. Tak więc nie możesz przełączyć się natychmiast na jakąś innej WK, ale musisz najpierw zwolnić Alt. W drugą stronę powinno to działać; jądro zawsze zanotowywuje stan góra/dół wszystkich klawiszy. (na tyle na ile można; na niektórych klawiaturach część klawiszy nie wysyła kodu skanowego po naciśnięciu, np. klawisze PFn na FOCUS 9000) lub zwolnieniu (np. klawisz Pause na wielu klawiaturach).
XFree86 1.3 zapisuje czcionki załadowane do ROMu znakowego przy starcie
i przywraca je przy przełączaniu konsoli. Tak więc efekt setfont
na WK zostaje wymazany gdy przełączasz się między X i zewnętrzem.
Używanie setfont pod X może doprowadzić do dziwnych rezultatów.
Pod kontrolą programową WK można zmieniać używając komendy chvt.
To pytanie ciągle pojawia się od czasu do czasu, ale odpowiedź brzmi:
już masz ich dosyć. Od wersji 1.54 jądra istnieje od 1 do 63 wirtualnych
konsol. Nowa konsola tworzona jest natychmiast po otwarciu. Usuwa się
ją narzędziem disalloc (ale można ją usunąć tylko gdy nie ma z nią
skojarzonych procesów).
Dla starszych jąder, zmień linię
#define NR_CONSOLES 8
w include/linux/tty.h (nie zwiększaj tej liczby powyżej 63),
i zrekompiluj jądro.
Jeśli jeszcze nie istnieją, stwórz urządzenia tty używając MAKEDEV lub
mknod ttyN c 4, gdzie N oznacza numer tty. Na przykład:
for i in 9 10 11 12; do mknod /dev/tty$i c 4 $i; done
albo, lepiej, (ponieważ zatroszczy się to również o właściciela i prawa dostępu)
for i in 9 10 11 12; do /dev/MAKEDEV tty$i; done
Jeśli chcesz żeby nowe WK uruchamiały getty, dodaj linie w
/etc/inittab (ale jest znacznie lepiej mieć uruchomione tylko dwie
getty, i tworzyć więcej konsol dynamicznie w razie potrzeby. W ten
sposób będziesz miał więcej pamięci gdy nie używasz wszystkich konsol, a
także więcej konsol, w razie gdybyś naprawdę ich potrzebował. Wyedytuj
/etc/inittab i wykomentuj wszystkie getty prócz dwóch
pierwszych).
Gdy konsole są przydzielane dynamicznie, zazwyczaj najłatwiej jest
mieć tylko jedną czy dwie z uruchomionym getty. Więcej
otwiera się za pomocą etc/rc.local, naciśnięcie Alt-strzałka_w_górę utworzy
nową WK z uruchomionym open -l -s bash. Nieużywane konsole
(bez skojarzonych procesów) usuwa się za pomocą disalloc.
Ale, rzec możesz, zajęty jestem czynnościami w których nagle potrzebuję
więcej konsol, a nie mam znaku zachęty bash aby wydać polecenie open.
Na szczęście możliwe jest stworzenie nowej konsoli po naciśnięciu jednego
klawisza, bez względu na to co dzieje się na konsoli bieżącej.
Jeśli masz spawn_login z kbd-0.90.tar.gz i wstawisz
do
loadkeys << EOF
alt keycode 103 = Spawn_Console
EOF
spawn_login &
login (i przełączy się na nią). Używając
spawn_console & zamiast spawn_login & uzyskasz
tam uruchomiony bash. Patrz też open-1.4.tgz oraz
dynamic-vc-1.1.tar.gz.
To jaka czynność winna być podejmowana po naciśnięciu tego klawisza
Spawn_Console można również ustawić w /etc/inittab pod
kbrequest, jeśli masz świeży plik inicjalizacyjny. Patrz inittab(5)
(czynność ta może być czymś zupełnie innym - nazwałem ten klawisz
Spawn_Console po prostu dlatego że do tego go wykorzystywałem).
Na terminalach wyliczonych w
Jeśli naciśniesz Ctrl-Alt-Del (albo każdy inny klawisz z przypisanym
przed loadkeys klawsymem Boot) komputer albo przeładuje się natychmiast
(bez sync), albo do W obecnym jądrze Ctrl-AltGr-Del nie jest już domyślnie przypisane do
Boot.
[KP+ i KP- to szary plus i minus z klawiatury numerycznej - przyp. tłum.]
Na niektórych płytach głównych Ctrl-Alt-KP- i Ctrl-Alt-KP+ są równoważne
naciśnięciu przycisku Turbo. To jest, oba dadzą w wyniku kody skanowe
1d 38 4a ca b8 9d i 1d 38 4e ce b8 9d, i oba przełączać będą między
trybem turbo (>= 25 Mhz) i nie-turbo (8/12 Mhz). (te kombinacje klawiszy
często działają tylko po ustawieniu zworkami na płycie głównej).
Perry F. Nguyen (pfnguyen@netcom22.netcom.com) pisze:
AMI BIOS ma właściwość która blokuje klawiaturę i miga diodami
jeżeli naciśnięto kombinację Ctrl-Alt-Backspace w czasie pytania o
hasło BIOS, aż to hasło nie zostanie wpisane.
(i wiele innych kombinacji - patrz dokumentacja dosemu)
Jeden symbol może być złożony przy użyciu kilku klawiszy.
Zauważ że istnieją przynajmniej trzy takie mechanizmy złożeń:
W X porządek obu symboli jest dowolny; i Compose-,-c i Compose-c-, dadzą
dla Linuxa i emacsa domyślnie działa tylko ta pierwsza sekwencja.
Dla X lista kombinacji złożeń jest ustalona. Linux i emacs są elastyczne.
Te trzy domyślne listy są nieco podobne, ale różnią się szczegółami.
Jeśli jakiś program używający trybu klawiatury K_RAW zakończy działanie
bez przywrócenia trybu klawiatury do K_XLATE, trudno jest coś zrobić -
nie działa nawet Ctrl-Alt-Del. Niemniej można czasami uniknąć naciskania
przycisku Reset (co jest też pożądane; twoi użytkownicy mogą się
zdenerwować jeśli przerwiesz im sesję Hacka przeładowaniem; możesz też
uszkodzić swój system plików).
Proste rozwiązania opierają się na zalogowaniu się z innego terminalu
lub innego komputera i wykonania Krok 1. Uruchom X.
Jak poniżej: naciśnij 2 (nie zwalniaj), naciśnij F12 (nie zwalniaj)
i natychmiast potem naciśnij =. Uruchomi to X.
(Wyjaśnienie: jeśli naciśnięcie klawisza wysyła kod klawisza K, to
zwolnienie klawisza wysyła kod K+128. Być może twoja powłoka nie
lubi tych znaków powyżej 128, więc unikamy wysłania ich nie zwalniając
żadnego z klawiszy. Musimy jednak być szybcy, w przeciwnym razie
nastąpi powtarzanie klawiszy. Cyfra 2 daje Ctrl-C, które usuwa poprzednie
śmieci, F12 daje X, a = Return).
Twój ekran może być teraz szary, ponieważ nie wskazano Step 2. Ustaw zmianę trybu klawiatury.
(Na przykład poprzez Step 3. Opuść X.
Alt-Fx (często Alt-F7) przywraca X, a wtedy Ctrl-Alt-Backspace powoduje
wyjście z niego. W ciągu pięciu sekund twoja klawiatura znów będzie
nadawała się do użytku.
Jeśli chcesz przygotować się na tą okoliczność, uczyń
1. Są to znaczniki klawiatury zależne od 2. Następnie, na każde 3. Istnieje możliwość że diody nie oddają stanu znaczników klawiatury,
ale coś innego.
3A. To coś innego może być jakimiś trzema bitami gdzieś w jądrze -
co można wykorzystać jeżeli chcesz pilnować bitów stanu jakiegoś
sprzętu czy programu. Jeśli chcesz tego, zmodyfikuj źródło jądra
aby wywoływało gdzieś 3B. To coś innego może być też czymkolwiek co jakiś program chce
pokazać za pomocą diod. Tak więc osoby które lubią takie rzeczy mogą
ułożyć ze światełek ładne wzorki. Jeśli chcesz tego, użyj ioctl KBSETLED.
To drugi sposób nie jest "na tty", ale wybór pomiędzy pierwszym a drugim
sposobem jest.
Podsumowując: każde Dodać można że
Wiele programów używa zmiennej Starsze systemy używają Od wersji jądra 1.3.2, domyślną wartością jądra dla konsoli jest
Jeśli masz plik termcap bez kawałka opisującego linux, dodaj słowo
linux do kawałka dla konsoli:
i ustaw
W kawałku terminfo dla konsoli linuxowej od ncurses 1.8.6 brakuje
W dawnych złych czasach było to wcale nużące. Każdy program z osobna
musiał być indywidualnie przekonywany do zostawienia twoich bitów
w spokoju. Nie żeby dzisiaj wszystko było łatwe, ale ostatnio wiele
narzędzi GNU nauczyło się reagować na Przede wszystkim ósmy bit powinien przetrwać przetwarzanie danych
wejściowych w jądrze, więc upewnij się że ustawiłeś A. Dla
do swojego To już dobry początek. Na terminalach które nie potrafią wyświetlać
symboli ISO-8859-1 spoza ASCII, komenda
spowoduje że znaki akcentowane wyświetlane będą jako {,c}a. Jeśli twoja
klawiatura nie daje łatwego sposobu wprowadzania znaków spoza ASCII, to
uczyni dwuznakową sekwencję ^X8 znakiem składania [Compose], tak że
czteroznakowa sekwencja ^X8,c daje c-cedilla. Bardzo niewygodne.
Komenda
włączy lub wyłączy tryb akcentów ISO-8859-1, w którym sześc klawiszy:
`, ', ", ^, , / są klawiszami diakrytyk które modyfikują następujący
po nich symbol. Kombinacje specjalne: c daje c z cedillą, d daje
islandzkie eth, t daje islandzkie thorn, "s daje niemieckie scharfes-s,
/a daje a z kółeczkiem, /e daje ligaturę ae, < i > dają guillemoty,
! daje odwrócony wykrzyknik, ? odwrócony pytajnik. '' daje akcent acute.
Jest to układ domyślny. Zmienna iso-languages jest listą par (nazwa języka,
układ akcentów), a układ niedomyślny wybrać można poprzez
Tutaj LANGUAGE może być jednym z "portuguese", "irish", "french",
"latin-2", "latin-1".
Ponieważ domyślnym klawiszem Compose w Linuxie jest Ctrl-., może
być wygodniej używać tego wszędzie. Spróbuj
(Ta ostatnia linia nie będzie działać pod
do swojego B. Dla [jeśli to nie pomoże, wywołuj C. Dla D. Dla
i, według Danish HOWTO,
do swojego E. dla
Jeśli masz w swoim systemie F. Dla G. Dla H. Dla programów używających curses (takich jak I. Dla programów używających J. Dla K. Dla L. Dla M. Dla LaTeX: Ładna dyskusja na temat ISO-8859-1 i tego jak zarządzać ośmiobitowymi
znakami zawarta jest w pliku Jeśli chcesz poprawić program który żle zachowuje się ze znakami
ośmiobitowymi, musisz pamiętać o tym że jeśli używasz w nim typu
"signed char", znaki mogą mieć wartości ujemne, a używanie ich jako
indeksu tablicy nie uda się. Niektóre programy można poprawić dodając
rozsądnie rzutowania na typ unsigned char.
Od wersji 2.1 XFree86 zainicjuje swój układ klawiatury z układu linuxowego,
na tyle na ile można. Linux jednak miał 16 pozycji na klawisz (jedna na
każdą kombinację modyfikatorów Shift, AltGr, Ctrl, Alt) a obecnie 256
pozycji na klawisz, podczas gdy X ma cztery pozycje na klawisz (jedna
na każdą kombinację Shift i Mod), tak więc część informacji musi się
zgubić.
Za Mod przyjmuje się lewy Alt, chyba że prawy Ctrl zdefiniowano jako
ModeShift lub ModeLock, w którym to przypadku przyjmuje się prawy Ctrl,
lub chyba że tak zdefiniowano prawy Alt, w którym to przypadku przyjmuje
się prawy Alt.
Ustala to w jaki sposób cztery znaczenia klawisza pod XFree86 są
wybierane z szesnastu znaczeń linuxowych.
Zauważ że dzisiaj Linux domyślnie nie rozróżnia pomiędzy dwoma klawiszami
Ctrl i Shift. X jednak rozróżnia.
Następnie czytany jest układ klawiatury z jądra i poczynione zostają
oczywiste odpowiednie przypisania pod X. Przypisania "klawiszy
czynnościowych" - Show_Memory, Show_State, Show_Registers, Last_Console,
Console_n, Scroll_Backward, Scroll_Forward, Caps_On and Boot są
ignorowane, tak samo jak klawisze diakrytyk i klawisze blokujące
klawiaturę w określonym trybie [locks] (z wyjątkiem ShiftLock), oraz
klawisze "ASCII-x"
Później używane są definicje z pliku Co dzieje się z ciągami znaków skojarzonymi z klawiszami funkcyjnymi?
Nic. X nie posiada takiej koncepcji (ale możliwe jest zdefiniowanie
łańcuchów znaków dla klawiszy funkcyjnych w Nie wiem jak przekonać
Dwa klawisze: PrintScrn/SysRq i Pause/Break są szczególne w tym że
mają one dwa kody klawiszy: pierwszy ma kody 84 z naciśniętym równocześnie
Alt, i kod 99 w przeciwnym razie; drugi ma kod klawisza 101 z naciśniętym
równocześnie Ctrl i kod 119 w przeciwnym razie. Tak więc nie ma sensu
przypisywać funkcji Alt-kod 99 lub Ctrl-kod 119.
Jeśli masz dziwne klawisze które nie wypisują pod Linuxem żadnego kodu
lub wysyłają komunikaty takie jak "unrecognized scancode"), a twoje
jądro to 1.1.63 lub późniejsze, możesz użyć setkeycodes(1) by powiedzieć
o nich [kodach] jądru. Nie będą one jednak działać pod X.
Gdy przypisano im kod klawisza za pomocą
Zamiana Caps Lock i Control na klawiaturze (zakładając że używasz
układów klawiatur 0-15; sprawdź przez
Powyższa zamiana tylko pod X:
gdzie
O co chodzi z tymi numerami klawiszy? Backspace ma 14 pod Linuxem,
a 22 pod X? No cóż, numery najlepiej uważać za przydzielone dowolnie;
linuxowy numer klawisza znaleźć można używając showkey(1), a numer
Xowy przez xev(1). Często numer Xowy będzie o 8 większy niż
linuxowy.
Coś co ludzie chcą zmieniać to przypisania klawiszy funkcyjnych.
Załóżmy że chcesz aby F12 wypisywał ciąg znaków "emacs". Wtedy
zrobi to. Ściślej, procedura wygląda mniej więcej tak: (i) znajdź
kody klawiszy które mają mieć zmienione przypisania, za pomocą showkey(1),
(ii) zachowaj bieżący układ klawiatury, zrób kopię i ją edytuj.
Format tablicy zgadnąć można patrząc na wynik
do Domyślnym katalogiem układów klawiatur jest (Na moim komputerze)
Czy klawisze Shift, Ctrl i Alt mogą się zachowywać jak przełączniki?
Tak, po napisaniu:
klawisze lewy Control, Shift i Alt będą działać jako przełączniki.
Odpowiednie numery podaje showkey (zwykle są to 29, 97, 42, 54, 56, 100
dla lewego i prawego Control, Shift i Alt odpowiednio), a funkcje to
Control_Lock, Shift_Lock, Alt_Lock, ALtGr_Lock.
Co z klawiszami "sticky" [zachowywanymi w buforze do naciśnięcia
następnego klawisza(y) - przyp. tłum.] ?
Od wersji 1.3.33, jądro wie o modyfikatorach "sticky". Działają one
na następny naciśnięty klawisz. Tak więc, tam gdzie wcześniej trzeba
było trzysymbolowej sekwencji Shift_Lock-a-Shift_Lock można teraz używać
dwusymbolowej sekwencji SShift_Lock-a.
Bieżąca wersja pakietu
uczyni prawe Shift, Ctrl i Alt wersjami "sticky" klawiszy lewych.
Od wersji 0.93 można napisać
by otrzymać ten sam rezultat. Pozwoli to napisać ci Ctrl-Alt-Del
trzema naciśnięciami klawiszy, używając jednej ręki
to obtain the same result.
Jak dotąd wiem o sześciu sposobach zmiany rozdzielczości:
1. W czasie kompilacji zmień linię
w 1A. Po kompilacji użyj 2. W czasie ładowania systemu: wstaw 3.W czasie uruchamiania:
A. Użyj komendy 4. Nie "na konsoli":
Pod
Zdobądź svgalib i skompiluj program Obecnie wykonanie
Przy starcie jądro Linuxa ustawia częstość powtarzania na wartość
maksymalną. Dla większości klawiatur jest to rozsądne, ale dla niektórych
oznacza że nie możesz dotknąć klawisza żeby nie otrzymać trzech kopii
odpowiadającego mu symbolu. Użyj programu kbdrate(8) by zmienić
częstość powtarzania lub, jeśli to nie pomoże, zmodyfikuj lub usuń
sekcję
Istnieją dwa sposoby zmuszenia ekranu do przewinięcia się. Pierwsza,
zwana "twardym przewijaniem" to pozostawienie tekstu w pamięci ekranu
w bieżącej postaci, ale zmienienie punktu oglądania. Jest to bardzo
szybkie. Druga, zwana "miękkim przewijaniem" polega na przesuwaniu
całego ekranu tekstowego w górę lub dół. Jest to o wiele wolniejsze.
Sterownik konsoli jądra wypisze tekst zaczynający się u górnej granicy
pamięci ekranu, kontynuując aż do dołu, potem znów skopiuje część
dolną na górną, i tak dalej, cały czas używając twardego przewijania
by pokazać właściwą część ekranu. Możesz przewijać w tył aż do górnej
granicy pamięci ekranu używając Shift-PageUp (szary PageUp) i z powrotem
w dół używając Shift-PageDown (szary PageDown), zakładając domyślny układ
klawiatury. Ile można przewinąć w tył wyznacza więc ilość pamięci ekranu
którą masz, i nie możesz jej zwiększyć. Jeśli potrzebujesz przewinąć
więcej, użyj jakiegoś programu który buforuje tekst, jak less czy
screen - używając bufora na dysku możesz wrócić do tego co robiłeś
tydzień temu. (dla Przy zmianie wirtualnych konsol zawartość ekranu starej WK jest kopiowana
do pamięci jądra, a zawartość ekranu nowej WK jest kopiowana z pamięci
jądra do pamięci ekranu. Tylko ekran widzialny jest kopiowany, nie
całość pamięci ekranu, tak więc zmiana konsoli powoduje utratę
całej informacji o przewijaniu.
Czasami twarde przewijanie nie jest pożądane, na przykład gdy sprzęt
nie posiada możliwości zmiany punktu oglądania ekranu. Pierwszym
przykładem byłą maszyna braillowska, która oddaje zawartość górnej
części pamięci ekranu w braille'u. Istnieje opcja używana w czasie
ładowania jądra (no-scroll, która mówi sterownikowi konsoli by nie
używał twardego przewijania. Patrz bootparam(7)).
Opcja Sprzętowe tryby ekranowe oszczędzające energię można włączyć/wyłączyć
używając programu
Prawidłową zawartość ekranu
: Czasami moje klawisze kursora dają dziwne kody.
Gdy terminal znajduje się w trybie klawiszy aplikacji klawisze
kursora wypisują Esc O x, a w przeciwnym razie Esc [ x, gdzie x =
A, B, C, D. Niektóre programy ustawiają terminal w tryb klawiszy aplikacji;
jeśli przerwiesz je przez
Kasuje wszystkie właściwości bieżącej WK do domyślnych. Zmiany tylko
trybu klawiszy aplikacji dokonuje się przez:
(ustawia) i
(kasuje).
Niektóre osoby zauważyły że tracą wpisywane znaki gdy aktywny jest
napęd stacji dysków. Wygląda na to że może to być problem z płytami
głównymi Uni-486WB.
(proszę napisać do mnie żeby potwierdzić: "tak, mam ten sam problem";
zaprzeczyć "nie, wszystko w porządku z moim Uni-486WB; zmienić: "mój
komputer Xyz ma ten sam problem").
Tjalling Tjalkens (tjalling@ei.ele.tue.nl) donosi o bardzo podobnych
problemach z "niemarkową płytą główną GMB-486 UNP VESA z procesorem
AMD 486DX2-66" - w czasie pracy stacji dyskietek niektóre naciśnięcia
klawiszy gubią się, w czasie pracy streamera (Conner C 250 MQ) traci
się wiele naciśnięć.
Niektóre osoby doświadcząją sporadycznych zawieszeń - czasami związanych
z pracą twardego dysku lub innego urządzenia I/O.
ulf@rio70.bln.sni.de (Ulf Tietz) pisze:
"Miałem te same problemy gdy dostroiłem swoją płytę główną na zbyt
dużą szybkość. Ustawiłem więc wszystkie czasy oczekiwania (CLK, wait
statements) na bardziej konwencjonalne wartości, i problemy zniknęły".
bhogan@crl.com (Bill Hogan) pisze:
"Jeśli masz AMI BIOS, możesz spróbować ustawić emulację Gate A20 na
"chipset" (jeśli masz taką opcję). Za każdym razem gdy miałem
ten parametr ustawiony na jakąś inną opcję ("fast", "both", "disabled"),
miałem częste zawieszenia się klawiatury".
--------------------------------------------------------------------
Uprasza się o dodatki i poprawki
Andries Brouwer - aeb@cwi.nl
/etc/securetty/ możesz zalogować się
tylko jako root. Istnieją programy które czytają ustawienia terminala
z plików
doc-linux-pl-2002.06.14.orig/html/Keystroke-HOWTO.pl.html 0100664 0001750 0001750 00000025511 06770264140 021525 0 ustar coven coven
/etc/ttys/ i /etc/ttytype. Jeśli masz takie
pliki, i stworzysz dodatkowe konsole, dobrym pomysłem mogłoby być
również dodanie dla nich linii w tych plikach.
8. Ctrl-Alt-Del i inne specjalne kombinacje klawiszy
8.1 Ctrl-Alt-Del (przeładowanie)
init wysyła się SIGINT. To pierwsze zachowanie
jest domyślne. Może je zmienić root używając systemowego wywołania reboot(),
patrz ctrlaltdel(8). Niektóre pliki init zmieniają wartość domyślną.
To co nastąpi gdy init otrzyma SIGINT zależy od użytej wersji tegoż -
często określa to pole pf w /etc/inittab (co oznacza że
możesz w tym przypadku uruchomić dowolny program).
8.2 Inne kombinacje
Name Default binding
-------------------------------
Show_Memory Shift-Scrollock [pokazuje info o pamięci]
Show_Registers AltGr-ScrollLock [pokazuje zawartość rejestrów]
Show_State Ctrl-ScrollLock [pokazuje status]
Console_n Alt-Fn and Ctrl-Alt-Fn (1 <= n <= 12) [konsola nr n]
Console_{n+12} AltGr-Fn (1 <= n <= 12) [konsola nr n+12]
Incr_Console Alt-RightArrow [o konsolę w górę]
Decr_Console Alt-LeftArrow [o konsolę w dół]
Last_Console Alt[Gr]-PrintScreen [ostatnia konsola]
Scroll_Backward Shift-PageUp [przewija ekran w górę]
Scroll_Forward Shift-PageDown [przewija ekran w dół]
Caps_On [włącza duże litery. CapsLock działa
jako przełącznik]
Compose Ctrl-. [tryb składania, np. '+e daje é]
8.3 Kombinacje w X
Ctrl-Alt-Fn Przełącza na WK nr n
Ctrl-Alt-KP+ Następny tryb
Ctrl-Alt-KP- Ostatni tryb
Ctrl-Alt-BS "zabija" X
8.4 Kombinacje Dosemu
Ctrl-Alt-Fn Przełącz na WK nr n (od wersji 0.50, wcześniej Alt-Fn)
Ctrl-Alt-PgDn "zabij" dosemu (w trybie SUROWYM klawiatury)
8.5 Składanie symboli
/usr/X11R6/lib/X11/locale/iso8859-1/Compose.9. Różne właściwości konsoli
10. Jak wyjść z trybu surowego
kbd_mode -a.
Procedura poniżej zakłada że nie jest uruchomiony X, i że ekran znajduje
się w trybie tekstowym, że znajdujesz się w znaku zachęty bash, że
używasz amerykańskiego układu klawiatury i że znakiem który przerywa
działanie komendy jest u ciebie Ctrl-C.
.xinitrc.
Ctrl-Alt-Fn jednak działa, możesz więc przejść do innej WK (Ctrl-Alt-BS
także działa, ale zwraca cię do poprzedniego stanu, a tego nie chcesz).
sleep 5; kbd_mode -a).
\215A\301 (3 symbols) aliasem na kbd_mode -a.
Teraz naciśnięcie tylko = F7 = (trzy symbole) przywróci cię do normalności.
11. Diody na klawiaturze
tty; każda WK ma swój
NumLock, CapsLock i ScrollLock. Domyślnie te znaczniki pokazywane są
przez diody. Zwykłym sposobem ich zmiany jest naciśnięcie odpowiedniego
klawisza (uwaga uboczna: naciśnięcie klawisza NumLock w trybie klawiszy
aplikacji nie zmieni stanu NumLock, ale wypisze Esc-sekwencję. Jeśli
chcesz żeby klawisz NumLock zawsze zmieniał stan NumLock, przypisz go
do Bare_Num_Lock).
tty istnieją domyślne znaczniki klawiatury,
aby zinicjalizować je gdy nastąpi przekasowanie. Tak więc jeśli chcesz
żeby NumLock był cały czas włączony, jest to możliwe. Zwykle zmienić
to można przez setleds -D.
register_leds()/
tty ma znacznik kbd -> ledmode. Jeśli ma
on wartość LED_SHOW_FLAGS, wtdy pokazane są znaczniki klawiatury (NumLock
itd.) konkretnego tty. Jeśli ma on wartość LED_SHOW_IOCTL, wtedy
diody pokazują każdą wartość którą ostatnio im przypisano za pomocą
ioctl KBSETLED.
X używa ioctl-ów aby ustawić diody, ale nie
kasuje swojej WK przy wyjściu, tak więc po używaniu X istnieć
może jedna WK która nie jest w domyślnym stanie LED_SHOW_FLAGS. Można
to naprawić wykonując setleds -L na tej WK. Patrz setleds(1).
12. Zmienna TERM
TERM i bazy danych /etc/termcap
lub /usr/lib/terminfo/* żeby zadecydować które ciągi znaków
wysłać by wyczyścić ekran, przesunąć kursor itd., i często także by
zdecydować który ciąg znaków wysyłany jest przez klawisz wstecznej
spacji [użytkownika], klawisze funkcyjne itp.
Tą wartość ustawia zrazu jądro (dla konsoli).
Zwykle wartość tą ponownie ustawia getty, używając /etc/ttytype
lub argumentu podanego w /etc/inittab.
Czasami jest ona również ustawiana w /etc/profile.
TERM=console lub TERM=co80x25. Nowsze
systemy (z ncurses 1.8.6) używają bardziej dookreślonego TERM=linux
lub TERM=linux-80x25. Niemniej starsze wersje setterm sprawdzają
obecność TERM równej con* i dlatego odmawiają pracy z TERM=linux.
TERM=linux.
console|con80x25|linux:\
/usr/lib/terminfo/l/linux jako kopię lub odnośnik
symboliczny do /usr/lib/terminfo/c/console.
12.1 Terminfo
kich1=\E[2~, czego potrzebują niektóre programy.
Wyedytuj plik i skompiluj go tic.
13. Jak zmusić inne programy do działania ze znakami spoza ASCII
LC_CTYPE=iso_8859_1 lub
LC_CTYPE=iso-8859-1. Spróbuj najpierw tego; jeśli nie pomoże,
spójrz na podpowiedzi poniżej. Zauważ że w nowszych wersjach libc
procedura setlocale() działa tylko jeżeli zainstalowałeś pliki
locale (tj. w /usr/lib/locale).
stty cs8
-istrip -parenb
emacsa szczegóły w dużym stopniu zależą od wersji. Informacja
poniżej dotyczy wersji 19.34. Wstaw linie:
(set-input-mode nil nil 1)
(standard-display-european t)
(require 'iso-syntax)
$HOME/.emacs. Pierwsza linia (mówiąc ściślej -
końcowe 1) mówi emacsowi żeby nie obcinał ósmego bitu ze wprowadzanych
znaków. Druga linia mówi emacsowi żeby nie wyświetlał znaków spoza
ASCII jako wartości ósemkowych. Trzecia linia wyszczególnia właściwości
składni i tablicę konwersji małych/dużych liter dla zestawu znaków Latin-1.
Dwie ostatnie linie są zbędne jeżeli masz coś podobnego do
LC_TYPE=ISO-8859-1 w swoim środowisku (zmienna ta może też nazywać się
LC_ALL albo po prostu LANG. Jej wartość może być czymkolwiek co zawiera
ciąg znaków 88591, 8859-1 lub 8859_1).
(load-library "iso-ascii")
(load-library "iso-transl")
(iso-accents-mode)
(iso-accents-customize LANGUAGE)
(load-library "iso-insert.el")
(define-key global-map [?\C-.] 8859-1-map)
xterm, jeśli używasz
emacs -nw, ale w tym wypadku możesz wstawić)
XTerm*VT100.Translations: #override\n\
Ctrl <KeyPress> . : string("\0308")
.Xresources.)
less, ustaw zmienną środowiskową LESSCHARSET=latin1
Zrób to również jeśli widzisz <255> lub <AD> w tym co
wypisuje man; niektóre wersje less będą oddawać "miękki"
myślnik (ósemkowo 0255, szesnastkowo 0xAD) w ten sposób, jeśli
nie pozwoli im się wypisywać Latin-1.
less z opcją -r, bądź ustaw alias.
Jeśli nawet to nie pomoże, albo masz powłokę która nie obsługuje
aliasów, ustaw zmienną LESSCHARDEF na wartość 32.224c - przyp. tłum.]
ls, podaj opcję -N (być może zechcesz ustawić alias)
bash (wersja 1.13.*), wstaw
set meta-flag on
set convert-meta off
set output-meta on
$HOME/.inputrc.
tcsh, użyj
setenv LANG US_en
setenv LC_CTYPE iso_8859_1
nls, używane są odpowiednie algorytmy.
W przeciwnym razie tcsh założy iso_8859_1, niezależnie od wartości
podanych w zmiennych LANG i LC_TYPE. Patrz sekcja NATIVE LANGUAGE SYSTEM
w tcsh(1). Danish HOWTO twierdzi: setenv LC_CTYPE ISO-8859-1;
stty pass8)
flex, podaj opcję -8, jeśli program przetwarzający
który ono tworzy ma operować na ośmiobitowych danych wejściowych
(oczywiście że ma).
elm, ustaw displaycharset na ISO-8859-1.
(Danish HOWTO: LANG=C i LC_CTYPE=ISO-8859-1)
lynx David
Sibley donosi: "Zwykły pakiet curses używa ósmego bitu dla odwrócenia
kolorów tła i ekranu (patrz flaga _STANDOUT zdefiniowana w
/usr/include/curses.h). Niemniej ncurses zdaje się być
czyste ośmiobitowo i wyświetla iso-latin-8859-1 poprawnie.
groff (takich jak man), upewnij
się że używasz -Tlatin zamiast -Tascii. Stare wersje programu
man używają również col, więc następny punkt stosuje się
odpowiednio.
col, upewnij się że 1) ustawiony jest tak żeby wykonywać
setlocale(LC_CTYPE,""); i 2) ustawiłeś zmienną środowiskową
LC_CTYPE=ISO-8859-1.
rlogin, użyj opcji -8.
joe,
sunsite.unc.edu:/pub/Linux/apps/editors/joe-1.0.8-linux.tar.gz
działa podobno po wyedytowaniu pliku konfiguracyjnego. Ktoś inny powiedział:
"joe: wstaw opcję -asis do /isr/lib/joerc, w pierwszej
kolumnie.
\documentstyle[isolatin]{article}.
Dla LaTeX2e: \documentclass{article}\usepackage{isolatin}
gdzie isolatin.sty jest dostępny z
ftp://ftp.vlsivie.tuwien.ac.at/pub/8bit.
grasp.insa-lyon.fr:/pub/faq/fr/accents
(po francusku). Inną ładną dyskusję (po angielsku) można znależć w
rtfm.mit.edu:pub/usenet-by-group/comp.answers/character-sets/iso-8859-1-faq.
A jeszcze jedną (?), w ftp.vlsivie.tuwien.ac.at:/pub/8bit/FAQ-ISO-8859-1.
14. Co dokładnie robi XFree86-2.1 podczas inicjalizacji układu klawiatury?
X najpierw czyta plik Xconfig, gdzie można znależć definicje
klawiszy LeftAlt, RightAlt, RightCtl, ScrollLock keys takie jak Meta,
ModeShift, Compose, ModeLock czy ScrollLock - patrz X386keybd(1),
później XFree86kbd(1).
Xconfig. Tak więc definicja
klawisza Compose z Xconfig weźmie górę nad wartością znajdującą
się w układzie klawiatury Linuxa.
xterm - zauważ jednak
że najpierw otrzymuje te klawisze program zarządzający oknami).
xterm że powinien używać układu klawiatury
X w czasie naciskania Alt; wydaje się że po prostu patrzy na swój zasób
eightBitInput, i zależnie od tego jaką ma wartość logiczną albo
ustawia ósmy bit znaku, albo wypisuje dodatkowy znak Escape (tak jak
setmetamode(1) robi na konsoli).
15. Niecodzienne klawisze i klawiatury
setkeycodes, można im
przypisać funkcję za pomocą loadkeys.
16. Przykłady użycia loadkeys i xmodmap
dumpkeys | head -1)
% loadkeys
keymaps 0-15
keycode 58 = Control
keycode 29 = Caps_Lock
%
% xmodmap .xmodmaprc
.xmodmaprc zawiera linie
remove Lock = Caps_Lock
remove Control = Control_L
keysym Control_L = Caps_Lock
keysym Caps_Lock = Control_L
add Lock = Caps_Lock
add Control = Control_L
% loadkeys
keycode 88 = F12
string F12 = "emacs "
%
% dumpkeys > my_keymap
% cp my_keymap trial_keymap
% emacs trial_keymap
% loadkeys trial_keymap
%
dumpkeys, a opisuje
go keytables(5). Gdy nowy układ klawiatury działa tak jak tego chcemy,
możesz wstawić wywołanie
loadkeys my_new_keymap
/etc/rc.local czy coś takiego, żeby wykonywać je automatycznie
w czasie ładowania. Zauważ że zmiana klawiszy modyfikujących jest
zawiła, a nowicjusz może łatwo wplątać się w sytuację z której
wydostać się może tylko ekspert.
/usr/lib/kbd/keytables.
Domyślnym rozszerzeniem plików układów jest .map. Tak więc loadkeys uk
załaduje prawdopodobnie /usr/lib/kbd/keytables/uk.map.
/dev/console jest odnośnikiem symbolicznym
do /dev/tty0, a jądro uważa /dev/tty0 za synonim
bieżącej WK. XFree86 zmienia właściciela /dev/tty0, ale nie
przywraca stanu poprzedniego po zakończeniu. Tak więc polecenie dumpkeys
może się nie powieść, ponieważ ktoś inny jest właścicielem
/dev/tty0; w takim przypadku możesz wpierw uruchomić X.
16.1 "Mogę używać tylko jednego palca do pisania"
% loadkeys
keycode 29 = Control_Lock
keycode 42 = Shift_Lock
keycode 56 = Alt_Lock
%
kbd nie zawiera jeszcze kodu dla "stickies",
tak więc trzeba je wywoływać używając ich kodów szesnastkowych. Na
przykład:
% loadkeys
keymaps 0-15
keycode 54 = 0x0c00
keycode 97 = 0x0c02
keycode 100 = 0x0c03
%
% loadkeys
keymaps 0-15
keycode 54 = SShift
keycode 97 = SCtrl
keycode 100 = SAlt
%
17. Zmiana trybu ekranowego
SVGA_MODE= -DSVGA_MODE=NORMAL_VGA
/usr/src/linux/Makefile.
rdev -v - okropna łata, ale istnieje.
vga=ask do pliku
konfiguracyjnego lilo [zwykle /etc/lilo.conf - przyp. tłum.], a lilo
spyta się jakiego trybu ekranowego użyć. Kiedy już wiesz, wstaw tam
vga=mypreference.
resizecons (jest to bardzo prymitywne opakowanie
ioctl VT_RESIZE).
B. Użyj komendy SVGATextMode (jest to mniej prymitywne opakowanie
ioctl VT_RESIZE).
dosemu, bądź używając svgalib itd. możesz zmienić sprzętowy
tryb ekranowy bez powiadamiania o tym konsoli. Czasami jest to użyteczne
w ustawianiu resizecons lub SVGATextMode set up: użyj dosemu
i jakiegoś programu DOSowego by przełączyć się na pożądany tryb ekranowy,
zrzuć (powiedzmy z innej WK) zawartość wszystkich rejestrów sprzętowych
karty graficznej, i użyj ich w inicjalizacji której wymagają resizecons
i SVGATextMode.
W niektórych przypadkach gdy tryb ekranowy przełączył się na jakiś
stan nie do użytku, odpalenie dosemu, poleganie na BIOSie co do
ustawienia trybu ekranowego i "zabicie" dosemu używając kill -9
jest najprostszą metodą przywrócenia porządku.
17.1 Instrukcje co do używania resizecons
restoretextmode. Wystartuj
komputer we wszystkich możliwych trybach ekranowych (używając vga=ask)
w pliku konfiguracyjnym lilo i zapisz zawartość rejestrów sprzętowych
karty graficznej do plików KxW (K=kolumny, W=wiersze), np. 80x25, 132x44
itd. Wstaw te pliki do /usr/lib/kbd/videomodes. Teraz
resizecons 132x44 zmieni tryb ekranowy za ciebie (i wyśle
SIGWINCH do wszystkich procesów które o tym wiedzą, oraz załaduje
inną czcionkę jeśli to konieczne).
resizecons kończy się sukcesem wtedy tylko gdy
jest dość pamięci na starą i nową konsolę równocześnie.
18. Zmiana częstości powtarzania klawiszy
! ustaw częstość powtarzania klawiatury na maximum
mov ax,#0x0305
xor bx,bx ! clear bx
int 0x16
w /usr/src/linux/[arch/i386/]boot/setup.S.
19. Przewijanie
xterm można ustawić możliwe przewijanie w tył
dodając linię w rodzaju XTerm*saveLines: 2500 do .Xresources.)
20. Wygaszanie ekranu
setterm -blank nn nakaże sterownikowi konsoli wygasić
ekran po nn minutach bezczynności. Używając nn równego 0,
wygaszanie można wyłączyć. W niektórych starszych jądrach nabierało
to efektu dopiero po pierwszym przerwaniu klawiatury.
s xset(1) ustawi parametry wygaszacza pod X.
setvesablank podanego w komentarzu na początku
/usr/src/linux/drivers/char/vesa_blank.c.
21. Zrzuty ekranu
setterm -dump N zrzuci zawartość eranu /dev/ttyN do pliku
screen.dump w bieżącym katalogu. Patrz setterm(1).
/dev/ttyN odczytać można używając
urządzenia /dev/vcsN (gdzie "vcs" oznacza "virtual console
screen"). Na przykład, mógłbyś uruchomiony zegar który wyświetla
bieżący czas w górnym prawym rogu konsoli (patrz program vcstime
w kbd-0.92.tar.gz). Samo zrzucenie zawartości następuje po
cat /dev/vcsN. Owe urządzenia /dev/vcsN nie zawierają znaków
LF (nowej linii), ani atrybutów (jak kolory). We wnętrzu programu lepiej
jest zapewne zamiast tego użyć /dev/vcsaN ("virtual console screen w/
attributes") - zaczyna się ono nagłówkiem podającym liczbę wierszy i
kolumn oraz położenie kursora. Patrz vcs(4).
22. Niektóre właściwości vt100 - tryb klawiszy aplikacji
kill -9, albo jeśli padną, tryb nie
zostanie przestawiony.
% echo -e '\033c'
% echo -e '\033[?1h'
% echo -e '\033[?1l'
23. Niekompatybilość sprzętowa
Dokument ten napisany został dla użytkowników którzy chcą przypisać
specjalne czynności niektórym klawiszom na klawiaturze. Sugerowana metoda
to użycie loadkeys(1) bądź zmiana defkeymap.c i zbudowanie na nowo
jądra.
Tekst ten NIE omawia przemapowywania klawiszy klawiatury, np. Delete czy BackSpace. Co do informacji na temat przemapowywania klawiszy przeczytaj Backspace Mimi-HOWTO autorstwa Stevena Lee.
Metodę opisaną poniżej przetestowano na jądrze 1.2.1, zamieszczonym w dystrybucji 2.2 Slackware.
4 IV 95 - wersja 2.0 Przystosowana do wersji jądra 1.2.1; -proste zmiany w sugerowanych modyfikacjach pliku "my_keytable.map" -zmodyfikowany przykład "key_macro" ze zrzutami ekranu przez /dev/vcs*
7 V 94 - wersja 1.0 Wersja wyjściowa Keystroke-HOWTO, oparta w działaniu na wersji jądra 1.0
Wirtualny terminal Linuxa oraz sterowniki klawiatury przyjmują domyślny
układ klawiatury taki jak zdefiniowany w pliku /drivers/char/defkeymap.
c
źródeł jądra. Dwunastu klawiszom funkcyjnym PC przydać można łańcuchy
przypisane wykonywanym przez nie czynnościom. Po naciśnięciu któregoś z
tych klawiszy, być może z dodanymi klawiszami Alt lub Ctrl, bieżący
wirtualny terminal dodaje określony łańcuch do swoich buforów danych
wejściowych i wyjściowych, emulując w efekcie wprowadzenie owego łańcucha
tak jakby został wpisany z klawiatury.
Ustawieniem odpowiedniego łańcucha dla danego klawisza funkcyjnego możemy
uprościć wykonywanie wybranych komend, na przykład wywołując skrypt
powłoki /usr/local/bin/key_macro, który możemy utworzyć i modyfikować
wedle własnego uznania.
3. Narzędzia do modyfikacji sterownika klawiatury.
Możemy użyć loadkeys(1), dumpkeys(1) oraz showkey(1):
Jeśli twój system linuxowy nie posiada tych narzędzi, możesz je zdobyć
poprzez ftp jako pakiet kbd-0.89.tar.gz lub kbd-0.90.tar.gz z
sunsite.unc.edu:/pub/Linux/system/Keyboards, lub
tsx-11.mit.edu:/pub/linux/sources/system Powinieneś użyć
GNUsowskiego tar aby wypakować potrzebne pliki.
Jądro Linuxa zawiera skompilowany kod defkeymap.c, który tworzony jest
narzędziem loadkeys(1) z pliku defkeymap.map. Oba pliki umieszczone są
w katalogu src/linux/drivers/char.
Potrzebujemy zmodyfikować plik defkeymap.map, tak więc zróbmy jego
lokalną kopię przez
# cp defkeymap.map my_keytable.map
lub
# dumpkeys > my_keytable.map
Istnieje także duży zbiór różnych plików z układami klawiatury w
katalogu /usr/lib/kbd/keytables, z których defkeymap.map
może zostać użyty w twoim systemie w miejsce
src/linux/drivers/char/defkeymap.map.
Poleca się metodę używającą dumpkeys(1), ponieważ zdarzyć się może iż
twoje jądro było już modyfikowane lub utworzony dla ciebie z innym
plikiem defkeymap.map niż ten który możesz znaleźć.
Przeczytajmy zawartość pliku my_keytable.map: znajduje się tam ponad
300 linii kodu, i możemy tam znaleźć trzy grupy deklaracji: pierwsza
składa się z linii zawierających słowo "keycode", być może z dołączonymi
dodatkowymi słowami w rodzaju "alt", "control", itd. Druga grupa
składa się z linii ze słowem "string", trzecia z linii ze słowem
"compose".
Więcej o składni tego pliku można przeczytać w keytables(5)
Jako przykład przypisania makrołańcucha naciśnięciu klawisza funcyjnego,
każmy Ctrl-F1 wywoływać nasz skrypt /usr/local/bin/key_macro.
Po pierwsze powinniśmy dowiedzieć się jaki jest kod klawisza funkcyjnego F1. Możemy narzędzia użyć showkey(1) i poznać kod naciskając F1.
Zamiast tego możemy poszukać ciągu "F1" w pliku my_keytable.map i
znaleźć następującą linię:
keycode 59 = F1
Sugeruje to że kodem klawisza dla F1 jest 59. Linia ta określa również że po naciśnięciu F1 sterownik klawiatury powinien wysłać łańcuch oznaczony kodem "F1". Aby zobaczyć zawartość tego łańcucha, poszukać można wzoru "string F1" i znaleźć
string F1 = "\033[[A"
Oznacza to że po naciśnięciu klawisza F1 sterownik klawiatury wysyła "Esc [ [ A" (bez spacji).
Nie powinniśmy zmieniać tego łańcucha, ponieważ niektóre aplikacje polegają na nim jako na domyślnej czynności klawisza F1.
Możemy jednak zdefiniować nową czynność dla Ctrl-F1, założywszy że nie jest ona zarezerwowana przez jądro dla innych specjalnych czynności. Aby obejrzeć przypisania klawisza F1 razem z Ctrl, Shift i innymi trybami, możemy zaglądnąć do pliku my_keytable.map używając:
# grep 59 my_keytable.map
W przypadku gdy nie ma tam linii z "control keycode 59", możemy użyć Ctrl-F1 bez problemów (gdy istnieje linia z "shift control keycode 59 nadal wszystko jest ok).
Dodajmy następującą linię do pliku my_keytable.map:
control keycode 59 = key_symbol
gdzie "key_symbol" określać będzie czynność klawisza Ctrl-F1. Jądro
1.2.* pozwala na dynamiczną alokację łańcuchów, ale nazwa dla "key_symbol"
musi zostać wybrana tylko z ustalonego zbioru nazw. Między innymi
dozwolone są symbole F1-F246. Dla my_keytable.map w moim systemie
nieużywane było F21, ale powinieneś obejrzeć swój plik i wybrać
odpowiedni klawsym. Możemy więc dopisać linię:
control keycode 59 = F21
Teraz musimy zdefiniować zawartość F21, dodając linię
string F21 = "/usr/local/bin/key_macro\n"
Podsumowywując, uczyniliśmy dwie zmiany w stosunku do oryginalnego
my_keytable.map: zadeklarowaliśmy nowy łańcuch F21 oraz to że Ctrl-F1
będzie wywoływać zawartość F21.
Zmieniwszy właściwie my_keytable.map możemy skopiować zmiany do sterownika klawiatury jądra używając narzędzia loadkeys(1):
% loadkeys my_keytable.map
Pozwolenie modyfikacji sterownika klawiatury jądra dawane jest każdemu
kto posiada prawa odczytu urządzenia /dev/console.
Aby sprawdzić czy zamierzone zmiany zostały zainstalowane, możemy użyć narzędzia dumpkeys(1) by sprawdzić wartość F21, na przykład:
% dumpkeys | grep F21
Możemy zobaczyć:
keycode 59 = F1 F11 Console_13 F21
string F21 = "/usr/local/bin/key_macro\012"
co jest ok, bowiem "\012", lub LF, odpowiada \n
Teraz naciśnięcie Ctrl-F1 powinno wywołać skrypt /usr/local/bin/key_macro, tak jak zamierzaliśmy.
Zmiany w sterowniku klawiatury jądra narzucone loadkeys(1) trwają do następnego przeładowania systemu (albo następnego odwołania do loadkeys).
Możemy zmienić plik /etc/rc.d/rc.local aby wywołał loadkeys z naszym
plikiem my_keytable.map jako argumentem. Zamiast tego zmodyfikować
możemy src/linux/drivers/char/defkeymap.c i ponownie skompilować
jądro z nowymi wartościami domyślnymi.
Nie powinniśmy zmieniać pliku defkeymap.c ręcznie, lecz raczej
wygenerować go narzędziem loadkeys(1):
# mv defkeymap.c defkeymap.c.ORIG
# loadkeys --mktable my_keytable.map > defkeymap.c
Następnie powinniśmy wygenerować nowe jądro, zasadniczo zmieniając katalog na bazowy katalog źródeł jądra, i używając make(1).
W końcu, powinniśmy użyć lilo(1) aby zainstalować i załadować nasze nowe jądro.
Szczególnie użytecznym skryptem dla prostych operacji związanych z naciskaniem klawiszy może być skrypt powłoki przygotowywujący, bądź drukujący, zrzut ekranu.
Przykład ten uległ zmianie od czasów wersji 1.0 Linuxa, z powodu zmian w jądrze, które nie udostępnia już wywołania systemowego ioctl(0,TIOCLINUX).
Aby przeczytać zrzuty ekranu wirtualnej konsoli należy wpierw przygotować parę plików urządzeń. Jako root możemy stworzyć co następuje:
# mknod /dev/vcs1 c 7 1
# mknod /dev/vcs2 c 7 2
...
# mknod /dev/vcs63 c 7 63
Oczywiście wystarczy mieć tylko pliki /dev/vcs* odpowiednie dla wirtualnych
konsoli których się używa.
Kod poniżej powinien być uważany za przykład możliwego pliku
/usr/local/bin/key_macro:
#!/bin/sh
#
# Oto przykład użytecznego skryptu key_macro
#
VT_NUMBER=`tty|cut -c9-`
FILE=/tmp/vt$VT_NUMBER.dump
cp /dev/vcs$VT_NUMBER $FILE
echo zrzut ekranu zachowany w $FILE
#
# Odkomentuj poniższą linię gdy chcesz by zrzut był drukowany
# lpr $FILE
Nie ma praktycznego limitu sumy długości wszystkich łańcuchów które moglibyśmy chcieć załadować do sterownika klawiatury. Poprzedni stały bufor długości FUNC_BUFSIZE (ustawiony na 512 bajtów) został w Linuxie 1.2.* zastąpiony strategią dynamicznego przydzielania buforów w kawałkach po 512 bajtów każdy.
Najświeższą kopię Keystroke-HOWTO znaleźć można w
"ftp.netcom.com:/pub/ze/zenon/linux/howto" name="ftp.netcom.com:/pub/ze/zenon/linux/howto">
W razie gdybyś znalazł coś wartego dodania do tego dokumentu, prześlij
proszę swoje uwagi na adres
"mailto:zenon@netcom.com" name=
"zenon@netcom.com"> - dzięki (zf).
doc-linux-pl-2002.06.14.orig/html/Large-Disk-HOWTO.pl.html 0100664 0001750 0001750 00000054361 07473012340 021466 0 ustar coven coven
Załóżmy, że posiadasz dysk z więcej niż 1024 cylindrami. Co więcej załóżmy, że posiadasz system który korzysta z BIOSu. Wtedy masz problem. Masz problem ponieważ zwykły interfejs We/Wy twojego dysku realizowany przez przerwanie BIOSu INT13, które do przekazywania numeru cylindra, na którym ma zostać wykonana operacja We/Wy korzysta z 10-cio bitowego pola, przez co cylindry o numerze 1024 i wiekszym są niedostępne.
Na szczęście Linux nie korzysta z BIOSu, więc nie ma tego problemu.
No prawie, poza dwoma przypadkami:
(1) Kiedy uruchamiasz swój system, Linux jeszcze nie działa i nie potrafi uchronić cię przed kłopotami z BIOSem. Ma to wpływ na pracę LILO i innych ładowaczy systemów (boot loaders).
(2) Wszystkie systemy operacyjne korzystające z tego samego dysku muszą zgadzać się co do położenia poszczególnych partycji. Innymi słowy, jeśli korzystasz na jednym dysku z Linuxa i powiedzmy DOSu, wtedy oba muszą interpretować tabelę partycji w ten sam sposób. Ma to wpływ na sposób zachownia jądra i programu fdisk.
Poniżej znajdziesz sczegółowy opis wszelkich istotnych szczegółów. Zauważ, że wszelkie informacje odnoszą się do jądra w wersji 2.0.8. Inne wersje jądra mogą zachowywać się troszkę inaczej.
Podczas ładowania systemu, BIOS odczytuje z pierwszego dysku twardego (lub z dyskietki) sektor 0 (znany jako główny sektor startowy (Master Boto Record, MBR)) i wykonuje skok do znalezionego tam kodu - zwykle do programu ładowania początkowego. Te małe programy ładujące (ładowacze) jakie się tam znajdują, nie posiadają wlasnych drajwerów dyskowych i korzystają z funkcji BIOSu. To znaczy, że jądro Linuxa może zostać załadowane, tylko wtedy gdy w całości znajduje się poniżej 1024 cylindra.
Ten problem można bardzo łatwo rozwiązać. Upewnij się, że jądro (i być może inne pliki wykorzystywane do startu systemu, np. pliki odzworowań programu LILO) znajdują się na partycji, która w całości zawiera się w obszrze ponizej 1024 cylindra dysku, do którego BIOS ma dostęp - zwykle pierwszy lub drugi dysk twojego komputera.
Poza tym ładowacz i BIOS muszą się zgadzać w sprawie geometrii dysku. Tutaj może okazać się pomocne skorzystanie w konfiguracji LILO z opcji linear. Więcej szczegółów później.
Jeśli posiadasz na jednym dysku kilka systemów operacyjnych, wtedy każdy z nich używa jednej lub więcej partycji. Niezgodność w ocenie, gdzie te partycje się dokładnie znajdują może mieć katastrofalne konsekwencje.
Rekord MBR zawiera tabelę partycji określającą, gdzie znajdują się partycje (podstawowe). Tabela zawiera 4 pozycje (dla 4 partycji) i wygląda mniej więcej tak:
struct partition {
char active; /* 0x80: startowa, 0: nie strtowa */
char begin[3]; /* CHS pierwszego sektora partycji */
char type;
char end[3]; /* CHS ostatniego sektora partycji */
int start; /* 32 bitowy numer sektora (licząc od 0) */
int length; /* 32 bitowa liczba sektorów */
};
(gdzie CHS oznacza numer cylindra/głowicy/sektora).
Jak widać informacja jest nadmiarowa: lokalizacja partycji jest podana
zarówno w 24-ro bitowych polach begin i end, oraz w 32-dwu
bitowych polach start i length.
Linux korzysta jedynie z pól start i length, dlatego potrafi
obsłużyć partycje o liczbie sektorów nie przekraczającej 2^32
tzn. partycje o rozmiarze nie większym niż 2 TB. Czyli dwieście razy
większą od dysków obecnie dostępnych na rynku. Możemy mieć nadzieje,
że będzie to wystarczające na najbliższe 10 lat, a może więcej.
Niestety, funkcja BIOSu INT13 korzysta z inforamacij CHS zakodowanych w polach 3bajtowych, przy czym na numer cylindra przeznaczonych jest 10 bitów, 8 bitów na numer głowicy i 6 bitów na numer sektora na ścieżce. Dozwolone numery cylindrów to 0-1023, głowic 0-255 i dozwolona liczba sektorów na ścieżce wynosi 1-63 (tak, sektory na ścieżce są liczone od 1, a nie od 0). Na tych 24 bitach można zaadresować nie więcej niż 8455716864 bajtów (7.875 GB), dwieście razy więcej niż rozmiar dysków dostępnych w roku 1983.
Kolejne, ważniejsze (groźniejsze) ograniczenie polega na tym, że standard interfejsu IDE pozwala jedynie na: 256 sektorów na ścieżce, 65536 cylindrów i 16 głowic. Sam w sobie pozwala na dostęp do 2^37 = 137438953472 bajtów (128 GB), lecz w połączeniu z ograniczeniami nałożonymi przez BIOS, faktycznie umożliwia na dostęp tylko do 528482304 bajtów (504 MB).
Nie jest to wystarczające dla dostępnych obecnie dysków i ludzie są zmuszeni do stosowania różnego rodzaju sztuczek, zarówno sprzętowych, jak i programowych.
Nikogo nie interesuje jaka jest `rzeczywista' geometria dysku. Tak na prawdę, liczba sektorów na ścieżce często jest zmienna - więcej na ścieżkach zewnętrznych i mniej na ścieżkach wewnętrznych - nie ma tak na prawdę `rzeczywstej' liczby sektorów na ścieżce. Dla użytkownika najwygodniej jest traktować dysk jako liniową tablicę sektorów, ponumerowanych 0,1 ... i pozostawić sterownikowi zadanie odnalezienia położenia danego sektora na dysku.
To numerownie liniwe znane jest pod skrótem LBA. Adres liniowy należacy do sektora (c,h,s) dla dysku o geometrii (C,H,S) jest równy c*H*S+h*S+(s-1). Wszystkie sterowniki SCSI porozumiewają się według standardu LBA, niektóre sterowniki IDE również.
BIOS zamienia 24-bitowe pole (c,h,s) na adres LBA i przekazuje to sterownikowi, który rozumie co to jest LBA. Dzięki temu ponownie mamy dostęp do 7.785 GB. Nie jest to wystarczające dla wszystkich dysków, lecz jest to lepsze niż to co było. Zauważ, że CHS wykorzystywane przez BIOS nie ma żadnego związku z rzeczywistością.
Coś poddobnego dzieje się w sytuacji, gdy sterownik nie rozumie adresów LBA, lecz BIOS wie o translacji (w Setupie BIOSu jest to zwykle oznaczane jako `Large'). Teraz BIOS prezentuje systemowi operacyjnemu geometrię (C',H',S') i używa geometrii (C,H,S) do komunikacji ze sterownikiem. Zwykle S=S' C'=C/N i H'=H*N, gdzie N jest najmniejszą potęgą 2, zapewniającą spełnienie warunku ' <= 1024 (w celu zminimalizowania marnującej się przestrzeni przez zaokrąglenie w dół C'=C/N). Ta metoda również pozwala uzyskać dostęp do 7.875 GB.
Jeśli BIOS nic nie wie na tema `Large' lub LBA, wtedy pozostają rozwiązania oparte na odpowiednich drajwerach. Takie programy, jak OnTrack lub Ez-Drive zamieniają programy obsługi dysku należące do BIOSu na własne. Często jest to realizowane, przez umieszenie kodu należacego do Disk Managera w rekordzie MBR i kolejnych sektorach dysku (OnTrack nazywa to DDO: Dynamic Drive Overlay) aby był on uruchamiany przed załadowniem jakiegokolwiek systemu operacyjnego. To wyjaśnia kłopoty związane ze startowniem systemu z dyskietki, dla dysków z zainstalowanym programem Disk Manager.
Efekt całego tego zamieszania jest mniej więcej taki sam, jak w przypadku translacji przez BIOS - lecz w sytuacjach, gdy na jednym dysku znajduje się wiele systemów operacyjnych programy typu Disk Manager mogą sprawiać wiele kłopotów.
Linux od wersji 1.3.14 rozpoznaje istnienie programu Boot Manager firmy OnTrack i od wersji 1.3.29 firmy EZ-Drive. Więcej szczegółów znajdziesz dalej.
Jeśli jądro Linuxa rozpozna istnienie na dysku IDE programu typu disk
manager, spróbuje przeprowadzić identyczną translację jaką robi ten
właśnie program, tak aby widzieć te same partycje co np. MS-DOS z
programe OnTrack lub EZ-Drive. Jeśli jednak w parametrach startowych
zostanie przekazana geometria dysku, nie jest wykonywana żadna
translacja. Tak więc opcja startowa
`hd=cyls,heads,secs' może zniszczyć
zgodność z programem typu disk manager.
Translacja wykonywana przez jądro polega na wypróbowaniu kolejno liczby głowic równej 4, 8 ,16, 32, 128, 255 (utrzymując stałą wartość H*C) aż do spełnienia warunku C <= 1024 lub H = 255.
Trochę uwag na temat tekstu poniżej - nagłówki podrozdziałów są identyczne z pojawiającymu się w komunikatach startowych. Tutaj i w całym tekscie typy partycji podane są szesnastkowo.
Rozpoznano drajwer EZ-Drive poniważ pierwsza partycja
podstawowa jest typu 55. Geometria dysku podlega opisanej powyżej
translacji i tabela partycji z sektora 0 zostaje pominięta - zmiast
tego korzystamy z tabeli partycji znajdującej się w sektorze 1. Numery
bloków dyskowych pozostają niezmienione, lecz zapis sektora 0 zostaje
przekierowany do sektora 1. To zachownie może zostać zmienione przez
ponowne skompilowanie jądra przy zdefiniowaniu w pliku ide.c #define FAKE_FDISK_FOR_EZDRIVE 0 .
Rozpoznano drajwer OnTrack Manager (na pierwszym dysku) ponieważ pierwsza partycja podstawowa jest typu 54. Geometria dysku podlega opisanej powyżej translacji i cały dysk zostaje przesunięty o 63 sektory (tak więc stary sektor 63 staje się sektorem 0). Następnie nowy rekord MBR (z tabelą partycji) zostaje odczytany z nowego sektora 0. To przesunięcie oczywiście ma na celu zrobienie miejsca dla DDO - dlatego nie jest wykonywane dla innych dysków.
Rozpoznano drajwer OnTrack Manager (na innych dyskach) ponieważ pierwsza partycja podstawowa jest typu 51 lub 53. Geometria dysku podlega opisanej powyżej translacji.
Rozpoznano starszą wersję drajwera OnTrack Manager poniważ znaleziono podpis drajwera (sprawdzono, że przesunięcie znalezione w 2-gim i 3-cim bajcie rekordu MBR nie jest większe od 430, i zmienna typu short znaleziona pod tym adresem jest równa 0x55AA, po której występuje bajt nieparzysty). Geometria dysku podlega opisanej powużej translacji.
Na końcu wykonywany jest test próbujący wydedukować istnienie
translacji na podstawie wartości pól start i end partycji
podstawowej:
Jeśli cylinder początkowy i końcowy jednej z partycji jest mniejszy od
256, a sektory początkowy i końcowy mają numery odpowiednio 1, i 63, a
końcowe numery głowic są równe 31, 63 lub 127, wtedy wnioskujemy, że
translacja dysku jest aktywna, i wykorzystujemy liczbę głowic
równą odpowiednio 32, 64 i 127 (ponieważ zwykle partycja kończy się na
granicy cylindra i interfejs IDE nie pozawala na więcej niż
16 głowic). Być może jest tu błąd i genhd.c nie powinien
sprawdzać dwóch najwyższych bitów zmiennej przechowującej numer
cylindra? Jednakże nie wykonuje się żadej translacji, jesli aktualny
pogląd na istniejącą geometrię już zakłada 63 sektory na ścieżce i co
najmniej tyle samo głowic (ponieważ to prawdopodownie oznacza, ze
translacja już została dokonana).
Jakie to wszystko ma znaczenie? Dla użytkowników Linuxa tylko jedno: muszą się upewnić, że LILO i fdisk używają `poprawnej' geometrii, gdzie `poprawna' w przypadku fdiska jest rozumiana jako geometria używana przez inne systemy operacyjne znajdujące sie na tym samym dysku, a w przypadku LILO, że jest to geometria pozwalająca na poprawną współpracę z BIOSem podczas ładowania systemu.
Jak fdisk dowiaduje się o geometrii?
Pyta się jądra przy pomocy funkcji ioctl HDIO_GETGEO.
Lecz użytkownik może podać dowolną geometrię dysku przez parametry w
wierszu poleceń lub później w samym programie.
Jak LILO dowiaduje się o geometrii dysku? Pyta się jądra przy pomocy
funkcji ioctl HDIO_GETGEO. Lecz użytkownik może podać łasne
inforamacje z pomocą opcji `disk='. Można również skorzystac z
opcji linear, co spowoduje, że LILO zachowa w pliku odwzorwania (map
file) adres LBA, zamiast CHS i podczas ładowania sytemu odczyta
geometrię dysku (wykorzystujęc funkcję nr 8 przerwania INT 13).
Skąd jądro wie co odpowiedzieć?
Ha!, po pierwsze użytkownik może przekazć mu odpowiednie informacje
jako parametr wiersza zachęty startowej:
`hd=cyls,heads,secs'.
W innym przypadku jądro przepyta na ten temat sprzęt.
Trochę szczegółów. Drajwer IDE posiada cztery źródła informacji o geometrii dysku. Pierwsze (G_user) to dane podane przez użytkwonika w wierszu zachety. Drugie (G_bios) to inforamcje BIOSu (tylko dla pierwszego i drugiego dysku), które są odczytywana podczas uruchamiania systemu, przed przełączeniem się w tryb 32-bitowy. Trzecie (G_phys) i czwarte (G_log) są przekazywane przez sterownik IDE jako odpowiedź na polecenie IDENTIFY - są to `fizyczna' i aktualna `logiczna' geometria dysku.
Z drugiej strony, sterownik potrzebuje dwóch informacji o geometrii
dysku: lecz posiada z jednej strony G_fdisk, przekazywane przez funkcję ioctl
HDIO_GETGEO, a z drugiej strony G_used, które jest naprawdę
wykorzystywane do wykonywania operacji We/Wy. Zarówno G_fdisk, jak i
G_used są inicjowane: wartościami G_user jeśli są podane, G_bios jeśli
ta inforamcja jest dostepna wg. CMOS, lub G_phys w przeciwnym wypadku.
Jesli G_log wygląda rozsądnie to G_used przybiera tę własnie
wartość. W przeciwnym wypadku, jeśli G_used nie ma większego sensu i
G_phys wygląda OK, wtedy G_used przyjmuje wartość G_phys. W tym
przypadku `rozsądnie' oznacza, że liczba głowic jest w zakresie 1-16.
Innymi słowy parametry wiersza zachęty są ważniejsze od informacji pobranych z BIOSu i określają jaką geometrię widzi fdisk, lecz jeśli podane informacje odpowiadają geometri poddanej translacji (wiecej niż 16 głowic), wtedy operacje We/wy jądra zostaną zastąpione odpowiedzią sterownika na polecenie IDENTIFY.
Sytuacja w przypadku SCSI jest trochę inna, ponieważ polecenia SCSI
używają logicznych numerów bloków, tak więc geometria dysku nie ma
absolutnie żadnego znaczenia dla operacjami We/Wy.
Jednakże format tabeli partycji jest ciągle ten sam, więc fdisk musi
wymyśleć jakąś geometrię i również w tym przypadku korzysta z funkcji
HDIO_GETGEO - w rzeczywistości fdisk nie rozróżnia dysków IDE i
SCSI. Jak każdy może się sam przekonać (na podstawie szczegółowego
omówienia poniżej) poszcególne drajwery wymyślają różne
geometrię. Rzeczywiście jeden wielki balagan.
Jeśli nie korzystasz DOSu, to unikaj wszelkich ustawień rozszerzonych translacji i jeśli to możliwe, używaj ustawień 64 głowice, 32 sektory na ścieżce (wtedy jeden cylinder ma ładny rozmiar 1MB). Unikniesz problemów, gdy przeniesiesz dysk z jednego sterownika do innego. Niektóre dyski SCSI (aha152x, pas16, ppa, qlogicfas, qlogicisp) są tak nerwowe w sprawach zgodności z MS-DOSem, że nie pozwolą systemowi z zainstalowanym wyłącznie systemem Linux na wykorzystanie więcej niż 8GB. To jest błąd.
Jaka jest rzeczywista geometria? Najprostsza odpowiedź mówi, że nie ma czegoś takiego. I gdyby była, to nie chciałbyś wiedzieć, i na pewno NIGDY, ale to PRZENIGDY nie mów o tym fdiskowi, LILO lub jądru. To jest po prostu sprawa pomiędzy dyskiem i sterownikiem SCSI. Pozwolisz, że powtórzę: tylko głupcy mówią fdiskowi/LILO/jądru o rzeczywistej geometrii dysków SCSI.
Lecz jeśli jesteś ciekaw i nalegasz, możesz spytać o to sam dysk. Istnieje bardzo ważne polecenie READ CAPACITY, które przekazuje całkowią objętość dysku, a drugie polecenie MODE SENSE (patrz Rigid Disk Drive Geometry Page (strona 04)) pozwala odczytać liczbę cylindrów i głowic (ta informacje nie może być zmieniona), natomiast w Format Page (strona 03) podaje liczbę bajów w sektorze i liczbę sektorów w ścieżce. Ta ostania liczba jest zwykle zależna od wycięcia (notch) i liczba sektorów na ścieżce jest zmienna - ścieżki zewnętrzne posiadają więcej sektorów, wewnętrzne mniej. Program pracujący pod Linuxem o nazwie scsiinfo poda ci te wszystkie informacje.
Jest wiele szcegółów i komplikacji, i jest jasne, że nikt (prawdopodobnie nawet sam system operacyjny) nie chce wykorzystywać tej informacji. Co więcej, tak długo jak martwimy się tylko o fdisk i LILO, zwykle otrzymuje się odpowiedz typu C/H.S=4476/27/171 - wartości, które nie mogą być wykorzystane przez fdisk, ponieważ tabela partycji rezerwuje jedynie dla C/H/S odpowiednio 10/8/6 bitów.
To skąd na ten temat bierze informację funkcja HDIO_GETGEO ?
Cóz, albo ze sterownika SCSI lub zgaduje. Wygląda, że niektóre dyski
myslą, że interesuje nas `rzeczywistość', lecz nas oczywiście
interesuje jedynie jakie parametry będą używane przez FDISK pod DOSem
czy OS/2 (lub AFDISK Adapteca).
Pamiętaj, że fdisk Linuxa potrzebuje znać liczbę głowic H i sektorów na ścieżce S, aby móc zamienić numer sektora w foramcjie LBA na adres c/h/s, lecz liczba cylindrów C nie ma znaczenia w tej konwersji. Niektóre dyski używają (C,H,S)=(1032,255,63) w celu zasygnalizowania, że dysk ma co najmniej 1023*255*63 sektorów. Niestety to nie ujawnia aktualnego rozmiaru dysku i będzie ograniczało użytkowników większości wersji programu fdisk do wykorzstania tylko około 8GB ich dysków - w dzisiejszych czasach jest to poważne ograniczenie.
W opisie przedstawionym poniżej, M oznacza całkowitą pojemność dysku, a C,H i S liczbę cylindrów, głowic i sektorów na ścieżce. Jeśli traktujemy C jako wynik działania C = M / (H*S), wtedy wystarczy podać H i S.
Domyślnie H=63,S=32.
H=64, S=32.
H=64, S=32 unless C > 1024, W takim przypadku H=255, S=63, C = min(1023, M/(H*S)). (Tak więc C jest obcięte i h*s*C nie jest aproksymacją rozmiaru dysku M. Taka sytuacja potrafi ogłupić większość wersji programu fdsik.) Kod w pliku ppa.c wykorzystuje M+1 zamiast M i twierdzi, że to z poowdu błędu w sd.c M jest przesunięte o 1.
H=64, S=32 chyba, że C > 1024 i co więcej przy włączonej opcji BIOSu `> 1 GB', co w takim przypadku daje H=255, S=63.
Spytaj sterownika, który z możliwych dwóch schematów translacji jest w użyciu, i użyj albo H=255, S=63 lub H=64, S=32. W ostanim przypadku wyświetlany jest komunikat startowy "aha1542.c: Using extended bios translation".
H=64, S=32 chyba, że C > 1024, i co więcej jeśli przekazano parametr startowy (boot) "extended", lub jeśli w pamięci SEEPROM, lub BIOSie był ustawiony bit `extended', to w takim przypadku przyjmuje się H=255, S=63.
H=64, S=32 chyba, że C >= 1024, i co więcej na sterwoniku została włączona translacja rozszerzona, co w takim pryzpadku powoduje przyjęceie parametrów H=128, S=32 jeśli M < 2^22 lub H=255, S=63 w przeciwnym wypadku. Jednakże po dokonaniu wyboru (C,H,S) odczytywana jest tabela partycji i jeśli dla jednej z trzech możliwości (H,S) = (64,32), (128,32), (255,63) gdziekolwiek zgadza się równość endH=H-1, wtedy stosowana jest dana para (H,S) i wyświetlany jest komunikat "Adopting Geometry from Partition Table".
Znajduje parametry w tabeli parametrów dysku BIOSu, lub odczytuje tabelę partycji i używa translacji H=endH+1, S=endS w przypadku pierwszej partycji (pod warunkiem, że nie jest pusta), lub używa H=64, S=32 w przypadku gdy M < 2^21 (1 GB), lub H=128, S=63 jeśli M < 63*2^17 (3.9 GB) w przeciwnym wypadku. H=255, S=63.
Użyj pierwszej pary (H,S) = (64,32), (64,63), (128,63), (255,63), dla której zajdzie nierówność C <= 1024. W przeciwnym wypadku skróć C do 1023.
Odczytuje C,H,S z dysku. (Horror!) Jeśli C lub S jest zbyt duże wtedy przyjmuje S=17,H=2 i podwaja H aż V <<;= 1024. To znaczy, że H będzie miało wartość 0, jeśliM > 128*1024*17 (1.1 GB). To jest błąd.
W zależności o trybu sterownika wykorzystywane jest jedno z następujących odwzoroań:((H,S) = (16,63), (64,32), (64,63))
Zobacz tabelę partycji. Ponieważ powszechnie partycja kończy się na
granicy cylindra, znając dla każdej partycji end =
(endC,endH,endS) możemy po prostu przyjąć H = endH+1 and S =
endS. (Przypomnij sobie, że sektory liczy się od 1.) A dokładniej
wykonywana jest następująca operacja.
Jeśli istnieje niepusta partycja, odczytaj tę o największej wartości
beginC. Dla tej partycji sprawdź end+1, obliczone przez
dodanie start i length przy założeniu, że ta partycja kończy
się na granicy sektorów. Jeśli obie wartości się zgadzają lub jeśli
endC = 1023 i start+length jest całkowitą wielokrotnością
(endH+1)*endS, wtedy możemy założyć, że ta partycją rzeczywiście
była wyrównana do granicy cylindra i przyjąć H = endH+1 i S =
endS.
Jeśli jednak tak nie jest, a to dlatego, że nie ma żadnej partycji,
lub dlatego, że partycje mają dziwne rozmiary wtedy spróbuj
wykorzystać pojemność dysku M. Algorytm: przyjmij H=M/(62*1024)
(zaokrąglone w górę), S = M/(1024*H) (zaokrąglone w gorę), C = M/(H*S)
(zaokrąglone w dół). W ten sposób otrzymamy geometrię (C,H,S), prz
czym C nie przekroczy 1024, a S 62.
Wszelkie uwagi na temat tłumaczenia mile widziane. Uwagi merytoryczne prosze kierować do autora tekstu angielskiego, chyba że podejżewasz, że są one wynikiem błędnego tłumaczenia.
Inne dokumenty HOWTO przetłumaczone na język polski znajdziesz tutaj: http://www.ippt.gov.pl/~ppogorze/Linux/JTZ/.
Wersje txt i html lepiej nadajace sie do druku sa tutaj: ftp://www.ippt.gov.pl/pub/Linux/JTZ/.
doc-linux-pl-2002.06.14.orig/html/META-HOWTO.pl.html 0100664 0001750 0001750 00000040433 06770264140 020273 0 ustar coven coven
Linux jest niezależną implementacją systemu operacyjnego zgodnego ze standardem POSIX, z rozszerzeniami pochodzącymi z systemów SYSV i BSD, który został stworzony od samego początku (wygląda i zachowuje się jak Unix). Nie ma w nim prawnie zastrzeżonego kodu. Linux jest swobodnie rozpowszechniany na warynkach Licencji GNU Public License. Działa na komputerach zgodnych IBM PC o architekturze ISA lub EISA (z różnymi wariantami magistrali lokalnej VLB i PCI) z procesorem 386 lub lepszym.
Dodatkowo, został przeniesiony na komputery typu Amiga i Atari z jednostami MMU. To znaczy proesory 68020 z zewnętrznymi jednostami MMU, 68030, 68040 lub 68060. Wymagana jest również jednostak FPU (koprocesor), cybą, ze ktoś w końcu napisze emulator FPU. Patrz /pub/linux/680x0 w mirrorach tsx-11.mit.edu.
Aktualne versje jądra obslugują również architekturę DEC Alpha i Sun SPARC. Dystrybucja RedHat Commercial Linux jest aktualnie jedyną dystrybucją dla procesorów Alpha. Dla procesora SPARC dostępna jest dystrybucja Red Hat i Debian (lub wkrótce będzie).
Obsługa ARM, PowerPC i MIPS jest w różnych stadiach rozwoju. Czytaj comp.os.linux.announce.
Dokładne inforamcje o wymaganiach sprzętowych znajdziesz w FAQ. Jądro Linuxa zostało napisane przez Linusa Torvaldsa (Linus.Torvalds@.Helsinki.FI) z Finlandii i wielu innych ochotników z całego świata. Większość oprogramowania pracującego pod Linuxem jest darmowa, wiele z nich pochodzi z projektu GNU.
Zbiór najczęściej zadawanych pytań wraz z odpowiedziami, w którym odpowiedź na większość pytań znajdziesz szybciej niż w sieci. Dostępny w większości archiwów ftp (/pub/linux/docs na tsx-11.mit.edu) i rtfm.mit.edu, podstawowym miejscu przechowywania wszelkich dokumentów FAQ.
Podobne do FAQ, lecz zamiast odpowiedzi na częste problemy wyjaśniają jak wykonać różne, powszechne zadania, np. jak zamówić dystrybucję Linuxa, jak skonfigurować drukarkę, zestawić podstawowe połąćzenie UUCP w celu dystrybucji Usenet News, itp. Zobacz sunsite.icm.edu.pl /pub/Linux/sunsite/docs/HOWTO, znajdziesz tam pełen zestaw najnowszych wersji wszystkich dokumentów HOWTO. Inne miejsca z aktualnymi kopiami to susnite.icm.edu.pl ftp.cc.gatech.edu i tsx-11.mit.edu.
Dodatkowo, istnieje wiele którkich, dowolnie sormatowanych dokumentów nazwanych mini-HOWTO. Opisują bardzo specyficzne tematy, np. co to jest BogoMIPS lub jak używać Color-ls. Są dostępne w katalogu /pub/Linux/susnite/docs/HOWTO/mini.
Istnieje kilkanaście grup usenet news na temat Linuxa. W jezyku polskim jest pl.comp.os.linux. Dobrym pomysłem jest też śledzenie grupy comp.os.linux.announce, która jest moderoana przez Larsa Wirzeniusa. Aby umieścić na niej jakąś wiadomość należy ją wysłać do linux-announce@news.ornl.gov. Wszelkie pytania na temat tej grupy należy kierować bezpośrednio do Larsa Wirzeniusa na adres wirzeniu@kruuna.helsinki.fi.
Grupa comp.os.linux.announce jest grupą moderowaną i służy do
umieszczania ogłoszeń na temat nowych wersji programów, poprawek,
ogłoszeń o różnych wydarzeniach dotyczących Linuxa.
Grupa comp.os.linux.answers jest grupą moderowaną, na którą są
przesyłane róznego rodzaju dokumentacje, miedzy innymi Linux FAQ i
wszelkie dokumenty HOWTO.
Grupa comp.os.linux.setup jest grupą niemoderowaną przeznaconą do
dyskusji spraw związanych z konfiuracją Linuxa.
Grupa comp.os.linux.admin jest grupą niemoderowaną przeznaczoną do
dyskusji na temat administrowania Linuxem.
Grupa comp.os.linux.development.system jest grupą niemoderowaną
przeznaczoną do dyskusji na temat rozwoju jądra
Linuxa. Pytania związane z budową różnych aplikacji jakie mogą być
umieszczane w tej grupie muszą dotyczyć wyłącznie współpracy danej
aplikacji z jądrem. Wszelkie inne pytania dotyczące budowy
aplikacji są zwykle specyficzne dla Unixa i powinny być kierowane
do grupy comp.os.unix, chyba że są bardzo specyficzne dla Linuxa, a
wtedy należy je kierować do comp.os.linux.apps.
Grupa comp.os.linux.development.apps jest grupą niemoderowaną
przeznaczoną do dyskusji na tematy związane z budową aplikacji
specyficznych dla Linuxa. Nie jest przeznaczona do poszukiwania
rożnego rodzaju aplikacji pod linuxa, ani nie jest miejscem na
dyskusję jakie aplikacje powinny się pojawić.
Grupa comp.os.linux.hardware służy do dyskusji na temat sprzetu,
lecz pytania muszą dotyczyć Linuxa.
Grupa comp.os.linux.networking służy do dyskusji problemów
związanych z rozwojem obsługi i konfiguracją sieci.
Grupa comp.os.linux.x służy do dyskusji na temat problemów
korzystania z X Window System specyficznych dla Linuxa.
Grupa comp.os.linux.misc jest grupą niemoderowaną, gdzie można
dyskutować na inne tematy, które nie pasują do wymieniownych
wcześniej grup, a które dotyczą Linuxa.
Zasadniczo nie należy wysyłać atykułu do kilku grup jednocześnie (crosssposting). Wyjątkiem jest okazjonalne wysyłanie wiadomości do grupy niemoderowanej i comp.os.linux.announce. Ideą podziału comp.os.linux. na tak wiele grup było zmiejszenie ruchu w każdej z nich. Ci, którzy się temu nie podporządkują będą tępieni bez litości...
Nie zakładaj, że wszystkie twoje pytania są specyficzne dla grup
poświęconych Linuxowi. Jeśli twoje pytanie tak na prawdę dotyczy
programowania w szelu pod unixem lub klonem unixa, to zadaj pytanie
w comp.os.unix.shell. Dotyczy Emacsa? Pytaj w
gnu.emacs.help. Również jeśli nie znasz innej grupy gdzie mógłbyś
zadać to pytanie, lecz wydaje ci się, że powinna istnieć, spytaj
grzecznie w swoim liscie czy ktoś nie zna grypy, która bylaby
lepsza do zadania tego pytania. Użytkownik Linuxa powinie pamiętać
co najmniej o takich grupach, jak
comp.unix.{questions,shell,programming,bsd,admin} i
comp.windows.x.i386unix .
Greg Hankins, gregh@cc.gatech.edu, opiekuje się stroną domową WWW dla projektu Linuxa. URL: http://sunsite.unc.edu/mdw/linux.html
Zanim zaczely powstawać tłumaczenia dokumentów angielskich, powstał http://sunsite.icm.edu.pl/pub/Linux/sunsite/docs/HOWTO/Polish-HOWTO. Chyba pierwszy dokument o Linuxie w Polsce i po polsku.
Na początku 1997 roku zawiązała się grupa osób w celu przetłumaczenia dokumentów HOWTO na język polski. Zobacz http://www.jtz.org.pl/
Kontakt z ludźmi zajmującymi się tłumaczeniem HOWTO na polski to ogólnie dostępna lista jtz@ippt.gov.pl. Można na nią wysłać list nie będąc na tę listę zapisanym, lecz pamiętaj, że jest ona przeznaczona przede wszystkim dla osób pracujących nad tłumaczeniami. Pamiętaj o tym wysyłając tam list.
Już od ponad roku inna grupa ludzi pracuje nad tłuamczeniem komunikatów programów GNU. Dzieki temu już niedługo twój Linux będzie mówił do ciebie po polsku. Więcej informacji znajdziesz pod adresem ftp://ftp.torun.pdi.net/pub/nls.
Wreszcie pojawiło sie pierwsze czasopismo o Linuxie po
polsku. Pierwszy numer został wydany w styczniu 1997. Dp czasopisma
dołączony jest CD-ROM. Cena detaliczna 20 zł. Więcej inforamcji na
ten temat w redakcji linuxplus@software.com.pl, tel/fax (22)
6251308, adres LinuxPlus, Puszczyka 20, 02-784, Warszawa
Czasopismo Linux Jouranl powstało ponad dwa lata temu. Znajdziesz tam artykuły odpowiednie niemal dla każdego poziomu znajomości Linuxa i chce być pomocne dla wszystkich użytkowników Linuxa. Subsktypcja kosztuje $22 w USA, $27 w kanadzie i Meksyku, i $32 dla reszty świata, płatne w doralrach amerykańskich. Prośby o subskrybcje proszę wysyłać pod adres subs@ssc.com lub faxem do USA 1-206-782-7191, lub pocztą na adres Linux Journal, PO Box 85867, Seattle, WA 98145-1867 USA. Jeśli chcesz przesłać numer karty kredytowej pocztą elektroniczną, SSC udostępnia publiczny klucz PGP: finger info@ssc.com.
Inforamcję o darmowym oprogramowaniu dostępnym pod Linuxa można znaleźć w ``Katalogu oprogramowania dla Linuxa'' (Linux Software Map, LSM), ktróą można znaleźć na sunsite.icm.edu.pl w /pub/Linux/sunsite/docs/LSM.gz.
Inforamcje o prowadzonych nie-komercyjnych projektach można znaleźć w ``Spisie projektów'' (Projrcts Map), wysyłanym okresowo do comp.os.linux.announce i przechowywanej w sunsite.unc.edu w katalogu /pub/Linux/sunsite/docs/Projects-Map/Projects-Map.gz.
Informacje o produktach komercyjnych znajdują się w ``Spisie oprogramowania komercyjnego dla Linuxa'' wysłanym okazjonalnie do comp.os.linux.announce.
Kompletna lista archiwów ftp Linuxa znajduje się w dokumencie Linux INFO-SHEET, który zawsze można znaleźć w tsx-11.mit.edu w katalogu /pub/linux/docs/. dostępne są wersje DVI (INFO-SHEET.dvi) i PostScript (INFO-SHEET.ps). Najważniejsze archiwa przedstawiono poniżej. Archiwum najbliżej ciebie znajdziesz w Linux INFO-SHEET.
textual name numeric addr Linux directory
======================= ============== ===============
tsx-11.mit.edu 18.86.0.44 /pub/linux
sunsite.unc.edu 152.2.22.81 /pub/Linux
ftp.funet.fi 128.214.248.6 /pub/Linux
ftp.sunsite.icm.edu.pl 148.81.209.3 /pub/Linux
Pierwsze trzy, są to główne archiwa linuxa, gdzie umieszcane jest najwięcej nowych programów. Istnieje wiele mirrorów, korzystaj z najbliższego (w sensie polączeń sieciowych).
Okazjonanie ktoś przesyła listę BBSów w których jest dostępny
Linux. Możesz z nich korzystać jeśli nie masz dostępu do FTP. Lista
ta jest dostępna w ftp.cdrom.com w pliku
/pub/linux/docs/bbs.list. Jesli nie masz dostępu do ftp możesz ją
otrzymać za pomocą programu ftpmail (opisanego później w tym
dokumencie) lub poproś przyjaciela, który ma distęp do internetu.
Linux jest dystrybuwany przez wielu sprzedawców na dyskietkach, krązkach CD i taśmach. Przeczytaj Distribution HOWTO wysyłane regularnie do comp.os.linux.announce i dostępne w susnite.unc.edu jako /pub/Linux/docs/HOWTO/distribution-HOWTO.
W Polsce Linux jest dostepny głównie przez FTP. Wydawnictwo software wydało krążek z dystrybucją REdHat 3.0.3 jesienią 1996. Wraz z pierwszym numerem LinuxPlus dostępna była płytka CD z dystrybucją RedHat 4.0, drugi nume zawierał Debiana 1.2. Wraz z pojawieniem się LinuxPlus powstała możliwść zdobycia w miarę aktualnej dystrybucji CD, bez konieczności kupowania krązków za granicą lub w firmach specjalizujących się w ich sprowadzaniu.
Linux jest dostępny przez AFS przez zamontowanie wolumenu project.linux z sipb.mit.edu.
Sunsite oferuje usługę ftp-mail --- mail ftpmail@sunsite.unc.edu.
Linux jest rozpowszechniany przez jego autora jako jądro. Inni zgromadzili wokół niego oprogramowanie i stworzyli tzw. dystrybucje, z których powstała ogroman większość instalacji Linuxa. Lączą one jądro udostępnione przez autora z dodtkowym oprogramowaniem budując w ten sposób kompletny system. Wiekszośc dystrybucji zawiera zrówno oprogramowanie systemowe, jak również aplikacje.
Istnieje kilkanaście dystrybucji Linuxa dostępnych w różnych miejscach. Sunsite gromadzi niemal wszystkie z nich i udostępnia w katalogu /pub/Linux/distributions. Najczęsciej polecane, swobodnie dostępne to Red Hat, Debian i Slackware. Wszystkie są dostępne za darmo przez internet, jak również za opłata na krązkach CD.
Istnieją również inne dystrybucje Linuxa. Większość komercyjnych dystrybucji Linuxa ogłasza sięw Linux Journal.
Najpopularniejsza i jedyna w polsce linux@sprocket.pwr.wroc.pl złączona z grupą usenet news pl.comp.os.linux stanowi najlepsze zródło inforamcji o Linuxie w Polsce.
Inne wykorzystywane przede wszystkim przez ludzi pracujących nad rozwojem oprogramowania lub dotyczące dyskusji nie dostępnych publicznie wersji testowych. Adresy znajdziesz w Linux FAQ. Wyślij list na adres majordomo@vger.rutgers.edu z jednym słowem help w treści listu, a otrzymasz list wyjaśniający jak zapisać się na dostepne tam grupy.
Zachowaj te odpowiedz, gdzyż znajdziesz tam informacje jak się z takich grup wypisać. Jesli nie zapoznasz się z inforamacjami w tym liście i bedziesz wysyłał do tych grup z prośbą o wypisanie cię z nich zostaniesz sponiewierany za marnowanie łączy i cudzych pieniędzy.
Wiele programów jest dostępnych z pewnego rodzaju dokumentacją, często wpliku o nazwie README lub podobnej. BARDZO dobrym pomysłem jest uważne przestudiowanie takich plików. Nudno jest oglądać (i odpowiadać) na pytania, na które odpowiedź można znaleźć w dokumentacji.
Projekt dokumentacji dla Linuxa (Linux Dokumentation Project, LDP) opracował mnóstwo dokumentacji. W tej chili jest dostępne ponad 1600 stron dokumentacji w postaci książek udostępnionych do darmowego kopiowania i rozpowszechniania. Powstało również wiele stron podręcznika (man pages) i powstaje ich coraz więcej. Zobacz sunsite.icm.edu.pl:/pub/Linux/sunsite/docs/LDP, znajdziesz tam dokumenty stworzone przez LDP. LDP dostarcza również opisane wcześniej dokumety HOWTO.
Ważne nowe wersje oprogramowania są zwykle ogłaszane w grupie newsowej
comp.os.linux.announce. finger torvalds@klaava.helsinki.fi lub
finger @linux.cs.helsinki.fi aby otrzymać informacje o
najnowszej wersji jądra.
Ostania wersja tego dokumentu powinna być zawsze dostępna pod adresem http://www.jtz.org.pl/Html/META-HOWTO.pl.html, a najnowszą werję angielską na podstawie której powstał ten dokument znajdziesz pod adresem http://sunsite.unc.edu/mdw/linux.html
Znaki firmowe należą do ich właścicieli. Nie gwarantujemy satysfakcji. Żadnych gwarancji związanych z tym dokumentem. Nie jest ważny tam, gdzie jest to zabronione
Zawartość teg odokuemntu jest własnością publiczną (public domain), lecz jeśli bedziesz go cytował, grzeczność nakazuje wspomnieć o autorach.
Prawa autorskie tłumaczenia należą do (c) 1997 piotr.pogorzelski@ippt.gov.pl. Możesz robić z nim co zechcesz pod warunkiem, że zachowasz informacje o prawach autorskich.
Zmiany w stosunku do oryginału to zmiana odwołań sunsite.unc.edu do jego kopii na sunsite.icm.edu.pl, rozdziały o polskich dokumentach i tłumaczeniach, oraz tekst o Linux+.
doc-linux-pl-2002.06.14.orig/html/MILO-HOWTO.pl.html 0100664 0001750 0001750 00000153233 06770264140 020310 0 ustar coven coven
Ten dokument opisuje Miniładowacz (Miniloader) dla Linuxa na Alphę AXP (MILO). To firmware jest używane do inicjalizacji systemów Alpha AXP, załadowania oraz startowania Linuxa i w końcu do zapewnienia kodu PAL (PALcode) dla Linuxa.
Prawa autorskie Alpha Miniloader (MILO) HOWTO: Copyright (C) 1995, 1996 David A. Rusling.
Prawa autorskie. Jak wszystkie Linuxowe dokumenty HOWTO, może być powielane i rozpowszechniane w całości lub w części, za pomocą każdego środka przekazu, fizycznego lub elektronicznego, jeżeli uwaga o prawach autorskich została zachowana na wszystkich kopiach. Komercyjna redystrybucja jest dozwolona i zalecana; jednakże autor chciałby być powiadomiony o takich dystrybucjach. Możesz też przetłumaczyć to HOWTO na dowolny język, jeżeli zostawisz wypowiedź o prawach autorskich oraz oświadczenie niezmienione, oraz dodasz notatkę o tłumaczu.
Oświadczenie. Próbowałem umieścić tu najpoprawniejsze i najnowsze informacje, które są mi dostępne, nie mogę jednak zagwarantować, że ich użycie nie spowoduje utraty danych lub sprzętu. NIE ZAPEWNIAM ŻADNEJ GWARANCJI dotyczącej informacji w tym HOWTO, nie mogę być więc odpowiedzialny za jakiekolwiek skutki użycia danych z niego.
Najświeższa wersja tego dokumentu znajduje się pod adresem ftp://gatekeeper.dec.com/pub/Digital/Linux-Alpha/Miniloader/docs, a David Mosberger-Tang był uprzejmy umieścić go w formacie HTML na jego znakomitej stronie o Linux-Alpha http://www.azstarnet.com/~axplinux/.
Na systemach PC opartych na procesorach Intel, firmware zwane BIOSem uruchamia komputer i ładuje obraz (image) do uruchomienia z bloku startowego systemu plików DOSu. Jest to mniej więcej to samo, co wykonuje MILO na systemach Alpha, jednakże istnieje kilka interesujących różnic pomiędzy BIOSem a MILO, jedną z nich jest używanie przez MILO niezmodyfikowanych standardowych sterowników urządzeń Linuxa. MILO jest firmware'em, inaczej niż LILO, który jest ładowany przez BIOS. Główne funkcjonalne części MILO to:
Dalsze akapity dokładnie opisują funkcjonalne części MILO.
PALcode jest cienką warstwą oprogramowania dostosowującą procesor do konkretnego systemu operacyjnego. Działa w specjalnym trybie (PALmode), który posiada kilka ograniczeń, ale używa standardowego zestawu instrukcji Alphy i tylko pięciu dodatkowych instrukcji. W ten sposób, na procesorze Alpha mogą być uruchamiane systemy tak różne, jak np. Windows NT, OpenVMS, Digital UNIX i oczywiście Linux. PALcode, którego używa MILO (i przez to sam Linux) jest, jak reszta MILO, darmowa. Pochodzi z przykładu ewaluacyjnych płyt głównych (Evaluation Boards, EB) dla Digital UNIXa. Różnice pomiędzy kodami PAL wynikają z różnic w sposobach obsługi przerwań w procesorach Alpha (płyty główne do 21066 mają inną mapę I/O niż systemy 21064+2107x (2107x to APECS, chipset do 21064 - przyp. tłum.)), oraz z liczby dostępnych płyt głównych.
Żeby MILO działał poprawnie, musi znać ilość dostępnej pamięci i miejsce, w którym Linux będzie działał, musi też być w stanie przydzielić tymczasową pamięć dla sterowników urządzeń Linuxa. Kod utrzymuje mapę pamięci, która posiada rekordy dla permanentnie i tymczasowo przydzielonych stron. W czasie uruchamiania MILO dekompresuje się w poprawne miejsce pamięci fizycznej. Kiedy przekazuje kontrolę jądru Linuxa, zarezerwowywuje pamięć dla skompresowanej wersji samego siebie, kodu PAL (który jest potrzebny jądru) i trochę struktur danych. To zostawia większość pamięci w systemie dla samego Linuxa.
Ostatnia część kodu pamięci to ustawienie i włączenie adresowania wirtualnego w celu zapewnienia poprawnego miejsca w wirtualnej pamięci dla struktur danych, które Linux spodziewa się tam zobaczyć.
MILO zawiera kod grafiki, który inicjalizuje i używa urządzenia graficznego dla systemu. Wykryje i będzie używać urządzenie VGA, jeśli takie istnieje, jeżeli nie, będzie próbował użyć urządzenia TGA (21030). Gdy i to się nie powiedzie, przyjmie, że nie istnieje urządzenie graficzne (tylko np. terminale szeregowe - przyp. tłum.). Emulacja BIOSu, którą posiadają standardowe, skompilowane obrazy MILO, to emulacja Digitala, która obsługuje większość, jeżeli nie wszystkie dostępne standardowe urządzenia graficzne.
Sterowniki urządzeń Linuxa ,,żyją'' wewnątrz jądra i spodziewają się od niego konkretnych usług. Niektóre z nich są zapewniane bezpośrednio przez kod Linuxa, np. obsługa przerwań, a inne działają dzięki specjalnym procedurom wyglądającym dla sterowników jak procedury jądra.
Najsilniejsza cecha MILO, to możliwość osadzenia w nim niezmienionych sterowników
urządzeń Linuxa. Daje to potencjał obsługi każdego urządzenia, które obsługuje
Linux. MILO zawiera wszystkie urządzenia blokowe wkompilowane w jadro,
które zostaje przy nim zbudowane, a także dużo kodu urządzeń (np.
ll_rw_blk()).
MILO ładuje jądro Linuxa z prawdziwych systemów plików, a nie z bloków startowych
i innych dziwnych miejsc. Potrafi czytać systemy plików MSDOS, EXT2 i ISO9660.
Pliki spakowane gzipem są obsługiwane i rekomendowane, zwłaszcza jeżeli ładujesz
[system] z dyskietki, co jest dosyć wolne. MILO rozpoznaje je po rozszerzeniu
.gz.
W MILO zawiera prosty sterownik klawiatury, który razem z równie prostym sterownikiem grafiki pozwala posiadać mu spartański interfejs użytkownika. Interfejs ten pozwala poznać systemy plików na skonfigurowanych urządzeniach, ładować Linuxa, uruchamiać programy do uaktualniania pamięci flash, oraz ustawiać zmienne środowiskowe kontrolujące ładowanie systemu. Tak jak w LILO, możesz przekazywać parametry do jądra.
MILO musi powiedzieć jądru Linuxa na jakim działa systemie, ile pamięci posiada i ile z tej pamięci jest wolne. Robi to używając struktury danych HWRPB (blok parametrów restartowania sprzętu) i skojarzonych z nią opisów części pamięci. Są one umiejscawiane w odpowiednim miejscu pamięci wirtualnej zaraz przed przekazaniem kontroli jądru Linuxa.
Jeżeli będziesz chciał uruchamiać Linuxa na standardowych płytach głównych Alphy, możesz użyć pre-kompilowanych, ,,standardowych'' obrazów (images) MILO. (notka od tłumacza: radzę zabootować Alphę ze standardowych obrazów, a potem zbudować własny, gdy Linux będzie już działał) Obrazy te (razem ze źródłami i innymi ciekawymi rzeczami) znajdują się na ftp://gatekeeper.dec.com/pub/Digital/Linux-Alpha/Miniloader
Podkatalog images zawiera po jednym podkatalogu na każdy system (np.
AlphaPC64), a obrazy MILO są nazywane w następujący sposób:
MILO - wykonywalny obraz MILO, może on być ładowany na wiele sposobów,fmu.gz - Program zarządzania pamięcią flash,MILO.dd - Obraz dla dyskietki startowej. Powinien być zapisany programem
rawrite.exe lub dd pod Linuxem.Katalog test-images zawiera, tak jak images po jednym katalogu
na standardowy system. Obrazy znajdujące się w tym katalogu są raczej
eksperymentalne, ale zawierają najnowsze opcje.
(Uwaga: pamiętaj, że nie możesz zbudować MILO i jądra dla Alphy na Intel'u! Musisz dysponować drugą Alphą, albo zbudować jądro po uruchomieniu Linuxa ze standardowych obrazów MILO. Na Intelu jądro nawet się nie zacznie kompilować - spróbuj zbudować jądro na Alphę na pececie - w pliku Makefile zamień ARCH=i386 na ARCH=alpha... - przyp. tłum.)
MILO kompiluje się oddzielnie, nie razem z jądrem. Ponieważ MILO potrzebuje części
jądra do poprawnego funkcjonowania (np. obsługi przerwań), musisz najpierw
skonfigurować i skompilować jądro, odpowiadające MILO, który chcesz skompilować.
Zazwyczaj znaczy to, że powinieneś kompilować jądro z tą samą wersją co MILO.
A więc MILO-2.0.25.tar.gz będzie kompilować się z
linux-2.0.25.tar.gz. MILO może skompilować się z nowszą wersją
jądra, ale nie musi. Dodatkowo teraz, kiedy biblioteki dzielone ELF są w pełni
obsługiwane, istnieją dwie wersje źródeł MILO. Żeby zbudować je w systemie ELF,
musisz najpierw rozpakować standardowe źródła, a potem nałożyć łatę (patch) ELF
na te źródła (musi mieć ten sam numer wersji). Przyjmę teraz, że źródła jądra
oraz skompilowane obiekty (.o) znajdują się w katalogu /usr/src/linux,
a jądro zostało w pełni skompilowane komendą make boot. (pamiętaj o
ustawieniu ARCH=alpha w pliku Makefile jądra PRZED wydaniem polecenia
make (menu)(x)config!!! - przyp. tłum.)
Żeby skompilować MILO, zmień katalog na zawierający źródła MILO i przywołaj
make komendą:
$ make KSRC=/usr/src/linux config
Tak jak podczas kompilacji jądra, zadane zostanie kilka pytań.
Echo output to the serial port (MINI_SERIAL_ECHO) [y]
Przesyłać wyjście do portu szeregowego (MINI_SERIAL_ECHO) [y]
Dobrym pomysłem jest włączenie przesyłania wiadomości printk jądra do
/dev/ttyS0, jeżeli można to zrobić. Jeżeli możesz (i chcesz), napisz ,,y'',
jeżeli nie, ,,n''. Wszystkie standardowe, pre-kompilowane obrazy MILO posiadają
wejście/wyjście na port szeregowy COM1.
Use Digital's BIOS emulation code (not free) (MINI_DIGITAL_BIOS_EMU) [y]
Użyć kodu emulacji BIOSu Digitala (nie jest darmowy) (MINI_DIGITAL_BIOS_EMU) [y]
Ten kod jest załączony jako biblioteka, która jest darmowa dopóki używa się jej
w systemie opartym na procesorze Alpha. Źrodła nie są dostępne. Jeżeli odpowiesz
n, zbudowana zostanie alternatywna darmowa emulacja BIOSu. Jej źródła są
dołączone do MILO. Pamiętaj, że obecnie nie możesz wybrać emulacji Digitala
w systemach ELF (biblioteka nie jest jeszcze gotowa), musisz więc odpowiedzieć
,,nie'' na to pytanie.
Build PALcode from sources (Warning this is dangerous) (MINI_BUILD_PALCODE_FROM_SOURCES) [n]
Zbudować PALcode ze źródeł (Uwaga to jest niebezpieczne) (MINI_BUILD_PALCODE_FROM_SOURCES) [n]
Powinieneś zrobić to tylko jeżeli modyfikowałeś źródła kodu PAL, jeżeli nie, użyj standardowego, pre-kompilowanego kodu PAL dołączonego do MILO.
Teraz jesteś gotowy do zbudowania obrazu MILO:
$ make KSRC=/usr/src/linux
Kiedy kompilacja zostanie zakończona, obraz MILO znajduje się w pliku o nazwie
milo. Będzie się tam też znajdować wiele obrazów o nazwach milo.*,
które powinny być zignorowane.
Najlepiej obsługiwany sposób ładowania MILO to ładowanie z firmware'u Windows NT ARC, ponieważ większość systemów zawiera tą metodę. Jednakże istnieje wiele różnych sposobów ładowania MILO. Może on być załadowany z:
Większość, jeżeli nie wszystkie systemy oparte na Alfie AXP posiadają Windows NT ARC firmware i jest to preferowana metoda inicjalizowania MILO i Linuxa. Kiedy firmware Windows NT działa i posiadasz poprawny dla twojego systemu obraz MILO, metoda ta jest bardzo łatwa do używania.
Windows NT ARC firmware jest środowiskiem, w którym mogą działać programy, wykonując odwołania do firmware'u w celu wykonywania różnych akcji. Windows NT OSloader jest programem, który spełnia tą funkcję. Linload.exe jest znacznie prostszym programem, który jedynie wczytuje i uruchamia MILO. Ładuje on poprawny plik z obrazem do pamięci pod adres 0x00000000 i wtedy wykonuje odwołanie PAL ,,swap-PAL'' (zamień PAL) do niego. MILO, tak jak Linux, używa innego kodu PAL niż Windows NT i dlatego musi przeprowadzić zamianę. Następnie MILO przenosi się do 0x200000 i kontynuuje resetowanie kodu PAL.
Zanim dodasz opcję ładowania Linuxa, będziesz musiał skopiować linload.exe oraz MILO, którego chcesz załadować w miejsce, z którego Windows NT ARC będzie mógł go odczytać. W poniższym przykładzie przyjmuję, że ładujesz MILO z dyskietki w formacie DOS'a:
Supplementary menu...'' (menu
dodatkowe)Supplementary menu'' wybierz opcję ,,Set up the system...''
(ustaw system)Setup menu wybierz ,,Manage boot selection menu...''
(menu zarządzania opcjami ładowania)Boot selections menu'' wybierz ,,Add a boot selection''
(dodaj opcję ładowania)Floppy Disk 0''linload.exe'' jako katalog i nazwę pliku ładowacza systemu
(osloader)\'' jako katalog główny systemu operacyjnegoLinux'' jako nazwę tej opcji ładowaniaBoot selections menu'', wybierz w nim opcję
,,Change a boot selection option'', a w niej opcję, którą właśnie
stworzyłeśOSLOADFILENAME'', wpisz
w nim nazwę obrazu MILO, którego chcesz używać, np. ,,noname.arc, następnie
naciśnij return (enter).Boot selections menu''Setup Menu'' (lub naciśnij jeszcze raz ESC), a w nim
,,Supplementary menu'' i ,,Save Changes''Boot menu'', możesz już spróbować inicjalizować MILO.
Jeżeli nie chcesz, żeby Linux był pierwszą opcją ładowania, możesz zmienić kolejność
opcji w ,,Boot selections menu''.Na końcu tych czynności powinieneś otrzymać opcję ładowania wyglądającą podobnie do tej:
LOADIDENTIFIER=Linux
SYSTEMPARTITION=multi(0)disk(0)fdisk(0)
OSLOADER=multi(0)disk(0)fdisk(0)\linload.exe
OSLOADPARTITION=multi(0)disk(0)fdisk(0)
OSLOADFILENAME=\noname.arc
OSLOADOPTIONS=
Możesz teraz uruchomić MILO (i Linuxa). Możesz załadować linload.exe i MILO bezpośrednio z systemu plików, który rozumie Windows NT, takiego jak NTFS lub DOS na twardym dysku.
Linia OSLOADOPTIONS zawiera opcje, które zostaną przekazane do MILO.
Jeżeli chcesz załadować Linuxa bezpośrednio z Windows NT ARC nie pauzując przy
MILO, powinieneś wpisać następującą komendę w OSLOADOPTIONS:
boot sda2:vmlinux.gz root=/dev/sda2
Przeczytaj rozdział Interfejs użytkowwnika MILO, żeby uzyskać więcej informacji o komendach MILO.
Inna (ale jest to obejście :( ) metoda ładowania MILO przez WNT ARC, to umieszczenie
MILO na dyskietce MS-DOS, nazwanie go fwupdate.exe i uruchomienie opcji
,,Upgrade Firmware''.
Płyty ewaluacyjne (i często ich klony) posiadają obsługę Monitora płyt ewaluacyjnych (Alpha Evaluation Board Debug Monitor). Przeczytaj dokumentację twojego systemu przed rozpatrywaniem użycia tej metody ładowania MILO. Następujące systemy napewno obsługują Monitor:
Zanim użyjesz tej metody, pamiętaj, że wczesne wersje Monitora Ewaluacyjnego nie
posiadały sterowników grafiki i klawiatury, musisz więc podłączyć inny komputer
przez port szeregowy, żebyś mógł używać Monitora. Jego interfejs jest bardzo prosty,
a komenda help pokazuje mnóstwo dostępnych komend. Najbardziej nas
interesujące zawierają słowo boot albo load.
Monitor Płyt Ewaluacyjnych może załadować obraz przez sieć (netboot)
albo z dyskietki (flboot). W obu przypadkach, ustaw adres ładowania
na 0x200000 (> bootadr 200000) przed uruchomieniem obrazu.
Jeżeli obraz znajduje się na dyskietce (zauważ że obsługiwane są tylko dyskietki w formacie DOS), będziesz musiał wpisać następującą komendę:
AlphaPC64> flboot <nazwa-obrazu-MILO>
Tylko AXPPCI33 napewno obsługuje ,,bezpieczną dyskietkę startową'' (Sekcja NoName).
Jeżeli nie używasz standardowego, pre-kompilowanego obrazu .dd MILO,
będziesz musiał zbudować dyskietkę startową SRM. Kiedy już skompilowałeś MILO,
musisz wykonać następujące komendy w Digital Unix'ie:
fddisk -fmt /dev/rfd0a
cat mboot bootm > /dev/rfd0a
disklabel -rw rfd0a 'rx23' mboot bootm
Lub w Linuxie:
cat mboot bootm > /dev/fd0
Jeżeli masz standardowy obraz MILO (powiedzmy MILO.dd), możesz stworzyć
dyskietkę startową, używając następującej komendy:
dd if=MILO.dd of=/dev/fd0
(radzę jednak zapisywać programem rawrite.exe spod DOS'a - ale poeksperymentować z dd można - przyp. tłum.)
Istnieje kilka systemów, gdzie MILO może być wypalone we flash'u i ładowane bezpośrednio (a nie przez firmware Windows NT ARC):
Konsola SRM (skrót od System Reference Manual, podręcznik systemowy (? - przyp.
tygrys)) nie wie nic o systemach plików bądź partycjach dyskowych, oczekuje
po prostu na zajęcie odpowiedniego przedziału kolejnych sektorów dysku przez
drugorzędny ładowacz, zaczynając od danego offsetu. Informacja opisująca
drugorzędny ładowacz (jego rozmiar i offset) znajduje się w pierwszym 512-bajtowym
bloku. Żeby załadować MILO z konsoli SRM, musisz wygenerować taką strukturę
w urządzeniu, do którego SRM ma dostęp (np. dyskietka). Do tego służy mboot
i bootm, mboot jest pierwszym, opisującym blokiem,
a bootm jest obrazem MILO zaokrąglonym do 512-bajtowego bloku.
Żeby załadować MILO z urządzenia zawierającego blok startowy, zbuduj mboot
oraz bootm i nagraj je na urządzenie startowe następującą komendą:
$ cat mboot bootm > /dev/fd0
Możesz też ściągnąć odpowiedni plik MILO.dd i nagrać go używając
RAWRITE.EXE lub dd.
Kiedy już to zrobiłeś, możesz uruchomić konsolę SRM i użyć jednej z jej wielu komend do załadowania MILO. Na przykład, jeżeli chcesz załadować MILO z dyskietki startowej, powinieneś użyć następującej komendy:
>>>boot dva0
(boot dva0.0.0.0.1 -flags 0)
block 0 of dva0.0.0.0.1 is a valid boot block
reading 621 blocks from dva0.0.0.0.1
bootstrap code read in
base = 112000, image_start = 0, image_bytes = 4da00
initializing HWRPB at 2000
initializing page table at 10400
initializing machine state
setting afinity to the primary CPU
jumping to bootstrap code
MILO Stub: V1.1
Unzipping MILO into position
Allocating memory for unzip
####...
Następujące systemy napewno posiadają konsolę SRM:
Płyta NoName może ładować MILO z firmware'u Windows NT ARC (Sekcja ładowanie MILO z Windows NT ARC), z konsoli SRM (Sekcja Ładowanie MILO z konsoli SRM), oraz z dyskietki startowej (Sekcja Ładowanie z dyskietki startowej). Można też, używając programu zarządzającego pamięcią flash, dostarczanego z MILO, możesz po załadowaniu Miniloadera wypalić jego obraz w taką pamięć (Sekcja korzystanie z programu zarządzającego pamięcią flash). Jednakże musisz pamiętać, że kiedy to zrobisz, stracisz poprzedni obraz tam zapisany, ponieważ płyta posiada miejsce tylko na jeden.
Sposób, w jaki NoName uruchamia system jest kontrolowany zestawem zworek na płycie, J29 i J28. Wyglądają one następująco:
4
J29 2 x x x 6
1 x x x 5
J28 2 x x x 6
1 x x x 5
3
Dwie opcje, które nas interesują, to piny 1-3 zworki J28, które ładują konsolę/ładowacz z pamięci flash, oraz piny 1-3 zworki J29, które uruchamiają konsolę lub ładowacz z dyskietki startowej. Pierwsze załadowanie MILO musi być przeprowadzone przy użyciu drugiej opcji.
Kiedy już wybierzesz ładowanie systemu z dyskietki ustawiając odpowiednią zworkę, włóż dyskietkę startową SRM zawierającą MILO do stacji i zresetuj komputer. Za parę sekund (po zgaśnięciu lampki stacji dysków) ekran powinien zrobić się biały, a MILO będzie mówił ci co się dzieje.
Jeżeli interesują cię tematy techniczne, wiedz, że NoName ładuje obrazy z dyskietki
pod fizyczny adres 0x104000, a obrazy z pamięci flash pod adres 0x100000. Z tego
powodu PALcode MILO zaaczyna się na 0x200000. Kiedy jest już załadowany, przenosi
się w poprawne miejsce (zobacz relocate.S).
AlphaPC64 może ładować MILO z firmware'u Windows NT ARC (Sekcja Ładowanie z Windows NT ARC), konsoli SRM (Sekcja Ładowanie MILO z konsoli SRM), oraz z Monitora Ewaluacyjnego (Sekcja Ładowanie z Monitora Płyt Ewaluacyjnych). Wszystkie te funkcję znajdują się w pamieci flash, w której znajduje się jeszcze miejsce na dodanie MILO, w celu ładowania go bezpośrednio. Można użyć programu zarządzania pamięcią flash, uruchamianego z MILO, a więc kiedy jest on uruchomiony, może być wczytany do pamięci nieulotnej (Sekcja używanie programu zarządzania pamięcią flash). System obsługuje zmienne środowiskowe MILO.
Można wybrać opcję ładowania (i MILO, kiedy znajduje się w pamięci flash) za pomocą kombinacji zworek i opcji inicjalizacji, która jest zapisywana w NVRAM zegara TOY.
Zworka służąca do tego celu to J2, bity SP o numerach 6 i 7 mają następujące znaczenie:
A więc, jeżeli SP 7 jest wyłączony, ładowany będzie Monitor Płyt Ewaluacyjnych, ponieważ jest zawsze pierwszą opcją w pamięci flash. Kiedy SP 7 jest włączony, wybrany zostanie obraz z zegara TOY. Zarówno Monitor, firmware Windows NT ARC, jak i MILO obsługują wybór opcji inicjalizacyjnej, ale musisz być bardzo ostrożny używając tej metody. Nie możesz na przykład ustawić opcji inicjalizacyjnej tak, żeby następnym razem system ładował MILO, kiedy używasz Windows NT ARC, ponieważ pozwala on tylko na ustawienie Monitora Ewaluacyjnego lub NT ARC jako opcji ładowania.
W celu zapisania MILO w pamięci flash za pomocą Monitora Płyt Ewaluacyjnych,
będziesz potrzebował obrazu przystosowanego do tej metody ładowania. Procedura
kompilacji tworzy plik MILO.rom, ale równie dobrze możesz stworzyć taki
plik jedną z komend Monitora:
> makerom -v -i7 -l200000 MILO -o mini.flash
(napisz makerom, żeby dowiedzieć się, co znaczą poszczególne argumenty,
powiem tylko, że 7 to identyfikator obrazu używany przez SROM, a -l200000 ustawia
adres ładowania obrazu na 0x200000).
Załaduj ten obraz do pamięci (komendą flload, netload itd.
(NIE fl/net boot tylko load - przyp. tłum.)) pod adres
0x200000 i wypal we flash'u:
AlphaPC64> flash 200000 8
(200000 to miejsce w pamięci obrazu, który ma być wypalony, a 8 to segment, w którym umieszczasz obraz. Istnieje 16 1024*64 bajtowych segmentów w pamięci flash, Debug Monitor znajduje się w segmencie pierwszym, a Windows NT ARC w czwartym).
Ustaw numer obrazu, który będzie ładowany przez SROM poprzez zapisanie jego numeru w zegarze TOY.
AlphaPC64> bootopt 131
(131 to trzeci obraz, 129 - pierwszy, 130 - drugi itd.)
Wyłącz zasilanie, zewrzyj siódmą zworkę i włącz komputer. Powinieneś zobaczyć MILO budzącego się do życia. Jeżeli nie, wyjmij 7 zworkę i zresetuj Monitor Ewaluacyjny.
EB66+, tak jak wszystkie Płyty Ewaluacyjne Alpha zbudowane przez Digitala, posiada ,,Evaluation Board Debug Monitor'', można więc uruchamiać MILO przez niego (Sekcja Ładowanie z Monitora Ewaluacyjnego). Dosyć często (choć nie zawsze) płyty, które wyeluowały z EB66+, również posiadają Monitor. Zazwyczaj płyty te zawierają Windows NT ARC firmware (Sekcja Ładowanie przez Windows NT ARC). Można też skorzystać z programu zarządzania pamięcią flash, kiedy MILO jest uruchomiony (Sekcja używanie programu zarządzającego pamięcią flash). System ten obsługuje zmienne środowiskowe MILO.
Płyta główna posiada miejsce na kilka obrazów flash, są one kontrolowane zworkami. Dwa banki zworek (J18 i J16) znajdują się na dole płyty, po środku jej szerokości (jeżeli Alpha jest na górze). Możesz wybrać pomiędzy opcjami ładowania (i MILO, jeżeli został zapisany w pamięci flash), używając kombinacji zworek i opcji inicjalizacji zapisanej w NVRAM zegara TOY.
Kiedy zworka 7-8 banku J18 jest włączona, obraz ładowania jest opisany przez opcję inicjalizacyjną. Jeżeli są one wyłączone, załadowany zostanie Monitor Płyt Ewaluacyjnych.
Procedura wypalania obrazu w pamięci flash przez Monitor Ewaluacyjny jest identyczna, jak w przypadku AlphaPC64 (Sekcja AlphaPC64).
System ten jest podobny do AlphaPC64, nie posiada jednak pamięci flash do nagrania MILO. EB64+ posiada dwa ROMy, z których jeden zawiera firmware Windows NT ARC (Sekcja Ładowanie z firmware'u Windows NT ARC), a drugi Monitor Płyt Ewaluacyjnych (Sekcja Ładowanie z Monitora Ewaluacyjnego).
Aspen Alpine posiada tylko jeden ROM - Windows NT ARC.
Jest to system bardzo kompaktowy, sprzedawany jako cały komputer, oparty na 21066. Posiada on urządzenie graficzne TGA (21030). Chociaż można wepchnąć do niego kartę graficzną PCI o małym rozmiarze, poczekaj lepiej na pełną obsługę TGA w XFree86. Płyta posiada firmware Windows NT ARC, z którego można ładować MILO (Sekcja ( Ładowanie z firmware'u Windows NT ARC).
EB164, tak jak wszystkie płyty ewaluacyjne Digitala, posiada Monitor Płyt Ewaluacyjnych, można więc za jego pomocą łatwo ładować MILO (Sekcja Ładowanie z Monitora Ewaluacyjnego). Dosyć często (choć nie zawsze) płyty, które wyeluowały z EB164, także zawierają Monitor. Zazwyczaj, płyty EB164 posiadają firmware Windows NT ARC (Sekcja Ładowanie z firmware'u Windows NT ARC). Dostępna jest też konsola SRM (Sekcja Ładowanie MILO z konsoli SRM). Dzięki programowi do zarządzania pamięcią flash uruchamianemu z MILO, można zapisać jego obraz w pamięci flash (kiedy MILO już działa) (Sekcja Używanie programu zarządzania pamięcią flash). System obsługuje zmienne środowiskowe MILO.
Płyty EB164 posiadają kilka obrazów ładujących, kontrolowanych zworkami. Dwuzworkowy bank nas interesujący to J1, znajduje się on w lewym, dolnym rogu płyty (kiedy Alpha jest na górze). Między opcjami ładowania (oraz MILO, jeżeli został zapisany w pamięci flash) możesz przełączać się używając kombinacji zworek i opcji inicjalizacyjnej, zapisanej w NVRAMie zegara TOY.
Kiedy zworka SP-11 banku J1 jest zwarta, ładowany będzie obraz opisany opcją inicjalizacyjną, a jeżeli jest rozwarta, ładowany będzie Monitor Płyt Ewaluacyjnych.
Wypalanie obrazu w pamięci flash przeprowadza się dokładnie tak, jak w AlphaPC64 (Sekcja AlphaPC64).
PC164, jak wszystkie Płyty Ewaluacyjne Alpha Digitala, posiada Monitor Płyt Ewaluacyjnych, jest to więc pierwsza możliwość ładowania MILO (Sekcja Ładowanie z monitora ewaluacyjnego). Dosyć często (choć nie zawsze) płyty, które wyeluowały z PC164, także posiadają Monitor. Zazwyczaj płyty te posiadają firmware Windows NT ARC (Sekcja Ładowanie z Windows NT ARC). Jest też dostępna konsola SRM (Sekcja Ładowanie MILO z konsoli SRM). Można również użyć programu do zarządzania pamięcią flash, uruchamianego z MILO, a więc kiedy Miniloader działa, może być zapisany w pamięci flash (Sekcja używanie programu zarządzającego pamięcią flash). System obsługuje zmienne środowiskowe MILO.
Systemy te posiadają kilka opcji ładowania w pamięci flash, kontrolowanych przez zworki. Główny blok zworek, J30, zawiera zworki konfiguracji systemu, oraz zworkę CF6, która, jeżeli włączona, uruchomi Monitor Ewaluacyjny. Standardowo zworka ta jest wyłączona.
Wypalanie obrazu do pamięci flash za pomocą Monitora Płyt Ewaluacyjnych przeprowadza się identycznie, jak w przypadku AlphaPC64 (Sekcja AlphaPC64).
XL266 jest jedną z płyt z rodziny systemów znanych jako Avanti. Posiada oddzielną kartę zawierającą procesor i pamięć cache, dołączaną do płyty pod prawidłowym kątem. Płyta ta może zastąpić swój odpowiednik - płytę do Pentium.
Niektóre z tych systemów posiadają konsolę SRM, a inne, np. właśnie XL266 posiadają jedynie firmware Windows NT ARC (Sekcja Ładowanie z firmware'u Windows NT ARC).
Oto moja lista kompatybilnych systemów:
Uwaga: System którego używałem do rozwoju MILO, to XL266 i dlatego jest to jedyny system, którego działanie mogę zagwarantować. Jednakże technicznie wszystkie powyższe systemy są odpowiednikami, mają te same chipsety oraz mechanizmy obsługi przerwań.
Jest to system oparty na 233MHz 21066.
Kiedy poprawnie zainstalowałeś/załadowałeś/uruchomiłeś MILO, zobaczysz znak zachęty
MILO> (od MIniLOader, Miniładowacz) wyświetlony na ekranie. Jest to bardzo prosty
intefejs użytkownika, którego musisz użyć w celu uruchomienia obrazu jądra Linuxa.
Wpisanie ,,help'' jest dobrym pomysłem, ponieważ wyświetla przydatny
opis komend.
Jest to chyba najbardziej pożyteczna komenda MILO:
MILO> help
MILO command summary:
ls [-t fs] [dev:[dir]]
- List files in directory on device
boot [-t fs] [dev:file] [boot string]
- Boot Linux from the specified device and file
run [-t fs] dev:file
- Run the standalone program dev:file
show - Display all known devices and file systems
set VAR VALUE - Set the variable VAR to the specified VALUE
unset VAR - Delete the specified variable
reset - Delete all variables
print - Display current variable settings
help [var] - Print this help text
Devices are specified as: fd0, hda1, hda2, sda1...
Use the '-t filesystem-name' option if you want to use
anything but the default filesystem ('ext2').
Use the 'show' command to show known devices and filesystems.
Type 'help var' for a list of variables.
------------------------------------------------------------------------------------
MILO> help
Opis komend MILO:
ls [-t fs] [urządzenie:[katalog]]
- Lista plików w katalogu danego urządzenia
boot [-t fs] [urządzenie:plik] [tekst ładowania]
- Załaduj Linuxa z pliku na danym urządzeniu
run [-t fs] [urządzenie:plik]
- Uruchom oddzielny program z podanej ścieżki
show - Pokaż wszystkie znane urządzenia i systemy plików
set ZMIENNA WARTOSC - Przypisuje zmiennej ZMIENNA wartosc WARTOSC
unset ZMIENNA - Kasuje podaną zmienną
reset - Skasuj wszystkie zmienne
print - Pokaż obecne ustawienia zmiennych
help [var] - Wyświetl ten tekst pomocy
Urządzenia podaje się jako: fd0, hda1, hda2, sda1...
Użyj opcji ,,-t nazwa-systemu-plików'', jeżeli chcesz używać
czegoś innego niż standardowy system plików (,,ext2'').
Użyj komendy ,,show'', żeby wyświetlić znane urządzenia i systemy plików.
Wpisz ,,help var'', żeby uzyskać listę zmiennych.
Uwaga: komenda bootopt występuje tylko w systemie AlphaPC64
(i podobnych). Odwołaj się do dokumentacji płyty, żeby dowiedzieć się, co ona
znaczy.
Urządzenia. Dopóki nie użyjesz komendy, która musi użyć urządzenia,
nie będzie miała miejsca jego inicjalizacja. Pierwsze show, ls,
boot lub run, zawsze spowodują inicjalizację urządzeń w MILO.
Urządzenia są nazywane dokładnie w ten sam sposób, co w Linuxie. A więc, pierwszy
dysk IDE będzie nazywać się ,,hda'', a pierwsza partycja ,,hda1''. Użyj komendy
,,show'', żeby wyświetlić dostępne urządzenia.
Systemy plików. MILO obsługuje trzy systemy plików - MSDOS, EXT2 i ISO9660.
Jeżeli urządzenie jest dostępne w systemie, można wykonać komendy ls,
boot i run na obrazie zapisanym na tych systemach plików.
Standardowy system MILO to EXT2, dlatego będziesz musiał powiedzieć MILO,
że obecny jest inny system plików. Wszystkie komendy używające nazw plików pozwalają
przekazać do nich typ systemu plików, używając opcji -t [nazwa systemu plików].
A więc jeżeli chcesz wyświetlić zawartość CD ROMu SCSI, możesz napisać:
MILO> -t iso9660 scd0:
Zmienne. MILO posiada kilka ustawialnych zmiennych, ułatwiających proces ładowanie. Jeżeli ładujesz MILO przez Windows NT ARC, MILO używa zmiennych ustawionych przez to firmware. W niektórych systemach (np. AlphaPC64), MILO tworzy własną listę zmiennych, które nie zmieniają się przy każdym ładowaniu. Są to:
MILO> help var
Variables that MILO cares about:
MEMORY_SIZE - System memory size in megabytes
BOOT_DEV - Specifies the default boot device
BOOT_FILE - Specifies the default boot file
BOOT_STRING - Specifies the boot string to pass to the kernel
SCSIn_HOSTID - Specifies the host id of the n-th SCSI controller.
AUTOBOOT - If set, MILO attempts to boot on powerup
and enters command loop only on failure.
AUTOBOOT_TIMEOUT - Seconds to wait before auto-booting on powerup.
------------------------------------------------------------------------------------
MILO> help var
Zmienne, na które uważa MILO:
MEMORY_SIZE - Rozmiar pamięci systemu w megabajtach
BOOT_DEV - Definiuje domyślne urządzenie ładowania
BOOT_FILE - Definiuje domyślny plik ładowania
BOOT_STRING - Definiuje tekst przekazywany do jądra podczas startu
SCSIn_HOSTID - Definiuje identyfikator hosta n-tego kontrolera SCSI.
AUTOBOOT - Jeżeli jest ustawiona, MILO próbuje ładować system po włączeniu
zasilania i przechodzi do linii komend tylko w przypadku błedu.
AUTOBOOT_TIMEOUT - Ile sekund MILO ma czekać przed autoładowaniem.
Komenda boot ładuje jądro Linuxa. Musi się ono znajdować na dysku w
formacie EXT2 (SCSI, IDE lub na dyskietce), lub na kompakcie w formacie ISO9660.
Obraz może być spakowany gzipem, MILO rozpozna go wtedy po rozszerzeniu
.gz.
Zauważ, że wersja MILO nie musi odpowiadać wersji jądra, które ładujesz. Linuxa ładuje się następującą komendą:
MILO> boot [-t system-plików] urządzenie:nazwa-pliku [[opcja-ładowania] [opcja-ładowania] ...]
Gdzie urządzenie jest nazwą pliku urządzenia, którego chcesz używać,
a nazwa-pliku jest nazwą obrazu jądra Linuxa. Wszystkie argumenty podane
po nazwie pliku są przekazywane bezpośrednio do jądra.
Jeżeli instalujesz Red Hat'a, będziesz musiał podać urządzenie / i nie tylko. Powinieneś użyć komendy
MILO> boot fd0:vmlinux.gz root=/dev/fd0 load_ramdisk=1
MILO będzie automatycznie zawierał urządzenia wkompilowane w twój vmlinux.
Testowałem sterowniki do stacji dysków, IDE i kilka sterowników SCSI (np. NCR 810).
Wszystkie działają poprawnie. Ważne jest też poprawne ustawienie identyfikatora
hosta SCSI. Domyślnie MILO zainicjalizuje go na najwyższej możliwej wartości (7),
co powinno działać poprawnie. Jednakże jeżeli chcesz, możesz i tak ustawić
identyfikator hosta n-tego kontrolera SCSI w systemie, ustawiając zmienną
środowiskowąSCSIn_HOSTID na odpowiednią wartość. Na przykład,
żeby ustawić hostid pierwszego kontrolera na 7, powinieneś wpisać następujące
polecenie w linii poleceń MILO:
setenv SCSI0_HOSTID 7
Czasami będziesz chciał przeładować działającego Linuxa komendą shutdown -r now.
W takim przypadku jądro Linuxa oddaje kontrolę MILO (przez odwołanie CallPAL HALT).
Z tego powodu MILO zostawia skompresowaną kopię samego siebie w pamięci i wykrywa
że system jest przeładowywany, korzystając z informacji przetrzymywanych w HWRPB
(Hardware Restart Parameter Block, Blok Parametrów Restartu Urządzenia).
Zaczyna wtedy przeładowanie, używając dokładnie tej samej komendy, która została
użyta do ładowania jądra Linuxa ostatnim razem. MILO czeka przez 30 sekund przed
ponownym załadowaniem jądra, co pozwala przerwać ten proces i załadować inne jądro,
w jakikolwiek sposób.
W systemach z pamięcią flash, takich jak AlphaPC64, EB164 i EB66+ istnieje kilka
opcji ładowania. Są one zmieniane komendą bootopt. Posiada ona jeden
argument, numer dziesiętny, który jest typem obrazu do załadowania po włączeniu
zasilania/przeładowaniu systemu.
0 Ładowanie Monitora Płyt Ewaluacyjnych,
1 Ładowanie firmware'u Windows NT ARC.
W celu ładowania MILO z pamięci flash, potrzebna jest opcja inicjalizacyjna, znacząca ,,załaduj N-ty obraz z pamięci flash''. Jako argument, musisz podać 128 + N, więc jeżeli MILO jest trzecim obrazem, użyjesz komendy
MILO> bootopt 131
Uwaga: Bądź bardzo ostrożny z tą komendą. Nigdy nie ustawiaj bootopt na 0 (Monitor Płyt Ewaluacyjnych), zamiast tego użyj zworek na płycie głównej.
Komenda run jest używana do uruchamiania programu zarządzającego
pamięcią flash (flash management utility, dalej będę nazywał go ,,fmu'' - przyp.
tłum.). Zanim zaczniesz, będziesz potrzebował urządzenia dostępnego MILO
i zawierającego fmu. Może on być (tak jak vmlinux) spakowany gzipem. Fmu uruchamia
się następującą komendą:
MILO> fd0:fmu.gz
Kiedy program zostanie załadowany i zainicjalizowany, fmu poda trochę informacji
o urządzeniu flash, oraz wyświetli linię poleceń. Znowu, komenda help jest
bardzo użyteczna.
Linux MILO Flash Management Utility V1.0 Linux MILO Flash Management Utility V1.0
Flash device is an Intel 28f008SA Urządzenie flash to Intel 28f008SA
16 segments, each of 0x10000 (65536) bytes 16 segmentów, każdy po 0x10000 (65536) bajtów
Scanning Flash blocks for usage Wykrywam zajętość bloków Flash
Block 12 contains environment variables Blok 12 zawiera zmienne środowiskowe
FMU> FMU>
Uwaga: W systemach obsługujących zmienne środowiskowe, gdzie istnieje
więcej niż jeden blok flash (np. AlphaPC64), fmu będzie szukał bloku na zmienne
środowiskowe MILO. Jeżeli taki blok istnieje, fmu powie, gdzie się on znajduje.
Jeśli nie, musisz użyć komendy environment, żeby ustawić blok i go
zainicjalizować. W powyższym przykładzie, blok 12 zawiera zmienne środowiskowe MILO.
FMU> help
FMU command summary:
list - List the contents of flash
program - Program an image into flash
quit - Quit
environment - Set which block should contain the environment variables
bootopt num - Select firmware type to use on next power up
help - Print this help text
FMU>
------------------------------------------------------------------------------------
FMU> help
Opis komend FMU:
list - Wyświetl zawartość pamięci flash
program - Zapisz obraz w pamięci flash
quit - Zakończ program
environment - Ustaw blok, który powinien zawierać zmienne środowiskowe
bootopt numer - Wybierz typ firmware'u do użycia przy następnym uruchomieniu
help - Wyświetl ten tekst pomocy
FMU>
Uwaga: Komendy environment i bootopt są dostępne tylko
w płytach EB66+, AlphaPC64, EB164 i PC164 (i ich klonach).
Komenda ,,list'' pokazuje zawartość pamięci flash. Jeżeli istnieje więcej niż jeden blok, pokazana jest zawartość każdego. W poniższym przykładzie możesz zobaczyć, że Windows NT ARC używa blok 4-7 i blok 15.
FMU> list
Flash block: 0:DBM 1:DBM 2:DBM 3:WNT 4:WNT 5:WNT 6:WNT 7:WNT 8:MILO
9:MILO 10:MILO 11:MILO 12:MILO 13:U 14:U 15:WNT
Listing flash Images
Flash image starting at block 0:
Firmware Id: 0 (Alpha Evaluation Board Debug Monitor)
Image size is 191248 bytes (3 blocks)
Executing at 0x300000
Flash image starting at block 3:
Firmware Id: 1 (Windows NT ARC)
Image size is 277664 bytes (5 blocks)
Executing at 0x300000
Flash image starting at block 8:
Firmware Id: 7 (MILO/Linux)
Image size is 217896 bytes (4 blocks)
Executing at 0x200000
FMU>
------------------------------------------------------------------------------------
FMU> list
Bloki Flash: 0:DBM 1:DBM 2:DBM 3:WNT 4:WNT 5:WNT 6:WNT 7:WNT 8:MILO
9:MILO 10:MILO 11:MILO 12:MILO 13:U 14:U 15:WNT
Wyświetlam Obrazy Flash
Obraz Flash (początek - blok 0)
Firmware Id: 0 (Alpha Evaluation Board Debug Monitor)
Rozmiar obrazu: 191248 bajtów (3 bloki)
Wykonuje się na 0x300000
Obraz Flash (początek - blok 3)
Firmware Id: 1 (Windows NT ARC)
Rozmiar obrazu: 277664 bajtów (5 bloków)
Wykonuje się na 0x300000
Obraz Flash (początek - blok 8)
Firmware Id: 7 (MILO/Linux)
Rozmiar obrazu: 217896 bajtów (4 bloki)
Wykonuje się na 0x200000
FMU>
Fmu zawiera skompresowaną kopię obrazu flash MILO. Komenda ,,program'' pozwala zapisać ten obraz w pamięci flash. Komenda ta pozwoli ci wycofać się, ale zanim ją uruchomisz, powinieneś użyć komendy ,,list'', żeby zobaczyć gdzie nagrać MILO. Jeżeli MILO znajduje się już w pamięci flash, fmu zapyta się, czy go skasować.
FMU> program
Image is:
Firmware Id: 7 (MILO/Linux)
Image size is 217896 bytes (4 blocks)
Executing at 0x200000
Found existing image at block 8
Overwrite existing image? (N/y)? y
Do you really want to do this (y/N)? y
Deleting blocks ready to program: 8 9 10 11
Programming image into flash
Scanning Flash blocks for usage
FMU>
------------------------------------------------------------------------------------
FMU> program
Obraz:
Firmware Id: 7 (MILO/Linux)
Rozmiar obrazu: 217896 bajtów (4 bloki)
Wykonuje się na 0x200000
Znaleziono istniejący obraz w bloku 8
Nadpisać istniejący obraz? (N/y)? y
Czy napewno chcesz to zrobić? (y/N)? y
Kasowanie bloków do programowania: 8 9 10 11
Programowanie obrazu do pamięci flash
Szukanie zajętych bloków Flash
FMU>
Poczekaj, aż proces zostanie zakończony przed wyłączeniem systemu.
Uwaga: Nie mogę wyrazić dostatecznie mocno, jak musisz być ostrożny, żeby nie nadpisać istniejącego obrazu flash, który może być ci potrzebny, lub nie zniszczyć swojej płyty głównej. Dobrą zasadą jest niekasowanie Monitora Ewaluacyjnego. (!!! - przyp. tłum.)
Wybiera blok flash mający zawierać zmienne środowiskowe MILO.
Jest to ta sama komenda, co istniejąca w MILO, zobacz sekcję ( Komenda ,,bootopt'').
Jest to raczej bez znaczenia. Jedyna droga powrotna do MILO (lub czegokolwiek innego), kiedy fmu działa, to restart systemu.
Niestety, świat nie jest doskonały, jest więc jak zawsze parę ograniczeń, o których powinieneś wiedzieć.
MILO nie jest przeznaczony do ładowania systemów operacyjnych innych niż Linux, jednakże może ładować obrazy łączone do działania w tym samym miejscu pamięci co Linux (czyli 0xFFFFFC0000310000). W ten sposób może działać fmu.
Źródła kodu PAL załączone w miniboot/palcode/cośtam są poprawne,
jednakże są problemy, kiedy zostają zbudowane przy użyciu najnowszego gas
(assembler GNU - przyp. tłum.). Można kompilować je, używając bardzo
starego gas'a załączonego w oprogramowanu do Płyt Ewaluacyjnych Alpha
(i w ten sposób zostały zbudowane). Próbuję namówić kogoś, żeby naprawił nowy gas.
Obecnie jednak, jako obejście, umieściłem pre-kompilowany kod PAL dla obsługiwanych
płyt, a David Mosberger-Tang umieścił naprawiony gas na swoim serwerze ftp.
Oto kilka często spotykanych problemów razem z rozwiązaniami.
Czytanie dyskietek MS-DOS z Monitora Płyt Ewaluacyjnych.
Niektóre starsze wersje Monitora Płyt Ewaluacyjnych (przed 2.0) miały problemy
z odczytywaniem dyskietek w formacie DOS zapisanych pod Linuxem. Zazwyczaj
Monitor może wczytać kilka pierwszych sektorów, ale po chwili wchodzi w
nieskończoną pętlę błędów o złych sektorach. Istnieje też pewna niekompatybilność
między formatem DOS oczekiwanym przez Monitor Ewaluacyjny, a Linuxową implementacją
DOSFS. Żeby skrócić tą długą historię: jeżeli napotkasz ten problem, spróbuj użyć
DOS'a do zapisania dyskietki. Na przykład jeżeli nie ładuje się plik
MILO.cab, użyj komputera z DOSem - włóż dyskietkę i napisz:
copy a:MILO.cab c:
copy c:MILO.cab a:
del c:MILO.cab
Spróbuj ponownie wystartować MILO z tej dyskietki. Powinno to rozwiązać problem.
MILO wyświetla długą sekwencję znaków ,,o>'' i nie przyjmuje poleceń.
Dzieje się to zazwyczaj kiedy MILO został skompilowany z portem COM1 jako drugorzędnym urządzeniem konsoli. W takim przypadku, MILO kopiuje wyjście na port COM1 i akceptuje wejście również z tego portu. Jest to świetne do wykrywania błędów, ale nie tak świetne jeżeli masz podłączone coś innego niż terminal. Jeżeli to się dzieje, odłącz lub wyłącz to urządzenie, do chwili uruchomienia jądra Linuxa. Kiedy Linux działa, wszystko będzie działało tak jak powinno.
MILO skarży się na zły numer magiczny obrazu jądra
Starsze wersje MILO nie obsługiwały formatu binarnego ELF, nie mogły więc
rozpoznać obrazu ELF. Jeżeli napotkasz ten problem, ściągnij najnowszą wersję MILO.
Wszystkie wersje po 2.0.20 obsługują ELF. Z drugiej strony, może to być wina
zniszczonego obrazu. Powinieneś też pamiętać, że MILO sam nie rozpoznaje jeszcze
obrazów skompresowanych GZIP'em - musisz dodać rozszerzenie ,,.gz'' do
nazwy pliku.
MILO wyświetla ,,...turning on virtual addressing and jumping to the Linux Kernel'' i nic się nie dzieje
Oczywisty problem, to to, że jądro jest źle skompilowane, albo skompilowane na inny system Alpha. Inny to kompilacja jądra na urządzenie VGA, kiedy płyta posiada TGA (Zlxp) (lub odwrotnie). Dobrze jest wbudować w jądro wyjście na COM1 i podłączyć terminal, lub spróbować użyć jądro z dystrybucji Linuxa, którą zainstalowałeś.
MILO nie rozpoznaje dysku SCSI
Standardowe obrazy MILO posiadają wszystkie stabilne (dla Alphy) sterowniki urządzeń (na razie są to NCR 810, QLOGIC ISP, Buslogic i Adaptec 2940/3940) (uwaga - jest to stare HOWTO, a więc dużo się zmieniło - przyp. tłum.). Jeżeli twoja karta nie jest dołączona, może to znaczyć, że sterownik dla Alphy nie jest jeszcze stabilny. Spróbuj użyć najnowszych obrazów MILO. Możesz dowiedzieć się, jakie urządzenia SCSI zostały wkompilowane w obraz MILO, używając komendy ,,show''.
Chciałbym podziękować:
Jest jeszcze kilka rzeczy, które powinny być zrobione, więc jeżeli chcesz coś dodać, daj mi znać ( david.rusling@reo.mts.dec.com), żebyśmy nie duplikowali swoich wysiłków.
Na końcu, duże ,,dziękuję'' dla Digitala, za produkowanie tak świetnego procesora (i płacenie mi za to).
Jeżeli znajdziesz jakieś błędy, daj mi znać. doc-linux-pl-2002.06.14.orig/html/Module-HOWTO.pl.html 0100664 0001750 0001750 00000254617 06770264140 021005 0 ustar coven coven
Do napisania tego dokumentu zainspirował mnie znakomity BootPrompt-HOWTO Paula Gortmakera. Za zgodą Paula wykorzystałem jego pracę jako ramę, na której rozpiąłem swoje wywody. Różne części tego dokumentu zostały bezwstydnie, bez jakichkolwiek pozwoleń, skradzione z rozmaitych plików README i *.txt, które znaleźć można w katalogach źródłowych Linuxa. Składam szczere podziękowania wszystkim autorom tych tekstów - dzięki nim mógł powstać Module-HOWTO.
Struktura/kolejność modułów opisanych w niniejszym dokumencie jest w zasadzie analogiczna do zastosowanej w programie konfiguracyjnym jądra systemu - menuconfig, uruchomionym w trybie single_menu_mode=TRUE.
Zamieszczam tutaj wszystkie elementy, które w programie konfiguracyjnym mają opcję "moduł", niezależnie od faktu, czy mają one jakieś parametry ładowania czy też nie.
Wszystkie elementy opracowane są zgodnie z poniższym przykładowym schematem:
Polecenie ładowania:
/sbin/modprobe ne.o io=0x300 irq=5
io = 0 (Wymaga jawnego określenia wartości "io=0xNNN")
irq = 0 (Próbuje określić ustawione IRQ poprzez autoIRQ)
(Sprawdza porty: 0x300, 0x280, 0x320, 0x340, 0x360)
Wymaga 8390.o
Autorem i opiekunem Module-HOWTO jest:
Lauri Tischler, ltischler@efore.fi
Wersja polska:
Pawko Olszewski, alder@amg.com.plv1.0, 23 lutego 1997
Ten dokument nie jest wyrocznią. Prawdopodobnie zawiera on jednak najbardziej aktualne informacje, jakie można znaleźć. Za to, co dzieje się z twoimi urządzeniami nie odpowiada nikt inny, jak tylko ty sam. Jeśli twój sprzęt pójdzie z dymem (...prawie niemożliwe!), nie biorę za to żadnej odpowiedzialności. Tzn. AUTOR ANI TŁUMACZ NIE SĄ ODPOWIEDZIALNI ZA JAKIEKOLWIEK USZKODZENIA POWSTAŁE W WYNIKU PODJĘCIA DZIAŁAŃ OPARTYCH NA INFORMACJI ZAWARTEJ W NINIEJSZYM DOKUMENCIE.
Prawa autorskie tego dokumentu (c) 1996 są własnością Lauri Tischlera. Tłumaczenie na polski - Paweł Olszewski (c) 1997. Udziela się pozwolenia na wykonywanie i rozprowadzanie kopii tego podręcznika przy zachowaniu jego brzmienia, pod warunkiem, że nota o prawach autorskich i niniejsze pozwolenie znajdą się w każdej kopii.
Zezwala się również na wykonywanie i rozprowadzanie zmodyfikowanych kopii tego dokumentu w nie zmienionym brzmieniu, pod warunkiem, że niniejsza nota o prawach autorskich zostanie w nich zamieszczona dokładnie tak samo jak w wersji oryginalnej, oraz że cała powstała w oparciu o ten dokument praca będzie rozprowadzana wraz z zezwoleniem identycznym do tego.
Zezwala się na kopiowanie i rozprowadzanie innych wersji językowych tego dokumentu, przy zachowaniu powyżej opisanych zasad co do wersji zmodyfikowanych.
Jeśli zamierzasz włączyć ten dokument do prac przeznaczonych do publikacji, proszę, skontaktuj się z autorem, aby mógł zapewnić, że posiadasz możliwie najbardziej aktualną informację.
Zdarzyło się kiedyś, że opublikowano nieaktualne wersje dokumentów HOWTO dotyczących Linuxa. Skutkiem tego programiści rozwijający Linuxa narażeni zostali na zbędny wysiłek z powodu zalewu pytaniami, na które udzielono już odpowiedzi w uaktualnionych wersjach dokumentów.
Zalecane są następujące HOWTO:
Paul.Gortmaker@anu.edu.au).
Nowe wersje tego dokumentu można uzyskać przez anonimowy FTP z sunsite.unc.edu, w
katalogu /pub/Linux/docs/HOWTO/* oraz z rozmaitych linuxowych archiwów
lustrzanych.
storner@osiris.ping.dk).
Najświeższą wydaną wersję tego dokumentu można znaleźć pod adresem
http://eolicom.olicom.dk/~storner/kerneld-mini-HOWTO.html.
Pomiędzy wydaniami nowych wersji tego mini-HOWTO, uaktualnioną listę dokonanych
zmian możesz znaleźć pod adresem
http://eolicom.olicom.dk/~storner/kern.html.
Plik Documentation/Configure.help udziela dość dobrej, ogólnej informacji
o tym, którym częściom jądra nadawać postać modułów, a którym nie.
Również krocie rozmaitych plików README, porozsiewanych (niestety) po całym Drzewie Katalogów Źródłowych Linuxa są dobrą i pouczającą lekturą.
Najbardziej aktualną dokumentacją zawsze będzie sam Kod Źródłowy. Na
przykład, jeśli chcesz się dowiedzieć, jakie parametry mogą zostać przekazane
karcie ethernet smc-ultra, zaglądasz do karalogu linux/drivers/net i
oglądasz plik smc-ultra.c -- zazwyczaj gdzieś pod koniec tego pliku można
znaleźć procedurę zwaną init_module. W obrębie tej procedury lub w jej
pobliżu znajdziesz definicje parametrów i ich struktury, odpowiadające parametrom
modułu.
Jeśli masz pytania dotyczące przekazywania modułom parametrów w trakcie ich ładowania, w pierwszej kolejności PRZECZYTAJ ten dokument. Jeśli nie znajdziesz odpowiedzi na swoje pytanie/pytania ani tutaj, ani we wcześniej wymienionej dokumentacji dodatkowej, możesz spróbować spytać w grupach dyskusyjnych.
Ogólne pytania na temat konfigurowania systemu należy kierować do grupy comp.os.linux.setup. Prosimy, abyś respektował tę ogólną zasadę dotyczącą treści listów i nie przesyłał swoich zapytań ogólnych do grup poświęconych konkretnym zagadnieniom.
Nowe wersje oryginału tego dokumentu pobrać można przez anonimowy FTP z
sunsite.unc.edu, z katalogu /pub/Linux/docs/HOWTO/* i wielu linuxowych
archiwów lustrzanych. Poprawki będą dokonywane w miarę pojawiania się informacji o
nowych sterownikach. Jeśli kopia, którą czytasz ma więcej niż 3 miesiące, oznacza
to, że jest albo nieaktualna, albo że byłem leniwy i jej nie zaktualizowałem.
Najnowsza wersja niniejszego dokumentu w wersji polskiej znajduje się w
oficjalnym archiwum polskich wersji dokumentów Linux HOWTO
ftp://ftp.ippt.gov.pl/pub/Linux/JTZ/, a także pod adresem
http://www.amg.net.pl/Linux/JTZ/.
Ten dokument został przygotowany przy użyciu systemu SGML, specjalnie skonfigurowanego dla celów Projektu Linux Howto. Dostępne są różne formaty wyjściowe, do których zaliczyć można: postscript, dvi, ascii, html oraz wkrótce TeXinfo.
Zalecałbym oglądanie tego dokumentu w formacie html (w przeglądarce WWW) lub w formacie Postscript/dvi. Oba z nich zawierają aktywne powiązania, które nie występują w formacie ascii.
Jeśli chcesz otrzymać oficjalną kopię angielską z sunsite, oto URL:
Oto lista modułów określonych w skryptach konfiguracyjnych jako eksperymentalne, posiadających niewystarczające informacje, lub takich, których Kodów Źródłowych nie rozumiem, bo jestem zbyt ciemny. Wybór należy do ciebie.
Jest to zestaw programów niezbędnych do obsługiwania modułów. W czasie, gdy to
piszę, najświeższa wersja narzędzi do obsługi modułów to
modules-2.0.0.tar.gz. Informacje na temat bieżącej wersji można znaleźć pod
adresem http://www.pi.se/blox
Pierwszą informację o modułach udostępnili panowie Jacques Gelinas
jacques@solucorp.qc.ca oraz Björn Ekwall bj0rn@blox.se za
pośrednictwem pliku /usr/src/linux/Documentation/modules.txt.
W pierwszym kroku powinieneś skompilować jądro, tak jak jest to opisane w pliku
linux/README. Ogólnie rzecz biorąc robi się to tak:
Przy make config, wybierasz, które elementy chcesz włączyć do
rezydentnej części jądra, a które chcesz używać w postaci ładowalnych
modułów. Zazwyczaj do części rezydentnej włączasz minimum składników koniecznych do
załadowania systemu:
Liczba modułów nieustannie się zwiększa i dla wszystkich elementów, które można w
danym jądrze skompilować do postaci modułów, będziesz mógł wybrać opcję m w
make config .
Masz również możliwość stworzenia modułów, które są w mniejszym stopniu zależne od
wersji jądra. Można tę opcję ustawić w trakcie make config, przez włączenie
CONFIG_MODVERSIONS. Jest ona najbardziej przydatna w przypadku
stabilnych wersji jądra, takich jak na przykład jądra serii 1.2 i 2.0.
Jeśli masz moduły, które oparte są na kodach nie dołączonych do
oficjalnych kodów źródłowych jądra, ta opcja z pewnością ci się spodoba...
Po skompilowaniu jądra, generujesz moduły poleceniem:
make modules
Nastąpi kompilacja wszystkich modułów i uaktualnienie katalogu
linux/modules. W tymże katalogu znajdziesz masę dołączeń symbolicznych,
wskazujących rozmaite pliki obiektowe w katalogach źródłowych jądra.
Teraz, gdy już stworzyłeś wszystkie moduły, powinieneś również wydać polecenie:
make modules_install
Skopiuje ono wszystkie nowo stworzone moduły do katalogów
/lib/modules/wersja_jądra/, gdzie wersja_jądra to coś w rodzaju
2.0.1, zależnie od obecnie posiadanej przez ciebie wersji jądra.
Jak tylko przeładujesz nowo stworzone jądro, możesz instalować i usuwać moduły
za pomocą programów narzędziowych insmod i rmmod. Jeśli przeczytasz
stronę podręcznika systemowego man na temat insmod, dowiesz się również, jak
łatwo jest skonfigurować moduł przy użyciu insmod (wskazówka:
symbol=wartość).
modprobe i depmod.Masz również dostęp do dwóch programów narzędziowych: modprobe i
depmod. modprobe jest to wrapper lub rozszerzenie do insmod. Owe
narzędzia wykorzystują (i utrzymują) zestaw plików, umieszczonych w katalogu
/lib/modules, opisujących wszystkie dostępne dla danej wersji jądra
moduły wraz z ich wzajemnymi zależnościami.
Przy użyciu programu modprobe, możesz załadować każdy moduł w następujący sposób:
/sbin/modprobe module
bez zwracania szczególnej uwagi na wersję jądra, które aktualnie pracuje, lub na fakt, od jakich innych modułów dany moduł zależy.
Z pomocą pliku konfiguracyjnego programu modprobe: /etc/conf.modules,
możesz na rozmaite sposoby decydować o zachowaniu tego programu, w tym również o
automatycznym ustawianiu opcji programu insmod dla poszczególnych modułów. Tak,
tak, wszystko to jest również udokumentowane na stronach podręcznika systemowego
"man"...
Aby z skutecznie używać programu modprobe, ogólnie rzecz biorąc, należy umieścić
następujące polecenie w skrypcie /etc/rc.d/rc.S. (Na ten temat możesz
przeczytać więcej w pliku rc.hints z pakietu programów narzędziowych do
obsługi modułów, modules-x.y.z.tar.gz.)
/sbin/depmod -a
Zostaną znalezione zależności pomiędzy różnymi modułami. Wówczas, jeśli na przykład wpiszesz:
/sbin/modprobe umsdos
automatycznie załadujesz zarówno moduł msdos, jak i umsdos,
ponieważ umsdos jeździ na baranach msdos.
kerneld.No dobra, przeczytałeś wszystko powyższe i jesteś bardzo zachwycony... Teraz mówimy ci, abyś zapomniał wszystko o tym, jak ładować i usuwać moduły ładowalne.
Z pomocą demona kerneld, wszystkie te rutynowe czynności będą wykonywane
automatycznie. Wystarczy, że zaznaczysz "Y" przy opcji CONFIG_KERNELD w make
config, oraz upewnisz się, że /sbin/kerneld jest uruchamiany możliwie
jak najszybciej po załadowaniu systemu i że /sbin/depmod -a był już
uruchamiany dla bieżącego jądra. (Więcej informacji na ten temat znajdziesz w
pakiecie narzędziowym do obsługi modułów).
Ilekroć jakiś program zażyczy sobie, aby jądro wykonało funkcję, która jest dostępna jedynie w obrębie ładowalnego modułu, a moduł ów nie jest jeszcze zainstalowany w jądrze, jądro poprosi demona kerneld o zajęcie się tą sytuacją.
Oto, co się dzieje:
/etc/conf.modules.
options pliku
/etc/conf.modules.
Śmietanką na całym naszym torcie jest to, że jeśli automatycznie zainstalowany moduł nie jest przez jakiś czas używany (zazwyczaj przez 1 minutę), jest on również automatycznie usuwany.
Powoduje to, że jądro używa minimalnego niezbędnego w danym momencie obszaru pamięci, umożliwiając jej bardziej efektywne wykorzystanie niż w charakterze pojemnika na nie używany kod.
Tak naprawdę, jest to jedynie efekt uboczny prawdziwej zalety kerneld: Musisz jedynie stworzyć jądro-minimum, mniej lub bardziej niezależne od faktycznej konfiguracji sprzętowej. Ustawienia wirtualnego jądra są natomiast nadzorowane w oparciu o plik konfiguracyjny, przy uwzlędnieniu bieżącego sposobu użytkowania komputera i jądra systemu.
Powinna to być dobra wiadomość dla osób opiekujących się wieloma komputerami, jak również dla tych, którzy opiekują się dystrybucjami.
Aby używać kerneld bez nadmiernych zmagań, będzie ci potrzebny modprobe z
wersji, którą można uznać za świeżą w stosunku do twojego jądra, jak również plik
konfiguracyjny dla modprobe (/etc/conf.modules).
Ponieważ modprobe zna większość modułów, najprostszy plik konfiguracyjny może wyglądać tak:
alias scsi_hostadapter aha1542 # czy też jakikolwiek inny kontroler SCSI, jaki
posiadasz
alias eth0 3c509 # lub jakaś inna, używana przez ciebie karta ethernet
# dla niektórych kart sieciowych możesz potrzebować
# wiersza opcji - "options"
options 3c509 io=0x300 irq=10
# możesz też potrzebować wiersza opcji dla jakiegoś innego modułu
options cdu31a cdu31a_port=0x1f88 sony_pas_init=1
Mógłbyś również dodać poniższe linie, ale są to jedynie upiększenia:
alias net-pf-3 off # (nadal) brak modułu ax25
alias net-pf-4 off # jeśli nie używasz modułu ipx
alias net-pf-5 off # jeśli nie używasz modułu appletalk
Na koniec, dla pedantów: Możesz nazwać plik konfiguracyjny
/etc/conf.modules, albo /etc/modules.conf, gdyż modprobe wie,
jak postępować w każdym z tych przypadków.
Uwaga: nie możesz mieć obsługi a.out oraz ELF jednocześnie skompilowanych jako moduły. W przeciwnym razie nieźle się zapętlisz przy próbie uruchomienia insmod aby załadował obsługę a.out/ELF, co jest potrzebne do uruchmienia insmod ;-) Jeśli masz system w pełni ELF, ale potrzebujesz obsługę formatu a.out dla sesji Netscape od czasu do czasu, możesz obsługę a.out skonfigurować jako moduł.
W przeciwnym wypadku, prawdopodobnie powinieneś zostawić obsługę a.out w jądrze, natomiast jeśli w ogóle nie masz jeszcze ELF, możesz zignorować obsługe ELF.
binfmt_aout.o).
Polecenie ładowania:
/sbin/modprobe binfmt_aout.o
Brak parametrów modułu.
binfmt_elf.o).
Polecenie ładowania:
/sbin/modprobe binfmt_elf.o
Brak parametrów modułu.
binfmt_java.o). JAVA jest obiektowo zorientowanym językiem programowania, rozwijanym przez firmę SUN; programy w języku JAVA kompilowane są do postaci "JAVA bytecode", która może później być interpretowana w trakcie uruchamiania na wielu różnych systemach operacyjnych. Owe pliki binarne JAVA stają się uniwersalnym formatem plików uruchamialnych. Ta opcja pozwala uruchamiać pliki binarne w Javie tak samo jak wszystkie inne programy: przez wpisanie ich nazwy.
Polecenie ładowania:
/sbin/modprobe binfmt_java.o
Brak parametrów modułu.
floppy.o).Jest wiele opcji sterownika stacji dysków i wszystkie z nich są wymienione w pliku
README.fd w katalogu linux/drivers/block. Po szczegółowe i aktualne
informacje odwołuj się bezpośrednio do tego właśnie pliku.
Polecenie ładowania:
/sbin/modprobe floppy.o 'floppy="<opcje>"'
Wyjaśnienie opcji poniżej...
mask,allowed_drive_mask - Ustawia maskę bitową dozwolonych napędów jako
mask. Domyślnie, dopuszczone są jedynie urządzenia 0 i 1 każdego kontrolera
stacji dysków. Jest tak dlatego, że pewne niestandardowe urządzenia (płyty główne
ASUS PCI) knocą klawiaturę kiedy korzysta się z urządzeń 2 lub 3. Opcja ta jest w
pewnym stopniu zdezaktualizowana przez opcje CMOS.
all_drives - Ustawia maskę bitową dozwolonych napędów aby wszystkie były
dozwolone. Użyj tego parametru jeśli do kontrolera stacji dysków podłączone masz
więcej niż dwa napędy.
asus_pci - Ustawia maskę bitową dozwolonych napędów tak, aby dopuszczone były
jedynie urządzenia 0 i 1. (Domyślne)
daring - Informuje sterownik stacji dysków, że masz dobrze zachowujący się
kontroler napędów. Pozwala to na bardziej wydajną i płynną pracę, ale w przypadku
pewnych kontrolerów może nie działać. Pewne operacje mogą być dzięki temu przyspieszone.
0,daring - Informuje sterownik stacji dysków, że kontroler napędów powinien
być używany ostrożnie.
one_fdc - Informuje sterownik stacji dysków, że masz tylko jeden kontroler
(domyślne).
two_fdc lub adres,two_fdc - Informuje sterownik stacji dysków, że
posiadasz dwa kontrolery napędów. Uznaje się przy tym, że drugi kontroler ma adres
adres. Owa druga opcja nie jest konieczna jeśli drugi kontroler jest pod adresem
0x370, oraz jeśli używasz opcji 'CMOS'.
thinkpad - Informuje sterownik stacji dysków, że posiadasz Thinkpad. Thinkpady
używają odwróconą konwencję polecenia zmiany dysków.
0,thinkpad - Informuje sterownik stacji dysków, że nie masz Thinkpada.
omnibook lub nodma - Informuje sterownik stacji dysków, że DMA ma
nie być używane w trakcie przesyłania danych. Jest to konieczne na Omnibookach HP,
nie posiadają one bowiem kanału DMA, który mógłby być użyty przez sterownik stacji
dysków. Opcja ta przydaje się również wtedy, gdy często otrzymujesz komunikaty
"Unable to allocate DMA memory". Rzeczywiście, pamięć DMA musi być fizycznie
ciągła, przez co trudniej ją przydzielić, podczas gdy bufory przeznaczone do
innych celów mogą być przydzielone w pamięci wirtualnej. Jednakże odradzam tę
opcję, jeśli posiadasz kontroler stacji dysków bez FIFO (8272A lub 82072). 82072A i
późniejsze są OK. Aby używać nodma, potrzebujesz również co najmniej 486. Jeśli
używasz trybu nodma, zalecam, abyś również ustawił próg czułości FIFO na 10 lub
niższy, aby ograniczyć ilość generowanych przerwań przesyłu danych.
dma - Informuje sterownik stacji dysków, że dostępny jest działający kanał DMA
(ustawienie domyślne).
nofifo - Całkowicie wyłącza FIFO. Jest to konieczne, gdy otrzymujesz komunikaty
"Bus master arbitration error" od karty ethernet (lub innych urządzeń) w trakcie
korzystania ze stacji dysków.
fifo - Włącza FIFO (domyślne)
[próg czułości],fifo_depth - Ustawia próg czułości FIFO. Opcja ta jest
najbardziej stosowna w trybie DMA. Jeśli ten parametr jest wyższy, sterownik stacji
dysków toleruje większe opóźnienia przerwań, ale generuje więcej przerwań, (tzn. w
większym stopniu obciąża system). Jeśli parametr ten jest niższy, opóźnienia
przerwań również powinny być mniejsze (procesor działa szybciej). Zaletą niższego
progu czułości jest mniejsza ilość przerwań.
Aby wyregulować próg czułości fifo, włącz komunikaty przepełnienia/niedoboru przy użyciu komendy 'floppycontrol --messages'. Następnie skorzystaj z napędu. Jeśli otrzymasz dużo komunikatów przepełnienia/niedoboru ("Over/Underrun - retrying"), oznacza to, że próg czułości fifo jest za niski. Powinieneś podwyższać próg do momentu, w którym będziesz otrzymywać wyżej opisane komentarze tylko od czasu do czasu. Dobrze jest skompilować sterownik napędu dysków jako moduł przy okazji testowania czułości fifo. Pozwala to na testowanie różnych ustawień fifo bez konieczności przeładowywania systemu za każdym razem. Pamiętaj, że powinieneś wykonać 'floppycontrol --messages' po każdym załadowaniu modułu. Zazwyczaj regulowanie progu czułości fifo nie jest konieczne, gdyż domyślne ustawienie (0xa) jest rozsądne.
[napęd],[typ],cmos -
Ustawia typ CMOS napędu napęd jako typ. Jest to konieczne jeśli masz
więcej niż dwa napędy dysków (jedynie dwa mogą być zdefiniowane fizycznym
CMOS), lub jeśli twój BIOS używa niestandardowych typów CMOS. Typy CMOS to:
0 - Użyj wartość fizycznego CMOS
1 - 5 1/4 DD
2 - 5 1/4 HD
3 - 3 1/2 DD
4 - 3 1/2 HD
5 - 3 1/2 ED
6 - 3 1/2 ED
16 - nie znany lub nie zainstalowany
unexpected_interrupts - Wypisanie ostrzeżenia w przypadku otrzymania
nieoczekiwanego przerwania (zachowanie domyślne).
no_unexpected_interrupts lub L40SX -
Nie wypisuj komunikatów w przypadku otrzymania nieoczekiwanego przerwania. Ta opcja
jest potrzebna na laptopach IBM L40SX przy pewnych trybach graficznych. (Wydaje
się, że jest jakaś współzależność obsługi grafiki i napędów dysków. Nieoczekiwane
przerwania mają wpływ jedynie na wydajność i bezpiecznie można je pominąć).
loop.o).Włączenie tej opcji umożliwi ci montowanie pliku jako system plików. Jest to przydatne, gdy chcesz sprawdzić system plików ISO9660 zanim wypalisz CD-ROM, lub jeśli chcesz używać obrazów zawartości dyskietek przed ich zapisaniem.
Opcja ta również umożliwia zamontowanie systemu szyfrowanego. Aby wykorzystać tę
możliwość, potrzebujesz ostatnie uzupełnienia programów mount i innych o obsługę
DES i IDEA. Możesz je znaleźć tutaj:
http://www.binary9.net/nicholas/linuxkernel/patches.
Pamiętaj, że to pętlowe urządzenie blokowe nie ma nic wspólnego z urządzeniem loopback używanym przy połączeniach sieciowych komputera z nim samym.
Polecenie ładowania:
/sbin/modprobe loop.o
Brak parametrów modułu.
[md] (RAID).Ten sterownik pozwala połączyć kilka partycji twardych dysków w jedno logiczne urządzenie blokowe.
Programy narzędziowe do obsługi urządzeń md można znaleźć pod adresem
sweet-smoke.ufr-info-p7.ibp.fr/public/Linux/md035.tar.gz. W tym samym
miejscu zamieszczono również dokument md-FAQ.
Istnieją różne poziomy RAID (Redundant Array of Inexpensive Disks - Redundantna Macierz Niedrogich Dysków).
Najlepsza przepustowość danych wśród systemów RAID. Przezroczysty dla oprogramowania.
Brak kontroli błędów i redundancji. Uszkodzenie jednego dysku w macierzy powoduje utratę wszystkich danych w całej macierzy. Wszystkie parametry MTBF koniecznie trzeba przeliczyć ponownie.
Brak przestojów w zapisie. 100% redundancja dysku. Uszkodzenie nie obniża wydajności.
100% nadwyżka kosztów. Wymaga podwojonej przestrzeni dyskowej i energii w porównaniu do systemu bez macierzy.
Dobra wydajność przy systemach przetwarzających transakcje. Brak nadwyżki zapisu jak w RAID-4. Nadwyżka przestrzeni dyskowej nie przekracza jednego dysku. Możliwy równoległy odczyt w całej macierzy.
Spadek wydajności przy rekonstrukcji danych.
Przepustowość danych porównywalna do RAID-0. 100% redundancja danych. Nie ma spadku wydajności po uszkodzeniu.
100% nadwyżka kosztów. Wymaga dwukrotnie większej przestrzeni dyskowej i zasilania w porównaniu do systemu bez macierzy.
W chwili obecnej jedynie RAID-0 jest dostępny dla Linuxa. Tryb linearny nie jest uważany za część definicji RAID. Komisja Doradcza ds RAID również nie uznaje RAID-0 jako części definicji RAID z powodu braku redundancji danych.
Trybami, które warto zastosować, są RAID-0, RAID-1, RAID-5 oraz RAID-6.
linear.o).Jeśli wybierzesz tę opcję, sterownik urządzeń wielokrotnych będzie mógł pracować w tak zwanym trybie linearnym, tzn. połączy partycje twardych dysków po prostu dodając jedną do drugiej.
Polecenie ładowania:
/sbin/modprobe linear.o
Brak parametrów ładowania.
raid0.o).Jeśli wybierzesz tę opcję, sterownik urządzeń wielokrotnych będzie mógł pracować w tak zwanym trybie raid0, tzn. połączy partycje twardych dysków w jedno urządzenie logiczne w taki sposób, aby zapełniane one były równomiernie, jedna porcja danych tu, jedna tam. Zwiększy to przepustowość, o ile partycje znajdują się na osobnych dyskach.
Polecenie ładowania:
/sbin/modprobe raid0.o
Brak parametrów ładowania.
rd.o).Włączenie tej opcji pozwoli ci używać część pamięci RAM jako urządzenie blokowe, tak, abyś mógł założyć na nim systemy plików, dokonywać operacje zapisu i odczytu i robić wszystkie inne rzeczy, jakie są możliwe na zwykłych urządzeniach blokowych (jak np. dysk twardy). Zazwyczaj dysk RAM używany jest do załadowania z dyskietki i przechowania minimalnego bazowego systemu plików (root filesystem) w trakcie pierwszej instalacji Linuxa.
Polecenie ładowania:
/sbin/modprobe rd.o
Brak parametrów ładowania.
Dostępne są parametry przy ładowaniu systemu, zobacz BootPrompt-HOWTO.
xd.o).Bardzo stare 8-bitowe kontrolery twardych dysków używane w komputerach IBM XT. Obecność obsługi dysków twardych XT wcale nie oznacza, że możesz uruchomić Linuxa na IBM XT :).
Polecenie ładowania:
/sbin/modprobe xd.o
Brak parametrów ładowania.
ipip.o i new_tunnel.o).Tunelowanie oznacza enkapsulację danych jednego protokołu w obrębie innego
protokołu i przesyłanie danych w takiej postaci przez kanał, który rozumie
protokół enkapsulacji. Potrzebne są dwa moduły, ipip.o, dekoder protokołu
IP/IP, oraz sterownik new_tunnel.o (poprzednio nazywał się on tunnel.o i
dokumentacja nadal odnosi się do tej starszej nazwy).
Dokumentacja znajduje się w /usr/src/linux/drivers/net/README.tunnel.
Polecenie ładowania:
/sbin/modprobe ipip.o
/sbin/modprobe new_tunnel.o
Brak parametrów ładowania.
ip_alias.o).Czasami wygodnie jest nadać jednemu interfejsowi sieciowemu (czyli portowi szeregowemu karty sieciowej) kilka adresów. Najczęściej jest tak w sytuacji, gdy chcesz podawać na zewnątrz różne dokumenty WWW w zależności od tego, której nazwy komputera użyto, aby się z tobą połączyć.
Polecenie ładowania:
/sbin/modprobe ip_alias.o
Brak parametrów ładowania.
rarp.o).
Polecenie ładowania:
/sbin/modprobe rarp.o
Brak parametrów ładowania.
ipx.o).Jest to obsługa protokołu sieciowego Novella - IPX, powszechnie używanego w sieciach lokalnych łączących komputery pracujące pod systemami DOS i Windows.
Protokół IPX jest konieczny, gdy:
Stroną domową ncpfs jest ftp.gwdg.de/pub/linux/misc/ncpfs, ale można
ją również znaleźć na sunsite i w wielu innych archiwach lustrzanych.
Strona domowa Linware to klokan.sh.cvut.cz/pub/linux/linware,
Pakiet nwserv - Mars_nwe znajdziesz natomiast tutaj:
ftp.gwdg.de/pub/linux/misc/ncpfs.
Polecenie ładowania:
/sbin/modprobe ipx.o
Brak parametrów ładowania.
appletalk.o).Appletalk to sposób, w jaki komputery Apple rozmawiają ze sobą w sieci. EtherTalk to nazwa określająca appletalk w sieci ethernet, a Localtalk to appletalk w sieci opartej o łącza szeregowe Apple.
Polecenie ładowania:
/sbin/modprobe appletalk.o
Brak parametrów ładowania.
Obsługa SCSI w jądrze Linuxa może przybierać postać modułów na szereg różnych sposobów, zależnie od potrzeb użytkownika. Aby zrozumieć poszczególne opcje, zdefiniujemy na wstępie kilka pojęć.
SCSI-core zawiera rdzeń obsługi SCSI. Bez niego nic nie zrobisz z którymkolwiek
innym sterownikiem SCSI. Obsługa rdzenia SCSI może mieć postać modułu
(scsi_mod.o), lub można ją wbudować w jądro. Jeśli rdzeń jest modułem, musi
on być pierwszym z ładowanych modułów obsługi SCSI, a przy usuwaniu modułów z
jądra, będzie musiał być usunięty w ostatniej kolejności.
Poszczególne sterowniki wyższego lub niższego poziomu można ładować w dowolnej
kolejności, o ile rdzeń obsługi SCSI znajduje się już w jądrze (jest wkompilowany
lub załadowany jako moduł). Sterownik dysków (sd_mod.o), napędów CD-ROM
(sr_mod.o), napędów taśmowych (st.o) i ogólny sterownik SCSI (sg.o)
to sterowniki wyższego poziomu, służące do obsługi rozmaitych typów urządzeń.
Dla przykładu, możesz załadować sterownik napędu taśmowego aby skorzystać z taśmy,
a następnie usunąć go, gdy już nie potrzebujesz sterownika (tym samym zwalniając
przydzieloną mu pamięć).
Sterowniki niższego poziomu to te, które obsługują poszczególne karty
kontrolerów SCSI, kompatybilne z używaną przez ciebie konfiguracją
sprzętową. Przykładem jest moduł aha1542.o do obsługi kontrolerów Adaptec
1542.
scsi_mod.o).
Polecenie ładowania:
/sbin/modprobe scsi_mod.o
Brak parametrów ładowania.
sd_mod.o).
Polecenie ładowania:
/sbin/modprobe sd_mod.o
Brak parametrów ładowania.
st.o).
Polecenie ładowania:
/sbin/modprobe st.o
Brak parametrów ładowania.
Dostępne są parametry przy ładowaniu systemu, patrz BootPrompt-HOWTO.
sr_mod.o).
Polecenie ładowania:
/sbin/modprobe sr_mod.o
Brak parametrów ładowania.
sg.o).
Polecenie ładowania:
/sbin/modprobe sg.o
Brak parametrów ładowania.
Większość sterowników kart SCSI nie przyjmuje parametrów modułów, ponieważ
zazwyczaj dokonuje automatycznej detekcji ustawień karty. Koniecznie
przeczytaj SCSI-HOWTO i pliki README w katalogu
/usr/src/linux/drivers/scsi, aby dowiedzieć się więcej o swoich
urządzeniach. Jeśli twoja karta ma jakiś niekonwencjonalny adres wejścia/wyjścia,
musisz permanentnie włączyć sterownik w jądro i używać opcji przy ładowaniu
systemu, patrz BootPrompt-HOWTO.
Możesz również pomieszać w Kodzie Źródłowym i przekompilować.
wd7000.o),
Polecenie ładowania:
/sbin/modprobe wd7000.o
Brak parametrów ładowania.
Autodetekcja karty, wymaga zainstalowanego BIOSu.
Dostępne są parametry przy ładowaniu systemu, patrz BootPrompt-HOWTO.
aha154x.o).
Polecenie ładowania:
/sbin/modprobe aha154x.o
Brak parametrów ładowania.
Autodetekcja karty, wymaga zainstalowanego BIOSu.
Dostępne są parametry przy ładowaniu systemu, patrz BootPrompt-HOWTO.
aha1542.o).
Polecenie ładowania:
/sbin/modprobe aha1542.o
Brak parametrów ładowania.
Autodetekcja jedynie dla adresów 0x330 i 0x334.
Dostępne są parametry przy ładowaniu systemu, patrz BootPrompt-HOWTO.
aha1740.o).
Polecenie ładowania:
/sbin/modprobe aha1740.o
Brak parametrów ładowania.
Autodetekcja.
aic7xxx.o).
Polecenie ładowania:
/sbin/modprobe aic7xxx.o
Brak parametrów ładowania.
Autodetekcja, BIOS musi być włączony.
Dostępne są parametry przy ładowaniu systemu, patrz BootPrompt-HOWTO.
advansys.o).
Polecenie ładowania:
/sbin/modprobe advansys.o [parameters]
asc_iopflag=1 włącz=1, wyłącz=0 przeszukiwanie portów
asc_ioport=0x110,0x330 porty do przeszukania
asc_dbglvl=1 poziom śledzenia przebiegu programu
0: Wyłącznie błędy
1: Śledzenie wysokopoziomowe
2-N: Śledzenie opisowe
Dostępne są parametry przy ładowaniu systemu, patrz BootPrompt-HOWTO.
in2000.o).
Polecenie ładowania:
/sbin/modprobe in2000.o
Brak parametrów ładowania.
Autodetekcja, BIOS nie jest wymagany.
BusLogic.o).Lista obsługiwanych kart BusLogic jest długa. Aby w całości zapoznać się
ze sprawą, przeczytaj usr/src/linux/drivers/scsi/README.BusLogic.
Polecenie ładowania:
/sbin/modprobe BusLogic.o
Brak parametrów ładowania.
Dostępne są parametry przy ładowaniu systemu, patrz BootPrompt-HOWTO.
dtc.o).
Polecenie ładowania:
/sbin/modprobe dtc.o
Brak parametrów ładowania.
Autodetekcja.
Dostępne są parametry przy ładowaniu systemu, patrz BootPrompt-HOWTO.
eata.o).
Polecenie ładowania:
/sbin/modprobe eata.o
Brak parametrów ładowania.
Dostępne są parametry przy ładowaniu systemu, patrz BootPrompt-HOWTO.
eata_dma.o).Obejmuje DPT Smartcache, Smartcache III oraz SmartRAID.
Polecenie ładowania:
/sbin/modprobe eata_dma.o
Brak parametrów ładowania.
Autodetekcja działa niezależnie od ustawień.
eata_pio.o).
Polecenie ładowania:
/sbin/modprobe eata_pio.o
Brak parametrów ładowania.
fdomain.o).
Polecenie ładowania:
/sbin/modprobe fdomain.o
Brak parametrów ładowania.
Autodetekcja, wymaga zainstalowanego BIOSu.
NCR5380.o).
Polecenie ładowania:
/sbin/modprobe NCR5380.o
ncr_irq=xx przerwanie
ncr_addr=xx port lub adres bazowy (dla portu
lub mapowania pamięci)
ncr_dma=xx DMA
ncr_5380=1 aby ustawić kartę NCR5380
ncr_53c400=1 aby ustawić kartę NCR53C400
modprobe g_NCR5380 ncr_irq=5 ncr_addr=0x350 ncr_5380=1
- dla karty NCR5380 mapowanej na port lub
modprobe g_NCR5380 ncr_irq=255 ncr_addr=0xc8000 ncr_53c400=1
- dla karty NCR53C400 mapowanej w pamięci, wyłączone przerwania
(Należy wpisać 255 przy braku przerwań lub przerwaniu DMA, 254 aby
automatycznie testować numer IRQ, jeśli wystąpiło nadpisanie w linii
polecenia.)
Dostępne są parametry przy ładowaniu systemu, patrz BootPrompt-HOWTO.
NCR53c406a.o).
Polecenie ładowania:
/sbin/modprobe NCR53c406a.o
Brak parametrów ładowania.
Dostępne są parametry przy ładowaniu systemu, patrz BootPrompt-HOWTO.
53c7,8xx.o).
Polecenie ładowania:
/sbin/modprobe 53c7,8xx.o
Brak parametrów ładowania.
Autodetekcja, wymaga zainstalowanego BIOSu.
Dostępne są parametry przy ładowaniu systemu, patrz BootPrompt-HOWTO.
ncr53c8xx.o).
Polecenie ładowania:
/sbin/modprobe ncr53c8xx.o
Brak parametrów ładowania.
ppa.o).Dokładniejsze informacje znajdziesz w pliku /usr/src/linux/drivers/scsi/README.ppa.
Polecenie ładowania:
/sbin/modprobe ppa.o ppa_base=0x378 ppa_nybble=1
Oto parametry i ich funkcje:
Zmienna Domyślnie Opis
ppa_base 0x378 Adres bazowy portu równoległego PPA.
ppa_speed_high 1 Opóźnienie we/wy w mikrosekundach, używane przy
transferach danych
ppa_speed_low 6 Opóźnienie we/wy w mikrosekundach, używane przy
innych operacjach
ppa_nybble 0 1 aby zmusić sterownik do pracy w trybie 4-bitowym.
pas16.o).
Polecenie ładowania:
/sbin/modprobe pas16.o
Brak parametrów ładowania.
Autodetekcja, nie wymaga BIOSu.
Dostępne są parametry przy ładowaniu systemu, patrz BootPrompt-HOWTO.
qlogicfas.o).
Polecenie ładowania:
/sbin/modprobe qlogicfas.o
Brak parametrów ładowania.
Dostępne są parametry przy ładowaniu systemu, patrz BootPrompt-HOWTO.
qlogicisp.o).Wymaga oprogramowania firmowego.
Polecenie ładowania:
/sbin/modprobe qlogicisp.o
Brak parametrów ładowania.
Dostępne są parametry przy ładowaniu systemu, patrz BootPrompt-HOWTO.
seagate.o).
Polecenie ładowania:
/sbin/modprobe seagate.o
Brak parametrów ładowania.
Autodetekcja jedynie adresów, IRQ na stałe = 5.
Wymaga zainstalowanego BIOSu.
Dostępne są parametry przy ładowaniu systemu, patrz BootPrompt-HOWTO.
t128.o).
Polecenie ładowania:
/sbin/modprobe t128.o
Brak parametrów ładowania.
Autodetekcja, wymaga zainstalowanego BIOSu.
Dostępne są parametry przy ładowaniu systemu, patrz BootPrompt-HOWTO.
u14-34f.o).
Polecenie ładowania:
/sbin/modprobe u14-34f.o
Brak parametrów ładowania.
Autodetekcja karty, a NIE portu 0x310, BIOS nie jest wymagany.
Dostępne są parametry przy ładowaniu systemu, patrz BootPrompt-HOWTO.
ultrastor.o).
Polecenie ładowania:
/sbin/modprobe ultrastor.o
Brak parametrów ładowania.
Dostępne są parametry przy ładowaniu systemu, patrz BootPrompt-HOWTO.
bsd_comp.o).
Polecenie ładowania:
/sbin/modprobe bsd_comp.o
Brak parametrów ładowania.
Wymaga ppp.o
slhc.o).Procedury kompresji i dekompresji pakietów tcp (do celów transmisji po wolnych liniach szeregowych)
Wymagany przez protokoły SLIP i PPP (również ISDN-PPP).
Polecenie ładowania:
/sbin/modprobe slhc.o
Brak parametrów ładowania.
8390.o).Jest to kod dostosowany do kości, dla wielu kart ethernet opartych o układ
8390. Nie jest to kompletny sterownik, musi być połączony z kodem dostosowanym do
konkretnej karty, np. ne.o, wd.o, 3c503.o, itd.
Polecenie ładowania:
/sbin/modprobe 8390.o
Brak parametrów ładowania.
dummy.o).Ogólnie rzecz biorąc jest to urządzenie typu worek bez dna (tzn. wszystko, co wysłane jest do tego urządzenia, obracane jest w nicość), z konfigurowalnym adresem IP. Najczęściej jest używane po to, aby udawać przed lokalnymi programami, że w danej chwili nieaktywny adres SLIP naprawdę istnieje.
Polecenie ładowania:
/sbin/modprobe dummy.o
Brak parametrów ładowania.
eql.o). Jeśli twój komputer ma dwa łącza szeregowe z innymi komputerami (zazwyczaj wymaga to dwóch modemów i linii telefonicznych), oraz używasz na tych łączach protokołu SLIP (protokołu do obsługi ruchu internetowego przez linie telefoniczne) lub PPP (lepszy SLIP), przy użyciu tego sterownika możesz spowodować, że będą się one zachowywać jak jedno łącze podwójnej prędkości.
Polecenie ładowania:
/sbin/modprobe eql.o
Brak parametrów ładowania.
dlci.o).Jest to obsługa protokołu frame relay; frame relay to szybka i tania metoda
zdalnego podłączania się do dostawcy usług internetu, lub tworzenia prywatnej
sieci WAN. Na jednej fizycznej linii pomiędzy twoim komputerem a lokalnym
"przełącznikiem" (tzn. punktem wejściowym do sieci frame relay) można relizować
kilka logicznych połączeń punkt-punkt z innymi komputerami podłączonymi do sieci
frame relay. Ogólne objaśnienie protokołu znajdziesz w WWW, pod adresem
http://frame-relay.indiana.edu/4000/4000index.html. Aby używać frame
relay, potrzebujesz urządzeń obsługi (FRAD) oraz pewnych programów z pakietu
narzędzi sieciowych, tak jak objaśniono to w pliku
Documentation/networking/framerelay.txt.
Polecenie ładowania:
/sbin/modprobe dlci.o
Brak parametrów ładowania.
sdla.o).Jest to sterownik dla Urządzeń Dostępu do Frame Relay (FRAD) Sangoma S502A,
S502E oraz S508. Są to karty wieloprotokołowe, ale obecnie sterownik obsługuje
jedynie frame relay. Przeczytaj proszę
Documentation/networking/framerelay.txt.
Polecenie ładowania:
/sbin/modprobe sdla.o
Brak parametrów ładowania.
Wymaga dlci.o
plip.o).PLIP (Parallel Line Internet Protocol - Internetowy Protokół Linii
Równoległych) używany jest do tworzenia miniaturowych sieci, składających się z
dwóch (lub rzadko z większej ilości) lokalnych komputerów. Porty równoległe
(złacza komputerowe z 25 otworami) łączone są kablami "null printer" lub "Turbo
Laplink", króre mogą przesyłać 4 bity naraz, lub przy użyciu specjalnych kabli
PLIP (tylko w przypadku, gdy porty równoległe są dwukierunkowe), po których
przesłać naraz można 8 bitów (opis konstrukcji tych kabli znajdziesz w pliku
drivers/net/README?.plip). Kable te mogą mieć długość do 15m. Działa to
również wtedy, gdy jeden z komputerów pracuje w systemie DOS/Windows i ma
zainstalowane jakieś oprogramowanie PLIP, np. sterownik pakietów PLIP Crynwr
http://sunsite.cnam.fr/packages/Telnet/PC/msdos/misc/pktdrvr.txt oraz
oprogramowanie winsock lub telnet NCSA.
Polecenie ładowania:
/sbin/modprobe plip.o io=0x378 irq=7
io = 0
irq = 0 (domyślnie, używa IRQ 5 dla portu 0x3bc,
IRQ 7 dla portu 0x378,
oraz IRQ 2 dla portu 0x278)
(Detekcja na portach: 0x278, 0x378, 0x3bc)
ppp.o).Aby używać PPP, potrzebujesz dodatkowy program, zwany pppd, zgodnie z opisem w
Documentation/networking/ppp.txt oraz PPP-HOWTO, dostępnego pod adresem
sunsite.unc.edu:/pub/Linux/docs/HOWTO.
Polecenie ładowania:
/sbin/modprobe ppp.o
Brak parametrów ładowania.
Wymaga slhc.o
Wymaga również serial.o, który nie jest to automatycznie
wykrywany, więc serial.o należy załadować ręcznie.
slip.o).SLIP (Serial Line Internet Protocol - Internetowy Protokół Linii Szeregowych) jest protokołem używanym do przesyłania ruchu internetowego po liniach telefonicznych lub kablach szeregowych (znanych również pod nazwą 'nullmodem').
Polecenie ładowania:
/sbin/modprobe slip.o
slip_maxdev = 256 (domyślna wartość SL_NRUNIT z pliku slip.h)
Wymaga slhc.o
Wymaga również serial.o, który nie jest to automatycznie
wykrywany, więc serial.o należy załadować ręcznie.
baycom.o).Jest to sterownik do prostych radiomodemów typu Baycom, które podłącza się do
złącz szeregowych lub równoległych. Sterownik obsługuje modele ser12 i par96. Aby
skonfigurować sterownik, należy użyć programu narzędziowego setbaycom dostępnego
pod adresem
http://www.ife.ee.ethz.ch/~sailer/ham/ham.html#lnxbay.
Informacje o modemach znajdziesz pod adresem http://www.baycom.de, oraz w
pliku drivers/char/README.baycom.
Polecenie ładowania:
/sbin/modprobe baycom.o modem=1 iobase=0x3f8 irq=4 options=1
major liczba główna, którą powinien użyć sterownik; domyślnie 60
modem typ modemu pierwszego kanału (liczba poboczna 0); 1=ser12,
2=par96/par97, jakakolwiej inna wartość jest niepoprawna
iobase adres bazowy portu; typowe wartości to 0x3f8,0x2f8, 0x3e8, 0x2e8
dla ser12, oraz 0x378, 0x278, 0x3bc dla par96/par97
irq numer przerwania portu; typowe wartości to 3,4 dla ser12 oraz 7 dla
par96/par97 options 0=use hardware DCD, 1=use software DCD
strip.o).STRIP jest protokołem radiowym rozwijanym w związku z projektem MosquitoNet (http://mosquitonet.stanford.edu/) do celów przesyłania ruchu internetowego przy użyciu radia Metricom. Radia Metricom są to małe, zasilane bateryjnie, radiowe przekaźniki pakietowe pracujące z prędkością 100kbit/sekundę. Mają rozmiar zbliżony do telefonu komórkowego. (Mogłeś również słyszeć o nich pod nazwą "modemy Metricom", ale staramy się unikać tutaj określenia "modem", ponieważ wprowadza ono wiele osób w błąd, przez co myślą, że można podłączyć modem Metricom do linii telefonicznej i używać go jak zwykły modem). STRIP możesz używać na każdym komputerze z Linuxem i portem szeregowym, choć oczwiście najbardziej może się on przydać posiadaczom komputerów przenośnych.
Polecenie ładowania:
/sbin/modprobe strip.o
Brak parametrów ładowania.
wavelan.o).Są to karty do bezprzewodowej komunikacji zbliżonej do ethernet. Obsługiwane są karty AT&T GIS i NCR WaveLAN.
Polecenie ładowania:
/sbin/modprobe wavelan.o
io = 0x390 (Można ustawić, ale zmienianie nie jest zalecane)
irq = 0 (Jeśli zmienione, nie brane pod uwagę)
wic.o).Obsługa mostu radiowego WIC pracującego na porcie równoległym.
Polecenie ładowania:
/sbin/modprobe wic.o
Wydaje się, że urządzenia 'wic0', 'wic1' and 'wic2' mają bezpośredni
związek z odpowiadającymi im portami 'lpx'.
scc.o).Te karty są używane do podłączania komputera z Linuxem do amatorskiego radio w
celu łączenia się z innymi komputerami. Jeśli chciałbyś ich używać, przeczytaj
Documentation/networking/z8530drv.txt oraz HAM-HOWTO.
Polecenie ładowania:
/sbin/modprobe scc.o
Brak parametrów modułu.
3c501.o).
Polecenie ładowania:
/sbin/modprobe 3c501.o
io = 0x280 bazowy adres IO
irq = 5 IRQ
(Probes ports: 0x280, 0x300)
3c503.o).
Polecenie ładowania:
/sbin/modprobe 3c503.o
io = 0 (Będzie narzekać, jeśli nie podasz "io=0xNNN")
irq = 0 (IRQ ustawiane programowo przez sterownik, przy użyciu
autoIRQ)
xcvr = 0 (Użyj xcvr=1 aby wybrać zewnętrzny transceiver)
(Detekcja na portach: 0x300, 0x310, 0x330, 0x350, 0x250, 0x280, 0x2A0,0x2E0)
Wymaga 8390.o
3c505.o).
Polecenie ładowania:
/sbin/modprobe 3c505.o
io = 0x300
irq = 0
(Detekcja na portach: 0x300, 0x280, 0x310)
3c507.o).
Polecenie ładowania:
/sbin/modprobe 3c507.o
io = 0x300
irq = 0
(Detekcja na portach: 0x300, 0x320, 0x340, 0x280)
3c509.o).
Polecenie ładowania:
/sbin/modprobe 3c509.o
io = 0
irq = 0
( Autodetekcja przez moduł w trakcie ładowania działa dobrze jedynie na
EISA, AUTODETEKCJA ID NA ISA NIE DZIAŁA POPRAWNIE! Jeśli chesz, aby
sterownik dokonywał poprawnej detekcji na szynie ISA, wkompiluj go
statycznie w jądro ).
3c59x.o).Zapewnia obsługę następujących kart:
Polecenie ładowania:
/sbin/modprobe 3c59x.o debug=1 options=0,,12
Ustawia ono poziom komunikatów śledzenia aby wyświetlana była
minimalna ilość komunikatów, ustawia pierwszą kartę na trancseiver
10baseT, drugą na transceiver EEPROM, a trzecią aby pracowała w pełnym
trybie duplex, przy użyciu transceivera 100baseTx.
(Uwaga: kolejność kart ustawiana jest przez PCI BIOS).
Możliwe ustawienia typów nośnika
0 10baseT
1 10Mbs AUI
2 nie zdefiniowane
3 10base2 (BNC)
4 100base-TX
5 100base-FX
6 MII (jeszcze niedostępny)
7 <Użyj ustawienie domyślne>
8 Bit pełnego trybu duplex
8 10baseT pełny duplex
12 100baseTx pełny duplex
16 Bit włączający Bus-master (jedynie zastosowania eksperymentalne!)
Szczegóły na temat implementacji sterownika znajdziesz na początku pliku
źródłowego.
wd.o).
Polecenie ładowania:
/sbin/modprobe wd.o
io = 0 (Będzie narzekać, jeśli nie podasz "io=0xNNN")
irq = 0 (Wartość IRQ czytana z EEPROM, starodawne karty użwyają autoIRQ)
mem = 0 (Wymuszenie pamięci dzielonej na adresie 0xC8000, lub innym...)
mem_end = 0 (Wymuszenie niestandardowego rozmiaru pamięci przez
podanie wartości mem_end)
(np. dla 32k WD8003EBT, użyj mem=0xd0000 mem_end=0xd8000
(Detekcja na portach: 0x300, 0x280, 0x380, 0x240)
Wymaga 8390.o
smc-ultra.o).
Polecenie ładowania:
/sbin/modprobe smc-ultra.o
io = 0 (Będzie narzekać, jeśli nie podasz "io=0xNNN")
irq = 0 (Wartość IRQ czytana z EEPROM)
(Detekcja na portach: 0x200, 0x220, 0x240, 0x280, 0x300, 0x340, 0x380)
Wymaga 8390.o
smc9194.o).Jest to sterownik do kart ethernet SMC serii 9000.
Polecenie ładowania:
/sbin/modprobe smc9194.o
io = 0 dla adres bazowego
irq = 0 dla IRQ
ifport = 0 dla autodetekcji, 1 dla TP, 2 dla AUI ( lub 10base2 )
Detekcja na portach: 0x200, 0x220, 0x240, 0x260, 0x280, 0x2A0, 0x2C0, 0x2E0,
0x300, 0x320, 0x340, 0x360, 0x380, 0x3A0, 0x3C0, 0x3E0
Poziom śledzenia można ustawić w kodzie źródłowym smc9194.c.
at1700.o).
Polecenie ładowania:
/sbin/modprobe at1700.o
io = 0x260
irq = 0
(Detekcja na portach: 0x260, 0x280, 0x2A0, 0x240, 0x340, 0x320, 0x380, 0x300)
e2100.o).
Polecenie ładowania:
/sbin/modprobe e2100.o
io = 0 (Będzie narzekać, jeśli nie podasz "io=0xNNN")
irq = 0 (IRQ ustawiane programowo przez sterownik)
mem = 0 (Nadpisanie domyślnego początku bloku pamięci dzielonej 0xd0000)
xcvr = 0 (Użyj xcvr=1 aby wybrać zewnętrzny transceiver.)
(Detekcja na portach: 0x300, 0x280, 0x380, 0x220)
Wymaga 8390.o
depca.o).
Polecenie ładowania:
/sbin/modprobe depca.o
io = 0x200
irq = 7
(Detekcja na portach: ISA: 0x300, 0x200;
EISA: 0x0c00 )
ewrk3.o).
Polecenie ładowania:
/sbin/modprobe ewrk3.o
io = 0x300
irq = 5
(Przy module brak autodetekcji!
Na szynach EISA dokonywana jest detekcja EISA.
Statycznie dołączony kod do jądra testuje porty na szynie ISA:
0x100, 0x120, 0x140, 0x160, 0x180, 0x1A0, 0x1C0,
0x200, 0x220, 0x240, 0x260, 0x280, 0x2A0, 0x2C0, 0x2E0,
0x300, 0x340, 0x360, 0x380, 0x3A0, 0x3C0)
eexpress.o).
Polecenie ładowania:
/sbin/modprobe eexpress.o
io = 0x300
irq = 0 (Wartość IRQ czytana z EEPROM)
(Detekcja na portach: 0x300, 0x270, 0x320, 0x340)
eepro.o).
Polecenie ładowania:
/sbin/modprobe eepro.o
io = 0x200
irq = 0
(Detekcja na portach: 0x200, 0x240, 0x280, 0x2C0, 0x300, 0x320, 0x340, 0x360)
fmv18x.o).
Polecenie ładowania:
/sbin/modprobe fmv18x.o
io = 0x220 adres bazowy
irq = 0 IRQ
Detekcja na portach: 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x300, 0x340
hp-plus.o).
Polecenie ładowania:
/sbin/modprobe hp-plus.o
io = 0 (Będzie narzekać, jeśli nie podasz "io=0xNNN")
irq = 0 (IRQ czytane z rejestru konfiguracji)
(Detekcja na portach: 0x200, 0x240, 0x280, 0x2C0, 0x300, 0x320, 0x340)
Wymaga 8390.o
hp.o).
Polecenie ładowania:
/sbin/modprobe hp.o
io = 0 (Będzie narzekać, jeśli nie podasz "io=0xNNN")
irq = 0 (IRQ ustawiane programowo przez sterownik przy użyciu autoIRQ)
(Detekcja na portach: 0x300, 0x320, 0x340, 0x280, 0x2C0, 0x200, 0x240)
Wymaga 8390.o
hp100.o).
Polecenie ładowania:
/sbin/modprobe hp100.o
hp100_port = 0 (bazowy adres IO)
(Dokonuje detekcję EISA, jeśli jest w złączu EISA;
Na szynie ISA dokonuje detekcji na wszystkich portach od 0x100 do 0x3E0
krokiem 0x020)
eth16i.o).
Polecenie ładowania:
/sbin/modprobe eth16i.o
io = 0x2a0 (Będzie narzekać, jeśli nie podasz "io=0xNNN")
irq = 0 (IRQ ustawiane programowo przez sterownik przy użyciu autoIRQ)
Testowane porty przy karcie eth16i :
0x260, 0x280, 0x2A0, 0x240, 0x340, 0x320, 0x380, 0x300
Testowane porty przy karcie eth32i :
0x1000, 0x2000, 0x3000, 0x4000, 0x5000, 0x6000, 0x7000, 0x8000,
0x9000, 0xA000, 0xB000, 0xC000, 0xD000, 0xE000, 0xF000
ne.o).
Polecenie ładowania:
/sbin/modprobe ne.o
io = 0 (Jawnie wymaga wartości "io=0xNNN")
irq = 0 (Próbuje określić ustawione IRQ przez autoIRQ)
(Detekcja na portach: 0x300, 0x280, 0x320, 0x340, 0x360)
Wymaga 8390.o
ni52.o).
Polecenie ładowania:
/sbin/modprobe ni52.o
io=0x360
irq=9
memstart=0xd0000
memend=0xd4000
Nie używaj autodetekcji, io=0
ac3200.o).
Polecenie ładowania:
/sbin/modprobe ac3200.o
Ponieważ jest to karta EISA, autodetekcja powinna działać.
Wymaga 8390.o
apricot.o).
Polecenie ładowania:
/sbin/modprobe apricot.o
io = 0x300 (Nie można zmienić!)
irq = 10
de4x5.o).
Polecenie ładowania:
/sbin/modprobe de4x5.o
io = 0x000b
irq = 10
is_not_dec = 0
Przy kartach innych producentów niż DEC, ale używających kość DEC
21040/21041/21140, ustaw ten parametr na 1
(Detekcja EISA i PCI)
tulip.o).
Polecenie ładowania:
/sbin/modprobe tulip.o
Przeczytaj Documentation/networking/tulip.txt
dgrs.o).Jest to sterownik linuxowy do kart Digi International RightSwitch SE-X EISA i PCI. Są to cztero- (EISA) lub sześcioportowe (PCI) przełączniki ethernet zintegrowane na jednej płycie z NIC.
Istnieje program narzędziowy do ustawiania filtrów pakietów wejściowych i wyjściowych na każdym porcie, zwany "dgrsfilt".
Ten program obsługi pozwala śledzić pracę graficznie, jak również ustawiać adresy IP i IPX agenta SNMP, parametry IEEE Spanning Tree i czas ekspiracji. Można je również ustawić z linii polecenia po załadowaniu sterownika.
Jest również towarzyszący program obsługi, zwany "xrightswitch".
Polecenie ładowania:
/sbin/modprobe dgrs.o
debug=NNN Poziom komunikatów śledzenia
dma=0/1 Wyłącz/Włącz DMA na karcie PCI
spantree=0/1 Wyłącz/Włącz IEEE spanning tree
hashexpire=NNN Zmień czas ekspiracji adresu (domyślnie 300 sekund)
ipaddr=A,B,C,D Ustaw adres IP agenta SNMP, np. 199,86,8,221
ipxnet=NNN Ustaw adres IPX agenta SNMP
de600.o).
Polecenie ładowania:
/sbin/modprobe de600.o
de600_debug = 0
(Na porcie 0x378, irq 7 -- lpt1; możliwe do ustawienia przy kompilacji)
de620.o).
Polecenie ładowania:
/sbin/modprobe de620.o
bnc = 0, utp = 0 <-- Wymuszenie nośnika przez ustawienie jednej z opcji
io = 0x378 (również możliwe do ustawienia przy kompilacji)
irq = 7
ibmtr.o).
Polecenie ładowania:
/sbin/modprobe ibmtr.o io=0xa20 irq=0
io = 0xa20 Nie powinieneś używać autodetekcji przy insmod.
irq = 0
arcnet.o).Przeczytaj dobrą dokumentację pod adresem
/usr/src/linux/Documentation/networking/arcnet.txt. W tym samym miejscu
znajduje się również informacja na temat sprzętu ARCnet - arcnet-hardware.txt.
Polecenie ładowania:
/sbin/modprobe arcnet.o io=0x300 irq=2 shmem=0xd0000
Jeśli chcesz, możesz nazwać urządzenie używając konwencji "device=arc1"
(dla drugiej karty) lub "device=eth0" (z dziwnych powodów).
(Podczas detekcji, sprawdza następujące możliwe adresy:
Zalecane:
0x300, 0x2E0, 0x2F0, 0x2D0
Inne:
0x200, 0x210, 0x220, 0x230, 0x240, 0x250, 0x260, 0x270,
0x280, 0x290, 0x2A0, 0x2B0, 0x2C0,
0x310, 0x320, 0x330, 0x340, 0x350, 0x360, 0x370,
0x380, 0x390, 0x3A0, 0x3E0, 0x3F0 )
Konfiguracja i włączenie sieci ISDN jest zadaniem złożonym. Przeczytaj
dokumentacje znajdującą się w katalogu /usr/src/linux/Documentation/isdn.
isdn.o).
Polecenie ładowania:
/sbin/modprobe isdn.o
Brak parametrów modułu.
Wymaga slhc.o
icn.o).
Polecenie ładowania:
/sbin/modprobe icn.o [parameters]
portbase=p membase=m icn_id=identyfikator [icn_id2=identyfikator2]
p = port bazowy (default: 0x320)
m = pamięć dzielona (default: 0xd0000)
Jeśli używasz podwójną kartę ICN, MUSISZ zdefiniować DWA identyfikatory
identyfikator musi zaczynać się od litery.
Wymaga isdn.o
pcbit.o).
Polecenie ładowania:
/sbin/modprobe pcbit.o
mem = 0 domyślnie = 0xd0000
irq = 0 domyślnie = 5
Wymaga isdn.o
teles.o).
Polecenie ładowania:
/sbin/modprobe teles.o io=.....
io=m0,i0,p0,d0[,m1,i1,p1,d1 ... ,mn,in,pn,dn] teles_id=identyfikator
m0 = pamięć dzielona pierwszej karty (domyślnie: 0xd0000
i0 = IRQ pierwszej karty (domyślnie: 15)
p0 = port bazowy pierwszej karty (domyślnie: 0xd80)
d0 = protokół D-kanału pierwszej karty 1=1TR6, 2=EDSS1 (domyślnie: 2)
p1,i1,m1,d1 = Parametry drugiej karty (ustawienia domyślne: brak)
pn,in,mn,d1 = Parametry n-tej karty (obsługiwane jest do 16 kart)
identyfikator = Identyfikator sterownika używany przy dostępie przez
programy narzędziowe i do celów identyfikacyjnych jeśli
używany jest program monitorujący linię. (brak ustawień
domyślnych). identyfikator musi zaczynać się od litery!
Typ karty jest określany w oparciu o numer portu, przerwania i pamięć
dzieloną:
port == 0, pamięć dzielona != 0 -> Teles S0-8
port != 0, pamięć dzielona != 0 -> Teles S0-16.0
port != 0, pamięć dzielona == 0 -> Teles S0-16.3
Wymaga isdn.o
aztcd.o).
Polecenie ładowania:
/sbin/modprobe aztcd.o aztcd=[adresbazowy]
Pełne informacje znajdziesz w /Documentation/cdrom/aztcd/
gscd.o).Wszystkie rodzaje informacji o napędzie CD-ROM GoldStar R420 oraz o linuxowym
sterowniku do niego znaleźć można na stronie:
http://linux.rz.fh-hannover.de/~raupach.
Polecenie ładowania:
/sbin/modprobe gscd.o gscd=[address]
Domyślny adres bazowy to 0x340.
Będzie to działać z większością programów.
Wyboru adresów dokonuje się poprzez jumpery od PN801-1 do PN801-4
na karcie interfejsu GoldStar.
Stosowne ustawienia to: 0x300, 0x310, 0x320, 0x330, 0x340, 0x350,
0x360, 0x370, 0x380, 0x390, 0x3A0, 0x3B0, 0x3C0, 0x3D0, 0x3E0, 0x3F0
sbpcd.o).
Polecenie ładowania:
/sbin/modprobe sbpcd.o sbpcd=[adres], x
adres = adres IO
x = ustawienie SBPRO, przeczytaj Documentation/cdrom/sbpcd
optcd.o).Jest ro sterownik do tak zwanego napędu 'DOLPHIN', z 34-ro pinowym złączem kompatybilnym ze złączem Sony. Dla napędu IDE Optics Storage 8001, przyda ci się sterownik CD-ROM ATAPI. Ten sterownik wydaje się również działać z Lasermate CR328A.
Polecenie ładowania:
/sbin/modprobe optcd.o optcd=0x340
Parametrem jest adres bazowy karty.
cm206.o).Jest to sterownik napędu CD-ROM Philips/LMS cm260 w połączeniu z kartą adaptera cm260.
Polecenie ładowania:
/sbin/modprobe cm206.o cm206=0x300,11
Parametry to port bazowy i IRQ twojej karty.
Kolejność parametrów portu i IRQ nie ma znaczenia.
Możesz podać tylko jeden z nich, pozostały uzyska wkompilowaną wartość
domyślną.
sjcd.o).
Polecenie ładowania:
/sbin/modprobe sjcd.o sjcd_base=0x340
Parametr jest portem bazowym twojej karty.
Adres domyślny = 0x340, bez IRQ, bez DMA.
isp16.o).
Polecenie ładowania:
/sbin/modprobe isp16.o [parameters]
isp16_cdrom_base=<port>
isp16_cdrom_irq=<irq>
isp16_cdrom_dma=<dma>
isp16_cdrom_type=<typ_napędu>
Prawidłowe wartości to:
port=0x340,0x320,0x330,0x360
irq=0,3,5,7,9,10,11
dma=0,3,5,6,7
typ_napędu=noisp16,Sanyo,Panasonic,Sony,Mitsumi.
Pamiętaj, że powyższe parametry są wrażliwe na wielkość liter.
cdu31a.o).
Polecenie ładowania:
/sbin/modprobe cdu31a.o [parametry]
cdu31a_port=<adres I/O> - ustawia bazowy adres I/O.
Musi to być określone.
cdu31a_irq=<interrupt> - Ustawia numer przerwania.
Nie podanie tego parametru spowoduje wyłączenie przerwań.
sonycd535.o).
Polecenie ładowania:
/sbin/modprobe sonycd535.o sonycd535=[adres]
Parametr to adres bazowy twojej karty.
minix.o).
Polecenie ładowania:
/sbin/modprobe minix.o
Brak parametrów ładowania.
ext.o).
Polecenie ładowania:
/sbin/modprobe ext.o
Brak parametrów ładowania.
ext2.o).
Polecenie ładowania:
/sbin/modprobe ext2.o
Brak parametrów ładowania.
xiafs.o).
Polecenie ładowania:
/sbin/modprobe xiafs.o
Brak parametrów ładowania.
fat.o).
Polecenie ładowania:
/sbin/modprobe fat.o
Brak parametrów ładowania.
msdos.o).
Polecenie ładowania:
/sbin/modprobe msdos.o
Brak parametrów ładowania.
Wymaga fat.o.
vfat.o).
Polecenie ładowania:
/sbin/modprobe vfat.o
Brak parametrów ładowania.
Wymaga fat.o.
umsdos.o).
Polecenie ładowania: /sbin/modprobe vfat.o
Brak parametrów ładowania.
Wymaga fat.o i msdos.o.
nfs.o).
Polecenie ładowania:
/sbin/modprobe nfs.o
Brak parametrów ładowania.
smbfs.o).smbfs jest systemem plików, pracującym w oparciu o protokół SMB. Jest to
protokół używany przez systemy Windows for Workgroups, Windows NT i Lan Manager do
wzajemnego komunikowania się ze sobą. smbfs zrodził się dzięki programowi
samba, napisanemu przez Andrew Tridgella. Program ten zmienia jakikolwiek
komputer pracujący w systemie Unix w serwer plików dla stacji DOS lub Windows.
Więcej na temat tego interesującego pakietu programów, a także informacje o
używaniu SMB i NetBIOS za pośrednictwem TCP/IP przeczytać możesz tutaj:
ftp://nimbus.anu.edu.au/pub/tridge/samba/. Znajdziesz tam również
wyjaśnienie pojęć takich jak nazwa lub wolumen netbios.
Aby używać smbfs, potrzebujesz specjalny program montujący, który znajduje się w
pakiecie ksmbfs, umieszczonym pod adresem
sunsite.unc.edu:/pub/Linux/system/Filesystems/smbfs.
Polecenie ładowania:
/sbin/modprobe smbfs.o
Brak parametrów ładowania.
ncpfs.o).ncpfsjest systemem plików, pracującym w oparciu o protokół NCP,
zaprojektowany przez Novell Corporation dla produktu NetWare(tm). NCP jest
funckjonalnie zbliżony do NFS, wykorzystywanego w społeczności TCP/IP. Aby
zamontować system plików Netware, potrzebny jest specjalny program montujący,
który znajduje się w pakiecie ncpfs. Stroną domową ncpfs jest
ftp.gwdg.de/pub/linux/misc/ncpfs, ale na sunsite i w innych archiwach
lustrzanych również można go znaleźć.
Pokrewne pakiety to linware i mars_nwe, które uzupełniają Linuxa o część
funkcjonalności serwerw NetWare.
Strona domowa Linware to: klokan.sh.cvut.cz/pub/linux/linware,
Mars_nwe można znaleźć tu: ftp.gwdg.de/pub/linux/misc/ncpfs.
Polecenie ładowania:
/sbin/modprobe ncpfs.o
Brak parametrów ładowania.
Wymaga ipx.o
isofs.o).
Polecenie ładowania:
/sbin/modprobe isofs.o
Brak parametrów ładowania.
hpfs.o)
Polecenie ładowania:
/sbin/modprobe hpfs.o
Brak parametrów ładowania.
sysv.o).Jest to linuxowa implementacja systemu plików Systemu V/Coherent.
Obsługuje wszsystkie z poniższych systemów plików:
Polecenie ładowania:
/sbin/modprobe sysv.o
Brak parametrów ładowania.
affs.o).
Polecenie ładowania:
/sbin/modprobe affs.o
Brak parametrów ładowania.
ufs.o).Ewidentnie do montowania dysków z partycjami FreeBSD i/lub Sun. Nie licząc Kodu Źródłowego, nie istnieje żadna dokumentacja.
Polecenie ładowania:
/sbin/modprobe ufs.o
Brak parametrów ładowania.
misc.o).Moduł ten jest używany przez moduły atixlmouse, busmouse, msbusmouse,
psaux, wdt i softdog i jest generowany automatycznie w razie potrzeby.
Polecenie ładowania:
/sbin/modprobe misc.o
Brak parametrów ładowania.
serial.o).UWAGA: serial.o jest wymagany przez inne moduły, jak ppp.o i slip.o. Również
wymagany jest przez mysz szeregową i, co za tym idzie, przez gpm.
Jednakże ta zależność nie jest wykrywana przez obecnie dostępne programy
narzędziowe i moduł serial.o musi być ładowany ręcznie.
Polecenie ładowania:
/sbin/modprobe serial.o
Brak parametrów ładowania.
cyclades.o)
Polecenie ładowania:
/sbin/modprobe cyclades.o
Brak parametrów ładowania.
Te inteligentne karty również wymagają załadowania do nich "firmowego" kodu. Robi się to z poziomu użytkownika poprzez program "stlload" dołączony do pakietu sterowników. Skompiluj ten program wpisując "make" tam, gdzie umieściłeś pliki z pakietu. W najprostszym przypadku możesz wówczas w tym katalogu wydać polecenie:
./stlload -i cdk.sys
Załaduje ono kartę 0 (zakładając, że karta 0 jest kartą EasyConnection 8/64). Aby załadować do karty ONboard, Brumby lub Stallion, wpisz:
./stlload -i 2681.sys
Przeczytaj plik /usr/src/linux/drivers/char/README.stallion.
stallion.o).
Polecenie ładowania:
/sbin/modprobe stallion.o
Brak parametrów ładowania.
istallion.o).
Polecenie ładowania:
/sbin/modprobe istallion.o
Brak parametrów ładowania.
riscom8.o).
Polecenie ładowania:
/sbin/modprobe riscom8.o [options]
Ten sterownik może obsłużyć do 4 kart naraz.
Opcje : iobase=0xXXX iobase1=0xXXX iobase2=...
lp.o).
Polecenie ładowania:
/sbin/modprobe lp.o io=0x378 irq=0
io = 0
irq = 0 przy irq=0 będzie działać w trybie zapytywania
(Detekcja na portach: 0x278, 0x378, 0x3bc)
Note: załadowanie lp.o bez żadnych parametrów spowoduje inicjalizacje
wszystkich portów równoległych.
atixlmouse.o).
Polecenie ładowania:
/sbin/modprobe atixlmouse.o
Brak parametrów ładowania.
Wymaga misc.o
busmouse.o).
Polecenie ładowania:
/sbin/modprobe busmouse.o
Brak parametrów ładowania.
Wymaga misc.o
msbusmouse.o).
Polecenie ładowania:
/sbin/modprobe msbusmouse.o
Brak parametrów ładowania.
Wymaga misc.o
psaux.o).
Polecenie ładowania:
/sbin/modprobe psaux.o
Brak parametrów ładowania.
Wymaga misc.o
Informację na temat napędów taśmowych SCSI znajdziesz w rozdziale Obsługa SCSI. Obsługa napędów taśmowych QIC-02 nie ma postaci modułu.
ftape.o).
Polecenie ładowania:
/sbin/modprobe ftape.o tracing=3
Parametr 'tracing' może przyjmować następujące wartości
ustaw: aby otrzymać:
0 dziury w programie
1 + błędy
2 + ostrzeżenia
3 + informacje ** Domyślnie **
4 + więcej informacji
5 + przebieg programu
6 + informacje o fdc/dma
7 + przepływ danych
8 + wszystko inne
wdt.o).
Polecenie ładowania:
/sbin/modprobe wdt.o
Brak parametrów ładowania.
Domyślnie io=0x240 irq=14,
wszelkie pożądane zmiany dokonaj bezpośrednio w pliku wdt.c.
Wymaga misc.o
softdog.o).
Polecenie ładowania:
/sbin/modprobe softdog.o
Brak parametrów ładowania.
Wymaga misc.o
pcwd.o).
Polecenie ładowania:
/sbin/modprobe pcwd.o
Brak parametrów ładowania.
Wymaga misc.o
sound.o).Konfigurowanie dźwięku to złożone zadanie, na ten temat napisano kilka plików
Readme - w katalogu /usr/src/linux/drivers/sound, po prostu je przeczytaj.
Polecenie ładowania:
/sbin/modprobe sound.o [option]
Opcja: dma_buffsize=32768
W sprawie przedawnionych informacji oraz ewentualnych błędów merytorycznych należy zgłaszać się do autora.
Dzięki,
Lauri Tischler, ltischler@efore.fi
Prawa autorskie wersji polskiej tego dokumentu (c) 1997 są własnością Pawła Olszewskiego (alder@amg.net.pl). Dystrybucja wersji polskiej objęta jest klauzulą analogiczną do zawartej w oryginale.
Jeśli znalazłeś w niniejszym dokumencie jakieś paskudne literówki, błędy ortograficzne, lub inne tego typu numery, ślij informację w pierwszej kolejności do tłumacza, w tej sytuacji autor oryginału jest najprawdopodobniej niewinny.
W kwestii merytorycznej, dokument ten nie różni się specjalnie od oryginału (nie dokonałem żadnych zmian ani poprawek).
Najnowsza wersja tego dokumentu znajduje się wraz z innymi przetłumaczonymi na polski dokumentami serii Linux-HOWTO w archiwum JTZ (Jak To Zrobić): http://www.jtz.org.pl/Html/Module-HOWTO.pl.html. Najświeższa wersja angielska znajduje się tutaj: http://sunsite.unc.edu/mdw/HOWTO/Module-HOWTO.html.
Dzięki,
Pawko Olszewski, alder@amg.net.pl
doc-linux-pl-2002.06.14.orig/html/NET-3-HOWTO.pl.html 0100644 0001750 0001750 00000567625 07406502160 020344 0 ustar coven coven
Dodatki:
mnóstwo.
Poprawki/uaktualnienia:
wszystko.
Oryginalny dokument NET-FAQ, napisy przez Matta Welsha w celu zebrania odpowiedzi na najczęściej zadawane pytania na temat pracy Linuksa w sieci, powstał zanim ktokolwiek myślał o Projekcie Dokumentacji Linuksa (LDP). Dokument dotyczył bardzo wczesnych wersji rozwojowych modułów sieciowych jądra. Został zastąpiony przez NET-2-HOWTO, jeden z oryginalnych doumentów projektu LDP. Opisywał oprogramowanie sieciowe znane pod nazwą "wersja 2." i "wersja 3.". W tym dokumencie opisujemy jedynie moduły sieciowe jądra w "wersji 3".
Poprzednie wersje tego dokumentu osiągnęły ogromne rozmiary, ze względu na wielką ilosć materiału, którego dotyczyły. Była to jedna z przyczyn powstania kilku innych dokumentów HOWTO opisujących specyficzne problemy związane z siecią. Wszędzie gdzie będzie to możliwe, będziemy odwoływać się do tych dokumentów i opisywać problemy, które jeszcze nie posiadają własnych dokumentów.
Zawsze doceniam wszelkie uwagi, szczególnie wartościowe wnioski. Proszę kierujcie je bezpośrednio do mnie email.
Format tego dokumentu różni się od poprzednich wersji. Przegrupowałem podrozdziały, tak aby materiał opisowy zgromadzony na początku dokumentu mogł zostać przez czytalnika pominięty. Po nim występuje ogólny opis zagadnień sieciowych, informacje, które trzeba zrozumieć zanim przejdzie się do ostatniej części dokumentu - technicznej dokuemntacji stosowanej technologii.
Informacje tutaj podane odnoszą nię niemal do wszystkich poźniejszych części dokumentu i są niezbędne do ich zrozumienia.
Powinieneś wiedzieć jak jest (lub będzie) zbudowana twoja sieć, dokładnie jaki sprzęt i technologie są (będą) wykorzystywane.
Gdy już wiesz co cię konkretnie interesuje, zapoznaj się z wybranymi rozdziałami. Znajdziesz tam szczegóły dotyczące opisywanej technologii.
Powinieneś spróbować skonfigurować sieć uważnie notując wszystkie napotkane problemy.
Jeśli napotkasz problemy, w rozwiązaniu których niniejszy dokument nie będzie pomocny, wtedy zapoznaj się z rozdziałem poświęconym znajdowaniu dalszej pomocy i zgłaszaniu znalezionych błędów.
Sieć to dobra zabawa, ciesz się nią.
Opracowanie zupełnie nowej implementacji protokołu tcp/ip, pracująego równie dobrze jak inne istniejące implementacje nie było łatwym zadaniem. Decyzja aby napisać wszystko od zera została podjęta w czasie gdy istniała niepewność, że istniejące implementacje mogą zostać zaprzepaszczone przez restrykcyjne licencje, z powodu toczącej się sprawy sądowej rozpoczętej przez U.S.L. i w momencie gdy sieć była przepełniona świeżym entuzjazmem aby zrobić to inaczej, a być może nawet lepiej niż zostało do tej pory zrobione.
Pierwszym ochotnikiem przewodzenia w pracach nad rozwojem modułów
jądra do obsługi sieci był Ross Biro
<biro@yggdrasil.com>. Wykonał prostą i niepełną, lecz w
większości przypadków działającą implementacje podstawowych procedur,
uzupełnionych przez procedury sterownika karty sieciowej ethernet
WD-8003. To wystarczyło, aby przyciągnąć rzeszę ludzi, umożliwić im
testowanie i eksperymentowanie. Niektórm udało się nawet doprowadzić
do włączenia swoich komputerów do Internetu.
Nacisk społeczności Linuksowej na rozwój obsługi sieci przez jądro wciąż wzrastał. Gdy korzyści i stysfakcja z wykonywanej pracy przestały rekompensować w wystarczającym stopni poświecenia i odpieranie rosnących nacisków, Ross zrezygnował z roli prowadzącego budowę oprogramowania sieciowego. Jego wysiłki poświęcone na stworzenie w tak burzliwych czasach czegoś użytecznego stały się katalizatorem przyszłych prac i należy je zaliczyć do najważniejszych czynników, które przyczyniły się do osiągnięcia sukcesu.
Orest Zborowski <obz@Kodak.COM> dołączył do jądra oryginalny interfejs
programistyczny gniazd BSD. Był to ogromny krok naprzód, ponieważ
umożliwiał proste przenoszenie na Linuksa wielu istniejących
programów sieciowych, bez konieczności ich nadmiernej modyfikacji.
Mniej więcej w tym samym czasie Laurence Culhane
<loz@holmes.demon.co.uk> opracował pierwszy sterownik protokołu
SLIP. Wiele osób, które nie posiadały dostępu do sieci Ethernetowych
otrzymało możliwość eksperymentowania z nowym oprogramowaniem
sieciowym. Ponownie część osób wykorzystała te oprogramowanie do
przyłączania się do Internetu. W ten sposób uzmysłowili reszcie
jakie możliwości otworzyłyby się przed Linuksem, gdyby tylko posiadał
pełną obsługę sieci. Zwiększyło również liczbę osób aktywnie
wykorzystujących i eksperymentujących z istnejącym oprogramowaniem.
Jednym z ludzi, który równie aktywnie pracował nad zbudowaniem modułów
obsługi sieci w jądrze Linuksa był Fred van Kempen
<waltje@uwalt.nl.mugnet.org>. Po krótkim okresie niepewności
wywołanym rezygnacją Rossa Biro z prowadzenia projektu, Fred
zaoferował swój czas i umiejętności, i przyjął tę rolę w zasadzie bez
żadnych sprzeciwów. Fred miał ambitne plany na temat kierunków rozwoju
oprogramowania obsługi sieci w jądrze Linuksa i aktywnie je
realizował. Stworzył oprogramowanie znane pod nazwą NET-2
(oprogramowanie Rossa nosiło nazwę NET), z którego wielu ludzi
korzystało przez długi czas. Fred wprowadził wiele inowacji do
programu rozwoju oprogramowania, dynamiczny interfejs urządzeń, obsługę
protokołu AX.25 (Amateur Radio) i bardziej modułowe implementacje
obsługi funkcji sieciowych. Oprogramowanie NET-2 było wykorzystywane
przez stale rosnącą grupę ludzi, w miarę jak świat dowiadywał się, że
coś takiego istnieje. Oprogramowanie sieciowe nadal było
rozpowszechniane w postaci łatek do standardowej dystrybucji jądra i
przez długi czas nie było rozpowszechniane razem z jądrem Linuksa.
NET-FAQ i późniejszy NET-2-HOWTO opisywały całkiem skomplikowana
procedurę uruchomienia sieci pod Linuksem. Fred skoncentrował się na
wprowadzaniu nowości do standardowej implementacji sieci, a to
zabierało czas. Społeczność użytkowników zaczynała się niecierpliwić
oczekując na coś co działałoby bezbłędnie i zadawalałoby 80% z nich.
I podobnie jak w przypadku Rossa, naciski na Freda, jako
koordynatora projektu cały czas wzrastały.
Alan Cox <iialan@www.linux.uk.org> zaproponował rozwiązanie
zaistniałej sytuacji. Zaproponował, że weźmie kod napisany przez Freda
i przetestuje go. W ten sposób zapewni jego stabilność
satysfakcjonując grono niecerpliwych użytkowników, uwalniając tym
samym Freda od licznych nacisków i umożliwiając mu dalszą pracę nad
rozwojem oprogramowania. Tak też zrobił, co zakończyło się pełnym
sukcesem. Pierwsza wersja oprogramowania stworzona przez Alana nosiła
nazwę NET-2D (Debugged - odpluskwiony). Oprogramowanie pracowało
stabilnie w większości standardowych konfiguracji i większość
użytkowników była wreszcie szczęśliwa. Alan bez wątpienia posiadał
umiejętności i pomysły, które chciał zrealizować ku pożytkowi całej
społeczności Linuksa. Następstwem było wiele dyskusji na temat
kierunków rozwoju oprogramowania sieciowego NET-2 Linuksa. Rozwinęły
się dwie różne szkoły, jedna, której ideą było "wpierw niech to
działa, później niech będzie to lepsze" i druga z ideą "niech wpierw
to będzie lepsze". Ostatecznie wmieszał się w to Linus, oferując swoje
wsparcie Alanowi w jego wysiłkach włączając jego kod do standardowej
dystrybucji jadra Linuksa. To postawiło Freda w bardzo trudnej
pozycji. Został pozbawiony ogromnej rzeszy użytkowników aktywnie
testujących i eksperymentujących z jego oprogramowaniem sieciowym, co
oznaczało, że jego dalszy rozwój byłby trudny i powolny. Fred
kontynuował przez krótki czas swoje prace, ostatecznie rezygnując i
pozstawiając Alana jako nowego lidera w wysiłkach nad udoskonaleniem
oprogramowania sieciowego Linuksa.
Wktrótce swoje talenty w tematyce ujawnił Donald Becker
<becker@cesdis.gsfc.nasa.gov> i stworzył ogroną liczbę
sterowików kart sieciowych ethernet, niemal wszystkich dostępnych w
obecnych wersjach jądra. Byli również inni, których wkład w tej
dziedzinie był znaczący, lecz praca Donalda była tak płodna, że wymaga
osobnej uwagi.
Alan kontynuował pracę nad szlifowaniem oprogramowania NET-2-D,
równocześnie starając się zająć problemami określonymi jako 'do
zrobienia' (TODO). Gdy jądro Linuksa rozwinęło się na tyle by osiągnąć
wersję 1.3.*, jego część dotycząca obsługi sieci składała się
niemal z wersji NET-3, na której bazyją aktualne wersje. Alan pracował
nad wieloma aspektami i funkcjami sieciowymi otrzymując wsparcie od
wielu utalentowanych ludzi należących do internetowej społeczności
Linuksa. Dzięki temu oprogramowanie rozrastało się jednocześnie w wielu
kierunkach. Alan opracował dynamiczne sterowniki urządzeń i pierwsze
implementacje standardów AX.25 i IPX. Kontynuował pracę, powoli
restrukturyzując i wprowadzając ulepszenia, aż uzyskał obecną postać.
Obsługa PPP została zaimplementowana przez Michaela Callahana
<callahan@maths.ox.ac.uk> i Ala Longyeara
<longyear@netcom.com>. Miało to ogromne znaczenie i ogromnie
zwiększyło libczę osób aktywnie wykorzystujących Linuksa w
zastosowaniach sieciowych.
Jonathon Naylor <jsn@cs.nott.ac.uk> znacznie usprawnił
początkowy kod Alana obsługi protokołu AX.25. Wprowdził obsługę
protokołu NetRom. Obsługa AX.25/NetRom jest ogromnie ważna, ponieważ
żaden inny system operacyjny nie posiada w standardowej dystrybucji
obsługi tych protokołów.
Były również ogromne rzesze innych ludzi, którzy w zanaczący sposób przyczynili się do rozwoju oprogramowania sieciowego Linuksa. Wiele z tych nazwisk znajdziesz później w częściach omawiających poszczególne technologie. Inni przyczynili się do rozwoju bądź opracowując różne moduły oprogramowania, bądź przysyłająć poprawki usuwające różne błędy, bądź oferując sugestie, raporty z testów lub choćby wsparcie moralne dla aktywnych twórców. Każdy z nich może twierdzić, że brał w tym udział i oferował tyle ile mógł. Kod jądra Linuksa przeznaczony do obsługi sieci jest świetnym przykładem rezultatów jakie można osiągnąć pracując w tak anarchiczny sposób, jaki to miało miejsce w tym przypadku. Jeśli się to jeszcze nie zadziwiło, to pamiętaj o jednym: prace rozwojowe nadal trwają.
Istnieje kilka miejsc, gdzie można znaleźć dobre informacje na temat sieciowych zastosowań Linuksa.
Alan Cox, aktualny opiekun i lider oprogramowania sieciowego Linuksa, prowadzi stronę internetową zawierającą najciekawsze i najważniejsze informacje na temat aktualnego rozwoju sieci w Linuksie: www.uk.linux.org.
Innym znakomitym miejscem jest książka napisana przez Olafa Kircha pod
tytułem Poradnik dla administratorów sieci. Powstała w ramach
Projektu dokumentacji Linuksa
i jest dostępna tutaj:
Poradnik dla administratorów sieci - wersja HTML
lub w innych formatach tutaj
archiwum ftp sunsite.unc.edu LDP. Książka Olafa jest
całkiem wyczerpująca i dostarcza dobrego, stojącego na wysokim
poziomie przeglądowego spojrzenia na konfigurację sieci pod Linuksem.
Istnieje specjalna grupa dyskusyjna (angielskojęzyczna), poświęcona sieci i podobnym problemom: comp.os.linux.networking
Istnieje angielskojęzyczna lista dyskusyjna, na którą możesz się zapisać i gdzie możesz zadawać pytania odnoszące się do funkcji sieciowych Linuksa. Aby się zapisać musisz wysłać następujący list:
To: majordomo@vger.rutgers.edu
Subject: anything at all
Message:
subscribe linux-net
W większości serwerów IRC istnieją zwykle kanały #linux, na
których obecni tam ludzie będą potrafili odpowiedzieć na pytania
dotyczące sieci pod Linuksem.
Pamiętaj, że zgłaszając jakikolwiek problem należy podawać jak najwięcej dotyczących go szczegółów. Koniecznie należy podać wersje używanego oprogramowania, sczególnie wersję jądra (uname -a), wersję takich narzędzi jak pppd lub dip i dokładną naturę problemu na który napotkałeś. To znaczy dokładnie zanotowane komunikaty systemowe jakie otrzymałeś i dokładny opis składni wydawanych poleceń.
Jeśli szukasz podstawowych informacji o tcp/ip, polecam zapoznanie się z następującymi dokumentami:
dostępne w wersji tekstowej i postscriptowej.
dostępne w wersji tekstowej i postscriptowej.
Jeśli poszukujesz dokładniejszych informacji na temat sieci tcp/ip mocno polecam:
"Internetworking with TCP/IP"
by Douglas E. Comer
ISBN 0-13-474321-0
Prentice Hall publications.
Jeśli chcesz się nauczyć w jaki sposób budować programy sieciowe w środowiskach zgodnych z systemem UNIX, mocno polecam:
"Unix Network Programming"
by W. Richard Stevens
ISBN 0-13-949876-1
Prentice Hall publications.
Możesz również skorzystać z grupy dyskusyjnej comp.protocols.tcp-ip.
Istotnym źródłem konkretnych informacji technicznych związanych z Internetem i protokołem tcp/ip są dokumenty RFC. RFC to skrót od "Request For Comments", jest to standardowy sposób ogłaszania i dokumentowania obowiązujących standardów internetowych. Istnieje wiele miejsc skąd można poprać dokumenty RFC. Większość z nich to archiwa ftp, część udostępnia dokumenty RFC również przez interfejs WWW dostarczając jednocześnie możliwość przeszukiwania wszystkich dokumentów w poszukiwaniu słów kluczowych.
Jednym z archimum dokumntów RFC jest: baza danych Nexor RFC.
Aby poprawnie skonfigurować sieć, musisz zapoznać się i zrozumieć informacje prezentowane w kolejnych podrozdziałach. Są to podstawowe zasady funkcjonowania sieci, niezależnie od jej wewnętrznej natury.
Zanim zaczniesz budować lub konfigurować swoją sieć będziesz potrzebował kilku rzeczy. Najważniejsze z nich to:
Ponieważ jądro którego używasz może nie posiadać obsługi sieci, lub kart sieciowych, które posiadasz, będziesz prawdopodobnie potrzebował źródła jądra, abyś mogł skompilować nowe jądro z odpowiednimi opcjami.
Najnowszą wersją jądra mozna uzyskać z: ftp.funet.fi.
Zwykle pliki źródłowe powinny być rozpakowane do katalogu
/usr/src/linux. Jeśli potrzebujesz informacji jak dodać do
jądra dodatkowe łaty lub jak skompilować jądro powinieneś przeczytać
Kernel-HOWTO.
Jeśli wyraźnie nie zostało to zaznaczone, zalecam pozostanie przy standardowych wersjach jądra (te z parzystymi numerami wersji po pierwszej kropce). Wersje testowo-rozwojowe (z nieparzystą drugą liczbą) mogą mieć zmienioną strukturę wewnętrzną lub wprowadzone inne zmiany uniemożliwiające poprawną współpracę z innym oprogramowaniem zainstalowanym na twoim systemie. Jeśli nie jesteś pewien, że poradzisz sobie z tego rodzaju problemami, w połączeniu z możliwosćią wystąpienia błędu w innym oprogramowaniu, nie używaj wersji rozwojowych.
Narzędzia sieciowe to programy służące do konfigurowania urządzeń sieciowych Linuksa. Np. pozwalają na przydzielenie urządzeniu numeru adresu IP lub na skonfigurowanie routingu (marszruty).
Nowe dystrybucje Linuksa zawierają wszelkie niezbędne narzędzia sieciowe. Jeśli ich jescze nie zainstalowałeś, powinieneś to teraz zrobić.
Jeśli nie instalowałeś Linuksa z dystrybucji, będziesz musiał pobrać źródła i skompilować narzędzia samodzielnie. To nie jest trudne.
Narzędziami sieciowymi opiekuje się Bernd Eckenfels i są dostępne pod adresem: ftp.inka.de lub kopia ftp.linux.uk.org.
Pamiętaj aby wybrac wersję najbardziej odpowiednią dla wersji jądra, które posiadasz, postępuj zgodnie z uwagami zawartymi w instalowanym pakiecie.
Aby skonfigurować wersję aktualną w momencie pisania tego dokumentu musisz wykonać następujące polecenia:
# # cd /usr/src # tar xvfz net-tools-1.32-alpha.tar.gz # cd net-tools-1.32-alpha # make config # make # make install #
Dodatkowo jeśli zamierzasz skonfigurować firewall lub korzystać z funkcji IP Masquerade, potrzebujesz programu ipfwadm. Najnowszą wersję można zdobyć tutaj: ftp.xos.nl. Pamiętaj, że dostępnych jest kilka wersji. Musisz wybrać tę, która najlepiej współpracuje z jądrem, które posiadasz.
Aby skonfigurować wersję aktualną w momencie pisania tego dokumentu musisz wykonać następujące polecenia:
# # cd /usr/src # tar xvfz ipfwadm-2.3.0.tar.gz # cd ipfwadm-2.3.0 # make # make install #
Sieciowe programy użytkowe (aplikacje sieciowe) to takie, jak
np. telnet,ftp i ich odpowiedniki po stronie
serwera. Dystrybucją większości z nich zajmuje się David Holland
<dholland@hcs.harvard.edu> . Można je zdobyć z
ftp.uk.linux.org.
Aby skonfigurować wersję aktualną w momencie pisania tego dokumentu musisz wykonać następujące polecenia:
# # cd /usr/src # tar xvfz /pub/net/NetKit-B-0.08.tar.gz # cd NetKit-B-0.08 # more README # vi MCONFIG # make # make install #
Adresy protokołu IP (Internet Protocol) składają się z czterech bajtów. Zwykle zapisuje się w notacji zwanej 'dziesiętną z kropkami' (decimal dotted notation). Każdy bajt jest zamieniany na liczbę dziesiętną (0-255), opuszczając wszelkie zera na początku (chyba, że liczba jest równa zero) i zapisywany kolejno, rozdzielony jeden od drugiego kropką `.'. Konwencja wymaga, aby każdy interfejs sieciowy komputer czy routera posiadał własny numer IP. Można ten sam numer przydzielać do różnych urządzeń sieciowych jednego komputera, lecz zwykle każdy interfejs posiada własny numer IP.
Numery IP sieci to nieprzerwane sekwencje adresów IP. Wszystkie adresy należące do jednej sieci mają wspólną liczbę cyfr w pełnym adresie IP. Część adresu wspólna dla wszystkich adresów IP należących do sieci nazywa się numerem sieci (adresu IP).Pozostałe cyfry określają adres komputera . Liczba bitów które są wszpólne dla wszystkich adresów w ramach jednej sieci nazywamy maską sieci (netmaską). Rolą netmaski jest określenie które adresy przynależą do sieci, której ona dotyczy, a które nie. Rozważmy następujący przykład:
----------------- --------------- Host Address 192.168.110.23 Adres komputera Network Mask 255.255.255.0 Netmaska Network Portion 192.168.110. Cześć sieciowa adresu Host portion .23 Cześć komputerowa adresu ----------------- --------------- Network Address 192.168.110.0 Adres sieci Broadcast Address 192.168.110.255 Adres ogłoszeniowy (informacja wysłana pod ten adres dotrze do wszystkich komputerów danej sieci) ----------------- ---------------
Jeśli dowolny adres IP poddamy operacji bitowej koniunkcji z jego netmaską, otrzymamy w ten sposób adres sieci, do której on należy. Adres sieci jest zatem najmniejszym adresem w puli adresów danej sieci z zawsze wypełnioną zerami częscią komputerową adresu.
Adres ogłoszeniowy (broadcast) to specjalny adres IP. Wszystkie
komputery w danej sieci prócz nasłuchiwania pakietów adresowanych pod
ich numer IP, nasłuchują również pakietów kierowanych na ten adres.
Jeśli chemy wysłać pakiet, który ma dotrzeć do wszystkich komputerów w
danej sieci, korzystamy właśnie z adresu ogłoszeniowego. Różnego
rodzaje informacje dotyczące np. trasowania (routingu) lub zawierające
różne ostrzerzenia nadawane są właśnie na ten adres, tak aby
wszystkie komputery otrzymały go jednocześnie. Istnieją dwa standardy
jak powinien wyglądać adres ogłoszeniowy. W powyższym przykładzie był to
192.168.110.255. Z nieznanych przyczyn w niektórych miejscach
jako adresu ogłoszeniowego używa się adresu sieci. W praktyce
zasadniczo nie ma znaczenia, której konwencji uzywamy, pod warunkiem,
że wszystkie komputery mają skonfigurowany adres ogłoszeniowy w ten
sam sposób.
Z przyczyn administracyjnych w początkowym okresie rozwoju protokołu IP, pewne grupy adresów IP zostału połączone w sieci, które z kolei zostały połączone w klasy. Te klasy dostarczają określoną liczbę różnej wielkości sieci, które mogą być przydzielane użytkownikom. Wygląda to mniej więcej tak:
---------------------------------------------------------- | Klasa | Netmaska | Adresy sieciowe | | sieci | | | ---------------------------------------------------------- | A | 255.0.0.0 | 0.0.0.0 - 127.255.255.255 | | B | 255.255.0.0 | 128.0.0.0 - 191.255.255.255 | | C | 255.255.255.0 | 192.0.0.0 - 223.255.255.255 | |Multicast| 240.0.0.0 | 224.0.0.0 - 239.255.255.255 | ----------------------------------------------------------
Z których adresów powinieneś korzystać zależy bezpośrednio od tego co robisz. Aby uzyskać wszystkie adresy których potrzebujesz możesz być zmuszony do wykonania kombinacji następujących działań:
Jeśli chesz zainstalować Linuksa w istniejącej sieci IP powinieneś skontaktować się z administratorem sieci i poprosić go o następujące informacje:
Jeśli budujesz prywatną sieć i nie masz zamiaru podłączać ją do Internetu to możesz wybrać zupełnie dowolne numery IP. Jednak dla bezpieczeństwa i porządku powinieneś skorzystać z grupy adresów IP pozostawionych dokładnie w tym celu. Są one określone w dokumencie RFC1597:
----------------------------------------------------------- | Zarezerwowane prywatne adresy IP | ----------------------------------------------------------- | Klasa | Netmaska | Adres komputera | | sieci | | | ----------------------------------------------------------- | A | 255.0.0.0 | 10.0.0.0 - 10.255.255.255 | | B | 255.255.0.0 | 172.16.0.0 - 172.31.255.255 | | C | 255.255.255.0 | 192.168.0.0 - 192.168.255.255 | -----------------------------------------------------------
Powinieneś się wpierw zdecydować jak wielka będzie twoja sieć, a następnie wybrać tyle adresów IP ile potrzebujesz.
Istnieje kilka sposobów realizacji procedury uruchamiania systemu
Linux. Po załadowaniu jądra uruchamiany jest program o nazwie
`init'. Program init odczytuje swój plik konfiguracyjny
/etc/inittab i kontynuuje proces uruchamiania
systemu. Istnieje kilka odmian programu init i to jest właśnie
przyczyna różnic w konfiguracji między różnymi dystrybucjami czy komputerami.
Zwykle plik /etc/inittab zawiera pozycję wyglądającą mniej
więcej tak:
si::sysinit:/etc/init.d/boot
Ten wiersz określa nazwę skryptu który ostatecznie jest odpowiedzialny
za procedurę startową. Jest to mniej więcej odpowiednik pliku
AUTOEXEC.BAT w DOSie.
Skrypt startowy uruchamia zwykle różne inne skrypty i sieć jest konfigurowana zwykle jednym z takich skryptów.
Poniższa tabela może posłużyć jako przewodnik po twoim systemie:
-------------------------------------------------------------------------------
Dystryb. |Konfiguracja interfeju(karty)/routingu | Inicjalizacja
-------------------------------------------------------------------------------
Debian |/etc/init.d/network |/etc/init.d/netbase
| |/etc/init.d/netstd_init
| |/etc/init.d/netstd_nfs
| |/etc/init.d/netstd_misc
-------------------------------------------------------------------------------
Slackware|/etc/rc.d/rc.inet1 |/etc/rc.d/rc.inet2
-------------------------------------------------------------------------------
RedHat |/etc/sysconfig/network-scripts/ifup-<ifname>|/etc/rc.d/init.d/network
-------------------------------------------------------------------------------
Większość nowocześnych dystrybucji zawiera program, który umożliwi konfigurację wielu podstawowych interfejsów sieciowych. Jeśli masz taki program powinieneś sprawdzić czy jest on dla ciebie wystarczający, zanim zdecydujesz się na ręczną modyfikacje.
-----------------------------------------
Dystryb. | Program konfiguracji sieci
-----------------------------------------
RedHat | /sbin/netcfg
Slackware | /sbin/netconfig
-----------------------------------------
W większości systemów Unix urządzenia sieciowe znajdują się w katalogu dev. W Linuksie tak nie jest. Linux tworzy urządzenia sieciowe dynamicznie, dlatego nie wymaga istnienia plików urządzeń sieciowych.
W większości przypadków urządzenia sieciowe są tworzone automatycznie
przez sterowniki tych urządzeń w czasie ich inicjacji i rozpoznawania
sprzętu. Na przykład sterowniki sieciowych kart ethernetowych tworzą
interfejsy o nazwach eth[0..] sekwencyjnie w miarę rozpoznawania
kolejnych urządzeń. Pierwsz znaleziona karta ethernetowa staje się
urządzeniem eth0, druga eth1 itd.
Jednak w niektórych przypadkach, zwykle kiedy korzystamy z protokołów
SLIP lub PPP, urządzenia sieciowe są tworzone na żądanie
programów wykonywanych przez użytkownika. Odbywa się podobny
sekwencyjny przydział nazw urządzeń, lecz nie dzieje się to w sposób
automatyczny w czasie ładowania systemu. Dzieje się tak dlatego, że
w przeciwieństwie do kart ethetnetowych liczba aktywnych interfejsów
slip lub ppp w całym okresie pracy komputera może się
zmieniać. Powiemy o tym dokładniej w dalszej części.
Jeśli posiadasz już wszelkie niezbędne oprogramowanie i informacje o potrzebnych adresach sieciowych możesz rozpocząć konfigurację interfejsu. Kiedy mówimy o konfiguracji interfejsu sieciowego mamy na myśli proces przydzielenia mu odpowiedniego adreu IP i nadania odpowiednich wartości innym jego parametrom. W tym celu najczęściej posługujemy się programem ifconfig (interface configure).
Zwykle używa się go sposób podobny do podanego poniżej:
# ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up
W tym przypadku konfiguruję kartę ethernetową `eth0' nadając jej
adres IP `192.168.0.1' i netmaskę `255.255.255.0'. Parametr
`up' na końcu wiersza oznacza, że intefejs powinien zostać
aktywowany (rozpocząć pracę).
Jądro konfigurując interfejsy sieciowe przyjmuje pewne domyślne
wartośći parametrów. Na przykład mógłbyś podać adres IP i adres
ogłoszeniowy (broadcast) danego interfejsu, lecz jeśli tego nie
zrobisz jądro znajdzie sensowne wartości dla tych parametrów na
podstawie klasy konfigurowanego adresu IP. W moim przykładzie jądro
przyjmie, że jest interfejs jest konfigurowany w sieci klasy C i
nada adresowi sieci wartość `192.168.0.0', a adresowi
ogłoszeniowemu `192.168.0.255'.
Polecenie ifconfig posiada znacznie więcej opcji. Najważniejsze z nich to:
włącznie interfejsu.
wyłączenie interfejsu.
włączenie lub wyłączenie korzystania z protokołu ARP na tym interfejsie
włączenie lub wyłączenie korzystania z trybu 'promoscious'. Jest to tryb pracy, w którym urządzennie może być zmuszone do odbierania wszelkich pakietów, a nie tylko tych adresowanych bezpośrednio do niego. Jest bardzo ważna dla programów tcpdump i innych podglądaczy pakietów.
ustawienie wielkości parametru MTU danego urządzenia.
adres sieci, do której należy (jest podłączony) interfejs.
ten parametr ma zastosowanie tylko dla niektórych modułów sprzętowych. Pozwala na ustawienie wartości przerwania IRQ z którego powinno korzystać dane urządzenie.
pozwala na włączenie odbierania pakietów skierowanych na podany adres ogłoszeniowy, lub na zablokowanie odbierania tych pakietów.
pozwala na podanie adresu komputera na
drugim końsu połączenia point-to-point obsługiwanego przez ten
interfejs. Ma to miejsce w przypadku takich protokołów jak slip
czy ppp.
pozwala na określenie adresu sprzętowego urządzenia lecz tylko dla ograniczonego rodzaju urządzeń. Nie jest często używany w sieciach Ethernet, za to często wykorzystuje się go w sieciach AX.25.
Polecenie ifconfig można stosować dla każdego interfejsu sieciowego. Niektóre programy użytkownika, jak pppd czy dip korzystają z niego w celu skonfigurowania interfejsu sieciowego, tuż po jego utworzeniu. W takim przypadku nie jest potrzebna ręczna konfiguracja tych urządzeń.
`Resolver nazw ' jest częscią standardowej biblioteki
Linuksa. Jego podstawową funkcją jest zamiana wygodnych dla człowieka
nazw komputerów, jak `ftp.funet.fi' na ich adres
128.214.248.6, którym posługują się komputery.
Prawdopodobnie spotkałeś się z nazwami komputerów, lecz być może nie wiesz w jaki sposób są konstruowane lub rozkładane. Nazwy domen internetowych są w swojej naturze hierachiczne, to znaczy posiadają strukturę drzewiastą. domena jest rodziną, grupą nazw. Domena może być podzielona na poddomeny (subdomain). Domena najwyższego poziomu (top level domain) jest domeną, która jednocześnie nie jest poddomeną. Domeny najwyższego poziomu są określone w dokumencie RFC-920. Poniżej kilka przykładów domen najwyższego poziomu.
organizacje komercyjne
organizacje edukacyjne
organizacje rządzowe
organizacje wojskowe
inne organizacje
dwuliterowe kody państw, reprezentujące konkretne państwo.
Każda z domen najwyższego poziomu posiada poddomeny. Domey najwyższego
poziomu o nazwach odpowiadających kodom państw, są zwykle podobnie
podzielone, jak domeny najwyższego poziomu tzn. można tzm znaleźć
poddomeny com, edu, gov, mil i org. Na koniec
otrzymujemy com.au i gov.au dla organizacji komercyjnych i
rządowych w Australii. Z przyczyn historycznych większość domen
należących do domen najwyższego poziomu dotyczy organizacji
amerykańskich, choć Stany Zjednoczone mają również własną domenę
`.us'.
Następny poziom podziału odzwierciedla zwykle nazwę instytucji/organizacji. Dalsze poddomeny różnią się w swojej naturze, często ten poziom domen jest zależny od wewnętrznej struktury instytucji, lecz może być zależny od dowolnego, rozsądnego kryterium przyjętego przez osoby zarządzające siecią w danej instytucji.
Ostatni w strukturze człon domeny, lecz pierwszy z lewej w jej nazwie oznacza nazwę komputera (hostname) i musi być jednoznaczny w danej poddomenie. Pozostała część jezt nazywana domeną danego komputera (domainname), a całość jest nazywana `Fully Qualified Domain Name FQDM' - Pełna nazwa domenowa.
Biorąc za przykład mój komputer pocztowy, jego FQDN to
`perf.no.itg.telstra.com.au'. To znaczy, że komputer nazywa się
`perf', a domena `no.itg.telstra.com.au'. Nazwa mojej domeny
rozpoczyna się od członu oznaczającego kraj, Australię. Ponieważ
jesteśmy organizacją komercyjną kolejnym poziomem jest
`com'. `telstra' oznacza nazwę firmy (starą), a dalsze
człony są pochodną wewnętrznej struktury naszej firmy. Moj komputer
należy do Information Technolog Group w sekcji Network Operations.
Musisz wiedzieć do jakiej domeny należy twój komputer. Oprogramowanie resolwera nazw wykonuje swoją pracę odwołując się do serwera DNS (Domain Name Server), będziesz potrzebował adres IP najbliższego serwera DNS.
Musisz poprawić trzy pliki. Omówię każdy z nich.
/etc/resolv.conf jest głównym plikiem konfiguracyjnym
resolwera nazw. Posiada bardzo prosty format. Jest to plik tekstowy
zawierający jedno polecenie na wiersz. Najczęscieściej stosuje się trzy
słowa kluczowe:
określa nazwę domeny, do której należy dany komputer
określa listę domen, które mają być przeszukiwane w poszukiwaniu podanej nazwy komputera (w przypadku gdy nazwa komputera nie została podana w postaci FQDN)
może być powtórzone wielokrotnie, określa adres serwera DNS
przykładowy plik /etc/resolv.conf mógłby wyglądać nastepująco:
domain maths.wu.edu.au
search maths.wu.edu.au wu.edu.au
nameserver 192.168.10.1
nameserver 192.168.12.1
W przykładzie podaliśmy, że podstawową domeną, do której należy
komputer i która będzie dodawana do nazwy komputera, jeśli nie została
podana w formacie FQDN jest maths.wu.edu.au. Jeśli komputer nie
zostanie znaleziony w tej domenie resolwer przeszuka jeszcze domenę
wu.edu.au. Podano również adresy IP dwóch serwerów DNS.
Plik /etc/host.conf to plik, które określa niektóre
zachowania resolvera. Jego format jest dokładnie opisany na stronie
podręcznika (man resolv+). W większości przypadków wystarczy taki plik:
order hosts,bind
multi on
Ta konfiguracja informuje resolver, że poszukując nazwy komputera
należy wpierw sprawdzać zawartość pliku /etc/hosts, zanim
zacznie się zadawać pytania serwerowi DNS. Oznacza również, że należy
przekazywać wszystkie znalezione w tym pliku adresy IP odpowiadające
nazwie poszukiwanego komputera, a nie tylko pierwszy z nich.
Plik /etc/hosts jest to miejsce, gdzie umieszcza się nazwy i
adresy lokalnych komputerów. Jeśli umieścisz w tym pliku nazwę i adres
komputera, nie musisz pytać się o jego adres serwera DNS. Wadą tego
rozwiązania jest to, że musisz pamiętać aby informacje zawarte w tym
pliku były aktualne. W dobrze zarządzanym sytemie w niniejszym pliku
można zwykle znaleźć nazwę interfejsu pętli zwrotnej i nazwy lokalnych
komputerów.
# /etc/hosts
127.0.0.1 localhost loopback
192.168.0.1 nazwa.tego.komputera
Możesz podać więcej niż jedną nazwę odpowiadającą danemu numerowi IP, jak to zrobiliśmy w powyższym przykładzie w przypadku lokalnej pętli zwrotnej.
Interfejs pętli zwrotnej (`loopback' interface) jest interfejsem
specjalnego rodzaju, umożliwiającym nawiązywanie połączeń z samym sobą.
Istnieje wiele przyczyn, dla których mogłbyś chcieć to robić. Na
przykład w celu przetestowania oprogramowania sieciowego, bez
konieczności zawracania głowy komukolwiek innemu. Adres `127.0.0.1'
został przypisany specjalnie dla tego interfejsu. Dlatego niezależnie
na którym komputerze bedziesz pracował, jeśli połączysz się z
komputerem o adresie 127.0.0.1 zawsze to będzie ten komputer,
z którego próbujesz nawiązać połączenie.
Skonfigurowanie interfejsu pętli zwrotnej jest proste, musisz się upewnić, że przy starcie sytemu wykonuje się następujące polecenie:
# ifconfig lo 127.0.0.1
# route add -host 127.0.0.1 lo
Więcej na temat polecenia route powiemy w następnym rozdziale.
Trasowanie ruchu (routing) to ogromny temat. Można na ten temat napisać bardzo dużo. Większość z was spotka się z całkiem prostymi konfiguracjami trasowania, a część nie. Opowiem o podstawowych prawach trasowania ruchu. Jeśli potrzebujesz bardziej szczegółowych informacji radzę zapoznać się z dokumentami wspomnianymi na początku.
Rozpocznijmy od definicji. Co to jest trasowanie pakietów IP. Oto jedna z definicji, którą ja używam:
Trasowanie pakietów IP to proces, w którym komputer z przyłączeniami do wielu sieci decyduje, gdzie wysłać otrzymane pakiety.
Zilustrujmy to przykładem. Wyobraźmy sobie typowy biurowy router. Mógłby mieć połączenie PPP z internetem, kilka segmentów ethernetowych obsługujących stacje robocze i jeszcze jedno połączenie PPP do innego biura. Kiedy router otrzymuje datagram z jednego ze swoich przyłączeń sieciowych, trasowanie jest mechanizmem stosowanym przez niego do wyboru portu przyłączeniowego, do którego trzeba przesłać ten datagram. Zwykłe komputery też muszą wykonywać trasowanie, wszystkie komputery w Internecie posiadają dwa urządzenia sieciowe, jedno z nich to urządzenie pętli zwrotnej (loopback interface) opisane powyżej, a drugie to te, którego używa do porozumiewania się z resztą sieci. Może to być karta ethernetowa lub port PPP, czy SLIP.
OK, w jaki sposób działa trasowanie? Każdy z komputerów przechowuje listę zasad trasowania, zwaną tabelą trasowania (routing table). Każdy wiersz tej tabeli zawiera co najmniej trzy pola, pierwsze oznaczające adres docelowy, drugie zawiera nazwę interfejsu przez który należy wysłać datagram, a trzecie, opcjonalne, to adres IP innego komputera (tzw. gateway), który przeniesie datagram dalej w jego drodze przez sieć. Pod Linuksem tabelę trasowania można zobaczyć wydając polecenie:
# cat /proc/net/route
Proces trasowania jest całkiem prosty: otrzymujemy przychodzący datagram, adres docelowy (do kogo jest adresowany ten datagram) zostaje porównany z pozycjami tabeli routingu. Wybiera się pozycje, kóra najbardziej pasuje do tego adresu i datagram zostaje przesłany przez określony w tej pozycji interfejs. Jeśli pole gatewaya nie jest puste, wtedy datagram zostaje przesłany do tego komputera przez określony w tej pozycji interfejs seciowy, w przeciwnym wyopadku zakłada się, że adres docelowy leży na sieci obsługiwanej przez podany interfejs.
Do manipulacji pozycjami tabeli trasowania służy specjalne polecenie. Wymaga podania w wierszu poleceń dodatkowych parametrów i zamienia je na wywołania funkcji systemowych, które proszą jądro o dodanie, zmodyfikowanie lub usunięcie pozycji w tabeli trasowania (która znajduje się w gestii jądra Linuksa). Polecenie to nazywa się `route'.
Prosty przykład. Wyobraźmy sobie, że mamy sieć ehernetową. Powiedziano
nam, że jest to sieć klasy C o adresie 192.168.1.0. Nasz komputer
otrzymał adres 192.168.1.10 i powiedziano nam, że router
przyłączony do internetu ma adres 192.168.1.1.
Pierwszym krokiem jest poprawne skonfigurowanie interfejsu, w sposób opisany wcześniej:
# ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up
Teraz musimy dodać pozycję do tabeli trasowania, aby powiedzieć jądru,
że datagramy do komputerów, których adresy pasujądo wzorca
192.168.1.* powinny być wysyłane przez interfejs
ethernetowy. Stosuje się w tym celu polecenie zbliżone do tego:
# route add -net 192.168.0.0 netmask 255.255.255.0 eth0
Zwróć uwagę na argument `-net', który mówi programowi route,
że ta pozycja oznacza trasę do całej podsieci (network route). Inną
możliwością jest pozycja określająca trasę do konkretnego adresu IP
tzw. 'host route'.
Powyższa pozycja tabeli trasowania umożliwi nam komunikację ze wszystkimi komputerami znajdującymi się w naszym segmencie ethernetowym. A co z wszystkimi innymi adresami IP spoza naszego segmentu?
Dodanie trasy do każdej sieci.komputera z którym chcielibyśmy się kiedykolwiek komunikować byłoby ogromnym zadaniem. Dlatego wprowadzono tzw trasę domyślną (default route). Trasa domyślna pasuje do każdego adresu docelowego, lecz najgorzej jak tylko jest to możliwe. Dlatego, jeśli istnieje inna pozycja pasująca do tego adresu, to ona zostanie wykorzystana zamiast pozycji domyślnej. Ideą trasy domyślnej jest umożliwienie zrealizowania polecenia 'wszystko inne wysłać tędy'. W naszym przykładzie oznacza to następujące polecenie:
# route add default gw 192.168.1.1 eth0
Argument `gw' informuje program route, że następny argument
oznacza adres IP. lub nazwę gatewaya lub routera, do którego należy
przesyłać wszystkie datagramy pasującego do tej pozycji. Dalszym
przesłaniem tych datagramów zajmie się właśnie ten komputer.
Tak więc nasza pełna konfiguracja wyglądała by następująco:
# ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up
# route add -net 192.168.0.0 netmask 255.255.255.0 eth0
# route add default gw 192.168.1.1 eth0
Jeśli dobrze się przyjrzysz plikom `rc' zajmującymi się siecią,
zobaczysz, że przynajmniej jeden z nich wygląda bardzo podobnie. Jest
to bardzo populana konfiguracja.
Zajmijmy się troszkę bardziej skomplikowanym przypadkiem. Załóżmy, że zajmujemy się konfiguracją routera o którym mówiliśmy wcześniej, tym który posiada połączenie PPP z Internetem, kilka segmentów sieci lokalnej. Niech konkretnie będą to trzy segmenty eternetowe i jedno łącze PPP. Konfiguracja trasowania w tym przypadku wyglądała by następująco:
# route add 192.168.1.0 netmask 255.255.255.0 eth0
# route add 192.168.2.0 netmask 255.255.255.0 eth1
# route add 192.168.3.0 netmask 255.255.255.0 eth2
# route add default ppp0
Każda ze stacji roboczych używałaby prostszej formy prezentowanej
wcześniej. Tylko router musi określić oddzielnie trasę do każdej z
sieci, ponieważ w przypadku stacji roboczej pozycja domyślna
obsłuży wszystkie połączenia pozostawiając routerowi zmartwienie
odpowiedniego podziału ruchu. Możesz się zastanawiać, dlaczego trasa
domyślna na routerze nie posiada argumentu gw. Przyczyna jest
prosta. Protokoły urządzeń szeregowych, takich jak PPP czy SLIP, zawsze
mają w swojej sieci tylko dwa komputery, po jednym na każdym końcu.
Wskazywanie komputera po drugiej stronie połączenia jako gatewaya jest
niepotrzebne i nadmiarowe, ponieważ nie ma innej możliwości niż
przesłać pakiety na drugi koniec połączenia PPP. Dlatego nie jest
potrzebne okreśanie w tego rodzaju połączeniach gatewaya. Podania
gatewaya wyagają w takiej sytuacji inne rodzaje sieci, np. ethernet,
arcnet, token ring, które obsługują wiele komputerów na jednym
segmencie.
Konfiguracja trasowania opisana powyżej nadaje się dla prostych konfiguracji sieci, gdzie zawsze istnieje tylko jedna droga do celu. W przypadku bardziej skomplikowanych konfiguracji sieci, sprawy nieco się komplikują. Na szczęście większości was to nie dotyczy.
Najwieksze kłopoty jakie sprawia 'trasowanie ręczne' lub inaczej mówiąc 'statyczne', polegają na tym, że w przypadku przerwania łącza do komputera docelowego, jedyną metodą nawiązania komunikacji inną drogą (jeśli taka istnieje) jest ręczna interwencja w tabelę trasowania (ręczne uruchomienie odpowiednich poleceń). Naturalnie jest to bardzo powolne, niepraktyczne i ryzykowne. Zostały rozwinięte techniki w celu automatycznej modyfikacji tabeli trasowania w przypadku awarii połączeń w celu przełączenia ruchu na drogi obejściowe, wszystkie te metody nazywane są ogólnie 'trasowaniem dynamicznym'.
Być może słyszałeś o najbardziej popularnych protokołach dynamicznego trasowania. Najczęsciej występującym jes RIP (Routing Information Protocol) i OSPF (Open Shortest Path First Protocol). RIP jest bardzo populany w małych sieciach takich jak małego rozmiaru sieci korporacyjne lub sieci między budynkami. OSPF jest nowocześniejszym i bardziej sprawnym protokołem, lepiej nadającym się do obsługi dużych konfigracji sieci i lepiej nadaje się do zastosowania w środowiskach, gdzie istnieje duża liczba możliwych tras przesyłania pakietu. Powszechnymi implementacjami tych protokołów są programy routed -RIP i gated -RIP,OSPF i inne. routed jest zwykle w każdej dystrybucji Linuksa, lub można go znaleźć w pakiecie `NetKit' opisanym wcześniej.
Przykład, który mogłby wymagać zastosowania dynamicznego trasowania mógłby wyglądać następująco:
192.168.1.0 / 192.168.2.0 /
255.255.255.0 255.255.255.0
- -
| |
| /-----\ /-----\ |
| | |ppp0 // ppp0| | |
eth0 |---| A |------//---------| B |---| eth0
| | | // | | |
| \-----/ \-----/ |
| \ ppp1 ppp1 / |
- \ / -
\ /
\ /
\ /
\ /
\ /
\ /
\ /
\ /
ppp0\ /ppp1
/-----\
| |
| C |
| |
\-----/
|eth0
|
|---------|
192.168.3.0 /
255.255.255.0
Mamy tutaj trzy routery A,B i C. Każdy obsługuje segment sieci klasy C (netmaska 255.255.255.0). Każdy router posiada również łącze PPP do każdego z pozostałych routerów. Sieć tworzy trójkąt.
Powinno być już oczywiste, że tabela trasowania na routerza A wygląda następująco:
# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
# route add -net 192.168.2.0 netmask 255.255.255.0 ppp0
# route add -net 192.168.3.0 netmask 255.255.255.0 ppp1
Taka konfiguracja będzie działała poprawnie, dopóki połączenie pomiędzy routerami A i B będzie pracować poprawnie. Jeśli nastąpi awaria tego połączenia komputery na segmencie A nie będą w stanie osiągnąć komputerów segmentu B i na odwrót ponieważ ich datagramy będą kierowane do interfejsu ppp0 routera A, który uległ właśnie awarii. Jednak komputery z segmentu B będą mogły nadal komunikować się z segmentem D i na odwrót ponieważ połączenie PPP pomiędzy komputerami pozostało nietknięte.
Zaczekaj! Skoro A może komunikować się z C i C może komunikować się z B dlaczego nie przesyłać datagramów adresowanych do B przez C zrzucając na niego dostarczenie ich do B? To jest właśnie rodzaj problemu, do rozwiązania którego powstały protokoły trasowania dynamicznego, jak np. RIP. Gdyby na każdym z routerów był uruchominy program routed wtedy tablice trasowania zostałyby automatycznie poprawione, tak aby odzwierciedlały nowy stan sieci w przypadku awarii któregokolwiek połączenia. Utworzenie takiej konfiuracji jest proste. Na każdym z routerów należy zrobić dwie rzeczy. W przypadku routera A:
# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
# /usr/sbin/routed
Demon `routed' tuż po uruchomieniu automatycznie znajdzie aktywne porty przyłączeń sieciowych, następnie będzie do nich rozsyłał i nasłuchiwał przychodzących z nich komunikatów pozwalając w ten sposób określenie poprawnej tabeli trasowania.
To był bardzo krótki opis trasowania dynamicznego i jego zastosowań. Jeśli potrzebujesz więcej informacji powinieneś zapoznać się dokumentami, do których referencje znajdziesz na początku tego dokumentu.
Istotne sprawy dotyczące dynamicznego trasowania:
Serwery i usługi sieciowe są to te programy, które pozwalają zdalnemu użytkownikowi stać się użytkownikiem twojego komputera. Zdalny użytkownik ustanawia połączenie sieciowe z twoim komputerem i programem oferującym usługę, lub demonem sieciowym, nasłuchującym na danym porcie, akceptuje połączenie i wykonuje program. Istnieją dwa tryby pracy demonów sieciowych. Oba są równie często stosowane. Oto one:
program-demon sieciowy nasłuchuje na określonych portach sieciowych i w momencie zestawienia przychodzącego połączenia, sam zarządza tym połączeniem w celu udostępnienia danej usługi.
serwer inetd jest specjalnym programem-demonem sieciowym specjalizującym się w obsłudze zestawiania połączeń sieciowych. Posiada własny plik konfiguracyjny, który mówi mu, który program obsługi usługi powinien zostać uruchomiony dla zaistniałej kombinacji typu połączenia (tcp lub udp) i numeru portu. Porty są opisane w innym pliku, o którym opowiemy już niedługo.
Istnieją dwa ważne pliki konfiguracyjne. Są to
/etc/services: plik, który kojarzy nazwy z numerami portów i
/etc/inetd.conf: plik konfiguracyjny demona inetd.
/etc/servicesPlik /etc/services jest prostą bazą, która kojarzy łatwe dla
człowieka nazwy portów z wykorzystywanymi przez komputery
numerami. Posiada bardzo prosty format. Jest to plik tekstowy, którego
każdy wiersz jest jednym rekordem informacji. Każdy rekord składa się
z trzech pól, rozdzielonych dowolną ilością białych znaków (tabulator
lub odstęp):
nazwa port/protokół aliasy # komentarz
jedno słowo reprezentujące opisywaną usługę.
to pole jest podzielone na dwie części
numer określający numer portu pod którym będzie
dostępna dana usługa. Wiekszość popularnych usług ma już przydzielone
numery portów. Są opisane w RFC-1340.
może to być albo tcp
albo udp.
Należy zapamiętać, że pozycja 18/tcp jest zupełnie inna niż
pozycja 18/udp i nie ma żadnych technicznych uwarunkowań,
dlaczego dana usługa miałaby istnieć w obu przypadkach. Należy zachować
zdrowy rozsądek. Jeśli któraś z usług jest rzeczywiście dostępna
zarówno przez tcp, jak i przez udp, wtedy rzeczywiście
w /etc/services znajdą się obie te pozycje.
inne nazwy, pod którymi będzie znana ta usługa.
Dowolny tekst w wierszu po znaku `#' jest traktowany jako
komentarz i ignorowany.
/etc/services.Wszystkie nowe dystrybucje Linuksa dostarczają dobry plik
/etc/services. Na wszelki wypadek, gdybyś chciał zbudować
swój komputer od zera oto kopia pliku /etc/services jaki jest
dostarczany razem z dystrybucją
Debian.
# /etc/services:
# $Id: NET-3-HOWTO.pl.sgml,v 1.4 2001/12/15 09:56:17 bart Exp $
#
# Network services, Internet style
#
# Note that it is presently the policy of IANA to assign a single well-known
# port number for both TCP and UDP; hence, most entries here have two entries
# even if the protocol doesn't support UDP operations.
# Updated from RFC 1340, ``Assigned Numbers'' (July 1992). Not all ports
# are included, only the more common ones.
tcpmux 1/tcp # TCP port service multiplexer
echo 7/tcp
echo 7/udp
discard 9/tcp sink null
discard 9/udp sink null
systat 11/tcp users
daytime 13/tcp
daytime 13/udp
netstat 15/tcp
qotd 17/tcp quote
msp 18/tcp # message send protocol
msp 18/udp # message send protocol
chargen 19/tcp ttytst source
chargen 19/udp ttytst source
ftp-data 20/tcp
ftp 21/tcp
ssh 22/tcp # SSH Remote Login Protocol
ssh 22/udp # SSH Remote Login Protocol
telnet 23/tcp
# 24 - private
smtp 25/tcp mail
# 26 - unassigned
time 37/tcp timserver
time 37/udp timserver
rlp 39/udp resource # resource location
nameserver 42/tcp name # IEN 116
whois 43/tcp nicname
re-mail-ck 50/tcp # Remote Mail Checking Protocol
re-mail-ck 50/udp # Remote Mail Checking Protocol
domain 53/tcp nameserver # name-domain server
domain 53/udp nameserver
mtp 57/tcp # deprecated
bootps 67/tcp # BOOTP server
bootps 67/udp
bootpc 68/tcp # BOOTP client
bootpc 68/udp
tftp 69/udp
gopher 70/tcp # Internet Gopher
gopher 70/udp
rje 77/tcp netrjs
finger 79/tcp
www 80/tcp http # WorldWideWeb HTTP
www 80/udp # HyperText Transfer Protocol
link 87/tcp ttylink
kerberos 88/tcp kerberos5 krb5 # Kerberos v5
kerberos 88/udp kerberos5 krb5 # Kerberos v5
supdup 95/tcp
# 100 - reserved
hostnames 101/tcp hostname # usually from sri-nic
iso-tsap 102/tcp tsap # part of ISODE.
csnet-ns 105/tcp cso-ns # also used by CSO name server
csnet-ns 105/udp cso-ns
rtelnet 107/tcp # Remote Telnet
rtelnet 107/udp
pop-2 109/tcp postoffice # POP version 2
pop-2 109/udp
pop-3 110/tcp # POP version 3
pop-3 110/udp
sunrpc 111/tcp portmapper # RPC 4.0 portmapper TCP
sunrpc 111/udp portmapper # RPC 4.0 portmapper UDP
auth 113/tcp authentication tap ident
sftp 115/tcp
uucp-path 117/tcp
nntp 119/tcp readnews untp # USENET News Transfer Protocol
ntp 123/tcp
ntp 123/udp # Network Time Protocol
netbios-ns 137/tcp # NETBIOS Name Service
netbios-ns 137/udp
netbios-dgm 138/tcp # NETBIOS Datagram Service
netbios-dgm 138/udp
netbios-ssn 139/tcp # NETBIOS session service
netbios-ssn 139/udp
imap2 143/tcp # Interim Mail Access Proto v2
imap2 143/udp
snmp 161/udp # Simple Net Mgmt Proto
snmp-trap 162/udp snmptrap # Traps for SNMP
cmip-man 163/tcp # ISO mgmt over IP (CMOT)
cmip-man 163/udp
cmip-agent 164/tcp
cmip-agent 164/udp
xdmcp 177/tcp # X Display Mgr. Control Proto
xdmcp 177/udp
nextstep 178/tcp NeXTStep NextStep # NeXTStep window
nextstep 178/udp NeXTStep NextStep # server
bgp 179/tcp # Border Gateway Proto.
bgp 179/udp
prospero 191/tcp # Cliff Neuman's Prospero
prospero 191/udp
irc 194/tcp # Internet Relay Chat
irc 194/udp
smux 199/tcp # SNMP Unix Multiplexer
smux 199/udp
at-rtmp 201/tcp # AppleTalk routing
at-rtmp 201/udp
at-nbp 202/tcp # AppleTalk name binding
at-nbp 202/udp
at-echo 204/tcp # AppleTalk echo
at-echo 204/udp
at-zis 206/tcp # AppleTalk zone information
at-zis 206/udp
z3950 210/tcp wais # NISO Z39.50 database
z3950 210/udp wais
ipx 213/tcp # IPX
ipx 213/udp
imap3 220/tcp # Interactive Mail Access
imap3 220/udp # Protocol v3
ulistserv 372/tcp # UNIX Listserv
ulistserv 372/udp
#
# UNIX specific services
#
exec 512/tcp
biff 512/udp comsat
login 513/tcp
who 513/udp whod
shell 514/tcp cmd # no passwords used
syslog 514/udp
printer 515/tcp spooler # line printer spooler
talk 517/udp
ntalk 518/udp
route 520/udp router routed # RIP
timed 525/udp timeserver
tempo 526/tcp newdate
courier 530/tcp rpc
conference 531/tcp chat
netnews 532/tcp readnews
netwall 533/udp # -for emergency broadcasts
uucp 540/tcp uucpd # uucp daemon
remotefs 556/tcp rfs_server rfs # Brunhoff remote filesystem
klogin 543/tcp # Kerberized `rlogin' (v5)
kshell 544/tcp krcmd # Kerberized `rsh' (v5)
kerberos-adm 749/tcp # Kerberos `kadmin' (v5)
#
webster 765/tcp # Network dictionary
webster 765/udp
#
# From ``Assigned Numbers'':
#
#> The Registered Ports are not controlled by the IANA and on most systems
#> can be used by ordinary user processes or programs executed by ordinary
#> users.
#
#> Ports are used in the TCP [45,106] to name the ends of logical
#> connections which carry long term conversations. For the purpose of
#> providing services to unknown callers, a service contact port is
#> defined. This list specifies the port used by the server process as its
#> contact port. While the IANA can not control uses of these ports it
#> does register or list uses of these ports as a convienence to the
#> community.
#
ingreslock 1524/tcp
ingreslock 1524/udp
prospero-np 1525/tcp # Prospero non-privileged
prospero-np 1525/udp
rfe 5002/tcp # Radio Free Ethernet
rfe 5002/udp # Actually uses UDP only
bbs 7000/tcp # BBS service
#
#
# Kerberos (Project Athena/MIT) services
# Note that these are for Kerberos v4, and are unofficial. Sites running
# v4 should uncomment these and comment out the v5 entries above.
#
kerberos4 750/udp kdc # Kerberos (server) udp
kerberos4 750/tcp kdc # Kerberos (server) tcp
kerberos_master 751/udp # Kerberos authentication
kerberos_master 751/tcp # Kerberos authentication
passwd_server 752/udp # Kerberos passwd server
krb_prop 754/tcp # Kerberos slave propagation
krbupdate 760/tcp kreg # Kerberos registration
kpasswd 761/tcp kpwd # Kerberos "passwd"
kpop 1109/tcp # Pop with Kerberos
knetd 2053/tcp # Kerberos de-multiplexor
zephyr-srv 2102/udp # Zephyr server
zephyr-clt 2103/udp # Zephyr serv-hm connection
zephyr-hm 2104/udp # Zephyr hostmanager
eklogin 2105/tcp # Kerberos encrypted rlogin
#
# Unofficial but necessary (for NetBSD) services
#
supfilesrv 871/tcp # SUP server
supfiledbg 1127/tcp # SUP debugging
#
# Datagram Delivery Protocol services
#
rtmp 1/ddp # Routing Table Maintenance Protocol
nbp 2/ddp # Name Binding Protocol
echo 4/ddp # AppleTalk Echo Protocol
zip 6/ddp # Zone Information Protocol
#
# Debian GNU/Linux services
rmtcfg 1236/tcp # Gracilis Packeten remote config server
xtel 1313/tcp # french minitel
cfinger 2003/tcp # GNU Finger
postgres 4321/tcp # POSTGRES
mandelspawn 9359/udp mandelbrot # network mandelbrot
# Local services
/etc/inetd.confPlik /etc/inetd.conf jest plikiem konfiguracyjnym programu
inetd. Jego rolą jest poinformowanie inetd co powinien
zrobić w momencie otrzymania połączenia z konkretną usługą. Musisz
powiedzieć programowi inetd, który program obsługi uruchomić i jak
to zrobić. Musisz to zrobić dla każdej usługi, której połączenia mają
być obsługiwane przez program inetd.
Format tego pliku jest całkiem prosty. Jest to plik tekstowy, którego
kązy wiersz jest niezależny rekordem danych opisujących jedną z usług
jaką chcesz obsługiwać. Dowolny tekst w wierszu po znaku `#' jest
traktowany jako komentarz i pomijany. Każdy wiersz składa się z
siedmiu pól rodzielonych białymi znakami (tabulator lub odstęp) w formacie:
service socket_type proto flags user server_path server_args
usługa rodzaj_gniazda protokół flagi użytkownik ścieżka_dostępu arguemnty
nazwa usługi pobrana przez inetd z
/etc/services
to pole określa rodzaj gniazda jakie zostanie
utworzone, dozwolone wartości to : stream, dgram,
raw, rdm, or seqpacket. Dokładny opis jest dość
skomplikowany ale jako pierwsze przybliżenie można potraktować zasadę,
że niemal wszystkie usługi korzystające z tcp używają
stream i niemal wszystkie usługi korzystające z udp używają
dgram. Inne kombinacje parametrów występują w bardzo rzadkich
przypadkach specjalizowanych serwerów usług.
nazwa protokołu danej pozycji. Powinien pasować do
odpowiedniej pozycji pliku /etc/serwer i zwykle jest to
tcp lub udp. Usługi oparte na Sun RPC (Remote Procedure
Call) będą korzystały z rpc/tcp lub rpc/udp.
istnieją tylko dwie wartości jakie może przyjmować to
pole. Informują one program inetd czy uruchomiony program obsługi
zwalnia gniazdo co pozwala na uruchomienie kolejnego przy następnym
połączeniu do tej usługi, czy inetd powinien zaczekać na
zakończenie działania programu obsługi, który sam będzie obsługiwał
żądania zestawienia połączenia. Ponownie dokładny opis jest dosyć
skomplikowany, lecz w przybliżeniu mozna powiedzieć, że wszystkie
usługi typu tcp powinny w tym polu mieć wartość nowait i
większość usług typu udp powinny przyjmować wartość
wait. Pamiętaj, że istnieją znaczące wyjątki od tej reguły.
określa, który użytkownik zdefiniowany w pliku
/etc/passwd statnie się właścicielem uruchomionego demona
sieciowego. Jest to pożyteczne, gdy chcesz zwiększyć bezpieczeństwo
swojego systemu. Możesz temu polu nadać wartość nobidy aby w
przypadku złamania zabezpieczeń programów obsługi wyrządzone straty
były jak najmniejsze. Zwykle to pole przyjmuje wartość root,
ponieważ większość programów obsługi do wykonania poprawnie swych zadań
wymaga uprawnień administatora.
to pole oznacza pełną scieżkę dostępu do programu obsługi, który należy uruchomić.
zawiera pozostałą część wiersza poleceń
uruchamianego programu obsługi. Jest to parametr opcjonalny. To
właśnie tutaj możesz umieścić dowolne parametry, które zostaną
przekazane programowi obsługi w momencie jego uruchomienia przez
program inetd.
/etc/inetd.confPodobnie jak w przypadku pliku /etc/services wszystkie
nowoczesne dystrybucje zawierają poprawny plik
/etc/inetd.conf. Na wszelki wypadek poniżej można znaleźć
plik /etc/inetd.conf dostarczany z dystrybucją
Debian .
# /etc/inetd.conf: see inetd(8) for further informations.
#
# Internet server configuration database
#
#
# Modified for Debian by Peter Tobias <tobias@et-inf.fho-emden.de>
#
# <service_name> <sock_type> <proto> <flags> <user> <server_path> <args>
#
# Internal services
#
#echo stream tcp nowait root internal
#echo dgram udp wait root internal
discard stream tcp nowait root internal
discard dgram udp wait root internal
daytime stream tcp nowait root internal
daytime dgram udp wait root internal
#chargen stream tcp nowait root internal
#chargen dgram udp wait root internal
time stream tcp nowait root internal
time dgram udp wait root internal
#
# These are standard services.
#
telnet stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.telnetd
ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.ftpd
#fsp dgram udp wait root /usr/sbin/tcpd /usr/sbin/in.fspd
#
# Shell, login, exec and talk are BSD protocols.
#
shell stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.rshd
login stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.rlogind
#exec stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.rexecd
talk dgram udp wait root /usr/sbin/tcpd /usr/sbin/in.talkd
ntalk dgram udp wait root /usr/sbin/tcpd /usr/sbin/in.ntalkd
#
# Mail, news and uucp services.
#
smtp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.smtpd
#nntp stream tcp nowait news /usr/sbin/tcpd /usr/sbin/in.nntpd
#uucp stream tcp nowait uucp /usr/sbin/tcpd /usr/lib/uucp/uucico
#comsat dgram udp wait root /usr/sbin/tcpd /usr/sbin/in.comsat
#
# Pop et al
#
#pop-2 stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.pop2d
#pop-3 stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.pop3d
#
# `cfinger' is for the GNU finger server available for Debian. (NOTE: The
# current implementation of the `finger' daemon allows it to be run as `root'.)
#
#cfinger stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.cfingerd
#finger stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.fingerd
#netstat stream tcp nowait nobody /usr/sbin/tcpd /bin/netstat
#systat stream tcp nowait nobody /usr/sbin/tcpd /bin/ps -auwwx
#
# Tftp service is provided primarily for booting. Most sites
# run this only on machines acting as "boot servers."
#
#tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd
#tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /boot
#bootps dgram udp wait root /usr/sbin/bootpd bootpd -i -t 120
#
# Kerberos authenticated services (these probably need to be corrected)
#
#klogin stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.rlogind -k
#eklogin stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.rlogind -k -x
#kshell stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.rshd -k
#
# Services run ONLY on the Kerberos server (these probably need to be corrected)
#
#krbupdate stream tcp nowait root /usr/sbin/tcpd /usr/sbin/registerd
#kpasswd stream tcp nowait root /usr/sbin/tcpd /usr/sbin/kpasswdd
#
# RPC based services
#
#mountd/1 dgram rpc/udp wait root /usr/sbin/tcpd /usr/sbin/rpc.mountd
#rstatd/1-3 dgram rpc/udp wait root /usr/sbin/tcpd /usr/sbin/rpc.rstatd
#rusersd/2-3 dgram rpc/udp wait root /usr/sbin/tcpd /usr/sbin/rpc.rusersd
#walld/1 dgram rpc/udp wait root /usr/sbin/tcpd /usr/sbin/rpc.rwalld
#
# End of inetd.conf.
ident stream tcp nowait nobody /usr/sbin/identd identd -i
Linux posiada jeszcze kilka plików konfiguracyjnych, które mają wpływ na pracę sieci, z którymi powinno się zapoznać. Być może nigdy nie wystąpi potrzeba ich modyfikacji, lecz warto wiedzieć jakie informacje zawierają i czego dotyczą.
/etc/protocolsPlik /etc/protocols zawiera informacje przyporządkowujące
nazwom protokołów odpowiednie numery. Jest wykorzystywany przez różne
programy pozwalając na podawanie nazw protokołów zamiast numerów oraz
inne programy, jak np tcpdump, które mogą wyświetlać nazwy
protokołów zamiast ich liczbowej reprezentacji. Składnia pliku jest następująca:
protocolname number aliases
nazwa_protokołu numer aliasy
Plik /etc/protocols dostarczany w dystrybucji
Debian wygląda następująco:
# /etc/protocols:
# $Id: NET-3-HOWTO.pl.sgml,v 1.4 2001/12/15 09:56:17 bart Exp $
#
# Internet (IP) protocols
#
# from: @(#)protocols 5.1 (Berkeley) 4/17/89
#
# Updated for NetBSD based on RFC 1340, Assigned Numbers (July 1992).
ip 0 IP # internet protocol, pseudo protocol number
icmp 1 ICMP # internet control message protocol
igmp 2 IGMP # Internet Group Management
ggp 3 GGP # gateway-gateway protocol
ipencap 4 IP-ENCAP # IP encapsulated in IP (officially ``IP'')
st 5 ST # ST datagram mode
tcp 6 TCP # transmission control protocol
egp 8 EGP # exterior gateway protocol
pup 12 PUP # PARC universal packet protocol
udp 17 UDP # user datagram protocol
hmp 20 HMP # host monitoring protocol
xns-idp 22 XNS-IDP # Xerox NS IDP
rdp 27 RDP # "reliable datagram" protocol
iso-tp4 29 ISO-TP4 # ISO Transport Protocol class 4
xtp 36 XTP # Xpress Tranfer Protocol
ddp 37 DDP # Datagram Delivery Protocol
idpr-cmtp 39 IDPR-CMTP # IDPR Control Message Transport
rspf 73 RSPF # Radio Shortest Path First.
vmtp 81 VMTP # Versatile Message Transport
ospf 89 OSPFIGP # Open Shortest Path First IGP
ipip 94 IPIP # Yet Another IP encapsulation
encap 98 ENCAP # Yet Another IP encapsulation
/etc/networksPlik /etc/networks ma funkcję zbliżoną do funkcji pliku
/etc/hosts. Jest prostą bazą danych nazw i adresów
sieci. Jego format różni się tylko tym, że może zawierać jedynie dwa
pola w wierszu w następujacym formacie:
# networkname networkaddress
# nazwa_sieci adres_sieci
Przykładowy plik mógłby wyglądać tak:
loopnet 127.0.0.0
localnet 192.168.0.0
amprnet 44.0.0.0
W przypadku używania programu route jeśli punkt docelowy jest
siecią, a sieć ta znajduje się w pliku /etc/networks, wtedy
polecenie route zamiast adresu IP sieci wyświetli jej nazwę.
Pozwól, że rozpocznę ten rozdział stwierdzeniem, że zabezbieczanie komputera i sieci przed złośliwymi atakami jest trudną i skomplikowaną sztuką. Nie uważam się za aksperta w tej dziedzinie i choć opisywane przeze mnie mechanizmy pomogą być bardziej bezpiecznym to jeśli bardzo ci zależy na bezpieczeństwie twojego systemu radziłbym ci rozejrzeć się dokładniej w tym temacie. W internecie można znaleźć wiele dobrych referencji na ten temat.
Podstawowa zasada brzmi:
`Nie uruchamiaj serwerów (programów obsługi), których nie
zamierzasz używać.'.
Wiele dystrybucji posiada mnóstwo różnego rodzaju oprogramowania,
automatycznie konfigurowanego i uruchamianego. Aby zapewnić sobie
minimalny poziom bezpieczeństwa powinno się przyjrzeć się plikowi
/etc/inetd.conf i skomentować te usługi, których nie
zamierzasz używać. Dobrymi kandydatami są:
shell, login, exec, uucp, ftp i serwisy
informacyjne, jak: finger, netstat i systat.
Istnieje wiele mechanizmów sterowania dostępem do oferowanych usług sieciowych, wymienię podstawowe.
Plik /etc/ftpusers jest prostym mechanizmem pozwalającym na
zabronienie wejścia do systemu przez usługę ftp niektórym użytkownikom twojego
komputera. /etc/ftpusers jest odczytywany przez program
obsługujący usługę ftp (ftpd) w momencie nawiązania
przychodzącego połączenia. Plik zawiera listę tych użytkowników,
którzy nie mają pozwolenia wchodzenie do systemu przez usługę
ftp. Mógłby wygladać mniej więcej tak:
# /etc/ftpusers - użytkownicy, którzy nie mogą dostac się do systemu
# przez ftp
root
uucp
bin
mail
Pli /etc/securetty pozwala na określenie listy urządzeń
tty, przez które może logować się administrator. Plik
/etc/securetty jest wczytywany przez program weryfikujący
użytkownika (zwykle /bin/login). Jest to lista nazw urządzeń,
które mogą być wykorzystywane przez administratora na wejście do
systemu. Wejście do systemu przez administratora przez inne urządzenia
jest niemożliwe.
# /etc/securetty - terminale tty przez które administrator może
# zalogować się do systemu
tty1
tty2
tty3
tty4
Program tcpd jaki prawdopodobnie widziałeś w pliku
/etc/inetd.conf dostarcza mechanizmów rejestracji i
sterowania dostępem do usług, do ochrony których został skonfigurowany.
W momencie uruchamiania przez program inetd odczytuje swoje dwa pliki konfiguracyjne, zawierające zasady dostępu i albo zezwala, albo odmawia dostępu do usługi, którą ochrania.
Przeszukuje zasady znajdujące się plikach konfiguracyjnych, aż do
napotkania pierwszej, która pasuje do zaistniałej sytuacji. Jeśli
takiej nie znalazł zakłada, że należy pozwolić na dostęp. Pliki które
przeszukuje to w kolejności: /etc/hosts.allow i
/etc/hosts.deny. Pokrótce opiszę zawartość każdego z
nich. Pełny opis możliwości programu tcpd znajdziesz na stronach
podręcznika (man hosts_allow).
Plik /etc/hosts.allow jest plikiem konfiguracyjnym programu
/usr/sbin/tcpd. Plik hosts.allow zawiera informacje
określające, które komputery mogą uzyskać dostęp do chronionej
usługi w twoim systemie.
Format pliku jest bardzo prosty:
# /etc/hosts.allow
#
# <lista usług>: <lista komputerów> [: polecenie]
lista usługjest odzielona przecinkami listą nazw programów obsługi
chronionej usługi do której ma zastosowanie dana reguła.
Na przykład: ftpd, telnetd i fingerd.
lista komputerówjest rozdzieloną przecinkami listą nazw komputerów lub adresów
IP. Można również określać wzroce adresów lub naz komputerów stsując
znaki specjalne, umożliwiajć tworzenie wzorców reprezentujacych grupy
komputerów. Np. gw.v2ktj.ampr.org oznacz konkretny komputer,
.uts.edu.au oznacza dowolny komputer, którego pełna nazwa kończy
się podanym ciągiem znaków, 44. oznacza dowolny adres IP
zawierający te cyfry. W celu uproszczenia konfiguracji wprowadzono
kilka specjalnych oznaczeń: ALL określające wszystkie komputery,
LOCAL reprezentujący wszystkei komputery, których nazwa nie
zawiera znaku `.' tzn. należą do tej samej domeny co twój
komputer, PARANOID oznaczający wszystkie komputery, których nazwa
nie odpowiada ich adresowi (name spoofing). I ostatni element bardzo
użyteczny, to EXCEPT pozwalający na podanie listy z
wyjątkami. Omówimy to dokładnie później na przykładzie.
poleceniejest opcjonalnym parametrem. Jest to pełna ścieżka dostępu do
polecenia (programu), który należy uruchomić za każdym razem, kiedy
dana reguła zostanie dopasowana. Może to być polecenie, które będzie
próbowało zidentyfikować, kto znajduje się w tej chwili na komputerze
próbującym nawiązać połączenia, lub wyśle wiadomość lub inny komunikat
adresowany do administratora systemu informując o próbie
połączenia. Isnieje kilka wzorców, które zostaną podmienione,
najczęściej wykorzystywane to:
%h jest zamieniane na nazwę komputera nawiązującego połączenie
lub jego adres jeśli nie posiada nazwy, %d na nazwę programu
obsługi, który został wywołany.
Przykład:
# /etc/hosts.allow
#
# dostęp do poczty dla wszystkich
in.smtpd: ALL
# połączenie telnet i ftp tylko z komputerów z lokalnej domeny i
# mojego komputera domowego
telnetd, ftpd: LOCAL, myhost.athome.org.au
# Pozwól na finger z dowolnego komputera, lecz rejestruj kto się z
# nami łączył
fingerd: ALL: (finger @%h | mail -s "finger from %h" root)
Plik /etc/hosts.deny jest plikiem konfiguracyjnym programu
/usr/sbin/tcpd. hosts.deny zawiera listę
komputerów, które nie mogą uzyskać dostępu do chronionej usługi w
twoim systemie.
Prosty przyklad wyglądał by mniej więcej tak:
# /etc/hosts.deny
#
# Zabroń dostępu wszystkim komputerom o podejrzanych nazwach
ALL: PARANOID
#
# Zabroń dostępu wszystkim do wszystkiego
ALL: ALL
PARANOID jest w tym przypadku niepotrzebne, ponieważ następna
pozycja przechwytuje wszystkie przypadki. Jedna z tych pozycji jest
dobrym punktem wyjściowym do budowy pliku konfiguracyjnego, zależnym
od twoich oczekiwań i wymagań.
Posiadanie opcji ALL: ALL w /etc/hosts.deny i
zezwalanie na dostęp do konkretnych usług konkretnym komputerom
(grupom komputerów) w pliku /etc/hosts.allow jest
najbezpieczniejszym podejściem.
Plik hosts.equiv jest wykorzystywany nadawania innym komputerom i
zdalnym użytkownikom niektórych uprawnień dostępu do naszych zasobów,
bez konieczności podawania przez nich hasła. Jest to użyteczne w
bezpiecznym środowisku sieciowym, gdzie posiadamy kontrolę
nad wszystkimi komputerami lecz w innym przypadku jest to bardzo
ryzykowne ze względu na bezpieczeństwo naszego komputera. W takim
przypadku twój komputer jest tak bezpieczny, jak najmniej bezpieczny z
zaufanych komputerów. Aby zwiększyć bezpieczeństwo swojego systemu nie
używaj tego mechanizmu i zachęcaj swoich użytkowników do nie
korzystania z pliku .rhosta.
Wiele miejsc będzie zainteresowynych działającym serwerem anonimowego
ftp, aby umożliwić innym pobieranie i wstawianie plików, bez
konieczności podawania konkretnego identyfikatora użytkownika. Jeśli
zdecydujesz się udostępnić tę usługę, pamiętaj aby prawidlowo
skonfigurować demon ftpd. Wiekszość stron podręcznika dotyczących
ftpd(8) opisuje jak to powino być zrobione. Powinieneś się
upewnić, że zawsze stosujesz się do tych instrukcji. Bardzo ważne
jest, abyś nie używał w tym celu kopii swego pliku /etc/passwd w
katalogu etc serwera ftpd. Musisz pamiętać aby usunąć wszelkie
niepotrzebne informacje dotyczące kont, za wyjątkiem tych niezbędnych,
w przeciwnym wypadku będziesz narażony na ataki wynikłe ze złamania
haseł prezentowanych w pliku passwd.
Bardzo dobrym środkiem na zapewnienie bezpieczeństwa swojemu systemowi jest zabronienie dostępu do twojego komputera wszystkim niepożądanym pakietom. Jest to dokladnie opisane w Firewall-HOWTO.
Oto inne, potencjalnie religijne sugestie, które powinieneś rozważyć.
niezależnie od swojej popularności demon z przerażającą regularnością pojawiają się ostrzeżenia o błędach w programie sendmail. Wszystko zależy od ciebie, lecz ja bym go nie uruchamiał.
powinieneś się ich bać. Istnieje wiele sposobów wykorzystania błędów w tych usługach. Bardzo trudno jest zastąpić NFS czymś innym, dokładnie upewnij się komu pozwalasz na montowanie swoich dysków.
Kolejne podrozdziały są specyficzne dla konkretnych technologi sieciowych. Informacje tam zawarte nie muszą mieć zastosowania do innego rodzaju technologii sieciowych.
Urządzenia ARCNET posiadają nazwy `arc0s', `arc1e',
`arc2e' itd. Pierwsza karta wykryta przez jądro otrzymuje nazwę
`eth0', a dalsze otrzymują nazwy z kolejnymi numerami. Litera na
końcu nazwy oznacza że wybrałeś 'ethernet encapsulation' lub standard
pakietu zgodny z RFC1051.
Opcje konfiguracji jądra:
Network device support --->
[*] Network device support
<*> ARCnet support
[ ] Enable arc0e (ARCnet "Ether-Encap" packet format)
[ ] Enable arc0s (ARCnet RFC1051 packet format)
Jeśli posiadasz już prawidłowo skompilowane jądro potrafiące obsługiwać kartę, jej konfiguracja jest bardzo prosta.
Zwykle będziesz musiał wydać następujące polecenia:
# ifconfig arc0e 192.168.0.1 netmask 255.255.255.0 up
# route add 192.168.0.0 netmask 255.255.255.0 arc0e
Proszę zapoznaj się z zawartością pliku
/usr/src/linux/Documentation/networking/arcnet-hardware.txt.
Obsługa sieci ARCNet została wykonana przez Averyego Pennaruna, apenwarr@foxnet.net.
AF_APPLETALK)Obsługa sieci Appletalk nie wprowadza żądnych dodatkowych nazw urządzeń sieciowych.
Opcje konfiguracji jądra:
Networking options --->
<*> Appletalk DDP
Obsługa Appletalk pozwala twojemu Linuksowi komunikować się z sieciami
Apple. Bardzo ważnym wykorzystywaniem tej możliwości jest
współdzielenie między twoim Linuksem i komputerami Apple zasobów takich
jak drukarki, czy dyski. Wymagane jest do tego dodatkowe
oprogramowanie o nazwie netatalk. Pakiet netatalk
udostępniający oprogramowanie implementujące protokół Appletalk oraz
kilka pożytecznych programów narzędziowych stworzył wraz z
grupą `Research Systems UnixGroup' na uniwersytecie Michigan
reprezentujący ten zespół Wesley Craig netatalk@umich.edu .
Pakiet netatalk powinieneś otrzymać w swojej dystrybucji Linuksa,
lub możesz go pobrać przez ftp ze źródła :
University of Michigan
Aby zbudować i zainstalować pakiet, musisz wydać następujące polecenia:
# cd /usr/src
# tar xvfz .../netatalk-1.4b2.tar.Z
- W tym momencie możesz zmienić plik `Makefile', np. w celu zmiany
katalogu docelowego DESTDIR. Domyślnie zostanie zainstalowany w
/usr/local/atalk co jest dosyć bezpiecznym wyborem.
# make
- jako administrator:
# make install
Pierwszą rzeczą jaką musisz zrobić aby zaczęło działać to dodanie
nowych pozycji do pliku /etc/services. A mianowicie:
rtmp 1/ddp # Routing Table Maintenance Protocol
nbp 2/ddp # Name Binding Protocol
echo 4/ddp # AppleTalk Echo Protocol
zip 6/ddp # Zone Information Protocol
Kolejnym krokiem będzie utworzenie plików konfiguracyjnych pakietu w
katalogu usr/local/atalk/etc (lub tam gdzie go zainstalowałeś).
Pierwszym plikiem, który należy utworzyć jest
/usr/local/atalk/etc/atalkd.conf. Początkowo potrzebuje od
jedynie dodania wiersza określającego nazwę urządzenia sieciowego,
które obsługuje sieć, na której znajdują się komputery Apple.
eth0
Demon Appletalk po jego uruchomieniu dołoży kilka szczegółow.
Możesz eksportować swoje pliki, tak aby inne komputery sieci Appletalk miały do nich dostęp.
W tym celu należy odpowiednio zmienić plik konfiguracyjny
/usr/local/atalk/etc/AppleVolumes.system. Istnieje również
inny plik konfiguracyjny o nazwie
/usr/local/atalk/etc/AppleVolumes.default w takim samym
formacie opisujący który system plików zostanie udostępniony
podłączającym się do nas użytkownikom posiadającym przywileje gościa (guest).
Szczegółowe informacje na temat konfiguracji tych plików, oraz opis znaczenia wszystkich opcji można znaleźć na stronie podręcznika poświęconej afpd (man afpd).
Krótki plik przykładowy, mógłby wyglądać następująco:
/tmp Scratch
/home/ftp/pub "Obszar ogólnie dostępny"
W tym przykładzie eksportujemy katalog /tmp jako system
plików AppleShare o nazwie `Scratch' oraz katalog anonimowego ftp
jako AppleShare Volume o nazwie "Obszar ogólnie dostępny".
Nazwy wolumenów nie są obowiązkowe, demon wybierzą jakąś za ciebie,
lecz przecież nic cię nie kosztuje podanie nazwy.
Współdzielenie drukarki Linuksa z innymi komputerami sieci Appletalk jest całkiem proste. Musisz uruchomić program papd, Printer Access Protocol Daemon. Po uruchomieniu będzie akceptował żądania wydrukowania dokumentu, gromadził go a następnie drukował korzystajšc z programów obsługi drukarki pod Linuksem.
Konfiguracja tego programu polega na edycji pliku
/usr/local/atalk/etc/papd.conf. Składnia jest taka sama, jak
pliku /etc/printcap. Nazwa jaką nadasz drukarce zostanie
zarejestrowana za pomocą NBP, protokołu nazw sieci Appletalk.
Prosta konfiguracja mogłaby wyglądać następująco:
TricWriter:\
:pr=lp:op=cg:
Utworzona została drukarka o nazwie `TricWriter' udostępniona sieci
Appletalk. Zadania wysłane na tę drukarkę, będą drukowane na drukarce
`lp' (zdefiniowanej w pliku /etc/printcap) przy pomocy
programu lpd. Pozycja `op=cg' mówi, że operatorem tej
drukarki jest użytkownik Linuksa o nazwie `cg'.
Ok, w tej chwili powinieneś być już gotowy do sprawdzenia podstawowej konfiguracji. Pakiet netatalk dostarcza pliku rc.atalk, który powinień nadawać się dla ciebie. Powinieneś jedynie go uruchomić:
# /usr/local/atalk/etc/rc.atalk
Wszystko powinno się uruchomić i działać poprawnie. Nie powinieneś zobaczyć, żadnych komunikatów o błędach, lecz jedynie komunikaty wysłane na konsole informujące o zakończeniu kolejnych etapów uruchamiania oprogogramowania.
Aby sprawdzić, czy oprogramowanie pracuje poprawnie, połącz sieć z jednym z twoich komputerów Apple, rozwiń menu główne, wybierz Chooser, kliknij na AppleShare i powinieneś zobaczyć tam swojego Linuksa.
rc.inet1.
.AppleDesktop i Network Trash
Folder. Następnie dla każdego katalogu, do którego sięgniesz
utworzy w nim .AppleDouble aby mieć gdzie przechowywać
'resource forks' itp. Dlatego pomyśl dwa razy, zanim wyeksportujesz
/, później spędzisz wiele miłych chwil sprzątając po nim.
/proc/net.
Więcej szczegółowej informacji w jaki sposób skonfigurować Appletalk dla Linuksa znajdziesz w Linux Netatak-HOWTO : thehamptons.com.
Projekt obsługi Asynchronous Transfer Mode pod Linuksem jest prowadzony
przez Wernera Almesbergera
<werner.almesberger@lrc.di.epfl.ch>.
Aktualne informacje na ten temat można znaleźć tutaj:
lrcwww.epfl.ch.
AF_AX25)Urządzenia AX.25 w jądrze wersji 2.0.* to `sl0', `sl1',
itd. w 2.1.* są to `ax0', `ax1', itd.
Opcje konfiguracji jądra:
Networking options --->
[*] Amateur Radio AX.25 Level 2
Protokoły AX25, Netrom i Rose są opisane w AX25-HOWTO. Stosowane są przez krótkofalowców w eksperymentach z przesyłaniem pakietów drogą radiową.
Większość pracy związanej z udostępnieniem tej funkcji pod Linuksem
wykonał Jonathon Naylor, jsn@cs.not.ac.uk.
W chwili obecnej prowadzone są prace nad obsługą sieci DECNet. Powinna
się pojawić w późnych wersjach jądra serii 2.1.x.
Urządzenie EQL nosi nazwę `eql'. W standtardowej wersji jądra
możesz mieć w komputerze tylko jedno urządzenie EQL. EQL umożliwia
wykorzystanie kilku połączeń point-to-point (np. PPP, SLIP, plip) jako
pojedynczego łącza logicznego przenoszącego ruch tcp/ip. Często taniej
jest skorzystać z kilku linii o niższej prędkości niż z jednej linii o
wysokiej prędkości.
Opcje konfiguracji jądra:
Network device support --->
[*] Network device support
<*> EQL (serial line load balancing) support
Obsługa tego mechanizmu wymaga, aby drugi koniec połączenia również obsługiwał EQL. Linux, Livingstone Portmasters i nowsze serwery dostępowe udostępniają tę usługę.
Aby skonfigurować EQL będziesz potrzebować odpowiednich narzędzi, dostępnych z: sunsite.unc.edu.
Sama konfiguracja jest całkiem prosta. Rozpoczyna się od skonfigurowania interfejsu eql. Jest to taki samo urządzenie, jak każde inne urządzenie sieciowe. Konfiguracja adresu IP i wielkości mtu odbywa się tak samo za pomocą programu ifconfig:
ifconfig eql 192.168.10.1 mtu 1006
route add default eql
Następnie musisz ręcznie zainicjować każdą w linii, którą będziesz używał. Sposób inicjacji połączenia będzie zależał od rodzaju tej linii, więcej informacji na ten temat znajdziesz w odpowiednim podrozdziale.
Na koniec potrzebujesz skojarzyć połączenie przez port szeregowy z urządzenie EQL, nazywa się to `enslaving' i dokonuje się za pomocą polecenia eql_enslave:
eql_enslave eql sl0 28800
eql_enslave eql ppp0 14400
Parametr `szacowana prędkość' (estimated speed), który podajesz w poleceniu eql_slave nie ma bezpośredniego wpływu na działanie systemu. Jest wykorzystywany przez sterownik EQL do określenia stopnia podziału datagramów które powinny być otrzymywane przez urządzenie, możesz w ten sposób dokładnie dopasować równomierne obciążenie wszystlich linii.
W celu odłączenia linii od urządzenia EQL stosuje się polecnie eql_amancipate:
eql_emancipate eql sl0
Budowa tablicy trasowania odbywa się w taki sam sposób, jak w
przypadku zwykłego połączenia point-to-point, za wyjątkiem tego, że
wszystkie trasy zamiast do urządzeń ppp*, sl* powinny się odnosić do
urządzenia eql. Zwykle polecenia wyglądają mniej więcej tak:
route add default eql0
Sterownik EQL został opracowany przez Simona Janesa, simon@ncm.com.
Urządzenia kart ethernetowych noszą nazwy `eth0', `eth1',
`eth2' itd. Pierwsza karta wykryta przez jądro otrzymuje nazwę
`eth0', a reszta kolejne nazwy w miarę rozpoznawania kart przez system.
Jeśli chcesz się nauczyć, jak pracują karty ethernetowe pod Linuksem, przeczytaj Ethernet-HOWTO.
Kiedy jądro poprawnie rozpoznaje posiadane przez ciebie karty ethernetowe, ich dalsza konfiguracja jest prosta.
Zwykle wystarczą takie polecenia:
# ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up
# route add 192.168.0.0 netmask 255.255.255.0 eth0
Większość sterowników kart ethernetowych została opracowana przez
Donalda Beckera becker@CESDIS.gsfc.nasa.gov.
Urządzenia standardu FDDI noszą nazwy `fddi0', `fddi1',
`fddi2' itd. Pierwsze urządzenie rozpoznane przez jądro otrzymuje
nazwę `fddi0', a pozostałe kolejne nazwy w miarę ich
rozpoznawania przez system.
Sterownik kart Digital Equipment Corporation FDDI EISA o PCI został
opracowany przez
Lawrencea V. Stefaniego, stefani@lkg.dec.com.
Opcje konfiguracji jądra:
Network device support --->
[*] FDDI driver support
[*] Digital DEFEA and DEFPA adapter support
Kiedy jądro poprawnie rozpoznaje posiadane przez ciebie karty, konfiguracja interfejsu FDDI jest niemal identyczna, jak inicjalizacja kart ethernetowych. Po prostu jako argument programów ifconfig i route podajesz jedynie nazwę odpowiedniego urządzenia FDDI.
Istnieją dwa rodzaje urządzeń standardu Frame Relay w jądrze Linuksa,
DLCI o nazwach `dlci00', `dlci01' itd. oraz FRAD o nazwach
`sdla0', `sdla1' itd.
Frame Relay jest nową technologią sieciową, przeznaczoną przede wszystkim dla ruchu ruchu o nieciągłej, przerywanej naturze. Do sieci Frame Relay podłącza się za pomocą urządzenia Frame Relay Access Device (FRAD). Frame Realy pod Linuksem obsługuje przesyłanie pakietów IP zgodnie z opisem przedstawionym w RFC-1490.
Opcje konfiguracji jądra:
Network device support --->
<*> Frame relay DLCI support (EXPERIMENTAL)
(24) Max open DLCI
(8) Max DLCI per device
<*> SDLA (Sangoma S502/S508) support
Obsługa protokołu Frame Relay, oraz niezbędne do tego narzędzia
zostały napisane przez Mikea McLagana, mike.mclagan@linux.org.
W chwili obecnej, jedynym obsługiwanym urządzeniem FRAD jest
Sangoma Technologies
S502A, S502E and S508.
Po prawidłowym skompilowaniu jądra, do skonfigurowania urządzeń FRAD i DLCI są niezbędne narzędzia konfiguracyjne: ftp.invlogic.com. Komplilacja i instalacja narzędzi jest prosta, niestety brak głównego pliku Makefile, powoduje, że trzeba to zrobić ręcznie.
# cd /usr/src
# tar xvfz .../frad-0.15.tgz
# cd frad-0.15
# for i in common dlci frad; do cd $i; make clean; make; cd ..; done
# mkdir /etc/frad
# install -m 644 -o root -g root bin/*.sfm /etc/frad
# install -m 700 -o root -g root frad/fradcfg /sbin
# install -m 700 -o root -g root dlci/dlcicfg /sbin
Po zainstalowaniu narzędzi, trzeba utworzyć plik
/etc/frad/router.conf. Możesz skorzystać z poniższego wzoru,
który jest zmodyfikowanym plikiem przykładowym:
# /etc/frad/router.conf
# Jest to wzorzec pliku konfiguracyjnego urządzeń Frame Relay
# Zawiera wszystkie możliwe opcje. Wartości domyślne są ustawione
# na podstawie kodu sterowników karty Sangoma S502A dla MSDOSu.
#
# Znak '#' w dowolnym miejscu wiersza rozpoczyna komentarz
# Puste miejsca są ignorowane (możesz tabulatorem ładnie sformatować
# cały plik
# Nieznane pozycje [] i słowa kluczowe są ignorowane
#
[Devices]
Count=1 # Liczba urządzeń do skonfigurowania
Dev_1=sdla0 # nazwa urządzenia
#Dev_2=sdla1 # nazwa urządzenia
# Podane tutaj parametry mają zastosowanie do wszystkich urządzeń,
# lecz dla każdego urządzenia indywidualnie może być podana inna wartość
#
Access=CPE
Clock=Internal
KBaud=64
Flags=TX
#
# MTU=1500 # Maksymalna długość ramki IFrame, domyślnie 4096
# T391=10 # T391 value 5 - 30, domyślnie 10
# T392=15 # T392 value 5 - 30, domyślnie 15
# N391=6 # N391 value 1 - 255, domyślnie 6
# N392=3 # N392 value 1 - 10, domyślnie 3
# N393=4 # N393 value 1 - 10, domyślnie 4
# Podane tutaj parametry mają zastosowanie do wszystkich urządzeń
# CIRfwd=16 # CIR forward 1 - 64
# Bc_fwd=16 # Bc forward 1 - 512
# Be_fwd=0 # Be forward 0 - 511
# CIRbak=16 # CIR backward 1 - 64
# Bc_bak=16 # Bc backward 1 - 512
# Be_bak=0 # Be backward 0 - 511
#
#
# Konfiguracja poszczególnych urządzeń
#
#
#
# Pierwsze urządzenie - Sangoma S502E
#
[sdla0]
Type=Sangoma # Rodzaj urządzenia do skonfigurowania,
# rozpoznawana jest tylko SANGOMA
#
# Poniższe parametry są specyficzne dla typu Sangoma
#
# Rodzaj karty śangoma - S502A, S502E, S508
Board=S502E
#
# Nazwa firmowego oprogramowania testowego dla karty Sangoma
# Testware=/usr/src/frad-0.10/bin/sdla_tst.502
#
# Nazwa firmowego oprogramowania FR
# Firmware=/usr/src/frad-0.10/bin/frm_rel.502
#
Port=360 # Port uzywany przez tę kartę
Mem=C8 # Adres okna pamięci, A0-EE, zależny od karty
IRQ=5 # Numer przerwania IRQ , nie potrebny w przypadku S502A
DLCIs=1 # Liczba urządzeń DLCI przyłączonych do tego urządzenia
DLCI_1=16 # numer pierwszego urządzenia DLCI, 16 - 991
# DLCI_2=17
# DLCI_3=18
# DLCI_4=19
# DLCI_5=20
#
# Podane poniżej opcje mają zastosowanie tylko do tego urządzenia
# i zastępują wartościdomyślne podane wcześniej
#
# Access=CPE # CPE lub NODE, domyślnie CPE
# Flags=TXIgnore,RXIgnore,BufferFrames,DropAborted,Stats,MCI,AutoDLCI
# Clock=Internal # External lub Internal, domyślnie Internal
# Baud=128 # Określona prędkość (bodów) przyłączonych CSU/DSU
# MTU=2048 # Maksymalna długość ramki IFrame, domyślnie 4096
# T391=10 # T391 value 5 - 30, domyślnie 10
# T392=15 # T392 value 5 - 30, domyślnie 15
# N391=6 # N391 value 1 - 255, domyślnie 6
# N392=3 # N392 value 1 - 10, domyślnie 3
# N393=4 # N393 value 1 - 10, domyślnie 4
#
# Drugim urządzeniem jest zupełnie inna karta
#
# [sdla1]
# Type=ŚmiesznaKarta # Rodzaj konfigurowanego urządzenia
# Board= # Rodzaj karty Sangoma
# Key=Value # Parametry specyficzne dla tego urządzenia
#
# Domyślne parametry konfiguracyjne urządzeń DLCI
# Mogą zostać zastępione w konkretnych sekcjach konfiguracyjnych DCI
#
CIRfwd=64 # CIR forward 1 - 64
# Bc_fwd=16 # Bc forward 1 - 512
# Be_fwd=0 # Be forward 0 - 511
# CIRbak=16 # CIR backward 1 - 64
# Bc_bak=16 # Bc backward 1 - 512
# Be_bak=0 # Be backward 0 - 511
#
# Konfiguracja DLCI
# Wszystkie parametry są opcjonalne. Nazewnictwo:
# [DLCI_D<devicenum>_<DLCI_Num>]
#
[DLCI_D1_16]
# IP=
# Net=
# Mask=
# Flags defined by Sangoma: TXIgnore,RXIgnore,BufferFrames
# DLCIFlags=TXIgnore,RXIgnore,BufferFrames
# CIRfwd=64
# Bc_fwd=512
# Be_fwd=0
# CIRbak=64
# Bc_bak=512
# Be_bak=0
[DLCI_D2_16]
# IP=
# Net=
# Mask=
# Flags defined by Sangoma: TXIgnore,RXIgnore,BufferFrames
# DLCIFlags=TXIgnore,RXIgnore,BufferFrames
# CIRfwd=16
# Bc_fwd=16
# Be_fwd=0
# CIRbak=16
# Bc_bak=16
# Be_bak=0
Po stworzeniu pliku /etc/frad/router.conf pozostało jedynie
skonfigurować rzeczywiste urządzenia. Jest to tylko troszkę
sprytniejsze niż konfigurowanie zwykłych urządzeń sieciowych. Musisz
pamiętać aby przed uruchomieniem urządzeń DLCI uruchomić wpierw
urządzenie FRAD.
# Konfiguracja karty FRAD i parametrów DLCI
/sbin/fradcfg /etc/frad/router.conf || exit 1
/sbin/dlcicfg file /etc/frad/router.conf
#
# Podnoszenie urządzenia FRAD
ifconfig sdla0 up
#
# Konfiguracja interfejsów DLCI i trasowania
ifconfig dlci00 192.168.10.1 pointopoint 192.168.10.2 up
route add 192.168.10.0 netmask 255.255.255.0 dlci00
#
ifconfig dlci01 192.168.11.1 pointopoint 192.168.11.2 up
route add 192.168.11.0 netmask 255.255.255.0 dlci00
#
route add default dev dlci00
#
Cechy jądra Linuksa dotyczące zliczania ruchu umożliwiają gromadzenie i analizę informacji na temat wykorzystania sieci. Gromadzone dane zawierają liczbę pakietów, liczbę odpowiadających im bajtów przesłanych od ostatniego zerowania liczników. Możesz zliczać ruch na wiele różnych sposobów, odpowiednio grupując ruch tak aby gromadzone informacje zawierały odpowiednie, interesujące cię statystyki.
Opcje konfiguracji jądra:
Networking options --->
[*] IP: accounting
Po skompilowaniu i zainstalowaniu nowego jądra, musisz skorzystać z narzędzia o nazwie ipfwadm, służącego do wprowadzania i zmiany reguł zliczania ruchu. Istnieje wiele reguł zliczania ruchu, które mógłbyś zastosować. Wybrałem kilka prostych, które mogą być użyteczne, zapoznaj się ze stroną podręcznika dotyczącą programu ipfwadm.
Scenariusz: Posiadasz sieć ethernetową przyłączoną do Internetu za pomocą połączenia PPP. Na segmencie ethernetowym znajduje się komputer oferujący szereg usług. Jesteś zainteresowany jaki ruch jest generowany przez telnet, rlogin, ftp i www.
Możesz skorzystać z poniższego zestawu poleceń:
#
# Usuń istniejące reguły zliczania ruchu
ipfwadm -A -f
#
# dodaj reguły dotyczące lokalnego segmentu ethernetowego
ipfwadm -A in -a -P tcp -D 44.136.8.96/29 20
ipfwadm -A out -a -P tcp -S 44.136.8.96/29 20
ipfwadm -A in -a -P tcp -D 44.136.8.96/29 23
ipfwadm -A out -a -P tcp -S 44.136.8.96/29 23
ipfwadm -A in -a -P tcp -D 44.136.8.96/29 80
ipfwadm -A out -a -P tcp -S 44.136.8.96/29 80
ipfwadm -A in -a -P tcp -D 44.136.8.96/29 513
ipfwadm -A out -a -P tcp -S 44.136.8.96/29 513
ipfwadm -A in -a -P tcp -D 44.136.8.96/29
ipfwadm -A out -a -P tcp -D 44.136.8.96/29
ipfwadm -A in -a -P udp -D 44.136.8.96/29
ipfwadm -A out -a -P udp -D 44.136.8.96/29
ipfwadm -A in -a -P icmp -D 44.136.8.96/29
ipfwadm -A out -a -P icmp -D 44.136.8.96/29
#
# Reguły domyślne
ipfwadm -A in -a -P tcp -D 0/0 20
ipfwadm -A out -a -P tcp -S 0/0 20
ipfwadm -A in -a -P tcp -D 0/0 23
ipfwadm -A out -a -P tcp -S 0/0 23
ipfwadm -A in -a -P tcp -D 0/0 80
ipfwadm -A out -a -P tcp -S 0/0 80
ipfwadm -A in -a -P tcp -D 0/0 513
ipfwadm -A out -a -P tcp -S 0/0 513
ipfwadm -A in -a -P tcp -D 0/0
ipfwadm -A out -a -P tcp -D 0/0
ipfwadm -A in -a -P udp -D 0/0
ipfwadm -A out -a -P udp -D 0/0
ipfwadm -A in -a -P icmp -D 0/0
ipfwadm -A out -a -P icmp -D 0/0
#
# Wyświetl listę obowiązujących reguł
ipfwadm -A -l -n
#
Ostatnie polecenie wyświetla listę reguł zliczania ruchu wraz ze zgromadzonymi informacjami.
Analizując wielkość ruchu IP należy pamiętać, że będzie zwiększany licznik każdej reguły, która pasuje do analizowanego pakietu, aby uzyskać wyniki różnicowe, trzeba wykonać proste działania matematyczne. Gdybym chciał znać liczbę przesłanych bajtów poza usługami telnet, rlogin, ftp i www musiałbym od wielkości ruchu dla wszystkich portów odjąć zmierzone wielkości dla poszczególnych reguł.
# ipfwadm -A -l -n
IP accounting rules
pkts bytes dir prot source destination ports
0 0 in tcp 0.0.0.0/0 44.136.8.96/29 * -> 20
0 0 out tcp 44.136.8.96/29 0.0.0.0/0 20 -> *
0 0 in tcp 0.0.0.0/0 44.136.8.96/29 * -> 23
0 0 out tcp 44.136.8.96/29 0.0.0.0/0 23 -> *
10 1166 in tcp 0.0.0.0/0 44.136.8.96/29 * -> 80
10 572 out tcp 44.136.8.96/29 0.0.0.0/0 80 -> *
242 9777 in tcp 0.0.0.0/0 44.136.8.96/29 * -> 513
220 18198 out tcp 44.136.8.96/29 0.0.0.0/0 513 -> *
252 10943 in tcp 0.0.0.0/0 44.136.8.96/29 * -> *
231 18831 out tcp 0.0.0.0/0 44.136.8.96/29 * -> *
0 0 in udp 0.0.0.0/0 44.136.8.96/29 * -> *
0 0 out udp 0.0.0.0/0 44.136.8.96/29 * -> *
0 0 in icmp 0.0.0.0/0 44.136.8.96/29 *
0 0 out icmp 0.0.0.0/0 44.136.8.96/29 *
0 0 in tcp 0.0.0.0/0 0.0.0.0/0 * -> 20
0 0 out tcp 0.0.0.0/0 0.0.0.0/0 20 -> *
0 0 in tcp 0.0.0.0/0 0.0.0.0/0 * -> 23
0 0 out tcp 0.0.0.0/0 0.0.0.0/0 23 -> *
10 1166 in tcp 0.0.0.0/0 0.0.0.0/0 * -> 80
10 572 out tcp 0.0.0.0/0 0.0.0.0/0 80 -> *
243 9817 in tcp 0.0.0.0/0 0.0.0.0/0 * -> 513
221 18259 out tcp 0.0.0.0/0 0.0.0.0/0 513 -> *
253 10983 in tcp 0.0.0.0/0 0.0.0.0/0 * -> *
231 18831 out tcp 0.0.0.0/0 0.0.0.0/0 * -> *
0 0 in udp 0.0.0.0/0 0.0.0.0/0 * -> *
0 0 out udp 0.0.0.0/0 0.0.0.0/0 * -> *
0 0 in icmp 0.0.0.0/0 0.0.0.0/0 *
0 0 out icmp 0.0.0.0/0 0.0.0.0/0 *
#
Istnieją programy sieciowe, które wymagają aby jedno urządzenie sieciowe posiadało wiele numerów IP. Dostawcy internetu często korzystają z tej cechy do tworzenia wirtualnych serwerów WWW i ftp oferując klientowi utworzenie serwera o innym adresie niż ich własny.
Opcje konfiguracji jądra:
Networking options --->
....
[*] Network aliasing
....
<*> IP: aliasing support
Po skompilowaniu i zainstalowaniu jądra z obsługą IP_Alias,
konfiguracja jest bardzo prosta. Aliasy są dodawane do wirtualnych
urządzeń sieciowych stowarzyszonych z istniejącymu urządzeniami
sieciowymi. Stosuje się prostą konwencję nazywania tych urządzeń, a
mianowicie <devname>:<numer urządzenia wirtualnego>, np. eth0:0,
ppp0:10 etc.
Załóżmy, że posiadasz sieć ethernetową, która obsługuje jednocześnie dwie różne podsieci IP. Chciałbyś aby twój komputer miał bezpośredni dostęp do obu tych podsieci:
#
# ifconfig eth0:0 192.168.1.1 netmask 255.255.255.0 up
# route add -net 192.168.1.0 netmask 255.255.255.0 eth0:0
#
# ifconfig eth0:1 192.168.10.1 netmask 255.255.255.0 up
# route add -net 192.168.10.0 netmask 255.255.255.0 eth0:0
#
Aby usunąć alias należy do jego nazwy dołączyć znak `-' podczas
następnego odwołania się do niego, np. tak:
# ifconfig eth0:0- 0
Wraz z usunięciem tego aliasu z tabeli trasowań zostaną usunięte wrzystkie trasy korzystające z tego aliasu.
Filtrowanie pakiet i zasady przy tym obowiązujące są dokładniej omówione w Firewall-HOWTO. IP Firewalling pozwala na zabezpieczenia twojego komputera przed nieuprawnionym dostępem przez sieć, wykorzystując w tym celu filtrowanie pakietów. Istnieją trzy różne klasy reguł: filtrowanie pakietów przychodzących, filtrowanie pakietów wychodzących i filtrowanie pakietów przekazywanych dalej (forwarding). Reguły filtrowania pakietów przychodzących dotyczą pakietów otrzymanych przez urządzenie sieciowe. Reguły filtrowania pakietów wychodzących, dotyczą pakietów tuż przed wysłaniem przez urządzenie sieciowe. Reguły fitrowania pakietów przesyłanych dotyczą pakietów, które zostały przez nasz komputer odebrane, lecz nie jest on ich ostatecznym adresatem, tzn. pakiety, które będą poddane trasowaniu.
Opcje konfiguracji jądra:
Networking options --->
[*] Network firewalls
....
[*] IP: forwarding/gatewaying
....
[*] IP: firewalling
[ ] IP: firewall packet logging
Wprowadzanie reguł filtrowania pakietów IP wykonuje się za pomocą programu ipfwadm. Jak wspominałem wcześniej nie jestem ekspertem od zabezpieczeń sieci komputerowych, więc choć prezentuję przykład, z którego możesz skorzystać, powinieneś samodzielnie zapoznać się z tym tematem i opracować własne reguły filtrowania pakietów, oczywiście tylko wtedy, gdy jest dla ciebie ważne bezpieczeństwo twojego systemu.
Prawdopodobnie najczęstszym wykorzystaniem filtrowania pakietów jest sytuacja, gdy twój Linux pracuje jako router i filtr pakietów chroniący lokalną sieć przed nieuprawnionym dostępem z sieci zewnętrznej.
Przedstawiona poniżej konfiguracja jest oparta na sugestiach
przesłanych przez Arnta Gulbrandsena, <agulbra@troll.no>.
Przykład opisuje konfigurację reguł filtra pakietów praującego na Linuksie, wykorzystywanym w sposób przedstawiony na poniższym schemacie:
- -
\ | 172.16.37.0
\ | /255.255.255.0
\ --------- |
| 172.16.174.30 | Linux | |
NET =================| f/w |------| ..37.19
| PPP | router| | --------
/ --------- |--| Mail |
/ | | /DNS |
/ | --------
- -
Poniższe polecenia zwykle są umieszczane w jednym z plików rc,
aby były automatycznie wykonywane przy każdym uruchomieniu
systemu. Aby maksymalnie zwiększyć bezpieczeństwo systemu, powinny być
wykonywane tuż po skonfigurowaniu urządzeń sieciowych, lecz tuż przed
ich włączeniem. W ten sposób niwelujemy chwilę słąbości związaną z
restartem komputera.
#!/bin/sh
# Oczyść tabelę reguł przesyłania pakietów (forwarding)
# Zmień domyślną polityką na 'accept' (akceptuj):
#
/sbin/ipfwadm -F -f
/sbin/ipfwadm -F -p accept
#
# .. i dla ruchu przychodzącego (Incoming)
#
/sbin/ipfwadm -I -f
/sbin/ipfwadm -I -p accept
# Po pierwsze zabezpiecz interfejs PPP
# Chętnie zamiast '-a deny' wstawiłbym '-a reject -y', lecz wtedy nie
# byłoby możliwe rozpoczynanie połączeń wychodzących przez ten
# interfejs. Parametr -o pozwala rejestrować odrzucane datagramy.
# Kosztem przestrzeni dyskowej zajętej przez informacje sysloga
# uzyskujemy informacje na temat niechcianego ruchu IP.
#
/sbin/ipfwadm -I -a reject -y -o -P tcp -S 0/0 -D 172.16.174.30
# Odrzuć pewnego rodzaju pakiety:
# Nic nie powinno przychodzić z adresów multicast/anycast/broadcast
#
/sbin/ipfwadm -F -a deny -o -S 224.0/3 -D 172.16.37.0/24
#
# nic nie powinno przychodzić z adresu pętli zwrotnej
#
/sbin/ipfwadm -F -a deny -o -S 127.0/8 -D 172.16.37.0/24
# Zezwól na połączenia SMTP i DNS, lecz jedynie do serwera Mail/DNS
#
/sbin/ipfwadm -F -a accept -P tcp -S 0/0 -D 172.16.37.19 25 53
#
# DNS korzysta z UDP i TCP, musisz pozwolić na oba rodzaje połączeń
#
/sbin/ipfwadm -F -a accept -P udp -S 0/0 -D 172.16.37.19 53
#
# Nie pozwalamy na "odpowiedzi" przychodzące do tak niebezpiecznych
# portów jak NFS czy rozszerzenie NFSu Larryego McVoya. Jeśli
# korzystasz ze squida dopisz tutaj jego port
#
/sbin/ipfwadm -F -a deny -o -P udp -S 0/0 53 \
-D 172.16.37.0/24 2049 2050
# odpowiedzi do innych portów są OK
#
/sbin/ipfwadm -F -a accept -P udp -S 0/0 53 \
-D 172.16.37.0/24 53 1024:65535
# Odrzuć połączenia przychodzące do identd
# korzystamy tutaj z 'reject', aby łączący się komputer wiedział, że
# nie ma co próbować nawiązać połączenia. W przeciwnym wypadku narazimy
# się na opóźnienia wywołane działaniem programu ident po drugiej
# stronie nawiązywanego przez nas połączenia
#
/sbin/ipfwadm -F -a reject -o -P tcp -S 0/0 -D 172.16.37.0/24 113
# Pozwól na popularne usługi pochodzące z sieci 192.168.64 i 192.168.65
#
/sbin/ipfwadm -F -a accept -P tcp -S 192.168.64.0/23 \
-D 172.16.37.0/24 20:23
# akceptuj i przesyłaj wszystko co wzięło się z sieci lokalnej
#
/sbin/ipfwadm -F -a accept -P tcp -S 172.16.37.0/24 -D 0/0
# zabroń większości innych połączeń TCP i rejestruj je
# (jeśli masz kłopot z działaniem ftp dodaj 1:1023)
#
/sbin/ipfwadm -F -a deny -o -y -P tcp -S 0/0 -D 172.16.37.0/24
# ... for UDP too
#
/sbin/ipfwadm -F -a deny -o -P udp -S 0/0 -D 172.16.37.0/24
Dobra konfiguracja filtra jest niemal sztuką. Powyższy przykład powinien być rozsądnym punktem startowym. Strona podręcznika dotycząca ipfwadm oferuje dodatkowe informacje na ten temat. Jeśli planujesz założenie filtra upewnij się, że zebrałeś wokół maksymalnie wiele porad ze źródeł, którym możesz ufać i poproś kogoś aby sprawdził działanie twojego filtra z zewnątrz.
AF_IPX)Protokół IPX jest powszechnie wykorzystywany w lokalnych sieciach Novell Netware(tm). Linux potrafi obsługiwać ten protokół i może zostać skonfigurowany do pracy jako końcówka sieci Novell Netware(tm) lub jako router pakietów IPX.
Opcje konfiguracji jądra:
Networking options --->
[*] The IPX protocol
[ ] Full internal IPX network
Protokół IPX i standard NCPFS są dokładniej omówione w IPX-HOWTO.
Właśnie gdy zaczęło ci się wydawać, że zaczynasz rozumieć sieci IP, zasady się zmieniły! IPv6 jest skrótem oznaczającym wersję 6 protokołu IP. IPv6 został opracowany w celu rozwiania obaw społeczności internetowej związanych z wyczerpywaniem się wolnych adresów IP. Adresy protokołu IPv6 są budowane na 32 bajtach (128 bitów), pozwoli to na lepsze zarządzanie sieciami, niż ma to obecnie.
Jądra Linuksa serii 2.1.* już posiadają działającą, choć niepełną
implementacje protokołu IPv6.
Jeśli chcesz poeksperymentować z tą nową generacją technologii internetowych, lub jest ci to do czegoś potrzebne, powinieneś przeczytać IPv6-FAQ dostępny pod adresem: www.terra.net.
Sieć cyfrowa zintegrowanych usług (Integrated Services Digital Network - ISDN) składa się z serii standardów definujących cyfrową sieć pakietową ogólnego przeznaczenia. ISND jest zwykle dostarczana łączami o wysokiej prędkości, podzielonymi na wiele kanałów. Istnieją dwa różne rodzaje kanałów, kanały typu 'B' rzeczywiście przenoszące dane użytkownika, oraz kanał typu 'D' wykorzystywany do przesyłania informacji sterującej do centrali ISDN w celu zestawiania połączeń i innych funkcji. Dla przykładu w Australii ISDN może być dostarczony łączem 2Mbps podzielonym na 30 kanałów B po 64kbps każdy i jeden kanał D. W tej samej chwili może być wykorzystywana dowolna liczba kabałów w dowolnej kombinacji. Jest możliwe np, zestawienie 30 różnych połączeń z 30toma różnymi punktami docelowymi, każde po 64kbps lub 15 połączeń z 15toma różnymi punktami docelowymi, każde po 128 kbps (jedno połączenie wykorzystuje dwa kanały), lub zestawienie małej liczby połączeń pozostawiając pozostałą część pasma niewykorzytaną. Pierwotną przyczyną powstania ISDN, było umożliwienie firmom telekomunikacyjnym udostępniania jednej usługi przesyłania danych, która mogłaby być wykorzystywana dla telefonii (wykorzystują cyfrowe przetworniki głosu) lub do przesyłania danych bez konieczności wykonywania przez klienta jakichkolwiek zmian.
Istnieje kilka różnych metod podłączenia komputera do sieci ISDN. Jedną z nich jest wykorzystanie urządzenia o nazwie `Terminal Adaptor', które włącza się do końcówki sieciowej (Network Terminating Unit), zainstalowanej przez twojego dostawcę usługi ISDN, udostępniającego z drugiej strony kilka portów szeregowych. Jeden z tych portów służy do wprowadzania poleceń w celu skonfigurowania i nawiązania połączeń, pozostałe są podłączone do urządzeń sieciowych, które będą bezpośrednio korzystały z zestawionych kanałów transmisji danych. W takiej konfiguracji Linux będzie pracował poprawnie bez konieczności wykonywania jakichkolwiek modyfikacji. Korzystamy z portu szeregowego urządzenia 'Terminal Adaptor' w taki sam sposób, jak ze zwykłego portu szeregowego. Innym sposobem przyłączenia Linuksa do sieci ISDN, w czym wspomagać nas będzie kod obsługi ISDN zawarty w jądrze Linuksa jest zainstalowanie karty ISDN bezpośrednio w Linuksie. Wtedy moduł obsługi ISDN w jądrze Linuksa jest odpowiedzialny za obsługę urządzenia, protokołów i zestawianie połączeń.
Opcje konfiguracji jądra:
ISDN subsystem --->
<*> ISDN support
[ ] Support synchronous PPP
[ ] Support audio via ISDN
< > ICN 2B and 4B support
< > PCBIT-D support
< > Teles/NICCY1016PC/Creatix support
Implementacja ISDN w jądrze Linuksa rozpoznaje szereg różnych typów wewnętrznych kart ISDN. Ich lista jest przedstawiona podczas konfiguracji jądra:
Część z tych kart wymaga załadowania do ich wewnętrznej pamięci odpowiedniego oprogramowania. Służy do tego oddzielne narzędzie.
Szczegółowy opis jak skonfigurować obsługę ISDN pod Linuksem jest
dostępny w katalogu
/usr/src/linux/Documentation/isdn/. Istnieje również FAQ
poświęcony tej tematyce: isdn4linux jest dostępny pod adresem
www.lrz-muenchen.de.
(po połączeniu, aby otrzymać wersję angielską, musisz kliknąć na
angielskiej fladze)
Uwaga na temat PPP. Rodzina protokołów PPP pracuje na łączach szeregowych synchronicznych lub asynchronicznych. Rozpowszechniany powszechnie program `pppd' obsługuje jedynie tryb asynchroniczny. Jeśli zamierzasz uruchamiać połączenie PPP wykorzystująć jako nośnik usługę ISDN, potrzebujesz specjalną, zmodyfikowaną wersję tego programu. Wskazówki, gdzie ją można znaleźć znajdziesz w dokumentacji, o której wspomnieliśmy wcześniej.
Wielu ludzi do połączenia z Internetem ma zwykłe konto u dostawcy Internetu. Niemal każdy korzystający z takiej konfiguracji otrzymuje od swojego dostawcy Internetu jeden adres IP. Zwykle jest to wystarczające na podłączenie do Internetu tylko jednego komputera. Maskarada adresu IP jest sprytną sztuczką umożliwiającą jednoczesne korzystanie z tego jednego adresu IP przez wiele komputerów, sprawiając, że dla świata zewnętrzengo komputery te wyglądają tak, jak gdyby były komputerem obsługujący połączenie modemowe z Internetem. Istnieje mała niedogodność, a mianowicie w większości przypadków maskarada adresów IP działa tylko w jedną stronę, to znaczy komputery, które z niej korzystają mogą nawiązywać połączenia z komputerami w sieci Internet, lecz same nie mogą otrzymywać połączeń z zewnątrz. To oznacza, że niektóre usługi sieciowe np. talk nie działąją, a inne np. ftp muszą być skonfigurowane do pracy w trybie pasywnym (PASV). Na szczęscie większość usług internetowych takich, jak telnet, WWW i irc działa bardzo dobrze.
Opcje konfiguracji jądra:
Code maturity level options --->
[*] Prompt for development and/or incomplete code/drivers
Networking options --->
[*] Network firewalls
....
[*] TCP/IP networking
[*] IP: forwarding/gatewaying
....
[*] IP: masquerading (EXPERIMENTAL)
Wpierw twój Linux musi obsługiwać połączenie z internetem (zwykle przez SLIP lub PPP) w taki sam sposób, jak gdyby byłjedynym komputerme, który będzie z tego połączenia korzystał. Następnie należy skonfigurować dodatkowe urządzenie sieciowe, zwykle kartę sieci ethernet, zwykle korzystając z puli numerów IP zarezerwowanych dla sieci prywatnych, których nie wykorzystuje się w sieci Internet. Komputery korzystające z maskarady adresów IP bedą właśnie na tej sieci. Każdy z nich otrzyma adres IP i zostanie skonfigurowany w ten sposób, że jego gatewayem (routerem) stanie się interfejs karty ethernetowej naszego Linuksa.
Typowa konfiguracja wygląda mnie więcej tak:
- -
\ | 192.168.1.0
\ | /255.255.255.0
\ --------- |
| | Linux | .1.1 |
NET =================| masq |------|
| PPP/slip | router| | --------
/ --------- |--| host |
/ | | |
/ | --------
- -
Najważniejsze polecenia konfiguracyjne dla tego przykładu:
# Trasa do sieci na segmencie ethernetowym
route add 192.168.1.0 netmask 255.255.255.0 eth0
#
# Domyślna trasa do Internetu
route add default ppp0
#
# Wszystkie komputery w sieci 192.168.1/24 korzystają z maskarady
# adresów IP
ipfwadm -F -a m -S 192.168.1.0/24 -D 0.0.0.0/0
Więcej informacji na temat maskarady adresów IP pod Linuksem znajdziesz tutaj: IP Masquerade Resource Page, lub w dokumencie IP-Masquerade-HOWTO.
Przezroczyste proxy IP jest udogodnieniem, które umożliwia przekierowanie połączeń do usług lub serwerów na innym komputerze do usług lub serwerów znajdujących się na tym komputerze. Zwykle jest to użyteczne w sytuacji gdy twój Linux pracuje jako router i jednocześnie pracuje jako serwer proxy. W takim przypadku możesz przekierować do lokalnego serwera proxy wszystkie połączenia do serwerów proxy znajdujących się za routerem.
Opcje konfiguracji jądra:
Code maturity level options --->
[*] Prompt for development and/or incomplete code/drivers
Networking options --->
[*] Network firewalls
....
[*] TCP/IP networking
....
[*] IP: firewalling
....
[*] IP: transparent proxy support (EXPERIMENTAL)
Konfigurację przezroczystego proxy wykonuje się programem ipfwadm.
Prosty przykład, który może być użyteczny:
ipfwadm -I -a accept -D 0/0 80 -r 8080
W powyższym przykładzie przekierowujemy wszystkie połączenia skierowane na port 80 (www) dowolnego komputera, na połączenia do portu 8080 naszego Linuksa. Ten sposób mógłby być użyty (gdyby był poprawny - bo nie jest ...pp) do przekierowania całego ruchu www do lokalnego serwera proxy.
Termin 'IP mobility' opisuje zdolność komputera do przemieszczania swojego punktu styku z internetem z jednej sieci do innej sieci bez konieczności zmiany własnego adresu IP i bez utraty nawiązanych połączeń. Zwykle gdy komputer zmienia swój punkt przyłączenia do sieci, musi również zmienić adres IP. Udogodnienie IP Mobility przezwycięża tę niedogodność przydzielając komputerowi jeden, ustalony adres IP i wykorzystuje tunelowanie (IP tunneling) i automatyczne trasowanie zapewniając, że datagramy skierowane do tego komputera są kierowane do adresu IP, z którego korzysta.
Istnieje projekt mający zapewnić powstanie kompletu narzędzi dla udogodnienia 'IP mobility' pd Linuksem. Aktualny stan prac można poznać zaglądając na stronę: Linux Mobile IP Home Page.
IP Multicast pozwala na jednoczesne trasowanie datagramów do wielu różnych komputerów znajdujących się w zupełnie innych podsieciach. Korzysta się z tego mechanizmu rozpowszechniania w internecie audio i video lub innych nowoczesnych usług.
Opcje konfiguracji jądra:
Networking options --->
[*] TCP/IP networking
....
[*] IP: multicasting
Wymagany jest minimalny zestaw narzędzi i mała rekonfiguracja sieci. Dobrym źródłem informacji na temat istalacji i konfiguracji tego udogodnienia pod Linuksem jest strona www.teksouth.com.
AF_NETROM)Urządzenia NetRom noszą nazwy `nr0', `nr1', itd.
Opcje konfiguracji jądra:
Networking options --->
[*] Amateur Radio AX.25 Level 2
[*] Amateur Radio NET/ROM
Protokoły AX25, NetRom i Rose są opisane w AX25-HOWTO. Są wykorzystywane głównie przez krótkofalowców (packet radio).
Wiekszość pracy w implementacji tych protokołów pod Linuksem wykonał
Jonathon Naylor, jsn@cs.not.ac.uk.
Urządzenia PLIP noszą nazwy `plip0', `plip1, itd. Pierwsze
konfigurowane urządzenie otrzymuje numer `0', a następne
otrzymują kolejne numery.
Opcje konfiguracji jądra:
Networking options --->
<*> PLIP (parallel port) support
plip (Parallel Line IP), jest podobny do SLIP, to znaczy zapewnia połączenie punkt-do-punktu (point-to-point) między dwoma komputerami, lecz wykorzystuje w tym celu porty równoległe komputera (zamiast portów szeregowych, jak to ma miejsce w przypadku protokołu SLIP). Ponieważ port równoległy umożliwia w jednej chwili transmisję więcej niż jednego bitu, wykorzystując interfejs plip możemy osiągnąć znacznie większe prędkośći transmisji, niż ma to miejsce w przypadku portu szeregowego. Co więcej, do plip może być wykorzystany nawet najprostszy rodzaj portu szeregowego, port drukarkowy, gdy do pełnego wykorzystania portów szeregowych konieczne jest zakupienie dosyć drogich układów UART 15550AFN.
Należy zwrócić uwagę, że niektóre laptopy używają układów, które nie będą poprawnie współpracować z PLIP, ponieważ nie zezwalają na przesyłanie pewnego rodzaju sygnałów, na których polega PLIP, a z których nie korzystają drukarki.
Interfejs plip pod Linuksem jest zgodny z Crynwyr Packet Driver PLIP, a to oznacza, że możesz przyłączyć do swojego Linuksa, komputer pracujący pod MSDOS, na którym działa oprogramowanie TCP/IP korzystające ze standardu 'packet drivera', korzystająe z sterownika plip.
Podczas kompilacji jądra jedyny plik, któremu warto się bliżej przyjrzeć
to /usr/src/linux/driver/net/CONFIG. Zawiera parametry
czasowe sterownika plip podane w milisekundach. Wartości
domyślne są prawdopodobnie poprawne w większości przypadków. Jeśli
twój komputer jest wyjątkowo wolny, możesz się zastanowić nad
zwiększeniem tych paramterów, ale na komputerze po drugiej stronie połączenia.
Sterownik przyjmuje następujące wartości domyślne parametrów:
urządzenie adres IRQ
we/wy
------ -------- -----
plip0 0x3BC 5
plip1 0x378 7
plip2 0x278 2 (9)
Jeśli parametry portów równoległych twojego komputera nie pasują do żadnej z przedstawionych powyżej kombinacji, jesteś w stanie zmienić przerwanie IRQ wykorzystywane przez port (za pomocą programu ifconfig). Pamiętaj aby włączyć w BIOSie korzystanie przez porty równoległe z przerwań IRQ, oczywiście o ile BIOS posiada taką opcję.
W celu skonfigurowania interfejsu plip musisz do plików rc
konfigurujących sieć dodać następujące polecenia:
#
# Przyłącz interfejs PLIP
#
# skonfiguruj pierwszy port równoległy jako urządzenie plip
/sbin/ifconfig plip0 IPA.IPA.IPA.IPA pointopoint IPR.IPR.IPR.IPR up
#
# End plip
Gdzie:
oznacza twój adres IP.
oznacza adres IP komputera zdalnego.
Parametr pointopoint ma tutaj takie samo znaczenie, co w przypadku protokołu SLIP, a mianowicie określa adres IP komputera po drugiej stronie połączenia.
Urządzenie plip niemal pod każdym względem możesz traktować tak samo jak urządenie slip, poza tym, że ani dip ani slattach nie muszą i nie mogą być wykorzystywane.
plip został opracowany w taki sposób, aby wykorzystywał kable o takim samym układzie, co kable, z których korzystają inne popularne programy do transferu danych przez port równoległy pracujące w środowisku MSDOS.
Schemat połączeń (wzięty z /usr/src/linux/drivers/net/plip.c)
znajduje się poniżej:
Nazwa Połączenie
--------- -----------------
GROUND 25 - 25
D0->ERROR 2 - 15
ERROR->D0 15 - 2
D1->SLCT 3 - 13
SLCT->D1 13 - 3
D2->PAPOUT 4 - 12
PAPOUT->D2 12 - 4
D3->ACK 5 - 10
ACK->D3 10 - 5
D4->BUSY 6 - 11
BUSY->D4 11 - 6
D5 7*
D6 8*
D7 9*
STROBE 1*
FEED 14*
INIT 16*
SLCTIN 17*
Uwagi: Nie należy łączyć końcówek oznaczonych `*'. Dodatkowe uziemienia to 18,19,20,21,22,23 i 24.
Jeśli kabel z którego korzystasz jest ekranowany, ekran powinien być podłączony do obudowy wtyczki DB-25 tylko na jednym końcu.
Ostrzeżenie: kabel ze źle wykonanymi połączeniami może fizycznie zniszczyć kartę kontrolora twojego komputera. Bądź bardzo ostrożny i dwukrotnie sprawdzaj każde połączenie, aby nie narazić się na niepotrzebny ból głowy lub atak serca.
Choć może się udać, że połączenie PLIP będzie pracować na duże odległości, należy jednak tego unikać. Specyfikacja kabla pozwala na wykonania kabla o długości ok 1m. Bądź ostrożny używając dłuższych kabli, ponieważ źródła silnych pół elekromagnetycznych (pioruny, linie wysokiego napięcia, nadajniki radiowe) mogą zakłócić pracę a czasami doprowadzić do uszkodzenia sterownika. Jeśli zależy ci na połączeniu dwóch komputerów na naprawdę dużą odległość, powinieneś zopatrzyć się w parę tanich kart ethernetowych pracujących na cienkim kablu koncentrycznym.
Urządzenia PPP noszą nazwy `ppp0', `ppp1, itd. Urządzenia
otrzymują kolejne numery poczynając od `0'.
Opcje konfiguracji jądra:
Networking options --->
<*> PPP (point-to-point) support
Szczegółowy opis konfiguracji PPP można znaleźć w PPP-HOWTO.
Jeśli masz na tyle szczęścia, aby posiadać półstałe połączenie z siecią i chciałbyś, aby twój komputer automatycznie zestawiał połączenie PPP, gdy z jakiegoś powodu zostanie przerwane, pomoże ci w tym prosta sztuczka.
Skonfiguruj PPP w taki sposób, aby było uruchamiane przez administratora systemu za pomocą polecenia:
# pppd
Upewnij się, że w pliku /etc/ppp/options znajduje się
opcja `-detach'. Następnie dodaj do pliku /etc/inittab,
poniżej definicji getty następujący wiersz:
pd:23:respawn:/usr/sbin/pppd
W ten sposób program init będzie uruchamiał i monitorował program pppd i za każdym razem, gdy pppd skończy pracę, będzie uruchamiał go ponownie.
AF_ROSE)Urządzenia protokołu Rose noszą nazwy `rs0', `rs1', itd.
Dostępne są w jądrach w wersji 2.1.*.
Opcje konfiguracji jądra:
Networking options --->
[*] Amateur Radio AX.25 Level 2
<*> Amateur Radio X.25 PLP (Rose)
Protokoły AX25, NetRom i Rose są dokładnie omówione w AX25-HOWTO. Są wykorzystywane przez krótkofalowców (packet radio).
Większość pracy związanej z implementacją tych protokołów pod Linuksem wykonał
Jonathon Naylor, jsn@cs.not.ac.uk.
SAMBA jest implemnetacją protokołu SMB (Session Management Block). Pozwala na korzystanie z dysków i drukarek komputera pracującego pod Linuksem, komputerom pracującym pod systemami firmy Microsoft lub pod systemem OS2
SAMBA i jej konfigiracja jest szczegółowo omówiona w SMB-HOWTO.
Urządzenia protokołu SLIP są nazywane `sl0', `sl1'
itd. Pierwsze skonfigurowane urządzenie otrzymuje numer `0',
pozostałe otrzymują kolejne numery, w momencie ich konfiguracji.
Opcje konfiguracji jądra:
Network device support --->
[*] Network device support
<*> SLIP (serial line) support
[ ] CSLIP compressed headers
[ ] Keepalive and linefill
[ ] Six bit SLIP encapsulation
Protokół SLIP (Serial Line Internet Protocol) pozwala na zestawienie połączenia TCP/IP przez linię szeregową, np. połączenie modemowe przez linię telefoniczną lub dzierżawioną. Oczywiście aby móc korzystać z protokołu SLIP należy mieć wpierw dostęp do serwera SLIP. Wiele uniwersytetów i firm komercyjnych udostępniają usługę SLIP.
SLIP wykorzystuje porty szeregowe komputera do przesyłania datagramów IP. W tym celu musi przejąć sterowanie portu szeregowego. Urządzenia SLIP noszą nazwy sl0, sl1 itd. Jak to się ma do urządzeń portów szeregowych? Oprogramowanie sieciowe korzysta z funkcji ioctl (i/o control) za pomocą których może zażądać zamiany urządzenia portu szeregowego w urządzenie SLIP. Dwa popularne programy potrafią to zrobić. Jeden z nich to dip, drugi slattach.
dip (Dialup IP) to zmyślny program umożliwiający ustawienie prędkości portów szeregowych, sterowanie modemem w celu wybrania odpowiedniego numeru, zautomatyzowane wejście do zdalnego systemu, przesukiwanie i wybieranie informacji przesyłanych przez zdalny serwer (np. przydzielonego nam na czas sesji adresu IP), korzystanie z funkcji ioctl w celu przestawienia portu szeregowego w urządzenie SLIP. Program dip posiada rozbudowany język przeznaczony do pisania skryptów, dzięki czemu można bardzo łatwo zautomatyzować procedurę zestawiania połączenia SLIP.
Jest dostępny pod adresem: sunsite.unc.edu.
Aby go zainstalować spróbuj wydać następujące polecenia:
#
# cd /usr/src
# gzip -dc dip337o-uri.tgz | tar xvf -
# cd dip-3.3.7o
<jeśli to konieczne popraw plik Makefile>
# make install
#
Plik Makefile zakłada istnienie w twoim systemie grupy o nazwie
uucp, lecz możesz to zmienić np na dip, lub slip
zależnie od twojej konfiguracji.
slattach w przeciwieństwie do dip jest bardzo prostym programem, bardzo łatwym w użytkowaniu, nie posiadającym bogatych opcji programu dip. Nie posiada możliwości tworzenia skryptów, jedyne co robi to konfiguracja urządzenia portu szeregowego, jako urządzenia SLIP. Zakłada, że posiadasz wszystkie informacje niezbędne do zestawienia połączenia oraz, że połączenie fizyczne między portami jest już zestawione. slattch jest idealne do wykorzystania w stałych połączeniach z serwerem, np. przez kabel łączący bezpośrednio dwa porty szeregowe lub przez linie dzierżawioną.
Skorzystałbym z programu dip zawsze wtedy, gdy łączyłbyn komputer z serwerem SLIP przez modem i linię telefoniczną. Skorzystałbym z programu slattach wtedy, gdy zestawiałbym połączenie przez linię dzierżawioną lub kabel bezpośrednio między serwerem i moim komputerem i gdy nie muszę wykonywać żadnych czynności do fizycznego zestawienia połączenia między moim komputerem a serwerem. Patrz rozdział 'Stałe połączenie SLIP'.
Konfiguracja urządzenia SLIP jest zbliżona do konfiguracji urządzenia karty ethernetowej. (przeczytaj rozdział 'Konfiguracja karty ethernetowej). Jednakże istnieją dwie zasadnicze różnice:
Po pierwsze SLIP w przeciwieństwie do sieci ethernetowych łączy bezpośrednio ze sobą tylko dwa komputery, po jednym na każdym końcu połączenia. O ile podłączenie kabla sieci ethernet do komputera oznacza jej natychmiastową gotowość do pracy, o tyle w przypadku protokołu SLIP może być wymagana wcześniejsza inicjacja fizycznego połączenia między komputerami.
Jeśli korzystasz z programu dip, to zwykle inicjacja łącza odbywa
się nie tuż po uruchomieniu systemu, lecz później, gdy jesteś gotowy
do korzystania z połączenia. Można całą tę procedurę
zautomatyzować. Jeśli korzystasz z programu slattch wtedy
prawdopodobnie zechcesz zmodyfikować plik startowy rc.inet1. Jak
to zrobić powiemy za chwilę.
Istnieją dwa podstawowe serwery udostępniające SLIP. Różnią się sposobem przydziału adresu IP, mogą to robić statycznie (za każdym razem otrzymujesz ten sam adres IP) i dynamicznie (po nawiązaniu połączenia serwer podaje, jakiego adresu powinieneś używać). Niemal każdy serwer SLIP bedzie wymagał przedstawienia się i podania hasła. dip potrafi zautomatyzować wszystkie te procedury.
Statyczny serwer SLIP to skrót oznaczający serwer SLIP przydzielający
adresy IP w sposób statyczny. Otrzymany adres IP jest wyłącznie twój.
Za każdym razem, gdy przyłączysz się do serwera będziesz konfigurował
port SLIP swojego komputera tym samym adresem IP.
Serwer odpowie na połączenie rozpoczęte przez twój modem,
prawdopodobnie poprosi o podanie identyfikatora i hasła, a następnie po
przejściu w tryb SLIP będzie przesyłał wszystkie datagramy adresowane
na twój adres IP przez nazwiązane przez ciebie połączenie. Jeśli
korzystasz ze statycznego serwera SLIP, możesz chcieć dodać do pliku
/etc/hosts pozycję z nazwą i adresem IP twojego
komputera. Powinieneś również skonfigurować kilka innych plików,
między innymi rc.inet2, host.conf,
resolv.conf, /etc/HOSTNAME i rc.local.
Pamiętaj, że modyfikując rc.inet1 nie musisz podawać żadnych
poleceń specyficznych dla połączenia SLIP, ponieważ to dopiero dip
wykona całą ciężką robotę konfigurując interfejs SLIP, po tym jak
nawiąże połączenie modemowe i zaloguje się na serwer.
Jeśli tak właśnie pracuje serwer SLIP z którego korzystasz możesz przejść do rozdziału 'Korzystanie z programu dip', tam dowiesz się jak poprawnie skonfigurować ten program.
Dynamiczny serwer SLIP to skrót oznaczający serwer SLIP, który z pewnej puli przydziela adresy IP w sposób dynamiczny (za każdym razem, gdy się z nim połączysz możesz otrzymać inny adres IP). To znaczy, że nie masz gwarancji, że łącząc się otrzymasz konkretny adres IP, może on być wykorzystywany przez kogoś innego, wtedy gdy nie korzystasz z połączenia. Administrator sieci, który skonfigurował serwer przydzielił mu pewną pulę adresów IP z której może korzystać. Obsługując kolejne przychodzące połączenie znajduje pierwszy niewykorzystany w danym momencie adres IP, przeprowadza użytkownika przez procedurę weryfikacyjną wyświetlając na koniec informacje zawierającą adres IP, który został przydzielony temu użytkownikowi na czas trwania nawiązanego właśnie połączenia.
Konfiguracja do korzystania z tego rodzaju serwera jest podobna do tej dla serwera statycznego. Trzeba jedynie dodać fragment pobrania adresu IP przydzielonego nam przez serwer na czas trwania połączenia, a następnie kontynuować konfigurowanie SLIPa z tym właśnie adresem.
Ponownie, dip wykonuje tę ciężką pracę, a jego nowsze wersje są na tyle sprytne, że potrafią nie tylko zalogować cię do systemu, ale również potrafią odczytać automatycznie adres IP wyświetlany przez serwer, zachowując go do późniejszego wykorzystania przy konfigurowaniu interfejsu SLIP.
Jeśli tak właśnie pracuje serwer SLIP z którego korzystasz możesz przejść do rozdziału 'Korzystanie z programu dip', tam dowiesz się jak poprawnie skonfigurować ten program.
Jak wyjaśniliśmy wcześniej dip jest potężnym programem, który potrafi uprościć i zautomatyzować proces łączenia się z serwerem SLIP, logowania się na ten serwer, uruchamiania tam odpowiedniego oprogramowania i konfigurowania lokalnych urządzeń SLIP za pomocą odpowiednich poleceń korzystających z programów ifconfig i route.
Podstawowym sposobem korzystania z programu dip jest pisanie i
uruchamianie specjalnych skryptów, składających się z listy poleceń
rozumianych przez program dip. Przyjrzyj się plikowi
sample.dip znajdującemu się w dystrybucji programu dip. Dip
jest potężnym programem posiadającym wiele opcji, nie bedziemy ich tu
wszystkich przedstawiać, jeśli cię to interesuje, przyjrzyj się stronom
podręcznika poświęconym programowi dip, plikom README i innym plikom
przykładowym znajdującym się w pakiecie dystrybucyjnym programu.
Prawdopodobnie zauważyłeś, że plik sample.dip zakłada, że
korzystasz ze statycznego serwera SLIP, tzn. że wiesz jaki jest twój
adres IP, zanim połączysz się z serwerem. W przypadku korzystania z
dynamicznego serwera SLIP nowsze wersje programu dip zostały
zaopatrzone w dodatkowe polecenie, które potrafi automatycznie
odczytać i skonfigurowć lokalne urządzenie SLIP z adresem IP
przydzielonym przez serwer. Poniższa próbka jest zmodyfikowanym
plikiem sample.dip dostarczanym w pakiecie dip337j-uri.tgz i
w twoim przypadku prawdopodobnie jest dobrym punktem startowym.
Możesz go zachować jako np. /etc/dipscript i dostosować go do
swoich warunków.
#
# sample.dip Dialup IP connection support program.
#
# This file (should show) shows how to use the DIP
# This file should work for Annex type dynamic servers, if you
# use a static address server then use the sample.dip file that
# comes as part of the dip337-uri.tgz package.
#
#
# Version: @(#)sample.dip 1.40 07/20/93
#
# Author: Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
#
main:
# Next, set up the other side's name and address.
# My dialin machine is called 'xs4all.hacktic.nl' (== 193.78.33.42)
get $remote xs4all.hacktic.nl
# Set netmask on sl0 to 255.255.255.0
netmask 255.255.255.0
# Set the desired serial port and speed.
port cua02
speed 38400
# Reset the modem and terminal line.
# This seems to cause trouble for some people!
reset
# Note! "Standard" pre-defined "errlevel" values:
# 0 - OK
# 1 - CONNECT
# 2 - ERROR
#
# You can change those grep'ping for "addchat()" in *.c...
# Prepare for dialing.
send ATQ0V1E1X4\r
wait OK 2
if $errlvl != 0 goto modem_trouble
dial 555-1234567
if $errlvl != 1 goto modem_trouble
# We are connected. Login to the system.
login:
sleep 2
wait ogin: 20
if $errlvl != 0 goto login_trouble
send MYLOGIN\n
wait ord: 20
if $errlvl != 0 goto password_error
send MYPASSWD\n
loggedin:
# We are now logged in.
wait SOMEPROMPT 30
if $errlvl != 0 goto prompt_error
# Command the server into SLIP mode
send SLIP\n
wait SLIP 30
if $errlvl != 0 goto prompt_error
# Get and Set your IP address from the server.
# Here we assume that after commanding the SLIP server into SLIP
# mode that it prints your IP address
get $locip remote 30
if $errlvl != 0 goto prompt_error
# Set up the SLIP operating parameters.
get $mtu 296
# Ensure "route add -net default xs4all.hacktic.nl" will be done
default
# Say hello and fire up!
done:
print CONNECTED $locip ---> $rmtip
mode CSLIP
goto exit
prompt_error:
print TIME-OUT waiting for sliplogin to fire up...
goto error
login_trouble:
print Trouble waiting for the Login: prompt...
goto error
password:error:
print Trouble waiting for the Password: prompt...
goto error
modem_trouble:
print Trouble occurred with the modem...
error:
print CONNECT FAILED to $remote
quit
exit:
exit
Powyższy przykład zakłada, że łączysz się z dynamicznym serwerem
SLIP. Jeśli łączysz się z serwerem statycznym powinieneś
skorzystać z pliku sample.dip dostarczanego razem z
dip337j-uri.tgz.
Gdy dip otrzyma polecenie get $local przeszukuje tekst przesyłany przez serwer SLIP w poszukiwaniu ciągu znaków wyglądającego jako adres IP, tzn. ciągi cyfr rozdzielone kropką '.'. Została ona wprowadzone dla osób korzystających z dynamicznych serwerów SLIP, aby dip mógł sam, automatycznie odczytać adres IP przydzielony przez serwer.
W powyższym przykładzie po zestawieniu połączenia SLIP zostanie automatycznie dodana domyślna trasa skierowana właśnie przez to połączenie. Jeśli nie tego oczekujesz, możesz np. posiadać inne połączenie przez sieć ethernetową, przez które ma być skierowana domyślna trasa, usuń z powyższego pliku wiersz z poleceniem default. Jeśli po zakończeniu działania tego skryptu wydasz polecenie ifconfig zobaczysz, że pojawiło się nowe urządzenie sl0. To jest właśnie urządzenie SLIP. W miarę potrzeb możesz zmienić konfigurację sieci ręcznie, po zakończeniu działania programu dip, za pomocą pogramów ifconfig i route.
Należy pamietać, że dip pozwala na wybranie jednego z wielu różnych
protokołów wykorzystywanych w poleceniu mode. Najczęściej jest to
cSLIP oznaczający SLIP z kompresją nagłówków. Pamiętaj, że oba
końce połączenia muszą pracować w identycznym trybie. Jeśli zmienisz
jakieś ustawienia, musisz się upewnić, że serwer sobie z nimi poradzi.
Powyższy przykład jest uniwersalny i powinien poradzić sobie z większością błędów jakie mogą wystąpić. Więcej informacji znajdziesz na stronie podręcznika poświęconej programowi dip (man dip). Oczywiście możesz w taki sposób zmodyfikować ten skrypt, aby w przypadku wystapienia błędu próbował powtórnie nawiązać połączenie telefoniczne, lub próbował połączyć się z innymi serwerami, które udostępniają ci wejscie do Internetu.
Jeśli jesteś posiadaczem kabla łączącego dwa komputery, lub szczęśliwcem posiadającym linie dzierżawioną lub inne stałe połączenie szeregowe dwóch komputerów, wtedy nie musisz się kłopotać zestawiając łącze szeregowe za pomocą programu dip. slattach jest bardzo łatwym w uzywaniu narzędziem umożliwiającym skonfigurować zestawiane połaczenie.
Ponieważ będzie to połączenie stałe, prawdopodobnie zechcesz dodać kilka
poleceń do pliku rc.inet1. Podsumowując, wszystko co potrzebujesz
w przypadku zestawiania połączenia przez linię stałą, jest poprawne
ustawienie prędkości portów szeregowych i przełączenie ich w tryb SLIP.
slattach pozwala wykonać to wszystko wydając jedno polecenie. Dodaj
do pliku rc.inet1 następujące polecenie:
#
# Zestaw połączenie SLIP ze statycznym adresem IP
#
# configure /dev/cua0 for 19.2kbps and cslip
/sbin/slattach -p cslip -s 19200 /dev/cua0 &
/sbin/ifconfig sl0 IPA.IPA.IPA.IPA pointopoint IPR.IPR.IPR.IPR up
#
# Koniec
Gdzie:
twój adres IP
adres IP po drugim końcu połączenia SLIP
slattach przyporządkowuje do urządzenia portu szeregowego
pierwsze wolne urządzenie slip. Rozpoczyna od sl0. To znaczy
pierwsze wywołanie polecenia slattach przyporządkowuje portowi
szeregowemu urządzenie sl0, przy następnym wywołaniu będzie to
sl1 itd.
slattach umożliwia skonfigurowanie wielu różnych protokołów
(argument opcji -p). W twoim przypadku w zależności od tego czy
będziesz chciał korzystać z kompresji nagłówków czy nie będziesz korzystał albo z
protokołu cSLIP albo SLIP. Uwaga: oba końce połączenia
muszą używać tego samego protokołu.
Jeśli posiadasz komputer, być może przyłączony do sieci, i chcesz, aby udostępniał innym przez modem serwisy internetowe, to musisz skonfigurować go jako serwer. Jeśli protokołem, który chcesz używać jest SLIP, to istnieją trzy możliwości konfiguracji twojego komputera jako serwer. Osobiście preferuję pierwszą z prezentowanych, sliplogin. Wydaje się być najprostszą i najłatwiejszą do skonfigurowania i zrozumienia. Przedstawię opis wszystkich trzech metod, abyś mógł samemu podjąć decyzję.
sliplogin to program zastępujący zwykłą powłokę (interpreter poleceń) użytkownika, dla tych, którzy chcą korzystać z linii szeregowej w trybie SLIP. Pozwala na skonfigurowanie twojego komputera zarówno jako statycznego serwera SLIP (użytkownicy za każdym razem otrzymują ten sam adres IP), lub dynamicznego serwera SLIP (adres IP jest przydzielony raczej do linii szeregowej, a nie użytkownika, więc użytkownik nie ma pewności, że za każdym razem otrzyma ten sam adres IP).
Użytkownik musi wpierw przejść przez standardową procedurę wchodzenia do systemu
(logowanie się) podając swój identyfikator i hasło, lecz po wejściu do
systemu, zmiast zwykłego interpretera poleceń uruchamiany jest program
sliplogin, który przeszukuje swój plik konfiguracyjny (/etc/slip.hosts)
w poszukiwaniu pozycji odpowiadającej identyfikatorowi użytkownika. Po jej
znalezieniu, przestawia linię w tryb 8mio bitowy, a następnie korzystając
z odpowiednich funkcji ioctl przełącza linię w tryb SLIP. Po zakończeniu
tego etapu następuje ostatnia faza, sliplogin uruchamia skrypt, którego
zadaniem jest skonfigurowanie interfejsu SLIP (ustawienie adresu IP, netmaski)
dodanie odpowiedniej trasy do tabeli trasowania (routingu) jądra.
Skrypt ten nosi zwykle nazwę /etc/slip.login lecz podobnie jak w
przypadku getty, jeśli niektórzy użytkownicy wymagają specjalnego traktowania
możesz utworzyć skrypt /etc/slip.login.identyfikator_uzytkownika,
który w takim przypadku zostanie uruchomiony w miejsce standardowego skryptu.
Aby sliplogin działał poprawnie należy zmodyfikować trzy lub cztery pliki. Omówię szczegółowo skąd i jak zdobyć odpowiednie oprogramowanie i jak je poprawnie skonfigurować. Wspomniane pliki to:
/etc/passwd, definiujacy użytkownikłów twojego systemu,/etc/slip.hosts, zawierający informacje o każdym użytkowniku
korzystającym ze SLIPa,/etc/slip.login, odpowiedzialny z odpowiednią konfigurację
systemu, po zalogowaniu się użytkownika,/etc/slip.tty wymagany tylko wtedy, gdy konfigurujesz dynamiczny
serwer SLIP, a który zawiera tabelę przydzielanych adresów IP,/etc/slip.logout zawierający polecenia jakie należy wykonać po
zakończeniu pracy przez użytkownika, lub po zerwaniu połączenia.
Być może pakiet sliplogin jest już zainstalowany na twoim komputerze, jako część dystrybucji, jeśli nie, sliplogin jest dostępny pod adresem sunsite.unc.edu. Plik tar zawiera pliki źródłowe, skompilowane pliki binarne i dokumentację.
Aby zapewnić, że sliplogin może być uruchamiany przez upoważnionych do
tego użytkowników, powinieneś do pliku /etc/group dodać
pozycję podobną do poniższej:
..
slip::13:radio,fred
..
Podczas instalacji pakietu sliplogin, Makefile zmieni grupę do której
należy program sliplogin na slip. W ten sposób, prócz właściciela
będą go mogli uruchamiać tylko użytkownicy należący do grupy SLIP. W powyższym
przykładzie mogą to robić tylko użytkownicy radio i fred.
Aby zainstalować pliki binarne do katalogu /sbin/, a strony podręcznika
do /man/ należy wykonoać następujące polecenia:
# cd /usr/src
# gzip -dc .../sliplogin-2.1.1.tar.gz | tar xvf -
# cd sliplogin-2.1.1
# <..Jeśli nie korzystasz z shadow pasword popraw Makefile..>
# make install
Jeśli przed instalacją chcesz samemu skompilować pliki binarne
przed make install wykonaj polecenie make clean. Jeśli chcesz
zainstalować pliki binarne w innym miejscu, musisz
wcześniej zmienić plik Makefile.
Więcej informacji znajdziesz w plikach README wewnątrz pakietu.
/etc/passwd. Zwykle dla osób korzystających ze SLIPa tworzy się oddzielne konta.
Powszechnie przyjęta konwencja mówi, że jako pseudonim użytkownika
należy przyjąć nazwę łączącego się z nami komputera, poprzedzoną
wielką literą 'S'. Jeśli łączący się z nami komputer nosi nazwę
radio, mogłbyś utworzyć dla niego pozycję w pliku /etc/passwd
wyglądajacą mniej więcej tak:
Sradio:FvKurok73:1427:1:radio SLIP login:/tmp:/sbin/sliplogin
Tak na prawdę nie ma znaczenia jaki jest identyfikator konta.
Uwaga: użytkownik SLIPa nie potrzebuje własnego katalogu macierzystego,
ponieważ nie będzie korzystał z powłoki interpretera poleceń na naszym komputerze.
Dlatego dobrym wyborem w takim przypadku jest katalog /tmp.
Pamiętaj, że zamiast zwykłej powłoki uruchamiany jest program sliplogin.
/etc/slip.hosts Plik /etc/slip.hosts jest przeszukiwany przez sliplogin
w poszukiwaniu szczegółów konfiguracyjnych dla użytkownika, przez którego
został uruchomiony. W tym właśnie pliku podaje się adres IP i netmaskę
które będą przydzielone temu użytkownikowi i wykorzystywane do konfiguracji.
Przykładowe dwie pozycje, jedną dla statycznej konfiguracji dla komputera radio
i drugą, dynamiczna konfiguracja dla komputera albert mogły by wyglądać
następująco:
#
Sradio 44.136.8.99 44.136.8.100 255.255.255.0 normal -1
Salbert 44.136.8.99 DYNAMIC 255.255.255.0 compressed 60
#
Poszczególne pola w wierszu pliku /etc/slip.hosts oznaczają:
DYNAMIC wtedy adres IP, zostanie
przydzielony na podstawie informacji zawartych w pliku /etc/slip.tty.
Uwaga: to udogodnienie pojawiło się dopiero w wersji 1.3 programu
sliplogin.Uwaga: W polach 2 i 3 można podawać zarówna nazwy komputerów, jak i adresy IP. Jeśli podasz nazwę komputera, sprawdź, czy system potrafi znaleźć jego adres IP, w przeciwnym razie wykonanie skryptu zakończy się niepowodzeniem. Możesz to sprawdzić próbując połączyć się z nim za pomocą programu telnet. Jeśli zobaczysz komunikat `Trying nnn.nnn.nnn...' to znaczy, że twój komputer potrafi znaleźć adres IP komputera o podanej przez ciebie nazwie. Jeśli zobaczysz komunikat Unknown host', to znaczy, że jednak nie potrafi. Jeśli nie potrafi musisz podawać adres IP tego komputera lub sprwadź konfigurację DNS swojego komputera.
Najczęściej wykorzysytwane tryby pracy SLIP to:
zwykły, nieskompresowny SLIP.
kompresja nagłówków van Jacobsena (cSLIP)
Oczywiście są to dwie wzajemnie wykluczające się opcje. Więcej informacji na temat dostępnych opcji znajdziesz na stronie podręcznika poświęconej programowi sliplogin.
/etc/slip.login.
Po przeszukaniu przez sliplogin pliku /etc/slip.hosts
i znalezieniu opowiednich pozycji, zostanie uruchomiony skrypt
/etc/sli.login, który w rzeczywistości wykonuje cała pracę
związaną z konfiguracja interfejsów sieciowych, korzystając
z przekazanych mu informacji o adresie IP i netmasce sieci.
Przykładowy plik /etc/slip.login dostarczany w pakiecie
sliplogin wygląda następująco:
#!/bin/sh -
#
# @(#)slip.login 5.1 (Berkeley) 7/1/90
#
# generic login file for a SLIP line. sliplogin invokes this with
# the parameters:
# $1 $2 $3 $4, $5, $6 ...
# SLIPunit ttyspeed pid the arguments from the slip.host entry
#
/sbin/ifconfig $1 $5 pointopoint $6 mtu 1500 -trailers up
/sbin/route add $6
arp -s $6 <hw_addr> pub
exit 0
#
Jak widać, powyższy skrypt po prostu korzysta z programu ifconfig i route. Konfiguruje urządzenie SLIP zgodnie z podanymi mu adresem IP i netmaską, następnie modyfikuje tabele trasowania w jądrze. Wykonuje te same polecenia, które należy wykonać ręcznie korzystając ze slattach.
Zwróć uwagę na użycie Proxy ARP w celu zapewnienia komunikacji
między komputerami znajdującymi się na tym samym segmencie sieci co
nasz serwer, a komputerem łączącym się przez linię szeregową. Pole
<hw_addr> powinno zawierać adres sprzętowy karty
ethernetowej serwera. Jeśli serwer nie jest przyłączony do sieci
ethernetowej możesz pominąć ten wiersz całkowicie.
/etc/slip.logout.Kiedy następuje przerwanie połączenie chcesz być pewny, że port
szeregowy jest przywracany do swego normalnego stanu i jest gotowy do
obsługi kolejnego połączenia. Do tego celu służy skrypt
/etc/slip.logout. Jest bardzo prosty i jest wywoływany z tymi
samymi argumentami co /etc/slip.login.
#!/bin/sh -
#
# slip.logout
#
/sbin/ifconfig $1 down
arp -d $6
exit 0
#
Wykonywane przez niego czynności to: wyłączenie interfejsu slip,
spowoduje automatyczne usunięcie z tabeli trasowania wprowadzonej tam podczas
zestawiania połączenie pozycji; usunięcie z tabeli arp
wprowadzonej tam ręcznie pozycji. Nie potrzebujesz tego polecenia,
jeśli twój serwer nie jest przyłączony do sieci ethernetowej.
/etc/slip.tty.Jeśli korzystasz z dynamicznego przydziału adresów IP (choć jeden
komputer w pliku /etc/slip.hosts jest skonfigurowany z opcją
DYNAMIC) to musisz również skonfigurować plik
/etc/slip.tty informując system jakie adresy IP są
przydzielone do każdego z wykorzystywanych portów szeregowych. Plik
ten jest potrzebny tylko wtedy, gdy twój serwer będzie przydzielał
adresy IP użytkownikom w sposób dynamiczny.
Plik zawiera tabelę, która każdemu wykorzystywanemu urządzeniu tty przyporządkowuje adres IP jaki ma zostać przydzielony komputerowi łączącemu się przez to urządzenie tty.
Format niniejszego pliku jest następujący:
# slip.tty tty -> adres IP
# format: /dev/tty?? xxx.xxx.xxx.xxx
#
/dev/ttyS0 192.168.0.100
/dev/ttyS1 192.168.0.101
#
Pozycje w powyższym przykładzie oznaczają, że wszyscy, którzy połączą
się przez port /dev/ttuS0 i jako swoj adres mają w pliku
/etc/slip.hosts słowo DYNAMIC otrzymają adres 192.168.0.100.
W ten sposób potrzebujesz jedynie jednego adresu IP na każdy wykorzystywany port dla wszystkich użytkowników, którzy nie potrzebują dedykowanego, stałego adresu IP. Dzięki temu liczba adresów potrzebna do obsługi wielu użytkowników jest bardzo mała.
Część z prezentowanej poniżej informacji pochodzi ze stron podręcznika dotyczących programu dip. Jest tam pokrótce opisane jak wykorzystać dip jako serwer SLIP. Proszę również zwrócić uwagę, że podane informacje dotyczą wersji dip337o-uri.tgz i prawdopodobnie nie mają zastosowania do innych wersji programu.
dip posiada tryb pracy, w którym automatycznie wyszukuje pozycję
dotyczącą użytkownika, który go wywołał i konfiguruje linię szeregową
jako połączenie SLIP według parametrów jakie znalazł w pliku
/etc/diphosts. Ten tryb pracy jest włączany wtedy, gdy
dip zostanie uruchominy jako program o nazwie diplogin.
To jest właśnie sposób wykrzystania dipa do stworzenia serwera
SLIP. Należy utworzyć specjalne konta, z programem diplogin jako
powłoką użytkownika.
Pierwsze co musisz zrobić, to następujące dowiązanie symboliczne:
# ln -sf /usr/sbin/dip /usr/sbin/diplogin
Następnie należy dodać odpowiednie pozycje do pliku
/etc/passwd i /etc/diphosts.
Aby skonfigurować Linuksa jako serwer SLIP wykorzystując do tego program dip wymaga utworzenia specjalnych kont do obsługi SLIPa z powłoką użytkownika w postaci programu dip jako diplogin. Sugerowana konwencja nadawania nazw tym kontom zaleca, aby pseudonim użytkownika rozpoczynał się wielką literą 'S', np. `Sfredm'.
Przykładowa pozycja pliku /etc/passwd konta SLIP może
wyglądać następująco:
Sfredm:ij/SMxiTlGVCo:1004:10:Fred:/tmp:/usr/sbin/diplogin
^^ ^^ ^^ ^^ ^^ ^^ ^^
| | | | | | \__ diplogin jako powłoka użytkownika
| | | | | \_______ katalog domowy
| | | | \____________ pełna nazwa użytkownika
| | | \_________________ numer grupy (GID)
| | \_____________________ numer użytkownika (UID)
| \_______________________________ zakodowane haslo
\__________________________________________ pseudonim użytkownika
Po zalogowaniu się użytkownika (jeśli zostanie poprawnie zweryfikowany)
program login uruchomi polecenie diplogin. dip wywołany jako
diplogin zakłada, że został uruchomiony jako powłoka
użytkownika. Piersze co robi, to korzysta z funkcji getuid()
pobierając pseudonim wywołującego go użytkownika. Następnie
przeszukuje /etc/diphosts w poszukiwaniu pierwszej pozycji,
która pasuje do zdobytego identyfikatora lub wykorzystywanego
urządzenia tty, a następnie odpowiednio się
konfiguruje. Decydując czy użytkownik powinien mieć własną pozycję w
pliku /etc/diphosts, czy powinien korzystać z konfiguracji
domyślnej, możesz budować serwer, który korzysta zarówno z
dynamicznego i statycznego przydziału adresów IP.
dip automatycznie doda pozycję Proxy-ARP jeśli zostanie wywołany jako diplogin. Nie musisz się martwić ręcznym dodawaniem tych pozycji.
/etc/diphosts
/etc/diphosts jest wykorzystywany przez dip do
wyszukiwania konfiguracji dla łączących się komputerów. Mogą to być
pozycje dotyczące zarówno komputerów łączących się z twoim Linuksem,
lecz równie dobrze mogą to być pozycje dotyczące komputerów, z którymi
łączy się twój Linux.
Ogólny format pliku /etc/diphosts wygląda następująco:
..
Suwalt::145.71.34.1:145.71.34.2:255.255.255.0:SLIP uwalt:CSLIP,1006
ttyS1::145.71.34.3:145.71.34.2:255.255.255.0:Dynamic ttyS1:CSLIP,296
..
Poszczególne pola oznaczają:
pseudonim użytkownika: identyfikator zwracany przez
getpwuid(getuid()) lub nazwa terminalaniewykorzystane: zgodność z formatem passwdadres zdalny: nazwa (adres IP) łaczącego się z nami komputeraadres lokalny: nazwa (adres IP) naszego serweranetmaska: netmaska w notacji dziesiętnejkomentarz: możesz tu wstawić co chceszprotokół: Slip, CSlip itp.MTU: liczbaPrzykłady pozycji pliku /etc/net/diphosts dla komputerów
łączących się z nami:
Sfredm::145.71.34.1:145.71.34.2:255.255.255.0:SLIP uwalt:SLIP,296
definującej połączenie SLIP między naszym serwerem, a komputerem, który otrzyma adres 145.71.34.1, parametr MTU połączenia będzie wynosił 296, lub
Sfredm::145.71.34.1:145.71.34.2:255.255.255.0:SLIP uwalt:CSLIP,1006
definiującej połączenie cSLIP z komputerem, który otrzyma adres 145.71.34.1. parametr MRU połączenia wynosił 1008.
Dlatego wszyscy użytkownicy którym zezwolisz na przydzielany statycznie adres IP powinni być wymienieni w pliku /etc/diphosts. Jeli chcesz aby uzytkownicy łączący się na pewien port mieli przydzielane numery w sposób dynamiczny musisz umieścić wpis dla wspomnianego portu i usunąć wszystkie wpisy indywidualnych użytkowników. Upewnij się aby skonfigurować co najmniej jeden wpis dla każdego z urządzeń tty wykorzystywanego przez twoich użytkowników w celu zapewnienia im poprawnej konfiguracji niezależnie od modemu z którym się połączą.
Kiedy użytkownik się loguje, widzi standardową zachętę do podania swojego identyfikatora SLIP i hasła. Jeli po wprowadzeniu żądanych informacji zostanie zweryfikowany poprawnie, nie zobaczy żadnych specjalnych komunikatów. Powinien wtedy przełączyć się po swojej stronie w tryb SLIP i mieć poprawne połączenie według konfiguracji zapisanej w pliku diphosts.
Matt Dillon <dillon@apollo.west.oic.com> stworzył pakiet,
który służy nie tylko do inicjowania połączenia z serwerem, ale równie
dobrze może obsługiwać połączenia przychodzące. Jest to kombinacja
małych programów i skryptów zarządzających dla ciebie
połączeniem. Musisz mieć zainstalowaną powłokę tcsh ponieważ
przynajmniej jeden ze skryptów jej wymaga. Matt dostarcza binarną
kopię programu expect, ponieważ wykorzystuje go inny ze
skryptów. Prawdopodobnie zmuszenie pakietu do pracy będzie od ciebie
wymagało trochę doświadczenia w obchodzeniu się z programem
expect, lecz niech cię to nie odstręcza.
Matt napisał dobry zestaw instrukcji instalacyjnych zgromadzonych w pliku README. Nie będę ich tutaj powtarzał.
Pakiet dSLIP możesz pobrać bezpośrednio ze źródła: apollo.west.oic.com
/pub/linux/dillon_src/dSLIP203.tgz
lub z:
sunsite.unc.edu
/pub/Linux/system/Network/serial/dSLIP203.tgz
Przeczytaj plik README i dodaj odpowiednie pozycje do pliku
/etc/passwd i /etc/group zanim wydasz polecenie
make install.
Urządzenia STRIP noszą nazwy `st0', `st1', itd.
Opcje konfiguracji jądra:
Network device support --->
[*] Network device support
....
[*] Radio network interfaces
< > STRIP (Metricom starmode radio IP)
STRIP to protokół zaprojektowany specjalnie dla radiowych modemów Metricom na uniwersystecie w Stanford w ramach projektu badawczego noszącego nazwę MosquitoNet Project. Zajdziesz tam mnóstwo ciekawych informacji, nawet jeśli nie jesteś bezpośrednio zainteresowany projektem.
Modemy Metricom przyłącza się przez port szeregowy komputera, posiadają szerokie spektrum technologiczne i są zdolne do pracy z prędkością zbliżoną do 100kbps. Informacje na temat samych modemów Metricom jest dostępna tutaj: Metricom Web Server.
W chwili obecnej standardowe narządzia sieciowe nie obsługują sterownika STRIP. Musisz zdobyć specjalistyczne narzędzia dostępne na serwerze www projektu MosquitoNet. Szczegóły na temat niezbędnego oprogramowania znajdziesz tutaj: MosquitoNet STRIP Page.
Konfiguracja sieci pracujących ze sterownikiem STRIP polega na
wykorzystaniu zmodyfikowanego programu slattach, które ustawia
tryb pracy linii szeregowej na STRIP, a następnie na konfiguracji
powstałego urządzenia `st[0-9]' w taki sam sposób, jak gdyby była
to zwykła karta ethernetowa. Z jednym wyjątkiem, z przyczyn
technicznych STRIP nie obsługuje protokołu ARP, dlatego musisz ręcznie
skonfigurować tabelę ARP dla wszystkich komputerów w twojej podsieci.
Co nie powinno sprawić większego kłopotu.
Urządzenia Token Ring noszą nazwy `tr0', `tr1' itd.
Token Ring jest standardem sieci LAN opracowanym przez IBM, który
unika kolizji wprowadzając mechanizm pozwalający na transmisję danych
w jednej chwili tylko jednej stacji przyłączonej do sieci. "Token" w
danej chwili może należeć tylko do jednej stacji i to właśnie ta
stacja, która go posiada jest uprawniona do nadawania informacji. Po
zakończonej transmisji przekazuje "Token" następnej stacji. Przechodzi
kolejno pomiędzy wszystkimi aktywnymi końcówkami sieci. Stąd nazwa
"Token Ring".
Opcje konfiguracji jądra:
Network device support --->
[*] Network device support
....
[*] Token Ring driver support
< > IBM Tropic chipset based adaptor support
Konfiguracja urządzeń token ring jest identyczna, jak konfiguracja urządzeń ethernetowych, z dokładnością do nazwy urządzenia podlegającego konfiguracji.
X.25 to obwodowy protokół komutacji pakietów zdefiniwany w
C.C.I.T.T. (organizacji standaryzacyjnej uznawanej przez firmy
telekomunikacyjne większości krajów świata. Cały czas trwają pracę nad
implementacją X25 u LAPB i najnowsze wersje jądra 2.1.* zawierają
kod odzwierciedlający aktualny stan prac.
Jonathon Naylor jsn@cs.nott.ac.uk przewodzi grupie
rozwijającej to oprogramowanie i opiekuje się listą utworzoną do
dyskusji na tematy dotyczące X25 i Linuksa. Aby się na nią zapisać
należy na adres majordomo@vger.rutgers.edu napisać list
o treści "subscribe linux-x25".
Wczesne wersje narzędzi konfiguracyjnych można uzyskac z archiwum ftp ftp.cs.nott.ac.uk.
Urządzenia Wavelan noszą nazwy `eth0', `eth1', itd.
Opcje kompilacji jądra:
Network device support --->
[*] Network device support
....
[*] Radio network interfaces
....
<*> WaveLAN support
Karty WaveLan to szerokopasmowe sieciowe karty bezprzewodowe. Są bardzo podobne do kart ethernetowych i praktycznie w większości są konfigurowane w taki sam sposób.
Więcej informacji na temat kart WaveLan znajdziesz na stronie Wavelan.com.
Ci z was, którzy posiadają odpowiednie narzędzia mogą chcieć zrobić własne kable do połączenia ze sobą dwóch Linuxów. Poniższe schematy powinny wam w tym pomóc.
Nie wszystkie kable bezmodemowe są takie same. Dużo kabli bezmodemowych oszukuje twój komputer, tak aby myślał, że wszystkie potrzebne sygnały są obecne i zamienia ze sobą kanały nadawania i odbioru danych. Taki kabel będzie działał poprawnie, ale musisz stosować programowe sterowanie przepływem danych (XON/XOFF), które jest znacznie mniej wydajne od sterowania sprzętowego. Poniższy schemat przedstawia kabel umożliwiajacy transmisję ze sprzętowym sterowaniem przepływem danych (RTC/CTS).
Pin Name Pin Pin
Tx Data 2 ----------------------------- 3
Rx Data 3 ----------------------------- 2
RTS 4 ----------------------------- 5
CTS 5 ----------------------------- 4
Ground 7 ----------------------------- 7
DTR 20 -\--------------------------- 8
DSR 6 -/
RLSD/DCD 8 ---------------------------/- 20
\- 6
Jeśli zamierzasz korzystać z protokołu PLIP, to kabel wykonany wg. poniższego schematu będzie działał niezależnie od rodzaju posiadanego portu równoległego.
Pin Name pin pin
STROBE 1*
D0->ERROR 2 ----------- 15
D1->SLCT 3 ----------- 13
D2->PAPOUT 4 ----------- 12
D3->ACK 5 ----------- 10
D4->BUSY 6 ----------- 11
D5 7*
D6 8*
D7 9*
ACK->D3 10 ----------- 5
BUSY->D4 11 ----------- 6
PAPOUT->D2 12 ----------- 4
SLCT->D1 13 ----------- 3
FEED 14*
ERROR->D0 15 ----------- 2
INIT 16*
SLCTIN 17*
GROUND 25 ----------- 25
Uwagi:
Ostrzeżenie: kabel ze źle wykonanymi połączeniami może fizycznie zniszczyć kartę kontrolora twojego komputera.. Bądź bardzo ostrożny i dwukrotnie sprawdzaj każde połączenie, aby nie narazić się na niepotrzebny ból głowy lub atak serca.
10base2 jest standardem okablowania ethernetowego wykorzystującego 52omowy kabel koncentryczny o średnicy ok 5mm. Łącząc ze sobą komputery za pomocą okablowania 10base2 należy pamiętać o kilku zasadach. Po pierwsze musisz mieć terminatory na obu końcach kabla. Terminator to opornik o oporniści 52 omy, zapewniający absorbję sygnału i zapobiegający jego odbiciom w momencie osiągnięcia końca kabla. Bez założonych terminatorów, może się okazać, że sieć nie jest pewna lub w ogóle nie nadaje się do pracy. Zwykle poszczególne komputery podłącza się do kabla z pomocą 'trójników'. Dlatego tak zbudowana sieć wygląda mniej więcej tak:
|==========T=============T=============T==========T==========|
| | | |
| | | |
----- ----- ----- -----
| | | | | | | |
----- ----- ----- -----
gdzie `|' oznacza terminator na każdym zakończeniu kabla,
`======' oznacza kabel koncentryczny, a
`T' oznaczają trójniki. Kabel łączący trójnik z komputerem
powinien być jak najkrótszy, najlepiej, gdy trójnik jest wpięty
bezpośrednio na kartę ethernetową komputera.
Jeśli chcesz połączyć ze sobą tylko dwie karty ethernetowe przez skrętkę, to nie potrzebujesz żadnego koncentratora (hub'a). Schemat wykonania potrzebnego kabla znajdziesz w Ethernet-HOWTO
Poniższa lista zawiera najważniejsze z terminów wykorzystywanych w tym dokumencie.
Skrót pochodzący od nazwy Address Resolution Protocol, określa sposób przyporządkowywania adresów IP adresom sprzętowym kart ethernetowych.
Skrót pochodzący od nazwy Asynchronous Transfer Mode. Sieci ATM przesyłąją dane w pakietach o ustalonej długości. ATM jest technologią sieci pakietowych z komutacją kanałów.
Jest to zwykle oprogramowanie znajdujące się po tej samej stronie połączenia co użytkownik. Są oczywiście wyjątki od tej reguły, np. w przypadku X11 to właśnie serwer jest po stronie użytkownika, a klient jest to aplikacja wykonująca się na zdalnej maszynie. Klient to oprogramowanie lub końcówka systemu korzystająca z usług oferowanych przez serwer. W przypadku połączeń peer to peer (każdy z każdym) jakimi są slip lub ppp, za klienta przyjmuje się ten koniec połączenia, który je zainicjował, a drugi koniec nosi nazwę serwera.
Datagram jest pakietem informacji, który prócz danych posiada również nagłówki zawierające adresy nadawcy i adresata. Jest podstawową jednostką przesyłania informacji w sieci IP. Często jest zastępowany słowem 'pakiet'.
DLCI oznacza skrót Data Link Connection Identifier, jest stosowany do jednoznacznej identyfikacji wirtualnego połączenia punkt-punkt przez Frame Relay. DLCI są zwykle przydzielane przez dostawcę usługi Frame Relay.
Frame Relay oznacza technologię sieciową przeznaczoną przede wszystkim do przenoszenia ruchu charaktyryzującego się nieregularnym natężeniem lub o sporadycznej charakterysyce. Koszty sieci są redukowane przez współdzielenie nośności sieci przez wielu użytkowników, przy założeniu, że każdy z nich generuje największy ruch o innej porze.
Numer który jednoznacznie identyfikuje komputer na poziomie wartstwy fizycznej sieci (na poziomie warstwy nośnika). Przykładem takich adresów jest adres karty ethernetowej lub adres AX.25.
ISDN oznacza skrót Integrated Services Dedicated Network. ISDN umożliwia ujednolicony sposób dostarczania użytkownikom informacji głosowej lub cyfrowej. Technicznie ISDN jest siecią danych z komutacją kanałów.
Jest to skrót Internet Service Provider (dostawca internetu). Są to organizacje lub firmy, które umożliwiają ludziom dostęp do Internetu,
Jest to numer jednoznacznie identyfikujący komputer w sieci TCP/IP. Adres składa się z 4rech bajtów i zwykle jest przedstawiany w tzw notacji dziesiętnej, czyli takiej, w której każdy bajt jest reprezentowany przez liczbę w systemie dziesiętnym, przy czym poszczególne bajty są rozdzielone znakiem '.'.
Maximum Segment Size (MSS) oznacza maksymalny rozmiar porcji danych, która może zostać przesłana za jednym razem. Aby zapobiec lokalnej fragmentacji pakietów MSS powinno się równać MTU-nagłówek IP. [od korektorki: oryginalny tekst jest skrótem myślowym: 'equal MTU - IP header' według mnie powinno być: 'powinno się równać różnicy: wielkość MTU-wielkość nagłówka IP' (nagłówek IP to zwykle 40 bajtów)].
Maximum Transmission Unit (MTU) to parametr, który określa maksymalny rozmiar datagramu, jaki może zostać przesłany przez interfejs, bez konieczności podziału go na mniejsze kawałki. MTU powinno być większe niż największy datagram jaki ma być przesyłany w jednym kawałku. Pamietaj, że ten parametr steruje jedynie lokalną fragmentacją pakietów. Może się zdarzyć, że któreś z połączeń leżących na trasie do celu będzie miało mniejsze MTU, a wtedy pakiet zostanie podzielony na kawałki w tym wąskim garde. Standartowymi wielkościami są 1500 dla kart ethernetowych, 576 dla interfejsu SLIP.
trasa osnacza ścieżkę jaką przebywają datagramy wędrując od nadawcy do odbiorcy.
Oprogramowanie lub system po przeciwnej stronie połączenia w stosunku do pozycji użytkownika. Serwer udostępnia pewne usługi jednemu lub więcej klientom. Mogą to być usługi typu ftp, nfs lub dns. W przypaku połączeń typu peer-to-peer (każdy z każdym) za serwer przyjmuje się ten koniec połączenia, który odpowiada na wezwanie, koniec rozpoczynający sesję nosi nazwę klienta.
Okienko to największa liczba bajtów jaką w danej chwili odbiorca jest w stanie przyjąc.
Jeśli jesteś zainteresowany wykorzystaniem Linuksa jako dostawca Internetu polecam stronę Linux ISP homepage. Zawiera listę odnośników do informacji, które mogą cię zainteresować.
Chciałbym podziekować następującym ludziom, za ich wkład w powstanie tego dokumentu (kolejność nie ma żadnego znaczenia): Axel Boldt, Arnt Gulbrandsen, Gary Allpike, Cees de Groot, Alan Cox, Jonathon Naylor.
NET-3-HOWTO, informacja na temat instalacji i konfiguracji oprogramowania sieciowego pod Linuksem. Copyright (c) 1997 Terry Dawson.
To jest darmowe oprogramowanie, możesz je rozpowszechniać i modyfikować na zasadach zgodnych z licencją GNU General Public License wydaną przez Freee Software Foundation w wersji 2 (lub jak wolisz) późniejszej.
Ten program jest rozpowszechniany w nadziei, że bedzie użyteczny, lecz BEZ ŻADNYCH GWARANCJI; nawet bez gwarancji zdatności HANDLOWEJ lub UŻYTECZNOŚCI W KONKRETNYM ZASTOSOWANIU. Wiecej szczegółów w tekście GNU General Public License.
Wraz z tym programem powinieneś otrzymać kopię Licencji GNU General Public License, jeśli nie napisz do:
Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
To tłumaczenie zawiera mnóstwo różnego rodzaju błędów. Postanowiłem je udostępnić w takim stanie, ponieważ nie mam czasu na dokładne sprawdzenie tego dokumentu (a jest tego trochę), a szkoda mi trzymać to na dysku, czekając na Wolną Chwile (TM), która być może nigdy nie nadejdzie. Dlatego bedę wdzięczny za każdą, nawet najdrobniejszą uwagę.
Najnowszą wersję tego tłumaczenia znajdziesz tutaj: http://www.ippt.gov.pl/pub/Linux/JTZ/html/NET-3-HOWTO.pl.html.
piotr.pogorzelski@ippt.gov.pl
Korekta, to było wyłapanie części literówek i złośliwości klawiatury oraz kilku niedotłumaczonych linijek tekstu. Pewnie jest tego jeszcze trochę dla następnej siwiejącej blondynki, która poczuje chęć się douczyć ;-)
30.11.2001 Basia Głowacka jastra@gdansk.sprint.pl
doc-linux-pl-2002.06.14.orig/html/NIS-HOWTO.pl.html 0100664 0001750 0001750 00000147533 06770264140 020207 0 ustar coven coven
Coraz więcej komputerów z Linux-em instalowanych jest jako część sieci komputerowych. Aby uprościć administrację siecią większość sieci (głównie oparte na Sun-ach) posiada Network Information Service. Maszyny Linux-owe mogą w pełni korzystać z serwera NIS albo samemu dostarczać taką usługę. Linux może także działać jako pełny klient NIS+, obsługa tego jest jeszcze w fazie beta.
Dokument ten próbuje odpowiedzieć na pytania dotyczące ustawienia NIS(YP) i NIS+ na twoim komputerze. Nie zapomnij przeczytać sekcji na temat Portmapper-a RPC.
NIS-HOWTO zajmuje się
Thorsten Kukuk, <tt/kukuk@vt.uni-paderborn.de/
Pierwotnym źródłem informacji dla pierwszej wersji NIS-HOWTO byli:
Andrea Dell'Amico <adellam@ZIA.ms.it>
Mitchum DSouza <Mitch.DSouza@NetComm.IE>
Erwin Embsen <erwin@nioz.nl>
Peter Eriksson <peter@ifm.liu.se>
którym powinniśmy podziękować za napisanie pierwszych wersji tego dokumentu.
Najnowszą wersję tego dokumentu możesz zawsze znaleźć pod adresem http://www.suse.de/~kukuk/linux/HOWTO/NIS-HOWTO.html.
Najnowsze wersje będą także umieszczane na różnych serwerach WWW i FTP związanych z Linux-em włącznie ze stroną LDP.
Odnośniki do tłumaczeń tego dokumentu można znaleźć pod adresem http:///www.suse.de/~kukuk/linux/nis-howto.html.
Pomimo, iż dokument ten powstał w jak najlepszej intencji może i pewnie zawiera błędy. Czytaj proszę wszystkie pliki README znajdujące się wraz z oprogramowaniem wymienianym tutaj w celu uzyskania jak najświeższych informacji. Będę sie starał aby było tu jak najmniej błędów.
Jeśli masz jakieś pytania czy poprawki dotyczące tego dokumentu, pisz śmiało do Thorstena Kukuk na adres kukuk@suse.de. Przyjmuję wszelkie sugestie czy krytykę. Jeśli znajdziesz jakiś błąd daj mi znać proszę, żebym mógł go poprawić w następnej wersji. Dzięki.
Proszę nie przysyłaj mi pytań na temat problemów dotyczących twojej dystrybucji Linux-a. Nie znam każdej dystrybucji. Ale będę się starał dodać każde rozwiązanie jaki mi przyślecie.
Chcielibyśmy podziękować wszystkim ludziom, którzy przyczynili się w jakiś sposób do powstania i rozwoju tego dokumentu. W porządku alfabetycznym:
Byron A Jeff <byron@cc.gatech.edu>
Markus Rex <msrex@suse.de>
Miquel van Smoorenburg <miquels@cistron.nl>
Theo de Raadt jest odpowiedzialny za oryginalny kod yp-klienta. Swen Thuemmler przeniósł ten kod na Linux-a jak również procedury yp do biblioteki libc (znowu na podstawie pracy Theo). Thorsten Kukuk napisał od zera procedury NIS(YP) i NIS+ dla GNU libc 2.x.
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. Zaznaczam, że nie jestem biegły w terminologii kryptografii więc wystepują tu pewnie jakieś dziwne wyrażenia, które powinienem zapisać inaczej. Jeśli wiesz jak to ma brzmieć, napisz;
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 /JTZ/.
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 sie na nią zapisać, to
wyślij list o treści subscribe jtz Imię Nazwisko na adres
majordomo@ippt.gov.pl
Zmiany w tym dokumencie wprowadzone przez tłumacza to odwołania do polskich serwerów ftp.
W dokumencie tym występuje wiele akronimów. Oto te najważniejsze i krótkie wyjaśnienie:
DataBase Management - biblioteka funkcji, które obsługują pary z kluczem (-key-content) w bazie danych.
Dynamically Linked Library - biblioteka dołączana do wykonywalnego programu podczas jego działania.
"Nazwa-klucz", która jest używana przez klientów NIS, aby zlokalizować pasujący serwer NIS, który udostepnia klucz dla domeny (domainname key). Zauważ proszę, że to nie koniecznie ma coś wspólnego z domeną DNS-ową (nazwą maszyny).
File Transfer Protocol - protokół używany do przenoszenia plików pomiędzy komputerami.
Name services library - biblioteka odwołań "name service" (getpwnam, getservbyname itp.) na unix-ach SVR4. GNU libc używa tego do funkcji NIS (YP) i NIS+.
Socket services library - biblioteka odwołań obsługi gniazdek (socket, bind, listen itp.) na unix-ach SVR4.
Network Information Service - serwis który udostępnia informację, która musi być znana poprzez sieć dla wszystkich maszyn w sieci. W standardowej bibliotece Linux-a - libc - jest obsługa dla NIS, która dalej zwana jest "tradycyjnym NIS-em".
Network Information Service (Plus :-) - właściwie to taki NIS na sterydach. NIS+ został zaprojektowany przez Sun Microsystems Inc. jako zastępca NIS-a z lepszym bezpieczeństwem i lepszą obsługą _wielkich_ instalacji.
Jest to nazwa projektu, który powstał z NIS+, YP i Switch i zarządzany jest przez Petera Erikssona <peter@ifm.liu.se>. Między innymi zawiera powtórną implementację kodu NIS-a (=YP), która używa funkcjonalności Name Service Switch biblioteki NYS.
Name Service Switch. Plik /etc/nsswitch.conf określa kolejność, w jakiej sprawdza się pewne żądane informacje.
Remote Procedure Call. Procedury RPC pozwalają programom w C odwoływać się do procedur na odległej maszynie poprzez sieć. Kiedy ludzie mówią o RPC to najczęściej mają na myśli wariant Sun-a RPC.
Yellow Pages(TM) - zarejestrowany znak towarowy w UK firmy British Telecom plc.
Transmission Control Protocol/Internet Protocol. To protokół komunikacji danych najczęściej używany na maszynach unix-owych.
Następujące 3 linijki to cytat z podręcznika Sun(TM) System & Network Administration Manual:
"NIS znany był wcześniej jako Sun Yellow Pages (YP), ale nazwa Yellow
Pages(TM) jest zarejestrowanym znakiem towarowym w Zjednoczonym
Królestwie firmy British Telecom plc i nie może być używana bez zgody."
NIS to skrót od Network Information Service. Celem jego jest dostarczanie informacji, która musi być znana na sieci dla wszystkich komputerów. Informacja, która najprawdopodobniej będzie dystrybuowana to:
Jeśli na przykład informacja o twoim haśle jest zapisana w bazie haseł NIS, będziesz mógł się zalogować na wszystkich maszynach na sieci, które mają uruchomionego klienta NIS.
Sun jest znakiem towarowym Sun Microsystems, Inc. licencjonowane dla SunSoft, Inc.
Wybór pomiędzy "tradycyjnym NIS" czy kodem NIS w bibliotece NYS jest wyborem pomiędzy lenistwem i rozwojem a elastycznością i zamiłowaniem do przygody.
Kod "tradycjnego NIS" jest w standardowej bibliotece C i istnieje już długo i czasem cierpi z powodu swojego wieku i pewnej nieelastyczności.
Kod NIS w bibliotece NYS wymaga rekompilacji biblioteki libc, aby włączyć do niej kod NYS (albo możesz wziąć już skompilowaną wersję libc od kogoś kto już ją skompilował).
Inną różnicą jest to, że "tradycyjny NIS" ma pewną obsługę NIS Netgroups, której NYS nie ma. Z drugiej strony NYS pozwala obsługiwać Shadow Passwords w sposób przezroczysty. "Tradycyjny NIS" nie obsługuje Shadow passwords przez NIS.
Zapomnij o tym wszystkim jeśli używasz nowej biblioteki GNU C 2.x (aka libc6). Ma ona rzeczywistą obsługę NSS (Name Switch Service), co czyni ją bardzo elastyczną oraz zawiera obsługę następujących map NIS/NIS+: aliases, ethers, group, hosts, netgroups, networks, protocols, publickey, passwd, rpc, services i shadow. Biblioteka GNU C nie ma żadnych problemów z shadow password przez NIS.
Wybór między NIS a NIS+ jest prosty - użyj NIS-a jeśli nie musisz używać NIS+ czy nie musisz stosować zaostrzonego bezpieczeństwa. Z NIS+ jest _o wiele_ więcej kłopotów jeśli chodzi o administrację (jest nim całkiem łatwo zarządzać od strony klienta, ale serwer to horror). Innym problemem jest fakt, że wsparcie dla NIS+ w Linux-ie jest ciągle w fazie rozwoju - potrzebujesz najnowszej biblioteki glibc, albo musisz poczekać na glibc 2.1. Istnieje wersja zastępcza glibc z obsługą NIS+ dla libc5.
W całej sieci musi być przynajmniej jedna maszyna działająca jako serwer NIS. Możesz zrobić więcej serwerów NIS, każdy dla innej "domeny" NIS - albo możesz mieć współpracujące serwery NIS, gdzie jeden ma być głównym serwerem NIS (master) a wszystkie inne są tak zwanymi slave NIS servers (to znaczy dla pewnej "domeny" NIS!) - albo możesz to pomieszać.
Serwery slave posiadają tylko kopię baz danych NIS i otrzymują te kopie od głównego serwera NIS kiedy tylko robione są jakieś zmiany w głównej bazie. W zależności od liczby komputerów w twojej sieci, możesz zdecydować się na instalację jednego lub większej ilości serwerów slave. Kiedy tylko serwer NIS jest unieruchamiany (goes down) albo jest zbyt wolny w odpowiedziach na żądania, klient NIS-a podłączony do tego serwera spróbuje znaleźć ten, który działa albo jest szybszy.
Bazy danych NIS są w tak zwanym formacie DBM, pochodzącym od baz
danych ASCII. Na przykład, pliki /etc/passwd i
/etc/group mogą być bezpośrednio zamienione na DBM przy
pomocy oprogramowania translacyjnego ASCII-na-DBM
("makedbm" - dostarczanym wraz z
serwerem). Główny serwer NIS powinien posiadać obie bazy - tak
ASCII jak i DBM.
Serwery slave zostaną powiadomione o każdej zmianie w mapach NIS, (poprzez program "yppush") i automatycznie uaktualnią owe zmiany, aby zsynchronizować swoje bazy danych. Klienci NIS nie muszą tego robić ponieważ oni zawsze łączą się z serwerem NIS, aby odczytać informacje zapisane w bazach danych DBM.
Stare wersje ypbind wysyłają adres rozgłoszeniowy (broadcast), aby znaleźć działający serwer NIS. Jest to niebezpieczne ponieważ każdy może zainstalować serwer NIS i odpowiedzieć na takie zapytanie. Nowsze wersje ypbind (3.3 czy mt) pobierają adres serwera z pliku konfiguracyjnego - i nie ma potrzeby wysyłania adresu rozgłoszeniowego.
NIS+ to nowa wersja "network information nameservice" z Sun-a. Największą różnicą pomiędzy NIS i NIS+ jest obsługa kodowania danych i autentykacja poprzez bezpieczne RPC w NIS+.
Model nazewnictwa w NIS+ jest zbudowany w postaci struktury drzewiastej. Każdy węzeł w drzewie odpowiada objektowi NIS+, których mamy sześć typów: katalog, pozycja (entry), grupa, dołączenie, tablica i prywatne.
Katalog NIS+, który tworzy podstawę przestrzeni nazw w NIS+ nazywa się katalogiem "root". Są dwa specjalne katalogi NIS+: org_dir i groups_dir. Katalog org_dir składa się z wszystkich tablic administracyjnych, takich jak passwd, hosts i mail_aliases. Katalog groups_dir składa się z grup objektów NIS+, które używane są do kontroli dostępu. Kolekcja org_dir, groups_dir i ich katalogów nadrzędnych to domena NIS+.
Aby móc uruchomić jakikolwiek z wymienionych poniżej programów, będziesz musiał uruchomić program /usr/bin/portmap. Niektóre dystrybucje mają skrypt uruchamiający ten demon w plikach startowych /sbin/init.d/ czy /etc/rc.d/. Wszystko co musisz zrobić, to uaktywnić go i zrestartować komputer. Przeczytaj dokumenctaję dostarczoną wraz z dystrybucją, aby się dowiedzieć jak to zrobić.
Portmapper RPC (portmap(8)) jest serwerem, który zamienia numery programowe RPC na numery portów protokołu TCP/IP (albo UDP/IP). Musi być on uruchomiony, aby móc używać na tej maszynie odwołań RPC (co właśnie robi oprogramowanie klienta NIS/NIS+) do serwerów RPC (takich jak serwer NIS czy NIS+). Kiedy serwer RPC jest startowany, poinformuje on portmap-a na których portach nasłuchuje, i jakimi numerami programowymi RPC może służyć. Kiedy klient chce odwołać się przez RPC do danego numeru programowego, najpierw skontaktuje się z portmap-em na maszynie serwerowej, aby określić numer portu, do którego należy wysłać pakiety RPC.
Normalnie, standardowe serwery RPC są startowane przez inetd(8), więc portmap musi działać zanim wystartuje inetd.
Dla bezpieczeństwa portmapper potrzebuje serwisu czasu (Time Service). Upewnij się czy serwis ten jest włączony w /etc/inetd.conf na wszystkich hostach:
#
# Time service is used for clock syncronization.
#
time stream tcp nowait nobody /usr/sbin/tcpd in.timed
time dgram udp wait nobody /usr/sbin/tcpd in.timed
WAŻNE: Nie zapomnij zresetować (kill -HUP) inetd-a po dokonaniu zmian jego pliku konfiguracyjnym !
Aby odpowiedzieć na to pytanie musisz rozważyć dwa przypadki:
W pierwszym przypadku potrzebujesz tylko programów klienta (ypbind,
ypwhich, ypcat, yppoll, ypmatch). Najważniejszym programem jest
ypbind. Program ten musi być uruchomiony przez cały czas, to
znaczy powinien zawsze pojawiać się w liście procesów. Jest to
proces-demon i musi być startowany z plików startowych
systemu (np. /etc/init.d/nis, /sbin/init.d/ypclient, /etc/rc.local,
/etc/rc.d/init.d/ypbind).
Jak tylko ypbind jest uruchomiony, twój komputer staje się
klientem NIS.
W drugim przypadku, jeśli nie masz serwerów NIS, to będziesz także
potrzebował programu serwera NIS (zwykle zwanego ypserv). Sekcja
Konfiguracja serwera NIS
opisuje jak ustawić serwer NIS na twojej maszynie Linux-owej przy
pomocy implementacji "ypserv" Petera Erikssona i
Thorstena Kukuka.
Zauważ, że od wersji 0.14 implementacja ta obsługuje koncept
master-slave omówiony w sekcji 4.1.
Jest jeszcze jeden darmowy serwer NIS, zwany "yps", napisany przez Tobiasa Rebera w Niemczech, który obsługuje koncept master-slave, ale ma inne ograniczenia i nie jest wspierany od długiego czasu.
Biblioteka systemowa "/usr/lib/libc.a" (wersja 4.4.2 i nowsza) czy biblioteka dzielona "/lib/libc.so.x" zawierają wszystkie odwołania systemowe niezbędne do skompilowania oprogramowania klienta i serwera NIS. Do biblioteki glibc 2.x, potrzebujesz także biblioteki /lib/libnsl.so.1.
Niektórzy podawali, że NIS działa tylko z "/usr/lib/libc.a" w wersji 4.5.21 i nowszej, więc jeśli chcesz być zabezpieczony, to nie używaj starszych bibliotek. Oprogramowanie klienckie NIS można znaleźć w:
Adres Katalog Nazwa Pliku
ftp.kernel.org /pub/linux/utils/net/NIS yp-tools-2.2.tar.gz
ftp.kernel.org /pub/linux/utils/net/NIS ypbind-mt-1.4.tar.gz
ftp.kernel.org /pub/linux/utils/net/NIS ypbind-3.3.tar.gz
ftp.kernel.org /pub/linux/utils/net/NIS ypbind-3.3-glibc5.diff.gz
ftp.uni-paderborn.de /linux/local/yp yp-clients-2.2.tar.gz
ftp.icm.edu.pl /pub/Linux/sunsite/system/network/admin yp-clients-2.2.tar.gz
[Od tłumacza: Jeśli jesteś w Polsce, to użyj raczej tego ostatniego adresu.]
Jak już masz oprogramowanie, postępuj zgodnie z instrukcjami przychodzącymi wraz z nim. yp-clients 2.2 nadaje się do użytku z libc4 i libc5 aż do 5.4.20. libc 5.4.21 i glibc 2.x potrzebują yp-tools 1.4.1 lub nowsze. Nowe yp-tools 2.0 będą działąć z każdą biblioteką libc dla Linux-a. Ponieważ był pewien błąd w kodzie NIS-a nie powinieneś używać libc 5.4.21-35. W zamian użyj 5.4.36 lub nowszej, inaczej większość programów YP nie będzie działała. ypbind 3.3 będzie działać także ze wszystkimi bibliotekami. Jeśli używasz gcc 2.8.x lub nowszej wersji, egcs lub glibc 2.x, to powinieneś nałożyć łatę ypbind-3.3-glibc5.diff na ypbind 3.3. Nie powinieneś nigdy używać ypbind z yp-clients 2.2. ypbind-mt jest nowym, wielowątkowym demonem; do działania potrzebuje jądra w wersji 2.2 i glibc 2.1 lub nowszej.
Zakładając, że udało ci się skompilować oprogramowanie jesteś gotowy do zainstalowania go. Odpowiednim miejscem dla demona ypbind będzie /usr/sbin. Niektórzy mogą ci mówić, że nie potrzebujesz ypbind w systemie z NYS. Jest to błędne, gdyż ypwhich i ypcat potrzebują go.
Będziesz to oczywiście musiał zrobić jako root. Inne programy (ypwhich, ypcat, yppoll, ypmatch) powinny znaleźć się w katalogu dostępnym dla wszystkich użytkowników, zwykle /usr/bin.
Nowsze wersje ypbind posiadają plik konfiguracyjny - /etc/yp.conf. Możesz
tam na stałe wpisać serwer NIS - więcej informacji w
podręczniku systemowym - man ypbind(8).
Potrzebujesz tego pliku także do NYS. Przykład:
ypserver voyager
ypserver defiant
ypserver ds9
Jeśli system może rozwinąć nazwę bez NIS, to mógłbyś użyć tej nazwy. W przeciwnym wypadku musisz użyć adresu IP. W ypbind 3.3 jest błąd; tylko ostatni adres zostanie użyty (ds9 w tym przykładzie). Wszystkie pozostałe pozycje zostaną zignorowane. ypbind-mt obsłuży to poprawnie i użyje tego, który odpowiedział pierwszy.
Dobrym pomysłem będzie przetestowanie ypbind przed wprowadzeniem go do plików startowych. Aby to zrobić postępuj tak:
/bin/domainname domena.nis
gdzie domena.nis powinno być jakimś łańcuchem zwykle _NIE_
związanym z DNS-em twojej maszyny! Powodem tego jest, to że
zewnętrznym włamywaczom jest wtedy trochę trudniej zdobyć bazę
danych z hasłami z twojego serwera NIS. Jeśli nie wiesz jaka jest
nazwa domeny NIS w twojej sieci, to zapytaj swojego administratora.
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100007 2 udp 637 ypbind
100007 2 tcp 639 ypbind
lub
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100007 2 udp 758 ypbind
100007 1 udp 758 ypbind
100007 2 tcp 761 ypbind
100007 1 tcp 761 ypbind
Zależnie od wersji ypbind jakiej używasz.
program 100007 version 2 ready and waiting
lub
program 100007 version 1 ready and waiting
program 100007 version 2 ready and waiting
Wynik ten zależy od wersji ypbind, którą zainstalowałeś. Ważną
wiadomością jest tutaj tylko "version 2".
W tym momencie powinieneś móc używać programów klienckich NIS takich jak ypcat itp... Na przykład "ypcat passwd.byname" poda ci całą bazę danych NIS z hasłami.
WAŻNE: Jeśli pominąłeś test, to upewnij się, że ustawiłeś nazwę domeny i stworzyłeś katalog
/var/yp
Ten katalog MUSI istnieć, aby ypbind poprawnie się uruchomił.
Aby sprawdzić czy nazwa domeny została ustawiona poprawnie użyj programu /bin/ypdomainname z pakietu yp-tools 2.2. Używa on funkcji yp_get_default_domain(), która jest bardziej restrykcyjna. na przykład nie pozwala na domenę "(none)", która jest domyślną w Linux-ie. i stwarza wiele kłopotów.
Jeśli test się powiódł możesz teraż zmodyfikować pliki w skryptach startowych twojego systemu, tak żeby ypbind startował podczas startu systemu. Upewnij się, że nazwa domeny zostanie ustawiona zanim wystartujesz ypbind.
Cóż, to wszystko. Zresetuj komputer i obserwuj komunikaty podczas startu, żeby zobaczyć czy ypbind właściwie wystartował.
Do sprawdzania nazw musisz ustawić (albo dodać) "nis", do linii kolejności sprawdzania w pliku /etc/host.conf. Przeczytaj stronę podręcznika systemowego "resolv+.8", aby dowiedzieć się więcej szczegółów.
Na maszynach klienckich dodaj następującą linię w /etc/passwd:
+::::::
Możesz także użyć znaczków +/-, aby włączyć/wyłączyć lub zmienić użytkowników. Jeśli chcesz wyłączyć użytkownika guest dodaj -guest do swojego pliku /etc/passwd. Chcesz użyć innej powłoki (np. ksh) dla użytkownika "linux"? Nie ma problemu, po prostu dodaj do swojego /etc/passwd "+linux::::::/bin/ksh" (bez cudzysłowiów). Pola, których nie chcesz zmieniać muszą pozostać puste. Mógłbyś także użyć Netgroups do kontroli użytkowników.
Na przykład, aby pozwolić tylko miquels, dth, ed i wszystkim członkom grupy sieciowej sysadmin na login, ale żeby dane o kontach wszystkich innych użytkowników były dostępne użyj:
+miquels:::::::
+ed:::::::
+dth:::::::
+@sysadmins:::::::
-ftp
+:*::::::/etc/NoShell
Zauważ, że na Linuksie możesz także zmienić pole z hasłem, jak to zrobiliśmy w tym przykładzie. Usunęliśmy także login "ftp", tak więc nie jest on już znany i anonimowe ftp nie będzie działać.
Netgroup wyglądałoby tak:
sysadmins (-,software,) (-,kukuk,)
WAŻNE: Cecha netgroup jest zaimplementowana począwszy od libc 4.5.26. Jeśli masz wersję biblioteki wcześniejszą niż 4.5.26, każdy użytkownik w bazie danych z hasłami ma dostęp do twojego Linux-a jeśli masz uruchomiony "ypbind".
Wszystko co jest potrzebne, to to, żeby plik konfiguracyjny (/etc/yp.conf) wskazywał na poprawn-y/e serwer(y). Także plik konfiguracyjny Name Service Switch (/etc/nsswitch.conf) musi być poprawnie ustawiony.
Powinieneś zainstalować ypbind. Nie jest on potrzebny dla libc, ale narzędzia NIS(YP) go potrzebują.
Jeśli chcesz używać cechy włączania/wyłączania użytkownika (+/-guest/+@admins), musisz użyć "passwd: compat" i "group: compat" w pliku nsswitch.conf. W tym przypadku musisz użyć "shadow: files nis"
Źródła NYS są częścią źródeł libc 5. Kiedy uruchamiasz configure, za pierwszym razem odpowiedz "NO" na pytanie "Values correct", potem odpowiedz "YES", na "Build a NYS libc from nys".
Glibc używa "tradycyjnego NIS", tak więc musisz uruchomić ypbind. Plik konfiguracyjny Name Service Switch (/etc/nsswitch.conf) musi być poprawnie ustawiony. Jeśli używasz trybu kompatybilnego z passwd, shadow czy group, musisz dodać "+" na końcu tego pliku, i możesz używać cechy włączania/wyłączania użytkownika. Konfiguracja jest dokładnie taka sama jak pod Solaris-em 2.x.
Plik /etc/nsswitch.conf określa kolejność w jakiej odbywa się sprawdzanie kiedy pojawi się żądanie pewnej informacji, tak samo jak plik /etc/host.conf, który określa kolejność sprawdzania adresów hostów. Na przykład linia:
hosts: files nis dns
określa, że funkcje sprawdzania adresów hostów powinny najpierw szukać w lokalnym pliku /etc/hosts, potem w bazie NIS i na końcu w DNS-ie (/etc/resolv.conf i named), gdzie jeśli nie znaleziono odpowiedzi pojawia się błąd. Ten plik musi być czytelny dla każdego użytkownika. Więcej informacji znajdziesz na stronie podręcznika systemowego nsswicth.5 lub nsswitch.conf.5.
Poprawny plik /etc/nsswitch.conf dla NIS:
#
# /etc/nsswitch.conf
#
# An example Name Service Switch config file. This file should be
# sorted with the most-used services at the beginning.
#
# Pozycja '[NOTFOUND=return]' oznacza, że poszukiwania powinny
# zakończyć się, jeśli poszukiwania w poprzedniej pozycji nic nie
# dały. Zauważ, że jeśli poszukiwania nie powiodły się z
# jakichś innych powodów (jak nie odpowiadający serwer NIS), to
# poszukiwania są kontynuowane z następną pozycją.
#
# Poprawne pozycje to:
#
# nisplus Use NIS+ (NIS version 3)
# nis Use NIS (NIS version 2), also called YP
# dns Use DNS (Domain Name Service)
# files Use the local files
# db Use the /var/db databases
# [NOTFOUND=return] Stop searching if not found so far
#
passwd: compat
group: compat
# Jeśli masz libc5 musisz użyć shadow: files nis
shadow: compat
passwd_compat: nis
group_compat: nis
shadow_compat: nis
hosts: nis files dns
services: nis [NOTFOUND=return] files
networks: nis [NOTFOUND=return] files
protocols: nis [NOTFOUND=return] files
rpc: nis [NOTFOUND=return] files
ethers: nis [NOTFOUND=return] files
netmasks: nis [NOTFOUND=return] files
netgroup: nis
bootparams: nis [NOTFOUND=return] files
publickey: nis [NOTFOUND=return] files
automount: files
aliases: nis [NOTFOUND=return] files
passwd_compat, group_compat i shadow_compat są obsługiwane tylko przez glibc 2.x. Jeśli nie ma zasad (rules) shadow w /etc/nsswitch.conf, glibc użyje zasady (rule) passwd do sprawdzenia. Jest więcej modułów szukania dla glibc jak hesoid. Więcej informacji znajdziesz w dokumentacji glibc.
Shadow passwords przez NIS to zawsze zły pomysł. Straciłeś ochronę, którą daje shadow passwords i tylko niewiele bibliotek C ma obsługę takiej kombinacji. Dobrym pomysłem na uniknięcie przesyłania shadow paswords przez NIS jest umieścić tylko użytkowników lokalnego systemu do pliku /etc/shadow. Usuń pozycje dotyczące użytkowników NIS z bazy shadow i umieść hasło spowrotem w passwd. Tak że możesz używać shadow dla logowania się jako root i normalnych haseł dla użytkowników NIS. Ma to tę zaletę, że będzie to działało z każdym klientem NIS.
Jedyną biblioteką jaka obsługuja kombinację Shadow passwords prze NIS jest libc 2.x. Libc5 nie potrafi tego obsłużyć. Libc5 skompilowana z obsługą NYS posiada trochę kodu na ten temat. Jednak kod ten jest miernej wartości i nie działa poprawnie z wszystkimi pozycjami shadow.
Solaris nie obsługuje takiej kombinacji w ogóle.
PAM nie obsługuje Shadow Passwords przez NIS,a szczególnie pam_pwdb/libpwdb. Jest to poważny problem dla użytkowników RedHat 5.x. Jeśli masz glibc i PAM, to musisz zmienić pozycje w plikach /etc/pam.d/*. Zamień wszystkie zasady dotyczące pam_pwdb na moduły pam_unix_*. Z powodu błędu w module pam_unix_auth.so nie będzie on zawsze działał.
Przykładowy plik /etc/pam.d/login może wyglądać tak:
#%PAM-1.0
auth required /lib/security/pam_securetty.so
auth required /lib/security/pam_unix_auth.so
auth required /lib/security/pam_nologin.so
account required /lib/security/pam_unix_acct.so
password required /lib/security/pam_unix_passwd.so
session required /lib/security/pam_unix_session.so
Do autoryzacji potrzbujesz modułu pam_unix_auth.so, do kont pam_unix_acct.so, do haseł pam_unix_passwd.so a do sesji pam_unix_session.so.
Klient dla NIS+ na Linuxa został napisany dla biblioteki GNU C 2. Jest także wersja dla libc5, ponieważ większość komercyjnych aplikacji jest z nią skompilowane i nie można ich przekompilować z biblioteką glibc. Z biblioteką tą i NIS+ są problemy: Nie mógłbyś dołączyć statycznie tej biblioteki do programów i programy skompilowane z tą biblioteką nie będą działały z inną.
Musisz ściągnąć i skompilować najnowszą bibliotekę GNU C 2.1 dla platformy Intela albo biblioteki GNU C 2.1.1 dla platform 64-bitowych. Potrzebujesz także systemu opartego na glibc jak RedHat 5.x, Debian 2.x czy SuSE Linux 6.x.
W każdej dystrybucji musisz przekompilować kompilator gcc/g++, libstdc++ i ncurses. W RedHat musisz wiele zmienić w konfiguracji PAM. W SuSE 6.0 musisz przekompilować pakiet Shadow Passwords.
Oprogramowanie klienckie NIS+ można pobrać z:
Adres Katalog Nazwa Pliku
ftp.funet.fi /pub/gnu/funet libc-*, glibc-crypt-*,
glibc-linuxthreads-*
ftp.kernel.org /pub/linux/utils/net/NIS+ nis-utils-19990223.tar.gz
ftp.kernel.org /pub/linux/utils/net/NIS+ pam_keylogin-1.2.tar.gz
Dystrybucje oparte na glibc można ściągnąć z:
Adres Katalog
ftp.redhat.com /pub/redaht/redhat-5.2
ftp.debian.org /pub/debian/dists/stable
ftp.icm.edu.pl /pub/Linux/redhat
ftp.icm.edu.pl /pub/Linux/debian
[Od tłumacza: Jeśli jesteś w Polsce, to użyj dwóch ostatnich adresów.]
Aby skompilować bibliotekę GNU C postępuj zgodnie z instrukcjami dołączonymi do niej. Tutaj możesz znaleźć załataną libc5, opartą o źródła NYS i glibc zamiast standardowej libc5:
Adres Katalog Nazwa Pliku
ftp.kernel.org /pub/linux/utils/net/NIS+ libc-5.4.44-nsl-0.4.10.tar.gz
Powinieneś także zajrzeć do http://www.suse.de/~kukuk/linux/nisplus.html, aby zdobyć więcej informacji i najnowsze źródła.
WAŻNE: Aby ustawić klienta NIS+, przeczytaj dokumenctaję do NIS+ na Solaris-a, aby się dowiedzieć co zrobić po stronie serwera ! Dokument ten opisuje tylko co zrobić po stronie klienta !
Po zainstalowaniu nowej biblioteki libc i nis-tools stwórz listy uwierzytelniające dla nowego klienta na serwerze NIS+. Upewnij się, że działa portmap. Potem sprawdź czy na twoim Linux-ie jest ten sam czas co na serwerze. W bezpiecznym RPC masz tylko 3 minuty, w ciągu których listy uwierzytelniające są aktualne. Dobrym pomysłem jest uruchomienie na wszystkich hostach xntpd. Potem uruchom
domainname domena.nisplus
nisinit -c -H <serwer NIS+>
aby zainicjalizować zimny start file. Przeczytaj stronę podręcznika systemowego o nisinit i znajdź jego opcje. Upewnij się, że nazwa domeny będzie zawsze ustawiona po resecie. Jeśli nie wiesz jaka jest nazwa domeny w twojej sieci, zapytaj administratora.
Teraz powinieneś zmienić swój plik konfiguracyjny /etc/nsswitch.conf. Upewnij się, że jedynym serwisem po publickey jest nisplus ("publickey: nisplus") i nic więcej !
Potem uruchom keyserv i upewnij się, że zawsze będzie startowany jako następy demon po portmaperze podczas startu. Uruchom:
keylogin -r
aby zapisać tajny klucz (secretkey) root-a na twoim systemie. (Mam nadzieję, że dodałeś klucz publiczny dla nowego hosta na serwerze NIS+?).
"niscat passwd.org_dir" powinno pokazać ci teraz wszystkie pozycje w bazie danych z hasłami.
Kiedy użytkownik się loguje musi ustawić swój tajny klucz dla keyserv-a. Robi się to przez wywołanie "keylogin". Login z pakietu shadow zrobi to za użytkownika jeśli został skompilowany z biblioteką glibc 2.1. W przypadku login-u PAM musisz zainstalować pam_keylogin-1.2.tar.gz i zmodyfikować plik /etc/pam.d/login, tak aby używał pam_unix_auth, a nie pwdb, które nie obsługuje NIS+. Na przykład:
#%PAM-1.0
auth required /lib/security/pam_securetty.so
auth required /lib/security/pam_keylogin.so
auth required /lib/security/pam_unix_auth.so
auth required /lib/security/pam_nologin.so
account required /lib/security/pam_unix_acct.so
password required /lib/security/pam_unix_passwd.so
session required /lib/security/pam_unix_session.so
Plik /etc/nsswitch.conf określa kolejność w jakiej odbywa się sprawdzanie kiedy pojawi się żądanie pewnej informacji, tak samo jak plik /etc/host.conf, który określa kolejność sprawdzania adresów hostów. Na przykład linia:
hosts: files nis dns
określa, że funkcje sprawdzania adresów hostów powinny najpierw szukać w lokalnym pliku /etc/hosts, potem w bazie NIS i na końcu w DNS-ie (/etc/resolv.conf i named), gdzie jeśli nie znaleziono odpowiedzi, to zwracany jest błąd.
Poprawny plik /etc/nsswitch.conf dla NIS:
#
# /etc/nsswitch.conf
#
# An example Name Service Switch config file. This file should be
# sorted with the most-used services at the beginning.
#
# Pozycja '[NOTFOUND=return]' oznacza, że poszukiwania powinny
# zakończyć się, jeśli poszukiwania w poprzedniej pozcyji nic nie
# dały. Zauważ, że jeśli poszukiwania nie powiodły się z
# jakichś innych powodów (jak nie odpowiadający serwer NIS), to
# poszukiwania są kontynuowane z następną pozycją.
#
# Poprawne pozycje to:
#
# nisplus Use NIS+ (NIS version 3)
# nis Use NIS (NIS version 2), also called YP
# dns Use DNS (Domain Name Service)
# files Use the local files
# db Use the /var/db databases
# [NOTFOUND=return] Stop searching if not found so far
#
passwd: compat
# dla libc5: passwd: files nisplus
group: compat
# dla libc5: group: files nisplus
shadow: compat
# dla libc5: shadow: files nisplus
passwd_compat: nisplus
group_compat: nisplus
shadow_compat: nisplus
hosts: nisplus files dns
services: nisplus [NOTFOUND=return] files
networks: nisplus [NOTFOUND=return] files
protocols: nisplus [NOTFOUND=return] files
rpc: nisplus [NOTFOUND=return] files
ethers: nisplus [NOTFOUND=return] files
netmasks: nisplus [NOTFOUND=return] files
netgroup: nisplus
bootparams: nisplus [NOTFOUND=return] files
publickey: nisplus [NOTFOUND=return] files
automount: files
aliases: nisplus [NOTFOUND=return] files
Dokument ten opisuje tylko jak skonfigurować serwer NIS oparty na "ypserv".
Oprogramowanie serwera NIS można znaleźć na:
Adres Katatlog Nazwa pliku
ftp.kernel.org /pub/linux/utils/net/NIS ypserv-1.3.6.tar.gz
Możesz także zajrzeć do http://www.suse.de/~kukuk/linux/nis.html po więcej informacji i najnowsze źródła.
Ustawianie serwera jest takie samo dla tradycyjnego NIS i NYS.
Skompiluj oprogramowanie, aby wygenerować programy "ypserv" i "makedbm". Możesz skonfigurować program ypserv, aby używał pliku securenets albo tcp_wrappers. Tcp_wrappers sa o wiele bardziej elastyczne, ale wielu ludzi ma z tym poważne kłopoty. A niektóre pliki konfiguracyjne mogą powodować przeciek w pamięci (?? memory leak: może autor miał na myśli brak pamięci ?? - lack of memory). Jeśli masz problemy z ypserv skompilowanym dla tcp_wrappers, to przekompiluj go do używania pliku securenets. ypserv --version, pokaże jaką masz wersję.
Jeśli uruchamiasz
swój serwer jako główny, określ jakie pliki mają być dostępne
przez NIS i wtedy dodaj lub usuń odpowiednie pozycje w
/var/yp/Makefile. Zawsze powinieneś zaglądać do plików
Makefile i zapoznać się z opcjami na początku pliku.
Pomiędzy ypserv 1.1 a 1.2 była jedna duża zmiana. Od wersji 1.2,
ypserv "keszuje" uchwyty plików (file handles). Oznacza
to, że zawsze kiedy stworzysz nową mapę musisz wywołać makedbm z
opcją -c. Upewnij się, że używasz nowego
/var/yp/Makefile z ypserv 1.2 lub nowszego, albo dodaj
opcję -c do makedbm w pliku Makefile. Jeśli tego nie zrobisz,
ypserv będzie wciąż używał starych map zamiast uaktualnionych.
Teraz zmodyfikuj /var/yp/securenets i
/etc/ypserv.conf.
Więcej informacji na stronach podręcznika man o ypserv(8) i
ypserv.conf(5).
Upewnij się czy portmapper (portmap(8)) jest uruchomiony i uruchom
serwer ypserv. Polecenie:
% rpcinfo -u localhost ypserv
powinno pokazać coś takiego:
program 100004 version 1 ready and waiting
program 100004 version 2 ready and waiting
Linii z "version 1" może nie być; zależnie od wersji ypserv i konfiguracji, której używasz. Tylko w klientach SunOS 4.x jest to wymagane.
Teraz wygeneruj bazę danych NIS (YP). Na serwerze głównym uruchom:
% /usr/lib/yp/ypinit -m
na slave upewnij się, że działa ypwhich -m. Potem uruchom
% /usr/lib/yp/ypinit -s masterhost
To wszystko, twój serwer już działa.
Jeśli masz większe problemy, możesz wystartować ypserv i
ypbind i
trybie śledzenia (debug) w innym oknie. Komunikaty pojawiające się
w tym trybie powinny ci powiedzieć co jest nie tak.
Jeśli musisz uaktualnić mapę, to uruchom make w katalogu
/var/yp na master serwerze NIS. Uaktualni to mapę jeśli
plik źródłowy jest nowszy i prześle pliki do serwerów slave. Nie
używaj ypinit do uaktualniania map.
Możesz zmodyfikować crontab root-a *na serwerze slave* i dodać poniższe linie:
20 * * * * /usr/lib/yp/ypxfr_1perhour
40 6 * * * /usr/lib/yp/ypxfr_1perday
55 6,18 * * * /usr/lib/yp/ypxfr_2perday
To upewni nas, że mapy NIS są aktualne, nawet jeśli jakieś uaktualnienie zostało przeoczone z powodu np. wyłączenia serwera slave podczas modyfikowania bazy głównej.
Serwer slave możesz dodać kiedykolwiek później. Najpierw upewnij się, że nowy serwer slave ma pozwolenie na kontaktowanie się z masterem NIS. Potem uruchom
% /usr/lib/yp/ypinit -s masterhost
na nowym slavie. Na serwerze master dodaj nazwę nowego serwera
slave do pliku /var/yp/ypservers uruchom make w
</var/yp, aby uaktualnić mapy.
Jeśli chcesz ograniczyć dostęp do twojego serwera NIS będziesz musiał ustawić serwer NIS także jako klienta przez uruchomienie ypbind i dodanie pozycji + do /etc/passwd _w połowie_ (halfway) pliku z hasłami. Funkcje biblioteczne zignorują wszystkie normalne pozycje po pierwszej pozycji NIS i i resztę informacji zdobędą przez NIS.W ten sposób obsługiwany jest dostęp NIS. Przykład:
root:x:0:0:root:/root:/bin/bash
daemon:*:1:1:daemon:/usr/sbin:
bin:*:2:2:bin:/bin:
sys:*:3:3:sys:/dev:
sync:*:4:100:sync:/bin:/bin/sync
games:*:5:100:games:/usr/games:
man:*:6:100:man:/var/catman:
lp:*:7:7:lp:/var/spool/lpd:
mail:*:8:8:mail:/var/spool/mail:
news:*:9:9:news:/var/spool/news:
uucp:*:10:50:uucp:/var/spool/uucp:
nobody:*:65534:65534:noone at all,,,,:/dev/null:
+miquels::::::
+:*:::::/etc/NoShell
[ PO tej linii normalni użytkownicy ! ]
tester:*:299:10:Just a test account:/tmp:
miquels:1234567890123:101:10:Miquel van Smoorenburg:/home/miquels:/bin/zsh
Użytkownik tester będzie istniał, ale będzie miał ustawioną powłokę na /etc/NoShell. miquels będzie miał normalny dostęp.
Alternatywnie mógłbyś zmodyfikować plik /var/yp/Makefile i ustawić
NIS, tak żeby używał innego źródłowego pliku z hasłami. W dużych
systemach NIS-owe pliki z hasłami i grupami znajdują się zwykle w
/etc/yp/. Jeśli tak zrobisz, to zwykłe narzędzia jak
passwd, chfn, adduser nie będą już działać i będziesz
potrzebował specjalnych własnoręcznie zrobionych wersji.
Chociaż yppsswd, ypchsh i ypchfn będą oczywiście działać.
Aby ustawić serwer NIS "yps" przeczytaj poprzedni paragraf. Ustawianie serwera "yps" jest podobne, _ale_ nie dokładnie takie samo, więc uważaj jak będziesz stosował instrukcje dla "ypserv-a" do "yps" ! "yps" nie jest wspierany przez żadnego autora i zawiera parę dziur w bezpieczeństwie. Na prawdę nie powinieneś go używać !
Oprogramowane do serwera NIS "yps" można znaleźć na:
Adres Katalog Nazwa pliku
ftp.lysator.liu.se /pub/NYS/servers yps-0.21.tar.gz
ftp.kernel.org /pub/linux/utils/net/NIS yps-0.21.tar.gz
Program rpc.ypxfrd służy do przyspieszania przesyłu bardzo dużych map z serwera master na slave. Jeśli serwer NIS slave otrzyma informacje, że jest nowa mapa wystartuje program ypxfr, aby ją pobrać. ypxfr przeczyta zawartość mapy z serwera master przy pomocy funkcji yp_all(). Proces ten może zająć do kilku minut jeśli są bardzo duże mapy, które muszą być zapisane przez biblioteki bazy danych.
Program rpc.ypxfrd przyspiesza proces pobrania przez pozwolenie serwerowi slave na skopiowanie mapy serwera master zamiast tworzenia jej od nowa. rpc.ypxfrd używa protokołu do przesyłu plików na podstawie RPC, tak że nie ma potrzby na tworzenie nowej mapy.
rpc.ypxfrd może być uruchomiony przez inetd. Ale ponieważ startuje bardzo wolno, powinien byc startowany przez ypserv. Musisz wystartować rpc.ypxfrd tyko na serwerze NIS master.
Kiedy użytkownicy zmieniają swoje hasła, baza danych NIS z hasłami i przypuszczalnie inne bazy danych NIS, które zależą od bazy danych z hasłami, powinny być uaktualnione. Program "rpc.yppasswdd" jest serwerem, który odpowiedzialny jest za zmiany haseł i uaktualnianie baz danych NIS. rpc.yppasswdd jest zintegrowany z ypserv. Nie potrzebujesz starszych oddzielnych yppasswd-0.9.tar.gz czy yppasswd-0.10.tar.gz i nie powinieneś ich już używać. rpc.yppasswdd z ypserv 1.3.2 ma pełną obsługę shadow. yppasswd jest teraz częścią yp-tool-.2.2.tar.gz.
Musisz uruchomić rpc.yppaswdd tylko na serwerze NIS master.
Domyślnie użytkownicy nie mają prawa zmieniać swoich "pełnych
nazw" czy powłoki. Możesz na to pozwolić opcją -e chfn
czy -e chsh.
Jeśli twoje pliki passwd i shadow nie są umieszczone w innym katalogu niż /etc, musisz dodać opcję -D. Na przykład jeśli umieściłeś wszystkie pliki źródłowe w /etc/yp i chcesz udostępnić swoim użytkownikom możliwość zmiany powłoki, musisz uruchomić rpc.yppasswdd z następującymi parametrami:
rpc.yppasswdd -D /etc/yp -e chsh
lub
rpc.yppasswdd -s /etc/yp/shadow -p /etc/yp/passwd -e chsh
Nic więcej do zrobienia już nie zostało. Musisz się tylko upewnić,
że rpc.yppasswdd używa tych samych plików co
/var/yp/Makefile. Błędy będą logowane za pomocą syslog.
Jeśli wszystko jest w porządku (jak powinno być), powinieneś móc zwersyfikować instalację kilkoma prostymi poleceniami. Zakładając na przykład, że twój plik z hsłami jest dostarczany prze NIS, polecenie
% ypcat passwd
powinno pokazać ci zawartość pliku z hasłami z NIS. Polecenie
% ypmatch userid passwd
(gdzie userid jest login-em jakiegoś użytkownika) powinno pokazać ci pozycję w pliku z hasłami dotyczącą tego użytkownika. Programy "ypcat" i "ypmatch" powinny być zawarte w dystrybucji NIS lub NYS.
Jeśli użytkownik nie może sie zalogować, uruchom następujący program po stronie klienta:
#include <stdio.h>
#include <pwd.h>
#include <sys/types.h>
int
main(int argc, char *argv[])
{
struct passwd *pwd;
if(argc != 2)
{
fprintf(stderr,"Stosowanie: getwpnam nazwa-uzytkownika\n");
exit(1);
}
pwd=getpwnam(argv[1]);
if(pwd != NULL)
{
printf("name.....: [%s]\n",pwd->pw_name);
printf("password.: [%s]\n",pwd->pw_passwd);
printf("user id..: [%d]\n", pwd->pw_uid);
printf("group id.: [%d]\n",pwd->pw_gid);
printf("gecos....: [%s]\n",pwd->pw_gecos);
printf("directory: [%s]\n",pwd->pw_dir);
printf("shell....: [%s]\n",pwd->pw_shell);
}
else
fprintf(stderr,"Nie znaleziono uzytkownika \"%s\"!\n",argv[1]);
exit(0);
}
Uruchomienie tego programu z użytkownikiem jako parametr, spowoduje wyświetlenie wszystkich informacji jakie uzyska funkcja getpwnam dla tego użytkownika. Powinno ci to pokazać, która pozycja jest niepoprawna. Najpopularniejszym problemem jest zapisanie "*" w polu hasła.
Razem z biblioteką GNU C 2.1 (glibc 2.1) dostarczane jest narzędzie getent. Użyj tego programu zamiast powyższego na systemie z tą biblioteką. Możesz spróbować:
getent passwd
lub
getent passwd login
yp_match: clnt_call:
RPC: Unable to receive; errno = Connection refused
i użytkownicy zarejestrowani w bazie danych NIS nie mogą się
zalogować. Spróbuj zalogować się jako root i zakończ ypbind i uruchom
go ponownie. Uaktualnienie do ypbind 3.3 lub
nowszego także powinno pomóc.
Na większość twoich pytań powinieneś już uzyskać odpowiedź. Jeśli wciąż masz jakieś pytania bez odpowiedzi to możesz wysłać list na grupę
comp.os.linux.networking
albo na którąś z polskich grup
pl.comp.security
lub
pl.comp.os.linux
lub
pl.comp.os.linux.siec(i)
Albo skontaktuj się z którymś z autorów tego HOWTO.
doc-linux-pl-2002.06.14.orig/html/PCMCIA-HOWTO.pl.html 0100664 0001750 0001750 00000303736 06770264140 020511 0 ustar coven coven
Card Services dla Linux-a to kompletny pakiet obsługujący PCMCIA. Zawiera on zestaw ładowalnych modułów jądra, które tworzą wersję aplikacji interfejsowych dla PCMCIA Card Services, zestaw sterowników klientów dla specyficznych kart, oraz demona-menedżera do kart, który może reagować na wkładanie kart i ich wyjmowanie poprzez ładowanie i usuwanie odpowiednich modułów. Obsługuje on także tzw. "gorące wymiany" kart PCMCIA, tak że karty mogą być wkładane i wyjmowane w każdej chwili.
Oprogramowanie to jest w ciągłym rozwoju. Zawiera przypuszczalnie błędy i należy go używać ostrożnie. Zrobię co w mojej mocy, żeby poprawić błędy zgłaszane do mnie, ale jeśli nie powiesz mi o takim, to mogę się o nim nigdy nie dowiedzieć. Jeśli już użyjesz tego oprogramowania, mam nadzieję, że wyślesz mi swoje doświadczenia, złe czy dobre !
Jeśli masz jakieś sugestie na temat polepszenia tego dokumentu, daj mi znać dhinds@hyper.stanford.edu.
Copyright (c) 1996, 1997 David A. Hinds
Dokument tez może być reprodukowany lub dystrybuowany bez mojej wyraźnej zgody. Wersje zmodyfikowane, włączając tłumaczenia na inne języki, mogą być wolno dystrybuowane, zakładając, że są jasno identyfikowane jako takie, i ta uwaga o prawach autorskich jest w nich zawarta.
Dokument ten może być zawarty w dystrybucjach komercyjnych bez mojej wyraźnej zgody. Ponieważ nie jest to wymagane chciałbym być powiadomiony o takowych działaniach. Jeśli zamierzasz rozprowadzać ten dokument jako pracę wydawaną, skontaktuj się ze mną, aby upewnić się, że masz najnowszą wersję.
Dokument ten jest rozprowadzany "takim jakim jest", bez wyraźnych czy wynikających gwarancji. Używaj informacji zawartych tutaj na swoje własne ryzyko.
Bieżącą główną wersją Card Services jest wersja 2.9, a pomniejsze uaktualnienia czy poprawki błędów są numerowane jako 2.9.1, 2.9.2 itd.
Kod źródłowy najnowszej wersji jest dostępny pod adresem hyper.stanford.edu. Nazywa się pcmcia-cs-2.9.?.tar.gz. Będzie tam przeważnie kilka wersji. Z reguły trzymam najnowszą podwersję wersji głównej. Nowe wersje główne mogą zawierać względnie nieprzetestowany kod, tak więc trzymam także najnowszą wersję poprzedniej wersji głównej jako względną stabilną wersję, do której można się cofnąć; bieżącą taką wersją jest 2.8.23. To już zależy od ciebie czy zdecydujesz się na wersję najnowszą z 2.9.x czy na 2.8.23; w pliku CHANGES znajdują się najważniejsze różnice.
Adres hyper.stanford.edu jest mirrorowany pod adresem
sunsite.unc.edu w katalogu /pub/Linux/kernel/pcmcia.
[Od tłumacza.]Serwer ten z kolei jest mirrorowany w Polsce pod adresem
ftp.icm.edu.pl.
Postaram się też umieszczać główne wersje na tsx-11.mit.edu
w katalogu /pub/linux/packages/laptops/pcmcia teraz i
później.
Jeśli nie czujesz się na siłach, żeby skompilować sterowniki do PCMCIA, w wersji bieżącej są zawarte pre-kompilowane sterowniki w najpopularniejszych dystrybucjach: Slackware, Red Hat, Caldera i Yggdrasil, między innymi.
Kod ten powinien działać na prawie wszystkich laptopach nadających się do Linux-a. Obsługiwane są wszystkie popularne kontrolery PCMCIA włączając w to Intel, Cirrus, Vadem, VLSI, Ricoh i Databook. Kontrolery ustawiane używane w IBM i Toshiba-ch także są obsługiwane. Doki (docks) kart PCMCIA dla systemów typu desktop także powinny działać tak długo, dopóki są tego typu, że wkłada się je bezpośrednio do szyny ISA, niż poprzez kontrolery SCSI-PCMCIA czy IDE-PCMCIA.
Kontroler Motorola 6AHC05GA używany w niektórych laptopach Hyundaia nie jest obsługiwany. Kontrolery ustawiane w HP Omnibook 600 nie są obsługiwane. Kontroler mostka PCI-CardBus (od SMC, Ricoh-a, Cirrus-a i TI) jest obecnie obsługiwany tylko w przypadku trybu 16-bitowego, a i tak obsługa ta jest ciągle trochę eksperymentalna.
Wersja obecna zawiera sterowniki dla różnych kart ethernetowych, sterownik do modemu, kart portów szeregowych, niektórych kontrolerów SCSI, sterownik do kart ATA/IDE oraz sterowniki do kart pamięci które powinny obsługiwać większość kart SRAM i niektóre karty flash. Plik SUPPORTED.CARDS zawarty w każdej wersji Card Services zawiera wszystkie karty jakie działają w przynajmniej jednym właściwym systemie.
Prawdopodobieństwo tego, że karta nie wymieniona w tym pliku będzie działać zależy od typu tej karty. Zasadniczo wszystkie modemy powinny działać z zawartym sterownikiem. Niektóre karty sieciowe mogą działać jeśli są wersjami OEM karty obsługiwanej. Inne typy kart IO (bufory ramkowe, karty dźwiękowe itd.) nie będą działać dopóki ktoś nie napisze odpowiednich sterowników.
Niestety, nikt mi z reguły nie płaci za pisanie sterowników, tak
więc jeśli chcesz mieć sterownik do swojej ulubionej karty,
będziesz przypuszczalnie musiał zrobić część roboty na własną
rekę. W wersji idelanej, chciałbym się kierować w stronę modelu
zbliżonego do jądra Linux-a, gdzie będę głównie odpowiedzialny za
"rdzeń" kodu do PCMCIA a inni autorzy pisaliby sterowniki do
konkretnych urządzeń. W pliku SUPPORTED.CARDS wspomniane są
niektóre karty, dla których sterownik jest w trakcie pisania. Będę
się starał pomóc gdzie tylko mogę ale miej na uwadze, że śledzenie
(debugging) sterowników do urządzeń w jądrze poprzez e-mail nie
jest zbytnio efektywne.
Producenci zainteresowani pomocą w tworzeniu obsługi ich urządzeń mogą się ze mną skontaktować w sprawie konkretów.
Kiedyś zajmowałem się bazą danych i listą dyskusyjną na temat użytkowników Linux-a na PCMCIA. Ostatnio zmieniłem swoją stronę WWW z informacjami na temat PCMCIA w stronę "HyperNews", ze zbiorem wiadomości na temat PCMCIA w Linux-ie. Są listy na temat instalacji i konfiguracji, na temat różnych typów kart oraz na temat programowania i śledzenia (debug) pod PCMCIA. Strona z informacjami na temat PCMCIA jest pod adresem http://hyper.stanford.edu/HyperNews/get/pcmcia/home.html. Użytkownicy mogą ustawić sobie opcję informowania poprzez email o nowych odpowiedziach na konkretne pytania, albo o wszystkich nowych wiadomościach w danej kategorii. Mam nadzieję, że stanie się to użytecznym archwium informacji dla pytań, które wychodzą poza treść tego HOWTO.
Jest lista dyskusyjna, której tematem jest Linux na laptopie - lista "linux-laptop". Aby uzyskać więcej informacji, wyślij list zawierający słowo "help" na adres majordomo@vger.rutgers.edu. Aby zapisać się na tę listę, wyślij list zawierający łańcuch "subscribe linux-laptop" na ten sam adres. Lista ta może być dobrym forum dyskusyjnym na temat Linux-a na PCMCIA.
Na Stronie Domowej Linux-a na Laptopy http://www.cs.utexas.edu/users/kharker/linux-laptop znajduje się wiele odwołań do adresów, na których są informacje na temat konfigurowania Linux-a na konkretnych typach laptopów. Jest także przeszukiwalna baza danych na temat konfiguracji systemu.
Zanim zaczniesz, powinieneś pomyśleć czy rzeczywiście musisz samemu skompilować pakiet PCMCIA. Wszyskie popularne dystrybucje Linux-a są dostarczane wraz z pakietami zawierającymi skompilowane sterowniki dla PCMCIA. Ogólnie musisz tylko zainstalować od nowa sterowniki jeśli potrzebujesz jakiejś nowej cechy obecnych sterowników albo jeśli zaktualizowałeś czy przekonfigurowałeś jądro tak, że przestało być kompatybilne ze sterownikami przychodzącymi z dystrybucją. Chociaż kompilacja pakietu PCMCIA nie jest trudna technicznie, to wymaga jednak pewnego obycia z Linux-em.
Następujące elementy powinny być zainstalowane w twoim systemie zanim zaczniesz instalować PCMCIA:
Wersja najnowsza wymaga jądra w wersji 1.2.8 lub wyższej, albo jądra z serii testowych 1.3.30 lub wyższe, 1.3.38 jest definitywnie popsute, a 1.3.31 do 1.3.36 nie są przetestowane. Wymaga także względnie świeżej wersji narzędzi do modułów. Nie ma łat na jądro specyficznych dla PCMCIA.
Musiz mieć pełne drzewo źródeł jądra, nie tylko aktualny obraz jądra, aby skompilować pakiet PCMCIA. Moduły PCMCIA zawierają niektóre odwołania do plików ze źródeł jądra. O ile ty możesz chcieć skompilować nowe jądro, żeby usunąć niepotrzebne sterowniki, instalacja PCMCIA nie wymaga tego.
Bieżące stabilne wersje źródeł jądra oraz łaty do niego są
dostępne pod adresem
ftp://ftp.icm.edu.pl/pub/Linux/kernel/v2.0. Bieżąca wersja
narzędzi jest pod tym samym adresem w pliku modules-2.0.0.tgz.
Jądra w wersji rozwojowej znajdują się pod adresem
ftp://ftp.icm.edu.pl/pub/Linux/kernel/v2.1.
W pliku Documentation/Changes znajdują się opisy wersji
wszystkich rodzajów innych składników systemu, które są wymagane
dla tej wersji jądra. Możesz sprawdzić tę listę i upewnić się czy
twój system jest aktualny, szczególnie jeśli ostatnio
uaktualniałeś jądro. Jeśli używasz jądra 2.1, upewnij się, że
używasz poprawnej kombinacji bibliotek dzielonych i narzędzi do
modułów. Najnowsze wersje narzędzi do modułów, tak samo jak wersje
dla starszych jąder można znaleźć pod adresem
http://www.pi.se/blox/modules.
Jeśli planujesz używanie karty ethernetowej PCMCIA podczas konfigurowania twojego jądra powinieneś włączyć obsługę sieci, ale wyłącz obsługę zwykłych kart sieciowych, włączając w to "pocket and portable adapters". Sterowniki do kart sieciowych PCMCIA są zaimplementowane jako ładowalne moduły. Jakiekolwiek sterowniki wkompilowane w twoje jądro będą tylko zabierać miejsce.
Jeśli chcesz używać SLIP-a, PPP czy PLIP-a musisz albo skonfigurować twoje jądro z włączonymi tymi opcjami, albo użyć modułów ładowalnych tych sterowników. Niestety w jądrze w wersji 1.2.X nie można skompilować pewnych opcji jako moduły ładowalne (jak np. kompresja SLIP-a) więc najlepiej będzie jeśli wkompilujesz ten sterownik do jądra jeśli go potrzebujesz.
Jeśli chcesz używać kontrolera Token Ring do PCMCIA, musisz
wkompilować obsługę Token Ring do swojego jądra - "Token Ring
driver support", ale powinieneś wyłączyć CONFIG_IBMTR.
Jeśli chcesz używać kontrolera IDE PCMCIA, musisz włączyć opcję
CONFIG_BLK_DEV_IDE_PCMCIA, w jądrach w wersji 1.3.72 do
2.1.7. Starsze jądra nie obsługują urządzeń IDE. nowsze jądra nie
wymagają specjalnych ustawień.
Jeśli będziesz używał kontrolera SCSI PCMCIA, powinieneś włączyć
opcję CONFIG_SCSI podczas konfiguracji jądra. Włącz także
wszelkie sterowniki "top level" (dyski SCSI, taśmy, CD-ROM-y,
generic), których spodziewasz się używać. Wszystkie sterowniki
"low level" dla konkretnych kontrolerów powinny być wyłączone,
ponieważ będą tylko zajmować miejsce.
Jeśli chcesz zmodularyzować sterownik, który jest potrzebny do
urządzenia PCMCIA, musisz zmodyfikować plik /etc/pcmcia/config,
aby podać, które moduły mają być załadowane dla których typów
kart. Na przykład, jeśli sterownik szeregowy jest
zmodularyzowany, wtedy mógłbyś zmienić definicję urządzenia
szeregowego na:
device "serial_cs" class "serial" module "misc/serial", "serial_cs"
Pakiet ten zawiera narzędzie do podawania statusu karty oparte na
X11 - cardinfo. Narzędzie to jest oparte na wolno
dystrybuowanym interfejsie zwanym "Forms Library", które
będziesz musiał zainstalować przed stworzeniem cardinfo.
Dystrybucja binarna jest na
hyper.stanford.edu. Są tam wersje a.out oraz ELF.
Będziesz także musiał mieć wszystkie normalne pliki nagłówkowe pod
X i biblioteki.
Oto streszczenie procesu instalacji:
make config w nowym katalogu pcmcia-cs-2.9.?make all, potem make install./etc/pcmcia
odpowiednio dla twojego systemu.Jeśli planujesz zainstalować jakieś dodatkowe sterowniki klienta nie zawarte w dystrybucji PCMCIA, rozpakuj każdy z nich w głównym katalogu źródeł PCMCIA. Potem postępuj zgodnie z normalnymi instrukcjami kompilacji. Dodatkowe sterowniki zostaną skompilowane i zainstalowane automatycznie.
Uruchomienie make config zapyta o kilka opcji
konfiguracyjnych i sprawdzi twój system, aby zweryfikować czy
spełnia on wszystkie wymagania instalacji obsługi PCMCIA. W
większości przypadków, będziesz po prostu akceptował wszystkie
domyślne opcje. Upewnij się, że dokładnie sprawdziłeś komunikaty
wyjściowe w razie błędów.
Jeśli kompilujesz zestaw PCMCIA do instalacji na inną maszynę,
podaj alternatywny katalog docelowy kiedy zostaniesz zapytany
przez skrypt konfiguracyjny. Powinna to być ścieżka bezwzględna.
Wszystkie narzędzia do PCMCIA zostaną zainstalowane względem tego
katalogu. Będziesz mógł następnie "zarchiwizować" ten katalog
poleceniem tar i skopiować go na maszynę docelową, a
następnie rozpakować względem jej katalogo głównego, aby
zainstalować wszystko we właściwym miejscu.
Jeśli "cross-kompilujesz" na innej maszynie, możesz podać alternatywne nazwy kompilatora i linkera. Może to być także pomocne na systemach z pomieszaną architekturą a.out i ELF. Skrypt zapyta także o dodatkowe opcje śledzenia dla kompilatora.
Niektóre z narzędzi wspierających (cardctl i cardinfo)
mogą być skompilowane w formie "safe" (bezpiecznej) lub
"trusting" (ufającej). Forma bezpieczna nie pozwala
użytkownikom innym niż root na modyfikację konfiguracji karty.
Forma ufająca pozwala zwykłemu użytkownikowi na zawieszenie,
odwieszenie i reset karty oraz na zmianę bieżącej konfiguracji.
Skrypt konfiguracyjny zapyta cię czy chcesz skompilować narzędzia
jako "safe" czy "trusting"; wartością
domyślną jest "safe".
Jest kilka opcji konfiguracji jądra które mają wpływa na narzędzia do PCMCIA. Skrypt konfiguracyjny może je wywnioskować z działającego jądra (najpopularniejszy przypadek). Alternatywnie, jeśli kompilujesz do instalacji na inną maszynę może przeczytać konfigurację z drzewa źródeł jądra, albo każda opcja może być podana interaktywnie.
Uruchomienie make all a potem make install stworzy i
następnie zainstaluje moduły do jądra i programy narzędziowe.
Moduły do jądra są instalowane w /lib/modules/<wersja>/pcmcia.
Programy cardmgr i cardctl są instalowane w /sbin.
Jeśli tworzony jest cardinfo, to instalowany jest on w
/usr/bin/X11.
Pliki konfiguracyjne zostaną zainstalowane w /etc/pcmcia.
Jeśli instalujesz na starej wersji, twoje stare pliki
konfiguracyjne zostaną zarchiwizowane przed skasowaniem ich.
Zachowanym skryptom zostaną nadane rozszerzenia w stylu
*.~1~, *.~2~.
Jeśli nie wiesz jakiego typu jest twój kontroler, to możesz użyć
narzędzia probe z podkatalogu cardmgr, aby go
wykryć. Są dwa główne typy: Databook TCIC-2 i kompatybilne z
Intel i82365SL.
Demon na poziomie użytkownika obsługuje włożenie i
wyjęcie karty. Nazywa się on cardmgr. Jest podobny w
funkcjonowaniu do wcześniejszej wersji pcmciad Barry'ego
Jaspana. Cardmgr czyta plik konfiguracyjny opisujący znane
karty PCMCIA z /etc/pcmcia/config. W pliku tym zawarte
jest jakie zasoby mogą być zaalokowane dla użycia przez urządzenia
PCMCIA, i mogą być zmodyfikowane dla twojego systemu. Zobacz
stronę w podręczniku systemowym "man" na temat pcmcia, aby
dowiedzieć się więcej na temat tego pliku.
Niektóre dystrybucje Linux-a, włączając Slackware, używają systemu
skryptów a'la BSD. Jeśli istnieje plik /etc/rc.d/rc.M, to
twój system zalicza się do tej grupy.
Skrypt rc.pcmcia, zainstalowany w /etc/rc.d
kontroluje startowanie i wyłączanie systemu PCMCIA.
make install użyje polecenia probe, aby wykryć typ
twojego kontrolera i odpowiednio zmodyfikować rc.pcmcia.
Powinieneś dodać do skryptu startowego /etc/rc.d/rc.M
linię, która wywołuje skrypt startowy PCMCIA, np. tak:
/etc/rc.d/rc.pcmcia start
Właściwie nie ma znaczenia, gdzie umieścisz ten plik, tak długo
jak sterowniki PCMCIA są startowane po syslogd.
Red Hat, Caldera i Debian mają ten właśnie system. Jeśli masz
katalog /etc/init.d albo /etc/rc.d/init.d, to
twój system jest w tej grupie. Skrypt rc.pcmcia zostanie
zainstalowany jako /etc/rc.d/init.d/pcmcia, lub
/etc/init.d/pcmcia. Nie ma potrzeby edytowania żadnego
skryptu startowego, aby włączyć PCMCIA: zostanie to zrobione
automatycznie.
Jeśli istnieje katalog /etc/sysconfig, wtedy zostanie
utworzony oddzielny plik konfiguracyjny /etc/sysconfig/pcmcia
z opcjami startowymi. Jeśli musisz zmienić jakiekolwiek opcje
modułów (jak PCIC= czy PCIC_OPTS=) modyfikuj raczej ten
plik konfiguracyjny aniżeli właściwy skrypt startowy PCMCIA. Plik
ten nie zostanie skasowny przez kolejne instalacje.
Niektóre wcześniejsze wersje używały katalogu
/etc/sysconfig/pcmcia-scripts zamiast /etc/pcmcia
na tych platformach. Wersja bieżąca natomiast używa /etc/pcmcia
dla wszystkich systemów, a istniejący
/etc/sysconfig/pcmcia-scripts przeniesie do
/etc/pcmcia.
Pakiet Card Services powinien automatycznie zapobiegać alokacji
portów IO i przerwań, które są już używane przez inne urządzenia.
Spróbuje on także wykryć konflikty z nieznanymi urządzeniami, ale
nie jest to w pełni godne zaufania. W niektórych przypadkach,
muisz wyraźnie podać zasoby, które mają być niedostępne dla danego
urządzenia w pliku /etc/pcmcia/config.opts.
Oto niektóre ustawienia zasobów dla specyficznych typów laptopów.
Niektóre kontrolery PCMCIA mają opcjonalne zalety, które mogą być zaimplementowane w danym systemie, ale nie muszą. Generalnie jest niemożliwe dla sterownika gniazdka (socket driver), aby wykryć czy te zalety są zaimplementowane. Sprawdź stronę w podręczniku systemowym na temat swojego sterownika, aby zobaczyć jakie opcjonalne zalety mogą być włączone.
W kilku przypadkach polecenie probe nie będzie w stanie
wykryć automatycznie typu twojego kontrolera. Jeśli masz system
Halikan NBD 486, to jego kontroler TCIC-2 znajduje się w
niezwykłym miejscu: będziesz musiał zmodyfikować rc.pcmcia, aby
załadować moduł tcic oraz ustawić PCIC_OPTS na
tcic_base=0x2C0.
Sterowniki gniazda typu "low level" tcic i i82365 mają
liczne parametry do timing-ów szyny, które może będzie trzeba
ustawić dla systemów ze szczególnie szybkimi procesorami. Symptomy
problemów z timing-ami zawierają problemy z wykryciem karty,
zawiśnięcia przy dużym załadowaniu systemu, duże średnie błędów,
albo zła wydajność urządzeń. Sprawdź odpowiednie strony w
podręczniku systemowym, aby dowiedzieć się więcej szczegółów. A
tu jest krótkie podsumowanie:
cmd_time, który
określa długość cyklu szyny PCMCIA. Szybkie systemy 486 (np.
DX4-100) wydają się zwiększać wydajność przy zwiększeniu tego
parametru z domyślnej wartości 6 na 12 czy 16.fast_pci, który
powinien być ustawiony jeśli szybkość szyny PCI jest większa niż
25 MHz.async_clock zmienia względne taktowanie szyny PCMCIA i cykle
szyny host. Ustawienie tego parametru spowoduje dodanie stanów
oczekiwania na niektóre operacje. Chociaż jeszcze nie słyszałem o
jakimś laptopie, który by tego potrzebował.pcmcia_core posiada parametr cis_speed,
który zmienia prędkość pamięci używaną dla dostępu do Card
Information Structure (CIS). Na niektórych systemach z szybkimi
zegarami szynowymi, zwiększanie tego parametru (czyli zwalnianie
dostępu do kart) może przynieść pożytek przy problemach z
rozpoznaniem karty.i82365 z parametrem extra_sockets ustawionym na 1.Wszystkie te opcje powinny być skonfigurowane przez modyfikowanie
początku pliku /etc/rc.d/rc.pcmcia. Na przykład:
# Albo i82365 albo tic PCIC=i82365 # Wstaw tu parametry timing-ów dla sterownika gniazd PCIC_OPTS="cmd_time=12" # Wstaw tu opcje pcmcia_core CORE_OPTS="cis_speed=500"
Oto niektóre ustawienia timing-ów dla specyficznych sytemów:
freq_bypass=1 cmd_time=8.cmd_time=12.cmd_time=16.W niektórych systemach używających kontrolera Cirrusa, włączając
NEC Versa M, BIOS ustawia kontroler w specyficzny stan
zawieszenia podczas startu systemu. W tych systemach, polecenie
probe nie powiedzie się. Jeśli tak się zdarzy, zmodyfikuj plik
/etc/rc.d/rc.pcmcia ręcznie tak:
# Wstaw tu parametry timing-ów dla sterownika gniazd PCIC=i82365 # Wstaw tu opcje pcmcia_core PCIC_OPTS="wakeup=1"
Skrypt konfiguracyjny normalnie upewni się czy moduły PCMCIA są
kompatybilne z twoim jądrem. Tak więc, problemy podczas ładownia
modułów wskazuje z reguły na to, że użytkownik ingerował w jakiś
sposób w normalny proces instalacji. Niektóre z tych problemów są
wysyłane bezpośrednio na konsolę Linux-a. Inne błędy są zapisywane
w pliku "log-file", zwykle jest to /usr/adm/messages albo
/var/log/messages. W zależności od konfiguracji twojego
syslogd, niektóre komunikaty mogą być zapisane do innych plików,
które zwykle znajdują się także w /usr/adm czy
var/log. Aby wyśledzić problem, upewnij się, że
sprawdziłeś obie lokalizacje.
Niektóre moduły PCMCIA wymagają serwisów jądra, które mogą, ale
nie muszą być obecne, zależnie od konfiguracji jądra. Na przykład,
sterowniki kart SCSI wymagają skonfigurowanej obsługi SCSI w
jądrze, a sterowniki sieci wymagają skonfigurowania sieci w
jądrze. Jeśli w jądrze brakuje potrzebnego serwisu insmod
może twierdzić, że są niezdefiniowane symbole i nie załadować
modułu.
Jeśli insmod zwraca błąd "wrong version", oznacza to, że
moduł był skompilowany dla innej wersji jądra niż to, które akurat
działa. Może to się pojawić jeśli moduły skompilowane na jednej
maszynie są kopiowane na drugą z inną konfiguracją, albo jeśli
jądro jest rekonfigurowane po tym, jak pakiet PCMCIA został
zainstalowany.
Innym źródłem błędów podczas ładowana modułów może być to, że
moduły i jądra były skompilowane z różnymi ustawieniami
CONFIG_MODVERSIONS. Jeśli moduł z wkompilowanym sprawdzaniem
wersji jest ładowany do jądra bez sprawdzania wersji, insmod
zwróci błąd "undefined symbols".
Ostatecznie, względnie nowe wersje binutils są niekompatybilne ze
starszymi wersjami narzędzi do modułów, i mogą powodować, że są
zwracane takie właśnie błędy. Najczęstszym symptomem jest błąd o
niezdefiniowaniu gcc_compiled. Jeśli masz takie błędy,
odśwież narzędzia do modułów do najnowszej wersji, dostępnych z
ftp.icm.edu.pl.
W większośći wypadków sterownik do gniazd (i82365 albo
tcic) automatycznie wykryje i wybierze odpowiednie
przerwanie, aby sygnalizować zmiany statusu karty. Automatyczne
wyszukiwanie przerwania nie działa na niektórych kontrolerach
kompatybilnych z Intel-em, włączając Cirrus-a i niektóre IBM
ThinkPad. Jeśli urządzenie nie jest aktywne w czasie sprawdzania,
jego przerwanie może także pojawić się jako niedostępne. W takich
przypadkach sterownik gniazd może wybrać przerwanie które jest
używane przez inne urządzenie.
W sterownikach i82365 i tcic można używać opcji
irq_list aby ograniczyć ilość wyszukiwanych przerwań. Lista
ta ogranicza zbiór przerwań, które mogą być użyte przez karty
PCMCIA oraz do monitorowania zmian statusu karty. Opcja
cs_irq może być użyta, aby wyraźnie określić przerwanie,
którego należy użyć do monitorowania zmian statusu karty.
Jeśli nie możesz znaleźć numeru przerwania, które działa, jest
jeszcze tryb statusu "polled": oba - i82365 i tcic
zaakceptują opcję poll_interval=100, aby sprawdzać zmiany
statusu karty raz na sekundę. Opcja ta powinna być także używana
jeśli w twoim systemie brakuje dostępnych przerwań dla kart
PCMCIA. Szczególnie w systemach z więcej niż jednym kontrolerem
PCMCIA, nie ma zbytnio sensu w przeznaczaniu przerwań na
monitorowanie zmian statusu kart.
Wszystkie te opcje powinny być ustawiane w linii PCIC_OPTS= w
pliku /etc/rc.d/rc.pcmcia albo /etc/sysconfig/pcmcia
zależnie od twojego systemu.
Domyślnie, sterowniki PCMCIA alokują okna pamięci w przestrzeni
0xC0000-0xFFFFF, po sprawdzeniu czy nie ma w niej jakichś
konfliktów z ROM-em czy innymi urządzeniami. To okno pamięci jest
podane w pliku /etc/pcmcia/config.opts. Sprawdzanie ma
miejsce przy pierwszej próbie skonfigurowania nowej karty.
Procedura sprawdzania nie jest idioto-odporna, więc możliwe jest
niezidentyfikowanie konfliktu. Jeśli obszar ten jest używany przez
inne urządzenia w twoim systemie, karty mogą nie zostać
zidentyfikowane poprawnie. Przy układach które to obsługują,
konflikt może też powstawać przy przesłanianiu tego obszaru
pamięci.
Klasycznym symptomem problemu z konfiguracją okna pamięci jest zidentyfikowanie wszystkich kart jako karty pamięci. W nadzwyczajnych przypadkach konflikt taki może powstać z jakimś krytycznym serwisem systemowym, co może powodować zawieszenia czy restarty. Jeśli podejrzewasz taki konflikt, sprawdź najpierw czy wyłączone jest przesłanianie ROM-u w ustawieniach twojego sprzętu. Znalezienie dobrego okna może wymagać trochę eksperymentów. Kilka alternatywnych okien to: 0xD0000-0xDFFFF, 0xC9000-0xCFFFF i 0xD8000-0xDFFFF.
Jeśli masz sterowniki DOS-owe do PCMCIA, możesz zobaczyć jakich
obszarów pamięci one używają. Zauważ, że adresy pamięci w DOS-ie
są często podawane w formie segmentów, która to obcina ostatnią
cyfrę szesnastkową (tak, że adres bezwzględny 0xD0000 byłby podany
jako 0xD000. Upewnij się, że dodałeś tę jedną cyfrę kiedy
wpisywałeś wartość do pliku /etc/pcmcia/config.opts.
Jeśli problem z identyfikacją karty nie został rozwiązany dopasowywaniem okien pamięci, to prawdopodobnie jest to problem z "timing-ami"
Dla mnie, dystrybucja binariów jest bardzo niewygodna. Jest to sprawa skomplikowana ponieważ niektóre zalety mogą być podane dopiero w czasie kompilacji, oraz dlatego, że moduły PCMCIA są zależne od "poprawnej" konfiguracji jądra. Więc musiałbym przypuszczalnie dystrybułować prekompilowane moduły wraz z odpowiednimi wersjami jąder. Idąc dalej, prekompilowane moduły są najbardziej potrzebne kiedy instalujemy Linux-a od początku. To z reguły wymaga ustawienia PCMCIA tak, żeby można jej było użyć w procesie instalacji dla konkretnej dystrybucji Linux-a. Każda dystrybucja Linux-a ma własną procedurę, i nie jest dla mnie wykonalnym udostępniać dyskietki "boot" i "root" chcociażby tylko dla tych najbardziej popularnych kombinacji sterowników i dystrybucji.
PCMCIA jest teraz częścią większości ważniejszych dystrybucji, włączając Red Hat, Caldera, Slackware, Yggdrasil, Craftworks oraz Nascent Technology.
No cóż, po pierwsze, to on wcale nie jest taki wielki. Wszystkie moduły sterowników razem wzięte zajmują jakieś 200k. Programy narzędziowe dodają jeszcze jakieś 70k, a rzeczy w /etc/pcmcia zajmują jakieś 30k. Podczas działania, rdzeń modułów PCMCIA zabiera około 48k pamięci systemowej. Demon cardmgr z reguły jest wyswapowywany oprócz momentów kiedy karty są wsadzane lub wyjmowane. Całkowita objętość pakietu nie wiele różni się od implementacji Card Services pod DOS-a.
W porównaniu z DOS-owymi "włącznikami", może się to wydawać trochę przesadzone, szczególnie dla ludzi, którzy nie planują używać tych wszystkich zalet jakie posiada PCMCIA, jak np. zarządzanie zasilaniem czy "gorące wymiany". "Włączniki" mogą być malutkie ponieważ generalnie obsługują one ograniczoną ilość kontrolerów PCMCIA. Jeśli ktoś miałby napisać autentycznie "ogólny" "włącznik" do modemu, skońyczłoby się na tym, że pojawiłaby się tam większość funkcji z Card Services, aby obsłużyć karty od różnych sprzedawców oraz pełny zakres różnych wariantów kontrolerów PCMCIA.
Demon cardmgr normalnie wydaje sygnał dźwiękowy (beep) kiedy
karta jest wsadzana, a ton tego dźwięku informuje nas o statusie
nowo włożonej karty. Dźwięk wysoki a po nim niski informuje, że
karta została zidentyfikowana, ale z jakiegoś powodu nie mogła
zostać skonfigurowana. Jeden dźwięk niski informuje, że karta nie
mogła zostać zidentyfikowana.
Jeśli wszystkie moduły są poprawnie załadowane, polecenie
lsmod daje mniej więcej taki wynik (bez włożonych kart):
Module: #pages: Used by: ds 2 i82365 3 pcmcia_core 7 [ds i82365]
Wszystkie moduły PCMCIA oraz demon cardmgr wysyłają
komunikaty o statusie do systemowego programu logującego. Będzie
to z reguły /var/log/messages albo
/usr/adm/messages. Powinno to być pierwsze miejsce, do
którego należy zajrzeć kiedy coś nie działa. Kiedy wysyłasz mi
wiadomość o jakimś błędzie, zawsze dołącz zawartość tego pliku.
Jeśli nie możesz znaleźć komunikatów z twojego systemu, to sprawdź
konfigurację w pliku /etc/syslogd.conf, aby zobaczyć do
jakich plików są one zapisywane. Cardmgr także zapisuje
niektóre bieżące informacje o urządzeniach dla każdego gniazda w
pliku /var/run/stab. Oto przykładowa zawartość tego
pliku:
Socket 0: Adaptec APA-1460 SlimSCSI 0 scsi aha152x_cs 0 sda 8 0 0 scsi aha152x_cs 1 scd0 11 0 Socket 1: Serial or Modem Card 1 serial serial_cs 0 ttyS1 5 65
W liniach opisujących urządzenia, pierwsze pole jest gniazdem, drugie - klasą urządzenia, trzecie - nazwą sterownika, czwarte jest używane, aby numerować urządzenia złożone (multiple devices) związane z tym samym sterownikiem, piąte - nazwą urządzenia, a ostatnie dwa pola są liczbą główną i poboczną dla danego urządzenia (jeśli jest dostępne).
Polecenie cardctl może służyć do sprawdzenia statusu gniazda,
albo jego konfiguracji. Oto przykładowy rezultat polecenia
"cardctl config":
Socket 0:
Socket 1:
Vcc = 5.0, Vpp1 = 0.0, Vpp2 = 0.0
Card type is memory and I/O
IRQ 3 is dynamic shared, level mode, enabled
Speaker output is enabled
Function 0:
Config register base = 0x0800
Option = 0x63, status = 0x08
I/O window 1: 0x0280 to 0x02bf, auto sized
I/O window 2: 0x02f8 to 0x02ff, 8 bit
Jeśli masz uruchomione X-y, to narzędzie cardinfo wyświetla
informacje o statusie wszystkich gniazd PCMCIA, podobną w
zawartości do "cardctl config".
Każde urządzenie PCMCIA jest przyporządkowane jakiejś klasie,
która opisuje jak powinno ono zostać skonfigurowane i jak nim
zarządzać. Klasy są związane ze sterownikami urządzeń w
/etc/pcmcia/config. Jest w tej chwili pięć klas urządzeń
IO (sieć, SCSI, CD-ROM, dyski fixed i szeregowe) oraz dwie klasy
urządzeń związanych z pamięcią (pamięć i FTL). Dla każdej
klasy są dwa skrypty w /etc/pcmcia/config: główny skrypt
konfiguracyjny (/etc/pcmcia/scsi dla urządzeń SCSI), i
skrypt z opcjami (/etc/pcmcia/scsi.opts). Skrypt główny
dla danego urządzenia zostanie wywołany, aby skonfigurować to
urządzenie kiedy karta jest wkładana, i żeby wyłączyć dane
urządzenie kiedy karta jest wyjmowana. Dla kart, z którymi jest
związane kilka urządzeń, skrypt zostanie wywołany dla każdego
urządzenia.
Skrypty konfiguracyjne zaczynają od wyciągnięcia pewnych
informacji o danym urządzeniu z pliku /var/run/stab.
Każdy skrypt konstruuje "adres urządzenia" w zmiennej ADDRESS,
który jest unikatowy dla urządzenia, które ma być skonfigurowane.
Jest to przekazywane do skryptu *.opts, który powinien
zwrócić informację o tym, jak dane urządzenie z podanego adresu
powinno zostać skonfigurowane. Dla niektórych urządzeń, adres ten
jest po prostu numerem gniazda. Dla innych, zawiera on dodatkowe
informacje, które mogą być przydatne do zadecydowania jak
skonfigurować dane urządzenie. Na przykład, urządzenia sieciowe
przekazują swój adres Ethernet-owy jako część swojego "adresu
urządzenia", tak żeby skrypt network.opts mógł tego użyć, aby
wybrać z kilku różnych konfiguracji.
Pierwszą częścią wszystkich adresów urządzeń jest bieżący schemat
PCMCIA. Parametr ten jest używany do obsługi złożonych zbiorów
konfiguracji urządzeń opartych na pojedynczej zewnętrznej zmiennej
podanej przez użytkownika. Jeden ze sposobów użycia schematów to
posiadanie schematu domowego, i schematu roboczego, który
zawierałby różne zbiory parametrów konfiguracji sieci. Schemat
bieżący jest wybierany przy pomocy polecenia cardctl.
Domyślnym schematem, jeśli żaden nie jest podany, jest "default".
Jako zasada ogólna podczas konfiguracji Linux-a na laptopa, urządzenia PCMCIA powinny być konfigurowane tylko przy pomocy skryptów do urządzeń PCMCIA. Nie próbuj konfigurować urządzenia PCMCIA w ten sam sposób co urządzenie dołączone na stałe.
Normalnie interfejsy sieciowe typu Ethernet na Linux-ie mają nazwy
eth0, eth1 itd. Kontrolery Token-Ring są obsługiwane
podobnie, chociaż nazywane są tr0, tr1 itd. Polecenie
ifconfig jest wywoływane, aby zobaczyć albo zmodyfikować stan
urządzenia sieciowego. Własnością Linux-a jest to, że interfejsy
sieciowe nie mają odpowiednich plików w katalogu /dev,
więc nie bądź zaskoczony, że nie możesz ich znaleźć.
Kiedy zostanie wykryta karta Ethernet-owa PCMCIA, zostanie jej
przydzielona pierwsza wolna nazwa interfejsu, którą będzie
przypuszczalnie eth0. Cardmgr wykona skrypt
/etc/pcmcia/network, aby skonfigurować ten interfejs.
Nie konfiguruj swojej karty Ethernet-owej w
/etc/rc.d/rc.inet1 ponieważ karty może nie być kiedy
skrypt ten jest wykonywany. Wstaw w komentarz wszystko, oprócz
urządzenia "loopback" w rc.inet1.
Jeśli twój system ma automatyczną procedurę konfiguracji sieci
powinieneś zwykle wskazać, że nie masz zainstalowanej karty sieciowej. W
zamian, zmodyfikuj plik /etc/pcmcia/network.opts, tak aby
odpowiadał twojej lokalnej konfiguracji sieci. Skrypty
network i network.opts zostaną wykonane tylko jeśli
twoja karta Ethernet-owa jest obecna.
Adres urządzenia przekazany do network.opts składa się, z
czterech pól oddzielonych przecinkami: schematu, numeru gniazda,
numeru urządzenia i sprzętowego adresu karty Ethernet. Numer
urządzenia jest używany do numerowania urządzeń dla kart, które
mają kilka interfejsów sieciowych, tak więc zwykle będzie to 0.
Jeśli masz kilka kart sieciowych używanych do różnych celów,
jedną z opcji byłoby skonfigurowanie kart oparte na numerze
gniazda, jak tu:
case "$ADDRESS" in
*,0,*,*)
# definicje dla karty sieciowej w gnieździe 0
;;
*,1,*,*)
# definicje dla karty sieciowej w gnieździe 1
;;
esac
Alternatywnie mogłyby one być skonfigurowane używając ich adresów sprzętowych, jak tu:
case "$ADDRESS" in
*,*,*,00:80:C8:76:00:B1)
# definicje dla karty D-Link
;;
*,*,*,08:00:5A:44:80:01)
# definicje dla karty IBM
esac
Aby automatycznie zamontować i odmontować system plików NFS,
najpierw dodaj te wszystkie systemy do /etc/fstab, ale w
opcjach podaj noauto. W network.opts wpisz
katalogi, w których mają być zamontowane systemy plików NFS w
zmiennej MOUNTS. Jest tu szczególnie ważne, aby użyć albo
cardctl albo cardinfo, aby wyłączyć kartę sieciową kiedy
montowanie z NFS jest w ten sposób skonfigurowane. Nie jest
możliwe czyste odmontowanie systemu plików NFS jeśli karta
sieciowa jest po prostu wyrzucana bez ostrzeżenia.
Dodatkowo oprócz zwykłych parametrów konfiguracyjnych dla sieci,
skrypt network.opts może podawać inne akcje, które mają mieć
miejsce po tym jak interfejs został skonfigurowany, albo przed
zamknięciem interfejsu. Jeśli w network.opts zdefiniowana
jest funkcja start_fn, zostanie ona wywołana przez skrypt
sieciowy po skonfigurowaniu interfejsu, a nazwa interfejsu
zostanie przekazana do tej funkcji jako pierwszy i jedyny
argument. Podobnie jeśli funkcja stop_fn jest zdefiniowana,
to zostanie ona wywołana przed zamknięciem interfejsu.
Typ transceiver-a można wybrać w network.opts przy pomocy
ustawienia IF_PORT. Może to być zarówno wartość numeryczna
jak we wcześniejszych wydaniach PCMCIA, jak i słowo kluczowe
identyfikujące typ transceiver-a. Wartościami domyślnymi we
wszystkich sterownikach sieciowych są: wykrywanie automatyczne
interfejsu jeśli jest to możliwe, a w przeciwnym razie - 10baseT.
Przy pomocy polecenia ifport można sprawdzić lub ustawić
bieżący typ transceiver-a. Np.:
# ifport eth0 10base2
#
# ifport eth0
eth0 2 (10base2)
Obecne wersje sterownika 3c589 próbują automatycznie wykryć połączenie sieciowe, ale nie jest to jeszcze w pełni funkcjonalne. Aby automatyczne wykrywanie działało, kabel sieciowy powinien tkwić w karcie podczas jej konfiguracji. Alternatywnym rozwiązaniem jest zmuszenie sterownika do sprawdzenia połączenia przy pomocy polecenia:
ifconfig eth0 down up
mem_speed=# dla modułu pcnet_cs. Przykład jak to
zrobić znajdziesz w standardowym pliku config.opts. Wypróbuj
prędkości do 1000 nanosekund.io_speed=#
podczas ładowania modułu pcmcia_core. Aby ustawić tę opcję
zmodyfikuj linijkę CORE_OPTS w skrypcie startowym.pcmcia_core
z opcją probe_io=0.
cardmgr identyfikuje
twoją kartę poprawnie i startuje jeden ze sterowników sieciowych.
Jeśli nie, to twoją kartę można wciąż użyć jeśli jest ona
kompatybilna z jakąś obsługiwaną. Najprościej jest to zrobić jeśli
karta "twierdzi", że jest kompatybilna z NE2000.cardmgr,
ale wciąż nie działa, to możliwy jest konflikt z przerwaniami lub
portami. Zobacz jakich zasobów używa karta (z logów systemowych) i
spróbuj wyłączyć je w /etc/pcmcia/config.opts, aby zmusić
kartę do użycia innych./etc/pcmcia/network.opts. Jednak z
drugiej strony błędnie skonfigurowane karty z reguły nie zainicjują
się i nie wyświetlą przy tym żadnych komunikatów/etc/pcmcia/network.opts,
zacznij od próby ping-owania innych systemów w tej samej podsieci
uzywając ich adresów IP. Potem spróbuj ping-ować swój gateway, i
maszyny w innych podsieciach. Ping-uj maszyny po ich adresach
tylko po zrobieniu tych prostych testów./etc/pcmcia/network.opts. Upewnij się, że twoje kable,
wtyczka "T", terminator itp. działają.
Linux-owe urządzenia szeregowe są dostępne poprzez specjalne pliki
/dev/cua* i /dev/ttyS*. Urządzenia ttyS* są
dla połączeń przychodzących, jak np. bezpośrednio podłączone
terminale. Urządzenia cua* są dla połączeń wychodzących, jak
np. modemy. Każdy fizyczny port szeregowy ma plik urządzenia ttyS i
cua: to już zależy od ciebie jaki plik wykorzystasz w swojej
aplikacji. Konfiguracja urządzenia szeregowego może być
sprawdzana i modyfikowana poprzez polecenie setserial.
Kiedy zostanie wykryta karta szeregowa lub modemowa PCMCIA, zostanie jej
przypisany pierwszy dostępny slot urządzenia szeregowego. Będzie to
zwykle /dev/ttyS1 (cua1) albo /dev/ttyS2
(cua2) w zależności od ilości wbudowanych portów szeregowych.
Urządzenie ttyS* jest raportowane w pliku /var/run/stab.
Domyślny skrypt z opcjami dla urządzenia szeregowego
/etc/pcmcia/serial.opts podłączy odpowiedni w ramach
udogodnienia plik urządzenia cua* do /dev/modem.
Nie próbuj używać /etc/rc.d/rc.serial do konfiguracji
modemu PCMCIA. Skrypt ten powinien być używany tylko do
konfiguracji urządzeń zainstalowanych na stałe. Modyfikuj
/etc/pcmcia/serial.opts jeśli chcesz jakichś specjalnych
ustawień dla swojego modemu. Nie próbuj także zmieniać portu IO
czy IRQ szeregowego urządzenia PCMCIA programem setserial.
Poinformowałoby to sterownik szeregowy, że karta jest w innym
miejscu, ale nie zmieniłoby ustawień sprzętowych karty. Skrypt
konfiguracyjny pozwala na podanie innych opcji setserial jak
rownież to czy linia dla tego portu powinna zostać dodana do
/etc/inittab.
Adres urządzenia przekazywany do serial.opts ma trzy pola
odzielone przecinkami: pierwsze jest schematem, drugie - numerem
gniazda, trzecie - numerem urządzenia. Numer urządzenia może
przyjmować kilka wartości dla kart, które obsługują wieloportowe
karty szeregowe, ale dla kart jednoportowych będzie to zawsze 0.
Jeśli zwykle używasz więcej niż jednego modemu PCMCIA, możesz podać
różne ustawienia oparte na numerze gniazda, jak tu:
case "$ADDRESS" in
*,0,*)
# Opcje dla modemu w gnieździe 0
LINK=/dev/modem0
;;
*,1,*)
# Opcje dla modemu w gnieździe 1
LINK=/dev/modem1
;;
esac
Jeśli modem PCMCIA jest już skonfigurowany gdy Linux startuje,
może zostać źle zidentyfikowany jako zwykły wbudowany port
szeregowy. Jest to nieszkodliwe, chociaż, kiedy sterowniki PCMCIA
przejmują kontrolę nad modemem, będzie mu nadany inny slot.
Najlepiej albo zmodyfikować /var/run/stab albo użyć
/dev/modem niż liczyć na to, że modem PCMCIA będzie
zawsze miał przypisane to samo urządzenie.
Jeśli skonfigurujesz twoje jądro, aby ładowało podstawowy
sterownik do portów szeregowych jako moduł, musisz zmodyfikować
/etc/pcmcia/config, aby wskazać, że ten moduł ma być
ładowany. Zmień pozycję urządzenia szeregowego tak:
device "serial_cs"
class "serial" module "char/serial", "serial_cs"
cardmgr identyfikuje kartę
poprawnie i startuje sterownik serial_cs. Jeśli nie, to
możliwe, że musisz dodać jeszcze jedną pozycję do swojego pliku
/etc/pcmcia/config tak, że zostanie ona poprawnie
zidentyfikowana. Więcej szczegółów w sekcji
3.6./etc/pcmcia/config.opts i wyłącz obszar
portów, który został zaalokowany dla modemu.setserial, aby zmienić IRQ na 0 i sprawdź czy modem działa.
Wywołanie takie wymusza na sterowniku użycie wolniejszego trybu
"polled" zamiast użycia przerwań. Jeśli to
naprawia problem, to całkiem możliwe, że jakieś inne urządzenie w
twoim systemie używa przerwania wybranego przez serial_cs.
Powinieneś dodać linię do pliku /etc/pcmcia/config.opts
wyłączające to przerwanie./etc/pcmcia/config,
aby zaznaczyć, że moduł serial powinien być załadowany przed
serial_cs.
Wszystkie obecnie obsługiwane karty PCMCIA SCSI są podobne w
działaniu do jednej z następujących kart: Qlogic, Adaptec
AHA-152X albo Future Domain TMC-16x0. Sterowniki PCMCIA są
stworzone przez dołączanie części specyficznego dla PCMCIA kodu (w
qlogic_cs.c, toaster_cs.c albo fdomain_cs.c) do
normalnego sterownika SCSI dla Linux-a.
Kiedy wykryty zostanie nowy kontroler SCSI, sterowniki do SCSI będą
szukać urządzeń. Sprawdź logi systemowe, aby upewnić się, że twoje
urządzenia zostały wykryte poprawnie. Nowym urządzeniom SCSI
zostanie przypisany pierwszy wolny plik urządzenia SCSI. Pierwszy
dysk SCSI będzie /dev/sda, pierwsza taśma SCSI będzie
/dev/st0, a pierwszy CD-ROM SCSI będzie /dev/scd0.
Rdzeniowe sterowniki PCMCIA są w stanie dowiedzieć się od jądra
1.3.X i późniejszego, które urządzenia SCSI są podłączone do karty. Będą one
wymienione w /var/run/stab, a skrypt konfiguracyjny SCSI
/etc/pcmcia/scsi będzie wywołany jeden raz dla każdego
dołączonego urządzenia, aby je albo skonfigurować albo wyłączyć.
Skrypt domyślny nie robi nic, aby skonfigurować urządzenia SCSI,
ale poprawnie odmontuje systemy plików z urządzeń SCSI kiedy karta
zostanie usunięta.
Sterowniki PCMCIA z jądrem w wersji 1.2.X nie potrafią automatycznie
wykryć , które urządzenia są przypisane konkretnemu
sterownikowi. W zamian za to, jeśli masz jedną normalną
konfigurację urządzenia SCSI, możesz wymienić te urządzenia w
/etc/pcmcia/scsi.opts. Na przykład: jeśli normalnie masz
dysk i CD-ROM SCSI, użyłbyś:
# Dla jądra 1.2: lista urządzeń dołączonych SCSI_DEVICES="sda scd0"
Adresy urządzeń przekazywane do scsi.opts są skomplikowane, z
powodu dużej ilości urządzeń, które mogą być dołączone do
kontrolera SCSI. Adresy składają się albo z sześciu albo z siedmiu
pól oddzielonych przecinkami: bieżący schemat, typ urządzenia,
numer gniazda, kanał SCSI, ID, numer logicznej jednostki i
opcjonalnie numer partycji. Typ urządzenia będzie jednym z: "sd"
dla dysków, "st" dla taśm, "sr" dla CD-ROM-ów i "sg" dla ogólnych
urządzeń SCSI. W większości ustawień, kanał SCSI oraz numer
logicznej jednostki będzie 0. Dla urządzeń dyskowych z kilkoma
partycjami, scsi.opts zostanie najpierw wywołany dla całego
urządzenia, z pięciopolowym adresem. Skrypt ten powinien ustawić
w zmiennej PARTS listę partycji. Potem, scsi.opts
zostanie wywołany dla każdej partycji, z dłuższymi -
siedmiopolowymi adresami. Na przykład: oto skrypt do konfiguracji
urządzenia dyskowego pod SCSI ID = 3 z dwiema partycjami oraz
CD-ROM pod SCSI ID = 6:
case "$ADDRESS" in
*,sd,*,0,3,0)
# To urządzenie ma dwie partycje...
PARTS="1 2"
;;
*,sd,*,0,3,0,1)
# Opcje dla partycji nr 1:
# zaktualizuj /etc/fstab i zamontuj system plików ext2 na /usr1
DO_FSTAB="y" ; DO_FSCK="y" ; DO_MOUNT="y"
FSTYPE="ext2"
OPTS=""
MOUNTPT="/usr1"
;;
*,sd,*,0,3,0,2)
# Opcje dla partycji nr 2:
# zaktualizuj /etc/fstab i zamontuj system plików ext2 na /usr2
DO_FSTAB="y" ; DO_FSCK="y" ; DO_MOUNT="y"
FSTYPE="msdos"
OPTS=""
MOUNTPT="/usr2"
;;
*,sr,*,0,6,0)
# Opcje dla CD-ROM-u ID = 6
PARTS=""
DO_FSTAB="y" ; DO_FSCK="n" ; DO_MOUNT="y"
FSTYPE="iso9660"
OPTS="ro"
MOUNTPT="/cdrom"
;;
esac
Jeśli twoje jądro nie posiada sterownika "top-level" (do dysku,
taśmy itp.) dla konkretnego urządzenia SCSI, wtedy urządzenie to
nie zostanie skonfigurowane przez sterownik PCMCIA. Jako efekt
uboczny, nazwa urządzenia w /var/run/stab będzie wyglądać
mniej więcej tak: "sd#nnnn", gdzie "nnnn" jest czterocyfrową
liczbą szesnastkową. Zdarza się to, jeśli cardmgr nie jest w
stanie przetłumaczyć ID urządzenia SCSI na odpowiadającą mu nazwę
urządzenia Linux-owego.
Możliwe jest zmodularyzowanie sterowników "top-level" do SCSI,
tak aby były ładowane tylko wtedy kiedy zostanie wykryty kontroler
SCSI. Aby tak zrobić, musisz zmodyfikować /etc/pcmcia/config,
aby poinformować cardmgr, które dodatkowe moduły muszą być
załadowane kiedy dany kontroler jest konfigurowany.
Na przykład:
device "aha152x_cs" class "scsi" module "scsi/scsi_mod", "scsi/sd_mod", "aha152x_cs"
Taka zawartość pliku spowodowałaby załadowanie rdzennego modułu SCSI oraz modułu sterownika "top-level" do dysków przed ładowaniem normalnego modułu sterownika PCMCIA. Skrypt Configure nie wykryje automatycznie zmodularyzowanych sterowników SCSI, tak więc będziesz musiał włączyć obsługę SCSI ręcznie używając opcji konfiguracyjnych.
Zawsze włączaj swoje urządzenia przed włączeniem laptopa, albo
przed włożeniem karty kontrolera, tak aby szyna SCSI została
poprawnie zakończona podczas konfiguracji kontrolera. Bądź także
bardzo ostrożny przy wyjmowaniu kontrolera SCSI. Przed wyjęciem
karty upewnij się, że wszystkie urządzenia do niej
przydzielone zostały odmontowane i wyłączone. Najlepiej przed
wyjęciem karty skorzystać z programu cardctl albo cardinfo
i zażądać usunięcia karty z systemu. W chwili obecnej wszystkie
urządzenia SCSI powinny być włączane przed włożeniem karty
sterownika SCSI i powinny pozostać podłączone do momentu wyjęcia
karty sterownika lub wyłączenia laptopa.
Korzystanie z tych kart niesie za sobą potencjalne komplikacje nieznane w przypadku korzystania ze zwykłych sterowników ISA. Szyna SCSI przenosi sygnał "termination power" niezbędny do prawidłowego działania zwykłych pasywnych terminatorów SCSI. Sterowniki SCSI standardu PCMCIA nie dostarczają sygnału "power termination", jeśli jest on wymagany musi zostać dostarczony przez urządzenie zewnętrzne. Niektóre zewnętrzne urządzenia SCSI mogą zostać skonfigurowane w taki sposób, aby dostarczały wspomnianego sysgnału. Inne, jak np. Zip Drive czy Syquest EZ-Drive używają aktywnych terminatorów, przez co nie są zależne od sygnału podawanego na szynie SCSI. W niektórych przypadkach może okazać się konieczne skorzystanie ze specjalnego bloku terminatora, np. APS SCSI Sentry 2, który posiada niezależne, zewnętrzne źródło zasilania. Konfigurując łańcuch urządzeń SCSI musisz sobie zdawać sprawę, które z nich wymagają lub dostarczają sygnał "power termination".
Kontroler Adaptec APA-460 SlimSCSI nie jest obsługiwany. Kartę tę sprzedawano oryginalnie pod nazwą Trantor, a kiedy Adaptec połączył się z Trantor-em, kontynuowano sprzedaż Trantora z nazwą Adaptec. APA-460 nie jest kompatybilny z jakimkolwiek istniejącym sterownikiem Linux-owym. Nie jestem pewien jak trudno byłoby napisać sterownik; nie sądzę, żeby ktoś był w stanie wyciągnąć jakiekolwiek informacje od Adaptec-a.
(Nieobsługiwany) Trantor SlimSCSI może zostać zidentyfikowany następująco:
Trantor / Adaptec APA-460 SlimSCSI FCC ID: IE8T460 Shipped with SCSIworks! driver software
(Obsługiwany) Adaptec SlimSCSI może zostać zidentyfikowany następująco:
Adaptec APA-1460 SlimSCSI FCC ID: FGT1460 P/N: 900100 Shipped with EZ-SCSI driver software
aha152x_cs (używanym przez Adaptec-a, New
Media i kilka innych) źródłem częstych problemów w napędach taśm
wydaje się być obsługa odłączania/podłączania SCSI. Aby wyłączyć,
tę właściwość dodaj następującą linię do pliku
/etc/pcmcia/config.opts:
module "aha152x_cs" opts "reconnect=0"
CONFIG_SCSI
to "m"), podczas konfiguracji PCMCIA, musisz wyraźnie
zaznaczyć, że chcesz, aby sterownik został skompilowany. Musisz
zmodyfikować plik /etc/pcmcia/config, aby ładować moduł
SCSI przed odpowiednim sterownikiem *_cs.
Sterownik memory_cs obsługuje wszystkie typy kart pamięci,
jak również dostarcza bezpośredniego dostepu do obszaru adresowego
pamięci PCMCIA dla kart, które mają inne funkcje. Po załadowaniu
tworzy kombinację urządzeń znakowych i blokowych. Przeczytaj
stronę podręcznika na temat modułów, aby dowiedzieć się więcej
o schemacie nazewnictwa urządzeń. Urządzenia blokowe są używane do
dostępu a'la dysk (tworzenie i montowanie systemów plików itp.)
Urządzenia znakowe służą do bezpośredniego (raw) niebuforowanego
czytania i pisania do jakiegoś miejsca.
Adres urządzenia przekazany do memory.opts składa się z dwóch
pól: schematu i numeru gniazda. Opcje odnoszą się do pierwszej
zwykłej partycji pamięci na odpowiedniej karcie pamięci. Oto
przykład skryptu, który automatycznie montuje karty pamięci w
zależności od złącza, w które zostaną karty włożone:
case "$ADDRESS" in
*,0,0)
# Zamontuj systemy plików, ale nie uaktualniaj /etc/fstab
DO_FSTAB="n" ; DO_FSCK="y" ; DO_MOUNT="y"
FSTYPE="ext2" ; OPTS=""
MOUNTPT="/mem0"
;;
*,1,0)
# Zamontuj systemy plików, ale nie uaktualniaj /etc/fstab
DO_FSTAB="n" ; DO_FSCK="y" ; DO_MOUNT="y"
FSTYPE="ext2" ; OPTS=""
MOUNTPT="/mem0"
;;
esac
Niektóre starsze karty pamięci i większość prostych statycznych
kart RAM nie posiadają "Card Information Structure"
(CIS), która jest schematem używanym przez karty PCMCIA do
identyfikowania się. Normalnie cardmgr założy, że każda karta, w
której brakuje owej struktury jest prostą kartą pamięci i załaduje
sterownik memory_cs. I tak, częstym skutkiem ubocznym
ogólnego identyfikowania kart jest identyfikacja innego typu kart
jako karty pamięci.
Sterownik memory_cs używa heurystyki, aby zgadnąć pojemność tych
kart. Heurystyka nie działa jednak dla kart zabezpieczonych przed
zapisem i może czynić błędy także w innych przypadkach. Jeśli karta
została źle zidentyfikowana, jej rozmiar powinien być wyraźnie podany
podczas używania takich poleceń jak dd czy mkfs.
Adres urządzenia przekazywany do ftl.opts składa się z trzech
lub czterech pól: schematu, numeru gniazda, numeru regionu i
opcjonalnie numeru partycji. Większość kart "flash" ma
tylko jeden region pamięci "flash", więc numerem regionu
zwykle będzie zero.
Aby użyć karty pamięci "flash" jako zwykłego
urządzenia blokowego jak dysk, stwórz najpierw partycję "flash
translation layer" na tym urządzeniu poleceniem
ftl_format:
ftl_format -i /dev/mem0c0c
Zauważ, że polecenie to uzyskuje dostęp do karty przez bezpośredni
interfejs pamięci karty. Raz sformatowana karta może być używana
jako zwykłe urządzenie blokowe przy pomocy sterownika ftl_cs.
Na przykład:
mke2fs /dev/ftl0c0
mount -t ext2 /dev/ftl0c0 /mnt
Nazewnictwo dla urządzeń FTL jest trochę pokręcone. Poboczne liczby urządzeń mają trzy części: numer karty, numer regionu na tej karcie i opcjonalnie partycję w tym regionie. Region może być traktowany jako pojedyncze urządzenie blokowe bez tablicy partycji (jak dyskietka) albo można go podzielić na partycje tak jak dysk twardy. Urządzenie "ftl0c0" jest kartą 0 o numerze regionu 0 i całym regionem. Urządzenia od "ftl0c0p1" do "ftl0c0p4" są głównymi partycjami 1 do 4 jeśli region został podzielony.
Są dwa główne formaty dla kart pamięci flash: styl "flash translation layer", i styl "Microsoft Flash File System". Format FTL jest ogólnie bardziej elastyczny ponieważ pozwala na użycie każdego zwykłego wysokopoziomowego systemu plików (ext2, ms-dos itp.) na kartach pamięci "flash" tak jakby były one na zwykłym urządzeniu dyskowym. FFS jest całkiem odmiennym systemem plików. Linux nie umie w tej chwili obługiwać kart sformatowanych w tym systemie.
Obsługa napędów ATA/IDE wymaga jadra 1.3.72 lub nowszego.
Specyficzna dla PCMCIA część sterownika to fixed_cs. Pamiętaj
żeby używać cardctl albo cardinfo do wyłączania
karty ATA/IDE przed wyjęciem jej, ponieważ sterownik nie jest
odporny na "gorące zmiany".
Adresy urządzenia przekazywane do fixed.opts składają się
z trzech albo czterech pól: bieżący schemat, numer gniazda,
numer seryjny napędu i opcjonalny numer partycji. Tak samo jak w
przypadku urządzeń SCSI, fixed.opts jest najpierw wywoływany
dla całego urządzenia. Jeśli fixed.opts zwróci listę partycji
w zmiennej PARTS, skrypt zostanie wtedy wywołany dla każdej
partycji.
Oto przykład pliku fixed.opts, który montuje pierwszą
partycję jakiejkolwiek karty ATA/IDE na /mnt.
case "$ADDRESS" in
*,*,*)
PARTS="1"
;;
*,*,*,1)
DO_FSTAB="y" ; DO_FSCK="y" ; DO_MOUNT="y"
FSTYPE="msdos"
OPTS=""
MOUNTPT="/mnt"
;;
esac
Zauważ, że domyślny plik fixed.opts posiada te linie, ale są
one w komentarzu. Jeśli chcesz, możesz mieć oddzielne konfiguracje
dla konkretnych kart oparte na ich numerach seryjnych. Aby
odszukać numer seryjny napędu, użyj narzędzia ide_info. Wtedy
część fixed.opts może wyglądać tak:
case "$ADDRESS" in
*,*,Z4J60542)
# To są moje rzeczy DOS-owe
PARTS="1"
;;
*,*,Z4J60542,1)
DO_FSTAB="y" ; DO_FSCK="y" ; DO_MOUNT="y"
FSTYPE="msdos"
OPTS=""
MOUNTPT="/mnt"
;;
esac
pcmcia_core z opcją:
CORE_OPTS="unreset_delay=400"
CONFIG_BLK_DEV_IDECD. Będzie to
zwykle przypadek dla standardowych jąder, chociaż jest to coś o
czymś powinieneś wiedzieć jeśli kompilujesz jądro z własną
konfiguracją.
Od jądra w wersji 1.3.73 pojedyncze przerwanie może być dzielone między kilka sterowników jak sterownik szeregowy i ethernetu. Jeśli używasz wielofunkcyjnej karty z nowszym jądrem, to wszystkie funkcje tej karty są dostępne bez potrzeby przeładowywania sterowników.
Symultaniczne użycie dwóch funkcji karty wymaga trochę sprytu i różni sprzedawcy sprzętu zaimplementowali dzielenie przerwań na swój, niekompatybilny (i czasem nieudokumentowany) sposób. Sterowniki do niektórych kart (Ositech Jack of Diamonds, 3Com 3c562, Linksys) udostępniają poprawnie symultaniczność, ale inne (szczególnie Megahertz) - nie.
Wcześniejsze jądra nie obsługiwały dzielenia przerwań pomiędzy różne sterowniki urządzeń, więc jest niemożliwe skonfigurowanie kart modemu i ethernetu do działania symultanicznego. Sterowniki ethernetowy i modemowy są ładowane jednocześnie automatycznie. Chociaż sterownik ethernetowy przejmuje przerwanie domyślnie. Aby użyć modemu możesz usunąć sterownik ethernetowy z pamięci i zrekonfigurować port szeregowy czymś takim:
ifconfig eth0 down
rmmod 3c589_cs
setserial /dev/modem autoconfig auto_irq
setserial /dev/modem
Drugie polecenie setserial powinno zweryfikować czy port
został skonfigurowany tak, aby użyć przerwania poprzednio
używanego przez sterownik ethernetowy.
Teoretycznie możesz wkładać i wyjmować karty PCMCIA w każdym momencie. Chcociaż, generalnie dobrze jest nie wyjmować karty jeśli jest ona akurat używana przez jakąś aplikację. Jądra starsze niż 1.1.77 często zawieszałyby się podczas wyjmowania kart szeregowych lub modemowych, ale to powinno już być naprawione.
Pakiet Card Services może zostać skompilowany z obsługą APM (Advanced Power Management) jeśli zainstalowałeś ten pakiet w swoim systemie. APM jest dołączony do jąder 1.3.46 i nowszych. Opiekunem tego pakietu jest obecnie Rick Faith (faith@cs.unc.edu), a narzędzia do APM można uzyskać z ftp.cs.unc.edu. Moduły PCMCIA zostaną skonfigurowane automatycznie pod względem APM jeśli na twoim systemie zostanie wykryta wersja kompatybilna.
Aby poprawnie zakończyć działanie i ponownie wystartować karty PCMCIA,
możesz wykonać cardctl suspend przed zawieszeniem twojego laptopa i
cardctl resume po przywróceniu go do pracy bez zmian w APM.
Niezadziała to jednak z modemem PCMCIA, który jest właśnie używany,
ponieważ sterownik szeregowy nie jest w stanie zachować i odtworzyć
parametrów operacyjnych modemu.
APM wydaje się być niepewne na niektórych systemach. Jeśli masz problemy z APM i PCMCIA w twoim systemie, spróbuj zawęzić problem do jednego albo drugiego pakietu zanim wyślesz list z raportem o błędzie.
Niektóre sterowniki, szczególnie sterowniki PCMCIA SCSI, nie mogą
się odtworzyć ze stanu zawieś/odtwórz. Kiedy używasz karty PCMCIA
SCSI, użyj cardctl eject zanim zawiesisz system.
Użyj polecenia cardctl albo cardinfo. Polecenie
cardctl suspend # zawiesi jedno gniazdo, i wyłączy jego
zasilanie. Odpowiednie polecnie resume obudzi kartę w stan
poprzedni.
Aby usunąć cały pakiet PCMCIA, uruchomrc.pcmcia tak:
/etc/rc.d/rc.pcmcia stop
Uruchomienie tego skryptu zajmie kilka sekund, ponieważ daje on
czas wszystkim sterownikom-klientom na poprawne zakończenie
działania. Jeśli jakieś urządzenie PCMCIA jest akurat używane,
zakończenie będzie niekompletne, i niektóre moduły jądra mogą nie
zostać usunięte. Aby tego uniknąć użyj cardctl eject, aby
zamknąć wszystkie gniazda przed uruchomieniem rc.pcmcia.
Status wyjściowy polecenia cardctl określi czy jakieś gniazdo
nie mogło być zamknięte.
Teoretycznie nie powinno mieć znaczenia które przerwanie jest
alokowane dla którego urządzenia tak długo jak dwa urządzenia nie
są skonfigurowane, aby używać tego samego przerwania. W pliku
/etc/pcmcia/config.opts znajdziesz miejsce na wyłączenie
przerwań, które są używane przez inne urządzenia niż PCMCIA.
Podobnie, nie ma sposobu, aby bezpośrednio podać adresy IO, które
mają byc używane przez karty PCMCIA. Plik /etc/pcmcia/config.opts
pozwala na podanie obszaru portów dostępnego dla wszystkich
sterowników PCMCIA, albo wyłączyć obszary, które powodują
konflikty.
Po zmodyfikowaniu pliku /etc/pcmcia/config.opts możesz
zrestartować cardmgr poleceniem "kill -HUP".
Przerwanie używane do monitorowania statusu zmian karty jest
wybierane przez moduł sterownika niskiego poziomu (i82365
lub tcic) przed zinterpretowaniem pliku /etc/pcmcia/config
przez cardmgr, więc plik ten nie ma wpływu na wybór tego
właśnie przerwania. Aby ustawić to przerwanie użyj opcji
cs_irq= podczas ładowania sterownika gniazd, przez ustawienie
zmiennej PCIC_OPTS w pliku /etc/rc.d/rc.pcmcia.
Wszystkie sterowniki kart klientów mają parametr irq_list do
podawania, które przerwania mogą próbować one zaalokować. Te opcje
powinny być ustawione w pliku /etc/pcmcia/config. Np.:
device "serial_cs"
module "serial_cs" opts "irq_list=8,12"
...
wymusiłoby użycie tylko przerwań IRQ 8 i 12. Nie zależnie od
usatwień irq_list, Card Services nigdy nie zaalokuje
przerwania, które jest już używane przez inne urządzenie albo
przerwania, które jest wyłączone w pliku konfiguracyjnym.
Jest to całkiem proste używając schematów PCMCIA.
Użyj dwóch schematów konfiguracyjnych o nazwie "dom" i "praca".
Oto przykład skryptu network.opts z konkretnymi ustawieniami
dla różnych schematów:
case "$ADDRESS" in
praca,*,*,*)
# definicje dla kart sieciowych w pracy
...
;;
dom,*,*,*|default,*,*,*)
# definicje dla kart sieciowych w domu
...
;;
esac
Pierwszą częścią adresu urządzenia PCMCIA jest zawsze schemat konfiguracyjny. W tym przykładzie, drugi przypadek w "case" wybierze oba schematy: domowy i domyślny. Więc jeśli schemat nie jest ustawiony, domyślnym będzie schemat domowy.
Teraz, aby wybrać pomiędzy tymi dwoma ustawieniami uruchom albo:
cardctl scheme dom
albo
cardctl scheme praca
Polecenie cardctl wyłącza wszystkie twoje karty i inicjuje je
ponownie. Polecenie to może być bezpiecznie używane, nie zależnie
od tego czy system PCMCIA jest załadowany czy nie, ale polecenie
to może się nie powieść jeśli używasz innych urządzeń PCMCIA w tym
samym czasie (nawet jeśli ich konfiguracje nie różnią się wyraźnie
od ustawień schematów).
Aby zobaczyć bieżące ustawienia schematu PCMCIA uruchom:
cardctl scheme
Posiadanie głównego systemu plików na urządzeniu PCMCIA jest trochę kłopotliwe, bo system PCMCIA na Linux-a nie został przystosowany do włączenia do jądra. Główne składniki, ładowalne moduły i uruchamiany w trybie użytkownika demon cardmgr, zależą od już działającego systemu. Możliwość startu przy pomocy "initrd" pozwala obejść ten problem pozwalając Linux-owi wystartować używając tymczasowego ramdysku jako minimalnego obrazu katalogu głównego, załadować sterowniki i potem ponownie zamontować inny system plików jako katalog główny. Tymczasowy katalog główny może skonfigurować urządzenia PCMCIA i potem zamontować urządzenie PCMCIA jako katalog główny.
Niektóre dystrybucje Linux-a pozwalają na instalację na urządzeniu podłączonym do kontrolera SCSI PCMCIA, jako niezamierzony skutek uboczny możliwości instalacji z CD-ROM-ów podłączonych do SCSI PCMCIA. Aczkolwiej w tej chwili żadne narzędzie instalacyjne dla Linux-a nie pozwala na konfigurację odpowiedniego "initrd" do startu z głównym systemem plików na PCMCIA. Dlatego też konfiguracja takiego systemu wymaga użycia drugiego Linux-a, aby stworzyć obraz "initrd". Jeśli nie masz dostępu do drugiego Linux-a, to inną możliwością jest tymczasowe zainstalowanie minimalnego Linux-a na napędzie nie będącym urządzeniem PCMCIA, stworzenie obrazu initrd i zainstalowanie na PCMCIA.
W Bootdisk-HOWTO znajdują się ogólne informacje jak zrobić
dyskietki startowe, ale nic konkretnego na temat initrd. Główny
dokument opisujący initrd zawarty jest w ostatnich źródłach jądra
Linux-a w katalogu linux/Documentation/initrd.txt. Zanim
zaczniesz powinieneś to przeczytać. Pomocna jest też znajomość
lilo. Użycie initrd wymaga także włączonych opcji
CONFIG_BLK_DEV_RAM i CONFIG_BLK_DEV_INITRD w
jądrze.
Skrypt pcinitrd tworzy podstawowy obraz initrd do startowania
z głównej partycji na PCMCIA. W obrazie tym zawarte są: minimalna
struktura katalogów, potrzebne pliki urządzeń, kilka programów,
biblioteki dzielone i zbiór sterowników-modułów PCMCIA. Podczas
uruchamiania pcinitrd podajesz sterowniki-moduły, które mają
być zawarte w obrazie. Główne składniki PCMCIA, pcmcia_core i
ds są dołączane automatycznie.
Na przykład powiedzmy, że twój laptop używa kontrolera PCMCIA kompatybilnego z i82365 i chcesz startować Linux-a z głównym systemem plików na dysku twardym przyłączonym do kontrolera Adpatec SlimSCSI. Możesz stworzyć odpowiedni obraz przy pomocy;
pcinitrd -v initrd pcmcia/i82365.o pcmcia/aha152x_cs.o
Aby ustawić sobie start initrd wedle swojego uznania, możesz zamontować obraz używając urządzenia "loopback" poleceniem:
mount -o loop -t ext2 initrd /mnt
i potem zmodyfikuj skrypt linuxrc. Pliki konfiguracyjne
PCMCIA zostaną zainstalowane w obrazie w katalogu /etc i
także mogą być ustawione wedle własnego uznania. Więcej informacji
znajdziesz w podręczniku 'man pcinitrd'.
Po stworzeniu obrazu skryptem pcinitrd, możesz stworzyć
dyskietkę startową kopiując jądro, skompresowany obraz initrd i
kilka pomocniczych programów dla lilo na czystą dyskietkę. W
następującym przykładzie zakładamy, że główny system plików
znajduje się na /dev/sda1:
mke2fs /dev/fd0
mount /dev/fd0 /mnt
mkdir /mnt/etc /mnt/boot /mnt/dev
cp -a /dev/fd0 /dev/sda1 /mnt/dev
cp [jądro] /mnt/vmlinuz
gzip < [obraz-initrd] > /mnt/initrd
Stwórz /mnt/etc/lilo.conf z taką zawartością:
boot=/dev/fd0
compact
image=/vmlinuz
label=linux
initrd=/initrd
read-only
root=/dev/sda1
Na końcu uruchom:
lilo -r /mnt
Jeśli lilo uruchomione jest z parametrem -r, wszystkie
akcje wykonywane są z podanym katalogiem jako główny system plików.
Powodem utworzenia plików urządzeń w /mnt/dev było to,
że lilo nie będzie w stanie użyć plików w /dev kiedy
będzie uruchomione z alternatywnym katalogiem głównym.
Jednym z popularnych zastosowań initrd są systemy gdzie wewnętrzny
dysk twardy jest dedykowany dla innego systemu operacyjnego. Jądro
Linux-a i obraz initrd mogą zostać umieszczone na partycji bez
Linux-a a lilo lub LOADLIN mogą zostać skonfigurowane,
aby ładowały Linux-a z tych obrazów.
Zakłądając, że twoje jądro jest skonfigurowane na odpowiednie
urządzenie z głównym systemem plików i masz stworzony obraz initrd
na innym Linux-ie, najprostszym sposobem aby zacząć, to
wystartowanie Linux-a używając LOADLIN-a w ten sposób:
LOADLIN <kernel> initrd=<initrd-image>
Jak już możesz wystartować Linux-a na swojej maszynie, możesz
wtedy zainstalować lilo aby umożliwić startowanie Linux-a
bezpośrednio.
Na przykład powiedzmy, że /dev/hda1 jest partycją bez
Linux-a i /mnt można użyć jako katalog do montowania.
najpierw utwórz podkatalog na partycji docelowej dla plików
Linux-a:
mount /dev/hda1 /mnt
mkdir /mnt/linux
cp [obraz-jądra] /mnt/linux/vmlinuz
cp [obraz-initrd] /mnt/linux/initrd
W tym przykładzie, powiedzmy, że /dev/sda1 jest partycją
na której ma się znaleźć główny system plików, dysk twardy SCSI
zamontowany przez kontroler SCSI PCMCIA. Aby zainstalować
lilo, stwórz plik lilo.conf z taką zawartością:
boot=/dev/hda
map=/mnt/linux/map
compact
image=/mnt/linux/vmlinuz
label=linux
root=/dev/sda1
initrd=/mnt/linux/initrd
read-only
other=/dev/hda1
table=/dev/hda
label=windows
Linia boot= informuje, żeby zainstalować program ładujący
system do Master Boot Record podanego urządzenia. Linia root=
identyfikuje konkretny główny system plików, który ma zostać użyty
po załadowaniu obrazu initrd, parametr ten może być niepotrzebny
jeśli jądro jest już skonfigurowane w ten sposób. Sekcja
other= używana jest do opisania innego systemu operacyjnego
zainstalowanego na /dev/hda1.
Aby zainstalować lilo w tym przypadku użyj:
lilo -C lilo.conf
Zauważ, że w tym przypadku plik lilo.conf używa scieżek
absolutnych, które zawierają /mnt. Zrobiłem tak w
przykładzie ponieważ docelowy system plików może nie umieć tworzyć
urządzeń Linux-a dla parametrów boot= i root=.
Zakładając, że twoja karta jest obsługiwana przez istniejący
sterownik, wszystko co trzeba zrobić, to dodać pozycję do
/etc/pcmcia/config, która poinformuje cardmgr jak
zidentyfikować kartę i który(e) sterownik(i) dołączyć do tej
karty. Więcej informacji na temat formatu pliku konfiguracyjnego
na stronie podręcznika "man" na temat pcmcia. Jeśli włożysz
nieznaną kartę, to cardmgr z reguły zapisze trochę informacji
identyfikacyjnych w logu systemowym, który może zostać użyty do
konfiguracji.
Oto przykład raportu cardmgr w /usr/adm/messages na
temat nieznanej karty:
cardmgr[460]: unsupported card in socket 1 cardmgr[460]: version info: "MEGAHERTZ", "XJ2288", "V.34 PCMCIA MODEM"
Odpowiadająca pozycja konfiguracyjna w /etc/pcmcia/config
wyglądałoby tak:
card "Megahertz XJ2288 V.34 Fax Modem"
version "MEGAHERTZ", "XJ2288", "V.34 PCMCIA MODEM"
bind "serial_cs"
Możesz użyć "*", aby oznaczyć łańcuchy, które nie muszą się dokładnie zgadzać, jak np. numery wersji. Kiedy robisz nową pozycję konfiguracyjną, zwróć uwagę na to, żeby dokładnie skopiować łańcuchy, zachowując wszelkie duże i małe litery oraz przerwy (spacje). Upewnij się także, że pozycja konfiguracyjna ma taką samą ilość łańcuchów jak to stwierdzono w logach.
Po tym jak zmodyfikujesz /etc/pcmcia/config, możesz
poinformować cardmgr, aby przeładował plik konfiguracyjny:
kill -HUP `cat /var/run/cardmgr.pid`
Jeśli uda ci się ustawić jakąś pozycję konfiguracyjną dla nowej karty, przyślij mi kopię proszę, tak żebym mógł ją dołączyć do standardowego pliku konfiguracyjnego.
Najpierw sprawdź, czy karta nie została już rozpoznana przez
cardmgr. Niektóre karty nie wymienione w SUPPORTED.CARDS
są wersjami OEM kart obsługiwanych. Jeśli znajdziesz taka kartę,
daj mi znać, żebym mógł ją dodać do listy.
Jeśli twoja karta nie została rozpoznana, postępuj zgodnie z
instrukcjami w sekcji
3.6, aby stworzyć
pozycję konfiguracyjną dla twojej karty oraz powiąż swoją kartę ze
sterownikiem pcnet_cs. Zrestartuj cardmgr, aby użyć
nowego zaktualizowanego pliku konfiguracyjnego.
Jeśli sterownik pcnet_cs twierdzi, że nie może określić
adresu sprzętowego twojej karty ethernet-owej, to zmodyfikuj nowy
plik konfiguracyjny, aby powiązać kartę ze sterownikiem karty pamięci
- memory_cs. Zrestartuj cardmgr, aby użyć nowego
zaktualizowanego pliku konfiguracyjnego. Będziesz musiał znać
adres sprzętowy swojej karty sieciowej. Adres ten jest serią
dwucyfrowych szesnastkowych liczb, często wydrukowanych na karcie.
Jeśli go tam nie ma, możesz użyć sterownika DOS-owego, aby go
wyświetlić. W każdym razie, jak go już znasz to uruchom:
dd if=/dev/mem0a count=20 | od -Ax -t x1
i poszukaj linijki z twoim adresem. Tylko parzyste bajty są
zdefiniowane, wiec zignoruj bajty nieparzyste w wyniku. Zapisz
szesnastkowy offset pierwszego bajtu adresu. Teraz wyedytuj
modules/pcnet_cs.c i znajdź strukturę hw_info.
Będziesz musiał utworzyć nową pozycję dla twojej karty. Pierwsze
pole jest offsetem pamięci. Następne trzy pola to pierwsze trzy
bajty adresu sprzętowego. Ostatnie pole zawiera flagi dla
konkretnych cech karty; na początek spróbuj ustawić tu 0.
Po edycji pcnet_cs.c, skompiluj i zainstaluj nowy moduł.
Zmodyfikuj jeszcze raz /etc/pcmcia/config i zmień
powiązania karty z memory_cs na pcnet_cs. Postępuj
zgodnie z instrukacjami dla przeładowywania pliku konfiguracyjnego
i wszystko powinno być ustawione. Przyślij mi proszę kopie twoich
nowych pozycji konfiguracyjnych i hw_info.
Jeśli nie możesz znaleźć adresu sprzętowego swojej karty w formie
szesnastkowej, ostateczną metodą może okazać się jawne podanie
adresu w czasie inicjacji modułu pcnet_cs. Popraw plik
/etc/pcmcia/config dodając opcję hw_addr=:
module "pcnet_cs" opts "hw_addr=0x00,0x80,0xc8,0x01,0x02,0x03"
Oczywiście zamiast podanego adresu podaj adres swojej karty w odpowiednim miejscu.
Pakiet ten nie obsługuje jeszcze interfejsów używanych przez Compaq Aero i kilka innych laptop-ów. Kruczkiem w obsłudze dyskietek w Aero jest to, że Aero wydaje się używać ustawianego kontrolera PCMCIA, aby obsługiwać DMA dla dyskietek. Nie wiedząc jak to jest dokładnie robione, nie ma sposobu, aby zaimplementować to w Linux-ie.
Jeśli kontroler dyskietek jest obecny podczas startowania Aero, BIOS Aero skonfiguruje kartę i Linux zidentyfikuje ją jako normalną stację dyskietek. Kiedy załadowane są sterowniki Linux-owe PCMCIA, zauważą, że karta jest już skonfigurowana i skojarzona ze sterownikiem Linux-owym i zostawią to gniazdo w spokoju. Tak więc napęd może być używany jeśli jest obecny podczas startu, ale nie może być wymieniany podczas pracy (hot swapping).
Dzięki pracy Wernera Kocha w aktualnej wersji pakietu PCMCIA
zawarty jest sterownik do kart ethernetowej i ethernet/modem firmy
Xircom. Specjalnie dla dyskusji na temat rozwoju sterownika Xircom
ustawiłem forum HyperNews pod adresem
hyper.stanford.edu/HyperNews/get/pcmcia/xircom.html.
Przez długi czas karty Xircom nie były obsługiwane ponieważ Xircom miał taką zasadę, żeby nie ujawniać technicznych informacji o swoich kartach. Jednak trochę zmienili zasady i teraz rozprowadzają informacje o sterowniku.
Najlepszym sposobem na zgłaszanie błędów jest użycie listy komunikatowej na HyperNews-ach na stronie dotyczącej PCMCIA na Linux-ie. W ten sposób inni także mogą śledzić bieżące problemy (i poprawki czy obejścia jeśli są dostępne).
Oto rzeczy, które powinny być zawarte w każdym liście na temat błędu:
probe./etc/pcmcia albo rc.pcmcia.Przed wysłaniem listu o błędzie, upewnij się proszę, że używasz najnowszej wersji sterowników do PCMCIA. Szczerze powiem, że czytanie o czymś, co już naprawiłem nie jest najbardziej konstruktywnym sposobem na spędzanie czasu.
Jeśli twój problem związany jest także z nagłym przerwaniem działania
jądra, podczas którego wyświetlane są zawartości rejestrów, to
zawartość ta jest przydatna tylko wtedy jeśli możesz wskazać adres
EIP. Jeśli jest on w głównym jądrze, sprawdź ten adres w
System.map, aby zidentyfikować funkcję, która była w tym
momencie wykonywana. Jeśli przerwa nastąpiła podczas działania
jakiegoś modułu ładowalnego, jest to trochę trudniejsze do
prześledzenia. W bieżącej wersji narzędzi do modułów program
ksyms -m wyświetli adres podstawowy każdego modułu. Weź
moduł, który zawiera podane EIP, i odejmij jego adres podstawowy
od EIP, aby otrzymać w ten sposób offset w module. Uruchom wtedy
gdb z tym modułem jako parametr i sprawdź otrzymany offset
poleceniem list. Zadziała to tylko wtedy kiedy dany moduł był
skompilowany z opcją -g, czyli z informacjami dla debugger-a.
Jeśli nie masz dostępu do WWW, informacje o błędach można wysyłać do mnie na adres dhinds@hyper.stanford.edu. Chociaż wolę, aby informacje takie były wysyłane na mojej stronie WWW, tak żeby inni także mogli je widzieć.
Moduły PCMCIA zawierają dużo warunkowo skompilowanego kodu
śledzenia. Większość tego kodu jest pod kontrolą definicji
preprocesora PCMCIA_DEBUG. Jeśli jest to niezdefiniowane, to
kod do śledzenia nie zostanie wkompilowany. Jeśli jest utawione na
0, kod ten jest wkompilowany, ale nieaktywny. Im większe poziomy
tym więcej informacji. Każdy moduł stworzony ze zdefiniowanym
symbolem PCMCIA_DEBUG będzie miał parametr typu Integer,
pc_debug, który kontroluje ilość pojawiających się
informacji. Może to być ustawiane wtedy, kiedy moduł jest
ładowany, tak więc wyjście może być kontrolowane, na zasadzie "dla
każdego modułu" bez potrzeby przekompilowywania.
Jest kilka narzędzi do śledzenia w podkatalogu debug_tools/
w dystrybucji PCMCIA. Narzędzia dump_tcic i dump_i365
generują kompletny zrzut rejestrów kontrolera PCMCIA i dekodują
dużo informacji z rejestrów. Są najbardziej pożyteczne wtedy, gdy
masz dostęp do schematu danych konkretnego układu scalonego
kontrolera. Narzędzie dump_tuples wyświetla CIS-y (Card
Information Structure) danej karty i dekoduje niektóre z
najważniejszych bitów. A narzędzie dump_cisreg wyświetla
rejestry lokalnej konfiguracji karty.
Sterownik memory_cs do karty pamięci jest także czasami
przydatny do śledzenia. Może on zostać powiązany z każdą kartą
PCMCIA i nie wpływa to negatywnie na inne sterowniki. Może on
zostać użyty do bezpośredniego dostępu do pamięci atrybutowej
karty albo zwykłej pamięci.
Najlepszą dokumentacją dla interfejsu PCMCIA dla Linux-a jest "The Linux PCMCIA Programmer's Guide". Najnowsza wersja jest zawsze dostępna z hyper.stanford.edu albo na WWW - hyper.stanford.edu/HyperNews/get/pcmcia/home.html.
Dla urządzeń, które są względnie podobne do normalnych urządzeń kart ISA, będziesz mógł przypuszczalnie użyć fragmentów sterowników Linux-a, które już istnieją. W niektórych przypadkach, największym problem będzie takie przerobienie już istniejącego sterownika, aby mógł on sobie poradzić z wkładaniem i wyjmowaniem danej karty. W bieżącej wersji, sterownik do karty pamięci jest jedynym sterownikiem, który nie zależy od żadnej części innego sterownika, który wykonywałby za niego brudną robotę.
Napisałem szkielet sterownika z dużą ilością komentarzy, które
wyjaśniają jak sterownik się komunikuje z Card Sevices; znajdziesz
ten szkielet w dystrybucji źródłowej PCMCIA w podkatalogu
modules/skeleton.c.
Zdecydowałem, że nie jest rozsądne dla mnie, abym rozprowadzał wszystkie sterowniki klientów PCMCIA jako część pakietu PCMCIA. Każdy nowy sterownik czyni główny pakiet trudniejszym do utrzymania i, co można było przewidzieć, dołączenie sterownika przenosi trochę pracy opiekuna z autora na mnie. W zamian za to, zdecyduję osobno dla każdego przypadku (case by case) czy włączyć czy nie sterowniki pisane przez osoby trzecie, w zależności od żądań użytkowników jak i możliwości utrzymywania. Sugeruję, żeby autorzy sterowników, które nie dostały się do głównego pakietu, zaadoptowali następujący schemat przy przygotowywaniu ich sterowników do dystrybucji.
Pliki sterownika powinny być ułożone w takiej samej strukturze
katalogów jak w głównej dystrybucji, tak, żeby można było
rozpakować sterownik ten w głównym katalogu źródeł głównej
dystrybucji. Sterownik powinien posiadać pliki źródłowe (w
./modules/), stronę do podręcznika systemowego (w
./man/) i pliki konfiguracyjne (w ./etc/).
Katalog główny powinien zawierać także plik README.
W katalogu głównym powinien się także znajdować makefile,
ustawiony w taki sposób, że "make -f ... all" i
"make -f ... install" skompiluje sterownik i
zainstaluje wszystkie potrzebne pliki. Jeśli plik ten posiada
rozszerzenie .mk, to zostanie on automatycznie wykonany przez
główny pliku Makefile dla celów all i install.
Oto przykład jak taki plik mógłby być skonstruowany.
# Przykładowy Makefile dla sterowników pisanych przez osoby trzecie
FILES = sample_cs.mk README.sample_cs \
modules/sample_cs.c modules/sample_cs.h \
etc/sample etc/sample.opts man/sample_cs.4
all:
$(MAKE) -C modules MODULES=sample_cs.o
install:
$(MAKE) -C modules install-modules MODULES=sample_cs.o
$(MAKE) -C etc install-clients CLIENTS=sample
$(MAKE) -C man install-man4 MAN4=sample_cs.4
dist:
tar czvf sample_cs.tar.gz $(FILES)
Plik ten używa celów install zdefiniowanych w pakiecie PCMCIA
2.9.10 i późniejszych. Zawiera on także cel "dist" dla
wygody autora sterownika. Przypuszczalnie będziesz chciał dodać
numer wersji do ostatecznego pakietu (np. sample_cs-1.5.tar.gz).
Pełna dystrybucja mogłaby wyglądać tak:
sample_cs.mk
README.sample_cs
modules/sample_cs.c
modules/sample_cs.h
etc/sample
etc/sample.opts
man/sample_cs.4
Z takim układem katalogów, po rozpakowaniu sterownik staje się częścią głównej dystrybucji. Może korzystać z plików nagłówkowych PCMCIA, tak jak i z możliwości sprawdzania konfiguracji systemu użytkownika i automatycznego sprawdzania zależności tak samo jak "normalny" sterownik klienta.
Będę akceptował sterowniki przygotowane zgodnie z tą specyfikacją
i umieszczał je w katalogu /pub/pcmcia/contrib na moim
serwerze FTP - hyper.stanford.edu. Plik README w tym katalogu
będzie opisywał jak rozpakować sterownik pisany przez trzecią
osobę.
Interfejs sterownika PCMCIA nie zmienił się wiele przez ten czas i prawie zawsze zachowywał wsteczną kompatybilność. Sterownik klienta nie będzie musiał być aktualizowany dla pobocznych wersji w pakiecie głównym PCMCIA. Spróbuję powiadamiać autorów sterowników o zmianach, które wymagają uaktualnienia ich sterowników.
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 A możesz tu znaleźć dość dużo może nie błędów, ale konstrukcji, które nie są podobne do języka polskiego. Ale to wszystko dlatego, że jest trochę ciężko przetłumaczyć zdanko z angielskiego jeśli jest obok siebie 4 czy czasami nawet 6 rzeczowników ;) Jeśli zauważysz taki stwór i wpadniesz na lepsze określenie, napisz. Jeśli będzie to w miarę sensowne, to napewno tego nie zignoruję.
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 sie na nią zapisać, to
wyślij list o treści subscribe jtz Imię Nazwisko na adres
majordomo@ippt.gov.pl
Zmiany w tym dokumencie wprowadzone przez tłumacza to odwołania do polskich serwerów ftp. doc-linux-pl-2002.06.14.orig/html/PPP-HOWTO.pl.html 0100664 0001750 0001750 00000372325 06770264140 020214 0 ustar coven coven
Prawa autorskie
Prawa autorskie należą do autora dokumentu. Udziela się pozwolenia na dystrybycję tego dokumnetu w formie elektronicznej, na płytkach CD, pod warunkiem, że zostanie zachowana oryginalna forma dokumentu. Udziela się również pozwolenia na na wydrukowanie niniejszego dokumentu do użytku prywatnego.
Prawa autorskie do tłumaczenia (c)1997 piotr.pogorzelski@ippt.gov.pl.
Zabrania się publikowania fragmentów lub całości tego dokumnetu bez zgody autora, za wyjątkiem przypadków opisanych powyżej.
Dystrybucja
W miarę powstawania nowych wersji niniejszy dokument będzie wysyłany do pl.comp.os.linux.odpowiedzi. W postaci HTML można go zawsze zobaczyć pod adresem http://www.jtz.org.pl/Html/PPP-HOWTO.pl.html
W formie bardziej nadającej się do druku, można go znaleźć tutaj: ftp://www.jtz.org.pl/HOWTO/.
Najnowsza wersja tego dokumentu w wersji angielskiej dostępna jest pod adresem http://sunsite.unc.edu/pub/Linux/docs/HOWTO/PPP-HOWTO. Lub w róznych innych formatach (SGML, ASCII, postscript, DVI) ftp://sunsite.icm.edu.pl/pub/Linux/sunsite/docs/HOWTO/other-formats.
Podziękowania
W przygotowaniu tego dokumentu pomagało mi wiele osób. Specjalne podziękowania dla Ala Longyeara, za pomoc w zrozumieniu samego PPP (jeśli znajdziecie jakieś błędy, to są to moje błędy, nie jego), Gregowi Hankinsowi (opiekunowi Linux Howto) i Danielowi Berinsonowi za pomoc przy linuxdoc-sgml kiedy mialem z nim kłopoty(3dbu przed terminem publikacji), oraz Debi Trackett (MaximumAccess.com) za wiele pomocnych sugestii na temat stylu, zawartości, porządku i prostoty i jasności objaśnień.
I na koniec dziękuję wielu ludziom, którzy kontaktując się ze mną pocztą elektroniczną przesyłali swoje uwagi. Jak w przypadku wszystkich autorów, naszą jedyną wystarczającą zapłatą jest satysfakcja, że udało się nam pomóc wielu ludziom. Pisząc ten dokument spłacam część długu, jaki ja - iwszyscy użytkownicy Linuxa- zaciągnąłem wobec ludzi, którzy napisali i opiekują się systemem, który wybrałem.
PPP (Point to Point Protocol) jest mechanizmem umożliwijącym tworzenie i utrzymowanie połączeń w standardzie IP (Internet Protocol) i innych przez linie szeregowe - bezpośrednio między komputerami za pomocą kabla bezmodemowego, zestawione polązcenie sesji telnet, połączenie między dwoma komputerami zestawione za pomocą modemów i linii telefonicznych. Za pomoca PPP możesz połączyć Linuxa z serwerem PPP i mieć dostęp d ozasobów sieci, do których ma dostęp sam serwer (no prawie wszystkich), tak jakby twój komputer był bezpośrednio przyłączony do sieci.
Możesz również ze swojego Linuxa zrobić serwer WWW, tak aby inni użytkownicy mogli dzwonić do twojego komputera i korzystać z zasobów twojego komputera i sieci do której jest przyłączony.
Ponieważ PPP jest protokołem typu każdy-z-każdym, dlatego możesz wykorzystać dwa komputery PC z Linuxem do połączenia ze sobą dwóch sieci (lun np. sieci lokalnej do internetu).
Jednż z zasadniczych różnic pomiędzy PPP i siecią Ethernet jest przepustowość. Standardowa sieć Ethernet pracuje z maksymalną teoretyczną przepustowością 10 Mbs (milionów bitów na sekunde), podczas gdy modemy pracują z prędkościami do 33.6 kbps (tsiecy bitów na sekunde). Również w zależności od rodzaju połączenia PPP mogą zaistnieć ograniczenia w wykorzystaniu pewnych usłuch lub programów użytkowych.
PPP jest protokołem typu każdy-z-każdym; nie ma (technicznej) różnicy między komputerme który nawiązuje połączenie i komputerem które na nie odpowiada. Jednak wygodnie jest myśleć o tym jako o systemie klient i serwer.
Kiedy dzwonisz aby bawiazć połączenie jesteś klientem. Komputer z którym chcesz się połączyć jest serwerem.
Kiesdy konfigurujesz Linuxa, aby mogł odpowiadać na przychodzace połązcenia, wtedy konfigurujesz serwer.
Każdy kompuer PC z Linuxem, może być zarówno klientem i serwerem - nawet równocześnie, jeśli masz tylko więcej niż jeden port szeregowy (i modem, jesli to jest konieczne). Tak jak stwierdziliśmy wcześniej, tak naprawdę nie ma różnicy pomiędzy klientem i serwerem, przynajmniej tak długo, jak dotyczy to samego PPP od momentu zestawienia połączenia.
W tym dokumencie komputery które inicjują połączenie ("dzwonią do") nazwyamy KLIENTAMI. Komputery, ktróre odbierają połączenie, sprawdzają toższamość dzwoniącego (za pomoca haseł lub innych mechanizmów) nazwyamy SERWERAMI.
Ludzi najbardziej interesuje korzystanie z PPP jako klient w celu nawiazaniu połączenia z serwerem i połączeniu ich komputera lub całej sieci lokalnej z Internetem.
Procedura opisana w tym dokumencie pozwoli ci na zestawienie połązcenia z Inernetem a nawet zautomatyzowanie całej tej procedyry.
Pdamy również kilka wskazówek w jaki sposób skonfigurować Linuxa jako serwer PPP i jak połączyć ze sobą dwie sieci (z pełnym routingiem) , co jest często nazywane zestawianiem połączenia sieci WAN - Wide Area Network.
Istnieje wiele różnych dystrybucji Linuxa, i każda posiada własne sposoby na wykonywanie pewnych standardowych zadań.
W szczególności istnieją dwa różne sposoby jakich używa Linux (i Unix) do uruchomienia systemu, sonfigurowania interfejsów itp.
Mówimy o stylu stylu BSD inicjowania systemu i stylu systemu V. Możesz często spotkać zażarte dyskusja nad wyższoscią jednego systemu nad drugim. Jeśli cię to bawi możesz się przyłączyć.
Prawdopodobnie najbardziej rozpowszechnionymi dystrybucjami są:
Styl BSD polega na przetrzymywaniu plików inicjalizujących system w
katlogu /etc/..., a mianowicie:
/etc/rc
/etc/rc.local
/etc/rc.serial
Pliki inicjalizacjne w wersji Systemu V są przecowywane w licznych
podkatalogach katalogu /etc/rc.d/... :
drwxr-xr-x 2 root root 1024 Jul 6 15:12 init.d -rwxr-xr-x 1 root root 1776 Feb 9 05:01 rc -rwxr-xr-x 1 root root 820 Jan 2 1996 rc.local -rwxr-xr-x 1 root root 2567 Jul 5 20:30 rc.sysinit drwxr-xr-x 2 root root 1024 Jul 6 15:12 rc0.d drwxr-xr-x 2 root root 1024 Jul 6 15:12 rc1.d drwxr-xr-x 2 root root 1024 Jul 6 15:12 rc2.d drwxr-xr-x 2 root root 1024 Jul 18 18:07 rc3.d drwxr-xr-x 2 root root 1024 May 27 1995 rc4.d drwxr-xr-x 2 root root 1024 Jul 6 15:12 rc5.d drwxr-xr-x 2 root root 1024 Jul 6 15:12 rc6.d
Jeśli chcesz wiedzieć, w którym z tych plików jest inicjowana twoja karta sieciowa i tablice routingu, musisz poszukać w tych plikach odpowiednichj poleceń, które to wykonują.
Niektóre dystrybucje (RedHat i Caldera) posiadają progeam pod X służący do konfiguracji systemu PPP. W tym dokumencie nie opisujemy tych specyficznych narzędzi. Jeśli masz z nimi kłopot skontaktuja się bezpośrednio z dystrybutorami.
Każde urządzenie przyłączające komputer do Internetu musi posiadać własny, niepowtarzalny numer IP. Jest on przydzielany w każdym kraju centralnie przez odpowiednie instytucje.
Jeśli przyłączasz do Internetu sieć lokalną (LAN) musisz korzystać z numerów IP z własnej puli adresów IP (dla każdego komputera, urządzenia w sieci lokalnej). Nie możesz brać adresów z powietrza i korzystać z nich d ołączeia się z inną siecia, gdyż w najlepszym wypadku to nie bedzie działać, a w najgorszym moze zkłócić pracę innych systemów, których numery pokrywają się z wybranymi przez ciebie.
Pamiętajm że numery IP podawane w tym dokumencie (poza kilkoma wyjątkami) należą do puli numerów dla sieni nie przyłączonych do internetu, zarezerwowane dla sieci, które nigdy nie bedą do niego przyłączone.
Klasy numrów IP, zarezerwowwane dla sieci, które nigdy nie będą przyłaczone fo Interntu wyglądają następująco:
Jeśli posiadasz siec, krora nie otrzymała adresów od instytucji do tego celu przeznaczonej, powinieneś używac numerów z jendej z przedstawionej pozyżej grup.
Te numery nigdy nie powinny być używane w internecie. Mogą być z powodzeniem używane w lokalnych sieciach Ethernet na komputerach, które są przyłaczone do internetu. JEst to możliwe ponieważ numery IP są przydzielane urządzeniom a nie komputerom. Tak więc podczas gdy karta sieciowa twojego komputera moze być skonfigurawana do uzywania numeru 10.0.0.1, możesz być jednocześnie przyłączony do internetu za pomocą protokołu PPP i interfejs PPP na twoim komputerze otrzyma zupelnie inny (zarejestrowany do użycia w Internecie) numer IP. Twoj serwer będzie posiadał połączenie z internetem, lecz inne twoje komputery w sieci lokalnej nie będą.
Jednak wykorzaystując możliwości linuxa o nazwie masqueradeing i narzędzie ipfwadm, możesz dostępnić pozostałym komputerom dostęp do internetu (z pewnymi ograniczeniami).
Wiecej inforamcji na ten temat można znaleźć w dokumencie IP Masquerade mini HOWTO pod adresem Linux IP Masquerade mini HOWTO
Wiekszośc użytkwoników, która jest zinteresowana podłączeniem przez PPP swojego komputera do internetu przy wykorzystaniu w tym celu serwera dostarczanego przez swojego dostawcę Internetu nie musi starać sieo przydział własnego numeru IP.
Jeśli pragniesz przyłączyć do internetu małą podsieć, dostawcy Internetu (ISP) mogą zapewnić dedykowaną podsieć kilku numerów z puli własnych numerów IP.
W przypadku większości użytkowników przyłączających za pomocą PPP własny komputer do Internetu, większość dostawców stosuje dynamicznie przydzielany numer IP. To znaczy, zę w fazie połączenia, serwer PPP przekaże twojemu komputerowi, który numer IP masz przydzielony na czas zestawionego połączenia.
W przypadku dynamicznego rpzydzielania adresów IP, za każdym razem kiedy się łączysz możem otrzymać inny numer IP. MA t oznaczenie dla programów pracujących na twoim komputerze w trybie serwera, np. sendmail , ftpd, httpd i inne. Ogranizcenia wynikłe z dysnamicznego przydziału adresów (i spsoby ich obejściatam gdzie jest to możliwe) są omówione dalej.
Krok po kroku opisujemy w jaki sposób nawiązać połączenie między modemami i zestawić połączenie IP za pomocaprotokołu PPP. Zakładamy, że jądro ma wkompilowaną obsługę PPP (lub jest skompilowany odpowiedni moduł) oraz został zainstalwoane niezbędne oprogramowanie. (Nie podajemy w jaki sposób skonfigurować/skompilować jądro, dowiesz się na ten temat z innych dokumentów).
Choć DIP (standardowe narzędzei do zestawiania połączenia w trybie SLIP) może być również wykorzystane do zestawienia połączenia PPP, jednak skrypty dio tego wymagane są znacznie bardziej skomplikowane. Dlatego nie opisujemy jak korzystać z DIPa do tworzenia połaczenia PPP.
Zamiast tego opisujemy standardowe oprogramowanie wykorzystywane w tym celu, praę programów chat/pppd.
Pdajemy wskazówki w jaki sposób skonfigurować serwer PPP (pozwalający innym na nawiązywanie połaczeń modemowych i zestawianie połączeń PPP).
Pamiętaj, że zrobić z Linuxa serwer PPP można na mnóstwo sposobów. W tym dokumenci autor przedstawia w jaki sposób autor skonfigurował kilkanaście takich serwerów, każdy po 16 modemów.
Ta metoda została sprawdzona w działaniu. Jednak nie musi być najlepszą. Jeśli któs ma sprytniejszą,lepsza konfigurację swerwera PPP, nie wahajcie się napisać na ten temat do autora niniejszego dokumentu.
Przedstawiamy podstawowe informacje na temat łączenia dwóch sieci LAN, lub sieci LAN z Internetem przy wykorzystaniu oritikołu PPP.
Ten dokument zakłada, zę korzystasz zjadra Linuxa w wersji 1.2.x i PPP w wersji 2.1.2 lub jądra w wersji 1.3.x/2.0.x u PPP 2.2
Możliwe jest korzystanie PPP w wersji 2.2.0 z jądrem 1.2.13 lecz wymagane są odpwiednie łaty. Ten dokument NIE omawia tego przypadku.
Powinieneś również wiedizeć, że nie można używać PPP 2.1.2 z jądrem 2.0.X.
Pamiętajm ze ten dokument nie porusza problemów związanych z
wykorzysatniem ładowalnych modułów jądra w wersji 2.0.x. Przeczytaj
kerleld mini-HOWTO i dokumetacje kernel/module w dystrybucji jąder
2.0.x ( w katalogu /usr/src/linux/Documentation.
Ponieważ ten dokument jest rpzeznaczony dla początkujących użytkowników, mocno zalecamy korzystanie z wersji linuxa i towarzyszącego oprogramowania, których wspołraca jest uważana za stabilną.
Radzimy zapoznać się z :-
/usr/doc...)man chat i man pppd )
Najlepszym punktem początkowym dokumentacji Linuxa po polsku jest Strona macierzysta polskich tłumaczeń dokumentacji Linuxa
Choć do zestawienia połączenia PPP wystarczą informacje zawarte w tym dokumencie bez konieczności czytania innych, lecz radzimy to zrobić , przez co uzyskasz lepsze zrozumienie całego zagadnienia. Bedziesz w stanie samemu wykrywać problemy (lub choćby zadawać mądrzejsze pytania na pl.comp.os.linux).
Wspomniane dokumenty (jak zresztą cała masa innych, włączając odpowiednie RFC) dostarczają dodatkowej, szczegółowej informacji od tej jaką można było przedstawić w niniejszym dokumencie.
Jeśli masz zamiar podłączyć do Internetu sieć lokalną LAN, powinieneś
posiadać podstawowe informacje na temat sieci TCP/IP. Prócz
wspomnianych wcześniej dokuentów na pewno bardzo wartościowymi będą
dla ciebie pozycje wydawnictwa O'Reilly: "TCP/IP
Network Administration" i "Building
Internet Firewalls".
Istnieje wiele list dyskusjnych na temat Linuxa, jako forum wymiany informacji między użytkownikami o różnym poziomie znajomości tematu. Zachęcamy do korzystania z tych, które cię interesują i w miarę możliwości dostarczania tam własnego wkładu.
Część z list jest przeznaczowna dla bardzo zaawansowanych użytkowników lub specjalistów w danym temacie. Choć nikt nie będzie narzekał jeśli się na taką listę zapiszesz, lecz nie będziesz wysyłał żadnych pytań, lecz jeśli zadasz początkujące pytania na takich listach, możesz spodzieać się goroących odpowiedzi. Nie jest tak dlatego, ze guru nienawidzą początkujących, lecz dlatego, że przeznaczeniem tych list jest obsługa konkretnych problemów ma odpowiednio wysokim poziomie trudności.
Zachęcamy do dołączenia się do list, które nie mają szcególnyc hwywmagań c odo uczestników, lecz pamiętaj aby twoje wiadomości były ściśle związane z tematem listy.
Dobrym punktem startowym na temat list i grup dyskusyjnych o Linuxe jest strona Linux Mailing List Directory
Abyś mogł korzystać z PPP jądro Linuxa musi być skompilowane w taki
sposób aby wspomagać jego obsługę. Jeśli jeszcze nie posiadasz,
zaopatrz się w kod źródłowy jądra - jeśli jest zainstalowany
znajdziesz go w katalogu /usr/src/linux.
Sprawdź zawartość tego katalogu, wiele dystrybucji podczas instalacji wgrywają również pliki źródłowe jądra.
Źródła jądra możne również zfobyć przez Internet z
sunsite.unc.edu lub jego licznych kopii.
Krótka instrukcja jak zdobyć i zainstalować źródła jądra Linuxa. Pełną inforamcję na ten temat zawiera dokument Linux Kernel HOWTO.
Aby zainstalować i skompilować jądro Linuxa musisz być zalogowany jako administrator(root).
/usr/srccd /usr/src/usr/src/linux czy są jużtam zainstalowane
pliki źródłowe jądra./usr/src.rm -rf /usr/src/linuxtar xzf linux-2.0.29.tar.gzcd /usr/src/linux , przezcytaj plik
README. Zawiera doskonałe wyjaśnienie w jaki sposób skonfogurować i
skompilować nowe jądro. Przeczytaj ten plik (mozesz go wyderukować,
gdyż papierowa kopia może być przydatna podczas konfiguracji i
kompilacji jądra).
MUSISZ wiedzieć jakiego rodzaju karty posiadasz. W niektórych przypadkach (karty dźwiękowe) musisz również znać różne inne ustawienia (np przerwanie IRQ, adrew We/Wy i podobne).
Aby rozpocząć proces konfiguracji, wykonaj polecenia opisane w pliku README. Rozpozcynasz proces konfiguracji jądra poleceniem
make config
Aby korzystać z PPP, musisz skonfigurować jądro tak, aby została dołączniea obsługa PPP w jądrze (PPP wymaga zarówno obsługi protokołu przez jądro, jak i samego programu pppd).
PPP (point-to-point) support (CONFIG_PPP) [n] y
Odpowiedz na następne pyania zgodnie z posiadanycm sprzętem i pożądanyc hcech systemu. Następnie wykonaj kolejne polecenie przedstawione w pliku README.
Jadro 1.2.13 tworzy jedynie 4 urządzenia PPP. W przypadku korzystania z kart wieloportowych musisz poprawić pliki źródłowe jądra. (Zobacz README.linux, część dystrybucji palietu PPP-2.1.2.
Uwaga: dialog komfiguracyjny jądra w wersji 1.2.13 nie pozwala na
cofanie się do pytań na które już zostałą podana odpowiedź. Więc jeśli
pomylisz się musisz przerwać program (naciskając Ctrl-C i
powtórzenie polecenia make config.
W przypadku jądra 2.0.x możesz wykorzystać przedstawioną wcześńiej procedurę. W celu przwidłoweg ozinstalowania plików źródłowych wykonuj instrukcje z pliku README. Następnie rozpocznij konfigurację wydając polecenie:
make config
Możesz spróbować innego sposobu, a mianiwicie
make menuconfig
Ta metoda przywołuje program konfiguracyjny oparty o listę prostych w obsłudze menu, z osiągalną pomocą on-line.
Jesnieje również bardzo rekomentowana wersja pod X
make xconfig
Obsługa PPP może być wkompilowana bezpośrednio w jądro lub jako oddzielny moduł. Jeśli będziesz korzystął z PPP tylko od czasu do czasu, wtedy polecamy skompilowanie PPP jako oddzielnego modułu. Jeśli korzystasz zporgramu 'kerneld', modul PPP zostanie załadowany automatycznie w momencie gdy jądro zostanie poproszone o obsługę protokołu PPP. W ten sposób oszczedzasz cenna pamięc operacyjną w systuacji kiedy nie korzystasz z PPP, ponieważ kod jadra musis w całości znajdować sie w pamięci operacujnej komputera, lecz moduły łwadowane przez kerneld saautomatyczne usuwane z pamięci jęsli nikt z nich nie korzysta.
W tym celu musisz włączyć obsłygę ładowania modułow:
Enable loadable module support (CONFIG_MODULES) [Y/n/?] y
Aby dodać obsługę PPP odpowiedz na następujące pytanie:
PPP (point-to-point) support (CONFIG_PPP) [M/n/y/?]
Jeśli chcesz aby to był ładowalny moduł odpowiedz M. Jeśli bma być wkompilowany bezpośrednio w jądro odpowiedz Y.
W przeciwieństwie do jądra w wersji 1.2.13 jądro 2.0.x tworzy urżadzenie PPP w locie wtedy, kiedy są potrzebne i nie trzeba zmieniać źródęł jądra aby dodać więcej niź 4 kanały PPP.
/proc/net/devJesli korzystasz z PPP-2.2 stwierdzisz, zę efektem ubocznym tworzenia kanałów PPP w locie jest fakt, że nie są one wykazywane w pliku /proc/net zanim nie zostanie utworzone przez uruchomiony program pppd.
[hartr@archenland hartr]$ cat /proc/net/dev
Inter-| Receive | Transmit
face |packets errs drop fifo frame|packets errs drop fifo colls carrier
lo: 92792 0 0 0 0 92792 0 0 0 0 0
eth0: 621737 13 13 0 23 501621 0 0 0 1309 0
Jeśli już jakieś połączenia zostaną nawiązane, na serwerze PPP będziesz mógł obejżeć listę urządzeń podobną do tej poniżej:
[root@kepler contrib]# cat /proc/net/dev
Inter-| Receive | Transmit
face |packets errs drop fifo frame|packets errs drop fifo colls carrier
lo: 428021 0 0 0 0 428021 0 0 0 0 0
eth0:4788257 648 648 319 650 1423836 0 0 0 4623 5
ppp0: 2103 3 3 0 0 2017 0 0 0 0 0
ppp1: 10008 0 0 0 0 8782 0 0 0 0 0
ppp2: 305 0 0 0 0 297 0 0 0 0 0
ppp3: 6720 7 7 0 0 7498 0 0 0 0 0
ppp4: 118231 725 725 0 0 117791 0 0 0 0 0
ppp5: 38915 5 5 0 0 28309 0 0 0 0 0
Jeśli konfigurujesz swojego Linuxa jako serwer PPP, musisz wkompilować w jądro obsługę forwardowania pakietów (IP forwarding). Jest to również konieczne, jeśli twoj Linux ma łączyć ze sobą dwie sieci LAN lub przyłączyć lokalną sieć LAN do Internetu.
Jeśli przyłączasz sieć LAN do Internetu (lub łączysz ze sobą dwie sieci LAN) powinieneś poświęcić dużo uwagi bezpieczeństwu. Dlatego obowiązkowe wydaje się w takim przypadku wkompilowanie obsługi firewalla (IP Firewalling).
Będziesz tego potrzebował również w przypadku, gdy chcesz skorzystać z IP masquerade w celu podłączenia do internetu sieci lokalnej pracującej na zastrzeżonych klasach numerów IP.
Jak już zainstalujesz nowe jądro i zrestartujesz komputer aby było aktywne, wtedy możesz rozpocząć konfigurowanie i testy połączenia PPP.
Zanim będziesz w stanie ustanowić połączenie PPP z serwerem, musisz zdobyć następujące informacje (od administratora opiekującego sie serwerem):
Zapisz dokładnie wszystkie te informacje - będziesz z nich korzystać.
Powinieneś się upewnić że twój modem jest poprawnie podłączony i skonfigurowany, i wiesz do którego portu szeregowego jest podłączony.
Pamiętaj:-
Korzystając z programu komunikacyjnego (mp minicom), wybierz numer telefoniczny serwera PPP do którego chcesz się przyłączyć za pomocą PPP.
(Uwaga: W tym stadium nie staramy się nawiązać połączenia PPP - jednynie chcemy się upewnić, że posiadamy poprawny numer telefonu, chcemy sorawdzić, że nasz modem działa poprawnie i chcemy dowiedzieć się jakie dokladnie komunikaty wysyła w czasie logowania się serwer PPP).
Podzcas czałego tego procesu powinieneś prowadzić bardzo dokładne notatki wszelkich zachęt i komunikatów wysyłanych przez serwer lub najlepiej włączyć rejestrownianie wszystkiego do pliku (log file). Szczególnie nas interesuje cała procedura logowania się do systemu, w jaki sposób serwer zachęca cię do wprowadzenia identyfikatora, a potem hasła i jakie komunikaty wyświetla podczas uruchamiania PPP.
Warto zadzwonić co najmniej dwukrionie. Niektóre serwery zmieniają sposób zachęcania do wprowadzania informacji (np. z czasem). Dwie najważniejsze zachęty jakie potrzebujesz znać to:-
Jeśli w celu uruchomieania na serwerze PPP musisz wydać jakieś polecenie, musisz również zanotować jak wygląda zacheta serwera do wywdawani poleceń, po tym jak już się zalogujesz do serwera.
Jeśli serwer automatycznie uruchamia PPP zaraz po tym jak się zalogujesz, zobaczysz na ekranie serie smieci - to serwer PPP przesyła inforamcje niezbędne do konfiguracji i zestawienia połączenia PPP.
To powinno wyglądać mniej więcej tak:-
~y}#.!}!}!} }8}!}$}%U}"}&} } } } }%}& ...}'}"}(}"} .~~y}
(pojawia się raz za razem)
W tym momencie możesz przerwać połączenuie (zwykle wpisz szybko +++, a gdy twój modem odpowie OK wydaj polecenie ATHO).
W niektórych systemach PPP musi zostać uruchomione przez użytkownika. Zwykle jest tak dlatego, ze serwer został skonfigurowany w ten sposób aby umożliwić połączenia PPP i zwykłe sesje terminalowe przy wykorzystaniu tego samego konta. W takim przypadku, jak już sięzalogujesz na serwerze musisz wydać to polecenie. Ponownie zobaczysz smiecie pojawiające się na ekranie - to serwer PPP próbuje nawiązać połączenie z twoim komputerem. Możesz odłozyć słuwawkę.
Jeśli nie zobaczysz na ekranie wspomnianych wcześniej śmieci wszystko wskazuje (choć nie na pewno), że popełniłeś jakiś błąd.
Może się zdarzyć taki przypadek, ze trafiłeś na serwer pracujący w trybie pasywnym - to znaczy taki, który nie wysyła komunikatów zanim klient (twój komputer) nie rozpocznie zestawiania połączenia PPP.
Jednakże większość serwerów jest w tym wzgłędzie aktywna i powinieneś jednak zobaczyć te śmiecie.
Jeśli nie możesz uruchomićmodemu, przeczytaj dokumentację, która mu towarzyszy, strony podręcznika dotyczące oprogramowania komunikacyjnego z którego korzystasz (man minicom) i Serial-JTZ!. Kiedy się z tym uporasz powtórz całą procedurę.
Jeśli korzystasz z szybkich (zewnętrznych) modemów (14400 Bodów i więcej) twój port szeregowy musi umożliwiać przesyłanie inforamcji z odpowiednią prędkością jaka może wygenerować modem, sczególnie gdy modem posiada kompresję sprzętową.
To wymaga korzystania z portów z nowoczesnymi ukłądami UART (Universal Asynchronous Receiver Transmitter) takimi jak 16550A. Jeśli korzystasz ze starego komputera (lub starą kartę portów szeregowych) całkiem możliwe, że korzystasz z układów UART 8250, które mogą powodować klopoty przy korzystaniu z modemów o dużej prędkości.
Linux potrafi powiedzieć jakiego rodzaju układu używasz. Skorzystaj z polecenia
setserial -a /dev/ttySx
Jeśli nie posiadasz układów 16550A, kup nową kartę portów szeregowych zawierającą te uklady (cena poniżęj $ 50).
Uwaga: pierwsze wersje układu 16550 miały bląd. Został on szybko rozpoznany i powstala nowa poprawiona wersja tego układu 16550A. Cześć błędnych układów dostała się jednak do obiegu. Prawdopodobieństwo, że natrafisz na takie układy jest niezwykle małe, lecz sprawdzając układy szukaj oznaczenia 16550A, sczególnie w starszych kartach.
Muszi poprawnie skonfigurować modem, przeczytaj jego dokumentację. Większość modemów jes dotarczana z ustawieniami fabrycznymi, które włączają opcje wymagane dla PPP. Minimalna konfiguracja powinna określać:-
&K3 w wielu modemach Hayes)Inne ustawienia (standardowe polecenia modemów Hayes), którym powinieneś się przyjżeć to:
&C1 Carrier Detect ON Tylko po połączeniu&S0 Data Set Ready (DSR) zawsze ONWarto również się dowiedzieć w jaki sposób pracuje połączenie między modemem i twoim komputerem. Wiekszość nowoczesnych modemów pozwala na pracę z USTALONĄ predkością, pozwalając jednocześnie na zmianę prędkości połączenia przez linię telefoniczną na największą jaką potrafi przenieść sama linia i obsłużyć zdalny modem.
Jest to znany jako tryb pracy z dzieloną prędkościa. Jeśli twoj modem potrafi to obsłużyć, zblokuj interfejs szeregowy modemu na najwiekszą prędkość jaką porafi obsłużyć (zwykle 115200 bps lub 38400 bps dla modemów 14400 bodów).
Skorzystać z oprogramowania komunikacyjnego (np minicom) aby
dowiedzieć się więcej na temat konfiguracji modemu i skonfiguruj go do
pracy z PPP. Wiekszość modemów pokazuje aktualne ustawienia po wydaniu
polecenia AT&V, lecz sprawdź to w dokumentacji modemu.
Jeśli przypadkiem nabałaganisz w ustawieniach, możesz powrócić do
ustawień fabrycznych wydając polecenie AT&F. W większości
modemów jakie spotkałem ustawienia fabryczne były wystarczajace do
poprawnej współpracy z PPP, lecz powinieneś to sprawdzić.
Zachować konfigurację modemu w pamięci modemu (zwukle poleceniem
AT&W - sprawdz w dokuentacji).
Zachowanie prawidłowej konfiguracji w modemie, włączenie modemu, lub jego zerowanie ją uaktywnia. Dzięki temu w znaczny sposób uraszcza się skrypty niezbędne do zestawienia połączenia PPP.
Kiedy informacje podróżują przez linie szeregowe, może się zdarzyć, że dane przybywają szybciej, niż komputer jest w stanie je obsłużyć (komputer może być zajęty czymś innym - pamiętaj Linux jest systemem wielozadaniowym i wieloużytkownikowym). Aby zapewnić, że informacja nie zostanie utracona konieczne jest odpowiednie sterowanie przepływem danych (dane nie miesczą się w buforze i są tracowne).
Istnieją dwie metody:-
Podczas, gdy ta ostatnia może być wystarczająca w przypadku termianli (danych tekstowych), połączenia PPP korzystają z wszystkich 8-miu bitów i moze się zdarzyć, że gdzieś w strumieniu danych znajdzie się znak odpowiadający sygnałowi Control Q lub Control S. Więc jeśli modem zostanie skonfigurowany do obsługi sysgnałów programowych, wszystko może gwałtownie przestać działać.
Dal PPP korzystającego z danych 8-mio bitowych sprzetowe sterowanie przepływaem danych jest absolutnie niezbędne.
Ponieważ PPP musi skonfigurować urządzenia sieciowe, zmodyfikować tabele routingu itp. musi wtedy posiadać uprawnienia administratora.
Jeśli połączenie PPP zestawia użytkownik inny niż root, wtedy program pppd musi mieć ustawiony bit setuid i należeć do aministratora (setuid root) :-
-r-sr-xr-x 1 root root 95225 Jul 11 00:27 /usr/sbin/pppd
Jeśli /usr/sbin/pppd nie ma takich atrybutów, musisz jako administrator (root) wydać polecenie :-
chmod u+s /usr/sbin/pppd
Powuższe polecenie umozliwia uruchomienie programu pppd z uprawnieniami administratora nawet przez zwykłego użytkwonika. W ten sposób zwykły użytkownik może zainicjować połączenie PPP, a sam program będzie posiadał odpowiednie uprawnienia do skonfigurowania urządzeń sieciowych i modyfikacji tabeli routingu.
Programy z ustawionym bite, suid są potencjalnymi dziurami w systemie zabezpieczeń i powinieneś być niesłychanie ostrożny w ustawianiu biru suid dla programów, których właścicielem jest administrator (root). Cześć programów (włączając pppd) była napisana ze specjalnym uwzglednieniem minimalizowania niebezpieczeństwa wykoklego z wykonywania tego programu jako administrator, więc powinieneś tym razem czuć się bezoieczny (choć nie dajemy żadnych gwarancji).
W zależności od sposobu pracy twojego systemu - sczegołnie jeśli chesz umożliwić KAŻDEMU użytkownikowi twojego systemu inicjowanie połączeń PPP powinieneś zmienić atrybuty sktyptów do włączania/wyłączania PPP tak, aby te pliki mogły byc czytane i wykonywane przez wszystkich.
Jednakże jeśli NIE chcesz aby każdy mogł uruchomić PPP (np twoje dzieci posiadają konta na twoim komputerze i nie chesz aby podłaczały się do internetu bez twojego nadzoru) musisz utworzyć odzielna grupę PPP (zmień plik /etc/group) a następnie:-
-rwxr-x--- 1 root PPP 587 Mar 14 1995 /usr/sbin/ppp-on
-rwxr-x--- 1 root PPP 631 Mar 14 1995 /usr/sbin/ppp-off
Nawet jeśli tak postąpisz, zwykli użytkownicy NADAL nie będą w stanie zamknąć połączenia PPP!. Pamiętaj, że kązdy może wyłączyć modem.
Na moim domowym PC NIE ustawiam bitu suid dla pppd. Abyuruchomić połączenie muszę zalogować sie jako administrator - czyli znać hasło. W ten sposób kontroluję dostęp mojego syna do Internetu.
Jeśli nawet chcesz aby PPP było dostępne dla wszystkich użytkowników, podczas wykonywania opisyuwanych poniżej modyfikacji plików i katalogów musisz pracować jako administrator.
PPP korzysta z kilku plików podczas zestawiania połączenia. Ich nazwy i położenie sąinne dla PPP w wersji 2.1.2 i 2.2.
W przypadku PPP 2.1.2 są to:-
/usr/sbin/pppd # plik binarny /usr/sbin/ppp-on # skrypt do nawiązywania połaczenia /usr/sbin/ppp-off # skrypt kasujący połączenie /etc/ppp/options # plik z opcjami totyczacymi wszystkich połączeń /etc/ppp/options.ttyXX # opcje specyficzne dla połączeń przez ten port
For PPP 2.2 the files are:-
/usr/sbin/pppd # plik binarny /etc/ppp/scripts/ppp-on # skrypt do nawiązywania połaczenia /etc/ppp/scripts/ppp-on-dialer # skrypt do wybierania numeru serwera /etc/ppp/scripts/ppp-off # skrypt dla programu chat /etc/ppp/options # plik z opcjami totyczacymi wszystkich połączeń /etc/ppp/options.ttyXX # opcje specyficzne dla połączeń przez ten port
Jak widać w katalogu /etc powinieneś znaleźć podkatalog ppp:-
drwxrwxr-x 2 root root 1024 Oct 9 11:01 ppp
Jeśli nie istnieje musisz go utworzyć.
Jeśli ten katalog już istnieje, powinien zawierać plik wzrocowy o nazwie options.tpl. Poniżej przedstawiamy zawartość tego pliku.
Powinieneś go wydrukować ponieważ zawiera wyjaśnienie wszystkich opcji
PPP (dobrze się z nimi zapoznać w połączeniu ze stronami podręcznika
dotyczącymi programu pppd (man pppd)). Choć mogłbyć użyć tego pliku
jako
podstawy d utworzenia pliku /etc/ppp/options, prawdopodobnie
lepiej jest go utworzyć od początku, tak aby nie zawierał tych
wszyskich komentarzy - będzie znacznie łatwiejszy w utrzymaniu.
Jeśli posiadasz wiele linii modemowych (przypadek serwera PPP),
powinieneś utworzyć plik /etc/ppp/options z opcjami wspólnymi
dla wszystkich portów i jeśli jest to konieczne utworzyc indywidualne
pliki dla każdej linii oddzielnie, które będą zawierały indywidualne
ustawienia wymagane dla konkretnego portu.
Są to pliki o nazwach options.ttyx1<, options.ttyx2 itd.
(x X oznacza odpowiednią literę oznaczjąca port szeregowe twojego
komputera).
Jednak w przypadku pojedynczego połączenia PPP całkowicie wystarczy
jeden plil /etc/ppp/options. Ostatecznie mogłbyś podać
wszystkie te parametry w wierszu poleceń programu pppd.
Łatwiej jest opiekować się konfiguracją, która korzysta z plików
/etc/ppp/options.ttySx. Jeśli korzystasz z PPP aby łączyć
się z różnymi serwerami, możesz utworzyć dla każdego serwera wlasny
plik konfiguracyjny i przekazywać jego nazwę jako argument polecenia
uruchamiającego połączenie PPP.
Częsć dystrybucji PPP wydaje się być pozbawiona pliku options.tpl,
dlatego tutaj podajemy jego pełną treść. Zamiast zmieniać ten plik,
lepiej stworzyć /etc/ppp/options od nowa. Rownież nie
wprowadzaj zmian bezpośrednio do tego pliku. Zrob wpierw jego kopię i
ją modyfikuj. W razie klopotów możesz wtedy rozpocząć wszystko na nowo.
# /etc/ppp/options -*- sh -*- ogólne opcje pppd # created 13-Jul-1995 jmk # autodate: 01-Aug-1995 # autotime: 19:45 # Do sestawienia połączenia między modemami wykorzystaj program lub # skrypt. Bedzie tozwyklę program "chat", który wybierze numer # zaloguje się i uruchomi ppp po drugiej stronie #connect "echo Musisz zainstalować program do nawiązania połączenia modemowego" # Wykonaj ten program, lub skrypt po tym, Jak pppd zerwie połączenie. # ten skrypt może w przypadku braku sprzętowego sterowania modemem # wydać modemowi aby odłożył słuchawkę. #disconnect "chat -- \d+++\d\c OK ath0 OK" # async character map -- 32-bit hex; każdy bit oznacza znak, który # musi być poprzedzony znakiem escape (escaped char), tak aby pppd mogł # go odebrać. 00000001 oznacza '\x01', a 0x80000000 oznacza '\x1f'. #asyncmap 0 # Wymaga potwierdzenia toższamoaći przed zezwoleniem na # wysyłanie/odbiór pakietów sieciowych #auth # Do sterowania przepływem inforamcji przez port szeregowy skorzystaj # ze sprzętowego sterowania modemem (tzn. RTS/CTS). #crtscts # Do sterowania przepływem inforamcji przez port szeregowy skorzystaj # ze programowego sterowania modemem (tzn/ XON/XOFF). #xonxoff # Po zakończonych sukcesem negocjacjach IPCP dodaj to tabeli routingu # domyślną trasę, używając jako bramę komputer po drugiej stronie # połączenia ppp. Trasa ta jest usuwana z tabeli routingu w momencie # zerwania połączenia PPP. #defaultroute # Określa, które znaki muszą być przesyłąne specjalnie (escaped) - # niezależnie czy druga strona (za pomocą opcji asyncmap) zażądała aby # były w taki sposób przesyłane, czy nie. Znaki są podane jako ciągi # liczb w notacji szesnastkowej, rozdzielone przecinkami. Zauważ, że # możesz tu wpisać niemal każdy znak, w przeciwieństwie do parametru # asyncmap, który jako swoje argumenty przyjmuje jedynie znaki sterujące # (control characters). Znaki, które nie mogą być przesyłane w sposób # specjalny to znaki, których kody zawierają się w przedziale 0x20-0x3f # i znak 0x5e. #escape 11,13,ff # Nie korzystaj z sygnałów strowania modememe #local # Określa, że pppd w celu zapewnienia wyłącznści w dostępie do portów # szeregowych powinno korzystać z plików blokady w stylu UUCP. #lock # Krzystaj z sysgnałów sterownai modemem. Na Ultrixie, ta opcja # oznacza spzętowe sterownie przepływem danych, tak jak to włącza opcja # crtscts. # (Ta pcja nie jest w pełni zaimplementowana) #modem # Nadaj zmienej MRU [Maximum Receive Unit - Największy blok # otrzymywany] wartość <n>. Pppd poprosi drugą stronę o nie przysyłanie # większych pakietów niż <n> bajtów. Minimalna wartość MRU wynosi # 128. Wartością domyślną jest 1500. W przypadku wolnych łączy zaleca # się wartosć 296 (40 bajtów na nagłówek TCP/IP i 256 bajtów danych) #mru 542 # Ustawienie netmaski interfejsu sieciowego. 32-wu bitowa w notacji # dajtowo-dziesiętnej (np. 255.255.255.0). #netmask 255.255.255.0 # Wyłączenie opcji negocjowania adresu IP z serwerem. Jeśli ta opcja będzie # włączona adres IP musi zostać podany jako parametr połączenia (w pliku # opcji lub w wierszu poleceń, lub przekazany przez serwer w czasie # negocjacji IPCP. #noipdefault # Włącza pasywne zachowanie LCP. PPP spróbuje nawiązać połączenie, # jeśli to się nie uda, zamiast zakończenia pracy (normalne zachowanie # gdy ta opcja jest wyłączona) bedzie oczekiwał na poprawny pakiet LCP # nadesłany przez drugi komputer. #passive # PPP nie będzie wysyłało żadnych pakietów LCP, w celu nawiązania # połączenia. Będzie jedynie nasłuchiwało na nadejście takich pakietów # z drugiej strony połączenia (zachowanie opcji "passive" w starszych # wersjach pppd) #silent # Nie żądaj i nie pozawalaj na ustalenie jakichkolwiek opcji w czasie # negocjacji LCP czy IPCP (wykorzystaj wartości domyślne). #-all # Wyłączenia kompresji negocjacji adresu/sterowania (wykorzystaj # ustawienie domyślne, tzn pole adres/sterowanie wyłaczone). #-ac # Wyłącz negocjacje opcji asyncmap (skorzystaj z domyślnej wartości # asyncmap, czyli przesyłaj w sposób specjalny jedynie znaki sterujące. #-am # Nie twórz procesu potomnego w tle ( w przeciwnym wypadku pppd # zachowa się w ten sposób jesli podany port oznacza urządzenie szeregowe) #-detach # Wyłącz negocjację adresu IP (pppd musi otrzymac jako parametr adres # IP komputera na drugim końcu połączenia - w wierszu poleceń lub # pliku opcji) #-ip # Wyłącz negocjację numeru magicznego/specjalnego/charakterystycznego # (magic number). W ten sposób pppd nie wykryje urządenia pętli zwrotnej. #-mn # Wyłącz negocjację parametru MRU [Maximal Receive unit]. Wykorzystaj # wartośćdomyślną 1500. #-mru # Wyłącz negocjację pola protokołu (skorzystaj z opcji domyslnej: # kompresja wyłączona). #-pc # Zażądaj aby druga strona przedstawiła się za pomocą protokołu PAP. #+pap # Nie zgadzaj się na przedstawianie się za pomocą PAP #-pap # Zażądaj aby druga strona przedstawiła się za pomocą protokłu CHAP # [Cryptographic Handshake Authentication Protocol]. #+chap # Nie zagadzaj się na przedstawienei się za pomocą CHAP. #-chap # Wyłącz negocjację kompresji nagłówków IP w styly Van # Jacobsena. Skorzystaj z wartości domyślnej: brak kompresji. #-vj # Zwiększ posiom odpluskwiania (to camo co opcja -d). Pppd będzie # rejestrowało zawartość wszystkich wysłanych i otrzymanych pakietów # kontrolnych w formie nadającej się do interpretacji przez # człowieka. Rejestrowanie dokonuje się za pomocą dzienników systemowych # (syslog) na poziomie `debug' z wartościa `daemon'. Informacje te mogą # być zapisywane w pliku. Przeczytaj o pliku konfiguracyjnym # /etc/syslog.conf (man syslog.conf). Jeśli pppd zostało skompilowane z # włączeniem dodatkoweg oodpluskwiania, wiadomości będą rejestrowane z # warością `local2' zamiast `daemon'. #debug # W celach przedstawiania się i weryfikacji tożsamości do nazwy # komputera dodaj domenę <d>. Np. jeśli funkcja gethostbyname() # przekazuje wartość `porshe', lecz pełna nazwa komputera jest # `porsche.Quotron.COM' musisz skorzystać z tej opcji i podać domenę # Quotron.COM. #domain <d> # Włącz kod udpluskwiania na poziomie drajwera jądra. Argument n jest # liczba składającą się z sumy poszczególnych elementów: 1 włączenie # ogólnych komunikatów odpluskwiających, 2 - wyświetlanie zawartości # przychodzących pakietów, 4 wyświetlanie zawartości pakietów wysyłanych. #kdebug n # Nadaj parametrowi MTU [Maximum Transmit Unit] warość<n>. Jeśli druga # strona w czasie negocjacji nie zarząda mniejszej wartośćMTU, pppd # poprosi aby kod jądra wywyłał przez interfejs ppp pakiety o wielkości # nie przekraczającej n bajtów. #mtu <n> # Do celów weryfikacji tożsamości przyjmij nazwę <n>. #name <n> # Do celów weryfikacji tożsamości w protokole PAP przyjmij nazwę # uzytkownika równą <u>. #user <u> # Wymuś wykorzystywanie do celów weryfikacji tożsamości przyjęcie # nazwy komputera jako nazwy systemu próbującego nawiącać połączenie. #usehostname # Do celów weryfikacji tożsamości przyjmij nazwę zdalnego systemu # równą <n>. #remotename <n> # Dodaj pozycję do systemowej tabeli ARP [Address Resolution Protocol] # z adresem IP systemu po drugiej stronie połączenia i twoim adresem # Ethernetowym. #proxyarp # Do celów weryfikacji tożsamości w protokole PAP skorzystaj z # systemowej bazy haseł. #login # Pppd będzie wysyłało do systemu po drugiej stronie ramki LCP # echo-request (żądanie echa) co n sekund. Pod Linuxe, echo-request jest # wysyłany wtedy, gdy z drugiej strony w ciągu ostanich n sekund nie # nadszedł żaden pakiet. Zwykle druga sptrona powinna odpowiedzieć na # echo-request wywłając echo-reply (odpowiedź na żądanie echa). Wraz z # opcją lcp-echo-failure może być wykorzystana do wykrywania przerwania # połączenia przez drugą stronę. #lcp-echo-interval <n> # Jeśli po n ramkach echo-request nie nadejdzie żadna rama echo-reply # pppd potraktuje to jako zerwanie połączenia przez drugą stronę. Jeśli # tak się stanie pppd przerwie połączenie. Korzystanie ztej opcji wymaga # podania niezerowego parametru w opcji lcp-echo-interval. Zwykle # korzysta się z tej opcji w celu wykrycia fizycznego przerwania # połązenia (np odłożenie słuchawki przez modem) w systucajch, gdy nie # stosuje się sprzętowych liniisterowania modemem. #lcp-echo-failure <n> # Przyjij przerwę między właczaniem negocjacji LCP równą <n> sekund # (retransmission timeout). Domyślnie 3 #lcp-restart <n> # Przyjmij maksymalną liczbę transmisjji polecenia przerwania żądania # (terminate-request) w protokole LCP. Domyśłnie 3. #lcp-max-terminate <n> # Przyjmij maksymalną liczbę transmisjji polecenia konfiguracyjnego # protokołu LCP równą <n>. Domyśłnie 10. #lcp-max-configure <n> # Ustaw maksymalną liczbę zwróconych w protokole LPC żądań # configura-NAK, zanim rozpocznie się transmisja poleceń # configure-Reject. Domyślnie 10. #lcp-max-failure <n> # Ustaw przerwę w protokole IPCP (retransmission timeout) równą <n>. # Domyśłnie 3. #ipcp-restart <n> # Ustaw maksymalną liczbę transmisji polecenia terminate-request protokołu # IPCP równą <n>. Domyślnie 3. #ipcp-max-terminate <n> # Ustaw maksymalną liczbę transmisji polecenia configure-request protokołu # IPCP równą <n>. Domyślnie 10. #ipcp-max-configure <n> # Ustaw maksymalną lizcbę zwróconych poleceń configure-NAK protokołu # IPCP zanim rozpocznie się wysyłanie poleceń configure-Reject równą # <n>. Domyśłnie 10. #ipcp-max-failure <n> # Ustaw przerwę między uruchamianiem protokołu PAP (retransmission # timeout) rowną <n> sekund. Domyśłnie 3. #pap-restart <n> # Ustaw maksymalną liczbę transmisji polecenia authenticate-request # protokołu PAP równą <n>. Domyśłnie 10. #pap-max-authreq <n> # Ustaw przerwę między uruchamianiem protokołu CHAP (retransmission # timeout) równą <n> sekunt. Domyślnie 3. #chap-restart <n> # Ustaw liczbę wysłanych żądań rozpoczęcia protokołu CHAP równą <n>. # Domyśłnie 10. #chap-max-challenge # Pppd będzie próbowało nawiązać połączenie z drugą stroną co <n> # sekund. #chap-interval <n> # Pppd zakceptuje podany przez drugą stronę nasz lokalny adres IP, # nawet jeśli został on podany również jako opcja dla programu pppd. #ipcp-accept-local # Pppd zakceptuje podany przez drugą stronę jej adres IP, # nawet jeśli został on podany również jako opcja dla programu pppd. #ipcp-accept-remote
Jak zwykle: to zależy.
Przedstawiay dwie podstawowowe wersje pliku options, które dotyczą większości przypadków.
Jeśli nasza propozycja nie zadziała, PRZECZYTAJ PLIK WZORCOWY
(/etc/ppp/options.tpl) i strony podręcznika programu
pppd (man pppd) i porozmawiaj z administratorem/ludźmi
zajmującymi się obsługą użytkowników serwera, z którym starasz się
nawiązać połaczenie.
W przypadku połączeń, które nie wymagają weryfikacji PAP/CHAP powinien wystarczyć taki plik.
# /etc/ppp/options (bez PAP/CHAP) # # Zapobiegnij odłączaniu się od terminala przez program pppd. -detach # Jeśli korzystasz ze statycnych numerów IP, wpisz tutaj swój numer 0.0.0.0: # # Korzystaj z linii sterowania modemu modem # korzystaj z plików blokady w stylu uucp, zapewniając sobie wyłączny # dostęp do urządzeń szeregowych lock # korzystaj ze sprzętorwego sterowana przepływem danych crtscts # po nawiązaniu połaczenia dodaj do tabli routingu domyślną trasę dla # biegnącą właśnie przez to połączenie defaultroute # Znaki specjalne mają być przesyłane normalnie asyncmap 0 # maksymalny rozmiar pakietu wychodzącego 552 bajty mtu 552 # maksymalny rozmiar pakietu przychodzącego 552 bajty mru 552 # #-------KONIEC /etc/ppp/options (bez PAP/CHAP)
Jeśli serwer wymaga jednak weryfikacji PAP lub CHAP powinieneś spróbować opcji pokazanyhc powyżej z dodatkowymi kilkoma wierszami jakie przedstawiamy poniżej
# # zmus pppd do korzystania do przedstawiania się identyfikatorem # użytkownika jakim posługujesz sie uswojego dostawcy name <twój identyfikator u dostwcy> # musisz zmieić ten wiersz # # Jeśli musisz korzystać z protokołów PAP lub CHAP, usuń znaki # komentarza z kolejnych dwóch wierszy #+chap #+pap # # Jeśli korzystasz z ZAKODOWANYCH haseł w pliku /etc/ppp/pap-secrets # to usuń znak komentarza z wiersza poniżej #+papcrypt
Podczas gdy my, Ludzie lubimy podawać adresu komputerów w postaci ich
nazw, komputery korzystają z liczb. W sieci TCP/IP (czym jest
Internet) nazwymay koputery ich nazwami, akażdy z komputerów żyje we
własnej dquot;domeniedquot;. Np. moj komputer nazywa
się archenland i należy do domeny
hedland.edu.au. Czyli adres mojego komputera w postaci łatwej
do posługiwania się przez człowieka jest
archenland.hedland.edu.au. Inne komputery w Internecie rozpoznają go
jednak przez przydzielony mu adres IP.
Tłumaczenie (resolving) nazwy komputera i domeny na numerki, które są niezbędne do nawiazania połączenia jest wykonywane przez komputery oferujące usługę o nazwie DNS (Domain Name Service).
Podczas zestawiania połączenia PPP musisz powiedzieć swojemu komputerowi skąd może pobierać informacje na temat numeru IP przydzielonego do nazwy komputera, tak abyś ty mógł używać nazw komputerów, lecz twój komputer był w stanie zamienić je na odpowiednie numery IP.
Jednym ze sposobów jest umieszcenie nazwy i numeru każdego komputra, którym będziesz sięchciał połączyć w pliku /etc/hosts ( w rzeczywistoście jest to niemożliwe przy połączeniach z Internetem), innym rozwiązaniem jest podawanie numerów komputerow zamiast ich nazw (możliwe jedynie w przypadku małych sieci)
Najlepiej w taki sposób skonfigurować Linuxa, aby sam wiedział skąd pobrać niezbędne informacje - automatycznie. Tej usługi dostarzca system DNS. Wszystkiego c opotrzebujesz jest umiesczenie w pliku /etc/resolv.conf numeru IP serera udostępniającego usługę DNS.
Ludzie opiekujacy się serwerem PPP powinni dostarczyć ci dwa numery IP serwerów DNS (tylko jeden jest niezbędny, lecz drugi jest przydatny w przypadku, gdy nastąpi awaria pierwszego)
Plik /etc/resolv.conf powinien wyglądać mniej wiećej tak:-
domain domena.twojego.dostawcy.internetu nameserver 10.25.0.1 nameserver 10.25.1.2
Popraw ten plik (utwórz jeśli jest to konieczne) i wprowaź opdpowiednie inforamcje. Pownien mieć następujące atrybuty:-
-rw-r--r-- 1 root root 73 Feb 19 01:46 /etc/resolv.conf
Jeśli posiadasz już działający plik /etc/resolv.conf, ponieważ jesteś przyłączony do sieci LAN, po prostu dodaj numery IP serwera DNS.
Jeśli korzystasz z weryfikacja toższamośći pap lub chap, musisz również utworzyć odpowiedni plik sekretny:
/etc/ppp/pap-secrets /etc/pp/chap-secrets
Podstawową cechą tych plików jest to, że mają uwiarygodniać toższamość komputera (systemu) a nie użytkownika.
"Tak? A jaka to róznica ?" słyszę jak zadajesz to pytanie.
Taka, że po zestawieniu połączenia PPP z serwerem KAŻDY użytkownik twojego komputera może korzystąc z tego połączenia - nie tylko ty. To właśnie dlatego możesz za pomocą PPP zestawić połączenie WAN łączące ze sobą dwie sieci LAN.
Twój dostawca poza podaniem ci identyfikatora użytkownika i hasła wymaganego do przyłązenia się do jego systemu prawdopodobnie nie będzie zainteresowany jakią nazwę nadałeś swojemu komputerowi, dlatego prawdopodobnie powienienś korzystać z identyfikatora użytkownika jaki masz u dostawcy jako nazwy swojego koputera [mówimy o PAP/CHAP].
Dokonuje sie tego za pomocą opcji name username programu
pppd. Jeśli muszisz więc podawać swój identyfikator w systemie
dostawcy dodaj do pliku /etc/ppp/options wiersz
name twoj_identyfikator_obowiązujący_u_dostawcy
Technicznie rzecz biorąc tak naprawdę powienieneś korzysztać z
usertwoj_identyfikator_obowiązujący_u_dostawcy dla PAP, lecz pppd
jest na tyle inteligentny aby zinterpretować name jako
user jeśli tylko serwer zażąda użycia PAP. Zaletą
korzystania z opcji name jest, to, że jest ona również poprawna
dla CHAP.
Ponieważ PAP/CHAP służy so sprawdzania toższamości komputerów, potrzebujesz również podać nazwę zdalnego komputera. Ponieważ jednak większość korzysta tylkoz jednego dostawcy, może w pliku sekretnym w miejscu nazwy zdalnego komputera wstawić znak uniwersalny (*).
Wrto również pamiętać, że wielu dostawców korzysta z wielokrotnych farm modemowych podłączonych do różnych serwerów, dostępnych pod WSPÓLNYM numerem telefonicznym. Dlatego nie można być pewnym, do którego komputera zostaniemy przyłączeni.
Plik /etc/ppp/pap-secrets wygląda mniej więcej tak
# Secrets for authentication using PAP # client server secret acceptable local IP addresses
ćżtery pola rodzielaone odstępami.
Pwiedzmy, że twój dostawca nadał ci nazwe fred i hasło
flintstone. Wrtedy w pliku /etc/ppp/options.ttySx
ustawił byś opcję name fred, a w pliku
/etc/ppp/pap-secrets dopisał
# Hasła do weryfikacji tożsamości za pomocą protokołu PAP # client server secret dopuszczalny lokalny adres IP fred * flintstone
To oznacza, że w przypadku połązcenia lokalnego komputera o nazwie
frd (którą używa pppd choć to nie musis być prawdziwa nazwa tego
komputera) z dowolnym serwerm PPP należy używać hasła flintstone.
Zauważ, że nie musimy podawać lokalnego adresu IP, cgyba że jesteśmy ZMUSZENI do korzystania zkonkretnego, STATYCZNEGO adresu IP.
Jeśli łączysz sie korzystając z PAP z kilkoma różnymi serwerami,
powinieneś albo zaranżować to w taki spsób aby na każdym serwerze
posiadać inny identyfikator username lub poznać nazwy zdalnych
serwerów, z którymi się łączysz. W ten sposób będziesz mógł dodać do
pliku pap-secrets kolejne wiersze definiujące hasło połączenia -
pod warunkiem, że nadasz prawidłową wartość
opci tt/name/ odpowiednią dla każdego serwera z którym nawiązujesz połączenie,
Aktualna wersja porgramu pppd wymaga korzystania z wzajemnych metod potwierdzania tożsamości - to znaczy musisz pozwolić aby twój komputer mogł zweryfikowac odległy serwer i aby odległy serwer mogł zweryfikować twój ompuer.
Jęsli twój komputer nazywa się fred a zdalny serwer nazywa się
barney, to podpowiednie pliki /etc/ppp/options.ttySx na
twoim komputerze powinny zawierać name fred remotename barney, a
na zdalnym serwerze na odwrót name barney remote name fred.
Plik /etc/chap-secrets dla komputera fred wygląda tak
# Hasła do weryfiakcji tozsamości za pomocą protokołu CHAP # client server secret dopuszczalny lokalny adres IP fred barney flintstone
a dla komputera barney, tak
# Hasła do weryfiakcji tozsamości za pomocą protokołu CHAP # client server secret dopuszczalny lokalny adres IP barney fred flintstone
Teraz kiedy masz już utworzone pliki /etc/ppp/options i
/etc/resolv.conf ( i jeśli jest to konieczne pliki
/etc/ppp/pap|chap-secrets) możesz sprawdzić poprawność
konfiguracji przez ręczne zestawienie połączenia PPP. (Kiedy będziemy
potrafili zestawić połączenie PPP ręcznie, zautomatyzowanie całego
procesu będzie bardzo proste).
W tym celu twój program komunikacyjny musi mieć możliwość zkończenia pracy BEZ zerowania modemu. Minicom to potrafi - ALT Q (lub w starszych wersjacj CTRL A Q).
Pamiętaj aby być zlogowanym jako root.
Uruchom program komuniikacyjny (np minicom), wybierz numer do serwera PPP i zaloguj się jak zwykle. Jeśli do uruchomienia PPP wymagane jest wydanie specjalnego polecenia zrób to. Zobaczysz teraz śmiecie o których pisaliśmy wcześniej.
Jeśli korzystasz z pap/chap, wtedy tuż po nawiązaniu połączenia ze zdalnym serwerem powinieneś od razy zobaczyć wspomniane śmiecie, bez potrzeby logowania się (choć w niektórych przypadkach może to być rozwiązane inaczej).
Teraz zakończ pracę programu komunikacyjnego, bez zerowania linii (przerywania połączenia modemowego) - jeśli używasz minicomu wciścnij ALT Q lub CTRL A Q. Nastepnie w wierszu zachęty (jako root) napisz
pppd -d -detach /dev/cuaX &
Opcja -d włącza odpluskwianie - rozpoczyna się rozmowa mająca na celu zestawienie połączenia PPP. Jest ona rejestrowana w dziennikach (log files) co jest przydatne w razie kłopotów.
Naturalnie powinieneś apisać cua0 lub cua1 itd. -
prawdziwą nazwę portu do którego przyłaczony jest modem, nie cuaX!.
Diody twojego modemu powinny migotać podczas zestawiania połączenia PPP. Samo zestawienie połączenia trwa któtką chwilę.
W tym momencie możesz przyjżeć się interfejsowi ppp0 wydając polecenie
ifconfig
Poza inforamcjami o karcie Ethernetu (jelsi taką posiadasz) i urządzeniu o pętli zwrotnej powinieneś zobaczyć cos takiego :-
ppp0 Link encap:Point-Point Protocol
inet addr:10.144.153.104 P-t-P:10.144.153.51 Mask:255.255.255.0
UP POINTOPOINT RUNNING MTU:552 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0
TX packets:0 errors:0 dropped:0 overruns:0
Gdzie
(naturalnie ifconfig nie przedstawi podanych przeze mnie numerów, lecz numery wykorzystywane przez serwer twojego dostawcy).
Uwaga: polecenie ifocnfig iformuje cię również o tym, że połączenie jest zestawione (UP) i dziala (RUNNING).
Jeśli otrzymasz taki komunikat
ppp0 Link encap:Point-Point Protocol
inet addr:0.0.0.0 P-t-P:0.0.0.0 Mask:0.0.0.0
POINTOPOINT MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0
TX packets:0 errors:0 dropped:0 overruns:0
to znaczy, że połączenie PPP nie zostało poprawnie zestawione... przeczytaj rozdział o odpluskwianiu!
Pownieneś rownież móc zobaczyć tabelę routingu z wprowadzoną trasą do serwera PPP i dalej. W tym celu wydaj polecenie
route -n>
Powinieneś zobaczyć coś w tym stylu:-
Kernel routing table Destination Gateway Genmask Flags MSS Window Use Iface 10.144.153.3 * 255.255.255.255 UH 1500 0 1 ppp0 127.0.0.0 * 255.0.0.0 U 3584 0 11 lo 10.0.0.0 * 255.0.0.0 U 1500 0 35 eth0 default 10.144.153.3 * UG 1500 0 5 ppp0
Szczególnie ważne jest to, że do interfejsu ppp0 odnoszą się dwie różne pozycje.
Pierwsza oznacza trasę do KOMPUTERA (flaga H) i pozwala nam "widzieć" komputer, do którego się przyłączylśmy - lecz nie dalej.
Druga oznacza domyślną (default) trasę - to jest trasa jaką wędrują
pakiety, które nie są przeznaczne dla naszej sieci lokalnej lub
bezpośrednio dla samego serwera PPP. Serwer PPP jesr odpowiedzialny za
przekazywanie naszych pakietów dalej do Internetu i przekazywanie nam
pakietów przychodzących do nas z odległych adresów.
Jeśli twoja tabela routingu nie zawiera tych dwóch pozycji, to znaczy, że coś jest nie tak (patrz rozdział o odpluskwianiu).
Teraz przetestuj połączenie 'pingując' serwer (numer IP przekazany przez polecenie ifconfig) tzn.
ping 10.144.153.51
Pwienieneś otrzymać podobną odpowiedź.
PING 10.144.153.51 (10.144.153.51): 56 data bytes
64 bytes from 10.144.153.51: icmp_seq=0 ttl=255 time=328.3 ms
64 bytes from 10.144.153.51: icmp_seq=1 ttl=255 time=190.5 ms
64 bytes from 10.144.153.51: icmp_seq=2 ttl=255 time=187.5 ms
64 bytes from 10.144.153.51: icmp_seq=3 ttl=255 time=170.7 ms
Kolejne wiersze będą pojawiać się w nieskończoność, aż do momentu kiedy wciśniesz CTRL C, a wtedy otrzymasz dodatkowe informacje :-
--- 10.144.153.51 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 170.7/219.2/328.3 ms
Jak na razie wszystko w porządku.
Teraz spróbuj 'pingnąć' komputer podając jego nazwę (nie nazwę serwera PPP lecz zupelnie innego komputer, którego nazwę znasz i który jest w tej chwili włączony do interentu). Np.
ping sunsite.unc.edu
Tym razem najpier nastąpi krótka przerwa, kiedy Linux zamienia nazwę na odpowiadający jej numer korzystając z serwera DNS, którego numer wpisałeś do pliku /etc/resolv.conf - więc się nie martw (powinieneś wiedzieś migające świtełka swojego modemu). Krótko potem zobaczysz cos podobnego do
PING sunsite.unc.edu (152.2.254.81): 56 data bytes
64 bytes from 152.2.254.81: icmp_seq=0 ttl=254 time=190.1 ms
64 bytes from 152.2.254.81: icmp_seq=1 ttl=254 time=180.6 ms
64 bytes from 152.2.254.81: icmp_seq=2 ttl=254 time=169.8 ms
64 bytes from 152.2.254.81: icmp_seq=3 ttl=254 time=170.6 ms
64 bytes from 152.2.254.81: icmp_seq=4 ttl=254 time=170.6 ms
Pwtórnie przerwij wciskając CTRL C, a zobaczysz statystyki
--- sunsite.unc.edu ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 169.8/176.3/190.1 ms
Jeśli nie otrzymałeś żadnej odpowiedzi, przeczytaj rozdział o odpluskwianiu.
Jeśli wszystko działało poprawnie, przerwij połączenie wydając polecenie
ppp-off
Po krtótkiej chwili modem powienien "odłożyć słuchawkę".
Jeśli to nie zadziała, albo wyłącz zasialanie modemu modem, lub uruchom swój program komunikacyjny i przerwij połączenie wciskając szybko +++, a gdy modem odpowie OK wydając polecenie ATH0.
Być może będziesz zmuszony usunąć również pliki blokady (lock files) utworzone przez program pppd
rm -f /var/lock/LCK..cua?
Skrypt o którym mowa automatyzuje procedurę logowania się i uruchamiania połączenia PPP, tak aby administrator lub członek grupy PPP do zestawienia połączenia musiał jedynie eydać polecenie ppp-on.
Jeśli twój dostawca nie korzysta z PAP/CHAP, te skrypty są dla ciebie.
Jeśli pakiet PPP jest zainstalowany poprawnie powinieneś być w posiadaniu dwóch przykładowych plików. W przypadku PPP 2.1.2 będą to
/usr/sbin/ppp-on
/usr/sbin/ppp-off
a w przypadku PPP-2.2
/etc/ppp/scripts/ppp-off
/etc/ppp/scripts/ppp-on
/etc/ppp/scriptsppp-on-dialer
Jeśli korzystasz z PPP 2.1.2 mocno namawiam cię do usunięcia tych plików. Są źródłem potencjalnych klopotów - nie mów mi że działają poprwnie - korzystałem z nich przez długi czas i rekomendowałem w pierwszej wersji tego dokuemntu.
Dla użytkowników PPP 2.1.2 przedstawiam LEPSZE wersje wzorcowe tych plików, pobrane z dystrybucjie PPP 2.2. Sugeruję skopiowanie i korzystanie z tych skryptów zamiast startych skryptów z wersji 2.1.2.
Pierwszy z PARY skryptów, uruchamiający połączenie.
#!/bin/sh
#
# Script to initiate a PPP connection. This is the first part of the
# pair of scripts. This is not a secure pair of scripts as the codes
# are visible with the 'ps' command. However, it is simple.
#
# These are the parameters. Change as needed.
TELEPHONE=555-1212 # The telephone number for the connection
ACCOUNT=george # The account name for logon (as in 'George Burns')
PASSWORD=gracie # The password for this account (and 'Gracie Allen')
LOCAL_IP=0.0.0.0 # Local IP address if known. Dynamic = 0.0.0.0
REMOTE_IP=0.0.0.0 # Remote IP address if desired. Normally 0.0.0.0
NETMASK=255.255.255.0 # The proper netmask if needed
#
# Export them so that they will be available to 'ppp-on-dialer'
export TELEPHONE ACCOUNT PASSWORD
#
# This is the location of the script which dials the phone and logs
# in. Please use the absolute file name as the $PATH variable is not
# used on the connect option. (To do so on a 'root' account would be
# a security hole so don't ask.)
#
DIALER_SCRIPT=/etc/ppp/ppp-on-dialer
#
# Initiate the connection
#
#
exec /usr/sbin/pppd debug /dev/ttySx 38400 \
$LOCAL_IP:$REMOTE_IP \
connect $DIALER_SCRIPT
A oto skrypt ppp-on-dialer:-
#!/bin/sh
#
# This is part 2 of the ppp-on script. It will perform the connection
# protocol for the desired connection.
#
chat -v \
TIMEOUT 3 \
ABORT '\nBUSY\r' \
ABORT '\nNO ANSWER\r' \
ABORT '\nRINGING\r\n\r\nRINGING\r' \
'' \rAT \
'OK-+++\c-OK' ATH0 \
TIMEOUT 30 \
OK ATDT$TELEPHONE \
CONNECT '' \
ogin:--ogin: $ACCOUNT \
assword: $PASSWORD
Ponieważ nowe skrtypty są podzielone na dwie częście, bedziemy je zmieniać po kolei.
Muszisz zmienić ten skrypt podając TWÓJ identyfikator u teojego prowajdera, TWOJE haslo dla tego konta i numer telefonu TWOJEGO prowajdera.
Każdy z wierszy postaci TELEPHONE= tworzy zmienne którcy warość
to tekst występujący po prawej stronie znaku '='. (oczywiście poza
wierszami komentarza). Popraw wszystkei te wiersze, aby zawierały
poprawną inforamcje na temat twojego konta u dostawcy internetu.
Jeśli w pliku /etc/ppp/options podajesz numery IP (jeśli
potrzebujesz to robić) to USUŃ ze skryptów odpowiednie wiersze
zawierające
$LOCAL_IP:$REMOTE_IP \
Upewnij się również, że zmienna DIALER_SCRIPT wskazuje na pełną
ścieżkę dostępu do skryptu, którego chcesz ostatecznie używać. Więc
jeśli przeniosłeś ten skrypt w inne miejsce, lub zmieniłeś jego nazwę
pamiętaj o poprawieniu informacji w pliku ppp-on.
Jeśli skonfigurowałeś pp-on poprawnie i twój serwer PPP korzysta
z weryfikacj toższamości za pomocą pary identyfikator/hasło, nie
musisz już modyfikować skryptu ppp-on-dialer!!!
Pomimo, że port szeregowy może być konfigurowany w plikach startowych systemu (/etc/rc.serial), stwierdziłem, że dobrym pomysłem jest ponowne skonfigurowanie portu szeregowego w skrypcie ppp-on. W ten sposób moge wykorzystywać modem do innych celów, i nie muszę pamiętać o konieczności sprawdzania aktualnej konfiguracji portu szeregowego.
Tuż przed wierszem uruchamiającym pppd dodaj
/bin/setserial /dev/cuaX spd_vhi
W ten sposób port szeregowy jest ostatecznie ustawiany za prędskość 115200 bps, zamiast 38400. Jest to poprawna prędkość dla modemów 28.8k (i szybszych). Jednakże wiele modemów 14.4k nie potrafi skonfigurować swojego interfejsu modem-kompueter na taką prędkość.
Sprawdź w dokumentacji modemu, jeśli maksymalna prędkość modemu wynosi 38400, korzystaj z polecenia
/bin/setserial /dev/cuaX spd_normal
Podczas gdy skrypt ppp-on-dialer jest dobry dla serwera, który automatycznie uruchamia pppd jak tylko zalogujesz się na serwerze, niektóre systemy wymagają jawnego uruchomienia PPP.
Jeśli w celu uruchomienia PPP na serwerze musisz wydać określone
polecenie, MUSISZ poprawić skrypt ppp-on-dialer.
Na KOŃCU skryptu (po wierszu z hasłem) dodaj wiersz zawierający parę expect send - taką , która będzie oczekiwała na zachętę (uwaga na znaki o specjalnym znaczeniu w powłoce Bournea - np $ , [ lub ] (otwierający i zamykający nawais kwadratowy).
Kiedy chat rozpozna zachęte powłoki, musi wydać polecenie, które uruchamia PPP na serwerze twojego dostawcy.
W moim przypadku serwer PPP korzysta ze standardowego wiersza zachety powłaoki Bash
[hartr@kepler hartr]$
i wymaga aby w celu uruchomienia PPP na serwerze wydał polecenie
ppp
Zawsze dobrze jest przewidzieć możliwości pewnych pomyłek. Dlatego w moim przypadku używam
hartr--hartr ppp
To znaczy - jeśli nie doczekamy się zachęty w określonym czasie wyślij znak enter i czekaj na zachęte raz jeszcze.
Kiedy jesteś pewien, ze otrzymałeś zachętę , wyślij ciag 'ppp'.
Uwaga: pamiętaj o doadniu znaku \ na końcu wiersza, tak aby chat nadal myślał, że cały skrypt znajduje się w jednym wierszu!
Niestety część serwerów generuje bardzo zmienne zachęty! Być może będzisz musiał zalogować się kilkakrotnie za pomocą programu komunikacyjnego, zanim dokladnie zrozumiesz jak to jest i co można przyjąć za zachętę do wydania polecenia.
To jest drugi ze skryptów, który ostatecznie zestawia połączenie PPP.
Uwaga: skrypt chat zawiera się zwykle w jednym wierszu. Znaki '\' pozwalają na kontynuwanie jednego logicznego wiersza skryptu przez wiele fizycznych wierszy pliku (aby człowiek mogł się w tym lepiej połapać) i nie tworzą same z siebie części skryptu.
Dobrze jest się temu przypatrzeć z bliska, abyśmy dobrze rozumieli co tu się dzieje.
Skrypt chat to sekwencja par "oczekiwany ciąg znaków
" "ciąg znaków do
wysłania". W szczególności zanim cokolwiek wyślemy
ZAWSZE czegoś oczekujemy.
Jeśli mamy coś wysłać, BEZ wstępnego oczekiwania na cokolwiek,
musimy użyć putsego napisu oczekiwanego (oznaczanego w skryptach
tak: "") i podobnie jeśli czekamy na
cos, lecz nie mamy zamiaru w odpowiedzi niczego wysyłać! Również w
przypadku, napis składa się z kilku słów (np. NO CARRIER), musimy
otoczyć napis apostrofami tak aby char rozpoznał go jako pojedynczy
element.
Wiersz chat w naszym wzorcu wygląda następująco:-
exec chat -vTIMEOUT 3ABORT '\nBUSY\r'ABORT '\nNO ANSWER\r'ABORT '\nRINGING\r\n\r\nRINGING\r'\\ \rAT\OK-+++\c-OK\ ATH0TIMEOUT 30OK ATDT$TELEPHONECONNECT ''ogin:--ogin: $ACCOUNTassword: $PASSWORD
Pwyższy skrypt ma sensowne możliwości radzenia sobie z niekturymi
sytuacjami wyjątkowymi. Sam program chat ma znacznie większe
możliwości, zapoznaj się ze stroną podręcznika, która go dotyczy (man 8 chat).
Jeśli twój dostawca korzysta z możliwości PAP/CHAP, wtedy twój skrypt jest znacznie prostszy. Wszystko co muszisz zrobić to wybrać numer, poczekać na połączenie i pozwolić pppd na wejście do systemu i zestawienie połączenia PPP.
#!/bin/sh
#
# This is part 2 of the ppp-on script. It will perform the connection
# protocol for the desired connection.
#
exec chat -v \
TIMEOUT 3 \
ABORT '\nBUSY\r' \
ABORT '\nNO ANSWER\r' \
ABORT '\nRINGING\r\n\r\nRINGING\r' \
'' \rAT \
'OK-+++\c-OK' ATH0 \
TIMEOUT 30 \
OK ATDT$TELEPHONE \
CONNECT '' \
Jak już to pokazaliśmy, w programie pppd istnieje możliwość włączenia wyprowadzania i rejestracji komunikatów odpluskiwających. Służy do tego opcja -d lub debug.
Podczas uruchamiania nowego połączenia PPP pozostaw w skrupcie opcję -d. (Ostrzeżenie: jesli masz mało wolnej przestrzeni dyskowej włączenie rejestracji odpluskwiających pppd może bardzo szybko zapełnić wolne miejsce i możesz mieć z tego powodu kłopoty - wystarczy aby nie udało ci się połączyć, a będziesz próbował nawiązać połączenie jescze przez kila minut).
Kiedy będziesz pewien, że wszystko działa poprawnie, możesz ją wtedy usunąc.
Jeśli swoj plik z opcjami ppp nazwałeś incaczej niż
/etc/ppp/options lub /etc/ppp/options.ttySx możesz
go uaktywnić podając jego nazwę w wierszu poleceń jako wartość opcji
-f programu pppd - np.
exec /usr/sbin/pppd debug -f options.myserver /dev/ttySx 38400 \
Otwórz nowy xterm (jesli pracujesz pod X) lub nową konsole tekstową i zaloguj się jako root.
W tej nowej sesji wydaj poleceni
tail -f /var/log/messages
(lub jaki tam jest twój plik zawierający komunikaty systemy)
W poprzednim oknie (konsoli wirtualne) wydaj polecenie
ppp-on &
(lub jak nazwałeś zmienioną wersję skryptu /usr/sbin/ppp-on). Jeśli nie uruchomiłeś skryptu w tle przez akończenie wiersza poleceń znakiem & nie odzyskasz wiersza zachety do momentu zamknięcia połączenia PPP.
Teraz przełącz się do konsolu, gdzie są wyświetlane komunikaty systemu.
Zobaczysz cos podobnego (pod warunkiem, że oprogram chat został uruchomiony z opcją -v, a pppd z -d) ... są to sekwencje rejestrowane przez program chat, po których następują komunikaty wysłane przez rozpoczynający połączenie PPP program pppd :-
Oct 21 16:09:58 hwin chat[19868]: abort on (NO CARRIER) Oct 21 16:09:59 hwin chat[19868]: abort on (BUSY) Oct 21 16:09:59 hwin chat[19868]: send (ATZ^M) Oct 21 16:09:59 hwin chat[19868]: expect (OK) Oct 21 16:10:00 hwin chat[19868]: ATZ^M^M Oct 21 16:10:00 hwin chat[19868]: OK -- got it Oct 21 16:10:00 hwin chat[19868]: send (ATDT722298^M) Oct 21 16:10:00 hwin chat[19868]: expect (CONNECT) Oct 21 16:10:00 hwin chat[19868]: ^M Oct 21 16:10:22 hwin chat[19868]: ATDT722298^M^M Oct 21 16:10:22 hwin chat[19868]: CONNECT -- got it Oct 21 16:10:22 hwin chat[19868]: send (^M) Oct 21 16:10:22 hwin chat[19868]: expect (ogin:) Oct 21 16:10:22 hwin chat[19868]: 57600^M Oct 21 16:10:23 hwin chat[19868]: ^[[;H^[[2J^M^M Oct 21 16:10:23 hwin chat[19868]: ^M Oct 21 16:10:23 hwin chat[19868]: ^M Oct 21 16:10:23 hwin chat[19868]: ^I^I This is node kepler.hedland.edu.au^M Oct 21 16:10:23 hwin chat[19868]: ^I^I^I at Hedland Campus^M Oct 21 16:10:23 hwin chat[19868]: ^I^I^I Hedland College^M Oct 21 16:10:23 hwin chat[19868]: ^M Oct 21 16:10:23 hwin chat[19868]: ^I^I Authorised user ONLY are to use this system^M Oct 21 16:10:23 hwin chat[19868]: ^M Oct 21 16:10:23 hwin chat[19868]: ^M Oct 21 16:10:23 hwin chat[19868]: ^I^I For more information, contact ComputerSystems^M Oct 21 16:10:23 hwin chat[19868]: ^I^I^I on +61 (0)91 72 0400^M Oct 21 16:10:23 hwin chat[19868]: ^I^I^I^I or^M Oct 21 16:10:23 hwin chat[19868]: ^I^I email: help@hedunx.hedland.edu.au^M Oct 21 16:10:23 hwin chat[19868]: ^M Oct 21 16:10:23 hwin last message repeated 3 times Oct 21 16:10:23 hwin chat[19868]: kepler login: -- got it Oct 21 16:10:23 hwin chat[19868]: send (hartr^M) Oct 21 16:10:23 hwin chat[19868]: expect (ssword:) Oct 21 16:10:23 hwin chat[19868]: hartr^M Oct 21 16:10:23 hwin chat[19868]: Password: -- got it Oct 21 16:10:23 hwin chat[19868]: send (??????^M) Oct 21 16:10:23 hwin chat[19868]: expect (hartr) Oct 21 16:10:23 hwin chat[19868]: ^M^M Oct 21 16:10:24 hwin chat[19868]: Last login: Sat Oct 21 14:55:53 on ttyC0^M Oct 21 16:10:24 hwin chat[19868]: ^M Oct 21 16:10:24 hwin last message repeated 9 times Oct 21 16:10:24 hwin chat[19868]: ^I^IYou have logged into node kepler.hedland.edu.au^M Oct 21 16:10:24 hwin chat[19868]: ^M Oct 21 16:10:24 hwin chat[19868]: This is a Compaq Prolinea 486DX2/50 running Linux 1.1.54^M Oct 21 16:10:24 hwin chat[19868]: ^M Oct 21 16:10:24 hwin chat[19868]: This computer operates as the main Hedland Campus communications^M Oct 21 16:10:24 hwin chat[19868]: ^I node, providing dial-in terminal and SLIP access,^M Oct 21 16:10:24 hwin chat[19868]: ^I^I Kepler also runs the Hedland end of^M Oct 21 16:10:24 hwin chat[19868]: ^I^I the Hedland/Newman inter-Campus WAN link^M Oct 21 16:10:24 hwin chat[19868]: ^M Oct 21 16:10:24 hwin chat[19868]: ^M Oct 21 16:10:24 hwin chat[19868]: [hartr -- got it Oct 21 16:10:24 hwin chat[19868]: send (ppp^M) Oct 21 16:10:27 hwin pppd[19872]: pppd 2.1.2 started by root, uid 0 Oct 21 16:10:27 hwin pppd[19873]: Using interface ppp0 Oct 21 16:10:27 hwin pppd[19873]: Connect: ppp0 <--> /dev/cua1 Oct 21 16:10:27 hwin pppd[19873]: fsm_sdata(LCP): Sent code 1, id 1. Oct 21 16:10:27 hwin pppd[19873]: LCP: sending Configure-Request, id 1 Oct 21 16:10:27 hwin pppd[19873]: fsm_rconfreq(LCP): Rcvd id 1. Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd MRU Oct 21 16:10:27 hwin pppd[19873]: (1500) Oct 21 16:10:27 hwin pppd[19873]: (ACK) Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd ASYNCMAP Oct 21 16:10:27 hwin pppd[19873]: (0) Oct 21 16:10:27 hwin pppd[19873]: (ACK) Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd MAGICNUMBER Oct 21 16:10:27 hwin pppd[19873]: (a098b898) Oct 21 16:10:27 hwin pppd[19873]: (ACK) Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd PCOMPRESSION Oct 21 16:10:27 hwin pppd[19873]: (ACK) Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: rcvd ACCOMPRESSION Oct 21 16:10:27 hwin pppd[19873]: (ACK) Oct 21 16:10:27 hwin pppd[19873]: lcp_reqci: returning CONFACK. Oct 21 16:10:27 hwin pppd[19873]: fsm_sdata(LCP): Sent code 2, id 1. Oct 21 16:10:27 hwin pppd[19873]: fsm_rconfack(LCP): Rcvd id 1. Oct 21 16:10:27 hwin pppd[19873]: fsm_sdata(IPCP): Sent code 1, id 1. Oct 21 16:10:27 hwin pppd[19873]: IPCP: sending Configure-Request, id 1 Oct 21 16:10:27 hwin pppd[19873]: fsm_rconfreq(IPCP): Rcvd id 1. Oct 21 16:10:27 hwin pppd[19873]: ipcp: received ADDR Oct 21 16:10:27 hwin pppd[19873]: (10.144.153.51) Oct 21 16:10:27 hwin pppd[19873]: (ACK) Oct 21 16:10:27 hwin pppd[19873]: ipcp: received COMPRESSTYPE Oct 21 16:10:27 hwin pppd[19873]: (45) Oct 21 16:10:27 hwin pppd[19873]: (ACK) Oct 21 16:10:27 hwin pppd[19873]: ipcp: returning Configure-ACK Oct 21 16:10:28 hwin pppd[19873]: fsm_sdata(IPCP): Sent code 2, id 1. Oct 21 16:10:30 hwin pppd[19873]: fsm_sdata(IPCP): Sent code 1, id 1. Oct 21 16:10:30 hwin pppd[19873]: IPCP: sending Configure-Request, id 1 Oct 21 16:10:30 hwin pppd[19873]: fsm_rconfreq(IPCP): Rcvd id 255. Oct 21 16:10:31 hwin pppd[19873]: ipcp: received ADDR Oct 21 16:10:31 hwin pppd[19873]: (10.144.153.51) Oct 21 16:10:31 hwin pppd[19873]: (ACK) Oct 21 16:10:31 hwin pppd[19873]: ipcp: received COMPRESSTYPE Oct 21 16:10:31 hwin pppd[19873]: (45) Oct 21 16:10:31 hwin pppd[19873]: (ACK) Oct 21 16:10:31 hwin pppd[19873]: ipcp: returning Configure-ACK Oct 21 16:10:31 hwin pppd[19873]: fsm_sdata(IPCP): Sent code 2, id 255. Oct 21 16:10:31 hwin pppd[19873]: fsm_rconfack(IPCP): Rcvd id 1. Oct 21 16:10:31 hwin pppd[19873]: ipcp: up Oct 21 16:10:31 hwin pppd[19873]: local IP address 10.144.153.104 Oct 21 16:10:31 hwin pppd[19873]: remote IP address 10.144.153.51
(Zauważ, że ja korzystam ze STATYCZNYCH numerów IP - dlatego mój komputer wysłał je do serwera - nie zobaczysz tego, jeśli korzystasz z dynamicznych numerów IP.)
To wygląda na poprawne połaczenie, przyjżyj się temu dokładnie ,zanim zaczniesz testować połączenie przez 'pingowanie' numerów ip i komputerów.
Uruchom swoją przeglądarkę www lub cokolwiek - jesteś podłączony do Internetu!
Kiedy połączenie PPP nie jest już ci potrzebne, zamykasz je wydając ztandardowe polecenie ppp-off (pamiętaj musisz być administratorem lub należeć do grupy PPP).
W pliku dziennika powinno znaleźć się coś takiego:-
Oct 21 16:10:45 hwin pppd[19873]: Interrupt received: terminating link Oct 21 16:10:45 hwin pppd[19873]: ipcp: down Oct 21 16:10:45 hwin pppd[19873]: default route ioctl(SIOCDELRT): Bad address Oct 21 16:10:45 hwin pppd[19873]: fsm_sdata(LCP): Sent code 5, id 2. Oct 21 16:10:46 hwin pppd[19873]: fsm_rtermack(LCP). Oct 21 16:10:46 hwin pppd[19873]: Connection terminated. Oct 21 16:10:46 hwin pppd[19873]: Exit.
Nie mart się komunikatem SIOCDELRT - to tylko pppd informuje, że
kończy pracę, nie ma się czym martwić.
Istnieje wiele przyczyn, dlaczego twoje połączenie nie może zostać nawiązane - program chat nie potrafi poprawanie wejść do sysytemu, masz linię telefoniczną o bardzo złej jakości itp. Przeglądaj pliki dzienników, tam znajdziesz wskazówki.
BARDZO częstym błędem jest zwykła literówka w skryptach lub plikach konfiguracyjnych. Muszisz je sprawdzić bardzo dokładnie - pamiętaj, że ludzie mają tendencję do odczytywania tego, o czym MYŚLIMY, że jest napisane - a nie tego co w rzeczywistości się tam znajduje!
Może chcesz używać PPP 2.2 z jądrem 1.2.x lub PPP-2.1.2 z jądrem 1.3.X/2.0.X. - używaj odpowiedniej wersji PPP.
Przeczytaj PPP FAQ (dokument, który jest serią pytań i odpowiedzi). To jest bardzo obszerny dokumen i można tam znaleźć mnóstwo odpowiedzi. Z mojego (smutnego) doświadczenia wiem, że jeśli nie znajdę tam odpowiedzi na moj problem, to nie jest to problem związany z PPP. W moim przypadku było to korzystanie z jądra w wersji ELF lecz ze starymi wersjami modułow. Straciłem jedynie 2 dni (i większą część jednej nocy)
Jeśli korzystasz z jądra 1.3.x/2.0.x to skompilowałeś wpierw obsługę modułów, potem moduł PPP i zainstalowałeś moduły - prawda ?
Jeśli nie korzystasz z programu kerneld do automatycznego ładowania modułow, wtedy zanim zaczniesz uruchamiać PPP musisz samemu załadować moduł jądra (i prawdopodobnie również moduł obsługi portów szeregowych).
Możesz t ozrobic ręcznie - jako root, napisz
insmod ppp
Może się zdarzyć, że wpierw musisz załadować moduł obsługi portów szeregowych...
insmod slhc
Najlepije jednak korzystać z automatycznego ładowania modułów, przeczytaj kerneld mini-howto!
Mogło się jescze tak zdarzyć, że korzystasz z ppp-2.1.2 z jądrem w wersji 2.0.x (lub uzywasz ppp-2.2 z jądrem 1.2.x bez nałożonych odpowienich łatek).
Sprawdź wersję jądra i PPP! Powtórzę raz jescze:-
Jądro Linuxa w wersji 2.0.x WYMAGA ppp-2.2.
Jądro Linuxa w wersji 1.2.x działa z ppp-2.1.2 lecz po nałożeniu odpowiednich łat może współpracowac również z ppp-2.2.
Posiadasz sieć lokalną Ethernet (lub inną) z już wprowadzoną pozycją domyślnej trasy.
Rozdział na temat 'Łączenie dwóch sieci za pomoca PPP' omawia w skrócie poprawne rozwiązanie tego problemu.
Problem polega na tym, że nie możesz mieć wiecej niż jedną pozycję dotyczącą domyślnej trasy. Domyślna trasa oznacza trasę którą są wysyłane wszystkie pakiety, które nie zostały zakwalifikowane na konkretną trasę. Ogólnie rzecz biorąc domyślna trasa wskazuje na trasę prowadząca od twojego komputera do Internetu.
Niestety niektóre dystrybucje Linuxa ustawiają domyślną trasę w ten sposób, że wskazuję ona na lokalną sieć Ethernetu. W takim przypadku będziesz musiał zmienić sposób w jaki jest inicjowany system w części dotyczącej konfuguracji urządzeń sieciowych i definiowania tabelei routingu tak, aby były dodawane tylko specyficzne trasy do konkretnych komputerów lub podsieci.
Informacje na ten temat można znaleźć w dokumentach NET2-HPWTP, NET-3_HOWTO (po polsku) i Linux Network Administration Guide.
Zasadniczo nie ma żadnej różnicy pomiędzy łączeniem pojedynczego komputera PC z Linuxem z serwerem PPP, a łączeniem dwóch sieci LAN za pomocą PPP na dwóch komputerach należących do tych sieci. Pamiętaj, PPP to protokół każdy-z-każdym.
Jednakże ABSOLUTNIE musisz rozumieć w jaki sposób konfigurowane są tablice routingu. Przeczytaj NET2-HOWTO (NET-3-HOWTO) i Linux Netwoek Administrator Guide (NAG). Nieocenioną pomoc może również dostarczyć książka " TCP/IP Network Administration" (wydana przez O'Reilly and Assoc - ISBN 0-937175-82-X).
W celu połączenia dwóch sieci LAN musisz używać dwóch różnych adresów sieci IP (lub dwóch różnych podsieci tej samej sieci) oraz będziesz musiał używać statycznych numerów IP - lub korzystać z IP masquerade. Jeśli chcesz korzystać z IP masquerade instrukcje na temat korzystania z tej funkcji znajdziesz w IP masquerade howto.
Musisz uzgodnić z administratorem drugiej sieci LAN, których adresów IP będziecie używać do zestawienia połączenia PPP. Jeśli korzystacie ze statycznych numerów IP, będziez prawdopodobnie zmuszony do dzwonienia pod określony numer.
Następnie popraw odpowiedni plik /etc/ppp/options[.ttyXX] -
dobrym pomysłem jest posiadanie modemu i portu konkretnie dla tego
połączenia. To może również wymagać poprawienia pliku
/etc/ppp/options, a być może również utworzenia plików
options.ttyXX dla innych połączeń PPP.
Zapisz w odpowiednim pliku opcji adres IP twojego końca połączenia, zgodnie z przedstawionym wcześniej przykładem zestawiania połączenia PPP ze statycznymi adresami IP.
Muszisz sprawić aby pakiety z twojej lokalnej sieci były przesyłane przez zestawione połączenie PPP. Jest to proces dwuetapowy.
Na początku musisz trasę od komputera zestawiającego połączenie PPP do sieci znajdującej się na drugim końcy tegto połączenia. Jeśli jest to połączenie z internetem, może być obsłużone przez domyślną trasę wprowadzoną do tabeli routingu przez program pppd na twoim końcu połączenia jako realizacja opcji 'defaultroute'.
Jeśli ma to być jedynie połączenie dwóch sieci LAN, wtedy należy dla konkretnej sieci dodać pozycję w tabeli trasowania. Służy do tego polecenie 'route' umiesczone w skrypcie /etc/ppp/ip-up (patrz Po zestawieniu połączenia... , tam znajdziesz instrukcje, jak to zrobić).
Drugą rzeczą jaką musisz zrobić jest powiadomienie innych komputerów należących do twojej sieci lokalnej, że twój komputer stał się 'bramą' do odległej sieci leżącej po drugiej stronie połączenia PPP.
Oczywiście administrator sieci po drugiej stronie połączenia musis zrobić to samo. Ponieważ będzie on przesyłał pakiety do konkretnej sieci, wymagana będzie pozycja tabeli routingu do konkretnej sieci, a nie pozycja domuślnej trasy (chyba, że sieć podrugiej stronie połączenia łączy się z Internetem właśnie przez wasza sieć).
Jeśli łączysz się za pomocą PPP z Internetem, lub cjoścby z drugą siecią LAN, powinieneś pomyśłeć o bezpieczeństwie. Mocno zalecam włączenie firewalla.
Po zestawieniu połączenia program pppd szuka skryptu
/etc/ppp/ip-up. Jeśli istneije i jest wykonywalny, to zostaje
uruchomiony. W ten sposób możesz zautomatyzować wszelkie specjalne
polecenia ustawiania tabeli routingu, które mogą być niezbędne oraz
wszelki inne działania, które chcesz aby były wykonywane za każdym
razem, gdy polączenie PPP
To jest po prostu skrypt i możesz w nim robić wszystko, co tylko skrypt poptrafi (tzn. mniej więcej wszystko).
Na przykład możesz zmusić sendmail do opróżnieia kolejki.
W podobny sposób możesz umieścić polecenia, które za pomocą protokołu POP poniorą twoją pocztę oczekującą na ciebie u dostawcy.
Łączenie za pomocą PPP dwóch sieci LAN wymaga dodania do tbeli
routingu pozycji dla konkretnej podsieci. Można to łatwo zrealizować w
pliku /etc/ppp/ip-up. Trudność powstaje wtedy, gdy twój
komputer obsługuje wiele połączeń PPP jednocześnie.
Dzieje się tak, dlatego, żę skrypt /etc/ppp/ip-up jest
wykonywany dla każdego zestawionego połączenia ppp, datego musisz
szczególnie ostrożnie uruchamiać polecenia modyfikujące tabele
trasowania dla konkretnego połączenia ppp.
Można to łatwo wykonać korzystając z możliwości samej
powłoki. Zwykle przez wykorzystanie polecenia 'case' na odpowiednim
parametrze przekazanym do skryptu przez program pppd. Poniżesj skrypt
/etc/ppp/ip-up/etc/ppp/ip-up, którego używam do
obsługi połączeń WAN i połączenia z moją domową siecią Ethernet
(obsługiwanego przez ten sam serwer).
#!/bin/bash
#
# Script which handles the routing issues as necessary for pppd
# Only the link to Newman requires this handling.
#
# When the ppp link comes up, this script is called with the following
# parameters
# $1 the interface name used by pppd (e.g. ppp3)
# $2 the tty device name
# $3 the tty device speed
# $4 the local IP address for the interface
# $5 the remote IP address
# $6 the parameter specified by the 'ipparam' option to pppd
#
case "$5" in
# Handle the routing to the Newman Campus server
202.12.126.1)
/sbin/route add -net 202.12.126.0 gw 202.12.126.1
# and flush the mail queue to get their email there asap!
/usr/sbin/sendmail -q &
;;
139.130.177.2)
# Our Internet link
# When the link comes up, start the time server and synchronise to the world
# provided it is not already running
if [ ! -f /var/lock/subsys/xntpd ]; then
/etc/rc.d/init.d/xntpd.init start &
fi
# Start the news server (if not already running)
if [ ! -f /var/lock/subsys/news ]; then
/etc/rc.d/init.d/news start &
fi
;;
203.18.8.104)
# Get the email down to my home machine as soon as the link comes up
# No routing is required as my home Ethernet is handled by IP
# masquerade and proxyarp routing.
/usr/sbin/sendmail -q &
;;
*)
esac
exit 0
W rezultacie podniesienia połączenia PPP do naszego kampusu Newman i wykonania tego skryptu, otrzymujemy następującą tabelę trasowania (ten komputer jest również naszym serwerem dla przychodzących połaczeń modemowych oraz obsługuje nasze połączenie z Internetem). Wstawiłem komentarze pomiędzy wiersze wydruku aby można było łatwiej wyjaśnik każdą pozycję :-
[root@kepler /root]# route -n Kernel routing table Destination Gateway Genmask Flags MSS Window Use Iface # trasa do odległego komputera-bramy do iternetu 139.130.177.2 * 255.255.255.255 UH 1500 0 134 ppp4 # trasa do kampusowego komputer Newman 202.12.126.1 * 255.255.255.255 UH 1500 0 82 ppp5 # trasa do mojego domogego komputera-bramy 203.18.8.104 * 255.255.255.255 UH 1500 0 74 ppp3 # dwa zwykle połączaenia PPP (ludzi , tórzy zadzwonili do serwera) 203.18.8.64 * 255.255.255.255 UH 552 0 0 ppp2 203.18.8.62 * 255.255.255.255 UH 552 0 1 ppp1 # trasa do sieci kampusowaej (za momputerem Newman) 202.12.126.0 202.12.126.1 255.255.255.0 UG 1500 0 0 ppp5 # trasa do naszej lokalne sieci Ethernet (obejmuje dwie kolejne klasy C) 203.18.8.0 * 255.255.254.0 U 1500 0 1683 eth0 # trasa do urządzenie pętli zwrotnej 127.0.0.0 * 255.0.0.0 U 3584 0 483 lo # domyślna trasa do interentu default 139.130.177.2 * UG 1500 0 3633 ppp4
W poprzedniej sesji powiedzieliśmy jak sobie radzić z pocztą wychodzącą - po prostu opróżniać kolejkę tuż po nawiązaniu połączenia.
Jeśli posiadasz połączenia WAN, możesz uzgodnić z administratorrem
zdalnej sieci LAN, aby robił dokładnie to samo. Np. skrypt
/etc/ppp/ip-up na komputerze Newman wygląda następująco:-
#!/bin/bash
#
# Script which handles the routing issues as necessary for pppd
# Only the link to Hedland requires this handling.
#
# When the ppp link comes up, this script is called with the following
# parameters
# $1 the interface name used by pppd (e.g. ppp3)
# $2 the tty device name
# $3 the tty device speed
# $4 the local IP address for the interface
# $5 the remote IP address
# $6 the parameter specified by the 'ipparam' option to pppd
#
case "$5" in
203.18.8.4)
/usr/sbin/sendmail -q
;;
*)
esac
exit 0
Kiedy posiadasz jedynie łącze PPP z dynamicznym adresem IP, musisz wtedy pobierać pocztę ze swojego konta na komputerze distawcy ISP. Zwykle robi się to za pomocą protokołu POP (Post Office Protocol). Dostępny jset program o nazwie 'popclient', który potrafi zautomatyzować całą procedurę.
Po prostu zmodyfikuj odpowiednio skrypt /etc/ppp/ip-up, tak
aby zawierał wywołanie programu popclient. Mój laptom, na któym działa
RedHat Linux robi to tak:
popclient -3 -c -u hartr -p <password> kepler.hedland.edu.au |formail -s procmail
Do pobierania nowinek (newsów) możesz wykorzystać slurp. Pamietaj, że
ip-up jest zwykłym skryptem powłoki Bournea i może być
wykorzystany do KAŻDEGO zadania, które musi być wykonane za kązdym
razem, gdy zestwimy połączenie PPP.
Istniejący skrypt /usr/sbin/ppp-off powinien działać
prawidłowo, kied jest używany przez administratora. Jednyną zmianę
jaką możesz chcieć wprowadzić jest opróżnienie kolejki pocztowej, tuż
przed zamknięceim łącza.
Pozostawiamy to jako ćwiczenie domowe!
Co więcej możesz stworzyć skrypt, który będzie uruchamianyza każdym
razem, gdy zostanie zamknięte połączenie PPP. Należy go nazwav
/etc/ppp/ip-down. Może być wykorzystany d oodwrócenia działań
jakie wykonałes w skrypcie /etc/ppp/ip-up.
Jeśli masz połączenie z siecią LAN, lecz nadal chcesz korzystać na swio komputerze z PPP, musisz pamiętać aby prawidłowo ustawić tabele routingu, tak aby pakiety doceirały zarówno do komputera na drugim końcu połączenia PPP i dalej, ale również do komputerów w lokalnej sieci LAN.
NIE chcemy cię uczyć zasad trasowania - mówimy jedynie o prostym, specyficznym przypadku trasowania statycznego.
Jeśli NIE wiesz co to jest trasowanie mocno zlecam przeczytanie Linux Network Administrator Guide (NAG). W brdzo przystępny sposób porusza te problemy książka "TCP/IP Network Administration" wydawnictwa O'Reilly.
Podstawową zasadą trasowania statycznego jest to, aby trasa domyślna (default) prowadziła do NAJWIEKSZEJ liczby adresów komputerowych. W przpadku innych sieci należy dodawać do tabeli trasowania konkretne pozycje.
JEDYNYM przypadkiem, który chciałbym omówić jest sytuacja, gdy twój Linux jest przyłączony do sieci LAN, która nie jest przłączona do Internetu - a ty chcesz łączyć się ze swoim dostawcą Internetu będąc cały czas przyłączony do sieci LAN.
Po pierwsze upewnij się, że trasa do wojej sieci Ethernetowej jest trasą do konkretnej sieci, a nie trasą domyślną!.
Sprawdź to wydając polecenie route, powinieneś zobazcyć coś takiego:
[root@hwin /root]# route -n
Kernel routing table
Destination Gateway Genmask Flags MSS Window Use Iface
loopback * 255.255.255.0 U 1936 0 50 lo
10.0.0.0 * 255.255.255.0 U 1436 0 565 eth0
Jeśli twoja karta sieciowa (urządzenie eth0) jest wykorzystywane przez pozycję domyśłnej trasy (w pierwszej kolumnie będzie słowo "default", a w ostatniwej eth0) musisz zmodyfikować skrypty inicjujące twój system, w części która zajmuje się inicjowaniem kart sieciowych i ustawianiem tabeli trasowania, tak aby ustawiały trasę do konkretnej sieci, jaką jest rpzecież twoja sieć lokalna i nie wykorzystywały w tym celu trasy domyśłnej (zobacz NET2-HOWTO, NET-3-HOWTO i NAG).
Powyższe zmiany pozwolą programowi pppd na dodawania domyślnej trasy prowadzącej do twojego dostawcy Internetu i dalej:-
[root@hwin /root]# route -n
Kernel routing table
Destination Gateway Genmask Flags MSS Window Use Iface
10.144.153.51 * 255.255.255.255 UH 488 0 0 ppp0
127.0.0.0 * 255.255.255.0 U 1936 0 50 lo
10.1.0.0 * 255.255.255.0 U 1436 0 569 eth0
default 10.144.153.51 * UG 488 0 3 ppp0
Zauważyłeś, że dodawane są dwie pozycje do tabeli, trasa bezpośrednio do samogo komputera ( 10.144.153.51), serwera PPP z którym się polączyłś i trasa domyśłna przez interfejs ppp0 i serwer PPP jako bramę do internetu.
Jeśli twoja konfiguracja jest bardziej złożona - zapoznaj się dokumentami, o których wcześniej wspominałem i skonsultuj się ze swoim lokalnym ekspertem w wych sprawach.
Jeśli w twojej sieci są już routery, masz już zapewne utworzone połączenia do większych sieci. Jednak NADAL powinieneś wykorzystywać trasę domyśłna do połączeń z internetem, a ewentualnie dodać nowe pozycje, dla tras do tych dalszych sieci, z któymi się łączysz przez swoją kartę sieciową.
Jeśli skonfigurujesz Linuxa włączonego do lokalnej sieci LAN jako komputer łączący sie ż Internetem , otwierasz w ten sposób całą swoją sieć lokalną na próby penetracji z internetu. Zanim to zrobisz zalecamy konsultacje ze swoim administratorem sieci i zapoznanie się z obowiązującą polityką bezpieczeństwa sieci. Jeśli twój komputer zostanie wykorzsytany do zaatakowania sieci lokalnej, może cię spotkac więcej niż złość kolegów czy administratorów sieci. Możesz popaść w naprawdę poważne kłopoty.
Zanim przyłączysz sieć LAN do Internetu, zastanów się czy nie wykorzystać pownej ochrony jaka dają połączenia z DYNAMICZNYM przydziałem numerów IP - może warto zapoznać się z książką "Building Internet Firewalls" wydawnictwa O'Reilly.
Jeśli połączenie PPP nadal nie działa, przeczytaj ten dokument raz jeszcze, sprawdź wszystko dokłądnie, przyjżyj się komuniokatom w dziennikach generowanych przez program "chat -v" i "pppd -d".
Przeczytaj dokumentacje do PPP , FAQ na ten temat i inne dokumentu, o których wspominałem.
Jeśli nadal stoisz w miejscu, spróbuj zadać pytanie na pl.comp.os.linux.
W szczególności - NIE WYSYLAJ MNÓSTWA WYDRUKÓW ODPLUSKWIANIA DO GRUP NOWINKOWYCH, ANI POCZTA DO MNIE - to pierwsze zajmuje tylko łącza, a drugie zostanie od razu wrzucone do /dev/null (chyba, że specjalnie o to poprosze).
Wielu dostawców mogą wspomagać instalaję tylko tego oprogramowania, które dostarczają nowym użytkownikom. Sa to zwykle programy po MS Windows :-( - wiele osób zajmujących się pomaganiem nowym użytkownikom nic nie wie na temat Unixa (czy Linuxa). Muszisz być przygotowany, że w takij systuacji nie znajdziesz u nich pomocy.
Mogłbyś zrobić takiej osobie przysługę i wyjaśnić jej co nieco na ten temat (większość osób pracujących przy pomaganiu ludziom powinna być rozsądna).
OK, twoje połączenie PPP działa poprawnie i możesz 'pingnąc' serwer PPP podając jefo numer IP (drugi lub oznaczony jako "remote" numer IP wyświetlony przez polecnie ifconfig ppp0), lez nie możesz osiągnąć komputerów poza nim.
Po pierwsze spróbuj 'pingnąć' numery IP, jakie podałeś w pliku
/etc/resolv.conf. Jeśli zadziała, to znaczy, że możesz wyjść
poza serwer PPP (chyba, że w /etc/resolv.conf jest właśnie podany
numer IP serwera PPP). Spróbuj teraz 'pingnąc' pełną nazwe twojego
dostawcy - np.
ping komputer.mojego dostawcy.pl
Jeśli to nie zadziała, masz problem z rozwiązywaniem nazw. Może być
spowodowany literówką w pliku /etc/reslov.conf. Sprawdź to
dokladnie z informacjami jakie sobie zanotowałeś zanim zacząłeś
onfigurować PPP. Jeśli wszystko się zgadza, zadzwoń do dostawcy i
dowiedz się, czy poprawnie zapisałes ten numer.
Jeśli nadal nie działa (a twój dostawca potwierdził poprawność numeru serwera DNS i to, żę są sprawne), problem leży gdzieś indziej. Sugeruję sprawdzenie dokładnie twojej instalacji linuxa (zwracającsczególną uwagę na atrybuty plików).
Jeśli NADAL nie możesz 'pingnąć' komputera swojego dostawcy podając jego nazwe, nie numer to może on być wyłączony (zadzwoń i się dowiedz) albo twoj dostawca ma klopoty z trasowaniem (routingiem). Zadzwoń i sprawdź to.
Jedną z możłiwości jest sytuacja, kiedy zdalnym serwerem PPP jest linux, z wyłączoną w jądrze opcją przesyłania pakietów (IP forwarding).
Dobrym testem jest próba połączenie się za pomocą oprogramowania, które on dostarcza (zwykle dla MS Windows). Jeśli wszystwo działa poprawnie dla innego systemu operacyjnego i dokladnie tego samego konta u dostawcy, to znaczy, że problem leży po stronie twojego Linuxa, a NIE dostawcy.
Jeśli korzystasz z polączenia z dyamicznym przydziałem numerów IP zobacz rozdiał "Konfiguraja usług" poniżej.
Ponownie, jeśli korzystasz z polączenia z dyamicznym przydziałem numerów IP zobacz rozdiał "Konfiguraja usług" poniżej.
Jeśli korzystasz z dynamicznych numerów IP (wielu dostawców umożliwi ci korzystanie z PPP jedynie tylko w ten sposób, chyba, że zapłacisz odpowiedno dużą sumę pieniędzy) musisz sobie zdawać z ograniczęć jakie to ze sobą niesie.
Po pierwsze korzystanie z usług zewnętrznych działa poprawnie. To znaczy możesz wysłać poczte sendmailem, pobrać pliki przez ftp, korzystać z www,fingera itp.
W szczególności możesz odpowiadać na poczte, zostanie zmagazynowana podczas gdy nie było polączenia i zostanie wyłana tuż po jego nawiązaniu.
Pamiętaj, że twój komputer nie ejst podłączony do internetu przez 24 godziny, ani nie posiada przy każdym połączeniu tego samego numeru IP. Dlatego nie możesz otrzymywać poczty bezpośrednio na swój komputer i jest bardzo trudno umożliwić twoim kolegom przegładanie twojego serwera www czy ftp. Tak długo kiedy mówimy o Interneie, twój komputer nie istnieje jako pełnoprawny, unikalny, cały czas osiągalny komputer internetowy ponieważ nie posiada jednoznacznego, stałego numeru IP (pamietaj, że numer IP nie jest przydzielony do komputera tylko do linii telefonicznej, gdy nie jesteś połączony z "twojgo" numeru IP korzysta ktoś inny.
Jeśli uruchimisz serwer WWW (lub inna usługę), nikt o niej nie wie, CHYBA, że ktoś wie, że twój komputer jest w tej chwili podłączony do internetu i zna numer IP, którego w danej chwili używasz. Taką informację można zdobyć na wiele sposobów, możesz informować ludzi telefonicznie, listowanie, zostawić ospowiednie inforamcje w pliku /.plan na komputerze dostawcy (pod warunkiem, że masz dostęp do interpertera).
Nie jest to problem większości użytkowników. Oni chcą jedynie wysyłać i otrzymywać pocztę (korzystając z konta u dostawcy) i korzystać z internetowych serwerów WWW i ftp. Jeśli koniecznie MUSISZ mieć możliwość udostępniania własnych usług, powinieneś otrzymać statyczny numer IP. Albo próbować się ratować metodami opisanymi powyżej...
Nawet w przypadku korzystania z dynamicznych adresów IP, możesz tak
skonfogurować sendmail, aby wysyłał listy napisane lokalnie na twoim
komputerze. Konfiguracja sendmaila może być BARDZO trudna - nie mamy
zamiaru uczyć cię, jak to się robi. Powienieneś skonfigurować sendmail
podając jako "smart host" komputer pocztowy twojego dostawc (opcja
DS w pliku /etc/sendmail.cf). Szczegółowe instrukcje na
temat konfiguracji sendmaila znajdziesz w jego dokumantacji - przyjżyj
się plikom m4, które wchodzą w sklad dystrybucji sendmaila. Na pewno
znajdziesz tam jeden, który spełni twoje wymagania.
Dostępne są również wspaniałe książki na temat sendmaila, lecz zwykle nie nadają się dla początkujących użytkowników.
Jeśli już uda ci się skonfigurować sendmaila, bedziesz zapewne chciał
tuz po nawiązaniu połązcenia PPP opóżniać kolejkę z listów czekającyh
na wysłanie do adresatów gdzieś tam w internecie. W tym celu dodaj
do pliku /etc/ppp/ip-up polecenie
sendmail -q &
Przychodząca poczta jest problemem dla osób korzystających z dynamicznych numerów IP. Rozwiązaniem jest :-
Możesz zautomatyzować cały ten proces umiesczając niezbędne polecenia
w pliku /etc/ppp/ip-up (pisaliśmy o tym wczśniej).
Choć możesz korzystać zserwera DNS, który zapewnia ci twój dostawca
ISP, możesz również uruchomić lokalny serwer DNS (tylko buforujący)
włączany przez sktypt ip-up. Zaletą tego rozwiązania jest
osczędność czasu i łącza w przypadku częstego nawiązywania połączeń z
tymi samymi komputerami.
Konfiguracja serwera DNS do pracy w trybie buforowania jest całkiem
prosta (opcja forwarders w pliku /etc/named.boot wskazujaca
serwer DNS twojego dostawcy). Książka wydawnictwa O'Reilly "DNS and
Bind" odpowie na wszelkie twoje pytania.
Dostępny jest również dokument DNS-HOWTO.
Jeden z punktów Netykiety mówi: zanim zaczniesz używać drugorzędnego serwera DNS do buforowania, wewnątrz domey twojego dostawcy, spytaj go wpierw o pozwolenie. Poprawnie skonfigurowany serwer DNS nie jest problemem dla twego dostawcy, lecz jeśli popełnisz ajkiś błąd, może wtedy sprawiać kłopoty.
Jak już wspominałem istnieje wiele metod na wykonanie tego zadania. To co chcę zaprezentować to sposób, którego używam (korzystając z wieloportowej karty Cycades i kilku linii telefonicznych na wspolnym numerze).
Jeśli ci się nie spodoba, możesz to zrobić na swój sposób. Zawsze chętnie w kolejnych wersjach tego dokumentu umieszczę inne sprawdzone metody. Jeśli znasz taką przyślij mi jej opis wraz ze swoimi uwagami.
Pamiętaj, ze w tej części mówimy jedynie o konfiguracji Linuxa jako sewera PPP. Nie zamierzam kiedykolwiek umieszczać tutaj informacji o konfigurowaniu specjalnych terminali dostępowych i innych tego typu zabawek.
Czekają mnie jescze eksperymenty z shadow password. Aktualnie prezentowane informacje NIE zawierają żanych udogoniej jakie można uzyskać korzystając z shadow password.
Wszelki wcześniejsze uwagi na temat wersji jądra i pakietu PPP są nadal aktualne. Zkładam, że przeczytałeś poprzednie rozdziały.
MUSISZ włączyć w jąrdze orzesyłanie pakietów (IP forwarding). Może to być dobry moment do włączenia również takich udogodniej jak zliczanie pakietóe (accounting) i firewall.
Jeśli korzystasz z kart wieloportowych muszisz oczywiscie korzystać z ich drajwerów.(zobacz Serial-JTZ).
Oferujemy konta PPP (i SLIP) oraz konta zwykłe sprawdzając tożsamość za pomocą identyfikatora i hasła. Jest to dla nas ułatwieniem, ponieważ uzytkownik korzystając z jednego konta ma dostęp do wszystkich usług.
Ponieważ jestemy organizacją edukacyjną, nie pobieramy opłat za korzystanie z systemu i nie musimy się martwić o zliczanie ruchu i naliczanie opłat.
Firewall działający pomiędzy naszą siecią a internetem ogranicza dostęp naszysch użytkowników do wybranych usług internetowych, ponieważ łącząc się z naszym serwerem pracują wewnątrz naszej sieci, lecz nie będzeimy tutaj rozwijać tego tematu.
Proces uruchomie połączenia PPP przez uzytwkonika posiadającego onto na serwerze wygląda następujaco:-
ppp które uruchamia PPP
na serwerze.
Serwer korzysta z indywidualnych plików
/etc/ppp/options.ttyXX każdego portu wejściowego, gdzie jest
zapisany zdalny numer IP (dynamiczny przydział numerów IP). Do
zapewnienia komunikacji z komputerami sieci lokalnej i koputerem po
drygiej stronie połączenia PPP serwer korzysta z proxyarp (włączonej
przez odpowiednią opcję pppd) unikając uruchomienia takich programów
jak routed lub gated.
Kiedy użytkownik zamyka połączenie PPP, pppd na serwerze to wykrywa, poleca modemowi przerwać połączenie likwidując w tym samym czasie łącze PPP.
Potrzebne będą następujące programy:-
Zanim skonfigurujesz swój komputer jako serwer PPP, musi on wpierw umożliwiać dostęp użytkownikom di uch kont.
Nie zamieszcamy w tym dokumencie informacji jak to zrobić. Przeczytaj dokumentację programu getty i Serial-JTZ.
Musisz stworzyć plik z opcjami dotyczacymi wszystkich połączeń
/etc/ppp/options. My używamy takich opcji:
asyncmap 0 netmask 255.255.254.0 proxyarp lock crtscts modem
Zauważ, że NIE korzystamy z trasowania - a w sczególności nie ma domyślnej trasy, ponieważ jako serwer PPP powinieneś jedynie zapewnić przesyłanie pakietów z komputer klienta do Internetu i twojej sieci lokalnej i z Internetu (sieci lokalnej) do komputera klienta.
Wszystko co jest wymagane do realizacji tego celu, to trasa do komputer klienta i użycie opcjie 'proxyarp' w programi pppd.
Opcja 'proxyarp' dodaje do tabeli apr serwera PPP ppozycją proxy arp (już wszystko jasne :), która powiadamia komputery sieci lokalnej, że wszystkie pa kiety przeznaczone dla klineta PPP należy przesyłać bezpośrednio do serwera - nie można jej niestety użyć przy routingu pakietów pomiędzy dwiema sieciami LAN - muszisz dodać do tabeli routingu odpowiednie trasy.
Prawdopodobnie chcesz aby użytkownicy twojego serwera PPP korzystali z
dysnamicznego przydzielania adresów IP. Można to osiągnąć przypisując
każdemu portowi szeregowemu inny adres IP. Zrobisz to umieszczając
odpowiednią inforamacje w plikach /etc/ppp/options.ttyXX.
Po prostu umieść tam lokalny muer IP (serwera PPP) i numer IP, który ma być wykorzystywany przez ten port. Np.
kepler:slip01
Ponieważ uruchomienie połązeniea PPP jest związane z konfiguracją urządzeń sieciowych i manipulowaniem tabelą routingu, dlatego wymagane są do tego specjalne uprawnienia - w rzeczywistości uprawnienia administratora.
Na szczęści pppd został zaprojektowany do takiego użycia i możemy włączyć bit suid root. Musisz po prostu wydać polecenie
chmod u+s /usr/sbin/pppd
Teraz atrybuty tego pliku powinny wygładać tak
-rwsr-xr-x 1 root root 74224 Apr 28 07:17 /usr/sbin/pppd
Jeśli tego nie zrobisz, twoi użytkownicy nie będą mogli uruchomić połączenia PPP.
Aby uprościć użytkownikom pewne działania, w pliku
/etc/bashrc tworzymy globalny alias, tak aby proste polecenie
uruchamiało całą procedurę PPP po stronie serwera.
This looks like
alias ppp="exec /usr/sbin/pppd -detach"
Co to znaczy?
w mniej więcej tak
6:24pm up 3 days, 7:00, 4 users, load average: 0.05, 0.03, 0.00 User tty login@ idle JCPU PCPU what hartr ttyC0 3:05am 9:14 -
I to już wszystko... mówiłem, że zrobienie prostego serwera PPP jest banalne.
TO jest jeszcze prostsze - nie ma modemu to znaczy nie trzeba dzwonić.
Po pierwsze wybierz ,który kompter będzie pracował jako 'serwer'. Muszisz skonfigurować na porcie szeregowym getty, abyś mogł za pomocą minicomu przetestować połączenie z drugiego komputera.
Jeśli połączenie między portami działa poprawnie, możesz usunąć niepotrzebne getty, CHYB, że chcesz aby to połączenie bylo weryfikowane przez identyfikator i hasło. Ponieważ masz kontrolę nad oby komputerami podejżewam, że nie jest ci to potrzebne.
Teraz, na serwerze należy usunąć getty i upewnić się, że porty na obu komputerach są skonfigurowane tak samo.
Teraz musisz tylko ruchomićna obu systemach pppd. Zakładam, że po obu stronach będzie to port /dev/cua4. Na oby komputerach wydaj polecenie :-
pppd -detach crtscts lock <local IP>:<remote IP> /dev/cua4 38400 &
Spowoduje to zestawienie połączenia - lecz nie masz jescze poprawionych tabel routingu. Możesz przetestować połączenie 'pingując' komputery nawzajem, a następnie zamknąć połączeni zabijając jeden z procesów pppd.
Routing jaki jest potrzebny zależy od tego co tak naprawdę chcesz robić. Zwykle jeden z komputerów będzie przyłączony do Ethernetu, a przez to do Internetu, więc wymagany routing jest taki sam, jak w przypadku serwera i klienta PPP.
Na komputerze wyposarzonym w kartę Ethernetu należy wydać polecenie
pppd -detach crtscts lock proxyarp <local IP>:<remote IP> /dev/cua4 38400 &
a na tym drugim
pppd -detach crtscts lock defaultroute <local IP>:<remote IP> /dev/cua4 38400 &
ppp-on i ppp-off w dokładnie taki sam
sposób, jaki został opisany wcześniej.
Robert Hart
Port Hedland, Western Australia
August 1996
Zdaje sobie sprawę, że niniejsze tłumaczenie zawiera mnóstwo błędów. Niestety nie jestem w stanie dokładnie sprawdzić całęgo dokumentu i świadomie pozostawiam tę pracę czytelnikowi. Będę wdzięczny za wszelkie uwagi na temat tego dokumentu, wytykanie błędów, literówek, składni i wszelkie inne, które mogą przyczynić się do jego ulepszenia.
Wszelkie tego typu uwagi proszę przesyłać na adres piotr.pogorzelski@ippt.gov.pl
Inne przetłumaczone dokumenty można znaleźć na stronie http://www.jtz.org.pl/. Zapraszamy!.
piotr.pogorzelski@ippt.gov.pl. doc-linux-pl-2002.06.14.orig/html/Printing-HOWTO.pl.html 0100664 0001750 0001750 00000147441 06770264140 021346 0 ustar coven coven
Printing HOWTO powinno zawierać wszystko co powinieneś wiedzieć, aby ustawić drukarkę na swoim Linux-ie. Jest to trochę bardziej skomplikowane niż w świecie pokaż-i-kliknij Microsoft-u i Apple'a, ale za to bardziej elastyczne i z pewnością prostsze jeśli chodzi o administrowanie w dużych sieciach lokalnych.
Dokument ten jest tak ułożony, że większość będzie musiała przeczytać tylko pierwszą połowę czy coś koło tego. Większość nieciekawych informacji i takich, które są zależne od sytuacji znajduje się w drugiej połowie i łatwo je znaleźć w spisie treści, podczas gdy informacje zawarte w sekcjach 9 i 10 będą potrzebne większości.
Większość informacji z poprzedniej wersji zostało usuniętych, ponieważ zdecydowałem się na napisanie tego dokumentu całkowicie od nowa. Zrobiłem tak, bo poprzednie wersje były takie wielkie - około 60 stron A4, i narracja była do kitu. Jeśli nie znalazłeś tutaj odpowiedzi to powinieneś a) przeszukać poprzednią wersję na stronie domowej tego HOWTO, b) podrzucić mi informację co powinno tu być, a nie ma tego.
Strona domowa tego HOWTO jest dobrym miejscem na szukanie
nowszych wersji tego dokumentu; jest ona oczywiście także
dystrybuowana przez Projekt Dokumentacji Linux-a; archiwum zawierające
dokumenty HOWTO możesz znaleźć w Polsce pod adresem
ftp.icm.edu.pl w katalogu
/pub/Linux/sunsite/docs/HOWTO.
To jest trzecia generacja, a szczerze mówiąc, to trzecia edycja zrobiona od nowa, dokumentu Printing-HOWTO. Historia PHT może w ujęciu chronologicznym wyglądać tak:
Prawa autorskie należą do Granta Taylora (c) 1997. Proszę kopiować i dystrybuować ten dokument do woli, ale nie modyfikoewać ani nie zapomnieć mojego nazwiska.
Jeśli masz już zainstalowany program lpd i jest on ustawiony dla twojej drukarki przez kogokolwiek, to wszystko czego potrzebujesz, to nauczyć się posługiwać poleceniem lpr. Dokument Printing-Usage-HOWTO zawiera opis tego polecenia i kilku innych używanych do manipulowania kolejką wydruku.
Jednak jeśli masz nowy system albo nową drukarkę, to będziesz musiał ustawić serwis drukowania w ten lub inny sposób zanim będziesz mógł drukować. Czytaj dalej!
Jądro Linux-a (<=2.1.32), zakładając, że wkompilowałeś lub załadowałeś
urządzenie lp (polecenie cat /proc/devices powinno
pokazać urządzenie lp), dostarcza jedno lub więcej urządzeń
/dev/lp0, /dev/lp1 i /dev/lp2. Nie są
one kojarzone dynamicznie, ale są one na stałe przypisane
konkretnym adresom I/O. Oznacza to, że twoja pierwsza drukarka może
być na lp0, albo lp1 w zależności od sprzętu. Spróbuj
obu. ;)
Kilku użytkowników zgłosiło, że ich dwukierunkowe porty lp nie zostają wykryte jeśli używają starszego, jednokierunkowego kabla. Sprawdź czy masz przyzwoity kabel.
Na danym porcie nie można mieć na raz sterowników plip oraz lp. Ale można załadować jeden albo drugi sterownik w każdej chwili; ręcznie albo przez kerneld przy jądrze w wersji 2.x.x (lub późniejsze 1.3.x). Jeśli dokładnie ustawisz przerwania itp., to możesz przypuszczalnie mieć plip na jednym porcie, a lp na drugim. Jedna osoba zrobiła tak, przez edycję sterowników; z niecierpliwością oczekuję osoby, która zrobiłaby to tylko przy użyciu argumentów z linii poleceń.
Jest takie narzędzie zwane tunelp, przy pomocy którego "root" może ustawiać przerwania i inne opcje na urządzeniu lp.
Jeśli urządzenie lp jest wbudowane w jądro w wersji 1.3.x lub
wyższej, to możesz przekazać parametr lp= do jądra, w którym
możesz ustawić przerwanie, adres itp.
Jeśli sterownik lp jest wbudowany w jądro, to możesz użyć parametru LILO/LOADLIN, aby ustawić adres portu i przerwanie, których sterownik będzie używał. Składnia: lp=port0[,irq0[,port1[,irq1[,port2[,irq2]]]]] Na przykład: lp=0x378,0 lub lp=0x278,5,0x378,7 ** Zauważ, że jeśli używasz tego parametru, to musisz podać *wszystkie* porty, których będziesz używać - nie ma wartości domyślnych. Możesz wyłączyć wbudowany sterownik parametrem lp=0.
Jeśli ładujesz sterownik drukarki jako moduł w wersji jądra 2.x.x
lub późnej 1.3.x, to możesz podać przerwanie i port jako parametr w
linii poleceń przy insmod (albo w pliku
/etc/conf.modules, żeby działało także dla
kerneld). Parametry to: io=port0,port1,port2 i
irq=irq0,irq1,irq2. Więcej informacji znajdziesz w podręczniku
systemowym man na stronie dotyczącej insmod.
**Dla tych, którzy (jak ja) nigdy nie mogą znaleźć standardowego portu kiedy go potrzeba, to są one takie jak w podanym wyżej drugim przykładzie. Drugi port (lp0) jest pod adresem 0x3bc. Nie mam pojęcia jakiego przerwania zwykle używa.
Kod źródłowy linux-owego sterownika portu równoległego jest w pliku /usr/src/linux/drivers/char/lp.c
Począwszy od jądra w wersji 2.1.33 (dostępne także jako łata dla jądra 2.0.30), urządzenie lp jest po prostu klientem nowego urządzenia parport. Dodanie urządzenia parport naprawia pewną ilość błędów, które dręczyły poprzedni sterownik urządzenia lp - może ono wpółdzielić port z innym urządzeniem, przypisuje dynamicznie dostępne porty równoległe numerom urządzeń zamiast wymuszać z góry narzuconą komunikację pomiędzy adresami I/O a numerami portów i tak dalej.
Więcej szczegółów na temat parport podam kiedy sam znajdę się w sytuacji kiedy będę tego używał. A w międzyczasie możesz przeczytać plik Documentation/parport.txt w drzewie ze źródłami jądra albo zajrzyj na stronę parport.
Urządzenia szeregowe pod Linux-em zwykle nazywają się
/dev/ttyS1 lub podobnie. Narzędzie
stty pozwala na interaktywne przeglądanie lub określanie
ustawień dla portu szeregowego;
setserial
pozwoli ci na kontrolowanie kilku rozszerzonych właściwości oraz na
skonfigurowanie IRQ i adresów I/O dla niestandardowych
portów. Więcej na temat portów szeregowych znajdziesz w
Serial-HOWTO dostępnym także w języku polskim.
Jeśli używasz wolnej drukarki szeregowej z kontrolą przepływu (flow control), może się okazać, że niektóre z twoich wydruków są obcinane. Może być to spowodowane zachowaniem portu szeregowego, który wyrzuca wszystkie znaki ze swojego bufora po 30 sekundach od momentu zamknięcia portu. W buforze może się znajdować do 4096 znaków a jeśli twoja drukarka używa kontroli przepływu i jest wystarczająco wolna, tak że nie może przyjąć wszystkich 4096 znaków z portu w ciągu 30 sekund, po tym jak oprogramowanie drukujące zakmnęło port, to końcowa zawartość bufora zostanie utracona. Jeśli w wyniku polecenia cat plik > /dev/ttyS2 pojawia się cały wydruk dla krótkich plików, a dłuższe są obcinane, to to może być twój problem.
Okres 30 sekund może zostać zmieniony poprzez opcję "closing_wait" programu setserial (wersja 2.12 i późniejsze). Porty szeregowe maszyny są z reguły inicjowane poprzez odwołanie do setserial w pliku startowym rc.serial. Odwołanie do portu szeregowego drukarki może być zmodyfikowane, tak aby ustawić closing_wait w tym samym czasie kiedy ustawia inne parametry tego portu.
Jądro Linux-a obsługuje raczej każdą drukarkę, którą możesz podłączyć do szeregowego albo równoległego portu, ale są rzeczy na które trzeba spojrzeć oraz drukarki których nie będziesz w stanie użyć nawet pomimo, że (elektrycznie mówiąc) mogą one komunikować się z Linux-em. W grupie tych niekompatybilnych drukarek przeważają te, które polegają na "Windows Printing System". (Często są one oznaczone "for Windows".) Te drukarki nie współpracują z Linux-em. Nie mają żadnych inteligentnych części i polegają na procesorze komputera, który musi zrobić większość tego co kiedyś robiły procesory w drukarce. Niestety te zadania mogą być wykonane tylko przez sterowniki dostarczone przez producenta, które działają tylko pod Windows. Więc nie kupuj takiej drukarki do Linux-a.
Jeśli chodzi o drukarki, które działają z Linux-em, to najlepszym wyborem jest kupienie drukarki z interpreterem PostScript-u. Prawie każde oprogramowanie pod Unix-a, które tworzy jakiś drukowalny wynik tworzy go w PostScripcie, więc oczywistym jest, że najlepiej kupić drukarkę obsługującą PostScript. Niestety, ale obsługa tego języka poza drukarkami laserowymi jest bardzo rzadko spotykana.
Jeśli nie uda ci się wydobyć (raczej większego) budżetu potrzebnego na kupno drukarki PostScript-owej, możesz użyć jakiejkolwiek drukarki obsługiwanej przez Ghostcript, darmowy interpreter PostScript-u używanego do druku PostScript-owego. Na domowej stronie Ghostscript-u znajdziesz obsługiwane drukarki i informacje na temat nowych i ekpserymentalnych sterowników. Pomóż proszę w ulepszaniu Ghostscript-u poprzez zgłaszanie sukcesów bądź porażek jak o to proszą.
Do niedawna wybór dla użytkowników Linux-a był prosty - wszyscy używali tego samego, starego lpd wziętego bezpośrdnio z kodu Net-2 BSD. Nawet dzisiaj większość sprzedawców dostarcza ten właśnie program. Ale to się zaczyna zmieniać. Systemy SVR4 włączając w to Solaris Sun-a dostarczają całkiem inny pakiet do kolejkowania oparty na lpsched. Pojawiają się także oznaki, iż niektórzy sprzedawcy Linux-a przejdą na dostarczanie LPRng, o wiele mniej zabytkowej implementacji, która jest dostępna za darmo. LPRng jest o wiele prostszy w administrowaniu dla większych instalacji i ma o wiele przyjaźniejszą bazę danych aniżeli lpd.
Na dzień dzisiejszym nawet w świetle nowych opcji, lpd jest przypuszczalnie dobry dla większości użytkowników Linux-a. Raz ustawiony działa dobrze i jest łatwy w zrozumieniu oraz szeroko udokumentowany w książkach o Unix-ie.
Jeśli chcesz więcej informacji na temat LPRng to zobacz LPRng - An Enhanced Printer Spooler. Przyszłe wersje tego dokumentu będą zawierały informacje o zwykłym lpd oraz o LPRng.
Żeby drukowanie działało, musisz zrozumieć jak działa system lpd.
LPD to skrót od Line Printer Daemon i odnosi się w różnych kontekstach do demona i do całej kolekcji programów, które drukują. Są to:
lpdDemon kolejkowania. Jeden z nich jest uruchomiony, aby kontrolować wszystko na maszynie, I jeden jest uruchamiany dla drukarki podczas drukowania.
lprPolecenie dla użytkowników do kolejkowania wydruków. Lpr kontaktuje się z lpd i umieszcza nowe zadanie w katalogu kolejkowania.
lpqWyświetla wydruki umieszczone w kolejce.
lpcPolecenie do kontrolowania systemu lpd. Poleceniem tym możesz wystartować, zatrzymać, zmienić porządek w kolejce drukowania.
lprmUsuwa wydruk z kolejki.
To jak to wszystko działa ? No... kiedy system startuje, uruchamiany
jest lpd. Czyta on plik /etc/printcap, aby się dowiedzieć
dla jakich drukarek będzie obsługiwał kolejki. Za każdym razem
kiedy ktoś uruchomi lpr, lpr kontaktuje się z lpd poprzez
gniazdko /dev/printer i podaje mu wydruk oraz kilka
informacji o tym kto drukuje i jak ma to być wydrukowane. Potem lpd
drukuje otrzymany plik na odpowiedniej drukarce.
System lp powstał w czasach kiedy większość drukarek była drukarkami liniowymi - tzn. ludzie drukowali w większośći teksty w ASCII. Jak się okazało, nie trzeba dużo pracy, aby lpd działał dobrze dla dzisiejszych wydruków takich jak PostScript, czy text, czy dvi, czy ...
Minimalne ustawienia objawiają się tym, że system może kolejkować pliki i je drukować. Nie będzie zwracał uwagi na to, czy twoja drukarka je zrozumie czy nie i przypuszczalnie nie pozwoli ci na zrobienie atrakcyjnego wydruku. Jednak jest to pierwszy krok do zrozumienia, więc czytaj dalej !
Ogólnie mówiąc, żeby dodać kolejkę dla drukarki musisz dodać
pozycję do /etc/printcap i utworzyć katalog do
kolejkowania w /var/spool/lpd/.
Pojedyncza pozycja w /etc/printcap wygląda tak:
# LOCAL djet500
lp|dj|deskjet:\
:sd=/var/spool/lpd/dj:\
:mx#0:\
:lp=/dev/lp0:\
:sh:
Definiuje ona drukarkę o nazwach lp, dj i deskjet, z
katalogiem kolejkowania /var/spool/lpd/dj/, bez limitu na
każdy wydruk, która drukuje na urządzeniu /dev/lp0 i która
nie ma strony tytułowej (z danymi o osobie, która drukowała itp.)
na początku wydruku.
Teraz poczytaj stronę w podręczniku systemowym na temat printcap.
Powyższy przykład wygląda bardzo prosto, ale jest tam jeden kruczek - drukarka będzie tak długo dobrze drukowała, dopóki będę wysyłał pliki, które ona rozumie. Na przykład wysłanie na drukarkę zwykłego unix-owego pliku tekstowego spowoduje, że na papierze pojawi się coś takiego:
To jest pierwsza linia.
To jest druga linia.
To jest trzecia linia.
Wysłanie na tę drukarkę pliku w PostScripcie spowodowałoby wydrukowanie pięknej listy poleceń PostScript z dodatkowym efektem schodków :) - beż żadnego pożytecznego efektu.
Wynika z tego jasno, że czegoś tu jeszcze brakuje - i to jest właśnie celem filtrowania. Ci, którzy czytali stronę podręcznika systemowego o pliku "printcap" mogli zuważyć atrybuty kolejki - if i of. if - czyli input filter - to właśnie to czego potrzebujemy.
Jeśli napiszemy krótki skrypt o nazwie "filter", który doda przed
końcem linii znak CR (cariage return - powrót karetki), to efekt
schodów może być wyeliminowany. Tak więc musimy dodać do naszej
pozycji w /etc/printcap jeszcze jedną linię informującą o
istniejącym filtrze:
lp|dj|deskjet:\
:sd=/var/spool/lpd/dj:\
:mx#0:\
:lp=/dev/lp0:\
:if=/var/spool/lpd/dj/filter:\
:sh:
Przykładem prostego skryptu może być:
#!perl
# Powyższa linia tak na prawdę powinna zawierać pełną ścieżkę do perl-a
# Skrypt ten musi być wykonywalny: chmod 755 filter
while(<STDIN>){chop $_; print "$_\r\n";};
# Możesz też zakończyć znacznikiem "form feed": print "\f";
Jeśli zrobimy powyższe, to otrzymamy drukarkę, na którą będziemy mogli wysyłać pliki tekstowe z Unix-a i otrzymamy sensowny wydruk. (Tak, są 4 miliony lepszych sposobów na napisanie tego skryptu, ale tylko kilka jest tak bardzo ilustracyjnych. Ty masz to napisać bardziej wydajnie.)
Jedynym problemem jest to, że drukowanie plików tekstowych nie jest takie znowu fajne - byłoby o wiele lepiej, jeśli moglibysmy drukować pliki PostScriptowe czy graficzne. No... tak, byłoby i jest to łatwe do zrobienia. Metoda jest rozszerzeniem tego co zrobiliśmy, żeby się pozbyć schodków. Jeśli napiszesz program, który może przyjmować różne formaty i tłumaczyć je na język zrozumiały dla drukarki, to masz naprawdę dobry filtr.
Taki filtr nazywany jest filtrem magicznym. Nie męcz się nad pisaniem własnego - o ile nie drukujesz jakichs cudów - na sieci jest już pełno filtrów, które możesz śmiało używać.
Ponieważ otrzymałem wiele próśb, załączam listę plików wraz z prawami dostępu jakie mają one w moim systemie. Jest wiele lepszych sposobów na zrobienie tego - idealnym sposobem jest używanie programów tylko z atrybutami SGID, a nie robienie wszystkiego SUID dla "root-a", ale mój system tak już miał i dla mnie to działa.
-r-sr-sr-x 1 root lp /usr/bin/lpr* -r-sr-sr-x 1 root lp /usr/bin/lprm* -rwxr--r-- 1 root root /usr/sbin/lpd* -r-xr-sr-x 1 root lp /usr/sbin/lpc* drwxrwxr-x 4 root lp /var/spool/lpd/ drwxr-xr-x 2 root lp /var/spool/lpd/lp/
W chwili obecnej lpd musi być uruchamiany z prawami "root-a", ponieważ używa on numerów portów zastrzeżonych dla systemu (poniżej 1024). Po tym jak już się podczepi pod ten port powinien się zmienić na lp.lp, ale raczej tego nie robi...
Wiele napisanych pakietów filtrujących (i innych programów związanych z drukowaniem) dostępnych jest na SunSite Polska. Można tam znaleźć takie programy jak: psutils, a2ps, mpage, dvitodvi, flpr.
"Magic filter" jest jednym z najlepszych pakietów filtrujących; zaprojektowany jest do instalacji w 10 minut. Powiedziano mi też, że zawiera specjalną obsługę LPRng.
Title: magicfilter
Version: 1.1b
Entered-date: 04APR95
Description: A customizable, extensible automatic printer filter.
Lets you automatically detect and print just about any
data type you can find a conversion utility for. This
filter is written in C and is controlled completely
from an external printer configuration file.
This version adds automagic creation of configuration
files based on the installed software on your system,
courtesy of GNU Autoconf.
This version is a bug fix from 1.1/1.1a; filters for
non-ASCII capable PostScript printers have been added.
Author: H. Peter Anvin <hpa@zytor.com>
Primary-site: sunsite.unc.edu
53000 /pub/Linux/system/printing/magicfilter-1.1b.tar.gz
Copying-policy: GPL
Innym z wielu magicznych filtrów jest APS zrobiony przez Andreasa Klemma. Linux Software Map wygląda tak:
Begin3
Title: apsfilter
Version: 4.9.1
Entered-date: Montag, 10. Juli 1995, 21:22:35 Uhr MET DST
Description: magicfilter for lpd with auto filetype detection
Keywords: lpd magicfilter aps apsfilter
Original-site: ftp-i2.informatik.rwth-aachen.de
/pub/Linux/pak/APSfilter/aps-491.tgz
211KB aps-491.tgz
Platforms: C-Compiler, gs Postscript emulator, pbmutils
Copying-policy: GPL
End
Filtr APS instaluje się jako filtr if dla kolejki drukowania, i tłumaczy z wielu popularnych typów plików na polecenia twojej drukarki.. Rozumie np. tekst, PostScript, dvi, gif i inne.
EZ-Magic to kolejny pakiet filtrujący, napisany w bash-u, dostepny na sunsite.
Title: ez-magic printer filter
Version: 1.0.5
Entered-date: January 26, 1997
Description: ez-magic is a printer filter that supports 8 common file
formats (txt,ps,gif,bmp,pcx,png,jpg,tif) for printing.
It can print over a network (SMB), or to a local printer.
Reads from a file, STDIN, or lpd. Simple to use and
configure. Just one script file, no huge manuals and
multibillion drivers. The only catch is that you need a
few common helper programs like netpbm and ghostscript.
Written in bash. Easy to add formats and code. Still more
bugs than I have appendages, but less than the number of
grams of fat in a hot dog. Pre-configured for HP DeskJet
870Cse over network. Comparable to apsfilter and others.
Keywords: magic filter, print, graphics, samba, network, smb,
ghostscript, postscript, gif, jpg, simple
Author: toby@eskimo.com (Toby Reed)
Maintained-by: toby@eskimo.com (Toby Reed)
Primary-site: http://www.eskimo.com/~toby/ez-magic-1.0.5.tar.gz
38 kb ez-magic-1.0.5.tar.gz
Alternate-site: sunsite.unc.edu /pub/Linux/system/printing
38 kb ez-magic-1.0.5.tar.gz
Copying-policy: Copyrighted, full manipulation rights, with one or two
restrictions.
[ Sekcja ta, jest z definicji niekompletna. Przysyłaj szczegóły twojej ulubionej dystrybucji. ]
W RedHacie znajduje się graficzne narzędzie do admiistracji, przy
pomocy którego można dodawać drukarki odległe oraz lokalne. Pozwala
ono na wybór drukarki z obsługą "ghostscript" oraz pliku
urządzenia, do którego kierowany jest wydruk; potem dana drukarka
instalowana jest w /etc/printcap. Następnie tworzony jest
krótki filtr magiczny PostScript-ASCII na podstawie gs i
nenscript.
Rozwiązanie to działa całkiem dobrze i jest łatwe do ustawienia dla
popularnych przypadków.
Proszę o informacje jakie są rozwiązania w innych dystrybucjach.
Ghostscript jest najbardziej znaczącym programem do drukowania dla Linux-a. Większość oprogramowania do drukowania pod Unix-a generuje PostScript, który jest opcją dla drukarki wartą ok. $100. Jednak ghostscript jest za darmo i wygeneruje język dla twojej drukarki z PostScriptu. Jeśli jest on podczepiony pod filtr wejściowy dla lpd, to daje wirtualną drukarkę PostScriptową i bardzo ułatwia życie.
Ghostscript jest dostępny w dwóch postaciach. Komercyjna wersja Ghostscript-u pod nazwą Alladin Ghostscript może być używana dla celów osobistych, ale nie może być rozprowadzana w komercyjnych dystrybucjach Linux-a. Jest on z reguły o jakiś rok do przodu względem darmowej wersji; w tym momencie na przykład, obsługuje on Adobe Acrobat's Portable Document Format, podczas gdy starsze wersje tego nie mają.
Wersja darmowa to GNU Ghostscript i jest starszą wersją Aladdina uprzejmie użyczoną dla GNU. (Cześć i chwała dla Aladdina za to; więcej sprzedawców oprogramowania powinna wspomagać darmowe oprogramowanie w ten sposób)
Cokolwiek robisz w
gs, upewnij
się, że uruchomiłeś go z opcją wyłączającą dostęp do
plików (-dSAFER). PostScript jest językiem w pełni funkcjonalnym
i zły program w PostScripcie mógłby cię przyprawić o ból głowy.
Mówiąc o PDF-ie (Adobe's Portable Document Format), właściwie jest to trochę bardziej zorganizowany PostScript w skompresowanym pliku. Ghostscript umie obsłużyć PDF tak samo jak PostScript, więc możesz być pierwszym w swoim otoczeniu z drukarką umiejącą wydrukować PDF.
Zwykle ghostscript jest uruchamiany przez filtr, który założyłeś, ale w celach śledzenia błędó÷ dobrze jest go uruchamiać ręcznie.
gs -help pokaże krótką listę opcji i dotępnych sterowników
(lista ta pokazuje tylko sterowniki wkompilowane, a nie wszystkie
dostępne sterowniki).
Możesz uruchomić gs w celach testowych np. tak:
gs <opcje> -q -dSAFER -sOutputFile=/dev/lp1 test.ps
Jest wiele rzeczy, które można zrobić jeśli wynik powstały przy opracowywaniu tekstu nie jest zadowalający (właściwie, to możesz zrobić co ci się tylko zamarzy, jeśli masz źródła).
Umiejscowienie, rozmiar i wspolczynik ksztaltu obrazu na stronie jest kontrolowane przez specyficzny dla danej drukarki sterownik w ghostscripcie. Jeśli na przykład zauważysz, że strony wychodzą za krótkie, albo za długie, albo za duże o dwa razy, możesz zajrzeć do źródeł twojego sterownika i dopasować jakiekolwiek parametry, które ci nie pasują. Niestety, każdy sterownik jest inny, tak więc nie mogę ci powiedzieć co tak na prawdę trzeba zmienić, ale większość z nich jest dobrze skomentowana.
Większość nielaserowych drukarek ma tę wadę, że rozmiar ich punktu jest raczej duży. Rezultatem tego są zbyt ciemne obrazy. Jeśli masz ten problem, to powinieneś użyć swojej własnej funkcji do transferu. Po prostu stwórz następujący plik w katalogu bibliotecznym ghostscripta i dodaj jego nazwę do wywołania gs zaraz przed właściwym plikiem. Może będziesz musiał zmienić wartości, żeby pasowały do twojej drukarki. Mniejsze wartości dają jaśniejszy obraz. Mniejsze wartości (0.2 - 0.15) są dobrym pomysłem, szczególnie jeśli twój sterownik używa algorytmu Floyda-Steinberga do rasteryzacji kolorów.
---8<---- gamma.ps ----8<---
%!
%transfer functions for cyan magenta yellow black
{0.3 exp} {0.3 exp} {0.3 exp} {0.3 exp} setcolortransfer
---8<------------------8<---
Przez dopasowanie tych wartości możliwe jest też naprawienie
drukarki, która ma jakąś wadę związaną z kolorami. Jeśli będziesz
robił coś takiego, to radzę użyć pliku colorcir.ps, który
dostarczany jest wraz z ghostscriptem (w podkatalogu examples)
jako przykładowa strona.
Jedną z zalet lpd jest to, że można przy jego pomocy drukować na drukarkach przyłączonych fizycznie do innych komputerów. Jeśli dobrze dobierzesz kombinację skryptów i narzędzi, to możesz drukować przy pomocy lpr na wszelkiego rodzaju sieciach.
Aby pozwolić odległym maszynom drukować na twojej drukarce, musisz
je umieścić w /etc/hosts.equiv lub
/etc/hosts.lpd. (Zauważ, że hosts.equiv ma kilka
innych efektów; upewnij się, że wiesz co robisz jeśli umieszczasz
tam jakąś maszynę). Używając opcji rs możesz pozwolić tylko
wybranym użytkownikom na drukowanie; informacje na ten temat
znajdziesz na stronie podręcznika systemowego na temat
lpd.
Aby wydrukować coś na innej maszynie, musisz zrobić pozycję w
/etc/printcap podobną do tej:
# REMOTE djet500
lp|dj|deskjet:\
:sd=/var/spool/lpd/dj:\
:rm=jakaś.odległa.maszyna.pl:\
:rp=nazwa_drukarki:\
:lp=/dev/null:\
:sh:
Zauważ, że lokalnie nadal znajduje się katalog zadań obsługiwany przez lpd. Jeśli odległa maszyna jest zajętą albo wyłączona, to zadania do drukowania czekają lokalnie aż będą mogły zostać wysłane.
Żeby ominąć konfigurowanie lokalnego lpd, możesz użyć rlpr, aby wysłać coś bezpośrednio do kolejki na odległej maszynie. Jest to bardzo użyteczne jeśli drukujesz na różnych drukarkach tylko okazyjnie. Z ogłoszenia o rlpr:
Rlpr używa protokołu TCP/IP, aby wysłać zadania do drukowania do serwera lpd gdziekolwiek w sieci.
W przeciwieństwie do lpr, ten *nie* wymaga, żeby drukarki, na
których chcesz drukować były znane dla lokalnej maszyny (np. w
/etc/printcap) i przez to jest bardziej elastyczny i
wymaga mniejszego nakładu pracy administratora.
rlpr może zostać użyty gdziekolwiek, gdzie mógłby zostać użyty zwykły lpr, i jest kompatybilny w dół z tradycyjnym lpr z BSD.
Najważniejszą zaletą rlpr jest, to że można drukować *skądkolwiek dokądkolwiek*, niezależnie od tego jak jest skonfigurowany system, z którego chcesz drukować. Może też być użyty jako serwer, tak że klienci uruchomieni na innych maszynach jak np.: netscape, xemacs, itp. mogą drukować na twojej drukarce małym nakładem wysiłku.
Rlpr dostępny jest na SUNSite Polska.
Jest dostępne mini-HOWTO "Printing to Windows", które zawiera więcej inormacji niż ta sekcja.
Możliwe jest przekierowanie kolejki lpd poprzez program smbclient (część pakietu Samba) do serwisu drukowania Samby opartego na TCP/IP. Samba zawiera odpowiedni skrypt pod nazwą smbprint. Krótko mówiąc umieszczasz plik konfiguracyjny dla konkretnej drukarki w katalogu zadań i instalujesz skrypt smbprint jako if.
Odpowiednia pozycja w /etc/printcap powinna wyglądać tak:
lp|remote-smbprinter:\
:lp=/dev/null:sh:\
:sd=/var/spool/lpd/lp:\
:if=/usr/local/sbin/smbprint:
Aby uzyskać więcej informacji na temat konfigurowania takich przypadków przeczytaj dokumentację zawartą w skrypcie smbprint.
Możesz także użyć smbclient, aby wysłać zadanie drukowania bezpośrednio do serwisu drukowania SMB bez włączania w to lpd. Zobacz informacje w podręczniku systemowym.
Pakiet ncpfs zawiera narzędzie zwane nprint, które udostępnia te same funkcje co smbprint, ale dla NetWare. Pakiet ten można zdobyć z SunSITE Polska. Z informacji LSM dla wersji 0.16:
Przy pomocy pakietu ncpfs możesz montować wolumeny z serwera netware pod Linux-em. Możesz także drukować na drukarkach podłączonych pod netware oraz kolejkować zadania z netware dla drukarek podłączonych do Linux-a. Potrzebujesz jądra w wersji 1.2.x lub 1.3.54 i nowsze. ncpfs nie będzie działał z jądrem w wersji 1.3 poniżej 1.3.54.
Aby nprint działał poprzez lpd, musisz napisać mały skrypt, aby drukować "stdin" na drukarkach NetWare i zainstalować go jako if dla kolejki lpd. Otrzymasz coś takiego:
sub2|remote-NWprinter:\
:lp=/dev/null:sh:\
:sd=/var/spool/lpd/sub2:\
:if=/var/spool/lpd/nprint-script:
Skrypt "nprint-script" może wyglądać tak:
#! /bin/sh # Powinieneś najpierw sprawdzić konto guest bez hasła! /usr/local/bin/nprint -S sieć -U nazwa -P hasło -q nazwa-kolejki -
Pakiet netatalk zawiera coś podobnego do nprint i smbclient. Werner Eugster udokumentował procedurę dla drukowania do i z sieci Apple o wiele lepiej niż ja kiedykolwiek; zobacz to w Netatalk-HOWTO.
Netatalk nie działa z kartą SMC Etherpower PCI z chip-em DEC tulip.
Drukarki HP i niektóre inne mają ethernetowy interfejs, do którego
możesz drukować bezpośrednio używając lpd. Powinieneś postępować
zgodnie z instrukcją, którą dostałeś do drukarki albo jej
sterownika, ale ogólnie takie drukarki "mają uruchomionego" lpd i
dostarczają jedną lub więcej kolejek, do których możesz
drukować. HP może pracować np. z takim /etc/printcap:
lj-5|remote-hplj:\
:lp=/dev/null:sh:\
:sd=/var/spool/lpd/lj-5:\
:rm=nazwa.drukarki.pl:rp=raw:
Drukarki HP LaserJet z interfejsami Jet Direct obsługują generalnie dwie wbudowane kolejki - "surową" (raw), która akceptuje PCL (i możliwe, że PostScript) oraz "tekstową", która akceptuje zwykłe ASCII i radzi sobie od razu z "efektem schodków".
W środowisku wielkoskalowym, szczególnie w dużych środowiskach, gdzie niektóre drukarki nie obsługują PostScript-u, może być pożyteczne ustawienie specjalnego serwera drukowania, do którego drukują wszystkie maszyny i na którym uruchamiane są wszystkie zadania ghostscript-a.
Pozwala to twojemu Linux-owi działać jako serwer wydruków dla drukarki, i użtykownicy mogą robić swoje wydruki szybko i zajmować się swoimi rzeczami zamiast czekać aż drukarka skończy drukować pracę kogoś innego.
Aby to zrobić, ustaw na swoim Linux-ie kolejkę, która wskazuje na HP LJ wyposażoną w ethernet. Teraz ustaw kolejkę u wszystkich swoich klientów na tego Linux-a.
Niektóre drukarki sieciowe HP wyraźnie nie akceptują ustawień strony tytułowej (banner page) wysłanej przez klienta; można wyłączyć ich wewnętrznie generowaną taką stronę przez połączenie się z drukarką telnet-em, wciśnięcie dwa razy <<ENTER>>, wpisanie "banner: 0" i następnie "quit". Są inne ustawienia, które możesz także w taki sposób zmienić - wpisz "?", żeby wyświetlić ich listę.
Niektóre drukarki (oraz "czarne pudełka" z sieciowym drukowaniem) obsługują tylko prościutkie nie-protokołowane czyste połączenia TCP. Zauważalne w tej kategorii są wczesne modele kart JetDirect (właczając niektóre JetDirectEx). Ogólnie, aby drukować na takiej drukarce, musisz otworzyć połączenie TCP na danym porcie (z reguły 9100) i umieścić tam swoje zadanie do wydrukowania. Można to zaimplementować m.in. w Perl-u:
#!/usr/bin/perl
# Thanks to Dan McLaughlin for writing the original version of this
# script (And to Jim W. Jones for sitting next to Dan when writing me
# for help ;)
$fileName = @ARGV[0];
open(IN,"$fileName") || die "Can't open file $fileName";
$dpi300 = "\x1B*t300R";
$dosCr = "\x1B&k3G";
$ends = "\x0A";
$port = 9100 unless $port;
$them = "bach.sr.hp.com" unless $them;
$AF_INET = 2;
$SOCK_STREAM = 1;
$SIG{'INT'} = 'dokill';
$sockaddr = 'S n a4 x8';
chop($hostname = `hostname`);
($name,$aliases,$proto) = getprotobyname('tcp');
($name,$aliases,$port) = getservbyname($port,'tcp')
unless $port =~ /^\d+$/;;
($name,$aliases,$type,$len,$thisaddr) =
gethostbyname($hostname);
($name,$aliases,$type,$len,$thataddr) = gethostbyname($them);
$this = pack($sockaddr, $AF_INET, 0, $thisaddr);
$that = pack($sockaddr, $AF_INET, $port, $thataddr);
if (socket(S, $AF_INET, $SOCK_STREAM, $proto)) {
# print "socket ok\n";
}
else {
die $!;
}
# Give the socket an address.
if (bind(S, $this)) {
# print "bind ok\n";
}
else {
die $!;
}
# Call up the server.
if (connect(S,$that)) {
# print "connect ok\n";
}
else {
die $!;
}
# Set socket to be command buffered.
select(S); $| = 1; select(STDOUT);
# print S "@PJL ECHO Hi $hostname! $ends";
# print S "@PJL OPMSG DISPLAY=\"Job $whoami\" $ends";
# print S $dpi300;
# Avoid deadlock by forking.
if($child = fork) {
print S $dosCr;
print S $TimesNewR;
while (<IN>) {
print S;
}
sleep 3;
do dokill();
} else {
while(<S>) {
print;
}
}
sub dokill {
kill 9,$child if $child;
}
Jedną wadą lpd jest to, że if nie są uruchamiane dla drukarek odległych. Jeśli okaże się, że potrzebujesz if, możesz ustawić podwójną kolejkę i ponownie zkolejkować dany wydruk. Weź ten printcap jako przykład:
lj-5:remote-hplj:\
:lp=/dev/null:sh:\
:sd=/var/spool/lpd/lj-5:\
:if=/usr/lib/lpd/filter-lj-5:
lj-5-remote:lp=/dev/null:sh:rm=nazwa.drukarki.pl:\
:rp=raw:sd=/var/spool/lpd/lj-5-raw:
w świetle tego, skrypt filter-lj-5 to:
#!/bin/sh
gs <opcje> -q -dSAFER -sOutputFile=- - | \
lpr -Plj-5-remote -U$5
Opcja -U dla lpr działa tylko wtedy jeśli lpr jest uruchomiony jako demon i ustawia ona poprawnie zleceniodawcę kolejki w ponownie zainicjowanej kolejce. Powinieneś raczej użyć bardziej pewnej metody na zdobycie identyfikatora użytkownika, ponieważ niezawsze jest to argument 5. Zobacz w podręcznik systemowym na temat printcap.
Drukowanie z Windows (czy OS/2) na Linux-ie jest obsługiwane poprzez SMB w pakiecie SAMBA, który także umożliwia współdzielenie plików dla Windows.
Samba zawiera całkiem pokaźną dokumentację. Możesz albo skonfigurować magic-filter na Linux-ie i drukować tam PostScript, albo zainstalować sterowniki dla konkretnej drukarki na wszystkich komputerach z Winndows i mieć kolejkę dla nich bez żadnych filtrów. Poleganie na tych sterownikach może czasami dawać lepsze efekty, ale jest to uciążliwe ze strony administratora jeśli jest dużo komputerów z Windows. Więc spróbuj najpierw PostScript-u.
Netatalk obsługuje drukowanie z Apple poprzez EtherTalk. Na stronie Netatalk HOWTO znajdziesz więcej informacji.
Jest jakaś obsługa drukowania z Netware przez Linux-a oferowana przez czy z powodu Calder-y, ale nie mam pojęcia czy Linux może oferować drukarki dla klientów Netware.
Jest wiele programów, które pozwolą ci na odbieranie i wysyłanie
faxów. Jednym z bardziej złożonych jest program Sama Lefflera pod
nazwą HylaFax. Jest on dostępny na ftp.sgi.com. Obsługuje
on wiele rzeczy od większej ilości modemów do rozgłaszania (broadcasting).
Dostępny jest także efax, prosty program wysyłający fax-y - jest on lepszym wyborem dla Linux-owców. Program mgetty może odbierać faxy (a nawet wysyłać pocztę głosową na niektórych modemach!).
Dostępny jest eksperymentalny serwis, który pozwala ci na wysłanie poczty elektronicznej z dołączonym fragmentem, który ma być wydrukowany na faxie gdzieś indziej. Obsługiwane są takie formaty jak PostScript, tak więc pomimo, iż nie obejmuje swym zasięgiem wszystkiego, może być on bardzo przydatnym serwisem. Więcej informacji na temat drukowania poprzez Zdalny Serwis Drukowania znajdziesz na stronie o zdalnym drukowaniu.
Tutaj wchodzimy w prawdziwą sieć oprogramowania. Ogólnie, Linux może uruchamiać cztery typy binariów z różnym sukcesem: Linux, iBCS, Win16/Win32s (za pomocą dosemu i kiedyś Wine) oraz Mac/68k (przy pomocy Executora). Ja omówię tylko czysto-Linux-owe i popularne Unix-owe oprogramowanie, poza tym WordPerfect dla SCO i przypuszczalnie inne komercyjne procesory tekstu także dobrze działają na Linux-owej emulacji iBCS.
Dla Linux-a wybór jest przeważnie ograniczony do oprogramowania dostępnego ogólnie dla Unix-a.
Większość języków "markup" jest bardziej elastyczna dla większych albo powtarzalnych projektów, gdzie chcesz, aby komputer kontrolował wygląd rezultatu/wydruku, aby utworzyć ogólny wzór. Próba zrobienia jakiegoś ładnego znaczka w języku "markup" przypuszczalnie by "bolała"...
nroffTo był jeden z pierwszych języków "markup" dla Unix-a. Strony z podręcznika systemowego są najpopularniejszym przykładem tekstów sformatowanych przy pomocy makr *roff-a. Wiele ludzi przeklina ten język, ale nroff ma, przynajmniej dla mnie, bardziej złożoną składnię niż to jest konieczne i przypuszczalnie jest złym wyborem dla nowych prac. Jednak warto jest wiedzieć, że możesz zamienić napisaną w groff-ie stronę bezpośrednio na PostScript. Większość poleceń "man" zrobi to za ciebie np. man -t coś| lpr.
TeXoraz język makr - LaTeX, są jednym z najczęściej używanych języków "markup" na Unix-ie. Techniczne prace są często napisane w LaTeX-u ponieważ bardzo upraszcza określenie wyglądu tekstu i jest wciąż jednym z niewielu systemów obróbki tekstu, który obsługuje zapisy matematyczne dokładnie i dobrze na raz. Formatem wyjściowym TeX-a jest dvi (DeVice Independent - czyli niezależny od urządzenia [przyp. tłum.]) i można go zamienić na PostScript lub Hewlett Packard PCL przy pomocy dvips lub dvilj. [TeX czyta się "tech" - przyp. tłum.].
Dostępny jest przynajmniej jeden program do obróbki tego języka na Unix-a; formuuje on podstawy systemu dokumentów Linuxdoc-SGML. Może on także obsługiwać inne DTD.
Ktoś zasugerował, że dla prostych projektów, wystarczy napisanie w HTML-u i drukować przy pomocy Netscape-a. Ja się z tym jednak nie zgadzam.
[ Jest to skrót od What You See Is What You Get - czyli to co widzisz to dostaniesz, a oznacza, iż wydrukowane zostanie DOKŁADNIE to co jest widoczne na ekranie i DOKŁADNIE w taki sam sposób - przyp. tłum.]
W tej chwili jest niedobór oprogramownia do obróbki tekstu WYSIWYG. Nie bój się napisać jakiegoś i daj mi znać jeśli ominąłem coś tutaj.
Jest to zakończenie dla LaTeX-a, które wygląda bardzo obiecująco. Odwiedź stronę domową LyX-a jeśli chcesz więcej informacji.
AUIS zawiera ez - edytor w stylu WYSIWYG z większością cech podstawowego procesora tekstu, możliwościami HTML oraz pełną obsługą poczty elektronicznej MIME i grup dyskusyjnych (news-ow).
Przynajmniej Caldera i Red Hat dostarczają pakiety zawierające zwykłe aplikacje biurowe jak edytor w stylu WYSIWYG i arkusz kalkulacyjny. Powiedziałbym, że robią dobrą robotę, ale nigdy nie używałem takich pakietów. Sądze, że Caldera dostarcza także WABI firmy Sun, tak więc mógłbyś przypuszczalnie uruchomić jakiś MS Office pod tym jeśli musiałbyś zintegrować się z plikami innych.
Jeff Phillips <jeff@I_RATUS.org> używa WordPerfect-a dla Linux-a z Caldery (w Slackware różnego rodzaju) i twierdzi, że działa mu to dobrze. Wygląda na to, że zawiera on wbudowaną obsługę drukarek, jak to można by się spodziewać. Caldera powinna mieć jakieś informacje na swojej stronie WWW.
RedHat dostarcza pakiet o nazwie Applixware; Ich stronę można znaleźć pod adresem www.redhat.com.
Inni sprzedawcy niech mi dadzą znać jakie mają oferty.
Prawie wszystko co możesz wydrukować, możesz też zobaczyć na ekranie.
Ghostscript posiada sterownik do X11; najlepiej jeśli jest on użyty pod kontrolą podglądarki PostScript o nazwie Ghostview. Najnowsza wersja tego programu powinna być także w stanie wyświetlić pliki PDF.
Niezależne od urządzenia (DeVice Independant) pliki TeX-a mogą być wyświetlane w X11 używając xdvi. Nowsze wersje xdvi wywołują ghostscript, aby wykonać polecenia typowo PostScriptowe.
Jest także sterownik na VT100. Nazywa się dgvt. Tmview działa z Linux-em i svgalib jeśli to wszystko na co cię stać.
Lpd udostepnia pięć atrybutów, które możesz ustawić w pliku
/etc/printcap, aby kontrolować wszystkie ustawienia portu
szeregowego, do którego dołączona jest drukarka. Przeczytaj stronę
podręcznika systemowego na temat
printcap i
zapamiętaj znaczenia: br#, fc#, xc#,
fs# i xs#. Ostatnie cztery z tych atrybutów to
mapy bitowe oznaczające ustawienia portu. Atrybut br# jest
prędkością: np. br#9600.
Tłumaczenie z postaci stty na printcap jest bardzo proste. Jeśli musisz, to zobacz stronę podręcznika systemowego na temat stty.
Użyj stty, aby ustawić port drukarki, tak żebyś mógł wysłać plik do tego portu (poleceniem cat) i otrzymał poprawny wydruk. Oto co wyświetla polecenie stty -a dla mojego portu drukarki:
dina:/usr/users/andy/work/lpd/lpd# stty -a < /dev/ttyS2 speed 9600 baud; rows 0; columns 0; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; min = 1; time = 0; -parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl ixon -ixoff -iuclc -ixany -imaxbel -opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 -isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl -echoke
Jedynymi zmianami między tym, i stanem w jakim port jest
inicjowany podczas startu są -clocal, -crtscts i
ixon. Twój port może mieć inne ustawienia w zaleźności od tego
jak twoja drukarka kontroluje przepływ (flow control).
stty używa się właściwie w dziwny sposób. Ponieważ polecenie
stty operuje na terminalu podłączonym do jego standardowego
wejścia, ty używasz je, aby manipulować danym portem szeregowym
przez użycie znaku < jak powyżej.
Jak już masz dobre ustawienia, tak że cat plik >
/dev/ttyS2 (w moim przypadku) działa, zajrzyj do pliku
/usr/src/linux/include/linux/termios.h. Zawiera on wiele
#define (definicji) i kilka struktur - możesz go sobie
wydrukować (przecież drukarka działa, nie ?) i używać jako
pomocy. Idź do sekcji, która zaczyna się tak:
/* c_cflag bit meaning */ #define CBAUD 0000017
Sekcja ta zawiera znaczenia bitów fc# i fs#. Zauważysz, że nazwy (po ilości bodów) są identyczne z tymi z polecenie stty. A nie mówiłem, że to będzie proste ?
Zobacz, które z tych ustawień mają znak "-" na początku przy poleceniu stty. Zsumuj te wszystkie liczby (są one zapisane w systemie ósemkowym). To będą te bity, które będziesz chciał wyzerować, tak więc wynik jest tym, co masz wpisać do fc#. Pamiętaj oczywiście, że będziesz ustawiał bity zaraz po tym jak je wyzerujesz, tak więc możesz użyć "fc#0177777" (ja tak robię).
Teraz zrób to samo dla tych ustawień, które nie mają znaku "-" na początku w poleceniu stty. W moim przykładzie ważne są CS8 (0000060), HUPCL (0002000) i CREAD (0000200). Zapamiętaj też ustawienie dla swojej prędkości (u mnie jest to 0000015). Zsumuj to wszystko - w moim przykładzie będzie to 0002275. To będzie to, co masz wpisać do fs#. ("fs#02275 działa u mnie.)
Zrób to samo z ustawieniem i zerowaniem dla następnej sekcji pliku nagłówkowego. "c_lflag bits". W moim przypadku nie musiałem niczego ustawiać, tak więc użyłem tylko "xc#0157777" i "xs#0".
Jon Luckey pisze, że u niektórych starszych szeregowych drukarek z interfejsem za 10 centów i małym buforem, stop w kontroli przepływu oznacza rzeczywiste stop dla drukowania. Potem odkrył, że żeby naprawić tę niedogodność wystarczy wyłączyć FIFO w układzie 16550 poleceniem setserial (żeby to zrobić po prostu podajesz typ ukladu uart jako 8250).
Informacje na temat smbprint zostały zaczerpnięte z artykułu
Marcela Roelofsa <marcel@paragon.nl>.
Informacje na temat nprint i używania drukarek NetWare zostały
dostarczone przez Michaela Smitha
<mikes@bioch.ox.ac.uk>.
Sekcja na temat drukarek szeregowych pod lpd została napisana przez
Andrew Teffta <teffta@engr.dnet.ge.com>.
Te wszystkie gammy i inne takie dla "gs" zostały dostarczone przez
Andreasa <quasi@hub-fue.franken.de>.
Dwa paragrafy na temat 30 sekundowego "closing_wait" przy
sterownikach szeregowych zostały dostarczone przez Chrisa Johnsona
<cdj@netcom.com>.
Robert Hart przysłał kilka doskonałych paragrafów na temat ustawiania serwera drukarek dla połączonych HP, któych ja używam w niezmienionej wersji.
I specjalne podziękowania dla tuzinów nad tuzinami tych, którzy wskazywali literówki, złe adresy i błędy w tym dokumencie przez lata.
Wersja ta jest wersją ostateczną. Dodany został odnośnik do właśnie powstałego tłumaczenia dokumentu Printing-Usage-HOWTO.
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 (a może ich tu trochę być, bo nie znam się tak bardzo na poligrafii) to pisz do mnie:
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 /JTZ.
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@jtz.org.pl. Jeśli chcesz sie na nią zapisać, to
wyślij list o treści subscribe jtz Imię Nazwisko na adres
majordomo@ippt.gov.pl
doc-linux-pl-2002.06.14.orig/html/Printing-Usage-HOWTO.pl.html 0100664 0001750 0001750 00000060335 06770264140 022404 0 ustar coven coven
Dokument ten opisuje jak używać systemu kolejkowania do drukarek
liniowych dostarczanego wraz z systemem operacyjnym Linux. Dokument
ten jest dodatkiem do dokumentu
Drukowanie w Linux-ie, który omawia instalację i ustawienie
systemu drukowania. Materiał zaprezentowany z tym HOWTO powinien
być tak samo ważny dla wszystkich systemów operacyjnych typu BSD w
tym także dla Linux-a.
Dokument ten został napisany w standardzie ISO-8859-2.
Oryginał można znaleźć pod adresem
ftp.icm.edu.pl w katalogu /pub/Linux/sunsite/docs/HOWTO.
Uwaga od Marka Komarinskiego <markk@auratek.com>:
Chciałbym podziękować Mattowi Fosterowi za duży wkład pracy przy ponownym pisaniu tego HOWTO. Utrzymuję jego styl i dodaję nowości tak żeby wszystko było w miarę świeże.
Uwaga od Matta Fostera <mwf@engr.uark.edu>:
Wersja bieżąca tego HOWTO jest napisanym od nowa dokumentem, którego oryginał napisali Grant Taylor <grant@god.tufts.edu> i Brian McCauley <B.A.McCauley@bham.ac.uk>. Starałem się zachować mniej więcej to samo co oni napisali, ale zupełnie zmieniłem wygląd i styl tego dokumentu oraz zasięg materiału zawartego tutaj. Czuję, że to uczyni dokument ten bardziej kompletnym i łatwiejszym do przeczytania. Mogę tylko mieć nadzieję, że się zgadzasz.
v1.2.1
v1.1
v1.0
Niektóre nazwy/nazwiska wymienione w tym HOWTO są prawami autorskimi lub znakami handlowymi pewnych firm/osób. Występują one w wersji pełnej lub skróconej.
(c) 1995 Matt Foster (mwf@engr.uark.edu)
(c) 1996-1997 Mark F. Komarinski (markk@auratek.com)
Wszelkie tłumaczenia, prace pochodne, prace zebrane zawierające dokumenty HOWTO muszą zawierać tę notatkę o prawach autorskich. Oznacza to, że nie możesz stworzyć pracy pochodzącej z HOWTO i nałożyć na jej dystrybucję dodatkowych ograniczeń. Wyjątki od tej zasady mogą być uczynione pod pewnymi warunkami; skontaktuj się z koordynatorem programu Linux HOWTO pod niżej podanym adresem.
Krótko mówiąc, chcemy promować szerzenie tych dokumentów przez wszelkie dostępne kanały. Chcielibyśmy także utrzymać prawa autorskie nałożone na te dokumenty, i być powiadomieni o planach dotyczących redystrybucji HOWTO.
Jeśli masz pytania skontaktuj się z Gregiem Hankisem, koordynatorem programu Linux HOWTO po adresem gregh@sunsite.unc.edu.
Jeśli chcesz sobie wydrukować to HOWTO, to polecam wersję
PostScriptową. Jest ona sformatowana w taki sposób, że jest
łatwiejsza do czytania i ładniejsza. Wersję angielską w
PostScripcie możesz pobrać z
SUNSite Polska.
Niestety nie dostarczamy jeszcze wersji polskiej w PostScripcie -
szukamy kogoś, kto by nam pomógł rozwiązać problem polskich liter
;) albo na nowszą wersję narzędzi SGML, któraby obsługiwała
ISO-8859-2.
Pytania, komentarze czy poprawki dotyczące tego dokumentu mogą być kierowane do < markk@auratek.com>.
Kieruje je do wszystkich, którzy poświęcili czas na czytanie wersji alfa i odpowiedzieli wieloma pożytecznymi uwagami i sugestiami - niektórzy z was mogą zobaczyć odzwierciedlenie swoich komentarzy w tej wersji dokumentu.
Chciałbym także podziękować Mattowi Fosterowi, który napisał to HOWTO od nowa.
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:
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 sie na nią zapisać, to
wyślij list o treści subscribe jtz Imię Nazwisko na adres
majordomo@ippt.gov.pl
Sekcja ta omawia jak drukować pliki, sprawdzać kolejkę wydruków, usuwać zadania z kolejki wydruków, formatować pliki przed ich wydrukowaniem i jak skonfigurować środowisko do drukowania.
System drukowania na Linux-ie - system lp - jest przeniesionym źródłem kodu napisanego przez regentów Uniwersytetu Californii dla wersji UNIX-a "Berkeley Software Distribution".
Najbardziej prostą metodą na drukowanie w Linux-ie jest wysłanie pliku do wydrukowania do urządzenia drukarki. Jednym ze sposobów na zrobienie tego jest użycie polecenia cat. Jako "root" możesz zrobić coś takiego:
# cat thesis.txt > /dev/lp
W tym wypadku, /dev/lp jest symbolicznym dołączeniem do
rzeczywistego urządzenia drukarki - niech to będzie igłówka,
laserówka, "typesetter" czy ploter. (Więcej informacji na temat
dołączeń symbolicznych znajdziesz na stronie podręcznika systemowego
ln(1)).
Z przyczyn bezpieczeństwa, tylko "root" i użytkownicy należący do tej samej grupy co demon drukowania mogą pisać bezpośrednio na drukarkę. Oto dlaczego polecenia takie jak: lpr, lprm, czy lpq muszą być używane, żeby mieć dostęp do drukarki.
Z tego powodu użytkownicy muszą używać lpr, aby wydrukować jakiś plik. Polecenie to troszczy się o wszystko co jest potrzebne do wydrukowania danego pliku, a potem przekazuje kontrolę do innego programu - lpd czyli "line printer daemon". Demon ten informuje drukarkę jak ma wydrukować dany plik.
Kiedy wykonywany jest lpr, najpierw kopiuje on podany plik do konkretnego katalogu (katalogu zadań), gdzie plik ten pozostaje dopóki lpd go nie wydrukuje. Jak lpd się dowie, że jest jakiś plik do wydrukowania, to utworzy kopię siebie (co my programiści nazywamy rozmnożeniem/klonowaniem). Kopia ta wydrukuje nasz plik, podczas gdy oryginał będzie czekał na dalsze zadania. Pozwala to na obsługiwanie wielu zadań na raz.
Składnia polecenia lpr jest bardzo znana:
$ lpr [ opcje ] [ nazwa_pliku ... ]
Jeśli nazwa_pliku nie jest podana, lpr spodziewa się
danych ze standardowego wejścia (zwykle klawiatury lub wyjścia
innego programu). To pozwala użytkownikowi na przekierowanie
wyjścia poleceń do kolejki drukowania. Np:
$ cat thesis.txt | lpr
lub
$ pr -l60 thesis.txt | lpr
Polecenie lpr przyjmuje kilka argumentów z linii poleceń, które pozwalają użytkownikowi kontrolować jego działanie. Niektóre z bardziej popularnych argumentów to: -Pdrukarka określa drukarkę, na której ma być dane zadanie wydrukowane, -h nie pozwala wydrukować strony tytułowej (z identyfikatorem itp.), -s tworzy symboliczne dołączenie zamiast kopiować plik do katalogu zadań (przydatne do dużych plików) i -#il określa ilość kopii do wydrukowania. Przykład może wyglądać tak:
$ lpr -#2 -sP dj thesis.txt
Polecenie to stworzy symboliczne dołączenie do pliku
thesis.txt w katalogu zadań dla drukarki o nazwie dj, a
następnie przekaże zadanie do lpd. Następnie wydrukuje drugą
kopię tego pliku.
Wszystkie dostępne opcje znajdziesz w podręczniku systemowym lpr(1).
Aby zobaczyć zawartość kolejki do drukowania użyj polecenia lpq. Wydane bez argumentów, zwraca zawartość kolejki dla domyślnej drukarki.
Rezultat polecenia lpq może być przydatny do różnych celów.
$ lpq lp is ready and printing Rank Owner Job Files Total Size active mwf 31 thesis.txt 682048 bytes
Inną przydatną cechą każdego systemu drukowania jest możliwość anulowania zadania, które zostało umieszczone w kolejce. Aby to zrobić użyj lprm.
$ lprm -
Powyższe polecenie anuluje wszystkie zadania, które są własnością użytkownika wydającego to polecenie. Pojedyncze zadanie może być anulowane przez zdobycie numeru tego zadania (z polecenia lpq) i podanie go do lprm:
$ lprm 31
Spowodowałoby skasowanie zadania nr 31 - thesis.txt na
drukarce domyślnej.
Program lpc(8) używany jest do kontrolowania drukarek, które obsługuje lpd. Możesz włączyć lub wyłączyć drukarkę albo jej kolejkę, zmienić kolejność w kolejce zadań oraz otrzymać raport na temat drukarek i ich kolejek. Lpc jest używany głównie w sytuacjach kiedy do komputera podłączonych jest kilka drukarek.
$ lpc
Powyższe polecenie wystartuje program lpc. Domyślnie, uruchamia się interaktywny tryb i możesz zacząć wydawać polecenia. Inną opcją jest wprowadzenie polecenia lpc z linii argumentów.
$ lpc status all
Lista dostępnych poleceń jest w podręczniku systemowym lpd, a tutaj podaję kilka najważniejszych, których będziesz najczęściej używał. Polecenie oznaczone opcją może być albo nazwą drukarki (lp, print, itp.) albo słowem "all", co oznacza wszystkie drukarki.
Tylko krótka notatka na temat zadziwiającego programu printtool z dystrybucji RedHat. Wygląda na to, że robi on wszystko to co robiłby filtr magiczny. RedHat instaluje od razu wiele programów filtrujących. Oto jak ustawiłem swoją drukarkę HP LJ 4L podłączoną do portu równoległego na RH 4.0.
Na jedno zawołanie możesz mieć definicje dla różnych drukarek w
/etc/printcap. Dla różnych rozmiarów papieru,
rozdzielczości, itd.
Ta sekcja omawia drukowanie plików z jakimi się spotkasz na Linux-ie.
Drukowanie takich plików na drukarce zwykle zależy od rodzaju grafiki i drukarki. Igłówki z reguły nie wchodzą w grę z powodu różnic w sposobach obsługi plików graficznych. Najlepszym wyborem byłoby tu sprawdzenie czy twoja drukarka jest kompatybilna z Epson-em albo IBM ProPrinter, a następnie konwersja do PostScriptu i użycie ghostscriptu do wydrukowania (zobacz następną sekcję).
Jeśli masz drukarkę laserową, to sytuacja jest trochę łatwiejsza ponieważ większość jest kompatybilna z PCL. To daje ci kilka opcji do wyboru. Niektóre programy umieją wysyłać bezpośrednio w PCL. Jeśli nie, to programy takie jak NetPBM potrafią konwertować na PCL. Ostatnią opcją jest użycie ghostscriptu (zobacz następcją sekcję).
Najepszą opcją do wyboru jest instalacja pakietów takich jak NetPBM i ghostscriptu, a potem instalacja magicznego filtra do automagicznej obróbki grafiki.
Drukowanie takich plików na drukarce, która potrafi interpretować ten język jest proste; po prostu użyj lpr a drukarka zajmię się resztą. Dla tych z nas, którzy nie mają takich drukarek pozostają inne środki. Na szczęście są dostępne programy, które potafią robić użytek z PostScriptu i tłumaczyć go na język zrozumiały dla większości drukarek. Najbardziej znanym programem z tego rodzaju jest GhostScript.
Jest on odpowiedzialny za konwersję wszystkich opisów w PostScripcie na język zrozumiały dla danej druarki. Aby wydrukować plik w PostScripcie za pomocą ghostscriptu możesz zrobić coś takiego:
$ gs -dSAFER -dNOPAUSE -sDEVICE=deskjet -sOutputFile=\|lpr thesis.ps
Zauważ w powyższym przykładzie, że właściwie przesyłamy wynik z programu ghostscript do lpr używając opcji -sOutputFile.
Ghostview jest interfejsem graficznym pod XWindows dla
ghostscriptu. Pozwala on na podgląd pliku w PostScripcie przed
wydrukowaniem. Ghostview i ghostscript - oba można otrzymać z
ftp.icm.edu.pl w
katalogu /pub/Linux/sunsite/apps/graphics/viewers/X.
Adobe wypuścił czytarkę Acrobat dla Linux-a i jest ona dostępna na stronie domowej WWW tej firmy. Poprzednia wersja - xpdf - jest także dostępna.
Jednym z najprostszych sposobów na drukowanie takich plików jest konwersja ich na PostScript i drukowanie za pomocą ghostscriptu. Aby to zrobić musisz najpierw przkonwertować je z TeX-a na format znany jako DVI (co jest skrótem od DeVice Independent - czyli niezależne od urządzenia). Można to zrobić polecenem tex(1). potem musisz zmienić plik DVI na PostScript przy pomocy dvips. Wszystko wygląda mniej więcej tak:
$ tex thesis.tex $ dvips thesis.dvi
Teraz możesz wynikowy plik w PostScripcie wydrukować w sposób podany wyżej,
$ groff -Tascii thesis.tr | lpr
albo jeśli wolisz
$ groff thesis.tr > thesis.ps
a potem wydrukuj plik w PostScripcie jak wyżej.
$ man man | col -b | lpr
Strony te zawierają preformatowane dane troff-a tak więc musimy wyrzucić wszelkie podświetlenia, podkreślenia itp. Program col robi to całkiem miło, a ponieważ używamy strumieni program man nie użyje polecenia more.
W sekcji tej znajdują się tematy, których nie można zaliczyć do wcześniejszych.
Ponieważ większość plików ASCII nie jest sformatowana do drukowania użyteczne jest sformatowanie ich w jakiś sposób przed wydrukowaniem. Może zawierać to umieszczenie tytułu i numeru na każdej stronie, ustawienie marginesu, podwójne przerwy między wyrazami, wcięcia albo drukowanie pliku w większej ilości kolumn. Popularnym sposobem na osiągnięcie tego jest użycie np. programu pr.
$ pr +4 -d -h"Ph.D. Thesis, 2nd Draft" -l60 thesis.txt | lpr
W powyższym przykładzie, pr przeskoczyłby pierwsze 3 strony (+4), ustawił długość strony na 60 lini (-l60), podwoił spacje (-d) i dodał napis "Ph.D. Thesis, 2nd Draft" na początku każdej strony (-h). Lpr umieściłby rezultat tego polecenia w kolejce. Zajrzyj do podręcznika systemowego pr(1) jeśli chcesz znać więcej informacji.
Wszystkie polecenia w systemie drukowania Linux-a akceptują opcję -P. Opcja ta pozwala użytkownikowi na podanie, która drukarka ma być użyta. Jeśli użytkownik tego nie poda, to wybrana zostanie drukarka domyślna.
Zamiast każdorazowego podawania nazwy drukarki, możesz podać ją w zmiennej środowiskowej "PRINTER". W zależności od twojej powłoki, może to być zrobione w różny sposób. Dla bash-a będzie to:
$ PRINTER="nazwa_drukarki"; export PRINTER
Dla csh będzie to:
% setenv PRINTER "nazwa_drukarki"
Polecenia te mogą być umieszczone w skryptach startowych (.profile
dla bash-a i .cshrc dla csh) albo wydane z linii
poleceń. Więcej na temat zmiennych środowiskowych znajdziesz na
stronach podręcznika systemowego bash(1) i
csh(1).
UWAGA - Ostrzegam żebyś przypadkowo z tego podniecenia nie zaczął
drukować tych stron :)) - mają one odpowiednio 4.000 i 5.500
linii.
P1. Jak mam zapobiec efektowi schodków ?
O1. Efekt ten jest powodem tego, że niektóre drukarki spodziewają się znaków CR/LF na końcu linii, a w Unix-ach koniec linii to tylko LF (czyli przejście do nstępnej linii bez powrotu do jej początku). Najprostszym sposobem na poprawienie tego jest sprawdzenie czy twoją drukarkę można jakoś przełączyć na druki sposób - albo przy pomocy przełącznika albo wysyłając sekwencję znaków na początku każdego wydruku. Do drugiego rozwiązania potrzebujesz filtra. (Zobacz pytanie 2.)
Szybkim sposobem jest użycie filtru z wiersza poleceń. Przykładem może być:
$ cat thesis.txt | todos | lpr
P2. Co to jest filtr.
A2. Jest to program, który czyta ze standardowego wejścia (stdin), robi coś z wczytanymi danymi i zapisuje je do standardowego wyjścia (stdout). Filtry są używane do wielu rzeczy, włączając w to przeróbkę tekstu.
P3. Co to jest filtr magiczny ?
A3. Jest to filtr, który robi coś w zależności od typu pliku wejściowego. Np. jeśli plik jest czystym plikiem tekstowym, to po prostu wydrukowałby go używając standardowej metody. Jeśli plik jest w PostScripcie czy innym formacie, to wydrukowałby go używając innej metody (np. ghostscriptu). Dwoma przykładami tego są "magicfilter" i "APSfilter". Jedyną wadą tych filtrów jest to, że odpowiednie programy muszą być zainstalowane przed instalacją filtra.
Powodem tego jest to, że jeśli "magicfilter" zostaje zainstalowany, to pyta on twój system o konkretne programy (takie jak ghostscript - jeśli go znajdzie, to wie, że może obsługiwać dane typu PostScript), potem tworzy siebie na podstawie tego co znalazł. Aby obsługiwać wszystkie pliki do drukowania, musisz mieć zainstalowane przynajmniej takie programy:
P4. Co z Systemem Drukowania z Windows ? Czy Linux będzie z tym działał ?
O4. Może. Drukarki, które akceptują tylko polecenia WPS (Windows Printing System) nie będą działać z Linux-em. Natomiast te, które akceptują polecenia WPS i inne (jak np. Canon BJC 610) będą działać dopóki są ustawione na coś innego niż WPS. Inne drukarki takie jak HP DeskJet 820Cxi/Cse nie będą działać z Linux-em. Właściwie Linux może służyć jako serwer wydruków dla Win95 ponieważ Win95 ma sterowniki do tych drukarek.
P5. Co to za system ? Nie mogę wydrukować więcej niż 6 stron bo dostaję "file too large".
O5. Jedna z opcji w /etc/printcap dotyczy maksymalnego
rozmiaru wydruku. Domyślną wartością jest 1000 bloków dysku
(ok. 500KB). Dla PostScript-u itp. da ci to około 6-8 stron z
grafiką i to koniec. Upewnij się, że dodałeś następującą linię do
pozycji danej drukarki w /etc/printcap:
mx=0
Podstawowym powodem tego limitu jest dotrzymanie warunku, żeby nie zapełnić partycji na wydruki. Jest inny spośob na zrobienie tego; można kazać lpr utworzyć dołączenie symboliczne do pliku do wydrukowania. Musisz wtedy pamiętać, żeby dodać opcję -s do każdego wywołania programu lpr.
W sekcji tej znajdują się częste problemy z jakimi się możesz spotkać przy drukowaniu.
Jeśli twoja drukarka nie działa:
Odpowiedź na te pytania pomoże znaleźć rozwiązanie.
Inne sugestie do tej sekcji wysyłaj na adres < markk@auratek.com>.
Sekcja ta zawiera odnośniki dla systemu drukowania na Linux-ie. Próbowałem utrzymać tę sekcję jak najbardziej zwięzłą. Jeśli czujesz, że zapomniałem czegoś, to nie wahaj się pisać do mnie.
Zanim wyślesz pytanie na grupę dyskusyjną, zastanów się:
Jeśli któreś z powyższych jest prawdą, to pomyśl dwa razy zanim wyślesz pytanie. A jeśli już się zdecydujesz wysłać, to postaraj się zawrzeć jak najdokładniejsze informacje. Spróbuj napisać coś więcej niż "Mam problemy z lpr. Pomóżcie !" Tego typu listy zostaną przez większość zignorowane. Podaj także wersję jądra jaką używasz, jak/kiedy pojawił się błąd i ewentualnie komunikaty jakie się pojawiły.
comp.os.linux.* wszystko o Linux-ie (i jeszcze więcej)comp.unix.* dyskusje dotyczące systemu
operacyjnego UNIXdoc-linux-pl-2002.06.14.orig/html/RPM-HOWTO.pl.html 0100664 0001750 0001750 00000121554 06770264140 020207 0 ustar coven coven
Skrót RPM pochodzi od ang. Red Hat Package Manager co oznacza w wolnym tłumaczeniu menadżer pakietów RedHat-a. Jednak pomimo tego, że w nazwie znajduje się Red Hat, to w zamierzeniu jest on systemem otwartym, dostępnym dla każdego. Umożliwia on spakowanie zarówno kodu źródłowego jak i programów binarnych do zwartej postaci zawierającej dodatkowo informacje istotne przy zarządzaniu oprogramowaniem. Umożliwia to łatwą instalację, odświeżanie oraz usuwanie oprogramowania. Informacja o zainstalowanym oprogramowaniu jest łatwo dostępna jako że RPM tworzy bazę danych o wszystkich pakietach zainstalowanych w naszym systemie. Pozwala to na szybkie sprawdzenie czy dany pakiet jest zainstalowany, a jeśli tak to co zawiera, jaka jest jego wersja, jakie pliki zostały przez niego w systemie zainstalowane oraz jakich innych pakietów wymaga. Pozwala też sprawdzić do jakiego pakietu należy dany plik.
Przyp. tłum. rpm jest obecnie używany zarówno do plików w postaci źródłowej jak i binarnej. W oryginale autor odwołuję się głównie do tej pierwszej. Jednak ponieważ obecnie częściej używa się pakietów w postaci binarnej to pliki z których powstał rpm a które mają być zainstalowane również będę nazywał plikami źródłowymi zaś proces instalacji bądź kompilacji - instalacją.
Firma Red Hat Software zachęca inne firmy i grupy tworzące oprogramowanie do bliższego zapoznania się z RPM i wykorzystania go przy tworzeniu własnych pakietów. Będąc dość elastycznym i łatwym w użyciu, RPM pozwala budować nawet bardzo obszerne zbiory pakietów. Pomimo tego, że jest to system całkowicie otwarty i dostępny, jego autorzy chętnie wysłuchają informacji o błędach i ewentualnych poprawkach. (Jednak przed zgłoszeniem ``błędu'' należy, tak jak zawsze, najpierw sprawdzić czy ma się najnowszą stabilną wersję, przejrzeć dokumentację oraz przeszukać archiwa USENET i jeśli i tam nie będzie odpowiedzi - spytać na odpowiedniej grupie dyskusyjnej np. pl.comp.os.linux -przyp. tłum.) Używanie i rozpowszechnianie RPM jest wolne od opłat i regulowane Publiczną Licencją GNU - GPL (ang. GNU Public Licence).
Bardziej szczegółowa dokumentacja dotycząca RPM jest zawarta w książce Eda Bailey'a, Maximum RPM, która można ściągnąć bądź zakupić w www.redhat.com.
Na początku warto powiedzieć co nieco o ``filozofii'' RPM.
Celem jego projektantów było umożliwienie użycia
pierwotnych kodów źródłowych. Zanim powstał RPM,
jego autorzy używali RPP (przy czym podkreślają,
że RPM nie nie jest na nim oparty ), w którym udostępniano
poprawione kody źródłowe, konkretnie te, które były
używane do instalacji.
Teoretycznie mogłoby to wystarczyć, bo można
było zainstalować pakiet źródłowy RPP i skompilować
go (poleceniem make) bez większych problemów.
Jednakże nie były to oryginalne źródła i trudno
było na pierwszy rzut oka powiedzieć co w nich zostało zmienione.
Niezbędnym było ściągnięcie również oryginalnych
źródeł.
RPM zaś zawiera oryginalne źródła wraz z poprawkami
których dokonano. W opinii autorów rozwiązanie
to jest znacznie lepsze. Dlaczego?
Z paru powodów. Po pierwsze, jeśli pojawi się nowa wersja programu to nie zaczynamy od zera. Niektóre poprawki, które były dobre dla poprzedniej wersji, mogą być właściwe, najwyżej po minimalnych zmianach i dla obecnej. By się o tym przekonać, wystarczy do nich zajrzeć. Poza tym wszystkie domyślne opcje potrzebne do instalacji są w ten sposób łatwo dostępne.
Poza tym RPM zaprojektowano tak, aby umożliwić sprawdzanie wielu istotnych informacji dotyczących zarówno pojedyńczego, konkretnego pakietu jak i ich zestawu bądź też wszystkich pakietów zainstalowanych w danym systemie. Przykładem takiej informacji jest lista pakietów, których dany pakiet wymaga wraz z numerami wersji. Możliwe jest również sprawdzenie z jakiego pakietu pochodzi konkretny plik oraz gdzie można znaleźć jego wersję źródłową. Pliki RPM są już wewnętrznie spakowane, ale sprawdzanie informacji dotyczących konkretnego pakietu jest proste i szybkie dzięki specjalnemu binarnemu nagłówkowi który zawiera praktycznie wszystkie niezbędne informacje o pakiecie.
Innym atutem RPM jest umiejętność weryfikacji pakietów. Jeśli boisz się, że skasowałeś jakiś ważny plik, to możesz to po prostu sprawdzić. RPM poinformuje Cię o wykrytych nieprawidłowościach. Jeśli zajdzie potrzeba, to możesz łatwo odnowić zainstalowany pakiet przy czym Twoje pliki konfiguracyjne zostaną zachowane. Oczywiście możesz też zainstalować je od nowa.
Autorzy chcą podziękować grupie ludzi od dystrybucji BOGUS za wiele ich idei i pomysłów które wykorzystano w RPM. Gdyż o ile RPM został napisany w całości przez Red Hat Software, to zasady jego działania są oparte na kodzie stworzonym przez BOGUS (PM oraz PMS).
Najprostszym sposobem jest instalacja Linux-a Red Hat. Jeśli ktoś nie chce tego robić to może używać RPM bez tego. W Polsce RPM jest dostępny np. pod adresem: ftp.icm.edu.pl - polskim mirrorze ftp.redhat.com.
Podstawowym wymaganiem RPM-a jest cpio o numerze wersji 2.4.2 lub wyższym. Mimo że RPM jest pomyślany do pracy pod Linux-em to równie może być przeniesiony na inne systemy Unix. W rzeczywistości udało się go już uruchomić pod SunOS, Solaris, AIX, Irix, AmigaOS i wieloma innymi systemami. Jednak należy pamiętać, że pakiety binarne stworzone na różnych Unix-ach mogą nie być ze sobą zgodne.
Są to minimalne wymagania by zainstalować RPM-y.
By tworzyć RPM-y z kodu źródłowego potrzebne
jest również wszystko to co normalnie jest
wymagane przy tworzeniu pakietu np.
gcc, make, itd.
Najprostszym wykorzystaniem RPM jest instalacja nowego pakietu:
rpm -i foobar-1.0-1.i386.rpm
Równie proste jest jego odinstalowanie:
rpm -e foobar
Przykładem bardziej złożonego, ale bardzo użytecznego polecenia jest instalacja pakietów poprzez FTP. Jeśli jesteś podłączony do sieci i chcesz zainstalować nowy pakiet, to wszystko co musisz zrobić to podać nazwę pliku jako poprawny URL, np.:
rpm -i ftp://ftp.pht.com/pub/linux/redhat/rh-2.0-beta/RPMS/foobar-1.0-1.i386.rpm
Chciałbym podkreślić, że w tym przypadku RPM sprawdzi bądź zainstaluje pakiet poprzez FTP.
Były to w miarę proste polecenia, lecz rpm może być użyty na wiele więcej sposobów jak można się łatwo przekonać pisząc w linii komend
rpm
i naciskając Enter:
RPM version 2.3.9
Copyright (C) 1997 - Red Hat Software
This may be freely redistributed under na warunkach
of the
GNU Public License
usage: rpm {--help}
rpm {--version}
rpm {--initdb} [--dbpath <dir>]
rpm {--install -i} [-v] [--hash -h] [--percent] [--force] [--test]
[--replacepkgs] [--replacefiles] [--root <dir>]
[--excludedocs] [--includedocs] [--noscripts]
[--rcfile <file>] [--ignorearch] [--dbpath <dir>]
[--prefix <dir>] [--ignoreos] [--nodeps]
[--ftpproxy <host>] [--ftpport <port>]
file1.rpm ... fileN.rpm
rpm {--upgrade -U} [-v] [--hash -h] [--percent] [--force] [--test]
[--oldpackage] [--root <dir>] [--noscripts]
[--excludedocs] [--includedocs] [--rcfile <file>]
[--ignorearch] [--dbpath <dir>] [--prefix <dir>]
[--ftpproxy <host>] [--ftpport <port>]
[--ignoreos] [--nodeps] file1.rpm ... fileN.rpm
rpm {--query -q} [-afpg] [-i] [-l] [-s] [-d] [-c] [-v] [-R]
[--scripts] [--root <dir>] [--rcfile <file>]
[--whatprovides] [--whatrequires] [--requires]
[--ftpuseport] [--ftpproxy <host>] [--ftpport <port>]
[--provides] [--dump] [--dbpath <dir>] [targets]
rpm {--verify -V -y} [-afpg] [--root <dir>] [--rcfile <file>]
[--dbpath <dir>] [--nodeps] [--nofiles] [--noscripts]
[--nomd5] [targets]
rpm {--setperms} [-afpg] [target]
rpm {--setugids} [-afpg] [target]
rpm {--erase -e} [--root <dir>] [--noscripts] [--rcfile <file>]
[--dbpath <dir>] [--nodeps] [--allmatches]
package1 ... packageN
rpm {-b|t}[plciba] [-v] [--short-circuit] [--clean] [--rcfile <file>]
[--sign] [--test] [--timecheck <s>] specfile
rpm {--rebuild} [--rcfile <file>] [-v] source1.rpm ... sourceN.rpm
rpm {--recompile} [--rcfile <file>] [-v] source1.rpm ... sourceN.rpm
rpm {--resign} [--rcfile <file>] package1 package2 ... packageN
rpm {--addsign} [--rcfile <file>] package1 package2 ... packageN
rpm {--checksig -K} [--nopgp] [--nomd5] [--rcfile <file>]
package1 ... packageN
rpm {--rebuilddb} [--rcfile <file>] [--dbpath <dir>]
rpm {--querytags}
Wszystkie te opcje są opisane w podręczniku systemowym "man" dotyczącym RPM.
RPM jest bardzo wygodnym narzędziem i jak można było się przekonać, ma sporo opcji. Najlepszą metodą zapoznania się z nimi są przykłady.
Pokazałem już najprostszą instalację i usuwanie pakietów, czas na trochę ciekawsze przykłady:
rpm -Uhv foobar-1.0-1.i386.rpm
rpm -Va
(od ang. Verify all)
rpm -qf /usr/X11R6/bin/xjewel
(od ang. query file).
W wyniku otrzymasz nazwę pakietu:
xjewel-1.6-1
rpm -qpi koules-1.2-2.i386.rpm
Wyświetli Ci się coś takiego:
Name : koules Distribution: Red Hat Linux Colgate
Version : 1.2 Vendor: Red Hat Software
Release : 2 Build Date: Mon Sep 02 11:59:12 1996
Install date: (none) Build Host: porky.redhat.com
Group : Games Source RPM: koules-1.2-2.src.rpm
Size : 614939
Summary : SVGAlib action game with multiplayer, network, and sound support
Description :
This arcade-style game is novel in conception and excellent in execution.
No shooting, no blood, no guts, no gore. The play is simple, but you
still must develop skill to play. This version uses SVGAlib to
run on a graphics console.
(od ang. query package info).
rpm -qpl koules-1.2-2.i386.rpm
W wyniku otrzymasz ich listę:
/usr/doc/koules
/usr/doc/koules/ANNOUNCE
/usr/doc/koules/BUGS
/usr/doc/koules/COMPILE.OS2
/usr/doc/koules/COPYING
/usr/doc/koules/Card
/usr/doc/koules/ChangeLog
/usr/doc/koules/INSTALLATION
/usr/doc/koules/Icon.xpm
/usr/doc/koules/Icon2.xpm
/usr/doc/koules/Koules.FAQ
/usr/doc/koules/Koules.xpm
/usr/doc/koules/README
/usr/doc/koules/TODO
/usr/games/koules
/usr/games/koules.svga
/usr/games/koules.tcl
/usr/man/man6/koules.svga.6
(od ang. query package list)
rpm -qa
(od ang. query all).
rpm -K -vv pakiet.rpm
To było tylko parę przykładów, więcej znajdziesz np. w man-ie. Na pewno wpadniesz na ciekawsze w miarę jak będziesz lepiej poznawał RPM.
Tworzenie rpm-ów jest dość proste, szczególnie jeśli oprogramowanie które chcesz w nie włożyć poprawnie się instaluje.
Procedura tworzenia RPM-ów wygląda tak:
/etc/rpmrc
jest obecny i poprawnie skonfigurowany w Twoim systemie.Zazwyczaj RPM tworzy zarówno pakiety binarne jak i źródłowe.
W chwili obecnej, jedyny sposób konfiguracji RPM-a
jest dostępny poprzez plik /etc/rpmrc.
Przykładowy plik wygląda tak:
require_vendor: 1
distribution: Moja własna dystrybucja!
require_distribution: 1
topdir: /usr/src/me
vendor: Kubuśsoft
packager: Pakujący RPM w Kubuśsoft <pakiety@kubuśsoft.com.pl>
optflags: i386 -O2 -m486 -fno-strength-reduce
optflags: alpha -O2
optflags: sparc -O2
signature: pgp
pgp_name: Pakujący RPM w Kubuśsoft
pgp_path: /home/pakiety/.pgp
tmppath: /usr/tmp
Wiersz require_vendor zmusza RPM-a do szukania
wiersza z nazwą producenta pakietów (vendor).
Ta może pochodzić z pliku /etc/rpmrc
lub z nagłówka pliku .spec.
By wyłączyć tę opcję, zmień liczbę na 0.
Analogicznie jest w przypadku wierszy
require_distribution oraz
require_group.
Następnym wiersz zawiera distribution
i określa nazwę dystrybucji.
Możesz ją zdefiniować tutaj, bądź później,
w nagłówku pliku specyfikującego.
Tworząc pakiet dla konkretnej dystrybucji warto zadbać
by wiersz ten zawierał poprawną informację,
nawet pomimo tego, że nie jest wymagany.
Tyczy się to również wiersza vendor (producent),
choć nazwa może być zupełnie dowolna
(np. Joe's Software, Rock Music Emporium).
RPM pozwala również tworzyć pakiety dla różnych platform
sprzętowych.
Plik rpmrc może zawierać zmienną ``optflags''
wykorzystywaną przy building budowaniu tych elementów pakietu,
które wymagają opcji zależnych od platformy.
Dokładniejszy opis tej zmiennej pojawi się w jednym
z następnych rodziałów.
Nie są to oczywiście wszystkie etykiety/makra. Jest ich więcej. By się im przyjrzeć spróbuj komendy:
rpm --showrc
która powinna wypisać wszystkie możliwe etykiety
wraz z ich wartościami (o ile są ustawione).
Niniejszy rozdział zawiera opis pliku specyfikującego dla pakietu. Plik taki są niezbędne by stworzyć pakiet. Zawiera on opis oprogramowania wraz z instrukcjami instalacyjnymi oraz listę wszystkich plików binarnych przez niego instalowanych.
Plik specyfikujący warto jest nazwać zgodnie z konwencją. Powinno to wyglądać mniej więcej tak: nazwa pakietu-kreska-numer wersji-kreska-numer modyfikacji-kropka-spec.
A tak wygląda przykładowy plik specyfikujący (eject-3.0-1.spec):
Summary: ejects ejectable media and controls auto ejection
Name: eject
Version: 1.4
Release: 3
Copyright: GPL
Group: Utilities/System
Source: sunsite.unc.edu:/pub/Linux/utils/disk-management/eject-1.4.tar.gz
Patch: eject-1.4-make.patch
Patch1: eject-1.4-jaz.patch
%description
This program allows the user to eject media that is autoejecting like
CD-ROMs, Jaz and Zip drives, and floppy drives on SPARC machines.
%prep
%setup
%patch -p1
%patch1 -p1
%build
make RPM_OPT_FLAGS="$RPM_OPT_FLAGS"
%install
install -s -m 755 -o 0 -g 0 eject /usr/bin/eject
install -m 644 -o 0 -g 0 eject.1 /usr/man/man1
%files
%doc README COPYING ChangeLog
/usr/bin/eject
/usr/man/man1/eject.1
Nagłówek pliku .spec zawiera kilka standardowych pól które powinny być wypełnione. Oto znaczenie poszczególnych pól:
Summary: Jest to jednowierszowy,
skrócony opis pakietu. Name: To pole zawiera nazwę pliku rpm.
Ściśle jest to string będący tą częścią nazwy pliku
rpm która odpowiada nazwie pakietu.Version: To pole zawiera wersję pliku rpm.
Ściśle jest to string będący tą częścią nazwy pliku
rpm która odpowiada wersji pakietu.Release: To pole zawiera numer modyfikacji
pliku rpm. Jest to liczba mówiąca z którą
modyfikacją (podwersją) obecnej wersji pakietu
mamy do czynienia (tzn. jeśli dokonany w pakiecie
tylko minimalnych poprawek błędów to wypuszczamy
pakiet w tej samej wersji ale z numerem modyfikacji
większym o jeden).Icon: To pole zawiera nazwę pliku z ikoną
przeznaczoną do wykorzystania przez narzędzia
instalacyjne wyższego poziomu
(np. ``glint'' RedHat-a). Plik ten powinien być
zapisany w formacie GIF i znajdować się w
katalogu SOURCES.Source: This wiersz zawiera nazwę
pliku źródłowego z którego jest budowany dany rpm.
Jest to pomocne w sytuacji gdy chce się kiedyś
zajrzeć do odpowiednich kodów źródłowych lub
sprawdzić
czy nie ma ich nowszej wersji.
Uwaga: Nazwa pliku w tym wierszu MUSI
odpowiadać nazwie pliku obecnego w Twoim systemie.
(tzn. nie zmieniaj nazw plików źródłowych po
ich ściągnięciu). Można podać więcej niż jeden
plik źródłowy pisząc w poniższy sposób:
Source0: blah-0.tar.gz
Source1: blah-1.tar.gz
Source2: fooblah.tar.gz
Te pliki powinny się znaleźć w katalogu SOURCES.
(Struktura tego katalogu jest opisana w rozdziale
"Katalogi z plikami źródłowymi".)Patch: To pole zawiera miejsce w którym
będzie można znaleźć poprawki(patch) jeśli
zainstnieje potrzeba ich ponownego ściągnięcia.
Uwaga: Nazwa tego pliku musi odpowiadać nazwie pliku
jaki jest użyty do naniesienia Twoich poprawek.
Można też podać wiele plików z poprawkami analogicznie
do wielu plików źródłowych:
Patch0: blah-0.patch
Patch1: blah-1.patch
Patch2: fooblah.patch
Te pliki powinny się znaleźć w katalogu SOURCES.Copyright: Ten wiersz opisuje do jakiej
kategorii ze względu na prawo autorskie należy
dane oprogramowanie. Najlepiej
wykorzystać jedną z dobrze zdefiniowanych kategorii:
GPL, BSD, MIT, public domain, distributable,
lub commercial.BuildRoot: Ten wiersz pozwala zdefiniować
główny katalog (``root'') dla tworzenia i instalacji pakietu.
Można to wykorzystać np. do testowania instalacji pakietu
zanim się go zainstaluje w docelowym miejscu.Group: Ten wiersz służy do tego, by
programy instalacyjne wyższego poziomu (wspomniany
``glint'') wiedziały w jakim miejscu ich hierarchicznej
struktury grup pakietów umieścić dany pakiet.
W chwili obecnej drzewo grup pakietów wygląda
mniej więcej tak:
Applications
Communications
Editors
Emacs
Engineering
Spreadsheets
Databases
Graphics
Networking
Mail
Math
News
Publishing
TeX
Base
Kernel
Utilities
Archiving
Console
File
System
Terminal
Text
Daemons
Documentation
X11
XFree86
Servers
Applications
Graphics
Networking
Games
Strategy
Video
Amusements
Utilities
Libraries
Window Managers
Libraries
Networking
Admin
Daemons
News
Utilities
Development
Debuggers
Libraries
Libc
Languages
Fortran
Tcl
Building
Version Control
Tools
Shells
Games
%description Nie jest to element nagłówka
w ścisłym tego słowa znaczeniu ale jego opis powinien się znaleźć
wraz z opisem nagłówka. Dla każdego pakietu lub subpakietu
potrzebne jest jedno takie pole zawierające przejrzysty
i zrozumiały opis pakietu.
Jest to druga część pliku specyfikującego.
Używa się jej do przygotowania źródeł do kompilacji/instalacji.
W niej powinny znajdować się wszystkie czynności
niezbędne by nanieść poprawki do źródeł i doprowadzić
je do stanu w którym będzie można wydać komendę make.
Jedną rzecz należy podkreślić:
Każda z tych części jest tak naprawdę tylko miejscem
do umieszczenia odpowiednich skryptów.
Możesz po prostu napisać skrypt w sh
a następnie umieścić go po znaczniku %prep
by rozpakować i wprowadzić poprawki do swoich programów.
By to ułatwić powstały specjalne makra.
Pierwszym z nich jest makro %setup.
W swojej najprostszej formie
(bez dodatkowych opcji w linii poleceń),
rozpakowywuje ona źródła i zmienia bieżący katalog
na katalog zawierający źródła.
Poza tym ma jednak dodatkowe opcje:
-n name ustawi nazwę roboczego katalogu na name.
Domyślnie jest to $NAZWA-$WERSJA.
Do innych możliwości należą $NAZWA,
${NAZWA}${WERSJA},
czy jakakolwiek inna używana przez główny plik tar.
(Proszę zauważyć, że zmienne ``$'' nie
są faktycznymi zmiennymi dostępnymi wewnątrz pliku
specyfikującego. W rzeczywistości są one tutaj użyte
w miejsce przykładowej nazwy. W pakiecie należy użyć
rzeczywistej nazwy i wersji, a nie zmiennej.)-c utworzy i wejdzie do
wymienionego katalogu zanim zacznie się rozpakowywanie
poprzez untar.-b # wykona untar (rozpakuje) Source# zanim wejdzie do katalogu roboczego
(nie ma sensu łączenie tej opcji z -c, a więc się tego nie robi).
Jest to przydatne w przypadku wielu plików
źródłowych.-a # wykona untar (rozpakuje) Source# po wejściu do katalogu.-T Ta opcja zmienia domyślną procedurę
rozpakowywania (untar) źródeł i wymaga -b 0 lub
-a 0 by główny plik źródłowy został rozpakowany (untar).
Komenda ta jest potrzebna gdy używany jest więcej niż jeden
komplet plików źródłowych.-D Nie usuwaj katalogu przed
rozpakowaniem.
Jest ona przydatna tylko wtedy, gdy ma się więcej niż
jedno makro konfiguracyjne.
Powinna być używana wyłącznie w makrach konfiguracyjnych
wyłącznie po wykonaniu pierwszego z nich
(ale nigdy węwnątrz pierwszego z nich).Następne dostępne makra znajdują się w makrze %patch.
Makro te pomaga zautomatyzować proces nanoszenie poprawek
do źródeł.
Możliwe są liczne opcje opisane poniżej:
# zastosuje Patch#
jako plik z poprawkami.-p # podaje liczbę katalogów
do odrzucenia z nazwy przed wykorzystaniem polecenia patch(1)-P Domyślnie stosowana jest
Patch (lub
Patch0). Ta flaga wyłącza to zachowanie a więc wymaga
dodatkowo 0 by główne pliki źródłowe zostały
rozpakowane. Opcja ta
jest przydatna w drugim (bądź dalszym) makrze
%patch które wymaga innego niż pierwsze makro
numeru poprawki.%patch#
zamiast : %patch # -PTo są wszystkie makra jakich potrzebujesz. Po ich poprawnym
napisaniu można wykonać dowolne inne komendy konfiguracyjne
poprzez stworzenie odpowiednich fragmentów skryptów w sh.
Wszystko co zostanie umieszczone aż do makra %build
(omawianego w następnym rozdziale) będzie wykonane przez sh.
Przykłady powyżej mogą sugerować rzeczy jakie chciałbyś
tam umieścić.
Dla tej sekcji nie ma jakichś specjalnych makr.
Powinno się w niej umieszczać dowolne polecenia
potrzebne do stworzenia pakietu po rozpakowaniu
źródeł, naniesieniu poprawek i przejściu do katalogu
roboczego. Jest to po prostu następny zbiór poleceń
przekazany do sh, więc można tu używać
dowolnych poprawnych poleceń sh (włącznie z komentarzami).
Katalog roboczy na początku każdej z sekcji jest
ustawiany na katalog główny z plikami źródłowymi,
o czym trzeba pamiętać i w razie potrzeby przechodzić
do odpowiednich podkatalogów.
Tu również nie ma jakichś specjalnych makr. Sekcja
ta powinna zawierać listę poleceń potrzebnych
do instalacji pakietu. Jeśli wykonujesz
make install by zainstalować pakiet, umieść to tu.
Możesz również nanieść poprawki do makefile'a zanim
wykonasz make install. Jeśli nie to umieść tu sekwencję
poleceń sh jakich potrzebujesz. Katalog roboczy,
identycznie jak w poprzednim przypadku, jest ustawiany
przed wykonaniem tych poleceń na główny katalog z plikami
źródłowymi.
Możesz tu umieścić skrypty do wykonania przed i po
instalacji/deinstalacji (tzn. sekcjami Install/Uninstall).
Główny powód to np. potrzeba wykonania komendy ldconfig
po instalacji bądź usuwaniu pakietów zawierających biblioteki
dzielone. Makra są zdefiniowane jak poniżej:
%pre
makro z poleceniami wykonywanymi przed sekcją Install.%post
makro z poleceniami wykonywanymi po sekcji Install.%preun
makro z poleceniami wykonywanymi przed sekcją Uninstall.%postun
makro z poleceniami wykonywanymi po sekcji Uninstall.Sekcje te mogą zawierać dowolne poprawne polecenia sh
( nie potrzebujesz wstawiać #!/bin/sh
na początku).
W sekcji tej musisz wypisać pliki jakie wchodzą
w skład pakietu. RPM nie potrafi określić jakie pliki
zostają zainstalowan na skutek np. make install.
Tego się po prostu NIE DA rozsądnie zrobić.
Owszem, była propozycja wykonywania polecenia find
przed i po instalacji pakietu. Jednak w systemach
wieloużytkownikowych nie jest to zbyt sensowne gdyż
w tym samym czasie mogło powstać wiele innych plików nie
mających najmniejszego związku z instalowanym pakietem.
W tej sekcji dostępne jest pare specjalnych makr. Są one opisane poniżej:
%doc służy do zaznaczenia które pliki
pakietu są jego dokumentacją. Dokumentacja ta zostanie
umieszczona w katalogu:
/usr/doc/$NAZWA-$WERSJA-$MODYFIKACJA.
Można zarówno podać nazwy kilku plików w linii zawierającej
to makro jak i podać te nazwy oddzielnie używając makra
dla każdej z nich.%config służy do zaznaczenia plików
konfiguracyjnych w obrębie pakietu. Chodzi tu o pliki typu:
sendmail.cf, passwd, etc. W trakcie deinstalacji pliki
te są usuwane o ile nie były zmieniane. Jeśli były,
to ich nazwa zostaje zmieniona poprzez dodanie końcówki
.rpmsave.
Analogicznie jak dla plików z dokumentacją jedno makro
może służyć do zdefiniowania kilku takich plików.%dir zaznacza dany katalog jako
należący do pakietu. Domyślnie, jeśli pojawi się
nazwa katalogu BEZ makra %dir, WSZYSTKO
w tym katalogu jest włączane w liste plików i następnie instalowane jako część pakietu. To makro pozwala tego uniknąć.%files -f <filename> pozwala
na włączenie listy plików znajdującej się w jakimś
pliku w obrębie katalogu z plikami źródłowymi.
Jest to wygodne gdy procedura instalacji buduje
własną listę plików którą następnie można włączyć jedną komendą
bez podawania nazw tych plików. Największą trudnością w liście plików jest podawanie
katalagów. Jeśli np. podasz przez pomyłkę
/usr/bin, to Twój pakiet rpm będzie zawierał
wszystkie pliki w katalogu /usr/bin
w Twoim komputerze.
Jedną z podstawowych rzeczy jest poprawnie skonfigurowane
katalogów w których RPM będzie budował pakiet.
Robi się to poprzez plik /etc/rpmrc.
Większość osób używa po prostu /usr/src.
Możliwe, że będziesz potrzebował utworzyć poniższe katalogi:
BUILD jest katalogiem w którym RPM buduje pakiet.
Próbne tworzenie pakietu możesz wykonać w jakimkolwiek
katalogu który tu podasz.SOURCES jest katalogiem w którym powinieneś umieścić
oryginalne pliki źródłowe i pliki z poprawkami. Jest to miejsce
do którego RPM będzie zaglądał domyślnie.SPECS jest katalogiem w którym powinny się znaleźć
wszystkie pliki specyfikujące (spec).RPMS RPM umieści tu binarme pliki RPM
po ich zbudowaniu.SRPMS RPM umieści to pliki RPM z plikami źródłowymi.
Pierwszą rzeczą do zroienia jest doprowadzenie plików źródłowych
do takiego stanu by kompilowały i/lub instalowały się
bez pomocy RPM-a. By to osiągnąć, rozpakuj źródła
i zmień nazwę katalogu na $NAZWA.orig.
Następnie ponownie rozpakuj źródła i pracuj na nich.
Wejdź do ich katalogu i postępuj zgodnie z instrukcjia
ich instalacji/kompilacji. Jeśli będzie konieczna edycja
jakichś plików to konieczne będzie wygenerowanie
pliku z poprawkami (patch).
Jeśli doprowadzisz źródła do stanu w którym będą się
poprawnie instalować/kompilować - wyczyść katalog źródłowy.
Upewnij się, że wszystkie pliki stworzone w skrypcie
konfiguracyjnym (configure) zostały usunięte.
Następnie wyjdź z katalogu źródłowego i wykonaj coś
takiego:
diff -uNr dirname.orig dirname > ../SOURCES/dirname-linux.patch
(dirname w tym przykładzie to to samo co $NAZWA
parę linii powyżej).
Polecenie to stworzy plik z poprawkami jaki będzie
mógł być wykorzystany w pliku specyfikujący.
Zauważ, że ``linux'' w nazwie pliku z poprawkami
jest jakimś wybranym identyfikatorem.
Zamiast tego można użyć czegoś bardziej precyzyjnego
jak np. ``config'' lub ``bugs'' (błędy) by opisać dlaczego
poprawki były potrzebne.
Przed użyciem pliku z poprawkami warto do niego zajrzeć
by się upewnić, że przypadkiem nie znalazło się w nim coś
niewłaściwego jak np. pliki binarne.
Teraz, gdy źródła się kompilują i instalują i wiadomo jak to robić to zrób to, skompiluj i zainstaluj. Przyjrzyj się wynikowi instalacji i stwórz w ten sposób listę plików do użycia w pliku specyfikującym. Zazwyczaj plik specyfikujący powstaje równocześnie z opisywanymi tu krokami. Po prostu tworzy się go na początku wstawiając to co jest znane i potem w miarę postępu prac uzypełnia się go o brakujące kawałki.
Gdy plik specyfikujący jest gotowy, można już próbować tworzyć nowy pakiet. Najwygodniej jest to zrobić poniższym poleceniem:
rpm -ba foobar-1.0.spec
Opcja -b ma parę interesującyh podopcji:
p oznacza wykonanie sekcji prep pliku
specyfikującego. l wykona parę różnych testów na plikach
%files. c wykonaj sekcję prep i kompiluj.
Jest to przydatne gdy jest się niepewnym czy źródła
w ogóle będą się kompilować/instalować. Owszem,
na pierwszy rzut oka może to wyglądać na zbędne
gdyż można dotąd pracować ze źródłami aż będą się
kompilować jednak gdy przyzwyczaisz się
do wykorzystania RPM-a to spotkasz się z sytuacjami w
którach ta opcja okaże się przydatna.i wykonaj prep, kompiluj i instaluj.b prep, kompiluj, instaluj, i buduj jedynie
pakiet binarny. a zbuduj wszystko - zarówno pakiet źródłowy jak i binarny.-b:
--short-circuit przejdzie prosto do
określonego etapu (może być użyte wyłącznie z c oraz i)--clean usuwa katalog ze źródłami stworzony
w czasie budowania pakietu.--keep-temps zachowa wszystkie pliki
temporalne i skrypty które zostały umieszczone
w /tmp. Jakie są to pliki można się dowiedzieć
wykorzystując opcję -v.--test nie wykonuje żadnych rzeczywistych
etapów choć wykonuje keep-temps.
Po stworzeniu pakietu rpm źródłowego i binarnego należy je przetestować. Najprościej i najlepiej jest wykorzystać do tego zupełnie inny komputer niż ten na którym pakiet był tworzony. W końcu przy tworzeniu pakietu był on dość często instalowany i na komputerze na którym powstawał powinno być to zrobione dość dobrze.
Można też próbować rpm -u nazwapakietu.rpm
na testowanym pakiecie ale może być to zdradliwe w sytuacji
w której jakieś pliki zostały pominięte w liście plików
i nie zostaną wtedy usunięte.
Wtedy zainstalowany program będzie kompletny mimo tego,
że rpm będzie błędny. Pamiętaj, że ponieważ Ty już
zrobiłeś rpm -ba package, to zdecydowana większość
osób instalujących Twój pakiet wykona jedynie
rpm -i package. Upewnij się, że nie wykonujesz
w sekcjach build lub install
czegoś co powinno być zrobione gdy instalowany
jest wyłącznie pakiet binarny.
Gdy już stworzyłeś swój własny pakiet RPM (zakładając, że nie ma już takiego pakietu dostępnego pod postacią RPM) możesz udostępnić wynik swojej pracy innym (zakładając że to czego pakiet stworzyłeś może być tak udostępniane). By udostępnić, umieść to na ftp.redhat.com.
Prosimy sprawdzić się, że nic nie zostało pominięte jeszcze raz czytając rozdziały o "Testowaniu" i "Co robić z nowymi RPM-ami". Chcemy mieć jako RPM wszystko co się da ale chcemy, żeby były to dobre RPM-y. Prosimy więc poświęcić trochę czasu na ich dokładne przetestowanie i prosimy też o umieszczenie ich w archiwum ftp tak, by każdy mógł z nich skorzystać. A także, prosimy upewnić się, że umieszczasz jedynie bezpłatne oprogramowanie. Oprogramowanie komercyjne i shareware nie powinno być umieszczane w archiwum o ile nie zawierają klauzuli w ich prawach autorskich to dopuszczającej. Dotyczy to np. Netscape, ssh, pgp, etc.
RPM może być wykorzystywany do tworzenia pakietów
dla Intel i386, Digital Alpha pracujących pod Linux,
oraz Sparc. Są też doniesienia o jego wykorzystaniu
na platformach SGI i HP.
RPM ma parę cech które czynią tworzenie pakietów na
wiele platform prostszymi.
Pierwszą z nich jest dyrektywa ``optflags''
w pliku /etc/rpmrc.
Może ona być wykorzystana do ustawienia odpowiednich
opcji i flag, specyficznych dla architektury,
potrzebnych do kompilacji bądź instalacji.
Następną cechą ułatwiającą tworzenie pakietów na wiele
platform są makra ``arch'' w pliku specyfikującym.
Mogą one być wykorzystane do wykonania różnych
rzeczy zależnych od architektury na której pakiet
jest instalowany. Następną taką cechą jest
dyrektywa ``Exclude'' w nagłówku.
Poniżej zamieszczona jest część pliku specyfikującego dla pakietu ``fileutils''. Jest on przygotowany do instalacji na dwóch platformach: Alfach i Intelu.
Summary: GNU File Utilities
Name: fileutils
Version: 3.16
Release: 1
Copyright: GPL
Group: Utilities/File
Source0: prep.ai.mit.edu:/pub/gnu/fileutils-3.16.tar.gz
Source1: DIR_COLORS
Patch: fileutils-3.16-mktime.patch
%description
These are the GNU file management utilities. It includes
programs
to copy, move, list, etc, files.
The ls program in this package now incorporates color ls!
%prep
%setup
%ifarch alpha
%patch -p1
autoconf
%endif
%build
configure --prefix=/usr --exec-prefix=/
make CFLAGS="$RPM_OPT_FLAGS" LDFLAGS=-s
%install
rm -f /usr/info/fileutils*
make install
gzip -9nf /usr/info/fileutils*
.
.
.
W powyższym przykładzie przedstawione zostało użycie
dyrektywy ``optflags'' z /etc/rpmrc.
RPM_OPT_FLAGS przyjmują odpowiednią wartość
w zależności od tego na jakiej platformie instalowany
jest pakiet. Do pliku Makefile użytego w pakiecie
należy nanieść poprawki by korzystał z tej zmiennej
zamiast standardowych opcji (np. -m486 lub -O2).
Możesz się zorientować co powinno być zrobione
poprzez zainstalowanie pakietu źródłowego,
jego rozpakowanie i przyjrzenie się plikowi Makefile.
Następnie należy zajrzeć do plików z poprawkami
dla pliku Makefile i sprawdzić jakie zmiany powinny być
wprowadzone.
Makro %ifarch jest bardzo istotne dla tworzenia
pakietów na wiele architektur.
W większości przypadków potrzebujesz nanieść jedną
lub dwie poprawki specyficzne tylko dla jednej, konkretnej
architektury. W takiej sytacji RPM pozwala na
naniesienie poprawki wyłącznie dla niej.
W powyższym przypadku, pakiet fileutils ma poprawkę
dla maszyn 64-bitowych.
To naturalnie w chwili obecnej stosuje się tylko do Alf.
Tak więc dodajemy makro %ifarch
nanoszące odpowiednią poprawkę:
%ifarch axp
%patch1 -p1
%endif
To zapewni, że poprawka nie będzie naniesiona
na żadnej innej architekturze a wyłącznie na alfach.
Można opiekować się źródłowymi RPM-ami w jednym katalogu dla wszystkich platform. Uzyskuje się to poprzez ``wyłączenie'' (ang. exclude) pewnych pakietów z tworzenia ich dla pewnych architektur, tak, że ciągle możliwym jest:
rpm --rebuild /usr/src/SRPMS/*.rpm
dające w wyniku poprawne pakiety. Jeśli aplikacja nie została
jeszcze do tej pory przeniesiona na daną platformę to wystarczy
dodać wiersz wygladający mniej więcej tak:
ExcludeArch: axp
do nagłówka pliku specyfikującego pakiet źródłowy.
Następnie przebuduj pakiet na platformę na której
już pracuje. W ten sposób uzyskuje się pakiet,
który kompiluje się/tworzy się np. na Intel-u
podczas gdy może być łatwo opuszczony na Alfie.
Wykorzystanie RPM to tworzenia pakietów przeznaczonych na wiele platform jest zazwyczaj prostsze niż doprowadzenie pakietu do stanu w którym daję się on na nich zainstalować. Jednakże w miarę jak powstaje więcej i więcej pakietów w postaci binarnej staje się to coraz prostsze. Jeśli przy tworzeniu pakietu zabrniesz w ślepą uliczkę to jak zwykle, rozwiązaniem może być zajrzenie do kodu źródłowego podobnego pakietu.
Poniższy dokument i jego zawartość są chronione prawem autorskim. Rozpowszechnianie go i jego zawartości jest dozwolone tak długo jak długo jego pozostają one nie zmienione. Innymi słowy można go wyłącznie przeformatowywać, drukować i rozpowszechniać.
doc-linux-pl-2002.06.14.orig/html/SMB-HOWTO.pl.html 0100664 0001750 0001750 00000146673 06770264140 020203 0 ustar coven coven
Jest to dokument z serii HOWTO (Jak To Zrobić). Opisuje on jak używać w Linuksie Server Message Protocol, zwanego też Session Message Block, NetBIOS lub LanManager. Dokument ten skupia się na Linuksie, jednak Samba działa na większości systemów uniksowych.
Dokument ten jest prowadzony przez Davida Wooda dwood@plugged.net.au. Wszelkie dodatki, modyfikacje lub poprawki mogą być przesłane do mnie, aby je później umieścić w następnej wersji.
O wiele więcej dokumentacji znajduje się na stronie WWW Samby pod adresem www.samba.org. Możesz także korzystać z grupy dyskusyjnej comp.protocols.smb lub polskojęzycznej pl.comp.os.linux.sieci.
Protokół SMB używany jest przez Microsoft Windows 3.11, NT i 95/98 aby współdzielić zasoby dyskowe i drukarki. Maszyny Unix-owe (w tym także Linux) mogą korzystać z tych zasobów używając narzędzi stworzonych przez Andrew Tridgella. Przy pomocy narzędzi smbfs autorstwa Paal-Kr. Engstad (pke@engstad.ingok.hitos.no), Volker Lendecke (lendecke@namu01.gwdg.de) maszyny uniksowe mogą montować zasoby udostępniane z Windows.
Są cztery rzeczy, które można zrobić Sambą:
Wszystko to zostało opisane w tym dokumencie.
Zrzeczenie. Procedury i skrypty albo działały u autora, albo zostały opisane jako działające przez tych, którzy je napisali. Różne konfiguracje mogą nie działać z podanymi tutaj informacjami. Jeśli odkryjesz taką sytuację możesz napisać do autora list z sugestią na ulepszenie tego dokumentu, ale autor nic nie gwarantuje. A czego się spodziewałeś ? W końcu autor jest tyklo konsultantem.
Aby maszyny z systemami Windows 3.x mogły korzystać z SMB muszą mieć zainstalowany stos TCP/IP i DLL Win32. Oba te pakiety są dostępne na stronie WWW Microsoftu ( www.microsoft.com).
Dokument ten jest próbą opisania jak skonfigurować na Linux-ie podstawowe serwisy SMB związane z plikami i drukarkami. Samba jest bardzo złożonym i kompletnym pakietem. Nie ma sensu, żeby kopiować tutaj wszystko to co jest zawarte w dokumentacji dla tego pakietu.
Dalszych informacji możesz szukać w:
Po pierwsz, aby używać Samby wszystkie twoje maszyny muszą byc w jednym segmencie sieci lokalnej i korzystać z protokołu TCP/IP. Samba nie będzie działać na innych protokołach. Jest to łatwe do osiągnięcia ponieważ Linux i Windows 95/98/NT są dostarczane z tym protokołem. Jednak jeśli używasz Windows 3.x, to będziesz musiał dodać obsługę tego protokołu.
Z usług SMB nie można korzystać poprzez routery. Jeśli chcesz takie coś zrobić, to musisz ustawić tunel IP, co jest poza tematyką tego HOWTO.
Najświeższe źródła Samby dostępne są pod adresem
ftp.icm.edu.pl w katalogu /pub/samba. Oryginalny
adres to
ftp.samba.org.
Jeśli instalowałeś dystrybucję Red Hat mogłeś wybrać instalację Samby jako jedną z opcji. Niektóre inne dystrybycje też oferują binaria Samby.
Następujące demony są wymagane do pracy z Sambą. Zwykle znajdują
się one w katalogu /usr/sbin i są uruchamiane w momencie startu
systemu albo przez demon inetd. Przykładowe skrypt
znajdują się w sekcji
Uruchamianie demonów.
smbd (Demon SMB) i nmbd (Świadczy usługi nameservera NetBIOS-u)
Zauważ, że serwis nazw oferowany przez demona nmbd różni się od tego oferowanego przez DNS (serwis nazw domen). Serwis nazw NetBIOS, to serwis nazw w stylu Windows używany do SMB. Innymi słowy, to że masz DNS nie oznacza, że Samba będzie umiała odczytywać nazwy komputerów.
Zwykle w systemie instalowane są następujące binaraia w katalogu /usr/bin:
smbclient (Klient dla maszyn Unix-owych), smbprint (skrypt do drukowania na drukarce przyłączonej do hosta SMB), smbprint.sysv (To samo co wcześniej, ale dla systemu UNIX SVR4), smbstatus (Wyświetla bieżące połączenia SMB na lokalnym hoście), smbrun (Główny skrypt do uruchamiania aplikacji na hoście SMB)
Binaria do obsługi systemu plików (smbfs) omówione są w dalszej części dokumentu.
Dodatkowo zawarty jest w tym dokumencie skrypt o nazwie "print", który jest pożytecznym dokończeniem skryptu smbprint.
Pakiet Samba jest prosty w instalacji. Ściągnij go z podanego wcześniej miejsca i przeczytaj plik README znajdujący się w dystrybucji. Jest jeszcze plik docs/INSTALL.txt, który podaje krok po kroku co należy zrobić, aby zainstalować Sambę.
Postępując wraz z instalacją, umieść demony w /usr/sbin i binaria w /usr/bin. Zainstaluj strony do podręcznika systemowego "man" w /usr/local/man.
Kiedy będziesz instalował pakiet Samba, będziesz musiał podać
miejsce, gdzie ma się znajdować plik konfiguracyjny smb.conf.
Z reguły jest to katalog /etc, ale możesz go umieścić, gdzie ci
się podoba. Dla dalszych instrukcji założymy, że plik
konfiguracyjny umieściłeś w /etc, plik logujący to
/var/log/samba-log.%m i katalog blokujący to /var/lock/samba.
Zainstaluj plik konfiguracyjny smb.conf. Przejdź do katalogu,
gdzie została skompilowana Samba. Zajrzyj do katalogu
examples/simple i przeczytaj plik README. Skopiuj
znaleziony tam plik smb.conf do /etc. OSTROŻNIE !!!
Jeśli masz dystrybucję Linux-a, która miała Sambę i zainstalowałeś
ją to pewnie masz już plik smb.conf w katalogu /etc i lepiej
zacznij od tego pliku.
Jeśli nie chcesz umieszczać pliku konfiguracyjnego w /etc, to
umieść go tam, gdzie chcesz i zrób symboliczne dołączenie:
ln -s /gdzie/jest/smb.conf /etc/smb.conf
Dwoma demonami SMB są: /usr/sbin/smbd i /usr/sbin/nmbd.
Możesz je uruchomić przez demona inetd lub jako osobne
procesy. Samba będzie odpowiadać trochę szybciej jeśli jest
uruchomiona jako osobny demon niż z inetd.
W obu przypadkach powinieneś sprawdzić czy w pliku
/etc/services znajdują się takie linie:
netbios-ns 137/tcp nbns
netbios-ns 137/udp nbns
netbios-dgm 138/tcp nbdgm
netbios-dgm 138/udp nbdgm
netbios-ssn 139/tcp nbssn
Upewnij się, że wszystkie są odkomentowane. W zależności od dystrybucji, możliwe, że będziesz musiał je dodać. Samba nie będzie w stanie dowiązać się do odpowiednich portów jeśli w tym pliku nie znajdą się powyższe linie.
Aby uruchomić demony przez inetd umieść następujące linie w
pliku /etc/inetd.conf:
Serwis NetBIOS dla Samby
# netbios-ssn
stream tcp nowait root /usr/sbin/smbd smbd netbios-ns dgram udp wait
root /usr/sbin/nmbd nmbd
Następnie wyślij sygnał HUP do procesu nr 1:
kill -HUP 1 `cat /var/run/inetd.pid`
Dla użytkowników dystrybucji Red Hat.
Aby uruchomić te demony ze skryptów startowych, umieść następujący
skrypt w katalogu /etc/rc.d/init.d/smb i dołącz je
symbolicznie do plików podanych w komentarzu:
#!bin/sh
#
# /etc/rc.d/init.d/smb - startuje i zatrzymuje serwis SMB
#
# Następujące pliki powinny być symbolicznymi dołączeniami do
# tego pliku:
# /etc/rc.d/rc1.d/K35smb (Zatrzymuje serwis SMB podczas
# zamknięcia systemu.
# /etc/rc.d/rc3.d/S91smb (Startuje serwis SMB w trybie
# wieloużytkownikowym
# /etc/rc.d/rc6.d/K35smb (zatrzymuje serwis SMB podczas resetu)
#
# Biblioteka funkcji
etc/rc.d/init.d/functions
# Konfiguracja sieci
etc/sysconfig/network
# Sprawdź czy jesteśmy w sieci
[ ${NETWORKING} = "no" ] && exit 0
# Zobacz jak zostaliśmy wywołani
case "$1" in
start) echo -n "Starting SMB services: "
daemon smbd -D
daemon nmbd -D
echo touch /var/lock/subsys/smb
;;
stop) echo -n "Shutting down SMB services: "
killproc smbd
killproc nmbd
rm -f /var/lock/subsys/smb echo ""
;;
*) echo "Usage: smb {start|stop}" exit 1
esac
Od tłumacza:
Jeśli używasz dystrybucji Slackware.
Umieść poniższy fragment w skrypcie startowym /etc/rc.d/rc.local:
# czy jesteśmy w sieci
[ ${NETWORKING} = "no" ] && exit 0
# Uruchmon demony Samby
/usr/sbin/smbd -D
/usr/sbin/nmbd -D
Jeśli podczas startu Samby pojawi się błąd mówiący coś o niemożności dowiązania się do portu 139, to prawdpodobnie jest inny proces Samby jeszcz działąjący. Sprawdź listę procesów (poleceniem 'ps auxww | grep mbd'), żeby zobaczyć czy to prawda.
Konfiguracja Samby na Uniksie jest kontrolowana jednym plikiem:
/etc/smb.conf. W pliku tym umieszczasz zasoby jakie
chcesz udostępnić dla świata i jakie restrykcje chcesz wprowadzić.
Ponieważ ta sekcja opisuje udostępnianie dysków i drukarek Linux-owych Windowsom, plik smb.conf będzie najprostszym z możliwych.
Nie martw się o szczegóły. Późniejsze sekcje wprowadzą ogólny koncept.
Każda sekcja pliku zaczyna się od nazwy jak np.: [global], [homes], [printers] itp.
Sekcja [global] definiuje kilka ogólnych zmiennych, które będą się odnosić do wszystkich udostępnianych zasobów.
Sekcja [homes] pozwala użytkownikom na dostęp do ich (i tyklo ich) katalogów domowych na lokalnej maszynie Linux-owej. Jeśli jakiś użytkownik Windows będzie chciał skorzystać z udostępnianych zasobów, to zostanie podłączony do swojego katalogu domowego. Zauważ, że aby to zrobić użytkownik musi mieć swoje konto na maszynie Linux-owej.
Poniższy przykładowy plik smb.conf pozwala użytkownikom na dostęp do swoich katalogów domowych i na zapis do katalogu tymczasowego. Aby użytkownik Windows zobaczył udostępniane zasoby, Linux musi być w tej samej sieci lokalnej. Użytkownik Windows po prostu dołącza dysk sieciowy z Menedżera Plików lub Eksploratora Windows.
W następnych sekcjach będą dodawane kolejne linie do tego pliku, aby umożliwić dostęp do większej ilości zasobów.
etc/smb.conf
;
; Po wprowadzeniu zmian do tego pliku zrestartuj demony Samby
; kill -9 `pidof smbd`; kill -9 `pidof nmbd`
; /usr/sbin/smbd; /usr/sbin/nmbd
[global] Umieść to w pliku jeśli chcesz konto anonimowe guest account = nobody
log file = /var/log/samba-log.%m lock directory = /var/lock/samba share
modes = yes
[homes] comment = Katalogi Domowe browseable = no read only = no create
mode = 0750
[tmp] comment = Miejsce na pliki tymczasowe path = /tmp read only = no
public = yes
Po stworzeniu nowego pliku smb.conf dobrze jest zweryfikować
czy jest poprawny. Można to zrobić przy pomocy programu
testparm (informacje o nim znajdziesz na stronie podręcznika
systemowego). Jeśli program ten nie zgłosi żadnych błędów, to smbd
poprawnie załaduje ten plik.
Oto pewien trick: Jeśli twój serwer Samba ma więcej niż jeden interfejs ethernetowy, smbd może dołączyć się do złego. Jeśli tak się stanie, to możesz zmusić smbd do dowiązania się do dobrego przez dodanie do sekcji [global] poniższej linii:
interfaces = 192.168.1.1/24
Uwaga: Liczba po znaku '/' odnosi się do maski podsieci. "24" to wartość jaką należy użyć dla niepodzielonej klasy C. Więcej informacji okalkulacjach dotyczących podsieci znajdziesz pod adresem www.ziplink.net/~ralphb/IPSubnet/index.html.
Dostępne jest graficzne narzędzie konfiguracyjne do Samby: GtkSamba. Zerknij pod adres www.open-systems.com/gtksamba.html.
Jak widać na powyższym przykładzie udostępnianie dysków Linux-owych użytkownikom Windows jest proste. Dostęp do zasobów udostępnianych poprzez Sambę można w bardzo dużym stopniu kontrolować.
Aby udostępnić wszystkim jakieś zasoby, dodaj poniższe linie do smb.conf:
[public]
comment = Public Stuff path = /home/public public = yes writable = yes
printable = no
Aby umożliwić zapis do tego katalogu tylko dla członków grupy staff, zmodyfikuj te linie w następujący sposób:
[public]
comment = Public Stuff path = /home/public public = yes writable = yes
printable = no write list = @staff
Kiedyś było to bardzo proste: po prostu startowałeś Sambę i zasoby można było przeglądać z Windows na PC. Jednak Microsoft ostatnio trochę utrudnił życie korzystającym z Samby. Systemy Windows 98, Windows NT (z service pack 3 i nowszym) i ostatnie Windows 95 używają teraz standardowo kodowanych haseł. Samba natomiast korzysta domyślnie z niekodowanych haseł. Nie można przeglądać zasobów jeśli albo klient albo serwer używa kodowanych haseł ponieważ nie można połączyć się anonimowo.
Jeśli taki właśnie konflikt występuje u ciebie, to podczas próby połączenia się z zasobem powinieneś zobaczyć okienko z komunikatem: "You are not authorized to access that account from this machine".
Możesz skonfigurować albo Sambę do używania zakodowanych haseł, albo Windows do używani niekodowanych haseł.
Konfigurowanie Windows do używania kodowanych haseł Samby:
Windows 95/98
Używając edytora rejestrów (regedit) stwórz takie ustawienie: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\VNETSUP dodaj nową wartość DWORD: Value name: EnablePlainTextPassword Data: 0x01.
Windows NT
Używając edytora rejestrów (regedit) stwórz takie ustawienie: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rdr\Parameters, dodaj nową wartość DWORD: Value Name: EnablePlainTextPassword Data: 0x01.
Kiedy te zmiany zostaną zrobione, zresetuj komputer z Windows i spróbuj podłączyć się do jakiegoś zasobu z Samby. Powinno to działać o ile serwere Samby używa niekodowanych haseł
Konfigurowanie Samby do używania haseł kodowanych:
W sekcji [global] w pliku /etc/smb.conf dodaj
następujące linie:
encrypt passwords = yes
smb passwd file = /etc/smbpasswd
Zanim to zrobisz zachęcam mocno do przeczytania plików
ENCRYPTION.txt, Win95.txt i WinNT.txt w dokumentacji
do Samby.
Jeśli twoi klienci i serwer używają kodowanych haseł nie będziesz
mógł przeglądać zasobów serwera zanim nie zostanie zainicjowane
pierwsze połączenie z poprawną autentykacją. Aby to uczynić wpisz
ręcznie nazwę zasobu w Menedżerze Plików lub Eksplorerze w postaci
\\<nazwa serwera>\<nazwa zasobu>. Zaloguj się z
poprawnym loginem i hasłem na tym serwerze.
Jeśli podejrzewasz, że serwis nazwa NetBIOS jest źle skonfigurowany
(może dlatego, że pojawiają się błędy "host not found"
podczas połączenia), to spróbuj użyć tylko adresu IP serwera
\\<IP serwera>\<nazwa zasobu>.
Żeby nazwy plików pojawiały się poprawnie możliwe, że musisz dodać kilka ustawień do odpowiedniej sekcji zasobu. Poniższe działa poprawnie dla Windows 95/98/NT, ale możliwe, że trzeba te ustawienia zmodyfikować w przypadku Windows 3.x:
; Mangle case = yes zdaje się podawać poprawne nazwy
; dla Win 95/98
mangle case = yes
; Czy rozróżniać duże i małe litery
case sensitive = no
; Domyślna wielkość liter przy tworzeniu plików
default case = lower
; Zachowaj ustawienia dot. liter dla wszystkich plików
preserve case = yes
; Zachowaj ustawienia dor. liter dla nazwa dos-owych (8.3)
short preserve case = no
Więcej informacji na temat różnych sposobów udostępniania zasobów znajdziesz w dokumentacji do Samby. Możliwości konfiguracji Samby są o wiele większe niż pokazane tutaj. Na początek jednak wystarczy. Jeśli chcesz zrobić coś bardziej zaawansowanego, to zajrzyj na wspomnianą wcześniej stronę WWW Samby.
Wraz z dystrybucją Samby otrzymujemy klienta dla Unix-ów. Jego interfejs poleceń jest podobny do ftp. Możesz go używać, aby przenosić pliki między Windowsowym "serwerem" a klientem Linux-owym.
Aby zobaczyć jakie zasoby sa udostępnione na danym hoście napisz:
/usr/sbin/smbclient -L host
gdzie host jest nazwą maszyny, której zasoby chcesz zobaczyć. Polecenie to zwróci listę nazw serwisów - to znaczy nazw dysków lub drukarek, które może udostępnić. Serwer Samby będzie cię pytał o hasło, o ile nie ma skonfigurowanego bezpiecznego dostępu.
Np.
smbclient -L zimmermann
Polecenie to powinno wyświetlić coś na kształt:
Server time is Sat Aug 10 15:58:27 1996 Timezone is UTC+10.0
Password: Domain=[WORKGROUP] OS=[Windows NT 3.51] Server=[NT LAN Manager 3.51]
Server=[ZIMMERMAN] User=[] Workgroup=[WORKGROUP] Domain=[]
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Remote Admin public Disk Public C$ Disk
Default share IPC$ IPC Remote IPC OReilly Printer OReilly print$
Disk Printer Drivers
This machine has a browse list:
Server Comment
--------- -------
HOPPER Samba 1.9.15p8 KERNIGAN Samba 1.9.15p8 LOVELACE
Samba 1.9.15p8 RITCHIE Samba 1.9.15p8 ZIMMERMAN
Browse list pokazuje inne serwery SMB udostępniające zasoby w sieci.
Aby użyć klienta napisz:
/usr/sbin/smbclient serwis <hasło>
gdzie serwis jest nazwą maszyny i zasobu. Na przykład jeśli próbujesz dostać się do katalogu, który jest udostępniany jako public na maszynie o nazwie zimmermann, serwisem byłoby: \\zimmerman\public. Chociaż z powodu powłoki w Linux-ie będziesz musiał oznaczyć znaki \ specjalnie i polecenie ostatecznie wygląda tak:
usr/sbin/smbclient \\\\zimmerman\\public hasło
gdzie hasło jest łańcuchem znaków będącym twoim hasłem.
Pojawi się wtedy znak zachęty klienta Samby:
Server time is Sat Aug 10 15:58:44 1996 Timezone is UTC+10.0
Domain=[WORKGROUP] OS=[Windows NT 3.51] Server=[NT LAN Manager
3.51] smb: \>
Napisz 'h', aby uzyskać pomoc:
smb: \> h ls dir lcd cd pwd get mget put mput rename more mask del rm
mkdir md rmdir rd prompt recurse translate lowercase print printmode
queue cancel stat quit q exit newer archive tar blocksize tarmode
setmode help ? ! smb: \>
Jeśli umiesz używać ftp, to nie powinieneś potrzebować czytać podręcznika systemowego na temat smbclient.
smbclient może być dobry do testowania jednak szybko może się znudzić w codziennej pracy. Będziesz pewnie chciał używać pakietu smbfs. Zawarte są tam dwa proste narzędzia: smbmount i smbumount. Działają dokładnie tak samo jak linuksowe polecenia mount i umount z tym, że operują na zasobach SMB.
Pakiet smbfs jest zawarty w większości dystrybucji Linuksa. Jedna ważna uwaga: Musisz mieć wkompilowaną w jądro obsługę systemu plików SMB (smbfs), aby móc używać tych narzędzi!
Aby udostepnić drukarkę Linux-ową Windowsom musisz się upewnić, że drukarka działa dobrze pod Linux-em. Jeśli możesz drukować spod Linux-a to ustawienie serwera SMB dla drukarki jest bardzo proste.
Przeczytaj Priniting-HOWTO na temat ustawienia drukarki pod Linux-em.
Ponieważ autor używa drukarki połączonej z Windows NT (bardzo dawno temu - zanim nasza sieć została całkiem przeniesiona na Linuksa), sekcja ta nie powinna być brana za definicję, ale bardziej jako sugestia. Jeśli ktokolwiek ma ochotę się podzielić szczegółami na temat innych konfiguracji proszę o kontakt, aby ta sekcja mogła zostać skończona: dwood@plugged.net.au.
Dodaj konfigurację na temat drukowania do smb.conf:
[global]
printing = bsd printcap name = /etc/printcap load printers = yes
log file = /var/log/samba-log.%m lock directory = /var/lock/samba
[printers] comment = Wszystkie drukarki security = server path = /var/spool/lpd/lp
browseable = no printable = yes public = yes writable = no
create mode = 0700
[ljet] security = server path = /var/spool/lpd/lp printer name = lp
writable = yes public = yes printable = yes
print command = lpr -r -h -P %p %s
Upewnij się, że ścieżka do drukarki (w tym wypadku w sekcji ]ljet[)
jest taka sama jak katalog zadań w etc/printcap.
Linie:
printcap name = /etc/printcap
load printers = yes
decydują czy wszystkie drukarki zdefiniowane w
/etc/printcap powinny być załadowane. Jeśli to zrobisz, to
nie ma sensu konfigurować drukarek indywidualnie. Sekcja
[printers] określa ustawienia dla drukarek, które chcesz
wyraźnie zdefiniować. Jeśli twój system drukowania nie działa w ten
sposób (BSD), to musisz skonfigurować fałszywy plik konfiguracyjny
dla drukarek (albo użyć techniki z poleceniem 'print'; zobacz
dalej). Więcej informacji na temat drukowania znajdziesz w
Printing-HOWTO.
Pożyteczną techniką testowania połączenia sieciowego jest zmiana polecenia print na:
print command = cp %S /tmp/print.%P.%S
Można potem przeanalizować plik wynikowy.
UWAGA: Są pewne problemy przy udostępnianiu drukarki Unixowej
przez Sambę komputerom z Windows NT. Jeden problem to taki, żeby
NT widziało poprawnie drukarkę. Aby go zlikwidować przeczytaj plik
docs/WinNT.txt, który jest dostarczany wraz z
dystrybucją. Drugi problem to hasła. Przeczytaj ten sam plik, aby
rozwiązać ten problem.
Oleg L. Machulskiy (machulsk@shade.msu.ru) proponuje, że lepszym poleceniem byłoby:
print command = smb2ps %s | lpr -r -h -P %p
gdzie smb2ps to skrypt zamieniający plik otrzymany z Windows na bardziej użyteczny PostScript. Musi on odciąć pierwsze 3 linie i ostatnie dwie ponieważ te linie zawierają pewne kody PJL lub PCL.
Takie podejście jest potrzbne tylko wtedy jeśli Windows u ciebie drukuje PCL a nie prawdziwy PostScript. Dowiedziałem się, że Windows 95/98/NT nie posiadają same z siebie sterownika do PostScriptu, ale sterownik "Digital turbo Printserver 20" jest dobrym zamiennikiem takiego w większości przypadków. Słyszałem także, że sterownik "Apple LaserWriter II NTX" działa dobrze.
Jeff Stern (jstern@eclectic.ss.uci.edu) zgłosił coś takiego, co może niektórym z was pomóc:
--------------------------%<----------------------------------
Mój problem polegał na tym, że mogłem drukować na drukarce z samego
Linuksa, ale nie mogłem drukować na niej z Windows 95. Kiedy
próbowałem polecenia smbclient \\eclectic\belen -P i potem
próbowałem wydrukować plik pojawiały się komunikaty o braku
dostępu (access denied). Tak więc ustawiłem dla katalogu
/var/spool/lpd/lp1 atrybuty 777. Przykro mi, ale musiałem
to zrobić. Mogłem też wszystkich użytkowików zapisać do grupy 'lp'
i ustawić takie prawa dla tej grupy, albo zmienić właściciela
grupowego katalogu na 'users' ... . Ale jak na razie to działa z
prawami root:lp 777.
Inną rzeczą jaką administratorzy muszą wiedzieć, to fakt, że nazwa konta,z którego użytkownik próbuje drukować z Windows, musi istnieć także na Linuksie. I tak: jeśli na Windows jest użytkownik 'joe', ti na Linuksie musi być też użytkownik 'joe'. Hasło logowania użytkownika 'joe' będzie hasłem dostępu do drukarki na Linuksie. Użytkownik będzie zapytano o to hasło podczas dodawania drukarki sieciowej do swojego komputera.
Myślałem, że to nie będzie problemem u mnie, bo ustawiłem swoją
drukarkę jako 'public' (ogólnie dostępną) w /etc/smb.conf.
Ale jednak wciąż jest pytanie o hasło. Windows nie daje niestety
możliwości podania innego loginu dla drukarki zdalnej. Używa po
prostu tego, którym zalogowałeś się do Windows.
--------------------------%<----------------------------------
Dr. Michael Langner (langner@fiz-chemie.de) wskazuje, że problemu z
prawami dostępu dla katalogu /var/spool/lpd/ można uniknąć
przez użycie takich ustawień:
path = /tmp print command = lpr -r -P%p %s
Czasami pojawi się błąd podczas przetwarzania PostScriptu z Windows, który powoduje wydrukowanie dodatkowej strony na końcu każdego zadania. Na początku każdej takiej strony znajduje się ''"%%[ Lastpage ]%%". Zdarza się to tylko w Windows 95/98 i spowodowane jest błędami w PostScripcie.
Jednym ze sposobów, aby sobie z tym poradzić jest użycie skryptu usuwającego ten kawałek złego PostScriptu z zadania wydruku. Innym sposobem jest znalezienie lepszego sterownika do PostScriptu do Windows. Najlepszym sposobem jest prawdopodobnie użycie LPRng zamiast PostScriptu do drukowania na serwerze Samby.
Erik Ratcliffe (erik@caldera.com) z Caldery powiedział mi, że
używanie LPRng oznacza, że na maszynach z Windows może byc użyty
każdy sterownik. Na serwerze Samby, używali oni takiego pliku
/etc/printcap:
raw:\
:rw:sh:
:lp=/dev/lp1
:sd=/var/spool/lpd/raw
:fx=flp
LPRng nie wyamaga znaków ':\' na końcu każdej linii. Wciąż
potrzebna jest pozycja dotycząca drukarek w pliku
/etc/smb.conf. Polecenie 'print' musi używać drukarki
zdefiniowanej jako "raw" w /etc/printcap i
dane muszą być wysyłane do tej drukarki binarnie. Spróbuj użyc
poniższej linii:
print command = lpr -b -Praw %s
Możliwe też, że będziesz musiał skonfigurować kolejkowanie na Windows 95, tak żeby wysyłać wydruki bezpośrednio do drukarki zamiast je kolejkować.
Aby udostępnić drukarkę spod Windows-ów musisz zrobić następujące
rzeczy:
/etc/printcap i muszą one
odpowiadać lokalnej strukturze katalogów (katalog dla drukarki itp.)
/usr/bin/smbprint. Skrypt ten
znajduje się w źródłach Samby, ale nie w każdym pakiecie binarnym.
Poniżej znajduje się trochę zmodyfikowana wersja tego skryptu.
/usr/bin.
Poniższe pola w /etc/printcap są dla drukarki HP 5MP
dołączonej do komputera z Windows NT.
cm - komentarz; lp - urządzenie, na które ma być wysłany wydruk;
sd - katalog zadań dla drukarki (na lokalnym komputerze); af -
katalog accounting; mx - maksymalny rozmiar pliku (0 - bez
ograniczenia); if - nazwa filtru wejściowego (skryptu).
Więcej informacji znajdziesz w Printing-HOWTO lub w podręczniku systemowym dla "printcap".
etc/printcap
#
# //zimmerman/oreilly przez smbprint
#
lp:\ cm=HP 5MP Postscript OReilly na zimmerman:\ lp=/dev/lp1:\
:sd=/var/spool/lpd/lp:\ af=/var/spool/lpd/lp/acct:\ mx#0:\
:if=/usr/bin/smbprint:
Upewnij się, że katalogi zadań i zliczania (accounting) istnieją
i są zapisywalne
oraz że if ma poprawną ścieżkę do scryptu smbprint (patrz
poniżej) i że lp wskazuje poprawne urządzenie (plik specjalny w
katalogu /dev)
Następnym krokiem jest skrypt smbprint. Zwykle znajduje się
on w /usr/bin i jest przypisywany Andrew Tridgellowi -
osobie, która stworzyła Sambę o ile wiem. Przychodzi on wraz z
dystrybucją źródeł Samby, ale nie ma go w dystrybucji binariów,
więc go tutaj stworzyłem.
Możesz przejrzeć go dokładniej. Przerobiłem go trochę, ponieważ przeróbki wydawały mi się użyteczne.
#!/bin/sh
# Skrypt ten jest filtrem wejściowym do drukowania na drukarce
# dołączonej do Unix-a. Używa programu smbclient do drukowania
# pliku. Na przykład twój printcap mógłby wyglądać nastepująco:
#
#
# smb:lp=/dev/null:sd=/usr/spool/smb:sh:if=/usr/local/samba/smbprint
#
#
# Stworzyłby on drukarkę o nazwie smb, która drukowałaby poprzez
# ten skrypt. Musiałbyś stworzyć katalog zadań /usr/spool/smb z
# odpowiednimi dla twojego systemu prawami dostępu i właścicielem.
#
# Ustaw następujące rzeczy na serwer i serwis przez, który chcesz
# drukować. W tym przykładzie mam PC-ta z WfWg o nazwie "lapland",
# który ma drukarkę o nazwie printer bez hasła.
#
#
# W dalszej części skrypt został przerobiony przez hamilton@ecnz.co.nz
# (Michael Hamilton, tak aby serwer, serwis i hasło mogły być
# przeczytane z pliku /usr/var/spool/lpd/PRINTNAME/.config
#
# Aby to działało /etc/printcap musi mieć pole af:
#
# cdcolour:\ cm=CD IBM Colorjet on 6th:\ sd=/var/spool/lpd/cdcolour:\
# :af=/var/spool/lpd/cdcolour/acct:\ if=/usr/local/etc/smbprint:\
# :mx=0:\ lp=/dev/null:
#
# Plik /usr/var/spool/lpd/PRINTNAME/.config powinien zawierać:
# server=PC_SERVER service=PR_SHARENAME password="password"
#
# Np. server=PAULS_PC service=CJET_371 password=""
#
# Plik, do którego mają byc zapisywane wiadomości ze śledzenia;
# możesz zmienić na /dev/null jeśli chcesz:
#
logfile=/tmp/smb-print.log logfile=/dev/null
#
# Ostatnim parametrem do filtra jest nazwa pliku accounting.
#
spool_dir=/var/spool/lpd/lp config_file=$spool_dir/.config
# Powinien czytać te zmienne z pliku konfiguracyjnego: serwer
# serwis hasło użytkownik
eval `cat $config_file`
# Trcohę pomocy, zmień >> na > jeśli chcesz zachować trochę
# miejsca na dysku.
#
echo "server $server, service $service" >> $logfile
(UWAGA Możesz dodać linię `echo translate' jesli chcesz
# automatycznego tłumaczenia CR/LF podczas drukowania.
echo translate echo "print -" cat
) | /usr/bin/smbclient "\\\\$server\\$service" $password -U $user
-N -P >>
$logfile
Większość dystrybucji Linux-owych posiada nenscript do zamiany dokumentów ASCII na PostScript. Następujący skrypt w Perl-u ułatwia życie stwarzając prosty interfejs dla drukowania w Linux-ie przez smbprint.
Stosowanie: print [-a|c|p] <nazwa_pliku>
-a drukuje <nazwa_pliku> jako ASCII; c drukuje <nazwa_pliku>
sformatowane jako źródło; -code p drukuje <nazwa_pliku> jako
PostScript.
Jeśli nie ma żadnej opcji, print próbuje odgadnąć typ pliku i
odpowiednio go wydrukować.
Użycie smbprint do drukowania plików ASCII powoduje obcinanie długich linii. Ten skrypt dzieli długie linie w miejscu spacji (zamiast w środku słowa) jeśli jest to możliwe.
Formatowanie źródła odbywa sie przy pomocy programu nenscript. Bierze on plik ASCII i formatuje go w dwie kolumny z dodatkowym nagłówkiem (data, nazwa pliku, itp.) Zlicza także ilość linii. Wzorując się na tym przykładzie możesz zrobić inne typy formatowania.
Dokumenty PostScript-owe są już sformatowane więc przechodzą bezpośrednio do drukarki.
usr/bin/perl
# Skrypt: print Autorzy: Brad Marshall, David Wood
# Plugged In Communications Date: 960808
#
# Skrypt do drukowania na drukarce oreilly, która jest dołączona do
# komputera zimmerman. Opis działania: Jako argumenty przyjmuje pliki
# różnych typów i wysyła je odpowiednio do skryptu drukujacego Samby
#
# Obecnie obsługiwane typy plików:
#
# ASCII - Upewnij się, że linie dłuższe niż $line_length zostały
# podzielone w miejscu spacji.
# PostScript - Nie robi nic.
# Code - Formatuje na PostScript używając "nenscript", aby wszystko
# było odpowiednio wyświetlone (ułożenie, czcionki, itd.)
#
#
# Ustaw maksymalną ilość znaków w linii dla plików ASCII. line_length
$= 76;
# Ustaw ścieżkę i nazwę skryptu drukującego Samby print_prog =
$"/usr/bin/smbprint";
# Ustaw ścieżkę i nazwę "nenscript-u" (zamiana ASCII-->PostScript)
$nenscript = "/usr/bin/nenscript";
unless ( -f $print_prog ) { die "Can't find $print_prog!";
}
unless ( -f $nenscript ) { die "Can't find $nenscript!";
}
&ParseCmdLine(@ARGV);
# DBG print "filetype is $filetype\n";
if ($filetype eq "ASCII") { ero;wrap($line_length); elsif ($filetype eq
&"code") {
} ero;codeformat; elsif ($filetype eq "ps") {
&createarray; else {
} print "Sorry..no known
&file type.\n"; exit
} 0;
}
# Wyślij tablcę do smbprint open(PRINTER, "|$print_prog") || die "Can't
open $print_prog: $!\n"; foreach
$line (@newlines) {
print PRINTER $line;
}
# Wyślij dodatkowy znak LF jeśli plik ma niekompletną ostatnią linię. print
PRINTER "\n"; close(PRINTER); print "Completed\n"; exit 0;
# --------------------------------------------------- #
# Wszystko poniżej jest procedurą #
# --------------------------------------------------- #
sub ParseCmdLine { Interpretuje wiersz poleceń, szukając jakiego typu jest
# plik
# Gets $arg and $file to be the arguments (if they exists) and the
# filename
if ($#_ < 0) { ero;usage;
}
# DBG foreach $element (@_) { print "*$element* \n";
# }
$arg = shift(@_); if ($arg =~ /\-./) { cmd = $arg; DBG print "\$cmd
found.\n";
$file = shift(@_); else { file = $arg;
}
# Definiowanie typu pliku dopóki ($cmd) { Nie mamy argumentów
if ($file =~ /\.ps$/) { filetype = "ps"; elsif ($file =~
$/\.java$|\.c$|\.h$|\.pl$|\.sh$|\.csh$|\.m4$|\.inc$|\.html$|\.htm$/)
${ filetype = "code"; else { filetype = "ASCII";
}
# Przerób $file odpowiednio do jego typu i zwróć $filetype
} else { Mamy typ pliku w $arg if ($cmd =~ /^-p$/) {
filetype = "ps"; elsif ($cmd =~
$/^-c$/) { filetype
} = "code"; elsif ($cmd =~
$/^-a$/) {
} filetype = "ASCII"
}
}
}
sub usage { print " Stosowanie: print [-a|c|p] <plik>
-a drukuje <plik> jako ASCII c drukuje <plik> sformatowany jako
źródło
-code p drukuje <plik> jako PostScript
Jeśli nie ma żadnej opcji, print próbuje odgadnąć typ pliku i
odpowiednio go wydrukować.\n
";
exit(0);
}
sub wrap { Stwórz tablicę linii w pliku, gdzie każda linia jest krótsza od
# podanej ilości znaków i jest podzielona tylko w miejscach spacji
# Pobierz ilość znaków jaka może być w linii. limit =
$pop(@_);
# DBG print "Entering subroutine wrap\n"; print "The line length
#limit is $limit\n";
# Wczytaj plik, sformatuj i umieść w tablicy. open(FILE,
"<$file") || die "Can't open $file: $!\n"; while(<FILE>) {
$line = $_;
# DBG print "The line is:\n$line\n";
# Podziel linię jeśli jest dłuższa niż podana ilość znaków. while (
length($line) > $limit ) {
# DBG print "Wrapping...";
# Pobierz pierwsze $limit+1 znaków. part =
$substr($line,0,$limit +1);
# DBG print "The partial line is:\n$part\n";
# Sprawdź czy ostatni znak jest spacją.
$last_char = substr($part,-1, 1);
if ( " " eq $last_char ) { Jeśli tak, wydrukuj resztę.
# DBG print "The last character was a space\n";
substr($line,0,$limit + 1) = "";
substr($part,-1,1) = "";
push(@newlines,"$part\n");
} else { Jeśli nie, znajdź ostatnią spację w
# pod-linii i drukuj do niej
# DBG print "The last character was not a
#space\n";
# Usuń znaki dalsze niż $limit
substr($part,-1,1) = ""; Odwróć linię
# aby ułatwić odnajdywanie ostatniej spacji
$revpart = reverse($part);
$index = index($revpart," ");
if ( $index > 0 ) {
substr($line,0,$limit-$index) = "";
push(@newlines,substr($part,0,$limit-$index)
. "\n"); else { Nie było spacji w linii
} więc
# wydrukuj do $limit.
substr($line,0,$limit) = "";
push(@newlines,substr($part,0,$limit)
. "\n");
}
}
}
push(@newlines,$line);
}
close(FILE);
}
sub codeformat { Wywołaj procedurę wrap i przefiltruj przez nenscript
&wrap($line_length);
# Przepuść wynik przez nenscript, aby utworzyć plik PostScript,
# który pasuje do jakiegoś przyzwoitego formatu źródeł do drukowania
# (ułożenie, czcionki Courier, ilość linii). Najpierw wydrukuj to do
# pliku tymczasowego.
$tmpfile = "/tmp/nenscript$$";
open(FILE, "|$nenscript -2G -i$file -N -p$tmpfile -r") || die "Can't
open nenscript: $!\n"; foreach $line (@newlines)
{
print FILE $line;
}
close(FILE);
# Wczytaj plik tymczasowy spowrotem do tablicy, tak aby mógł być
# wysłany do skryptu print Samby.
@newlines = ("");
open(FILE, "<$tmpfile") || die "Can't open $file: $!\n";
while(<FILE>) {
push(@newlines,$_);
}
close(FILE); system("rm $tmpfile");
}
sub createarray { Stwórz tablicę dla PostScript-u open(FILE, "<$file") ||
# die "Can't
open $file: $!\n"; while(<FILE>) {
push(@newlines,$_);
}
close(FILE);
}
Teraz sposób z MagicFilter. Dziękuję za tę informację Alberto Menegazzi ( flash.egon@iol.it).
Alberto pisze:
--------------------------%<----------------------------------
1) Zainstaluj MagicFilter dla odpowiednich drukarek w
/usr/bin/local/, ale nie umieszczaj w
/etc/printcap tego co sugeruje dokumentacja do tego
filtru.
2) Utwórz plik /etc/printcap na podobieństwo tego poniżej
(to jest konfiguracja dla mojej drukarki LaserJet 4L):
lp|ljet4l:\
:cm=HP LaserJet 4L:\
:lp=/dev/null:\ # or /dev/lp1
:sd=/var/spool/lpd/ljet4l:\
:af=/var/spool/lpd/ljet4l/acct:\
:sh:mx#0:\
:if=/usr/local/bin/main-filter:
Powinieneś wiedzieć, że lp=/dev/... otwierane jest z lokowaniem, tak więc powinny być używane virtualne urządzenia; jedno dla każdej odległej drukarki.
Np. stworzone przez 'touch /dev/ljet4l'.
3) Stwórz filtr /usr/local/bin/main-filter jak poniżej:
#! /bin/sh
logfile=/var/log/smb-print.log
spool_dir=/var/spool/lpd/ljet4l
(
echo "print -"
/usr/local/bin/ljet4l-filter
) | /usr/bin/smbclient "\\\\SHIR\\HPLJ4" -N -P >> $logfile
P.S. Oto cytat z mini-HOWTO Print2Win na temat lokowania i po co tworzyć wirtaulne drukarki.
---Początek cytatu
Wskazówka od Ricka Bresslera:
Dobra rada. Ja używam czegoś bardzo podobnego. Jedna pomocna wskazówka, to poniżej nie jest dobrym pomysłem:
:lp=/dev/null:\
lpr otwiera plik podany w ustawieniu lp= na wyłączność. Robi tak, żeby zapobiec zapisywaniu przez wiele procesów do tej samej drukarki w tym samym czasie.
Ubocznym efektem tego jest, że w twoim przypadku 'eng' i 'colour' nie mogą drukować w tym samym czasie (zwykle mniej lub bardziej przezroczyste, ponieważ będą raczej drukowały szybko no i jest też kolejka. Tak że nie powinieneś niczego zauważyć). Ale każdy inny proces, który spróbuje zapisać do /dev/null przerwie działanie.
W systemie jednoużytkownikowym nie jest to problem. Ja mam system z 50. drukarkami - i tam byłby to problem.
Rozwiązaniem jest stworzenie fałszywej drukarki dla każdej. Np. 'touch /dev/eng'.
Zmodyfikowałem pola w pliku /etc/printcap powyżej i
wziąłem pod uwagę sugestie Ricka. Wykonałem te dwa polecenia:
#touch /dev/eng #touch /dev/colour
---Koniec cytatu
--------------------------%<----------------------------------
Adam Neat ( adamneat@ipax.com.au) uprzejmie podał następujący skrypt, służący do robienia kopii zapasowych Windowsów na Linuksie przy pomocy narzędzia smbclient. Adam twierdzi, że używa go do robienia kopii zapasowych Windows 3.x i NT na Linuksie na napędzie DAT SCSI.
Adam nie jest dumny ze stylu kodowania, ale to działa. Jak ja to lubię mówić: "Jeśli działa i jest głupie, to nie jest głupie".
W skrypcie tym agnea1 jest nazwą użytkownika na Linuksie, który robi kopie.
#!/bin/bash
clear
echo Initialising ...
checkdate=`date | awk '{print $1}'`
if [ -f "~agnea1/backup-dir/backup-data" ]; then
echo "ERROR: No config file for today!"
echo "FATAL!"
exit 1
fi
if [ -d "~agnea1/backup-dir/temp" ]; then
echo "ERROR: No tempoary directory found!"
echo
echo "Attempting to create"
cd ~agnea1
cd backup-dir
mkdir temp
echo "Directory Made - temp"
fi
if [ "$1" = "" ]; then
echo "ERROR: enter in a machine name (ie: cdwriter)"
exit 1
fi
if [ "$2" = "" ]; then
echo "ERROR: enter in a SMB (Lan Manager) Resource (ie: work)"
exit 1
fi
if [ "$3" = "" ]; then
echo "ERROR: enter in an IP address for $1 (ie:
130.xxx.xxx.52)" exit 1
fi
#############################################################################
# Main Section
#
#############################################################################
cd ~agnea1/backup-dir/temp
rm -r ~agnea1/backup-dir/temp/*
cd ~agnea1/backup-dir/
case "$checkdate"
in
Mon)
echo "Backuping for Monday"
cat backup-data | /usr/local/samba/bin/smbclient
\\\\$1\\$2 -I$3 -N echo "Complete"
if [ -d "~agnea1/backup-dir/Monday" ]; then
echo "Directory Monday Not found ...
making" mkdir
~agnea1/backup-dir/Monday
fi
echo "Archiving ..."
cd ~agnea1/backup-dir/temp
tar -cf monday.tar * echo "done ..."
rm ~agnea1/backup-dir/Monday/monday.tar
mv monday.tar ~agnea1/backup-dir/Monday
;;
Tue)
echo "Backuping for Tuesday"
cat backup-data | /usr/local/samba/bin/smbclient
\\\\$1\\$2 -I$3 -N echo "Complete"
if [ -d "~agnea1/backup-dir/Tuesday" ]; then
echo "Directory Tuesday Not found ...
making" mkdir
~agnea1/backup-dir/Tuesday
fi
echo "Archiving ..."
cd ~agnea1/backup-dir/temp
tar -cf tuesday.tar *
echo "done ..."
rm ~agnea1/backup-dir/Tuesday/tuesday.tar
mv tuesday.tar ~agnea1/backup-dir/Tuesday
;;
Wed)
echo "Backuping for Wednesday"
cat backup-data | /usr/local/samba/bin/smbclient
\\\\$1\\$2 -I$3 -N echo "Complete"
if [ -d "~agnea1/backup-dir/Wednesday" ]; then
echo "Directory Wednesday Not found
... making" mkdir
~agnea1/backup-dir/Wednesday
fi
echo "Archiving ..."
cd ~agnea1/backup-dir/temp
tar -cf wednesday.tar *
echo "done ..."
rm ~agnea1/backup-dir/Wednesday/wednesday.tar
mv wednesday.tar ~agnea1/backup-dir/Wednesday
;;
Thu)
echo "Backuping for Thrusday"
cat backup-data | /usr/local/samba/bin/smbclient
\\\\$1\\$2 -I$3 -N echo "Complete"
if [ -d "~agnea1/backup-dir/Thursday" ]; then
echo "Directory Thrusday Not found ...
making" mkdir
~agnea1/backup-dir/Thursday
fi
echo "Archiving ..."
cd ~agnea1/backup-dir/temp
tar -cf thursday.tar *
echo "done ..."
rm ~agnea1/backup-dir/Thursday/thursday.tar
mv thursday.tar ~agnea1/backup-dir/Thursday
;;
Fri)
echo "Backuping for Friday"
cat backup-data | /usr/local/samba/bin/smbclient
\\\\$1\\$2 -I$3 -N echo "Complete"
if [ -d "~agnea1/backup-dir/Friday" ]; then
echo "Directory Friday Not found ...
making" mkdir
~agnea1/backup-dir/Friday
fi
echo "Archiving ..."
cd ~agnea1/backup-dir/temp
tar -cf friday.tar *
echo "done ..."
rm ~agnea1/backup-dir/Friday/friday.tar
mv friday.tar ~agnea1/backup-dir/Friday
;;
*)
echo "FATAL ERROR: Unknown variable passed for day"
exit 1;;
esac
###########
Prawa autorskie tego HOWTO należą do Davida Wooda © 1996-1999, Można je reprodukować w każdej postaci oraz dystrybuować bez ograniczeń tak długo jak długo nie będzie zmieniana jego zawartość włącznie z tym stwierdzeniem.
Brad Marshall ( bmarshall@plugged.net.au) and Jason Parker ( jparker@plugged.net.au) dostarczyli czasu, cierpliwości, trochę skryptów i badań.
Adam Neat ( adamneat@ipax.com.au) dostarczył skrypt w bashu do robienia kopii zapasowych Windows na Linuksie.
Matthew Flint (
matthew@philtrum.demon.co.uk) powiedział mi o ustawienia
interfaces w smb.conf.
Oleg L. Machulskiy ( machulsk@shade.msu.ru), Jeff Stern ( jstern@eclectic.ss.uci.edu), Dr. Michael Langner ( langner@fiz-chemie.de i Erik Ratcliffe ( erik@caldera.com) zasugerowali modyfikacje w rozdziale na temat udostępniania drukarki na Linuksie maszynom z Windows.
Alberto Menegazzi ( flash.egon@iol.it) dostarczył konfigurację MagicFilter.
Andrea Girotto ( icarus@inca.dei.unipd.it) dostarczył wielu wartościowych sugestii na temat całego dokumentu.
Dzięki także wszystki międzynarodowym tłumaczom, którzy umożliwili czytanie tego HOWTO ludziom nie znającym angielskiego: Takeo Nakano ( nakano@apm.seikei.ac.jp), Klaus-Dieter Schumacher ( Klaus-Dieter.Schumacher@fernuni-hagen.de), Andrea Girotto ( icarus@inca.dei.unipd.it) i wielu innym, z którymi nie mam kontaktu.
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:
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 sie na nią zapisać, to
wyślij list o treści subscribe jtz Imię Nazwisko na adres
majordomo@ippt.gov.pl
doc-linux-pl-2002.06.14.orig/html/SWAP-partition.pl.html 0100664 0001750 0001750 00000044024 06770264140 021430 0 ustar coven coven
Mój sposób na wspólnego swapa Linuxa i w95 jest dość prosty. Zmuszamy wina do
korzystania ze stałego swapa na naszej partycji wymiany, a potem w Linuksie
korzystamy z tej samej partycji co windows. Tylko, że potem ta partycja już nie
może być odczytana przez windowsa - ma inny filesystem i nie ma windowsowego
swapa (plik win386.swp). Musimy więc przywrócić na niej flesystem
dosowy i odtworzyć brakujący plik. Potem znów pracujemy w Linuksie, on sobie
swapuje na nasza partycję, przy kończeniu pracy znów zamienia partycję na
format dosowy. Proste prawda? Ale jakie skuteczne. Jest to najszybsza metoda,
ze wszystkich jakie do tej pory testowałem. Zresztą co będę gadał - sami
przeczytajcie i sprawdźcie.
Dotychczas zostały upublicznione następujące wersje tego dokumentu:
Dokument został ogólnie przebudowany, oprócz opisu dla dystrybucji Redhat został dodany opis postępowania z dystrybucją Slackware.
Poprawiłem literówki (mam nadzieję) oraz uprościłem trochę zagmatwany opis.
Dodany opis postępowania z dystrybucją Debian (teraz są aż trzy! :) (Debian, RedHat, Slackware)).
Wreszcie powstała wersja SGML tego dokumentu, bo dotychczas (aż wstyd się przyznać :( ) pisałem to w HTML-u, ale tak, żeby wyglądało, że było konwertowane z SGML...
Musisz mieć co najmniej trzy partycje. Jedną z Linuxem, drugą z w95 i jeszcze trzecia na plik wymiany. Istnieje niepisana zasada, że swap powinien być dwa razy większy od ilości RAM-u w Twoim komputerze. U mnie, przy 540 MB (proszę bez śmiechów ;) ) dysku wygląda to tak:
/dev/hda1 #partycja z w95 (256 MB)
/dev/hda2 #partycja z Linuxem (227 MB)
/dev/hda3 #partycja wymiany (32 MB)
Do podziału na partycje użyj najlepiej linuxowego programu
fdisk, nie jest może najwygodniejszy w użyciu, ale za to
najlepszy. Partycji do swapu nadaj identyfikator odpowidający typowi FAT16 (id
4 lub 6 w zależności od wielkości), a nie Linux Swap (id 82). Identyfikator
partycji ustawia opcja t menu fdisk-a.
Tu nie będziesz się musiał dużo natrudzić, zresztą pod Linuxem też nie. W Panelu Sterowania ustaw jako plik wymiany plik o wielkości minimalnej 0 i maksymalnej równej wielkości partycji przeznaczonej na swapa. Zamknij windowsy i odpal Linuxa.
Tak, to nie żart. Linuxa też musisz przygotować. Jak bym tego nie opisał to
Microsoft wytoczyłby mi sprawę w sądzie. ;) No to zaczynajmy.
Oczywiście musisz mieć zainstalowanego Linuxa. Zbytnich wymagań co do jądra
i wersji chyba nie ma, bo wydaje mi się, że ten sposób będzie działał na każdym
Linuksie. Osobiście testowałem to na Debianie, Redhacie, Slacku i jądrach od
2.0.35 do 2.2.9 (różne kombinacje, ale jądra 2.2.x już tylko na Debianie).
Z narzędzi potrzebne będą nam:
/bin/dd/sbin/mkdosfs (aka. /sbin/mkfs.msdos)/sbin/mkswap/bin/mount/sbin/swapon/sbin/swapoff (który jest linkiem do /sbin/swapon)/bin/umountWszystkie te programy (oprócz mkdosfs) to standard i powinny znajdować się
w każdej, nawet najbardziej okrojonej, instalacji. mkdosfs można
skompilować mając źródła, lub (co jest znacznie wygodniejsze) zainstalować z
pakietu, zwłaszcza, że chyba każda dystrybucja posiada pakiet zawierający
mkdosfs.
W Debianie mkdosfs znajduje się w pakiecie: dosfstools. Oprócz
mkdosfs w pakiecie tym znajduje się jeszcze narzędzie do sprawdzania i
naprawiania dosowego filesystemu - dosfsck. Pakiet możesz zainstalować np.
tak:
dpkg -i dosfstools_wersja.deb
Jeśli nie masz instalki Debiana to pakiet możesz ściągnąć z
tego adresu.
Dokładna nazwa pakietu zawierającego mkdosfs brzmi np:
mkdosfs-ygg-0.3b-5.i386.rpm. Znajdź go na na płytce instalacyjnej RedHata,
katalogu z instalką lub na jakimś serwerze FTP, np.
tutaj. Zainstaluj ten pakiet, np. w ten sposób:
rpm --install mkdosfs-ygg-0.3b-8.i386.rpm
Po tej operacji możesz już przystąpić do sedna sprawy. :)
W Slackware standardowo jest zainstalowany mkdosfs. A gdyby nie było
/sbin/mkdosfs, to znajduje się on w pakiecie bin.tgz w
podkatalogu a3 dystrybucji. Zainstaluj ten pakiet, wraz z nim otrzymasz
jeszcze masę pożytecznych narzędzi. Możesz użyć pkgtool lub
installpkg. Pierwszy poprowadzi Cię za rękę, a drugi wystarczy wywołać
w ten sposób:
installpkg bin.tgz
i pakiet jest już zainstalowany. Teraz możesz przejść do następnej części.
Wszystkie opisane poniżej zmiany w plikach konfiguracyjnych dotyczą dystrybucji, które są tu wymienione: Debian, RedHat, Slackware. Jeśli posiadasz inną dystrybucję, poszukaj w plikach startowych podobnych komend i popróbuj. Pamiętaj jednak, że możesz zrobić sobie, a właściwie partycjom krzywdę, więc jeśli nie do końca wiesz co robisz nie rób tego. Skorzystaj z pomocy bardziej doświadczonego kolegi, lub napisz do mnie - wspólnie na pewno coś poradzimy.
Acha, jeszcze jedna sprawa. Opisy zamieszczone tutaj dotyczą:
Notka: Czytając dalej zapewne zauważysz, że przy wywołaniachswaponiswapoffpolecam zamienić parametr-ana nazwę konkretnej partycji. Jest to właściwie niepotrzebne, ale piszę tak by było dokładnie wiadomo, o którą partycję chodzi (u mnie/dev/hda3). Czytającman swaponzobaczysz, że opcja-apozwala na małą automatyzację w zarządzaniu partycjami wymiany. Jeśli chcesz z niej korzystać nic nie stoi temu na przeszkodzie. Po prostu nie zmieniaj tego parametru. Weź tylko pod uwagę, że komendamkswapnie posiada takiej opcji i tu będziesz musiał wpisać dokładne nazwy partycji, bomkswapnie przeczyta sobie ich z/etc/fstab. Zamiast "brakującej" opcji możesz uzyć petli shell'a, ale to już temat na inną bajkę. Jeśli Cię to interesuje - mail me.
Powodzenia...
Zajmiemy się tylko dwoma skryptami startowymi: checkroot.sh i
umountfs. W pierwszym z tych plików SWAP jest włączany podczas startu
Linuxa, a w drugim wyłączany przed zamknięciem systemu.
/etc/init.d/checkroot.shNa samym początku tego pliku znajdziesz coś takiego:
if [ -x /sbin/swapon ]
then
[ "$VERBOSE" != no ] && echo "Activating swap..."
swapon -a
fi
Jak się pewnie domyślasz sekwencja ta powoduje włączenie wszystkich swapów
zdefiniowanych w /etc/fstab. No i dobrze, bo my chcemy włączyć te
swapy. Tylko, że jak na razie nasza partycja wcale nie ma formatu Linux Swap (id
82) tylko DOS16. I co z tym fantem zrobić? Potraktować mkswapem. Zobacz
efekt moich zmian:
if [ -x /sbin/swapon ]
then
[ "$VERBOSE" != no ] && echo "Activating swap..."
mkswap /dev/hda3
swapon /dev/hda3
fi
/etc/init.d/umountfsPlik ten jest wykonywany podczas zamykania systemu, wyłącza partycje wymiany, odmontowuje partycje inne niż root i przemontowuje partycję root jako read-only. W pliku tym jest coś takiego:
echo -n "Deactivating swap... "
swapoff -a
echo "done."
Ciąg tych poleceń wyłącza pliki wymiany i wyświetla na konsoli info. Zmienimy
tylko parametr -a polecenia swapoff na /dev/hda3 lub jaki tam
macie, przeformatowujemy partycję na DOS16 i koniec.
A jednak nie.
Dlaczego to jeszcze nie koniec?
Nie koniec, bo nie ma pliku win386.swp na naszej
świeżo sformatowanej partycji. Windows (ale chyba tylko 95) sam powinien sobie
utworzyć brakujący plik, ale nie zawsze się tak dzieje. Więc może mu pomożemy.
Sami utworzymy brakujący plik. Potrzebny do tego będzie katalog do
podmontowania świeżo uwtorzonej partycji dosowej (najlpepiej pusty, ale
niekoniecznie, bo z moich doświadczeń wynika, że można podmontować filesystem
także w niepustym katalogu). Fragment tego pliku po wszelkich przeróbkach
powinien wyglądać mniej więcej tak:
echo -n "Deactivating swap... "
swapoff /dev/hda3
mkdosfs -n SWAP_SPACE /dev/hda3
mount -t msdos -o rw /dev/hda3 /katalog/w/ktorym/montujemy
dd if=/dev/zero of=/katalog/w/ktorym/montujemy/win386.swp bs=1k count=0
umount /dev/hda3
echo "done."
Przetestuj to jeszcze i ciesz się! :)))
/etc/rc.d/rc.sysinitPoszukaj w pliku /etc/rc.d/rc.sysinit (gdzieś na początku) linii
wygladającej mniej więcej tak:
# Start up swapping.
echo "Activating swap partitions"
swapon -a
Aktywuje ona partycje wymiany na wszystkich partycjach oznaczonych w pliku
/etc/fstab jako swap. My potrzebujemy uaktywnić tylko jedną partycję,
możemy zmienić parametr -a na konkretną wartość u mnie to
/dev/hda3). Ponadto musimy jeszcze wczesniej z naszej partycji wymiany
windowsa zrobic swapa linuxowego. Służy do tego polecenie
mkswap. Po modyfikacji ta część pliku powinna wyglądać mniej
więcej tak:
# Start up swapping.
echo "Activating swap partitions"
mkswap /dev/hda3
swapon /dev/hda3
W tej części pliku już koniec ze zmianami, teraz przenosimy się bliżej
końca /etc/rc.d/rc.sysinit. Tam szukamy czegoś podobnego do:
# Right, now turn on swap in case we swap to files.
echo "Enabling swap space."
swapon -a 2>&1 | grep -v "busy"
Tutaj też parametr -a zmień na oznaczenie swojej partycji wymiany
(np. /dev/hda3).
I to już wszystkie zmiany w tym pliku, przejdźmy do następnego.
/etc/rc.d/init.d/halt Ten plik jest wykonywany w czasie zatrzymania lub restartu systemu,
czyli po wydaniu polecenia shutdown z odpowiednimi parametrami lub po
naciśnięciu trzech 'magicznych' klawiszy (tzn. Ctrl+Alt+Del). Zanim
zaczniesz cokolwiek zmieniać, chcąc uniknąć błędów musisz najpierw mieć
zainstalowany pakiet mkdosfs. Pisałem wcześniej jak to zrobić.
No to zaczynamy. W tym pliku (tzn. /etc/rc.d/init.d/halt) nie
będziesz musiał dużo zmieniać. Znajdź coś podobnego do tego:
# Turn off swap, then unmount file systems.
echo "Turning off swap"
swapoff -a
Tutaj jak wszędzie zmieniamy parametr -a na konkretne
oznaczenie partycji wymiany i wywołanie polecenia ma postać,
np. swapoff /dev/hda3.
Teraz musimy jeszcze nadać partycji wymiany format dosowy,
po to, aby windows mógł z niej skorzystać. Robimy to poleceniem
mkdosfs. Ta część pliku już po wszelkich zmianach wygląda
u mnie następująco:
# Turn off swap, then unmount file systems.
echo "Turning off swap"
swapoff /dev/hda3
mkdosfs -n SWAP_SPACE /dev/hda3
Parametr -n z wartością SWAP_SPACE nadaje
tworzonej partycji dosowej etykietę SWAP_SPACE. I to byłoby już prawie
wszystko, pozostało tylko odtworzyć brakujący plik wymiany windowsa
win386.swp (tu możesz zobaczyć
dlaczego).
A teraz pokażę jak. Po komendzie mkdosfs dopisz jeszcze to:
mount -t msdos -o rw /dev/hda3 /katalog/w/ktorym/montujemy
dd if=/dev/zero of=/katalog/w/ktorym/montujemy/win386.swp bs=1k count=0
umount /dev/hda3
Już możesz rozkoszować się swoim dziełem... :)))
W Slacku też musisz poprawić tylko dwa pliki, w zasadzie zrobić to samo co z RedHatem i Debianem, tylko że w innych plikach... Opisywany tu przykład pochodzi ze Slackware 3.6, ale z pewnością w innych wersjach jest tak samo.
/etc/rc.d/rc.SPlik /etc/rc.d/rc.S jest wykonywany podczas inicjalizacji systemu.
Za każdym razem, gdy system wstaje, plik ten jest analizowany i wykonywane są
zawarte w nim polecenia. Nam chodzi o to, żeby nasza partycja
(/dev/hda3) została "przerobiona" na swapa dla Linuxa. Na samym
początku pliku znajdziecie coś takiego:
# enable swapping
/sbin/mkswap -a
/sbin/swapon -a
Polecenia te uruchamiają jako swap wszystkie partycje, które są oznaczone
w pliku /etc/fstab jako przeznaczone do swapowania. Zamień parametr
-a na konkretną partycję (żeby używać tej jednej), albo we wspomnianym
pliku opisz ją jako miejsce na swap. Po operacji plik /etc/rc.d/rc.6
powinien wyglądać np. tak:
# enable swapping
/sbin/mkswap /dev/hda3
/sbin/swapon /dev/hda3
albo niech pozostanie w oryginalnej postaci, a w /etc/fstab powinno
pojawić się coś takiego:
/dev/hda3 swap swap defaults 0 0
/etc/rc.d/rc.6Ten pliczek jest z kolei wykonywany przy zamykaniu systemu. To tutaj musimy zawrzeć linijki odpowiadające za przywrócenie windzie straconego swapa. Poszukaj czegoś takiego:
# Turn off swap, then unmount local file systems.
echo "Turning off swap."
swapoff -a
Tutaj zmiany nie będą polegały już tylko na prostej kosmetyce. Opcję -a
tradycyjnie przemianowujemy na oznaczenie partycji wymiany oraz musimy zrobić
coś jeszcze. Mianowicie utowrzyć na tejże partycji filesystem dosowy i
odtworzyć swapa pani windzie. Pierwsze załatwiamy używając narzędzia
mkdosfs, a konkretniej:
mkdosfs -n SWAP_SPACE /dev/hda3
Teraz wystarczy już tylko odtworzyć plik win386.swp na nowiutkim
filesystemie. (Chcesz wiedzieć po co? - kliknij
tutaj!)
Aby tego dokonać musisz dysponować katalogiem do podmontowania filesystemu
przed chwilą utworzonego (no, oczywiście możesz zapisywać bezpośrednio na
partycję, ale nie polecam :))). Najprościej chyba tak:
mount -t msdos -o rw /dev/hda3 /katalog/w/ktorym/montujemy
dd if=/dev/zero of=/katalog/w/ktorym/montujemy/win386.swp bs=1k count=0
umount /dev/hda3
To utworzy brakujący plik i już po kłopocie. Będzie to plik pusty o
rozmiarze 0, ale taki właśnie powinien być.
Sprawdź co zdziałałeś/aś i odpocznij trochę :)))
Mam nadzieję, że choć trochę pomogłem paru osobom. Wszelkie pytania dotyczące tego dokumentu proszę kierować na adres: sniff@alpha.net.pl. Krytyka wszelkiego rodzaju mile widziana. Prosiłbym o kontakt użytkowników dystrybucji innych niż trzy opisane, aby w przyszłości rozbudować ten dokument.
Może znajdzie się osoba, która próbowała przenieść to mini-JTZ w realia win98. Proszę niech opisze wrażenia i prześle mi, bo moja edukacje w świecie windowsów skończyła sie na 95 i to nie OSR2.
Dziękuję za uwagę.
doc-linux-pl-2002.06.14.orig/html/Serial-HOWTO.pl.html 0100664 0001750 0001750 00000250110 06770264140 020757 0 ustar coven coven
Przed Tobą Linux Serial-HOWTO. Wszystko na temat konfiguracji modemów i terminali pod Linux-em. Trochę sztuczek na temat portów szeregowych i porad na temat najczęstszych kłopotów. Niniejszy dokument koncentruje się na sytemech pracujących na komputerach klasy x86, choć zawarte w nim informacje mogą być prawdziwe również dla innych architektur sprzętowych.
Prawa autorskie Linux Serial HOWTO należą do Grega Hankinsa. Dokumenty HOWTO mogą być powielane i redystybuowane w całości lub w części, na dowolnym nośniku fizycznym lub elektronicznym, tak długo, jak niniejsza notka o prawach autorskich jest umieszczana na wszystkich kopiach. Dystrybucja komercyjna jest dozwolona, a wręcz do niej zachęcamy. Autor chciałby być poinfirmowany o takim fakcie.
Wszelkie tłumaczenia, prace powstałe na bazie tego dokumentu lub prace zawierające fragmenty tego dokumentu muszą być objęte tymi samymi warunkami, co oryginał. To znaczy, że nie możesz na dokumenty powstałe z HOWTO nakładać dodatkowych ograniczeń na ich rozpowszechnianie. W pewnych warunkach możemy odstąpić od tej reguły; prosze skontaktować się w tym celu z koordynatorem HOWTO - adres można znaleźć dalej w dokumencie.
Chcemy aby ten dokument był rozpowszechniany na wszelkie możliwe sposoby, chcemy również zachować prawa autorskie do tego dokumentu i chcielibyśmy być informowani o wszelskich nowych planach redystrybucji dokumentów HOWTO.
Jeśli masz jakieś pytania, skontaktuj się z Gregiem Hankinsem,
koordynatorem projektu Linux HOWTO -
gregh@sunsite.unc.edu tel. +1 404 853 9989.
Nowe wersje Serial HOWTO będą dostępne pod adresem
ftp://sunsite.unc.edu:/pub/Linux/docs/HOWTO/Serial-HOWTO
i na wszystich kopiach (mirrorach). Dokument jest dostępny również w innych
formatach, mozna je znaleźć w katalogu
other-formats. Serial-HOWTO jest dostęne również pod
adresem
http://sunsite.unc.edu/LDP/HOWTO/Serial-HOWTO.html
i co miesiąc będzie wysyłane na
comp.os.linux.answers.
Najnowsze wersje tłumaczenia można jak zwykle znaleźć na stroanch
http://www.jtz.org.pl/.
Prosze, przysyłajcie wszelkie uwagi, komentarze oraz dodatkowe
materiały. Zawsze jestem chętny usłyszeć co myślicie o HOWTO. Zawsze staram
się wprowadzać ulepszenia. Powiedzcie mi dokładnie czego znie zrozumieliście,
lub co mogłoby być napisane jaśniej. Możecie się ze mną skontakować pisząc na
adres
greg.hankins@cc.gatech.edu. Na każdy list odpiszę, choć może mi
to zając tydzień albo więcej, w zależności jak jestem aktualnie
zajęty. Otrzymuje mnóstwo listów od root-a i ze źle skonfigurowanych
komputerów. Wysyłajcie do mnie listy, ze sprawdzonych kont pocztowych. Jeśli
nie odpowiem w ciągu dwóch tygodni, napiszcie do mnie raz jeszcze.
Można mnie złapać pod adresem:
Greg Hankins
College of Computing
801 Atlantic Drive
Atlanta, GA 30332-0280
to pocztą slimaczą, lub
http://www.cc.gatech.edu/staff/h/Greg.Hankins/.
Proszę, podawajcie wersje dokumentu, ten dokument nosi numer 1.10.
Podane tutaj przykłady lub odpowiedzi nie muszą być odpowiednie dla wszystkich komputerów.
Linux potrafi współpracować z następującymi urządzeniami szeregowymi.
Uwaga: ze względu na konflikt adresów nie możesz używać jednocześnie portu COM4 i karty video IBM8514.
Modemy PnP będą pracowały pod Linux-em. Jednakże odradzam ich użytkowanie, ponieważ są trudne we współżyciu. Jest kilka rzeczy, których możesz spróbować:
loadlin.
http://www.redhat.com/linux-info/pnp.
Zasadniczo Linux obsługuje dowolną kartę portów szeregowych, która wykorzystuje układy UART 8250, 16450, 16550, 16550A (lub zgodne) lub modemy wewnętrzne emulujące jeden z tych układów.
Specjalna uwaga na temat BB-1004 i BB-1008. Obie nie obsługują linii DCD i RI, i dlatego nie nadają się do obsługi modemów wejściowych. Zastosowane do innych celów będą się sprawować poprawnie.
info@comtrol.com lub
http://www.comtrol.com
ftp://tsx-11.mit.edu/pub/linux/packages/comtrol
mhw@wittsend.atl.ga.us
sales@cyclades.com or
http://www.cyclades.com
ftp://ftp.cyclades.com/pub/cyclades w jądrze Linux-a.
pccom8@signum.se
ftp://ftp.signum.se/pub/pccom8
sales@dgii.com lub
http://www.dgii.com
ftp://ftp.dgii.com/drivers/linux w dystrybucji jądra
Linux-a od wersji 2.0.
si@wimpol.demon.co.uk
fray@krypton.mankato.msus.edu zgłosił się
dobrowolnie udostępnić sterownik, jęsli będziesz go
potrzebować. Jednakże Mark nie zapenia żadnego wsparcia.
sales@equinox.com lub
http://www.equinox.com
ftp://ftp.equinox.com/library/sst
spot@gtek.com lub
http://www.gtek.com
ftp://ftp.gtek.com/pub
arobinso@nyx.net lub
http://www.nyx.net/~arobinso
http://www.nyx.net/~arobinso i w dystrybucji jądra
Linux-a od wersji 2.1.15.
info@maxpeed.com lub
http://www.maxpeed.com
ftp://maxpeed.com/pub/ss
info@moxa.com.tw lub
http://www.moxa.com.tw
ftp://ftp.moxa.com.tw/drivers/c218-320/linux
sales@sdlcomm.com lub
http://www.sdlcomm.com
ftp://ftp.sdlcomm.com/pub/drivers
vpetree@infi.net
simonallen@cix.compulink.co.uk
ftp://sunsite.unc.edu/pub/Linux/kernel/patches/serial
sales@stallion.com lub
http://www.stallion.com
ftp://ftp.stallion.com/drivers/ata5/Linux i w
dystrybucji jądra Linux-a od wersji 1.3.27.Przegląd urządzeń Comtrol, Cyclades, Digi i Stallion można
znaleźć w numerze Czerwiec 1995 Linux Journal. Artykuł
jest dostępny pod adresem
http://www.ssc.com/lj/issue14.
Modemy, które nazywają siebie ``Winmodems'', np. USR Sportster Winmodem i IBM Aptiva MVAVE, nie są obsługiwane przez Linux-a. Te modemy korzystają z prywatnych, niedostępnych rozwiązań technicznych i wymagają specjalnych sterowników. Unikaj modemów tego typu. Co więcej, z tych samych powodów, trzymaj się z daleka od modemów wymagajacych sterowników RPI Rockwella.
Każdy port I/O umożliwia wymianę danych pomiędzy komputerem i otoczeniem. Istnieje wiele rodzajów portów I/O, porty szeregowe, równoległe, sterowniki dysków, karty ethernetowe itp. My będziemy omawiać porty szeregowe, ponieważ modemy i terminale są urządzeniami korzystającymi z portów szeregowych. Każdy port szeregowy musi posiadać adres I/O i przerwanie (IRQ). Istnieją 4 porty szeregowe odpowiadające odpowiednio COM1-COM4:
ttyS0 (COM1) adres 0x3f8 IRQ 4
ttyS1 (COM2) adres 0x2f8 IRQ 3
ttyS2 (COM3) adres 0x3e8 IRQ 4
ttyS3 (COM4) adres 0x2e8 IRQ 3
Jeśli podczas startu Linux nie rozpozna żadnego portu
szeregowego upewnij się, że obsługa portów szeregowych jest
wkompilowana w jądro. W tym dokumencie
przyjeliśmy, że ttyS0 odnosi się do portu COM1,
ttyS1 do COM2, ttyS2 do COM3 i ttyS3 do
COM4. Zauważ, że domyślnie porty współdzielą przerwania
IRQ. Jednakże nie można korzystać ze wszystkich portów w konfiguracji
domyślnej, trzeba na nowo przydzielić przerwania. Informacje
na temat ustawiania IRQ znajdziesz w rozdziale
Czy mogę używać więcej niż dwóch urządzeń portów szeregowych?
W niektórych systemach tworzone są dodatkowe dwa pliki
urządzeń, /dev/modem dla modemu i /dev/mouse
dla myszy. Oba są dowiązaniami symbolicznymi do właściwych
urządzeń w katalogu dev, które podałeś podczas
Instalacji systemu (chyba, że posiadasz mysz sbus, wtedy
/dev/mouse będzie wskazywać na urządzenie bus mouse).
Wiele dyskutowano na temat użyteczności /dev/mouse i
/dev/modem. Ja mocno odradzam korzystania z tych
dowiązań. W szczególności, jeśli planujesz korzystać ze
swojego modemu do dzwonienia do twojego komputera (dialin), a będziesz
korzystał z /dev/modem, to możesz napotkać na problemy
związane z plikami blokad (lock files). Jeśli ten pomysł podoba Ci się,
korzystaj z niego, lecz upewnij się, że wspomniane dowiązania wskazują na
właściwe urządzenia. Jednakże jeśli usuniesz te dowiązania, wtedy
niektóre aplikacje będą wymagać zmianiy konfiguracji
(np. minicom).
dev.
/dev/ttyS0 major 4, minor 64 /dev/cua0 major 5, minor 64
/dev/ttyS1 major 4, minor 65 /dev/cua1 major 5, minor 65
/dev/ttyS2 major 4, minor 66 /dev/cua2 major 5, minor 66
/dev/ttyS3 major 4, minor 67 /dev/cua3 major 5, minor 67
Proszę zwróć uwagę, że wszystkie dystrybucje powinny same
utworzyć pokazane powyżej pliki urządzeń. Czy tak się stało możesz to sprawdzić
wydając polecenie:
linux% ls -l /dev/cua*
linux% ls -l /dev/ttyS*
/dev. Jeśli nie znalazłeś pliku urządzenia, musisz go utworzyć za
pomocą polecenia mknod.
Przykład: załóżmy, że potrzebujesz utworzyć urządzenie ttyS0:
linux# mknod -m 666 /dev/cua0 c 5 64
linux# mknod -m 666 /dev/ttyS0 c 4 64
Możesz w tym celu wykorzystać skrypt MAKEDEV, dostępny w
katalogu /dev lub archiwach ftp. Znacznie upraszcza
tworzenie plików urządzeń. Na przykład jeśli chesz utworzyć
urządzenie ttyS0 wystarczy napisać:
linux# cd /dev
linux# ./MAKEDEV ttyS0
Skrypt zajmie się utowrzeniem urządzeń wyjściowych (cua) i wejściowych (ttyS).
Pliki urządzeń wykorzystywane przez karty wieloportowe zależą
od rodzaju karty. Szczegóły można znaleźć w
rc.serial, który znajduje się w dystrybucji programu
setserial. Jeśli starasz się uruchomić kartę
wieloportową bardzo polecam zaopatrzyć się w najnowszą
wersję programu setserial. Prawdopododobnie będziesz
musiał własnoręcznie utworzyć pliki specjalne
urządzeń. Skorzystaj albo z programu mknod albo skryptu
MAKEDEV. Pliki urządzeń kart wieloportowych
charakteryzują się tym, że numer główny (major number) jest
równy 64 + numer portu karty. Jeśli chiałbyś utworzyć plik
urządzenia dla portu ttyS17 muszisz wydać polecenie:
linux# mknod -m 666 /dev/cua17 c 5 81
linux# mknod -m 666 /dev/ttyS17 c 4 81
Zauważ, że ``64 + 17 = 81''. Korzystając ze skryptu MAKEDEV trzeba
napisać:
linux# cd /dev
linux# MAKEDEV ttyS17
Uwaga: dokumentacja SIIG dla IO1812 dotycząca portów COM5-COM8 zawiera błąd. Powinno być COM5=0x250, COM6=0x258, COM7=0x260 i COM8=0x268.
Uwaga: Rejestr stanu (status register) karty DIGI PC/8 znajduje się pod adresem 0x140.
Uwaga: Korzystając z karty AST Fourport może być potrzebne
umiesczenie w skrypcie rc.serial parametru skip_test.
Przeczytaj dokumentacje dostarczaną ze sterownikiem. Te karty korzystają ze specjalnych urządzeń, nie ze standardowych. Informacje ich dotyczące różnią się w zależności od posiadanego sprzętu.
getty to program, który obsługuje proces wejścia do
systemu Unix. Będziesz musiał używać getty jeśli chcesz
dzwonić do swojego Linux-a. Nie potrzebujesz getty jeśli
zamierzasz jedynie dzwonić ze swojego Linux-a w świat. W
świecie Linux-a rozpowszechnione są trzy wersje tego programu:
getty_ps, mgetty i agetty. Każdy z nich
posiada własną składnie i pramatery wywołania, upewnij się, że
korzystach z poprawnych dla wersji getty, której używasz.
getty_ps.
Większość dystrybucji instaluje pakiet getty_ps. Zawiera on
dwa programy getty. getty stosowany do konsoli
wirtualnych i terminali, oraz uugetty wykorzystywany do
modemów. Skoncentruję się na getty_ps, ponieważ korzystam
z tej właśnie wersji getty.
mgetty. mgetty jest wersja getty przeznaczoną do
modemów. Pozwala na logowanie się przez modem, dostarcza
obsługę FAXu i rozpoznaje połączenia PPP. Dokumentacja
mgetty jest bardzo dobra i nie potrzebuje
uzupełnień. Znajdziesz w niej informacje na temat instalacji i
konfiguracji programu. Najnowsze informacje o pakiecie możesz
znaleźćpod adresem
http://www.leo.org/~doering/mgetty/.
agetty. agetty to trzeci wariant getty. Jest to prosta, w
pełni funkcjonalna implementacja getty bardzo dobrze
nadająca się do obsługi wirtualnych konsol i teminali.
setserial?
setserial to program, który pozwala na sprawdzanie i
zmianę różnego rodzaju atrybutów portów szeregowych, adresów,
przerwań i innych parametrów. Aby dowiedzieć się, która wersja
jest zainstalowana na twoim komputerze należy uruchomić
program bez żadnych argumentów.
Kiedy twój Linux startuje, konfigurowane są tylko porty
ttyS{0-3}, wykorzystane są standardowe ustawienia IRQ
równe 3 i 4. Dlatego jeśli posiadasz inne karty portów
szeregowych lub porty ttyS{0-3} nie mają standardowych
ustawień przerwań IRQ, to aby zostały prawidłowo sonfigurowane
musisz skorzystać z programu setserial. Pełny spis
dostępnych opcji znajduje się na stronach podręcznika (man
setserial).
Po pierwsze upewnij się czy masz dobry kabel. Modem wymaga kabla prostego, bez żadnych krzyżowań przewodów. Każdy sklep komputerowy posiada w swej ofercie taki kabel. Pamiętaj aby miał odpowiednie wtyczki. Jeśli używasz gniazda DB25, to zawsze bedzie to męskie DB25. Nie pomyl go z gniazdem portu równoległego, którego gniazdo to damskie DB25. Podłącz modem do jednego z portów szeregowych. Jeśli potrzebujesz pomocy skorzystaj z dokumentacji modemu.
Do podłączenia modemu wewnętrznego nie potrzebujesz kabla modemowego. Modem wewnętrzny nie potrzebuje również portu szeregowego, posiada własny. Muszisz jedynie poprawnie skonfigurować przerwanie, oraz adresy portów We/Wy, tak aby nie było wykorzystywane przez inne urządzenia. Jeśli utknąłeś skorzystaj z dokumentacji modemu. Jeśli potrzebujesz rady na temat wyboru przerwania IRQ zobacz Czy mogę używać więcej niż 2 porty szeregowe?.
Na niektórych płytach głównych musisz wyłączyć port szeregowy, który ma zostać zastąpiony przez modem. Robi się to przełączając odpowiednnie zworki lub zmieniając ustawienia w BIOSie. Przeczytaj instrukcje do płyty głównej.
Z powodu błędu w karcie graficznej IBM8514, możesz napotkać na
kłopoty konfigurując twój modem wewnętrzny na porcie
ttyS3. Jeśli linux nie znajdzie modemu na porcie
ttyS3 możesz wykorzystać setserial, wtedy modem
będzie pracował prawidłowo. Modemy wewnętrzne skonfigurowane
na portach ttyS{0-2} nie powinny mieć klopotów z wykrycem
ich przez system.
Zanim zaczniesz korzystać z bardziej skomplikowanych programów
komunikacyjnych, do testów skorzystaj z kermit-a lub innego
prostego programu (minicom?). Ostanią wersję kermita można
zawsze znaleźć pod adresem
ftp://sunsite.unc.edu:/pub/Linux/apps/comm i na jego
kopiach. Powiedzmy, że twój modem jest przyłączony do portu
ttyS3 i potrafi obsłużyć prędkość 115200
bps. Powinieneś wtedy napisać:
linux# kermit
C-Kermit 6.0.192, 6 Sep 96, for Linux
Copyright (C) 1985, 1996,
Trustees of Columbia University in the City of New York.
Default file-transfer mode is BINARY
Type ? or HELP for help.
C-Kermit>set line /dev/ttyS3
C-Kermit>set carrier-watch off
C-Kermit>set speed 115200
/dev/ttyS3, 115200 bps
C-Kermit>c
Connecting to /dev/ttyS3, speed 115200.
The escape character is Ctrl-\ (ASCII 28, FS)
Type the escape character followed by C to get back,
or followed by ? to see other options.
ATE1Q0V1 ; wpisz to i naciśnij Enter
OK ; modem powinien odpowiedzieć w ten
; sposób
Jeśli modem odpowie na polecenie AT możesz założyć, że
twój modem po stronie Linux-a działa poprawnie. Spróbuj
połączyć się z innym modemem (np. numer 0202122 - nasza
kochana TPSA - przyp. tłumacza). Napisz
ATDT0202122,,
Jeśli twoja linia nie obsługuje wybierania tonowego zamiast
ATDT napisz ATDP. Jeśli nawiązałeś połączenie, to
znaczy, że twój modem działa.
Aby wróćic na konsole Kermita trzymajac wciśniety Ctrl
wciśnij backslasz '\', zwolnij Ctrl i wciśnij C.
Ctrl-\-C (Back at linux) C-Kermit>quit linux#
To był prosty test przy wykorzystaniu prymitywnych, ręcznych metod wybierania numeru. Normalnie należy pozwolić Kermitowi na automatyczne wybranie numeru, korzystając z jego bazy numerów i zaawansowanych metod nawiązywania połaczeń. Np. korzystając z modemu USR Robotics należy zrobić tak:
linux# kermit
C-Kermit 6.0.192, 6 Sep 1997, for Linux
Copyright (C) 1985, 1996,
Trustees of Columbia University in the City of New York.
Default file-transfer mode is BINARY
Type ? or HELP for help
C-Kermit>set modem type usr ; wybuerz rodzaj modemu
C-Kermit>set line /dev/ttyS3 ; wybierz urządzenie
C-Kermit>set speed 115200 ; ustaw domyślną prędkość
C-Kermit>dial 7654321 ; wybierz numer
Number: 7654321
Device=/dev/ttyS3, modem=usr, speed=115200
Call completed.<BEEP>
Connecting to /dev/ttyS3, speed 115200
The escape character is Ctrl-\ (ASCII 28, FS).
Type the escape character followed by C to get back,
or followed by ? to see other options.
Welcome to ...
login:
Jeśli potrzebujesz wskazówek zobacz rozdział Programy komunikacyjne.
Kiedy dzwonisz wykorzystując swój modem, ustaw prędkość portu
szeregowego na największą jaka jest obsługiwana przez twój
komputer. Instalacje Linux-a z biblioteką libc w wersji
5.x lub nowszej obsługują prdkości do 115200bps. libc
znajduje się zwykle w katalogu /lib, zobacz jaką
wersję posiadasz. Jeśli twój Linux nie rozpoznaje prędkości
57600 lub 115200bps, musisz skorzystać z programu
setserial aby ustawić port na większą prędkość. Jak to
zrobić jest opisane w rozdziale
Jak ustawić port szeregowy na większe predkości?. Następnie w
programi komunikacyjnym ustaw prędkość portu na 38400.
Jeśli będziesz korzystał z modemu tylko do dzwonienia, możesz
go skonigurować w niemal dowolny sposów. Jeśli jednak chcesz
go wykorzystywać jako modem wejściowy, musisz skonfigurowac
modem w taki sposób, aby wykorzystywał tę samą prędkość z jaką
zamierzasz uruchomić program getty. Więc jeśli zamierzasz
uruchomić getty z prędkościa 38400 bps. podczas
konfigiracji modemu ustaw prędkość na 38400. Ma to na celu
zpobiec nieporzumienim wynikłym ze złego dopasowania prędkości
między portem szeregowym, a modemem. Zasadniczo, ustawienia
fabryczne włączające korekcję błędów i sprzętowe sterowanie
przepływem danych są najlepszymi ustawieniami modemów
wyjściowch. Dokładne informacje o tych ustawieniach znajdziesz
w dokumentacji modemu.
Jeśli twój modem obsługuje sprzętowe sterowanie przepływem
danych (RTS/CTS), stnowczo polecam wykorzystanie tego. Jest to
szczególnie ważne w przypadku modemów posiadającą
kompresję. Wpierw musisz włączyć RTS/CTS na samym porcie
szeregowym. Najlepiej jest to zrobić w skryptach startowych
/etc/rc.d/rc.local lub
/etc/rc.d/rc.serial. Upewnij się ze te pliki są
uruchamiane z głównego skryptu rc.sysinit. Dla
każdego portu, dla którego chcesz uruchomic CTR/CTS należy
wykonać polecenie:
stty crtscts < /dev/ttyS3
Musisz również włączyć RTS/CTS w modemie. Jak to zrobić znajdzesz w dokumentacji modemu, ponieważ różni się to między modelami. Pamiętaj o zapamiętaniu konfiguracji modemu (w jego pamięci stałej), oczywiście jeśli twoj modem to potrafi.
getty_ps? Skonfiguruj modem w taki sposób, aby prawidłowo wybierał numery. Jeśli nie czytałeś rozdziału Jak mogę zadzwonić z mojego modemu? zrób to teraz! Podałem tam bardzo ważne informacje. Nie musisz czytać tego rozdziału, jeśli zamiesza jedynie dzwonic ze swojego modemu.
Aby mieć wyjście przez modem i jednocześnie obsługiwać
przychodzące połączenia, musisz skonfigurować modem w
specjalny sposób (znów za pomocą poleceń AT.):
E1 wyświetlane wprowadzanych poleceń
Q0 wyświetlanie kodów rezultatów
V1 bądź bardziej rozgadany, podawaj więcej informacji
S0=0 nigdy nie odpowiadaj na połączenie (uugetty obsługuje
przychodzące połączenia, za pomocą opcji waitfor).
Jeśli nie ustawisz tych opcji, ciąg znaków inicjujący modem, może nie wykonać poprawnie swej pracy, niwecząc całą procedurę. Lecz o plikach konfiguracyjnych później.
&C1 DCD włączone tylko po nawiązaniu połączenia
&S0 DSR zawsze włączone
Przełączenie DTR resetuje modem (w zależności od producenta - RTFM).
Powyższe ustawienia mają wpływ na zachowanie modemu podczas nawiązywania i zakańczania połączenia.
Jeśli twój modem nie potrafi zapamiętać konfiguracji, możesz wcześniej opisane ustawienia zapamiętać w tzw. "INIT string". Zaraz o tym napiszemy. Niektóre modemy posiadają mikroprzełączniki służące do zmiany konfiguracji modemu (zmiany wartości rejestrów). Upewnij się że są poprawnie ustawione.
Zacząłem zbierać listę sprawdzonych konfiguracji, dla różnych
typów modemów. Jeśli masz ochotę przysłać mi swoją, proszę
bardzo. Jeśli chciałbyś otrzymać jedną z konfiguracji, po
prostu przyslij list. Posiadane przez mnie informacje są
dostępne pod adresem
ftp://ftp.cc.gatech.edu/pub/people/gregh/modem-configs.
Uwaga: aby zmusić mój Courier V.34 do poprawnego zerowania po
spadku DTR musiałem ustawić &D2 i S13=1
(ustawienie bitu 0 rejestra S13). Otrzymałem potwierdzenia, że
ten sposób działa również w przypadku USR Sportster V.34.
Uwaga: Niektóre modele Supra traktują DCD inaczej niż inne
modemy. Jeśli używasz Supry spróbuj ustawić &C0, a
nie &C1. Aby poprawnie obsługiwać DTR trzeba również
ustawić &D2.
getty_ps.
Pobież najnowszą wersję z
sunsite.unc.edu:/pub/Linux/system/serial. Jeśli
planujesz korzystać z wysokich prędkości (57600 i 115200bps),
musisz zdobyć wersję 2.0.7j lub nowszą. Muszisz mieć również
libc 5.x lub nowszą.
getty_ps jest domyślnie skonfigurowane zgodnie ze
standardem FSSTND (FileSystem
STaNDard). To znaczy, że programy binarne będą w
katalogu /sbin, a pliki konfiguracyjne będą się nazywały
/etc/conf.{uu}getty.ttySN. Pliki blokady (lock
files) będą umieszczane w katalogu /var/lock. Upewnij
się, że katalog /var/lock istnieje.
Jeśli nie chesz zgodności z FSSTND, programy binarne zostaną
umieszczone w /etc, pliki konfiguracyjne zostaną
nazwane /etc/default/{uu}getty.ttySN, a pliki
blokady będą umieszczane w katalogu
/usr/spool/uucp. Jeśli korzystasz z UUCP, zaleceamy
ten drugi sposób, ponieważ Taylor UUCP napotka na problemy,
jeśli przeniesiesz pliki blokady w miejsce, które nie bedzie
sprawdzane (przez uucp w poszukawaniu plików blokady).
W
celu rejestracji komunikatów getty_ps korzysta z
syslogd. Jeśli chesz skonfigurować syslogd
przeczytaj strony podręcznika dla syslogd(1) i
syslog.conf(5). Komunikaty są rejestrowane z priorytetem
LOG_AUTH, błędy wykorzystują LOG_ERR, a informacje
odpluskwiające LOG_DEBUG. Jeśli nie chcesz korzystać z
syslogd tylko chesz aby komunikaty były zapisywane do
pliku (domyślnie będzie to /var/adm/getty.log) , to
musisz zmodyfikować plik tune.h w zrodłach getty_ps.
Zastanów się i zdecyduj się czy chcesz zachować zgodność ze
standardem FSSTND i czy chesz korzystać z syslogd,
zmodyfikuj odpowiednio pliki Makefile, config.h i
tune.h znajdujące się w katalogu źródłowym pakietu
getty_ps. Następnie zainstaluj programy zgodnie z
instrukcjami.
Od tej chwili, wszystkie odwolania do getty należy
traktować jako odwołania do getty_ps. Natomiast
uugetty będzie odnosiło się do uugetty pochodzącego
z pakietu getty_ps.
uugetty. Dla przychodzących i wychodzących połączeń modemowych, chcemy
zastosować uugetty. uugetty sprawdza czy odpowiednie
pliki nie są zablokowane. Trzeba poprawić plik
/etc/gettydefs, aby zawierał pozycje dotyczące modemu
(pamiętaj, że te pozycje wzajemnie na siebie wskazują (są od
siebie zależne), jednak nie mają zastosowania do połączeń z
ustaloną prędkością - między każdą pozycją konieczny jest
pusty wiersz):
# Modem entries
115200# B115200 CS8 # B115200 SANE -ISTRIP HUPCL #@S @L @B login: #57600
57600# B57600 CS8 # B57600 SANE -ISTRIP HUPCL #@S @L @B login: #38400
38400# B38400 CS8 # B38400 SANE -ISTRIP HUPCL #@S @L @B login: #19200
19200# B19200 CS8 # B19200 SANE -ISTRIP HUPCL #@S @L @B login: #9600
9600# B9600 CS8 # B9600 SANE -ISTRIP HUPCL #@S @L @B login: #2400
2400# B2400 CS8 # B2400 SANE -ISTRIP HUPCL #@S @L @B login: #115200
Jeśli posiadasz modem 9600 bps lub szybszy, z kompresją
danych, wtedy możesz zablokować prędkość portu szeregowego i
pozwolić aby modem sam wykonywał przejścia na inne prędkości
bps. W takim przypadku zamiast wypróbowywania poszczególnych
pozycji pliku /etc/gettydefs, wystarczy aby była
tylko jedna pozycja opisujaca ustawienia modemu:
# 115200 fixed speed
F115200# B115200 CS8 # B115200 SANE -ISTRIP HUPCL #@S @L @B login: #F115200
Jeśli tój modem obsługuje sprzętowe sterowanie RTC/CTS, możesz
do pliku /etc/gettydefs dodac opcję CRTSCTS:
# 115200 fixed speed with hardware flow control
F115200# B115200 CS8 CRTSCTS # B115200 SANE -ISTRIP HUPCL CRTSCTS #@S @L @B login: #F115200
Jeśli chcesz możesz zmusic uugetty do wyświetlania
ciekawych informacji w nagłówku (login banner). W dalszych
przykładach pokazuję jak wyświetlić nazwę systemu (komputera),
numer portu, prędkość bps. Możesz dodać własne informacje:
@B Aktualna (sprawdzona w momencie napotkania @B ) prędkość bps.
@D Aktualna data w formacie MM/DD/YY.
@L Linia szeregowa do któej przyłączone jest getty.
@S Nazwa systemu (komputera).
@T Aktualny czas, w formacie HH:MM:SS (24-godziny).
@U Liczba aktualnie przcujących użytkowników. Jest to liczba
pozycji w pliku /etc/utmp o niezerowym polu ut_name.
@V Warość stałej VERSION, zdefiniowanej w plkiku ustawień
standardowych.
Aby wyświetlić pojedynczy znak @ musisz napisac '\@\ lub '@@'.
Następnie upewnij się, że istnieją odpowiednie pliki urządzeń
wejściowych i wyjściowych, i że modem jest włączony. Jeśli
twoj modem jest podłączony do portu ttyS3 muszą istnieć
pliki /dev/cua3 i /dev/ttyS3. Jeśli
odpowiendnie pliki urządzeń nie istnieją wróć do rozdziału
Tworzenie plików urządzeń w katalogu <tt>/dev</tt> i utwórz niezbędne pliki urządzeń. Jeśli
chcesz mieć możliwość dzwonienia, podczas gdy uugetty
czeka na nadejscie połączeń z zewnątrz, skorzystaj z urządzeń
/dev/cua zamiast /dev/ttyS.
Po zakończeniu edycji /etc/gettydefs możesz
sprawdzić, czy składnia pliku jest poprawna wydając polecenie:
linux# getty -c /etc/gettydefs
uugetty. Istniej mnóstwo parametrów, które możesz modyfikować
oddzielnie dla każdego posiadanego portu. Przechowywane są w
odzielnych plikach, każdy port może miećswój plik. Program
uugetty zawsze wpierw sprawdza zawartość pliku
/etc/conf.uugetty zawierajacego wspólne parametry dla
wszystkich portów, a dopiero później wczytuje z
/etc/conf.uugetty.ttySN konfiguracje konkretnego
portu. Przykładowe pliki konfiguracyjne można znaleźć w
zródłach pakietu. Zwykle są w każdej dystrybucji Linux-a. Nie
przedstawiamy ich tutaj ze wzgledu na ich objętość. Jeśli
używasz starszych wersji getty_ps (tzn. wcześniejszych od
2.0.7e) lub nie korzystasz ze schematu FSSTND, domyślnym
plikiem konfiguracyjnym będzie
/etc/default/uugetty.ttySN. Mój plik
/etc/conf.uugetty.ttyS3 wygląda tak:
# przykładowy plik konfiguracyjny modemu standardu Hayes
# umożliwiający przyjmowanie połączeń z zewnątrz
#
# alternatywny plik blokaty, który należy sprawdzać. Jeśli istnieje,
# wtedy uugetty jest uruchamiane ponownie, a więc modem jest
# równiez powtórnie inicjowany
ALTLOCK=cua3
ALTLINE=cua3
# uzywana linia
INITLINE=cua3
# czas po jakim przerywamy, jeśli brak reakcji użytkownika
TIMEOUT=60
# Ciag znaków zaierające polecenia inicjujące modem
# format: (oczekiwane) (wysyłane) ... (sekwencja)
INIT="" AT\r OK\r\n
WAITFOR=RING
CONNECT="" ATA\r CONNECT\s\A
# istawiamy opóżnienie przez pokazaniem nagłówka Loginu.
DELAY=1
#DEBUG=010
Aby uugettty było uruchomione i nasłuchiwało na porcie,
musisz do pliku /etc/initab dopisać wiersz
(wstawiając odpowiednie informacje typu port,prędkość,typ terminala):
S3:456:respawn:/sbin/uugetty ttyS3 F38400 vt100
Zrestartuj proces init:
linux# init q
Parametr podany w pliku /etc/inittab określający
predksość w bps powinien wskazywać możliwie jak największą
prędkość.
Teraz Linux będzie oczekiwał na połączenia przychodzące przez port szeregowy. Zadzwoń z innego komputera i wejdź do swojego systemu.
uugetty posiada mnóstwo opcji. Zobacz stronę podręcznika
dla getty(1m). Prócz innych ciekawych cech dostępne są
funkcje ringback i udostępnianie modemu w zależnośći od pory
dnia/nocy. RTFM :-).
Instrukcje zawarte w tym rozdziale przedstawiają w jaki sposób przyłączyc do portu szeregoweg onaszego Linux-a terminal lub inny komputer.
Upewnij się, że posiadasz dobry kabel. Kabel bezmodemowy (null modem cable) kupiony w sklepie komputerowym będzie dobry. Tylko to musi być kabel bezmodemowy!. Wiele sklepów nazywa ten kabel kablem do drukarki szeregowej. Pamiętaj aby podłączyć modem do portu szeregowego (męski DB25 lub DB9), a nie równoległego.
Gniazdo DB25 potrzebuje co najmniej kabla o takich połączeniach:
PC male DB25 Terminal DB25
TxD Transmit Data 2 --> 3 RxD Receive Data
RxD Receive Data 3 <-- 2 TxD Transmit Data
SG Signal Ground 7 --- 7 SG Signal Ground
Jeśli chesz korzystać ze sprzętowego uzgadniania prędkości, musisz mieć pełny kabel bezmodemowy:
PC male DB25 Terminal DB25
TxD Transmit Data 2 --> 3 RxD Receive Data
RxD Receive Data 3 <-- 2 TxD Transmit Data
RTS Request To Send 4 --> 5 CTS Clear To Send
CTS Clear To Send 5 <-- 4 RTS Request To Send
DSR Data Set Ready 6
|
DCD Carrier Detect 8 <-- 20 DTR Data Terminal Ready
SG Signal Ground 7 --- 7 SG Signal Ground
6 DSR Data Set Ready
|
DTR Data Terminal Ready 20 --> 8 DCD Carrier Detect
Jeśli masz gniazdo DB9 spróbuj takich połączeń:
PC DB9 Terminal DB25
RxD Receive Data 2 <-- 2 TxD Transmit Data
TxD Transmit Data 3 --> 3 RxD Receive Data
SG Signal Ground 5 --- 7 SG Signal Ground
I na koniec pełny kabel DB9-DB25 wygląda tak:
PC DB9 Terminal DB25
RxD Receive Data 2 <-- 2 TxD Transmit Data
TxD Transmit Data 3 --> 3 RxD Receive Data
6 DSR Data Set Ready
|
DTR Data Terminal Ready 4 --> 8 DCD Carrier Detect
GND Signal Ground 5 --- 7 GND Signal Ground
DCD Carrier Detect 1
|
DSR Data Set Ready 6 <-- 20 DTR Data Terminal Ready
RTS Request To Send 7 --> 5 CTS Clear To Send
CTS Clear To Send 8 <-- 4 RTS Request To Send
(RI Ring Indicator 9 not needed)
(Tak, piny 2 i 3 w złączkach DB9 i DB25naprawdę mają
przeciwne znaczenie).
Jeśli nie używasz pełnego kabla bezmodemowego, możesz być zmuszony do zrobienia następującej sztuczki: po stronie komputera połącz ze sobą RTS i CTS, oraz DSR,DCD i DTR. W ten sposób jeśli komputer zażyczy sobie sygnału uzgadniania, otrzyma go, od samego siebie.
Teraz, kiedu masz już dobry kabel podłącz terminal do komputera. Jeśli możesz powiedz terminalowi aby ignorował sygnały sterujące modeme. Spróbuj ustawić następujące parametry terminala: prędkosć 9600 bps, 8bitów danych, 1 bit stopu, brak bitu parzystości.
getty. Zainstaluj getty_ps zgodnie z instrukcjami zawartymi w
rozdzaiale 7.2. Dodaj do pliku /etc/gettydefs pozycję
opisującą twój terminal:
# 38400 bps Dumb Terminal entry
DT38400# B38400 CS8 CLOCAL # B38400 SANE -ISTRIP CLOCAL #@S @L login: #DT38400
# 19200 bps Dumb Terminal entry
DT19200# B19200 CS8 CLOCAL # B19200 SANE -ISTRIP CLOCAL #@S @L login: #DT19200
# 9600 bps Dumb Terminal entry
DT9600# B9600 CS8 CLOCAL # B9600 SANE -ISTRIP CLOCAL #@S @L login: #DT9600
Jeśli chesz możesz w zachęcie do sysytemu wyświetlać różne interesujące informacje. W moich przykładach wyświetlana jest nazwa systemu i nazwa linii. Możesz dodać inne rzeczy:
@B Aktualna (sprawdzona w momencie napotkania @B ) prędkość bps.
@D Aktualna data w formacie MM/DD/YY.
@L Linia szeregowa do któej przyłączone jest getty.
@S Nazwa systemu (komputera).
@T Aktualny czas, w formacie HH:MM:SS (24-godziny).
@U Liczba aktualnie przcujących użytkowników. Jest to liczba
pozycji w pliku /etc/utmp o niezerowym polu ut_name.
@V Warość stałej VERSION, zdefiniowanej w plkiku ustawień
standardowych.
Aby wyświetlić pojedynczy znak @ musisz napisac '\@\ lub '@@'.
Po zmodyfikowaniu /etc/gettydef możesz się upewnić, że
składnia pliku jest poprawna wydając polecenieL
linux# getty -c /etc/gettydefs
Każdemu z istniejących portów szeregowych można przydzielić
mnóstwo parametrów. Umieszcza się je w odzielnych plikach, po
jednym dla każdego z portów. Każdy proces uugetty
będzie korzystał z parametrów zawartych w pliku
/etc/conf/uugetty, a z
/etc/conf.uugetty.ttySN będzie korzystał jedynie
proces obsługujący port ttySN. Przykładowe pliki z
opcjami można znaleźć w źródłach pakietu getty_ps, który
jest dostarczany niemal z każdą dystrybucją. Aby aoszczędzić
miejsca nie prezentujemy ich tutaj. Pmiętaj, że jeśli
korzystasz z getty w wersji starszej niż 2.0.7e, lub nie
stosujesz się do zasad FSSTND, to domyślny plik konfiguracyjny
będzie nosił nazwę /etc/default/conf.uugetty. Mój
plik /etc/conf.uugetty.ttyS3 wygląda następująco:
# sample uugetty configuration file for a Hayes compatible modem to allow
# incoming modem connections
#
# alternate lock file to check... if this lock file exists, then uugetty is
# restarted so that the modem is re-initialized
ALTLOCK=cua3
ALTLINE=cua3
# linia, którą należy zainicjować
INITLINE=cua3
# timeout po jakim nalezy się rozłaczyć jeśli nie ma ruchu
TIMEOUT=60
# ciąg znaków konfigurujący modem
# format: <oczewiname> <dowyslania> ... (sekwencja pogawedki)
INIT="" AT\r OK\r\n
WAITFOR=RING
CONNECT="" ATA\r CONNECT\s\A
#niniejszy wiersz wprowadza opóźnienie przed wysłaniem
#informacji (login banner)
DELAY=1
#DEBUG=010
Aby uruchomić getty na porcie szeregowym wprowadż
odpowiednie zmiany do pliku /etc/inittab
(podmieniając odpowiednio informacje, tak aby pasowały do
twojego systemu):
S1:456:respawn:/sbin/uugetty -d /etc/default/uugetty.ttyS3 ttyS3 F115200 vt100
Zrestartuj init:
linux# init q
W tym momencie powinieneś zobaczyć zachętę wejścia do systemu. Być może musisz wcisnąć wpierw kilkakrotnie <return>, aby zwrócić na siebie uwagę terminala.
Wielu ludzi konfiguruje swoje komputery PC do pracy jako
terminal przyłączony do serwera z Linux-em. Stare komputery 8088
lub 286 są do tego celu doskonałe. Wszystko co potrzebujesz to
dyskietka startowa z DOSem i program komunikacyjny emulujący
terminal. Do tego celu bardzo dobrze nadaje się
kermit. Skompilowane wersje kermita niemal dla
każdego systemu operacyjnego można znaleźć pod adresem
http://www.columbia.edu:/kermit. Do tego celu
nadają się również takie dosowe programy jak telix czy
procomm. Pamiętaj aby prawidłowo skonfigurować program
komunikacyjny, wprowadź poprawny numer portu.
Nie musisz czytać tego rozdziału jeśli nie chcesz używać więcej niż 2. portów szeregowych (pod warunkiem, że nie masz karty wieloportowej).
Jeśli masz jeszcze jakiś wolny port szeregowy, to odpowiedź brzmi: tak, możesz go wykorzystać.
Liczba wykorzystanych portów szeregowych jest ograniczona liczbą dostępnych przerwań IRQ i adresów portów We/Wy.Jest o ograniczenie szyny komputera PC, nie Linux-a. Każde urządzenie szeregowe musi mieć przydzielone własne przerwanie IRQ i adres portu. Urządzeniem szeregowym może być port szeregowy, wewnętrzny modem lub karta wieloportowa.
Wieloportowe karty portów szeregowych są projektowane w specjalny sposób, który umożliwia posiadanie wielu portów szeregowych, które współdzielą jedno przerwanie IRQ. Linux pobiera z nich dane wykorzystując do tego rózne adresy dla każdego z portów na karcie.
Twój komputer standardowo ma przerwanie IRQ=4 przydzielone
portom ttyS0, ttyS2 i IRQ=3 do portów ttyS1,
ttyS3. Aby skorzystać z więcej niż jednego urządzenia
szeregowego będziesz musiał dla niego przeznaczyć oddzielne
przerwanie IRQ. Dobrym pomysłem jest przydzielenie przerwania
wykorzystywanego przez port równoległy. Twój PC jest zwykle
konfigurowany w ten sposób, że portom równoległym przydzielane
są przerwania 5 i 7. Bardzo rzadko używa się dwóch portów
równoległych. Co więcej możesz przydzielić przerwanie poru
rónoległedo do portu szeregowego i nadal korzystać z portu
równoległego. Zmiany przerwań IRQ i innych parametrów można
wykonać za pomocą programu setserial. Czasami możesz być
zmuszony do zmiany ustawień mikroprzęłączników, zobacz w
dokumentacji karty.
Będziesz musiał tak to wszystko skonfigurować, aby każde z
urządzeń szeregowych miało jedno i tylko jedno
przerwanie. Poniżej moja konfiguracja - umieszczona w pliku
/etc/rc.d/rc.local :
/etc/setserial /dev/cua0 irq 3 # myszka
/etc/setserial /dev/cua1 irq 4 # terminal Wyse
/etc/setserial /dev/cua2 irq 5 # Zoom modem
/etc/setserial /dev/cua3 irq 9 # USR modem
Standardowe przydziały IRQ:
IRQ 0 Timer channel 0
IRQ 1 Keyboard
IRQ 2 Cascade for controller 2
IRQ 3 Serial port 2
IRQ 4 Serial port 1
IRQ 5 Parallel port 2
IRQ 6 Floppy diskette
IRQ 7 Parallel port 1
IRQ 8 Real-time clock
IRQ 9 Redirected to IRQ2
IRQ 10 not assigned
IRQ 11 not assigned
IRQ 12 not assigned
IRQ 13 Math coprocessor
IRQ 14 Hard disk controller 1
IRQ 15 Hard disk controller 2
Nie ma Najlepszego wyboru przerwań IRQ. Po prostu upewnij się, że nie jest wykorzystywane przez kilka urządzeń jednocześnie. Dobrym wyborem jest jedno z 2, 3, 4, 5 i 7. ``not assigned'' (nie przydzielone) oznacza, że aktualnie żadne urządzenie go nie używa. Pamiętaj, że IRQ 2 to to samo co IRQ 9. Możesz je nazwyac jak chcesz, sterownik portów szeregowych jest bardzo wyrozumiały. Jeśli posiadasz kartę z 16-to bitową szyną, możesz wtedy dodatkowo korzystać z przerwań 10,11,12 i 15.
Upewnij się, że nie korzystasz z przerwańIRQ 0, 1, 6, 8, 13 lub
14. Są wykorzystywane przez płytę główną. Bedzie bardzo
nieszczęśliwa jeśli będziesz próbował zabrać jej
przerwanie. Jak już wszystko zrobisz, sprawdź ponownie, zobacz
/proc/interrupts i upewnij się, że nie ma konfliktów.
Następnie musisz ustawić adres portu. Sprawdź podręcznik do karty, gdzie są opisane ustawienia mikroprzełączników. Podobnie, jak w przypadku przerwań, jeden adres może być wykorzystywany tylko przez jedno urządzenie. Porty szeregowe są zwykle skonfigurowane dla następujących adresów:
ttyS0 address 0x3f8
ttyS1 address 0x2f8
ttyS2 address 0x3e8
ttyS3 address 0x2e8
Wybierz adresy dla każdegu urządzenia szeregowego, następnie
odpowiednio ustaw mikroprzełączniki. Ja mam swój modem na
porcie ttyS3, mysz na ttyS0 i terminal na ttyS2.
Kiedy zrestartujesz system, Linux powinien zobaczyć porty
szeregowe pod adresami, które ustawiłeś. IRQ raportowane
podczas startu mogą nie odpowiadać tym ustawionym przez
mikroprzełączniki na karcie. Nie martw się tym. Linux podczas
startu nie wykonuje rozpoznania przerwań IRQ, ponieważ jest to
trudne i może być mylne. Aby powiedzić Linux-owi, które
przerwanie jest używane przez dany port trzeba skorzystać z
programu setserial.
Ta część powinna pomóc w doborze prędkości z jaką modem
komunikuje się z programem lub getty.
setserial i ustaw flagę
spd_hi, aby skonfigurować port na prędkosć 57600 bps (4 *
14400 = 57600).
Dla modemów 28800 (V.FC lub V.34) ustaw flagę spd_vhi (4
* 28800 = 115200).
Następnie pamietaj aby w programie komunikacyjnym (lub pliku
inittab) wybrać prędkosć portu 38400. Upewnij się, że
masz układ 16550A UART.
Jeśli używasz biblioteki libc w wersji 5.x lub nowszej, to
definiowane są jescze prędkości 57600 i 115200. libc
znajduje się w katalogu /lib, zajżyj tam i zobacz,
której wersji używasz. Jeśli programy, których używasz zostały
skomplilowane dla tej wersji biblioteki, możesz używać tych
prędkosci zamiast posługiwać się programem
setserial. Ponieważ obecnie jest dostępnych wiele
dystrybucji Linux-a, najlepiej próbować korzystać z definicji
tych wyższych prędkości, jeśli posiada się nową dystrybucje Linux-a.
Przetestuj swoje ustawienia uruchamiając setserial z
wiersza komend i jeśli wszystko pracuje poprawnie umieść
odpowiednie polecenia w pliku
/etc/rc.d/rc.serial lub w
/etc/rc.d/rc.local, wtedy będą wykonywane przy
starcie systemu. Ja ustawiam prędkość 115200 portu ttyS3 poleceniem:
/sbin/setserial /dev/cua3 spd_vhi
Upewnij się, że korzystasz z odpowiedniej ścieżki dostępu do programu setserial i poprawnych nazw urządzeń. Możesz sprawdzić aktualne ustawienia portu szeregowego wydając polecenie
setserial -a /dev/ttyS3
Jak już wszystko zacznie działać, możesz przyjżeć się tym bardziej zaawansowanym programom. Jeśli nie ma ich w twojej dystrybucji, wszystkie są dostępne w standardowych archiwach FTP.
ecu - program komunikacyjnyminicom - program komunikacyjny zbliżony do telixaprocomm - program komunikacyjny z transmisją zmodemseyon - program komunikacyjny pracujący w
środowisku Xxc - pakiet komunikacyjny xcomm
term i
SLiRP. Umożliwiają posiadaczom zwykłych kont korzystanie
z aplikacji wymagających protokołu TCP/IP.
screen jest kolejnym programem umożliwiającym
prowadzenie wielu sesji na jadnym połączeniu. Zachowuje
się podobnie do wirtualnych konsoli.
callback to program, który umożliwia oddzwanianie.
mgetty+fax obsługuje FAXy i stanowi alternatywę dla
getty.
ZyXEL to program sterujący pracą modemów ZyXEL
U-1496. Obsługuje połączenia przychodzące i wychodzące,
zwiekszające bezpieczeństwo połączenia z oddzwanianiem,
obsługę FAX-ów i głosowych skrzynek pocztowych.
ftp://sunsite.unc.edu/pub/Linux/system/network/serial.
ftp://sunsite.unc.edu/pub/Linux/system/serial lub
ftp://sunsite.unc.edu/pub/Linux/apps/comm lub na
jednej z wielu kopii sunsite-a. Są to katalogi, w których
przechowuje się oprogramowanie dla portów szeregowych.
Kilka sztuczek, które mogą Ci się przydać ...
Kermit i zmodem. Abu korzystać z protokołu zmodem w programie kermit,
dodaj do pliku .kermrc następujace dane:
define rz !rz < /dev/cua3 > /dev/cua3
define sz !sz \%0 > /dev/cua3 < /dev/cua3
Pamiętaj o podaniu prawidłowego portu, tego, do którego
przyłączone jest modem. Nastepnie w wierszu zachęty programu
kermit po prostu napisz rz lub sz
<filename>.
Aby automatycznie ustawiac typ terminala dla wszystkich sesji
prowadzonych przez daną linie, dodaj do pliku
/etc/inittab odpowiednią informację. Gdybym miał
terminala vt100 przyłączony do portu ttyS1 dodałbym
opcję wt100 do wiersza opisującego tę linię:
S1:456:respawn:/sbin/getty ttyS1 DT9600 vt100
Możesz również korzystać z programu tset, który
potrafi określić rodzaj terminala i nie jest zależny od
żadnych ustawień domyślnych.
ls przy połączeniach przez porty szeregowe. Jeśli użycie kolorów ls bruździ w ustawieniach terminala
trzeba to wyłączyć. ls --color i ls --colour
wykorzystuje kolory. Niektóre dystrybucje korzystają domyślnie
z "kolorowego" ls. Sprawdz /etc/profile i
/etc/csh.cshrc czy nie znajdziesz tam aliasów dla
ls. Możesz również sam zrobić alias ls na ls
--no-color, jeśli nie chcesz zmieniać domyślnej konfiguracji
systemu.
Istnieje program o nazwie vtprint, który potrafi to
zrobić.
ftp://ftp.sdsu.edu/pub/vtprint lub
http://www.sdsu.edu/~garrett.
Inny program, który to umożliwia nosi nazwę
xprt.
ftp://sunsite.unc.edu/pub/Linux/system/printing.
Tak. Aby Linux mógł rozpoznać i skonfigurować urządzenie
szeregowe dodaj do pliku startowego
(/etc/rc.d/rc.local lub
/etc/rc.d/rc.serial) następujące polecenie:
/sbin/setserial /dev/cuaN auto_irq skip_test autoconfig
Zrób to dla każdego portu, który chcesz
skonfigurować. Pamiętaj aby podać nazwę pliku urządzenia,
które rzeczywiście istnieje w twoim komputerze.
Informacje o adesach portów i przerwaniach dla kart
wieloportowych znajdziesz w pliku rc.serial w pakiecie
setserial. Zawiera mnóstwo szczegółów na temat kart
wieloportowych, włączając adresy portów i nazwy urządzeń.
W numerze 36 znajdzesz artykuł Linux Journal,
http://www.ssc.com/lj/issue36/index.html
wyjaśniający w jaki sposób korzystać z konsoli przez port
szeregowy. Niestety listy wysyłane do autora powracają. Mam
nadzieje, że wkrótce artykuł pojawi się w serwisie Linux
Journal pod podanym wcześniej adresem.
Jeśli w systemach z dyskami (E)IDE zauwazysz niskią szybkość
transmisji przez porty szeregowe i bledy (overruns) portu
szeregowego skorzystaj z programu hdparm. Jest to
narzędzie, które umożliwia modyfikacje parametrów urządzeń
(E)IDE, włączając odblokowywanie innych przerwań w czasie
trwania przerwani IRQ dysku. Zwiększy to czułość systemu i
ułatwi mu szybszą reakcję na wydarzenia eliminując błędy
występujące na porcie szeregowym (overruns). Pamiętaj aby
bardzo dokładnie przeczytać dokumentacje programu ponieważ
niektóre sterowniki/dyski nie lubią takich ustawień i mogą
zniszczyć system plików znajdujący sie na dysku.
Zwróć również uwagę na narzędzie o nazwie irqtune
umożliwiające zmianę prirytetów przerwań IRQ poszczególnych
urządzeń, na przykład portu szeregowego, na którym pracuje
Twój modem. Może to z zwiększyć szybkość przesyłania
informacji przez port szeregowy twojego komputera. Dokumnet
FAQ dotyczący irqtune jest dostępny pod adresem
http://www.best.com/~cae/irqtune.
Nie musisz czytać tego rozdziału, jego celem jest wprowadzenie czytelnika w świat telekomunikacji i wnętrze UNIXa.
Plik blokady to zwykły plik, którego istnienie po prostu
oznacza, że dane urządzenie jest w użyciu. Przechowywane są w
katalogu /usr/spool/uucp lub
/var/lock. Pliki blokady pod Linux-em noszą nazwę
LCK..name. name oznacza nazwę urządzenia lub
nazwą komputera w formie UUCP. Pewne procesy tworzą pliki
blokady aby mieć wyłączny dostęp do urządzeń. Np. jeśli
będziesz dwonił swoim modemem pojawi się plik blokady mówiący
innym procesom, że ktoś już używa tego urządzenia. Pliki
blokady zwierają zwykle PID procesu zajmującego
zasób. Większość programów odczytuje pliki blokady i sprawdza
czy proces o podanym w tym pliku identyfikatorze PID nadal
istnieje. Jeśli sprawdzenie wykaże, że taki proces istnieje,
czyli plik blokady jest ważny, to proces który sprawdzał plik
blokady powinien zakończyć działanie.
Jeśli taki proces już nie istnieje, niektóre programy usuwają
przeterminowany plik blokady i korzystają z urządzenia zakładając
nowy własny plik blokady. Inne programy po prostu kończą
działanie informując Cię, że urządzenie jest w użyciu.
``baud'' i ``bps'' są prawdopodobnie najczęściej niepoprawnie używanymi terminami w branży komputerowo/telekomunikacyjnej. Wiele osób używa tych terminów zamiennie, podczas gdy każdy z nich oznacza coś innego!
Prędkość modulacji (baud rate) jest miarą ile razy na sekundę
zmienia się sygnał wysyłany przez modem
(modulator-demodulator). Spotykane zwykle prędkości
wynoszą 50, 75, 110, 300, 600, 1200 i 2400. Większość szybkich
modemów działa z prędkością 2400. Ze względu na ograniczenia
linii telefonicznych ciężko jest uzyskać prędkości większe niż
2400 i działają tylko w specyfcznych warunkach. Nazwa ``baud''
pochodzi od nazwiska Emila Baudot, wynalazcy asynchronicznego
telegrafu.
Prędkość bps jest miarą przesyłane jinformacji w jednostce czasu (bity na sekunde). Standardowe prędkości bps wynoszą 50, 75, 110, 300, 1200, 2400, 9600, ... 115200. Modemy z kompresją V42bis (kompresja 4:1) posiadają teoretyczną prędkość do 115200 bps. O tym zwykle myslą ludzie, kiedy używają mylnie pojęcia ``baud''.
Skoro szybkie modemy dzialają z prędkościs 2400 bodów, w jaki sposów przesyłają informacje z prędkościa 14400 bps? Modemy uzyskują zależność bps > bod-y dzięki kodowaniu w jednym bodzie kilku bitów. Jeśli 2 lub więcej bitów jest zakodowanych w jednym bodzie, prędkość bps przekracza liczbę bodów na sekunde. Jeśli twój modem łączy się z prędkością 14400 to znaczy, że przesyła 6 bitów w jednym bodzie.
Jak powstało całe to zamieszanie? Dawniej, kiedy dzisiejsze przestarzałe modemy były jednymi z najszybszych, prędkośc bps była zwykle równa ilości bodów na sekunde. Jeden bod zawieral jeden bit. Ludzie używali tych nazw wymiennie, oba pojęcia miały te ame wartości. Np. modem o prędkości 300 bps wysyłał 300 bodów na sekunde. Wszystko się zmieniło, kiedy pokazały się szybsze modemy i prędkość przesyłanych bitów przekroczyła prędkość wysylanych bodów.
UART ((Universal Asyncronous Receiver Transmitter) są układami znajdującymi się na karcie portów szeregowych. Ich zadaniem jest zamiana danych na bity, przesyłanie bitów przez linię szeregową i odbudowa danych na podstawie otrzymanych bitów. Układy UART operują na informacji podzielonej na bajty, który może być również reprezentacją znaku ASCII.
Powiedzmy, ze posiadasz terminal przyłączony do twojego PC. Kiedy wprowadzasz znak, terminal przekazuje go do nadajnika (również pewnego rodzaju układu UART). Nadajnik przesyła ten bajt przez linię szeregową, bit po bicie z określoną prędkościa. Po stronie PC, odbierający układ UART pobiera kolejne bity i buduje z nich bajty, które wstawia kolejno do bufora.
Istnieją dwa różne rodzaje układów UART. Powszechnie znane głupe 8250 i 16450, oraz zawierające kolejkę FIFO, sprytniejsze 16550A. Aby zrozumieć róznicę przestudiujmy co się dzieje, kiedy układ UART wysyła lyb otrzymuje bajt informacji.
Układ UART sam z siebie nie potrafi nic zrobić. Tylko wysyła i odbiera bity. Za akżdym razem, kiedy jeden bajt został wysłany lub odebrany CPU otrzymuje sygnał przerwania od urządzenia szeregowego. Wtedy procesor przenosi otrzymany bajt z bufora układu UART gdzieś do pamięci, lub przekazuje układowi UART do wysłania kolejny bajt. Układy 8250 i 16450 posiadają bufor o rozmiarze jednego bajtu. To oznacza, że za każdym razem, kiedy jeden bajt jest wysłany lub odebrany procesor otrzymuje sysgnał przerwania. Przy małych prędkościach wszystko jest w porządku. Lecz przy wyższych prędkościach, procesor jest tak zajęty obsługą układu UART, że nie ma czasu na inne zadania. W niektórych przypadkach procesor nie nadąża z samą obsługą układu UART i bajt zawarty w buforze ukladu UART jest nadpisywany (niszczony) ponieważ został tam umieszczony następny bajt, zanim poprzedni został przeniesiony w bezpieczne miejsce.
To jest sytuacja, w której przydaje się układ 16550A. Ten układ posiada bufor FIFO o rozmiarze 16 bajtów. To znaczy, że może wysłać lub odebrać 16 bajtów, zanim jest zmuszony wysłać do procesora sygnał przerwania. Poza tym prócz tego ,ze sam układ może poczekać, to jeszcze procesor może przenieść za jednym razem wszystkie 16 bajtów. Choć poziom generowania przerwań rzadko jest równy 16, jest to nadal ogromna przewaga nad innymi układami UART, posiadajacymi 1-no bajtowy bufor. Procesor otrzymuje mnej przerwań i ma czas na obsługę innych zadań. Dane nie są gubione i wszyscy są szczęśliwi. (Istnieją jeszcze układy 16550, lecz są traktowane tak, jak 16450 ze względu na blędy jakie zawierają).
Zasadniczo układy 8250 i 16450 powinny się sprawować poprawnie do prędkości 38400 bps. Przy wyższych prędkościach możesz mieć okazję zobserwować utratę danych i zmiejszenie czasu odpowiedzi przy pracy zdalnej. Inne systemy operacyjne (nie sprzeczajmy się co to jest sytem operacyjny), jak DOS nie są wielozadaniowe więc mogą sobie lepiej radzić z układami 8250 lub 16450. Dlatego niektórzy nie widzą utraty danych, zanim nie przesiądą się na Linux-a.
Inteligentne karty wieloportowe nie posiadają układów UART, lecz układy DSP, które wykonują dodatkowe buforowanie i sterowanie jescze bardziej odciążając procesor. Np Cyclades Cyclom i Stallion EasyIO korzystają z układu Cirrus Logic CD-1400 RISC.
Pamiętaj, że głupie układy UART nie są złe. Nie są wystarczająco dobre do dużych prędkości. Nie powinieneś mieć żadnych kłopotów podłączająć mysz lub terminal do portu pracującego na takim układzie. Lecz w przypadku modemów o wysokiej prędkości 16550A jest koniecznością.
Karty z układami 16550 możesz kupić niewiele drożej, zapytaj się swego sprzedawcy jakiego rodzaju układy znajdują się na karcie. Lub jeśli chcesz unowocześnić swoją kartę wystarczy nabyć układy 16550A i włożyć w miejsce starych 16450. Mają zgodny rozkład nóżek. Część kart ma montowane układy 16450 na specjalnych podstawkach, jeśli nie możesz sprzedać starą kartę i kupić nową. Prawdopodobnie zaoszczędzisz sobie w ten sposów bielu kłopotów. Ich cena nie powinna przekroczyć US$ 50.
/dev/cuaN itt>/dev/ttySN devices? Różnica polega na sposobie otwierania tych
urządzeń. Urządzenia wejściowe /dev/ttySN są
otwierane w trybie blokowania aż do sygnału CD (ktoś się
właśnie połączył). Więc jeśli ktoś chce korzystać z urządzenia
/dev/cuaN nie ma konfliktu z programem
nasłuchującym urządzenie /dev/ttySN.
To rozróżnienie jest potrzebne aby umożliwić przez ten sam
modem połączenia przychodzace (ttySN) i wychodzące (cuaN).
Upewnij się, że stosujesz odpowiednia składnie w pliku
/etc/inittab zgodną z twoją wersja programu
init. Różne wersje tego programu obecne w świecie Linux-a
mają różną składnię. Również upewnij się, że używasz poprawnej
składni dla twojej wersji getty.
Ten problem może się pojawiać, gdy DCD i DTR nie są ustawione
poprawnie. DCD powinno być włączone tylko wtedy, gdy jest
rzeczywiste połączenie (gdy ktoś do ciebie zadzwonił i w
danej chwili wykorzystuje modem i port szeregowy), a nie kiedy
getty nasłuchuje na porcie. Sprawdź czy twój modem jest
skonfigurowany, aby włączać DCD tylko podczas trwania
połączenia. DTR powinno być włączone zawsze, gdy coś sprawdza
lub nasłuchuję linię, jak getty, kermit lub inny
program komunikacyjny.
Inną powszechną przyczyną omunikatu ``device busy'' (urządenie zajęte) jest skonfigurownie portu szeregowego w taki sposob, że używa przerwania IRQ przydzielonego do innego urządzenia. Podczas inicjowania portu sterownik, pyta się Linux-a o pozwolenie na wykorzystanie przerwania sprzętowego. Linux pamięta, które przerwanie zostało mu przydzielone i jeśli twoje przerwanie zostało już przydzielone, urządzenie (np. port szeregowy) nie bedzie mogło zostać prawidłowo zainicjowane. Urządzenie nie ma za bardzo jak powiedzieć Ci o tym, poza przypadkiem kiedy próbujesz go użyc. Przekazuje wtedy błąd ``device busy''. Sprawdź przerwania wszystkich swoich kart (szeregowych, sieciowych, SCSI, itd.). Szukaj konfliktów przerwań IRQ.
Upewnij się, że Twój modem jest skonfigurowany
poprawnie. Przyjżyj się rejestrom E i Q. Przyczyną
może być pogawędka modemu z programem getty.
Upenij się ,że poprawnie wywołujesz getty w pliku
/etc/inittab/. Używanie błędnej składni lub
nieporawnych nazw urządzeń jest przyczyną licznych kłopotów.
Upewnij się, że /etc/gettydefs ma poprawną składnie.
W tym celu wydaj polecenie:
linux# getty -c /etc/gettydefs
Przyczyna może leżeć w niepoprawnej inicjalizacji programu
uugetty. Patrz pytanie ``getty lub uugetty
nadal nie pracuje poprawnie''.
Prawdopodobnie konflikt IRQ. Upewnij się, żę IRQ nie są
wspólne. Sprawdź wszystkie karty (szeregowe, sieciowe, SCSI,
itd.). Upewnij się, że ustawienia mikroprzełączników i
parametry ustawiane przez setserial są poprawne dla
wszystkich urządzeń szeregowych. Sprawdź
/proc/interrupts i /proc/ioports w
poszukiwaniu konfliktów.
uugetty nie uruchimi się ponownie. Przyczyna może leżeć w tym, że kiedy spada sygnał DTR twój
modem się nie zeruje. Widziałem jak diody RD i SD na moim
modemie szalały, kiedy cos takiego mi się zdarzyło. Twój modem
musi się zerować. Wiekszość modemów zgodnych z Hayes wymaga
ustawienia &D3, lecz w moim USR Courier musiałem
ustawić &D2 i S13=1. Sprawdź w dokumnetacji
modemu.
Prawdopodobnie pozycja dotycząca tego terminala w pliku
/etc/gettydefs nie zawiera opcji CLOCAL. I
prawdopodobnie nie używasz pełnego kabla bezmodemowego (full
null modem cable). Musisz ustawić opcję CLOCAL, dzieki
której Linux ignoruje sygnały strujące modemem. To powinno
wyglądać mniej więcej tak:
# 38400 bps Dumb Terminal entry
DT38400# B38400 CS8 CLOCAL # B38400 SANE -ISTRIP CLOCAL #@S @L login: #DT38400
# 19200 bps Dumb Terminal entry
DT19200# B19200 CS8 CLOCAL # B19200 SANE -ISTRIP CLOCAL #@S @L login: #DT19200
# 9600 bps Dumb Terminal entry
DT9600# B9600 CS8 CLOCAL # B9600 SANE -ISTRIP CLOCAL #@S @L login: #DT9600
zabij (kill) proces getty, tak aby
uruchomil się następny, który odczyta nowe ustawienia.
agetty:
dodaj do wiersza agetty w pliku /etc/inittab
parametr -L. W ten sposób zmusisz agetty do
ignorowania sygnałów sterowania modemem. Następnie zrestartuj
program init wydając polecenie init q. Odpowiedni
wpis w pliku /etc/inittab powinien wyglądać mniej
więcej tak:
s1:345:respawn:/sbin/agetty -L 9600 ttyS1 vt100
Jeśli próbujesz uruchomić swój modem z prędkością co najmniej 19200 bps i nie posiadasz układów UART 16550A, powinieneś je wymienić. Patrz rozdział Co to jest UART.
To prawda. Linux nie wykonuje podczas startu rozpoznania IRQ, jedynie strawdza istnienie urządzeń szeregowych. Dlatego nie przejmuj się tym co wypisuje podczas startu na temat IRQ, ponieważ po prostu zakłada standardową konfiguracje. Dzieje się tak ponieważ wykrywanie przerwań IRQ nie jest pewne i mogą być odczytane niepoprawnie.
Dlatego pomimo, że moj ttyS2 jest skonfigurowany na IRQ
5 nadal widzę:
Jan 23 22:25:28 misfits vmunix: tty02 at 0x03e8 (irq = 4) is a 16550A
Musisz powiedzieć Linux-owi o przerwaniach IRQ, korzystając z
programu setserial. Po uruchomieniu systemu możesz zajżeć
do pliku /proc/interrupts i zobaczyć, jak zostały
przydzielone.
rz i/lub sz nie działają kiedy pracuje na moim Linux-ie przez modem. Jeśli przy próbie transferu plików Linux szuka urządzenia
/dev/modem sprawdź zawartość plików
/etc/profile i /etc/csh.cshrc. W niektórych
dystrybucjach (szczególnie w Slackware) może tam być
zdefiniowana garść aliasów, które wywołują całe
zamieszanie. Poraw je lub po prostu usuń.
Tak się dzieje, gdy wyślesz na konsolę wirtualną dane binarne,
lub czasami przy połączeniach przez porty szeregowe. Jednym ze
sposobów na przywrócenie normalengo wyglądu ekranu jest
napisanie echo ^v^[c lub:
linux% echo
<ctrl>v<esc>c
getty lub uugetty nadal nie dziala. getty_ps posiada opcję DEBUG. Zmień plik
konfiguracyjny /etc/conf.{uu}getty.ttySN i dodaj
opcję DEBUG=NNN. NNN może przyjmować kombinacje
podanych poniżej wartości ( w zależności o tego jakie
informacje chcesz otrzymywać):
D_OPT 001 ustawianie opcji
D_DEF 002 przetwarzanie domyśłnych plików konfiguracyjnych
D_UTMP 004 obsługa utmp/wtmp
D_INIT 010 inicjowanie liniii (INIT)
D_GTAB 020 przetwarzanie pliku gettytab
D_RUN 040 inna diagnostyka czasu wykonania
D_RB 100 odpluskwianie obcji ringback
D_LOCK 200 obsługa pliku blokady
D_SCH 400 obsługa zaplanowanych zdarzeń
D_ALL 777 wszystko
Na początek mozna ustawić DEBUG=010.
Jeśli korzystasz z syslogd, informacje odpluskwiające
będą pojawiać się w plikach dzienników. Jeśli syslogd nie
jest uruchomiony komunikaty dotyczące odpluskwiania getty
będa zachowywane w /tmp/getty:ttySN, a dotyczące
uugetty w pliku /tmp/uugetty:ttySN oraz w
pliku /var/adm/getty.log. Przypatrz się tej informacji
i postaraj się zrozumieć co się dzieje. Prawdobodobnie
będziesz musiał dostroić kilka parametrów w plikach
konfiguracyjnych i ponwnie skonfigurwać modem.
Możesz spróbować mgetty. Część ludzi miała z nim więcej szczęścia.
agetty(8), getty(1m), gettydefs(5),
init(1), login(1), mgetty(8), setserial(8)term
polskie:
pl.com.os.linux:
wszystkie pytania dotyczace Linux-a
angielskie
comp.os.linux.answers
FAQs, How-To's, READMEs, etc. about Linux.
comp.os.linux.hardware
Hardware compatibility with the Linux operating system.
comp.os.linux.networking
Networking and communications under Linux.
comp.os.linux.setup
Linux installation and system administration.
majordomo@vger.rutgers.edu, zawierający
``subscribe linux-serial''. Jeśli wyślesz słowo
``help'' otrzymasz list z informacjami jak posługiwać się listą
(po angielsku). Ten serwer obsluguje wiele innych list
poświęconych Linux-owi. Wyśli polecenie ``lists'', a
otrzymasz spis aktywnych list.
http://www.cyclades.com.
Nie było możliwe napisania tego dokumentu samemeu. Jego
większa część została napisana przeze mnie, przepisałem również
wiele cudzych poprawek aby zachować ciągłość schematu i
stylu. Dziękuje wszystkim, którzy mi pomogli lub skomentowali
ten dokument. Pełna lista adresów byłaby abyt długa (ponad 50
adresów). Sczególne podziękowania należą sie Tedowi T'so, który
cierpliwie odpowiadał na pytania dotyczące urządzeń szeregowych,
Krisowi Glesonowi, który opiekuje się pakietem getty_ps i
Gertowi Doeringowi, opiekunowi mgetty.
Zdaje sobie sprawę, że niniejsze tłumaczenie zawiera mnóstwo błędów. Niestety nie jestem w stanie dokładnie sprawdzić całego dokumentu i świadomie pozostawiam tę pracę czytelnikowi. Będę wdzięczny za wszelkie uwagi na temat tego dokumentu, wytykanie błędów, literówek, składni i wszelkie inne, które mogą przyczynić się do jego ulepszenia.
Wszelkie tego typu uwagi proszę przesyłać na adres piotr.pogorzelski@ippt.gov.pl
Inne przetłumaczone dokumenty można znaleźć na stronie http://www.jtz.org.pl/. Zapraszamy!.
piotr.pogorzelski@ippt.gov.pl.
Koniec Serial-JTZ, polskiego tłumaczenia Serial-HOWTO czy jak to się zwie. doc-linux-pl-2002.06.14.orig/html/Shadow-Password-HOWTO.pl.html 0100664 0001750 0001750 00000223301 06770264140 022567 0 ustar coven coven
Jest to dokument z serii HOWTO (czyli Jak To Zrobić). Opisuje on jak i dlaczego instalować obsługę "shadow password" na swoim Linux-ie. Zawarte jest także kilka przykładów na używanie pewnych właściwości pakietu Shadow Suite.
Podczas instalacji pakietu oraz używania jego narzędzi musisz być zalogowany jako "root". Podczas instalacji będziesz dokonywał pewnych zmian do oprogramowania systemowego i zalecane jest, abyś zrobił kopię tego oprogramowania. Zalecam też, abyś przeczytał i zrozumiał wszystkie instrukcje zawarte tutaj zanim zaczniesz.
Dodane sekcje: Dodałem sekcję na temat dlaczego mógłbyś niechcieć instalować pakietu Shadow Suite. Dodałem sekcję jak uaktualnić xdm-a. Dodałem sekcję jak zmusić do działania specjalne właściwości pakietu Shadow Suite. Dodałem sekcję zawierającą często zadawane pytania. Poprawki/Uaktualnienia: Poprawiłem odwołania html do sunsite-a. Poprawiłem sekcję na temat wu-ftpd, aby odzwierciedlała dodawanie -lshadow do pliku Makefile. Poprawiłem kilka literówek. Zmieniłem sekcję na temat wu-ftpd, aby obsługiwał ELF. Uaktualniłem cały dokument, aby odzwierciedlał problemy bezpieczeństwa w różnych programach. Dodałem rekomendację pakietu Linux Shadow Suite napisanego przez Marka Michałkiewicza
Najnowszą wersję oryginału tego dokumentu można ściągnąć z
ftp.icm.edu.pl z katalogu
/pub/Linux/sunsite/docs/HOWTO. Inne formaty znajdują się
w katalogu other-formats. Albo poprzez sieć WWW z
sunsite.icm.edu.pl. Można też bezpośrednio
od autora. Autor będzie też
wysyłał nowe wersje na grupę dyskusyjną
comp.os.linux.answers
Dokument ten jest także rozprowadzany wraz z dystrybucją pakietu
Shadow-YYDDMM.
Na temat nowych wersji tłumaczenia zobacz sekcję Od tłumacza.
Proszę wszelkie komentarze, uaktualnienia czy sugestie wysyłać do mnie. Im szybciej otrzymam pocztę tym szybciej mogę poprawić ten dokument. Jeśli masz jakieś uwagi na jego temat, to wyślij je bezpośrednio do mnie, ponieważ bardzo rzadko odwiedzam grupy dyskusyjne.
W chwili obecnej większość dystrybucji Linux-a nie instaluje domyślnie pakietu
Shadow Suite. Dotyczy to Slackware 2.3, Slackware 3.0 i innych
popularnych dystrybucji. Jednym z powodów tego jest to, że jeśli zapłacono
jakąś kwotę za Shadow Suite to prawa co do redystrybucji nie były
do końca jasne. Linux używa licencji GNU, która pozwala na umieszczanie go
w dowolnych pakietach (jak np. dystrybucje CD-ROM) i pobieranie za nie opłaty.
Obecny opiekun pakietu Shadow Suite,
Marek Michałkiewicz otrzymał
źródła oryginału na licencji w stylu BSD, która pozwala na dystrybucję.
Teraz, kiedy już sprawy praw kopiowania są rozwiązane, spodziewane jest, że
przyszłe dystrybucje będą zawierać domyślnie przesłanianie haseł. Jednak do
tego czasu, będziesz musiał je samemu instalować.
Jeśli instalowałeś swoją dystrybucję z CD-ROM-u, to pomimo, że dystrybucja
nie zainstalowała Shadow Suite niektóre pliki, których potrzebujesz
mogą się znajdować na CD-ROM-ie.
Wersje pakietu 3.3.1, 3.3.1-2 i shadow-mk mają problemy dotyczące bezpieczeństwa ze swoim programem login i kilkoma innymi programami typu suid root i nie powinny być już używane.
Wszystkie potrzebne pliki są dostępne poprzez anonimowane ftp oraz WWW.
W Linux-ie bez zainstalowanego pakietu Shadow Suite informacje
o użytkowniku wraz z hasłem trzymane są w pliku /etc/passwd.
Hasło znajduje się tam w formie zakodowanej (encrypted). Jednak jeśli
spytasz jakiegoś eksperta od kryptografii, to powie ci on/ona, że
hasło jest w postaci "encoded", a nie "encrypted" ponieważ używając
funkcji crypt(3), tekstowi jest przypisywany łańcuch pusty a hasło
jest kluczem. Dlatego, od tego momentu będę używał określenia "encoded".
Algorytm używany do kodowania hasła jest technicznie określany jako algorytm działający w jedną stronę. Jest to algorytm, który jest łatwy do zastosowania w jedną stronę, ale bardzo trudny do złamania. Więcej na ten temat znajdziesz w sekcji 2.4 albo na stronie podręcznika systemowego dotyczącej funkcji crypt(3).
Kiedy użytkownik wybiera hasło, albo jest mu ono przydzielone, jest ono
kodowane losowo generowaną wartością zwaną salt (sól). Oznacza to,
że każde hasło może zostać zakodowane na 4096 sposobów. Wartość salt
jest potem zapisywana razem z zakodowanym hasłem.
Kiedy użytkownik się wlogowuje i podaje hasło, najpierw pobierana
jest wartość salt z zakodowanego hasła. Następnie pobrane
hasło zostaje zakodowane pobraną wartością, i porównane z zapisanym
zakodowanym hasłem. Jeśli łańcuchy te są identyczne, to użytkownik
zostaje "wpuszczony" do systemu. Jest bardzo trudno (ale nie jest
to niemożliwe) wziąć losowo zakodowane hasło i otrzymać hasło
rozkodowane. Chociaż, w każdym systemie z większą liczbą
użytkowników, przynajmniej kilka haseł będzie zwykłymi słowami albo
jakąś wariacją zwykłych słów.
Włamywacze więdzą o tym wszystkim i po prostu kodują słownik ze
słowami i popularnymi hasłami wszytkimi możliwymi wartościami
salt. Potem porównają wyniki z zawartością twojego pliku
/etc/passwd. Jak znajdą jakiś identyczny łańcuch, to mają
hasło na następne konto. Nazywane jest to atakiem
słownikowym i jest to jeden z najpopularniejszych sposobów na
pozyskiwanie dostępu do systemu przez osoby nieuprawnione.
Jeśli się nad tym zastanowisz, to zobaczysz, że 8-znakowe hasło może zostać zakodowane na 4096 * 13 sposobów. Tak więc słownik składający się powiedzmy z 400.000 popularnych słów, nazw, imion, haseł i ich prostych wariacji zmieściłby się z łatwością na dysku o pojemności 4GB. Włamywacz musi go tylko posortować i sprawdzić czy któryś z łańcuchów nie jest hasłem. Dysk o pojemności 4GB można kupić za ok. 1000 dolarów, tak więc mieści się to w możliwościach większości włamywaczy systemowych.
Jeśli włamywacz zdobędzie twój plik /etc/passwd, to musi
on zakodować swój słownik kluczem, który znajduje się w tym
pliku. Metoda ta może być wykorzystana przez przeciętnego
nastolatka z kilkoma megabajtami na dysku i komputerem klasy 486.
Nawet bez dużej ilości wolnego miejsca na dysku, narzędzia takie jak crack(1) mogą zwykle złamać przynajmniej kilka haseł z systemu z dostatecznie dużą ilością użytkowników (zakładając, że użytkownicy mają możliwość samemu wybierać sobie hasła).
Plik /etc/passwd zawiera także takie informacje jak ID
użytkownika i ID grupy, które są używane przez większość
programów. Dlatego plik /etc/passwd musi
pozostać odczytywalny dla każdego. Jeśli chciałeś właśnie zmienić
prawa dostępu do pliku /etc/passwd tak, żeby nikt nie mógł
go czytać (oprócz "root-a"), to pierwszym symptomem jaki byś
zauważył, to to, że przy wydaniu polecenia ls -l
pojawiłyby się numery zamiast nazw użytkowników.
Pakiet Shadow Suite rozwiązuje ten problem poprzez
umieszczenie haseł w innym pliku (z reguły jest to
/etc/shadow). Plik /etc/shadow ma tak ustawione
prawa dostępu, że nie może go czytać nikt, oprócz
"root-a". Niektóre programy jak np. xlock, nie muszą mieć
możliwości zmiany haseł, ale tylko ich odczytu. Programy te mogą
albo być uruchamiane z prawem "suid root", albo możesz dodać grupę
shadow, która miałaby tylko prawo odczytu pliku
/etc/shadow. Program ten może wtedy należeć do grupy
"shadow" i być uruchamiany z prawem "sgid".
Przenosząc zakodowane hasła do innego pliku, efektywnie zabraniamy włamywaczom dostępu do nich, co uniemożliwia ataki słownikowe.
Dodatkowo pakiet Shadow Suite posiada wiele innych zalet:
/etc/login.defs)Instalacja pakietu Shadow Suite przyczynia się do
zwiększenia bezpieczeństwa sieci opartej na Linux-ie, ale pozostaje
jeszcze wiele innych rzeczy do zrobienia, aby zwiększyć
bezpieczeństwo takiej sieci. Z czasem pojawi się seria HOWTO
poświęcona bezpieczeństwu.
Na stronie poświęconej bezpieczeństwu w Linux-ie zawarte są różne informacje na ten temat jak również ostrzeżenia o znanych dziurach w systemie.
Jest kilka okoliczności i konfiguracji, w których instalacja
pakietu Shadow Suite nie byłaby dobrym pomysłem:
Nieprzesłonięty plik /etc/passwd ma następujący format:
identyfikator:hasło:UID:GID:imie_nazw:katalog:powłoka
Gdzie:
identyfikatorNazwa (login) użytkownika
hasłoZakodowane hasło
UIDNumer użytkownika
GIDNumer domyślnej grupy dla użytkownika
imie_nazwImię i nazwisko użytkownika - Właściwie pole to nazywa się GECOS (General Electric Comprehensive Operating System) i mogą tam być zapisane inne dane niż tylko imię i nazwisko Polecenia Shadow i strony podręcznika systemowego nazywają to pole polem komentarza.
katalogKatalog domowy użytkownika (pełna ścieżka)
powłokaPowłoka dla danego użytkownika (pełna ścieżka)
Na przykład:
login:Nkjg97jh7yff8:503:100:Imię Nazwisko:/home/login:/bin/bash
Gdzie Nk jest wartocią salt a
jg97jh7yff8 jest zakodowanym hasłem. Zakodowane hasło z
kluczem mogłoby równie dobrze wyglądać tak: ghHFgj75fR8iP
a te dwa łańcuchy to dokłanie te same hasła. Jest 4096 możliwości
zakodowania pojedynczego hasła. {Przykładowym hasłem jest tutaj
'hasło' naprawdę zły przykład hasła.}
Jak już pakiet Shadow Suite jest zainstalowany, to plik
/etc/passwd zawiera:
login:x:503:100:Imię Nazwisko:/home/login:/bin/bash
Znaczek "x" w tym przypadku jest po prostu czymś co wypełnia miejsce
hasła. Format pliku /etc/passwd się nie zmienił, zmieniło się
tylko miejsce przechowywania zakodowanego hasła. Oznacza to, że
każdy program, który tylko czyta plik /etc/passwd,a nie
zapisuje w nim hasła, będzie nadal działał poprawnie.
Hasła znajdują się obecnie w pliku /etc/shadow. (jest to
domyślna nazwa)
Plik /etc/shadow zawiera następujące informacje:
login:hasło:ostatnio_1970:może:musi:ostrz:dni:dni_1970:zarez
Gdzie:
loginpatrz /etc/passwd
hasłoZakodowane hasło
ostatnio_1970Ilość dni od 1 Stycznia 1970, kiedy hasło było ostatnio modyfikowane
możeIlość dni w przeciągu, których hasło może być zmienione
musiIlość dni, po której hasło musi zostać zmienione
ostrzIlość dni przed wygaśnięciem hasła od jakiej należy zacząć informować użytkownika o wygaśnięciu hasła.
dniIlość dni, po której hasło wygasa i konto jest blokowane
dni_1970Ilość dni od 1 Stycznia 1970, po której konto jest blokowane
zarezPole zarezerwowane
Poprzedni przykład mógł więc wyglądać tak:
login:Nkjg97jh7yff8:9479:0:10000::::
Ze strony podręcznika systemowego "man":
"crypt jest funkcją kodującą hasło. Oparta jest na
algorytmie DES (Data Encryption Standard) z dozwolonymi wariacjami
(między innymi), aby zniechęcić do sprzętowych rozwiązań
poszukiwania klucza.
Kluczem jest podane przez użytkownika hasło. [Zakodowany łańcuch jest wartościami NULL]
Salt jest łańcuchem 2-znakowym wybranym ze zbioru
[a-zA-Z0-9]. Łańuch ten jest użyty po to, aby zaburzyć algorytm w
jeden z 4096 sposobów.
Biorąc 7 najmniej znaczących bitów każdego znaku z klucza otrzymujemy 56-bitowy klucz. Ten 56-bitowy klucz jest używany, do powtórnego kodowania stałego łańcucha (zwykle są to znaki NULL). Zwrócona wartość wskazuje na zakodowane hasło - serię 13 drukowalnych znaków ASCII (dwa pierwsze znaki reprezentują wartość salt). Wartość zwracana wskazuje na stałe dane, których zawartość jest zmieniana przy każdym wywołaniu.
Uwaga: Liczba możliwych wartości klucza to 2^56 = 7,2E16 (około 72 biliardów). Wyczerpujące poszukiwania tego klucza są możliwe przy wykorzystaniu wielu równolegle współpracujących komputerów. Oprogramowanie, takie jak crack(1), jest dostępne i szuka ono takich kluczy, które z reguły używane są przez ludzi. Dlatego właśnie przy wybieraniu hasła powinno się unikać przynajmniej zwykłych słów. Zaleca się, używanie programu passwd(1), które podczas zmiany hasła sprawdza czy nowe hasło nie jest przesadnie proste.
Algorytm DES ma w sobie pewne kruczki, które czynią użycie
interfejsu crypt(3) bezużytecznym w przypadku innym niż
autentykacja haseł. Jeśli masz zamiar używać interfejsu crypt(3)
do kryptografii nie rób tego: zdobądź dobrą książkę na temat
kodowania (encryption) i jedną z szeroko dostępnych bibliotek DES."
Większość pakietów Shadow Suite zawiera kod zwiększający
ilość znaków w haśle do 16. Eksperci od DES-a są temu przeciwni,
ponieważ w takim przypadku kodowanie najpierw odbywa się dla lewej
strony dłuższego hasła, a potem dla prawej strony. Z powodu tego
jak działa crypt, może to stworzyć mniej bezpiecznie
zakodowane hasło niż wtedy, gdy użyte zostałoby hasło
krótsze. Dodatkowo, jest mało prawdopodobne, żeby użytkownik był w
stanie zapamiętać hasło 16-znakowe.
Trwają w tej chwili prace, które mają na celu zastąpienie
dotychczasowego algorytmu autentykacji czymś bardziej bezpiecznym
oraz z obsługą dłuższych haseł (szczególnie algorytmem MD5) oraz
pozostawienie kompatybilności z metodą wykorzystującą crypt.
Jeśli szukasz dobrej książki na temat kodowania polecam:
"Applied Cryptography: Protocols, Algorithms, and Source Code in C"
by Bruce Schneier <schneier@chinet.com>
ISBN: 0-471-59756-2
NIE UŻYWAJ PAKIETÓW WYMIENIONYCH W TEJ SEKCJI, SĄ W NICH PROBLEMY Z BEZPIECZEŃSTWEM.
Oryginał pakietu Shadow Suite został napisany przez
John F. Haugh II.
Jest kilka wersji, które były używane na Linux-ie:
shadow-3.3.1shadow-3.3.1-2 to łata przeznaczona specjalnie na
Linux-a zrobiona przez
Florian La Roche <flla@stud.uni-sb.de>. Zawiera ona
także dalsze ulepszenia.shadow-mk został skomponowany specjalnie dla
Linux-a.Pakiet shadow-mk zawiera pakiet shadow-3.3.1
dystrybuowany przez John F. Haugh II wraz z łatą
shadow-3.3.1-2 patch, kilka poprawek zrobionych przez
Mohan Kokal <magnus@texas.net>,
które uczyniły instalację o wiele łatwiejszą, łatę zrobioną przez
Joseph R.M. Zbiciak, która eliminuje dziury w programie
/bin/login związane z opcjami -f, -h oraz kilka innych łat.
Pakiet shadow-mk był pakietem poprzednio
rekomendowanym, ale powinien zostać zamieniony z powodu
problemów z bezpieczeństwem związanych z programem login.
W pakietach 3.3.1, 3.3.1-2 oraz shadow-mk są problemy związane z
programem login. Błąd ten to niesprawdzanie długości
podawanego identyfikatora. Powoduje to przepełnienie bufora, co z
kolei powoduje załamania (crashes) programu albo gorzej. Podobno to
przepełnienie bufora może być wykorzystane przez kogoś, kto posiada
konto w systemie w połączeniu z bibliotekami dzielonymi, aby
uzyskać przywileje root-a. Nie będę opisywał jak dokładnie
działa ten błąd ponieważ jest dużo systemów Linux-owych, które są
zarażone, ale systemy z zainstalowanymi tymi pakietami Shadow
Suite oraz większość systemów w wersji przed-ELF bez
pakietu Shadow Suite są podatne na atak!
Więcej informacji na ten temat znajdziesz na stronie poświęconej bezpieczeństwu w Linux-ie. (Shared Libraries and login Program Vulnerability)
Jedyny polecany pakiet Shadow Suite jest wciąż w wersji
BETA, chociaż najnowsze wersje są bezpieczne w środowisku produkcji
i nie zawierają podatnego na ataki programu login.
W pakiecie używane jest następujące nazewnictwo:
shadow-RRMMDD.tar.gz
gdzie RRMMDD oznacza datę wprowadzenia pakietu w obieg.
Wersja ta ostatecznie będzie wersją 3.3.3, kiedy
zakończone zostaną testy w wersji BETA, a obsługiwana jest przez
Marka Michałkiewicza <marekm@i17linuxb.ists.pwr.wroc.pl>.
Dostępna jest jako shadow-current.tar.gz.
Dostępna jest także pod adresem ftp.icm.edu.pl.
Powinieneś użyć najnowszej dostępnej wersji.
NIE powinieneś używać wersji starszej niż
shadow-960129 ponieważ występuje tam opisany powyżej
problem z programem login.
Jeśli piszę o pakiecie Shadow Suite, to mam na myśli ten
właśnie plik. Zakłada się też, że tej właśnie wersji używasz.
Aby napisać ten dokument użyłem tej właśnie wersji pakietu.
Jeśli wcześniej używałeś pakietu shadow-mk, powinieneś
zaktualizować go do tej wersji i ponownie skompilować wszystko to,
co pierwotnie przekompilowałeś,
Pakiet ten zawiera zastępcze wersje dla programów:
su, login, passwd, newgrp, chfn, chsh, id
Pakiet ten zawiera także nowe programy:
chage, newusers, dpasswd, gpasswd, useradd, userdel, usermod, groupadd,
groupdel, groupmod, groups, pwck, grpck, lastlog, pwconv, pwunconv.
Dodatkowo znajduje się tam także biblioteka libshadow.a
przeznaczona do pisania i kompilowania programów, które potrzebują
dostępu do haseł użytkowników.
Zawarte są także strony podręcznika systemowego do wszystkich programów.
Znajduje się tam także plik konfiguracyjny dla programu login,
który zostanie zainstalowany jako /etc/login.defs.
Pierwszym krokiem po ściągnięciu programu jest rozpakowanie
go. Pakiet jest w formie starowanej i skompresowany programem
gzip, tak więc najpierw przenieś go do /usr/src, a potem
napisz:
tar -xzvf shadow-current.tar.gz
Powstanie katalog /usr/src/shadow-RRMMDD, w którym znajdą
się źródła pakietu.
Pierwszą rzeczą jaką musisz zrobić, to skopiować odpowiednie pliki Makefile i config.h:
cd /usr/src/shadow-RRMMDD cp Makefile.linux Makefile cp config.h.linux config.h
Potem powinieneś przejrzeć plik config.h. Zawiera on
definicje dla niektórych opcji konfiguracyjnych. Jeśli używasz
zalecanego pakietu, to polecam wyłączenie na początek
przesłanianie haseł grup.
Domyślnie opcja ta jest włączona. Aby to wyłączyć, wyedytuj plik
config.h i zmień #define SHADOWGRP na
#undef SHADOWGRP. Na początek proponuje to wyłaczyć, a później
jak będziesz chciał haseł dla grup i administratorów grup, to
możesz przekompilować pakiet. Jeśli zostawisz tę opcję włączoną
musisz stworzyć plik /etc/gshadow.
Włączanie opcji pozwalającej na dłuższe hasła nie jest zalecane - patrz wyżej.
Opcja AUTOSHADOW została zaprojektowana, aby umożliwić
działanie programom, które ignorują przesłanianie
haseł. Teoretycznie brzmi to dobrze, ale niestety nie działa
poprawnie. Jeśli właczysz tę opcję i program zostanie uruchomiony z
przywilejami "root-a", może on wywołać funkcję getpwnam()
jako "root", a później zapisać zmienioną pozycję spowrotem do
pliku /etc/passwd (i hasło nie jest już przesłonięte).
Do takich programów zaliczają się chfn i chsh. (Nie możesz obejść
tego przez zamianę rzeczywistego uid z efektywnym uid przed
wywołaniem funkcji getpwnam() ponieważ root także może
używać chfn i chsh.)
To samo ostrzeżenie jest słuszne jeśli kompilujesz bibliotekę libc,
która posiada opcję SHADOW_COMPAT, która robi to
samo. Nie powinna ona być używana! Jeśli zakodowane hasła
zaczną się pojawiać spowrotem w pliku /etc/passwd, to to
właśnie jest przyczyną.
Jeśli używasz wcześniejszej wersji biblioteki niż 4.6.27,
będziesz musiał zrobić trochę więcej zmian w pliku
config.h i Makefile.
W pliku config.h zmień:
#define HAVE_BASENAME
na:
#undef HAVE_BASENAME
A następnie w pliku Makefile zmień:
SOBJS = smain.o env.o entry.o susetup.o shell.o \
sub.o mail.o motd.o sulog.o age.o tz.o hushed.o
SSRCS = smain.c env.c entry.c setup.c shell.c \
pwent.c sub.c mail.c motd.c sulog.c shadow.c age.c pwpack.c rad64.c \
tz.c hushed.c
na:
SOBJS = smain.o env.o entry.o susetup.o shell.o \
sub.o mail.o motd.o sulog.o age.o tz.o hushed.o basename.o
SSRCS = smain.c env.c entry.c setup.c shell.c \
pwent.c sub.c mail.c motd.c sulog.c shadow.c age.c pwpack.c rad64.c \
tz.c hushed.c basename.c
Zmiany te powodują zawarcie kodu z basename.c, który zawiera
się w libc 4.6.27 i późniejszych.
Dobrym pomysłem będzie zrobienie kopii zapasowych programów, które
zostaną zamienione przez Shadow Suite. W dystrybucji
Slackware 3.0 są to:
Pakiet w wersji BETA ma możliwość wykonania tego poprzez program
make, ale jest to w komentarzu w pliku Makefile, ponieważ różne
dystrybucje umieszczają te programy w różnych miejscach. Można to
zrobić pisząc: make save, ale najpierw trzeba skasować
znaki # z pliku Makefile od linii: save:
Powinieneś także zrobić kopię zapasową pliku /etc/passwd,
ale bądź ostrożny, żebyś nie zmazał programu passwd w katalogu
/etc.
Aby zainstalować pakiet musisz być zalogowany jako "root".
Uruchom make, aby skompilować programy wykonywalne:
make all
Możesz zobaczyć ostrzeżenie: rcsid defined but not
used. Wszystko jest w porządku, ponieważ autor używa wersji
kontrolnej pakietu.
Jeśli coś poważnie pójdzie nie tak, byłoby dobrze, gdybyś miał dyskietkę startową. Jeśli masz dyskietki boot/root z czasów instalacji, to w porządku, w innym przypadku przeczytaj Bootdisk-HOWTO, które opisuje jak zrobić dyskietkę startową.
Powinieneś także przenieść strony podręcznika systemowego, które
zostaną zastąpione. Nawet jeśli jesteś na tyle odważny, że
instalujesz Shadow Suite bez kopii zapasowej, to i tak
będziesz chciał przenieść stare strony podręcznika
systemowego. Nowe strony normalnie nie usunęłyby starych, ponieważ
te drugie są przypuszczalnie skompresowane.
Możesz użyć takiej kombinacji poleceń: man -aW polecenie i
locate polecenie, aby zlokalizować strony, które mają być
usunięte czy przeniesione. Raczej łatwiej zrobić to przed
poleceniem make install.
Jeśli używasz dystrybucji Slackware 3.0, to oto strony, które powinieneś usunąć/przesunąć:
W katalogu /var/man/cat[1-9] mogą znajdować się strony o
tych samych nazwach, które także powinny zostać usunięte/przeniesione.
Jesteś gotów, aby napisać (zrób to jako "root"):
make install
Zainstaluje to nowe programy i programy zastępcze oraz ustawi odpowiednie prawa dostępu do plików. Zostaną także zainstalowane strony podręcznika systemowego.
Są tu także instalowane pliki nagłówkowe w odpowiednich miejscach w
/usr/include/shadow.
Jeśli używasz wersji BETA tego pakietu, to musisz ręcznie skopiować
plik login.defs do katalogu /etc i upewnić się,
że tylko "root" może go modyfikować.
cp login.defs /etc chmod 600 /etc/login.defs
Plik ten jest plikiem konfiguracyjnym dla programu login.
Powinieneś go przejrzeć i odpowiednio zmodyfikować jego zawartość
zgodnie z twoimi wymaganiami. To tutaj decydujesz, z których
terminalli (tty) może zalogować się "root" oraz ustawiasz inne
opcje bezpieczeństwa (np. domyślne wygasanie haseł).
Następnym krokiem jest polecenie pwconv. Musi ono także
być wykonane jako "root" i najlepiej w katalogu /etc:
cd /etc /usr/sbin/pwconv
Program pwconv tworzy z pliku /etc/passwd dwa
pliki: /etc/npasswd i /etc/nshadow.
Dostępny jest także program pwunconv jeśli musisz zrobić
normalny plik /etc/passwd z plików /etc/passwd i
/etc/shadow.
Teraz, kiedy już wykonałeś polecenie pwconv, stworzyłeś
dwa pliki - /etc/npasswd i /etc/nshadow. Ich nazwy muszą
zostać zmienione odpowiednio na /etc/passwd i /etc/shadow.
Chcemy także zrobić kopię oryginalnego pliku /etc/passwd i
upewnić się, że tylko "root" może go czytać. Kopię zapasową
umieścimy w katalogu domowym "root-a":
cd /etc cp passwd ~/passwd chmod 600 ~/passwd mv npasswd passwd mv nshadow shadow
Powinieneś się także upewnić, czy właściciel plików i prawa dostępu
są poprawne. Jeśli masz zamiar używać XWindows, to
programy xlock i xdm muszą mieć możliwość odczytu pliku
shadow, ale nie zapisu.
Są dwa sposoby na zrobienie tego. Możesz ustawić bit "SUID" dla
programu xlock (chmod u+s xlock); xdm ma z reguły
ten bit ustawiony. Albo możesz przydzielić plik /etc/shadow do
grupy shadow, ale zanim to zrobisz, sprawdź czy masz grupę
shadow w pliku /etc/group. Właściwie żaden z użytkowników
systemu nie powinien być w tej grupie.
cd /etc chown root.root passwd chown root.shadow shadow chmod 0644 passwd chmod 0640 shadow
Twój system ma teraz przesłonięte hasła. Powinieneś teraz przejść na inny wirtualny terminal i sprawdzić czy możesz się zalogować
Zrób to teraz - naprawdę !
Jeśli nie możesz, to coś jest nie tak ! Aby powrócić do stanu sprzed instalacji Shadow Suite zrób to:
cd /etc cp ~/passwd passwd chmod 644 passwd
Przywracasz w ten sposób stare pliki, które wcześniej zachowałeś, na ich właściwe miejsce.
Pomimo, iż pakiet Shadow Suite posiada zastępcze programy dla większości programów, które potrzebują dostepu do haseł, to prawie w każdym systemie są jeszcze dodatkowe programy, które potrzebują dostępu do haseł.
Jeśli masz dystrybucję Debian (a nawet jeśli nie masz), możesz znaleźć źródła programów, które muszą być przerobione pod tym adresem.
Reszta tej sekcji opisuje jak uaktualnić programy: adduser, wu_ftpd, ftpd, pop3d, xlock, xdm i sudo tak, aby obsługiwały
przesłonięte hasła.
Aby dowiedzieć się jak zrobić obsługę przesłoniętych haseł w jakimkolwiek innym programie zobacz sekcję Obsługa przesłanianych haseł w programach w C. (Programy te i tak muszą być uruchomione z bitem "SUID" dla "root-a" albo grupy shadow, aby rzeczywiście mieć dostęp do haseł.)
Dystrybucja Slackware (i pewnie inne) zawiera interaktywny program
służący do dodawania nowych użytkowników - /sbin/adduser.
Wersję tego programu obsługującą przesłonięte hasła można pobrać
np. z
ftp.icm.edu.pl z katalogu /pub/Linux/sunsite/system/admin/accounts/.
Ja zalecam używanie programów, które są dostarczane wraz z pakietem
Shadow Suite (useradd, usermod, i userdel)
zamiast adduser z dystrybucji Slackware. Co prawda
nauczenie się jak się nimi posługiwać zabiera trochę czasu, ale
opłaca się to ponieważ masz o wiele większą kontrolę i mają one
poprawne blokowanie plików (file locking) /etc/passwd i
/etc/shadow - adduser tego nie robi.
Więcej informacji w następnej sekcji - Wprowadzanie pakietu Shadow Suite do użycia..
Ale jeśli już musisz go mieć, oto co musisz zrobić:
tar -xzvf adduser.shadow-1.4.tar.gz cd adduser make clean make adduser chmod 700 adduser cp adduser /sbin
Wraz z większością dystrybucji Linux-a przychodzi serwer wu_ftpd.
Jeśli twoja dystrybucja nie instaluje domyślnie pakietu Shadow
Suite, to twój serwer wu_ftpd nie będzie skompilowany z
obsługą przesłoniętych haseł. wu_ftpd jest odpalany z
inetd/tcpd jako proces "root-a". Jeśli twój demon
wu_ftpd jest starą wersją, to będziesz chciał ją
uaktualnić tak czy inaczej ponieważ stare wersje mają pewien błąd,
który kompromituje konto "root". (Więcej informacji
znajdziesz na
Stronie Domowej Bezpieczeństwa na Linuxie).
Na szczęście musisz tylko zdobyć żródła tego programu i skompilować go z włączoną obsługą "Shadow password".
Jeśli nie masz systemu ELF, to serwer wu_ftpd możesz
znaleźć
na SUNSite Polska - nazywa się wu_ftpd-2.4-fixed.tar.gz
Jak już ściągniesz te źródła, to wtedy napisz:
cd /usr/src tar -xzvf wu-ftpd-2.4-fixed.tar.gz cd wu-ftpd-2.4-fixed cp ./src/config/config.lnx.shadow ./src/config/config.lnx
Potem zmień w pliku ./src/makefiles/Makefile.lnx linię:
LIBES = -lbsd -support
na:
LIBES = -lbsd -support -lshadow
Teraz możesz uruchomić skrypt kompilujący i zainstalować pakiet:
cd /usr/src/wu-ftpd-2.4-fixed /usr/src/wu-ftp-2.4.fixed/build lnx cp /usr/sbin/wu.ftpd /usr/sbin/wu.ftpd.old cp ./bin/ftpd /usr/sbin/wu.ftpd
Polecenia te powodują użycie pliku konfiguracyjnego z obsługą haseł przesłanianych dla Linux-a, skompilowanie i instalację serwera.
U siebie na Slackware 2.3 musiałem dodatkowo przed kompilacją zrobić coś takiego:
cd /usr/include/netinet ln -s in_systm.h in_system.h cd -
Zgłaszane były problemy z kompilacją na systemie binarnym ELF, ale wersja BETA następnej wersji działa dobrze. Można ją znaleźć pod adresem ftp.icm.edu.pl pod nazwą wu-ftp-2.4.2-beta-10.tar.gz.
Jak już ściągniesz serwer umieść go w /usr/src i napisz:
cd /usr/src tar -xzvf wu-ftpd-2.4.2-beta-9.tar.gz cd wu-ftpd-beta-9 cd ./src/config
Potem zmień w pliku config.lnx:
#undef SHADOW.PASSWORD
na:
#define SHADOW.PASSWORD
Potem:
cd ../Makefiles
i zmień w pliku Makefile.lnx
LIBES = -lsupport -lbsd # -lshadow
na:
LIBES = -lsupport -lbsd -lshadow
Następnie skompiluj i zainstaluj:
cd .. build lnx cp /usr/sbin/wu.ftpd /usr/sbin/wu.ftpd.old cp ./bin/ftpd /usr/sbin/wu.ftpd
Zauważ, że powinieneś sprawdzić w /etc/inetd.conf katalog,
w którym twój serwer rzeczywiście się znajduje. Powiadomiono mnie,
że niektóre dystrybucje umieszczają demony serwerów w innych
miejscach, a wtedy wu_ftpd może się znajdować gdzie indziej.
Jeśli masz u siebie standardowy serwer ftpd, zalecałbym
zmianę na wu_ftpd. Poza znaną dziurą omówioną wcześniej,
wu_ftpd jest uznany za bardziej bezpieczny.
Jeśli nalegasz na standardowy, albo potrzebujesz obsługi NIS, to na SUNSite Polska znajdziesz ftpd-shadow-nis.tgz.
Jeśli potrzebujesz obsługi Post Office Protocol 3, będziesz
musiał skompilować ponownie program pop3d. Normalnie jest
on uruchamiany przez inetd/tcpd jako "root".
Na SUNSite Polska dostępne są dwie wersje:
Obie są raczej proste do zainstalowania.
Jeśli zainstalujesz pakiet Shadow Suite i uruchomisz
XWindows, a następnie zablokujesz (lock) ekran nie
uaktualniając programu xlock, będziesz musiał użyć
CTRL+ALT+Fx, aby przełączyć się na wirtualną konsolę
tekstową (jeśli masz jakąś), zalogować się i zlikwidować proces
xlock (albo użyć CTRL+ALT+BACKSPACE żeby zamknąć
XWindows). Na szczęście uaktualnienie programu xlock jest
dość proste.
Jeśli masz XFree86 wersja 3.x.x, przypuszczalnie używasz
xlockmore (który jest wspaniałym "screensaver-em" w
połaczeniu z "lock"). Następujący pakiet obsługuje przesłonięte
hasła - xlockmore-3.5.tgz a dostępny jest z
SUNSite Polska. Jeśli masz starszą wersję zalecam
uaktualnienie do tej.
Oto "z grubsza" to, co musisz zrobić:
xlockmore i umieść w /usr/srctar -xzvf xlockmore-3.7.tgz/usr/X11R6/lib/X11/config/linux.cf linię
#define HasShadowPasswd NOna:
#define HasShadowPasswd YES
cd /usr/src/xlockmore xmkmf make depend make
cp xlock /usr/X11R6/bin/ cp XLock /var/X11R6/lib/app-defaults/ chown root.shadow /usr/X11R6/bin/xlock chmod 2755 /usr/X11R6/bin/xlock chown root.shadow /etc/shadow chmod 640 /etc/shadow
Twój xlock będzie teraz działał poprawnie.
xdm jest programem, który prezentuje ekran "logujący" dla
XWindows. Niektóre systemy startują ten program kiedy system ma się
uruchomić w odpowiednim "runlevel-u" (zobacz /etc/inittab).
Jeśli zainstalowałeś przesłaniane hasła, musisz uaktulanić ten program. Na szczęście jest to dość proste:
xdm.tar.gz można ściągnąć z
SUNSite Polska.
Ściągnij ten plik i umieść go w /usr/src, potem go
rozpakuj: tar -xzvf xdm.tar.gz.
Zmień w pliku /usr/X11R6/lib/X11/config/linux.cf linię
#define HasShadowPasswd NO
na:
#define HasShadowPasswd YES
Skompiluj pliki wykonywalne:
cd /usr/src/xdm xmkmf make depend make
Potem umieść wszystko na swoim miejscu cp xdm /usr/X11R6/bin/.
xdm jest uruchamiany jako "root" tak więc nie musisz
zmieniać jego praw dostępu.
Program sudo pozwala administratorowi na udostępnianie
zwykłym użytkownikom programów, które wymagają uprawnień
"root-a". Jest to pożyteczne ponieważ można ograniczać dostęp do
konta "root" i jednocześnie pozwalać użytkownikom np. montować
urządzenia.
sudo musi przeczytać hasło ponieważ weryfikuje użytkownika
kiedy jest uruchamiane. sudo jest uruchamiane z bitem SUID
"root" tak więc nie ma problemu z dostępem do pliku /etc/shadow.
Program ten z obsługą haseł przesłanianych dostępny jest
na SUNSite Polska pod nazwą sudo-1.2-shadow.tgz.
Uwaga: Podczas instalacji tego programu usunięty zostanie
plik /etc/sudoerrs i zastąpiony domyślnym przychodzącym
razem z pakietem. Tak więc zrób sobie kopię zapasową jeśli robiłeś
tam jakieś zmiany. Albo możesz usunąć linijkę kasującą ten plik z
pliku Makefile.
Obsługa przesłanianych haseł jest już ustawiona w pakiecie, tak
więc wszystko co trzeba zrobić, to przekompilować go. Po
umieszczeniu go w /usr/src napisz:
cd /usr/src tar -xzvf sudo-1.2-shadow.tgz cd sudo-1.2-shadow make all make install
Serwer pppd może zostać tak ustawiony, aby używał różnych typów
autentykacji:
Password Authentication Protocol (PAP) i Cryptographic
Handshake Authentication Protocol (CHAP). Serwer pppd zwykle
czyta łańuchy haseł z /etc/ppp/chap-secrets
i/albo z /etc/ppp/pap-secrets. Jeśli używasz tego
domyślnego zachowania serwera pppd, to przeinstalowywanie go nie
jest konieczne.
pppd pozwala także na użycie parametrów login-u (albo z
wiersza poleceń, albo z pliku konfiguracyjnego, albo z pliku z
opcjami). Jeśli jest podana jakaś opcja login-u, to pppd
użyje pliku /etc/passwd, żeby zweryfikować identyfikator i
hasło dla PAP. To oczywiście nie zadziała odkąd nasz plik z hasłami
jest przesłaniany. Jeśli używasz pppd-1.2.1d, to będziesz musiał
dodać kod do obsługi haseł przesłanianych.
Podany w dalszej części przykład dodaje obsługę dla tej właśnie wersji.
Wersja pppd-2.2.0 ma już w sobie obsługę przesłanianych haseł.
Sekcja ta opisuje kilka rzeczy które będziesz chciał wiedzieć jak już zainstalowałeś pakiet Shadow Suite. Dalsze informacje zawarte są na stronach podręcznika systemowego na temat każdego polecenia.
Pakiet Shadow Suite dodał następujące polecenia do
dodawania, modyfikacji i usuwania użytkowników. Są one obsługiwane z
wiersza poleceń przez parametry (mogłeś także zainstalować program
adduser).
Polecenie useradd może zostać użyte, aby dodać użytkownika
do systemu. Wykonujesz je także, żeby zmienić domyślne ustawienia.
Pierwszą rzeczą jaką powinieneś zrobić, to sprawdzić ustawienia domyślne na twoim systemie i odpowiednio je zmienić:
useradd -D
GROUP=1 HOME=/home INACTIVE=0 EXPIRE=0 SHELL= SKEL=/etc/skel
Wartości domyślne to pewnie nie są te, które chcesz używać, tak więc jeśli zacząłbyś dodawać użytkowników teraz, to musiałbyś podawać informacje dla każdego użytkownika. Jednak możemy i powinniśmy zmienić wartości domyślne:
/bin/bashAby zrobić takie zmiany napisałbym:
useradd -D -g100 -e60 -f0 -s/bin/bash
Teraz uruchomienie useradd -D pokaże:
GROUP=100 HOME=/home INACTIVE=0 EXPIRE=60 SHELL=/bin/bash SKEL=/etc/skel
W razie gdybyś chciał wiedzieć, to wartości te są zapisywane w
/etc/default/useradd.
Teraz możesz użyć polecenia useradd, aby dodać
użytkowników do systemu. Na przykład, aby dodać użytkownika fred
używając wartości domyślnych napisałbyś:
useradd -m -c "Fred Flintstone" fred
Stworzy to następującą pozycję w /etc/passwd:
fred:*:505:100:Fred Flinstone:/home/fred:/bin/bash
oraz następującą pozycję w /etc/shadow:
fred:!:0:0:60:0:0:0:0
Utworzony zostanie katalog domowy freda oraz skopiowana zostanie
tam zawartość katalogu /etc/skel z powodu opcji -m.
Ponieważ nie podaliśmy UID-u użyty zostanie następny wolny.
Konto freda będzie utworzone, ale nie będzie on się mógł zalogować dopóki go nie odblokujemy. Zrobimy to przez zmianę hasła:
passwd fred
Changing password for fred Enter the new password (minimum of 5 characters) Please use a combination of upper and lower case letters and numbers. New Password: ******* Re-enter new password: *******
Teraz w /etc/shadow będzie:
fred:J0C.WDR1amIt6:9559:0:60:0:0:0:0
A fred będzie mógł się teraz zalogować i korzystać z
systemu. Najlepsze w użyciu programów, które przychodzą razem z
pakietem Shadow Suite jest to, że wszelkie zmiany plików
/etc/passwd i /etc/shadow są wykonywane z
tzw. blokowaniem. Ta więc jeśli dodajesz użytkownika do systemu a
inny użytkownik właśnie sobie zmienia hasło, to obie operacje
zostaną wykonane poprawnie.
Powinieneś używać raczej dostarczonych programów niż edytować
ręcznie pliki /etc/passwd i /etc/shadow. Jeśli
edytowałeś plik /etc/shadow i jakiś użytkownik zmieniał
sobie w tym samym czasie hasło, to po zapisaniu zmian dokonanych
przez ciebie nowe hasło użytkownika zginie.
Oto mały interaktywny skrypt, który dodaje nowego użytkownika
używając useradd i passwd:
#!/bin/bash
#
# /sbin/newuser - Skrypt dodający użytkowników do systemu używającego
# programów useradd z pakietu Shadow Suite i passwd.
#
# Napisany przez Mike'a Jacksona <mhjack@tscnet.com> jako przykład do
# Shadow-Password-HOWTO. Pozwolenie na używanie i modyfikacje wyraźnie dane.
#
# Możnaby ten skrypt zmodyfikować tak, żeby pokazywał wartości domyślne
# oraz pozwalał na modyfikację podobnie jak program adduser ze Slackware.
# Możnaby też sprawdzać błędy, czy głupie wartości.
#
#
##
# Wartości domyślne dla polecenia useradd
##
GROUP=100 # Domyślna grupa
HOME=/home # Katalog domowy (/home/identyfikator)
SKEL=/etc/skel # Katalog szkieletowy
INACTIVE=0 # Ilość dni, po których wygasa hasło.
EXPIRE=60 # Ilość dni, przez którą ma istnieć hasło
SHELL=/bin/bash # Domyślna powłoka (pełna ścieżka)
##
# Wartości domyślne dla polecenia passwd
##
PASSMIN=0 # Ilość dni między którą zmienia się hasło
PASSWARN=14 # Ilość dni przed wygaśnięciem hasła kiedy jest
# wysyłana wiadomość ostrzegająca.
##
# Upewnij się, że "root" uruchomił ten skrypt
##
WHOAMI=`/usr/bin/whoami`
if [ $WHOAMI != "root" ]; then
echo "You must be root to add news users!"
exit 1
fi
##
# Zapytaj o identyfikator i imię i nazwisko
##
echo ""
echo -n "Username: "
read USERNAME
echo -n "Full name: "
read FULLNAME
#
echo "Adding user: $USERNAME."
#
# Zauważ, że wymagane są "" przy $FULLNAME ponieważ pole to będzie
# prawie zawsze zawierało przynajmniej jedną spację, a bez " polecenie
# useradd "pomyślałoby", że jest to następny parametr kiedy doszłoby
# do spacji.
#
/usr/sbin/useradd -c"$FULLNAME" -d$HOME/$USERNAME -e$EXPIRE \
-f$INACTIVE -g$GROUP -m -k$SKEL -s$SHELL $USERNAME
##
# Ustaw domyślne wartości dla hasła
##
/bin/passwd -n $PASSMIN -w $PASSWARN $USERNAME >/dev/null 2>&1
##
# Niech polecenie passwd zapyta poprawnie (dwa razy) o hasło
##
/bin/passwd $USERNAME
##
# Pokaż, co zostało zrobione
##
echo ""
echo "Entry from /etc/passwd:"
echo -n " "
grep "$USERNAME:" /etc/passwd
echo "Entry from /etc/shadow:"
echo -n " "
grep "$USERNAME:" /etc/shadow
echo "Summary output of the passwd command:"
echo -n " "
passwd -S $USERNAME
echo ""
Użycie skryptu do dodawania użytkowników do systemu jest na prawdę
bardziej preferowane niż ręczna edycja plików /etc/passwd
czy /etc/shadow czy też używanie programu adduser
ze Slackware. Możesz śmiało modyfikować ten skrypt dla swoich
potrzeb.
Więcej informacji na temat useradd znajdziesz w
podręczniku systemowym.
Program usermod używany jest do modyfikowania informacji na
temat danego użytkownika. Opcje tego programu są podobne do opcji
programu useradd.
Powiedzmy, że chcesz zmienić powłokę dla freda; zrobiłbyś to tak:
usermod -s /bin/tcsh fred
Teraz pozycja dotycząca freda w /etc/passwd zmieniłaby się
na:
fred:*:505:100:Fred Flinstone:/home/fred:/bin/tcsh
Załóżmy, że chcemy, żeby konto freda wygasło 15.09.1997:
usermod -e 09/15/97 fred <-- data w stylu angielskim-amerykańskim (mmddrr)
Teraz pozycja dotycząca freda w /etc/shadow zmieniłaby się
na:
fred:J0C.WDR1amIt6:9559:0:60:0:0:10119:0
Więcej informacji na temat usermod znajdziesz w
podręczniku systemowym.
userdel robi dokładnie to czego się spodziewałeś - kasuje
konto podanego użytkownika. Użycie jest proste:
userdel -r <identyfikator>
Opcja -r powoduje skasowanie wszystkich plików z katalogu
domowego użytkownika. Plików zlokalizowanych w innym systemie
plików trzeba poszukać i skasować je ręcznie.
Jeśli chcesz tylko zablokować dane konto, a nie skasować to użyj
polecenia passwd.
Polecenie passwd używane jest do zmiany hasła. Oprócz tego
używane jest przez "root-a" do:
-l i -u)-x)-n)-w)-i)-S)Na przykład, spójrzmy jeszcze raz na freda:
passwd -S fred fred P 03/04/96 0 60 0 0
Oznacza to, że hasło freda jest ważne, ostatnio było zmieniane 04.03.1996, może być zmienione w każdej chwili, wygasa po 60 dniach, fred nie zostanie ostrzeżony oraz konto nie zostanie zablokowane po wygaśnięciu hasła.
Oznacza to po prostu tyle, że kiedy fred zaloguje się po wygaśnięciu hasła zostanie zaraz na początku poproszony o podanie nowego hasła.
Jeśli zdecydujemy się, że chcemy ostrzec freda na 14 dni przed wygaśnięciem jego hasła i zablokować jego konto 14 dni po wygaśnięciu hasła trzebaby napisać tak:
passwd -w14 -i14 fred
Teraz dane o fredzie zmianiły się na:
fred P 03/04/96 0 60 14 14
Więcej informacji na temat passwd znajdziesz w
podręczniku systemowym.
Plik /etc/login jest plikiem konfiguracyjnym dla programu
login oraz dla całego pakietu Shadow Suite.
/etc/login zawiera ustawienia od tego jak będą wyglądać
znaki zachęty do tego jakie domyślne wartości będą dla wygasania
hasła kiedy użytkownik je sobie zmieni.
Plik /etc/login.defs jest dość dobrze udokumentowany już
przez same komentarze w nim zawarte. Chociaż jest kilka rzeczy do
odnotowania:
Z powyższej listy wynika, że jest to raczej ważny plik i powinieneś się upewnić, że istnieje i że ustawienia są takie jak chciałeś.
Plik /etc/groups może zawierać hasła, które pozwalają
użytkownikom dołączyć się do jakiejś grupy. Funkcja ta jest
włączona jeśli zdefiniujesz stałą SHADOWGRP w pliku
/usr/src/shadow-YYMMDD/config.h .
Jeśli ją zdefiniujesz i skompilujesz pakiet, musisz utworzyć plik
/etc/gshadow, żeby trzymać tam hasła grup i informacje
administracyjne.
Do utworzenia pliku /etc/shadow użyłeś programu
pwconv; nie ma odpowiednika do utworzenia pliku
/etc/gshadow, ale to nie ma znaczenia bo plik ten sam się
sobą zajmuje.
Aby stworzyć początkowy plik /etc/gshadow zrób tak:
touch /etc/gshadow chown root.root /etc/gshadow chmod 700 /etc/gshadow
Jak będziesz tworzył nowe grupy, zostaną one dodane do
/etc/group i /etc/gshadow.
Do modyfikacji grup służą programy dostarczane wraz z pakietem
Shadow Suite: groups, groupadd,
groupmod i groupdel.
Format pliku /etc/group jest taki:
nazwa_grupy:!:GID:członek,członek,...
Gdzie:
nazwa_grupy- chyba nie wymaga wyjaśniania :)
!- w tym miejscu normalnie byłoby hasło, ale teraz jest ono w gshadow
GID- numer grupy
członek- lista członków grupy.
Format pliku /etc/gshadow jest taki:
nazwa_grupy:hasło:admin,admin,...:członek,członek,...
Gdzie:
nazwa_grupy- chyba nie wymaga wyjaśniania :)
hasło- zakodowane hasło grupy
admin- lista administratorów grupy
członek- lista członków grupy
Polecenie gpasswd jest używane tylko do dodawania i
usuwania członków do/z grupy. "root" i każdy z administratorów
grupy może usuwać i dodawać członków.
Hasło dla grupy może być zmienione za pomocą polecenia
passwd przez "root-a" i każdego z administratorów grupy.
Chociaż nie ma strony do podręcznika systemowego dla
gpasswd, to zrozumienie opcji tego polecenia nie jest
takie trudne jak już rozumiesz jego format i
koncept. gpasswd bez żadnych parametrów poda opcje jakie
przyjmuje.
Program pwck sprawdza poprawność plików /etc/passwd
i /etc/shadow. Sprawdzi każdego użytkownika czy ma:
Ostrzeże nas także jeśli znajdzie konta bez haseł.
Uruchomienie tego programu po zainstalowaniu pakietu Shadow
Suite jest dobrym pomysłem. Powinno sie go także uruchamiać
okresowo - co tydzień, co miesiąc. Jeśli użyjesz opcji -r,
to możesz użyć programu cron, aby uruchamiać pwck
okresowo i dostawać raport pocztą.
Program ten sprawdza poprawność plików /etc/group i
/etc/gshadow. Sprawdza:
Ma także opcję -r do automatycznych raportów.
Hasła przez telefon są inną opcjonalną linią obrony dla systemów,
które umożliwiają dostęp przez telefon. Jeśli masz system z dużą
ilośćią użytkowników łączących się lokalnie albo poprzez sieć, ale
chcesz ograniczyć kto może sie połączyć, to "hasła przez telefon"
są dla ciebie. Aby właczyć "hasła przez telefon" musisz wyedytować
plik /etc/login.defs i upewnić się, że
DIALUPS_CHECK_ENAB jest ustawione na yes.
Są dwa pliki, które zawierają informacje o połączeniach przez
telefon: /etc/dialups, który zawiera "tty" (jeden na linię
bez "/dev/"). Jeśli dany tty jest tam zawarty to połączenie jest
sprawdzane; oraz /etc/d_passwd z pełną ścieżką dostępu do
powłoki oraz opcjonalnym hasłem.
Jeśli użytkownik zaloguje się na linię, która jest podana w
/etc/diulups i jego powłoka jest podana w
/etc/d_passwd, to będzie mógł się zalogować tylko po
podaniu poprawnego hasła.
Innym użytecznym celem "haseł przez telefon" może być ustawienie linii, która pozwala tylko na połączenia konkretnego rodzaju (np. PPP lub/i UUCP). Jeśli użytkownik próbuje się połączyć inaczej (np. listą powłok), to musi znać hasło na tę linię.
Zanim będziesz mógł używać tych właściwości musisz stworzyć te pliki.
Polecenie dpasswd przypisuje hasła do konkretnych powłok
zawartych w pliku /etc/d_passwd. Więcej informacji
znajdziesz na stronie podręcznika systemowego.
Dodawanie obsługi haseł przesłanianych do programów jest całkiem
proste. Jedynym problemem jest to, że program musi zostać
uruchomiony z prawami "root-a", aby mieć dostęp do pliku
/etc/shadow.
Tutaj pojawia się jeden wielki problem: podczas pisania takich programów należy się trzymać jak najściślej zasad bezpieczeństwa. Na przykład jeśli program posiada wyjście do powłoki, to nie może się to zdarzyć na prawach "root-a".
Jeśli program musi mieć dostęp do /etc/shadow i nie
potrzebuje więcej praw "root-a", to lepiej uruchomić go z prawami
grupy "shadow". Program xlock jest przykładem takiego
programu.
W przykładzie podanym niżej, pppd-1.2.1d jest już
uruchomiony z prawami "root-a", tak więc dodanie obsługi haseł
przesłanianych nie powinno zagrozić bezpieczeństwu.
Pliki te powinny znajdować się w /usr/include/shadow.
Powinien tam być także plik /usr/include/shadow.h, ale
będzie to symboliczne dołaczenie do
/usr/include/shadow/shadow.h.
Aby dodać obsługę haseł przesłanianych do programu, musisz dołączyć pliki nagłówkowe:
#include <shadow/shadow.h> #include <shadow/pwauth.h>
Dobrym pomysłem byłoby użycie dyrektyw kompilatora, aby skompilować warunkowo kod z obsługą haseł przesłanianych. (tak jak w przykładzie poniżej.)
Biblioteka ta została zainstalowana w /usr/lib jak
instalowałeś pakiet Shadow Suite.
Kiedy kompilujesz obsługę przesłaniancyh haseł w programie trzeba
poinformować "linker-a", aby dołączył bibliotekę
libshadow.a.
Robi się to tak:
gcc program.c -o program -lshadow
Chociaż jak zobaczymy w poniższym przykładzie, większość dużych
programów używa plików Makefile i ma zwykle zmienną
LIBS=..., którą się modyfikuje.
Biblioteka libshadow.a używa struktury spwd dla
informacji, które otrzyma z pliku /etc/shadow. Oto
definicja tej struktury wzięta z /usr/include/shadow/shadow.h:
struct spwd
{
char *sp_namp; /* identyfikator */
char *sp_pwdp; /* zakodowane hasło */
sptime sp_lstchg; /* data ostatniej zmiany */
sptime sp_min; /* minimalna ilość dni między zmianami */
sptime sp_max; /* maksymalna ilość dni między zmianami */
sptime sp_warn; /* ilość dni przed wygaśnięciem hasła
kiedy będzie wysyłane ostrzeżenie */
sptime sp_inact; /* ilość dni, po jakiej wygasa hasło
dopóki konto nie będzie zablokowane */
sptime sp_expire; /* ilość dni od 01.01.1970 dopóki
konto nie wygaśnie */
unsigned long sp_flag; /* zarezerwowane na przyszłość */
};
Do pola sp_pwdp można dodatkowo wstawić nawzę programu:
identyfikator:Npge08pfz4wuk;@/sbin/extra:9479:0:10000::::
Oznacza to, że oprócz podania hasła będzie wykonany program
/sbin/extra, który wykona dalszą autentykację. Wywołany program
otrzyma identyfikator i przełącznik, który określi dlaczego został
wywołany. Więcej informacji znajdziesz w
/usr/include/shadow/pwauth.h i pwauth.c.
Oznacza to, że powinniśmy użyć funkcji pwauth do
przeprowadzenia poprawnej autentykacji, ponieważ zajmie się ona
także drugą autentykacją. Jest to użyte w przykładzie poniżej.
Autor pakietu Shadow Suite twierdzi, że odkąd większość programów tego nie stosuje, może to zostać usunięte lub zmienione w przyszłych wersjach pakietu.
Plik shadow.h zawiera deklaracje funkcji zawartych w
bibliotece libshadow.a:
extern void setspent __P ((void)); extern void endspent __P ((void)); extern struct spwd *sgetspent __P ((__const char *__string)); extern struct spwd *fgetspent __P ((FILE *__fp)); extern struct spwd *getspent __P ((void)); extern struct spwd *getspnam __P ((__const char *__name)); extern int putspent __P ((__const struct spwd *__sp, FILE *__fp));
Funkcja, którą użyjemy w przykładzie to getspnam, która
odczyta strukturę spwd dla podanego identyfikatora.
Jest to przykład na dodanie obsługi haseł przesłanianych do programu, który tego potrzebuje, ale nie ma domyślnie włączonego.
Przykład ten używa serwera Point-to-Point Protocol
(pppd-1.2.1d), który ma tryb do autentykacji PAP używając
identyfikatora i hasła z pliku /etc/passwd zamiast z
plików PAP czy CHAP. Nie musisz dodawać tego
kodu do pppd-2.2.0, ponieważ on już tam jest.
Ta właściwość pppd przypuszczalnie nie jest często używana, ale
jeśli zainstalowałeś Shadow Suite, to serwer ten nie
będzie działał ponieważ hasła nie są już zapisywane w
/etc/passwd.
Kod do autentykacji użytkowników przez pppd-1.2.1d
umieszczony jest w pliku /usr/src/pppd-1.2.1d/pppd/auth.c.
Poniższy kod musi zostać dodany na początku pliku gdzie znajdują
się wszystkie inne dyrektywy #include. Otoczyliśmy je
dyrektywami warunkowymi (czyli skompilują się tylko jeśli
kompilujemy z właczoną obsługą haseł przesłanianych).
#ifdef HAS_SHADOW #include <shadow.h> #include <shadow/pwauth.h> #endif
Następnym krokiem jest modyfikacja właściwiego kodu. Ciągle
modyfikujemy plik auth.c.
Funkcja auth.c przed modyfikacją:
/*
* login - Check the user name and password against the system
* password database, and login the user if OK.
*
* returns:
* UPAP_AUTHNAK: Login failed.
* UPAP_AUTHACK: Login succeeded.
* In either case, msg points to an appropriate message.
*/
static int
login(user, passwd, msg, msglen)
char *user;
char *passwd;
char **msg;
int *msglen;
{
struct passwd *pw;
char *epasswd;
char *tty;
if ((pw = getpwnam(user)) == NULL) {
return (UPAP_AUTHNAK);
}
/*
* XXX If no passwd, let them login without one.
*/
if (pw->pw_passwd == '\0') {
return (UPAP_AUTHACK);
}
epasswd = crypt(passwd, pw->pw_passwd);
if (strcmp(epasswd, pw->pw_passwd)) {
return (UPAP_AUTHNAK);
}
syslog(LOG_INFO, "user %s logged in", user);
/*
* Write a wtmp entry for this user.
*/
tty = strrchr(devname, '/');
if (tty == NULL)
tty = devname;
else
tty++;
logwtmp(tty, user, ""); /* Add wtmp login entry */
logged_in = TRUE;
return (UPAP_AUTHACK);
}
Hasło użytkownika jest umieszczane w pw->pw_passwd, tak że
wszystko co musimy zrobić, to dodać funkcję
getspnam. Umieści to hasło w spwd->sp_pwdp.
Dodamy funkcję pwauth, aby przeprowadzić właściwą
autentykację. Przeprowadzi to także drugą autentykację jeśli plik
shadow jest odpowiednio ustawiony.
Funkcja auth.c po modyfikacji do obsługi haseł
przesłanianych:
/*
* login - Check the user name and password against the system
* password database, and login the user if OK.
*
* This function has been modified to support the Linux Shadow Password
* Suite if USE_SHADOW is defined.
*
* returns:
* UPAP_AUTHNAK: Login failed.
* UPAP_AUTHACK: Login succeeded.
* In either case, msg points to an appropriate message.
*/
static int
login(user, passwd, msg, msglen)
char *user;
char *passwd;
char **msg;
int *msglen;
{
struct passwd *pw;
char *epasswd;
char *tty;
#ifdef USE_SHADOW
struct spwd *spwd;
struct spwd *getspnam();
#endif
if ((pw = getpwnam(user)) == NULL) {
return (UPAP_AUTHNAK);
}
#ifdef USE_SHADOW
spwd = getspnam(user);
if (spwd)
pw->pw_passwd = spwd->sp-pwdp;
#endif
/*
* XXX If no passwd, let NOT them login without one.
*/
if (pw->pw_passwd == '\0') {
return (UPAP_AUTHNAK);
}
#ifdef HAS_SHADOW
if ((pw->pw_passwd && pw->pw_passwd[0] == '@'
&& pw_auth (pw->pw_passwd+1, pw->pw_name, PW_LOGIN, NULL))
|| !valid (passwd, pw)) {
return (UPAP_AUTHNAK);
}
#else
epasswd = crypt(passwd, pw->pw_passwd);
if (strcmp(epasswd, pw->pw_passwd)) {
return (UPAP_AUTHNAK);
}
#endif
syslog(LOG_INFO, "user %s logged in", user);
/*
* Write a wtmp entry for this user.
*/
tty = strrchr(devname, '/');
if (tty == NULL)
tty = devname;
else
tty++;
logwtmp(tty, user, ""); /* Add wtmp login entry */
logged_in = TRUE;
return (UPAP_AUTHACK);
}
Po dokładnym prześledzaniu tego kodu okaże się, że zrobiliśmy
jeszcze jedną zmianę. Oryginalna wersja pozwalała na dostęp
(zwracała UPAP_AUTHACK) jeśli nie było hasła w
pliku /etc/passwd. Nie jest to dobrze, ponieważ popularnym
użyciem tej właściwości programu login jest używanie
jednego konta, na dostęp do programu PPP, a potem sprawdzenie
identyfikatora i hasła dostarczonych przez PAP z tymi w plikach
/etc/passwd i /etc/shadow.
Tak więc jeśli ustwilibyśmy oryginalną wersję, aby uruchamiała
powłokę dla użytkownika np. ppp, to każdy mógłby uzyskać
połączenie ppp przez podanie identyfikatora ppp i pustego hasła.
Poprawiliśmy to przez zwrócenie UPAP_AUTHNAK zamiast
UPAP_AUTHACK jeśli pole z hasłem jest puste.
Interesujące jest to, że pppd-2.2.0 ma ten sam problem.
Następnie musimy zmodyfikować plik Makefile tak, żeby
pojawiły się dwie rzeczy:
USE_SHADOW musi być zdefiniowane i libshadow.a
musi być dodana w procesie "linkowania".
Wyedytuj plik Makefile i dodaj:
LIBS = -lshadow
Potem znajdź linię:
COMPILE_FLAGS = -I.. -D_linux_=1 -DGIDSET_TYPE=gid_t
i zmień ją na:
COMPILE_FLAGS = -I.. -D_linux_=1 -DGIDSET_TYPE=gid_t -DUSE_SHADOW
Teraz kompilacja i instalacja.
P: Kiedyś kontrolowałem terminale z jakich mógł się
logować "root" przez plik /etc/securettys, teraz nie
wygląda na to żeby działało. Co jest grane ?
O: Teraz kiedy pakiet Shadow Suite jest
zainstalowany plik /etc/securettys nie ma żadnego
znaczenia. Terminale, z których może się zalogować "root" są teraz
podawane w pliku konfiguracyjnym /etc/login.defs. Pozycja
w tym pliku może wskazywać na jakiś inny plik.
P: Zainstalowałem pakiet Shadow Suite i nie mogę się zalogować, co przegapiłem ?
O; Przypuszczalnie zainstalowałeś pakiet i zapomniałeś
uruchomić program pwconv albo zapomniałeś skopiować
/etc/npasswd na /etc/passwd oraz
/etc/nshadow na /etc/shadow. Możesz musisz także
skopiować login.defs do /etc.
P: W sekcji o "xlock-u" było napisane, żeby zmienić grupę
pliku /etc/shadow na shadow, ale ja nie mam takiej grupy -
co mam zrobić ?
O: Możesz ją dodać. Po prostu wyedytuj plik
/etc/group i dodaj linię definiującą grupę shadow. Musisz
się upewnić, że numer grupy nie jest używany przez żadną inną i
musisz ją dodać przed pozycją nogroup. Albo po prostu
ustaw bit SUID dla programu xlock.
P: Jest jakaś lista dyskusyjna dla Linux Shadow Password Suite ?
O: Tak, ale jest ona dla rozwijających ten pakiet i dla
testujących wersje BETA. Możesz się zapisać na tę listę
wysyłając list na adres shadow-list-request@neptune.cin.net
o tytule subscribe. Na liście tej dyskutuje się właściwie
o konkretnej serii shadow-YYMMSS. Powinieneś się na nią
zapisać jeśli chcesz być włączony do dalszego rozwoju albo jeśli
zainstalowałeś sobie ten pakiet i chcesz wiedzieć o nowszych
wersjach.
P: Zainstalowałem Shadow Suite, ale kiedy używam
polecenia userdel dostaję: "userdel: cannot open shadow
group file" - co zrobiłem źle ?
O: Skompilowałeś pakiet z włączoną opcją
SHADOWGRP, ale nie masz pliku /etc/gshadow.
Musisz albo wyedytować plik config.h i skompilować
ponownie pakiet albo stworzyć plik /etc/gshadow. Zobacz
sekcję dotyczącą przesłanianych grup.
P: Zainstalowałem Shadow Suite, ale zakodowane
hasła pojawiają się w pliku /etc/passwd, co jest ?
O: Albo właczyłeś opcję AUTOSHADOW w pliku
config.h, albo twoja biblioteka libc była
skompilowana z opcją SAHDOW_COMPAT. Musisz dowiedzieć się,
które z tych dwóch jest prawdziwe i skompilować ponownie.
Linux Shadow Password HOWTO jest chronione prawami autorskimi Michaela H. Jacksona.
Dozwolone jest dystrybuowanie kopii tego dokumentu zakładając, że wzmianka o prawach autorskich i to pozwolenie jest zawarte we wszystkich kopiach.
Dozwolone jest dytrybuowanie i kopiowanie modyfikowanych wersji tego dokumentu pod warunkami kopiowania z powyższego akapitu, zakładając, że zawarta jest jasna informacja, że jest to wersja modyfikowana tego dokumentu.
Dozwolone jest kopiowanie i dystrybucja tłumaczeń tego dokumentu na inne języki pod warunkami dla wersji modyfikowanych wymienionymi wyżej.
Dozwolone jest konwertowanie tego dokumentu na inne media pod warunkami podanymi powyżej dla wersji modyfikowanych zakładając, że informacja o źródle nowego dokumentu jest zawarta przez oczywisty odnośnik do dokumentu źródłowego w nowej wersji tego dokumentu. Jeśli występują jakieś wątpliowści co do słowa "oczywiste", właściciel praw autorskich rezerwuje sobie prawo decyzji.
Przykłady kodów dla auth.c zostały wzięte z pppd-1.2.1d i
ppp-2.1.0e, Copyright (c) 1993 and The Australian National
University oraz Copyright (c) 1989 Carnegie Mellon University.
Podziękowania dla Marka Michałkiewicza <marekm@i17linuxb.ists.pwr.wroc.pl> za napisanie i opiekę nad pakietem Shadow Suite dla Linux-a oraz za przejrzenie i komentarze do tego dokumentu.
Podziękowania dla Rona Tidda <rtidd@tscnet.com> za jego pomocne przejrzenie i testowanie.
Podziękowania dla wszystkich, którzy przysłali do mnie komentarze, aby pomóc w ulepszeniu tego dokumentu.
Jeśli masz jakieś uwagi lub sugestie to napisz do mnie proszę,
z poważaniem
Michael H. Jackson <mhjack@tscnet.com>
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:
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 sie na nią zapisać, to
wyślij list o treści subscribe jtz Imię Nazwisko na adres
majordomo@ippt.gov.pl
Zmiany w tym dokumencie wprowadzone przez tłumacza to:
doc-linux-pl-2002.06.14.orig/html/Sound-HOWTO.pl.html 0100664 0001750 0001750 00000256672 06770264140 020653 0 ustar coven coven
Oto dokument Linux Sound HOWTO, czyli Dźwięk w Linuxie - Jak To Zrobić? Z założenia ma to być szybki poradnik obejmujący wszystko, co potrzebujesz wiedzieć aby zainstalować i skonfigurować obsługę dźwięku pod Linuxem. Udzielono tu odpowiedzi na często zadawane pytania, a także zamieszczono odnośniki do innych źródeł informacji na rozmaite tematy związane z dźwiękiem i muzyką generowaną za pomocą komputerów.
Zakres pracy jest ograniczony do problematyki kart dźwiękowych, odnoszącej się do Linuxa. Więcej informacji na temat kart dźwiękowych i generowania dźwięku i muzyki z pomocą komputera znajdziesz w dokumentach wymienionych w rozdziale Źróła Informacji.
Wiele z tych informacji pochodzi z dokumentacji dostarczonej wraz ze sterownikiem dźwięku, napisanym przez Hannu Savolainena ( hannu@voxware.pp.fi). Składam podziękowania Hannu i wielu innym ludziom, którzy tworzyli sterowniki dźwięku do jądra Linuxa i programy narzędziowe.
Dzięki pakietowi Linuxdoc-SGML ten dokument HOWTO jest dostępny w kilku formatach, wygenerowanych z jednego wspólnego pliku źródłowego.
pierwsza wersja; wysłana jedynie do kanału SOUND pocztowej listy aktywistów Linuxa
niewielkie uaktualnienia; pierwsza wersja dostępna w archiwach internetowych
skonwertowana do formatu SGML; obecnie dostępna w kilku formatach dzięki narzędziom Linuxdoc-SGML Matta Welsha; zmiana wyglądu z powodu nowego formatu, jedynie niewielkie zmiany w treści
niewielkie poprawki w SGMLu; dodana odpowiedź na temat niekompatybilności kontrolera SCSI Adaptec1542A i karty PAS16
sterownik dźwięku w wersji 2.5a jest teraz w dystrybucji jądra 1.1; uwaga na temat obsłgi GUS-MAX; inne nieznaczne poprawki
dodana informacja o błędzie "no space on device" ("brak przestrzeni na urządzeniu"); dodana uwaga o tym, że Podręcznik Hackera (Hacker's Guide) znajduje się w "ukrytym" katalogu; dodane pytanie o tryb dwukierunkowy; informacja o błędach "device busy" ("urządzenie zajęte"); inne nieznaczne poprawki
dodane informacje o ASP i AWE32; dostępny jest VoxWare 2.9; odpowiedź na pytanie o używanie IRQ2; odnośniki do dokumentów HOWTO o dźwięku i SCSI
dodane pytanie o błędy pod DOSem; wiele niewielkich poprawek celem uaktualnienia względem wersji 2.90 sterownika dźwięku; informacja o grze DOOM; odpowiedź na temat redukcji szumów
pytania o nagrywanie i karty-klony
napomknienie, że HOWTO dostępne jest przez WWW, jako dokumenty do druku i w innych wersjach językowych; informacja na temat konfliktu DMA ze sterownikiem napędu taśmowego QIC; informacja o karcie Sound Galaxy NX Pro i myszy szeregowej Logitech
Długo oczekiwane uaktualnienie (byłem zajęty); dokument objęty licencją GPL; uaktualnienie do wersji 3.0 sterownika dźwięku; informacja o wielu nowo obsługiwanych kartach; więcej informacji o konfiguracji i usuwaniu błędów; masa nowych odnośników do stron HTML; uaktualnienie zgodnie z formatem CD-ROM HOWTO.
nowe sterowniki w jądrze 1.3.34; nowe nazwy urządzeń dźwiękowych; adres 1542 to 334 a nie 333; wyjaśnienie statusu Emu i ASP Creative Labs; wskazanie do stron WWW Creative Labs i MediaTrix
wzmianka o nazwie VoxWare; uaktualnienie o najnowsze obsługiwane karty dźwiękowe i opcje konfiguracji; pytanie o obsługę Plug and Play; problem rozmiarów bloku; nowe opcje w xconfig i menuconfig; narzędzia modutils mają obsługę dźwięku; usunięcie pocztowej listy dyskusyjnej vger; wyróżnienie adresu strony WWW autora; inne niewielkie zmiany
Audio Excell DSP16 nie jest obecnie obsługiwana (powinna znowu działać za kilka miesięcy); zmiany w programie configure; dostępne jest włoska wersja językowa tego HOWTO; trick - jak ustawiać wzmocnienie miksowania podczas ładowania modułu obsługi dźwięku; ostatnia stabilna wersja jądra to 2.0; now nazwa sterownika dźwięku; pytanie o prawa dostępu root'a na plikach urządzeń dźwiękowych
usunięcie kilku bardzo starych i obecnie nieaktualnych pytań; nowy adres e-mail autora; poprawione kilka odwołań do najnowszych pakietów programów; więcej informacji o książce nt. multimediów; niewielkie poprawki pisowni i gramatyki
wiele uaktualnień i poprawek od Hannu Savolainena; dodany sześciomiesięczny "okres przydatności do użycia"; nowy URL do strony WWW dotyczącej książki, dodany odnośnik do hiszpańskiej wersji językowej; niewielkie poprawki poprawki pisowni i gramatyki
Nowe wersje oryginału tego dokumentu będą okresowo wysyłane do gupy dyskusyjnej comp.os.linux.answers. Będą również załadowywane do rozmaitych anonimowych archiwów ftp, zbierających tego typu informacje, jak np. ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/.
Wersje hipertekstowe tego i innych dokumentów Linux HOWTO są dostępne na wielu serwerach WWW w Internecie, w tym pod adresem http://sunsite.unc.edu/mdw/mdw.html. Większość CD-ROMowych dystrybucji Linuxa zawiera dokumenty HOWTO, często w katalogu /usr/doc/, jak również dokumenty te dostępne są u kilku producentów w postaci drukowanej. Czasami dokumenty HOWTO z dystrybucji na płytach CD-ROM, archiwów ftp i w formie drukowanej są nieaktualne. Jeśli z daty wydania tego dokumentu wynika, że ma on więcej niż 6 miesięcy, prawdopodobnie nowsza wersja jest już dostępna w Internecie.
Wersja polska znajduje się wraz z pozostałymi dokumentami Linux-HOWTO w wersji polskiej w archiwum ftp://ftp.jtz.org.pl/HOWTO/
Oryginalna, angielska wersja tego dokumentu: ftp://sunsite.unc.edu/pub/Linux/HOWTO/.
Francuska wersja tego dokumentu : ftp://ftp.ibp.fr/pub2/linux/french/docs/HOWTO/.
Japońska wersja tego dokumentu : http://yebisu.ics.es.osaka-u.ac.jp/linux/.
Włoska wersja tego dokumentu : http://www.psico.unipd.it/ildp/docs/HOWTO/Sound-HOWTO.html.
Hiszpańska wersja tego dokumentu : http://www.insflug.nova.es/howtos/online/sonido/sonido-COMO.html.
Jeśli przetłumaczysz oryginał na inną wersję językową, daj znać autorowi, a do powyższej listy dodany zostanie odpowiedni odnośnik.
Polegam na Tobie, czytelniku, aby uczynić ten dokument użytecznym. Jeśli masz jakieś sugestie, poprawki lub komentarze, proszę wyślij je do mnie, jeff_tranter@pobox.com, a ja spróbuje włączyć je do następnej wersji.
Wyrażam również chęć udzielania odpowiedzi na ogólne pytania dotyczące kart dźwiękowych tak dobrze jak tylko potrafię. Jednak zanim zapytasz mnie, zapoznaj się proszę z całym niniejszym HOWTO, a wysyłając pytanie dołącz dokładną informację na temat problemu.
Jeśli opublikujesz ten dokument na dysku CD-ROM lub w wersji drukowanej, byłbym wdzięczny za przesłanie mi jednego egzemplarza. Napisz e-mail, to podam mój adres pocztowy. Warto w takiej sytuacji również rozważyć datek na rzecz Projektu Dokumentacji Linuxa (Linux Documentation Project), co wspomoże ideę darmowej dokumentacji do Linuxa. W sprawie dokładniejszych informacji skontaktuj się z koordynatorem projektu Linux HOWTO, Gregiem Hankinsem mailto:gregh@sunsite.unc.edu.
Prawa autorskie 1995-1997 Jeff Tranter.
Ten HOWTO jest darmową dokumentacją; możesz go rozprowadzać i/lub modyfikować na zasadach określonych w Generalnej Publicznej Licencji GNU (GPL) przez Fundację Darmowego Oprogramowania (Free Software Foundation); Licencja w wersji 2 lub (zgodnie z Twoim uznaniem) jakakolwiek późniejsza.
Dokument ten rozprowadzany jest w nadziei, że będzie przydatny, jednak bez żadnej gwarancji; nawet bez domniemanej gwarancji przeznaczenia lub przydatności do konkretnego celu. Więcej szczegółów znajdziesz w Generalnej Publicznej Licencji GNU.
Możesz otrzymać kopię Generalnej Publicznej Licencji GNU, jeśli napiszesz do Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
Ten rozdział jest bardzo skrótowym przeglądem technologii dźwięku komputerowego, który ma na celu ułatwić ci zrozumienie później używanych pojęć. Aby dowiedzieć się więcej, powinieneś odwołać się do książek o dźwięku cyfrowym lub cyfrowym przetwarzaniu sygnałów dźwiękowych.
Dźwięk jest zjawiskiem analogowym; może przyjmować dowolne wartości z ciągłego przedziału. Komputery są cyfrowe; lubią pracować z wartościami dyskretnymi. Karty dźwiękowe wykorzystują urządzenie zwane Konwerterem Analogowo - Cyfrowym (A/D lub ADC) do konwersji napięć odpowiadających analogowym falom dźwiękowym do postaci cyfrowych lub numerycznych wartości, które można przechowywać w pamięci. Podobnie, Konwerter Cyfrowo - Analogowy (D/A lub DAC) przekształca wartości numeryczne z powrotem na napięcia analogowe, które w efekcie mogą sterować głośnikiem, produkując dźwięk.
Proces przetwarzania postaci analogowej na cyfrową, zwany próbkowaniem, obciążony jest pewnym błędem. Dwa czynniki są najważniejsze przy określaniu, jak wiernie próbkowany dźwięk odwzorowuje analogowy oryginał. Częstotliwość próbkowania to liczba próbek pobranych w danej jednostce czasu (najczęściej określana w próbkach na sekundę lub Hertzach). Przy niskiej częstotliwości próbkowania analogowy sygnał odwzorowany będzie mniej dokładnie. Rozmiar próbki to zakres wartości używanych do opisania każdej próbki, zazwyczaj oznaczony w bitach. Im większy rozmiar próbki, tym dokładniejszy będzie sygnał cyfrowy.
Karty dźwiękowe najczęściej używają próbek 8- lub 16-bitowych przy częstotliwościach próbkowania od około 4000 do 44.000 próbek na sekundę. Próbki mogą również zawierać jeden kanał (mono) lub dwa kanały (stereo).
Synteza FM jest starszą techniką wytwarzania dźwięku. Polega na łączeniu różnych fal dźwiękowych (np. sinusoidalnej, trójkątnej, kwadratowej). Syntezę FM łatwiej jest zaimplementować sprzętowo niż konwersję D/A, ale za to trudniej ją oprogramować. Jest ona również mniej elastyczna. Wiele kart dźwiękowych obsługuje syntezę FM dla celów wstecznej kompatybilności ze starszymi kartami i programami. Zazwyczaj zawierają one kilka niezależnych generatorów dźwięku lub głosów.
Synteza Wavetable łączy elastyczność konwersji D/A z wielokanałowymi możliwościami syntezy FM. W tej technologii przetworzone na postać cyfrową głosy mogą być załadowane do dedykowanego obszaru pamięci, a następnie odtwarzane, łączone i modyfikowane przy niewielkim obciążeniu procesora. Wszystkie najlepsze karty dźwiękowe obsługują syntezę wavetable.
Większość kart dźwiękowych daje możliwość miksowania - łączenia sygnałów z różnych źródeł wejściowych i kontrolowania poziomów głośności.
MIDI jest skrótem od nazwy Musical Instrument Digital Interface (Cyfrowy Interfejs Instrumentów Muzycznych) i jest standardowym protokołem sprzętowym i programowym pozwalającym instrumentom muzycznym na komunikowanie się ze sobą. Sygnały przesłane po szynie MIDI mogą być również przechowywane w plikach MIDI do późniejszej obróbki i odtwarzania. Wiele kart dźwiękowych zawiera interfejs MIDI. Te, które go nie mają, nadal mogą odgrywać pliki MIDI przy użyciu zintegrowanych w karcie funkcji.
Pliki MOD są powszechnym formatem utworów generowanych za pomocą komputerów. Obok informacji o nutach, które mają być zagrane, pliki te zawierają cyfrowe próbki instrumentów (inaczej zwane głosami). Pliki MOD po raz pierwszy pojawiły się na komputerach Amiga, ale mogą być odtwarzane z pomocą stosownego oprogramowania na innych systemach, z Linuxem włącznie.
W tym rozdziale wymieniono karty graficzne i interfejsy, które są obecnie obsługiwane przez Linuxa. Informacja tutaj zawarta oparta jest na najnowszych w trakcie pisania tego dokumentu jądrach Linuxa.
Sterownik dźwięku ma swą własną numerację wersji. Ostatnie stabilne jądro Linuxa to wersja 2.0.27, wykorzystująca sterownik dźwięku w wersji 3.5.4-960630.
Autor sterownika dźwięku, Hannu Savolainen, zazwyczaj również udostępnia nowsze wersje sterownika dźwięku zanim włączane są one do standardowej dystrybucji jądra Linuxa. Najbardziej aktualna lista obsługiwanych kart znajduje się pod adresem http://www.4front-tech.com/ossfree/new_cards.html (USA) lub http://personal.eunet.fi/pp/voxware/new_cards.html (Europa). Na tych stronach wyszczególnione jest, która wersja sterownika dźwięku jest wymagana przy danym typie karty dźwiękowej, lub czy sterownik danej karty jest nadal w fazie rozwoju. Plik /usr/src/linux/drivers/sound/Readme.cards, rozprowadzany wraz ze sterownikiem dźwięku do jądra, zawiera informację o obsługiwanych kartach, ale nie zawsze jest aktualny.
Sterownik dźwięku powinien również działać z większością kart dźwiękowych na platformie Alpha. Jednakże, niektóre karty mogą wywoływać konflikty na portach I/O innych urządzeń systemów opartych na Alpha, nawet jeśli działają one poprawnie na komputerach i386, więc ogólnie rzecz biorąc nie można z góry określić, czy dana karta będzie działać, zanim się faktycznie nie spróbuje.
W czasie, gdy to piszę, sterownik dźwięku nie działa jeszcze na wersji Linuxa na systemy z procesorem PowerPC, ale w przyszłości obsługa ta powinna się pojawić.
Wygląda na to, że sterownik dźwięku można dołączyć do jądra w wersji Linuxa na systemy MIPs, ale obawiam się że nie specjalnie działa (czy komputery MIPs mają w ogóle sloty ISA?).
Jądro Linuxa zawiera osobne sterowniki dla wersji na Atari i Amigę, które implementują kompatybilny podzestaw sterownika na platformę Intel, przy użyciu wbudowanych w te komputery urządzeń.
Wersja Linuxa na systemy SPARC nie ma obecnie obsługi dźwięku (podobnie jak Amiga i Atari, komputery SPARC mają wbudowane urządzenia dźwiękowe, więc można to załatwić nowym sterownikiem).
Następujące karty dźwiękowe obsługiwane są przez sterownik dźwięku jądra Linuxa:
Należy zauważyć, że karty Plug and Play (PnP) nie są w pełni kompatybilne ze starszymi modelami bez PnP tego samego urządzenia. Dla przykładu, SoundBlaster16 PnP nie jest w pełni zgodna z oryginalną kartą SoundBlaster16. Podobnie jest w przypadku kart Soundscape PnP i GUS PnP. Więcej informacji o Plug and Play znajdziesz w dalszej części tego dokumentu.
Następujące karty nie są obsługiwane, z powodu, że są przestarzałe, bądź dlatego, że producent nie chce udostępnić informacji programistycznych niezbędnych do napisania sterownika.
Inne karty dźwiękowe, które określa się jako kompatybilne z jedną z obsługiwanych kart dźwiękowych mogą działać, jeśli są zgodne sprzętowo (tj. na poziomie rejestrów).
Mimo faktu, iż większość kart dźwiękowych tytułuje się mianem "kompatybilnych z SoundBlaster", bardzo niewiele z obecnie sprzedawanych kart jest wystarczająco kompatybilnych, aby pracować z linuxowym sterownikiem karty SoundBlaster. Karty te najczęściej pracują lepiej pod kontrolą sterownika MSS/WSS lub MAD16. Jedynie prawdziwe karty SoundBlaster, produkowane przez Creative Labs, zawierające oryginalne układy (tzn. SoundBlaster16 Vibra), karty MV Jaz16 i oparte o ESS688/1688 działają dobrze ze sterownikiem SoundBlaster. Próba użycia ustawienia "16-bitowa karta dźwiękowa kompatybilna z SoundBlaster Pro" to zazwyczaj tylko strata czasu.
Jądro Linuxa obsługuje port SCSI wbudowany w niektóre karty dźwiękowe (np. ProAudioSpectrum 16) i firmowy interfejs do niektórych napędów CD-ROM (np. Soundblaster Pro). Więcej informacji znajdziesz w dokumentach Linux SCSI HOWTO oraz Linux CDROM HOWTO
Dostępny jest także ładowalny moduł jądra obsługujący porty joysticka - również te, które znajdują się na niektórych kartach dźwiękowych.
Zauważ, że obsługa SCSI, CD-ROM, joysticka i sterowniki dźwiękowe w jądrze są od siebie całkowicie niezależne.
Najnowsze informacje o sterowniku kart dźwiękowych znajdziesz na stronie WWW Hannu Savolainena, której adres wymieniony jest w rozdziale Źródła Informacji.
Dostępnych jest też kilka "nieoficjalnych" sterowników dźwięku, nie włączonych do dystrybucji jądra Linuxa, używanych zamiast standardowego sterownika dźwięku.
Komercyjną wersję sterownika dźwięku pod Linuxa sprzedaje firma 4Front Technologies. Oferowana przez nich wersja ma kilka dodatkowych funkcji w porównaniu ze sterownikiem włączonym do dystrybucji jądra Linuxa. Więcej informacji na ten temat znajdziesz na stronie WWW 4Front Technologies.
Markus Mummert ( mum@mmk.e-technik.tu-muenchen.de) stworzył pakiet sterowników do kart Turtle Beach MultiSound (classic), Tahiti i Monterey. W dokumentacji czytamy:
"Jest on zaprojektowany do wysokiej jakości zapisu/odczytu z dysku twardego bez utraty synchronizacji nawet na obciążonych systemach. Inne funkcje, takie jak synteza fal, MIDI i cyfrowy procesor sygnałowy (DSP) nie mogą być używane. Nie jest również możliwe jednoczesne odtwarzanie i nagrywanie. Obecnie zastępuje on VoxWare i był testowany na kilku wersjach jądra, od 1.0.9 do 1.2.1. Można go również zainstalować na systemach UN*X SysV386R3.2."
Można je znaleźć pod adresem http://www.cs.colorado.edu/~mccreary/tbeach.
Kim Burgaard ( burgaard@daimi.aau.dk) napisał sterownik i programy narzędziowe do interfejsu MIDI Roland MPU-401. Opis z mapy oprogramowania Linuxa jest następujący:
"Sterownik do interfejsów MIDI w pełni zgodnych z Roland MPU-401 (w tym również Roland SCC-1 i RAP-10/ATW-10). Wraz ze sterownikiem otrzymujemy użyteczny zestaw programów narzędziowych, w skład którego wchodzą między innymi odtwarzacz i rejestrator standardowych plików MIDI (Standard MIDI Files)."
Od czasu wydania wersji 0.11a dokonano licznych ulepszeń. Między innymi, sterownik zawiera obecnie procedury dzielenia pracy IRQ i można go skompilować z nowym interfejsem modułów jądra. Opcja pracy z metronomem, możliwość synchronizowania np. grafiki na podstawie rytmu bez utraty precyzji, zaawansowany interfejs powtarzania/nagrywania/nadpisywania i wiele, wiele więcej."
Można to znaleźć pod adresem : ftp://sunsite.unc.edu/pub/Linux/kernel/sound/mpu401-0.2.tar.gz.
Dostępny jest sterownik dźwięku, nie wymagający żadnych dodatkowych urządzeń dźwiękowych; wykorzystuje on wewnętrzny głośnik PC. Jest on w większości programowo zgodny ze sterownikiem kart dźwiękowych, jednak jak można się było spodziewać, jakość uzyskiwanego dźwięku jest znacznie gorsza i procesor jest znacznie bardziej obciążony. Wyniki bywają różne, zależnie od charakterystyki danego głośnika. Więcej informacji znajdziesz w dokumentach dołączonych do sterownika głośnika PC.
Bieżąca wersja to 0.9b i można ją zdobyć pod adresem ftp://ftp.informatik.hu-berlin.de/pub/os/linux/hu-sound/
Innym wyjściem jest skonstruowanie konwertera cyfrowo-analogowego w oparciu o równoległy port drukarki i kilka dodatkowych komponentów. Jakość dźwięku w tym przypadku jest lepsza niż na głośniku PC, ale nadal sterownik konsumuje dużo czasu procesora. Wskazówki dotyczące budowy takiego konwertera, oraz odpowiedni sterownik zawiera wcześniej wspomniany pakiet sterujący do głośnika PC.
Konfiguracja obsługi dźwięku przez Linuxa sprowadza się do następujących kroków:
Następne rozdziały szczegółowo opisują każdy z tych kroków.
Postąp zgodnie ze wskazówkami producenta odnośnie instalacji sprzętu, lub zleć instalację dostawcy twojego komputera.
Starsze karty dźwiękowe mają zazwyczaj przełączniki lub jumpery pozwalające dobrać ustawienia IRQ, kanałów DMA, itd.; zapisz sobie wartości, które ustawisz. Jeśli nie masz pewności, wykorzystaj ustawienia fabryczne. W miarę możliwości próbuj unikać konfliktów karty z innymi urządzeniami (np. kartami ethernet, kontrolerami SCSI, portami szeregowymi i równoległymi).
Zazwyczaj powinieneś używać te same ustawienia portu I/O, IRQ i DMA, które działają pod DOSem. Jednak w niektórych przypadkach (szczególnie przy kartach PnP) dla poprawnego działania karty pod Linuxem ustawienia będą musiały być inne. Może się przydać metoda doświadczalna.
Przy wstępnej instalacji Linuxa prawdopodobnie użyłeś jądra prekompilowanego. Jądra te zazwyczaj nie zawierają obsługi dźwięku. Najlepiej przekompilować jądro samemu z takimi sterownikami, jakie są Ci potrzebne. Możesz również chcieć przekompilować jądro aby uaktualnić je do nowszej wersji lub aby zwolnić nieco pamięci przez zminimalizowanie jego rozmiarów.
Szczegóły odnośnie kompilacji jądra znajdziesz w Linux Kernel HOWTO po polsku (lub w oryginale Linux Kernel HOWTO). Wspomnę tutaj tylko o kilku kwestiach specyficznych dla kart dźwiękowych.
Jeśli nigdy wcześniej nie konfigurowałeś obsługi dźwięku w jądrze, dobrze byłoby, abyś przeczytał wszystkie dokumenty Readme dołączone do sterowników dźwięku do jądra, w szczególności informację o konkretnym typie karty dźwiękowej, której używasz. Następujące pliki informacyjne można znaleźć w katalogu kodu źródłowego sterownika dźwięku do jądra, zazwyczaj /usr/src/linux/drivers/sound:
CHANGELOG - opis zmian w poszczególnych wersjach COPYING - ograniczenia rozprowadzania i prawa autorskie Readme - najświeższe i najważniejsze informacje Readme.aedsp16 - informacje o karcie dźwiękowej Audio Excel DSP 16 Readme.cards - uwagi na temat konfigurowania konkretnych kart Readme.linux - uwagi o instalacji osobnych wersji sterownika dźwięku Readme.modules - jak skompilować sterownik dźwięku do postaci modułu ładowalnego Readme.v30 - nowe funkcje w wersji 3.0 sterownika dźwięku experimental.txt - uwagi o opcjach eksperymantalnych
Postąp zgodnie ze zwykłą procedurą tworzenia jądra. Obecnie dostępne są trzy interfejsy ułatwiające konfigurowanie jądra. Graficzny interfejs działający w X11 można wywołać wpisując "make xconfig". Interfejs oparty o okienkowe menu, wymagający jedynie trybu tekstowego jest dostępny jako "make menuconfig". Pierwotna metoda, wywoływana przez "make config", to prosty, tekstowy interfejs.
Szczególnie uważnie należy korzystać z "make xconfig" i "make menuconfig". Należy dokładnie prześledzić wszystkie pytania Yes/No. Domyślną odpowiedzią na te pytania jest zawsze 'No' (nie), co nie we wszystkich przypadkach jest poprawne. W szczególności opcja "/dev/dsp and /dev/audio support" (CONFIG_AUDIO) powinna zazwyczaj być włączona.
W tym dokumencie przyjąłem założenie, że konfigurować będziesz jądro metodą tradycyjną "make config" - odpowiadając na kolejne pytania, chociaż sam proces jest podobny w innych przypadkach.
Są również dwie różne metody konfigurowania dźwięku. Pierwsza to tzw. "stara" metoda (jedyna dostępna w jądrach przed wersją 2.0.0). Wykorzystuje ona osobny program konfiguracyjny, będący częścią sterownika dźwięku. Sposób ten jest skuteczny w przypadku więszości kart dźwiękowych z wyjątkiem kilku rzadkich modeli, które wymagają dodatkowych sterowników "niskopoziomowych" (miroSOUND, AWE32 i AEDSP16).
Druga, "nowa" metoda, jest lepiej zintegrowana z okienkowym systemem konfiguracji jądra. Nie działa ona w przypadku kart, które wymagają pliku załadowanego od producenta. Należą do nich karty PSS, SM Wave, AudioTrix Pro i TurtleBeach Tropez/Maui. Przy tych kartach konieczne jest użycie starej metody.
"make xconfig" wywołuje zawsze "nową" metodę. Przy "make menuconfig" możesz wybrać między "starą" i "nową" metodą w okienku konfiguracji dźwięku. Jeśli natomiast używasz "make config", domyślnie wybierana jest "stara" metoda. Jednak jeśli już raz skorzystałeś z "nowej" metody, będzie ona również używana przez "make config". Przełączyć się do "starej" metody możesz wówczas przez uruchomienie "make menuconfig" i wybranie jej w menu.
Zalecany sposób to użycie "make menuconfig" w połączeniu ze "starą" metodą. Wiele problemów konfiguracji dźwięku powstaje (przynajmniej częściowo) z powodu niepoprawnego użycia "nowej" metody.
Możliwe jest również skompilowanie sterownika dźwięku do postaci ładowalnego modułu jądra. Na początek zalecam wkompilowanie sterownika do rezydentnej części jądra. Z chwilą, gdy już zostanie przetestowany i działa poprawnie, możesz spróbować opcję modułu.
Po uruchomieniu make config, włącz obsługę dźwięku odpowiadając "y" na
pytanie:
Sound card support (CONFIG_SOUND) [M/n/y/?]
Po zakończeniu pytań konfiguracyjnych skompilowany i uruchomiony zostanie program konfiguracji dźwięku, który następnie wypyta cię o pożądane opcje dotyczące kart dźwiękowych. Odpowiadaj na te pytania ostrożnie, nieprawidłowa odpowiedź może spowodować, że pewne dalsze pytania w ogóle nie zostaną zadane. Dla przykładu, nie odpowiadaj "yes" na pierwsze pytanie (PAS16) jeśli rzeczywiście nie masz PAS16. Nie włączaj większej ilości kart niż faktycznie potrzebujesz obsłużyć, gdyż jedynie zajmuje to pamięć. Dodatkowo, niektóre sterowniki (jak MPU-401) mogą kłócić się z kontrolerem SCSI i uniemożliwiać ładowanie jądra.
Wymieniam poniżej opisy poszczególnych opcji konfiguracji. Odpowiedz "y" (tak) lub "n" (nie) na każde pytanie. Pokazywana jest odpowiedź domyślna, więc "[Y/n/?]" oznacza domyślnie "y", a "[N/y/?]" oznacza, że domyślnym ustawieniem jest "n". Aby użyć ustawienie domyślne po prostu naciśnij Enter, ale pamiętaj, że wartość ta niekoniecznie jest poprawna.
Wpisując znak zapytania ("?") otrzymasz krótką informację opisującą daną opcję konfiguracji.
Zauważ również, że nie wszystkie pytania muszą uzyskać odpowiedź. Program konfiguracyjny może wyłączyć pewne pytania zależnie od wcześniejszych odpowiedzi. Może również wybierać pewne opcje automatycznie.
Jeśli wcześniej kompilowałeś jądro z obsługą dźwięku, mogą być zapisane ustawienia poprzedniej konfiguracji. Jeśli chcesz użyć poprzednio wybrane opcje, odpowiedz "y". Jeśli chcesz spróbować innej konfiguracji lub uaktualniłeś jądro do nowszej wersji, powinieneś odpowiedzieć "n" i przejść przez procedurę konfiguracji.
Odpowiedz "y" tylko jeśli masz kartę Pro Audio Spectrum 16, ProAudio Studio 16 lub Logitech SoundMan 16. Nie odpowiadaj "y" jeśli masz jakąś inną kartę firmy Media Vision lub Logitech, gdyż nie są one kompatybilne z PAS16.
Odpowiedz "y" jeśli masz oryginalną kartę SoundBlaster produkcji Creative
Labs, lub klon w 100% kompatybilny (jak np. Thunderboard lub SM
Games). Jeśli twoja karta jest na liście obsługiwanych kart, zerknij na
instrukcje do tej konkretnej karty zawarte w pliku Readme.cards
zanim odpowiesz na to pytanie. Przy nieznanych kartach możesz odpowiedzieć
"y" jeśli w opisie dostarczonym z kartą stwierdzono, że jest kompatybilna z
SoundBlasterem.
Odpowiedz "y" jeśli masz kartę GUS lub GUS MAX. Odpowiedz "n" gdy ich nie masz, ponieważ sterownik zżera sporo pamięci.
Bądź ostrożny z tym pytaniem. Interfejs MPU-401 jest obsługiwany przez
prawie wszystkie karty dźwiękowe. Jednakże, pewne obsługiwane przez Linuxa
karty mają własne sterowniki do MPU-401. Włączenie opcji MPU-401 dla tych
kart wywoła konflikty. Trochę kłopotów spowodować może również włączenie
opcji MPU-401 dla sprzętu, który tak naprawdę nie ma MPU-401. Jeśli twoja
karta znalazła się na liście obsługiwanego sprzętu, przeczytaj informacje
dotyczące tej konkretnej karty w pliku Readme.cards. Bezpiecznie
jest odpowiedzieć "y" jeśli masz prawdziwą kartę interfejsu MIDI MPU-401.
Bezpiecznie jest odpowiedzieć "n" na to pytanie we wszystkich przypadkach. Interfejs 6850 UART używany jest bardzo rzadko.
Odpowiedz "y" tylko jeśli masz karty Orchid SW32, Cardinal DSP16 lub jakieś inne oparte na układzie PSS (AD1848 codec + kość ADSP-2115 DSP + kość Echo ESC614 ASIC).
Odpowiedz "y" jeśli masz zainstalowaną 16-bitową kartę siostrzaną na swojej karcie GUS. Odpowiedz "n" jeśli masz kartę GUS MAX. Odpowiedź "y" przy tej opcji powoduje wyłączenie obsługi GUS MAX.
Odpowiedz "y" tylko jeśli masz kartę GUS MAX.
Ponownie, pomyśl dobrze, zanim odpowiesz tutaj "y". Bezpiecznie jest wybrać
"y" jeśli masz oryginalną kartę Windows Sound System wyprodukowaną przez
Microsoft, lub kartę Aztech SG 16 Pro (lub NX16 Pro). Możesz również
odpowiedzieć "y" jeśli twoja karta nie była wymieniona wcześniej w tym
dokumencie. Przy kartach obsługiwanych przez VoxWare, przejrzyj instrukcje
do konkretnej karty w pliku Readme.cards. Niektóre karty mają
własną obsługę MSS i w ich przypadku włączenie tej opcji wywoła konflikty.
Odpowiedz "y" jeśli masz kartę dźwiękowoą opartą na układzie Ensoniq SoundScape. Takie karty produkowane są co najmniej przez Ensoniq, Spea i Reveal (Reveal robi także inne karty).
Odpowiedz "y" jeśli masz kartę AudioTriX Pro.
Odpowiedz "y" jeśli twoja karta ma układ interfejsu audio Mozart (OAK OTI-601) lub MAD16 (OPTi 82C928 or 82C929). Owe układy są obecnie dość popularne, więc możliwe jest, że wiele kart no-name ma jeden z nich. Dodatkowo, układ MAD16 montowany jest w niektórych kartach znanych producentów takich jak Turtle Beach (Tropez), Reveal (kilka modeli) i Diamond (ostatnie).
Odpowiedz "y" jeśli masz kartę opartą na układzie Crystal CS4232.
Odpowiedz "y" jeśli masz jedną z tych kart.
Włącz tę opcję jeśli masz kartę SoundBlaster Pro lub SoundBlaster 16. Włącz ją również jeśli masz jakikolwiek klon SoundBlaster Pro. Odpowiedź "n" oszczędza trochę pamięci, ale "y" to bezpieczniejsze wyjście.
Włącz jeśli masz kartę SoundBlaster 16 (również AWE32).
Włącz tę opcję, jeśli masz kartę Audio Excel DSP16. Więcej informacji
znajdziesz w pliku Readme.aedsp16.
Następnie program konfiguracyjny zadaje kilka pytań o serwisy wyższego poziomu. Zalecana jest odpowiedź "y" na każde z tych pytań. Odpowiadaj "n" tylko wówczas, gdy jesteś pewien, że nie będziesz danej opcji potrzebować.
Odpowiedź "n" wyłącza /dev/dsp i /dev/audio, urządzenia
konwerterów A/D i D/A. Odpowiedz "y".
Odpowiedź "n" wyłącza urządzenia /dev/midixx i dostęp do
jakichkolwiej portów MIDI wykorzystujących /dev/sequencer i
/dev/music. Opcja ta również wpływa na wszystkie urządzenia
kompatybilne z MPU-401 i/lub General MIDI.
Odpowiedz na to pytanie "y".
Odpowiedź "n" wyłącza /dev/sequencer i /dev/music
Odpowiedz "y" jeśli masz kartę dźwiękową Sound Galaxy NX Pro i życzysz sobie mieć obsługę jej rozszerzonych funkcji miksowania.
Odpowiedz "y" jeśli masz kartę dźwiękową MV Jazz16.
Odpowiedz "y" jeśli masz kartę dźwiękową Logitech SoundMan Games.
Po zadaniu powyższych pytań program konfiguracyjny pyta o szczegółowe
informacje dotyczące konfiguracji karty. Zazwyczaj chodzi o adresy I/O i
parametry IRQ i DMA. Przy niektórych kartach program pyta o pewne pliki,
które mają być użyte w trakcie instalacji karty. Są one używane przez karty
posiadające układ DSP lub mikroprocesor, który musi być zainicjalizowany
poprzez załadowanie pliku programu (mikrokodu) do pamięci karty. W
niektórych przypadkach plik mikrokodu dopisywany jest do pliku .h przez
program konfiguracyjny, a następnie włączany do sterownika w trakcie
kompilacji. Przeczytaj informacje dotyczące twojej karty w pliku
Readme.cards.
Na końcu zostaniesz zapytany:
The sound driver is now configured.
Save copy of this configuration to /etc/soundconf [Y/n/?]
(Sterownik dźwięku jest teraz skonfigurowany.
Zapisać kopię tej konfiguracji do pliku /etc/soundconf [Y/n/?])
Najczęściej powinieneś wpisać "y" abyś miał możliwość wykorzystanie tej samej konfiguracji sterownika dźwięku następnym razem przy kompilacji jądra.
Jeśli uaktualniasz sterownik dźwięku do nowszej wersji, upewnij się, że
pliki /usr/include/sys/soundcard.h i
/usr/include/sys/ultrasound.h są dowiązaniami symbolicznymi do
odpowiadających im plików w katalogu /usr/include/linux, lub że po
prostu zawierają wiersze odpowiednio #include
<linux/soundcard.h> i #include
<linux/ultrasound.h>.
Jesteś teraz gotowy do kompilacji i instalacji nowego jądra.
Dla poprawnego działania urządzeń dźwiękowych, należy stworzyć dla nich pliki urządzeń. Zazwyczaj tworzone są one automatycznie podczas instalacji systemu Linux. Można przeprowadzić szybki test przy użyciu poniższych poleceń. Jeśli wynik jest zgodny z poniższym (różne będą daty utworzenia plików), prawie na pewno pliki urządzeń dźwiękowych są ustawione poprawnie.
% ls -l /dev/sdnstat
crw-rw-rw- 1 root root 14, 6 Apr 25 1995 /dev/sndstat
Pamiętaj, że samo posiadanie odpowiednich plików urządzeń niczego jeszcze nie gwarantuje. Sterownik jądra musi być załadowany lub wkompilowany zanim urządzenia zaczną pracować (więcej o tym później).
W sporadycznych przypadkach, jeśli przekonany jesteś, że pliki urządzeń są
niepoprawne, możesz je utworzyć ponownie przy użyciu krótkiego skryptu
powłoki zamieszczonego na końcu pliku Readme.linux w katalogu
/usr/src/linux/drivers/sound. Powinieneś powinieneś uruchomić ten
skrypt jako root. Dodatkowo, większość dystrybucji Linuxa zawiera skrypt
/dev/MAKEDEV, który można wykorzystać do tych celów.
Jeśli używasz sterownika dźwięku do głośnika PC, przeczytaj dokumentację dołączoną do pakietu aby ustalić, czy konieczne jest stworzenie jakichś plików urządzeń.
Powinieneś być teraz gotów do przeładowania nowego jądra i sprawdzenia sterowników dźwięku. Postąp zgodnie ze swoją zwykłą procedurą instalacji i przeładowywania jądra (oczywiście trzymaj poprzednie jądro gdzieś pod ręką na wypadek kłopotów).
Sound initialization started
<Sound Blaster 16 (4.13)> at 0x220 irq 5 dma 1,5
<Sound Blaster 16> at 0x330 irq 5 dma 0
<Yamaha OPL3 FM> at 0x388
Sound initialization complete
Opis powinien pasować do typu twojej karty dźwiękowej i ustawień przełączników (jeśli takowe są).
Pamiętaj, że powyższy komunikat nie jest wyświetlany, jeśli używasz ładowalnego modułu jądra (chyba, że to włączysz, np. tak: "insmod sound trace_init=1").
Jeśli sterownik dźwięku jest wkompilowany w jądro, powinny się pojawić komunikaty "Sound initialization started" ("Inicjalizacja dźwięku rozpoczęta") oraz "Sound initialization complete" ("Inicjalizacja dźwięku zakończona"). W przeciwnym wypadku, jądro nie zawiera sterownika dźwięku. Powinieneś wówczas sprawdzić, czy rzeczywiście zainstalowane zostało nowe jądro, które skompilowałeś po włączeniu obsługi dźwięku.
Jeśli między napisami "Sound initialization started" i "Sound initialization complete" nie pojawią się żadne wiersze, oznacza to, że nie wykryte zostały żadne urządzenia dźwiękowe. Najprawdopodobniej nie masz włączonego odpowiedniego sterownika, karta nie jest obsługiwana, podałeś zły port I/O lub masz kartę PnP, która nie została skonfigurowana.
W trakcie ładowania sterownik może również wyświetlać komunikaty o błędach i ostrzeżenia. Obserwuj je podczas ładowania sterownika po raz pierwszy po kompilacji.
Następnie powinieneś sprawdzić plik urządzeń
/dev/sndstat. Odczytanie statusu tego pliku powinno udzielić ci
dodatkowych informacji o tym, czy sterownik dźwięku poprawnie rozpoczął
pracę. Przykładowy wynik powinien wyglądać mniej więce tak:
% cat /dev/sndstat
Sound Driver:3.5.4-960630 (Sat Jan 4 23:56:57 EST 1997 root,
Linux fizzbin 2.0.27 #48 Thu Dec 5 18:24:45 EST 1996 i586)
Kernel: Linux fizzbin 2.0.27 #48 Thu Dec 5 18:24:45 EST 1996 i586
Config options: 0
Installed drivers:
Type 1: OPL-2/OPL-3 FM
Type 2: Sound Blaster
Type 7: SB MPU-401
Card config:
Sound Blaster at 0x220 irq 5 drq 1,5
SB MPU-401 at 0x330 irq 5 drq 0
OPL-2/OPL-3 FM at 0x388 drq 0
Audio devices:
0: Sound Blaster 16 (4.13)
Synth devices:
0: Yamaha OPL-3
Midi devices:
0: Sound Blaster 16
Timers:
0: System clock
Mixers:
0: Sound Blaster
Powyższe polecenie może wywołać kilka komunikatów błędu. "No such file or directory" ("Nie ma takiego pliku lub katalogu") oznacza, że musisz stworzyć pliki urządzeń (patrz rozdział 4.3). "No such device" ("Nie ma takiego urządzenia") oznacza, że sterownik dźwięku nie jest dołączony lub załadowany do jądra. Cofnij się do rozdziału 4.2 aby to poprawić.
Jeśli wiersze w sekcji "Card config:" ("Konfiguracja karty:") /dev/sndstat są wyświetlone w nawiasach (jak np. "(SoundBlaster at 0x220 irq 5 drq 1,5)"), oznacza to, że urządzenie to zostało skonfigurowane, ale nie wykryte.
Powinieneś teraz móc odtworzyć prosty plik dźwiękowy. Zdobądź przykładowy plik dźwiękowy i wyślij go do urządzenia dźwiękowego, tzn.
% cat endoftheworld >/dev/dsp
% cat crash.au >/dev/audio
(Upewnij się, że nie pomijasz ">" w powyższym poleceniu).
Pamiętaj jednak, że używanie cat nie jest, ogólnie rzecz biorąc,
poprawną metodą odtwarzania plików dźwiękowych, to tylko szybki test. Na
pewno przyda ci się stosowny program odtwarzający dźwięk (opisane później),
który zrobi to lepiej.
Polecenie to zadziała tylko jeśli na liście urządzeń dźwiękowych w pliku /dev/sndstat masz co najmniej jedno urządzenie. Jeśli część wymieniająca urządzenia dźwiękowe jest pusta, powinieneś sprawdzić, dlaczego urządzenie nie zostało wykryte.
Jeśli powyższe polecenie zwróci "I/O error" ("Błąd wejścia/wyjścia"), powinieneś zerknąć na końcówkę komunikatów jądra przy użyciu polecenia "dmesg". Prawdopodobne jest, że znajdziesz tam komunikat o błędzie "Sound: DMA (output) timed out - IRQ/DRQ config error?" (Dźwięk: DMA (wyjście) przekroczenie limitu czasowego - błąd konfiguracji IRQ/DRQ?"). Powyższy komunikat oznacza, że sterownik nie uzyskał oczekiwanego przerwania od karty dźwiękowej. W większości przypadków oznacza to, że IRQ lub kanał DMA ustawione w sterowniku nie działają. Najlepszą metodą ich uruchomienia jest spróbowanie wszystkich możliwych kanałów DMA i numerów IRQ obsługiwanych przez urządzenie.
Inną możliwą przyczyną jest fakt, że urządzenie nie jest kompatybilne z urządzeniem, dla którego skonfigurowany jest sterownik dźwięku. Najczęściej tak jest np. gdy karta teoretycznie "kompatybilna z SoundBlaster (Pro/16)" nie działa ze sterownikiem SoundBlaster. W tym przypadku powinieneś spróbować dowiedzieć się, z jakim urządzeniem twoja karta jest kompatybilna (np. wysyłając pytanie do grupy dyskusyjnej comp.os.linux.hardware).
Kilka próbnych plików dźwiękowych znaleźć można pod adresem ftp://tsx-11.mit.edu/pub/linux/packages/sound/snd-data-0.1.tar.Z
Możesz teraz sprawdzić nagrywanie dźwięku. Jeśli masz możliwość nagrywania, przeprowadź szybki test używając poleceń typu:
# nagranie 4 sekund dźwięku z mikrofonu
EDT% dd bs=8k count=4 </dev/audio >sample.au
4+0 records in
4+0 records out
# odtworzenie dźwięku
% cat sample.au >/dev/audio
Oczywiście, aby to zadziałało, musisz mieć mikrofon podłączony do karty dźwiękowej i powinieneś do niego coś powiedzieć. Możesz również potrzebować program miksujący aby ustawić mikrofon jako urządzenie wejściowe i dostosować poziom nagrywania.
Jeśli przejdziesz przez te testy, możesz być dosyć pewny, że sprzęt i oprogramowanie konwersji dźwięku D/A i A/D działają poprawnie. Jeśli napotkasz problemy, zerknij do następnego rozdziału tego dokumentu.
Jeśli nadal masz problemy mimo postąpienia zgodnie z instrukcjami w tym dokumencie, oto kilka rzeczy, które powinieneś sprawdzić. Testy są uszeregowane względem rosnącego stopnia złożoności. Jeśli test się nie powiedzie, usuń problem zanim przejdziesz do następnego etapu.
Możesz zerknąć na datę i czas utworzenia pliku jądra aby sprawdzić, czy
uruchomione jest to, w które wkompilowałeś obsługę dźwięku. Możesz to
zrobić za pomocą polecenia uname:
% uname -a
Linux fizzbin 2.0.0 #1 Tue Jun 4 16:57:55 EDT 1996 i386
lub wyświetlając zawartość pliku /proc/version
% cat /proc/version
Linux version 2.0.0 (root@fizzbin) (gcc version 2.7.0) #1 Tue Jun 4 16:57:55 EDT 1996
Jeśli data i czas nie zgadzają się z momentem, w którym kompilowałeś jądro,
uruchomione jest starsze jądro. Czy rzeczywiście przeładowałeś system?
Jeśli używasz LILO, czy przeinstalowałeś je (zazwyczaj poprzez uruchomienie
/etc/lilo/install)? Jeśli ładujesz system z dyskietki, czy
stworzyłeś nową dyskietkę startową i użyłeś jej do załadowania systemu?
Najprostszą metodą jest sprawdzenie zawartości "/dev/sndstat", jak to opisano wcześniej. Jeśli zawartość nie jest taka, jakiej się spodziewamy, coś musiało pójść nie tak w trakcie konfigurowania lub kompilacji jądra. Rozpocznij ponownie proces instalacji, począwszy od konfiguracji i kompilacji jądra.
Upewnij się, że karta dźwiękowa została wykryta w trakcie przeładowywania
systemu. Powinieneś zobaczyć komunikat ładowania. Jeśli komunikaty
przewinęły się za szybko poza krawędź ekranu, możesz je zazwyczaj przywołać
przy użyciu polecenia dmesg:
% dmesg
lub
% tail /var/adm/messages
Jeśli karta nie została znaleziona, coś poszło niepomyślnie. Upewnij się, że jest rzeczywiście zainstalowana. Jeśli karta pracuje pod DOS, możesz być dosyć pewny, że sprzęt działa poprawnie, więc najprawdopopdobniej jest jakiś problem z konfiguracją jądra. Albo wkompilowałeś zły typ karty lub złe parametry, albo twoja karta nie jest kompatybilna z żadnym ze sterowników dźwięku do jądra Linuxa.
Jest także możliwe, że twoja karta dźwiękowa jest jednym z tych
"kompatybilnych" modeli, które wymagają inicjalizacji przez sterownik pod
DOS. Spróbuj załadować DOS, a następnie sterownik dostarczony przez
producenta karty. Następnie załaduj Linuxa używająć miękkiego przeładowania
przez Control-Alt-Delete. Upewnij się, że ustawienia portu I/O karty,
DMA i IRQ są takie same, jak użyte pod DOS. Wskazówki na temat
konfigurowania danego typu karty znajdziesz w pliku Readme.cards.
Jeśli twoja karta dźwiękowa nie jest wymieniona w tym dokumencie, możliwe jest, że sterowniki Linuxa jej nie obsługują. Aby się skonsultować w tej sprawie, możesz sprawdzić kilka odnośników zamieszczonych na końcu tego dokumentu.
Spróbuj odczytać coś z urządzenia /dev/audio przy użyciu programu
dd wymienionego wcześniej w tym dokumencie. Polecenie powinno
działać bezbłędnie.
Jeśli nie działa, są szanse, że problem polega na konflikcie IRQ lub DMA lub niekompatybilności jakiegoś rodzaju sprzętu (urządzenie nie jest obsługiwane przez Linuxa lub sterownik jest skonfigurowany dla innego urządzenia)
Daleka ewentualność to wadliwy sprzęt. Jeśli to możliwe, przetestuj kartę pod DOSem, aby się upewnić.
Jeśli nadal masz problemy, oto kilka ostatecznych sugestii, co możesz jeszcze sprawdzić:
comp.os.linux
lub innych (dobry wybór to comp.os.linux.hardware; z powodu dużego
ruchu w tych grupach, dobrze jest umieszczać słowo "sound" ("dźwięk") w
temacie wysyłanego artykułu, aby eksperci mogli łatwo to zauważyć)Esc-x doctor :-)
Podaję tutaj przykładowe typy programów, które mogłyby ci się przydać, jeśli masz kartę dźwiękową pod Linuxem. Aby znaleźć więcej bieżących informacji, możesz sprawdzić Mapę Oprogramowania na Linuxa (Linux Software Map), archiwa internetowe i/lub pliki na krążku z dystrybucją Linuxa.
Jako minimum, z pewnością będziesz potrzebować następujące programy obsługujące dźwięk:
Sox)aumix lub xmix)play lub wavplay)tracker)playmidi)W przypadku większości z powyższych programów, istnieją zarówno wersje tekstowe, jak i wzbogacone o interfejs użytkownika. Istnieją również bardziej ezoteryczne programy (np. synteza i rozpoznawanie mowy), które mogłbyś zechcieć spróbować.
W tym rozdziale udzielono odpowiedzi na niektóre pytania spośród często zadawanych w pocztowych grupach dyskusyjnych i grupach Usenetu.
Odpowiedzi na więcej pytań można również znaleźć na stronie WWW sterownika dźwięku OSS.
Są to najbardziej "typowe" nazwy plików urządzeń, niektóre dystrybucje używają nieco innych nazw.
zazwyczaj dowiązanie do /dev/audio0
urządzenie dźwiękowe, kompatybilne ze stacjami roboczymi Sun (tylko częściowa implementacja, nie obsługuje interfejsu ioctl Sun, tylko kodowanie u-law)
drugie urządzenie dźwiękowe (jeśli jest obsługiwane przez kartę dźwiękową lub jeśli masz więcej zainstaowanych kart niż jedną)
zazwyczaj dowiązanie do /dev/dsp0
pierwsze urządzenie cyfrowego próbkowania
drugie urządzenie cyfrowego próbkowania
zazwyczaj dowiązanie do /dev/mixer0
pierwszy mikser dźwięku
drugi mikser dźwięku
interfejs wysokiego poziomu sequencera
niskopoziomowy dostęp do MIDI, FM, i GUS
zazwyczaj dowiązanie do /dev/music
pierwszy surowy port MIDI
drugi surowy port MIDI
trzeci surowy port MIDI
czwarty surowy port MIDI
wyświetla status sterownika dźwięku jeśli przeczytany
Sterownik głośnika PC udostępnia następujące urządzenia:
odpowiednik /dev/audio
odpowiednik /dev/dsp
odpowiednik /dev/mixer
Pliki dźwiękowe stacji roboczych Sun (.au) można odtworzyć wysyłając je do
urządzenia /dev/audio. Surowe próbki (pliki raw) można wysłać do
/dev/dsp. Jednak zazwyczaj przyniesie to kiepskie efekty i lepiej
jest używać program taki jak play, ponieważ rozpoznaje on
większość typów plików i ustawia odpowiednią częstotliwość próbkowania i
inne parametry na karcie.
Programy takie jak wavplay lub vplay (w pakiecie snd-util) dadzą najlepsze rezultaty z plikami WAV. Jednakże nie rozpoznają one plików WAV skompresowanych metodą Microsoft ADPCM. Starsze wersje programu play (z pakietu Lsox) nie działają również zbyt dobrze z 16-bitowymi plikami WAV.
Polecenie splay wchodzące w skład pakietu snd-util może być używane do odtwarzania większości plików dźwiękowych jeśli odpowiednie parametry podasz ręcznie w wierszu polecenia.
Odczyt /dev/audio lub /dev/dsp zwróci próbkowane dane,
które można przekierować do pliku. Program taki jak vrec ułatwia
kontrolowanie częstotliwości próbkowania, czas nagrania, itp. Może ci się
również przydać programowy mikser do wybierania stosownego urządzenia
wejściowego.
Przy obecnym sterowniku dźwięku jest możliwe posiadanie kilku kart SoundBlaster, SoundBlaster/Pro, SoundBlaster16, MPU-401 lub MSS jednocześnie w tym samym komputerze. Instalacja dwóch SoundBlasterów jest możliwa, ale wymaga zdefiniowania makr SB2_BASE, SB2_IRQ, SB2_DMA oraz (w niektórych przypadkach) SB2_DMA2 przez ręczną edycję pliku local.h. Możliwe jest również posiadanie karty SoundBlaster jednocześnie z PAS16.
Następujące sterowniki nie zezwalają na posiadanie wielokrotnych urządzeń:
(Błąd: Nie znaleziono pliku lub katalogu)
Musisz stworzyć pliki urządzeń dźwiękowych. Przeczytaj rozdział o tworzeniu plików urządzeń. Jeśli masz pliki urządzeń, upewnij się, że mają poprawne liczby główną i poboczną (niektóre starsze dystrybucje Linuxa na CD-ROM nie tworzą odpowiednich plików urządzeń przy instalacji).
(Błąd: Nie znaleziono urządzenia)
Nie przeładowałeś jądra zawierającego sterownik dźwięku lub adres I/O nie odpowiada twojemu sprzętowi. Sprawdź, czy uruchomione jest świeżo skompilowane jądro i upewnij się, że ustawienia wpisane w trakcie konfigurowania sterownika odpowiadają charakterystyce sprzętu.
(Błąd: Brak wolnej przestrzeni na urządzeniu)
Może się to zdarzyć jeśli próbowałeś nagrywać dane na /dev/audio lub /dev/dsp bez stworzenia niezbędnego pliku urządzeń. Urządzenie dźwiękowe jest teraz zwykłym plikim, który wypełnił twoją partycję. Powinieneś uruchomić skrypt opisany w rozdziale Tworzenie Plików Urządzeń niniejszego dokumentu.
Może się to również przytrafiać przy jądrach Linuxa 2.0 i późniejszych jeśli nie ma wystarczającej ilości wolnej pamięci RAM w momencie, gdy zaczynamy używać urządzenie. Sterownik dźwięku wymaga co najmniej dwóch stron (8k) fizycznie ciągłej przestrzeni RAM dla każdego kanału DMA. Zdarza się to czasami na komputerach z mniej niż 16M pamięci RAM, lub działających przez bardzo długi czas. Możliwe jest zwolnienie nieco pamięci RAM przez skompilowanie i uruchomienie następującego programu w języku C przed ponowną próbą skorzystania z urządzenia.
main() {
int i;
char mem[500000];
for (i = 0; i < 500000; i++)
mem[i] = 0;
exit(0);
}
(Błąd: Urządzenie zajęte)
Tylko jeden proces może korzystać z danego urządzenienia dźwiękowego w
danym momencie. Najprawdopodobniej jakiś inny proces korzysta z urządzenia,
z którym mamy problem. Jedną z metod sprawdzenia tego jest użycie polecenia
fuser:
% fuser -v /dev/dsp
/dev/dsp: USER PID ACCESS COMMAND
tranter 265 f.... tracker
W powyższym przykładzie, polecenie fuser wykazało, że proces 265 korzysta z urządzenia. Usunięcie procesu lub poczekanie aż się skończy umożliwi ponwne korzystanie z urządzenia.
Zdaniem Briana Gough, przy kartach SoundBlaster używających 1 kanału DMA istnieje potencjalny konflikt ze sterownikiem napędów taśmowych QIC-02, który również korzysta z DMA 1, co wywołuje błędy "device busy" (urządzenie zajęte). Zgodnie z FTAPE-HOWTO sterownik QIC-02 nie jest niezbędny aby używać FTAPE; wymagany jest jedynie sterownik QIC-117. Przekonfigurowanie jądra aby używało sterownika QIC-117 zamiast QIC-02 umożliwi koegzystencję FTAPE i sterownika dźwięku.
Symptom polega zawyczaj na tym, że próbka jest odgrywana przez mniej więcej sekundę, a następnie zatrzymuje się lub wyświetlany jest komunikat "missing IRQ" (brak IRQ) lub "DMA timeout" (przekroczenie limitu czasowego DMA). Najprawdopodobniej masz niepoprawnie ustawione parametry IRQ i DMA. Sprawdź, czy konfiguracja jądra odpowiada ustawieniom na przełącznikach karty i że nie kłócą się one z jakąś inną kartą.
Innym objawem są próbki dźwiękowe, które się "zapętlają". Jest to zazwyczaj spowodowane konfliktem IRQ.
Odtwarzanie plików MOD wymaga dość znacznej pracy procesora. Być może masz zbyt wiele działających procesów lub twój komputer jest zbyt wolny, aby odtwarzać w czasie rzeczywistym. Masz następujące możliwości:
Jeśli masz kartę Gravis UltraSound, powinieneś używać jednego z programów
do odtwarzania plików MOD, napisanych specjalnie dla karty GUS
(np. gmof).
Wersja 1.0c i wcześniejsze sterownika dźwięku wykorzystywały inny i
niekompatybilny schemat ioctl(). Zdobądź nowsze kody źródłowe lub
nanieś niezbędne poprawki aby przystosować dany program do nowego
sterownika dźwięku. Więcej szczegółów znajdziesz w pliku Readme
sterownika dźwięku.
Upewnij się również, że używasz ostatnią wersję soundcard.h i
ultrasound.h przy kompilacji programów. Zerknij na wskazówki
instalacyjne na początku tego tekstu.
Jest to prawdopodobnie taki sam problem, jaki opisano w poprzednim pytaniu.
Zobacz pliki Readme i CHANGELOG dostarczone z kodem
źródłowym sterownika dźwięku do jądra.
Są one częściowo opisane w Hacker's Guide to VoxWare (Podręcznik Hackera do VoxWare), obecnie dostępny w formie dokumentu draft. Ostatnia wersja to draft 2 i można ją znaleźć w ftp://nic.funet.fi/pub/OS/Linux/ALPHA/sound. Pamiętaj, że ten katalog jest "ukryty" i nie pojawia się w liście katalogów. Jeśli wejdziesz do tego katalogu i użyjesz polecenia FTP "dir", pliki tam będą.
W trakcie pisania tego dokumentu nowa dokumentacja pojawiła się na stronie WWW firmy 4Front Technologies.
Innym źródłem informacji jest Przewodnik po Multimediach w Linuxie, opisany w rozdziale Źródła Informacji.
Nie ma odpowiedzi na to pytanie, ponieważ zależy to od następujących czynników:
Ogólnie rzecz biorąc, każdy komputer 386 powinien z łatwością być w stanie odtwarzać próbki lub muzykę powstałą przez syntezę FM na 8-bitowej karcie.
Jednakże odtwarzanie plików MOD wymaga dość dużej pracy procesora. Niektóre eksperymentalne pomiary wykazały, że odtwarzanie przy częstotliwości 44kHz wymaga ponad 40% prędkości 486/50 i komputer 386/25 będzie miał już kłopoty z próbkami powyżej 22kHz (takie są na 8-bitowych kartach, takich jak SoundBlaster). Karty takie jak Gravis UltraSound przeprowadzają więcej operacji sprzętowo i odciążają procesor.
Powyższe stwierdzenia są prawdziwe przy zakłożeniu, że komputer nie prowadzi żadnych działań obciążających procesor.
Dokonywanie konwersji plików dźwiękowych lub dodawanie efektów przy użyciu
programów narządziowych jak np. sox jest również szybsze jeśli masz
koprocesor matematyczny (lub procesor z wbudowanym FPU). Sterownik jądra
sam w sobie nie wykonuje jednak żadnych obliczeń zmiennoprzecinkowych.
(następujące wyjaśnienie udostępnił seeker@indirect.com)
Linux rozpoznaje 1542 jedynie pod adresem 330 (domyślnie) lub 334, a PAS zezwala na emulację MPU-401 jedynie pod adresem 330. Nawet jeśli wyłączysz MPU-401 programowo, coś nadal chce się kłócić z 1542, jeśli jest on pod preferowanym adresem domyślnym. Przełączenie 1542 pod adres 334 wszystkich uszczęśliwi.
Dodatkowo, zarówno 1542, jak i PAS-16 korzystają z 16-bitowego DMA, więc jeśli próbkujesz przy 16 bitach i 44kHz w stereo i zapisujesz plik na dysku SCSI podczepionym pod 1542, jesteś o krok od kłopotów. DMA zachodzą na siebie i nie ma wystarczająco dużo czasu na odświeżenie RAM, więc dostajesz okrutny komunikat ``PARITY ERROR - SYSTEM HALTED'' (BŁĄD PARZYSTOŚCI - SYSTEM ZAWIESZONY), bez jakichkolwiek wskazówek, jak do tego doszło. Tym gorzej, że kilku innych producentów napędów QIC-117 zaleca ustawianie czasu włączania/wyłączania magistrali w taki sposób, że 1542 pozostaje włączony nawet dłużej niż zwykle. Zdobądź program SCSISEL.EXE z BBSu firmy Adaptec lub kilku innych miejsc w Internecie i zmniejszaj czas BUS ON lub zwiększaj BUS OFF dopóki problem nie zniknie, następnie ustaw je jeszcze ździebko dalej. SCISEL zmienia ustawienia EEPROM, więc jest to bardziej trwałe niż poprawka w wierszu sterownika pod DOS w CONFIG.SYS i będzie działać jeśi załadujesz bezpośrednio Linuxa (nie jest tak przy poprawce w DOSie). Następny problem z głowy.
Ostatni problem - starsze układy Symphony drastycznie zmniejszały czas cykli I/O aby przyspieszyć dostęp do magistrali. Żadna karta spośród różnych, którymi się bawiłem nie miała żadnych problemów ze zmniejszonym czasem, za wyjątkiem PAS-16. BBS firmy Media Vision udostępnia SYMPFIX.EXE, który ma usuwać problem przez zmianę bitu diagnostycznego w kontrolerze magistrali Symphony, ale nie jest to wystarczająca gwarancja. Mogą być konieczne:
Firma Young Microsystems uzupełnia płyty główne, które importuje, za mniej więcej $30 (US); inni producenci mogą też to robić jeśli jesteś w stanie dociec, kto sprowadził lub wyprodukował płytę główną (życzę szczęścia). Problem tkwi w układzie interfejsu magistrali ProAudio, o ile mi wiadomo; nikt nie kupuje karty dźwiękowej za $120 żeby zaraz wetknąć ją w 6MHz AT. Większość z nich działa znakomicie na komputerach 25-40MHz 386/486 i powinna być w stanie obsłużyć co najmniej 12MHz magistralę, o ile układy są poprawnie zaprojektowane.
Pierwszy problem zależy od układów użytych na płycie głównej, prędkości magistrali i innych ustawień BIOS, oraz fazy księżyca. Drugi problem zależy od ustawienia opcji odświeżania (ukryte lub synchroniczne), prędkości DMA 1542 i (być może) prędkości I/O magistrali. Trzeci można wykryć dzwoniąc do Media Vision i pytając, który rodzaj kości Symphony jest niekompatybilny. Bądź jednak ostrzeżony - 3 z 4 techników, z którymi rozmawiałem miało uszkodzenie mózgu. Byłbym bardzo ostrożny zanim bym uwierzył w cokolwiek, co powiedzieli o czyimś sprzęcie, ponieważ nawet swojego nie znają za dobrze.
Z powodu ograniczeń sprzętowych, nie jest to możliwe na większości kart dźwiękowych. Niektóre nowsze karty to umożliwiają. Więcej informacji znajdziesz w rozdziale o "trybie dwukierunkowym" w Podręczniku Hackera do VoxWare.
Na '286 i starszych komputerach, przerwanie IRQ 2 jest przeniesione do drugiego kontrolera przerwań. Jest ono równoważne IRQ 9.
Dawniej, firma Creative Labs nie chciała udostępniać informacji dla programistów o tych kartach. Zmienili jednak swą politykę i sterownik do AWE wchodzi obecnie w skład sterowników w jądrach Linuxa 2.1.x.
Zdarza się to po miękkim przełądowaniu DOS. Czasami komunikat o błędzie myląco odnosi się do rzekomego błędu w pliku CONFIG.SYS.
Większość obecnych kart dźwiękowych ma programowo konfigurowalne ustawienia IRQ i DMA. Jeśli używasz inne ustawienia na Linuxie i MS-DOS/Windows, możesz napotkać problemy. Niektóre karty dźwiękowe nie przyjmują nowych ustawień bez całkowitego przeładowania (wyłączenie zasilania lub wciśnięcie przycisku reset).
Szybkim rozwiązaniem tego problemu jest pełne przeładowanie komputera przy użyciu przycisku reset lub przez wyłączenie i włączenie zasilania, a nie przeładowanie miękkie (np. przez Ctrl-Alt-Del).
Poprawne rozwiązanie upewnienie się, że pod MS-DOS i Linuxem używane są te same ustawienia (lub nie używaj DOS :-).
Użytkownikom linuxowej wersji gry DOOM firmy ID software mogą się te uwagi przydać.
Aby uzyskać poprawny dźwięk wyjściowy, potrzebujesz sterownik dźwięku w wersji 2.90 lub późniejszej; ma on obsługę "trybu DOOM" w czasie rzeczywistym.
Próbki dźwiękowe są 16-bitowe. Jeśli masz kartę 8-bitową, możesz nadal usłyszeć dźwięk przy użyciu jednego z kilku programów dostępnych w ftp://sunsite.unc/edu/pub/Linux/games/doom.
Jeśli gra DOOM działa wolno na twoim komputerze, wyłączenie dźwięku (przez
zmianę nazwy pliku sndserver) może ją przyspieszyć.
Domyślnie DOOM nie obsługuje dźwięku (jak w wersji na DOS). Program
musserver dodaje obsługę dźwięku do DOOMa pod Linuxem. Możesz go
znaleźć pod adresem
ftp://pandora.st.hmc.edu/pub/linux/musserver.tgz.
(Ostatnie przełomowe wieści: zdaje się, że sterownik dźwięku do gry DOOM nie chce działać z jądrami 2.0.x. Informuje o błędzie związanym z /dev/sequencer.)
Użycie dobrej jakości ekranowanych kabli i próbowanie karty w różnych slotach może pomóc w redukowaniu poziomu szumów. Jeśli karta dźwiękowa ma regulator głośności, możesz spróbować jego różne ustawienia (maksymalne jest prawdopodobnie najlepsze).
Użycie programowego miksera pozwala ci się upewnić, że niepożądane sygnały wejściowe (np. mikrofon) są ustawione na zerowym poziomie.
Konstrukcja niektórych kart dźwiękowych nie zapewnia dobrego ekranowania i uziemienia, przez co zbierają one sporo szumów.
Na koniec, w moim systemie odkryłem, że opcja jądra no-hlt w linii
polecenia zmniejsza poziom szumów. Przekazuje ona do jądra informację, aby
nie używana była instrukcja halt w trakcie przetwarzania pętli biernego
procesu. Możesz sprawdzić to ręcznie w trakcie ładowania systemu, lub
ustawić przez dodanie polecenia append="no-hlt" do pliku
konfiguracyjnego LILO.
Jeśli możesz odtwarzać dźwięk, ale nie nagrywać, spróbuj zrobić następujące rzeczy:
Czasami do nagrywania używany jest inny kanał DMA niż do odtwarzania. W tym przyoadku najbardziej prawdopodobnym powodem będzie niepoprawne ustawienie DMA dla nagrywania.
W większości przypadków karty "kompatybilne z SoundBlaster" będą działać lepiej pod Linuxem jeśli zostaną skonfigurowane ze sterownikiem innym niż SoundBlaster. Większość kart jest teoretycznie kompatybilna (tzn. "kompatybilna z 16-bitową SB Pro" lub "16-bitowa kompatybilna z SB"), ale zwykle ów tryb SoundBlaster jest tylko sztuczką dodaną dla kompatybilności gier pod DOSem. Większość kart ma 16-bitowy macierzysty tryb, który jest prawdopodobnie obsługiwany przez ostatnie wersje jądra Linuxa (2.0.1 i późniejsze).
Tylko przy niektórych (zazwyczaj raczej starych) kartach niezbędna jest próba uruchomienia ich w trybie SoundBlaster. Jedyne nowsze karty, które są wyjątkami od tej reguły są karty oparte na Mwave.
16-bitowe karty opisane jako kompatybilne z SoundBlaster są rzeczywiście kompatybilne jedynie z 8-bitową kartą SoundBlaster Pro. Mają zazwyczaj 16-bitowy tryb, który nie jest kompatybliny z SoundBlaster 16 oraz sterownikiem dźwięku w Linuxie.
Może ci się udać uruchomić kartę w trybie 16-bitowym przy użyciu sterownika MAD16 lub MSS/WSS.
Oto kilka dobrych archiwów, które możesz przekopać w poszukiwaniu programów obsługujących dźwięk pod Linxem:
Przy ostatnich jądrach sterownik dźwięku może być skompilowany do postaci modułu.
Szczegóły znajdziesz w plikach /usr/src/linux/drivers/sound/Readme.modules i /usr/src/linux/Documentation/modules.txt (lub /usr/src/linux/README).
Spróbuj program oplbeep, znajdujący się pod adresem
ftp://sunsite.unc.edu/pub/Linux/apps/sound/oplbeep-alpha.tar.gz
Inny wariant to program beep, znajdujący się tu:
ftp://sunsite.unc.edu/pub/Linux/kernel/patches/misc/modreq_beep.tgz
Pakiet modutils zawiera przykładowy program i poprawkę do jądra, które
pozwalają uruchamiać dowolny program zewnętrzny generujący dźwięki gdy jest
to wymagane przez jądro.
Dodatkowo, przy niektórych kartach dźwiękowych możesz podłączyć wyjście głośnika PC do karty - wówczas wszystkie dźwięki wydobywają się z głośników podłączonych do karty.
Sterowniki dźwięku do jądra obsługują kilka różnych systemów kompatybilnych z Unixem, opartych na architekturze Intel. Można je zdobyć jako osobny pakiet, oddzielony od jądra. Do lutego 1996 autor nazywał oprogramowanie "VoxWare". Niestety, nazwa ta została zarejestrowana przez VoxWare Incorporated i nie można jej używać. Nowa nazwa sterownika to OSS/Free.
Open Sound System (OSS - Otwarty System Dźwiękowy) jest komercyjnie dostępnym steronikiem dźwięku dla różnych systemów Unix, sprzedawanym przez 4Front Technologies. Darmowa wersja, znana jako OSS/Free będzie nadal udostępniana za darmo na systemy Linux.
Więcej informacji znajdziesz na stronie WWW firmy 4Front Technologies - http://www.4front-tech.com/.
Inne nazwy, na jakie mogłeś się natknąć, które były używane wcześniej w odniesieniu do tego samego sterownika to TASD (Tymczasowo Anonimowy Sterownik Dźwięku) oraz USS (Unix Sound System - System Dźwięku dla Unixa).
Pełna obsługa Plug and Play powinna pojawić się w Linuxie 2.1. Tymczasem, istnieje kilka rozwiązań, pozwalających uruchomić karty Plug and Play.
Jeśli masz nowszy system Pentium z BIOSem Plug and Play, powinien się on automatycznie zająć konfigurowaniem kart. Upewnij się, że ustawiłeś sterownik dźwięku w Linuxie na takie same parametry adresu I/O, IRQ i kanału DMA, jakie użyte zostały przez BIOS.
Istnieje pakiet programów narzędziowych do Plug and Play dla Linuxa, który można wykorzystać do ustawienia karty. Można go znaleźć na stronach WWW Red Hat : http://www.redhat.com/ (może być także włączony do twojej dystrybucji Linuxa).
Jeśli używasz kartę pod Windows95, możesz użyć menedżera urządzeń do ustawienia karty, następnie miękko przeładować Linuxa przy użyciu programu LOADLIN. Upewnij się, że Windows95 i Linux używają tych samych ustawień karty.
Jeśli używasz kartę pod DOSem, do konfigurowania karty pod DOS możesz użyć
program narzędziowy icu, dostarczany z kartami SoundBlaster16
PnP. Następnie miękkie przeładowanie Linuxa za pomocą programu
LOADLIN. Ponownie, upewnij się, że Linux i DOS używają tych samych ustawień
karty.
Komercyjny sterownik dźwięku OSS obsługuje kartę dźwiękową SoundBlaster16 PnP. Możesz nabyć ten sterownik od 4Front Technologies.
Zmiana w sterowniku dźwięku w wersji 1.3.67 zepsuła kilka programów odtwarzających dźwięk, które (niepoprawnie) sprawdzały, czy wynik odwołania ioctl SNDCTL_DSP_GETBLKSIZE jest większy niż 4096. Programy narzędziowe włączone do ostatniego pakietu snd-util-3.x.tar.gz (pod adresem ftp://ftp.4front-tech.com/ossfree.) obecnie obsługują to poprawnie. Ostatnie wersje sterownika dźwięku zostały również poprawione celem uniknięcia alokacji fragmentów krótszych niż 4096 bajtów, co rozwiązuje problem ze starszymi programami.
Sterownik dźwięku obsługuje wiele różnych parametrów
konfiguracyjnych. Program configure z pakietu sterownika dźwięku
sprawdza wiele zależności między parametrami. Narzędzia używane do
konfigurowania jądra nie umożliwiają takiego stopnia funkcjonalności.
Powiedziawszy powyższe, ostatnie jądra opcjonalnie pozwalają na użycie standardowych narzędzi konfiguracji jądra do ustawiania sterownika dźwięku (patrz wcześniejszy rozdział - "Konfigurowanie Jądra").
Możesz skompilować sterownik dźwięku jako moduł ładowalny i używać
kerneld do jego automatycznego ładowania i usuwania. Może to wywołać
jeden problem - za każdym przeładowaniem modułu ustawienia miksera
powracają do wartości domyślnych. Przy niektórych kartach może to być zbyt
głośno (np. SoundBlaster16), lub za cicho. Markus Gutschke
(gutschk@uni-muenster.de) znalazł następujące rozwiązanie. Wpisz
poniższy wiersz do pliku /etc/conf.modules:
options sound dma_buffsize=65536 && /usr/bin/setmixer igain 0 ogain 0 vol 75
Spowoduje to, że twój program miksujący (w tym przypadku setmixer)
zostanie uruchomiony niezwłocznie po załadowaniu sterownika
dźwięku. Parametr dma_buffsize jest jedynie sztuczną wartością,
niezbędną ze względu na wymagany jakikolwiek parametr linii
polecenia. Zmień polecenie zgodnie z potrzebami, aby dopasować ustawienia
głośności.
Jeśli wkompilowałeś sterownik dźwięku do jądra i chcesz ustawiać poziomy
głośności w trakcie ładowania jądra, możesz wywołać program miksujący w
jednym z systemowych plików startowych, jak np. /etc/rc.d/rc.local.
Domyślnie, skrypt w Readme.linux, który tworzy pliki urządzeń dźwiękowych
ustawia prawa dostępu tak, że urządzenia odczytywane mogą być jedynie przez
użytkownika root. Jest tak, aby uniknąć możliwej dziury w systemie. W
środowisku sieciowym, zewnętrzni użytkownicy mogliby potajemnie podłączyć
się zdalnie do systemu z kartą dźwiękową i mikrofonem i podsłuchiwać. Jeśli
cię to nie martwi, możesz zmienić prawa dostępu ustanowione przez skrypt.
Przy domyślnych ustawieniach, użytkownicy nadal mogą odtwarzać pliki dźwiękowe. Nie jest to ryzykowne z punktu widzenia bezpieczeństwa, ale może być potencjalnie denerwujące.
Jeśli masz kartę dźwiękową, która zawiera interfejs CD-ROM lub SCSI, dodatkowe informacje, które mogłyby ci się przydać są w dokumentach Linux SCSI HOWTO oraz Linux CD-ROM HOWTO
Sound Playing HOWTO opisuje sposoby użycia różnych typów plików dźwiękowych i muzycznych pod Linuxem.
Istnieje stary dokument, zwany Podręcznik Hackera do WoxWare, dostępny pod adresem ftp://nic.funet.fi/pub/OS/Linux/ALPHA/sound/. Większość zawartej tam informacji została zastąpiona dokumentami w http://www.4front-tech.com/pguide, ale rozdział o /dev/sequencer może nadal być przydatny.
Następujące dokumenty FAQ są regularnie wysyłane do grupy dyskusyjnej Usenetu news.announce, a także archiwizowane pod adresem ftp://rtfm.mit.edu/pub/usenet/news.answers:
Dokumenty FAQ wymieniają również kilka list pocztowych i archiwów dotyczących konkretnych produktów. Następujące grupy dyskusyjne Usenetu omawiają kwestie dźwięku i/lub pokrewne:
Strony WWW poświęcone multimediom znaleźć można tutaj: http://viswiz.gmd.de/MultimediaInfo/. Creative Labs ma stronę WWW pod adresem http://www.creaf.com/. MediaTrix ma stronę WWW pod adresem http://www.mediatrix.com/.
Linuxowe pocztowe listy dyskusyjne mają sporo "kanałów" poświęconych różnym tematom, w tym dźwiękowi. Aby dowiedzieć się, jak się do nich przyłączyć, wyślij pocztę ze słowem "help" jako treścią listu na adres majordomo@vger.rutgers.edu. Owe listy pocztowe nie są zalecane jeśli chodzi o pytania na temat konfiguracji kart dźwiękowych, itp. Istnieją z myślą o dyskusjach dotyczących programowania.
Jak wspomniano wcześniej kilka razy, do sterownik dźwięku do jądra
dołączona jest pewna ilość plików Readme, zawierających użyteczne
informacje o sterowniku kart dźwiękowych. Można je zazwyczaj znaleźć w
katalogu
/usr/src/linux/drivers/sound.
Z autorem sterownika dźwięku do jądra, Hannu Savolainenem, można się skontaktować pod adresem hannu@voxware.pp.fi. Ma on również stronę WWW : http://personal.eunet.fi/pp/voxware. Te strony WWW są najlepszym źródłem informacji, jeśli chodzi o bieżący status obsługiwanych kart dźwiękowych, znane problemy i poprawki błędów.
Informacje o OSS, komercyjnym sterowniku dźwięku do Linuxa i innych systemów kompatybilnych z Unixem można znaleźć na stronach WWW 4Front Technologies.
Mapa Oprogramowania Linuxa (Linux Software Map) jest nieocenionym narzędziem wyszukiwania oprogramowania na Linuxa. Przeszukiwanie LSM po słowach kluczowych, jak np. sound (dźwięk) jest dobrą metodą wynajdowania programów mających coś wspólnego z urządzeniami dźwiękowymi. LSM można znaleźć w rozmaitych anonimowych archiwach FTP, chociażby ftp://ftp.icm.edu.pl/pub/Linux/sunsite/docs/LSM.gz.
W ramach Projektu Dokumentacji Linuxa powstało kilka książek o Linuxie, w tym Linux Installation and Getting Started (Instalacja Linuxa i Pierwsze Kroki). Są one za darmo dostępne poprzez anonimowy FTP z głównych archiwów Linuxa, a także do nabycia w formie drukowanej.
Na sam koniec, bezwstydny wtręt: Jeśli chcesz się dowiedzieć znacznie więcej o multimediach pod Linuxem (szczególnie aplikacje i programowanie CD-ROM i dźwięku), sprawdź moją książkę Linux Multimedia Guide, ISBN 1-56592-219-0, wydaną przez oficynę O'Reilly and Associates. O szczegółach dowiesz się pod numerem 800-998-9938 w Ameryce Północnej, lub na stronach WWW http://www.ora.com/catalog/multilinux/noframes.html.
Prawa autorskie wersji polskiej tego dokumentu (c) 1997 są własnością Pawła Olszewskiego (alder@amg.net.pl). Dystrybucja wersji polskiej objęta jest klauzulą analogiczną do zawartej w oryginale.
Jeśli znalazłeś w niniejszym dokumencie jakieś paskudne literówki, błędy ortograficzne, lub inne tego typu numery, ślij informację w pierwszej kolejności do tłumacza, w tej sytuacji autor oryginału jest najprawdopodobniej niewinny.
W kwestii merytorycznej, dokument ten nie różni się specjalnie od oryginału (nie dokonałem żadnych zmian ani poprawek), pomijając odnośnik do pliku LSM.gz, który zmieniłem na lokalne archiwum SunSITE. Dodałem również odnośnik do archiwum polskich wersji dokumentów HOWTO.
Najnowsza wersja tego dokumentu znajduje się wraz z innymi przetłumaczonymi na polski dokumentami serii Linux-HOWTO, w archiwum dokumentów JTZ (Jak To Zrobić): ftp://ftp.jtz.org.pl/HOWTO/. Najświeższa wersja angielska znajduje się tutaj: http://sunsite.unc.edu/mdw/HOWTO/Sound-HOWTO.html.
Na zdrowie,
Pawko Olszewski, alder@amg.net.pl
doc-linux-pl-2002.06.14.orig/html/Sound-Playing-HOWTO.pl.html 0100664 0001750 0001750 00000106056 06770264140 022242 0 ustar coven coven
To jest Sound Playing HOWTO. Opisuje wiele formatów dźwięku i aplikacje, które mogą być użyte do ich odtwarzania. Opisuje także pare trików i rad dotyczących tych aplikacji. Jest tu też trochę innych interesujących programów związanych z dźwiękiem, nie związanych bezpośrednio z odtwarzaniem. Jednakże ten dokument nie opisuje, jak ustawić obsługę dźwięku w Linuxie. Zobacz Linux Sound HOWTO autorstwa Jeff'a Tranter'a, dla uzyskania instrukcji konfiguracji obsługi dźwięku i obsługiwanego sprzętu.
Ten dokument opisuje tylko normalne aplikacje użytkownika. Znaczy to, że tłumaczy tylko to, co średnio zaawansowany użytkownik powinien wiedzieć o stronie programowej dźwięku, a nie egzotyczne tematy typu synteza dźwięku lub sprzęt - jest on opisany w Sound HOWTO.
Ten dokument może być dowolnie dystrybuowany i modyfikowany (byłbym wdzięczny, gdybym był zawiadamiany o zmianach), dopóki są zachowane wiadomości o prawach autorskich. Jednakże nie może posiadać żadnych innych ograniczeń, a zmodyfikowany dokument musi mieć te same prawa autorskie, co ten. Musi być także podany autor zmian.
Jeżeli nie ma informacji o prawach autorskich, aplikacja jest pod Licencją Publiczną GNU (GNU General Public License).
Najnowsza oficjalna wersja tego dokumentu może być ściągnięta z http://sunsite.unc.edu/LDP/. Najnowsza nieoficjalna wersja znajduje się na http://laplace.snu.ac.kr/~wacko/howto/. Koreańska wersja tego dokumentu (bardzo nieaktualna) znajduje się na http://laplace.snu.ac.kr/~wacko/howto/Sound-Playing-HOWTO.ks. Japońska wersja tego dokumentu jest dostępna na http://jf.gee.kyoto-u.ac.jp/JF/JF-ftp/euc/Sound-Playing-HOWTO.euc.
Nie jestem ominescentny i nie używam wszystkich aplikacji opisanych tutaj (kilku nawet nie wypróbowałem), więc mogą być błędy. Programy także ewoluują, więc dokumentacja ciągle się przedawnia. Jeżeli więc znajdziesz jakieś błędy, wyślij mi poprawki. Sugestie i dodatki będą także mile widziane.
dla wszystkich autorów aplikacji opisanych w tym HOWTO. Także Hannu Savolainenowi za świetny sterownik dźwięku i Linusowi Torvaldsowi za świetny system operacyjny.
Chciałbym też podziękować Raymondowi Nijssenowi (raymond@es.ele.tue.nl),
Jeroenowi Ruttenowi (jeroen@es.ele.tue.nl), Antonio Perezowi
(aperez@arrakis.es), Ianowi Jacksonowi (ijackson@gnu.org)
i Peterowi Amstutzowi (amstpi@freenet.tlh.fl.us) za informacje i pomoc.
Istnieje wiele rodzajów formatów dźwięku (WAV, MIDI, MPEG itp.). Poniżej opisuję różne formaty i aplikacje używane do ich odtwarzania.
MIDI znaczy Musical Instrument Device Interface (Interfejs urządeń i instrumentów
muzycznych). Pliki MIDI mają zazwyczaj rozszerzenie .mid. Zawierają
informacje sekwencerowe, to znaczy informacje kiedy odtworzyć jaki instrument
w jaki sposób itp. Zależnie od Twojego sprzętu (i może oprogramowania, którego
używasz) dźwięk może być świetny, albo niewyraźny i charczący.
Ten pakiet zawiera mp (odtwarzacz MIDI obsługiwany z linii komend)
i xmp (odtwarzacz MIDI oparty na XView, nie mylić nazwy z odtwarzaczem
modułów także nazywanym xmp). Do używania xmp będziesz potrzebował
rozszerzeń SlingShot. Pakiet zawiera także inne programy do odtwarzania utworów
Adagio.
Jeżeli jesteś posiadaczem GUS'a, mpmoże także odtwarzać pliki MOD
(zobacz sekcję
Moduły, żeby
uzyskać więcej informacji o modułach).
Jeden mały, ale denerwujący błąd (w wersji 0.5 na niektórych kartach) - dźwięk
urywa się przy końcu. Zamiast zakończenia utworu w sposób, który opisuje plik MIDI,
kończy się on na przydługim odegraniu przedostatniej nuty. Nie przeszkodziło mi to
w używaniu mp, ale może kogoś zniechęcić do używania go do ,,prawdziwej''
pracy. Uruchamia się dosyć wolno.
W pakiecie nie ma notatki o prawach autorskich (przynajmniej nie mogłem takiej
znaleźć), więc przyjmuję, że może być dowolnie dystrybuowana i modyfikowana. (W
dokładnej interpretacji przepisów o prawach autorskich, nie wolno tego robić, ale
sądzę, że taka była intencja autora).
To jest wersja CMU MIDI Toolkit pod Linuxa (ale tak dużo zostało dodane, że można
to zakwestionować) autorstwa Grega Lee (lee@uhunix.uhcc.hawaii.edu).
Można go ściągnąć z
anonimowego ftp z tsx-11.mit.edu z katalogu /pub/linux/packages/sound/adagio05.tar.gz.
Binaria tu załączone są w formacie a.out (z dołączonymi archaicznymi bibliotekami),
a binaria xmp działają w środowisku X11R6 (XFree86 3.1.1, libc 4.7.2).
Binaria mp działają dobrze w środowisku a.out.
Do skompulowania tego będzie potrzebne trochę sztuczek. Właściwie niewiele -
wszystko, co musisz zrobić, to załączyć przełącznik -lfl na koniec
SHROBJ i XMPOBJ w pliku Makefile. Jest to potrzebne do
dołączenia biblioteki flex, co nie jest standardowo zrobione. Dalej
postępuj zgodnie z instrukcją instalacji. I nie zapomnij, żeby mieć zainstalowane
XView i rozszerzenia SlingShot, jeżeli chcesz skompilować xmp
Niektórzy ludzie polecają ten eksperymentalny program z powodu dobrej
jakości dźwięku (co jest prawdą, brzmi znacznie lepiej niż mp na Sound
Blaster'rze 16, jednak nie będzie brzmiał o wiele lepiej na karcie z syntezą
wavetable, jak np. GUS). Jednakże jego problemem jest duże obciążanie procesora.
Odgrywa MIDI przez skonwertowanie go do WAV i odtworzenie WAV (możesz także
skonwertować MIDI do WAV bez odtwarzania). To tłumaczy obciążanie CPU.
Ma także opcjonalny interfejs ncurses, SLang, Tcl/Tk lub Motif.
Potrzebujesz plików z instrumentami Gravis'a Ultrasound do używania tego programu.
Zobacz FAQ załączony z TiMidity.
Autorem jest Tuukka Toivonen (tt@cgs.fi).
Najnowsza wersja TiMidity znajduje się na
stronie domowej TiMidity.
Ta strona zawiera też odnośnik do małej biblioteki instrumenów GUS'a.
To jest odtwarzacz MIDI obsługujących syntezę FM, GUS'a i zewnętrzny interfejs MIDI.
[po odpowiednim "załataniu" także AWE32/64 - przyp. tłum.] Uruchamia się szybciej
niż inne odtwarzacze MIDI. Może także odgrywać pliki Creative Music Files, pliki
Microsoft RIFF i duże archiwa MIDI z gier takich jak Ultima 7.
Posiada interfejs X i SVGA. Posiada także opcję śledzenia nut na każdym kanale
i zegar odtwarzania (dołączony automatycznie z xplaymidi i
splaymidi).
Powinieneś napisać coś takiego:
$ splaymidi foo.mid; stty sane
jeżeli chcesz używać interfejsu SVGA, jednak nie przywraca on trybu tty poprawnie.
Tryb SVGA może być usunięty w bliskiej przyłości.
Ten program był napisany przez Nathan'a Laredo (laredo@gnu org lub
laredo@ix.netcom.com). Znajduje się na
anonimowym ftp
- sunsite.unc.edu w katalogu /pub/Linux/apps/sound/players/playmidi-2.3.tar.gz.
Moduły (w muzyce komputerowej) to pliki z muzyką cyfrową, stworzone ze zbioru
próbek (sampli) i informacji sekwencerowych, mówiących odgrywarce kiedy odtworzyć
jaką próbkę (instrument) na jakiej ścieżce i z jaką wysokością, opcjonalnie
wytwarzając efekt, taki jak np. vibrato.
Ma zaletę nad MIDI - może zawierać prawie każdy rodzaj dźwięku (łącznie z głosem
ludzkim). Po drugie, brzmi prawie tak samo na każdej platformie, ponieważ próbki
są w module. Wadą jest, że moduły mają znacznie większy od MIDI rozmiar, a także
to, że nie ma prawdziwego standardowego formatu (jedynym ,,prawdziwym'' jest
ProTracker, z którym wiele modułów nie jest kompatybilnych). Pochodzi z Amigi.
Najczęściej spotykany format to .mod. Jest wiele rozszerzeń, zależenie
od formatu.
Ten bardzo elastyczny program (został napisany na wiele platform) odtwarza
moduły muzyczne Soundtracker'a i Protracker'a. Używa wyjścia stereofonicznego
16-bitowego, jakość uważam za bardzo dobrą. Jeżeli potrzebujesz prostego
sposobu na zredukowanie obciążenia procesora, użyj opcji -mono.
To jest program "giftware" (cytując autora). Jest nim Marc Espie
(Marc.Espie@ens.fr).
Wersja z plikiem Makefile dostosowanym pod Linuxa może być sciągnięta z
anonimowego ftp
z sunsite.unc.edu z katalogu /pub/Linux/apps/sound/players/tracker-4.3-linux.tar.gz
Gmod to odtwarzacz modułów muzycznych dla Gravisa. Obsługiwane formaty to 4/6/8 kanałowy MOD, 8 kanałowy 669, MultiTracker (MTM), UltraTracker (ULT), FastTracker (XM) i ScreamTracker III (S3M).
Gmod wymaga wersji 3.0 lub późniejszej sterownika dźwięku. Oraz, oczywiście, GUS'a. Możliwe, że będziesz musiał zmodyfikować jądro żeby kontrola głośności działała tak, jak sobie tego życzysz.
Gmod posiada interfejs X'owy. Używa bibliotek QT (wersja 0.99 lub wyższa). Sprawdź stronę domową QT, żeby uzyskać informacje o QT.
Program może być darmowo rozpowszechniany. Był początkowo napisany przez Hannu
Savolainen'a, a teraz jest nadzorowany przez Andrew J. Robinson'a
(robinson@cnj.digex.net).
Można go ściągnąć z
anonimowego FTP z sunsite.unc.edu
(katalog /pub/Linux/apps/sound/players/gmod-3.1.tar.gz.
Ten podręczny odtwarzacz modułów odtwarza formaty XM, ULT, STM, S3M,
MTM, MOD i UNI. (Format UNI jest wewnętrznym formatem używanym przez MikMod.)
Posiada obsługę spakowanych (zipped) plików z modułami. Używa jakości 16bit
stereo. Użyj opcji -m (m jak mono) jeżeli potrzebujesz prostego
sposobu obniżenia obciążenia procesora.
Wersja unixowa może używać bądź to ncurses, bądź to Tcl/Tk jako swój interferjs użytkownika. Może być także użyta jako biblioteka, a nie tylko niezależny program.
MikMod był początkowo napisany przez Jean-Paul Mikkers'a (mikmak@via.nl). Teraz jest nadzorowany przez Jake'a Stine'a (dracoirs@epix.net).
Jest to shareware, które musi być zarejestrowane, jeżeli chcesz używać je
komercyjnie. Potrzebne jest też zezwolenie na dystrybucję komercyjną
(niekomercyjne rozpowszechnianie nie wymaga zezwolenia).
Program można znaleźć na stronie domowej MikMod.
Ten odtwarzacz modułów (nie mylić z xmp Adagia) może odtwarzać
moduły MOD, S3M, STM, 669 i XM (inne formaty są też obsługiwane, ale ciągle
eksperymentalnie lub niecałkowicie) na kartach z syntezą WaveTable
(GUS albo SoundBlaster AWE 32) i na systemach z SoftOSS (sterownik miksujący
programowo). W bardzo bliskiej przyszłości zwykły DSP będzie też obsługiwany.
Wersja pod X jest też dostępna.
Program jest napisany przez Claudio Matsuoka'ę (claudio@brasil.enemy.org) i H. Carraro Jr.
Znajduje się na stronie domowej xmp
S3mod odtwarza 4/6/8 ścieżkowe moduły MOD i Scream Tracker 3. Używa
standardowo jakości 8 bit mono, 22000Hz. Użyj opcji -s, żeby włączyć
stereo, -b, żeby włączyć jakość 16 bitową i -f, żeby
ustawić częstotliwość. Jednakże jakość dźwięku jest gorsza od tracker'a
(szumy), więc polecałbym tracker'a zamiast s3mod do
odtwarzania zwykłych plików MOD (chyba, że masz maszynę o małej mocy).
S3mod obciąża procesor znacznie mniej niż tracker.
Prawa autorskie należą do Daniela Marks'a i David'a Jeske'a
(jeske@uiuc.edu), ale możesz zrobić z tym co chcesz (poza
twierdzeniem, że to ty go napisałeś).
Można go zdobyć przez
anonimowe FTP z sunsite.unc.edu (katalog
/pub/Linux/apps/sound/players/s3mod-v1.09.tar.gz.
Ten program (wersja beta) odtwarza MOD'y (15/31 instrumentowe, do
32 głosów), MTM'y, ULT'y i S3M'y na Gravisie Ultrasound. Może też używać
spakowane moduły, jeżeli masz gzip'a, lharc'a,
unzip'a i unarj'a. Nie potrafi odtwarzać modułów spakowanych
Powerpacker'em lub modułów spakowanych niektórymi programami do komponowania na
Amigę (sygnatura "PACK").
Program wymaga wersji 3.0 sterownika dźwięku. Nie będzie działać z wersją 2.90-2 lub wcześniejszą. Interfejs tekstowy wymaga ncurses. Jest także załączony interfejs X'owy, który używa Tcl/Tk.
Mod jest napisany przez Mikael'a Nordqvist'a
(mech@df.lth.se lub d91mn@efd.lth.se).
Można go znaleźć na
anonimowym FTP
z sunsite.unc.edu z /pub/Linux/apps/sound/players/mod-v0.81.tgz.
Nspmod to odtwarzacz modułów w wersji alpha, który może odtwarzać
moduły MTM, S3M i MOD. Jest przeznaczony dla kart dźwiękowych bez DSP
(nie mylić z tym co Creative Labs nazywa DSP). Obciąża procesor porównywalnie
z tracker'em
Posiada możliwość zapętlenia modułów, jeżeli są tak zaprogramowane. Ilość
zapętleń może być limitowana opcją -l. Używa tylko wyjścia 8 bitowego.
(jeżeli chodzi o wersję 0.1).
Został napisany przez Toru Egashira'ę (toru@jms.jeton.or.jp).
Można go ściągnąć z
anonimowego FTP
(sunsite.unc.edu, katalog /pub/Linux/apps/sound/players/nspmod-0.1.tar.gz).
Ten program (wersja alfa) był zaprojektowany do odtwarzania 4 kanałowych modułów, minimalnie obciążając procesor. Nie był zaprojektowany do odtwarzania dźwięku wysokiej jakości. A więc jedyna jakość to 22kHz, mono. Dźwięk nie jest też tak czysty jak powinien, co wyjaśnia status alfa programu.
Został napisany przez David'a Groves'a (djg@djghome.demon.co.uk).
Można go znaleźć na
anonimowym FTP
z sunsite.unc.edu w katalogu
/pub/Linux/apps/sound/players/yampmod-0.1.tar.gz.
MPEG jest standardem specyfikującym kodowanie wideo i towarzszącego mu dźwięku
w celu cyfrowej archiwizacji. MPEG jest zazwyczaj kojarzony z obrazem, ale
część dźwiękowa może być używana oddzielnie. Część dźwiękowa standardu
definiuje trzy powłoki (ang. layers), Layer I, II i III. Odtwarzacze mogące
dekodować wyższe powłoki mogą także dekodować niższe. (np. odtwarzacze
Layer III mogą odtwarzać pliki Layer II). Pliki audio MPEG Layer I mają
zwykle rozszerzenie .mpg (więc jeżeli plik z tym rozszerzeniem nie
może być odtworzony odtwarzaczem MPEG wideo, to jest to prawdopodobnie strumień
audio), Layer II zazwyczaj ma rozszerzenie .mp2, a Layer III
.mp3. Kompresja dźwięku nie jest najgorsza. Dwumegabajtowy Layer II
zajmie 25 megabajtów jako czysty PCM o tej samej jakości
Ten program (wersja beta) jest wydajnym odtwarzaczem MPEG audio, z obsługą powłok I, II i III. Jest oparty na kodzie z wielu źródeł. Może odtwarzać w czasie rzeczywistym strumień przez HTTP (tzn. można odtwarzać strumień MPEG bezpośrednio przez World Wide Web).
Głównym autorem jest Michael Hipp
(Michael.Hipp@student.uni-tuebingen.de). Może być używany i
rozpowszechniany w niezmodyfikowanej formie darmowo, przeznaczony do
zadań niekomercyjnych. Załączenie w kolekcji darmowego oprogramowania
(takiej jak CD-ROM'y lub serwery FTP) jest dozwolone.
Najnowszą wersję można znaleźć na stronie mpg123 Oliver'a Fromme'a.
Ten odtwarzacz MPEG audio obsługuje tylko Layer I i II. Obsługuje 16 bitowe karty dźwiękowe pod Linuxem.
Złużywa dosyć dużo czasu procesora, ok. 55% na Pentium 60MHz. Dźwięk jest
niemożliwy do słuchania na 486 66MHz, ponieważ procesor nie może nadążyć
z dźwiękiem. Jeżeli to ci się zdarzy, spróbuj odtwarzać tylko jedną stronę
strumienia audio (opcją -l lub -r), zamiast domyślnego
stereo.
Mała zmiana w jednym z plików może być potrzebna do skompilowania programu.
Musisz dodać taką linię na początek pliku configuration.sh.
#! /bin/sh
Autorem jest Tobias Bading (bading@cs.tu-berlin.de).
maplay 1.2 można znaleźć na
anonimowym FTP na
ftp.cs.tu-berlin.de z /pub/multimedia/maplay1.2/maplay1_2.tar
To jest nieoficjalna modyfikacji (tzn. nie przez oryginalnego autora)
maplay'a 1.2, może działać z o wiele mniejszym obciążeniem procesora.
Udaje się jej to głównie przez używanie wyjścia u-law na innych platformach
poza SPARC'em. Zauważ, że używa wyjścia u-law domyślnie, więc jakość dźwięku
jest niższa.
Modyfikacje były przeprowadzone przez Orlando Andico
(orly@gibson.eee.upd.edu.ph).
Program można znaleźć na
anonimowym FTP
na sunsite.unc.edu z katalogu
/pub/Linux/apps/sound/players/maplay-1.3b-Linux.tar.gz.
To jest kolejny krewny maplay'a 1.2. Dodaje obsługę formatu MPEG
Layer 3. W tej chwili ma pewne błędy w odtwarzaniu (możesz słyszeć
skrzeczące odgłosy). Możesz pobawić się opcjami żeby to zmienić.
Modyfikacje były przeprowadzone przez Timo Jantunen'a
(timo.jantunen@hut.fi lub jeti@cc.hut.fi. Mówi, że może
być używany darmowo, ale zarabianie nim pieniędzy nie jest dozwolone.
Jakkolwiek nie jestem całkowicie przekonany o poprawności praw autorskich,
ponieważ oryginalny maplay jest na Licencji Publicznej GNU
(GNU General Public License), która nie pozwala zmodyfikowanym pracom mieć
innych praw autorskich.
Program może być znaleziony na
anonimowym FTP
na sunsite.unc.edu z katalogu /pub/Linux/apps/sound/players/maplay3.tar.gz.
Ten odtwarzacz (wersja beta) jest kolejnym krewnym
maplay'a 1.2 (właściwie jest krewnym maplay'a 1.2+,
który jest Windows'owym krewnym maplay'a 1.2).
Dodaje obsługę strumieni MPEG Layer 3. Może też odtwarzać pliki WAV.
Może także odtwarzać strumienie audio przez połączenie HTTP.
Inna opcja splay'a, to możliwość używania go jako biblioteki
(na licencji GPL), więc może być używany w innych programach. Próbuje też
polepszyć wydajność przez używanie grupowania (threading) (potrzebujesz
pthread, żeby używać tą opcję) i trochę assemblera w kodzie.
Splay używa interfejsu linii komend i opcjonalnego X'owego (który
używa QT).
Jeżeli nie działa po kompilacji (np. zwraca błąd segmentacji), spróbuj skompilować go jeszcze raz bez grupowania (threading).
Autorem jest Jung Woo-jae (jwj95@eve.kaist.ac.kr).
Program można znaleźć na stronie domowej splay'a.
Ten program jest odtwarzaczem MPEG z graficznym interfejsem użytkownika.
Jest oparty na splay'u, więc obsługuje powłoki MPEG do III.
Może też odtwarzać strumienie MPEG w czasie rzeczywistym, ze strumieniem
podawanym przez HTTP. Jest także łatwy do skonfigurowania.
Używa bibliotek QT toolkit (w wersji 1.2<). Używa też LinuxThreads (załączone binaria działają tylko z wersją 0.5).
Autorem jest Joel Lindholm (wizball@kewl.campus.luth.se).
Najnowszą wersję można znaleźć na
anonimowym FTP
na kewl.campus.luth.se z katalogu /pub/jukebox.
Ten odtwarzacz MPEG audio (wersja beta) obsługuje tylko MPEG Layer 3. Może odtwarzać bezpośrednio do karty dźwiękowej i do plików PCM lub WAV. Daje też dosyć duży ładunek dla procesora (około 60% na Pentium 133MHz).
Został napisany przez Tomislav'a Uzelac'a (tuzelac@rasip.fer.hr).
Może być darmowo używany i rozpowszechniany, dotąd, dokąd nie będzie
sprzedawany komercyjnie bez zezwolenia (załączanie go na CD-ROM'ach z
darmowym oprogramowaniem jest dozwolone).
Można go znaleźć na
anonimowym FTP
na ftp.rasip.fer.hr z katalogu /pub/mpeg/amp-0.7.3.tgz.
Ta biblioteka (alfa) została napisana jako szybka implementacja bibliotek dekodowania MPEG audio, do użycia w różnych interfejsach GUI. Obsługuje powłoki I, II i III. Może losowo pobierać dane ze strumieni. Interfejs linii komend jest załączony. Wersja Motif (Lesstif) jest też załączona w wersji pod Linuxa.
Autorzy to Gilles Boccon-Gibod, Alain Jobart i inni. Wykończenia (front-ends) biblioteki mogą być darmowo pobierane. Biblioteka sama w sobie musi być licencjonowana (dostępna jest licencja źródłowa i binarna).
Wykończenia tej biblioteki mogą być ściągnięte ze strony domowej XAudio.
Właściwie jest to konwerter, który przekształca strumienie audio MPEG Layer 3 w WAV, AIFF, SND, AIFC lub po prostu czyste PCM. Wersja pod Linuxa nie kieruje wyjścia bezpośrednio do karty dźwiękowej. Trzeba najpierw skonwertować plik do innego formatu.
Jakkolwiek, jeżeli spróbjesz odtworzyć skonwertowany plik używając
sox'a, otrzymasz prawdopodobnie tylko szum, poniewać porządek słów
(to taki rodzaj "liczby" komputerowej - przyp. Tygrys) w próbkach PCM nie
jest poprawny (przynajmniej na platformach Intelowych). Musisz odpalić
sox'a z opcją -x, żeby pozbyć się tego problemu. Ale
niektóre odtwarzacze nie muszą być zawiadomione, że porządek słów jest zły,
więc nie musisz się o to martwić.
Jeżeli masz naprawdę szybki komputer (prawdopodobnie co najmniej Pentium
100MHz), możesz spróbować odtwoezyć strumienie MPEG Layer 3 bezpośrednio,
bez potrzeby skonwertowania dźwięku na inny format, tak jak w następującym
przykładzie (przyjmuje on, że używasz sox'a i odtwarzasz
próbkę 44.1kHz stereo).
$ l3dec foo.mp3 -sto | play -t raw -x -u -w -c 2 -r 44100 -
Liczba po -r jest częstotliwością próbkowania strumienia audio,
a liczba po -c zależy od tego, czy to ma być mono, stereo, czy nawet
kwadro. Jeżeli to wygląda zbyt skomplikowanie, możesz użyć skryptu lub aliasu.
To jest shareware z prawami autorskimi Fraunhofer-IIS. Wersja demo
pod Linuxa na systemy x86 może być ściągnięta z
anonimowego FTP
na ftp.fhg.de z katalogu /pub/layer3. Wersja demo konwertuje
tylko strumienie Layer 3.
Cytując ze strony podręcznika man sox'a:
Wydają się być podobne do plików IFF, ale nie takie same. Są oryginalnym formatem dźwiękowym Windows 3.1. Oczywiście Windows 3.1 jest tak ważne dla przemysłu komputerowego, że musiało mieć własny format plików dzwiękowych.
Mają zazwyczaj rozszerzenie .wav
Ten program obsługuje odtwarzanie i nagrywanie w formacie WAV. Używa blokowania (locking), więc tylko jeden dźwięk może być odtwarzany w danej chwili. Jego możliwości blokowania mogą też być użyte oddzielnie od jego możliwości odtwarzania dźwięku.
Jako dodatek do interfejsu linii komend, ma także interfejs Motif, który może być używany z Lesstif'em.
Był początkowo napisany przez Andre Fuechsel'a
(af1@irz.inf.tu-dresden.de), ale został całkowicie przepisany przez
Warren'a W. Gay'a (bx249@freenet.toronto.on.ca lub
wwg@ica.net).
Można go znaleźć na
anonimowym FTP
z sunsite.unc.edu w katalogu /pub/Linux/apps/sound/players/wavplay-1.0.tar.gz.
Ta sekcja opisuje rzeczy, które odtwarzają formaty dźwięku nie zasługujące na oddzielną sekcję (np. formaty mające tylko jeden odtwarzacz), lub odtwarzacze obsługujące kilka formatów.
Ten program jest właściwie konwerterem, zamienia jednen format dźwięku na
drugi. Jakkolwiek, niektóre wersje sox'a, przywoływane komendą
play, odtwarzają dźwięk. (Aplikacja play w Sound HOWTO
prawdopodobnie odnosi się do tego). Obsługuje czyste (bez nagłówka) binaria
i dane tekstowe , Pliki Dźwiękowe IRCAM, .voc Sound Blaster'a,
.au SPARC'a (z nagłówkiem), HCOM Mac'a .voc PC/DOS,
formaty Sndtool'a i Sounder'a, .snd NeXT'ta RIFF/WAV Windows 3.1,
.smp Turtle Beach'a, CD-R i formaty AIFF i 8SVX Apple/SGI.
Gdzieś w kernelu 1.3.6x, musisz dokonać małej zmiany w jednym pliku, żeby
dźwięk był odtwarzany bezpośrednio. Musisz zmienić linię 179 w pliku
sbdsp.c z
if (abuf_size < 4096 || abuf_size > 65536) {
na
if (abuf_size < 1 || abuf_size > 65536) {
Ale może nie będziesz musiał tego robić. Jednak zrobienie tego nic nie zepsuje.
Został napisany przez wielu ludzi i może być użyty w każdym przeznaczeniu.
Można go znaleźć na
anonimowym FTP
na sunsite.unc.edu w katalogu
/pub/Linux/apps/sound/convert/Lsox-linux.tar.gz.
Nowsza wersja, której autorem jest Chris Bagwell
(cbagwell@sprynet.com) (oparta na najnowszej wesji gamma oryginalnego
sox'a, z załączoną powyższą poprawką) może być ściągnięta przez
anonimowe FTP
na sunsite.unc.edu z katalogu
/pub/Linux/apps/sound/convert/sox-11gamma-cb3.tar.gz.
Ten program (wersja beta) odtwarza czyste audio, WAV i VOC. Może też
nagrywać takie pliki. Używa różnych technik do osiągnięcia najwyższej możliwej
prędkości, a więc może chodzić przystępnie nawet na wolnych maszynach.
Jedna z tych technik wymaga, żeby zainstalowane programy miały identyfikator
setuid root. Jeżeli koniecznie chcesz tego używać, możesz użyć paczki Debiana,
której autorem jest Ian Jackson (ijackson@gnu.org), która wyłącza
funkcję potrzebującą bitu setuid.
Autorem jest David Monro (davidm@gh.cs.usyd.edu.au).
Można go znaleźć na
anonimowym FTP
na sunsite.unc.edu w katalogu
/pub/Linux/apps/sound/players/bplay-0.96.tar.gz.
Ten program emuluje układ SID (Sound Interface Device, MOS 6581) i MPU (Micro Processor Unit, MOS 6510) Commodore'a 64. Jest więc w stanie załadować i uruchomić programy w kodzie maszynowym C64 wydające dźwięki lub muzykę. Głównie są to fragmenty kodu i danych, które zostały wyciągnięte (ripped) z gier i programów demonstracyjnych i przesłane bezpośrednio z C64.
Standardowo używa linii komend. Są też interfejsy Tk i QT, dostępne oddzielnie z głównej paczki.
Sidplay jest nadzorowany przez Michael'a Schwendt'a
(sidplay@geocities.com).
Jest dostępny ze strony domowej SIDPLAY'a.
Pozwala ci słuchać dźwięku, zapisanego w odpowiednim formacie, w czasie rzeczywistym przez Internet bez pobierania całego pliku. Może być użyty oddzielnie, ale tak naprawdę jest przeznaczony do użytku z przeglądarką web (najlepiej obsługiwane są Mosaic i Netscape). Nie może być używany bez X'ów (nie możesz używać go z Lynxem na konsoli tekstowej).
Autorem jest firma Progressive Networks, Inc. Program nie może być rozpowszechniany, modyfikowany itp. Zajrzyj do licencji, żeby uzyskać dokładne informacje o tym, co możesz robić. Program można ściągnąć ze strony domowej RealAudio.
Ktoś może pomyśleć co cat, czasami nadużywane narzędzie wypisujące,
może mieć wspólnego z odgrywaniem dźwięku. Pokażę jak można to zużytkować na
przykładzie.
$ cat sample.voc > /dev/dsp
$ cat sample.wav > /dev/dsp
$ cat sample.au > /dev/audio
Wykonanie cat'a pliku .au na urządzenie /dev/audio
będzie zwykle działać, a jeżeli będziesz miał szczęście, porządek bajtów
w pliku będzie odpowiedni do twojej platformy itp., uda się nawet "zcatowanie"
pliku PCM (takiego jak /dev/audio czy /dev/dsp) na
urządzenie /dev/dsp.
To wcale nie jest bezużyteczny sposób wykorzystania cat'a.
Może być przydatny np. jeżeli masz plik dźwiękowy nie rozpoznawany przez twoje
programy, a wiesz, że używa próbek PCM, możesz mieć przybliżone wyobrażenie
tego, jak plik brzmi (jeżeli będziesz miał szczęście).
(kurczę, nie pisze skąd to wziąć ;-) - przyp. Tygrys)
Ta sekcja nie ma bezpośrednio nic wspólnego z odtwarzaniem plików dźwiękowych. Jest to raczej kolekcja narzędzi, które mogą być przydatne.
To jest prosty interfejs linii komend, który kontroluje głośność (co innego
mogłoby to być?). Ma też oddzielny program z interfejsem Tcl/Tk załączonym
w paczce, służącym do kontrolowania głośności i odtwarzania plików .au.
Jest też załączony bardzo prosty odtwarzacz CD Tcl/Tk.
Jest to Freeware napisany przez Sam'a Lantinga'ę
(slouken@cs.ucdavis.edu).
Można go znaleźć na
anonimowym FTP
na sunsite.unc.edu w katalogu
/pub/Linux/apps/sound/soundcard/volume-2.1.tar.gz.
To jest aplikacja Tcl/Tk zapewniająca odtwarzanie, nagrywanie i edycję
cyfrowego dźwięku używając sox'a. Zawiera sox'a w swojej
dystrybucji, żeby uniknąć problemów z kompatybilnością.
Program został napisany przez Paul'a Sharpe'a i N. J. Bailey'a
(N.J.Bailey@leeds.ac.uk).
Może być darmowo używane i rozpowszechniane, jeżeli zostanie wysłana
kartka pocztowa. (greetsy i widoczek dla autorów :-) - przyp. Tygrys)
Można go znaleźć na stronie domowej Sound Studio.
Ta (wersja beta, Tcl/Tk) przeglądarka plików muzycznych pozwala
odtwarzać różne formaty dźwięku dotąd, dokąd odpowiednie programy odtwarzające
są zainstalowane na twoim systemie. Standardowo moduły odtwarza gmod,
a pliki MIDI mp (możesz zmienić źródła, żeby używać innych
programów).
Został napisany przez Shannon Hendrix
(shendrix@pcs.cnu.edu lub shendrix@escape.widomaker.com).
Można go ściągnąć przez
anonimowe FTP
na sunsite.unc.edu z katalogu
/pub/Linux/apps/sound/players/tmusic-1.0.tar.gz.
Zdaję sobie sprawę, że jest tu mnóstwo mniejszych lub większych błędów. Jest to dopiero wersja 1.0 - vis major, błędy muszą być... :-) Jeżeli jakieś znajdziesz, daj mi znać.
Prawa autorskie tłumaczenia - (C)1998 tygrys@fidonet.org.pl.
doc-linux-pl-2002.06.14.orig/html/UMSDOS-HOWTO.pl.html 0100664 0001750 0001750 00000073452 07241614560 020565 0 ustar coven coven
Projekt Umsdos powstał w 1992. W sieci pojawił się w styczniu 1994 w postaci łaty. Do standardowej dystrybucji jądra (wersja 1.1.36) dołączono go w lipcu.
Dystrybucja Slackware zaadoptowała Umsdos wcześniej, jeszcze zanim znalazł się w oficjalnej wersji jądra.
W jądrze 1.1.60 działanie Umsdos znacznie ulepszono, szczególnie w zakresie zapisu. Od wersji (mniej więcej) 1.1.70 jest on znowu stabilny.
W Linuksie 1.2.2 usunięto poważny błąd, który od samego początku sprawiał użytkownikom kłopoty (niektóre pliki same z siebie zmieniały nazwy, co stwarzało niezbyt przyjemne wrażenie, że zostały skasowane). Uważaj, gdyż Slackware 2.2 ma wersję jądra 1.2.1, czyli że ten błąd jeszcze się w nim znajduje.
Umsdos jest dostępny jako łata dla jądra 1.0.x. W jądro 1.2 jest już wbudowany. Może być wkompilowany na stałe bądź jako moduł. Pamiętaj, że jeśli zamierzasz ładować Umsdos jako moduł, tak samo jako moduł musisz też ładować obsługę systemu plików MS-DOS. Bierze się to z ograniczeń w systemie modułów (niektóre symbole mogą być wyeksportowane wyłącznie wtedy, gdy sterowniki są zainstalowane jako moduły).
Jak na razie tylko Slackware obsługuje Umsdos. Tak mi się wydaje. Na pewno się mylę, więc proszę o przesłanie mi informacji, żebym mógł to poprawić.
Stroną domową dla Umsdos jest
sunsite.unc.edu. Sprawdź w katalogu
/pub/Linux/system/filesystems/umsdos.
Istnieje dość sporo dokumentacji na temat budowy i działania
Umsdos. Jest ona dostępna w formatach HTML i txt
pod tym samym adresem, co użytki.
O ile wiem, wersja HTML nie jest dostępna dla bezpośredniego
czytania na żadnej stronie w sieci. Musisz ją ściągnąć, "odtarować" i czytać
lokalnie.
Jacques Gelinas jacques@solucorp.qc.ca
Dzięki Umsdos, Linuksa można zainstalować na zwykłej
partycji DOS. Linux jest wtedy instalowany jako drugi (lub
trzeci) system operacyjny na partycji. Aby uniknąć problemów z nazwami (na
dysku C: może znajdować się już katalog bin lub tmp)
Umsdos stosuje pewną sprytną sztuczkę: pseudoroot.
Wszystkie pliki Linuksa instalowane są w podkatalogu DOSa
o nazwie linux. Z reguły jest to C:\LINUX. Umieszczana tam
jest typowa struktura plików Linuksa/Uniksa. Tak więc otrzymujesz:
C:\LINUX\BIN
C:\LINUX\ETC
C:\LINUX\LIB
C:\LINUX\ROOT
C:\LINUX\SBIN
C:\LINUX\TMP
C:\LINUX\USR
C:\LINUX\VAR
Kiedy ładujesz Umsdos, sprawdza on dysk w poszukiwaniu katalogu
linux, a następnie /linux/etc. Jeśli je znajdzie, uruchamia
tryb pseudoroot.
Przede wszystkim tryb pseudoroot przełącza główny katalog partycji do
C:\LINUX, co daje w efekcie standardowy układ plików Uniksa
/bin
/etc
/lib
/root
/sbin
/tmp
/usr
/var
Do tej listy Umsdos dodaje nowy katalog o nazwie DOS. Jest
to katalog wirtualny.
/mnt, wszystkie twoje linuksowe katalogi
będą w /mnt/linux/bin, /mnt/linux/etc i tak dalej.
Możesz używać tych samych opcji montowania, co dla systemu plików
MS-DOS. W systemie Umsdos można mieć zastrzeżenia co do
opcji conv=. Sugeruję, żeby jej nie stosować. Większość opcji, których być
może będziesz używał, to:
Pamiętaj tylko, że Umsdos obsługuje niepromowane katalogi tak samo, jak system MS-DOS. Powyższe opcje będą stosowane globalnie dla wszystkich niepromowanych katalogów. uid ustawia domyślnego właściciela, gid ustawia domyślną grupę, zaś umask ustawia domyślne prawa dostępu.
Aby umożliwić w czasie rzeczywistym ustawienie domyślnego właściciela
katalogu głównego, utworzono umssetup. Dla innych partycji Umsdos
można użyć albo polecenia mount, albo umssetup.
Dla nich najlepiej zapisać opcje montowania w /etc/fstab Oto
przykład. Dopisz go do /etc/rc.d/rc.S:
/sbin/umssetup -u jack -g group -m 0755 /
Plik wymiany jest generalnie wolniejszy w działaniu, niż partycja wymiany, ale taka opcja daje więcej możliwości. Można ustawić plik wymiany na partycji Umsdos tak samo, jak dla każdego innego linuksowego systemu plików. Przykładowo, aby ustawić 8-megabajtowy plik wymiany w katalogu głównym:
dd if=/dev/zero bs=1024k count=8 of=/swap
mkswap /swap 8192
sync
swapon /swap
Następnie dopisz następujący wiersz do pliku /etc/fstab:
/swap swap swap default
Plik wymiany będzie wówczas aktywowany przy każdym uruchomieniu systemu. Z
reguły w pliku /etc/rc.d/rc.S jest już wiersz "swapon -a".
Pakiet loadlin15.tgz jest dostępny pod adresem
sunsite.icm.edu w katalogu
/pub/linux/system/bootutils. Narzędzie to zostało
przystosowane do bootowania systemu na Umsdos.
Właściwie wszystko, co musisz zrobić, to:
Uruchom DOS
C:>loadlinx zImage root=D:
gdzie zImage to zwykły obraz jądra (skompresowany), skopiowany
po prostu gdzieś na dysk DOS. C: to dysk DOSowy, na
którym zainstalowałeś Linuksa.
Ładowanie systemu na Umsdos z dyskietki nie różni się
od ładowania systemu na Ext2. Plik jądra zImage
musi zostać poprawnie skonfigurowany, aby zlokalizować twoją główną
partycję systemu na Umsdos. Z reguły można to
osiągnąć przy pomocy polecenia rdev. Następująca sekwencja
poleceń skonfiguruje zImage i zapisze go na dyskietce.
rdev zImage /dev/hda1
rdev -R zImage 0
dd if=zImage bs=8192 of=/dev/fd0
Jeśli nic z tego nie rozumiesz, po prostu sformatuj startową dyskietkę DOS i zapisz na niej następujące składniki:
i w pliku autoexec.bat dopisz:
loadlinx zImage rw root=C:
Do ładowania systemu na Umsdos można też wykorzystać menedżer startowy Linuksa - LILO. Niestety nie mam z tym doświadczenia. Powino działać od wersji 1.1.60. Wyślij mi e-maila, jeśli coś o tym wiesz.
Można to zrobić przy pomocy jakiegokolwiek narzędzia DOS. Pliki utworzone przez Umsdos nie wyróżniają się niczym szczególnym. Ponadto Umsdos nie wymaga niczego nadzwyczajnego (układu katalogów, sekwencji nazw katalogów itd...) od swojego systemu plików.
O ile wiem, nie ma żadnego narzędzia do defragmentacji dla Linuksa.
Umsdos do działania potrzebuje pliku --linux-.---, który z
kolei potrzebuje katalogu DOS. Dla użytkowników lubiących
eksperymentować jest program udosctl, część pakietu
umsdos_progs (zawierającego umssync i umssetup)
umożliwia podstawowe operacje na katalogach (wyświetlanie zawartości,
kasowanie) niezależnie od pliku --linux-.--- i katalogu
DOS.
Umsdos przemapowuje pliki Linuksa bezpośrednio do plików MS-DOS. Jest to translacja jeden do jednego. Zawartość pliku w ogóle nie jest zmieniana. Umsdos funkcjonuje tylko na nazwach. Pliki specjalne (na przykład dowiązania i urządzenia) zarządzane są w sposób specjalny.
W każdym katalogu znajduje się plik o nazwie --linux-.---.
O Umsdos można myśleć jako o uniwersalnej specjalnej konfiguracji linuksowego systemu plików MS-DOS. W praktyce ta cecha i możliwość dostosowania wprowadzają zamieszanie w Umsdos. Oto dlaczego. Spróbuj zamontować nowo sformatowaną dyskietkę DOS tak, jak tutaj:
mount -t umsdos /dev/fd0 /mnt
Następnie wykonaj:
ls / >/mnt/LONGFILENAME
ls -l /mnt
Otrzymasz następujący rezultat:
-rwxr-xr-x 1 root root 302 Apr 14 23:25 longfile
Jak na razie wygląda na to, że system plików Umsdos nie robi o wiele więcej (w praktyce zupełnie nic nie robi), niż zwykły system plików MS-DOS z Linuksem.
???
Jak na razie nic nadzwyczajnego. Oto cała sztuczka. Jeśli katalog
DOS nie jest promowany, to będzie zarządzany tak samo w
Umsdos, jak i w MS-DOS. Umsdos stosuje specjalny
plik w każdym podkatalogu, do uzyskania translacji rozszerzonych
właściwości atrybutów plików (długa nazwa, właściciel itd...) systemu
Umsdos i ograniczeń DOSa. Ten plik jest niewidoczny dla
użytkowników Umsdos, ale widać go, gdy ładujesz DOS. Żeby
uniknąć niepotrzebnego zagracania partycji DOS tymi plikami
(--linux-.---), są one opcjonalne. Jeśli ich nie ma, Umsdos
zachowuje się tak, jak MS-DOS.
Kiedy katalog jest promowany, wszelkie kolejne operacje będą wykonywane z pełną składnią zwykle dostępną dla użytkowników Linuksa i Uniksa. W dodatku wszystkie później utworzone katalogi będą domyślnie promowane.
Ta właściwość pozwala Ci na logiczny podział swojej partycji DOS na
materiał linuksowy i dosowy. Trzeba też zdać sobie sprawę z tego, że pliki
--linux-.--- zajmują miejsce (mniej więcej 2k na katalog).
DOS używa z reguły dużych klastrów (16k dla partycji 500MB),
tak że unikanie tworzenia takiego pliku wszędzie, gdzie się da, może
zaoszczędzić wiele miejsca.
Promować katalog możesz kiedy chcesz, dzięki /sbin/umssync.
Można go zastosować w każdym momencie. Żeby wypromować katalog, wykonaj
następujące operacje:
--linux-.---./sbin/umssync zarządza istniejącym plikiem
--linux-.---. Nie tworzy go jednak za każdym razem od początku.
Po prostu dodaje do niego brakujące pozycje (pliki utworzone podczas
sesji DOS). Usuwa również z niego pozycje plików, które zostały
usunięte z katalogu DOS. Nazwa umssync bierze się
właśnie stąd, że synchronizuje zawartość pliku --linux-.--- z
odpowiednim katalogiem DOS.
Dobrze jest umieścić wiersz uruchamiający /sbin/umssync na
końcu pliku /etc/rc.d/rc.S, jeśli go tam nie ma. Następujące
polecenie jest poprawne dla większości systemów:
/sbin/umssync -r99 -c -i+ /
Opcja -c uniemożliwia umssync promowanie katalogów.
Uaktualni on jedynie istniejące pliki --linux-.---.
To polecenie przydaje się, jeśli potrzebujesz dostępu do katalogu linux podczas sesji DOSa. Linux nie potrafi poinformować, że katalog został zmodyfikowany przez DOS, tak więc Umsdos nie może wykonać operacji umssync jak należy.
Skasuj plik --linux-.--- z poziomu DOSa. Będziesz tego
żałował.
Jeśli nie używasz umssync w katalogu, w którym pliki zostały dodane
lub skasowane przez DOS, zauważysz kilka problemów:
/var/adm/syslog).
Instalacja Umsdos nie różni się wiele od instalacji zwykłego Linuksa (opartego na Ext2). Są tu dwie zasadnicze różnice.
/mnt/linux
Normalne etapy instalacji to:
/mnt odpowiednio do tego, gdzie
jest główny system plików./mnt.W przypadku Umsdos krok pierwszy nie jest potrzebny (czy brak potrzeby ponownego formatowania nie był właśnie celem Umsdos?).
Można zainstalować system Umsdos po prostu kopiując wszystkie
pakiety do /mnt. To oczywiście będzie działać. Ale utworzy
to całą kupę podkatalogów w twoim głównym katalogu DOS (C:),
a to ci się nie spodoba. Właśnie dlatego wszystkie instalacje Umsdos
stosują pseudoroot. I to jest najważniejsza różnica między zwykłą instalacją
Ext2 a instalacją Umsdos: wszystki pliki kopiowane są do
/mnt/linux.
/mnt/linux to nie zwykły katalog. Musi on być promowany, aby
poprawnie obsługiwać linuksowe długie nazwy plików i pliki specjalne
(dowiązania, urządzenia). Kroki potrzebne do utworzenia
/mnt/linux to:
mkdir /mnt/linuxumssync /mnt/linuxI już!
Jeśli nawet skonfigurowanie /mnt/linux to łatwizna, jest wiele pakietów
instalacyjnych, które powodują, że coś źle działa. Dlaczego?
Najpoważniejszy problem podczas instalacji bierze się z niekompatybilności
umssync. W wersji Linuksa 1.1.88 (nie pamiętam dokładnie)
uaktualniono Umsdos i wykryto błąd w umssync. Aby uniknąć
bałaganu wśród społeczności linuksowej, zdecydowano zwiększyć kompatybilność
wszystkich narzędzi Umsdos. Stare wersje narzędzi po prostu odrzucono.
Wygląda na to, że wiele dystrybucji nie uaktualniło
swojego programu umssync na dysku instalacyjnym.
Jest jeszcze wiele podobnych dystrybucji. Efekt tego jest po prostu
taki, że katalog /mnt/linux w ogóle nie jest promowany i w
rezultacie "obetnie" wszystkie długie nazwy plików i odrzuci wszystkie
pliki specjalne.
Można bardzo wcześnie, jeszcze podczas instalacji, wykonać test, aby dowiedzieć się, czy coś poszło nie tak. Dzięki mechanizmowi konsoli wirtualnych Linuksa możesz to zrobić bez opuszczania programu instalacyjnego. Wykonaj następujące kroki:
Alt-F2 (klawisz Alt w tym samym momencie, co
klawisz F2).cd /mnt/linux
Jeśli to nie działa, próbujesz za wcześnie. Najlepiej przeprowadzić te kroki
pod koniec selekcji pakietów.>TOTOls -l
Powinieneś zobaczyć pusty plik TOTO pisany wielkimi literami. Jeśli
jest napisany małymi literami, to coś poszło nie tak. Spróbuj ponownie
wykonać umssync. Można go używać raz po raz ( :-) ) bez problemu.
umssync
Jeśli nie ma komunikatu o błędzie, spróbuj znowu wykonać test TOTO.
Jeśli TOTO wygląda jak trzeba, to wszystko jest w porządku. Jest w
tej instalacji coś dziwnego, ale po prostu ją zapisz i kontynuuj.
Alt-F1, aby powrócić do ekranu instalacyjnego.
Jeśli test się nie powiódł, najprościej to naprawić poprzez zaopatrzenie się w
nowszą dyskietkę instalacyjną root. Można z reguły taką dyskietkę naprawić
poprzez instalację nowszej wersji umssync. Nie jest to trudne, ale
potrzebny jest do tego komputer z działającym Linuksem. Musisz po
prostu zamontować dyskietkę root i wymienić źle działający
umssync na nowy.
Większość instalacji Umsdos, w których coś się nie udaje, wypisuje na ekranie taką dziwną wiadomość. Nie jest to błąd w Umsdos, chociaż wygląda to osobliwie. Oto znane powody:
Instalacja Slackware próbuje ustawić plik wymiany już na początku instalacji. Aby to zrobić, najpierw proszony jesteś o wybranie partycji (napędu DOS), następnie zamontowanie jej i ustawienie pliku wymiany.
Podczas instalacji systemu Slackware musisz ustawić docelową
partycję jeszcze przed instalacją. Z reguły system montuje partycję
DOS w /mnt, tworzy katalog /mnt/linux i wykonuje w
nim umssync.
To właśnie stąd bierze się najwięcej problemów. Większość użytkowników po
prostu zapomina "ustawić partycję docelową" i bezpośrednio przechodzi do
reszty instalacji. Ponieważ /mnt jest już zamontowany, ta pomyłka
uchodzi niezauważona. To znaczy, że /mnt/linux nie został
utworzony poprawnie (nie wypromowany). Nie można poprawnie utworzyć
wszystkich plików specjalnych, dowiązań i długich nazw.
/mnt/linux został źle ustawiony. Najczęściej spowodowane jest to
niewłaściwą wersją programu umssync na dysku instalacyjnym.
W wersji Umsdos przed Linuksem 1.2.2 był błąd. Tryb
pseudoroot nie aktywował się poprawnie, gdy brakowało pliku
/etc/init. init znajduje się teraz w /sbin. Możesz
to naprawić, zaopatrzywszy się w nowszą wersję jądra. Jest to zalecane, w
wersji 1.2.2 wykryto i poprawiono jeszcze inny błąd.
Jeśli nie masz możliwości aktualizacji, zrób coś takiego:
mount -t umsdos /dev/hdXX /mnt gdzie /dev/hdXX to
twoja partycja DOS.cd /mnt/linux/etcln -s ../sbin/init initcd /Ctrl-Alt-DelNiestety pierwsze dwa problemy (te z instalacją) w rezultacie powodują, że instalacja jest kompletnie do niczego. Odinstaluj Umsdos (zobacz w następnym podpunkcie) i zainstaluj jeszcze raz.
Jedną fajną rzeczą w Umsdos i mechanizmie pseudoroot jest to, że
można go bez kłopotu ODinstalować. Po prostu uruchamiasz
DOSa i kasujesz katalog linux. To wszystko.
Umsdos nie potrzebuje żadnych specjalnych sterowników w
config.sys, nie tworzy też nic specjalnego poza katalogiem
linux.
Można to zrobić albo z poziomu Linuksa, albo spod DOSa.
Wystarczy tylko skopiować cały katalog linux z jednego dysku
na drugi. Potem trzeba dostosować mechanizm ładowania (z reguły polecenie
loadlin) i plik /etc/fstab.
Umsdos może istnieć na jakimkolwiek dysku DOSowym. Nie trzeba
instalować go na dysku C:, ani w ogóle na pierwszym dysku twardym.
Nie ma to żadnego znaczenia.
W rzeczywistości jeśli chcesz, to możesz mieć kilka instalacji Umsdos na różnych dyskach tylko po to, żeby poeksperymentować.
A co, gdyby chcieć zainstalować wiele Linuksów w krótkim czasie?
Systemy Umsdos istnieją w świecie DOS. Możesz to wykorzystać, jeśli chcesz łatwo zainstalować Linuksa.
Możesz zainstalować i skonfigurować Umsdos na swojej stronie
internetowej. Kiedy będziesz zadowolony z wyników konfiguracji i
pakietów, które wybrałeś, możesz załadować DOSa i skopiować
cały katalog linux do swojego dosowego serwera plików. Można
następnie uruchomić inną stację z DOSem i po prostu skopiować pliki
z sieciowego systemu plików na dysk lokalny. I to wszystko. Trzeba tylko
dostosować skrypt ładujący (loadlinx) i gotowe.
Przy minimalnej zmianie ustawień (nazwa hosta, numer IP) każdy będzie mógł zainstalować Linuksa w kilka chwil.
Dla zainteresowanych: instalacja systemów linuksowych poprzez kopiowanie włączonych systemów działa również dla innych Linuksów, w tym tych opartych na Ext2.
Piękne w Linuksie jest to, że nie ma tam żadnych ukrytych plików, które trzeba instalować przy pomocy magicznych programów instalacyjnych.
Umsdos nadaje się nawet dla użytkowników Ext2 (rodzinny system plików Linuksa). Często ma miejsce taka sytuacja:
Tu właśnie może pomóc Umsdos. Możesz stworzyć katalog
Linux na partycji DOS i bez ograniczeń korzystać z niego
spod Linuksa. Dla przykładu, chcesz utworzyć nowy katalog o nazwie
"extra" na swoim dysku C:. Chcesz też, aby działał on
podobnie, jak normalny katalog linuksowy. Zrób tak (zakładając, że C: to
/dev/hda1):
mkdir /c
/sbin/mount -t umsdos /dev/hda1 /c
mkdir /c/extra
umssync /c/extra
Musisz do tego mieć uprawnienia roota.
Jeśli ustawisz /etc/fstab w odpowiedni sposób, zawsze będziesz miał
dostęp do katalogu /c/extra.
Nie wystarczy wyjaśnić, jak zainstalować i posługiwać się systemem Umsdos. Większość ludzi chce się dowiedzieć, czy warto używać Umsdos, czy nie.
Celem tym było ułatwienie instalacji Linuksa. Innym celem
było ułatwienie jego ODinstalowania. Ideą była promocja
Linuksa. Instalacja nowego systemu operacyjnego zawsze sprawia
kłopoty. Na przykład OS/2 zaśmieci twój główny dysk C: całym
mnóstwem nowych katalogów. Jeśli jesteś tak sprytny, jak ja, skasuje on
również twoje pliki config.sys i autoexec.bat :-(
Tryb pseudoroot systemu Umsdos pozwala na uniknięcie tej niechcianej ingerencji. Można odinstalować Linuksa bez skutków ubocznych.
Jeśli masz mały dysk, Umsdos da ci możliwość dzielenia przestrzeni na dysku między DOSem a Linuksem Dysk poniżej 300 MB to według mnie mały dysk. Opieram swoją opinię na rozmiarach dostępnych pakietów. Pewien popularny procesor teksu może zająć 70 MB, jeśli wybierze się wszystkie opcje.
Jeśli masz większy dysk, możesz rozważyć posiadanie wydzielonej partycji linuksowej z systemem plików Ext2. Ext2używa mniejszych klastrów niż DOS (faktycznie jest to 1k), więc kiedy tworzysz wiele małych plików, zajmie to mniej miejsca, niż na partycji Umsdos.
Poniższe punkty dotyczą porównania Umsdos z Ext2.
FAT (file allocation
table - tablica alokacji plików) umieszczoną na początku dysku twardego.
System plików DOS jest z tego powodu prawdopodobnie bardziej
podatny na uszkodzenia.
Tłumaczenie to jest chronione prawami autorskimi © Leszka Pietryki. Dozwolone jest rozprowadzanie i dystrybucja na prawach takich samych jak dokument oryginalny.
Nie zmieniłem zasadniczej treści dokumentu. Dodałem tylko odnośniki do stron z polskimi wersjami tłumaczeń dokumentów HOWTO oraz pozmieniałem kilka znaczników w celach estetyki.
Jeśli znajdziesz tu jakieś poważne błędy, literówki itp., wyślij mi, proszę, e-maila, żebym mógł je poprawić.
Nie ponoszę żadnej odpowiedzialności za ewentualne efekty stosowania się do rad zawartych w tym dokumencie.
doc-linux-pl-2002.06.14.orig/html/UUCP-HOWTO.pl.html 0100664 0001750 0001750 00000057335 06770264140 020332 0 ustar coven coven
Zamiarem tego dokumentu jest odpowiedzenie na kilka pytań oraz komentarzy, które zaliczają się do "często zadawanych pytań" na temat oprogramowania UUCP pod Linux-em ogólnie oraz wersji na Linux-a SLS i Slackware w szczególności.
Dokument ten wraz z odpowiadającym mu Mail i News HOWTO zastępują "UUCP-NEWS-MAIL-FAQ", które było poprzednio wysyłane na grupę comp.os.linux.announce.
Nowe wersje tego dokumentu będą okresowo wysyłane na grupę comp.os.linux.announce, comp.answers oraz news.answers. Będą także dodawane do różnych archiwów ftp, które gromadzą takie informacje, a między innymi SUNSite Polska.
Dodatkowo powinieneś móc także znaleźć go na domowej stronie WWW Linux-a pod adresem sunsite.unc.edu.
Jestem zainteresowany wszelkim odzewem, pozytywnym czy negatywnym, dotyczącym zawartości tego dokumentu. Koniecznie skontaktuj się ze mną jeśli znajdziesz jakieś błędy czy pominięcia.
Czytam wszystkie listy, ale nie koniecznie na wszystkie odpowiadam. Żądania poprawek czy ulepszeń będą rozważane w zależności od kombinacji wolnego czasu, wartości żądania i dziennego ciśnienia krwi :)
Wszelkie "ochrzany" będą kierowane do /dev/null więc się
nie wysilaj.
W szczególności standardy ścieżek w systemie plików Linux-a ewaluują. Wszystko co znajduje się w tym dokumencie jest tylko zilustrowaniem opartym na bieżącym standardzie podczas pisania danej części dokumentu oraz na ścieżkach używanych w dystrybucjach albo narzędziach, które ja osobiście widziałem. Skonfrontuj ścieżki z tymi, których używa twoja dystrybucja.
Komentarze dotyczące aktualnego formatu dokumentu powinny być kierowane do koordynatora projektu HOWTO - Grega Hankinsa. gregh@sunsite.unc.edu.
Prawa autorskie należą do Vince'a Skahana.
Kopie mogą być reprodukowane i dystrybuowane w jakiejkolwiek postaci fizycznej lub elektronicznej bez pozwolenia autora. Tłumaczenia są podobnie dozwolone bez wyraźnego pozwolenia jeśli zawierają informację o tym, kto dokonał tłumaczenia.
Krótkie cytaty mogą być używane bez zgody autora. Prace pochodne oraz częściowa dystrybucja UUCP-HOWTO muszą zawierać kopię tego pliku albo wskazanie do kopii.
Dozwolona jest dystrybucja komercyjna a nawet zalecana; jednak autor chciałby być informowany o takowych przedsięwzięciach (jako grzeczność).
Krótko mówiąc, chcemy promować szerzenie tych dokumentów przez wszelkie dostępne kanały. Chcielibyśmy także utrzymać prawa autorskie nałożone na te dokumenty.
Nadal chcemy, aby WSZYSTKIE informacje dostarczane w dokumentach HOWTO były rozprowadzane. Jeśli masz pytania, skontaktuj się proszę z Gregiem Hankinsem, koordynatorem projektu Linux HOWTO pod adresem gregh@sunsite.unc.edu.
Oczywiście wyrzekam się jakiejkolwiek odpowiedzialności za zawartość tego dokumentu. Użycie pomysłów, przykładów oraz innej zawartości tego dokumentu jest całkowicie na własne ryzyko.
Jest mnóstwo dodatkowego materiału informacyjnego dostarczonego w innych dokumentach Linux HOWTO oraz z projektu dokumentacji Linux-a. W szczególności możesz rzucić okiem na:
Grupa dyskusyjna comp.mail.uucp może rozwiązać większość twoich problemów.
Jest grupa pocztowa na temat Taylor UUCP.
Aby się tam zapisać (lub wypisać) wyślij list na adres taylor-uucp-request@gnu.ai.mit.edu.
Żądanie przechodzi przez osobę a nie program, tak więc upewnij się, że dołączyłeś adres, pod którym chcesz otrzymywać pocztę.
Aby wysłać wiadomość na listę wyślij ją na adres taylor-uucp@gnu.ai.mit.edu.
Wersje HDB i V2 protokołu UUCP są udokumentowane w dokumentacji prawie każdego sprzedawcy tak samo jak w prawie każdej książce poświęconej komunikacji w *nix-ach.
Pliki konfiguracyjne Taylor UUCP są obecnie udokumentowane tylko w plikach informacyjnych dołączonych do źródeł (a także mam nadzieję w dystrybucji SLS). Aby je przeczytać, możesz zainstalować miły program infosrc z dysków serii "s" z dystrybucji SLS oraz skompilować go.
Następujące książki mogą ci pomóc:
"Managing UUCP and USENET" wydawnictwa O'Reilly and
Associates jest według mnie najlepszą książką do poznawania
programów i protokołów powiązanych z USENET-em."Unix Communications" autorstwa The Waite Group
zawiera miły opis wszystkich (i więcej) części i jak one razem
współpracują."Practical Unix Security" wydawnictwa O'Reilly and
Associates zawiera miłą, ogólną dyskusję jak zabezpieczyć UUCP. (Na
jesieni tego roku ma się ukazać tłumaczenie polskie tej książki. -
od tłumacza)"The Internet Complete Reference" Osborne'a jest dobrą
do polecenia książką, która wyjaśnia różne serwisy dostępne w
Internecie i jest wspaniałym źródłem informacji na temat news-ów,
poczty i wszelkich innych zasobów Internet-u.The Linux Networking Administrators' Guide" Olafa
Kircha - wspomniany już wyżej - z projektu dokumentacji Linux-a
jest dostępny na sieci i jest także opublikowany przez (conajmniej)
O'Reilly i SSC. Jest to doskonały podręcznik do nauki czego tylko
sobie zamarzysz a czego będziesz potrzebował w administracji
Unix-em.
Nie ma już więcej informacji dotyczących konfiguracji i uruchamiania UUCP na Linux-ie. Prawie na pewno nie chcesz puszczać pytań dotyczących UUCP na listach comp.os.linux.*
O ile twoje pytanie nie jest rzeczywiście specyficzne dla Linux-a (jak np. "powiedzcie proszę jaka obsługa pliku konfiguracyjnego jest wbudowana w binaria Taylor uucp v1.04 w SLS v1.02"), powinieneś zadawać je na grupie comp.mail.uucp jak to było powiedziany wyżej.
Powtórzę jeszcze raz.
Właściwie nie ma powodu, żeby wysyłać jakiekolwiek pytania związane z UUCP do hierarchii comp.os.linux.*. Są grupy w hierarchii comp.mail.*, które zajmują się takimi sprawami.
JEŚLI WYŚLESZ NA GRUPĘ COMP.OS.LINUX.* PYTNIE NIE ZWIĄZANE BEZPOŚREDNIO Z LINUX-EM, TO SZUKASZ POMOCY W ZŁYM MIEJSCU. EKSPERCI OD UUCP SIEDZĄ W MIEJSCACH WYMIENIONYCH POWYŻEJ I Z REGUŁY NIE MAJĄ LINUX-A.
WYSYŁANIE PYTAŃ NIE ZWIĄZANYCH BEZPOŚREDNIO Z LINUX-EM DO HIERARCHII COMP.OS.LINUX.* JEST STRATĄ CZASU TWOJEGO I INNYCH I CZĘSTO OPÓŹNIA TO OTRZYMANIE POPRAWNEJ ODPOWIEDZI NA TWOJE PYTANIE.
Nie ma żadnych specyficznych wymagań sprzętowych dla UUCP pod Linux-em. Właściwie każdy modem kompatybilny z Heyes działa z UUCP.
W większości wypadków będziesz chciał najszybszy modem na jaki cię stać. Ogólnie będziesz musiał mieć na karcie szeregowej układ UART 16550, żeby obsługiwać prędkości większe od 9600 bodów.
Jeśli nie wiesz co oznacza ostatnie zdanie, to odwołaj się do grupy comp.dcom.modems albo różnych dokumentów na temat komunikacji szeregowej okresowo wysyłanych na USENET-cie.
Taylor UUCP (wersja bieżąca to 1.05) jest dostępne jako źródło na prep.ai.mit.edu lub w postaci binarnej w różnych dystrybucjach Linux-a.
W Polsce UUCP jest dostępne na
ftp.icm.edu.pl w katalogu
/pub/Linux/sunsite/system/mail/transport.
Plik newspak-2.4.tar.z zawiera pliki konfiguracyjne oraz
"readme" związane z tworzeniem oprogramowania uucp, news-ów i
poczty pod Linux-em z różnych wolno dystrybuowanych źródeł. Zwykle
można go znaleźć na
ftp.icm.edu.pl w katalogu
/pub/Linux/sunsite/system/news/misc. Jeśli go tam nie ma,
to skontaktuj się ze mną, a upewnię się, żebyś dostał ten plik.
(Większość z tej sekcji to dosłownie przekopiowana zawartość pliku README ze źródeł Taylor UUCP v1.05)
Szczegóły na temat kompilacji znajdują się w pliku uucp.texi w źródłach.
Pliki conf.h i policy.h dla Linux-a uznane za dobre możesz wziąć ze wspomnianej wyżej w sekcji "Inne źródła informacji" dystrybucji. W tym przypadku, możesz przypuszczalnie przejść od razu do napisania make.
Aby rozpakować archiwum spakowane gzip-em robię tak:
gunzip -c <nazwa_pliku>.tar.z | tar xvf -
Nowszy tar posiada specjalną opcję do obsługi spakowanych archiwów:
tar -zxvf <nazwa_pliku>.tgz
Tutaj ustawiam "prefix" na "/usr" zamiast domyślnej
wartości "/usr/local".
Napisz:
sh configure
Skrypt konfiguracyjny skompiluje pewną ilość programów testowych, aby zobaczyć co jest dostępne na twoim systemie i obliczy trochę rzeczy.
Skrypt ten utworzy plik conf.h z pliku conf.h.in oraz Makefile z Makefile.in. Stworzy także config.status, który jest właściwym skryptem tworzącym wspomniane pliki.
configure --prefix=/usr/lib
Ja wziąłem wartości domyślne.
Zalecałbym na początek, żebyś wziął dołączone uznane za dobre pliki konfiguracyjne dla typu HDB i je zainstalował.
Permissions wyraźnie określa, gdzie są
rmail i rnews jeśli umieścisz je gdzieś indziej niż na ścieżce,
którą podałeś w policy.hDevices odpowiadają fizycznemu
podłączeniu modemu (cua1=COM2 w przykładach).Systems, aby ustawić prędkość, numer
telefonu, login i hasło.
CHROŃ TEN PLIK PRZED ODCZYTEM DLA ŚWIATA.
Permissions oraz dodaj zbiór linii dla każdego z
adresów, z którymi się łączysz. Z powodu bezpieczeństwa, zaleca
się, aby każdy z nich (jeśli pozwalasz na dzwonienie do ciebie)
miał osobne konto i katalog domowy, tak żebyś mógł prześledzić
różne rzeczy.
/usr/lib/uucp/uucico -r 1 -x 9 -s nazwa_odległego_systemu
Opcja -x 9 spowoduje zapisanie maksymalnej ilości informacji do
pliku /usr/spool/uucp/.Admin/audit.local.
Normalnie uruchamiam z opcją -x 4 ponieważ ten poziom
logowania pomaga mi przy problemach z logowaniem się. Oczywiście,
zawarte są tam czysto tekstowe informacje z twojego pliku
Systems (konto/hasło) tak więc uważaj, żeby nie mógł go każdy
czytać.
-x all, aby
otrzymać najwyższy możliwy poziom.
Możesz także przeglądać plik z inforamacjami poleceniem
tail -f /usr/spool/uucp/.Admin/audit.local
aby obserwować na bieżąco co się dzieje.
Ogólnie jeśli coś nie działa, to możesz odwołać się do wspomnianej wyżej dokumentacji. Możesz także poprosić o pomoc bardziej obytych z UUCP sąsiadów. Jednak zwykle jest to coś w rodzaju literówki.
(tryb skrupulatny włączony - wiem, że niektórzy są tak skrupulatni na temat "łatwości używania" jak ja na temat "bycia standardem". Dlatego robią oni źródła, z których możesz stworzyć własny program. :) )
Ponieważ, moim skromnym zdaniem, jest to w tych czasach de-facto standard implementacji UUCP. Są tysiące sieci z doświadczonymi administaratorami i jest wiele miejsc, w których możesz zdobyć naprawdę dobre informacje na temat ustawień HDB.
UUCP-1.04, które znajduje się w SLS 1.02 oraz w późniejszej wersji ma wbudowane wszystkie trzy typy plików konfiguracyjnych. Ponieważ nie mogę tego przetestować, poczytałem trochę i dowiedziałem się od Iana Taylora, że powinno to działać.
Porządek poszukiwania plików konfiguracyjnych, to Taylor potem V2
(L.sys) potem HDB. Użyj narzędzia uuconv z
/usr/lib/uucp, aby zamienić format pliku konfiguracyjnego
na inny.
Jeśli nie możesz się już doczekać, to weź źródła UUCP i zdefiniuj
symbole HAVE_BNU_CONFIG, HAVE_V2_CONFIG oraz
HAVE_TAYLOR_CONFIG w pliku policy.h i napisz
make.
Następujący kruczek jest dość brzydki, ale działa z binariami, które nie mają wbudowanej obługi plików konfiguracyjnych Taylor, a mają z takich korzystać.
"-I /usr/local/lib/uucp/config" do każdego
wywołania jakiegokolwiek programu w pakiecie uucp.Bieżąca wersja Slackware ma także miłe ustawienie, w którym
rozdzielono pliki konfiguracyjne dla różnych konfiguracji do różnych
katalogów. Na przykład pliki konfiguracyjne HDB znalazłyby się w
/usr/lib/uucp/hdb_config. Chociaż nawykłem do "swoich
własnych składanek", już od pewnego czasu udaje mi się odpalać
dziewicze UUCP, prosto ze Slackware w trybie HDB bez żadnych problemów.
/usr/lib/uucp z SLS, to nie będziesz miał z tym problemu.uuconf/syssub.c i zmianę w linii 323
domyślnego czas 10 sekund na większy.feed Any ACU,ag 38400 5551212 ogin: \c\d "" twój_login word: hasło
*** conn.c.orig Mon Feb 22 20:25:24 1993
--- conn.c Mon Feb 22 20:33:10 1993
***************
*** 204,209 ****
--- 204,212 ----
/* Make sure any signal reporting has been done before we set
fLog_sighup back to TRUE. */
+ /* SMR: it seems to me if we don't care about SIGHUPS, we should clear
+ the flag before we return */
+ afSignal[INDEXSIG_SIGHUP] = FALSE;
ulog (LOG_ERROR, (const char *) NULL);
fLog_sighup = TRUE;
Anonimowe uucp z SLS działa tylko w trybie "Taylor" ponieważ jest skompilowane z symbolem HAVE_TAYLOR_CONFIG. Jeśli chcesz mieć anonimowe uucp w trybie HDB, będziesz musiał przekompilować źródła ze zdefiniowanym HDB. Ian Taylor zastanawia się w jaki sposób obejść się z tą "zaletą".
Taylor w trybie HDB wydaje się także reagować na "białe znaki" i puste linie. Aby być zupełnie pewnym, sprawdź czy nie ma pustych linii albo spacji na końcach linii w pliku Permissions.
Ostatecznie upewnij się, że masz plik o nazwie remote.unknown
w /usr/lib/uucp oraz że NIE nie jest on
wykonywalny. Szczegóły dotyczące tego pliku znajdziesz w książce
pt. "Managing UUCP and USENET" wydawnictwa O'Reilly&Assoc.
Z całym prawdopodobieństwem, chcesz użyć urządzenia (/usr/lib/uucp/Devices), które nie istnieje, albo urządzenie, które podałeś w pliku /usr/lib/uucp/Systems nie jest identyczne z żadnym z pliku Devices.
W następstwie tego powstały ulepszone wersje moich działających plików konfiguracujnych Taylor 1.05 HDB, które możesz od razu użyć.
zauważyłeś "ACU" w pliku Systems ? Informuje to jakiego portu użyć w Devices.
zauważyłeś słowo "scout" w Systems ? Informuje ono, jakiego urządzenia użyć do dzwonienia w Dialers.
Jeśli miałeś port ACU, ale żadnego, który odpowiadałby urządzeniu do dzwonienia w tej samej linii w Systems, to dostaniesz tę właśnie informację.
Następujące pliki konfiguracyjne są uznane za dobre dla Taylor 1.05
pod Linux-a w trybie HoneyDanBer. Działają z jądrami 0.99-8 lub
nowszymi. Wszystkie pliki powinny znajdować się w /usr/lib/uucp
o ile nie zmieniałeś źródeł, żeby zmienić lokalizację katalogu
bibliotecznego.
Jeśli umieściłeś cokolwiek w NIESTANDARDOWYM miejscu, to uważaj bo programy takie jak sendmail mogą się pogubić. Musisz się upewnić, że wszystkie programy związane z komunikacją są zgodne z twoim "standardem" ścieżek.
Jeśli masz jądro 0.99-7 lub wcześniejsze, to zmień "cua1" na "ttyS1".
#------------- Devices ------------- # upewnij się, że urządzenia są zgodne z twoim systemem # cua1 = COM2 # # "scout" tutaj to modem Digicom Scout Plus 19.2, który używam. # tbfast itd. to różne prędkości dla modemu Telebit Trailblazer Plus. # ACU cua1 - 19200 scout ACU cua1 - 9600 tbfast ACU cua1 - 1200 tbslow ACU cua1 - 2400 tbmed #------------- dialers -------------- # zauważ, że ustawienie Trailblazer-a odbywa się podczas działania # "scout" to modem Digicom Scout Plus (typu Heyes), którego używam # scout =W-, "" ATM0DT\T CONNECT tbfast =W-, "" A\pA\pA\pT OK ATS50=255DT\T CONNECT\sFAST tbslow =W-, "" A\pA\pA\pT OK ATS50=2DT\T CONNECT\s1200 tbmed =W-, "" A\pA\pA\pT OK ATS50=3DT\T CONNECT\s2400 #-------------- Systems ------------- # to jest bardzo ogólna postać, która będzie działać dla większości systemów # # Any;1 oznacza, że możesz dzwonić raz na minutę używając -f (force) # ACU,g oznacza użyj raczej protokołu "g" aniżeli Taylor-a - domyślne # jest "i" # fredsys Any;1 ACU,g 19200 scout5555555 "" \r ogin:--ogin: uanon word: uanon #-------------------------------- Permissions ------------------------- # UUCP Taylor w trybie HDB wydaje się reagować na puste linie. # Upewnij się, każda linia w tym pliku jest zapełniona lub jest komentarzem # # to jest pozycja dla "anonymous" uucp # LOGNAME=nuucp MACHINE=OTHER \ READ=/usr/spool/uucp/nuucp \ WRITE=/usr/spool/uucp/nuucp \ SENDFILES=yes REQUEST=yes \ COMMANDS=/bin/rmail # # to jest normalne ustawienie dla odległego systemu, który łaczy się z nami # zauważ, że jest tu bezwzględna ścieżka do rnews, ponieważ ta sieć umieszcza # różne rzeczy w niestandardowych lokacjach # LOGNAME=fredsys MACHINE=fredsys \ READ=/usr/spool/uucp/fredsys:/usr/spool/uucp/uucppublic:/files \ WRITE=/usr/spool/uucp/fredsys:/usr/spool/uucppublic \ SENDFILES=yes REQUEST=yes \ COMMANDS=/bin/rmail:/usr/local/lib/news/bin/rnews #----------------------------------------------------------------------
Nowa wersja v1.05 ma dodaną opcję -z do programu uucico, która powoduje próbowanie połączenia się z dodatkowymi numerami.
Następujący ludzie pomogli przy składaniu informacji, tak aby mógł powstać ten dokument.
Ed Carp, Steve Robbins, Ian Taylor, Greg Naber, Matt Welsh, Pierre Beyssac
Jeśli o kimś zapomniałem, to przepraszam.
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:
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 sie na nią zapisać, to
wyślij list o treści subscribe jtz Imię Nazwisko na adres
majordomo@ippt.gov.pl
Zmiany w tym dokumencie wprowadzone przez tłumacza to info nt. polskiego tłumaczenia książki "Practical Unix Security". doc-linux-pl-2002.06.14.orig/html/User-Group-HOWTO.pl.html 0100664 0001750 0001750 00000161716 07457640740 021574 0 ustar coven coven
Dokument ten służyć ma pomocą w zakładaniu, prowadzeniu i rozbudowywaniu Grup Użytkownków Linuksa (zwanych dalej LUG-ami).
Linux jest wolnodostępną wersją Unix-a na komputery osobiste, serwery i stacje robocze. Stworzony został na procesory i386, w tej chwili obsługiwane są również i486, Pentium, Pentium Pro, Pentium II (oraz klony x86 produkowane przez AMD, Cyrix itd), SPARC-e, DEC-Alpha, PowerPC/PowerMac, Motorola 68x0 (Amiga i Mac).
Jeśli chcesz dowiedzieć się więcej na temat Linuksa, rozpocznij od Linux Documentation Project.
Ogólne informacje na temat grup użytkowników komputerów znajdziesz w zasobach Stowarzyszenia Grup Użytkowników Komputerów Osobistych (Association of PC Users Groups).
Aby w pełni pojąć i docenić ważką rolę odgrywaną w społeczności Linuksa przez LUG-i istotne jest zrozumienie co takiego czyni Linuksa wyjątkowym systemem operacyjnym.
Linux jest potężnym i niezwykle efektywnym OS-em, a rozumiany jako ucieleśnienie idei rozwoju oprogramowania jest jeszcze potężniejszy. Linux, dzięki oparciu o licencję GNU, jest darmowy i ogólnodostępny. Kod źródłowy -- zawsze dostępny dla wszystkich zainteresowanych -- jest rozwijany pod technicznym nadzorem Linusa Torvaldsa i innych głównych koordynatorów przez niepowiązaną w struktury grupę programistów na całym świecie. Linux rozwija się bez centralnego sterowania, biurokracji, ani ciała zajmującego się nadzorem, koordynacją, czy kierunkowaniem działań. Sytuacja taka stanowi lwią część uroku tego systemu, zapewnia mu techniczną jakość, ale jest również przyczyną nieefektywnego wykorzystania zasobów ludzkich (również na polu nauczania nowych użytkowników) oraz nieskutecznej - lub wręcz szkodliwej - promocji (a co za tym idzie tworzenia niewłaściwego wizerunku systemu).
Na szczęście nic nie zapowiada zmiany luźnej struktury projektu. Linux istnieje, ponieważ ludzie mogą przyłączać się do projektu i odchodzić - i zależy to tylko od nich. Wolny programista jest szczęśliwym programistą jest efektywnym programistą.
Jednak owa luźna struktura może nieco skomplikować życie przeciętnego użytkownika, szczególnie jeśli nie jest on programistą z zawodu lub powołania. Dokąd zwrócić się o pomoc? Gdzie szukać kursów? Gdzie dowiedzieć się, do jakich celów Linux nadaje się najlepiej?
Odpowiedziami na wiele z tych pytań powinny służyć LUG-i biorąc na siebie zadania wypełniane normalnie przez lokalne biura koropracji, w przypadku Linuksa naturalnie nieistniejące. Dlatego właśnie lokalne grupy użytkowników są tak ważne.
Linux jest wyjątkowy, ponieważ zadania takie jak planowanie wykorzystania zasobów, nauczanie użytkowników, czy udzielanie wszelkiego rodzaju pomocy nie są odgórnie ani centralnie sterowane przez żadną ociężałą strukturę biurokratyczną. Zadania te, wykonywane przez wiele podmiotów (Internet, konsultantów, handlowców, szkoły i uniwersytety), coraz częściej przejmowane są przez lokalne LUG-i.
Grupy Użytkowników Komputerów nie są niczym nowym, przynajmniej w Stanach Zjednoczonych. W istocie odegrały one istotną rolę w historii komputeryzacji. Powstanie komputera osobistego było w dużej mierze odpowiedzią na zapotrzebowanie grup zrzeszających pasjonatów elektroniki, radia HAM, oraz innych hobbystów i uczestników różnego rodzaju prezentacji i spotkań handlowych na prosty dostęp do niedrogiego sprzętu liczącego, gromadzącego i przetwarzającego dane. Naturalnie po pewnym czasie giganty takie jak IBM odkryły, że PC może być źródłem dochodu, ale impet swojego rozwoju zawdzięcza komputer osobisty głównie zwykłym użytkownikom, ich pracy i potrzebom.
Charakter tych grup zmienił się z czasem, często na gorsze. Szeroko opisywane były finansowe kłopoty największej kiedykolwiek istniejącej grupy Boston Computer Society, a i w innych grupach w całych Stanach Zjednoczonych zmniejszyła się ilość członków. W okresie rozkwitu amerykańskie grupy użytkowników koncentrowały się na wydawaniu broszur informacyjnych, utrzymywaniu dyskietkowych bibliotek oprogramowania shareware, organizowaniu spotkań (także towarzyskich), a czasem nawet BBS-ów. Jednak z rozpowszechnieniem się Internetu wiele aspektów działalności tych grup przejętych zostało przez CompuServe, AOL i, ogólnie, sieć.
Powstanie Linuksa zbiegło się (a nawet zostało przyspieszone przez) z ogólnym ,,odkryciem'' Internetu. Wraz z rozwojem popularności Internetu wzrastała popularność Linuksa. Internet przysporzył społeczności Linuksa nowych użytkowników, programistów i handlowców.
W momencie więc, gdy ilość tradycyjnych grup użytkowników komputerów osobistych zmniejszała się z powodu popularności Internetu, ta właśnie popularność popchnęła Linuksa do przodu i stworzyła zapotrzebowanie na grupy temu konkretnie systemowi poświęcone.
Prostym przykładem pokazującym odmienność LUG-ów od tradycyjnych grup użytkowników jest podejście do sprawy kopiowania i wymiany programów podczas spotkań członków. Tradycyjne grupy zmuszone były do ścisłej kontroli rodzaju owego oprogramowania. Nielegalne kopiowanie komercyjnych programów, chociaż naturalnie miało podczas owych spotkań miejsce, było oficjalnie zabronione. W przypadku spotkań LUG-owskich problem ten po prostu nie występuje. Nie tylko nie należy zabraniać kopiowania Linuksa, przeciwnie -- darmowe rozpowszechnianie go powinno być jednym z głównych zadań LUG-ów! Wiadomo skąd inąd, że grupy tradycyjne mają problemy z zaakceptowaniem faktu, że Linuksa można legalnie kopiować do woli :-).
Rozbudowa istniejących i powstawanie nowych LUG-ów jest jednym z koniecznych warunków dalszego rozwoju Linuksa. Z powodu wyjątkowego statusu tego systemu LUG-i przejmować muszą część funkcji wypełnianych normalnie przez regionalne przedstawicielstwa takich korporacji jak IBM, Microsoft, czy Sun. LUG-i mogą i muszą oferować użytkownikom oraz konsultantom wiedzę i pomoc, promować Linuksa jako rozwiązanie tam, gdzie istnieje zapotrzebowanie na pracę komputerów, oraz być źródłem wszelkiego rodzaju informacji dla lokalnych mediów, takich jak gazety, czy telewizja.
Ponieważ ten dokument jest pomocą nie tylko w prowadzeniu, ale również i w zakładaniu lokalnych LUG-ów, omówmy sposoby sprawdzania, czy i gdzie takie grupy już istnieją.
W sieci dostępny jest szereg takich spisów. Jeśli planujesz założenie lokalnej grupy, sprawdź po pierwsze gdzie znajduje się najbliższy istniejący LUG. Lepiej dołączyć do istniejącej już w pobliżu grupy niż zakładać nową.
Według danych z połowy roku 1997, LUG-i istnieją we wszystkich pięćdziesięciu stanach USA, w Kolumbii, i w 26 innych krajach (włączając w to Indie, Rosję, oraz większą część Zachodniej i Wschodniej Europy.)
Na marginesie:
Największym niezdobytym jeszcze komputerowo rynkiem na naszej planecie są Chiny, w których, jak się wydaje, nie istnieje ani jeden LUG. Indie, drugi pod względem zaludnienia kraj na świecie, ma ich zaledwie kilka.
Pierwsza z w/w list skupia się głównie na LUG-ach amerykańskich, natomiast lista druga oferuje spis bardziej międzynarodowy.
Znajdujące się w sieci listy są raczej aktualne, istnieje jednak możliwość, że nie wszystkie LUG-i znajdują się w spisie. Dlatego oprócz przejrzenia owych list warto wysłać ogłoszenie o planach założenia nowej grupy na grupy dyskusyjne comp.os.linux.announce, comp.os.linux.misc, oraz na grupy w hierarchii lokalnej. Ogłoszenia takie, jeśli w pobliżu nie ma LUG-a, posłużą za informację dla potencjalych członków nowej grupy.
Założenie lokalnej grupy wymaga czasem dokonania wyboru między wygodą a jednością. Jeśli na przykład w dużej aglomeracji istnieje już LUG, ale na drugim końcu miasta, można zastanowić się nad założeniem nowej grupy -- po prostu dla wygody. Z drugiej jednak strony może lepiej wziąć pod uwagę korzyści płynące ze współpracy i, aby nie rozbijać pewnych całości na kawałki, dołączyć do grupy już istniejącej. Większa ilość członków oznacza większe możliwości, wpływy i efektywność! Owszem, ,,fajnie'' jest mieć ,,swojego'' LUG-a, jednak grupa dwustuosobowa jest lepsza niż dwie stuosobowe. Oczywiście w przpadku małych miasteczek czy wsi lepiej założyć grupę małą, niż nie zakładać jej wcale.
Podsumowując, założenie LUG-a jest trudnym przedsięwzięciem, wymagającym rozważenia wielu problemów -- włącznie z efektem, jaki powstanie nowej grupy może mieć na istniejące już LUG-i.
Cele lokalnych LUG-ów są różne, podobnie jak różne są regiony, w których grupy te działają. Nie istnieje żaden ,,plan przewodni'' dla LUG-ów (również ten dokument takiego planu nie poda), ponieważ Linux (a więc i grupy jego użytkowników) wolny jest od biurokracji i centralnego sterowania.
Można jednak sprecyzować kilka najważniejszych celów działalności LUG-ów:
Każdy z lokalnych LUG-ów powienien łączyć te cele w indywidualny sposób zaspokajając różne przecież potrzeby swoich członków.
Promowanie Linuksa jest dla jego użytkownika potrzebą tak naturalną jak odżywianie się czy sen. Zwykłą reakcją na odkrycie czegoś działającego, i to działającego dobrze, jest chęć podzielenia się odkryciem z jak największą ilością osób. Nie sposób nie docenić roli LUG-ów w promowaniu Linuksa, szczególnie w sytuacji gdy jego -- zasłużona przecież -- odpowiednio wysoka pozycja w świecie producentów oprogramowania komercyjnego i sprzętu nie została jeszcze osiągnięta. Oczywiście każda pozytywna wzmianka o Linuksie w prasie działa na jego korzyść, jednak równie istotne są opinie użytkowników tego systemu przekazywane osobiście znajomym, szefom, czy pracownikom.
Rozpowszechnianie wiedzy o Linuksie możne przynieść pozytywne efekty, może również jednak społeczności linuksowej zaszkodzić. Jako członkowie tej społeczności musimy starać się promować Linuksa w sposób przynoszący korzyści zarówno jemu, jak i jego autorom, programistom i użytkownikom. Linux-Advocacy mini-HOWTO dostępne (również po polsku) w ramach Linux Documentation Project zawiera na ten temat kilka rozsądnych rad. Podsumowując: promowanie Linuksa jest ważną częścią misji lokalnego LUG-a.
Być może nadejdzie dzień, w którym promowanie Linuksa zacznie mijać się z celem, gdyż system ten osiągnie zasłużoną sobie pozycję i możliwość używania go zostanie powszechnie zakceptowana. Dopóki to jednak nie nastąpi, w promocji tej LUG-i odgrywają niezastąpioną rolę. Odgrywają ją dobrze, gdyż ich działalność promocyjna jest darmowa, służy dobrej sprawie, i poparta jest szczerym zapałem. Osoba dowiadująca się o istnieniu Linuksa dzięki działaniom lokalnego LUG-a jest jako nowy użytkownik na korzystnej pozycji wyjściowej: wie o istnienu organizacji gotowej pomóc mu/jej w instalacji, konfiguracji i nawet konkretnej pracy z Linuksem na dowolnych koputerach, które do tego przeznaczy.
Nowi użytkownicy będący w kontakcie z lokalnym LUG-iem mają poważną przewagę nad ludźmi, który dowiedzieli się o Linuksie z gazet, ale nie znają nikogo, kto mógłby im pomóc w instalacji, konfiguracji i nauce tego systemu.
Dlatego tak istotne jest propagowanie Linuksa właśnie przez LUG-i, których działalność jest efektywna i dobrowolna.
Propagowanie Linuksa nie jest jedynym celem lokalnych LUG-ów. Grupy te mogą również skupić się na praktycznym i teoretycznym nauczaniu Linuksa oraz oferowaniu pomocy we wszelaki sposób związanej z komputerami społeczności lokalnej. Według mojej oceny to właśnie nauczanie jest najważniejszym z celów, na którym może skoncentrować się lokalny LUG. Oczywiście, jak już powiedziałem, LUG-i same decydują o swojej organizacji i priorytetach. Wierzę jednak, że nauczanie praktyki i teorii Linuksa przynosi społeczności Linuksa najwięcej korzyści.
Lokalne LUG-i mogą skupić się na edukowaniu swoich członków chociażby dlatego, że nie istnieje żadna inna lokalna organizacja czy instytucja taką naukę oferująca. Prawdą jest, że coraz więcej uniwersytetów i wszelkiego rodzaju szkół zaczyna, dzięki efektywności i niskim kosztom tej metody, używać Linuksa w procesie nauczania o Unixowych systemach operacyjnych. Niestety, część użytkowników nie może lub z różnych powodów nie chce zapoznawać się z Linuxem chodząc na kursy. Dla takich właśnie użytkowników istnienie LUG-ów jest cenną pomocą w procesie zdobywania i poszerzania bardziej zaawansowanych umiejętności: administracji systemów Unixowych, programowania, tworzenia i obsługi technologii Inter- i intranetowych, itd.
Mało oczywistym jest fakt, że lokalne LUG-i często pośrednio ułatwiają dużym korporacjom organizację i przeprowadzanie szkoleń pracowników. Każdy z pracowników korporacji X poszerzający swoją wiedzę i nabierający dzięki uczestnictwu w życiu lokalnego LUG-a nowych umiejętności zmniejsza o jeden ilość pracowników, dla których X musi zorganizować (lub zapłacić za) odpowiednie kursy. Nawet jeśli używanie i administrowanie domowym Linuksem nie może równać się zarządzaniu korporacyjnym systemem komputerowym, centrum telekomunikacyjnym, czy podobnie zaawansowanym zadaniom, jest to o niebo bardziej skomplikowane, kształcące i ciekawsze wyzwanie niż praca z Windows 95. Ponieważ Linux zaczyna wspierać system plików z kroniką (JFS), operacje wykonywane w czasie rzeczywistym, podwyższoną niezawodność i dostępność (High Availability) i inne cechy znane z zaawansowanych Uniksów, już teraz trudna do określenia różnica międzi Linuksem a ,,prawdziwymi'' Uniksami staje się coraz mniejsza.
Takie nauczanie jest nie tylko formą szkolenia pracowników. Technologie informatyczne stają się coraz istotniejsze w globalnej ekonomii, nauczanie więc o nich jest też służbą społeczeństwu. W większości amerykańskich aglomeracji lokalne LUG-i wprowadzać mogą Linuksa do szkół, małych firm, socjalnych i społecznych organizacji oraz innych niekorporacyjnych środowisk. Jest to aktywna promocja Linuksa -- jako, że wiele z wyżej wymienionych podmiotów planuje prędzej czy później zaznaczyć swoją obecność w Internecie lub umożliwić doń dostęp swoim uczniom/studentom/pracownikom, LUG-i mają tu wymarzoną wręcz okazję do rozpowszechniania wiedzy o darmowym i wolnodostępnym systemie operacyjnym. Ten rodzaj społecznej działalności umożliwia przeciętnemu użytkownikowi Linuksa wykazanie ,,dobroczynności'' od samego początku charakteryzującej Linuksa i całą społeczność oprogramowania wolnodostępnego. Większość użytkowników nie ma umiejętności programistycznych Linusa Torvaldsa, wszyscy jednak możemy poświęcić trochę naszego czasu i umiejętności innym użytkownikom Linuksa, jego społeczności, i -- szerzej -- społeczności w której pracujemy i żyjemy.
Linux w naturalny sposób wpasowuje się w profil w/w organizacji, ponieważ stosowanie go nie wymaga wyokich licencyjnych, aktualizacyjnych, ani bieżących opłat. Linux jest również niezwykle elegncki i oszczędny -- swobodnie działa na wszelkiego rodzaju ,,przestarzałym'' sprzęcie, który korporacje zazwyczaj wyrzucają na śmietnik, a który organizacje nie nastawione na zysk z radością mogą wykorzystać. Coraz więcej osób odkrywa, że kurzący się w szafie stary 486 może wykonywać realną pracę, jeśli tylko zainstaluje się na nim Linuksa.
Nauczanie Linuksa ma pozytywny wpływ na pozostałe cele LUG-a, szczególnie na omówione poniżej zadanie udzielania pomocy. Lepsza znajomość Linuksa oznacza więcej możliwości udzielania wsparcia. Im więcej osób, na które LUG może liczyć w udzielaniu wsparcia technicznego, tym łatwiejsze owo udzielanie, a co za tym idzie -- łatwiej dostępna pomoc. Im więcej nowych niedoświadczonych użytkowników uzyska pomoc i wiedzę z LUG-a, tym większa i efektywniejsza staje się grupa. Innymi słowy, jeśli LUG skoncentruje się głównie na pomocy zapominając o szkoleniu, wzrosną naturalne bariery rozwoju grupy. Jeśli tylko dwa lub trzy procent członków weźmie na siebie zadanie udzielania wsparcia innym, rozwój grupy zostanie zahamowany. Jedno jest pewne: nowy i niedoświadczony użytkownik nie zostanie na długo członkiem LUG-a jeśli nie uzyska od niego spodziewanej pomocy. Jeśli większy procent członków LUG-a zajmie się pomocą mniej zaawansowanym osobom, grupa powiększy się o wiele bardziej. Nauczanie o Linuksie jest kluczem do jego dynamicznego rozwoju: przekształca ono nowych użytkowników w użytkowników doświadczonych.
Darmowość nauczania o Linuksie podkreśla fakt, iż Linux jest częścią społeczności oprogramowania wolnodostępnego. Wydaje się więc stosowne koncentrowanie się nie tylko na rozpowszechnianiu wiedzy o Linuksie, ale również o wszelkich systemach, oprogramowaniu i technologiach pod nim działających. Należą do nich narzędzia i programy na licencji GNU, serwer WWW Apache, XFree86 -- darmowa wersja systemu X-Window, TeX, LaTeX, itd. Szczęśliwie lista darmowego oprogramowania pod Linuksa jest bardzo długa i różnorodna.
Zaznaczyć należy, że Linux jest systemem samo-dokumentującym się.
Innymi słowy: jeśli sami nie stworzymy dokumentacji, nikt tego za nas
nie zrobi. Dlatego upewnić się należy, że wszyscy użytkownicy Linuksa
znają zasoby
Linux Documentation Project,
dostępne również w licznych kopiach. Zastanów się, czy masz możliwość
stworzenia na swoim serwerze kopii LDP dla lokalnej społeczności Linuksa i
członków LUG-a. Pamiętaj również o ogłaszaniu i publikacji (na przykład
przez
comp.os.linux.announce, wyżej wspomniany adres, czy inne
powszechnie dostępne źródła informacji o Linuksie) wszelkiego rodzaju
dokumentacji stworzonej przez LUG: prezentacji technicznych,
podręczników, zbiorów FAQ (odpowiedzi na najczęściej zadawane pytania),
itd. Istnieje bowiem duża ilość stworzonych przez LUG-i wartościowych
materiałów, z których światowa społeczność użytkowników nie może
skorzystać po prostu dlatego, że materiały owe nie opuściły wcale
macierzystego LUG-a. Nie marnujmy w ten sposób swojej pracy i
osiągnięć; jest bardzo prawdopodobnie, że ludzie z innych grup
borykają się z problemem, który my już rozwiązaliśmy i opisaliśmy.
Dla zdesperowanego nowicjusza najważniejszą rolą lokalnego LUG-a jest naturalnie pomoc. Błędem byłoby jednak założenie, że ,,pomoc'' oznacza tu tylko wspomaganie nowicjuszy. ,,Pomoc'' może, i powinna, oznaczać znacznie więcej.
Lokalne LUG-i mogą oferować swoją szeroko rozumianą pomoc
Nowi użytkownicy świeżo po instalacji pierwszego Linuksa najczęściej żalą się na stromą krzywą nauki, nie tyle zresztą typową dla Linuksa, ile generalnie współczesnych Uniksów. Krzywa ta jednak uzasadniona jest potęgą, możliwościami i elastycznością tego systemu operacyjnego. LUG jest często jedynym źródłem pomocy w pokonywaniu i łagodzeniu tej krzywej.
Jednak nawet jeśli świeżo upieczony użytkownik Linuksa jeszcze tego nie wie, potrzebuje on czegoś więcej niż tylko wsparcia technicznego. Linux i świat oprogramowania wolnodostępnego są gwałtownie rozwijającymi się rynkami; lokalne LUG-i mogą być bezcennym źródłem informacji na te tematy. Prawdą jest, że rozwojem Linuksa nie steruje centralna struktura. Oznacza to jednak, że nie posiada on żadnego rodzaju stałego zaplecza prasowego, tak pomocnego użytkownikom innych systemów. Owszem, istnieją zasoby takie, jak Linux Journal, czy Linux Gazette. Niestety, wielu nowych użytkowników nie ma pojęcia o ich istnieniu. Na domiar złego są to miesięczniki, informacje o łatach, problemach z bezpieczeństwem, poprawkach, nowych jądrach, itp są więc często po prostu przedawnione. Informacjami aktualnymi -- równie istotnymi dla nowych, jak i doświadczonych użytkowników -- powinny więc służyć lokalne LUG-i.
Na przykład dopóki nowy użytkownik Linuksa nie dowie się, że najnowsze wersje jądra znajdują się pod adresem ftp.kernel.org, lub, że na serwerze Linux Documentation Project zazwyczaj znadują się nowsze niż na CD wersje dokumentów HOWTO, LUG posłużyć musi jako główne źródło informacji i pomocy, poinformować zainteresowanych o owych zasobach i ułatwić im korzystanie z nich.
Jednak skupianie się LUG-ów wyłącznie na pomocy udzielanej nowym
użytkownikom jest lekkim nieporozumieniem. Również bowiem średnio i
mocno zaawansowani użytkownicy skorzystają z dostępu do bogatego źródła
informacji o użytecznych sztuczkach i sekretach Linuksa. Jest to
system tak rozbudowany, że nawet osoby o dużej wiedzy często poznać
mogą nowe techniki i sposoby jego wykorzystania. Po przyłączeniu się do
grupy nawet one mogą dowiedzieć się o istnieniu ciekawych pakietów, czy
też przypomnieć sobie zapomnianą od czasów studiów karkołomną sekwencję
poleceń vi.
Truizmem jest stwierdzenie, że LUG-i powinny być źródłem pomocy dla nowych użytkowników, któż bowiem inny może im ową pomocą służyć? Mniejszą jednak oczywistością jest fakt, że LUG-i mogą odgrywać istotną rolę we wspieraniu osób pracujących jako konsultanci (tj. oferujących instalację i administrację Linuksa, itd). Niezależnie od tego, czy pracują oni na pół etatu, czy na pełny etat, mogą być istotną częścią lokalnego LUG-a. Jaką pomoc może im LUG oferować?
Odpowiedź na powyższe pytanie jest jednocześnie odpowiedzią na pytanie następujące: czego chcą i czego potrzebują konsultanci? Potrzebują rynku: zapotrzebowania na konsultacje. Lokalny LUG pośredniczyć może między osobami oferującymi konsultacje a podmiotami tych konsultacji potrzebującymi. LUG może nieformalnie sprzyjać tworzeniu takich kontaktów poprzez gromadzenie w jednym miejscu wszystkich (lub ilu się tylko da) osób w regionie zainteresowanych Linuksem i inicjowanie dialogu. Konkretne sposoby omówimy poniżej, w tym miejscu wspominamy tylko kolejne zadanie, którym LUG-i mogą i powinny się zajmować. Linux-Consultants-HOWTO (zawierające także polskie kontakty -- przyp. tłum.) jest tu niezwykle pomocnym dokumentem, oczywistym jest jednak, że wymieniona jest w nim jedynie część pracujących na cały lub pół etatu konsultatów.
Związek ten jest obopólnie korzystny. Konsultanci wzbogacają LUG-i o swoje doświadczenie, zarówno organizacyjne, jak i merytoryczne, natomiast LUG-i ułatwiają konsultantom kontakt z klientami potrzebującymi ich usług. Nowi i niedoświadczeni użytkownicy zyskują na kontaktach z LUG-iem, który udzieli darmowej pomocy w typowych i prostych przypadkach, a w bardziej skomplikowanych, w oczywisty sposób wymagających zatrudnienia konsultanta, sytuacjach ułatwi z takim specjalistą kontakt.
Granica między zapotrzebowaniem na pomoc, której może udzielić konsultant, a pomoc, którą może zapewnić LUG, choć bywa niewyraźna, w większości przypadków jest oczywista. Naturalnie niepożądana jest sytuacja, w której LUG zyskuje złą opinię z powodu wmuszania potrzebującym konsultantów -- takie zachowanie byłoby po prostu nieuprzejme i źle świadczące o użytkownikach Linuksa -- nie ma jednak nic złego w ułatwianiu kontaktów między podmiotami potrzebującymi pomocy profesjonalnej i osobami takiej pomocy udzielającymi.
Międzynarodowa lista konsultantów znajduje się w napisanym przez Martina Michlmayr-a Linux Consultants HOWTO.
LUG-i mogą również służyć pomocą lokalnym firmom i organizacjom. Pomoc taka przejawiać się może dwojako. Po pierwsze, LUG-i mogą wspierać organizacje chcące w swojej działalności korzystać z Linuksa. Pod drugie, LUG oferować może pomoc lokalnym firmom i organizacjom tworzącym oprogramowanie/sprzęt pod Linuksa, instalującym, lub w inny sposób wspieracjącym ten system.
Rodzaj pomocy oferowanej firmom chcącym używać Linuksa nie różni się w istocie wiele od wsparcia udzielanego osobom korzystającym z Linuksa w domu. Na przykład kompilowanie jądra nie przebiega w inny sposób w domu i w firmie. Współpraca z firmami może oznaczać jednak konieczność zaangażowania się również w prace nad oprogramowaniem komercyjnym. Jeśli Linux nadal rozwijał się będzie w dotychczasowym tempie pewne jest zainteresowanie się twórców oprogramowania możliwością przeniesienia lub napisania swoich programów pod ten -- interesujący już komercyjnie -- system. Jeśli LUG-i będą w stanie odnieść sukces w przekonaniu przedsiębiorstw do komercjalnego wykorzystania Linuksa, zainteresowanych firm będzie coraz więcej.
Powyższe wiąże się bezpośrednio z kolejnym związkiem LUG-ów z lokalnymi firmami. LUG-i mogą i powinny dostarczać w zasadzie nigdzie indziej niedostępnych informacji takich jak:
Gromadzenie i upublicznianie tych informacji nie tylko jest pomocne członkom LUG-ów, korzystają na tym również wspomniane firmy. Dzięki stworzeniu wokół nich przyjaznej atmosfery powstać może sytuacja, w której inne przedsiębiortwa, nie chcąc pozostać w tyle, zainteresują się Linuksem.
LUG-i mogą również wspierać rozwój idei Linuksa poprzez inicjowanie i organizowanie sponsoringu. Poniżej zapoznać się możesz z opinią Chrisa Browne na ten temat.
Głębsze zaangażowanie przejawiać się może w zachęcaniu do finansowego wspierania rozmaitych związanych z Linuksem organizacji. Całkiem rozsądnym wydaje się pomysł finansowego wspierania idei przez użytkowników Linuksa. Według znajdującego się pod adresem spisu użytkowników tych są miliony, a całkiem rozsądna cena ,,wdzięczności'' -- sto dolarów od osoby (kwota równa zresztą sumie pieniędzy wydanych w tym roku na aktualizację systemu Microsoftu) mogłaby złożyć się na miliony dolarów przeznaczone na rozwój i ulepszanie narzędzi oraz aplikacji linuksowych.
LUG zachęcać może swoich członków do finansowego wsparcia rozmaitych projektow związanych z rozwojem oprogramowania. Jeśli istnieje możliwość odpisania sobie takiej darowizny od podatku, zachęcać można członków do kierowania pieniędzy prosto do kasy grupy, skąd przekazane one będą dalej odpowiednim organizacjom.
Jest w każdym razie na miejscu zachęcanie członków LUG-a do składania bezpośrednich darowizn na rzecz organizacji pracujących nad projektami, które chcą oni popierać.
W bieżącym rozdziale podam konkretne propozycje organizacji, nad których wsparciem warto się zastanowić. Żadna z nich nie jest tu wyraźnie i wprost polecana, jest to lista, która ma sprowokować do zastanowienia się. Wiele z nich jest w Stanach Zjednoczonych zarejestrowanych jako organizacje dobroczynne, datki na ich rzecz można więc odliczyć sobie od podatku.
Oto lista organizacji bezpośrednio zaanngażowanych w prace nad oprogramowaniem dla Linuksa:
Datkowanie tych organizacji jest w istocie bezpośrednim wspieraniem procesu tworzenia wolnodostępnego oprogramowania pracującego pod Linuksem. Ziarnko do ziarnka, a zebrana miarka będzie z pewnościa miała większy wpływ na rozwój Linuksa niż jakakolwiek inna forma wsparcia.
Istnieją też organizacje w mniej bezpośredni sposób związane z Linuksem, również jednak warte chwili zastanowienia. Są to:
TeX Users Group (TUG) pracuje nad nową wersją systemu do składu publikacji LaTeX -- LaTeX3. Linux jest platformą idealnie nadającą się do pracy z TeX-em oraz LaTeX-em.
Wpłaty na rzecz projektu kierować należy na adres:
TeX Users Group
P.O. Box 1239
Three Rivers, CA 93271-1239
USA
lub, w Europie:
UK TUG
1 Eymore Close
Selly Oaks
Burmingham B29 4LB
UK
W dokumencie tym używam wyrażenia społeczność Linuksa. Nie istnieje chyba lepsze określenie na międzynarodowe zjawisko, jakim jest rozwój Linuksa i jego użytkownicy. Jest to ruch zorganizowany bez biurokracji, nie jest to korporacja, a liczą się z nim korporacje na całym świecie. Najlepszym sposobem wspierania Linuksa jako międzynarodowego zjawiska jest utrzymywanie tej społeczności silnej, aktywnej i rosnącej. Linux jest rozwijany międzynarodowo -- wystarczy zajrzeć do pliku /usr/src/linux/MAINTAINERS, by się o tym przekonać. Linux jest również _używany_ na całym świecie. Ta stale rosnąca rzesza użytkowników jest kluczem do sukcesu tego systemu. I tu również LUG-i odgrywają istotną rolę.
Międzynarodowa siła przebicia Linuksa spowodowana jest przede wszystkim jego nieznaną dotychczas za swoją cenę i przy swojej dostępności mocą obliczeniową i wyrafinowaniem. Kluczem jest tu wartość systemu i jego niezależność od nadzoru własnościowego. Każda nowa osoba, grupa, czy organizacja mająca okazję zapoznać się z rzeczywistymi możliwościami tego systemu oznacza wzmocnienie i rozwój społeczności Linuksa. Lokalne LUG-i mogą zwiększać ilość takich osób.
Ostatnim z omawianych przeze mnie celów istnienia Grup Użytkowników Linuksa jest cel towarzyski. W pewnym sensie jest to punkt najtrudniejszy do opisania, nie wiadomo bowiem do jakiego stopnia i ile LUG-ów uważa go za istotny. Dziwna byłaby grupa nie zainteresowana realizacją pozostałych celów, bez trudu jednak można wyobrazić sobie LUG-a nie przywiązującego zbytniej wagi do towarzyskich aspektów swojego istnienia.
W każdym razie jakoś tak się składa, że zawsze kiedy spotyka się dwóch czy trzech ,,linuksiarzy'' zaczyna się robić wesoło, i często kończy się to wysyłaniem kogoś po piwo. Sam Linus Torvalds określa jeden z celów istnienia Linuksa jako ,,dla zabawy''. Dla hakerów, programistów, czy zwykłych użytkowników nie ma nic ciekawszego niż ściąganie nowej wersji jądra, ponowna kompilacja starego, obgadywanie nowego windows managera, czy tworzenie kodu. To właśnie tak rozumiana zabawa konsoliduje grupę i prowadzi w naturalny sposób do zawierania przyjaźni.
Przez słowo ,,socjalizacja'' rozumiemy głównie dzielenie doświadczeń, zawieranie znajomości, wzajemne uznanie i szacunek. Istnieje jednak również naukowe znaczenie tego słowa. Jak wyjaśniają specjaliści, w każdym ruchu, instytucji, czy społeczności ludzkiej istnieje tendencja do przemiany newbies w hakerów (jeśli użyjemy terminów z naszego podwórka). Innymi słowy, socjalizacja oznacza przemianę z ,,jednego z nich'' w ,,jednego z nas''.
Proces ten znamy na przykład z wojska lub szkoły, gdzie ,,koty'' stają się pełnoprawnymi członkami grupy. Sytuacja w społeczności Linuksa jest analogiczna -- nowi użytkownicy muszą nauczyć się, co oznacza ,,używać Linuksa'', czego oczekuje się od nich, jako członków międzynarodowej społeczności. ,,Nowi'' muszą poznać specjalne słownictwo, wymagania i szanse dawane przez przynależność do grupy. Może to być taki drobiazg, jak poprawna wymowa słowa ,,Linux'', mogą to być równie dobrze sposoby korzystnego promowania Linuksa, i -- co nawet ważniejsze -- sposoby, których nie należy stosować.
Proces socjalizacji poprzez Linuksa, w odróżnieniu od tego z ,,prawdziwego świata'' może też przebiegać przez listy i grupy dyskusyjne. Skuteczność jednak takiego procesu ciągle podważają przykłady mało towarzyskich użytkowników. Wydaje się, że najlepiej poznawać ludzi z krwi i kości, a przyjaźnie zawierać z żywymi osobami, a nie bezcielesnymi szeregami literek na newsach.
W rozdziale poprzednim skupiłem się wyłącznie na omawianiu tego, czym powinny się LUG-i zajmować. Teraz przejdźmy do praktycznych sposobów osiągnięcia wymienionych wyżej celów.
Działalność LUG-a przejawia się na dwa podstawowe sposoby: po pierwsze, ludzie spotykają się, po drugie, komunikują się w sieci. Jedno przeplata się z drugim, generalnie jednak życie LUG-a to spotkania i zasoby sieciowe.
Jak już wspomniałem spotkania są istotą LUG-ów, jak zresztą i innych grup użytkowników. LUG może organizować następujące rodzaje spotkań:
Czym zajmują się LUG-i podczas owych spotkań?
Komercyjny rozwój Internetu chronologicznie pokrywa się mniej więcej z powstaniem Linuksa i ma w jego powstaniu i późniejszym rozwoju swój pokaźny udział. Nie inaczej jest w przypadku LUG-ów. Większość z nich ma swoją stronę lub strony w Internecie. W zasadzie przeszukanie sieci jest chyba jedynym sposobem zlokalizowania najbliższego LUG-a.
Świat komercyjny odkrywa, że użycie Internetu jest skuteczną formą reklamy, informowania, nauczania, a nawet sprzedaży. I LUG-i powinny więc używać wszelkich dostępnych im technologii internetowych: WWW, list i grup dyskusyjnych, FTP, e-maila, WAIS-a i fingera. Drugim powodem do szerokiego wykorzystywania usług Internetu jest fakt, że istotą Linuksa jest zapewnienie stabilnej i bogatej w możliwości platformy, na której owe usługi można uruchamiać. Ogłoszenie istnienia i organizacja działań danego LUG-a nie jest więc jedyną korzyścią z pojawienie się w Internecie. Wykorzystanie tych technologii daje bowiem członkom grupy okazję do nauki uruchamiania tego typu usług internetowych na Linuksie i obserwacji systemu w działaniu.
Oto kilka przykładowych LUG-ów efektywnie wykorzystujących Internet:
Poinformuj mnie, jeśli Twój LUG wykorzystuje Internet w interesujący sposób, dołączę wtedy adres waszych stron do powyższego spisu.
Na zakończenie podam kilka bardzo praktycznych, wręcz przyziemnych porad dla chcących założyć, prowadzić, lub rozbudować LUG.
Istnieje szereg organizacji udzielających wsparcia Linuksowi:
Groups of Linux Users Everywhere jest zainicjowanym przez SSC (ludzi wydających Linux Journal) programem koordynującym i wspierającym LUG-i. Program GLUE jest niezbyt kosztownym sposobem poszerzenia zasobów Twojego LUG-a.
LSL bardzo tanio oferuje LUG-om do dalszej dystrybucji swój Tri-Linux Disk set (trzy dystrybucje Linuksa na czterech kompaktach -- Red Hat, Slackware, Debian).
Sponsorowany przez WorkGroup Solutions Linux Mall User Group Program oferuje należącym doń LUG-om szereg korzyści. LUG-i mogą również uczestniczyć w Linux Mall's Referral Program.
jest właścicielem domeny internetowej lug.net. Dadzą
Twojemu LUG-ow domenę w lug.net:
miasto-LUG-a.lug.net. Więcej informacji na ten temat
znajdziesz pod adresem
LUG.NET, lub pocztą
elektroniczną:
Jeff Garvas.
Wspomaga rowój LUG-ów. Więcej informacji pod adresem Red Hat Web site
comp.os.linux.announce i odpowiednich grupach lokalnych
Wiele wskazuje na to, że powinieneś zastanowić się nad formalną rejestracją swojego LUG-a. Nie będę przytaczał tu argumentów, jeśli jednak planujesz nadanie LUG-owi osobowości prawnej, rozdział ten wprowadzi Cię w część zagadnienia.
Uwaga: nie traktuj treści tego rozdziału jako profesjonalnych porad prawnych. Omawiane tu problemy wymagają fachowej opinii, dlatego też przed podjęciem jakiegokolwiek działania powinieneś skonsultować się z prawnikiem.
Zgodnie z prawem Stanów Zjednoczonych status zlokalizowanych na ich terenie LUG-ów może przybrać jedną z co najmniej dwóch form:
Chociaż wymienione rodzaje statusu prawnego niekoniecznie oznaczają to samo we wszystkich stanach, prawo większości stanów zezwala na rejestrowanie LUG-ów jako organizacji typu non-profit. Zyskami płynącymi z takiej rejestracji mogą być m. in. ograniczenie odpowiedzialności członków i współpracowników grupy, a także zmniejszenie podatków lub nawet zwolnienie z koniecznosci ich płacenia.
Przed zarejestrowaniem LUG-a jako organizacji non-profit powinieneś oczywiście zasięgnąć kompetentnej porady prawnej. Z pewnością zaoszczędzisz na kosztach owej porady, jeśli przed zasięgnięciem jej zapoznasz się z zagadnieniem; polecam tu publikację Non-Lawyers Non-Profit Corporation Kit (ISBN 0-937434-35-3).
Drugi z wymienionych rodzajów statusu, zwolnienie od podatku, jest tak naprawdę nie tyle statusem prawnym, ile decyzją IRS (amerykańskiego Biura Podatkowego). Pamiętaj, że zarejestrowanie organizacji jako nie przynoszącej zysków nie oznacza automatycznie zwolnienia od podatków! Niektóre organizacje typu non-profit muszą płacić podatki.
IRS wydał względnie prosty dokument omawiający kryteria i sam proces zwalniania od podatku. Jest to Publication 557: Tax-Exempt Status for Your Organization (,,Zwolnienie Twojej organizacji od podatku''). Dokument ten, w formacie Adobe Acrobat, dostępny jest na stronie IRS. Zdecydowanie polecam zapoznanie się z jego treścią przed wypełnieniem wniosku o rejestrację LUG-a jako organizacji typu non-profit. Zarejestrowanie grupy jako organizacji typu non-profit nie zapewnia automatycznie zwolnienia jej przez IRS od podatku, a niektóre rodzaje rejestracji mogą wręcz uniemożliwić takie zwolnienie. Wspomniany wyżej dokument (Tax-Exempt Status for Your Organization) jasno omawia warunki konieczne do uzyskania przez Twoją organizację zwolnienia od podatków.
W sieci znajduje się trochę wiadomości na temat organizacji typu non-profit i zwalniania od podatku. Część z nich zapewne ma zastowosowanie w przypadku lokalnych LUG-ów.
Podziękowania dla Chrisa Browne za następujące komentarze na temat sytuacji w Kanadzie:
Kanadyjski system podatkowy bardzo przypomina system amerykański w tym, że status organizacji ,,dobroczynnej'' oznacza dla dawców większe ulgi podatkowe niż status non-profit; podobnie otrzymanie i utrzymanie statusu organizacji dobroczynnej wymaga dodatkowej roboty papierkowej przy stałych kontaktach z władzami podatkowymi.
Chris Browne w następujący sposób komentuje zagadnienia polityczne mogące budzić emocje w grupie:
Użytkownicy Linuksa są różni. Gdy kilku z nich zbierze się w jednym miejscu, mogą rozgorzeć pewne dyskusje. Politycznie radykalni użytkownicy wierzą, że każdy rodzaj oprogramowania powinien ,,zawsze'' być darmowy. Caldera życzy sobie całkiem sporej sumy za swoją dystrybucję i nie przekazuje wszystkich zysków do (tu wstaw swoją ulubioną organizację promocyjną) -- dlatego sądzą oni, że Caldera to ,,zło''. Podobnie Red Hat i S.u.S.E. Pamiętać jednak warto, że wszystkie trzy organizacje mocno już zasłużyły się, i nadal aktywnie działają na rzecz idei wolnodostępnego oprogramowania.
Inni zastanawiać się mogą nad sposobami na dogłębne wykorzystanie darmowości Linuksa dla zabawy lub zysków. Na przykład wielu użytkowników systemów BSD uważa, że ich licencje, pozwalające na tworzenie własnych wersji ich OS-ów są lepsze niż ,,zmuszająca do darmowości'' licencja GPL, z której korzysta Linux. Nie zakładaj automatycznie, że osoby wyrażające takie opinie muszą być chciwcami.
Kiedy osoby o takich poglądach spotkają się, łatwo o nieporozumienia. W podobnych sytuacjach osoba przewodząca grupie powinna zwrócić uwagę, że:
Takie różnice zdań nie ograniczają się zresztą tylko do tego konkretnego problemu, toczenie przeróżnych ,,świętych wojen'' komputerowych nie jest bowiem niczym nowym. Dziś jest to opozycja Linux -- inne systemy Unixowe, czy systemy operacyjne Microsoftu, IBM PC -- komputery oparte na Motoroli 68000, KDE -- GNOME. Kiedyś walczyli ze sobą zwolennicy różych typów ośmiobitowców.
Osoba przewodząca LUG-owi powinna starać się łagodzić takie postawy i w żadnym wypadku nie dolewać oliwy do ognia; dlatego przywódcy grupy powinny być silnymi osobowościami.
Przy tak wielu sprzecznych poglądach nieporozumień nie da się uniknąć. Osoby przewodzące grupie muszą umieć radzić sobie z podobnymi sytuacjami i łagodzić konflikty, a nie je zaogniać.
Zajmowanie się finansami organizacji typu non-profit zawsze wymaga dużej ostrożności.
W przypadku podmiotów, których celem jest zarabianie pieniędzy, ,,niepowodzenia'' takie jak np. niewłaściwe zużytkowanie niewielkiej sumy nie spędzają zazwyczaj ludziom snu z powiek. Sytuacja w organizacjach nie nastawionych na zysk jest odmienna. Część osób jest w nie zaangażowana dla idei i w ich oczach każdy niewielki problem może urosnąć do nieadekwatnie dużych rozmiarów. Możliwość powszechnego uczestnictwa w naradach finansowych dodatkowo zwiększa niebezpieczeństwo skupienia nadmiernej uwagi na sprawach ekonomicznych.
Płynie z tego wniosek, że najlepiej chyba zrezygnować w ogóle ze składek członkowskich, członkowie LUG-u bowiem, co zrozumiałe, będą chcieli wiedzieć, czy zebrane pieniądze są rozsądnie wydawane. A pieniędzy, które nie istnieją, zmarnować nie można.
Jeśli jednak grupa dysponuje dużymi środkami pieniężnymi lub innymi, osoby odpowiedzialne za gospodarowanie nimi powinny w każdej chwili móc się z nich rozliczyć przed członkami grupy.
Nad sprawami finansowymi aktywnej, rozwijającej się grupy pieczę powinna sprawować więcej niż jedna osoba. Niezdrowa jest sytuacja, w której zajmujący się finansami kurczowo trzyma się stanowiska, i nie chce oddać kontroli nad ekonomią. W sytuacji idealnej wszystkie oficjalne stanowiska we władzach LUG-u, włączając w to skarbnika, podlegają rotacji.
Wszyscy zainteresowani powinni mieć możliwość regularnego zapoznawania się ze zrozumiale napisanymi raportami finansowymi. LUG-i, które ze względów podatkowych utrzymują oficjalny status ,,organizacji dobroczynnych'', co najmniej raz do roku muszą przedstawić takie raporty lokalnym urzędom podatkowym. Raporty te służyć również mogą zainteresowanym finansami grupy członkom.
W wraz z rozwojem działającego pod Linuksem oprogramowania do księgowości tworzenie regularnych raportów finansowych staje się coraz łatwiejsze, a ekspansja Internetu umożliwia nawet ich publikację na WWW.
Prawa autorskie:
Copyright (c) 1997 by Kendall Grant Clark.
Zezwala się na rozpowszechnianie niniejszego dokumentu na warunkach określonych w licencji LDP, dostępnej pod adresem http://sunsite.unc.edu/LDP/COPYRIGHT.html.
Nowe wersje JTZ o Grupach Użytkowników Linuksa będą od czasu do czasu umieszczanie na odpowiednich serwerach WWW i FTP, przede wszystkim na mojej stronie oraz stronie Linux Documentation Project.
Z radością powitam pytania i komentarze dotyczące ninejszego dokumentu. Proszę przysyłać je (w jęz. angielskim) pod adresem kclark@cmpu.net. Szczególnie interesują mnie opinie osób prowadzących LUG-i na całym świecie. Chciałbym móc przytoczyć z życia wzięte przykłady realizacji opisanych tu zagadnień. Chciałbym również dołączyć rozdział na temat LUG-ów spoza Stanów Zjednoczonych, w tej chwili bowiem dokument ten skupia się głównie na problemach grup amerykańskich. Proszę również o informację, jeśli Twoja grupa zajmuje się nie wspomnianą tu działalnością.
Wersja
Chciałbym tu podziękować wszystkim wspaniałym ludziom, których poznałem i z którymi pracowałem podczas zajmowania stanowiska Przewodniczącego Grupy Użytkowników Linuksa w Półn. Teksasie. Dzięki nim całkowicie przeniosłem się na Linuksa. Najlepszą rzeczą w Linuksie są ludzie, których się dzięki mu poznaje!
Specjalne podziękowania kieruję do Chrisa Browne za opis sytuacji kanadyjskich ogranizacji dobroczynnych i non-profit, wypowiedź o finansowych datkach jako sposobie wspierania rozwoju Linuksa i oprogramowania wolnodostęnego, oraz refleksji n/t zagadnień politycznych mogących być przedmiotem dyskusji w LUG-ach.
Następującym osobom dziękuję za komentarze i sugestie:
Copyright for the translation (c) 1999 by Tomasz 'tsca' Sienicki (tsca@edb.dk)
Strona WWW Polskiej Grupy Użytkowników Linuksa: PLUG
Tłumaczenia innych dokumentów HOWTO: JTZ doc-linux-pl-2002.06.14.orig/html/Wacom-Tablet-HOWTO.pl.html 0100664 0001750 0001750 00000100644 07073204340 022016 0 ustar coven coven
Prawa autorskie należą do Stefana Runkela (c) 1999 Runkel@runkeledv.de
Dokument ten opisuje proces instalacji tabletów Wacoma pod systemem Linux.
Nieskrępowane używanie, rozpowszechnianie oraz reprodukowanie tego dokumentu
jest możliwe pod następującymi warunkami:
Tablety graficzne są obecnie niezbyt drogie i mogą być bardzo pomocne przy obróbce obrazów. Obok tego czego możemy dokonać przy użyciu myszy tablety cechuje dodatkowa funkcjonalność:
Dokument ten opisuje głównie produkty firmy Wacom. Powodem tego jest fakt posiadania przeze mnie trzech różnych urządzeń tego producenta oraz to, że są one bardzo popularne w Europie.
Niemniej jednak, sądzę że zaadaptowanie nakreślonej koncepcji do innych produktów nie powinno być rzeczą trudną.
Powodem napisania tego dokumentu było to, iż nigdzie w Sieci nie mogłem znaleźć niczego podobnego. Zamiast tego miałem bardzo dużo dokumentów opisujących temat tylko częściowo. Po ich przeczytaniu, wciąż pozostawały (i nadal pozostają) otwarte pytania, na które nie znałem odpowiedzi. Zmusiło mnie to do zadawania pytań wielu różnym ludziom.
Po tym wszystkim co zostało zrobione, nadal jestem przekonany, że dokument ten był tego wart.
Oryginał tego dokumentu znajduje się pod adresem: http://www.runkeledv.de/linux.htm
Mile widziane są wszelkie komentarze, poprawki oraz uzupełnienia. Skontaktować się można ze mną pod adresem:
Chciałbym podziękować wszystkim autorom wymienionym w sekcji Dalsze informacje/wykorzystane dokumenty oraz wszystkim osobom, które odpowiedziały na moje pytania pocztą elektroniczną. Ten dokument jest odzwierciedleniem ich pracy.
Ten rozdział mówi co jest potrzebne aby tablet zaczął działać
Na początek powinieneś zdobyć tablet. Ponieważ obsługa USB pod Linuksem jest wciąż w fazie rozwoju, a ADB najprawdopodobniej długo już nie pociągnie, powinien to być model wyposażony w port szeregowy (RS232)
Obsługiwane są następujące tablety Wacoma:
Pomimo, iż starsze tablety Wacoma z serii SD oraz HD nie są standardowo obsługiwane przez sterowniki XFree86, istnieje zmodyfikowany sterownik obsługujący zarówno te, jak i inne urządzenia (np. produkty OEM ze zintegrowanymi wyświetlaczami, takie jak IBM Thinkpad 360 PE oraz Toshiba T200). Wspomniany sterownik znajduje się pod adresem: http://hwr.nici.kun.nl/pen-computing/pen-computing-formats.html
Wiele programów bazuje na bibliotece gtk. Gtk posiada obsługę specyfikacji XInput dzięki czemu łatwo jest z niej skorzystać.
Wsparcie dla XInput zawieraja poniższe aplikacje:
xink można ściągnąć z serwera plików: ftp://kiwi.cs.berkeley.edu/pub/raph/xink.tar.gz
Demon gpm obsługuje całkiem sporą liczbę urządzeń wejściowych, w tym tablety. Jeżeli chciałbyś otrzymać listę obsługiwanych przez Twoją wersję gpm urządzeń wykonaj następujące polecenie:
gpm -t help
Pomimo tego, że nie znalazłem nic na ten temat w dokumentacji, wydaje mi się że zawarty w gpm-ie sterownik do Wacoma został napisany dla bardzo starych modeli UltraPad. Testowałem go z modelami PenPartner, Graphire oraz Intuos ale nie działał. Dopisałem obsługę Graphire dla gpm, aby jej użyć potrzebna jest przynajmniej wersja 1.18.1 programu gpm.
Jeżeli posiadasz starego ArtPada, spróbuj wykonać:
killall gpm ; gpm -t wacom -m /dev/ttyS0
powinno zadziałać.
Jeśli używasz modelu Graphire, polecenie powinno wyglądać następująco:
killall gpm ; gpm -t graphire -m /dev/ttyS0
Oczywiście, uzyskasz dostęp wyłącznie do funkcji ruchu i klawiszy, nacisk i pochylenie nie będą obsługiwane, gdyż tak naprawdę nie są to zbyt przydatne funkcje w aplikacjach tekstowych.
Jeżeli równocześnie korzystasz z gpm i XFree86 to możesz, choć nie musisz, popaść w kłopoty w związku z tym, że w tym samym czasie urządzenie zwykle może być używane tylko przez jeden program. Istnieją dwa rozwiązania tego problemu:
Minimalną wersją XFree powinna być 3.3.3.1. Jest to związane z rozszerzoną obsługą XInput, działaniem drugiego przełącznika oraz zlikwidowaniem efektu blokowania myszy.
Jeżeli musisz korzystać z wersji wcześniejszej, obsługa XInput powinna być dostępna od 3.1.2.d.
Obsługa XInput w XFree jest zwykle konfigurowana w pliku XF86Config. W większości wypadków plik XF86Config umieszczony jest w katalogu /etc lub /etc/x11. Pokażę teraz bardzo krótką sekcję konfiguracyną i wyjaśnię co może być zmienione i dlaczego jest to potrzebne.
Section "Module"
# sterownik urządzenia Wacom
Load "xf86Wacom.so"
EndSection
Section "Xinput"
# ustawienia dla rysika Wacoma
SubSection "WacomStylus" # typ urządzenia wejściowego
DeviceName "Pen1" # nazwa, wybierz dowolną
Port "/dev/ttyS0" # port szeregowy
Baudrate 9600 # użyteczne tylko dla Intuosa
Mode Absolute # mapuj obszar tableta na ekran
AlwaysCore # patrz opis
HistorySize 200 # rozmiar bufora dla ruchu
EndSubSection
EndSection
Obsługa XInput w XFree jest osiągana przez użycie modułów. Moduł sterownika urządzenia dla Wacoma nosi nazwę xf86Wacom.so. Jego wywołanie umieszczamy w sekcji "Module" pliku XF86Config tylko jeden raz.
Urządzeniem fizycznym może być:
PenPartner oraz Graphire rozpoznaja typ urządzenia ale nie potrafią ich rozróżnić. Dla przykładu, nie możesz użyć dwóch różnych rysików, skonfigurowanych powiedzmy, jeden na czerwono, drugi na niebiesko - wszystko co te urządzenia rozpoznają to: "Znalazłem czubek rysika na mojej powierzchni", lub "Znalazłem gumkę na mojej powierzchni", lub "znalazłem myszkę na mojej powierzchni".
XInput przypisuje urządzeniom ich rodzaj, które z kolei zostaną później opisane w pliku XF86Config w podsekcjach sekcji Xinput:
WacomStylus
czubek rysika lub rozpylaczaWacomErasor
gumka na rysiku lub rozplaczuWacomCursor
myszy takie jak mysz Graphire, kursor "z celownikiem", mysz 4d
Każdemu skonfigurowanemu urządzeniu musisz nadać unikalną nazwę. Nazwa ta będzie później używana w Twoim programie do komunikacji z tym urządzeniem. Wybór nazwy zależy od ciebie.
XInput chce wiedzieć do którego portu szeregowego podłączone jest nasze urządzenie. Pozwala mi to na używanie dwóch różnych tabletów w tym samym czasie, na przykład Graphire podłączonego do /dev/ttyS0 i PenPartnera podłączonego do /dev/ttyS01.
Dzięki ustawieniu poziomu DebugLevel możemy kontrolować poziom "gadatliwości" sterownika Wacoma do logów. Poziomy mogą przybierać wartości od 0 do 10. Jeżeli pominiemy to ustawienie przyjęta zostanie wartość domyślna DebugLevel równa 0, co odpowiada bardzo skąpemu logowaniu.
Przykład:
SubSection "WacomStylus" # rysik
DeviceName "PenRed" # nazwa, wybież dowolną
...
DebugLevel 10 # generuj bardzo dużo komunikatów
...
EndSubSection
Tablety Intuos są bardziej wydajne niż PenPartner i Graphire ponieważ potrafią rozróżnić wiele urządzeń tego samego rodzaju. Znaczy to tyle, że możemy już używać dwa rysiki, jeden skonfigurowany jako czerwony, drugi skonfigurowany jako niebieski. Jak widać rozróżnianie wyłącznie rodzajów urządzeń nie daje wystarczającej informacji do obsługi różnych rysików. Dlatego, każde urządzenie Intuosa, niech będzie to rysik, piórko, mysz lub cokolwiek, posiada numer seryjny, który możesz wyspecyfikować by umożliwić rozpoznanie konkretnego urządzenia przez XInput. Wygląda to następująco:
Section "Xinput"
SubSection "WacomStylus" # rysik
DeviceName "PenRed" # nazwa, wybierz dowolną
...
Serial 2609917443 # numer seryjny tego urządzenia
...
EndSubSection
SubSection "WacomStylus" # inny rysik
DeviceName "PenBlue" # nazwa, wybierz dowolną
...
Serial 2609918664 # numer seryjny tego urządzenia
...
EndSubSection
EndSection
Chciałbym zaznaczyć że złożone urządzenia wejściowe posiadają tylko jeden mumer seryjny. Sterownik używa otrzymany numer seryjny do rozpoznania specyficznego rysika, natomiast czubek rysika od gumki jest rozpoznawany na podstawie rodzaju urządzenia.
Powinieneś otrzymać listę z różniącymi się numerami.
BEGIN xf86WcmProc dev=0x8354d60 priv=0x833e3f0 type=stylus flags=9 what=1
xf86WcmProc pWcm=0x8354d60 what=ON
END xf86WcmProc Success what=1 dev=0x8354d60 priv=0x833e3f0
device_id=0x96 serial_num=2595227137 type=cursor
[cursor] abs prox=false x=0 y=0 z=0 button=false buttons=0
Jeżeli ustawisz tablet do pracy w trybie bezwzględnym, cała powierzchnia urządzenia będzie odpowiadała ekranowi komputera. Za każdym razem gdy opuścisz rysik na ten sam punkt tableta wskaźnik pojawi się w odpowiadającym mu tym samym punkcie ekranu.
Jeżeli ustawisz urządzenie do pracy w trybie względnym, uzyskasz dobrze Ci znane zachowanie myszy. Jeśli podniesiesz myszkę z powierzchni, przesuniesz ją i ponownie opuścisz, wskaźnik (idealnie) nie poruszy się.
Przykład:
Mode Absolute
XFree zna dwa rodzaje wskaźników: pierwszy, posiadający tylko podstawową funkcjonalność (klawisze, możliwość ruchu), wykorzystywany jest do wybierania pozycji menu, zaznaczania tekstu, naciskania guzików i tym podobnych rzeczy. Jest to urządzenie podstawowe Core.
Drugi rodzaj wskaźnika wykorzystują aplikacje potrzebujące dodatkowych
informacji, takich jak poziom nacisku czy nachylenia.
Urządzenie to nazywamy rozszerzonym - Extension.
Począwszy od wersji 3.3.3.1, ustawienie AlwaysCore mówi sterownikowi by powinien osługiwać obydwa rodzaje zdarzeń.
Jeżeli w pliku XF86Config nie zostanie wyspecyfikowane ustawienie AlwaysCore, wskaźnik zostanie zainicjowany w trybie rozszerzonym - będzie można z niego skorzystać wewnątrz aplikacji, ale już nie do kontroli pozycji menu systemu zarządzania oknem.
Jeżeli pozycja AlwaysCore została wpisana, urządzenie (obok myszy) będzie działać jako wskaźnik podstawowy wysyłając dodatkowo informacje na temat nachylenia i nacisku do wszystkich programów, które uzyskały dostęp do wskaźnika w trybie rozszerzonym.
Dzięki użyciu dwóch różnych urządzeń logicznych możemy tak skonfigurować jedno fizycznie
urządzenie, by pracowało zarówno w trybie podstawowym jak i rozszerzonym.
Aby tego dokonać musimy stworzyć dwie identyczne sekcje różniące się jedynie ustawieniem
nazwy urządzenia DeviceName. Następnie musimy dodać wpis AlwaysCore od ostatniej z tych
sekcji.
Przykład:
AlwaysCore
Ustawienie HistorySize określa rozmiar bufora używanego do przechowywania informacji o zdarzeniach ruchu.
Ustawienie to określa liczbę jednostek, o które urządzenie musi być przesunięte zanim sterownik poruszy wskaźnikiem. Jest ono zwykle niezbędne przy użyciu wysokich rozdzielczości.
Przykład:
Suppress 6
TiltMode umożliwia wysyłanie informacji na temat pochylenia dla urządzeń wejściowych tableta Intuos. Jeżeli pominiemy ten parametr, przesyłana zostanie jedynie informacja o nacisku.
Te cztery parametry pozwalają na zredukowanie aktywnego obszaru tableta. Dla przykładu, mój Intuos A4 oversize jest tak wielki, że nie da się na nim normalnie malować, gdyż ruchy rysika muszą być zbyt duże. Używam tych parametrów aby tak poinstruować sterownik by przypisał do ekranu tylko lewą dolną ćwiartkę tableta.
Przykład:
TopX 0 # współrzędne lewego górnego punktu
TopY 5000
BottomX 5000 # współrzędne prawego dolnego punktu
BottomY 10000
Jeśli używasz powyższych ustawień, najprawdopodobniej będziesz chciał obliczyć rozmiar oraz położenie definiowanego prostokąta. Zwykle potrzebne są do tego maksymalne współrzędne oraz rozdzielczość. Aby poznać te wartości uruchom swój serwer: X 2>t. Następnie usuń proces serwera X (zwykle Ctrl+Alt+Backspace) i wykonaj grep "X=" t. W odpowiedzi powinieneś otrzymać wartości które Cię interesowały.
(--) Wacom IV tablet maximum X=5103 maximum Y=3711 X
resolution=1000 Y resolution=1000 suppress=6
(--) Wacom tablet top X=0 top Y=0 bottom X=5103 bottom Y=3711
(--) Wacom tablet top X=0 top Y=0 bottom X=5103 bottom Y=3711
(--) Wacom tablet top X=0 top Y=0 bottom X=5103 bottom Y=3711
Opcja ta korzysta ze zmiennych TopX i TopY (lub wbudowanych wartości domyślnych, jeśli je pomineliśmy) do ustawienia parametrów BottomX i BottomY tak aby
Jakiekolwiek wcześniejsze ustawienia BottomX i BottomY są ignorowane, gdyż wartości tych zmiennych zostaną obliczone.
Począwszy od wersji 1.1.x Gimp posiada wbudowaną obsługę XInput.
Aplikacja musi jednak wiedzieć, którego urządzenia powinna użyć i w jakim trybie. Aby to ustawić powinieneś otworzyć okno dialogowe Plik/Okna dalogowe/Urządzenia wejściowe (w wersji angielskiej File/Dialogs/Input Devices). U góry okna znajdziesz dwie rozwijane listy z etykietami Urządzenie (Device) oraz Tryb (Mode). Z pierwszej wybierz urządzenie z drugiej tryb obsługi.
Tryby te to:
Jeżeli widzimy, że znaszym urządzeniem związane są dwa kursory, mamy dwa rozwiązania:
Poniżej obydwu rozwijanych list znajdują się pola kontrolne z zakładkami Osie (Axes) oraz Klawisze (Keys). Osie przypisują osiom funkcje. W większości przypadków nie potrzeba zmieniać tych ustawień, ale możesz zastanowić się nad ekranem dotykowym, który został zamontowany w pozycji obróconej o 90 stopni. W tym przypadku moglibyśmy chcieć zamienić ze sobą osie x i y.
Niektóre tablety posiadają umieszczone u góry specjalne klawisze makropoleceń
(makro), kórym mogą być przypisane często używane funkcje. Zakładka
Klawisze
pozwala na przypisanie do klawisza makro pwnego znaku. Na przykład do klawisza
makro można przypisać kombinację Ctrl+Shift+R. Jeżeli zostanie on naciśnięty,
wywołana zostanie funkcja włączenia/wyłączenia linijki.
Obecne sterowniki do tabletów Wacoma obsługują klawisze makro jedynie w UltraPadach,
pola klawiszy w tabletach Intuos nie są wykorzystane w ten sposob.
Powinniśmy teraz omówić jak możemy korzystać z naszych urządzeń. Otwórz okno dialogowe Plik/Okna dialogowe/Stan urządzenia (File/Dialogs/Device Status). Otwórz dowolny plik z rysunkiem.
Każde urządzenie wejściowe w gimpie jest konfigurowane osobno.
Jeżeli będziesz poruszał kursorem w oknie rysunku przy użyciu różnych urządzeń zauważysz zmianę urządzeń w oknie dialogowym Stan urządzenia. Jeśli wybierzesz dowolne narzędzie, pędzel, wzór lub kolor zmiana także zostanie uwzględniona. Aby wybrane ustawienia zostały odtworzone przy następnej sesji gimpa można je tam zapisać.
Jest to, cały czas aktywne, urządzenie specjalne. Generuje ono zdarzenia za każdym razem gdy nowe urządzenie przejmuje wskaźnik w trybie podstawowym. Posiada ono pseudo "oś". "Wartość" na tej osi jest identyfikatorem urządzenia będącego wskaźnikiem podstawowym. Nie mam pojęcia co użytkownik mógłby zrobić z urządzeniem przełącznika - głównie jest ono przydatne dla programistów.
Przyciski, w które są wyposażone urządzenia wejściowe mogą być tak zróżnocowane
jak same urządzenia:
Rysik posiada przynajmniej czubek, ale może też mieć jeden lub dwa przyciski
na boku oraz gumke na drugim końcu. Myszy mogą mieć do 32 klawiszy (choć zwykle
mają ich 3). Przyciski ponumerowane są od 1 do liczby klawiszy. Opisane poniżej
dwa programy pozwalają na modyfikacje liczby wykorzystywanych klawiszy.
xmodmap będzie modyfikował jedynie wskaźnik podstawowy (Core Pointer). Jako że w danym momencie istnieje tylko jeden wskaźnik podstawowy, nie mają znaczenia różnice pomiędzy fizycznymi urządzeniami, które mogą stać się takim wskaźnikiem. Na jakiś czas zapomnijmy o całym tym XInput i pomyślmy o osobie leworęcznej, która chciałaby zamienić znaczenie prawego i lewego przycisku myszy. Aby poznać stan aktualny można wykonać polecenie xmodmap -pp. W odpowiedzi powinniśmy otrzymać następującą tabelę:
Physical Button
Button Code
1 1 # ( lewy przycisk )
2 2 # ( prawy przycisk )
3 3 # ( środkowy przycisk )
Aby zamienić klawisze należy wykonać polecenie xmodmap -e "pointer = 2 1 3", oraz xmodmap -e "pointer = default" aby przywrócić poprzednie przypisanie. Powinno to działać dla dowolnych urządzeń posiadających przynajmniej dwa przyciski. Należy zaznaczyć, że wyrażenie "pointer = x x x" musi być zawarte w cudzysłowach by zapobiec jego modyfikacji ze strony powłoki.
Wróćmy ponownie do XInput. Jeśli używasz gimpa, możesz chcieć zmienić przyporządkowanie klawiszy dla każdego urządzenia osobno (możesz być zadowolony z myszy, ale chciałbyś zamienić znaczenia dwóch bocznych przycisków rysika). Frederic Lepied napisał w tym celu program o nazwie xinput.
Aby zamienić boczne przyciski powinieneś wykonać polecenie xinput list w celu uzyskania listy urządzeń wraz z ich aktualnymi ustawieniami. Zamiana realizowana jest przez wykonanie xinput set-button-map Pen1 1 3 2 gdzie Pen1 jest urządzeniem, które chcemy zmienić.
Począwszy od XFree 3.3.2 rozwiązanie to działa dla urządzeń skonfigurowanych (w pliku XF86Config) jako AlwaysCore.
Przy pomocy xsetmode możliwe jest przełączanie urządzenia pomiędzy trybem bezwzględnym (absolute) a względnym (relative) trybem pracy.
Przykład:
xsetmode GraphireMouse ABSOLUTE
Jeżeli żadne z naszych urządzeń nie zostało skonfigurowane jako AlwaysCore a chcielibyśmy by jedno z nich zostało wskaźnikiem podstawowym musimy użyć programu xsetpointer.
Wykonaj polecenie xsetpointer NazwaUrządzenia. Stare urządzenie podstawowe (zwykle jest to mysz) nie będzie już dłużej wykorzystywane, jego miejsce zajmie urządzenie wyspecyfikowane w naszym poleceniu. Dla przykładu możliwe jest przypisanie funkcji wskaźnika podstawowego myszy Graphire w uruchomionych wczesniej XFree.
xsetpointer -l wypisuje listę wszystkich urządzeń oraz ich trybów pracy.
Niektóre urządzena posiadają klawisze makro lub specjalne pola, którym można przypisać pojedyncze znaki sterujace lub też ich ciągi. Działa to wyłącznie dla urządzeń pracujących w trybie rozszerzonym, a co za tym idzie, realizowane jest przez te aplikacje, które chcielibyśmy by wykorzystywały klawisze.
xinput -l daje nam informacje na temat liczby klawiszy czy też wysyłanych znaków sterujących.
Posiadam 3 tablety Wacoma, które używam wraz z moim notebookiem. Za każdym razem gdy uruchamiam X-y, a żaden z tabletów nie jest podłączony do komputera, musi upłynąć sporo czasu nim sterowniki się poddadzą. Jeżeli uruchamiany jest xdm okres oczekiwania znacznie się wydłuża.
Stworzyłem dwa narzędzia, które powinny ułatwić życie wszystkim którzy są w takiej samej sytuacji:
Koncepcją, która leży u podstaw działania obu programów, jest podział pliku XF86Config na plik XF86Config.bare, zawierający informacje wspólne dla wszystkich konfiguracji, oraz szereg małych plików zawierających specyficzne informacje na temat poszczególnych konfiguracji.
Obydwa narzędzia łączą te części w działającą całość.
Pakiet ten jest dostępny na stronie http://www.runkeledv.de/download, pod nazwą xinput_chooser_sr.
gpm:
strona podręcznika (man) gpm, FAQ gpm, kod źródłowy pliku mice.c
XInput:
dokument XInput HOWTO autorstwa Owena Taylora
XFree oraz Wacom:
podręcznik XF86Config
strona Web Frederica Lepieda
dużo, dużo listów...
Dokument ten został napisany w standardzie ISO-8859-2.
Tłumaczenie to jest chronione prawami autorskimi (c) Marka Guevara Braun. Dozwolone jest rozprowadzanie i dystrybucja na prawach takich samych jak dokument oryginalny.
Jeżeli znalazłeś(łaś) jakieś błędy ortograficzne, gramatyczne, składniowe lub techniczne to napisz do mnie na adres marek@atm.com.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://www.jtz.org.pl/pub/Linux/JTZ/
Zmiany wprowadzone przez tłumacza w stosunku do oryginału to odnośniki do polskich serwerów ftp i WWW oraz zmiana pisowni nazw produktów Wacoma (Intuos zamiast intuos, Graphire zamiast graphire, itp.) doc-linux-pl-2002.06.14.orig/html/X-Big-Cursor.pl.html 0100644 0001750 0001750 00000025213 07007144760 021024 0 ustar coven coven
Wersja polska: Krzysztof P. Jasiutowicz
kpjas@priv.onet.pl
v1.0, 27 sierpnia 1999 roku
Jest kilka przyczyn dla których standardowy kursor myszy jest dla niektórych niewłaściwy :
W tych przypadkach pomocne są powiększone kursory myszy. Optymalnie powinno to być robione przez jeden program X-ów, który automatycznie powiększałby każdy kursor myszy.
O ile wiem, nie da się w prosty sposób napisać takiego programu, ponieważ protokół X-ów nie umożliwia dostępu do kursora myszy. Więcej szczegółów znajdziesz w rozdziale Szczegóły techniczne poniżej.
Jeśli naszym celem nie jest takie ogólne rozwiązanie, co nieco da się zrobić :
Istnieje standardowy zestaw kursorów myszy, znajdujący się w foncie
kursora ( wypróbuj polecenie xfd -fn cursor wtedy go obejrzysz).
Większość programów wykorzystuje te kursory myszy i zasada polega na
zastępowaniu standardowego kursora jego powiększoną wersją.
Zostałem umotywowany do napisania tego MINIHOWTO, kiedy słabo widzący kolega student zapytał mnie jak powiększyć kursor myszy w X-ach. Kiedy już się dowiedziałem jak to zrobić, napisałem pierwotną wersję tego dokumentu. Ponieważ wiedza o sposobie tu opisanym nie jest zapewne powszechna, zdecydowałem podzielić się nią i utworzyłem z tego dokumentu MINIHOWTO linuksowe, mimo tego że, nie jest on wcale typowy dla Linuksa. Jak inne MINIHOWTO, znajduje się on na macierzystym serwerze Linux Documentation Project (LDP).
Matryca tego dokumentu jest w formacie SGML/linuxdoc. Dzięki temu możliwe jest automatyczne tworzenie wersji w następujących formatach (które są dostępne w tym samym miejscu co matryca) : html, text, LaTeX, DVI, PostScript i GNU info.
Shinobu Miyata przetłumaczył to MINIHOWTO na japoński. Znajduje się ono tu : http://i11www.ira.uka.de/~schneid/jp/X11-big-cursor/.
Postępuj zgodnie z instrukcją podaną poniżej. Jeśli nie chcesz sam odnajdywać i kompilować pakietu bdfresize, możesz przejść do punktu 3 i ściągnąć powiększony font zamiast tworzyć go.
zcat bdfresize-1.4.tar.Z | tar xf -
cd bdfresize-1.4
xmkmf
make
W Linuksie pewnie trzeba użyć:
make CCOPTIONS='-include /usr/include/bsd/bsd.h' clean all
mkdir $HOME/fonts
bdfresize -f 2 cursor.bdf | bdftopcf >$HOME/fonts/cursor2.pcf
mkfontdir $HOME/fonts
Przygotowałem kilka powiększonych
fontów kursora
o następujących stopniach powiększenia: 1.5, 2, 2.5, 3, 4, 5,
6, 7, 8 i 16-krotne. Można je ściągnąć jeden z nich i zainstalować w
$HOME/fonts jeżeli nie chcesz używać bdfresize.
.xinitrc lub .xsession : przed
uruchomieniem jakiegokolwiek klienta X-ów (który używa kursora)
następujące polecenie musi być wykonane :
xset +fp $HOME/fonts
xsetroot -cursor_name X_cursor
Gotowe—teraz wszystkie kursory myszy powinny być podwojonych rozmiarów.
cursor, nazwa pliku
nie ma znaczenia)—nie ma problemu bo bdfresize nie zmienia
nazwy fonta.xset +fp (w przeciwieństwie do
xset fp+).$HOME/fonts/ będą widoczne dopiero
po wydaniu polecenia mkfontdir $HOME/fonts; xset fp rehash
i tylko w nowo otworzonych klientach X-ów (dokładniej nowo utworzonych
kursorach).xset +fp path może nie działać na terminalu X-ów. W tym wypadku
można użyć font serwera (zobacz w rozdziale
Jak używać font serwera)
jeśli jest wspierany przez terminal X-ów lub jakąś
inny sposób instalacji fonta na terminalu X-ów (zazwyczaj może
to tylko wykonać administrator systemu).olcursor i
decw$cursor i i każdego innego fontu kursora, który
znajdziesz.
Czy jest możliwe napisanie programu dla X-ów, powiększającego kursory automatycznie?
Użyj XTestCompareCursor z rozszerzenia XTEST. We wszystkich oknach nad którymi znajduje się kursor porównuj kursor tego okna z zestawem 'znanych' kursorów (n. p. z fontu kursora ). Jeżeli kursor istnieje, zamień go na powiększony odpowiednik, w innym przypadku albo zostaw bez zmian albo zamień na standardowy kursor. To zadziała tylko tam, gdzie dostępne jest rozszerzenie XTest.
Napisz proxy X serwer, który przekazuje
wszystkie żądania klientów bez zmian, lecz przechwytuje wszystkie
żądania odnoszące się do funkcji Xlib XCreate*Cursor.
Żądania XCreate*Cursor powinny być zmieniane tak aby
powiększonego kursora.
Ten serwer proxy symuluje nowy display, n. p. :1.
Wszystkie programy klienckie, które łączą się z tym display (n. p. xterm -display
:1) są wyświetlane na rzeczywistym serwerze (zwykle :0) i ich
kursory myszy są automatycznie powiększone. Kursory myszy klientów,
które łączą się z :0 pozostaną niezmienione.
Oto niektóre pomysły dla raczej prostych programów dla X-ów, które sprawią że kursor myszy będzie lepiej widoczny.
Bardziej ambitnym projektem byłyby ślady myszy à la windoze, t. j. kiedy mysz jest przesuwana i kursor myszy musi być wyświetlony w innej pozycji, wtedy "stary kursor" nie znika od razu, ale z pewnym opóźnieniem. Ślady myszy najlepiej byłoby zaimplementować w X serwerze, ale można by to wykonać jako klienta X-ów, lub lepiej jako serwer proxy ( dokładniejszy opis w rozdziale Szczegóły techniczne).
Font serwer jest usługą sieciową, która dostarcza zestaw fontów X11 z nieskomplikowanym protokołem. Można do niego wysyłać zapytania, które fonty są dostępne i zażądać od niego fontu bitmapowego.
Font serwer może być przydatny do dostarczenia X serwerowi zmodyfikowanego fontu kursora, zamiast informowania gdzie w file systemie on się znajduje.
Ta metoda jest szczególnie przydatna jeśli używa się kilku maszyn, które nie maja tego samego systemu plików lub jeśli używa się X terminali, które wspierają protokół font serwera.
Font serwer i związane z nim narzędzia są w dystrybucji X11R5+ (o ile wiem).
Przeczytaj strony podręcznika systemowego fs(1),
fslsfonts(1) (lub
xfs(1), xfslsfonts(1) pod X11R6) i spróbuj—to nie
jest trudne. Powiedzmy, że serwer jest uruchomiony na hoście
some.host.edu na porcie 7100. Instalację można wypróbować poleceniem
fslsfonts -server some.host.edu:7100
Żeby naprawdę uruchomić font serwer należy wydać polecenie :
xset +fp tcp/some.host.edu:7100
które nie powinno dać informacji o błędzie.
Jeśli uruchomiłeś font serwer użyj po prostu fstobdf
dołączonego do serwera fontów.
Inne wyjście to użycie getbdf który może zapisać dowolny
zainstalowany font X11 do pliku bdf.
doc-linux-pl-2002.06.14.orig/html/XFree86-HOWTO.pl.html 0100664 0001750 0001750 00000072646 06770264140 020747 0 ustar coven coven
X Window System stanowi wielkie i potężne (niektórzy mogliby powiedzieć, iż zbyt wielkie i nadmiernie złożone) graficzne środowisko dla systemów UNIXowych. Oryginalny kod X Window System opracowano w MIT; od tego czasu komercyjni sprzedawcy uczynili z X'a przemysłowy standard dla platform UNIXowych. Faktycznie, na wszystkich UNIXowych stacjach roboczych na świecie chodzi jakiś wariant systemu X Window.
Pochodzący z MIT i rozprowadzany bez opłat X Window System wersja 11 wydanie 6 (X11R6) przystosowany dla systemów UNIXowych opartych o 80386/80486/Pentium pierwotnie rozwijał zespół programistów pod kierownictwem Davida Wexelblata <dwex@XFree86.org>. Wersja ta, znana jako XFree86, dostępna jest dla Systemu V/386, 386BSD i innych implementacji UNIXa opartych na platformie x86, włączając w to Linuxa. Zawiera ona wszystkie potrzebne binaria, pliki pomocnicze, biblioteki i programy narzędziowe.
Wyczerpujące informacje o XFree86 dostępne są na stronie Pajęczyny poświęconej XFree86 pod adresem http://www.XFree86.org.
Niniejszym dokument krok po kroku opisujeq, jak zainstalować i skonfigurować XFree86 dla Linuxa, chociaż niektóre szczegóły trzeba będzie samodzielnie uzupełnić czytając dokumentację dostarczoną z samym XFree86. (Dokumentacja ta zostanie omówiona poniżej.) Jednakże używanie i dostosowanie do własnych potrzeb X Window System wykracza daleko poza zakres tego dokumentu -- w tym celu zaopatrz się w jedną z wielu dobrych książek na temat używania X Window System.
Jeśli zupełnie nie orientujesz się, czym jest Linux, istnieje kilka źródeł informacji o tym systemie. Najlepszym miejscem jest strona Pajęczyny z Dokumentacją Linuxa dostępna pod adresem http://sunsite.unc.edu/mdw/linux.html. Tam też, pod adresem http://sunsite.unc.edu/mdw/HOWTO/XFree86-HOWTO.html, znajdziesz najnowszą, aktualną wersję tego dokumentu.
Nowe wersje Linux XFree86 HOWTO są okresowo rozsyłane na grupy dyskusyjne comp.os.linux.help, news:comp.os.linux.announce i news.answers. Są one również zamieszczane w rozmaitych miejscach Pajęczyny i archiwach ftp poświęconych Linuxowi, włączając w to stronę LDP.
Najnowszą wersję zawsze możesz znaleźć w Pajęcznie pod adresem URL http://sunsite.unc.edu/mdw/HOWTO/XFree86-HOWTO.html.
Jeśli masz jakiekolwiek pytania czy uwagi na temat niniejszego dokumentu, proszę nie krępuj się i wyślij pocztę elektroniczną do Erica S. Raymonda na adres esr@thyrsus.com. Jestem otwarty na wszelkie sugestie i krytykę. Daj mi proszę znać, jeśli znajdziesz jakiś błąd w tym dokumencie, tak bym mógł go poprawić w następnej wersji. Dzięki.
Prosze, nie wysyłaj mi pytań jak zrobić, by Twoja karta video czy monitor działał z X'em. Niniejsze JTZ ma być w zamierzeniach stanowić szybki i bezbolesny przewodnik dla normalnej instalacji przy użyciu nowego, interakcyjnego programu konfigurującego. Jeśli wpadniesz w tarapaty przejrzyj the Hitchiker's Guide to XFree86 Video Timing, http://www.ccil.org/~esr/xconfig/video-modes.html. (Jest to aktualna, w formacie HTML, wersja pliku `Videomodes.doc'z XFree86.) Dokument ten zawiera całą moją wiedzę na temat rozwiązywania problemów związanych z konfiguracja; jeśli on nie jest w stanie Tobie pomóc, ja również.
XFree w wersji 3.2 wprowadzono w październiku 1996 roku. Poniżej opisano obsługiwane zestawy układów video. Dokumentacja dostarczona z Twoją kartą video powinna określać zastosowany zestaw układów scalonych. Kiedy zamierzasz kupić nową kartę video lub też kupujesz nową maszynę z jakąś kartą video, niech sprzedawca dokładnie określi markę, model i zestaw układów scalonych owej karty. Może to wymagać od niego zadzwonienia w tej sprawie do działu wsparcia technicznego; generalnie będą oni uszczęśliwieni mogąc to zrobić. Wielu sprzedawców sprzętu PC stwierdzi, iż dana karta video jest ,,standardową kartą SVGA'', która ,,powinna pracować'' w Twoim systemie. Wyjaśnij wówczas, że Twoje oprogramowanie (wspomnij Linuxa i XFree86!) nie obsługuje wszystkich zestawów układów video oraz że musisz posiadać szczególowe informacje.
Możesz również samodzielnie określić zestaw układów karty video uruchamiając
program SuperProbe zawarty w dystrybucji XFree86. Poniżej całą
sprawę przedstawiono bardziej szczegółowo.
Obsługiwane są następujące standardowe zestawy układów SVGA:
Obsługiwane są również akceleratory SVGA oparte o następujące układy zestawów:
Karty video, które stosują powyższe zestawy układów, obsługiwane są na wszystkich typach magistral, włączając w to VLB i PCI.
Zestawy układów oparte o Avance Logic, MX i Video 7 obsługują wyłącznie tryb 256 kolorów. Wszystkie pozostałe karty oparte o powyższe zestawy układów obsługują zarówno tryb 256 kolorów, jak i monochromatyczny. Wiele z powyższych zestawów układów będzie obsługiwać tryb 16 i 32 bitów na pixel (zwłaszcza niektóre karty oparte o układy Mach32, P9000, S3 i Cirrus), o ile tylko masz zainstalowaną na karcie wystarczającą ilość DRAM. Zwykła konfiguracja to 8 bitów na pixel (to znaczy 256 kolorów).
Serwer monochromatyczny obsługuje również standardowe karty VGA, monochromatyczną kartę Hercules oraz monochromatyczne karty Hyundai HGC1280, Sigma LaserView i Apollo. Dla karty Compaq AVGA obsługuje on jedynie 64k pamięci video. Nie testowano karty GVGA zawierającej więcej niż 64k.
Bez wątpienia lista ta powiększy się wraz z upływem czasu. Stosowne uwagi dałączane do aktualnych wersji XFree86 powinny zawierać kompletną listę obsługiwanych zestawów układów video.
Twórcy XFree86 napotykają na pewien problem, bowiem niektórzy producenci kart video stosują niestandardowe mechanizmy określania częstotliwości zegara używane do sterowania kart. Niektórzy z nich albo nie publikują specyfikacji opisujących jak zaprogramować kartę, albo wymagają od twórców podpisania oświadczenia o zachowaniu w tajemnicy otrzymanych informacji. To oczywiście ograniczałoby możliwość nieodpłatnej dystrybucji XFree86 -- coś, czego zespół twórców XFree86 bynajmniej nie chce zrobić. Przez długi czas stanowiło to problem odnośnie pewnych kart video produkowanych przez firmę Diamond. Jednakże począwszy od wersji 3.1 XFree firma Diamond zaczęła współpracować z zespołem twórców nad dostarczeniem bezpłatnych sterowników dla tych kart.
Sugerowany system dla XFree86 pod Linuxem to maszyna 486 z przynajmniej 8 megabajtami RAM i kartą video z zestawem układów wymienionym powyżej. Dla osiągnięcia optymalnej wydajności sugerujemy zastosowanie karty z akceleratorem, na przykład jakiejś karty z zestawem układów S3. Zanim podejmiesz ostateczną decyzję i nabędziesz kosztowny sprzęt, sprawdź w dokumentacji, czy XFree86 obsługuje Twoją wybraną kartę. Porównania testów wydajności dla rozmaitych kart video pod XFree86 są regularnie rozsyłane na grupy dyskusyjne USENETu comp.windows.x.i386unix i comp.os.linux.x.
Tak na marginesie, prywatny system Linuxowy Matt Welsh'a (pierwotnego twórcy niniejszego FAQa) chodził na maszynie 486DX2-66 z 20 megabajtami RAM, wyposażonej w kartę VLB z 2 megabajtami DRAM i zestaw układów S3-864. Matt przeprowadził test wydajności X'a dla swojej maszyny oraz dla stacji roboczej Sun Sparc IPX. System Linuxowy był w przybliżeniu 7 razy szybszy niż ów Sparc IPX. (Dla ciekawości, XFree86-3.1 pod Linuxem z tą kartą video osiągnął wynik około 171000 xstonów, Sparc IPX około 24000.) Generalnie rzecz biorąc, XFree86 na systemie Linuxowym zaopatrzonym w kartę SVGA z akceleratorem jest znacznie wydajniejszy niż uruchomiony na jakiejś karcie stosowanej w komercyjnych UNIXowych stacjach roboczych, które zwykle stosują obsługują grafikę za pomocą prostych ramek.
Potrzebujesz co najmniej 4 megabajty fizycznej RAM i 16 megabajtów wirtualnej RAM (przykładowo, 8 mega fizycznej i 8 mega pliku wymiany). Pamiętaj, że im więcej masz fizycznej RAM, tym mniej system będzie przy małej pamięci wymieniał dane. Ponieważ wymiana jest z definicji powolna (dyski są bardzo wolne w porównaniu z pamięcią), wiec aby XFree86 chodził komfortowo posiadanie co najmniej 8 megabajtów RAM jest koniecznością. Jeszcze lepiej zainstalować 16 megabajtów. System z 4 megabajtami fizycznej RAM mógłby chodzić dużo (do 10 razy) wolniej od takiego, który posiada co najmniej 8 mega.
Prawdopodobnie masz już XFree86 jako część dystrybucji Linuxa -- w tym przypadku nie jest konieczne oddzielne ściąganie oprogramowania. W takim przypadku możesz pominąc tę sekcję.
Binarną dystrybucję XFree86 dla Linuxa można znaleźć w wielu archiwach ftp. Oryginalne archiwum XFree86 jest pod ardesem ftp://ftp.xfree86.org/pub/XFree86/current/binaries/Linux (w czasie qpisania niniejszego tekstu aktualna wersja oznaczona była numerem 3.2; okresowo wypuszczane są nowsze wersje).
Na sunsite.unc.edu XFree86 można znaleźć w katalogu
/pub/Linux/X11.
Kiedy bezpośrednio ściągasz XFree86, przyda się Tobie poniższa poniższa tabela. Wyszczególnia ona pliki zawarte w dystrybycji XFree86-3.2.
Wymagany jest jeden z następujących serwerów:
Serwer dla kart opartych o 8514.
Serwer dla kart opartych o AGX.
Serwer dla Number Nine Imagine 128.
Serwer dla kart opartych o Mach32.
Serwer dla kart opartych o Mach64.
Serwer dla kart opartych o Mach8.
Serwer dla monochromatycznych trybów video.
Serwer dla kart opartych o P9000.
Serwer dla kart opartych o S3.
Serwer dla S3 ViRGE i ViRGE/VX (wersja beta).
Serwer dla kart opartych o Super VGA.
Serwer dla kart opartych o ET4000/W32.
Wymagane są wszystkie następujące pliki:
Skrypt przedinstalacyjny.
Skrypt poinstalacyjny.
Pozostałe binaria X11R6.
Pliki konfiguracyjne dla xdm, xinit i fs.
Dokumentacja i strony podręcznika.
Pliki dla 75dpi, misc i PEXa.
Dzielone biblioteki X i pliki pomocnicze.
Program narzędziowy XF86Setup.
Serwer dla kart opartych o VGA/EGA.
Następujące pliki są opcjonalne:
Fonty 100dpi.
Fonty cyrylicy.
Inne fonty (chińskie, japońskie, koreańskie, hebrajskie).
Fonty skalowalne (Speedo i Type1).
Fonty serwera i pliki konfiguracyjne.
Pliki nagłówkowe X, pliki konfiguracyjne i biblioteki kompilacyjne.
LinkKit dla serwera X.
LinkKit dla serwera PC98 X.
Zagnieżdżony serwer X.
Wirtualny serwer X.
Dokumentacja w PostScripcie.
Dokumentacja w HTMLu.
Katalog XFree86 powinien zawierać plik RELNOTES zawierający uwagi
odnośnie aktualnej wersji. Zajrzyj tam odnośnie szczegółów związanych z
instalacją.
Wszystko, co potrzeba, by zainstalować XFree86, to zdobyć powyższe pliki,
utworzyć (jako root) katalog /usr/X11R6 i rozpakować owe pliki
z /usr/X11R6 następującą komendą:
gzip -dc X32bin.tgz | tar xfB -
Pamiętaj, iż te starowane pliki są spakowane relatywnie do katalogu
/usr/X11R6, taki więc ważne jest ich rozpakowanie właśnie tam.
Upewnij się, iż katalog /usr/X11R6/bin znajduje się na Twojej
ścieżce dostępu. Możesz to zrobić edytując domyślne ustawienia Twojego
systemu zawarte w pliku /etc/profile lub /etc/csh.login
(zależnie od typu powłoki, jaką stosujesz Ty czy inni użytkownicy Twojego
systemu). Możesz też po prostu dodać ten katalog do Twojej osobistej ścieżki
modyfikując plik /etc/.bashrc lub /etc/.cshrc, zależnie od
rodzaju Twojej powłoki.
Upewnij się również, iż ld.so (konsolidator), potrafi
zlokalizować katalog /usr/X11R6/lib. Aby to zapewnić, dodaj linię
/usr/X11R6/lib
do pliku /etc/ld.so.conf i, jako root, uruchom
/sbin/ldconfig.
Uwaga: Odkryłem, po zainstalowaniu wszystkich następujących części:
X32Ma64.tar X32cfg.tar X32fnts.tar X32html.tar X32prog.tar X32VG16.tar X32doc.tar X32fscl.tar X32lib.tar X32set.tar X32bin.tar X32f100.tar X32fsrv.tar X32man.tar
że żadna z nich nie zawierała wsparcia dla Xpm (stanowi to problem, ponieważ, przynajmniej w mojej konfiguracji, sam serwer X'a wymaga Xpm'a -- Twoje potrzeby mogą być inne). Musiałem przekopiować biblioteki Xpm z mojej starej dystrybucji X'a. Tak więc pakiet nie jest jeszcze doskonały.
Do niedawna skonfigurowanie XFree86, tak by używał Twojej myszy, klawiatury,
monitora i karty video, zwykło być czymś w rodzaju czarnej magii,
wymagającej sporego grzebania w złożonym pliku konfiguracyjnym. To już
jednak historia. Wersja 3.2 uczyniła cały ten proces prawie trywialnym.
Wszystko co robisz, to odpalasz program XF86Setup.
Działanie tego programu opiera się na fakcie, iż obecnie cały nowy sprzęt PC posiada monitory EGA/VGA. Program ów uruchamia serwer SVGA16 i używa go do przywołania X'a w trybie 640x480, co stanowi najmniejszy wspólny mianownik. Potem uruchamia interakcyjny program, który poprowadzi Cię przez serię pięciu menu konfiguracyjnych -- dla myszy, klawiatury, karty (video), monitora i ,,pozostałych'' (rozmaite opcje serwera). Cały proces przebiega prawie bezboleśnie.
Warto również pamiętać o drobnym fakcie, mianowicie iż jeśli jak większość ludzi używasz rozpowszechnionego peceta, to Twoja klawiatura jest obecnie raczej tym, co XF86Setup nazywa `Generic 102-key PC (intl)' niż domyślną `Generic 101-key PC'. Jeśli wybierzesz domyślną (101), wówczas klawisze znajdujące się po prawej stronie Twojej klawiatury (klawiatura numeryczna i obszar przyległy) mogą przestać działać.
Jeśli żywisz wątpliwości odnośnie typu swojego monitora, możesz po kolei wypróbować wylistowane opcje. Przejdź z góry listy na dół (wyższe opcje dają niższe prędkości taktowania zegara i są mniej szkodliwe dla sprzętu). Wycofaj się, jeśli zobaczysz śnieżący lub poważnie zniekształcony obraz. Pomniejsze zniekształcenia (obraz lekko za duży, za mały czy lekko zdecentrowany) nie stanowią problemu -- za moment będziesz mieć szansę skorygować je w trybie dostrajania.
A kiedy program przywołuje xvidtune, dając Tobie możliwość dostrojenia
Twojego trybu video, nie daj się wyprowadzić z równowagi pojawiającym się na
początku napisom ostrzegawczym. W ten sposób nie jest łatwo uszkodzić
współczesne wieloczęstotliwościowe monitory (inaczej niż ich przodków o
stałej częstotliwości).
Może się czasem tak zdarzyć, iż kiedy po raz pierwszy odpalisz X serwer nie
wszystko będzie w całkowitym w porządku. Prawie zawsze jest to spowodowane
jakimś problemem w Twoim pliku konfiguracyjnym. Zwykle wyłączone są wartości
synchronizacji monitora są lub też niepoprawnie ustawione są częstotliwości
taktowania zegara Twojej karty video. Drobniejsze problemy można poprawić
używając programu xvidtune. Naprawdę zniekształcony ekran zwykle
oznacza, iż musisz powrócić do XF86Setup i wybrać typ monitora posiadający
mniejsze możliwości.
Jeśli ekran wydaje się falować lub ma rozmyte brzegi, to jest to jasna
wskazówka, iż złe są wartości synchronizacji monitora lub częstotliwości
taktowania zegara. Upewnij się również, że właściwie został ustawiony zestaw
układów karty video, jak również i inne opcje w sekcji Device w
XF86Config. Miej absolutną pewność, że używasz właściwego X serwera
i że /usr/X11R6/bin/X jest połaczeniem symbolicznym do tego
serwera.
Jeśli wszystko to zawiedzie spróbuj wystartować ,,gołego'' X'a. W tym celu wydaj podobne do poniższego polecenie:
X > /tmp/x.out 2>&1
Możesz potem zabić X serwer (używając kombinacji klawiszy
ctrl-alt-backspace) i przestudiować zawartość pliku
/tmp/x.out. X serwer zapisze tam jakieś ostrzeżenia czy błędy -- na
przykład, że częstotliwość taktowania Twojej karty video nie koresponduje z
trybem obsługiwanym przez monitor.
Pamiętaj, iż aby przełączyć się pomiędzy trybami video kreślonymi w linii
Modes w sekcji Screen w pliku XF86Config możesz
użyć ctrl-alt-numeryczne + i ctrl-alt-numeryczne -. Jeśli
tryb najwyższej rozdzielczości nie wygląda poprawnie, spróbuj przełączyć się
na niższe rozdzielczości. Pozwoli to Tobie stwierdzić, że przynajmniej te
fragmenty Twojej konfiguracji X'a działają poprawnie.
Sprawdź również pokrętłami na monitorze pionową i poziomą wielkość obrazu. Podczas startowania X'a w wielu przypadkach konieczne jest takie dostrojenie. Na przykład, jeśli ekran wydaje się być lekko przesunięty w jedną stronę, zwykle możesz to skorygować używając panelu kontrolnego monitora.
Grupy dyskusyjne USENETu comp.windows.x.i386unix i
comp.os.linux.x poświęcone są dyskusjom o XFree86. Dobrym pomysłem
mogłoby być przypatrzenie się tym grupom w poszukiwaniu wiadomości związanch
z Twoją konfiguracją video -- możesz tam spotkać kogoś z identycznymi jak
Twoje własne problemami.
1280x1024 jest najwyższą wbudowaną rozdzielczością jaką obsługuje XF86Setup. Jeśli Twój monitor potrafi obsłużyć 1600x1200, wówczas by uzyskać optymalną wydajność będziesz musieć pogrzebać w swojej konfiguracji X'a.
Jeśli z tego czy dowolnego innego powodu chcesz grzebać w swojej konfiguracji video, zapoznaj się najpierw z dokumentem the Hitchiker's Guide to XFree86 Video Timing dostępnym pod adresem http://ww.ccil.org/~esr/xconfig/video-modes.html. (Jest to najnowsza, w formacie HTML, wersja pliku `Videomodes.doc' zawartego z XFree86.)
X domyślnie używa koloru 8 bitowego, co daje paletę 256 barw. Aby ominąć to ograniczenie wiele aplikacji umieszcza swe własne mapy kolorów. Jednak kiedy kursor przemieszcza się pomiędzy dwoma oknami, z których każde ma swą własną mapę kolorów, powoduje to nagłe przeskoki kolorów. w ten sposób zachowuje się przeglądarka Pajęczyny Arena.
Kiedy zechcesz używać zaawansowanych aplikacji graficznych 256 kolorów przestaje wystarczać. Możesz użyć koloru 16 bitowego z paletą 65K różnych barw startując po prostu X'a jak niżej
startx -- -bpp 16
lub wpisując
exec X :0 -bpp 16
w swój plik .xserverrc. Uważaj jednak, bowiem nie wszystkie aplikacje będą
działać z 16 bitowym kolorem.
Większa ilość kolorów powoduje, iż Twoja karta video transferuje więcej danych w tej samej jednostce czasu. Jeśli Twoja karta video nie potrafi temu podołać, wówczas trzeba zredukować albo rozdzielczość, albo prędkość odświeżania. Domyślnie XFree redukuje rozdzielczość. Jeśli chcesz zachować rozdzielczość a zredukować prędkość odświeżania, musisz umieścić nowe stosowne paramery w linii Modeline w swoim pliku XqF86Config. Określi to tę rozdzielczość z niższą prędkościa odświeżania. Przykładowo zastąp starą wartość
Modeline "1024x768" 75 1024 1048 1184 1328 768 771 777 806 -hsync -vsync
na
Modeline "1024x768" 65 1024 1032 1176 1344 768 771 777 806 -hsync -vsync.
Magiczne liczby 75 i 65 odpowiadają prędkościom zegara. Znajdziesz je
zapisane przez X'a w swoim pliku .X.err. Sprawdź w dokumentacji X'a plik
odnoszący się do monitorów. Znajdziesz tam parametry Modelines stosowne dla
maksymalnej prędkości zegara, jaką Twoja karta video potrafi obłużyć przy
kolorze 16 bitowym.
Kiedy masz już skonfigurowany plik XF86Config spokojnie możesz
odpalć X serwer i odbyć krótką przejażdżkę. Po pierwsze upewnij się, że
katalog /usr/X11R6/bin znajduje się na Twojej ścieżce dostępu.
Aby wystartować XFree86 wydaj polecenie
startx
Stanowi to front dla xinit (w przypadku, jeśli kiedykolwiek
zdarzyło się Tobie używać xinit na innych systemach UNIXowych).
Polecenie to wystartuje X serwer i uruchomi komendy znalezione w pliku
.xinitrc znajdującym się w Twoim domowym katalogu.
.xinitrc jest zwykłym skryptem powłokowym, który zawiera
przeznaczonych do uruchomienia X klientów. Jeśli plik ten nie istnieje,
zostaną użyte domyślne wartości systemu z pliku
/usr/X11R6/lib/X11/xinit/xinitrc.
Standardowy pliki .xinitrc wygląda podobnie jak poniższy:
#!/bin/sh
xterm -fn 7x13bold -geometry 80x32+10+50 &
xterm -fn 9x15bold -geometry 80x34+30-10 &
oclock -geometry 70x70-7+7 &
xsetroot -solid midnightblue &
exec twm
Skrypt ten wystartuje dwóch kilientów xterm, oclock oraz
ustawi kolor tła okna root'a na midnightblue. Następnie wystartuje
menadżer okien twm. Zauważ, iż twm wykonuje się z
powłokowego wyrażenia exec. W ten sposób proces xinit
zostanie zastąpiony przez twm. Kiedy tylko proces twm
zostanie powołany do życia, X serwer wyłączy się. Możesz wyjść z
twm używając głównego menu. W tym celu naciśnij na tle pulpitu
klawisz myszy 1 -- wyświetli to rozwijalne menu, które pozwoli Tobie
uaktywnić opcję Exit Twm.
Upewnij się, że ostatnia komenda w pliku .xinitrc startuje z
exec i że nie jest ona umieszczona w tle (żadnego znaku & na końcu
linii), w przeciwnym bowiem razie X serwer wyłączy się zaraz po tym, jak
tylko wystartuje klientów z pliku .xinitrc.
Alternatywnie możesz wyjść z X'a wciskając kombinację klawiszy
ctrl-alt-backspace, co bezpośrednio zabija X serwer i wychodzi z X
Window System.
Powyżej zaprezentowano bardzo, ale to bardzo prostą konfigurację pulpitu.
Wkładając trochę pracy w swój plik .xinitrc możesz osiągnąć wiele
wspaniałych programów i konfiguracji. Przykładowo, menadżer okien
fvwm może umożliwiać używanie pulpitu wirtualnego. Możesz również
ustawić kolory, czcionki, wielkość i pozycje okien i tak dalej, co tylko
dusza zapragnie.
Jeśli dopiero zaczynasz poznawać środowisko X Window System, gorąco polecamy
zapoznanie się z jakąs książką z tego zakresu, np. The X Window System:
A User's Guide. Używanie i konfiguracja X'a są o wiele nazbyt złożone,
by je tutaj omawiać. Wskazówek na sam początek poszukaj na stronach
podręcznika odnoszących się do xterm, oclock i
twm.
Copyright (c) 1996 by Eric S. Raymond. Niniejszy dokument możesz używać, rozpowszechniać i reprodukować w dowolny sposób o ile:
Powyższe restrykcje mają na celu ochronę potencjalnych czytelników przed starymi lub niekompletnymi wersjami. Spytaj się mnie jeśli przypuszczasz, iż masz jakiś ważny powód dla uczynienia Tobie wyjątku.
Niniejszy dokument powołał do życia Matt Welsh w zacofanych czasach, gdy panował mętny pierwotny chaos. Dzięki Matt!
Copyright (c) for the Polish translation by Piotr Tęczyński, 1997.
Jeśli masz jakiekolwiek pytania czy uwagi odnośnie tłumaczenia bądź też zwyczajnie znajdziesz byka nie krępuj się i wyślij do mnie wiadomość pocztą elektroniczną. W ten sposób następna wersja będzie lepsza, ku pożytkowi nas wszystkich. Hmm, możesz też przesłać mi komplementy i pochwały... ;) Tak czy inaczej -- dzięki.
Podziękowania
Dzięki za nieocenioną pomoc przy powstawaniu i dalszej dystrybucji niniejszego dokumentu oryginalnemu jego twórcy, czyli Ericowi S. Raymondowi, całej fantastycznej i tryskającej humorem grupie JTZ (Jak To Zrobić), oraz uroczemu kociakowi ;) o imieniu Danka. No i oczywiście twórcy samego Linuxa, czyli Linusowi Torvaldsowi, torvalds@cs.helsinki.fi, przez którego mamy tyle świetnej zabawy.
doc-linux-pl-2002.06.14.orig/mini/ 0042755 0001750 0001750 00000000000 07502336646 015343 5 ustar coven coven doc-linux-pl-2002.06.14.orig/mini/html/ 0042755 0001750 0001750 00000000000 07502336671 016305 5 ustar coven coven doc-linux-pl-2002.06.14.orig/mini/html/3-Button-Mouse.pl.html 0100664 0001750 0001750 00000100252 07104371340 022271 0 ustar coven coven
Ten dokument jest oddany do użytkowania w dobrej wierze, jako zawierający w sobie tylko bezpieczne programowanie i operacje. Autor nie bierze odpowiedzialności za żadne szkody i uszkodzenia powstałe w jakikolwiek sposób u jakichkolwiek osób i sprzętu, jako bezpośrednie lub niebezpośrednie następstwo wypełniania podanych zaleceń.
Najnowsza wersja tego dokumentu (w oryginale ) jest zawsze dostępna : http://kipper.york.ac.uk/mouse.html
Istnieje japońska wersja tego dokumentu : http://jf.gee.kyoto-u.ac.jp/JF/JF-ftp/euc/3-Button-Mouse.euc
Od tłumacza : moja wiedza dotycząca myszy jest ograniczona. Jeśli zauawżyłeś jakieś błędy lub niedociągnięcia poinformuj mnie o tym. Pod adresem kpjas@priv.onet.pl.
Większość aplikacji X Window jest pisana z założeniem, że użytkownik będzie używał trzyprzciskowej myszy. Myszy szeregowe są zazwyczaj stosowane w zestawach komputerowych i są tanie. Wiele z tych myszy ma trzy klawisze i opisane są, iż używają protokołu Microsoft, co teoretycznie znaczy, że idealnie nadają się do systemu X Window. ( Obecnie rekord najniższej ceny za działającą trzyprzyciskową mysz szeregową wynosi $1.14!)
Większość myszy o podwójnym protokole będzie działać w dwóch trybach:
Pierwszą rzecz, którą trzeba sprawdzić to czy oprogramowanie może odnaleźć
myszkę. Dowiedz się, do którego portu szeregowego twoja mysz jest podłączona
- zazwyczaj będzie to /dev/ttyS0 ( COM1 w DOS-ie ) lub
dev/ttyS1 (COM2). ( ttyS0 jest zwykle 9-pinowym gniazdem,
ttyS1 25-pinowym, ale oczywiście nie ma w tej sprawie
sztywno ustalownych reguł). Istnieje też odpowiadająca liczba
urządzeń /dev/cua, które są prawie identyczne z /dev/ttyS
ale ich odradza się ich używania. Dla wygody należy wykonać nowe powiązanie
/dev/mouse z tym portem. Na przykład dla ttyS0:
ln -s /dev/ttyS0 /dev/mouse
Niektóre myszy, zazwyczaj nie te najtańsze, mają przełącznik na spodzie oznaczony `2/3'. Czasem może to być `PC/MS'. W tym wypadku oznaczenie `2' dotyczy trybu dwuprzyciskowego Microsoft-u, a `3' trzyprzyciskowego trybu MouseSystems. Przełącznik `PC/MS' jest nieco bardziej skomplikowany. Prawdopodobnie stwierdzisz, że ustawienie `MS' oznacza tryb Microsoft, a `PC' oznacza tryb MouseSystems. Możliwe, że ustawienie `PC' będzie opisane jako ps/2, ale powinno ono działać także jako tryb MouseSystems. Jeśli posiadasz taką mysz, możesz przełączyć ją w ustawienie `3' lub `PC', wstawić ustawienie dla MouseSystems w Xconfigs (patrz poniżej) i mysz powinna doskonale działać w trybie trzyprzyciskowym.
Jeżeli nie masz żadnych przełączników i nie masz instrukcji, to trzeba trochę eksperymentować. Po pierwsze spróbuj założyć, że producent myszy mówi prawdę, i mysz obsługuje w pełni tryb Microsoft. Ustaw w Xconfig tak żeby spodziewał się myszy Microsoft (zobacz Xconfig section) i wypróbuj to.
Jeśli mysz w ogóle nie działa, wtedy nie jest to mysz Microsoft, lub jest jakiś inny problem. Wypróbuj inne ustawienia w konfiguracji, najlepiej zacząć od dokumenatacji systemowej dla pliku konfiguracyjnego. Także zajrzyj do Różne problemy w rozdziale poniżej.
Zauważysz prawdopodobnie, że kiedy uruchomisz X-y, mysz działa doskonale, ale tylko zewnętrzne przyciski coś robią. Możesz to oczywiście zaakceptować i emulować trzeci przycisk ( naciśnij oba przyciski jednocześnie, aby kliknąć środkowy ), tak jak to się robi z myszą dwuprzciskową. Aby to zrobić, zmień swój plik Xconfig jak to pokazano w Xconfig example poniżej. Może to oznaczać, że niepotrzebnie kupiłeś mysz trzyprzyciskową i nie posuwasz się do przodu. A więc, teraz musisz przyjrzeć się swojemu sprzętowi.
Nawet tanie myszy mogą pracować w protokole MouseSystems, z wszystkimi trzema przyciskami działającymi. Sztuczka polega na tym, aby mysz myślała, że jest myszą Mouse System, coś co rzadko znajduje się w instrukcjach.
Kiedy mysz otrzymuje zasilanie i jeżeli lewy przycisk jest wciśnięty, mysz przełączaa się w tryb MouseSystems. To proste, ale nie zawsze opisywane zjawisko. Zwróć uwagę, że soft reboot komputera może nie odciąć zasialnia myszy i dlatego może nie działać. Jest kilka sposobów przełączania trybu, które mogą działać lub nie z twoim rodzajem myszy. Niektóre z nich są mniej drastyczne niż rebootowanie komputera, a dwa są bardziej !
echo "*n" > /dev/mouse,
co powinno mieć ten sam efekt co odłączenie jej od komputera.
Wciśnij lewy przycisk myszy dla MouseSystems, a nie wciskaj go dla Microsoft. Można to wstawić do któregokolwiek skryptu który używasz do uruchamiania X
Window.)echo "*n" nie działa ( i
vice versa ). Możesz znaleźć źródła tego programu w
http://kipper.york.ac.uk/src/fix-mouse.c
-----------
| o | o | o | SW1
-----------
1 2 3
Spróbuj połączyć piny 1-2 lub 2-3 i sprawdź czy to zmieni zachowanie myszy.
Jeżeli tak, to albo możesz zainstalować mały przełącznik albo zalutować to
połączenie by uzyskać szybkie i trwałe rozwiązanie.
ChordMiddle
w XF86Config i już środkowy przycisk działa.
Pin 3 Mode
----- ----
Open Default Microsoft. MouseSystems jeśli przycisk jest wciśnięty przy
włączeniu zasilania.
GND Zawsze MouseSystems.
Vdd Zawsze Microsoft.
( Piny są ponumerowane w następujący sposób: )
____
pin1 -| \/ |-
pin2 -| |-
pin3 -| |-
-| |-
-| |-
-| |-
-| |-
pin8 -|____|-
(Ta informacja prezentowana dzięki uprzejmości Hans-Christopha Wirtha i
Juergena Exnera, którzy przysłali ją do de.comp.os.linux.hardware.
Możesz przylutować połączenie między pinem 3 i gnd, co spowoduje że
mysz będzie działać w trybie MouseSystems.
-----
--- R ---------O------ + Supply
| ----- | | C = 100nF capacitor
| | E | R = 100kOhm
| __ / | T = BC557 transistor
| / \ O
| B | #V | T /
|-----|-# | / Przełącznik lewego przycisku myszy
| | #\ | O
| \__/ |
--- \ C |
--- C ------O----------> (gdzieś głęboko wewnątrz myszy)
|
### Ground
Testowanym modelem myszy była mysz no-name model MUS2S - czy to działa z
innymi modelami myszy zależy od budowy myszy jeżeli, przełącznik jest połączony
do ground a nie do +Supply, npn-transistor taki jak BC547 powinien działać,
R i C muszą być wtedy także zamienione.
To już wszystko, wybór należy do was. Pozostańcie przy dwóch klawiszach trybu Microsoft, albo znajdźcie sposób, aby przełączyć tryb i ustawić tak X-y, aby z tego korzystały.
gpm jest programem, który pozwala używac myszy w konsoli.
Jest on zazwyczaj dołączany do dystrybucji Linux-owych i można go
uruchomić z linii poleceń lub w skrypcie startowym /etc/rc.d/rc.local.
gpm stanowi problem dla ludzi używających myszy typu bus, ponieważ blokuje
mysz i powoduje, że X-y nie mogą jej używać - ci z nas którzy używają myszy
szeregowych nie mają tego problemu.
Podstawowe tryby dla myszy szeregowych z gpm to:
gpm -t ms
gpm -t msc
gpm -t help
dla trybu Microsoft lub MouseSystems, lub aby przetestować mysz
i wyświetlić wyniki. Aby uruchomić mysz w trybie MouseSystems,
może byc potrzebna flaga -3 oraz bu\yć może opcja DTR
za pomocą flagi -o dtr :
gpm -3 -o dtr -t msc
gpm często potrafi rozpoznać trzy przyciski myszy nawet w
trybie Microsoft. A nowsze wersje ( wersja 1.0 i poźniejsze (?))
potrafią udostępnić tą informację innym programom. By to działało
musisz uruchomić gpm z flagą -R w ten sposób :
gpm -R -t ms
To spowoduje reeksport danych myszy do nowego urządzenia, nazywanego
/dev/gpmdata, które przypomina mouse dla innych programów.
Zwróć uwagę, że to urządzenie zawsze korzysta z protokołu Mouse
Systems.
Można, tak zapisać Xconfig, aby używała tego zamiast /dev/mouse
tak jak to pokazano poniżej, ale oczywiście miej na uwadze, aby gpm zawsze
działało, kiedy używasz X-ów. Niektórzy pisali, że niektóre event-y X-ów
nie są poprawnie interpretowane przez X-y przy użyciu tego sposobu,
co może być związane z indywidualnym ustwieniem myszy.
Zmiana mapowania przycisku dla gpm i X ( gustafso@math.utah.edu)
Można stwierdzić, że gpm używa różne defaultowe mapowanie przycisków dla X, więc używanie obu systemów na tej samej maszynie może być frustrujące. Aby X-y używały tych samych przycisków jak gpm dla operacji wyboru i wklejania zastosuj polecenie X-ów :
xmodmap -e "pointer = 1 3 2"
co powoduje, że lewy przycisk wybiera, a prawy przycisk wkleja, zarówno
w myszach dwu i trzyprzyciskowch.
Aby wymusić na gpm użycie standardowego mapowania przycisków, uruchom
go z poleceniem -B, np:
gpm -t msc -B 132
W niektórych przypadkach, na przykład w laptopie z wbudowanym urządzeniem
wskazującym, ktoś może chcieć używać jako drugiego urządzenia myszy szeregowej.
W większości przypadków, wbudowane urządzenie używa protokołu PS/2 i można
go pominąć jeśli nie chce się go używać. Po prostu skonfiguruj gpm lub X-y
do używania /dev/ttyS0 ( lub innego) w sposób typowy.
Aby używać obu jednocześnie, można użyć gpm -M do reeksportu
urządzeń. Więcej szczegółów w podręczniku systemowym w rodziale
dotyczącym gpm.
Lokalizacja pliku konfiguracyjnego dla X-ów zależy od konkretnej wersji i
rodzaju dystrybucji. Prawdopodobnie będzie to albo /etc/Xconfig,
/etc/XF86Config albo /usr/X11/lib/X11/XF86Config.
Powinieneś zobaczyć, który to jest kiedy uruchomisz X - będzie wypisana
na ekranie zanim wszystkie opcje będą wyświetlone. Składnia nieco się
różni pomiędzy poszczególnymi plikami XF86Config i Xconfig, więc oba
będą tu podane.
Mysz szaregowa Microsoft
Section "Pointer"
Protocol "microsoft"
Device "/dev/mouse"
EndSection
#
# Definicja myszy i powiązanych parametrów
#
Microsoft "/dev/mouse"
Mysz szeregowa Microsoft z emulacją myszy trójprzyciskowej
Section "Pointer"
Protocol "microsoft"
Device "/dev/mouse"
Emulate3Buttons
EndSection
#
# Definicja myszy i powiązanych parametrów
#
Microsoft "/dev/mouse"
Emulate3Buttons
Trójprzyciskowa mysz MouseSystems
Section "Pointer"
Protocol "mousesystems"
Device "/dev/mouse"
ClearDTR # Te dwie linie nie będą prawdopodobnie
ClearRTS # potrzebne spróbuj bez, a potem po prostu DTR
EndSection
#
# Definicja myszy i związane z tym parametry
#
MouseSystems "/dev/mouse"
ClearDTR # Te dwie linie nie będą prawdopodobnie
ClearRTS # spróbuj bez a potem po prostu DTR
Microsoft Serial Mouse z gpm -R
Section "Pointer"
Protocol "MouseSystems"
Device "/dev/gpmdata"
EndSection
#
# Definicja myszy i powiązanych parametrów
#
MouseSystems "/dev/gpmdata"
Jedyne przewody potrzebne w kablu myszy to: TxD and RxD do przesyłu danych, RTS i/lub DTR dla zasilania i ground. Co przekłada się na numery pinów, w ten sposób:
port 9-pinowy port 25-pinowy
TxD 3 2
RxD 2 3
RTS 7 4
DTR 4 20
Gnd 5 7
Powyższa tabela może być użyteczna jeśli chcesz robić przelotki
między 9- i 25-pinowymi wtyczkami, lub kable przedłużające.
setserial, uruchamiane
z pliku startowego /etc/rc.d/rc.serial. Sprawdź w
podręczniku systemowym hasło setserial i
/etc/rc.d/rc.serial.
aby uzyskać więcej szczegółów.
Warto trochę poeksperymentować z typami, na przykład spróbuj setserial
/dev/mouse uart 16550 or 16550a niezależnie od rodzaju
portu, który naprawdę posiadasz. (Na przykład, myszy nie lubią 16c550AF.)ClearDTR może nie działać prawidłowo w niektórych
systemach, chyba że wyłączysz RTS/CTS handshaking za pomocą polecenia:
stty -crtscts < /dev/mouse
(Sprawdzone na UART 16450/Pentium przez Vladimira Geogjaeva
geogjaev@wave.sio.rssi.ru)ChordMiddle aby włączyć
funkcjonowanie środkowego z trzech przycisków.
Ten wiersz zastępuje Emulate3Buttons lub ma być umieszczony za
wierszem /dev/mouse w pliku konfigracyjnym.
Prawdopodobnie możesz potrzebować linii ClearDTR i ClearRTS
w swoim Xconfig. Niektóre myszy Logitech zdecydowanie nie wymagają linii
ChordMiddle - objawem tego problemu jest to że menu wydają się
poruszać z myszą zamiast skrolowac się w dół.
(Od:
chang@platform.com)xmodmap do
zmiany który rzeczywisty rejestr przycisku jest stosowany przy
kliknięciu myszy. np.: xmodmap -e "pointer = 3 2 1"
odwróci kolejność przycisków dla lewej ręki. Jeśli masz tylko
mysz dwuprzyciskową to są to numery 1 & 2.xset m aby zmienić
ustawienia myszy. np.: xset m 2 ustawi przyśpieszenie na 2.
Szczegóły w podręczniku systemowym.Invert_VCLK/InvertVCLK, or EarlySC.
Ta informacja pochodzi od Billa Lavendera
(
lavender@MCS.COM) and Simon Hargrave'a.
W XF86Config, może to wyglądać następująco:
Subsection "Display"
Modes "1024x768" "800x600" "640x480" "1280x1024"
Invert_VCLK "*" 1
...
linear, lub może nolinear do sekcji karty graficznej
lub jeśl ijest to karta PCI opcje
tgui_pci_write_off i tgui_pci_read_off.
(Wydaje się, że jest to problem z kartami Trident.)"sw_cursor" w sekcji Device pliku
konfiguracyjnego.
Jest wiele różnych myszy na świecie i nie mogę z czystym sercem powiedzieć, że powinieneś iść i kupić raczej tą mysz, a nie tamtą. To co mogę zrobić to wyliczyć co te myszy potrafią, oparte na doświadczeniu i pogłoskach. Nawet z tymi informacjami ostrożność jest wskazana - mieliśmy w biurze dwie identyczne myszy przy dwóch komputerach i niektóre rzeczy działały z jedną myszą i nie działały z drugą. Wszelkie dodatki do tego wyliczenia będą mile widziane.
Optyczna mysz MouseSystems, wersja szeregowa
Działa dobrze (jak możnaby się spodziewać po nazwie!) bez
ClearDTR lub ClearRTS w konfiguracji.
WiN mouse, sprzedawana przez Office World za osiem funtów.
Standardowa dwutrybowa mysz Microsoft/MouseSystems.
Agiler Mouse 2900
Standardowa dwutrybowa mysz Microsoft/MouseSystems.
SYSGRATION SYS2005i układ scalony nadaje się do lutowania.
Sicos mouse,
Działa ok, wymaga ClearDTR & Clear RTS w konfiguracji.
Index sprzedają mysz za 10 funtów,
Nie działa w trybie 3 przyciskowym, ale ma fajną instrukcję :-)
Artec mouse
Zwyczajna mysz o podwójnym protokole, wymaga `ClearDTR'
ustawionego w konfiguracji, NIE `ClearRTS'
DynaPoint 3 przyciskowa mysz szeregowa.
Zwyczajna mysz o podwójnym protokole, wymaga
`ClearDTR' I `ClearRTS' w konfiguracji X-ów.
Genius Easymouse mysz 3-przyciskowa
Doskonale działa w protokole Mouseman bez ustawiania parametru
ChordMiddle.
Od Roderick Johnstone (
rmj@ast.cam.ac.uk)
Truemouse, made in Taiwan
Działa OK, wymaga `ClearDTR' w konfiguracji. (Od
Tim MacEachern)
Mysz marki Champ
Wymaga przełączenia w tryb PC, co uaktywnia także protokół
MouseSystems. (Od tnugent@gucis.cit.gu.edu.au)
Mysz MicroSpeed
Zwykła mysz o podwójnym protokole.
Mysz marki Venus ($7)
Ma w śrokdu przełącznik między trybem 2 i 3 przyciskowym.
(Od
mhoward@mth.com )
Saturn
Mysz z przełącznikiem, działa OK jako mysz MouseSystems w pozycji 3-przyciskowej.
(Od
grant@oj.rsmas.miami.edu .)
Manhattan mouse.
Jest przełącznik trybów `MS AM' / `PC AT', tryb MS działa doskonale z
rozwiązaniem z gpm -R. (Od
komanec@umel.fee.vutbr.cz).
Mysz Inland.
Przełącznik dla trybów `PC/MS', działa doskonale. (Od
http://ptsg.eecs.berkeley.edu/~venkates).
qMouse (3-przyciskowa), FCC ID E6qmouse X31.
Sprzedawana w USA za około $10. działa z `gpm -t msc -r 20'.
Nie ma jumper-ów lub
przełączników do 3-przyciskowego trybu MouseSystems. Nie jest
godna polecenia w X.
Nie reaguje na echo "*n" > /dev/mouse.
Mitsumi Mouse (2-przyciskowa), FCC ID EW4ECM-S3101.
Sprzedawana w USA za około $12. Godna polecenia w X i w gpm,
łagodny klik. (Te dwa od
gustafso@math.utah.edu)
Myszy PC Accessories które kupiłem w CompUSA poniżej $10.
Ma przełącznik PC/MS na spodzie. Działa OK. (Od
steveb@communique.net)
First Mouse - naprawdę tanio za 7.79 funtów w Tempo.
Dwutrybowa mysz Microsoft/MouseSystems, tryb ustawiany przez
wciśnięcie przycisku przy włączeniu zasilania.
Nie ma przełączników, ani połączeń. Cztero kablowe połącznie,
echo '*n' nie działa. `gpm -R' działa wspaniale. (Od
peterk@henhouse.demon.co.uk)
Mysz 3-przyciskowa Trust.
O dwóch trybach z przełącznikiem, działa dobrze jako MouseSystems
w trybie `PC'. gpm gryzie się z trybem Microsoft.
Chic 410
działa doskonale w ustawionym trybie ms i przy użyciu polecenia gpm -R
Od Stephena M. Weissa
(
steve@esc.ie.lehigh.edu)
Trzyprzycikowa mysz KeyMouse.
działa prawidłowo z ClearDTR i ClearRTS w Xconfig;
w gpm konieczne `-o dtr' . (Od
EZ4PHIL@aol.com)
Klawiatura Qtronix `Scorpio 60'
Wszystkie trzy przyciski działają w protokole MouseSystems. (Od
hwe@uebemc.siemens.de)
Laptop Tecra 720
Glidepoint jest na /dev/cua0; rysik na /dev/psaux.
(Od
apollo@anl.gov)
Mysz Anubis
Działa doskonale, wymaga przytrzymywania lewego przycisku
przy przełączaniu do wirtualnej konsoli X.
(Od
Joel Crisp)
Yakumo No.1900 mouse
Działa z eksportem do X-ów gpm -R -t ms.
(Od
Oliver Schwank)
Genius `Easy Trak' Trackball
Nie jest zgodna z trybem Microsoft, użyj Mouseman
w konfiguracji X-ów i będzie działać doskonale.
(Od
VTanger@aol.com.)
Highscreen Mouse Pro
`Działa doskonale' twierdzi
alfonso@univaq.it.
Logitech CA series
Działa w X-ach używając protokołu MMseries, przy 2400 Baud, 150 SampleRate.
(Powinno też odnosić się do myszy Logitech CC, CE, C7 & C9). (Od
vkochend@nyx.net.)
Mysz A4-Tech
Działa OK, wymaga wiersza DTR pod X-ami i gpm.
(Od
deane@gooroos.com)
Mysz Vertech
Prawidłowe zachowanie Microsoft/Mousesystems, można zalutować do
ustawienia na stałe.
(Od
duncan@fs3.ph.man.ac.uk.)
Boeder M-7 ``Bit Star'' (i inne z serii M oprócz M13)
Przełącza się w tryb Mousesystems trzymając lewy przycisk przy
włączaniu zasilania.
(Od
mailto:sjt@tappin.force9.co.uk.)
Mouse Systems ``Scroll'' Mouse (cztery przyciski i roller/przycisk)
Ma przełącznik 2/3 - w trybie 3 działa jako trzyprzyciskowa mysz
MouseSystems,
bez działającego dodatkowego przycisku & kółka.
Nie wymaga ClearDTS/DTR.
(Od
parker1@airmail.net.)
Mysz Szeregowa 3-przyciskowa Radio Shack
Model 26-8432, dostępny w Tandy za około 20 funtów. Działa jako
Mousesystems z ClearDTR.
(Od
Sherilyn@sidaway.demon.co.uk.)
Większość informacji w tym dokumencie została zaczerpnięta z różnych linuksowych grup dyskusyjnych. Przepraszam, że nie umieściłem informacji o wszystkich, którzy pośrednio przyczynili się w ten sposób, dziękuję bardzo wam wszystkim.
Podsumowując :
doc-linux-pl-2002.06.14.orig/mini/html/Advocacy.pl.html 0100664 0001750 0001750 00000045751 07104371340 021335 0 ustar coven coven
Dokument ten to Linux Advocacy mini-HOWTO. Jego intencją jest dostarczenie ogólnych zaleceń i wytycznych jakie powinny towarzyszyć twoim staraniom slużącym promowaniu Linuxa.
To mini-HOWTO zostało zainspirowane przez Jona ``maddog'' Halla w momencie gdy zareagował on na potrzebę opracowania wytycznych slużących promowaniu Linuxa podczas Netday96. Pozytywnie przyjął on plan wytycznych i spostrzegł, że były one podstawą ``kanonow zachowania'', mogących przynieść pożytek społeczności linuxowej.
Dokument ten jest dostępny w formacie HTML pod adresem http://www.datasync.com/~rogerspl/Advocacy-HOWTO.html.
Net Makarevitch <nat@nataa.fr.eu.org> tłumaczy obecnie ten dokument na język francuski.
Chie Nakatani <jeanne@mbox.kyoto-inet.or.jp> przetłumaczył ten dokument na język japoński.
Janusz Batko <janus@krakow.linux.org.pl> przetłumaczył ten dokument na język polski.
Autorem i pomyslodawca Linux Advocacy mini-HOWOT jest Paul. L. Rogers <Paul.L.Rogers@li.org>.
Wszelkie komentarze i propozycje odnosnie tego dokumentu sa mile widziane.
Jesli potrzebujesz wiedziec wiedzej na temat Linux Documantion Project (LDP) lub Linux HOWTO's, skontatkuj sie z administratorem - Gregiem Hankinsem gregh@sunsite.unc.edu.
Greg Hankins wysyła ten dokument na poszczególne narodowe i międzynarodowe grupy newsowe przeważnie raz w miesiącu.
To mini-HOWTO jest własnością Paula L. Rogersa. Copyright (c) 1996 by Paul. L. Rogers. Wszelkie prawa zastrzezone.
Oryginalna kopia może być odtworzana lub rozpowszechniana na dowolnym nośniku fizycznym lub elektronicznym bez zgody autora. Tłumaczenia są dozwolone bez wyrażenia przyzwolenia, jeśli tylko zawierają informacje kto dokonał tłumaczenia.
Krótkie cytaty mogą być użyte bez uprzedniej zgody autora. Prace oparte na lub cześciowe dystrybucje Advocay mini-HOWTO muszą być załączone albo z orygialna kopią tego pliku albo ze wskazaniem na taką kopię.
Komercyjne rozpowszechanienie jest dozwolone i wręcz zalecane, jednakże autor życzy sobie być poinformowany o tym.
Innymi słowy, pragniemy rozpowszechniać zawarte tu informacje na wszystkie możliwe sposoby i wszelkimi możliwymi drogami, jednakże, chcemy przy tym zachować prawa autorskie. Chcielibyśmy także być informowani o wszelkich planach rozpowszechniania HOWTOs.
Pragniemy także by wszystkie informacje zawarte w HOWTOs były poszerzone. Jeśli masz pytania, skontaktuj się proszę z Gregiem Hankinsem, koordynatorem HOWTO, pod adresem gregh@sunsite.unc.edu.
Społeczność Linuxa ma świadomosc tego, że dla całego mnóstwa aplikacji Linux jest stabilnym, solidnym, pewnym i niezawodnym produktem. Niestety, jest wciąż wielu ludzi, również tych będących na kierowniczych stanowiskach, którzy nie zdają sobie sprawy z istnienia Linuxa i jego zalet.
Jeśli Linux i wiele innych elementów, które tworzą dystrubucję Linuxa mają osiagnąć swój pełny potencjał, jest bardzo ważne abyśmy zdobyli przyszłych klientow i zalecali (będąc ostrożnym by nie obiecywać za dużo) używanie Linuxa dla konkretnych, właściwych aplikacji. Należy pamiętać, że przyczyną, dla której wiele firmowych produktów sprzedaje się dobrze na rynku, nie jest wcale ich wyższość techniczna, lecz zdolności marketingowe firmy wypuszczajacej ten produkt.
Jeśli jesteś zadowolony używajac Linuxa i chciałbyś się przyczynić w jakiś sposób dla społeczności linuxowej, weź proszę pod uwagę działania w jednej lub wielu kwestiach zawartych w tym mini-HOWTO i pomoc innym nauczyć się czegoś wiecej o Linuxie.
Lars Wirzenius, moderator comp.os.linux.announce, ma równiez pewne spostrzeżenia na temat skutecznego promowania Linuxa.
Celem Linux International jest promocja i rozwój Linuxa.
The Linux Documentation Project to nieocenione, bardzo bogate i cenne źródło informacji pomocne w promowaniu Linuxa.
The Linux Business Applications to forum organizacji zajmujących się Linuxem w codziennych działaniach biznesowych, służące dzieleniu się doświadczeniami związanymi z używaniem i promocją Linuxa w zastosowaniach komercyjnych.
Celem The Linux Advocacy Project's jest zachęcanie twórcow aplikacji komercyjnych by swoje oprogramowanie dostarczali także w wersjach dedykowanych dla Linuxa.
Program The Linux CD and Support Giveaway pomaga w szerokim udostępnianiu Linuxa poprzez zachęcanie do wielokrotnego używania CD-ROMow z Linuxem.
Specialized Systems Consultants, Inc. (SSC) jest wydawcą Linux Journal jak również Linux Gazette - pisma online, dostępnego tylko w postaci elektronicznej.
Duże podziękowanią nalezą się wszystkim, w tym:
Jon "maddog" Hall <maddog@zk3.digital.com>
Greg Hankins <gregh@cc.gatech.edu>
Eric Ladner <eladner@goldinc.com>
Chie Nakatani <eanne@mbox.kyoto-inet.or.jp>
Nat Makarevitch <nat@nataa.fr.eu.org>
Martin Michlmayr <tbm@cyrius.com>
Idan Shoham <idan@m-tech.ab.ca>
Adam Spiers <adam.spiers@new.ox.ac.uk>
C. J. Suire <suire@datasync.com>
Lars Wirzenius <liw@iki.fi>
Copyright (c) by Janusz Batko (1997)
Autorem powyższego tłumaczenia jest Janusz Batko: <Janusz.Batko@krakow.linux.org.pl>
Autor zastrzega sobie wszelkie prawa do powyższego tłumaczenia. W ramach tych praw dozwolone jest dowolne kopiowanie i rozpowszechnianie tego dokumentu, także w celach komeryjnych (tutaj jednak autor pragnałby być o tym poinformowany).
Autor tłumaczenia nie ponosi żadnej odpowiedzialoności za wszelkie szkody powstałe w wyniku korzystania z tego tłumaczenia.
Jeśli znajdziesz w moim tłumaczeniu jakiekolwiek błedy (np. ortograficzne, techniczne, rzeczowe, gramatycze, składniowe itd.) to proszę napisz do mnie:
Janusz.Batko@krakow.linux.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.ippt.gov.pl w katalogu pub/Linux/JTZ/.
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 subscribe jtz Imię Nazwisko na adres listproc@ippt.gov.pl
(w. 0.01 * Sobota * 25 czerwiec * 16:34:44 * 1997 * Kraków * Wersja polska) doc-linux-pl-2002.06.14.orig/mini/html/ApplePrint.pl.html 0100664 0001750 0001750 00000103056 07104371340 021653 0 ustar coven coven
Napisz /usr/local/atalk/bin/getzones, aby sprawdzić czy
wszystkie strefy AppleTalk są widziane przez Linux-a. Powinieneś
widzieć przynajmniej jedną nazwę, która jest twoją strefą lokalną,
w innym przypadku bardzo prawdopodobne jest, że twój serwis
AppleTalk nie działa poprawnie. Ja dostaję coś takiego (tylko kilka
pierwszych linii):
Pingo$ /usr/local/atalk/bin/getzones | more
VLSB
LSB-Integrative Biology
LSB-Biology Library
LSB-Herbaria
LSB-UCMP
LSB-MVZ
Vanishing Packets
MIP
Barker Hall
Przy pomocy opcji dowiesz się która jest twoją strefą:
Pingo$ /usr/local/atalk/bin/getzones -m
VLSB
Pingo$
Tak więc moją strefą lokalną jest VLSB, kompletną listę wszystkich
lokalnych stref można uzyskać przy pomocy opcji -l (w razie
gdy twoja drukarka nie jest w twojej strefie musisz znać dokładną
nazwę strefy).
Jeśli chcesz tylko, aby lokalna drukarka UNIX-owa była dostępna dla klientów AppleShare, to przeskocz tę sekcję i idź do sekcji nr 3.
Najpierw musimy się dowiedzieć jak są zdefiniowane nazwy Internetowe w
AppleTalk. Jest to bardzo podobne do tego co znasz ze swojego
Linux-a. Nazwy występują w formie: objekt:typ@strefa. Jeśli
nie zależy ci na nazwie strefy lokalnej to użyj @*.
Tak więc, aby znaleźć wszystkie objekty w twojej strefie, napisz
/usr/local/atalk/bin/nbplkup, co wypluje wielką listę, z
elementami jak ten:
Pingo$ /usr/local/atalk/bin/nbplkup |more
Sun ValleyUs Macintosh:Macintosh IIsi 12398.245:253
Sun ValleyUs Macintosh:Workstation 12398.245:4
IB Instructional Support: Power Macintosh 12398.196:253
IB Instructional Support:Workstation 12398.196:4
centris 660AV: Macintosh 12398.51:253
centris 660AV:Workstation 12398.51:4
Chapin Lab vx - JoeC:Macintosh IIvx 12398.101:253
Chapin Lab vx - JoeC:Workstation 12398.101:4
Pingo Mac Printer:LaserWriter 12398.164:129
Pingo Default Printer:LaserWriter 12398.164:128
Pingo:AFPServer 12398.164:130
Pingo:netatalk 12398.164:4
Pingo:Workstation 12398.164:4
Lucicutia:AFPServer 12398.123:248
Theobald Chapin, III:LaserWriter 12398.73:191
Jeśli chcesz znać tylko objekty konkretnego typu jak LaserWriter,
musisz użyć /usr/local/atalk/bin/nbplkup
:LaserWriter. Upewnij się, że wstawiłeś dwukropek, który
oznacza, że chcesz znać tylko objekty typu LaserWriter. Słowo nie
może zawierać dużych liter, ale nie możesz ominąć spacji. Tak więc,
żeby zobaczyć Macintosh IIvx musisz wstawić nazwę typu w
cudzysłowia:
Pingo$ /usr/local/atalk/bin/nbplkup :"Macintosh IIvx"
Chapin Lab vx - JoeC:Macintosh IIvx 12398.101:253
Pingo$
Dobra. Krótko: Chcę móc drukować z mojego Linux-a na LaserWriter o nazwie Theobald Chapin, III. Zanim spróbujesz ustawić printcap dla kolejki tej drukarki, upewnij się czy masz dostęp do tej drukarki.
Napisz /usr/local/atalk/bin/papstatus -p "Theobald Chapin,
III" (zauważ, że cudzysłowia służą tylko temu, aby
poinformować twoją powłokę, iż Theobald Chaplin, III to jeden
argument a nie trzy) i powinieneś otrzymać coś takiego:
status: idle
Jeśli nie, to sprawdź czy AppleTalk rzeczywiście działa (może demon
nie jest uruchomiony ? Sprawdź tak: ps -xa | grep atalkd i
ps -xa | grep afpd).
Ponieważ LaserWriter spodziewa się PostScriptu, powinieneś mieć pod ręką krótki plik testowy w PostScripcie. Nazwa mojego pliku to: test.eps i mogę go wysłać bezpośrednio do Theobald Chaplin, III uruchamiając klienta drukowania AppleShare:
/usr/local/atalk/bin/pap -p "Theobald Chapin, III":LaserWriter@VLSB test.eps
Zauważ, że dołaczyłem nazwę strefy tylko po to, żeby się upewnić, że wszystko działa dobrze. Jeśli twoje zadanie drukowania się pojawi (co sekundę - czy jakoś tak - otrzymasz komunikat jeśli ktoś inny używa drukarki w tym samym momencie. Obserwuj odpowiedź twojej drukarki i co robi kiedy zacznie drukować twój plik).
Jeśli będziesz miał jakieś kłopoty, użyj aecho, aby sprawdzić objekty AppleTalk w ten sam sposób jakbyś używał ping-a przez TCP/IP (Ctrl-C zatrzymuje aecho):
/usr/local/atalk/bin/aecho "Theobald Chapin, III":LaserWriter@VLSB 14 bytes from 12398.73: aep_seq=0. time=15. ms 14 bytes from 12398.73: aep_seq=1. time=14. ms 14 bytes from 12398.73: aep_seq=2. time=14. ms 14 bytes from 12398.73: aep_seq=3. time=14. ms ----12398.73 AEP Statistics---- 5 packets sent, 4 packets received, 20% packet loss round-trip (ms) min/avg/max = 14/14/15 Pingo$
Powinieneś stracić tylko ostatni pakiet przy przerwaniu Ctrl-C, w innym wypadku coś jest nie talk z twoim połączeniem.
Będą dwa kroki. Najpierw upewnisz się, że możesz drukować na Linux-ie potem upewnisz się, że ta drukarka jest dostępna dla klientów AppleShare.
Mówiąc jaśniej: najpierw ustawisz swoją drukarkę, żeby była
dostępna dla UNIX-a (lpd - demona drukowania) (sekcja 3.1 do
3.2), a potem udostępnisz ją innym użytkownikom w strefie AppleTalk
(sekcja 3.3) co jest oczywiście opcjonalne.
Wielu ludzi nie lubi ustawiania z dwóch powodów:
(1) Jeśli
drukarka AppleTalk jest już dostepna w strefie AppleTalk, to
użytkownicy Mac-ów mogą się do niej bezpośrednio dołączyć. Więc nie
ma potrzeby istnienia kolejki na Linux-ie. Jednak ja jestem
użytkownikiem Linux-a i chcę mieć dostęp do tej drukarki i dlatego
mój poniższy opis robi dokładnie to: pozwala użytkownikowi Linux-a na
drukowanie na drukarce AplleTalk.
(2) Jeśli twoja drukarka
jest drukarką lokalną podłączoną do równoległego portu Linux-a
(np. /dev/lp1), to jest kilka zmian w pliku
/etc/printcap. Ja pokażę przykład ustawienia z drukarką
lokalną, którego nie testowałem, ale dostałem od innego
użytkownika. Przeczytaj
sekcję 3.4 na ten
temat i sprawdź szczegółowe informacje na temat
używania Ghostscript-u razem z Netatalk napisane przez
Mike'a Pearsona i Billa McGonigle'a.
Jeśli twoja drukarka może już drukować przy pomocy polecenia
Pingo$ lpr -P lp test.eps
to możesz przeskoczyć ten pierwszy krok.
W innym przypadku stań się "root-em" i idź do katalogu /etc, żeby wyedytować plik printcap. Szczegóły znajdziesz na stronie podręcznika systemowego "man". Ja opiszę tylko jak ustawić LaseWriter, tak żeby działał z poleceniem lpr z Linux-a.
Dodaj pozycję dla swojej drukarki do pliku printcap. Ja mam zdefiniowaną tylko LaserWriter i mój plik wygląda tak:
lp|Pingo LaserWriter|Theobald Chapin, III:\
:sd=/usr/spool/theobald:\
:lp=/dev/null:\
:pl#63:pw#85:\
:mx#0:\
:sh:sf:\
:lf=/usr/adm/lpd-errs:\
:if=/usr/local/bin/myif:\
:of=/usr/local/atalk/etc/ofpap:
Pierwsza linia definiuje trzy logiczne nazwy, które nie muszą mieć żadnego podobieństwa do nazw, jakie chcesz nadać tej drukarce w kliencie AppleShare. Dlatego nazwałem ją lp, ponieważ jest to nazwa stosowana w większości UNIX-ów. Inne nazwy stosuję tylko po to, żeby wiedzieć co to właściwie za drukarka.
Potem musisz mieć katalog zadań, gdzie demon będzie składował
zadania. Ja nazwałem swój katalog zadań
/usr/spool/theobald w tej samej hierarchii co katalog
poczty.
Pingo$ ls -l drwxrwxr-x 2 root mail 1024 Feb 8 08:46 mail drwxr-xr-x 2 root mail 2048 Feb 8 17:23 mqueue drwxrwxr-x 5 news news 1024 Sep 1 1994 news drwxrwxr-x 2 root lp 1024 Feb 9 13:15 theobald
Stwórz go używając mkdir a potem ustaw właściciela (root), grupę (lp)
Pingo$ chown root.lp theobald
i prawa dostępu
Pingo$ chmod 775 theobald
Potem stworzyłem dwa pliki: lock i status w tym katalogu:
Pingo$ cd theobald Pingo$ touch lock; chown root.root lock; chmod 004 lock Pingo$ touch status; chown root.root status; chmod 664 status
teraz możesz zdefiniować ten katalog jako katalog zadań jak ja to zrobiłem w linii 2.
Jeśli twoja drukarka jest lokalną drukarką dołączoną do urządzenia
takiego jak/dev/lp1, to to jest urządzenie, którego
potrzebujesz. Użyjesz mknod, aby utworzyć to urządzenie jeśli go
jeszcze nie ma. Dla drukarki w AppleTalk nie chcesz właściwie
drukować do żadnego urządzenia, ale wysłać zadanie do tej drukarki
używając programu pap z katalogu
/usr/local/atalk/bin. Zrobi się to przy pomocy filtra psf,
który uruchomi program pap, aby mieć dostęp do drukarki. Dlatego,
po tym jak zadanie zostało wysłane do LaserWriter, jest ono ciągle
w Linux-ie, ponieważ demon drukowania lpd ma na samym końcu wysłać
to zadania na urządzenie. Dlatego zdefiniujemy urządzenie
/dev/null jako urządzenie drukarki, które wyśle twoje
zadanie w próżnię (bo chcesz mieć tylko to co się pojawiło na
drukarce AppleTalk, prawda?). Dlatego w trzeciej linii wpiszemy
:lp=/dev/null:\. Przeczytaj stronę podręcznika systemowego
na temat psf, jeśli masz więcej niż jedną drukarkę AppleTalk i
jeśli masz problemy z używaniem urządzenia /dev/null jako
urządzenia drukarki.
Użyj pól pl i pw dla określenia długości strony (linie) i szerokości (znaki). Polem mx możesz zdefiniować maksymalny rozmiar pliku drukowanego. Jeśli plik jest większy, demon drukarki obetnie go, albo odmówi drukowania. Jeśli ustawisz tę wartość na 0 (mx#0), oznacza to, iż można drukować pliki o nieograniczonych rozmiarach. Uważaj, bo przypadkowo papier może się skończyć jeśli nikt się nie będzie o to troszczyć. A twoja głodna drukarka będzie wołać o papier ! Tak więc radzę nie ustawiać pola mx na 0 jeśli skończyłeś już testować i wszystko jest w porządku.
Polem sh możemy zabronić drukowania strony początkowej (z identyfikatorem właściciela itp.)
Polem sf możemy zabronić drukowania feed forms.
Ja zdefiniowałem do tego celu plik
/usr/adm/lpd-errs. Będziesz musiał stworzyć ten plik samemu
(np. poleceniem touch /usr/adm/lpd-errs)
To jest ważne ! Jak już to opisałem, twoje zadanie zostanie
wysłane do drukarki AppleTalk tylko jeśli zainstalujesz odpowiedni
filtr, który uruchomi program, pap. Pakiet netatalk używa
konceptu hackerskiego, używając filtru psf, ale z różnymi
dołączeniami do niego. psf analizuje nazwę tego dołączenia,
aby dowiedzieć się, czy ma uruchomić pap jeśli podłańcuch jest w
nazwie dołączenia, i odwrócić kolejność drukowania jeśli w nazwie
jest rev. Spójrz na to wydając polecenie:
Pingo$ ls -l /usr/local/atalk/etc lrwxrwxrwx 1 root root 3 Feb 8 14:44 ifpap -> psf lrwxrwxrwx 1 root root 3 Feb 8 14:44 ifpaprev -> psf lrwxrwxrwx 1 root root 3 Feb 8 14:44 ofpap -> psf -rwxr-xr-x 1 root root 49299 Feb 8 14:44 papd -rw-r--r-- 1 root root 35 Feb 9 13:48 papd.conf -rwxr-xr-x 1 root root 11395 Feb 8 14:44 psf lrwxrwxrwx 1 root root 3 Feb 8 14:44 tfpap -> psf lrwxrwxrwx 1 root root 3 Feb 8 14:44 tfpaprev -> psf Pingo$
Tak więc filtr o nazwie ifpap uruchomi pap, ifpaprev
odwróci kolejność stron i uruchomi pap. Zamienia on zwykły
tekst na PostScript, tak żebyś nie skończył na komunikacie z
błędem.
Jedyny filtr jaki musisz zainstalować to of:
:of=/usr/local/atalk/etc/ofpap:
gdzie /usr/local/bin/myif jest prostym skryptem powłoki,
który pozwala mi na przerywanie linii w tekście, które zostały
zapisane programem, który automatycznie łamie linie
(bp. textedit). Niestety filtr psf nie robi nic takiego i
ignoruje ustawienia szerokości papieru. Ja napisałem swój własny
filtr
linebreak.c, który robi to dla mnie i umieść następujące
linie w "myif":
#!/bin/sh /usr/local/bin/linebreak $* | /usr/local/atalk/etc/ifpap $*
Jeśli w ten sposób ustawisz filtr tekstowy, to linbreak będzie
uważał tylko na szerokość strony (ustawioną pw), podczas gdy
ifpap (psf) sprawdza tylko długość. Wygląda na to, że
psf zakłada, że pierwsza linia to 0, tak więc ustaw
pl#63 jeśli chcesz mieć 64 linii na stronie.
Jeśli nie chcesz łamania linii, to po prostu umieść linię:
:if=/usr/local/atalk/etc/ifpap:\
Teraz zapisz swój nowy printcap. Jeśli spróbujesz teraz coś wydrukować, dowiesz się, że jeszcze nie działa, więc czytaj następny paragraf.
Jak wspomniałem wcześniej, UNIX-owa nazwa drukarki w printcapie nie
ma odpowiednika dla nazwy drukarki w AppleTalk. Musisz stworzyć
plik .paprc w swoim katalogu zadań, który będzie zawierał
adres drukarki w AppleTalk. Jest to tylko jedna linia. Zauważ, że
nie musiałem umieszczać nazwy drukarki w cudzysłowia w tym pliku,
ale inni piszą mi, że u nich to działało tylko z cydzysłowami. To
spróbuj najpierw bez cydzysłowów:
Pingo$ cat /usr/spool/theobald/.paprc Theobald Chapin, III:LaserWriter@VLSB
To teraz możesz zaczynać.
Jeśli dostaniesz komunikat o błędzie jak
np. "Turing:LaserWriter@Tech Support": NBP wtedy spróbuj z
cudzysłowami. Może być też tak, że musisz wstawić tylko nazwe przed
dwukropkiem w cudzysłowa, tak: "Theobald Chapin,
III":LaserWriter@VLSB. Jeśli masz jeszcze jakieś problemy, to myśl
i kombinuj ;) NIe znam żadnego uniwersalnego sposobu na rozwiązanie
tego problemu.
Więcej na temat hackowania i różnych obejść z filtrami znajdziesz w sekcji Znane problemy.
Najpierw sprawdź czy demon drukarki jest rzeczywiście uruchomiony:
Pingo$ ps -xa | grep lpd 45 ? SW 0:00 (lpd) 346 pp0 D 0:00 grep lpd Pingo$
Spróbuj wydrukować plik w PostScripcie i plik tekstowy, żeby się
przekonać, że wszystko działa. Przypuszczalnie musisz zrestartować
demona poleceniem lpc. Uruchom lpc i napisz restart lp,
down lp i up lp. Potem sprawdź status:
lpc> status
lp:
queuing is enabled
printing is enabled
no entries
no daemon present
lpc>
lpc> quit
Teraz wydrukuj swój plik poleceniem
Pingo$ lpr -P lp filename
Jeśli wszystko jest w porządku, to plik status w katalogu zadań powienien teraz zawierać najświeższe informacje na temat twojej drukarki:
Pingo$ cat /usr/spool/theobald/status job: Paul; status: busy; source: LocalTalk Pingo$
Jeśli teraz pójdziesz do Mac-a i spróbujesz wybrac swoją nową
drukarkę dowiesz się, że pokaże się ona z nazwą twojego serwera
Linux-owego. To może nie być zbyt zadowalające, dlatego musisz
stworzyć, albo wyedytować plik papd.conf w katalogu etc AppleTalk,
/usr/local/atalk/etc/papd.conf (przeczytaj "man papd"
jeśli chcesz znać więcej szczegółów). Minimum tego co musisz zrobić
to umieszczenie w tym pliku nazwy jaką chcesz nadać drukarce, a na
końcu dopisz :\ tak jak w printcap-ie. W drugiej linii
podajesz nazwę jaką ta drukarka ma w Linux-ie opcją pr. Mój plik
wygląda tak:
Pingo$ cat /usr/local/atalk/etc/papd.conf
Pingo Mac LaserWriter:\
:pr=lp:
Pingo$
Oznacza to, że (domyślna) zmienna lp zawiera nazwę: Pingo Mac LaserWriter dla klienta AppleShare. Dowiesz się również, że teraz użytkownik na Mac-u może drukować bezpośrednio na drukarce Theobald Chaplin III jak i poprzez Linux-a, gdzie nazwa drukarki to Pingo Mac LaserWriter. Dla mnie jest ważne, aby móc drukować bezpośrenio na tej drukarce, a podczas pracy na Mac-u drukowanie poprzez Linux-a wydaje się o wiele szybsze, ponieważ Linux zkolejkuje zadanie i zniknie ono natychmiast z mojego desktopu.
Jeśli chcesz zarejestrować swoją drukarkę w jakiejś strefie
AppleTalk (nie w domyślnej strefie), po prostu podajesz tę strefę
wraz z rozszerzeniem @nazwa_strefy w pliku papd.conf:
MotorsLab@EEAP:\
:pr=ee3rd:
Ta sekcja nie jest jeszcze całkiem gotowa !!!
/etc/princap:
lp:lp=/dev/lp1:sd=/usr/spool/lp1:sh
/usr/local/atalk/etc/papd.conf:
HP LJIIIp:\
:pr=lp:\
:pd=/usr/local/atalk/etc/HP_LaserJet_IIIP.ppd:
Sprawdź szczegóły na stronie Używanie ghostscript-a wraz z Netatalk.
Jeśli masz jakieś problemy podczas drukowania, nawet jeśli działało
kiedy wszystko ustawiałeś tak jak opisałem, to spójrz do
/usr/adm/mesaages (albo do /usr/log/messages albo
/var/log/messages - przyp. tłum.) oraz do
/usr/adm/syslog (patrz poprzednia uwaga). Jeśli tylko
spróbujesz coś wydrukować używając filtru psf, to znajdziesz
podobne linie w wymienionych wyżej plikach:
Feb 12 17:47:52 Pingo ofpap[1443]: starting for ? Feb 12 17:47:52 Pingo ofpap[1443]: sending to pap[1444] Feb 12 17:47:52 Pingo ofpap[1443]: straight text Feb 12 17:47:59 Pingo ofpap[1443]: 1444 done Feb 12 17:47:59 Pingo ofpap[1443]: pausing Feb 12 17:48:01 Pingo ifpap[1447]: starting for ? Feb 12 17:48:01 Pingo ifpap[1447]: sending to pap[1448] Feb 12 17:48:01 Pingo ifpap[1447]: straight text Feb 12 17:48:09 Pingo ifpap[1447]: 1448 done Feb 12 17:48:09 Pingo ofpap[1443]: restarting Feb 12 17:48:09 Pingo ifpap[1447]: done Feb 12 17:48:09 Pingo ofpap[1443]: done Feb 12 18:00:46 Pingo ofpap[1481]: starting for ? Feb 12 18:00:46 Pingo ofpap[1481]: sending to pap[1482] Feb 12 18:00:46 Pingo ofpap[1481]: straight text Feb 12 18:00:51 Pingo ofpap[1481]: 1482 done Feb 12 18:00:51 Pingo ofpap[1481]: pausing Feb 12 18:00:52 Pingo ifpap[1485]: starting for ? Feb 12 18:00:52 Pingo ifpap[1485]: sending to pap[1486] Feb 12 18:00:52 Pingo ifpap[1485]: straight text Feb 12 18:00:57 Pingo ifpap[1485]: 1486 done Feb 12 18:00:57 Pingo ofpap[1481]: restarting Feb 12 18:00:57 Pingo ofpap[1481]: done Feb 12 18:00:57 Pingo ifpap[1485]: done
Jeśli coś nie działa, otrzymasz komunikat w
/usr/adm/syslog jak ten:
Feb 12 10:04:59 Pingo papd[70]: No such printer: "lp" Feb 12 10:04:59 Pingo papd[70]: printcap problem: "lp"
(twoja domyślna zmienna lp nie jest zdefiniowana)
Feb 12 17:02:21 Pingo ofpap[1149]: 1150 died with 1 Feb 12 17:02:21 Pingo lpd[1148]: lp: output filter died (1) Feb 12 17:02:26 Pingo lpd[1148]: lp: Daemon filter 'f' terminated (11) Feb 12 17:04:48 Pingo lpd[1195]: lp: Daemon filter 'f' terminated (11) Feb 12 17:08:03 Pingo lpd[1216]: lp: Daemon filter 'f' terminated (11) Feb 12 17:10:00 Pingo lpd[1228]: cannot execv /usr/local/bin/linebreak|/usr/local/atalk/ifpap Feb 12 17:11:51 Pingo lpd[1244]: /usr/adm/lpd-errs: No such file or directory
(/etc/printcap nie akceptuje strumieni w definicji
if; oto dlaczego używałem skryptu
/usr/local/bin/myif. Zapomniałem także stworzyć pliku
/usr/adm/lpd-errs, który zdefiniowałem w
/etc/printcap)
Najpierw przeczytaj sekcję o
Znanych problemach. Jeśli nie będzie tam nic pomocnego dla ciebie, to
wyślij do mnie list i dołącz do niego pliki /etc/printcap
oraz /usr/local/atalk/etc/papd.conf.
nbplkup pokazuje nazwę drukarki i jej adres, ale ja nie dostaję żadnej odpowiedzi z programu papstatus od tej drukarki.
Dostaję dużo listów od ludzi, którzy mają problemy, więc umieszczę tutaj rozwiązania dla wszystkich. Będzie to rosnąca, nieposortowana lista. Po prostu sprawdź czy twój problem jest tu opisany.
Sprawdź czy nie masz w pliku /usr/adm/lpd-errs czegoś
takiego:
unprintable character (0x9a)!
Jest to problem dotyczący psf, filtru użytego do drukowania. Zlokalizuj plik psf.c w swojej dystrybucji netatalk i uczyń go zapisywalnym
chmod 644 psf.c
Zlokalizuj drugą linię, w której jest łańcuch unprintable
character. Pierwsze wystapienie (z dwóch) powino być w linii 402 a
drugie - w 496 lub podobnie. Druga linia to jest przypuszczalnie
ta, która ci sprawia kłopoty. Zamień
if ( !isascii( *p ) || !isprint( *p )) {
if ( !literal ) {
fprintf( stderr, "unprintable character (0x%x)!\n",
(unsigned char)*p );
return( 2 ); /* Toss job */
}
printf( "\\%o", (unsigned)*p );
na
if ( !isascii( *p ) || !isprint( *p )) {
if ( !literal ) {
fprintf( stderr,
"unprintable character (0x%x) converted to ?!\n",
(unsigned char)*p );
/* return( 2 );*/ /* Toss job */
putchar( '?' ); /* Don't toss job! */
}
else{
printf( "\\%o", (unsigned)*p );
}
Teraz napisz "make" w wierszu poleceń w katalogu netatalk (nie w
tym, w którym jest psf.c, bo make nie będzie w tym przypadku znało
ścieżki do pap !). Potem skopiuj nowe psf do odpowiedniego katalogu
(/usr/local/atalk/etc).
To co się dzieje to: program zamienia niedrukowalny znak na znak "?" i nie przerywa pracy. Może ktoś ma lepszy pomysł na to jak przekonwertować niedrukowalny znak na jego odpowiednik w PostScripcie ?
Ale jeśli to będziesz robił, to uważaj na prawa autorskie w psf !
Jak właśnie wyżej wspomniałem, psf nie obsługuje rozszerzonych
zbiorów znaków. Ale nenscript to potrafi. Ale ponieważ nie
jest to filtr, który mógłby zostać użyty bezpośrednio w
printcap-ie, będziesz musiał to obejść. Ja mam zdefiniowaną
dodatkową drukarkę, która obsługuje zwykły tekst używając
nenscriptu.
/etc/printcap wygląda tak:
#
# Apple LaserPrinter Select 360 on AppleTalk:
#
lp|Pingo LaserWriter|Theobald Chapin, III:\
:sd=/usr/spool/theobald:\
:lp=/dev/null:\
:pl#61:\
:pw#80:\
:mx#0:\
:sh:\
:sf:\
:lf=/var/adm/lpd-errs:\
:if=/usr/local/bin/myif:\
:of=/usr/local/atalk/etc/ofpap:
#
# Special setup for plain text files, to convert to PostScript using nenscript
# instead of psf (which doesn't process the whole ISO characterset)
#
text:\
:sd=/usr/spool/textprinter:\
:lp=/dev/null:\
:mx#0:\
:sh:\
:sf:\
:lf=/var/adm/lpd-errs:\
:of=/usr/local/bin/textfilter:
/usr/local/bin/textfilter jest skryptem w powłoce:
#!/bin/sh /usr/bin/nenscript -P lp -2 -r -T US -i "Werner Eugster"
Niestety nie znalazłem sposobu na zachowanie nazwy pliku do
drukowania i dlatego używam opcji -i z moim nazwiskiem, żeby
oznaczyć wydruk. Może znajdziesz jakiś lepszy sposób używając
np. Unix-owej zmiennej środowiskowej z loginem.
W tym ustawieniu otrzymuję tekst na papierze w układzie poziomym
(opcja -r) w dwóch kolumnach (-2) wysłany na standardową
drukarkę lp. Aby wydrukować zwykły plik tekstowy używam
polecenia
lpr -P text plain.txt
Tak więc przede wszystkim, drukarka zdefiniowana jako text
zamienia zwykły tekstowy plik na PostScript używając nenscript
(który obsługuje pełen zestaw znaków ISO), ktory przekazuje go
dalej do drukarki zdefiniowanej jako lp. Przez to, używając
polecenia lpq zobaczysz, że zadanie drukowania pojawi się przy
drukarce lp i przychodzącego ze standardowego wejścia, co jest
poprawne.
Jeśli ktoś zna jakiś sposób, żeby umieścić na wydruku nazwę pliku, to będę bardzo wdzięczny za tę informację !
To był mój błąd. Sprawdź część powyżej, gdzie opisuję
myif. Musisz dodać $* dwa razy w drugiej linii w pliku, która
teraz wygląda tak:
#!/bin/sh /usr/local/bin/linebreak $* | /usr/local/atalk/etc/ifpap $*
Jest wiele takich problemów. Jeden, o którym dowiedziałem się od Paolo Supino to ten:
"Podczas krótkiej inspekcji wydruku z nbplkup (żeby zobaczyć czy
są tak jakieś dziwne rzeczy), zobaczyłem, że nasza drukarka na
sieci ma ten sam numer co serwer NT (który kolejkuje zadania z
PC-tów). To było źle.
1. Serwer NT jest bardzo złym spoolerem.
2. Powinien on kolejkować tylko maszyny Windows-owe.
3. Pomimo tego, iż nie miał on przechwytywać wszystkiego co przez
niego przeszło - on to robił.
Rozwiązanie: Wyłączyć zupełnie serwer drukowania dla Mac-ów na
NT. Wyedytować plik .paprc w katalogu zadań tak,
żeby wskazywał on bezpośrednio na drukarkę. Zrestartować komputer,
żeby mu się pamięc odświeżyła.
Domyślnie wszystko jest drukowane na papierze ze standardowego zasobnika. Jeśli chcesz tak ustawić drukarkę, aby brała papier z innego zasobnika niż ze standardowego, to spróbuj tego:
Zmodyfikuj swój plik /usr/local/bin/myif i przepuść
wszystko przez program awk, czy jakiś inny, który potrafi zapisać
dodatkową linię do strumienia po nagłówku.
Np. Ja spróbowałem tak:
#!/bin/sh
/usr/local/bin/linebreak $* | awk '{if(NR==1&&$1~"%!"){print;print
"statusdict begin /manualfeed true store end\n";}else{print}}' | /usr/local/atalk/etc/ifpap $*
(upewnij się, że nie ma fizycznych łamań linii w linii
drugiej).
A informuje to drukarkę o tym, że ma wziąć
papier z podajnika ręcznego. Dla innych podajników zamień tekst w
cuszysłowach ("statusdict begin /manualfeed true store
end\n") na odpowiednie polecenie z tej listy:
Podajnik | Polecenie PostScriptu
------------------+---------------------------------------------------
przedni | "statusdict begin 0 setpapertray end"
|
tylny | "statusdict begin 1 setpapertray end"
|
automatyczny | "statusdict begin /manualfeed true store end"
Polecenia PostScriptu do zdefiniowania wyjściowych "szufladek":
Szufladka | Polecenie PostScriptu
------------------+---------------------------------------------------
górna | "0 statusdict /setoutputtray get exec"
|
dolna | "1 statusdict /setoutputtray get exec"
Oczywiście jeśli chcesz zdefiniować podajnik wejściowy i szufladkę wyjściową, to musisz wstawić dwie linie do pliku PostScriptowego.
Chociaż to działa dla wejścia, które już jest PostScriptem. Jeśli
chcesz to osiągnąć dla tekstu, który jest dopiero zamieniany na
PostScript, to musisz zmodyfikować plik psf.c i skompilować
nowy filtr psf. (nie zapomnij zainstalować go w katalogu
/usr/local/atalk/etc !). Wszystko co musisz zrobić, to
znaleźć linię %%!PS-Adobe-2.0 (ok. linii 379, musi to być
funkcja textps(). Dodaj nową linię:
printf( "statusdict begin /manualfeed true store end\n" );
(i znowu - możesz zamienić tekst w cudzysłowach na ten, który ci
odpowiada). Potem skompiluj ponownie psf i zainstaluj go.
Davis Goodman skończył na takim skrypcie myif,
który sprawdza czy chcesz drukować w rozmiarach
listowych czy normalnych. Jeśli jest to normalny, to
wykonywane jest polecenie PostScriptu powodujące wybór tylnego
podajnika, w innym przypadku papier pobierany jest z podajnika
standardowego.
#!/bin/sh
bounding=`grep BoundingBox $8 | cut -d" " -f5 `
if [ "$bounding" = "" ]; then
/usr/bin/awk '{if(NR==1&&$1~"%!"){print;print "statusdict begin 1 setpapertray end\n";}else{print}}' | /usr/local/atalk/etc/ifpap $*
else
/usr/local/atalk/etc/ifpap $*
fi
To działa z Netscape a twoje własne oprogramowanie może przyjmować inne wartości. Załączyłem ten przykład tylko po to, żeby ci wskazać, gdzie należy zacząć jeśli chcesz robić podobne sztuczki.
Jeszcze jeden przykład jest od Tomasa Pospiska, który zdefiniował
nazwy drukarek dla różnych podajników w tej samej drukarce w
/etc/printcap. Żeby wydrukować na papierze z konkretnego
podajnika wysyłasz zadanie na odpowiednią drukarkę. Jego printcap
wygląda tak:
# LaserWriter Pro 630 (Default Tray)
lp:\
:sd=/usr/spool/lp1:\
:lp=/dev/null:\
:pl#63:pw#85:\
:mx#0:\
:sh:sf:\
:lf=/var/log/lp-errs:\
:if=/usr/lib/atalk/filters/myif:\
:of=/usr/lib/atalk/filters/ofpap:
#
# LaserWriter Pro 630 (Manual Tray)
lpm:\
:sd=/usr/spool/lpm:\
:lp=/dev/null:\
:pl#63:pw#85:\
:mx#0:\
:sh:sf:\
:lf=/var/log/lp-errs:\
:if=/usr/lib/atalk/filters/myif_manual:\
:of=/usr/lib/atalk/filters/ofpap:
a filtr myif wygląda tak:
#!/bin/sh
/usr/bin/awk '{if(NR==1&&$1~"%!"){print;print "statusdict begin
/manualfeed true store end\n";}else{print}}' |
/usr/lib/atalk/filters/ifpap $*
Jak dotąd dostałem konstruktywne komentarze i pytania od ludzi z
COM domena 11 EDU (USA) 12 US domena (USA) 1 GOV domena USA 2 NET domena 1 Australia 1 Austria 2 Belgia 1 Francja 2 Niemcy 5 Islandia 1 Włochy 3 Japonia 1 Holandia 1 Portugalia 2 Wileka Brytania 1 Szwajcaria 1
© 13 Marca 1997 Werner Eugster ( eugster@giub.unibe.ch)
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:
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.ippt.gov.pl w katalogu /pub/Linux/JTZ/.
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 sie na nią zapisać, to
wyślij list o treści subscribe jtz Imię Nazwisko na adres
listproc@ippt.gov.pl
doc-linux-pl-2002.06.14.orig/mini/html/BTTV-mini-HOWTO.pl.html 0100664 0001750 0001750 00000065165 07354177140 022225 0 ustar coven coven
Jedną z bardziej interesujących multimedialnych możliwości Linuksa jest fakt, że umożliwia on przechwytywanie i oglądanie obrazów wideo z różnych źródeł. Interfejs programistyczny API video4linux ( http://roadrunner.swansea.uk.linux.org/v4l.shtml) obsługuje wiele różnych typów urządzeń wideo, w tym tunery telewizyjne zbudowane z wykorzystaniem układów bt848 i bt878 firmy Conexant. Ten dokument wyjaśnia, jak korzystać z takich kart pod Linuksem.
Prawa autorskie do tego dokumentu należą do Erica Sandeena (1999).
O ile nie jest stwierdzone inaczej, prawa autorskie dokumentów Linux HOWTO należą do ich autorów. Dokumenty Linux HOWTO mogą być kopiowane i rozpowszechniane w całości lub w części, w jakiejkolwiek formie fizycznej lub elektronicznej, tak długo, dopóki ta klauzula dotycząca praw autorskich pozostaje dołączona do wszystkich kopii. Autor zezwala na dystrybucję komercyjną i zachęca do takowej, jednakże chciałby być poinformowany o takich wypadkach.
Wszelkie tłumaczenia, prace pochodne lub prace zbiorowe z wykorzystaniem dokumentów Linux HOWTO muszą być rozpowszechniane pod warunkiem dołączenia do nich kopii niniejszej informacji o prawach autorskich. Oznacza to, że nie można tworzyć prac pochodnych na podstawie tego HOWTO i jednocześnie nakładać dodatkowych restrykcji na ich rozpowszechnianie. Odstępstwa od tych zasad są możliwe pod pewnymi warunkami; skontaktuj się z koordynatorem Linux HOWTO pod adresem podanym poniżej.
Mówiąc w skrócie, staramy się promować rozpowszechnianie niniejszej dokumentacji tak wieloma sposobami, jak to możliwe. Chcielibyśmy jednakże zachować prawa autorskie do dokumentów HOWTO i wolelibyśmy być powiadamiani o wszelkich planach ich redystrybucji.
Jeśli macie jakieś pytania, skontaktujcie się z Timem Bynumem, koordynatorem Linux HOWTO pocztą elektroniczną pod adresem linux-howto@metalab.unc.edu
Najnowszą oficjalną wersję tego dokumentu można znaleźć pod adresem Linux Documentation Project http://metalab.unc.edu/LDP/.
Dziękuję Ralphowi Metzlerowi i Marcusowi Metzlerowi za napisanie oryginalnego sterownika bttv. Dziękuję Alanowi Coxowi za stworzenie interfejsu programowania Video4Linux, Gerdowi Knorrowi za pracę nad obsługą kart radiowych, kolejne wersje bttv i xawtv. Dziękuję też wszystkim innym za ich wkład w pracę nad obsługą kart TV przez Linuksa. Dziękuję Williamowi Burrowowi za napisanie BTTV HOWTO (o którym dowiedziałem się po tym, jak napisałem ten dokument...). Poprawiłem ten podręcznik dzięki jego pracy.
To HOWTO opiera się w dużej mierze na dokumentacji bttv i xawtv.
Nie ponoszę żadnej odpowiedzialności za informacje zawarte w tym dokumencie. Wszystkich zaleceń, przykładów i/lub innych wskazówek używacie wyłącznie na własne ryzyko.
Wszelkie prawa autorskie należą do właścicieli, o ile nie jest stwierdzone inaczej. Użycie jakiegokolwiek terminu w tym dokumencie nie powinno być uważane za naruszenie ważności żadnego znaku handlowego ani usługowego.
Nazwy produktów lub marek użyte są wyłącznie w celach informacyjnych i nie stanowią podstawy do żadnych roszczeń. Zalecane jest utworzenie kopii zapasowej systemu przed właściwą instalacją bttv, jak również tworzenie kopii zapasowych w regularnych odstępach czasu.
Z pliku README w dokumentacji bttv:
Bttv jest sterownikiem dla urządzeń przechwytujących obraz, opartych na rodzinie układów dekodujących wideo Bt848 firmy Conexant ( http://www.conexant.com). Do tej rodziny należą układy: Bt848, Bt848A, Bt849, Bt878 i Bt879. Jedyne różnice między kartami produkowanymi przez różnych wytwórców to typy tunerów i dodatkowe komponenty na kartach. Na przykład, niektóre karty Hauppauge mają dodatkowy dekoder wideotekstu i/lub dekoder dźwięku. Bttv nie obsługuje wszystkich dodatkowych komponentów. Występują też różnice w typach i ilości wejść (kompozytowe, S-Video).
Następujące karty powinny działać:
Jeśli wiecie, że działają jakieś inne karty, wyślijcie mi, proszę, e-maila, a dołączę je w następnej wersji HOWTO.
Aby uruchomić kartę TV pod Linuksem, potrzebujemy odpowiednich sterowników. Sterownik bttv znajduje się w jądrze począwszy od wersji 2.2.0.
Możemy też zaopatrzyć się w najnowszą wersję pakietu sterownika i używać go z jądrem 2.0.35 lub nowszym. Nie będzie on jednak raczej działał ze starszymi jądrami 2.0.x. Zaktualizowany pakiet bttv można znaleźć pod adresem http://www.thp.uni-koeln.de/~rjkm/linux/bttv.html, a jeszcze nowszy można ściągnąć od Gerda Knorra spod adresu http://www.in-berlin.de/User/kraxel/xawtv.html. W tych pakietach dodano obsługę układów dźwiękowych, między innymi TEA6300, TDA8425, i DPL3518.
Jeśli nie mamy pojęcia o sterownikach bttv, lepiej będzie, jeśli wypróbujemy najpierw wersję bttv dołączoną do ostatniego jądra. Jeśli będziemy mieli z tym kłopoty, lub okaże się, że nasza karta nie jest jeszcze obsługiwana, spróbujmy szczęścia z nowszą serią 0.6, do ściągnięcia z powyższych adresów. Jeśli jesteśmy naprawdę odważni, wypróbujmy serię sterowników 0.7, autorstwa Gerda Knorra. Będą one dołączone do jąder 2.4 i również dostępne są pod adresem http://www.in-berlin.de/User/kraxel/xawtv.html.
Ten dokument opisuje głównie sterowniki jądra 2.2.14. Wspomniane są pewne właściwości nowej serii 0.6. Obecnie brakuje opisu serii 0.7, ponieważ w chwili pisania trwają intensywne prace nad jej opracowywaniem.
Dziękuję Williamowi Burrowowi za tę sekcję.
Jeśli boimy się zdjąć obudowę komputera, przeczytajmy najpierw całe HOWTO i zanotujmy gdzieś informacje o swojej karcie, czyli typ tunera, numery układów scalonych, częstotliwości kryształu (kryształów) itp. Potem znajdźmy kogoś, kto się na tym zna i zainstaluje nam kartę.
W przeciwnym wypadku, zdejmijmy obudowę i zainstalujmy kartę w wolnym gnieździe. Wybierzmy takie gniazdo, które obsługuje zarządzanie magistralą PCI i transfer PCI, jeśli nasza płyta główna umożliwia taki wybór (zobaczmy w instrukcji obsługi płyty). Będzie nam to potrzebne dla trybu odbierania obrazu.
Aby uzyskać dźwięk, możemy połączyć kartę TV i kartę muzyczną na dwa sposoby. Jeden z nich to sposób wewnętrzny. Podłączmy kabel audio CD-ROM-u do wejścia dźwiękowego karty wideo, a wyjście karty wideo podłączmy do wejścia audio na karcie muzycznej, w CD-ROM-ie lub tunerze. Możemy też podłączyć zewnętrzną wtyczkę typu "jack" 1/8 cala (3 mm) z karty wideo do wejścia liniowego audio na karcie muzycznej. Inny sposób to podłączenie wzmacniacza z głośnikami bezpośrednio do wyjścia audio karty TV, jeśli nie mamy karty dźwiękowej lub nie chcemy z niej korzystać (niektóre z nowszych kart z układem bt878 nie mają żadnego wyjścia dźwiękowego, ponieważ transmitują dźwięk w postaci cyfrowej przez szynę PCI. W momencie pisania tego dokumentu ta funkcja nie jest jeszcze obsługiwana).
Źródło wideo przydaje się też, jeśli chcemy sprawdzić, czy karta w ogóle działa. Wiele kart ma osobne wejścia dla sygnału kompozytowego, S-Video oraz, o ile mają tuner radiowy, dla RF (radio frequency).
Aby jądro obsługiwało kartę TV, trzeba je odpowiednio skonfigurować. W
większości nowych dystrybucji Linuksa odpowiednie moduły są już skompilowane.
Jeśli więc w katalogu /lib/modules/2.x.x/misc są moduły
videodev.o, bttv.o i tuner.o, to możemy iść dalej.
Jeśli nie znaleźliśmy odpowiednich modułów, będziemy musieli zrekompilować jądro z włączonymi opcjami:
CONFIG_VIDEO_DEV
oraz
CONFIG_VIDEO_BT848.
Powinniśmy skompilować je jako moduły. Przeczytajmy Linux Kernel HOWTO ( http://www.linuxdoc.org/HOWTO/Kernel-HOWTO.html), aby dowiedzieć się więcej szczegółów na temat rekompilacji jądra.
Jeśli chcemy używać nowszego sterownika z serii 0.6.x, musimy ściągnąć spakowane archiwum z jednej ze wspomnianych stron. Następnie rozpakowujemy je poleceniem
tar -xvzf bttv-0.6.x.tar.gz
i przechodzimy do nowo utworzonego katalogu. Wpisujemy su aby stać się
rootem. Następnie piszemy
make
w głównym katalogu ze źródłami, aby utworzyć sterownik (możemy spokojnie
zignorować informację w pliku INSTALL, która dotyczy modyfikacji
plików makefile i tym podobnych, ponieważ odpowiednie opcje będziemy
przekazywać sterownikowi w postaci parametrów modułu). Następnie
piszemy
make install,
aby zainstalować sterownik. Na koniec wykonujemy
/sbin/depmod -a,
aby uaktualnić informacje o zależnościach międzymodułowych.
http://roadrunner.swansea.uk.linux.org/v4lapi.shtml).
W podkatalogu driver katalogu ze źródłami bttv znajduje się
skrypt MAKEDEV, który utworzy nam cztery urządzenia wideo. Możemy
łatwo zrobić to sami, jeśli mamy tylko jedną kartę TV.
Jako root, wpisujemy:
mknod /dev/video0 c 81 0
chmod 666 /dev/video0
ln -s /dev/video0 /dev/video
mknod /dev/radio0 c 81 64
chmod 666 /dev/radio0
ln -s /dev/radio0 /dev/radio
Jeśli mamy jakieś aplikacje wymagające urządzeń videotext i VBI, również możemy je utworzyć (nie ma ich za wiele). Wpiszmy:
mknod /dev/vtx0 c 81 192
chmod 666 /dev/vtx0
ln -s /dev/vtx0 /dev/vtx
mknod /dev/vbi0 c 81 224
chmod 666 /dev/vbi0
ln -s /dev/vbi0 /dev/vbi
Sterownik bttv składa się z różnych modułów. Każdy może przyjmować wiele opcji, co jest opisane w dodatku do tego dokumentu. Mając tyle modułów i opcji, być może będziemy chcieli ładować je ręcznie, dopóki wszystko nie będzie działało, jak należy. Ponieważ może to spowodować (choć jest to mało prawdopodobne) zwis systemu, nie zaszkodzi wpisać:
sync; sleep 1; sync
aby zapisać bufory systemu plików, zanim pójdziemy dalej. Następnie, jako
root, poleceniem insmod ładujemy moduły. Pierwsze dwa są łatwe,
ponieważ z reguły nie wymagają opcji:
insmod videodev
insmod i2c
Teraz możemy załadować sam moduł bttv:
modprobe bttv
Domyślnie moduł bttv próbuje sam wykryć typ karty. Sprawdźmy
/var/log/messages aby zobaczyć, czy mu się udało. Jeśli nie wykrył
karty właściwie, na końcu polecenia dodajemy opcję card=n,
co wymusza typ karty. n wybieramy z poniższej listy. (Typy
od 0 do 19 są obsługiwane przez sterownik dostarczany z jądrem, bttv-0.6.4h
obsługuje typy od 20 do 27). Możemy też dodać opcję radio=1, jeśli
karta ma tuner FM.
Uwaga! W jądrach serii 2.4.x ze sterownikiem bttv 0.7.x ta lista jest
zmieniona i poszerzona. Przeczytaj
/usr/src/linux/Documentation/video4linux/bttv/CARDLIST, aby
dowiedzieć się więcej (przyp. tłum.).
card=n typ karty
0: Auto-Detect
1: Miro
2: Hauppauge (stare karty na bt848)
3: STB
4: Intel
5: Diamond
6: AVerMedia
7: MATRIX Vision MV-Delta
8: FlyVideo
9: TurboTV
10: Hauppauge (nowe karty na bt878)
11: MIRO PCTV pro
12: Terratec/Vobis TV-Boostar
13: Newer Hauppauge WinCam (bt878)
14: MAXI TV Video PCI2
15: Terratec TerraTV+
16: Aimslab VHX
17: PXC200
18: AVermedia98
19: FlyVideo98 (nowsze karty FlyVideo)
20: Zoltrix TV-Max
21: iProTV
22: ADS Technologies Channel Surfer TV
23: Pixelview PlayTV (bt878)
24: Leadtek WinView 601
25: AVEC Intercapture
26: LifeView FlyKit w/o Tuner
27: Intel Create and Share PCI
Następnie ładujemy moduł tunera:
modprobe tuner type=n
Żeby określić typ tunera, prawdopodobnie będziemy musieli zdjąć obudowę
komputera i obejrzeć kartę. Niektóre karty (Miro i Hauppauge) umożliwiają
automatyczne wykrycie tunera, ale może będziemy musieli podać go sami. Tuner
powinien być oznaczony nazwą firmy. Możemy spojrzeć na kryształy (małe
skrzyneczki z aluminium) na karcie, aby zobaczyć, czy jest to tuner PAL czy
NTSC. Dla systemu PAL kryształ jest oznaczony 28.xxxMHz (gdzie xxx to
trzy cyfry). Oznaczeniem NTSC jest 35.xxxMHz. Po określeniu typu
tunera wybieramy wartość n z następującej listy (typy 8 i 9
znajdują się tylko w bttv-0.6.4h):
type=n typ układu tunera. n jest następujące:
0: tuner Temic PAL
1: tuner Philips PAL_I
2: tuner Philips NTSC
3: tuner Philips SECAM
4: brak tunera
5: tunerPhilips PAL
6: tuner Temic NTSC
7: tuner Temic PAL
8: tuner Alps TSBH1 NTSC
9: tuner Alps TSBE1 PAL
Na końcu ładujemy potrzebne moduły obsługi dźwięku. I znowuż, będziemy musieli uważnie przyjrzeć sie karcie i zobaczyć, jaki mamy układ dźwiękowy. Uwaga: sterowniki dla układów TEA6300, TDA8425, TDA9855 i DPL3518 znajdują sie tylko w wersji bttv 0.6.4h. Ne ma ich w bieżącej (2.2.14) wersji jądra.
modprobe msp3400 albo tea3600 albo tda8425 albo
tda9855 albo dpl3518 (szczegóły i opcje zamieszczone są w
dodatku)
Uruchamiamy teraz nasz ulubiony program video4linux i sprawdzamy, czy działa. Jeśli nie możemy zmienić kanału, upewnijmy się, że załadowaliśmy właściwy moduł tunera. Jeśli nie słychać dźwięku, dwa razy sprawdźmy moduł dźwięku i, jeśli przepuszczamy sygnał audio przez kartę muzyczną, upewnijmy się, że dźwięk nie jest wyciszony.
Wiedząc, jakich modułów i jakich opcji potrzebujemy, możemy zautomatyzować
proces ich ładowania. W tym celu dokonujemy odpowiednich wpisów w pliku
/etc/conf.modules (albo /etc/modules.conf - przyp.tłum.).
Jeśli wówczas uruchomimy jakąś aplikację potrzebującą danego sterownika,
zostanie on załadowany automatycznie.
Ja wpisałem coś takiego:
# TV alias char-major-81 bttv pre-install bttv modprobe -k tuner; modprobe -k msp3400 options bttv radio=1 card=3 options tuner type=2
Pamiętajmy o zmianie tych wpisów, aby moduły i opcje odpowiadały konkretnemu
modelowi karty. (Wykonajmy polecenie /sbin/depmod -a aby upewnić się,
że informacje o zależnościach międzymodułowych są aktualne.)
Skonfigurowaliśmy już jądro i urządzenia, załadowaliśmy odpowiednie moduły. Teraz potrzebna nam aplikacja, żeby oglądać lub przechwytywać obrazy z karty TV. Jest ich sporo:
Pod adresem http://wolf.ifj.edu.pl/~jochym/FlyVideo98/ jest dostępny sterownik dla pilota karty FlyVideo98.
Koniecznie przeczytajmy dokumentację każdej aplikacji, której chcemy używać. Wiele z nich wymaga modyfikacji plików konfiguracyjnych, żeby w ogóle działać! Ponadto, istnieje wiele typów kart TV, dlatego musimy poświęcić czas na przeczytanie dotyczącej ich dokumentacji, gdyż z reguły ustawienia domyślne aplikacji nie będą działały z naszą kartą.
Punkty poprzedzone znakiem "*" są dostępne tylko w serii 0.6.4h.
videodev.o
podstawowy moduł video4linux. Zaliczają się do niego wszystkie
sterowniki wideo (w tym bttv).
i2c.o
standardowy moduł i2c. Zarządza obsługą magistrali i2c, korzystają z
niego wszystkie inne moduły (oprócz videodev.o)
opcje insmod:
scan=1 skanuje szynę w poszukiwaniu urządzeń i2c
verbose=0 każe się zamknąć i2c
i2c_debug=1 dla debugowania. Wysyła cały ruch
(programowy, nie sprzętowy) )na szynie i2c do syslog
bttv.o
sterownik układu przechwytującego obraz bt848
opcje insmod:
remap=adr remapuje pamięć Bt848 do adresu <<20
vidmem=base adres bufora ramek (karty graficznej) >>20
triton1=0/1 dla zgodności z układem Triton1. Ten układ
jest co prawda rozpoznawany automatycznie, ale może to pomóc z innymi
układami
pll=0/1/2 ustawienia pll
0: nie używaj PLL
1: zainstalowany kryształ 28 MHz
2: zainstalowany kryształ 35 MHz
radio=0/1 karta obsługuje radio
card=n typ karty
0: Auto wykrywanie
1: Miro
2: Hauppauge (stare karty na bt848)
3: STB
4: Intel
5: Diamond
6: AVerMedia
7: MATRIX Vision MV-Delta
8: FlyVideo
9: TurboTV
10: Hauppauge (nowe karty na bt878)
11: MIRO PCTV pro
12: Terratec/Vobis TV-Boostar
13: Nowsze Hauppauge WinCam (bt878)
14: MAXI TV Video PCI2
15: Terratec TerraTV+
16: Aimslab VHX
17: PXC200
18: AVermedia98
19: FlyVideo98 (nowsze karty FlyVideo)
*20: Zoltrix TV-Max
*21: iProTV
*22: ADS Technologies Channel Surfer TV
*23: Pixelview PlayTV (bt878)
*24: Leadtek WinView 601
*25: AVEC Intercapture
*26: LifeView FlyKit w/o Tuner
*27: Intel Create and Share PCI
remap, card, radio i pll akceptują do czterech oddzielonych
przecinkiem opcji (jeśli mamy więcej niż jedną kartę TV). Definicje CARD
i PLL z pliku Makefile są używane jako wartości domyślne.
msp3400.o
sterownik dla układów dźwiękowych msp34xx. Jeśli mamy kartę stereo,
prawdopodobnie należy go załadować.
opcje insmod:
debug=1/2 wysyła informacje użyteczne dla debugowania do
syslog. 2 jest bardziej gadatliwe.
*tea6300.o
Sterownik układu tea6300 fader. Jeśli z kartą stereo nie
działa moduł msp3400.o, możemy wypróbować ten. Układ ów można znaleźć na
większości kart STB TV/FM (z reguły kupionych na aukcjach internetowych z
nadwyżek Gateway OEM)
opcje insmod:
debug=1 wysyła informacje użyteczne dla debugowania do
syslog.
*tda8425.o
Sterownik układu tda8425. Kiedyś był on częścią bttv.c, więc jeśli
dźwięk nam działał, ale przestał, załadujmy ten moduł.
opcje insmod:
debug=1 wysyła informacje użyteczne dla debugowania do
syslog.
*tda9855.o
Sterownik dekodera dźwięku / procesora audio tda9855.
opcje insmod:
debug=1 wysyła informacje użyteczne dla debugowania do
syslog.
*dpl3518.o
Sterownik układu dpl3518a Dolby Pro Logic Processor
opcje insmod:
debug=1 wysyła informacje użyteczne dla debugowania do
syslog.
tuner.o
Sterownik tunera. Potrzebujemy go koniecznie, chyba że chcemy
używać tylko kamery lub zewnętrznego tunera...
opcje insmod:
debug=1 wysyła informacje użyteczne dla debugowania do
syslog.
type=n typ układu tunera. n jak poniżej:
0: tuner Temic PAL
1: tuner Philips PAL_I
2: tuner Philips NTSC
3: tuner Philips SECAM
4: brak tunera
5: tuner Philips PAL
6: tuner Temic NTSC
7: tuner Temic PAL
*8: tuner Alps TSBH1 NTSC
*9: tuner Alps TSBE1 PAL
i2c_chardev.o
urządzenie znakowe dla dostępu do szyny i2c. Działa tylko z
jądrami 2.1.x, nie kompilowane domyślnie.
Tłumaczenie to jest chronione prawami autorskimi © Leszka Pietryki. Dozwolone jest rozprowadzanie i dystrybucja na prawach takich samych jak dokument oryginalny.
Jeśli znajdziecie tu jakieś poważne błędy, literówki itp., wyślijcie mi, proszę, e-maila, żebym mógł je poprawić.
Nie ponoszę żadnej odpowiedzialności za ewentualne efekty stosowania się do rad zawartych w tym dokumencie.
W jądrach serii 2.4 konfiguracja przebiega nieco inaczej - moduły szyny i2c
zostały oddzielone, rozszerzono zakres obsługiwanego sprzętu.
Koniecznie przeczytajcie dokumentację w
/usr/src/linux/Documentation/video4linux/.
doc-linux-pl-2002.06.14.orig/mini/html/Bridge+Firewall.pl.html 0100664 0001750 0001750 00000051764 07104371340 022542 0 ustar coven coven
/pub/Linux/sunsite/docs/HOWTO/mini. Dokument ten jest napisany w
standardzie ISO-8859-2.
Bridge jest to inteligentne połączenie pomiędzy dwoma kartami sieciowymi. Firewall jest to inteligentny izolator.
Możesz chcieć bridge'a jeśli masz kilka komputerów:
"Kilka komputerów" to może być np. trzy jeśli mają być rutowane, bridge'owane albo po prostu od czasu do czasu zmieniają swoje miejsce pobytu. Możesz także chcieć mieć bridge tylko dla zabawy, żeby się dowiedzieć co on robi - ja właśnie dlatego sobie go postawiłem.
Jeśli naprawdę chcesz go postawić z pierwszego powodu, to poczytaj lepiej NET-3-HOWTO albo Serial-HOWTO a znajdziesz tam lepsze obejścia.
Firewall jest ci potrzebny jeśli:
Ja tu potrzebowałem tego drugiego. Przepisy na naszym uniwersytecie zabraniały nam grać rolę dostawcy Internet-u dla studentów.
Zacząłem bridge'ować dwie karty sieciowe w maszynie z firewallem a skończyłem na firewall-owaniu wraz z bridge'owaniem bez usuwania jednej z funkcji. Wydaje się to działać znacznie bardziej wydajnie niż każda z konfiguracji osobno. Mogę na przykład wyłączyć firewall a bridge dalej działa albo odwrotnie jeśli chcę być bardziej bezpieczny.
Stawiałbym na to, że kod bridge'a jest tuż nad fizycznym poziomem urządzenia a kod firewalla jest o jeden poziom wyżej, tak że połaczenie bridge'a z firewallem działa tak jakby to była jedność a nie jakby działały równolegle.
-> wej. bridge'a -> wej. firewalla -> jądro -> wyj. firewalla -> wyj. bridge'a
Nie ma innego sposobu na wytłumaczenie dlaczego maszyna może być "konduktorem" i izolatorem w tym samym czasie. W każdym razie wydaje się to działać razem bardzo dobrze. Oto co ja robię ...
Zdobądź konfigurator do bridge'a BRCFG.tgz.
Przeczytaj Multiple-Ethernet, żeby się dowiedzieć jak rozpoznać i skonfigurować więcej kart sieciowych.
Więcej szczegółów na temat magii startowania, które możesz potrzebować jest w BootPrompt-HOWTO.
Może obędzie się bez NET-3-HOWTO. Jest to dobry i długi dokument i będziesz musiał wybrać sobie to czego potrzebujesz.
Po przeczytaniu powyższego dowiesz się, że musisz skompilować
jądro, żeby rozpoznało drugie urządzenie ethernet-owe podczas
startu oraz, że musisz dodać linię do pliku
/etc/lilo.conf i uruchomić lilo:
append = "ether=0,0,eth1"
Zauważ, że jest tu eth1. eth0 jest pierwszą kartą a eth1 jest drugą kartą. Zawsze możesz podać parametry podczas startu kiedy lilo ich oczekuje. Oto przykład dla trzech kart:
linux ether=0,0,eth1 ether=0,0,eth2
Ja używam loadlin.exe, aby uruchomić Linux-a:
loadlin.exe c:\vmlinuz root=/dev/hda3 ro ether=0,0,eth1 ether=0,0,eth2
Zauważ, że to zmusza jądro do szukania podczas startu. Nie będzie
to miało miejsca jeśli załadujesz sterowniki ethernet-owe jako
moduły (ze względów bezpieczeństwa ponieważ kolejność szukania nie
może być określona). Więc jeśli używasz modułów, to będziesz musiał
dodać parametry określające IRQ i port w pliku
/etc/conf.modules - to jest mój przykład:
alias eth0 3c509
alias eth1 de620
options 3c509 irq=5 io=0x210
options de620 irq=7 bnc=1
Możesz sprawdzić czy używasz modułów przez ps -aux i
zobaczenie czy jest proces kerneld i czy w katalogu
/lib/modules/`uname -r` są pliki *.o. (w miejsce
uname -r wstaw wynik tego polecenia). Jeśli masz proces
kerneld albo w podanym katalogu są pliki *.o, to wyedytuj plik
/etc/conf.modules i przeczytaj uważnie stronę podręcznika
systemowego na temat depmod.
Zauważ też, że do niedawna (2.0.25) sterownik 3c509 nie mógł być użyty jako moduł dla więcej niż jednej karty. Widziałem gdzieś łatę, która naprawia tę niedogodność. Może on być w jądrze kiedy to czytasz.
Skompiluj jądro z włączoną opcją bridge.
CONFIG_BRIDGE=y
Ja skompilowałem także z włączonymi opcjami firewalling, IP-forwarding, IP-masquerading i resztą. Ale tylko jeśli chcesz mieć także firewall.
CONFIG_FIREWALL=y CONFIG_NET_ALIAS=y CONFIG_INET=y CONFIG_IP_FORWARD=y CONFIG_IP_MULTICAST=y CONFIG_IP_FIREWALL=y CONFIG_IP_FIREWALL_VERBOSE=y CONFIG_IP_MASQUERADE=y
Nie potrzebujesz tego wszystkiego. To czego potrzebujesz, to standardowa konfiguracja sieci:
CONFIG_NET=y
i nie sądzę, żebyś się musiał przejmować innymi opcjami związanymi z siecią. Wszystkie opcje, których właściwie nie wkompilowałem w jądro mam dostępne jako moduły i mogę je dodać później.
Zainstaluj nowe jądro, uruchom lilo i zresetuj z nowym jądrem. W tym momencie nic się nie powinno zmienić.
Chris twierdzi, że bridge nie powinien mieć adresu IP, ale to nie jest to ustawienie opisane tutaj.
Będziesz chciał używać tej maszyny do łączenia się z siecią więc potrzebujesz adresu i musisz się upewnić, że masz skonfigurowane poprawnie urządzenie "loopback", tak żeby twoje oprogramowanie mogło komunikować się z miejscami, z którymi spodziewa się, że będzie się mogło porozumieć. Jeśli nie będzie tego urządzenia, to serwis nazw albo inny serwis sieciowy może nie działać. Przeczytaj NET-3-HOWTO, ale twoja standardowa konfiguracja powinna już to za ciebie zrobić:
ifconfig lo 127.0.0.1 route add -net 127.0.0.0
Będziesz musiał nadać adres obojgu kartom. Ja dopasowałem swój
/etc/rc.d/rc.inet1 w Slackware 3.x, aby ustawić moje dwie
karty. A ty powinieneś także poszukać gdzie jest konfiguracja sieci
u ciebie i podwoić instrukcje. Załóżmy, że masz już adres:
192.168.2.100 (jest to prywatny zarezerwowany adres sieciowy, ale
nieważne - nikomu nie zaszkodzi jeśli użyjesz tego adresu przez
pomyłkę) wtedy masz już pewnie linię:
ifconfig eth0 192.168.2.100 netmask 255.255.255.0 metric 1
w swojej konfiguracji. Pierwsze co pewnie będziesz chciał zrobić to podzielić przestrzeń adresową na pół, tak że możesz potem te dwie połowy bridge'ować. Więc dodaj linię. która zredukuje maskę tak, że będzie ona adresować mniejszą ilość maszyn:
ifconfig eth0 netmask 255.255.255.128
Spróbuj tego też. Powoduje to obcięcie przestrzeni adresowej do zakresu od .0 do .127.
Teraz możesz ustawić swoją drugą kartę w drugiej połowie adresów. Upewnij się, że nikt jeszcze takiego adresu nie ma. Dla symetrii ja ustawiłem ją na 228 (128+100=228). Każdy adres będzie się tak zachowywał dopóki nie znajdzie się w masce tej pierwszej karty - a nawet wtedy, no może. Unikaj adresów specjalnych takich jak .0, .1, .128 o ile naprawdę wiesz co robisz.
ifconfig eth1 192.168.2.228 netmask 255.255.255.128 metric 1
To powoduje zmniejszenie zakresu adresów drugiej karty do .128 do .255.
Powyższe może być wystarczającą konfiguracją dla działającego bridge'a, ale ja będę miał także firewall i chcę kontrolować fizyczne przeznaczenie niektórych pakietów. Nawet wtedy trzeba się pilnować przed spoofingiem.
Mam małą sieć maszyn dołączonych do hub-a na eth0, więc konfiguruję tam sieć:
route add -net 192.168.2.128 netmask 255.255.255.128 dev eth0
128 byłoby 0 gdybym miał pełną klasę C. "dev eth0" nie jest tu potrzebne ponieważ adres karty zalicza się do tej sieci, ale może być potrzebne dla ciebie.
Na drugiej karcie mam linię idącą prosto do dużego rutera, któremu ufam.
client 129
__ | __
client 1 \ .0 .128 | / net 1
client 2 --- Hub - eth0 - Kernel - eth1 - Hub - Router --- net 2
client 3 __/ .100 .228 .2 | \__ net 3
|
client 254
Dołączam adres tego rutera do tej karty jako statyczny ponieważ inaczej zaliczałby się on do maski tej pierwszej karty i jądro źle kierowałoby pakiety do tego dużego rutera.
route add 192.168.2.2 dev eth1
Ja go nie potrzebuję ponieważ nie mam więcej maszyn w tej połówce przestrzeni adresowej, ale deklaruję sieć także na tej drugiej karcie
route add -net 192.168.2.128 netmask 255.255.255.128 dev eth1
Muszę także wysłać wszystkie nie lokalne pakiety w świat, więc informuję jądro, żeby wysyłało je do dużego rutera:
route add default gw 192.168.2.2
To tyle odnośnie standardowego ustawiania sieci, ale my mamy bridge więc musimy na obydwu (?) kartach słuchać pakietów, które nie są przeznaczone dla nas. Następujące dwie linie powinny się znaleźć w pliku konfigurującym sieć:
ifconfig promisc eth0 ifconfig promisc eth1
Na stronie podręcznika systemowego napisane jest, że allmulti=promisc, ale u mnie to nie działało.
Jedno co zauważyłem, to to, że musiałem przynajmniej drugą kartę ustawić w tryb, w którym odpowiadałaby ona dużemu ruterowi jakie maszyny chowam w swojej sieci.
ifconfig arp eth1
Na wszelki wypadek zrobiłem to samo dla pierwszej karty.
ifconfig arp eth0.
Umieść włączanie bridge'owania w swoim pliku konfiguracyjnym:
brcfg -enable
Powinieneś to próbować w czasie rzeczywistym cały czas oczywiście! Konfigurator bridge'a poda parę liczb. Możesz poeksperymentować włączając i wyłączając porty - jeden za każdym razem.
brcfg -port 0 -disable/-enable brcfg -port 1 -disable/-enable
Polecenie brcfg pokaże ci raport w każdej chwili. Zobaczysz, że bridge słucha, dowiaduje się i potem przekazuje pakiety. (Nie rozumiem dlaczego kod powtarza te same adresy sprzętowe dla obu moich kart, ale nieważne ... HOWTO Chrisa mówi, że to dobrze)
Jeśli cały czas wszystko u ciebie działa, to wypróbuj swoją konfigurację w rzeczywistości - wyłącz obie karty i uruchom swój plik konfiguracyjny:
ifconfig eth0 down
ifconfig eth1 down
/etc/rc.d/rc.inet1
Jeśli masz szczęście, to różne podsystemy (nfs, ypbind, itp) nie zauważą tej zmiany. Nie próbuj tego o ile nie siedzisz przy klawiaturze.
Jeśli chcesz być bardziej ostrożny niż teraz, powinieneś wyłączyć tyle demonów ile się da i odmontować katalogi nfs. Najgorszym co może się stać, to to, że będziesz musiał zrestartować komputer w trybie jednego użytkownika (parametr "single" dla lilo lub loadlin) i zmienić wszystko na stan taki jaki był przed zmianą konfiguracji.
Sprawdź czy na każdym interfejsie jest inny ruch:
tcpdump -i eth0 (w jednym oknie)
tcpdump -i eth1 (w drugim oknie)
Powinieneś się przyzwyczaić do używania tcpdump do szukania przyczyn niektórych zdarzeń, które nie powinny mieć miejsca a mają.
Na przykład szukanie pakietów, które przeszły przez bridge do drugiej karty z wewnętrznej sieci. W tym przykładzie szukam pakietów z maszyny o adresie .22:
tcpdump -i eth1 -e host 192.168.2.22
Potem wyślij ping-a z maszyny .22 do rutera. Powinieneś zobaczyć raport o tym pakiecie.
W tym momencie powinieneś mieć w pełni działający bridge z dwoma adresami. Sprawdź czy możesz je pingować z zewnątrz i z wewnątrz sieci oraz, że możesz się łączyć z jednej sieci do drugiej i z zewnątrz.
Powinieneś przeczytać Firewall-HOWTO.
Dowiesz się stamtąd skąd wziąć ipfwadm jeśli jeszcze go nie masz. Są jeszcze inne narzędzia, które możesz ściągnąć, ale ja nie zrobiłem nic dalej bez ipfwadm. Jest on dość przyjazny i niskopoziomowy ! Widzisz dokładnie co się dzieje.
Wkompilowałeś IP-forwarding i -masquerading w jądro, więc możesz sprawdzić czy firewall jest w swoim domyślnym (akceptującym) stanie poleceniami:
ipfwadm -I -l
ipfwadm -O -l
ipfwadm -F -l
I tak odpowiednio wyświetlane są zasady dotyczące wchodzących, wychodzących i przekazywanych (masquerading) pakietów. -l oznacza "list".
Możliwe, że wkompilowałeś także zliczanie (accounting):
ipfwadm -A -l
Powinieneś zobaczyć, że nie ma zdefiniowanych żadnych zasad i że domyślnym stanem jest akceptacja wszystkich pakietów. Możesz wrócić do tego stanu w każdej chwili pisząc:
ipfwadm -I -f
ipfwadm -O -f
ipfwadm -F -f
-f oznacza "flush". Możliwe, że musisz tego użyć.
Chcę po prostu odciąć resztę świata od swojej sieci wewnętrznej i
nic więcej, tak więc ostatnią (domyślną) zasadą będzie ignorowanie
wszelkich pakietów pochodzących z wnętrza sieci i zaadresowanych na
zewnątrz. Umieściłem wszystkie te zasady (w takiej kolejności) w
/etc/rc.d/rc.firewall i wykonuję ten skrypt z
rc.local podczas startu.
ipfwadm -I -a reject -S 192.168.2.0/255.255.255.128 -D 0.0.0.0/0.0.0.0
-S oznacza źródłowy (source) adres/maskę. -D to adres/maska przeznaczenia (destination).
Ten format dla ipfwadm-a jest trochę długi. Program ten jest inteligentny jeśli chodzi o nazwy sieciowe i niektóre popularne skróty. Zajrzyj do podręcznika systemowego.
Przypuszczalnie bardziej wygodnie jest określać niektóre lub wszystkie zasady dla wychodzącej połowy firewall-a używając opcji -O zamiast -I, ale ja określę je dla części wchodzącej.
Przed zasadami domyślnymi muszę umieścić kilka zasad, które służą jako wyjątek od ogólnego zabronienia dostępu do serwisów zewnętrznych dla klientów wewnętrznych.
Chcę traktować adres firewall-a w sieci wewnętrznej specjalnie. Zabronię logowania się na tę maszynę o ile ktoś nie ma specjalnego pozwolenia, ale jak już się tam zalogują, to powinni mieć możliwość kontaktu ze światem.
ipfwadm -I -i accept -S 192.168.2.100/255.255.255.255 \
-D 0.0.0.0/0.0.0.0
Chcę także, aby klienci wewnątrz sieci mogli się komunikować z firewall-em. Może mogą go zmusić, aby wypuścił ich na zewnątrz !
ipfwadm -I -i accept -S 192.168.2.0/255.255.255.128 \
-D 192.168.2.100/255.255.255.255
W tym momencie sprawdź czy możesz się dostać do klientów wewnątrz sieci z zewnątrz poprzez telnet i nie możesz się wydostać. Oznacza to, że możesz się kontaktować, ale klienci nie mogą ci odpowiedzieć. Powinieneś móc się dostać wszystkimi drogami jeśli używasz firewall-a jako maszyny przejściowej. Spróbuj także rlogin i ping z uruchomionym tcpdump na jednej z kart. Powinieneś umieć odpowiednio wykorzystać to co robisz.
W następnym kroku poluźniłem trochę zasady protokół po protokole. Chcę, na przykład, wpuszczać ping-i, żeby dostać odpowiedź.
ipfwadm -I -i accept -P icmp -S 192.168.2.0/255.255.255.128 \
-D 0.0.0.0/0.0.0.0
-P icmp to magiczne zaklęcie dla konkretnego protokołu.
Dopóki trzymam ftp-proxy pozwalam także na odwołania ftp na
zewnątrz przez konkretne porty. Te docelowe porty na odległej
maszynie to: 20, 21, 115
ipfwadm -I -i accept -P tcp -S 192.168.2.0/255.255.255.128 \
-D 0.0.0.0/0.0.0.0 20 21 115
Bez działającego serwera nazw nie mógłbym mieć działającego
sendmail-a. Zamiast ustawić serwer nazw na firewall-u, pozwoliłem
mu przepuszczać zapytania skierowane do najbliższego serwera nazw i
umieściłem jego adres w plikach /etc/resolv.conf u
klientów - nameserver 123.456.789.31 - w osobnej linijce.
ipfwadm -I -i accept -P tcp -S 192.168.2.0/255.255.255.128 \
-D 123.456.789.31/255.255.255.255 54
To, którego portu używa dany serwis możesz dowiedzieć się z programu tcpdump. Po prostu uruchom dany serwis przez ftp, albo telnet na danym kliencie i szukaj go na portach wejściowych albo wyjściowych na danym kliencie:
tcpdump -i eth1 -e host client04
Plik /etc/services jest drugim ważnym źródłem.
Aby pozwolić na dostęp poprzez telnet do firewall-a z zewnątrz, musisz pozwolić klientom na wołanie na konkretnym porcie. Rozumiem dlaczego jest to potrzebne dla ftp - z powodu serwera, który ustawia strumień danych na końcu - ale nie jestem pewien dlaczego telnet także tego potrzebuje.
ipfwadm -I -i accept -P tcp -S 192.168.2.0/255.255.255.128 ftp telnet \
-D 0.0.0.0/0.0.0.0
Są problemy z pewnymi demonami, które sprawdzają nazwę firewall-a, żeby zdecydować jaki jest ich adres sieciowy. rpc.yppasswdd to jeden, z którym miałem problemy. Nalegał na rozsyłanie informacji, że jest on poza firewall-em (na drugiej karcie). To znaczy, że klient wewnątrz nie może się z nim porozumieć.
Zamiast uruchamiania IP-aliasing-u, albo zmiany kodu demona,
odwzorowałem nazwę dla karty wewnętrznej u klientów w ich plikach
/etc/hosts.
Teraz chcesz sprawdzić czy wciąż możesz połączyć się telnet-em, rlogin-em lub ping-ować z zewnątrz. Z wewnątrz powinieneś móc ping-ować na zewnątrz. Powinieneś móc także połączyć się telnet-em z firewall-em z wewnątrz a później móc robić wszystko.
To tyle. W tym momencie możesz się pouczyć o rpc/Yellow Pages i interakcji z plikiem haseł. Sieć chroniona firewall-em powinna działać tak, aby nie pozwalać nieuprzywilejowanym użytkownikom na logowanie się na firewall-u i przez to na wychodzenie na zewnątrz.. A to już historia na inne HOWTO.
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:
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
doc-linux-pl-2002.06.14.orig/mini/html/Bridge.pl.html 0100664 0001750 0001750 00000015032 07104371340 020765 0 ustar coven coven
/pub/Linux/sunsite/docs/HOWTO/mini. Dokument ten został
napisany w standardzie ISO-8859-2.
/etc/lilo.conf
append = "ether=0,0,eth1"
Jeśli masz trzy interfejsy na swoim bridge'u, to wpisz taką linię:
append = "ether=0,0,eth1 ether=0,0,eth2"
Więcej urządzeń można dodać zwiększając ilość parametrów
ether. Domyślnie jądro szuka tylko jednej karty Ethernet, a
jak już znajdzie to przerywa dalsze szukanie. Linia ta informuje
jądro, aby szukało dalej urządzeń Ethernet jak już znajdzie jedno.
Alternatywnie możesz użyć parametru podczas startu:
linux ether=0,0,eth1
albo z trzema interfejsami:
linux ether=0,0,eth1 ether=0,0,eth2
BRIDGING./etc/sysconfig/network-scripts/ (w
dystrybucji RedHat) i skopiuj plik ifcfg-lo0 na
ifcfg-eth0 i ifcfg-eth1. W tych dwóch plikach *-eth zmień
linię DEVICE=lo na DEVICE=eth0 i DEVICE=eth1. W
innych dystrybucjach może to być rozwiązane inaczej, zrób to co
musisz ! Jeśli jest więcej niż dwa interfejsy na tym bridge'u,
upewnij się, że zrobiłeś dla nich odpowiednie urządzenia.
ifconfig promisc eth0 ; ifconfig promisc eth1
Wszystkie interfejsy, do których są podłączone segmenty mające być
bridge'owane muszą być w tym trybie.
brcfg -ena
tcpdump -i eth0 (w jednym oknie)
tcpdump -i eth1 (w innym oknie)
Uruchom jakiegoś sniffer-a czy tcpdump-a na innej maszynie, żeby
zweryfikować, że bridge oddziela poprawnie segmenty.
P1: Dostaję komunikat: "ioctl(SIOCGIFBR) failed: Package not
installed". Co on oznacza ?
O1: Nie masz włączonej opcji BRIDGING w jądrze. Zdobądź jakieś jądro 2.0 lub wyższe i skompiluj je z tą opcją włączoną.
P2: Maszyny z jednej strony nie mogą ping-ować drugiej strony !
O2: - Czy włączyłeś bridge'owanie poleceniem brcfg -ena ?
(brcfg powinien pisać bridging is ENABLED.)
- Czy włączyłeś tryb "bezwzględny" na urządzeniach ?
(wydaj polecenie ifconfig. Flaga PROMISC powinna być
włączona dla wszystkich interfejsów)
- Używając złożonych adapterów interfejsów, upewnij się, że
odpowiedni interfejs jest włączony. Może musisz użyć
programu konfiguracyjnego, który przyszedł wraz z kartą.
P3: Nie mogę się połączyć telnet-em, ftp z bridge'a ! Czemu ?
O3: Dlatego, że interfejsy na bridge'u nie mają przypisanych adresów IP. Bridge ma być przeźroczystą częścią sieci.
P4: Co muszę zrobić, żeby ustawić ruting ?
O4: Nic ! Cały ruting jest obsługiwany przez kod w jądrze. Żeby zobaczyć znalezione przez bridge adresy ethernet-owe użyj programu brcfg:
brcfg -deb
P5: Bridge niby działa, ale dlaczego traceroute go nie pokazuje ?
O5: Z powodu natury bridge'a - traceroute NIE powinien pokazywać bridge'a jako części ścieżki. Bridge ma być przeźroczystą częścią sieci.
P6: Czy muszę wkompilować IP_FORWARD w jądro ?
O6: Nie. Kod bridge'a w jądrze zajmuje się transportem
pakietu. IP_FORWARD jest dla ruterów, które mają przypisane
adresy IP do swoich interfejsów.
P7: Dlaczego według programu brcfg adresy ethernet-owe dla portu 1 i 2 są takie same - nie powinny być różne ?
O7: Nie. Każdemu portowi na bridge'u specjalnie przypisywany jest ten sam adres ethernet-owy przez kod bridge'a.
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:
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.ippt.gov.pl w katalogu /pub/Linux/JTZ/.
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
listproc@ippt.gov.pl
doc-linux-pl-2002.06.14.orig/mini/html/Callback.pl.html 0100664 0001750 0001750 00000036014 07104642140 021267 0 ustar coven coven
Czekam na wszystkie opinie, czy to dobre, czy złe, na temat zawartości tego dokumentu. Starałem się, aby informacje w nim umieszczone były jak najbardziej pewne i dokładne. Daj mi znać gdy znajdziesz jakieś błędy.
Dziękujemy ludziom którzy przysłali by poprawki lub sugestie. Ich wkład uczynił ten dokument o wiele lepszym, niż gdybym tworzył go sam. Wysyłaj komentarze, sugestie i poprawki na adres email autora podany powyżej. Nie mam nic przeciwko odpowiadaniu na pytania, jednak radzę najpierw przeczytać dokument w całości.
Copyright ? 1999 by Paweł Skonecki. Ten dokument może zostać rozpowszechniany na warunkach ustalonych przez Licencję Linux Documentation Project. Skontaktuj się z autorem, jeśli nie jesteś w stanie otrzymać licencji.
Ta dokumentacja jest darmowa. Jest rozpowszechniana z nadzieją, że okaże się użyteczna, jednak bez żadnej gwarancji.
Większość z nas używa sieci korporacyjnych lub uczelnianych w swoim miejscu pracy. Pojawia się jednak potrzeba skorzystania z sieci w domu lub w innym miejscu. Może przecież okazać się iż pracownicy będący w terenie muszą mieć dostęp do danych znajdujących się w Internecie lub też w sieci firmowej. Możemy mieć też do czynienia z sytuacją kiedy firmie będzie opłacać się zapłacić pracownikom za połączenia telefoniczne aby pracowali w domach. Sądzę że optymalnym rozwiązaniem jest zainstalowanie na serwerze z Linuxem i oprogramowania typu callback.
Callback to nic innego jak oddzwanianie pod wskazany numer na koszt firmy. Spróbuję przedstawić jego działanie. Osoba posiadająca odpowiednie uprawnienia dzwoni pod numer modemu będącego w serwerze z Linuxem, tam weryfikuje się po raz pierwszy. Wtedy po stronie użytkownika następuje "zawieszenie modemu" na stan oczekiwania. W tym czasie serwer dzwoni po wskazany numer. Użytkownik weryfikuje się powtórnie. Następuje zestawienie połączenia a impulsy biją po stronie serwera (czyli w firmie), osoba do której oddzwania serwer płaci jedynie za zainicjowanie połączenia.
Podwójna weryfikacja oraz dodatkowe parametry w programie callback uniemożliwiaj by osoby nie powołane wtargnęły na nasz rachunek. Można także ograniczyć osobom korzystającym z tej usługi do dostęp do sieci wewnętrznej lub też całego Internetu. Callback jest elastyczny i pozwala na wiele opcji w stosunku do osób go używających.
W poniższym mini-HOWTO postaram się przedstawić konfigurację serwera callback na Linuxe wytłumaczę jak dostosować swoją maszynę do odbierania połączeń.
Aby wszystko zadziałało jak należy potrzebujemy niezłego modemu do naszego serwera z Linuxem. W tej mierze istniej ,a różne preferencje administratorów i nie można wskazać tutaj żadnej marki jako faworyta. Warto jednak pamiętać przyzakupie o pewnych zasadach jakimi należy się kierować.
Jeżeli mamy już modem który będziemy wykorzystywać do komunikacji pomiędzy serwerem a osobami do niego dzwoniącymi. Musimy go zainstalować go w systemie. Aby to zrobić musimy sprawdzić na jaki com-ie jest nastawiony modem i czy nie pokrywa się z już wykorzystywanym. Jeżeli tak jest to trzeba przestawić modem na kolejny wolny com.
Instalacja jest prosta i nie powinna nastręczać problemów. Wystarczy że będziemy się trzymać zasad jakie istniej ,a w systemie.
Aby Linux "zobaczył" modem należy poprowadzić połączenie symboliczne z com-a do urządzenia /dev/modem. Przykładowo jeżeli mamy modem na com 2 piszemy:
ln -s /dev/cua1 /dev/modem
sprawdzamy teraz komendą ls -l czy wszystko jest w porządku:
lrwxrwxrwx 1 root root 4 Dec 28 15:28 modem -> cua1
Jeżeli wynik jest jak powyżej to oznacza że tak właśnie się stało. Jeżeli modem znajduje się na innym com-ie winniśmy zastosować się do poniższych zasad i poprowadzić odpowiednie połączenie symboliczne.
Sprawdzamy teraz czy wszystko chodzi przy pomocy minicoma, który powinien znajdować się w większości dystrybucji. Przy jego pomocy dzwonimy pod jakikolwiek numer gdzie znajduje się modem. Teraz czas na dzwonienie do nas ....
Pierwszym krokiem w udostępnieniu usługi callback na Linuxe jest ustawienie odpowiednich parametrów w jądrze systemu. W tym celu musimy sprawdzić czy nasze jądro systemu obsługuje protokół ppp. Jeżeli tak nie jest to powinno się w kompilować go w jądro systemu albo pozostawić jako moduł do ładowania. Nie jest to miejsce na przedstawiane tego problemu. Dlatego też proszę zapoznać się z Kernel-HOWTO.
Jeżeli już mamy odpowiednio przygotowane jądro czas zabrać się za konfigurację oprogramowania. W tym celu winniśmy zainstalować na naszym serwerze pakiet o nazwie mgetty-sendfax, ponieważ on zawiera w sobie program do oddzwaniania. Nie jest to jego jedyna możliwość, może także wysyłać fax-y oraz pracować jako access-server.
Tu warto wspomnieć o pracy callback-u. Kiedy inicjujemy połączenie z serwerem następuje pierwotna weryfikacja użytkownika. Poproszony jest on o wpisanie hasła a kiedy to uczyni następuje "zawieszenie" modemu po stronie dzwoniącego a serwer oddzwania pod wskazany numer związany z użytkownikiem. Jeżeli nastąpi połączenie następuje drugi monit o username oraz hasło. Jeżeliwszystko pójdzie dobrze to połączenie zostaje zestawione pomiędzy komputerem lokalnym i zdalnym (user uruchomi protokół ppp po stronie serwera).
Tak więc cała operacja składa się z dwóch elementów. Mamy więc do czynienia z dwoma rodzajami użytkowników: pierwszy to użytkownik do callbacku a drugi to ten kóry ma uruchomić protokół ppp po stronie serwera.
Najpierw zajmijmy się drugim z nich. Zakładamy konto o dowolnym username testowo niech to będzie user pppuser.
pppuser:klkIOM89mn65H:230:PPP Dialin:/home/pppuser:/etc/ppp/ppplogin
Następnie zmieniamy mu hasło. Jak można zauważyć nie ma on normalnego shall-a do logowania ale pliczek w /etc/ppp/ppplogin. Musimy go własnoręcznie przygotować.
Przechodzimy do tego katalogu i przy pomocy jakiegokolwiek edytora tworzymy plik i wprowadzamy odpowiednie parametry np.: vi ppplogin. Wewnątrz niego wpisujemy.
#!/bin/sh exec /usr/sbin/pppd -detach 192.168.1.1:192.168.1.2
gdzie adres 192.168.1.1 to adres serwera w którym jest modem a adres 192.168.1.2 to adres jaki przypisaliśmy naszemu modemowi. Pamiętajmy nadać temu plikowi prawo wykonywania.
Ponieważ ppp domyślnie sprawdza co znajduje się w pliku /etc/ppp/options musimy go stworzyć aby wpisać odpowiednie wartości.
Podobnie jak w powyższym przypadku tworzymy plik przy pomocy dowolnego edytora i wpisujemy odpowiednio:
netmask 255.255.255.0 proxyarp lock crtscts modem
Najważniejsza z powyższych opcji jest proxyarp, umożliwia on wyjście na świat poprzez modem w serwerze. Jej brak może być korzystny jeżeli nie chcemy aby nasi pracownicy używali Internetu a jedynie sieci lokalnej. Pozostałe z nich oprócz netmask (tego nie trzeba tłumaczyć), dotyczą kontroli modemu.
Teraz przechodzimy do konfiguracji modemu w systemie w taki sposób aby zaraz po jego starcie był gotowy do pracy czyli odbierania połączeń.
Uruchamiamy dowolny edytor a w nim plik /etc/inittab gdzie dopisujemy poniższą linę.
s1:2345:respawn:/sbin/mgetty ttyS1 -D /dev/ttyS1 vt100
jest ona prawidłowa dla modemów które znajdują się na com2, jeżeli jest inaczej poprawiamy ją. Np dla com-a 1 wyglądać powinna
s0:2345:respawn:/sbin/mgetty ttyS0 -D /dev/ttyS0 vt100
Wykonujemy teraz polecenie init q i jeżeli
nie mamy informacji o błędach w logach sytemu przechodzimy do następnego
etapu.
Wracamy do katalogu /etc/ppp gdzie tworzymy plik options.ttyS1 (jeżeli mamy modem na com 1 options.ttyS0) a w nim wpisujemy adesy IP.
IP_localne:IP_dla_modemu_zdalnego
dla naszej sieci będzie to 192.168.1.1:192.168.1.2
Mamy już wiele - przed zadzwonieniem do naszego systemu, sprawdzamy co znajduje się w pliku /etc/mgetty+sendfax/login.config
Najważniejsza jest linia podobna do tej:
/AutoPPP/ - a_ppp /usr/sbin/pppd auth -chap +pap login detach kdebug 7 debug
Pozostałe możemy zaznaczyć znakiem #. Ważną sprawą jest także nadanie odpowiedniego suida demonowi ppp, tak aby użytkownik pppuser mógł go uruchomić oraz podnieść na nim interfejs.
chmod u+s /usr/sbin/pppd
czego efektem będzie
-rwsr-xr-x 1 root root 106892 Jan 11 1999 /usr/sbin/pppd
Od tego momentu użytkownik pppuser będzie mógł uruchomić demona ppp. Warto dopisać zmianę preferencji pppd w cronie, u mnie po restarcie systemu dochodziło do samoczynnej zmiany preferencji. Aby zweryfikować nasze dokonania dzwonimy pod numer naszego serwera. Jeżeli robimy to z Windows-o'w wywołujemy okno terminala a jeżeli wykorzystujemy do tego Linuxa to poprawiamy skrypty z których korzystamy dzwoniąc do naszego provaidera. Logujemy się do systemu jako pppuser z haslem mu nadanym. Mam nadzieję że wszystko jest w porządku.
Możemy dodzwaniać się już do naszego Linuxa. Pora teraz na to aby on do nas zadzwonił. Nie wymaga to specjalnego już wysiłku wystarczy wyedytować jeden plik. Zanim jednak to zrobimy musimy zebrać numery telefonów od osób które maj ,a korzystać z tej usługi. Sprawdzamy teraz czy w katalogu /etc/mgetty+sendfax znajduje się plik o nazwie callback.config. Jeżeli tam się znajduje to pozostawiamy go w spokoju. Można wypełnić go treścią ale nie ma najmniejszej potrzeby ponieważ jego pusta zawartość nie ma wpływu na funkcjonowanie callbacku. Ważne tylko aby tam był.
Teraz czas na wpisanie numerów telefonów jakie wcześniej zebraliśmy. Będziemy kreować pseudo użytkowników powiązanych z numerami ich telefonów.
W tym celu wpisujemy do pliku /etc/mgetty+sendfax/login.conf linijkę tekstu podobną do poniższej
call - - /usr/sbin/callback - S 123456
gdzie call to pseudo użytkownik potrzebny do zainicjowania połączenia zwrotnego, a linia /etc/mgetty+sendfax/ uruchamia program który oddzwania pod wskazany numer (w tym przypadku jest to 123456). Podobnie czynimy z innymi użytkownikami przypisując pseudo użytkownikom poszczególne numery telefonów. Postaram się teraz wytłumaczyć jak całą operacja wygląda w praktyce. Gdy dzwonimy do naszego serwera ten prosi nas o weryfikację. Wtedy to logujemy się jako pseudo użytkownik, w tym przypadku call. Skrypt w naszym komputerze zawesza modem w oczekiwaniu a połączenie zostaje przerwane. Program callbeck zaczyna działać i oddzwania do nas. Weryfikujemy się powtórnie jako pppuser zestawiamy połączenie oraz postawienie interfejsu ppp na serwerze. I to już wszystko.
Czeka nas teraz skonfigurowanie stacji roboczych pracujących z naszym serwerem.
W przypadku Windows operacja jest dość prosta. Instalujemy Dial-up dla naszego numeru dostępowego a następnie we właściwościach modemu znajdujemy zakładkę "Właściwości" --> Rozszerzone ---> Ekstra gdzie wpisujemy
&c0 s0=1
Zamykamy okienko i dzwonimy. Logujemy się według opisu powyżej. Gdy chcemy zastosować Linux-a, to musimy odwołać się do skryptów. Trudno jest podać jakiś jeden dobry skrypt dla naszego Linuxa. Ważne jest to aby mieć dobrze skonfigurowane ppp w systemie (sprawdź to dzwoniąc jako pppuser najpierw przez skrypty).
Poniżej skrypty napisane przez A. Góździa. Najlepiej jak wsadzisz wszystko do katalogu /etc/ppp i tam będziesz odpalał swoje skrypty. Nie musisz tego koniecznie robić tego w tym miejscu jest to tylko moja sugestia. Dokładnie o pisaniu skryptów pod Linuxem możesz poczytać w PPP-HOWTO.
Najpierw jednak plik konfiguracyjny dla demona ppp (przykład dla modemu na comie 2).
/etc/options lock defaultroute noipdefault modem /dev/cua1 33600 crtscts debug passive asyncmap 0
I właściwe skrypty:
#!/bin/bash teksta="Polaczenie nieudane" tekstb="Chyba bedziesz polaczony" # /sbin/setserial /dev/cua1 spd_vhi killall -INT pppd 2>/dev/null rm -f /var/lock/LCK* /var/run/ppp*.pid (/usr/sbin/pppd -detach /dev/ttyS1 115200 \ connect "/usr/sbin/chat -v -f /etc/ppp/pppcallback" &) || \ (echo $teksta; ls marsss >/dev/null; exit 1) echo $tekstb exit 0
TIMEOUT 60 ABORT 'ERROR' ABORT 'BUSY' ABORT 'NO ANSWER' ABORT 'NO DIALTONE' ABORT '\nVOICE\r' ABORT '\nRINGING\r\n\r\nRINGING\r' '' AT&FH0 'OK-+++\c-OK' 'AT&C0S0=1' TIMEOUT 75 OK ATDT5376443 CONNECT '' ogin:-ogin: ppp_pseudouser '\nNO CARRIER\r' '' TIMEOUT 180 '\nRING\r' AT&C1A CONNECT '' TIMEOUT 20 ogin:-ogin: pppuser sword:-sword ppp
Powyższe dwa skrypty powinny wystarczyć dla prawidłowego funkcjonowania całości. Pozostaje teraz odpalić ppp-call :)
Jak widać konfiguracja oddzwaniania nie jest skomplikowana i polega głównie na prawidłowym zestawieniu serwera ppp na Linuxie. Nie znam lepszej drogi na zrobienie acces-servera. Przedstawiona konfiguracja jest wynikiem prób i błędów, można zrobić ją całkowicie inaczej. Dlatego proponuję przejrzenie wszelkiej dokumentacji do tego zagadnienia to jest man pppd, NET3-HOWTO oraz PPP-HOWTO.
Callback może być przyjemną alternatywą w pracy zdalnej.
Inne moje dokumenty znajdziesz ftp://ftp.fizyka.umcs.lublin.pl/pub/priv/stona
Paweł Skonecki
e-mail: stona@fizyka.umcs.lublin.pl doc-linux-pl-2002.06.14.orig/mini/html/Coffee.pl.html 0100664 0001750 0001750 00000040617 07104371340 020767 0 ustar coven coven
Popularna kawa wśród programistów, ponieważ nie wymaga długiego przygotowania i nadzoru, tak jak programy komercyjne. Jej doskonały smak zainspirował tysiące programistów do napisania wyśmienitych programów, napisanych w pierwszych godzinach dnia. Windowsy na przykład zostały napisane o 5:00 rano, dzięki tej kawie. Wynik gwarantowany.
Nescaffe jest dosyć mocną kawą, gotowaną przez nalewanie gorącej wody do mieszaniny kawy, cukru i wody. Zazwyczaj powinno się brać jedną łyżkę kawy i jedną łyżkę cukru, oraz trochę wody w celu zmieszania. W tym czasie powinna zagotować się gorąca woda. Wtedy zmieszaj ją z resztą - możesz dodać mleka. Chociaż możesz używać czegoś prostszego niż ekspres do kawy do zagotowania wody, wiele razy widziałem powyższą procedurę.
Popularna wersja powyższej kawy. Właściwie nie jest potrzebny ekspres do kawy, a lodówka do otrzymania zimnej wody i kostek lodu.
Trudny przepis. Przeczytaj coffe-faq (zobacz odnośniki)
Ogólny schemat wygląda tak:
--------- 0-5V --------- ~220V -----------------
| PC |===>===| Obwód |========|Ekspres do kawy|
--------- --------- -----------------
Celem jest wzięcie napięcia kontrolującego z komputera, które będzie napędzać elektrycznie odizolowany układ z przekaźnikiem lub triakiem. Jeżeli twój ekspres do kawy jest duży (więcej niż 200W), musisz wybrać przekaźnik, a jeśli nie, wystarczy triak.
Wszystkie układy tu przedstawione zostały przetestowane raz albo więcej, ale TY ODPOWIADASZ ZA SKUTKI UŻYWANIA. Jeżeli nie masz doświadczenia z elektroniką, NIE baw się z tym, inaczej może ci coś nie wyjść...
Powinieneś być bardzo ostrożny przy eksperymentach z 220V - można używać odpowiedniego bezpiecznika.
Oto prosty przykład pobrania napięcia 0-5V z portu równoległego komputera.
Widok od tyłu
Męskie złącze ----- Pin 10 - ACK
DB25 | | Pin 9 - D7
| | Pin 2 - D0
~Strobe v v v Pin 1 -
_________________________________________________________
/ \
\ 13 12 11 10 9 8 7 6 5 4 3 2 1 /
\ /
\ 25 24 23 22 21 20 19 18 17 16 15 14 /
\___________________________________________________/
Pin 1 to ,,Strobe'' (logika odwrotna)
Piny 2-9 to sygnały SZYNY DANYCH (DATA BUS), dokładnie to, co zostało wpisane do (hmm ,,klamek''??? (latches) - przyp. tłum.) komendą OUTB.
Pin 10 to sygnał potwierdzenia (ACK) sterowany przez ciebie, tak żebyć mógł wyprodukować przerwanie.
Piny 18-25 są zwarte i jest to uziemienie (GND).
Dokładniej:
<= we pin Główny Nazwa
=> wy DB25 pin sygnału Bit Uwagi
-------- ---- ------ ------- --- -----------------------
=> 1 1 -Strobe C0- Ustaw niskie napięcie >0.5us do wysył.
=> 2 2 Dane 0 D0 Ustaw na pierwsze znaczące dane
=> 3 3 Dane 1 D1 ...
=> 4 4 Dane 2 D2 ...
=> 5 5 Dane 3 D3 ...
=> 6 6 Dane 4 D4 ...
=> 7 7 Dane 5 D5 ...
=> 8 8 Dane 6 D6 ...
=> 9 9 Dane 7 D7 Ustaw na ostanie znaczące dane
<= 10 10 -Ack S6+IRQ Niskie napięcie ~ 5uS, po zaakcept.
<= 11 11 +Busy S7- 1 Dla Zajęte/Offline/Błąd
<= 12 12 +PaperEnd S5+ 1 Dla braku papieru
<= 13 13 +SelectIn S4+ 1 Dla wybranej drukarki
=> 14 14 -AutoFd C1- Ustaw na 0 dla LF
<= 15 32 -Error S3+ 0 dla Błędu/Offline/Końca papieru
=> 16 31 -Init C2+ Ustaw niskie napięcie > 50uS do inicjalizacji
=> 17 36 -Select C3- Ustaw na 0 do wybrania drukarki
<==>18-25 19-30 GND
Najprostszy możliwy do zbudowania układ to:
Vcc
|
+---------+
| __|__
Przekaźnik /^\ Dioda 1N4002
| /---\
| |
+---------+
|
| /
4.7K B|/ C
port równoległy >-\/\/\/\/-| Tranzystor NPN: BD547A lub 2N2222A
|\ E
| V
|
pin GND portu równ. >--------+
|
Uziemienie
Połącz Vcc z napięciem równym napięciu przekaźnika (zazwyczaj 5 lub 12V). Oczywiście parametry przekaźnika powinny być poprawne dla twojego ekspresu.
Barmani często umieszczają przekaźnik ZA tranzystorem, na emiterze (E) zamiast na kolektorze (C). Nie jest to dobre, ponieważ obciąża tranzystor i może być powodem zrobienia złej kawy :-). Dioda 1N4002 jest potrzebna do ochrony tranzystora przed napięciami przekaźnika. Jeśli jej nie użyjesz, tranzystor stanie się ciemniejszy i zacznie dymić...
Jeżeli potrzebujesz prostego obwodu, użyj sterownika triaków Motoroli - MOC301[012], razem z triakiem ogólnego zastosowania, takim jak SC 141D. Metoda ta ma zaletę - nie musisz stosować dodatkowego źródła zasilania.
Dla nieindukcyjnych ładunków:
270 1 +-------+ 6 180
+5v -VAVAVA-----+ +----VAVAVA-----+-------------- Linia gorąca
2 | MOC | |
TTL in ---------+ 3012 +nc VA SC141D
| | 4 / |
nc+ +------------/ |
+-------+ +----\/\/\/---- Line Neutralna
OBCIĄŻENIE
Jeżel będziesz pracował z napięciem 220V, wybierz 3021. Do obciążeń indukcyjnych powinny być stosowane kondensatory obejściowe, zobacz ,,Motorola Application Note AN-780. Ekspresy do kawy są raczej obciążeniami opornościowymi, a nie indukcyjnymi (jak silniki), ale kto wie, jaki jest twój...
+5VDC
| 180 180 2.2k
+---/\/\/\----+-----+ +----/\/\/-+--/\/\/\---+-------> 120V
| 1| |6 | | Gorąca
| +=====+ | | MT1
| | MC | Sterown.| +-+
| | 3032| triaków | G | | TRIAK
| +=====+ | /| |
\ 2| |4 | / +-+
2N3904 |----+ | | | | MT2
/ | +--------- | -------+ |
V \ | | |
| / | \ |
| \ 43 .01u --- 10k / |
| / 500V --- \ |
| | | / |
+------+ | | | Neutralna
| +--------+--+---o o--> 120V
/ load
>-/\/\--| 2N3904
\
V
|
---
///
Powinieneś zmienić rezystory na odpowiednie dla 220V.
Opis obwodu:
MC2032 jest optoizolacyjnym sterownikiem triaka. 180-omowy rezystor zapewnia napięcie dla diody LED w optoizolatorze. Zmień wartość rezystora, jeśli to potrzebne, żeby uzyskać poprawny prąd (np. 15mA).
Zauważ, że nie możesz testować tego układu bez obciążenia. Triak nie przełączy się, jeżeli nie będzie podłączony do źródła napięcia zmiennego, nie możesz więc testować go bez użycia napięcia AC i obciążenia. Zauważ napisz ,,500V'' na obudowie kondensatora .01.
Będziesz musiał napisać program wykonujący następujące czynności:
Zmień PODSTAWĘ na 0x3bc dla /dev/lp0, 0x378 dla /dev/lp1 i 0x278 dla /dev/lp2, zakres na 8.
Dobrze byłoby dać programowi prawa setuid, żeby każdy mógł pić kawę! (UWAGA: nie ustawiaj tych praw w ,,usieciowionym'' komputerze, grozi to pożarem itd. wywołanym przez nieuprawnionych użytkowników! - przyp. tłum.)
Przeczytaj Kernel Hacker's Guide i zaimplementuj sterownik (sądzę, że może on być stosowany w trybie użytkownika). Skompiluj go jako moduł, żebyś nie musiał kompilować jądra przy każdym uaktualnieniu. Napisz:
echo cappucino > /dev/coffee
Uzyskasz filiżankę gorącej kawy w minutę. Pamiętaj, żeby dać prawidłowe prawa
dostępu do /dev/coffee, zależnie od tego, czy chcesz, żeby kawę robił
tylko root, czy nie.
Zaletą tej metody jest obsługa sprzężenia zwrotnego z ekspresu do kawy przez użycie ACK portu równoległego tak, żeby ,,mądre'' ekspresy mogły tworzyć przerwanie.
Zrób to jako pracę domową.
(zalecam implementację tej technologii tylko w sieci LAN, z powodu bezpieczeństwa - przyp. tłum.)
Jeżeli napisałeś program w C (objaśnienia powyżej), wystarczy zrobić prosty skrypt CGI włączający i wyłączający ekspres do kawy. Powinieneś napisać kilka ładnych stron WWW wyjaśniających jak zrobić kawę i umieścić je na serwerze WWW Apache...
Oto nasze pomysły:
Ten dokument był pierwotnie napisany w języku helleńskim (greckim), ewoluując z małej debaty na liście greckich użytkowników Linuxa, czy Linux potrafi zrobić kawę, czy nie. Był on artykułem w naszym pięknym magazynie Linuxowym ,,magaz'': http://www.linux.gr/magaz. Pamiętaj, że jest on napisany po grecku.
Nazywam się Georgatos Photis i jestem (jeszcze-nadal może przez długi czas) studentem wydziału Inżynierii Komputerowej i Informatyki na Uniwersytecie Patras. Jestem zazwyczaj dosyć zajęty grecką dokumentacją i stronami WWW, ale mogę przyjmować dodatki do tego HOWTO, jeżeli nie będziesz niecierpliwy.
Standardowe prawa autorskie wszystkiego od Linuxa... Przeczytaj wszystkie i wybierz najważniejsze. Inaczej nie możesz kopiować tego dokumentu.
Jeżeli znajdziesz jakieś błędy, daj mi znać. :-) doc-linux-pl-2002.06.14.orig/mini/html/Colour-ls.pl.html 0100664 0001750 0001750 00000035561 07104371340 021461 0 ustar coven coven
ls'
służące do wyświetlania zawartości katalogu, które można znacznie
uatrakcyjnić używając różnych kolorów, ale skonfigurowanie tego
zgodnie z własnymi upodobaniami może nie być taką łatwą sprawą.
Dokument ten opisuje różne aspekty i podejścia ustawiania
polecenia 'ls' przez konfigurowanie istniejącego oprogramowania
plus lokalizacja alternatywnego oprogramowania nie zawartego w
dystrybucjach Slackware czy RedHat, którego można użyć na
większości systemów unix-owych.
Wersja HTML (w oryginale) jest także dostępna
na mojej stronie WWW.
Dokument ten został napisany w standardzie ISO-8859-2.
W ostatnich latach kolorowe monitory stały się bardzo popularne, i użytkownicy zaczynają to wykorzystywać przez używanie programów, które wykorzystują kolory do wizualizacji różnych szczegółów takich jak słowa kluczowe w językach programowania czy podkreślenie słów źle napisanych.
Ponieważ konsola Linux-owa obsługuje kolory, oryginalna wersja GNU ls została szybko zmodyfikowana, aby wyświetlać kolorowe informacje i program ten został dołączony do dystrybucji Slackware ok. wersji 2.0. Ulepszone wersje tych łat weszły w skład standardowej dystrybucji GNU ls i dlatego powinny być częścią wszystkich nowych dystrybucji Linux-a.
Wersja ta jest w głównej mierze przepisaną wersją pierwotną zawierającą informacje na temat xterminala i łatania jądra.
Informacja zawarta w tym dokumencie została sprawdzona na dystrybucji RedHat 4.1 i została oryginalnie skompilowana na dystrybucji Slackware 2.0.2 i jądrze w wersi 1.1.54. Informacje na temat łaty zostały uzyskane z Dystrybucji Slackware 2.2.0 z jądrem 1.2.13 i powłoką tcsh jako domyślną oraz później sprawdzona na jądrze 2.0.27. Jeśli używasz jakiejś innej konfiguracji czy wersji unix-a, to będę wdzięczny za info na temat systemu operacyjnego i wersji oraz czy kolory są dostępne jako standardowe.
Jeśli masz nową dystrybucję Linux-a, to zmodyfikuj pliki w swoim katalogu domowym tak jak to pokazano. Efekt będzie widoczny po ponownym zalogowaniu się.
~/.bashrc:
alias ls="ls ‐‐color"
~/.cshrc:
alias ls 'ls ‐‐color'
I to wszystko!
Możesz także zrobić swój plik .colourrc, żeby mieć swoje kolory
(``dircolors -p >$HOME/.colourrc''). Jest tam dużo
komentarzy, więc nie powinieneś mieć problemów z modyfikacjami. Po
ustawieniu wszystkich kolorów piszesz ``eval `dircolors $HOME/.colourrc`''
żeby ustawienia zadziałały.
Przede wszystkim powinieneś wiedzieć czy masz wersję ls, która umie kolorować. Spróbuj wydać takie polecenie na konsoli Linux-owej (chociaż na xterm-ie też powinno się udać):
% ls ‐‐color
(% jest tu znakiem zachęty systemu).
Jeśli dostaniesz komunikat o błędzie mówiący, że ls nie rozumie tej opcji, to musisz zainstalować nowszą wersję pakietu GNU fileutils. Jeśli nie masz odpowiedniego pakietu aktualizacyjnego dla swojej dystrybucji, to ściągnij ostatnią wersję z najbliższego ci lustra GNU i zainstaluj bezpośrednio ze źródła.
Jeśli nie dostałeś komunikatu o błędzie, to masz ls,
które rozumie to polecenie. Niestety niektóre wcześniejsze wersje
zawarte w dystrybucji Slackware (i możliwe, że w innych) miały
błędy. ls zawarte w dystrybucji RedHat 4.1 jest w wersji
3.13, która jest w porządku.
% ls ‐‐version
ls - GNU fileutils-3.13
Jeśli uruchomiłeś polecenie ``ls ‐‐ color''
na konsoli tekstowej Linux-a, to rezultat powienien być
pokolorowany zgodnie z domyślnymi ustawieniami i możesz teraz
zdecydować czy jest coś co chcesz zmienić czy nie.
Jeśli uruchomiłeś je w xterm-ie, to mogłeś lub nie - zauważyć
zmianę w kolorach. W przeciwieństwie do ls, oryginalny
program xterm nie obsługiwał kolorów dla programów uruchamianych w
nim, ale ostatnie wersję to robią. Jeśli twój xterm nie obsługuje
kolorów, to powinieneś zdobyć nowszą wersję tak jak to opisano na
końcu tego dokumentu. W międzyczasie przełącz się na tryb tekstowy
i pracuj tam.
Ten skrypt (dzięki dla wielu tych, którzy przysłali mi wersję bash) pokazuje wszystkie standardowe kombinacje kolorów na bieżącej konsoli. Jeśli żadne kolory sie nie pojawią, oznacza to, iż twoją konsola nie obsługuje ANSI.
#!/bin/bash
# Wyświetl kolory ANSI.
#
esc="\033["
echo -n " _ _ _ _ _40 _ _ _ 41_ _ _ _42 _ _ _ 43"
echo "_ _ _ 44_ _ _ _45 _ _ _ 46_ _ _ _47 _"
for fore in 30 31 32 33 34 35 36 37; do
line1="$fore "
line2=" "
for back in 40 41 42 43 44 45 46 47; do
line1="${line1}${esc}${back};${fore}m Normal ${esc}0m"
line2="${line2}${esc}${back};${fore};1m Bold ${esc}0m"
done
echo -e "$line1\n$line2"
done
Numer koloru pierwszego planu jest pokazany po lewej stronie, a tła - w prostokącie. Jeśli chcesz znaki jaskrawe dodajesz "1" do parametrów, tak że jasny niebieski na białym to: "37;44;1". Cała sekwencja selekcji to: ESC [ 3 7 ; 4 4 ; 1 m.
Uwaga: Tło w chwili obecnej nie może być jaskrawe, więc nie możesz mieć żółtego (jaskrawy brązowy) jako coś innego niż pierwszy plan. Limit ten wynika ze sprzętu.
The colours are:
0 - black 4 - blue 3# is foreground
1 - red 5 - magenta 4# is background
2 - green 6 - cyan
3 - yellow 7 - white ;1 is bold
Jeśli chcesz zmodyfikować standardowe kolory, to potrzebujesz swojej osobistej kopii w swoim katalogu domowym, co uzyskasz przy pomocy polecenia:
% cd ; dircolors -p > .coloursrc
Po modyfikacji tego dobrze skomentowanego pliku musisz wczytać go do zmiennej środowiskowej LS_COLORS, co można zwykle zrobić poleceniem:
eval `dircolors .colourrc`
Musisz umieścić tę linię w swoim .bashrc (.cshrc, .tcshrc) (w zależności od twojej powłoki), aby robić to automatycznie przy każdym logowaniu się. Więcej szczegółów znajdziesz w stronie podręcznika man dircolors(1).
Będziesz musiał przekazać sterownikowi twojego terminala kod,
który chcesz mieć jako domyślny. Nie ma standardowego sposobu, aby
to zrobić, ale w przypadku Linux-a masz program setterm.
"setterm" używa informacji zawartych w bazie danych o terminalach, aby ustawić atrybuty. Tak się wybiera:
setterm -foreground black -background white -store
gdzie -store poza właściwą zmianą powoduje, że ustawienia stają się także domyślne dla bieżącej konsoli. Wymaga to, aby bieżący terminal (zmienna środowiskowa TERM) był opisany "wystarczająco dobrze" w bazie danych "termcap". Jeśli setterm z jakichś powodów nie działa, to tu jest kilka alternatyw:
Jeden z tych Xterminali powinien być dostępny i przynajmniej jeden z nich obsługuje kolory.
xterm -fg white -bg blue4
color_xterm -fg white -bg blue4
color-xterm -fg white -bg blue4
nxterm -fg white -bg blue4
gdzie 'color_xterm' obsługuje kolorową wersję 'ls'. Ten konkretny wybór przypomina kolory używane na SGI.
Możesz zmodyfikować jądro raz na zawsze, tak samo jak udostępniając standard podczas działania dla konsol wirtualnych przez sekwencję ze znakiem ESC. Jeśli skompilowałeś swoje własne jądro to zalecam modyfikację jądra.
Plik ze źródeł jądra, który powinieneś zmodyfikować około linii
1940, to /usr/src/linux/drivers/char/console.c
def_color = 0x07; /* white */
ulcolor = 0x0f; /* bold white */
halfcolor = 0x08; /* grey */
Ja używam białego na niebieskim:
def_color = 0x17; /* white */
ulcolor = 0x1f; /* bold white */
halfcolor = 0x18; /* grey */
Liczby to kody atrybutów w postaci szesnastkowej używane przez kartę graficzną: najbardziej znacząca cyfra ("1" w przykładzie powyżej) jest tłem; najmniej znacząca - pierwszym planem. 0=czarny, 1=niebieski 2=zielony, 3=jasno-niebieski, 4=czerwony, 5=purpurowy, 6=brązowy/żółty, 7=biały. Dodaj 8, aby uzyskać kolory jaskrawe. Zauważ, że w większości przypadków jaskrawe tło = mrugające znaki, matowe tło. (Od sjlam1@mda023.cc.monash.edu.au).
Możesz także dostarczyć nowy standard podczas działania dla wirtualnych konsol, na bazie na-ekran z niestandardowymi sekwencjami ANSI (znalazłem podczas przglądania źródeł jądra)
ESC [ 8 ]
która ustawia domyślne kolory na bieżące tło i pierwszy plan. Wtedy łańcuch resetujący atrybuty (ESC [ m) wybiera te kolory zamiast białego i czarnego.
Właściwie będziesz musiał wysłać ten łańcuch na konsolę poleceniem
echo za każdym razem kiedy restartujesz komputer. Zależnie od
tego do czego używasz swojego Linux-a, może być kilka odpowiednich
miejsc:
To jest miejsce, gdzie wyświetla się komunikat "Welcome to Linux xx.yy", i jest to dobry wybór dla komputera, na którym pracujesz tylko ty. (Przypuszczalnie będzie zmorą dla użytkowników logujących się zdalnie przy pomocy telnet-a). Plik ten jest tworzony podczas startu (Slackware w /etc/rc.d/rc.S; RedHat w /etc/rc.d/rc.local), i powinieneś zmodyfikować linie wyglądające mniej więcej tak:
echo ""> /etc/issue
echo Welcome to Linux /bin/uname -a | /bin/cut -d\ -f3. >> /etc/issue
na:
ESCAPE="<wstaw tu znak escape>"
echo "${ESCAPE}[H${ESCAPE}[37;44m${ESCAPE}[8]${ESCAPE}[2J"> /etc/issue
echo Welcome to Linux /bin/uname -a | /bin/cut -d\ -f3. >> /etc/issue
Ten kod spowoduje przesunięcie kursora na początek strony, ustawienie koloru (tutaj: biały na niebieskim), zapisanie tego wyboru i wyczyszczenie reszty ekranu. Modyfikacja zadziała przy następnym starcie systemu. Zapamiętaj, aby wpisać kod klawisza ESC przy pomocy Ctrl-Q w emacs-ie, Ctrl-V w vi lub `Esc w joe, bo wygląda na to, że powłoka, w której się uruchamia ten skrypt nie rozumie sekwencji: /033.
if [ "$TERM" = "console" ]; then
echo "\033[37;44m\033[8]" #
# albo użyj setterm
setterm -foreground white -background blue -store
fi
if ( "$TERM" == "console" ) then
echo "\033[37;44m\033[8]"
# albo użyj setterm
setterm -foreground white -background blue -store
endif
Powinieneś być w stanie użyć setterm tak jak to było pokazane wyżej. Jeszcze raz: wymaga to, aby zdalny komputer wiedział wystarczająco dużo na temat twojego terminala i żeby emulator terminala, przy pomocy którego się logujesz, obsługiwał kolory. Z moich doświadczeń wynika, że najlepszymi emulatorami vt100 dostępnymi obecnie na inne platformy to:
Szczegóły na temat Kermita znajdziesz na http://www.columbia.edu/kermit/
Wszystkie informacje opisane tutaj zakładają instalację GNU/Linux-a. Jeśli masz coś innego (jak np. Sun-a z X-ami czy coś takiego), to możesz zdobyć i samemu sobie skompilować programy.
Kolorowa wersja xterm-a jest oparta na standardowych źródłach xterm-a z łatą dostępną na każdym serwerze X11R6. Xterm dystrybuowany wraz z R6.3 podobno ma natywną obsługą kolorów, ale nie był przeze mnie testowany.
Na przykład tutaj: color-xterm-R6pl5-patch.gz
Przejrzyj dokumentację jeśli używasz starszej wersji X-ów. Uwaga: Nie próbowałem tego samemu !!!
'ls' jest w pakiecie 'fileutils' Można go pobrać z serwera: ftp.icm.edu.pl. Weź wersję co najmniej 3.13.
Będziesz jeszcze potrzebować łaty, którą możesz pobrać z tego samego katalogu, a nazywa się ona "color-ls-3.12.0.3.patch.gz"
Osobiście udało mi się skompilować color-ls na Solaris-ie, SunOS-ie i Irix-ie.
Byłbym wdzięczny za wszelki odzew na temat tego tekstu. Mój adres pocztowy: ravn@dit.ou.dk
‐‐
Thorbjørn Ravn Andersen
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:
Na pewno znajdziesz tu jakieś niejasne i niepolskie konstrukcje. Jeśli wpadniesz na lepszy pomysł daj mi znać.
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 sie na nią zapisać, to
wyślij list o treści subscribe jtz Imię Nazwisko na adres
majordomo@ippt.gov.pl
doc-linux-pl-2002.06.14.orig/mini/html/DHCP.pl.html 0100664 0001750 0001750 00000027246 07104371340 020321 0 ustar coven coven
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 winipcfg.exe odkryłem, że ma on nieudokumentowaną opcję, która pozwala zapisać informacje do pliku (domyślnie jest to Winipcfg.out). Pozwoliło mi to, na zrobienie takiego trick-u:
Wersję oryginalną tego dokumentu możesz znaleźć na SUNSite Polska. Na temat wersji tłumaczenia patrz sekcja Od tłumacza.
Teraz szczegóły na temat tego jak to robię:
winipcfg -all -batch c:\winipcfg.out
Opcje muszą być podane w podanym porządku. Nie podanie -all
spowoduje brak niektórych informacji. Nie podanie ścieżki do pliku
winipcfg.out spowoduje zapisanie tego pliku w katalogu
bieżącym. Poniżej jest załączony przykładowy plik
winipcfg.out./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 winipcfg.pl zapisuje nowe
wersje plików: /etc/hostname, /etc/resolv.conf oraz
/etc/init.d/network. Skrypt network wykonuje polecenie
ifconfig 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 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.
-------------------------------------------------------------------------------
Od autora: Oto lokalizacje plików odpowiedzialnych za konfigurację
sieci oraz plików inicjacyjnych:
/etc/sysconfig/network-scripts natomiast montowanie odbywa
się w pliku /etc/rc.d/rc.sysinit/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);
==============================================================================
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:
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.
doc-linux-pl-2002.06.14.orig/mini/html/Diald.pl.html 0100664 0001750 0001750 00000027323 07104371340 020614 0 ustar coven coven
/etc/rc.d/rc.local
#! /bin/sh # Put any local setup commands in here # Running gpm echo "Running gpm..." gpm -t ms & # starting innd /etc/rc.d/rc.news # starting CERN httpd echo "Starting CERN httpd with proxy and caching." /usr/local/bin/httpd # loading modules that are needed /etc/rc.d/rc.modules # starting diald echo "Starting diald daemon to Pacific Internet ..." cd /usr/lib/ppp /usr/lib/ppp/diald.pacific.internet
/usr/lib/ppp/diald.pacific.internet
/usr/sbin/diald /dev/ttyS1 /dev/ttyS1 lock debug 20 -m ppp local 127.0.0.2 \ remote 127.0.0.3 defaultroute modem crtscts \ connect "chat -v -f /usr/lib/ppp/pppchat.pi" \ dynamic -- debug noipdefault
/usr/lib/ppp/pppchat.pi
ABORT "NO CARRIER" ABORT BUSY "" ATZ OK ATm1s50=255s111=0DT1-800-555-1212 CONNECT "" login MÓJLOGIN ssword MOJEHASŁO
#!/bin/sh
# Ustaw PPP na ślepo - skrypt o nazwie blind.ppp
DEVICE=ttyS1
(
stty 38400 -tostop
pppd -detach debug noipdefault defaultroute mru 1500 /dev/$DEVICE &
exit 0
) /dev/$DEVICE
/etc/diald.conf (nie zmieniony od instalacji dystrybucji)
# Jest to dość skomplikowana kombinacja reguł filtrujących. # (Są to reguły, których używam osobiście) # # Podzieliłem te reguły na 4 sekcje: # pakiety TCP, pakiety UDP, pakiety ICMP i na końcu reguły dla reszty. #------------------------------------------------------------------------------ # Reguły dla pakietów TCP #------------------------------------------------------------------------------ # Ogólny komentarz dotyczący zestawu reguł: # # Ogólnie, jako znaczące do timeout-ów, chcielibyśmy traktować tylko # pakiety zawierające dane na łączu TCP. Dlatego spróbujemy ignorować # pakiety bez danych. Ponieważ najkrótszy możliwy nagłówek pakietu # TCP to 40 bajtów, więc każdy pakiet o długości 40 bajtów nie może # zawierać danych. W ten sposób możemy przeoczyć puste pakiety (w # nagłówku IP mogą znajdować się opcjonalne informacje na temat # routing-u i inne dodatkowe informacje), ale powinniśmy dostać # większość z nich. Zauważ, że nie chcemy odfiltrowywać pakietów z # wyzerowanym polem "tcp.live", ponieważ użyjemy ich później, aby # przyspieszyć rozłączenia na niektórych połączeniach TCP. # # Chcemy także być pewni, że pakiety WWW są aktywne, nawet jeśli gniazdo TCP # jest zamknięte. Robimy to ponieważ WWW nie utrzymuje otwartych # połączeń jak już dane zostaną przetransportowane, i byłoby # denerwujące ciągłe inicjowanie i zamykanie połączenia jak tylko # dostaniesz jakiś dokument. # # Poza WWW TCP jest najczęściej używane do długożywotnych połączeń, # które jak już zginą, to znaczy, że ich nie potrzebujemy. Nie # koniecznie chcemy czekać 10 minut aż połączenie zostanie zamknięte # jeśli nie mamy uruchomionych żadnych telnet-ów czy rlogin-ów, tak # więc chcemy przyspieszyć timeout na połączeniu TCP, które zostały # zamknięte. Zrobimy to poprzez przechwytywanie pakietów, które nie # mają ustawionej flagi "live". # # --- właściwy początek zestawu reguł --- # Na inicjację połączenia dajemy tylko 15 sekund. Cały pomysł polega tu # na tym, że trzeba się liczyć z możliwością, iż sieć na drugim końcu # nie będzie działać. W tym przypadku nie chcesz przecież dawać 10 # minut na połączenie. Poniższą regułą dajemy właśnie połączeniu owe # 15 sekund czasu. Jeśli sieć z drugiej strony działa, to w ciągu 15 # sekund otrzymamy odpowiedź, która będzie zawierała jakieś # dane. Jeśli w twoim przypadku sprawia to problemy, bo np.: masz # wolne połączenie czy długi czas odpowiedzi, to możesz zwiększyć # timeout lub po prostu usunąć tę regułę. accept tcp 15 tcp.syn # Nie podtrzymuj połączenia jeśli przychodzą pakiety do named-a ignore tcp tcp.dest=tcp.domain ignore tcp tcp.source=tcp.domain # (Oj! SCO telnet zaczyna od wysyłania pustych sygnałów "SYN" i # otwiera połączenie tylko w przypadku jeśli otrzyma odpowiedź. Jeny...) accept tcp 5 ip.tot_len=40,tcp.syn # Nie podtrzymuj połączenia jeśli pakiety są puste (oprócz pustych SYN-ów) ignore tcp ip.tot_len=40,tcp.live # Upewnij się, że transfer http podtrzymuje połączenie przez 2 minuty, # nawet po zakończeniu. # UWAGA: W pliku /etc/services może nie być definicji # serwisu tcp dla www, w którym to przypadku powinieneś zakomentować # dwie poniższe linie, albo zdobyć nowszy plik /etc/services. W # sprawie nowego /etc/services zobacz FAQ. accept tcp 120 tcp.dest=tcp.www accept tcp 120 tcp.source=tcp.www # Jeśli połączenie nie jest już aktywne, spróbujemy szybko je # zamknąć. Zauważ, że jeśli połączenie jest już "zdown-owane", to # zmiana stanu nie spowoduje jego przywrócenia. keepup tcp 5 !tcp.live ignore tcp !tcp.live # po danych ftp albo połączeniu ftp można się spodziewać dość częstego # ruchu accept tcp 120 tcp.dest=tcp.ftp accept tcp 120 tcp.source=tcp.ftp # UWAGA: ftp-data nie jest zdefiniowane w pliku /etc/services # dostarczanego z najnowszą wersją NETKIT, więc to zakomentowałem. # Jeśli chcesz to zdefiniować, to dodaj poniższą linię do # /etc/services # ftp-data 20/tcp # i odkomentuj dwie następne linie #accept tcp 120 tcp.dest=tcp.ftp-data #accept tcp 120 tcp.source=tcp.ftp-data # Jeśli nie wyłapiemy tego wcześniej, to daj połączeniu 10 minut. accept tcp 600 any # Reguły dla pakietów UDP # # Żądania dla domeny będziemy odrzucać od razu ponieważ chcemy, żeby # one tylko podniosły połączenie, a nie trzymać je przez długi czas. # Robimy tak ponieważ, sieć byłaby inicjowana przy każdym odwołaniu do # biblioteki resolvera (o ile nie trzymasz wszystkich swoich często używanych # adresów w /etc/hosts, w którym to przypadku odkryjesz jeszcze inne # problemy.) # Zauważ, że nie powinieneś ustawiać mniejszego timeout-u niż # spodziewany czas odpowiedzi twojego serwera DNS. W innym przypadku # kiedy inicjacyjne połączenie jest już ustawione może się pojawić # większe opóźnienie niż to pomiędzy inicjacyjną serią pakietów zanim # jakikolwiek pakiet, który podtrzymuje połączenie przejdzie przez połączenie. # Nie ustawiaj połączenia dla rwho ignore udp udp.dest=udp.who ignore udp udp.source=udp.who # Nie ustawiaj połączenia dla RIP ignore udp udp.dest=udp.route ignore udp udp.source=udp.route # Nie ustawiaj połączenia dla NTP czy timed. ignore udp udp.dest=udp.ntp ignore udp udp.source=udp.ntp ignore udp udp.dest=udp.timed ignore udp udp.source=udp.timed # Nie ustawiaj połączenia dla żądań domeny pomiędzy dwoma działającymi named-ami ignore udp udp.dest=udp.domain,udp.source=udp.domain # Ustaw połączenie jeśli pojawi się żądanie domeny z innego miejsca # niż named accept udp 30 udp.dest=udp.domain accept udp 30 udp.source=udp.domain # To samo dla rozgłaszania netbios-ns # UWAGA: w pliku /etc/services serwis netbios-ns może nie być # zdefiniowany - wtedy powinieneś zakomentować 3 poniższe linie ignore udp udp.source=udp.netbios-ns,udp.dest=udp.netbios-ns accept udp 30 udp.dest=udp.netbios-ns accept udp 30 udp.source=udp.netbios-ns # Nie utrzymuj połączenia dla transferów routed i gated ignore udp tcp.dest=udp.route ignore udp tcp.source=udp.route # Wszystko inne dostaje 2 minuty czasu accept udp 120 any # Wszystkim pakietom, których nie objęły poprzednie zasady daj 30 # sekund życia accept any 30 any
diald.defs (nie zmieniony od instalacji dystrybucji)
# Definicja domyślnych reguł dla protokołów prule tcp tcp 9:12:13:14:15:16:17:18:19:+0:+1:+2:+3:9:9:9 prule udp udp 9:12:13:14:15:16:17:18:19:+0:+1:+2:+3:9:9:9 prule icmp icmp 9:12:13:14:15:16:17:18:19:9:9:9:9:9:9:9 prule any any 9:12:13:14:15:16:17:18:19:9:9:9:9:9:9:9 # Definicja pól nagłówków pakietów internet-owych var ip.ihl 0(24)&0xf var ip.version 0(28)&0xf var ip.tos 1(24)&0xff var ip.tot_len 2(16)&0xffff var ip.id 4(16)&0xffff var ip.frag_off 6(16)&0x3fff var ip.ttl 8(24)&0xff var ip.protocol 9(24)&0xff var ip.check 10(16)&0xffff var ip.saddr 12 var ip.daddr 16 # Definicja pól nagłówków pakietów TCP var tcp.source +0(16)&0xffff var tcp.dest +2(16)&0xffff var tcp.seq +4 var tcp.ack_seq +8 var tcp.doff +12(28)&0xf var tcp.fin +13(24)&0x1 var tcp.syn +13(25)&0x1 var tcp.rst +13(26)&0x1 var tcp.psh +13(27)&0x1 var tcp.ack +13(28)&0x1 var tcp.urg +13(29)&0x1 var tcp.live +127 # Definicja nagłówków pakietów UDP var udp.source +0(16)&0xffff var udp.dest +2(16)&0xffff var udp.len +4(16)&0xffff var udp.check +6(16)&0xffff # Definicja nagłówków pakietów ICMP var icmp.type +0(24)&0xff var icmp.code +1(24)&0xff var icmp.checksum +2(16)&0xffff var icmp.echo.id +4(16)&0xffff var icmp.echo.sequence +6(16)&0xffff var icmp.gateway +4
Masz jakieś pytania? Przyślij mi list.
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:
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
doc-linux-pl-2002.06.14.orig/mini/html/Dip+SLiRP+CSLIP.pl.html 0100664 0001750 0001750 00000046056 07104371340 022112 0 ustar coven coven
/pub/ze/zenon/linux/DipSlirpCSLIP/.
29 Października '95 Wersja: 1.1
Dodałem informację dla systemów tylko z urządzeniem loopback.
15 Października Wersja: 1.0
Pierwotna wersja tego dokumentu.
I stanie się cud: będziemy mieli połączenie TCP/IP między Linux-em a zasobami Internet-u.
slirp-0.95h.tar.gz, i skompiluj program slirp na
serwerze dostawcy (na komputerze, do którego będziesz
dzwonił). Plik docs/README.compiling zawarty w dystrybucji
SLiRP-a wyjaśnia wszystkie szczegóły dotyczące
kompilacji../bin/slirp czy ./slirp (w twoim katalogu
domowym)..slirprc
#### .slirprc file ####
add ptyexec /usr/bin/tcsh -l:10.0.2.1:23
compress
baudrate 38400
#### end
Polecenie compress zapewnia nas, że zostanie użyty protokół
CSLIP. Polecenie add ptyexec zostało użyte zamiast polecenia
shell (listę poleceń znajdziesz w pliku docs/CONFIG),
ponieważ lepiej jest użyć tcsh -l (w pliku .login), a
polecenie shell nie przyjmuje opcji (tak sądzę). Powinieneś
użyć dokładnej ścieżki do tcsh na serwerze dostawcy (albo użyj
jakiejś innej powłoki (shell-a) jeśli wolisz).
Polecenie baudrate powinno zostać użyte z wartością
odpowiednią dla twojego połączenia modemowego.
Zaloguj się na swoje konto u dostawcy i napisz bin/slirp (albo ./slirp, w zależności od lokalizacji)
Powinieneś zobaczyć listę wiadomości z taką linią na końcu:
[talking CSLIP, MTU 1500, MRU 1500, 38400 baud]
Aby wyjść ze slirp-a wpisz powoli (z ponad sekundowymi przerwami) pięć zer.
W skrócie to co musisz zrobić, to przygotować jądro, żeby mogło
pracować z siecią i CSLIP-em. Potem powinieneś skonfigurować
sieć. Napisz make config w katalogu
/usr/src/linux i odpowiedz "y" na następujące pytania:
Networking support (CONFIG_NET) [y]
TCP/IP networking (CONFIG_INET) [y]
Assume subnets are local (CONFIG_INET_SNARL) [y]
Network device support? (CONFIG_NETDEVICES) [y]
Dummy net driver support (CONFIG_DUMMY) [y]
SLIP (serial line) support (CONFIG_SLIP) [y]
CSLIP compressed headers (CONFIG_SLIP_COMPRESSED) [y]
PPP (point-to-point) support (CONFIG_PPP) [y]
Ja używam karty Ethernet-owej 3c509, więc moje dodatkowe opcje to:
3COM cards (CONFIG_NET_VENDOR_3COM) [y]
3c509/3c579 support (CONFIG_EL3) [y]
Przy instalacji poprzez NFS możesz też dodać:
NFS filesystem support (CONFIG_NFS_FS) [y]
Teraz, jak już poprawnie skonfigurowałeś jądro, skompiluj je
wydając polecenia: make dep && make clean && make
zImage. Po kompilacji przenieś plik
/usr/src/linux/arch/i386/boot/zImage do katalogu, w którym
zwykle znajduje się jądro i uruchom lilo.
Aby skonfigurować sieć, najpierw zdecyduj jaki będzie twój adres
IP. Jeśli brakuje ci specjalnych adresów, to weź 192.168.1.100,
który to jest dozwolony dla użytku lokalnego przez
RFC1597.
Dla systemów tylko z urządzeniem loopback będzie to adres
127.0.0.1.
Jeśli chcesz dokładnych i poprawnych informacji, to powinieneś
raczej przeczytać NET-3-HOWTO (
dostępne także po polsku), ale możesz spróbować zrobić coś takiego:
/etc/HOSTNAME./etc/hosts, dodając:
192.168.1.100 moj-host.linux.org moj-host
127.0.01 localhost
(albo 127.0.0.1 moj-host.linux.org moj-host
127.0.0.1 localhost)
Łańcuch "moj-host.linux.org" powinien być identyczny z tym wybranym
w pierwszym kroku./etc/networks linię:
moja-siec 192.168.1.0
(albo loopback 127.0.0.1)
rc.inet1 z katalogu /etc/rc.d
(zachowaj gdzieś oryginalną wersję) i wpisz do niego:
IPADDR=moj-host
NETWORK=moja-siec
NETMASK="255.255.255.0"
BROADCAST="192.168.1.255"
(albo NETMASK="255.0.0.0"
BROADCAST="127.255.255.255")
Potem jeśli masz w komputerze kartę Ethernet-ową, to odkomentuj
poniższe linie:
/sbin/ifconfig eth0 ${IPADDR} netmask ${NETMASK} broadcast ${BROADCAST}
/sbin/route add -net ${NETWORK} netmask ${NETMASK}
W innym razie, jeśli masz tylko loopback, to upewnij się, że są tam:
/sbin/ifconfig lo localhost /sbin/route add -net loopback
/etc/resolv.conf w taki sposób:
domain linux.org
Teraz zrestartuj system.
Przede wszystkim obserwuj komunikaty pojawiające się podczas
startu, albo zajrzyj do pliku /usr/adm/messages jeśli
działa u ciebie proces syslogd(8).
Powinieneś zobaczyć mniej więcej takie komunikaty:
IP Protocols: ICMP, UDP, TCP
PPP: version ...
TCP compression ...
PPP line discipline registered.
SLIP: version ...
CSLIP: code copyright ...
Jeśli posiadasz też interfejs Ethernet, to powinien on także zostać poprawnie rozpoznany:
eth0: 3c509 at 0x280 ...
Twoja sieć powinna być już aktywna i możesz trochę potestować kilkoma poleceniami:
Dobra, twój Linux jest gotowy do współpracy z CSLIP-em.
dip337n-uri.tar.gz i skompiluj program dip na swoim
lokalnym komputerze. Robi się to poprzez wydanie polecenia
make w katalogu dip-3.3.7n./usr/local/bin/ albo $HOME/bin/dip.slirp.dipSkrypt dip-a jest zwykle długi i skomplikowany. W katalogu
samples znajduje się kilka przykładów (może to być
np. /usr/doc/dip/samples)
W każdym razie ja podam tutaj swój skrypt jako przykład:
#### slirp.dip file #### # # slirp.dip Dialup IP script for use with SLiRP and netcom # main: # Ustaw maskę sieci na sl0 netmask 255.255.255.0 # Ustaw odpowiedni port szeregowy i jego prędkość. # Możliwe, że musisz zmienić ttyS2 na inną wartość dla twojego modemu. # Ja mam także uruchomione "mgetty" na tym porcie dlatego używam # "ttyS2" a nie "cua2" port ttyS2 speed 38400 # Zresetuj modem i linię terminalową. # Tutaj występują u niektórych problemy. reset # Przygotuj się do dzwonienia. # Zauważ, że twój modem może mieć inny łańcuch inicjacyjny. # Mój to WordBlazer send AT S0=0 S11=70 S50=254 S58=2 Q0 V1 E1 X4\r wait OK 2 if $errlvl != 0 goto modem_trouble redial: # Wybierz numer. # U ciebie będzie raczej inny numer. send ATDT 274 2900\r wait CONNECT 50 if $errlvl != 0 goto dial_trouble # Połączyliśmy się. Zaloguj ten fakt do systemu. login: sleep 2 send \n wait ogin: 20 if $errlvl != 0 goto login_trouble print got the login prompt, OK # zamień poniższe "zenon" na twój identyfikator u dostawcy sleep 2 send \n # Nie wiem dlaczego musiałem dodać jeszcze "\n" przed wysłaniem mojego # identyfikatora, ale inaczej nie działało sleep 2 send zenon\n print sent 'zenon', waiting for 'password' ... wait ord: 30 if $errlvl != 0 goto password_trouble # poniższe "blablabla" zamień na swoje hasło. send blablabla\r # Teraz jesteśmy już zalogowani - przypuszczalnie. loggedin: # Zamień poniższe na TWÓJ prompt (mój to zenon@netcomNN n% ) wait zenon 15 if $errlvl != 0 goto prompt_error # SLiRP ustawia 10.0.2.2 jako adres odległego komputera. get $remote 10.0.2.2 # Upewnij się, że "slirp" jest na ścieżce i że jest wykonywalny. # W tym przykładzie zakładam, że slirp został zainstalowany w katalogu # $HOME/bin send exec bin/slirp\n # Ustaw parametry CSLIP-a get $mtu 1500 # Upewnij się, że polecenie "route add -net default $remote" jest wykonane # W pakiecie dip-3.3.7n wystarczy wpisać "default" default # Powiedz "Cześć" i odpalaj. done: print CONNECTED local: $locip ---> remote: $rmtip mode CSLIP goto exit prompt_error: print TIME-OUT waiting for SLIPlogin to fire up... goto error login_trouble: print Trouble waiting for the Login: prompt... goto error password_trouble: print Trouble waiting for the Password: prompt... goto error modem_trouble: print Trouble occurred with the modem... goto error dial_trouble: print Trouble occurred while dialing... error: print CONNECT FAILED to $remote quit exit: exit #### end
KOMENTARZ: W powyższym przykładzie niektóre pozycje wymagają podania danych specyficznych dla ciebie:
Polecenie dip -v slirp.dip spowoduje uruchomienie dip-a w trybie verbose - czyli na ekranie będą pojawiać się informacje co się w danym momencie dzieje.
Komunikaty pojawiające się na ekranie mogą zasugerować jakieś
zmiany do skryptu slirp.dip.
Jeśli wszystko poszło dobrze, to powinieneś zobaczyć taki komunikat na końcu:
CONNECTED local: 192.168.1.100 ---> remote: 10.0.2.2
(albo CONNECTED local: 127.0.0.1 ---> remote: 10.0.2.2)
a dip "zmienia" się teraz w proces-demon, zwracając ci dostęp do prompt-a.
Przy okazji: teraz aby zakończyć działanie dip-a, wpisz po prostu dip -k a działanie dip-a zostanie zakończone i połączenie modemowe zamknięte.
.slirprc, połączenie to powinno
wywołać tcsh -l i powinieneś otrzymać login prompt.
6019 s0 S 0:13 slirp
6075 sb IW 0:00 -/usr/bin/tcsh (tcsh)
16721 t6 R 0:00 ps
Po udanym (?) połączeniu anonimowym, możesz odkryć, że jesteś... na sunsite.icm.edu.pl - polskiej kopii archiwum Linux-a.
Jeśli zaszedłeś już tak daleko, to możesz zacząć podziwiać możliwości połączenia dip+slirp: jesteś na SIECI.
Rozłącz się z "sunsitem" tak szybko jak możesz, powracając do systemu "moj-host".
Teraz pojawia się pytanie:
Czy możemy po prostu napisać: ftp sunsite.icm.edu.pl?
Nie przed uaktywnieniem DNS-u (Domain Name Server).
W tym momencie możesz chcieć się rozłączyć. Wpisz w swoim lokalnym prompcie dip -k.
Najprzypuszczalniej twój dostawca Internet-u ma serwis DNS (w
przeciwnym razie nie byłbyś w stanie używać połączeń Internet-owych
w normalny sposób). Połącz się raz jeszcze z serwerem dostawcy
przy pomocy dip slirp.dip i telnet 10.0.2.1. Zajrzyj do
pliku /etc/resolv.conf.
Powinieneś zobaczyć tam kilka takich linijek:
nameserver <adres-IP>
gdzie <adres-IP> będzie miał konkretną wartość.
Skopiuj przynajmniej jedną z tych linijek do swojego pliku
/etc/resol.conf.
Teraz powróć do swojego lokalnego komputera (bez zamykania połączenia) i sprawdź czy serwis DNS działa. Wpisz: dnsquery sunsite.icm.edu.pl.
Jeśli na ekranie pojawi się numer IP powyższego adresu, to oznacza, że twój DNS działa.
Teraz możesz używać takich narzędzi jak lynx, mosaic czy netscape bezpośrednio ze swojego Linux-a.
Ten uproszczony dokument został napisany raczej jako streszczenie
podstawowej instalacji dip+slirp, aniżeli podręcznik.
Zamysłem było pomóc potencjalnym użytkownikom CSLIP-a przy starcie. Tekst
ten jest wysyłany jako mini-HOWTO, dlatego, jeśli zobaczysz w nim jakieś
oczywiste błędy, daj mi znać, proszę.
Wszystkie wersję są dostępne u mnie w katalogu na ftp:
Chcę podziękować autorom narzędzi dip i slirp za cudowne programy. Jestem pod wrażeniem i bardzo wdzięczny.
Zenon Fortuna ( zenon@netcom.com)
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:
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 w tym dokumencie wprowadzone przez tłumacza to:
doc-linux-pl-2002.06.14.orig/mini/html/Diskless.pl.html 0100664 0001750 0001750 00000036206 07104371340 021360 0 ustar coven coven
bkis@cartan.math.klte.hu za przetłumaczenie tego
dokumentu na język angielski.
Dokument ten został napisany w standardzie ISO-8859-2.
Wersja oryginalna znajduje się pod adresem
ftp.icm.edu.pl.
Dokument ten traktuje o instalacji bezdyskowej stacji roboczej na Linux-ie. Czasami jest konieczna instalacja Linux-a na PC-tach, które nie mają ani dysku twardego ani stacji dyskietek. Jeśli dostępna jest sieć, inny komputer z Unix-em z bootp, tftp, serwer NFS, i eprom burner FIXME wtedy możliwe jest zainstalowanie Linux-a bez twardego dysku czy dyskietek.
/usr/src/linux/README na temat konfiguracji i
kompilacji nowego jądra.
Cokolwiek tu było opisane, sprawdzone zostało na następującej konfiguracji:
Podstawową ideą tego jest: PC-et otrzyma swój adres IP z serwera startowego poprzez protokół bootp, używając 0.0.0.0 jako inicjacyjnego adresu IP oraz jądro poprzez protokół tftp.
Startowanie poprzez różne segmenty (poprzez ruter) nie jest takim prostym pytaniem, więc albo umieść oba - serwer startowy i stację bezdyskową - w jednym segmencie albo skonfiguruj pomocniczy adres UDP w swoim ruterze dla adresu serwera. Dalszych informacji szukaj w podręczniku dostarczonym razem z twoim ruterem.
Aby to zrobić postepuj zgodnie z poniższymi krokami.
Zdobądź pakiet nfsboot. (Dostępny jest np. z
ftp.icm.edu.pl) Zawiera on obraz BIOS-u dla karty wd8013,
który może być bezpośrednio zapisany.
Są jeszcze inne alternatywne sposoby na przygotowanie PC-ta:
Jeśli wybierzesz tę druga opcję musisz zapisać obraz na dyskietke
poleceniem dd.
Obrazy te zawierają klienta bootp oraz tftp. Musisz także przygotować jądro, które będzie zawierało opcję nfs-root.
nfsboot.
Zobacz patch(1)
Możesz skonfigurować obsługę urządzenia blokowego (dyskietki albo dysku twardego), ale musisz skonfigurować obsługę tcp/ip, karty wd ethernet, głównego sytemu plików przez nfs. Potem skompiluj jądro jak zwykle.
Można go znleźć w pakiecie >bootpd-2.4.tar.gz na serwerze
ftp.icm.edu.pl.
Zdobądź pakiet, skompiluj go i zainstaluj. Jeśli twój drugi
komputer to przypadkiem Linux Slackware, to możesz przeskoczyć ten
krok ponieważ standardowa dystrybucja zawiera bootpd. Demona można
uruchomić albo bezpośrednio poleceniem: bootpd -s albo
używając inetd. W tym wypadku musisz:
/etc/inetd.conf przez usunięcie znaku
# z początku tych linii:
# tftp dgram udp wait root /usr/sbin/in.tftpd tftpd /export # bootps dgram udp wait root /usr/sbin/in.bootpd bootpd
/etc/services
bootps 67/tcp # serwer BOOTP tftp 69/udp # serwer TFTP
Po pierwsze bootpd ma plik konfiguracyjny o nazwie bootptab,
który z reguły znajduje się w katalogu /etc. Musisz go
zmodyfikować przez wpisanie adresu IP twoich gateway-ów, serwerów
dns i adres-u/ów ethernet twojej stacji bezdyskowej.
Oto przykładowy plik konfiguracyjny /etc/bootptab:
global.prof:\
:sm=255.255.255.0:\
:ds=192.168.1.5:\
:gw=192.168.1.19:\
:ht=ethernet:\
:bf=linux:
machine1:hd=/export/root/machine1:tc=global.prof:ha=0000c0863d7a:ip=192.168.1.1
machine2:hd=/export/root/machine2:tc=global.prof:ha=0800110244e1:ip=192.168.1.1
machine3:hd=/export/root/machine3:tc=global.prof:ha=0800110244de:ip=192.168.1.1
global.prof jest ogólnym szablonem dla pól host-a, gdzie
Potem każdy komputer musi mieć swoją linię:
TFTP (Trivial File TRansfel Protocol) jest protokołem
transferu plików, takim jak ftp, z tym, że o wiele prostszym do
zapisania go w EPROM-ach. TFTP może zostac użyty na dwa sposoby:
/export/root/machine1. Podczas używania bezpiecznego
tftp z katalogiem /expoprt jako katalog główny, wtedy
/export staje się / a pole hd musi zawierać
/root/machine1.Prawie każda implementacja Unix-a zawiera serwer tftp, przypuszczalnie nie musisz instalować własnego.
Może to zawierać pakiety a, ap, n oraz x z dystrybucji Slackware.
Jeśli zainstalujesz więcej - nie ma sprawy; ale wymienione pakiety
wystarczą, żeby zrobić bezdyskowy Xterminal. Do instalacji
potrzebujesz działającego już Linux-a. Znajdź trochę miejsca na
dysku na odległym komputerze i wyeksportuj je jako do
zapisu-i-odczytu. Zamontuj ten wyeksportowany katalog gdzieś (np.
/mnt) w systemie plików Linux-a. Zacznij ustawianie Linux-a i
zmień opcję root w setup-ie z / na /mnt. Potem zainstaluj powyższe
pakiety jak zwykle. Jeśli chcesz mieć nie więcej niż jedną stację
bezdyskową Linux-ową, to nie potrzeba żadnych zmian. Jednak z
drugiej strony, jeśli planujesz używać więcej niż jednej
bezdyskowej stacji Linux-owej wtedy powyższe ustawienia nie będą
działać ponieważ niektóry pliki i katalogi muszą być prywatne dla
danej maszyny. Problem ten można obejść przez przeniesienie
katalogu /usr (nie zaweira on żadnych prywatnych danych) i
stworzyć osobne podkatalogi dla każdej bezdyskowej stacji. Na
przykład, jeśli /export/linux/machine1 zostałby
zamontowany na /mnt wtedy struktura katalogów po
inicjacyjny ustawieniu wyglądałaby tak:
/export/linux/machine1/bin /export/linux/machine1/sbin /export/linux/machine1/lib /export/linux/machine1/etc /export/linux/machine1/var /export/linux/machine1/usr
Po zmianach wyglądałaby tak:
/export/linux/machine1/bin /export/linux/machine1/sbin /export/linux/machine1/lib /export/linux/machine1/etc /export/linux/machine1/var /export/linux/usr
Teraz stwórz podkatalogi dla innych maszyn. Przyjmij na razie, że twoje stacje bezdyskowe nazywają się machine1, machine2, ..., machinen; wtedy możesz użyć następującego skryptu w bash-u, aby pozakładać inne katalogi:
#!/bin/bash
cd /export/linux
for x in machine2 machine3 ; do
mkdir $x; cd $x
(cd ../machine1; tar cf - *) | tar xvf -
done
Potem zrób nastepujące eksporty:
tak jak tutaj:
format tego przykładowego pliku odpowiada składni pliku eksportowego z SunOS-u 4.1.3
# To jest plik /etc/export # dla odległych Xterminali na Linux-ie zrobiony przez Buci # ta linia pojawia się tylko jeden raz /export/root/usr -access=linuxnet # te po jednej dla każdego host-a /export/root/machine1 rw=machine1,root=machine1 /export/root/machine2 rw=machine2,root=machine2 /export/root/machine3 rw=machine3,root=machine3
Nie zapomnij uruchomić exportfs -a.
Teraz czas na konfigurację serwera tftp. Jeśli nie potrzebujesz
bezpiecznego tftp, to wszystko jest raczej proste, twoje klienty
mogą być startowane z katalogu /export.
Jeśli używany jest bezpieczny tftp, to możesz albo zrobić pełną
strukturę katalogów /export/linux pod tftpboot
(z jednym rzeczywistym jądrem i symbolicznymi dołączeniami dla
innych maszyn), albo niech katalog /export będzie
katalogiem startowym dla bezpiecznego tftpd. Albo, jeśli masz
odrębny katalog tftpboot, to potrzbujesz tylko oryginalnej
struktury katalogów z jednym jądrem i symbolicznymi dowiązaniami
dla innych. Możesz otrzymać takie ustawienie przez wpisanie tego:
mkdir -p /tftpboot/export/linux/machine1
cd /tftpboot/export/linux/machine1
cp /export/linux/machine1/<name of the kernel> .
Ostatecznie musisz wpisać:
/sbin/mount nfs_server:/export/linux/usr /usr
jako pierwszą linię pliku
/export/linux/<machinex>/etc/rc.d/rc.S
gdzie <machinex> to machine1, machine2, itd.
Slackware 2.3; dla innych dystrybucji/wersji podane liczby mogą być różne.
/tmp.
/dev SunOS
popsuł pliki urządzeń i musiałem uruchomic ponownie MAKEDEV przez
zamontowanie tego podkatalogu na Linux-a z dyskiem.
(Powodem były różnice pomiędzy Linux-owym a SunOS-owym nfs-em: oba
używają 32 bitów na liczbę główną (major) i liczbę poboczną (minor)
urządzeń, ale Linux używa 16-bitowych pól dla każdego z nich, a
SunOS używa 14 bitów dla liczby głównej, a 18 bitów dla liczby
pobocznej.)
Jeśli znalazłeś jakieś rażące błędy ortograficzne, gramatyczne, składniowe, techniczne to pisz do mnie:
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.ippt.gov.pl/pub/Linux/JTZ/
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 sie na nią zapisać, to
wyślij list o treści subscribe jtz Imię Nazwisko na adres
listproc@ippt.gov.pl
Zmiany wprowadzone przeze mnie do tego dokumentu to polskie odnośniki do serwerów ftp i WWW. doc-linux-pl-2002.06.14.orig/mini/html/Ext2fs-Undeletion.pl.html 0100664 0001750 0001750 00000135045 07104371340 023057 0 ustar coven coven
rm * ~. Już za późno, zauważyłeś dodatkową spację w
poleceniu. Właśnie skasowałeś całe swoje dzieło !
Nadchodzi pomoc. Dokument ten wyjaśnia jak odzyskiwać skasowane pliki w
systemie plików Second Extended File System. Może uda Ci się jednak opublikować Twój genialny program.
Dokument ten został napisany w standardzie ISO-8859-2.
Oryginał tego dokumentu znajduje się pod adresem
http://pobox.com/~aaronc/.
To mini-Howto stara się dostarczyć porad jak odzyskiwać skasowane pliki w systemie plików ext2. Zawiera ono również dyskusję, jak przede wszystkim, nie dopuścić do skasowania ważnych plików.
Chciałbym, aby było ono przydatne dla ludzi, którym zdarzył się mały wypadek z
rm; jakkolwiek mam również nadzieję, że przeczytają je także inni.
Nigdy nie wiadomo, pewnego dnia, któraś z zamieszczonych tu informacji z może
uratować Ci tyłek.
Tekst ten zakłada ogólną podstawową wiedzę o systemie plików UNIX-a. Mam jednak nadzieję, że będzie dostępny dla większości użytkowników Linux-a. Jeśli jesteś całkowicie początkujący, obawiam się, że odzyskiwanie plików wymaga ilości wiedzy technicznej, której nie posiadasz.
Nie będziesz mógł odtwarzać skasowanych plików z systemu plików ext2 bez praw
odczytu do urządzenia, na którym były one przechowywane. Ogólnie oznacza to,
że musisz być administatorem (root). Niektóre dystrybucje (takie jak
Debian GNU/Linux) tworzą
grupę disk, której członkowie mają dostęp do takich urządzeń.
Będziesz potrzebował także debugfs z pakietu e2fsprogs.
Prawdopodobnie jest on już zainstalowany przez Twoją dystrybucję.
Dlaczego to napisałem? Wynikło to głównie z moich własnych doświadczeń ze
zwykłą głupotą i katastrofą spowodowaną przez komendę rm -r wykonywaną
z prawami administratora. Skasowałem 97 plików typu JPEG, których potrzebowałem
i których prawie na pewno nie można było odzyskać z innych źrodeł. Z pomocą
użytecznych wskazówek (patrz rozdział
Wyrazy uznania i Bibliografia) i dużej wytrwałości, odzyskałem 91 nieuszkodzonych
plików. Udało mi się odtworzyć częściowo następne pięć (wystarczająco, aby
zobaczyć co było na tych obrazkach). Tylko jednego nie byłem w stanie obejrzeć,
ale nawet w tym przypadku, jestem prawie pewien, ze stracone zostały nie wiecej
niż 1024 bajty (niefortunnie z samego poczatku pliku; uwzględniając to,
że nic nie wiem o formacie JPG, zrobiłem wszystko co mogłem).
W dalszych rozważaniach będę chciał przedstawić jakiej wielkości współczynnika odtworzenia skasowanych plików możesz się spodziewać.
Istnieją następujące upublicznione wersje tego dokumentu (i daty ich publikacji):
Jakie zmiany zostały zrobione w tej wersji? Przede wszystkim, został poprawiony błąd w przykładowym odzyskiwaniu pliku. Dziękuję wszystkim, którzy napisali, żeby wskazać mi ten błąd. Mam nadzieję, że nauczyłem się być bardziej uważnym przy interakcyjnej pracy z programem.
Po drugie, rozważania o systemie plików w UNIX-ie zostały przerobione tak, aby uczynić je bardziej zrozumiałymi. Od początku nie byłem z tego zadowolony i dostałem komentarze, że nie było to napisane zbyt jasno.
Po trzecie, uuencode'owany gzip-owany tar-owany pakiet fsgrab ze środka
pliku został usunięty. Teraz program dostępny jest na
mojej stronie domowej
i na
Metalab-ie
(i kopiach, w Polsce -
Sunsite
).
Po czwarte, dokument ten został przetłumaczony na język składu SGML używany w Linux Documention Project. Ten język może być łatwo konwertowany do innych języków składu (np. HTML-a i LaTeX-a) w celu dogodnego sposobu wyświetlania i drukowania. Jedną z korzyści z tego jest to, że ładny wygląd wersji papierowej jest łatwiejszy do osiągniecia. Inną jest to, że dokument zawiera wewnętrzne i zewnętrzne odnośniki, gdy oglądany jest przez WWW.
egil@kvaleberg.no,
który wskazał na polecenie dump w debugfs. Jeszcze raz, dzięki
Egil.
Druga zmiana polegała na zaznaczeniu, że użycie chattr pomaga uniknąć
skasowania ważnych plików. Dziekuję Hermanowi Suijs
H.P.M.Suijs@kub.nl
za zauważenie tego.
Streszczenie zostało uaktualnione. Zostały dodane URL-e do organizacji i
oprogramowania. Wprowadzono wiele innych mniejszych zmian (literówki i tym
podobne).
Pomimo, że jest to pierwsza wersja od 17 miesięcy, jest tutaj mało
nowego. W wersji tej poprawione są drobniejsze błędy (literówki, puste
URL-e, tego typu rzeczy -- szczególnie nie związane z Open Group),
uaktualniono kilka części tekstu, które uległy przeterminowaniu, takich jak
partie dotyczące wersji jądra i lde. No i zmieniłem `Sunsite' na
`Metalab'.
To wydanie jest przewidywane jako ostatnie przed wersją 2.0, która, mam nadzieję, będzie pełnym Howto. Pracuję nad istotnymi zmianami, które spowodują zwiększenie głównego numeru wersji.
Najnowsza publiczna wersja tego dokumentu powinna być zawsze dostępna na Linux Documentation Project site (i kopiach, w Polsce - Sunsite ).
Najbardziej aktualna wersja jest również przechowywana na mojej stronie domowej w kilku formatach:
Trzeba pamiętać, że Linux różni się od MS-DOS jeśli chodzi o kasowanie plików. W MS-DOS (jak i w Windows 95), dosyć łatwo jest odzyskać skasowane pliki - `system operacyjny' (używam tego terminu dosyć swobodnie) dostarcza nawet narzędzi, które automatyzują ten proces. W Linux-ie jest inaczej.
Reguła numer jeden (podstawowa wskazówka) brzmi:
RÓB KOPIE ZAPASOWE
bez względu na wszystko. Pomyśl o wszystkich swoich danych. Być może, jak ja, trzymasz kilkuletni zbiór listów, kontaktów, programów, dokumentów na swoim komputerze. Pomyśl co by się stało z Twoim życiem, gdyby Twój dysk uległ katastrofalnemu uszkodzeniu, lub gdyby -- o wielkie nieba ! -- złośliwy craker wyczyścił Twój dysk. To nie jest niemożliwe; korespondowałem z wieloma ludźmi w takiej sytuacji. Myślę, że teraz wszyscy rozsądnie myślący użytkownicy Linux-a wyjdą, kupią urządzenie do robienia kopii zapasowych, opracują kalendarz archiwizacji i będą się jego trzymać. Ja używam wolnego dysku twardego w innym komputerze i okresowo kopiuję tam przez sieć ethernet mój katalog domowy. Więcej informacji o planowaniu kalendarza archiwizacji znajdziesz u Frischa (1995) (patrz rozdział Bibliografia i Wyrazy Uznania).
Co wtedy, gdy nie ma kopii zapasowej? (lub nawet przy istnieniu kopii zapasowej: żadne środki bezpieczeństwa nie są złym rozwiązaniem w miejscu gdzie przechowywane są ważne dane).
Spróbuj ustawić prawa dostępu do ważnych plików na 440 (lub mniej):
odebranie sobie samemu praw zapisu oznacza, że rm będzie wymagał
potwierdzenia przed skasowaniem. (Zauważyłem, że jeśli rekursywnie kasuję
katalog rm -r, prośba potwierdzenia pojawi się przy pierwszym i drugim
pliku, potem program zachowuje się jak rm -rf).
Niezłą sztuczką dla wybranych plików jest utworzenie w ukrytym katalogu
twardych dowiązań do nich. Kiedyś usłyszałem historię o administatorze,
który przez pomyłkę skasował /etc/passwd (nieomal w ten sposób
niszcząc system).
Jednym z rozwiązań takiego kłopotu jest zrobienie czegoś następującego (jako
root):
# mkdir /.backup
# ln /etc/passwd /.backup
Teraz skasowanie pliku wymaga większego wysiłku: gdy napiszesz tylko
# rm /etc/passwd
wtedy
# ln /.backup/passwd /etc
odtworzy Twój plik. Oczywiście, to rozwiązanie nie pomoże jeśli nadpiszesz plik, więc nie zapomninaj o kopii zapasowej.
W systemie plików ext2 jest możliwe użycie atrybutów ext2, aby ochraniać
pliki. Atrybuty te mogą być zmieniane za pomocą komendy chattr.
Istnieje atrybut `append-only`: plik z tym atrybutem może być tylko
powiększany, nie może być skasowany i istniejąca zawartość nie może być
nadpisana. Jeśli atrybut ten ma katalog, każdy plik czy katalog w nim leżący
może być normalnie modyfikowany, ale żaden z plików nie może zostać skasowany.
Atrybut `append-only' ustawia się poleceniem
$ chattr +a FILE...
Istnieje również atrybut `immutable', który może być zapalany lub gaszony tylko przez administratora. Pliku lub katalogu z tym atrybutem nie można zmienienić, skasować, zmienić jego nazwy, czy utworzyć do niego twardego dowiązania. Można go ustawić w następujący sposób:
# chattr +i FILE...
Ext2fs dostarcza również atrybutu `undeletable' (+u in chattr).
Założenie było takie, że plik z tym atrybutem po skasowaniu zostaje
przeniesiony w bezpieczne miejsce `safe location', aby rzeczywiste
skasowanie przesunąć w czasie. Niestety funkcja ta nie jest jeszcze
zaimplementowana w jądrze. Myślałem, że będzie większe zainteresowanie nią
i stanie się to szybko, ale nie jest ona dostępna (według mojej wiedzy) w
żadnej aktualnej wersji jądra.
Niektórzy radzą, aby zrobić alias lub funkcję w powłoce rm, która
wykonywałaby rm -i (będziesz musiał potwierdzić skasowanie
każdego pliku).
Dystrubucja Red Hat robi to domyślnie dla wszystkich użytkowników, w tym i dla root-a.
Ja osobiście nie lubię oprogramowania, które nie może działać bez mojej
pomocy, dlatego nie używam tego sposobu. Wcześniej, czy później może pojawić
się kolejny problem: kiedy będziesz pracował w trybie singe-user, lub
będziesz używał innej powłoki lub nawet innej maszyny, gdzie Twoja funkcja
rm nie istnieje. Jeśli będziesz spodziewał się, że każde skasowanie
wymaga potwierdzenia, dosyć łatwo jest nie przewidzieć tego, że kazałeś
skasować zbyt wiele plików. Również skrypty i programy, które podmieniają
rm mogą być bardzo niebezpieczne.
Trochę lepszym rozwiązaniem jest użycie pakietu, który umożliwia
`odtwarzalne' kasowanie poprzez specjalną komendę zastępująca rm.
Szczegóły znajdziesz u Peeka (1993) (patrz rozdział
Bibliografia i Wyrazy Uznania). Jednak w ten
sposób przyzwyczajamy użytkownika do pewniej nonszalancji przy kasowaniu
plików. Nie jest to najlepsze, bowiem system typu Unix wymaga jednak uważnego
działania.
To zależy. Problem wynika z tego, że w systemie operacyjnym wysokiej jakości, wielozadaniowym, wieloużytkownikowym, takim jak Linux, nie możesz przewidzieć kiedy ktoś zechce zapisać coś na dysk. Po chwili, w której kazałeś systemowi skasować jakiś plik, bloki przez niego zajęte mogą zostać użyte, gdy system będzie chciał zapisać coś nowego. (Jest to jeden przykład ogólnej zasady systemów typu Unix: jądro i związane z nim programy zakładają, że użytkownicy nie są idiotami). Ogólnie rzecz biorąc, im bardziej obciążona jest Twoja maszyna, tym mniej prawdopodobne jest odzyskanie plików.
Znaczenie może mieć również fragmentacja dysku. Jeśli partycja, na której był skasowany plik jest bardzo pofragmentowana, masz małe szanse na odczytanie całej jego treści.
Jeśli Twój komputer, tak jak mój, realnie jest maszyną jednoużytkownikową i nie robiłeś niczego co intensywnie korzystało z dysku w tragicznej chwili skasowania pliku, możesz się spodziewać współczynnika odzysku zbliżonego do tego wymienionego niżej. Ja odzyskałem prawie 94% plików (były to pliki binarne) w stanie nieuszkodzonym. Jeżeli otrzymasz 80% lub więcej, myślę, że będziesz z siebie zadowolony.
Operacja ta polega głównie na znalezieniu danych na urządzeniu partycji i uczynieniu ich ponownie widocznymi dla systemu operacyjnego. Są dwa sposoby, żeby to zrobić: pierwszy polega na takiej zmianie systemu plików, żeby usunąć znacznik `deleted' ze skasowanych iwęzłów z nadzieją, że pliki nagle pojawią się na swoim miejscu. Inną metodą, bezpieczniejszą, ale wolniejszą jest znalezienie położenia interesujących danych na partycji i zapisaniu ich jako nowy plik w innym systemie plików.
Przed odtwarzeniem danych musisz zrobić kilka rzeczy; patrz rozdziały Odmontowanie systemu plików, Przygotowanie do bezpośrednich zmian w iwęzłach i Przygotowanie do zapisania danych w innym miejscu. Informację jak odzyskiwać pliki znajdziesz w rozdziałach Szukanie skasowanych iwęzłów, Uzyskiwanie szczegółowych informacji o iwęzłach, Odzyskiwanie bloków danych i Bezpośrednie modyfikacje iwęzłów.
Niezależnie od metody jaką wybrałeś, pierwszym krokiem jest odmontowanie systemu plików zawierającego skasowane pliki. Zdecydowanie nie polecam żadnych działań na zamontowanym systemie plików. Krok ten powinien być wykonany najszybciej jak to będzie możliwe od momentu, gdy zauważyłeś, że pomyłkowo skasowałeś pliki. Im szybciej odmontujesz system plików, tym większa będzie szansa, że Twoje dane nie zostaną nadpisane (zamazane).
Najprostszą metodą, aby to zrobić jest: zakładając, że
skasowane pliki były systemie plików /usr,
# umount /usr
Jeśli chcesz możesz również utrzymać widoczność katalogu /usr.
Zamontuj go w trybie tylko-do-odczytu:
# mount -o ro,remount /usr
W przypadku, gdy skasowane pliki były na głównej partycji musisz dodać opcję
-n, aby zabronić programowi mount na próby zapisu do
/etc/mtab:
# mount -n -o ro,remount /
Poza tym wszystkim, możliwe jest również, że jakiś inny proces używa
interesującego nas systemu plików (spowoduje to błąd typu `Resource busy'
przy próbie odmontowania). fuser jest programem, który wyśle sygnał do
każdego procesu używającego wskazanego pliku lub punktu montowania. Spróbuj
tego dla partycji /usr:
# fuser -v -m /usr
W ten sposób uzyskasz listę przeszkadzających Ci procesów. Zakładając, że żaden z nich nie jest niezbędny, możesz napisać
# fuser -k -v -m /usr
aby wysłać sygnał SIGKILL do każdego z nich ( gwarantuje to ich zabicie),
albo
# fuser -k -TERM -v -m /usr
aby przekazać każdemu sygnał SIGTERM (spowoduje to normalne zakończenie
pracy procesów).
Moja rada? Nie używaj tej metody. Nie uważam, żeby dobrym pomysłem była zabawa na niskim poziomie w systemie plików. Metoda ta stwarza również problemy jeśli chcesz odtworzyć pliki większe niż 12 bloków. W celu odzyskania dużych plików, tak czy owak, będziesz musiał użyć innej metody. (Chociaż patrz rozdział Czy będzie to kiedyś łatwiejsze? w celu dodatkowych informacji.)
Jeżeli jednak chcesz koniecznie użyć tego sposobu, lepiej skopiuj bezpośrednio obraz partycji na inną partycję, a później zamontuj ją używając pętli zwrotnej (loopback):
# cp /dev/hda5 /root/working
# mount -t ext2 -o loop /root/working /mnt
(Niektóre wersje mount nie potrafią tego zrobić. Jeśli Twój mount
nie działa poprawnie, zalecam użycie najnowszej wersji, conajmniej 2.7. Dużo
starsze wersje mają problemy z utrzymaniem bezpieczeństwa danych.)
Używając pętli zwrotnej, nawet jeśli całkowicie zniszczysz system plików, możesz ponownie skopiować partycję i zacząć próby od nowa.
Jeżeli wybierzesz tę drogę działania, musisz znaleźć partycję ratunkową
-- miejsce, gdzie zapiszesz nowe kopie odzyskanych plików. Na całe
szczęście, twój system zawiera kilka partycji: prawdopodobnie partycję
główną, /usr i /home. Wybierz jedną z nich i utwórz na
niej nowy katalog.
Jeśli masz tylko partycję główną i wszystko przechowujesz na niej, rozwiązanie troszkę się skomplikuje. Może masz partycje MS-DOS lub Windows, której bedziesz mógł użyć ? Albo masz sterownik do ramdisk-u w swoim jądrze, albo w module ? W celu użycia ramdisk-u (zakładając, że jądro jest nowsze od 1.3.48), napisz:
# dd if=/dev/zero of=/dev/ram0 bs=1k count=2048
# mke2fs -v -m 0 /dev/ram0 2048
# mount -t ext2 /dev/ram0 /mnt
W ten sposób stworzyłeś 2MB wolumen ramdisk-u i zamontowałeś do w
/mnt.
Krótkie ostrzeżenie: jeżeli używasz kerneld (lub zastępującego go
kmod w jądrach 2.2.x i późnych 2.1.x) w celu automatycznego ładowania i
odładowywania modułów, nie odmontowuj ramdisk-u dopóki nie skopiujesz
wszystkich plików na bardziej trwały nośnik. W chwili, gdy go odmontujesz,
kerneld zakłada, że może odładować moduł (zwykle jednak czeka pewien
okres). Gdy to już się stanie, pamięć zostanie użyta przez inne części jądra
i stracisz wszystkie godziny spędzone na odzyskiwaniu danych.
Jeżeli masz napęd Zip, Jaz, LS-120 lub coś podobnego, może on spełniać z powodzeniem rolę partycji ratunkowej. W pozostałych przypadkach, użyj po prostu napędu stacji dyskietek.
Będziesz jeszcze potrzebował programu, który potrafi czytać dane ze środka
partycji. Właściwie może to zrobić dd, ale aby przeczytać dane leżące
od 600 MB do 800 MB, dd musi przeczytać i zignorować pierwsze 600 MB.
Zajmuje to dosyć dużo czasu, nawet na szybkich dyskach. Moim sposobem na
obejście tego problemu było napisanie programu, który przeskakuje w środek
partycji. Nazywa się on fsgrab; pakiet ze źródłem możesz znaleźć na
mojej stronie domowej
lub na
Metalab-ie
(i kopiach, w Polsce -
Sunsite
). Jeśli będziesz chciał stosować tę metodę, w dalszej części tego
mini-JTZ zakładam, że masz fsgrab.
Nie potrzebujesz fsgrab-a, jeżeli żaden z plików, które starasz się
odzyskać, nie zajmuje więcej niż 12 bloków (przeważnie blok ma rozmiar jednego
kilobajta).
Jeżeli musisz użyć fsgrab-a, ale nie chce Ci się go ściągać i kompilować,
jest też prosta droga na przetłumaczenie polecenia dla fsgrab na
polecenie dla dd. Mając
fsgrab -c count -s skip device
możesz użyć komendy dd (przeważnie jest to dużo wolniejsze)
dd bs=1k if=device count=count skip=skip
Muszę Cię ostrzec, że chociaż dla mnie fsgrab działa doskonale, nie
mogę brać odpowiedzialności za jego funkcjonowanie. Pisałem go dosyś szybko i
niestarannie, po prostu, aby działał poprawnie. Więcej szczegółów o
gwarancji znajdziesz w rozdziale `No Warranty' w pliku COPYING
dołaczonym do pakietu (the GNU General Public Licence).
Następnym krokiem jest odnalezienie w systemie plików tych iwęzłów,
które zostały ostanio uwolnione. Do tego zadania użyjemy programu
debugfs. Uruchom debugfs z nazwą urządzenia, na którym
przechowywany jest system plików:
# debugfs /dev/hda5
Jeżeli chcesz bezpośrednio wprowadzać zmiany do iwęzłów, dodaj opcję
-w, aby umożliwić zapisywanie do systemu plików:
# debugfs -w /dev/hda5
lsdel jest poleceniem debugfs, które wyszukuje skasowane iwęzły. Po
zachęcie programu, napisz więc:
debugfs: lsdel
Po chwili świergotania dysku, długa lista zostanie przekierowana do Twojego
ulubionego łamacza na strony (ang. pager) (wartość zmiennej
$PAGER). Powinienneś zachować gdzieś kopię tej listy.
Jeżeli używasz less, możesz po prostu napisać -o i nazwę pliku
wyjściowego. W innym razie, będziesz musiał przesłać wyniki do pliku w inny
sposób. Spróbuj czegoś takiego:
debugfs: quit
# echo lsdel | debugfs /dev/hda5 > lsdel.out
Teraz, tylko na podstawie czasu skasowania, rozmiaru, praw własności i właściciela musisz określić, które iwęzły należały do skasowanych plików. Będzie to prawdopodobnie proste zadanie jeśli wypadek przydarzył się 5 minut temu, jeśli nie, przeszukaj listę bardzo uważnie.
Polecam wydrukowanie sobie listy iwęzłów, które chcesz odzyskać. Ułatwi Ci to dalszą pracę.
debugfs dysponuje poleceniem stat, które wyświetla szczegółowe
informacje o iwęźle. Wykonaj tę komendę dla wszystkich iwęzłów, które chcesz
odzyskać. Na przykład, jeżeli interesuje Cię iwęzeł o numerze 148003, napisz
tak:
debugfs: stat <148003>
Inode: 148003 Type: regular Mode: 0644 Flags: 0x0 Version: 1
User: 503 Group: 100 Size: 6065
File ACL: 0 Directory ACL: 0
Links: 0 Blockcount: 12
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x31a9a574 -- Mon May 27 13:52:04 1996
atime: 0x31a21dd1 -- Tue May 21 20:47:29 1996
mtime: 0x313bf4d7 -- Tue Mar 5 08:01:27 1996
dtime: 0x31a9a574 -- Mon May 27 13:52:04 1996
BLOCKS:
594810 594811 594814 594815 594816 594817
TOTAL: 6
Gdy chcesz odzyskać wiele plików, dobrze będzie jak zautomatyzujesz ten
proces. Przy założeniu, że Twoja lsdel lista interesujących iwęzłów
znajduje się w pliku lsdel.out, napisz coś takiego:
# cut -c1-6 lsdel.out | grep "[0-9]" | tr -d " " > inodes
Nowy plik inodes zawiera tylko numery iwęzłówm, które chcesz odzyskać,
po jednym w jednej linii. Zapisaliśmy to, bowiem później bardzo nam się
przyda. Potem piszesz po prostu:
# sed 's/^.*$/stat <\0>/' inodes | debugfs /dev/hda5 > stats
i plik stats zawiera wyniki wszystkich poleceń stat.
Ta część jest albo bardzo łatwa, albo trudna, w zależności od tego, czy plik który chcesz odzyskać zajmował więcej niż 12 bloków.
Jeżeli plik ma mniej niż 12 bloków, numery wszystkich bloków, które on
zajmuje zapisane są w jednym iwęźle. Możesz odczytać je po wykonaniu
polecenie stat dla tego iwęzła. Ponadto, w debugfs jest polecenie,
które automatycznie odzyskuje taki plik. Weźmy ten sam przykład co poprzednio:
debugfs: stat <148003>
Inode: 148003 Type: regular Mode: 0644 Flags: 0x0 Version: 1
User: 503 Group: 100 Size: 6065
File ACL: 0 Directory ACL: 0
Links: 0 Blockcount: 12
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x31a9a574 -- Mon May 27 13:52:04 1996
atime: 0x31a21dd1 -- Tue May 21 20:47:29 1996
mtime: 0x313bf4d7 -- Tue Mar 5 08:01:27 1996
dtime: 0x31a9a574 -- Mon May 27 13:52:04 1996
BLOCKS:
594810 594811 594814 594815 594816 594817
TOTAL: 6
Plik ten zajmuje sześć bloków. Ponieważ jest to mniej niż 12, możemy użyć
debugfs, aby zapisać plik w nowym miejscu, na przykład
/mnt/recovered.000:
debugfs: dump <148003> /mnt/recovered.000
Oczywiście można to zrobić również, posługując się fsgrab. Pokażę jak
wygląda takie przykładowe wywołanie:
# fsgrab -c 2 -s 594810 /dev/hda5 > /mnt/recovered.000
# fsgrab -c 4 -s 594814 /dev/hda5 >> /mnt/recovered.000
Zarówno przy korzystaniu z debugfs jak i fsgrab, na końcu pliku
/mnt/recovered.000 pozostaną śmieci. Nie ma to większego znaczenia.
Łatwo można się ich pozbyć. Najprostszą metodą jest odczytanie pola
Size w iwęźle i wpisanie tej wartości za opcją bs komendy dd:
# dd count=1 if=/mnt/recovered.000 of=/mnt/resized.000 bs=6065
Może się okazać, że jeden lub więcej z bloków zostało straconych, bowiem zostały już nadpisane. Jeżeli tak będzie, po prostu nie miałeś szczęścia: bloki te odeszły już na zawsze. (Wybraź sobie, że odmontowałeś je wcześniej!)
Problem pojawia się, gdy plik zajmuje więcej niż 12 bloków danych. Przypadek ten wymaga pewnej wiedzy o tym jak zbudowany jest system plików UNIX-a. Dane pliku przechowywane są w jednostkach zwanych `blokami'. Bloki te są numerowane sekwencyjnie. Każdy plik ma również `iwęzeł', w którym przechowywane są informacje typu: właściciel, prawa dostępu i typ. Podobnie jak bloki, iwęzły są numerowane sekwencyjnie, chociaż mają one różne numeracje. Pozycja w katalogu odpowiadająca plikowi składa się z jego nazwy i numeru iwęzła.
Jednak na postawie tych informacji jądro nie jest jeszcze w stanie odnaleźć na partycji danych odpowiadających jednej z pozycji w katalogu. Żeby to umożliwić, iwęzeł przechowuje położenia bloków danych zajmowanych przez plik. Zorganizowane jest to w następujący sposób:
Przeczytaj to jeszcze raz: wiem, że to jest skomplikowane, ale bardzo ważne.
Niestety wszystkie implementacje jądra, aż do wersji 2.0.36 podczas kasowania pliku zerują bloki pośrednie (podwójnie pośrednie, itd.). Jeśli Twój plik jest większy niż 12 bloków, nie masz gawarancji, że będzie możliwe odnalezienie numerów wszystkich jego bloków, nie mówiąc już nic o ich zawartości.
Jedyną metodą jaką udało mi się znaleźć, jest oparcie się na założeniu, że plik nie był pofragmentowany. Jeżeli był, masz poważny problem. Zakładając, że plik nie był pofragmentowany, istnieje kilka sekcji bloków danych, w zależności od tego ile bloków danych zajmuje plik:
Numery bloków przechowywane są w iwęźle, jak to było opisane wcześniej.
Po blokach bezpośrednich, odlicz jeden na blok pośredni, dalej znajduje się 256 bloków danych.
Tak jak poprzednio jest: 12 bezpośrednich bloków, (nieprzydatny) blok pośredni i 256 bloków. Po tym wszystkim następuje (nieprzydatny) podwójnie pośredni blok oraz 256 powtórzeń jednego (nieprzydatnego) bloku pośredniego i 256 bloków danych.
Położenie piewszych 65804 bloków jak wyżej. Potem potrójnie pośredni blok i 256 powtórzeń `sekwecji podwójnie pośredniej'. Każda podwójnie pośrednia sekwencja zawiera (nieprzydatny) podwójnie pośredni blok, po którym następuje 256 powtórzeń jednego (nieprzydatnego) bloku pośredniego i 256 bloków danych.
Oczywiście, nawet jeśli numery bloków, które przyjęliśmy, są poprawne, nie ma żadnych gwarancji, że dane są w nich są nienaruszone. Dodatkowo, im dłuższy był plik, tym mniejsze szanse, że system operacyjny zapisał go bez żadnej fragmentacji (za wyjątkiem wyjątkowych sytuacji).
Założyłem, że rozmiar Twoich bloków wynosi 1024 bajty, tyle ile wartość standardowa. Jeśli Twój blok jest większy, niektóre z liczb podanych wyżej zmienią się. Sprecyzujmy: dopóki numer każdego bloku ma długość 4 bajtów, rozmiarbloku/4 jest liczbą numerów bloków, które mogą być przechowane w każdym bloku pośrednim. Każde wystąpienie liczby 256 we wcześniejszym opisie, zastąp na rozmiarbloku/4. Zmianie ulegną również ograniczenia na ilość wymaganych bloków.
Popatrz na przykładowe odzyskiwanie dużego pliku.
debugfs: stat <1387>
Inode: 148004 Type: regular Mode: 0644 Flags: 0x0 Version: 1
User: 503 Group: 100 Size: 1851347
File ACL: 0 Directory ACL: 0
Links: 0 Blockcount: 3616
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x31a9a574 -- Mon May 27 13:52:04 1996
atime: 0x31a21dd1 -- Tue May 21 20:47:29 1996
mtime: 0x313bf4d7 -- Tue Mar 5 08:01:27 1996
dtime: 0x31a9a574 -- Mon May 27 13:52:04 1996
BLOCKS:
8314 8315 8316 8317 8318 8319 8320 8321 8322 8323 8324 8325 8326 8583
TOTAL: 14
Wydaje się, że mamy pewne szanse, że plik nie jest pofragmentowany. Pewne jest tylko, że pierwsze 12 bloków, których numery są zawarte w iwęźle, jest `po kolei'. Możemy więc odtworzyć te bloki:
# fsgrab -c 12 -s 8314 /dev/hda5 > /mnt/recovered.001
Następny blok, wymieniony w iwęźle, 8326, jest blokiem pośrednim, który ignorujemy. Mamy jednak nadzieję, że nastepne 256 bloków jest naszymi blokami danych (numery 8327 do 8582).
# fsgrab -c 256 -s 8327 /dev/hda5 >> /mnt/recovered.001
Ostatnim blokiem wymienionym w iwęźle jest 8583. Nadal zakładamy, że istnieje ciągłość w blokach. Jest to jednak uzasadnione bowiem: ostatnim blokiem danych był blok o numerze 8582 (8327 + 255). Blok 8583 jest podwójnie pośredni i może być zignorowany. Teraz może nastąpić do 256 powtórzeń bloku pośredniego (który można pominąć) i 256 bloków danych. Trochę arytmetyki i już można pisać kolejne polecenie. Zauważ, że pominęliśmy podwójnie pośredni blok 8583 oraz pośredni blok 8584 i rozpoczęliśmy czytać dane od bloku numer 8585.
# fsgrab -c 256 -s 8585 /dev/hda5 >> /mnt/recovered.001
# fsgrab -c 256 -s 8842 /dev/hda5 >> /mnt/recovered.001
# fsgrab -c 256 -s 9099 /dev/hda5 >> /mnt/recovered.001
# fsgrab -c 256 -s 9356 /dev/hda5 >> /mnt/recovered.001
# fsgrab -c 256 -s 9613 /dev/hda5 >> /mnt/recovered.001
# fsgrab -c 256 -s 9870 /dev/hda5 >> /mnt/recovered.001
Dodajmy to wszystko, zapisaliśmy do tej pory 12 + (7 * 256) bloków, co daje 1804. Wyniki polecenia `stat' dla iwęzła dały nam `blockcount' (liczba bloków) równe 3616. Niestety są to bloki o rozmiarze 512 bajtów (zaszłość z UNIX-a), na prawdę potrzebujemy więc 3616/2 = 1808 bloków o rozmiarze 1024 bajty. Oznacza to, że musimy jeszcze odnaleźć cztery bloki. Ostatni przeczytany blok danych miał numer 10125. Tak jak to robiliśmy do tej pory, pomijamy blok pośredni (numer 10126) i możemy już zapisać ostatnie cztery bloki.
# fsgrab -c 4 -s 10127 /dev/hda5 >> /mnt/recovered.001
Przy pewnym szczęściu udało nam się odzyskać cały plik.
Metoda ta jest dużo prostsza. Jednak, tak jak wspomniałem wcześniej, nie może być jeszcze stosowana do plików większych niż 12 bloków.
W każdym iwęźle, który chcesz odzyskać musisz ustawić licznik podłączeń
(linkcount) na jeden i czas skasowania (deletion time) na zero. Robi się to
za pomocą polecenia mi (modify inode) w debugfs. Przykładowe
wywołanie, modyfikacja iwęzła 148003 (tego co wcześniej):
debugfs: mi <148003>
Mode [0100644]
User ID [503]
Group ID [100]
Size [6065]
Creation time [833201524]
Modification time [832708049]
Access time [826012887]
Deletion time [833201524] 0
Link count [0] 1
Block count [12]
File flags [0x0]
Reserved1 [0]
File acl [0]
Directory acl [0]
Fragment address [0]
Fragment number [0]
Fragment size [0]
Direct Block #0 [594810]
Direct Block #1 [594811]
Direct Block #2 [594814]
Direct Block #3 [594815]
Direct Block #4 [594816]
Direct Block #5 [594817]
Direct Block #6 [0]
Direct Block #7 [0]
Direct Block #8 [0]
Direct Block #9 [0]
Direct Block #10 [0]
Direct Block #11 [0]
Indirect Block [0]
Double Indirect Block [0]
Triple Indirect Block [0]
Ustawiłem czas skasowania na 0, licznik podłączeń na 1 i nacisnąłem Enter dla wszystkich innych pól. Jest to pewną niedogodnością, jeżeli masz wiele plików do odzyskania. Myślę jednak, że można z tym żyć. Jeśli oczekujesz wygody, lepiej zacznij używać graficznego `systemu operacyjnego' ze ślicznym `Koszem na śmieci'.
Przy okazji: polecenie mi pokazuje `Czas stworzenia' (Creation
time) w iwęźle. To kłamstwo ! (lub, jak kto woli, pomyłka.) Prawda jest taka,
że nie można w systemie plików UNIX-a stwierdzić kiedy dany plik został
utworzony. Pole st_ctime w struct stat zawiera `czas zmiany
iwęzła', czyli czas ostaniej zmiany, któregoś z parametrów iwęzła. To tyle
z dzisiejszej lekcji.
Nowsze wersje debugfs niż moja, prawdopodobnie nie wyświetalają
niektórych pól w iwęźle (szczególnie, Reserved1 i Fragment).
Po zmianie w iwęzłach, możesz wyjść z debugfs i napisać:
# e2fsck -f /dev/hda5
Pomysł polega na tym, że każdy ze skasowanych plików został odkasowany, ale
nie pojawił się w żadnym katalogu. Program e2fsck umie to wykryć i
doda pozycję dla każdego z nich w katalogu /lost+found systemu
plików. (Jeżeli partycja była zamontowana w /usr, pliki pojawią się
w /usr/lost+found, gdy ją zamontujesz.) Pracą, którą musisz jeszcze
zrobić, to nadanie plikom nazw i umieszczenie ich we właściwym miejscu
drzewa plików.
Po uruchomieniu e2fsck, wyświetli Ci on trochę informacji, ale zada
również pytania, które zniszczenia naprawiać. Odpowiadaj `yes' (tak) na
wszystko co dotyczy `summary information' lub iwęzłów, które zmieniałeś.
Resztę pozostawiam do Twojej decyzji, pamiętaj, że nie jest najlepszą
metodą odpowiadanie `tak' na wszystkie pytania. Po skończeniu pracy
przez e2fsck, możesz ponownie zamontować system plików.
Istnieje alternatywne rozwiązanie do pozwolenia, aby e2fsck utworzył
pliki w /lost+found. Możesz użyć debugfs i stworzyć w systemie
plików dołączenie (link) do iwęzła. Służy do tego polecenie link w
debugfs, po zmianach w samym iwęźle:
debugfs: link <148003> foo.txt
W ten sposób powstanie w bieżącym katalogu plik o nazwie foo.txt;
foo.txt będzie Twoim odzyskanym plikiem. Nadal musisz jednak uruchomić
e2fsck, aby uaktualnić informacje ogólne, liczniki bloków itp. itd.
Tak. Właściwie, mam nadzieję, że tak. Chociaż, gdy to piszę, aktualna, stabilna wersja jądra (seria 2.0.x) zeruje bloki pośrednie. Wersje serii rozwojowej 2.1.x i stabilnej 2.2.x nie mają tej wady. Dzisiaj, 2 lutego 1999 minęło dopiero kilka dni od wydania jądra 2.2.1; prawdopodobnie pojawi się ono w dystrybucjach za jeden, dwa miesiące.
Kiedy wersje jądra rozwiążą problem zerowania bloków pośrednich, wiele moich
ręcznych technik modyfikacji iwęzłów nie będzie już potrzebnych. W tym
samym czasie stanie się możliwe użycie polecenia dump w debugfs
dla dużych plików i innych programów narzędziowych do odzyskiwania plików.
Pewnie, że są. Niestety cierpią one na te same problemy co ręczna technika zmian w iwęzłach: bloki pośrednie są nieodzyskiwalne. Warto im się przyjrzeć, bowiem wydaje się, że ograniczenie to wkrótce zniknie.
Napisałem program e2recover, który jest właściwie tylko Perl-ową
otoczką dookoła fsgrab. Stara się on poradzić sobie z wyzerowanymi
blokami pośrednimi i wydaje sie, że działa całkiem nieźle dla dużych plików,
które nie uległy fragmentacji. Ustawia poprawne prawa dostępu (i właściciela,
gdy to jest możliwe). Upewnia się również, że odzyskiwany plik ma poprawny
rozmiar.
Program e2recover był planowany jako część poważnych zmian w tym Howto;
oznacza to niestety, że więcej użytecznej dokumentacji do e2recover
będzie zamieszczone dopiero w nowej wersji tego dokumentu. Jednak i teraz
może on się komuś przydać; można go ściągnąć z
mojej strony domowej, i wkrótce z Metalab-a (jest już w Polsce -
Sunsite).
Scott D. Heavner jest autorem programu lde, the Linux Disk Editor.
Może on być używany zarówno jako binarny edytor dysku i jako odpowiednik
debugfs dla systemów plików ext2 i minix, a nawet dla systemu plików
xia (chociaż wsparcie dla xia przestało być dostępne w jądrach 2.1.x i 2.2.x).
Zawarto w nim kilka pomysłów wspomagających odzyskiwanie skasowanych plików:
śledzenie listy bloków tworzących plik i wyszukiwanie danych na dysku. Zawiera
on także całkiem użyteczną dokumentację o podstawach systemu plików oraz jak go
używać do odzyskiwania plików skasowanych. Wersja 2.4 lde jest dostępna na
Metalab-ie (i kopiach, w Polsce -
Sunsite), lub na
stronie domowej autora.
Inne możliwości oferowane są przez GNU Midnight Commander, mc. Jest to
pełnoekranowe narzędzie do zarządzania plikami, oparte na znanym w
środowisku MS-DOS programie o nazwie `NC'. mc obsługuje mysz zarówno
na konsoli, jak i w oknie xterm-a, dostarcza mechanizm wirtualnych systemów
plików, co umożliwia triki takie jak cd do archiwum tar. Odzyskiwanie
plików obsługiwane jest przez jeden z takich wirtualnych systemów plików.
Wszystko to brzmi bardzo zachęcająco, ale muszę przyznać, że nie używam
tego programu -- wolę staromodne polecenia powłoki.
Aby używać możliwości odzyskiwania skasowanych plików, musisz skonfigurować
program z opcją --with-ext2undel; będziesz również potrzebował
bibliotek w wersji rozwojowej i niektórych plików zawartych w pakiecie
e2fsprogs. W ten sposób zbudowana jest wersja dostarczana w
Debian GNU/Linux; tak samo może
być w innych dystrybucjach. Teraz możesz po prostu kazać mu cd
undel:/dev/hda5, i otrzymasz `zawartość katalogu' ze skasowanymi
plikami. Jak wiele innych i ten program bardzo źle radzi sobie z zerowaniem
bloków pośrednich -- przeważnie odtwarza tylko pierwsze 12k większych
plików.
Aktualną wersję można ściągnąć z serwera ftp the Midnight Commander.
Mam zamiar regularnie uaktualniać ten dokument tak długo jak będę miał
wystarczająco dużo czasu i coś ciekawego do powiedzenia. Oznacza to, że bardzo
mi zależy na komentarzach od czytelników. Czy moje pisanie może być
bardziej zrozumiałe? Czy myślicie o czymś, co uczyniłoby problem prostszym?
Jest jakiś program, który robi to wszystko automatycznie? Jeżeli masz coś do
powiedzenia o tym dokumencie, albo o fsgrab, albo o e2recover,
napisz do mnie
aaronc@pobox.com.
`Jeżeli widzę dalej od innych, to dlatego, że stoję na ramionach olbrzymów.' (Isaac Newton)
To mini-Howto wywodzi się z listu zamieszczonego w grupie
comp.os.linux.misc
przez Robina Glovera
swrglovr@met.rdg.ac.uk.
Chciałbym podziekować Robinowi za wspaniałomyślne pozwolenie na
przetworzenie jego pomysłów w to mini-Howto.
Korzystając z okazji, chciałbym jeszcze raz podziękować wszystkim, którzy napisali do mnie o tym Howto. Otrzymywanie wyrazów wdzieczności czyni pracę wartą wysiłku.
Niektóre odnośniki bibliograficzne:
Wszystkie znaki towarowe są własnością ich prawowitych właścicieli. Konkretnie:
Prawa autorskie do tego dokumentu 1997, 1999 posiada Aaron Crane
aaronc@pobox.com.
Może on być darmowo rozpowszechniany w całości, łącznie z tą notą autorską.
Nie może być zmieniany bez zgody autora lub koordynatora Linux
Documentation Project HOWTO. Nie dotyczy to tylko kopiowania jego części w
celu przeglądania lub cytowania; w takim przypadku, części te muszą być
poprawnymi cytatami i nie muszą zawierać noty o prawach autorskich.
Autor oczekuje, ale nie wymaga, że ten kto będzie chciał sprzedawać kopie tego dokumentu, niezależnie od tego, czy na nośniku elektronicznym, czy papierowym, poinformuje jego lub koordynatora projektu Linux HOWTO o swoich zamiarach.
Koordynatorem projektu Linux HOWTO jest aktulanie Tim Bynum
linux-howto@sunsite.unc.edu.
Starałem się, aby tłumaczenie było najwierniejsze z możliwych. Dlatego nie ma żadnych zmian w stosunku do orginału, za wyjątkiem odnośników do polskiej kopii serwera Metalab na Sunsite.icm.edu.pl.
Czekam na komentarze pod adresem: Bartosz Sawicki
sawickib@ee.pw.edu.pl.
doc-linux-pl-2002.06.14.orig/mini/html/GravisUltrasound.pl.html 0100664 0001750 0001750 00000021010 07104371340 023076 0 ustar coven coven
Jako długoletni fan kart dźwiękowych gravis-a, byłem naprawdę szczęśliwy kiedy zobaczyłem prawdziwą nowość gravis-a. Od długiego czasu planowałem kupić kartę Ultrasound i kupiłem ją z 1 MB RAM-u jak tylko pojawiła się we Francji.
Zainstalowałem ją, i cieszyłem się kiedy została wykryta przez mój Plug'n'Play BIOS, a nawet przez Windows 95 (przepraszam, ale nie ponabijam się dzisiaj z ich marketingu). Więc pomyślałem, że karta mogłaby działać wszędzie...
No to odpaliłem Linux-a, nie miałem problemów, karta została wykryta jako gus rev 3.4, co wydawało się być poprawne, ale nie było...
Jakiś czas później spróbowałem Quake'a i nie miałem dźwięku. Przeczytałem więc podręcznik do gry, i zobaczyłem, że korzysta on z pewnych mechanizmów DMA, których nie było w standardowym gus-ie.
Pomyslałem, że to wcale nie jest zabawne, mieć taką cholernie dobrą kartę i nie mieć dźwięku w takiej fajnej grze. (wersja dos-owa potrzebuje emulacji sound blaster-a, a ja wolę nie mieć dźwięku niż to)
No to co teraz? Powinienem czekać do maja na sterownik PnP dla gus-a? Mam kupić sound blaster-a (sic)? co będzie w następnym odcinku "Akt X"?
No i wróciłem do dos-a i pobawiłem się trochę programem
iwinit. Popatrzyłem na to co mi wyświetlał w trybie
verbose i zobaczyłem coś takiego: CODEC adress 32c...
Co? gus PnP ma CS4231/CS1848 Codec tak jak gus MAX???
Potem pogrzebałem po moich kopiach zapasowych i znalazłem ostatnie sterowniki gravis-a, wziąłem ultrinit 2.31 i wpisałem:
>set ultrasnd=220,6,5,5,5 >set ultra16=32c,0,0,1,0 >set ultradir=c:\ultrapnp >ultrinit
i wiecie co? Ultrasound MAX detected !!!
Wow. Super! Pomyslałem więc, że muszę tylko to wpisać zanim wystartuje Linux-a i będę miał obsługę gus Max i w końcu ten p**** quake będzie miał dźwięk !
To nie było takie proste 8(
Nie jestem dobrym programistą, ale znam C na tyle, żeby przejrzeć sterownik i zobaczyć co się dzieje (szczególnie jeśli jest tam dużo komentarzy).
Popatrzyłem do pliku gus_card.c, ale nie znalazłem nic
ciekawego. Potem popatrzyłem do gus_wave.c i zobaczyłem coś
takiego:
* Value 255 means pre-3.7 which don't have mixer.
* Values 5 thru 9 mean v3.7 which has a ICS2101 mixer.
* 10 and above is GUS MAX which has the CS4231 codec/mixer.
Super! Po prostu muszę ustawić wartość 10 i będzie działać... Nie!
Zrobienie tego spowoduje, że jądro będzie myślało, że masz gus Max, ale nie wykryje chip-a codec!
Więc musiałem także wymusić wykrycie tego chip-a!
Znalezienie co muszę zrobić nie było łatwe, ale w końcu mi się
udało. W pliku gus_wave.c była taka linia:
if (ad1848_detect (gus_base + 0x10c, NULL, hw_config->osp))
co znaczyło, że jądro próbuje samo wykryć chip AD1848. Pomyślałem, że nie może go wykryć przez to PnP i miałem rację! Zmieniłem tę linię na:
if (!(ad1848_detect (gus_base + 0x10c, NULL, hw_config->osp)))
skompilowałem jeszcze raz jądro i quake działa teraz na cacy!
Tak przy okazji: W pliku gus_card.c jest opcja
gus_pnp_flag, ale nie widziałem żadnej różnicy między tym
kiedy była włączona i wyłączona 8( (może robiłem coś źle).
Nie zapomnij, że to nie będzie działać jeśli nie masz RAM-u na
swojej karcie...
Przede wszystkim nie używaj już lilo, ponieważ musisz
zainicjować gus-a PnP zanim wystartujesz Linux-a ([Od
tłumacza] w tej chwili można już inicjować karty (nie
wszystkie) PnP pod Linux-em. Przeczytaj podrozdział
Karty PnP pod Linux-em.). Napisz fdisk
/mbr pod dos-em, przeczytaj odpowiednie HOWTO na ten temat).
W swoim autoexec.bat wpisz:
set interwave=c:\ultrapnp\iw.ini c:\ultrapnp\iwinit set ultrasnd=220,6,5,5,5 (czy jakie tam są twoje wartości) set ultra16=32c,0,0,1,0 set ultradir=c:\ultrapnp c:\ultrapnp\ultrinit
Ultrinit znajdziesz w gus00045.zip na każdym ftp z
gravis-em.
Pod Linux-em, otwórz plik gus_wave.c w katalogu
/usr/src/linux/drivers/sound (czy gdziekolwiek
indziej). Znajdź linię:
if (val == 255 || val < 5) (line 3049 in 3.5b7)
i w linii wcześniej napisz:
val=10;
Potem znajdź linię:
if (ad1848_detect (gus_base + 0x10c, NULL, hw_config->osp)) (line 3085)
i zmień ją na
if (!(ad1848_detect (gus_base + 0x10c, NULL, hw_config->osp)))
Skompiluj jądro z obsługą gus-a i gus max. U mnie jest to:
BASE = 220 IRQ = 5 DMA1 = 6 DMA2 = 5 DMABUF = 65536
No i miłej zabawy z dźwiękiem!
[Sekcja dodana przez tłumacza.]
Do inicjalizacji karty służy narzędzie o nazwie sapnptools,
które jest do zdobycia np. pod adresem
ftp.icm.edu.pl. Dokładny opis znajduje się razem z
dystrybucją. Ogólnie wygląda to tak: najpierw kompilujesz programy
isapnp i pnpdump. Potem tym drugim generujesz sobie plik
konfiguracyjny, który potem odpowiednio modyfikujesz do własnych
potrzeb. Następnie, żeby zainicjalizować kartę (jeśli używasz
modułu do dźwięku), piszesz isapnp /etc/isapnp.conf i
insmod sound.
Używałem jądra w wersji 1.3.75, ale powinno być dobrze również z jądrami nowszymi niż 1.3.70 (napisz do mnie jeśli tak nie jest).
To mini-HOWTO zostało napisane przez J-F MAMMETa.
e-mail: mammet@diva.univ-mlv.fr
www: http://diva.univ-mlv.fr/ mammet/
Najnowszą wersję tego dokumentu możesz pobrać z mojej strony WWW pod
adresem
diva.univ-mlv.fr (to w krótce).
Nie biorę żadnej odpowiedzialności za jakiekolwiek szkody, które mogą ci się przytrafić (nawet padnięte win95).
Jeśli zobaczysz jakieś błędy w pisowni czy techniczne, to nie wahaj się napisać do mnie. Jestem tylko biednym Francuzem zagubionym w angielskim świecie, próbującym mówić zrozumiałym językiem.
27 Marca 1996.
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:
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 sie 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:
Doadałem sekcję dotyczącą inicjalizacji kart PnP pod Linux-em.
doc-linux-pl-2002.06.14.orig/mini/html/HTTP+Netware.pl.html 0100664 0001750 0001750 00000041123 07104371340 021751 0 ustar coven coven
Dokument ten zakłada, że umiesz zainstalować protokół TCP/IP na Linux-ie i podłączyć się fizycznie do sieci lokalnej przy pomocy karty Ethernet. Zakłada się także, że masz jakieś podstawowe wiadomości na temat sieci Netware. Konfiguracja serwera Netware została pokazana na przykładzie wersji 3.1x. Możesz zrobić to samo używając INETCFG. Strona klienta dotyczy Windows 3.1x, Windows for Workgroups i Windows 95.
We wszystkich przykładach zakładam, że adres Linux-a to 200.0.0.1 i dlatego przypisuję adresy 200.0.0.2 i 200.0.0.3 odpowiednio serwerowi Netware i stacji roboczej. Ty możesz oczywiście wybrać adresy odpowiednie dla siebie.
Przed instalacją będziesz potrzebował następującego oprogramowania.
Kiedy ściagniesz serwer masz do wyboru dwie opcje: Wziąć źródła i skompilować samemu, albo wziąć już skompilowane programy. Programy te na Linux-a w wersji ELF są dostępne przy serwerze NCSA ale nie ma ich w starszych wersjach.
Serwer firmy NCSA przeprowadzi cię przez konfigurację i przygotuje dla ciebie różne pliki. Ale zanim będziesz chciał ściągnąć HTTPd przygotuj się na następujące pytania.
Najpierw musisz wybrać czy ściągasz wersję źródłową czy skompilowaną. Jeśli akurat twój system nie pojawi się w menu, to będziesz musiał ściągnąć wersję źródłową i skompilowac ją samemu.
Żeby sprawdzić wersję twojego Linux-a napisz w linii poleceń:
uname -a
w odpowiedzi uzyskasz mniej więcej coś takiego:
linux:~$ uname -a Linux linux 1.0.9 #4 Tue Sep 13 04:05:51 CDT 1994 i586 linux:~$
Wersja Linux-a to 1.0.9. (Uwaga: Bieżące wersje Linux-a są w formacie ELF i powinny wyglądać tak: 1.2.13 ELF)
Pozostałe parametry mogą być podane przed ściągnięciem albo
skonfigurowane później poprzez modyfikację pliku srm.conf w
katalogu /usr/local/etc/httpd/conf. Nazwy właściwych
dyrektyw, które występują w pliku httpd.conf zostały pokazane
w nawiasach. Jedynym wyjatkiem jest dyrektywa DocumentRoot, która
występuje w pliku srm.conf.
Określa to w jaki sposób twój komputer będzie uruchamiał serwer HTTPd. Metodą preferowaną jest "standalone". To powoduje, że demon HTTPd jest ciągle uruchomiony. Jeśli wybierzesz ładowanie HTTPd przez "inetd", to program będzie ponownie ładowany do pamięci przy każdym odwołaniu, co może w rezultacie spowolnić twój serwer.
Tutaj podajesz na jakim porcie demon będzie "słuchał" żądań
HTTP. Jeśli masz uprawnienia "root-a", to wybierz wartość
domyślną czyli 80.
W innym wypadku musisz wybrać wartość z przedziału od 1025 do
65535.
Jest to identyfikator, na który HTTPd zmieni swój podczas
odpowiadania na żądanie i działania na plikach. Odpowiedź na to
pytanie musi być udzielona tylko jeśli jako rodzaj serwera wybrałeś
"standalone".
Jeśli nie masz uprawnień root-a, po prostu użyj swojego
identyfikatora. Jeśli jesteś administratorem systemu, możesz
stworzyć specjalnego "użytkownika", tak żebyś mógł kontrolować
dostęp do plików.
Jest to numer grupy, na który HTTPd zmieni swój podczas odpowiadania na żądanie i działania na plikach. Jest to podobne do identyfikatora użytkownika i wymagane jest tylko jeśli serwer ma działać jako "standalone".
Jeśli nie masz uprawnień root-a, to użyj nazwy swojej grupy. Aby się dowiedzieć do jakiej grupy należysz napisz w linii poleceń groups.
Jest to adres osoby, do której użytkownicy mają wysyłać komentarze i uwagi na temat działania serwera. Możesz tu podac swój adres.
Jest to katalog, w którym rezyduje twój HTTPd. Jeśli jesteś
administratorem, to zostaw wartość domyślną
(/usr/local/etc/httpd). Jeśli nie, to wybierz jakiś
podkatalog w twoim katalogu domowym. Swój katalog domowy możesz
odnaleźć przy pomocy polecenia pwd.
To jest miejsce, gdzie mają znajdować się pliki HTML, które będą
tworzyć strony twojego serwera. Wartością domyślną jest
/usr/local/etc/httpd/htdocs.
Możesz to oczywiście zmienić na katalog specjalnego użytkownika,
którego wcześniej stworzyłeś albo na podkatalog twojego katalogu
domowego jeśli nie jesteś root-em.
Jeśli nie masz pewności, to użyj wartości domyślnych. Teraz kiedy
już masz odpowiedzi na te pytania możesz
ściągnąć NCSA HTTPd. Powinieneś przeczytać
dokumentację HTTPd
zanim zaczniesz instalację. Jeśli planujesz kompilować program, to
musisz zmodyfikować pliki "makefile" w każdym z trzech
podkatalogów: support, src, cgi-src. Jeśli twoja wersja
Linux-a jest już obsługiwana, to musisz tylko napisać make
linux w głównym katalogu (czyli /usr/local/etc/httpd).
Kompilacja jest prosta, po prostu napisz make linux w linii
poleceń w głównym katalogu serwera.
Uwaga:
Użytkownicy Linux-a w wersji pre-ELF muszą odkomentować linię
#define NO_PASS w pliku portability.h oraz
DBM_LIBS= -ldbm w pliku Makefile przed
kompilacją.
Po tym jak zainstalowałeś HTTPd, zaloguj się jako root i wystartuj demona pisząc httpd & (przy założeniu, że instalowałeś go jako wersję "standalone"). Powinieneś go teraz zobaczyć w liście procesów generowanej przez ps. Najprostszą metodą na sprawdzenie HTTPd jest telnet. Napisz w wierszu poleceń:
telnet 200.0.0.1 80
gdzie 80 to domyślny port HTTP. Jeśli skonfigurowałeś "Port" jako coś innego to wpisz ten numer zamiast 80. Powinieneś otrzymać odpowiedź, która wygląda mniej więcej tak:
Trying 200.0.0.1... Connected to linux.ppg_corp. Escape character is '^]'.
Teraz jeśli wpiszesz jakiś znak i wciśniesz <ENTER>, to powinieneś otrzymać odpowiedź podobną do tej poniżej:
HTTP/1.0 400 Bad Request Date: Wed, 10 Jan 1996 10:24:37 GMT Server: NCSA/1.5 Content-type: text/html <HEAD><TITLE>400 Bad Request < /TITLE> < /HEAD> <BODY><H1>400 Bad Request < /H1> Your client sent a query that this server could not understand.<P> Reason: Invalid or unsupported method.<P> < /BODY>
Teraz jesteśmy gotowi podłączyć się do tego serwera z innego PC-ta używając przeglądarki WWW.
Żeby ustawić serwer Netware powinieneś mieć uprawnienia Supervisor-a, albo przynajmniej uprawnienia operatora konsoli. Jeśli ich nie masz, to spróbuj poprosić swojego administratora sieci, żeby ci pomógł w instalacji.
W poniższych przykładach zakładam, że adres Linux-a to 200.0.0.1 i dlatego przypisuję adresy 200.0.0.2 i 200.0.0.3 odpowiednio serwerowi Netware i stacji roboczej. Ty możesz oczywiście wybrać adresy odpowiednie dla siebie.
Włącz na serwerze ramkę Ethernet_II przez wpisanie poniższych poleceń na konsoli lub w pliku autoexec.ncf
load NE2000 frame=Ethernet_II name=IPNET load TCPIP bind IP to IPNET addr=200.0.0.2 mask=FF.FF.FF.0
Możesz podać numer slotu albo karty (board) podczas ładowania sterownika do NE2000 w zaleźności od twojej konfiguracji. (np. load NE2000 slot=3 frame=...).
Na PC-cie masz trzy możliwości: Win3.1, WfWg albo Win95. Procedura instalacji różni się pomiędzy Win95 a starszymi wersjami windows jeśli używasz 32-bitowego klienta z Microsoft-a lub Novell-a. Jeśli masz zamiar używac 16-bitowego klienta, to procedura instalacyjna jest opisana w instrukcji instalacji dla wersji pod Windows 3.1. Jeśli będziesz instalował wersję klienta 32-bitową, to przejdź do Windows 95.
Jeśli używasz Win3.1 albo WfWg możesz zainstalować klienta Netware (VLMs) i kilka dodatkowych plików, które są dostarczane na dyskietce TCP/IP, a mianowicie:
TCPIP.exe, VTCPIP.386, WINSOCK.dll i WLIBSOCK.dll
Zauważ, że plik WINSOCK.dll różni się od tych z Win95 i Trumpet. Zainstaluj klienta Netware z obsługą Windows-ów. Skopiuj VTCPIP.386, WINSOCK.dll i WLIBSOCK.dll do katalogu SYSTEM a TCPIP.exe do katalogu NWCLIENT. Teraz zmodyfikuj plik STARTNET.bat w katalogu NWCLIENT:
lsl ne2000 ---> sterownik do twojej karty c:\windows\odihlp.exe ---->jeśli używasz WfWg ipxodi tcpip ---> dodaj tę linię vlm
Stwórz podkatalog - powiedzmy \NET\TCP i skopiuj
pliki HOSTS, NETWORKS, PROTOCOLS i SERVICES z /etc na
twoim Linux-ie albo z SYS:ETC na serwerze
Netware. Zmodyfikuj skopiowany plik HOSTS i dodaj linię dla twojego
nowego serwera Linux-a. To pozwoli ci na odwoływanie się do serwera
na Linux-ie w taki sposób http://linux.ppg_corp/ zamiast
http://200.0.0.1/ w twojej przeglądarce WWW.
127.0.0.1 localhost 200.0.0.1 linux.ppg_corp
Zmodyfikuj plik NET.cfg w katalogu NWCLIENT
Link Driver NE2000
port 300
int 3
MEM D0000
FRAME Ethernet_802.2
; ---- dodaj te linie ----
FRAME Ethernet_II
Protocol TCPIP
PATH TCP_CFG C:\NET\TCP
ip_address 200.0.0.3
ip_netmask 255.255.255.0
Link Support
MemPool 6192 ---> minimum to 1024, spróbuj z różnymi wartościami
Buffers 10 1580 ---> tutaj też możesz ustawić w/g własnych potrzeb
;---------------------------------
Zmodyfikuj plik SYSTEM.ini w katalogu WINDOWS i dodaj tę pozycję dla VTCPIP.386
[386Enh] ..... network=*vnetbios, vipx.386, vnetware.386, VTCPIP.386 .....
Zrestartuj PC-ta, uruchom STARTNET.bat i możesz już używać swojej ulubionej przglądarki WWW. Nie musisz się logować do sieci Netware i nie musisz uruchamiać TCPMAN-a (jeśli używasz Trumpet Winsock).
Ta sekcja opisuje jak zainstalować 32-bitowego klienta pod Win95. Najpierw musisz zainstalować nastepujące programy:
Client for Netware Networks (od Microsoft-a albo Novell-a) Microsoft TCP/IP Protocol Network Adapter
Aby zainstalować te programy, kliknij na Mój komputer, Panel sterowania, Sieci. Klknij Dodaj. Teraz znajdziesz się w oknie, które wyświetla Klient, Karta (Adapter), Protokół i Usługa (Service).
Aby zainstalować klienta dla sieci Netware:
Aby zainstalować protokół TCP/IP
Windows 95 instaluje domyślnie kilka innych protokołów. Usuń je
przez kliknięcie na nich i wciśnięcie przyciku Usuń. W typowych
przypadkach Win95 instaluje protokół Microsoft NetBeui i protokół
kompatybilny z IPX/SPX. Możesz skasować protokół NetBEUI, ale
będziesz potrzebował protokołu IPX/SPX jeśli chcesz się logować do
serwera Netware.
Więcej szczegółów znajdziesz w
TCP/IP Setup FAQ.
Aby ustawić TCP/IP kliknij na TCP/IP, kliknij na Właściwości, kliknij na adres IP
Wpisz twój adres IP w linii "Podaj adres IP" jako 200.0.0.3 W linii "Maska podsieci" wpisz 255.255.255.0 Kliknij OK.
Powinieneś teraz dostać komunikat, aby zresetować komputer. Zrób tak. Powinieneś teraz móc używać swojej przeglądarki.
To nie jest jedyny sposób na połączenie się z serwerem Linux-a. Możesz wypróbować kilka innych programów jak:
Możesz też być zainteresowany udostępnianiem serwera Netware przez załadowanie sterownika NCP dla Linux-a.
Serwer HTTP może być użyty w biurze, aby udostępniać w przejrzystej formie informacje znajdujące się na różnych serwerach, w różnych miejscach i katalogach. Danymi mogą być proste dokumenty w Wordzie, arkusze w Lotusie, albo złożone bazy danych. Może być użyty do tworzenia interfejsu przy pomocy RDBMS takich jak ORACLE i SYBASE do generowania informacji w czasie rzeczywistym. Tutaj jest lista baz danych gateway-ów do WWW
Dziekuję ludziom z NCSA za dostarczenie tak wspaniałej dokumentacji
oraz Davidowi Andersonowi za jego komentarze i wypróbowanie tego
HOWTO!
Powiedziano mi (David), że nie możesz używać klienta Netware nie
mając licencji Netware
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:
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 sie na nią zapisać, to
wyślij list o treści subscribe jtz Imię Nazwisko na adres
majordomo@ippt.gov.pl
doc-linux-pl-2002.06.14.orig/mini/html/INN+SUCK.pl.html 0100664 0001750 0001750 00000111511 07457640740 020773 0 ustar coven coven
Impulsem do napisania tego tekstu były moje początkowo nieudane próby instalacji oraz nikły odzew na moje posty na grupie pl.comp.os.linux (pewnie jak zwykle moje zapytania zaginęły gdzieś w potoku informacji i zapytań docierających tu codziennie). Nie mam zamiaru pretendować do miana fachowca od konfiguracji serwerów news (po prostu u mnie już to działa), tym nie mniej mam nadzieję, że opis działającej konfiguracji będzie dla kogoś przydatny.
Całą treść tego dokumentu stanowi opis mojej instalacji duetu inn+suck w systemie RedHat 6.2, w oparciu o pakiety inn-2.2.2-3 i suck-4.2.2-1. Jeśli dysponujesz inną wersją systemu i/lub pakietów to mogą występić pewne różnice w konfiguracji, mniemam jednak, że nie powinno to stanowić najmniejszego problemu już dla średnio zaawansowanego miłośnika Linux'a.
Wszelkie sugestie i poprawki są mile widziane i należy je wysyłać pod adres michu@amg.gda.pl. Jestem skory do pomocy, proszę jednak o uszanowanie mojego czasu i nie wysyłanie mi listów o lakonicznej treści typu "nie działa mi, CO ROBIĆ???" czy magabajtowych załączników z konfiguracją. Jeśli widzisz, że nic Ci nie wychodzi, to sprawdź czy wykonałeś dokładnie wszystkie kroki (z dokładnością do różnych wersji pakietów/dystrybucji). Jeśli po paru podejściach nadal masz poważne problemy, to lepiej na razie sobie odpuść i spróbuj ponownie za jakiś czas.
W tym dokumencie w paru miejscach porównuję inn'a do leafnode'a, którego wcześniej używałem.
Następujący ludzie przyczynili się do powstania tego dokumentu, taką czy inną drogą, świadomie lub nieświadomie (w kolejności alfabetycznej):
control,
control.cancel, junk, test i to
oraz nadesłał inne uwagi,-M w suck'u,
Inn jest to "InterNetNews daemon" czyli program umożliwiający wielu użytkownikom korzystanie z zasobów news.
Suck jest to zasysacz newsów; pośredniczy on w wymianie newsów pomiędzy dwoma serwerami: naszym i zdalnym (emulując zachowanie normalnego czytnika; protokół wymiany postów pomiędzy serwerami (wbudowany w inn'a) odbywa się na trochę innej zasadzie i wymaga specjalnej konfiguracji po obu stronach, czego chcemy uniknąć).
Jeśli uważasz, że spełnione są poniższe warunki:
rtin -SQ) ewentualnie "twój" komputer służy
jako serwer news dla całej sieci (np. w firmie),Jeśli już będziesz chciał zainstalować to oprogramowanie, to będą Ci potrzebne następujące (lub inne wersje) pakiety:
Zalety inn+suck:
Wady inn+suck:
UWAGA!!! W zależności od dystrybucji i wersji pakietów wymienione
poniżej pliki konfiguracyjne mogą występować w innych katalogach (np.
/var/lib/suck/, /usr/lib/suck/, /etc/suck/,
...).
Proces instalacji i "konfiguracji" jest prosty (przynajmniej do pierwszego "ruszenia", ale o tym, bez tego wstępu, przeciętny zjadacz newsów możne przekonać się dopiero po parodniowych dociekaniach):
----- ciach -----
ls -ld `rpm -ql inn` > ~/jakiś_plik_z_atrybutami
----- ciach -----
a wszelkie operacje wykonywać jako użytkownik news./etc/news/newsfeeds dodać własną sekcję z
feeds, tj.:
----- ciach -----
...
news.task.gda.pl\
:!junk,!test,!to\
:Tf,Wnm:
...
----- ciach -----
gdzie news.task.gda.pl to nazwa mojego serwera news, oraz
do definicji dystrybucji akceptowanych przez nasz serwer dodać
polską:
----- ciach -----
...
ME\
:*,!junk,!control*,!local*,!foo.*\
/pl,world,usa,na,gnu,bionet,pubnet,u3b,eunet,vmsnet,inet,ddn,k12\
::
## ^^ - to jest to pl
...
----- ciach -----
/var/lib/suck/get.news.inn (w Debiani'e jest
to plik /etc/suck/get-news.conf) wstawić nazwę serwera news
(np. REMOTE_HOST=news.task.gda.pl) oraz
"sajtu" (tego samego co przy definicji feed'u, tj.
SITE=news.task.gda.pl),/var/lib/suck/sucknewsrc zapisać
wszystkie interesujące nas grupy i numery postów, od których ma się
zacząć "ściąganie", np. aby ściągnąć ostatnich 100
postów należy podać:
----- ciach -----
...
pl.comp.ogonki -100
pl.comp.os.linux -100
...
----- ciach -----
/etc/cron.daily/inn-cron-rnews
oraz /etc/cron.hourly/inn-cron-nntpsend, to należy je
usunąć (ich funkcje przejmuje suck),/etc/news/nnrp.access nie ma wpisu
localhost: to należy go dodać,/etc/rc.d/init.d/innd start. Można/trzeba także dodać
odpowiednie linki do katalogów
/etc/rc.d/rc[0-6].d/ (np. poleceniem
ntsysv),ctlinnd newgroup nazwa.grupy lub skorzystać z poniższego
skryptu:
----- ciach -----
#!/bin/bash
#
# Ten skrypt tworzy automatycznie grupy w inn'ie, które podałeś w pliku
# /var/lib/suck/sucknewsrc - konfiguracyjnym dla suck-a.
# UWAGA !!!
# Wymagany format tego pliku to:
############################
# nazwa.grupy numer.artykulu
############################
#
# Możesz podać inna lokalizacje
SUCK_FILE=/var/lib/suck/sucknewsrc
#
# Podaj ścieżkę do programu ctlinnd. Skrypt spróbuje sam zgadnąć, ale
# lepiej podaj jak wiesz.
CTLINND=`which ctlinnd`
cat ${SUCK_FILE} | while read ln; do
set -e $ln >/dev/null
${CTLINND} newgroup $1
if [ $? -eq 1 ]; then
echo Błąd podczas zakładania grupy $1 !!!
exit
fi
done
----- ciach -----
control, control.cancel,
junk, test ani to (z pewnością nam się
nie przydadzą), musimy stworzyć plik
/var/lib/suck/get.news.inn:
----- ciach -----
control
control.cancel
junk
test
to
----- ciach -----
Oczywiście grup tych nie należy umieszczać w pliku
/var/lib/suck/sucknewsrc,/var/lib/suck/get.news.inn (lub /var/sbin/get-news
na Debian'ie),NNTPSERVER. Dla bash'a będzie to komenda:
export NNTPSERVER=localhost
Ponieważ newsy są danymi tekstowymi, więc ich kompresja zdecydowanie skraca czas transmisji, dzięki czemu z pewnością zaoszczędzimy trochę pieniędzy kosztem naszego operatora telekomunikacyjnego (pieniądze te mogą być wysłane do autora powyższego tekstu, za ewentualne straty autor oczywiście nie bierze żadnej odpowiedzialności ;-). Osobiście wydaje mi się, że przedstawione tu rozwiązanie jest najbardziej naturalne i elastyczne. Nie oznacza to oczywiście, że nie można tego zrobić lepiej. Podczas eksperymentów okazało się także, że zwykłe tunelowanie komunikacji w skompresowanym kanale ssh nie daje oczekiwanych rezultatów, stąd wyniknęła potrzeba wywołania suck'a na zdalnym komputerze (po prostu komunikacja pomiędzy komputerami jest na tyle duża, że po uwzględnieniu opóźnień występujących w trakcie transferu, niemal całkowicie niweczony jest efekt zmniejszonej objętości danych).
Opisując poniższe rozwiązanie zakładam, że masz już poprawnie zainstalowane i skonfigurowane pakiety inn+suck. Aby z niego korzystać niezbędne nam także będą:
Cała przedstawiona poniżej idea opiera się na możliwości uruchomienia
suck'a na zdalnym komputerze tak, aby wiadomości były wysyłane w
postaci strumienia danych, który jest przesyłany w skompresowanym
kanale ssh (opcja -C). Dopiero później, lokalnie, za pomocą
skryptu filter2rnews, strumień ten jest dzielony na poszczególne
wiadomości, które są wpuszczane za pomocą programu rnews do lokalnego
serwera innd.
W tym celu musimy:
/var/lib/suck/get.news.inn całą sekcję
służącą do ściągania wiadomości, czyli skrypt ten powinien być
postaci:
----- ciach -----
#!/bin/sh
#BEFORE USING - check to ensure all the paths defined below are correct!!
#NOTE: this script probably needs to be run by root. Most systems will
# not let a normal user run ctlinnd
REMOTE_HOST=news.task.gda.pl
LOCAL_HOST=localhost
SPOOLDIR=/var/spool/news/articles # base directory for articles to be rposted
NEWSDIR=/usr # base directory for news binaries
BASEDIR=/var/lib/suck # base directory for scripts and data files
CTLINND=${NEWSDIR}/bin/ctlinnd # location of binary
SHLOCK=${NEWSDIR}/bin/shlock # location of binary
TMPDIR=${BASEDIR} # location for suck.* files
MSGDIR=${BASEDIR}/Msgs # where to put MultiFile messages when getting them
SITE=news.task.gda.pl # name of site from newsfeeds file
OUTGOING=${SPOOLDIR}/../outgoing/${SITE} # location of the list of articles to upload
OUTGOINGNEW=${OUTGOING}.new # file to contain the list temporarily
OUTGOINGFAIL=${OUTGOINGNEW}.fail # file with failed xfers
SCRIPT=${BASEDIR}/put.news # my filter for rpost
OUTFILE=/tmp/tmp$$ # used by rpost as article after it is filtered
LOCKFILE=${BASEDIR}/getnews.lock # lock file to prevent multiple instances of script
NEWSGROUP=news # which group owns the file in out.going, typically either news or uucp.
TESTHOST=testhost
RPOST=rpost
SUCK=suck
HISTORY=/var/lib/news/history # location of history file
# if we are already running, abort
trap 'rm -f ${LOCKFILE} ; echo "Aborting" ; exit 1' 1 2 3 15
${SHLOCK} -p $$ -f ${LOCKFILE}
if [ $? -ne 0 ]; then
echo "Already running, can't run two at one time"
exit
fi
# now upload messages
if [ -s ${OUTGOING} -o -s ${OUTGOINGNEW} ]; then
${TESTHOST} ${REMOTE_HOST} -s
if [ $? -ne 0 ]; then
echo "Remote posting host not responding"
else
# this is needed by INND so that the outgoing file will be
# properly flushed and we have a new blank file to work with
# when we are done
# First mv the current one to a new file name
# Since innd already has the file open, it doesn't care
# about the rename.
# The flush will ensure that all messages to be posted have
# been written out, close off the old one (already renamed)
# and create a new one.
# if the outgoingnew already exists, it means we aborted last time
# so don't try to do it again
if [ ! -s ${OUTGOINGNEW} ]; then
mv ${OUTGOING} ${OUTGOINGNEW}
${CTLINND} flush ${SITE}
fi
# outgoing messages to post
${RPOST} ${REMOTE_HOST} -d -b ${OUTGOINGNEW} -p ${SPOOLDIR} -f \$\$o=${OUTFILE} ${SCRIPT} \$\$i ${OUTFILE}
ERRLEV=$?
if [ ${ERRLEV} -eq 0 ]; then
echo "Remotely posted articles"
rm ${OUTFILE}
elif [ ${ERRLEV} -eq 1 ]; then
echo "Error posting a message"
elif [ ${ERRLEV} -eq 2 ]; then
echo "Unable to do NNTP authorization with remote server"
elif [ ${ERRLEV} -eq 3 ]; then
echo "Unexpected answer from remote server to a command while doing NNTP authorization"
elif [ ${ERRLEV} -eq -1 ]; then
echo "Fatal error"
fi
if [ -f ${OUTGOINGFAIL} ]; then
mv ${OUTGOINGFAIL} ${OUTGOINGNEW} # so we can re do it
chown news.${NEWSGROUP} ${OUTGOINGNEW}
chmod 664 ${OUTGOINGNEW}
fi
fi
echo "You can hang up the modem now"
fi
rm -f ${LOCKFILE}
----- ciach -----
Oczywiście należy pamiętać o właściwym ustawieniu zmiennych
REMOTE_HOST i SITE./var/lib/suck/ pliki
active-ignore, suck.killlog, suckkillfile
oraz sucknewsrc do zdalnego katalogu $HOME/suck/
(jeśli nie jest tam zainstalowany suck, a tamta maszyna ma taką samą
architekturę jak nasza, to możemy skopiować tam także program
/usr/bin/suck).$HOME/.ssh/identity.pub na
zdalny komputer do pliku $HOME/.ssh/authorized_keys.$HOME/.ssh/identity, czyli
prywatnej połowy klucza. Istnieje także rozwiązanie umożliwiające
wygenerowanie klucza z hasłem i podawanie go tylko raz na sesję
(patrz program ssh-agent)./usr/local/bin/filter2rnews:
----- ciach -----
#!/usr/bin/perl -w
while (not eof STDIN) {
@POST = ();
while (<>) {
last if /^\.$/;
push @POST, $_;
}
$dlug = length(join('',@POST));
print "#! rnews $dlug\n";
print @POST;
}
----- ciach -----
----- ciach -----
ssh -C -l username serwer.name \
'~/suck/suck news.task.gda.pl -dd ~/suck -dt ~/suck -M -c' | \
filter2rnews | rnews -N -vvv -S localhost
----- ciach -----
gdzie username to nazwa użytkownika na komputerze serwer.name a
news.task.gda.pl jest nazwą naszego serwera news. Wiadomości
wysyłamy tak jak poprzednio, czyli za pomocą skryptu
/var/lib/suck/get.news.inn.
----- ciach -----
su news -c 'expireover -s -a'
----- ciach -----
Domyślnie inn skonfigurowany jest w taki sposób, że artykuły przechowywane są w postaci oddzielnych plików, w strukturze katalogów odpowiadającej pozycji grupy w hierarchii. Podstawową zaletą tego rozwiązania jest prostota oraz wynikająca z niej łatwość tworzenia rozwiązań pomocniczych. Jednak taki sposób przechowywania ma co najmniej dwie poważne wady. Pierwszą jest to, że artykuły przechowywane są z użyciem mechanizmów systemu operacyjnego, które to nie są zoptymalizowane do obsługi wielu plików o małym rozmiarze, konsekwencją czego jest wolny dostęp i duża ilość zmarnowanego miejsca. Drugą wadą jest to, że nigdy nie wiemy, jak dużo miejsca będą nam zajmowały newsy, co grozi przepełnieniem partycji.
Wymienione powyżej niedogodności tradycyjnego przechowywania plików eliminuje CNFS (Cyclic News File System). Ten sposób przechowywania artykułów polega na tym, że zapisywane są one w pliku o specjalnym formacie. Gdy skończy się miejsce, nowe artykuły automatycznie nadpisują najstarsze. Rozwiązanie takie jest bardzo szybkie i nie grozi nam już przepełnienie partycji. Jedyną jego wadą jest to, że teraz utrudniony jest "samodzielny" dostęp do pojedynczych artykułów.
Aby zainstalować CNFS należy (wszystkie te czynności oczywiście
najlepiej wykonać jako użytkownik news):
/etc/news/inn.conf ustawić opcję
storageapi na on,/etc/news/newsfeeds:
crosspost:...,overview na:
----- ciach -----
overview!:*:Tc,Ao,WhR:/usr/bin/overchan
----- ciach -----
/etc/news/cycbuff.conf umieścić definicję
naszego bufora cyklicznego, np.:
----- ciach -----
cycbuff:ONE:/var/spool/news/one:131072
metacycbuff:BIGAREA:ONE
----- ciach -----
gdzie ONE jest symboliczną nazwą bufora,
/var/spool/news/one jest plikiem bufora, 131072
rozmiarem bufora a BIGAREA jest nazwą metabufora
cyklicznego,/etc/news/storage.conf definiujemy jakie artykuły
mają być przechowywane w buforze. Ponieważ my mamy tylko jeden
bufor, gdzie powinny znaleźć się wszystkie artykuły, to u nas ten
plik będzie wyglądał następująco:
----- ciach -----
method cnfs {
newsgroups: *
class: 1
size: 0,1000000
options: BIGAREA
}
----- ciach -----
/etc/news/cycbuff.conf:
----- ciach -----
dd if=/dev/zero of=/var/spool/news/one bs=1k count=131072
chmod 0664 /var/spool/news/one
----- ciach -----
cat) lecz token (program
sm), to musimy w konfiguracji suck'a:
/var/lib/suck/get.news.inn usunąć w
wywołaniu rpost'a parametr -p nazwa_katalogu,put.news na put.news.sm
(powinien być w przykładach lub źródłach),
Podstawową różnicą w stosunku do standardowego sposobu przechowywania artykułów jest to, że nie ma potrzeby ich expirowania, teraz dzieje się to automatycznie, bez naszej pomocy (czasem być może wbrew naszej woli ;-).
Inną konsekwencją jest to, że pewne czynności wykonuje się w zupełnie
inny sposób. Np. do odtworzenia bazy overview należy zamiast komendy
expireover używać komendy expireindex (baza overview
znajduje się teraz w katalogu /var/spool/news/uniover/).
Ponieważ nie mamy teraz bezpośredniego dostępu do artykułów, czasem
jest potrzeba wspomożenia się komendą makehistory (więcej
informacji w manualach).
[ RCz: sekcja napisana w całości przez Marcina Kasperskiego ]
W normalnej konfiguracji inn+suck grupy moderowane traktowane są tak samo, jak wszystkie pozostałe: wysyłane na nie artykuły trafiają od razu na lokalne grupy (bez akceptacji moderatora) i są wysyłane do serwera z którego pobieramy newsy. Dopiero ten serwer przesyła posty do moderatora.
Sprawia to następujące problemy:
Problemy te możemy rozwiązać konfigurując grupy jako moderowane na naszym własnym serwerze. Wówczas inn nie będzie automatycznie umieszczał na grupie wysyłanych postów a zamiast tego wyśle je pocztą do moderatora. Zaakceptowane posty "spłyną" do nas kiedyś tam suck'iem - tak jak to się dzieje normalnie.
W celu takiej konfiguracji należy (lokalizacje plików poniżej odpowiadają Debianowi):
/etc/news/moderators z następującą
treścią:
# Uniwersalny adres moderatorów grup polskich
pl.*:%s@usenet.pl
# Uniwersalny adres moderatorów grup światowych
*:%s@moderators.isc.org
/etc/news/inn.conf ustawiamy fromhost na adres
jakiejś maszyny widocznej w światowym DNS'ie (nasz host
maskaradujący, nasz provider, my sami jeśli jesteśmy wbici).
Najlepiej, jeśli jesteśmy w stanie czytać pocztę dostawaną przez
konto news na tym hoście (listy które nie doszły) ale nie jest to
zdaje się absolutnie konieczne. Przy konfiguracji poczty smarthost
najlepiej nadaje się tu adres naszego serwera mailowego.
Mój plik inn.conf zawiera pola organization, server
(prawdziwa nazwa mojego serwera) i fromhost (nazwa serwera
pocztowego).
Uwaga: straciłem dobry dzień zgadując czemu moje posty nie dochodzą
póki na to nie wpadłem - miałem wcześniej jako fromhost pewien adres
z sieci lokalnej i jakiś mailer po drodze wywalał pocztę do kosza -
nie przysyłając żadnej informacji zwrotnej, bo nie miał jak. news@to-co-wpisaliśmy-jako-fromhost.
----- ciach -----
...
ctlinnd changegroup pl.rec.humor.najlepsze m
ctlinnd changegroup comp.lang.c++.moderated m
...
----- ciach -----
inncheck, który
sprawdza poprawność konfiguracji, atrybuty plików oraz wyświetla
potencjalne źródła problemów. Jeśli coś nam nie działa to
diagnostykę powinniśmy zacząć właśnie od uruchomienia tego programu.~/jakiś_plik_z_atrybutami który czujnie zrobiliśmy na
początku instalacji).GROUP
command not recognized, try the -M option oczywiście dodaj w
pliku /var/lib/suck/get.news.inn opcję -M do
wywołania suck'a./var/spool/news/outgoing/ są puste), to może pomóc dodanie
wpisu *, w pliku /etc/news/newsfeeds:
----- ciach -----
...
news.task.gda.pl\
:*,!junk,!test,!to\
:Tf,Wnm:
...
----- ciach -----
news.task.gda.pl) jest inna niż nazwa umieszczona w
polu Path: (np. tasknews.task.gda.pl). Aby temu zaradzić
należy sprawdzić jaka nazwa jest w tym polu (najbardziej z lewej) i
zmodyfikować plik /etc/news/newsfeeds w następujący sposób:
----- ciach -----
...
news.task.gda.pl/tasknews.task.gda.pl\
:!junk,!test,!to\
:Tf,Wnm:
...
----- ciach -----
Innym rozwiązaniem tego problemu jest dodanie parametru H1
do opcji feedu, czyli :Tf,Wnm,H1:.
ctlinnd rmgroup nazwa.grupy
(jeśli wywołujemy suck'a lokalnie, to on sam usunie taką grupę z
pliku sucknewsrc, jeśli zdalnie (patrz kompresja) to musimy to
zrobić ręcznie),control,
control.cancel, junk, test ani
to, inn bardzo źle to znosi./var/lib/news/newsgroups, np.:
----- ciach -----
...
pl.comp.ogonki O polskich literkach w komputerach.
pl.comp.os.linux Linux - system operacyjny dla kazdego.
...
----- ciach -----
Możemy je ściągnąć np. komendą
testhost news.task.gda.pl -d > jakiś_plik
(jeśli na serwerze z którego ściągamy opisy jest dużo grup (może być
ich nawet parędziesiąt tysięcy), to może to potrwać parę minut)./etc/news/expire.ctl, usuwanie przeterminowanych postów
można wymusić uruchamiając skrypt
/etc/cron.daily/inn-cron-expire (przecież nie każdy ma
włączony komputer całą dobę)./etc/rc.d/rc.news do opcji FLAGS flagę -l0.artcutoff w pliku
/etc/news/inn.conf.su - news -c pine./etc/news/inn.conf możemy zmienić parametry
organization (bo napis A poorly-installed InterNetNews
site w postach wygląda nieelegancko) oraz ustawić
pathhost (ułatwia czytanie logów).You have no permision to talk. Goodbye należy zaktualizować
zawartość pliku /etc/news/nnrp.access, np. poniżej dodaliśmy
możliwość dostępu z sieci 192.168.1.0:
----- ciach -----
# Default to no access
*:: -no- : -no- :!*
# Allow access from localhost
localhost:Read Post:::*
192.168.1.0/24:Read Post:::*
----- ciach -----
/etc/news/newsfeeds:
----- ciach -----
...
news.task.gda.pl\
:!junk,!test,!to,!local.*\
:Tf,Wnm:
# ^^^^^^^^^ ten wpis
...
----- ciach -----
aby nasze lokalne posty nie wędrowały gdzieś po świecie./etc/news/newsfeeds odpowiednie wpisy:
----- ciach -----
...
news.task.gda.pl/news.tpnet.pl,news.icm.edu.pl\
:!junk,!test,!to\
:Tf,Wnm:
news.tpnet.pl/news.task.gda.pl,news.icm.edu.pl\
:!junk,!test,!to\
:Tf,Wnm:
...
----- ciach -----
Can not open /usr/news/db/history, Skipping warto
podlinkować /usr/news/db/ do katalogu z bazą history
(zazwyczaj /var/lib/news/). Jeśli zdarza nam się używać
kilku serwerów, to suck nie będzie ponownie ściągał postów, które
już są w naszym serwerze.
----- ciach -----
#!/usr/bin/perl
use MIME::Words qw(:all);
$spooldir = "/var/spool/news";
if ( chdir "$spooldir/outgoing" && opendir( DIR, "." ) ) {
@sites = readdir( DIR );
closedir( DIR );
foreach (@sites) {
if ( open(F, "< $_") ) {
while(<F>) {
push @posts, (split)[0];
}
close F;
}
}
undef $/;
foreach (@posts) {
if ( open(F, "< $spooldir/articles/$_") ) {
# if ( open(F, "sm $_ |") ) { # zamienić te linie dla CNFS
undef $subject, $newsgroups, $from;
$_ = <F>;
close F;
s/\n\n.*//s;
s/\r//gs;
s/\n\s+/ /sg;
foreach ( split( /\n/, $_ ) ) {
$subject = $1 if ( /^Subject:\s+(.*)/i );
$newsgroups = $1 if ( /^Newsgroups:\s+(.*)/i );
$from = $1 if ( /^From:\s+(.*)/i );
}
if ( $subject ne "" && $from ne "" && $newsgroups ne "" ) {
$from=decode_mimewords($from);
$newsgroups=decode_mimewords($newsgroups);
$subject=decode_mimewords($subject);
print $from . " in " . $newsgroups . "\n\t" . $subject . "\n";
}
}
}
}
----- ciach -----
/etc/news/newsfeeds:
----- ciach -----
source-archive:!*,pl.comp.*\
:Tc,Wn\
:/usr/bin/archive -i /var/spool/news/archive/INDEX
----- ciach -----
Archiwum to możemy czytać używając tin'a, np.:
export TIN_SPOOLDIR=/var/spool/news/archive
export TIN_LIBDIR=/var/lib/news
tin
----- ciach -----
(for i in [0-9]*; do cat $i; echo .; done) \
| filter2rnews | rnews -N -vvv -S localhost
----- ciach -----
wykonywaną po kolei w każdym katalogu (z postami).
Prawa autorskie należą do © Rafała Czeczótki. Dokument ten jest rozpowszechniany na podstawie GPL (Gnu Public License). Aby otrzymać kopię tej licencji napisz do Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
Znaki towarowe należą do ich właścicieli. Nie ma żadnych gwarancji co do dokładności czy przydatności informacji zawartych w tym dokumencie.
doc-linux-pl-2002.06.14.orig/mini/html/IO-Programming.pl.html 0100664 0001750 0001750 00000077167 07104371340 022401 0 ustar coven coven
Ten dokument HOWTO opisuje programowanie sprzętowych rejestrów wejścia/wyjścia
oraz zatrzymywanie na niewielkie okresy czasu pracy programów użytkownika
działających na Linuxie pracującym w architekturze Intel x86. Dokument
ten jest następcą bardzo małego IO-port mini-HOWTO tego samego autora.
Dokument został napisany przez Riku Saikkonen. Copyright 1995-1997
Riku Saikkonen. Po szczegóły odnośnie praw autorskich zobacz
Linux HOWTO copyright.
Jeśli chcesz coś poprawić lub dodać to śmiało możesz do mnie pisać
(Riku.Saikkonen@hut.fi)...
Zmiany w stosunku do poprzedniej wersji (30 Marca 1997):
inb_p/outb_p oraz portu 0x80udelay(), jako że nanosleep()
zapewnia jaśniejszy sposób jego użycia.
Procedury dostępu do portów (rejestrów) we/wy umieszczone są w
/usr/include/asm/io.h (lub w linux/include/asm-i386/io.h w źródłach jądra)
Procedury te występują w formie makr do wstawienia a więc wystarczy że zrobisz #include <asm/io.h>;
nie potrzebujesz już żadnych dodatkowych bibliotek.
Z powodu ograniczeń w gcc (obecna wersja 2.7.2.3 i poniżej) oraz egcs
(wszystkie wersje) programy wykorzystujące te procedury muszą być kompilowane
z włączoną optymalizacją (gcc -O1 lub więcej) lub możesz też
zrobić #define extern bez parametru (puste) zanim włączysz <asm/io.h>.
Do odpluskwiania (debugging) możesz użyć gcc -g -O (przynajmniej w nowoczesnych
wersjach gcc), chociaż optymalizacja może spowodować, iż debugger będzie
zachowywał się trochę dziwnie. Jeśli to sprawia Ci kłopot, procedury korzystające
z rejestrów we/wy wstaw do osobnego pliku i tylko ten plik poddaj optymalizacji
podczas kompilacji.
Zanim dostaniesz się do jakiegokolwiek portu we/wy, musisz nadać swemu
programowi uprawnienia do tego. Robi się to wywołując funkcję ioperm()
(zdeklarowaną w unistd.h i zdefiniowaną w jądrze) gdzieś w okolicach początku
programu (przed jakimkolwiek dostępem do portów) Składnia tego polecenia
to ioperm(skąd,ile,włacz) gdzie skąd jest pierwszym portem do którego
chcesz mieć dostęp a ile liczbą kolejnych portów do których chcesz mieć dostęp.
Dla przykładu ioperm(0x300, 5, 1) da ci dostęp do portów od 0x300 do 0x304
(w sumie pięc portów). Ostatni argument to wartośc logiczna mówiąca
o tym czy program otrzyma dostęp do portów (1 - prawda) bądź nie (0 - fałsz).
Możesz wywoływać ioperm() wiele razy aby włączyć wiele nieciągłych obszarów
rejestrów. Zajrzyj do ioperm(2) w podręczniku systemowym man po szczegóły
odnośnie składni.
Wywołanie ioperm() wymaga aby twój program miał uprawnienia root'a:
wobec czego albo musisz uruchamiać go jako root albo dać mu suid root'a.
Po wywołaniu ioperm() możesz już zrezygnować z uprawnień root'a.
Nie wymaga się abyś w sposób jawny wyłączał uprzywilejowany dostęp
do portów (czyli ioperm(....,0)) na końcu programu; robi się to automatycznie
wraz z zakończeniem procesu.
Funkcja setuid() w wypadku użytkownika bez przywilejów root'a nie odbiera
dostępu do portów przydzielonego przez ioperm() ale funkcja fork() już
tak. (proces potomny nie dostaje dostępu ale proces-rodzic go zachowuje)
ioperm() może jedynie umożliwić dostęp do portów od 0x000 do 0x3FF. Jeśli
chcesz używać innych portów (wyższych) musisz użyć funkcji iopl() (która
daje ci dostęp do wszystkich portów od razu) Użyj argumentu 3 (czyli iopl(3))
aby dać swemu programowi dostęp do wszystkich portów (bądź ostrożny
- dostęp do niewłaściwych portów może wywołać najróżniejsze usterki komputera).
Musisz mieć uprawnienia root'a aby wywołać iopl(). Po szczególy
zajrzyj do podręcznika systemowego man: iopl(2)
Teraz właściwy dostęp do portów.. Aby odczytać bajt (8 bitów) z
portu, wywołaj funkcję inb(port), zwraca ona odczytaną wartość.
Aby zapisać bajt do portu wywołaj outb(wartość,port) (zwróć uwagę na kolejność argumentów)
Aby odczytać słowo (16 bitów) z portów x i x+1 (jeden bajt z każdego łączone
w słowo za pomocą asemblerowej instrukcji inw) wywołaj inw(x) Aby zapisać
słowo do tych dwóch portów użyj outw(wartość,x) Jeśli nie jesteś pewien
której instrukcji użyć (operującej bajtem czy słowem) prawdopodobnie będziesz
chciał użyć inb() i outb() - większość urządzeń zaprojektowana jest z
bajtowo-zorientowanym dostępem do portów.
Zauważ, że wykonanie każdej instrukcji operującej na portach zajmuje co najmniej mikrosekundę.
Makra inb_p(),outb_p(),inw_p() i outw_p() działają identycznie z tymi
powyżej ale dodatkowo wykonują opóźnienie (około 1 mikrosekundy) po dostępie
do portu. Możesz spowodować że opóźnienie będzie wartości ok 4 mikrosekund
jeśli zrobisz #define REALLY_SLOW_IO zanim włączysz <asm/io.h>
Makra te zwykle (chyba że zrobisz #define SLOW_IO_BY_JUMPING, które jest raczej
mniej dokładne) używają zapisu do portu 0x80 zby uzyskać opóźnienie, wobec
czego musisz najpierw dać dostęp do portu 0x80 za pomocą ioperm(). Zapisy
do portu 0x80 nie powinny mieć wpływu na żadną częsć systemu. Jeśli chcesz
poznać bardziej wszechstronne metody dostępu do portów czytaj dalej.
W stosunkowo nowych dystrybucjach podręcznika systemowego man znajdują
się strony ioperm(2), iopl(2) oraz powyższych makr.
Innym sposobem dostępu do rejestrów I/O jest otworzenie urządzenia
/dev/port do zapisu lub/i odczytu za pomocą funkcji open()
(/dev/port to urządzenie znakowe, numer główny 1, poboczny 4)
(Funkcje f*() z biblioteki stdio mają wewnętrzne buforowanie więc ich unikaj)
Następnie wywołaj lseek() do odpowiedniego bajtu w tym pliku
(pozycja 0 = port 0x00 pozycja 1 = port 0x01 itd) i czytaj (read())
lub zapisuj (write()) bajt lub słowo.
Oczywiście aby to zadziałało twój program musi mieć możliwośc czytania i zapisywania do /dev/port.
Metoda ta jest prawdopodobnie wolniejsza od metody normalnej pokazanej powyżej
ale nie potrzebuje ani optymalizacji programu ani wywoływania ioperm().
Nie potrzebuje też uprawnień root'a jeśli nadasz zwykłym użytkownikom lub jakiejś
grupie prawa dostępu do /dev/port - jest to jednak nieporządane z punktu widzenia
bezpieczeństwa systemu, jako że możliwe jest wtedy uszkodzenie systemu,
a może nawet zdobycie przywilejów root'a przez bezpośredni dostęp
za pomocą /dev/port do dysków, kart sieciowych itp.
Nie można bezpośrednio korzystać z IRQ lub DMA w programach użytkownika. Musisz napisać sterownik/moduł do jądra; zajrzyj do The Linux Kernel Hacker's Guide po szczegóły a także do źródeł jądra po przykłady. W programach użytkownika nie można też przerwań wyłączać.
Przede wszystkim trzeba stwierdzić że z powodu wielozadaniowej natury Linuxa
nie można zagwarantować że procesy w trybie użytkownika będą mieć dokładną
kontrolę czasu. Twój proces może zostać rozpoczęty w każdej chwili i może mu to
zająć od 10 milisekund do kilku sekund (na bardzo obciążonych systemach). Jednakże,
dla większości aplikacji używających portów I/O nie ma to większego znaczenia.
Aby zminimalizować to zjawisko możesz nadać swemu procesowi wyższy priorytet
(zobacz nice(2) w podręczniku man) lub używać zarządzania procesami w czasie rzeczywistym
(patrz niżej)
Jeśli chcesz berdziej precyzyjnie odmierzać czas niż pozwalają ci na to procesy
w trybie użytkownika, możesz skorzystać ze wsparcia dla procesów użytkownika
w czasie rzeczywistym. Jądra 2.x.x mają niewielkie wsparcie dla czasu rzeczywistego;
zobacz sched_setscheduler(2) w podręczniku man. Jest również specjalne jądro które ma
zaawansowane wsparcie dla czasu rzeczywistego. Zobacz
http://luz.cs.nmt.edu/~rtlinux
aby uzyskać więcej informacji na ten temat.
Zacznijmy teraz od łatwiejszych wywołań. Jeśli chcesz opóźnień rzędu sekund to
najpewniej jest użyć sleep(). Dla opóźnień rzędu przynajmniej dziesiątek milisekund
(10ms wydaje się być najmniejszym możliwym opóźnieniem) powinieneś użyć usleep().
Funkcje te oddają czas innym procesom a więc czas procesora nie jest marnowany. Zajrzyj
do sleep(3) i usleep(3) w podręczniku man po szczegóły dotyczące tych funkcji.
Jeśli potrzebujesz opóźnień mniejszych niż 50 milisekund (w zależności od prędkości
procesora i samego komputera oraz obciążenia systemu) oddawanie czasu procesora
zajmuje zbyt wiele czasu ponieważ linuxowy zarządca procesów (w architekturze x86)
zwykle zabiera około 10-30 milisekund zanim zwróci kontrolę do twojego procesu.
Z tego powodu dla małych opóźnień usleep() zwykle opóźnia o trochę więcej czasu niż
podajesz w parametrze a przynajmniej około 10 ms.
W serii jąder 2.0.x znajduje się nowa funkcja systemowa nanosleep()
(zobacz nanosleep(2) w podręczniku man) która pozwala opóźniać lub zatrzymywać
proces na krótkie okresy czasu (kilka mikrosekund lub więcej).
Dla uzyskania opóźnień <=2ms, jeśli (i tylko wtedy) twój proces jest ustawiony na zarządzanie z wsparciem dla czasu rzeczywistego
(poprzez sched_setscheduler()), nanosleep() używa pętli opóźniającej; w przeciwnym razie zatrzymuje
proces tak jak usleep().
Pętla opóźniająca używa udelay() (wewnętrznej funkcji jądra użtwanej przez wiele jego modułów)
a długość pętli jest obliczana na podstawie wartości BogoMips
(prędkość tego rodzaju pętli opóźniającej jest jedną z rzeczy którą BogoMips dokładnie
mierzy) Zobacz /usr/include/asm/delay.h po szczegóły odnośnie działania tego mechanizmu.
Inną metodą opóźniania o niewielkie ilości mikrosekund są operacje I/O na portach.
Czytanie/zapisywanie jakiegokolwiek bajtu z/do portu 0x80 (patrz wyżej jak to się robi)
powinno dać opóźnienie prawie dokładnie 1 mikrosekundy bez względu na typ procesora
i jego prędkość. Możesz tak robić wiele razy aby uzyskać opóźnienie rzędu kilku mikrosekund.
Sposób ten nie powinien wywoływać żadnych szkodliwych efektów ubocznych na żadnym standardowym
komputerze (nawet niektóre moduły jądra go używają). W ten sposób uzyskują opóźnienie funkcje
{in|out}[bw]_p() (zobacz asm/io.h).
W zasadzie, instrukcje I/O na większości portów w obszarze 0-0x3ff zbierają prawie
dokładnie 1 mikrosekundę, więc jeśli na przykład używasz bezpośrednio portu równoległego
po prostu wykonaj kilka razy inb() z tego portu aby uzyskać opóźnienie.
Jeśli znasz typ procesora i prędkośc zegara w komputerze na którym będzie działał twój program, możesz na stałe uzyskać krótsze opóźnienia poprzez zastosowanie pewnych rozkazów asemblerowych (pamiętaj jednak że twój proces może się zacząć w dowolnym momencie wobec czego opóźnienia te mogą być większe od czasu do czasu) W tabeli poniżej wewnętrzna prędkość procesora określa liczbę cykli np dla procesora 50MHz (np. 486DX-50 lub 486DX2-50) jeden cykl zegara zajmuje 1/50000000 sekundy. (200 nanosekund).
Instrukcja cykle zegara na 386 cykle zegara na 486
nop 3 1
xchg %ax,%ax 3 3
or %ax,%ax 2 1
mov %ax,%ax 2 1
add %ax,0 2 1
(Przykro mi ale niewiele wiem o Pentium. Pewnie podobnie do 486. Nie mogę znaleźć żadnej
instrukcji która zajmowała by tylko jeden cykl zegara na 386. Jeśli możesz, używaj
instrukcji jednocyklowych, w przeciwnym razie architektura potokowa (pipelining)
używana w nowoczesnych procesorach może dać jeszcze krótsze czasy)
Rozkazy nop i xchg z tabeli powyżej nie powinny powodować żadnych skutków ubocznych. Reszta
może modyfikować rejestr znaczników ale nie powinno mieć to znaczenia bo gcc powinno
to wykryć. Użycie nop jest dobrym wyborem.
Aby skorzystać z powyższego, trzeba w swoim programie wywołać funkcję
asm("instrukcja") Składnia instrukcji jest taka sama jak w tabeli powyżej. Jeśli
chcesz użyć kilku instrukcji w jednym wywołaniu funkcji asm rozdziel je średnikami.
Na przykład asm("nop ; nop ; nop ; nop") wywoła cztery razy instrukcję nop opóźniając
nasz program o 4 cykle na 486 lub Pentium (lub 12 cykli na 386)
Funkcja asm() jest przez gcc tłumaczona na wstawkę w asemblerze a więc nie ma zagrożenia
przekroczenia limitu wywołań funkcji.
Opóźnienia krótsze niż jeden cykl zegara nie są możliwe w architekturze Intel i386.
Jeśli masz Pentium, możesz odczytać ilość cykli zegara które upłynęły od ostatniego uruchomienia komputera. Robi się to za pomocą takiego kodu w C:
extern __inline__ unsigned long long int rdtsc()
{
unsigned long long int x;
__asm__ volatile (".byte 0x0f, 0x31" : "=A" (x));
return x;
}
Możesz odczytywać tą wartość w celu opóźniania o dowolną ilość cykli.
Dla czasów rzędu sekundy prawdopodobnie najłatwiej będzie użyć funkcji time().
Dla bardziej dokładnych pomiarów: gettimeofday() jest dokładne co do mikrosekundy
(ale zobacz wyżej o zarządzaniu procesami) Dla Pentium fragment kodu rdtsc powyżej
jest dokładny co do cykla zegarowego.
Jeśli chcesz aby twój proces dostawał jakiś sygnał po jakimś czasie, użyj settimer()
lub alarm(). Zajrzyj do stron podręcznika man dotyczących tych funkcji.
Opis powyżej koncentruje się na języku C. Powinien bezpośrednio odnośić się też do
C++ i Objective C. W asemblerze musisz wywołać ioperm() lub iopl() tak jak w C
ale potem możesz już używać instrukcji czytania/zapisywania portów bezpośrednio.
W innych językach, jeśli nie możesz wstawiać do programu wstawek w asemblerze
lub C bądź jeśli nie możesz użyć funkcji systemowych opisanych powyżej, najłatwiej
będzie napisać osobny program w C ze wszystkimi operacjami na portach I/O i wszystkimi
opóźnieniami których potrzbujesz po czym skompilować go i zlinkować z resztą twojego
programu. Możesz też użyć /dev/port jak to opisano powyżej.
Teraz trochę informacji programistycznych dotyczących zwykłych portów które mogą być bezpośrednio użyte do operacji I/O w logice TTL (lub CMOS).
Jeśli chcesz używać tych lub innych zwykłych portów zgodnie z ich normalnym przeznaczeniem (np chcesz sterować normalną drukarką bądź modemem) powinieneś najpewniej użyć istniejących sterowników (zwykle dołączonych do jądra) zamiast programować porty bezpośrednio jak to opisuje ten dokument. Ten rozdział jest dla tych którzy chcą podłączyć do standardowych portów komputera wyświetlacze LCD, silniki krokowe lub inne niestandardowe urządzenia elektroniczne.
Jeśli chcesz sterować jakimś urżądzeniem produkowanym na rynek masowy, np. skanerem (które to urządzenie jest już na rynku jakiś czas) poszukaj raczej istniejącego sterownika Linuxowego. Dobrym miejscem aby zacząć jego poszukiwania jest Hardware-HOWTO
www.hut.fi/Misc/Electronics jest dobrym źródłem informacji dotyczących podłączania urządzeń do komputera (jak i samej elektroniki w ogóle)
Adres bazowy portu równoległego (zwany poniżej >BASE) to
0x3bc dla /dev/lp0, 0x378 dla /dev/lp1 i 0x278 dla /dev/lp2.
Jeśli chcesz sterować tylko czymś co działa jak normalna drukarka powinieneś
zapoznać się z
Printing-HOWTO.
Oprócz standardowego trybu tylko-do-zapisu opisanego powyżej, w większości portów równoległych istnieje jeszcze rozszeżony tryb dwukierunkowy. Po informacje na ten temat oraz na temat nowych trybów ECP/EPP (jak i samego standardu IEEE 1284 w ogóle) zajrzyj na http://www.fapo.com oraz na http://www.senet.com.au/~cpeacock/parallel.htm Pamiętaj, że skoro nie możesz używać DMA i IRQ w programach użytkownika, aby użyć trybów ECP/EPP będziesz prawdopodobnie musiał napisać własny sterownik do jądra. Zdaje się, że ktoś już pisze taki sterownik ale nie znam szczegółów.
Port BASE+0 (port danych) kontroluje sygnały danych portu (D0 do D7 dla bitów od 0 do 7)
Stany: 0=niski (0 V), 1=wysoki (5 V). Zapis do tego portu zatrzaskuje dane na pinach.
Odczyt zwraca ostatnio zapisaną daną w trybie normalnym bądź rozszeżonym lub dane z innego
urządzenia w rozszeżonym trybie odczytu.
Port BASE+1 (port statusu) jest tylko-do-odczytu i zwraca stan poniższych sygnałów
wejsciowych.
Port BASE+2 (Port kontrolny) jest tylko do zapisu (odczyt zwraca ostatnio zapisaną wartość)
i kontroluje poniższe sygnały kontrolne:
Rozkład wyprowadzeń. (25 pinowe żeńskie gniazdo typu D) (i=wejscie, o=wyjscie):
1io -STROBE, 2io D0, 3io D1, 4io D2, 5io D3, 6io D4, 7io D5, 8io D6,
9io D7, 10i ACK, 11i -BUSY, 12i PE, 13i SLCT, 14o AUTO_FD_XT,
15i ERROR, 16o -INIT, 17o SLCT_IN, 18-25 Ground
Specyfikacja IBM twierdzi że piny 1,14,16 i 17 (wyjscia kontrolne) mają otwarte kolektory podpięte do +5V przez 4.7 kiloomowe oporniki (dostarcza 20 mA, pobór 0.55 mA, wyjscie w stanie wysokim +5V minus to co podpięte) Reszta pinów pobiera 24 mA, dostarcza 15 mA a wyjscie w stanie wysokim to minimum 2.4V. Stan niski dla wszystkich to maximum 0.5V. Porty równoległe inne niż IBM prawdopodobnie odbiegają od tego standardu. Po więcej informacji na ten temat zajrzyj na http://www.hut.fi/Misc/Electronics/circuits/lptpower.html
Na koniec jeszcze ostrzeżenie: Uważaj z uziemieniem. Zepsułem już parę portów przez podłączanie się do nich gdy komputer był włączony. Dobrze jest w takim wypadku używać portów równoległych nie zintegrowanych z płytą główną (zwykle można dodać drugi port równoległy do komputera za pomocą taniej standardowej karty I/O (tzw ajołki - tłum); po prostu wyłącz porty których nie potrzebujesz i ustaw adres portu na karcie IO na jakiś wolny adres. Nie musisz się martwić o IRQ dla portu równoległego gdyż normalnie się go nie używa)
Port gier jest umieszczony pod adresami 0x200-0x207. Jeśli chcesz kontrolować normalny joystick to jest do tego specjalny sterownik w jądrze, zobacz ftp://sunsite.icm.edu.pl/sunsite/pub/Linux/kernel/patches Plik nazywa się joystick-*.
Rozkłąd wyprowadzeń od stony portu (15-pinowe żeńskie gniazdo typu D-shell):
Piny +5V zwykle są podłączane bezpośrednio do linii zasilania na płycie głównej, więc, w zależności od płyty, zasilacza i portu ,powinny dawać całkiem sporo mocy. Cyfrowe wejścia są używane dla przycisków joysticków które możesz sobie podłączyć do portu (joystick A i B, dwa przyciski każdy) Wejścia te powinny być na poziomach TTL a ich stan możesz odczytać z portu statusu (zobacz poniżej) Prawdziwy joystick zwraca stan niski (0V) kiedy przycisk jest naciśnięty a stan wysoki (+5V z pinów zasilających przez jednokiloomowy rezystor) kiedy jest zwolniony.
Tak-zwane wejścia analogowe w istocie mierzą opór. Port joysticka ma przyłączony do tych 4 wejść poczwórny multiwibrator (quad one-shot multivibrator) (scalak 558) Na każdym wejściu mamy rezystor 2.2k pomiędzy pinem a wejściem multiwibratora oraz kondensator 0.01uF pomiędzy wyjściem multiwibratora a masą. Prawdziwy joystick ma jeszcze potencjometr dla każdej z osi (X i Y) umieszczony pomiędzy +5V a właściwym pinem wejsćiowym (AX lub AY dla joysticka A oraz BX lub BY dla joysticka B)
Kiedy jest aktywny, multiwibrator ustawia swoje wyjścia w stan wysoki (5V) i oczekuje aż każdy z kondensatorów osiągnie 3.3V po czym ustawia w stan niski odpowiednie linie wyjściowe. Dlatego właśnie czas trwania okresu kiedy multivibrator jest w stanie wysokim jest proporcjonalny do oporu potencjometru joysticka. (czyli pozycji joysticka na odpowiedniej osi) Relacja wygląda tak:
R = (t - 24.2) / 0.011,gdzie R to opór potencjometru w omach a t to czas trwania stanu wysokiego w sekundach.
Wobec tego aby odczytać wejśćia analogowe musisz najpierw uaktywnić multiwibrator (za pomocą zapisu do odpowiedniego portu - patrz niżej) po czym odczytywać stan czterech osi (za pomocą następujących po sobie odczytów z portów) aż zmienią stan z wysokiego na niski po czym mierzysz czas trwania stanu wysokiego. Odczytywanie takie zużywa sporo czasu procesora, co w systemie wielozadaniowym takim jak Linux nie będącym systemem czasu rzeczywistego powoduje niedokłądność rezultatów gdyż nie można odczytywać portu stale (chyba że użyjesz sterownika niskopoziomowego i wyłączysz przerwania na czas odczytów - ale to zabiera jeszcze więcej czasu procesora). Jeśli wiesz że przejście do stanu niskiego zajmie sygnałowi dłużśzy czas (rzędu 10 ms) możesz użyć usleep() przed odczytem oddając w ten sposób czas procesora innym procesom.
Jedynym portem do którego potrzebujesz mieć dostęp to port 0x201 (inne porty zachowują się identycznie bądź nie robią nic). Każdy zapis (nie ważne czego) do tego portu uaktywnia multiwibrator. Odczyt z tego portu zwraca stan poszczególnych sygnałów wejściowych.
Jeśli urządzenie z którym się komunikujesz przypomina coś co działą jak RS-232 możęsz do tego celu użyć portu szeregowego. Linuxowy sterownik portu szeregowego powinien wystarczyć w prawie wszystkich zastosowaniach (nie powinienneś mieć potrzeby programować port bezpośrednio, a nawet jeśli chciałbyś to robić prawdopodobnie musiałbyś napisać własny moduł do jądra.) Sterownik Linuxowy jest całkiem wszechstronny a więc używanie na przykład niestandardowych prędkości portu nie powinno być problemem.
Jeśli chcesz dowiedzieć się więcej o programowaniu portu szeregowego w Linuxie
zobacz stronę termios(3) w podręczniku systemowym man, źródła sterownika (linux/drivers/char/serial.c), i
http://www.easysw.com/~mike/serial/index.html.
Jeśli zależy Ci na dobrej obsłudze analogowej transmisji I/O, możesz podłączyć do portu równoległego przetworniki analogowo-cyfrowe bądż cyfrowo-analogowe (ADC,DAC).(Podpowiedź: weż zasilanie z portu joysticka bądż z wolnej wtyczki zasilania dysku twardego wyprowadzonej na zewnątrz obudowy, chyba że masz urządzenie nie wymagające dużej mocy, wtedy możesz wziąść zasilanie z samego portu. Możesz też użyć zewnętrznego zasilacza.) Możesz też kupić kartę przetworników analogowo-cyfrowych i cyfrowo analogowych (AD/DA) (większość starszych/wolniejszych takich kart jest sterowana za pomocą portów I/O) Jeśli nie przeszkadza ci małą ilość kanałów (1 lub 2) niedokładność oraz (możliwe) złe zerowanie, dobra (i szybka) będzie tania karta dżwiękowa wspierana przez Linuxowy sterownik.
W czułych urządzeniach analogowych niewłaściwe uziemienie możę spowodować błędy na wejściach bądź wyjściach. Jeśli przytrafi Ci się coś takiego, możesz spróbować odizolować elektrycznie urządzenie od komputera przez użycie transoptorów (optocouplers) na wszystkich sygnałach pomiędzy Twoim urządzeniem a komputerem. Aby zapewnić lepszą izolację zasilanie do transoptorów spróbuj wziąść z komputera (wolne sygnały na porcie mogą dać wystarczającą ilość mocy)
Jeśli szukasz oprogramowania do projektowania płytek drukowanych na Linuxa
to jest darmowa aplikacja która nazywa się Pcb i powinna sprawiać się dobrze,
przynajmniej wtedy kiedy nie robisz czegoś bardzo skomplikowanego. Załączona jest ona
do wielu dystrybucji Linuxa a dostępna na
ftp://sunsite.icm.edu.pl/pub/Linux/sunsite/apps/circuits/ (plik
pcb-*).
Dostaje błąd segmentacji pamięci kiedy dobieram się do portów
Albo twój program nie ma uprawnień root'a bądź wywołanie
ioperm() nie powiodło się z jakiegoś innego powodu.
Sprawdź wartość powrotną funkcji ioperm(). Sprawdź również czy rzeczywiśćie
operujesz na portach do których uzyskałeś dostęp za pomocą ioperm() (zobacz P3).
Jeśli używasz makr opóźniających (inb_p(), outb_p(), itd), pamiętaj aby
wywołać ioperm() również wtedy jeśli chcesz uzyskać dostęp do portu 0x80
Nie mogę nigdzie znaleść deklaracji funkcji in*(), out*()
i gcc narzeka na niezdefiniowane referencje.
Nie kompilowałeś z włączoną optymalizacją (-O),
i w ten sposób gcc nie mógł odnaleźć makr w katalogu asm/io.h. Albo
nie włączyłeś w ogóle <asm/io.h> do swojego programu.
Wywołąnie out*() nie robi nic bądź robi coś dziwnego.
Sprawdź kolejność parametrów; powinno być
outb(wartość, port), a nie outportb(port, wartość) co jest popularne w MS-DOS.
Chcę sterować standardowym urządzeniem RS-232/portem równoległym/drukarką/joystickiem
Lepiej będzie jak użyjesz istniejących sterowników z jądra, X serwera lub czegoś innego. Sterowniki te są zazwyczaj dosyć wszechstronne więc nawet lekko niestandardowe urządzenia z nimi współpracują. Zobacz wyżej informacje o zwykłych portach, są tam odnośniki do stosownej dokumentacji.
Oto kawałek prostego przykładowego programu demonstrującego dostęp do rejestrów I/O.
/*
* example.c: bardzo prosty przykład dostępu do portów I/O
*
* Program ten nie robi nic użytecznego, zapisuje do portu, czeka i
* odczytuje z portu. Kompilacja: gcc -O2 -o example example.c
* Uruchamiac jako ./example będąc root'em
/
#include <stdio.h>
#include <unistd.h>
#include <asm/io.h>
#define BASEPORT 0x378 /* lp1 */
int main()
{
/* Uzyskaj dostęp do portów */
if (ioperm(BASEPORT, 3, 1)) {perror("ioperm"); exit(1);}
/* Ustaw wszystkie bity danych (D0-D7) w stan niski (0) */
outb(0, BASEPORT);
/* Zaczekaj chwilkę (100 ms) */
usleep(100000);
/* Odczytaj z rejestru statusowego (BASE+1) i wyświetl rezultat */
printf("status: %d\n", inb(BASEPORT + 1));
/* Już nie potrzebujemy portów */
if (ioperm(BASEPORT, 3, 0)) {perror("ioperm"); exit(1);}
exit(0);
}
/* koniec example.c */
Pomogło mi zbyt wiele osób aby je tutaj wszystkie wymienić, ale wszystkim bardzo dziękuję. Nie odpowiedziałem im wszystkim; przepraszam za to i jeszcze raz dzięki za pomoc.
Niniejsze tłumaczenie objęte jest prawami autorskimi Michała Szwaczko. Dozwolone jest rozpowszechnianie i dystrybucja na prawach takich samych jak dokument oryginalny.(Zobacz HOWTO-Copyright)
Zmiany wprowadzone przeze mnie do dokumentu polegają na zastąpieniu adresów niektórych serwerów ftp przez ich mirrory w Polsce.
Zdaję sobie sprawę że tłumaczenie nie jest wolne od wad i błędów. Jeśli znajdziesz
jakieś, proszę napisz do mnie:
michalsz@lena.zsg.lublin.pl
Oficjalną stroną grupy tłumaczy HOWTO jest http://www.jtz.org.pl doc-linux-pl-2002.06.14.orig/mini/html/IP-Alias.pl.html 0100664 0001750 0001750 00000023407 07104371340 021135 0 ustar coven coven
/sbin/insmod /lib/modules/`uname -r`/ipv4/ip_alias.o
/sbin/ifconfig lo 127.0.0.1 /sbin/ifconfig eth0 up /sbin/ifconfig eth0 172.16.3.1 /sbin/ifconfig eth0:0 172.16.3.10 /sbin/ifconfig eth0:1 172.16.3.100
/sbin/route add -net 127.0.0.0 /sbin/route add -net 172.16.3.0 dev eth0 /sbin/route add -host 172.16.3.1 dev eth0 /sbin/route add -host 172.16.3.10 dev eth0:0 /sbin/route add -host 172.16.3.100 dev eth0:1 /sbin/route add default gw 172.16.3.200
Koniec.
Jako przykładowe numery IP powyżej, używam Prywatnych numerów IP ( RFC 1918) dla zilustrowania przykładu. Zamień je na swoje oficjalne lub prywatne adresy IP.
Ten przykład zawiera tylko trzy numery IP. Maksymalna liczba, zdefiniowana w /usr/include/linux/net_alias.h, to 256. 256 adresów IP na JEDNEJ karcie to mnóstwo! :-)
Oto, jak wygląda mój /sbin/ifconfig:
lo Link encap:Local Loopback
inet addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.0.0.0
UP BROADCAST LOOPBACK RUNNING MTU:3584 Metric:1
RX packets:5088 errors:0 dropped:0 overruns:0
TX packets:5088 errors:0 dropped:0 overruns:0
eth0 Link encap:10Mbps Ethernet HWaddr 00:8E:B8:83:19:20
inet addr:172.16.3.1 Bcast:172.16.3.255 Mask:255.255.255.0
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:334036 errors:0 dropped:0 overruns:0
TX packets:11605 errors:0 dropped:0 overruns:0
Interrupt:7 Base address:0x378
eth0:0 Link encap:10Mbps Ethernet HWaddr 00:8E:B8:83:19:20
inet addr:172.16.3.10 Bcast:172.16.3.255 Mask:255.255.255.0
UP BROADCAST RUNNING MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0
TX packets:0 errors:0 dropped:0 overruns:0
eth0:1 Link encap:10Mbps Ethernet HWaddr 00:8E:B8:83:19:20
inet addr:172.16.3.100 Bcast:172.16.3.255 Mask:255.255.255.0
UP BROADCAST RUNNING MTU:1500 Metric:1
RX packets:1 errors:0 dropped:0 overruns:0
TX packets:0 errors:0 dropped:0 overruns:0
i /proc/net/aliases:
device family address eth0:0 2 172.16.3.10 eth0:1 2 172.16.3.100
oraz /proc/net/alias_types:
type name n_attach 2 ip 2
Oczywiście rzeczy w /proc/net były utworzone przez komendę ifconfig, a nie ręcznie!
Pytanie: Jak mogę utrzymać zmiany, żeby nie uległy skasowaniu po restarcie systemu?
Odpowiedź: Jeżeli używasz init'a BSD lub System V (np. RedHat), możesz zawsze załączyć ustawienia w pliku /etc/rc.d/rc.local. Oto, co mam w moim systemie inicjalizującym (RedHat 3.0.3 i 4.0):
#ustawiamy interfejsy aliasów IP echo "Ustawiam aliasy IP 172.16.3.1, 172.16.3.10, 172.16.3.100 ..." /sbin/ifconfig lo 127.0.0.1 /sbin/ifconfig eth0 up /sbin/ifconfig eth0 172.16.3.1 /sbin/ifconfig eth0:0 172.16.3.10 /sbin/ifconfig eth0:1 172.16.3.100 #ustawiamy routing echo "Ustawiam routing IP ..." /sbin/route add -net 127.0.0.0 /sbin/route add -net 172.16.3.0 dev eth0 /sbin/route add -host 172.16.3.1 eth0 /sbin/route add -host 172.16.3.10 eth0:0 /sbin/route add -host 172.16.3.100 eth0:1 /sbin/route add default gw 172.16.3.200 #
Pytanie: Jak ustawić aliasowaną maszynę do odbierania e-maili na różne aliasowane numery IP (na maszynie używającej sendmail'a)?
/etc/mynames.cw: ---------------- # /etc/mynames.cw - wpisz wszystkie aliasy twojej maszyny; # jest komentarzem. domain.one.net domain.two.com domain.three.org 4.5.6.7
. . . ################## # local info # ################## . . # file containing names of hosts for which we receive email Fw/etc/mynames.cw . . .
ganymede$ /usr/lib/sendmail -bt ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) Enter < ruleset> < address> > 0 me@4.5.6.7 rewrite: ruleset 0 input: me @ 4 . 5 . 6 . 7 rewrite: ruleset 98 input: me @ 4 . 5 . 6 . 7 rewrite: ruleset 98 returns: me @ 4 . 5 . 6 . 7 rewrite: ruleset 97 input: me @ 4 . 5 . 6 . 7 rewrite: ruleset 3 input: me @ 4 . 5 . 6 . 7 rewrite: ruleset 96 input: me < @ 4 . 5 . 6 . 7 > rewrite: ruleset 96 returns: me < @ 4 . 5 . 6 . 7 . > rewrite: ruleset 3 returns: me < @ 4 . 5 . 6 . 7 . > rewrite: ruleset 0 input: me < @ 4 . 5 . 6 . 7 . > rewrite: ruleset 98 input: me < @ 4 . 5 . 6 . 7 . > rewrite: ruleset 98 returns: me < @ 4 . 5 . 6 . 7 . > rewrite: ruleset 0 returns: $# local $: me rewrite: ruleset 97 returns: $# local $: me rewrite: ruleset 0 returns: $# local $: me > 0 me@4.5.6.8 rewrite: ruleset 0 input: me @ 4 . 5 . 6 . 8 rewrite: ruleset 98 input: me @ 4 . 5 . 6 . 8 rewrite: ruleset 98 returns: me @ 4 . 5 . 6 . 8 rewrite: ruleset 97 input: me @ 4 . 5 . 6 . 8 rewrite: ruleset 3 input: me @ 4 . 5 . 6 . 8 rewrite: ruleset 96 input: me < @ 4 . 5 . 6 . 8 > rewrite: ruleset 96 returns: me < @ 4 . 5 . 6 . 8 > rewrite: ruleset 3 returns: me < @ 4 . 5 . 6 . 8 > rewrite: ruleset 0 input: me < @ 4 . 5 . 6 . 8 > rewrite: ruleset 98 input: me < @ 4 . 5 . 6 . 8 > rewrite: ruleset 98 returns: me < @ 4 . 5 . 6 . 8 > rewrite: ruleset 95 input: < > me < @ 4 . 5 . 6 . 8 > rewrite: ruleset 95 returns: me < @ 4 . 5 . 6 . 8 > rewrite: ruleset 0 returns: $# smtp $@ 4 . 5 . 6 . 8 $: me < @ 4 . 5 . 6 . 8 > rewrite: ruleset 97 returns: $# smtp $@ 4 . 5 . 6 . 8 $: me < @ 4 . 5 . 6 . 8 > rewrite: ruleset 0 returns: $# smtp $@ 4 . 5 . 6 . 8 $: me < @ 4 . 5 . 6 . 8 > >
Mam nadzieję, że było to użyteczne dla kogoś.
Dziękuję wszystkim, którzy zrobili tyle świetnej pracy nad Linuxen i IP Aliasingiem, a zwłaszcza Juanowi Jose Ciarlantowi za odpowiedzi na moje pytania. Podziękowania dla asów programowania!
Jeżeli ten dokument był dla ciebie użyteczny, lub masz jakieś sugestie o poprawkach, wyślij e-mail na h.pillay@ieee.org.
Baw się.
Ten dokument był pierwotnie w formie htmlowej (dla niewtajemiczonych -
tłumacze z JTZ piszą w SGML), zupełnie niedostosowanej do
,,standardu HOWTO'', więc pozwoliłem sobie go do niego dostosować, m.in.
podzielić na sekcje.
Prawa autorskie tego tłumaczenia należą do tygrys@fidonet.org.pl.
Jeżeli masz jakieś pytania lub poprawki dotyczące tego tłumaczenia, daj mi
znać.
doc-linux-pl-2002.06.14.orig/mini/html/IP-Masquerade.pl.html 0100664 0001750 0001750 00000165276 07104371340 022206 0 ustar coven coven
Dokument ten opisuje jak włączyć maskowanie IP na hoście linux-owym, pozwalając tym samym na dostęp do Internetu komputerom podłączonym do tego Linux-a i nie posiadającym własnego adresu IP. Możliwe jest podłączenie tych komputerów do Linux-a poprzez Ethernet czy inne medium jak linie dzwonione ppp. Dokument ten skupi się na połączeniach Ethernet, ponieważ jest to najbardziej rozpowszechniony przypadek.
Dokument ten jest przeznaczony dla użytkowników jąder 2.0.x. Jądra w wersji rozwojowej NIE są opisane.
Założenie maskowania na nowszych jądrach (tj. 2.x) będąc nowym użytkownikiem, jest trochę trudne moim zdaniem. Chociaż jest FAQ i lista dyskusyjna, nie ma żadnego specjalnie dla tego tematu przeznaczonego dokumentu; a pojawiają się na liście dyskusyjnej żądania o takowy. Tak więc zdecydowałem się napisać taki dokument jako punkt oparcia dla nowych użytkowników, i pewnie także coś dla doświadczonych użytkowników, którzy mogą go dalej rozbudowywać. Jeśli sądzisz, że nie robię tego źle, to nie bój się mi tego powiedzieć, jak mogę to zrobić lepiej.
Dokument ten jest w dużej mierze oparty o oryginalne FAQ napisane przez Kena Evesa i dużą liczbę pomocnych wiadomości z listy dyskusyjnej o maskowaniu IP. Specjalne podziękowania należą się Panu Matthew Driverowi, którego to list zainspirował mnie do zainstalowania maskowania IP i napisania tego.
Nie krępuj się napisać mi jakiekolwiek komentarze na adres ambrose@writeme.com, jeśli podaje jakieś błędne informacje lub jakiejś informacji brakuje. Wasze nieocenione komentarze na pewno wpłyną na przyszłość tego HOWTO!
To HOWTO ma być podręcznikiem pomocnym do jak najszybszego ustawienia maskowania IP. Ponieważ nie mam praktyki w pisaniu technicznych dokumentów, możesz stwierdzić, że informacje zawarte tutaj nie są takie ogólne i obiektywne jak powinny być. Najnowsze informacje można znaleźć na stronie Zasoby IP-Masquerade, którą prowadzę. Jeśli masz jakieś techniczne pytania na temat maskowania, dopisz się do listy dyskusyjnej zamiast wysyłać listy do mnie, ponieważ mój czas jest ograniczony oraz ci którzy rozwijają kod maskowania są bardziej kompetentni do odpowiedzi na te pytania.
Najnowsza wersja oryginału tego dokumentu znajduje się na stronie Zasoby IP Masquerade, gdzie są także wersje HTML i PostScript:
Prawa autorskie należą do Ambrose Au (C) 1996 i jest to
dokument wolnodostępny. Można go rozprowadzać na zasadach licencji
GNU GPL.
Informacje i cała zawartość tego dokumentu są najlepsze o których wiem. Jednak maskowanie IP jest eksperymentalne i możliwe, że zrobię jakiś błąd. Tak więc powinieneś się zastanowić czy chesz stosować informacje z tego dokumentu.
Nikt nie jest odpowiedzialny za jakiekolwiek szkody czy zniszczenia wynikłe z używania informacji tutaj zawartych, tj:
AUTOR NIE JEST ODPOWIEDZIALNY ZA JAKIEKOLWIEK ZNISZCZENIA POWSTAŁE NA SKUTEK DZIAŁAŃ PODJĘTYCH NA PODSTAWIE INFORMACJI Z TEGO DOKUMENTU.
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:
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 /JTZ/.
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@jtz.org.pl. Jeśli chcesz sie 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:
Jest to funkcja sieciowa w fazie rozwoju w Linuksie. Jeśli na podłączonym do Internetu Linux-ie jest włączone maskowanie, to komputery łączące się z nim (czy to w tej samej sieci czy też przez modem) mogą także połączyć się z Internetem, pomimo iż nie mają swojego oficjalnego numeru IP.
Pozwala to grupom maszyn ukrytych za gateway-em, który wydaje się być jedynym komputerem łączącym się z Internetem, na niewidzialny dostęp do Internetu. Złamanie zabezpieczeń dobrze skonfigurowanego systemu maskowania powinno być trudniejsze od złamania dobrego firewall-a opartego na filtrowaniu pakietów (zakładając, że w obu nie ma błędów software'owych).
Maskowanie IP jest nadal w fazie eksperymentalnej. Jednak, jądra od wersji 1.3.x mają już wbudowaną obsługę. Wiele osób prywatnych jak i instytucji używa go z zadowalającym rezultatem.
Przeglądanie sici WWW oraz usługa telnet działają według zgłoszeń
dobrze. FTP, IRC i słuchanie Real Audio działają po załadowaniu
pewnych modułów. Inne systemy przekazu audio jak True Speech czy
Internet Wave także działają. Niektórzy z listy dyskusyjnej
próbowali nawet konferencji wideo. Po zaaplikowaniu najnowszej łaty
ICMP działa także ping.
Dokładniejszą listę działającego oprogramowania znajdziesz w sekcji 4.3.
Maskowanie IP działa dobrze z klientami na kilku różnych systemach operacyjnych i platformach. Pozytywne przypadki odnotowano z Unix-em, Windows 95, Windows NT, Windows for Workgroups (z pakietem TCP/IP), OS/2, Macintosh System's OS z Mac TCP, Mac Open Transport, DOS z pakietem NCSA Telnet, VAX, Alpha z Linux-em i nawet Amiga z AmiTCP czy ze stosem AS225.
Wzięte z IP-Maquerade FAQ autorstwa Kena Evesa:
Oto rysunek przedstawiający najprostszy przypadek:
SLIP/PPP +------------+ +-------------+
do prowajdera | Linux | SLIP/PPP | Cokolwiek |
<---------- modem1| |modem2 ----------- modem | |
111.222.333.444 | | 192.168.1.100 | |
+------------+ +-------------+
Na powyższym rysunku Linux z zainstalowanym i działającym
maskowaniem jest połączony z Internetem poprzez SLIP lub PPP
przez modem1. Ma on przypisany adres IP 111.222.333.444. Istnieje
też możliwość połączenia się z nim poprzez łącze dzwonione
SLIP/PPP przez modem2.
Drugi system (który nie musi być Linux-em) wdzwania się do Linux-a
i otwiera połączenie SLIP/PPP. NIE ma on przypisanego adresu IP w
Internecie więc używa 192.168.1.100 (zobacz poniżej).
Z poprawnie skonfigurowanymi maskowaniem IP i routing-iem
Cokolwiek może połączyć się z Internetem jak gdyby rzeczywiście
było podłączone (z kilkoma wyjątkami).
Cytat Pauline Middelink:
Nie zapomnij wspomnieć, że Cokolwiek powinno mieć jako gateway
Linux-a (czy to będzie domyślny routing czy tylko podsieć nie ma
znaczenia). Jeśli Cokolwiek nie może tego zrobić, Linux powinien
działać jako proxy arp dla wszystkich routowanych adresów, ale
ustawianie proxy arp jest poza obszarem tego dokumentu.
Następujące jest wyjątkiem z postu na grupie
comp.os.linux.networking, który został poddany edycji, aby nazwy
użyte w przykładzie powyżej pasowały:
o Informuję Cokolwiek, że mój Linux ze SLIP-em jest jego gatewayem.
o Kiedy nadejdzie do Linux-a pakiet z Cokolwiek, zostanie mu nadany
nowy numer portu źródłowego oraz dodany adres Linux-a w nagłówku
pakietu z zachowaniem oryginału. Potem Linux wyśle ten pakiet w
świat przez SLIP/PPP.
o Kiedy nadejdze do Linux-a pakiet ze świata, jeśli numer portu
jest jednym z nadanych powyżej, zostanie nadany mu oryginalny port
i adres IP i pakiet ten zostanie przesłany do Cokolwiek.
o Host, który wysłał pakiet nigdy nie będzie widział różnicy.
Przykład Maskowania IP.
Oto typowy przykład:
+----------+
| | Ethernet
| komp1 |::::::
| |2 :192.168.1.x
+----------+ :
: +----------+ łącze
+----------+ : 1| Linux | PPP
| | ::::| masq-gate|:::::::::// Internet
| komp2 |:::::: | |
| |3 : +----------+
+----------+ :
:
+----------+ :
| | :
| komp3 |::::::
| |4
+----------+
<-Sieć wewnętrzna->
W tym przykładzie są 4 komputrery, na których się skupiliśmy
(najpewniej jest jeszcze coś daleko na prawo, przez co przechodzi
twoje połączenie z Internetem, i jest coś (daleko poza stroną) w
Internecie, z czym byś chciał się komunikować). Linux
masq-gate jest gateway-em z maskowaniem dla wewnętrznej
sieci złożonej z komp1, komp2 i komp3, które chcą
się dostać do Internetu. Sieć wewnętrzna używa jednego z adresów do
prywatnego użytku, w tym przypadku sieci klasy C 192.168.1.0,
z Linux-em posiadającym adres 192.168.1.1 i innymi systemami
posiadającymi adresy w tej sieci.
Trzy maszyny komp1, komp2 i komp3 (które, przy
okazji, mogą być jakimkolwiek innym systemem rozumiejącym IP - jak
np.: Windows 95, Macintosh MacTCP czy nawet
kolejny Linux) mogą połączyć się z innymi maszynami w Internecie,
jednak system maskowania masq-gate zamienia wszystkie ich
połączenia, tak żeby wyglądały jakby pochodziły z masq-gate i
zajmuje się tym, aby dane przychodzące spowrotem do połączenia
maskowanego zostały przekazane do odpowiedniego systemu - tak
więc systemy w wewnętrznej sieci widzą bezpośrednie połączenie z
Internetem i są nieświadome, że ich dane są zmieniane.
** Najnowsze informacje znajdziesz na stronie zasobów dla maskowania. Trudno jest często uaktualniać HOWTO.**
Jeśli twoja prywatna sieć zawiera jakieś ważne informacje, pomyśl trochę zanim zaczniesz korzystać z maskowania. Może to być twoja brama do Internetu, ale także brama do twojej sieci dla kogoś z zewnątrz.
** Najnowsze informacje znajdziesz na stronie zasobów dla maskowanieu. Trudno jest często uaktualniać HOWTO.**
/usr/src/ poleceniem
tar xvzf linux-2.0.x.tar.gz -C /usr/src, gdzie x jest numerem
łaty (od 0 do najnowszej wersji).linux).Odpowiedz YES na następujące pytania:
* Prompt for development and/or incomplete code/drivers
CONFIG_EXPERIMENTAL
- pozwoli ci to na wybór eksperymentalnego kodu maskowania
* Enable loadable module support
CONFIG_MODULES
- pozwoli na ładowanie modułów
* Networking support
CONFIG_NET
* Network firewalls
CONFIG_FIREWALL
* TCP/IP networking
CONFIG_INET
* IP: forwarding/gatewaying
CONFIG_IP_FORWARD
* IP: firewalling
CONFIG_IP_FIREWALL
* IP: maskowanie (EXPERIMENTAL)
CONFIG_IP_MASQUERADE
- pomimo, że jest to eksperymentalne jest to *KONIECZNE*
* IP: ipautofw masquerade support (EXPERIMENTAL)
CONFIG_IP_MASQUERADE_IPAUTOFW
- zalecane
* IP: ICMP maskowanie
CONFIG_IP_MASQUERADE_ICMP
- obsługa maskowania pakietów ICMP, opcjonalne
* IP: always defragment
CONFIG_IP_ALWAYS_DEFRAG
- szczególnie zalecane
* Dummy net driver support
CONFIG_DUMMY
- zalecane
UWAGA: To są opcje tylko do maskowania. Włącz to co potrzebujesz dla swojej konfiguracji.
make modules; make modules_install
/etc/rc.d/rc.local (czy jakiegoś, który uważasz za stosowny),
aby automatycznie podczas każdego startu systemu załadować moduły
znajdujące się w /lib/modules/2.0.x/ipv4/:
.
.
.
/sbin/depmod -a
/sbin/modprobe ip_masq_ftp
/sbin/modprobe ip_masq_raudio
/sbin/modprobe ip_masq_irc
(i inne moduły jak ip_masq_cuseeme, ip_masq_vdolive
jeśli założyłeś łaty)
.
.
.
Uwaga: Możesz także załadować te moduły ręcznie przed użyciem ip_masq, ale NIE używaj do tego celu kerneld - to NIE będzi działać!
Ponieważ wszystkie INNE maszyny nie mają przypisanych adresów, musi być jakiś poprawny sposób, aby nadać im takie adresy.
Z IP Masquerade FAQ:
Jest RFC (#1597) informujące które adresy IP mogą być używane w niepołączonych sieciach. Są 3 bloki przeznaczone do tego celu. Ten, którego używam to podsieci klasy C o adresach 192.168.1.n do 192.168.255.n.
Z RFC 1597:
Rozdział 3: Prywatna przestrzeń adresowa
IANA (Internet Assigned Numbers Authority) zarezerwowało następujące
trzy bloki przestrzeni adresów IP dla prywatnych sieci:
10.0.0.0 - 10.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255
Do pierwszego będziemy się odnosić jako "24-bitowy blok", do drugiego
jako "20-bitowy blok" i do trzeciego jako "16-bitowy blok". Zauważ, że
pierwszy blok to nic innego jak pojedynczy numer sieci klasy A,
podczas gdy drugi blok to ciągły blok 16. sieci klasy B i trzeci blok
to ciągły blok 255. sieci klasy C.
Tak więc, jeśli używasz sieci klasy C, powinieneś nadać swoim maszynom adresy 192.168.1.1, 1.92.168.1.2, 1.92.168.1.3, ..., 192.168.1.x.
192.168.1.1 to zwykle gateway, który jest Linux-em łączącym cię z Internetem. Zauważ, że 192.168.1.0 i 192.168.1.255, to odpowiednio adresy sieci i broadcast, które są zarezerwowane. Unikaj użycia tych adresów na twoich maszynach.
Oprócz ustawienia na każdej maszynie adresu IP, powinieneś także ustawić odpowiedni gateway. Ogólnie, jest to raczej proste. Po prostu wpisujesz adres swojego Linux-a (zwykle 192.168.1.1) jako adres gateway-a.
Jako DNS możesz wpisać jakikolwiek dostępny adres serwera DNS-u. Najlepiej ten sam, którego używa twój Linux. Możesz także dodać jakąkolwiek domenę do przeszukiwania.
Po tym jak skonfigurowałeś te adresy IP, nie zapomnij zrestartować odpowiednich serwisów lub systemów.
Następujące wskazówki konfiguracyjne zakładają, że używasz sieci klasy C, twój Linux ma adres 192.168.1.1. Pamiętaj, że 192.168.1.0 i 192.168.1.255 są zarezerwowane.
/etc/resolv.conf). Opcjonalnie
możesz dodać jakąś domenę do przeszukiwania.ping-nij Linux-a, aby sprawdzić połączenie sieciowe:
Start/Uruchom, wpisz ping 192.168.1.1HOSTS,
żebys mógł używać nazw hostów (bez domeny) ze swojej sieci. W katalogu
windows znajduje się przykład o nazwie HOSTS.SAM.
ping 192.168.1.1
[1]Novell NE2000 Adapter. Potem ustaw Adres IP
na 192.168.1.x (1 < x < 255), ustaw Maskę podsieci na
255.255.255.0 i Domyślny gateway na 192.168.1.1.ping 192.168.1.1
/etc/sysconfig/network-scripts/ifcfg-eth0 w dystrybucji
Red Hat, albo po prostu zrób to w Control Panel-u./etc/resolv.conf./etc/networks.ping: ping 192.168.1.1, aby
sprawdzić połączenie do gateway-a.
nwpd 0x60 10 0x300, jeśli karta jest ustawiona na IRQ=10 i
adres I/O=0x300.pkunzip
tel2308b.zip.config.tel.myip=192.168.1.x (1 < x < 255) i
netmask=255.255.255.0.hardware=packet,
interrupt=10, ioaddr=60
name=default
host=twój.linux
hostip=192.168.1.1
gateway=1
name=dns.domena.pl ; hostip=123.123.123.123; nameserver=1
Uwaga: zamień powyższe informacje na poprawne dla ciebie.config.teltelnet 192.168.1.1
ping-nąć Linux-a, aby sprawdzić
połączenie. Jeśli masz program freeware'owy MacTCP Watcher,
kliknij na przycisk Ping i wpisz adres swojego Linux-a
(192.168.1.1) w okienku, które się pojawi. (To jest tylko test dla sieci
lokalnej. Nie możesz jeszcze testować połączenia na świat.)Hosts w System
Folders, żeby używać tylko nazw hostów bez domeny w swojej sieci
lokalnej. Plik powinien się już znajdować w System Folders i powinien
zawierać kilka (zakomentowanych) przykładowych pozycji, które możesz
zmodyfikować na swoje potrzeby.
ping-nąć Linux-a, aby sprawdzić połączenie sieciowe.
Jeśli masz program freeware'owy MacTCP Watcher,
kliknij na przycisk Ping i wpisz adres swojego Linux-a
(192.168.1.1) w okienku, które się pojawi. (To jest tylko test dla sieci
lokalnej. Nie możesz jeszcze testować połączenia na świat.)Hosts w System
Folders, żeby używać tylko nazw hostów bez domeny w swojej sieci
lokalnej. Plik może, ale nie musi, już się znajdować w System Folders.
Jeśli jest, to powinien zawierać kilka (zakomentowanych) przykładowych
pozycji, które możesz zmodyfikować na swoje potrzeby. Jeśli go nie ma,
możesz pobrać kopię z systemu z MacTCP, albo po prostu stworzyć swój
własny (składnia jest taka jak w unix-owym /etc/hosts.
Opisane to jest na stronie 33. w RFC 1035). Jeśli już stworzyłeś taki
plik, otwórz TCP/IP control panel, kliknij Select Hosts File
... i otwórz plik Hosts.
c:\nwclient\startnet.bat. Oto kopia mojego:
SET NWLANGUAGE=ENGLISH LH LSL.COM LH KTC2000.COM LH IPXODI.COM LH tcpip LH VLM.EXE F:
c:\nwclient\net.cfg (zmień Link Driver na
swój):
Link Driver KTC2000
Protocol IPX 0 ETHERNET_802.3
Frame ETHERNET_802.3
Frame Ethernet_II
FRAME Ethernet_802.2
NetWare DOS Requester
FIRST NETWORK DRIVE = F
USE DEFAULTS = OFF
VLM = CONN.VLM
VLM = IPXNCP.VLM
VLM = TRAN.VLM
VLM = SECURITY.VLM
VLM = NDS.VLM
VLM = BIND.VLM
VLM = NWP.VLM
VLM = FIO.VLM
VLM = GENERAL.VLM
VLM = REDIR.VLM
VLM = PRINT.VLM
VLM = NETX.VLM
Link Support
Buffers 8 1500
MemPool 4096
Protocol TCPIP
PATH SCRIPT C:\NET\SCRIPT
PATH PROFILE C:\NET\PROFILE
PATH LWP_CFG C:\NET\HSTACC
PATH TCP_CFG C:\NET\TCP
ip_address xxx.xxx.xxx.xxx
ip_router xxx.xxx.xxx.xxx
c:\bin\resolv.cfg.
SEARCH DNS HOSTS SEQUENTIAL NAMESERVER 207.103.0.2 NAMESERVER 207.103.11.9
ping-nąć Linux-a, aby sprawdzić konfigurację sieci.
W oknie OS/2 Command prompt wpisz ping 192.168.1.1.
Jeśli pakiety ping-a przychodzą wszystko jest w porządku.
Powinno się to robić podobnie. Sprawdź poprzednie punkty. Jeśli jesteś zainteresowany opisaniem konfiguracji w jakimkolwiek systemie, to wyślij szczegółowe instrukcje na adres ambrose@writeme.com.
W tym momencie, powinieneś mieć zainstalowane jądro wraz ze wszystkimi potrzebnymi pakietami, jak również załadowane moduły. Także adresy IP, gateway-a i DNS-u na INNYCH maszynach powinny być ustawione.
Teraz jedyne co pozostało, to użycie ipfwadm, aby przekazywać odpowiednie pakiety odpowiednim maszynom.
** Można to zrobić na wiele róznych sposbów. Poniższe sugestie i przykłady działały u mnie, ale ty możesz mieć inne pomysły. Więcej szczegółów znajdziesz w rozdziale 4.4 i na stronie podręcznika systemowego o ipfwadm. **
ipfwadm -F -p deny
ipfwadm -F -a m -S yyy.yyy.yyy.yyy/x -D 0.0.0.0/0
gdzie x jest jednym z poniższych adresów w zależności od klasy twojej sieci, a yyy.yyy.yyy.yyy jest adresem twojej sieci:
Maska | x | Podsieć
~~~~~~~~~~~~~~~~|~~~~|~~~~~~~~~~~~~~~
255.0.0.0 | 8 | Klasa A
255.255.0.0 | 16 | Klasa B
255.255.255.0 | 24 | Klasa C
255.255.255.255 | 32 | Point-to-point
Na przykład jeśli jestem w posieci klasy C, wpisałbym:
ipfwadm -F -p deny
ipfwadm -F -a m -S 192.168.1.0/24 -D 0.0.0.0/0
Ponieważ pakiety bootp przychodzą z poprawnym IP kiedy klient jeszcze nic na temat adresu IP nie wie, dla tych którzy używają serwera bootp w maszynach z maskowaniem czy firewall-ingiem konieczne jest użycie poniższego polecenia przed poleceniem z deny:
ipfwadm -I -a accept -S 0/0 68 -D 0/0 67 -W bootp_clients_net_if_name -P udp
Możesz to także zrobić dla każdej maszyny osobno. Na przykład jeśli chcę, żeby maszyny 192.168.1.2 i 192.168.1.8 miały dostęp do Internetu, a inne nie, to wpisałbym:
ipfwadm -F -p deny
ipfwadm -F -a m -S 192.168.1.2/32 -D 0.0.0.0/0
ipfwadm -F -a m -S 192.168.1.8/32 -D 0.0.0.0/0
Opcjonalnie możesz wpisać maskę podsieci zamiast wartości: 192.168.1.0/255.255.255.0.
Popularnym błędem jest umieszczanie jako pierwszego polecenia:
ipfwadm -F -p masquerade
Nie czyń maskowania domyślną zasadą - jeśli tak zrobisz, ktoś kto może manipulować swoim routingiem, będzie w stanie stworzyć tunel bezpośrednio poprzez twój gateway, aby ukryć swoją tożsamość!
Możesz dodać te linie do plików /etc/rc.local, do jakiegoś
innego pliku rc.*, lub robić to ręcznie za każdym razem kiedy
potrzebujesz maskowania.
Szczegóły na temat ipfwadm znajdziesz w rozdziale 4.4.
Nadszedł czas, żeby wypróbować to wszystko po ciężkiej pracy. Upewnij się, że Linux jest podłączony do Internetu.
Możesz spróbować posurfować po INTERNECIE!!! na swoich INNYCH maszynach i sprawdzić czy się uda. Za pierwszym razem radzę, użyć adresu IP zamiast nazwy kanonicznej, ponieważ twoje ustawienia DNS mogą być niepoprawne.
Na przykład możesz sprawdzić stronę projektu JTZ (http://www.jtz.org.pl/) podając jako adres http://156.17.40.40/.
Jeśli ujrzysz ją, to gratulacje! Działa! Możesz teraz spróbować podać nazwę kanoniczną, potem telnet, ftp, Real Audio, True Speech i co tam jeszcze jest obsługiwane przez maskowanie ... .
Jak dotąd nie mam problemów z powyższymi ustawieniami i jest to w pełni zasługa ludzi, którzy poświęcają swój czas, aby ta wspaniała właściwość działała.
Niektóre protokoły nie będą obecnie działały z maskowaniem, ponieważ albo zakładają pewne fakty na temat numerów portów, albo kodują dane na temat adresów i portów w swoich strumieniach - te drugie potrzebują specyficznych proxies wbudowanych w kod maskowania, aby działały.
Maskowanie nie potrafi w ogóle obsługiwać takich serwisów. Jest kilka sposobów, aby takowe działały, ale są one zupełnie nie związane z maskowaniem i są częścią standardowego działania firewall-i.
Jeśli nie wymagasz wysokiego poziomu bezpieczeństwa, to możesz po prostu przekierować porty. Są różne sposoby, aby to zrobić - ja używam zmodyfikowanego kodu programu redir (który mam nadzieję będzie dostępny wkrótce z sunsite i jego kopii). Jeśli chcesz mieć jakiś poziom autoryzacji połączeń wchodzących, to możesz użyć albo TCP wrappers albo Xinetd "powyżej" redir w wersji 0.7 lub nowszej, aby wpuszczać tylko konkretne adresy IP, albo użyj jakichś innych narzędzi. TIS Firewall Toolkit jest dobrym miejscem, w którym możesz poszukać narzędzi i informacji.
Więcej informacji znajdziesz na stronie z zasobami dla maskowania IP.
** Nastepującą listą nikt się już nie zajmuje. Zajrzyj na tę stronę, aby dowiedzieć się które aplikacje działają poprzez maskowanie na Linux-ie. Więcej informacji także na stronie z zasobami dla maskowania IP. **
Ogólnie aplikacja, która używa TCP/UDP powinna działać. Jeśli masz jakieś sugestie, wskazówki lub pytania, na temat aplikacji z maskowaniem IP, odwiedź tę stronę prowadzoną przez Lee Nevo.
Ogólne:
wszystkie obsługiwane platformy, surfowanie po sieci
wszystkie obsługiwane platformy, klienci e-mail
wszystkie obsługiwane platformy, zdalne logowanie
wszystkie obsługiwane platformy, z modułem ip_masq_ftp.o (nie wszystkie adresy działają z pewnymi klientami; np. do niektórych nie można się dostać przy pomocy ws_ftp32, ale działa z Netscape)
wszystkie obsługiwane platformy, szukanie plików (nie wszytkie wersje oprogramowania są obsługiwane)
wszystkie obsługiwane platformy, klient USENET NEWS
Windows (przypuszczalnie wszystkie obsługiwane platformy), surfowanie po wirtualnej rzeczywistości.
głównie platformy na UNIX-ie, niektóre wersje mogą nie działać
wszystkie platformy, z łatą ICMP
wszystkie obsługiwane platformy, z modułami ip_masq_irc.o
wszystkie obsługiwane platformy
wszystkie obsługiwane platformy
Klienci Multimedialni:
Windows, network streaming audio z załadowanym modułem ip_masq_raudio
Windows, network streaming audio
Windows, network streaming audio
Windows, program Client-Server 3D do pogawędek
Windows, program Client-Server 3D do pogawędek
Windows, komunikacja audio Peer-to-peer, można się z tobą porozumieć tylko jeśli zainicjowałeś połączenie, ale nie można zadzwonić do ciebie
Windows, komunikacja na bazie tablic (ogłoszeniowych), można się z tobą porozumieć jeśli zainicjowałeś połączenie; nie można się do ciebie dodzwonić
, wszystkie obsługiwane platformy, z załadowanymi modułami cuseeme; szczegóły znajdziesz na stronie z zasobami dla maskowania IP.
Windows, z łatą vdolive
Uwaga: Niektóre programy, jak IPhone i Powwow mogą działać nawet jeśli to nie ty zaincjowałeś połączenie poprzez użycie pakietu ipautofw. Zobacz w rozdziale 4.6.
Inni klienci:
DOS, pakiet zawierający telnet, ftp, ping, itp.
MS-Windows, zdalna kontrola PC poprzez TCP/IP, działa tylko jeśli jest klientem a nie hostem.
używa ntp - protokół czasu w sieci
Linux, pakiet do zarządzania i monitorowania sieci.
Łączy się, ale głos wędruje tylko w jedną stronę (na zewnątrz)
Nie może połączyć się z serwerem
Nie może połączyć się z drugą stroną
nie będą działać - wymagają napisania proxy dla jądra
W tej chwili nie może działać (robi złe założenia na temat adresów)
Nietestowane, ale sądze, że nie może działać o ile ktoś stworzy proxy dla X, który jest prawdopodobnie osobnym programem dla kodu maskowania. Jednym ze sposobów, aby to działało jest użycie ssh jako połączenia i użycie wewnętrznego proxy X.
Rozdział ten pogłębia wiedzę na temat stosowania polecenia ipfwadm.
Poniżej jest ustawienie dla system z maskowaniem/firewalling-iem, z łączem PPP i statycznymi adresami PPP. Zaufanym interfejsem jest 192.168.255.1, interfejs PPP został zmieniony, aby chronić winnych :). Każdy wchodzący i wychodzący interfejs jest podany osobno, aby wychwycić spoofing IP jak i zatkany (stuffed) routing i/lub maskowanie. Wszystko co nie jest wyraźnie dozwolone jest zabronione!
#!/bin/sh # # /etc/rc.d/rc.firewall, define the firewall configuration, invoked from # rc.local. # PATH=/sbin:/bin:/usr/sbin:/usr/bin # testowanie, poczekaj trochę, potem wyczyść wszystkie regułki. # odkomentuj poniższe linie jeśli chcesz wyłączyć firewall # automatycznie po 10. minutach. # (sleep 600; \ # ipfwadm -I -f; \ # ipfwadm -I -p accept; \ # ipfwadm -O -f; \ # ipfwadm -O -p accept; \ # ipfwadm -F -f; \ # ipfwadm -F -p accept; \ # ) & # Wchodzące, wyczyść i ustaw domyślną regułkę na zabronione. Właściwie # domyślna regułka jest nieodpowiednia, ponieważ zrobiliśmy inną: nie # wpuszczaj nikogo i loguj wszystko. ipfwadm -I -f ipfwadm -I -p deny # interfejs i maszyny lokalne mogą się dostać wszędzie ipfwadm -I -a accept -V 192.168.255.1 -S 192.168.0.0/16 -D 0.0.0.0/0 # interfejs odległy, twierdzący, że jest od nas, spoofing IP, nie # wpuszczaj ipfwadm -I -a deny -V twój.stały.adres.PPP -S 192.168.0.0/16 -D 0.0.0.0/0 -o # interfejs odległy, jakiekolwiek źródło, jeśli celem jest stały adres # PPP, to wpuść ipfwadm -I -a accept -V twój.stały.adres.PPP -S 0.0.0.0/0 -D twój.stały.adres.PPP/32 # interfejs loopback (lo) jest w porządku ipfwadm -I -a accept -V 127.0.0.1 -S 0.0.0.0/0 -D 0.0.0.0/0 # wychwyć wszystko, każdy inny ruch wchodzący jest zabroniony i # logowany, szkoda, że nie ma opcji logowania, ale to robi to samo. ipfwadm -I -a deny -S 0.0.0.0/0 -D 0.0.0.0/0 -o # Wychodzące, wyczyść i ustaw domyślną regułkę na zabronione. Właściwie # domyślna regułka jest nieodpowiednia, ponieważ zrobiliśmy inną: nie # wpuszczaj nikogo i loguj wszystko. ipfwadm -O -f ipfwadm -O -p deny # interfejs lokalny, wszystko z zewnątrz do nas jest w porządku ipfwadm -O -a accept -V 192.168.255.1 -S 0.0.0.0/0 -D 192.168.0.0/16 # wychodzące do lokalnej sieci na zdalnym interfejsie, stuffed # routing, odrzuć ipfwadm -O -a deny -V twój.statyczny.adres.PPP -S 0.0.0.0/0 -D 192.168.0.0/16 -o # wychodzące z lokalnej sieci na zdalnym interfejsie, stuffed # masquerading, odrzuć ipfwadm -O -a deny -V twój.statyczny.adres.PPP -S 192.168.0.0/16 -D 0.0.0.0/0 -o # wychodzące z lokalnej sieci na zdalnym interfejsie, stuffed # masquerading, odrzuć ipfwadm -O -a deny -V twój.statyczny.adres.PPP -S 0.0.0.0/0 -D 192.168.0.0/16 -o # wszystko inne wychodzące na zdalnym interfejsie jest w porządku ipfwadm -O -a accept -V twój.statyczny.adres.PPP -S twój.statyczny.adres.PPP/32 -D 0.0.0.0/0 # interfejs lokalny (lo) jest w porządku ipfwadm -O -a accept -V 127.0.0.1 -S 0.0.0.0/0 -D 0.0.0.0/0 # wychwyć wszystko, każdy inny ruch wychodzący jest zabroniony i # logowany, szkoda, że nie ma opcji logowania, ale to robi to samo. ipfwadm -O -a deny -S 0.0.0.0/0 -D 0.0.0.0/0 -o # Przekazywanie, wyczyść i ustaw domyślną regułkę na zabronione. Właściwie # domyślna regułka jest nieodpowiednia, ponieważ zrobiliśmy inną: nie # wpuszczaj nikogo i loguj wszystko. ipfwadm -F -f ipfwadm -F -p deny # maskuj z lokalnej sieci na lokalnym interfejsie dokądkolwiek ipfwadm -F -a masquerade -W ppp0 -S 192.168.0.0/16 -D 0.0.0.0/0 # wychwyć wszystko, każdy inny ruch jest zabroniony i # logowany, szkoda, że nie ma opcji logowania, ale to robi to samo. ipfwadm -F -a deny -S 0.0.0.0/0 -D 0.0.0.0/0 -o
Możesz blokować ruch do poszczególnego adresu przy pomocy opcji -I, -O i -F. Pamiętaj, że regułki są skanowane od góry w dół i -a oznacza "dodaj" do już istniejących regułek, tak więc wszelkie szczegółowe regułki muszą pojawić się przed zasadami ogólnymi. Na przykład (nietestowane):
Użycie opcji -I. Przypuszczalnie najszybsze rozwiązanie, ale zatrzymuje tylko lokalne maszyny, firewall jako taki, ma nadal dostęp do zabronionych adresów. Oczywiście możesz dopuścić taką kombinację.
... początek regułek -I ... # odrzuć i loguj lokalny interfejs i lokalne maszyny próbujące dostać # się do 204.50.10.13 ipfwadm -I -a reject -V 192.168.255.1 -S 192.168.0.0/16 -D 204.50.10.13/32 -o # lokalny interfejs i maszyny dokądkowiek jest w porządku ipfwadm -I -a accept -V 192.168.255.1 -S 192.168.0.0/16 -D 0.0.0.0/0 ... koniec regułek -I ...
Użycie opcji -O. Najwolniejsze ponieważ pakiety najpierw przechodzą przez maskowanie, ale ta regułka zatrzymuje nawet firewall przed dostępem do zabronionych adresów.
... początek regułek -O ... # odrzuć i zaloguj wychodzące do 204.50.10.13 ipfwadm -O -a reject -V twój.statyczny.adres.PPP -S twój.statyczny.adres.PPP/32 -D 204.50.10.13/32 -o # wszystko inne wychodzące na odległym interfejsie jest w porządku. ipfwadm -O -a accept -V twój.statyczny.adres.PPP -S twój.statyczny.adres.PPP/32 -D 0.0.0.0/0 ... koniec regułek -O ...
Użycie opcji -F. Prawdopodobnie wolniejsze niż -I i wciąż zatrzymuje tylko maszyny zamaskowane (tj. wewnętrzne), firewall ma nadal dostęp do zabronionych adresów.
... początek regułek -F ... # odrzuć i zaloguj z lokalnej sieci na interfejsie PPP do # 204.50.10.13 ipfwadm -F -a reject -W ppp0 -S 192.168.0.0/16 -D 204.50.10.13/32 -o # maskuj z lokalnej sieci na lokalnym interfejsie dokądkolwiek ipfwadm -F -a masquerade -W ppp0 -S 192.168.0.0/16 -D 0.0.0.0/0 ... koniec regułek -F ...
Nie ma potrzeby na specjalną regułkę, aby pozwolić na ruch z 192.168.0.0/16 do 204.50.11.0; jest to zapewnione przez regułki ogólne.
Jest więcej niż jeden sposób ujęcia interfejsów w powyższych regułkach. Na przykład zamiast -V 192.168.255.1 możesz wpisać -W eth0; zamiast -V twój.statyczny.adres.PPP możesz użyć -W ppp0. Prywatny wybór i dokumentacja, to więcej niż cokolwiek innego.
IPautofw jest programem do ogólnie pojętego przekazywania pakietów TCP i UDP w Linux-ie. Żeby użyć pakietu, który wymaga transmisji UDP trzeba załadować specyficzny moduł ip_masq - ip_masq_raudio, ip_masq_cuseeme, itd. Ipautofw odgrywa bardziej ogólną rolę; będzie on przekazywał każdy rodzaj ruchu włącznie z tym, którego nie przepuszczą moduły specyficzne dla danej aplikacji. Jeśli zarządza się tym programem niepoprawnie można stworzyć dziurę w bezpieczeństwie.
** Proszę SPRÓBUJ NIE wysyłać do mnie listów na temat problemów z maskowaniem IP. Z powodu ilości własnych zajęć nie mogę obiecać, że odpowiem na wszystkie listy nie związane ze stroną WWW. Zamiast tego ślij proszę takie listy na listę dyskusyjną o maskowaniu IP (sądzę, że jest to najlepsze źródło pomocy). Przepraszam za to, ale nie chcę abyś czekał tygodniami na odpowiedź.
ipfwadm.
-V w poleceniu ipfwadm dla
zwiększenia bezpieczeństwaipfwadm -deny, które nie pozwalają na
powstanie dziury w bezpieczeństwie, i wyjaśnienie statusu pinga
przez maskowanie IP
- Delian Delchev, delian@wfpa.acad.bg
- Nigel Metheringham, Nigel.Metheringham@theplanet.net
- Keith Owens, kaos@ocs.com.au
- Jeanette Pauline Middelink, middelin@polyware.iaf.nl
- David A. Ranch, trinity@value.net
- Miquel van Smoorenburg, miquels@q.cistron.nl
- Jos Vos, jos@xos.nl
- I wielu innym, o których mogłem tutaj zapomnieć (daj znać)
doc-linux-pl-2002.06.14.orig/mini/html/LILO.pl.html 0100664 0001750 0001750 00000022557 07104371340 020342 0 ustar coven coven
Mam dwa dyski IDE i jeden dysk SCSI. Dysku SCSI nie widać w BIOS-ie. LILO używa BIOS-owych odwołań i widzi tylko te dyski, które widzi także BIOS. Mój głupi AMI BIOS może wystartować tylko z "A:" lub "C:". Mój główny system plików jest na partycji na dysku SCSI.
Rozwiązanie:
Zapisz jądro, plik z odwzorowaniem (map file) i chain loader
na partycji Linux-owej na pierwszym dysku IDE. Zauważ, że nie
potrzebne jest, aby trzymać jądro na swojej partycji z głównym
systemem plików.
Druga partycja na moim pierwszym dysku IDE (/dev/hda2) jest
zamontowana na /u2.
Oto mój plik /etc/lilo.conf:
# Zainstaluj rekord startowy LILO w Master Boot Record
# na pierwszym dysku IDE.
#
boot = /dev/hda
# /sbin/lilo (instalator) kopiuje rekord startowy LILO z następującego
# pliku do MBR.
install = /u2/etc/lilo/boot.b
#
# Napisałem swoje menu startowe. LILO je tam znajduje.
message = /u2/etc/lilo/message
# Instalator stworzy następujący plik.
# Mówi on programowi ładującemu, gdzie znajduje się jądro.
#
map = /u2/etc/lilo/map
compact
prompt
# Zaczekaj 10 sekund, a potem załaduj jądro 1.2.1 jako domyślne
timeout = 100
# Jądro jest zapisane tam, gdzie BIOS je zobaczy poleceniem:
# cp -p /usr/src/linux/arch/i386/boot/zImage /u2/z1.2.1
image = /u2/z1.2.1
label = 1.2.1
# LILO informuje jądro, aby zamontowało pierwszą partycję dysku SCSI
# jako główny system plików.
# BIOS nie musi jej widzieć.
root = /dev/sda1
# Ta partycja będzie sprawdzona i ponownie zamontowana przez /etc/rc.d/rc.S
read-only
# Temu samemu jądru można przekazać, aby zmontowało inną partycję
# jako główny system plików. Mam awaryjną konfigurację na /u2.
image = /u2/z1.2.1
label = 1.2.1-hda2
root = /dev/hda2
read-only
# Trzymałem stare jądro ze Slackware w razie gdybym stworzył
# jakieś nie działające nowe jądro. Właściwie potrzebowałem tego
# jeden raz.
image = /u2/z1.0.9
label = 1.0.9
root = /dev/sda1
read-only
# Moja partycja DR-DOS-a 6
other = /dev/hda1
loader=/u2/etc/lilo/chain.b
label = dos
alias = m
System w moim biurze ma jeden dysk IDE 1GB.
BIOS może widzieć tylko pierwsze 504 MB dysku IDE.
(Gdzie MB oznacza 2^10 bajtów a nie 10^6 bajtów.)
Tak więc mam MS-DOS na partycji 350 MB /dev/hda1 i
główny system plików Linux-a na partycji 120 MB /dev/hda.
MS-DOS nie był w stanie się poprawnie zainstalować kiedy dysk był jeszcze świeży. Novell DOS 7 miał te same problemy. Na szczęście dla mnie, "Options by IBM" zapomnieli włożyć dysietki "OnTrack" do pudełka z dyskiem. Dysk miał przyjść z produktem zwanym "OnTrack Disk Manager". Jeśli tylko masz MS-DOS-a, sądze, że musisz tego użyć.
A więc zrobiłem tablicę partycji Linux-owym fdisk-iem.
MS-DOS 6.2 nie chciał się zainstalować na /dev/hda1.
Pisał coś jak:
'this release of MS-DOS is for new installations. Your computer already has MS-DOS [co było nieprawdą, bo dysk był czysty] so you need to get an upgrade release from your dealer.'
Co za palant! Uruchomiłem Linux-owego fdisk-a jeszcze raz i skasowałem parytcję pierwszą z tablicy partycji. To zadowoliło MS-DOS-a 6.2, który stworzył dokładnie tę samą partycję pierwszą, którą właśnie skasowałem i zainstalował się. MS-DOS 6.2 zapisał swój Master Boot Record na dysk, ale nie mógł wystartować.
Na szczęście miałem jądro ze Slackware na dyskietce (zrobioną przez program instalacyjny Slackware "setup"), wystartowałem Linux-a i zapisałem LILO na zepsuty MBR DOS-a. To działa.
Oto plik /etc/lilo.conf jakiego użyłem:
boot = /dev/hda
map = /lilo-map
delay = 100
ramdisk = 0 # Wyłącza ramdisk w jądrze Slackware
kernel
timeout = 100
prompt
disk = /dev/hda # BIOS widzi tylko pierwsze 500 MB.
bios=0x80 # podaje pierwszy dysk IDE.
sectors = 63 # weź te liczby z dokumentacji twojego
heads= 16 # dysku twardego
cylinders = 2100
image = /vmlinuz
append = "hd=2100,16,63" # To jest opcjonalne.
root = /dev/hda2
label = linux
read-only
vga = extended
other = /dev/hda1
label = msdos
table = /dev/hda
loader = /boot/chain.b
## koniec
Po tym, jak zainstalowałem te systemy, stwierdziłem, że partycja
zawierająca zImage, boot.p, map, chain.b i plik z komunikatami
może używać systemu plików msdos, tak długo dopóki nie jest
potraktowana "stacker-em" czy "doublespace-m". Tak więc mogłem
zrobić partycję DOS-ową na /dev/hda1 o poj. 500 MB.
Dowiedziałem się także, że "OnTrack" zapisałby tablicę partycji poczynając od kilku tuzinów bajtów od początku dysku, zamiast zacząć na samym początku dysku, i że jest możliwe tak przerobić sterownik Linux-owy do IDE, żeby sobie poradził z tym problemem. Ale instalacja z prekompilowanym jądrem ze Slackware nie byłaby możliwa. Ostatecznie IBM przysłał mi dyskietkę "OnTrack". Zadzwoniłem do serwisu technicznego "OnTrack". Powiedzieli, że Linux jest popsuty, bo nie używa BIOS-u. Oddałem im dyskietkę spowrotem.
Potem zainstalowałem Windows 95 w moim biurze. Rozwaliły mój ładny LILO MBR w pył, ale zostawiły moją partycję Linux-ową w spokoju. Jądra długo się ładują z dyskietek, więc zrobiłem dyskietkę z działającym na niej ustawieniem LILO, która mogła startować moje jądro z dysku IDE.
W ten sposób stworzyłem dyskietkę LILO:
fdformat /dev/fd0H1440 # utwórz ścieżki na dyskietce
mkfs /dev/fd0 1440 # utwórz na niej stsem plików minix
mkdir /3 # stwórz katalog, żeby ją zamontować
mount /dev/fd0 /3 # zamontuj dyskietkę
cp -p /boot/chain.b /3 # przekopiuj chain loader
lilo -C /etc/lilo.flop # zainstaluj LILO i mapę systemu na dyskietce
umount /3 # odmontuj dyskietkę
Zauważ, że DYSKIETKA MUSI BYĆ ZAMONTOWANA KIEDY URUCHAMIASZ NA NIEJ INSTALATORA tak, żeby LILO mogło zapisać swoją mapę prawidłowo.
Oto plik /etc/lilo.flop. Jest prawie identyczny z
poprzednim:
# Tworzy dyskietkę, która może ładować jądra z dysku twardego.
boot = /dev/fd0
map = /3/lilo-map
delay = 100
ramdisk = 0 # Wyłącza ramdisk w jądrze ze Slackware
timeout = 100
prompt
disk = /dev/hda # Dysk 1 GB, BIOS widzi tylko 500 MB
bios=0x80
sectors = 63
heads = 16
cylinders = 2100
image = /vmlinuz
append = "hd=2100,16,63"
root = /dev/hda2
label = linux
read-only
vga = extended
other = /dev/hda1
label = msdos
table = /dev/hda
loader = /3/chain.b
## koniec
Ostatecznie, potrzebowałem MS-DOS-a 6.2 w moim systemie biurowym, ale nie chciałem dotykać pierwszego dysku. Dodałem kontroler SCSI i dysk, stworzyłem na nim Linux-owym mkdosfs-em plik systemów msdos i Windows 95 widzi to jako "D:". Ale oczywiście MS-DOS nie wystartuje z "D:". To nie jest problem jeśli masz LILO. Dodałem:
other = /dev/sda1
label = d6.2
table = /dev/sda
loader = /boot/any_d.b
do lilo.conf z przykładu 2. MS-DOS 6.2 działa i myśli, że
jest na"C:" a Windows 95 jest na "D:".
Jeśli znalazłeś jakieś rażące błędy ortograficzne, gramatyczne, składniowe, techniczne to pisz do mnie:
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.ippt.gov.pl/pub/Linux/JTZ/
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 sie na nią zapisać, to
wyślij list o treści subscribe jtz Imię Nazwisko na adres
listproc@ippt.gov.pl
doc-linux-pl-2002.06.14.orig/mini/html/Leased-Line.pl.html 0100664 0001750 0001750 00000035556 07104371340 021670 0 ustar coven coven
Linią dzierżawioną jest każde stałe połączenie dwóch punktów (point-to-point, dalej będę nazywał je p-t-p, nie mylić z ppp - przyp. tłum.), dzierżawione od firmy telekomunikacyjnej lub innej organizacji. Linia dzierżawiona składa się z przewodów, takich jak skrętka, kabel koncentryczny lub światłowód; może też zawierać wszystkie rodzaje dodatkowego osprzętu, jak rdzenie, transformatory, wzmacniacze i regeneratory.
Ten dokument opisuje
Konfigurację modemu i pppd do użycia dwużyłowej linii dzierżawionej na skrętce.Ten dokument NIE opisuje
SLIP, pobierania i instalowania pppd, synchronicznego przesyłania danych i modemów pasma podstawowego (baseband)
Zakładam, że masz już działającego pppd. Potrzebny będzie też Minicom lub podobny program do konfiguracji modemów.
Linia dzierżawiona nie jest podłączona do centrali telefonicznej, nie zapewnia więc napięcia stałego, sygnału wybierania lub zajętości, ani dzwonka. Znaczy to, że twoje modemy będą musiały same poradzić sobie z tą sytuacją.
Powinieneś mieć dwa identyczne zewnętrzne modemy obsługujące linię dzierżawioną i ,,głuchy'' tryb pracy. Upewnij się, że twoje modemy naprawdę to potrafią! Twój modem powinien posiadać też odpowiednią dokumentację. Potrzebne będą też:
Ogólna uwaga o konfiguracji modemu i liniach inicjalizujących:
Konfiguruj swoje oprogramowanie modemowe takie jak minicom lub (m)getty tak,
żeby używało najwyższej możliwej prędkości - 57600 bodów dla 14.400
i 115200 bodów dla 28.800 lub szybszych.
Wiele ludzi używa bardzo długich i skomplikowanych linii inicjalizujących,
często zaczynających się AT&F i zawierających mnóstwo komend specyficznych dla
danego modemu. Jest to niepotrzebne. Większość programów używa takich samych
ustawień modemu, a więc czemu nie zapisać tych ustawień do nieulotnej pamięci
modemu i używać ,,ATZ'' do inicjalizacji modemu we wszystkich programach?
W ten sposób można zamienić lub rozszerzyć modemy bez rekonfiguracji
oprogramowania.
Większość programów wymaga następujących ustawień:
Sprawdź te ustawienia za pomocą AT&V lub AT&I[numer] (przeczytaj dokumentację modemu).
Ustawienia te nie są identyczne do profilu firmowego (&F), a więc używanie linii inicjalizującej z AT&F nie jest dobrym pomysłem. Dobrą rzeczą jest użycie AT&F tylko wtedy, gdy masz powód żeby sądzić, że ustawienia zapisane w nieulotnej pamięci modemu są bardzo niepoprawne. Jeżeli sądzisz, że znalazłeś odpowiednie ustawienia dla twoich modemów, zapisz je w pamięci nieulotnej komendą AT&W i przetestuj dokładnie protokołem Z-Modem zarówno dla plików tekstowych ASCII, jak i binarnych. Konfiguruj twoje modemy do linii dzierżawionej tylko jeżeli masz pewność, że te ustawienia działają idealnie.
Dowiedz się, jak przestawić twój modem w ,,głuchy'' tryb, oraz, co ważniejsze, w tryb linii dzierżawionej - modem może być rekonfigurowany tylko wtedy, gdy nie znajduje się w ,,głuchym'' trybie. Upewnij się, czy napewno ustawiłeś modemy na największą możliwą prędkość. Kiedy modem wejdzie w ,,głuchy'' tryb pracy, będzie ignorował wszystkie komendy ,,AT'' - z tego powodu nie będzie można ustawić jego szybkości do tej ustawionej dla portu szeregowego; będzie używał prędkości skonfigurowanej komendami AT (prędkość ta jest zapisana w rejestrze S komendą AT&W).
Teraz skonfiguruj modemy w następujący sposób:
Zapisz konfigurację do nieulotnej pamięci (&W).
Podłącz modemy do dwóch komputerów używając przewodów RS232 i połącz ze sobą modemy za pomocą kabla RJ11. Użyj programu takiego jak Minicom (na Linuxa), procom albo telix (DOS) na obu komputerach, żeby sprawdzić modemy. Powinieneś zobaczyć tekst pisany na jednym komputerze w drugim terminalu i odwrotnie. Jeżli widzisz śmieci, sprawdź prędkość portu i inne ustawienia. Teraz odłącz i podłącz ponownie przewód RJ11. Poczekaj, aż połączenie ponownie się ustali. Odłącz i podłącz ponownie kable RS232, wyłącz i włącz modemy, uruchom ponownie minicoma. Modemy powinny zawsze połączyć się ponownie na najwyższej możliwej prędkości (niektóre modemy mają diody pokazujące prędkość). Sprawdź, czy modemy naprawdę ignorują znak ESC (+++). Jeżeli będzie to potrzebne, wyłącz znak ESC.
Jeżeli to wszystko działa, możesz rekonfigurować modemy: wyłącz dźwięk w zdalnym modemie (M0) i ustaw niski poziom głośności w modemie lokalnym (L1).
Lokalnie:
ATL1&C1&D3&L2%D1&W&W1Zdalnie:
ATM0&C1&D3&L2%D1S0=1&W&W1
Znak ESC powinien być wyłączony za pomocą komendy S2 > 127;
Lokalnie:
ATL1&L1Q1&C1&D3S2=171\D1&WZdalnie:
ATM0&L2Q1&C1&D3S0=1S2=171\D1&W
Poniższa sekcja jest oparta na informacjach dostarczonych przez
Rolf'a Raar'a.
USR Sportster i USR Courier-I nie obsługują linii dzierżawionych. Potrzebna
będzie wersja Courier V-everything. Na serwerze USR znajduje się strona
,,wyjaśniająca'' jak skonfigurować Courier'a do linii dzierżawionej. Jednakże
jeżeli będziesz postępował zgodnie z tymi wskazówkami, skończysz z modemem
kompletnie ,,pozbawionym rozumu'', który nie będzie mógł być kontrolowany
lub nadzorowany przez pppd.
USR Courier może być konfigurowany przez przełączniki DIP, jednakże najpierw
musisz podać mu linię inicjalizacyjną. Po pierwsze, upewnij się, że używa
prawidłowego profilu fabrycznego. Inaczej niż większość innych modemów ma
ich trzy: &F0, &F1, &F2. Standardowy, którego powinieneś używać,
to &F1. Uwaga: jeżeli wyślesz mu AT&F, załaduje &F0!
Dla resetowania przy DTR, ustaw bit 0 rejestru S13. Znaczy to, że musisz
ustawić S13 na 1. Następnie musisz przestawić go w tryb linii dzierżawionej
za pomocą &L1: ATS13=1&L1&W
Przełączniki dip powinny być w domyślnych ustawieniach, wyjątkiem są:
3 - WYŁ - Wyłączyć kody wynikowe.
4 - ZAŁ - Wyłączyć komendy offline
5 - ZAŁ dla lokalnego, WYŁ dla zdalnego
8 - WYŁ - ,,Głuchy'' tryb pracy
Potrzebny ci będzie pppd (Point to Point Protocol Daemon) i odpowiednia wiedza o jego działaniu. Przeczytaj odpowiednie RFC i Linux PPP HOWTO, jeżeli jest to potrzebne. Ponieważ nie będziesz używał procedury logowania, nie musisz używać (m)getty ani (fałszywego) użytkownika skojarzonego z pppd kontrolującym połączenie. Nie będziesz musiał wybierać numeru, nie będą więc potrzebne żadne skrypty chat. Obwód modemowy i konfiguracja, którą właśnie wykonałeś jest właściwie kablem null-modem. Znaczy to, że będziesz musiał skonfigurować pppd w sposób, w jaki konfigurowałbyś go do kabla null-modem.
Dla dobrego połączenia, twoje ustawienia powinny spełniać następujące wymogi:
Zakładam, że modem jest podłączony do COM2, lokalny adres IP to ,,Loc_IP'',
a zdalny to ,,Rem_Ip''. Chcemy użyć 576 jako nasze MTU.
/etc/ppp/options.ttyS1 powinno wyglądać tak:
crtscts
mru 576
mtu 576
passive
Loc_Ip:Rem_Ip
-chap
modem
-pap
persist
A więc, jeżeli system lokalny to 192.168.1.1, a system zdalny to 10.1.1.1,
/etc/ppp/options.ttyS1 powinien wyglądać następująco:
crtscts
mru 576
mtu 576
passive
192.168.1.1:10.1.1.1
-chap
modem
-pap
persist
options.ttyS1 na zdalnym systemie powinien wyglądać tak:
crtscts
mru 576
mtu 576
passive 10.1.1.1:192.168.1.1
-chap
modem
-pap
persist
Opcja passive limituje numer (ponownych) połączeń. Opcja persist będzie próbowała trzymać pppd uruchomionym w razie rozłączenia, lub jeżeli nie będzie mógł odrazu się połączyć. Jeżeli telnetujesz się dużo podczas transferu plików (FTP lub przeglądanie WWW), możesz użyć mniejszego MTU i MRU, takiego jak 296. System zdalny będzie wtedy czujniejszy. Jeżeli nie będziesz telnetował się podczas FTP, może ustawić MTU i MRU na 1500.
Skrypt /usr/local/sbin/PRem_Host.sh poniżej startuje pppd. Musisz
uruchomić go po skonfigurowaniu portów szeregowych (zamień Rem_Host
na nazwę zdalnego systemu).
#!/bin/bash
# Opcjonalnie sleep
#/usr/bin/sleep 30
( /usr/sbin/pppd /dev/ttyS1 115200 ) &
Może on być uruchamiany ze skryptu konfigurującego kartę sieciową
(/etc/init.d/network w systemie Debian), w tym przypadku musisz
odkomentować sleep, żeby być pewnym, że porty com zostały skonfigurowane jako
pierwsze. Jeżeli używasz setserial, możesz uruchomić go z tego skryptu.
Innym sposobem jest uruchomienie go z rc.local.
W systemach Debian istnieje katalog /etc/rc.boot/. Według
Rolf'a Raar'a, skrypty w tym
katalogu są uruchamiane w kolejności alfabetycznej. Skrypt setserial nazywa się
0setserial. Jeżeli wywołasz swój skrypt z pliku o nazwie 2linie-dzierżawione,
będzie wykonany po 0setserial.
Chociaż opcja persist czyni to powierzchownym, pppd może być też restartowany przez ip-down:
#! /bin/bash
case $s in
/dev/ttyS1)
/usr/bin/sleep 30
/usr/local/sbin/PRem_Host.sh &
;;
esac
Jeżeli pppd zginie, powinien być restartowany opcją w skrypcie ip-up (opcjonalnie). Jeżeli to się nie dzieje, skrypt /usr/local/sbin/test-Rem_Host-ppp robi to za ciebie. Ten skrypt sprawdza, czy zdalny interfejs istnieje - jeżeli nie, spróbuje uruchomić pppd:
#!/bin/bash
if ! ( /sbin/ifconfig | grep Rem_Ip > /dev/null )
then
# PPP nie żyje
logger "Rem_Host PPP nie żyje! ; uruchomiony ponownie"
/usr/local/sbin/PRem_Host.sh &
fi
Następująca linia w crontab uruchamia powyższy skrypt co 5 minut. Możesz uruchamiać skrypt częsciej, ale ja nie uruchamiałbym go częściej niż co dwie minuty.
*/5 * * * * /usr/local/sbin/test-Rem_Host-ppp
Możesz edytować crontab poleceniem ,,crontab -e''. Zrestartuje on crona po edycji. Używa edytora podanego w zmiennej środowiskowej ,,EDITOR'', która może być ustawiona przez /etc/profile lub /.profile (export EDITOR=Twoj_Ulubiony_Edytor).
Niektórzy ludzie uruchamiają pppd z /etc/inittab, ale ja nigdy tego nie testowałem.
Domyślny routing może zostać ustawiony opcją defaultroute, albo przez skrypt /etc/ppp/ip-up:
#! /bin/bash
case $2 in
/dev/ttyS1)
/sbin/route add -net 0.0.0.0 gw Rem_Ip netmask 0.0.0.0
;;
esac
Ip-up może być też używany do synchronizacji zegara używając netdate.
Oczywiście routing ustawiony w ip-up nie musi być domyślnym routingiem. Twoj skrypt ip-up ustawia routing do zdalnej sieci, kiedy ip-up w zdalnym systemie ustawia trasę do twojej sieci. Jeżeli jest nią 192.168.1.0, a interfejsem ppp jest 192.168.1.1, skrypt ip-up na zdalnej maszynie powinien wyglądać podobnie do tego:
#!/bin/bash
case $2 in
/dev/ttyS1)
/sbin/route add -net 192.168.1.0 gw 192.168.1.1 netmask 255.255.255.0
;;
esac
Bity ,,case $2'' i ,,/dev/ttyS1'' są tam na wypadek gdybyś używał więcej niż jednego połączenia ppp. Ip-up będzie uruchamiany za każdym razem kiedy pojawi się połączenie, ale tylko część pomiędzy ,,/dev/ttySx'' i ,,;;'' zostanie wykonana, ustawiając poprawny routing dla poprawnego ttyS. Możesz dowiedzieć się więcej o routingu z sekcji o routingu NET-3-HOWTO.
Przetestuj to wszystko tak jak modemy. Jeżeli działa, wsiądź na rower i przewieź modem na drugą stronę połączenia.
Jeżeli znajdziesz jakieś błędy, daj mi znać. doc-linux-pl-2002.06.14.orig/mini/html/Linux+DOS+Win95.pl.html 0100664 0001750 0001750 00000011132 07104371340 022215 0 ustar coven coven
W95 i DOS nie działają poprawnie jeżeli więcej niż jedna partycja jest ustawiona jako "aktywna", jest więc konieczne aby program startujący aktywował ich partycję, przed startem systemu, oraz dezaktywował pozostałe partycje. W95 i DOS z jakiegoś powodu zmieniajś nazwy partycji, na urządzeniu z którego zostały wystartowane tak, że system zawsze jest na dysku C. Na przykład : jeżeli zainstaluje się DOS na partycji E głównego dysku, to po wystartowaniu go będzie się zdawało, że jest na dysku C.
Użyj fdisk-u w Linux-e lub programu Partition
Magic, by założyć trzy partycje na dysku. Zainstaluj W95
na jednej, DOS na drugiej, używając (na przykład) polecenia
format /s c: , a Linux-a na trzeciej.
Jeżeli na początku masz tylko jedną partycję (DOS-u) na dysku,
to Partition Magic bez problemu podzieli ją na trzy.
FIPS zrobi to również i to za darmo, lecz jest nieco
trudniejszy w obsłudze.
Zdobądź plik lilo.17.tar.gz, który, do Sierpnia 1996, był jedyną wersją potrafiącą zmieniać flagę aktywnej partycji przed wystartowaniem systemu. Kopia tego pliku jest dostępna pod adresem : ftp://ftp.ezlink.com/pub/lilo.17.tar.gz. Skompiluj i zainstaluj program ze zdefiniowaną opcją REWRITE_TABLE w pliku Makefile.
Wpisz do pliku /etc/lilo.conf kod podobny do tego poniżej
i uruchom /sbin/lilo, aby uaktualnić MBR
(MasterBootRecord) dysku.
boot = /dev/sda
compact
delay = 5 # opcjonalne, dla systemów startujących bardzo szybko
vga = normal # wymuszenie rozsądnego stanu
ramdisk = 0 # paranoiczna opcja
root = current # użyj aktualnego głównego systemu plików
image = /vmlinuz.1.3.97
append = "aha1542=0x230 ro"
label = linux
other = /dev/sda1
table = /dev/sda
rewrite-table
label = dos
other = /dev/sda2
table = /dev/sda
rewrite-table
label = w95
Od chwili gdy powstał oryginalny dokument upłynęło dużo czasu.
Bardziej aktualne informacje mogą być w pokrewnych mini-HOWTO
z cyklu Linux+*.
Polecam również podręcznik systemowy "man" : lilo(8) i
lilo.conf(5) oraz doskonały podręcznik znajdujący się w
dystrybucji lilo.
Jeżeli zainstalowałeś lilo z dystrybucji Linux'a, to Manual ten
powinieneś prawdopodobnie znaleźć w katalogu /usr/doc/lilo*.
Aktualna, na Grudzień 1997, wersja lilo to
lilo-20, dostępna w Polsce np. pod adresem :
ftp://ftp.icm.edu.pl/pub/Linux/sunsite.unc.edu/system/boot/lilo
Tłumaczenie to jest chronione prawami autorskimi © Grzegorza Nalepy. Dozwolone jest rozprowadzanie i dystrybucja na prawach takich samych jak dokument oryginalny.
Jeżeli znalazłeś jakiekolwiek błędy ortograficzne, gramatyczne lub inne językowe, to są one wyłącznie moją zasługą. Napisz do mnie nalepa@ibm.uci.agh.edu.pl pełen krytyki list , a postaram się je jak najszybciej usunąć. Tłumaczenia mojego autorstwa znajdziesz na mojej stronie WWW: http://ibm.uci.agh.edu.pl/~nalepa
Projekt JTZ, czyli polskie tłumaczenia dokumentów HOWTO ma oficjalną stronę WWW : http://www.jtz.org.pl. Tam znajdziesz wszystkie przetłumaczone dokumenty, oraz informacje o samym Projekcie.
doc-linux-pl-2002.06.14.orig/mini/html/Linux+NT-Loader.pl.html 0100664 0001750 0001750 00000022017 07104371340 022412 0 ustar coven coven
NT OS loader chciałby mieć sektor startowy z innego dostępnego systemu operacyjnego w pliku. Czyta ten plik i startuje wybrany system operacyjny, n.p. albo Windows NT w innym trybie inny dowolny system operacyjny.
Spróbój najpierw zainstalowć Windows NT. Jeżeli chcesz używać NTFS dla twojej własnej partycji Windows NT, pamiętaj, że dzisiejsza wersja Linux-a nie umożliwia dostępu do partcji NTFS. Sterownik w wersji alfa mogący czytać partycje NTFS jest dostępny w http://www.informatik.hu-berlin.de/~loewis/ntfs. Możesz utworzyć oddzielną parycję FAT do wymiany danych lub będziesz musiał używać dyskietek w formacie DOS.
Inny dokument mini-HOWTO nie poleca używania "Disk Administrator-a" systemu NT do stworzenia partycji wymiany i partycji głównej systemu plików Linux-a. Wystarczy pozostawić na dysku wolne miejsce. Polecam użycie później Linux-owego fdisk-a.
Teraz wystartuj system linux z dyskietek, utwórz partycję wymiany i główną partycję systemu plików. Fdisk pokaże partycję NTFS jako partcję HPFS. Jest to normalne. Ponownie wystartuj system z dyskietek i zainstaluj Linux-a tak jak chcesz.
Tylko w przypadku gdy procedura instalacyjna zaproponuje, że możesz zamontować partycję HPFS, którą znalazła: Zignoruj to.
Kiedy dojdziesz do sekcji Lilo, wskaż twoją główną partycję systemu plików
Linux-a jako urządzenie startowe ponieważ
Master Boot Record (MBR) twojego dysku jest w posiadaniu Windows NT.
To znaczy, że pozycja root i pozycja boot w twoim /etc/lilo.conf
powinny mieć takie same wartości. Jeżeli posiadasz dysk IDE i twoją
partycją Linux-ową jest druga partcja, twoja pozycja boot w pliku
/etc/lilo.conf wygląda następująco:
boot=/dev/hda2
Jeżeli posiadasz dwa dyski i twój Linux znajduje się na pierwszej
partycji twojego drugiego dysku, twoja pozycja boot w pliku
/etc/lilo.conf wygląda następująco:
boot=/dev/hdb1
Uruchom lilo z jądrem, które pasuje do twojego systemu. Sprawdź jądro startując je najpierw z dyskietki jeżeli nie jesteś pewien.
Jeżeli nie możesz teraz załadowwać Windows NT, to masz problem. Mam nadzieję, że stworzyłeś ostatnio dyskietkę retunkową.
Istnieje program NT nazwany bootpart napisany przez G. Vollant-a, który może wykonać robotę z dwóch następnych punktów za ciebie. Bootpart jest dostępny z: http://ourworld.compuserve.com/homepages/gvollant/bootpart.htm.
Jeżeli chcesz wiedzieć jak wszystko wspólpracuje razem, użyj procedury opisnaej w punktach 4 i 5.
Musisz startować system z dyskietek aż NT nie będzie przygotowane.
Teraz musisz zrzucić sektor startowy z twojej głównej partycji systemu plików
Linux-a. Jeżeli /dev/hda2 jest twoją partycją linux-a, komenda dd jest
następująca:
# dd if=/dev/hda2 of=/bootsect.lnx bs=512 count=1
Jeżeli bootsect.lnx ma więcej niż 512 bajtów wystąpił jakiś błąd.
Teraz skopiuj bootsect.lnx na dyskietkę w formacie DOS jeżeli jest to twój spsób do przenoszenia plików na partcję NTFS.
Możesz to skopiować tak:
# mcopy /bootsect.lnx a:
lub inaczej:
# mount -t msdos /dev/fd0 /mnt
# copy /bootsect.lnx /mnt
# umount /mnt
Skopiuj plik z dyskietki do c:\bootsect.lnx. Nie powiem ci
jak to zrobić.
Czym dla linux-a jest lilo.conf tym c:\boot.ini jest
dla Windows NT. Usuń atrybuty systemowy i tylko_do _odczytu zanim będziesz
mógł modyfikować go:
C:\attrib -s -r c:\boot.ini
Teraz dowolnym edytorem, np. notepad-em, zmień następująco boot.ini:
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINNT
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation ...
multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation ...
C:\BOOTSECT.LNX="Linux"
W tym przykładzie została dodana tylko ostatnia linia. Po zapisaniu boot.ini odtwórz otrybuty:
C:\attrib +s +r c:\boot.ini
Po zamknięciu Windows NT i ponownym starcie powinieneś ujrzeć:
OS Loader V4.00
Please select the operating system to start:
Windows NT Workstation Version 4.0
Windows NT Workstation Version 4.0 [VGA mode]
Linux
Wybierz Linux i zobacz:
LILO loading zImage ....
Nowa kopia bootsect.lnx musi być przeniesiona do
c:\bootsect.lnx za każdym razem gdy sektor startowy
twojej partycji linux-a będzie modyfikowany. Będzie to miało na
przykład miejsce gdy będziesz używał lilo do zainstalowania nowego
jędra. Jak możesz zauważyć taki sposób nie jest idealny do
testowania doświadczalnych wersji jądra.
Jeżeli cokolwiek pracuje nie tak jak oczekiwano, sprawdz możliwość
startowania systemu z dyskietki. Jeżeli twoją partycją Linux-a jest
/dev/hdb1, twój /etc/lilo.conf będzie miał następujące
pozycje:
root=/dev/hdb1
boot=/dev/fd0
Uruchom lilo z włożoną dyskietką. Teraz spróbój wystartować
system z dyskietki. Jeżli twój linux z /dev/hdb1 nie może
wystartować, NT OS loader również nie zdoła go uruchomić.
Jeżeli zobaczycz wiele 01 01 01 01, znaczy to, że twój dysk główny
jest niedostępny. Sprawdź czy wszystkie twoje dyski są
rozpoznawane przez bios.
Jeżeli możesz wystartować twoją partycję Linuxa z dysietki, możesz zrzucić twój sektor startowy dla NT OS loader-a:
# dd if=/dev/fd0 of=/bootsect.lnx bs=512 count=1
Możesz zatrzymać tą dyskietkę jako dyskietkę ratunkową na wypadek gdyby twoja instalacja Windows NT została przerwana.
z3c20@ttacs.ttu.edu
za wskazówkę, powodującą, że procedura działa również
dla dysków innych niż pierwszy.
Frank.Dennler@zkb.ch
za sztuczkę z dyskietką.
Jakiekolwiek komentarze będą mile widziane.
Tłumaczenie to jest chronione prawami autorskimi © Michała Malarskiego. 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:
malarz@it.pw.edu.pl
Napewno znajdziesz tu jakieś niejasne i niepolskie konstrukcje. Jeśli wpadniesz na lepszy pomysł daj mi znać.
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://ftp.ippt.gov.pl/pub/Linux/JTZ.
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
subscribe jtz Imię Nazwisko na adres:
listproc@ippt.gov.pl.
doc-linux-pl-2002.06.14.orig/mini/html/Locale.pl.html 0100664 0001750 0001750 00000051774 07104371340 021005 0 ustar coven coven
To jest naprawdę opis tego co musiałem zrobić, żeby działał u mnie pakiet "Locales". Zrobiłem to tylko dla zabawy, i pomyślałem, że może niektórzy chcą sami spróbować. Jak już raz wszystko poustawiasz, powinieneś móc używać aplikacji korzystających z NLS, wraz z twoimi lokalnymi ustawieniami. Już niedługo pakiet "Locales" powinien być częścią standardowych dystrybucji i większość z tego co tu napisałem będzie niepotrzebne.
Jest to pakiet, który zawiera ustawienia specyficzne dla twojego kraju. (zapis daty, czasu, specjalne litery itp.) Ustawień tych nie powineneś zapisywać na stałe w swoich programach.
Jeśli masz na swoim komputerze zainstalowane ustawienia lokalne dla różnych krajów/języków, to poprzez następujące zmienne możesz kontrolować zachowanie programów korzystających z nich. Ustawieniem domyślnym jest ustawienie wg. standardu C lub POSIX zapisane na stałe w "libc".
-- ustawia jakiego języka używamy; może być zmienione przez zmienną LC_xxxx,
-- ustawia porządek sortowania,
-- definicje znaków, duże i małe litery... używane jest to przez takie funkcje jak: toupper, tolower, islower, isdigit itp.
-- definicja formatu liczb związanych z pieniędzmi. Są tu definicje separatora tysięcy, separatora ułamkowego, symbolu pieniądza (zł) i miejsce, gdzie należy go umieścić,
-- separatory tysięcy i ułamkowe oraz grupowanie numeryczne,
-- definicja formatu czasowego i datowego. Są tu zdefiniowane np. dni tygodnia, miesiące,
-- wyrażenia Nie i Tak,
-- ustawia jakiego języka używamy i zmienia wszystkie inne zmienne LC_xxxx.
Oto niektóre ustawienia, a jest ich znacznie więcej:
-- kanadyjski angielski,
-- amerykański angielski,
-- niemiecki niemiecki,
-- francuski francuski.
Jeśli piszesz program i chcesz, aby można go było używać na całym świecie respektuj ustawienia lokalne. Najważniejszym powodem jest to, że nie każdy będzie używał tego samego zestawu znaków czy strony kodowej co ty.
Upewnij się, że nie robisz czegoś takiego w swoich programach:
/* sprawdź czy to litera */
if ( (( c >= 'a') && ( c <= 'z' )) ||
(( c >= 'A') && ( c <= 'Z' )) ) { ... }
Jeśli napiszesz coś takiego, to zakładasz, że użytkownik będzie
używał tylko podstawowych znaków z kodu ASCII i nie bierzesz pod
uwagę, iż może używać strony kodowej specyficznej dla swojego
kraju. Pomija to takie znaki jak np. a-umlaut, które zostałoby
użyte w środowisku niemieckim. Zamiast tego powinieneś raczej
używać funkcji, które respektują lokalne ustawienia, jak np.
isalpha(). Jeśli twój program wyraźnie wymaga tylko podstawowych
znaków ASCII (US-ASCII), dalej używasz funkcji isalpha(), ale
musisz także ustawić zmienną LANG albo LC_CTYPE albo LC_ALL na "C"
lub użyć funkcji setlocale(LC_CTYPE, "C").
Ustawienia lokalne pozwalają na dużą elastyczność i robią pewne założenia, o których programista mógł zapomnieć.
Na przykład nie możesz z góry założyć pozycji danego znaku na stronie kodowej. Nic nie stoi na przeszkodzie, żebyś np. stworzył sobie stronę kodową, na której "A" byłoby na pozycji 99 a nie 65.
Podstawową ideą jest to, że różni ludzie mówią różnymi językami, przetsrzegają różnych reguł sortowania, używają różnych stron kodowych i mieszkają w różnych krajach. Ustawienia lokalne i funkcje, które ich przstrzegają dają środki na respektowanie takich rzeczy i odpowiedniego ich traktowanie. Nie wymaga to dużego nakładu pracy, tylko trochę innego sposobu myślenia podczas pisania takich programów.
/pub/nls/locale.
znajdują się wszystkie potrzebne programy. Nie wiedziałem,
że jest osobny pakiet "Locales" i jakoś się domyśliłem, że trzeba
mieć zainstalowane odpowiednie biblioteki libc i lib.so. Z tego
powodu to HOWTO jest w większości zapisem tego co ja musiałem
zrobić, żeby odnowić biblioteki. Jeśli zrobisz to w taki sposób
jak ja, będziesz musiał mieć system ELF, albo zmienić swój na taki,
jak już ustawisz swoje lokalne definicje.
ELF-HOWTO. Jest to
wspaniały podręcznik, w którym znajdziesz dodatkowe wskazówki
dotyczące instalacji bibliotek libc, ld.so i innych odnowień do
ELF-a.
Kilka rzeczy musisz sobie ściagnąć. Wszystko czego potrzebujesz znajdziesz na ftp.icm.edu.pl Kiedy ja instalowałem u siebie ustawienia lokalne używałem libc-5.2.18, która jest teraz troche przestarzała. Jak na razie powiedziano mi, że bieżącą wersją jest 5.4.17 i taką też umieszczam w opisie. Przypuszczalnie libc-5.4.17 będzie przestarzała zanim zdążysz mrugnąć więc po prostu użyj najnowszej dostępnej wersji.
Rozważ użycie glibc (gnu libc) zamiast Linux libc 5 w pracach unaradawiających (internalizacyjnych). Glibc jest w pełni unarodowiona i ma pełne wsparcie dla programowania narodowego tak samo jak jest w pełni przenaszalna FIXME i ma wbudowaną obsługę wątków. Prawie cała internalizacja zrobiona w libc 5 wzięta zostałą z glibc. Lokalizacje i mapy klawiszy dla glibc są powiązane z dodatkami o lokalizacjami glibc.
Jeśli jesteś za używaniem glibc, to możesz pominąć to mini-howto.
Dołączanie dodatków lokalizacyjnych do kompilacji i instalacji glibc
jest trywialne i opisane jest w dokumentacji do instalacji glibc.
ednak ostrzegam, że pełna aktualizacja nie jest trywialnym
zadaniem! Mam nadzieję, że RedHat (którego używam) wypuści
niedługo dystrybucję opartą na glibc, bo jakoś nie uśmiecha mi się
rekompilacja całego mojego systemu.
Wszystkie poniższe pakiety możesz znaleźć pod adresem ftp.icm.edu.pl
w katalogu /pub/Linux/sunsite/GCC oprócz "make" -
/pub/Linux/sunsite/devel/make oraz jądra - /pub/Linux/kernel/
ustawienia lokalne i źródła zestawów znaków -- to jest to, co
kompilujesz, używając localedef,
dirent bug,
Oto co zrobiłem, aby wszystko zainstalować. Miałem już system ELF (kompilator, jądro ...).
tar xzf binutils-2.6.0.2.bin.tar.gz -C /
tar zxf ld.so-1.7.12.tar.gz -C /usr/src cd /usr/src/ld.so-1.7.12 sh instldso.sh
release.libc-5.4.17.
rm -f /usr/lib/libc.so /usr/lib/libm.so rm -f /usr/include/iolibio.h /usr/include/iostdio.h rm -f /usr/include/ld_so_config.h /usr/include/localeinfo.h rm -rf /usr/include/netinet /usr/include/net /usr/include/pthread tar -xzf libc-5.4.17.bin.tar.gz -C /
ldconfig, żeby zlokalizować
nowe biblioteki dzielone:
ldconfig -v.
tar zxf make-3.74.tar.gz -C /usr/src cd /usr/src/make-3.74 patch < ścieżka_do_release.libc-5.4.17 configure --prefix=/usr sh build.sh ./make install cd .. rm -rf make-2.74
mkdir /usr/src/libc tar zxf libc-5.4.17.tar.gz -C /usr/src/libc cd /usr/src/libc cd include ln -s /usr/src/linux/include/asm . ln -s /usr/src/linux/include/linux . cd ../libc ./configure make clean ; make depend cd locale make programs mv localedef /usr/local/bin mv locale /usr/local/bin
localedef.
Ja użyłem zestawów znaków i locales z ftp.dkuug.dk
(charmaps.tar i locales.tar).
W Polsce dostępne są pod adresem:
ftp.arch.pwr.wroc.pl w katalogu /mirror/linux/nls/locale/dkuug.
Starsze "localedef" (5.2.18) szukało źródeł zestawów znaków w
katalogu /usr/share/nls/charmap, ale teraz "localedef"
szuka ich w katalogu /usr/share/i18n/charmaps oraz
źródeł definicji lokalnych w /usr/share/i18n/locales
mkdir /usr/share/i18n mkdir /usr/share/i18n/charmaps mkdir /usr/share/i18n/locales tar xf charmaps.tar -C /usr/share/i18n/charmaps tar xf locales.tar -C /usr/share/i18n/locales
Nowsze "localedef" (5.4.17) są sprytniejsze i szukają zbiorów źródłowych definicji lokalnych podczas obsługi funkcji "copy". Podczas, gdy starsze "localedef" musiały mieć już utworzone pliki źródłowe definicji lokalnych, aby obsłużyć funkcję "copy". Poniższa lista poleceń ma wysortowane zależności i może być użyta, aby wygenerować wszystkie objekty lokalne w zaleźności od używanej wersji biblioteki libc, ale powinieneś móc teraz utworzyć tylko te, które chcesz.
localedef -ci en_DK -f ISO_8859-1:1987 en_DK localedef -ci sv_SE -f ISO_8859-1:1987 sv_SE localedef -ci fi_FI -f ISO_8859-1:1987 fi_FI localedef -ci sv_FI -f ISO_8859-1:1987 sv_FI localedef -ci ro_RO -f ISO_8859-1:1987 ro_RO localedef -ci pt_PT -f ISO_8859-1:1987 pt_PT localedef -ci no_NO -f ISO_8859-1:1987 no_NO localedef -ci nl_NL -f ISO_8859-1:1987 nl_NL localedef -ci fr_BE -f ISO_8859-1:1987 fr_BE localedef -ci nl_BE -f ISO_8859-1:1987 nl_BE localedef -ci da_DK -f ISO_8859-1:1987 da_DK localedef -ci kl_GL -f ISO_8859-1:1987 kl_GL localedef -ci it_IT -f ISO_8859-1:1987 it_IT localedef -ci is_IS -f ISO_8859-1:1987 is_IS localedef -ci fr_LU -f ISO_8859-1:1987 fr_LU localedef -ci fr_FR -f ISO_8859-1:1987 fr_FR localedef -ci de_DE -f ISO_8859-1:1987 de_DE localedef -ci de_CH -f ISO_8859-1:1987 de_CH localedef -ci fr_CH -f ISO_8859-1:1987 fr_CH localedef -ci en_CA -f ISO_8859-1:1987 en_CA localedef -ci fr_CA -f ISO_8859-1:1987 fr_CA localedef -ci fo_FO -f ISO_8859-1:1987 fo_FO localedef -ci et_EE -f ISO_8859-1:1987 et_EE localedef -ci es_ES -f ISO_8859-1:1987 es_ES localedef -ci en_US -f ISO_8859-1:1987 en_US localedef -ci en_GB -f ISO_8859-1:1987 en_GB localedef -ci en_IE -f ISO_8859-1:1987 en_IE localedef -ci de_LU -f ISO_8859-1:1987 de_LU localedef -ci de_BE -f ISO_8859-1:1987 de_BE localedef -ci de_AT -f ISO_8859-1:1987 de_AT localedef -ci sl_SI -f ISO_8859-2:1987 sl_SI localedef -ci ru_RU -f ISO_8859-5:1988 ru_RU localedef -ci pl_PL -f ISO_8859-2:1987 pl_PL localedef -ci lv_LV -f BALTIC lv_LV localedef -ci lt_LT -f BALTIC lt_LT localedef -ci iw_IL -f ISO_8859-8:1988 iw_IL localedef -ci hu_HU -f ISO_8859-2:1987 hu_HU localedef -ci hr_HR -f ISO_8859-4:1988 hr_HR localedef -ci gr_GR -f ISO_8859-7:1987 gr_GR
Po przejściu omówionych powyżej kroków powinieneś móc używać ustawień lokalnych na swoim komputerze. Oto prosty przykładowy program.
/* test.c : prosty przykładowy program do sprawdzenia czy
ustawienia lokalne działają
*/
#include <locale.h>
#include <stdio.h>
#include <time.h>
main(){
time_t t;
struct tm * _t;
char buf[256];
time(&t);
_t = gmtime(&t);
setlocale(LC_TIME,"");
strftime(buf,256,"%c",_t);
printf("%s\n",buf);
}
Żeby sprawdzić jakie są bieżące ustawienia możesz użyć programu
"locale".
Skompiluj powyższy program i uruchom z różnymi ustawieniami.
gcc -s -o Test test.c
Zobacz jakie są bieżące ustawienia:
locale
LANG=POSIX LC_COLLATE="POSIX" LC_CTYPE="POSIX" LC_MONETARY="POSIX" LC_NUMERIC="POSIX" LC_TIME="POSIX" LC_MESSAGES="POSIX" LC_ALL= Hmmm... ustawienia standardowe C... No to zmieńmy na inne: export LC_TIME=en_CA -- kanadyjski angielski Test Sat 23 Mar 1996 07:51:49 PM A teraz francuski kanadyjski: export LC_TIME=fr_CA Test sam 23 mar 1996 19:55:27
Instalacja obsługi ustawień lokalnych naprawia automatycznie błąd
(a może zaletę) w poleceniu "catopen" w bibliotece libc.
Powiedzmy, że napiszesz program, który używa komunikatów z
katalogu /home/peeter/catalogs/de_DE.
Teraz - jeśli wykonasz następujące polecenia nie mając zainstalowanych ustawień lokalnych dla de_DE,
export LC_MESSAGES=de_DE export NLSPATH=/home/peeter/catalogs/%L/%N.cat:$NLSPATH
katalog z niemieckimi komunikatami nie zostanie otwarty. Funkcja catgets pobierze komunikaty z katalogu standardowego.
Dzieje się tak ponieważ funkcja "catopen" wywołuje funkcję "setlocale", żeby pobrać odpowiednie komunikaty, a funkcja "setlocale" zwróci błąd pomimo tego, że została ustawiona zmienna środowiskowa. Następnie funkcja "catopen" próbuje załadować komunikaty zastępując wszystkie "L" literą "C" w zmiennej NLSPATH.
Możesz nadal używać swojego katalogu z komunikatami bez definiowania ustawień lokalnych, ale musiałbyś bezpośrednio ustawić część "L" zmiennej NLSPATH:
export NLSPATH=/home/peeter/catalogs/de_DE/%N.cat:$NLSPATH
ale to mija się z celem zastosowania zmiennych ustawień lokalnych.
Sekcja ta mogłaby urosnąć i zmienić się w FAQ, ale jest jeszcze za mała.
Używam Linux-a i napisałem taki program:
--------------------------------------------------------------------
#include <stdio.h>
#include <locale.h>
#include <features.h>
#include <nl_types.h>
main(int argc, char ** argv)
{
nl_catd catd;
setlocale(LC_MESSAGES, "");
catd = catopen("msg", MCLoadBySet);
fprintf(stderr,catgets(catd, 1, 1, "otwarcie komunikatów lokalnych nie powiodło się\n"));
catclose(catd);
}
--------------------------------------------------------------------
$ msg.m
$set 1
1 locale message pass\n
--------------------------------------------------------------------
Jeśli użyję bezwzględnej ścieżki dostępu w "catopen", np.:
catopen("/etc/locale/msg.cat", MCLoadBySet);
To jest dobrze. Ale jeśli używam poprzedniego przykładu "catopen" zwraca mi -1 (czyli, że się nie powiodło)
Częściowa odpowiedź na to pytanie jest w poprzedniej sekcji, ale podam jeszcze trochę dodatkowych informacji.
Jest wiele "odpowiednich miejsc", gdzie możesz umieścić katalog z komunikatami. Nawet gdybyś nie ustawił zmiennej środowiskowej NLSPATH, to jest ona następująco zdefiniowana w libc:
$ strings /lib/libc.so.5.4.17 | grep locale | grep %L /etc/locale/%L/%N.cat:/usr/lib/locale/%L/%N.cat:/usr /lib/locale/%N/%L:/usr/share/locale/%L/%N.cat:/usr/ local/share/locale/%L/%N.cat
Więc jeśli zrobiłeś jedno z poniższych:
$ export LC_MESSAGES=en_CA $ export LC_ALL=en_CA $ export LANG=en_CA
to funkcja catopen("msg", MCLoadBySet); działałaby, gdyby
twój katalog z komunikatami był jednym z:
/etc/locale/en_CA/ /usr/lib/locale/en_CA/ /usr/lib/locale/msg/ /usr/share/locale/en_CA/ /usr/local/share/locale/en_CA/
Jednak to nie zadziała jeśli nie masz zainstalowanych ustawień lokalnych dla en_CA, ponieważ funkcja "setlocale" nie powiedzie się i w wywołaniu funkcji "catopen" w miejsce "L" zostanie podstawiona litera "C".
To tyle. Mam nadzieję, że ten "podręcznik" pomógł ci chociaż trochę. Jest zapewne dużo miejsc, gdzie możesz szukać dodatkowych informacji na temat pisania programów zgodnych z ustawieniami lokalnymi. Założę się, że jeśli poszukasz trochę po sieci (WWW), to znajdziesz dużo informacji. Ulrich Drepper, który zaimplementował większość kodu umiędzynarodowiającego, ma troche informacji na swojej stronie WWW; możesz tam zacząć. Jest także trochę informacji na stronach informacyjnych i w podręczniku systemowym "man" o libc.
Jeśli znalazłeś jakieś rażące błędy ortograficzne, gramatyczne, składniowe, techniczne to pisz do mnie:
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/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 sie na nią zapisać, to
wyślij list o treści subscribe jtz Imię Nazwisko na adres
majordomo@ippt.gov.pl
Zmiany wprowadzone przeze mnie do tego dokumentu to polskie odnośniki
do serwerów ftp i WWW.
W wersji v1.31 została poprawiona nazwa pliku testowego z "test" na
"Test", co jak zauważył jeden z czytelników ma podstawowe znaczenie
ponieważ program "test" już istnieje w systemie.
doc-linux-pl-2002.06.14.orig/mini/html/NFS-Root-Client.pl.html 0100664 0001750 0001750 00000045744 07104371340 022371 0 ustar coven coven
Prawa autorskie należą do Ofera Maora < ofer@hadar.co.il>.
O ile nie stwierdza się inaczej, dokumenty HOWTO są chronione prawami autorskimi ich autorów. Mogą one być rozprowadzane w całości lub w części, w jakiejkolwiek postaci fizycznej czy elektronicznej tak długo, dopóki znajduje się w nich ta wzmianka. Dystrybucja komercyjna jest dozwolona, a nawet zachęca się do niej; chociaż autor chciałby być poinformowany o takowej.
Wszelkie tłumaczenia, prace pochodne, prace zebrane zawierające dokumenty HOWTO muszą zawierać tę notatkę o prawach autorskich. Oznacza to, że nie możesz stworzyć pracy pochodzącej z HOWTO i nałożyć na jej dystrybucję dodatkowych ograniczeń. Wyjątki od tej zasady mogą być uczynione pod pewnymi warunkami; skontaktuj się z koordynatorem programu Linux HOWTO pod niżej podanym adresem.
Krótko mówiąc, chcemy promować szerzenie tych dokumentów przez wszelkie dostępne kanały. Chcielibyśmy także utrzymać prawa autorskie nałożone na te dokumenty, i być powiadomieni o planach dotyczących redystrybucji HOWTO.
Jeśli masz jakieś pytania, skontaktuj się z Oferem Maorem pod adresem <ofer@hadar.co.il> - autorem tego dokumentu, albo Gregiem Hankinsem - koordynatorem projektu Linux HOWTO pod adresem <gregh@sunsite.unc.edu>.
Jeśli masz coś do dodania, skontaktuj się proszę z autorem ( Ofer Maor <ofer@hadar.co.il>). Szczególnie mile widziane są informacje o pojawieniu się nowszych narzędzi.
Chciałbym wyrazić podziękowania autorowi NFS-Root Howto, Andreasowi Kostyrce (htmlurl url="mailto:andreas@medman.ag.or.at" name="andreas@medman.ag.or.at"). Jego dokument pomógł mi w pierwszych krokach przy tworzeniu stacji bezdyskowych. Moje mini-howto nie próbuje w żaden sposób zamienić jego pracy, ale rozszerzyć ją posługując się moimi doświadczeniami.
Chciałbym także podziękować Markowi Kushinsky (htmlurl url="mailto:mark026@ibm.net" name="mark026@ibm.net") za "wypolerowanie" stylu i sprawdzenie poprawności językowej tego Howto, co znacznie poprawiło jego czytelność.
Dokument ten został napisany, aby pomagać ludziom, którzy chcą używać montowania głównego systemu plików z sieci, żeby stworzyć katalogi klienta. Zauważ, że jest wiele sposobów na zrobienie tego, zależnie od twoich potrzeb i intencji. Jeśli klienci są indywidualni a każdy z nich ma własnych użytkowników i administratora konieczne będzie, aby znaczące katalogi klienta nie były współdzielone z innymi klientami. Z drugiej strony, jeśli klient jest przeznaczony dla wielu użytkowników i wszystkie są administrowane przez tę samą osobę (na przykład, klasa komputerowa), tyle plików ile się tylko da musi być wspołdzielone, aby uczynić zarządzanie prostszym. Dokument ten skupi się na tym drugim zagadnieniu.
Podczas tworzenia katalogu głównego dla klienta oraz prób limitowania do minimum rozmiaru tego katalogu, głównie skupiamy się na tym, które pliki możemy współdzielić albo montować z serwera. W tym Howto będę zalecał konfigurację klienta na podstawie moich doświadczeń. Ale zanim zaczniemy zapamiętaj:
Przede wszystkim musisz stworzyć strukturę katalogów. Ja stworzyłem
wszystkie katalogi w /clients/hostname i będę używał tego
katalogu do przykładów. Chociaż jeśli chcesz, to możesz sobie
zmienić ten katalog na inny. Pierwszym krokiem jest zrobienie
odpowiednich katalogów. Powinny to być następujące:
bin, dev, etc, home, lib, mnt, proc, sbin, server, tmp, usr, var
i wszelkie inne katalogi jakie chcesz mieć na stacji.
Katalogi local, proc i dev będą użyte oddzielnie dla każdej stacji, a reszta będzie współdzielona.
Właściwie katalog dev może być współdzielony, ale lepiej jeśli nie jest. Zawartość tego katalogu możesz stworzyć odpowiednim skryptem, chcociaż prościej jest go po prostu skopiować z serwera:
cp -a /dev /clients/hostname
Musisz pamiętać, że /dev/mouse, /dev/cdrom i /dev/modem są
symbolicznymi dowiązaniami to właściwych urządzeń, i dlatego
powinieneś się upewnić, że wskazują one na poprawne urządzenia
zgodnie ze sprzętem w stacji.
Pomimo, iż montujemy wszystko z serwera jest pewna minimalna ilość
plików, które musimy skopiować do każdego klienta. Przede wszystkim
potrzebujemy init-a, nasz system nie będzie w stanie uruchomić
czegokolwiek przed uruchomieniem init-a (czego autor
doświadczył na własnej skórze ;) ). Tak więc najpierw skopiuj
/sbin/init do katalogu sbin klienta, potem skopiuj
/bin/sh do katalogu bin klienta, żeby skrypt rc.S
mógł się wykonać. Żeby wszystko zamontować potrzebujesz także
programu mount - skopiuj go do katalogu sbin klienta. To
jest zupełne minimum zakładając, że pierwszą linijką w rc.S
jest
mount -av
Zalecam jednak skopiowanie jeszcze kilku plików: update, ls, rm, cp oraz umount, tak żebyś miał podstawowe narzędzia w razie gdyby klientowi nie powiodło się montowanie. Jeśli zostawisz linię właczającą swap przed linią montującą katalogi, to musisz także skopiować program swapon.
Ponieważ większość z tych programów jest dynamicznie łączona z
bibliotekami, będziesz też potrzebował sporej części katalogu /lib:
cp -a /lib/ld.* /lib/libc.* /lib/libcursses.* /client/hostname/lib
Rozważ też możliowość stałego dowiązania zamiast kopiowania. Przeczytaj mój komentarz na ten temat w sekcji Przegląd ogólny.
Zauważ, że powyższe informacje zakładają, że parametry sieciowe zostały przekazane do jądra podczas startu. Jeśli masz zamiar użyć RARP lub BOOTP, będziesz także potrzebował odpowiednich binariów.
Ogólnie potrzebujesz minimum te programy, które pozwolą ci skonfigurować sieć i uruchomić skrypt rc.S do momentu zamontowania wszystkich katalogów z serwera.
W większości przypadków katalog var powinien być osobny dla każdego klienta. Chociaż wiele danych może być współdzielonych. Stwórz w katalogu głównym stacji katalog var. Zamontujemy tam katalog var z serwera. Aby stworzyć katalog var napisz:
cp -a /var /clients/hostname/
Teraz możesz wybrać co chcesz współdzielić, a co chcesz mieć osobne
dla każdego klienta. Każdy plik/katalog, który chcesz współdzielić
usuń i stwórz symboliczne dołączenie do /serwer/var. Zauważ,
że musisz dołączyć go albo do katalogu /serwer/var albo do
../serwer/var, ale NIE do
/clients/hostname/serwer/var ponieważ nie będzie to
działało kiedy zmieni się katalog główny.
Ogólnie polecałbym oddzielić katalogi /var/run, /var/lock, /var/spool,
oraz /var/log.
/clients/tmp i zamontować je dla każdego klienta pod
/tmp. Ja zalecałbym osobne katalogi tmp dla każdego
klienta.
Zapamiętaj - sekcja ta odnosi się do tworzenia katalogu etc, który w większości przypadków jest współdzielony między klientami. Jeśli twoi klienci mają osobnych administratorów, najlepiej zrobić osobne katalogi etc dla każdego klienta.
Pomimo, iż oddzielamy katalogi etc, to i tak większą część
stamtąd chcemy współdzielić. Ogólnie sądzę, że współdzielenie
katalogu etc z serwerem nie jest dobrym pomysłem, dlatego
zalecam stworzenie katalogu /clients/etc, w którym będą
przechowywane informacje dla klientów. Na początek po prostu
skopiuj katalog etc serwera do katalogu dla klientów.
Powinieneś dodać do tego katalogu wszystkie pliki konfiguracyjne nie związane z konkretnym komputerem, np.: motd, issue itp., ale nie specyficzne dla komputera (fstab czy inittab).
Najważniejsze zmiany będą w katalogu rc.d. Najpierw powinieneś zmienić rc.inet1, tak aby odzwierciedlał twoją lokalną sytuację. Ja przekazuję parametry sieciowe do jądra podczas startu, dlatego wyrzuciłem prawie wszystko z tego pliku. Jedynymi poleceniami jakie tam zostawiłem, to ifconfig i route konfigurujące urządzenie loopback (localhost). Jeśli używasz RARP-a albo BOOTP, to będziesz musiał je stosowanie zrobić.
Po drugie powinieneś wyedytować swój plik rc.S. Najpierw wyrzuć stamtąd wszystko co dotyczy sprawdzania dysku (polecenia fsck) ponieważ będzie to robione przy starcie serwera. Potem powinieneś znaleźć linię, która montuje twoje katalogi; powinna wyglądać mniej więcej tak:
mount -avt nonfs
Parametr -t nonfs jest dlatego, że normalne stacje robocze najpierw wykonują skrypt rc.S a potem rc.inet1, aby skonfigurować Ethernet. Ponieważ to spowodowałoby, że żaden system NFS nie zamontowałby sie linia ta powinna zostać usunięta. Zmień ją na:
mount -av
Jeśli musisz uruchomić RARP/BOOTP, aby skonfigurować swoją sieć, zrób to w rc.S (albo wywołaj odpowiedni skrypt z rc.S) przed montowaniem i upewnij się, ze twoje fizyczne katalogu bin i sbin zawierają potrzebne programy.
Po poleceniu mount -av będziesz miał działający system plików. Stwórz ogólny plik fstab, tak żebyś mógł go skopiować dla każdego klienta. Powinien on wyglądać mniej więcej tak:
server/nfs default 1 1
server:/bin /bin nfs default 1 1
server:/usr /usr nfs default 1 1
server:/sbin /sbin nfs default 1 1
server:/home /home nfs default 1 1
server:/lib /lib nfs default 1 1
server:/clients/etc /server/etc nfs default 1 1
server:/clients/var /server/var nfs default 1 1
none /proc proc default 1 1
Upewnij się także, że plik /etc/exports na serwerze
wygląda tak:
/clients/hostname hostname.domainname(rw,no_root_squash)
/clients/etc hostname.domainname(ro,no_root_squash)
/clients/var hostname.domainname(ro,no_root_squash)
/usr hostname.domainname(ro,no_root_squash)
/sbin hostname.domainname(ro,no_root_squash)
/bin hostname.domainname(ro,no_root_squash)
/lib hostname.domainname(ro,no_root_squash)
/home hostname.domainname(rw,no_root_squash)
We wszystkich liniach oprócz pierwszej powinieneś wstawić jakąś maskę, do której pasują wszystkie komputery będące klientami (np. pc*.twoja.domena). Sugeruję, żeby większość katalogów była tylko-do-odczytu, ale to zależy od ciebie. Parametr no_root_squash spowoduje, że użytkownicy "root" na kliencie będą także mieli przywileje "root-a" na serwerze. Sprawdź man exports. Jeśli chcesz, żeby użytkownicy na klientach mogli uruchamiać passwd , to sprawdź czy katalog etc jest zamontowany z prawem zapisu, chociaż osobiście tego nie polecam.
Zauważ jeszcze jedno dotyczące skryptu rc.S. Domyślnie w
Slackware pliki /etc/issue i /etc/motd są tworzone od nowa
po każdym resetwoaniu serwera. Jeśli pliki te są montowane bez
zapisu, to funkcja ta MUSI zostać wyłączona a ja zalecałbym
wyłączyć ją na zapas.
I ostatnia sprawa. Jeśli chcesz mieć tę samą bazę użytkowników na kliencie i na serwerze, to musisz wybrać między:
/etc/passwd i /etc/group jak je otrzyma od serwera./clients/etc/passwd do /etc/passwd, albo jeśli
wolisz dołączenia symboliczne to dołączyć /etc/passwd do
/clients/etc/passwd (nie w drugą stronę, ponieważ klienci
nie montują katalogu etc serwera). To samo dla /etc/group.
Ogólnie, większość plików w katalogu etc klienta powinna być dołączona symbolicznie do plików z katalogu etc serwera. Ale niektóre z nich są różne dla każdej maszyny, a niektóre po prostu muszą się tam znajdować kiedy ładuje się jądro. Oto minimalna zawartość katalogu etc:
resolv.conf
hosts
inittab
rc.d/rc.S
fstab
Ponieważ te pięć plików może być identyczne dla każdego klienta, możesz je skopiować, albo dołączyć na stałe. Chociaż zaleca się żeby pliki rc.S i fstab były osobne dla każdego klienta. Będziesz także potrzebował osobnego pliku HOSTNAME dla każdego klienta. Osobiście uważam, że cały podkatalog rc.d powinien być osobny dla każdego klienta ponieważ konfiguracja i sprzęt mogą się różnić.
Dla każdego klienta dodaj do fstab odpowiednią linię dla swapa:
/dev/swap_prttn swap swap default 1 1
Reszta plików z etc klienta może być albo dołączona na stałe
do plików /clients/etc/* albo podłączona symbolicznie do
/serwer/etc (który jest punktem do montowaina dla
/clients/etc).
Upewnij się, że twój klient umie poprawnie rozwiązywać nazwy
kanoniczne poprzez named albo etc/hosts. Nie jest złym
pomysłem trzymanie IP serwera w pliku etc/hosts, zamiast
liczyć na rozwiązywanie nazw. Jeśli będziesz liczyć tylko na to, to
problem z named-em spowoduje, że twoi klienci nie będą mogli
wystartować.
Teraz wszystko, co musisz zrobić to zrestartować komputer, trzymać kciuki i mieć nadzieję, że wszystko pójdzie gładko. :)
Jeśli przestrzegałeś moich instrukcji, to powinno to być proste:
cd /clients/
cp -a hostname1 hostname2
a potem upewnij się, że sprawdziłeś to:
rc.d/* odpowiadają sprzętowi i konfiguracji
oprogramowaniaPowodzenia ...
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:
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.ippt.gov.pl w katalogu /pub/Linux/JTZ/.
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 sie na nią zapisać, to
wyślij list o treści subscribe jtz Imię Nazwisko na adres
listproc@ippt.gov.pl
doc-linux-pl-2002.06.14.orig/mini/html/NFS-Root.pl.html 0100664 0001750 0001750 00000036113 07104371340 021143 0 ustar coven coven
Prawa autorskie należą do Andreasa Kostyrki (e9207884@student.tu(-)wien.ac.at lub andreas@ag.or.at)
O ile nie stwierdza się inaczej, dokumenty HOWTO są chronione prawami autorskimi ich autorów. Mogą one być rozprowadzane w całości lub w części, w jakiejkolwiek postaci fizycznej czy elektronicznej tak długo, dopóki znajduje się w nich ta wzmianka. Dystrybucja komercyjna jest dozwolona, a nawet zachęca się do niej; chociaż autor chciałby być poinformowany o takowej.
Wszelkie tłumaczenia, prace pochodne, prace zebrane zawierające dokumenty HOWTO muszą zawierać tę notatkę o prawach autorskich. Oznacza to, że nie możesz stworzyć pracy pochodzącej z HOWTO i nałożyć na jej dystrybucję dodatkowych ograniczeń. Wyjątki od tej zasady mogą być uczynione pod pewnymi warunkami; skontaktuj się z koordynatorem programu Linux HOWTO pod niżej podanym adresem.
Krótko mówiąc, chcemy promować szerzenie tych dokumentów przez wszelkie dostępne kanały. Chcielibyśmy także utrzymać prawa autorskie nałożone na te dokumenty, i być powiadomieni o planach dotyczących redystrybucji HOWTO.
Jeśli masz jakieś pytania, skontaktuj się z Andreasem Kostyrką pod adresem <andreas@ag.or.at> - autorem tego dokumentu, albo Gregiem Hankinsem - koordynatorem projektu Linux HOWTO pod adresem <gregh@sunsite.unc.edu>.
Ogólnie mówiąc są dwa następujące problemy dla stacji roboczych:
Bieżąca implementacja NFSROOT w jądrze Linux-a (dotyczy 1.3.7x) pozwala na następujące rozwiązania:
/tftpboot/<adres-IP-maszyny>/.Przed rozpoczęciem ustawiania środowiska bezdyskowego, powinieneś zdecydować czy będziesz startował przez LILO, czy przez LOADLIN. Zaletą tego jest elastyczność, wadą natomiast prędkość. Startowanie przez LILO jest szybsze.
Dobrym pomysłem będzie wkompilowanie obsługi RARP w jądro. Musisz ją mieć jeśli będziesz startował bez parametrów. Z drugiej strony, nie pomoże ci to, jeśli serwer jest w innej podsieci niż klient.
Jądro na stację musi mieć następujące elemnty wkompilowane w jądro:
Jeśli stacja robocza będzie startowana bez parametrów, musisz także
ustawić urządzenie głównego systemu plików na 0:255. Robi się
to poprzez utworzenie urządzenia w katalogu /dev poleceniem
mknod /dev/nfsroot b 0 255
Po utworzeniu takiego urządzenia możesz ustawić urządzenie głównego systemu plików w jądrze poleceniem
rdev <jądro> /dev/nfsroot
UWAGA: instrukcja ta może działać u ciebie, ale wcale nie musi być sensowna w środowisku produkcyjnym. Lepszy sposób ustawienia głównego systemu plików na stacji znajduje się w NFS-Root-Client
Jak już zdecydowałeś, gdzie umieścisz główny system plików, stwórz go np. poleceniem
mkdir -p <katalog> tar cClf / - | tar xpCf <katalog> -
Jeśli startujesz jądro bez LILO, wtedy katalogiem głównym musi być
/tftpboot/<IP-adres>. Jeśli ci się to nie
podoba, możesz go zmienić w pliku Makefile w żródłach jądra,
poszukaj linii podobnej do tej:
NFS_ROOT = -DNFS_ROOT="\"/tftpboot/%s\""
Jeśli to zmienisz musisz przekompilować jądro.
Teraz wyrzuć niepotrzebne pliki i sprawdź skrypty w /etc/rc.d.
Kilka ważnych wskazówek:
/etc/fstab na
stacji. Powinien on być ustawiony dla systemu plików NFS.
Wyeksportuj główny katalog dla stacji roboczej. Szczegóły są w podręczniku systemowym (man exports). Najprzypuszczalniej po zmianach będziesz musiał zrestartować nfsd i mountd. W dystrybucji RedHat można to łatwo zrobić:
/etc/rc.d/init.d/nfs stop /etc/rc.d/init.d/nfs start
Ustaw gdzieś na sieci RARP. Jeśli startujesz stację bez parametru nfsroot, to serwer RARP musi być serwerem NFS. Aby to zrobić potrzebujesz jądra z obsługą RARP.
Robi się to poleceniem
/sbin/rarp -s <adr_ip> <adr_sprzętowy>
gdzie
jest adresem IP stacji roboczej a
jest adresem ethernet-owym karty sieciowej stacji roboczej.
Przykład: /sbin/rarp -s 131.131.90.200 00:00:c0:47:10:12
Możesz także użyć nazwy symbolicznej zamiast adresu IP, jeśli
serwer może odszukać sobie adres IP. (/etc/hosts lub DNS).
Aby ustawić BOOTP musisz wyedytować plik /etc/bootptab.
Przeczytaj strony podręcznika systemowego na temat bootpd oraz
bootptab.
Nie znam adresu sprzętowego !!! Jak mam go odszukać ?
/sbin/arp -a
Ponieważ samemu jeszcze tego nie używałem mogę ci dać tylko
nastepujące wskazówki (ukłony w stronę Christiana Leutloffa
<leutloff@sundancer.tng.oche.de>):
Jeśli wyeksportowałeś główny system plików z poprawną domyślną
nazwą oraz twój serwer NFS jest także serwerem RARP (z
czego wynika, że obie maszyny są w tej samej podsieci), wtedy
możesz wystartować jądro przez proste "zrzucenie" go na dysk za
pomocą polecenia cat. (Musisz ustawić urządzenie głównego
systemu plików w jądrze na 0:255) Przy takich ustawieniach, katalog
główny na serwerze jest w
/tftpboot/adres-IP. (wartość ta może być zmieniona
przy kompilacji jądra)
Przekaż do jądra podczas startu wszystkie potrzebne parametry oraz
dodaj
nfsroot=<serwer-IP>:</ścieżka/do/zamont.>
gdzie serwer-IP jest adresem IP serwera NFS a
/ścieżka/do/zamont. jest ścieżką do głównego katalogu.
Wskazówki:
lilo.conf.
Dodatkowo oprócz parametru nfsroot użyj jeszcze parametru
nfsaddrs=<st-IP>:<srw-IP>:<gw-IP>:<netm-IP>:<nazwa>. Jądro
ustawi interfejs eth0 z podanymi parametrami:
adres IP stacji roboczej
adres IP serwera NFS
wrota (gateway)
maska podsieci
nazwa stacji
Popularnym problemem jest fakt, że niektóre (przynajmniej) najnowsze dystrybucje mają program /sbin/init łączony dynamicznie. Musisz więc udostępnić odpowiednie biblioteki w katalogu /lib u klienta. Prostą rzeczą jaką można zrobić, to zamiana /sbin/init (u klienta) na statycznie łączony program typu ``Hello World''. W ten sposób można sprawdzić czy mamy do czynienia rzeczywiście z problemem z programem łączonym dynamicznie czy może z czymś prostszym.
Jeśli przy starcie pojawiają ci się jakieś pokręcone komunikaty o "tty", to powinieneś uruchomić skrypt MAKEDEV u klienta w katalogu /dev. Chodzą słuchy, że nie działa on na systemach serwerowych, które używają liczb 64-bitowych do numerowania urządzeń. Jeśli zdarzy ci się taki problem, to napisz do mnie proszę na jakim systemie ci się to stało. Potencjalnym rozwiązaniem powinno być utworzenie małego ramdysku z katalogiem /dev i każdorazowa reinstalacja plików urządzeń.
/pub/Linux/sunsite/system/network/admin/ i nazywa się
bootpc*tgz.
Bezdyskowe stacje można zrobić całkiem prosto posługując się initrd
(który jest dołączony do Linux-a 2.0). initrd jest właściwie
zaawansowaną opcją w większości ustawień.Documentation w źródłach jądra znajduje się plik
z opisem systemów NFS-Root. Przypuszczalnie możesz
ją zdobyć z adresu
www.huwig.de/linux/mama.
[Od tłumacza: Autor podał tutaj adres www.linuxhq.com, ale
niestety ta wspaniała strona zginęła z Internetu. Ja podałem
adres, który powstał w zastępstwie kilka dni później.]
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:
Oficjalną stroną tłumaczeń HOWTO jest http://www.ippt.gov.pl/~ppogorze/Linux/JTZ/
Aktualne wersje przetłumaczonych dokumentów znajdują się na
tejże stronie. Dostępne są także poprzez anonimowe ftp pod adresem
ftp.ippt.gov.pl w katalogu /pub/Linux/JTZ/.
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 sie na nią zapisać, to
wyślij list o treści subscribe jtz Imię Nazwisko na adres
listproc@ippt.gov.pl
doc-linux-pl-2002.06.14.orig/mini/html/PLIP.pl.html 0100664 0001750 0001750 00000115250 07104371340 020340 0 ustar coven coven
Ten dokument HOWTO pozwoli Ci szczęśliwie zbudować i używać protokołu interfejsu równoległego (PLIP).
Wszelkie pytania, poprawki, komentarze lub sugestie proszę przesyłać na mój adres E-Mail: controzz@cli.di.unipi.it Pisz do mnie kiedy tylko potrzebujesz pomocy. Czasami nie będę mógł od razu odpowiedzieć, ale na pewno odpowiem. Jeśli się zdarzy, że nie dostaniesz odpowiedzi po dwóch tygodniach, to znaczy, że nasz system jest w kłopotach. Nie wahaj się wtedy napisać ponownie. Moim obowiązkiem jest dać Ci odpowiedź.
Po pierwsze, wiele technicznych informacji pochodzi z net-3-HOWTO autorstwa Terry'ego Dawson'a. To mini-HOWTO w żadnym stopniu nie pokrywa tamtego dokumentu. Moim celem jest pokazanie jak szybko zainstalować stałe połączenie PLIP, *TYLKO* to. Wszelkie pozostałe informacje pochodzą z moich własnych doświadczen i pomocy wielu użytkowników, którzy przesyłali mi komentarze i informacje.
Przeczytaj net-3-HOWTO i inne dokumenty dla generalnej wiedzy o sieciach i plikach konfiguracyjnych, które będę sugerował do zmian.
Poniżej jest spis treści. Możesz szybko odnaleźć paragraf szukając ciągu znaków nn, gdzie nn jest numerem paragrafu.
Jest wiele dróg prowadzących do utworzenia połączenia pomiędzy kilkoma hostami. PLIP, podobnie jak SLIP pozwala na lokalne połączenia pomiędzy dwoma maszynami poprzez porty równoległe.
Połączenie PLIP jest bardzo podobne do SLIP (z kablem dzierżawionym), ale używa portów równoległych zamiast szeregowych. Port równoległy przesyła więcej niż jeden bit na raz. To oznacza, że jest możliwe osiągnięcie większych prędkości niż przy użyciu interfejsu szeregowego.
Interfejs PLIP jest wystarczająco szybki, aby umożliwić takie funkcje funkcje tcp/ip jak NFS na satysfakcjonującym poziomie. Możesz więc mieć swój komputer z Linuxem oraz inny komputer z minimalnym systemem, gdzie możesz montować całą resztę z głównej maszyny.
Wadą jest to, że większość użutkowników ma tylko jeden port równoległy. Znaczy to, że nie będziesz mógł jednocześnie drukować i korzystać z PLIP. Do tej pory nawet posiadając dwa lub nawet trzy porty równoległe nie mogłeś używać drukarki i PLIP naraz. Rozwiązaniem było użycie modułów lub innych tricków.
Ta wada może być wyeliminowana poprzez zastosowanie wstawki do jądra systemowego. Proszę zobaczyć paragraf Wstawki umożliwiające jednoczesne działanie PLIP i LP.
W końcu mogę Ci podać sposób na ustawienie połączenia PLIP pomiędzy DOS a Linuxem.
Sprzętem wymaganym do zestawienia połączenia PLIP są dwa wolne porty (po jednym w każdej maszynie) i kabel.
Teraz trochę o kablu. To jest fragment pliku plip.c z źródeł kernela
1.2.13:
Kabel używany do połączeń jest de facto standardowym standardowym kablem równoległym typu 'null cable'. Jeśli chcesz go wykonać sam, będziesz potrzebował 12-żyłowy kabel. Połączenia wyglądają następująco:
SLCTIN 17 - 17
GROUND 25 - 25
D0->ERROR 2 - 15 15 - 2
D1->SLCT 3 - 13 13 - 3
D2->PAPOUT 4 - 12 12 - 4
D3->ACK 5 - 10 10 - 5
D4->BUSY 6 - 11 11 - 6
Nie łącz pozostałych wtyków. Są to:
D5,D6,D7 są 7,8,9
STROBE jest 1, FEED jest 14, INIT jest 16
ekstra uziemnienia to 18,19,20,21,22,23,24
Radzę Ci przeczytać /usr/src/linux/drivers/net/README1.PLIP
aby dowiedzieć się więcej o kablu.
Według mnie powinieneś unikać budowania swego własnego kabla. Własnoręcznie
wykonany kabel może zaoszczędzić niewiele pieniędzy, ale może spowodować
wiele bólów głowy. Jeśli chcesz zbudować swój własny kabel, pamiętaj, że
robisz to na swoją odpowiedzialność. Napisałem to co zostało umieszczone w
plip.c ale nie daję żadnej gwarancji.
Ostatnie słowo o długości kabla. Długie kable (więcej niż 3 metry) mogą powodować problemy związane z zakłóceniami radiowymi. Jeśli potrzebujesz długi kabel to powinieneś użyć dobrze ekranowanych kabli. Bardzo długie kable nie są zalecane. Myślę, że maksymalną długością jest 15 metrów.
Kiedyś ktoś napisał mi, że używa 30 metrowego kabla. Jednak jeśli ktoś chce próbować połączeń PLIP między biurem a domem (200 metrów) i ma do wydania pieniądze to proszę spróbować. W najgorszym wypadku to nie będzie pracować.
Powinieneś już wiedzieć jak konfigurować i kompilować jądro. W przeciwnym razie radzę pozytać dokumentację (Kernel-HOWTO lub inne). Dziękuję za wspaniałą pracę wykonaną przez guru od jądra. Kompilacja jądra jest teraz o wiele łatwiejsza. Poniżej możesz zobaczyć co masz do zrobienia:
UWAGA:Zakładam, że używasz serii 2.0.xx jądra.
Będę też zakładał, że do konfiguracji używasz polecenia menuconfig,
ale inne narzędzia też są dozwolone. Pokażę Ci jak to zrobić używając
menuconfig:
#make menuconfig
Mocno polecam aby wybrać:
Loadable module support --->
i zaznaczyć:
[*] Enable loadable module support
I jeśli to możliwe (jęsli masz modules.2.0.0):
[*] Kernel daemon support (e.g. autoload of modules)
Potem powróć i wybierz:
Networking options --->
gdzie powinieneś zaznaczyć przynajmniej to:
[*] Network firewalls
[*] TCP/IP networking
[*] IP: forwarding/gatewaying
potem powróc i wybierz:
[*] Network device support
<M> PLIP (parallel port) support
Jeśli używasz modułów to radzę Ci ustawić PLIP jako moduł. Jeśli to zrobisz i chcesz jeszcze używać drukarkę to powędruj do:
Character devices --->
i ustaw jako moduł
<M> Parallel printer suppport
Teraz umożliwiłeś wspomaganie przez jądro dla PLIP. Jeśli będziesz teraz po raz pierwszy kompilował jądro to spójrz na inne opcje i opuść program konfiguracyjny.
W końcu dokonaj kompilacji:
#make dep; make clean
#make zlilo
oraz jeśli używasz modułów:
#make modules
#make modules_install
Po pierwsze pamiętaj aby zrobić kopię bezpieczeństwa wszystkich plików, które będziesz zmieniał,
#cp rc.inet1 rc.inet1.BACKUP
może być dobrym rozwiązaniem.
Jeśli jeszcze tego nie zrobiłeś to musisz wybrać adres IP dwóch maszyn. W moich przykładach będę używał kilka przykładowych IP, które ty wpiszesz w standardowym formacie xxx.xxx.xxx.xxx
W /etc/rc.d/inet1.rc na obydwu maszynach dodaj to (lepiej w
końcowej części pliku):
/sbin/route add -net ${NETWORK} netmask ${NETMASK}
gdzie NETWORK i NETMASK powinny być ustawione wcześniej. Jeśli nie
wiesz jak to zrobić, proszę przeczytaj NET-2-HOWTO.
Możesz bezpiecznie pominąć te zmienne tylko w tych przypadkach:
Jeśli jedynie chcesz połączyć dwa komputery w autonomicznej sieci to możesz
wybrać dowolne adresy IP, powiedzmy 200.0.0.1 i odpowiednio 200.0.0.2.
W tym przypadku ustawiasz NETWORK="200.0.0.0" i
NETMASK="255.255.255.0". To są przykłady jakich będę używał w paragrafie
Szybka instalacja PLIP (zobacz poniżej).
UWAGA: 200.0.0.1 i 2 to tylko przykładowe IP. Nie radzę Ci ich używać, bo mogą one być adresami prawdziwych hostów w Internecie!
Radzę wybrać adres z puli adresów zarezerwowanych:
10.0.0.0 - 10.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255
W pliku /etc/hosts na obydwu komputerach powinieneś dodać pozycje z
adresem IP komputerów, które łączysz przez PLIP. W moim przykładzie,
pozycjami tego pliku są:
200.0.0.1 one #to jest adres pierwszego komputera
200.0.0.2 two #to jest adres drugiego komputera
Gdzie one i two to nazwy, które wybrałeś dla tych dwóch hostów.
Jeśli chcesz aktywować NFS, to poza zaznaczeniem odpowiednich pól w
konfiguracji jądra, musisz dodać w pliku /etc/exports pozycje
opisujące katalogi, które chcesz udostępniać. W moim przykładzie, aby
możliwe było zamontowanie katalogu /usr powinieneś dodać:
/usr two (ro)
Wreszcie, oto komendy, które muszą być wykonane z prawami root'a, które aktywują interfejs PLIP (oczywiście wcześniej musi być poprawnie podłączony kabel).
Po pierwsze należy potwierdzić, że urządzenie lp nie jest aktywne:
#cat /proc/devices
Nie może się pojawić następująca rzecz:
6 lp
Ponownie używam nazw one i two jako przykład. Na "one" musisz
wydać polecenie:
#ifconfig plip1 one pointopoint two up
Sprawdź czy to pracuje...
#ifconfig
.....
.....
plip1 Link encap:10Mbps Ethernet HWaddr FC:FC:C8:00:00:01
inet addr:200.0.0.1 P-t-P:200.0.0.2 Mask:255.255.255.0
UP POINTOPOINT RUNNING NOARP MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0
TX packets:0 errors:0 dropped:0 overruns:0
Interrupt:7 Base address:0x378
UWAGA: jeśli używasz modułów bez demona kerneld, który
automatycznie ładuje odpowiedni moduł na żądanie, to pamiętaj o:
#insmod plip
przed wydaniem polecenia ifconfig. Jeśli jesteś paranoikiem,
sprawdź, czy moduł został załadowany używając polecenia:
#lsmod
Module: #pages: Used by:
plip 3 0
Dodaj routing do two:
#route add two
I jeżeli chcesz NFS dla drugiego:
#rpc.portmap
#rpc.mountd
#rpc.nfsd
Na komputerze "two" komendy wyglądają tak samo, tylko że musisz wpisać
one zamiast two.
Jeden z Twoich komputerów będzie miał prawdopodobnie tylko połączenie typu PLIP. Jeśli to prawda, możesz także wydać polecenie:
#route add default gw one
na tym komputerze. W moim poniższym przykładzie, two jest laptopem,
który jako jedyne używa połączenia PLIP z one, więc wydałem powyższe
polecenie na komputerze two.
Wreszcie przetestuj połączenie za pomocą
#ping two
z one oraz
#ping one
z two i zobacz czy wszystko pracuje.
Oczywiście komendy te mogą być wykonywane automatycznie przez skrypt lub
podczas startu systemu. Musisz jedynie napisać skrypt, który wykonywałby te
komendy. Możesz je wywołać z prawami root-a lub możesz dodać komendę do
skryptu /etc/rc.d/rc.inet2 który jest uruchamiany podczas startu.
Jeśli chcesz używać mojej
Szybkiej Instalacji PLIP,
znajdziesz tam wszystkie pliki konfiguracyjne i skrypty.
Po skonfigurowaniu i kompilacji jądra systemowego z obsługą PLIP, zbadaj
komunikaty za pomocą komendy dmesg (8).
Powinieneś zobaczyć coś takiego:
NET3 PLIP version 2.0 gniibe@mri.co.jp
plip1: Parallel port at 0x378, using assigned IRQ 7.
Oczywiście, jeżeli używasz modułów to ujrzysz ten komunikat kiedy zostanie
zainstalowany moduł plip.c (#insmod plip.c) (przez
Ciebie lub przez kerneld). W zależności od konfiguracji klogd i
syslogd komunikaty plip-a mogą być rejestrowane w logach systemowych.
Nie wpadaj w panikę jeżeli nie ujrzysz tych komunikatów. Jeśli lsmod
pokazuje, że moduł jest załadowany to w zupełności wystarczy.
Ten paragraf (mam nadzieję) rozwiążę Twoje problemy. Jeśli masz inne pytania, zawsze możesz do mnie napisać.
SIOCSIFADDR: No such device
SIOCADDR: Network is unreachable
a kiedy próbuję zestawić połączenie jak to zostało opisane powyżej,
otrzymuję ponownie komunikaty o błędach:
SIOCSIFADDR: No such device
SIOCSIDDSTADDR: No such device
SIOCADDRT: Network is unreachable
mount clntudp_create: RPC: Port Mapper failure - RPC: Unable to send
A: Jądro z różnych przyczyn nie obsługuje PLIP. Przyczyną może być:
- Nie zaznaczyłeś obsługi PLIP podczas konfiguracji jądra.
- Zaznaczyłeś obsługę drukarki podczas konfiguracji jądra.
- Skompilowałeś PLIP jako moduł i go nie załadowałeś.
- Możesz założyć wstawkę aby umożliwić jednoczesne działanie PLIP i LP.
- Możesz założyć inną wstawkę do jądra aby obsługiwało ono PLIP i LP na osobnych portach.
rc.inet2, gdzie wywołuję skrypt
uruchamiający łącze i uruchamiający VFS.
Mój komputer two montuje zasoby komputeraone. Dodałem pozycje do
/etc/fstab na komputerze two.
Jeśli uruchamiam two gdy one jest wyłączony, two zawiesza się
na kilka minut w momencie "mounting remote file systems...".
A: Tak się dzieje, ponieważ two czeka aby zamontować zasoby one, lecz jeśli one jest wyłączony to musisz poczekać aż two znudzi się czekaniem. Aby tego uniknąć, możesz:
- Zakomentować w
rc.inet2komendę, za pomocą której montowane są zdalne systemy plików.- Wyrzucić wpisy w
/etc/fstabnatwoi podmontować zdalny system plików ręcznie jeśli będziesz tego potrzebował.
plip1: timed out (1, 89)
A: To oznacza, że twoja strona połączenia pracuje, twój komputer wysyła sygnał, ale druga strona nie odpowiada z następujących powodów:
- Kabel nie jest odpowiednio podłączony lub jest popsuty.
- Druga strona nie ma uruchomionego PLIP.
- Jesteś połączony z laptopem, który nie ma odpowiedniego portu równoległego, zobacz następne pytanie.
ping to otrzymuję 100%
strat w pakietach. Łączę mój komputer biurkowy z notebookiem.
A: Niektóre porty równoległe w notebookach nie są odpowiednie do połączeń typu PLIP, ponieważ są tylko portami drukarkowymi. Mogą tylko wysyłać dane. Niemożliwy jest ich odbiór. Niestety nie wiem co sprawić, aby one pracowały. Jedyną nadzieją jest:
- Popatrz na setup w swoim notebook-u. Może jest tam jakiś sposób konfigurowania portu równoległego jako port równoległy, a nie jako port drukarki.
- Spróbuj plip w trybie 0. Niestety, nie wiem jak to zrobić i czy jest to możliwe w najnowszych wersjach jądra.
A: To jest trudne pytanie, ponieważ jest wiele czynników wpływających na wydajność takiego połączenia:
Dla przykładu mogę podać, że powinieneś osiągnąć około 40Kb/sek, o wiele szybciej niż dla połączeń szeregowych i porównywalnie ze słabymi kartami ethernet.
- Typ procesora na obydwu komputerach.
- Typ portu równoległego i jego konfiguracja.
- Obciążenie systemu.
- Do czego używasz PLIP.
ifconfig down
i zetawiał ifconfig up połączenie na interfejsie plip1?
A: Wygląda na to, że będziesz musiał dodać <tt/-arp/ do komendy <tt/ifconfig/, za wyjątkiem pierwszego razu podczas startu systemu. Ja tego nie potrzebuje, ale ktoś może.
A: Tak, powinny. Tak jak podkreśliłem na początku, wybrałem te adresy tylko ze względu na ich prostotę. Możesz je dowolnie zmieniać. Oto wycinek z net-3-howto:
RFC1597 zarezerwował kilka adresów IP dla prywatnych sieci. Powinieneś
ich używać, gdyż nie powodują nieprzyjemnych zdarzeń gdy przypadkowo
połączysz się z Internet. Zarezerwowane adresy to:
10.0.0.0 - 10.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255
A: Tak! Spróbuj /usr/sbin/plipconfig. Poczytaj podręcznik systemowy dotyczący tej komendy.
A: Tak, najlepiej jest używać tej samej wersji PLIP na obu końcach połączenia.
A: Pamiętaj, że jądra o numerach wersji 1.nieparzysty.x są wersjami rozwojowymi. "Bogowie", którzy codziennie ciężko pracują nad ulepszaniem Linuxa często wypuszczają niestabilne wersje. Teraz wersje 2.0.x powinny być stabilne.
Przed napisaniem tego mini-HOWTO, stworzyłem zestaw plików potrzebny do szybkiej instalacji PLIP. W kilka minut, nie licząc kompilacji jądra powinieneś zestawić połączenie PLIP. Zarchiwizowane pliki możesz znaleźć na mojej stronie domowej: http://www.cli.di.unipi.it/~controzz/intro.html. Może ktoś w koncu udostępni moje pliki na publicznym serwerze ftp.
Najlepszą drogą do jednoczesnego dziłania PLIP i LP jest użycie modułów. Możesz załadować moduł plip.o i wyrzucić go kiedy będziesz chciał drukować, lub na odwrót. Jeśli na prawdę potrzebujesz używać PLIP i LP naraz, wypróbuj poniższe wstawki.
W tej sytuacji możesz spróbować następujących wstawek do jądra.
Musisz zmodyfikować następujące fragmenty kodu, lecz pamiętaj wykonać kopię bezpieczeństwa:
--- begin ---
******** modifications to linux/drivers/char/lp.c ***********************
struct lp_struct lp_table[] = {
{ 0x3bc, 0, 0, LP_INIT_CHAR, LP_INIT_TIME, LP_INIT_WAIT, NULL,
NULL, },
/* { 0x378, 0, 0, LP_INIT_CHAR, LP_INIT_TIME, LP_INIT_WAIT, NULL,
NULL, },
{ 0x278, 0, 0, LP_INIT_CHAR, LP_INIT_TIME, LP_INIT_WAIT, NULL,
NULL, },
*/
};
#define LP_NO 1
******** modifications to linux/drivers/net/Space.c ********************
#if defined(PLIP) || defined(CONFIG_PLIP)
extern int plip_init(struct device *);
static struct device plip2_dev = {
"plip2", 0, 0, 0, 0, 0x278, 2, 0, 0, 0, NEXT_DEV, plip_init, };
static struct device plip1_dev = {
"plip1", 0, 0, 0, 0, 0x378, 7, 0, 0, 0, &plip2_dev, plip_init, };
/* static struct device plip0_dev = {
"plip0", 0, 0, 0, 0, 0x3BC, 5, 0, 0, 0, &plip1_dev, plip_init, };
*/
# undef NEXT_DEV
# define NEXT_DEV (&plip1_dev)
#endif /* PLIP */
---end---
Zrzeczenie: Otrzymałem te wstawki i opublikowałem je w niezmienionej postaci. Oznacza to, że używasz ich na własną odpowiedzialność. W najgorszym wypadku, skompilujesz jeszcze raz jądro używając starych plików.
Jeśli masz przynajmniej dwa porty równoległe, możesz wypróbować następujące wstawki, które umożliwią pracę PLIP na jednym porcie, a LP na drugim.
--- begin ---
1. Comment out one line in kernel source file, drivers/char/lp.c.
struct lp_struct lp_table[] = {
{ 0x3bc, 0, 0, LP_INIT_CHAR, LP_INIT_TIME, LP_INIT_WAIT, NULL, NULL, },
{ 0x378, 0, 0, LP_INIT_CHAR, LP_INIT_TIME, LP_INIT_WAIT, NULL, NULL, },
/* { 0x278, 0, 0, LP_INIT_CHAR, LP_INIT_TIME, LP_INIT_WAIT, NULL, NULL, }, */
};
3 -> 2
2. Kernel configuration
PLIP (parallel port) support (CONFIG_PLIP) [n] y
Parallel Printer support [y] y
3. Kernel message at startup
lp1 at 0x0378, using polling driver
.....
NET3 PLIP version 2.0 gniibe@mri.co.jp
plip2: Parallel port at 0x278, using assigned IRQ 5.
---end---
Zrzeczenie jak w sekcji 8.1
Po pierwszym wydaniu tego mini-HOWTO wiele ludzi pisało z prośbą o inforamcję o połączeniu pomiędzy Dos-em a Linux-em. To doprowadziło mnie do dodania tego paragrafu.
Ten fragment pochodzi z artykułu James'a McDuffie'go mcduffie@scsn.net, który znalazłem w Linux Gazette. Traktuje on o szybkiej instalacji polączenia PLIP między Linuxem i DOS-em przy użyciu Windows i Trumpet Winsock i podaje adreswspaniałego programu umożliwiającego uruchamianie programów pracujących pod X-Windows na MS-Windows.
Następna sekcja jest dodatkiem przysłanym przez James'a Vahn'a jvahn@short.circuit.com, gdzie opisuje on jak zestawić połączenie i jak rozwiązać niektóre problemy.
Zakładam, że już zestawiłeś poprawnie połączenie PLIP po stronie Linuxa i masz odpowiedni kabel. W przeciwnym razie powróc do poprzednich paragrafów.
Teraz po stronie DOS-a potrzebujesz po pierwsze potrzebujesz sterownika pakietów. Możesz go znaleźć tutaj: ftp.crynwr.com/drivers/plip.zip
Program pracuje po DOS-em jako standardowy sterownik pakietów Ethernet. Jeśli chcesz używać PLIP z Windows potrzebujesz także Trumpet Winsock. Jest to interfejs TCP/IP. Możesz znaleźć też takie oprogramowanie pod DOS-a.
Powróćmy teraz do komputera z Linuxem i dodajmy na nim adres komputera
pracującego pod DOS do /etc/hosts. Jeśli Twój DOS-owy komputer nie
ma zarejestrowanego adresu IP, możesz wybrać jakikolwiek adres (pamiętaj o
zarezerwowanych adresach podanych w paragrafie 3).
Teraz załóżmy, że wybrałeś nazwę linux dla komputera pracującego pod Linux i dos dla komputera DOS-owego. Musisz napisać:
ifconfig plip1 linux pointopoint arp up
route add dos
Oczywiście jeśli chcesz to zautomatyzować dodaj następujące polecenia do
/etc/rc.d/rc.inet1:
/sbin/ifconfig plip1 linux pointopoint arp up
/sbin/routte add dos
To ustanawia interfejs i dołącza do niego rutowanie. Oczywiście, jeżeli
używasz drugiego portu równoległego musisz jako interfejs wpisać plip2
zamiast plip1.
Wróć do komputera z DOS/Windows i edytuj autoexec.bat. Musisz dodać
następujące linie:
c:\plip\plip.com 0x60 c:\tcpip\winsock\winpkt.com 0x60
Oczywiście, zakładam, że umieściłeś plik plip.com w katalogu
c:\plip a plik winpkt.com w c:\tcpip, w przeciwnym
razie powinieneś dodać odpowiednie ścieżki dostępu.
To ustawiam program plip.com na wektorze pakietów 0x60 i ładuje
winpkt.com na tym samym wektorze. Jeśli używasz innego portu niż lpt1 to
będziesz musiał dodać numer przerwania i adres i/o jako parametry przy
wywołaniu plip.com. Teraz przejdziemy do konfiguracji Trumpet Winsock.
Musisz wyłączyć obsługę SLIP i PPP i wpisać 60 do okienka
zatytułowanego Packet vector. Następnie wpisz adres IP komputera, jako
domyślną bramkę adres IP komputera Linux-owego oraz adres serwera nazw,
którym może być Twój komputer lub komputer u twojego dostawcy internetowego.
Zamknij setup i zrestartuj Winsock, a wszystko powinno już działać. Umieść
Winsock w grupie startup i masz wszystko zautomatyzowane.
Jeśli chcesz korzystać z Internetu pod Windows poprzez komputer Linux-owy, musisz ustawić IP Masquerading. Więcej informacji zobaczysz w NET-3-HOWTO.
Znalazłem także program, który pozwala uruchamiać programy X-Windows pod Windows! Możesz go znaleźć pod adresem www.tucows.com
Skonfiguruj go zgodnie z zaleceniami i zatelnetuj się z komputera
pracującego pod Windows i ustaw zmienną DISPLAY na ten komputer
(na przykład DISPLAY=duncan:0.0) i uruchom żądany program. Nie ma nic
lepszego jak uruchamianie xv pod Windows!
UWAGA: Otrzymałem ten domkument od James'a Vahn'a jvahn@short.circuit.com i umieściłem go tutaj w niezmienionej postaci. Oznacza to, że wszelkie pytania należy kierować do niego, a nie do mnie. Jego doświadczenia z połączeniem PLIP z komputerem z DOS-em wyposażonym tylko w stacje dysków elastycznych są doskonałym przykładem na to jak poradzić sobie z różnymi problemami.
Ostatnia aktualizacja: 11/07/1996
Mój komputer wyposażony jedynie w stację dysków elastycznych pracujący pod DOS-em jest połączony z komputerem Linuxowym. Pierwszy port na komputerze z Linuxem jest wykorzystywany przez drukarkę. Oba komputery są stale podłączone i telnetuję się z komputera DOS-owego na Linux-owy. To moje uwagi i spostrzeżenia.
Kiedy jądro wykrywa ilość portów równoległych w komputerze i uruchamia wszystkie z nich, chyba, że wykluczysz niektóre z nich z przeszukiwania. Jedną z metod jest ładowanie sterowników jako modułów.
gniibe@mri.co.jp napisał:
===========================
Cały czas polecam używanie PLIP/LP jako modułów z tego względu, że:
Mając zainstalowaną w modułach obsługę PLIP i LP, możesz podać, który port jest używany przez PLIP, a który przez LP. Oto przykład:
# insmod lp.o io=0x378
# insmod plip.o io=0x278 irq=2
Możesz nawet używać obu portów równoległych:
# insmod plip.o io=0x278,0x3bc irq=2,5
W powyższym przykładzie,
plip0 jest przydzielony adres 0x278, a numer przerwania to 2,
plip1 jest przydzielony adres 0x3bc, a numer przerwania to 5.
============================
Używanie modułów jest chyba najlepszym rozwiązaniem. Kolejna metoda pokazuje jak zmienić kod źródłowy jądra, aby umożliwić jednoczesne działanie PLIP i LP na różnych portach bez użycia modułów. Jeśli nie jesteś na ty z modułami, ten sposób może być szybszy w realizacji.
Będziesz musiał zmodyfikować dwa pliki źródłowe jądra. Ja używam jądra
1.2.13 i wniosłem kilka poprawek do ../linux/drivers/net/Space.c.
Spójrz na fragment około 205 lini, gdzie znajdują się definicje PLIP
i upewnij się, czy porty i numery przerwań odpowiadają Twoim. Sprawdź także
jakim driverom one odpowiadają (plip0, plip1, plip2). W moim przypadku port
0x278 używa przerwania 5 (zworki na karcie są tak ustawione), ale
Space.c definiuje go tak aby używał przerwania 2. Wolałem dokonać zmian
w tym miejscu niż otwierać obudowę i przestawiać zworki. Alternatywą jest
ustawienie przerwania później jako parametr ifconfig, ale jądro będzie
startowało ze złym numerem przerwania dla PLIP, a to może być dla Ciebie
dokuczliwe. Zmiana jest niewielka.
Następny, trudniejszy krok to:
W pliku ../drivers/char/lp.c znajdziesz taki fragment w okolicach
38 lini:
struct lp_struct lp_table[] = {
{ 0x3bc, 0, 0, LP_INIT_CHAR, LP_INIT_TIME, LP_INIT_WAIT, NULL, NULL, },
{ 0x378, 0, 0, LP_INIT_CHAR, LP_INIT_TIME, LP_INIT_WAIT, NULL, NULL, },
/* { 0x278, 0, 0, LP_INIT_CHAR, LP_INIT_TIME, LP_INIT_WAIT, NULL, NULL, },
* 0x278 reserved for plip1
*
* };
* #define LP_NO 3
*/
};
#define LP_NO 2
Zauważ zmiany: jeden port jest zakomentowany, więc tylko dwa porty są zdefiniowane. Port 0x3bc nie będzie prawdopodobnie pracował dla PLIP, ponieważ przerwanie dla tego portu jest wadliwe. Zostało to zauważone na przykładzie starych adapterów monochromatycznych MDA.
Wykonałeś kopie zapasowe przed modyfikacjami, prawda? Teraz skompiluj nowe jądro z obsługą drukarki, sieci, fikcyjnego interfejsu oraz plip.
Skonfiguruj system. To jest mój plik /etc/rc.d/rd.inet1:
#!/bin/bash
#
/sbin/ifconfig lo 127.0.0.1
/sbin/route add -net 127.0.0.0
/sbin/ifconfig dummy 200.0.0.1
/sbin/route add -net 200.0.0.0 netmask 255.255.255.0
/sbin/ifconfig plip1 arp 200.0.0.1 pointopoint 200.0.0.2 up
/sbin/route add 200.0.0.2
/sbin/ifconfig dummy down
Zauważ, że arp jest używany przy połączeniach Linux-DOS. Nie jest
używany przy połączeniach Linu-Linux.
Do pliku /etc/hosts możesz dodać:
200.0.0.1 console1
200.0.0.2 console2
Komputer z DOS-em nazywa się console2. Zwróc uwagę na ostrzeżenia Andre'a dotyczące tych adresów. Lepiej używać oficjalne schematy adresowania.
Przeładuj system, aby zmiany zadziałały. Podczas startu powinieneś zobaczyć następującą sekwencję:
lp0 at 0x03bc, using polling driver
lp1 at 0x0378, using polling driver
[....]
NET3 PLIP version 2.0 gniibe@mri.co.jp
plip1: Parallel port at 0x278, using assigned IRQ 5.
Komenda route powinna pokazać coś takiego:
Kernel routing table Destination Gateway Genmask Flags MSS Window Use Iface console2 * 255.255.255.255 UH 1436 0 136 plip1 loopback * 255.0.0.0 U 1936 0 109 lo
a ifconfig plip1 powinien pokazać:
plip1 Link encap:10Mbps Ethernet HWaddr FC:FC:C8:00:00:01
inet addr:200.0.0.1 P-t-P:200.0.0.2 Mask:255.255.255.0
UP POINTOPOINT RUNNING MTU:1500 Metric:1
RX packets:132 errors:0 dropped:0 overruns:0
TX packets:136 errors:0 dropped:0 overruns:0
Interrupt:5 Base address:0x278
Spójrz na /etc/inetd.conf i zobacz, czy telnet jest odkomentowany.
Możesz przeczytać podręcznik systemowy "man" dla tcpd, oraz o używaniu
/etc/hosts.allow (ALL: LOCAL) i /etc/hosts.deny (ALL:
ALL). Powinieneś mieć także możliwość wykonania "telnet localhost"
Teraz strona DOS-a. Jeszcze raz, bądź nieufny w stosunku do portu 0x3bc jeśli taki u Ciebie istnieje.
Ja używam programu telnet dostarczanego przez NCSA i sterownik
PLIP dostarczany przez Crynwr. To wszystko możesz znaleźć na
następujących serwerach:
ftp.ncsa.uiuc.edu/Telnet/DOS/ncsa/tel2308b.zip ftp.crynwr.com/drivers/plip.zip
Upewnij się, czy używasz wersji 2.3.08 klienta telnetu i wersji 11.1
sterownika PLIP. Znajdź i przeczytaj SUPPORT.DOC.
PLik CONFIG.TEL. Większość tego pliku pozostaje nie zmieniona. Aby
zaoszczędzić miejsce wyciąłem linie, które pozostawiłem niezmienione. Drugi
port na tym komputerze jest ustawiony jako 0x278 na 5 przerwaniu.
myip=200.0.0.2
netmask=255.255.255.0 # subnetting mask
hardware=packet # network adapter board (packet driver interface)
interrupt=5 # IRQ which adapter is set to
ioaddr=60 # software interrupt vector driver is using
#
#[...lots unchanged...]
#
# at the end of the file, put this line:
name=console1 ; hostip=200.0.0.1 ; nameserver=1 ; gateway=1
(console1 jest nazwą komputera z Linuxem, możesz użyć jakiejkolwiek nazwy).
Złożyłem kabel długości 12 stóp łączący oba komputery. Standardowy
11-kontaktowy kabel drukarkowy powinien także pracować. Plik plip.c
pokazuje schemat połączenia. Mimo, że mój kabel posiada połączenie 17-17,
myślę, że nie jest on do niczego używany i nie było go na gotowym (kupionym)
kablu.
@echo off
plip.com 0x60 5 0x278
telbin -s console1
Te komendy powinny Cię połączyć z komputerem Linux-owym na
/dev/ttyp. Klient telnetu NCSA posiada 8 wirtualnych ekranów,
a także może działać jako serwer ftp. Interfejs PLIP umożliwia dobrą
przpustowość. Osiągam prędkości rzędu 6.5K/s na moich antykach. Mam
nadzieję, że będziesz miał większe osiągi. :-)
Jeśli masz jakieś pytania to możesz się ze mną skontaktować pod adresem controzz@cli.di.unipi.it
Wszelkie komentarze, raporty o błędach są mile widziane. Nastepna wersja będzie zawierała dłuższe FAQ, oczywiście jeżeli będziecie przysyłali pytania.
Tym mini-HOWTO opiekują się koordynatorzy HOWTO. Jest on wysyłany co miesiąc na grupę news comp.os.linux.answers i możesz go znaleźć w katalogu HOWTO na sunsite i jego mirrorach.
Inną drogą do odnalezienia tego HOWTO (w wersji oryginalnej) jest moja strona domowa: www.cli.di.unipi.it/~controzz/intro.html
Wielkie podziękowania dla:
Prawa autorskie do dokumentów Linux HOWTO posiadają ich autorzy. Dokumenty te mogą być reprodukowane i dystrybuowane w całości lub części, w mediach fizycznych lub elektronicznych, tak długo jak tak notka będzie załączona do dokumentu. Komercyjna dystrybucja jest dozwolona. Jednakże autor chciałby zostać poinformowany o takowej.
Wszystkie tłumaczenia, prace pochodne lub prace zebrane muszą zawierać notę o prawach autorskich. Oznacza to, że nie możesz stworzyć pracy pochodnej z tego dokumentu i obłożyć ją dodatkowymi restrykcjami dotyczącymi dystrybucji. Wyjątki od tej reguły, mogą być rozpatrzone w określonych warunkach. Proszę skontaktować się z koordynatorem HOWTO na adres podany poniżej.
Ogólnie biorąc, chcemy promować i szerzyć te informacje na wiele sposobów. Jednakże chcemy zachować prawa autorskie tych dokumentów i pragniemy być poinformowani o każdym sposobie ich dystrybucji.
Jeśli masz jakieś pytania, skontaktuj się z Greg'iem Hankins'em, koordynatorem HOWTO - gregh@sunsite.unc.edu
Tłumaczenie to chronione jest prawami autorskimi Bartka Papierskiego. Ogólne zasady dystrybucji są takie same jak w oryginalnym dokumencie.
Jeśli znajdziesz w tym dokumencie jakieś rażące Twoje oko błędy ortograficzne, gramatyczne, lub błędy w tłumaczeniu to skontaktuj się ze mną, a ja postaram się to naprawić: bartekp@dom.vr.pl
Najnowszą wersję tego dokumentu możesz znaleźć na oficjalnej stronie tłumaczeniowej http://www.jtz.org.pl. Najnowsze wersje przetłumaczonych przeze mnie dokumentów znajdziesz także na mojej stronie http://www.dom.vr.pl/~bartekp/howto/tlumaczenia.html
Oto zmiany jakie wprowadziłem w tym dokumencie:
/pub/Linux/sunsite/docs/HOWTO/mini.
PPP stał się standardowym protokołem sieciowym jeśli chodzi o
połączenia z Internet-em realizowane poprzez telefon. Odpowiedni
demon "pppd" dostarczany jest razem z bardzo prymitywnym
narzędziem do dzwonienia, które obsługuje dobrze tylko bardzo
proste ustawienia.
Opiszę tutaj alternatywne rozwiązanie na podstawie "minicom-a".
Dokument ten jest krótszą wersją niemieckiego "Internetanbindung mit PPP" www.uni-koeln.de. (Może kiedyś to przetłumaczę - tłumacz).
"minicom" jest bardzo wyrafinownym narzędziem służącym do dzwonienia do innych komputerów (dostawców internet-u lub BBS-ów). Ma fajne kolorowe menu, książkę telefoniczną i bardzo rozwinięty język skryptowy. Dlatego też idealnie nadaje się do użycia w połączeniu z "pppd".
Tak przy okazji: Jeśli użyjesz polecenia
/sbin/mgetty /dev/modem
to każdy, kto posiada konto na twoim komputerze może zadzwonić do ciebie (np. używając "minicom-a"). Ale to już inna historia. Przeczytaj dokumentację na temat "mgetty".
Jestem zainteresowany tylko tymi komentarzami, które wnoszą coś nowego do tego dokumentu. Nie będę odpowiadał na pytania ogólne dotyczące Linux-a, PPP, SLIP-a czy sieci.
W czasie pisania tego dokumentu, w programach "minicom" i "runscript" oraz w podanej niżej metodzie były błędy.
print "blah" ! sleep 10 print "blup"Ten skrypt kończy się natychmiast (ale nie jeśli jest śledzony poleceniem "strace").
Wyglada na to, że Miquel van Smoorenburg (autor "minicom-a") jest zbyt zajęty, żeby naprawić te błędy. Tak więc ochotnicy są mile widziani.
Wiele podręczników dotyczących PPP zaleca wyjść z minicom-a po dodzwonieniu się. Ale naprawdę nie ma potrzeby wychodzenia z tego wygodnego programu.
Wykonaj "minicom -s" i wybierz z menu "Serial port
setup". Pierwszą pozycją powinno być "Serial Device" - jest
to najważniejsze z ustawień: urządzenie szeregowe, do którego
podłączony jest twój modem. (Czy są jacyś ochotnicy, do przeróbki
minicom-a tak, żeby obsługiwał kilka urządzeń szeregowych na raz?)
Wciśnij <ENTER>, aby potwierdzić i <ESC>, aby wyjść do
pierwszego menu. Wybierz "Exit to minicom" i wpisz
"atdt99999". Twój modem od razu powinien zacząć wybierać numer
i powinieneś usłyszeć "kliknięcie" kiedy modem się
dodzwoni. Oczywiście "99999" to nie jest prawidłowy numer
telefonu.
Może już próbowałeś zadzwonić do swojego dostawcy Internet-u. Widziałeś takie dziwne znaczki na ekranie po zalogowaniu się (jeśli nie, to wpisz "ppp")? Są one wynikiem programu "ppp" (albo jakiegoś odpowiednika) uruchomionego na drugim końcu linii. Jeśli tak, to możesz uruchomić u siebie demon "pppd" i przeanalizować potem logi systemowe.
Aby uruchomić "pppd" w minicom-ie, możesz zdefiniować nową metodę ładującą (zobacz samemu jak to się robi) albo przedefiniować ustawienie "kermit program" z menu konfiguracyjnego "Filename and paths":
A - Download directory :
B - Upload directory :
C - Script directory :
D - Script program : /usr/bin/runscript
E - Kermit program : /usr/sbin/pppd file /etc/ppp/mini_options
Teraz jak zobaczysz te dziwne znaczki możesz wcisnąć <Alt-K>, aby uruchomić "pppd".
Reszta tego dokumentu zajmuje się automatyzacją logowania i uruchamiania "pppd".
Chociaż nie chcę wyjasniać jak ma być konfigurowane PPP, to pokażę
małą sztuczkę jak czytać logi. Aby wyciągnąć ważne dla nas
informacje z pliku "/var/log/debug" (albo alternatywnego
"/var/log/daemon.log") wykonaj polecenie:
tail -n 40 /var/log/debug |\
grep -E " pppd\[[0-9]*\]:" |\
sed -e "s/^.*pppd\[/[/"
Powinieneś zobaczyć coś takiego:
sent [LCP ConfReq id=0x1 <mru 296>]
rcvd [LCP ConfRej id=0x1 <mru 296>]
co pokazuje, że wysłaliśmy prośbę o konfigurację, aby ustawić
maksymalną jednostę do otrzymania (mru) na 296. Druga strona
odrzuciła naszą prośbę ("configuration rejected"). W tym
przypadku po prostu usunąłem opcję "mru" z pliku
"/etc/ppp/options".
Jeśli powyższe się udało, to może chcesz zapisać numer telefonu w książce telefonicznej "minicom-a". Wciśnij <Alt-D>, aby wybrać menu dzwonienia i wybierz "Edit":
A - Name : Xeno
B - Number : 022039697303
C - Dial string # : 1
D - Local echo : No
E - Script : /etc/ppp/login.script
F - Username : ppp-382
G - Password : top-secret
H - Terminal Emulation : VT102
I - Backspace key sends : Delete
J - Linewrap : Off
K - Line Settings : Curr 8N1
To jest przykładowa pozycja, której używam do dzwonienia do swojego
dostawcy Internet-u. Skrypt /etc/ppp/login.script jest
pokazany niżej. Dwie specjalne zmienne są przekazywane do tego
skryptu: $(LOGIN) i $(PASS), które są ustawione na
identyfikator użytkownika (F) i hasło (G). Ta cecha czyni minicom-a
trochę bardziej elastycznym, ponieważ potrzebujesz tylko jednego
skryptu, żeby zautomatyzować logowanie się do kilku dostawców.
"minicom" uruchamia skrypt logujący, po tym jak otrzyma łańcuch "CONNECT". A dokładniej, "minicom" nie wykonuje tego skryptu samemu, tylko woła do tego zadania narzędzie "runscript" jako podproces.
Poniżej znajduje się przykład jakiego używam dla swojego dostawcy.
# v1.0, 20.08.96 Winfried Trümper <winni@xpilot.org>
print ""
print "Automatic login via /etc/ppp/login.script"
## odkomentuj jeśli musisz wcisnąć <ENTER>, aby otrzymać prompt
#send ""
expect {
"ogin:"
"ogin>"
"sername:"
"sername>"
"NO CARRIER" exit 1
}
send "$(LOGIN)"
expect {
"assword:"
"assword>"
timeout 20
}
send "$(PASS)"
expect {
"port" send "ppp"
"Start your PPP now"
"}!}!}"
timeout 10
}
print ""
print "Now switching into ppp-mode ..."
print ""
! /usr/sbin/pppd file /etc/ppp/mini_options
print ""
print "the command killall -TERM pppd terminates pppd"
Możliwość wykonywania programów zewnętrznych przez "runscript"
używana jest do uruchamiania "pppd". Skopiuj swój oryginalny
plik z opcjami dla ppp do "/etc/ppp/options.ttyS1" (gdzie
"ttyS1" musisz zamienić na urządzenie, do którego dołączony jest
twój modem) i skasuj wszystkie linie, które są specyficzne dla
twojego modemu (takie jak: "connect", "crtscts" albo "modem") z
/etc/ppp/options.
Umieść opcje, które powinny być specyficzne dla połączenia ppp
przez minicom-a w pliku "/etc/ppp/mini_options". Jedną z
tych opcji powinno być
disconnect "chat '' '\d\d+++\d\dATH\r\c'"
Ta opcja MUSI być ponieważ "pppd" pobiera dane z "stdin" i nie może zawiesić modemu poleceniem "crtscts".
Użyj opcji "-d", aby dzwownić pod wskazany numer od razu po
uruchomieniu minicom-a.
Możesz też spróbować
open -sl -- minicom -d 1
Aby wrzucić minicom-a na inną konsolę - zobacz mini-HOWTO Consoles-Many.
Ponieważ "pppd" jest demonem, więc nie jest on przeznaczony do działania w interakcji czy obserwacji. I to jest w porządku. Przecież używamy systemy "unixowego", nie ?
Standardowym rozwiązaniem jest jakiś "front-end". Są jacyś chętni, do grzebania się z minicom-em?
Fajnymi rozszerzeniami byłyby:
Koniec.
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:
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 sie na nią zapisać, to
wyślij list o treści subscribe jtz Imię Nazwisko na adres
listproc@ippt.gov.pl
doc-linux-pl-2002.06.14.orig/mini/html/Programming-Languages.pl.html 0100664 0001750 0001750 00000036452 07457640740 024006 0 ustar coven coven
Najnowsza wersja tego dokumentu dostępna jest pod adresem http://www.helsinki.fi/~rvaranka/Computer/Linux/HOWTO/.
Copyright (c) 2000 Risto Varanka.
Omówione tu warunki używania dotyczą wszystkich dokumentów LDP, o ile w danym dokumencie nie stwierdzono inaczej. Dokumenty LDP można kopiować i rozpowszechniać w całości lub w części za pomocą dowolnego fizycznego lub elektronicznego medium pod warunkiem, że niniejsza licencja nie jest usunięta. Rozpowszechnianie komercyjne jest dozwolone. W przypadku rozpowszechniania proszę miesiąc wcześniej skontaktować się pocztą elektroniczną z autorami w celu uzyskania najnowszej wersji tekstu.
Wszelkie zmodyfikowane wersje dokumentów, w tym tłumaczenia, antologie oraz dokumenty rozpowszechniane w części muszą spełniać następujące warunki:
Dodatkowe wymagania:
Antologie dokumentów LPD mogą wyjątkowo zawierać w widocznym miejscu pojedynczą kopię tej licencji. W takich przypadkach treść licencji zawartej w dokumentach można zastąpić informacją o jej lokalizacji w antologii; wówczas zmiany w niniejszej sekcji nie nadają dokumentowi statusu tekstu zmodyfikowanego.
Umieszczenie dokumentów LPD na wspólnym nośniku z innymi dokumentami bądź programami nie powoduje objęcia owych innych prac niniejszą licencją.
Wszelkie tłumaczenia, modyfikacje i teksty wywodzące się z dokumentów LDP nie mogą mieć bardziej restrykcyjnej licencji niż niniejsza. Wyjątkiem jest możliwość wymagania od dystrybutorów udostępniania wersji źródłowych dokumentów.
DOKUMENT NINIEJSZY OPISUJE SZEROKĄ I STALE ZMIENIAJĄCĄ SIĘ DZIEDZINĘ WIEDZY. DLATEGO INFORMACJE ZAWARTE W TYM TEKŚCIE MOGĄ BYĆ BŁĘDNE LUB NIEAKTUALNE. JAKIEKOLWIEK UŻYCIE TEGO DOKUMENTU I ZAWARTYCH W NIM INFORMACJI MOŻE ODBYWAĆ SIĘ WYŁĄCZNIE NA WŁASNE RYZYKO UŻYTKOWNIKA. AUTOR NIE DAJE ANI NIE SUGERUJE ŻADNYCH GWARANCJI.
Adres poczty elektronicznej:
mailto:risto.varanka@helsinki.fi
Strona domowa:
http://www.helsinki.fi/~rvaranka/.
Chciałbym podziękować osobom, które wypowiedziały się na temat języków programowania. Rozmowy te dały mi lepszą orientację w temacie, mam też nadzieję, że reakcje czytelników w przyszłości przyczynią się do rozwoju niniejszego dokumentu. Podziękowania swoje kieruję szczególnie do użytkowników kanału #linux: Morphiego, Bluesmurfa, Vadima, Zonk^a, Rikkusa i wielu innych, których nicki zapomniałem. Dziękuję też Stigowi Erikowi Sandoe za pomocne uwagi.
Linux jest fascynującym systemem, ponieważ każdy może uczestniczyć w jego rozwijaniu. Czasem jednak różnorodność dostępnych języków programowania może powodować zagubienie początkującego programisty. Niniejszy dokument opisuje najbardziej typowe z tych języków. Nie jest moim celem pisanie recenzji ani układanie ich rankingu. Każdy język na swoje zastosowania i zwolenników. Jeśli interesujesz się tematem, łatwo możesz natrafić na sprzeczne informacje. Znajdujące się w tym dokumencie odnośniki skierują cię do źródeł, dzięki którym będziesz mógł wyrobić sobie własną opinię.
Języków programowania i bibliotek do tworzenia GUI pod Linuksem jest zatrzęsienie. Dokument ten ogranicza się tylko do aktualnie najpopularniejszych z nich. Starałem się być neutralny, ale nie byłem w stanie wspomnieć tu o wszystkich dostępnych językach. Ponieważ moje opinie z pewnością są w taki czy inny sposób stronnicze, osobom poważnie podchodzącym do tematu proponuję zajrzenie na strony bardziej kompletnie go wyczerpujące. Pamiętaj też, że w niniejszym tekście omówione są tylko linuksowe wersje danych języków i narzędzi; nie wspominam o ich możliwościach dostępnych w wersjach na inne platformy.
Dokument niniejszy dopiero niedawno trafił do zasobów Linux Documentation Project, czytelnicy nie mieli więc póki co wiele czasu na wyrażenie swoich opinii. Mam jednak nadzieję, że tekst ten przyda się osobom (szczególnie początkującym) interesującym się programowaniem pod Linuksem.
Znak zapytania w tabelach oznacza brak informacji. Skontaktuj się z autorem, jeśli je posiadasz.
Wyczerpujące listy języków i narzędzi programistycznych dla Linuksa:
Interesującym, szczególnie dla początkujących programistów, tekstem jest Hacker FAQ napisane przez Erica S. Raymonda. Dokument ten traktuje o kulturowych i psychologicznych aspektach pracy nad rozwojem oprogramowania wolnodostępnego.
Innymi zajmującymi się tematem programowania dokumentami LDP są "Reading List HOWTO" oraz "Linux Programmer's Guide". Oprócz nich dostępny jest szereg tekstów poświęconych bardziej szczegółowym zagadnieniom.
Tradycyjnie w GNU/Linuksie używanymi językami są C, Lisp i Perl. Ostatnio do grupy tej dołączyły Python, PHP, Java i C++.
Powszechnie używana nazwa języka.
Czy język jest dobrym wyborem dla początkującego programisty?
Jak szybko aplikacje będą w praktyce działać. W zasadzie zależy to bardziej od jakości ułożonego przez programistę algorytmu, niż od samego języka. Generalnie przyjmuje się, że języki C, C++ i Fortran oferują większą szybkość niż ich alternatywy. Wszystko zależy jednak od celu, jaki chcemy osiągnąć: czasem języki te mogą okazać się bardziej nieporęczne od innych. (Mam pomysł na mało naukowe porównanie języków: należy napisać w każdym z nich prosty algorytm sortujący i porównać czas jego wykonania. To oczywiście nie zmierzy szybkości samych języków -- taki pomysł byłby bez sensu -- a jedynie ich implementacji. Nie jest to również szczególnie niezawodna ani dokładna metoda, pozwala jednak porównać szybkość wykonania zadania. Ktoś chce spróbować?)
Programowanie obiektowe jest ważną i coraz bardziej popularną metodą tworzenia aplikacji. W tym modelu struktury danych i algorytmy połączone są w jednostki zwane klasami. OOP przeciwstawia się często programowaniu proceduralnemu (w którym używa się oddzielnych algorytmów i struktur danych). Nie jest to wyłącznie kwestia języka; można programować obiektowo w językach nie opisanych jako obiektowe, i odwrotnie: proceduralnie w językach obiektowych. Jako języki obiektowe wymieniłem te, które takie programowanie ułatwiają różnymi dodatkami. Języki funkcjonalne (np. Lisp) to jeszcze inna sprawa, bowiem programowanie funkcjonalne jest nadzbiorem obiektowego. Z drugiej strony programowania logicznego (np. Prolog), zwanego także programowaniem deklaratywnym, nie można w podobny sposób odnieść do innych modeli programowania.
Zależy bardziej od używanych narzędzi niż języka. Istnieje dokument HOWTO omawiający narzędzia ułatwiające tworzenie GUI pod Linuksem, jest jednak przestarzały. Dobre narzędzie znacznie przyspiesza prace nad graficznym interfejsem użytkownika, umożliwia także prace nad istniejącym już kodem; wolnodostępne oprogramowanie jest tu więc doskonałym punktem wyjścia.
Domeny programowania, w których dany język jest najczęściej używany. Istnieją także inne, mniej lub bardziej sensowne zastosowania języka, są jednak mniej typowe.
Dodatkowe informacje o języku, np. jego możliwości lub odmiany.
Perl Początkujący: tak - OOP: tak Zastosowania: Skrypty, administracja systemem, WWW Uwagi: Doskonały do przetwarzania tekstów Python Początkujący: tak - OOP: tak Zastosowania: Skrypty, skrypty do aplikacji, WWW Uwagi: TCL Początkujący: tak - OOP: nie Zastosowania: Skrypty, administracja systemem, aplikacje Uwagi: PHP Początkujący: tak - OOP: tak Zastosowania: WWW Uwagi: Używany przy tworzeniu sieciowych baz danych Java Początkujący: tak - OOP: tak Zastosowania: Programy działające na wielu platformach systemowych, WWW Uwagi: Zakres zastosowań rozszerza się (np. handel elektroniczny) Lisp Początkujący: tak - OOP: funkcjonalny Zastosowania: Tryby Emacsa (Elisp), AI (Sztuczna inteligencja) Uwagi: Odmiany: Elisp, Clisp i Scheme Fortran Początkujący: nie - OOP: nie Zastosowania: Aplikacje matematyczne (naukowe) Uwagi: Odmiany: f77 i f90/95 C Początkujący: nie - OOP: nie Zastosowania: Oprogramowanie systemowe, aplikacje Uwagi: C++ Początkujący: nie - OOP: tak Zastosowania: aplikacje Uwagi:
Powłoki są również ważnym środowiskiem programistycznym. Nie omawiam ich,
ponieważ nie zrozumiałem jeszcze dokładnie całości tematu. Znajomość powłok
jest istotna dla wszystkich używających regularnie Linuksa, szczególnie
administratorów. Istnieje wiele podobieństw między programowaniem w szelu i
pisaniem skryptów w innych językach -- często osiągnąć można identyczne
rezultaty, wybór jest więc wolny. Do najpopularniejszych powłok należą bash,
tcsh, csh, ksh i zsh. Podstawowe informacje o nich znajdują się w podręczniku
systemowym (użyj polecenia man, np. man bash).
Inne warte zauważenia języki to: AWK, SED, Smalltalk, Eiffel, Ada, Prolog, asembler, Objective C, Logo, Pascal (konwerter p2c).
Standardowym środowiskiem graficznym w systemach Unix i Linux jest posiadający swoje własne biblioteki GUI X Window System. Biblioteki te umożliwiają niskopoziomowe tworzenie graficznych aplikacji dla X, bywają jednak trudne w użyciu. Wykorzystuje je głównie starsze oprogramowanie, dziś graficzne aplikacje tworzy się raczej w oparciu o biblioteki GTK+ i Ot -- to na nich oparte są dwa najpopularniejsze duże środowiska graficzne dla Linuksa: GNOME i KDE.
Powszechnie używana nazwa biblioteki
Czy biblioteka nadaje się dla początkującego programisty?
Poszczególne narzędzia opatrzone są różnymi licencjami. Licencje GTK+, TK i GNUstep pozwalają na bezpłatne tworzenie zarówno wolnodostępnego, jak i zamkniętego oprogramowania. Licencja Motifa jest płatna, a licencja Qt jest płatna tylko w przypadku tworzenia oprogramowania zamkniętego.
Język najczęściej używany z daną biblioteką.
Inne języki, których również można używać z daną biblioteką.
Programy korzystające z biblioteki.
Dodatkowe informacje.
Biblioteka: TK
Początkujący: tak
Licencja: darmowa
Język: TCL
Inne jęz: Perl, Python, inne
Zastosowania: make xconfig, TKDesk
Uwagi:
Biblioteka: GTK+
Początkujący: nie
Licencja: darmowa (LGPL)
Język: C
Inne jęz: Perl, C++, Python, wiele innych
Zastosowania: GNOME, Gimp
Uwagi: Bardzo popularna
Biblioteka: QT
Początkujący: nie
Licencja: darmowa przy rozwijaniu oprogramowania wolnodostępnego
Język: C++
Inne jęz: Python, Perl, C, inne?
Zastosowania: KDE
Uwagi: Bardzo popularna
Biblioteka: Motif
Początkujący: nie
Licencja: płatna
Język: C/C++
Inne jęz: Python, inne?
Zastosowania: Netscape, Wordperfect
Uwagi: Darmowy odpowiednik: Lestiff (http://www.lesstif.org/)
Biblioteka: GNUstep
Początkujący: nie
Licencja: darmowa (LGPL)
Język: Objective C
Inne jęz: Guile, Java?
Zastosowania: Żadna z popularnych aplikacji
Lista aplikacji: http://www.gnustep.org/resources/apps.html
Uwagi: Wciąż w trakcie rozwoju
Zmiany w stosunku do oryginału: Podział pierwszego rozdziału na dwie tematyczne sekcje ("Formalności" i "Wstęp") oraz przeformatowanie spisu najważniejszych bibliotek.
Wersja oryginalna dokumentu:
http://sunsite.unc.edu/LDP/.
Tłumaczenia pozostałych dokumentów HOWTO na język polski:
http://www.jtz.org.pl/.
Copyright for the translation:
(c) 2001 by Tomasz 'tsca' Sienicki, tsca@edb.dk
doc-linux-pl-2002.06.14.orig/mini/html/Quota.pl.html 0100664 0001750 0001750 00000027576 07104371340 020702 0 ustar coven coven
Jest to pakiet umożliwiający limitowanie zużycia dysków na dwa sposoby: ilość węzłów jaką można przydzielić użytkownikowi; ilość bloków dysku jaką można przydzielić użytkownikowi.
Podstawową ideą Quoty jest to, że użytkownicy zmuszani są do ograniczenia swoich zasobów i co za tym idzie odebranie im ich zdolności do zabierania nieskończonej ilości pamięci dyskowej.
Obsługa Quoty została zintegrowana z jądrem od wersji 1.3.8x i jest także w wersji 2.0. Jeśli twój system nie obsługuje Quoty, to proponuje go uaktualnić.
Obecnie Quota działa tylko dla systemu plików ext2.
/pub/Linux/kernel./pub/Linux/sunsite/system/admin/.
/pub/Linux/sunsite/system/admin/.
# Sprawdź quotę i włącz ją
if [ -x /usr/sbin/quotacheck ]
then
echo "Checking quotas. This may take some time."
/usr/sbin/quotacheck -avug
echo " Done."
fi
if [ -x /usr/sbin/quotaon ]
then
echo "Turning on quota."
/usr/sbin/quotaon -avug
fi
/etc/fstab zostały zamontowane, bo
inaczej quota nie będzie działać. Zalecam włączanie quoty na końcu
pliku inicjalizującego twój system, albo jeśli wolisz, zaraz po
fragmencie kiedy twoje systemy plików są montowane./etc/fstab
/dev/hda1 / ext2 defaults 1 1
/dev/hda2 /usr ext2 defaults 1 1
Aby dodać quotę do systemu plików, dodaj usrquota do czwartego
pola zawierającego default: (szczegóły w man fstab)
/dev/hda1 / ext2 defaults 1 1
/dev/hda2 /usr ext2 defaults,usrquota 1 1
Zamień usrquota na grpquota jeśli potrzebujesz
ograniczenia dla grup.
/dev/hda1 / ext2 defaults 1 1
/dev/hda2 /usr ext2 defaults,grpquota 1 1
A może potrzebujesz ograniczeń i dla użytkowników i dla grup?
/dev/hda1 / ext2 defaults 1 1
/dev/hda2 /usr ext2 defaults,usrquota,grpquota 1 1
quota.userquota.user, powinien należeć do
"root-a" oraz zapis i odczyt do niego powinien mieć także tylko
"root".
Zaloguj się jako "root". Przejdź do podstawowego katalogu na
partycji, którą chcesz objąć quotą i stwórz plik quota.user:
touch /partycja/quota.user
touch /partycja/quota.group
chmod 600 /partycja/quota.user
chmod 600 /partycja/quota.group
Operację tę wykonuje się poleceniem edquota (szczegóły
man edquota).
Normalnie uruchomiłbym quotacheck z opcjami -avug, aby
zyskać jak najaktualniejszy obraz systemu plików, przed edycją
plików quoty. Jest to jednak tylko moje przyzwyczjenie a nie
wymagany krok.
Oto przykład. Mam użytkownika, którego login to bob.
Polecenie edquota bob uruchomi edytor vi (lub ten podany
w zmiennej $EDITOR), w którym będzie można edytować limit dla
użytkownika bob dla każdej partycji, na której jest włączona
quota:
Quotas for user bob:
/dev/hda2: blocks in use: 2594, limits (soft = 5120, hard = 6400)
inodes in use: 356, limits (soft = 1000, hard = 1500)
"blocks in use" - jest całkowitą ilością bloków (w kilobajtach) jaką
zużył dany użytkownik.
"inodes in use" - jest całkowitą liczbą plików jaką użytkownik ma na
dysku.
Teraz mam grupę games. Polecenie edquota -g games
znowu uruchamia edytor vi, aby edytować limity dla tej grupy:
Quotas for group games:
/dev/hda4: blocks in use: 5799, limits (soft = 8000, hard = 10000)
inodes in use: 1454, limits (soft = 3000, hard = 4000)
Aby za jednym zamachem ustawić limit dla, powiedzmy 100 użytkowników, taki sam jak dla boba, najpierw trzeba ustawić ręcznie limity dla boba, a potem wykonać polecenie:
edquota -p bob `awk -F: '$3 > 499 {print $1}' /etc/passwd`
zakładając, że używasz powłoki csh i że twoi użytkownicy mają numery UID zaczynające się od 500.
Dodatkowo są jeszcze trzy inne terminy, z którymi powinieneś się
zapoznać: Soft Limit, Hard Limit i Grace Period.
edquota -t.
Jednostkami czasu mogą być: sekundy, minuty, godziny, dni, tygodnie
lub miesiące. Oto co zobaczysz po wydaniu polecenia edquota -t:
Time units may be: days, hours, minutes, or seconds
Grace period before enforcing soft limits for users:
/dev/hda2: block grace period: 0 days, file grace period: 0 days
Program ten jest używany do analizowania systemu plików ze względu
na bieżące zużycie i uaktulaniania zapisu w pliku
quota.user. Zalecam uruchamianie tego programu co jakiś
okres czasu poprzez crontab oraz podczas startu systemu.
Program ten podaje sumaryczne wiadomości dotyczące aktualnego zużycia systemu plików. Przykładowe wyjście tego polecenia może wyglądać tak:
# repquota -a
Block limits File limits
User used soft hard grace used soft hard grace
root -- 175419 0 0 14679 0 0
bin -- 18000 0 0 735 0 0
uucp -- 729 0 0 23 0 0
man -- 57 0 0 10 0 0
user1 -- 13046 15360 19200 806 1500 2250
user2 -- 2838 5120 6400 377 1000 1500
Pierwszy z tych dwóch programów służy do włączania quoty, a drugi do wyłączania. Właściwie oba pliki są podobne. Są wykonywane podczas startu systemu i jego zamknięcia.
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:
Napewno znajdziesz tu jakieś niejasne i niepolskie konstrukcje. Jeśli wpadniesz na lepszy pomysł daj mi znać.
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 /pub/Linux/JTZ/.
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 sie na nią zapisać, to
wyślij list o treści subscribe jtz Imię Nazwisko na adres
majordomo@ippt.gov.pl
doc-linux-pl-2002.06.14.orig/mini/html/Saving-Space.pl.html 0100664 0001750 0001750 00000030413 07457640740 022067 0 ustar coven coven
Posiadam laptopa, na którym obok fabrycznie dołączonego Windows 95 zainstalowałem Linuksa. Zajmowaną przez Windows przestrzeń dyskową ograniczyłem do 500 MB, co dało mi 240 MB wolnego miejsca. Niby niewiele, a jednak dzięki rozsądnej gospodarce wolną przestrzenią zmieściłem tam w pełni funkcjonalną instalację Linuksa (Red Hat 4.1).
Jeśli brakuje ci wolnej przestrzeni na twardym dysku, wykorzystaj informacje zawarte w niniejszym dokumencie -- pomogą ci one znacznie zwiększyć jej ilość. Zanim jednak przejdziemy do rzeczy, muszę cię ostrzec: nie obwiniaj mnie, jeśli coś pójdzie nie tak. Niektóre z wykorzystywanych w procedurze odzyskiwania wolnego miejsca programów mogą być niebezpieczne pomimo, iż sprawdziły się u mnie.
Potrzebować będziesz:
gzip
lub jego zamiennika: bzip2.
bzip2
kompresuje lepiej, niż gzip,
jest jednak nieco powolniejszy i zużywa mnóstwo pamięci.
Oba te programy znajdziesz pod adresem
ftp://sunsite.unc.edu:/pub/Linux/utils/compress,upx
dostępnego pod adresami
http://cdata.tvnet.hu/~ml/upx.html oraz
http://wildsau.idv.uni-linz.ac.at/mfx/upx.html,zlibc
dostępnego pod adresem
ftp://sunsite.unc.edu:/pub/Linux/libs/compression.
Plik nazwany jest zlibc-X.X.tar.gz,
gdzie X.X
jest numerem najnowszej wersji programu.Istnieją też inne programy do kompresji plików wykonywalnych. Jednym z nich jest gzexe
-- najlepiej od razu o nim zapomnij. tcx
był niezły, został jednak zdetronizowany przez upx.
Kolejny program, tzx,
teoretycznie powinien sprawować się nawet lepiej, niż tcx.
Niestety, kompletnie zawiódł podczas prób, które przeprowadziłem na zapasowym
komputerze; być może z mojej winy. Najlepiej użyj więc upx
-- jest to program sprawdzony, wydajny i wygodny.
Istnieją łatki umożliwiające jądru obsługę skompresowanych systemów plików "w locie", jednak w momencie pisania tego tekstu żadna z nich nie cieszy się opinią stabilnej i bezpiecznej. Najbezpieczniej jest trzymać się od nich z daleka.
Źródła jądra zajmują ponad 20 MB, możesz więc rozważyć ich usunięcie. Jeśli się na to zdecydujesz, proponuję, żebyś najpierw raz a dobrze skompilował jądro odpowiednie dla twojego komputera; potem możesz źródła skasować. Ale uważaj:
Nie kasuj źródeł jądra dopóki nie jesteś pewien, że twój system jest prawidłowo skonfigurowany. Pamiętaj również, że kompilacja programów napisanych w C wymaga plików nagłówkowych (#include) jądra. Przemyśl to!
Kasując źródła jądra oszczędź katalog include/linux/, chyba, że jesteś pewien, że nigdy niczego nie będziesz na swoim komputerze kompilował.
Teraz musisz zadecydować, których programów naprawdę
potrzebujesz. Niektóre aplikacje mogą okazać się w twoim przypadku zbędne;
na przykład zastanów się, czy naprawdę musisz mieć na dysku emacsa?
Zamiast niego możesz używać jeda.
Decyzja należy do Ciebie; przed jej podjęciem rozważ następujące fakty:
gcc
jest bardzo dużym pakietem używanym do kompilowania jądra oraz
wszelkich aplikacji, które rozprowadzane są w formie kodów źródłowych.
Pakiet ten jest oczywiście również niezbędny, jeśli piszesz własne
programy w C lub Fortranie (z f2c lub g77).
Zastanów się nad swoimi potrzebami, zanim usuniesz gcc.
Alternatywne kompilatory, jak np. lcc
też są niezłe, ale ustępują gcc.
Podsumowując, proponuję pozostawić ten pakiet na dysku.
xterm,
usuń czcionki 100 dpi, itd.
xdvi czy ghostview.
Zamiast nich użyj programów dvitty, dvivga
i podobnych. Przy okazji zastanów się: skoro nie używasz X do
przeglądania dvi, może wcale tego pakietu nie potrzebujesz...?Rozpoczynamy proces zmniejszania wielkości plików binarnych. Wejdź do katalogu /usr/bin i wydaj w nim polecenie:
/usr/bin# strip *
Usunie to symbole z plików binarnych. Powtórz ten krok w /usr/X11R6/bin/ i pozostałych zawierających binarne pliki wykonywalne katalogach (nie zapomnij też odnaleźć binariów pakietów TeX i gcc).
Jeśli cenisz sobie swój system, nie wykonuj tego polecenia w katalogach /sbin, /bin ani /usr/sbin/ !
Rozpocznij od zainstalowania pakietu upx
i przeczytania jego dokumentacji. Następnie wejdź do katalogu
/usr/bin i wykonaj w nim polecenie
/usr/bin# upx *
Skompresuje to wszystkie pliki wykonywalne, w tym te z suid (txc
nie poradziłby sobie z tym). Powtórz ten krok w kolejnych katalogach według
opisu zawartego w poprzednim podrozdziale.
Pamiętaj o kompresowaniu plików wykonywalnych pojawiających się po instalacji nowego oprogramowania!
W systemie znajduje się mnóstwo plików, które możesz raz na zawsze skompresować. Rozpocznij od wejścia do katalogu /usr/doc/ (od tłumacza: w nowszych dystrybucjach jest to /usr/share/doc/) i wydaj w nim polecenie:
/usr/doc# find . -type f -exec gzip -9 {} \; 2> /dev/null
Pamiętaj o kompresowaniu dokumentów dołączanych do później instalowanych programów!
Powtórz ten krok w katalogu zawierających dokumentację systemu TeX (u mnie jest to /usr/lib/texmf/texmf/doc/).
Jeśli naprawdę wiesz, co robisz, możesz katalogi z dokumentacją całkowicie skasować.
Zainstaluj teraz program zlibc
i skompiluj go. Jeśli twój system przypomina mój, podczas kompilacji
zobaczysz komunikaty o braku statycznej biblioteki libc. Nie przejmuj
się: jest to kwestia odnalezienia pliku uncompress.o,
przeniesienia go do /usr/local/lib/ i dodania następującej linii
do pliku /etc/profile:
export LD_ELF_PRELOAD=/usr/local/lib/uncompress.o
Dzięki powyższemu będziesz teraz mógł kompresować gzipem nie tylko dokumentację, ale również pliki z wykorzystywanymi przez różne programy danymi; programy będą nadal mogły ich używać. Teoretycznie sztuczka ta powinna działać z większością aplikacji, praktycznie nie zawsze tak jest -- w moim przypadku sukces nie był oszałamiający.
Oto co ja osiągnąłem zastosowawszy wyżej opisaną procedurę. Przed rozpoczęciem
operacji system wg df zajmował 398.798 bloków 1024.
upx
pliki znajdujące się katalogach /usr/bin,
/usr/X11R6/bin, /usr/lib/texmf/bin/i586-linux
oraz /usr/lib/gcc-lib/i386-linux/2.7.2.1.
Zajętych bloków: 226.270.
Liczba zajętych bloków przed rozpoczęciem operacji: 398.798, po jej
zakończeniu: 198.745. Uzyskałem 200.000 wolnych bloków! A gdybym użył
bzip2 zamiast gzipa,
wolnych bloków byłoby jeszcze więcej.
Jeśli od samego początku działasz świadomie, instalując wyłącznie niezbędne aplikacje i kompresując pliki wykonywalne i dokumentację, oszczędzisz około 20 MB. W przypadku laptopów jest to znacząca liczba.
O ile nie zaznaczono inaczej dokumenty HOWTO chronione są prawami autorskimi należącymi odpowiednio do ich autorów. Zezwala się na powielanie i dystrybucję tych dokumentów w całości lub w części na jakimkolwiek fizycznym bądź elektronicznym nośniku pod warunkiem pozostawienia na wszystkich kopiach niniejszej informacji o prawach autorskich. Zezwala się i zachęca do redystrybucji komercjalnej; autor jednak życzy sobie być powiadamiany o każdej z takiej dystrybucji.
Niniejsze prawa autorskie dotyczą również wszelkich tłumaczeń, prac pochodnych, składających się z, lub zawierających jakiekolwiek dokumenty HOWTO. Oznacza to, że niedozwolone jest stworzenie pracy pochodnej od dokumentu HOWTO i nałożenie dodatkowych ograniczeń na jej dystrybucję. W pewnych szczególnych okolicznościach możliwe są odstąpienia od tych zasad. Po bliższe informacje należy skontaktować się z koordynatorem projektu Linux HOWTO pod adresem podanym poniżej.
W skrócie: chcemy promować rozprzestrzenianie się podanych tu informacji poprzez możliwie wiele kanałów. Zatrzymujemy jednak prawa autorskie do dokumentów HOWTO i chcielibyśmy być informowani o jakichkolwiek planach redystrybucji tych dokumentów.
W przypadku pytań skontaktuj się z koordynatorem projektu Linux HOWTO Timem Bynymem, tjbinum@sunsite.unc.edu.
Autorem niniejszego dokumentu jest Guido Gonzato, REMOVE_MEguido@ibogeo.df.unibo.it.
Dokument ten jest udostępniony 'jak jest'. Starałem się napisać go jak najlepiej, jednak wszelkich zawartych tu informacji możesz użyć tylko na własne ryzyko. Nie ponoszę odpowiedzialności za żadne szkody wynikłe z zastosowania tych informacji.
Ucieszą mnie wszelkie reakcje: prośby, sugestie, wyzwiska, itd.
Ciesz się Linuksem i życiem,
Guido =8-)
Wersja oryginalna niniejszego dokumentu znajduje się pod adresem http://sunsite.unc.edu/LDP/.
Tłumaczenia pozostałych dokumentów HOWTO na język polski:
http://www.jtz.org.pl.
Copyright for the translation
(c) 2001 by Tomasz 'tsca' Sienicki, tsca@edb.dk
doc-linux-pl-2002.06.14.orig/mini/html/Sendmail+UUCP.pl.html 0100664 0001750 0001750 00000041322 07104371340 022076 0 ustar coven coven
Jak ustawić pojedynczy komputer zwany tutaj ja.pl bez bezpośredniego dostępu do Internetu, aby przesyłał pocztę przy pomocy sendmail-a do "sprytniejszego hosta" np. twojego dostawcy Internetu. Opcjonalnie możesz skonfigurować swój komputer, aby obsługiwał pocztę dla innych, czyli ty będziesz "sprytnijeszym hostem" czy gateway-em".
Dostawałem niewiarygodną ilość pytań dotyczących następujących tematów. Celem tego dokumentu nie jest ich opis, więc postarajcie się proszę nie przsyłać mi takich pytań:
[po polsku] (Vince Skahan,
vince@halcyon.com)[jest także po polsku:
Administracja siecią TCP/IP lub jakoś tak.][jest także po polsku:
Administracja siecią TCP/IP lub jakoś tak.]Możesz także znaleźć pomoc na tych grupach dyskusyjnych:
[po polsku]Na IRC-u też. Kanały: #linux, #unix, #plug [po polsku].
Dokument ten dotyczy systemów, które przesyłają pocztę poprzez
UUCP. "mysmarthost" jest nazwą hosta ISP, tak jak jest to
ustawione w pliku konfiguracyjnym (sys file) uucp a "ja.pl" to
nazwa hosta, którego używamy. "mysmarthost" ma dostęp do
Internet-u. Tak naprawdę nie obchodzi nas jak - po prostu wiemy,
że ma i już.
ja.pl, którego ustawienia opiszemy w przykładzie, obsługuje pocztę
dla down.pl i system1.org.pl i ich poddomen.
ja.pl łączy się z down.pl poprzez TCP/IP a z system1.org.pl
czystym UUCP poprzez linię telefoniczną.
Sytuacja pokazana jest na poniższym obrazku:
-----------------------
| |
| Internet |
| |
-----------------------
|
| Linia dedykowana/PPP z protokołem TCP/IP
|
-------------
| |
| mysmarthost | Autorytatywny nameserver dla
| | *.ja.pl, *.down.pl, *.system1.org.pl
-------------
|
| UUCP otrzymuje pocztę przez linię telefoniczną dla
| system1.org.pl, *.system1.org.pl,*.down.pl, down.pl
| jak również dla ja.pl and *.ja.pl
------------
| * ***** * |
------------ | * ja.pl * | ------
| | * ***** * | |
| ------------ |
|UUCP poprzez linię tel. | UUCP poprzez TCP/IP
| |
-------------- -------------
| | | |
|system1.org.pl| | down.pl |-----
| | | | |
------------- --------- |
| |
| |
| | LAN: smtp dla poszczególnych odbiorców
| Linia tel UUCP |
| |
---------------- -----------
| LAN | | LAN |
| system1.org.pl | | down.pl |
| | -----------
----------------
Jeśli masz system używający uucp dla poczty, to właściwie nie musisz
wkompilowywać bind-a/resolvera do sendmail-a.
Upewnij się, że masz makemap-a, i że obsługuje on "hash" i bardziej popularne formaty "dbm" czy nawet format "btree" (Wersja na RedHat-a nie obsługuje dbm). Makemap jest normalnie dystrybuowany z sendmail-em.
Jeśli dostaniesz pre-kompilowanego sendmail-a z dołączonym bind-em, to możesz z nim dalej żyć (Tak jak to jest w RedHat-cie).
src/conf.htak, żeby wyglądał tak:
conf.h:# ifndef NAMED_BIND conf.h:# define NAMED_BIND 0 /* use Berkeley Internet Domain Server */
Normalnie sendmail będzie koniecznie chciał sprawdzić nazwę, aby rozwinąć część dotyczącą host-u przy pomocy gethostbyaddr() dla każdego listu, który wysyła (nawet jeśli go poinformujesz żeby nie kanonifikował nazw).
/etc/hosts i dodaj następującą linię,
jako przykład dla "myhost"
10.0.0.1 myhost.ja.pl myhost
/etc/nsswitch.conf zawiera:
hosts: files dnsi w pliku
/etc/hosts i dodaj poniższą linię jak przykład dla
host-a myhost: [cały czas używając schematu z RFC1597]
10.0.0.1 myhost.ja.pl myhost
UWAGA:
W obu przypadkach ważne jes, aby podać pełny adres w pliku /etc/hosts.
Czyli linia powinna wyglądać tak:
10.0.0.1 myhost.ja.pl myhost
a nie tak
10.0.0.1 myhost
Będziesz musiał także zdefiniować makro sendmail-a - $w, aby
zawierało myhost.ja.pl. Dodaj następującą linijkę do swojego
pliku /etc/sendmail.cf jak już zostanie wygenerowany:
Dwmyhost.ja.pl
(albo możesz użyć użyć MASQUAREADE_AS(myhost.me.com) w poniższym pliku .mc)
UWAGA !!! myhost jako nazwa domeny jest podane tylko przykładowo; nie musisz używać takiej samej nazwy. Wybierz sobie jakąś swoją nazwę host-a jeśli jej jeszcze nie masz.
.mc używając ulubionego edytora; nazwę ten
plik my.mc
============== plik my.mc ======================= include(`../m4/cf.m4') VERSIONID(`me.com's setup with uucp created by xxxx')dnl OSTYPE(linux) FEATURE(nodns)dnl FEATURE(nocanonify)dnl FEATURE(always_add_domain)dnl FEATURE(mailertable, hash /etc/mailertable)dnl MAILER(local)dnl MAILER(smtp)dnl MAILER(uucp) define(`SMART_HOST', uucp-dom:mysmarthost) ===============================================
include(`../m4/cf.m4')
../m4/cf.m4, aby zrobiło za nas
parę rzeczy.
VERSIONID(`me.com's setup with uucp created by xxxx')dnl
OSTYPE(linux)
FEATURE(nodns)dnl
FEATURE(nocanonify)dnl
$[ ... $] do
kanonizacji. Normalnie, jeśli masz wkompilowanego bind-a, to sendmail próbowałby i
rozwiązałby alias/adres IP na nazwę kanoniczną używając DNS-a.FEATURE(always_add_domain)dnl
FEATURE(mailertable, hash /etc/mailertable)dnl
/etc/mailertable będzie bazą danych typu "hash", gdzie
będziemy zapisywać informacje dotyczące routingu pewnych adresów. Jeśli nie
masz nikogo, do kogo masz podłączone linie uucp, to nie potrzebujesz tego.
Więcej informacji będzie później.
Jeśli chciałeś użyć formatu "dbm", to miałbyś
FEATURE(mailertable, dbm /etc/mailertable)dnl
FEATURE(mailertable, btree /etc/mailertable)dnl
MAILER(local)dnl MAILER(smtp)dnl MAILER(uucp)
define(`SMART_HOST', uucp-dom:mysmarthost)
sendmail.cf
/etc/sendmail.cfm4 my.mc > /etc/sendmail.cf
sendmail.cf został poprawnie stworzony
odnośnie twoich ustawień. Niektóre błędy na jakie się natknąłem to:
/etc/mailertable/etc/mailertable
--------- przykładowy plik /etc/mailertable ---------- system1.org uucp-dom:system1 .system1.org uucp-dom:system1 ja.pl uucp-dom:ja up.down.pl error: Host nie jest znany w ja.pl .down.pl uucp-dom:down .ja.pl error: Host nie jest znany w ja.pl ------
makemap hash /etc/mailertable </etc/mailertable
makemap dbm /etc/mailertable </etc/mailertable
makemap btree /etc/mailertable </etc/mailertable
sendmail-a
sendmail-a
To wszystko.
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:
Napewno znajdziesz tu jakieś niejasne i niepolskie konstrukcje. Jeśli wpadniesz na lepszy pomysł daj mi znać.
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 sie na nią zapisać, to
wyślij list o treści subscribe jtz Imię Nazwisko na adres
majordomo@ippt.gov.pl
doc-linux-pl-2002.06.14.orig/mini/html/Soundblaster-AWE.pl.html 0100664 0001750 0001750 00000102556 07104371340 022660 0 ustar coven coven
To jest JTZ o Sound Blaster-rze AWE. Podaje ono dokładne informacje o maksymalnym wykorzystaniu Twojego Sound Blaster'a 32 (lub lepszego), włączając w to syntezę Wave Table. Ten dokument opisuje wszystkie karty SB od SB 32.
Karty Sound Blaster są dobrze znane w środowisku DOS i Windows, a wiele osób chce też używać swoje karty pod Linux'em. Niestety, Creative Labs dostarcza tylko sterowniki pod Windows i DOS'a, więc zainstalowanie karty SB pod Linuxem nie jest proste. [oj, chyba jest :-) - przyp. tłum.] Ten dokument próbuje opisać jak można używać właściwości kart SB AWE w środowisku Linuxa.
Dokument zawiera informacje, które wziąłem z FAQ Sterownika AWE i FAQ ISA PnP. Zobacz sekcję Źródła dla poznania autorów i miejsca tych dokumentów. Dzięki nim, obsługa dźwięku SB AWE jest możliwa. Mnóstwo ważnej pracy było zrobione przez Hannu Savolainen'a, który napisał sterownik dostarczany z jądrem Linuxa. Dziękuję!
Chcę podziękować Nicoli Bernardelli za testowanie AWE64. Bez niego wiele błędów pozostałoby niewykrytych.
Dziękuję za SGML Tools, to HOWTO jest dostępne w kilku formatach, wszystkie wygenerowane z jednego pliku źródłowego.
Wersja 1.0
Pierwsza wersja
Wersja 1.1
Poprawiona pisownia (dzięki Curt!), dodana potrzebna wersja isapnp, teraz dostępna na sunsite i mnóstwie kopii.
Wersja 1.2
Wersja francuska jest już dostępna, małe poprawki, dużo poprawionej pisowni (dzięki programowi ispell)
Najświeższe wersje są na mojej stronie domowej - Sound Blaster AWE HOWTO
Nowe wersje tego dokumentu będą przesyłane na wiele anonimowych serwerów FTP składujących tego typu informacje, jak np. ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/mini
Hypertekstowe wersje tego i innych Linuxowych HOWTO są dostępne na wielu serwerach WWW, np. http://sunsite.unc.edu/LDP. Większość dystrybucji Linuxa na CD-ROM'ach zawiera dokumenty HOWTO, często w katalogu /usr/doc.
Dzięki Arnaudowi Launay zoro@lsol.tm.fr jest dostępna francuska wersja tego dokumentu! Najświeższa wersja jest dostępna przez HTTP albo anonimowe FTP.
Jeżeli przetłumaczysz ten dokument na inny język, daj mi znać, a dołączę odnośnik do niego tutaj.
Polegam na tobie, Czytelniku, w zrobieniu tego HOWTO użytecznym. Jeżeli masz jakiekolwiek sugestie, poprawki, albo komentarze, proszę, żebyś przysłał je do mnie, Marcus.Brinkmann@ruhr-uni-bochum.de, a ja postaram się wziąć je pod uwagę w następnej edycji.
Byłbym szczególnie wdzięczny za informacje o procedurze startowej (skrtypty inicjalizujące itp.) innych popularnych dystrybucji Linuxa, np. RedHat lub SuSE Linux.
Jeżeli opublikujesz ten dokument na CD-ROM'ie lub na papierze, kopia była by mile widziana. (Przez e-mail możesz zapytać się o mój adres pocztowy) Pomyśl także o złożeniu dotacji dla LDP (Linux Documentation Project), żeby wspomóc tworzenie darmowej dokumentacji Linux'a. Skontaktuj się z koordynatorem Linux HOWTO, Gregiem Hankins'em gregh@sunsite.unc.edu, żeby zdobyć więcej informacjii.
Prawa autorskie - (C)1997 Marcus Brinkmann.
To HOWTO jest dokumentacją darmową; możesz ją udostępniać i/lub modyfikować na zasadach Licencji Publicznej GNU (GNU General Public License) publikowanej przez FSF (Free Software Foundation); albo wersji 2, albo jakiejkolwiek późniejszej wersji.
Ten dokument jest udostępniany z nadzieją, że będzie on użyteczny, ale bez żadnej gwarancji; nawet bez gwarancji dostępności ani przydatności w określonym przypadku. Przestudiuj Licencję Publiczną GNU, dla uzyskania dokładnych informacji.
Możesz uzyskać kopię Licencji pisząc do FSF - Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
Ten dokument próbuje pomóc Ci w instalacji i użytkowaniu karty Sound Blaster AWE 32 lub Sound Blaster AWE 64 firmy Creative Labs w Twoim Linuxie. Odnośnym systemem jest Debian GNU Linux na platformie Intel i586, ale metoda tu przedstawiona powinna działać z każdą inną dystrybucją Linuxa, jak i na każdej innej platformie sprzętowej obsługiwanej prze Linuxowy sterownik dźwięku (różnice będą opisane).
Pamiętaj, żeby dokładnie przeczytać "Linux Sound HOWTO" (zobacz sekcję Dodatkowe informacje. Traktuję swój dokument jako dodatek do Sound HOWTO, często możesz tam znaleźć informacje o rzeczach, których tu nie opisałem.
SB AWE 32 zawiera urządzenie dźwięku RAW, standardową syntezę OPL-2/OPL-3, port MIDI MPU-401 i syntezę Wave Table EMU 8000 o 32-głosowej polifonii (przestudiuj Sound HOWTO dla wyjaśnienia tych terminów).
SB AWE 64 ma wszystkie możliwości AWE 32 i dodatkowo syntezę Wave Guide, z której Creative Labs jest szczególnie dumny. Problemem dla użytkowników Linuxa jest fakt, że dodatkowe 32 głosy są generowane programowo i wysyłane przez urządzenia dźwięku RAW. Ponieważ Creative Labs nie widzi rynku dla sterowników pod Linuxa, sterownik syntezy Wave Guide jest dostępny tylko pod Windows 3.1 i Windows 95.
Znaczy to, że z punktu widzenia użytkownika Linuxa SB AWE 32 i AWE 64 są prawie identyczne. [AWE 64 ma troszeczkę lepsze przetworniki A/C i C/A -- przyp. tłum.] Od tej chwili będę się odnosił do SB AWE wogóle i wsponę o różnicach, jeżeli wystąpią.
Większość nowoczesnych kart na platformę Intela są kartami ISA PnP, co jest skrótem dla ,,Plug and Play''. Znaczy to, że karta musi być skonfigurowana przez system operacyjny, a to musi być wykonane przez skrypt inicjaliacyjny (initialization routine) w czasie ładowania systemu. Są co najmniej trzy możliwe sposoby na wykonanie tego, jeżeli:
Najczęściej używanym oprogramowaniem dla inicjalizacji kart PnP pod Linuxem jest ,,isapnptools'' (zobacz sekcję Źródła i sekcję Zaczynamy). Opisują one właściwie jak skonfigurować wszystkie karty ISA PnP, nie tylko kartę dzwiękową.
Niektóre sterowniki urządzeń mogą być budowane jako moduły zamiast wkompilowywania ich w jądro. Możesz znaleźć więcej informacji o modułach w ,,Kernel-HOWTO'' i ,,Module HOWTO'' (zobacz sekcję Dodatkowe informacje).
Jeżeli posiadasz kartę PnP, musisz zainstalować obsługę dźwięku jako ładowalny moduł jądra. Znaczy to, że nie możesz wbudować sterownika dźwięku w jądro, będziesz musiał zbudować go jako moduł, który może być władowany w jądro w czasie rzeczywistym. Jest to potrzebne dlatego, że jądro będzie zainstalowane przed skonfigurowaniem karty ISA PnP, a sterownik dźwięku musi być załadowany po skonfigurowaniu karty ISA PnP.
Moduł dźwięku jądra może być załadowany ręcznie - insmod sound albo modprobe -a sound albo w poprawnej linii skryptu ładującego twojego Linuxa (w Debianie jest wymagane aby dodać linię zawierającą sound do /etc/modules). Inne podejście, to odpalenie kerneld, demona instalującego i deinstalującego moduły.
Zauważ, że kerneld może nie być najlepszym rozwiązaniem dla sterownika AWE, ponieważ zabiera to dużo czasu, aby załadować moduł do jądra, szczególnie jeżeli chcesz używać syntezy Wave Table i ładować duże banki Sound Font, co musisz zrobić za każdym razem po załadowaniu modułu. Ponieważ kerneld usuwa nieużywane moduły po jednej minucie (standardowo), lepiej jest ładować moduł dźwięku ręcznie lub w czasie ładowania systemu. Zauważ, że samodzielne ładowanie modułu zapobiega usuwaniu go przez kerneld. Przy okazji: Możesz ręcznie ładować moduł i używać kerneld w tym samym czasie. Te dwie metody nie kolidują ze sobą, ale kerneld nie zajmuje się już modułem dźwięku.
Jest to użyteczne, gdy Twoje ustawienia miksera zostają skasowane po usunięciu i ponownym załadowaniu modułu. Rozwiązanie tego problemu zostanie podane w sekcji Mikser (jest tam opis jak można uruchomić mikser automatycznie kiedy moduł dźwięku zostaje załadowany). Jednakże zajmuje to trochę czasu dla kerneld do zainstalowania modułu, załadowania banku dźwięków i uruchomienia miksera. Z tego powodu lepiej jest instalować moduł dźwięku w czasie ładowania systemu i nie pozwalać kerneld go deinstalować.
Możesz zainstalować obsługę dźwieku bezpośrednio w jądrze lub jako ładowalny moduł. Jeżeli masz kartę PnP, musisz zainstalować obsługę dźwięku jako moduł, ponieważ karta PnP musi być zainicjalizowana przez isapnptools zanim moduł zostanie zainstalowany.
Jak możesz sobie wyobrazić, będziesz musiał zrekompilować jądro. Podam ci poniżej kilka podpowiedzi. Na razie pomówmy o obsłudze dźwięku w źródłach jądra. Jądro jest dystrybuowane z darmową (Lite) wersją OSS (USS) - sterownika dźwięku. Obecna wersja tego sterownika (3.5.4) nie obsługuje SB AWE w całości, a tylko jego część podobną do SB 16. Tak więc możesz odgrywać dźwięki RAW i używać syntezy OPL-2/OPL-3, ale nie będziesz mógł odgrywać muzyki MIDI z syntezą Wave Table.
Jeżeli chcesz używać syntezy Wave Table możesz kupić komercyjny sterownik firmy 4Front Technologies (proszę, niech mnie ktoś poinformuje, jeżeli to wystarczy) albo używać [darmowej] łaty na jądro "AWE 32 Sound Driver Extension" autorstwa Takashiego Iwai. Ten pierwszy nie jest opisany przez ten dokument, przyjmuję, że chcesz używać tego ostatniego.
Sterownik ten (zobacz sekcję Źródła ) jest publikowany na licencji GNU i jest dystrybuowany z kilkoma programami użytkowymi do syntezy EMU 8000 kart SB AWE.
Awedrv jest już dołączony do testowych wersji jądra (2.1.x), ale prawdopodobnie chcesz rozszerzać stabline wersje.
Oto wymagania obsługi SB AWE pod Linuxem:
Jeżeli masz kartę PnP, będziesz także potrzebował:
Zobacz sekcję Źródła dla informacji skąd można zdobyć te programy.
Przyjmijmy, że masz poprawnie zainstalowaną kartę i prawdopodobnie już ją testowałeś pod DOS'em lub Windows.
Następnym krokiem będzie inicjalizacja karty w czasie ładowania systemu wtedy, i tylko wtedy, gdy jest to karta PnP. Postępuj zgodnie z dokumentacją pakietu źródłowego żeby skompilować i zainstalować isapnptools (albo po prostu użyj binarnego pakietu) i wykonaj polecenie:
# pnpdump > /etc/isapnp.conf
UWAGA: isapnptools często nie wykrywa wszystkich trzech portów I/O syntezy AWE Wave Table. Sprawdź dokładnie pozycję WaveTable w pliku isapnp.conf z przykładem podanym na końcu tego HOWTO. Ustaw adres I/O jeżeli to potrzebne.
UWAGA: Zgodnie z isapnp-faq, isapnp czasami nie zaprogramowywuje numeru urządzenia logicznego. Jeżeli napotkasz np. taką wiadomość o błędzie:
Error occured executing request 'LD 2' on or around line...
spróbuj dodać linię (VERIFYLD N) na początku pliku isapnp.conf. Musisz używać wersji co najmniej 1.10, żeby ta medoda zadziałała. Jeżeli nie możesz używać wersji 1.10 lub nowszej możesz także wprowadzić numery urządzeń logicznych bezpośrednio. Zobacz isapnp-faq, żeby usyskać więcej informacji o tej metodzie. Jeżeli to nie będzie działać skontaktuj się ze mną (i ludzi tworzących isapnp, oni też powinni być zainteresowani).
UWAGA: Upewnij się, że ostatnią linią jest (WAITFORKEY), to czasami bywa ominięte przez starsze wersje pnpdump.
Przykładowy isapnp.conf możesz znaleźć na końcu tego dokumentu (zobacz sekcję Przykładowy isapnp.conf.
Jeżeli używasz Debiana nie są potrzebne żadne dalsze ustawienia, isapnp zostanie uruchomiony w czasie ładowania w pliku /etc/init.d/boot po dodaniu tego kawałka kodu:
# Skonfiguruj karty isa plug and play przed ładowaniem # modułów. Musisz to zrobić przed ładowaniem modułów, żeby mieć # szansę skonfigurowania i zainicjalizowania kart PnP zanim # sterowniki narobią bałaganu. # if [ -x /etc/init.d/isapnp ] then /etc/init.d/isapnp start fi
#! /bin/sh # /etc/init.d/isapnp: skonfiguruj karty Plug ang Play test -x /sbin/isapnp || exit 0 /sbin/isapnp /etc/isapnp.conf exit 0
Jeżeli masz inną dystrybucję Linuxa, jesteś zdany na siebie. Nie wiem co robić (czy ktoś podałby mi te informacje?). Upewnij się tylko, że isapnp będzie uruchomiona zanim moduły będą załadowane (zobacz poniżej).
Przed rekompilacją jądra musisz "załatać" je Sterownikiem AWE. Nawet jeżeli źródła twojego jądra już zawierają awedrv (sprawdź /drivers/sound/lowlevel/), możesz chcieć rozszerzyć istniejący sterownik. Postępuj zgodnie z instrukcjami w katalogu ze źródłami awedrv. Musisz odpalić skrypt który zainstaluje łatę w jądrze.
Sprawdź, czy na pewno rozszerzyłeś źródła. Skrypt tylko sprawdza, czy dany plik instnieje - jeżeli tak, nie instaluje łaty. Powinieneś skasować plik drivers/sound/lowlevel/awe_wav.c przed uruchomieniem skryptu po rozszerzeniu źródeł jądra.
Następnie musisz skonfigurować jądro, włączając obsługę dźwięku. Mam nadzieję, że wiesz trochę o kompilowaniu jądra; zobacz Sound HOWTO i Kernel HOWTO, żeby uzyskać więcej informacji. Przejdź do katalogu z źródłami jądra (np. /usr/src/linux) i wykonaj polecenie
# make config
lub
make menuconfig
make xconfig
W pewnym momencie zostaniesz zapytany o obsługę karty dźwiękowej. Możesz odpowiedzieć zarówno Y albo M jeżeli nie masz karty PnP. Musisz odpowiedzieć M (moduł), jeżeli posiadasz kartę PnP. Musisz skompilować obsługę karty dźwiękowj jako moduł (jeżeli masz kartę PnP), ponieważ taka karta musi być zainicjalizowana przed załadowaniem modułu. Na następujące pytania powinieneś odpowiedzieć Y, na wszystkie inne N:
Sound Blaster (SB, SBPro, SB16, clones) support (CONFIG_SB) [Y/n/?] Generic OPL2/OPL3 FM synthesizer support (CONFIG_ADLIB) [Y/n/?] /dev/dsp and /dev/audio support (CONFIG_AUDIO) [Y/n/?] MIDI interface support (CONFIG_MIDI) [Y/n/?] FM synthesizer (YM3812/OPL-3) support (CONFIG_YM3812) [Y/n/?] lowlevel sound driver support [Y/n/?] AWE32 support (CONFIG_AWE32_SYNTH) [Y/n/?]
Tylko ostatnia opcja ma wpływ na syntezę Wave Table. Inne wykorzystują opcje SB16 sterownika OSS/Free.
Dodatkowo, musisz skonfigurować port I/O karty dźwiękowej. Spójrz na plik isapnp.conf dla wskazówek, jeżeli masz takowy. U mnie wystarczają stantardowe wartości. Zauważ, że standardowe wartości ze skryptu konfiguracyjnego jądra mogą być nieprawidłowe (zwłaszcza wartości SBC_IRQ i SB_MPU_BASE są złe dla większości kart).
I/O base for SB Check from manual of the card (SBC_BASE) [220] Sound Blaster IRQ Check from manual of the card (SBC_IRQ) [5] Sound Blaster DMA 0, 1 or 3 (SBC_DMA) [1] Sound Blaster 16 bit DMA (_REQUIRED_for SB16, Jazz16, SMW) 5, 6 or 7 (use 1 for 8 bit cards) (SB_DMA2) [5] MPU401 I/O base of SB16, Jazz16 and ES1688 Check from manual of the card (SB_MPU_BASE) [330] SB MPU401 IRQ (Jazz16, SM Wave and ES1688) Use -1 with SB16 (SB_MPU_IRQ) [-1]
Teraz zrekompiluj jądro. Użytkownicy Debiana powinni użyć kernel-package. To robi kompilację jądra czynnością tak prostą jak zainstalowanie paczki Debiana. Zobacz dokumentację w katalogu /usr/doc/kernel-package/. Oto podpowiedź:
# make-kpkg clean # make-kpkg -revision custom.1.0 kernel_image
i wtedy
dpkg -i /usr/src/kernel-image-2.0.29_custom.1.0_i386.deb
Jeżeli masz inną dystrybucję Linuxa, postępuj zgodnie ze standardowym sposobem kompilacji nowego jądra. Nie zapomnij o wydaniu poleceń make modules i make modules_install. Zobacz Sound HOWTO i (może) Kernel HOWTO, żeby uzyskać więcej informacji.
Po zainstalowaniu nowego jądra powinieneś przeładować system (pamiętaj, żeby mieć funkcjonującą dyskietkę startową). Zaciśnij kciuki.
Jeżeli masz kartę PnP, pamiętaj, żeby odpalić isapnp bądź to w skrypcie ładującym (tak jak było to opisane wcześniej), bądź to ręcznie:
# /sbin/isapnp /etc/isapnp.conf Board 1 has Identity 74 00 00 e3 10 48 00 8c 0e: CTL0048 Serial No 58128 [checksum 74]
Teraz możesz zainstalować sterownik dźwięku, jeżeli skompilowałeś go jako moduł:
# modprobe -a sound AWE32 Sound Driver v0.3.3e (DRAM 2048k)
Jeżeli sądzisz, że wykrycie pamięci nie było poprawne (znam przypadek człowieka mającego AWE 64 z 4096k, a ,,wykryta'' ilość wynosiła 28672k), spróbuj rozszerżyć awedrv albo podaj ilość pamięci w pliku /usr/src/linux/drivers/sound/lowlevel/awe_config.h, np.
# define AWE_DEFAULT_MEM_SIZE 4096 /* kilobajtów */
Przykro mi, ale musisz wtedy zrekompilować jądro (może kompilacja modułów będzie wystarczająca, ale nie wiem na pewno).
Jeżeli działa, możesz chcieć, żeby moduł dźwięku był ładowany automatycznie. Możesz użyć kerneld (dlaczego to nie jest najlepszy pomysł zobacz w sekcji 1.4) lub dodaj linię zawierającą sound do /etc/modules (w Debianie) lub dodaj linię /sbin/modprobe -a sound do skryptu ładującego.
Jeżeli masz obsługę dźwięku wbudowaną w jądro, dostaniesz trochę pożytecznych informacji w czasie ładowania systemu. Jeżeli obsługę dźwięku masz zainstalowaną jako ładowalny moduł, możesz otrzymać te same informacje (prawdopodobnie po deinstalacji modułu dźwięku najpierw (modprobe -r sound)) wydając polecenie
# modprobe -a sound trace_init=1 Sound initialization started <Sound Blaster 16 (4.13)> at 0x220 irq 5 dma 1,5 <Sound Blaster 16> at 0x330 irq 5 dma 0 <Yamaha OPL3 FM> at 0x388 Sound initialization complete AWE32 Sound Driver v0.3.3e (DRAM 2048k)
Jeżeli masz wirtualny system plików /proc, możesz poszukać urządzenia dźwięku komendą
# cat /proc/devices Character devices: [...] 14 sound [...]
Następnie upewnij się, że masz zainstalowane odpowiednie urządzenia w katalogu /dev/. Zobacz Sound HOWTO, żeby uzyskać więcej informacji. Teraz zapytaj /dev/sndstat o status modułu dźwięku:
# cat /dev/sndstat Sound Driver:3.5.4-960630 (Sat Oct 11 19:35:14 CEST 1997 root, Linux flora 2.0.29 #1 Sat Oct 11 19:12:56 CEST 1997 i586 unknown) Kernel: Linux flora 2.0.29 #1 Sat Oct 11 19:36:23 CEST 1997 i586 Config options: 0 Installed drivers: Type 1: OPL-2/OPL-3 FM Type 2: Sound Blaster Type 7: SB MPU-401 Card config: Sound Blaster at 0x220 irq 5 drq 1,5 SB MPU-401 at 0x330 irq 5 drq 0 OPL-2/OPL-3 FM at 0x388 drq 0 Audio devices: 0: Sound Blaster 16 (4.13) Synth devices: 0: Yamaha OPL-3 1: AWE32 Driver v0.3.3e (DRAM 2048k) Midi devices: 0: Sound Blaster 16 Timers: 0: System clock Mixers: 0: Sound Blaster 1: AWE32 Equalizer
Jeżeli nie widzisz takich informacji, to prawdopodobnie jest błąd w konfiguracji. Zobacz co nie działa, a wtedy wróć do kroku Zaczynamy, sprawdzając wszystko.
Spróbuj zdobyć plik .au (Sun Workstation) albo plik RAW i wykonaj komendę
# cat bell.au > /dev/audio
lub
# cat sample > /dev/dsp
Powinieneś usłyszeć zawartość pliku przez Audio Device 0: Sound Blaster 16 (4.3)
Jeżeli chcesz używać syntezy FM OPL-2/OPL-3 do odgrywania plików MIDI, wypróbuj program playmidi (zobacz Dodatek B). Uruchom go komendą
# playmidi -f dance.mid
lub
# playmidi -4 dance.mid
Pierwsza komenda uruchomi OPL-2, druga OPL-3. Jeżeli dźwięk cię denerwuje nie wiń playmidi: To synteza FM brzmi tak źle.
Wyobraź sobie, że miałbyś tylko sterownik OSS/Free: To byłaby jakość dźwięku jaką mógłbyś uzyskać (nie biorąc pod uwagę syntezy programowej). Na szczęście masz SB AWE i możesz używać możliwości Wave Table ze Sterownikiem AWE.
Sterownik AWE jest dystrybuowany ze specjalnymi narzędziami (awesfx), żeby wykorzystać syntezę EMU 8000. Najpierw musisz załadować bank Sound Font do karty - nawet jeżeli chcesz używać sampli ROM! Możesz wziąć te pliki z instalacji Windows - szukaj plików z rozszerzeniem *.sfb lub *.sf2
Sample ROM są w pliku SYNTHGM.SBK, prawdziwe sample są w plikach SYNTHGS.SBK i SYNTHMT.SBK, oraz w SAMPLE.SBK. Możesz wziąć inne banki Sound Font przez ftp albo www, spróbuj na stronie EMU, stronie Creative Labs, albo na stronie z samplami Chaos, które są naprawdę dobre (pamiętaj, żeby przejrzeć stronę Sterownika AWE).
Spróbuj załadować standardowy zestaw GM (ROM) używając komendy
# sfxload -i synthgm.sbk
i wtedy odtwórz plik midi dostarczany z SB AWE:
# drvmidi dance.mid
Uruchom swój ulubiony program miksera i uruchom go. Odegraj plik RAW i dwa pliki MIDI jednocześnie, wypróbowując ustawienia miksera. Pobaw się trochę, to powinno być bardzo łatwe. Oto lista urządzeń, oraz wyjaśnienie:
Inne ustawienia miksera odnoszą się do CD-ROMu, możliwie podłączonego do karty dźwiękowej, do głównej głośności, basów, tonów wysokich i poziomu nagrywania na różnych liniach wejściowych. Możesz określić, które linie powinny być nagrywane.
Możesz nagrywać z różnych źródeł: z podłączonego CD ROMu, z mikrofonu podłączonego do wejścia MIC i z każdego źródła, które można podłączyć do wejścia LINE IN. Ustaw mikser w poprawnej pozycji. Odegraj dźwięk i nagrywaj do pliku, czytając z urządzenia dźwięku RAW, np.
# cdplay # dd bs=8k count=5 </dev/dsp >music.au 5+0 records in 5+0 records out # cat music.au >/dev/dsp
nagrywa i odtwarza pięć sekund dźwięku z urządzenia wejściowego.
Przykro mi, nie ma jeszcze informacji o porcie MIDI!
Możesz ładować próbki do DRAM'u na karcie dźwiękowej programem sfxload. Zauważ, że możesz ładować tylko jeden plik z próbkami na bank, z bankiem 0 jako standardowym. A więc po komendzie sfxload synthgs.sbk jedyne sample w twojej karcie są samplami GS. Jeżeli chcesz załadować dodatkowe banki Sound Font musisz użyć opcji -b, np.
# sfxload synthgs.sbk # sfxload -b1 sample.sbk # drvmidi sfx.mid
Możesz załadować standardowy bank Sound Font automatycznie, razem z instalacją modułu. Dodaj taką linię:
post-install sound /usr/bin/sfxload synthgm.sbk
do pliku /etc/conf.modules.
Zobacz dokumentację, żeby uzyskać więcej detali o sfxload.
Z programem drvmidi możesz używać Sterownika AWE do odgrywania plików MIDI. Po prostu podaj nazwę pliku midi po komendzie:
# drvmidi waltz.mid
Zobacz dokumentację, żeby uzyskać więcej szczegółów o drvmidi.
Dobrze rozejrzyj się w Sound HOWTO (dostępne z sunsite.unc.edu i innych serwerów). Zawiera garść danych o kompilacji jądra z obsługą dźwięku i wyjaśnia mnóstwo o urządzeniach dźwiękowych, aplikacjach itp.
Przyjmuję to HOWTO jako dodatek do Sound HOWTO.
Powinieneś popatrzeć też na Sound Playing HOWTO. Mówi o różnych formatach dźwięku i aplikacjach do ich odgrywania.
Źródło: http://bahamut.mm.t.u-tokyo.ac.jp/~iwai/awedrv/awedrv-faq.html
Jeżeli masz problemy z instalacją Sterownika AWE lub z używaniem syntezy Wave Table w twojej karcie Sound Blaster, spójrz tutaj.
Źródło: http://www.roestock.demon.co.uk/isapnptools/isapnpfaq.html
Jeżeli masz problemy ze skonfigurowaniem karty ISA PnP, to jest twoja encyklopedia.
Źródło: http://www.roestock.demon.co.uk/isapnptools/index.html
Jeżeli wysyłasz łaty, wiadomości o błędach albo komentarze, wstaw ,,isapnp'' gdzieś w linii tematu, i wyślij list do isapnp@roestock.demon.co.uk.
Źródło: http://bahamut.mm.t.u-tokyo.ac.jp/~iwai/awedrv/
Źródło: wszędzie, gdzie możesz znaleźć Linuxa :)
Źródło: z źródłami jądra Linuxa
Informacje: http://www.4front-tech.com/usslite albo kopia europejska.
W pliku konfiguracyjnym ISA PnP wygenerowanym przez pnpdump numery urządzeń twoich kart PnP pojawiają się jako sekcje. W pliku poniżej była wykryta jedna karta (dźwiękowa), z czterema urządzeniami logicznymi:
Zostawiłem LD 1 nieskonfigurowane, ponieważ nie mam CD ROMu podłączonego do portu IDE w mojej karcie dźwiękowej. Jeżeli nie masz portów IDE w twoim SB, LD 1 będzie urządeniem portu gier, a LD 3 się nie pojawi.
Zobacz sekcję Zaczynamy, żeby uzyskać dokładne (ważne!) informacje o tym pliku.
# $Id: pnpdump.c,v 1.9 1997/06/10 21:37:32 fox Exp $ # This is free software, see the sources for details. # This software has NO WARRANTY, use at your OWN RISK # # For details of this file format, see isapnp.conf(5) # # For latest information on isapnp and pnpdump see: # http://www.roestock.demon.co.uk/isapnptools/ # # Compiler flags: -DREALTIME -DNEEDSETSCHEDULER (READPORT 0x0203) (ISOLATE) (IDENTIFY *) # Try the following if you get error messages like # Error occurred executing request 'LD 2' on or around line... #(VERIFYLD N) # ANSI string -->Creative SB32 PnP<-- (CONFIGURE CTL0048/58128 (LD 0 # ANSI string -->Audio<-- (INT 0 (IRQ 5 (MODE +E))) (DMA 0 (CHANNEL 1)) (DMA 1 (CHANNEL 5)) (IO 0 (BASE 0x0220)) (IO 1 (BASE 0x0330)) (IO 2 (BASE 0x0388)) (ACT Y) )) (CONFIGURE CTL0048/58128 (LD 1 # ANSI string -->IDE<-- # (INT 0 (IRQ 10 (MODE +E))) # (IO 0 (BASE 0x0168)) # (IO 1 (BASE 0x036e)) # (ACT Y) )) (CONFIGURE CTL0048/58128 (LD 2 # ANSI string -->WaveTable<-- (IO 0 (BASE 0x0620)) (IO 1 (BASE 0x0A20)) (IO 2 (BASE 0x0E20)) (ACT Y) )) (CONFIGURE CTL0048/58128 (LD 3 # ANSI string -->Game<-- (IO 0 (BASE 0x0200)) (ACT Y) )) # Returns all cards to the "Wait for Key" state (WAITFORKEY)
Oto pierwsza wersja polskiego AWE HOWTO. Jeżeli zauważysz jakiś błąd, daj mi znać.
doc-linux-pl-2002.06.14.orig/mini/html/Tiny-News.pl.html 0100664 0001750 0001750 00000026060 07457640740 021447 0 ustar coven coven
(Stan na dzień 14.10.1997)
Dokument Newsy-Minimum
nie jest już aktualizowany przez autora. Jeśli chciałbyś podjąć się opieki
nad tym dokumentem, skontaktuj się z <tjbynum@metalab.unc.edu>.
Copyright (c) May 25, 1995 Kent Lewis (Kenneth M. Lewis, Jr.)
Jeśli dokument ten zostanie zaakceptowany przez Linux Documentation Project, wolno będzie rozpowszechniać go zgodnie z zasadami opisanymi w LDP HOWTO z zastrzeżeniem, że autor chciałby przejrzeć ostateczną formę niniejszego dokumentu przed włączeniem go do ww. zasobów.
Używam Linuksa, a z siecią łączę się za pomocą modemu. Do niedawna musiałem utrzymywać stałe połączenie z siecią aby móc czytać grupy dyskusyjne. Nie mogę jednak zbyt długo pozostawać on-line -- korzystam z usług odległego dostawcy łącza, za czas on-line płacę więc stawki międzymiastowe; oznacza to wysokie rachunki telefoniczne. Dlatego zacząłem się zastanawiać nad zminimalizowaniem kosztów dostępu do sieci bez utraty korzyści z tego dostępu płynących. Sposób taki znalazłem; mam nadzieję, że przyda się on również innym.
Dokument niniejszy opisuje jak używać INNa z niewielkim tylko zestawem grup. Za pomocą prostego skryptu perlowego artykuły są jednocześnie ściągane i wysyłane podczas krótko trwającego połączenia z siecią. Całość jest w wersji ,,alfa'' -- jeśli pojawią się nie opisane tu problemy, będziesz musiał sam sobie z nimi poradzić.
Musisz mieć dostęp do serwera news (NNTP). Żeby sprawdzić, czy możesz z danego serwera czytać grupy i na nie pisać, sprawdź programem telnet port 119 tego serwera -- pojawi się informacja na temat Twoich uprawnień. Jeśli już używasz danego serwera, to wiesz, że dostęp masz -- w takim wypadku nie ma co sprawdzać. :-) Natomiast jeśli dostępu nie masz, postaraj się o niego przed przeczytaniem reszty niniejszego dokumentu.
Musisz mieć wystarczającą ilość miejsca na twardym dysku na składowanie
artykułów. Moja linuksowa partycja ma 300 MB, a dwudniowy urobek około
piętnastu grup zajmuje wg. df
zaledwie od 1 do 2% pojemności dysku. Na wszelki jednak wypadek najlepiej
zacząć od niewielkiej ilości grup i sukcesywnie dodawać kolejne.
Potrzebujesz Perla i INNa. Jeśli ich nie masz, ściągnij je z
ftp://sunsite.unc.edu (lub któregoś z mirrorów).
Perla prawdopodobnie znajdziesz w katalogu
/pub/Linux/devel/perl, a INNa w /pub/Linux/system/Mail/news.
Jeśli jeszcze tego nie zrobiłeś, zainstaluj te dwa programy. Ja swojego INNa wziąłem z dystrybucji Slackware 2.2. Dołączona dokumentacja była bardzo dobra, po zapoznaniu się z nią nie powinieneś mieć problemu z instalacją. Perl, już skompilowany, również dołączony jest do Slackware 2.2 -- postaraj się zdobyć wersję skompilowaną, dokument niniejszy nie zawiera pomocy w instalacji i konfiguracji Perla.
Nie zapomnij o założeniu grup ,,junk'' i ,,control'' -- bez nich program innd
nie ruszy. Będziesz musiał założyć je ręcznie, ponieważ polecenie ctlinnd
zakłada, że demon innd jest już uruchomiony. Po wystartowaniu tego demona
utwórz poleceniem ctlinnd newgroup ... ...
katalog do składowania newsów. Szczegółów szukaj w podręczniku systemowym
(man ctlinnd).
Teraz musisz zmodyfikować plik /etc/news/newsfeeds -- dzięki temu INN
utworzy plik w katalogu /usr/spool/news/out.going/; plik ten
wykorzystywany będzie przez zamieszczony poniżej skrypt perlowy do
publikowania napisanych off-line artykułów. Informacje na temat zawartości
/etc/news/newsfeeds znajdziesz w dokumentacji INNa; przeczytaj też
odpowiednią stronę podręcznika systemowego (man newsfeeds). WAŻNE:
wpisy w /etc/news/newsfeeds powinny być umieszczone w takiej
kolejności, aby pierwszym polem w pliku
/usr/spool/news/out.going/$NEWSFEED były pełne ścieżki do artykułów,
które chcesz wysłać. Jeśli pierwsze pole będzie zawierało co innego, skrypt
będzie próbował wysłać na newsy owo ,,co innego'' zamiast Twoich artykułów,
co z pewnością wywoła niepożądane efekty.
Nie zapomnij o zablokowaniu w pliku control.ctl
możliwości automatycznego zakładania nowych grup. Jeśli tego nie zrobisz,
to w miarę napływania z nadrzędnego serwera wiadomości kontrolnych liczba
ściąganych grup będzie się powiększała, co spowoduje zwiększenie obciążenia
i spowolnienie twojego systemu -- a w niniejszym HOWTO chodzi przecież o coś
zupełnie przeciwnego.
Wejdź do wybranego przez siebie katalogu i wykonaj w nim polecenie
touch -t $WCZORAJ lastget
Zamiast $WCZORAJ
użyj ciągu oznaczającego dzień wczorajszy (w formacie opisanym w podręczniku
systemowym (man touch)).
Umieść poniższy skrypt w tym katalogu i nadaj mu prawa wykonywania.
Zmień $NEWSPATH
na katalog, w którym zainstalowałeś INNa (u mnie jest to
/usr/lib/news). Zmień $SCRIPTPATH
na ścieżkę do katalogu, w którym umieściłeś skrypt (u mnie
/usr/lib/news). W tym samym katalogu znajdować się musi
wspomniany wyżej plik lastget.
Zmień $PROVIDER
na adres serwera news, z którego będziesz korzystać. Zmień $NEWSFEED
na nazwę feedu, której użyłeś w /etc/news/newsfeeds.
Przeczytaj strony ,,inews'' i ,,nntpsend'' podręcznika systemowego, aby zorientować się w działaniu poniższego skryptu.
-----------------------------------------------------------------------------
#!/usr/bin/perl
##
## pobierz nowe artykuly
##
open(LIST, "$NEWSPATH/active")
|| die "nie moglem otworzyc listy grup do pobrania!";
while (<LIST>) {
@newsgroup = split(' ', $_); ## dzieli kolejne linie pliku active wg spacji,
## umieszcza dane w tablicy @newsgroup
## @newsgroup[0] zawiera teraz nazwę grupy
system "$NEWSPATH/bin/nntpget -f $SCRIPTPATH/lastget -n @newsgroup[0] -o -v $PROVIDER"
|| print "nie moglem sciagnac postow z grupy @newsgroup[0]\n";
}
close(LIST);
system "touch $SCRIPTPATH/lastget";
##
## usun naglowek "NNTP-Posting-Host: " z postow do wyslania
##
open(LIST, "/usr/spool/news/out.going/$NEWSFEED")
|| die "nie moglem otworzyc listy postow do przygotowania do wyslania";
while (<LIST>) {
if (@article = split(' ', $_)) {
$article = @article[0];
rename("$article", "$article" . '.bak');
$backup = "$article.bak";
open(OUTPUT, ">> $article");
open(INPUT, "$backup");
select(OUTPUT);
while (<INPUT>) {
print unless ?^NNTP-Posting-Host.*\n?
}
close(OUTPUT);
close(INPUT);
unlink("$backup");
reset;
}
}
select(STDOUT);
close(LIST);
##
## wyslij posty
##
$ENV{'NNTPSERVER'} = "$PROVIDER";
open(LIST, '/usr/spool/news/out.going/$NEWSFEED')
|| die "nie moglem otworzyc listy postow do wyslania";
while (<LIST>) {
if (@article = split(' ', $_)) {
$article = @article[0];
system "inews -h $article";
}
}
close(LIST);
------------------------------------------------------------------------------
Powiedzmy, że nazwałeś powyższy skrypt ,,foonews''. Przy następnym połączeniu
z siecią wykonaj polecenie $SCRIPTPATH/foonews.
Jeśli przez ekran zaczną przewijać się identyfikatory wiadomości (Message-ID),
to znaczy, że wszystko działa jak powinno. Być może będziesz musiał poczekać
kilka sekund na pojawienie się pierwszych Message-ID. Po zakończeniu tej
operacji powinieneś mieć na dysku wszystkie wiadomości wysłane na newsy od
czasu ostatniej modyfikacji pliku $SCRIPTPATH/lastget, a wszystkie
napisane przez Ciebie posty powinny być wysłane do serwera, z którym się
łączyłeś; serwer rozpropaguje te wiadomości dalej. Po wszystkim plik
$SCRIPTPATH/lastget będzie miał dzisiejszą datę ostatniej
modyfikacji; jutro, kiedy ponownie uruchomisz ,,foonews'', skrypt ściągnie
newsy wysłane na newsy między tą datą, a momentem uruchomienia skryptu.
Będziesz musiał ręcznie usuwać zawartość pliku
/usr/local/news/out.going/$NEWSFEED. Umyślnie nie dopisałem tej
funkcji do skryptu, żeby móc sprawdzić, czy moje artykuły rzeczywiście zostały
wysłane... i jakoś nie zabrałem się jeszcze do zautomatyzowania tego zadania.
Po pierwszym uruchomieniu skryptu najpierw sprawdziłem, czy artykuły zostały
wysłane, a dopiero potem usunąłem zawartość tego pliku; możesz zrobić tak samo.
Jeśli poprawnie skonfigurowałeś INNa, to skrypt
$NEWSPATH/bin/news.daily
zajmie się poprawnym działaniem całej konstrukcji.
W tej chwili wszystko robię ręcznie, jednak nic nie szkodzi na przeszkodzie, aby proces ten zautomatyzować. Kilka wpisów w cronie powinno załatwić sprawę.
I ostatnia uwaga: wcale nie uważam, że mój skrypt jest elegancko napisany, ani że sposób jest idiotoodporny i niezawodny. Ale SOA#1 -- u mnie działa -- więc postanowiłem się nim podzielić.
...dla wszystkich, dzięki którym Linux jest taki fajny!
Kent Lewis
kent@fiona.umsmed.edu
Polskie tłumaczenia pozostałych dokumentów HOWTO znajdują się pod adresem http://www.jtz.org.pl/. Z pewnością szczególnie zainteresuje Cię INN+SUCK mini HOWTO, które znacznie poszerza informacje zawarte w niniejszym dokumencie. Problem czytania newsów off-line rozwiązać możesz też za pomocą odpowiedniego czytnika, więcej na ten temat znajdziesz w FAQ grupy pl.news.czytniki.
Dokument oryginalny dostępny jest wyłącznie w formacie txt (patrz http://sunsite.unc.edu/LDP/); znaczniki sgml i podział na rozdziały pochodzą ode mnie.
Copyright for the translation:
(c) 2001 by Tomasz `tsca' Sienicki, tsca@edb.dk
doc-linux-pl-2002.06.14.orig/mini/html/Ultra-DMA.pl.html 0100644 0001750 0001750 00000077772 07247552160 021311 0 ustar coven coven
Celem tego dokumentu jest wyjaśnienie sposobu użytkowania dysków UltraDMA/UltraATA/Ultra33/Ultra66 w Linuksie. W wielu przypadkach nie ma trudności w użytkowaniu tych urządzeń, a drobne ,,poprawki'' mogą wpłynąć pozytywnie na lepsze działanie. Z kolei w innych przypadkach wymagane są dodatkowe działania tylko po to, żeby dostać się do dysku.
Informacje zawarte w tym dokumencie są, wg. mojej wiedzy, poprawne. Jednak mogą pojawić się literówki, jakieś tajemnicze błędy podczas transmisji jak również dziwne niekompatybilności w systemie, które będą powodowały niepoprawne działanie opisanych tutaj sposbów. Tak więc... przed rozpoczęciem grzebania w konfiguracji dysku NALEŻY ZROBIĆ KOPIĘ ZAPASOWĄ DANYCH, KTÓRYCH NIE CHCEMY STRACIĆ. Jeśli jeszcze nie robisz tego regularnie, to dla własnego dobra - zacznij.
Michel Aubry - łata do VIA do włączania UDMA dla jądra 2.0.33 i inne; zunifikowana łata UDMA dla 2.0.34+.
Andrew Balsa - dostarczył ogólnych informacji na temat UDMA oraz łatę UDMA do Intel TX, SiS i VP1 dla jądra 2.0.33 oraz zunifikowaną łatę dla 2.0.34+.
Maxime Baudin - tłumaczenie francuskie
Bokonon - ``Controller'' vs. ``interface''
John G. - łata do VIA VP2 dla jądra 2.0.33 i różne informacje
Martin Gaitan - obejście instalacji dla Ultra33 ide0/ide1
Andre M. Hedrick - aktualny opiekun systemu IDE w Linuksie
Hĺvard Tautra Knutsen - tłumaczenie norweskie
Norman Jacobowitz - nakłonił mnie do dodania informacji o VP3
John Levon - informacja o TX Pro
Peter Monta - informacja o używaniu dwóch sterowników Ultra33
Masayoshi Nakano - tłumaczenie japońskie
Gadi Oxman - łata do Ultra33 dla jądra 2.0.34 i znalazł tajemnicze numerki do zastosowania w obejściu
Andy Pearce - zasugerował dodanie informacji o dodatkowych plikach urządzeń hde, hdh
Andrei Pitis - łata dla LILO
Brion Vibber - ten dokument
Dokument ten można kopiować i dystrybuować w celach informacyjnych bez ograniczeń. Nie wolno go modyfikować bez zgody autora z wyjątkiem zmiany wyglądu. Tumaczenie tego dokumentu jest dozwolone. Jednak zalecany jest kontakt z autorem, aby otrzymać najnowszą wersję.
Oto krótki przegląd technologii opartych na IDE:
Są to starsze technologie dyskowe. Większość interfejsów nie-SCSI i dyskowych, które można dzisiaj kupić, to EIDE chociaż wiele dużych dysków umie obsługiwać UDMA. [Od tłumacza: ponieważ dokument jest z XI.1999, więc warto dopowiedzieć, że w tej chwili II.2001 praktycznie wszystkie szanujące się firmy wypuszczają dyski z obsługą UDMA (najlepiej ATA100)].
Bus master DMA to technologia zwiększająca prędkość transferu danych z/do dysku twardego, która wymaga obslugi przez płytę główną i BIOS i chociaż najmniejszej obsługi ze strony dysku.
Więcej możesz się dowiedzieć pod adresem http://developer.intel.com/design/pcisets/busmastr/FAQs.htm.
Ultra-DMA ma wiele nazw - tutaj będziemy je nazywać UDMA.
UDMA jest bardziej zaawwansowaną technologią, która umożliwia o wiele większe transfery (do 33,3 MB/s w UDMA 2 i 66,7 w UDMA 4) od dwóch do czterech razy szybciej niż EIDE i po znacznie niższej cenie niż SCSI. Wiele nowych komputerów dostarczanych jest z dużymi dyskami UDMA i interfejsami UDMA. Możliwe jest też dodanie interfejsów UDMA (jak np. Promise Ultra33/66) do komputera, aby zwiększyć transfery dysków bez obsługi UDMA.
Dużo szczegółów na temat UDMA można się dowiedzieć ze strony http://www.quantum.com/src/whitepapers/ultraata/
Należy zauważyć, że długość taśmy łączącej urządzenie z kontrolerem UDMA musi być mniejsza od zwykłego DMA - najlepiej mniej niż 30 cm, maksymalnie 45 cm. Jeśli chcemy mieć 66 MB/s, to wymagana jest taśma 80-pinowa i na pewno nie dłuższa niż ww. Jeśli pojawia się dużo błędów CRC, to należy użyć krótszej taśmy.
Zanim zaczniemy, pozwolę sobie wyjaśnić drobne nieporozumienie. Te transfery 33 MB/s i 66 MB/s to transfery maksymalne (burst transfer rate) i nie doświadcza się ich zbyt często. Oto mały wyciąg z ,,generic UDMA.txt'':
Transfery chwilowe/maksymalne (burst) powinny osiągać wartości od 16,6 MB/s (dla PIO 4 i DMA
2) do 33 MB/s dla UDMA. W swojej łacie do jądra 2.1.55 Kim-Hoe Pang
wyliczył te transfery z zależności 60 ns/słowo co daje 33 MB/s.
Jednak transfery takie dotyczą tylko danych przesyłanych z/do cache'u
(476 kB dla dysku IBM 6,4 GB) i nie są zbyt odpowiednie dla
większości użytkowników Linuksa.
Jądro Linuksa używa tyle RAMu ile się tylko da, aby cache'ować dane z
dysku. Tak więc jeśli czegoś nie ma w tej podręcznej pamięci jądra, to
jest bardzo małe prawdopodobieństwo, że będzie w o wiele mniejszym cache'u
dysku.
O wiele bardziej odpowiedni będzie sustained transfer rate,
czyli prędkość z jaką dane są transportowane z dysku do głównej
pamięci, gdzię mogą być użyte. Prostym sposobem na zmierzenie tego
transferu jest użycie polecenia hdparm - np hdparm -Tt
/dev/hda, aby zmierzyć transfer pierwszego dysku IDE.
Oto trochę danych zebranych po intesnywnym testowaniu hdparmem:
[od tłumacza: W tej chwili (II.2001) te transfery wyglądają znacznie
lepiej]
PIO tryb 4: +/- 5,2 MB/s
DMA tryb 2: +/- 7,2 MB/s
UDMA tryb2: +/- 9,8 MB/s
Jak widać, UDMA jest prawie dwa razy szybsze od EIDE i znacząco szybsze niż zwykłe ,,bus mastering DMA''. Większość obecnych dysków UDMA potrafi osiągnąć tranfery między 10 a 15 MB/s w UDMA 2 (33 MB/s) i UDMA 4 (66 MB/s).
Nie mam żadnych konkretnych liczb, abym mógł je podać, ale ogólnie dyski SCSI są szybsze od UDMA. Jednak jeśli spojrzeć na cenę, to można zauważyć, że dyski UDMA są o wiele tańsze. Stosunek wydajność/cena jest znacznie lepszy dla UDMA.
To jest akurat łatwe do zrobienia. Ponieważ wszystkie dyski UDMA są kompatybilne z EIDE, należy po prostu podpiąć dysk UDMA do interfejsu EIDE i Linux nie powinien mieć najmniejszych problemów z wykryciem go. Należy pamiętać, że transfery będą takie jak na zwykłym EIDE.
Mam dwie wiadomości: dobrą i złą. Dobra, to ta, że interfejs UDMA można używać zarówno dla dysków UDMA i ,,legacy EIDE''. Będzie o wiele szybciej niż w interfejsie EIDE.
Zła wiadomość to ta, że stare jądra (2.0.x) nie obsługują UDMA zbyt dobrze. Nowsze jądra 2.2.x obsługują UDMA33, a do tych, które nie obsługują, są dostępne łaty.
Dodatkowo należy zaznaczyć, że niektóre interfejsy UDMA, które są dodawanymi kartami a nie są wbudowane w płytę główną, wymagają jakiejś łaty lub kilku sztuczek, żeby używać ich ze starym jądrem. Oto po co w ogóle ten dokument istnieje - aby wyjaśnić jak zdobyć łaty i jakie to są sztuczki.
Istnieją interfejsy UDMA jako karty PCI, przy pomocy których można dodać obsługę UDMA bez wymiany płyty głównej lub dodać kolejny kontroler jeśli istniejące zostały już zapełnione. Są one także czasami instalowane w nowych komputerach: Gateway 2000 i Dell.
Większość z nich nie jest obsługiwana przez stare jądra serii 2.0.x, ale wiele powinno być obsługiwanych przez jądra 2.2.x. Jednak niektóre z najnowszych takich kart (np. Promise Ultra66) nie są obsługiwane nawet przez najnowsze jądra [od tłumacza: teraz (II.2001) jednak chyba już większość jest obsługiwana]. Jeśli posiadasz taką kartę, to musisz zainstalować łatę na jądro albo znaleźć nowsze z obsługą twojej karty. Jeśli musisz zainstalować Linuksa na dysku na takim interfejsie, to trzeba będzie trochę pokombinować.
Jest to karta PCI z dwoma kanałami UDMA, obsługująca do 4 dysków. Specyfikacje i ceny można znaleźć pod adresem http://www.promise.com. Karta ta jest we wczesnych modelach Gateway 2000 Pentium II.
Jądra 2.0.35 i nowsze oraz wszystkie 2.2.x obsługują Ultra33 i nie powinno być problemów z zainstalowaniem dystrybucji opartej na tych jądrach. Starsze jądra nie obsługują tego standardu i z instalacją Linuksa starszej wersji możgą być kłopoty jeśli nie można lub nie chce się przejść na nowsze jądro.
Instalacja Linuksa z obsługą Ultra33
Pomimo iż jest łata do interfejsu Ultra 33, to zainstalowanie jej i kompilacja jądra nie jest prostą sprawą jeśli nigdy nie instalowałeś Linuksa. Jest więc pewne obejście, które pozwala zainstalować system na takim interfejsie. Podziękowania dla Gadi Oxmana za poniższe informacje na temat ustawień interfejsu:
Jeśli jest dostęp do konsoli z dysku instalacyjnego, to można
wyświetlić ustawienia karty Promise poleceniem "cat /proc/pci":
RAID bus interface: Promise Technology Unknown device (rev 1).
Vendor id=105a. Device id=4d33.
Medium devsel. IRQ 12. Master Capable. Latency=32.
I/O at 0xe000. (a)
I/O at 0xd804. (b)
I/O at 0xd400. (c)
I/O at 0xd004. (d)
I/O at 0xc800. (e)
i przekazać do jądra parametry "ide2=a,b+2 ide3=c,d+2".
Uwaga: Liczby podane tutaj będą się różnić od Twoich. Przykładowymi
parametrami w tym przypadku będą: ``ide2=0xe000,0xd806
ide3=0xd400,0xd006''.
Jeśli używany jest tylko pierwszy kanał Ultra33 (np. jeśli jest
tylko jeden dysk czy dwa jeśli są to master i slave na jednym
kanale) wtedy nie trzeba podawać ide3.
Red Hat 5.1:Należy wystartować z dyskietki startowej i wcisnąć ENTER po
pojawieniu się zachęty. Jądro wystartuje i pojawi się zapytanie o
język, klawiaturę i metodę instalacji. Źródło instalacji nie ma
znaczenia, ważny jest kolejny krok: powinno się pojawić okienko
zatytułowane ``Select Installation Path'', wciskamy Alt-F2, aby
przejść do linii poleceń. Wpisujemy ``cat /proc/pci'', zapisujemy
liczby, które się pojawią i startujemy ponownie z dyskietki
startowej. Tym razem, gdy pojawi się zachęta wpisujemy ``linux
ide2= (tutaj te numerki spisane wcześniej jak na
przykładzie wyżej) ide3=(i kolejne numerki)''. Teraz
instalacja na dysk twardy powinna odbyć się już bez problemów,
chociaż LILO będzie pewnie miało problemy z zainstalowaniem się.
Zamiast instalować LILO trzeba zrobić dyskietkę startową i
startować z niej z parametrami jw. dopóki nie będzie można załatać
jądra i LILO.
Red Hat 5.0 i Slackware 3.4:Tutaj sytuacja jest podobna,
z małym wyjątkiem: programy instalacyjne ignorują /dev/hde-h
(dyski na ide2 i ide3). Aby zainstalować Linuksa na lub z
takiego dysku trzeba nadpisać jeden lub oba kanały z płyty głównej.
Jednak uwaga na nadpisanie kanału, z którego odbywać się będzie
instalacja. Np. jeśli instalacja odbędzie się z CD-ROMu na
/dev/hdd (ide1 - kontroler na płycie głównej) na dysk
/dev/hde (ide2 - Ultra33), trzeba nadpisać ide0
przez ide2 a zostawić ide1. Przy starcie z dyskietki
ratunkowej pojawi się zachęta w RH 5.0 natomiast Slackware
udostępnia powłokę w trybie instalacyjnym. Jednak RH 5.0 stwarza
problemy z wystartowaniem po instalacji. Jeśli takie problemy
pojawią się można sciągnąć dyskietkę startową Slackware'a z
ftp://ftp.icm.edu.pl/pub/linux/slackware/slackware-current/bootdsks.144/
i użyć tej dyskietki.
W wypadku innych dystrybucji trzeba trochę poimprowizować, ale proces powinien być podobny.
WAŻNE: Bez łaty (omawianej w punkcie
Zunifikowane IDE) jądro potrzebuje
parametrów startowych, aby dostać się do dysku! Z tego powodu
bardzo ważnym jest podczas konfiguracji LILO (na dysku lub
dyskietce), aby podać dokładnie te same parametry jak podczas
instalacji. W przeciwnym wypadku system nie wystartuje! Można te
parametry przekazać podczas startu systemu (tak samo jak podczas
instalacji) w zachęcie LILO wciskając SHIFT i wpisując ``linux
ide2=.....'' za każdym razem. Polecam jednak czym prędzej
załatać jądro i zapomnieć o wpisywaniu tych parametrów. Z tego co
się orientuję, to nie ma sposobu przekazania parametrów do jądra
startującego z dyskietki, TRZEBA używać LILO lub innego
programu ładującego system, który pozwala na przekazywanie
parametrów.
Niełatane jądra i programy instalacyjne często mają problemy z używaniem ide2 czy ide3 nawet jeśli napędy zostały poprawnie wykryte. Jeśli nie można użyć tych interfejsów przy pomocy powyższej techniki, to można spróbować podać ide0 lub ide1 zamiast ide2 czy ide3 (podziękowania dla Martina Gaitana). To podmienia interfejsy na płycie głównej na Promise Ultra33 i można kierować się wskazówkami z następnego punktu tak jak po fizycznej zamianie tych interfejsów. Jeśli do instalacji użyty zostanie CD-ROM, to należy uważać, żeby nie podmienić interfejsu, do którego jest on podpięty, bo instalacja będzie nie możliwa! Jeśli jest to hda lub hdb, to dysk należy podpiąć do ide1 w przeciwnym razie (hdc, hdd) - do ide0.
Instalacja Linuksa omijająca Ultra33
Jeśli nie można zastosować takiego obejścia jw., to trzeba spróbować czegoś innego. Oto alternatywna metoda, która gwarantuje działanie, ale wymaga otwarcia komputera i pogrzebania w nim. UWAGA: Jeśli nie bardzo wiesz jak podłączać i odłączać dyski, to radzę zapoznać się z podręcznikiem, który otrzymałeś z dyskiem czy sterownikiem! Jeśli coś pochrzanisz i nie będziesz wiedział jak to złożyć spowrotem, to będziesz żałować!
Skoro już to napisałem, to reszta jest już prosta. Większość płyt głównych z czasów obecnych ma wbudowane interfejsy EIDE. Należy odłączyć dysk od Ultra33 i podłączyć go do EIDE. Jeśli są jakieś inne urządzenia IDE, to należy albo podłączyć dysk na nie używanym kanale, albo chwilo odłączyć urządzenie, które nie jest teraz potrzebne. Potem: zainstaluj Linuksa, ściągnąć łatę, zainstalować ją na jądro (następny punkt).
Teraz można już przełączyć dysk spowrotem do interfejsu Promise...
no prawie. Na wszelki wypadek należy zrobić dyskietkę startową
(cd /usr/src/linux ; make zdisk), którą będzie można użyć
do startu systemu jeśli LILO nie będzie działać. A żeby być jeszcze
bardziej pewnym można zrobić dwie i jedną odłożyć na bok.
Dobra, to teraz czas trochę pomyśleć. Jeśli
na interfejsie Promise jest tylko jeden dysk, to będzie to /dev/hde (a i
b to pierwszy kontroler IDE, c i d - drugi).
Ewentualne dodatkowo umieszczane tam napędy będą
przyjmować kolejne litery od e tak jak dyski IDE.
Teraz trzeba zmodyfikować plik /etc/fstab i podmienić
wpisy hda, hdb, ... na odpowiednie hde, hdf, .... Jeśli
zmieniona została lokalizacja (z master na slave) jakiegoś innego
urządzenia (CD-ROM, ZIP) lub jakieś wyjęte, które mają zostać
w komputerze, to także trzeba je dopisać do tego pliku.
W przypadku użycia LILO, trzeba także skonfigurować i je, aby używało
nowych plików urządzeń (omawianie konfiguracji LILO jest poza
zakresem tego dokumentu. Aby dowiedzieć się jak to się robi zajrzyj
do
LILO mini-HOWTO. W przeciwnym wypadku trzeba będzie użyć
dyskietki, która została zrobinoa wcześniej, którą i tak trzeba teraz
skonfigurować, aby widziała dysk na hde. Robi się to
poleceniem rdev. Wkładamy dyskietkę do stacji i wpisujemy ``rdev
/dev/fd0 /dev/hde1''. Oczywiście zakładam tutaj, że Twoja
główna partycja jest pierwszą na dysku pierwszym. Jeśli nie, to
użyj poprawnego numeru partycji!
Reboot. Teraz system powinien działać poprawnie.
Instalowanie łaty do Ultra33
Jądra w wersji 2.0.35 i nowsze mają wbudowaną obsługę Promise Ultra33. Trzeba tylko ściągnąć takie jądro z ftp.icm.edu.pl i je skompilować.
Instrukcji jak to zrobić należy szukać w Kernel HOWTO.
Używanie dwóch kart Ultra33 w jednym komputerze
W tej chwili nie działa... Nie radzę próbować o ile oczywiście nie masz ochoty na kompilacje jądra i kombinowanie z różnymi konfiguracjami.
Jest to mnie więcej to samo urządzenie co Ultra33, tyle że obsługuje UDMA 4 66 MB/s. Niestety nie ma jeszcze obsługi w jądrach 2.2.x
Obsługa jest zawarta w dostępnej łacie dla jąder 2.0.x i 2.2.x pod adresem ftp.icm.edu.pl oraz w jądrach rozwojowych 2.3.x od 2.3.3 w górę.
Jednak zanim będzie można załatać jadro lub uaktualnić je, to trzeba zastosować te same sztuczki co dla Promise Ultra33. Albo można użyć dystkietki startowej udostępnionej przez Promise.
Ta karta jest obsługiwana przez zunifikowany kod IDE. Instalacja Linuksa na niej może być podobna do instalacji na Promise Ultra33.
Trzeci i czwarty interfejs IDE (ide2 i ide3) używają plików
urządzeń /dev/hde* do /dev/hdh*. W przypadku starszych
jąder pliki te nie były tworzone automamtycznie i trzeba je dodać
ręcznie, aby dysk działał.
W źródłach któregoś z nowszych jąder, znajduje się skrypt
/usr/src/linux/scripts/MAKEDEV.ide, który wystarczy
uruchomić.
Używają one standardowych portów I/O IDE i są w pełni kompatybilne z wolniejszymi transferami na niełatanym jądrze 2.0.x. Przez to nie powinny sprawiać żadnych problemów podczas instalacji a instalacja łaty to tylko polepszenie szybkości a nie wymagany krok. Trochę obsługi UDMA jest w najnowszych jądrach 2.0.x a obsługa chipsetów Intela znajduje się w jądrach 2.2.x.
Jeszcze raz dziękuje Gadiemu za tę informację:
Obsługa <it/bus mastering DMA/ dla chipsetu TX jest w jądrach 2.0.31+
W starszych jądrach interfejs ten będzie używany w wolniejszym trybie EIDE. W każdym razie interfejs ten zostanie automatycznie wykryty i nie powinien sprawiać żadnych kłopotów.
Pełna obsługa UDMA 2 dla tych chipsetów jest zawarta w jądrach 2.2.x i zunifikowanej łacie IDE; zobacz Zunifikowane IDE.
Interfejs ten także jest automatycznie wykrywany i może być używany przez niełatane jądro. Ale skoro masz już taki interfejs, to warto ściągnąć i zainstalować łatę, żeby mieć szybsze transfery i pozbyć się dość denerwującego komunikatu "unkown PCI device".
Jedna łata jest dostępna pod adresem www.ipass.net. Przeznaczona jest dla VIA VP2/97 znajdującego się na płytach głównych FIC PA-2007 i PA-2011. Ale może też działać na podobnych chipsetach. Zgłaszano też, że łata ta działa z VIA VP3; niekoniecznie musi być to prawdą w każdym przypadku.
Należy zauważyć, że ta łata obsługuje tylko tryb Bus Mastering, a nie pełną tryb UDMA, ale i tak lepsze to niż zwykłe EIDE. Aby uruchomić tryb BMDMA należy postępować zgodnie ze wskazówkami na stronie z łatą.
Jest jeszcze inna łata, która w pełni obsługuje UDMA - www.pyreneesweb.com. Przeznaczona jest dla VIA VT82C586B i powinna także działać z VP2, VP3, VPX, P6 i AGP Apollo. Aby ją zainstalować należy postępować zgodnie z zawartymi tam wskazówkami. Zalecane jest jednak zrobienie kopii zapasowej najważniejszych danych ponieważ istnieje możliwość wystąpienia problemów z niekompatybilnymi płytami głównymi. Jeśli jednak łata zadziała, to będzie już działać bez problemów.
Chipset VP1 nie działa z tymi łatami, ale jest obsługiwany przez łatę dla zunifikowanego IDE.
UDMA nie jest poprawnie obsługiwane przez te płyty. Nie są takie same jak TX mobo i najwidoczniej źlę raportują informacje o DMA - stąd problemy. Słyszałem, że ktoś nad tym pracuje więc pewnie łata pojawi się w przyszłości.
Ten chipset jest na popularnych płytach Abit BP-6 oraz innych i
dotarcza UDMA 4 66 MB/s jako doatek do dwóch innych kanałow w trybie 2
33 MB/s. Obsługa jest poprzez
zunifikowany kod IDE, ale nie ma jej w żadnym z obecnych jąder. Tak więc
instalacja może być podobna do tej z kartą
Promise Ultra33.
[Od tłumacza: obsługa jest w jądrach 2.3.99+ oraz 2.4.x]
Zunifikowana łata do IDE dostarcza obsługę wielu chipsetów i kart rozszerzeń. Łaty takie są dostępne dla jąder, 2.0, 2.2 i 2.3. Jeśli obecnie użytkowane jądro nie obsługuje posiadanego chipsetu, to należy je załatać.
Łatami tymi opiekuje się Andre Hedrick, można je ściągnąć z najbliższej kopii serwera ftp.kernel.org.
UDMA jest obsługiwane w poniższych chipsetach i prawdopodobnie w wielu innych, których nie znam:
Kod jest napisany tak, aby było go łatwo rozszerzyć o obsługę kolejnego chipsetu.
Oto kilka uwag od Andre Balsa'y, autora wcześniejszej łaty:
Na dobrej płycie głównej z dyskiem IBM UDMA można osiągnąć prawie
maksymalny transfer: 10 Mb/s (zmierzone 'hdparm -t -T').
Chipset Intela TX ma pojedynczą kolejkę FIFO dla dysków i jest ona
dzielona przez dwa interfejsy IDE, tak więc używanie dwóch dysków UDMA
spowolni ich działanie.
Jednak, SiS5598 ma dwa oddzielne interfejsy, każdy z własną kolejką
FIFO. Teoretycznie można się zbliżyć do 66 Mb/s na płytach głównych
z chipem SiS5598 używając software'owego RAID0. SiS5571 ma chyba tę
samą strukturę interfejsu. Nie mam żadnych danych na temat VIA, więc
nie mogę nic na ten temat powiedzieć.
Sterownik IDE (U)DMA napisany przez Marka Lorda ma szczególnie krótki
czas konfiguracji (a stąd opóżnienia w transferach). Jest on idealny
do częstych transferów
małych paczek danych (takich jak serwery news) i może być lepszy od
technologii SCSI.
Jądro z wkompilowaną obsługą UDMA włączy je automatycznie jeśli wykryje napęd UDMA. W większości przypadków, kiedy obsługa taka się nie włączy to albo jądro nie umie obsłużyć chipsetu (zdobądź łatę, patrz wyżej) albo włączenie obsługi nie jest uważane za bezpieczne.
Jednak czasami napęd umie obsługiwać UDMA, ale BIOS tego nie podaje. W takich przypadkach należy włączyć obsługę ręcznie.
W jądrach 2.1.113+ można włączyć obsługę DMA dla obu napędów
na podanym interfejsie IDE przy pomocy parametru jądra
ideX=dma, gdzie X jest numerem interfejsu (pierwszy to '0').
Jednak podanie tego parametru wcale nie musi uaktywnić UDMA.
Parametry do jądra można przekazać przez LILO, LOADLINa czy większości popularnych programów ładujących system. Więcej informacji można znaleźć w Bootdisk HOWTO.
Jest to program służący do ustawiania różnych parametrów dysku twardego. Jedną z możliwości jest włączenie obsługi UDMA i pomiar szybkości stałego przesyłu danych.
Bieżąca wersja hdparmu to 3.6 (w czasie pisania) [Od
tłumacza: w tej chwili jest wersja 3.9]]. Starsze,
niełatane wersje nie będą poprawnie raportowały ani ustawiały
parametrów związanych z UDMA, tak więc należy zdobyć aktualną
wersję. Źródło znajduje się pod adresem
ftp.icm.edu.pl.
Program po ściągnięciu należy skompilować mniej więcej tak:
tar zxvf /tmp/download/hdparm-3.6.tar.gz
cd hdparm-3.5
make
su root
(podaj hasło)
make install
cp /usr/local/sbin/hdparm /sbin/hdparm
exit
Aby włączyć DMA: hdparm -d1 /dev/hda
Aby wyłączyć DMA: hdparm -d0 /dev/hda
Aby zmierzyć szybkość dysku: hdparm -Tt /dev/hda
Aby zobaczyć jakie są ustawienia dysku: hdparm /dev/hda
Aby zobaczyć więcej danych dot. dysku niż kiedykolwiek
chciałeś: (np. które tryby UDMA są włączone) hdparm -i /dev/hda
Więcej informacji (np. jakich trybów UDMA użyć) można
znaleźć w stronie podręcznika systemowego (``man 8 hdparm'').
Napędy wymienione poniżej znajdują się na liście nie działających. Nie wolno ich używać w trybie UDMA ponieważ może to spowodować utratę danych. Aby tego uniknąć sterownik powinien automatycznie wyłączyć obsługę DMA dla tych napędów.
Jeśli tak, to ostrożnie! Oto cytat z poprzedniej dokumentacji do UDMA:
Nie wolno przetaktowywać szyny PCI. 37,5 MHz, to maksymalna
częstotliwość. Niektóre (prawdopodobnie obsługiwane) napędy UDMA nie
zadziałają nawet przy częstotliwości 37,5 MHz, ale 33 MHz powinno
działać.
W każdym bądź razie NIGDY _NIGDY_ ! nie wolno ustawiać szyny PCI na
41,5 MHz.
ZALECANYM bezpiecznym ustawieniem jest 33 MHz.
Oto kolejny cytat z dokumentacji do UDMA:
Tak naprawdę BIOS każdej płyty głównej przestawia napędy dyskowe na
tryb UDMA. Oczywiście trzeba mieć nadzieję, że taki BIOS
został zaprogramowany poprawnie...
Np. płyta główna ASUS SP-97V z oryginalnym BIOSem (rev. 1.03) będzie
działać niepoprawnie w trybach DMA 2 i UDMA ze zmodyfikowanym
sterownikiem linuksowym. Będzie natomiast działać poprawnie w trybie
PIO 4 oraz w Windows 95 we wszystkich trybach. Ściągnąłem najnowszy
BIOS (rev. 1.06) ze strony ASUSa i uaktualniłem na swojej płycie. Od
tego momentu działa idealnie (przy częstotliwości szyny 66 MHz).
Mówi nam to o fakcie, że BIOS ustawia w kontrolerze DMA pewne
specyficzne parametry (active pulse i recovery clock cycles) [od
tłumacza: jak mi ktoś zaproponuje kiedyś tłumaczenie, to przetłumaczę,
bo ja nie mam pojęcia o czym mowa...] Moja poprzednia wersja
BIOSu prawdopodobnie miała te ustawienia niepoprawne. Ponieważ
sterownik Windows 95 ustawia te wartości samemu (nie zależnie od
BIOSu) miałem problemy tylko ze sterownikiem Linuksa a pod Windows 95
wszystko działało poprawnie.
Tak więc jeszcze raz: sterownik UDMA w Linuksie polega na ustawieniach
BIOSu. Jeśli pojawiają się problemy należy sprawdzić czy mamy
najnowszą wersję BIOSu dla naszej płyty głównej.
Jeśli żadna ze wskazówek nie okazała się pomocna na tyle, żeby rozwiązać problemy z UDMA, najlepszym wyjście jest napisanie na grupę pl.comp.os.linux.sprzet. W wiadomości należy zawrzeć dokładny opis problemu: typ posiadanego interfejsu UDMA, czy jest na płycie głównej czy na karcie rozszerzeń, czy napęd jest w UDMA czy w zwykłym EIDE, dokładna konfiguracja napędów, wersja dystrybucji i jądra oraz wszystko inne co wydaje się być pomocne. Najprawdopodobniej znajdzie się tam ktoś pomocny.
Wspaniale! Jeśli wiesz coś czego ja nie wiem, prześlij do mnie informację na ten temat ( brion@pobox.com) i ukaże się ona w kolejnej wersji.
Tłumaczenie to jest chronione prawami autorskimi © Bartosza Maruszewskiego. Dozwolone jest rozprowadzanie i dystrybucja na prawach takich samych jak dokument oryginalny.
Zmiany w tym dokumencie:
Napewno znajdziesz tu jakieś niejasne i niepolskie konstrukcje. Jeśli wpadniesz na lepszy pomysł daj mi znać.
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 /pub/Linux/JTZ/.
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 sie na nią zapisać, to
wyślij list o treści subscribe jtz Imię Nazwisko na adres
majordomo@ippt.gov.pl
doc-linux-pl-2002.06.14.orig/mini/html/Update.pl.html 0100664 0001750 0001750 00000073624 07457640740 021044 0 ustar coven coven
Linux rozwija się niezwykle szybko. Dlatego czasem trudno jest śledzić jego rozwój na bieżąco, czy zorientować się w stanie aktualnym. Ten dokument zawiera kilka wskazówek pomocnych w szybkim i efektywnym wyszukiwaniu żądanych informacji. Większość z Was zna i używa WWW i grup dyskusyjnych, ale -- jak dowiecie się z tego tekstu -- WWW i Usenet to jeszcze nie wszystko. Istnieje wiele innych, równie dobrych i lepszych, źródeł informacji.
Dostępne są tłumaczenia tego dokumentu; chciałbym tu podziękować tłumaczom za ich pracę i komentarze:
Copyright (c) 1998 Kjell Sundby, Kjetil Bakkeskaug and Stein Gjoen.
Prawa autorskie do tego dokumentu należą do Kjella Sundby, Kjetila Bakkeskauga oraz Steina Gjoena.
O ile nie zaznaczono inaczej dokumenty HOWTO chronione są prawami autorskimi należącymi odpowiednio do ich autorów. Zezwala się na powielanie i dystrybucję tych dokumentów w całości lub w części na jakimkolwiek fizycznym bądź elektronicznym nośniku pod warunkiem pozostawienia na wszystkich kopiach niniejszej informacji o prawach autorskich. Zezwala się i zachęca do redystrybucji komercjalnej; autor jednak życzy sobie być powiadamiany o każdej z takiej dystrybucji.
Niniejsze prawa autorskie dotyczą również wszelkich tłumaczeń, prac pochodnych, składających się z, lub zawierających jakiekolwiek dokumenty HOWTO. Oznacza to, że niedozwolone jest stworzenie pracy pochodnej od dokumentu HOWTO i nałożenie dodatkowych ograniczeń na jej dystrybucję. W pewnych szczególnych okolicznościach możliwe są odstąpienia od tych zasad. Po bliższe informacje należy skontaktować się z koordynatorem projektu Linux HOWTO pod adresem podanym poniżej.
W skrócie: chcemy promować rozprzestrzenianie się podanych tu informacji poprzez możliwie wiele kanałów. Zatrzymujemy jednak prawa autorskie do dokumentów HOWTO i chcielibyśmy być informowani o jakichkolwiek planach redystrybucji tych dokumentów.
Jeśli masz jakiekolwiek pytania, skontaktuj się z koordynatorem projektu Linux HOWTO pod adresem linux-howto@sunsite.unc.edu
Pamiętaj: informacji zawartych w tym dokumencie używasz na własne ryzyko. Zrzekamy się jakiejkolwiek odpowiedzialności za jego zawartość. Pomysłów, przykładów i/lub jakichkolwiek innych pochodzących z tego dokumentu informacji używać możesz wyłącznie na własną odpowiedzialność.
O ile nie zaznaczono inaczej wszystkie prawa autorskie należą do ich właścicieli. Użycie w tym dokumencie danego terminu nie powinno być traktowane jako wpływające na ważność jakiegokolwiek znaku handlowego lub znaku usługi.
Użycie nazw określonych produktów lub marek nie oznacza polecania ich.
Poleca się sporządzanie kopii systemu przed poważnymi instalacjami, oraz robienie kopii bezpieczeństwa w regularnych odstępach czasu.
Po zainstalowaniu Linuksa zastajesz zazwyczaj całkiem dużo informacji -- nie tylko dołączoną broszurkę, ale również wiele dokumentów HOWTO (JTZ - JAK TO ZROBIĆ) oraz obszerne opracowania i pomoc dostępne w sieci. Z nawiązką wystarcza to na początek, jednak po pewnym czasie zorientujesz się, że chcesz wiedzieć więcej, być na bieżąco, móc aktualizować swój system... jednym słowem: wiedzieć, co dzieje się "w branży". Pomoże ci w tym ten dokument. Dla uproszczenia podzielono zawarte tu informacje na takie, które możesz zasubskrybować i odnaleźć. Skupimy się też na efektywnym uzyskiwaniu konkretnej specjalistycznej pomocy.
Nawet jeśli do Twojego Linuksa nie dołączono żadnego rodzaju wydrukowanej informacji to i tak każda szanująca się dystrybucja zawiera szereg katalogów zawierających różnego rodzaju dokumentację -- od konkretnych plików README (CZYTAJTO) zawierających informacje o danych programach, do bardziej kompleksowych opracowań HOWTO -- właśnie czytasz jedno z nich.
Zajrzyj do archiwum dokumentów w /usr/doc, gdzie większość pakietów składa swoją dokumentację, pliki README, itd. W katalogach /usr/doc/HOWTO oraz /usr/doc/HOWTO/mini znajdziesz cały zestaw gotowych do czytania plików HOWTO i mini-HOWTO.
Najważniejszym i najpełniejszym źródłem informacji są oczywiście źródła jądra w /usr/src/linux. Używaj ich! Zwróć też uwagę, że pakiet z jądrem to nie tylko kod źródłowy (co najmniej częściowo opatrzony komentarzami), ale również katalog /usr/src/linux/Documentation zawierający obszerną dokumentację. Przed zadaniem jakiegokolwiek pytania na temat jądra powinieneś zapoznać się z zawartością tego katalogu. Dzięki temu oszczędzisz sobie zakłopotania i nie zmarnujesz czasu innym.
Przeglądanie i przeszukiwanie dokumentacji na komputerze czy w sieci jest bardzo wygodne. Nie rezygnuj jednak całkowicie z informacji drukowanej. Czasem, gdy nie jesteś w stanie nawet uruchomić swojego komputera, dokumentacja wydrukowana może być jedynym sposobem dotarcia do rozwiązania problemu.
Subskrybowanie oznacza zamawianie danego rodzaju wiadomości napływających ciągłym strumieniem. Nie ugryź kawałka większego niż możesz przełknąć: przeładowanie informacją nie jest tylko hasłem encyklopedycznym. Często zdarzy się, że zamiast spodziewanych informacji otrzymasz jakieś śmieci. Bądź więc krytyczny i nie wahaj się przez unieważnieniem subskrypcji.
Istnieją dwa odrębne (choć w niektórych przypadkach ze sobą sprzężone) media dostarczające ciągłych informacji: są to grupy dyskusyjne (USENET) i listy dyskusyjne. Grupy dyskusyjne zazwyczaj charakteryzują się zwiększoną ilością wiadomości i szumu informacyjnego niż listy. Uważaj: czytanie zbyt wielu grup jest jak picie z węża strażackiego! :-)
Pomoc w uzyskaniu dostępu do grup dyskusyjnych leży poza zakresem tego dokumentu. Wskazówki na temat ściągania i uczestnictwa w tych grupach bezpośrednio z Linuksa znajdziesz w innych tekstach JTZ.
Jeśli jeszcze nigdy nie używałeś grup dyskusyjnych powinieneś szczególnie uważnie przeczytać informacje wprowadzające. USENET to cała odrębna kultura. Nawet jeśli na początku wyda ci się chaotyczny, istnieją rządzące nim reguły. Pamiętaj, żeby przed wysłaniem swojego pierwszego listu do danej grupy poprzyglądać się jej przez jakiś czas. Najważniejszą sprawą jest zwrócenie uwagi na listy zatytułowane Frequently Asked Questions, FAQ, czy Najczęściej Zadawane Pytania. FAQ pozwolą ci zapoznać się z charakterem grupy, oraz prawdopodobnie rozwiążą Twój problem. Czytaj je! Zadając po raz setny typowe pytanie wyrobisz sobie tylko negatywną opinię (i -- być może -- dostaniesz się do czyichś filtrów).
Dokumenty FAQ są zazwyczaj wysyłane regularnie, jeśli jednak nie możesz któregoś z nich odnaleźć, poszukaj go w głównym archiwum FAQ w MIT. FAQ dostępne są również w postaci stron WWW.
Obok użytecznych informacji w grupach dyskusyjnych napotkasz też szum informacyjny, spam i dyskusje nie na temat. Oznacza to, że będziesz potrzebował czytnika umożliwiającego odsianie niechcianych listów. Zapewniają to czytniki mające tzw. mordplik (killfile). Odpowiednio skonfigurowany czytnik odfiltruje niechciane wiadomości i zaznaczy interesujące. Poprawia to ogólny stosunek ilości informacji do ilości szumu i pozwala skoncentrować się na sprawach istotnych. Pamiętaj jednak, że działa to w obie strony: jeśli będziesz zaśmiecał USENET, zostaniesz odfiltrowany, i, gdy znajdziesz się w potrzebie, nikt nie zobaczy Twojego pytania.
Do rzeczy -- oto lista użytecznych grup dyskusyjnych:
Grupy związane z Linuksem znajdują się też w wielu hierarchiach narodowych. Przykładem może być jedna z polskich grup o Linuksie. Jeśli masz kłopoty z odnalezieniem swoich narodowych lub lokalnych grup, pomocy szukaj w Deja.
W przeciwieństwie do grup dyskusyjnych listy dyskusyjne są scentralizowane. Oznacza to, że listy wysłane przez danego użytkownika na adres serwera rozsyłane są dalej do innych uczestników listy. Zazwyczaj nie otrzymuje się wielkiej ilości wiadomości, a poziom informacji niepożądanej jest niski. Wypowiedzi odbiegające od tematu zawsze budzą negatywne reakcje i, co jest równie poważną konsekwencją, mogą spowodować opóźnienie realizacji projektu, któremu poświęcona jest lista. Po zasubskrybowaniu danej listy zazwyczaj otrzymuje się powitalny list opisujący tematykę forum -- należy uważnie go przeczytać.
Istnieje wiele programów obsługujących listy dyskusyjne. Warto znać
rozpoznawane przez nie polecenia. Najpopularniejszym z tych programów jest
działający między innymi na serwerze
vger.rutgers.edu
Majordomo. Sprawdź, jak to działa: wyślij tam list o treści
help. Jeśli wyślesz list z poleceniem, którego program nie zrozumie,
również dostaniesz informacje o obsłudze. Jeśli zamiast help
wyślesz polecenie lists, otrzymasz spis wszystkich list
działających na serwerze (może być tego całkiem sporo!).
Listy dyskusyjne działają zazwyczaj pod kilkoma adresami. Jeden z nich
służy do wysyłania poleceń takich jak subscribe czy unsubscribe,
a inny do uczestnictwa w dyskusjach -- najczęściej z tego właśnie
adresu otrzymujesz wiadomości, które ludzie wysyłają na listę.
Na przykład wysłanie polecenia subscribe na adres
corned-beef-requests@somelistserver.org zapisze Cię na listę
o adresie corned-beef-list@somelistserver.org aż do chwili,
kiedy zdecydujesz się wypisać. Jeszcze raz: wysłanie listu o treści
help lub czymś niezrozumiałym dla serwera spowoduje otrzymanie
listu z pomocą.
Korzystając z list dyskusyjnych pamiętaj o kilku zasadach:
subscribe itp. na samą listę, lecz na
adres serwera. W przeciwnym razie nie wypadniesz najlepiej i zdenerwujesz
mnóstwo osób. Być może na listę zapisanych jest tysiące ludzi -- pomyłka
taka i związane z nią narzekanie może wygenerować mnóstwo niepotrzebnego
szumu w sieci.Jak już wspomniano vger.rutgers.edu jest jednym z głównych serwerów list dyskusyjnych. Oto skrócony spis list dostępnych dla społeczności Linuksa:
Oczywiście na tym serwerze znajduje się również dużo innych list. Ponieważ ich ilość stale się zmienia, nie ma sensu wymieniać tu ich wszystkich. Można jednak zajrzeć na stronę zawierającą spis list dyskusyjnych o tematyce interesującej użytkowników Linuksa. Na stronie tej można również w prosty sposób bezpośrednio zapisać/wypisać się z różnych list.
Istnieje również strona z długim spisem list dyskusyjnych o tematyce nie ograniczającej się do Linuksa.
Wiele osób jest rozczarowanych brakiem informacji o Linuksie w prasie. Jest to prawdopodobnie spowodowane tym, że wiele komercyjnych produktów nie wytrzymałoby porównania z Linuksem, a takiej sytuacji nie wytrzymaliby z kolei reklamodawcy. Istnieje na szczęście Linux Journal -- magazyn poświęcony tylko Linuksowi. Spis treści aktualnego numeru i informacje na temat jego subskrypcji znajdują się na stronie domowej SSC.
Innym komercyjnym pismem jest Linux Magazine, również umieszczający w sieci spis treści i fragmenty tekstów. Także Unix Review (d. Performance Computing) poświęca sporo miejsca Linuksowi.
Istnieją również popularne magazyny elektroniczne:
oraz prawdopodobnie kilka innych; nowe pojawiają się dość często. W LinuxHQ sprawdzić można aktualną listę dostępnych serwisów informacyjnych.
Jak grzyby po deszczu pojawiają się strony WWW z dosłownie codziennie uaktualnianymi wiadomościami na temat Linuksa. Wiele z nich odznacza się całkiem profesjonalnym układem graficznym i doborem prezentowanego materiału. Jednym z najważniejszych tego typu serwisów jest oferujący codzienne wiadomości Freshmeat.
Dla osób nie mogących pozwolić sobie na śledzenie wydarzeń w sieci z godziny na godzinę, a chcących mimo wszystko trzymać rękę na pulsie, przeznaczony jest serwis Linux Weekly News (Linux - Wiadomości Cotygodniowe). Serwis ten podaje ważne wiadomości, włączając w to ostrzeżenia na temat bezpieczeńswa oraz ogłoszenia o nowym i uaktualnionym oprogramowaniu.
Pod adresem Linux.com znajdziesz odnośniki do kanałów IRC.
Istnieje również pewna ilość godnych polecenia stron poświęconych głównie sprzętowi. Są to m. in. Toms Hardware i Anandtech, w których znajdują się testy wszelakiego sprzętu, oraz Storage review, specjalizująca się w testach dysków, streamerów i innych pamięci masowych.
Linux stworzony został dzięki połączonym (głównie za pomocą Internetu) siłom ludzi na całym świecie. Istnieje jednak również możliwość spotkań twarzą w twarz w LUGach -- Grupach Użytkowników Linuksa. Przeszukaj ogłaszane regularnie listy tych grup -- jedna z nich może znajdować się całkiem niedaleko!
Konferencje, spotkania, copy-parties i tworzenie nowych grup ogłaszane są regularnie w grupach dyskusyjnych.
Tego typu wydarzenia są doskonałą okazją do zorientowania się, co się dzieje w świecie Linuksa, oraz uzyskania pomocy.
Konkretnej informacji szukać można na wiele sposobów. Pamiętaj, że zawsze możesz użyć wyszukiwarek internetowych, i że niektóre z nich, np.
przeszukują również grupy dyskusyjne.
Przeszukiwarek jest wiele, jednak różnią się one zarówno wielkością bazy, jak i metodami oceny związku zawartości stron z zapytaniem. Jeśli szukasz dużych, znanych stron, użyj Google, nadaje on bowiem stronom punkty na podstawie umieszczonych do nich odnośników na innych stronach. Ludzie często umieszczają odnośniki do stron, które uważają za wartościowe; Google opiera się na ich opinii.
Serwisowi Google wyczerpujące zindeksowanie strony zabiera trochę czasu, korzystanie więc z jego usług przy szukaniu najnowszych lub nieco nietypowych wiadomości trochę mija się z celem. W takich przypadkach polecam albo bardzo szybki i o szerokim zasięgu AllTheWeb, albo serwisy, które przesyłają twoje zapytanie do szeregu przeszukiwarek, zbierają, porównują, oceniają i przedstawiają ci wyniki poszukiwania. Mój ulubiony serwis tego typu to Go2Net (d. MetaCrawler).
Wymagania stawiane wyszukiwarkom są różne, a serwisy te nieustannie podnoszą swój poziom -- musisz więc trochę sam poeksperymentować. Żadna z wyszukiwarek nie jest idealna, i -- ponieważ mniej niż 10% istniejących stron jest w ogóle zindeksowanych -- próbuj kilku wyszukiwarek, jeśli praca z jedną nie przyniesie efektów.
Pamiętaj również o Deja -- serwisie wyszukiwawczym skupiającym się konkretnie na grupach dyskusyjnych. Zarchiwizowane są tam artykuły od roku 1995 wzwyż.
Coraz częściej używamy stron WWW. Pamiętaj jednak, że to nie wszystko. Całe
mnóstwo informacji dostępnych jest na rozsianych po świecie serwerach ftp.
Niektóre z wyszukiwarek internetowych indeksują te zasoby, ale
narzędziem dedykowanym konkretnie temu zadaniu są serwery archie. Są to
systemy regularnie przeszukujące główne serwery ftp i gromadzące nazwy
znajdujących się na nich plików. Z serwerami archie połączyć się można na
wiele sposobów, np. za pomocą znajdujących się
w każdym dobrze utrzymanym systemie Linuksowym klientów archie
lub, w wersji dla X11, xarchie. Jeśli jest to niemożliwe, zawsze
można połączyć się z serwerem archie za pomocą telnetu do jednego
z podanych niżej serwerów.
Naturalnie powinieneś używać najbliższego z serwerów. Aby przejrzeć ich aktualną listę należy uruchomić klienta archie bez podawania argumentów, albo, jeśli używasz telnetu, uzyskać tę informację z serwera. Zawsze dostępna jest pomoc. Niestety nie wszystkie serwery współpracują ze sobą, być może więc będziesz zmuszony poszukać kilkakrotnie zanim natrafisz na to, czego szukasz.
Ostatnio w sieci pojawił się prostszy w obsłudze serwer ftp. Dostępna jest możliwość wyszukiwania o wielu opcjach i interfejsie nawiązującym do najlepszych uniksowych tradycji.
Większość z powyższych serwisów oferuje informacje na temat technik wyszukiwania. Zawsze opłaci się zainwestować kilka chwil na zapoznanie się z instrukcjami -- może to znacznie skrócić czas zużyty na Twoje poszukiwania.
Jeżeli nie masz dostępu do WWW, ale możesz używać poczty elektronicznej, powinieneś przeczytać FAQ ,,Dostęp przez pocztę''. Aby uzyskać ten dokument należy wysłać do serwera dla USA, Kanady i Płd. Ameryki list o następującej treści:
send usenet/news.answers/internet-services/access-via-email
Można posłużyć się również serwerem dla Europy i Azji. W takim przypadku treść listu powinna wyglądać tak:
send lis-iis e-access-inet.txt
Innym rozwiązaniem jest przeszukanie lokalnego katalogu z zawartością grup dyskusyjnych ("spoola" -- jeśli go masz): zajrzyj do grupy news.answers.
Wreszcie jeśli chcesz skontaktować się z konkretną osobą, na przykład z autorem jakiegoś programu, zajrzyj do dokumentacji owego programu w katalogu /usr/doc/. W większości przypadków znajdziesz tam adres e-mail autora. Jeśli nie, zawsze możesz szukać pomocy w FAQ na temat znajdowania adresów e-mail.
Szybkie i skuteczne wyszukiwanie informacji jest bardziej sztuką niż nauką. Nie poruszyliśmy tu istotnego zagadnienia: jak ocenić rzeczywistą jakość uzyskanej informacji? Problem ten leży poza zakresem tematycznym tego dokumentu, co nie znaczy, że nie należy o nim pamiętać. Zawsze przynajmniej zwracaj uwagę, czy odpowiedź na Twoje zapytanie jest aktualna.
Podstawową sprawą jest ocena wiarygodności informacji;
pozwoli to uniknąć sprowadzających na manowce lub złośliwych porad.
Zadziwiająco wiele osób podaje "metody" takie jak rm -rf /
jako rozwiązanie danego problemu. Niektórzy od razu zorientują się, że to
głupi dowcip, ale inni mogą zniszczyć sobie system. Na wszelki więc wypadek,
zanim zastosujesz znalezioną informację, sprawdź poniższe punkty:
Jeśli będziesz o tym pamiętał, nie powinieneś wpaść w jedną z wielu sieciowych pułapek, takich jak prośba o pocztówki dla chorego Craiga Shergolda, rozmaite łańcuszki i piramidy listowe, czy -- ostatnio -- konie trojańskie próbujące wmanewrować Cię w wysłanie w świat własnego hasła.
Istnieje pewna ilość dokumentów traktujących o bardziej poważnych metodach wyszukiwania informacji. Jeśli jesteś zainteresowany tematem, zacznij tutaj.
Nie zapominaj też o zawierających dokumentację do Linuksa stronach Linux Documentation Project (w polskiej wersji: JTZ -- przyp. tłum.). Regularnie, wraz z rozwojem systemu, pojawiają się tam nowe dokumenty i uaktualnienia istniejących.
Z czyjejś sygnaturki:
Be alert! The world needs more lerts.
Oryginał tego dokumentu:
How to stay updated.
Tłumaczenia pozostałych dokumentów HOWTO na język polski:
http://www.jtz.org.pl.
Copyright for the translation:
(c) 1999, 2000, 2001 by Tomasz 'tsca' Sienicki, tsca@edb.dk
doc-linux-pl-2002.06.14.orig/mini/html/Upgrade.pl.html 0100664 0001750 0001750 00000041407 07104371340 021165 0 ustar coven coven
Procedura, którą dokument ten próbuje opisać jest wysoce niebezpieczna dla twoich programów i danych zapisanych na dysku. Wykonujesz to wszystko TYLKO I WYŁĄCZNIE na własne ryzyko. Opisane tutaj kroki działały u autora; nie ma żadnej gwarancji, że będą one działać u ciebie ani że postępując zgodnie z nimi nie uszkodzisz sobie programów czy danych zawartch na dysku. Jesteś zdany całkowicie na siebie podczas robienia użytku z podanych tu procedur i autor nie jest odpowiedzialny za jakiekolwiek uszkodzenia czy niewygody wynikłe z ich użycia.
Prawa autorskie do tego dokumentu należą do Dynamicro Consulting Limited i jest on wydany na podstawie licencji GNU. Ogólnie oznacza to, że możesz go kopiować i modyfikować, ale nie możesz zabraniać innym robienia tego samego.
Komentarze i pytania proszę kierować do autora. Szczególnie mile widziane są opisy udanych uaktualnień złożonych systemów, które zostaną wykorzystane do przyszłych wersji.
Zmiany od wersji 1.1
Celem tego dokumentu jest zaoferowanie wskazówek, które pomogą ci w niszczeniu i ponownej instalacji twojego Linux-a. Nie jest to żadna głupko-odporna książka kucharska; ale mam nadzieję, że posłuży jako pewnego rodzaju wykaz tego o czym musisz pomyśleć, i wykaz kolejności w jakiej musisz zrobić różne rzeczy. Jeśli ktoś napisałby takie coś zanim dokonałem swojego pierwszego uaktulanienia, byłoby to dla mnie bardzo pomocne. Tak więc mam nadzieję, że będzie to pomocne dla ciebie, jeśli masz jakiegoś Linux-a do przerobienia.
Ale nie bierz tego za świętą prawdę: twoja droga do przebycia
będzie prawie na pewno się różniła od mojej. Nawet nazwy katalogów
z tego dokumentu mogą być różne od tych, które ty będziesz musiał
użyć; na przykład niektórzy mają /usr/home zamiast
/home; inni nazywają to /u, a niektórzy (brrr) to
nawet umieszczają swoich użytkowników bezpośrednio w /usr
! Nie można odnieść się dokładnie do twojego systemu także użyłem
tu nazw, które wystepowały u mnie.
Zauważysz także, że używam dystrybucji Slackware oraz że zakładam, że masz wystarczająco dużo RAM-u i miejsca na dysku, żeby skopiować źródła do jądra na dysk i zrobić swoje jądro. Jeśli twój system jest inny, niektóre z moich zaleceń nie będą pasowały; ale mam nadzieję, że generalnie będziesz się mógł w dalszym ciągu opierać o ten dokument w swoim projekcie przebudowy.
Dobre pytanie ! Jeśli można tego uniknąć, to nie rób tego ! (Jest to najprostsza najważniejsza rekomendacja w tym przewodniku !!!) Ale przychodzi taki czas, że po prostu musisz.
Na przykład: Zainstalowałem sobie dysk 4GB i okazało się, że mój Slackware 2.0 biedaczek nie wiedział, że dysk może mieć więcej jak 2GB i poczuł się bardzo zawstydzony. Tak więc musiałem uaktualnić go do wtedy-świeżej wersji 2.3. Operacja ta była dla mnie ciężkim przeżyciem, i jest jednym z powodów, dla których piszę te uwagi. Zrobiłem prawie wszystko źle i tylko szczęście i fakt, że miałem obok drugiego chodzącego Linux-a uratowało mnie od katastrofy.
Jako inny przykład mogę podać, że nie mogłem skompilować działającego jądra "a.out" z serii 1.3, używając Slackware 2.3 spoza komputera, który przedtem spartaczyłem. Wziąłem się w garść, kupiłem Slackware 3.0 na CD-ROM-ie i przeszedłem na ELF-a. Tym razem ponowna instalacja poszła lepiej, po części dzięki poprzedniemu gorzkiemu doświadczeniu, które posłużyło jako źródło większości pomysłów, które wam tutaj oferuję.
Jest bezpieczniej. Jeśli zainstalujesz nową wersję dystrybucji na starszą, to będziesz miał mieszaninę starych i nowych binariów, starych i nowych plików konfiguracyjnych i nie będzie to zbyt ciekawe miejsce do administrowania. Wyczyszczenie systemu i ponowna instalacją tego co rzeczywiście chcesz mieć, jest drastycznym lecz efektywnym sposobem na osiągnięcie przejrzystego i dobrze działającego systemu. (Oczywiście mówimy tu o instalacji kompletnie nowej dystrybucji a nie o uaktulanieniu dwóch pakietów ! Aby uniknąć całkowitej instalacji nowego systemu najlepiej w miarę pojawiania się nowych wersji konkretnych pakietów uaktualniać je -- szczególnie chodzi tu o gcc i jego biblioteki oraz binutils. Jeśli potrafisz w ten sposób utrzymać w miarę bieżące wersje pakietów, to nie potrzebujesz całkowitego uaktualnienia.)
Jak pisze Patrick Volkerding (on także zaleca procedurę z kompletnym wyczyszczeniem systemu), instalacja systemu ELF na systemie "a.out" jest przepisem na katastrofę; bo jeżeli wiedziałbyś dostatecznie duży, żeby spróbować, to nie czytałbyś tego dokumentu !
Chociaż nawet bez tych komplikacji lepiej, żebyś zaczął zupełnie od nowa.
To oczywiście zależy od tego, jak złożony jest twój system. Ale oceniłem, że na udane uaktualnienie (to drugie - nie pytaj ! ;) ) poświęciłem około 10 godzin na robienie archiwów, 6 godzin na przebudowanie systemu spowrotem do momentu, w którym mogłem się zalogować a następne pół dnia czy coś koło tego na odtwarzanie niekrytycznych danych. Z biegiem czasu odkrywam jeszcze małe szczegóły, które nie są do końca takie jakie chciałem -- naprawiam je wraz z odkrywaniem ich -- ale generalnie 20 godzin powinno wystarczyć na sensowną odbudowę systemu. Może mniej jeśli instalujesz z dysku (ja używałem CD-ROM-u), albo więcej jeśli musisz instalować z dyskietek. Może mniej jeśli masz szybkie Pentium - więcej jeśli jest to 386. No, rozumiesz o co chodzi.
To tyle tytułem wstępu. Oto jak się przygotować jak już się zdecydowałeś, że to zrobisz. Uzbroj się w cierpliwość i:
Bardzo ważne jest to, żebyś zapisywał wszystko co robisz w czasie przygotowywania się i przeprowadzania uaktulanienia. Szczególnie ważna jest lista archiwów, które będziesz robił przed zniszczeniem swojego systemu.
Ogólnie mówiąc archiwa są zapisywane na mediach, które mają dostęp sekwenycyjny. Przez to, nie będziesz chciał użyć tego całkowitego archiwum do odtworzenia znaczącej ilości plików; jest tam za dużo plików, których nie chcesz. Lepiej jest stworzyć mniejsze archiwa, fragmentów dysku, które będziesz chciał później odtworzyć. Później podam listę przykładów.
Dlaczego więc powinieneś zacząć od całkowitego archiwum ? Dwa podstawowe powody:
Aby zaoszczędzić czas i miejsce, jeśli ciągle masz nośnik ze swoją starą dystrybucją, możesz chcieć zarchiwizować tylko te pliki, których mtime czy ctime jest późniejszy niż oryginalnych z instalacji.
To jest inna ekstremalna sytuacja: nie będziesz odtwarzał tych
plików (przynajmniej w większości); będziesz je porównywał z tymi,
które powstały po nowej instalacji. Dlaczego ? Ponieważ te nowe
mogą zawierać dane, których nie ma w tych starych, albo mogą
wyrażać stare dane w nowy sposób. Zmiany w protokołach, nowe
narzędzia albo implementacje nowych właściwości w istniejących
narzędziach mogą nieść za sobą zmianę formatów plików
konfiguracyjnych i startować skrypty, które znajdują się w
/etc i będziesz przypuszczalnie musiał edytować te pliki
konfiguracyjne, tak żeby odpowiadały nowemu formatowi.
To jest najbardziej zmienna część pracy i wszystko co mogę zrobić, żeby ci pomóc to opisanie tego co zrobiłem u siebie, w nadziei, że posłuży ci to jako przewodnik. Ogólnie powinieneś zajrzeć do każdego katalogu, który zawiera
i oddziel tylko te pliki, które chcesz przenieść.
(Inną możliwą strategią jest zarchiwizowanie plików z mtime lub ctime późniejszym niż dzień instalacji i potem odtworzenie ich. Jeśli to zrobisz, to musisz mieć na uwadze, że nowa dystrybucja może i tak zawierać nowsze wersje plików, które zarchiwizowałeś.). W moim przypadku, skończyło się na archiwach następujących katalogów:
Mój system był względnie łatwy ponieważ nie było żadnych plików
spool, o które trzebaby się troszczyć. Nie mam katalogu do
news-ów, a ponieważ jest tylko dwóch użytkowników, najprościej
było przeczytać pocztę przed zamknięciem systemu. W innym przypadku
katalog /var/spool musiałby zostać zarchiwizowany w
ostatniej minucie. (No i oczywiście biblioteka news-ów i
katalogi lokalne !)
Szczegóły na ten temat znajdziesz w podręczniku do twojej nowej dystrybucji.
Od tłumacza: Możesz też zajrzeć do Bootdisk-HOWTO.
Będziesz potrzebował dwóch - po jednej na każde.
Jak to wszystko jest już zrobione jesteś gotowy na Wielką
Chwilę. Następny krok usuwa system z powierzchni ziemi.
Jest to ostatnia rzecz jaką będziesz robił na starym systemie zanim go zniszczysz.
Podręcznik do instalacji wyjaśni jak to zrobić. W tym momencie niszczysz stary system i jesteś zależny od jakości archiwów, które zrobiłeś ! Zostałeś ostrzeżony !
Jest już kilka dokumentów, które opisują procedurę instalacji, tak więc nie będę się zagłębiał w szczegóły. Kontunuuj od tego miejsca jak już nowy system będzie startował z twardego dysku.
W czasie instalacji zrób także dyskietkę, z której będziesz mógł startować ponieważ zainstalowane jądro będzie musiało zostać podmienione a wypadki się zdarzają. Upewnij się, że zainstalowałeś pakiety do rozwoju (development) i źródła do jądra.
I dodaj swoją partycję swap. Potem wydaj polecenie swapon
-a. Nie wiem dlaczego, ale program do instalacji Slackware'u
nie daje możliowści zrobienia tego jeśli twoja partycja swap
już istnieje. Potem jak próbujesz wystartować system, skrypt
rc.S próbuje włączyć swap-owanie i nie znajduje partycji
swap - ten krok naprawia ten błąd.
Jak to jest opisane powyżej, nie możesz po prostu skopiować
wszystkich plików spowrotem do tego katalogu i oczekiwać, że
wszystko będzie ładnie działać. Niektóre pliki, z którymi możesz
tak postąpić, np. /etc/XF86Config (o ile używasz tej samej
wersji XFree86 i tej samej karty graficznej). Chociaż w
większej części najlepiej jest użyć programu diff do
porównania plików przed rozpoczęciem kopiowania. Uważaj szczególnie
na znaczące zmiany w /etc/rc.d, które mogą wymagać ręcznej
restabilizacji twojego systemu, zamiast kopiowania zarchiwizowanych
skryptów. Jak już wszystko jest gotowe - zrestartuj system.
Nawet jeśli w ogóle nie musisz tego robić, żeby otrzymać jądro, które obsługuje twój sprzęt, opłaca się to zrobić, choćby dlatego, żeby pozbyć się kupy niepotrzebnych sterowników z jądra, które tylko je spowalniają. Szczegóły znajdziesz w Kernel-HOWTO. Najpierw zainstaluj nowe jądro na dyskietce - jeśli wszystko działa, to zainstaluj je na dysku twardym, uruchom LILO jeśli go używasz, i zrestartuj komputer.
Niektóre binaria będą musiały zostać zainstalowane z katalogów
źródłowych; musiałem tak zrobić z lilo, na przykład, ponieważ
miałem nowszą wersję niż w dystrybucji i nie zarchiwizowałem
katalogu /sbin. Będziesz pewnie chciał sprawdzić programy
z archwium czy wszystkie się poprawnie zainstalowały oraz czy
wszystkie pliki konfiguracyjne i biblioteki są na miejscu. W
niektórych przypadkach musisz odtworzyć programy w określonej
kolejności; robiłeś notatki podczas archiwizacji, czyż nie ? ;)
Sparwdź prawa dostępu do plików i katalogów, żeby dowiedzieć się
czy dostęp nie jest zbyt mały lub zbyt szeroki. Dowiedziałem się
np., że Slackware dąży do bardziej otwartego środowiska niż ja
lubię, więc przechodzę przez katalogi i zmieniam 755 na 711 dla
plików w .../bin i podobnych rzeczy. A nawet zmieniam na
700 dla plików w /sbin. Szczególna ostrożność jest
potrzebna jeśli miałeś serwer ftp - ale jeśli już go miałeś, to na
pewno o tym pomyślałeś wcześniej :)
System już działa. Przez następną chwilę, będą pewnie jakieś szczegóły do dopracowania; ale większość roboty jest już zrobiona. Miłej zabawy !
UŻYWAJ INFORMACJI TU ZAWARTYCH NA WŁASNE RYZYKO !!! (Zobacz sekcję Prawa autorskie i zrzeczenie.)
Wielkie podziękowania za wkład wniesiony do tego mini-HOWTO dla Zoltána Hidvégi.
Jeśli znalazłeś jakieś rażące błędy ortograficzne, gramatyczne, składniowe, techniczne to pisz do mnie:
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.ippt.gov.pl/pub/Linux/JTZ/
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 sie na nią zapisać, to
wyślij list o treści subscribe jtz Imię Nazwisko na adres
listproc@ippt.gov.pl
Zmiany wprowadzone przeze mnie do tego dokumentu to polskie odnośniki do serwerów ftp i WWW oraz informacja o Bootdisk-HOWTO. doc-linux-pl-2002.06.14.orig/mini/html/Visual-Bell.pl.html 0100664 0001750 0001750 00000027253 07457640740 021736 0 ustar coven coven
Copyright (c) 1997, Alessandro Rubini
Niniejszy dokument rozpowszechniany jest na warunkach określonych w licencji GNU Free Documentation License. Jeśli nie otrzymałeś treści licencji FDL z tym dokumentem, zapoznać się z nią możesz pod adresem http://www.fsf.org/licenses/fdl.html.
Konsola Linuksa wydaje sygnał dźwiękowy (brzęczyk) po natrafieniu na znak BEL (kod ascii 7). Jest to rozsądnie wybrana standardowa reakcja, jednak wielu użytkowników nie lubi, kiedy ich komputer wydaje dźwięki. Niniejszy dokument opisuje sposób takiej konfiguracji programów, aby nie wysyłały one kodu BEL oraz takiej konfiguracji jądra i X, aby komputer milczał nawet wtedy, gdy kod BEL zostanie wysłany. Większość tekstu dotyczy konsoli, ponieważ konfiguracja serwera X w tym zakresie nie powinna powodować trudności.
Według mnie temperowanie niesfornej maszyny należy rozpocząć na poziomie sprzętowym; np. w moim komputerze głośniczka nie ma!
Głośniczkotomia jest najskuteczniejszym rozwiązaniem problemu alarmu dźwiękowego. Jak sama nazwa wskazuje, sposób polega na fizycznym odłączeniu lub usunięciu głośniczka. Operacja jest prosta -- można się nawet obyć bez znieczulenia.
Istnieją też sposoby nieco bardziej wyrafinowane. Pecety wyposażone są zwykle
w przełącznik TURBO. Podczas pracy w środowisku wielozadaniowym guziczka tego
nigdy się właściwie do spowalniania procesora nie używa; nie ma takiej
potrzeby nawet w przypadku gier opartych na programowych pętlach. Niestety,
przyspieszyć komputera tym guziczkiem się nie da; można go za to wykorzystać
do włączania/wyłączania głośniczka. Głośniczek, choć generalnie irytujący,
czasem jednak bywa przydatny np. do zaanonsowania zakończenia długiej
kompilacji.
Aby zmienić funkcję przełącznika, po prostu odłącz go od
płyty głównej i połącz szeregowo z głośniczkiem.
W przypadku komputerów przenośnych (laptopów), dostęp do brzęczyka jest niestety ograniczony; brak też przełącznika, któremu możnaby podporządkować nowe zadanie. Użytkownicy takich komputerów muszą ograniczyć się do rozwiązań programowych, o czym poniżej.
Od wersji jądra 1.3.43 wzwyż, dzięki łatce Martina Maresa na console.c,
istnieje możliwość wyboru częstotliwości i długości trwania alarmu dźwiękowego.
Wysyłając odpowiednie sekwencje znaków niedrukowalnych na poszczególne konsole
można konsolom tym przypisać różne właściwości dźwięku (lub jego brak). Całość
sprowadza się do umieszczenia poleceń konfigurujących dźwięk w pliku
~/.login lub ~/.profile. Odpowiedzialne za właściwości
dźwięku kody to:
[10;xx]
-- określa częstotliwość dźwięku w Hertzach. Dozwolone wartości xx mieszczą
się w zakresie od 21 do 32766; wynik działania wartości przekraczających te
granice nie jest zdefiniowany. W przypadku braku argumentu xx
('ESC-[10]') stosowana jest wartość domyślna (750Hz)
[11;xx]
-- określa długość trwania dźwięku w milisekundach. Wartość domyślna
(125 ms) stosowana jest w przypadku wybrania czasu przekraczającego 2 sekundy
oraz jeśli argument xx nie jest podany ('ESC-[10]').
Przykład:
Aby ustawić częstotliwość dźwięku na 50Hz a jego długość na 1 sek, wydaj w
bashu polecenie 'echo -e "\\33[10;50]\\33[11;1000]"'
(argument -e oznacza 'interpretuj znaki niedrukowalne'). Odpowiednikiem tej
komendy dla tcsh jest 'echo "\\033[10;50]\\033[11;1000]"'.
Żadna ze znanych mi obecnie wersji polecenia setterm
nie potrafi konfigurować dźwięku, niewykluczone jednak, że w przyszłości
ta funkcjonalność zostanie dodana.
Jeśli używasz jądra 1.3.43 lub nowszego i satysfakcjonuje cię powyższe rozwiązanie, możesz tu zakończyć czytanie. Jeśli jednak używasz starszego jądra lub chciałbyć stosować alarm wizualny zamiast dźwiękowego, czytaj dalej.
Tekstowy plik /etc/termcap to baza danych o możliwościach terminali
(ang. terminal capablilities
-- stąd nazwa). Wiele programów (np. tcsh, bash, vi
i wszystkie korzystające z curses)
korzysta przy przesuwaniu kursora i innych operacjach związanych z ekranem z
zawartych w tym pliku informacji.
Baza /etc/termcap opisuje poszczególne rodzaje terminali. Do
odpowiedniej części tej bazy kieruje aplikacje zmienna środowiskowa TERM.
Poszczególne możliwości terminali opisane są w termcap dwuliterowymi kodami,
po których następują sekwencje znaków wymaganych do osiągnięcia danego efektu.
Kolejne wpisy przedzielone są dwukropkiem (":"). Na przykład alarm dźwiękowy
(kod "bl") zazwyczaj opisany jest jako "bl=^G".
Wpis taki oznacza, że brzęczyk uzyskuje się sekwencją control-G (ascii BEL).
Obok alarmu dźwiękowego ("bl") rozpoznawany jest również wizualny ("vb" -- visual bell), jednak zazwyczaj brakuje tego wpisu w poświęconej terminalowi "linux" części termcap.
Większość nowszych aplikacji i bibliotek zamiast z termcap
korzysta z bazy danych terminfo.
W przeciwieństwie do termcap, termifo
nie jest jednym wielkim plikiem, a katalogiem, w którym opisy poszczególnych
terminali umieszczone są w osobnych plikach, a te z kolei w podkatalogach
o nazwach będących kolejnymi pierwszymi literami alfabetu. Na przykład
opis terminala "linux" znajdzie się w pliku /usr/lib/terminfo/l/linux
(lub /usr/share/terminfo/l/linux -- przyp. tłum). Opisy terminali
w terminfo są plikami binarnymi, kompiluje je się programem tic
(patrz man tic).
Dodanie brakującej definicji alarmu wizualnego "vb" do /etc/termcap
nie jest trudne. Oto metoda Dennisa Henriksena (duke@diku.dk): należy odnaleźć
sekcję "linux" (w starszych dystrybucjach sekcja ta nazywa się "console") i
dodać w niej następującą linię:
:vb=\E7\E[?5h\E[?5l\E[?5h\E[?5l\E[?5h\E[?5l\E[?5h\E[?5l\E8:\
Ostatni ukośnik zapobiega złamaniu linii.
Jeśli chcesz zmusić konsolę do używania alarmu wizualnego zamiast dźwiękowego
(błysk zamiast pisku) znajdź w pliku termcap
w sekcji dla twojego terminala definicję efektu "bl" i zmień ją na definicję
błysku (podaną w poprzednim rozdziale). To rozwiązanie jest najwygodniejsze,
jeśli nie chcesz określać osobno zachowania różnych aplikacji. Ja stosuję ten
sposób na wszystkich moich komputerach z Linuksem, w których nie mogę fizycznie
odłączyć głośniczka.
Poniżej podaję niekompletny spis programów, które można przekonać do używania
podanej w termcap lub terminfo
definicji "vb" bieżącego terminala.
xset b".
Polecenie to przyjmuje trzy numeryczne argumenty: głośność,
częstotliwość oraz długość. "xset -b"
całkowicie wyłącza brzęczyk. Konfiguracja działa na wszystkie
programy uruchomione pod X.
xterm:
xterm umie zinterpretować sygnał BEL zarówno jako alarm dźwiękowy, jak
i wizualny. Jeśli zdecydujesz się na alarm dźwiękowy, zadziałają
ustawienia "xset" (patrz punkt "Serwer X"). Alarm wizualny uzyskać
można poprzez podanie opcji "-vb" przy uruchamianiu xterm-a lub
zdefiniowanie zasobów "xterm*visualBell: true".
Podczas działania xterma rodzaj alarmu przełączać można w menu
wywoływanym przez control+lewy_przycisk_myszy.tcsh (6.04 i nowsze): "set visiblebell".
Instrukcję tę można umieścić w pliku .cshrc
lub podać interaktywnie. Wyłączenie alarmu wizualnego: "unset visiblebell".
Wyłączenie alarmu wizualnego oraz dźwiękowego: "set nobeep".
bash (o ile wiem wszystkie wersje):
umieść linię "set bell-style visible" w pliku ~/.bashrc.
Zamiast "visible" (wizualny) możesz wpisać "audible" (dźwiękowy)
lub "none" (żaden).
bash (z readline,
oraz inne aplikacje korzystające z readline):
umieść linię "set prefer-visible-bell" w pliku ~/.inputrc.
nvi i elvis: umieść linię "set flash"
w pliku ~/.exrc lub interaktywnie podaj ":set flash"
(pamiętaj o dwukropku). Zamiana w powyższej linii słowa "flash"
na "noflash" spowoduje wyłączenie alarmu wizualnego.
emacs: umieść linię "(setq visible-bell t)" w
pliku ~/.emacs. Zamiana w powyższej komendzie końcowej litery
"t" na słowo "nil" spowoduje wyłączenie alarmu wizualnego.
less:
alarm wizualny włącza się podając w linii poleceń opcję "-q",
natomiast wszystkie rodzaje alarmu wyłącza się opcją "-Q".
Opcje domyślne można umieścić w zmiennej środowiskowej "LESS".
screen:
użyj kombinacji klawiszy CtrlA-CtrlG. Zmieni to zachowanie wszystkich
wirtualnych sesji. Więcej informacji na ten temat znajdziesz w
podręczniku systemowym ("man screen") w sekcji "CUSTOMIZATION".
Niestety nie wszystkie aplikacje korzystają z informacji zawartych w bazach
termcap lub terminfo.
Większość małych programików ma na sztywno w kodzie C zaszyte "\a" (alarm).
"\a" w ciągach znaków w plikach binarnych interpretowane jest jako ascii BEL.
"Prawdziwych" aplikacji problem ten zazwyczaj nie dotyczy, ale uważaj na
produkty początkujących programistów C -- najgorsi są tu studenci informatyki!
Jedynym sposobem uciszenia takich programów jest głośniczkotomia lub
wykorzystanie sekwencji kodów podanej przez Martina Maresa.
Wersja oryginalna dokumentu:
http://sunsite.unc.edu/LDP/.
Tłumaczenia pozostałych dokumentów HOWTO na język polski:
http://www.jtz.org.pl.
Copyright for the translation
(c) 2001 by Tomasz 'tsca' Sienicki, tsca@edb.dk
doc-linux-pl-2002.06.14.orig/mini/html/Win95+Win+Linux-mini-HOWTO.pl.html 0100644 0001750 0001750 00000042627 07164466740 024207 0 ustar coven coven
15 stycznia 1998
Autor nie zajmuje się już opieką nad dokumentem Win95+Win+Linux mini-HOWTO.
Jeśli jesteś zainteresowany jego utrzymywaniem, skontaktuj się, proszę, ze
mną, wysyłając e-mail na adres:
tjbynum@metalab.unc.edu.
Pierwsza wersja tego dokumentu powstała w styczniu 1996. Od tego czasu dodałem wiele komentarzy, informacji i pytań, otrzymanych od różnych osób. Istnieje japońska wersja tego dokumentu; zobacz zbiór japońskiej dokumentacji dotyczącej Linuksa pod adresem: http://epsenewsc.gee.kyoto-u.ac.jp/JF/JF.html. Polska wersja tego dokumentu jest dostępna pod adresem: http://sunsite.icm.edu.pl.
Jeśli chcesz mieć możliwość ładowania kilku różnych systemów operacyjnych (bez potrzeby stosowania startowych dyskietek!), musisz używać czegoś takiego, jak MENEDŻER ŁADOWANIA.
Windows 95 nie ma tak naprawdę menedżera ładowania. Ma, co prawda, opcje ładowania, ale w moim podręczniku piszą, że menedżer ładowania można skonfigurować tak, aby ładował dowolny system.
LILO można skonfigurować tak, aby ładowało prawie każdy system. Podobnie można skonfigurować menedżery ładowania OS/2 i Windows NT. To, którego menedżera używasz, zależy od tego, czego chcesz od swojego komputera. Jeśli, na przykład, używasz menedżera ładowania OS/2, to ``ukrywa'' on ``inne'' dosowe partycje.
Jeśli chcesz używać tylko Windows 95 i Linuksa, przeczytaj raczej Win95+Linux HOWTO. Najnowszą wersję możesz znaleźć pod adresem: http://www.in.net/~jkatz/win95/Linux-HOWTO.html. Wersja polska jest (albo wkrótce będzie :-)) dostępna pod adresem: http://sunsite.icm.edu.pl.
Windows 95 i Linux mogą być zainstalowane na jednym dysku. Reszta dokumentu opisuje, jak rozwiązać problemy z DOSem, który nie pozwala na istnienie więcej, niż JEDNEJ podstawowej partycji DOS na jednym dysku.
Jeśli chcesz używać menedżera ładowania NT, zajrzyj pod adres: http://www.bcpl.lib.md.us/~dbryan/directboot.html.
Żeby dodać Linuksa (albo inny system, w tym OS/2), potrzebny jest taki fajny programik, który tworzy pliki sektorów startowych tak, aby mógł z nich korzystać menedżer ładowania NT. Informacje na ten temat możesz znaleźć pod adresem: http://ourworld.compuserve.com/homepages/gvollant/othertl.htm.
Możesz też wypróbować program loadlin.exe, który umożliwia
``przeładowanie'' na Linuksa po uprzednim uruchomieniu DOSa.
Ten dokument opisuje następujące sprawy:
System plików Windows 95 istnieje wprawdzie na szczycie standardowego systemu DOS FAT, ale robi z nim paskudne rzeczy. Uruchom swój komputer z Windows 95 przy pomocy startowej dyskietki DOS i każ Nortonowi sprawdzić dysk, ale NIE pozwól mu na dokonanie żadnych napraw, bo popsujesz ``długie'' nazwy plików.
Chcą ostatnio ode mnie, żebym zajmował się obsługą aplikacji zarówno w środowisku Windows 95, jak w Windows 3.x (oba działające lokalnie lub ładowane z sieci). Opracowałem odpowiednie ustawienia opisane w tym dokumencie tak, żebym mógł robić to wszystko tylko na jednym PC.
Nie pytajcie mnie, jak człowiek używający Uniksa skończył w takiej sytuacji :-)
Jeśli umiesz grzebać się w źródłach LILO (wersja 17 albo nowsza, jak mi się zdaje), to możesz osiągnąć to wszystko z JEDNYM dyskiem. Działa to na zasadzie zmiany zawartości tablicy partycji podczas ładowania systemu. Jeśli nie czujesz się zbyt pewnie, to lepiej nie próbuj!
W przeciwnym wypadku będziesz potrzebował DWÓCH dysków twardych. Wynika to z ograniczeń DOS/Windows dotyczących ładowania systemu i przypisywania liter napędów. Wierz mi, próbowałem tego z jednym dyskiem (ale nie chciałem się grzebać w źródłach LILO).
Parę słów o nazwach urządzeń. Widywałem systemy, w których /dev/hdc
oznaczało trzeci dysk IDE (pierwszy dysk IDE na drugim kontrolerze), a
/dev/hdd oznaczało czwarty dysk. Widywałem też systemy używające nazw
/dev/hd1a i /dev/hd1b (nazwy partycji to /dev/hd1a3
itd.). Mój system stosuje ten drugi styl nazewnictwa, ale zmieniłem nazwy na
/dev/hdc i /dev/hdd, żeby nie było niejasności.
Oto krótki opis tego, co sam teraz mam. Uważaj na litery dysków, bo się zmieniają...
Jeśli używasz drugiego kontrolera IDE, być może, że będziesz musiał sam
utworzyć pliki w katalogu /dev. (/dev/hdc* i
/dev/hdd*). Może tak być, gdy dodajesz drugi dysk twardy do
komputera, w którym jest zainstalowany jeden dysk IDE i CD-ROM IDE; twój drugi
dysk twardy otrzymałby nazwę /dev/hdc. Próbowałem takiego ustawienia i
nie miałem żadnych problemów.
W swoim komputerze mam:
/dev/hda - pierwszy dysk twardy
/dev/hdb - napęd CD-ROM
/dev/hdc - drugi dysk twardy
Po włączeniu komputera mogę pozwolić startowej pamięci ROM
karty ethernetowej na zdalne załadowanie DOSu. Napęd ``C'' to pierwsza partycja
DOS na PIERWSZYM dysku IDE (w moim przypadku /dev/hda1).
Napęd ``D'' to pierwsza partycja DOS na DRUGIM dysku IDE (w moim
przypadku /dev/hdc1), a napęd ``E'' to druga partycja DOS na
DRUGIM dysku IDE (/dev/hdc2). Napęd CD-ROM ma literę F:
Pozwól LILO załadować domyślny system (Linuksa, ma się rozumieć)
Podczas uruchamiania LILO włącz opcję, która u mnie nazywa się
DOS. Ładuje to DOS z /dev/hda1 i, tak samo, jak w przypadku opcji 1,
napęd ``C'' to /dev/hda1, ``D'' to /dev/hdc1, a ``E'' to
/dev/hdc2. CD-ROM to F:
Podczas uruchamiania LILO włącz opcję, która u mnie nazywa się
Win95. Ładuje to Windows 95 z pierwszej partycji DOS DRUGIEGO dysku
IDE (w moim przypadku /dev/hdc1). I teraz uwaga: napęd ``C'' to teraz
pierwsza partycja DOS na DRUGIM dysku IDE (/dev/hdc1), napęd
``D'' to piersza partycja DOS na PIERWSZYM dysku IDE
(/dev/hda1), napęd ``E'' to cały czas druga partycja DOS na
DRUGIM dysku IDE (/dev/hdc2). CD-ROM to F:
Zwróć uwagę na to, że napęd C zmienia się w zależności od opcji ładowania. To
znaczy, że gdy instalujesz Windows 95, to instalujesz go w katalogu
C:\WINDOWS. Kiedy instalujesz Windows 3.x, to też instalujesz go w
katalogu C:\WINDOWS, ale to są różne katalogi :-)
Zauważ też, że trzecia partycja DOS (na której trzymam dane) to E:, niezależnie od sposobu ładowania, i że litera CD-ROMu też się nie zmienia.
Przede wszystkim zainstaluj Linuksa, nieważne, na którym dysku. Jednakże, ponieważ będziesz używać dwóch dysków, rozsądne będzie utworzenie na każdym z nich partycji wymiany.
Utwórz podstawową partycję DOS na drugim dysku. Dosowy FDISK nie pozwala,
niestety, na coś takiego. Dlatego musisz użyć wersji linuksowej,
żeby utworzyć partycję, ustawić jej typ (6 dla partycji DOS 16 BIT FAT > 32
MB) i ustawić ją jako aktywną. UWAŻNIE stosuj się do porad strony
podręcznika man fdisk. Opisuje ona, co trzeba zrobić, aby DOS
rozpoznawał partycję utworzoną w ten sposób. Trzeba zastosować polecenie
dd do wyczyszczenia pierwszych 512 bajtów tej partycji. (Zasadniczo
używa się polecenia ``dd if=/dev/zero of=/dev/XXXX bs=512
count=1'', gdzie XXXX to nazwa urządzenia. Musisz być jednak
BARDZO ostrożny, ponieważ jest to doskonały sposób na zniszczenie
dysku - na przykład przez wpisanie /dev/hda zamiast
/dev/hda1!)
Prymarną partycję DOS na pierwszym dysku twardym możesz utworzyć przy pomocy dosowego FDISKa. W ten sposób możesz też utworzyć inne potrzebne partycje dosowe.
Obie partycje podstawowe musisz sformatować jako startowe partycje DOS. Użyj w
tym celu poleceń FORMAT C: /S i FORMAT D: /S po załadowaniu
DOSa z dyskietki. Żeby uniknąć niejasności, nadaj partycjom jednoznaczne
etykiety woluminów!
Zmodyfikuj plik /etc/lilo.conf tak, aby było możliwe ładowanie
systemu z obu podstawowych partycji DOS. Na końcu dokumentu zamieściłem
przykładowy taki plik. Zwróć uwagę na znajdującą się w nim linię
``loader''. To od ciebie zależy, gdzie zainstalujesz Windows 95, a
gdzie DOS/Windows 3.x. Ja używam drugiego dysku twardego dla Windows 95,
ponieważ w przypadku ładowania z sieci normalny dysk DOS ma literę ``C''.
Oprócz tego (i to się przydaje), instalacja Windows 95 na drugim dysku pozwala
na uniknięcie konieczności ładowania Linuksa z dyskietki ratunkowej i ponownej
instalacji LILO (poniżej wyjaśniam, dlaczego miałoby się tak stać). Pamiętaj,
żeby wydać polecenie /sbin/lilo, aby wprowadzić zmiany w życie.
Jeśli planujesz (rozsądnie) instalację Windows 95 z CD-ROMu, będziesz musiał umieścić odpowiednie sterowniki na partycji przeznaczonej dla Windows 95, tak aby po załadowaniu z niej był dostępny napęd CD-ROM.
Następnie przy użyciu LILO uruchom komputer z napędu, na którym chcesz
zainstalować DOS/Windows 3.x i zainstaluj resztę DOS i Windows 3.x. Windows
powinien być zainstalowany w domyślnym katalogu C:\WINDOWS.
Kiedy już tak zrobisz, uruchom ponownie komputer i, używając LILO, załaduj
partycję Windows 95. Przeprowadź instalację Windows 95. Instalator może
zasugerować instalację Windows 95 w katalogu D:\WINDOWS, ponieważ
sprawdza on komputer w poszukiwaniu istniejących wersji Windows. NIE
akceptuj tego - zainstaluj Windows 95 w katalogu C:\WINDOWS.
A teraz najfajniejsze! Windows 95 jest raczej samolubnym systemem. Kiedy go instalujesz, zakłada on, że jest jedynym systemem operacyjnym w komputerze i zapisuje własny MBR (Master Boot Record - Główny Rekord Ładujący) na twardym dysku. To właśnie dlatego musisz ponownie instalować LILO. Jeśli natomiast zainstalowałeś Windows 95 na drugim dysku, zrobiłeś coś, czego programiści Microsoft™ nie przewidzieli. Na jednym komputerze, na którym przeprowadziłem taką operację, Windows 95 umieścił swój MBR na miejscu MBR DRUGIEGO dysku. Na innym komputerze w ogóle nie znalazłem na to dowodu. Praktyczny efekt jest taki, że ten ważny MBR, czyli ten na pierwszym dysku, pozostaje nienaruszony. Dzięki temu, kiedy ponownie uruchamiasz komputer, wita cię przyjazny i znajomy znak zachęty LILO.
Przykładowa lista partycji:
/dev/hda1 * partycja DOS (C: lub D: zależy od ładowania)
/dev/hda2 partycja rozszerzona
/dev/hda5 /
/dev/hda6 swap
/dev/hda7 /home
/dev/hdc1 * partycja Windows 95 (C: lub D: zależy od ładowania)
/dev/hdc2 partycja DOS (E: zawsze)
/dev/hdc3 swap
(Partycje oznaczone przy pomocy * są ustawione jako startowe (czyli ``aktywne'') przez FDISK)
Przykładowy plik /etc/lilo.conf:
# /etc/LILO.conf
install = /boot/boot.b
compact
delay = 20 # opcjonalne, dla systemów, które ładują się bardzo szybko
#prompt # użyj zamiast delay, by wymusić reakcję na linię
# zachęty ładowania
#vga = normal # wymuszenie rozsądnego stanu
#ramdisk = 0 # opcja dla paranoików
#root = current # użyj "bieżącego" głównego systemu plików (root)
boot = /dev/hda
image = /boot/vmlinuz
read-only
label = linux
other = /dev/hdc1
label = win95
loader= /boot/any_d.b
other = /dev/hda1
table = /dev/hda
label = dos
image = /boot/vmlinuz.old
label = linux.old
optional
read-only
P: Czy ten schemat działa z dyskami SCSI?
O: Podobno tak, ale sam nigdy nie próbowałem
P: Czy ten schemat działa w przypadku, gdy Linux zajmuje cały jeden
dysk, a DOS i Windows 95 znajdują się na partycjach drugiego dysku?
O: Nie. DOS i Windows 95 muszą znajdować się na podstawowych partycjach
``DOS''. Można to obejść przez rekompilację LILO
P: Ściągnąłem z sieci Windows 95 FAQ, w którym jest powiedziane, że
można ładować zarówno DOS, jak i Windows 95. Jeśli zainstaluję Windows 3.11 w
innym katalogu niż ``WINDOWS'', to podobno mogę bez problemów
uruchamiać Windows 95 i Windows 3.11. Oba są na jednej partycji.
O: Tak, można tak zrobić. Może to jednak powodować problemy. Windows
95 robi paskudne rzeczy z napędem FAT i niektóre operacje, jakie wykonujesz z
poziomu starej wersji DOS i starego Windows (3.x) mogą ławo zniszczyć
informację dotyczącą długich nazw plików. Tak zrobi, na przykład,
defragmentacja dysku przy pomocy programu DOS/Windows 3.x. Wpędzasz się też w
kłopoty, jeśli coś nie działa, bo musisz zawracać sobie głowę plikami INI obu
systemów *i* rejestrem Windows 95.
P: Czy LBA ma znaczenie?
O: Tak. Uff!
BIOSy mniej więcej od roku 1994 wspierają LBA, aby obejść ograniczenia DOSu,
które uniemożliwają mu obsługę ilości cylindrów większej, niż 1024. (Jest to
opisane o wiele bardziej wyczerpująco w dokumentach PC hardware FAQ). LBA
oszukuje geometrię dysku, mnożąc liczbę głowic przez 2 lub 4 (itd.), aby
podzielić liczbę cylindrów przez 2 lub 4 (itd.) tak, aby była ona mniejsza od
1024. To potrafi obejść ograniczenia DOSu.
Linux obsługuje liczbę cylindrów większą od 1024 (pod warunkiem, że partycja, z której ładujesz, leży w całości poniżej 1024 cylindra), potrafi też obsłużyć duże (>504MB) dyski nawet na starszych komputerach (z BIOSem sprzed 1994). Obsługuje także dyski na BIOSach wspierających LBA, niezależnie od tego, czy LBA jest włączone.
Niezbędne jest, aby dla WSZYSTKICH systemów operacyjnych każdy dysk miał tę samą geometrię. To dlatego, że liczby w tablicy partycji to ``dostrzegane'' liczby cylindrów, a nie rzeczywiste. Tak więc włączenie w BIOSie opcji LBA spowoduje, że istniejąca zawartość dysku będzie bezużyteczna.
Jeśli twój Linux nie widzi ``właściwej'' geometrii (to znaczy tej samej, którą
``widzi'' DOS), będziesz musiał do pliku /etc/lilo.conf dodać linię
append=``hd=x.y.z'', gdzie x,y,z oznaczają geometrię
dysku (przeczytaj odpowiednie strony man).
P: Mój BIOS ma informacje tylko o dwóch dyskach twardych, a nie o
czterech. Czy to ma znaczenie?
O: Może! Używanie czterech dysków ze starym BIOSem pod DOSem
wymaga stosowania dodatkowych sterowników. Nowsze BIOSy obsługują cztery dyski.
Linux bez kłopotu obsługuje cztery dyski nawet na większości starszych BIOSów, ale jeśli umieścisz partycję DOS na trzecim dysku, będziesz miał do niej dostęp wyłącznie z poziomu Linuksa.
Jest to ważne, ponieważ wiele komputerów ma dysk IDE i napęd CD-ROM IDE, a także, jeśli chcesz stosować rady z tego dokumentu, drugi dysk IDE.
Jeśli ten dokument na coś ci się przydał, proszę, daj mi znać.
Tłumaczenie to jest chronione prawami autorskimi © Leszka Pietryki. Dozwolone jest rozprowadzanie i dystrybucja na prawach takich samych jak dokument oryginalny.
Nie zmieniłem zasadniczej treści dokumentu. Dodałem tylko odnośniki do stron z polskimi wersjami tłumaczeń dokumentów HOWTO oraz wprowadziłem kilka nieznacznych zmian, jak na przykład tytuł pierwszej sekcji.
Nie znalazłem oryginału w formacie sgml, dlatego wszystkie znaczniki
powstawiałem sam. W związku z tym winę za ewentualny niewłaściwy układ
dokumentu ponoszę wyłącznie ja.
Jest to pierwsze HOWTO, które przetłumaczyłem, więc jest tu pewnie mnóstwo pomyłek. Będę wdzięczny za wszelkie komentarze i poprawki (no i oczywiście za pochwały ;-)).
doc-linux-pl-2002.06.14.orig/mini/html/XFree86-XInside.pl.html 0100664 0001750 0001750 00000037514 07104371340 022332 0 ustar coven coven
Wiosną 1996 widziałem wiele listów w grupie comp.os.linux.x z pytaniami o to jak przenieść tryby video z XFree86 do jednego z jego komercyjnych odpowiedników: XInside (teraz nazwanym XiGraphics, jednak w tym dokumencie używam starszej nazwy ponieważ będę się odwoływał głównie do tamtej wersji).
Zanim powstała nowa wersja tego programu grzebałem trochę w tej starszej i ciągle mam tę przerobioną wersję gdzieś na moim dysku: ponieważ lubię rozwiązywać problemy postanowiłem spróbować i po kilku godzinach grzebania i obliczania powstał w miarę sensowny artykuł, który natychmiast wysłałem.
Dyskusje na temat zamiany nagle zniknęły a ja otrzymałem 1 (jeden) list z podziękowaniami za artykuł, więc ponieważ może ktoś potrzebowałby tych informacji w przyszłości postanowiłem przekształcić ten artykuł w mini-HOWTO.
Pozwól mi jednak najpierw coś powiedzieć: NIE pracuję dla XInside i miałem dostęp tylko do wersji 1.2 dla Linux-a. Wiem, że w dzisiejszych czasach (Maj 97) AccelX osiągnął już wersję 3.1, ale myślę, że zawarte tutaj informacje, jeśli nie dosłownie, to i tak się przydadzą.
Ponieważ to HOWTO zostało napisane z pomocą dość starej wersji XInside, może się tak stać, że część zawartych tutaj informacji będzie niepełna: jak później przeczytasz, dzięki narodzinom XFree 3.2, nie kupiłem tego komercyjnego serwera. Tak więc jeśli zauważysz jakieś niepoprawne informacje w tym dokumencie proszę wyślij mi list.
Jednak zauważ, że manipulowanie częstotliwościami monitora może być cokolwiek niebezpieczne i dlatego nie daję absolutnie żadnych gwarancji. Jeśli będzie u ciebie działać, to dobrze, jeśli wysadzisz swój komputer, to nie wiń mnie za to.
Jak może zauważyłeś po moim nazwisku moim narodowym językiem nie jest angielski, więc przypuszczalnie zanjdziesz jakieś błędy tu i tam. Przepraszam za nie z góry i proszę nie zawalajcie mojej skrzynki listowej wiadomościami związanymi z tymi błędami. Dzięki!
Sądze, że taktyka Xinside polegająca na nie dołączaniu narzędzia (jak xvidtune) do obróbki trybów video czy do przeniesienia tych z XFree do wersji rozwojowej (i o ile wiem komercyjnej) jest niezrozumałe. Spędziłem nad tym jakieś 3 godziny (wskazówka: porównałem pozycję dotyczącą VESy 1024x768@70Hz w tych dwóch formatach (i jestem już prawie elektronikiem ;-)) podczas gdy programista Xinside mógłby napisać artykuł porównawczy...
Nie ściągałem żadnej wersji rozwojowej od 1.3 i naprawdę mam nadzieję, że to naprawili. Jeśli tak, to ten dokument jest już bezużyeczny, ale jeśli go przeczytasz, to dowiesz się trochę więcej o tym jak to działa.
Załóżmy, że masz jakiś tryb w XFree86 i chcesz z niego zrobić wersję dla Xinside z tymi samymi warunkami: postępuj zgodnie z opisanymi poniżej krokami, a powinno ci się udać. Użyjemy moich domyślnych trybów video jako przykładów z życia wziętych i wyjaśnię co musisz zrobić, żeby je zamienić.
Pozycja w XFree86 wygląda tak:
Modeline "blahblah" DOTCLK A B C D a b c d
Każdy z numerów A-D i 1-4 ma swoje znaczenie: jeśli chcesz, możesz ich poszukać w "The Hitchhiker's Guide to X386/XFree86 Video Timing" (/usr/lib/X11/doc/VideoModes.doc), ale nie musisz znać teorii, żeby je zamienić...
Moje tryby w /usr/lib/X11/XF86Config to:
Modeline "1168x876" 105 1168 1256 1544 1640 876 877 891 900
| | | | | | | | |
DOT_CLK A B C D a b c d
W Xinside, musisz dodać pozycję w pliku Xtimings, który powinien się znajdować w etc/ (od teraz zakładam, że jesteś w głównym katalogu Xaccel, którym powinien być /usr/X11/lib/X11/AcceleratedX).
! Gdzieś w tym pliku, umieść nazwy które chcesz
[PREADJUSTED_TIMING]
PreadjustedTimingName = "1168x876 @ 72Hz";
!
! Te cztery są oczywiste
!
HorPixel = 1168; // pixels
VerPixel = 876; // lines
PixelWidthRatio = 4;
PixelHeightRatio = 3;
!
! hsync: DOT_CLK / D * 1000 [KHz]
!
! hsync = 105 / 1640 * 1000 = 64.024 KHz
!
! vsync: ( 1 / (( D / DOT_CLK ) * d) ) * 1,000,000 [Hz]
!
! vsync: ( 1 / (( 1640 / 105 ) * 900) ) * 1,000,000
! ( 1 / 14057.1428571 ) * 1,000,000 = 71.138 Hz
!
HorFrequency = 64.180; // kHz
VerFrequency = 71.138; // Hz
! Oczywiste
ScanType = NONINTERLACED;
!
! Umieść tutaj opcje +/-hsync +/-vsync z XFree86
!
HorSyncPolarity = POSITIVE;
VerSyncPolarity = POSITIVE;
! Nie powinno się zmieniać
CharacterWidth = 8; // pixels
! Tutaj jest DOT_CLK
PixelClock = 105.000; // MHz
!
!
! Sekcja częstotliwości poziomych: [usec]
!
HorTotalTime = D / DOT_CLK = 15.619;
HorAddrTime = A / DOT_CLK = 11.124;
HorBlankStart = A / DOT_CLK = 11.124;
HorBlankTime = HorTotalTime - HorBlankStart = 4.495;
HorSyncStart = B / DOT_CLK = 11.962;
HorSyncTime = C / DOT_CLK - HorSyncStart = 2.743;
!
! Sekcja częstotliwości pionowych: [msec]
!
VerTotalTime = ( HorTotalTime * d ) / 1000 = 14.057;
VerAddrTime = ( HorTotalTime * a ) / 1000 = 13.682;
VerBlankStart = ( HorTotalTime * a ) / 1000 = 13.682;
VerBlankTime = VerTotalTime - VerBlankStart = 0.375;
VerSyncStart = ( HorTotalTime * b ) / 1000 = 13.698;
VerSyncTime = ( HorTotalTime * ( c - b ) ) / 1000
= 0.219
! Koniec!
Teraz tak nowo stworzone tryby musisz umieścić w plikach pokazanych poniżej w odpowiednich miejscach.
W wyjątkach pokazanych poniżej znak -> pokazuje co było zmieniane: nie wpisuj go do pliku!
Pozycja Monitor (moja to monitors/mfreq/mfreq64.vda)
[ESTABLISHED_TIMINGS]
"640x480 @ 60Hz",
"640x480 @ 72Hz",
"640x480 @ 75Hz",
"800x600 @ 56Hz",
"800x600 @ 60Hz",
"800x600 @ 72Hz",
"800x600 @ 75Hz",
"1024x768 Interlaced",
"1024x768 @ 60Hz",
"1024x768 @ 70Hz",
"1024x768 @ 75Hz",
"1152x900 Interlaced",
"1152x900 @ 60Hz",
"1152x900 @ 67Hz",
-> "1168x876 @ 72Hz",
"1280x1024 Interlaced",
"1280x1024 @ 60Hz",
"1600x1200 Interlaced";
Plik informacyjny na temat karty (mój to boards/s3/764-2.xqa, Zastanawiam się czemu mają prawie wszystkie karty Hercules, a mojej nie: Terminator 64/Dram)
[VISUAL]
BitsPerPixel = 8;
MemoryModel = Packed;
ColorModel = Indexed;
BitsRGB = 6;
NumberOfColors = 256;
[RESOLUTIONS]
640x480,
800x600,
1024x768,
-> 1168x876,
1152x900,
1280x1024
[DESKTOPS]
640x480,
800x600,
1024x768,
1152x900,
-> 1168x876,
1280x1024,
1600x1200
Jeśli częstotliwości zegara (dot clock) jest odpowiednio niski (NIE w tym przypadku dla mojej karty) możesz nawet tę pozycję umieścić w sekcji 16bpp i 32bpp.
Plik /etc/Xaccel.ini będzie wyglądał tak:
--------------------------------------------------------------
Board = "s3/764-2.xqa";
Monitor = "mfreq/mfreq64.vda";
Depth = 8;
-> Desktop = 1168x876;
[RESOLUTIONS]
-> 1168x876,
1024x768;
Właściwa pozycja odnośnie trybów w etc/Xtimings
--------------------------------------------------------------
[PREADJUSTED_TIMING]
PreadjustedTimingName = "1168x876 @ 72Hz";
HorPixel = 1168; // pixels
VerPixel = 876; // lines
PixelWidthRatio = 4;
PixelHeightRatio = 3;
HorFrequency = 64.024; // kHz
VerFrequency = 71.138; // Hz
ScanType = NONINTERLACED;
HorSyncPolarity = POSITIVE;
VerSyncPolarity = POSITIVE;
CharacterWidth = 8; // pixels
PixelClock = 105.000; // MHz
HorTotalTime = 15.619; // (usec) = 205 chars
HorAddrTime = 11.124; // (usec) = 146 chars
HorBlankStart = 11.124; // (usec) = 146 chars
HorBlankTime = 4.495; // (usec) = 59 chars
HorSyncStart = 11.962; // (usec) = 157 chars
HorSyncTime = 2.743; // (usec) = 36 chars
VerTotalTime = 14.057; // (msec) = 900 lines
VerAddrTime = 13.682; // (msec) = 876 lines
VerBlankStart = 13.682; // (msec) = 876 lines
VerBlankTime = 0.375; // (msec) = 24 lines
VerSyncStart = 13.698; // (msec) = 877 lines
VerSyncTime = 0.219; // (msec) = 14 lines
Możesz sprawdzić czy wszystko sie udało uruchamiając program vgaset bez parametrów podczas gdy uruchomiony jest serwer Xinside: na ekranie będzie pokazana linia na podobieństwo XFree86 i, jeśli wszytko jest dobrze, linia ta będzie taka sama jak ta, od której zacząłeś (za wyjatkiem jeśli b i c są takie same, nie byłem w stanie powtórzyć tej sytuacji w Xinside: najlepszym przypadkiem było c=b+1).
To wszystko! Mam nadzieję, że przyda ci się to. Nie sądzę, żebym kupił serwer XiGraphics w bliższej przyszłości z jednego prostego powodu: wersja 3.2 XFree86 rozwiązała wszystkie problemy związane z prędkością tekstu, jakie miałem na swojej skromnej karcie Trio 64 ;)
Jednak wygląda na to, że serwer XiGraphics obsługuje o wiele szerszy zestaw chip-ów i kart graficznych niż XFree, więc może się zdarzyć, że komercyjna alternatywa będzie jedyną dla ciebie. Jeśli tak jest i kupiłeś serwer XiGrpahics, z chęcia usłyszałbym czy zaprezentowane tu informacje przydały ci się czy były zbyt skomplikowane, czy cokolwiek.
Ten mały skrypt automatyzuje cała pracę. Bądź bardzo ostrożny z ScanType i z dwoma liniami Polarity: skrypt ich nie ustawia i jeśli jesteś zbyt leniwy, żeby je poprawić, to szansa na spalenie twojego monitora wzrasta znacznie.
Zauważ, że nie wiem czy parametr "Doublescan" ma jakieś znaczenie w XInside: jeśli spróbujesz zamienić jakiś tryb o małej rozdzielczości BĄDŹ OSTROŻNY, łatwo możesz załatwić swój monitor ponieważ częstotliwość odświeżania, jaką uzyskasz jest podwojona (a naprawdę moje 400x300@72Hz stało się 400x300@144Hz !).
#!/bin/sh
##########################################################################
# XF2XInside
#
# Skrypt ten zamienia opisy trybów z formatu XF86Config na format XInside
# tak jak tego wymaga plik etc/Xtimings.
#
# To jest tylko taki hacker-ski skrypt więc nie spodziewaj się zbyt
# zaawansowanego sprawdzania błędów (nie mówiąc już o przyjazności dla
# użytkownika).
#
# Jeśli wywołasz go bez argumentów powinien ci on powiedzieć co zrobić.
#
# ( Lipec 1996, hcz@tazlwurm.bb.bawue.de)
#
# Przy okazji: Nowe tryby stworzone tak jak to opisuje to HOWTO działają,
# ale nie pokazują się w menu Xsetup-u. Ktoś wie dlaczego?
#
##########################################################################
#----------------------------------------------- No to lecimy:
# Zmień to jeśli twój plik konfiguracyjny jest gdzieś indziej
XF=/usr/X11/lib/X11/XF86Config
if [ $# -ne 1 ] ; then
echo "usage: ${0##*/} <mode>"
echo " example: ${0##*/} 1024x764"
echo -e " function: converts $XF modeline entry into\n Xinside Format (stdout)"
exit 1
fi
egrep -i "^[\t ]*modeline.+\"$1\"" /usr/X11/lib/X11/XF86Config |
gawk '
NF < 11 { print "! invalid Modeline:\n! " $0 "\n!"; next }
{
print "//", $0 ":"
name = $2
DOT_CLK = $3;
A = $4;
B = $5;
C = $6;
D = $7;
a = $8;
b = $9;
c = $10;
d = $11;
VerFrequency = 1000000 / ((D / DOT_CLK) * d)
print "[PREADJUSTED_TIMING]"
printf " PreadjustedTimingName = \"%dx%d @ %.0dHz\";\n", A, a, VerFrequency
print " HorPixel\t\t= " A ";"
print " VerPixel\t\t= " a ";"
print " PixelWidthRatio\t= 4;\n PixelHeightRatio\t= 3;"
print " HorFrequency\t\t= " DOT_CLK / D * 1000 ";\t// kHz"
print " VerFrequency\t\t= " VerFrequency ";\t// Hz"
print " ScanType\t\t= NONINTERLACED;\t\t// *CHECK*"
print " HorSyncPolarity\t= NEGATIVE;\t\t\t// *CHECK*"
print " VerSyncPolarity\t= NEGATIVE;\t\t\t// *CHECK*"
print " CharacterWidth\t= 8;"
print " PixelClock\t\t= " DOT_CLK ";"
HorTotalTime = D / DOT_CLK
print " HorTotalTime\t\t= " HorTotalTime ";"
print " HorAddrTime \t\t= " A / DOT_CLK ";"
print " HorBlankStart\t\t= " A / DOT_CLK ";"
print " HorBlankTime\t\t= " D / DOT_CLK - A / DOT_CLK ";"
print " HorSyncStart\t\t= " B / DOT_CLK ";"
print " HorSyncTime\t\t= " C / DOT_CLK - B / DOT_CLK ";"
VerTotalTime = ( HorTotalTime * d ) / 1000
print " VerTotalTime\t\t= " VerTotalTime ";"
print " VerAddrTime\t\t= " ( HorTotalTime * a ) / 1000 ";"
VerBlankStart = ( HorTotalTime * a ) / 1000
print " VerBlankStart\t\t= " VerBlankStart ";"
print " VerBlankTime\t\t= " VerTotalTime - VerBlankStart ";"
print " VerSyncStart\t\t= " ( HorTotalTime * b ) / 1000 ";"
print " VerSyncTime\t\t= " ( HorTotalTime * ( c - b ) ) / 1000
print ""
}'
Prawa autorskie należą do © Marco Melgazzi (marco@techie.com) - dokument ten jest rozpowszechniany na podstawie GPL (Gnu Public License). Aby otrzymać kopię GPL, napisz do Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
Znaki towarowe należą do ich właścicieli. Nie ma żadnych gwarancji co do dokładności czy przydatności informacji zawartych w tym dokumencie.
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 (tych może trochę być, bo co do nazewnictwa w sprawach monitorów i kart graficznych jestem ignorantem) to pisz do mnie:
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.ippt.gov.pl w katalogu /pub/Linux/JTZ/.
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 sie na nią zapisać, to
wyślij list o treści subscribe jtz Imię Nazwisko na adres
listproc@ippt.gov.pl
doc-linux-pl-2002.06.14.orig/mini/html/Xterminal.pl.html 0100664 0001750 0001750 00000075746 07104371340 021556 0 ustar coven coven
Jest to pierwsza wersja tego dokumentu i powinna być uważana za wersję BETA. Jest to bardziej opis mojego postępowania niż wyczerpujący przewodnik. Dyskusje o mechanizmach kontroli dostępu (np. xaccess, xhost, MIT-COOKIEs), oraz użycie NFS-u, nie są jeszcze zawarte.
Większość XTerminali ma teraz całą gamę zaawansowanych właściwości, które pozwalają im być czymś więcej niż zwykłym X serverem. W większej części właściwości te będą ignorowane.
(Nie ma poprzednich wersji, więc wszystko było zmienione.)
Ani autor, ani dystrybutorzy, ani tłumacz tego dokumentu nie są w żaden sposób odpowiedzialni za fizyczne, finansowe czy moralne szkody spowodowane sugestiami zawartymi w tym dokumencie.
Prawa autorskie należą do Scota W. Stevensona.
O ile nie stwierdza się inaczej, dokumenty HOWTO są chronione prawami autorskimi ich autorów. Mogą one być rozprowadzane w całości lub w części, w jakiejkolwiek postaci fizycznej czy elektronicznej tak długo, dopóki znajduje się w nich ta wzmianka. Dystrybucja komercyjna jest dozwolona, a nawet zachęca się do niej; chociaż autor chciałby być poinformowany o takowej.
Wszelkie tłumaczenia, prace pochodne, prace zebrane zawierające dokumenty HOWTO muszą zawierać tę notatkę o prawach autorskich. Oznacza to, że nie możesz stworzyć pracy pochodzącej z HOWTO i nałożyć na jej dystrybucję dodatkowych ograniczeń. Wyjątki od tej zasady mogą być uczynione pod pewnymi warunkami; skontaktuj się z koordynatorem programu Linux HOWTO pod niżej podanym adresem.
Krótko mówiąc, chcemy promować szerzenie tych dokumentów przez wszelkie dostępne kanały. Chcielibyśmy także utrzymać prawa autorskie nałożone na te dokumenty, i być powiadomieni o planach dotyczących redystrybucji HOWTO.
Jeśli masz jakieś pytania, skontaktuj się proszę z Gregiem Hankinsem, koordynatorem projektu Linux HOWTO pod adresem gregh@sunsite.unc.edu. Możesz użyc programu finger, żeby poznać jego numer telefonu czy dalsze informacje.
Nowe wersje oryginału tego dokumentu można znaleźć na
ftp.icm.edu.pl w katalogu /pub/Linux/sunsite/docs/HOWTO/.
Odnośnie nowych wersji tłumaczenia zobacz sekcję
Od tłumacza. Jeśli nie masz dostępu do ftp, możesz
spróbować zdobyć pliki pomocy dotyczące Linux-a u Billa
Riemersa. Wyślij list na adres
bcr@physics.purdue.edu
z tematem help, aby uzyskać więcej informacji.
Wszelkie dodatki, komenatarze i poprawki dotyczące tego dokumentu są mile widziane. Wysyłaj je na adres scot@catzen.gun.de.
Szczególnie chciałbym otrzymać listy od ludzi, którym udało się już podłączyć XTerminal z Linux-em, nawet jeśli jest to coś w stylu "działało na takim komputerze z takim terminalem".
W następnej wersji pojawią się: mechanizm kontroli dostępu i użycie systemu plików NFS do startowania.
Sekcja ta podaje trochę bardzo podstawowych informacji dla tych, którzy nie są jeszcze zapoznani z X Window System i jego terminal-ologią. Jeśli masz jakiekolwiek doświadzczenia związane z X i XTerminalami możesz przeskoczyć tę sekcję bez żadnych skutków ubocznych.
X Window System, albo po prostu X-y (nigdy X Windows), jest przenośnym, niezależnym od sieci systemem okienek jak to określa strona podręcznika systemowego. Udostępnia środowisko graficzne, które jest niezależne od systemu operacyjnego, sprzedawców i sprzętu. Kiedy ludzie mówią o systemie okienkowym w połączeniu z Unix-em, prawie zawsze maja na myśli X-y.
Najważniejszą cechą X-ów w naszym przypadku jest ścisłe oddzielenie od siebie programów, które kontrolują lokalny sprzęt, z którym komunikuje się użytkownik (ekran, klawiatura, mysz itp.) i tych programów, które użytkownik chce uruchamiać (edytory, arkusze, DOOM). Oznacza to, że komunikujący te dwie rzeczy program nazywany X serwerem, może być na jednej maszynie, podczas gdy właściwe programy, albo X klienty, mogą być na jednej a nawet większej ilości maszyn w zupełnie różnych miejscach. Zauważ, że terminy "serwer" i "klient" używane są w odwrotnym znaczeniu niż normalnie.
Linux posiada kolekcję Xserwerów z projektu XFree86, to znaczy, serwerów dla kart graficznych SVGA, jak również całą kolekcję Xklientów takich jak: xv, maze czy xterm. Jeśli dopiero zapoznajesz się z X-ami, możesz chcieć trochę poeksperymentować z X-ami na maszynie Linux-owej zanim będziesz ustawiał XTerminal.
XTerminal (odtąd zwany XT) jest wyspecjalizowaną częścią sprzętu i oprogramowania, która łączy się w Xserwer, to jest, tę część X-ów, która zarządza wejściem/wyjściem do i od użytkownika. W najbardziej prymitywnym przypadku, zawarte są tylko program Xserwera i oprogramowanie komunikacyjne. Nawer menedżer okienek pochodzi od serwera, do którego poprzez ethernet połączony jest XT (albo rzadziej poprzez port szeregowy) używając protokołu TCP/IP.
Sprzęt XT będzie zawierał (duży) monitor, klawiaturę, myszkę, trochę RAM-u oraz gniazdka do ethernetu. Większość XT nie ma dysków twardych, stacji dyskietek ani żadnych innych urządzeń zapisu danych. Oznacza to, że XT mają swój system operacyjny albo w ROM-ie (rzadkość) albo ściągają go z hosta w sieci, do którego są podłączone.
Aby XT dostał się do swojego systemu operacyjnego na Linux-a podczas startu przeważnie robi on coś takiego: wysyła zawołanie o pomoc poprzez sieć ze swoim adresem ethernet. "Rzeczywisty" komputer w sieci porównuje ten adres z listą, którą posiada i jeśli znalazł jakiś identyczny, to wysyła do XT adres IP, który został mu przypisany (poprzez demona bootpd). Pozwala to XT na ściągnięcie systemu operacyjnego i ewentualnie innych danych, kórych potrzebuje z hosta (zwykle poprzez tftp). To jest cała procedura opisana w szczegółach.
Wtedy XT jest już w pełni wyposażonym komputerem z własnym numerem IP, RAM-em, programem i niezależnym sprzętem, chociaż bardziej jako uczony idiota. Jest najlepszy w tym co robi, czyli w zarządzaniu grafiką w X-ach, ale nieprzydatny do niczego innego.
W idealnym przypadku XT jest cichy, szybki i martwy. Zwykle bez wiatraczka, stacji dyskietek czy dysku twardego, nie robi żadnego hałasu. Z kilkoma metrami kabla ethernet możesz wystawić swój hałaśliwy komputer do innego pokoju a u siebie na biurku postawić cichy XT. Ponieważ XT jest stworzony do X-ów i grafiki, jest szybszy niż, powiedzmy, program X-owy pod MS Windows czy DOS-a.
Jeśli serwer jest na jednym komputerze i klient na drugim, to procesor nie musi się zajmowac jednym i drugim na raz. Chociaż, można tego nie zauważyć w szybkości przekazywania danych (ponieważ poruszają się one poprzez ethernet) zredukuje to zużycie CPU i zaoszczędzi trochę pamięci na maszynie Linux-owej, która w innym przypadku byłaby załadowana Xserwerem.
Jednak z drugiej strony będziesz potrzebował karty ethernet, co zwykle oznacza jeden port i IRQ. W zależności od producenta, oprogramowanie dla XT może zabrać około 20 MB na Linux-ie. Prawie zawsze możesz skasować dużo niepotrzebnych rzeczy jak już się zorientujesz co jest rzeczywiście niezbędne. Większość XT wymaga na hoście zainstalowania demonów bootpd oraz tftpd - oba są potencjalnymi dziurami w bezpieczeństwie. Będziesz przypuszczalnie chciał mieć jeszcze jednego demona - xdm - uruchomionego w tle. I tak - ten wielki monitor do XT zabierze dużo miejsca na biurku.
Miło, że pytasz ! Ale bardziej odpowiednie będzie czego ty potrzebujesz ?
Po pierwsze potrzebujesz XT. Jeśli masz dużo pieniędzy i to naprawdę dużo, możesz iść i kupić. Jim Morton < jim@applix.com> wysyła regularnie listę XT na comp.windows.x. Albo może się do ciebie uśmiechnąć szczęście. Ponieważ starych XT nie można używać z DOS-em, MS Windows czy OS/2, niektóre firmy rozwiązują ten problem przez wyrzucenie ich.
Ze strony komputera Linux-owego będziesz potrzebował karty ethernet. Pomimo, iż teoretycznie podłączenie XT poprzez port szeregowy czy SLIP jest możliwe nie jest to zalecane o ile nie masz tendecji masochistycznych. Opis jak zainstalować i posługiwać się kartą ethernet znajdziesz w Ethernet-HOWTO, którego opiekunem jest Paul Gortmaker < Paul.Gortmaker@anu.edu.au>. Jeśli nie masz już innego wyboru to SLIP i CLSIP są opisane w tym samym dokumencie. W tym przypadku będziesz też chciał zajrzeć do Serial-HOWTO, którego opiekunem jest Greg Hankins < gregh@cc.gatech.edu>, żeby dowiedzieć się jak uzyskać najlepszą wydajność.
Będziesz także potrzebował obsługi TCP/IP wkompilowanej w jądro, tak samo jak przynajmniej dwóch numerów IP dla Linux-a i XT. Informacje o numerach IP znajdziesz w NET-3-HOWTO, którego opiekunem jest Terry Dawson < terryd@extro.ucc.su.oz.au>.
No i oczywiście będziesz musiał mieć zainstalowane X-y na Linux-ie. Teoretycznie potrzebujesz tylko Xklientów i programy takie jak xdm, bez Xserwerów. Ale przypuszczalnie nie jest to warte zabawy w wybieranie co instalować co nie. W XFree86-HOWTO, którym opiekuje się Helmut Geyer < Helmut.Geyer@iwr.uni-heidelberg.de> znajdziesz informacje jak ustawić X-y.
Sekcja ta opisuje zmiany jakie trzeba wprowadzić do sprzętu i oprogramowania, aby podłączyć XT do Linux-a. Przyjąłem tutaj takie nazewnictwo:
Zauważ, że są to adresy komputerów niepodłączonych do Internet-u i z tego co się orientuję to w Niemczech nie ma domeny frog.de. Załóżymy, że nie ma innych maszyn w sieci i że NFS nie jest zainstalowany.
[Jeśli ktoś używał NFS-u do podłączenia swojego XT, bardzo proszę o kontakt ze mną.]
Powinno być to tak łatwe jak włożenie dwóch kabli do dwóch komputerów. Zauważ, że niektóre XT mają dwa porty szeregowe, które mogą działać tylko przy konkretnych szybkościach jeśli są używane oba na raz. Sprawdź podręcznik do swojego Xterminala. Później będziesz potrzebował adresu ethernet swojego XT. Jest on wyświetlany podczas startu XT nawet jeśli nie ma żadnych połączeń.
Jak tylko włożysz kable w odpowiednie miejsca będziesz mógł przetestować połączenie ethernet. Po wystartowaniu, XT powinien narzekać, że jego zapytania o bootpd i tftpd nie są obsługiwane i powinien zacząć startować swój system operacyjny z ROM-u. Powinno zawierać się tam prymitywne polecenie ping, które pozwoli ci na przetestowanie połączenia ethernet-owego z Linux-em. Nie panikuj jeśli to nie działa. XT przypuszczalnie potrzebuje całego swojego systemu operacyjnego, aby odpowiedzieć.
Informacje na temat konfiguracji TCP/IP powinieneś znaleźć w NET-3-HOWTO, tak jak zostało to już wspomniane wyżej. Założymy, że masz już skonfigurowaną sieć TCP/IP. Ponieważ XT to tylko następny komputer w sieci, będziesz musiał się upewnić, że oba komputery - Linux i XT - znają swoje numery IP i że są podłączone do sieci.
Informacje na temat XT będą musiały zostać zawarte w co najmniej tych plikach:
/etc/hosts Add a line with the IP number of the XT, such as
# /etc/hosts line for Linux machine. lprhost oraz loghost
# są opcjonalne
192.168.13.1 imlinux imlinux.frog.de lprhost loghost
# Nastepna linia jest nową linią dla XT.
192.168.13.41 whisper whisper.frog.de
/etc/ethers This file provides a list of ethernet numbers and the
corresponding host names. This does not seem to be needed
in all distributions and setups, but in case it is, you
will need to include the ethernet number of the
XT and its hostname. This would be something like
04:03:e8:cc:0d:24 imlinux
0f:03:11:31:45:f1 whisper
[Możliwe, że musisz zmienić także inne pliki jeśli masz takie programy jak named, routed czy gated. Ponieważ ja tego nie stosuję byłbym bardzo wdzięczny jeśli ktoś kto używa tych programów powiedziałby mi jakie pliki trzeba jeszcze zmienić.]
Zrestartuj komputer, żeby się upewnić, że wszystkie dokonane zmiany działają.
Sprawdź w podręczniku jakie pliki musisz zmienić, żeby podać te informacje. W moim przypadku był to jeden ogólny plik, w którym musiały się znaleźć poniższe informacje:
ip_host_table 192.168.13.1 imlinux
ip_host_table 192.168.13.1 imlinux.frog.de
ip_host_table 192.168.13.41 whisper
ip_host_table 192.168.13.41 whisper.frog.de
file_access_1 TFTP
file_host_name_1 imlinux.frog.de
file_path_1 /usr/local/xterm/liveshere
display_access_table whisper
display_access_table imlinux
enable_access_control YES
xdmcp_server imlinux
broadcast_address 192.168.13.255
default_telnet_host imlinux
Zauważ, że XT pobiera swoje pliki poprzez tftp z katalogu
/usr/local/xterm/liveshere, i że terminal jest w stanie
wykonać XDMCP (ważne do konfiguracji xdm-a).
Będą jeszcze inne pliki konfiguracyjne na takie rzeczy jak np. czcionki. Powinieneś móc używać czcionek zainstalowanych już na Linux-ie. W moim przypadku plik dotyczący czcionek wyglądał mniej więcej tak:
/usr/lib/X11/fonts/75dpi
/usr/lib/X11/fonts/100dpi
...
/usr/local/xterm/misc
/usr/local/xterm/openlook
i jeszcze kilka linii, z tym samym efektem. Później jak już twój XT startuje z Linux-a, powinieneś zobaczyć listę plików, które udało mu się załadować.
Inną rzeczą, którą będziesz chciał mieć to tzw. "backing store". Oznacza to, że części okienek, które są przykrywane przez następne okienka zapisywane są w RAM-ie w XT a nie w Linux-ie. Sprawdź podręcznik do swojego XT.
Bootpd jest demonem odpowiedzialnym za komunikację z XT podczas
startu. Informuje go o tym kim jest i skąd ma pobrać oprogramowanie
do załadowania. Z jakichś dziwnych powodów demon ten nie znajduje
się w nowszych dystrybucjach, przynajmniej w Slackware 2.2.0.1 go
nie było. Tak więc będziesz go musiał zdobyć poprzez ftp albo jakoś
inaczej. Powinien zostać umieszczony w /usr/sbin, a nie
(jak informuje strona podręcznika systemowego) w /etc pod
nazwą in.bootpd. Dodaj następującą linię lub usuń znak
komentarza z pliku /etc/inetd.conf w linii:
bootps dgram udp wait root /usr/sbin/tcpd /usr/sbin/in.bootpd
Spowoduje to uruchomienie bootpd przez inetd kiedy pojawi się jakieś żadanie skierowane do bootpd.
Plikiem konfiguracyjnym dla bootpd jest plik /etc/bootpd.
Składnia tego pliku jest wyjaśniona na stronie podręcznika
systemowego. W naszym przykładzie plik ten powinien wyglądać
mniej więcej tak: (serwer jest tutaj użyty znowu w swoim normalnym
znaczeniu)
# Sample /etc/bootpd file
# Najpierw ustawienia globalne dla tego, co jest używane przez
# wszystkie maszyny.
allhost:hd=/usr/local/xterm/liveshere:\ # Katalog domowy dla XT.
:ds=192.168.13.1:\ # Serwer nazw domeny (imlinux)
:sm=255.255.255.0:\ # Maska podsieci
:gw=192.168.13.1:\ # Wrota (gateway)
:ts=192.168.13.1:\ # Serwer czasowy
:lp=192.168.13.1:\ # Serwer drukarki
:to=-7200: # Offset czasu w sekundach
# Następnie pozycje dla poszczególnych XT.
# Kolejne XT miały by swoje odrębne pozycje.
whisper:ht=ethernet:\ # Rodzaj połączenia sprzętowego
:ha=0f03113145f1:\ # Adres ethernet-owy XT
:ip=192.168.13.41:\ # Numer IP XT (whisper)
:tc=allhost:\ # Dołącz ustawienia globalne
:bf=xtermOS: # Nazwa pliku startowego - OS XT
Nazwa systemu operacyjnego (OS) dla XT nie może byc częścią nazwy
katalogu domowego (hd). W naszym przykładzie plik, w którym
znajduje się system operacyjny to /usr/local/xterm/liveshere/xtermOS,
ale pozycja hd to /usr/local/xterm/liveshere/.
bootpd zapisze informacje do obu plików /var/adm/syslog
oraz /var/adm/messages, która po udanym starcie powinna
wyglądać mniej więcej tak:
Jul 17 05:19:42 imlinux in.bootpd[110]: connect from 0.0.0.0
Jul 17 05:19:42 imlinux bootpd[110]: reading "/etc/bootptab"
Jul 17 05:19:42 imlinux bootpd[110]: read 2 entries from "/etc/bootptab"
Jul 17 05:19:43 imlinux bootpd[110]: request from hardware address
0F03113145F1 Type 1
Jul 17 05:19:43 imlinux bootpd[110]: found 192.168.13.41 whisper
Po tym, jak bootpd pomoże wystartować XT będzie on jeszcze siedział w pamięci przez ok. 15 minut, po czym jeśli nie ma już nic do roboty usunie się.
Trivial File Transfer Program jest używany przez XT do
załadowania systemu operacyjnego z dysku twardego z
Linux-a. Powinien być zawarty w każdej dystrybucji i nie posiada
pliku konfiguracyjnego. Możesz przetestować ten program wpisując w
wierszu poleceń tftp.
Tak jak to zrobiłeś w przypadku bootpd będziesz musiał dodać
lub usunąć znak komentarza z pliku /etc/inetd.conf w
linii:
tftp dgram udp wait root /usr/sbin/tcpd /usr/sbin/in.tftpd
Zauważ, że tftp ma dostep tylko do tych plików, które mają odczyt dla świata. Pamiętaj też, że tftp jest potencjalną dziurą w bezpieczeństwie i że wersja tego programu zawarta w niektórych dystrybucjach Linux-a nie posiada opcji -r lub -s, które czynią ten program bardziej bezpiecznym.
tftp także czyni zapis w /var/adm/messages. Jeśli
bootpd dobrze wykonał swoją robotę, to następne linie powinny
wyglądać mniej więcej tak:
Jul 17 05:19:43 imlinux in.tftpd[111]: connect from whisper
Jul 17 05:19:58 imlinux in.tftpd[113]: connect from whisper
Jul 17 05:19:59 imlinux in.tftpd[115]: connect from whisper
Jul 17 05:20:00 imlinux in.tftpd[117]: connect from whisper
Jul 17 05:20:03 imlinux in.tftpd[125]: connect from whisper
Jul 17 05:20:05 imlinux in.tftpd[127]: connect from whisper
i tak dalej przez pewną chwilę. Są to pliki, o które prosi XT ze swojego katalogu domowego. Powinieneś zobaczyć także informacje na ekranie XT podczas ich przenoszenia.
Jak już zmodyfikowałeś pliki wymienione wyżej, powinieneś móc wystartować XT. W zależności od producenta na ekranie pojawią się mniej lub więcej mówiące komunikaty o tym co się dzieje. Sprawdź uważnie czy nie ma jakichś informacji o plikach, które nie mogły zostać odnalezione.
Jeśli wszystko jest w porządku, to na XT powinna się uruchomić osobna wersja X-ów. To znaczy szare tło i kursor X. Jeśli na Linux-ie jest już uruchomiony xdm, to może się nawet pojawić zachęta graficzna. Chociaż może się też zdarzyć, że będą się działy dziwne rzeczy ponieważ nie wszystko jest jeszcze ustawione. W ostateczności przygotuj się na zabicie xdm-a.
Większość XT ma wbudowane funkcje, takie jak klient telnet-a, jako część ich startującego systemu operacyjnego. Możesz przetestować dokładniej połączenie przez "zatelnetowanie" się na Linux-a.
W tym momencie, w zleżności od ustawionego dostępu, możesz być już w stanie uruchomić programy pod X-y używając opcji wyświetlania. Spróbuj napisać na komputerze z Linux-em:
xclock -display whisper:0 &
Na XT powinien pojawić się zegar. Możesz nawet w ten sposób uruchomić menedżera okienek.
Sekcja ta opisuje ustawienie xdm-a tak, żeby na XT pojawiła się graficzna zachęta i żeby powracała po wylogowaniu się użytkownika. Program xdm jest menedżerem wyświetlania. Jest to (bardzo) surowy ekwiwalent programów rejestrujących użytkownika na zwykłym terminalu. Powinien być zawarty w każdym pakiecie X na Linux-a.
Pliki konfiguracyjne tego programu znajdują się w
/usr/X11R6/lib/X11/xdm (/usr/X11R6 może być
symbolicznym dołączeniem do /usr/X11). Głównym plikiem
konfiguracyjnym jest xdm-config. Powinieneś znaleźć wśród
innych także takie linie:
DisplayManager._0.authorize: true
DisplayManager._0.setup: /usr/X11R6/lib/X11/xdm/Xsetup_0
DisplayManager._0.startup: /usr/X11R6/lib/X11/xdm/GiveConsole
DisplayManager._0.reset: /usr/X11R6/lib/X11/xdm/TakeConsole
To są pliki, które kontrolują ekran podczas gdy X-y są uruchamiane na Linux-ie. Dla XT dodajemy cztery linie tego samego typu:
DisplayManager.whisper_0.authorize: true
DisplayManager.whisper_0.setup: /usr/X11R6/lib/X11/xdm/Xsetup_whisper
DisplayManager.whisper_0.startup: /usr/X11R6/lib/X11/xdm/Xstartup
DisplayManager.whisper_0.reset: /usr/X11R6/lib/X11/xdm/Xreset
Zauważ, że zamiast whisper:0 pojawia się whisper_0. Zauważ też, że GiveConsole zostało zamienione na Xstartup, który w moim przypadku jest plikiem pustym oraz TakeConsole zostało zamienione na Xreset, który także jest pustym plikiem. Oba pliki kontrolują właściciela konsoli graficznej kiedy X-y są uruchamiane na Linux-ie, ale ponieważ my uruchamiamy je na XT, więc nie ma sensu mieszać z konsolą Linux-a.
Pliki ustawiające (setup) uruchamiają pewne programy zanim na ekranie
pojawi się zachęta. To jest miejsce, w którym możemy użyć,
powiedzmy, xv, żeby wyświetlić sobie w tle obrazek. Powinieneś
móc po prostu skopiować plik Xsetup_0 na Xsetup_whisper.
[Pytanie to ciągle powraca: Jednym ze sposobów umieszczenia obrazka w tle jest umieszczenie linii
nice xv -root -quit -rmode 5 <obrazek> &
czy podobnej w pliku ustawiającym. <obrazek> zostanie wyświetlony w tle pod zachętą xdm-a. Zauważ, że niektóre XT będą zgłaszać błąd jeśli obrazek jest za duży albo zbyt skomplikowany.]
Xaccess kontroluje kto może mieć dostęp do maszyny. Powinieneś móc zostawić wartości domyślne takimi jakie są. Zauważ, że Xaccess pozwoli ci na powitanie użytkownika programem chooser w razie gdybyś miał w sieci więcej komputerów, które służą za XT.
Xresources kontroluje wygląd i rozmiar graficznej zachęty. Możesz mieć różne zachęty dla Linux-a i dla XT poprzez zamianę linii:
DisplayManager*resources: /usr/X11R6/lib/X11/xdm/Xresources
na dwie linie:
DisplayManager._0.resources: /usr/X11R6/lib/X11/xdm/Xres_0
DisplayManager.whisper_0.resources: /usr/X11R6/lib/X11/xdm/Xres_wh_0
gdzie Xres_wh_0 jest nazwą pliku zasobowego dla whisper.
Powinieneś móc także zostawić plik Xservers z wartościami domyślnymi.
Konfiguracja w pliku Xservers jest nieco bardziej złożona. Przypuszczalnie jest tam tylko jedna linie bez komentarza:
:0 local /usr/X11R6/bin/X
albo coś podobnego. Powoduje ona wystartowanie X serwera na Linux-ie podczas uruchomienia programu xdm. Zamiana tej linii w komentarz oznacza, że podczas uruchomienia programu xdm nie będą startowane X-y na Linux-ie. To jest to co musisz zrobić, jeśli chcesz żeby xdm obsługiwał tylko XT a nie X-y na Linux-ie. W tym wypadku, X-y można w każdej chwili uruchomić na Linux-ie poleceniem startx jak dotąd bez znanych skutków ubocznych.
Jeśli twój XT nie posiada XDMCP, musisz także dołączyć taką linię dla XT:
whisper:0 foreign
XDMCP jest standardem pozwalającym na przykład rozmawiać XT ze swoimi hostami. Jeśli twój XT posiada XDMCP nie dołączaj tej linii tutaj. Jeśli linia ta znalazłaby się tutaj, a XT posiadałby XDMCP, to na lini połączeniowej pojawiłby się konflikt, ponieważ zarówno xdm jak i XT próbowałyby się równocześnie porozumieć. Może to prowadzić do różnych przedziwnych efektów, jak np. walka dwóch xdm o dominację :).
Zauważ, że możesz użyć pozycji w xdm-config nawet jeśli w Xservers nie ma linii dotyczącej XT, to znaczy, że możesz w dalszym ciągu ustawiać zachętę graficzną itp. dla XT, który posiada XDMCP.
Aby xdm startował za każdym startem Linux-a możesz dołączyć taką linię
/usr/bin/X11/xdm
do pliku /etc/rc.d/rc.local. Inni startują xdm-a
poprzez /etc/inittab. W każdym razie xdm powinien
pojawić się jako jeden z procesów po starcie Linux-a.
[Jest to dość ważne i pracujemy nad tym.]
Aby zobaczyć czy użytkownik może używać ekranu danego XT z maszyny Linux-owej zaloguj się jako użytkownik inny niż "root" i napisz jedno z:
xsetroot -solid white -display whisper:0 &
xterm -display whisper:0 &
Użyj tego kiedy ktoś jest zalogowany na XT oraz kiedy jest tam tylko graficzna zachęta.
Oto problemy, które się pojawiły oraz ineteresujące właściwości, które mogą być rozważane jako błędy. Jeśli pojawiły się u ciebie jakieś interesujące właściwości czy nawet rozwiązania skontaktuj się ze mną proszę.
Procedury opisane w tym tekście były jak dotąd poważnie testowane na Tektonix-ie XP23 w połączeniu z 386DX-33MHz, 16 MB RAM-u z Linux-em 1.2.3 oraz XFree86 w wersji 3.1.1 z dystrybucji Slackware 2.2.0.1.
Więcej informacji na temat X-ów można znaleźć w sieci:
Najpierw podziękowania dla Linusa B. Torvaldsa < torvalds@kruuna.helsinki.fi>; następnie dla
Klausa ter Fehna < ktf@bc3.gun.de> oraz dla
Douglasa K. Stevensona < duck@catzen.gun.de>
Jeśli znalazłeś jakieś rażące błędy ortograficzne, gramatyczne, składniowe, techniczne to pisz do mnie:
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/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 sie 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: polskie adresy ftp i zmiana Net-2-HOWTO na NET-3-HOWTO. doc-linux-pl-2002.06.14.orig/mini/html/krypto.pl.html 0100664 0001750 0001750 00000034165 07104371340 021131 0 ustar coven coven
Następujące oświadczenie skopiowane zostało bezpośrednio z CFS 1.12 i opisuje zastrzeżenia co do używania CFS.
CFS umożliwia niezależne od aplikacji szyfrowanie/deszyfrowanie danych na powłoce struktury plików i nie wymaga modyfikacji kodu istniejącego już systemu plików, ani żadnych modyfikacji jądra systemu. Symetryczne szyfrowanie zawarte w głównym strumieniu CFS bazuje na zmodyfikowanym standardzie DES pracującym w trybie CBC, który czyni brutalny atak przeciwko 56-bitowemu kluczowi DES prawie niemożliwym. Struktura CFS zastępuje główny strumień DES, szyfrem Fast-DES albo jakimkolwiek innym szyfrem, w doskonały, bezpośredni sposób. Gdybyś był zainteresowany przeczytaj Białą stronę o CFS.
CFS nie skompiluje się "samo" pod Linuxem. Podążaj za niniejszymi instrukcjami, jeśli chcesz uruchomić CFS na swoim Linuxie. Jest kilka metod osiągnięcia tego celu, ale najprostsza bazuje na modyfikacjach przeprowadzonych przez Olafa Kircha. Jego wersja CFS jest dostępna z: ftp.mathematic.th-darmstadt.de.
Olaf podpisał zmodyfikowane archiwum. Podpis PGP dla zmodyfikowanej wersji cfs-1.1.2 można otrzymać z: ftp.mathematic.th-darmstadt.de.
W trybie jednego użytkownika, skompiluj cfs za pomoca komendy "make".
(przeczytaj najpierw odpowiednie pliki, tzn. README, Changes itp. - przyp.
autora). Po kompilacji, zainstaluj: cfsd, cdetach, ccat, cmkdir, cname i
cattach do katalogu /usr/local/sbin - właścicielem tych plikow niech będzie
root, a grupa, do której muszą one należeć to wheel. Nadaj plikom atrybuty
551.
Dla bezpieczeństwa można wygenerować sumy kontrolne MD5, na czystych binariach. Następnie skopiuj te pliki razem z "md5sum", na media takie jak płyta CD, albo dyskietka i zabezpiecz ją przed zapisem.
Utwórz katalog /.cfsfs, który będzie używany przez serwer CFS. Niech właścicielem katalogu będzie root, grupa root, a jego atrybuty niech wynoszą: 000. Utwórz katalog /securefs, ktory stanie się korzeniem drzewa Kryptograficznego Systemu Plików.
Dodaj nastepującą linię do /etc/rc.d/rc.local:
echo -n "Inicjacja Kryptograficznego Systemu Plików: " if [ -x /usr/local/sbin/cfsd ]; then /usr/local/sbin/cfsd > /dev/null echo -n "cfsd " /bin/mount -o port=3049,intr localhost:/.cfsfs /securefs echo -n "loopback" echo "done" else echo "Nie zainstalowano poprawnie Kryptograficznego System Plików" fi
Użytkownicy Red Hata powinni dodać plik "cfsfs", który znajduje się na końcu tego dokumentu do katalogu /etc/rc.d/init.d. Następnie utworzyć dołączenie symboliczne "S65cfsfs" i umieścić go w odpowiednim katalogu startowym, np. rc3.d używając komendy:
ln -s /etc/rc.d/init.d/cfsfs S65cfsfs
we właściwym katalogu startowym. Następnie należy dodać linię:
/.cfsfs localhost
w pliku /etc/exports. Na końcu dodaj linię:
portmap: 127.0.0.1
do pliku /etc/hosts.allow.
Teraz powinieneś zrestartować komputer. Po jego uruchomieniu, użyj komendy mount żeby sprawdzić, czy CFS pracuje. Jeśli wszystko zadziałało, powinieneś zobaczyć nową następującą linię po wykonaniu komendy mount.
localhost:/.cfsfs on /securefs type nfs(rw,port=3049,intr,addr=127.0.0.1)
Żeby utworzyć szyfrowany katalog o nazwie "sekret" użyj komendy:
cmkdir sekret
Zostaniesz poproszony o podanie i zweryfikowanie hasła. Jeżeli to sie uda, utworzony zostanie katalog "sekret", który pojawi sie w bieżącym katalogu. Katalog ten będzie zawierał zaszyfrowane dane, które będzie można normalnie przeglądać pod warunkiem, że dołączymy ten katalog do drzewa CFS.
Żeby można było swobodnie korzystać z informacji zawartych w katalogu, trzeba dołączyć go do drzewa katalogów zarządzanych przez CFS za pomoca komendy:
cattach sekret Tajne
CFS poprosi Cię o podanie hasła dostępu. Jeżeli będzie się ono zgadzało z hasłem podanym przy tworzeniu katalogu "sekret", dane zawarte w tym katalogu będą dostępne w niezakodowanej formie w /securefs/Tajne, TYLKO dla użytkownika, który podał właściwe hasło dostępu. (nawet root nie może odczytać tych plików ;-) - przyp. tłumacza)
Zauważ, że dołączenie katalogu do drzewa CFS, może zająć nawet minutę. (u mnie na P133/16MB RAM zajmuje nie więcej niż 5 sekund). Od tej pory możemy korzystać z katalogu /securefs/Tajne jak z każdego innego katalogu.
Kiedy skończymy pracę powinniśmy użyć komendy:
cdetach Tajne
żeby uniemożliwić dostęp do danych. Komenda ta usuwa katalog "sekret" z listy katalogów zarządzanych przez CFS, co uniemożliwia odczytanie informacji w tym katalogu, gdyż są one zakodowane. Aby znowu umożliwić sobie dostęp do danych należy użyć komendy "cattach".
Aby umożliwić użytkownikom dostęp do zaszyfrowanych danych, CFS wymaga od użytkownika hasła, które jest używane do wygenerowania zestawów kluczy.
Zdobycie hasła przez niepowołane osoby pozwala intruzom odczytać zaszyfrowane dane, dlatego jest niezwykle ważne, aby użytkownik we własnym interesie chronił hasło dostępu. Istnieją dwie możliwości zdobycia Twojego hasła przez intruzów:
Informacje zawarte poniżej mogą zostać użyte, aby zmniejszyć prawdopodobieństwo skutecznego ataku przeciwko CFS.
W tym momencie jedyny znany problem, to komunikat "Permission denied", kiedy próbujesz dostać się do plików na płycie CD.
Niżej wymienieni ludzie przyczynili się do powstania tego dokumentu: Topher Hughes z Dickinson College, Elie Rosenblum z Montgomery Blair High School, Mario D. Santana z Florida State University, Daniel P Zepeda i Olaf Kirch.
====================[początek pliku cfsfs]======================
#!/bin/sh
#
# $Header: /Secure/secure-doc/linux/CFS/RCS/CFS-Doc,v 1.
4 1996/03/15 04:49:37 alex Exp alex $
#
# cfsfs Kryptograficzny System Plików
#
# Autor: Alexander O. Yuriev <alex@bach.cis.temple.edu>
#
# Derived from cron
# Source function library.
. /etc/rc.d/init.d/functions
# See how we were called.
case "$1" in
start)
echo -n "Uruchamianie Kryptograficznego Systemu Plików: "
if [ -x /usr/local/sbin/cfsd ]; then
/usr/local/sbin/cfsd > /dev/null
/bin/mount -o port=3049,intr localhost:/.cfsfs /securefs
echo "done"
else
echo -n "Nie zainstalowano poprawnie Kryptograficznego Systemu Plików"
fi
touch /var/lock/subsys/cfsfs
;;
stop)
echo -n "Zamykanie Kryptograficznego Systemu Plików: "
umount /securefs
killproc cfsd
echo
rm -f /var/lock/subsys/cfsfs
;;
*)
echo "Użycie: cfsfs {start|stop}"
exit 1
esac
exit 0
====================[koniec pliku cfsfs]======================
Jak najwygodniej posługiwać się CFS...
Copyright (C) 1997 by Krzysztof G. Baranowski (KGB@rubikon.net.pl)
Ponieważ ciągłe używanie komend "cattach","cdetach" i przechodzenie pomiędzy wieloma odległymi od siebie katalogami może być na dłuższą metę męczące i może zniechęcić użytkownika od używania CFS, postanowiłem napisać ten dodatek, w którym przedstawię naprawdę bardzo proste porady, dzięki którym będzie można zhumanizować pracę z CFS.
A zatem zacznijmy od początku. Najwygodniej jest utworzyć w domowym katalogu użytkownika ukryty katalog, w którym będziemy trzymać wszystkie zakodowane pliki. Wiąże się to jednak z ryzykiem. Bo jeżeli ktoś pozna nasze hasło dostępu to będzie mógł swobodnie manipulować naszymi plikami.
Z drugiej strony posiadanie wielu katalogów może przyprawić użytkownika o ból głowy, gdyż będzie on musiał zapamiętać ogromną ilość haseł. A minimalna długość hasła dostępu do każdego katalogu wynosi 16 (szesnaście) znaków. ;-)
Pozostańmy więc przy jednym katalogu. Zatem piszemy:
/home/kris$ cmkdir .xfiles
Zakładam, że użytkownik ma login: kris, a jego katalog domowy to /home/kris i używa bash'a jako domyślnego shella. Następnie CFS poprosi nas o hasło, które musi składać się przynajmniej z 16 znaków. Po weryfikacji hasła nasz tajny katalog ".xfiles" zostanie utworzony:
Następnie dopiszmy dwa aliasy do pliku ".bashrc":
alias dekoduj='cattach /home/kris/.xfiles tajne' alias koduj='cdetach tajne'
W tym przypadku katalog, w którym będziemy mogli przeglądać odkodowane pliki
posiada nazwę "tajne", a jego scieżka dostępu to: /securefs/tajne.
Oczywiście nazwę możemy sobie wybrać dowolną. :-)
Następnie w naszym domowym katalogu utwórzmy dołączenie symboliczne do
katalogu /securefs/tajne za pomocą komendy:
/home/kris$ ln -s /securefs/tajne tajne
Wybór nazwy dołączenia także zależy od użytkownika. I to wszystko. Od tej pory używanie CFS staje się dziecinnie proste.
Jeśli chcemy dostać się do naszego zakodowanego katalogu wpisujemy:
/home/kris$ dekoduj
i podajemy hasło. Komenda "cd tajne" od razu przenosi nas tam gdzie trzeba, gdzie możemy buszować sobie do woli :-), a "cd .." przenosi nas z powrotem do katalogu domowego. Proste i praktyczne. Po zakończeniu pracy wpisujemy:
/home/kris$ koduj
I już nikt nie odczyta naszych danych, włącznie z nami, chyba że użyjemy jeszcze raz komendy "dekoduj".
Na koniec mała uwaga. Kopiowanie, przenoszenie plików, przechodzenie do katalogów będących pod kontrolą CFS może być trochę opóźnione. Związane jest to z enkrypcją/dekrypcją dokonywaną w czasie rzeczywistym. No to bawcie się dobrze.
doc-linux-pl-2002.06.14.orig/mini/3-Button-Mouse.pl.txt 0100664 0001750 0001750 00000075700 07104371340 021211 0 ustar coven coven Jak zainstalować trójprzyciskową mysz szeregową (mini-JTZ)
Autor: Geoff Short, geoff@kipper.york.ac.uk
v1.32, 4 listopdada 1997
WWeerrssjjaa ppoollsskkaa:: KKrrzzyysszzttooff PP.. JJaassiiuuttoowwiicczz kkppjjaass@@pprriivv..oonneett..ppll
v1.0 beta, 30 marca 1998 roku
Co zrobić aby 3 przyciskowa mysz szeregowa działała pod Linux-em.
Dokument ten został napisany w standardzie ISO-8859-2. Oryginał tego
dokumentu znajduje się pod adresem : ftp.icm.edu.pl
Reason: Invalid or unsupported method.
< /BODY>
Teraz jesteśmy gotowi podłączyć się do tego serwera z innego PC-ta
używając przeglądarki WWW.
44.. PPoołłąącczzeenniiee pprrzzeezz ssiieećć NNeettwwaarree zz WWiinnddoowwssaammii..
Żeby ustawić serwer Netware powinieneś mieć uprawnienia Supervisor-a,
albo przynajmniej uprawnienia operatora konsoli. Jeśli ich nie masz,
to spróbuj poprosić swojego administratora sieci, żeby ci pomógł w
instalacji.
W poniższych przykładach zakładam, że adres Linux-a to 200.0.0.1 i
dlatego przypisuję adresy 200.0.0.2 i 200.0.0.3 odpowiednio serwerowi
Netware i stacji roboczej. Ty możesz oczywiście wybrać adresy
odpowiednie dla siebie.
44..11.. UUssttaaww sseerrwweerr NNeettwwaarree..
Włącz na serwerze ramkę Ethernet_II przez wpisanie poniższych poleceń
na konsoli lub w pliku autoexec.ncf
load NE2000 frame=Ethernet_II name=IPNET
load TCPIP
bind IP to IPNET addr=200.0.0.2 mask=FF.FF.FF.0
Możesz podać numer slotu albo karty (board) podczas ładowania
sterownika do NE2000 w zaleźności od twojej konfiguracji. (np. load
NE2000 slot=3 frame=...).
Na PC-cie masz trzy możliwości: Win3.1, WfWg albo Win95. Procedura
instalacji różni się pomiędzy Win95 a starszymi wersjami windows jeśli
używasz 32-bitowego klienta z Microsoft-a lub Novell-a. Jeśli masz
zamiar używac 16-bitowego klienta, to procedura instalacyjna jest
opisana w instrukcji instalacji dla wersji pod Windows 3.1. Jeśli
będziesz instalował wersję klienta 32-bitową, to przejdź do ``Windows
95''.
44..11..11.. WWiinnddoowwss 33..xx
Jeśli używasz Win3.1 albo WfWg możesz zainstalować klienta Netware
(VLMs) i kilka dodatkowych plików, które są dostarczane na dyskietce
TCP/IP, a mianowicie:
TCPIP.exe, VTCPIP.386, WINSOCK.dll i WLIBSOCK.dll
Zauważ, że plik WINSOCK.dll różni się od tych z Win95 i Trumpet.
Zainstaluj klienta Netware z obsługą Windows-ów. Skopiuj VTCPIP.386,
WINSOCK.dll i WLIBSOCK.dll do katalogu SYSTEM a TCPIP.exe do katalogu
NWCLIENT. Teraz zmodyfikuj plik STARTNET.bat w katalogu NWCLIENT:
lsl
ne2000 ---> sterownik do twojej karty
c:\windows\odihlp.exe ---->jeśli używasz WfWg
ipxodi
tcpip ---> dodaj tę linię
vlm
Stwórz podkatalog - powiedzmy \NET\TCP i skopiuj pliki HOSTS,
NETWORKS, PROTOCOLS i SERVICES z /etc na twoim Linux-ie albo z SYS:ETC
na serwerze Netware. Zmodyfikuj skopiowany plik HOSTS i dodaj linię
dla twojego nowego serwera Linux-a. To pozwoli ci na odwoływanie się
do serwera na Linux-ie w taki sposób http://linux.ppg_corp/ zamiast
http://200.0.0.1/ w twojej przeglądarce WWW.
127.0.0.1 localhost
200.0.0.1 linux.ppg_corp
Zmodyfikuj plik NET.cfg w katalogu NWCLIENT
Link Driver NE2000
port 300
int 3
MEM D0000
FRAME Ethernet_802.2
; ---- dodaj te linie ----
FRAME Ethernet_II
Protocol TCPIP
PATH TCP_CFG C:\NET\TCP
ip_address 200.0.0.3
ip_netmask 255.255.255.0
Link Support
MemPool 6192 ---> minimum to 1024, spróbuj z różnymi wartościami
Buffers 10 1580 ---> tutaj też możesz ustawić w/g własnych potrzeb
;---------------------------------
Zmodyfikuj plik SYSTEM.ini w katalogu WINDOWS i dodaj tę pozycję dla
VTCPIP.386
[386Enh]
.....
network=*vnetbios, vipx.386, vnetware.386, VTCPIP.386
.....
Zrestartuj PC-ta, uruchom STARTNET.bat i możesz już używać swojej
ulubionej przglądarki WWW. Nie musisz się logować do sieci Netware i
nie musisz uruchamiać TCPMAN-a (jeśli używasz Trumpet Winsock).
44..11..22.. WWiinnddoowwss 9955
Ta sekcja opisuje jak zainstalować 32-bitowego klienta pod Win95.
Najpierw musisz zainstalować nastepujące programy:
Client for Netware Networks (od Microsoft-a albo Novell-a)
Microsoft TCP/IP Protocol
Network Adapter
Aby zainstalować te programy, kliknij na Mój komputer, Panel
sterowania, Sieci. Klknij Dodaj. Teraz znajdziesz się w oknie, które
wyświetla Klient, Karta (Adapter), Protokół i Usługa (Service).
Aby zainstalować klienta dla sieci Netware:
1. kliknij dwa razy na Klient.
2. kliknij na Microsoft lub Novell.
3. kliknij dwa razy na Klient dla sieci Netware.
Aby zainstalować protokół TCP/IP
1. kliknij dwa razy na Protokół.
2. kliknij na Microsoft.
3. kliknij dwa razy na TCP/IP.
Windows 95 instaluje domyślnie kilka innych protokołów. Usuń je przez
kliknięcie na nich i wciśnięcie przyciku Usuń. W typowych przypadkach
Win95 instaluje protokół Microsoft NetBeui i protokół kompatybilny z
IPX/SPX. Możesz skasować protokół NetBEUI, ale będziesz potrzebował
protokołu IPX/SPX jeśli chcesz się logować do serwera Netware.
Więcej szczegółów znajdziesz w TCP/IP Setup FAQ.
Aby ustawić TCP/IP kliknij na TCP/IP, kliknij na Właściwości, kliknij
na adres IP
Wpisz twój adres IP w linii "Podaj adres IP" jako 200.0.0.3
W linii "Maska podsieci" wpisz 255.255.255.0
Kliknij OK.
Powinieneś teraz dostać komunikat, aby zresetować komputer. Zrób tak.
Powinieneś teraz móc używać swojej przeglądarki.
55.. IInnnnee ppoołłąącczzeenniiaa..
To nie jest jedyny sposób na połączenie się z serwerem Linux-a. Możesz
wypróbować kilka innych programów jak:
ˇ Strona WWW o Sambie (sam pakiet osiągalny jest także na polskich
mirrorach, np. ftp.icm.edu.pl
400 Bad Request < /H1>
Your client sent a query that this server could
not understand.
) {
@newsgroup = split(' ', $_); ## dzieli kolejne linie pliku active wg spacji,
## umieszcza dane w tablicy @newsgroup
## @newsgroup[0] zawiera teraz nazwę grupy
system "$NEWSPATH/bin/nntpget -f $SCRIPTPATH/lastget -n @newsgroup[0] -o -v $PROVIDER"
|| print "nie moglem sciagnac postow z grupy @newsgroup[0]\n";
}
close(LIST);
system "touch $SCRIPTPATH/lastget";
##
## usun naglowek "NNTP-Posting-Host: " z postow do wyslania
##
open(LIST, "/usr/spool/news/out.going/$NEWSFEED")
|| die "nie moglem otworzyc listy postow do przygotowania do wyslania";
while (
) {
if (@article = split(' ', $_)) {
$article = @article[0];
rename("$article", "$article" . '.bak');
$backup = "$article.bak";
open(OUTPUT, ">> $article");
open(INPUT, "$backup");
select(OUTPUT);
while () {
print unless ?^NNTP-Posting-Host.*\n?
}
close(OUTPUT);
close(INPUT);
unlink("$backup");
reset;
}
}
select(STDOUT);
close(LIST);
##
## wyslij posty
##
$ENV{'NNTPSERVER'} = "$PROVIDER";
open(LIST, '/usr/spool/news/out.going/$NEWSFEED')
|| die "nie moglem otworzyc listy postow do wyslania";
while (
) {
if (@article = split(' ', $_)) {
$article = @article[0];
system "inews -h $article";
}
}
close(LIST);
------------------------------------------------------------------------------
33..33.. SSppoossóóbb uużżyycciiaa
Powiedzmy, że nazwałeś powyższy skrypt ,,foonews''. Przy następnym
połączeniu z siecią wykonaj polecenie $SCRIPTPATH/foonews. Jeśli
przez ekran zaczną przewijać się identyfikatory wiadomości (Message-
ID), to znaczy, że wszystko działa jak powinno. Być może będziesz
musiał poczekać kilka sekund na pojawienie się pierwszych Message-ID.
Po zakończeniu tej operacji powinieneś mieć na dysku wszystkie
wiadomości wysłane na newsy od czasu ostatniej modyfikacji pliku
$SCRIPTPATH/lastget, a wszystkie napisane przez Ciebie posty powinny
być wysłane do serwera, z którym się łączyłeś; serwer rozpropaguje te
wiadomości dalej. Po wszystkim plik $SCRIPTPATH/lastget będzie miał
dzisiejszą datę ostatniej modyfikacji; jutro, kiedy ponownie
uruchomisz ,,foonews'', skrypt ściągnie newsy wysłane na newsy między
tą datą, a momentem uruchomienia skryptu.
Będziesz musiał ręcznie usuwać zawartość pliku
/usr/local/news/out.going/$NEWSFEED. Umyślnie nie dopisałem tej
funkcji do skryptu, żeby móc sprawdzić, czy moje artykuły rzeczywiście
zostały wysłane... i jakoś nie zabrałem się jeszcze do
zautomatyzowania tego zadania. Po pierwszym uruchomieniu skryptu
najpierw sprawdziłem, czy artykuły zostały wysłane, a dopiero potem
usunąłem zawartość tego pliku; możesz zrobić tak samo.
Jeśli poprawnie skonfigurowałeś INNa, to skrypt
$NEWSPATH/bin/news.daily zajmie się poprawnym działaniem całej
konstrukcji.
W tej chwili wszystko robię ręcznie, jednak nic nie szkodzi na
przeszkodzie, aby proces ten zautomatyzować. Kilka wpisów w cronie
powinno załatwić sprawę.
I ostatnia uwaga: wcale nie uważam, że mój skrypt jest elegancko
napisany, ani że sposób jest idiotoodporny i niezawodny. Ale SOA#1 --
u mnie działa -- więc postanowiłem się nim podzielić.
44.. PPooddzziięękkoowwaanniiaa......
...dla wszystkich, dzięki którym Linux jest taki fajny!
_K_e_n_t _L_e_w_i_s
kent@fiona.umsmed.edu
55.. OOdd ttłłuummaacczzaa
55..11.. IInnnnee źźrróóddłłaa iinnffoorrmmaaccjjii
Polskie tłumaczenia pozostałych dokumentów HOWTO znajdują się pod
adresem