be4de986be
Sin systemd ni NetworkManager, arje-zero quedaba sin red y sin sshd: útil como bare init, inútil para sacar logs de una VPS sin pegado en la consola web. Dos Cards nuevas en el seed prod: - `net-up`: corre `/usr/sbin/arje-net-up` (script nuevo en scripts/), que pone up todas las interfaces y arranca `dhclient -d` en foreground sobre la primera no-loopback. Fallback a dhcpcd o busybox-udhcpc si dhclient no está. Crea de paso /run/sshd y /var/empty/sshd para que sshd no tenga que pelearlos. Restart supervisión. - `sshd`: corre `/usr/sbin/sshd -D -e` (foreground + log a stderr). Usa las host keys que Fedora ya tenía. Restart supervisión. El install script copia arje-net-up.sh a /usr/sbin/arje-net-up. Prerequisito en el host (no automatizable desde acá): si la VPS no tiene un cliente DHCP (Fedora Cloud trae sólo NetworkManager por defecto), el script duerme con el link up y no obtiene IPv4. En ese caso instalar antes del próximo boot: `dnf install dhcp-client`. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
61 lines
2.0 KiB
Bash
Executable File
61 lines
2.0 KiB
Bash
Executable File
#!/bin/sh
|
|
# arje-net-up — sube las interfaces de red y prepara los directorios de
|
|
# runtime que servicios "systemd-aware" (sshd, etc.) esperan que
|
|
# alguien les haya creado. Reemplaza parcialmente lo que
|
|
# systemd-networkd + tmpfiles harían en un boot normal de Fedora.
|
|
#
|
|
# Modelo: DHCP en foreground sobre la primera interfaz no-loopback.
|
|
# arje lo supervisa con Restart, así que si dhclient muere se relanza.
|
|
# IPv6 vía RA lo maneja el kernel solo al subir el link.
|
|
|
|
set -u
|
|
|
|
# Directorios que servicios sin systemd necesitan poblados.
|
|
mkdir -p /run/sshd # PID file de sshd
|
|
mkdir -p /var/empty/sshd # privsep chroot
|
|
|
|
# Up todas las interfaces "reales". Se excluyen las virtuales obvias.
|
|
for sysiface in /sys/class/net/*; do
|
|
[ -d "$sysiface" ] || continue
|
|
name="$(basename "$sysiface")"
|
|
case "$name" in
|
|
lo|sit*|tun*|tap*|veth*|docker*|br-*|cni*|virbr*) continue ;;
|
|
esac
|
|
ip link set "$name" up 2>/dev/null || true
|
|
done
|
|
|
|
# DHCP en foreground sobre la primera interfaz real encontrada.
|
|
iface=""
|
|
for sysiface in /sys/class/net/*; do
|
|
[ -d "$sysiface" ] || continue
|
|
name="$(basename "$sysiface")"
|
|
case "$name" in
|
|
lo|sit*|tun*|tap*|veth*|docker*|br-*|cni*|virbr*) continue ;;
|
|
esac
|
|
iface="$name"
|
|
break
|
|
done
|
|
|
|
if [ -z "$iface" ]; then
|
|
echo "[arje-net-up] no encontré interfaces — durmiendo" >&2
|
|
exec sleep infinity
|
|
fi
|
|
|
|
echo "[arje-net-up] interfaz elegida: $iface"
|
|
if command -v dhclient >/dev/null 2>&1; then
|
|
# `-d` = foreground (sin daemonizar), `-v` = más verbose en stderr.
|
|
echo "[arje-net-up] dhclient -d -v $iface"
|
|
exec dhclient -d -v "$iface"
|
|
elif command -v dhcpcd >/dev/null 2>&1; then
|
|
# `-B` = foreground (no daemonize) en dhcpcd.
|
|
echo "[arje-net-up] dhcpcd -B $iface"
|
|
exec dhcpcd -B "$iface"
|
|
elif command -v udhcpc >/dev/null 2>&1; then
|
|
# busybox udhcpc — `-f` foreground.
|
|
echo "[arje-net-up] udhcpc -f -i $iface"
|
|
exec udhcpc -f -i "$iface"
|
|
else
|
|
echo "[arje-net-up] sin cliente DHCP — mantengo el link up (SLAAC) y duermo" >&2
|
|
exec sleep infinity
|
|
fi
|