Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MasterGeekMX/6e2d4e47d9852c04f162bf672066daa5 to your computer and use it in GitHub Desktop.
Save MasterGeekMX/6e2d4e47d9852c04f162bf672066daa5 to your computer and use it in GitHub Desktop.
Una guía de instalación moderna y actualizada de Arch Linux con BTRFS en un sistema UEFI

Guía de instalación moderna de Arch Linux

Índice

Introducción

En este guía te mostraré como instalar Arch Linux con BTRFS en un sistema UEFI. Comentaré cada paso para hacerlo más entendible. Aparte de la instalación básica por terminal agregaré pasos para instalar controladores de video, un entorno de escritorio y configuraremos Arch para juegos.


El objetivo de esta guía es ayudar a nuevos usuarios a que se acoplen con Arch Linux al resumir el proceso de instalación y agregando opciones de configuración extra al mismo tiempo de que se añade un toque moderno, minimalista y personal, que consiste en decisiones de "diseño". Por estas razones, cuando es posible he agregado referencias externas por si alguien desea indagar en los detalles.


No prepararemos el sistema para arranque seguro porque el procedimiento de enrolar claves personalizadas en el BIOS es peligroso y puede conducir a un sistema bloqueado. Lea sobre las advertencias (en inglés) aquí. Si te estas preguntando por qué no usar las claves por defecto del OEM en el BIOS, es porque harán el arranque seguro inútil ya que probablemente no sean lo suficientemente seguras, como la wiki de Arch especifica.


No encriptaremos el sistema ya que no lo necesito y en mi opinión hay pocas situaciones donde de verdad se requiere. (siempre puedes encriptar información sensible con GPG). Además, el arranque se hará inevitablemente más lento.


Nos saltaremos la descarga de la imagen ISO, firmas GPG y la preparación del medio de instalación.


Usaré una conexión cableada, por lo que no habrá pasos para configuración inalámbrica. Si quieres conectarte al WiFi, puedes ya sea lanzar wifi-menu desde la terminal ya que es una TGUI (interfaz gráfica de usuario por terminal) ó usar iwctl.


Pasos preliminares

Primero, configura tu distribución del teclado

# Lista todas las distribuciones del teclado y las filtra usando grep. En este caso estamos buscando distribuciones del teclado españolas, las cuales suelen empezar por "es". Las latinoamericanas suelen empezar por "la"
ls /usr/share/kbd/keymaps/**/*.map.gz | grep es

# Si lo prefieres, puedes desplazarte por la lista completa de esta forma
ls /usr/share/kbd/keymaps/**/*.map.gz | less

# O de esta forma
localectl list-keymaps

# Ahora identifica su nombre sin la ruta ni la extensión (localectl regresa solo el nombre) y carga la distribución. En mi caso (teclado latinoamericano) se llama "la-latin1"
loadkeys la-latin1

Checa que estás en modo UEFI

# Si este comando regresa 64 ó 32, estás en modo UEFI
cat /sys/firmware/efi/fw_platform_size

Checa que tengas conexión a Internet

ping -c 5 archlinux.org

Checa el reloj del sistema por si acaso

# Checa si ntp está activo y que la hora es correcta
timedatectl

Instalación principal

Particionado de disco

Haremos dos particiones:

Número Tipo Tamaño
1 EFI 512 Mb
2 Linux Filesystem 99.5Gb (El resto del espacio en el disco)

# Checa el nombre del disco. El mío es /dev/nvme0n1
# Si tienes un disco SATA es probable que sea sdax
fdisk -l

# Invoca el programa fdisk para particionar tu disco
fdisk /dev/nvme0n1

# Ahora ejecuta los siguientes comandos. Cuando escriba ENTER, presionas la tecla Enter.
g
ENTER
n
ENTER
ENTER
ENTER
+512M
ENTER
t
ENTER
ENTER
1
ENTER
n
ENTER
ENTER
ENTER # Si no quieres usar todo el espacio entonces selecciona el espacio que quieras escribiendo +XG (por ejemplo, para hacer una partición de 10GB escribe +10G)
p
ENTER # Revisa que las particiones estén bien

# Si lo están, escribe los cambios
w
ENTER

# Si no lo están, puedes salirte sin guardar y empezar de nuevo desde el inicio
q
ENTER

Formateado de disco

Como sistema de archivos he escogido usar BTRFS ya que ha evolucionado mucho con los años. Tiene un conjunto de increíbles funcionalidades, pero es más conocido por su característica de Copia en Escritura que permite hacer instantáneas en un parpadeo y ahorrar espacio en disco, y si se habilita la compresión se puede ahorrar aún más espacio. También permite la creación de subvolúmenes, los cuales se puede generar instantáneas individualmente. Puedes aprender más aquí.

