RT
因为国内网络的原因,使用homebrew在下载或更新软件包时,偶尔会遇上下载失败或网络连接超时的情况,这时就可以通过手动下载的方式,将需要软件包下载下来,在继续执行homebrew进行下载或更新,homebrew判断软件包已经下载下来了,会直接执行安装步骤(从网络上下载软件包的步骤会被跳过)。

以著名的加密通讯软件为例

brew upgrade telegram
Updating Homebrew...
^C==> Upgrading 1 outdated package:
telegram 7.1,206149 -> 7.6,214328
==> Upgrading telegram
==> Downloading https://osx.telegram.org/updates/Telegram-7.6.214
#=#=#                                                            ##O#- #                                                          ##O=#  #                                                         #=#=-#  #
        #    #     #     #
curl: (7) Failed to connect to osx.telegram.org port 443: Operation timed out
==> Purging files for version 7.6,214328 of Cask telegram
Error: telegram: Download failed on Cask 'telegram' with message: Download failed: https://osx.telegram.org/updates/Telegram-7.6.214328.app.zip

下载失败了,网络连接超时,开始干活:
1.找到软件包下载地址

xxx at xxx in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask/Casks (master)
$ ls | grep tele
abyssoft-teleport.rb
platelet.rb
telegram-desktop.rb
telegram.rb

找到软件包名称对应ruby代码文件(xxx.rb),里面有下载地址

vim xxx.rb

如下代码可以看到,url即是对应的下载地址

cask "telegram" doversion "7.6,214328"sha256 "c45c987b3b3ac4334979d30a4d5e5502e389709960a181a738f470f2dba8c6c6"url "https://osx.telegram.org/updates/Telegram-#{version.before_comma}.#{version.after_comma}.app.zip"name "Telegram for macOS"desc "Messaging app with a focus on speed and security"homepage "https://macos.telegram.org/"

2.拿到下载地址后,通过aria2等下载工具将软件包下载下来
3.将下载下来的软件包复制到homebrew指定的软件包本地缓存位置
软件包本地缓存位置可以通过代码打印log的方式获取软件包本地缓存位置

xxx at xxx in /usr/local/Homebrew/Library/Homebrew/cask (stable)
$ vim download.rb

