Newsy w Polsce (FAQ) - część 2. - serwery news

Poniższy tekst, to druga część FAQ na temat newsów w Polsce, zawierająca uwagi na temat konfigurowania serwerów news. Wszelkie poprawki i uzupełnienia proszę kierować na adres tsurmacz@ict.pwr.wroc.pl Aktualną wersję całego FAQ można znaleźć zawsze we Wrocławiu przez WWW: http://www.usenet.pl/doc/news-pl-faq.htpl oraz w grupach news pl.news.admin i pl.answers.

Spis treści części 2.:

Konfiguracja serwera news
Jak podłączyć serwer news do sieci usenet?
Jak skonfigurować serwer news (grupy pl.*)
Plik active
Plik newsfeeds
Uwagi dotyczące serwerów mających feedy zagraniczne
Plik moderators
Plik distrib.pats
Plik distributions
Plik newsgroups
Plik control.ctl
Co robić z listami typu "checkgroups"?
Jak skonfigurować mail2news i news2mail
mail2news z użyciem procmaila
Newsfeed za pomocą UUCP
Kompresja batchów za pomocą gzip
UUCP 'pośrednie' (czyli jak wykonać cyber!papaja!rnews)
Inne możliwości przyspieszania transmisji


Podłączanie nowych serwerów


Jeśli chcesz do sieci Usenet news podłączyć własny serwer, po pierwsze należy zastanowić się, czy skórka warta jest wyprawki. Mały serwer z kilkunastoma lub nawet kilkuset grupami może być niewart instalacji ze względu na czas spędzany następnie na jego konfigurowanie. Duży serwer natomiast wymaga wręcz ogromnego pasma danych, jeśli mają na nim byc założone wszystkie grupy. W styczniu 2003 wielkość ,,feedu'' obejmującego same grupy pl.* to około 20-40 MB/dziennie, wszystkie grupy hierarchii BIG8 - około 1-2 GB/dziennie, wszystkie grupy włączając w to alt.* - około 120-200 GB dziennie. I niestety z każdym rokiem te wielkości się mniej więcej podwajają.

Musisz też u siebie zainstalować serwer news, czyli program innd, działający w środowisku 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 są i nie będą podłączane do sieci Usenet i to bynajmniej nie z powodu niechęci reszty administratorów do tej firmy, lecz z powodu masy problemów, jakie ten "serwer" powoduje przez to, że nie bardzo przejmuje się standardami dotyczącymi systemu news. Jeśli nadal chcesz uruchomić u siebie serwer news, musisz uzgodnić to z administratorem innego serwera, który "da ci feed", czyli skonfiguruje swój serwer tak, by przesyłał do twojego wybrane grupy oraz akceptował artykuły wysyłane z twojego serwera. Informacje jak skonfigurować różne pliki serwera znajdziesz w następnym punkcie, natomiast przy uzyskiwaniu feedu od innego serwera musisz przekazać jego administratorowi kilka kluczowych informacji koniecznych do właściwego skonfigurowania łącza po drugiej stronie. Są to m.in:

W odpowiedzi powinieneś dostać list zawierający podobne dane dotyczące serwera, z którego będziesz otrzymywał i wysyłał artykuły. Najważniejsze z nich są: Przeładuj pliki konfiguracyjne odpowiednią komendą ctlinnd reload i przetestuj czy połączenie działa poprawnie (oraz poproś administratora drugiego serwera, by przetestował, czy może się połączyć z tobą).

Bardzo ważnym aspektem uruchomienia usługi serwera news są oprócz aspektów technicznych zasady, na jakich podłączane są nowe serwery. Najważniejsze z tych zasad wymienione są poniżej:


Konfigurowanie serwerów


Ogólna uwaga dotycząca wszystkich konfiguracji -- BARDZO WAŻNE!!!

Serwery news nie mogą pozwalać na pisanie do grup hierarchii pl.* każdemu bez jakiejkolwiek autoryzacji. Jeśli serwer ma być z założenia otwarty dla wszystkich, to musi zawierać system kont i uwierzytelniania. Celem systemu musi być uniknięcie sytuacji niekontrolowanego anonimowego dostępu do usenetu przez ten serwer, gdyż takie sytuacje prędzej czy później prowadzą do nadużyć odbijających się echem po całym usenecie.

Dotyczy to nie tylko samych serwerów news, ale i wszelkiego rodzaju bramek z innych usług, np. email, www, wap, itp.

Jak skonfigurować serwer news (w Polsce)

To zależy od samego serwera... i najlepiej wyjaśnione jest w odpowiednich README lub FAQ towarzyszących serwerowi. Poniżej jednak parę uwag specyficznych dla właściwego skonfigurowania serwera w Polsce. Z góry zastrzegam, że dotyczy to praktycznie wyłącznie serwera INN, gdyż tylko takie miałem okazję konfigurować i na tym się znam ;-)

Poza tym większość zainstalowanych serwerów (i w Polsce i na świecie) to właśnie INN. Instalacja pozostałych (takich jak DNEWS na przykład) wymaga zdecydowanie więcej samozaparcia, a efektem bardzo często jest serwer, którego i tak nie można podłączyć do sieci Usenet News z powodu wad w implementacji protokołu NNTP i spustoszenia. jakie to sieje w sieci (np. redystrybucja starych artykułów z nowymi Message-Id:) Przez $inn określał będę katalog, w którym znajduja się pliki serwera, a więc 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, które serwer otrzymuje. Jeśli uruchamiamy nowy serwer, najlepiej jest ściągnąć aktualną wersję takiego pliku z innego serwera news (który będzie nas w newsy zasilał) za pomocą protokołu nntp, lub z ftp.uu.net poprzez ftp. Pierwsze wyjście polega na wykonaniu '$inn/bin/getlist -h jakiś.serwer.news.pl active', drugie - użyciu 'anonymous ftp' ale uwaga... ftp.uu.net, mimo że od jakiegoś czasu posiada także grupy pl.*, to nie wszystkie niestety zostały tam poprawnie założone. Dlatego lepiej skorzystać z fragmentów pliku active, dotyczącego grup pl, a znajdującego się 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 wyzerować w nim numerki oznaczające numery artykułów prostą instrukcją:

        mv active active.old
        awk '{printf ("%s 0000000000 0000000001 %s\n", $1, $4)}' < active.old > active
nie zapominając o tym, że jeśli serwer news już działa, to MUSI zostać wczesniej zatrzymany np. przez '$inn/bin/ctlinnd pause xx', a ponowne uruchomienie powinno nastąpić przez:
        ctlinnd reload active ''
        ctlinnd go ''
Jeśli dopisać trzeba pojedyncze nowe grupy w już działajacym serwerze, należy do tego użyć 'ctlinnd newgroup pl.nazwa.grupy y', bez uprzedniego zatrzymywania serwera. Jeśli grupa jest moderowana, zamiast 'y' powinno oczywiście pojawić się 'm'.

Plik newsfeeds ($inn/newsfeeds lub $inn/site/newsfeeds)

Zależy od tego, kto zasila nas w newsy i komu newsy są dalej posyłane. Jest on naprawdę dobrze udokumentowany w INND FAQ oraz na stronie manuala, wystarczy więc może jedynie 2 małe przykłady...

'feed' dla komputera o adresie 'news.host.pl' dopisującego w polu 'Path:' nazwę 'news.host.somewhere.in.pl' powinien w najprostszym przypadku wyglądać tak:

        xxx/news.host.somewhere.in.pl\
                :*/!local:Wnm:
gdzie xxx jest dowolnym (w miarę krótkim, bo pojawia się wielokrotnie w logach) akronimem reprezentującym dany host, wystepującym również w pliku 'nntpsend.ctl':
        xxx:news.host.pl:::-T1720 -t300
gdzie nazwa 'xxx' zostaje związana z adresem internetowym 'news.host.pl'. Warto przy okazji zwrocić uwage na parametr -T1720 (lub podobny) zamiast 'standardowego' -T1800. Parametr -Tn oznacza, że jedna sesja nntpsend nie może trwać dłużej niż n sekund. W przypadku n=1800, oznaczałoby to dokładnie 30 minut. Standardowo nntpsend jest startowany z crontab-a co 10 minut, a wygląda to mniej więcej tak:
        0,10,20,30,40,50 * * * * /usr/lib/news/nntpsend
Gdy pojawia się sytuacja, że newsów jest na tyle dużo, że nntpsend jest w stanie pełne 30 minut wykorzystać, to kończenie tuż po tym, jak crontab wystartował nowego nntpsend, który się skończył, stwierdziwszy że poprzedni jeszcze działa, jest marnotrawieniem kolejnych 10 minut, czyli 25% przepustowości łącza. Dlatego czas dla -T powinien być wielokrotnością 10 minut, pomniejszoną o 1-2 minuty, by dać programowi nntpsend czas na 'posprzątanie' w momencie kończenia działania. Drugą sprawą pozwalającą przyspieszyć docieranie news z jednego końca Polski w drugi jest to, by na sąsiadujących serwerach news czasy wysyłania batchów były nieco poprzesuwane, np. jeśli 'mapka' serwerów wyglada tak:
        bilbo   <--->   okapi   <--->   sun1000
