(No verifique esta instalacion la hizo Claude AI con ayuda de la instalacion de ArchLinux que la habia hecho previamente).

Si estas haciendo dual-boot lee lo ultimo como hay que configurar el /etc/grud.d/40_custom porque os-prober lo detecta mal siempre, lo mismo pasa con Gentoo.

Instalación Alpine Linux — Mini Root FS Bootstrap

Particionado (UEFI/GPT)

fdisk -l       # identificá disco destino, asumimos /dev/sdb
cfdisk /dev/sdb
# EFI: 300M tipo EFI System
# Swap: 4G tipo Linux swap
# Root: resto tipo Linux filesystem

O manualmente:

fdisk /dev/sdb
g
n; 1; 2048; +300M; t; 1; 1   # EFI
n; 2; default; +4G; t; 2; swap
n; 3; default; default
w

Formateo y montado

mkfs.ext4 /dev/sdb3
mkswap /dev/sdb2
mkfs.fat -F 32 /dev/sdb1
mount /dev/sdb3 /mnt
mkdir -p /mnt/boot/efi
mount /dev/sdb1 /mnt/boot/efi
swapon /dev/sdb2

Bootstrap

wget https://dl-cdn.alpinelinux.org/alpine/v3.21/releases/x86_64/alpine-minirootfs-3.21.3-x86_64.tar.gz

# -p es OBLIGATORIO para preservar permisos
tar -xzpf alpine-minirootfs-3.21.3-x86_64.tar.gz -C /mnt

Última versión en: https://alpinelinux.org/downloads/


Chroot

mount -t proc proc /mnt/proc
mount --rbind /sys /mnt/sys
mount --rbind /dev /mnt/dev
mount --rbind /run /mnt/run

O asi

mount /dev/sda4 /mnt
mount /dev/sda2 /mnt/boot

mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys

chroot /mnt /bin/sh

mount -t proc none /mnt/proc
mount -t sysfs none /mnt/sys
mount --bind /dev /mnt/dev
mount --bind /dev/pts /mnt/dev/pts
cp /etc/resolv.conf /mnt/etc/resolv.conf
chroot /mnt /bin/sh

PATH=$PATH:/sbin:/bin

/bin/busybox ls
/sbin/apk

Si tenés arch-chroot:

arch-chroot /mnt

Dentro del chroot

Repositorios y sistema base

cat > /etc/apk/repositories << EOF
https://dl-cdn.alpinelinux.org/alpine/v3.21/main
https://dl-cdn.alpinelinux.org/alpine/v3.21/community
EOF

apk update
apk add alpine-base linux-lts linux-firmware mkinitfs e2fsprogs

ls /lib/modules/
mkinitfs 6.18.34-0-lts
mkinitfs -F "ata base ext4 scsi usb virtio" 6.18.34-0-lts

Timezone

apk add tzdata
cp /usr/share/zoneinfo/America/Argentina/Buenos_Aires /etc/localtime
echo "America/Argentina/Buenos_Aires" > /etc/timezone
rc-service ntpd start
rc-update add ntpd

Hostname y hosts

echo "alpine" > /etc/hostname

cat > /etc/hosts << EOF
127.0.0.1   localhost
::1         localhost
127.0.1.1   alpine.localdomain  alpine
EOF

Teclado español

En Alpine/OpenRC el teclado no va en /etc/vconsole.conf (eso es systemd). Va en /etc/conf.d/keymaps:

apk add kbd-bkeymaps

cat > /etc/conf.d/keymaps << EOF
keymap="es"
extended_keymaps=""
EOF

rc-update add keymaps boot

Reloj de hardware

En OpenRC va en /etc/conf.d/hwclock, no en hwclock --systohc:

cat > /etc/conf.d/hwclock << EOF
clock="UTC"
clock_args=""
EOF

Si el reloj de hardware no usa UTC: clock="local"

Locale

Alpine con musl no usa locale-gen. Se configura en /etc/environment:

