Wake-on-LAN(WOL、英語からの翻訳-「ローカルネットワークからの信号」)は、ローカルエリアネットワークを介して特別なバイトシーケンスを送信することにより、コンピューターをリモートでオンにできる技術です。 ウィキ
そして、一つのことではないとしても、すべてがうまくいくでしょう。 電源障害の後、コンピューターの電源は入りません。
同意します、特にあなたがそれから数千キロ離れている場合、これは「楽しい」驚きになります。
1つのソリューションがここに記述されていますが、それはハードウェアとソフトウェアであり、追加のハードウェアなしで実行できます。
HabréのWOLについては、すでに2ページあります 。 したがって、カードにwolを含めることは、この記事では考慮されません。
はじめに
まず、コンピューターの電源が入らない理由を見てみましょう。 これを理解するには、ACPIに目を向ける必要があります。
ACPI-英語 高度な設定と電源インターフェイス)。 ACPIは、状態(特にグローバルデバイスと特定デバイスの両方)を記述します。 ( wiki )
2つのグローバルな状態に関心があります。
- G2(S5)(ソフトオフ)-ソフト(ソフトウェア)シャットダウン。 システムは完全に停止していますが、通電されており、いつでも電源を入れることができます。 システムコンテキストは失われます。
- G3(機械的オフ)-システムの機械的シャットダウン。 ATX電源が無効になっています。
残念ながら、電源が接続されると、システム自体はG3からG2に移行しません。
したがって、停電後に起動できるようにするには、コンピューターをG3からG2に転送する方法を学ぶ必要があります。
ほとんどの[新しい] BIOSには、[停電後]オプションがあります。 次の3つの値のいずれかを取ることができます。
- 「Stay Off」-ネットワークの電源が切れて復旧した場合、PCの電源を入れるには電源ボタンを押す必要があります。
- 「オン」-電源復旧により、システムが自動的にオンになります。
- 「最終状態」-システムを停電時の状態に復元します。 オフになっている場合はオフのままになり、そうでない場合はオンになります。
「オンにする」を選択すると、残っている唯一の質問は、ケースのボタンによるネットワーク要求または通常の開始からではなく、停電後にコンピューターをオンにする方法です。 これらのチェックはinitrdで行います。
Initrd(英語の略。初期RAMディスク、初期初期化用のランダムアクセスメモリ内のディスク)は、Linuxカーネルがブート中に使用する一時ファイルシステムです。 ( wiki_en )( wiki_en )
Ubuntu / Debianでのinitrdのファイルの場所は、initramfs-toolsのmanで見つけることができます( Ubuntu Webサイトからオンラインで )。
Centosの場合、すべてが少し異なります-ドラカットがあります。
コンピューターがオンになったことを確認するために、wolパケットを送信した後、pingを実行します。 しかし、WOLパッケージは「魔法」なので、pingも「魔法」にしましょう。 pingのサイズを84ではなく48バイトにします。
フローチャートの形でアイデア全体を合計します。
実装
モジュール
/ etc / initramfs-tools / modulesで、iptablesとネットワークに必要なモジュールを追加します。
ネットワークカードのモジュール
r8169 ( )
iptablesモジュール
xt_length iptable_filter ip_tables x_tables
スクリプト
/ etc / initramfs-tools / scripts / local-topで、checkbootファイルに内容を追加します:
#!/bin/sh PREREQ="" prereqs() { echo "$PREREQ" } case $1 in prereqs) prereqs exit 0 ;; esac [ `cat /proc/cmdline | grep nocheckboot | wc -l` -eq 1 ] && exit 0 iptables -A INPUT -p icmp --icmp-type echo-request -m length --length 48 -j ACCEPT modprobe r8169 ifconfig eth0 192.168.0.2 up sleep 3 C=`iptables -L INPUT -v | grep 'icmp echo-request length 48' | cut -f5 -d' '` [ $C -gt 0 ] && exit 0 poweroff -f exit 0
そして、それを実行可能にします:
chmod +x /etc/initramfs-tools/scripts/local-top/checkboot
スクリプトは上記のフローチャートを実装します。
フック
/ etc / initramfs-tools / hooksで、次の内容のcheckbootファイルを追加します。
#!/bin/sh PREREQ="" prereqs() { echo "$PREREQ" } case $1 in prereqs) prereqs exit 0 ;; esac cp /sbin/ifconfig "${DESTDIR}/sbin" cp /sbin/iptables "${DESTDIR}/sbin" cp /lib/libip4tc.so.0 "${DESTDIR}/lib" cp /lib/libip6tc.so.0 "${DESTDIR}/lib" cp /lib/libxtables.so.7 "${DESTDIR}/lib" cp /lib/i386-linux-gnu/i686/cmov/libm.so.6 "${DESTDIR}/lib" mkdir "${DESTDIR}/lib/xtables" cp "/lib/xtables/libipt_icmp.so" "${DESTDIR}/lib/xtables" cp "/lib/xtables/libxt_length.so" "${DESTDIR}/lib/xtables" cp "/lib/xtables/libxt_standard.so" "${DESTDIR}/lib/xtables" exit 0
そして、それを実行可能にします:
chmod +x /etc/initramfs-tools/hooks/checkboot
このファイルは、スクリプトが正しく機能するためにinitrdに追加する必要があるものを示します。
その中で、iptablesおよびifconfigユーティリティをコピーした後、iptablesのライブラリもコピーする必要があります。
リンクライブラリは、 ldd / sbin / iptablesを実行して取得できます。
ただし、このプロセスでは、動的にロードされるモジュールも使用されます。 次のコマンドを実行すると、リストを表示できます。
# strace iptables -A INPUT -p icmp --icmp-type echo-request -m length --length 48 -j ACCEPT 2>&1 | grep ^open | grep '.so' | grep -v ENOENT | grep -o '"[^"]*"'
ロードされた他のライブラリを受け取ることができるもの:
"/lib/xtables/libipt_icmp.so" "/lib/xtables/libxt_length.so" "/lib/xtables/libxt_standard.so"
initrdを更新する
initrdをアップグレードする前に、安定版を別の名前で/ bootにコピーすることをお勧めします。これにより、スクリプト/フックにエラーが発生した場合でも、システムのロードは難しくありません。
次のコマンドでinitrdを更新します。
# update-initramfs -u
グラブ
nocheckbootを使用してgrubに新しい行を追加します。
これを行うには、/ boot / grub / grub.cfgを直接編集して、カーネルへのパラメーター行にnocheckbootを追加して新しい項目を作成するか、/ etc / grub.d / 10_linuxを変更します。 grub.cfgを編集すると起こります。
これを行うには、/ etc / grub.d / 10_linuxを追加します。
linux_entry "${OS} nockeckboot" "${version}" simple \ "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_EXTRA} ${GRUB_CMDLINE_LINUX_DEFAULT} nocheckboot"
後:
linux_entry "${OS}" "${version}" simple \ "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_EXTRA} ${GRUB_CMDLINE_LINUX_DEFAULT}"
そしてそれから:
# update-grub2
打ち上げ
起動スクリプトを記述するだけです。
そして、ここに彼は:
!#/bin/sh wol -i 192.168.0.255 {MAC} ping -s 20 -c 50 -W 1 192.168.0.2
ここで、「-c 50」は1秒あたり1パケットの50パケットです。つまり、50秒が「iptablesルールカウンターの確認」に進むすべてのステップの時間です。 「-s 20」は、パケットサイズを48バイトに等しくします。 48-20 = 28バイト-IPおよびイーサネットヘッダー。
結論の代わりに
これですべて、停電による自動車へのアクセスが失われることはなくなりました。
もちろん、ここでもUPSについて話すことができますが、タスクはUPSを使用せずに解決策を見つけることでした。
このようなスキームは、コンピューターへのアクセス(データへのアクセス、計算の実行)が必要な場合に役立ちます。ほとんどの場合、コンピューターはオフ状態になって待機します。