Instalación de FreeBSD desde tarball (estilo Arch Linux)

Tags: FreeBSD, Installation


ANTES DE EMPEZAR: Esta guía asume que instalás desde un live de Arch Linux o cualquier Linux con acceso a gdisk, zfs-utils y wget. Si venís de mi guía de Arch, el flujo va a ser familiar.


Paso 0: Preparar el entorno

loadkeys es
timedatectl set-ntp true

Instalá las herramientas necesarias:

sudo pacman -S gptfdisk dosfstools zfs-utils
sudo modprobe zfs

Nota sobre UFS vs ZFS: Desde un live de Arch, formatear con UFS es difícil porque ufsutils no está en los repos oficiales. ZFS en cambio sí está disponible con zfs-utils. Esta guía usa ZFS, que además es la opción recomendada en FreeBSD de todas formas.


Paso 1: Conectarte a WiFi (si es necesario)

iwctl
device list
station wlan0 scan
station wlan0 connect NOMBRE_RED
station wlan0 show
exit

Probá conexión:

ping -c 3 freebsd.org

Paso 2: Particionar el disco

¡ATENCIÓN! Esto destruye todos los datos de /dev/sdX. Verificá con lsblk antes.

lsblk
gdisk /dev/sdX

Dentro de gdisk:

o              # nueva tabla GPT
y              # confirmar

n              # partición EFI
1
[Enter]
+512M
ef00

n              # swap (ajustá según tu RAM)
2
[Enter]
+8G
8200

n              # raíz FreeBSD (ZFS)
3
[Enter]
[Enter]
a504           # tipo FreeBSD ZFS

w
y

Por qué GPT y no MBR: igual que en Arch, UEFI moderno requiere GPT. Los firmwares Intel hace años que deprecaron CSM/MBR. Más info: https://hardzone.es/reportajes/que-es/csm-bios-uefi-placa-base-hdd-ssd/


Paso 3: Formatear particiones

EFI:

mkfs.vfat -F 32 /dev/sdX1

Swap:

mkswap /dev/sdX2
swapon /dev/sdX2

Raíz con ZFS:

zpool create -f \
  -o altroot=/mnt/freebsd \
  -O mountpoint=/ \
  -O atime=off \
  -O compression=lz4 \
  zroot /dev/sdX3

zfs create zroot/ROOT
zfs create -o mountpoint=/ zroot/ROOT/default
zpool set bootfs=zroot/ROOT/default zroot

Datasets opcionales (equivalente a particiones separadas en Arch):

zfs create -o mountpoint=/home zroot/home
zfs create -o mountpoint=/var  zroot/var
zfs create -o mountpoint=/tmp  zroot/tmp

Paso 4: Descargar los tarballs de FreeBSD

cd /tmp
BASE="https://download.freebsd.org/releases/amd64/14.2-RELEASE"

wget $BASE/base.txz
wget $BASE/kernel.txz
wget $BASE/lib32.txz      # opcional: compat 32-bit

# Verificá integridad:
wget $BASE/CHECKSUM.SHA512
sha512sum -c CHECKSUM.SHA512 --ignore-missing

Cambiá 14.2-RELEASE por la versión actual. Verificá en https://download.freebsd.org/releases/amd64/


Paso 5: Extraer los tarballs

mkdir -p /mnt/freebsd
zfs set mountpoint=/mnt/freebsd zroot/ROOT/default

cd /mnt/freebsd
tar xvJf /tmp/base.txz
tar xvJf /tmp/kernel.txz
tar xvJf /tmp/lib32.txz   # si lo descargaste

Paso 6: Partición EFI y bootloader

FreeBSD usa su propio loader.efi, no GRUB:

mkdir -p /mnt/freebsd/boot/efi
mount /dev/sdX1 /mnt/freebsd/boot/efi
mkdir -p /mnt/freebsd/boot/efi/EFI/BOOT
cp /mnt/freebsd/boot/loader.efi /mnt/freebsd/boot/efi/EFI/BOOT/BOOTX64.efi

OJO con UEFI problemático: igual que en Arch con el flag --removable de GRUB, algunos firmwares borran las entradas EFI. Copiando a EFI/BOOT/BOOTX64.efi usás la ruta fallback estándar, que la mayoría de los firmwares respeta. FreeBSD no usa efibootmgr.


Paso 7: Entrar al chroot

mount --bind /dev  /mnt/freebsd/dev
mount --bind /proc /mnt/freebsd/proc
mount --bind /sys  /mnt/freebsd/sys
cp /etc/resolv.conf /mnt/freebsd/etc/
chroot /mnt/freebsd /bin/sh

