GNU/Linux >> Linux Esercitazione >  >> Linux

L'evoluzione dei gestori di pacchetti

Ogni dispositivo computerizzato utilizza una qualche forma di software per eseguire i compiti previsti. Agli albori del software, i prodotti venivano sottoposti a severi test per rilevare bug e altri difetti. Negli ultimi dieci anni circa, il software è stato rilasciato tramite Internet con l'intento di correggere eventuali bug applicando nuove versioni del software. In alcuni casi, ogni singola applicazione dispone del proprio programma di aggiornamento. In altri, spetta all'utente capire come ottenere e aggiornare il software.

Linux ha adottato presto la pratica di mantenere una posizione centralizzata in cui gli utenti potevano trovare e installare il software. In questo articolo parlerò della storia dell'installazione di software su Linux e di come i moderni sistemi operativi vengono tenuti aggiornati contro il torrente infinito di CVE.

Come veniva installato il software su Linux prima dei gestori di pacchetti?

Storicamente, il software veniva fornito tramite FTP o mailing list (alla fine questa distribuzione sarebbe cresciuta fino a includere siti Web di base). Solo alcuni piccoli file contenevano le istruzioni per creare un binario (normalmente in un file tar). Decomprimere i file, leggere il readme e, purché tu abbia GCC o qualche altra forma di compilatore C, in genere eseguiresti un ./configure script con un elenco di attributi, come il percorso dei file della libreria, il percorso per creare nuovi file binari e così via. Inoltre, configure processo verificherebbe il tuo sistema per le dipendenze dell'applicazione. Se mancavano dei requisiti principali, lo script di configurazione si chiudeva e non è possibile procedere con l'installazione finché tutte le dipendenze non sono state soddisfatte. Se lo script di configurazione è stato completato correttamente, viene visualizzato un Makefile verrebbe creato.

Una volta un Makefile esisteva, dovresti quindi procedere con l'esecuzione di make comando (questo comando è fornito dal compilatore che stavi utilizzando). Il make comando ha una serie di opzioni chiamate crea flag , che aiutano a ottimizzare i binari risultanti per il tuo sistema. All'inizio dell'informatica, questo era molto importante perché l'hardware faticava a tenere il passo con le moderne richieste di software. Oggi, le opzioni di compilazione possono essere molto più generiche poiché la maggior parte dell'hardware è più che adeguata per il software moderno.

Infine, dopo il make era stato completato, dovresti eseguire make install (o sudo make install ) per installare effettivamente il software. Come puoi immaginare, eseguire questa operazione per ogni singolo software è stato noioso e dispendioso in termini di tempo, per non parlare del fatto che l'aggiornamento del software era un processo complicato e potenzialmente molto complicato.

Cos'è un pacchetto?

I pacchetti sono stati inventati per combattere questa complessità. I pacchetti raccolgono più file di dati insieme in un unico file di archivio per facilitare la portabilità e l'archiviazione, o semplicemente comprimono i file per ridurre lo spazio di archiviazione. I binari inclusi in un pacchetto sono precompilati in base alle sane impostazioni predefinite scelte dallo sviluppatore. I pacchetti contengono anche metadati, come il nome del software, una descrizione del suo scopo, un numero di versione e un elenco di dipendenze necessarie per il corretto funzionamento del software.

Diverse versioni di Linux hanno creato i propri formati di pacchetto. Alcuni dei formati di pacchetto più comunemente usati includono:

  • .deb:questo formato di pacchetto è utilizzato da Debian, Ubuntu, Linux Mint e molti altri derivati. È stato il primo tipo di pacchetto ad essere creato.
  • .rpm:Questo formato di pacchetto era originariamente chiamato Red Hat Package Manager. È usato da Red Hat, Fedora, SUSE e molte altre distribuzioni minori.
  • .tar.xz:Sebbene sia solo un tarball compresso, questo è il formato utilizzato da Arch Linux.

Sebbene i pacchetti stessi non gestiscano direttamente le dipendenze, hanno rappresentato un enorme passo avanti nella gestione del software Linux.

Cos'è un repository software?

