Dans le cadre de la sortie de Lucid Lynx (Ubuntu 10.04), je vais (oui je sais je suis en retard) ré-installer complétement mon système, puisqu’à cette occasion je change complétement mon PC.


Il va donc me falloir retrouver/lister toutes les applications que j’utilise et les ré-installer toutes.


Pour le premier point, lister les applications utilisé, je peux me baser sur un fichier que je maintiens depuis que je suis sur Ubuntu (avec plus ou moins d’assiduité).


Pour le deuxième point (ré-installation), il y a peu de temps je suis tombé sur cet article A Cleanstart for your new Ubuntu (Install Packages from a list) qui met a disposition un script bash pour ré-installer complétement un PC à partir d’un fichier contenant une liste de package.


Donc en mettant en forme mon fichier listant les applications utilisées avec le script réalisé par SilverWav, je peux gagner pas mal de temps.

Mais je n’étais pas complétement satisfait du script, ce dernier nécessite que tous les dépôts nécessaires soit préalablement configurés, or pour moi c’est 1 seul et même opération que d’ajouter le dépôt et d’installer les packages correspondant.

J’ai donc modifié le script d’installation et le format du fichier de configuration.


Fichier de configuration

Voici un exemple de fichier de configuration :


# ********************** Accessoires ******************************
 
parcellite # gestion du presse-papier
 
ppa:shutter/ppa
shutter # logiciel de capture d'écran évolué
 
# ********************** Autres ******************************
 
deb http://www-personal.umich.edu/~tjwatt/suldr/ debian extra > samsungCLX3175_driver.list
http://www-personal.umich.edu/~tjwatt/suldr/suldr.gpg
samsungmfp-configurator-data samsungmfp-configurator-qt4 samsungmfp-driver samsungmfp-data samsungmfp-scanner # driver imprimante Samsung CLX 3175
 
# ********************** Bureautique ******************************
 
ppa:claydoh/ppa
kmymoney2 # gestion des finances personnels
 
gcstar # gestionnaire de collections (livres)
 
# ********************** Education ******************************
 
gcompris tuxpaint # gcompris + logiciel de dessin matriciel pour les enfants
 
childsplay childsplay-alphabet-sounds-fr # Childsplay + langue française
 
pysycache pysycache-buttons-beerabbit pysycache-buttons-crapaud pysycache-buttons-wolf pysycache-click-sea pysycache-dblclick-butterfly pysycache-move-animals pysycache-move-food pysycache-move-plants pysycache-move-sky pysycache-move-sports pysycache-puzzle-cartoons pysycache-puzzle-photos # Psycache + extensions
 
# ********************** Graphisme ******************************
 
gimp gimp-help-fr # retouche d'image matriciels
 
inkscape # logiciel de dessin vectoriel
 
# Logiciels Photo
ppa:dlynch3/ppa
rapid-photo-downloader # Copie et renommage de photos depuis un appareil photo numérique
 
deb http://jbrout.free.fr/download/debian binary/ > jbrout.list
jbrout # tagging des photos
 
ppa:damien-moore/ppa
phraymd # tagging des photos
 
hugin # assemblage de photos en panorama
 
-f-spot # suppression de f-spot (mono+lourd)
 
# ********************** Internet ******************************
 
ppa:deluge-team/ppa
deluge-common deluge-gtk # IHM GTK du client torrent deluge
 
-transmission-common transmission-gtk # suppression de transmission client torrent installé par défaut dans Gnome
 
# Nouveautés : DAILY > BETA > DEV > STABLE (n'existe pas sous Linux)
#ppa:chromium-daily/ppa
#ppa:chromium-daily/beta
ppa:chromium-daily/dev
chromium-browser # navigateur web
 
pidgin # messagerie instantannée
 
-empathy empathy-common nautilus-sendto-empathy # suppression d'empathy loiciel de messagerie instantannée installé par défaut dans Gnome et de son intégration dans Nautilus
 
thunderbird thunderbird-locale-fr thunderbird-gnome-support # client email
 
