Pages : 1
#1 Le 20/04/2011, à 10:42
- Lad
Script post-installation ubuntu
Bonjour
J'ai écris le petit script suivant pour installer rapidement les programmes que j'utilise après une installation nouvelle d'ubuntu.
Le script fonctionne mais j'aimerais avoir votre avis car j'aimerais qu'il soit assez robuste. Par ailleurs, lors de l'installation de paquets, apt-get suggère d'installer d'autres paquets. Je voulais savoir s'il est recommandé de les installer et sur qu'elle base apt-get les propose ?
Merci pour votre aide
Voici les étapes du script :
1) Active le dépot canonical partner
2) Active le dépot medibuntu
3) Si $codecs == "oui" installe non-free-codecs et libdvdcss2
4) Installe successivement tous les paquets contenu dans les variables de la
section "liste des paquets par catégories"
5) Ajoute le dépot de virtualbox et installe virtualbox
#!/bin/bash
# Lancer le script en tant que root (faire sudo -s avant)
#
# Des erreurs peuvent survenir car certains paquets n'ont pas été téléchargés, le script
# peut être lancer plusieurs fois si nécessaire.
#
# ----------------------------------------------------------------------------------------
# liste des paquets par catégories
# ----------------------------------------------------------------------------------------
# attribuer oui ou non à la variable codecs. si $codecs == oui les paquets non-free-codecs
# et libdvdcss2 seront installé, si $codecs == non rien de spécila n'est fait
codecs="oui"
# donner une liste de paquets dans chaque variable. Si vous rajouter une variable ajouter
# les lignes correspondantes dans la section "installation des paquets par catégories".
compilateur="build-essential gcc gfortran"
python="ipython python-qt4 python-numpy python-scipy python-matplotlib pymol"
editeur="vim-gnome"
sciences="grace gnuplot gperiodic gchempaint openmpi-bin"
media="vlc mozilla-plugin-vlc gimp inkscape blender povray jokosher cheese"
latex="texlive texlive-lang-french texlive-latex-extra kbibtex aspell-fr"
divers="acroread filezilla gnome-do compizconfig-settings-manager chromium-browser wine"
# ----------------------------------------------------------------------------------------
# initialisation
# ----------------------------------------------------------------------------------------
echo -e "\n\t * * *\e[0;94m Complète l'installation d'ubuntu \e[0m * * * \n"
# fichier log
log="install.log"
if [[ -f $log ]]
then
rm -iv $log
else
touch $log
fi
# ----------------------------------------------------------------------------------------
# quelques fonctions
# ----------------------------------------------------------------------------------------
function message {
# affiche un message sur stdout et dans le log
echo -e "\n# --------------------------------------------------" | tee -a $log
echo "# $1" | tee -a $log
echo -e "# --------------------------------------------------\n" | tee -a $log
}
function myecho {
# affiche une ligne écrite en bleu
echo -e "\n\t * * *\e[0;94m $1 \e[0m * * * \n"
echo -e "\n\t * * * $1 * * * \n" >> $log
}
function myechovert {
# affiche une ligne écrite en vert
echo -e "\n\t * * *\e[0;32m $1 \e[0m * * * \n"
echo -e "\n\t * * * $1 * * * \n" >> $log
}
function myechored {
# affiche une ligne écrite en rouge
echo -e "\n\t * * *\e[0;91m $1 \e[0m * * * \n"
echo -e "\n\t * * * $1 * * * \n" >> $log
}
installe=""
nonInstalle=""
function section_install {
# attend comme arguments une liste de paquets
for paquet in $*
do
# install package if package not already installed
myecho "installation de $paquet"
apt-get --auto-remove --yes -q install $paquet | tee -a $log
# test if package well installed
if [[ $? == 0 && -n "$(dpkg --status $1 | grep "Status" | grep "install ok installed")" ]]
then
myechovert "$paquet installé"
installe="$installe $paquet"
else
myechored "Erreur lors de l'installation de $paquet"
nonInstalle="$nonInstalle $paquet"
fi
done
}
# ----------------------------------------------------------------------------------------
# active le depot canonical partners
# ----------------------------------------------------------------------------------------
message "active le depot canonical partners"
cp -v /etc/apt/sources.list /etc/apt/sources.list.bak | tee -a $log
echo "sed \"s/# deb http\:\/\/archive.canonical.com/deb http\:\/\/archive.canonical.com/\" /etc/apt/sources.list > sources.list.new" | tee -a $log
sed "s/# deb http\:\/\/archive.canonical.com/deb http\:\/\/archive.canonical.com/" /etc/apt/sources.list > sources.list.new
cp -v sources.list.new /etc/apt/sources.list | tee -a $log
# ----------------------------------------------------------------------------------------
# ajout du depot medibuntu
# http://doc.ubuntu-fr.org/medibuntu#ajouter_le_depot_medibuntu
# ----------------------------------------------------------------------------------------
message "Ajout de medibuntu"
echo "wget http://www.medibuntu.org/sources.list.d/`lsb_release -cs`.list --output-document=/etc/apt/sources.list.d/medibuntu.list" | tee -a $log
wget http://www.medibuntu.org/sources.list.d/`lsb_release -cs`.list --output-document=/etc/apt/sources.list.d/medibuntu.list | tee -a $log
echo "apt-get -q update" | tee -a $log
apt-get -q update >> $log
echo "apt-get --yes -q --allow-unauthenticated install medibuntu-keyring" | tee -a $log
apt-get --yes -q --allow-unauthenticated install medibuntu-keyring | tee -a $log
if [[ $? == 0 ]]
then
myechovert "medibuntu-keyring installé"
else
myechored "medibuntu non ajouté, relancer le script devrait suffire"
exit 1
fi
# ----------------------------------------------------------------------------------------
# mise à jour des sources de logiciels
# ----------------------------------------------------------------------------------------
message "mise à jour des paquets"
myecho "apt-get -q clean"
apt-get -q clean >> $log
myecho "apt-get -q update"
apt-get -q update >> $log
myecho "apt-get -q --yes upgrade"
apt-get -q --yes upgrade | tee -a $log
# ----------------------------------------------------------------------------------------
# installation des paquets non-free-codecs et libdvdcss2
# necessite un traitement particulier pour être sur que non-free-codecs est installé avant
# libdvdcss2 sinon ça peut poser problème
# ----------------------------------------------------------------------------------------
if [[ $codecs == "oui" ]]
then
message "codecs multimédia propriétaires"
myecho "installation de non-free-codecs"
apt-get --auto-remove --yes -q install non-free-codecs | tee -a $log
# test if package well installed
if [[ $? == 0 && -n "$(dpkg --status non-free-codecs | grep "Status" | grep "install ok installed")" ]]
then
myechovert "non-free-codecs installé"
installe="$installe non-free-codecs"
myecho "installation de libdvdcss2"
apt-get --auto-remove --yes -q install libdvdcss2 | tee -a $log
if [[ $? == 0 && -n "$(dpkg --status libdvdcss2 | grep "Status" | grep "install ok installed")" ]]
then
myechovert "libdvdcss2 installé"
installe="$installe libdvdcss2"
else
myechored "Erreur lors de l'installation de libdvdcss2 - relancer le script"
exit 1
fi
else
myechored "Erreur lors de l'installation de non-free-codecs - relancer le script devrait être suffisant"
exit 1
fi
fi
# ----------------------------------------------------------------------------------------
# installation des paquets par catégories
# ----------------------------------------------------------------------------------------
message "compilateur et developpement"
section_install $compilateur
message "python"
section_install $python
message "editeurs"
section_install $editeur
message "sciences"
section_install $sciences
message "media : son, graphisme et video"
section_install $media
message "latex"
section_install $latex
message "divers"
section_install $divers
# ----------------------------------------------------------------------------------------
# installation de virtual box 4.0
# ----------------------------------------------------------------------------------------
message "installation de virtual box 4.0"
grep virtualbox /etc/apt/sources.list
if [[ ! $? == 0 ]]
then
echo "deb http://download.virtualbox.org/virtualbox/debian `lsb_release -sc` contrib" | sudo tee -a /etc/apt/sources.list
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 98AB5139
apt-get update >> $log
else
myecho "depot virtualbox déjà présent"
fi
paquet="virtualbox"
myecho "installation de $paquet"
apt-get --auto-remove --yes -q install $paquet | tee -a $log
# test if package well installed
if [[ $? == 0 ]]
then
myechovert "$paquet installé"
installe="$installe $paquet"
else
myechored "Erreur lors de l'installation de $paquet"
nonInstalle="$nonInstalle $paquet"
fi
echo -e "\nvoir http://doc.ubuntu-fr.org/virtualbox\n"
# ----------------------------------------------------------------------------------------
# nettoyage
# ----------------------------------------------------------------------------------------
message "nettoyage"
echo "apt-get -q --yes autoremove" | tee -a $log
apt-get -q --yes autoremove | tee -a $log
# ----------------------------------------------------------------------------------------
# bilan
# ----------------------------------------------------------------------------------------
message "bilan installation"
for paquet in $installe
do
printf "%40s : \t \e[0;32m installé\e[0m \n" "$paquet"
echo -e "$paquet \t\t installé" >> $log
done
declare -i i=0
for paquet in $nonInstalle
do
((i=$i+1))
printf "%40s : \t \e[0;91m non installé\e[0m \n" "$paquet"
echo -e "$paquet \t\t non installé !!" >> $log
done
# ----------------------------------------------------------------------------------------
# fin du script, suppléments :
# ----------------------------------------------------------------------------------------
if [[ ! $i == 0 ]]
then
myechored "nombre d'erreur : $i"
fi
exit $i
Hors ligne
#2 Le 20/04/2011, à 11:35
- beware
Re : Script post-installation ubuntu
Gcc n'est pas déjà compris dans build-essential?
Après pour le reste, du peu que je connaisse c'est pas trop mal. Le problème de ce genre de script (et j'en avais fait 1 pour moi) c'est qu'il sont en général personnel, ciblé pour un type de personne.
Par exemple, si je prends mon cas, l'installation des paquets python ne m'est pas utile.
Hors ligne