Introducción
En este artículo, instalaremos un sistema básico de Arch Linux en un servidor que ejecuta un sistema operativo desde RAM o una ISO en vivo. Mientras no se utilicen los discos, cualquier distribución de Linux funcionará. Para este tutorial, usaré un servidor Hetzner Cloud arrancado con Rescue System.
Información importante
Este tutorial requiere la ejecución de comandos en diferentes entornos chroot. Esto nos permite redirigir nuestro directorio raíz aparente a una nueva ubicación y ejecutar comandos como si hubiéramos arrancado el sistema.
Te notificaré cuando cambiemos a una nueva raíz. También usaré el texto del aviso para mostrar en qué entorno chroot nos encontramos.
- raíz@rescate ~ # Muestra un comando que se ejecuta sin chroot.
- [root@bootstrap /]# Estará dentro del entorno Bootstrap.
- [root@chroot /]# Dentro de la instalación de Arch Linux en el disco
Paso 1: Configuración del entorno Bootstrap
Comenzaremos descargando la imagen de arranque actual desde un servidor espejo de Arch Linux de confianza. Esto nos proporcionará las herramientas necesarias para instalar Arch. De paso, también descargaremos la firma correspondiente y verificaremos la imagen antes de continuar con la instalación.
root@rescue ~ # curl -LO 'https://geo.mirror.pkgbuild.com/iso/latest/archlinux-bootstrap-x86_64.tar.zst'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 164M 100 164M 0 0 115M 0 0:00:01 0:00:01 --:--:-- 115Mroot@rescue ~ # curl -LO 'https://archlinux.org/iso/latest/archlinux-bootstrap-x86_64.tar.zst.sig'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 331 100 331 0 0 4728 0 --:--:-- --:--:-- --:--:-- 4728root@rescue ~ # gpg --keyserver keyserver.ubuntu.com --keyserver-options auto-key-retrieve --verify archlinux-bootstrap-x86_64.tar.zst.sig
gpg: Signature made Sun 01 Sep 2024 02:43:27 PM CEST
gpg: using EDDSA key 3E80CA1A8B89F69CBA57D98A76A5EF9054449A5C
gpg: issuer "[email protected]"
gpg: key 7F2D434B9741E8AC: public key "Pierre Schmitz <[email protected]>" imported
gpg: key 76A5EF9054449A5C: public key "Pierre Schmitz <[email protected]>" imported
gpg: Total number processed: 2
gpg: imported: 2
gpg: no ultimately trusted keys found
gpg: Good signature from "Pierre Schmitz <[email protected]>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 3E80 CA1A 8B89 F69C BA57 D98A 76A5 EF90 5444 9A5CCuando no se produzcan errores, podemos proceder a descomprimir la imagen.
root@rescue ~ # tar xf archlinux-bootstrap-x86_64.tar.zst
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.security.capability'
tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.security.capability'Tras la extracción, necesitamos montar el directorio en nosotros mismos. Esto se hace para que PackStrap no piense que no queda espacio en este dispositivo.
root@rescue ~ # mount --bind root.x86_64 root.x86_64
Paso 2: Crear un disco de arranque e instalar Arch Linux
De ahora en adelante, debemos trabajar desde el entorno de arranque que acabamos de configurar. Para ello, usamos arch-chroot.
root@rescue ~ # ./root.x86_64/usr/bin/arch-chroot root.x86_64
Primero necesitamos particionar nuestro disco. Usaré gdisk, pero también puedes usar cualquier otra herramienta de particionado compatible con GPT. Sin embargo, gdisk no está instalado en la imagen de arranque. Para ello, primero debemos configurar un espejo y configurar la clave pacman, y luego instalar gdisk:
[root@bootstrap /]# echo 'Server = https://geo.mirror.pkgbuild.com/$repo/os/$arch' > /etc/pacman.d/mirrorlist
[root@bootstrap /]# pacman-key --init
gpg: /etc/pacman.d/gnupg/trustdb.gpg: trustdb created
gpg: no ultimately trusted keys found
gpg: starting migration from earlier GnuPG versions
gpg: porting secret keys from '/etc/pacman.d/gnupg/secring.gpg' to gpg-agent
gpg: migration succeeded
==> Generating pacman master key. This may take some time.
gpg: Generating pacman keyring master key...
gpg: directory '/etc/pacman.d/gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/etc/pacman.d/gnupg/openpgp-revocs.d/AFB2F3A83C28CC51C20E0752282AC1A0C5C2A266.rev'
gpg: Done
==> Updating trust database...
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u[root@bootstrap /]# pacman-key --populate archlinux
==> Appending keys from archlinux.gpg...
==> Locally signing trusted keys in keyring...
-> Locally signed 5 keys.
==> Importing owner trust values...
gpg: setting ownertrust to 4
gpg: setting ownertrust to 4
gpg: setting ownertrust to 4
gpg: inserting ownertrust of 4
gpg: setting ownertrust to 4
==> Disabling revoked keys in keyring...
-> Disabled 45 keys.
==> Updating trust database...
gpg: Note: third-party key signatures using the SHA1 algorithm are rejected
gpg: (use option "--allow-weak-key-signatures" to override)
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: depth: 0 valid: 1 signed: 5 trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: depth: 1 valid: 5 signed: 101 trust: 0-, 0q, 0n, 5m, 0f, 0u
gpg: depth: 2 valid: 77 signed: 22 trust: 77-, 0q, 0n, 0m, 0f, 0u
gpg: next trustdb check due at 2024-11-09[root@bootstrap /]# pacman --noconfirm -Sy gdisk
Ahora podemos proceder a particionar nuestro disco. Los servidores en la nube de Hetzner se entregan con un solo disco conectado, llamado /dev/sda. El nombre de su disco puede ser diferente, así que asegúrese de ajustar el comando según corresponda. Tenga en cuenta que esto eliminará todas las particiones y, por lo tanto, inutilizará los datos que contenga.
Nuestra partición es muy sencilla. Como mínimo, necesitamos una partición de arranque (de 1 MB) y una partición raíz (el resto del disco en nuestro caso).
[root@bootstrap /]# gdisk /dev/sda
GPT fdisk (gdisk) version 1.0.10
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): y
Command (? for help): n
Partition number (1-128, default 1):
First sector (34-40001502, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-40001502, default = 39999487) or {+-}size{KMGTP}: +1M
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): ef02
Changed type of partition to 'BIOS boot partition'
Command (? for help): n
Partition number (2-128, default 2):
First sector (34-40001502, default = 4096) or {+-}size{KMGTP}:
Last sector (4096-40001502, default = 39999487) or {+-}size{KMGTP}:
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'
Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sda.
The operation has completed successfully.Luego formateamos nuestra partición raíz con el sistema de archivos ext4:
[root@bootstrap /]# mkfs.ext4 /dev/sda2
mke2fs 1.47.1 (20-May-2024)
/dev/sda2 contains a vfat file system
Proceed anyway? (y,N) y
Discarding device blocks: done
Creating filesystem with 4999424 4k blocks and 1250928 inodes
Filesystem UUID: c14d23b8-5754-49bc-bc27-d1cb48bd76e3
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: doneLuego lo montamos en /mnt y generamos nuestro fstab a partir de él:
[root@bootstrap /]# mount /dev/sda2 /mnt
[root@bootstrap /]# genfstab -U /mnt >> /etc/fstabAhora podemos instalar Arch Linux mediante pacstrap. Aprovecharemos esta oportunidad para instalar OpenSSH, ya que lo necesitaremos más adelante para conectarnos a nuestro servidor. Esto puede tardar un poco dependiendo de la velocidad de tu conexión a internet y del disco duro.
[root@bootstrap /]# pacstrap -G -M /mnt base grub linux linux-firmware openssh
==> Creating install root at /mnt
==> Installing packages to /mnt
:: Synchronizing package databases...
core 117.2 KiB 514 KiB/s 00:00 [########################################] 100% extra 7.4 MiB 37.0 MiB/s 00:00 [########################################] 100%resolving dependencies...
:: There are 2 providers available for libxtables.so=12-64:
:: Repository core
1) iptables 2) iptables-nft
Enter a number (default=1):
:: There are 3 providers available for initramfs:
:: Repository core
1) mkinitcpio
:: Repository extra
2) booster 3) dracut
Enter a number (default=1):
looking for conflicting packages...
[...]
Total Download Size: 520.45 MiB
Total Installed Size: 992.49 MiB
[...]
(13/13) Reloading system bus configuration...
Skipped: Running in chroot.Paso 3: Instalación final de Arch Linux
Ahora podemos salir del entorno de arranque y cambiar la raíz al sistema instalado para finalizar el arranque:
[root@bootstrap /]# exit
root@rescue ~ # ./root.x86_64/usr/bin/arch-chroot root.x86_64/mntComenzamos nuevamente configurando un espejo e inicializando la clave pacman:
[root@chroot /]# echo 'Server = https://geo.mirror.pkgbuild.com/$repo/os/$arch' > /etc/pacman.d/mirrorlist
[root@chroot /]# pacman-key --init
[root@chroot /]# pacman-key --populate archlinuxAhora es el momento de instalar el gestor de arranque en su unidad.
[root@chroot /]# grub-install /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.
[root@chroot /]# grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-linux
Found initrd image: /boot/initramfs-linux.img
Found fallback initrd image(s) in /boot: initramfs-linux-fallback.img
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
Adding boot menu entry for UEFI Firmware Settings ...
doneLa red será administrada por systemd-networkd. Para habilitarla, necesitamos crear el archivo /etc/systemd/network/ether.network con el siguiente contenido:
cat << EOF > /etc/systemd/network/ether.network
[Match]
Type=ether
[Network]
DHCP=yes
EOFEsto configura todas las interfaces de red Ethernet para DHCP.
Ahora habilitamos los servicios requeridos:
[root@chroot /]# systemctl enable systemd-networkd
Created symlink '/etc/systemd/system/dbus-org.freedesktop.network1.service' → '/usr/lib/systemd/system/systemd-networkd.service'.
Created symlink '/etc/systemd/system/multi-user.target.wants/systemd-networkd.service' → '/usr/lib/systemd/system/systemd-networkd.service'.
Created symlink '/etc/systemd/system/sockets.target.wants/systemd-networkd.socket' → '/usr/lib/systemd/system/systemd-networkd.socket'.
Created symlink '/etc/systemd/system/sysinit.target.wants/systemd-network-generator.service' → '/usr/lib/systemd/system/systemd-network-generator.service'.
Created symlink '/etc/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service' → '/usr/lib/systemd/system/systemd-networkd-wait-online.service'.
[root@chroot /]# systemctl enable systemd-resolved
Created symlink '/etc/systemd/system/dbus-org.freedesktop.resolve1.service' → '/usr/lib/systemd/system/systemd-resolved.service'.
Created symlink '/etc/systemd/system/sysinit.target.wants/systemd-resolved.service' → '/usr/lib/systemd/system/systemd-resolved.service'.Finalmente, queremos acceder a nuestro sistema por SSH. Para ello, simplemente crea un archivo de claves autorizadas en /root/.ssh/authorized_keys y escribe allí tu clave SSH pública. No olvides habilitar sshd; de lo contrario, el servidor SSH no se iniciará tras reiniciar.
[root@chroot /]# mkdir /root/.ssh
[root@chroot /]# echo "<your-ssh-pub-key>" >> /root/.ssh/authorized_keys
[root@chroot /]# systemctl enable sshd
Created symlink '/etc/systemd/system/multi-user.target.wants/sshd.service' → '/usr/lib/systemd/system/sshd.service'.Ahora podemos salir del entorno chroot y reiniciar el sistema. Tras unos segundos, su servidor debería estar funcionando en su Arch Linux recién instalado y accesible por SSH en el puerto 22 con su clave pública.
Resultado
¡Felicitaciones! Ya tienes una instalación mínima de Arch Linux en tu servidor. Desde aquí puedes empezar a instalar servicios adicionales como Docker, nginx, K8S, etc.









