stringtranslate.com

Репозиторий программного обеспечения

Репозиторий программного обеспечения , или сокращенно репо , — это место хранения пакетов программного обеспечения . Часто вместе с метаданными также сохраняется оглавление. Репозиторий программного обеспечения обычно управляется системой контроля версий или менеджерами репозитория. Менеджеры пакетов позволяют автоматически устанавливать и обновлять репозитории, иногда называемые «пакетами».

Обзор

Многие издатели программного обеспечения и другие организации содержат для этой цели серверы в Интернете либо бесплатно, либо за абонентскую плату. Репозитории могут быть предназначены исключительно для конкретных программ, таких как CPAN для языка программирования Perl , или для всей операционной системы . Операторы таких репозиториев обычно предоставляют систему управления пакетами , инструменты, предназначенные для поиска, установки и иного управления пакетами программного обеспечения из репозиториев. Например, во многих дистрибутивах Linux используется Advanced Packaging Tool (APT), обычно встречающийся в дистрибутивах на основе Debian , или Yellowdog Updater, Modified ( yum ), встречающийся в дистрибутивах на основе Red Hat . Существует также несколько независимых систем управления пакетами, таких как pacman, используемый в Arch Linux , и equo, найденный в Sabayon Linux .

Пример подписанного ключа репозитория (с ZYpp в openSUSE )

Поскольку репозитории программного обеспечения предназначены для включения полезных пакетов, основные репозитории спроектированы так, чтобы не содержать вредоносных программ . Если компьютер настроен на использование репозитория с цифровой подписью от надежного поставщика и подключен к соответствующей системе разрешений , это значительно снижает угрозу вредоносного ПО для этих систем. Побочным эффектом является то, что многим системам, обладающим этими возможностями, не требуется антивирусное программное обеспечение . [1]

Большинство основных дистрибутивов Linux имеют множество репозиториев по всему миру, которые отражают основной репозиторий.

В корпоративной среде репозиторий программного обеспечения обычно используется для хранения артефактов или для зеркалирования внешних репозиториев, которые могут быть недоступны из-за ограничений безопасности. Такие репозитории могут предоставлять дополнительные функции, такие как контроль доступа, управление версиями, проверки безопасности загруженного программного обеспечения, функциональность кластера и т. д., и обычно поддерживают множество форматов в одном пакете, чтобы удовлетворить все потребности предприятия и, таким образом, стремятся предоставить единую точку истины. Популярными примерами являются JFrog Artifactory, [2] [3] репозиторий Nexus [4] и Cloudsmith, [5] облачный продукт.

На стороне клиента менеджер пакетов помогает устанавливать и обновлять репозитории.

На стороне сервера репозиторий программного обеспечения обычно управляется системой контроля версий или менеджерами репозитория. Некоторые менеджеры репозиториев позволяют объединять другие местоположения репозитория в один URL-адрес и предоставляют прокси-сервер для кэширования. При выполнении непрерывной сборки создается множество артефактов, которые часто хранятся централизованно, поэтому важно автоматически удалять те, которые не были выпущены.

Система управления пакетами и процесс разработки пакетов

Система управления пакетами отличается от процесса разработки пакетов .

Типичное использование системы управления пакетами — облегчение интеграции кода из различных источников в единую автономную операционную единицу. Таким образом, система управления пакетами может использоваться для создания дистрибутива Linux , возможно, дистрибутива, адаптированного для конкретного ограниченного приложения.

Процесс разработки пакета, напротив, используется для управления совместной разработкой кода и документации набора функций или подпрограмм с общей темой, в результате чего создается пакет программных функций, которые обычно не являются полными и непригодными для использования сами по себе. Хороший процесс разработки пакетов поможет пользователям соблюдать хорошие методы документирования и кодирования, включая некоторый уровень модульного тестирования .

Выбранные репозитории

В следующей таблице перечислены несколько языков с репозиториями для сопутствующего программного обеспечения. Столбец «Автопроверки» описывает выполненные плановые проверки.

Очень немногие люди имеют возможность тестировать свое программное обеспечение в нескольких операционных системах с разными версиями основного кода и с другими дополнительными пакетами, которые они могут использовать. Для языка программирования R Comprehensive R Archive Network (CRAN) регулярно проводит тесты.

Чтобы понять, насколько это ценно, представьте себе ситуацию с двумя разработчиками, Салли и Джоном. Салли предоставляет пакет A. Салли запускает текущую версию программного обеспечения только в одной версии Microsoft Windows и тестировала ее только в этой среде. Более или менее регулярно CRAN тестирует вклад Салли в дюжине комбинаций операционных систем и версий основного программного обеспечения на языке R. Если один из них генерирует ошибку, он получает это сообщение об ошибке. Если повезет, подробности сообщения об ошибке могут предоставить достаточную информацию, чтобы разрешить исправление ошибки, даже если она не сможет воспроизвести ее с помощью своего текущего оборудования и программного обеспечения. Далее предположим, что Джон добавляет в репозиторий пакет B, который использует пакет A. Пакет B проходит все тесты и становится доступным для пользователей. Позже Салли представляет улучшенную версию A, которая, к сожалению, нарушает работу B. Автопроверки позволяют предоставить информацию Джону, чтобы он мог решить проблему.

