12

微软宣布并开源了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源,如何创建源存储库?

存储库必须如何构建,还是没有足够的文档来回答这个问题?


我认为这个问题是 Stack Overflow 的主题,因为添加源的主要原因是(在我看来)为程序或类似程序创建 alpha/beta 通道。

4

4 回答 4

4

winget 1.0为自定义存储库引入了新的 REST API。API 和参考实现由 Microsoft 在github.com/microsoft/winget-cli-restsource/提供。参考实现使用 C# 并允许在 Azure 上自托管。托管产品也变得可用,例如https://winget.pro

在 winget 1.0 之前,winget 存储库的结构大致如下:

  1. 远程存储库应该有一个source.msix文件。您可以参考默认存储库中的示例:https ://winget.azureedge.net/cache/source.msix

  2. 可以在Microsoft Docs 网站上找到有关 MSIX 本身的详细信息。

  3. 实际上,这source.msix是一个 zip 包,其内容以预定义的方式结构化(只需将其重命名为source.zip并解压缩):

    • Assets/
    • Public/
    • AppxBlockMap.xml
    • AppxManifest.xml
    • AppcSignature.p7x
    • [Content_Typex.xml]
  4. 主要数据文件似乎是Public/index.db. 它是一个 SQLite 数据库,其中包含来自Community Repo Manifests的信息。它的结构非常简单易懂。

  5. 另一个问题是 MSIX 应该由开发人员签署。应该更改 Windows 设置winget以接受第三方签名的包。详情见下文。

  6. 请注意,winget它不接受 HTTP 存储库,它只需要具有受信任证书的 HTTPS 存储库。

  7. 中最有趣的表格index.dbmanifestpathparts。第一个将应用程序的名称、版本等与路径部分匹配,后者指向清单 YAML 文件。

    例如:https ://winget.azureedge.net/cache/manifests/RubyInstallerTeam/Ruby/e70d-2.7.2.yaml (github/winget-pkgs/manifests/RubyInstallerTeam/Ruby/2.7.2.yaml的缓存) .

  8. winget使用此缓存清单进行应用程序安装。

  9. 为了winget可以添加第三方源存储库(当source.msix由第三方证书签名时),应该允许安装侧载应用程序。

Windows 设置

  1. 综上所述,整体顺序似乎如下:

    • source.msixwinget默认仓库下载: https ://winget.azureedge.net/cache/source.msix
    • 将其解压缩为 ZIP 包或使用MSIX 打包工具index.dbPublic目录中获取文件。
    • 编辑这个 SQLite DB(为此我使用了SQLite 的 DB Browser ) ,只留下你的应用程序(表ids、、、、monikers)。namesversions
    • 在表中设置 YAML 清单的路径pathparts(每个路径元素一条记录)。例如对于/manifests/MyCompany/MyProduct/1.0.0.yaml表应该是这样的: 路径部分表示例
    • manifest通过添加合并所有相关记录的记录来编辑表。
    • 保存已编辑的index.dbsource.msix使用 MSIX 打包工具将其覆盖,使用您自己的代码签名证书对 MSIX 进行签名。
    • 上传清单(有关清单本身的详细信息,请参阅清单规范source.msix)和您的服务器(例如 tomyserver.net/repo/source.msixmyserver.net/repo/manifests/MyCompany/MyProduct/1.0.0.yaml)。
    • 利用:
    winget source add myrepo https://myserver.net/repo
    winget install MyProduct
    
于 2020-10-15T08:14:06.780 回答
2

REST API 可能是您实施后的最佳选择:https ://github.com/microsoft/winget-cli/issues/118

于 2020-07-09T22:06:22.280 回答
1

WinGet 1.0刚刚发布,Microsoft 还发布了 REST API 源的参考实现,因此可以托管您自己的私有存储库。它被称为 WinGet.RestSource 并且可以从这里克隆;因为它是一个 Azure 解决方案,所以除了 Visual Studio 2019 之外,您还需要一个 Azure 订阅。

我发现让 WinGet.RestSource 启动并运行并将包推送到它(当前)并不容易,但对于任何感兴趣的人,我已经写了 2 篇关于此的博客文章:

于 2021-07-08T18:41:44.837 回答
0

截至 2020 年 7 月,如How to Update Winget Source List所述:

就软件时代而言,Winget 是一个非常年轻的应用程序,目前只有一个可用的源/存储库,即微软的官方 Winget 存储库。

因此,诸如add和之类的子命令remove尚未使用。

于 2020-07-05T22:20:51.233 回答