apk add musl-locales

cat > /etc/environment << EOF
LANG=es_AR.UTF-8
LC_ALL=es_AR.UTF-8
EOF

DNS (Claro/Personal/Movistar bloquean sitios)

# Quad9
cat > /etc/resolv.conf << EOF
nameserver 9.9.9.9
nameserver 149.112.112.112
EOF

Password root

passwd

fstab

Alpine no tiene genfstab, se hace a mano:

blkid   # anotá los UUID

cat > /etc/fstab << EOF
UUID=<uuid-sdb3>  /          ext4  defaults,noatime  0 1
UUID=<uuid-sdb1>  /boot/efi  vfat  defaults          0 2
UUID=<uuid-sdb2>  none       swap  sw                0 0
EOF

Servicios base de OpenRC

alpine-base reemplaza todas estas líneas — las agrega a los runlevels automáticamente:

apk add alpine-base

NO hace falta si instalaste alpine-base:

# apk add busybox-syslogd
# rc-update add devfs sysinit
# rc-update add dmesg sysinit
# rc-update add mdev sysinit
# rc-update add hwclock boot
# rc-update add modules boot
# rc-update add sysctl boot
# rc-update add hostname boot
# rc-update add bootmisc boot
# rc-update add syslog boot
# rc-update add mount-ro shutdown
# rc-update add killprocs shutdown
# rc-update add savecache shutdown

Verificá que quedó todo bien con:

rc-update show

GRUB (UEFI)

apk add grub grub-efi efibootmgr

grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=alpine

# Si el firmware tiene bugs y borra la entrada EFI:
# grub-install --target=x86_64-efi --efi-directory=/boot/efi --removable

grub-mkconfig -o /boot/grub/grub.cfg

BIOS/MBR legacy:

apk add grub
grub-install /dev/sdb
grub-mkconfig -o /boot/grub/grub.cfg

os-prober para detectar otras distros

apk add os-prober
echo "GRUB_DISABLE_OS_PROBER=false" >> /etc/default/grub
os-prober
grub-mkconfig -o /boot/grub/grub.cfg

Salir y reiniciar

exit
umount -R /mnt
reboot

Post-instalación (ya en Alpine)

Usuario

adduser -G users,video,audio tu_usuario
addgroup tu_usuario wheel

apk add sudo
echo "%wheel ALL=(ALL:ALL) ALL" > /etc/sudoers.d/wheel

Shell

apk add bash fish
chsh -s /bin/bash tu_usuario

Wifi con NetworkManager (NOOO funciona mal, usa wpa_supplicant) (abajo lo explique)

En OpenRC no se usa systemctl. Se usa rc-update y rc-service:

apk add wireless-tools wpa_supplicant iw
iw reg set AR
ip link set wlan0 up
iw dev wlan0 scan | grep SSID
wpa_passphrase "SSID" "TU_PASSWORD" > /etc/wpa_supplicant/wpa_supplicant.conf
wpa_supplicant -B -Dnl80211 -iwlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
udhcpc -i wlan0

Paquetes

apk add \
  vim tmux git curl wget rsync openssh bash fish bash-completion \
  man-db man-pages htop btop fastfetch \
  mpv yt-dlp imagemagick \
  w3m lynx irssi fzf tree \
  unzip unrar zip \
  python3 py3-pip \
  alsa-utils pipewire pipewire-pulse \
  sway foot wl-clipboard grim slurp \
  xdg-desktop-portal xdg-desktop-portal-wlr wmenu \
  docker docker-compose \
  samba acpi bc translate-shell \
  noto-fonts font-terminus \
  cronie

Habilitar servicios:

rc-update add sshd default
rc-update add samba default
rc-update add docker default
rc-update add crond default

Samba

apk add samba
smbpasswd -a tu_usuario
rc-update add samba default
rc-service samba start

Docker

apk add docker docker-compose
rc-update add docker default
rc-service docker start
addgroup tu_usuario docker

