1.8. NetworkManager とネットワークスクリプト

Red Hat Enterprise Linux の以前のリリースでは、デフォルトで ネットワークスクリプト を使用してネットワークを設定していました。ネットワークスクリプト という用語は、通常 /etc/init.d/network スクリプトおよびこれが呼び出す他のインストール済みスクリプトを指します。ユーザーが提供するファイルは通常、設定とみなされますが、これらのスクリプトへの修正と解釈されることもあります。
NetworkManager はデフォルトのネットワークサービスを提供しますが、Red Hat 開発者はスクリプトと NetworkManager が相互に協力できるようにしました。スクリプトに精通している管理者はそのままスクリプトを継続して使用できます。両方のシステムが並列して稼働し、協力できることが期待されています。以前のリリースからのほとんどのシェルスクリプトも機能し続けることが期待されています。Red Hat では、これらを最初にテストすることを推奨しています。

ネットワークスクリプトの実行

既存の環境変数すべてをクリアにし、クリーンな実行を確保する systemctl ユーティリティー のみ のスクリプトを実行します。コマンドは以下の形式をとります。
systemctl start|stop|restart|status network
Red Hat Enterprise Linux 7 では NetworkManager が最初に起動し、/etc/init.d/networkNetworkManager をチェックして NetworkManager 接続の改ざんを防ぎます。NetworkManager は sysconfig 設定ファイルを使用するプライマリーアプリケーションとされており、/etc/init.d/network はフォールバックとなるセカンダリーとされています。
/etc/init.d/network スクリプトはイベント駆動型ではなく、以下のいずれかで実行されます。
  1. 手動 (systemctl コマンドの start|stop|restart network のいずれかで)。
  2. ネットワークサービスが有効となっている場合、起動時とシャットダウン時 (systemctl enable network コマンドによる)。
これは手動のプロセスで、起動後に発生するイベントに反応しません。ユーザーは ifup および ifdown の各スクリプトを手動で呼び出すこともできます。

カスタムコマンドとネットワークスクリプト

/sbin/ifup-localifdown-pre-local、および ifdown-local の各スクリプト内のカスタムコマンドは、それらのデバイスが /etc/init.d/network サービスで制御されている時にのみ、実行されます。(/etc/sysconfig/network-scripts/ifup-eth などの) initscripts 自体を編集すると、それらの変更は initscripts パッケージ更新で上書きされます。このため、initscripts の直接の編集は避け、/sbin/if*local スクリプトを活用することが推奨されます。こうすることで、パッケージ更新後もカスタム変更が維持されます。initscripts は関連する /sbin/if*local の存在を確認するだけで、それらが存在する場合は、実行します。initscripts は /sbin/if*local スクリプト内になにかを設置することはなく、initscripts RPM (またはパッケージ) がこららのファイルを所有したり修正したりすることもありません。
ネットワーク接続がオンラインおよびオフラインである時には、旧式のネットワークスクリプトと NetworkManager との両方の方法でカスタムタスクを実行する方法があります。NetworkManager が有効な場合は、ifup および ifdown スクリプトが NetworkManager に対して、問題となっているインターフェースを NetworkManager が管理しているかどうかを尋ねます。このインターフェースは、ifcfg ファイルの DEVICE= の行で見つかります。NetworkManager が該当するデバイスを管理しておらずデバイスが未接続の場合、ifupNetworkManager に接続を開始するよう依頼します。
  • NetworkManager がデバイスを管理していて、デバイスがすでに接続されている場合は、なにも実施されません。
  • NetworkManager がデバイスを管理していない場合は、スクリプトは NetworkManager が存在する前からある古い NetworkManager 以外のメカニズムを使って接続を開始します。
"ifdown" を呼び出していて NetworkManager がデバイスを管理している場合、ifdownNetworkManager が接続を切断するように依頼します。
スクリプトは NetworkManager を動的にチェックするので、NetworkManager が実行していない場合、スクリプトは NetworkManager 以前のスクリプトベースの古いメカニズムにフォールバックします。