(No verifique esta instalacion la hizo Claude AI con ayuda de la instalacion de ArchLinux que la habia hecho previamente).
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 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
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
apk add tzdata
cp /usr/share/zoneinfo/America/Argentina/Buenos_Aires /etc/localtime
echo "America/Argentina/Buenos_Aires" > /etc/timezone
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 networkmanager networkmanager-wifi wpa_supplicant
rc-update add networkmanager default
rc-service networkmanager start
nmtui # para conectarse
Cambiar DNS (para que NetworkManager no sobreescriba):
nmcli connection show
nmcli connection modify "nombre_conexion" ipv4.dns "9.9.9.9 149.112.112.112"
nmcli connection modify "nombre_conexion" ipv4.ignore-auto-dns yes
nmcli connection down "nombre_conexion"
nmcli connection up "nombre_conexion"
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 |