This commit is contained in:
octospacc 2024-09-02 18:44:31 +02:00
parent 8516703bc4
commit 00b4dd68f6
11 changed files with 108 additions and 51 deletions

1
.gitignore vendored
View File

@ -8,6 +8,7 @@
#/Scripts/package-lock.json #/Scripts/package-lock.json
/Scripts/node_modules/* /Scripts/node_modules/*
/Scripts.out/* /Scripts.out/*
/Scripts/Lib/translate-shell.bash
*.pyc *.pyc
*.tmp *.tmp
tmp.* tmp.*

View File

@ -5,7 +5,7 @@ cd "${swd}/.."
export sitocttEnv=Offline export sitocttEnv=Offline
export HUGO_ENV=production export HUGO_ENV=production
sh "${swd}/Clean.sh" sh "${swd}/Clean.sh"
sh "${swd}/Update.sh" sh "${swd}/Build.sh"
cd ./build/public cd ./build/public
#zip -9 -r ./offline.zip * #zip -9 -r ./offline.zip *

View File

@ -4,7 +4,7 @@ cd "${swd}/.."
export HUGO_ENV=production export HUGO_ENV=production
sh "${swd}/Clean.sh" sh "${swd}/Clean.sh"
sh "${swd}/Update.sh" sh "${swd}/Build.sh"
sh "${swd}/Redirects.sh" sh "${swd}/Redirects.sh"
cd "${owd}" cd "${owd}"

View File

@ -61,4 +61,7 @@ cd ./Scripts
PIP_BREAK_SYSTEM_PACKAGES=1 "${Python3}" -m pip install -U -r ./requirements.txt PIP_BREAK_SYSTEM_PACKAGES=1 "${Python3}" -m pip install -U -r ./requirements.txt
#npm install #npm install
cd ./Lib
wget -O ./translate-shell.bash https://git.io/trans
cd "${owd}" cd "${owd}"

View File

@ -1,8 +1,9 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
DestinationLanguages = ["it", "en"] # "fr", "de", "eo", "es" DestinationLanguages = ["it", "en", "fr"] # "de", "eo", "es"
IncludePaths = ["/"] IncludePaths = ["/"]
ExcludePaths = ["/Categories"] ExcludePaths = ["/categories"] # "/miscellanea"
import subprocess
from os import getcwd, listdir from os import getcwd, listdir
from os.path import dirname, realpath, isfile, isdir from os.path import dirname, realpath, isfile, isdir
from pathlib import Path from pathlib import Path
@ -53,32 +54,63 @@ def find_documents(folder_path):
documents[document].append(destination_language) documents[document].append(destination_language)
return documents return documents
def fix_frontmatter(translated_text, reference_text):
result = ''
reference_lines = reference_text.splitlines()
for [index, translated_line] in enumerate(translated_text.splitlines()):
if translated_line.strip() and (translated_line.lstrip() == translated_line):
reference_line = reference_lines[index]
line_key = reference_line.split('=')[0]
if line_key.strip().lower() in ["draft", "date", "lastmod"]:
translated_line = reference_line
else:
line_value = '='.join(translated_line.split('=')[1:])
translated_line = line_key
if line_value:
translated_line += ('=' + line_value)
result += (translated_line + '\n')
return result
def translate_document(document_path, documents): def translate_document(document_path, documents):
printf(f'* {document_path} ->') printf(f"* {document_path} ->")
for destination_language in documents[document_path]: for destination_language in documents[document_path]:
source_language = get_source_language(document_path) source_language = get_source_language(document_path)
original_text = open(("../content/" + document_path), 'r').read()
printf('', destination_language) printf('', destination_language)
try: try:
translated = translate( is_python_translator = True
open(('../content/' + document_path), 'r').read(), translated = translate(original_text, destination_language, source_language)
destination_language,
source_language)
if not len(translated.results): if not len(translated.results):
raise Exception("Unhandled error") raise Exception("Unhandled error")
printf('')
except Exception as exception: except Exception as exception:
printf('', exception) printf('', exception)
continue try:
translated_text = translated.results[0].paraphrase is_python_translator = False
translated = subprocess.run(
("bash", "../Scripts/Lib/translate-shell.bash", "-brief",
"-t", destination_language, "-s", source_language,
("file://" + "../content/" + document_path)),
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
if translated.stderr:
raise Exception(translated.stderr.decode())
except Exception as exception:
printf('', exception)
continue
printf('')
translated_text = (translated.results[0].paraphrase
if is_python_translator else translated.stdout.decode())
text_header = translated_text.strip().splitlines()[0].strip() text_header = translated_text.strip().splitlines()[0].strip()
translated_preamble = ("\n\n{{< noticeAutomaticTranslation " + source_language + " >}}\n\n") translated_preamble = ("\n\n{{< noticeAutomaticTranslation " + source_language + " >}}\n\n")
if text_header in ["---", "+++"]: if text_header in ["---", "+++"]:
text_tokens = translated_text.split(text_header) text_tokens = translated_text.split(text_header)
translated_text = ( translated_body = text_header.join(text_tokens[2:])
text_header + text_tokens[1] + text_header + translated_text = (text_header +
translated_preamble + fix_frontmatter(text_tokens[1], original_text.split(text_header)[1]) +
text_header.join(text_tokens[2:])) text_header)
else: if translated_body.strip():
translated_text += (translated_preamble + translated_body)
elif translated_text.strip():
translated_text = (translated_preamble + translated_text) translated_text = (translated_preamble + translated_text)
destination_path = make_destination_path(document_path, destination_language) destination_path = make_destination_path(document_path, destination_language)
Path('/'.join(destination_path.split('/')[:-1])).mkdir(parents=True, exist_ok=True) Path('/'.join(destination_path.split('/')[:-1])).mkdir(parents=True, exist_ok=True)

View File

@ -35,6 +35,11 @@ alt = "✨sitoctt"
file = "Sites/sitoctt-1.png" file = "Sites/sitoctt-1.png"
href = "/it/miscellanea/Raccolta-Siti-Internet/#il-mio" href = "/it/miscellanea/Raccolta-Siti-Internet/#il-mio"
[[10-site]]
alt = "Sign my guestoobk"
file = "Sign-guestbook.gif"
href = "https://listed.to/@u8/guestbook"
[[10-site]] [[10-site]]
alt = "Warning: Page contains JavaScript!" alt = "Warning: Page contains JavaScript!"
file = "Warning-Page-contains-JavaScript.png" file = "Warning-Page-contains-JavaScript.png"

View File

@ -4,6 +4,7 @@ Date = 2023-04-16
Downsync = "/it/blog/Che-Impatto-Nuova-Legge-Anti-Pirateria-Italiana.html" Downsync = "/it/blog/Che-Impatto-Nuova-Legge-Anti-Pirateria-Italiana.html"
Aliases = [ "/Posts/2023-04-16-Che-Impatto-Nuova-Legge-Anti-Pirateria-Italiana.html" ] Aliases = [ "/Posts/2023-04-16-Che-Impatto-Nuova-Legge-Anti-Pirateria-Italiana.html" ]
Description = "Hanno approvato in Italia una legge per un contrasto forte alla pirateria. Il fatto è che comporta rischi importanti per gli internauti." Description = "Hanno approvato in Italia una legge per un contrasto forte alla pirateria. Il fatto è che comporta rischi importanti per gli internauti."
Featured_Image = "@/Media/Misc/Keep-Seeding-Monitor.webp"
Categories = [ "Internet" ] Categories = [ "Internet" ]
Lastmod = 2023-04-17 Lastmod = 2023-04-17
+++ +++
@ -85,5 +86,3 @@ Forse non si obietterebbe granché nemmeno se, andando contro le piattaforme che
<p>Ma in Italia hanno già fatto <em>saltare in aria</em> TNTVillage, e io non voglio la <strong>decimazione</strong> anche di tutte le altre <strong>piazze online</strong> create <strong>dalla gente per la gente</strong> - senza scopo di lucro, e anzi <strong>spesso a perdere</strong>, sia in tempo che in denaro - solo perché <strong>a qualcuno da fastidio</strong> che si utilizzi la <strong>funzionalità principale del Web</strong>: i collegamenti ipertestuali, inventati per favorire la <strong>condivisione libera e gratuita</strong> di cultura ed intrattenimento, <strong>senza barriere</strong>.</p> <p>Ma in Italia hanno già fatto <em>saltare in aria</em> TNTVillage, e io non voglio la <strong>decimazione</strong> anche di tutte le altre <strong>piazze online</strong> create <strong>dalla gente per la gente</strong> - senza scopo di lucro, e anzi <strong>spesso a perdere</strong>, sia in tempo che in denaro - solo perché <strong>a qualcuno da fastidio</strong> che si utilizzi la <strong>funzionalità principale del Web</strong>: i collegamenti ipertestuali, inventati per favorire la <strong>condivisione libera e gratuita</strong> di cultura ed intrattenimento, <strong>senza barriere</strong>.</p>
<hr> <hr>
<p><img src="{{< assetsRoot >}}/Media/Misc/Keep-Seeding-Monitor.webp" alt="&quot;Keep seeding&quot;"></p>

View File

@ -134,7 +134,7 @@ Il diario segreto, inteso come un quaderno o un taccuino in cui si annotano pens
<h2>{{% i18n notes-refs %}}</h2> <h2>{{% i18n notes-refs %}}</h2>
<p><em>L'immagine decorativa di copertina è ottenuta tramite <a href="https://www.bing.com/images/create/a-used2c-ruined-diary-book2c-floating-in-the-air-abo/1-6676dc0085154dc0af66cfe0083bfbc1?id=ik6UsyrKqidtvAmyv7FwFw%3d%3d&amp;view=detailv2&amp;idpp=genimg&amp;thId=OIG2.b9jZ_Y2byFXVtqOG86OY&amp;FORM=GCRIDP&amp;mode=overlay" rel="noopener nofollow" target="_blank">l'intelligenza artificiale generativa di Microsoft</a>.</em></p> <p><em>L'immagine decorativa di copertina è ottenuta tramite <a href="https://www.bing.com/images/create/a-used2c-ruined-diary-book2c-floating-in-the-air-abo/1-6676dc0085154dc0af66cfe0083bfbc1?id=%2Bsy5Em%2B0Qfp%2Bei%2BELZ579w%3D%3D&amp;view=detailv2&amp;idpp=genimg&amp;thid=OIG2.b9jZ_Y2byFXVtqOG86OY&amp;form=GCRIDP" rel="noopener nofollow" target="_blank">l'intelligenza artificiale generativa di Microsoft</a>.</em></p>
<div class="footnotes"> <div class="footnotes">
<ol> <ol>

View File

@ -4,7 +4,7 @@ Aliases = [
"/Posts/Archive/2022-05-07-Gli-Inaspettati-Vantaggi-della-Chiavetta-Linux.html", "/Posts/Archive/2022-05-07-Gli-Inaspettati-Vantaggi-della-Chiavetta-Linux.html",
] ]
Categories = [ "Tecnologia" ] Categories = [ "Tecnologia" ]
Data = 2022-05-07 Date = 2022-05-07
Lastmod = 2022-08-13 Lastmod = 2022-08-13
#Template = "loli-documentatrice.html" #Template = "loli-documentatrice.html"
+++ +++
@ -93,4 +93,4 @@ Riporto qui i siti Web di alcune distribuzioni che _non_ ho menzionato nel testo
### 🏷️ Note/Riferimenti ### 🏷️ Note/Riferimenti
[^ Aggiornamento 2022-08-13]: **Aggiornamento del 2022-08-13**: Ho importato questo articolo dal mio vecchio blog (<https://noblogo.org/loli-documentatrice/gli-inaspettati-vantaggi-della-chiavetta-linux>), per preservarlo meglio e per testare alcune cose. Ne ho approfittato per, oltre a migliorare la formattazione, cambiare in parte la forma di alcune frasi. Il contenuto resta praticamente uguale. **Aggiornamento del 2022-08-13**: Ho importato questo articolo dal mio vecchio blog (<https://noblogo.org/loli-documentatrice/gli-inaspettati-vantaggi-della-chiavetta-linux>), per preservarlo meglio e per testare alcune cose. Ne ho approfittato per, oltre a migliorare la formattazione, cambiare in parte la forma di alcune frasi. Il contenuto resta praticamente uguale.

View File

@ -1,23 +1,25 @@
+++ +++
Title = "🌽 Compilare e installare il kernel Linux da sorgente" Title = "🌽 Compilare e installare il kernel Linux da sorgente"
Date = 2024-09-01 Date = 2024-09-01
Description = "Indicazioni generali su come si compila Linux per computer generici, utile per risolvere problemi o ottenere funzionalità speciali."
Featured_Image = "@/Media/Decor/dall-e_44be7d57-5b1d-44ff-bf54-421d95165b5f.jpeg"
Downsync = "/it/note/Compilare-Installare-Linux-Kernel.html" Downsync = "/it/note/Compilare-Installare-Linux-Kernel.html"
Categories = [ "Linux" ] Categories = [ "Linux" ]
+++ +++
<!-- Autogenerated by ListedDownsync.js. Do not edit (unless also set "% Downsync = False") - it would be overwritten. --> <!-- 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> <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>
<h2>Perché ricompilare il kernel?</h2> <h2>Perché ricompilare il kernel? 😯️</h2>
<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 cosidetti moduli non copre tutte le situazioni possibili (almeno non a livello pratici), 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> <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>
<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 Linux, con tremila dipendenze sempre in conflitto — ma ci sono dettagli magari non proprio immediati nel procedimento, quindi... ecco la mia nota!</p> <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>
<h2>0. Partenza e prerequisiti</h2> <h2>0. Partenza e prerequisiti 📦️</h2>
<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> <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>
@ -27,23 +29,27 @@ Categories = [ "Linux" ]
<p>Debian e derivate (<code class="prettyprint">apt</code>):</p>
<ul> <ul>
<li>Debian e derivate (<code class="prettyprint">apt</code>): <code class="prettyprint">build-essential libelf-dev</code> (obbligatori); <code class="prettyprint">ncurses-dev</code> (per usare la configurazione a menu TUI).</li> <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> </ul>
<h2>1. Ottenimento del codice</h2> <h2>1. Ottenimento del codice ⛓️</h2>
<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> <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>
<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> <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>
<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 &lt;file&gt;</code>.</p> <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 &lt;file&gt;</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>
<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 in tutto ciò è 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> <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>
<h2>2. Configurazione del kernel</h2> <h2>2. Configurazione del kernel 🔩️</h2>
<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> <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>
@ -58,9 +64,6 @@ Categories = [ "Linux" ]
<td><img src="{{< assetsRoot >}}/Media/Linux-Kernel/menuconfig.png" alt="menuconfig"></td> <td><img src="{{< assetsRoot >}}/Media/Linux-Kernel/menuconfig.png" alt="menuconfig"></td>
</tr> </tr>
<tr> <tr>
<td>vs</td>
</tr>
<tr>
<td><img src="{{< assetsRoot >}}/Media/Linux-Kernel/xconfig.png" alt="xconfig"></td> <td><img src="{{< assetsRoot >}}/Media/Linux-Kernel/xconfig.png" alt="xconfig"></td>
</tr> </tr>
</tbody></table> </tbody></table>
@ -69,29 +72,29 @@ Categories = [ "Linux" ]
<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> <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>
<h2>3. Compilazione del codice</h2> <h2>3. Compilazione del codice 🧑‍🍳️</h2>
<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> <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>
<p>Bisogna semplicemente eseguire <code class="prettyprint">make</code>, e Linuc si farà da solo, 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> <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>
<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> <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>
<p>Dipendentemente dalla configurazione, servirà avere più o meno spazio su disco per completare. Nel mio caso, alla fine della compilazione la cartella è arrivata a pesare ~25 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> <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>
<h2>4. Installazione di kernel e moduli</h2> <h2>4. Installazione di kernel e moduli 🏗️</h2>
<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> <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>
<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> <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>
<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>.</p> <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>
<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> <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>
<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> <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>
<h2>5. Prova del nocciolo</h2> <h2>5. Prova del nocciolo 💥️</h2>
<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> <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>
@ -99,18 +102,30 @@ Categories = [ "Linux" ]
<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> <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>
<h2>Conclusione</h2> <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>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 volete semplicemente divertirvi 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 una macchina virtuale. E certo, consuma un po' di energia, ma mai quanto minare criptovalute o renderizzare missili nucleari in Blender!</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> <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&amp;view=detailv2&amp;idpp=genimg" rel="noopener nofollow" target="_blank">l'intelligenza artificiale generativa di Microsoft</a>.</em></p>
<ul> <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>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> <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>
<li>Installkernel/kernel-install (Gentoo Linux): <a href="https://wiki.gentoo.org/wiki/Installkernel" rel="noopener nofollow" target="_blank">https://wiki.gentoo.org/wiki/Installkernel</a></li>
</ul> </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>&nbsp;<a href="#fnref1"></a></p>
</li>
</ol>
</div>

View File

@ -23,7 +23,7 @@ theme = ["hugo-notice", "ananke"]
languageName = "Italiano" languageName = "Italiano"
weight = 1 weight = 1
[languages.it.params] [languages.it.params]
languageEmoji = "🇮🇹" languageEmoji = "🇮🇹✨️"
[languages.en] [languages.en]
contentDir = "content/en" contentDir = "content/en"
languageDirection = "ltr" languageDirection = "ltr"
@ -31,11 +31,13 @@ theme = ["hugo-notice", "ananke"]
weight = 2 weight = 2
[languages.en.params] [languages.en.params]
languageEmoji = "🇬🇧" languageEmoji = "🇬🇧"
#[languages.fr] [languages.fr]
# contentDir = "content/fr" contentDir = "content/fr"
# languageDirection = "ltr" languageDirection = "ltr"
# languageName = "Français" languageName = "Français"
# weight = 3 weight = 3
[languages.fr.params]
languageEmoji = "🇫🇷️"
[markup] [markup]
[markup.goldmark] [markup.goldmark]
@ -50,7 +52,7 @@ theme = ["hugo-notice", "ananke"]
favicon = "/favicon.ico" favicon = "/favicon.ico"
author = "OctoSpacc" author = "OctoSpacc"
recent_posts_number = 5 recent_posts_number = 5
other_posts_number = 5 other_posts_number = 6
toc = true toc = true
show_reading_time = true show_reading_time = true
canonicalUrlOverride = "https://sitoctt.octt.eu.org" canonicalUrlOverride = "https://sitoctt.octt.eu.org"