Этот пример демонстрирует как сильные, так и слабые стороны системы внесенных пакетов R: CRAN поддерживает этот вид автоматического тестирования внесенных пакетов, но пакеты, внесенные в CRAN, не должны указывать версии других внесенных пакетов, которые они используют. Существуют процедуры запроса определенных версий пакетов, но участники могут не использовать эти процедуры.

Помимо этого, такой репозиторий, как CRAN, который регулярно проверяет внесенные пакеты, на самом деле предоставляет обширный, хотя и специальный, набор тестов для разрабатываемых версий основного языка. Если Салли (в приведенном выше примере) получает сообщение об ошибке, которое она не понимает или считает неуместным, особенно в разрабатываемой версии языка, она может (и часто так и делает с R) обратиться за помощью к основной команде разработчиков языка. . Таким образом, репозиторий может способствовать улучшению качества программного обеспечения основного языка.

(Части этой таблицы были скопированы из «Списка лучших репозиториев по языкам программирования» на сайте Stack Overflow [23] ).

Многие другие языки программирования, в том числе C , C++ и Fortran , не имеют центрального репозитория программного обеспечения универсального масштаба. Известные репозитории с ограниченным объемом включают:

Менеджеры пакетов

Менеджеры пакетов помогают управлять репозиториями и их распространением. Если репозиторий обновляется, менеджер пакетов обычно позволяет пользователю обновить этот репозиторий через менеджер пакетов. Они также помогают управлять такими вещами, как зависимости между другими репозиториями программного обеспечения. Некоторые примеры менеджеров пакетов включают в себя:

Менеджеры репозитория

Отношение к непрерывной интеграции

В рамках жизненного цикла разработки исходный код постоянно встраивается в двоичные артефакты с использованием непрерывной интеграции . Он может взаимодействовать с менеджером двоичных репозиториев так же, как это делает разработчик, получая артефакты из репозиториев и отправляя туда сборки. Тесная интеграция с CI-серверами позволяет хранить важные метаданные, такие как:

Артефакты и пакеты

Артефакты и пакеты по своей сути означают разные вещи. Артефакты — это просто выходные данные или набор файлов (например, JAR, WAR, DLLS, RPM и т. д.), и один из этих файлов может содержать метаданные (например, файл POM). Принимая во внимание, что пакеты представляют собой один архивный файл в четко определенном формате (например, NuGet ), который содержит файлы, соответствующие типу пакета (например, DLL, PDB). [32] Многие артефакты возникают в результате сборок, но и другие типы тоже имеют решающее значение. Пакеты — это, по сути, одно из двух: библиотека или приложение. [33]

По сравнению с исходными файлами бинарные артефакты часто на порядки крупнее, их редко удаляют или перезаписывают (за исключением редких случаев, таких как снимки или ночные сборки), и они обычно сопровождаются большим количеством метаданных, таких как идентификатор, имя пакета, версия. , лицензия и многое другое.

Метаданные

Метаданные описывают двоичный артефакт, хранятся и указываются отдельно от самого артефакта и могут иметь несколько дополнительных применений. В следующей таблице показаны некоторые распространенные типы метаданных и их использование:

Смотрите также

