====== 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]]