Musisz tez u siebie zainstalowac serwer news, czyli program
innd
, dzialajacy w srodowisku UNIX. Alternatywnym programem
serwera news jest Diablo w systemie UNIX, jednak nie ma on sensu dla
niewielkich instalacji newsowych. "Serwery news" oparte o oprogramowanie
Microsoftu nie sa i nie beda podlaczane do sieci Usenet i to bynajmniej
nie z powodu niecheci reszty administratorow do tej firmy, lecz z powodu
masy problemow, jakie ten "serwer" powoduje przez to, ze nie bardzo
przejmuje sie standardami dotyczacymi systemu news.
Jesli nadal chcesz uruchomic u siebie serwer news, musisz
uzgodnic to z administratorem innego serwera, ktory "da ci feed", czyli
skonfiguruje swoj serwer tak, by przesylal do twojego wybrane grupy oraz
akceptowal artykuly wysylane z twojego serwera. Informacje jak
skonfigurowac rozne pliki serwera znajdziesz w nastepnym punkcie,
natomiast przy uzyskiwaniu feedu od innego serwera musisz przekazac jego
administratorowi kilka kluczowych informacji koniecznych do wlasciwego
skonfigurowania lacza po drugiej stronie. Sa to m.in:
nntpsend.ctl
lub innfeed.conf
.
hosts.nntp
lub incoming.conf
.
newsfeeds
. Jesli masz kilku sasiadow,
wpisz te nazwe do konfiguracji dotyczacej ich wszystkich, aby nie
przesylac artykulow miedzy nimi.
ctlinnd
reload
i przetestuj czy polaczenie dziala poprawnie (oraz popros
administratora drugiego serwera, by przetestowal, czy moze sie polaczyc
z toba).Bardzo waznym aspektem uruchomienia uslugi serwera news sa oprocz aspektow technicznych zasady, na jakich podlaczane sa nowe serwery. Najwazniejsze z tych zasad wymienione sa ponizej:
Jesli masz tylko jednego sasiada, sprawa jest prosta, jesli jednak
skonfigurowales (lub masz zamiar w przyszlosci) uzyskac takze inne
lacze/feed, to po pierwsze musi to byc feed od innego huba (a nie
liscia), po drugie - w pliku newsfeeds musisz zadbac o to, by nie
przesylac artykulow pomiedzy tymi hubami. Zajrzyj do przykladow
opisujacych plik newsfeeds
, a
takze informacje dotyczace list wykluczeniowych w przypadku feedow zagranicznych, bo to jest praktycznie ta
sama sytuacja.
W przypadku wykrycia lisci, ktore liscmi nie sa, bo przesylaja artykuly takze innym serwerom, sa one odcinane do czasu wyjasnienia sytuacji i naprawienia problemu.
Serwery news nie moga pozwalac na pisanie do grup hierarchii pl.* kazdemu bez jakiejkolwiek autoryzacji. Jesli serwer ma byc z zalozenia otwarty dla wszystkich, to musi zawierac system kont i uwierzytelniania. Celem systemu musi byc unikniecie sytuacji niekontrolowanego anonimowego dostepu do usenetu przez ten serwer, gdyz takie sytuacje predzej czy pozniej prowadza do naduzyc odbijajacych sie echem po calym usenecie.
Dotyczy to nie tylko samych serwerow news, ale i wszelkiego rodzaju bramek z innych uslug, np. email, www, wap, itp.
Poza tym wiekszosc zainstalowanych serwerow (i w Polsce i na swiecie) to wlasnie INN. Instalacja pozostalych (takich jak DNEWS na przyklad) wymaga zdecydowanie wiecej samozaparcia, a efektem bardzo czesto jest serwer, ktorego i tak nie mozna podlaczyc do sieci Usenet News z powodu wad w implementacji protokolu NNTP i spustoszenia. jakie to sieje w sieci (np. redystrybucja starych artykulow z nowymi Message-Id:) Przez $inn okreslal bede katalog, w ktorym znajduja sie pliki serwera, a wiec np. standardowym miejscem na 'active' jest $inn/active lub $inn/lib/active, serwer news to $inn/bin/innd itp...
Plik active ($inn/active)
Plik ten zawiera spis wszystkich grup, ktore serwer otrzymuje. Jesli
uruchamiamy nowy serwer, najlepiej jest sciagnac aktualna wersje
takiego pliku z innego serwera news (ktory bedzie nas w newsy zasilal) za
pomoca protokolu nntp, lub z ftp.uu.net poprzez ftp. Pierwsze wyjscie
polega na wykonaniu '$inn/bin/getlist -h jakis.serwer.news.pl
active
', drugie - uzyciu 'anonymous ftp' ale uwaga... ftp.uu.net,
mimo ze od jakiegos czasu posiada takze grupy pl.*, to nie wszystkie
niestety zostaly tam poprawnie zalozone. Dlatego lepiej skorzystac z
fragmentow pliku active, dotyczacego grup pl, a znajdujacego sie pod
adresem http://www.usenet.pl/doc/pl.active.
Plik ten jest
codziennie automatycznie uaktualniany na podstawie pliku active serwera
news.ict.pwr.wroc.pl.
Po otrzymaniu takiego pliku 'active', najlepiej wyzerowac w nim numerki oznaczajace numery artykulow prosta instrukcja:
mv active active.old awk '{printf ("%s 0000000000 0000000001 %s\n", $1, $4)}' < active.old > activenie zapominajac o tym, ze jesli serwer news juz dziala, to MUSI zostac wczesniej zatrzymany np. przez '
$inn/bin/ctlinnd pause xx
', a
ponowne uruchomienie powinno nastapic przez:
ctlinnd reload active '' ctlinnd go ''Jesli dopisac trzeba pojedyncze nowe grupy w juz dzialajacym serwerze, nalezy do tego uzyc '
ctlinnd newgroup pl.nazwa.grupy y
',
bez uprzedniego zatrzymywania serwera. Jesli grupa jest moderowana,
zamiast 'y' powinno oczywiscie pojawic sie 'm'.
Plik newsfeeds ($inn/newsfeeds lub $inn/site/newsfeeds)
Zalezy od tego, kto zasila nas w newsy i komu newsy sa dalej posylane.
Jest on naprawde dobrze udokumentowany w INND FAQ oraz na stronie
manuala, wystarczy wiec moze jedynie 2 male przyklady...
'feed' dla komputera o adresie 'news.host.pl' dopisujacego w polu 'Path:' nazwe 'news.host.somewhere.in.pl' powinien w najprostszym przypadku wygladac tak:
xxx/news.host.somewhere.in.pl\ :*/!local:Wnm:gdzie xxx jest dowolnym (w miare krotkim, bo pojawia sie wielokrotnie w logach) akronimem reprezentujacym dany host, wystepujacym rowniez w pliku 'nntpsend.ctl':
xxx:news.host.pl:::-T1720 -t300gdzie nazwa 'xxx' zostaje zwiazana z adresem internetowym 'news.host.pl'. Warto przy okazji zwrocic uwage na parametr
-T1720
(lub podobny) zamiast
'standardowego' -T1800
. Parametr -Tn
oznacza, ze jedna sesja nntpsend
nie moze trwac dluzej niz n
sekund. W przypadku n=1800, oznaczaloby to
dokladnie 30 minut. Standardowo nntpsend jest startowany z crontab-a co
10 minut, a wyglada to mniej wiecej tak:
0,10,20,30,40,50 * * * * /usr/lib/news/nntpsendGdy pojawia sie sytuacja, ze newsow jest na tyle duzo, ze nntpsend jest w stanie pelne 30 minut wykorzystac, to konczenie tuz po tym, jak crontab wystartowal nowego nntpsend, ktory sie skonczyl, stwierdziwszy ze poprzedni jeszcze dziala, jest marnotrawieniem kolejnych 10 minut, czyli 25% przepustowosci lacza. Dlatego czas dla -T powinien byc wielokrotnoscia 10 minut, pomniejszona o 1-2 minuty, by dac programowi nntpsend czas na 'posprzatanie' w momencie konczenia dzialania. Druga sprawa pozwalajaca przyspieszyc docieranie news z jednego konca Polski w drugi jest to, by na sasiadujacych serwerach news czasy wysylania batchow byly nieco poprzesuwane, np. jesli 'mapka' serwerow wyglada tak:
bilbo <---> okapi <---> sun1000to jesli, przykladowo, na bilbo nntpsend startuje o pelnej godzinie i dalej co 10 minut, to na okapi powinno to byc np. 5 minut po pelnej godzinie i dalej co 10 minut (czyli 5,15,25,...), a na sun1000 znowu o pelnej godzinie. Natomiast jesli jeszcze istnieje dodatkowe polaczenie bilbo <---> sun1000, to jeszcze lepiej jest, gdy bilbo ma 0,10,..., okapi np. 3,13,23,33,... a sun1000 6,16,26,...
Drugi krotki i z zycia wziety przyklad (wg mapki z pierwszej czesci FAQ). newsfeeds na okapi: uw dostaje wszystkie lokalne artykuly (tzn. takie, ktore nie byly w Warszawie ani w USA) oraz comp.security* ktore nadchodza z USA lub lokalnie:
cocos!all/news.nask.pl,uw.edu.pl,plonk.apk.net\ :*,!pwr.*,/!local,!pwr,!wroc\ :Tm:cocos cocos!sec/news.nask.pl,uw.edu.pl\ :!*,comp.security*,alt.security*/!local,!pwr,!wroc\ :Tm:cocos cocos:!*:Tf,Wnm:Pierwsze 2 linijki to 'wejscie lejka' o wspolnym ujsciu nazwanym 'cocos', przy czym 'cocos' nie ma tutaj NIC wspolnego z nazwa komputera, na ktory zostanie to wyslane. Pierwsza linijka odnosi sie do wszystkich artykulow, ktore nie nadeszly z Warszawy ani z USA (przez serwer plonk.apk.net), druga - do wszystkich artykulow z grup 'security', ktore nie nadeszly z Warszawy. WPisanie kilku nazw (pochodzacych z Path: tych serwerow) zapobiega przesylaniu artykulow pomiedzy nimi. Ostatnia linia to 'ujscie lejka' prowadzace do pliku 'cocos' w katalogu /var/news/out.going (lub odpowiednio innym), gdzie zapisywane sa odsylacze do artykulow, wykorzystywane co 10 minut przez innxmit. Symboliczna nazwa 'cocos' jest tlumaczona na rzeczywisty adres komputera (ktorym jest 'news.uw.edu.pl') w pliku 'nntpsend.ctl':
cocos:news.uw.edu.pl::-T1720 -t300
Uwagi dotyczace serwerow majacych feedy zagraniczne
Newsy do Polski splywaja kilkoma drogami i poprzez sieci roznych
operatorow (TPSA, NASK, POL-34), nie grozi nam wiec sytuacja, ze
wskutek awarii pojedynczego serwera news (np. chwilowego zapchania
dysku na ktoryms z serwerow news) zostaniemy calkiem odcieci od
doplywu nowych newsow ze swiata lub zaczniemy otrzymywac je ze znacznym
opoznieniem. Z drugiej strony jednak bez odpowiedniej konfiguracji moze
to prowadzic do niepozadanego "tranzytu" newsow np. z USA do USA przez
kilka serwerow w Polsce.
Mozna tego uniknac odpowiednio definiujac reguly wykluczania w pliku newsfeeds (po znaku "/" w nazwie feedu). Do tego potrzebna jest jednak znajomosc wszystkich polaczen Polski ze swiatem i tego, co zagraniczne serwery news wpisuja w polu Path:
jakis-feed/news.apk.net,newsfeed.sunet.se,\ news.icmp.lviv.ua,news.cistron.nl,news.micro-net.net,\ news.uoregon.edu,hammer.uoregon.edu,arclight.uoregon.edu,\ newsfeed.nacamar.de,news.nacamar.de,news.apfel.de,\ news-spur1.maxwell.syr.edu,\ www.nntp.primenet.com,nntp.primenet.com,\ fu-berlin.de,fci-se,newscore.univie.ac.at\ : ......
pl.*:%s@usenet.plco powoduje wysylanie artykulow w moderowanych grupach pl.* na adres typu nazwa-grupy-z-kropkami-zamienionymi-na-kreski@usenet.pl. Linia taka znajduje sie juz w standardowej (tzn. rozprowadzanej wraz ze zrodlami serwera) dystrybucji INND poczawszy od wersji 1.5.
usenet.pl jest adresem klasy MX wskazujacym na hosty utrzymujace pelna liste wszystkich 'moderatorow' grup pl (obecnie sa to galaxy.uci.agh.edu.pl i okapi.ict.pwr.wroc.pl). Domena ta powstala na poczatku sierpnia 1995, zastepujac stosowana uprzednio domene moderators.fuw.edu.pl.
Plik distrib.pats
Plik ten nalezy uzupelnic o lokalne dystrybucje, tam gdzie one
wystepuja, np.:
10:pwr.*:pwr - We Wroclawiu 10:umk.*:umk - W Toruniua takze ew. niektore grupy, ktore maja inna dystrybucje, niz wynika to z ich nazwy, np. we Wroclawiu:
30:pl.listserv.email-d:pwrgdyz pl.listserv.email-d jest lokalna grupa wroclawska mimo nazwy 'pl.' i artykuly poslane do tej grupy otrzymuja standardowo dystrybucje 'pwr'. Specjalne definiowanie domyslnej dystrybucji pl dla grup pl.* jest bledem, gdyz powinno to byc 'world' (a w ogole, to najlepiej zamiast 'world' pozostawic wtedy "pusta" dystrybucje, oznaczajaca caly swiat) - a dystrybucja pl ma rzeczywiscie oznaczac rozsylanie artykulow wylacznie do serwerow w Polsce.
Plik distributions
Zawiera opisy poszczegolnych dystrybucji. To, co dla Polski
najwazniejsze, ponizej:
pl Polska pl-news Polska, wylacznie news, bez list dyskusyjnych krakow Krakow cyfronet Krakow torun Torun warszawa Warszawa umk UMK w Toruniu pwr Politechnika Wroclawska wroc Wroclaw world Caly swiat inet Internet mimuw Wydz. Matematyki Informatyki i Mech. Uniw. Warszawskiego local lokalny serwer news
Plikow tego mozna uzyc do sprawdzenia, czy lista grup na serwerze jest aktualna w nastepujacy sposob:
lynx -source http://www.usenet.pl/doc/pl.newsgroups | \ $inn/control/checkgroupslub:
lynx -source http://www.usenet.pl/doc/news-pl-faq.3 | \ sed -e '1,/^=== /d' -e '/^--- /d' | \ $inn/control/checkgroups
Aby byl sprawdzany podpis PGP, potrzebne jest oczywiscie odpowiednie oprogramowanie na serwerze - sam program pgp oraz skrypty 'pgpverify' i poprawiony 'parsecontrol' serwera news. Znajduja sie one w dytrybucji INN poczawszy od wersji 1.5, a dla poprzednich wersji (a takze serwerow CNEWS) mozna sciagnac z sieci odpowiednie poprawki. Wiecej informacji na ten temat mozna przeczytac pod adresem ftp://ftp.pwr.wroc.pl/pub/networking/news/misc/pgpcontrol/ (mirror strony z ftp.uu.net). Tam mozna takze znalezc klucz PGP uzywany w hierarchii pl.
Jesli jednak na serwerze nie jest dokonywana weryfikacja PGP, musi wowczas wystarczyc metoda "tradycyjna", jako ze artykuly specjalne podpisane przez PGP sa tez poprawnie rozpoznawane, gdy PGP nie ma na serwerze (ale oczywiscie nie da sie wtedy zweryfikowac ich autentycznosci).
Trzeba pamietac, ze OSTATNI pasujacy opis zostaje uzyty, tak wiec w okolicach konca pliku nalezy dopisac dla grup pl.*:
## PL newsgroups - bez weryfikacji kluczem PGP newgroup:michalj@*fuw.edu.pl:pl.*:doit=newgroup rmgroup:michalj@*fuw.edu.pl:pl.*:doit=rmgroup newgroup:newgroup@usenet.pl:pl.*:doit=newgroup rmgroup:newgroup@usenet.pl:pl.*:doit=rmgroupJezeli natomiast serwer zostal skonfigurowany do weryfikacji artykulow specjalnych przez PGP, to zamiast powyzszych linii nalezy wpisac linie nastepujace:
## PL newsgroups - weryfikacja kluczem PGP newgroup:newgroup@usenet.pl|michalj@*fuw.edu.pl:pl.*:verify-pl.announce.newgroups rmgroup:newgroup@usenet.pl|michalj@*fuw.edu.pl:pl.*:verify-pl.announce.newgroups checkgroups:newgroup@usenet.pl|michalj@*fuw.edu.pl:pl.*:verify-pl.announce.newgroupsUWAGA! - W obu przypadkach miedzy '*' a 'fuw' nie ma kropki!
Poza tym dobrze jest przy okazji sprawdzic sposob reakcji serwera na
'sendsys'. Ponizej znajduje sie 'preferowany' sposob dla standardowych zapytan - automatyczna
odpowiedz, jesli podany zostal argument (czyli jesli np. komputer okapi otrzyma
'cmsg sendsys icm
' - to odesle fragment pliku
newsfeeds dotyczacy icm), oraz brak odpowiedzi, jesli argumentu
nie ma (by uniknac potencjalnych bomb-maili)
## SENDSYS sendsys:*@uunet.uu.net:*:doit=miscctl sendsys:*:*:doifargNa serwerach w Polsce dobrze jest takze dopisac nastepujace linie:
sendsys:*@adm.usenet.pl:*:doit=miscctl version:*@adm.usenet.pl:*:doit=miscctlspowoduja one wyslanie pliku newsfeeds lub listu zawierajacego w tresci numer wersji serwera, jezeli odpowiednio sformatowany artykul specjalny nadejdzie z adresu znajdujacego sie w domenie adm.usenet.pl. Pozwala to na uaktualnianie informacji o serwerach news w Polsce i ich wzajemnych polaczeniach (np. w celu uaktualnienia mapki zamieszczonej w czesci pierwszej tego FAQ), bez koniecznosci ciaglego zawracania glowy poszczegolnym administratorom serwerow news (bo serwer sam wysyla odpowiedz, a administratora jedynie informuje w krotkim liscie, ze odpowiedz zostala wyslana).
$inn/control/docheckgroups < PLIK
.
Nie nalezy sie obawiac, ze uruchomienie docheckgroups cokolwiek
zmieni lub cos "zepsuje". Program ten porownuje jedynie liste grup w dostarczonym mu
na wejsciu pliku z lista grup znajdujaca sie w plikach active i
newsgroups. W przypadku niezgodnosci informacje o tym drukowane
sa na standardowym wyjsciu w formacie skryptu sh. Tak wiec mozna program
docheckgroups
uruchomic raz dla sprawdzenia, czy wszystko
jest ok, a nastepnie w przypadku wykrycia niezgodnosci i zaakceptowania
zmian wykonac program ponownie, jego wynik skierowujac do programu sh
(albo do pliku, a nastepnie do sh):
$inn/control/docheckgroups < PLIK | sh -Artykul "checkgroups" wysylany jest 2 miesiace (1 dnia miesiaca w miesiace nieparzyste) z adresu newgroup@usenet.pl. Jesli artykul taki potrzebny jest "od zaraz" (np. przy konfigurowaniu nowego serwera news), mozna sobie poradzic inaczej:
docheckgroups
podajac mu plik pl.newsgroups
na wejscie.
mail
, mailx
, mh
lub sendmail
, w druga strone natomiast - utworzyc odpowiedni
"alias" pocztowy typu np.
"|/usr/lib/news/sendnews"gdzie sendnews jest prostym skryptem dopisujacym na poczatku nazwe grupy i posylajacym dalej calosc do programu '
inews
',
ktory przekaze artykul serwerowi.
Tak prosto jednak nie da sie tego zrobic. Problem polega na tym, ze kazdy artykul wyslany na liste dyskusyjna trafilby do news, po czym z news zostalby odeslany ponownie na liste dyskusyjna, tak wiec na liscie kazdy artykul pojawialby sie dwukrotnie. Jesli na dodatek listserwer nie przekazuje (tzn. gubi) 'Message-ID', moze sie okazac, ze artykul ponownie wraca do news, skad dalej zostaje zakolejkowany do listserwera i zaczyna sie robic (nie)wesolo... Jesli 'Message-ID' jest przez listserwer przekazywany jak nalezy, sytuacja taka nie bedzie miala miejsca, gdyz artykul poslany ponownie do news (z tym samym Message-ID) zostanie przez serwer news odrzucony jako duplikat (i zwykle wygeneruje list do Postmastera), moze to jednak powodowac zamieszanie na liscie dyskusyjnej.
Wazne jest wiec po pierwsze zagwarantowanie, by artykul trafiajacy z listserwera do news nie zostawal wyslany z powrotem na liste, a takze by listserwer nie gubil ani nie modyfikowal Message-ID:, a takze by generowac Message-ID: w momencie przekazywania listu z e-maila do news, jesli list go nie zawiera. W miare mozliwosci nalezy takze ustawic na listserwerze opcje 'NOACK', oznaczajaca ze listy wyslane z adresu serwera news nie sa do niego ponownie odsylane.
Do tego wlasnie sluza oba wspomniane programy. mail2news dokonuje przefiltrowania naglowka maila, usuwajac niepotrzebne lub niezgodne z RFC822 pola (np. 'Received:' jest w newsach w ogole bez znaczenia). Jezeli list nie posiada 'Message-ID:', to jest on generowany, ponadto tworzone jest pole 'Path:' z wpisanym odpowiednim tekstem, np. 'Path: gateway', dzieki czemu w serwerze news mozliwe jest wysylanie na liste dyskusyjna wylacznie artykulow, ktore serwer news otrzymal od innych serwerow, a nie od mail2news (a wiec nie majacych 'gateway' w polu 'Path:'). Opcjonalnie, mail2news potrafi takze odfiltrowac czesto posylane na adres listy (zamiast listserwera) artykuly typu 'unsub nazwa-listy'.
W druga strone - news2mail usuwa z naglowka pola nieistniejace w e-mailu (typu 'Path:', 'Supersedes:', itd.), ignoruje wszystkie listy typu 'control', tzn. np. kasujace poprzedni artykul, martwi sie o wlasciwe 'From:' i 'Sender:', by byla mozliwa odpowiedz do autora, a nie tylko na liste, oraz pare innych rzeczy. No i to co najwazniejsze - przy wlasciwej konfiguracji kazdy artykul pojawia sie dokladnie raz na liscie i raz w newsach.
Pakiet mail2news nie jest na razie dostepny na zadnym anonymous ftp (podobno mial zostac wlaczony do INN v1.5, ale tak sie nie stalo), jest bowiem na razie w wersji 'beta' (choc trwa to juz od konca 1993 roku), nalezy sie wiec skontaktowac z autorem (Rich Salz - rsalz@uunet.uu.net), by otrzymac jego kopie. Dobrze jest takze skontaktowac sie ze mna (pod adresem tsurmacz@ict.pwr.wroc.pl), aby uzyskac poprawki do tego programu, zapewniajace wlasciwe traktowanie naglowkow "Content-Type:" i innych, ktore wystepuja w listach/artykulach zawierajacych polskie znaki diakrytyczne. Istnieje takze (na razie w fazie zaawansowanych testow) wersja w PERLu napisana przez Piotra Piatkowskiego, ktora dodatkowo potrafi dokonywac przekodowania z Quoted Printable na 8bit artykulow wysylanych do newsow z poczty i odwrotnie w druga strone. W dalszej czesci opisany jest pakiet mail2news Richa Salza.
Przed kompilacja nalezy sprawdzic kilka parametrow - jakiego typu
program uzywany jest do wysylania poczty (sendmail czy mh), co dopisywane ma
byc w polu 'Path:' (standardowe 'gateway' czy np. 'gateway.pwr.wroc.pl'), czy
adresy 'From:' news2mail ma generowac z 'Path:', czy bezposrednio z 'From:' w
artykule (w czasach, gdy stosowanie adresow uucp staje sie przeszloscia,
nalezy uzywac tego drugiego), oraz gdzie znajduje sie serwer news (a jesli
na tej samej maszynie - gdzie sa jego biblioteki - a dokladniej: program
inews lub rnews). Roznica pomiedzy inews a rnews moze okazac sie istotna,
bowiem inews jest tak naprawde programem przewidzianym do "interaktywnego"
przyjmowania newsow od uzytkownikow, kontroluje wiec m.in. format daty, a
czasem takze np. czy ilosc cytowanego tekstu nie jest wieksza od nowego tekstu
(jesli tak zostal skompilowany). inews
informuje takze o bledach
na stdout lub stderr, co w przypadku mail2news konczy sie przekazaniem bledu
dalej, czyli do sendmaila i co za tym idzie, zwrocenie listu do nadawcy
(Sender:), czyli zwykle wlasciciela listy oraz lokalnego postmastera.
W 80% list dyskusyjnych wszystko dziala jednak jak nalezy, a wowczas
inews
jest o tyle lepszy, ze poprzez zwracanie bledow w
sposob natychmiastowy zwraca uwage administratora news na to, ze cos
jest nie tak. Natomiast bledy wystepujace przy dostarczaniu artykulow za
pomoca rnews sa zwykle przez ten program po cichu ignorowane, a odbicie
znajduja jedynie w logach z pracy serwera. Istotne jest jednak to, ze
mail2news
umozliwia podanie 'agenta news' jako parametr przy
uruchomieniu, tak wiec bez koniecznosci rekompilacji, mozna w dowolnym
momencie inews zmienic na rnews lub odwrotnie.
Po skompilowaniu mail2news pozostaje juz wlasciwie tylko skonfigurowac serwer news i listserwer, by przesylaly sobie nawzajem artykuly. Najpierw o tym, jak to zrobic z mail2news, bo z tym jest zwykle wiecej problemow...
Rozpatrzmy taki przyklad - tworzymy grupe "pl.nowa.grupa", ktora laczymy z lista "nowa-lista" obslugiwana przez listserv@plearn.edu.pl. Serwerem news, na ktorym tego dokonujemy jest "serwer.news.pl". Musimy serwer news 'zapisac na te liste', tzn. np. stworzyc w /etc/aliases serwera (lub innego koputera w poblizu) alias:
pl-nowa-grupa: "|/usr/local/news/bin/mail2news -npl.nowa.grupa -dlocal"Teraz wypadaloby grupe 'pl.nowa.grupa' utworzyc za pomoca '
ctlinnd
newgroup pl.nowa.grupa y
' (lub zgodnie ze skladnia serwera
news -- powyzszy przyklad jest dla serwera INN) i przetestowac, czy
poczta wysylana na adres pl-nowa-grupa@serwer.news.pl trafia do newsow.
Po pierwsze - wysylajac email-a na ten adres, a jesli cos nie dziala -
testujac recznie:
% cat > test.posting From: uzytkownik@serwer.news.pl To: pl-nowa-grupa Message-ID: test-1@serwer.news.pl Date: Mon, 1 Aug 1994, 12:00 MET test ^D % cat test.posting | /usr/local/news/bin/mail2news -npl.nowa.grupa -dlocal(albo nagrac jakis list wyslany samemu sobie do pliku i probowac go przekazac do mail2news).
Jesli w tym momencie chcemy przetestowac, jak z dostarczaniem newsow poradzi sobie rnews zamias inews, wystarczy wpisac:
% cat test.posting | \ /usr/local/news/bin/mail2news -=/usr/local/news/bin/rnews -npl.nowa.grupa -dlocal testslowo 'test' (lub dowolne inne) na koncu jest konieczne z tego wzgledu, ze mail2news przekazuje 'agentowi news' parametr '-h' oraz wszystkie inne, ktorych sam nie interpretuje (czyli '-h test') - inews wymaga '-h' bez parametrow, dla rnews po '-h' musi wystapic nazwa 'hosta' ktora zostanie zapisana w logach serwera. Pamietac nalezy tez o tym, ze o ile mail2news wykorzystujacy inews moze byc uruchomiony "niedaleko" serwera, to rnews da sie uruchomic wylacznie na serwerze, albo na komputerze, ktory z serwerem news ma polaczenie via UUCP. Jesli wszystko dziala tak jak trzeba, pozostaje zapisac serwer news jako subskrybenta listy dyskusyjnej: albo poprosic wlasciciela listy by dopisal do niej adres pl-nowa-grupa@serwer.news.pl, albo zrobic to samemu, posylajac e-mail z adresu pl-nowa-grupa do listserwera. Jak poslac maila z takiego adresu? O tym chyba wszyscy wiedza, ale jakby nie, to jako root (albo jeden z 'trusted users' sendmaila - np. 'news') nalezy wykonac:
# cat | /usr/lib/sendmail -fpl-nowa-grupa@serwer.news.pl listserv@plearn.edu.pl From: pl-nowa-grupa@serwer.news.pl To: listserv@plearn.edu.pl sub nowa-lista "mail to news gateway at serwer.news.pl" ^DW ciagu kilku lub kilkudziesieciu minut powinien sie w newsach pojawic pierwszy artykul - z odpowiedzia serwera i informacja "You have now subscribed to list nowa-lista" itd. Jesli tak, to wszystko na najlepszej drodze. Aby poustawiac wszystkie opcje dystrybucji jak nalezy, poslij listserwerowi (ponownie z adresu pl-nowa-grupa@serwer.news.pl) list o tresci:
set nowa-lista full set nowa-lista noackPierwsza linia oznacza, ze listserwer ma posylac pelne naglowki (a wiec wlacznie z Message-ID), druga - ze artykuly przeslane z serwera news nie beda do niego ponownie wysylane. Opcje powyzsze dzialaja poprawnie w przypadku listserwerow bitnetowych oraz 'listproc-a', inne listserwery moga wymagac nieco innych komend, na przyklad '
set nowa-lista
norepro
' itp.Jesli wszystko dziala jak nalezy, pora na wysylanie newsow na liste. W pliku newsfeeds nalezy dopisac linie mniej wiecej nastepujacej tresci:
nowa-lista/gateway\ :pl.nowa.lista,/!local,!pl-news\ :Tp:/usr/local/news/bin/news2mail nowa-lista nowa-lista \ pl-nowa-grupa@serwer.news.pl plearn.edu.pl(ostatnie 2 linijki w zasadzie powinny zmiescic sie w jednej, ale dla czytelnosci podzielilem ja na dwie - TS). Argumenty podane dla news2mail oznaczaja ze:
Poza tym 'From:' zawsze zawiera adres z pola 'From:' w artykule news (chyba ze w trakcie kompilacji wybrano opcje generowania 'From:' na podstawie 'Path:')
'Sender:' - powinien byc adresem, jakiego uzylismy zapisujac mail2news na liste, wiekszosc z list bowiem nie akceptuje listow wysylanych przez osoby nie bedace subskrybentami listy. Aby wiec listy wyslane w newsach trafialy w sposob pewny na liste, uzytkownik wystepujacy w polu 'Sender' lub 'From' musi byc na liste zapisany - co latwo osiagnac definiujac wlasciwie pole 'Sender'. Ponadto, aby 'Sender:' wpisane przez news2mail bylo respektowane przez sendmail-a (lub innego agenta :-) pocztowego), trzeba jeszcze upewnic sie, ze uzytkownik 'news' (z tym id dziala serwer news, a wiec i news2mail przez niego uruchamiany) jest wpisany w sendmail.cf jako 'trusted user', (opcja 'Trusted' jest bez znaczenia w sendmail 8.6.x, ale poczawszy od wersji 8.7.1 ponownie jest respektowana), np:
DT root uucp newsNajlepiej oczywiscie na poczatek zamiast adresow listserwera wpisac wlasny i przetestowac, czy artykul wyslany w news trafia do e-maila jak nalezy. Po wykonaniu '
ctlinnd reload newsfeeds
' i
wyslaniu artykulu do news, albo od razu powinien on zostac dostarczony
email-em, albo zakolejkowany. Wowczas '/usr/lib/sendmail
-q
' przyspieszy jego dostarczenie. No a gdy juz okaze sie, ze
artykul dotarl i wygladal mniej wiecej tak:
From news.test@cyber.ict.pwr.wroc.pl Sat Aug 6 18:05:02 1994 Return-Path: <news.test@cyber.ict.pwr.wroc.pl> Received: from cyber by asic.ict.pwr.wroc.pl (4.1/SMI-4.1) id AA14199; Sat, 6 Aug 94 18:05:01 +0200 Received: from NEWS GATEWAY by cyber with netnews for ts@asic (ts@asic) From: tsurmacz@sprocket.ict.pwr.wroc.pl (Tomasz Surmacz) Message-Id: <320c32$ena@cyber.ict.pwr.wroc.pl> Sender: news.test@cyber.ict.pwr.wroc.pl Subject: test news2mail test news2mail - wyslany przez tin-a uruchomionego na komputerze 'sprocket', polaczonego z serwerem news 'cyber', gdzie grupa pwr.nowa.lista w newsfeeds opisana jest jako: list-test/gateway\ :!*:pwr.nowa.lista:Tp:\ /bin/news2mail ts ts news.test@cyber.ict.pwr.wroc.pl asic(tzn. mial wlasciwy adres From: oraz Sender:), to mozemy zmienic wlasny adres na adres listserwera, jeszcze raz wykonac '
ctlinnd
reload newsfeeds
' i miec nadzieje, ze wszystko dziala jak trzeba.
Gdy juz grupa zostanie takze utworzona na innych serwerach news, wystarczy
tylko przestawic dystrybucje w aliasie:
pl-nowa-grupa: /usr/local/news/bin/mail2news -npl.nowa.grupa -dlocalna:
pl-nowa-grupa: /usr/local/news/bin/mail2news -npl.nowa.grupa -dworld(lub w ogole zlikwidowac '-d' zakladajac, ze serwer nie dopisze zadnej, a wiec bedzie szlo w swiat, ale lepiej to wowczas sprawdzic). To wszystko...
Ostatnia uwaga, dotyczaca uruchamiania roznych bramek -- powyzszy opis ma za zadanie pomoc w konfiguracji bramek uruchamianych dla wlasnych lokalnych potrzeb, niedostepnych z zewnatrz i dla "wszystkich". Pojawiajace sie ostatnio (2001-2003) jak grzyby po deszczu bramki wrzucane do roznorakich serwisow www i nie wymagajace zadnej autoryzacji dostepu (przez co szybko staja sie zrodlem spamow, trolli i innych abuserow), beda tepione z cala surowoscia.
mail2news
w sposob opisany w powyzszym punkcie jest to, ze wszelkiego rodzaju
bledy w dostarczaniu poczty trafiajacej z newsow na liste dyskusyjna sa
przesylane z powrotem do bramki mail2news, a wiec trafiaja do grup news.
Aby tego uniknac warto skorzystac z programu procmail
i
odfiltrowac takie listy wyrzucajac je do /dev/null lub zapisujac
do odpowiedniego pliku, ale nie wysylajac do news.
Jesli na serwerze news zainstalowanych jest kilka bramek
mail2news
, mozna je wszystkie obslugiwac za pomoca jednego
pliku z regulkami procmaila, separujac odpowiednie listy na grupy news
po naglowkach To: lub innych, mozna tez dla kazdej grupy stworzyc osobny
alias z osobnym plikiem .rc, zakladajac, ze plik ten obsluguje
wylacznie jedna liste dyskusyjna, polaczona z jedna bramka mail2news. Jako
ze roznica polega jedynie na wpisaniu odpowiednich regulek, w dalszej
czesci opisu nie ma znaczenia, ktory z tych sposobow zostal wybrany.
Wszystkie pliki .rc bramek najlepiej umiescic w jednym katalogu,
np. ~news/mail2news. Program procmail, wywolywany posrednio przez
plik /etc/aliases uruchamiany bedzie z opcja -m
,
oznaczajaca, ze ma dzialac jako filtr poczty, czytajac konfiguracje z
jawnie podanego pliku konfiguracyjnego z regulami filtrowania poczty.
W tym trybie procmail zachowuje sie jednak roznie, zaleznie od tego, w
jakim katalogu znajduje sie ten plik. Jesli jest to plik, ktorego pelna
sciezka rozpoczyna sie od /etc/procmailrcs/ i nie zawiera w nazwie
odwolan posrednich w gore (czyli do katalogow `..'), to poczta bedzie
dostarczana z prawami uzytkownika, ktory jest wlascicielem tego pliku.
Dopuszczalne sa dowiazania symboliczne, ale nie zawierajace w sciezce
katalogow `..'. Jezeli te warunki nie sa spelnione, albo program
procmail nie ma ustawionego bitu suid, poczta bedzie dostarczana w
standardowy sposob, tzn. z takimi prawami uzytkownika, jakie zostana
ustawione przez agenta pocztowego wywolujacego procmail
(czyli zwykle program sendmail
), bedzie to wiec zazwyczaj
uzytkownik daemon i grupa mail (tak naprawde zalezy to jednak od tego,
co jest wpisane w konfiguracji sendmail.cf).
Wlasciwe prawa dostepu do katalogu, zawierajacego pliki z regulami
filtrowania poczty, do samych plikow z tymi regulami oraz wszystkich
innych plikow, potrzebnych procmailowi do zapisywania logow itp.,
sa kluczowe dla prawidlowego dzialania calosci. Jesli wystepuja
jakiekolwiek bledy, najprawdopodobniej sa one spowodowane wlasnie tym,
ze procmail
wykonywany jesy jako inny uzytkownik i nie ma
prawa odczytu konfiguracji lub zapisu logow.
Najlepiej, aby procmail
wykonywany byl jako uzytkownik
news, dlatego z katalogu /etc/procmailrcs dobrze jest
utworzyc dowiazanie symboliczne do odpowiedniego katalogu posiadanego
przez uzytkownika news lub tworzyc pliki konfiguracyjne jako
uzytkownik newss bezposrednio w podkatalogu /etc/procmailrcs.
Nalezy wiec wykonac jedna z dwoch rzeczy:
mkdir /etc/procmailrcs cd /etc/procmailrcs ln -s ~news/mail2news mail2news lub: mkdir /etc/procmailrcs cd /etc/procmailrcs mkdir mail2news chown news mail2news chgrp news mail2news chmod 2755 mail2newsW katalogu tym tworzymy plik xxx.rc, majacy za zadanie obslugiwac bramke grupy pl.xxx. Plik ten powinien byc posiadany przez uzytkownika news:
PATH=/bin:/usr/bin:/usr/local/bin HOME=/home/news MAILDIR=$HOME/mail2news DEFAULT=$MAILDIR/Default #completely optional LOGFILE=$MAILDIR/from #recommended :0: * From.*MAILER-DAEMON warning :0 * |/usr/local/news/bin/mail2news -o'Lista xxx' -npl.xxx xxxPlik ten ma za zadanie odfiltrowywac cala poczte pochodzaca od uzytkownika MAILER-DAEMON do pliku warning, a pozostala poczte przekazywac do programu
mail2news
, wywolywanego z odpowiednimi parametrami
(zostaly one omowione w poprzednim punkcie). Informacja o kazdym liscie
zostaje zapisana w pliku from. Taka konfiguracja przydatna jest
do testowania dzialania bramki. Po sprawdzeniu dzialania lepiej jest
skierowac listy od demona do /dev/null, wpisujac taka wlasnie
nazwe zamiast `warning', podobnie mozna takze postapic z logiem
z pracy procmaila, czyli plikiem from. Alternatywne wyjscie,
to uruchomienie wykonywanego raz dziennie lub raz na tydzien z cron-a
skryptu, ktory bedzie kasowal zawartosc tych plikow, jako ze pozostawione
calkiem bez nadzoru roslyby ciagle, zajmujac coraz wiecej miejsca na
dysku.Ostatnia rzecza do zrobienia jest wpisanie lub modyfikacja odpowiedniego aliasu w pliku /etc/aliases, a powinien on wygladac nastepujaco:
news.xxx: "|/usr/local/bin/procmail -m /etc/procmailrcs/mail2news/xxx.rc"
Przeslanie jednego artykulu odbywa sie w nastepujacy sposob:
Nadawca: mam artykulTaki synchroniczny sposob przesylania artykulow po jednym oznacza, ze szybkosc transferu news moze byc znacznie mniejsza od pasma linii laczacej nadawce z odbiorca, zwlaszcza jesli komputery polaczone sa linia satelitarna lub jesli komputer-odbiorca jest na tyle wolny, ze duzo czasu zajmuje mu sprawdzenie, czy dany artykul juz ma. W bardzo powazny sposob mozna to poprawic stosujac tzw. "streaming nntp", co oznacza, ze nadawca pcha strumien newsow nie czekajac na natychmiastowe potwierdzenia, lecz uzyskujac je nieco pozniej. Do tego trzeba jednak nowszej wersji INND (innd1.4unoff2 juz to ma).Obiorca: sprawdza, odpowiada: nie mam, dawaj go. N: nadaje, czeka. O: potwierdza odbior. N: mam artykul ...
Opoznienie wprowadzane przez linie satelitarna wynosi ok. 800ms, co oznacza, ze nawet najszybsza linia i najszybszy komputer nie sa w stanie przeslac po takiej linii wiecej niz ok. 100000 artykulow na dobe, przy obecnej 'dawce' rzedu 70000. W praktyce jest jeszcze gorzej, bo pozostale etapy tez trwaja.
Druga wada jest tez brak jakiejkolwiek kompresji przesylanych danych, a doswiadczenie wykazuje, ze na zawartosci artykulow newsowych mozna osiagnac wspolczynnik kompresji do ok. 50% pierwotnej wielkosci. Ta wada jest z kolei bardzo istotna w przypadku lacz o malej przepustowosci.
Obu tych wad nie posiada sposob przesylania za pomoca tzw. 'compressed batches over uucp'. Przesyla sie w paczkach - a wiec nie trzeba czekac na potwierdzenie kazdego artykulu. Kompresuje sie - a wiec danych do przeslania jest mniej.
Oczywiscie, ten sposob tez ma wady:
Zakladamy, ze laczymy ze soba komputery alfa.aaa.aaa (site name AAA.aaa) i omega.zzz.zzz (site name ZZZ.zzz). Dalsze instrukcje dotycza alfy, na omedze wszystko tak samo, tylko odwrotnie.
Uomega:ZZZZZZ:4:8::/var/spool/uucppublic:/usr/lib/uucp/uucico
uucp stream tcp nowait uucp /usr/etc/in.uucpd in.uucpd
uucp stream tcp nowait uucp /usr/etc/tcpd in.uucpd
omega Any TCP - omega.zzz.zzz in:--in: Ualfa word: AAAAAA
omega Ualfa AAAAAA
Czesto wystepujacym bledem uniemozliwiajacym poprawne polaczenie dwoch serwerow przez UUCP jest to, ze komputer nawiazujacy polaczenie usiluje ustawiac 7-bitowe wysylanie danych z kontrola parzystosci, podczas gdy "serwer" spodziewa sie danych 8-bitowych. Tak na przyklad jest na SUNach z SunOSem i Solarisem. Mozna temu jednak prosto zaradzic, uzupelniajac powyzsza linie w pliku Systems w taki sposob:
omega Any TCP - omega.zzz.zzz "" P_ZERO in:--in: Ualfa word: AAAAAA
LOGNAME=Uomega MACHINE=omega VALIDATE=omega COMMANDS=/usr/local/news/rnews(Oczywiscie, nalezy podac prawdziwa sciezke do programu rnews).
su uucp crontab </usr/lib/uucp/uudemon.crontab
Uomega:ZZZZZZ:4:8::/var/spool/uucppublic:/usr/lib/uucp/uucico
uucp stream tcp nowait uucp /usr/local/lib/uucp/uucico uuciso -s -l
uucp stream tcp nowait uucp /usr/etc/tcpd /usr/local/lib/uucp/uucico -s -l
system omega time Any port TCP address omega.zzz.zzz called-login Uomega call-login * call-password * chat ogin:--ogin:--ogin:--ogin: \L word: \P protocol tfigGa commands rmail rnews
omega Ualfa AAAAAA
Ualfa AAAAAATo, czy w pliku passwd hasla sa zakodowane, czy nie, zalezy od opcji kompilacji Taylor UUCP.
port TCP type tcp
su uucp crontab </usr/lib/uucp/uudemon.crontab
0,15,30,45 * * * * /usr/lib/uucp/uucico -somega 0 7 * * * /usr/lib/uucp/uustat -Q -o 120 -y 144 -N -W "Still undelivered after 5 days" 5 7 * * * /usr/lib/uucp/uustat -Q -o 168 -N -K -W "Still undelivered after 7 days, removed from the UUCP queue"
uucico
-sall
".
mkdir /usr/spool/news/out.going/omega
ZZZ.zzz:all,!control/all,!local:f:/usr/spool/news/out.going/omega/togo
omega 200000 20 batcher compcun viauux
05,15,25,35,45,55 * * * * /usr/lib/newsbin/batch/sendbatches omega
uucico
kontaktujace
sie z innym systemem, tak jak to zostalo opisane powyzej, albo np:
7 8-16 * * * /usr/local/lib/uucp/uucico -somega 7,17,37 17-23,0-6 * * * /usr/local/lib/uucp/uucico -somega
09,19,29,39,49,49,59 * 1-31 * 0-6 /usr/lib/newsbin/input/newsrun
albo
Jesli feed jest duzy i wiemy, ze za kazdym obiegiem sendbatches maszyna omega posyla nam srednio wiecej niz jeden batch, polecam sposob pierwszy. Jesli dostajemy tylko niewielkie batche, pojedyncze i nie za kazdym obiegiem sendbatches, polecam sposob drugi.
cocos/fuw.edu.pl\ :*,!torun.*,!umk.*,!mat.*,/!torun,!umk,!mat\ :Tf,Wnb:
uw/uw.edu.pl\ :*,!torun.*,!umk.*,!mat.*,/!torun,!umk,!mat\ :Tf,Wnm:
COMPRESS=/usr/ucb/compressi
UUXFLAGS="- -r -n -gd"na
COMPRESS=/usr/bin/compress UUXFLAGS="- -r -n"
Aby temu zaradzic, mozna skompilowac (na Solarisie, Linuxie i innych systemach) "Taylor UUCP" - kompiluje sie bez problemow, poza jednym malym - jesli planujemy uzywac UUCP takze przez modem, trzeba KONIECZNIE w pliku "policy.h" zdefiniowac 'HAVE_POSIX_TERMIOS', zamiast liczyc na to, ze system sam zgadnie (wedlug opisu), bo w Solarisie zgaduje 'HAVE_SYSV_TERMIO' i zle dziala z szybkimi (potrzebujacymi sprzetowej kontroli przeplywu) modemami, a na Linuxach kompilator zgaduje HAVE_BSD_TERMIO, zamiast stosowac HAVE_POSIX_TERMIOS.
INN FAQ zaleca, aby rozmiar pojedynczego batcha zwiekszyc z
DEFBYTES=50000do 200000 bajtow, zarowno dla polaczen TCP jak i telefonicznych. Mozna to zrobic przez zmiane wartosci tej zmiennej w skrypcie lub podanie opcji
-s200000
przy wywolaniu sendbatch w cronie.
9,19,29,39,49,59 * * * * /usr/local/news/bin/sendbatch -c cocos >/dev/null 2>&1
sendbatch
z crontaba, jak ponizej:
9,19,29,39,49,59 * * * * /usr/local/news/bin/sendbatch -m12000000 -s100000 -c cocos >/dev/null 2>&1W powyzszym przykladzie batche sa kompresowane (opcja -c), kazdy z nich nie dluzszy niz 100kB (opcja -s), a na dodatek jezeli wielkosc zgromadzonych na dysku batchow przekroczy 12 tys. blokow (czyli zaleznie od standardowej wielkosci bloku dyskowego - 6 lub 12 MB), to generowanie batchow zostaje wstrzymane - identyfikatory "wychodzacych" newsow sa nadal gromadzone w /var/news/out.going/cocos i /var/news/out.going/cocos.uucp, ale plik 'cocos.uucp' zostanie uzyty do wygenerowania nastepnego batcha, dopiero wtedy, gdy nieco ubedzie batchow juz znajdujacych sie w kolejce do wyslania.
Wielkosc podana jako argument opcji '-m' to ilosc bajtow na dysku, ktore moga zajac batche, ale tak jest tylko w wypadku 1024-bajtowych blokow na dysku (BSD, Linux, SunOS). W SysV (AIX, Solaris, IRIX) komenda 'df' i pokrewne podaja dane zakladajac 512-bajtowe bloki, a wiec jesli batche maja zajmowac nie wiecej niz 10 MB, to nalezy podac liczbe 20.000.000.
Warto tez od razu zauwazyc, ze metoda ograniczania batchow nie zadziala, gdy transmitujemy batche uucp w sposob posredni, co zostalo opisane w dalszej czesci.
7 0,6,12,18 * * * /bin/rnews -Ua wiec raz lub kilka razy dziennie uruchamiac program rnews z pakietu INND. Opcja '-U' powoduje, ze rnews nie szuka batchow na wejsciu, lecz przeszukuje katalog /usr/spool/news/in.coming . W normalnych warunkach nie jest to konieczne, natomiast przydaje sie w sytuacjach awaryjnych, gdy z jakiegos powodu serwer przestaje przyjmowac newsy (np. padl, albo sie zapchal), wtedy batche UUCP (oraz newsy dostarczane przez mail2news) trafiaja wlasnie do /usr/spool/news/in.coming. Serwer sam przeszukuje ten katalog podczas uruchamiania, ale nie podczas odblokowywania (ctlinnd go ''), jesli byl zapchany. Dlatego dobrze jest rnews uruchamiac takze z crontab-a.
#! /bin/sh # Invoke gzip, adding silly 2.11-compatible header. echo "#! cunbatch" gzip
2. W pliku batchparms zmienic compcun na gzipcun
*** newsspool.c.orig Tue Nov 26 16:52:21 1991 --- newsspool.c Mon Oct 17 19:05:03 1994 *************** *** 31,36 **** --- 31,37 ---- char *progname; extern void error(), exit(); + #ifdef UTZOOERR extern char *mkprogname(); #else *************** *** 237,246 **** # define GOOP7LEN (sizeof(goop7)-1) /* strlen(goop7) */ static char suf7[] = ".7"; static char comp[2] = { 037, 0235 }; /* compress's magic no. */ register char *p; register int nleft; # define MINCBATCH 5 /* one character, compressed */ ! nleft = count; p = bufp; --- 238,249 ---- # define GOOP7LEN (sizeof(goop7)-1) /* strlen(goop7) */ static char suf7[] = ".7"; static char comp[2] = { 037, 0235 }; /* compress's magic no. */ + static char gzip[2] = { 037, 0213 }; /* gzip's magic no. */ + static char sufg[] = ".gz"; register char *p; register int nleft; # define MINCBATCH 5 /* one character, compressed */ ! # define MINCGZIP 21 /* one character, gzipped */ nleft = count; p = bufp; *************** *** 254,259 **** --- 257,269 ---- return(0); } + if (p[0] == gzip[0] && p[1] == gzip[1]) { /* gzipped */ + if (nleft < MINCGZIP) + return(count); + suffix = sufg; + return(0); + } + if (*p++ != '#' || *p++ != '!') /* doesn't start with #! */ return(0); nleft -= 2; *************** *** 268,274 **** if (nleft >= GOOPLEN+1 && STREQN(p, goop, GOOPLEN)) { p += GOOPLEN; nleft -= GOOPLEN; ! suffix = suf; } else if (nleft >= GOOP7LEN+1 && STREQN(p, goop7, GOOP7LEN)) { p += GOOP7LEN; nleft -= GOOP7LEN; --- 278,287 ---- if (nleft >= GOOPLEN+1 && STREQN(p, goop, GOOPLEN)) { p += GOOPLEN; nleft -= GOOPLEN; ! if (p[1] == gzip[0] && p[2] == gzip[1]) /* gzipped */ ! suffix = sufg; ! else ! suffix = suf; } else if (nleft >= GOOP7LEN+1 && STREQN(p, goop7, GOOP7LEN)) { p += GOOP7LEN; nleft -= GOOP7LEN;
W zasadzie mozna sie bez tej zmiany obejsc, wtedy newsspool blednie nadaje typ plikom rozszerzenie .Z zamiast .gz, ale programowi gunzip (patrz nizej) to nie szkodzi.
2. W skrypcie /news/lib/newsbin/input/newsrun zmienic nastepujaco:
*** newsrun.orig Thu Oct 27 23:14:45 1994 --- newsrun Mon Oct 17 15:41:39 1994 *************** *** 121,127 **** # Decompress if necessary. text=$tmp case $f in ! *.Z) uncompress <$f >$text ;; *.7) c7decode <$f | uncompress >$text ;; *.t) >$tmp # in case compress left trash text=$f --- 121,128 ---- # Decompress if necessary. text=$tmp case $f in ! *.gz) gunzip <$f >$text ;; ! *.Z) gunzip <$f >$text ;; *.7) c7decode <$f | uncompress >$text ;; *.t) >$tmp # in case compress left trash text=$f
*** sendbatch.orig Thu Oct 27 23:29:30 1994 --- sendbatch Thu Oct 27 23:31:54 1994 *************** *** 14,19 **** --- 14,21 ---- COMP= COMPFLAGS= COMPRESS=/usr/ucb/compress + GZIP=/usr/local/bin/gzip + GZIPFLAGS= ECHO= ## Not a config param since this is the remote rnews. RNEWS=rnews *************** *** 75,80 **** --- 77,87 ---- -c) COMP="; exec ${COMPRESS} ${COMPFLAGS}" ECHO="echo '#! cunbatch'" + continue + ;; + -cg) + COMP="; exec ${GZIP} ${GZIPFLAGS}" + ECHO="echo '#! cunbatch'" continue ;; +c)
_PATH_COMPRESS /usr/ucb/compress _PATH_COMPRESSEXT .Zna
_PATH_COMPRESS /usr/local/bin/gzip _PATH_COMPRESSEXT .gzlub podobnie. Potem niestety trzeba przekompilowac (make update) i na nowo nagrac programy INN. Jesli nagramy wszystkie z ta poprawka, to cale INN bedzie odtad uzywalo gzip do kompresji log-files itp. (Gdzieniegdzie jest to tak wlasnie zrobione "standardowo"). Jesli chodzi nam tylko o to, zeby rnews rozumialo batche kompresowane przez gzip, to wystarczy zainstalowac na nowo tylko program rnews.
uucp/tcpip uucp/modem news <------------> cyber <----- - - - - -----> papaja serwer news'papaja' oznacza system, na ktorym chcemy odbierac newsy, a ktory laczy sie z systemem 'cyber' przez modem, uzywajac protokolow UUCP. cyber i news tez maja polaczenie UUCP, ale oparte o TCP/IP, gdyz oba znajduja sie w sieci lokalnej. Problem polega na takim ustawieniu systemow, by na serwerze news generowac batche dla komputera papaja, i aby docieraly one poprawnie na miejsce.
Jesli jest mozliwe laczenie sie komputera papaja z siecia za pomoca protokolow SLIP lub PPP, to problem mozna rozwiazac definiujac na serwerze news system papaja i kazac im laczyc sie bezposrednio, za pomoca UUCP/tcpip. Inne wyjscie to skorzystac z komputera cyber wylacznie jako "przekaznika" polaczen, tzn. zamiast 'login-shell-a' typu uucico wykonac "rlogin news" z odpowiednim username, ktorego shellem oczywiscie bedzie uucico, ale juz na docelowym systemie. Gorzej, gdy to cyber ma dzwonic przez telefon do systemu papaja.
Najbardziej "klasyczne" i uniwersalne rozwiazanie to taka generacja batchow na serwerze, by trafialy one na miejsce przeznaczenia calkowicie za pomoca protokolow UUCP. W tym celu nalezy zmienic komende 'uux', ktorej uzywa skrypt 'sendbatch', a najprosciej zrobic to, definiujac odpowiedni plik w katalogu /var/news/out.going.
W "normalnym" przypadku (i w tym tez) w pliku newsfeeds serwera
news znalezc sie powinna definicja 'feedu' papaja (jako feedu UUCP!), co
powoduje utworzenie w /var/news/out.going pliku o takiej samej nazwie,
uzywanego do zapamietywania, ktore artykuly trzeba do tego komputera
wyslac. Standardowa komenda wysylajaca newsy jest "uux - -gd -n
${SITE}!rnews
", gdzie '${SITE}
' zostaje zastapione
nazwa uucp hosta odbierajacego batch. W przypadku braku bezposredniego
polaczenia musi tu jeszcze wejsc host posredni, a wiec komenda powinna
wygladac tak:
uux - -r -gd -n ${INTERMEDIATE_SITE}!${SITE}!rnewsa wiec np. "
uux - -gd -n cyber!papaja!rnews
". Aby taka komende
zdefiniowac, wystarczy utworzyc plik o nazwie '/var/news/out.going/${SITE}.cmd',
a wiec np. /var/news/out.going/papaja.cmd, a w nim wpisac
odpowiednia komende 'uux' (podana wyzej). Tworzone w ten sposob batche
przeznaczone beda (ostatecznie) dla systemu papaja, ale ich transfer
nastapi na system cyber i dopiero stamtad trafia we wlasciwe miejsce.niestety, kolejnym problemem pojawiajacym sie po utworzeniu pliku ${SITE}.cmd jest to, ze sendbatch przestaje uwzgledniac opcje -c i -cg umozliwiajace kompresje batchow, traktujac zawartosc pliku ${SITE}.cmd doslownie, bez najmniejszych modyfikacji. Jezeli wysylane batche maja byc kompresowane, przedstawiona powyzej komende nalezy zosatapic inna:
(echo '#! cunbatch' ; exec /usr/bin/compress) | uux - - -r -n -gd ${INTERMEDIATE_SITE}!${SITE}!rnewsZamiast /usr/bin/compress mozna oczywiscie uzyc programu gzip, o ile tylko system docelowy potrafil bedzie takie batche rozpakowac.
Zaleznie od tego, jak w systemie uucp zdefiniowane sa dozwolone czasy
laczenia sie z innymi systemami, pozadane jest zwykle uzywanie w powyzszych
poleceniach 'uux
' opcji '-r
, sprawiajacej,
ze wykonanie uux
nie bedzie od razu wywolywac programu
uucico
, aby natychmiast polaczyc sie z drugim systemem.
Czesta bowiem sytuacja jest zdefiniowanie, ze system "domowy" moze laczyc
sie ze swoim sasiadem uucp o dowolnej porze, co oznacza, ze w dowolnym
momencie mozna stwierdzic, ze wystarczy pisania listow i czas wykonac
stosowne uucico
. Brak opcji -r
powodowalby
natychmiastowe uruchomienie uucico
po utworzeniu przez
sendbatch
pierwszej paczki artykulow, co moze byc
przydatne na serwerze news tworzacym batche dla systemu "domowego",
ale najprawdopodobniej nie jest pozadane na serwerze "domowym",
powodowaloby bowiem natychmiastowa probe dzwonienia.
Pamietac tez trzeba o okresowym generowaniu batchow za pomoca skryptu
"sendbatch
" (jak to zostalo juz wczesniej opisane, oraz
o tym, ze opcja '-m' ograniczajaca wielkosc znajdujacych sie w kolejce
batchow jest tutaj bezuzyteczna. Batche te sa tutaj bowiem kolejkowane
na komputer 'cyber', a nie 'papaja', a wiec sprawdzenie wielkosci kolejki
na papaje nic nie da.
Mozna tez uruchomic stale polaczenie miedzy serwerami - nntplink lub innfeed, tez stosowany w ukladzie drabinkowym.
Ale ten rozdzial napisze juz pewnie ktos inny w nastepnej wersji...
FAQ po angielsku dla administratorow serwerow news poza Polska
Kopirajt i disclajmer:
Powyzszy tekst moze byc w niezmienionej postaci i w calosci (wszystkie czesci FAQ), bez ograniczen kopiowany i drukowany *na wlasny uzytek*, przekazywany przez news, e-maila, umieszczany w sieci Internet na serwerach WWW, FTP itp. itd.), pod warunkiem przechowywania aktualnej wersji (nie starszej niz 2-3 miesiace). Publikowanie tego tekstu w inny sposob lub dokonywanie w nim modyfikacji, skrotow, oraz rozprowadzanie zmienionej wersji tego FAQ lub jego fragmentow wymaga zgody autorow.
Aktualna wersja znajduje sie zawsze pod adresem http://www.usenet.pl/doc/news-pl-faq.htpl i http://www.ict.pwr.wroc.pl/doc/news-pl-faq.html
Autorzy niniejszego FAQ staraja sie, by wszelkie przedstawione w nim informacje byly aktualne, ale gwarantowac tego nie sa w stanie. Jesli po przeczytaniu tego dalej nic nie rozumiesz, program tin czyta konfiguracje z jakiegos dziwnego pliku, albo twoj ulubiony serwer news wlasnie sie na ciebie obrazil -- sorry!, C'est la vie... Jesli blad jest w tekscie - napisz na adres tsurmacz@adm.usenet.pl - moze poprawie.