====== Arch Linux ======
Distribución de [[..:linux|Linux]] ligera y flexible.
* [[https://www.archlinux.org/|Web oficial]]
* [[https://status.archlinux.org/|Página de estado de los servicios]]
* [[https://wiki.archlinux.org/|Wiki]]
===== Instalación =====
Completar todos los pasos de la instalación
[[https://www.archlinux.org/download/|Descargar la ISO]]
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''.
* [[https://wiki.archlinux.org/title/archinstall|Más info]]
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: 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:
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
Ponemos contraseña al nuevo usuario:
passwd
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-directory'' especifica 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.
* [[https://wiki.archlinux.org/index.php/installation_guide|Guía de instalación oficial]]
===== 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
* [[https://bbs.archlinux.org/viewtopic.php?id=262222|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.
* [[https://bbs.archlinux.org/viewtopic.php?id=250486|[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 » 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 [[https://archlinux.org/news/cleaning-up-old-repositories/|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
====== Recursos ======
* [[https://wiki.archlinux.org|Wiki oficial de Arch Linux]] (ojalá todas fueran así)
* [[https://averagelinuxuser.com/clean-arch-linux/|How to clean Arch Linux]]
* [[http://www.franaramayo.com/instalar-arch-linux-kde-plasma-en-2020/|Instalar Arch linux con kde plasma en 2020]]
* [[https://wiki.archlinux.org/title/List_of_applications|Lista de aplicaciones para Arch Linux]]