{"id":1834,"date":"2021-06-28T12:23:24","date_gmt":"2021-06-28T10:23:24","guid":{"rendered":"https:\/\/my.stargazer.at\/?p=1834"},"modified":"2021-06-28T12:23:24","modified_gmt":"2021-06-28T10:23:24","slug":"working-my-way-to-automatic-kernel-builds","status":"publish","type":"post","link":"https:\/\/my.stargazer.at\/de\/2021\/06\/28\/working-my-way-to-automatic-kernel-builds\/","title":{"rendered":"Automatisierung der kernel builds"},"content":{"rendered":"<p>Es ist ziemlich offensichtlich, dass die Betreuung des <a href=\"https:\/\/github.com\/ToeiRei\/kernel-deb\">Debian Kernel Repos<\/a>, das ich <a href=\"https:\/\/my.stargazer.at\/2020\/10\/30\/building-a-gentoo-linux-kernel-on-debian\/\">in diesem Artikel<\/a> angek\u00fcndigt hatte, einiges an Arbeit ist &#8211; gerade da ich den Kernel in 4 &#8222;Geschmacksrichtungen&#8220; anbiete: Vanilla, VM und beide Arten mit dem Gentoo Patchset &#8211; mit anderen Worten: Es mussten Verbesserungen her &#8211; und zwar schnell. <a href=\"https:\/\/my.stargazer.at\/2021\/01\/27\/ccache-on-kernels\/\">Die Einf\u00fchrung von ccache<\/a> brachte zwar eine leichte Verbesserung (12-15% Cache Hits), aber das ist auch alles Andere als &#8218;viel&#8216; oder &#8218;Gro\u00dfartig&#8216;.<\/p>\n<p>Der zweite Schritt war ein Build-Script, damit ich nicht alle Schritte h\u00e4ndisch zu machen hatte und das Zeug sich selbst baut anstatt auf mich zu warten. Es war keine gro\u00dfe Sache, ein einfaches Batch-Script, das seinen Job tat. Aber unterm Strich war es mir zu unflexibel f\u00fcr das, was ich das Script gebraucht habe. Aufgrund der fehlenden Fehlererkennung funktionierte das Script obendrein nur, wenn alles glatt lief &#8211; also in einer nicht-vorhandenen, perfekten Welt.<\/p>\n<p>Also zur\u00fcck an den Start:<\/p>\n<p>Das Erste was ich brauchte, war Config-Management um die Konsistenz der Config f\u00fcr jeden Kernel zu gew\u00e4hrleisten. Git ist f\u00fcr solche Sachen gro\u00dfartig und Github bietet mir entsprechende Sicherheit gegen Plattenausf\u00e4lle. Super.<\/p>\n<p>Das n\u00e4chste Problem, das ich l\u00f6sen wollte war eine &#8218;Ein Script sie zu knechten&#8216;-L\u00f6sung um nicht vier Scripts zu haben, die alle relativ das Gleiche tun. Also war es an der Zeit alles in Funktionen zu kapseln und einige IFs in den Code zu werfen um die vier Geschmacksrichtungen zu erhalten. Nicht ganz perfekt, aber schon eine weitere Verbesserung.<\/p>\n<p>Unser n\u00e4chstes Ziel war nun kaputte Builds bzw. Patches die nicht funktionierten &#8211; also alles was mir die Builds ruiniert &#8211; abzufangen. Das war kein gro\u00dfes Ding mehr, da ich ja alles in Funktionen aufgebrochen hatte. Bei Auftreten eines Fehlers konnte ich so sauber aussteigen ohne die Config wieder in mein Repo zur\u00fcckzuschreiben, was mir am Ende einige Rollbacks meines Repos erspart.<\/p>\n<p>Jetzt ist die Sache zwar schon funktionst\u00fcchtig, aber wenig komfortabel, da ich immer noch die exakte Kernel-Version heraussuchen musste um den neuen Kernel zu bauen. Ein bisschen curl hier, grep da und schon hatten wir die neueste Version herausgefunden:<\/p>\n<pre>KERNEL_VERSION=`curl -s https:\/\/www.kernel.org | grep -A1 latest_link | tail -n1 | egrep -o '&gt;[^&lt;]+' | egrep -o '[^&gt;]+'`<\/pre>\n<p>Warum eigentlich alles in Bash? Ich muss zugeben, diese Frage wurde mir bereits einige male gestellt und die Antwort ist eigentlich nicht schwer: Ich will das Script leicht pflegen k\u00f6nnen und es in zB C zu schreiben w\u00fcrde mir keinen nennenswerten Vorteile bringen, da ich ohnehin viele shell-exec Aufrufe t\u00e4tigen muss.<\/p>\n<p>Das Script selbst tut seinen Job und was noch blieb war die Config auszulagern, wie ich in <a href=\"https:\/\/my.stargazer.at\/2021\/05\/28\/bash-files-vs-configuration\/\">diesem Beitrag beschreibe<\/a>, da ich diesen Artikel nicht noch weiter in die L\u00e4nge ziehen wollte.<\/p>","protected":false},"excerpt":{"rendered":"<p>Es ist ziemlich offensichtlich, dass die Betreuung des Debian Kernel Repos, das ich in diesem Artikel angek\u00fcndigt hatte, einiges an Arbeit ist &#8211; gerade da ich den Kernel in 4 &#8222;Geschmacksrichtungen&#8220; anbiete: Vanilla, VM und beide Arten mit dem Gentoo Patchset &#8211; mit anderen Worten: Es mussten Verbesserungen her &#8211; und zwar schnell. Die Einf\u00fchrung von ccache brachte [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":1835,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[577,401,22,499],"class_list":["post-1834","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-it-related-stuff","tag-debian","tag-kernel","tag-linux","tag-script"],"_links":{"self":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/posts\/1834","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/comments?post=1834"}],"version-history":[{"count":0,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/posts\/1834\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/media\/1835"}],"wp:attachment":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/media?parent=1834"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/categories?post=1834"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/tags?post=1834"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}