Alcuni anni fa, prima della proliferazione degli smartphone, l'idea di un repository software era difficile da afferrare per molti utenti se non erano coinvolti nell'ecosistema Linux. Ad oggi, la maggior parte degli utenti Windows sembra essere ancora cablata per aprire un browser Web per cercare e installare nuovo software. Tuttavia, quelli con gli smartphone si sono abituati all'idea di un "negozio" di software. Il modo in cui gli utenti di smartphone ottengono il software e il modo in cui funzionano i gestori di pacchetti non sono dissimili. Sebbene ci siano stati diversi tentativi di creare un'interfaccia utente attraente per i repository di software, la stragrande maggioranza degli utenti Linux utilizza ancora la riga di comando per installare i pacchetti. I repository software sono un elenco centralizzato di tutto il software disponibile per qualsiasi repository che il sistema è stato configurato per utilizzare. Di seguito sono riportati alcuni esempi di ricerca in un repository per un pacchetto specifico (notare che questi sono stati troncati per brevità):

Arch Linux con aurman

user@arch ~ $  aurman -Ss kate

extra/kate 18.04.2-2 (kde-applications kdebase)
    Advanced Text Editor
aur/kate-root 18.04.0-1 (11, 1.139399)
    Advanced Text Editor, patched to be able to run as root
aur/kate-git r15288.15d26a7-1 (1, 1e-06)
    An advanced editor component which is used in numerous KDE applications requiring a text editing component

CentOS 7 con YUM

[user@centos ~]$ yum search kate

kate-devel.x86_64 : Development files for kate
kate-libs.x86_64 : Runtime files for kate
kate-part.x86_64 : Kate kpart plugin

Ubuntu usando APT

user@ubuntu ~ $ apt search kate
Sorting... Done
Full Text Search... Done

kate/xenial 4:15.12.3-0ubuntu2 amd64
  powerful text editor

kate-data/xenial,xenial 4:4.14.3-0ubuntu4 all
  shared data files for Kate text editor

kate-dbg/xenial 4:15.12.3-0ubuntu2 amd64
  debugging symbols for Kate

kate5-data/xenial,xenial 4:15.12.3-0ubuntu2 all
  shared data files for Kate text editor

Quali sono i gestori di pacchetti più importanti?

Come suggerito nell'output precedente, i gestori di pacchetti vengono utilizzati per interagire con i repository software. Quella che segue è una breve panoramica di alcuni dei più importanti gestori di pacchetti.

Gestione pacchetti basati su RPM

L'aggiornamento dei sistemi basati su RPM, in particolare quelli basati sulle tecnologie Red Hat, ha una storia molto interessante e dettagliata. In effetti, le versioni attuali di yum (per le distribuzioni aziendali) e DNF (per la comunità) combinano diversi progetti open source per fornire le loro attuali funzionalità.

Inizialmente, Red Hat utilizzava un gestore di pacchetti chiamato RPM (Red Hat Package Manager), che è ancora in uso oggi. Tuttavia, il suo utilizzo principale è installare gli RPM, che hai localmente, non per cercare repository software. Il gestore di pacchetti denominato up2date è stato creato per informare gli utenti degli aggiornamenti ai pacchetti e consentire loro di cercare repository remoti e installare facilmente le dipendenze. Sebbene servisse al suo scopo, alcuni membri della comunità hanno ritenuto che up2date presentava alcune carenze significative.

L'attuale incantesimo di yum è venuto da diversi sforzi della comunità. Yellowdog Updater (YUP) è stato sviluppato nel 1999-2001 da persone di Terra Soft Solutions come motore back-end per un programma di installazione grafico di Yellow Dog Linux. Alla Duke University è piaciuta l'idea di YUP e ha deciso di migliorarla. Hanno creato Yellowdog Updater, Modified (yum) che alla fine è stato adattato per aiutare a gestire i sistemi Red Hat Linux dell'università. Yum è cresciuto in popolarità e nel 2005 si stima che fosse utilizzato da più della metà del mercato Linux. Oggi, quasi tutte le distribuzioni di Linux che utilizzano RPM utilizzano yum per la gestione dei pacchetti (con alcune eccezioni degne di nota).

Lavorare con yum

Affinché yum scarichi e installi pacchetti da un repository Internet, i file devono trovarsi in /etc/yum.repos.d/ e devono avere l'estensione .repo . Ecco un esempio di file repository:

[local_base]
name=Base CentOS  (local)
baseurl=http://7-repo.apps.home.local/yum-repo/7/
enabled=1
gpgcheck=0

Questo è per uno dei miei repository locali, il che spiega perché il controllo GPG è disattivato. Se questo controllo fosse attivo, ogni pacchetto dovrebbe essere firmato con una chiave crittografica e una chiave corrispondente dovrebbe essere importata nel sistema che riceve gli aggiornamenti. Poiché gestisco personalmente questo repository, mi fido dei pacchetti e non mi preoccupo di firmarli.

