openSUSE:Kernel git

Sono disponibili due repository di openSUSE per il kernel. Lo sviluppo avviene nel repository kernel-source. Si tratta di una raccolta di patch, in stile quilt, a cui sono da aggiungere script e file .spec, al fine di produrre i pacchetti RPM del kernel. Esiste poi un secondo repository, il cui nome è semplicemente kernel. Quest'ultimo ha la stessa organizzazione dei contenuti del repository del kernel upstream, per cui lo si può compilare direttamente, oppure sperimentare su di esso le proprie modifiche e hack al codice sorgente.

Come iniziare

Per prima cosa installare sempre l'ultima versione disponibile di git. In particolare sono note per essere funzionanti le versioni git-core-1.5.6 o più recenti, se si sta usando una versione di GIT più datata e si incontrano dei problemi, si prega di segnalarli (l'ideale sarebbe allegando una patch) a opensuse-kernel@opensuse.org. Se invece non dovessero insorgere problemi, si prega di aggiornare la precedente frase relativa alla versione minima dell'applicazione che è nota per essere funzionante senza problemi.

Preparare un clone

 git clone git://kernel.opensuse.org/kernel.git

Questo comando creerà soltanto il ramo principale (o master), per approntare altri rami, procedere con

 git checkout -b $branch origin/$branch

e in seguito solo con

 git checkout $branch

Usare git branch -r per controllare quali rami sono presenti. Vedere anche i #Nomi dei rami più sotto.

Alcuni preferiscono tenere un clone separato per ciascun ramo su cui stanno lavorando. In questo caso sono possibili due opzioni: o copiare il clone, o clonare di nuovo, ma usando l'opzione --reference (supponendo che il kernel sia un preesistente clone):

 git clone --reference kernel git://kernel.opensuse.org/kernel.git kernel-11.2

Si osservi che se si sta lavorando soltanto con un ramo, o con pochi rami in un clone, risulta una buona idea cancellare gli altri rami e modificare la configurazione in modo tale che vengano prelevati soltanto i rami a cui si è interessati (per impostazione predefinita, lanciando git pull viene prelevato tutto il contenuto presente).

 git checkout -b openSUSE-11.2 origin/openSUSE-11.2
 git branch -D master
 git config remote.origin.fetch +refs/heads/openSUSE-11.2:refs/remotes/origin/openSUSE-11.2

Se si è in procinto di inviare la revisione (ovvero di fare il commit) di qualche proprio contributo, è giunto allora il momento di presentarsi:

 git config [--global] user.name "Metti Qui il Tuo Nome"
 git config [--global] user.email tua@email

Nomi dei rami

Ai rami del kernel mantenuti da openSUSE vengono assegnati nomi del tipo: openSUSE-$version, come, per esempio openSUSE-11.2, oppure openSUSE-11.3. Gran parte dei rami per SLE utilizza uno schema di assegnazione dei nomi che risale a quando usavamo CVS per i pacchetti del kernel, lo schema è SLES${version}_SP${number}_BRANCH. A partire da SLE11 SP1, abbiamo iniziato ad usare SLE${version} per i rami GA e SLE${version}-SP${number} per i service pack. Nel repository kernel-source, ciascun ramo dispone anche di un file README.BRANCH indicante gli obiettivi del ramo.

Utilizzare il repository kernel-source

Come è già stato accennato, lo sviluppo avviene nel repository kernel-source. In questo repository sono anche disponibili i file .config e i file rpm spec per la creazione dei pacchetti rpm. Per clonarlo, eseguire

 git clone git://kernel.opensuse.org/kernel-source.git
 cd kernel-source
 scripts/install-git-hooks

Lo script install-git-hooks installa un aggancio a commit e altre applicazioni esterne (helper), in modo tale da catturare automaticamente gli errori comuni. L'organizzazione del repository è la seguente

  • config/$arch/$flavor: File config
  • patches.*/: Patch applicate al sotto-albero vanilla. patches.kernel.org e patches.rpmify sono speciali dato che si applicano anche al kernel-vanilla.
  • rpm/: File spec e script che daranno origine al pacchetto rpm.
  • kabi/: File di aiuto per Kabi.
  • scripts/: Script per svolgere attività all'interno del repository.

Per generare un albero con quilt, così che sia possibile aggiungere patch o aggiornare quelle già presenti, lanciare

 scripts/sequence-patch.sh

Questo script espande il tarball del kernel linux vanilla linux nella sottodirectory tmp/, applica la sequenza delle patch e genera i metadati necessari per quilt. Lo script refresh_patch.sh dovrebbe essere usato per aggiornare le patch, in modo tale che queste abbiano un formato omogeneo. Le nuove patch devono essere aggiunte al file series.conf nella directory principale. Una volta applicate le modifiche, si fa la revisione (ovvero il commit) delle modifiche effettuate con:

 scripts/log

Questo comando avvierà un editor con una voce già pronta per essere inserita nel changelog. Se stai soltanto aggiungendo delle patch, sarà sufficiente utilizzare il changelog così com'è, altrimenti espandilo secondo necessità e digita :wq. Quando si inviano le revisioni (ovvero si fa il commit), si prega di utilizzare scripts/log, in modo tale che i changelog abbiano una formattazione unificata.

Creazione dei pacchetti del kernel

 scripts/tar-up.sh

Questo comando crea un pacchetto sorgente nella sotto-directory kernel-source. Per creare il file RPM del kernel è possibile utilizzare il comando rpmbuild, oppure, se si dispone di un account in Portal:Build Service, si può usare lo script osc_wrapper:

 scripts/osc_wrapper build kernel-source/kernel-desktop.spec # local build
 scripts/osc_wrapper upload home:$login:kernel # remote build

Sottoporre modifiche fatte al team del kernel

Si prega di tenere presente che per far includere una patch nel kernel per openSUSE, si raccomanda di servire la patch in upstream (con push upstream) (upstream è il ramo mantenuto da Linus per la versione master, 2.6.x.y per i prodotti rilasciati). Se si desidera applicare qualche modifica ai pacchetti, agli script o ai file di configurazione, inviare le proprie patch a