在这个download.rb文件中找到fetch函数(在下面代码中的第22行:def fetch(verify_download_integrity: true)),在第22行:def fetch(verify_download_integrity: true,和第23行间插入下面这一行代码

puts "Hope downloaded: #{downloader.cached_location}"

这一行代码的意思将软件包本地缓存位置打印出来

# typed: true
# frozen_string_literal: truerequire "fileutils"
require "cask/cache"
require "cask/quarantine"module Cask# A download corresponding to a {Cask}.## @api privateclass Downloadinclude Contextattr_reader :caskdef initialize(cask, quarantine: nil)@cask = cask@quarantine = quarantineenddef fetch(verify_download_integrity: true)downloaded_path = begindownloader.fetchdownloader.cached_locationrescue => eerror = CaskError.new("Download failed on Cask '#{cask}' with message: #{e}")error.set_backtrace e.backtraceraise errorendquarantine(downloaded_path)self.verify_download_integrity(downloaded_path) if verify_download_integritydownloaded_pathendend
end

拿到软件包本地缓存位置,

xxx at xxx in /usr/local/Homebrew/Library/Homebrew/cask (stable●)
$ brew upgrade telegram
Updating Homebrew...
^C==> Upgrading 1 outdated package:
telegram 7.1,206149 -> 7.6,214328
==> Upgrading telegram
Hope downloaded: /Users/xxx/Library/Caches/Homebrew/downloads/a8ec193050187e26abfc5f4f727f119a30e8013bf41f3e86e7fcfd3a31b5897b--Telegram-7.6.214328.app.zip
==> Downloading https://osx.telegram.org/updates/Telegram-7.6.214
^C

可以看出缓存位置是:

/Users/xxx/Library/Caches/Homebrew/downloads/

缓存文件名是:

a8ec193050187e26abfc5f4f727f119a30e8013bf41f3e86e7fcfd3a31b5897b--Telegram-7.6.214328.app.zip

将第二个步骤下载下来软件包复制到缓存位置,并重命名为缓存文件名,
然后把刚才修改的代码文件回恢复回原来的样子,

git checkout download.rb

以防止以后执行brew update时出错

brew update

PS:

xxx at xxx in /usr/local/Homebrew/Library/Homebrew/cask (stable)
$ brew --cache
/Users/xxx/Library/Caches/Homebrew

通过这个方式获取的软件包本地缓存位置并不准确,不要使用,而且软件包的本地缓存文件名也不知道
4.重新执行homebrew下载/更新软件包命令

xxx at xxx in ~/Library/Caches/Homebrew/downloads
$ brew upgrade telegram
Updating Homebrew...
^C==> Upgrading 1 outdated package:
telegram 7.1,206149 -> 7.6,214328
==> Upgrading telegram
==> Downloading https://osx.telegram.org/updates/Telegram-7.6.214
Already downloaded: /Users/xxx/Library/Caches/Homebrew/downloads/a8ec193050187e26abfc5f4f727f119a30e8013bf41f3e86e7fcfd3a31b5897b--Telegram-7.6.214328.app.zip
==> Backing App 'Telegram.app' up to '/usr/local/Caskroom/telegra
==> Removing App '/Applications/Telegram.app'
==> Moving App 'Telegram.app' to '/Applications/Telegram.app'
==> Purging files for version 7.1,206149 of Cask telegram
												

homebrew 下载软件包失败,使用手动下载相关推荐

  1. python安装sklearn-contrib-py-earth包实战:pip和conda安装失败、手动下载whl文件安装实战

    python安装sklearn-contrib-py-earth包实战:pip和conda安装失败.手动下载whl文件安装实战 目录 python安装sklearn-contrib-py-earth包 ...

  2. win10下载python失败_python,mysql_WIN10下载MySQL-python失败,python,mysql,windows - phpStudy

    WIN10下载MySQL-python失败 C:\Windows\System32>pip install MySQL-Python Collecting MySQL-Python Using ...

  3. idea中的pom文件中的jar包下载不了,手动下载jar包的方法

    问题描述: 在pom文件中添加依赖的时候,程序怎么着都是下载不了,而且实验了各种方式: IDEA引MAVEN项目jar包依赖导入问题解决 https://www.cnblogs.com/a845701 ...

  4. Python3,5行代码,让你拥有无限量壁纸美图,终于告别手动下载了。

    这里写目录标题 1.引言 2.代码实战 2.1 手动下载 2.2 代码批量下载 3.总结 1.引言 小屌丝:鱼哥, 你电脑桌面壁纸挺好看啊. 小鱼:那是, 毕竟我的审美观在这摆着呢. 小屌丝:你这话, ...

  5. 使用IDM下载,不适用默认浏览器下载

    google浏览器是不能够安装的除非有v*p*n() Firefox浏览器可以安装js脚本   推荐使用 1 google 扩展 IDMan628  扩展程序里面加 IDMGCExt.crx 2 扩展 ...

  6. 绿盾终端申请解密,审批通过之后,右下角提示:解密失败,请手动下载解密文件

    问题描述:     申请解密,审批通过之后,右下角提示:解密失败,请手动下载解密文件? 解答: 这是因为绿盾终端申请解密的文件正在被打开,导致解密通过之后,无法对正在打开的文件进行解密,所以建议文件关 ...

  7. buildroot下载软件包太慢/失败

    buildroot,重新加载第三方软件时,出现下载软件包太慢/失败 --2022-05-15 17:35:00-- https://ftp.pcre.org/pub/pcre/pcre-8.42.ta ...

  8. Ubuntu下载软件包连接失败

    当你尝试从ubuntu下载某个包,出现了下载-连接失败,网上搜了很多方法都不行,甚至打开魔法都不能解决,这次可以尝试,打开系统设置->软件和更新,将默认的下载源从中国改成其他的,多尝试一下,总有 ...

  9. R 软件包及其依赖包下载

    1.简单介绍 这是我用python 写的一个工具,主要是下载R包以及依赖包,现在R IDE中已经集成了这个功能,而我又开发这个主要作用是一台电脑有网络,另外一台没有网络,我需要在有网络的电脑上下载R包 ...

最新文章

  1. Swift3.0带来的变化汇总
  2. Linux环境下使用Mysql连接外部机器
  3. 关于 Quartz 框架如何引入 Dubbo 服务
  4. 数字图像处理与Python实现笔记之图像特征提取
  5. 2012年度最受欢迎中国开源软件评选
  6. file.seek()/tell()-笔记
  7. Ubuntu 15.1 unity在顶部面板显示系统CPU/内存/网络速度
  8. C#Convert.ToInt32(byte)方法-将字节值转换为int
  9. [poj 3436]最大流+输出结果每条边流量
  10. 不简单的工厂:实际体验 .NET Core 2.1 新生物 HttpClientFactory
  11. system_Class类说明文档
  12. 平板电脑android 管理软件,应用宝HD下载V5.2.0.142 安卓版-Android平板电脑(aPad)专用西西软件下载...
  13. 简约实用个人简历自我介绍PPT模板
  14. python桌面程序自动化教程_桌面应用自动化python
  15. Linux普通用户查看本机域名,域名的解析过程
  16. era5气溶胶反演_我院第七届“共享杯”大赛获奖专访来了,各位大气学子进来取经吧!...
  17. java中的element_element是什么意思
  18. 不是有效的win32应用程序
  19. 龙芯电脑开启串口的console控制台配置
  20. 构造函数创造对象--创建四大天王的对象

热门文章

  1. 主题 10:如何将工作中的创新点转化为专利
  2. webpack2.0+ vue2.0
  3. 华为OD机试 - 火星文计算 2(C++) | 附带编码思路 【2023】
  4. 133道Java面试题及答案(面试必看),arm架构linux系统
  5. 交错校验法 / interleaving
  6. 算法概念【PPT整理】
  7. B2B网站运营者及优化排名十赌九输-免费套路必是死路
  8. 阿里、京东、美团等主流互联网公司的最新招聘标准
  9. Java 使用 JDBI 库访问MySQL 数据库
  10. 非计算机专业计算机教学考试,非计算机专业计算机基础课教学改革的探索和实践...