Feeder - skompresowane newsy Wstęp Czy czasami zastanawiałeś się jak można przyspieszyć ściąganie setek listów, które codziennie trafiają na grupy dyskusyjne? Zapewne przychodziły Ci do głowy pomysły o zmianie serwera newsowego (co i tak nie dawało oczekiwanych efektów :(), a co ambitniejsi kompresowali całą transmisję przez ssh. Rozwiązanie które chce Wam zaproponować jest o wiele bardziej efektywne, a co za tym idzie w bardzo szybkim czasie ściągniemy codzienną porcję newsów. W jednym poście na pcol Andrzej Radecki (autor serwisu) napisał tak: " Od ponad roku prowadzimy serwis udostępniający newsy w postaci skompresowanych paczek. Głównym jego przeznaczeniem jest skrócenie czasu pobierania newsów, z czego wywiązuje się on bardzo dobrze. Myślę, że docenią to ludzie łączący się za pomocą dialup'u TP S.A. ;-) Wynika to nie tylko z samej kompresji ale również znacznego zmniejszenia ilości zapytań serwera oraz zrównoleglenia pobierania plików. Pobieranie i kompresowanie newsów odbywa się 4 razy dziennie przy czym nowo tworzonym paczkom nadawane są nazwy będące złożeniem nazw grup i kolejnych numerów uruchomienia skryptu 'serwerowego'. " Ja tylko dodam, ma całkowitą rację! Za pierwszym razem gdy ściągałem newsy to przez 4,5 minuty połączenia modemowego z TPSA ściągłem 1106 listów! robiąc oczywiście w tym czasie inne internetowe rzeczy. Jeśli myślisz, że warto skorzystać to czytaj dalej. Jak to działa? Autorzy serwisu 4 razy dziennie udostępniają spakowane bzipem newsy. Ty za pomocą odpowiednich skryptów ściągasz je na swój dysk lokalny, a dalej podajesz je do odpowiednich programów - serwera news inn, leafnode+ lub slrnpull`a - programu ściągającego posty dla slrn. Następnie odczytujesz je swoim ulubionym linuxowym programem (i tak wiem, że jest to slrn :)) W tym dokumencie opiszę tylko jak korzystać z serwera inn. Slrnpull nie jest moją mocną stroną więc, jeśli chcesz z niego korzystać musisz sam się nim pobawić. Do Leafnode+ są już napisane odpowiednie skrypty, wkrótce będą dostępne w projekcie. Trochę o autorach Andrzej Radecki radecki@wpk.p.lodz.pl - szef całego przedsięwzięcia, pomysłodawca, Gotar gotar@priv0.onet.pl - skrypty do slrnpull`a, Radek Zieliński - skrypt prelowy pracujący na serwerze, Radek Kojecki - to na jego serwerze działa projekt, Daniel Mróz - pisze dokumentacje, Zerknij po feedera Pierwszą rzeczą jaką powinnieneś zrobić to zajrzenie na stronę domową projektu: http://www.media-com.com.pl/~radecki/. Możesz tam znaleźć statystyki ściąganych grup newsowych (czasami skrypt to obsługujący potrafi płatać figle :), ich listę oraz co najważniejsze skrypty potrzebne do obługiwania projektu. Ściągniesz je w formacie .src.rpm z katalogu http://www.media-com.com.pl/~radecki/scripts/. Jak je zainstalować przeczytasz w artykule o instalacji oprogramowania. Jeśli jednak nie używasz rpm`a (tak jak ja, heh :) wystarczy, że wyciągniesz odpowiednie pliki i umieścisz je we właściwych miejscach. Skrypty idą do /usr/bin, tworzysz /var/spool/news/feeder i umieszczasz w nich pliki grupy i last. Konfiguracja i używanie W /usr/bin znajdziesz 7 skryptów które obsługują projekt. Niektóre służą do tego samego :) inne są wykorzystywane w różnych opcjach (zależy z jakich programów korzystamy). Do ściągania służą: suckem-sh i suckem-perl, oba robią to samo, drugi napisany w perlu jest jeszcze w fazie rozwojowej, ale podobno całkiem stabilny. feed2inn przesyła i rozpakowywuje skrypty do serwera inn`a, a dwa funkcjonalnie rownoważne do spoola programu slrn - feed2slrnpull_a i feed2slrnpull_b. Dodatkowo w paczce znajduje się skrypt 'news.send' do wysyłania newsów z inn'a (klasycznie - za pomocą rposta) i filtr nagłówków do niego - 'news.put'. Plik konfiguracyjny to /var/spool/news/feeder/grupy gdzie zapisujemy nazwy grup, które będziemy chcieli pobierać np.
pl.comp.os.linux pl.news.czytniki
Oczywiście pełną listę grup znajdziemy na stronie projektu. Poza tym w pliku list zapisywane są numery ściąganych feedów (paczek) a w last numer ostatnio ściągniętego. Znowu podeprę się Andrzejem:
" Niedawno napisałem perlowy skrypt do ściągania newsów. Jest to jak na razie konstrukcja eksperymentalna (choć już całkiem stabilna - ja jej używam na co dzień). Cechą szczególną tego skryptu jest to że nie używa on plików 'grupy' i 'last' lecz jednego pliku 'groups' umożliwiającego precyzyjniejszą kontrolę nad tym co i od jakiego miejsca ściągamy. Format tego pliku jest opisany w samym skrypcie. Dodatkowo posiada on kilka innych feature'ów - czytelniejsza prezentacja wyników. Powinien być też (takie jest założenie) bardziej odporny na zerwanie połączenia od wersji napisanej w bashu."
Mowa tu oczywiście o skrypcie ściągający suckem_perl, którego możesz używać do ściągania feedów. Ja jednak preferuje suckem_sh (napisany w bashu), ale to tylko moje przyzwyczajenia. Jeśli skonfigurowaliśmy feedera to teraz wydając polecenie suckem_sh lub suckem_perl ściągniemy interesujące nas paczki. Dalej musimy wepchnąć je do programu inn lub slrnpull (poczekaj aż skonfigurujemy inn`a w następnym punkcie) poleceniem feed2inn lub dla slrnpull feed2slrnpull_a lub feed2slrnpull_b. Serwer news - inn Sam feeder _tylko_ ściaga newsy, Ty musisz jeszcze postawić coś z czego program do newsów będzie je czytał - u mnie jest to serwer inn (może być slrnpull - na razie nie będzie jego opisu, bądź coś innego jednak na razie nie ma jeszcze skryptów do programów innych niż powyższe). Zainstaluj inn`a z rpm`a, tgz lub źródełek. Zadbaj także aby na twoim komputerze znalazł się pakiet cleanfeed. Edycji poddamy plik konfiuracyjny inna. W /etc/news/newsfeed dopiszemy: i do sekcji ME akceptowanie polskich grup czyli pl | ME\ :*,@alt.binaries.warez.*,!junk,!control*,!local*,!foo.*\ /pl,world,usa,na,gnu,bionet,pubnet,u3b,eunet,vmsnet,inet,ddn,k12\ ::
| |
UWAGA: wystarczy dopisać tylko pl (3 linijka) pozostałe już są w standardowej konfiguracji inn`a! Powtórzenie tego wpisu powoduje błąd w konfiguracji programu. Uruchamiamy serwer inn poleceniem inndstart i tworzymy nowe grupy na serwerze (takie same jak w pliku grupy feedera). Robimy to poleceniem: | ctlinnd newgroup nazwa.dodawanej.grupy
# np. ctlinnd newgroup pl.comp.os.linux | |
Teraz wpychamy do inna posty z feedera: feed2inn. Co dalej? Mamy już na własnym lokalnym serwerze wiadomości. Teraz wystarczy je tylko odczytać. Ja polecam do tego celu slrn. Nie będę się tutaj wdawał w szczegółową konfiguracje, jednak podam kilka uwag. Slrn korzysta z serwera, którego nazwę (adres) podamy w zmiennej NNTPSERVER, w naszym wypadu będzie to serwer lokalny czyli 127.0.0.1. Zrób (dopisz do /etc/profile) export NNTPSERVER=127.0.0.1. Przy pierwszy uruchomieniu slrn próbuje pobrać listę grup. Tworzymy ją wydając polecenie: | slrn -f /home/user/.newsrc -create | |
Na ekranie powinny pojawić się wszystkie dostępne na serwerze grupy. Te które chcemy czytać musimy zasubskrybować poprzez użycie klawisza s. Używanie slrn i slrnpull Jeśli nie mamy ochoty by stawiać serwer neiws inn, gdy tylko my korzystamy ze ściągniętych feedów i używamy czytnika news o nazwie slrn warto zainteresować się programem dołączanym do tego czytnika o nazwie slrnpull. W rzeczywistości służy on do ściągania postów z newsgrup, ale dzięki Gotarowi możliwe jest go używanie w połączeniu razem z feederem. Zaczniemy od konfiguracji samego slrnpulla. W pliku /var/spool/slrnpull/slrnpull.conf edytujemy jego konfiguracje. Wystarczy, że dodamy własne grupy dyskusyjne:
pl.comp.os.linux pl.comp.os.linux.sieci
Teraz nadszedł czas, aby zmusić slrn do korzystania z slrnpull. Ważne, aby w pliku konfiguracyjnym slrn (.slrnrc) znalazły się następujące wpisy:
set spool_inn_root "/var/spool/slrnpull" set spool_root "/var/spool/slrnpull/news" set spool_nov_root "/var/spool/slrnpull/news" set read_active 1 set use_slrnpull 1
Oczywiście ścieżki muszą być poprawne. Teraz prześlemy spakowane paczki ściągnięte feederem do spoola slrnpull. Możemy to zrobić za pomocą dwóch równorzędnych skryptów: feed2slrnpull_a i feed2slrnpull_b. Którego użyjemy zależy tylko i wyłącznie od nas. Rozpakowane posty pojawią się w katalogu: /var/spool/slrnpull/news/nazwa/grupy. Do czytania newsów musimy użyć programu slrn. Aby korzystał z slrnpull wywołujemy go parametrem:
slrn --spool
Jeśli używamy slrn tylko w ten sposób warto dodać alias do /etc/profile:
alias slrn='slrn --spool' i wywoływać czytnik przez wpisanie slrn. Wysyłanie postów na grupy dyskusyjne przy korzystaniu z slrnpull nie stwarza żadnych trudności. Musimy mieć wspomnianą już opcję w pliku konfiguracyjnym slrn`a (.slrnrc):
set use_slrnpull 1
Wysyłane artykuły umieszczane są w katalogu /var/spool/slrnpull/out.going i dlatego powinniśmy nadać temu katalogu odpowiednie prawa do zapisywania:
chmod ugo+rwxt out.going
Komendę tę wydajemy z lini poleceń, gdy znajdujemy się w katalogu /var/spool/slrnpull/ Gdy chcemy wysłać w świat nasze posty wywołujemy slrnpull z opcją:
slrnpull --post-only
Dzięki temu slrnpull nie będzie pobierał nowych wiadomości (tym zajmuje się feeder), a jedynie wyśle nasze.
Także i tutaj warto utworzyć w /etc/profile alias:
alias slrnpost='slrnpull -d /var/spool/slrnpull/ --post-only'
Jeśli go utworzymy wystarczy wpisać slrnpost by wysłać newsy.
UWAGA: Musisz określić z jakiego serwer news slrnpull ma korzystać. Odpowiedzialna jest za to zmienna NNTPSERVER. Ustawiamy tę zmienną poleceniem (dla powłoki bash):
export NNTPSERVER=news.vogel.pl
gdzie news.vogel.pl jest naszym wybranym serwerem news. Aby nie wpisywać tej zmiennej za każdym razem gdy się ponownie zalogujemy na konto, warto dodać ją do /etc/profile:
NNTPSERVER=news.vogel.pl export NNTPSERVER
Grupa dyskusyjna. Uwagi końcowe. Możesz zapisać się na grupę dyskusyjną poświęconą feederowi feed-pl@egroups.com, (zapisy na: feed-pl-subscribe@egroups.com). Uwagi kierujcie do Andrzeja lub Gotara (skrypty do slrnpulla), adresy na górze artykułu. Serwis jest widoczny także pod adresem ftp://ftp.media-com.com.pl/pub/newsy/.
|