Ogni distribuzione Linux, per quanto possa essere anche abbastanza conosciuta e utilizzata (come Ubuntu o Debian), ha un difetto: non può competere con la popolarità di Windows. In un mondo ideale, non dovrebbe sussistere alcun problema riguardo ciò, ma per nostra grande fortuna viviamo in un mondo che non è affatto quello ideale e dobbiamo sorbirci l’annoso problema della disponibilità dei software per Linux e, nello specifico, per NixOS.
Molti programmatori, ma in particolare molte grandi aziende produttrici di software, sono poco inclini al rendere disponibili i propri software per i sistemi operativi Linux, favorendo così l’egemonia di Windows e rendendo vano ogni tentativo di potersene liberare.
Morale della favola: sì, ti consiglio vivamente di usare NixOS nella tua vita quotidiana, ma in dual boot con Windows, cosicché quest’ultimo sia sempre a portata di mano e utilizzabile nel caso in cui ci dovesse essere il bisogno di utilizzare un software non disponibile per Linux (o per NixOS).
Un’altra alternativa possibile è quella delle virtual machine, ma mi sento di sconsigliarla in quanto è molto meno performante eseguire Windows in una VM rispetto che proprio come sistema operativo a se stante.
2 - Installazione in dual boot di Windows e NixOS
L’installazione in dual boot di Windows e NixOS non è un’operazione particolarmente complicata. Ti consiglio di seguire la guida How to dualboot Windows and NixOS di Drake Rossman che, a parer mio, è fatta molto bene ed è scritta in modo molto chiaro.
Anche io ho seguito questa guida ma, dato che credo si sia capito quanto mi piace smanettare, ovviamente non l’ho seguita pedissequamente. A differenza sua, infatti:
A causa di questo, la configurazione delle partizioni l’ho fatta con GParted Live.
NixOS non riesce a trovare l’ISO all’interno dell’unità USB avviabile con Ventoy se si effettua l’installazione manuale, ragion per cui non ho usato Ventoy.
In questa guida, quindi, spiegherò come installare in dual boot Windows (10 o 11, fa lo stesso) e NixOS tramite installazione manuale. Andremo a installare prima Windows e, dopo aver espanso la partizione di sistema EFI tramite GParted Live per fare spazio al firmware di NixOS, installeremo quest’ultimo.
Seguiremo questo ordine perché, durante l’installazione, Windows assume di essere l’unico sistema operativo presente sulla macchina e rischierebbe di sovrascrivere qualsiasi altra azione precedente.
Io installerò sia Windows che NixOS in inglese, quindi i programmi e/o i comandi che citerò saranno scritti in inglese (credo sia facilmente intuibile quale possa essere il loro corrispettivo in italiano).
Consiglio: porta pazienza
Lavorare con i sistemi operativi non è semplice e spesso questo processo può risultare lento e stancante. L’unico consiglio che mi sento di darti è di portare pazienza e aspettare che il computer faccia il proprio lavoro.
Ci sono alcune operazioni in cui ti ritroverai a dover necessariamente aspettare anche diversi minuti (come il flashing delle unità USB avviabili o l’avvio degli installer dei sistemi operativi). Anche se il computer possa sembrare fermo, in realtà in quei momenti potrebbe star lavorando. Non lo toccare e lascialo lavorare, attendi anche una buona mezz’ora e, solo se continua a non dare segni di vita, forza lo spegnimento.
La pazienza è la virtù dei forti, non dimenticarlo.
[!tutorial] Tutorial: installazione in dual boot di Windows e NixOS
Questo è il tutorial per installare in dual boot Windows e NixOS.
Prima di partire con l’installazione vera e propria, ci sono un po’ di preparativi da fare.
Preparazione e consigli
Innanzitutto, andando a cambiare il sistema operativo, sarà necessario ovviamente fare una formattazione del disco fisso, quindi prima di procedere ti consiglio vivamente di salvarti TUTTO ciò che non vuoi perdere su spazi di archiviazione esterni come chiavette, HDD esterni o anche sul cloud con Google Drive o Dropbox.
Se hai un po’ di pazienza e preferite fare le cose in sicurezza per evitare di avere in futuro rimpianti su dati che avrai permanentemente perso, ti consiglio di continuare a usare il tuo computer per almeno una settimana, esattamente come hai fatto finora e, nel frattempo, salvarti tutto quello di cui ti ricordi (io consiglio una settimana di “attesa” perché credo che in una settimana ci si riesca a ricordare di tutto ciò che può essere utile salvarsi, ma ovviamente più si “temporeggia” e meglio è). Questo è il mio consiglio, sentiti libero di non seguirlo a tuo rischio e pericolo (ma ricordati, meglio “perdere” una settimana di tempo che perdere qualcosa che potenzialmente non potresti recuperare mai più).
Bene, una volta terminato il trasferimento di tutti i dati utili, si può procedere con l’installazione vera e propria. L’occorrente per questo processo è il seguente:
Una chiavetta USB da almeno 8 GiB che sarà formattata (per diventare un’unità USB avviabile) e, di conseguenza, perderà ogni dato salvato su di essa (anche in questo caso bisogna trasferire da qualche altra parte tutto il contenuto della chiavetta, altrimenti si rischia di perderlo per sempre).
Una connessione a Internet che ci sarà utile durante l’installazione di NixOS e che può essere effettuata in uno dei seguenti modi:
Tramite Ethernet, cioè tramite cavo LAN collegato al computer.
Tramite tethering, cioè collegando il telefono al computer tramite un cavo USB e attivando l’impostazione del tethering sul telefono stesso.
Tramite Wi-Fi, ma rispetto ai primi due metodi (che richiedono solamente l’azione di collegare il computer al cavo LAN o al cavo USB) è un metodo un po’ più macchinoso perché necessita di un po’ di configurazione (per fortuna, però, sulla guida ufficiale è spiegato tutto).
Ovviamente, un dispositivo da cui seguire queste istruzioni diverso da quello su cui si installerà il sistema operativo (va bene anche il telefono stesso da cui si fa tethering oppure un altro computer).
Almeno 40 GiB di memoria non allocata sul disco fisso da destinare a NixOS.
Installazione e configurazione di Windows
Come già detto, per comodità, ci conviene in primis avere già installato Windows (10 o 11) e solo in seguito sarà possibile procedere con l’installazione di NixOS.
Rendi la chiavetta USB un’unità USB avviabile con l’ISO di Windows (io ho usato WoeUSB e non ho avuto problemi).
Inseriscila nel computer su cui installare Windows, accendi il computer e accedi al menu di avvio del sistema operativo (boot menu).
Seleziona l’unità USB avviabile.
Aneddoto personale: viva la pazienza!
Dopo aver selezionato l’unità USB avviabile con Windows, mi è capitato di ritrovarmi davanti a una schermata nera con un cursore lampeggiante che non ha dato segni di vita per diversi minuti.
Se è successo anche a te, quel che posso consigliarti è di portare pazienza come ho fatto io: dopo una decina di minuti, è partito l’installer di Windows.
Se, invece, dell’installer di Windows non ne hai visto neanche l’ombra, prova a rifare il flashing dell’unità USB avviabile, magari si è corrotto l’installer.
Procedi con l’installazione di Windows.
Alla schermata di scelta del tipo di installazione, seleziona Custom: Install Windows only (advanced).
Cancella tutte le partizioni. Non preoccuparti, Windows si occuperà di ricreare tutte le partizioni necessarie durante l’installazione.
Procedi con l’installazione di Windows (possibilmente evitando di installare qualsiasi altra puttanata ti propina Windows).
Terminata l’installazione di Windows, apri Disk management (Gestione disco in italiano). Dovresti trovarti in una situazione simile a questa:
Tralasciando le partizioni dell’unità USB avviabile (nel mio caso è Windows USB (D:)), abbiamo tre partizioni:
(C:): la partizione NTFS primaria contenente Windows.
(Disk 0 partition 1): la partizione di sistema EFI contenente il firmware per avviare Windows.
(Disk 0 partition 4): la partizione di ripristino di Windows 10.
Fai clic col tasto destro sulla partizione (C:) e seleziona Shrink Volume…. Inserisci il numero di MiB che vorrai sottrarre a Windows per assegnarli a NixOS (io ne ho scelti 500000). Ci ritroveremo quindi in questa situazione:
Tralasciando il fatto che Windows si rifiuta di puntualizzare che quelli che ci sta mostrando sono GiB e MiB e non GB e MB, ora puoi notare come abbiamo 500 000 MiB (che sono equivalenti a circa 488.28 GiB) di spazio non allocato.
Per il momento abbiamo finito con Windows, ora puoi passare all’installazione di NixOS!
Configurazione delle partizioni con GParted Live
Rendere la chiavetta USB avviabile anche con dd
Tra le opzioni di avvio, scegliere GParted Live (Default settings)
Premi invio per selezionare Don't touch keymap
Scegli la lingua che preferisci inserendo il relativo numero
Premi invio per avviare GParted automaticamente (opzione 0)
All’avvio di GParted Live, ci ritroviamo in una situazione simile a questa:
Queste partizioni rappresentano:
/dev/sda1: partizione di sistema EFI da 100 MiB,
/dev/sda2: partizione MSR di Windows da 16 MiB,
/dev/sda3: partizione primaria di Windows (ossia la partizione (C:)),
/dev/sda4: partizione di ripristino di Windows da 530 MiB.
Quel che ci interessa fare è espandere la partizione di sistema EFI (/dev/sda1) per portarla a 4 GiB in modo che possa contenere i bootloader sia di Windows che di NixOS ma, per farlo, dobbiamo creare spazio davanti alla partizione MSR di Windows (/dev/sda2).
Ciò implica il dover spostare la partizione MSR di Windows (/dev/sda2) e la partizione primaria di Windows (/dev/sda3) in avanti di 4 GiB.
Osservazione sui 4 GiB della partizione di sistema EFI
Per quel che riguarda la partizione di sistema EFI, nella pratica abbiamo che:
il bootloader di Windows, il Windows Boot Manager, usa circa 50 MiB e
il bootloader di NixOS, systemd-boot oppure GRUB, funzionano comodamente con 300-500 MiB.
Considerando che anche configurazioni molto pesanti raramente superano 1 GiB, allora 4 GiB potrebbero sembrare un po’ eccessivi, ma io personalmente preferisco partire prevenuto anziché rischiare di ritrovarmi poi in futuro nella situazione in cui la partizione di sistema EFI non avrà più spazio libero (melius abundare quam deficere).
Clicchiamo col tasto destro sulla partizione primaria di Windows (/dev/sda3) e selezioniamo Resize/Move. Inseriamo in Free space preceding (MiB) la quantità di MiB che vogliamo aggiungere alla partizione di sistema EFI: il nostro obiettivo è portarla a 4 GiB = 4096 MiB, quindi ci mancano
4096 MiB−100 MiB=3996 MiB
Scriviamo nella casella di testo 4046 e premiamo Invio, così GParted in automatico sottrarrà questo quantitativo di memoria
o da questa partizione, quindi il valore di New size (MiB) di sarà diminuito di 3996 MiB e ciò implica che la partizione di Windows sarà più piccola di circa 4 GiB
o da eventuale spazio libero dopo di questa, quindi il valore di Free space following (MiB) sarà diminuito di 3996 MiB e ciò implica che la partizione di NixOS sarà più piccola di circa 4 GiB (e nel mio caso è successo questo).
Che avvenga l’uno o l’altro caso poco ci importa, non saranno 4 GiB a fare la differenza.
Premiamo su Resize/Move per confermare le nostre scelte e, nel pop-up successivo, su Ok per confermare che sappiamo quel che stiamo facendo.
Ora ci ritroviamo in questa situazione:
Tra la partizione MSR di Windows (/dev/sda2) e quella primaria (/dev/sda3) abbiamo poco meno di 4 GiB non allocati.
Questo spazio non allocato va spostato tra la partizione di sistema EFI (/dev/sda1) e la partizione MSR di Windows (/dev/sda2). Quel che dobbiamo fare quindi è spostare in avanti di 3996 MiB proprio quest’ultima partizione. Per farlo, clicchiamo col tasto destro sulla partizione MSR di Windows (/dev/sda2) e selezioniamo Resize/Move. In Free space preceding (MiB) scriviamo 3996 e premiamo Invio, così GParted in automatico azzererà il valore di Free space following (MiB). Clicchiamo quindi su Resize/Move per confermare le nostre scelte.
Ora che abbiamo lo spazio non allocato direttamente attaccato alla partizione di sistema EFI (/dev/sda1), possiamo espanderla. Clicchiamo col tasto destro su di essa e selezioniamo Resize/Move. In New size (MiB) scriviamo 4096 e premiamo su Resize/Move per confermare le nostre scelte.
La situazione finale in cui dovremo ritrovarci sarà questa:
La partizione di sistema EFI (/dev/sda1) dovrà essere di 4 GiB.
Ora possiamo confermare le operazioni da effettuare e cliccare sulla spunta verde per eseguirle. GParted ci metterà un bel po’ per fare tutto ciò (circa 10-20 minuti).
Al termine delle operazioni sbucherà fuori un errore riguardante l’espansione della partizione di sistema EFI, ma nessuna paura: molto semplicemente, GParted non è in grado di ridimensionare le partizioni FAT32 (e da parte degli sviluppatori, giustamente, non c’è la volontà di voler risolvere questo problema, essendo GParted uno strumento non mirato a essere usato su Windows). Clicchiamo su Close.
Ora l’unica cosa che possiamo fare è ricreare da zero la partizione di sistema EFI (/dev/sda1) esattamente come vogliamo noi. Prima di fare ciò, dobbiamo fare un backup dei file su questa partizione in una cartella temporanea: apriamo il terminale di GParted Live e creiamola con
mkdir /tmp/backed-up-boot
Attenzione: usa sudo
Per alcuni di questi comandi ci sarà bisogno di usare la modalità superutente per eseguirli, quindi se alla loro esecuzione il terminale restituisce errore, usa sudo (non c’è bisogno di una password per usarlo).
Dal momento che stiamo lavorando su un live USB, dobbiamo montare questa partizione in una cartella: creiamola con
mkdir /mnt/actual-boot
e montiamola con
mount /dev/sda1 /mnt/actual-boot
In effetti, se ora proviamo a visualizzare tutti i file nella cartella con
ls -R /mnt/actual-boot
notiamo che ci sono proprio i file di avvio di Windows.
Dobbiamo copiare i file da questa cartella contenente il boot alla cartella di backup: eseguiamo
cp -r /mnt/actual-boot /tmp/backed-up-boot
Nuovamente, se proviamo a visualizzare tutti i file nella cartella di backup con
ls -R /tmp/backed-up-boot
notiamo che abbiamo anche qui i file di avvio di Windows.
Possiamo smontare la partizione:
umount /mnt/actual-boot
Ora possiamo eliminare e ricreare la partizione: chiudiamo il terminale e, sulla schermata di GParted, selezioniamo la partizione di sistema EFI (/dev/sda1) e selezioniamo Delete.
Clicca col destro sullo spazio non allocato che abbiamo appena ottenuto e seleziona New per creare una nuova partizione. Lasciando stare quell’eventuale paio di MiB di spazio che precederà questa partizione, assicurati di impostare questa partizione come Primary Partition, con dimensione di 4096 MiB, con il nome di EFI System Partition e con il file system FAT32.
Ci ritroviamo ora in una situazione del genere:
Clicca sulla spunta verde per eseguire queste operazioni.
Ricordiamoci di impostare le flag corrette per la partizione di sistema EFI (/dev/sda1): clicca col destro su di essa, seleziona Manage Flags e metti la spunta solo a boot, esp e no_automount.
Ultima operazione che ci rimane da fare: ripristinare il backup fatto prima. Riapriamo il terminale ed eseguiamo
mount /dev/sda1 /mnt/actual-boot
per montare la partizione,
cp -r /tmp/backed-up-boot /mnt/actual-boot
per copiare i file dalla cartella di backup a quella di boot e
Graphical ISO image: l’ISO che effettua l’installazione tramite l’installazione grafica, cioè tramite un’interfaccia grafica user-friendly che offre anche un Desktop Environment già incluso (si può scegliere quale usare tra GNOME e Plasma Desktop).
Ai tempi, quando ebbi il mio primo approccio a questo favoloso sistema operativo, pur seguendo la guida ufficiale di NixOS sull’installazione, la graphical ISO image della versione 24.05 di NixOS che provai a usare non mi salvava correttamente in memoria le vecchie generazioni, mentre con quella minimal non ho avuto problemi.
L’installazione manuale ti permette di avere piena padronanza e conoscenza delle modifiche che verranno apportate al tuo sistema, evitandoti così di ritrovarti alcune cose che potresti non desiderare. Insomma, se fai tutto tu sai esattamente quel che otterrai.
Rendi la chiavetta USB un’unità USB avviabile con la minimal ISO image di NixOS (ho provato a farlo tramite dd ma mi dava problemi, però con USBImager è andato tutto liscio).
Inseriscila nel computer su cui installare NixOS accendi il computer e accedi al menu di avvio del sistema operativo (boot menu).
Seleziona l’unità USB avviabile.
Seleziona l’installer con la versione di Linux che preferisci (io preferisco sempre la LTS, così posso dormire sonni tranquilli sapendo che questa versione del kernel sarà supportata per un bel po’).
Nella CLI che si è aperta, esegui il comando sudo -i per passare alla modalità privilegiata (non c’è bisogno di alcuna password perché l’utente nixos creato di default non ne ha una).
Se vuoi impostare il layout italiano per la tastiera, esegui il comando
loadkeys it
Con
parted -l /dev/sda
possiamo vedere la lista delle partizioni che abbiamo creato prima con GParted.
Dovremmo avere qualcosa del genere:
Number Start End Size File system Name Flags
1 1049kB 4296MB 4295MB fat32 EFI System Partition boot, esp, no_automount
2 4296MB 4313MB 16.8MB Microsoft reserved partition msftres, no_automount
3 4313MB 254GB 249GB ntfs Basic data partition msftdata
4 512GB 512GB 556MB ntfs hidden, diag, no_automount
Tra la partizione 3, ossia la partizione primaria di Windows (/dev/sda3), e la partizione 4, ossia partizione di ripristino di Windows (/dev/sda4), creeremo due partizioni per NixOS:
una partizione root e
una partizione swap.
Creiamo la partizione root dalla fine della partizione primaria di Windows (/dev/sda3), cioè a 254 GB, fino a 8 GB prima della partizione di ripristino di Windows (/dev/sda4), cioè a 512GB−8 GB=504GB:
parted /dev/sda -- mkpart root ext4 254GB 504GB
Creiamo la partizione swap dalla fine della partizione root all’inizio della partizione di ripristino di Windows (/dev/sda4):
If your machine has a limited amount of memory, you may want to activate swap devices now (swapon device). The installer (or rather, the build actions that it may spawn) may need quite a bit of RAM, depending on your configuration.
swapon /dev/sda6
You now need to create a file /mnt/etc/nixos/configuration.nix that specifies the intended configuration of the system. This is because NixOS has a declarative configuration model: you create or edit a description of the desired configuration of your system, and then NixOS takes care of making it happen. The syntax of the NixOS configuration file is described in Configuration Syntax, while a list of available configuration options appears in Appendix A. A minimal example is shown in Example: NixOS Configuration.
This command accepts an optional --flake option, to also generate a flake.nix file, if you want to set up a flake-based configuration.
The command nixos-generate-config can generate an initial configuration file for you:
nixos-generate-config --root /mnt --flake
You should then edit /mnt/etc/nixos/configuration.nix to suit your needs:
nano /mnt/etc/nixos/configuration.nix
Sul mio computer, ho come bootloader GRUB, quindi mi assicuro che sia presente (e sia de-commentata) l’opzione
boot.loader.grub.enable = true;
Il device per GRUB, essendo in UEFI, deve essere "nodev":
boot.loader.grub.device = "nodev";
e
boot.loader.grub.efiSupport = true;
De-commenta e cambia il nome del tuo dispositivo:
networking.hostName = "manuel-laptop"
De-commenta e imposta il fuso orario (quello di Amsterdam corrisponde a quello nostro italiano):