Ei fac Mageia – echipa Sysadmin: instalarea și configurarea aplicațiilor pe serverele Mageia

În cadrul proiectului Mageia echipa sysadmin (administratorii de sistem) este responsabilă de instalarea, configurarea și mentenanța întregii infrastructuri, atît pentru utilizatori cît și pentru contribuitori. Pentru a ajuta publicul să înțeleagă mai bine ce face această echipă,  cît și să schimbăm anumite idei cu ceilalți administratori de sistem, vom publica o serie de articole în care vom explica exact ceea ce facem.

Sarcinile noastre principale sînt:

  • Instalarea serverelor în centrul de calcul
  • Instalarea și configurarea diverselor aplicații pe serverele Mageia
  • Diferite sarcini de administrare, precum actualizarea autorizațiilor de acces ale utilizatorilor, înlăturarea pachetelor, deplasarea pachetelor între depozite, etc.
  • Dezvoltarea și mentenanța a diverse unelte, precum componentele sistemului de clădit (de compilat pachete).

În acest prim articol se va prezenta procesul utilizat pentru instalarea și configurarea aplicațiilor pe serverele Mageia, se vor explica motivele pentru care facem acest lucru și de ce ați putea utiliza un proces similar pentru gestionarea propriilor voastre servere.

Procesul utilizat pentru configurarea aplicațiilor pe serverele Mageia se rezumă astfel:

  • Toate aplicațiile sînt instalate cu ajutorul pachetelor
  • Toate pachetele sînt compilate cu ajutorul sistemului de clădit
  • Toate pachetele sînt instalate și configurate cu utilizînd puppet

Pentru majoritatea împachetatorilor Mageia motivele sînt evidente de ce procedăm așa. Acest articol va încerca să explice aceste motive acelora care nu sînt neapărat împachetatori.

Compilarea și instalarea aplicațiilor

Una din sarcinile cele mai obișnuite ale administratorului de sistem este instalarea sau actualizarea aplicațiilor. Lucru ușor de făcut cînd distribuția voastră Linux vă pune la dispoziție pachetele aplicațiilor pe care doriți să le utilizați: acestea pot fi instalate cu ajutorul gestionarului de pachete. Totuși, în multe cazuri aplicațiile de care aveți nevoie nu sînt disponibile sau nu sînt la versiunea pe care doriți s-o utilizați.

Compilarea manuală

