git.kernel.org spiegato: struttura del sito e utilizzo pratico
git.kernel.org è l'hosting Git dello sviluppo del kernel Linux. Questa panoramica spiega l'elenco dei repository, lo schema dei percorsi, le viste summary, log, tree e commit, i parametri di ricerca nell'URL e gli URL brevi a cui fanno riferimento le CVE del kernel.
git.kernel.org è il server Git di kernel.org. Qui si trovano il ramo di sviluppo principale di Linus Torvalds, i kernel Stable, linux-next, centinaia di alberi di sottosistemi e sviluppatori, nonché strumenti come git stesso, e2fsprogs o le pagine man di Linux. L’interfaccia web è una versione adattata di cgit (indicata nel piè di pagina come cgit 1.3.1-korg). È in sola lettura: non esistono account, issue né pull request. Lo sviluppo del kernel avviene tramite mailing list, il cui archivio si trova su lore.kernel.org; git.kernel.org mostra il risultato, ovvero i commit che i maintainer hanno integrato nei loro alberi.
I motivi tipici per visitarlo sono una voce CVE che rimanda a un commit del kernel, la verifica che una determinata correzione sia inclusa in una versione del kernel oppure la lettura di un singolo file sorgente senza clonare l’intero repository.
La pagina iniziale: elenco dei repository
La pagina iniziale elenca tutti i repository pubblici in una tabella. Il raggruppamento segue il percorso dei file sul server: ogni sottotitolo come pub/scm/fs o pub/scm/linux è una directory; sotto di esso sono elencati i repository con il relativo percorso rispetto a tale directory.
I gruppi più importanti:
| Gruppo | Contenuto |
|---|---|
pub/scm/linux | Alberi del kernel: mainline, Stable, linux-next nonché gli alberi personali e dei sottosistemi dei maintainer |
pub/scm/fs | File system e strumenti userspace (ext2/3/4, XFS, fscrypt, fsverity) |
pub/scm/libs | Librerie come libcap, libgpiod, libtraceevent |
pub/scm/git | Il progetto Git stesso (git.git) con documentazione HTML e pagine man |
pub/scm/docs | Fonti della documentazione, tra cui man-pages e le chiavi PGP degli sviluppatori del kernel (kernel/pgpkeys.git) |
pub/scm/infra | Infrastruttura di kernel.org, ad es. il fork di cgit e i log di trasparenza del server Gitolite |
pub/scm/bluetooth, devel, editors | BlueZ, strumenti per sviluppatori come sparse e pahole, uemacs di Linus Torvalds |
L’elenco è molto lungo perché solo sotto pub/scm/linux/kernel/git/ ogni maintainer con un account può archiviare i propri alberi. Il campo di ricerca in alto a destra filtra l’elenco per nome, descrizione e owner. La ricerca può essere richiamata anche direttamente come URL, ad es. https://git.kernel.org/?q=xfs.
Lo schema dei percorsi degli alberi del kernel
I repository del kernel seguono il modello:
https://git.kernel.org/pub/scm/linux/kernel/git/<konto>/<repository>.git/
<konto> è il nome utente del maintainer su kernel.org, non necessariamente il suo nome completo (akpm è Andrew Morton, acme è Arnaldo Carvalho de Melo). Per la maggior parte delle domande sono sufficienti tre alberi:
| Albero | Percorso | Scopo |
|---|---|---|
| Mainline | torvalds/linux.git | Ramo di sviluppo di Linus Torvalds; qui nascono le release v7.3, v7.4-rc1 ecc. |
| Stable | stable/linux.git | Versioni mantenute con correzioni (v7.3.1, v7.3.2 …) e kernel Longterm; un branch per ogni serie di versioni, ad es. linux-7.3.y |
| linux-next | next/linux-next.git | Stato integrato quotidianamente di tutti gli alberi dei sottosistemi per la prossima merge window |
In genere una correzione attraversa questi alberi in quest’ordine: arriva prima nell’albero del sottosistema responsabile, appare in linux-next, viene integrata nella mainline da Linus Torvalds durante la merge window tramite e-mail di pull request e successivamente viene sottoposta a backport nei rami Stable. L’albero del sottosistema responsabile è indicato nel file MAINTAINERS nel codice sorgente del kernel (righe con T: git …).
Le viste di un repository
Un clic sul nome di un repository apre la vista summary. La barra delle schede sopra porta alle altre viste; a sinistra un menu a tendina seleziona il branch a cui si riferiscono tutte le viste.
Nella vista summary, il blocco dei tag è utile per leggere la versione attuale: la mainline mostra release candidate (v7.3-rc7) e release (v7.3). I link di download generano un archivio su richiesta e quindi non sono sempre disponibili; per le release definitive, i tarball su kernel.org oppure cdn.kernel.org sono il canale previsto per il download, anche con firma PGP.
Alla fine della vista summary si trovano gli URL di clonazione. Oltre a https:// e al non cifrato git://, viene indicato un mirror su Google (kernel.googlesource.com) che fornisce lo stesso contenuto.
Cercare nella cronologia
Il campo di ricerca nella vista log dispone di un menu a tendina con quattro modalità. Ogni modalità è disponibile anche come parametro URL, così le ricerche possono essere salvate nei segnalibri o collegate nei ticket:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?qt=grep&q=CVE
L’intervallo v7.3-rc6..v7.3-rc7 risponde direttamente nel browser alla domanda «Che cosa è cambiato tra due versioni?». Nell’albero Stable, qt=range&q=v7.3.1..v7.3.2&h=linux-7.3.y mostra tutte le correzioni aggiunte con un aggiornamento Stable.
Leggere un commit
Un singolo commit è indirizzabile tramite il suo hash SHA-1 completo:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=<sha>
La vista mostra autore, committer, data, il commit padre (parent), il messaggio di commit completo e il diff. Alla fine di un messaggio di commit del kernel sono presenti trailer come Signed-off-by:, Reviewed-by: e Fixes: <sha> ("Titel"). La riga Fixes: indica il commit che ha introdotto il difetto; consente quindi di restringere l’intervallo per stabilire da quale versione un sistema è interessato. Link: rimanda di norma alla discussione corrispondente su lore.kernel.org, mentre Cc: stable@vger.kernel.org contrassegna la correzione per il backport nei kernel Stable.
Sostituendo commit nell’URL con patch, il server fornisce il commit come file patch in formato e-mail (text/plain), applicabile con git am oppure patch.
URL brevi nelle voci CVE
Da quando il progetto kernel assegna direttamente i numeri CVE, le voci nell’elenco CVE e nell’NVD rimandano a URL brevi del formato https://git.kernel.org/stable/c/<sha>. git.kernel.org li reindirizza con HTTP 301 alla vista del commit nell’albero appropriato:
| URL breve | Destinazione |
|---|---|
https://git.kernel.org/stable/c/<sha> | Commit nell’albero Stable stable/linux.git |
https://git.kernel.org/linus/<sha> | Commit nella mainline torvalds/linux.git |
Una voce CVE indica di norma più link di questo tipo: uno per ogni ramo Stable in cui la correzione è stata sottoposta a backport e uno per la mainline. Gli hash differiscono perché ogni backport è un commit distinto. Il messaggio di commit del backport indica l’hash dell’originale nella mainline, come riga commit <sha> upstream. oppure come [ Upstream commit <sha> ].
Verificare se una correzione è inclusa in una versione
L’interfaccia web non mostra in quali tag è contenuto un commit. A questo scopo è necessario un clone locale. Per questo utilizzo basta un clone senza contenuti dei file, che scarica soltanto la cronologia dei commit:
git clone --filter=blob:none --no-checkout https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Successivamente, un comando nella directory clonata risponde alla domanda sulla prima versione contenente la correzione:
git describe --contains <sha>
L’output ha la forma v7.3.2~14: la correzione è inclusa a partire da v7.3.2. Tutti i tag contenenti il commit sono elencati da git tag --contains <sha>. Chi ha bisogno soltanto di un singolo file o di uno stato da leggere può usare nel browser le viste tree e plain invece di un clone.
Per il codice sorgente completo da compilare è sufficiente un clone superficiale di un tag:
git clone --depth 1 --branch v7.3 https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Monitorare le modifiche
Ogni repository offre un feed Atom del branch predefinito su …/<repository>.git/atom/, per la mainline quindi https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/atom/. Un lettore di feed mostra così i nuovi commit senza dover visitare regolarmente la pagina. Per la mainline, il feed genera molte voci al giorno durante la merge window; per release e aggiornamenti Stable, la panoramica delle versioni su kernel.org oppure il suo feed è la fonte più tranquilla.
Commenti
I commenti vengono caricati da GitHub / Giscus.