[INSTALL#SCRIPT] Variable qui se vide après un seconde instance [RÉSOLU]

Questions et astuces concernant l'installation et la configuration d'archlinux
aminnairi
archer de cavalerie
Messages : 187
Inscription : lun. 10 août 2015, 13:50
Localisation : France

[INSTALL#SCRIPT] Variable qui se vide après un seconde instance [RÉSOLU]

Message par aminnairi »

Bonjour à tous,

Ces derniers jours je voulais créer mon script d'installation personnalisé que je pourrais ensuite ramener en déplacement pour installer Arch à l'aide de ce script chez une amie...

Donc voici le script en question (il est pour l'instant pauvre en option mais je compte le paufiner plus tard, c'était surtout pour savoir si tout roulait) que j'ai testé sous VMware & VBox :

Code : Tout sélectionner

#!/bin/bash

if [[ $1 = "-a" ]]; then
    clear
    echo "Déverouillage des langues française et anglaise en cours..."
    sleep 2
    sed -i '/en_US/ s/#en_US/en_US/g' /etc/locale.gen
    sed -i '/fr_FR/ s/#fr_FR/fr_FR/g' /etc/locale.gen
    locale-gen
    clear
    echo "Déverouillage terminé."
    sleep 2
    clear
    echo "Activation de la langue française dans la console en cours..."
    echo 'LANG=fr_FR.UTF-8' > /etc/locale.conf
    export LANG=fr_FR.UTF-8
    echo 'KEYMAP=fr' > /etc/vconsole.conf
    echo 'FONT=lat9w-16' >> /etc/vconsole.conf
    sleep 2
    clear
    echo "Utilisation du fuseau horaire pour Paris et mise à jour de l'horloge en cours..."
    clear
    ln -sf /usr/share/zoneinfo/Europe/Paris /etc/localtime
    systemctl enable ntpd.service
    sleep 2
    while [[ $QNOMHOTE != "o" ]]; do
        while [[ -z $NOMHOTE ]]; do
        clear
        read -p "Veuillez choisir un nom d'hôte pour la machine : " NOMHOTE; done
    clear
    read -p "Etes-vous sûr de vouloir utiliser $NOMHOTE comme nom d'hôte ? [o|n] : " QNOMHOTE
            if [[ $QNOMHOTE != "o" ]]; then
            NOMHOTE=""
            QNOMHOTE=""; else
            clear
            echo "Utilisation de $NOMHOTE en tant que nom d'hôte pour la machine en cours..."
            sleep 2
            echo $NOMHOTE > /etc/hostname && sed -i "/s/localhost/$NOMHOTE/g" /etc/hosts
            clear
            echo "Modification du nom d'hôte terminé."
            sleep 2; fi; done
    clear
    echo "Initialisation du kernel en cours..."
    sleep 2
    clear
    mkinitcpio -p linux
    clear
    echo "Initialisation du kernel terminé."
    sleep 2
    clear
    echo "Modification du mot de passe administrateur. Veuillez suivre les instructions à l'écran : "
    sleep 2
    clear
    passwd root
    clear
    echo "Modification du mot de passe terminé."
    sleep 2
    clear
    read -p "Souhaitez-vous ajouter un utilisateur ? [o|n] : " AJOUTER_UTILISATEUR
    if [[ $AJOUTER_UTILISATEUR = "o" ]]; then
        while [[ $Q_AUTRE_UTILISATEUR != "n" ]]; do
            while [[ $Q_NOM_UTILISATEUR != "o" ]]; do
                while [[ -z $NOM_UTILISATEUR ]]; do
                clear
                read -p "Veuillez rentrer un nom court pour le nouvel utilisateur : " NOM_UTILISATEUR; done
            clear
            read -p "Etes vous sûr de vouloir utiliser $NOM_UTILISATEUR comme nom d'utilisateur ? [o|n] : " Q_NOM_UTILISATEUR
                    if [[ $Q_NOM_UTILISATEUR != "o" ]]; then
                    NOM_UTILISATEUR=""
                    Q_NOM_UTILISATEUR=""; else
                    clear
                    echo "Utilisation de $NOM_UTILISATEUR pour le nouvel utilisateur en cours..."
                    sleep 2
                    useradd -G wheel -s /bin/bash -m $NOM_UTILISATEUR && passwd $NOM_UTILISATEUR
                    clear
                    echo "Création de l'utilisateur terminé."
                    sleep 2; fi; done
        clear
        read -p "Souhaitez-vous ajouter d'autres utilisateurs ?  [o|n] : " Q_AUTRE_UTILISATEUR
            if [[ $Q_AUTRE_UTILISATEUR != "n" ]]; then
            NOM_UTILISATEUR=""
            Q_NOM_UTILISATEUR=""
            Q_AUTRE_UTILISATEUR=""; else
            clear
            echo "Fin de l'ajout d'utilisateurs."
            sleep 2; fi; done; else
    clear
    echo "Fin de l'ajout d'utilisateurs."
    sleep 2; fi
    clear
    echo "Ajout du dépôt Archlinux.fr pour l'installatio de yaourt en cours..."
    sleep 2
    echo '[archlinuxfr]' >> /etc/pacman.conf
    echo 'SigLevel = Never' >> /etc/pacman.conf
    echo 'Server = http://repo.archlinux.fr/$arch' >> /etc/pacman.conf
    clear
    echo "Ajout du dépôt terminé."
    sleep 2
    clear
    echo "Mise à jour des dépôts en cours..."
    sleep 2
    clear
    pacman -Syu
    clear
    echo "Mise à jour des dépôts terminée."
    sleep 2
    clear
    echo "Préparation et installation du fichier GRUB en cours..."
    sleep 2
    clear
    sed -i '/GRUB_TIMEOUT/ s/5/0/' /etc/default/grub
    grub-mkconfig -o /boot/grub/grub.cfg
    clear
    grub-install --recheck /dev/sd$DISQUE
    clear
    echo "Installation du GRUB terminé."
    sleep 2
    clear
    echo "Fermeture de l'environnement chroot en cours..."
    sleep 2
    exit; else
        clear
        echo "Bienvenue dans le script d'installation ArchX."
        sleep 2
        clear
        echo "Vous allez être guidée pendant toute la durée de l'opération."
        sleep 2

        clear
        echo "Transformation de la configuration clavier dans l'environnement archiso en cours..."
        sleep 2
        loadkeys fr
        clear
        echo "Transformation du clavier terminée."
        sleep 2

        clear
        echo "Mise à jour de l'horloge système à l'aide du réseau en cours..."
        sleep 2
        timedatectl set-ntp true
        clear
        echo "Mise à jour de l'horloge terminée"
        sleep 2

        while [[ $QDISQUE != "o" ]]; do
            while [[ -z $DISQUE ]]; do
            clear
            lsblk
            read -p "Quelle disque souhaitez-vous utiliser pour l'installation ? : " DISQUE; done
        clear
        lsblk
        read -p "Etes-vous sûr de vouloir formater /dev/sd$DISQUE (cette opération détruiera TOUTES données sur le disque /dev/sd$DISQUE et est irréversible) ? [o|n] : " QDISQUE
        if [[ $QDISQUE != "o" ]]; then
        DISQUE=""; else
        clear
            echo "Nettoyage du disque /dev/sd$DISQUE en cours..."
            sleep 2
            dd bs=1M count=1 if=/dev/zero of=/dev/sd$DISQUE
            clear
            echo "Nettoyage du disque /dev/sd$DISQUE terminé."
            sleep 2
            clear
            echo "Démarrage de l'utilitaire de création des partitions pour le disque /dev/sd$DISQUE en cours..."
            sleep 2
            cfdisk /dev/sd$DISQUE; fi; done


        while [[ $QAUTRE != "n" ]]; do
        while [[ $QFORMAT != "o" ]]; do
            while [[ $QPARTITION != "o"  ]]; do
                while [[ -z $PARTITION ]]; do
                clear
                lsblk
                read -p "Quelle partition souhaitez-vous formater (numéro) ? : " PARTITION; done
            clear
            lsblk
            read -p "Etes-vous sûr de vouloir formater la partition /dev/sd$DISQUE$PARTITION ? [o|n] : " QPARTITION
                    if [[ $QPARTITION != "o" ]]; then
                    PARTITION="";fi; done
            while ! [[ $FORMAT = "ext4" || $FORMAT = "swap" || $FORMAT = "vfat" ]]; do
            clear
            lsblk
            read -p "Choisissez un format de partitionnement [ext4|swap|vfat] : " FORMAT; done
        clear
        lsblk
        read -p "Etes-vous sûr de vouloir utiliser ce format ? [o|n] : " QFORMAT
            if [[ $QFORMAT != "o" ]]; then
            FORMAT=""; else
                if [[ $FORMAT = "ext4" ]]; then
                clear
                echo "Formatage de la partition /dev/sd$DISQUE$PARTITION au format $FORMAT en cours..."
                sleep 2
                mkfs.$FORMAT /dev/sd$DISQUE$PARTITION && mount /dev/sd$DISQUE$PARTITION /mnt
                clear
                echo "Formatage de la partition terminé."
                sleep 2; else
                    if [[ $FORMAT = "swap" ]]; then
                    clear
                    echo "Formatage de la partittion /dev/sd$DISQUE$PARTITION au format $FORMAT en cours..."
                    sleep 2
                    mkswap /dev/sd$DISQUE$PARTITION && swapon /dev/sd$DISQUE$PARTITION
                    clear
                    echo "Formatage de la partition terminé."
                    sleep 2; else
                    clear
                    echo "Formatage de la partition /dev/sd$DISQUE$PARTITION au format $FORMAT en cours..."
                    sleep 2
                    mkfs.$FORMAT /dev/sd$DISQUE$PARTITION && mkdir -p /mnt/boot/efi && mount /dev/sd$DISQUE$PARTITION /mnt/boot/efi
                    clear
                    echo "Formatage de la partition terminé."
                    sleep 2; fi; fi; fi; done
        clear
        read -p "Avez-vous d'autres partitions à formater ? [o|n] : " QAUTRE
            if [[ $QAUTRE != "n" ]]; then
            QFORMAT=""
            PARTITION=""
            QPARTITION=""
            FORMAT=""; else
            clear
            echo "Formatage des partitions terminée."
            sleep 2; fi; done
            
        clear
        echo "Installation des paquets essentiels en cours..."
        sleep 2
        clear
        pacstrap /mnt base base-devel grub ntp
        clear
        echo "Installation terminée"
        sleep 2
        clear
        echo "Genération des fichiers systèmes en cours..."
        sleep 2
        genfstab -U -p /mnt >> /mnt/etc/fstab
        clear
        echo "Génération des fichiers terminée."
        sleep 2

        clear
        echo "Passage à l'environnement chroot en cours..."
        sleep 2
        cp ArchX.sh /mnt/ && arch-chroot /mnt /bin/bash -c "./ArchX.sh -a"
        clear
        echo "Fermeture effectuée."
        sleep 2
        clear
        echo "Démontage de la partition principale en cours..."
        sleep 2
        umount -R /mnt
        clear
        echo "Démontage de la partition terminée."
        sleep 2
        clear
        echo "Redémarrage..."
        reboot; fi
Je viens de comprendre qu'en fait en passant de archiso à chroot, la variable $DISQUE n'est pas conservé. Ce qui semble logique puisque j'ai besoin de $DISQUE dans grub-install /dev/sd$DISQUE. Donc cela précise ma question (ou la transforme) : y'a-t-il un moyen de conserver la variable au moment de lancer le script avec l'option -a mais de manière temporaire (pas de hard coding de la variable) ?
Dernière modification par aminnairi le lun. 28 déc. 2015, 13:19, modifié 1 fois.
Arch Linux x86_64 UEFI
7,3 Gio RAM
Intel® Core™ i5-4200U CPU @ 1.60GHz × 4
Intel® Haswell Mobile + NVIDIA GeForce 840M 2 Gio vRAM
KDE Plasma + SDDM
Avatar de l’utilisateur
matmoul
Hankyu
Messages : 18
Inscription : mar. 17 mars 2015, 00:37

Re: [INSTALL#SCRIPT] Variable qui se vide après un seconde instance

Message par matmoul »

Salut,

Dans mon script d'install, je passe les variables requises en arguments :
arch-chroot /mnt /root/myscript.sh $var1 $var2

Tu peux fouiller la source de mon script ici : https://github.com/MatMoul/archfi/blob/master/archfi

@+
MatMoul
https://github.com/MatMoul
aminnairi
archer de cavalerie
Messages : 187
Inscription : lun. 10 août 2015, 13:50
Localisation : France

Re: [INSTALL#SCRIPT] Variable qui se vide après un seconde instance

Message par aminnairi »

Oh c'est super ça ! Merci c'est très gentil de partager ton script (je te piquerai sûrement quelques petites choses en citant la source bien entendu).

Je met donc le post en résolu encore merci !
Arch Linux x86_64 UEFI
7,3 Gio RAM
Intel® Core™ i5-4200U CPU @ 1.60GHz × 4
Intel® Haswell Mobile + NVIDIA GeForce 840M 2 Gio vRAM
KDE Plasma + SDDM
Répondre