Instalación de geth en Raspberry Pi 3: no se puede asignar el error de memoria

He estado usando este script para intentar instalar geth en una Raspberry Pi 3 .

Parece funcionar bien hasta la mitad de la compilación:

pi@raspberrypi:~/go-ethereum $ make geth
build/env.sh go run build/ci.go install ./cmd/geth
>>> /usr/lib/go-1.7/bin/go install -ldflags -X main.gitCommit=bdef758d5c6d397584d0c35e53d6f6c318e61351 -v ./cmd/geth
github.com/ethereum/go-ethereum/cmd/geth
# github.com/ethereum/go-ethereum/cmd/geth
/usr/lib/go-1.7/pkg/tool/linux_arm/link: running gcc failed: fork/exec /usr/bin/gcc: cannot allocate memory

util.go:43: exit status 2
exit status 1
Makefile:15: recipe for target 'geth' failed
make: *** [geth] Error 1

Está diciendo cannot allocate memory: hay ~ 8 GiB libres en la tarjeta SD (1 GB de RAM).

¿Alguien puede recrear este error? ¿Qué consejos hay para depurar/arreglar?

Nb Esta pregunta es similar a Instalar el nodo ethereum en los errores de Raspberry pi .

Además, se informó un problema similar aquí: https://groups.google.com/forum/#!topic/cloud-print-connector/zF_xyViClLM

¿Cuánta memoria (es decir, RAM) está disponible antes de construir? (Ejecutar free -h). ¿Hay algún proceso que consume memoria que podría eliminar primero? (Ejecute top, luego presione Mpara ordenar por uso de memoria).
@RichardHorrocks eso fue todo, gracias; Solo tenía 236M libres... ¡gracias!
Gracias, he agregado algunos detalles más en caso de que sean útiles para alguien más :-)

Respuestas (2)

¿Qué consejos hay para depurar/arreglar?

Estas sugerencias no son específicas para Ethereum/Geth/etc., pero pueden ser útiles para alguien que tenga el mismo problema en el futuro.

El error se quejaba de falta de memoria. (Donde "memoria" significa RAM, no espacio en el disco duro).

/usr/lib/go-1.7/pkg/tool/linux_arm/link: running gcc failed: fork/exec 
/usr/bin/gcc: cannot allocate memory

Incluso si sabe cuánta memoria tiene su sistema, primero verifique cuánto está realmente disponible:

  • free -h, o
  • cat /proc/meminfo | grep MemFree

Si hay algo que considera que no es suficiente, vea si puede liberar algo evaluando qué procesos lo están usando:

  • top, luego Mordenar por uso de memoria.

Una vez que haya seleccionado los procesos no críticos que no necesita, elimínelos:

  • kill -15 <pid>, donde pidestá el id del proceso.

(Tenga en cuenta que estamos usando el número de señal -15, que equivale a SIGTERM, en lugar de -9, que es SIGKILL. De esta manera, le damos al proceso la oportunidad de recibir una notificación de la señal, si tiene un controlador instalado, y limpiar correctamente).

FWIW encontré esta respuesta: https://raspberrypi.stackexchange.com/questions/70/how-to-set-up-swap-space y pude compilar y ejecutar geth en un Rasp B con 512 MB de RAM