我正在尝试自动设置开发人员机器软件安装。Chocolatey 非常适合在您连接到 Internet 时安装软件包。有没有办法离线安装包?
我只想将所有软件包放在共享网络文件夹中并使用该软件包进行安装。如果你有一个内部应用程序,你如何将它们转换成 Chocolatey 包?
我正在尝试自动设置开发人员机器软件安装。Chocolatey 非常适合在您连接到 Internet 时安装软件包。有没有办法离线安装包?
我只想将所有软件包放在共享网络文件夹中并使用该软件包进行安装。如果你有一个内部应用程序,你如何将它们转换成 Chocolatey 包?
虽然有一些方法可以设置原始 nupkg(上面有版本,而不是包目录中的那个 - 使用从Chocolatey 社区包存储库的包页面左侧下载)并将下载的二进制文件预设到缓存文件夹中,它是并不总是确定它会起作用。您还可以覆盖缓存位置,以便该文件夹不在 TEMP 中。choco config
请参阅choco config -h
并choco config set cacheLocation c:\some\location
执行此操作。
对于离线需要的包,您可以管理自己的包,并且可以将软件直接嵌入到包中。当您想要离线管理软件时,这是需要的,因为社区存储库中的大多数内容都受版权法和分发权的约束(为什么他们不只是嵌入他们所代表的软件)。
创建和使用自己的包是非常安全的,但它确实会占用时间。如果您是为自己做这件事,那么它可能会覆盖您作为消费者使用 Chocolatey 和社区存储库所节省的任何时间。
对于组织,我们开发了 Package Builder,它可以在 5-10 秒内创建完整的软件部署(包)。它还可以在 60 秒内从现有安装的软件(程序和功能)中创建软件包!阅读有关包生成器的更多信息。
您可以在这里做的最好的事情是一个称为内部化的过程,您可以在其中下载并提取包,下载所有资源并将它们嵌入包中(或将它们放在本地的某个地方),编辑脚本以使用那些嵌入/本地资源并重新编译包。
这使您可以利用现有的包逻辑而不会出现 Internet 问题。
有关更多详细信息,请参阅手动内部化包和包内部化器 - 自动内部化包。
大多数使用 Chocolatey 的组织都在做一些创建包和内部化包的组合,因为在生产场景中使用这些包时,它们需要可靠性、绝对信任和控制。
我创建了一个名为 ChocolateStore 的项目,它可以自动执行从在线资源复制 Chocolatey 包并使该包可供离线使用的过程。
你可以在这里查看源代码: https ://github.com/BahKoo/ChocolateStore
因此,我创建了一个Nullsoft安装程序,需要从离线计算机安装 Chocolatey 包。这些是总体步骤:
将 Chocolatey 包下载到一个临时目录:
NuGet.exe Install some_package_name -OutputDirectory C:\Temp\ChocoPackages -ExcludeVersion
在 Nullsoft 脚本中,添加这些行以获取下载包:
nsExec::Exec 'choco feature disable -n=allowGlobalConfirmation'
SetOutPath "${TmpPath}ChocoPackages" 文件 /r "C:\Temp\ChocoPackages*.*"
仍在 Nullsoft 脚本中时,使用此命令从安装过程中放置文件的临时目录安装 Chocolatey 包:
choco install --Source "${TmpPath}ChocoPackages" ${Name_Of_ChocoPackage} --acceptlicense --yes
Chocolatey 的文档可能会这样回答问题的第一部分:“如何托管您自己的 [Private/Internal/Public] Package Repository Server (aka Package Feed) ”
它解释了三种类型的包存储库,使您能够在 LAN/Intranet 中或通过共享卷提供包:
问题的第二部分可以通过Chocolatey 的关于重新编译包的文档来回答。标题听起来比实际更复杂,可能只是“如何使现有的包本地化”,我认为那里描述的内容可以应用于问题作者所说的“内部应用程序”(我猜他的意思是程序又名 .exe 文件,这些文件在任何公共提要中都不可用)。
Chocolatey$env:TEMP
用作缓存目录,下载文件位于
$env:Temp\chocolatey\Firefox\60.0.2\FirefoxInstall.exe
60.0.2 是包版本,Firefox 是包名。
将安装程序放在缓存目录中:
%TEMP%\chocolatey\<pkg>\<version>
并进行强制安装:
choco install -f <package_name>
它在我的版本(v0.9.10.3)上运行良好。
漂亮。这正是我目前正在做的事情!
对于它的价值,从网络共享文件夹安装,我正在使用:
choco upgrade eclipse -y -s \\network\users\KyleStoflet\Eclipse
例如,这里我正在升级 Eclipse,我将对该行进行更多解释:
-y
跳过确认
-s
提供源路径
network
并且users
是我们网络和用户目录的占位符
...出于测试目的,我的目录中有我们的版本。在该目录中,有多个目录用于 Eclipse、Visual Studio 和我们用于开发的其他各种软件。
重要说明:我只对直接从Chocolatey packages page检索到的 .nupkg 文件进行了这项工作。我最终没有找到可执行文件的修复程序。
A.如何用chocolatey离线安装chocolatey包
从 Chocolatey 网站下载 Chocolatey NuPackage。https://chocolatey.org/api/v2/package/chocolatey
将其放在本地文件存储库中,例如:D:\chocoOfflineRepository
choco source add -n=chocoOfflineControl -s="file:///d:/chocoOfflineRepository/"
choco install -f package
可选: 就我而言,我还将缓存文件夹设置为我的外部 D 驱动器,而不是我的管理员用户帐户上的 Temp 文件夹。
choco config set cacheLocation D:\chocoOfflineRepository
B. 如何离线安装 Chocolatey
另外,假设您已经安装了巧克力,但是,以防万一
$packageRepo = 'file:///d:/chocoOfflineRepository/chocolatey.0.10.15.nupkg'
$searchUrl = $packageRepo.Trim('/')#($packageRepo.Trim('/'), 'Packages()?$filter=(Id%20eq%20%27chocolatey%27)%20and%20IsLatestVersion') -join '/'
调试:
如果这里有错误:
Download-Package $searchUrl $localChocolateyPackageFilePath
cp d:/chocoOfflineRepository/chocolatey.0.10.15.nupkg C:\ProgramData\choco-cache\chocolatey.nupkg
Install-ChocolateyFromPackage $localChocolateyPackageFilePath
注意像@ferventcoder 指出的那样,它不是确定性的,由于内部依赖或代理限制,某些包可能无法工作。就我而言,由于公司代理,我无法使用远程社区库,所以我一直在使用它,直到找到更好的解决方案。=)