Структура репозиториев исходных кодов winget

Microsoft анонсировала winget, менеджер пакетов для Windows с открытым исходным кодом.

При входе введите winget source (после его установки) видно, что он поддерживает добавление источников.

winget source предоставляет следующие подкоманды:

add     Add a new source
list    list current sources
update  updates current sources
remove  removes current sources
reset   resets sources

Введя winget source list, отображается источник по умолчанию (пока источники не были изменены):

C:\Windows\System32>winget source list
Name   Arg
-----------------------------------------
winget https://winget.azureedge.net/cache

В качестве источников можно добавить, используя winget source add, как можно создать исходные репозитории?

Как нужно структурировать репозиторий, или документации для ответа на этот вопрос просто недостаточно?


Я думаю, что этот вопрос относится к теме stackru, поскольку основная причина добавления источников - (с моей точки зрения) создание альфа / бета-каналов для программ или подобных.

4 ответа

Этот предмет еще не был хорошо задокументирован.

Вот что я обнаружил, исследуя winget утилита.

  1. В удаленном репозитории должен быть source.msixфайл. Вы можете обратиться к примеру в репозитории по умолчанию:https://winget.azureedge.net/cache/source.msix

  2. Подробности о самой MSIX можно найти на сайте Microsoft Docs.

  3. Собственно source.msix представляет собой zip-пакет с содержимым, структурированным заранее определенным образом (просто переименуйте его в source.zip и распаковать):

    • Assets/
    • Public/
    • AppxBlockMap.xml
    • AppxManifest.xml
    • AppcSignature.p7x
    • [Content_Typex.xml]
  4. Основной файл данных кажется Public/index.db. Это база данных SQLite, содержащая информацию, полученную из манифестов репозитория сообщества. Он имеет довольно простую для понимания структуру.

  5. Еще одна проблема - MSIX должен быть подписан разработчиком. Следует изменить настройки Windows, чтобы wingetпринимать пакеты, подписанные третьими сторонами. Подробнее см. Ниже.

  6. Обратите внимание, что winget не принимает репозиторий HTTP, он требует только HTTPS-репозиторий с доверенным сертификатом.

ОБНОВЛЕНИЕ (16 октября 2020 г.)

  1. Самые интересные столы в index.db находятся manifest и pathparts. Первый сопоставляет имя, версию и т. Д. Приложения с частями пути, а второй указывает на YAML-файл манифеста.

    Например:https://winget.azureedge.net/cache/manifests/RubyInstallerTeam/Ruby/e70d-2.7.2.yaml (кеш https://github.com/microsoft/winget-pkgs/blob/master/manifests/RubyInstallerTeam/Ruby/2.7.2.yaml).

  2. winget использует этот кешированный манифест для установки приложения.

ОБНОВЛЕНИЕ (19 октября 2020 г.)

  1. В целях winget может добавить сторонний исходный репозиторий (когда source.msix подписанный сторонним сертификатом) следует разрешить установку неопубликованных приложений.

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

    • Загрузите source.msix из wingetрепо по умолчанию:https://winget.azureedge.net/cache/source.msix
    • Распакуйте его в виде ZIP-пакета или с помощью MSIX Packaging Tool, чтобы получить index.db файл из Public каталог.
    • Отредактируйте эту базу данных SQLite (для этого я использовал браузер БД для SQLite), оставив только ваше приложение (таблицы ids, monikers, names, versions).
    • Задайте путь к YAML-манифесту в pathpartsтаблица (по одной записи на каждый элемент пути). Например, для /manifests/MyCompany/MyProduct/1.0.0.yaml таблица должна быть такой:
    • Отредактируйте manifest таблицу, добавив запись, объединяющую все связанные записи.
    • Сохраните отредактированный index.db, перезапишите его в source.msix с помощью средства упаковки MSIX подпишите MSIX собственным сертификатом подписи кода.
    • Загрузите как манифест (подробности о самом манифесте см. В Спецификации манифеста), так и source.msix на ваш сервер (например, на myserver.net/repo/source.msix и myserver.net/repo/manifests/MyCompany/MyProduct/1.0.0.yaml).
    • Использование:
             winget source add myrepo https://myserver.net/repo
    winget install MyProduct
    

Только что был выпущен WinGet 1.0 , и Microsoft также выпустила эталонную реализацию источника REST API, чтобы можно было разместить свой собственный частный репозиторий. Он называется WinGet.RestSource и может быть клонирован отсюда ; Поскольку это решение Azure, рядом с Visual Studio 2019 вам также потребуется подписка Azure.

Я обнаружил , что получение WinGet.RestSource и работают , и толкая пакеты к нему ( в настоящее время) не что легко, но для тех , кто заинтересован, я написал 2 сообщения в блоге об этом:

REST API, вероятно, станет вашим лучшим выбором после его реализации: https://github.com/microsoft/winget-cli/issues/118

По состоянию на июль 2020 года, как поясняется в разделе Как обновить список источников Winget:

Winget - действительно молодое приложение с точки зрения возраста программного обеспечения, и в настоящее время для него доступен только один источник / репозиторий - официальный репозиторий Winget от Microsoft.

Таким образом, подкоманды, такие как add а также remove пока не используются.

Другие вопросы по тегам