如何完全离线安装 Chocolatey 包?

How to install a Chocolatey package completely offline?

我需要在 Windows 完全离线的客户端上安装软件。这意味着他们无法访问互联网。

一个例子。假设我要安装 Paint.Net。我转到参考机(使用 INet)并使用 Chocolatey 安装 Paint.Net。

choco install paint.net -y

安装完成后,我安装了软件和两个工件:

包文件 "paint.net.nupkg" 在 %ChocolateyInstall%/lib/paint.net

%Temp%\chocolatey 中的安装程序文件 "paint.net.4.0.6.install.zip"。

我现在把这两个文件放在U盘上。然后去离线机,插上U盘,想安装包。

是否可以在不修改软件包的情况下安装软件?我知道在 nupkg 文件中有一个 tools/chocolateyInstall.ps1 文件,其中定义了一个 $url 变量。但是我想在不更改包内容或手动修改 URL 的情况下安装包。

我试过参数 --cache 和 --source 但几乎没有运气。

之前看到有人问过这种问题。但是(据我所知)从来没有打算 运行 棒中的安装程序文件(而且不仅是软件包文件)。所以我希望这不是重复的。

缓存下载 - 不确定

虽然有一些方法可以设置原始 nupkg(上面有版本,而不是包目录中的版本 - 使用 Chocolatey community package repository 包页面左侧的下载)和缓存到USB 记忆棒在某处,并不总是确定它是否会工作。您还可以覆盖缓存位置,以便该文件夹位于不在 TEMP 中的某个位置。请参阅 choco configchoco config -hchoco config set cacheLocation c:\some\location 以执行此操作。

创建您自己的包 - 更好

对于您需要离线使用的软件包,您可以管理自己的软件包,并且可以将软件直接嵌入到软件包中。当您想要离线管理软件时需要这样做,因为社区存储库中的大多数内容都受版权法和发行权的约束(为什么他们不简单地嵌入他们所代表的软件)。

创建和使用您自己的包非常安全、可靠且可重复(并且可以完全离线),但它确实会占用时间。如果您是为自己这样做,那么它可以覆盖您作为消费者使用 Chocolatey 和社区存储库节省的任何时间。

内化包 - 最佳

你可以在这里做的最好的事情是一个称为内部化的过程,你下载并提取包,下载所有资源并将它们嵌入包中(或将它们放在某个地方 local/UNC 共享),编辑脚本以使用那些 embedded/local 资源并重新编译包。

这使您可以利用现有的包逻辑,而不会出现 Internet 问题。

有关详细信息,请参阅 Recompiling Packages and Package Internalizer - Automatically Recompile Packages

注意:作为旁注,我们正在考虑为 Chocolatey Pro 版提供自动重新编译的功能,而不仅仅是商业版。

Chocolatey 的组织使用

大多数使用 Chocolatey 的组织都在做一些创建包和重新编译包的组合,因为在生产场景中使用这些包时,他们需要绝对信任和控制这些包。