Innanzitutto dobbiamo capire di quale Linux stiamo parlando.
Se infatti accedessimo al sito kernel.org noteremmo che esistono diverse versioni di linux.
La principale versione di Linux è la Linux mainline, che rilascia le versioni ufficiali e le release candidates, ovvero le versioni candidate al rilascio.
Quello che abbiamo invece scaricato tendenzialmente sono le linux stable, che effettua delle backport dei fix allâinterno della linea principale.
Linux viene compilato attraverso lâutilizzo dei makefile. Ă necessario specificare un file di configurazione, questo perchĂŠ Linux supporta tantissime architetture diverse tra di loro, ed è quindi necessario effettuare dei tweak per ogni versione affinchĂŠ possa funzionare.
QUando eseguiamo il comando make fileconfig si aprirĂ una schermata dove possiamo personalizzare il nostro sistema con tutte le configurazioni che vogliamo inserire.
Le varie opzioni possono essere caricati, non caricati oppure caricati come moduli, ovvero eseguibili che vengon ocaricati solo quando necessario.
Quando scarichiamo una versione di Linux nella cartella /boot/ si troverĂ un file di configurazioni globali che verranno utilizzati quando si compilerĂ il kernel.
Per installare il kernel esistono diverse opzioni.
Una prima opzione è quella di usare il comando make binrpm-pkg, cosâ da generare dei pacchetti rpm per il kernel.
Per installare il kernel sulla macchina stessa si utilizza il comando make install e make module_install (per i moduli).
Se invece volessimo scaricarlo su un altro sistema è possibile copiare i file .rpm allâinterno della macchina designata e successivamente spacchettarli attraverso dnf.
Quando avrĂ finito con un semplice reboot potremo selezionare il kernel appena compilato.
Allâinterno del file module.alias troviamo tutta una serie di alias che permettono di capire quali moduli caricare qualora venisse rilevato un dispositivo.
Il primo metodo per compilare un singolo modulo (file .ko) è quello di compilare lâintero kernel e selezionare solo i moduli desiderati.
Questo metodo è dispendioso, quidni si preferisce una compilazione out-of-tree. In questa versione si prende una versione già compilata del kernel e si pacchettizza solamente uno dei moduli accedibili (eventualmente dopo le desiderate modifiche al modulo).
A questo punto è possibile utilizzare e distribuire solamente il singolo modulo.
Ă uno standard per la creazione di macchine virtuali.
Le macchine virtuali non hanno infatti necessità stretta di emulare le componenti in modo preciso, ma è possibile per loro utilizzare delle tecniche per ottimizzare.
Per capire se ci troviamo su una macchina virtuale uno dei metodi è proprio quello di visualizzare le periferiche (lspci) e vedere se sono periferiche emulate o meno.
Essitono diversi :
In particolare capiamo cosâè Virtio-vsock.
Questo driver permette di effettuare comunicazioni tra macchine virtuali e macchine fisiche attraverso una virtualizzazione dei socket.
Permette la comunicazione attraverso le socket API utilizzando semplicemente degli ID assegnate alle varie macchine virtuali.
Un esempio di utilizzo di vsock sono le guest-addition di virtualbox che permettono di fare copia-incolla tra macchina guest e host.
Attraverso il software netconnect è possibile connettere attraverso un vsock le due macchine:
# Macchina fisica
nc --vsock -l 12345
# Macchina Virtuale
nc --vsock 2 12345
Linux è un progetto open-source alla quale è possibile contribuire in modo libero.
In pratica i maggiori contributori (e in realtĂ gli unici) sono le grandi societĂ come Intel, Google, RedHat, Linaro, SUSE, AMD, NVIDIA, Qualcomm, Meta, âŚ
Tuttavia si può accedere alla repo github.com/torvalds/linux e utilizzare le pull request anche se non è il modo ufficiale.
IL modo ufficiale per lâinvio delle patch è per email.
Al sito lore.kernel.org è possibile visualizzare una raccolta delle email inviate per effettuare delle modifiche e caricare il codice modificato attraverso il comando diff.
Dietro ai motivi della scelta delle email si celano due problemi diversi: il single-point-of-failure che introduce un unico metodo come le pull request di github, e poi il fatto stesso che Github è un azienda privata posseduta dalla microsoft.
Attraverso il comando:
git format-patch -1
Si genera un file .patch che contiene il commit delle modifiche fatte. Questo comando prende le informaizoni trovate in ~/.gitconfig per la mail.
Per inviare una mail si utilizza il comando:
git send-email
Chi effettuera il controllo della patch risponde alla mail, tendenzialmente utilizzando client mail da terminale.
Questi utenti si chiamano maintainer. Il main maintainer è Torvalds in persona che revisiona tutte le patch che arrivano a lui. Sotto si hanno dei cluser di maintainer, divisi per moduli divisi ad albero.
La lista dei maintainers dei vari moduli si trova nel file MAINTAINERS allâinterno della repo di Torvalds.