从下载的msi生成Chocolatey校验和

时间:2019-06-21 21:54:59

标签: chocolatey

用于创建软件包的巧克力文档说,现在需要校验和。

我正在安装的软件包是一个已下载的,带有$ url的msi集。 文档说您可以使用checksum.exe(choco安装校验和)并使用

checksum -t sha256 -f path\to\file

如果我正确理解这一点,它将对文件生成一个校验和。

那么,如何针对下载的MSI执行此操作?

我可以对当前msi的校验和进行硬编码,但是如果基础msi发生了变化(但url保持不变),则我的校验和将在安装期间无法通过验证。

我会完全忽略校验和,但是Chocolatey现在似乎需要它。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

出于安全原因使用校验和:下载的文件确实是您要安装的文件吗?但是,如果您信任文件的提供者,则可以使用--ignore-checksums命令行选项告诉choco忽略校验和:

choco install <package> --ignore-checksums

注意:如果可以使用PowerShell,也可以使用Get-FileHash cmdlet生成校验和:

Get-FileHash -Path "path\to\file" -Algorithm SHA256

答案 1 :(得分:0)

这里有几个不同的主题,所以我想确保每个主题都涵盖了。

首先,提交给Chocolatey Community Repository的程序包的主持人进行了许多检查。关于校验和,指南是:通过HTTP下载时,要求安装程序/ zip / etc的校验和;当通过HTTP下载时,推荐校验和。 HTTPS。在大多数情况下,对于新的程序包提交,主持人(包括我本人)将要求将校验和添加到程序包安装脚本中,而不管它们是通过HTTP还是HTTPS发生。

第二,使用校验和来确保在运行时下载的文件与软件包维护者在创建软件包时期望的文件相同。这是一项安全功能,当Chocolatey发现下载的文件与预期的文件之间的校验和不同时,它将不会继续进行安装。 “为什么”校验和可能有多种原因。其中一些原因已在本博客文章中介绍:

https://www.gep13.co.uk/blog/chocolatey-error-hashes-do-not-match

  

首先,某些软件包(例如Google Chrome)不包含其应用程序安装程序的版本化URL。因此,您只能从一个位置https://dl.google.com/tag/s/dl/chrome/install/googlechromestandaloneenterprise64.msi下载Chrome安装程序。因此,每当Google推出新版本的Chrome(这种情况经常发生)时,Chocolatey.org上最新的Chrome软件包版本就会立即失效。

     

校验和破坏的第二种方式是,如果供应商在发布应用程序安装程序后“更改”其应用程序安装程序,而不更改版本号。

后一个原因很不幸,除了生成新的软件包版本外,没有什么可以做的了,这需要使用package fix version notation来创建新的软件包版本(这是由于软件包的版本是不可变的,这意味着一旦获得批准,便无法更改)。

对于前者,当实际上有一个新的应用程序版本,并且URL末尾的文件实际上是一个新的版本时,则请求将是使用更新的版本号创建一个新的软件包版本。在此新程序包中,您将包括新的校验和值。

我想说明的最后一点是,在创建包并将其提交给Chocolatey.org时,将校验和生成并放入包中。如您所提到的,例如使用checksum.exe工具来完成。在安装时,Chocolatey然后针对下载的文件验证此校验和。有适当的机制,例如AU,可以帮助实现此过程的自动化。这可能是您要研究的东西。