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