1 votos

¿Por qué brew está intentando instalar una dependencia que ya está instalada?

¿Por qué Brew intenta descargar una dependencia (y falla) cuando esa dependencia ya está instalada?

Estoy tratando de instalar una botella de Python desde Homebrew en un sistema que no tiene acceso a Internet.

brew reinstall --debug --verbose --skip-cask-deps build/deps/python-3.11.catalina.bottle.tar.gz

El comando anterior falla cuando Brew intenta (y falla) acceder a Internet para descargar una de las dependencias (mpdecimal)

==> Obteniendo dependencias para python@3.11: mpdecimal, ca-certificates, openssl@1.1, readline, sqlite y xz
/usr/local/Homebrew/Library/Homebrew/brew.rb (Formulary::FromDefaultNameLoader): cargando mpdecimal
==> Obteniendo mpdecimal
/usr/bin/env /usr/local/Homebrew/Library/Homebrew/shims/shared/curl --disable --config /Users/maltfield/sandbox/buskill-app/build/deps/.curlrc --cookie /dev/null --globoff --show-error --user-agent Homebrew/4.2.11\ \(Macintosh\;\ Intel\ Mac\ OS\ X\ 10.15.7\)\ curl/7.64.1 --header Accept-Language:\ en --fail --location --silent --head https://www.bytereef.org/software/mpdecimal/releases/mpdecimal-4.0.0.tar.gz
==> Descargando https://www.bytereef.org/software/mpdecimal/releases/mpdecimal-4.0.0.tar.gz
/usr/bin/env /usr/local/Homebrew/Library/Homebrew/shims/shared/curl --disable --config /Users/maltfield/sandbox/buskill-app/build/deps/.curlrc --cookie /dev/null --globoff --show-error --user-agent Homebrew/4.2.11\ \(Macintosh\;\ Intel\ Mac\ OS\ X\ 10.15.7\)\ curl/7.64.1 --header Accept-Language:\ en --fail --location --silent --head https://www.bytereef.org/software/mpdecimal/releases/mpdecimal-4.0.0.tar.gz
/usr/bin/env /usr/local/Homebrew/Library/Homebrew/shims/shared/curl --disable --config /Users/maltfield/sandbox/buskill-app/build/deps/.curlrc --cookie /dev/null --globoff --show-error --user-agent Homebrew/4.2.11\ \(Macintosh\;\ Intel\ Mac\ OS\ X\ 10.15.7\)\ curl/7.64.1 --header Accept-Language:\ en --fail --remote-time --output /Users/maltfield/sandbox/buskill-app/build/deps/downloads/72a206df09e9c8bd3f7b24b1dc25e15971fb05aab8c1576b95b73df2ae463ca0--mpdecimal-4.0.0.tar.gz.incomplete --location https://www.bytereef.org/software/mpdecimal/releases/mpdecimal-4.0.0.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0
curl: (28) La conexión falló después de 1000 milisegundos
Error: Error al descargar el recurso "mpdecimal"
La descarga falló: https://www.bytereef.org/software/mpdecimal/releases/mpdecimal-4.0.0.tar.gz

Sin embargo, cuando reviso el sistema, veo que mpdecimal ya está instalado. De hecho, ¡todas las dependencias ya están instaladas!

bash-3.2$ brew list | grep -iE 'mpdecimal|ca-certificates|openssl|readline|sqlite|xz'
ca-certificates
mpdecimal
openssl@1.1
readline
sqlite
xz
bash-3.2$ 

¿Por qué Brew está intentando obtener una dependencia que ya está instalada, y cómo puedo decirle que deje de intentarlo (o, al menos, continuar con la instalación de la botella de todos modos)?

0voto

Michael Altfield Puntos 143

Verifica la versión con brew list --versions y puedes actualizar tu caché de fórmulas para evitar que se actualice

¿Por qué?

Por defecto, brew list no te muestra las versiones instaladas. Añade --versions para verlas

bash-3.2$ brew list --versions | grep -iE 'mpdecimal|ca-certificates|openssl|readline|sqlite|xz'
ca-certificates 2022-10-11
mpdecimal 2.5.1
openssl@1.1 1.1.1q
readline 8.2.1
sqlite 3.39.4
xz 5.2.7
bash-3.2$

En este caso, puedes ver que tienes mpdecimal 2.5.1 instalado, pero la salida del brew reinstall anterior muestra que está intentando descargar mpdecimal 4.0.0.

Solución