# Encuentra la partición EFI con fdisk -l ó lsblk y formateala. En mi caso es /dev/nvme0n1p1
mkfs.fat -F 32 /dev/nvme0n1p1

# Encuentra la partición raíz y formateala. En mi caso es /dev/nvme0n1p2. Usaremos BTRFS
mkfs.btrfs /dev/nvme0n1p2

# Monta la partición raíz para hacerla accesible
mount /dev/nvme0n1p2 /mnt

Montado de discos

# Crea los subvolúmenes. En mi caso he escogido hacer un subvolúmen para / y otro para /home. Los subvolúmenes se identifican poniendo un arroba al principio
btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@home
# La lista de subvolúmenes será incrementada en una versión posterior de esta guía después de que sean probadas.
# Los planes actuales son añadir los siguientes subvolúmenes: @log @cache @tmp. De esta forma no serán incluidos cuando se hagan instantáneas de el subvolúmen raíz (ej: @)

# Desmontemos el sistema de archivos raíz
umount /mnt

Para esta guía hemos decidido comprimir los subvolúmenes BTRFS con el algoritmo Zstd ya que ha demostrado ser un buen algoritmo de los disponibles

# Monta los subvolúmenes de raíz y home. Si no quieres compresión, solamente quita la opción "compress=".
mount -o compress=zstd,subvol=@ /dev/nvme0n1p2 /mnt
mkdir -p /mnt/home
mount -o compress=zstd,subvol=@home /dev/nvme0n1p2 /mnt/home

Ahora tenemos que montar la partición EFI. En general, hay dos puntos de montaje comunes: /efi ó /boot, pero en esta configuración estoy forzado a usar /efi ya que si escogemos /boot podríamos experimentar un fallo del sistema al intentar restaurar el subvolúmen @root a un estado previo después de actualizar el kernel. Esto ocurre porque los archivos de arranque como el kernel no están almacenados en @root sino en la partición EFI y por lo tanto no pueden ser guardados al hacer una instantánea de @root. Esta opción también otorga separación de preocupaciones y también es buena si uno quiere encriptar /boot, ya que no puedes encriptar los archivos EFI. Aprende más aquí.

mkdir -p /mnt/efi
mount /dev/nvme0n1p1 /mnt/efi

Instalación de paquetes

# Esto instalará algunos paquetes para "inicializar" nuestro sistema, metafóricamente hablando. Siéntete libre de agregar los que quieras
# "base, linux, linux-firmware" son necesarios
# "base-devel" paquetes de desarrollo básicos
# "git" para instalar el sistema de control de versiones GIT
# "btrfs-progs" son utilidades del espacio de usuario para manejar el sistema de archivos (necesarias para sacarle todo el provecho a BTRFS)
# "grub" es el gestor de arranque
# "efibootmgr" es necesario para instalar GRUB en sistemas UEFI
# "grub-btrfs" agrega soporte para BTRFS en el gestor de arranque GRUB y permite al usuario arrancar directamente desde instantáneas
# "inotify-tools" usado por por el daemon de GRUB btrfsd para detectar nuevas instantáneas automáticamente y generar entradas de arranque en GRUB
# "timeshift" una interfaz gráfica para crear, planear y restaurar instantáneas usando las capacidades de BTRFS
# "amd-ucode" actualizaciones del microcódigo para procesadores AMD. Si tienes un procesador Intel, instala "intel-ucode" en su lugar
# "vim" mi editor de preferencia. Si no lo conoces bien, usa "nano" en su lugar
# "networkmanager" para manejar conexiones a internet ya sean cableadas o inalámbricas (también tiene un applet para la bandeja del sistema llamada "network-manager-applet")
# "pipewire pipewire-alsa pipewire-pulse pipewire-jack" para el nuevo sistema de audio que reemplaza a PulseAudio y JACK. Una pregunta sobre qué manejador de sesión quieres usar. Yo usaré "Wireplumber"
# "reflector" para administrar servidores espejo de pacman
# "zsh" mi interfaz shell favorita
# "zsh-completions" para poder completar comandos y otras cosas en ZSH usando la tecla Tab
# "zsh-autosuggestions" muy útil, te ayuda a escribir comandos [necesita ser configurado en el archivo .zshrc]
# "openssh" para usar SSH y manejar claves
# "man" para tener páginas del manual
# "sudo" para correr comandos como otros usuarios
pacstrap -K /mnt base base-devel linux linux-firmware git btrfs-progs grub efibootmgr grub-btrfs inotify-tools timeshift vim networkmanager pipewire pipewire-alsa pipewire-pulse pipewire-jack reflector zsh zsh-completions zsh-autosuggestions openssh man sudo

