私のコンピューターは、dhcpが必要なネットワークに接続されています。したがって、/etc/rc.conf
のネットワーク構成は次のようになります。
interface=eth0
address=
netmask=
broadcast=
gateway=
私のディーモンは
DAEMONS=(!hwclock syslog-ng network netfs crond ntpd)
この構成では、Archは「ネットワーク」で長時間起動時にハングします(それでも「[完了]」と表示されますが、起動後は接続されません)。私は2つの回避策を見つけました:
network
を削除しますmii-tool --reset eth0
とdhcpcd eth0
を実行します(これらのコマンドを/etc/rc.local
に配置すると、どういうわけか機能しません。次に、dhcpは非常に高速に動作します(reset!のため)。最初のコマンドを実行する前に、ip link show eth0
の出力には「NOCARRIER」が含まれています。その後、そうではありません。 (また、mii-tool
は最初に「リンクなし」を示し、その後eth0: 10 Mbit, half duplex, link ok
を示します。
ネットワーク構成をに変更します
interface=eth0
address=x.y.z.21
netmask=255.255.255.0
broadcast=xxx.y.z.255
gateway=x.y.z.254
一方、x、y、zは、ネットワークの特定のアドレスを構築します(dhcpが使用されますが、静的IPを取得します)。
mii-tool --reset eth0
およびdhcpcd eth0
を/etc/rc.local
に追加しますこれで、ネットワークは起動時にすぐに起動し(成功したかどうかはわかりませんが)、/etc/rc.local
のコマンドが実行され、ログイン後に接続は正常になります。
したがって、問題はdhcpcd
が「キャリアを求めて」またはsthでスタックしていることのようです。
一部のディーモンはネットワークを必要とするため、回避策は好きではありません(開始しているように見えますが)。起動時にeth0
をdhcpの準備をするために何ができますか?それとも別の問題がありますか?
DHCPが必要な場合、DHCPが完了する前に_eth0
_を準備することはできません。本当に必要なのは、マシンが起動プロセスを待たずに完了し、ネットワーク構成をバックグラウンドで続行することだと思います。たとえば、これによりすばやくログインでき、通常、ネットワーク構成は必要なときに完了します。これを行うには、initスクリプトにDHCP自体を試行させる代わりに、DHCPを含むネットワーク構成を動的に処理するデーモンを開始させる必要があります。
ネットワークに応じたネットワークサービスの監視に関しては、特定のローカルアドレスではなく_0.0.0.0
_にバインドしている場合、通常、ループバックインターフェイス以上を設定する必要はありません。 (デーモンは通常デフォルトでそれを行うので、特定のアドレスにバインドさせない限り機能するはずです)
バックグラウンドネットワーク構成の目的で、私は NCDプログラミング言語 をお勧めします。これにより、ネットワーク構成を特別な言語でプログラムできます。 _/etc/ncd.conf
_でDHCPを実行する簡単なNCDスクリプト(_eth0
_)は次のとおりです。
_process lan {
# Set device.
var("eth0") dev;
# Wait for device, set it up, and wait for network cable.
net.backend.waitdevice(dev);
net.up(dev);
net.backend.waitlink(dev);
# DHCP configuration.
# net.ipv4.dhcp() will block here until it obtaines an IP address.
# Note that it will only obtain the IP address, and *not* assign it;
# we do that with a separate command below.
net.ipv4.dhcp(dev) dhcp;
# Check IP address - make sure it's not local.
# If you have other reserved subnets around, check for those too.
ip_in_network(dhcp.addr, "127.0.0.0", "8") test_local;
ifnot(test_local);
# Assign IP address, as obtained by DHCP.
net.ipv4.addr(dev, dhcp.addr, dhcp.prefix);
# Add default route, as obtained by DHCP.
net.ipv4.route("0.0.0.0", "0", dhcp.gateway, "20", dev);
# Configure DNS servers, as obtained by DHCP.
net.dns(dhcp.dns_servers, "20");
}
_
これを使用するには、network
デーモンを無効にし、代わりに_badvpn-ncd
_デーモンを使用します。起動すると、NCDデーモンがバックグラウンドでネットワーク構成を処理します。または、_badvpn-ncd
_プログラムを使用して、ターミナルから直接テストすることもできます。 NCDをインストールできます AURから 。
デーモンが実際に稼働中のネットワークインターフェイスに依存している場合は、initスクリプトを使用せずに、daemon()
コマンドを使用してNCDから適切なタイミングでデーモンを起動できます(安定バージョンでは使用できません)。
NCDに代わるものとして、 netcfg および ifplugd があります。 Archネットワーク構成ファイルを使用できる場合もありますが、NCDと比較すると非常に制限されています。
[〜#〜]編集[〜#〜]:システムでリンク検出に問題があることを見逃したようです。確認するには、_eth0
_を下げたまま、自動インターフェイス構成なしで起動してみてください。次に、ログインして試してください。
_ip link set dev eth0 up
_
ネットワークケーブルが接続されていると仮定すると、リンクはすぐに確立され、_NO CARRIER
_フラグが消えます。そうでない場合は、ハードウェア(またはドライバー)に問題がある可能性があります。