Tabla de Contenidos
Arch Linux
Distribución de Linux ligera y flexible.
Instalación
Completar todos los pasos de la instalación
Grabación de la ISO en un pendrive con dd:
dd bs=4M if=ruta/archlinux.iso of=/dev/sdx status=progress conv=fsync oflag=direct
Donde sdx es el dispositivo donde se escribirá la imagen de Arch Linux. Hay que poner el dispositivo, no la partición, es decir, sdb, no sdb1.
Para saber el nombre del dispositivo USB podemos usar el comando lsblk
El dispositivo USB no debe estar montado.
archinstall
Script para asistir en la instalación de Arch Linux. No es el método recomendado para instalar, pero ayuda mucho.
Una vez arrancada la ISO de Arch Linux, ejecutamos el comando archinstall.
Desde el 01/04/2021 Arch Linux vuelve a tener un instalador
Disposición de teclado en consola
Por defecto, la distribución es la americana, si queremos establecer la española:
loadkeys es
Si tenemos una pantalla de alta resolución o demasiado pequeña, podemos establecer la siguiente fuente para la consola que es mucho mayor de la que viene por defecto:
setfont ter-132b
Conexión a Internet
Verificamos el estado de las interfaces de red con:
ip link
Ejemplo de salida (resumido):
enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 11:de:33:04:06:fc brd ff:ff:ff:ff:ff:ff
Nos fijamos en:
<BROADCAST,MULTICAST,UP,LOWER_UP>
Si aparece UP es que la interfaz está funcionando. Verificamos si tenemos conectividad con Internet:
ping archlinux.org
Actualizando el reloj del sistema
Si tenemos conexión a Internet, el reloj se habrá sincronizado automáticamente. Podemos verificarlo con:
timedatectl
Particionado de discos
Si no existe, creamos un esquema de particionado. Tradicionalmente se usaba MBR, pero hoy en día tiene más sentido algo moderno como GPT (GUID Partition Table) que tiene más ventajas.
Podemos usar fdisk o cfdisk (más cómodo) para crear las particiones. Un ejemplo de particionado podría ser:
- Al menos 300 MiB para ESP (EFI System Partition)
- Más de 512 MiB para la partición de intercambio (swap)
- 227,7 GiB para el sistema
Formato de particiones
Una vez creadas, debemos darle el formato adecuado a cada partición.
- Partición ESP:
mkfs.fat -F 32 /dev/sda1 - Partición linux:
mkfs.ext4 /dev/sda3
En cuanto a la swap, la inicializamos con mkswap /dev/sda2
Montaje del sistema de ficheros
Partición Linux (donde se instalará Arch Linux):
mount /dev/sda3 /mnt
Partición ESP:
mount --mkdir /dev/sda1 /mnt/boot/efi
Activamos la partición para la swap:
swapon /dev/sda2
Instalación de paquetes esenciales
pacstrap -K /mnt base linux linux-firmware networkmanager vim grub efibootmgr
Configuración del sistema
Creamos el fichero fstab:
genfstab -U /mnt >> /mnt/etc/fstab
Podemos revisar el fichero /mnt/etc/fstab a ver si es correcto.
Enjaulamos root:
arch-chroot /mnt
Establecemos nuestra zona horaria. Por ejemplo, para España:
ln -sf /usr/share/zoneinfo/Europe/Madrid /etc/localtime
Generamos el fichero /etc/adjtime:
hwclock --systohc
El comando anterior asume que el reloj de la BIOS está configurado como UTC.
Editamos el fichero /etc/locale.gen y descomentamos (en caso del español) es_ES.UTF-8 UTF-8. Generamos archivos de regionalización:
locale-gen
Creamos el fichero /etc/locale.conf con los valores adecuados:
LANG=es_ES.UTF-8
Establecemos la disposición de teclado para la consola en /etc/vconsole.conf:
KEYMAP=es
En cuanto a la configuración de red, primero creamos el fichero /etc/hostname y ponemos el nombre del equipo, por ejemplo:
arch
Establecemos la contraseña del usuario root:
passwd
Podemos aprovechar a crear un usuario y añadirlo a los grupos habituales:
useradd -m -g users -G wheel,storage,power -s /bin/bash <NOMBRE_USUARIO>
Ponemos contraseña al nuevo usuario:
passwd <NOMBRE_USUARIO>
Para poder tener acceso de administrador en ciertos usuarios, instalamos sudo:
pacman -S sudo
Editamos el fichero /etc/sudoers para descomentar la línea:
# %wheel ALL=(ALL) ALL
Instalamos un gestor de arranque como GRUB:
grub-install /dev/sda --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB
--efi-directoryespecifica dónde hemos montado la partición ESP.
Si estamos en sistemas que usan BIOS (o CSM), la instalación sería:
grub-install --target=i386-pc /dev/sda
Generamos el fichero de configuración de GRUB:
grub-mkconfig -o /boot/grub/grub.cfg
Habilitamos NetworkManager:
systemctl enable NetworkManager
Salimos del entorno chroot con exit y reiniciamos.
Post-instalación
Programas / Aplicaciones
Lo que suelo instalar:
terminus-font base-devel bash-completion xorg-server xorg-xinit xterm rxvt-unicode alacritty git openbox openbox-menu openbox-themes tint2 obconf networkmanager vim sudo fakeroot gmrun htop unzip unrar unp alsa-utils pulseaudio pulseaudio-alsa pavucontrol filezilla openssh mupdf libreoffice-fresh-es setxkbmap numlockx moc-pulse mpv vlc ffmpeg gvfs-smb virtualbox virtualbox-guest-iso virtualbox-ext-oracle virtualbox-host-modules-arch network-manager-applet pnmixer feh udiskie docker docker-compose hwinfo simple-scan nicotine+ brother-dcp-l2530dw brscan5 cups cups-pdf transmission-gtk file-roller pcmanfm torbrowser-launcher qalculate-gtk heidisql wine wine-gecko wine-mono wget gimp inkscape system-config-printer android-tools mtr qtile firefox-i18n-es-es volumeicon nm-applet gnome-themes-extra oblogout-py3-git telegram-desktop ttf-inconsolata ttf-iosevka vim-jellybeans
En el portátil, además de las anteriores, suelo instalar:
xf86-input-libinput xorg-xinput xorg-xbacklight
Sincronizar fecha y hora
Si va a ser en un equipo que no está funcionando todo el tiempo, es recomendable usar chrony:
pacman -S chrony
Editamos la configuración en /etc/chrony.conf:
server 0.pool.ntp.org iburst server 1.pool.ntp.org iburst server 2.pool.ntp.org iburst server 3.pool.ntp.org iburst
Para usar chrony sin nuestra intervención, podemos habilitar el servicio:
systemctl enable chronyd
Si queremos arrancar el servicio sin esperar a reiniciar el equipo:
systemctl start chronyd
A partir de este momento, chrony se encargará de sincronizar automáticamente la fecha y hora del sistema.
Sonido
Hay que activarlo, ya que viene silenciado por defecto. Instalamos alsa-utils para tener disponibles los programas amixer y alsamixer
amixer sset Master unmute amixer sset Speaker unmute amixer sset Headphone unmute
Repositorios
Si queremos instalar programas y bibliotecas para aplicaciones de 32 bits en sistemas de 64 bits, necesitaremos habilitar el repositorio multilib. Editamos el fichero /etc/pacman.conf y descomentamos las líneas:
[multilib] Include = /etc/pacman.d/mirrorlist
TTY y caracteres latinos
Para poder usar y mostrar caracteres como € en una consola real (TTY), editamos el fichero /etc/vconsole.conf y lo dejamos tal que así:
FONT=lat9w-16 KEYMAP=es KEYMAP_TOOGLE=euro2
Administración
Actualizar el sistema
sudo pacman -Syu
Si además quisiéramos forzar la descarga de la base de datos de paquetes del servidor:
sudo pacman -Syyu
pacman
Listar aplicaciones instaladas
Sin mostrar las dependencias:
pacman -Qet
Contar número de paquetes instalados
pacman -Q | wc -l
Gestión de paquetes
AUR
- Clonar repositorio
- Entrar en el directorio
- Ejecutar
makepkg -si
La última orden descargará el código, resolverá las dependencias con pacman, compilará, empaquetará e instalará el paquete.
Yay
sudo pacman -S git
Clonamos el repositorio de yay:
git clone https://aur.archlinux.org/yay.git
Nos metemos en el repositorio descargado, creamos e instalamos el paquete:
cd yay makepkg -si
Para colorear la salida de yay, abrir el fichero /etc/pacman.conf y descomentar la línea que pone #Color.
Mantenimiento
Limpieza
Limpiar caché de paquetes (tanto instalados como no instalados):
sudo pacman -Scc
Eliminar paquetes huérfanos:
sudo pacman -Rns $(pacman -Qtdq)
Limpieza de caché en el directorio personal de usuario:
rm -rf ~/.cache/*
Con du -sh ~/.cache/ podemos ver el tamaño ocupado por el directorio de caché en la carpeta personal del usuario actual.
Limpiar el journal de Systemd:
sudo journalctl --vacuum-size=50M
Con el comando anterior, mantendríamos solo 50 M de ficheros de registro (/var/log/journal)
Resolución de problemas
dmesg no permitido
Desde la versión 5.10.4, se ha habilitado SECURITY_DMESG_RESTRICT que impide el uso de dmesg para usuarios sin privilegios. Para obtener un resultado similar a dmesg, pero sin necesidad de permisos especiales, podemos usar journalctl de la siguiente manera:
journalctl -ko short-monotonic --no-hostname
- kernel config protects dmesg ... which group membership allows access (foro Arch Linux)
Error cargando kernel
Al intentar cargar el sistema, tras pasar del GRUB:
(...) loading /boot/vmlinuz-linux not found.
La solución pasa por arrancar desde un medio de instalación de Arch Linux y:
# Montamos la partición donde esté instalado el sistema (/dev/sda1, por ejemplo): mount /dev/X /mnt # Si tuviésemos el directorio /boot en una partición aparte: # mount /dev/Y /mnt/boot arch-chroot /mnt pacman -S linux pacman -S mkinitcpio
Y luego reiniciamos.
- [SOLVED] Vmlinuz-linux not found after kernel update (Arch Linux forums)
Problemas con yay
Lo más sencillo es eliminar y volver a instalar desde el repositorio git.
Primero desinstalamos el yay que tengamos en el sistema:
pacman -Rnsc yay
Clonamos el repositorio git:
git clone https://aur.archlinux.org/yay.git
Entramos en el directorio recién creado:
cd yay
Creamos el paquete:
makepkg
Instalamos el paquete:
sudo pacman -U yay-xxxxxx.pkg.tar.xz
Los dos últimos pasos se podrían hacer en un único comando: makepgk -si
Problemas con las firmas de los paquetes
Ejemplo:
error: python-orjson: la firma de «David Runge <dvzrv@archlinux.org>» es de confianza mínima :: El archivo /var/cache/pacman/pkg/python-orjson-3.7.8-1-x86_64.pkg.tar.zst está dañado (paquete no válido o dañado (firma PGP)). ¿Quiere eliminarlo? [S/n]
Esto se debe a que las claves que tenemos de los desarrolladores no están actualizadas. Podemos actualizarlas de dos maneras:
Actualizar el paquete archlinux-keyring:
sudo pacman -S archlinux-keyring
Otra opción es:
# pacman-key --refresh-keys
Última alternativa para volver a generar claves de cero:
# Eliminamos el directorio que contiene todas las claves: sudo rm -rf /etc/pacman.d/gnupg # Ejecutamos: pacman-key --init # Ejecutamos: pacman-key --populate
Instalar o reinstalar GRUB
Esto no es propio de Arch Linux, pero usaremos la ISO de Arch para hacer todo el proceso.
Estas instrucciones están centradas en sistemas que soportan UEFI.
Primero, grabamos la ISO de Arch Linux y arrancamos el sistema con el GRUB a reparar.
Ya desde la ISO de Arch Linux, montamos la partición en la que esté un sistema Linux. Por ejemplo, si está en /dev/sda2:
mount /dev/sda2 /mnt
Identificamos dónde está instalada la partición EFI. Por ejemplo, podemos usar fdisk:
fdisk -l /dev/sda
La partición que sea de tipo EFI System o EFI es la que nos interesa. Para verificarlo, montamos esa partición:
mount /dev/sda1 /mnt/boot/efi
Si tiene un directorio llamado EFI, se trata efectivamente de ESP (EFI System Partition).
Montamos la partición raíz, por ejemplo, si la tenemos en /dev/sda3:
mount /dev/sda3 /mnt
Entramos en modo chroot:
arch-chroot /mnt
Instalamos los paquetes necesarios:
pacman -S grub efibootmgr os-prober
Si no tenemos otro sistema operativo instalado, podemos obviar os-prober
Instalamos GRUB:
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB
Editamos el fichero /etc/default/grub para descomentar (si no lo estuviera) la línea:
#GRUB_DISABLE_OS_PROBER=false
Si no lo hacemos, os-prober no se ejecutará y no buscará otros sistemas operativos instalados para crear las entradas correspondientes en la configuración de GRUB.
Generamos el fichero de configuración de GRUB:
grub-mkconfig -o /boot/grub/grub.cfg
Reiniciamos:
reboot
No se pudo bloquear la base de datos
Cuando pacman va a tocar la base de datos de paquetes, por ejemplo cuando va a instalar un paquete, crea un fichero de bloqueo en /var/lib/pacman/db.lck. Esto previene que otra instancia de pacman modifique la base de datos al mismo tiempo.
Si por alguna circunstancia este fichero existe y estamos seguros de que no hay ninguna instancia de pacman en ejecución, podemos borrar el fichero:
rm /var/lib/pacman/db.lck
No se pudo descargar community.db
Al tratar de actualizar repositorios, obtenemos un error similar a:
:: Sincronizando las bases de datos de los paquetes... core está actualizado extra está actualizado no se pudo descargar community.db error: no se pudo obtener el archivo «community.db» desde es.mirrors.cicku.me: The requested URL returned error: 404 error: no se pudo obtener el archivo «community.db» desde es.mirrors.cicku.me: The requested URL returned error: 404 error: no se pudo obtener el archivo «community.db» desde mirror.cloroformo.org: SSL certificate problem: self-signed certificate error: no se pudo obtener el archivo «community.db» desde mirror.librelabucm.org: The requested URL returned error: 530 error: no se pudo obtener el archivo «community.db» desde mirror.librelabucm.org: The requested URL returned error: 530 error: no se pudo obtener el archivo «community.db» desde mirrors.marquitos.space: Connection timed out after 10001 milliseconds error: no se pudo obtener el archivo «community.db» desde mirrors.marquitos.space: Connection timed out after 10000 milliseconds error: no se pudo obtener el archivo «community.db» desde nox.panibrez.com: Connection timed out after 10002 milliseconds error: no se pudo obtener el archivo «community.db» desde mirror.raiolanetworks.com: The requested URL returned error: 404 error: no se pudo obtener el archivo «community.db» desde mirror.raiolanetworks.com: The requested URL returned error: 404 error: no se pudo obtener el archivo «community.db» desde ftp.rediris.es: The requested URL returned error: 404 error: no se han podido sincronizar todas las bases de datos (no se pudieron descargar algunos archivos) -> error refrescando las bases de datos - exit status 1
La explicación es que hace unos años se fusionó el repositorio [community] con [extra].
La solución es eliminar los siguientes repositorios del fichero /etc/pacman.conf:
[community][community-testing][testing][testing-debug][staging][staging-debug]
Configuración
Navegador por defecto
Esto solo sirve para el entorno gráfico.
Podemos ver si hay alguno establecido por defecto:
xdg-settings get default-web-browser
Si queremos poner Firefox como navegador por defecto:
xdg-settings set default-web-browser firefox.desktop