Mulți oameni cred că soluția cea mai simplă în acest caz este descărcarea codului sursă a aplicației, respectarea instrucțiunilor de compilare și executarea scriptului de instalare sau a fișierului Makefile. Totuși, cînd faceți asta puteți întîlni mai multe probleme:

  • Instalarea dependențelor de compilare
    Trebuie să aveți deja instalate în sistem toate dependențele necesare compilării. În majoritatea cazurilor vă veți dori să compilați aplicațiile pe un server de clădit (sau de compilare) dedicat pentru a evita să instalați prea multe dependențe de compilare pe mașina de destinație, iar apoi să copiați binarele rezultate pe mașinile voastre.
  • Gestionarea dependențelor
    Dacă utilizați arhive tar sau un server NFS pentru a distribui binarele aplicațiilor pe mașinile de destinație, va trebui să găsiți și să instalați dependențele necesare pe fiecare din mașinile unde vor fi utilizate aplicațiile. Apoi va trebui să vă notați undeva lista dependențelor, astfel încît să știți ce trebuie instalat cînd veți dori să utilizați acele aplicații pe un calculator nou.
  • Actualizarea aplicațiilor
    Cînd compilați o aplicație, este nevoie în mod frecvent să treceți anumite opțiuni specifice într-un script sau într-un fișier de configurare. Unele aplicații pot fi mai dificil de compilat, sau pot necesita anumite operații sau configurații complexe. Cînd actualizați o aplicație la o versiune mai recentă, vă veți dori să păstrați aceeași configurație de compilare ca mai înainte, pentru a evita introducerea de modificări nedorite ce pot provoca rupturi. Toate aceste lucruri nu sînt ușor de ținut minte, iar dacă nu le faceți zilnic riscați să le uitați. Prin urmare, este de preferat să salvați instrucțiunile de compilare într-un fișier pentru a le putea reutiliza data viitoare cînd veți avea nevoie să actualizați aplicația.
  • Aplicarea peticelor corective
    Uneori aplicațiile necesită mici modificări pentru a putea fi compilate, executate, sau pentru a avea o funcționalitate nouă. Este posibil să aplicați aceste modificările înainte de lansarea procesului de compilare. Totuși, aceste modificări se pot pierde la actualizarea aplicației cu o sursă nouă. Pentru a putea aplica aceleași modificări versiunilor ulterioare, va trebui să salvați acele modificări undeva sub forma unui petic corectiv.
  • Întreținerea unui jurnal de modificări
    Este ușor să uiți de ce s-au făcut anumite modificări sau de ce s-a actualizat o aplicație anume. Mai ales dacă nu sînteți singur și lucrați în echipă, în acest caz vă doriți să întrețineți un jurnal al modificărilor aduse aplicațiilor pe care le-ați compilat și instalat.
  • Cunoașterea versiunii aplicației instalate, dezinstalarea sau actualizarea aplicației
    Cunoașterea versiunii aplicației instalate în momentul de față poate fi foarte utilă. Este de asemenea foarte practic s-o puteți dezinstala, sau să instalați o versiune diferită pentru testare și depanare, sau să reveniți la o versiune anterioară în caz de probleme. Dacă utilizați procedura standard de instalare, majoritatea aplicațiilor vor instala fișiere în multe locuri diferite în sistem. Este dificil, dacă nu chiar imposibil, să știți ce fișiere sînt instalate, unde anume și care este versiunea utilizată. Cînd instalați o nouă versiune a aplicației, scripturile de instalare vor suprascrie fișierele vechi, dar nu vor înlătura și fișierele care nu mai sînt utilizate, fapt care poate crea confuzie sau probleme. Unii utilizatori vor încerca să evite aceste neplăceri instalînd fiecare aplicație în propriul ei director, indicînd numărul versiunii în numele directorului. Acest lucru poate crea alte probleme: majoritatea aplicațiilor nu au fost concepute ca să fie instalate în acest fel și va fi nevoie de operațiuni complexe pentru a le putea face să funcționeze. Iar selectarea versiunii care trebuie utilizată va necesita folosirea unor legături simbolice complexe sau actualizarea variabilelor de cale. Acest lucru devine și mai complicat cînd instalați diferite aplicații cu dependențe între ele. Pentru a evita acest gen de probleme, cea mai bună soluție este să utilizați cîteva unelte care vă permit să urmăriți ce fișiere sînt instalate, unde și în ce versiune.

Utilizarea pachetelor

Pentru a rezolva toate aceste probleme va trebui să folosiți unelte specifice. Poate vă doriți chiar să vă scrieți propriile scripturi și unelte pentru a gestiona toate aceste aspecte. Însă este mult mai recomandat să utilizați unelte care există deja, decît să vă utilizați propriile unelte specifice. Cele mai potrivite unelte pentru a rezolva aceste probleme sînt gestionarii de pachete.

Dacă nu ați creat pachete pînă acum va trebui să acordați puțină atenție ca să învățați cum se face. Vă vor economisi destul de mult timp. Utilizarea pachetelor pentru compilarea și instalarea aplicațiilor prezintă multe avantje:

  • Instalarea dependențelor de compilare
    Pachetele vă permit să compilați aplicațiile pe o mașină dedicată, iar pachetele rezultate vor putea fi astfel instalate pe mașinile de destinație fără să mai fiți nevoiți să instalați dependențele necesare compilării. Specificațiile pachetului sursă vă permit de asemenea să definiți lista dependențelor de compilare, astfel încît acestea să fie instalate automat pe mașina de clădit în momentul compilării pachetului și eventual să le puteți dezinstala după.
  • Gestionarea automată a dependențelor
    Urmărirea dependențelor nu este mereu o sarcină ușoară și poate fi consumatoare de timp. Din fericire majoritatea sistemelor de gestionare a pachetelor vor analiza fișierele incluse în pachet pentru a detecta în mod automat dependențele aplicației. În mod normal bibliotecile perl, python, ruby, PHP, C/C++ sînt detectate în mod automat în timpul compilării. Pentru dependențele care nu pot fi detectate automat, există posibilitatea de a defini în mod explicit dependențele direct în pachet. Toate acele dependențe vor putea fi instalate automat de gestionarul de pachete în cursul instalării.
  • Actualizarea aplicației
    Pachetul sursă conține instrucțiunile de compilare. Cîteodată procesul utilizat pentru compilarea aplicației poate evolua, însă în majoritatea cazurilor acesta rămîne la fel pentru toate versiunile aplicației. În acest caz, actualizarea aplicației este la fel de simplă ca actualizarea numărului versiunii în sursa pachetului și tastarea comenzii de lansare a compilării. Recompilarea aplicației cu opțiuni diferite este un lucru care poate fi făcut cu ușurință.
  • Aplicarea peticelor corective
    Pachetele sursă vă permit să includeți petice corective care vor fi aplicate în cursul compilării pachetului. În acest fel puteți întreține mai ușor lista modificărilor aduse aplicației. Cînd actualizați aplicația la o versiune mai recentă, aceleași modificări pot fi reaplicate cu ușurință.
  • Întreținerea unui jurnal de modificări
    Pachetele conțin un jurnal de modificări pe care-l puteți utiliza pentru a explica motivele modificărilor făcute, astfel toți membrii echipei știu de ce ați făcut o modificare acum 6 luni. Dacă utilizați o unealtă de gestionare a versiunilor precum git sau subversion pentru gestionarea pachetelor sursă (lucru recomandat), puteți utiliza jurnalul de comiteri pe post de jurnal de modificări.
  • Cunoașterea versiunii aplicației instalate, dezinstalarea și actualizarea aplicației
    Pachetele vă permit să urmăriți versiunea aplicației instalate în sistem. Ele vă permit de asemenea să instalați, dezinstalați sau să actualizați cu ușurință aplicațiile sau să aflați care pachet conține un anume fișier.

Construirea pachetelor într-un mediu curat și distribuirea pachetelor

De ce ar trebui să utilizați un sistem de clădit

Gestionarul de pachete este o unealtă foarte interesantă pentru gestionarea compilării și instalării aplicațiilor, însă nu esre suficient. Acesta va compila aplicațiile utilizînd uneltele și bibliotecile disponibile în sistem, după instalarea listei dependențelor de compilare.

Există totuși cîteva inconveniente dacă procedați așa:

  • Suport multi-distribuții
    Cîteodată, în infrastructură se pot întîlni distribuții diferite, sau versiuni diferite ale aceleiași distribuții. Un pachet construit pentru o distribuție nu funcționează neapărat pe o altă distribuție din cauză că versiunile unor componente sînt diferite sau incompatibile. Pentru a evita aceste probleme, pachetele trebuiesc compilate cu aceeași distribuție pe care vor fi utilizate.
  • Mediu de compilare curat
    Pachetul sursă include o listă cu dependențele de compilare ce trebuiesc instalate pentru a construi pachetul. Totuși, cînd construiți pachetul pe mașina proprie sau pe un server de compilare specific, în general există deja și alte pachete instalate care potențial vor putea fi utilizate în timpul compilării. Prin urmare este foarte ușor de uitat că acele pachete erau deja instalate, să uitați să le includeți în lista de dependențe de compilare și să nu vă dați seama de această problemă pentru simplul fapt că pe mașina voastră compilarea funcționează. S-ar putea ca sistemul vostru să aibă o configurație specifică sau actualizări de care ați uitat că le-ați instalat și care pot influența compilarea pachetului. Problema nu va fi remarcată pînă cînd altcineva va avea nevoie să compileze pachetul pe un alt sistem. Dacă vreți să vă măriți șansele de a putea reproduce recompilarea unui pachet pe viitor, va trebui să utilizați un mediu de compilare curat pentru construirea pachetelor. De obicei acest lucru se face prin crearea, pentru fiecare compilare de pachet, a unui nou chroot minimalist pentru distribuția selectată.

Odată ce pachetul a fost creat, va trebui copiat pe mașinile pe care va fi instalat. Distribuțiile oferă în mod normal unelte dedicate pentru acest lucru (apt-get pentru Debian, urpmi pentru Mageia, yum pentru Fedora, etc.). Aceste unelte vor descărca și instala în mod automat pachetul și dependențele sale de pe un server ce pune la dispoziție un depozit de pachete. Pentru a putea utiliza aceste unelte trebuie să configurați un depozit de pachete, care este un director ce conține toate pachetele disponibile și ceva metadate.

Toate acestea pot fi efectuate și manual, totuși este mult mai indicat să configurați un sistem de clădit care va gestiona totul în mod automat. Utilizarea unui sistem de clădit are multe avantaje:

  • Mai puțin predispus erorilor
    Construirea pachetului într-un chroot, copierea fișierelor rezultate în depozitul corect și regenerarea metadatelor depozitului nu este prea complicat, dar ia mult timp și este predispus erorilor dacă este efectuat manual. Folosirea unui sistem de clădit automat economisește timp și evită multe erori.
  • Mai ușor
    Dacă găsiți dificilă și consumatoare de timp sarcina compilării și instalării pachetelor într-un depozit, voi înșivă sau alți membri ai echipei voastre veți fi tentați s-o evitați și s-o faceți utilizînd o altă soluție.
  • Unelte pentru controlul versiunilor și trasabilitate
    Se recomandă utilizarea uneltelor de controlul versiunilor precum git sau subversion pentru a gestiona modificările din pachetele sursă. Un SCM conectat la un sistem de clădit va asigura că orice pachet disponibil în depozitul de pachete va fi disponibil și în depozitul de gestiune al surselor, oferidu-vă astfel trasabilitatea pachetelor.
  • Impunerea unei politici de împachetare
    Sînt disponibile cîteva unelte pentru impunerea unei politici de împachetare (rpmlint pentru rpm, lintian pentru deb). Posedarea unei politici de împachetare este utilă pentru producerea de pachete coerente. Sistemul de clădit poate fi configurat să execute automat teste de verificare a conformității cu politica de împachetare și să refuze încărcarea pachetelor necorespunzătoare.
  • Supraveghere
    Sistemul de clădit permite supravegherea ultimelor compilări. O interfață web oferă un raport al ultimei compilări și jurnalele de compilare. O listă de difuziune poate fi utilizată penru a primi notificări de compilare. Cînd lucrați în echipă, acest lucru permite tuturor membrilor echipei să urmărească ultimele modificări.
  • Automatizare
    Anumite pachete specifice pot necesita executarea unor sarcini suplimentare cînd sînt actualizate. Trimiterea unui email, extragerea unor fișiere pentru a actualiza un sit web sau alte sarcini pot fi scriptate ca să poată fi efectuate automat cînd un pachet specific este actualizat. Aceasta este metoda utilizată pentru a extrage din arborescența serverelor alternative fișierele instalatorului Mageia cînd un pachet este actualizat.

Cum se instalează un sistem de clădit Mageia?

Acesta va fi subiectul unui articol viitor.

Configurarea aplicațiilor

Instalarea aplicațiilor este de obicei numai prima parte a muncii efectuate de administratorii de sistem. A doua parte este configurarea aplicațiilor. Pachetul va efectua prima parte a configurației inițiale, însă de obicei este nevoie de lucru suplimentar.

Se poate proceda în mai multe feluri:

  • Editarea manuală a configurării direct pe server
  • Evitarea efectuării oricărei configurări manuale pe servere și utilizarea unei unelte de gestionarea configurărilor precum Cfengine, Puppet sau Ansible pentru a face asta în locul vostru.

Cînd utilizați o unealtă de gestionarea configurărilor, nu mai actualizați configurarea direct pe server, ci scrieți reguli în depozitul de gestionarea configurărilor ce vor fi aplicate automat de unealta de gestionarea configurărilor. Acest lucru nu este la fel de rapid ca editarea configurării direct pe server, însă are multe avantaje:

  • Gestionați infrastructura asemeni unui proiect aplicativ
    Uneltele de configurare vă permit să gestionați infrastructura asemeni oricărui proiect obișnuit de dezvoltare de aplicații. Multe din uneltele disponibile pentru dezvoltatori pot fi utilizate pentru gestionarea versiunilor surselor, propunerea de corectări, revizia codului, teste automate, etc.
  • Lucrul în echipă
    Dacă lucrați în echipă, puteți stoca regulile pentru configurarea serverului într-un depozit comun de gestiune a versiunilor surselor, făcînd astfel posibilă urmărirea și verificarea modificărilor efectuate pe servere de către toți membrii echipei.
  • Documentație
    Este foarte util să dispuneți de documentație cu privire la aplicațiile instalate pe servere și cum sînt configurate, mai ales cînd mai multe persoane pot lucra cu ele. O problemă frecvent întîlnită la documentație este că, dacă cineva a scris-o inițial, nimeni nu o mai actualizează, iar așa în scurt timp nu mai este de actualitate. Este foarte ușor să faci o modificare și să uiți s-o documentezi, sau că există pe undeva o documentație care trebuie actualizată. Este important să ai o documentație la zi, iar uneori o documentație învechită cu informații false poate fi mai nocivă decît lipsa ei. Depozitul de gestionare a configurărilor poate fi văzut ca un fel de documentație a infrastructurii, iar după cum a fost utilizat pentru instalarea infrastructurii, este probabil cel mai actualizat decît orice altă documentație. În programare, dacă ai cod auto-documentat sau cod care poate fi înțeles fără documentație este în general mai bine decît să ai o documentație menținută separat, iar acest lucru este valabil și pentru administrarea sistemului.
  • Testarea mediului și reproductibilitate
    Utilizarea unei unelte de configurare permite reproducerea configurației unui server pe un alt server. Acest lucru este util cînd trebuie înlocuit sau adăugat un server, sau pentru a crea un mediu de test.
  • Menținerea unei configurații corecte
    Unealta de gestionare a configurărilor se va executa la intervale regulate de timp pentru a verifica corectitudinea configurației și în funcție de caz va aplica modificările necesare.
  • Reutilizare
    Ca și în programare, unealta de gestionare a configurărilor vă permite să reutilizați componentele pe care le-ați creat. În mod normal puteți crea module cu parametri pentru a adapta comportamentul modulului. Uneori puteți găsi pe Internet module existente, însă din păcate multe dintre ele vor necesita modificări importante pentru a le adapta nevoilor proprii. Primelor versiuni de puppet le lipseau funcționalități importante precum clasa parametrată, prin urmare crearea componentelor reutilizabine era dificilă, însă lucrurile au evoluat de atunci.

Ce unealtă de gestionare a configurărilor putem utiliza?

Cînd am demarat configurarea serverelor Mageia, la începutul proiectului, ne-am decis să utilizăm puppet, după ce ne-am uitat la diferitele unelte disponibile. Pe atunci Puppet părea cea mai interesantă unealtă de gestionare a configurărilor. În ultimii ani lucrurile au evoluat mult în acest domeniu și există și alte alternative pe care le puteți testa înainte de a vă decide pe care să-o utilizați:

