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/node_modules/*
/Scripts.out/*
/Scripts/Lib/translate-shell.bash
*.pyc
*.tmp
tmp.*

View File

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

View File

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

View File

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

View File

@ -1,8 +1,9 @@
#!/usr/bin/env python3
DestinationLanguages = ["it", "en"] # "fr", "de", "eo", "es"
DestinationLanguages = ["it", "en", "fr"] # "de", "eo", "es"
IncludePaths = ["/"]
ExcludePaths = ["/Categories"]
ExcludePaths = ["/categories"] # "/miscellanea"
import subprocess
from os import getcwd, listdir
from os.path import dirname, realpath, isfile, isdir
from pathlib import Path
@ -53,32 +54,63 @@ def find_documents(folder_path):
documents[document].append(destination_language)
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):
printf(f'* {document_path} ->')
printf(f"* {document_path} ->")
for destination_language in documents[document_path]:
source_language = get_source_language(document_path)
original_text = open(("../content/" + document_path), 'r').read()
printf('', destination_language)
try:
translated = translate(
open(('../content/' + document_path), 'r').read(),
destination_language,
source_language)
is_python_translator = True
translated = translate(original_text, destination_language, source_language)
if not len(translated.results):
raise Exception("Unhandled error")
printf('')
except Exception as exception:
printf('', exception)
try:
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
translated_text = translated.results[0].paraphrase
printf('')
translated_text = (translated.results[0].paraphrase
if is_python_translator else translated.stdout.decode())
text_header = translated_text.strip().splitlines()[0].strip()
translated_preamble = ("\n\n{{< noticeAutomaticTranslation " + source_language + " >}}\n\n")
if text_header in ["---", "+++"]:
text_tokens = translated_text.split(text_header)
translated_text = (
text_header + text_tokens[1] + text_header +
translated_preamble +
text_header.join(text_tokens[2:]))
else:
translated_body = text_header.join(text_tokens[2:])
translated_text = (text_header +
fix_frontmatter(text_tokens[1], original_text.split(text_header)[1]) +
text_header)
if translated_body.strip():
translated_text += (translated_preamble + translated_body)
elif translated_text.strip():
translated_text = (translated_preamble + translated_text)
destination_path = make_destination_path(document_path, destination_language)
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"
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]]
alt = "Warning: Page contains JavaScript!"
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"
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."
Featured_Image = "@/Media/Misc/Keep-Seeding-Monitor.webp"
Categories = [ "Internet" ]
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>
<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>
<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">
<ol>

View File

@ -4,7 +4,7 @@ Aliases = [
"/Posts/Archive/2022-05-07-Gli-Inaspettati-Vantaggi-della-Chiavetta-Linux.html",
]
Categories = [ "Tecnologia" ]
Data = 2022-05-07
Date = 2022-05-07
Lastmod = 2022-08-13
#Template = "loli-documentatrice.html"
+++
@ -93,4 +93,4 @@ Riporto qui i siti Web di alcune distribuzioni che _non_ ho menzionato nel testo
### 🏷️ 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"
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"
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>
<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>
@ -27,23 +29,27 @@ Categories = [ "Linux" ]
<p>Debian e derivate (<code class="prettyprint">apt</code>):</p>
<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>
<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>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>
@ -58,9 +64,6 @@ Categories = [ "Linux" ]
<td><img src="{{< assetsRoot >}}/Media/Linux-Kernel/menuconfig.png" alt="menuconfig"></td>
</tr>
<tr>
<td>vs</td>
</tr>
<tr>
<td><img src="{{< assetsRoot >}}/Media/Linux-Kernel/xconfig.png" alt="xconfig"></td>
</tr>
</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>
<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>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>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>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>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>
@ -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>
<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>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>
<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>
<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>
<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>
<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"
weight = 1
[languages.it.params]
languageEmoji = "🇮🇹"
languageEmoji = "🇮🇹✨️"
[languages.en]
contentDir = "content/en"
languageDirection = "ltr"
@ -31,11 +31,13 @@ theme = ["hugo-notice", "ananke"]
weight = 2
[languages.en.params]
languageEmoji = "🇬🇧"
#[languages.fr]
# contentDir = "content/fr"
# languageDirection = "ltr"
# languageName = "Français"
# weight = 3
[languages.fr]
contentDir = "content/fr"
languageDirection = "ltr"
languageName = "Français"
weight = 3
[languages.fr.params]
languageEmoji = "🇫🇷️"
[markup]
[markup.goldmark]
@ -50,7 +52,7 @@ theme = ["hugo-notice", "ananke"]
favicon = "/favicon.ico"
author = "OctoSpacc"
recent_posts_number = 5
other_posts_number = 5
other_posts_number = 6
toc = true
show_reading_time = true
canonicalUrlOverride = "https://sitoctt.octt.eu.org"