Catégorie : Linux

  • MultiThreading en BASH

    MultiThreading en BASH

    Comment faire du MultiThreading en BASH…. En fait c’est assez simple, il suffit des mettre les scripts en arrière-plan et d’attendre qu’ils soient terminés. Bien sûr, il peut exister certaines limitations…. C’est un non-sens de mettre 20 scripts en parallèle quand il n’y a que 4 processeurs….

    Donc pour gérer efficacement le multi-Threading », personnelemen,t je limite le nombre de threads au nombre de processeurs…..

    Voici une manière simple de gérer le multithreading :

    #--------------------------------------------------
    # Get the maximum physical Threads
    function JobMaxPhysicalThreads() {
            echo $(grep -c proc /proc/cpuinfo)
    }
    #--------------------------------------------------
    
    #--------------------------------------------------
    # Is Max Threads count reached ? If yes, wait....
    function JobOngoingThreads() {
        # How many jobs in Background now ?
        echo $(jobs|grep -vi "done"|wc -l)
    }
    #--------------------------------------------------
    
    #--------------------------------------------------
    # Is Max Threads count reached ? If yes, wait....
    function JobMaxThreadsReachedWait() {
        # How many jobs in Background now ?
        JobsInBackGround=$(JobOngoingThreads)
        # Is background processes limit reached ?
        if [[ $JobsInBackGround -gt $nThreadsLimit ]]; then
           # Wait until some slots are available
           while [[ $JobsInBackGround -gt $nThreadsLimit ]]
             do
               sleep 1
               JobsInBackGround=$(JobOngoingThreads)
             done
       fi
    }
    #--------------------------------------------------
    

    Dans le script lui-même avant d’envoyer un nouveau script en arrière-plan, il suffit de vérifier si le nombre de scripts en arrière-plan n’a pas atteint la limite, si oui, alors il suffit d’attendre qu’il y ait un slot de disponible…

    Par exemple :

    ## Check Current Number of Threads...in case, max is reached, wait !
    JobMaxThreadsReachedWait
    ## Launch next Thread
    LaunchNewScript
    

     

  • Comment déterminer le nombre maximum de threads physiques ?

    Comment déterminer le nombre maximum de threads physiques ?

    Lorsque l’on veut faire du multithreading, il faut avant tout savoir le nombre de processeurs disponibles. Plusieurs possibilités pour cela, mais la plus simple :

    echo $(grep -c proc /proc/cpuinfo)
    

     

  • Comment trouver automatiquement tous les Raspberry’s sur le réseau ?

    Comment trouver automatiquement tous les Raspberry’s sur le réseau ?

    Une adresse MAC (Medium Access Control ou contrôle d’accès au support) est un « numéro de série » unique affecté à chaque matériel du réseau Ethernet destiné à l’identifier dans un réseau. Cette adresse unique est attribuée par le fabricant à la fabrication du matériel.

    Chaque fabricant est également identifié d’une manière unique. La liste des identifiants est mise à jour régulièrement et est disponible sur le web.

    En utilisant une combinaison de commandes très simples, on peut donc déterminer le(s) fabricant(s) d’un élément réseau connecté à votre réseau !

    Récupération des identifiants utilisés dans les adresses MAC :

    curl https://devtools360.com/en/macaddress/vendorMacs.xml?download=true 
    

    Exemple :

    youarewelcom@myhost : ~/Raspberry > curl https://devtools360.com/en/macaddress/vendorMacs.xml?download=true 2>/dev/null | tail 
    <VendorMapping mac_prefix="FC:F7:7B" vendor_name="Huawei Device Co., Ltd."/>
    <VendorMapping mac_prefix="FC:F8:AE" vendor_name="Intel Corporate"/>
    <VendorMapping mac_prefix="FC:F8:B7" vendor_name="TRONTEQ Electronic"/>
    <VendorMapping mac_prefix="FC:FA:F7" vendor_name="Shanghai Baud Data Communication Co.,Ltd."/>
    <VendorMapping mac_prefix="FC:FB:FB" vendor_name="Cisco Systems, Inc"/>
    <VendorMapping mac_prefix="FC:FC:48" vendor_name="Apple, Inc."/>
    <VendorMapping mac_prefix="FC:FE:77" vendor_name="Hitachi Reftechno, Inc."/>
    <VendorMapping mac_prefix="FC:FE:C2" vendor_name="Invensys Controls UK Limited"/>
    <VendorMapping mac_prefix="FC:FF:AA" vendor_name="IEEE Registration Authority"/>
    </MacAddressVendorMappings>
    youarewelcom@myhost : ~/Raspberry >

    Extraire uniquement les lignes pour Raspberry  :

    curl https://devtools360.com/en/macaddress/vendorMacs.xml?download=true 2>/dev/null | grep -i Raspberry

    Exemple:

    youarewelcom@myhost : ~/Raspberry > curl https://devtools360.com/en/macaddress/vendorMacs.xml?download=true 2>/dev/null | grep -i Raspberry
    <VendorMapping mac_prefix="3A:35:41" vendor_name="Raspberry Pi (Trading) Ltd"/>
    <VendorMapping mac_prefix="B8:27:EB" vendor_name="Raspberry Pi Foundation"/>
    <VendorMapping mac_prefix="DC:A6:32" vendor_name="Raspberry Pi Trading Ltd"/>
    <VendorMapping mac_prefix="E4:5F:01" vendor_name="Raspberry Pi Trading Ltd"/>
    youarewelcom@myhost : ~/Raspberry >

    Récupérer les listes des périphériques réseau :

    La commande « nmap » permet d’explorer une réseau et de trouver les différents périphériques connectés au réseau.

    youarewelcom@myhost : ~/Raspberry > sudo nmap -sP 192.168.0.0/24 | head
    Starting Nmap 7.91 ( https://nmap.org ) at 2021-04-03 15:42 CEST
    Nmap scan report for xxxxxxxxx (192.168.0.1)
    Host is up (0.0059s latency).
    MAC Address: D4:5D:64:0E:C9:98 (Asustek Computer)
    Nmap scan report for yyyyyyyyy (192.168.0.15)
    Host is up (0.34s latency).
    MAC Address: 14:88:E6:80:20:67 (Unknown)
    Nmap scan report for zzzzzzzz (192.168.0.18)
    Host is up (0.24s latency).
    MAC Address: 0A:B2:56:90:50:8A (Unknown)
    youarewelcom@myhost : ~/Raspberry >

    Il suffit d’utiliser cet utilitaire combiné à quelques commandes pour obtenir de manière simple l’ensemble des Raspberry’s présent sur le réseau :

    # Retrieve the MAC Addresses prefixes for Raspberry
    curl https://devtools360.com/en/macaddress/vendorMacs.xml?download=true 2>/dev/null | grep -i Raspberry|awk -F\" '{ print $2 }' >Raspberry.MacPrefix.txt
    
    # Scan the network to find the different devices (IP and MAC Address)
    nmap -sP 192.168.0.0/24 | awk '/Nmap scan report for/{printf $5" "$6;}/MAC Address:/{print " "$3;}' | sort|grep -f Raspberry.MacPrefix.txt |sed 's/[\(\)]//g'

    Exemple d’une manière de déterminer le hostname, l’ip et l’adresse MAC des Raspberry’s sur le réseau 192.168.0.0/24 :

    youarewelcom@myhost : ~/Raspberry > curl https://devtools360.com/en/macaddress/vendorMacs.xml\?download\=true 2>/dev/null | grep -i Raspberry|awk -F\" '{ print $2 }' >Raspberry.MacPrefix.txt
    youarewelcom@myhost : ~/Raspberry > sudo nmap -sP 192.168.0.0/24 | awk '/Nmap scan report for/{printf $5" "$6;}/MAC Address:/{print " "$3;}' | sort|grep -f Raspberry.MacPrefix.txt |sed 's/[\(\)]//g'
    192.168.0.200 DC:A6:32:E6:FB:7C
    192.168.0.201 E4:5F:01:04:38:61
    192.168.0.202 E4:5F:01:04:37:17
    192.168.0.203 E4:5F:01:04:38:55
    192.168.0.204 E4:5F:01:04:38:0D
    youarewelcom@myhost : ~/Raspberry >

    Si vous avez un DNS ou que vous avez adapté votre ‘/etc/hosts’, vous obtiendrez :

    youarewelcom@myhost : ~/Raspberry >  sudo nmap -sP 192.168.0.0/24 | awk '/Nmap scan report for/{printf $5" "$6;}/MAC Address:/{print " "$3;}' | sort|grep -f Raspberry.MacPrefix.txt |sed 's/[\(\)]//g'
    pi4node000 192.168.0.200 DC:A6:32:E6:FB:7C
    pi4node001 192.168.0.201 E4:5F:01:04:38:61
    pi4node002 192.168.0.202 E4:5F:01:04:37:17
    pi4node003 192.168.0.203 E4:5F:01:04:38:55
    pi4node004 192.168.0.204 E4:5F:01:04:38:0D
    youarewelcom@myhost : ~/Raspberry >

    Cela sera très utile pour ansible

  • Comment migrer un site wordpress vers un nouvel host ?

    Comment migrer un site wordpress vers un nouvel host ?

    Sur le host actuel (OLD-SRV) :

    Extraire le contenu de la base de données WordPress :

    Allez dans le répertoire contenant votre site web and récupéré le contenu de votre base de données WordPress via WP-CLI

    cd /var/www/mydomain.tld/htdocs
    wp db export --allow-root

    Remarque : Si WP-CLI n »est pas installé sur votre serveur, exécutez les commandes suivantes :

    curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
    chmod +x wp-cli.phar
    sudo mv wp-cli.phar /usr/local/bin/wp

    Sur le nouvel host (NEW-SRV) :

    Transférer les fichiers de votre host actuel (OLD-SRV) vers votre nouveau host (NEW-SRV)

    Pour migrer les files de votre host actuel vers votre nouveau serveur, nous utiliserons rsync car c’est rapide and secure (fichiers transférés via SSH). Vous pouvez, bien sûr, configurer un « password-less » SSH Login entre les deux hosts.
    Voici les commandes à exécuter pour copier les fichiers de votre host actuel (OLD-SRV) vers le nouveau (NEW-SRV):

    rsync -avzh --progress --ignore-existing \
    root@OLD-SRV:/var/www/mydomain.tld/htdocs/ \
    /var/www/mydomain.tld/htdocs/

    Ne gardez pas le fichier ‘wp-config.php’

    Le fichier « wp-config.php » contient principalement les paramètres de votre base de données. Vu que sur le nouvel host, vous n’avez probablement pas les même paramètre, il est préférable de renommer le fichier « wp-config.php » afin de permettre l’importation des données dans votre nouvelle base de données.

    Exemple de commande à éxécuter pour renommer le ‘wp-config.php’ :

    mv /var/www/mydomain.tld/htdocs/wp-config.php /var/www/mydomain.tld/wp-config.php.bak

    Restauration de la base de données du host actuel sur le nouvel host (NEW-SRV)

    Nous allons utilisé WP-CLI pour importer facilement la base de données que nous avions transféré dans une étape précédente.

    cd /var/www/mydomain.tld/htdocs
    wp db import my_domain_tld-2020-08-21-XX44z4.sql --allow-root
    rm mydomain_co-2020-08-21-XX44z4.sql