Guía completa para instalar PostmarketOS en un Poco F1 como servidor headless con acceso SSH desde el primer arranque. Este proceso funciona incluso si tu pantalla está rota o desconectada.
- Xiaomi Poco F1 (codename:
beryllium) - Unlocked bootloader (¡Crítico!)
- Cable USB
- El dispositivo debe poder entrar en fastboot mode
- Computadora con Linux (se recomienda Ubuntu/Debian)
- Git instalado
- Fastboot tools instalados
- Conexión USB
Consulta la Wiki: https://wiki.postmarketos.org/wiki/Pmbootstrap/Installation
# Iniciar inicialización
pmbootstrap init
Usa los valores por defecto (default) para todos, excepto las siguientes opciones:
- Vendor:
xiaomi
- Escribe:
xiaomicuando pregunte por el vendor.
- Codename:
beryllium
- Escribe:
berylliumcuando pregunte por el codename del dispositivo.
- User interface:
none
- Importante: Selecciona
none, ya que este es un servidor headless (solo si no deseas usar la pantalla/display).
- Username: Ingresa el nombre de usuario deseado.
- Ejemplo:
heeth - Este será tu nombre de usuario para el login vía SSH.
# Instalar PostmarketOS con los paquetes necesarios
pmbootstrap install --add openssh --add networkmanager --add avahi
Parámetro opcional: --fde (Full Disk Encryption)
Qué hace esto:
openssh: Habilita el servidor SSH para acceso remoto.networkmanager: Gestiona las conexiones de red.avahi: Habilita mDNS para descubrimiento (opcional pero útil).
Este paso tardará varios minutos mientras descarga y compila los paquetes.
# Entrar al sistema de archivos del dispositivo (NO al entorno de compilación)
pmbootstrap chroot -r
Deberías ver un prompt como: / #
# Habilitar servicio SSH
systemctl enable sshd
# Habilitar NetworkManager
systemctl enable NetworkManager
# Habilitar Avahi (opcional, para descubrimiento mDNS)
systemctl enable avahi-daemon
# Editar la configuración de SSH para permitir login de root
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
# Verificar que fue añadido
cat /etc/ssh/sshd_config | grep PermitRootLogin
Omite este paso si usarás solo USB networking.
Si deseas WiFi como respaldo:
# Crear directorio de conexiones de NetworkManager
mkdir -p /etc/NetworkManager/system-connections/
# Crear archivo de conexión WiFi
cat > /etc/NetworkManager/system-connections/WiFi.nmconnection << 'EOF'
[connection]
id=MyWiFi
type=wifi
autoconnect=true
[wifi]
ssid=YourNetworkSSID
mode=infrastructure
[wifi-security]
key-mgmt=wpa-psk
psk=YourWiFiPassword
[ipv4]
method=auto
[ipv6]
method=auto
EOF
# Establecer permisos correctos (¡CRÍTICO!)
chmod 600 /etc/NetworkManager/system-connections/WiFi.nmconnection
Reemplaza:
YourNetworkSSIDcon el nombre real de tu red WiFi.YourWiFiPasswordcon tu contraseña de WiFi real.wpa-pskcon tu tipo de seguridad WiFi (WPA2/WPA3).
Nota: El WiFi en el Poco F1 tiene algunos problemas conocidos. El USB networking es más confiable.
# Salir del entorno chroot
exit
Deberías estar de vuelta en tu terminal regular.
# Navegar al directorio pmbootstrap si no estás ahí
cd ~/pmbootstrap
# Flashear el root filesystem
pmbootstrap flasher flash_rootfs
# Esperar a que complete...
# Flashear el kernel
pmbootstrap flasher flash_kernel
# Esperar a que complete...
Este proceso:
- Borrará los datos existentes en el dispositivo.
- Flasheará el rootfs de PostmarketOS.
- Flasheará el Linux kernel.
- Tomará varios minutos.
IMPORTANTE: ¡No desconectes el dispositivo durante el flashing!
# Reiniciar el dispositivo
fastboot reboot
O manualmente:
- Mantén presionado el botón Power por 10 segundos para forzar el reinicio.
- El dispositivo se reiniciará.
- El primer arranque toma de 1 a 2 minutos.
- La pantalla estará en blanco (sin imagen).
- El USB networking debería inicializarse automáticamente.
# Revisar la nueva interfaz de red USB
ip link show
# Busca una interfaz similar a: enx9e2b191eb8c7
# Debería tener una IP como 172.16.42.2
# Revisar la dirección IP
ip addr show | grep 172.16
# Intentar conectar (reemplaza 'heeth' con tu username)
ssh heeth@172.16.42.1
# O si configuraste root:
ssh root@172.16.42.1
# Si usas mDNS/avahi:
ssh heeth@postmarketos.local
Si la conexión falla:
- Espera un minuto más (el dispositivo podría seguir arrancando).
- Revisa la conexión del cable USB.
- Verifica que la interfaz USB existe:
ip link show. - Prueba con un ping:
ping 172.16.42.1.
Una vez conectado con éxito vía SSH, ejecuta estos comandos:
# Eliminar el enlace simbólico de systemd-resolved
sudo rm /etc/resolv.conf
# Crear configuración DNS estática
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
echo "nameserver 8.8.4.4" | sudo tee -a /etc/resolv.conf
# Añadir ruta por defecto para acceso a internet
sudo ip route add default via 172.16.42.2
En tu computadora host (no en el dispositivo), ejecuta:
# Habilitar IP forwarding
sudo sysctl -w net.ipv4.ip_forward=1
# Configurar NAT (reemplaza wlp3s0 con tu interfaz de internet)
# Encuentra tu interfaz con: ip route | grep default
sudo iptables -t nat -A POSTROUTING -o wlp3s0 -j MASQUERADE
sudo iptables -A FORWARD -i enx9e2b191eb8c7 -o wlp3s0 -j ACCEPT
sudo iptables -A FORWARD -i wlp3s0 -o enx9e2b191eb8c7 -m state --state RELATED,ESTABLISHED -j ACCEPT
De vuelta en el dispositivo:
# Probar conectividad IP
ping -c 3 8.8.8.8
# Probar DNS
ping -c 3 google.com
# Actualizar el índice de paquetes
sudo apk update
# Actualizar todos los paquetes (Upgrade)
sudo apk upgrade
# Instalar paquetes comúnmente necesarios
sudo apk add nano vim git curl wget htop