to jeśli, przykładowo, na bilbo nntpsend startuje o pełnej godzinie i dalej co 10 minut, to na okapi powinno to być np. 5 minut po pełnej godzinie i dalej co 10 minut (czyli 5,15,25,...), a na sun1000 znowu o pełnej godzinie. Natomiast jeśli jeszcze istnieje dodatkowe połączenie bilbo <---> sun1000, to jeszcze lepiej jest, gdy bilbo ma 0,10,..., okapi np. 3,13,23,33,... a sun1000 6,16,26,...

Drugi krótki i z życia wzięty przykład (wg mapki z pierwszej części FAQ). newsfeeds na okapi: uw dostaje wszystkie lokalne artykuły (tzn. takie, które nie były w Warszawie ani w USA) oraz comp.security* które nadchodzą 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 'wejście lejka' o wspólnym ujściu nazwanym 'cocos', przy czym 'cocos' nie ma tutaj NIC wspólnego z nazwą komputera, na który zostanie to wysłane. Pierwsza linijka odnosi się do wszystkich artykułów, które nie nadeszły z Warszawy ani z USA (przez serwer plonk.apk.net), druga - do wszystkich artykułów z grup 'security', które nie nadeszły z Warszawy. WPisanie kilku nazw (pochodzących z Path: tych serwerów) zapobiega przesyłaniu artykułów pomiędzy nimi. Ostatnia linia to 'ujście lejka' prowadzące do pliku 'cocos' w katalogu /var/news/out.going (lub odpowiednio innym), gdzie zapisywane są odsyłacze do artykułów, wykorzystywane co 10 minut przez innxmit. Symboliczna nazwa 'cocos' jest tłumaczona na rzeczywisty adres komputera (którym jest 'news.uw.edu.pl') w pliku 'nntpsend.ctl':
        cocos:news.uw.edu.pl::-T1720 -t300

Uwagi dotyczące serwerów mających feedy zagraniczne

Newsy do Polski spływają kilkoma drogami i poprzez sieci różnych operatorów (TPSA, NASK, POL-34), nie grozi nam więc sytuacja, że wskutek awarii pojedynczego serwera news (np. chwilowego zapchania dysku na którymś z serwerów news) zostaniemy całkiem odcięci od dopływu nowych newsów ze świata lub zaczniemy otrzymywać je ze znacznym opóźnieniem. Z drugiej strony jednak bez odpowiedniej konfiguracji może to prowadzić do niepożądanego "tranzytu" newsów np. z USA do USA przez kilka serwerów w Polsce.

Można tego uniknąć odpowiednio definiując reguły wykluczania w pliku newsfeeds (po znaku "/" w nazwie feedu). Do tego potrzebna jest jednak znajomość wszystkich połączeń Polski ze światem i tego, co zagraniczne serwery news wpisują w polu Path:

news.uoregon.edu,hammer.uoregon.edu,arclight.uoregon.edu,fu-berlin.de
news.nacamar.de,newsfeed.nacamar.de,news.apfel.de,news.maxwell.syr.edu
Serwery w USA i Niemczech, wymieniające BIG 8, pl.* i inne grupy z serwerem w ICM.

news.apk.net (aka plonk.apk.net, ale to pierwsze wystarczy)
Serwer w USA (Cleveland, Ohio), wymieniające BIG 8 i pl.* z serwerem news.uw.edu.pl, a także comp, news i pl z serwerem news.ict.pwr.wroc.pl (gzipowane batche UUCP).

newscore.univie.ac.at
Serwery w Austrii, znane poprzednio (przed 12.01.1998) jako 01-newsfeed.univie.ac.at i 02-newsfeed.univie.ac.at, a jeszcze wcześniej jako newsfeed.ACO.net, wymieniające BIG 8, de.*, pl.* i inne grupy z serwerem NASK

newsfeed.sunet.se
Serwer w Szwecji wymieniający BIG 8, de.*, pl.* i inne grupy z serwerem UW. Wcześniej znany jako sunic

news.icmp.lviv.ua
Serwer na Ukrainie. Połączenie przez NASK. Sam także otrzymuje newsy innymi drogami (z USA i Europy), dlatego dobrze jest także umieścić go na liście.

news.cistron.nl
Serwer w Holandii, wymieniający wyłącznie grupy linux.* z serwerem news.uw.edu.pl.

news.miracle.net
nntp.uio.no
Serwery news w USA (Connecticut) i Norwegii (Oslo), wymieniające z serwerem news.ict.pwr.wroc.pl niewielkie feedy zawierające hierarchie pl.* i linux.*.

Powyższa lista nie jest pełna, jako że po raz pierwszy powstała w roku 1995, a feedy potrafią się zmieniać i co 2-3 tygodnie. W miarę aktualna, pełna lista "excludes" powinna wyglądać następująco:
jakiś-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\
	: ......

Plik moderators

Standardowy plik przychodzący z dystrybucją INND, uzupełniony na początku o linię: nowość!
                pl.*:%s@usenet.pl
co powoduje wysyłanie artykułów w moderowanych grupach pl.* na adres typu nazwa-grupy-z-kropkami-zamienionymi-na-kreski@usenet.pl. Linia taka znajduje się już w standardowej (tzn. rozprowadzanej wraz ze źródłami serwera) dystrybucji INND począwszy od wersji 1.5.

usenet.pl jest adresem klasy MX wskazującym na hosty utrzymujące pełną listę wszystkich 'moderatorów' grup pl (obecnie są to galaxy.uci.agh.edu.pl i okapi.ict.pwr.wroc.pl). Domena ta powstała na początku sierpnia 1995, zastępując stosowaną uprzednio domenę moderators.fuw.edu.pl.

Plik distrib.pats

Plik ten należy uzupełnić o lokalne dystrybucje, tam gdzie one występują, np.:
        10:pwr.*:pwr                 - We Wrocławiu
        10:umk.*:umk                 - W Toruniu
a także ew. niektóre grupy, które mają inną dystrybucję, niż wynika to z ich nazwy, np. we Wrocławiu:
        30:pl.listserv.email-d:pwr
gdyż pl.listserv.email-d jest lokalną grupą wrocławską mimo nazwy 'pl.' i artykuły posłane do tej grupy otrzymują standardowo dystrybucję 'pwr'. Specjalne definiowanie domyślnej dystrybucji pl dla grup pl.* jest błędem, gdyż powinno to być 'world' (a w ogóle, to najlepiej zamiast 'world' pozostawić wtedy "pustą" dystrybucję, oznaczającą cały świat) - a dystrybucja pl ma rzeczywiście oznaczać rozsyłanie artykułów wyłącznie do serwerów w Polsce.

Plik distributions

Zawiera opisy poszczególnych dystrybucji. To, co dla Polski najważniejsze, poniżej:
        pl        Polska
        pl-news   Polska, wyłącznie news, bez list dyskusyjnych
        krakow    Kraków
        cyfronet  Kraków
        torun     Toruń
        warszawa  Warszawa
        umk       UMK w Toruniu
        pwr       Politechnika Wrocławska
        wroc      Wrocław
        world     Cały świat
        inet      Internet
        mimuw     Wydz. Matematyki Informatyki i Mech. Uniw. Warszawskiego
        local     lokalny serwer news

Plik newsgroups

Plik z jednolinijkowymi opisami poszczególnych grup. Opis grup pl.* wysyłany jest regularnie w trzeciej części tego FAQ w grupach pl.news.admin i pl.answers, a regularnie raz na dwa miesiące także w postaci tzw. "checkgroups message". Dostępny jest także poprzez WWW pod adresem: http://www.usenet.pl/doc/pl.newsgroups. Lista grup, wraz z aktualnym plikiem active, dostępna jest w 3. części tego FAQ.

Plików tego można użyć do sprawdzenia, czy lista grup na serwerze jest aktualna w następujący sposób:

    lynx -source http://www.usenet.pl/doc/pl.newsgroups | \
    $inn/control/checkgroups
lub:
    lynx -source http://www.usenet.pl/doc/news-pl-faq.3 | \
    sed -e '1,/^=== /d' -e '/^--- /d' | \
    $inn/control/checkgroups

Plik control.ctl

Plik ułatwiający 'centralne' i zautomatyzowane tworzenie nowych grup. Polega ono na tym, że w pewnej hierarchii news (np. w grupach pl.*) pewna osoba zostaje uznana za autorytatywną, jeśli chodzi o tworzenie nowych grup i kasowanie starych, czego dokonuje przez wysłanie odpwiednio sformatowanych artykułów news, zawierających pewne magiczne zaklęcia. Aby zaklęcia te były zrozumiałe dla serwerów news, w ich pliku control.ctl muszą się oczywiście pojawić odpowiednie linie konfiguracji. Obecnie, aby zabezpieczyć się przed "podróbkami" listów, w wielu hierarchiach news stosowana jest metoda podpisywania tych specjalnych artykułów kluczem PGP. Tak jest w hierarchii "BIG 8" (comp, news, rec, talk, itd.), jak i w niektórych hierarchiach narodowych (de, fr, uk), a od października 1996, także w hierarchii pl.

