(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.
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
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
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/
mount -t proc proc /mnt/proc
mount --rbind /sys /mnt/sys
mount --rbind /dev /mnt/dev
mount --rbind /run /mnt/run
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
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
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
echo "alpine" > /etc/hostname
cat > /etc/hosts << EOF
127.0.0.1 localhost
::1 localhost
127.0.1.1 alpine.localdomain alpine
EOF
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
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"
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
# Quad9
cat > /etc/resolv.conf << EOF
nameserver 9.9.9.9
nameserver 149.112.112.112
EOF
passwd
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
alpine-base reemplaza todas estas líneas — las agrega a los runlevels automáticamente:
apk add alpine-base
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
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
apk add os-prober
echo "GRUB_DISABLE_OS_PROBER=false" >> /etc/default/grub
os-prober
grub-mkconfig -o /boot/grub/grub.cfg
exit
umount -R /mnt
reboot
adduser -G users,video,audio tu_usuario
addgroup tu_usuario wheel
apk add sudo
echo "%wheel ALL=(ALL:ALL) ALL" > /etc/sudoers.d/wheel
apk add bash fish
chsh -s /bin/bash tu_usuario
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
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
apk add samba
smbpasswd -a tu_usuario
rc-update add samba default
rc-service samba start
apk add docker docker-compose
rc-update add docker default
rc-service docker start
addgroup tu_usuario docker
| 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 |
| 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 |
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
}
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 → swapEntonces 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.root=/dev/sda4 es el filesystem raíz real.initrd NO lleva root=.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)/dev/sda3Sí, 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:
vmlinuz-lts) está en sda2sda4Tu 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 AlpineY listo.
Tu fstab también está bien configurado:
/dev/sda4 → //dev/sda2 → /bootAdemás usaste linux-lts, así que:
vmlinuz-ltsinitramfs-ltsson 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:
/boot separado,os-prober suele asumir que el kernel y el root están en la misma partición, y cuando detecta:
sda2sda4arma mezclas incorrectas como la que te hizo.
También Alpine es medio “atípico” comparado con Arch/Debian/Fedora porque:
mkinitfs en vez de mkinitcpio o dracutEntonces 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:
os-proberTu 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:
sda → sdb.Pero si tu setup es fijo y simple, /dev/sdaX está bien también.
/etc/fstab less verboseYou 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:
rwrelatimeexecautonouserasyncFor VFAT /boot, all that:
codepage=437iocharset=asciishortname=mixedis 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.
Sí podés comprobar bastante antes de rebootear.
Desde Arch, con Alpine montado en /mnt, verificá estas cosas:
ls /mnt/lib/modules
debería mostrar:
6.18.34-0-lts
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.
cat /mnt/etc/mkinitfs/mkinitfs.conf
y fijate que tenga algo tipo:
features="ata base ext4 scsi usb"
mkdir /tmp/testroot
mount -t ext4 /dev/sda4 /tmp/testroot
si eso funciona, ext4 está OK a nivel sistema.
Entrá al initramfs manualmente desde GRUB para debuggear.
En GRUB:
elinux 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:
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:
/dev/sda4,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:
/sysroot failed,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.
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:
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:
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:
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.
# 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
JAJA classic minimal Linux progression:
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:
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:
En alsamixer:
M para unmute,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.