Usenet w erze serwisów społecznościowych traktowany jest jak zdychający dinozaur. Faktycznie, wiele niegdyś żywych i ciekawych grup zostało porzuconych, inne mają regularne problemy z zalewem początkujących użytkowników albo ze spamem. Niemniej jednak, ciągle jest to użyteczne i wygodne źródło informacji.
Co jeszcze jest w usenecie
Bodajże Bruce Eckel napisał kiedyś, że internetowe źródła informacji powinniśmy klasyfikować nie ze względu na ilość wiadomości, nawet nie ze względu na ilość wartościowych informacji ale ze względu na stosunek sygnału do szumu. Faktycznie - nawet w onetowych komentarzach czasem trafiają się ciekawe wypowiedzi ale przeglądanie ich jest czystą stratą czasu. No i przynajmniej jeśli chodzi o treści techniczne (programowanie, administracja itd), dobrze wybrane grupy dyskusyjne ciągle dostarczają mi znacznie więcej użytecznych informacji niż jakiekolwiek twitteroidy czy serwisy społecznościowe.
Sytuację dodatkowo poprawia gmane, które udostępnia po NNTP wiele wartościowych list mailowych (i np. zamiast zalewać sobie skrzynkę pocztową wiadomościami z linux.kernel można od czasu do czasu przejrzeć grupę gmane.linux.kernel).
Wreszcie - czytniki newsów dają interfejs nieporównanie efektywniejszy od jakichkolwiek webowych wynalazków (od forum po twittera). Śledzenie dyskusji (wątkowanie), scoring, sprawna klawiaturowa nawigacja, śledzenie co już zostało przeczytane a co jeszcze nie, oznaczanie i formatowanie cytatów, ...
Pewien problem stanowi wydajność. Nawet lokalne serwery NNTP bywają wolne i okresowo niedostępne, gmane dość wolne po prostu jest (zwłaszcza z Polski). Pomaga tu instalacja Leafnode, czyli prostegio cacheującego serwerka NNTP, który w tle ściąga wybrane grupy (i wysyła moje wiadomości) i udostępnia je lokalnie, dzięki czemu wszystko działa bardzo szybko. Ma to sens nawet na pojedynczym komputerze, tym większy w lokalnej sieci firmowej czy domowej.
Instalacja Leafnode
Program jest spakietowany dla wszystkich istotnych dystrybucji Linuksa. Dla Debiana czy Ubuntu jego instalacja sprowadza się do:
$ sudo apt-get install xinetd $ sudo apt-get install leafnode
Zamiast
xinetd
może być dowolna inna odmianainetd
, jeśli w chwili instalowanialeafnode
żaden nie będzie zainstalowany, zostanie wybranyopenbsd-inetd
, ja wolęxinetd
ze względu na czytelniejszą składnię konfiguracji.
W trakcie instalacji leafnode
zostanie zadane pytanie o główny
serwer NNTP. Ja - jako użytkownik Astera - podałem news.aster.pl
,
ogólnie można podać dowolny serwer a do tej konfiguracji tak czy siak
za moment wrócimy.
Konfiguracja Leafnode (i programów pomocniczych)
Pierwszym elementem jest skonfigurowanie xinetd
by uruchamiało
leafnode
dla połączeń z portem 119. W przypadku xinetd
oznacza
to stworzenie pliku /etc/xinetd.d/leafnode
o następującej treści:
service nntp { disable = no flags = REUSE port = 119 socket_type = stream protocol = tcp wait = no user = news server = /usr/sbin/leafnode }
i wymuszenie odświeżenia konfiguracji xinetd
przez
$ sudo /etc/init.d/xinetd reload
Jeżeli leafnode
ma być używane także z innych maszyn w sieci
lokalnej, powyższe musi uzupełnić edycja /etc/hosts.allow
, np.
leafnode: 127.0.0.1 leafnode: 192.168.1.
(jest to potrzebne przynajmniej na Debianie i Ubuntu gdzie pakiet
wpisuje leafnode
do hosts.deny
) i ewentualnie odpowiednia
dziurka w firewallu.
Uwaga: o ile Leafnode chętnie działa w sieci lokalnej, o tyle odmawia dostępu z innych sieci (z sieci o netmasce innej niż maszyna, na której działa). Można to obejść (patrz parametr
allowstrangers
w konfiguracji) ale nie jest to zalecane, lepiej skorzystać np. z tunelu SSH.
Następny krok to edycja /etc/news/leafnode/config
. Kluczowym
elementem jest tu wykaz wykorzystywanych serwerów NNTP (Leafnode bez
problemu radzi sobie z mirrorowaniem kilku). W moim wypadku
odpowiedni fragment wygląda następująco:
server = news.aster.pl only_groups_pcre = (comp|pl|rec|alt)\. server = news.gazeta.pl timeout = 30 username = tu-moje-konto-z-gazeta.pl password = tu-moje-haslo-z-gazeta.pl only_groups_pcre = (comp|pl|rec|alt)\. server = news.gmane.org only_groups_pcre = gmane\. server = news.mozilla.org only_groups_pcre = mozilla\. nodesc = 1
i zapewnia mi podwajany dostęp do usenetu przez news.aster.pl
a
także news.gazeta.pl
(Leafnode poprawnie łączy grupy dostępne z obu
miejsc a moje posty wysyła obydwoma ścieżkami, zmniejsza to ryzyko
gubienia informacji) a do tego dostęp do GMane via news.gmane.org
i do
grup Mozillowych via news.mozilla.org
.
W tymże pliku (dobrze zresztą skomentowanym) można dostosować nieco innych parametrów, kilka szczególnie moim zdaniem przydatnych to
expire = 30 initialfetch = 300 maxage = 15 maxbytes = 50000 create_all_links = 1 newsadmin = postmaster@moja.domena.pl allow_8bit_headers = 1
Znaczenie powyższych:
expire
definiuje po ilu dniach ściągnięte posty są kasowane (Leafnode nie trzyma ich bezterminowo ale automatycznie usuwa po pewnym czasie),initialfetch
imaxage
dotyczą pierwszego ściągania artykułów z nowo zasubskrybowanej grupy (zostanie ściągniętych nie więcej niżinitialfetch
wpisów nie starszych niżmaxage
dni),maxbytes
ustala największy rozmiar wysyłanej (przeze mnie i współużytkowników instalacji Leafnode) wiadomości,create_all_links
jest potrzebne mojemu czytnikowi,allow_8bit_headers
zezwala na polskie znaczki w tytułach.
I to już wszystko (choć zachęcam do przejrzenia skomentowanego
config
w całości).
Dalszej administracji pakiet specjalnie nie wymaga, warto do czasu
do czasu (zwłaszcza po rekonfiguracjach) zerknąć czy coś niepokojącego
nie pojawiło się w /var/log/news/news.err
i /var/log/news/news.notice
.
Jak to działa
Instalacja Leafnode nie powoduje uruchomienia żadnego demona. Program składa się z:
-
ściągającego listy grup i nowe artykuły oraz wysyłającego moje wpisy procesu
fetchnews
uruchamianego z crona (w wersji Debian/Ubuntu decyduje o tym plik/etc/cron.d/leafnode
, domyślnie mamy tam uruchamianie co godzinę co można oczywiście zmienić), -
robiącego porządki (przede wszystkim kasującego przeterminowane posty) programu
texpire
, także uruchamianego - raz dziennie - z crona (patrz/etc/cron.daily/leafnode
), -
obsługującego czytniki programu
leafnode
odpalanego z inetd/xinetd w reakcji na połączenia z portem 119 (patrz powyższa konfiguracja).
Lista dostępnych do subskrypcji grup jest połączeniem grup dostępnych
na wszystkich zdefiniowanych serwerach. Listy grup (tzw. plik
active
) są pobierane przy pierwszym uruchomieniu fetchnews
po
dodaniu nowego serwera do pliku konfiguracyjnego i odświeżane od czasu
do czasu (timeout_active
, domyślnie 90 dni).
Leafnode ściąga wyłącznie artykuły z aktywnie czytanych grup.
Rozpoznaje to w prosty sposób: grupa jest potrzebna jeśli w przeciągu
ostatnich paru dni (ilu - o tym decyduje parametr timeout_long
z
/etc/news/leafnode/config
) ktokolwiek przeczytał jakikolwiek artykuł
z tejże grupy (przeczytanie to pobranie treści, odpowiada mu zwykle
otwarcie treści artykułu w czytniku, samo subskrybowanie w czytniku
czy nawet wyświetlanie spisu treści grupy najczęściej nie wystarcza).
Na pozostałych grupach znajduje się pojedynczy wpis placeholder, aby
grupa zaczęła być pobierana, wystarczy go otworzyć w czytniku.
Posty pojawią się po pewnym czasie (po najbliższym uruchomieniu
fetchnews
z crona), można je wymusić odpalając ten program ręcznie:
$ sudo -u news /etc/news/leafnode/do-fetch-news
Gnus z wielu maszyn
Moim ulubionym czytnikiem pozostaje od lat Gnus. Nie chcę tu prowadzić szczególnej propagandy (w kościele Emacsa jestem szarym wyznawcą a nie ewangelizatorem, Gnus polubiłem nie z powodów ideologicznych ale ze względu na bardzo sprawną nawigację z klawiatury i skrót M-q automagicznie reformatujący dowolnie zagmatwany tekst z wielopoziomowymi cytatami) za to - skoro już piszę o konfigurowaniu NNTP - zanotuję jak skonfigurowałem sobie Emacsa by z kilku używanych komputerów widzieć te same grupy w tym samym stanie.
Korzystanie z newsów nie wymaga używania emacsa, jest wiele innych sensownych czytników, z linuksowych warte polecenia są Pan i KNode, nawet Thunderbird radzi sobie zupełnie znośnie.
Pierwszym krokiem było przeniesienie używanych przez Gnus katalogów na Dropboksa:
mkdir ~/Dropbox/Gnus mv ~/News ~/Dropbox/Gnus mv ~/Mail ~/Dropbox/Gnus mv ~/.newsrc* ~/Dropbox/Gnus ln -s ~/Dropbox/Gnus/News ~/News ln -s ~/Dropbox/Gnus/Mail ~/Mail
(to na wzorcowej maszynie, na pozostałych musiałem tylko poczekać
na koniec synchronizacji i założyć symlinki)
oraz ustawienie dwóch emacsowych zmiennych (M-x customize-variable
):
gnus-init-file
na~/Dropbox/Gnus/.gnus
gnus-startup-file
na~/Dropbox/Gnus/.newsrc
(to na każdym komputerze).
Potem jeszcze musiałem na każdej z maszyn odpowiednio zdefiniować aliasy wskazujące jak dostawać się do serwerka na którym działa leafnode (ta maszyna nie ma publicznego adresu, dobieram się do niej po sieci domowej lub po VPN).
Na maszynce na której chodzi leafnode
było to (leafnodowy serwer
jest dla gnus widoczny pod nazwą platon, jako główny ustawiam sobie
newsy firmowe, w jednoserwerowej konfiguracji można to oczywiście
przenieść):
(custom-set-variables '(gnus-select-method (quote (nntp "news.firma.local.vpn"))) '(gnus-secondary-select-methods (quote ( (nntp "platon" (nntp-address "localhost") ) ))) )
a na maszynce dobierającej się z innej sieci po SSH (poniższe robi ssh
na marcin.vpn.firma.local
a stamtąd łączy się już po NNTP z maszyną
o lokalnej nazwie platon
):
(custom-set-variables '(gnus-select-method (quote (nntp "news.firma.local"))) '(gnus-secondary-select-methods (quote ( (nntp "platon" (nntp-address "platon") (nntp-via-address "marcin.vpn.firma.local") (nntp-via-rlogin-command "ssh") (nntp-via-rlogin-command-switches ("-C")) (nntp-open-connection-function nntp-open-via-rlogin-and-netcat) ) ))) )
Jeszcze jako ciekawostka przykład jak można zrobić podwójne SSH (kiedyś używałem czegoś podobnego by z laptopa przejść na komputer z VPN a dalej z niego do sieci firmowej):
'(gnus-secondary-select-methods (quote ( (nntp "firma" (nntp-address "news.firma.local") (nntp-via-user-name "marcin") (nntp-via-address "domowy.komputer.zvpn") (nntp-via-rlogin-command "ssh") (nntp-via-rlogin-command-switches ("-C" )) (nntp-netcat-command "ssh") (nntp-netcat-switches ("komputer.w.firmie" "nc")) (nntp-open-connection-function nntp-open-via-rlogin-and-netcat) ) (nntp "platon" (nntp-address "platon") )