Una volta che un file di repository è a posto, puoi iniziare a installare i pacchetti dal repository remoto. Il comando più semplice è yum update , che aggiornerà ogni pacchetto attualmente installato. Questo non richiedere un passaggio specifico per aggiornare le informazioni sui repository; questo viene fatto automaticamente. Di seguito è mostrato un esempio del comando:

[user@centos ~]$ sudo yum update
Loaded plugins: fastestmirror, product-id, search-disabled-repos, subscription-manager
local_base                             | 3.6 kB  00:00:00    
local_epel                             | 2.9 kB  00:00:00    
local_rpm_forge                        | 1.9 kB  00:00:00    
local_updates                          | 3.4 kB  00:00:00    
spideroak-one-stable                   | 2.9 kB  00:00:00    
zfs                                    | 2.9 kB  00:00:00    
(1/6): local_base/group_gz             | 166 kB  00:00:00    
(2/6): local_updates/primary_db        | 2.7 MB  00:00:00    
(3/6): local_base/primary_db           | 5.9 MB  00:00:00    
(4/6): spideroak-one-stable/primary_db |  12 kB  00:00:00    
(5/6): local_epel/primary_db           | 6.3 MB  00:00:00    
(6/6): zfs/x86_64/primary_db           |  78 kB  00:00:00    
local_rpm_forge/primary_db             | 125 kB  00:00:00    
Determining fastest mirrors
Resolving Dependencies
--> Running transaction check

Se sei sicuro di volere che yum esegua qualsiasi comando senza fermarti per l'input, puoi inserire il -y flag nel comando, come yum update -y .

Installare un nuovo pacchetto è altrettanto facile. Per prima cosa, cerca il nome del pacchetto con yum search :

[user@centos ~]$ yum search kate

artwiz-aleczapka-kates-fonts.noarch : Kates font in Artwiz family
ghc-highlighting-kate-devel.x86_64 : Haskell highlighting-kate library development files
kate-devel.i686 : Development files for kate
kate-devel.x86_64 : Development files for kate
kate-libs.i686 : Runtime files for kate
kate-libs.x86_64 : Runtime files for kate
kate-part.i686 : Kate kpart plugin

Una volta che hai il nome del pacchetto, puoi semplicemente installarlo con sudo yum install kate-devel -y . Se hai installato un pacchetto che non ti serve più, puoi rimuoverlo con sudo yum remove kate-devel -y . Per impostazione predefinita, yum rimuoverà il pacchetto più le sue dipendenze.

Ci possono essere momenti in cui non si conosce il nome del pacchetto, ma si conosce il nome dell'utilità. Ad esempio, supponiamo che tu stia cercando l'utilità updatedb , che crea/aggiorna il database utilizzato da locate comando. Tentativo di installare updatedb restituisce i seguenti risultati:

[user@centos ~]$ sudo yum install updatedb
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
No package updatedb available.
Error: Nothing to do

Puoi scoprire da quale pacchetto proviene l'utilità eseguendo:

[user@centos ~]$ yum whatprovides *updatedb
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile

bacula-director-5.2.13-23.1.el7.x86_64 : Bacula Director files
Repo        : local_base
Matched from:
Filename    : /usr/share/doc/bacula-director-5.2.13/updatedb

mlocate-0.26-8.el7.x86_64 : An utility for finding files by name
Repo        : local_base
Matched from:
Filename    : /usr/bin/updatedb

Il motivo per cui ho usato un asterisco * davanti al comando è perché yum whatprovides utilizza il percorso del file per creare una corrispondenza. Poiché non ero sicuro di dove si trovasse il file, ho usato un asterisco per indicare qualsiasi percorso.

Ci sono, ovviamente, molte altre opzioni disponibili per yum. Ti incoraggio a visualizzare la pagina man di yum per ulteriori opzioni.

Dandified Yum (DNF) è una nuova iterazione su yum. Introdotto in Fedora 18, non è stato ancora adottato nelle distribuzioni enterprise, e come tale è utilizzato prevalentemente in Fedora (e derivati). Il suo utilizzo è quasi esattamente lo stesso di yum, ma è stato creato per affrontare scarse prestazioni, API non documentate, risoluzione delle dipendenze lenta/non funzionante e uso occasionale di memoria elevata. DNF è inteso come un sostituto drop-in di yum, e quindi non ripeterò i comandi, ovunque tu voglia usare yum , sostituisci semplicemente dnf .

Lavorare con Zypper

