Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 08/05/2019, à 12: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, à 11:27)


Desktop & Laptop - Ubuntu Mate dernière LTS - Intel i5 - 16 Go - Dual boot Windows offline

Hors ligne

#2 Le 08/05/2019, à 18: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 big_smile )

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 ! cool
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 ! cool
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, à 20: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 ! cool
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.


Desktop & Laptop - Ubuntu Mate dernière LTS - Intel i5 - 16 Go - Dual boot Windows offline

Hors ligne

#4 Le 08/05/2019, à 23: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
Lukeperp a écrit :

- 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 lol
A ce titre, les "pros" préfèrent mettre env au shebang wink :

#!/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, à 23: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 09/05/2019, à 00:08

GammaDraconis

Re : [Script] Post install Ubuntu


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, à 08: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 wink

Hors ligne

#8 Le 09/05/2019, à 11: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 ?


Desktop & Laptop - Ubuntu Mate dernière LTS - Intel i5 - 16 Go - Dual boot Windows offline

Hors ligne

#9 Le 09/05/2019, à 11:58

kholo

Re : [Script] Post install Ubuntu

bah,

sh nom_du_script 

en sh, et

bash nom_du_script

en bash... cool

Hors ligne