Archivos de configuración OpenRC — diferencias con systemd

Función systemd (Arch) OpenRC (Alpine)
Teclado consola /etc/vconsole.conf /etc/conf.d/keymaps
Reloj hardware hwclock --systohc /etc/conf.d/hwclock
Red /etc/systemd/network/ /etc/conf.d/net o NetworkManager
Hostname hostnamectl /etc/hostname
Logger journald /etc/conf.d/syslog
Habilitar servicio systemctl enable X rc-update add X default
Iniciar servicio systemctl start X rc-service X start
Ver estado systemctl status X rc-service X status
Reiniciar servicio systemctl restart X rc-service X restart

apk vs pacman

pacman (Arch) apk (Alpine)
pacman -Syu apk upgrade
pacman -S pkg apk add pkg
pacman -Rcs pkg apk del pkg
pacman -Ss apk search
pacman -Si pkg apk info pkg
pacman -Qe apk list --installed
pacman -Ql pkg apk info --contents pkg
pacman -Scc apk cache clean

TODO: Escribir mas resumido esto.

El problema con os-prober dual boot

Instale alpine en /dev/sda4, la boot partition en /dev/sda2 y swap /dev/sda3 esta bien configurado eso?

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
#

menuentry 'Alpine Linux v3.23 (on /dev/sda4)' --class alpine --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-c0b5f3cf-332b-481b-bac5-06cbe6d18f4c' {
        insmod part_gpt
        insmod ext2
        set root='hd0,gpt4'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt4 --hint-efi=hd0,gpt4 --hint-baremetal=ahci0,gpt4  c0b5f3cf-332b-481b-bac5-06cbe6d18f4c
        else
          search --no-floppy --fs-uuid --set=root c0b5f3cf-332b-481b-bac5-06cbe6d18f4c
        fi
        linux (hd0,gpt2)/vmlinuz-lts root=/dev/sda2
        initrd (hd0,gpt2)/initramfs-lts root=/dev/sda2
}

ChatGPT:

No, ahí hay un problema importante. Tu entrada de GRUB está apuntando mal el root=.

Vos dijiste:

  • /dev/sda4 → Alpine root (/)
  • /dev/sda2 → boot partition (/boot)
  • /dev/sda3 → swap

Entonces el kernel debe arrancar con:

root=/dev/sda4

pero tu GRUB tiene:

linux (hd0,gpt2)/vmlinuz-lts root=/dev/sda2
initrd (hd0,gpt2)/initramfs-lts root=/dev/sda2

Eso le dice al kernel que la raíz del sistema es /dev/sda2, o sea la partición boot, y eso está mal si Alpine está realmente en sda4.

Debería quedar algo así:

menuentry 'Alpine Linux v3.23' {
    insmod part_gpt
    insmod ext2

    set root='hd0,gpt2'

    linux /vmlinuz-lts root=/dev/sda4 rw
    initrd /initramfs-lts
}

O alternativamente:

linux (hd0,gpt2)/vmlinuz-lts root=/dev/sda4 rw
initrd (hd0,gpt2)/initramfs-lts

Detalles importantes:

  • set root='hd0,gpt2' está bien porque ahí están el kernel e initramfs.
  • Pero root=/dev/sda4 es el filesystem raíz real.
  • initrd NO lleva root=.
  • Agregar rw es normal para montar root writable.

Y en Alpine tu /etc/fstab debería ser algo parecido:

/dev/sda4   /      ext4    defaults  0 1
/dev/sda2   /boot  ext4    defaults  0 2
/dev/sda3   none   swap    sw        0 0

(si usás ext4; cambia el tipo si usás otro FS)

También podés usar UUIDs, que es más robusto que /dev/sdX porque el orden puede cambiar. Con:

blkid

podés verlos.

Además, noto otra cosa rara:

initrd (hd0,gpt2)/initramfs-lts root=/dev/sda2

