Un pacchetto software è un file di archivio che contiene un programma per computer e i metadati necessari per la sua distribuzione. Il programma per computer può essere in codice sorgente che deve essere prima compilato e costruito. I metadati del pacchetto includono la descrizione del pacchetto, la versione del pacchetto e le dipendenze (altri pacchetti che devono essere installati prima).
I gestori di pacchetti hanno il compito di trovare, installare, mantenere o disinstallare pacchetti software su comando dell’utente. Le funzioni tipiche di un sistema di gestione dei pacchetti includono:
- Lavorare con gli archivi di file per estrarre gli archivi dei pacchetti
- Assicurare l’integrità e l’autenticità del pacchetto verificando rispettivamente le checksum e i certificati digitali
- Ricercare, scaricare, installare, o aggiornare il software esistente da un repository di software o app store
- Raggruppare i pacchetti per funzione per ridurre la confusione degli utenti
- Gestire le dipendenze per assicurare che un pacchetto sia installato con tutti i pacchetti che richiede, evitando così “l’inferno delle dipendenze”
Sfide con le librerie condiviseModifica
I sistemi informatici che si basano sul collegamento dinamico delle librerie, invece di quello statico, condividono librerie eseguibili di istruzioni macchina tra pacchetti e applicazioni. In questi sistemi, le complesse relazioni tra diversi pacchetti che richiedono diverse versioni di librerie danno luogo a una sfida colloquialmente nota come “dependency hell”. Sui sistemi Microsoft Windows, questo è anche chiamato “DLL hell” quando si lavora con librerie collegate dinamicamente. Una buona gestione dei pacchetti è vitale su questi sistemi. Il sistema Framework di OPENSTEP è stato un tentativo di risolvere questo problema, consentendo l’installazione simultanea di più versioni di librerie e permettendo ai pacchetti software di specificare con quale versione erano collegati.
Front-end per pacchetti compilati localmenteModifica
Gli amministratori di sistema possono installare e mantenere software usando strumenti diversi dal software di gestione dei pacchetti. Per esempio, un amministratore locale può scaricare codice sorgente non compilato, compilarlo e installarlo. Questo può far sì che lo stato del sistema locale non sia più sincronizzato con lo stato del database del gestore dei pacchetti. L’amministratore locale dovrà prendere ulteriori misure, come la gestione manuale di alcune dipendenze o l’integrazione delle modifiche nel gestore dei pacchetti.
Sono disponibili strumenti per assicurare che i pacchetti compilati localmente siano integrati con il gestore dei pacchetti. Per le distribuzioni basate su file .deb e .rpm così come per Slackware Linux, c’è CheckInstall, e per i sistemi basati su ricette come Gentoo Linux e sistemi ibridi come Arch Linux, è possibile scrivere prima una ricetta, che poi assicura che il pacchetto si inserisca nel database dei pacchetti locali.
Manutenzione della configurazioneEdit
Particolarmente fastidiosi con gli aggiornamenti del software sono gli aggiornamenti dei file di configurazione. Poiché i gestori di pacchetti, almeno sui sistemi Unix, sono nati come estensioni delle utilità di archiviazione dei file, di solito possono solo sovrascrivere o conservare i file di configurazione, piuttosto che applicare regole ad essi. Ci sono eccezioni a questo ?che di solito si applicano alla configurazione del kernel (che, se rotto, renderà il computer inutilizzabile dopo un riavvio). I problemi possono essere causati se il formato dei file di configurazione cambia; per esempio, se il vecchio file di configurazione non disabilita esplicitamente le nuove opzioni che dovrebbero essere disabilitate. Alcuni gestori di pacchetti, come dpkg di Debian, permettono la configurazione durante l’installazione. In altre situazioni, è desiderabile installare i pacchetti con la configurazione predefinita e poi sovrascrivere questa configurazione, per esempio, nelle installazioni senza testa su un gran numero di computer. Questo tipo di installazione preconfigurata è supportata anche da dpkg.
RepositoriesEdit
Per dare agli utenti un maggiore controllo sul tipo di software che permettono di installare sul loro sistema (e talvolta per ragioni legali o di convenienza da parte dei distributori), il software viene spesso scaricato da un certo numero di repository.
Soppressione dell’aggiornamentoModifica
Quando un utente interagisce con il software di gestione dei pacchetti per effettuare un aggiornamento, è consuetudine presentare all’utente la lista delle azioni da eseguire (di solito la lista dei pacchetti da aggiornare, e possibilmente dare i numeri di versione vecchi e nuovi), e permettere all’utente di accettare l’aggiornamento in blocco, o selezionare singoli pacchetti da aggiornare. Molti gestori di pacchetti possono essere configurati per non aggiornare mai certi pacchetti, o per aggiornarli solo quando vengono trovate vulnerabilità critiche o instabilità nella versione precedente, come definito dal produttore del software. Questo processo è talvolta chiamato version pinning.
Per esempio:
- yum lo supporta con la sintassi exclude=openoffice*
- pacman con IgnorePkg= openoffice (per sopprimere l’aggiornamento di openoffice in entrambi i casi)
- dpkg e dselect lo supportano parzialmente attraverso il flag hold nelle selezioni dei pacchetti
- APT estende il flag hold attraverso il complesso meccanismo di “pinning” (gli utenti possono anche mettere in lista nera un pacchetto)
- aptitude ha i flag “hold” e “forbid”
- portage lo supporta attraverso il pacchetto.mask configuration file
Rimozione a cascata dei pacchettiEdit
Alcune delle funzioni di gestione dei pacchetti più avanzate offrono la “rimozione a cascata dei pacchetti”, in cui tutti i pacchetti che dipendono dal pacchetto di destinazione e tutti i pacchetti da cui dipende solo il pacchetto di destinazione vengono anch’essi rimossi.
Confronto dei comandiEdit
Anche se i comandi sono specifici per ogni particolare gestore di pacchetti, sono in larga misura traducibili, poiché la maggior parte dei gestori di pacchetti offre funzioni simili.
Azione | zypper | pacman | apt | dnf (yum) | portage |
---|---|---|---|---|---|
installa pacchetto | zypper in PKG |
pacman -S PACKAGE |
apt install PACKAGE |
dnf install PACKAGE |
emerge PACKAGE |
remove package | zypper rm -RU PKG |
pacman -R PACKAGE |
apt remove PACKAGE |
dnf remove --nodeps PACKAGE |
emerge -C PACKAGE o emerge --unmerge PACKAGE |
remove package+orphans | zypper rm -u --force-risoluzione PKG |
pacman -Rs PACKAGE |
apt autoremove PACKAGE |
dnf remove PACKAGE |
emerge -c PACKAGE o emerge --depclean PACKAGE |
update software database | zypper ref |
pacman -Sy |
apt update |
dnf check-update |
emerge --sync |
show updatable packages | zypper lu |
pacman -Qu |
apt list --upgradable |
dnf check-update |
emerge -avtuDN --with-bdeps=y @world o emerge --update --fingere @world |
cancellare orfani+config | zypper rm -u |
pacman -Rsn $(pacman -Qdtq) |
apt autoremove |
dnf erase PKG |
emerge --depclean |
show orphans | zypper pa --orphaned --unneed |
pacman -Qdt |
package-cleanup --quiet --leaves --exclude-bin |
emerge -caD o emerge --depclean --pretend |
|
update all | zypper up |
pacman -Syu |
apt upgrade |
dnf update |
emerge --update --deep --with-bdeps=y @world |
La wiki di Arch Linux Pacman/Rosetta offre un’ampia panoramica.