Bug 1888017

Summary: Systemd unit starts on boot even with a Requires to a non-existent service
Product: Red Hat Enterprise Linux 8 Reporter: Tim Rozet <trozet>
Component: systemdAssignee: systemd-maint
Status: CLOSED NEXTRELEASE QA Contact: Frantisek Sumsal <fsumsal>
Severity: urgent Docs Contact:
Priority: unspecified    
Version: 8.2CC: anrussel, dtardon, msekleta, systemd-maint-list
Target Milestone: rcKeywords: Bugfix, Reopened, Reproducer, Triaged
Target Release: 8.0   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2023-06-01 09:46:04 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Tim Rozet 2020-10-13 19:56:30 UTC
Description of problem:
When creating a unit that Requires a non-existent unit, the service will start on boot. Take ovs-configuration.service as an example:

sh-4.4#  cat /etc/systemd/system/ovs-configuration.service 
[Unit]
Description=Configures OVS with proper host networking configuration
# Removal of this file signals firstboot completion
ConditionPathExists=!/etc/ignition-machine-config-encapsulated.json
# This service is used to move a physical NIC into OVS and reconfigure OVS to use the host IP
Requires=openvswitch.service
Wants=NetworkManager-wait-online.service
After=NetworkManager-wait-online.service openvswitch.service network.service
Before=network-online.target kubelet.service crio.service node-valid-hostname.service

[Service]
# Need oneshot to delay kubelet
Type=oneshot
ExecStart=/usr/local/bin/configure-ovs.sh OpenShiftSDN
StandardOutput=journal+console
StandardError=journal+console

[Install]
WantedBy=network-online.target

In this case, the ovs-configuration.service requires openvswitch.service. When openvswitch is not installed, issuing a systemctl start ovs-configuration.service refuses to start (as expected). However, on reboot we see:

Oct 13 05:41:57 ip-10-0-55-205.us-east-2.compute.internal systemd[1]: Cannot add dependency job for unit ovs-configuration.service, ignoring: Unit not found.
Oct 13 05:42:04 ip-10-0-55-205.us-east-2.compute.internal systemd[1]: ovs-configuration.service: main process exited, code=exited, status=127/n/a
Oct 13 05:42:04 ip-10-0-55-205.us-east-2.compute.internal systemd[1]: Unit ovs-configuration.service entered failed state.
Oct 13 05:42:04 ip-10-0-55-205.us-east-2.compute.internal systemd[1]: ovs-configuration.service failed

^The service executed anyway. This looks very similar to 

https://github.com/systemd/systemd/issues/11338

Version-Release number of selected component (if applicable):
Seen in RHEL 7.8:
sh-4.2# rpm -qa | grep systemd
systemd-libs-219-78.el7.x86_64
systemd-sysv-219-78.el7.x86_64
systemd-219-78.el7.x86_64

and RHEL 8.2:
sh-4.4# rpm -qa | grep systemd
systemd-pam-239-31.el8_2.2.x86_64
clevis-systemd-11-9.el8_2.1.x86_64
systemd-239-31.el8_2.2.x86_64
systemd-libs-239-31.el8_2.2.x86_64
systemd-journal-remote-239-31.el8_2.2.x86_64
systemd-udev-239-31.el8_2.2.x86_64


How reproducible:
Everytime.

Steps to Reproduce:
1. Create a service with a Requires on a non existent service.
2. Enable the service and reboot.


Actual results:
Service will have executed even though it's required unit is not present.

Expected results:
Service should not start.

Additional info:

Comment 2 RHEL Program Management 2022-04-13 07:27:33 UTC
After evaluating this issue, there are no plans to address it further or fix it in an upcoming release.  Therefore, it is being closed.  If plans change such that this issue will be fixed in an upcoming release, then the bug can be reopened.

Comment 9 Michal Sekletar 2023-06-01 09:46:04 UTC
This is now fixed upstream by https://github.com/systemd/systemd/pull/27852. However, we are not going to backport this into RHEL-8 unless there is a pressing customer need.