Software -Repository

A Software -Repository, oder Repo Kurz gesagt, ist ein Speicherort für Softwarepakete. Oft wird auch ein Inhaltsverzeichnis zusammen mit Metadaten gespeichert. Ein Software -Repository wird normalerweise von verwaltet von Quellcodeverwaltung oder Repository -Manager. Paketmanager Ermöglichen Sie automatisch Installieren und Aktualisieren von Repositories (manchmal als "Pakete" bezeichnet).

Überblick

Viele Softwareverlage und andere Organisationen pflegen Server auf der Internet Zu diesem Zweck entweder kostenlos oder für eine Abonnementgebühr. Repositories können ausschließlich für bestimmte Programme sein, wie z. CPAN für die Perl Programmiersprache oder für eine Ganze Betriebssystem. Betreiber solcher Repositories bieten normalerweise a Paketverwaltungssystem, Tools, mit denen Softwarepakete aus den Repositories gesucht, installiert und auf andere Weise manipulieren sollen. Zum Beispiel viele Linux -Verteilungen verwenden Erweitertes Verpackungstool (Apt), häufig gefunden in Debian basierte Verteilungen oder yum gefunden in roter Hut basierte Verteilungen. Es gibt auch mehrere unabhängige Paketmanagementsysteme wie Pacman, die in verwendet werden Arch Linux und Equo, gefunden in Sabayon Linux.

Da Software -Repositorys nützliche Pakete enthalten, sind wichtige Repositorys zu sein Malware frei. Wenn ein Computer für die Verwendung a konfiguriert ist digital signiert Repository von einem seriösen Anbieter und ist mit einem geeigneten gekoppelt BerechtigungssystemDies reduziert die Bedrohung durch Malware für diese Systeme erheblich. Als Nebeneffekt benötigen viele Systeme, die über diese Funktionen verfügen, keine Anti-Malware-Software wie z. Antiviren Software.[1]

Am wichtigsten Linux -Verteilungen Haben Sie viele Repositorys auf der ganzen Welt, die das Hauptrepository widerspiegeln.

In einer Enterprise -Umgebung wird in der Regel ein Software -Repository verwendet, um Artefakte zu speichern oder externe Repositories zu spiegeln, die aufgrund von Sicherheitsbeschränkungen möglicherweise nicht zugänglich sein können. Solche Repositories können zusätzliche Funktionen wie Zugriffskontrolle, Versioning, Sicherheitskontrollen für hochgeladene Software, Clusterfunktionen usw. liefern und in der Regel eine Vielzahl von Formaten in einem Paket unterstützen, um alle Anforderungen in einem Unternehmen zu erfüllen und damit darauf abzutreten Bieten Sie einen einzelnen Punkt der Wahrheit. Beliebte Beispiele sind Jfrog -Artefaktor[2][3] und Nexus -Repository.[4]

Bei Client Side hilft ein Paketmanager bei der Installation und Aktualisierung der Repositorys.

Auf der Serverseite wird ein Software -Repository normalerweise von Quellvertretern oder Repository -Managern verwaltet. Einige der Repository -Manager erlauben es, einen anderen Repository -Speicherort in eine URL zu aggregieren und einen Caching -Proxy bereitzustellen. Bei kontinuierlichen Erstellungen werden viele Artefakte produziert und oft zentral gespeichert, so dass das automatische Löschen der nicht freigegebenen Löschung wichtig ist.

Paketverwaltungssystem vs. Paketentwicklungsprozess

A Paketverwaltungssystem unterscheidet sich von a Paketentwicklungsprozess.

Eine typische Verwendung eines Paketverwaltungssystems besteht darin, die Integration von Code aus möglicherweise unterschiedlichen Quellen in eine kohärente eigenständige Betriebseinheit zu erleichtern. Somit kann ein Paketverwaltungssystem verwendet werden, um a zu produzieren Verteilung von Linux, möglicherweise eine Verteilung, die auf eine bestimmte eingeschränkte Anwendung zugeschnitten ist.

Im Gegensatz dazu wird ein Paketentwicklungsprozess verwendet, um die Co-Entwicklung von Code und Dokumentation einer Sammlung von Funktionen oder Routinen mit einem gemeinsamen Thema zu verwalten, wodurch ein Paket von Softwarefunktionen erstellt wird, die in der Regel nicht vollständig und nutzbar sind. Ein guter Paketentwicklungsprozess hilft den Benutzern dabei Unit -Tests.

