Implementació del XEP-0060, o sigui, d’un servei de publish-subscribe (PubSub) esta escrit amb Python i Twisted. Bàsicament el que permet és que sobre un servidor XMPP estàndard hi podem connectar un servei basat en PubSub, o sigui, que nosaltres publiquem una serie d’informació que un seguit de clients consulten perquè hi estan subscrits. És un mètode basat en events (no-polling) molt adient per disfondre certs tipus d’informació.
A vegades programem shell scripts que necessiten enviar el seu resultat a la xarxa XMPP, per exemple, imagineu que volem comunicar la caiguda d’un servei a través de GTalk, doncs aquest toolkit ens simplifica moltíssim aquesta tasca. Esta programat en ruby i a part de poder-se usar des de la CLI també podem integrar-ho com a llibreria dins d’un codi en ruby.
L’objectiu és aconseguir que totes les peticions de l’estil: http://webmail.domini.tld es redirigeixin a: http://domini.tld/webmail amb un servidor amb Plesk.
Creem el fitxer de configuració d’apache: /etc/httpd/conf.d/webmail-redir.conf
En escència el que estem fent és aprofitar-nos del mod_rewrite d’apache2 per poder assignar a la funció de mapes un script que retalla el HTTP_HOST treient-li la paraula webmail de l’inici. Amb això obtenim el domini al que volem connectar i només li hem d’afegir la URI a la RewriteRule perquè ens redirigeixi cap on toca.
Abans de parlar de CouchDB, si no heu sentit a parlar mai de les bases de dades NoSQL, és important que sapigueu que no són bases de dades ralacionals, ni orientades a objectes. Sinó que es basen en un paradigme diferet, són orientades a documents.
Doncs bé, CouchDB és un projecte de la fundació Apache i és OpenSource, és clar. Algunes de les seves característiques són:
RESTful API
schema-less document store (document=JSON format w/binary support like attachments)
multi-version-concurrency-control model
user-defined query structured as map/reduce (javascript, python, C, etc)
incremental index update mechanism
multi-master replication
easily distributable
update validation
programat amb erlang
web based basic admin features
binding for python, C, .NET, PHP, Ruby, etc.
pros: retrieve information, cons: insert data
Actualment estic estudiant si usar aquest producte en un dels projectes que estic treballant. De fet, encara no tinc clar si aplica al 100% a les necessitats que tinc en el projecte però a priori s’ajusta prou bé. Perquè no penseu que això és una raresa que no coneix ningú informar-vos que Ubuntu One usa couchDB com a backend, pels que no conegueu el servei jo el vaig descobrir gràcies a l’article d’Ars Technica: Code tutorial: make your application sync with Ubuntu One.
Inicialment volia fer un manual de les funcions bàsiques de CouchDB però degut al munt de documentació que he trobat he pensat que era una tonteria re-inventar la roda, així doncs a continuació faré una ressenya de les fonts d’informació que he usat per coneixer aquesta base de dades:
CouchDB Implementation: descripció molt detallada i no massa extensa de com funciona per dintre aquest sistema de BBDD especialment dedicada al Pau. Destaco aquest paràgraf:
CouchDB is a “document-oriented” database where document is a JSON string (with an optional binary attachment). The underlying structure is composed of a “storage” as well as multiple “view indexes”. The “storage” is used to store the documents and the “view indexes” is used for query processing.
Abans d’acabar comentar que personalmentel que més m’ha costat d’entendre de tot plegat és el tema map/reduce especialment la part de reduce, ja que no acabava de veure al 100% com funcionava i quina finalitat tenia. Potser l’error més gran que he comès és intentar buscar un paral·lelísme directe entre SQL i NoSQL. Sota el meu punt de vista no són tecnologies substitutories, més aviat complementaries ja que cada una s’ajusta a un tipus de solucions diferents. Per tant, abans que res recomano que confronteu la vostre problemàtica amb cada un dels paradigmes: orientat a objectes, bbdd relacionals i orientat a documents.
Ahir comentava que el Carles hem va parlar de ClearOS, doncs bé, també em va comentar que hi havia un projecte opensource anomenat Turnkey Linux que bàsicament es dedica a fer software appliances amb els paquets de codi lliure més famosos, per exemple: LAMP, drupal, joombla, phpBB, dokuwiki, mediawiki, rails, tomcat, mysql, wordpress, etc. actualment diria que hi ha 56 paquets.
De fet, a part de per fer proves sobre certs paquets no trobo massa interessant aquestes software appliances. Però el que si que realment m’ha cridat l’atenció i he estat provant fa uns dies és el Turnkey Core, que en escència és la base del sistema que ells usen per montar les software appliances. Escencialment es tracta d’agafar una Ubuntu 8.04.3 LTS i donar-li suport de:
Target systems:
CD d’instal·lació optimitzat (instal·lació mínima) i ús com a liveCD
Màquines virtuals: VMDK HD i OVF (Xen, VMWare, Parallels, VirtualBox)
Amazon EC2 AMI
Configuration console (feta en python), permet configurar de forma senzilla funcions bàsiques:
xarxa
apagar
reiniciar
Ajax Web Shell (shellinabox): client SSH via web, realment va molt bé!
Regenera les claus dels certificats durant la instal·lació
SSL: webmin, apache2, lighttpd
SSH
Definir el password de root durant la instal·lació
Com podeu imaginar-vos la meva idea és agafar aquesta base de sistema per montar els meus propis servidors ja sigui a nivell privat o professional. De fet, estalvia prou feina i la instal·lació que fa Turnkey Core d’Ubuntu és prou petita com per fer una instal·lació a mida en cada cas. O sigui, que es poden intal·lar els paquets que volem sense haver de tenir coses innecessaries. Això si, pensant sempre en servidors.
Abans de marxar de vacances tot parlant amb el Carles vaig descobrir el clearOS i després d’un parell de dies fent-hi proves esporàdiques no volia deixar l’oportunitat d’escriure quatre ratlles sobre el que m’ha semblat.
Es tracta d’una distribució de linux especialment orientada a petites empreses amb pocs servidors, malgrat per algunes mitjanes empreses també crec que estaria ben indicada. Basada en Redhat/CentOS i totalment focalitzada a ser usada via una interficie web força amigable.
Incorpora diverses eines sempre gestionables desde web que permeten fer funcions de servidor de xarxa i/o de gateway de comunicacions. Per exemple:
funcions de directori
LDAP amb usuaris i passwords integrats per la resta de serveis
gestor de certificats de seguretat
funcions de xarxa
multi-wan
VPN, PPTP, IPSec, OpenVPN
DMZ i NAT 1-1
funcions de firewall
servidor DHCP i DNS
UPnP
funcions de gateway
antimalware: antivirus, antiphing i antispyware
antispam
gestor d’ampla de banda
detector d’intrusions
filtres de protocols, fins hi tot P2P
filtres de continguts
web proxy
control d’accés
funcions de servidor
Windows Networking com a PDC
serveis de fitxers i impresores
flexshares (diverses formes de compartir fitxers: SMB, FTP, Web, etc)
groupware i connector d’outlook
servidors de correu: POP, IMAP, SMTP, Webmail i recollida de correu
filtres de correu: antispam, antimalware, greylisting i quarantena
arxivador automàtic de correu
gestor de bbdd MySQL
servidor web amb PHP
A més al estar orientat a un entorn professional l’empresa que desenvolupa clearOS disposa d’un servei anomenat clearSDN, a través del qual es pot obtenir:
Software Updates Priority security and bug updates to the ClearOS software.
Content Updates Required updates to Content Filter, Intrusion Protection, Antispam and Antimalware.
Monitoring Alarms and reporting for bandwidth, resource and security management.
Remote Services Critical services for VPN, DNS and Remote Server Backup.
Fins hi tot tenen uns dispositius anomenats clearBOX que porten el sistema operatiu integrat i ja disposen d’uns quants ports ethernet, ideals per fer de gateway o fins hi tot de switch.
Com no podia ser d’altre forma tot plegat té un bon manual de suport pels usuaris més novells, ja que només amb una mica d’experiència en l’administració de sistemes tot plegat es fa molt intuitiu.
En general m’ha quedat un bon gust de boca pel que fa a l’eina, potser on més he trobat que coixeja el sistema és en detalls de configuració més avançats, per exemple, del servidor d’OpenVPN i cosetes similars. Però per empreses petites i mitjanes com ja deia abans és més que suficient en la majoria de casos.
XMPP és un protocol de missatgeria no només orientat a mantenir converses entre usuaris sinó també a ser usat com a sistema RPC entre diferents aplicacions. Malgrat això res és perfecte i AMQP més orientat a la segona funció que no pas a la primera es perfila com estàndard corporatiu molt més potent i eficient que XMPP en diversos aspectes. Però AMQP peca per ser força inaccessible degut a que no és trivial d’entendre i usar.
En tot aquest món de la missatgeria entre aplicacions hi ha un altre protocol no tan conegut però que preten tenir el millor d’XMPP i d’AMQP: RestMS. De fet, RestMS és realment una simplifiació d’AMQP que usa com a sistema de transport REST.
Es tracta d’un estàndard obert, amb una implementació Open Source força sòlida. Aquest estàndard ens aporta:
sistema d’enrutat de missatges
models de cues
fàcil d’extendre la seva semàntica
simple, perquè és precís i petit
segur, usa els sistemes de seguretat estàndards d’HTTP
escalable, perquè usa servidors, caches, proxies, etc. del món HTTP
resol la dicotomia ‘polling vs events’ usant long-polling, igual que BOSH
en principi no disposa de sistema de presència, tot i que es podria montar fàcilment
pot codificar durant el transportar les dades en XML o JSON
portable en diferents sistemes operatius
ofereix interoperatibilitat entre diferents llenguatges de programació
Per tot plegat RestMS es perfila com una alternativa interessant per alguns entorns, aportant una solució simple i potent en molts aspectes. Tot i que teoria en mà, el trobo força més lent que no pas AMQP. De fet, des de que vaig veure com s’usava un sistema AMQP per fer balanceix de càrrega en aplicacions de video usant GStreamer per fer una prova ‘fast and dirty’ em vaig quedar impresionat.
Mostrar els 10 dominis amb més missatges pendents d’enviar, sovint va bé per controlar quan ens han usat per fer un email i hi ha molts correus enganxats per enviar.
qshape-sdeferred|head-n10
Borrar un missatge de les cues.
postsuper-dID_MSG
Borrar tots els missatges de les cues.
postsuper-dALL
Script per borrar missatges de les cues segons origen o destí:
gt;;if ( @ARGV!=1 ) {die"Usage: pfdel \n";}else{$email_addr=$ARGV[0];}if ( $euid!=0 ) {die"You must be root to delete queue files.\n";}open(QUEUE,"$LISTQ |") ||die"Can't get pipe to $LISTQ: $!\n";my$entry=; # skipsingleheaderline$/=""; # Restofqueueentriesprinton # multiplelines.while ( $entry= ) {if ( $entry=~/$email_addr$/m ) { ($qid) =split(/\s+/,$entry,2);$qid=~s/[\*\!]//; next unless ($qid); # # Execute postsuper -d with the queue id. # postsuper provides feedback when it deletes # messages. Let its output go through. # if ( system($POSTSUPER, "-d", $qid) != 0 ) { # If postsuper has a problem, bail. die "Error executing $POSTSUPER: error " . "code " . ($?/256) . "\n"; } } } close(QUEUE); if (! $qid ) { die "No messages with the address <$email_addr> " . "found in queue.\n"; } exit 0;
Borrar missatges segons email origen o destí.
/root/bin/pfdelemail
Hold a message / Retenir missatges, no intentar servir-los. Posar-los a una cua congelats.
postsuper-dID_MSG
Hold all messages
postsuper-dALL
Moure un missatge de la cua ‘hold’ a la cua ‘active’.
postsuper-HID_MSG
Moure tots els missatges de la cua ‘hold’ a la cua ‘active’.
postsuper-HALL
Re-encuar missatges, per exemple si el postfix tenia un erro de configuració després de corregir-los podem re-encuar els missatges perquè es corregeixin els possibles errors de classificació que hagin patit. Per exemple, canvi de ‘delivery agent’.
postsuper-rID_MSGopostsuper-rALL
Veure el contingut d’un missatge que esta a la cua:
postcat-qID_MSG
Per forçar el re-enviament de missatges a la cua.
postqueue-sopostfixflush
Per forçar l’enviament de missatges a la cua per un domini.
Tan de temps usant nagios i mai havia tingut la necessita de recorrer als Nagios External Commands. Escencialment es tracta d’una named-pipe que usa Nagios per rebre comandes via shell.
Sintaxis per injectar les comandes. Per suportar aquesta funcionalitat previament cal haver-la habilitat al fitxer de configuració de nagios, això també ho trobareu a l’anterior enllaç.
Comandes suportades, la llista és força gran i hi podem trobar coses com ara forçar un check per host o fins hi tot deshabilitar els checks sobre un servei o un host.
A continuació adjunto la comanda que podeu llençar desdel prompt per llençar una ordre al nagios al cap de deu segons. En aquest cas forcem que es verifiquin tots els serveis d’un host.
Per veure el resultat de la comanda i si aquesta ha estat rebuda pel nagios només cal que mirem el fitxer nagios.log. La sortida del log serà algo així:
Aquestes últimes vacances a madeira he aprofitat per utitlizar una eina que fins ara incorporaven els mòbils que tenia però que fins ara que m’he passat a Android no m’he decidit a expremer, estic parlant d’htc footprints. És una eina que a partir d’un simple formulari permet registrar llocs emblemàtics, bonics, interessants, curiosos o que simplement volem recordar. Aquest formulari guarda coses com una fotografia del lloc, un títol, la posició del GPS, la direcció, pots afegir-hi comentaris de text i fins hi tot de veu; potser hem deixo algún detallet del que pots afegir-hi per cada entrada a footprints però escencialment això és tot el que fa. Obviament el bo del tema és que gràcies a les tecnologies que incorpora el telèfon omplir el formulari és ben senzill, ja que la foto, posició del GPS o gravació de veu es fan amb simples clics, com sempre el més molest és escriure text.
L’interessant del tema és que després això es pot exportar a un fitxer .kmz (tot el contingut del footprints) o un fitxer .kml (només una entrada del footprints). El .kmz conté en escència un paquet amb un fitxer kml i els arxius externs del footprints, per exemple, les fotografies o l’audio. Pel que fa al format del fitxer .kml es tracta d’un fitxer XML amb el contingut del formulari que he comentat anteriorment. Aquests fitxers són directament importables al Google Earth i a moltes altres eines de la saga de Google. Però el que a mi m’interessa comentar en aquest article és la llibereria libkml, també de google, la que vaig usar per parsejar el fitxer kmz de les vacances a Madeira.
A través d’un simple codi amb python vaig generar el codi en format dokuwiki necessari per montar-me l’esquelet de la web de les vacances a Madeira. De fet, el codi no esta gens polit i esta extret d’snippets d’exemple que he trobat per la web, però pel que jo volia era més que suficient. Al final del post hi teniu un enllaç.
Fa dies que en aquesta línia dono voltes a la idea de montar-me un servei que després de fer una entrada al footprints amb el mòbil enviï automàticament el fitxer .kmz/.kml per email a una direcció reservada que parsegi el correu i que automàticament doni d’alta aquest contingut a alguna de les seccions d’oriolrius.cat, de fet, encara no tinc clar si la millor idea és injectar-ho com a post o com a entrada del wiki, el que si que tinc clar és que això després s’haurà de referenciar al meu lifestream perquè així quedi constància de llocs interessants que coneixo i que sempre que vols recordar ja has oblidat. Si algú té idees de com millorar aquesta idea, ja ho sap, que m’avisi.