{"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\/sv\/blog\/administrirovanie\/linux-mnogolikij-kak-rabotat-na-lyubom-distributive","title":{"rendered":"Linux i m\u00e5nga skepnader: hur man arbetar med vilken distribution som helst","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Linux i m\u00e5nga skepnader: hur man arbetar med vilken distribution som helst\" src=\"\/wp-content\/uploads\/2019\/10\/ee1aaad566204532c974a3ce8f13b915.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAtt skapa en backup-applikation som fungerar p\u00e5 valfri distribution \u00e4r en utmaning. F\u00f6r att s\u00e4kerst\u00e4lla att Veeam Agent f\u00f6r Linux fungerar p\u00e5 distributioner fr\u00e5n Red Hat 6 och Debian 6 till OpenSUSE 15.1 och Ubuntu 19.04 m\u00e5ste man l\u00f6sa en rad problem, s\u00e4rskilt med tanke p\u00e5 att programvaran inkluderar en k\u00e4rnmodul.<\/p>\n<p>Artikeln \u00e4r baserad p\u00e5 material fr\u00e5n presentationen p\u00e5 konferensen <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 \u00e4r inte bara ett av de mest popul\u00e4ra operativsystemen. Det \u00e4r i huvudsak en plattform d\u00e4r man kan skapa n\u00e5got unikt, n\u00e5got eget. Tack vare detta finns det m\u00e5nga distributioner av Linux, som skiljer sig \u00e5t i upps\u00e4ttningen av programkomponenter. H\u00e4r uppst\u00e5r ett problem: f\u00f6r att programvaran ska fungera p\u00e5 vilken distribution som helst m\u00e5ste man ta h\u00e4nsyn till varje distributions specifika egenskaper.<\/p>\n<h2>Paketchefer. .deb vs .rpm<\/h2>\n<p>\nL\u00e5t oss b\u00f6rja med det uppenbara problemet med att distribuera produkten f\u00f6r olika distributioner.<br \/>\nDet mest typiska s\u00e4ttet att distribuera programvaruprodukter \u00e4r att l\u00e4gga upp ett paket p\u00e5 ett arkiv s\u00e5 att den inbyggda paketchefen i systemet kan installera det d\u00e4rifr\u00e5n.<br \/>\nMen vi har tv\u00e5 popul\u00e4ra paketformat: <i>rpm<\/i> och <i>deb<\/i>. Det betyder att vi m\u00e5ste st\u00f6dja dem alla.<\/p>\n<p>I v\u00e4rlden av deb-paket \u00e4r kompatibilitetsniv\u00e5n f\u00f6rv\u00e5nande. Samma paket installeras och fungerar lika bra b\u00e5de p\u00e5 Debian 6 och Ubuntu 19.04. Standarderna f\u00f6r att bygga paket och arbeta med dem, som inf\u00f6rdes i de gamla Debian-distributionerna, f\u00f6rblir aktuella \u00e4ven i de trendiga Linux Mint och elementary OS. D\u00e4rf\u00f6r r\u00e4cker det med ett deb-paket f\u00f6r varje h\u00e5rdvaruplattform f\u00f6r Veeam Agent f\u00f6r Linux.<\/p>\n<p>Men i v\u00e4rlden av rpm-paket \u00e4r skillnaderna betydande. F\u00f6r det f\u00f6rsta, p\u00e5 grund av att det finns tv\u00e5 helt oberoende distribut\u00f6rer, Red Hat och SUSE, som inte beh\u00f6ver kompatibilitet. F\u00f6r det andra har dessa distribut\u00f6rer distributioner med teknisk support och experimentella. Mellan dem beh\u00f6vs inte heller kompatibilitet. Det leder till att vi har olika paket f\u00f6r el6, el7 och el8. Ett separat paket f\u00f6r Fedora. Paket f\u00f6r SLES11 och 12 och ett separat f\u00f6r openSUSE. Det st\u00f6rsta problemet \u00e4r beroenden och paketnamn. <\/p>\n<h2>Beroendeproblem<\/h2>\n<p>\nTyv\u00e4rr har samma paket ofta olika namn i olika distributioner. Nedan finns en ofullst\u00e4ndig lista \u00f6ver beroenden f\u00f6r paketet veeam.<\/p>\n<p>F\u00f6r EL7:<br \/>\nF\u00f6r 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>\nSom resultat blir beroendelistan unik f\u00f6r distributionen. <\/p>\n<p>Det kan bli v\u00e4rre n\u00e4r en uppdaterad version b\u00f6rjar d\u00f6lja sig bakom det gamla paketnamnet. <\/p>\n<p><b>Exempel:<\/b><\/p>\n<p>I Fedora 24 har paketet uppdaterats <i>ncurses<\/i> fr\u00e5n version 5 till version 6. V\u00e5r produkt var sammansatt med version 5 f\u00f6r att s\u00e4kerst\u00e4lla kompatibilitet med \u00e4ldre distributioner. F\u00f6r att kunna anv\u00e4nda den gamla version 5 av biblioteket p\u00e5 Fedora 24 var vi tvungna att anv\u00e4nda paketet <i>ncurses-compat-libs<\/i>. <\/p>\n<p>Som ett resultat dyker det upp tv\u00e5 paket f\u00f6r Fedora, med olika beroenden. <\/p>\n<p>Det blir intressantare. Efter en ny uppdatering av distributionen blir paketet <i>ncurses-compat-libs<\/i> med version 5 av biblioteket otillg\u00e4ngligt. F\u00f6r distribut\u00f6ren \u00e4r det kostsamt att dra de gamla biblioteken till den nya versionen av distributionen. Efter ett tag upprepades problemet \u00e4ven i SUSE-distributioner.<\/p>\n<p>Som ett resultat var vissa distributioner tvungna att \u00f6verge den explicita beroendet av <i>ncurses-libs<\/i>, och produkten fick justeras s\u00e5 att den kunde fungera med vilken version av biblioteket som helst.<\/p>\n<p>F\u00f6r \u00f6vrigt finns det ingen metapaketering i den 8:e versionen av Red Hat <i>python<\/i>, som refererade till den gamla goda <i>python 2.7<\/i>. Det finns <i>python2<\/i> och <i>python<\/i>3. <\/p>\n<h2>Alternativ till pakethanterare<\/h2>\n<p>\nProblemet med beroenden \u00e4r gammalt och uppenbart. T\u00e4nk bara p\u00e5 Dependency hell. <br \/>\nAtt f\u00f6rena olika bibliotek och applikationer s\u00e5 att alla fungerar stabilt och inte konfliktar \u2013 det \u00e4r i grunden den uppgift som varje Linux-distribut\u00f6r f\u00f6rs\u00f6ker l\u00f6sa.<\/p>\n<p>F\u00f6r att l\u00f6sa detta problem f\u00f6rs\u00f6ker pakethanteraren <b>Snappy<\/b> fr\u00e5n Canonical. Grundid\u00e9n \u00e4r: applikationen k\u00f6rs i en isolerad och skyddad sandl\u00e5da fr\u00e5n det underliggande systemet. Om applikationen beh\u00f6ver bibliotek f\u00f6ljer de med applikationen.<\/p>\n<p><b>Flatpak<\/b> g\u00f6r det ocks\u00e5 m\u00f6jligt att k\u00f6ra applikationer i sandl\u00e5dan med hj\u00e4lp av Linux Containrar. Id\u00e9n om sandl\u00e5dan anv\u00e4nds \u00e4ven av <b>AppImage<\/b>.<\/p>\n<p>Dessa l\u00f6sningar g\u00f6r att ett paket kan skapas f\u00f6r alla distributioner. I fallet med <b>Flatpak<\/b> kan installation och k\u00f6rning av applikationen ske \u00e4ven utan administratorns vetskap.<\/p>\n<p>Huvudproblemet \u00e4r att inte alla applikationer kan fungera i sandl\u00e5dan. Vissa beh\u00f6ver direkt \u00e5tkomst till plattformen. Jag beh\u00f6ver inte ens n\u00e4mna k\u00e4rnmoduler som \u00e4r strikt beroende av k\u00e4rnan och inte passar in i konceptet av sandl\u00e5dan. <\/p>\n<p>Ett annat problem \u00e4r att de popul\u00e4ra distributionspetrarna i f\u00f6retagsmilj\u00f6er fr\u00e5n Red Hat och SUSE \u00e4nnu inte st\u00f6der Snappy och Flatpak. <\/p>\n<p>D\u00e4rf\u00f6r finns Veeam Agent for Linux inte p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/snapcraft.io\/\">snapcraft.io<\/a><\/noindex> inte <noindex><a rel=\"nofollow\" href=\"https:\/\/flathub.org\/home\">flathub.org<\/a><\/noindex>.<\/p>\n<p>Avslutningsvis ang\u00e5ende paketf\u00f6rvaltare vill jag n\u00e4mna att det finns ett alternativ att helt avst\u00e5 fr\u00e5n paketf\u00f6rvaltare genom att kombinera bin\u00e4ra filer och installationsscript i ett paket. <\/p>\n<p>Ett s\u00e5dant bundle m\u00f6jligg\u00f6r att skapa ett gemensamt paket f\u00f6r olika distributioner och plattformar, och att produktionen av en interaktiv installationsprocess g\u00f6rs med n\u00f6dv\u00e4ndig anpassning. Jag har st\u00f6tt p\u00e5 s\u00e5dana paket f\u00f6r Linux endast fr\u00e5n VMware.<\/p>\n<h2>Uppdateringsproblem<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Linux i m\u00e5nga skepnader: hur man arbetar med vilken distribution som helst\" src=\"\/wp-content\/uploads\/2019\/10\/aa14b10a434c28541574421d97807de7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u00c4ven om alla beroendeproblem \u00e4r l\u00f6sta kan programmet fungera olika p\u00e5 samma distribution. Problemet ligger i uppdateringarna.<\/p>\n<p>Det finns 3 uppdateringsstrategier:<\/p>\n<ul>\n<li>Den enklaste - att aldrig uppdatera. St\u00e4llde in servern och gl\u00f6mde den. Varf\u00f6r uppdatera om allt fungerar? Problemen b\u00f6rjar vid f\u00f6rsta kontakten med supporten. Distributionens skapare st\u00f6djer endast den uppdaterade versionen. <\/li>\n<li>Man kan lita p\u00e5 distribut\u00f6ren och st\u00e4lla in automatisk uppdatering. I s\u00e5 fall \u00e4r ett samtal till supporten troligt direkt efter en misslyckad uppdatering.<\/li>\n<li>Alternativet att manuellt uppdatera f\u00f6rst efter att det har testats p\u00e5 testinfrastruktur \u00e4r det mest p\u00e5litliga, men ocks\u00e5 det dyraste och mest arbetskr\u00e4vande. Inte alla har r\u00e5d med det.<\/li>\n<\/ul>\n<p>\nEftersom olika anv\u00e4ndare till\u00e4mpar olika uppdateringsstrategier, m\u00e5ste b\u00e5de den senaste versionen och alla tidigare utgivningar st\u00f6djas. Detta komplicerar b\u00e5de utvecklings- och testprocessen och ger mer huvudv\u00e4rk f\u00f6r supporten.<\/p>\n<h2>M\u00e5ngfald av h\u00e5rdvaruplattformar<\/h2>\n<p>\nOlika h\u00e5rdvaruplattformar \u00e4r ett problem som i stor utstr\u00e4ckning \u00e4r specifikt f\u00f6r native-kod. Minst sagt m\u00e5ste man bygga bin\u00e4rer f\u00f6r varje st\u00f6dd plattform.<\/p>\n<p>I projektet Veeam Agent for Linux kan vi fortfarande inte st\u00f6dja n\u00e5got RISC-relaterat.<\/p>\n<p>Jag kommer inte att g\u00e5 in p\u00e5 det h\u00e4r \u00e4mnet i detalj. Jag kommer bara att ange de grundl\u00e4ggande problemen: plattformsberoende typer, som <code>size_t<\/code>, strukturer och byte order.<\/p>\n<h2>Statisk och\/eller dynamisk l\u00e4nkning<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Linux i m\u00e5nga skepnader: hur man arbetar med vilken distribution som helst\" src=\"\/wp-content\/uploads\/2019\/10\/dc473aad4ea0818940af7eafdbc641fd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nFr\u00e5gan \"Hur man l\u00e4nkar till bibliotek - dynamiskt eller statiskt?\" b\u00f6r diskuteras.<\/p>\n<p>Som regel anv\u00e4nder C\/C++-applikationer p\u00e5 Linux dynamisk l\u00e4nkning. Det fungerar utm\u00e4rkt om applikationen \u00e4r byggd specifikt f\u00f6r en viss distribution.<\/p>\n<p>Om m\u00e5let \u00e4r att t\u00e4cka olika distributioner med en enda bin\u00e4rfil, m\u00e5ste man anpassa sig efter den \u00e4ldsta st\u00f6dda distributionen. F\u00f6r oss \u00e4r detta Red Hat 6. Den inneh\u00e5ller gcc 4.4, som inte ens st\u00f6der standarden f\u00f6r C++11. <noindex><a rel=\"nofollow\" href=\"https:\/\/gcc.gnu.org\/projects\/cxx-status.html\">fullst\u00e4ndigt<\/a><\/noindex>.<\/p>\n<p>Vi bygger v\u00e5rt projekt med gcc 6.3, som fullt ut st\u00f6der C++14. Naturligtvis, i s\u00e5 fall m\u00e5ste vi ta med libstdc++-biblioteket och boost med oss p\u00e5 Red Hat 6. Det enklaste \u00e4r att l\u00e4nka med dem statiskt.<\/p>\n<p>Men tyv\u00e4rr g\u00e5r det inte att l\u00e4nka statiskt med alla bibliotek.<\/p>\n<p>F\u00f6r det f\u00f6rsta, systembibliotek som <i>libfuse<\/i>, <i>libblkid<\/i> m\u00e5ste l\u00e4nkas dynamiskt f\u00f6r att s\u00e4kerst\u00e4lla kompatibilitet med k\u00e4rnan och dess moduler. <\/p>\n<p>F\u00f6r det andra finns det en detalj med licenser. <\/p>\n<p>GPL-licensen till\u00e5ter i princip att l\u00e4nka bibliotek enbart med \u00f6ppen k\u00e4llkod. MIT och BSD till\u00e5ter statisk l\u00e4nkning och till\u00e5ter att inkludera bibliotek i projektet. Men LGPL verkar som inte mots\u00e4ger statisk l\u00e4nkning, men kr\u00e4ver att man tillhandah\u00e5ller filer som beh\u00f6vs f\u00f6r l\u00e4nkning till allm\u00e4nheten. <\/p>\n<p>Generellt sett s\u00e4kerst\u00e4ller anv\u00e4ndningen av dynamisk l\u00e4nkning att man slipper att f\u00f6rse n\u00e5got.<\/p>\n<h2>Byggande av C\/C++-applikationer<\/h2>\n<p>\nF\u00f6r att bygga C\/C++-applikationer f\u00f6r olika plattformar och distributioner r\u00e4cker det med att v\u00e4lja eller bygga en passande version av gcc och anv\u00e4nda krosskompilatorer f\u00f6r specifika arkitekturer, och samla hela bibliotekssortimentet. Detta arbete \u00e4r fullt genomf\u00f6rbart men ganska besv\u00e4rligt. Och det finns inga garantier f\u00f6r att valt kompilator och bibliotek kommer att ge en fungerande variant. <\/p>\n<p>En uppenbar f\u00f6rdel: infrastrukturen f\u00f6renklas kraftigt, eftersom hela byggprocessen kan utf\u00f6ras p\u00e5 en och samma maskin. Dessutom \u00e4r det tillr\u00e4ckligt att bygga en upps\u00e4ttning bin\u00e4rfiler f\u00f6r en arkitektur och man kan paketera dem i paket f\u00f6r olika distributioner. S\u00e5 h\u00e4r byggs paketen f\u00f6r veeam f\u00f6r Veeam Agent f\u00f6r Linux.<\/p>\n<p>I motsats till detta alternativ kan man helt enkelt f\u00f6rbereda en byggfarm, det vill s\u00e4ga flera maskiner f\u00f6r kompilering. Varje s\u00e5dan maskin kommer att s\u00e4kerst\u00e4lla att applikationen kompileras och paketet byggs f\u00f6r en specifik distribution och viss arkitektur. I det h\u00e4r fallet sker kompileringen med de verktyg som distribut\u00f6ren har f\u00f6rberett. Det inneb\u00e4r att steget att f\u00f6rbereda kompilatorn och v\u00e4lja bibliotek faller bort. Dessutom kan byggprocessen enkelt parallelliseras. <\/p>\n<p>Det finns dock en nackdel med ett s\u00e5dant tillv\u00e4gag\u00e5ngss\u00e4tt: f\u00f6r varje distribution inom samma arkitektur m\u00e5ste man kompilera sin egen upps\u00e4ttning bin\u00e4ra filer. En annan nackdel \u00e4r att det kr\u00e4vs ett stort antal maskiner som beh\u00f6ver underh\u00e5llas, samt att man m\u00e5ste avs\u00e4tta mycket diskutrymme och RAM. <\/p>\n<p>P\u00e5 s\u00e5 s\u00e4tt byggs KMOD-paketet f\u00f6r k\u00e4rnmodulen veeamsnap f\u00f6r Red Hat-distributioner.<\/p>\n<h2>Open Build Service<\/h2>\n<p>\nKollegor fr\u00e5n SUSE har f\u00f6rs\u00f6kt att realisera en slags gyllene medelv\u00e4g i form av en s\u00e4rskild tj\u00e4nst f\u00f6r att kompilera applikationer och bygga paket \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/openbuildservice.org\/\">openbuildservice<\/a><\/noindex>.<\/p>\n<p>Det \u00e4r i grunden en hypervisor som skapar en virtuell maskin, installerar alla n\u00f6dv\u00e4ndiga paket i den, utf\u00f6r kompileringen av applikationen och bygger paketet i denna isolerade milj\u00f6, efter vilket den virtuella maskinen frig\u00f6rs.<\/p>\n<p><img decoding=\"async\" alt=\"Linux i m\u00e5nga skepnader: hur man arbetar med vilken distribution som helst\" src=\"\/wp-content\/uploads\/2019\/10\/93d2a70c589a7186ecef85a7863e59e8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDen schemal\u00e4ggare som implementerats i OpenBuildService kommer sj\u00e4lv att avg\u00f6ra hur m\u00e5nga virtuella maskiner den kan starta f\u00f6r optimal hastighet vid paketbyggande. Den inbyggda signeringsmekanismen kommer automatiskt att signera paketen och l\u00e4gga upp dem i det inbyggda repositoryt. Det inbyggda versionskontrollsystemet kommer att spara historik \u00f6ver \u00e4ndringar och byggen. Det \u00e5terst\u00e5r bara att l\u00e4gga till sina k\u00e4llkoder i detta system. Det \u00e4r inte ens n\u00f6dv\u00e4ndigt att sj\u00e4lv driva en server; man kan ocks\u00e5 anv\u00e4nda en \u00f6ppen.<\/p>\n<p>Det finns dock ett problem: en s\u00e5dan kombination passar sv\u00e5rt in i den befintliga infrastrukturen. Till exempel beh\u00f6vs inte versionskontroll, vi har redan v\u00e5r egen f\u00f6r k\u00e4llkoder. V\u00e5r signeringsmekanism skiljer sig: vi anv\u00e4nder en s\u00e4rskild server. Repositoryt beh\u00f6vs inte heller. <\/p>\n<p>Dessutom \u00e4r st\u00f6det f\u00f6r andra distributioner \u2014 till exempel Red Hat \u2014 ganska bristf\u00e4lligt, vilket \u00e4r fullt f\u00f6rst\u00e5eligt.<\/p>\n<p>En f\u00f6rdel med denna tj\u00e4nst \u00e4r den snabba supporten f\u00f6r den nya versionen av SUSE-distributionen. Innan det officiella tillk\u00e4nnagivandet av releasen l\u00e4ggs de n\u00f6dv\u00e4ndiga paketen f\u00f6r byggandet upp i det offentliga arkivet. En ny distribution visas i listan \u00f6ver tillg\u00e4ngliga distributioner p\u00e5 OpenBuildService. Vi markerar rutan, och den l\u00e4ggs till i byggplanen. P\u00e5 s\u00e5 s\u00e4tt kan till\u00e4gget av den nya versionen av distributionen g\u00f6ras n\u00e4stan med ett klick.<\/p>\n<p>I v\u00e5r infrastruktur, med hj\u00e4lp av OpenBuildService, byggs hela m\u00e5ngfalden av KMP-paket f\u00f6r veeamsnap-modulen f\u00f6r SUSE-distributioner.<\/p>\n<p>Vidare skulle jag vilja fokusera p\u00e5 fr\u00e5gor som \u00e4r specifika f\u00f6r k\u00e4rnmoduler.<\/p>\n<h2>kernel ABI<\/h2>\n<p>\nLinux-k\u00e4rnmoduler har historiskt spridits i form av k\u00e4llkod. Anledningen \u00e4r att k\u00e4rnans skapare inte belastar sig med att st\u00f6dja en stabil API f\u00f6r k\u00e4rnmoduler, \u00e4n mindre p\u00e5 bin\u00e4r niv\u00e5, vilket kallas kABI.<\/p>\n<p>F\u00f6r att bygga en modul f\u00f6r det vanilj-k\u00e4rnan kr\u00e4vs specifika header-filer f\u00f6r just den k\u00e4rnan, och den kommer endast att fungera p\u00e5 denna k\u00e4rna. <\/p>\n<p>DKMS m\u00f6jligg\u00f6r automatisering av byggprocessen f\u00f6r moduler vid k\u00e4rnuppdateringar. Som ett resultat anv\u00e4nder anv\u00e4ndare av Debian-arkivet (och dess m\u00e5nga sl\u00e4ktingar) antingen k\u00e4rnmoduler fr\u00e5n distributionsarkivet eller moduler som byggs fr\u00e5n k\u00e4llkoden med hj\u00e4lp av DKMS.<\/p>\n<p>Denna situation tillfredsst\u00e4ller dock inte s\u00e4rskilt Enterprise-segmentet. Distribut\u00f6rer av propriety-kod vill sprida produkten i form av f\u00e4rdiga bin\u00e4rer. <\/p>\n<p>Administrat\u00f6rer vill inte h\u00e5lla utvecklingsverktyg p\u00e5 produktionsservrar av s\u00e4kerhetssk\u00e4l. Distribut\u00f6rer av Enterprise Linux, som Red Hat och SUSE, har beslutat att de kan st\u00f6dja stabil kABI f\u00f6r sina anv\u00e4ndare. Som ett resultat har KMOD-paket f\u00f6r Red Hat och KMP-paket f\u00f6r SUSE uppst\u00e5tt.<\/p>\n<p>Essensen av denna l\u00f6sning \u00e4r ganska enkel. F\u00f6r en specifik version av distributionen fryses k\u00e4rnans API. Distribut\u00f6ren h\u00e4vdar att de anv\u00e4nder just k\u00e4rnan, exempelvis 3.10, och g\u00f6r endast korrigeringar och f\u00f6rb\u00e4ttringar som inte p\u00e5verkar k\u00e4rnans gr\u00e4nssnitt, och moduler som byggs f\u00f6r den allra f\u00f6rsta k\u00e4rnan kan anv\u00e4ndas f\u00f6r alla efterf\u00f6ljande utan att beh\u00f6va kompileras om.<\/p>\n<p>Red Hat h\u00e4vdar att kABI-kompatibilitet g\u00e4ller f\u00f6r distributionen under hela livscykeln. Det betyder att en kompilerad modul f\u00f6r RHEL 6.0 (utg\u00e5van november 2010) ocks\u00e5 ska fungera p\u00e5 version 6.10 (utg\u00e5van juni 2018). Det \u00e4r n\u00e4stan 8 \u00e5r. Naturligtvis \u00e4r detta en ganska komplex uppgift. <br \/>\nVi har noterat flera fall d\u00e4r modulen veeamsnap slutade fungera p\u00e5 grund av problem med kABI-kompatibilitet. <\/p>\n<p>Efter att modulen veeamsnap, som kompilerades f\u00f6r RHEL 7.0, visade sig vara inkompatibel med k\u00e4rnan fr\u00e5n RHEL 7.5, men \u00e4nd\u00e5 laddades och garanterat kraschade servern, avstod vi fr\u00e5n att anv\u00e4nda kABI-kompatibilitet f\u00f6r RHEL 7 \u00f6verhuvudtaget. <\/p>\n<p>F\u00f6r n\u00e4rvarande inneh\u00e5ller KMOD-paketet f\u00f6r RHEL 7 en byggnad f\u00f6r varje version av utg\u00e5van och ett skript som s\u00e4kerst\u00e4ller att modulen laddas.<\/p>\n<p>SUSE har n\u00e4rmat sig uppgiften med kABI-kompatibilitet p\u00e5 ett mer f\u00f6rsiktigt s\u00e4tt. De s\u00e4kerst\u00e4ller kABI-kompatibilitet endast inom en servicepack. <\/p>\n<p>Till exempel sl\u00e4pptes SLES 12 i september 2014. SLES 12 SP1 kom redan i december 2015, s\u00e5 det gick knappt ett \u00e5r. Trots att b\u00e5da utg\u00e5vorna anv\u00e4nder k\u00e4rna 3.12, \u00e4r de kABI-inkompatibla. Det \u00e4r uppenbart att det \u00e4r mycket enklare att uppr\u00e4tth\u00e5lla kABI-kompatibilitet under bara ett \u00e5r. Ett \u00e5rligt cykel f\u00f6r uppdatering av k\u00e4rnmodul b\u00f6r inte orsaka problem f\u00f6r modulskaparna. <\/p>\n<p>Som resultat av denna politik fr\u00e5n SUSE har vi inte noterat n\u00e5got problem med kABI-kompatibilitet f\u00f6r v\u00e5r modul veeamsnap. Visserligen \u00e4r antalet paket f\u00f6r SUSE n\u00e4stan en ordning mer.<\/p>\n<h2>Patchar och backports<\/h2>\n<p>\n\u00c4ven om distribut\u00f6rerna f\u00f6rs\u00f6ker s\u00e4kerst\u00e4lla kABI-kompatibilitet och k\u00e4rnstabilitet, str\u00e4var de ocks\u00e5 efter att f\u00f6rb\u00e4ttra prestanda och \u00e5tg\u00e4rda defekter i denna stabila k\u00e4rna. <\/p>\n<p>D\u00e4rut\u00f6ver f\u00f6ljer k\u00e4rnutvecklarna f\u00f6r enterprise linux f\u00f6r\u00e4ndringar i den vaniljk\u00e4rnan och \u00f6verf\u00f6r dem till sin \"stabila\" k\u00e4rna.<\/p>\n<p>Ibland leder detta till nya <noindex><a rel=\"nofollow\" href=\"https:\/\/access.redhat.com\/solutions\/3658111\">fel<\/a><\/noindex>.<\/p>\n<p>I den senaste utg\u00e5van av Red Hat 6, i en av de mindre uppdateringarna, kom ett fel in. Det ledde till att modulen veeamsnap garanterat kraschade systemet vid frig\u00f6ring av en snapshot. Genom att j\u00e4mf\u00f6ra k\u00e4llkoden f\u00f6r k\u00e4rnan f\u00f6re och efter uppdateringen, uppt\u00e4ckte vi att problemet var en backport. En liknande fix gjordes i den vaniljk\u00e4rnan version 4.19. Men i den vaniljk\u00e4rnan fungerade denna fix korrekt, medan det vid \u00f6verf\u00f6ringen till \"stabila\" 2.6.32 uppstod ett problem med spin-locking.<\/p>\n<p>Sj\u00e4lvklart, fel h\u00e4nder alla och alltid, men var det v\u00e4rt att dra \u00f6ver koden fr\u00e5n 4.19 till 2.6.32, med risk f\u00f6r stabiliteten?.. Jag \u00e4r inte s\u00e4ker...<\/p>\n<p>Det v\u00e4rsta \u00e4r n\u00e4r marknadsf\u00f6ring kopplas p\u00e5 dragkampen mellan \"stabilitet\"  \"modernisering\". Marknadsavdelningen vill ha ett stabilt k\u00e4rnversion av den uppdaterade distributionen, \u00e5 ena sidan, men \u00e5 andra sidan vill de att den ska prestera b\u00e4ttre och ha nya funktioner. Det leder till konstiga kompromisser. <\/p>\n<p>N\u00e4r jag f\u00f6rs\u00f6kte kompilera modulen p\u00e5 k\u00e4rna 4.4 fr\u00e5n SLES 12 SP3 blev jag f\u00f6rv\u00e5nad \u00f6ver att uppt\u00e4cka funktionalitet fr\u00e5n vanilj 4.8. Enligt min \u00e5sikt liknar implementeringen av blockin och utg\u00e5ng i k\u00e4rna 4.4 fr\u00e5n SLES 12 SP3 mer k\u00e4rna 4.8 \u00e4n den tidigare stabila 4.4-versionen fr\u00e5n SLES12 SP2. Jag kan inte bed\u00f6ma hur mycket kod som \u00f6verf\u00f6rdes fr\u00e5n k\u00e4rna 4.8 till SLES-k\u00e4rnan 4.4 f\u00f6r SP3, men jag kan inte kalla k\u00e4rnan f\u00f6r det stabila 4.4. <\/p>\n<p>Det mest frustrerande \u00e4r att man vid skrivning av moduler, som ska fungera bra p\u00e5 olika k\u00e4rnor, inte l\u00e4ngre kan lita p\u00e5 k\u00e4rnversionen. Man m\u00e5ste ocks\u00e5 ta h\u00e4nsyn till distributionen. Tur att man ibland kan f\u00f6rlita sig p\u00e5 definitioner som dyker upp tillsammans med nya funktioner, men denna m\u00f6jlighet finns inte alltid. <\/p>\n<p>Som ett resultat v\u00e4xer koden med ursprungliga kompilationsdirektiv.<\/p>\n<p>Det finns ocks\u00e5 patchar som f\u00f6r\u00e4ndrar den dokumenterade API:en f\u00f6r k\u00e4rnan. <br \/>\nJag snubblade \u00f6ver distributionen <noindex><a rel=\"nofollow\" href=\"https:\/\/neon.kde.org\/\">KDE neon<\/a><\/noindex> 5.16 och blev v\u00e4ldigt f\u00f6rv\u00e5nad \u00f6ver att se att anropet lookup_bdev i denna version av k\u00e4rnan hade \u00e4ndrat parameternas lista.<\/p>\n<p>F\u00f6r att kunna kompilera var jag tvungen att l\u00e4gga till ett skript i makefile som kollar om parametern mask finns i funktionen lookup_bdev.<\/p>\n<h2>Underskrift av k\u00e4rnmoduler<\/h2>\n<p>\nMen l\u00e5t oss \u00e5terg\u00e5 till fr\u00e5gan om distribution av paket.<\/p>\n<p>En av f\u00f6rdelarna med stabil kABI \u00e4r att k\u00e4rnmoduler i form av bin\u00e4rfil kan signeras. I detta fall kan utvecklaren vara s\u00e4ker p\u00e5 att modulen inte har skadats av misstag eller medvetet \u00e4ndrats. Detta kan verifieras med kommandot modinfo. <\/p>\n<p>Distributioner fr\u00e5n Red Hat och SUSE till\u00e5ter att signaturen p\u00e5 modulen kontrolleras och att den bara laddas om det motsvarande certifikatet \u00e4r registrerat i systemet. Certifikatet \u00e4r en offentlig nyckel som anv\u00e4nds f\u00f6r att signera modulen. Vi distribuerar det som ett separat paket.<\/p>\n<p>Problemet h\u00e4r \u00e4r att certifikat kan antingen vara inbyggda i k\u00e4rnan (de anv\u00e4nds av distribut\u00f6rer), eller m\u00e5ste skrivas in i EFI:s icke-flyktiga minne med hj\u00e4lp av ett verktyg. <i>mokutil<\/i>. Verktyget <i>mokutil<\/i> vid installation av certifikat kr\u00e4vs det att systemet startas om och \u00e4ven innan operativsystemets k\u00e4rna laddas upp, erbjuds administrat\u00f6ren att godk\u00e4nna laddningen av det nya certifikatet. <\/p>\n<p>S\u00e5ledes kr\u00e4ver till\u00e4gg av certifikat fysisk \u00e5tkomst till systemet f\u00f6r administrat\u00f6ren. Om maskinen \u00e4r placerad n\u00e5gonstans i molnet eller bara i en fj\u00e4rrserver med \u00e5tkomst endast via n\u00e4tverket (till exempel via ssh), kommer det att vara om\u00f6jligt att l\u00e4gga till certifikatet. <\/p>\n<h2>EFI p\u00e5 virtuella maskiner<\/h2>\n<p>\nTrots att EFI redan l\u00e4nge st\u00f6ds av n\u00e4stan alla tillverkare av moderkort, kan administrat\u00f6ren vid installationen av systemet gl\u00f6mma att t\u00e4nka p\u00e5 behovet av EFI, och den kan vara avst\u00e4ngd. <\/p>\n<p>Inte alla hypervisorer st\u00f6der EFI. VMWare vSphere st\u00f6der EFI fr\u00e5n version 5. <br \/>\nMicrosoft Hyper-V fick ocks\u00e5 st\u00f6d f\u00f6r EFI, fr\u00e5n Hyper-V f\u00f6r Windows Server 2012R2. <\/p>\n<p>Men i standardkonfigurationen \u00e4r denna funktionalitet f\u00f6r Linux-maskiner avst\u00e4ngd, vilket inneb\u00e4r att certifikat inte kan installeras. <\/p>\n<p>I vSphere 6.5 kan alternativet <b>Secure Boot<\/b> endast st\u00e4llas in i den gamla versionen av webgr\u00e4nssnittet som fungerar via Flash. Web UI i HTML-5 ligger fortfarande l\u00e5ngt efter.<\/p>\n<h2>Experimentella distributioner<\/h2>\n<p>\nOch till sist ska vi diskutera experimentella distributioner och distributioner utan officiellt st\u00f6d. \u00c5 ena sidan \u00e4r det osannolikt att s\u00e5dana distributioner anv\u00e4nds p\u00e5 servrar i seri\u00f6sa organisationer. Dessa distributioner har ingen officiell support. D\u00e4rf\u00f6r \u00e4r det inte m\u00f6jligt att ge teknisk support f\u00f6r produkter p\u00e5 s\u00e5dana distributioner. <\/p>\n<p>Men s\u00e5dana distributioner blir en praktisk plattform f\u00f6r att testa nya experimentella l\u00f6sningar. Till exempel, Fedora, OpenSUSE Tumbleweed eller instabila versioner av Debian. De \u00e4r ganska stabila. De har alltid nya versioner av program och alltid en ny k\u00e4rna. Om ett \u00e5r kan denna experimentella funktionalitet dyka upp i den uppdaterade RHEL, SLES eller Ubuntu. <\/p>\n<p>S\u00e5 om n\u00e5got inte fungerar p\u00e5 en experimentell distribution \u00e4r det en anledning att utreda problemet och l\u00f6sa det. Man m\u00e5ste vara beredd p\u00e5 att denna funktionalitet snart kommer att dyka upp p\u00e5 anv\u00e4ndarnas produktionsservrar.<\/p>\n<p>Den nuvarande listan \u00f6ver officiellt st\u00f6dda distributioner f\u00f6r version 3.0 kan du studera <noindex><a rel=\"nofollow\" href=\"https:\/\/helpcenter.veeam.com\/docs\/agentforlinux\/userguide\/system_requirements.html?ver=30\">h\u00e4r<\/a><\/noindex>. Men den verkliga listan \u00f6ver distributioner som v\u00e5r produkt kan fungera p\u00e5 \u00e4r mycket bredare.<\/p>\n<p>Personligen var jag intresserad av experimentet med OS \"Elbrus\". Efter att ha f\u00f6rb\u00e4ttrat paketet veeam installerades och fungerade v\u00e5r produkt. Jag skrev om detta experiment p\u00e5 Habr i <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/veeam\/blog\/447960\/\">artikeln<\/a><\/noindex>. <\/p>\n<p>Och st\u00f6det f\u00f6r nya distributioner forts\u00e4tter. Vi f\u00f6rv\u00e4ntar oss att version 4.0 snart sl\u00e4pps. En beta-version b\u00f6r dyka upp snart, s\u00e5 h\u00e5ll utkik efter <noindex><a rel=\"nofollow\" href=\"https:\/\/www.veeam.com\/whats-new-linux-agent.html\">whats-new<\/a><\/noindex>!<br \/>\n<br \/>K\u00e4lla: <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.4 - 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\/sv\/blog\/administrirovanie\/linux-mnogolikij-kak-rabotat-na-lyubom-distributive\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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 \u00e4r m\u00e5ngsidigt: hur man arbetar p\u00e5 vilken distribution som helst | ProHoster","description":"Skapa en backup-applikation.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/linux-mnogolikij-kak-rabotat-na-lyubom-distributive","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/38929","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=38929"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/38929\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/29206"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=38929"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=38929"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=38929"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}