Primer mirror argentino de Artix Linux

2026/11/01

Categorias: Personal, Tags: Software, Sistema, Linux, Independencia,

O hasta donde sé, no hubo… 👀

banar

Ante todo agradecerle a Juan Zanou ya que me crucé con su post respecto al actual único mirror Argentino de Arch. Vi la posibilidad de hacer el primero pero para Artix, y no dudé en aprovecharla!

Gracias a Tony por la data del pibe Juan!

También un enorme saludo al Caballero de la Antigua República Nous, quién ejecutó y confirmó el agregado.

¿Qué es Artix?

Simple. Es Arch Linux, pero sin el polémico, divisor y repudiable systemd. Ofrece init systems de verdad y no se encama con gente de Microchot. Artix Linux.

Justificaciones contra systemd

No me quiero meter mucho en este tema. Hay muchas publicaciones similares para profundizar en esto, pero para hoy el sitio ya enlazado de Nous basta: acá se argumentan puntos de sobra.

Requerimientos

Teniendo en cuenta que hay una demanda mucho menor de esta distro, puedo quedarme tranquilo por ahora.

Si tenés algo así, bastaría con honores:

cardcase

Vale aclarar que no es así mi caso 😅… Pero ojalá jijijodebu..

Ventajas

Por relativamente poco espacio podés tener disponibilidad de instalar cualquier paquete sin dependencia de internet y con mínima demora de descarga estando localhost o LAN!

Configuración y setup

En mi caso virtualicé un Devuan con QEMU para poder aislar el OS del mirror.

Sincronización

Lista la máquina, puse a sincronizar el repo según indican los muchachos.

Luego, armé el siguiente script aprovechando varios chiches de Juan.

sync_artix_repo:

#!/bin/bash

LOG_FILE="/var/log/sync_artix_repo/sync"
PID_FILE="/var/run/sync_artix_repo.pid"
RSYNC_OPTS="-auvPH --delete-after"
SRC="rsync://ftp.sh.cvut.cz/artix-linux"
DEST="/var/www/mirrors/artix-linux/"

log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] [$$] $*" >> "$LOG_FILE"; }

cleanup() { rm -f "$PID_FILE"; }

if [[ -f "$PID_FILE" ]]; then
    pid_from_file=$(cat "$PID_FILE")
    if kill -0 "$pid_from_file" 2>/dev/null; then
        log "Already syncing under PID: [$pid_from_file]. Exiting!"
        exit 1
    fi
    log "Orphan PID found: [$pid_from_file]. Cleaning!"
    cleanup
fi

echo $$ > "$PID_FILE"
trap cleanup EXIT

log "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
log "Starting repo sync."
log "Source: $SRC"
log "Destination: $DEST"
rsync $RSYNC_OPTS $SRC $DEST 2>&1 | while IFS= read -r line; do
[[ -z "$line" || "$line" =~ ^[[:space:]]+[0-9] ]] && continue # Ignore dirty lines
  log "$line"
done
log "Ending repo sync."
rm "$PID_FILE"

Este es muy simple. Recomiendo ver el suyo que tiene más chequeos interesantes.

Automatización

Para que la tarea corra sola los siguientes cronjobs bastan:

# Log uso de banda ancha cada 10 minutos
10 * * * * root /usr/local/bin/sync_artix_repo_bw

# Sincronizo repo cada 30 minutos
0,30 * * * * root /usr/local/bin/sync_artix_repo

# Roto logs el primer día de cada mes
15 0 * 1 * root /usr/local/bin/sync_artix_repo_log_cleanup

sync_artix_repo_bw:

#!/bin/bash

LOG_FILE="/var/log/sync_artix_repo/bw"


log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] [$$] $*" >> "$LOG_FILE"; }

log "Bandwidth usage for the last 10 minutes."
log "In bytes: "
log "$(echo ''; ip -s link show eth0)"
log "Humanized: "
log "$(echo ''; ip -s -h link show eth0)"
log "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"

sync_artix_repo_log_cleanup:

#!/bin/bash

LOG_DIR="/var/log/sync_artix_repo"
LOG_FILE_REPO="$LOG_DIR/sync"
LOG_FILE_REPO_OLD="$LOG_DIR/sync.old"
LOG_FILE_REPO_BW="$LOG_DIR/bw"
LOG_FILE_REPO_BW_OLD="$LOG_DIR/bw.old"

mv "$LOG_FILE_REPO" "$LOG_FILE_REPO_OLD"
mv "$LOG_FILE_REPO_BW" "$LOG_FILE_REPO_BW_OLD"

Para dejarlo accesible via web y renderizarlo como índice de directorios:

Configuración web

Gracias a Juan por el dato y por ideas de la config

apt install libnginx-mod-http-fancyindex

Configuré el sitio:

Tener en cuenta que esta config contempla fancyindex y certificados SSL válidos. Por mi parte el SSL lo gestiono con certbot.

server {
    server_name artixlinux.adu.ar;
    root /var/www/mirrors/artix-linux;

    server_tokens off;

    listen [::]:443 ssl;
    listen 443 ssl;
    ssl_certificate /etc/letsencrypt/live/artixlinux.adu.ar/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/artixlinux.adu.ar/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location = /header.html {
        root /var/www/mirrors/artix-linux-fancyindex;
    }
    location = /footer.html {
        root /var/www/mirrors/artix-linux-fancyindex;
    }

    location / {
        limit_except GET HEAD {
            deny all;
        }

        try_files $uri $uri/ =404;
        fancyindex on;
        fancyindex_css_href "/css/dark-theme.css";
        fancyindex_exact_size off;
        fancyindex_localtime on;
        fancyindex_directories_first on;

        fancyindex_header "/header.html";
        fancyindex_footer "/footer.html";
    }

    location /css/ {
        alias /var/www/mirrors/artix-linux-fancyindex/css/;
    }
}

server {
    if ($host = artixlinux.adu.ar) {
        return 301 https://$host$request_uri;
    }
    listen [::]:80;
    listen 80;
    server_name artixlinux.adu.ar;
    return 404;
}

Y al índice le di un estilo bonito:

mirrorindex

Exposición a internet

Hasta este punto puede ser utilizado sin más agregados de forma local. Y te digo más, para ello podríamos solo usar HTTP sin certificado y sin fancyindex. O con HTTPS, y sin fancyindex, expuesto a internet para aprovecharlo desde fuera, pero sin gritarlo a los cuatro vientos. En fin, hay muchas posibilidades..

Yo preferí solo exponerlo por HTTPS, con IPv4 y directamente con el mismo nginx de proxy reverso. Para ello primero mantenuve el puerto 80 sin SSL en nginx, para poder certificar el sitio con Let’s Encrypt. Más adelante voy a empezar a renovar vía DNS.

Y por último dejé un cronjob para chequear mensualmente la validez del certificado!

Garantía de disponibilidad

Por ahora no cuento con una UPS ni ISP alternativo para el servidor, pero muy probablemente a futuro sea posible!

En cuanto a la resolución del nombre; contemplo que ante un eventual cambio de IP, sea automáticamente actualizado su registro DNS.

Publicación oficial

Finalmente tras configurar el forward y certificar el sitio, quedó listo para contactar a los caballeros de Artix y sumarlo a la lista pública.

publicmirror >> Inicio