Articoli
Come farsi il proprio "newsfeed personale" in Linux
Chi arriva a Linux dal mondo Dos/Windows e` probabilmente abituato
a leggere le news di usenet in uno di due modi...:
- "online", sfruttando uno qualunque dei tanti programmi che sono
in grado di interrogare un news-server con il protocollo NNTP
(ad esempio, Netscape).
- "offline", sfruttando un programma che richiede al news-server
i post "interessanti", e permette di leggerli senza dovere
rimanere connessi (ad esempio, Free Agent).
La lettura delle news offline permette di risparmiare parecchio
tempo di collegamento, e quindi bolletta TUT (e a maggior
ragione se si chiama in intersettoriale o interurbana...!),
quindi e` una frequente richiesta su it.comp.linux e altri
gruppi dedicati a Linux quella di "come faccio a leggere le
news offline in Linux"?
Linux offre pero` anche un'architettura alternativa, piu`
tradizionale, quella del "(leaf) newsfeed", che puo` essere
assai preferibile ad entrambi i paradigmi suddetti. Vediamo
un po' meglio cosa ci sta dietro...
Le news, come la mail e altri "sistemi" di comunicazione, hanno
un'architettura a molteplici livelli; semplificando un minimo
possiamo qui identificarne tre:
- *trasporto*: qualcosa deve occuparsi di fare arrivare
i dati (news) sulla nostra macchina, e, se a nostra
volta generiamo dati (post), di farli arrivare sulle
altre macchine cui sono destinati;
- *gestione*: qualcosa deve occuparsi di classificare i
dati che arrivano sulla base dei vari newsgroups,
fare "scadere" i messaggi troppo vecchi, evitare
duplicati, e cosi` via;
- *uso*: qualcosa deve fornire un'interfaccia-utente che
permetta di scegliere messaggi, leggerli, comporre
altri messaggi (nuovi o in risposta a precendenti),
e cosi` via.
Naturalmente ciascuno di questi sottosistemi puo` in qualche
misura arrogarsi anche i compiti di altri (o per metterla in
positivo, "collaborare":-), ma concettualmente i problemi sono
separati, o meglio, "separabili".
Il sottosistema "trasporto" si colloca al livello "applicazione",
il piu` alto dello stack TCP/IP (che non e` completamente eguale,
ricordiamolo, allo stack ISO OSI...), quindi puo` a sua volta
fare uso di tutti i livelli inferiori di questo stack. Fra i
protocolli offerti dallo stack TCP/IP ce n'e` uno, l'NNTP, che e`
specificamente orientato al trasferimento di NetNews, ma nulla
obbliga ad usare proprio solo quello; la classica alternativa ad
NNTP, l'uso di pacchetti di news compresse da trasferire secondo
qualsiasi protocollo di trasferimento files (ma di solito con un
qualche sottoprotocollo di UUCP), presenta vantaggi e svantaggi:
- vantaggi: l'efficienza; si possono usare compressioni
molto efficaci (un tempo "compress", oggi "gzip");
non richiede l'uso di TCP/IP ma si presta a posarsi
su qualsiasi sistema di scambio-files;
- svantaggi: amministrativi; il sistema che genera i dati
deve sapere in anticipo di dovere preparare i
pacchetti compressi per un certo sistema destinazione,
quindi quali newsgroups quest'ultimo richiede, ecc
ecc; inoltre, non c'e` un modo comodo ed efficiente
di evitare trasmissioni duplicate (il protocollo
ihave/sendme delle news non e` proprio il massimo)
per sistemi che scambino news con molti altri.
slurp, suck, e altri sistemi meno evoluti (come il vecchio,
semplice nna), usano NNTP come protocollo di trasporto, per cui
gli host fornitori di news non hanno neppure bisogno di sapere
che questi programmi esistono (si comportano come "newsreaders");
essi (almeno nelle versioni recenti) collaborano col sottosistema
di gestione onde evitare duplicazioni nel trasferimento.
Una volta che le news sono arrivate sul mio sistema, occorre un
qualche software di gestione che le smazzi nei vari newsgroups,
mi cauteli dai duplicati, provveda all'"expire" quando occorre, e
svolga le N altre funzioni che si chiedono oggi a un buon sistema
news, come la generazione dei NOV "News OverView" che riassumono
le caratteristiche di ciascun messaggi facilitando l'opera dei
programmi di interfaccia-utente per lettura/scrittura news.
I due principali programmi di gestione news (NHA, News Handling
Agent) oggi diffusi sono INN e cnews. cnews ha una storia assai
piu` lunga, risalendo (attraverso l'antenato B-News) agli "albori"
di Usenet; ha maggior facilita` per la gestione di sistemi non
pienamente connessi a Internet fulltime, e` piu` orientato alla
tradizionale architettura Unix (tanti programmilli piccoli piccoli,
shell script per tenerli insieme tutte le volte che cio` sia
compatibile con le prestazioni); INN e` piu` nuovo, piu`, mi pare,
"monolitico" -- forse meglio documentato, e piu` adatto alla
gestione di siti molto grandi che non a macchine con pochi utenti
(o uno solo...!) e connessioni alla rete occasionali (dial-up).
Secondo me INN si presta meno a "tampicciare", quindi resto con
cnews che conosco assai bene (non di rado ho pompato news in
cnews basandomi su _floppy_ come protocollo di trasporto --
"sneakernet":-) -- basta, ed e` facile!, massaggiare i dati al
formato che si attende, e puoi proprio farlo funzionare, se
occorre, a spago e scotch...:-). Comunque immagino che INN sia
una scelta altrettanto valida, per chi lo preferisce.
Infine c'e` uno, o piu`, "News User Agents" -- programmi che
l'utente, lettore e scrittore di news, usa direttamente per
accedere al database netnews. Il piu` semplice, a seconda
dell'architettura de database, potrebbe essere...:
more /var/spool/news/it/comp/linux/847
(basterebbe "cat" invece di "more", ma solo se si ha uno
scroll-back sul proprio terminale...:-). Questo da per
scontato che ogni post sia tenuto su di un file di testo
separato, e che la struttura dei newsgroup sia riflessa
in una gerarchia di directory; questa, in effetti, e` la
strategia che usano sia cnews sia INN, nonche` la piu`
compatibile con il tradizionale approccio Unix (altri
dati ausiliari necessari alla gestione, come il NOV, la
"storia" dei post ricevuti, eccetera, sono naturalmente
mantenuti in altri file "paralleli" a quelli dei post
veri e propri). Al limite si puo` usare un filesystem
alternativo, compresso e/o ottimizzato per tenere tanti
file piccolissimi, istallandolo opportunamente nel kernel
(livello 2.0 e oltre) e "invisibilmente" al gestore news.
In realta` oltre all'accesso ai files i NUA forniscono molte
funzioni a valore aggiunto, come tenere traccia dei messaggi
gia` letti per non presentarli altre volte, i "killfiles" che
permettono di non vedere neppure messaggi i cui autori o
argomenti ci consentono di stabilire a priori che gia`
c'interessano, e cosi` via.
Qui, comunque, la scelta resta enorme. Una volta B-News
includeva un programmillo "readnews" che faceva poco di piu`
del suddetto ``more'':-); ma quasi subito usci` rn, uno dei
primi capolavori di Larry Wall (piu` tardi padre del Perl),
e il mondo non fu piu` lo stesso.
Normalmente oggi i NUA accedono alle news via NNTP (quindi
richiedono che il NHA fornisca un demone server NNTP -- in cnews,
questo va istallato "in addizione" allo schema base), anche se
resta possibile come ottimizzazione l'accesso diretto in lettura
ai dati su disco (locale -- se e` montato NFS, e` una
_pessimizzazione_ rispetto all'uso di NNTP, non una
ottimizzazione:-)
Oggi normalmente i NUA *NON* conservano un complesso database di
info ausiliarie sulle news, visto che il NOV esegue bene questa
funzione ed e` integrato anche in NNTP -- viceversa conservano
info sulle preferenze e la storia dello specifico utente, com'e`
giusto (la U di NUA...:-). La scelta di fondo sta fra:
- programmi che leggono news E fanno altre cose:
emacs + opportune interfaccie
netscape
PINE e altri programmi di news+mail
...
- programmi ottimizzati per sola lettura news:
rn, trn, strn, xrn...
slrn
tin
nn
knews
...
Un'altra dirimente in ciascuna categoria e` che ci sono programmi
solo grafici, che quindi richiedono X (netscape, knews), altri
con modalita` di solo testo, altri ancora con entrambi i tipi
d'interfaccia. Le funzionalita` inoltre variano ampiamente --
strn e slrn ad esempio offrono il concetto di "scoring", cioe`
la possibilita` di avere un'euristica di "punteggio" per ogni
articolo basato su criteri definiti dall'utente, per presentare
gli articoli piu` verosimilmente "interessanti"; altri offrono
killfiles (e autoselect) molto ma molto semplificati, pero`
velocissimi perche` "precompilati"; e via elencando.
Ciascuno avra` le sue proprie preferenze... io sono affezionato a
nn, programma non nuovissimo ma secondo me tuttora validissimo,
anche se la complessa struttura interna ne rende difficili
continui aggiornamenti e di conseguenza manca di funzioni che
oggi secondo me sono divenute indispensabili (ad esempio un
"filtro antispam" per eliminare qualsiasi articolo che sia
postato su piu` di, ad es., quattro gruppi alla volta; in trn
questo si ottiene facilmente grazie alla generalita` del suo
killfiling, usando come regular expression di filtro la presenza
di quattro o piu` virgole sulla linea Newsgroups negli
header...!).
Riassumendo, dunque, la mia soluzione preferita per avere un
newsfeed dei gruppi che mi interessano sulla mia Linux Box
casalinga e` composta di:
- slurp per trasportare le news, via NNTP, sul mio PC
Linux, ovviamente a qualsiasi ora mi faccia comodo,
grazie a cron e compagnia;
- cnews per gestire questo mio newsfeed personale
- nn per leggermi le news che vivono sulla mia macchina
(piu` offline di cosi`!-), anche se e` ovvio che a questo
punto qualsiasi newsreader va altrettanto bene, questione
di gusti personali.
Fra i molti vantaggi di un'architettura di questo genere c'e` la
possibilita` di ottenere feed dei gruppi d'interesse da _molteplici_
siti-server, garantendo grazie alla ridondanza di non perdere alcun
articolo (slurp e cnews collaborano, grazie al concetto di "history",
per garantire che nessun articolo verra` mai prelevato due volte).
Naturalmente, e` importante organizzare le successive "slurpate"
per cercare di prendere ciascun post dal server "piu` vicino", ma
slurp offre varie funzionalita` atte all'uopo. Un altro elemento
che e` importante organizzare bene, in un setup di questo tipo, e`
quello di garantire che i propri post vengano istradati correttamente
al server preferito (meglio, qui, evitare le duplicazioni... su gruppi
"moderati", in particolare, per garantire che il moderatore non si
trovi nella posta molteplici copie del nostro post!), utilizzando
(fuori linea e opportunamente) il "mini-inews" che fa parte del
pacchetto nntpd o altro programmillo analogo (si tratta per fortuna
di una funzionalita` estremamente semplice). cnews ci aiuta in
questo organizzando in vari direttori 'out.going' le news destinate
a essere passate a vari server, ma bisogna settare correttamente i
parametri (nessun "batching", uso di uno specifico programma di
trasporto, eccetera).
La ridondanza controllata del traffico delle news e` cruciale per
la sua rapidita` e robustezza, e le architetture "a backbone" che
sono ormai diventate quasi universali per la lettura delle news
non la permettono, mentre questi "leaf newsfeed", se configurati
e gestiti a puntino, si`.
Non occorre poi dire che il vantaggio e` enorme se le news su una
data macchina Linux (o cluster di macchine in rete locale) le
leggono un certo numero d'utenti... magari ciascuno con il suo
NUA preferito, anche tutti diversi l'uno dall'altro; la macchina
o cluster, arrangiando le cose in questo modo, prelevera` e terra`
(per il tempo scelto, sinche non giunge il momento dell'"expire")
una e una sola copia di ciascun post dei gruppi di interesse, del
tutto indipendentemente dal numero di lettori.
di
Alex Martelli