GRUB ignora eso porque root= en initrd no tiene sentido. El parámetro debe ir solo en linux.

Yo:

[~]$ sudo lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda      8:0    0 149.1G  0 disk 
├─sda1   8:1    0   300M  0 part /boot
├─sda2   8:2    0   300M  0 part /mnt/boot
├─sda3   8:3    0     8G  0 part [SWAP]
├─sda4   8:4    0    30G  0 part /mnt
└─sda5   8:5    0 110.5G  0 part /
[~]$ Instale alpine en /dev/sda4, la boot partition en /dev/sda2 y swap /dev/sda3 esta bien configurado eso? ^C
[~]$ ls /mnt/boot
config-6.18.34-0-lts  grub  initramfs-lts  System.map-6.18.34-0-lts  vmlinuz-lts
[~]$ 

Ah, ahora se entiende mejor. Estás arrancado desde otro Linux instalado en /dev/sda5, y Alpine está montado en:

  • /mnt/dev/sda4 (root de Alpine)
  • /mnt/boot/dev/sda2 (boot de Alpine)
  • swap → /dev/sda3

Sí, esa estructura está perfectamente bien.

Entonces tu Alpine realmente es:

Partición Uso
/dev/sda2 /boot
/dev/sda3 swap
/dev/sda4 /
/dev/sda5 otro Linux

El problema sigue siendo que GRUB estaba usando:

root=/dev/sda2

cuando debería usar:

root=/dev/sda4

Porque:

  • el kernel (vmlinuz-lts) está en sda2
  • pero el sistema Alpine real está en sda4

Tu entrada correcta sería algo así:

menuentry 'Alpine Linux' {
    insmod part_gpt
    insmod ext2

    set root='hd0,gpt2'

    linux /vmlinuz-lts root=/dev/sda4 rw
    initrd /initramfs-lts
}

o:

linux (hd0,gpt2)/vmlinuz-lts root=/dev/sda4 rw
initrd (hd0,gpt2)/initramfs-lts

Además, dentro de Alpine verificá que /mnt/etc/fstab tenga algo parecido a:

/dev/sda4  /      ext4  defaults  0 1
/dev/sda2  /boot  ext4  defaults  0 2
/dev/sda3  none   swap  sw        0 0

Y MUY importante en Alpine: si instalaste el kernel manualmente, asegurate de haber generado el initramfs:

mkinitfs

y si estás chrooteado:

mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
chroot /mnt
mkinitfs

porque si no el kernel puede bootear pero no encontrar sda4.

También te recomiendo instalar GRUB desde Alpine mismo:

grub-install /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg

Así detecta correctamente /boot separado.

Yo:

[~]$ cat /mnt/etc/fstab
/dev/cdrom      /media/cdrom    iso9660 noauto,ro 0 0
/dev/usbdisk    /media/usb      vfat    noauto,ro 0 0


# UUID=c0b5f3cf-332b-481b-bac5-06cbe6d18f4c
/dev/sda4               /               ext4            rw,relatime     0 1

# UUID=444E-B591
/dev/sda2               /boot           vfat            rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro     0 2

# /dev/sda3
UUID=fd6ce3b4-6f69-4a98-98fe-7f147d492f4b       none            swap            defaults        0 0

[~]$ 

Lo instale con apk add linux-lts por que [~]$ cat /etc/grub.d/40_custom

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
#

menuentry 'Alpine Linux v3.23 (on /dev/sda4)' --class alpine --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-c0b5f3cf-332b-481b-bac5-06cbe6d18f4c' {
        insmod part_gpt
        insmod ext2
        set root='hd0,gpt4'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt4 --hint-efi=hd0,gpt4 --hint-baremetal=ahci0,gpt4  c0b5f3cf-332b-481b-bac5-06cbe6d18f4c
        else
          search --no-floppy --fs-uuid --set=root c0b5f3cf-332b-481b-bac5-06cbe6d18f4c
        fi
        linux (hd0,gpt2)/vmlinuz-lts root=/dev/sda4 rw
        initrd (hd0,gpt2)/initramfs-lts
}

