# Gestione dei pacchetti

## dpkg

*Debian Package* (dpkg) e' il comando per installare e rimuovere pacchetti su sistemi basati su Debian. 

### Installazione 

```bash
dpkg -i PACKAGENAME.deb
```
dpkg, se le dipendenze del pacchetto non sono soddisfatte, non installera' il pacchetto. Elenchera' quali dipendenze mancano, ma sara' compito dell'utente installarle.  

Per forzare l'installazione usare il parametro `-f` o `--force`.

### Disinstallazione

```bash
dpkg -r PACKAGENAME
```

Un pacchetto non puo' essere rimosso, se non sia stato rimosso anche ogni altro pacchetto che dipende da esso. 

```bash
dpkg -P PACKAGENAME
```

In questo modo vengono rimossi anche i file di configurazione, che altrimenti restano nel sistema. 

### Ottenere informazioni sui pacchetti

```bash
dpkg -I PACKAGENAME
```

### Elencare i pacchetti

Per avere una lista di tutti i pacchetti installati sul sistema:

```bash
dpkg --get-selections
```
Per avere un elenco di tutti i file installati da un pacchetto:

```bash
dpkg -L PACKAGENAME
```

### Riconfigurare i pacchetti

Per ripristinare le impostazioni di un pacchetto allo stato iniziale:

```bash
dpkg-reconfigure PACKAGENAME
```

## APT

*Advanced Package Tool* e' un sistema di gestione dei pacchetti che *risolve in automatico le dipende*. E' come un *front-end* di dpkg, che ne semplifica l'utilizzo e ne colma diverse lacune.

Esistono diverse utility:

- **apt-get**
- **apt-cache**
- **apt-file**
- **apt**: combina le funzionalita' di apt-get e apt-cache

### Aggiornare l'indice dei pacchetti

```bash
apt-get update
```

### Installare e rimuovere pacchetti

Prima di installare un pacchetto, buona prassi e' quella di aggiornare gli indici

```bash
apt-get install PACKAGENAME

apt-get remove PACKAGENAME
```
APT risolve automaticamente le dipendenze. Verranno quindi installati anche degli eventuali pacchetti aggiuntivi richiesti dal pacchetto che si sta installando. Verranno anche rimossi i pacchetti che dipendono dal pacchetto che si sta rimuovendo.

I file di configurazione rimangono sul sistema. Per eliminare qualsiasi cosa associata la pacchetto:

```bash
apt-get purge PACKAGENAME
```

### Riparare dipende

Per risolvere dipendenze errate o mancanti:

```bash
apt-get install -f
```

### Aggiornare i pacchetti

Per aggiornare tutti i pacchetti:

```bash
apt-get upgrade
```

Per aggiornare un singolo pacchetto:

```bash
apt-get upgrade PACKAGENAME
```

### Cache locale

Quando si installa o aggiorna un pacchetto, il corrispondente file *.deb *viene scaricato in una cartella locale di cache, che di default e': `/var/cache/apt/archives/`. I file parzialmente scaricati si trovano invece in `/var/cache/apt/archives/partial`. Per svuotare la directory di cache usare il comando `apt-cache clean`. 

### Ricercare pacchetti

```bash
apt-cache search
```

Il comando seguente mostra i dettagli su un determinato pacchetto:

```bash
apt-cache show PACKAGENAME
```

### Elencare il contenuto di un pacchetto

```bash
apt-file list PACKAGENAME
```

### Repository

APT utilizza una lista di fonti (*repository*) per sapere da dove ottenere i pacchetti. Questo fonti sono memorizzate nel file `/etc/apt/sources.list` e nei file contenuti nella directory `/etc/apt/sources.list.d/`.

la sintassi:

```bash
cat /etc/apt/sources.list

# Debian SID
deb http://deb.debian.org/debian/ unstable main contrib non-free non-free-firmware

# Tipo archivio URL distribuzione componenti
```
#### Tipo

File binari (.deb) o sorgenti, *deb-src*

#### Componenti

Diversi tra le distribuzioni, su Debian i componenti principali sono:

- **main**: pacchetti conformi alle *Debian Free Software Guidelines* (DFSG)
- **contrib**: pacchetti conformi alle DFSG, ma che dipendono da pacchetti che non sono in main
- **non-free**: pacchetti non conformi alle DFSG
- **security**: aggiornamenti di sicurezza
- **backports**: versioni piu' recenti dei pacchetti che si trovano in main
```