====== Installation de paquets hors ppa====== * Objet : du tuto FIXME * Niveau requis : FIXME {{tag>débutant avisé}} * Commentaires : //Contexte d'utilisation du sujet du tuto. // FIXME * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) ===== Introduction ===== #!/usr/bin/sh # Script de post-installation de machine debian destinée à héberger un # serveur LAMP-FPM, avec environnement de développement VSCodium/Xdebug # ainsi que Docker. # # Les différentes fonctions sont à effectuer dans un certain ordre : # Xdebug après php-fmp pour être sûr que les fichiers et liens sont bien créés # PHP après apache pour activer fastcgi # # La fonction d'installation de MariaDB permet de changer le mot de passe root de MariaDB # # On peut diriger la sortie vers la console ou vers un fichier de log # # Des fichiers témoins permettent la reprise en cas d'erreur à une étape PHPVERSION="8.2" NODEJSVERSION="18" MODEL="laptop" INSTALLDIR="/var/log/install" LOGDIR="$INSTALLDIR/log" LOGFILE="/dev/stdout" SEPARATOR="\n===========================================\n" RUN="false" GROUPUSER=$USER MYSQLROOT1="root" MYSQLROOT2="mysql" DISTRIBUTION="" ADDITIONAL="" usage() { echo echo "post-install.sh [-hfrtx] [-u username] [-d distribution] [-a additional]" echo " -h : cette aide" echo " -a additional : liste à virgule sans espace d'outils supplémentaires à installer" echo " -d distribution : debian ou ubuntu" echo " -f : installation d'un ordinateur fixe (pas de firmware-iwlwifi)" echo " -r : run, effectue les opérations" echo " -t : trace, stocke les logs dans un fichier. Sinon, affiche dans le stdout" echo " -u username : ajoute username aux groupes utiles. \$USER par défaut si vous êtes en sudo" echo " -x : set -x, mode affichage des commandes" echo echo "ATTENTION : Exécuter en tant que root pour avoir les droits de modification et si sudo n'est pas encore configuré" echo } while getopts hfrxtu:d:a: OPTION;do case $OPTION in a) ADDITIONAL=$OPTARG;; d) DISTRIBUTION=$OPTARG;; f) MODEL="fixe";; h) usage exit 1;; r) RUN="true";; t) LOGFILE="$LOGDIR/post-install.`date +%Y%m%d-%H%M%S`.log";; u) GROUPUSER=$OPTARG;; x) set -x;; *) usage exit 2;; esac done manageError() { if [ $1 != 0 ]; then echo $2 exit 2 fi } prerun() { if [ "$DISTRIBUTION" = "" ]; then echo echo "ERREUR : Indiquez la distibution à configurer (debian ou ubuntu)" echo usage exit 2 fi if [ "$ADDITIONAL" != "" ]; then echo echo "Nous allons installer les produits supplémentaires suivants :" for tool in `echo $ADDITIONAL | sed 's/,/ /g'`; do echo " " $tool exists=`type optional_install$tool` if [ ! "$exists" = "optional_install$tool is a shell function" ]; then echo "ERREUR : pas de méthode pour installer $tool" echo echo "Le script doit contenir une fonction nommée optional_install$tool" echo echo "Les fonctions optionnelles disponibles sont :" echo grep '^optional_install' $0 echo exit 2 fi done echo fi if [ "$DISTRIBUTION" = "ubuntu" ]; then PHPVERSION="8.1" fi echo if [ "$RUN" = false ]; then echo "Les opérations ne seront pas effectuées, lancer avec l'option -r pour appliquer les modifications, -h pour l'aide" echo else while [ $MYSQLROOT1 != $MYSQLROOT2 ]; do echo "Nouveau mot de passe root pour mysql :" read MYSQLROOT1 echo "Confirmation : ressaisissez le mot de passe" read MYSQLROOT2 if [ $MYSQLROOT2 != $MYSQLROOT1 ]; then echo "ERREUR: les deux saisies ne correspondent pas" fi done echo fi if [ "$LOGFILE" != "/dev/stdout" ]; then echo "Fichier de log : $LOGFILE" echo fi echo "Installation sous $INSTALLDIR avec droits pour $GROUPUSER" echo $SEPARATOR mkdir -p $INSTALLDIR mkdir -p $LOGDIR for conf in php xdebug_config_codium; do cp -pr $conf $INSTALLDIR manageError $? "ERREUR lors de la copie de $conf vers $INSTALLDIR" done cd $INSTALLDIR } initializations() { echo "Initialisations..." if [ "$RUN" = "true" ]; then if [ ! -f $LOGDIR/initializations ]; then echo " Ajout de $GROUPUSER au groupe sudo" usermod -aG sudo $GROUPUSER echo " Ajout de packages" apt-get install -y ca-certificates apt-transport-https software-properties-common wget curl lsb-release emacs manageError $? "ERREUR lors de l'installation des premiers packages" touch $LOGDIR/initializations else echo "Fichier témoin présent, rien à faire" fi fi echo "fin des initialisations" echo $SEPARATOR } configApt() { echo "Configuration de apt..." if [ "$RUN" = "true" -a "$DISTRIBUTION" = "debian" ]; then if [ ! -f $LOGDIR/apt ]; then sed -ibak 's/main$/main contrib non-free/g' /etc/apt/sources.list manageError $? "ERREUR lors de la modification de sources.list" apt update if [ $MODEL = "laptop" ]; then apt install -y firmware-linux-nonfree firmware-iwlwifi manageError $? "ERREUR lors de l'installation des packages wifi" fi touch $LOGDIR/apt else echo "Fichier témoin présent, rien à faire" fi fi echo "fin de la configuration de apt" echo $SEPARATOR } installApache2() { echo "Installation d'Apache..." if [ "$RUN" = "true" ]; then if [ ! -f $LOGDIR/apache ]; then apt update && apt install -y apache2 manageError $? "ERREUR lors de l'installation de apache" apache2 -v |grep '^Server version' touch $LOGDIR/apache else echo "Fichier témoin présent, rien à faire" fi fi echo "fin de la configuration d'Apache" echo $SEPARATOR } installChrome () { echo "Installation de Chrome..." if [ "$RUN" = "true" ]; then if [ ! -f $LOGDIR/chrome ]; then wget -qO - https://dl.google.com/linux/linux_signing_key.pub \ | sudo gpg --dearmor -o /usr/share/keyrings/googlechrome-linux-keyring.gpg echo "deb [arch=amd64 signed-by=/usr/share/keyrings/googlechrome-linux-keyring.gpg] http://dl.google.com/linux/chrome/deb/ stable main" \ > /etc/apt/sources.list.d/google-chrome.list apt update && apt install -y google-chrome-stable manageError $? "ERREUR lors de l'installation de chrome" google-chrome --version touch $LOGDIR/chrome else echo "Fichier témoin présent, rien à faire" fi fi echo "fin de la configuration de Chrome" echo $SEPARATOR } installComposer() { # Procedure from https://getcomposer.org/doc/faqs/how-to-install-composer-programmatically.md # difference : --install-dir=/usr/local/bin --filename=composer et gestion du code erreur echo "Installation de Composer..." if [ "$RUN" = "true" ]; then if [ ! -f $LOGDIR/composer ]; then EXPECTED_CHECKSUM="$(php -r 'copy("https://composer.github.io/installer.sig", "php://stdout");')" php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" ACTUAL_CHECKSUM="$(php -r "echo hash_file('sha384', 'composer-setup.php');")" if [ "$EXPECTED_CHECKSUM" != "$ACTUAL_CHECKSUM" ] then >&2 echo 'ERROR: Invalid installer checksum' rm composer-setup.php exit 1 fi php composer-setup.php --quiet --install-dir=/usr/local/bin --filename=composer manageError $? "ERREUR lors de l'installation de composer" # RESULT=$? rm composer-setup.php composer --version touch $LOGDIR/composer # exit $RESULT else echo "Fichier témoin présent, rien à faire" fi fi echo "fin de la configuration de composer" echo $SEPARATOR } installDiscord() { echo "Installation de Discord..." if [ "$RUN" = "true" ]; then if [ ! -f $LOGDIR/discord ]; then wget "https://discord.com/api/download?platform=linux&format=deb" -O /tmp/discord.deb apt install -y /tmp/discord.deb manageError $? "ERREUR lors de l'installation de discord" dpkg -l |grep discord| awk '{print $2 " " $3}' touch $LOGDIR/discord else echo "Fichier témoin présent, rien à faire" fi fi echo "fin de la configuration de Discord" echo $SEPARATOR } installDocker() { echo "Installation de Docker..." if [ "$RUN" = "true" ]; then if [ ! -f $LOGDIR/docker ]; then # Install the packages apt-get remove -y --purge docker docker-engine docker.io containerd runc curl -fsSL https://download.docker.com/linux/$DISTRIBUTION/gpg | gpg --dearmor -o /etc/apt/trusted.gpg.d/docker.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/trusted.gpg.d/docker.gpg] https://download.docker.com/linux/$DISTRIBUTION $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list apt update && apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin manageError $? "ERREUR lors de l'installation de docker" # Configuring permissions echo " Ajout de $GROUPUSER au groupe docker" usermod -aG docker $GROUPUSER # Configuring docker logrotate cat > /etc/docker/daemon.json < $LOGFILE 2>&1