{"id":38929,"date":"2019-10-31T22:26:48","date_gmt":"2019-10-31T19:26:48","guid":{"rendered":"https:\/\/prohoster.info\/blog\/linux-mnogolikij-kak-rabotat-na-lyubom-distributive\/"},"modified":"2019-10-31T22:26:48","modified_gmt":"2019-10-31T19:26:48","slug":"linux-mnogolikij-kak-rabotat-na-lyubom-distributive","status":"publish","type":"post","link":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/linux-mnogolikij-kak-rabotat-na-lyubom-distributive","title":{"rendered":"Linux polivalent: cum s\u0103 lucrezi pe orice distribu\u021bie","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Linux polivalent: cum s\u0103 lucrezi pe orice distribu\u021bie\" src=\"\/wp-content\/uploads\/2019\/10\/ee1aaad566204532c974a3ce8f13b915.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCrearea unei aplica\u021bii de backup care s\u0103 func\u021bioneze pe orice distribu\u021bie este o sarcin\u0103 complicat\u0103. Pentru a asigura func\u021bionarea Veeam Agent for Linux pe distribu\u021biile de la Red Hat 6 \u0219i Debian 6, p\u00e2n\u0103 la OpenSUSE 15.1 \u0219i Ubuntu 19.04, este necesar s\u0103 rezolvi o serie de probleme, mai ales av\u00e2nd \u00een vedere c\u0103 software-ul con\u021bine un modul de kernel.<\/p>\n<p>Articolul a fost creat pe baza materialelor prezentate la conferin\u021b\u0103 <noindex><a rel=\"nofollow\" href=\"https:\/\/linuxpiter.com\/materials\/2636\"> LinuxPiter 2019<\/a><\/noindex>.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nLinux nu este doar un sistem de operare popular. De fapt, este o platform\u0103 pe care po\u021bi construi ceva unic, ceva propriu. Datorit\u0103 acestui fapt, Linux are multe distribu\u021bii care se diferen\u021biaz\u0103 prin setul de componente software. \u0218i aici apare problema: pentru ca produsul software s\u0103 func\u021bioneze pe orice distribu\u021bie, trebuie s\u0103 consideri specificit\u0103\u021bile fiec\u0103rei distribu\u021bii.<\/p>\n<h2>Gestionare de pachete. .deb vs .rpm<\/h2>\n<p>\nS\u0103 \u00eencepem cu problema evident\u0103 a distribuirii produsului pentru diferite distribu\u021bii.<br \/>\nCel mai tipic mod de a distribui produsele software este de a publica un pachet \u00een repository, astfel \u00eenc\u00e2t managerul de pachete integrat \u00een sistem s\u0103-l poat\u0103 instala de acolo.<br \/>\nTotu\u0219i, avem dou\u0103 formate populare de pachete: <i>rpm<\/i> \u0219i <i>deb<\/i>. Asta \u00eenseamn\u0103 c\u0103 va trebui s\u0103 sus\u021binem fiecare.<\/p>\n<p>\u00cen lumea pachetelor deb, nivelul de compatibilitate este uimitor. Acela\u0219i pachet se instaleaz\u0103 \u0219i func\u021bioneaz\u0103 la fel de bine at\u00e2t pe Debian 6, c\u00e2t \u0219i pe Ubuntu 19.04. Standarde ale procesului de construire a pachetelor \u0219i lucrul cu acestea, stabilite \u00een vechile distribu\u021bii Debian, r\u0103m\u00e2n relevante \u0219i \u00een noile Linux Mint \u0219i elementary OS. Prin urmare, \u00een cazul Veeam Agent for Linux, este suficient un singur pachet deb pentru fiecare platform\u0103 hardware.<\/p>\n<p>\u00cen schimb, \u00een lumea pachetelor rpm, diferen\u021bele sunt mari. \u00cen primul r\u00e2nd, din cauz\u0103 c\u0103 exist\u0103 doi distribuitori complet independen\u021bi, Red Hat \u0219i SUSE, pentru care compatibilitatea nu este necesar\u0103. \u00cen al doilea r\u00e2nd, ace\u0219ti distribuitori au distribu\u021bii cu suport tehnic \u0219i experimentale. \u00centre acestea, compatibilitatea nu este necesar\u0103 nici ea. Am ajuns la situa\u021bia \u00een care pentru el6, el7 \u0219i el8 avem pachete proprii. Un pachet separat pentru Fedora. Pachete pentru SLES11 \u0219i 12 \u0219i unul separat pentru openSUSE. Problema principal\u0103 sunt dependen\u021bele \u0219i numele pachetelor. <\/p>\n<h2>Problema dependen\u021belor<\/h2>\n<p>\nDin p\u0103cate, acelea\u0219i pachete apare frecvent sub denumiri diferite \u00een diferite distribu\u021bii. Mai jos se afl\u0103 o list\u0103 incomplet\u0103 a dependen\u021belor pachetului veeam.<\/p>\n<p>Pentru EL7:<br \/>\nPentru SLES 12:<\/p>\n<ul>\n<li>libblkid<\/li>\n<li>libgcc<\/li>\n<li>libstdc++<\/li>\n<li>ncurses-libs<\/li>\n<li>fuse-libs<\/li>\n<li>file-libs<\/li>\n<li>veeamsnap = 3.0.2.1185<\/li>\n<\/ul>\n<ul>\n<li>libblkid1<\/li>\n<li>libgcc_s1<\/li>\n<li>libstdc++6<\/li>\n<li>libmagic1<\/li>\n<li>libfuse2<\/li>\n<li>veeamsnap-kmp = 3.0.2.1185<\/li>\n<\/ul>\n<p>\nCa urmare, lista dependen\u021belor devine unic\u0103 pentru distribu\u021bie. <\/p>\n<p>Mai r\u0103u este c\u00e2nd o versiune actualizat\u0103 \u00eencepe s\u0103 se ascund\u0103 sub un nume vechi de pachet. <\/p>\n<p><b>Exemplu:<\/b><\/p>\n<p>\u00cen Fedora 24 s-a actualizat pachetul <i>ncurses<\/i> de la versiunea 5 la versiunea 6. Produsul nostru a fost compilat exact cu versiunea 5, pentru a asigura compatibilitatea cu distribu\u021biile vechi. Pentru a folosi vechea versiune 5 a bibliotecii pe Fedora 24, a fost necesar s\u0103 se utilizeze pachetul <i>ncurses-compat-libs<\/i>. <\/p>\n<p>Ca rezultat, pentru Fedora apar dou\u0103 pachete, cu dependen\u021be diferite. <\/p>\n<p>Apoi devine mai interesant. Dup\u0103 o nou\u0103 actualizare a distribu\u021biei, pachetul <i>ncurses-compat-libs<\/i> cu versiunea 5 a bibliotecii devine inaccesibil. Pentru distribuitor, este costisitor s\u0103 trag\u0103 biblioteci vechi \u00een noua versiune a distribu\u021biei. Dup\u0103 un timp, problema s-a repetat \u0219i \u00een distribu\u021biile SUSE.<\/p>\n<p>Ca urmare, pentru unele distribu\u021bii a fost necesar\u0103 abandonarea dependen\u021bei exprese de <i>ncurses-libs<\/i>, iar produsul a fost ajustat pentru a putea func\u021biona cu orice versiune a bibliotecii.<\/p>\n<p>Apropo, \u00een versiunea a 8-a Red Hat nu mai exist\u0103 metapachetul <i>python<\/i>, care se referea la vechiul bun <i>python 2.7<\/i>. Exist\u0103 <i>python2<\/i> \u0219i <i>python<\/i>3. <\/p>\n<h2>Alternativa managerelor de pachete<\/h2>\n<p>\nProblema dependen\u021belor este veche \u0219i bine cunoscut\u0103. S\u0103 ne amintim m\u0103car de Dependency hell. <br \/>\nA uni diverse biblioteci \u0219i aplica\u021bii astfel \u00eenc\u00e2t toate s\u0103 func\u021bioneze stabil \u0219i s\u0103 nu intre \u00een conflict este, de fapt, problema pe care orice distribuitor Linux \u00eencearc\u0103 s\u0103 o rezolve.<\/p>\n<p>Complet diferit \u00eencearc\u0103 s\u0103 abordeze aceast\u0103 problem\u0103 managerul de pachete <b>Snappy<\/b> de la Canonical. Ideea principal\u0103: aplica\u021bia ruleaz\u0103 \u00eentr-un sandbox izolat \u0219i protejat de sistemul principal. Dac\u0103 aplica\u021biei \u00eei sunt necesare biblioteci, acestea sunt furnizate \u00eempreun\u0103 cu aplica\u021bia \u00een sine.<\/p>\n<p><b>Flatpak<\/b> permite de asemenea rularea aplica\u021biilor \u00een sandbox, folosind Linux Containers. Conceptul de sandbox este folosit \u0219i de <b>AppImage<\/b>.<\/p>\n<p>Aceste solu\u021bii permit crearea unui singur pachet pentru orice distribu\u021bie. \u00cen cazul <b>Flatpak<\/b> instalarea \u0219i rularea aplica\u021biei sunt posibile chiar \u0219i f\u0103r\u0103 cuno\u0219tin\u021ba administratorului.<\/p>\n<p>Principala problem\u0103 este c\u0103 nu toate aplica\u021biile pot func\u021biona \u00een sandbox. Unele au nevoie de acces direct la platform\u0103. Nu mai vorbesc despre modulele kernel-ului care depind strict de kernel \u0219i nu se \u00eencadreaz\u0103 \u00een conceptul de sandbox. <\/p>\n<p>O a doua problem\u0103 este c\u0103 distribu\u021biile populare \u00een mediul enterprise de la Red Hat \u0219i SUSE nu suport\u0103 \u00eenc\u0103 Snappy \u0219i Flatpak. <\/p>\n<p>Din acest motiv, Veeam Agent for Linux nu este disponibil pe <noindex><a rel=\"nofollow\" href=\"https:\/\/snapcraft.io\/\">snapcraft.io<\/a><\/noindex> nici pe <noindex><a rel=\"nofollow\" href=\"https:\/\/flathub.org\/home\">flathub.org<\/a><\/noindex>.<\/p>\n<p>\u00cen \u00eencheierea acestei \u00eentreb\u0103ri despre managerii de pachete, voi men\u021biona c\u0103 exist\u0103 op\u021biunea de a renun\u021ba complet la managerii de pachete, combin\u00e2nd \u00eentr-un singur pachet fi\u0219ierele binare \u0219i un script pentru instalarea acestora. <\/p>\n<p>Acest bundle permite crearea unui pachet comun pentru diferite distribu\u021bii \u0219i platforme, efectu\u00e2nd un proces de instalare interactiv, realiz\u00e2nd personaliz\u0103rile necesare. M-am \u00eent\u00e2lnit cu astfel de pachete pentru Linux doar de la VMware.<\/p>\n<h2>Problema actualiz\u0103rilor<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Linux polivalent: cum s\u0103 lucrezi pe orice distribu\u021bie\" src=\"\/wp-content\/uploads\/2019\/10\/aa14b10a434c28541574421d97807de7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nChiar dac\u0103 toate problemele de dependen\u021b\u0103 sunt rezolvate, programul poate func\u021biona diferit pe aceea\u0219i distribu\u021bie. Motivul sunt actualiz\u0103rile.<\/p>\n<p>Exist\u0103 3 strategii de actualizare:<\/p>\n<ul>\n<li>Cea mai simpl\u0103 este s\u0103 nu actualizezi niciodat\u0103. Configurezi serverul \u0219i ui\u021bi de el. De ce sunt necesare actualiz\u0103rile dac\u0103 totul func\u021bioneaz\u0103? Problemele \u00eencep la primul apel \u00een serviciul de suport tehnic. Creatorul distribu\u021biei sus\u021bine doar versiunea actualizat\u0103. <\/li>\n<li>Po\u021bi avea \u00eencredere \u00een distribuitor \u0219i s\u0103 configurezi actualiz\u0103ri automate. \u00cen acest caz, apelul \u00een serviciul de suport este probabil imediat dup\u0103 o actualizare e\u0219uat\u0103.<\/li>\n<li>Op\u021biunea de actualizare manual\u0103 doar dup\u0103 testarea pe infrastructura de testare este cea mai sigur\u0103, dar \u0219i costisitoare \u0219i laborioas\u0103. Nu to\u021bi \u00ee\u0219i permit acest lux.<\/li>\n<\/ul>\n<p>\nDeoarece diferi\u021bi utilizatori aplic\u0103 diferite strategii de actualizare, este necesar s\u0103 sus\u021binem at\u00e2t cea mai recent\u0103 versiune, c\u00e2t \u0219i toate versiunile anterioare. Acest lucru complic\u0103 at\u00e2t procesul de dezvoltare, c\u00e2t \u0219i cel de testare, ad\u0103ug\u00e2nd dureri de cap echipei de suport.<\/p>\n<h2>Diversitatea platformelor hardware<\/h2>\n<p>\nDiverse platforme hardware reprezint\u0103 o problem\u0103, \u00een mare parte specific\u0103 codului nativ. Cel pu\u021bin, trebuie s\u0103 compil\u0103m binare pentru fiecare platform\u0103 suportat\u0103.<\/p>\n<p>\u00cen proiectul Veeam Agent for Linux, nu reu\u0219im s\u0103 suport\u0103m nimic de genul RISC.<\/p>\n<p>Nu voi detalia prea mult asupra acestei probleme. Voi sublinia doar principalele dificult\u0103\u021bi: tipuri dependente de platform\u0103, cum ar fi <code>size_t<\/code>, alinierea structurilor \u0219i ordinea byte-urilor.<\/p>\n<h2>Linierea static\u0103 \u0219i\/sau dinamic\u0103<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Linux polivalent: cum s\u0103 lucrezi pe orice distribu\u021bie\" src=\"\/wp-content\/uploads\/2019\/10\/dc473aad4ea0818940af7eafdbc641fd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u00centrebarea \"Cum s\u0103 ne leag\u0103 de biblioteci \u2013 dinamic sau static?\" merit\u0103 discutat\u0103.<\/p>\n<p>\u00cen general, aplica\u021biile C\/C++ pentru Linux folosesc leg\u0103tura dinamic\u0103. Acest lucru func\u021bioneaz\u0103 excelent dac\u0103 aplica\u021bia este compilat\u0103 special pentru o distribu\u021bie specific\u0103.<\/p>\n<p>Dac\u0103 \u00eens\u0103 dorim s\u0103 acoperim diferite distribu\u021bii cu un singur fi\u0219ier binar, va trebui s\u0103 ne orient\u0103m dup\u0103 cea mai veche distribu\u021bie suportat\u0103. Pentru noi, aceasta este Red Hat 6. Aceasta con\u021bine gcc 4.4, care nici m\u0103car nu suport\u0103 complet standardul C++11. <noindex><a rel=\"nofollow\" href=\"https:\/\/gcc.gnu.org\/projects\/cxx-status.html\">complet<\/a><\/noindex>.<\/p>\n<p>Noi compil\u0103m proiectul nostru folosind gcc 6.3, care suport\u0103 complet C++14. Evident, \u00een acest caz, pe Red Hat 6 trebuie s\u0103 aducem biblioteca libstdc++ \u0219i boost \u00eempreun\u0103. Cel mai simplu este s\u0103 ne leg\u0103m static de acestea.<\/p>\n<p>Dar din p\u0103cate, nu cu toate bibliotecile se poate face leg\u0103tura static\u0103.<\/p>\n<p>\u00cen primul r\u00e2nd, bibliotecile de sistem, cum ar fi <i>libfuse<\/i>, <i>libblkid<\/i> trebuie legate dinamic, pentru a fi siguri c\u0103 sunt compatibile cu kernelul \u0219i modulele sale. <\/p>\n<p>\u00cen al doilea r\u00e2nd, exist\u0103 o nuan\u021b\u0103 legat\u0103 de licen\u021be. <\/p>\n<p>Licen\u021ba GPL permite \u00een principiu legarea bibliotecilor doar cu cod surs\u0103 open source. MIT \u0219i BSD permit legarea static\u0103 \u0219i permit inclusiv includerea bibliotecilor \u00een proiect. Pe de alt\u0103 parte, LGPL nu pare s\u0103 se opun\u0103 leg\u0103rii statice, dar solicit\u0103 furnizarea fi\u0219ierelor necesare pentru legare \u00een mod liber. <\/p>\n<p>\u00cen general, utilizarea leg\u0103rii dinamice va asigura c\u0103 nu trebuie s\u0103 oferim nimic.<\/p>\n<h2>Compilarea aplica\u021biilor C\/C++<\/h2>\n<p>\nPentru a compila aplica\u021bii C\/C++ pentru diferite platforme \u0219i distribu\u021bii, este suficient s\u0103 alegem sau s\u0103 compil\u0103m un gcc de versiune corespunz\u0103toare \u0219i s\u0103 folosim compilatoare \u00eencruci\u0219ate pentru arhitecturi specifice, compil\u00e2nd toat\u0103 gama de biblioteci. Acest lucru este realizabil, dar destul de complicat. \u0218i nu exist\u0103 nicio garan\u021bie c\u0103 compilatorul \u0219i bibliotecile alese vor produce o variant\u0103 func\u021bional\u0103. <\/p>\n<p>Un avantaj evident: infrastructura este mult simplificat\u0103, deoarece \u00eentregul proces de compilare poate fi efectuat pe o singur\u0103 ma\u0219in\u0103. \u00cen plus, este suficient s\u0103 compil\u0103m un set de fi\u0219iere binare pentru o singur\u0103 arhitectur\u0103 \u0219i le putem ambala \u00een pachete pentru diferite distribu\u021bii. A\u0219a sunt compilate pachetele veeam pentru Veeam Agent for Linux.<\/p>\n<p>\u00cen contrast cu aceast\u0103 op\u021biune, se poate prepara pur \u0219i simplu o ferm\u0103 de build, adic\u0103 mai multe ma\u0219ini pentru compilare. Fiecare astfel de ma\u0219in\u0103 va asigura compilarea aplica\u021biei \u0219i construirea pachetului pentru o distribu\u021bie specific\u0103 \u0219i o arhitectur\u0103 anume. \u00cen acest caz, compilarea se realizeaz\u0103 cu instrumentele preg\u0103tite de distribuitor. Asta \u00eenseamn\u0103 c\u0103 etapa de preg\u0103tire a compilatorului \u0219i selec\u021bia bibliotecilor este eliminat\u0103. \u00cen plus, procesul de construire poate fi u\u0219or paralelizat. <\/p>\n<p>Exist\u0103, totu\u0219i, \u0219i un dezavantaj al acestei abord\u0103ri: pentru fiecare distribu\u021bie \u00een cadrul acelea\u0219i arhitecturi va trebui s\u0103 se construiasc\u0103 propriul set de fi\u0219iere binare. De asemenea, un alt dezavantaj este c\u0103 un astfel de num\u0103r de ma\u0219ini necesit\u0103 \u00eentre\u021binere, precum \u0219i alocarea unui volum mare de spa\u021biu pe disc \u0219i memorie RAM. <\/p>\n<p>Astfel se construiesc pachetele KMOD pentru modulul kernel veeamsnap pentru distribu\u021biile Red Hat.<\/p>\n<h2>Open Build Service<\/h2>\n<p>\nColegi de la SUSE au \u00eencercat s\u0103 implementeze un fel de solu\u021bie de mijloc sub forma unui serviciu special pentru compilarea aplica\u021biilor \u0219i construirea pachetelor \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/openbuildservice.org\/\">openbuildservice<\/a><\/noindex>.<\/p>\n<p>\u00cen esen\u021b\u0103, acesta este un hipervizor care creeaz\u0103 o ma\u0219in\u0103 virtual\u0103, instaleaz\u0103 toate pachetele necesare \u00een aceasta, execut\u0103 compilarea aplica\u021biei \u0219i construirea pachetului \u00een acest mediu izolat, dup\u0103 care respectiva ma\u0219in\u0103 virtual\u0103 este eliberat\u0103.<\/p>\n<p><img decoding=\"async\" alt=\"Linux polivalent: cum s\u0103 lucrezi pe orice distribu\u021bie\" src=\"\/wp-content\/uploads\/2019\/10\/93d2a70c589a7186ecef85a7863e59e8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPlanificatorul implementat \u00een OpenBuildService va determina singur c\u00e2te ma\u0219ini virtuale poate porni pentru o vitez\u0103 optim\u0103 de construire a pachetelor. Mecanismul \u00eencorporat de semnare va semna automat pachetele \u0219i le va \u00eenc\u0103rca \u00een depozitul \u00eencorporat. Sistemul de control al versiunilor va p\u0103stra istoricul modific\u0103rilor \u0219i construc\u021biilor. R\u0103m\u00e2ne doar s\u0103 ad\u0103uga\u021bi sursele dvs. \u00een acest sistem. Nu este necesar nici s\u0103 opera\u021bi un server, ci se poate folosi un serviciu deschis.<\/p>\n<p>Aici, totu\u0219i, exist\u0103 o problem\u0103: un astfel de combinator este greu de integrat \u00een infrastructura existent\u0103. De exemplu, controlul versiunilor nu este necesar, deoarece avem deja unul pentru surse. Mecanismul de semnare este diferit: se utilizeaz\u0103 un server special. De asemenea, depozitul nu este necesar. <\/p>\n<p>\u00cen plus, suportul pentru alte distribu\u021bii \u2014 de exemplu, Red Hat \u2014 este realizat destul de slab, ceea ce este complet explicabil.<\/p>\n<p>Un avantaj al acestui serviciu este suportul rapid pentru urm\u0103toarea versiune a distribu\u021biei SUSE. P\u00e2n\u0103 la anun\u021bul oficial al lans\u0103rii, pachetele necesare pentru compilare sunt disponibile pe repository-ul public. \u00cen lista distribu\u021biilor disponibile pe OpenBuildService apare un nou element. Bif\u0103m c\u0103su\u021ba \u0219i acesta este ad\u0103ugat \u00een planul de construire. Astfel, ad\u0103ugarea unei noi versiuni a distribu\u021biei se face practic cu un singur clic.<\/p>\n<p>\u00cen infrastructura noastr\u0103 folosind OpenBuildService, se compileaz\u0103 toat\u0103 diversitatea pachetelor KMP ale modulului kernel veeamsnap pentru distribu\u021biile SUSE.<\/p>\n<p>A\u0219 dori s\u0103 m\u0103 opresc acum asupra unor \u00eentreb\u0103ri specifice pentru modulele kernel.<\/p>\n<h2>kernel ABI<\/h2>\n<p>\nModulele kernel Linux au fost distribuite istoric sub form\u0103 de cod surs\u0103. Motivul este c\u0103 creatorii kernel-ului nu se \u00eencarc\u0103 cu grija de a men\u021bine un API stabil pentru modulele kernel, cu at\u00e2t mai pu\u021bin la nivel binar, numit mai departe kABI.<\/p>\n<p>Pentru a compila un modul pentru un kernel vanilla, sunt necesare neap\u0103rat header-urile exact pentru acest kernel, iar acesta va func\u021biona doar pe acest kernel. <\/p>\n<p>DKMS permite automatizarea procesului de compilare a modulelor la actualizarea kernel-ului. Ca urmare, utilizatorii repository-ului Debian (\u0219i al numeroaselor sale deriva\u021bii) folosesc module kernel din repository-ul distribuitorului sau compilate din surse cu ajutorul DKMS.<\/p>\n<p>Cu toate acestea, o astfel de situa\u021bie nu este foarte satisf\u0103c\u0103toare pentru segmentul Enterprise. Distribuitorii de cod proprietar doresc s\u0103 ofere produsul sub form\u0103 de binare compilate. <\/p>\n<p>Administratorii nu doresc s\u0103 p\u0103streze instrumente de dezvoltare pe serverele de produc\u021bie din motive de securitate. Distribuitorii Enterprise Linux \u2014 precum Red Hat \u0219i SUSE \u2014 au decis c\u0103 pentru utilizatorii lor pot sus\u021bine un kABI stabil. Ca urmare, au ap\u0103rut pachete KMOD pentru Red Hat \u0219i pachete KMP pentru SUSE.<\/p>\n<p>Esenta unei astfel de solu\u021bii este destul de simpl\u0103. Pentru o versiune specific\u0103 a distribu\u021biei, API-ul kernel-ului este \u00eenghe\u021bat. Distribuitorul declar\u0103 c\u0103 folose\u0219te specific kernel-ul, de exemplu, 3.10 \u0219i aduce doar corec\u021bii \u0219i \u00eembun\u0103t\u0103\u021biri care nu afecteaz\u0103 interfe\u021bele kernel-ului, iar modulele compilate pentru kernel-ul ini\u021bial pot fi utilizate pentru toate cele ulterioare f\u0103r\u0103 recompilare.<\/p>\n<p>Red Hat declar\u0103 c\u0103 ofer\u0103 compatibilitate kABI pentru distribu\u021biile sale pe \u00eentreaga durat\u0103 de via\u021b\u0103. Asta \u00eenseamn\u0103 c\u0103 un modul compilat pentru rhel 6.0 (lansat \u00een noiembrie 2010) ar trebui s\u0103 func\u021bioneze \u0219i pe versiunea 6.10 (lansat\u0103 \u00een iunie 2018). Asta \u00eenseamn\u0103 aproape 8 ani. Din p\u0103cate, aceast\u0103 sarcin\u0103 este destul de complex\u0103. <br \/>\nAm \u00eenregistrat c\u00e2teva cazuri \u00een care, din cauza problemelor legate de compatibilitatea kABI, modulul veeamsnap a \u00eencetat s\u0103 func\u021bioneze. <\/p>\n<p>Dup\u0103 ce modulul veeamsnap, compilat pentru RHEL 7.0, s-a dovedit a fi incompatibil cu nucleul din RHEL 7.5, chiar dac\u0103 se \u00eenc\u0103rca \u0219i provoca pr\u0103bu\u0219irea serverului, am renun\u021bat la utilizarea compatibilit\u0103\u021bii kABI pentru RHEL 7 \u00een \u00eentregime. <\/p>\n<p>\u00cen acest moment, pachetul KMOD pentru RHEL 7 include o compilare pentru fiecare versiune de lansare \u0219i un script care asigur\u0103 \u00eenc\u0103rcarea modulului.<\/p>\n<p>SUSE a abordat problema compatibilit\u0103\u021bii kABI cu mai mult\u0103 precau\u021bie. Ace\u0219tia ofer\u0103 compatibilitate kABI doar \u00een cadrul unui service pack. <\/p>\n<p>De exemplu, lansarea SLES 12 a avut loc \u00een septembrie 2014. Iar SLES 12 SP1 a fost lansat \u00een decembrie 2015, adic\u0103 a trecut pu\u021bin peste un an. De\u0219i ambele lans\u0103ri folosesc nucleul 3.12, ele nu sunt compatibile kABI. Este evident c\u0103 men\u021binerea compatibilit\u0103\u021bii kABI timp de doar un an este semnificativ mai u\u0219oar\u0103. Ciclu anual de actualizare a modulului nucleului nu ar trebui s\u0103 creeze probleme pentru creatorii de module. <\/p>\n<p>Ca urmare a acestei politici SUSE, nu am \u00eenregistrat nicio problem\u0103 legat\u0103 de compatibilitatea kABI pentru modulul nostru veeamsnap. Totu\u0219i, num\u0103rul de pachete pentru SUSE este aproape cu un ordin de m\u0103rime mai mare.<\/p>\n<h2>Patch-uri \u0219i backporturi<\/h2>\n<p>\nDe\u0219i distribuitorii \u00eencearc\u0103 s\u0103 asigure compatibilitatea kABI \u0219i stabilitatea nucleului, ace\u0219tia \u00eencearc\u0103 de asemenea s\u0103 \u00eembun\u0103t\u0103\u021beasc\u0103 performan\u021ba \u0219i s\u0103 elimine defectele acestui nucleu stabil. <\/p>\n<p>\u00cen plus fa\u021b\u0103 de propriile \u201ecorec\u021bii de erori\u201d, dezvoltatorii nucleului enterprise linux urm\u0103resc schimb\u0103rile din nucleul vanil\u0103 \u0219i le transfer\u0103 \u00een \u201estabilul\u201d lor.<\/p>\n<p>Uneori, acest lucru duce la noi <noindex><a rel=\"nofollow\" href=\"https:\/\/access.redhat.com\/solutions\/3658111\">erori<\/a><\/noindex>.<\/p>\n<p>\u00cen ultima lansare a Red Hat 6, \u00eentr-o actualizare minor\u0103, a fost o eroare. Aceasta a dus la faptul c\u0103 modulul veeamsnap pr\u0103bu\u0219ea sistemul atunci c\u00e2nd se elibera un snapshot. Compar\u00e2nd sursele nucleului \u00eenainte \u0219i dup\u0103 actualizare, am constatat c\u0103 totul era din cauza unui backport. O corectare similar\u0103 a fost efectuat\u0103 \u00een nucleul vanil\u0103 versiunea 4.19. Din p\u0103cate, \u00een nucleul vanil\u0103 aceast\u0103 corectare a func\u021bionat normal, dar la transferul ei \u00een \u201estabilul\u201d 2.6.32 a ap\u0103rut o problem\u0103 cu blocarea spin.<\/p>\n<p>Desigur, to\u021bi fac gre\u0219eli \u0219i \u00eentotdeauna, dar a meritat s\u0103 tragi codul din 4.19 \u00een 2.6.32, risc\u00e2nd stabilitatea?.. Nu sunt sigur\u2026<\/p>\n<p>Cel mai r\u0103u este c\u00e2nd marketingul se implic\u0103 \u00een tragerea fr\u00e2nghiei \u201estabilitate\u201d  \u201emodernizare\u201d. Departamentul de marketing are nevoie ca nucleul distribu\u021biei actualizate s\u0103 fie stabil, pe de o parte, \u0219i \u00een acela\u0219i timp s\u0103 ofere o performan\u021b\u0103 mai bun\u0103 \u0219i noi func\u021bionalit\u0103\u021bi. Acest lucru duce la compromisuri ciudate. <\/p>\n<p>C\u00e2nd am \u00eencercat s\u0103 compilez un modul pe nucleul 4.4 de la SLES 12 SP3, am descoperit cu surprindere c\u0103 are func\u021bionalit\u0103\u021bi din vanilia 4.8. Din punctul meu de vedere, implementarea I\/O-ului pe blocuri a nucleului 4.4 de la SLES 12 SP3 se aseam\u0103n\u0103 mai mult cu nucleul 4.8 dec\u00e2t cu versiunea anterioar\u0103 stabil\u0103 4.4 a nucleului de la SLES 12 SP2. Nu m\u0103 voi pronun\u021ba asupra procentului de cod din nucleul 4.8 transferat \u00een 4.4 de la SLES pentru SP3, dar nu pot s\u0103 spun c\u0103 nucleul este \u00eenc\u0103 acela\u0219i stabil 4.4. <\/p>\n<p>Cel mai nepl\u0103cut aspect este c\u0103, atunci c\u00e2nd scrii un modul care s\u0103 func\u021bioneze bine pe diferite nuclee, nu mai po\u021bi s\u0103 te bazezi pe versiunea nucleului. Trebuie s\u0103 iei \u00een considerare \u0219i distribu\u021bia. Este bine c\u0103 uneori po\u021bi s\u0103 te bazezi pe o definire care apare \u00eempreun\u0103 cu noua func\u021bionalitate, \u00eens\u0103 aceast\u0103 op\u021biune nu este \u00eentotdeauna disponibil\u0103. <\/p>\n<p>Ca urmare, codul devine plin de directive de compilare condi\u021bionat\u0103 ciudate.<\/p>\n<p>De asemenea, apar \u0219i patch-uri care schimb\u0103 API-ul documentat al nucleului. <br \/>\nAm dat peste o distribu\u021bie <noindex><a rel=\"nofollow\" href=\"https:\/\/neon.kde.org\/\">KDE neon<\/a><\/noindex> 5.16 \u0219i am fost foarte surprins s\u0103 v\u0103d c\u0103 apelul lookup_bdev \u00een aceast\u0103 versiune a nucleului a schimbat lista parametrilor de intrare.<\/p>\n<p>Pentru a compila, a trebuit s\u0103 adaug un script \u00een makefile care verific\u0103 dac\u0103 parametrul mask este prezent \u00een func\u021bia lookup_bdev.<\/p>\n<h2>Semn\u0103tura modulelor nucleului<\/h2>\n<p>\nDar s\u0103 revenim la \u00eentrebarea distribu\u021biei pachetelor.<\/p>\n<p>Unul dintre avantajele stabilit\u0103\u021bii kABI este c\u0103 modulele nucleului sub form\u0103 de fi\u0219ier binar pot fi semnate. \u00cen acest caz, dezvoltatorul poate fi sigur c\u0103 modulul nu a fost deteriorat accidental sau modificat inten\u021bionat. Acest lucru poate fi verificat cu comanda modinfo. <\/p>\n<p>Distribu\u021biile Red Hat \u0219i SUSE permit verificarea semn\u0103turii modulului \u0219i \u00eenc\u0103rcarea acestuia doar dac\u0103 certificatul coresponz\u0103tor este \u00eenregistrat \u00een sistem. Certificatul este cheia public\u0103 cu care este semnat modulul. O distribuim sub form\u0103 de pachet separat.<\/p>\n<p>Problema aici este c\u0103 certificatele pot fi fie integrate \u00een kernel (folosite de distribuitori), fie trebuie scrise \u00een memoria non-volatil\u0103 EFI folosind o utilitar\u0103. <i>mokutil<\/i>. Utilitar\u0103 <i>mokutil<\/i> la instalarea certificatului solicit\u0103 o repornire a sistemului \u0219i, \u00eenainte de a \u00eenc\u0103rca kernelul sistemului de operare, \u00eei ofer\u0103 administratorului op\u021biunea de a permite \u00eenc\u0103rcarea noului certificat. <\/p>\n<p>Astfel, ad\u0103ugarea certificatului necesit\u0103 acces fizic al administratorului la sistem. Dac\u0103 ma\u0219ina se afl\u0103 undeva \u00een cloud sau pur \u0219i simplu \u00eentr-un server remote \u0219i accesul este posibil doar prin re\u021bea (de exemplu, prin ssh), atunci ad\u0103ugarea certificatului va fi imposibil\u0103. <\/p>\n<h2>EFI pe ma\u0219inile virtuale<\/h2>\n<p>\nDe\u0219i EFI este sus\u021binut de majoritatea produc\u0103torilor de pl\u0103ci de baz\u0103 de mult timp, la instalarea sistemului, administratorul poate s\u0103 nu ia \u00een considerare necesitatea EFI, iar acesta poate fi dezactivat. <\/p>\n<p>Nu toate hypervizorii sus\u021bin EFI. VMWare vSphere sus\u021bine EFI \u00eencep\u00e2nd cu versiunea 5. <br \/>\nMicrosoft Hyper-V a primit de asemenea suport pentru EFI \u00eencep\u00e2nd cu Hyper-V pentru Windows Server 2012R2. <\/p>\n<p>Cu toate acestea, \u00een configura\u021bia default, aceast\u0103 func\u021bionalitate pentru ma\u0219inile Linux este dezactivat\u0103, ceea ce \u00eenseamn\u0103 c\u0103 certificatul nu poate fi instalat. <\/p>\n<p>\u00cen vSphere 6.5, op\u021biunea <b>Secure Boot<\/b> poate fi activat\u0103 doar \u00een vechea versiune a interfe\u021bei web, care func\u021bioneaz\u0103 prin Flash. Interfa\u021ba web pe HTML-5 este \u00eenc\u0103 foarte \u00een urm\u0103.<\/p>\n<h2>Distribu\u021bii experimentale<\/h2>\n<p>\n\u0218i \u00een final, s\u0103 discut\u0103m despre problema distribu\u021biilor experimentale \u0219i a celor f\u0103r\u0103 suport oficial. Pe de o parte, aceste distribu\u021bii sunt pu\u021bin probabile s\u0103 fie \u00eent\u00e2lnite pe serverele organiza\u021biilor serioase. Nu exist\u0103 suport oficial pentru aceste distribu\u021bii. Prin urmare, nu se poate asigura suport tehnic pentru un produs pe o astfel de distribu\u021bie. <\/p>\n<p>Cu toate acestea, aceste distribu\u021bii devin o platform\u0103 convenabil\u0103 pentru testarea unor solu\u021bii experimentale noi. De exemplu, Fedora, OpenSUSE Tumbleweed sau versiunile instabile ale Debian. Acestea sunt destul de stabile. Ele au \u00eentotdeauna cele mai noi versiuni ale programelor \u0219i mereu un kernel nou. \u00cen decurs de un an, aceast\u0103 func\u021bionalitate experimental\u0103 poate ap\u0103rea \u00een RHEL, SLES sau Ubuntu actualizate. <\/p>\n<p>A\u0219a c\u0103, dac\u0103 ceva nu func\u021bioneaz\u0103 pe o distribu\u021bie experimental\u0103 \u2013 este un motiv s\u0103 investighezi problema \u0219i s\u0103 o rezolvi. Trebuie s\u0103 fii preg\u0103tit c\u0103 aceast\u0103 func\u021bionalitate va ap\u0103rea \u00een cur\u00e2nd pe serverele de produc\u021bie ale utilizatorilor.<\/p>\n<p>Lista actual\u0103 a distribu\u021biilor oficial acceptate pentru versiunea 3.0 o pute\u021bi studia <noindex><a rel=\"nofollow\" href=\"https:\/\/helpcenter.veeam.com\/docs\/agentforlinux\/userguide\/system_requirements.html?ver=30\">aici<\/a><\/noindex>. \u00cens\u0103 lista real\u0103 a distribu\u021biilor pe care produsul nostru poate func\u021biona este mult mai extins\u0103.<\/p>\n<p>Personal, am fost interesat de experimentul cu sistemul de operare \u201eElbrus\u201d. Dup\u0103 actualizarea pachetului veeam, produsul nostru s-a instalat \u0219i a \u00eenceput s\u0103 func\u021bioneze. Despre acest experiment am scris pe Habr \u00een <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/veeam\/blog\/447960\/\">pe care l-a\u021bi citit<\/a><\/noindex>. <\/p>\n<p>Sus\u021binerea noilor distribu\u021bii continu\u0103. A\u0219tept\u0103m lansarea versiunii 4.0. Beta ar trebui s\u0103 apar\u0103 \u00een cur\u00e2nd, a\u0219a c\u0103 urma\u021bi <noindex><a rel=\"nofollow\" href=\"https:\/\/www.veeam.com\/whats-new-linux-agent.html\">whats-new<\/a><\/noindex>!<br \/>\n<br \/>Sursa: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/veeam\/blog\/471226\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0435 \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0435 \u2014 \u0437\u0430\u0434\u0430\u0447\u043a\u0430 \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u0430\u044f. \u0427\u0442\u043e\u0431\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 Veeam Agent for Linux \u043d\u0430 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430\u0445 \u043e\u0442 Red Hat 6 \u0438 Debian 6, \u0434\u043e OpenSUSE 15.1 \u0438 Ubuntu 19.04 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0440\u0435\u0448\u0430\u0442\u044c \u0441\u043f\u0435\u043a\u0442\u0440 \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0435\u0441\u043b\u0438 \u0443\u0447\u0435\u0441\u0442\u044c, \u0447\u0442\u043e \u0432 \u0441\u043e\u0441\u0442\u0430\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 \u0432\u0445\u043e\u0434\u0438\u0442 \u043c\u043e\u0434\u0443\u043b\u044c \u044f\u0434\u0440\u0430. \u0421\u0442\u0430\u0442\u044c\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u043f\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430\u043c \u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u043d\u0430 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":29206,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-38929","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/linux-mnogolikij-kak-rabotat-na-lyubom-distributive\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Linux \u043c\u043d\u043e\u0433\u043e\u043b\u0438\u043a\u0438\u0439: \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/linux-mnogolikij-kak-rabotat-na-lyubom-distributive\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:26:48+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:26:48+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Linux este versatil: cum s\u0103 lucrezi pe orice distribu\u021bie | ProHoster","description":"Creeaz\u0103 o aplica\u021bie pentru backup.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/linux-mnogolikij-kak-rabotat-na-lyubom-distributive","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Linux \u043c\u043d\u043e\u0433\u043e\u043b\u0438\u043a\u0438\u0439: \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0435 | ProHoster","og:description":"\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e.","og:url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/linux-mnogolikij-kak-rabotat-na-lyubom-distributive","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:26:48+00:00","article:modified_time":"2019-10-31T19:26:48+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"38929","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 23:59:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:00:26","updated":"2026-01-23 23:59:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/38929","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=38929"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/38929\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/29206"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=38929"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=38929"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=38929"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}