mirror of
https://gitlab.com/octtspacc/sitoctt
synced 2025-06-05 22:09:20 +02:00
Aggiunto Spagnolo, riconversione post Listed da HTML a Markdown
This commit is contained in:
@ -10,83 +10,69 @@ Lastmod = 2023-10-18
|
||||
|
||||
<!-- Autogenerated by ListedDownsync.js. Do not edit (unless also set "% Downsync = False") - it would be overwritten. -->
|
||||
|
||||
<p>Chi segue le mie avventure da abbastanza tempo e con dovuta attenzione forse lo sa, ma il più grande problema dell'informatica è: come conciliare bene le discrepanze che si vengono a creare quando ci si pone il problema di videogiocare sia a casa che in portatilità? Tra giochi che in un caso sono comodi da giocare e in un altro magari nemmeno girano, e i salvataggi che si spargono per innumerevoli dispositivi diversi, risolvere questo problema in toto non sarà mai possibile...<br>
|
||||
Eppure, certe volte, l'entropia del cervello è in grado di generare idee particolarmente utili anche a questo proposito, come mi è successo l'altro giorno per la PS2.</p>
|
||||
Chi segue le mie avventure da abbastanza tempo e con dovuta attenzione forse lo sa, ma il più grande problema dell'informatica è: come conciliare bene le discrepanze che si vengono a creare quando ci si pone il problema di videogiocare sia a casa che in portatilità? Tra giochi che in un caso sono comodi da giocare e in un altro magari nemmeno girano, e i salvataggi che si spargono per innumerevoli dispositivi diversi, risolvere questo problema in toto non sarà mai possibile...
|
||||
Eppure, certe volte, l'entropia del cervello è in grado di generare idee particolarmente utili anche a questo proposito, come mi è successo l'altro giorno per la PS2.
|
||||
|
||||
<p>Io ho infatti una reale PlayStation 2, console domestica che quando si trova modo di usare è certamente apprezzabile... e che io spesso mi trovavo a non usare, per i motivi sopracitati: né direttamente, perché a casa spesso non mi va, né con emulatore sullo smartphone, perché sentirei che a casa non sfrutterei la vera console dato che i salvataggi aggiornati starebbero solo sul telefono.<br>
|
||||
E allora, proprio l'altro giorno, fissando la console (non so bene perché), penso che dovrebbe esistere un modo per avere i salvataggi facilmente sincronizzati tra quella e il telefono...</p>
|
||||
Io ho infatti una reale PlayStation 2, console domestica che quando si trova modo di usare è certamente apprezzabile... e che io spesso mi trovavo a non usare, per i motivi sopracitati: né direttamente, perché a casa spesso non mi va, né con emulatore sullo smartphone, perché sentirei che a casa non sfrutterei la vera console dato che i salvataggi aggiornati starebbero solo sul telefono.
|
||||
E allora, proprio l'altro giorno, fissando la console (non so bene perché), penso che dovrebbe esistere un modo per avere i salvataggi facilmente sincronizzati tra quella e il telefono...
|
||||
|
||||
<h2>Intoppo 1: chiavetta o memory card?</h2>
|
||||
## Intoppo 1: chiavetta o memory card?
|
||||
|
||||
<p>Sul momento, l'idea più semplice a cui ho pensato è stata: esistono <a href="https://www.amazon.it/Adattatore-Memoria-Lettore-Sostitutivo-trasparente/dp/B0C8TTQFJY" rel="noopener nofollow" target="_blank">degli adattatori</a> per usare una scheda microSD come memory card PlayStation (che usano invece un'interfaccia non-standard)... potrebbe convenire comprare uno di quelli, così tengo lì tutti i salvataggi, e a desiderio posso accedervi anche da altri dispositivi spostando la scheda in giro.<sup id="fnref1"><a class="footnote-ref" href="#fn1">1</a></sup><br>
|
||||
Con una scheda da diversi GB (tanto ormai in giro non se ne trovano di piccole comunque), inoltre, potrei anche fare a meno della chiavetta USB e tenere tutti i giochi solo sulla scheda di memoria!</p>
|
||||
Sul momento, l'idea più semplice a cui ho pensato è stata: esistono [degli adattatori](https://www.amazon.it/Adattatore-Memoria-Lettore-Sostitutivo-trasparente/dp/B0C8TTQFJY) per usare una scheda microSD come memory card PlayStation (che usano invece un'interfaccia non-standard)... potrebbe convenire comprare uno di quelli, così tengo lì tutti i salvataggi, e a desiderio posso accedervi anche da altri dispositivi spostando la scheda in giro.<sup id="fnref1"><a href="#fn1">1</a></sup>
|
||||
Con una scheda da diversi GB (tanto ormai in giro non se ne trovano di piccole comunque), inoltre, potrei anche fare a meno della chiavetta USB e tenere tutti i giochi solo sulla scheda di memoria!
|
||||
|
||||
<p>Per fortuna, questo non è l'unico modo, almeno per certi giochi: <a href="https://github.com/ps2homebrew/Open-PS2-Loader" rel="noopener nofollow" target="_blank">Open PS2 Loader</a>, l'homebrew che esegue giochi commerciali da memorie di backup (come le chiavette USB), supporta l'uso di memory card virtuali (VMC) che sono salvate come file sull'unità USB. I giochi sono alquanto lenti a salvare su quella (la PS2 supporta solo USB 1.1, e in più c'è dell'overhead strano), però è una soluzione apparentemente agibile.</p>
|
||||
Per fortuna, questo non è l'unico modo, almeno per certi giochi: [Open PS2 Loader](https://github.com/ps2homebrew/Open-PS2-Loader), l'homebrew che esegue giochi commerciali da memorie di backup (come le chiavette USB), supporta l'uso di memory card virtuali (VMC) che sono salvate come file sull'unità USB. I giochi sono alquanto lenti a salvare su quella (la PS2 supporta solo USB 1.1, e in più c'è dell'overhead strano), però è una soluzione apparentemente agibile.
|
||||
|
||||
<h2>Intoppo 2: conversione dei salvataggi</h2>
|
||||
## Intoppo 2: conversione dei salvataggi
|
||||
|
||||
<p>Indipendentemente dalla precedente scelta, scopro però un altro ostacolo: i salvataggi andrebbero convertiti per essere passati dalla console all'emulatore (almeno <a href="https://aethersx2.com" rel="noopener nofollow" target="_blank">AetherSX2</a>, nel bene e nel male l'unico veramente decente ad oggi) e poi viceversa.<br>
|
||||
Fortunatamente, trovo subito <a href="http://www.csclub.uwaterloo.ca:11068/mymc" rel="noopener nofollow" target="_blank">mymc</a>, un programma talmente antico che richiede Python 2 (mentre al momento siamo da anni e anni al 3), che però funziona, e grazie al cielo offre un'interfaccia a riga di comando.</p>
|
||||
Indipendentemente dalla precedente scelta, scopro però un altro ostacolo: i salvataggi andrebbero convertiti per essere passati dalla console all'emulatore (almeno [AetherSX2](https://aethersx2.com), nel bene e nel male l'unico veramente decente ad oggi) e poi viceversa.
|
||||
Fortunatamente, trovo subito [mymc](http://www.csclub.uwaterloo.ca:11068/mymc), un programma talmente antico che richiede Python 2 (mentre al momento siamo da anni e anni al 3), che però funziona, e grazie al cielo offre un'interfaccia a riga di comando.
|
||||
|
||||
<p>Di per sé non fa vere conversioni di memory card virtuali, ma permette di manipolare i file contenuti in vari modi. Tutto molto grezzo, ma per fortuna abbastanza sfruttabile per fare proprio quello che serve a me, dopo aver assemblato uno script ideale.<br>
|
||||
Non mi metto a spiegare come funziona, in fondo all'articolo potete scaricarlo e leggerlo, è una noia. Ho pacchettizzato mymc dentro lo script, così che non vada installato a parte.</p>
|
||||
Di per sé non fa vere conversioni di memory card virtuali, ma permette di manipolare i file contenuti in vari modi. Tutto molto grezzo, ma per fortuna abbastanza sfruttabile per fare proprio quello che serve a me, dopo aver assemblato uno script ideale.
|
||||
Non mi metto a spiegare come funziona, in fondo all'articolo potete scaricarlo e leggerlo, è una noia. Ho pacchettizzato mymc dentro lo script, così che non vada installato a parte.
|
||||
|
||||
<h3>Intoppo 3: convertire dal telefono</h3>
|
||||
### Intoppo 3: convertire dal telefono
|
||||
|
||||
<p><em>Nota 2023-10-18: ho trovato un fork moderno (in Python 3) di mymc, <a href="https://sr.ht/%7Ethestr4ng3r/mymcplus/" rel="noopener nofollow" target="_blank">mymc+</a>... non l'ho (ancora) provato, ma è possibile che questo possa funzionare anche su Android, eliminando il setup intricato che segue, quindi lo menziono.</em></p>
|
||||
_Nota 2023-10-18: ho trovato un fork moderno (in Python 3) di mymc, [mymc+](https://sr.ht/%7Ethestr4ng3r/mymcplus/)... non l'ho (ancora) provato, ma è possibile che questo possa funzionare anche su Android, eliminando il setup intricato che segue, quindi lo menziono._
|
||||
|
||||
<p>Purtroppo, mymc ha qualche problema a funzionare in <a href="https://termux.dev/en" rel="noopener nofollow" target="_blank">Termux</a> (l'ambiente Linux nativo molto comodo per questo tipo di integrazioni) sul mio Android: non so di cosa sia la colpa, ma in pratica il programma ha problemi a leggere i file VMC, tirando un errore del tipo di <code class="prettyprint">file.vmc: Bad file descriptor</code>. Non ho trovato soluzioni online, nemmeno per ricerche generiche del problema, quindi ho dovuto arrangiarmi. Forse usare un sistema GNU+Linux containerizzato in proot, con le sue librerie e una build diversa di Python 2.7, basterebbe a risolvere il problema, ma chissà.<br>
|
||||
Dal canto mio, mi stavo iniziando a scocciare, e allora ho optato per delegare la conversione al mio server Debian, facendo svolgere ad uno script in Termux il semplice compito di caricare la VMC sul server, eseguire lì sopra il vero script di conversione, e poi scaricare il file convertito nella giusta posizione in locale.</p>
|
||||
Purtroppo, mymc ha qualche problema a funzionare in [Termux](https://termux.dev/en) (l'ambiente Linux nativo molto comodo per questo tipo di integrazioni) sul mio Android: non so di cosa sia la colpa, ma in pratica il programma ha problemi a leggere i file VMC, tirando un errore del tipo di `file.vmc: Bad file descriptor`. Non ho trovato soluzioni online, nemmeno per ricerche generiche del problema, quindi ho dovuto arrangiarmi. Forse usare un sistema GNU+Linux containerizzato in proot, con le sue librerie e una build diversa di Python 2.7, basterebbe a risolvere il problema, ma chissà.
|
||||
Dal canto mio, mi stavo iniziando a scocciare, e allora ho optato per delegare la conversione al mio server Debian, facendo svolgere ad uno script in Termux il semplice compito di caricare la VMC sul server, eseguire lì sopra il vero script di conversione, e poi scaricare il file convertito nella giusta posizione in locale.
|
||||
|
||||
<p>Prima che mi dimentichi: su Android 13 e superiori (ma già da alcune versioni passate) servono i permessi di root per far leggere e scrivere file da/su memorie esterne (come la chiavetta USB) e cartelle private delle applicazioni (come quella dove AetherSX2 conserva le memory card virtuali).<br>
|
||||
A quanto ho potuto provare, se non si ha il root bisognerà per forza usare un gestore di file adeguato (e non credo ne esistano di scriptabili, quindi bisogna usare le manine), o forse ADB, per spostare i file in giro... ringraziate Google.<br>
|
||||
In ogni caso, i miei script hanno scritti dentro i percorsi speciali usati per tutto l'ambaradan.</p>
|
||||
Prima che mi dimentichi: su Android 13 e superiori (ma già da alcune versioni passate) servono i permessi di root per far leggere e scrivere file da/su memorie esterne (come la chiavetta USB) e cartelle private delle applicazioni (come quella dove AetherSX2 conserva le memory card virtuali).
|
||||
A quanto ho potuto provare, se non si ha il root bisognerà per forza usare un gestore di file adeguato (e non credo ne esistano di scriptabili, quindi bisogna usare le manine), o forse ADB, per spostare i file in giro... ringraziate Google.
|
||||
In ogni caso, i miei script hanno scritti dentro i percorsi speciali usati per tutto l'ambaradan.
|
||||
|
||||
<p>Usando <a href="https://wiki.termux.com/wiki/Termux:Widget" rel="noopener nofollow" target="_blank">Termux:Widget</a>, ho aggiunto infine due collegamenti al mio launcher di sistema, per la conversione della VMC:</p>
|
||||
Usando [Termux:Widget](https://wiki.termux.com/wiki/Termux:Widget), ho aggiunto infine due collegamenti al mio launcher di sistema, per la conversione della VMC:
|
||||
|
||||
<ul>
|
||||
<li>uno che va dal formato PS2 a quello emulatore, da eseguire quando voglio giocare su telefono ma i salvataggi sulla pennetta sono stati modificati l'ultima volta dalla PS2;</li>
|
||||
<li>l'altro per la conversione inversa, da eseguire quando voglio andare a giocare sulla PS2 una volta che è stato l'emulatore ad aggiornare i miei salvataggi.</li>
|
||||
</ul>
|
||||
* uno che va dal formato PS2 a quello emulatore, da eseguire quando voglio giocare su telefono ma i salvataggi sulla pennetta sono stati modificati l'ultima volta dalla PS2;
|
||||
* l'altro per la conversione inversa, da eseguire quando voglio andare a giocare sulla PS2 una volta che è stato l'emulatore ad aggiornare i miei salvataggi.
|
||||
|
||||
<p>A spiegarlo mi rendo conto che appaia complicatissimo, nella pratica devo solo premere un tasto e aspettare una manciata di secondi.</p>
|
||||
A spiegarlo mi rendo conto che appaia complicatissimo, nella pratica devo solo premere un tasto e aspettare una manciata di secondi.
|
||||
|
||||
<h2>Nella pratica: il pregio della memoria unica</h2>
|
||||
## Nella pratica: il pregio della memoria unica
|
||||
|
||||
<p>Eliminati gli intoppi, la configurazione è fatta, ed il suo punto di forza sta nella centralizzazione di giochi e salvataggi su un unico dispositivo: la chiave USB. In questo modo:</p>
|
||||
Eliminati gli intoppi, la configurazione è fatta, ed il suo punto di forza sta nella centralizzazione di giochi e salvataggi su un unico dispositivo: la chiave USB. In questo modo:
|
||||
|
||||
<ul>
|
||||
<li>evito la confusione generata da giochi che ho da una parte ma non l'altra, specialmente quando voglio modificare la mia raccolta;</li>
|
||||
<li>non mi serve una microSD tanto più grande nello smartphone per contenere tutti i giochi che ho già su un'altra memoria portatile, con vantaggi per la stabilità degli altri dati ed il peso del portafogli;</li>
|
||||
<li>non c'è confusione extra per la gestione di anche i salvataggi, essendo questi gestiti come ho detto prima.</li>
|
||||
</ul>
|
||||
* evito la confusione generata da giochi che ho da una parte ma non l'altra, specialmente quando voglio modificare la mia raccolta;
|
||||
* non mi serve una microSD tanto più grande nello smartphone per contenere tutti i giochi che ho già su un'altra memoria portatile, con vantaggi per la stabilità degli altri dati ed il peso del portafogli;
|
||||
* non c'è confusione extra per la gestione di anche i salvataggi, essendo questi gestiti come ho detto prima.
|
||||
|
||||
<p>Sulla PS2 attacco la pennetta normalmente quando mi serve, invece sullo smartphone devo usare un adattatore USB-C OTG, cosa mediamente scomoda ma c'è poco da fare. Per evitare di perdere 'sti robi in giro, ho attaccato poi un moschettone alla pennina USB, e un anello portachiavi nel buco per i laccetti che ho sulla cover del telefono.</p>
|
||||
Sulla PS2 attacco la pennetta normalmente quando mi serve, invece sullo smartphone devo usare un adattatore USB-C OTG, cosa mediamente scomoda ma c'è poco da fare. Per evitare di perdere 'sti robi in giro, ho attaccato poi un moschettone alla pennina USB, e un anello portachiavi nel buco per i laccetti che ho sulla cover del telefono.
|
||||
|
||||
<h2>Concludendo: idee a catena</h2>
|
||||
## Concludendo: idee a catena
|
||||
|
||||
<p>Credo che questo sia il sistema più ideale date le mie condizioni iniziali, e nei giorni a seguire lo proverò per bene.<br>
|
||||
Probabilmente, dovrò comunque procurarmi una memoria esterna più capiente per conservare più giochi, perché quella da 32 GB che uso ora mi è sempre stata strettina.</p>
|
||||
Credo che questo sia il sistema più ideale date le mie condizioni iniziali, e nei giorni a seguire lo proverò per bene.
|
||||
Probabilmente, dovrò comunque procurarmi una memoria esterna più capiente per conservare più giochi, perché quella da 32 GB che uso ora mi è sempre stata strettina.
|
||||
|
||||
<p>Magari, prendendone una abbastanza grande, e scrivendo un homebrew apposito, credo di poter adattare questo mio sistema anche per i giochi Wii, usando la stessa memoria anche per quelli... spoiler? 👀</p>
|
||||
Magari, prendendone una abbastanza grande, e scrivendo un homebrew apposito, credo di poter adattare questo mio sistema anche per i giochi Wii, usando la stessa memoria anche per quelli... spoiler? 👀
|
||||
|
||||
<p>In vera fine, ecco le risorse aggiuntive per questo articolo:</p>
|
||||
In vera fine, ecco le risorse aggiuntive per questo articolo:
|
||||
|
||||
<ul>
|
||||
<li>La mia domanda iniziale e la breve discussione del sistema su Sony Hacking Zone: <a href="https://t.me/SonyHacking/46784" rel="noopener nofollow" target="_blank">https://t.me/SonyHacking/46784</a>;</li>
|
||||
<li>Guida all'uso delle VMC su OPL: <a href="https://youtube.com/watch?v=tBrKcJC_E4U" rel="noopener nofollow" target="_blank">https://youtube.com/watch?v=tBrKcJC_E4U</a></li>
|
||||
<li>I miei script di conversione (su GitLab): <a href="https://gitlab.com/octospacc/Snippets/-/blob/main/Ps2EmuVmcConvert.sh" rel="noopener nofollow" target="_blank">diretto</a>, <a href="https://gitlab.com/octospacc/Snippets/-/blob/main/Ps2EmuVmcConvertCloud.sh" rel="noopener nofollow" target="_blank">via server</a>;</li>
|
||||
<li>Build Android di AetherSX2 con cui gioco (ultima senza adware): <a href="https://www.apkmirror.com/apk/aethersx2/aethersx2/aethersx2-v1-4-3060-release/aethersx2-v1-4-3060-android-apk-download/" rel="noopener nofollow" target="_blank">https://www.apkmirror.com/apk/aethersx2/aethersx2/aethersx2-v1-4-3060-release/aethersx2-v1-4-3060-android-apk-download/</a>.</li>
|
||||
</ul>
|
||||
* La mia domanda iniziale e la breve discussione del sistema su Sony Hacking Zone: [https://t.me/SonyHacking/46784](https://t.me/SonyHacking/46784);
|
||||
* Guida all'uso delle VMC su OPL: [https://youtube.com/watch?v=tBrKcJC\_E4U](https://youtube.com/watch?v=tBrKcJC_E4U)
|
||||
* I miei script di conversione (su GitLab): [diretto](https://gitlab.com/octospacc/Snippets/-/blob/main/Ps2EmuVmcConvert.sh), [via server](https://gitlab.com/octospacc/Snippets/-/blob/main/Ps2EmuVmcConvertCloud.sh);
|
||||
* Build Android di AetherSX2 con cui gioco (ultima senza adware): [https://www.apkmirror.com/apk/aethersx2/aethersx2/aethersx2-v1-4-3060-release/aethersx2-v1-4-3060-android-apk-download/](https://www.apkmirror.com/apk/aethersx2/aethersx2/aethersx2-v1-4-3060-release/aethersx2-v1-4-3060-android-apk-download/).
|
||||
|
||||
---
|
||||
|
||||
|
||||
<div class="footnotes">
|
||||
<ol>
|
||||
|
||||
<li id="fn1">
|
||||
<p>Su questo riscontro opinioni contrastanti o consigli non troppo chiari, quindi attenzione: non si capisce se questi adattatori funzionino anche come normali memory card per i salvataggi dei giochi (e dunque anche possibilmente come scheda per FMCB), oppure solo come memoria esterna per homebrew come OPL... in ogni caso sarebbe un acquisto potenzialmente valido, considerando le inconvenienze tecniche della USB su PS2. <a href="#fnref1">↩</a></p>
|
||||
</li>
|
||||
|
||||
</ol>
|
||||
</div>
|
||||
1. Su questo riscontro opinioni contrastanti o consigli non troppo chiari, quindi attenzione: non si capisce se questi adattatori funzionino anche come normali memory card per i salvataggi dei giochi (e dunque anche possibilmente come scheda per FMCB), oppure solo come memoria esterna per homebrew come OPL... in ogni caso sarebbe un acquisto potenzialmente valido, considerando le inconvenienze tecniche della USB su PS2. [↩](#fnref1)
|
||||
|
@ -9,123 +9,95 @@ Categories = [ "Linux" ]
|
||||
|
||||
<!-- Autogenerated by ListedDownsync.js. Do not edit (unless also set "% Downsync = False") - it would be overwritten. -->
|
||||
|
||||
<p>Non di frequente mi saltano in mente nuove idee, ma, quando lo fanno, sono sempre bizzarre al punto giusto... Senza divagare troppo, è proprio per questo svilupparsi delle cose che anni fa, per la prima volta, mi sono trovata a compilare da sorgente il kernel Linux — su un Raspberry Pi 3 tra l'altro, cosa che col senno di poi non consiglierei — e adesso, precisamente ieri, di nuovo un'altra volta, dopo anni (stavolta sul PC, per fortuna), per un fine che non spoilero.</p>
|
||||
Non di frequente mi saltano in mente nuove idee, ma, quando lo fanno, sono sempre bizzarre al punto giusto... Senza divagare troppo, è proprio per questo svilupparsi delle cose che anni fa, per la prima volta, mi sono trovata a compilare da sorgente il kernel Linux — su un Raspberry Pi 3 tra l'altro, cosa che col senno di poi non consiglierei — e adesso, precisamente ieri, di nuovo un'altra volta, dopo anni (stavolta sul PC, per fortuna), per un fine che non spoilero.
|
||||
|
||||
<h2>Perché ricompilare il kernel? 😯️</h2>
|
||||
## Perché ricompilare il kernel? 😯️
|
||||
|
||||
<p>Linux si basa su un'architettura monolitica, cosa che ci riguarderebbe poco... se non fosse per il fatto che ha un'implicazione scomoda: qualsiasi funzione che lavora a livello di kernel deve essere compilata nello stesso. Anche il meccanismo dei cosiddetti moduli non copre tutte le situazioni possibili (almeno non a livello pratico), e ci si può quindi trovare in delle situazioni in cui il kernel fornito dalla distribuzione (o dal produttore hardware), anche se aggiornato, non ha qualcosa che serve, e quindi va sostituito.</p>
|
||||
Linux si basa su un'architettura monolitica, cosa che ci riguarderebbe poco... se non fosse per il fatto che ha un'implicazione scomoda: qualsiasi funzione che lavora a livello di kernel deve essere compilata nello stesso. Anche il meccanismo dei cosiddetti moduli non copre tutte le situazioni possibili (almeno non a livello pratico), e ci si può quindi trovare in delle situazioni in cui il kernel fornito dalla distribuzione (o dal produttore hardware), anche se aggiornato, non ha qualcosa che serve, e quindi va sostituito.
|
||||
|
||||
Considerando le varietà infinite di distribuzioni Linux, repository che distribuiscono kernel compatibili o meno, e unendo ciò alla diversità di singole opzioni abilitabili nella compilazione del kernel... non solo in rari casi la compilazione da sorgente è l'unica via, ma spesso e volentieri è quella più pratica. Per fortuna, compilare il kernel Linux è molto semplice — decisamente di più dell'applicazione media per il desktop Linucs, con tremila dipendenze sempre in conflitto — ma ci sono dettagli magari non proprio immediati nel procedimento, quindi... ecco la mia nota!
|
||||
|
||||
## 0\. Partenza e prerequisiti 📦️
|
||||
|
||||
<p>Considerando le varietà infinite di distribuzioni Linux, repository che distribuiscono kernel compatibili o meno, e unendo ciò alla diversità di singole opzioni abilitabili nella compilazione del kernel... non solo in rari casi la compilazione da sorgente è l'unica via, ma spesso e volentieri è quella più pratica. Per fortuna, compilare il kernel Linux è molto semplice — decisamente di più dell'applicazione media per il desktop Linucs, con tremila dipendenze sempre in conflitto — ma ci sono dettagli magari non proprio immediati nel procedimento, quindi... ecco la mia nota!</p>
|
||||
Questa nota è sulla più generica ricompilazione del kernel Linux, cioè la variante ufficiale (quella di Linus Torvalds) su e per un PC desktop x86\_64 (o AMD64). Niente fork o varianti patchate, niente versioni di OEM scassacose, niente installazione su dispositivi embedded o in qualunque altra misura esoterici, niente compilazione distribuita o cross-platform. Per casi più o meno limite, le cose da fare possono più o meno variare, anche se l'andazzo rimane lo stesso... vedete voi dai, il punto è che io assumo questa situazione. Nel mio caso, non ci sono nemmeno moduli kernel proprietari.
|
||||
|
||||
<h2>0. Partenza e prerequisiti 📦️</h2>
|
||||
A parte eventuali strumenti preferiti per ottenere il kernel, nel caso scompattarlo, e qualche distrazione per passare il non poco tempo, i prerequisiti sono abbastanza ridotti. Come minimo serve un compilatore C (gcc) per motivi ovvi, GNU Make per eseguire i makefile, qualche tool assortito dal nome dimenticabile e qualche libreria super-specifica dall'interesse limitato. Poi, credo possano servire altri pacchetti, dipendentemente dalla distribuzione Linux in uso o dalle funzionalità che si devono compilare.
|
||||
|
||||
<p>Questa nota è sulla più generica ricompilazione del kernel Linux, cioè la variante ufficiale (quella di Linus Torvalds) su e per un PC desktop x86_64 (o AMD64). Niente fork o varianti patchate, niente versioni di OEM scassacose, niente installazione su dispositivi embedded o in qualunque altra misura esoterici, niente compilazione distribuita o cross-platform. Per casi più o meno limite, le cose da fare possono più o meno variare, anche se l'andazzo rimane lo stesso... vedete voi dai, il punto è che io assumo questa situazione. Nel mio caso, non ci sono nemmeno moduli kernel proprietari.</p>
|
||||
Non è in realtà chiarissimo sul web quali sono i pacchetti davvero necessari, e quali quelli che qualcuno che ha fatto altre guide ha detto "boh, mettiamo per sicurezza"... aggiorno qui con dei listini precisi man mano che verifico, includendo se necessario anche dei listoni eccessivi (per chi è a posto con il perdere lo spazio ma non il tempo). Per me è in genere una strategia installare il minimo possibile quando qualche requisito non è chiaro, avviare la compilazione, ed installare le altre eventuali dipendenze man mano che escono errori a riguardo.
|
||||
|
||||
<p>A parte eventuali strumenti preferiti per ottenere il kernel, nel caso scompattarlo, e qualche distrazione per passare il non poco tempo, i prerequisiti sono abbastanza ridotti. Come minimo serve un compilatore C (gcc) per motivi ovvi, GNU Make per eseguire i makefile, qualche tool assortito dal nome dimenticabile e qualche libreria super-specifica dall'interesse limitato. Poi, credo possano servire altri pacchetti, dipendentemente dalla distribuzione Linux in uso o dalle funzionalità che si devono compilare.</p>
|
||||
Debian e derivate (`apt`):
|
||||
|
||||
<p>Non è in realtà chiarissimo sul web quali sono i pacchetti davvero necessari, e quali quelli che qualcuno che ha fatto altre guide ha detto "boh, mettiamo per sicurezza"... aggiorno qui con dei listini precisi man mano che verifico, includendo se necessario anche dei listoni eccessivi (per chi è a posto con il perdere lo spazio ma non il tempo). Per me è in genere una strategia installare il minimo possibile quando qualche requisito non è chiaro, avviare la compilazione, ed installare le altre eventuali dipendenze man mano che escono errori a riguardo.</p>
|
||||
* `build-essential` `libelf-dev` (obbligatori)
|
||||
* `ncurses-dev` (per usare la configurazione a menu TUI)
|
||||
|
||||
## 1\. Ottenimento del codice ⛓️
|
||||
|
||||
Il codice sorgente di Linux si può prendere ufficialmente [dal Git principale](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git), [dal GitHub di Torvalds](https://github.com/torvalds/linux), o [dal sito Kernel.org](https://kernel.org). Preferisco l'ultima opzione, che ha le ultime versioni effettivamente necessarie messe belle in vista, fino al più vecchio branch supportato.
|
||||
|
||||
<p>Debian e derivate (<code class="prettyprint">apt</code>):</p>
|
||||
Di versioni supportate in un dato momento, appunto, ce ne sono diverse. In genere, se non c'è motivo di installare un kernel vecchio, uno più nuovo è meglio; non troppo nuovo, però, perché a vivere sul bleeding edge si perde sangue, con gli occasionali problemi anche gravi che possono saltare fuori! Quindi, evito il branch `mainline`, aggiornato giornalmente o quasi, come la peste, e in genere scelgo `stable`, aggiornato con un po' di giorni in più. Altri utenti potrebbero legittimamente preferire la `longterm` più recente (quella più in alto), per avere ancora più stabilità, ma io lo trovo inutile.
|
||||
|
||||
<ul>
|
||||
<li><code class="prettyprint">build-essential</code> <code class="prettyprint">libelf-dev</code> (obbligatori)</li>
|
||||
<li><code class="prettyprint">ncurses-dev</code> (per usare la configurazione a menu TUI)</li>
|
||||
</ul>
|
||||
Per la riga di ogni versione, a parte la data, quello che interessa è il link \[tarball\], quindi si scarica quel file lì. Lo si può poi estrarre in una cartella comoda, tra i tanti modi, con il comando `tar xvf <file>`. Tutti i comandi da eseguire da questo punto saranno all'interno della cartella preparata.
|
||||

|
||||
|
||||
<h2>1. Ottenimento del codice ⛓️</h2>
|
||||
...Bisognerebbe scaricare poi anche il file PGP, quando presente, che serve a verificare che il download sia integro e che provenga dai distributori legittimi. Realisticamente, però, già non tutte le versioni lo hanno (stando a sottintendere che sotto sotto...), il download si fa dal sito ufficiale con HTTPS (quindi difficile sarà alterato), è un archivio compresso (quindi se corrotto dovrebbe fallire l'estrazione), e fare la verifica è una rottura di scatole allucinante. Altri enti avranno requisiti di sicurezza più alti, ma per gli utenti privati francamente è solo noia, io non lo faccio, non mi freca.
|
||||
|
||||
<p>Il codice sorgente di Linux si può prendere ufficialmente <a href="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git" rel="noopener nofollow" target="_blank">dal Git principale</a>, <a href="https://github.com/torvalds/linux" rel="noopener nofollow" target="_blank">dal GitHub di Torvalds</a>, o <a href="https://kernel.org" rel="noopener nofollow" target="_blank">dal sito Kernel.org</a>. Preferisco l'ultima opzione, che ha le ultime versioni effettivamente necessarie messe belle in vista, fino al più vecchio branch supportato.</p>
|
||||
## 2\. Configurazione del kernel 🔩️
|
||||
|
||||
<p>Di versioni supportate in un dato momento, appunto, ce ne sono diverse. In genere, se non c'è motivo di installare un kernel vecchio, uno più nuovo è meglio; non troppo nuovo, però, perché a vivere sul bleeding edge si perde sangue, con gli occasionali problemi anche gravi che possono saltare fuori! Quindi, evito il branch <code class="prettyprint">mainline</code>, aggiornato giornalmente o quasi, come la peste, e in genere scelgo <code class="prettyprint">stable</code>, aggiornato con un po' di giorni in più. Altri utenti potrebbero legittimamente preferire la <code class="prettyprint">longterm</code> più recente (quella più in alto), per avere ancora più stabilità, ma io lo trovo inutile.</p>
|
||||
Configurare il kernel è la parte più intricata... perché non si può eseguire comandi per inerzia, ma bisogna _scegliere_ quello che effettivamente serve per, beh, avere il kernel con le opzioni bone. Ci sono, come accennato, infinite configurazioni, e diversi modi di usarle. Il punto principale è che c'è un file di testo enorme, con varie opzioni (principalmente booleane), che si può modificare.
|
||||
|
||||
<p>Per la riga di ogni versione, a parte la data, quello che interessa è il link [tarball], quindi si scarica quel file lì. Lo si può poi estrarre in una cartella comoda, tra i tanti modi, con il comando <code class="prettyprint">tar xvf <file></code>. Tutti i comandi da eseguire da questo punto saranno all'interno della cartella preparata.<br>
|
||||
<img src="{{< assetsRoot >}}/Media/Linux-Kernel/2024-09-02-kernel.org.png" alt="kernel.org"></p>
|
||||
Modificare quel coso a mano è da pazzi, però, perché esistono degli strumenti basati su menu ordinati, previsti nel processo di build, per gestire le varie possibilità. Anche qui, mezzo casino, ma la scelta è principalmente tra due programmi rispettivamente TUI e GUI, invocabili rispettivamente con `make menuconfig` e `make xconfig`. Io preferisco `xconfig` per comodità e, seppure ho usato in passato la configurazione a menu curses, ed è per me abbastanza intuitiva, a quanto pare per molti non lo è... e il come si usi quel menu non è argomento di oggi.
|
||||
|
||||
<p>...Bisognerebbe scaricare poi anche il file PGP, quando presente, che serve a verificare che il download sia integro e che provenga dai distributori legittimi. Realisticamente, però, già non tutte le versioni lo hanno (stando a sottintendere che sotto sotto...), il download si fa dal sito ufficiale con HTTPS (quindi difficile sarà alterato), è un archivio compresso (quindi se corrotto dovrebbe fallire l'estrazione), e fare la verifica è una rottura di scatole allucinante. Altri enti avranno requisiti di sicurezza più alti, ma per gli utenti privati francamente è solo noia, io non lo faccio, non mi freca.</p>
|
||||
<table><thead><tr><th>menuconfig vs xconfig</th></tr></thead><tbody><tr><td><img src="{{< assetsRoot >}}/Media/Linux-Kernel/menuconfig.png" alt="menuconfig"></td></tr><tr><td><img src="{{< assetsRoot >}}/Media/Linux-Kernel/xconfig.png" alt="xconfig"></td></tr></tbody></table>
|
||||
|
||||
Se non si fa altro, la configurazione che si va a modificare è quella predefinita del kernel come sta venendo sviluppato. Io non ho mai avuto problemi usando quella come base, ma, qualora ce ne fosse bisogno, oltre che quelle condivise da altri utenti, si può usare quella della distribuzione corrente. In base a come il sistema espone la configurazione del kernel, la si può (in genere) leggere con `cat /boot/config-$(uname r)`, `cat /boot/config`, o `zcat /proc/config.gz`. Basta scriverla (`>`) sul file `./.config` per applicarla alla configurazione corrente.
|
||||
|
||||
Io in questo caso volevo attivare il supporto al nuovo driver NTFS, quindi in xconfig premo CTRL+F, cerco "ntfs3" e imposto su (Y)es l'opzione che parla di "NTFS Read/Write _something something_"; poi, salvo la configurazione, chiudo, e... ho finito, incredibile.
|
||||
|
||||
<h2>2. Configurazione del kernel 🔩️</h2>
|
||||
## 3\. Compilazione del codice 🧑🍳️
|
||||
|
||||
<p>Configurare il kernel è la parte più intricata... perché non si può eseguire comandi per inerzia, ma bisogna <em>scegliere</em> quello che effettivamente serve per, beh, avere il kernel con le opzioni bone. Ci sono, come accennato, infinite configurazioni, e diversi modi di usarle. Il punto principale è che c'è un file di testo enorme, con varie opzioni (principalmente booleane), che si può modificare.</p>
|
||||
Con la compilazione, è il momento della noia, perché bisogna dare al computer semplicemente il tempo di macinare milioni (!) di righe di codice. Bene non va, ma almeno non è la fine del mondo: su qualunque PC non proprio scassone bisognerebbe farcela in meno di 4 ore. Sul Raspberry Pi 3 mi impiegò una giornata e mezza con la CPU a temperature nucleari (e anche per questo lo sconsiglio...), ma sul mio PC (Ryzen 3 3200G, 16 GB di RAM di cui pochi occupati dalla compilazione, su un SSD di fascia bassa) mi pare di aver impiegato 3 ore scarse a compilare la versione 6.10.7.
|
||||
|
||||
<p>Modificare quel coso a mano è da pazzi, però, perché esistono degli strumenti basati su menu ordinati, previsti nel processo di build, per gestire le varie possibilità. Anche qui, mezzo casino, ma la scelta è principalmente tra due programmi rispettivamente TUI e GUI, invocabili rispettivamente con <code class="prettyprint">make menuconfig</code> e <code class="prettyprint">make xconfig</code>. Io preferisco <code class="prettyprint">xconfig</code> per comodità e, seppure ho usato in passato la configurazione a menu curses, ed è per me abbastanza intuitiva, a quanto pare per molti non lo è... e il come si usi quel menu non è argomento di oggi.</p>
|
||||
Bisogna semplicemente eseguire `make`, e Linucs si farà da solo per l'architettura CPU corrente, viva la magia! Meglio ancora, `make -j$(nproc)` per usare tutti i core CPU disponibili... La manciata di ore, dovrei precisare, è misurata rispetto a questo, altrimenti sarebbe mezza giornata, dato che il mio PC ha 4 core; potrebbe fare molto prima avendo più core, perché può compilare ancora più file in parallelo efficacemente.
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>menuconfig vs xconfig</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td><img src="{{< assetsRoot >}}/Media/Linux-Kernel/menuconfig.png" alt="menuconfig"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="{{< assetsRoot >}}/Media/Linux-Kernel/xconfig.png" alt="xconfig"></td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
Almeno nei primi minuti, è bene tenere d'occhio il terminale, per vedere se si verifica qualche errore e la compilazione si arresta. A me errori assurdi non sono mai capitati, ma, come ho detto, se non si installano tutte le dipendenze, potrebbe uscire qualcosa di relativo a quelle... in tal caso, si installa quello che manca (facendo riferimento alla propria distribuzione), e si continua con il comando di prima.
|
||||
|
||||
<p>Se non si fa altro, la configurazione che si va a modificare è quella predefinita del kernel come sta venendo sviluppato. Io non ho mai avuto problemi usando quella come base, ma, qualora ce ne fosse bisogno, oltre che quelle condivise da altri utenti, si può usare quella della distribuzione corrente. In base a come il sistema espone la configurazione del kernel, la si può (in genere) leggere con <code class="prettyprint">cat /boot/config-$(uname r)</code>, <code class="prettyprint">cat /boot/config</code>, o <code class="prettyprint">zcat /proc/config.gz</code>. Basta scriverla (<code class="prettyprint">></code>) sul file <code class="prettyprint">./.config</code> per applicarla alla configurazione corrente.</p>
|
||||
Dipendentemente dalla configurazione, servirà avere più o meno spazio su disco per completare la compilazione. Mentre il kernel di per sé non pesa mai più di qualche MB (e i moduli qualche decina di MB), la cartella alla fine della fiera mi è arrivata a pesare ~22 GB, quindi è bene o assicurarsi di avere abbastanza spazio, oppure controllare di tanto in tanto che questo non stia finendo. E se finisce durante il processo, semplicemente si libera spazio e si continua, anche in questo caso, come prima. (A patto che non vi si corrompa il file system solo per l'essersi riempito al 100%, vero BTRFS?)
|
||||
|
||||
<p>Io in questo caso volevo attivare il supporto al nuovo driver NTFS, quindi in xconfig premo CTRL+F, cerco "ntfs3" e imposto su (Y)es l'opzione che parla di "NTFS Read/Write <em>something something</em>"; poi, salvo la configurazione, chiudo, e... ho finito, incredibile.</p>
|
||||
## 4\. Installazione di kernel e moduli 🏗️
|
||||
|
||||
<h2>3. Compilazione del codice 🧑🍳️</h2>
|
||||
Per compilare il kernel non sono necessari permessi di root, il che è comodo nel caso si voglia temporaneamente rubare il computer più potente di qualcun altro per fare il lavoro... ma, per installare, quelli ovviamente servono sul sistema corrente.
|
||||
|
||||
<p>Con la compilazione, è il momento della noia, perché bisogna dare al computer semplicemente il tempo di macinare milioni (!) di righe di codice. Bene non va, ma almeno non è la fine del mondo: su qualunque PC non proprio scassone bisognerebbe farcela in meno di 4 ore. Sul Raspberry Pi 3 mi impiegò una giornata e mezza con la CPU a temperature nucleari (e anche per questo lo sconsiglio...), ma sul mio PC (Ryzen 3 3200G, 16 GB di RAM di cui pochi occupati dalla compilazione, su un SSD di fascia bassa) mi pare di aver impiegato 3 ore scarse a compilare la versione 6.10.7.</p>
|
||||
Qui è non solo semplice, ma anche abbastanza veloce (massimo qualche minuto): eseguendo (come root) prima `make install`, e poi `INSTALL_MOD_STRIP=1 make install_modules`, verranno installati nei percorsi appropriati, rispettivamente (ammesso di non aver cambiato i nomi): l'immagine kernel (`vmlinuz-x.x.x-...`), di solito in `/boot` e i moduli, di solito in `/lib/modules/linux-x.x.x-...`. I moduli sono file separati dal kernel, perché vengono caricati dal sistema quando necessario... il punto è che alcuni tra i tanti servono a completare il boot, quindi vanno installati.
|
||||
|
||||
<p>Bisogna semplicemente eseguire <code class="prettyprint">make</code>, e Linucs si farà da solo per l'architettura CPU corrente, viva la magia! Meglio ancora, <code class="prettyprint">make -j$(nproc)</code> per usare tutti i core CPU disponibili... La manciata di ore, dovrei precisare, è misurata rispetto a questo, altrimenti sarebbe mezza giornata, dato che il mio PC ha 4 core; potrebbe fare molto prima avendo più core, perché può compilare ancora più file in parallelo efficacemente.</p>
|
||||
Bisogna anche preparare il cosiddetto file system di init, o ramdisk iniziale; normalmente finisce anch'esso in `/boot`, sotto il nome di `initrd.img-x.x.x-...`. E questo passaggio sarebbe abbastanza scomodo se non esistesse `kernel-install`, script incluso con systemd, o la sua alternativa `installkernel`. Avendo systemd, almeno il primo dovrebbe già essere installato, e in quel caso (assumendo i nomi di prima) basta fare (come root) `kernel-install add x.x.x-... /boot/vmlinuz-x.x.x-...`; alternativamente, con il secondo, `installkernel x.x.x-... /boot/vmlinuz-x.x.x-...`.<sup id="fnref1"><a href="#fn1">1</a></sup>
|
||||
|
||||
<p>Almeno nei primi minuti, è bene tenere d'occhio il terminale, per vedere se si verifica qualche errore e la compilazione si arresta. A me errori assurdi non sono mai capitati, ma, come ho detto, se non si installano tutte le dipendenze, potrebbe uscire qualcosa di relativo a quelle... in tal caso, si installa quello che manca (facendo riferimento alla propria distribuzione), e si continua con il comando di prima.</p>
|
||||
Nota: chi sviluppa col kernel (non chi sta leggendo questo post, temo) potrebbe voler non settare la variabile d'ambiente `INSTALL_MOD_STRIP=1`, perché debuggare senza i simboli di debug, che quella flag toglie, è difficile... ma per utenti comuni mortali come me sprecano solo spazio (tant'è che le distribuzioni li pacchettizzano a parte). Inoltre, chi non necessariamente sviluppa col kernel, ma deve compilare moduli esterni o fare altri magheggi, dovrebbe realisticamente anche installare i file header corrispondenti sul sistema: `make headers_install` (sempre come root).
|
||||
|
||||
<p>Dipendentemente dalla configurazione, servirà avere più o meno spazio su disco per completare la compilazione. Mentre il kernel di per sé non pesa mai più di qualche MB (e i moduli qualche decina di MB), la cartella alla fine della fiera mi è arrivata a pesare ~22 GB, quindi è bene o assicurarsi di avere abbastanza spazio, oppure controllare di tanto in tanto che questo non stia finendo. E se finisce durante il processo, semplicemente si libera spazio e si continua, anche in questo caso, come prima. (A patto che non vi si corrompa il file system solo per l'essersi riempito al 100%, vero BTRFS?)</p>
|
||||
Almeno su distribuzioni "complete", `make install` e poi `kernel-install` dovrebbero aver già configurato anche il bootloader, almeno avendo GRUB. Nel caso di distribuzioni, per così dire, "più fai-da-te" (che io non uso, _btw_), così come configurazioni di avvio più insolite... non è il caso mio, quindi non so nulla, e non dirò nulla. Le configurazioni di avvio sono una bestia per un'altra volta.
|
||||
|
||||
<h2>4. Installazione di kernel e moduli 🏗️</h2>
|
||||
## 5\. Prova del nocciolo 💥️
|
||||
|
||||
<p>Per compilare il kernel non sono necessari permessi di root, il che è comodo nel caso si voglia temporaneamente rubare il computer più potente di qualcun altro per fare il lavoro... ma, per installare, quelli ovviamente servono sul sistema corrente.</p>
|
||||
Se il kernel è installato, e il bootloader è stato correttamente configurato, allora basta semplicemente riavviare il computer per godere. È bene ricordare che, nel caso si stia usando GRUB, certi dicono che il nuovo kernel non viene selezionato come predefinito, e bisogna sceglierlo a mano dal menu di avvio... ma nel mio caso, su Linux Mint Debian Edition, mi è sembrato che invece fosse stato proprio impostato come default.
|
||||
|
||||
<p>Qui è non solo semplice, ma anche abbastanza veloce (massimo qualche minuto): eseguendo (come root) prima <code class="prettyprint">make install</code>, e poi <code class="prettyprint">INSTALL_MOD_STRIP=1 make install_modules</code>, verranno installati nei percorsi appropriati, rispettivamente (ammesso di non aver cambiato i nomi): l'immagine kernel (<code class="prettyprint">vmlinuz-x.x.x-...</code>), di solito in <code class="prettyprint">/boot</code> e i moduli, di solito in <code class="prettyprint">/lib/modules/linux-x.x.x-...</code>. I moduli sono file separati dal kernel, perché vengono caricati dal sistema quando necessario... il punto è che alcuni tra i tanti servono a completare il boot, quindi vanno installati.</p>
|
||||
Ancora, se, ringraziando il pinguinone, il sistema alla fine parte, basta usare il comando `uname -r` per controllare la versione del kernel in esecuzione. A questo punto, è bene verificare che la configurazione _desiderata_ stia effettivamente funzionando... ma il come fare ciò cambia da funzionalità a funzionalità, caso per caso. Per confermare quantomeno che la configurazione _specificata_ ci sia, basta controllare la configurazione del kernel corrente come al punto 2.
|
||||
|
||||
<p>Bisogna anche preparare il cosiddetto file system di init, o ramdisk iniziale; normalmente finisce anch'esso in <code class="prettyprint">/boot</code>, sotto il nome di <code class="prettyprint">initrd.img-x.x.x-...</code>. E questo passaggio sarebbe abbastanza scomodo se non esistesse <code class="prettyprint">kernel-install</code>, script incluso con systemd, o la sua alternativa <code class="prettyprint">installkernel</code>. Avendo systemd, almeno il primo dovrebbe già essere installato, e in quel caso (assumendo i nomi di prima) basta fare (come root) <code class="prettyprint">kernel-install add x.x.x-... /boot/vmlinuz-x.x.x-...</code>; alternativamente, con il secondo, <code class="prettyprint">installkernel x.x.x-... /boot/vmlinuz-x.x.x-...</code>.<sup id="fnref1"><a class="footnote-ref" href="#fn1">1</a></sup></p>
|
||||
A questo punto, nel caso funzioni tutto e non servano altre modifiche, si può anche cancellare l'enorme cartella di compilazione, e il kernel rimarrà. Nel caso si dovesse in futuro anche disinstallare il kernel, basta cancellare normalmente i file installati prima, e riconfigurare il bootloader in modo appropriato.
|
||||
|
||||
<p>Nota: chi sviluppa col kernel (non chi sta leggendo questo post, temo) potrebbe voler non settare la variabile d'ambiente <code class="prettyprint">INSTALL_MOD_STRIP=1</code>, perché debuggare senza i simboli di debug, che quella flag toglie, è difficile... ma per utenti comuni mortali come me sprecano solo spazio (tant'è che le distribuzioni li pacchettizzano a parte). Inoltre, chi non necessariamente sviluppa col kernel, ma deve compilare moduli esterni o fare altri magheggi, dovrebbe realisticamente anche installare i file header corrispondenti sul sistema: <code class="prettyprint">make headers_install</code> (sempre come root).</p>
|
||||
## Conclusione 🎊️
|
||||
|
||||
<p>Almeno su distribuzioni "complete", <code class="prettyprint">make install</code> e poi <code class="prettyprint">kernel-install</code> dovrebbero aver già configurato anche il bootloader, almeno avendo GRUB. Nel caso di distribuzioni, per così dire, "più fai-da-te" (che io non uso, <em>btw</em>), così come configurazioni di avvio più insolite... non è il caso mio, quindi non so nulla, e non dirò nulla. Le configurazioni di avvio sono una bestia per un'altra volta.</p>
|
||||
Poter compilare il kernel dal codice sorgente è un'altra di quelle cose che noi utenti Linux possiamo fare, e che gli utenti Windows francamente **non** ci invidiano. Ma è perché a loro piace vincere facile, col loro NT, basato su un design a microkernel... proprio così, ora che il punto dell'articolo è finito posso dire scemenze a ruota come piace a me.
|
||||
|
||||
<h2>5. Prova del nocciolo 💥️</h2>
|
||||
Copium a parte, compilare Linux può essere qualcosa di divertente da fare almeno una volta. Se si capita in situazioni scomode come me va fatto, c'è poco da fare; però, se ci si vuole semplicemente divertire in modo stupido, magari una delle tante cose da poter fare è compilare un kernel ultra-specifico e super-ottimizzato per la propria macchina, o per scopi di virtualizzazione. E, certo, consuma un po' di energia, ma mai quanto minare criptovalute o renderizzare missili nucleari in Blender!
|
||||
|
||||
<p>Se il kernel è installato, e il bootloader è stato correttamente configurato, allora basta semplicemente riavviare il computer per godere. È bene ricordare che, nel caso si stia usando GRUB, certi dicono che il nuovo kernel non viene selezionato come predefinito, e bisogna sceglierlo a mano dal menu di avvio... ma nel mio caso, su Linux Mint Debian Edition, mi è sembrato che invece fosse stato proprio impostato come default.</p>
|
||||
## {{% i18n notes-refs %}}
|
||||
|
||||
<p>Ancora, se, ringraziando il pinguinone, il sistema alla fine parte, basta usare il comando <code class="prettyprint">uname -r</code> per controllare la versione del kernel in esecuzione. A questo punto, è bene verificare che la configurazione <em>desiderata</em> stia effettivamente funzionando... ma il come fare ciò cambia da funzionalità a funzionalità, caso per caso. Per confermare quantomeno che la configurazione <em>specificata</em> ci sia, basta controllare la configurazione del kernel corrente come al punto 2.</p>
|
||||
_L'immagine decorativa di copertina è ottenuta tramite [l'intelligenza artificiale generativa di Microsoft](https://www.bing.com/images/create/beach-with-sand-and-rocks2c-computer-chips-and-wire/1-66d5a1ef220c4fae8bd786e10b88ae1e?id=Rt9hCy8E%2Fg%2BZK8rWhgwIPQ%3D%3D&view=detailv2&idpp=genimg)._
|
||||
|
||||
<p>A questo punto, nel caso funzioni tutto e non servano altre modifiche, si può anche cancellare l'enorme cartella di compilazione, e il kernel rimarrà. Nel caso si dovesse in futuro anche disinstallare il kernel, basta cancellare normalmente i file installati prima, e riconfigurare il bootloader in modo appropriato.</p>
|
||||
* A Guide to Compiling the Linux Kernel All By Yourself: [https://itsfoss.com/compile-linux-kernel/](https://itsfoss.com/compile-linux-kernel/)
|
||||
* Building and Installing Custom Linux Kernels (Rocky Linux): [https://docs.rockylinux.org/guides/custom-linux-kernel/](https://docs.rockylinux.org/guides/custom-linux-kernel/)
|
||||
* How to Build Linux Kernel From Scratch {Step-By-Step Guide}: [https://phoenixnap.com/kb/build-linux-kernel](https://phoenixnap.com/kb/build-linux-kernel)
|
||||
* The kernel build system: [https://www.kernel.org/doc/html/v6.6/kbuild/index.html](https://www.kernel.org/doc/html/v6.6/kbuild/index.html)
|
||||
|
||||
<h2>Conclusione 🎊️</h2>
|
||||
---
|
||||
|
||||
<p>Poter compilare il kernel dal codice sorgente è un'altra di quelle cose che noi utenti Linux possiamo fare, e che gli utenti Windows francamente <strong>non</strong> ci invidiano. Ma è perché a loro piace vincere facile, col loro NT, basato su un design a microkernel... proprio così, ora che il punto dell'articolo è finito posso dire scemenze a ruota come piace a me.</p>
|
||||
|
||||
<p>Copium a parte, compilare Linux può essere qualcosa di divertente da fare almeno una volta. Se si capita in situazioni scomode come me va fatto, c'è poco da fare; però, se ci si vuole semplicemente divertire in modo stupido, magari una delle tante cose da poter fare è compilare un kernel ultra-specifico e super-ottimizzato per la propria macchina, o per scopi di virtualizzazione. E, certo, consuma un po' di energia, ma mai quanto minare criptovalute o renderizzare missili nucleari in Blender!</p>
|
||||
|
||||
|
||||
|
||||
<h2>{{% i18n notes-refs %}}</h2>
|
||||
|
||||
<p><em>L'immagine decorativa di copertina è ottenuta tramite <a href="https://www.bing.com/images/create/beach-with-sand-and-rocks2c-computer-chips-and-wire/1-66d5a1ef220c4fae8bd786e10b88ae1e?id=Rt9hCy8E%2Fg%2BZK8rWhgwIPQ%3D%3D&view=detailv2&idpp=genimg" rel="noopener nofollow" target="_blank">l'intelligenza artificiale generativa di Microsoft</a>.</em></p>
|
||||
|
||||
<ul>
|
||||
<li>The kernel build system: <a href="https://www.kernel.org/doc/html/v6.6/kbuild/index.html" rel="noopener nofollow" target="_blank">https://www.kernel.org/doc/html/v6.6/kbuild/index.html</a></li>
|
||||
<li>A Guide to Compiling the Linux Kernel All By Yourself: <a href="https://itsfoss.com/compile-linux-kernel/" rel="noopener nofollow" target="_blank">https://itsfoss.com/compile-linux-kernel/</a></li>
|
||||
<li>Building and Installing Custom Linux Kernels (Rocky Linux): <a href="https://docs.rockylinux.org/guides/custom-linux-kernel/" rel="noopener nofollow" target="_blank">https://docs.rockylinux.org/guides/custom-linux-kernel/</a></li>
|
||||
</ul>
|
||||
|
||||
<div class="footnotes">
|
||||
<ol>
|
||||
|
||||
<li id="fn1">
|
||||
<p>Installkernel e kernel-install (Gentoo Linux): <a href="https://wiki.gentoo.org/wiki/Installkernel" rel="noopener nofollow" target="_blank">https://wiki.gentoo.org/wiki/Installkernel</a> <a href="#fnref1">↩</a></p>
|
||||
</li>
|
||||
|
||||
</ol>
|
||||
</div>
|
||||
1. Installkernel e kernel-install (Gentoo Linux): [https://wiki.gentoo.org/wiki/Installkernel](https://wiki.gentoo.org/wiki/Installkernel) [↩](#fnref1)
|
||||
|
Reference in New Issue
Block a user