Ausgewählte Repositories

In der folgenden Tabelle werden einige Sprachen mit Repositories für die beitragende Software aufgeführt. In der Spalte "Autotrochecks" werden die durchgeführten Routineprüfungen beschrieben.

Nur sehr wenige Menschen können ihre Software unter mehreren Betriebssystemen mit unterschiedlichen Versionen des Kerncodes und mit anderen zusteuerenden Paketen testen. Für die R Programmiersprache, das Umfassendes R Archive Network (Cran) führt Tests routinemäßig aus.

Um zu verstehen, wie wertvoll dies ist, stellen Sie sich eine Situation mit zwei Entwicklern vor, Sally und John. Sally leistet ein Paket A. Sally führt nur die aktuelle Version der Software unter einer Version von Microsoft Windows aus und hat sie nur in dieser Umgebung getestet. In mehr oder weniger regelmäßigen Abständen testet Cran Tests Sallys Beitrag unter einem Dutzend Kombinationen von Betriebssystemen und Versionen der Core -R -Sprachsoftware. Wenn einer von ihnen einen Fehler generiert, erhält sie diese Fehlermeldung. Mit Glück können diese Fehlermeldungsdetails genügend Eingaben liefern, um eine Fix für den Fehler zu aktivieren, auch wenn sie sie nicht mit ihrer aktuellen Hardware und Software replizieren kann. Angenommen, John trägt zum Repository A Paket B bei, das ein Paket A verwendet. Paket B besteht alle Tests und wird den Benutzern zur Verfügung gestellt. Später unterbreitet Sally eine verbesserte Version von A, die leider B. die Autopecke ermöglicht, John Informationen zur Verfügung zu stellen, damit er das Problem beheben kann.

Dieses Beispiel enthüllt sowohl eine Stärke als auch eine Schwäche des R-Startpackensystems: Cran unterstützt diese Art von automatisierte Tests von beigestellten Paketen, aber Pakete, die zu Cran beigetragen haben, müssen nicht die Versionen anderer von ihnen verwendeten Pakete angeben. Es gibt Verfahren zum Anfordern bestimmter Versionen von Paketen, aber Mitwirkende verwenden diese Verfahren möglicherweise nicht.

Darüber hinaus liefert ein Repository wie Cran regelmäßige Schecks von Beitragspaketen tatsächlich eine umfangreiche wenn ad hoc Testsuite für Entwicklungsversionen der Kernsprache. Wenn Sally (im obigen Beispiel) eine Fehlermeldung erhält, die sie nicht versteht oder die für unangemessen hält, insbesondere aus einer Entwicklungsversion der Sprache, kann sie (und oft mit R) das Kernentwicklungsteam für die Sprache für Hilfe bitten . Auf diese Weise kann das Repository zur Verbesserung der Qualität der Kernsprachensoftware beitragen.

Sprache / Zweck Paketentwicklungsprozess Repository Methoden installieren Kollaborative Entwicklungsplattform Autopecks
Haskell Gemeinsame Architektur für den Bau von Anwendungen und Bibliotheken[5] Hackage Kabale (Software)
Java Maven[6]
Julia[7]
Common Lisp QuickLisp[8]
.NETZ NuGet NuGet[9]
Node.js NPM[10]
Perl CPAN Ppm[11]
Php BIRNE, Komponist Pecl, Packagistin
Python Setuptools Pypi Pip, Einfach zu installieren, Pypm, Anakonda
R R CMD -Prüfprozess[12][13] Kran[14] install.packages[15]
Fernbedienungen[16]
GitHub[17]
Häufig auf 12 Plattformen oder Kombinationen verschiedener Versionen von R (Devel, Prerel, Patched, Release) auf verschiedenen Betriebssystemen (verschiedene Versionen von Linux, Windows, MacOS und Solaris).
Rubin Rubygemems Rubygemems[18] Rubygemems,[18] Bundler[19]
Rost Ladung[20] Kisten[21] Ladung[20]
Tex, Latex Ctan