Zypper è un altro gestore di pacchetti pensato per aiutare a gestire gli RPM. Questo gestore di pacchetti è più comunemente associato a SUSE (e openSUSE), ma è stato adottato anche da MeeGo, Sailfish OS e Tizen. È stato originariamente introdotto nel 2006 e da allora è stato ripetuto. Non c'è molto da dire a parte il fatto che Zypper viene utilizzato come back-end per lo strumento di amministrazione del sistema YaST e alcuni utenti lo trovano più veloce di yum.

L'utilizzo di Zypper è molto simile a quello di yum. Per cercare, aggiornare, installare o rimuovere un pacchetto, utilizza semplicemente quanto segue:

zypper search kate
zypper update
zypper install kate
zypper remove kate

Alcune importanti differenze entrano in gioco nel modo in cui i repository vengono aggiunti al sistema con zypper . A differenza dei gestori di pacchetti discussi sopra, zypper aggiunge repository utilizzando lo stesso gestore di pacchetti. Il modo più comune è tramite un URL, ma zypper supporta anche l'importazione da file repository.

suse:~ # zypper addrepo http://download.videolan.org/pub/vlc/SuSE/15.0 vlc
Adding repository 'vlc' [done]
Repository 'vlc' successfully added

Enabled     : Yes
Autorefresh : No
GPG Check   : Yes
URI         : http://download.videolan.org/pub/vlc/SuSE/15.0
Priority    : 99

Rimuovi i repository in modo simile:

suse:~ # zypper removerepo vlc
Removing repository 'vlc' ...................................[done]
Repository 'vlc' has been removed.

Usa i zypper repos comando per vedere qual è lo stato dei repository sul tuo sistema:

suse:~ # zypper repos
Repository priorities are without effect. All enabled repositories share the same priority.

#  | Alias                     | Name                                    | Enabled | GPG Check | Refresh
---+---------------------------+-----------------------------------------+---------+-----------+--------
 1 | repo-debug                | openSUSE-Leap-15.0-Debug                | No      | ----      | ----  
 2 | repo-debug-non-oss        | openSUSE-Leap-15.0-Debug-Non-Oss        | No      | ----      | ----  
 3 | repo-debug-update         | openSUSE-Leap-15.0-Update-Debug         | No      | ----      | ----  
 4 | repo-debug-update-non-oss | openSUSE-Leap-15.0-Update-Debug-Non-Oss | No      | ----      | ----  
 5 | repo-non-oss              | openSUSE-Leap-15.0-Non-Oss              | Yes     | ( p) Yes  | Yes    
 6 | repo-oss                  | openSUSE-Leap-15.0-Oss                  | Yes     | ( p) Yes  | Yes    

zypper ha anche una capacità simile di determinare quale nome di pacchetto contiene file o binari. A differenza di YUM, utilizza un trattino nel comando (sebbene questo metodo di ricerca sia deprecato):

localhost:~ # zypper what-provides kate
Command 'what-provides' is replaced by 'search --provides --match-exact'.
See 'help search' for all available options.
Loading repository data...
Reading installed packages...

S  | Name | Summary              | Type      
---+------+----------------------+------------
i+ | Kate | Advanced Text Editor | application
i  | kate | Advanced Text Editor | package  

Come con YUM e DNF, Zypper ha un set di funzionalità molto più ricco di quello trattato qui. Consulta la documentazione ufficiale per informazioni più approfondite.

Gestori di pacchetti basati su Debian

Una delle più vecchie distribuzioni Linux attualmente mantenute, il sistema di Debian è molto simile ai sistemi basati su RPM. Usano .deb pacchetti, che possono essere gestiti da uno strumento chiamato dpkg . dpkg è molto simile a rpm in quanto è stato progettato per gestire i pacchetti disponibili localmente. Non esegue la risoluzione delle dipendenze (sebbene esegua il controllo delle dipendenze) e non ha un modo affidabile per interagire con i repository remoti. Per migliorare l'esperienza dell'utente e la facilità d'uso, il progetto Debian ha commissionato un progetto chiamato Deity . Questo nome in codice è stato infine abbandonato e cambiato in Advanced Package Tool (APT).

