Репозиторий программного обеспечения - Википедия - Software repository

А репозиторий программного обеспечения, или для краткости «репо», это место хранения программные пакеты. Часто оглавление сохраняется, а также метаданные. Репозитории групповых пакетов. Иногда группировка предназначена для языка программирования, например CPAN для Perl язык программирования, иногда для всего Операционная система, иногда критерием является лицензия на содержание. В корпоративной среде репозиторий программного обеспечения обычно используется для хранения артефактов или для зеркалирования внешних репозиториев, которые могут быть недоступны из-за ограничений безопасности. Такие репозитории могут обеспечивать дополнительные функции, такие как контроль доступа, управление версиями, проверки безопасности для загруженного программного обеспечения, функциональные возможности кластера и т. Д., И обычно поддерживают различные форматы в одном пакете, чтобы удовлетворить все потребности предприятия, и, таким образом, чтобы обеспечить единую истину. Популярные примеры - Artifactory и Nexus.

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

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

Обзор

Многие издатели программного обеспечения и другие организации поддерживают серверы на Интернет для этого бесплатно или за абонентскую плату. Репозитории могут быть предназначены исключительно для определенных программ, таких как CPAN для Perl язык программирования, или для всего Операционная система. Операторы таких репозиториев обычно предоставляют система управления пакетами, инструменты, предназначенные для поиска, установки и иного управления пакетами программного обеспечения из репозиториев. Например, многие Дистрибутивы Linux использовать Расширенный инструмент упаковки (APT), обычно встречается в Debian на основе дистрибутивов, или ням нашел в Красная шляпа на основе дистрибутивов. Также существует несколько независимых систем управления пакетами, таких как pacman, используемых в Arch Linux и Equo, найденные в Сабайон Linux.

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

Самый крупный Дистрибутивы Linux есть много репозиториев по всему миру, которые отражают основной репозиторий.

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

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

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

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

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

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

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

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

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

Язык / цельПроцесс разработки пакетаРепозиторийМетоды установкиПлатформа для совместной разработкиАвто проверки
HaskellОбщая архитектура для создания приложений и библиотек[2]Взлом
ЯваMaven[3]
Юля[4]
Common LispQuicklisp[5]
.СЕТЬNuGetNuGet[6]
Node.jsnpm[7]
PerlCPANPPM[8]
PHPГРУША, КомпозиторPECL, Упаковщик
PythonИнструменты настройкиPyPIпип, EasyInstall, PyPM, Анаконда
рПроцесс проверки R CMD[9][10]КРАН[11]install.packages[12]
пульты[13]
GitHub[14]
Часто на 12 платформах или комбинациях различных версий R (devel, prerel, patchched, release) в разных операционных системах (разные версии Linux, Windows, macOS и Solaris).
РубинRubyGemsАрхив приложений RubyRubyForge
РжавчинаГруз[15]Ящики[16]Груз[15]
TeX, ЛатексCTAN

(Части этой таблицы были скопированы из «Списка самых популярных репозиториев по языку программирования» на Переполнение стека[17])

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

  • Netlib, в основном математические процедуры для Fortran и C, исторически один из первых открытых репозиториев программного обеспечения;
  • Способствовать росту, строго подобранный набор высококачественных библиотек для C ++; некоторый код, разработанный в Boost, позже стал частью стандартной библиотеки C ++.

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

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

Популярные менеджеры пакетов
Менеджер пакетовОписание
npmМенеджер пакетов для Node.js[18]
пипУстановщик пакетов для Python[19]
APTДля управления пакетами Debian[20]
Домашнее пивоУстановщик пакетов для MacOS, который позволяет устанавливать пакеты, которые не использовала Apple.[21]
vcpkgМенеджер пакетов для C и C ++[22][23]

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

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

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

  • Какой пользователь запустил сборку (вручную или путем фиксации в системе контроля версий)
  • Какие модули были построены
  • Какие источники использовались (идентификатор фиксации, ревизия, ветка)
  • Используемые зависимости
  • Переменные среды
  • Установленные пакеты

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

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

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

Метаданные

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

Тип метаданныхИспользуется для
Доступные версииАвтоматическое обновление и возврат к предыдущей версии
ЗависимостиУкажите другие артефакты, от которых зависит текущий артефакт
Последующие зависимостиУкажите другие артефакты, которые зависят от текущего артефакта
ЛицензияСоблюдения правовых норм
Дата и время сборкиПрослеживаемость
ДокументацияОбеспечение автономной доступности контекстной документации в IDE
Информация об утвержденииПрослеживаемость
МетрикиПокрытие кода, соответствие правилам, результаты тестирования
Пользовательские метаданныеПользовательские отчеты и процессы


