Bonjour à tous,
Pour gagner du temps, j'ai récemment écrit un script de post-installation pour Ubuntu 13.04. J'ai hésité longuement à soumettre ce script car il est souvent propre à chacun et celui-ci n'échappe pas à la règle. Il peut néanmoins servir facilement de base pour d'autres personnes.
#!/bin/bash
#########################################################################
# Filename : post-installation_ubuntu_13.04.sh #
# Description : post-installation script on Ubuntu 13.04 #
# Authors : nicolas66 #
# Last release: 19-06-2013 #
# Requirements: zenity #
#########################################################################
function upgrade_system()
{
sudo apt-get dist-upgrade
}
function install_nvidia_drivers()
{
sudo apt-get update
sudo apt-get install -y linux-headers-generic
sudo apt-get dist-upgrade
if [ -f ~/.reboot1 ]; then
\rm -f ~/.reboot{0..1}
fi
if [ ! -f ~/.reboot0 ]; then
touch ~/.reboot0
zenity --info --text="L'ordinateur va rebooter une première fois (relancer cette étape)"
sudo reboot
fi
sudo apt-get install -y nvidia-current-updates
nvidia-xconfig
if [ ! -f ~/.reboot1 ]; then
touch ~/.reboot1
zenity --info --text="L'ordinateur va rebooter une seconde et dernière fois (le logo nvidia doit apparaître)"
sudo reboot
fi
}
function remove_dash_shell()
{
zenity --info --text="Répondre 'yes' puis 'ok' sur l'écran qui suit"
sudo dpkg-reconfigure dash
}
function get_bash_scripts()
{
sudo apt-get install -y lftp
local_dir=$(zenity --entry --text="Veuillez saisir le dossier local des scripts :" --entry-text="")
remote_dir=$(zenity --entry --text="Veuillez saisir le dossier distant des scripts :" --entry-text="")
ftp_servername=$(zenity --entry --text="Veuillez saisir le nom du serveur ftp :" --entry-text="")
username=$(zenity --entry --text="Veuillez saisir le login du compte ftp :" --entry-text="")
c1="[ -d ${local_dir} ] && (lftp -e \"open ${ftp_servername}; user ${username}; mirror -v ${remote_dir} ${local_dir}; bye\"; chmod -R 755 ${local_dir}) || echo \"error: directory ${local_dir} does not exist\""
c2="[ -d ${local_dir} ] && lftp -e \"open ${ftp_servername}; user ${username}; mirror -v -R ${local_dir} ${remote_dir}; bye\" || echo \"error: directory ${local_dir} does not exist\""
if [ ! -d "${local_dir}" ]; then
mkdir "${local_dir}"
eval "${c1}"
else
zenity --question --text="Le répertoire ${local_dir} existe déjà. L'écraser ?"
[ $? -eq 0 ] && eval "${c1}"
fi
if [ ! -f ${local_dir}/bash_aliases_common.sh ]; then
touch ${local_dir}/bash_aliases_common.sh
fi
if [ ! -f ~/.bash_aliases ] || zenity --question --text="Le fichier ~/.bash_aliases existe déjà. L'écraser ?"; then
(
echo -e '#!/bin/bash\n'
echo -e "alias get_scripts='${c1}'"
echo -e "alias put_scripts='${c2}'"
echo -e "source ${local_dir}/bash_aliases_common.sh"
echo -e "source ${local_dir}/bash_aliases_${HOSTNAME}.sh"
) > ~/.bash_aliases
fi
zenity --info --text "Pensez à fermer et ouvrir à nouveau votre terminal pour que les changements soient pris en compte."
}
function mount_nas()
{
user=$(zenity --entry --text="Veuillez saisir le login du NAS :" --entry-text="")
ip=$(zenity --entry --text="Veuillez saisir l'adresse ip du NAS :" --entry-text="")
port=$(zenity --entry --text="Veuillez saisir le port SSH du NAS :" --entry-text="")
local_dir=$(zenity --entry --text="Veuillez saisir le dossier de stockage local :" --entry-text="")
remote_dir=$(zenity --entry --text="Veuillez saisir le dossier de stockage distant :" --entry-text="")
[ ! -d "${local_dir}" ] && sudo mkdir "${local_dir}"
line="${ip}:${remote_dir} ${local_dir} nfs defaults,_netdev 0 2"
zenity --entry --text="Veuillez copier la ligne suivante et l'ajouter à la fin du fichier qui suit :" --entry-text="${line}" &>/dev/null
sudo gedit /etc/fstab
sudo mount -a
}
function remove_plugins_and_lenses()
{
sudo apt-get remove -y --purge account-plugin-aim \
account-plugin-facebook \
account-plugin-flickr \
account-plugin-google \
account-plugin-icons \
account-plugin-identica \
account-plugin-jabber \
account-plugin-salut \
account-plugin-twitter \
account-plugin-windows-live \
account-plugin-yahoo \
gnome-online-accounts \
unity-lens-*
}
function restore_old_scrollbars()
{
sudo apt-get remove -y --purge overlay-scrollbar
}
function install_ssmtp()
{
sudo apt-get install -y ssmtp
sending_mail=$(zenity --entry --text="Veuillez saisir l'adresse gmail d'envoi :" --entry-text="")
mail_server=$(zenity --entry --text="Veuillez saisir le serveur smtp :" --entry-text="smtp.gmail.com:587")
user_login=$(zenity --entry --text="Veuillez saisir l'identifiant du compte gmail :" --entry-text="")
user_passwd=$(zenity --entry --text="Veuillez saisir le mot de passe du compte gmail :" --entry-text="")
host_name=$(hostname)
str=$(cat << EOF
#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=${sending_mail}
# The place where the mail goes. The actual machine name is required no
# MX records are consulted. Commonly mailhosts are named mail.domain.com
mailhub=${mail_server}
# Where will the mail seem to come from?
#rewriteDomain=
# The full hostname
hostname=${host_name}
# User
AuthUser=${user_login}
AuthPass=${user_passwd}
# TLS
UseSTARTTLS=YES
# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
FromLineOverride=NO
EOF
)
echo "${str}" | sudo tee /etc/ssmtp/ssmtp.conf >/dev/null
}
function move_window_buttons()
{
# move window buttons on right
sudo gsettings set org.gnome.desktop.wm.preferences button-layout ':minimize,maximize,close'
}
function active_history_completion()
{
cat > ~/.inputrc << EOF
"\e[A": history-search-backward
"\e[B": history-search-forward
set show-all-if-ambiguous on
set completion-ignore-case on
EOF
}
function customize_grub2()
{
# install grub-customizer
sudo apt-add-repository ppa:danielrichter2007/grub-customizer
sudo apt-get update
sudo apt-get install -y grub-customizer
# backup original config
sudo cp -Rv /etc/grub.d /etc/grub.d.ori
# remove memtest entries
sudo chmod -x /etc/grub.d/20_memtest86+
# edit configuration file
zenity --info --text="Dans ce qui suit, mettre la variable 'GRUB_DISABLE_RECOVERY' à 'false'."
sudo gedit /etc/default/grub
sudo update-grub
# run grub-customizer
zenity --info --text="Dans ce qui suit:\n- Renommer les entrées 'Ubuntu' et 'Windows'\n- Supprimer le sous-menu 'Options avancées'"
sudo grub-customizer
}
function customize_firefox()
{
sudo mkdir /usr/share/ubuntu
sudo ln -s /usr/share/unity-webapps /usr/share/gnome/unity-webapps
sudo ln -s /usr/share/unity-webapps /usr/share/ubuntu/unity-webapps
sudo ln -s /usr/share/unity-webapps /usr/local/share/unity-webapps
zenity --entry --text="Veuillez saisir la clé pour configurer Firefox Sync :" --entry-text=""
firefox
}
function install_java()
{
sudo apt-add-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install -y oracle-java7-installer
cd /usr/lib/jvm
sudo ln -s java-7-oracle default-java
cd - &> /dev/null
}
function install_lamp_server()
{
# packages
sudo apt-get install -y apache2 \
php5 \
mysql-server \
libapache2-mod-php5 \
php5-mysql \
phpmyadmin \
libapache2-mod-auth-mysql \
php5-curl \
php5-xsl
# modules activation
sudo a2enmod auth_mysql userdir ssl
sudo a2ensite default-ssl
# creation of public_html directory
mkdir ~/public_html
chmod o+x ~ ~/public_html/
# edit files
zenity --info --text="Dans ce qui suit, mettre en commentaire la ligne contenant 'php_admin_value'."
sudo gedit /etc/apache2/mods-available/php5.conf
zenity --info --text="Dans ce qui suit, ajouter la ligne 'ServerName 127.0.0.1'."
sudo gedit /etc/apache2/apache2.conf
zenity --info --text="Dans ce qui suit, remplacer resp. les directives 'AllowOverride' et 'Options' par :\n- AllowOverride All\n- Options Indexes FollowSymLinks"
sudo gedit /etc/apache2/mods-enabled/userdir.conf
# reloading
sudo service apache2 restart
sudo /etc/init.d/apache2 reload
}
function install_ssh_server()
{
# install package
sudo apt-get install -y ssh
# edit server config file
zenity --info --text="Dans ce qui suit, indiquer la valeur du port SSH et basculer 'PermitRootLogin' à 'no'."
sudo gedit /etc/ssh/sshd_config
}
function install_web_dev_kit()
{
sudo apt-get update
sudo apt-get install -y python-software-properties
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install -y nodejs
sudo npm install jshint recess connect hogan.js uglify-js@1 -g
sudo ln -s /usr/bin/nodejs /usr/bin/node
}
function install_latex()
{
sudo apt-get install -y texlive \
texlive-bibtex-extra \
texlive-fonts-extra \
texlive-lang-french \
texlive-math-extra \
texlive-pictures \
texlive-science \
texlive-latex-extra
}
function install_extra_packages()
{
# general
sudo apt-get install -y gedit-plugins \
subversion \
bum \
libtool \
autoconf \
g++ \
moc \
filezilla \
imagemagick \
manpages-fr-extra \
ispell \
ifrench \
obextool \
pdftk \
pidgin \
libjpeg-turbo-progs \
exiftran \
rar \
unrar \
ntfsprogs \
gparted \
doxygen \
mesa-utils \
nfs-common \
easytag \
fuse-utils \
curlftpfs \
meld \
gnuplot-x11 \
libglew-dev \
libsdl1.2-dev \
qtikz \
gle-graphics \
apt-file \
gimp \
flashplugin-installer
sudo apt-file update
}
function repair_splash_screen()
{
sudo apt-get install -y v86d
resolution=$(zenity --entry --text="Veuillez saisir la résolution maximum supportée par grub. Si vous ne la connaissez pas, tapez la commande 'vbeinfo' dans grub au démarrage :" --entry-text="1440x900")
depth=$(zenity --entry --text="Veuillez saisir la profondeur associée :" --entry-text="32")
zenity --info --text="Dans ce qui suit, remplacer :\n- Le contenu de la variable 'GRUB_CMDLINE_LINUX_DEFAULT' par : quiet splash nomodeset video=uvesafb:mode_option=${resolution}-${depth},mtrr=3,scroll=ywrap\n- Le contenu de la variable 'GRUB_GFXMODE' par : ${resolution}"
sudo gedit /etc/default/grub
zenity --info --text="Dans ce qui suit, rajouter à la fin du fichier la ligne suivante :\nuvesafb mode_option=${resolution}-${depth} mtrr=3 scroll=ywrap"
sudo gedit /etc/initramfs-tools/modules
echo FRAMEBUFFER=y | sudo tee /etc/initramfs-tools/conf.d/splash
sudo update-grub2
sudo update-initramfs -u
}
########################
function run_step()
{
# $1 : function to call
# $2 : step name
if [ $# -eq 2 ]; then
r=$(zenity --question --text="Lancer l'étape '$2' ?")
[ $? -eq 0 ] && $1
fi
}
# check internet connection
ping -q -w 5 -c 1 google.fr &> /dev/null
if [ $? -ne 0 ]; then
echo "erreur: impossible de se connecter à internet"
exit 1
fi
# run all previous functions
run_step upgrade_system "Mise à jour du système"
run_step install_nvidia_drivers "Installation des drivers nvidia"
run_step remove_dash_shell "Enlever le shell dash par défaut"
run_step get_bash_scripts "Récupération des scripts bash"
run_step mount_nas "Montage d'un NAS"
run_step remove_plugins_and_lenses "Désinstallation des lentilles et plugins"
run_step restore_old_scrollbars "Restaurer les anciennes barres de défilement"
run_step install_ssmtp "Installation de sSMTP"
run_step move_window_buttons "Déplacement des boutons de fenêtre"
run_step active_history_completion "Complétion dans l'historique des commandes"
run_step customize_grub2 "Personnalisation de grub2"
run_step customize_firefox "Personnalisation de firefox"
run_step install_java "Installation de Java"
run_step install_lamp_server "Installation du serveur LAMP"
run_step install_ssh_server "Installation du serveur SSH"
run_step install_web_dev_kit "Installation du devkit web pour bootstrap"
run_step install_latex "Installation de LaTeX"
run_step install_extra_packages "Installation de paquets supplémentaires"
run_step repair_splash_screen "Réparation de l'écran de démarrage (nécessite les drivers nvidia)"
Voilà, en espérant que ça puisse aider 🙂
--
Nicolas.