| Summary: | Systemd doesn't wait for the legacy network.service to finish before starting dhcpd.service | ||
|---|---|---|---|
| Product: | [Fedora] Fedora | Reporter: | Michal Růžička <michal.ruza> |
| Component: | systemd | Assignee: | systemd-maint |
| Status: | CLOSED NOTABUG | QA Contact: | Fedora Extras Quality Assurance <extras-qa> |
| Severity: | high | Docs Contact: | |
| Priority: | unspecified | ||
| Version: | 15 | CC: | johannbg, lpoetter, metherid, notting, plautrba, systemd-maint |
| Target Milestone: | --- | ||
| Target Release: | --- | ||
| Hardware: | i686 | ||
| OS: | Linux | ||
| Whiteboard: | |||
| Fixed In Version: | Doc Type: | Bug Fix | |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | 2011-12-31 03:20:09 UTC | Type: | --- |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
By further debugging I discovered that the problem in not in systemd but rather in dhcpd. I logged a separate issue [1] for that to be able to provide more accurate description. Sorry for the noise. [1] https://bugzilla.redhat.com/show_bug.cgi?id=771009 |
Description of problem: I have a bridge interface configured and I want to run DHCP server on that interface. But the dhcpd server fails to start during boot with the following error message: No subnet declaration for br0 (no IPv4 addresses). Which means it could not find the IP address of the br0 interface. It seems that the configuration of the br0 interface performed by the legacy network.service (/etc/init.d/network) is not finished by the time dhcpd.service is started by systemd - despite me explicitly adding: Requires=network.service After=network.service to /lib/systemd/system/dhcpd.service The status of the network.service at the time the dhcpd.service is being started by systemd typically looks similar to the following: network.service - LSB: Bring up/down networking Loaded: loaded (/etc/rc.d/init.d/network) Active: activating (start) since Fri, 30 Dec 2011 22:25:08 +0100; 15s ago Control: 837 (network) CGroup: name=systemd:/system/network.service ├ 837 /bin/bash /etc/rc.d/init.d/network start ├ 1041 /bin/bash /etc/sysconfig/network-scripts/ifup-eth ... ├ 1079 /bin/bash /etc/sysconfig/network-scripts/ifup-eth ... └ 1080 /bin/bash /etc/sysconfig/network-scripts/ifup-eth ... Version-Release number of selected component (if applicable): systemd-26-13.fc15.i686 initscripts-9.30.1-1.fc15.i686 dhcp-4.2.1-11.P1.fc15.i686 How reproducible: - it fails for me invariably during boot - when I attempt to simulate the problem at any later time the dhcpd.service is successfully started, although occasionally the network.service's status at the time the dhcpd.service is being started by systemd looks similar to the following: network.service - LSB: Bring up/down networking Loaded: loaded (/etc/rc.d/init.d/network) Active: active (running) since Fri, 30 Dec 2011 23:48:19 +0100; 485ms ago Process: 3718 ExecStop=/etc/rc.d/init.d/network stop (code=exited, status=0/SUCCESS) Process: 4259 ExecStart=/etc/rc.d/init.d/network start (code=exited, status=0/SUCCESS) CGroup: name=systemd:/system/network.service ├ 4578 /bin/bash /etc/sysconfig/network-scripts/ifup-eth ... └ 4580 sleep 2 Steps to Reproduce: 1. create a bridge configuration by editing ifcfg-* files as appropriate; configure a static IP for the bridge interface, mark it for activation at boot time 2. create a dhcpd configuration including a subnet declaration for the subnet connected through the bridge interface configured in the previous step 3. add the following lines to the /lib/systemd/system/dhcpd.service: Requires=network.service After=network.service 4. systemctl enable dhcpd.service network.service 5. reboot the system Actual results: after the system finishes booting the bridge interface is configured but dhcpd is not running/listening on that interface; an error message similar to the following one can be found in the logs: No subnet declaration for br0 (no IPv4 addresses). ** Ignoring requests on br0. ... Expected results: after the system finishes booting the bridge interface is configured and dhcpd runs/listens on that interface Additional info: Note that it is possible to start the dhcpd.service at any time after the /etc/init.d/network has finished (and thus the br0 has been fully configured).