[~]$ tiene tanto palabrerio y no es corto como la que mostraste, mostrame la version limpia de eso

Sí, ya está bien ahora. El root=/dev/sda4 rw quedó correcto.

Todo el “palabrerío” viene de os-prober + grub-mkconfig, que generan entradas súper verbosas para soportar BIOS/UEFI distintos, búsqueda por UUID, hints, etc.

Podés dejarlo muchísimo más limpio así:

menuentry "Alpine Linux" {
    set root=(hd0,gpt2)
    linux /vmlinuz-lts root=/dev/sda4 rw
    initrd /initramfs-lts
}

Eso hace exactamente lo mismo en tu caso.

Porque:

  • (hd0,gpt2) → donde están kernel/initramfs (/boot)
  • root=/dev/sda4 → raíz real de Alpine

Y listo.

Tu fstab también está bien configurado:

  • /dev/sda4/
  • /dev/sda2/boot
  • swap UUID → OK

Además usaste linux-lts, así que:

  • vmlinuz-lts
  • initramfs-lts

son correctos.

La única cosa que yo haría ahora es regenerar initramfs desde dentro de Alpine por seguridad:

mkinitfs

y después regenerar grub:

grub-mkconfig -o /boot/grub/grub.cfg

Así confirmás que todo quedó consistente.

Yo ejecuto el grub-mkconfig desde ArchLinux.

Yo: Yo ejecuto el grub-mkconfig desde Arch Linux y el os-prober siempre me detecta mal cuando tengo 2 distros de linux instaladas, siempre tengo que configura manualmente la entrada del grub de la 2da distro en /etc/grub.d/40_custom

Sí, eso pasa bastante seguido con os-prober, especialmente cuando:

  • tenés /boot separado,
  • usás varias distros Linux,
  • una distro usa UUID raros,
  • o una distro minimalista como Alpine.

os-prober suele asumir que el kernel y el root están en la misma partición, y cuando detecta:

  • kernel en sda2
  • root en sda4

arma mezclas incorrectas como la que te hizo.

También Alpine es medio “atípico” comparado con Arch/Debian/Fedora porque:

  • usa mkinitfs en vez de mkinitcpio o dracut
  • a veces usa syslinux/extlinux
  • muchos setups Alpine ni siquiera usan GRUB

Entonces os-prober no siempre entiende bien la estructura.

La verdad, lo que hacés vos (40_custom) es más limpio y confiable para multiboot serio.

Muchos usuarios avanzados directamente:

  • desactivan os-prober
  • y mantienen entradas manuales.

Tu entrada minimalista actual está perfecta:

menuentry "Alpine Linux" {
    set root=(hd0,gpt2)
    linux /vmlinuz-lts root=/dev/sda4 rw
    initrd /initramfs-lts
}

Incluso podrías hacerla más robusta usando UUID:

menuentry "Alpine Linux" {
    search --fs-uuid --set=root 444E-B591
    linux /vmlinuz-lts root=UUID=c0b5f3cf-332b-481b-bac5-06cbe6d18f4c rw
    initrd /initramfs-lts
}

Eso evita problemas si:

  • cambia el orden de discos,
  • enchufás otro SATA/USB,
  • o el kernel renombra sdasdb.

Pero si tu setup es fijo y simple, /dev/sdaX está bien también.

/etc/fstab less verbose

You can simplify it a lot. Most of those mount options are just kernel defaults or auto-generated noise.

A clean version would be:

UUID=86dca421-2f17-44a5-b22d-a799847be7f9  /      ext4  defaults  0 1
UUID=B2BE-3F4C                             /boot  vfat  defaults  0 2
UUID=fd6ce3b4-6f69-4a98-98fe-7f147d492f4b none   swap  defaults  0 0

or even:

UUID=86dca421-2f17-44a5-b22d-a799847be7f9 / ext4 defaults 0 1
UUID=B2BE-3F4C /boot vfat defaults 0 2
UUID=fd6ce3b4-6f69-4a98-98fe-7f147d492f4b none swap defaults 0 0

defaults already includes the usual sane options:

  • rw
  • relatime
  • exec
  • auto
  • nouser
  • async

For VFAT /boot, all that:

  • codepage=437
  • iocharset=ascii
  • shortname=mixed
  • etc

is usually unnecessary unless you specifically care about weird filename compatibility.

You can verify what the kernel actually mounted with:

mount | grep boot

or:

findmnt

You’ll notice Linux often ends up using the same effective options anyway.

ArchLinux es mas facil que AlPine :)

Sí podés comprobar bastante antes de rebootear.

Desde Arch, con Alpine montado en /mnt, verificá estas cosas:

  1. Que existan módulos del kernel Alpine:
ls /mnt/lib/modules

debería mostrar:

6.18.34-0-lts
  1. Que el initramfs realmente tenga drivers ext4 y SATA:
lsinitfs /mnt/boot/initramfs-lts | grep ext4

y:

lsinitfs /mnt/boot/initramfs-lts | grep ahci

También:

lsinitfs /mnt/boot/initramfs-lts | grep sd_mod

Si no aparece nada, ahí está el problema.

  1. Verificá el config de mkinitfs:
cat /mnt/etc/mkinitfs/mkinitfs.conf

y fijate que tenga algo tipo:

features="ata base ext4 scsi usb"
  1. Podés incluso probar si Alpine puede montar su root desde el chroot:
mkdir /tmp/testroot
mount -t ext4 /dev/sda4 /tmp/testroot

si eso funciona, ext4 está OK a nivel sistema.

  1. Y MUY útil:

Entrá al initramfs manualmente desde GRUB para debuggear.

En GRUB:

  • apretá e
  • al final de la línea linux agregá:
break

o:

single

Entonces vas a caer en el shell early boot y podés probar:

ls /dev/sd*
mount -t ext4 /dev/sda4 /sysroot

Eso te diría EXACTAMENTE qué está fallando.

Ok, ahora sí encontré algo MUY importante en la documentación oficial de Alpine Linux y en reportes de usuarios.

Tu error exacto:

mounting /dev/sda4 on /sysroot failed: No such file or directory

MUCHAS veces en Alpine NO significa:

  • partición corrupta,
  • GRUB roto,
  • ni initramfs faltante.

Significa que Alpine intentó hacer:

mount /dev/sda4 /sysroot

SIN especificar el tipo de filesystem. (Alpine Linux)

Y hay varios casos donde eso falla, pero:

mount -t ext4 /dev/sda4 /sysroot

FUNCIONA. (Reddit)

Eso encaja PERFECTAMENTE con tu caso:

  • tu ext4 funciona,
  • vos ya pudiste montar /dev/sda4,
  • mkinitfs.conf está bien,
  • GRUB parece bien,
  • y el error sigue igual.

Entonces ahora la solución más probable es esta:

Tu entrada GRUB NECESITA:

rootfstype=ext4

y probablemente también:

modules=sd-mod,ext4

La wiki oficial de Alpine literalmente muestra eso como solución para este error. (Alpine Linux)

Probá EXACTAMENTE esto:

menuentry "Alpine Linux" {
    set root=(hd0,gpt2)
    linux /vmlinuz-lts root=/dev/sda4 modules=sd-mod,ext4 rootfstype=ext4 rw
    initrd /initramfs-lts
}

Después:

grub-mkconfig -o /boot/grub/grub.cfg

Y reboot.

De hecho, encontré un caso prácticamente idéntico al tuyo:

  • ext4,
  • Alpine,
  • GRUB/os-prober,
  • /sysroot failed,
  • y se arregló agregando:
modules=sd-mod,usb-storage,ext4 quiet rootfstype=ext4

al kernel cmdline. (Reddit)