Локальные продукты, обеспечивающие управление репозиториями

Программное обеспечение для управления репозиториями (менеджеры репозиториев) включает:

  • Apache Archiva - «программное обеспечение для управления репозиторием [для] репозитория артефактов сборки»[26]
  • Инедо с ProGet - «Универсальный менеджер пакетов. Возможности мирового уровня. Доступен для всех».[27]
  • Артефактура JFrog[28][29]
  • Пакет Drone - «репозиторий диспетчера пакетов для OSGi»[30]
  • Sonatype's Nexus -: работает с такими инструментами сборки, как Ant, Ivy, Gradle, Maven, SBT и другими.[31]
  • Pulp - «бесплатная платформа с открытым исходным кодом для управления репозиториями пакетов программного обеспечения и предоставления их большому количеству потребителей. Поддерживаемые типы: RPM, Python, Puppet, Docker и OSTree».[32]

Программное обеспечение как услуга Продукты, предоставляющие репозитории программного обеспечения

  • Лазурные артефакты[33]
  • CloudRepo - «Полностью управляемые облачные, частные и общедоступные репозитории».[34]
  • Cloudsmith - «Новый стандарт в управлении пакетами и распространении программного обеспечения».[35]
  • Dist - «Надежные, безопасные, частные и быстрые реестры контейнеров Docker и репозитории Maven, размещенные в облаке».[36]
  • feedz.io - «Хостинг и распространение пакетов»[37]
  • Реестр пакетов GitHub[38]
  • MyGet - «служба непрерывной доставки, в которой размещены тысячи репозиториев пакетов NuGet, Bower и NPM»[39]
  • Packagecloud - «Единый удобный для разработчиков интерфейс для всех ваших артефактов».[40]

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

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

  1. ^ itmWEB: борьба с компьютерными вирусами В архиве 14 октября 2007 г. Wayback Machine
  2. ^ "Заговорщики Haskell | Обзор". www.haskell.org. Получено 2019-03-25.
  3. ^ «Maven - Добро пожаловать в Apache Maven». maven.apache.org. Получено 2019-03-25.
  4. ^ "Список пакетов для Джулии". pkg.julialang.org. Получено 2019-03-25.
  5. ^ «Бета-версия Quicklisp». www.quicklisp.org. Получено 2019-03-25.
  6. ^ karann-msft. «Справочник по пользовательскому интерфейсу диспетчера пакетов NuGet». docs.microsoft.com. Получено 2019-03-25.
  7. ^ "нпм". www.npmjs.com. Получено 2019-03-25.
  8. ^ «Установка модулей Perl - www.cpan.org». www.cpan.org. Получено 2019-03-25.
  9. ^ Лейш, Фридрих. «Создание пакетов R: учебное пособие» (PDF).
  10. ^ Грейвс, Спенсер Б.; Дораи-Радж, Сундар. «Создание пакетов R с использованием CRAN, R-Forge и локальных сетей архивов R и репозиториев Subversion (SVN)» (PDF).
  11. ^ "Комплексная сеть архивов R". cran.r-project.org. Получено 2019-03-25.
  12. ^ «Установка и администрирование R». cran.r-project.org. Получено 2019-03-25.
  13. ^ Уикхэм, Хэдли; Брайан, Дженни. «Структура и состояние пакета». Пакеты R. О'Рейли.
  14. ^ Декан, Александр; Мужские, Том; Клаас, Мелик; Грожан, Филипп (2015). «О разработке и распространении R-пакетов: эмпирический анализ экосистемы R». Материалы Европейской конференции по архитектуре программного обеспечения 2015 г. - ECSAW '15: 1–6. Дои:10.1145/2797433.2797476.
  15. ^ а б «Грузовая книга». Документация. Язык программирования Rust. Получено 2019-08-26.
  16. ^ "Реестр пакетов Rust". crates.io. Получено 2019-08-26.
  17. ^ «Список самых популярных репозиториев по языку программирования». Переполнение стека. Получено 2010-04-14.
  18. ^ "npm О". www.npmjs.com. Получено 2019-11-21.
  19. ^ разработчики, пип, pip: рекомендованный PyPA инструмент для установки пакетов Python., получено 2019-11-21
  20. ^ "Apt - Debian Wiki". wiki.debian.org. Получено 2019-11-22.
  21. ^ «Домашнее пиво». Домашнее пиво. Получено 2019-11-22.
  22. ^ «Yelp запускает Yelp Fusion, Microsoft создает инструмент Vcpkg и новый Touch Sense SDK для разработчиков Android». SD Times. 20 сентября 2016 г.
  23. ^ «Диспетчер библиотек Microsoft C ++ теперь доступен для Linux и macOS». SD Times. 25 апреля 2018 г.
  24. ^ Крис, Такер (15 марта 2007 г.). «Оптимальный менеджер установки / удаления пакетов» (PDF). Калифорнийский университет в Сан-Диего: 1. Получено 2011-09-14. Цитировать журнал требует | журнал = (помощь)
  25. ^ «Схемы классификации репозиториев Linux». braintickle.blogspot.com. Получено 2008-03-01.
  26. ^ «Apache Archiva: менеджер хранилища артефактов сборки». Фонд программного обеспечения Apache. Получено 2013-04-17. Apache Archiva [...] - это расширяемое программное обеспечение для управления репозиториями, которое помогает заботиться о вашем личном или корпоративном репозитории артефактов сборки.
  27. ^ "ProGet". Инедо. Получено 2016-02-11. Последовательность, непрерывность, соответствие - все в одном централизованном универсальном диспетчере пакетов с ProGet.
  28. ^ "Jfrog Artifactory". Wikieduonline. JFrog Artifactory - это программное обеспечение для управления двоичным репозиторием, предназначенное для хранения двоичных выходных данных процесса сборки для использования при распространении и развертывании.
  29. ^ "Artifactory. Управляйте своими двоичными файлами". JFrog. Получено 2014-10-20. Как первое решение для управления двоичным репозиторием, Artifactory изменила способ управления, хранения и управления двоичными файлами на протяжении всего цикла выпуска программного обеспечения.
  30. ^ «Пакетный дрон». Получено 2015-01-23. Идея состоит в том, чтобы создать рабочий процесс Tycho Compile -> опубликовать в репозиторий -> Tycho Compile (с использованием развернутых артефактов). И некоторые инструменты репозитория, такие как очистка, замораживание, проверка.
  31. ^ "Менеджер репозитория Nexus". Сонатип. Получено 2014-05-21. Nexus Pro дает вам больше информации, больше контроля и лучшее сотрудничество в вашей команде, чем когда-либо прежде. И он работает с такими инструментами сборки, как Ant, Ivy, Gradle, Maven, SBT и другими. Используйте Nexus в качестве основы для вашего полного подхода к управлению жизненным циклом компонентов.
  32. ^ "Целлюлоза | Управление репозиторием ПО". pulpproject.org. Получено 2017-07-11.
  33. ^ «Лазурные артефакты». Лазурные артефакты
  34. ^ «CloudRepo». CloudRepo. Получено 2017-01-01. CloudRepo - это облачный менеджер репозиториев артефактов, предлагающий как публичные, так и частные репозитории. CloudRepo позволяет высокопроизводительным командам разработчиков программного обеспечения безопасно хранить и обмениваться артефактами для использования в других сборках и процессах разработки.
  35. ^ "Cloudsmith". Cloudsmith. Получено 2020-05-20. Cloudsmith - предпочтительная программная платформа для безопасного хранения и совместного использования пакетов и контейнеров. Мы раздали миллионы пакетов инновационным компаниям по всему миру.
  36. ^ "Дист". Dist. Получено 2020-03-04. Разрабатывайте и развертывайте с уверенностью. Ваши артефакты - важная часть конвейеров разработки и развертывания. Dist спроектирован так, чтобы быть высокодоступным, чтобы соответствовать вашим производственным потребностям, и быстрым, чтобы ваши разработчики были счастливы и продуктивны.
  37. ^ «Пакетный хостинг и распространение». feedz.io. Получено 2020-02-10. Храните и распространяйте свои частные пакеты NuGet и npm без ограничений для пользователей и прозрачных цен
  38. ^ https://github.blog/2019-05-10-introduction-github-package-registry/
  39. ^ "MyGet: размещенные NuGet, NPM, Bower и Vsix". MyGet. Получено 2013-03-13. MyGet содержит тысячи репозиториев NuGet, Bower и NPM, используемых компаниями и отдельными разработчиками по всему миру. MyGet поставляется со встроенными службами сборки, а также обеспечивает беспроблемную интеграцию с GitHub, BitBucket и Visual Studio Online.
  40. ^ Каналы, Армандо (25.06.2018). «Непрерывная публикация пакетов, часть I: введение в управление пакетами в CI / CD». circleci.com. [packagecloud] содержит частные и общедоступные репозитории пакетов для множества различных типов пакетов и без проблем работает с различными менеджерами пакетов.