Wake on LAN

Ξεκίνησε από Δημήτρης Δαλαγιώργος, 22 Οκτ 2009, 07:53:55 ΜΜ

« προηγούμενο - επόμενο »

Δημήτρης Δαλαγιώργος

Ανοίγω εδώ καινούριο thread γιατί το πρόβλημα είναι πιο πολύπλοκο απ' ότι αρχικά φανταζόμουν.

Η ιστορία έχει ως εξής: Παρότι το Ubuntu έχει εργαλείο για να στέλνει το λεγόμενο Magic Packet που "ξυπνάει" τους υπολογιστές μέσω δικτύου, και ενώ το wake on lan μου δούλευε όταν οι υπολογιστές φορούσαν Windows, με το που τους άλλαξα σε Ubuntu, έχασα αυτή τη δυνατότητα. Εννοείται, ότι δεν πείραξα τίποτα στο BIOS, οι ρυθμίσεις παρέμειναν ως είχαν, με το 'Wake on PME' ενεργοποιημένο.

Ψάχνοντας βρήκα ότι, εκτός απ' τη ρύθμιση του BIOS, μπορεί να ρυθμιστεί μέσω software και η κάρτα δικτύου ξεχωριστά. Για να δουλέψει, δηλαδή, το wake on LAN, πρέπει να είναι ενεργοποιημένο και στο BIOS και στην κάρτα δικτύου.

Με την εντολή

sudo ethtool eth0


βλέπουμε αν η κάρτα υποστηρίζει wake on LAN (wol) και αν είναι ενεργοποιημένο. Σε μένα έδειξε ότι η κάρτα υποστήριζε wol (αναμενόμενο) αλλά ήταν απενεργοποιημένο.

Με την εντολή

sudo ethtool -s eth0 wol g


ενεργοποιείται το wol με τη λήψη του magic packet. Το έκανα, λοιπόν, σε όλα τα μηχανάκια του εργαστηρίου. Τα έσβησα, δοκίμασα να τα ανοίξω με το wakeonlan αλλά τίποτα!!!

Αποδεικνύεται ότι, όταν σβήνει ο υπολογιστής, σβήνει και η κάρτα δικτύου, παρά την ρύθμιση που κάνουμε με την παραπάνω εντολή. Στα fora υπάρχουν διάφορες λύσεις, αλλά έχω καταμπερδευτεί για το ποια να χρησιμοποιήσω.

Αν κάποιος έχει λύσει το πρόβλημα, ή όταν το λύσω εγώ, ας γράψει εδώ τη λύση που εφάρμοσε...
Ενάντια στην ηλιθιότητα, ακόμα και οι θεοί, μάταια αγωνίζονται.
Friedrich Schiller

Δημήτρης Δαλαγιώργος

Μια λύση λέει  να τροποποιήσω το /etc/rc.local προσθέτοντας την παρακάτω γραμμή

ethtool -s eth0 wol g


Δε δουλεύει πάντα.

Μία λύση λέει να φτιάξω ένα script με το όνομα activateWOL που περιέχει τα παρακάτω:

#!/bin/bash
ethtool -s eth0 wol g


να το κάνω εκτελέσιμο και να το βάλω στο /usr/bin/ και μετά να πάω να πειράξω το /etc/network/interfaces και να προσθέσω μια γραμμή στο τέλος:

auto lo
iface lo inet loopback
address 127.0.0.1
netmask 255.0.0.0

auto eth0
iface eth0 inet static
address 10.0.0.4
netmask 255.255.255.0
gateway 10.0.0.2
[b]post-down /usr/bin/activateWOL[/b]


Ούτε αυτό δουλεύει γιατί το /etc/network/interfaces των clients στο εργαστήριο είναι ως εξής:

auto lo
iface lo inet loopback


και δε θέλω να τους δώσω static διευθύνσεις, ούτε είμαι σίγουρος πώς ακριβώς να πειράξω το /etc/network/interfaces

Ενάντια στην ηλιθιότητα, ακόμα και οι θεοί, μάταια αγωνίζονται.
Friedrich Schiller

alkisg

Παράθεση από: Δημήτρης Δαλαγιώργος στις 22 Οκτ 2009, 07:53:55 ΜΜ
Με την εντολή

sudo ethtool -s eth0 wol g


ενεργοποιείται το wol με τη λήψη του magic packet. Το έκανα, λοιπόν, σε όλα τα μηχανάκια του εργαστηρίου. Τα έσβησα, δοκίμασα να τα ανοίξω με το wakeonlan αλλά τίποτα!!!

Δημήτρη πριν προχωρήσεις στο *πού* θα βάλεις αυτήν την εντολή (υπάρχουν 100 μεριές που "κάνουν"),
θα πρέπει *πρώτα* να σου δουλέψει! Αν δεν δουλεύει, όπου και να τη βάλεις δεν θα δεις διαφορά...

