Je viens de créer un script apt-reb pour APT Reborn.
Le principe est simple, pouvoir revenir en arrière facilement. Seule limitation, la version du logiciel qui n'est pas prise en compte.
Vous souhaitez revenir à une distribution tel qu'elle était après l'avoir installer, c'est possible. A chaque utilisation du script, il va créer un fichier des paquets installés au moment T.
Le script est une surcouche a apt-get. Je n'aime pas les bavardage théoriques, alors je vais vous montrer un exemple.
J'installe midori
sudo apt-reb install midori
Je désinstalle gitg (que j'ai installé précédement)
sudo apt-reb remove gitg
Maintenant je veux revenir en arriere. Je commence par consulter les sauvegarde de listes de fichiers:
sudo apt-reb restore-list
20131023-214206
20131023-214224
Elles apparaissent sous forme de date: AnneeMoisJour-HeureMinuteSeconde, et par ordre chronologique
Je veux donc revenir à la plus ancienne, je fais :
apt-reb restore 20131023-214206
Il me reinstalle donc gitg et me supprime midori, c'est a dire l'opération inverse de précédemment.
Maintenant, si je ne me souvient plus des manip que j'ai fait, ou a quelle date me fier, faites tous simplement
apt-reb history
et vous obtiendrez ceci:
20131023-214206
[install] midori
20131023-214224
[remove] gitg
20131023-214323
[restore] 20131023-214206
Pour le script en question, le voici :
#!/bin/bash
install() {
shift 1
PKG=""
for i in $@
do
PKG="$PKG $i"
done
DATE=$(date '+%Y%m%d-%H%M%S')
f="/var/lib/apt/reborn/"$DATE
dpkg --get-selections >> $f
apt-get install $PKG
if [ $? -lt 1 ];then
echo "" >> /var/log/apt/reborn-history.log
echo $DATE >> /var/log/apt/reborn-history.log
echo ' [install]' $PKG >> /var/log/apt/reborn-history.log
fi
}
remove() {
shift 1
PKG=""
for i in $@
do
PKG="$PKG $i"
done
DATE=$(date '+%Y%m%d-%H%M%S')
f="/var/lib/apt/reborn/"$DATE
dpkg --get-selections >> $f
apt-get remove $PKG
if [ $? -lt 1 ];then
echo "" >> /var/log/apt/reborn-history.log
echo $DATE >> /var/log/apt/reborn-history.log
echo ' [remove]' $PKG >> /var/log/apt/reborn-history.log
fi
}
restore() {
FILE="/var/lib/apt/reborn/$2"
DATE=$(date '+%Y%m%d-%H%M%S')
f="/var/lib/apt/reborn/"$DATE
dpkg --get-selections >> $f
# Suppression des paquets en trop
diff $FILE $f | grep \> | awk '{print $2}' >> /tmp/toremove
REM=""
for line in $(</tmp/toremove)
do
REM="$REM $line"
done
apt-get remove --purge -y $REM
apt-get autoremove --purge
# Rajout des paquets précédemment supprimés
diff $f $FILE | grep \> | awk '{print $2}' >> /tmp/toinstall
INS=""
for line in $(</tmp/toinstall)
do
INS="$INS $line"
done
apt-get install -y $INS
# Suppression des fichiers temporaires
rm /tmp/toremove /tmp/toinstall
if [ $? -lt 1 ];then
echo "" >> /var/log/apt/reborn-history.log
echo $DATE >> /var/log/apt/reborn-history.log
echo ' [restore]' $2 >> /var/log/apt/reborn-history.log
fi
}
restore-list(){
ls -l /var/lib/apt/reborn | awk '{print $9}'
}
update() {
apt-get update
}
upgrade() {
apt-get upgrade
}
dist-upgrade(){
apt-get dist-upgrade
}
clean(){
apt-get clean
}
autoremove(){
apt-get autoremove
}
story(){
cat /var/log/apt/reborn-history.log
}
if [ $# -lt 1 ]; then
echo "Vous devez spécifier un parametre"
exit 1
fi
case $1 in
install) install "$@";;
remove) remove "$@";;
restore) restore "$@";;
restore-list) restore-list;;
update) update;;
upgrade) upgrade;;
dist-upgrade) dist-upgrade;;
clean) clean;;
autoremove) autoremove;;
history) story;;
esac
On peut également utiliser les commande upgrade update dist-upgrade et autoremove d'apt-get avec apt-reb
Installation du fichier /bin/apt-reb
Stockage des listes de paquets installés : /var/lib/apt/reborn
Stockage de l'historique : /var/log/apt/reborn-history.log
J'espère que ça vous plaira, si vous avez des idées d'amélioration n'hésitez pas