
Debianベースのヘッドレスボックスがあります。 Webインターフェイスを介してアクセスできるように設計されています。ネットワークが通過しました/etc/network/interfaces
。ファイルが実際に有効であることを確認しようとしています。私の考えは、ファイルにエラーがあるかどうかを確認し、その場合はデフォルトのファイルに戻ることです。
私の質問は、質問の最初の部分であるdiscover error in filesに関するものですinterfaces
。
コマンドの使用について多くの質問がありましたifup --no-act
が、実際に見たのは、このアプローチは私の状況に十分強力ではないということです。たとえば、
root@arm:~# ifup --no-act --interfaces=/etc/network/interfaces eth0
run-parts /etc/network/if-pre-up.d
ip addr add 1s23.123.123.123/255.255.255.192 broadcast + dev eth0 label eth0
ip link set dev eth0 up
ip route add default via 123.123.123.122 dev eth0
run-parts /etc/network/if-up.d
無効なIPアドレスセット(最初のオクテットに追加の「s」)を書き留めます。このコマンドはエラーを提供せず(とにかく表示されます)、この状態のファイルでコンピュータを再起動するとネットワーク機能が失われます。動作するinterfaces
結果は非常に似ています(部分を除くbroadcast +
)。
root@arm:~# ifup --no-act --interfaces=/etc/network/interfaces eth0
run-parts /etc/network/if-pre-up.d
ip addr add 123.123.123.123/255.255.255.192 broadcast 123.123.123.127 dev eth0 label eth0
ip link set dev eth0 up
ip route add default via 123.123.123.122 dev eth0
run-parts /etc/network/if-up.d
これは主に私が避けたい問題です。私の質問は、/etc/network/interfaces
ファイル内の誤った設定を検出する方法です。プラス記号はエラーを示しますか?どういう意味ですか?この問題を解決するための最良の方法は何ですか?
答え1
短い答え:ifup --no-act
ネットワーク設定を使用して電話をかけて戻りコードをテストして確認します。
長い答え:私は組み込みデバイスに対して非常に似た仕事をしてきました。これには、networking
起動前に実行され、システムが有効なイーサネット設定を持つようにするために作成されたinitスクリプトの関連部分があります。
ETH0_CUSTOM=/var/myproject/etc/interfaces.eth0
result=1
if [ -f "${ETH0_CUSTOM}" ]; then
ifup -n -i "${ETH0_CUSTOM}" eth0
if [ $? -eq 0 ]; then
ln -sf "${ETH0_CUSTOM}" /etc/network/interfaces.eth0
result=0
else
echo "Validating ${ETH0_CUSTOM} failed"
fi
fi
if [ ${result} -ne 0 ]; then
ln -sf /etc/network/interfaces.eth0.default /etc/network/interfaces.eth0
fi
元のバージョンでは/etc/network/interfaces
有効な設定
source /etc/network/interfaces.eth0
答え2
これには2つの問題/アプローチがあると思います。
- ユーザーが間違えないように保護します。
- 変更された構成を永久にする前にテストする方法はありますか?
最初の場合、すべての設定はスマートツールを介して行われます$EDITOR /etc/foobar
。この場合、IPアドレスが有効であるか、デフォルトルートが同じネットワーク上にあるかを確認できます。ツールは、一部のスクリプト、またはグラフィカル/Webベースの管理インターフェース(OpenWRTなど)のいずれかです。
もう1つのことは、多くのシステムでは、ユーザーがディスプレイ設定(解像度など)を確認し、ユーザーが何もしない場合は、最後のタスク構成に置き換えるように、ネットワーク構成が適用された後にユーザーにそれを確認させることです。
したがって、次のようになります。
- 起動設定を新しい設定から切り離して、ユーザーが変更できるようにする新しい構成のみが適用されます(開始構成ではありません!)。
ユーザーが新しい設定を適用するには、
shutdown -r +5
約5分間再起動()をスケジュールしてから、新しい設定をロードします。これで、ユーザーがシステムに引き続きアクセスできることを確認します(新しいSSHセッションを開くことを含む)。
可能であれば、変更を確認して再起動をキャンセルしてから、新しい設定を起動設定にコピーできます。
修正が適用された後にシステムにアクセスできない場合は、変更を確認できず、再起動すると再起動されます(起動設定が正常であると仮定すると、システムが使用を開始したためです)。前に。)
このアイデアは、ネットワークインターフェイスの設定、ファイアウォールの設定などの変更に適用する必要があります。ただし、以前に有効な起動構成 (一部の重要なルールを含む) によって新しい構成が機能する状況が発生しないように、構成は独立している必要があります。
(もちろん、実際にシステムを再起動する必要はなく、設定をリセットするだけです。)
もちろん、これらのどれもrootユーザーが足に銃を撃つのを防ぐことはできませんが、少なくとも安全スイッチを備えたいくつかのツールを提供することはできます。
コンソール/シリアルポートなどを介したバックアップアクセスは依然として最善です。
/etc/network/interfaces
この特別なケースでは、ユーザーが編集して実行することに慣れている場合は、ifup
それらを削除する方法を教える必要があります。これは難しい場合があります。あるいは、実際の構成が実際に別の場所にあるようにシステムを変更して、古い習慣によって問題が発生しないようにすることもできます。