(Teile dieser Tabelle wurden aus einer "Liste der Top -Repositories durch Programmiersprache" kopiert " Paketüberfluss[22]))

Viele andere Programmiersprachen unter ihnen C, C ++, und ForranBesitzen Sie kein zentrales Software -Repository mit universellem Umfang. Bemerkenswerte Repositorys mit begrenztem Umfang umfassen:

  • Netlibhauptsächlich mathematische Routinen für Forran und C, historisch gesehen eines der ersten offenen Software -Repositorys;
  • Schub, eine streng kuratierte Sammlung hochwertiger Bibliotheken für C ++; Ein in Boost entwickelter Code wurde später Teil der C ++ - Standardbibliothek.

Paketmanager

Paketmanager Helfen Sie bei der Verwaltung von Repositorys und der Verteilung von ihnen. Wenn ein Repository aktualisiert wird, erlaubt ein Paket -Manager dem Benutzer normalerweise, dieses Repository über den Paketmanager zu aktualisieren. Sie helfen auch bei der Verwaltung von Dingen wie Abhängigkeiten zwischen anderen Software -Repositorys. Einige Beispiele für Paketmanager sind:

Beliebte Paketmanager
Paket-Manager Beschreibung
NPM Ein Paketmanager für node.js[23]
Pip Ein Paketinstallateur für Python[24]
geeignet Für die Verwaltung von Debian -Paketen[25]
Homebrew Ein Paketinstallationsprogramm für macOS, mit dem Sie Pakete Apple nicht installieren können[26]
vcpkg Ein Paketmanager für C und C ++[27][28]
yum und DNF Paketmanager für Fedora und Red Hat Enterprise Linux[29]
Pacman Paketmanager für Arch Linux[30]

Repository -Manager

Beziehung zur kontinuierlichen Integration

Als Teil des Entwicklungslebenszyklus wird Quellcode kontinuierlich in binäre Artefakte integriert kontinuierliche Integration. Dies kann wie ein Entwickler mit einem binären Repository -Manager interagieren, indem man Artefakte aus den Repositorys erhalten und Builds dort drängt. Eine enge Integration mit CI -Servern ermöglicht die Speicherung wichtiger Metadaten wie:

  • Welcher Benutzer hat den Build ausgelöst (ob manuell oder durch die Überarbeitung der Überarbeitung der Überarbeitung)
  • Welche Module wurden gebaut
  • Welche Quellen wurden verwendet (Commit ID, Revision, Zweig)
  • Abhängigkeiten verwendet
  • Umgebungsvariablen
  • Pakete installiert

Artefakte und Pakete

Artefakte und Pakete bedeuten von Natur aus verschiedene Dinge. Artefakte sind einfach eine Ausgabe oder Sammlung von Dateien (z. B. Jar, Krieg, DLLs, RPM usw.), und eine dieser Dateien kann Metadaten enthalten (z. B. POM -Datei). Pakete sind eine einzelne Archivdatei in einem gut definierten Format (z. NuGet), die Dateien enthalten, die für den Pakettyp geeignet sind (z. B. DLL, PDB).[31] Viele Artefakte resultieren aus Builds, aber auch andere Typen sind entscheidend. Pakete sind im Wesentlichen eines von zwei Dingen: eine Bibliothek oder eine Anwendung.[32]

Im Vergleich zu Quelldateien sind binäre Artefakte häufig nach Größenordnungen größer, sie werden selten gelöscht oder überschrieben (mit Ausnahme seltener Fälle wie Schnappschüsse oder nächtlichen Builds) und werden normalerweise von vielen Metadaten wie ID, Paketname, Version, Version, Version, Version, Version begleitet , Lizenz und mehr.

Metadaten

Metadaten Beschreibt ein binäres Artefakt, wird getrennt vom Artefakt selbst gespeichert und spezifiziert und kann mehrere zusätzliche Verwendungszwecke haben. Die folgende Tabelle zeigt einige gängige Metadatentypen und deren Verwendungen:

Metadatentyp Benutzt für
Versionen verfügbar Aktualisierung und Herabstufung automatisch
Abhängigkeiten Geben Sie andere Artefakte an, von denen das aktuelle Artefakt abhängt
Nachgeschaltete Abhängigkeiten Geben Sie andere Artefakte an, die vom aktuellen Artefakt abhängen
Lizenz Rechtliche Einhaltung
Datum und Uhrzeit erstellen Rückverfolgbarkeit
Dokumentation Bieten Sie die offline -Verfügbarkeit für kontextbezogene Dokumentation in IDEs an
Genehmigungsinformationen Rückverfolgbarkeit
Metriken Codeabdeckung, Einhaltung der Regeln, Testergebnisse
Von Benutzer erstellte Metadaten Benutzerdefinierte Berichte und Prozesse

Siehe auch

Verweise

  1. ^ ITMWEB: Umgang mit Computerviren Archiviert 14. Oktober 2007 bei der Wayback -Maschine
  2. ^ "Jfrog Artefactory - Wikieduonline".
  3. ^ "Artefactory - Universal Artefact Management".
  4. ^ "Nexus Repository | Softwarekomponentenverwaltung".
  5. ^ "Die Haskell Cabal | Übersicht". www.haskell.org. Abgerufen 2019-03-25.
  6. ^ "Maven - Willkommen bei Apache Maven". maven.apache.org. Abgerufen 2019-03-25.
  7. ^ "Julia Paket Listing". pkg.julialang.org. Abgerufen 2019-03-25.
  8. ^ "QuickLisp Beta". www.quicklisp.org. Abgerufen 2019-03-25.
  9. ^ Karann-MSFT. "Nuget Package Manager UI Referenz". docs.microsoft.com. Abgerufen 2019-03-25.
  10. ^ "NPM". www.npmjs.com. Abgerufen 2019-03-25.
  11. ^ "Installieren von Perl -Modulen - www.cpan.org". www.cpan.org. Abgerufen 2019-03-25.
  12. ^ Leisch, Friedrich. "Erstellen von R -Paketen: Ein Tutorial" (PDF).
  13. ^ Graves, Spencer B.; Dorai-Raj, Sundar. "Erstellen von R-Paketen, Verwendung von Cran-, R-Forge- und lokalen R-Archivnetzwerken und Subversion (SVN) -Repositories" (PDF).
  14. ^ "Das umfassende R -Archivnetzwerk". cran.r-project.org. Abgerufen 2019-03-25.
  15. ^ "R -Installation und -verwaltung". cran.r-project.org. Abgerufen 2019-03-25.
  16. ^ Wickham, Hadley; Bryan, Jenny. "Paketstruktur und Zustand". R Pakete. O'Reilly.
  17. ^ Decan, Alexandre; Herren, Tom; Claes, Maelick; Grosjean, Philippe (2015). "Über die Entwicklung und Verteilung von R -Paketen: Eine empirische Analyse des R -Ökosystems". Proceedings der Europäischen Konferenz 2015 über Software -Architektur -Workshops - ECSAW '15: 1–6. doi:10.1145/2797433.2797476. S2CID 1680582.
  18. ^ a b "Rubygemems.org Ihr Community -Edelstein -Host". Rubygemems. Abgerufen 2022-02-03.
  19. ^ "Bundler: Der beste Weg, die Edelsteine einer Ruby -Anwendung zu verwalten". Bundler.io. Abgerufen 2022-02-03.
  20. ^ a b "Das Frachtbuch".Dokumentation. Rost -Programmiersprache. Abgerufen 2019-08-26.
  21. ^ "Rostpaketregistrierung". crates.io. Abgerufen 2019-08-26.
  22. ^ "Liste der Top -Repositories durch Programmiersprache". Paketüberfluss. Abgerufen 2010-04-14.
  23. ^ "NPM über". www.npmjs.com. Abgerufen 2019-11-21.
  24. ^ Entwickler, die PIP, PIP: Das PYPA empfohlene Tool zur Installation von Python -Paketen., abgerufen 2019-11-21
  25. ^ "Apt - Debian Wiki". wiki.debian.org. Abgerufen 2019-11-22.
  26. ^ "Homebrew". Homebrew. Abgerufen 2019-11-22.
  27. ^ "Yelp startet Yelp Fusion, Microsoft erstellt ein VCPKG -Tool und den neuen Touch Sense SDK für Android -Entwickler". SD -Zeiten. 20. September 2016.
  28. ^ "Microsoft C ++ Bibliotheksmanager jetzt für Linux und MacOS verfügbar". SD -Zeiten. 25. April 2018.
  29. ^ Chinthaguntla, Keerthi. "Linux -Paketverwaltung mit Yum und Drehzahl". Aktivieren Sie Sysadmin. Abgerufen 2021-04-11.
  30. ^ "Pacman - Archwiki". wiki.archlinux.org. Abgerufen 2021-04-11.
  31. ^ Chris, Tucker (2007-03-15). "Optimaler Paketinstallation/Deinstall -Manager" (PDF).UC San Diego: 1. Abgerufen 2011-09-14. {{}}: Journal zitieren erfordert |journal= (Hilfe)
  32. ^ "Linux -Repository -Klassifizierungsschemata".BRAINTICKLE.BLOGSPOT.COM.13. Januar 2006. Abgerufen 2008-03-01.