Homebrew: SHA1 no coincide incluso después de la actualización

4
  • Mac OS X 10.7.4 (Lion)
  • Homebrew 0.9.2

Nueva instalación de Homebrew. Ningún programa se instalará por sí solo: la firma de hash esperada nunca coincide con la real, por el motivo que sea.

La única respuesta que he encontrado en línea es hacer brew update de antemano. Hice esto y eliminé el paquete descargado anteriormente, pero no parece tener ningún efecto:

 $ brew update
 Already up-to-date.
 $ brew install sshfs
 ==> Installing sshfs dependency: autoconf
 ==> Downloading http://ftpmirror.gnu.org/autoconf/autoconf-2.69.tar.gz
 ######################################################################## 100.0%
 Error: SHA1 mismatch
 Expected: 562471cbcb0dd0fa42a76665acf0dbb68479b78a
 Actual: 304f244353d8b7694914ff42fa87f31608728aed
 Archive: /Library/Caches/Homebrew/autoconf-2.69.tar.gz
 (To retry an incomplete download, remove the file above.)

¿Qué está pasando?

Editar : si descargo un paquete manualmente y lo coloco en /Library/Caches/Homebrew/ con el mismo nombre de archivo que Homebrew espera y luego trato de instalar, funciona bien. Pero si dejo que Homebrew intente recuperar el archivo, la descarga finaliza prematuramente después de unos pocos kilobytes, lo que corrompe el archivo y hace que los hashes no coincidan.

    
pregunta Hugh Guiney 23.07.2012 - 16:47

4 respuestas

2

Bien, resulta que el problema no fue con Homebrew, sino con cURL, que solo descargaba 2 KB de cualquier archivo que le tiré y luego fallaba. Pude solucionar este problema instalando la última versión de cURL.

Pasos tomados para resolver:

  1. Se abrió enlace en un navegador web, guardado en /Library/Caches/Homebrew/ .
  2. Ran brew install curl .
  3. Cada vez que obtenía una falta de coincidencia de hash al descargar una dependencia, volvía a realizar los pasos 1 y 2, reemplazando la ubicación del paquete cURL con la que figura en la salida de la consola para la dependencia respectiva.
  4. De forma predeterminada, OS X usa /usr/bin/curl , mientras que la versión Homebrew aparentemente vivía en /usr/local/Cellar/curl/7.27.0/bin/curl . Lo que en realidad debería haber sido un enlace simbólico como /usr/local/bin/curl , pero no fue por alguna razón, aunque brew link curl se arregló (aunque es posible que haya tenido que repetir para las dependencias).
  5. Sin embargo, Homebrew aparentemente tiene la filosofía de que es conveniente utilizar siempre los binarios predeterminados del sistema de Apple, si están disponibles. No estaba en mi caso, así que seguí este consejo y agregué export PATH=/usr/local/bin:$PATH a mi perfil de bash, para hacer lo contrario. , y siempre use los binarios de Homebrew primero, a pesar de las repercusiones de vanguardia que puedan tener.
  6. brew update .
  7. brew install sshfs - ¡éxito!

Muchas gracias a Ian C. por tomarse el tiempo para conversar conmigo y señalarme la dirección correcta.

    
respondido por el Hugh Guiney 10.08.2012 - 02:55
5

Si estás seguro de que el tarball descargado para sshfs es bueno, puedes intentar forzar a Homebrew a que lo instale con:

brew install -f sshfs

Más que probable, si aún se queja, es que tienes una descarga de tarball corrupta. Puedes eliminar /usr/local/Cellar/sshfs/2.4.0/sshfs_2_4_0 , que es el archivo comprimido guardado en caché que Homebrew descargó, y hacer que Homebrew intente descargar el paquete nuevamente.

Si aún se queja sobre la falta de coincidencia del valor hash, puede editar la receta y actualizar la suma de comprobación MD5 para el archivo en la receta y luego instalarla. El archivo a editar es /usr/local/Library/Formula/sshfs.rb . Mirando:

/Users/ian/code/tmp/brew [ian@Ian-Chesals-MacBook-Pro] [13:13]
> cat /usr/local/Library/Formula/sshfs.rb
require 'formula'