Fstab

# Toma los puntos de montado de los discos a como están en este momento (los montamos previamente) y genera instrucciones para informarle al sistema como montar las particiones de forma automática
genfstab -U /mnt >> /mnt/etc/fstab

# Checa que el archivo fstab esté correcto
cat /mnt/etc/fstab

Cambio de contexto al sistema nuevo

# Para acceder a nuestro nuevo sistema "hacemos chroot" (cambiamos de raíz) a el
arch-chroot /mnt

Configurar la zona horaria

# En nuestro sistema nuevo tenemos que configurar la zona horaria. Encuentra la tuya en /usr/share/zoneinfo. La mía es /usr/share/zoneinfo/America/Mexico_City. Crea un enlace simbólico en /etc/localtime
ln -sf /usr/share/zoneinfo/America/Mexico_City /etc/localtime

# Ahora sincroniza la hora con el reloj del hardware
hwclock --systohc

Configurar el idioma y la distribución del teclado en TTY

Edita /etc/locale.gen y descomenta las entradas para tus localizaciones. Esto "habilitará" (NO ACTIVARÁ) el idioma pero también los formatos para fecha, hora, moneda y otras cosas relacionadas al país. En mi caso voy a descomentar (es decir, borrar los #) en en_US.UTF-8 UTF-8 y es_MX.UTF-8 UTF-8 para que el sistema muestre la interfaz en inglés estadounidense, pero conservando el español mexicano para fechas, monedas y otros formatos regionales.

# Para editarlo voy a usar VIM. Usa otro editor como nano si te es más cómodo.
vim /etc/locale.gen

# Ahora genera las localizaciones.
locale-gen

Crea el archivo de configuración /etc/locale.conf y configura la localización a la deseada poniendo la variable LANG apropiadamente. En mi caso pondré LANG=es_MX.UTF-8 para aplicar el español mexicano a todo, pero poniendo que sólo los textos de la interfaz se muestren en inglés con LC_MESSAGES=en_US.UTF-8. (si quieres que el idioma del sistema y de la interfaz de usuario sea la misma NO pongas la variable LC_MESSAGES). Mas información aquí.

touch /etc/locale.conf
vim /etc/locale.conf

Ahora, para hacer que la distribución del teclado actual sea permanente para todas las sesiones de TTY, crea el archivo /etc/vconsole.conf y escribe KEYMAP=tu_distribución sustituyendo con la distribución del teclado que configuraste aquí. En mi caso es KEYMAP=la-latin1

vim /etc/vconsole.conf

Configuración de nombre de Host y otros Hosts

# Escoge un nombre para tu PC. Entonces crea el archivo /etc/hostname y escríbelo en la primera linea. En mi caso será "Arch"
touch /etc/hostname
vim /etc/hostname

# Crea el archivo /etc/hosts. Este archivo es muy importante ya que resolverá los nombres listados de forma local y no usando el Internet.
touch /etc/hosts

Escribe las siguientes parejas de direcciones IP y nombres de host, reemplazando Arch con TU nombre de host que escogiste:

127.0.0.1 localhost
::1 localhost
127.0.1.1 Arch
# Edita el archivo /etc/hosts con la info de arriba
vim /etc/hosts

Root y otros usuarios

# Configura la contraseña del usuario root
passwd

# Agregar un nuevo usuario, en mi caso master
# -m crea el directorio personal en /home/ automáticamente
# -G agrega el usuario a un grupo inicial. En este caso es wheel, que es el grupo de administradores
useradd -mG wheel master
passwd master

# Descomenta el grupo wheel (es decir, borrar el # de la línea de wheel) para permitir que ejecuten cualquier comando. Si quieres editar con nano, usa EDITOR=nano en su lugar.
EDITOR=vim visudo

Configuracion de GRUB

Ahora instalaremos grub

grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=GRUB

Genera el archivo de configuración de GRUB (incluirá el microcódigo que instalamos antes con pacstrap)

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

Desmontar todo y reiniciar

# Habilita el servicio de NetworkManager antes de reiniciar. Sin el, no tendremos conexión.
systemctl enable NetworkManager

# Habilita e inicia el servicio de sincronización de tiempo
timedatectl set-ntp true

# Salimos del chroot
exit

# Desmonta todo para revisar si el disco está ocupado
umount -R /mnt

# Reinicia el sistema. Desconecta el medio de instalación ahora.
reboot

Actualización automática de entradas de arranque de instantáneas

Edita el servicio grub-btrfsd para habilitar la actualización automática de entradas en GRUB cada vez que una instantánea sea creada. Ya que voy a usar Timeshift voy a reemplazar ExecStart=... con ExecStart=/usr/bin/grub-btrfsd --syslog --timeshift-auto. si no usas Timeshift o prefieres actualizar manualmente las entradas entonces revisa esto (en inglés).

sudo systemctl edit --full grub-btrfsd

# Habilita el servicio grub-btrfsd para que se inicie al arrancar
sudo systemctl enable grub-btrfsd

Máquina virtual [opcional]

Follow these steps if you are running Arch on a Virtualbox VM.

# Install the guest utils
pacman -S virtualbox-guest-utils

# Enable this service to automatically load the kernel modules
systemctl enable vboxservice.service

Note: the utils will only work after a reboot is performed.

Warning: the utils seems to only work in a graphical environment.


Ayudante de AUR e instalación de paquetes adicionales [opcional]

To gain access to the arch user repository we need an aur helper, I will choose yay which also works as a pacman wrapper ( which means you can use yay instead of pacman. Cool, right ? ). Yay has a CLI, but if you later want to have an aur helper with a GUI, I advise installing pamac, which is the default on Manjaro.

To learn more about yay read here

Note: you can't execute makepkg as root, so you need to log in your main account. For me it's mjkstra

# Install yay
pacman -S --needed git base-devel && git clone https://aur.archlinux.org/yay.git && cd yay && makepkg -si

# Install "timeshift-autosnap", a configurable pacman hook which automatically makes snapshots before pacman upgrades.
yay -S timeshift-autosnap

Learn more about timeshift autosnap here


Finalización

# To complete the main/basic installation reboot the system
reboot

After these steps you should be able to boot on your newly installed Arch Linux, if so congrats !

The basic installation is complete and you could stop here, but if you want to to have a graphical session, you can continue reading the guide.


Controladores de video

In order to have the smoothest experience on a graphical environment, juegos included, we first need to install Controladores de video. To help you choose which one you want or need, read this section of the arch wiki.

Note: skip this section if you are on a Virtual Machine


Amd

For this guide I'll install the AMDGPU driver which is the open source one and the recommended, but be aware that this works starting from the GCN 3 architecture, which means that cards before RX 400 series are not supported. ( FYI I have an RX 5700 XT )

# What are we installing ?
# mesa: DRI driver for 3D acceleration
# xf86-video-amdgpu: DDX driver for 2D acceleration in Xorg
# vulkan-radeon: vulkan support
# libva-mesa-driver: VA-API h/w video decoding support
# mesa-vdpau: VDPAU h/w accelerated video decoding support

sudo pacman -S mesa xf86-video-amdgpu vulkan-radeon libva-mesa-driver mesa-vdpau

Soporte de 32 bits

IF you want add 32-bit support, we need to enable the multilib repository on pacman: edit /etc/pacman.conf and uncomment the [multilib] section ( ie: remove the hashtag from each line of the section. Should be 2 lines ). Now we can install the additional packages.

# Refresh and upgrade the system
yay

# Install 32bit support for mesa, vulkan, VA-API and VDPAU
pacman -S lib32-mesa lib32-vulkan-radeon lib32-libva-mesa-driver lib32-mesa-vdpau

Nvidia

In summary if you have an Nvidia card you have 2 options:

  1. Nouveau open source driver
  2. NVIDIA proprietary driver

I won't explain further because I don't have an Nvidia card and the process for such cards is tricky unlike for AMD or Intel cards. Moreover for reason said before, I can't even test it.


Intel

Installation looks almost identical to the AMD one, but every time a package contains the radeon word substitute it with intel. However this does not stand for h/w accelerated decoding, and to be fair I would recommend reading the wiki before doing anything.


Configurando un entorno gráfico

I'll provide 2 options:

  1. KDE-plasma
  2. Hyprland

On top of that I'll add a display manager, which you can omit if you don't like ( if so, you have additional configuration steps to perform ).


Opción 1: KDE-plasma

KDE Plasma is a very popular DE which comes bundled in many distributions. It supports both the older more stable Xorg and the newer Wayland protocols. It's user friendly and also it's used on the Steam Deck, which makes it great for juegos. I'll provide the steps for a minimal installation and add some basic packages.

# Install the plasma desktop environment, the audio and network applets, task manager, screen configurator, global shortcuts, power manager, some useful basic addons, configuration for GTK application theming and other package of personal interest
pacman -S plasma-desktop plasma-pa plasma-nm plasma-systemmonitor kscreen khotkeys powerdevil kdeplasma-addons kde-gtk-config breeze-gtk alacritty dolphin firefox kate okular mpv gimp

Now don't reboot your system yet. If you want a display manager, which is generally recommended, head to the related section in this guide and proceed from there otherwise you'll have to manually configure and launch the graphical environment each time (which I would advise to avoid).


Opción 2: Hyprland [en construcción]

Hyprland is a tiling WM that sticks to the wayland protocol. It looks incredible and it's one of the best Wayland WMs right now. It's based on wlroots the famous library used by Sway, the most compatible/working Wayland WM there is. I don't know if I would recommend this to beginners because it's a different experience from Windows/Ubuntu/PopOs and distros like that, moreover it requires you to read the guide for configuration. The good part is that even if it seems discouraging, it's actually an easy read because it is written beautifully even better than the Arch wiki !

# Install hyprland from tagged releases and other utils
pacman -S --needed hyprland swaylock wofi waybar dolphin alacritty
yay -S wlogout

Note: this section needs configuration and misses a lot of stuff, I don't know when and if I will expand it but at least you have a starting point, which is the wiki and the master tutorial


Agregando un manejador de pantalla

Display managers are useful when you have multiple DE or WMs and want to choose where to boot from in a GUI fashion, also they take care of the launch process. I'll show the installation process of SDDM, which is highly customizable and compatible.

Note: hyprland does not support any display manager, however SDDM is reported to work flawlessly from the wiki

# Install SDDM
sudo pacman -S sddm

# Enable SDDM service to make it start on boot
sudo systemctl enable sddm

# If using KDE I suggest installing this to control the SDDM configuration from the KDE settings App
pacman -S --needed sddm-kcm

# Now it's time to reboot the system
reboot

juegos

juegos on linux has become a very fluid experience, so I'll give some tips on how to setup your arch distro for juegos.

Let's break down what is needed to game:

  1. juegos client ( eg: Steam, Lutris, Bottles, etc..)
  2. Capas de compatibilidad con Windows ( eg: Proton, Wine, DXVK, VKD3D )

Optionally we can have:

  1. Generic optimization ( eg: gamemode )
  2. Overclocking y monitoreo software ( eg: CoreCtrl, Mangohud )
  3. Custom kernels

Clientes de juegos

I'll install Steam and to access games from other launchers I'll use Bottles, which should be installed through flatpak.

# Install steam and flatpak
pacman -S steam flatpak

# Install bottles through flatpak
flatpak install flathub com.usebottles.bottles

Capas de compatibilidad con Windows

Proton is the compatibility layer developed by Valve, which includes DXVK( DirectX 9-10-11 to Vulkan), VKD3D ( DirectX 12 to Vulkan ) and a custom version of Wine. It is embedded in Steam and can be enabled directly in Steam settings. A custom version of proton, Proton GE exists and can be used as an alternative if something is broken or doesn't perform as expected. Can be either downloaded manually, like explained here or through yay as below.

# Installation through yay
yay -S proton-ge-custom-bin

Tips: To have a more fluid shader compilation when using steam, enable from its settings shader precaching and background processing of vulkan shaders


Optimizaciones genéricas

We can use gamemode to gain extra performance. To enable it read here

# Install gamemode
pacman -S gamemode

Overclocking y monitoreo

To live monitor your in-game performance, you can use mangohud. To enable it read here

# Install mangohud
pacman -S mangohud

To overclock your system, i suggest installing corectrl if you have an AMD Gpu or TuxClocker for NVIDIA.


Trucos y consejos

Tip: On KDE disabling mouse acceleration is simple, just go to the settings via the GUI and on the mouse section enable the flat acceleration profile. If not using KDE then read here

Tip: To enable freesync or Gsync you can read here, depending on your session ( Wayland or Xorg ) and your gfx provider ( Nvidia, AMD, Intel ) the steps may differ. On a KDE wayland session, you can directly enable it from the monitor settings

About custom kernels: To be fair I don't recommend changing the kernel to a custom one, for many reasons:

  1. You have to manually update it and recompile it each time unless you use a precompiled kernel from pacman or aur such as linux-zen
  2. Performance gain is little to none and sometimes it may results in losses with other scenarios
  3. In my opinion changing to a custom kernel should be considered only if you experience problems or for the sake of science

Cosas por agregar [en construcción]

  1. Additional pacman configuration ( paccache, colors, download packages simultaneously )
  2. Reflector configuration

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment