Restore dei pacchetti installati in debian

Quando si usa una distrubuzione linux è difficile che non ci si discosti mai dall'installazione iniziale: ci sarà quindi tutta una serie di programmi che vengono installati in momenti successivi e che vanno ad arricchire il nostro sistema.

Il problema che si pone è quindi, nel caso di una reinstallazione del sistema, di installare oltre alla distribuzione iniziale anche tutto questo insieme di pacchetti.

Per fare ciò debian mette a disposizione dei facili comandi. Vediamo come procedere.

Per prima cosa dovremo salvarci da qualche parte la lista dei pacchetti installati. Il comando da usare è quindi:

 # dpkg --get-selections > /tmp/packages.txt

Una seconda cosa da salvare è la lista dei repositori attivati. In debian questa lista si trova nel percorso:

 /etc/apt/sources.list
 /etc/apt/sources.list.d/

Una volta installata la nuova macchina dovremo preoccuparci di attivare tuti i repository dei pacchetti che avevamo precedentemente utilizzato e quindi sarà sufficiente eseguire i seguenti comandi:

 # dpkg --set-selections < /tmp/packages.txt
 # apt-get -y update
 # apt-get dselect-ugrade

Con questi comandi i pacchetti presenti nella lista verranno aggiornati oppure installati ex novo.

Programmazione: 

Limitare l'uso della banda con trickle

Quando lanciamo un processo che esegue un download, questo usa tutta la banda disponibile. A volte questo comportamento può essere poco simpatico.

Pensiamo ad esempio al download di una immagine ISO di qualche giga di dimensione: se si usa l'ADSL casalinga, tutta la banda sarà occupata e a meno che non si abbiano politiche di traffic shaping a livello di rete, il resto delle applicazioni che devono accedere a internet subiranno dei rallentamenti significativi.

Se vogliamo una soluzione software che non implichi di dover scrivere delle specifiche regole di netfilter, possiamo ricorrere a trickle.

Come riporta il suo autore:

trickle is a portable lightweight userspace bandwidth shaper. It can run in collaborative mode (together with trickled) or in stand alone mode.

Per installare trickle è sufficiente un:

  # apt-get install trickle

La sintassi da usare per richiamarlo è:

# trickle -h
Usage: trickle [-hvVs] [-d <rate>] [-u <rate>] [-w <length>] [-t <seconds>]
               [-l <length>] [-n <path>] command ...
        -h           Help (this)
        -v           Increase verbosity level
        -V           Print trickle version
        -s           Run trickle in standalone mode independent of trickled
        -d <rate>    Set maximum cumulative download rate to <rate> KB/s
        -u <rate>    Set maximum cumulative upload rate to <rate> KB/s
        -w <length>  Set window length to <length> KB 
        -t <seconds> Set default smoothing time to <seconds> s
        -l <length>  Set default smoothing length to <length> KB
        -n <path>    Use trickled socket name <path>
        -L <ms>      Set latency to <ms> milliseconds
        -P <path>    Preload the specified .so instead of the default one
#

Supponiamo quindi di voler scaricare la iso dvd di debian wheezy limitando la banda a 50kB in download e 10kB in upload. Il comando da usare sarà:

