- deviceinfo / modules-initfs: boot through the U-Boot chainload, modules needed in the initramfs for the display, USB and the DSPs. - initfs hooks: dropbear/telnet debug shell over USB networking. - rtwo-panel-revive.service: blank/unblank the NT37705 if it comes up dead from the ABL handoff. - logind-power-key.conf: ignore the power key (handled by the dashboard). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DnHwDU5yL8L6qgPEN5CV5m
71 lines
3.1 KiB
Bash
71 lines
3.1 KiB
Bash
#!/bin/sh
|
|
# Arranca dropbear (SSH) en el debug-shell, ademas del telnetd que ya trae
|
|
# postmarketos-mkinitfs-hook-debug-shell. Ningun paquete oficial de
|
|
# postmarketOS declara dropbear para el initramfs (solo para el rootfs real,
|
|
# via postmarketos-base-downstream, que es otra cosa) -- se agrega aca a
|
|
# mano porque hace falta poder scriptear el debug-shell (heredocs, comandos
|
|
# no interactivos por SSH), cosa que telnet no permite bien.
|
|
#
|
|
# Corre via run_hooks() en init_2nd.sh, DESPUES de setup_usb_network +
|
|
# start_unudhcpd (la red ya esta arriba en este punto) y ANTES de
|
|
# debug_shell(). Ver init_functions.sh:run_hooks (invoca cada hook con
|
|
# 'sh "$hook"', no hace falta que sea ejecutable).
|
|
|
|
# Panel NT37705 (2026-09-25): el ABL deja el subsistema de display encendido
|
|
# (mdss_gdsc on) y el primer encendido de msm sobre ese estado no logra
|
|
# arrancar el panel (sin TE, lecturas DCS -61). Probado en hardware: ni un
|
|
# ciclo de alimentacion del panel ni uno del host DSI/PHY alcanzan; lo unico
|
|
# que lo arranca es apagar mdss_gdsc (reinicia todo el hardware de display),
|
|
# y eso pasa con un blank/unblank del framebuffer. Se hace aca, antes del
|
|
# debug-shell, para que la consola ya se vea. El estado de mdss_gdsc durante
|
|
# el blank queda en dmesg para confirmar que el dominio se apago.
|
|
if [ -e /sys/class/graphics/fb0/blank ]; then
|
|
mount -t debugfs none /sys/kernel/debug 2>/dev/null
|
|
echo 1 > /sys/class/graphics/fb0/blank
|
|
sleep 1
|
|
gdsc=$(grep '^mdss_gdsc ' /sys/kernel/debug/pm_genpd/pm_genpd_summary 2>/dev/null)
|
|
echo "rtwo-panel: mdss_gdsc durante blank: ${gdsc:-desconocido}" > /dev/kmsg
|
|
echo 0 > /sys/class/graphics/fb0/blank
|
|
fi
|
|
|
|
# Este initramfs no trae /etc/passwd ni /etc/shadow (confirmado: ni
|
|
# siquiera una entrada minima de root) -- sin esto dropbear no puede
|
|
# resolver el home de root para buscar authorized_keys, y 'passwd root'
|
|
# falla con "unknown uid 0". El shadow con el campo de clave vacio entre
|
|
# los primeros dos ':' permite login sin contrasena (para cuando -B mas
|
|
# abajo si esta soportado por este build de dropbear).
|
|
if [ ! -f /etc/passwd ]; then
|
|
cat > /etc/passwd <<'PASSWD'
|
|
root:x:0:0:root:/root:/bin/sh
|
|
PASSWD
|
|
fi
|
|
if [ ! -f /etc/group ]; then
|
|
cat > /etc/group <<'GROUP'
|
|
root:x:0:
|
|
GROUP
|
|
fi
|
|
if [ ! -f /etc/shadow ]; then
|
|
cat > /etc/shadow <<'SHADOW'
|
|
root::10933:0:99999:7:::
|
|
SHADOW
|
|
chmod 600 /etc/shadow
|
|
fi
|
|
|
|
mkdir -p /etc/dropbear
|
|
mkdir -p /root/.ssh
|
|
cat > /root/.ssh/authorized_keys <<'KEYS'
|
|
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPpCHmYjP+h7qod3HLcAU55A05c/ZDSkzKEXhU8OpJZG rtwo-debug-shell
|
|
KEYS
|
|
chmod 700 /root/.ssh
|
|
chmod 600 /root/.ssh/authorized_keys
|
|
|
|
# -R: genera las claves de host al vuelo (el initramfs es tmpfs, no
|
|
# persisten entre arranques, no tiene sentido guardarlas)
|
|
# -B: tambien permite login con clave en blanco, por si /etc/passwd trae
|
|
# root sin contrasena (mismo modelo de acceso que telnetd -l
|
|
# pmos_getty, que da shell sin ninguna autenticacion) -- si el build de
|
|
# dropbear no tiene compilado el soporte de blank-password esta opcion
|
|
# simplemente no hace nada, la clave publica de arriba sigue funcionando
|
|
# -E: loguea a stderr/consola, para poder ver por que no conecta si falla
|
|
/usr/sbin/dropbear -R -B -E -p 22 &
|