Rilasciato come build di test nel 1998 (prima di fare la sua comparsa in Debian 2.1 nel 1999), molti utenti considerano APT una delle caratteristiche distintive dei sistemi basati su Debian. Fa uso di repository in modo simile ai sistemi basati su RPM, ma invece di singoli .repo file che yum utilizza, apt ha usato storicamente /etc/apt/sources.list per gestire i repository. Più recentemente, importa anche file da /etc/apt/sources.d/ . Seguendo gli esempi nei gestori di pacchetti basati su RPM, per ottenere la stessa cosa su distribuzioni basate su Debian hai alcune opzioni. Puoi modificare/creare i file manualmente nelle suddette posizioni dal terminale o, in alcuni casi, puoi utilizzare un front-end dell'interfaccia utente (come Software & Updates fornito da Ubuntu et al.). Per fornire lo stesso trattamento a tutte le distribuzioni, tratterò solo le opzioni della riga di comando. Per aggiungere un repository senza modificare direttamente un file, puoi fare qualcosa del genere:

user@ubuntu:~$ sudo apt-add-repository "deb http://APT.spideroak.com/ubuntu-spideroak-hardy/ release restricted"

Questo creerà un spideroakone.list file in /etc/apt/sources.list.d . Ovviamente, queste righe cambiano a seconda del repository che viene aggiunto. Se stai aggiungendo un PPA (Personal Package Archive), puoi farlo:

user@ubuntu:~$ sudo apt-add-repository ppa:gnome-desktop

NOTA: Debian non supporta i PPA in modo nativo.

Dopo che un repository è stato aggiunto, i sistemi basati su Debian devono essere informati che esiste una nuova posizione in cui cercare i pacchetti. Questo viene fatto tramite l'apt-get update comando:

user@ubuntu:~$ sudo apt-get update
Get:1 http://security.ubuntu.com/ubuntu xenial-security InRelease [107 kB]
Hit:2 http://APT.spideroak.com/ubuntu-spideroak-hardy release InRelease
Hit:3 http://ca.archive.ubuntu.com/ubuntu xenial InRelease
Get:4 http://ca.archive.ubuntu.com/ubuntu xenial-updates InRelease [109 kB]              
Get:5 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages [517 kB]
Get:6 http://security.ubuntu.com/ubuntu xenial-security/main i386 Packages [455 kB]      
Get:7 http://security.ubuntu.com/ubuntu xenial-security/main Translation-en [221 kB]    
...

Fetched 6,399 kB in 3s (2,017 kB/s)                                          
Reading package lists... Done

Ora che il nuovo repository è stato aggiunto e aggiornato, puoi cercare un pacchetto utilizzando apt-cache comando:

user@ubuntu:~$ apt-cache search kate
aterm-ml - Afterstep XVT - a VT102 emulator for the X window system
frescobaldi - Qt4 LilyPond sheet music editor
gitit - Wiki engine backed by a git or darcs filestore
jedit - Plugin-based editor for programmers
kate - powerful text editor
kate-data - shared data files for Kate text editor
kate-dbg - debugging symbols for Kate
katepart - embeddable text editor component

Per installare kate , esegui semplicemente il comando di installazione corrispondente:

user@ubuntu:~$ sudo apt-get install kate

Per rimuovere un pacchetto, usa apt-get remove :

user@ubuntu:~$ sudo apt-get remove kate

Quando si tratta di scoprire pacchetti, APT non fornisce alcuna funzionalità simile a yum whatprovides . Ci sono alcuni modi per ottenere queste informazioni se stai cercando di trovare la provenienza di un file specifico su disco.

Utilizzo di dpkg

user@ubuntu:~$ dpkg -S /bin/ls
coreutils: /bin/ls

Utilizzo di apt-file

user@ubuntu:~$ sudo apt-get install apt-file -y 

user@ubuntu:~$ sudo apt-file update

user@ubuntu:~$ apt-file search kate

Il problema con apt-file search è che, a differenza di yum whatprovides , è eccessivamente dettagliato a meno che tu non conosca il percorso esatto e aggiunge automaticamente una ricerca con caratteri jolly in modo da ottenere risultati per qualsiasi cosa con la parola kate in esso:

kate: /usr/bin/kate
kate: /usr/lib/x86_64-linux-gnu/qt5/plugins/ktexteditor/katebacktracebrowserplugin.so
kate: /usr/lib/x86_64-linux-gnu/qt5/plugins/ktexteditor/katebuildplugin.so
kate: /usr/lib/x86_64-linux-gnu/qt5/plugins/ktexteditor/katecloseexceptplugin.so
kate: /usr/lib/x86_64-linux-gnu/qt5/plugins/ktexteditor/katectagsplugin.so