A diferencia de arch-chroot, acá es chroot manual. No hay equivalente de arch-chroot en FreeBSD porque el sistema de archivos virtual se monta diferente.


Paso 8: Configurar el sistema

8.1 ZFS al boot:

echo 'zfs_load="YES"' >> /boot/loader.conf
echo 'vfs.root.mountfrom="zfs:zroot/ROOT/default"' >> /boot/loader.conf

8.2 rc.conf — servicios y red:

cat >> /etc/rc.conf << 'EOF'
zfs_enable="YES"
hostname="freebsd"
ifconfig_DEFAULT="DHCP"
sshd_enable="YES"
dumpdev="NO"
EOF

ifconfig_DEFAULT="DHCP" funciona para la mayoría de las interfaces. Si no levanta la red, verificá el nombre real con ifconfig (FreeBSD nombra em0, re0, igb0, etc.) y ajustá a ifconfig_em0="DHCP".

8.3 fstab:

cat >> /etc/fstab << 'EOF'
# swap
/dev/ada0p2    none    swap    sw    0    0
EOF

Ajustá ada0p2 según tu hardware. En VMs suele ser vtbd0p2. Usá gpart show para verificar.

8.4 Zona horaria:

tzsetup
# Seleccioná America → Argentina → Buenos Aires

8.5 Keymap y locale:

echo 'keymap="es.kbd"' >> /etc/rc.conf
echo 'LANG=en_US.UTF-8' >> /etc/login.conf

8.6 /etc/hosts:

cat >> /etc/hosts << 'EOF'
127.0.0.1   localhost
::1         localhost
127.0.0.1   freebsd.localdomain freebsd
EOF

8.7 Contraseña root:

passwd

8.8 Crear usuario:

adduser
# Cuando pregunte grupos extra, agregá: wheel

Paso 9: sudo (opcional pero recomendado)

pkg install sudo
visudo
# Descomentá:  %wheel ALL=(ALL:ALL) ALL

La primera vez que ejecutás pkg puede tardar porque bootstrapea el sistema de paquetes. Si falla, ejecutá pkg bootstrap -f.


Paso 10: Salir y desmontar

exit                           # salir del chroot
umount /mnt/freebsd/dev
umount /mnt/freebsd/proc
umount /mnt/freebsd/sys
umount /mnt/freebsd/boot/efi
zpool export zroot
swapoff /dev/sdX2

Paso 11: Rebootear

reboot

Sacá el medio de instalación. El sistema debería bootear al loader de FreeBSD.


Paso 12: Post-instalación (ya dentro de FreeBSD)

Actualizar:

freebsd-update fetch
freebsd-update install

Stack gráfico (equivalente a sway en Arch):

pkg install xorg-minimal sway foot wmenu waybar

Audio:

FreeBSD tiene OSS nativo. Para compatibilidad con apps que usan PulseAudio:

pkg install pulseaudio

Gestión de paquetes (equivalente a pacman):

pkg update
pkg search nombre_paquete
pkg install nombre_paquete
pkg upgrade
pkg autoremove          # equivalente a pacman -Rns $(pacman -Qdtq)
pkg info                # equivalente a pacman -Qe

Diferencias clave con Arch Linux

Arch Linux FreeBSD
pacstrap tar xvJf base.txz
genfstab Editás /etc/fstab manualmente
grub-install Copiás loader.efi a la EFI
arch-chroot chroot /mnt /bin/sh (manual)
systemctl enable servicio echo 'servicio_enable="YES"' >> /etc/rc.conf
pacman -S pkg install
mkinitcpio No existe — el kernel incluye los módulos necesarios
ext4 UFS o ZFS (ZFS nativo y recomendado)
/etc/hostname hostname= en /etc/rc.conf
locale-gen /etc/login.conf (diferente sistema de locales)

Troubleshooting

Problema Solución
No bootea, UEFI no encuentra el loader Verificá que BOOTX64.efi esté en /EFI/BOOT/. Algunos firmwares también buscan en /EFI/freebsd/.
En el boot aparece OK y se cuelga Estás en el loader prompt. Ejecutá: set vfs.root.mountfrom="zfs:zroot/ROOT/default" y luego boot
No hay red después de bootear Ejecutá ifconfig para ver el nombre real de la interfaz. Ajustá /etc/rc.conf con ifconfig_em0="DHCP" (o el nombre que corresponda).
pkg no encuentra repos Ejecutá pkg bootstrap -f o revisá /etc/pkg/FreeBSD.conf
ZFS pool no importa al boot Desde el loader prompt: zpool import -f zroot luego boot
Querés compilar desde ports Descargá src.txz, extraelo en /usr/src, y usá make buildworld buildkernel installkernel installworld