1. Home
  2. Entwickler
  3. Erstellen eines Ubuntu-Kernels mit GitHub & Actions

Erstellen eines Ubuntu-Kernels mit GitHub & Actions

  • Von Gcore
  • June 6, 2023
  • 3 Min.
Erstellen eines Ubuntu-Kernels mit GitHub & Actions

Es ist für jeden DevOps-Experten wichtig, auf dem neuesten Stand der Kernel-Entwicklung zu sein. Canonical, das Kraftpaket hinter Ubuntu, verfolgt die Entwicklung des Mainline-Kernels über das Mainline-Crack Git-Repository. In diesem Blogbeitrag untersuchen wir den Aufbau einer effizienten GitHub-Actions-Pipeline, die den Build-Prozess und die Verteilung von Ubuntu-Kernel-Deb-Paketen automatisiert.

Canonical bietet ein praktisches Debian/Rules-Makefile, das die Erstellung des Ubuntu-Kernels vereinfacht. Dieses Makefile ist das wichtigste Tool, das wir in unserem Beispiel verwenden. Um mehr über debian/rules zu erfahren, lesen Sie die debmake-doc.

Überblick über die CI-Pipeline

Die Pipeline umfasst zwei Hauptaufgaben: Einen Build erstellen und diesen veröffentlichen. Der Build-Job wird in einem benutzerdefinierten Docker-Container mit dem Namen custom-linux-builder-jammy:latest ausgeführt, der auf Ubuntu 22.04 basiert und mit allen notwendigen Abhängigkeiten für die Ubuntu-Kernelkompilierung ausgestattet ist. Der Publish-Job, der vom Build-Job abhängt, ist für die Bereitstellung der erzeugten Pakete in einem Repository verantwortlich.

Beginnen wir mit dem Überblick über die gesamte CI-Pipeline:

Name: CI on: [push, workflow_dispatch]   jobs:   build: 	runs-on: [ubuntu-22-04, x64, heavy, self-hosted] 	container: custom-linux-builder-jammy:latest 	steps:   	- uses: actions/checkout@v3     	- name: Cleanup     	run: |       	debian/rules clean       	rm -rf ../*.deb /packages     	- name: Dependencies     	run: |       	apt-get update && \       	mk-build-deps \         	--tool 'apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends --yes' \         	--install --remove debian/control     	- name: Build     	run: |       	debian/rules do_tools=true binary-generic binary       	mkdir /packages && cp -f ../*deb /packages/.     	- uses: actions/upload-artifact@v3     	with:       	name: linux_package       	path: /packages/     publish: 	runs-on: [self-hosted, ubuntu-22-04] 	needs: [build] 	steps:   	- name: Get Secrets     	uses: hashicorp/vault-action@v2.4.1     	id: secrets     	with:       	url: <VAULT_INSTANCE_URL>       	token: ${{ secrets.VAULT_TOKEN }}       	secrets: |         	<PATH_TO_PRIVATE_KEY>| key ;     	- uses: actions/download-artifact@v3     	with:       	name: linux_package     	- name: Send to Repo     	uses: appleboy/scp-action@master     	with:       	host: <REPOSITORY_URL>       	username: <REPOSITORY_USERNAME>       	key: ${{ steps.secrets.outputs.key }}       	port: <PORT_NUMBER>       	source: "*.deb"       	target: <PATH_IN_REPOSITORY>

Im Detail

Lassen Sie uns in die Tiefe gehen und die GitHub-Actions-Pipeline im Detail betrachten.

Build-Phase

Die Build-Phase ist das Herzstück der Pipeline und ist für die Kompilierung und Verpackung des Ubuntu-Kernels verantwortlich. Die Pipeline verwendet das Docker-Image custom-linux-builder-jammy:latest, das auf Ubuntu 22.04 basiert und alle notwendigen Abhängigkeiten für die Erstellung des Ubuntu-Kernels enthält.

Checkout

Der Schritt actions/checkout@v3 sorgt dafür, dass die Pipeline mit der neuesten Version der Codebasis arbeitet. Das bedeutet, dass alle aktuellen Überarbeitungen in den Build eingearbeitet werden.

Cleanup (Bereinigung)

Der Cleanup-Schritt entfernt alle Reste aus früheren Arbeitsabläufen. Er bereinigt den Quellbaum und entfernt alle übrig gebliebenen .deb-Pakete aus früheren Builds, sodass Sie ganz neu beginnen können. Hier sind die relevanten Befehle:

debian/rules clean rm -rf ../*.deb

Dependencies (Abhängigkeiten)

Der Dependencies-Schritt bereitet die in debian/control aufgeführten Abhängigkeiten vor und installiert sie. Es sorgt dafür, dass die Build-Umgebung über alle benötigten Tools und Abhängigkeiten verfügt, bevor sie mit der Kernelkompilierung beginnt. Der Code für diesen Schritt lautet wie folgt:

apt-get update && \ mk-build-deps \   --tool 'apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends --yes' \   --install --remove debian/control

Build

debian/rules do_tools=true binary-generic binary mkdir /packages && cp -f ../*deb /packages/.

Der Build-Schritt umfasst die eigentliche Kompilierung und Verpackung des Ubuntu-Kernels. Er führt das Skript mit den angegebenen Parametern aus, einschließlich , und .

Die Reihenfolge dieser Ziele ist wichtig. Der Parameter aktiviert die Erstellung der gängigen Linux-Tools (bpftool, cpupower, perf, etc.) wird zuerst ausgeführt, sodass das binary-Ziel die Ergebnisse von nutzen kann.

Sobald der Build abgeschlossen ist, werden die resultierenden Debian-Pakete im übergeordneten Verzeichnis (../) gespeichert und dann zur späteren Verwendung in das Verzeichnis /packages kopiert.

Upload Artifact (Artefakt-Upload)

Nachdem der Build erfolgreich abgeschlossen wurde, übernimmt der Schritt actions/upload-artifact@v3 und lädt die neu generierten Debian-Pakete als Artefakt namens „linux_package“ hoch. Damit ist die letzte Phase eingeleitet, der Publish-Job.

Publish (Veröffentlichen)

Die letzte Stufe in unserer Pipeline ist der Publish-Job. Dieser Job lädt die zuvor erstellten Kernel-Pakete in das Repository hoch. Die Schritte sind relativ einfach:

  1. Secrets sichern: Zunächst verwenden wir , um Secrets aus einer HashiCorp-Vault-Instanz zu holen. So erhalten Sie sicheren Zugriff auf die Ressourcen, die Sie für die nächsten Schritte dieses Jobs benötigen.
  2. Artefakt abrufen: Dieser Schritt ruft das Artefakt ab, das durch den vorherigen Build-Job über erzeugt wurde.
  3. Deployment ins Repository: Dieser Schritt verwendet , um die Debian-Pakete sicher in das gewünschte entfernte Repository zu übertragen.

Mit diesen Schritten im Publish-Job werden die Ubuntu-Kernel-Deb-Pakete erfolgreich in das angegebene Repository hochgeladen, was einen einfachen Zugriff und eine effiziente Verteilung gewährleistet.

Fazit

Mit dieser einfachen GitHub-Actions-Pipeline wird das Erstellen (Build) und Veröffentlichen (Publish) von Ubuntu-Kerneln zu einem automatisierten und effizienten Prozess, bei dem das Risiko menschlicher Fehler geringer ist. Wir hoffen, dass dieser Leitfaden Ihnen hilft, Ihre DevOps-Prozesse zu rationalisieren und Ihre Produktivität zu steigern!

Ähnliche Artikel

Die Entwicklung der KI-Infrastruktur: Der Übergang von On-Premise zur Cloud und zur Edge

Die KI-Infrastruktur, das Rückgrat der modernen Technologie, hat einen bedeutenden Wandel erfahren. Ursprünglich war sie in traditionellen On-Premises-Konfigurationen verwurzelt, hat sich allerdings zu dynamischeren, cloudbasierten und Edge

Was ist Managed Kubernetes?

Managed Kubernetes-Dienste vereinfachen die Komplexität containerisierter Umgebungen, indem sie den gesamten Lebenszyklus von Kubernetes-Clustern für Unternehmen verwalten, die auf agile Infrastrukturen umstellen. Diese Dienste nehmen den T

Einrichten eines Dual-Boot-Systems mit Ubuntu und Windows

Entdecken Sie in unserer übersichtlichen Anleitung, wie Sie Ubuntu und Windows gleichzeitig auf einem einzigen Rechner ausführen können. Wir führen Sie durch den Prozess von der Partitionierung bis hin zur Installation und erklären die Schr

Partitionieren einer Festplatte unter Linux

Eine reibungslose Festplattenverwaltung ist für jeden, der in das Ökosystem von Linux einsteigt, von entscheidender Bedeutung. Ganz gleich, ob Sie ein neues Laufwerk einrichten, Platz für verschiedene Dateisysteme schaffen oder den Speicher

Was ist künstliche Intelligenz und wie funktioniert sie?

Künstliche Intelligenz (KI) kann große Datenmengen verarbeiten und aus früheren Erkenntnissen lernen, um Ergebnisse vorherzusagen, Prozesse zu optimieren und sogar neue Ideen zu entwickeln. Da KI zunehmend in unsere digitale Infrastruktur i

Container vs. Virtuelle Maschinen (VMs)

Durch Virtualisierung können mehrere Betriebssysteme und Anwendungen auf einem einzigen physischen Server ausgeführt werden, wodurch die Hardwareressourcen optimiert und die Verwaltung vereinfacht werden. Es umfasst zwei miteinander verwobe

Melden Sie sich für unseren Newsletter an

Erhalten Sie die neuesten Branchentrends, exklusive Einblicke und Gcore-Updates direkt in Ihren Posteingang.