Άρα, αν εκτέλεσες τη συγκεκριμένη εντολή, έκλεισες τον Η/Υ, και δεν ξαναξύπναγε, τότε αυτή η εντολή δεν σου κάνει και πρέπει να ψάξεις για κάποια άλλη λύση.
Στη χειρότερη περίπτωση μπορεί να είναι και θέμα driver, δηλαδή να αναφέρει ότι ενεργοποιεί το WOL αλλά να μην το κάνει στην πραγματικότητα, οπότε θα θέλει bug report στο σχετικό module (ποια κάρτα δικτύου είναι; lspci -nn).

Δημήτρης Δαλαγιώργος

Η εντολή δουλεύει. Όχι πάντα, αλλά δουλεύει. Φοβάμαι ότι δεν εξαρτάται μόνο απ' την συγκεκριμένη εντολή, αλλά και απ' τον τρόπο που κλείνει ο υπολογιστής.
Ενάντια στην ηλιθιότητα, ακόμα και οι θεοί, μάταια αγωνίζονται.
Friedrich Schiller

alkisg

ΟΚ. Επομένως απλά βάλε το παρακάτω σαν if-up down script, δηλαδή δημιούργησε ένα αρχείο /etc/network/if-up.d/wol και βάλ' το μέσα:

#!/bin/sh
#Enables wol for $IFACE.

set -e

#If $IFACE isn't defined, just exit
if [ -z "$IFACE" ]; then
	exit 0
fi

# Don't do anything for the lo interface
if [ "$IFACE" = "lo" ]; then
	exit 0
fi

ethtool -s "$IFACE" wol g


Επίσης στη συνέχεια κάν' το εκτελέσιμο: sudo chmod +x /etc/network/if-up.d/wol

Ο NetworkManager θα το εκτελέσει αυτόματα την επόμενη φορά που θα γίνει σύνδεση δικτύου.

Δημήτρης Δαλαγιώργος

#5
Δε δούλεψε...  :'(

Τι γίνεται: Αν, ενώ έχουν ξεκινήσει οι υπολογιστές, δώσω την εντολή

sudo ethtool -s eth0 wol g


manually, τότε κρατάνε τη ρύθμιση και, αφού τους σβήσω, μπορώ να τους ξανανάψω με το wakeonlan. Αν δεν δώσω την εντολή, το σκριπτάκι από μόνο του δε δουλεύει.
Ενάντια στην ηλιθιότητα, ακόμα και οι θεοί, μάταια αγωνίζονται.
Friedrich Schiller

alkisg

$#(*&@#

Είπα να δοκιμάσω το σκριπτάκι στο σχολείο, για να σιγουρευτούμε ότι είναι σωστό.

Δυστυχώς όμως στο σχολείο έχω το ανάποδο πρόβλημα: όταν τους κλείνει ο συνάδελφος από τα Windows τότε ΔΕΝ ανοίγουν, ενώ όταν τους κλείνω εγώ από το Ubuntu ανοίγουν κανονικά και χωρίς το σκριπτάκι...  :D

Καταρχάς, βάλε σαν τελευταία γραμμή στο σκριπτάκι if-up.d/wol την
echo "`/bin/date`: Setting wol for $IFACE" >> /tmp/wol

για να βεβαιωθείς ότι όντως καλείται και εκτελείται (δες το αρχείο /tmp/wol μετά από επανεκκίνηση).

Στη συνέχεια, αν ξεκινήσεις τον Η/Υ χωρίς το σκριπτάκι,
και τρέξεις sudo ethtool eth0,
υποτίθεται ότι σου βγάζει Wake-on: d, έτσι;

Αν μετά το ξεκινήσεις *με* το σκριπτάκι,
και τρέξεις sudo ethtool eth0,
σου βγάζει Wake-on: g ή όχι;

Δημήτρης Δαλαγιώργος

Δεν υπάρχει αρχείο wol στο /tmp οπότε το σκριπτάκι δεν τρέχει.
Ενάντια στην ηλιθιότητα, ακόμα και οι θεοί, μάταια αγωνίζονται.
Friedrich Schiller

alkisg

Ας το κάνουμε καλύτερα πιο αυτοματοποιημένα, για αποφυγή λαθών. Κάνε επικόλληση όλο το παρακάτω μακρυνάρι σε ένα τερματικό και δώσε password όταν στο ζητήσει:
sudo wget 'https://alkisg.mysch.gr/steki/index.php?action=dlattach;topic=2287.0;attach=1148' -O /etc/network/if-up.d/wol && sudo chmod +x /etc/network/if-up.d/wol


Μετά reboot και (θεωρητικά) είσαι έτοιμος.
Αν παίξει, κάνε κι ένα feature request στα sch-scripts για να το συμπεριλάβουμε σ' αυτά.
Αν δεν παίξει, να δούμε λίγο τις ρυθμίσεις του NetworkManager σου...

Δημήτρης Δαλαγιώργος

Ok, δούλεψε!

