Iniciar MacMini con Linux después de fallo de energía

Rain Showers Bring Lightning and Ruined Computers - Yellowstone Computing

Una Mac Mini no se reiniciará automáticamente después de un corte de energía sin la configuración correcta.  

Típicamente MacOS tiene la opción de alternar esta opción (en Preferencias del sistema> Ahorro de energía> "Iniciar automáticamente después de un corte de energía").

A bajo nivel, esta opción establece un registro en el controlador de administración de energía (generalmente el Southbridge que actúa como host de la Interfaz de energía y configuración avanzada (ACPI). MacOS establece este registro después de cada arranque, ya que la configuración no es persistente entre los reinicios
. 

Al utilizar Linux en una Mac no tenemos esta opción visible, y tampoco la podemos alterar desde BIOS.  Por lo tanto, debemos encontrar el tipo de southbridge en la Mac y crear un script de inicio que establezca el bit correcto en el registro de su dispositivo para detonar el autoarranque y persistirlo entre reinicios.

 

 1. Encontrar el Southbridge 

Utilizaremos lspci para encontrar el Southbridge de la mac:

 lspci   


Es probable que la salida contenga uno de los siguientes:

Para un Mac Mini de principios de 2006 / MacMini1,1 / A1176:

 00:1f.0 ISA bridge: Intel Corporation 82801GBM (ICH7-M) LPC Interface Bridge (rev 02)  


Para un Mac Mini de principios de 2009 / MacMini3,1 / A1283:
 00:03.0 ISA bridge: NVIDIA Corporation MCP79 LPC Bridge (rev b2) 


Para un Mac Mini de principios de 2010 / MacMini4,1 / A1347:
 00:03.0 ISA bridge: NVIDIA Corporation MCP89 LPC Bridge (rev a2)


Para un Mac Mini Server 2011:
 00:1f.0 ISA bridge: Intel Corporation HM65 Express Chipset Family LPC Controller (rev 05)
 

 2. Configurar los registros 

 Ahora que sabemos qué hardware tenemos, el siguiente paso es encontrar qué registro determina qué modo (apagado, suspensión, encendido) se elige después de un corte de energía. 

Esto es menos trivial de lo que parece. La documentación del Southbridge es difícil de encontrar y, para los que se encuentran disponibles, no es particularmente legible.  

Afortunadamente, otros ya han determinado el registro correcto para algunos de los Southbridge.

Para PPC Mac Mini: 

 echo server_mode=1 > /proc/pmu/options

Para Mac Mini con
Southbridge Intel ICH7:
 sudo setpci -s 0:1f.0 0xa4.b=0

Para Mac Mini con nVidia MCP79
Southbridge (probablemente también funcionará en MCP89):
 sudo setpci -s 00:03.0 0x7b.b=0x19


3. Configuración de bits en lugar de bytes  

Ten en cuenta que los códigos anteriores establecen todo el byte del registro.
P.ej.
setpci -s 0: 1f.0 0xa4.b = 0 establece los 8 bits de 0xa4 en 00000000. En realidad, solo nos preocupamos por establecer el primer bit en 0 y no nos importan los últimos 7 bits. El código adecuado para hacer esto es: setpci -s 0: 1f.0 0xa4.b = 0: 1. Esto solo establecerá el bit cero en cero (0 = valor: 1 = máscara).

Si deseas verificar el valor existente de los registros, usa el argumento lspci -vvvxxx, así: lspci -vvvxxx -s 00: 03.0

 

4. Script de inicio

Recuerda que estos registros deben configurarse después de cada arranque.


En nuestro caso generaremos primero un archivo shell (.sh) ejecutable que contenga: 

restart_service.sh

#!/bin/sh
setpci -s 0:1f.0 0xa4.b=0

Y nuestro servicio de arranque se configurará de forma:

reboot_on_power_failure.service

 [Unit]  
 Description=Reboot after power failure  
 [Service]  
 Type=oneshot  
 ExecStart=/home/euclides/restart_service.sh  
 [Install]  
 WantedBy=sysinit.target  
 #Use lspci to find the southbridge in your Mac.   
 #Reboot register for Mac Mini with nVidia ISA bridge  
 #For PPC Mac Mini  
 #echo server_mode=1 > /proc/pmu/options  
 #For Mac Mini with Intel ICH7 south-bridge:  
 #sudo setpci -s 0:1f.0 0xa4.b=0  
 #For Mac Mini with nVidia MCP79 south-bridge:  
 #sudo setpci -s 00:03.0 0x7b.b=0x19  

 

Conservo mediante comentarios la configuración adicional en mi servicio en caso de que deba cambiarla por el tipo de mac mini donde la instale ;)

 Finalmente ejecutamos enable --now reboot_on_power_failure.service

 Y listo tendremos nuestro daemon service a prueba de fallos de energía en nuestra Mac Mini con Linux.


 

💙Fuente: http://www.macfreek.nl/