[systemd-devel] The dependencies between systemd-resolved and dbus.socket

Jeremy Su os369510 at gmail.com
Mon Apr 14 14:20:08 UTC 2025


Hi Mantas,

Thank you for your reply.


Mantas Mikulėnas <grawity at gmail.com> 於 2025年4月14日 週一 下午5:58寫道:
>
> On Fri, Apr 11, 2025 at 4:14 PM Jeremy Su <os369510 at gmail.com> wrote:
>>
>> Hi,
>>
>> I meet a problem that systemd-resolved is not able to resolve the DNS.
>>
>> systemd-resolved[1237]: sd-bus: starting bus bus-api-resolve by connecting to /run/dbus/system_bus_socket...
>> systemd-resolved[1237]: Added inotify watch for /run on bus bus-api-resolve: 2
>> systemd-resolved[1237]: Added inotify watch for /run/dbus on bus bus-api-resolve: 3
>> systemd-resolved[1237]: Added inotify watch for /run/dbus/system_bus_socket on bus bus-api-resolve: -1
>> systemd-resolved[1237]: sd-bus: starting bus bus-api-resolve by connecting to /run/dbus/system_bus_socket...
>>
>> It seems to me that the systemd-resolved doesn't able to access /run/dbus/system_bus_socket. FWIU, the /run/dbus/system_bus_socket is created by dbus.socket.
>>
>> However, the dependencies seem like:
>>
>> systemd-resolved -> sysinit.target -> dbus.socket.
>>
>> according to:
>>
>> $ systemctl show dbus.socket | grep -i after
>> After=-.mount sysinit.target system.slice
>>
>> $ systemctl show systemd-resolved | grep -i before
>> Before=initrd-switch-root.target shutdown.target nss-lookup.target network.target sysinit.target
>>
>> If I set "Wants=dbus.socket" "Before=dbus.socket" in systemd-resolved, then it'll introduce circular dependency.
>
>
> It's a known issue with D-Bus being the way it is, and that's the whole purpose of the inotify watch: sd-bus is *watching for the socket to appear* so that resolved could start before the system bus does, and then connect to the bus as soon as the socket is created.

Guess it's something like socket activation?
>
> Systemd-resolved still offers services either through DNS at 127.0.0.53, or through a direct Unix socket – in current versions, libnss_resolve communicates with resolved through a direct socket instead of using the system bus, so the dependency on dbus.socket isn't as important.
>

I was checking the socket status:

NAME                                 PID PROCESS         USER
CONNECTION    UNIT                       SESSION DESCRIPTION
...
org.freedesktop.resolve1               - -               -
(activatable) -                          -       -

When I restart the systemd-resolve, it shows:

org.freedesktop.resolve1              493 systemd-resolve
systemd-resolve      :1.0          systemd-resolved.service
    -       -

Do you mean the systemd-resolved should work even if dbus.socket is not started?



-- 
Sincerely,
Jeremy Su


More information about the systemd-devel mailing list