ATIX AG
  • Leistungen
    • Consulting
      • Linux Platform Operations​
      • Infrastructure Automation​
      • Container Plattformen und Cloud​
      • DevOps Prozesse, Tooling und Kultur​
      • Cloud Native Software Entwicklung​
    • Produkt
      • orcharhino
        • Über orcharhino
        • orcharhino Support
        • orcharhino Betrieb
    • Technologien
      • Ansible
      • AWX und Ansible Automation Platform
      • Docker
      • Foreman
      • GitLab
      • Istio
      • Kubernetes
      • Linux-Distributionen
      • OpenShift
      • Puppet
      • OpenVox
      • Rancher
      • Rundeck
      • Saltstack
      • SUSE Manager
      • Terraform
  • Schulungen
    • Ansible-Schulungen
    • AWX-Schulung
    • Docker & Container-Schulung
    • Git-Schulung
    • Kubernetes-Schulung
    • OpenShift-Schulung
    • orcharhino-Schulung
    • OpenVox/Puppet-Schulungen
    • Terraform-Schulung
  • Events
    • Webinare
  • Blog
  • Unternehmen
    • Über uns
    • Referenzen
    • Unternehmenswerte
    • Soziales Engagement
    • Newsroom
    • Newsletter
    • Kontakt
  • Karriere
  • English
  • Click to open the search input field Click to open the search input field Suche
  • Menü Menü
Delbian Repositories Pulp

Große Debian Repositories mit Pulp verwalten

Pulp ist eine kostenlose Open-Source-Plattform für die Verwaltung von Software Repositories. Man kann damit Inhalte von verschiedenen Quellen abrufen, hochladen und verteilen. Die Versionierung des Repository stellt sicher, dass nichts verloren geht, da man jederzeit zu früheren Versionen zurückkehren kann. Mit dem pulp_deb-Plug-in gibt es APT Repository Support.

Pulp Debian Support gibt es schon seit einiger Zeit; die ATIX hat sie vor ein paar Jahren für die Verwendung mit Katello erweitert. Das funktioniert hervorragend für kleine bis mittelgroße Repositories, allerdings ist die Leistung nicht ideal.

Die Herausforderung

Im Jahr 2019 wollten unsere Consultants für eine Demo Debian Stretch und Ubuntu Xenial synchronisieren. Leider mussten sie feststellen, dass dies in der Regel etwa fünf Stunden dauert, nur um dann mit dem Fehler „Cannot allocate memory“ abzubrechen. Was war da los?

ebook Infrastucture Automation

Kostenloses E-Book

Infrastructure Automation mit Linux und Open Source Tools

Das kostenlose E-Book zeigt praxisnah, wie Sie mit Linux und Open-Source-Tools wiederkehrende Aufgaben vereinfachen, Fehler reduzieren und skalierbare IT-Prozesse aufbauen.
Jetzt entdecken.

Jetzt kostenlos herunterladen

Um diese Frage zu beantworten, mussten sie einen genaueren Blick auf die pulp_deb-Implementierung werfen. Der Code ist in mehrere Schritte unterteilt. Die Implementierung stützt sich stark auf die python-debpkgr-Abhängigkeit, die wiederum auf deb822 aus der python-debian-Bibliothek zurückgreift. python-debpkgr ist hauptsächlich dazu gedacht, Debian-Pakete in einem APT Repository zu organisieren. Die Struktur von Debian Repositories sieht wie folgt aus:


/dists/ stretch / Release
/dists/ stretch /main/binary -amd64/ Packages
/dists/ stretch / contrib /binary -amd64/ Packages
/dists/ stretch /non -free/binary -amd64/ Packages
/pool/

Während einer Synchronisation gibt es den „MetadataStep“, der eine Liste von Releases, Komponenten und Paketen (mit Metadaten) aus der MongoDB erhält. Er führt eine gewisse Logik aus: Für jede Kombination von Architektur, Komponente und Release wird eine Liste von Paketen erstellt. Diese Listen enthalten die Pfade zu den tatsächlichen .deb-Paketdateien auf der Festplatte. Schließlich wird jede Liste als Argument an einen debpkgr Call übergeben.

debpkgr ist in erster Linie dazu gedacht, Debian-Pakete in ein Paketarchiv zu verwandeln. Also macht es genau das: Auf jede .deb-Datei wird auf der Festplatte zugegriffen, um die Metadaten zu extrahieren, die debpkgr benötigt. Aufgrund der Art und Weise, wie sich die Paketlisten für verschiedene Architekturen überschneiden, werden viele dieser .deb-Dateien tatsächlich mehrfach geparst.

Die Lösung

Der erste Gedanke unserer Experts war: Eventuell gibt es eine schnelle und einfache Lösung? Sie zogen allerdings auch kompliziertere Ansätze in Betracht, wie die vollständige Umgestaltung der Art und Weise, wie debpkgr arbeitet. Alternativ überlegten sie auch, debpkgr (aus dem MetadataStep) fallen zu lassen und alles selbst zu implementieren.

Die Grundidee bestand darin, ausschließlich Informationen aus der MongoDB zu verwenden, um die Repository-Struktur zu erstellen. Die alte Implementierung musste bereits die Metadaten aus der MongoDB parsen, um die Listen zu erzeugen, die dann an debpkgr übergeben wurden. Das blieb im Wesentlichen unverändert. Unsere Experts mussten die gewünschte Verzeichnisstruktur selbst erstellen. Auch die Symlinks zu den eigentlichen .deb-Dateien mussten sie selbst anlegen. Dann brauchten sie die Möglichkeit, Pakete und Release-Dateien zu schreiben. Wie das immer ist, stießen sie auf ein paar Stolpersteine …