deb http://linux.dropbox.com/ubuntu lucid main > dropbox.list
key:FC918B335044912E
nautilus-dropbox # stockage on-line et synchronisation de fichiers
 
# ********************** Jeux ******************************
 
frozen-bubble # jeux où il faut exploser des boules en en associant 3 par couleur
 
# ********************** Outils sytèmes ******************************
 
htop # monitoring mémoire / cpu ...
 
language-pack-fr language-pack-gnome-fr # pack de langue pour completement franciser Ubuntu
 
# ********************** Son et Vidéo ******************************
 
deb http://packages.medibuntu.org/ lucid free non-free > medibuntu.list
key:0C5A2783
non-free-codecs # codecs audio-vidéo non libres
 
asunder # ripp des CDs
 
ppa:handbrake-ubuntu/ppa
handbrake-gtk # ripp des DVDs
 
ppa:c-korn/ppa
vlc # lecteur multimédia (audio/vidéo)
 
# ********************** Outils (non desktop) ******************************
 
autofs # montage automatique de système de fichier distant
 
nfs-common # client NFS
 
deb http://archive.canonical.com/ubuntu lucid partner > partner.list
sun-java6-jre # framework Java
 
vim # editeur VI amélioré



Le fichier de configuration accepte 7 formats de lignes différentes, correspondant chacune à différentes opérations d’installation.


Commentaires

Toutes les lignes commençant par un # sont considérées comme des commentaires


Ajout d’un dépôt PPA

Toutes les lignes du fichier de configuration commençant par « ppa: » sont considérées comme l’adresse d’un dépôt PPA et sera ajouté au système par la commande :

add-apt-repository ppa:[nom du ppa]


Les PPA (Personnal Package Archives) sont des dépôts mis à disposition de tout à chacun sur le site Launchpad, c’est à dire par Canonical.


Ajout d’un dépôt tierce (non PPA)

Toutes les ligne du fichier de configuration commençant par « deb http: » sont considérées comme l’adresse d’un dépôt APT.

Ce genre de ligne doit en plus respecter la syntaxe suivante :

deb http://url.serveur [branche] [sections] > [fichier].list


C’est à dire l’adresse du dépôt complet (ou ligne apt) suivi de « > » et d’un nom de fichier portant l’extension .list.

Le programme d’installation ajoute alors l’adresse du dépôt dans le fichier spécifié dans le répertoire /etc/apt/sources.list.d où les programmes apt (apt-get/aptitude) vont chercher la liste des dépôt lors d’un update.


Ajout d’une clé GPG

Deux façon de faire :

  • Commencer la ligne par le mot-clé « key: » suivi de l’identifiant de la clé (cf.Ajouter la clé publique d’un dépôt (PPA))
  • Donner l’url d’un fichier gpg, la ligne doit donc commencer par « http:« , finir par « .gpg » et être une URL valide


Suppression d’un package / logiciel

Toutes les lignes commençant par « - » seront considérées comme une liste de nom de package que l’on veut supprimer du système


Installation d’un package / logiciel

Toutes les autres ligne du fichier seront considérés comme une liste de nom de package à installer.



Script d’installation

Voici le script capable de prendre en charge le fichier de configuration et de réaliser les installation paramétrées.

Je ne suis pas un expert en programmation bash, il y a donc de fortes chance pour que l’on puisse améliorer le code, je suis preneur de toutes remarques et contributions.


#! /bin/bash
 
################################################################################
# Ubuntu (> 9.10) post installation script
# by VoidAndAny
#
# based on cleanstart-packages.list.sh by silverwav - OpenPGP key:03187548 15 Apr 2009
#
# this script read a config file and :
#     add PPA with add-apt-repository
#    add other repositories (not PPA) by writing them in a .list file in /etc/apt/source.list.d
#    add GPG keys
#     install package using aptitude install
#     remove pacakge using aptitude remove
#
################################################################################
#
# Usage:
# installation.sh
# (reads a file called packages.list by default).
# or
# installation.sh <filename>
#
# Any line starting with a # is ignored as are Blank lines.
# Line beginning by "ppa:" followed by a are used to add PPA repository
# Line beginning by "deb http", containing ">" followed by a file name with ".list" extension are used to add repository in /etc/apt/sources.list.d/
# Line beginning by "key:" followed by a key id are used to add GPG key from keyserver.ubuntu.com
# Line beginning by "http:", ending by ".gpg" are used to download and add GPG key froman URL
# Other lines are package list
#
################################################################################
clear
echo "--------------------------------------------------------------------------------"
echo "                 (cleanstart) Script for installing packages (client)                 "
echo "--------------------------------------------------------------------------------"
 
