【问题标题】:How to make Brew show the size of the formula before installing it?如何让Brew在安装前显示公式的大小?
【发布时间】:2020-01-13 06:37:06
【问题描述】:

我正在寻找一种方法,使brew 无需安装即可显示公式的大小。我尝试了brew infobrew install 的各种选项,但都没有让我查看公式的大小。

但是,在安装公式时,其大小会显示为输出的一部分。

有什么想法吗?

nlykkei-mbp:Projects nlykkei$ brew info llvm
llvm: stable 8.0.1 (bottled), HEAD [keg-only]
Next-gen compiler infrastructure
https://llvm.org/
Not installed
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/llvm.rb
==> Dependencies
Build: cmake ✔
Required: libffi ✔, swig ✔
==> Requirements
Build: xcode ✔
==> Options
--HEAD
        Install HEAD version
==> Caveats
To use the bundled libc++ please add the following LDFLAGS:
  LDFLAGS="-L/usr/local/opt/llvm/lib -Wl,-rpath,/usr/local/opt/llvm/lib"

llvm is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

==> Analytics
install: 15,199 (30 days), 39,871 (90 days), 183,880 (365 days)
install_on_request: 11,125 (30 days), 30,095 (90 days), 140,885 (365 days)
build_error: 0 (30 days)

【问题讨论】:

    标签: macos package homebrew


    【解决方案1】:

    这里有两个问题:

    1. 如果配方没有瓶子(= 预建存档),您不安装它就无法知道它的大小。
    2. 如果一个配方有瓶子,你需要下载它才能知道它的压缩大小

    我跳过第一个问题,因为它对您的情况没有解决方案。关于第二个,我们可以使用 Homebrew 的 JSON API 和jq 获取瓶子的 U​​RL:

    $ brew info --json=v1 llvm | jq -r '.[0].bottle.stable.files.big_sur.url'
    https://ghcr.io/v2/homebrew/core/llvm/blobs/sha256:ff9a71b7b35ecb6c1dfcfe40152b00f4777a3f4a10dcf5cc41044458b02c99cd
    

    注意:由于这个 URL 很长,我在下面的命令中将其截断,以便于阅读。

    我们可以通过curl这个网址知道压缩后的大小。请注意,自 2021 年 4 月起,ghcr.io 需要身份验证,但 using a dummy token works:

    $ curl -I -H 'Authorization: Bearer QQ==' https://ghcr.io/v2/homebrew/... | grep -i content-length
    content-length: 474762229
    

    此公式的 gzip 压缩大小为 474,762,229 字节,即 ~474MiB。

    gzip 压缩包不包含它们的最终大小;我们必须解压它们才能知道。

    我们可以通过gunzip 流式传输存档并获取其大小,而无需在磁盘上存储任何内容:

    $ curl -Ls -H 'Authorization: Bearer QQ==' https://ghcr.io/v2/homebrew/... | gunzip - | wc -c
    1695293440
    

    未压缩的llvm 公式权重为 1,695,293,440 字节,即 ~1.7GiB。

    很遗憾,这可能需要一些时间,具体取决于您的连接和瓶子的大小。

    单线:

    brew info --json=v1 llvm | jq -r '.[0].bottle.stable.files.big_sur.url' | xargs curl -Ls -H 'Authorization: Bearer QQ==' | gunzip - | wc -c
    

    【讨论】:

    • 很好的答案,谢谢。我个人认为公式大小应该作为元数据添加到公式中。 “预建存档”是指包含可执行文件和依赖项的 .tar 存档(或在源代码上运行 make 的结果)?
    • @Shuzheng 生成的“预建存档”有点像从源(make 等)生成的“brew install llvm”,然后 tar/gz 生成 /usr/local/Cellar/llvm/8.0.1 目录。
    • "@bfontaine" - 通过“从源代码生成有点像brew install llvm”,您的意思是在系统上如何安装其他没有瓶子的公式,即brew 下载源文件并运行@ 987654336@他们?是否可以强制brew 从源安装而不是从瓶中安装?
    • 源代码必须始终可用(并且在开源许可证下)是一项要求。瓶子在这里只是为了节省您的编译时间,但从源代码或从瓶子构建应该具有相同的结果。
    • @RobM 感谢您的提醒!我更新了答案; TL;DR 是您必须将 -H 'Authorization: Bearer QQ==' 添加到您的 curl 呼叫中。
    猜你喜欢
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 2021-10-20
    相关资源
    最近更新 更多