#1 Le 08/05/2019, à 11:31
- LukePerp
[Script] Post install Ubuntu
Bonjour,
Je partage avec vous mon script pour compléter une installation d'Ubuntu Mate/Xubuntu. Un de plus parmis d'autres scripts post install. Afin d'avoir vos remarques pour améliorer mon script.
Pour le contexte, depuis plusieurs mois, chaque semaine, au sein d'une association, j'installe Ubuntu sur des ordinateurs de particuliers, en galère avec Windows ou souhaitant une alternative libre. Comme je le fais régulièrement, je me suis fait un script me permettant d'automatiser certaines taches, tel que l'ajout d'applis, la modification de Grub, ajout de PPA, modifs de paramètres système... Durant les opérations, le script affiche une barre de progression avec zenity. Afin de ne modifier qu'un seul fichier de mon script, je l'ai déposé dans ma dropbox et j’utilise un autre mini script sur mes clés USB d'Ubuntu qui va récupérer mon script.
Pour favoriser les opérations, j'ai déposé certains ajouts dans ma dropbox que mon script va récupérer.
Je ne conseille pas d'utiliser mon script tel quel, car il réponds avant tout à mes besoins.
Le script termine en déposant sur le bureau de l'utilisateur un texte que je lui conseille de lire relatif à Linux en générale.
J'installe Mate si RAM > 1 Go, sinon Xubuntu et Bodhi si RAM < 700 Mo.
#!/bin/bash
# Opérations : complément d'installation d'Ubuntu Mate/Xubuntu
# À exécuter sans sudo
read -p ">>> Installer Wine ? (o/autre) : " flagwine
read -p ">>> Dual-boot Windows ? (o/autre) : " flaggrub
read -p ">>> PPA dernière version LibreOffice ? (o/autre) : " flaglibreoffice
# Désactivation du rapport d'erreur
sudo rm /var/crash/* &> /dev/null
sudo sed -i 's/enabled=1/enabled=0/' /etc/default/apport &> /dev/null
sudo systemctl disable apport.service &> /dev/null
sudo systemctl mask apport.service &> /dev/null
# Variante et version
vers=$(lsb_release -rs)
if [ "$DESKTOP_SESSION" == "mate" ];then
variante="Ubuntu Mate $vers"
elif [ "$DESKTOP_SESSION" == "xubuntu" ];then
variante="Xubuntu $vers"
else
variante="Ubuntu $vers"
fi
(
echo "10" ; sleep 0.3
# Besoin PPA LibreOffice
if [ "$flaglibreoffice" == "o" ]; then
sudo add-apt-repository ppa:libreoffice/ppa -y
fi
echo "# Configuration du système en cours... (apt update)"
sudo apt update
echo "20" ; sleep 0.3
# Besoin Grub
echo "# Configuration du système en cours... (theme grub)"
wget https://github.com/Philippe734/poly-light-grub2-theme/archive/master.zip ; sleep 1s
echo "22" ; sleep 0.3
unzip master.zip ; sleep 1s
echo "24" ; sleep 0.3
rm master.zip
sudo mkdir -p /boot/grub/themes
sudo mv poly-light-grub2-theme-master /boot/grub/themes/poly-light
echo "GRUB_THEME=/boot/grub/themes/poly-light/theme.txt" | sudo tee -a /etc/default/grub
if [ "$flaggrub" == "o" ]; then
# Afficher menu Grub pendant 1 seconde
# GRUB_TIMEOUT_STYLE=menu
# GRUB_TIMEOUT=1
sudo sed -i 's/^\(GRUB_TIMEOUT_STYLE=\).*/\1menu/' /etc/default/grub
sudo sed -i 's/^\(GRUB_TIMEOUT=\).*/\11/' /etc/default/grub
echo "26" ; sleep 0.3
sudo os-prober
else
# Cacher Grub
sudo sed -i 's/^\(GRUB_TIMEOUT_STYLE=\).*/\1hidden/' /etc/default/grub
sudo sed -i 's/^\(GRUB_TIMEOUT=\).*/\10/' /etc/default/grub
echo "26" ; sleep 0.3
fi
echo "# Configuration du système en cours... (update grub)"
sudo update-grub
echo "30" ; sleep 0.3
echo "# Configuration du système en cours... (applis en +)"
sudo apt install git gthumb gnome-software yad -y
echo "32" ; sleep 0.3
git clone --depth 1 https://github.com/nana-4/materia-theme
echo "34" ; sleep 0.3
cd materia-theme
sudo ./install.sh
echo "36" ; sleep 0.3
cd ..
rm -rf materia-theme
sudo apt remove git -y
echo "38" ; sleep 0.3
echo "# Configuration du système en cours... (icones en +)"
wget https://launchpad.net/~noobslab/+archive/ubuntu/icons/+files/flat-remix-icons_1.58r1~bionic~NoobsLab.com_all.deb -P ~ ; sleep 2s
echo "40" ; sleep 0.3
wget https://www.dropbox.com/s/a7n2vpl2ylhyygu/Icons Windows 10 OK avec 18.04.zip -P ~ ; sleep 2s
echo "42" ; sleep 0.3
sudo dpkg -i ~/flat-remix-icons_1.58r1~bionic~NoobsLab.com_all.deb
echo "44" ; sleep 0.3
unzip ~/Icons -d ~/.icons
echo "46" ; sleep 0.3
echo "# Configuration du système en cours... (updates.sh)"
wget https://www.dropbox.com/s/fyvv6mpk54uivl6/updates.sh -P ~
sudo mv ~/updates.sh /opt/updates.sh
sudo chmod +x /opt/updates.sh
echo "48" ; sleep 0.3
echo "# Configuration du système en cours... (alertfinsupport.sh)"
wget https://www.dropbox.com/s/540lv1aefvmfohr/alertfinsupport.sh -P ~
sudo mv ~/alertfinsupport.sh /opt/alertfinsupport.sh
sudo chmod +x /opt/alertfinsupport.sh
echo "50" ; sleep 0.3
echo 'utilisateur ALL=NOPASSWD: /opt/updates.sh' | sudo EDITOR='tee -a' visudo -f /etc/sudoers.d/custom
if [ "$DESKTOP_SESSION" == "mate" ];then
echo "# Configuration du système en cours... (verrou panel)"
wget https://www.dropbox.com/s/fqtios0eiyfh8mw/mozo-made-1.desktop -P ~
echo "55" ; sleep 0.3
mkdir --p ~/.local/share/applications
mv ~/mozo-made-1.desktop ~/.local/share/applications/unlock-panel.desktop
wget https://www.dropbox.com/s/3loxh983wtihc9r/mozo-made.desktop -P ~
echo "60" ; sleep 0.3
mv ~/mozo-made.desktop ~/.local/share/applications/lock-panel.desktop
fi
echo "# Configuration du système en cours... (nettoyage)"
rm ~/flat-remix-icons_1.58r1~bionic~NoobsLab.com_all.deb
rm ~/Icons
echo "70" ; sleep 0.3
# Besoin wine
if [ "$flagwine" == "o" ]; then
echo "# Configuration du système en cours... (wine)"
sudo dpkg --add-architecture i386
wget -nc https://dl.winehq.org/wine-builds/winehq.key
echo "72" ; sleep 0.3
sudo apt-key add winehq.key
sudo apt-add-repository 'deb https://dl.winehq.org/wine-builds/ubuntu/ bionic main'
sudo apt update
echo "74" ; sleep 0.3
sudo apt install --install-recommends winehq-staging -y
echo "76" ; sleep 0.3
winecfg
fi
echo "80" ; sleep 0.3
# modif swap qd 5% ram restante
echo vm.swappiness=5 | sudo tee /etc/sysctl.conf
# un peu de lecture pour le nouvel utilisateur
wget https://www.dropbox.com/s/f15rzqctzkmtjsb/a-lire-apres-install.odt -P ~/Bureau
mv ~/Bureau/a-lire-apres-install.odt ~/Bureau/"Lisez-moi Lisez-moi"
echo "100" ; sleep 0.3
echo "# Terminé.\n\nAjouter updates.sh et l'autre au démarrage.\n"
) | zenity --progress --title="Information" --width=400
# laisser le terminal ouvert pour le log
echo ">>> Terminé"
read a
exit 0
Script logé dans mes clés USB d'Ubuntu pour récupérer mon script dans ma dropbox :
#!/bin/bash
# Script à déposer sur une clé USB d'Ubuntu
# Récupère le script pour compléter l'installation
wget https://www.dropbox.com/s/xxxxxx/setup.mate.sh -P ~ &> /dev/null
sleep 1s
chmod +x ~/setup.mate.sh &> /dev/null
sh -c ~/setup.mate.sh
exit 0
Dernière modification par LukePerp (Le 09/05/2019, à 10:27)
Gamer inside - Ubuntu Mate dernière LTS - Intel i5, 16 Go - Dual boot Windows - Utilisateur de Dapps sur Ethereum
Hors ligne
#2 Le 08/05/2019, à 17:30
- kholo
Re : [Script] Post install Ubuntu
salut,
Welcome ! bienvenue au club des post installeurs !
petites questions :
c'est voulu les "s" à la fin de certains sleep ?
pourquoi faire un remove de git ?
a-lire-apres-install.odt serait peut être mieux en pdf, non ?
... bien vu le -P en flag sur les wget (je n'utilisais que le -O )
NB :
j'ai un 404 sur le téléchargement du second script... il est caché par un &>/dev/NULL... voulu ?
ah ok, j'ai compris, c'est juste un exemple puisque tu as mis les xxxxxxx dans l'adresse pour cacher ton adresse perso !
tu devrais l'indiquer pour ceux qui se lancerait la dedans la tête la première !
... et donc tu as appelé ton script : setup.mate.sh ... ok !
mais pourquoi tu lances ton script avec sh alors que tu le shebang (joli verbe !) avec bash ?
... et pourquoi ne pas mettre le script direct sur ta clé USB ?
et pour finir,... de mon expérience, j'ai fini par me faire un ensemble de scripts dédiés chacun à une tâche (et rangés par thèmes dans des dossiers séparés) ; que je lance (enfin lançais) avec un luncheur à ma sauce... finalement je n'utilise plus trop ce lanceur mais je lance les scripts un à un en fonction de mes besoins et mes envies...
le premier (à lancer en ligne de commande) modifie Nautilus pour que je n'ai qu'un double clic à faire sur les script que je veux lancer... très efficace !
NB : j'adore celui pour choisir un ensemble de programmes dans un fichier texte (Trèèèèèès efficace), qui test si chacun est bien dans les dépôts et fait l'installation d'une traite... puis ensuite sort un log de l'accomplissement... pour rendre à césar... script de nesthib depuis ce forum ici (voir la V0.2 aussi)
Hors ligne
#3 Le 08/05/2019, à 19:59
- LukePerp
Re : [Script] Post install Ubuntu
Tes questions sont interessantes, voici mes réponses :
- c'est voulu les "s" à la fin de certains sleep ? oui, pour moi afin de différencier les sleep minutes de ceux en secondes
- pourquoi faire un remove de git ? car un utilisateur ordinaire n'en a pas besoin et n'est pas inclus dans une installation par défaut
- a-lire-apres-install.odt serait peut être mieux en pdf ? non, afin que l'utilisateur puisse noter ses remarques dedans, car ça arrive
- j'ai un 404 sur le téléchargement du second script... = lequel exactement ?
- tu as appelé ton script : setup.mate.sh = car au début c'était que pour mate, et comme j'ai préféré conserver le lien dropbox vers ce fichier j'ai préféré laisser son nom.
- pourquoi tu lances ton script avec sh ? pour garantir sa bonne exécution
- pourquoi ne pas mettre le script direct sur ta clé USB ? car j'ai pleins de clé usb live ubuntu. J'ai expliqué que je voulais modifié qu'un seul fichier, via dropbox. Le script de lancement va chercher mon script post install qui est dans ma dropbox.
et pour finir,... de mon expérience, j'ai fini par me faire un ensemble de scripts dédiés chacun à une tâche (et rangés par thèmes dans des dossiers séparés) ; que je lance (enfin lançais) avec un luncheur à ma sauce... finalement je n'utilise plus trop ce lanceur mais je lance les scripts un à un en fonction de mes besoins et mes envies...
le premier (à lancer en ligne de commande) modifie Nautilus pour que je n'ai qu'un double clic à faire sur les script que je veux lancer... très efficace !
NB : j'adore celui pour choisir un ensemble de programmes dans un fichier texte (Trèèèèèès efficace), qui test si chacun est bien dans les dépôts et fait l'installation d'une traite... puis ensuite sort un log de l'accomplissement... pour rendre à césar... script de nesthib depuis ce forum ici (voir la V0.2 aussi)
Je vais étudier ces remarques et essayer d'en tirer profit, merci !
Ma prochaine évolution de mon script sera d'éviter d'utiliser le terminal et de favoriser du GUI avec yad.
Gamer inside - Ubuntu Mate dernière LTS - Intel i5, 16 Go - Dual boot Windows - Utilisateur de Dapps sur Ethereum
Hors ligne
#4 Le 08/05/2019, à 22:33
- kholo
Re : [Script] Post install Ubuntu
ok...
le 404 est sur ta dropbox... mais c'est "normal" :
#!/bin/bash
# Script à déposer sur une clé USB d'Ubuntu
# Récupère le script pour compléter l'installation
wget https://www.dropbox.com/s/xxxxxx/setup.mate.sh -P ~ &> /dev/null
sleep 1s
chmod +x ~/setup.mate.sh &> /dev/null
sh -c ~/setup.mate.sh
exit 0
- pourquoi tu lances ton script avec sh ? pour garantir sa bonne exécution
oui mais le shebang de ton script second (celui en premier) est en bash
A ce titre, les "pros" préfèrent mettre env au shebang :
#!/usr/bin/env bash
... j'avoue que j'ai du mal à m'y mettre
pour le GUI, j'y avais pensé aussi mais ça apporte pas mal de soucis en plus...
perso, j'utilise Zenity sous bash et ça me suffit...
je te met une démo dont je me sert comme squelette:
#!/bin/bash
# ----------------------------------------------
logiciel_nom="${0##*/}"
logiciel_fonction=""
logiciel_version="0.001"
# NOTES DE VERSIONS
# ----------------------------------------------
#
# ----------------------------------------------
echo "lancement $nomlogiciel..."
# set -o xtrace
_journal(){
fichier_log="$nomlogiciel.log"
> "$fichier_log"
}
echo "ouverture du journal"
_journal
journal(){ echo "$@" >> "$fichier_log" ; }
journal "*******************initialisation*******************"
journal "VARIABLES"
KA="Choix 1"
KB="Choix 2"
KC="Choix 3"
KD="Choix 4"
KE="Choix 5"
KF="Choix 6"
KG="Choix 7"
KH="Choix 8"
KI="Choix 9"
VA="Valeur 1"
VB="Valeur 2"
VC="Valeur 3"
VD="Valeur 4"
VE="Valeur 5"
VF="Valeur 6"
VG="Valeur 7"
VH="Valeur 8"
VI="double-cliquez ici !"
_quitter(){
journal "_quitter"
# mettre ici tout ce qui sera nescessaire à la bonne fermeture
exit 0
}
frm_principale(){
journal "*******************frm_principale*******************"
LAQUESTION="
---------------------------------------------------------------------
Ce module crée une liste de choix
Tout à faire - <b>pas encore codé</b>"
zenity --list --width=600 --height=450 --text="$LAQUESTION" \
--ok-label="Sélectionner" \
--cancel-label="quitter" \
--hide-column 1 --column "" --column "choix" --column "Valeur" \
1 "$KA" "$VA" \
2 "$KB" "$VB" \
0 "" "on peut facilement mettre des blancs" \
3 "$KC" "$VC" \
4 "$KD" "$VD" \
5 "$KE" "$VE" \
6 "$KF" "$VF" \
7 "$KG" "$VG" \
0 "" "" \
8 "$KH" "$VH" \
9 "$KI" "$VI" 2>/dev/null ; # bug zenity
}
frm_principale_parser(){
journal "*******************frm_principale_parser*******************"
journal "frm_principale_parser : $1"
case $1 in
1) action 1 ;;
2) action 2 ;;
3) action 3 ;;
4) action 4 ;;
5) action 5 ;;
6) action 6 ;;
7) action 7 ;;
8) action 8 ;;
9)
fonction_test
;;
0) ;; # rien à faire
*)
quitter="1"
_quitter ;;
esac
}
action(){
zenity --info --text="vous avez choisi action $1 \n ... choisissez le 9 !" 2>/dev/null # bug zenity
}
fonction_test(){
message="$(date)
On peut mettre ce que l'on veut ici"
echo "$message"
zenity --info --text="$message" 2>/dev/null # bug zenity
}
main(){
journal "main"
menuchoice=$(frm_principale)
frm_principale_parser ${menuchoice%|*} # pour corriger le 1|1
if [ $quitter!="1" ] ; then
# on boucle _main tant que quitter est différent de 1
main
fi
}
# Programme principale
main
exit 0
ça marche aussi avec le double clic sur chaque ligne !!!
pour utiliser mon journal il suffit de remplacer echo par journal (je trouve ça pratique)
sous la partie
journal "*******************initialisation*******************"
tu mets les textes à mettre dans le tableau
Hors ligne
#5 Le 08/05/2019, à 22:37
- kholo
Re : [Script] Post install Ubuntu
en y regardant maintenant, je me dit que l'initialisation du journal est très masturbatoire...
_journal(){
fichier_log="$nomlogiciel.log"
> "$fichier_log"
}
echo "ouverture du journal"
_journal
peut être remplacé par
echo "ouverture du journal"
fichier_log="$nomlogiciel.log"
> "$fichier_log"
Hors ligne
#6 Le 08/05/2019, à 23:08
- GammaDraconis
Re : [Script] Post install Ubuntu
Il y a déjà mon script : https://forum.ubuntu-fr.org/viewtopic.php?id=2026344
Discussion sur mon script de post-install pour Ubuntu 20.04LTS : https://forum.ubuntu-fr.org/viewtopic.php?id=2026344
Lien direct script : https://github.com/simbd/Ubuntu_20.04LTS_PostInstall
Démo vidéo (peertube) : https://video.ploud.fr/videos/watch/fb7 … 0d252ed2db
Hors ligne
#7 Le 09/05/2019, à 07:08
- kholo
Re : [Script] Post install Ubuntu
oui, gamma tout à fait, et les tutos de nam, les scripts de nicolargo (bien qu'un peu ancien)... et le mien... et tellement d'autres
Hors ligne
#8 Le 09/05/2019, à 10:26
- LukePerp
Re : [Script] Post install Ubuntu
J'ai consulté vous scripts, j'adore leur qualité de développement. Je vais en tirer profit pour améliorer le mien. Super ! Mon script est clairement très modeste et simple.
Concernant l'exécution de mon script bash avec la commande sh, pourquoi est ce incorrect ? Quelle serai la bonne commande d'exécution d'un script bash ?
Gamer inside - Ubuntu Mate dernière LTS - Intel i5, 16 Go - Dual boot Windows - Utilisateur de Dapps sur Ethereum
Hors ligne
#9 Le 09/05/2019, à 10:58
- kholo
Re : [Script] Post install Ubuntu
bah,
sh nom_du_script
en sh, et
bash nom_du_script
en bash...
Hors ligne