# ensure script is run as root/sudo
if [ "$(id -u)" != "0" ]
then
 echo ""
 echo "Must execute the script as root user."
 echo "--------------------------------------------------------------------------------"
 exit 1
fi
 
# check the argument count
if [ $# -gt "1" ]
then
 echo ""
 echo "Only one file with package names allowed."
 echo "--------------------------------------------------------------------------------"
 exit 1
fi
 
################################################################################
#### Main
#### args: (1)
#### 1. [out] List of input package names
################################################################################
 
CONFIG_FILE=""
# package names to be installed
PACKAGE_NAME_LIST=""
 
# check if filename was supplied as comand line parameter
if [ $# -eq "1" ]
then
 CONFIG_FILE=$1
else
 CONFIG_FILE=packages.list
fi
 
PACKAGE_NAME_LIST=$(cat $CONFIG_FILE | grep -v -E "(^#)|(^ppa:)|(^deb http)|(^-)|(^key:)|(^http:.*\.gpg)" | awk -F'#' '{ print $1}')
REMOVE_PACKAGE_LIST=$(cat $CONFIG_FILE | grep -E "^-" | awk -F'#' '{ print $1}' | sed 's/^-//g')
PPA_NAME_LIST=$(cat $CONFIG_FILE | grep -E "^ppa:" | awk -F'#' '{ print $1}')
REPOSITORY_KEY_LIST=$(cat $CONFIG_FILE | grep -E "^key:" | awk -F'#' '{ print $1}' | sed 's/^key://g')
GPG_URL_LIST=$(cat $CONFIG_FILE | grep -E "^http:.*\.gpg" | awk -F'#' '{ print $1}')
 
echo ""
echo "Installing PPA:" ${PPA_NAME_LIST}
echo "--------------------------------------------------------------------------------"
 
for i in $(echo  $PPA_NAME_LIST ); do
 add-apt-repository $i;
done
 
echo ""
echo "Installing other repositories (not PPA) "
echo "--------------------------------------------------------------------------------"
 
cat $CONFIG_FILE | grep -E "^deb http:.*>.*\.list" | awk -F'>' '{gsub(/[[:space:]]*/,"",$2) ; print $1 > "/etc/apt/sources.list.d/"$2 }'
 
echo ""
echo "Adding GPG key of other repositories (not PPA) "
echo "--------------------------------------------------------------------------------"
 
for i in $(echo $REPOSITORY_KEY_LIST ); do
 apt-key adv --keyserver keyserver.ubuntu.com --recv-key $i;
done
 
for i in $(echo $GPG_URL_LIST ); do
 wget -O - $i | sudo apt-key add - ;
done
 
echo ""
echo "Updating... "
echo "--------------------------------------------------------------------------------"
 
aptitude update
 
echo ""
echo "Installing packages:" ${PACKAGE_NAME_LIST}
echo "--------------------------------------------------------------------------------"
# ajouter le -y
aptitude install ${PACKAGE_NAME_LIST}
 
echo ""
echo "Uninstalling packages:" ${REMOVE_PACKAGE_LIST}
echo "--------------------------------------------------------------------------------"
 
aptitude remove ${REMOVE_PACKAGE_LIST}
 
echo ""
echo "Done"
echo "--------------------------------------------------------------------------------"


Utilisation

Pour utiliser ce script, il suffit de la lancer avec sudo en lui passant en paramètre le nom du fichier de configuration


Sources :

A Cleanstart for your new Ubuntu (Install Packages from a list)

Image par luvi sous CC BY-NC-ND

Les commentaires sont fermés.