Newsy-Minimum
Kenneth M. Lewis, Jr.,
v?, 25 maja 1995
WWeerrssjjaa ppoollsskkaa:: TToommaasszz ''ttssccaa'' SSiieenniicckkii,, <>
v1.02, 13 grudnia 2001
Dokument opisuje użycie serwera INN do obsługi niewielkiej ilości grup
dyskusyjnych off-line.
______________________________________________________________________
Spis treści
1. O dokumencie
1.1 Aktualny status dokumentu
1.2 Prawa autorskie
2. Wstęp
3. Opis sytemu ,,Newsy-Minimum''
3.1 Wymagania
3.2 Instalacja i rozruch
3.3 Sposób użycia
4. Podziękowania...
5. Od tłumacza
5.1 Inne źródła informacji
5.2 O tłumaczeniu
______________________________________________________________________
11.. OO ddookkuummeenncciiee
11..11.. AAkkttuuaallnnyy ssttaattuuss ddookkuummeennttuu
_(_S_t_a_n _n_a _d_z_i_e_ń _1_4_._1_0_._1_9_9_7_)
Dokument _N_e_w_s_y_-_M_i_n_i_m_u_m nie jest już aktualizowany przez autora. Jeśli
chciałbyś podjąć się opieki nad tym dokumentem, skontaktuj się z
.
11..22.. PPrraawwaa aauuttoorrsskkiiee
Copyright (c) May 25, 1995 Kent Lewis (Kenneth M. Lewis, Jr.)
Jeśli dokument ten zostanie zaakceptowany przez Linux Documentation
Project, wolno będzie rozpowszechniać go zgodnie z zasadami opisanymi
w LDP HOWTO z zastrzeżeniem, że autor chciałby przejrzeć ostateczną
formę niniejszego dokumentu przed włączeniem go do ww. zasobów.
22.. WWssttęępp
Używam Linuksa, a z siecią łączę się za pomocą modemu. Do niedawna
musiałem utrzymywać stałe połączenie z siecią aby móc czytać grupy
dyskusyjne. Nie mogę jednak zbyt długo pozostawać on-line -- korzystam
z usług odległego dostawcy łącza, za czas on-line płacę więc stawki
międzymiastowe; oznacza to wysokie rachunki telefoniczne. Dlatego
zacząłem się zastanawiać nad zminimalizowaniem kosztów dostępu do
sieci bez utraty korzyści z tego dostępu płynących. Sposób taki
znalazłem; mam nadzieję, że przyda się on również innym.
Dokument niniejszy opisuje jak używać INNa z niewielkim tylko zestawem
grup. Za pomocą prostego skryptu perlowego artykuły są jednocześnie
ściągane i wysyłane podczas krótko trwającego połączenia z siecią.
Całość jest w wersji ,,alfa'' -- jeśli pojawią się nie opisane tu
problemy, będziesz musiał sam sobie z nimi poradzić.
33.. OOppiiss ssyytteemmuu ,,,,NNeewwssyy--MMiinniimmuumm''''
33..11.. WWyymmaaggaanniiaa
Musisz mieć dostęp do serwera news (NNTP). Żeby sprawdzić, czy możesz
z danego serwera czytać grupy i na nie pisać, sprawdź programem telnet
port 119 tego serwera -- pojawi się informacja na temat Twoich
uprawnień. Jeśli już używasz danego serwera, to wiesz, że dostęp masz
-- w takim wypadku nie ma co sprawdzać. :-) Natomiast jeśli dostępu
nie masz, postaraj się o niego przed przeczytaniem reszty niniejszego
dokumentu.
Musisz mieć wystarczającą ilość miejsca na twardym dysku na
składowanie artykułów. Moja linuksowa partycja ma 300 MB, a dwudniowy
urobek około piętnastu grup zajmuje wg. df zaledwie od 1 do 2%
pojemności dysku. Na wszelki jednak wypadek najlepiej zacząć od
niewielkiej ilości grup i sukcesywnie dodawać kolejne.
Potrzebujesz Perla i INNa. Jeśli ich nie masz, ściągnij je z
(lub któregoś z mirrorów). Perla
prawdopodobnie znajdziesz w katalogu /pub/Linux/devel/perl, a INNa w
/pub/Linux/system/Mail/news.
Jeśli jeszcze tego nie zrobiłeś, zainstaluj te dwa programy. Ja
swojego INNa wziąłem z dystrybucji Slackware 2.2. Dołączona
dokumentacja była bardzo dobra, po zapoznaniu się z nią nie powinieneś
mieć problemu z instalacją. Perl, już skompilowany, również dołączony
jest do Slackware 2.2 -- postaraj się zdobyć wersję skompilowaną,
dokument niniejszy nie zawiera pomocy w instalacji i konfiguracji
Perla.
33..22.. IInnssttaallaaccjjaa ii rroozzrruucchh
Nie zapomnij o założeniu grup ,,junk'' i ,,control'' -- bez nich
program innd nie ruszy. Będziesz musiał założyć je ręcznie, ponieważ
polecenie ctlinnd zakłada, że demon innd jest już uruchomiony. Po
wystartowaniu tego demona utwórz poleceniem ctlinnd newgroup ... ...
katalog do składowania newsów. Szczegółów szukaj w podręczniku
systemowym (man ctlinnd).
Teraz musisz zmodyfikować plik /etc/news/newsfeeds -- dzięki temu INN
utworzy plik w katalogu /usr/spool/news/out.going/; plik ten
wykorzystywany będzie przez zamieszczony poniżej skrypt perlowy do
publikowania napisanych off-line artykułów. Informacje na temat
zawartości /etc/news/newsfeeds znajdziesz w dokumentacji INNa;
przeczytaj też odpowiednią stronę podręcznika systemowego (man
newsfeeds). WWAAŻŻNNEE:: wpisy w /etc/news/newsfeeds powinny być umieszczone
w takiej kolejności, aby pierwszym polem w pliku
/usr/spool/news/out.going/$NEWSFEED były pełne ścieżki do artykułów,
które chcesz wysłać. Jeśli pierwsze pole będzie zawierało co innego,
skrypt będzie próbował wysłać na newsy owo ,,co innego'' zamiast
Twoich artykułów, co z pewnością wywoła niepożądane efekty.
Nie zapomnij o zablokowaniu w pliku control.ctl możliwości
automatycznego zakładania nowych grup. Jeśli tego nie zrobisz, to w
miarę napływania z nadrzędnego serwera wiadomości kontrolnych liczba
ściąganych grup będzie się powiększała, co spowoduje zwiększenie
obciążenia i spowolnienie twojego systemu -- a w niniejszym HOWTO
chodzi przecież o coś zupełnie przeciwnego.
Wejdź do wybranego przez siebie katalogu i wykonaj w nim polecenie
touch -t $WCZORAJ lastget
Zamiast $WCZORAJ użyj ciągu oznaczającego dzień wczorajszy (w formacie
opisanym w podręczniku systemowym (man touch)).
Umieść poniższy skrypt w tym katalogu i nadaj mu prawa wykonywania.
Zmień $NEWSPATH na katalog, w którym zainstalowałeś INNa (u mnie jest
to /usr/lib/news). Zmień $SCRIPTPATH na ścieżkę do katalogu, w którym
umieściłeś skrypt (u mnie /usr/lib/news). W tym samym katalogu
znajdować się musi wspomniany wyżej plik lastget. Zmień $PROVIDER na
adres serwera news, z którego będziesz korzystać. Zmień $NEWSFEED na
nazwę feedu, której użyłeś w /etc/news/newsfeeds.
Przeczytaj strony ,,inews'' i ,,nntpsend'' podręcznika systemowego,
aby zorientować się w działaniu poniższego skryptu.
-----------------------------------------------------------------------------
#!/usr/bin/perl
##
## pobierz nowe artykuly
##
open(LIST, "$NEWSPATH/active")
|| die "nie moglem otworzyc listy grup do pobrania!";
while () {
@newsgroup = split(' ', $_); ## dzieli kolejne linie pliku active wg spacji,
## umieszcza dane w tablicy @newsgroup
## @newsgroup[0] zawiera teraz nazwę grupy
system "$NEWSPATH/bin/nntpget -f $SCRIPTPATH/lastget -n @newsgroup[0] -o -v $PROVIDER"
|| print "nie moglem sciagnac postow z grupy @newsgroup[0]\n";
}
close(LIST);
system "touch $SCRIPTPATH/lastget";
##
## usun naglowek "NNTP-Posting-Host: " z postow do wyslania
##
open(LIST, "/usr/spool/news/out.going/$NEWSFEED")
|| die "nie moglem otworzyc listy postow do przygotowania do wyslania";
while () {
if (@article = split(' ', $_)) {
$article = @article[0];
rename("$article", "$article" . '.bak');
$backup = "$article.bak";
open(OUTPUT, ">> $article");
open(INPUT, "$backup");
select(OUTPUT);
while () {
print unless ?^NNTP-Posting-Host.*\n?
}
close(OUTPUT);
close(INPUT);
unlink("$backup");
reset;
}
}
select(STDOUT);
close(LIST);
##
## wyslij posty
##
$ENV{'NNTPSERVER'} = "$PROVIDER";
open(LIST, '/usr/spool/news/out.going/$NEWSFEED')
|| die "nie moglem otworzyc listy postow do wyslania";
while () {
if (@article = split(' ', $_)) {
$article = @article[0];
system "inews -h $article";
}
}
close(LIST);
------------------------------------------------------------------------------
33..33.. SSppoossóóbb uużżyycciiaa
Powiedzmy, że nazwałeś powyższy skrypt ,,foonews''. Przy następnym
połączeniu z siecią wykonaj polecenie $SCRIPTPATH/foonews. Jeśli
przez ekran zaczną przewijać się identyfikatory wiadomości (Message-
ID), to znaczy, że wszystko działa jak powinno. Być może będziesz
musiał poczekać kilka sekund na pojawienie się pierwszych Message-ID.
Po zakończeniu tej operacji powinieneś mieć na dysku wszystkie
wiadomości wysłane na newsy od czasu ostatniej modyfikacji pliku
$SCRIPTPATH/lastget, a wszystkie napisane przez Ciebie posty powinny
być wysłane do serwera, z którym się łączyłeś; serwer rozpropaguje te
wiadomości dalej. Po wszystkim plik $SCRIPTPATH/lastget będzie miał
dzisiejszą datę ostatniej modyfikacji; jutro, kiedy ponownie
uruchomisz ,,foonews'', skrypt ściągnie newsy wysłane na newsy między
tą datą, a momentem uruchomienia skryptu.
Będziesz musiał ręcznie usuwać zawartość pliku
/usr/local/news/out.going/$NEWSFEED. Umyślnie nie dopisałem tej
funkcji do skryptu, żeby móc sprawdzić, czy moje artykuły rzeczywiście
zostały wysłane... i jakoś nie zabrałem się jeszcze do
zautomatyzowania tego zadania. Po pierwszym uruchomieniu skryptu
najpierw sprawdziłem, czy artykuły zostały wysłane, a dopiero potem
usunąłem zawartość tego pliku; możesz zrobić tak samo.
Jeśli poprawnie skonfigurowałeś INNa, to skrypt
$NEWSPATH/bin/news.daily zajmie się poprawnym działaniem całej
konstrukcji.
W tej chwili wszystko robię ręcznie, jednak nic nie szkodzi na
przeszkodzie, aby proces ten zautomatyzować. Kilka wpisów w cronie
powinno załatwić sprawę.
I ostatnia uwaga: wcale nie uważam, że mój skrypt jest elegancko
napisany, ani że sposób jest idiotoodporny i niezawodny. Ale SOA#1 --
u mnie działa -- więc postanowiłem się nim podzielić.
44.. PPooddzziięękkoowwaanniiaa......
...dla wszystkich, dzięki którym Linux jest taki fajny!
_K_e_n_t _L_e_w_i_s
kent@fiona.umsmed.edu
55.. OOdd ttłłuummaacczzaa
55..11.. IInnnnee źźrróóddłłaa iinnffoorrmmaaccjjii
Polskie tłumaczenia pozostałych dokumentów HOWTO znajdują się pod
adresem . Z pewnością szczególnie zainteresuje
Cię INN+SUCK mini HOWTO
,
które znacznie poszerza informacje zawarte w niniejszym dokumencie.
Problem czytania newsów off-line rozwiązać możesz też za pomocą
odpowiedniego czytnika, więcej na ten temat znajdziesz w FAQ grupy
pl.news.czytniki .
55..22.. OO ttłłuummaacczzeenniiuu
Dokument oryginalny dostępny jest wyłącznie w formacie txt (patrz
); znaczniki sgml i podział na rozdziały
pochodzą ode mnie.
Copyright for the translation:
(c) 2001 by Tomasz `tsca' Sienicki, tsca@edb.dk