sâmbătă 6 octombrie 2012, 03:40:15 +0300
Utilizarea protocolului XMPP pentru mesagerie instant (Ceata)
De ceva vreme, Ceata dispunde de propria instanță a unui server ejabberd. Nu a fost niciodată un serviciu foarte popular, și principalul motiv a fost incomoditatea în adminstrare și obscuritatea serviciului însuși. Mai mult, popularitatea exagerată a protocoalelor și serviciilor de comunicare nelibere (Yahoo, Skype, Facebook - ca să le numesc doar pe cele mai cunoscute) a îngreunat și mai mult promovarea și popularizarea opțiunilor libere în comunicare.
După cum scriam în articolul precedent, am configurat serverul local de jabber pentru realiza autentificarea pe baza serviciului LDAP. Ce înseamnă asta? Practic, fiecare individ cu un cont în serviciul nostru de LDAP se va putea folosi de același cont pentru a se autentifica pe jabber! :-)
Voi ridica acum perdeaua obscurității denumirilor, pentru cei nefamiliari cu acestea:
- Un cont în LDAP se poate crea prin interfața web administrată de Solena
- Mesageria instant prin jabber diferă de cea oferită de Yahoo prin:
- Comunicarea e securizată
- Nu există nicio autoritate care interceptează și filtrează comunicarea Yahoo cenzurează legături web)
- Permite crearea de „camere” (en. chatrooms) și conferințe asemănătoare cu IRC
- În multe cazuri, același client utilizat pentru protocoale nelibere suportă și XMPP (e.g. pidgin)
- Da, conturile de pe LDAP se pot folosi în tot mai multe servicii și situri ale Ceata :-)
Pașii necesari pentru a obține un cont:
- Accesarea interfeței web pentru administrarea conturilor în Ceata
- Crearea unui cont (sunt instrucțiuni clare) și personalizarea acestuia după bunul plac al utilizatorului!
Exemplu de configurare folosind Pidgin, pentru a accesa serviciul și conferința (permanent deschisă) Ceata (interfața în en_US)
- Dacă nu este deja, acesta va trebui instalat folosind managerul de pachete specific distribuției de GNU+Linux, sau descărcând arhiva de pe situl oficial.
- Se alege din meniul →
- Clic pe Add
- Se aleg:
Protocol XMPP
Username Numele de utilizator ales în cont.ceata.org
Domain ceata.org
Resource ceata.org
Password Parola aleasă pentru contul LDAP
- Opțional, se mai pot configura:
Remember password Pentru a ține minte parola
Local alias Cum să fie afișat local numele propriu (în listă și/sau conversații - e.g. „eu”)
Use this buddy icon for this account O imagine reprezentativă pentru contul curent (avatar)
Aceste setări vor fi suficiente pentru a beneficia de serviciul nostru de jabber. Dar pentru a fi toți la un loc și comunica unii cu ceilalți, am creat și o conferință permanent deschisă, și voi enumera pașii pentru a ne găsi folosind Pidgin:
- Meniu: →
- Setări:
Account contul de XMPP @ceata.org
Room lăsat gol
Server conferinta.ceata.org
Handle numele de utilizator (fără @ceata.org)
- Apasă pe Room List
- Va apărea conferința denumită ceata
- În acest punct sunt 2 opțiuni:
- Apeși pe Join și vei intra în conferință, în care ne vei găsi și pe restul utilizatorilor
- Apeși pe Add chat și se va deschide o fereastră, unde poți seta diverși alți parametri, printre care Autojoin when account connects (pentru a intra automat în conferință la reconectare) și Alias, similară celei de la crearea contului în Pidgin. La final, Add.
Acestea fiind spuse, promit să actualizez articolul cu capturi de ecran din instalarea mea de Pidgin, și poate cu mai multe legături utile despre Jabber, servicii nelibere și XMPP. Acum sunt pe fugă ;-)
Ne vedem pe jabber!
miercuri 3 octombrie 2012, 03:20:45 +0300
Configurarea serverului ejabberd cu LDAP
Un nou episod din administrarea infrastructurii Ceata: am configurat serverul ejabberd pentru autentificarea utilizatorilor prin LDAP.
Am săpat cam o oră pentru a realiza dedesubturile configurării necesare. Nu voi intra în detalii privind cele experimentate, ci voi dezvălui direct configurația funcțională, exact așa cum este ea, explicată linie cu linie. Mai întâi, avem niște pași de urmat.
Notă: fișierul de configurare se află în majoritatea cazurilor în
/etc/ejabberd/ejabberd.cfg
Notificarea utilizatorilor conectați
Deși pare o glumă, e foarte important ca „firul” să fie liber. Nu pentru că ar periclita cumva configurarea, ci pentru a nu provoca confuzie și întreruperi ale serviciului (care uneori pot fi foarte deranjante) printre utilizatorii conectați. Nimeni nu ar dori ca în mijlocul conversației private cu vărul din America, să se întrerupă conexunea pentru că „adminul se joacă la server”.
Pentru a lista utilizatorii conectați se poate folosi de pe sistemul care găzduiește serverul ejabberd, comanda:
ejabberdctl connected-users
Având o listă cu utilizatorii conectați, varianta cea mai simplă e trimiterea unui mesaj „manual” fiecăruia dintre ei, dacă sunt puțini. Altfel, ar fi nevoie de mod_announce + comenzi Ad-hoc, ceea ce nu face obiectul articolului de față :-)
Dezactivarea autentificării interne
Tot ce e de făcut aici este de căutat linia:
{auth_method, internal}.
...și comentată prefixând-o cu
%%.
(Opțional) Activarea autentificării multiple
Dacă e dorită cumularea utilizatorilor interni ai ejabberd cu cei aflați în directorul LDAP, atunci vor trebui comentate toate liniile care definesc
{auth_method, "ceva"}și adăugată o nouă linie:
{host_config, "ceata.org", [{auth_method, [internal, ldap]}]}.
Am activat aici pentru gazda ceata.org autentificarea multiplă, prin care atât conturile interne ale ejabberd, cât și cele aflate în LDAP, vor fi validate.
Atenție: dacă vor exista conturi duplicat între ejabberd și LDAP, serverul va da eroare, cerând renunțarea la unul dintre ele! (probabil cel intern ar fi soluția acceptată în majoritatea cazurilor)
Configurarea ejabberd + LDAP
În această fază, avem următoarele instrucțiuni de vânat în ejabberd.cfg:
%% Authentication using LDAP %% {auth_method, ldap}. %% %% List of LDAP servers: {ldap_servers, ["localhost"]}. %% %% Encryption of connection to LDAP servers (LDAPS): %%{ldap_encrypt, none}. %%{ldap_encrypt, tls}. %% %% Port connect to LDAP server: {ldap_port, 389}. %% %% LDAP manager: %%{ldap_rootdn, "cn=admin,dc=example,dc=com"}. %% %% Password to LDAP manager: %%{ldap_password, "mysecurepasswd"}. %% %% Search base of LDAP directory: {ldap_base, "ou=people,dc=ceata,dc=org"}. %% %% LDAP attribute that holds user ID: {ldap_uids, [{"uid", "%u"}]}. %% %% LDAP filter: {ldap_filter, "(objectClass=inetOrgPerson)"}.
Acum, luate linie cu linie:
{auth_method, ldap}.- se configurează ejabberd să rezolve autentificarea prin LDAP
{ldap_servers, ["localhost"]}.- se definește o listă de server LDAP pe baza cărora să se facă autentificarea. În cazul nostru este doar unul, dar se pot introduce mai multe, separate prin virgulă.
<
%%{ldap_encrypt, none}. %%{ldap_encrypt, tls}.- comentăm ambele linii, deoarece gazda LDAP este pe mașina locală (în cazul nostru). Configurarea lor depinde în mare măsură de modul în care se preferă interacțiunea cu serverul LDAP.
{ldap_port, 389}.- evident, portul de conectare la LDAP
%% LDAP manager: %%{ldap_rootdn, "cn=admin,dc=example,dc=com"}. %% %% Password to LDAP manager: %%{ldap_password, "mysecurepasswd"}.
Important: în cazul nostru, utilizatorii se vor conecta la ejabberd prin aceleași parole definite în LDAP. Alternativ, se poate defini un cont care rezolvă autentificarea, dar în majoritatea cazurilor nu pare să fie nevoie.
{ldap_base, "ou=people,dc=ceata,dc=org"}.
Important: unde se face căutarea în schema LDAP (nodul în care sunt definiți utilizatorii)
{ldap_uids, [{"uid", "%u"}]}.
Important: câmpul dindirectorul LDAP care corespunde numelui de utilizator folosit pentru autentificarea în ejabberd. Alternativ, putem avea:
{ldap_uids, [{"email", "%u@example.com"}]}.- pentru situațiile specifice unei rețele interne, nu intru în detalii.
{ldap_filter, "(objectClass=inetOrgPerson)"}.- Opțional: un filtru suplimentar, pentru a asigura accesul la server numai utilizatorilor găsiți într-o anumită clasă.
Putem afla simplu aceste variabile prin comanda (exemplu concret):
ldapsearch -b "uid=user,ou=people,dc=ceata,dc=org" -D "uid=user,ou=people,dc=ceata,dc=org" -W -x -h ceata.org
urmată de introducerea parolei proprii (trebuie înlocuit „user” cu un utilizator real).
Test!
Folosind
/etc/init.d/ejabberd restart(pate varia în funcție de distribuție) ar trebui să se restarteze serverul jabber.
În caz de nevoie, setarea
{loglevel, 5}.(debug) în ejabberd.cfg și aruncarea unei priviri pe
/var/log/ejabberd/ejabberd.logar putea oferi indicii prețioase.
Acum, ar trebui să fie totul configurat pentru a comunica prin XMPP folosind contul de LDAP. Pentru orice problemă întâmpinată în configurarea unui asemenea mediu, sau sugestii de îmbunătățire a configurării, aștept pe mail întrebări etc.
sâmbătă 29 septembrie 2012, 02:31:40 +0300
Open Media Challenge, la câteva ore distanță
În scurt timp voi fi în Politehnică la hacatonul Open Media Challenge. Mai sunt încă destule sarcini de rezolvat, dar... românește, las' că e timp :-)
Nu pregătirea pentru tema aleasă e motiv de grabă. Dar trebuiesc integrate foarte multe modificări în situl thesponge.eu, pentru a-l aduce într-o formă relativ prezentabilă la nivel de cod și pentru a reflecta ultimele săptămâni de dezvoltare a frameworkului folosit.
Voi reveni cu continuarea poveștii, eventual după ce termin marea integrare. Ultimele cuvinte din changelog (în momentul în care scriu rândurile astea) sunt:
/!\ Warning: Big merge ahead!
Bonus
Cum scapi de artefactele unui fost depozit Subversion dintr-o structură complicată de directoare? Răspunsul e în tabăra GNU (mi-a salvat mult timp asta):
find ./ -name ".svn" | xargs rm -Rf
ACTUALIZARE
Deja sunt prea obosit să mai comentez. Am adus frameworkul la zi, și pregătesc un push gras în depozitele care țin codul thesponge.eu. Trebuie să închid ochii o oră u_u
Proiectul la care voi participa se numește „Easy to set up self-publishing solution”. La prima vedere, nu e deloc ceva care nu s-a mai făcut, și nici ceva care să necesite un hacaton sau o echipă întreagă. Dar în doi oameni, dintre care cel puțin unul mort de somn, nu sunt prea mari șanse la un sfârșit glorios. Dar am un milion de idei deja, o parte din ele izvorând din Chyrp și RazorCMS (lene sa pun legături, mergi la duckduckgo.com).
Gata. Stage, commit, push and deploy.
marţi 5 iunie 2012, 06:09:37 +0300
nanoblogger (3.4.2)
Ieri am dat peste nanoblogger, și am marcat-o ca fiind una dintre cele mai geniale descoperiri făcute vreodată de subsemnatul.
Scurtă descriere:
nanoblogger (versiunea curentă 3.4.2) este o aplicație care permite construirea simplă a unui jurnal online, cu conținut static.
- Majoritatea datelor sunt stocate direct pe disc, în fișiere txt și html.
- Configurarea se realizează printr-un fișier .conf, în cel mai pur stil *NIX.
- nb prezintă unelte automatizate pentru a ușura modificarea temei, articolelor, categoriilor etc.
- Articolele se pot edita direct în shell, sau pot fi împinse de la distanță prin rsync, scp sau ftp.
Procesul de instalare, precum și opțiunile de configurare, sunt disponibile pe situl nb, urmărind legăturile - „NanoBlogger Links” → „User Manual”. Tot pe situl proiectului este disponibilă și o listă cu jurnale care au sub capotă nanoblogger. Foarte puține sunt personalizate, fept ce atestă încă o dată genialitatea interfeței implicite :-)
Nu voi oferi redundanța instrucțiunilor din manual. Aproape tot ce este necesar pentru instalarea și configurarea nanoblogger se află deja acolo, explicat destul de bine. Voi oferi însă detalii asupra lucrurilor mai puțin evidente, sau nespecificate de documentație.
Structura directoarelor pe disc - recomandare
Voi descrie cum am procedat eu la instalare, puteți ajusta după plac. Pas cu pas.
- Se descarcă un tarball de pe situl proiectului.
-
Se dezarhivează în afara directorului rădăcină al serverului web. Mai sus un nivel e suficient, în cazul meu DocumentRoot era setat ca
/home/vnitu/public_html
și am desfăcut nb în/home/vnitu/nb
-
Am instalat jurnalul în
/home/vnitu/public_html/jurnal
. Atenție, directorul instalării nu trebuie creat manual, executabilulnb
o va face automat. Pentru a crea un jurnal nou trebuie navigat în directorul nb (există și posibilitatea de a administra mai multe jurnale cu nanoblogger) și se execută:
nb -b <director> add weblog
adică nb -b ../public_html/jurnal add weblog -
Pentru a administra jurnalul, trebuie navigat în directorul acestuia (ex. public_html/jurnal) și apelat executabilul
nb
folosind o cale relativă, urmat de comanda dorită:
../../nb/nb <comandă> (lista comenzilor uzuale se află în articolul demoe de după crearea jurnalului.) - În acest moment, nanoblogger este instalat, dar nu se pot accesa fișierele sursă ale aplicației suport prin intermediul unui navigator. Primul pas spre securizare este făcut :-)
Supliment la lista cu comensile de bază - tipuri de înregistrări în jurnal
nb add article(crearea de pagini noi)
Contrar denumirii, nu va crea articole noi în jurnal, ci pagini ale sitului, care nu vor apărea în arhive. Acestea sunt listate sub categoria „pagini” în bara laterală.
nb add tag
Creaza o etichetă nouă pentru postări - acestea trebuie create înainte de a fi utilizate pentru publicare.
nb --tag <id_tag> add entry
Adaugă o înregistrare în jurnal cu eticheta corespunzătoare id-ului (care se determină prin nb list tags).
Pentru a adăuga o înregistrare fără etichetă, se utilizează comanda directă nb add entry
Securizare++ Deși totul este instalat și funcționează, și sursele nb sunt ascunse de public, totuși fișiere esențiale, cum ar fi blog.conf, fișierul de configurare al jurnalului, sunt accesibile prin navigator, ele aflându-se în rădăcina proiectului. Voi oferi o soluție bazată pe Apache și .htaccess, cu mod_rewrite activat. Adică îl voi publica pe al meu:
# Configurăm fișierul principal (opțional) DirectoryIndex index.html # Interzicem accesul aplicațiilor client către toate fișierele sitului <Files ∼ ".*"> Order allow,deny Deny from all </Files> # Permitem în continuare fișierele .html <Files ∼ "^(.*)\.html"> Order allow,deny Allow from all </Files> # Dăm voie și la stiluri să se încarce <Files ∼ "^(.*)\.css"> Order allow,deny Allow from all </Files> # Activăm imagini, șî alte posibile formate uzuale <Files ∼ "^(.*)\.(jpg|gif|png|svg)"> Order allow,deny Allow from all </Files> # Activăm accesul pentru cazul în care se apelează direct rădăcina sitului <Files ∼ "^(.){0,0}"> Order allow,deny Allow from all </Files>
Acum nu mai putem accesa decât fișiere html, css, sau imagini. Nu conf-uri, nu txt-uri, nu alte fișiere inutile navigării.
Voi completa acest articol pe parcurs cu instrucțiuni despre traducerea interfeței sau modificare temei implicite. Nu voi uita nici de utilizarea de extensii, suport pentru comentarii sau alte detalii picante, dar incă am dubii dacă fac obiectul unei postări separate sau nu. Pentru moment, mă voi opri aici.
luni 4 iunie 2012, 09:52:00 +0300
Sigla pentru Ceata
Împreună cu Tibi am construit o versiune aproape finală pentru sigla nouă destinată fundației Ceata. Idei au curs din toate direcțiile, iar Dima Ursu a contribuit chiar cu câteva machete intermediare. Toate acestea au condus la dezvoltarea unui mare număr de variante.
În urma ultimei sesiuni de creație a siglei, am reușit să definitivăm o propunere finală. Evident, în acest moment suntem foarte curioși de impresiile provocate în rândul membrilor, care se pot trimite pe lista principală de discuții, Gâlceava.
Evidențiez mai jos ideile care au stat la baza creației, în caz că acestea nu sunt evidente:
- punctul de plecare este simbolul © barat (suntem împotriva noțiunii de copyright)
- simbolul tăiat formează litera „e” - eliberare (Ceata eliberează artele și tehnologiile actuale)
- denumirea fundației este scrisă mare, în centrul de atenție al textului
- dedesubt se află o etichetă, pentru identificare („fundația” - organizația principală; „din moldova” - filiala din Republica Moldova ș.a.m.d.)
Sper că evoluția siglei față de versiunea inițială a fost una pozitivă și că am reușit să reprezentăm grafic spiritul prezent în Ceata. Iar dacă nu, mi-am format un obicei în ultima perioadă de a sta cu Inkscape deschis în permanență :-)