Published on

Aptly: crea e gestisci un repository APT self-hosted per distribuire pacchetti Debian

Authors
  • avatar
    Name
    Alessandro Iannacone
    Twitter

Introduzione

Distribuire applicazioni interne sotto forma di pacchetti .deb è una pratica solida in ambienti Linux, soprattutto in contesti DevOps e infrastrutturali. Tuttavia, affidarsi a repository esterni o a soluzioni improvvisate (come un server HTTP con una directory di pacchetti) introduce rapidamente problemi di sicurezza, versioning e governance.

Aptly risolve questo problema permettendo di creare e gestire un repository APT self-hosted, completo di snapshot, signing GPG e pubblicazione controllata.

In questo articolo vedremo cos'è Aptly, come installarlo, come configurarlo e come usarlo per distribuire pacchetti .deb, con un esempio pratico.


Cosa otterrai da questa guida

  • Un repository APT self-hosted pronto all'uso
  • Snapshot firmati per release riproducibili
  • Pubblicazione via HTTP con Nginx
  • Client Debian configurati in modo sicuro (senza apt-key)

Cos'è Aptly

Aptly è uno strumento open-source progettato per:

  • gestire repository APT locali
  • importare pacchetti .deb
  • creare snapshot immutabili
  • pubblicare repository firmati
  • sincronizzare mirror di repository esterni

È pensato per ambienti:

  • enterprise
  • CI/CD
  • infrastrutture self-hosted
  • distribuzione di software interno

Perché usare Aptly

I principali vantaggi di Aptly sono:

  • Controllo totale sulle versioni distribuite
  • Snapshot immutabili per rollback sicuri
  • Firma GPG dei repository
  • Distribuzione coerente su più server
  • Nessuna dipendenza da servizi esterni

È particolarmente indicato quando:

  • distribuisci software interno
  • gestisci più ambienti (dev, staging, prod)
  • vuoi riproducibilità e auditabilità

Installazione di Aptly

Prerequisiti

  • Debian / Ubuntu
  • Accesso root o sudo
  • GPG installato

Installazione

apt update
apt install -y aptly gnupg

Verifica:

aptly version

Configurazione iniziale

Il file di configurazione principale è:

~/.aptly.conf

Esempio minimale:

{
  "rootDir": "/opt/aptly",
  "downloadConcurrency": 4,
  "architectures": ["amd64"],
  "dependencyFollowSuggests": false,
  "dependencyFollowRecommends": false,
  "dependencyFollowAllVariants": false
}

Crea la directory root:

mkdir -p /opt/aptly

Creare un repository locale

Creiamo un repository chiamato internal-apps:

aptly repo create \
  -distribution=stable \
  -component=main \
  internal-apps

Verifica:

aptly repo list

Esempio: aggiungere pacchetti .deb

Supponiamo di avere un pacchetto interno:

myapp_1.0.0_amd64.deb

Aggiungiamolo al repository:

aptly repo add internal-apps myapp_1.0.0_amd64.deb

Controlla il contenuto:

aptly repo show internal-apps

Snapshot: versioning e rollback

Uno dei punti di forza di Aptly è l'uso degli snapshot.

Creiamo uno snapshot:

aptly snapshot create internal-apps-1.0.0 from repo internal-apps

Gli snapshot sono immutabili, perfetti per:

  • promozione tra ambienti
  • rollback immediato
  • audit delle versioni

Pubblicare il repository

Creare una chiave GPG

gpg --full-generate-key

Esporta la chiave pubblica:

gpg --armor --export [email protected] > public.key

Pubblicazione

aptly publish snapshot \
  -distribution=stable \
  -component=main \
  internal-apps-1.0.0

Aptly genererà una struttura APT completa.


Esporre il repository via HTTP

Il modo più semplice è usare Nginx.

Esempio di configurazione:

server {
  listen 80;
  server_name repo.example.local;

  root /opt/aptly/public;

  location / {
    autoindex on;
  }
}

Riavvia Nginx:

systemctl reload nginx

Configurare i client Debian

Sui server client:

curl -fsSL http://repo.example.local/public.key | gpg --dearmor | sudo tee /usr/share/keyrings/internal-repo.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/internal-repo.gpg] http://repo.example.local stable main" | sudo tee /etc/apt/sources.list.d/internal.list

Nota: apt-key è deprecato; l'uso di signed-by è la modalità consigliata.

Aggiorna:

apt update
apt install myapp

Integrazione con CI/CD

Aptly si integra perfettamente con pipeline CI:

  • build pacchetto .deb
  • upload artefatto
  • aptly repo add
  • snapshot
  • publish

Questo garantisce una supply chain controllata e riduce il rischio di pacchetti non verificati.


Best practice

  • Usa snapshot per ogni release
  • Non pubblicare mai direttamente i repo live
  • Firma sempre i repository
  • Separa ambienti (dev / staging / prod)
  • Versiona la configurazione Aptly

Conclusioni

Aptly è uno strumento estremamente potente per chi vuole distribuire software Debian in modo professionale, sicuro e riproducibile.

In ambienti self-hosted, DevOps e enterprise, rappresenta una soluzione solida per costruire una supply chain affidabile, evitando workaround fragili e repository improvvisati.

Nel prossimo articolo potremo approfondire:

  • promozione snapshot tra ambienti
  • gestione multi-architettura
  • hardening del repository
  • integrazione con GPG smartcard o HSM

Per una consulenza o una verifica della tua situazione:

Contattami qui