Aby był sprawdzany podpis PGP, potrzebne jest oczywiście odpowiednie oprogramowanie na serwerze - sam program pgp oraz skrypty 'pgpverify' i poprawiony 'parsecontrol' serwera news. Znajdują się one w dytrybucji INN począwszy od wersji 1.5, a dla poprzednich wersji (a także serwerów CNEWS) można ściągnąć z sieci odpowiednie poprawki. Więcej informacji na ten temat można przeczytać pod adresem ftp://ftp.pwr.wroc.pl/pub/networking/news/misc/pgpcontrol/ (mirror strony z ftp.uu.net). Tam można także znaleźć klucz PGP używany w hierarchii pl.

Jeśli jednak na serwerze nie jest dokonywana weryfikacja PGP, musi wówczas wystarczyć metoda "tradycyjna", jako że artykuły specjalne podpisane przez PGP są też poprawnie rozpoznawane, gdy PGP nie ma na serwerze (ale oczywiście nie da się wtedy zweryfikować ich autentyczności).

Trzeba pamiętać, że OSTATNI pasujący opis zostaje użyty, tak więc w okolicach końca pliku należy dopisać 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=rmgroup
Jeżeli natomiast serwer został skonfigurowany do weryfikacji artykułów specjalnych przez PGP, to zamiast powyższych linii należy wpisać linie następujące:

    ##  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.newgroups
UWAGA! - W obu przypadkach między '*' a 'fuw' nie ma kropki!

Poza tym dobrze jest przy okazji sprawdzić sposób reakcji serwera na 'sendsys'. Poniżej znajduje się 'preferowany' sposób dla standardowych zapytań - automatyczna odpowiedź, jeśli podany został argument (czyli jeśli np. komputer okapi otrzyma 'cmsg sendsys icm' - to odeśle fragment pliku newsfeeds dotyczący icm), oraz brak odpowiedzi, jeśli argumentu nie ma (by uniknąć potencjalnych bomb-maili)

        ##  SENDSYS
        sendsys:*@uunet.uu.net:*:doit=miscctl
        sendsys:*:*:doifarg
Na serwerach w Polsce dobrze jest także dopisać następujące linie:
        sendsys:*@adm.usenet.pl:*:doit=miscctl
        version:*@adm.usenet.pl:*:doit=miscctl
spowodują one wysłanie pliku newsfeeds lub listu zawierającego w treści numer wersji serwera, jeżeli odpowiednio sformatowany artykuł specjalny nadejdzie z adresu znajdującego się w domenie adm.usenet.pl. Pozwala to na uaktualnianie informacji o serwerach news w Polsce i ich wzajemnych połączeniach (np. w celu uaktualnienia mapki zamieszczonej w części pierwszej tego FAQ), bez konieczności ciągłego zawracania głowy poszczególnym administratorom serwerów news (bo serwer sam wysyła odpowiedź, a administratora jedynie informuje w krótkim liście, że odpowiedź została wysłana).

Co robić z listami typu "checkgroups"?

Od czasu do czasu wysyłany jest tzw. "checkgroups message" dla grup pl.*, tzn. specjalny artykuł naws zawierający listę wszystkich aktywnych grup. Artykuł taki wyróżniony jest odpowiednią linią "Control:", dzięki czemu każdy serwer news, który taki artykuł otrzyma, zależnie od konfiguracji - przesyła go swojemu administratorowi pocztą elektroniczną, lub automatycznie go wykonuje i jeśli wykryje jakieś rozbieżności pomiędzy przesłaną listą grup, a lokalnie istniejącymi grupami w tej hierarchii, to informuje o tym administratora. W pierwszym z tych dwóch przypadków, w liście tym serwer dołącza na początku komentarz mówiący w jaki sposób należy z tym artykułem postąpić. Jest to zwykle polecenie postaci $inn/control/docheckgroups < PLIK.

Nie należy się obawiać, że uruchomienie docheckgroups cokolwiek zmieni lub coś "zepsuje". Program ten porównuje jedynie listę grup w dostarczonym mu na wejściu pliku z listą grup znajdującą się w plikach active i newsgroups. W przypadku niezgodności informacje o tym drukowane są na standardowym wyjściu w formacie skryptu sh. Tak więc można program docheckgroups uruchomić raz dla sprawdzenia, czy wszystko jest ok, a następnie w przypadku wykrycia niezgodności i zaakceptowania zmian wykonać program ponownie, jego wynik skierowując do programu sh (albo do pliku, a następnie do sh):

        $inn/control/docheckgroups < PLIK | sh -
Artykuł "checkgroups" wysyłany jest 2 miesiące (1 dnia miesiąca w miesiące nieparzyste) z adresu newgroup@usenet.pl. Jeśli artykuł taki potrzebny jest "od zaraz" (np. przy konfigurowaniu nowego serwera news), można sobie poradzić inaczej:

Oprócz tego, co jakiś czas (ale niezbyt często) wysyłane są na nowo specjalne artykuły "tworzące" grupy, które już dawno istnieją. Np. pl.test, pl.news.admin i inne. Jeśli 'zakładana' grupa już istnieje na serwerze, to serwer ignoruje taki artykuł specjalny, jeśli nie istnieje - tworzy grupę. Nie wymaga to żadnej dodatkowej konfiguracji ponad tę, opisaną przy okazji opisu zawartości pliku "control.ctl".


Jak skonfigurować mail2news i news2mail

mail2news i news2mail to dwa programy odpowiedzialne za spinanie ze sobą (jak sama nazwa wskazuje) newsów i maila, tzn. list dyskusyjnych. Wydawać by się mogło, że w zasadzie są one niepotrzebne, no bo cóż... - wystarczyłoby pewnie z jednej strony skonfigurować serwer news tak, by artykuły przychodzące do pewnej grupy były przekazywane bezpośrednio jednemu z programów typu mail, mailx, mh lub sendmail, w drugą stronę natomiast - utworzyć odpowiedni "alias" pocztowy typu np.
        "|/usr/lib/news/sendnews"
gdzie sendnews jest prostym skryptem dopisującym na początku nazwę grupy i posyłającym dalej całość do programu 'inews', który przekaże artykuł serwerowi.

Tak prosto jednak nie da się tego zrobić. Problem polega na tym, ze każdy artykuł wysłany na listę dyskusyjną trafiłby do news, po czym z news zostałby odesłany ponownie na listę dyskusyjną, tak więc na liście każdy artykuł pojawiałby się dwukrotnie. Jeśli na dodatek listserwer nie przekazuje (tzn. gubi) 'Message-ID', może się okazać, że artykuł ponownie wraca do news, skąd dalej zostaje zakolejkowany do listserwera i zaczyna się robić (nie)wesoło... Jeśli 'Message-ID' jest przez listserwer przekazywany jak należy, sytuacja taka nie będzie miala miejsca, gdyż artykuł posłany ponownie do news (z tym samym Message-ID) zostanie przez serwer news odrzucony jako duplikat (i zwykle wygeneruje list do Postmastera), może to jednak powodować zamieszanie na liście dyskusyjnej.

Ważne jest więc po pierwsze zagwarantowanie, by artykuł trafiający z listserwera do news nie zostawał wysłany z powrotem na listę, a także by listserwer nie gubił ani nie modyfikował Message-ID:, a także by generować Message-ID: w momencie przekazywania listu z e-maila do news, jeśli list go nie zawiera. W miarę możliwości należy także ustawić na listserwerze opcje 'NOACK', oznaczającą że listy wysłane z adresu serwera news nie są do niego ponownie odsyłane.

Do tego właśnie służą oba wspomniane programy. mail2news dokonuje przefiltrowania nagłówka maila, usuwając niepotrzebne lub niezgodne z RFC822 pola (np. 'Received:' jest w newsach w ogóle bez znaczenia). Jeżeli list nie posiada 'Message-ID:', to jest on generowany, ponadto tworzone jest pole 'Path:' z wpisanym odpowiednim tekstem, np. 'Path: gateway', dzięki czemu w serwerze news możliwe jest wysyłanie na listę dyskusyjną wyłącznie artykułów, które serwer news otrzymał od innych serwerow, a nie od mail2news (a więc nie majacych 'gateway' w polu 'Path:'). Opcjonalnie, mail2news potrafi także odfiltrować często posyłane na adres listy (zamiast listserwera) artykuły typu 'unsub nazwa-listy'.

W drugą stronę - news2mail usuwa z nagłówka pola nieistniejące w e-mailu (typu 'Path:', 'Supersedes:', itd.), ignoruje wszystkie listy typu 'control', tzn. np. kasujące poprzedni artykuł, martwi się o właściwe 'From:' i 'Sender:', by była możliwa odpowiedź do autora, a nie tylko na listę, oraz parę innych rzeczy. No i to co najważniejsze - przy właściwej konfiguracji każdy artykuł pojawia się dokładnie raz na liście i raz w newsach.

Pakiet mail2news nie jest na razie dostępny na żadnym anonymous ftp (podobno miał zostać włączony do INN v1.5, ale tak się nie stało), jest bowiem na razie w wersji 'beta' (choć trwa to już od końca 1993 roku), należy się więc skontaktować z autorem (Rich Salz - rsalz@uunet.uu.net), by otrzymać jego kopię. Dobrze jest także skontaktować się ze mną (pod adresem tsurmacz@ict.pwr.wroc.pl), aby uzyskać poprawki do tego programu, zapewniające właściwe traktowanie nagłówków "Content-Type:" i innych, które występują w listach/artykułach zawierających polskie znaki diakrytyczne. Istnieje także (na razie w fazie zaawansowanych testów) wersja w PERLu napisana przez Piotra Piątkowskiego, która dodatkowo potrafi dokonywać przekodowania z Quoted Printable na 8bit artykułów wysyłanych do newsów z poczty i odwrotnie w drugą stronę. W dalszej części opisany jest pakiet mail2news Richa Salza.

Przed kompilacją należy sprawdzić kilka parametrów - jakiego typu program używany jest do wysyłania poczty (sendmail czy mh), co dopisywane ma być w polu 'Path:' (standardowe 'gateway' czy np. 'gateway.pwr.wroc.pl'), czy adresy 'From:' news2mail ma generować z 'Path:', czy bezpośrednio z 'From:' w artykule (w czasach, gdy stosowanie adresów uucp staje się przeszłością, należy używać tego drugiego), oraz gdzie znajduje się serwer news (a jeśli na tej samej maszynie - gdzie sa jego biblioteki - a dokładniej: program inews lub rnews). Rożnica pomiędzy inews a rnews może okazać się istotna, bowiem inews jest tak naprawdę programem przewidzianym do "interaktywnego" przyjmowania newsów od użytkownikow, kontroluje więc m.in. format daty, a czasem także np. czy ilość cytowanego tekstu nie jest większa od nowego tekstu (jeśli tak zostal skompilowany). inews informuje także o błędach na stdout lub stderr, co w przypadku mail2news kończy się przekazaniem błędu dalej, czyli do sendmaila i co za tym idzie, zwrócenie listu do nadawcy (Sender:), czyli zwykle właściciela listy oraz lokalnego postmastera.

W 80% list dyskusyjnych wszystko dziala jednak jak należy, a wówczas inews jest o tyle lepszy, że poprzez zwracanie błędów w sposób natychmiastowy zwraca uwagę administratora news na to, że cos jest nie tak. Natomiast błędy występujace przy dostarczaniu artykułów za pomocą rnews sa zwykle przez ten program po cichu ignorowane, a odbicie znajdują jedynie w logach z pracy serwera. Istotne jest jednak to, że mail2news umożliwia podanie 'agenta news' jako parametr przy uruchomieniu, tak więc bez konieczności rekompilacji, można w dowolnym momencie inews zmienić na rnews lub odwrotnie.

Po skompilowaniu mail2news pozostaje juz właściwie tylko skonfigurować serwer news i listserwer, by przesyłały sobie nawzajem artykuły. Najpierw o tym, jak to zrobić z mail2news, bo z tym jest zwykle więcej problemów...

Rozpatrzmy taki przykład - tworzymy grupę "pl.nowa.grupa", którą łączymy z listą "nowa-lista" obsługiwaną przez listserv@plearn.edu.pl. Serwerem news, na którym tego dokonujemy jest "serwer.news.pl". Musimy serwer news 'zapisać na tę listę', tzn. np. stworzyć w /etc/aliases serwera (lub innego koputera w pobliżu) alias:

        pl-nowa-grupa: "|/usr/local/news/bin/mail2news -npl.nowa.grupa -dlocal"
Teraz wypadałoby grupę 'pl.nowa.grupa' utworzyć za pomocą 'ctlinnd newgroup pl.nowa.grupa y' (lub zgodnie ze składnią serwera news -- powyższy przykład jest dla serwera INN) i przetestować, czy poczta wysyłana na adres pl-nowa-grupa@serwer.news.pl trafia do newsow. Po pierwsze - wysyłając email-a na ten adres, a jeśli cos nie działa - testując ręcznie:
        % cat > test.posting
        From: użytkownik@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 nagrać jakis list wysłany samemu sobie do pliku i probować go przekazać do mail2news).

Jesli w tym momencie chcemy przetestowac, jak z dostarczaniem newsów poradzi sobie rnews zamias inews, wystarczy wpisac:

        % cat test.posting | \
        /usr/local/news/bin/mail2news -=/usr/local/news/bin/rnews -npl.nowa.grupa -dlocal test
słowo 'test' (lub dowolne inne) na końcu jest konieczne z tego względu, że mail2news przekazuje 'agentowi news' parametr '-h' oraz wszystkie inne, których sam nie interpretuje (czyli '-h test') - inews wymaga '-h' bez parametrów, dla rnews po '-h' musi wystąpić nazwa 'hosta' która zostanie zapisana w logach serwera. Pamiętać należy też o tym, że o ile mail2news wykorzystujący inews może być uruchomiony "niedaleko" serwera, to rnews da się uruchomić wyłącznie na serwerze, albo na komputerze, który z serwerem news ma połączenie via UUCP. Jeśli wszystko działa tak jak trzeba, pozostaje zapisać serwer news jako subskrybenta listy dyskusyjnej: albo poprosić właściciela listy by dopisał do niej adres pl-nowa-grupa@serwer.news.pl, albo zrobić to samemu, posyłając e-mail z adresu pl-nowa-grupa do listserwera. Jak posłać maila z takiego adresu? O tym chyba wszyscy wiedzą, ale jakby nie, to jako root (albo jeden z 'trusted users' sendmaila - np. 'news') należy wykonać:
        # 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"
        ^D
W ciągu kilku lub kilkudziesięciu minut powinien się w newsach pojawić pierwszy artykuł - z odpowiedzią serwera i informacją "You have now subscribed to list nowa-lista" itd. Jeśli tak, to wszystko na najlepszej drodze. Aby poustawiać wszystkie opcje dystrybucji jak należy, poślij listserwerowi (ponownie z adresu pl-nowa-grupa@serwer.news.pl) list o treści:
        set nowa-lista full
        set nowa-lista noack
Pierwsza linia oznacza, że listserwer ma posyłać pełne nagłówki (a więc włącznie z Message-ID), druga - że artykuły przesłane z serwera news nie będą do niego ponownie wysyłane. Opcje powyższe działają poprawnie w przypadku listserwerów bitnetowych oraz 'listproc-a', inne listserwery mogą wymagać nieco innych komend, na przykład 'set nowa-lista norepro' itp.

Jeśli wszystko działa jak należy, pora na wysyłanie newsów na listę. W pliku newsfeeds należy dopisać linię mniej więcej następującej treści:

    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 zmieścić się w jednej, ale dla czytelności podzieliłem ja na dwie - TS). Argumenty podane dla news2mail oznaczają że:

Poza tym 'From:' zawsze zawiera adres z pola 'From:' w artykule news (chyba że w trakcie kompilacji wybrano opcje generowania 'From:' na podstawie 'Path:')

'Sender:' - powinien być adresem, jakiego użyliśmy zapisując mail2news na listę, większość z list bowiem nie akceptuje listów wysyłanych przez osoby nie będące subskrybentami listy. Aby więc listy wysłane w newsach trafiały w sposób pewny na listę, użytkownik występujący w polu 'Sender' lub 'From' musi być na listę zapisany - co łatwo osiągnąć definiując właściwie pole 'Sender'. Ponadto, aby 'Sender:' wpisane przez news2mail było respektowane przez sendmail-a (lub innego agenta :-) pocztowego), trzeba jeszcze upewnić się, że użytkownik 'news' (z tym id działa serwer news, a więc i news2mail przez niego uruchamiany) jest wpisany w sendmail.cf jako 'trusted user', (opcja 'Trusted' jest bez znaczenia w sendmail 8.6.x, ale począwszy od wersji 8.7.1 ponownie jest respektowana), np:

        DT root uucp news
Najlepiej oczywiście na początek zamiast adresów listserwera wpisać własny i przetestować, czy artykuł wysłany w news trafia do e-maila jak należy. Po wykonaniu 'ctlinnd reload newsfeeds' i wysłaniu artykułu do news, albo od razu powinien on zostać dostarczony email-em, albo zakolejkowany. Wówczas '/usr/lib/sendmail -q' przyspieszy jego dostarczenie. No a gdy już okaże się, że artykuł dotarł i wyglądał mniej więcej 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 - wysłany przez tin-a uruchomionego na komputerze
    'sprocket', połączonego 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. miał właściwy adres From: oraz Sender:), to możemy zmienić własny adres na adres listserwera, jeszcze raz wykonać 'ctlinnd reload newsfeeds' i mieć nadzieję, że wszystko działa jak trzeba. Gdy już grupa zostanie także utworzona na innych serwerach news, wystarczy tylko przestawić dystrybucję w aliasie:
        pl-nowa-grupa: /usr/local/news/bin/mail2news -npl.nowa.grupa -dlocal
