Структура репозиториев исходных кодов 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
утилита.
В удаленном репозитории должен быть
source.msix
файл. Вы можете обратиться к примеру в репозитории по умолчанию:https://winget.azureedge.net/cache/source.msixПодробности о самой MSIX можно найти на сайте Microsoft Docs.
Собственно
source.msix
представляет собой zip-пакет с содержимым, структурированным заранее определенным образом (просто переименуйте его вsource.zip
и распаковать):-
Assets/
-
Public/
-
AppxBlockMap.xml
-
AppxManifest.xml
-
AppcSignature.p7x
-
[Content_Typex.xml]
-
Основной файл данных кажется
Public/index.db
. Это база данных SQLite, содержащая информацию, полученную из манифестов репозитория сообщества. Он имеет довольно простую для понимания структуру.Еще одна проблема - MSIX должен быть подписан разработчиком. Следует изменить настройки Windows, чтобы
winget
принимать пакеты, подписанные третьими сторонами. Подробнее см. Ниже.Обратите внимание, что
winget
не принимает репозиторий HTTP, он требует только HTTPS-репозиторий с доверенным сертификатом.
ОБНОВЛЕНИЕ (16 октября 2020 г.)
Самые интересные столы в
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).
winget
использует этот кешированный манифест для установки приложения.
ОБНОВЛЕНИЕ (19 октября 2020 г.)
- В целях
winget
может добавить сторонний исходный репозиторий (когдаsource.msix
подписанный сторонним сертификатом) следует разрешить установку неопубликованных приложений.
Подводя итог вышесказанному, общая последовательность выглядит следующим образом:
- Загрузите
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
пока не используются.