Instalar Parabola GNU/Linux-libre

Es importante considerar que Parabola es menos estable que Arch debido a que tiene menos usuarios. Si eres un usuario novel no te recomiendo instalarlo, si eres un usuario más avanzado por favor hazlo e involúcrate con su desarrollo y progreso!

1 Inicialización

  • Conectar cable de red
  • Encender
  • Presionar o (other boot options)
  • Presionar Ctrl+b
  • Ingresar dhcp
  • Ingresar chain https://boot.netboot.xyz
  • Cuando aparezca el menú, ir a Linux Network Installs (64-bit) -> Arch Linux -> la última revisión.

Esperar a que bootee, y opcionalmente ingresar:

ls /usr/share/kbd/keymaps/**/*.map.gz # listado de distribuciones de teclado
loadkeys us-acentos # seleccionar distribución de teclado

ls /usr/share/kbd/consolefonts/ # listado de fuentes
setfont latarcyrheb-sun32 && reset # seleccionar fuente

timedatectl set-ntp true # actualizar hora

2 Preparación en caso de encriptación

Si se desea encriptación del dispositivo de almacenamiento interno, opcionalmente, pero muy recomendado es borrar la información previamente contenida en este llenándola con datos aleatorios. Tomará un tiempo, esperar hasta recibir el error "no space left on device".

cryptsetup open --type plain -d /dev/urandom /dev/sdX to_wipe
dd if=/dev/zero of=/dev/mapper/to_wipe status=progress # opcionalmente bs=1M
cryptsetup close to_wipe # luego de "no space left on device"

3 Particionado

Si deseas una encriptación completa del almacenamiento intero, incluyendo /boot, debes saber que Hackware-boot por defecto solo intenta desencriptar la primera partición de cada dispositivo, de modo que la partición de booteo debe ser la primera en la tabla de particiones. Podemos usar una tabla de particiones MBR o GPT, en el caso de GPT querrás crear una partición bios_grub (parted /dev/sdX set Y bios_grub on) de 1M para almacenar datos de arranque de GRUB.

Debido a que GRUB no tiene soporte apropiado para LUKS2, lo mejor es crear una partición /boot separada, y encriptarla con LUKS1 (en caso que se desee).

500MB es un tamaño muy seguro para /boot en caso de la instalación de uno o dos sistemas operativos, pero si se desea bootear más SO se recomienda aumentar ese tamaño.

Si no se encriptará el almacenamiento, y se desea instalar OpenBSD (u otro sistema unix-like que use swap) además de GNU/Linux, se recomienda crear una partición swap separada. En caso de encriptación es mejor que cada cual tenga su swap por seguridad, el uso de un archivo swap es cómodo para esto.

Para particionar el almacenamiento puedes usar fdisk /dev/sdX, donde sdX es el medio de almacenamiento a particionar, podemos reconocerlo ejecutando lsblk.

3.1 /boot

3.1.1 Sin encriptación en /boot

Creamos una partición ext2 para /boot.

mkfs.ext2 /dev/sdX1

3.1.2 Con encriptación en /boot

Creamos una unidad con encriptación LUKS1 para /boot.

cryptsetup -v --type luks1 luksFormat /dev/sdX1
cryptsetup open /dev/sdX1 cryptboot
mkfs.ext2 /dev/mapper/cryptboot

3.2 /

3.2.1 Sin encriptación en /

Creamos una partición ext4 para / y montamos junto a /boot.

mkfs.ext2 /dev/sdXY
mount /dev/sdXY /mnt
mount --mkdir /dev/sdX1 /mnt/boot

3.2.2 Con encriptación en /

Creamos una unidad con encriptación LUKS2 para /.

Por seguridad es altamente recomendable escoger una contraseña distinta. Según la instalación sugerida en este tutorial solo deberemos ingresar la de /boot, pero no debes perder la de /, pues podría servirte para recuperar el acceso a tus archivos en caso de fallas o compromiso a tu sistema.

cryptsetup -v --type luks2 luksFormat /dev/sdXY
cryptsetup open /dev/sdXY cryptroot

En caso de desear la instalación de múltiples distros ahora o posiblemente en el futuro (y/o facilitar la restauración del sistema con snapshots), recomiendo BTRFS. LVM también es una buena opción dependiendo de la necesidad.