Δεν κατάλαβα όμως, τι άλλαξες σε σχέση με το προηγούμενο script;
Ενάντια στην ηλιθιότητα, ακόμα και οι θεοί, μάταια αγωνίζονται.
Friedrich Schiller

alkisg

Τίποτα. Κάπου θα είχες κάνει κάποιο λαθάκι, είτε στη θέση του αρχείου είτε στην chmod...
Γι' αυτό η αυτοματοποίηση είναι "καλό πράμα" (TM)! :D

odysseas

Παράθεση από: alkisg στις 25 Οκτ 2009, 12:25:47 ΜΜ
ΟΚ. Επομένως απλά βάλε το παρακάτω σαν if-up down script, δηλαδή δημιούργησε ένα αρχείο /etc/network/if-up.d/wol και βάλ' το μέσα:

Από καθαρή περιέργεια κι επειδή τη λύση του Άλκη δεν την είδα πουθενά αλλού: υπάρχει διαφορά μεταξύ του (α) να βάλεις ένα script στο /etc/network/if-up.d/ και (β) να προσθέσεις μια "post-up" γραμμή που να εκτελεί το script στο /etc/network/interfaces;

Το (β) --περίπου-- αναφέρει κι ο Δημήτρης και φαίνεται να έχει διαδοθεί ως πρόταση. Η (α) μου φαίνεται πιο καθαρή λύση, γι' αυτό και αναρωτιέμαι αν υπάρχουν διαφορές που να κάνουν τη μια προτιμότερη από την άλλη.

Και μιας και αναβιώνω αυτό το σχετικά παλιό thread, να σημειώσω και κάτι άλλο που διάβασα: πολλοί είναι αυτοί που αναφέρουν (όπως και ο Δημήτρης) ότι παίζει ρόλο το πως θα κλείσει ο υπολογιστής. Όμως ορισμένοι ισχυρίζονται ότι εκτελώντας το scriptάκι και (?) σαν if-down script, ο τρόπος κλεισίματος φαίνεται να επηρρεάζει πολύ λιγότερο (εξαιρουμένης της περίπτωσης όπου πέφτει το ρεύμα).

alkisg

Αν κάποιος χρησιμοποιεί τον Network Manager, δηλαδή η προεπιλεγμένη πια περίπτωση στο Ubuntu, δεν έχει (σχεδόν) καθόλου /etc/network/interfaces. Άρα δεν υπάρχει καν η δυνατότητα της λύσης (β).
Επίσης, η λύση (α) βολεύει στο πακετάρισμα: εφόσον υπάρχει ειδικός φάκελος, κάθε πρόγραμμα μπορεί να προσθέτει εκεί τα δικά του scripts χωρίς να μπλέκεται με τα υπόλοιπα.

Θεωρητικά πάντως την ίδια δουλειά κάνουν, δηλαδή αυτό που λένε ότι ο τρόπος κλεισίματος επηρεάζει λιγότερο, δεν μου φαίνεται σωστό.

odysseas

Παράθεση από: alkisg στις 27 Φεβ 2010, 12:10:19 ΠΜ
Θεωρητικά πάντως την ίδια δουλειά κάνουν, δηλαδή αυτό που λένε ότι ο τρόπος κλεισίματος επηρεάζει λιγότερο, δεν μου φαίνεται σωστό.

Δεν εννοούσα πάντως να πειράξει κανείς και το /etc/network/interfaces και το /etc/network/if-up.d/. Εννοούσα τη συνδυασμένη χρήση και if-up και if-down script, αντί μόνο του ενός από τα δύο.

alkisg

Δεν μπορώ να φανταστώ γιατί αυτό να βοηθάει...

Δημήτρης Δαλαγιώργος

Μόλις τελείωσα την εγκατάσταση του Ubuntu 10.04 Lucid Lynx σε 9 workstations. Αν κι εγκατέστησα το script όπως και πέρσι, αφού σβήσουν, οι υπολογιστές ΔΕΝ ανάβουν ξανά με wakeonlan. Έχει αλλάξει κάτι από την έκδοση 9.10 στην 10.04 που δεν αφήνει στο script να δουλέψει;
Άκυρο: Δεν είχα εγκαταστήσει το ethtool!
Ενάντια στην ηλιθιότητα, ακόμα και οι θεοί, μάταια αγωνίζονται.
Friedrich Schiller

Δημήτρης Δαλαγιώργος

Φεύγοντας το μεσημέρι κλείνω όλους τους σταθμούς εργασίας απ' τον server μέσω cssh με την εντολή

sudo shutdown -P now


Ένας σταθμός εργασίας, ο ίδιος πάντοτε, μερικές φορές, αντί να σβήσει κάνει επανεκκίνηση! Το έκανε με 9.04, με 9.10 το κάνει και με το 10.04. Τι μπορεί να φταίει;
Ενάντια στην ηλιθιότητα, ακόμα και οι θεοί, μάταια αγωνίζονται.
Friedrich Schiller