debpkgr erzeugt md5sum, sha1 und sha256 für Metadaten. Das bestehende Datenbankmodell speicherte nur sha256-Hashes. Die tatsächliche Verwendung der Metadaten aus der Datenbank offenbarte einen Fehler. Userdefinierte Metadatenfelder wurden im bestehenden Datenbankmodell nicht gespeichert.

Am Ende kamen unsere Consultants zu folgenden Ergebnissen:

  • Zwei große Pull Requests:

    • Ensure the db is used consistently by quba42 · Pull Request #61 · pulp/pulp_deb
    • MetadataStep performance by quba42 · Pull Request #57 · pulp/pulp_deb
  • Ein Ende unserer Speicherprobleme
  • Doppelt so schnelle Synchronisationen für mittelgroße Repositories (1500 Pakete)

  • Eine Dauer von ca. 3,5 Stunden für die Synchronisierung von Ubuntu Xenial (main, restricted, universe, multiverse) für amd64 (53837 Pakete) auf dem Testsystem

Was alle daraus gelernt haben? Es ist wichtig, die eigenen Werkzeuge zu kennen. Zudem muss man sich genug Zeit nehmen, um die Architektur zu planen und sich das erforderliche Fachwissen anzueignen.

Das könnte Sie auch interessieren:
Live patching und Foreman Live Patching und Foreman und wie die beiden zusammenpassen
Erstellung von Foreman-RPM-Paketen mit Docker-Container Erstellung von Foreman-RPM-Paketen mit Docker-Container
Errata für debian-basierte Systeme in orcharhino Errata für debian-basierte Systeme in orcharhino
orcharhino goes the deb-way orcharhino goes the deb-way
ATIX in action Einsatz von Packer zur schnelleren Durchführung von internen Tests – ATIX in Action
Navigating the XZ Security Vulnerability: A Comprehensive Guide ATIX Blog Die XZ-Sicherheitsschwachstelle: Eine Übersicht
ATIX-Crew
+ postsBio

Der ATIX-Crew besteht aus Leuten, die in unterschiedlichen Bereichen tätig sind: Consulting, Development/Engineering, Support, Vertrieb und Marketing.

  • ATIX-Crew
    Foreman Birthday Party 2024
  • ATIX-Crew
    CrewDay 2024
  • ATIX-Crew
    Die XZ-Sicherheitsschwachstelle: Eine Übersicht
  • ATIX-Crew
    Kafka mit Ansible automatisieren
  • ATIX-Crew
    Konfigurationsmanagement über verschiedene Netze mit AWX
  • ATIX-Crew
    Vergangenheit, Gegenwart und Zukunft von pulp_deb
  • ATIX-Crew
    DevOps Kultur „ohne Bullshit“
  • ATIX-Crew
    Die Zukunft von Ansible
  • ATIX-Crew
    Ein etwas anderer OSAD
  • ATIX-Crew
    Save The Rhino
  • ATIX-Crew
    Ansible Collections – Mehr Übersichtlichkeit und einfachere Teilhabe bei Ansible
  • ATIX-Crew
    SBOL: Open Source basierter Austausch für Biotech Enthusiasten
  • ATIX-Crew
    ATIX @ CfgMgmt Camp 2020
  • ATIX-Crew
    Ansible Rollen testen mit Molecule
  • ATIX-Crew
    Workshops in da Cloud – Was Ansible, Docker und die GitLab CI/CD hierfür bietet
  • ATIX-Crew
    ATIX-Crew on Tour: Geocaching und Nudelsalat am Wasser
  • ATIX-Crew
    Der Debian/Ubuntu Erratum Dienst von ATIX ist jetzt Open Source!
  • ATIX-Crew
    Die ATIX-Crew @ Config Management Camp 2019
  • ATIX-Crew
    Vom Startblock in die Traufe!
  • ATIX-Crew
    orcharhino-installer Plugin Selection
  • ATIX-Crew
    fpm – der schnelle Weg zum Paket
  • ATIX-Crew
    ATIX #CrewDay: Rhino lernt Sprechen!
  • ATIX-Crew
    SaltStack: Salzige Alternative zum Puppetspieler
  • ATIX-Crew
    Konfigurationmanagement mit Ansible
  • ATIX-Crew
    Snapshots für alle!
  • ATIX-Crew
    Erstellung von Foreman-RPM-Paketen mit Docker-Container
  • ATIX-Crew
    Rancher: Neue Container für die (Server-)Farm – schnell und einfach
  • ATIX-Crew
    Rancher: Dirigieren eines Container-Rudels
  • ATIX-Crew
    Docker Swarm: Container im Rudel
  • ATIX-Crew
    Die ATIX auf den Chemnitzer Linux Tagen 2017 – Ein Bericht aus der Sicht unserer Lernenden
  • ATIX-Crew
    Software defined Storage
  • ATIX-Crew
    Docker Container – eine leichtgewichtige Alternative zu Virtualisierungen
  • ATIX-Crew
    Selenium IDE – Automatisiertes Testen von Webanwendungen mit einem Browser

Auf dieser Seite

ISO 27001 Zertifizierung ISO 27001 Zertifikat herunterladen
ISO 9001 Zertifizierung ISO 9001 Zertifikat herunterladen
Newsletter
Nichts mehr verpassen. Melden Sie sich für den ATIX Newsletter an!
Jetzt anmelden
Blog
  • Blog Startseite
  • ATIX Insights
  • Cloud Native
  • Container Plattformen und Cloud
  • DevOps
  • Infrastructure Automation
  • Linux Platform Operations
  • orcharhino
Datenschutz & Impressum

Datenschutz

Impressum

AGB

B2B
Twitter     Facebook    LinkedIn    Youtube     mastodon=

© Copyright – ATIX AG

Nach oben scrollen Nach oben scrollen Nach oben scrollen