Рекомендации

  1. ^ itmWEB: Борьба с компьютерными вирусами. Архивировано 14 октября 2007 г., в Wayback Machine.
  2. ^ "JFrog Artifactory - wikieduonline" . Архивировано из оригинала 05 марта 2021 г. Проверено 25 апреля 2021 г.
  3. ^ "Artifactory - Универсальное управление артефактами" . Архивировано из оригинала 1 мая 2021 г. Проверено 25 апреля 2021 г.
  4. ^ «Репозиторий Nexus | Управление программными компонентами» . Архивировано из оригинала 25 апреля 2021 г. Проверено 25 апреля 2021 г.
  5. ^ "Хранилище артефактов Cloudsmith" . Архивировано из оригинала 16 июля 2023 г. Проверено 11 сентября 2023 г.
  6. ^ "Заговор Haskell | Обзор" . www.haskell.org . Архивировано из оригинала 10 апреля 2019 г. Проверено 25 марта 2019 г.
  7. ^ «Maven – Добро пожаловать в Apache Maven» . maven.apache.org . Архивировано из оригинала 24 июля 2011 г. Проверено 25 марта 2019 г.
  8. ^ "Список пакетов Джулии" . pkg.julialang.org . Архивировано из оригинала 20 января 2019 г. Проверено 25 марта 2019 г.
  9. ^ "Бета-версия Quicklisp". www.quicklisp.org . Архивировано из оригинала 23 марта 2019 г. Проверено 25 марта 2019 г.
  10. ^ Каранн-MSFT. «Справочник по пользовательскому интерфейсу диспетчера пакетов NuGet». docs.microsoft.com . Архивировано из оригинала 25 марта 2019 г. Проверено 25 марта 2019 г.
  11. ^ "НПМ". www.npmjs.com . Архивировано из оригинала 13 апреля 2018 г. Проверено 25 марта 2019 г.
  12. ^ «Установка модулей Perl — www.cpan.org» . www.cpan.org . Архивировано из оригинала 14 марта 2019 г. Проверено 25 марта 2019 г.
  13. ^ Лейш, Фридрих. «Создание пакетов R: руководство» (PDF) . Архивировано (PDF) из оригинала 9 декабря 2017 г. Проверено 19 июля 2016 г.
  14. ^ Грейвс, Спенсер Б.; Дораи-Радж, Сундар. «Создание пакетов R с использованием CRAN, R-Forge и локальных сетей архивов R и репозиториев Subversion (SVN)» (PDF) . Архивировано (PDF) из оригинала 5 июля 2017 г. Проверено 19 июля 2016 г.
  15. ^ "Комплексная сеть архивов R" . cran.r-project.org . Архивировано из оригинала 23 января 2019 г. Проверено 25 марта 2019 г.
  16. ^ «Установка и администрирование R» . cran.r-project.org . Архивировано из оригинала 23 ноября 2015 г. Проверено 25 марта 2019 г.
  17. ^ Уикхэм, Хэдли; Брайан, Дженни. «Структура и состояние пакета». Р-пакеты . О'Рейли. Архивировано из оригинала 09.11.2020 . Проверено 20 ноября 2020 г.
  18. ^ аб Декан, Александр; Менс, Том; Клаас, Малик; Грожан, Филипп (2015). «О разработке и распространении пакетов R: эмпирический анализ экосистемы R». Материалы Европейской конференции по семинарам по архитектуре программного обеспечения 2015 года . стр. 1–6. дои : 10.1145/2797433.2797476. ISBN 9781450333931. S2CID  1680582. Архивировано из оригинала 18 января 2023 г. Проверено 26 октября 2021 г.
  19. ^ ab «RubyGems.org — ваш хостинг драгоценных камней сообщества». рубигемы . Архивировано из оригинала 13 февраля 2019 г. Проверено 3 февраля 2022 г.
  20. ^ «Bundler: лучший способ управлять драгоценными камнями приложения Ruby» . Bundler.io . Архивировано из оригинала 29 января 2022 г. Проверено 3 февраля 2022 г.
  21. ^ ab "Грузовая книга". Документация. Язык программирования Rust . Архивировано из оригинала 28 апреля 2019 г. Проверено 26 августа 2019 г.
  22. ^ «Реестр пакетов Rust». crates.io . Архивировано из оригинала 28 августа 2019 г. Проверено 26 августа 2019 г.
  23. ^ «Список лучших репозиториев по языкам программирования» . Переполнение стека . Архивировано из оригинала 26 декабря 2018 г. Проверено 14 апреля 2010 г.
  24. ^ "О нпм" . www.npmjs.com . Архивировано из оригинала 19 ноября 2019 г. Проверено 21 ноября 2019 г.
  25. ^ разработчики, The pip, pip: Рекомендуемый PyPA инструмент для установки пакетов Python., заархивировано из оригинала 14 июля 2020 г. , получено 21 ноября 2019 г.
  26. ^ "Апт - Debian Wiki" . wiki.debian.org . Архивировано из оригинала 19 октября 2019 г. Проверено 22 ноября 2019 г.
  27. ^ "Домашнее пивоварение". Домашнее пиво . Архивировано из оригинала 5 октября 2022 г. Проверено 22 ноября 2019 г.
  28. ^ «Yelp запускает Yelp Fusion, Microsoft создает инструмент Vcpkg и новый Touch Sense SDK для разработчиков Android» . СД Таймс . 20 сентября 2016 г. Архивировано из оригинала 27 ноября 2020 г. . Проверено 19 ноября 2020 г.
  29. ^ «Менеджер библиотек Microsoft C++ теперь доступен для Linux и macOS» . СД Таймс . 25 апреля 2018 года. Архивировано из оригинала 22 сентября 2020 года . Проверено 19 ноября 2020 г.
  30. ^ Чинтагунтла, Кирти (22 апреля 2020 г.). «Управление пакетами Linux с помощью YUM и RPM». Включите сисадмина . Архивировано из оригинала 11 апреля 2021 г. Проверено 11 апреля 2021 г.
  31. ^ «Пакман — ArchWiki». wiki.archlinux.org . Архивировано из оригинала 18 августа 2017 г. Проверено 11 апреля 2021 г.
  32. ^ Chris, Tucker (2007-03-15). "Optimal Package Install/Uninstall Manager" (PDF). UC San Diego: 1. Archived (PDF) from the original on 2011-06-14. Retrieved 2011-09-14. {{cite journal}}: Cite journal requires |journal= (help)
  33. ^ "Linux repository classification schemes". braintickle.blogspot.com. 13 January 2006. Archived from the original on 2007-10-11. Retrieved 2008-03-01.