Yo probaría primero:

modules=sd-mod,ext4 rootfstype=ext4

porque vos no necesitás usb-storage.

Ahora si pude bootearlo pero no tenia red :D

Entonces el problema probablemente NO es firmware.

Si ip a solo muestra lo, eso significa que el kernel ni siquiera creó las interfaces de red. O sea:

  • el driver no cargó,
  • o los módulos de red no están instalados.

Y esto en Alpine pasa MUCHO cuando instalás solo:

linux-lts

pero NO instalás el paquete de módulos extra.

Probá esto:

apk add linux-lts
apk add linux-firmware
apk add pciutils

Después:

lspci -k

Eso es CLAVE. Va a mostrar:

  • qué controlador Ethernet/WiFi tenés,
  • y qué kernel module debería usarse.

Ejemplo:

Kernel driver in use: r8169
Kernel modules: r8169

o:

Kernel modules: iwlwifi

Después cargalo manualmente:

modprobe iwlwifi

o:

modprobe r8169

y mirá:

ip a

Pero hay otra pista MUY fuerte:

Si NO aparece NINGUNA interfaz:

  • ni ethernet,
  • ni wifi,

entonces sospecho que Alpine no está cargando módulos PCI automáticamente.

Probá:

lsmod
modprobe rtl8723be
modprobe rtl8723be ant_sel=2
modprobe r8169
echo rtl8723be >> /etc/modules
echo r8169 >> /etc/modules
arch:/# rc-update add modules boot
 * service modules added to runlevel boot

Si casi no aparece nada, ahí está.

Y otra MUY importante:

ls /lib/modules/$(uname -r)/kernel/drivers/net

Si esa carpeta está vacía o incompleta, entonces el kernel/modules quedaron mal instalados.

También probá:

depmod -a

y reboot.


NO USES NETWORKMANAGER

# 1. Sacar NetworkManager
rc-service networkmanager stop
rc-update del networkmanager default

# 2. Crear config de wpa_supplicant
mkdir -p /etc/wpa_supplicant
wpa_passphrase "TU_SSID" "TU_PASSWORD" > /etc/wpa_supplicant/wpa_supplicant.conf

# 3. Agregar country al config (IMPORTANTE)
cat >> /etc/wpa_supplicant/wpa_supplicant.conf <<EOF
ctrl_interface=/var/run/wpa_supplicant
update_config=1
country=AR
EOF

# 4. Configurar interfaces
cat > /etc/network/interfaces <<EOF
auto lo
iface lo inet loopback

auto wlan0
iface wlan0 inet dhcp
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
EOF

# 5. Asegurar servicios al arranque
rc-update add networking boot
rc-update add modules-load boot

# 6. Probar ahora
rc-service networking restart

# 7. Verificar
ping -c3 alpine.org

Audio

JAJA classic minimal Linux progression:

  • no boot
  • no rootfs
  • no network
  • no wifi
  • no sound

y eventualmente termina funcionando todo.

Ahora para sonido en Alpine Linux primero identificá el hardware:

lspci | grep -i audio

Después verificá si ALSA detecta algo:

aplay -l

Probablemente ahora mismo te falta:

  • drivers cargados,
  • ALSA,
  • o PipeWire/PulseAudio.

Instalá primero lo básico:

apk add alsa-utils alsaconf

Después:

rc-service alsa start
rc-update add alsa

Y revisá:

alsamixer

MUY común:

  • el audio está muteado por defecto.

En alsamixer:

  • apretá M para unmute,
  • subí volumen con flechas.

También verificá módulos cargados:

lsmod | grep snd

Si no aparece casi nada:

modprobe snd_hda_intel

porque la mayoría de PCs usan HDA Intel.

Después:

speaker-test -c 2

Si querés audio moderno de desktop después instalás PipeWire:

apk add pipewire wireplumber pipewire-alsa pipewire-pulse

pero primero hacé funcionar ALSA básico.