La maggior parte di questi esempi ha utilizzato apt-get . Nota che la maggior parte degli attuali tutorial per Ubuntu in particolare hanno iniziato a usare semplicemente apt . Il singolo apt command è stato progettato per implementare solo i comandi più comunemente usati nell'arsenale APT. Poiché la funzionalità è divisa tra apt-get , apt-cache e altri comandi, apt cerca di unificarli in un unico comando. Aggiunge anche alcune sottigliezze come la colorazione, le barre di avanzamento e altre cianfrusaglie. La maggior parte dei comandi sopra indicati possono essere sostituiti con apt ,  ma non tutte le distribuzioni basate su Debian attualmente ricevono il supporto per le patch di sicurezza utilizzando apt per impostazione predefinita, quindi potrebbe essere necessario installare pacchetti aggiuntivi.

Gestori di pacchetti basati su Arch

Arch Linux utilizza un gestore di pacchetti chiamato pacman. A differenza di .deb o .rpm file, pacman usa un tarball più tradizionale con LZMA2 compressione (.tar.xz ). Ciò consente ai pacchetti Arch Linux di essere molto più piccoli rispetto ad altre forme di archivi compressi (come gzip ). Rilasciato inizialmente nel 2002, pacman è stato costantemente aggiornato e migliorato. Uno dei principali vantaggi di pacman è che supporta Arch Build System, un sistema per la creazione di pacchetti dal sorgente. Il sistema di build ingerisce un file chiamato PKGBUILD, che contiene metadati (come numeri di versione, revisioni, dipendenze, ecc.) così come uno script di shell con i flag richiesti per compilare un pacchetto conforme ai requisiti di Arch Linux. I binari risultanti vengono quindi impacchettati nel summenzionato .tar.xz file per il consumo da parte di pacman.

Questo sistema ha portato alla creazione di Arch User Repository (AUR), un repository guidato dalla comunità contenente file PKGBUILD e patch o script di supporto. Ciò consente la disponibilità di una quantità praticamente infinita di software in Arch. L'ovvio vantaggio di questo sistema è che se un utente (o un manutentore) desidera rendere il software disponibile al pubblico, non deve passare attraverso i canali ufficiali per farlo accettare nei repository principali. Lo svantaggio è che si basa sulla cura della community simile a Docker Hub, sui pacchetti Snap di Canonical o altri meccanismi simili. Esistono numerosi gestori di pacchetti specifici per AUR che possono essere utilizzati per scaricare, compilare e installare dai file PKGBUILD in AUR (ne parleremo più avanti).

Lavorare con pacman e repository ufficiali

Il principale gestore di pacchetti di Arch, pacman, usa flag invece di parole di comando come yum e apt . Ad esempio, per cercare un pacchetto, dovresti usare pacman -Ss . Come con la maggior parte dei comandi su Linux, puoi trovare sia una manpage e aiuto in linea. La maggior parte dei comandi per pacman  usa la sincronizzazione (-S) bandiera. Ad esempio:

user@arch ~ $ pacman -Ss kate

extra/kate 18.04.2-2 (kde-applications kdebase)
    Advanced Text Editor
extra/libkate 0.4.1-6 [installed]
    A karaoke and text codec for embedding in ogg
extra/libtiger 0.3.4-5 [installed]
    A rendering library for Kate streams using Pango and Cairo
extra/ttf-cheapskate 2.0-12
    TTFonts collection from dustimo.com
community/haskell-cheapskate 0.1.1-100
    Experimental markdown processor.

Arch utilizza anche repository simili ad altri gestori di pacchetti. Nell'output sopra, i risultati della ricerca sono preceduti dal repository in cui si trovano (extra/ e community/ in questo caso). Simile a entrambi i sistemi basati su Red Hat e Debian, Arch si affida all'utente per aggiungere le informazioni del repository in un file specifico. La posizione di questi repository è /etc/pacman.conf . L'esempio seguente è abbastanza simile a un sistema di stock. Ho abilitato il [multilib] repository per il supporto di Steam:

[options]
Architecture = auto

Color
CheckSpace

SigLevel    = Required DatabaseOptional
LocalFileSigLevel = Optional

[core]
Include = /etc/pacman.d/mirrorlist

[extra]
Include = /etc/pacman.d/mirrorlist

[community]
Include = /etc/pacman.d/mirrorlist

[multilib]
Include = /etc/pacman.d/mirrorlist

È possibile specificare un URL specifico in pacman.conf . Questa funzionalità può essere utilizzata per assicurarsi che tutti i pacchetti provengano da un momento specifico. Se, ad esempio, un pacchetto ha un bug che ti colpisce gravemente e ha diverse dipendenze, puoi tornare a un momento specifico aggiungendo un URL specifico nel tuo pacman.conf e quindi eseguire i comandi per eseguire il downgrade del sistema:

