Il sistema operativo fatto da volontari da cui discendono metà delle distro che usi ogni giorno. APT, rilasci, pinning, debconf e il progetto che sta dietro allo swirl rosso.
"It's the software you use." — non è lo slogan ufficiale, ma se hai usato Ubuntu, Kali, Proxmox VE o un Raspberry Pi, hai già usato Debian senza saperlo.
Non è una startup, non ha un CEO, non vende supporto enterprise come RedHat. È un progetto di volontari con una costituzione scritta, e funziona da oltre 30 anni.
Debian nasce nell'agosto 1993, annunciato da Ian Murdock quando era ancora studente. Il nome è la fusione tra il suo nome e quello della fidanzata (poi moglie) Debra: Deb+Ian = Debian. L'idea era radicale per l'epoca: una distribuzione mantenuta apertamente da una comunità di sviluppatori, non da un'azienda o da una singola persona, con un processo decisionale scritto e pubblico invece che un fork estemporaneo di qualcun altro.
Se Ubuntu è una libreria ben organizzata gestita da un'azienda (Canonical) che decide cosa mettere in vetrina e quando, Debian è più simile a una biblioteca pubblica gestita da bibliotecari volontari: nessuno spinge un prodotto, le regole su cosa entra nello scaffale sono scritte in un documento pubblico (le DFSG, sotto), e chiunque può candidarsi a diventare bibliotecario seguendo un processo formale. È più lenta a volte, ma le decisioni non cambiano a seconda di chi ha comprato l'azienda quest'anno.
Il Debian Social Contract è la "costituzione" del progetto: promette che Debian resterà sempre 100% software libero, che i bug non verranno mai nascosti, e che il progetto lavora per i suoi utenti e la comunità free software. Le Debian Free Software Guidelines (DFSG) sono i criteri tecnici che un pacchetto deve rispettare per stare in main: libertà di ridistribuzione, codice sorgente disponibile, nessuna discriminazione contro persone o campi d'uso. Sono anche, storicamente, la base della Open Source Definition.
Debian gira ufficialmente su una quantità di architetture CPU che nessun'altra distro maggiore copre: amd64, arm64, armhf, i386, mips64el, ppc64el, riscv64, s390x e altre ancora in porting non ufficiale. Non è un dettaglio da nerd: significa che lo stesso know-how su APT e i pacchetti Debian funziona da un Raspberry Pi a un mainframe IBM, senza dover reimparare nulla.
| Derivata | Cosa aggiunge |
|---|---|
| Ubuntu | Cicli di rilascio più brevi, supporto commerciale Canonical, più driver proprietari "pronti all'uso" |
| Kali Linux | Distro per penetration testing, basata su Debian testing con tool di sicurezza preinstallati |
| Proxmox VE | Hypervisor KVM/LXC costruito sopra Debian stable (vedi la guida Proxmox) |
| Raspberry Pi OS | Debian ottimizzato per l'hardware ARM del Raspberry Pi |
| Tails | Live OS orientato alla privacy, basato su Debian (vedi la guida Privacy) |
| MX Linux, deepin, antiX... | Decine di altre derivate desktop-oriented |
Quattro rami paralleli, ognuno con uno scopo preciso, e nomi presi tutti da Toy Story. Sì, anche quello ha una ragione.
sid non è un nome come gli altri
Tutti i nomi dei rilasci vengono da Toy Story: bookworm, trixie, forky (l'attuale testing) sono personaggi del film. sid però è diverso: era il bambino vicino di casa che rompeva i giocattoli, e "Still In Development" è il backronym perfetto — sid non diventa mai stable, resta per sempre il ramo instabile permanente. È la tradizione avviata nei primi anni '90 da Bruce Perens, allora Debian Project Leader, e nessuno l'ha mai cambiata.
Debian non ha un calendario fisso rigido come Ubuntu (ogni 6 mesi), ma un ciclo "quando è pronto" che in pratica dura circa 2 anni. A un certo punto testing entra in freeze: niente più nuove feature, solo bugfix, finché la qualità non è sufficiente per diventare la nuova stable. È un processo lento ma è il motivo per cui "Debian stable" ha una reputazione di solidità quasi proverbiale.
Debian può installarsi in tre modi molto diversi, e la scelta cambia parecchio cosa ti ritrovi al primo boot.
~700 MB, scarica tutto da rete durante l'installazione. La scelta più comune per server.
Contiene migliaia di pacchetti offline. Utile senza connessione affidabile.
Provalo prima di installarlo, con o senza ambiente desktop già pronto.
Durante l'installazione (o dopo, con tasksel) puoi scegliere dei task: gruppi predefiniti di pacchetti come "Desktop environment", "SSH server", "Web server". Per un server minimale, la scelta più comune è deselezionare tutto tranne "standard system utilities" e installare solo quello che serve dopo, a mano.
sudo tasksel # interfaccia a menu
tasksel --list-tasks # vedi i task disponibili
sudo tasksel install ssh-server
sudo: devi loggarti come root (se hai impostato una password root in installazione) oppure fare su - e aggiungerti tu stesso con usermod -aG sudo tuoutente, poi rifare login. Le installazioni più recenti con l'installer grafico spesso lo chiedono esplicitamente, ma su un netinst minimale in modalità testuale è ancora la sorpresa classica del primo giorno.
Un Debian appena installato in modalità "standard" è volutamente scarno: niente firewall attivo di default, niente editor oltre a nano/vi, spesso nemmeno curl o htop. È una scelta filosofica, non una dimenticanza: Debian preferisce darti un sistema pulito su cui costruisci esattamente quello che ti serve, invece di un sistema pieno di cose che poi devi rimuovere.
Se impari un solo strumento su Debian, è questo. Tutto il resto — installare, aggiornare, rimuovere software — passa da qui.
apt (dal 2014 circa) è il comando pensato per l'uso interattivo: output colorato, barra di progresso, sintassi semplificata. apt-get/apt-cache sono i comandi storici, più verbosi ma con un'interfaccia stabile pensata per gli script (non cambia mai tra versioni, a differenza di apt). aptitude è un frontend alternativo con un risolutore di dipendenze diverso, utile nei conflitti più ostici.
La lista dei repository vive in /etc/apt/sources.list e nei file .list (o dal 2023 in poi, formato .sources "deb822") dentro /etc/apt/sources.list.d/. Ogni riga dice: da quale URL, quale distribuzione (bookworm, trixie...) e quali componenti (main, contrib...).
# Aggiorna la lista dei pacchetti disponibili (NON installa nulla)
sudo apt update
# Aggiorna i pacchetti installati, senza rimuovere nulla
sudo apt upgrade
# Come upgrade, ma puo' installare/rimuovere pacchetti se serve per risolvere dipendenze
sudo apt full-upgrade
# Installa / rimuove / rimuove con configurazione
sudo apt install nginx
sudo apt remove nginx # lascia i file di config in /etc
sudo apt purge nginx # rimuove anche la config
# Pulizia: pacchetti installati come dipendenza e non piu' necessari
sudo apt autoremove
# Cerca e ispeziona
apt search nginx
apt show nginx
apt list --installed
apt list --upgradable
apt-get/apt-cache (interfaccia stabile, mai cambiata). Se stai digitando a mano nel terminale, apt è più comodo e leggibile.
APT non installa nulla da solo: risolve le dipendenze, scarica i file, e poi passa la palla a dpkg, che fa il lavoro sporco vero e proprio.
dpkg è il magazziniere: sa come spacchettare un .deb, dove mettere ogni file, come registrare cosa è installato in /var/lib/dpkg/status. Non sa niente di Internet, non scarica nulla, e soprattutto non risolve le dipendenze da solo — se gli dai un pacchetto che ne richiede altri non installati, si ferma e si lamenta. apt è il gestore degli ordini: parla con i repository via rete, calcola quali pacchetti servono per soddisfare le dipendenze, li scarica, e poi passa tutto a dpkg uno alla volta.
# Elenca tutti i pacchetti installati
dpkg -l | less
dpkg -l | grep nginx
# Quali file appartengono a un pacchetto
dpkg -L nginx-common
# A quale pacchetto appartiene QUESTO file
dpkg -S /etc/nginx/nginx.conf
# Installa un .deb scaricato a mano (NON risolve dipendenze mancanti da solo!)
sudo dpkg -i pacchetto.deb
sudo apt --fix-broken install # risolve le dipendenze rimaste a meta'
.deb da zero (debhelper, control file, changelog, repository APT firmati) è il territorio della guida Pacchetti .deb: qui l'obiettivo era solo capire la divisione dei ruoli tra apt e dpkg.
Non tutti i pacchetti in un repository Debian sono uguali: alcuni sono "puri" software libero, altri no, e la distinzione è presa sul serio.
| Componente | Contiene |
|---|---|
| main | Software che rispetta al 100% le DFSG. L'unico componente abilitato di default, l'unico "vero Debian" |
| contrib | Software libero (DFSG-compliant) ma che dipende da software non libero per funzionare |
| non-free | Software che non rispetta le DFSG: licenze restrittive, uso limitato, ecc. |
| non-free-firmware | Firmware proprietario per hardware (WiFi, GPU...), separato da non-free dal 2023 (Debian 12) proprio per rendere esplicita la scelta di installarlo |
non-free-firmware a sources.list (l'installer moderno spesso lo offre già come opzione esplicita durante il setup, con tanto di avviso).
Gli aggiornamenti di sicurezza per stable non arrivano dal repository normale, ma da uno dedicato: bookworm-security, trixie-security. Deve sempre essere presente in sources.list — toglierlo (anche per errore) significa perdere silenziosamente le patch di sicurezza.
Il repository trixie-backports ricompila pacchetti più recenti (di solito da testing) per farli girare su stable, per chi vuole una versione più nuova di un pacchetto specifico senza passare tutto il sistema a testing. Va abilitato esplicitamente e usato con il pinning (cap. 7), non come repository di default.
deb http://deb.debian.org/debian trixie main contrib non-free-firmware
deb http://deb.debian.org/debian trixie-updates main contrib non-free-firmware
deb http://security.debian.org/debian-security trixie-security main contrib non-free-firmware
deb http://deb.debian.org/debian trixie-backports main contrib non-free-firmware
A volte vuoi restare su stable ma con UN pacchetto più recente da backports o testing. Il pinning è lo strumento per farlo senza far collassare tutto il sistema.
APT assegna a ogni pacchetto disponibile una priorità in base a da dove viene (stable, backports, testing...). Di default, stable ha priorità alta e gli altri rami priorità bassa: anche se abiliti backports nel sources.list, APT non installerà automaticamente la versione più recente da lì a meno che non gliela chiedi esplicitamente. Il pinning ti permette di alzare la priorità di un repository specifico, per un pacchetto specifico.
# -t indica il target release SOLO per questa installazione
sudo apt install -t trixie-backports linux-image-amd64
Package: *
Pin: release a=trixie-backports
Pin-Priority: 100
# priorita' di riferimento (apt_preferences(5)):
# >1000 installa anche se e' un downgrade
# 990 e' il default della release "target" (stable)
# 500 default per un repository generico gia' abilitato
# 100 installato SOLO se lo chiedi esplicitamente (-t / apt install pkg/release)
# <0 non verra' mai installato
apt-cache policy nomepacchetto da quale repository verrebbe installato un pacchetto prima di lanciare l'install: ti mostra tutte le versioni disponibili e le rispettive priorità, così non hai sorprese.
Debian ha le sue convenzioni per configurare pacchetti in modo interattivo e per gestire "quale programma fa cosa" quando ce n'è più di uno disponibile.
debconf è il sistema che fa le domande durante l'installazione di un pacchetto (es. "quale timezone?", "password di MySQL?"). Le risposte vengono salvate in un database, e puoi rifare la configurazione in qualsiasi momento senza reinstallare.
sudo dpkg-reconfigure tzdata
sudo dpkg-reconfigure locales
sudo debconf-show nomepacchetto
Quando più pacchetti forniscono lo stesso comando (es. editor, java), il sistema alternatives gestisce quale versione è effettivamente attiva tramite link simbolici in /etc/alternatives/, con un punteggio di priorità per ognuna.
sudo update-alternatives --config editor
update-alternatives --list editor
Molti pacchetti leggono opzioni di avvio da un file dedicato in /etc/default/ (es. /etc/default/grub, /etc/default/docker), separato dalla configurazione vera e propria del programma. È una convenzione Debian per non dover editare direttamente gli script/unit file: le impostazioni comuni (memoria, flag da riga di comando, opzioni booleane) stanno lì.
Aggiornare i pacchetti dentro la stessa stable è routine. Saltare da bookworm a trixie è un'operazione diversa, che va pianificata.
sudo apt update
sudo apt full-upgrade
sudo apt autoremove
# 1. Sei gia' completamente aggiornato su bookworm?
sudo apt update && sudo apt full-upgrade
# 2. Sostituisci "bookworm" con "trixie" in tutti i sources.list*
sudo sed -i 's/bookworm/trixie/g' /etc/apt/sources.list
# 3. Aggiorna l'elenco pacchetti e fai l'upgrade vero
sudo apt update
sudo apt full-upgrade
# 4. Riavvia: nuovo kernel, nuovo systemd, meglio ripartire puliti
sudo reboot
Debian stable esiste apposta per essere stabile: le patch di sicurezza arrivano senza cambiare comportamento del pacchetto sotto di te.
apt list --upgradable — cosa hai in sospeso adessoIl pacchetto unattended-upgrades applica automaticamente gli aggiornamenti di sicurezza (e opzionalmente quelli normali) senza intervento manuale: la scelta giusta per server che non controlli ogni giorno.
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
Aggiornare una libreria (es. libssl) non riavvia automaticamente i processi già in esecuzione che la usano: restano a girare con il vecchio codice caricato in memoria finché non vengono riavviati. needrestart individua questi servizi "zombie" dopo un upgrade e propone di riavviarli.
sudo apt install needrestart
sudo needrestart
# "Congela" un pacchetto a una versione specifica (non verra' toccato da upgrade)
sudo apt-mark hold nomepacchetto
apt-mark showhold
sudo apt-mark unhold nomepacchetto
Nessuno "possiede" Debian. Capire come funziona il progetto aiuta a capire perché certe cose sono lente, e altre incredibilmente affidabili.
Un Debian Developer (DD) è un membro a pieno titolo del progetto, con diritto di voto e la possibilità di mantenere qualsiasi pacchetto; ci si arriva tramite un processo formale (New Member Process) che verifica identità, competenza tecnica e comprensione della filosofia Debian. Un Debian Maintainer (DM) ha permessi più limitati, per mantenere pacchetti specifici senza passare tutto il processo NM.
Il DPL viene eletto ogni anno dai DD con voto tramite il metodo Condorcet. Non è un "capo" nel senso aziendale: rappresenta il progetto verso l'esterno, gestisce budget e delega, ma le decisioni tecniche restano distribuite tra i singoli manutentori di pacchetto e i team.
Ogni bug su un pacchetto Debian ha un numero pubblico su bugs.debian.org (il BTS), consultabile e commentabile via email o web. Lo strumento reportbug guida nella segnalazione raccogliendo automaticamente le informazioni di sistema rilevanti.
sudo apt install reportbug
reportbug nomepacchetto
Gli stessi cinque problemi tornano sempre. Ecco come riconoscerli e risolverli senza reinstallare tutto.
sudo apt --fix-broken install
sudo dpkg --configure -a
sudo apt update && sudo apt full-upgrade
du -sh /var/cache/apt/archives
sudo apt clean # cancella TUTTI i .deb scaricati
sudo apt autoclean # solo quelli non piu' scaricabili (versioni vecchie)
Ogni repository è firmato; se la chiave è scaduta o mancante, apt update si rifiuta di fidarsi. Verifica sempre la fonte della chiave prima di importarla ciecamente da uno script trovato online.
apt-key list # deprecato ma utile per capire
ls /etc/apt/trusted.gpg.d/
Se un pacchetto è marcato hold (cap. 10) o ha una dipendenza in conflitto, apt full-upgrade può rifiutarsi di procedere su quel pacchetto specifico, lasciando gli altri aggiornati.
apt-mark showhold
apt-cache policy nomepacchetto
Tutto quello che serve, su una pagina. Bookmark questa sezione e dimentica il resto.
sudo apt update
sudo apt full-upgrade
sudo apt install pkg
sudo apt purge pkg
sudo apt autoremove
apt list --upgradable
apt-cache policy pkg
dpkg -l | grep pkg
dpkg -L pkg
dpkg -S /percorso/file
sudo apt --fix-broken install
sudo dpkg --configure -a
sudo apt clean
sudo apt install -t trixie-backports pkg
sudo update-alternatives --config editor
sudo dpkg-reconfigure tzdata
sudo apt-mark hold pkg
sudo apt install unattended-upgrades needrestart
sudo dpkg-reconfigure -plow unattended-upgrades
sudo needrestart
-security sempre presente in sources.listapt-cache policy prima di installare da fonti multiplefull-upgrade tra releaseapt upgrade quando serve full-upgrade (dipendenze non risolte)apt clean su server con disco piccoloneedrestart dopo un upgrade di librerie critiche (openssl, glibc)