De otra manera, lo más sencillo es usar una partición ext4.

  1. ext4
    mkfs.ext4 /dev/mapper/cryptroot
    

    Monta tu sistema de archivos para Parabola en /mnt.

    mount /dev/mapper/cryptroot /mnt
    mount --mkdir /dev/mapper/cryptboot /mnt/boot
    
  2. BTRFS
    mkfs.btrfs /dev/mapper/cryptroot
    

    Para permitir la instalación de varios sistemas ahora o posibilemente a futuro lo mejor es crear un subvolumen base por cada sistema operativo y luego las particiones de cada cual.

    Primero que nada creamos un subvolumen para swap que compartiremos entre todas las distros que instalemos. Necesita no estar sujeto a Copy-on-write (COW) para funcionar apropiadamente. Es un buen lugar para guardar otras cosas que deben estar seguras y disponibles para todos los sistemas, a posterioridad lo montaremos en /var/safe.

    btrfs subvolume create /mnt/safe
    chattr +C /mnt/safe
    

    Ya que BTRFS es bastante flexible y no limita el tamaño de los volumenes (ya que no son block devices, sino árboles de archivo POSIX) recomiendo crear por lo menos 2 volumenes para cada sistema operativo:

    • @ para la raíz /
    • @home para /home
    mount /dev/mapper/cryptroot /mnt
    mkdir /mnt/parabola
    for subvolume in @ @home; do
    	btrfs subvolume create /mnt/parabola/$subvolume
    done
    

    Existen distintas formas de estructurar un esquema BTRFS, acá usamos una estructrura "flat" para @ y @home, y "nested" para @var en caso de snapshots.

    Si se desea realizar snapshots para facilitar la restauración del sistema, Snapper con snap-pac y snap-pac-grub son grandes herramientas.

    En tal caso es buena idea crear además de un subvolumen para snapshots en /var/snapshots, subvolúmenes para espacios a los que no se desea sacar snapshots, como el caché de pacman en /var/cache/pacman, /var/tmp, /var/log y /var/spool.

    btrfs subvolume create /mnt/parabola/@var
    mkdir /mnt/parabola/@var/cache
    for subvolume in snapshots cache/pacman tmp spool log; do
    	btrfs subvolume create /mnt/parabola/@var/$subvolume
    done
    

    Ahora desmontamos con umount /mnt.

    Monta tu sistema de archivos para Parabola en /mnt. Conforme al esquema presentado antes sería asi:

    for subvolume in @ @home @var; do
    	mount /dev/mapper/cryptroot --mkdir -o subvol=parabola/$subvolume /mnt/${subvolume#@}
    done
    mount /dev/mapper/cryptroot --mkdir -o subvol=safe /mnt/var/safe
    mount --mkdir /dev/mapper/cryptboot /mnt/boot
    
  3. LVM

    Pendiente.

4 Migrando instalador a Parabola

Basado en https://wiki.parabola.nu/Migration_from_Arch

En /etc/pacman.conf setear RemoteFileSigLevel = Never.

Instalar keyring y mirrorlist de Parabola:

pacman -U https://www.parabola.nu/packages/core/i686/archlinux32-keyring-transition/download
pacman -U https://www.parabola.nu/packages/libre/x86_64/parabola-keyring/download
pacman -U https://www.parabola.nu/packages/libre/x86_64/pacman-mirrorlist/download

En /etc/pacman.conf, devolver RemoteFileSigLevel a su estado original (comentado o seteado RemoteFileSigLevel = Required DatabaseOptional).

Añadir el repo [libre] en /etc/pacman.conf. El orden es importante: [libre] debe estar sobre todos los repos de Arch (core|extra|community).

...
[libre]
Include = /etc/pacman.d/mirrorlist
...
#[testing]
#Include = /etc/pacman.d/mirrorlist
...

Renombrar mirrorlist.pacnew como mirrorlist:

cp -vr /etc/pacman.d/mirrorlist.pacnew /etc/pacman.d/mirrorlist

Actualiza la base de datos:

pacman -Syy

Actualiza el keyring. Paciencia, esto tomará un tiempo (aprox 1:30 hrs, sigue leyendo para ver una alternativa).

pacman-key --refresh-keys

Alternativamente puedes importar las llaves con pacman-key --import directory-with-pubring.gpg. Previamente necesitas haber creado un backup con mkdir backup-dir && pacman-key --export backup-dir/pubring.gpg (o alguien de confianza te lo tiene que haber pasado).

Instala el pacman de Parabola y your-freedom. Acepta todos los reemplazos.

pacman -S pacman your-freedom

5 Swap

Por flexibilidad usaremos un archivo swap en lugar de una partición. Usaremos una Swap de 4GB (1MB*4000), dependiendo de su uso y las características de tu equipo podrías necesitar más o menos.

mkdir -p /mnt/var/safe
dd if=/dev/zero of=/mnt/var/safe/swapfile bs=1MB count=4000 status=progress
chmod 600 /mnt/var/safe/swapfile
mkswap -U clear /mnt/var/safe/swapfile
swapon /mnt/var/safe/swapfile

6 Instalación

6.1 Paquetes básicos

Deberás instalar los paquetes básicos para el funcionamiento del sitema: base, linux, grub y dhclient.

  • Si encriptaste tu almacenamiento interno además necesitarás cryptsetup.
  • Si usas BTRFS también necesarás instalar btrfs-progs.
  • Si usas LVM también necesarás instalar lvm2.
  • Adicionalmente podrías desear instalar base-devel para compilar cosas, iwd para manejar tu wi-fi, man-db man-pages texinfo para obtener ayuda en tu consola, bash-completion para autocompletación en consola, posix-user-portability para herramientas básicas POSIX y vim y/o emacs como editores.
pacstrap /mnt base linux grub dhclient (..otros..)

6.2 Fstab

Genera un fstab:

genfstab -U /mnt > /mnt/etc/fstab

6.3 Chroot

Posiciónate sobre tu sistema recién instalado en una jaula chroot para comenzar a trabajar desde el:

arch-chroot /mnt

6.4 Zona horaria

Selecciona tu zona horaria:

ln -sf /usr/share/zoneinfo/America/Santiago /etc/localtime
hwclock --systohc

6.5 Localización

Para seleccionar tu localización:

  1. Descomenta tu(s) locale(s) en /etc/locale.gen, por ejemplo en_US.UTF-8 UTF-8 y es_CL.UTF-8 UTF-8.
  2. Ingresa la variable LANG acorde a tu locale en /etc/locale.conf, por ejemplo LANG=es_CL.UTF-8.
  3. Corre locale-gen.

Setea tu tu keyboard layout en /etc/vconsole.conf:

KEYMAP=us-acentos

6.6 Hostname

Ingresa tu hostname:

echo 'parabola' > /etc/hostname

6.7 Repos adicionales

Opcionalmente habilita los repos adicionales del proyecto Parabola en /etc/pacman.conf.

Recomiendo solo habilitar [nonprism] y [pcr] para un sistema relativamente estable. Usar [nonsystemd] requiere más paciencia y capacidades técnicas que la versión que usa systemd, y requiere pasos adicionales o distintos que no están cubiertos en este tutorial.

Si habilitas [nonprism] instala your-privacy:

pacman -Sy your-privacy

6.8 Montaje automático de /boot encriptado

Para montar automáticamente /boot al incio:

dd bs=1 count=512 if=/dev/random of=/var/safe/cryptboot.keyfile iflag=fullblock
chmod 600 /var/safe/cryptboot.keyfile
cryptsetup -v luksAddKey /dev/sdX1 /var/safe/cryptboot.keyfile

Y añade una línea con cryptboot UUID=<cryptboot-uuid> /var/safe/cryptboot.keyfile a /etc/crypttab, donde <cryptboot-uuid> es el UUID de /dev/sdX1, puedes averiguarlo con blkid /dev/sdX1.

6.9 Mkinitcpio

Dependiendo de nuestra instalación, es probable que necesitemos incluir algunos hooks en /etc/mkinitcpio.conf.

  • Si usas encriptación o LVM verifica que esté (o agrega) udev después de base.
  • Si usas encriptación en /boot necesitarás agregar los hook encrypt después de block y keymap después de autodetect (verifica o agrega también keyboard).
  • Si usas LVM necesitarás agregar el hook lvm2, después de block.
  • Agrega resume antes de fsck para soportar la hibernación del sistema.

6.9.1 Ingresar solo una contraseña

En caso de encriptación completa del almacenamiento interno, debido a que tenemos 2 particiones encriptadas, usualmente tendríamos que ingresar 2 contraseñas para poder bootear nuestro sistema. Podemos conseguir que solo nos solicite la contraseña de /boot si dejamos una llave para el acceso a "cryptroot" en initramfs.

Crea el archivo llave y añádela como llave a tu partición encriptada como "cryptroot":

dd bs=1 count=512 if=/dev/random of=/var/safe/cryptroot.keyfile iflag=fullblock
chmod 600 /var/safe/cryptroot.keyfile
cryptsetup -v luksAddKey /dev/sdXY /var/safe/cryptroot.keyfile

Añade el archivo de llave a la imagen initramfs editando /etc/mkinitcpio.conf:

FILES=(/var/safe/cryptroot.keyfile)

6.9.2 Crear initramfs

Una vez editado /etc/mkinitcpio.conf creamos la imagen initramfs con:

mkinitcpio -P

6.10 GRUB

Dependiendo de nuestra instalación es probable que necesitemos incluir algunos módulos en GRUB, lo hacemos a través del archivo /etc/default/grub.

  • Si usas encriptación:
    1. Descomenta GRUB_ENABLE_CRYPTODISK.
    2. Identifica el UUID de tu partición encriptada "cryptroot" con blkid /dev/sdXY.
    3. Si usas encriptación completa añade cryptdevice=UUID=<UUID>:cryptroot cryptkey=rootfs:/var/safe/cryptroot.keyfile a GRUB_CMDLINE_LINUX (reemplazando <UUID>).
  • Si usas LVM agrega lvm a GRUB_PRELOAD_MODULES.

6.10.1 Hibernación

Para hibernar usando un archivo swap es necesario:

  • Agregar resume=<swap_device> a GRUB_CMDLINE_LINUX, donde <swap_device> es el volumen donde se encuentra la swap. En caso de encriptación /dev/mapper/cryptroot, en caso de no haber encriptado /dev/sdXY.
  • Agregar resume_offset=<swap_file_offset>, donde <swap_file_offset> se puede obtener de distintas formas dependiendo del tipo de formato de la partición que usemos:
  1. ext4
    filefrag -v /var/safe/swapfile | awk 'NR == 4 { gsub(/\./, "", $4); print $4 }'
    
  2. BTRFS

    Es un poco más complicado de determinar. Tendremos que instalar gcc al menos temporalmente y luego correr estos comandos:

    curl -LO https://raw.githubusercontent.com/osandov/osandov-linux/master/scripts/btrfs_map_physical.c
    gcc -O2 -o btrfs_map_physical btrfs_map_physical.c
    ./btrfs_map_physical /var/safe/swapfile | awk 'BEGIN{ "getconf PAGESIZE" | getline psize } NR == 2 { print $9/psize }'
    

    Luego de obtener el número e ingresarlo en la configuración de GRUB podemos "limpiar" nuestra instalación borrando los archivos creados con rm y eliminando las gcc, si ya no lo usaremos con pacman -Rs.

6.10.2 Instalar

Una vez editado /etc/default/grub, instala GRUB con:

grub-install --target=i386-pc --recheck /dev/sdX
grub-mkconfig -o /boot/grub/grub.cfg

6.11 Contraseña de root

Cambia la contraseña del usuario root con el comando passwd.

7 Finalización

Si lo deseas puedes olvidar todos los comandos ingresados para la instalación con history -c && rm /root/.bash_history.

Ya puedes reiniciar tu sistema ingresando primero exit y luego reboot.

8 Hackware-boot tool

Tu instalación ya está completamente encriptada. La encriptación del almacenamiento interno de un equipo protege ante ataques fuera de línea, como el acceso a la información por medio de la sutracción de un equipo o sus medios de almacenamiento. Sin embargo existe el riesgo de un tipo de ataque más sofisticado conocido como evil-maid.

Para protegerse ante este tipo de ataques se recomiendan estas medidas:

  • Usar una contraseña diferente para /boot y /.
  • Proteger el acceso a la configuración de la BIOS y el booteo de medios no apropiadamente identificados con una contraseña.
  • Hacer el sistema tamper-evident, por medio de la verificación de los archivos cargados en el inicio temprano del sistema.

Para configurar fácilmente las últimas dos puedes usar la herramienta hwbtool.

  • Instala el paquete flashrom.
  • Copia el binario compilado de la utilidad de coreboot, cbfstool (desde coreboot/util/cbfstool) a /usr/local/sbin/.
  • Copia hwbtool a /usr/local/sbin/.

Reinicia agregando el parámetro del kernel iomem=relaxed a la línea de arranque de GRUB en tu sistema Parabola GNU/Linux-libre:

  1. Prende o reinicia tu equipo.
  2. Selecciona [u] Unlock encrypted boot o espera 2 segundos luego de que aparece el menú de GRUB.
  3. Ingresa tu contraseña de /boot.
  4. Espera unos segundos.
  5. Verás el menú de booteo de Parabola. Presiona e.
  6. En la línea que comienza con linux, dirígete al final de ella e ingresa iomem=relaxed.
  7. Presiona <F10> para bootear Parabola.
  8. Espera que cargue, luego verás la pantalla de inicio de sesión.
  9. Presiona <Ctrl>+<Alt>+<F2> para acceder a una terminal.
  10. Inicia sesión con el usuario root.

Ahora podrás ejecutar hwbtool --grub y seguir las instrucciones.

9 Optimizaciones

9.1 thermald y tlp

Mejoran el consumo energético y la vida útil de la batería. TLP es incompatible con power-profiles-daemon, que viene activado por defecto en GNOME y tal vez algunos otros sistemas, por lo que probablemente debas deshabilitarlo.

9.1.1 Configuración recomendada Thinkpad

cat << EOF > /etc/tlp.d/10-battery.conf
START_CHARGE_THRESH_BAT0=67
STOP_CHARGE_THRESH_BAT0=100
EOF

Fuente

10 Licencia

CC0. Este documento es libre de copyright.