na:
        pl-nowa-grupa: /usr/local/news/bin/mail2news -npl.nowa.grupa -dworld
(lub w ogóle zlikwidować '-d' zakładając, że serwer nie dopisze żadnej, a więc będzie szło w świat, ale lepiej to wówczas sprawdzić). To wszystko...

Ostatnia uwaga, dotycząca uruchamiania różnych bramek -- powyższy opis ma za zadanie pomóc w konfiguracji bramek uruchamianych dla własnych lokalnych potrzeb, niedostępnych z zewnątrz i dla "wszystkich". Pojawiające się ostatnio (2001-2003) jak grzyby po deszczu bramki wrzucane do różnorakich serwisów www i nie wymagające żadnej autoryzacji dostępu (przez co szybko stają się źródłem spamów, trolli i innych abuserów), będą tępione z całą surowością.


mail2news z użyciem procmaila

Problemem pojawiającym się po skonfigurowaniu mail2news w sposób opisany w powyższym punkcie jest to, że wszelkiego rodzaju błędy w dostarczaniu poczty trafiającej z newsów na listę dyskusyjną są przesyłane z powrotem do bramki mail2news, a więc trafiają do grup news. Aby tego uniknąć warto skorzystać z programu procmail i odfiltrować takie listy wyrzucając je do /dev/null lub zapisując do odpowiedniego pliku, ale nie wysyłając do news.

Jeśli na serwerze news zainstalowanych jest kilka bramek mail2news, można je wszystkie obsługiwać za pomocą jednego pliku z regułkami procmaila, separując odpowiednie listy na grupy news po nagłówkach To: lub innych, można też dla każdej grupy stworzyć osobny alias z osobnym plikiem .rc, zakładając, że plik ten obsługuje wyłącznie jedną listę dyskusyjną, połączoną z jedną bramką mail2news. Jako że różnica polega jedynie na wpisaniu odpowiednich regułek, w dalszej części opisu nie ma znaczenia, który z tych sposobów został wybrany.