class Sshfs < Formula
  homepage 'http://fuse.sourceforge.net/sshfs.html'
  url 'https://github.com/fuse4x/sshfs/tarball/sshfs_2_4_0'
  md5 'c9ea547b9684ec4d85437393a2731322'
  version '2.4.0'

  depends_on :automake
  depends_on :libtool

  depends_on 'pkg-config' => :build
  depends_on 'fuse4x'
  depends_on 'glib'

  def install
    system "autoreconf", "--force", "--install"
    system "./configure", "--disable-debug", "--disable-dependency-tracking",
                          "--prefix=#{prefix}"
    system "make install"
  end

  def caveats; <<-EOS.undent
    Make sure to follow the directions given by 'brew info fuse4x-kext'
    before trying to use a FUSE-based filesystem.
    EOS
  end
end

Puede ver que necesita descargar enlace y recalcular la suma de comprobación MD5 para el archivo y luego actualizar el receta. Entonces:

/Users/ian/code/tmp/brew [ian@Ian-Cs-MacBook-Pro] [13:13]
> wget https://github.com/fuse4x/sshfs/tarball/sshfs_2_4_0
--2012-07-23 13:13:53--  https://github.com/fuse4x/sshfs/tarball/sshfs_2_4_0
Resolving github.com... 207.97.227.239
Connecting to github.com|207.97.227.239|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://nodeload.github.com/fuse4x/sshfs/tarball/sshfs_2_4_0 [following]
--2012-07-23 13:13:53--  https://nodeload.github.com/fuse4x/sshfs/tarball/sshfs_2_4_0
Resolving nodeload.github.com... 207.97.227.252
Connecting to nodeload.github.com|207.97.227.252|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 52812 (52K) [application/octet-stream]
Saving to: 'sshfs_2_4_0'

100%[===========================================================================================>] 52,812       288K/s   in 0.2s    

2012-07-23 13:13:54 (288 KB/s) - 'sshfs_2_4_0' saved [52812/52812]


/Users/ian/code/tmp/brew [ian@Ian-Cs-MacBook-Pro] [13:13]
> md5 sshfs_2_4_0 
MD5 (sshfs_2_4_0) = c9ea547b9684ec4d85437393a2731322

En mi caso, el valor calculado para la descarga coincide con el valor de la receta. Si es diferente para su caso, es probable que su descarga esté dañada. Puede continuar y actualizar la receta si cree que su descarga no está dañada.

Nota: Hice un brew update antes de ejecutar lo anterior, por lo que puedo confirmar que tengo la última receta para sshfs y que la suma de control MD5 para el tarball en la receta es correcta y coincide con lo que se obtiene descargado desde github.

Caveat Utilitor si haces esto.

    
respondido por el Ian C. 23.07.2012 - 19:19
1

Tuvo un problema similar al intentar instalar sdl_image (brew install sdl_image)

brew install sdl_image
==> Downloading http://www.libsdl.org/projects/SDL_image/release/SDL_image-1.2.1
######################################################################## 100.0%
Error: SHA1 mismatch
Expected: 5e3e393d4e366638048bbb10d6a269ea3f4e4cf2
Actual: 96553a2470b51f5cca98d9c390c56bacd12f8ed4

Sin embargo, funcionó después de darme cuenta de que estaba detrás de un servidor que pone a cero / rompe los archivos si exceden un cierto tamaño y por lo tanto se corrompe. Se solucionó moviéndose a otra red e intentando reinstalar. Aunque obtuve el mismo error, sabía que el archivo estaba completo porque el sha esperado dado los errores anteriores ahora se daba en el sha real.

Luego, para completar con éxito cuando me topé, tratar de resolver el problema era brew edit sdl_image y copiar el sha real al sha en el archivo.

    
respondido por el HolyGenius 26.09.2013 - 07:45
1

Tuve un problema similar con zlib-1.2.8. Sin embargo, la causa principal fue que tenía un archivo .curlrc que especificaba --compressed , y esa opción hace que curl descomprima el archivo antes de escribirlo.

Eliminar la opción me solucionó el problema, pero no sé si hay una solución mejor disponible.

    
respondido por el Mark Miller 04.12.2014 - 23:13

Lea otras preguntas en las etiquetas