gtrev@gundam:/tmp$ trickle -s -d 50 -u 10 wget -c http://cdimage.debian.org/debian-cd/7.8.0/amd64/iso-dvd/debian-7.8.0-amd64-DVD-1.iso                                                                               --2015-02-10 23:41:16--  http://cdimage.debian.org/debian-cd/7.8.0/amd64/iso-dvd/debian-7.8.0-amd64-DVD-1.iso
Resolving cdimage.debian.org (cdimage.debian.org)... 130.239.18.173, 130.239.18.163, 130.239.18.165, ...
Connecting to cdimage.debian.org (cdimage.debian.org)|130.239.18.173|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: http://gensho.acc.umu.se/debian-cd/7.8.0/amd64/iso-dvd/debian-7.8.0-amd64-DVD-1.iso [following]
--2015-02-10 23:41:16--  http://gensho.acc.umu.se/debian-cd/7.8.0/amd64/iso-dvd/debian-7.8.0-amd64-DVD-1.iso
Resolving gensho.acc.umu.se (gensho.acc.umu.se)... 130.239.18.176, 2001:6b0:e:2018::176
Connecting to gensho.acc.umu.se (gensho.acc.umu.se)|130.239.18.176|:80... connected.
HTTP request sent, awaiting response... 206 Partial Content
Length: 3972317184 (3.7G), 3971015276 (3.7G) remaining [application/x-iso9660-image]
Saving to: `debian-7.8.0-amd64-DVD-1.iso'
 
 0% [                                           ] 2,681,743   52.4K/s  eta 20h 4m 

Come si può vedere dall'output di wget la velocità di download è di 52.4K/s molto vicina ai 50K/s richiesti.

Programmazione: 

Inviare mail attraverso server SMTP diversi



Io per leggere e scrivere le email uso mutt che, essendo un client, si appoggia a programmi esterni per eseguire l'invio e la ricezione della posta.

Tipicamente in mutt si imposta la variabile sendmail con il programma che si intende utilizzare per l'invio della posta. Ad esempio se si ha una installazione standard di debian wheezy dovremo impostare la variabile in questo modo:

set sendmail="/usr/sbin/sendmail -oem -oi"

e avremo che la posta verrà smistata da exim4.

Tutti ormai hanno account di posta su provider diversi: gmail e yahoo sono forse i più noti, ma anche chi ci fornisce l'adsl quasi sempre ci dà un indirizzo personale da poter utilizzare.

Nel caso di un solo server di posta exim4 può essere impostato in modalità smarthost in modo che rendirizzi la posta verso i server smtp di gmail invece che direttamente verso i destinatari. La cosa si complica un po' se invece si hanno server di posta diversi.

Senza perdermi nei meandri della configurazione di exim4 ho deciso di provare e alla fine di utilizzare stabilmente msmtp.

Msmtp è un client SMTP che trasmette le mail ad un server che poi si occupa dell'instradamento. La particolarità è che msmtp prevede di poter inviare a più server, scegliendo il server in base al valore del campo From della mail.

La configurazione di msmtp sta tutta nel file ~/.mstprc che, nel mio caso, ha la seguente struttura:

# Gmail
account        gmail
host           smtp.gmail.com
port           587
auth            on
tls             on
tls_starttls    on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
from           me@gmail.com
user           me@gmail.com
password       XXXXXXXX
 
# Postecert
account         postecert
host            mail.postecert.it
port            465
auth            on
tls             on
# postecert non funziona se questa opzione è commentata
tls_starttls    off                     
tls_trust_file /etc/ssl/certs/ca-certificates.crt
from            me@postecert.it
user            me@postecert.it
password        YYYYYYYYYYY

Come si può vedere sono definiti due server di posta: per ognuno è descritto il campo From che msmtp userà per decidere verso quale server inviare la mail.

A questo punto non resta che configurare mutt in modo che usi msmtp e che ci permetta di modificare il campo From:

set sendmail="/usr/bin/msmtp"
set use_from=yes
set realname="Your Name"
set from=you@example.com
set envelope_from=yes

La prima opzione imposta msmtp come programma per l'invio delle mail, la seconda indica a mutt di generare il campo From mentre l'ultima indica a mutt di impostare l'opzione -f quando richiama msmtp: con questa opzione msmtp userà il campo From per decidere verso che server indirizzare la mail.

A questo punto quando siamo nella modalità Compose di mutt, con ESC-f andremo a modificare il From a seconda del server smtp che vogliamo usare.

In un prossimo post vedremo come condfigurare mutt in modo da leggere mail da account di posta diversi.

Programmazione: 

Pagine