【问题标题】:How do I install Chocolatey packages offline?如何离线安装 Chocolatey 包?
【发布时间】:2013-08-30 09:01:11
【问题描述】:

我正在尝试自动设置开发人员机器软件安装。 Chocolatey 非常适合在您连接到 Internet 时安装软件包。有没有办法离线安装包?

我只想将所有包放在共享网络文件夹中并使用该包进行安装。如果您有内部应用程序,如何将它们转换为 Chocolatey 包?

【问题讨论】:

    标签: chocolatey


    【解决方案1】:

    缓存下载 - 不确定

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

    创建自己的包 - 更好

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

    创建和使用您自己的包非常安全,但确实会占用时间。如果您是为自己做这件事,那么它可能会覆盖您作为消费者使用 Chocolatey 和社区存储库所节省的任何时间。

    对于组织,我们开发了 Package Builder,它可以在 5-10 秒内创建完整的软件部署(包)。它还可以在 60 秒内从现有安装的软件(程序和功能)中创建软件包!阅读有关Package Builder 的更多信息。

    内部化包 - 最佳

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

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

    更多详情请见Manually Internalizing PackagesPackage Internalizer - Automatically Internalize Packages

    Chocolatey 的组织使用

    大多数使用 Chocolatey 的组织都在做一些创建包和内部化包的组合,因为在生产场景中使用这些包时,他们需要可靠性以及对这些包的绝对信任和控制。

    【解决方案2】:

    我创建了一个名为 ChocolateStore 的项目,该项目自动执行从在线资源复制 Chocolatey 包并使该包可供离线使用的过程。

    您可以在此处查看源代码: https://github.com/BahKoo/ChocolateStore

    【讨论】:

      【解决方案3】:

      Chocolatey 的文档可能会这样回答问题的第一部分:“How To Host Your Own [Private/Internal/Public] Package Repository Server (aka Package Feed)

      它解释了三种类型的包存储库,使您能够在 LAN/Intranet 中或通过共享卷提供包:

      1. Folder/UNC share
      2. Simple server
      3. Package gallery

      问题的第二部分可以用Chocolatey’s documentation about recompiling packages 回答。标题听起来比实际上更复杂,可能只是“如何使现有的包本地化”,我认为那里描述的内容可以应用于问题作者所说的“内部应用程序”(我猜他的意思是程序也称为 .exe 文件,这些文件在任何公共提要中都不可用)。

      【讨论】:

        【解决方案4】:

        所以,我创建了一个Nullsoft 安装程序,它需要从离线计算机安装 Chocolatey 包。这些是总体步骤:

        1. 将 Chocolatey 包下载到临时目录:

          NuGet.exe Install some_package_name -OutputDirectory C:\Temp\ChocoPackages -ExcludeVersion
          
        2. 在 Nullsoft 脚本中,添加这些行以获取下载包:

          nsExec::Exec 'choco feature disable -n=allowGlobalConfirmation'
          

          SetOutPath "${TmpPath}ChocoPackages" 文件 /r "C:\Temp\ChocoPackages*.*"

        3. 当仍在 Nullsoft 脚本中时,使用此命令从安装过程中放置​​文件的临时目录安装 Chocolatey 包:

          choco install --Source "${TmpPath}ChocoPackages" ${Name_Of_ChocoPackage} --acceptlicense --yes
          

        【讨论】:

          【解决方案5】:

          漂亮。这正是我目前正在做的事情!

          对于它的价值,从网络共享文件夹安装,我正在使用:

          choco upgrade eclipse -y -s \\network\users\KyleStoflet\Eclipse
          

          例如,这里我正在升级 Eclipse,我将多解释一下这一行:

          -y 跳过确认

          -s提供源路径

          networkusers 是我们网络和用户目录的占位符

          ...为了测试目的,我的目录中有我们的版本。在该目录中,有多个目录用于 Eclipse、Visual Studio 和我们用于开发的其他各种软件。

          重要提示:我只对直接从Chocolatey packages page 检索到的 .nupkg 文件进行了此操作。我最终没有找到可执行文件的修复程序。

          【讨论】:

            【解决方案6】:

            将安装程序放入缓存目录:

            %TEMP%\chocolatey\<pkg>\<version>
            

            然后强制安装:

            choco install -f <package_name>
            

            在我的版本 (v0.9.10.3) 上运行良好。

            【讨论】:

            • 当然你可以覆盖缓存位置——见choco configchoco config set cacheLocation c:\somewhere
            【解决方案7】:

            Chocolatey 使用$env:TEMP 作为缓存目录,下载文件放在

            $env:Temp\chocolatey\Firefox\60.0.2\FirefoxInstall.exe
            

            60.0.2为包版本,Firefox为包名。

            【讨论】:

              【解决方案8】:

              A.如何使用 Chocolatey 离线安装 Chocolatey 包

              1. 从 Chocolatey 网站下载 Chocolatey NuPackage。 https://chocolatey.org/api/v2/package/chocolatey

              2. 放入本地文件仓库,例如:D:\chocoOfflineRepository

              3. choco source add -n=chocoOfflineControl -s="file:///d:/chocoOfflineRepository/"

              4. choco install -f package

              可选: 就我而言,我还将缓存文件夹设置为我的外部 D 驱动器,而不是我的管理员用户帐户上的 Temp 文件夹。

              1. choco config set cacheLocation D:\chocoOfflineRepository

              B.如何离线安装 Chocolatey

              另外,假设你已经安装了巧克力,但是,以防万一

              1. 阅读: https://docs.chocolatey.org/en-us/choco/setup#completely-offline-install
              2. 下载 Chocolatey Nupackage 文件并放入本地文件存储库
              3. 复制建议的 .ps1 脚本。
              4. 修改包url源为本地源
              $packageRepo = 'file:///d:/chocoOfflineRepository/chocolatey.0.10.15.nupkg'
              
              1. 修改搜索网址更简单
              $searchUrl = $packageRepo.Trim('/')#($packageRepo.Trim('/'), 'Packages()?$filter=(Id%20eq%20%27chocolatey%27)%20and%20IsLatestVersion') -join '/'
              
              1. 运行 chocoofflline ps1 脚本。

              调试: 如果这里有错误: Download-Package $searchUrl $localChocolateyPackageFilePath

              1. 改为手动下载文件并注释掉 Download-Package 行,这样做

              cp d:/chocoOfflineRepository/chocolatey.0.10.15.nupkg C:\ProgramData\choco-cache\chocolatey.nupkg

              1. 然后再次运行这一行或整个 ps1 脚本
                Install-ChocolateyFromPackage $localChocolateyPackageFilePath
              

              注意像@ferventcoder 指出的那样,它不是确定性的,由于内部依赖或代理限制,某些包可能无法工作。就我而言,由于公司代理,我无法使用远程社区库,所以我一直在使用它,直到找到更好的解决方案。 =)

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2012-06-20
                • 1970-01-01
                • 2020-12-06
                相关资源
                最近更新 更多