Le Wake On Lan sous Linux

COCO -  
 clement.be4free -
comment fonctionne le Wake On Lan (éveil et extinction à distance) sous linux ? quel matériel ? quel config ? adresse de site ki en parle ???

Merci d'avance !!!

4 réponses

  1. zefcafougnette Messages postés 1 Statut Membre 4
     
    Bonjour,

    Pour réveiller des machines sous linux en Wake on lan, j'utilise la méthode suivante :
    1 - J'active l'option dans le BIOS de la machine
    2 - je configure un service qui configure les cartes réseau
    3 - je lance la commande eth-wake MAC_ADRESSE ( voir script wol.sh) sous root

    Il semble que linux ne conserve pas les paramètres de configuration des cartes réseaux lorsqu'on arrête la machine. La configuration du BIOS ne suffit pas non plus.

    J'utilise le script WakeOnLan sur des machine de production sous Readhat Entreprise. Pour des machine sous windows, je n'ai pas de solution pour le moment.

    Script pour réveillée une machine Linux :

    wol.sh

    #!/bin/bash
    #
    # Script pour demarrer un machine en WakeOnLan
    #
    # Il faut fournir le nom de la machine en parametre
    #
    #Je verifie que le nom de la machine a ete donne
    #
    export LIGCMD=$(basename $0)
    export MACHINE=$1
    if [ $# -eq 0 ]; then
    echo
    echo " Le nom de la machine a demarrer doit etre passe en parametre."
    echo
    echo " ${LIGCMD} <nom de la machine>"
    echo
    exit 1
    fi
    #
    # Je verifie que la commande peut etre utilisee sur la machine qui lance le script
    #
    if ! (which ether-wake > /dev/null 2>&1); then
    echo
    echo "Le script $(basename $0) ne peut pas etre lance sur cette machine."
    echo
    exit 1
    fi
    #
    # Je verifie que la machine n'est pas demarrer
    #
    if (ping -c 2 ${MACHINE} >/dev/null 2>&1); then
    echo
    echo "La machine ${MACHINE} est en cours de fonctionnement."
    echo
    exit 1
    fi
    #
    # Je defini l'adresse mac de la machine a demarrer
    #
    case ${MACHINE} in
    machine1 | machine1.mondomaine.lan )
    MAC_ADDR=XX:XX:XX:XX:XX:XX ;;
    machine2 | machine2.mondomaine.lan )
    MAC_ADDR=YY:YY:YY:YY:YY:YY ;;
    * )
    echo "La machine ${MACHINE} n'est pas repertoriee pour le WOL.";
    exit 1 ;;
    esac
    #
    # Je lance la commande de WakeOnLan
    #
    echo
    echo "Envoi de la commande de demarrage pour la machine ${MACHINE}"
    echo
    ether-wake ${MAC_ADDR}
    exit 0

    Script du service

    WakoOnLan à placer dans /etc/init.d (chkconfig WakoOnLan on) :

    #!/bin/bash
    #
    # WakeOnLan Script pour configurer le WOL sur les interfaces reseau
    #
    # chkconfig: 2345 99 05
    #
    # description: Activation du Wake On Lan
    #
    # Source function library.
    . /etc/init.d/functions
    #
    if [ ! -f /etc/sysconfig/network ]; then
    exit 0
    fi
    . /etc/sysconfig/network

    # Le reseau est-il demarre
    if [ "${NETWORKING}" = "no" ]; then
    echo "Wake On Lan non active"
    exit 0
    fi
    #
    # Determination des interfaces reseau actives
    #
    cd /etc/sysconfig/network-scripts
    interfaces=$(ls ifcfg* | \
    LANG=C sed -e "$__sed_discard_ignored_files" \
    -e '/\(ifcfg-lo\|:\|ifcfg-.*-range\)/d' \
    -e '/ifcfg-[A-Za-z0-9\._-]\+$/ { s/^ifcfg-//g;s/[0-9]/ &/}' | \
    LANG=C sort -k 1,1 -k 2n | \
    LANG=C sed 's/ //')
    #
    # Activation du Wake On Lan pour les interfaces montees
    #
    for i in $interfaces; do
    if (ethtool $i|grep "Supports Wake-on"|grep g > /dev/null 2>&1); then
    echo -n "Activation du WakeOnLan pour $i"
    daemon /sbin/ethtool -s $i wol g
    echo
    fi
    done
    exit 0
    4
  2. ben_o_it Messages postés 1 Statut Membre 1
     
    Bonjour,

    J'ai un pb pour activer le wake on lan selon le noyaux que j'utilise (je suis un peu novice sous linux).

    J'ai 2 noyaux linux sur un pc :
    1) un noyau 2.4.27 , pré-compilé
    2) un noyau 2.6.19 , configuré et compilé par mes soins

    Qd j'éteins mon pc apres l'avoir démarré sur le noyau (1), j'arrive à le redémarrer avec le wake on lan sans pb.
    Par contre qd je l'ai éteins avec le noyau (2), je n'y arrive pas.

    J'ai beau cherché sur internet, je n'arrive pas à trouver ce que j'ai mal configuré dans mon noyau (2).
    Est-ce que quelqu'un pourrait m'aider ? Qu'est-ce que je peux avoir mal configuré pour la compilation de mon noyau ?
    1
  3. clement.be4free
     
    voila uns vision legèrement différente ce basant sur les logs trouvés dans le DHCP.

    ce script permet de réveillé un host via son nom, ou via son adresse mac, ou de réveiller tout les hosts du réseau.
    #!/bin/sh
    # /// revision-script 1.0 \\\
    # Author : Clément ROGER
    # Author : Be4free.com
    # Author : <clement.be4free AT gmail DOT com>
    # Licence : Under GPL
    # If you modify this script or if you want to add functions please email 
    # your version to clement.be4free AT gmail DOT com
    
    function wol_install {
            if [ ! -d "/var/lib/wol/" ] ; then  mkdir -p /var/lib/wol/ ; chmod 640 /var/lib/wol/ ; fi
            if [ ! -f "/var/lib/wol/discover" ] ; then  touch /var/lib/wol/discover ; chmod 640 /var/lib/wol/discover ; fi
    }
    
    function wol_list {
            mac_list=`cat /var/lib/wol/discover`
            for mac_address in $mac_list ; do
                    echo $mac_address | {
                            IFS=";" read mac name
                            echo $name
                    }
            done
    }
    
    
    
    function wol_discover {
            mac_list=`cat /var/log/syslog | grep dhcpd | grep DHCPREQUEST | sed 's/^.*from//' | cut -d " " -f 2,3 | sed 's/\ (/;/' | sed 's/)//' | sort | uniq`
            for mac_address in $mac_list ; do
                    cat /var/lib/wol/discover | grep -x $mac_address >> /dev/null 1>&1
                    if [ "$?" == 1 ] ; then
                            echo $mac_address >> /var/lib/wol/discover
                    fi
            done
    }
    
    function wol_wake {
            argv=$1
            cat /var/lib/wol/discover | grep $argv | {
                    IFS=";" read mac name
                    ether-wake $mac
            }
    }
    
    if [ ! -d "/var/lib/wol/" ] || [ ! -f "/var/lib/wol/discover" ] || [ ! -r "/var/lib/wol/discover" ] && [ $1 != "install" ] ; then
            echo "Error : $0 db are not installed, please type '$0 install'"
            exit 1;
    fi
    
    case $1 in
            install)
                    wol_install
                    ;;
            list)
                    wol_list
                    ;;
            discover)
                    wol_discover
                    ;;
            wakeall)
                    wol_discover
                    mac_list=`cat /var/lib/wol/discover | cut -d ";" -f 1`
                    for mac_address in $mac_list ; do
                            wol_wake $mac_address
                    done
                    ;;
            wake)
                    if [ "$1" != "" ] ; then
                            cat /var/lib/wol/discover | grep $2 >> /dev/null 2>&1
                            if [ "$?" != "0" ] ; then
                                    echo "undiscovered host, please try '$0 discover' first"
                                    exit 1;
                            fi
                            wol_wake $2
                    else
                            echo "Usage : $0 wake [HOST or MAC_ADDRESS]"
                            exit 1;
                    fi
                    ;;
            *)
                    echo "Usage : $0 list|dicover|wakeall|wake [HOST or MAC_ADDRESS]"
                    ;;
    esac


    a placer dans /usr/local/sbin/wakeonlan en 750
    installer via /usr/local/sbin/wakeonlan install
    Usage : /usr/local/sbin/wakeonlan list|dicover|wakeall|wake [HOST or MAC_ADDRESS]
    1