Questo tutorial spiega come eseguire operazioni di gestione dei pacchetti come l'installazione, la rimozione, l'aggiornamento e l'aggiornamento di pacchetti utilizzando il gestore di pacchetti Nix. Se non hai ancora installato il gestore di pacchetti Nix, consulta la nostra guida precedente "Nix:un potente gestore di pacchetti per Linux e Unix" . Come forse già saprai, non è necessario essere un utente root o sudo per eseguire tutte le operazioni di gestione dei pacchetti utilizzando Nix.
Introduzione a Nix Package Manager
Nix ha molti comandi. Il comando principale per la gestione dei pacchetti è nix-env . Questo comando viene utilizzato per elencare, installare, aggiornare, ripristinare, rimuovere, interrogare i pacchetti. Vediamo alcuni comandi con esempi.
Aggiornamento dei canali Nix
Un canale Nix è solo un URL che punta a un luogo che contiene un insieme di espressioni Nix e un manifest. Per impostazione predefinita, Nixpkgs il canale viene aggiunto automaticamente al tuo elenco di canali "iscritti" quando installi Nix.
Per rimanere aggiornato con il canale Nix, esegui il seguente comando:
$ nix-channel --update
Risultato di esempio:
downloading Nix expressions from ‘https://d3g5gsiof5omrk.cloudfront.net/nixpkgs/nixpkgs-17.09pre108299.ec9a23332f/nixexprs.tar.xz’... downloading ‘https://d3g5gsiof5omrk.cloudfront.net/nixpkgs/nixpkgs-17.09pre108299.ec9a23332f/nixexprs.tar.xz’... [8335/8656 KiB, 206.5 KiB/s] unpacking channels...
Puoi anche aggiungere manualmente un canale al tuo sistema come mostrato di seguito.
$ nix-channel --add https://nixos.org/channels/nixpkgs-unstable
Dopo esserti iscritto(aggiunto) un canale, non dimenticare di aggiornare il canale per ottenere le ultime espressioni Nix disponibili usando il comando:
$ nix-channel --update
Per rimuovere un canale, esegui:
$ nix-channel --remove nixpkgs
Cerca/interroga i pacchetti disponibili
Per visualizzare l'elenco dei pacchetti disponibili nel canale a cui sei iscritto, esegui:
$ nix-env -qa
L'output di esempio del comando precedente sarebbe:
2048-in-terminal-2015-01-15 2bwm-0.2 389-ds-base-1.3.5.15 3dpong-0.5 4store-1.1.6 8086tiny-1.25 90secondportraits-1.01b 915resolution-0.5.3 9pfs a2jmidid-8 a2ps-4.14 a52dec-0.7.4p4 aacgain-1.9.0 aacskeys-0.4.0e aalib-1.4rc5 abc-verifier-20160818 abcde-2.7.2 abcl-1.4.0 [...]
Qui, "-q" indica l'operazione di query. "-a" indica tutti i pacchetti disponibili (ovvero installabili).
Puoi interrogare un particolare pacchetto, come mostrato di seguito.
$ nix-env -qa chromium
Risultato:
chromium-58.0.3029.110
Inoltre, puoi utilizzare il comando seguente per cercare un pacchetto particolare.
$ nix-env -qaP | grep python3-3
Risultato di esempio:
nixpkgs.python33 python3-3.3.6 nixpkgs.python33Full python3-3.3.6 nixpkgs.python34 python3-3.4.6 nixpkgs.python34Full python3-3.4.6 nixpkgs.python35 python3-3.5.3 nixpkgs.python35Full python3-3.5.3 nixpkgs.python3Full python3-3.6.1 nixpkgs.python36Full python3-3.6.1 nixpkgs.python3 python3-3.6.1
Per elencare tutti i pacchetti installati, esegui semplicemente:
$ nix-env -q
È inoltre possibile visualizzare lo stato del pacchetto disponibile. Guarda l'esempio qui sotto.
$ nix-env -qas gcc
Risultato di esempio:
IPS gcc-5.4.0
Qui, "I" indica che il pacchetto specificato è installato, "P" indica che il pacchetto è presente nel nostro sistema e "S" indica che se esiste un cosiddetto sostituto per il pacchetto.
Puoi interrogare/elencare i pacchetti usando le espressioni regolari. Ecco alcuni esempi di espressioni regolari.
cromo
Corrisponde al nome del pacchetto chromium ea qualsiasi versione.
cromo-58.0
Corrisponde al nome del pacchetto chromium e alla versione 58.0.
Esempio:
$ nix-env -qa chromium-58.0
gtk\\+
Corrisponde al nome del pacchetto gtk+ . Il carattere + deve essere sottoposto a escape utilizzando una barra rovesciata per evitare che venga interpretato come un quantificatore e la barra rovesciata deve essere sottoposta a escape a sua volta con un'altra barra rovesciata per garantire che la shell lo trasmetta.
.\*
Corrisponde a qualsiasi nome di pacchetto. Questa è l'impostazione predefinita per la maggior parte dei comandi.
'.*zip.*'
Corrisponde a qualsiasi nome di pacchetto contenente la stringa zip . Nota i punti:'*zip*' non funziona, perché in un'espressione regolare, il carattere * viene interpretato come un quantificatore.
'.*(firefox|cromo).*'
Corrisponde a qualsiasi nome di pacchetto contenente le stringhe firefox o cromo .
Installazione dei pacchetti
Come accennato nel tutorial precedente, tutti i pacchetti verranno archiviati in Nix Store , di solito la directory /nix/store .
Per installare un pacchetto, esegui:
$ nix-env --install gcc
Oppure,
$ nix-env -i gcc
Il comando precedente installerà l'ultimo pacchetto gcc disponibile.
L'output di esempio del comando precedente sarebbe:
installing ‘gcc-5.4.0’ download-from-binary-cache.pl: still waiting for ‘https://cache.nixos.org/zx0i63k1qswsfjj3kxhwk1vqa9i5ys8i.narinfo’ after 5 seconds... download-from-binary-cache.pl: still waiting for ‘https://cache.nixos.org/dyj2k6ch35r1ips4vr97md2i0yvl4r5c.narinfo’ after 5 seconds... download-from-binary-cache.pl: still waiting for ‘https://cache.nixos.org/g25gnfmd8i392ahiip9nwfv80szqbkcs.narinfo’ after 5 seconds... these paths will be fetched (38.94 MiB download, 150.45 MiB unpacked): /nix/store/7n45x3waczv1smsdkax2dy4j2zhbfk82-glibc-2.25-bin /nix/store/dyj2k6ch35r1ips4vr97md2i0yvl4r5c-gcc-5.4.0 /nix/store/f05gsfcilsczwic8aga0cgl0sygbw5lc-zlib-1.2.11 /nix/store/f111ij1fc83965m48bf2zqgiaq88fqv5-glibc-2.25 /nix/store/g25gnfmd8i392ahiip9nwfv80szqbkcs-gcc-5.4.0-man /nix/store/n5k6yqf81jp4qbay2czaqciimhxikcq8-linux-headers-4.4.10 /nix/store/vrr9maj9lqj2xwndlx3kh07vhnc111i2-glibc-2.25-dev /nix/store/xfrkm34sk0a13ha9bpki61l2k5g1v8dh-gcc-5.4.0-lib /nix/store/zx0i63k1qswsfjj3kxhwk1vqa9i5ys8i-gcc-5.4.0-info fetching path ‘/nix/store/zx0i63k1qswsfjj3kxhwk1vqa9i5ys8i-gcc-5.4.0-info’... [...] fetching path ‘/nix/store/dyj2k6ch35r1ips4vr97md2i0yvl4r5c-gcc-5.4.0’... *** Downloading ‘https://cache.nixos.org/nar/00y98z7i8a1a8d3nkv4dbbfbwwvznccbvmjdhaay0gqc0gfgb020.nar.xz’ to ‘/nix/store/dyj2k6ch35r1ips4vr97md2i0yvl4r5c-gcc-5.4.0’... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 29.5M 100 29.5M 0 0 373k 0 0:01:21 0:01:21 --:--:-- 365k building path(s) ‘/nix/store/nxx0bfg3n685fl0l3m2gbjqannh0wb9i-user-environment’ created 78 symlinks in user environment
Verifichiamo se gcc è installato o non utilizza il comando:
$ gcc -v
Risultato di esempio:
Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/nix/store/dyj2k6ch35r1ips4vr97md2i0yvl4r5c-gcc-5.4.0/libexec/gcc/x86_64-unknown-linux-gnu/5.4.0/lto-wrapper Target: x86_64-unknown-linux-gnu Configured with: Thread model: posix gcc version 5.4.0 (GCC)
Come hai notato nell'output sopra, gcc si trova in una sottodirectory denominata "dyj2k6ch35r1ips4vr97md2i0yvl4r5c-gcc-5.4.0" in /nix/store . Qui, chiamiamo dyj2k6ch35r1ips4vr97md2i0yvl4r5c-gcc-5.4.0 come identificatore univoco. Questa sottodirectory contiene tutte le dipendenze e le librerie richieste del pacchetto gcc.
Prova i pacchetti senza installare
Un'altra caratteristica degna di nota del gestore di pacchetti Nix è che puoi testare un pacchetto senza installarlo sul tuo sistema. Fare riferimento alla seguente guida per sapere come testare un pacchetto senza installarlo.
- Come testare un pacchetto senza installarlo in Linux
Aggiornamento dei pacchetti
Per aggiornare un pacchetto alla successiva versione disponibile, esegui:
$ nix-env --upgrade vim
Oppure, semplicemente:
$ nix-env -u vim
Il comando precedente aggiornerà solo vim pacchetto se esiste una versione "più recente".
Inoltre, puoi aggiornare tutti i pacchetti installati contemporaneamente eseguendo il comando seguente:
$ nix-env -u
Pacchetti di ripristino
Hai installato un pacchetto, ma non è utile o non funziona correttamente. È necessaria la versione inferiore dello stesso pacchetto. Cosa farai? Semplice. Torna alla versione di lavoro precedente usando il seguente comando:
$ nix-env --rollback
Disinstallazione dei pacchetti
Per disinstallare un pacchetto, esegui:
$ nix-env -e gcc
Il comando precedente disinstallerà il pacchetto chiamato gcc dal tuo sistema.
Puoi rimuovere più pacchetti come mostrato di seguito.
$ nix-env -e gcc vim
Risultato di esempio:
uninstalling ‘vim-8.0.0442’ uninstalling ‘gcc-5.4.0’ building path(s) ‘/nix/store/mxpikbq3l08379h8ik8mrj3fcw6mh6y4-user-environment’ created 6 symlinks in user environment
Rimozione dei pacchetti inutilizzati
Quando un pacchetto viene disinstallato, non viene rimosso da Nix Store (ad esempio /nix/store/ directory). Solo, i collegamenti simbolici verranno rimossi dal tuo profilo.
Per rimuovere effettivamente i pacchetti disinstallati, esegui:
$ nix-collect-garbage -d
Risultato di esempio:
finding garbage collector roots... deleting garbage... deleting ‘/nix/store/s4jr4dc9gghldr3xza23rw0gm9kp21kl-nix-prefetch-scripts.drv’ deleting ‘/nix/store/km2gyzlvs9vkrr52wxfyhinv4r52ksrj-nix-prefetch-bzr.drv’ deleting ‘/nix/store/7mi73sdc1p349vmpb5nyxsrv8ayk5hly-bazaar-2.7.0.drv’ [...] deleting ‘/nix/store/8ckmcs9hx1qm0yxdnv892vrvx49zm1sq-setup-hook-2.0.sh’ deleting ‘/nix/store/trash’ deleting unused links... note: currently hard linking saves -0.00 MiB 1447 store paths deleted, 12.65 MiB freed
Dovresti eseguire questo comando periodicamente per eliminare i pacchetti inutilizzati dal tuo sistema.
E per ora è tutto. Spero che tu abbia un'idea dell'utilizzo di base del gestore di pacchetti Nix. Quello che ho appena trattato qui è sufficiente per iniziare con il gestore di pacchetti Nix. Naturalmente, ci sono molti comandi. Per ulteriori informazioni sui comandi Nix, fare riferimento al manuale ufficiale Nix fornito alla fine di questa guida.
Se trovi utile questa guida, condividila sui tuoi social network professionali e supporta OSTechNix. Altre cose buone in arrivo. Resta sintonizzato!
Saluti!