Wszystkie pliki .rc bramek najlepiej umieścić w jednym katalogu, np. ~news/mail2news. Program procmail, wywoływany pośrednio przez plik /etc/aliases uruchamiany będzie z opcją -m, oznaczającą, że ma działać jako filtr poczty, czytając konfigurację z jawnie podanego pliku konfiguracyjnego z regułami filtrowania poczty. W tym trybie procmail zachowuje się jednak różnie, zależnie od tego, w jakim katalogu znajduje się ten plik. Jeśli jest to plik, którego pełna ścieżka rozpoczyna się od /etc/procmailrcs/ i nie zawiera w nazwie odwołań pośrednich w górę (czyli do katalogów `..'), to poczta będzie dostarczana z prawami użytkownika, który jest właścicielem tego pliku. Dopuszczalne są dowiązania symboliczne, ale nie zawierające w ścieżce katalogów `..'. Jeżeli te warunki nie są spełnione, albo program procmail nie ma ustawionego bitu suid, poczta będzie dostarczana w standardowy sposób, tzn. z takimi prawami użytkownika, jakie zostaną ustawione przez agenta pocztowego wywołującego procmail (czyli zwykle program sendmail), będzie to więc zazwyczaj użytkownik daemon i grupa mail (tak naprawdę zależy to jednak od tego, co jest wpisane w konfiguracji sendmail.cf).

Właściwe prawa dostępu do katalogu, zawierającego pliki z regułami filtrowania poczty, do samych plików z tymi regułami oraz wszystkich innych plików, potrzebnych procmailowi do zapisywania logów itp., są kluczowe dla prawidłowego działania całości. Jeśli występują jakiekolwiek błędy, najprawdopodobniej są one spowodowane właśnie tym, że procmail wykonywany jesy jako inny użytkownik i nie ma prawa odczytu konfiguracji lub zapisu logów.

Najlepiej, aby procmail wykonywany był jako użytkownik news, dlatego z katalogu /etc/procmailrcs dobrze jest utworzyć dowiązanie symboliczne do odpowiedniego katalogu posiadanego przez użytkownika news lub tworzyć pliki konfiguracyjne jako użytkownik newss bezpośrednio w podkatalogu /etc/procmailrcs.

Należy więc wykonać jedną z dwóch 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 mail2news
W katalogu tym tworzymy plik xxx.rc, mający za zadanie obsługiwać bramkę grupy pl.xxx. Plik ten powinien być posiadany przez użytkownika 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 xxx
Plik ten ma za zadanie odfiltrowywać całą pocztę pochodzącą od użytkownika MAILER-DAEMON do pliku warning, a pozostałą pocztę przekazywać do programu mail2news, wywoływanego z odpowiednimi parametrami (zostały one omówione w poprzednim punkcie). Informacja o każdym liście zostaje zapisana w pliku from. Taka konfiguracja przydatna jest do testowania działania bramki. Po sprawdzeniu działania lepiej jest skierować listy od demona do /dev/null, wpisując taką właśnie nazwę zamiast `warning', podobnie można także postąpić z logiem z pracy procmaila, czyli plikiem from. Alternatywne wyjście, to uruchomienie wykonywanego raz dziennie lub raz na tydzień z cron-a skryptu, który będzie kasował zawartość tych plików, jako że pozostawione całkiem bez nadzoru rosłyby ciągle, zajmując coraz więcej miejsca na dysku.

Ostatnią rzeczą do zrobienia jest wpisanie lub modyfikacja odpowiedniego aliasu w pliku /etc/aliases, a powinien on wyglądać następująco:

	news.xxx: "|/usr/local/bin/procmail -m /etc/procmailrcs/mail2news/xxx.rc"

Newsfeed przez uucp

0. Dlaczego?

Internetowy protokół transferu news NNTP, oprócz wielu zalet, ma też wady.

Przesłanie jednego artykułu odbywa się w następujacy sposób:

   Nadawca: mam artykuł 
   Obiorca: sprawdza, odpowiada: nie mam, dawaj go.
   N: nadaje, czeka.
   O: potwierdza odbiór.
   N: mam artykuł 
   ...
Taki synchroniczny sposób przesyłania artykułów po jednym oznacza, że szybkość transferu news może być znacznie mniejsza od pasma linii łączącej nadawcę z odbiorcą, zwłaszcza jeśli komputery połączone są linią satelitarną lub jeśli komputer-odbiorca jest na tyle wolny, że dużo czasu zajmuje mu sprawdzenie, czy dany artykuł już ma. W bardzo poważny sposób można to poprawić stosując tzw. "streaming nntp", co oznacza, że nadawca pcha strumień newsów nie czekając na natychmiastowe potwierdzenia, lecz uzyskując je nieco później. Do tego trzeba jednak nowszej wersji INND (innd1.4unoff2 już to ma).

Opóźnienie wprowadzane przez linię satelitarną wynosi ok. 800ms, co oznacza, ze nawet najszybsza linia i najszybszy komputer nie są w stanie przesłać po takiej linii więcej niz ok. 100000 artykułów na dobę, przy obecnej 'dawce' rzedu 70000. W praktyce jest jeszcze gorzej, bo pozostałe etapy też trwają.

Drugą wadą jest też brak jakiejkolwiek kompresji przesyłanych danych, a doświadczenie wykazuje, że na zawartości artykułów newsowych można osiagnąć współczynnik kompresji do ok. 50% pierwotnej wielkości. Ta wada jest z kolei bardzo istotna w przypadku łącz o małej przepustowości.

Obu tych wad nie posiada sposób przesyłania za pomocą tzw. 'compressed batches over uucp'. Przesyła się w paczkach - a więc nie trzeba czekać na potwierdzenie każdego artykułu. Kompresuje się - a więc danych do przesłania jest mniej.

Oczywiście, ten sposób też ma wady:

Wady te są jednak w wielu przypadkach z nawiązką rekompensowane zaletami.

I. Konfiguracja uucp

Standardowe UUCP

Poniżej opisana jest konfiguracja standardowego UUCP w SunOS 4.1.x, na innych powinno być podobnie. Konfiguracja z użyciem Taylor UUCP w następnym punkcie

Zakładamy, że łączymy ze sobą komputery alfa.aaa.aaa (site name AAA.aaa) i omega.zzz.zzz (site name ZZZ.zzz). Dalsze instrukcje dotyczą alfy, na omedze wszystko tak samo, tylko odwrotnie.

1. Założyć nowego użytkownika przez dopisanie do /etc/passwd
        Uomega:ZZZZZZ:4:8::/var/spool/uucppublic:/usr/lib/uucp/uucico
gdzie ZZZZZZ jest oczywiście zakodowanym hasłem. Numer użytkownika i grupy powinien być taki jak dla użytkownika nuucp. 'Home directory' - w zasadzie dowolny, np. /var/spool/uucp, itp. Ważne by nie był to katalog z prawem zapisu dla 'wszystkich' (czyli 777 lub 1777).

2. Włączyć uucpd
Dopisać w /etc/inetd.conf linię:
        uucp    stream  tcp     nowait  uucp    /usr/etc/in.uucpd in.uucpd
lub jeśli stosowany jest pakiet tcp_wrappers:
        uucp    stream  tcp     nowait  uucp    /usr/etc/tcpd in.uucpd
i posłać do inetd sygnał HUP.

W tym drugim przypadku warto też pamiętać o dopisanu komputera omega.zzz.zzz do listy tych, którym wolno łączyć się z demomem "in.uucpd"

3. Pliki konfiguracyjne uucp.

Do /etc/Systems dopisać:
        omega Any TCP - omega.zzz.zzz in:--in: Ualfa word: AAAAAA
gdzie AAAAAA jest niezakodowanym hasłem użytkownika Ualfa na komputerze omega. W Solarisie 2.x plikiem tym jest /etc/uucp/Systems, natomiast w przypadku używanego często 'Taylor uucp' jest to oczywiście 'sys'. (Podobnie z następnymi plikami). Przy okazji Taylor UUCP, warto wspomnieć, że w pliku sys zamiast hasła można wpisać '\P', a zamiast nazwy użytkownika - '\L', dopisać dwie opcje: 'called-login *' i 'called-password *', po czym te poufne dane umieścić w pliku 'call' w postaci trójki 'nazwa-uucp-systemu nazwa-konta hasło', czyli np.:

        omega   Ualfa   AAAAAA

Często występującym błędem uniemożliwiającym poprawne połączenie dwóch serwerów przez UUCP jest to, że komputer nawiązujący połączenie usiłuje ustawiać 7-bitowe wysyłanie danych z kontrolą parzystości, podczas gdy "serwer" spodziewa się danych 8-bitowych. Tak na przykład jest na SUNach z SunOSem i Solarisem. Można temu jednak prosto zaradzić, uzupełniając powyższą linię w pliku Systems w taki sposób:

        omega Any TCP - omega.zzz.zzz "" P_ZERO in:--in: Ualfa word: AAAAAA
Do /etc/Permissions lub odpowiednika dopisać:
        LOGNAME=Uomega MACHINE=omega VALIDATE=omega COMMANDS=/usr/local/news/rnews
(Oczywiście, należy podać prawdziwą ścieżkę do programu rnews).

4. Periodyczne przeglądanie kolejek uucp włącza się przez crontab:
        su uucp
        crontab </usr/lib/uucp/uudemon.crontab
I juz.

Uwaga: standardowo crontab ustawia uruchamianie programu uudemon.hour co 30 minut. Warto - zwłaszcza do testów na początek - uruchamiać go częściej.

Taylor UUCP

Zakładamy, tak jak poprzednio, że łączymy ze sobą komputery alfa.aaa.aaa (uuname - AAA.aaa) i omega.zzz.zzz (site name ZZZ.zzz). Instrukcje dotyczą alfy, na omedze wszystko tak samo, tylko odwrotnie.

1. Tak jak i w "zwykłym" UUCP - założyć nowego użytkownika przez dopisanie do /etc/passwd
        Uomega:ZZZZZZ:4:8::/var/spool/uucppublic:/usr/lib/uucp/uucico
(ZZZZZZ - zakodowane hasło. Numer użytkownika i grupy taki, jak dla użytkownika nuucp). Zależnie jednak od tego, jak uruchamiamy demona uucico, ten krok może okazać się zbędny. Przyjmijmy, że uucico będzie dokonywać autentykacji użytkowników samodzielnie. Wówczas modyfikacja /etc/passwd nie jest konieczna.

2. Włączamy demona uucp.
Dopisujemy w /etc/inetd.conf linie:
        uucp    stream  tcp     nowait  uucp    /usr/local/lib/uucp/uucico uuciso -s -l
lub jeśli stosowany jest pakiet tcp_wrappers:
        uucp    stream  tcp     nowait  uucp    /usr/etc/tcpd /usr/local/lib/uucp/uucico -s -l
i posyłamy do inetd sygnał HUP.

Uruchomienie uucico z opcjami '-s -l' powoduje, że dokonywać ono będzie sprawdzenia nazwy i hasła użytkownika samodzielnie. Można oczywiście stosować wyjście z in.uucpd, pamiętając jednak, że in.uucpd ZAWSZE woła potem /usr/lib/uucp/uucico, należy więc umieścić w tym miejscu uucico z pakietu Taylor uucp. Hasła i loginy, jakie uucico akceptuje, znajdują się w pliku passwd, ale nie w katalogu /etc, tylko w tym, w którym jest cała reszta plików konfiguracyjnych Taylor UUCP (załóżmy, że jest to katalog /etc/uucp, ale to zależy od parametrów kompilacji Taylor UUCP oraz zawartości "głównego" pliku konfiguracyjnego).
I ponownie - jeśli stosujemy tcpd, pamiętajmy o dopisanu komputera omega.zzz.zzz do listy tych, którym wolno łączyć się z demomem "uucico"

3. Pliki konfiguracyjne uucp.

Do /etc/sys (A dokładniej - do pliku 'sys' w katalogu z konfiguracją Taylor UUCP) należy dopisać:
        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
a w pliku call:
	 omega    Ualfa   AAAAAA
gdzie AAAAAA jest niezakodowanym hasłem użytkownika Ualfa na komputerze omega. Hasło to na omedze znaleźć się musi w /etc/uucp/password w takiej postaci:
        Ualfa     AAAAAA
To, czy w pliku passwd hasła są zakodowane, czy nie, zależy od opcji kompilacji Taylor UUCP.

3. Dobrze jest sprawdzić, czy w pliku port znajduje się definicja "portu" o nazwie TCP, z którego mamy zamiar korzystać:
    port TCP
    type tcp
4. Periodyczne przeglądanie kolejek uucp włącza się przez crontab:
        su uucp
        crontab </usr/lib/uucp/uudemon.crontab
Jeśli brak nam natomiast "standardowego" uudemon.crontab, wpisać możemy sami:
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"
I już. Jeżeli w przyszłości oprócz omegi pojawią się inne systemy, to także należy dla nich dopisać odpowiednie linie z 'uucico', albo uruchamiać 'obdzwanianie' wszystkich systemów za pomocą "uucico -sall".

Uwaga: 15 minut jest tu tylko orientacyjnym czasem, co jaki można przesyłać kolejki uucp. Warto samemu zbadać, jaki czas będzie najlepszy i dopasować to do potrzeb serwera news. Ostatnie dwie linijki w powyższym przykładzie oznaczają, że jeśli batch siedzi w kolejce 120-144 godzin (czyli 5-6) dni, to ostrzegamy "nadawcę" zadania (czyli w tym przypadku "news") o niemożności przesłania batcha, po 7 dniach (168 godzin) niedostarczone batche usuwamy.

II. Konfiguracja C News do wysyłania batchów

Wszystkie operacje jako user news.

  1. Założyć katalog:
            mkdir /usr/spool/news/out.going/omega
    

  2. W pliku /usr/lib/news/sys wpisać:
            ZZZ.zzz:all,!control/all,!local:f:/usr/spool/news/out.going/omega/togo
    

    Lista wysyłanych grup i dystrybucji oczywiście do indywidualnego ustalenia.

  3. W pliku /usr/lib/news/batchparms wpisać:
            omega           200000  20      batcher compcun viauux
    

  4. Uruchomić wysyłanie batchów przez dopisanie do crontaba linii:
            05,15,25,35,45,55 * * * * /usr/lib/newsbin/batch/sendbatches omega
    

    Uwaga: Można co 10 minut, można rzadziej. Dobrze jest, aby było to skorelowane z godzinami, kiedy uruchamiany jest uudemon.hour - tak, aby uudemon startował zaraz po przygotowaniu paczki do wysłania. Można np. przygotowywać paczki o 00 i 30, a demona startować o 05 i 35. Im częściej będziemy to robić, tym mniejsze będą opóźnienia w rozchodzeniu się news, ale nie należy przesadzać, żeby nie przeciążyć komputera i nie zniweczyć zysków, które uzyskaliśmy dzięki paczkowaniu. Jeżeli używamy Taylor UUCP, to należy pamiętać, by zamiast uudemon.hour, odpowiednio często uruchamiać z crontaba użytkownika uucp komendy uucico kontaktujące się z innym systemem, tak jak to zostało opisane powyżej, albo np:

            7 8-16 * * * /usr/local/lib/uucp/uucico -somega
            7,17,37 17-23,0-6 * * * /usr/local/lib/uucp/uucico -somega
    


III. Konfiguracja C News do odbierania batchów

Uruchamiany przez uucp program rnews nagrywa nadchodzące paczki w katalogu /usr/spool/news/in.coming. Aby zostały one skonsumowane przez C News, należy dokonać - do wyboru - jednej z dwóch operacji:

  1. uruchamiać co pewien czas program newsrun przez wpisanie do crontaba:
            09,19,29,39,49,49,59 * 1-31 * 0-6     /usr/lib/newsbin/input/newsrun
    

    (Tak dobrać, żeby się uruchamiał w parę minut po nadejściu każdej paczki.)

    albo

  2. stworzyć plik /usr/lib/news/rnews.immed, co sprawi, że rnews będzie automatycznie uruchamiać newsrun.

    Jeśli feed jest duży i wiemy, że za każdym obiegiem sendbatches maszyna omega posyła nam średnio więcej niż jeden batch, polecam sposób pierwszy. Jeśli dostajemy tylko niewielkie batche, pojedyncze i nie za każdym obiegiem sendbatches, polecam sposób drugi.


IV. Konfiguracja INN do wysyłania batchów.

1. Utworzenie feedu w pliku newsfeeds, przykładowo:
            cocos/fuw.edu.pl\
                :*,!torun.*,!umk.*,!mat.*,/!torun,!umk,!mat\
                :Tf,Wnb:
Zwykły feed używa na ogół parametrów "Tf,Wnm". Feed UUCP - "Tf,Wnb" - co powoduje tworzenie w /var/spool/news/out.going pliku o innym formacie niż dla NNTP, zawierającego ścieżki do artykułów i ich wielkości. 'cocos' to tutaj zarówno nazwa pliku w katalogu out.going jak i adres UUCP adresata. Adres nie musi byc zarejestrowany w mapach UUCP. Identyfikatory do Path:_ są te same, co dla feedu nntp. Dla porównania, ten sam feed w wersji nntp:

            uw/uw.edu.pl\
                :*,!torun.*,!umk.*,!mat.*,/!torun,!umk,!mat\
                :Tf,Wnm:
2. Poprawienie skryptu /usr/local/news/bin/sendbatch.

W systemie Solaris 2.3, przy korzystaniu ze "standardowego" UUCP należy zwrócić uwagę na parametr _PATH_COMPRESS w pliku config.data serwera, a jeśli jest już na to za późno, w pliku sendbatch poprawić linię:
        COMPRESS=/usr/ucb/compress
i
        UUXFLAGS="- -r -n -gd"
na
        COMPRESS=/usr/bin/compress
        UUXFLAGS="- -r -n"
ponieważ ścieżka do compress jest inna (w Solarisie 2.4 ponownie jest już w /usr/bin). Linię z parametrami programu uux należy poprawić zawsze, gdyż uux w systemie Solaris nie rozumie grade 'd'.

Aby temu zaradzić, można skompilować (na Solarisie, Linuxie i innych systemach) "Taylor UUCP" - kompiluje się bez problemów, poza jednym małym - jeśli planujemy używać UUCP także przez modem, trzeba KONIECZNIE w pliku "policy.h" zdefiniować 'HAVE_POSIX_TERMIOS', zamiast liczyć na to, że system sam zgadnie (według opisu), bo w Solarisie zgaduje 'HAVE_SYSV_TERMIO' i źle działa z szybkimi (potrzebującymi sprzętowej kontroli przepływu) modemami, a na Linuxach kompilator zgaduje HAVE_BSD_TERMIO, zamiast stosować HAVE_POSIX_TERMIOS.

INN FAQ zaleca, aby rozmiar pojedynczego batcha zwiększyć z

               DEFBYTES=50000 
do 200000 bajtów, zarówno dla połączeń TCP jak i telefonicznych. Można to zrobić przez zmianę wartości tej zmiennej w skrypcie lub podanie opcji -s200000 przy wywołaniu sendbatch w cronie.

3. Periodyczne wywoływanie sendbatch.

Do crontab użytkownika news należy dopisać:

        9,19,29,39,49,59 * * * * /usr/local/news/bin/sendbatch -c cocos >/dev/null 2>&1
gdzie cocos to adres UUCP adresata. Częstotliwość nie musi być tak duża. Opcja -c może byc zastąpiona opcją -cg wg propozycji Michała (p. III. Konfiguracja INN do nadawania z kompresją gzip poniżej). Warto też wpisać pewne ograniczenia, aby w przypadku jakiejś awarii po drugiej stronie nie zapchać dysku narastającymi kolejkami batchów. Można to zrobić za pomocą opcji -m przy wywołaniu skryptu sendbatch z crontaba, jak poniżej:
        9,19,29,39,49,59 * * * * /usr/local/news/bin/sendbatch -m12000000 -s100000 -c cocos >/dev/null 2>&1
W powyższym przykładzie batche są kompresowane (opcja -c), każdy z nich nie dłuższy niż 100kB (opcja -s), a na dodatek jeżeli wielkość zgromadzonych na dysku batchów przekroczy 12 tys. bloków (czyli zależnie od standardowej wielkości bloku dyskowego - 6 lub 12 MB), to generowanie batchów zostaje wstrzymane - identyfikatory "wychodzących" newsów są nadal gromadzone w /var/news/out.going/cocos i /var/news/out.going/cocos.uucp, ale plik 'cocos.uucp' zostanie użyty do wygenerowania następnego batcha, dopiero wtedy, gdy nieco ubędzie batchów już znajdujących się w kolejce do wysłania.

Wielkość podana jako argument opcji '-m' to ilość bajtów na dysku, które mogą zająć batche, ale tak jest tylko w wypadku 1024-bajtowych bloków na dysku (BSD, Linux, SunOS). W SysV (AIX, Solaris, IRIX) komenda 'df' i pokrewne podają dane zakładając 512-bajtowe bloki, a więc jeśli batche mają zajmować nie więcej niż 10 MB, to należy podać liczbę 20.000.000.

Warto też od razu zauważyć, że metoda ograniczania batchów nie zadziała, gdy transmitujemy batche uucp w sposób pośredni, co zostało opisane w dalszej części.


V. Konfiguracja INN do odbierania batchów.

Nic nie trzeba robić - wszystko jest "wbudowane" standardowo. Należy jedynie zadbać, by w /bin/rnews znalazł się program rnews z dystrybucji innd, oraz mimo wszystko do crontab-a użytkownika news dopisać jednak następującą linijkę:
        7 0,6,12,18 * * * /bin/rnews -U
a więc raz lub kilka razy dziennie uruchamiać program rnews z pakietu INND. Opcja '-U' powoduje, że rnews nie szuka batchów na wejściu, lecz przeszukuje katalog /usr/spool/news/in.coming . W normalnych warunkach nie jest to konieczne, natomiast przydaje się w sytuacjach awaryjnych, gdy z jakiegoś powodu serwer przestaje przyjmować newsy (np. padł, albo się zapchał), wtedy batche UUCP (oraz newsy dostarczane przez mail2news) trafiają właśnie do /usr/spool/news/in.coming. Serwer sam przeszukuje ten katalog podczas uruchamiania, ale nie podczas odblokowywania (ctlinnd go ''), jeśli był zapchany. Dlatego dobrze jest rnews uruchamiać także z crontab-a.

Kompresowanie batchów przy pomocy gzip

Standardowy sposób kompresji programem 'compress' nie jest zbyt wydajny. Dlatego, jeśli już mamy działający feed batchowy, proponuję uruchomienie kompresjii za pomocą programu 'gzip'. Oczywiście, obie strony muszą się umowić, że bedą tego programu używały, dlatego nie radzę tego zmieniać globalnie, a tylko osobno dla każdego feedu. Można najpierw skonfigurować dekompresję po stronie odbierającej bez zmian u nadawcy, gdyż gzip rozumie formaty .gz (gzip - ale nie zip!), .Z (stary compress) i .z (jeszcze starszy pack).


I. Konfiguracja C News do nadawania z kompresją gzip

1. Stworzyć nowy skrypt kompresujący batche, pod nazwą /news/lib/newsbin/batch/gzipcun
        #! /bin/sh
        # Invoke gzip, adding silly 2.11-compatible header.
        echo "#! cunbatch"
        gzip

(pamiętać, żeby zrobić 'chmod +x /news/lib/newsbin/batch/gzipcun')

2. W pliku batchparms zmienić compcun na gzipcun


II. Konfiguracja C News do odbierania z dekompresją gzip

1. Poprawić program ../input/newsspool.c
*** 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;

Skompilować i zainstalować jako /news/lib/newsbin/input/newsspool

W zasadzie można się bez tej zmiany obejść, wtedy newsspool błędnie nadaje typ plikom rozszerzenie .Z zamiast .gz, ale programowi gunzip (patrz niżej) to nie szkodzi.

2. W skrypcie /news/lib/newsbin/input/newsrun zmienić nastepująco:


*** 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

W zasadzie wystarczy dodać linijkę z .gz, ale traktowanie plików .Z programem gunzip nie zaszkodzi, za to umożliwia poprawne działanie nawet, jeśli nie chciało nam się przerabiać programu newsspool.


III. Konfiguracja INN do nadawania z kompresją gzip

Proponuję dodać nową opcję do skryptu /usr/local/news/bin/sendbatch
*** 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)

W wywołaniu sendbatch (cron) zmienić -c na -cg


IV. Konfiguracja INN do odbierania z dekompresją gzip

Trzeba zmienić w pliku config/config.data w źródłach INN
            _PATH_COMPRESS          /usr/ucb/compress
            _PATH_COMPRESSEXT       .Z
na
            _PATH_COMPRESS          /usr/local/bin/gzip
            _PATH_COMPRESSEXT       .gz
lub podobnie. Potem niestety trzeba przekompilować (make update) i na nowo nagrać programy INN. Jeśli nagramy wszystkie z tą poprawką, to całe INN bedzie odtąd używalo gzip do kompresji log-files itp. (Gdzieniegdzie jest to tak właśnie zrobione "standardowo"). Jeśli chodzi nam tylko o to, żeby rnews rozumiało batche kompresowane przez gzip, to wystarczy zainstalować na nowo tylko program rnews.


UUCP 'pośrednie' (czyli jak wykonać cyber!papaja!rnews)

Spotykanym czasem problemem związanym z rozsyłaniem news jest jak wysłać newsy z serwera za pomocą UUCP do systemu, z którym serwer nie ma bezpośredniego łącza UUCP (np. na serwerze news nie ma modemu, a newsy trzeba przesyłać przez telefon). Przykładowa sytuacja zilustrowana jest poniżej.

             uucp/tcpip                 uucp/modem
     news  <------------>  cyber  <----- - - - - ----->  papaja
   serwer news
'papaja' oznacza system, na którym chcemy odbierać newsy, a który łączy się z systemem 'cyber' przez modem, używając protokołów UUCP. cyber i news też mają połączenie UUCP, ale oparte o TCP/IP, gdyż oba znajdują się w sieci lokalnej. Problem polega na takim ustawieniu systemów, by na serwerze news generować batche dla komputera papaja, i aby docierały one poprawnie na miejsce.

Jeśli jest możliwe łączenie się komputera papaja z siecią za pomocą protokołów SLIP lub PPP, to problem można rozwiązać definiując na serwerze news system papaja i każąc im łączyć się bezpośrednio, za pomocą UUCP/tcpip. Inne wyjście to skorzystać z komputera cyber wyłącznie jako "przekaźnika" połączeń, tzn. zamiast 'login-shell-a' typu uucico wykonać "rlogin news" z odpowiednim username, którego shellem oczywiście będzie uucico, ale już na docelowym systemie. Gorzej, gdy to cyber ma dzwonić przez telefon do systemu papaja.

Najbardziej "klasyczne" i uniwersalne rozwiązanie to taka generacja batchów na serwerze, by trafiały one na miejsce przeznaczenia całkowicie za pomocą protokołów UUCP. W tym celu należy zmienić komendę 'uux', której używa skrypt 'sendbatch', a najprościej zrobić to, definiując odpowiedni plik w katalogu /var/news/out.going.

W "normalnym" przypadku (i w tym też) w pliku newsfeeds serwera news znaleźć się powinna definicja 'feedu' papaja (jako feedu UUCP!), co powoduje utworzenie w /var/news/out.going pliku o takiej samej nazwie, używanego do zapamiętywania, które artykuły trzeba do tego komputera wysłać. Standardową komendą wysyłającą newsy jest "uux - -gd -n ${SITE}!rnews", gdzie '${SITE}' zostaje zastąpione nazwą uucp hosta odbierającego batch. W przypadku braku bezpośredniego połączenia musi tu jeszcze wejść host pośredni, a więc komenda powinna wyglądać tak:

 uux - -r -gd -n ${INTERMEDIATE_SITE}!${SITE}!rnews
a więc np. "uux - -gd -n cyber!papaja!rnews". Aby taką komendę zdefiniować, wystarczy utworzyć plik o nazwie '/var/news/out.going/${SITE}.cmd', a więc np. /var/news/out.going/papaja.cmd, a w nim wpisać odpowiednią komendę 'uux' (podaną wyżej). Tworzone w ten sposób batche przeznaczone będą (ostatecznie) dla systemu papaja, ale ich transfer nastąpi na system cyber i dopiero stamtąd trafią we właściwe miejsce.

niestety, kolejnym problemem pojawiającym się po utworzeniu pliku ${SITE}.cmd jest to, że sendbatch przestaje uwzględniać opcje -c i -cg umożliwiające kompresję batchów, traktując zawartość pliku ${SITE}.cmd dosłownie, bez najmniejszych modyfikacji. Jeżeli wysyłane batche mają być kompresowane, przedstawioną powyżej komendę należy zosatąpić inną:

 (echo '#! cunbatch' ; exec /usr/bin/compress) | uux - - -r -n -gd ${INTERMEDIATE_SITE}!${SITE}!rnews
Zamiast /usr/bin/compress można oczywiście użyć programu gzip, o ile tylko system docelowy potrafił będzie takie batche rozpakować.

Zależnie od tego, jak w systemie uucp zdefiniowane są dozwolone czasy łączenia się z innymi systemami, pożądane jest zwykle używanie w powyższych poleceniach 'uux' opcji '-r, sprawiającej, że wykonanie uux nie będzie od razu wywoływać programu uucico, aby natychmiast połączyć się z drugim systemem. Częstą bowiem sytuacją jest zdefiniowanie, że system "domowy" może łączyć się ze swoim sąsiadem uucp o dowolnej porze, co oznacza, że w dowolnym momencie można stwierdzić, że wystarczy pisania listów i czas wykonać stosowne uucico. Brak opcji -r powodowałby natychmiastowe uruchomienie uucico po utworzeniu przez sendbatch pierwszej paczki artykułów, co może być przydatne na serwerze news tworzącym batche dla systemu "domowego", ale najprawdopodobniej nie jest pożądane na serwerze "domowym", powodowałoby bowiem natychmiastową próbę dzwonienia.

Pamiętać też trzeba o okresowym generowaniu batchów za pomocą skryptu "sendbatch" (jak to zostało już wcześniej opisane, oraz o tym, że opcja '-m' ograniczająca wielkość znajdujących się w kolejce batchów jest tutaj bezużyteczna. Batche te są tutaj bowiem kolejkowane na komputer 'cyber', a nie 'papaja', a więc sprawdzenie wielkości kolejki na papaję nic nie da.


Inne możliwości przyspieszenia transmisji News

Jeżeli największym problemem są opóźnienia, a nie przepustowość linii, to prostym tymczasowym rozwiązaniem może byc podział feedu na dwa lub więcej i wysyłanie ich jako osobnych, równolegle działających feedów. Inne zastosowanie feedów równoległych, a właściwie drabinkowych, to poprawienie niezawodności. Jednak w przypadku zrównoleglenia feedów w układzie dwa komputery po jednej stronie kabla wysyłające do dwóch po drugiej stronie, zwiększa się nieco ilość duplikatów. Warto też zwrocić uwagę na maksymalny czas przesyłania news przez nntpsend (opcja -T, omówiona wcześniej) oraz godziny startowania batchów wysyłających newsy.

Można też uruchomić stałe połączenie między serwerami - nntplink lub innfeed, też stosowany w układzie drabinkowym.

Ale ten rozdział napisze już pewnie ktoś inny w następnej wersji...


Część pierwsza FAQ - ogólne informacje o grupach pl.*
Część druga FAQ - konfigurowanie serwerów news
Część trzecia FAQ - Lista istniejących grup pl.*
Część czwarta FAQ - Formularz głosowania nad nowymi grupami pl.*

FAQ po angielsku dla administratorów serwerów news poza Polską


22.12.2003
UUCP:
Michał Jankowski (Michal.Jankowski@fuw.edu.pl, michalj@adm.usenet.pl)
Rafał Maszkowski (rzm@oso.chalmers.se, http://www.mat.uni.torun.pl/~rzm)
Konfiguracja serwera, Taylor UUCP, wersja HTML całości:
Tomasz Surmacz (tsurmacz@ict.pwr.wroc.pl, tsurmacz@adm.usenet.pl)
RCS ID: $Id: news-pl-faq.2.htpl,v 2.21 2003/12/22 03:08:37 ts Exp ts $

[This site is vi powered!] (c) 1994-2004 Tomasz R. Surmacz, Michał Jankowski, Rafał Maszkowski

Kopirajt i disclajmer:

Powyższy tekst może być w niezmienionej postaci i w całości (wszystkie części FAQ), bez ograniczeń kopiowany i drukowany *na własny użytek*, przekazywany przez news, e-maila, umieszczany w sieci Internet na serwerach WWW, FTP itp. itd.), pod warunkiem przechowywania aktualnej wersji (nie starszej niż 2-3 miesiące). Publikowanie tego tekstu w inny sposób lub dokonywanie w nim modyfikacji, skrótów, oraz rozprowadzanie zmienionej wersji tego FAQ lub jego fragmentów wymaga zgody autorów.

Aktualna wersja znajduje się 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 starają się, by wszelkie przedstawione w nim informacje były aktualne, ale gwarantować tego nie są w stanie. Jeśli po przeczytaniu tego dalej nic nie rozumiesz, program tin czyta konfigurację z jakiegoś dziwnego pliku, albo twój ulubiony serwer news właśnie się na ciebie obraził -- sorry!, C'est la vie... Jeśli błąd jest w tekście - napisz na adres tsurmacz@adm.usenet.pl - może poprawię.