[core]
Server=https://archive.archlinux.org/repos/2017/12/22/$repo/os/$arch

Come i sistemi basati su Debian, Arch non aggiorna le informazioni del suo repository locale finché non glielo dici tu. Puoi aggiornare il database del pacchetto eseguendo il comando seguente:

user@arch ~ $ sudo pacman -Sy 

:: Synchronizing package databases...
 core                                                                     130.2 KiB   851K/s 00:00 [##########################################################] 100%
 extra                                                                   1645.3 KiB  2.69M/s 00:01 [##########################################################] 100%
 community                                                                  4.5 MiB  2.27M/s 00:02 [##########################################################] 100%
 multilib is up to date

Come puoi vedere nell'output sopra, pacman pensa che il database del pacchetto multilib sia aggiornato. Puoi forzare un aggiornamento se ritieni che non sia corretto eseguendo pacman -Syy . Se desideri aggiornare l'intero sistema (esclusi i pacchetti installati da AUR), puoi eseguire pacman -Syu :

user@arch ~ $ sudo pacman -Syu

:: Synchronizing package databases...
 core is up to date
 extra is up to date
 community is up to date
 multilib is up to date
:: Starting full system upgrade...
resolving dependencies...
looking for conflicting packages...

Packages (45) ceph-13.2.0-2  ceph-libs-13.2.0-2  debootstrap-1.0.105-1  guile-2.2.4-1  harfbuzz-1.8.2-1  harfbuzz-icu-1.8.2-1  haskell-aeson-1.3.1.1-20
              haskell-attoparsec-0.13.2.2-24  haskell-tagged-0.8.6-1  imagemagick-7.0.8.4-1  lib32-harfbuzz-1.8.2-1  lib32-libgusb-0.3.0-1  lib32-systemd-239.0-1
              libgit2-1:0.27.2-1  libinput-1.11.2-1  libmagick-7.0.8.4-1  libmagick6-6.9.10.4-1  libopenshot-0.2.0-1  libopenshot-audio-0.1.6-1  libosinfo-1.2.0-1
              libxfce4util-4.13.2-1  minetest-0.4.17.1-1  minetest-common-0.4.17.1-1  mlt-6.10.0-1  mlt-python-bindings-6.10.0-1  ndctl-61.1-1  netctl-1.17-1
              nodejs-10.6.0-1  

Total Download Size:      2.66 MiB
Total Installed Size:   879.15 MiB
Net Upgrade Size:      -365.27 MiB

:: Proceed with installation? [Y/n]

Nello scenario menzionato in precedenza relativo al downgrade di un sistema, puoi forzare un downgrade emettendo pacman -Syyuu . È importante notare che questo non dovrebbe essere preso alla leggera. Ciò non dovrebbe causare problemi nella maggior parte dei casi; tuttavia, esiste la possibilità che il downgrade di uno o più pacchetti provochi un errore a cascata e lasci il sistema in uno stato incoerente. UTILIZZARE CON ATTENZIONE!

Per installare un pacchetto, usa semplicemente pacman -S kate :

user@arch ~ $ sudo pacman -S kate

resolving dependencies...
looking for conflicting packages...

Packages (7) editorconfig-core-c-0.12.2-1  kactivities-5.47.0-1  kparts-5.47.0-1  ktexteditor-5.47.0-2  syntax-highlighting-5.47.0-1  threadweaver-5.47.0-1
             kate-18.04.2-2

Total Download Size:   10.94 MiB
Total Installed Size:  38.91 MiB

:: Proceed with installation? [Y/n]

Per rimuovere un pacchetto, puoi eseguire pacman -R kate . Questo rimuove solo il pacchetto e non le sue dipendenze:

user@arch ~ $ sudo pacman -S kate

checking dependencies...

Packages (1) kate-18.04.2-2

Total Removed Size:  20.30 MiB

:: Do you want to remove these packages? [Y/n]

Se vuoi rimuovere le dipendenze non richiesto da altri pacchetti, puoi eseguire pacman -Rs:

user@arch ~ $ sudo pacman -Rs kate

checking dependencies...

Packages (7) editorconfig-core-c-0.12.2-1  kactivities-5.47.0-1  kparts-5.47.0-1  ktexteditor-5.47.0-2  syntax-highlighting-5.47.0-1  threadweaver-5.47.0-1
             kate-18.04.2-2

Total Removed Size:  38.91 MiB

:: Do you want to remove these packages? [Y/n]

Pacman, in my opinion, offers the most succinct way of searching for the name of a package for a given utility. As shown above, yum and apt both rely on pathing in order to find useful results. Pacman makes some intelligent guesses as to which package you are most likely looking for:

user@arch ~ $ sudo pacman -Fs updatedb
core/mlocate 0.26.git.20170220-1
    usr/bin/updatedb

user@arch ~ $ sudo pacman -Fs kate
extra/kate 18.04.2-2
    usr/bin/kate

Working with the AUR

There are several popular AUR package manager helpers. Of these, yaourt and pacaur are fairly prolific. However, both projects are listed as discontinued or problematic on the Arch Wiki. For that reason, I will discuss aurman . It works almost exactly like pacman, except it searches the AUR and includes some helpful, albeit potentially dangerous, options. Installing a package from the AUR will initiate use of the package maintainer's build scripts. You will be prompted several times for permission to continue (I have truncated the output for brevity):

aurman -S telegram-desktop-bin
~~ initializing aurman...
~~ the following packages are neither in known repos nor in the aur
...
~~ calculating solutions...

:: The following 1 package(s) are getting updated:
   aur/telegram-desktop-bin  1.3.0-1  ->  1.3.9-1

?? Do you want to continue? Y/n: Y

~~ looking for new pkgbuilds and fetching them...
Cloning into 'telegram-desktop-bin'...

remote: Counting objects: 301, done.
remote: Compressing objects: 100% (152/152), done.
remote: Total 301 (delta 161), reused 286 (delta 147)
Receiving objects: 100% (301/301), 76.17 KiB | 639.00 KiB/s, done.
Resolving deltas: 100% (161/161), done.
?? Do you want to see the changes of telegram-desktop-bin? N/y: N

[sudo] password for user:

...
==> Leaving fakeroot environment.
==> Finished making: telegram-desktop-bin 1.3.9-1 (Thu 05 Jul 2018 11:22:02 AM EDT)
==> Cleaning up...
loading packages...
resolving dependencies...
looking for conflicting packages...

Packages (1) telegram-desktop-bin-1.3.9-1

Total Installed Size:  88.81 MiB
Net Upgrade Size:       5.33 MiB

:: Proceed with installation? [Y/n]

Sometimes you will be prompted for more input, depending on the complexity of the package you are installing. To avoid this tedium, aurman allows you to pass both the --noconfirm and --noedit options. This is equivalent to saying "accept all of the defaults, and trust that the package maintainers scripts will not be malicious." USE THIS OPTION WITH EXTREME CAUTION! While these options are unlikely to break your system on their own, you should never blindly accept someone else's scripts.

Conclusione

This article, of course, only scratches the surface of what package managers can do. There are also many other package managers available that I could not cover in this space. Some distributions, such as Ubuntu or Elementary OS, have gone to great lengths to provide a graphical approach to package management.

If you are interested in some of the more advanced functions of package managers, please post your questions or comments below and I would be glad to write a follow-up article.

Appendix

# search for packages
yum search <package>
dnf search <package>
zypper search <package>
apt-cache search <package>
apt search <package>
pacman -Ss <package>

# install packages
yum install <package>
dnf install <package>
zypper install <package>
apt-get install <package>
apt install <package>
pacman -S <package>

# update package database, not required by yum, dnf and zypper
apt-get update
apt update
pacman -Sy

# update all system packages
yum update
dnf update
zypper update
apt-get upgrade
apt upgrade
pacman -Su

# remove an installed package
yum remove <package>
dnf remove <package>
apt-get remove <package>
apt remove <package>
pacman -R <package>
pacman -Rs <package>

# search for the package name containing specific file or folder
yum whatprovides *<binary>
dnf whatprovides *<binary>
zypper what-provides <binary>
zypper search --provides <binary>
apt-file search <binary>
pacman -Fs <binary>

Linux
  1. Gestori di pacchetti Linux:dnf vs apt

  2. 5 motivi per utilizzare i gestori di pacchetti Linux

  3. Come elencare le dipendenze di un pacchetto in Linux

  4. Gestori di pacchetti non root?

  5. L'impatto di SolarWinds Hack sulla catena di fornitura del software statunitense

Aggiornamenti del pacchetto software

DevOps vs Software Engineer:qual è la differenza?

Il comando apt:una guida pratica all'uso

I 15 migliori software di backup per desktop Linux

I 15 migliori software frattali per desktop Linux

I 15 migliori software Linux Reference Manager da utilizzare