giovedì 8 agosto 2013

Il Restore dopo il Backup


Premessa

Dopo una prolungata assenza dovuta a pigrizia cronica, torno tra le righe di questo blog autarchico.

Avevo predetto in passato che la nuova Debian Wheezy, sarebbe presto diventato un punto di riferimento nell'intero panorama sfenisciforme. Ebbene questa è stata la previsione più errata che la storia ricordi dopo quella della vittoria di Napoleone a Waterloo.

Potremmo dire che la cara Debian è stata accolta dalla comunità con un gelo polare, tra le critiche al kernel 3.2 (impensabile nel 2013) e la tristezza delle nuove interfacce.

Insomma, Ubuntu è riuscita a imborghesire il mondo Linux che ora pretende tutto, subito e possibilmente un tutto che non sia Gnome Shell, a costo di perdersi tra le ricerche di Amazon e i non menù di Unity.

Il Restore

Quando ho parlato dell'installazione di Debian Wheezy arzigogolando sulla vecchia testing, ho introdotto Debian Multimedia.

Senza allarmismi avevo avvisato che per usare tale repository occorreva operare un security breach, cioè installare una chiave di sicurezza ulteriore rispetto a quella dei repositories ufficiali.

Poi sono accaduti una serie di eventi, che oltre ad aver diffuso tali ingiustificati allarmismi, hanno portato da una parte ad un cambio di dominio con mancato rinnovo e dall'altra, all'inclusione di tali codec nei repositories principali, con conseguente sovrapposizione delle versioni.

A questo punto, l'introduzione di repositories non ufficiali è una pratica che sconsiglierei (al limite se vi serve Avidemux, potete compilarvelo come ho fatto io).

Cosa c'entra questo discorso col restore ?

C'entra perché per cancellare i vecchi repositories e fare un po`di pulizia ho deciso di provare a reinstallare la Wheezy da zero e, grazie alla tecnica di partizionamento del disco che ho spiegato a suo tempo, insieme a qualche link spazzato via e subito ricostruito il posizionamento della partizione dati, con /var, /opt e /usr/local è rimasto invariato.

Faccio notare che per essere sicuri è opportuno anche salvare /etc , visto che c'è sempre qualche configurazione di sistema che va rivista, magari con un diff, nel mio caso c'era un file xorg.conf che mi serviva per configurare il dual screen.

Nel mio vecchio post su rdiff-backup o qualsiasi altro backup impossibile preferiate, avevo chiarito che il backup serve solo sulla partizione dati che contiene anche ciò che installiamo e non sui pacchetti di sistema, i quali essendo appunto di sistema, sono in continuo aggiornamento e sono disponibili ovunque in rete.

Ripristinato il backup che preferite con il programma che preferite, che nel caso di rdiff-backup diventa qualcosa tipo :


rdiff-backup -r now <backup> <local>

o non ripristinato affatto nei casi, come questo, vogliate solo reinstallare il sistema operativo e tenervi la vostra partizione dati intonsa, nella vostra mente potrebbe balenare la domanda che ogni sistemista si pone almeno una volta nella vita  :

"Come si fa a rimuovere un sistema operativo e reinstallarlo esattamente come era prima ?"

Ebbene, premesso che moltissime aziende su questa domanda hanno costruito una fortuna, e molti sistemisti Windows ancora oggi si pongono disperatamente questa domanda, direi che Debian ha risolto decentemente questo dilemma (o quasi) con il famoso :

dpkg --get-selections

Get Selections

Questo semplicissimo comando mostra un elenco di pacchetti e lo stato, tipicamente install/deinstall , una lista con una serie di righe tipo questa :

....
xserver-xorg-video-vmware            install
xserver-xorg-video-voodoo            install
xterm                                install
xtrans-dev                           install
xulrunner-17.0                       install
xz-utils                             install
yasm                                 install
yelp                                 install
yelp-xsl                             install
zenity                               install
zenity-common                        install
zip                                  install
zlib1g:amd64                         install
....                                     

Ebbene cosa si fa con questa lista ?

La prima cosa è salvarcela da qualche parte, per esempio :

dpkg --get-selections > /<disco di backup>/dpkg.selections

meglio se lo si fa periodicamente, ideale se lo si fa insieme al backup, magari come root e si salva ovviamente sul disco di backup stesso.

Questo ci da una fotografia esatta di come è lo stato del sistema in un determinato momento, cosa che ci servirà proprio durante il Restore.

Set Selections ... ma anche no.

A questo punto su molti forum sbrigativi trovate scritto che la funzione opposta a dpkg --get-selection è  :

dpkg --set-selections  < /<disco di backup>/dpkg.selections 

seguito da un :

aptitude install

o qualcosa del genere.

Questo approccio, apparentemente semplice, non tiene conto di diversi fattori ma principalmente del fatto che a differenza di apt, aptitude non ha i poteri della supermucca e quindi le cose possono apparire molto più complesse di quello che ci si immagina.

Volendo un approccio più completo che tenesse conto anche dei pacchetti rimossi oltre che di quelli installati, ho provveduto ad uno script indicativo per maneggiare dpkg.selections, eccolo qui :


#!/bin/bash

function apt_purge
{
  while read t
  do
  a=($t)
  if [ ${a[1]} == deinstall ]
  then
    apt-get -y purge ${a[0]}
  fi
  done
}


function apt_install
{
  while read t
  do
  a=($t)
  if [ ${a[1]} == install ]
  then
    apt-get -y install ${a[0]}
  fi
  done
}

cat $1 | apt_install
cat $1 | apt_purge





Ipotizziamo di chiamarlo restorelist.sh , il comando da dare, una volta reinstallato il sistema e attaccato il disco di backup è il seguente :

sudo ./restorelist.sh <lista di get-selections>

La prima cosa che lo script fa è installare tutti i pacchetti richiesti, cioè quelli contrassegnati come install, poi nella fase successiva, rimuovere completamente (con un purge) tutti quelli che sono indicati come deinstall, quindi sia quelli precedentemente installati dalla distribuzione e successivamente rimossi, sia quelli installati durante l'ultima fase di install come pacchetti non strettamente dipendentie poi rimossi.

Conseguenze

Operare in questo modo sulla lista può provocare alcune piccole anomalie che devono essere risolte manualmente. Per esempio se si disinstalla Zeitgeist , lo ritroveremo installato, questo perché non appare nella lista sotto forma di deinstall ma è rimosso da questa e reintrodotto come dipendenza.

Questo accade in generale per tutte le dipendenze opzionali rimosse mentre non accade per pacchetti rimossi direttamente.

Un'altra cosa piuttosto rara che può accadere è che dipendenze rimosse diventino obbligatorie in release successive dei pacchetti, in questo caso potrebbe essere eliminato del software appena installato e si dovrà modificare manualmente la lista affinché ciò non accada.


Capita invece di frequenti che alcuni pacchetti non siano generici ma riportino un numero di versione (il che in generale consente di installare per esempio più versioni del gcc o dello xulrunner o più semplicemente del kernel. In questo caso il passaggio da una versione all'altra porta spesso ad una sparizione della versione precedente. Per ovviare a questo si può lanciare lo script con il seguente suffisso :

sudo ./restorelist.sh <lista di get-selections> 2>&1 >error.log

e leggersi il file di log per stabilire cosa non è stato trovato da una versione all'altra, quindi porvi rimedio.

In questo modo è possibile anche ripristinare, con un minimo di lavoro i pacchetti tra differenti versioni o sulle rolling release e nella sua semplicità è certamente uno strumento piuttosto potente.

Nessun commento:

Posta un commento