Modulele puppet pentru Mageia

Modulele puppet pe care le utilizăm pentru a configura serverele Mageia sînt disponibile într-un depozit svn.

Ce trebuie ameliorat

Procesul actual este bun, însă mai sînt unele lucruri care pot fi amelioarte. Dacă doriți să contribuiți, însă nu știți cam ce ar fi util, iată cîteva idei:

  • Generarea automată a pachetelor
    Anumite limbaje precum Perl, Python sau Ruby oferă propriul lor sistem de împachetare pentru biblioteci. Multe persoane preferă aceste pachete în locul pachetelor RPM pentru că pachetele din distribuție nu sînt mereu disponibile și nici la zi. Avantajul acelor pachete este că sînt construite în amonte,  deci disponibile imediat. Problema este că de obicei nu sînt foarte bine integrate cu restul sistemului și necesită utilizarea a două sisteme de împachetare diferite, fapt care complică lucrurile și mai mult. În multe cazuri, oamenii nu sînt împachetatori experimentați, prin urmare utilizează pachetele specifice limbajului, gîndind că este prea complicat să le împacheteze sau că nu au timp să facă acest lucru. Dacă era mai simplă conversia între acele pachete și RPM, am beneficia de o mai bună disponibilitate a pachetelor bine integrate cu restul sistemului. Spre norocul nostru, acele pachete specifice ale limbajului conțin de obicei toate informațiile care sînt necesare penru a le împacheta în RPM (descriere, licență, dependențe, etc.), prin urmare crearea unui pachet RPM devine o simplă conversie a acelor informații în formatul RPM și poate fi automatizată. Mulțimită efortului lui Jérôme Quelin depus pentru cpan2dist este posibil să generăm pachetele RPM Mageia din modulele CPAN în mod automat. Avest lucru ne permite să avem la dispoziție 3300 de pachete Perl în distribuție. Ne trebuiesc unelte similape pentru python, ruby și alte pachete de limbaje.
  • Configurarea sistemului de clădit
    Utilizăm un sistem de clădit pentru a ne construi pachetele pentru că dispunem deja de un sistem de clădit pentru a construi distribuția Mageia. Deci nu este prea mult de lucru să-l configurăm pentru a dispune de propriul nostru depozit de pachete. Totuși, instalarea unui sistem de clădit Mageia nu este un lucru ușor, iar persoanele care nu doresc să construiască o distribuție completă nu vor să petreacă prea mult timp cu configurarea unui sistem de clădit. Prin urmare trebuie să ameliorăm procesul de configurare al sistemului de clădit pentru a-l face mult mai simplu. În momentul de față ne lipsește documentația care să explice cum se face, utilizînd modulul nostru puppet. Un articol viitor pe blog va explica cum se face acest lucru.
  • Suport pentru OBS
    O altă alternativă este să utilizăm OBS (Open Build Service), care este un sistem de compilare agreabil cu suport pentru multiple distribuții. Totuși nu este încă adaptat pentru Mageia. Trebuie să corectăm acest lucru ca să putem gestiona depozitele Mageia cu OBS.
  • Suport Mageia în Ansible și Salt Stack
    Ansible și Salt Stack sînt ambele unelte interesante pentru gestionarea configurărilor. Pentru moment le lispește suportul pentru instalarea pachetelor cu urpmi. Actualizare: Philippe Makowski lucrează la un modul urpmi pentru Ansible, dar nu este încă integrat în amonte, iar contribuțiile sînt bine venite.

Notă: Articol original publicat în engleză de boklm

Despre Piratu'

Mageia Romanian coordinator and translator since the beginning of the adventure, September 2010.
Acest articol a fost publicat în administrare sistem, Ei fac Mageia, împachetare. Salvează legătura permanentă.

Comentariile nu sunt permise.