#!/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