{"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\/sl\/blog\/administrirovanie\/linux-mnogolikij-kak-rabotat-na-lyubom-distributive","title":{"rendered":"Linux je raznolik: kako delati na katerem koli distribucijskem sistemu","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Linux je raznolik: kako delati na katerem koli distribucijskem sistemu\" src=\"\/wp-content\/uploads\/2019\/10\/ee1aaad566204532c974a3ce8f13b915.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUstvariti aplikacijo za varnostno kopiranje, ki deluje na kateri koli distribuciji, je zahtevna naloga. Da bi zagotovili delovanje Veeam Agent for Linux na distribucijah od Red Hat 6 in Debian 6 do OpenSUSE 15.1 in Ubuntu 19.04, je potrebno re\u0161evati vrsto te\u017eav, \u0161e posebej, \u010de upo\u0161tevamo, da programski izdelek vklju\u010duje jedrni modul.<\/p>\n<p>\u010clanek je bil pripravljen na podlagi nastopa na konferenci <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 ni le ena izmed najbolj priljubljenih operacijskih sistemov. V bistvu je to platforma, na kateri lahko ustvarite nekaj edinstvenega, nekaj svojega. Zaradi tega je na voljo veliko Linux distribucij, ki se razlikujejo po naboru programskih komponent. Tu se pojavi te\u017eava: da bi programski izdelek deloval na kateri koli distribuciji, je potrebno upo\u0161tevati posebnosti vsakega.<\/p>\n<h2>Upravitelji paketov. .deb vs .rpm<\/h2>\n<p>\nZa\u010dnimo z o\u010ditno te\u017eavo distribucije izdelka za razli\u010dne distribucije.<br \/>\nNajbolj tipi\u010den na\u010din distribucije programskih izdelkov je objava paketa v repozitoriju, da ga lahko vgrajeni upravitelj paketov v sistemu namesti od tam.<br \/>\nImamo pa dva priljubljena formata paketov: <i>rpm<\/i> in <i>deb<\/i>. Torej je treba podpirati vsak.<\/p>\n<p>V svetu deb-paketov je raven zdru\u017eljivosti osupljiva. Enak paket se enako dobro namesti in deluje tako na Debian 6 kot na Ubuntu 19.04. Standardi postopka gradnje paketov in dela z njimi, dolo\u010deni v starej\u0161ih Debian distribucijah, ostajajo aktualni tudi v sodobnih Linux Mint in elementary OS. Zato pri Veeam Agent for Linux zadostuje en deb-paket za vsako strojno platformo.<\/p>\n<p>V svetu rpm-paketov pa so razlike velike. Prvi\u010d, ker obstajata dva povsem neodvisna distributerja, Red Hat in SUSE, pri katerih zdru\u017eljivost ni potrebna. Drugi\u010d, ti distributerji imajo distribucije s tehni\u010dno podporo in eksperimentalne. Med njimi zdru\u017eljivost prav tako ni potrebna. Tako smo pri\u0161li do tega, da imamo svoje pakete za el6, el7 in el8. Poseben paket za Fedora. Paketi za SLES11 in 12 ter lo\u010den za openSUSE. Glavna te\u017eava so odvisnosti in imena paketov. <\/p>\n<h2>Te\u017eava z odvisnostmi<\/h2>\n<p>\n\u017dal se enaki paketi pogosto pojavijo pod razli\u010dnimi imeni v razli\u010dnih distribucijah. Spodaj je nepopoln seznam odvisnosti paketa veeam.<\/p>\n<p>Za EL7:<br \/>\nZa 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>\nKot je seznam odvisnosti edinstven za distribucijo. <\/p>\n<p>\u0160e slab\u0161e je, ko se pod starim imenom paketa za\u010dne skrivati posodobljena razli\u010dica. <\/p>\n<p><b>Primer:<\/b><\/p>\n<p>V Fedora 24 se je posodobil paket <i>ncurses<\/i> z razli\u010dice 5 na razli\u010dico 6. Na\u0161 izdelek je bil sestavljen natan\u010dno z 5. razli\u010dico, da bi zagotovili zdru\u017eljivost s starimi distribucijami. Za uporabo stare 5. razli\u010dice knji\u017enice v Fedora 24 je bilo potrebno uporabiti paket <i>ncurses-compat-libs<\/i>. <\/p>\n<p>Kot rezultat na Fedora nastaneta dva paketa z razli\u010dnimi odvisnostmi. <\/p>\n<p>Naprej postane zanimivo. Po \u0161e eni posodobitvi distribucije paket <i>ncurses-compat-libs<\/i> z 5. razli\u010dico knji\u017enice postane nedostopen. Za distributerja je drago vle\u010di stare knji\u017enice v novo razli\u010dico distribucije. \u010cez nekaj \u010dasa se je te\u017eava ponovila tudi v distribucijah SUSE.<\/p>\n<p>Kot rezultat so se morali nekateri distributerji odpovedati eksplicitni odvisnosti od <i>ncurses-libs<\/i>, izdelek pa popraviti tako, da lahko deluje z katerokoli razli\u010dico knji\u017enice.<\/p>\n<p>Mimogrede, v 8. razli\u010dici Red Hat ni ve\u010d meta-paketa <i>python<\/i>, ki je skliceval na staro dobro <i>python 2.7<\/i>. Na voljo je <i>python2<\/i> in <i>python<\/i>3. <\/p>\n<h2>Alternativa paketnim upraviteljem<\/h2>\n<p>\nTe\u017eava z odvisnostmi je stara in \u017ee dolgo o\u010ditna. Spomnimo se na ala Dependency hell. <br \/>\nZdru\u017eiti raznolike knji\u017enice in aplikacije tako, da vse stabilno delujejo in se ne konfliktirajo - to nalogo v resnici posku\u0161a re\u0161iti vsak Linux distributer.<\/p>\n<p>Popolnoma druga\u010de to te\u017eavo posku\u0161a re\u0161iti paketni upravitelj <b>Snappy<\/b> od Canonical. Osnovna ideja: aplikacija deluje v izoliranem in za\u0161\u010ditenem peskovniku od glavnega sistema. \u010ce aplikaciji potrebujete knji\u017enice, se te dostavijo skupaj z aplikacijo.<\/p>\n<p><b>Flatpak<\/b> prav tako dovoljuje zagon aplikacij v peskovniku, pri \u010demer uporablja Linux Containers. Idejo peskovnika uporabi tudi <b>AppImage<\/b>.<\/p>\n<p>Te re\u0161itve omogo\u010dajo ustvarjanje enega paketa za vse distribucije. V primeru <b>Flatpak<\/b> je namestitev in zagon aplikacije mo\u017een celo brez vedenja skrbnika.<\/p>\n<p>Osnovna te\u017eava je, da ne morejo vse aplikacije delovati v peskovniku. Nekatere potrebujejo neposreden dostop do platforme. O modulih jedra, ki mo\u010dno odvisni od jedra in se nikakor ne prilegajo v koncept peskovnika, niti ne govorim. <\/p>\n<p>Druga te\u017eava - priljubljene distribucije v korporativnem okolju, kot sta Red Hat in SUSE, \u0161e ne podpirajo Snappy in Flatpak. <\/p>\n<p>Zaradi tega Veeam Agent for Linux ni na <noindex><a rel=\"nofollow\" href=\"https:\/\/snapcraft.io\/\">snapcraft.io<\/a><\/noindex> niti na <noindex><a rel=\"nofollow\" href=\"https:\/\/flathub.org\/home\">flathub.org<\/a><\/noindex>.<\/p>\n<p>Na koncu vpra\u0161anja o upravljavcih paketov moram omeniti, da obstaja mo\u017enost popolnoma opustiti upravljavce paketov in zdru\u017eiti binarne datoteke ter skript za njihovo namestitev v en sam paket. <\/p>\n<p>Tak\u0161en paket omogo\u010da ustvarjanje enega skupnega paketa za razli\u010dne distribucije in platforme, kar omogo\u010da interaktiven proces namestitve ter nujno prilagajanje. S takimi paketi sem se sre\u010dal pri Linuxu le od VMware.<\/p>\n<h2>Problem posodobitev<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Linux je raznolik: kako delati na katerem koli distribucijskem sistemu\" src=\"\/wp-content\/uploads\/2019\/10\/aa14b10a434c28541574421d97807de7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nTudi \u010de so vse te\u017eave z odvisnostmi re\u0161ene, lahko program deluje razli\u010dno na isti distribuciji. Problem so posodobitve.<\/p>\n<p>Obstajajo 3 strategije posodabljanja:<\/p>\n<ul>\n<li>Najenostavnej\u0161a je, da nikoli ne posodabljamo. Nastavi\u0161 stre\u017enik in pozabi\u0161. Zakaj posodobitve, \u010de vse deluje? Te\u017eave se za\u010dnejo ob prvem kontaktu s podporo. Ustvarjalec distribucije podpira le posodobljeno razli\u010dico. <\/li>\n<li>Lahko se zaupa\u0161 distribucijskemu podjetju in nastavi\u0161 samodejno posodabljanje. V tem primeru je klic v podporo verjeten takoj po neuspe\u0161ni posodobitvi.<\/li>\n<li>Mo\u017enost ro\u010dne posodobitve \u0161ele po preizku\u0161anju na testni infrastrukturi je najgotovnej\u0161a, vendar draga in zamudna. Dale\u010d od tega, da si to lahko privo\u0161\u010di vsak.<\/li>\n<\/ul>\n<p>\nKer razli\u010dni uporabniki uporabljajo razli\u010dne strategije posodabljanja, je treba podpirati tako najnovej\u0161o razli\u010dico kot tudi vse prej\u0161nje izdaje. To ote\u017euje tako razvojni proces kot testiranje ter povzro\u010da te\u017eave podporni slu\u017ebi.<\/p>\n<h2>Raznolikost strojnih platform<\/h2>\n<p>\nRazli\u010dne strojne platforme so te\u017eava, ki je v znatni meri specifi\u010dna prav za native-kodo. Vsaj za vsako podporno platformo je potrebno zgraditi binarne datoteke.<\/p>\n<p>V projektu Veeam Agent for Linux \u0161e ne moremo podpreti niti ene stvari za RISC.<\/p>\n<p>Ne bom se podrobno ustavljal pri tem vpra\u0161anju. Omenil bom le glavne te\u017eave: platformno odvisni tipi, kot so <code>size_t<\/code>, poravnava struktur in vrstni red bajtov.<\/p>\n<h2>Stati\u010dno in\/ali dinami\u010dno povezovanje<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Linux je raznolik: kako delati na katerem koli distribucijskem sistemu\" src=\"\/wp-content\/uploads\/2019\/10\/dc473aad4ea0818940af7eafdbc641fd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nVpra\u0161anje \"Kako se povezovati z bibliotekami - dinami\u010dno ali stati\u010dno?\" pa je vredno razprave.<\/p>\n<p>Na splo\u0161no C\/C++ aplikacije pod Linuxom uporabljajo dinami\u010dno povezovanje. To deluje odli\u010dno, \u010de je aplikacija zgrajena posebej za dolo\u010deno distribucijo.<\/p>\n<p>\u010ce je cilj zajeti razli\u010dne distribucije s pomo\u010djo ene same binarne datoteke, se je treba osredoto\u010diti na najstarej\u0161o podporno distribucijo. Za nas je to Red Hat 6. Ta vsebuje gcc 4.4, ki celo standard C++11 ne podpira. <noindex><a rel=\"nofollow\" href=\"https:\/\/gcc.gnu.org\/projects\/cxx-status.html\">popolnoma.<\/a><\/noindex>.<\/p>\n<p>Na\u0161 projekt sestavljamo s pomo\u010djo gcc 6.3, ki popolnoma podpira C++14. Seveda v tem primeru na Red Hat 6 knji\u017enici libstdc++ in boost moramo nositi s seboj. Najla\u017eje je povezati se z njima stati\u010dno.<\/p>\n<p>\u017dal pa ni mogo\u010de z vsemi knji\u017enicami povezovati stati\u010dno.<\/p>\n<p>Prvi\u010d, sistemske knji\u017enice, kot so <i>libfuse<\/i>, <i>libblkid<\/i> je treba povezati dinami\u010dno, da se zagotovi njihova zdru\u017eljivost z jedrom in njegovimi moduli. <\/p>\n<p>Drugi\u010d, obstaja majhna te\u017eava glede licenc. <\/p>\n<p>Licenca GPL na\u010deloma dovoljuje povezovanje knji\u017enic samo z odprtokodnim kodom. MIT in BSD dovoljujeta stati\u010dno povezovanje in omogo\u010data vklju\u010ditev knji\u017enic v projekt. Vendar pa LGPL nekako ne nasprotuje stati\u010dni povezavi, vendar zahteva, da se zagotovi dostop do datotek, potrebnih za povezovanje. <\/p>\n<p>Na splo\u0161no bo uporaba dinami\u010dnega povezovanja prepre\u010dila potrebo po zagotavljanju ne\u010desa.<\/p>\n<h2>Zbiranje C\/C++ aplikacij<\/h2>\n<p>\nZa zbiranje C\/C++ aplikacij za razli\u010dne platforme in distribucije je dovolj, da izberemo ali zberemo ustrezno razli\u010dico gcc in uporabimo kri\u017ene prevajalnike za specifi\u010dne arhitekture ter zberemo celoten nabor knji\u017enic. To je povsem izvedljivo, a precej zamudno. In ni nobenih jamstev, da izbrani prevajalnik in knji\u017enice zagotavljajo delujo\u010do razli\u010dico. <\/p>\n<p>O\u010ditna prednost: infrastruktura se zelo poenostavi, saj se celoten postopek zbiranja lahko opravi na enem ra\u010dunalniku. Poleg tega je dovolj, da zberemo en komplet binarnih datotek za eno arhitekturo in jih lahko pakiramo v pakete za razli\u010dne distribucije. Tako se zbirajo paketi veeam za Veeam Agent for Linux.<\/p>\n<p>Namesto te re\u0161itve lahko preprosto pripravite build farmo, torej ve\u010d strojev za sestavljanje. Vsak tak stroj bo zagotavljal kompilacijo aplikacije in pripravo paketa za dolo\u010den distribucijski sistem in specifi\u010dno arhitekturo. V tem primeru se kompilacija izvede z orodji, ki jih je pripravil distributer. Tako se izognete fazi priprave kompilatorja in izbiri knji\u017enic. Poleg tega je proces sestavljanja enostavno paralelizirati. <\/p>\n<p>Seveda pa ima ta pristop tudi slabost: za vsak distribucijski sistem znotraj ene arhitekture bo treba sestaviti svoj nabor binarnih datotek. Tudi slabost je ta, da je potrebno vzdr\u017eevati tolik\u0161no \u0161tevilo strojev, kar zahteva veliko diskovnega prostora in RAM-a. <\/p>\n<p>Tako se sestavljajo KMOD paketi modula jedra veeamsnap za distribucijske sisteme Red Hat.<\/p>\n<h2>Open Build Service<\/h2>\n<p>\nKolegi iz SUSE so poskusili uresni\u010diti svojo zlato sredino v obliki posebne storitve za kompilacijo aplikacij in pripravo paketov \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/openbuildservice.org\/\">openbuildservice<\/a><\/noindex>.<\/p>\n<p>V bistvu gre za hipervizor, ki ustvarja virtualni stroj, name\u0161\u010da vse potrebne pakete, izvaja kompilacijo aplikacije in sestavi paket v tem izoliranem okolju, po katerem se tak virtualni stroj osvobodi.<\/p>\n<p><img decoding=\"async\" alt=\"Linux je raznolik: kako delati na katerem koli distribucijskem sistemu\" src=\"\/wp-content\/uploads\/2019\/10\/93d2a70c589a7186ecef85a7863e59e8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa\u010drtovalnik, implementiran v OpenBuildService, sam dolo\u010di, koliko virtualnih strojev lahko za\u017eene za optimalno hitrost sestavljanja paketov. Vgrajeni mehanizem podpisa samodejno podpi\u0161e pakete in jih nalo\u017ei na vgrajen repozitorij. Vgrajeni sistem za verzioniranje ohranja zgodovino sprememb in sestavljanj. Ostane le, da v to sistem dodate svoje izvorne kode. Tudi stre\u017enik ni nujno dvigniti sam, temve\u010d lahko izkoristite odprto razli\u010dico.<\/p>\n<p>Tu pa je problem: tak\u0161en kombajn se te\u017eko vklopi v obstoje\u010do infrastrukturo. Na primer, verzioniranje ni potrebno, saj imamo svojega za izvorne kode. Mehanizem podpisa se razlikuje: uporabljamo poseben stre\u017enik. Repozitorij prav tako ni potreben. <\/p>\n<p>Poleg tega je podpora za druge distribucijske sisteme \u2014 na primer, Red Hat \u2014 precej omejena, kar je povsem razumljivo.<\/p>\n<p>Prednost tak\u0161ne storitve je hitra podpora za novo razli\u010dico distribucije SUSE. Pred uradnim razglasitvijo o izdaji so potrebni paketki za sestavljanje na voljo v javnem repozitoriju. Na seznamu razpolo\u017eljivih distribucij v OpenBuildService se pojavi nov. Ozna\u010dimo ga in doda se v na\u010drt sestavljanja. Tako dodajanje nove razli\u010dice distribucije poteka skoraj z enim klikom.<\/p>\n<p>V na\u0161i infrastrukturi, ki uporablja OpenBuildService, se zbira vsa raznolikost KMP paketov modula jedra veeamsnap za distribucije SUSE.<\/p>\n<p>Nato bi se rad osredoto\u010dil na vpra\u0161anja, specifi\u010dna prav za module jedra.<\/p>\n<h2>kernel ABI<\/h2>\n<p>\nModuli jedra Linuxa so se zgodovinsko \u0161irili v obliki izvorne kode. Gre za to, da ustvarjalci jedra ne obremenjujejo sebe s skrbjo za podporo stabilnega API za module jedra, \u0161e posebej na binarni ravni, kar velja za kABI.<\/p>\n<p>Za sestavljanje modula za vanilno jedro so nujni header-ji prav tega jedra in deloval bo samo na tem jedru. <\/p>\n<p>DKMS omogo\u010da avtomatizacijo procesa sestavljanja modulov ob posodobitvi jedra. Kot rezultat, uporabniki repozitorija Debian (in njegovih \u0161tevilnih sorodnikov) uporabljajo module jedra bodisi iz repozitorija dobavitelja bodisi sestavljene iz izvorne kode s pomo\u010djo DKMS.<\/p>\n<p>Toda taka situacija ne ustreza prav Enterprise-segmentu. Distribuatorji proprietarne kode \u017eelijo \u0161iriti izdelek v obliki zbranih binarnih datotek. <\/p>\n<p>Skupni administratorji ne \u017eelijo hraniti razvojnika na produkcijskih stre\u017enikih iz varnostnih razlogov. Distribuatorji Enterprise Linux \u2014 kot so Red Hat in SUSE \u2014 so se odlo\u010dili, da bodo za svoje uporabnike podpirali stabilno kABI. Tako so se pojavili KMOD paketi za Red Hat in KMP paketi za SUSE.<\/p>\n<p>Osnova tak\u0161nega re\u0161itev je precej preprosta. Za dolo\u010deno razli\u010dico distribucije se API jedra zamrzne. Distribuator izjavi, da uporablja prav to jedro, na primer 3.10, in uvaja samo popravke in izbolj\u0161ave, ki nikakor ne vplivajo na vmesnike jedra, tako da lahko moduli, zbrani za prvotno jedro, delujejo za vse nadaljnje brez ponovne kompajlacije.<\/p>\n<p>Red Hat trdi, da bo ohranila kABI zdru\u017eljivost za distribucijo skozi celotno \u017eivljenjsko dobo. To pomeni, da bi moral zgrajen modul za rhel 6.0 (izdaja november 2010) delovati tudi na razli\u010dici 6.10 (izdaja junij 2018). To je skoraj 8 let. Seveda je to precej zapletena naloga. <br \/>\nZabele\u017eili smo ve\u010d primerov, ko je zaradi te\u017eav s kABI zdru\u017eljivostjo modul veeamsnap prenehal delovati. <\/p>\n<p>Ko se je modul veeamsnap, zgrajen za RHEL 7.0, izkazal za nezdru\u017eljivega z jedrom iz RHEL 7.5, \u010deprav se je nalagal in zagotovo sesul stre\u017enik, smo opustili uporabo kABI zdru\u017eljivosti za RHEL 7 na splo\u0161no. <\/p>\n<p>Trenutno KMOD paket za RHEL 7 vsebuje zbirko za vsako razli\u010dico izdaje in skript, ki zagotavlja nalaganje modula.<\/p>\n<p>SUSE je k nalogi kABI zdru\u017eljivosti pristopila bolj previdno. KABI zdru\u017eljivost zagotavljajo le v okviru ene razli\u010dice servisnega paketa. <\/p>\n<p>Na primer, izdaja SLES 12 je bila objavljena septembra 2014. SLES 12 SP1 pa \u017ee decembra 2015, kar pomeni, da je preteklo malo ve\u010d kot eno leto. Kljub temu, da obe izdaji uporabljata jedro 3.12, sta si kABI nezdru\u017eljivi. O\u010ditno je, da je vzdr\u017eevanje kABI zdru\u017eljivosti samo eno leto bistveno la\u017eje. Letni cikel posodobitev modula jedra ne bi smel povzro\u010dati te\u017eav ustvarjalcem modulov. <\/p>\n<p>Zaradi te politike SUSE nismo zabele\u017eili nobenih te\u017eav s kABI zdru\u017eljivostjo na\u0161ega modula veeamsnap. Res pa je, da je \u0161tevilo paketov za SUSE skoraj za red ve\u010dje.<\/p>\n<h2>Popravki in backporti<\/h2>\n<p>\nKljub temu, da se distributerji trudijo zagotavljati kABI zdru\u017eljivost in stabilnost jedra, si tudi prizadevajo izbolj\u0161ati zmogljivost in odpraviti napake tega stabilnega jedra. <\/p>\n<p>Poleg lastnega 'dela na napakah' razvijalci jedra enterprise linux spremljajo spremembe v vanilijevem jedru in jih prena\u0161ajo v svoje 'stabilno'.<\/p>\n<p>V\u010dasih to pripelje do novih <noindex><a rel=\"nofollow\" href=\"https:\/\/access.redhat.com\/solutions\/3658111\">napak<\/a><\/noindex>.<\/p>\n<p>V zadnjem izdajanju Red Hat 6 v enem od manj\u0161ih posodobitev je bila storjena napaka. To je povzro\u010dilo, da je modul veeamsnap zagotovo sesul sistem ob spro\u0161\u010danju posnetka. Po primerjavi izvornih kod jedra pred in po posodobitvi smo ugotovili, da je bila za vse kriva backport. Podoben popravek je bil narejen v vanilijevem jedru razli\u010dice 4.19. Toda v vanilijevem jedru je ta popravek deloval normalno, pri prenosu v 'stabilno' 2.6.32 pa je nastala te\u017eava s spin-lockom.<\/p>\n<p>Seveda, napake se zgodijo vsem in vedno, vendar ali je bilo vredno prena\u0161ati kodo iz 4.19 v 2.6.32, ob tem pa tvegati stabilnost?.. Nisem prepri\u010dan\u2026<\/p>\n<p>Najhuje je, ko se k vle\u010denju vrvi \"stabilnost\"\"modernizacija\" priklju\u010di marketing. Marketingu je treba, da je jedro posodobljenega distribucijskega sistema stabilno, hkrati pa bolj u\u010dinkovito in z novimi funkcijami. To vodi do \u010dudnih kompromisov. <\/p>\n<p>Ko sem poskusil zgraditi modul na jedru 4.4 iz SLES 12 SP3, sem s presene\u010denjem odkril, da ima funkcionalnost iz navadne 4.8. Po mojem mnenju je implementacija blokovnega I\/O jedra 4.4 iz SLES 12 SP3 bolj podobna jedru 4.8 kot prej\u0161nji stabilni 4.4 iz SLES12 SP2. Ne morem oceniti, kak\u0161en je bil dele\u017e prenesene kode iz jedra 4.8 v SLES-ovih 4.4 za SP3, a jih ne morem imenovati kot \u0161e vedno stabilno 4.4. <\/p>\n<p>Najbolj neprijetno pri tem je, da pri pisanju modula, ki bi enako dobro deloval na razli\u010dnih jedrih, ve\u010d ne moremo zana\u0161ati na razli\u010dico jedra. Treba je upo\u0161tevati tudi distribucijo. Dobro je, da se v\u010dasih lahko zana\u0161amo na definicijo, ki se pojavi skupaj z novo funkcionalnostjo, a ta mo\u017enost ne pride vedno. <\/p>\n<p>Zaradi tega se koda obda s \u010dudnimi direktivami pogojne kompajlacije.<\/p>\n<p>Pojavljajo se tudi popravki, ki spremenijo dokumentirano API jedra. <br \/>\nNaletel sem na distribucijo <noindex><a rel=\"nofollow\" href=\"https:\/\/neon.kde.org\/\">KDE neon<\/a><\/noindex> 5.16 in sem bil zelo presene\u010den, ko sem opazil, da je klic lookup_bdev v tej razli\u010dici jedra spremenil seznam vhodnih parametrov.<\/p>\n<p>Za gradnjo je bilo treba dodati skript v makefile, ki preveri, ali ima funkcija lookup_bdev parameter mask.<\/p>\n<h2>Podpis jedrskih modulov<\/h2>\n<p>\nVrnimo se k vpra\u0161anju distribucije paketov.<\/p>\n<p>Ena izmed prednosti stabilnega kABI je, da se jedrski moduli v obliki binarne datoteke lahko podpi\u0161ejo. V tem primeru se lahko razvijalec prepri\u010da, da modul ni bil naklju\u010dno po\u0161kodovan ali namerno spremenjen. To je mogo\u010de preveriti z ukazom modinfo. <\/p>\n<p>Distribucije Red Hat in SUSE omogo\u010dajo preverjati podpis modula in ga nalo\u017eiti le, \u010de je v sistemu registriran ustrezen certifikat. Certifikat predstavlja javni klju\u010d, s katerim se modul podpi\u0161e. \u0160irimo ga kot lo\u010den paket.<\/p>\n<p>Te\u017eava je v tem, da so certifikati lahko bodisi vgrajeni v jedro (nanje se sklicujejo distributerji) bodisi jih je treba zapisati v neob\u010dutljivo EFI pomnilnik z uporabo programa. <i>mokutil<\/i>. Alat <i>mokutil<\/i> pri namestitvi certifikata zahteva ponovni zagon sistema in celo pred nalaganjem jedra operacijskega sistema ponuja skrbniku, da odobri nalaganje novega certifikata. <\/p>\n<p>Tako dodajanje certifikata zahteva fizi\u010dni dostop skrbnika do sistema. \u010ce se naprava nahaja nekje v oblaku ali preprosto v oddani stre\u017eni\u0161ki lokaciji ter je dostopna le prek omre\u017eja (na primer prek ssh), dodajanje certifikata ne bo mogo\u010de. <\/p>\n<h2>EFI na virtualnih napravah<\/h2>\n<p>\nKljub temu, da EFI \u017ee dolgo podpira skoraj vsak proizvajalec mati\u010dnih plo\u0161\u010d, lahko skrbnik pri namestitvi sistema ne pomisli na potrebo po EFI in ga lahko izklopi. <\/p>\n<p>Ne vsi hipervizorji podpirajo EFI. VMWare vSphere podpira EFI od razli\u010dice 5 naprej. <br \/>\nMicrosoft Hyper-V je prav tako za\u010del podpirati EFI od Hyper-V za Windows Server 2012R2. <\/p>\n<p>Vendar je v privzeti konfiguraciji ta funkcionalnost za Linux naprave izklju\u010dena, kar pomeni, da certifikata ni mogo\u010de namestiti. <\/p>\n<p>V vSphere 6.5 je nastavitev <b>Secure Boot<\/b> mo\u017eno nastaviti le v stari razli\u010dici spletnega vmesnika, ki deluje preko Flash. Spletni vmesnik na HTML-5 \u0161e mo\u010dno zaostaja.<\/p>\n<h2>Eksperimentalne distribucije<\/h2>\n<p>\nNazadnje bomo obravnavali vpra\u0161anje eksperimentalnih distribucij in distribucij brez uradne podpore. Po eni strani tak\u0161nih distribucij verjetno ne boste na\u0161li na stre\u017enikih resnih organizacij. Tak\u0161ne distribucije nimajo uradne podpore. Zato zagotavljanje tehni\u010dne podpore za izdelek na tak\u0161ni distribuciji ni mogo\u010de. <\/p>\n<p>Vendar te distribucije postajajo prikladna platforma za preizku\u0161anje novih eksperimentalnih re\u0161itev. Na primer, Fedora, OpenSUSE Tumbleweed ali nestabilne razli\u010dice Debiana. So precej stabilne. Vedno vklju\u010dujejo nove razli\u010dice programov in vedno novo jedro. \u010cez leto lahko ta eksperimentalna funkcionalnost postane del posodobljenega RHEL, SLES ali Ubuntu. <\/p>\n<p>Tako, \u010de kaj ne deluje na eksperimentalni distribuciji \u2014 je to prilo\u017enost, da se razjasni te\u017eava in jo re\u0161i. Treba je biti pripravljen, da se ta funkcionalnost kmalu pojavi na produkcijskih stre\u017enikih uporabnikov.<\/p>\n<p>Trenutna lista slu\u017ebeno podr\u017eavanih distribucija za verziju 3.0 mo\u017ee se prou\u010diti <noindex><a rel=\"nofollow\" href=\"https:\/\/helpcenter.veeam.com\/docs\/agentforlinux\/userguide\/system_requirements.html?ver=30\">ovde<\/a><\/noindex>. Me\u0111utim, stvarna lista distribucija na kojima na\u0161 proizvod mo\u017ee raditi je mnogo \u0161ira.<\/p>\n<p>Osobno me zanimalo eksperimentiranje s OS-om 'Elbrus'. Nakon dorade paketa veeam, na\u0161 proizvod se instalirao i po\u010deo raditi. O ovom eksperimentu pisao sam na Habr-u u <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/veeam\/blog\/447960\/\">\u010dlanku<\/a><\/noindex>. <\/p>\n<p>Podr\u0161ka novim distribucijama se nastavlja. O\u010dekujemo dolazak verzije 4.0. Beta bi trebala biti dostupna uskoro, pa pratite <noindex><a rel=\"nofollow\" href=\"https:\/\/www.veeam.com\/whats-new-linux-agent.html\">whats-new<\/a><\/noindex>!<br \/>\n<br \/>Izvor: <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.5 - 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\/sl\/blog\/administrirovanie\/linux-mnogolikij-kak-rabotat-na-lyubom-distributive\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"sl_SI\" \/>\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\/sl\/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 je raznolik: kako raditi na bilo kojoj distribuciji | ProHoster","description":"Kreirati aplikaciju za rezervnu kopiju.","canonical_url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/linux-mnogolikij-kak-rabotat-na-lyubom-distributive","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sl_SI","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\/sl\/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\/sl\/wp-json\/wp\/v2\/posts\/38929","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=38929"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/38929\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media\/29206"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=38929"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=38929"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=38929"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}