Esto es terrible y solo lo descubrí a través de ensayo y error, pero parece que brew no intenta instalar la versión requerida por la fórmula (no pude ver eso definido en ningún lugar de la propia fórmula) — pero simplemente intenta descargar la última versión basada en las fórmulas que tienes en caché en tu sistema.

Las fórmulas de Homebrew son una colección de archivos .rb almacenados en el repositorio github de Homebrew homebrew-core:

En tu sistema, este repositorio está verificado en Homebrew aquí:

maltfield@host m % ls -lah /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core
total 120
drwxr-xr-x   17 maltfield  admin   544B Mar 30 23:19 .
drwxr-xr-x    5 maltfield  admin   160B Mar 30 23:19 ..
drwxr-xr-x   15 maltfield  admin   480B Mar 30 23:19 .git
drwxr-xr-x    8 maltfield  admin   256B Mar 30 23:19 .github
drwxr-xr-x  277 maltfield  admin   8.7K Mar 30 23:19 Aliases
-rw-r--r--    1 maltfield  admin   1.4K Mar 30 23:19 CODEOWNERS
-rw-r--r--    1 maltfield  admin   5.5K Mar 30 23:19 CONTRIBUTING.md
drwxr-xr-x   29 maltfield  admin   928B Mar 30 23:19 Formula
-rw-r--r--    1 maltfield  admin   1.3K Mar 30 23:19 LICENSE.txt
-rw-r--r--    1 maltfield  admin   479B Mar 30 23:19 README.md
drwxr-xr-x   20 maltfield  admin   640B Mar 30 23:19 audit_exceptions
drwxr-xr-x    5 maltfield  admin   160B Mar 30 23:19 cmd
-rw-r--r--    1 maltfield  admin   5.3K Mar 30 23:19 formula_renames.json
-rw-r--r--    1 maltfield  admin    20K Mar 30 23:19 pypi_formula_mappings.json
drwxr-xr-x    9 maltfield  admin   288B Mar 30 23:19 style_exceptions
-rw-r--r--    1 maltfield  admin   2.4K Mar 30 23:19 synced_versions_formulae.json
-rw-r--r--    1 maltfield  admin   1.1K Mar 30 23:19 tap_migrations.json
maltfield@host m % 

Afortunadamente, si ya tienes las dependencias instaladas (Homebrew las instala en /usr/local/Cellar), entonces simplemente puedes sobrescribir estos archivos .rb con los que tienes instalados, y hará que brew reinstall omita el intento de descargar actualizaciones de las dependencias.

En mi caso, para la fórmula de python-3.11, ejecuté lo siguiente

maltfield@host ~ % cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/m
maltfield@host m % mv mpdecimal.rb mpdecimal.rb.$(date "+%Y%m%d_%H%M%S")
maltfield@host m % cp /usr/local/Cellar/mpdecimal/*/.brew/mpdecimal.rb .
maltfield@host m % 

maltfield@host ~ % cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/c
maltfield@host c % mv ca-certificates.rb ca-certificates.rb.$(date "+%Y%m%d_%H%M%S")
maltfield@host c % cp /usr/local/Cellar/ca-certificates/*/.brew/ca-certificates.rb .
maltfield@host c % 

maltfield@host c % cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/o
maltfield@host o % mv openssl@1.1.rb openssl@1.1.rb.$(date "+%Y%m%d_%H%M%S")
maltfield@host o % cp /usr/local/Cellar/openssl@1.1/*/.brew/openssl@1.1.rb .
maltfield@host o % 

maltfield@host o % cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/r
maltfield@host r % mv readline.rb readline.rb.$(date "+%Y%m%d_%H%M%S")
maltfield@host r % cp /usr/local/Cellar/readline/*/.brew/readline.rb .
maltfield@host r % 

maltfield@host r % cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/s
maltfield@host s % mv sqlite.rb sqlite.rb.$(date "+%Y%m%d_%H%M%S")
maltfield@host s % cp /usr/local/Cellar/sqlite/*/.brew/sqlite.rb .
maltfield@host s % 

maltfield@host s % cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/x
maltfield@host x % mv xz.rb xz.rb.$(date "+%Y%m%d_%H%M%S")
maltfield@host x % cp /usr/local/Cellar/xz/*/.brew/xz.rb .
maltfield@host x % 

Ahora, al intentar instalar la fórmula de python funciona, sin fallar al intentar descargar dependencias que ya están instaladas.

Para más información, consulta:

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X