Re: Fedora 33 System-Wide Change proposal: systemd-resolved

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mi, 15.04.20 09:01, Daniel J Walsh (dwalsh@xxxxxxxxxx) wrote:

> > I didn't consider cases where systemd is not running because Fedora
> > hasn't supported booting without systemd in about a decade. But I
> > guess the problem here is for containers where systemd is not running
> > inside the container, but is running on the host system? I hadn't
> > considered this scenario. What do Ubuntu containers do? I guess those
> > are not all broken. :)
> >
> > _______________________________________________
> > devel mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxx
> > To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxx
> > Fedora Code of Conduct:
> > https://docs.fedoraproject.org/en-US/project/code-of-conduct/
> > List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
> > List Archives:
> > https://lists.fedoraproject.org/archives/list/devel@xxxxxxxxxxxxxxxxxxxxxxx
>
> We can change container engines (podman, Buildah, CRI-O) to handle this
> but they need to have a location of a properly configured resolv.conf
> file, somewhere on the system to be used without systemd.

My suggestion for those container managers: if /etc/resolv.conf is a
regular file, always use that as copy source. If it is a symlinkt to
/run/systemd/resolve/stub-resolv.conf or
/run/systemd/resolve/resolv.conf then use
/run/systemd/resolve/resolv.conf as copy source.

Yes, I mean that, even if /run/systemd/resolve/stub-resolv.conf is the
symlink destination use the file without "stub-" in the name as copy
source. Because that file always contains the literal upstream DNS
servers, and does not redirect DNS traffic to 127.0.0.53 like the file
with "-stub" in the name does. Since containers are typically run
inside their own network namespace it's wise to use the upstream DNS
servers directly, instead of trying to the DNS forwarder called
resolved on localhost that is likely not going to be there in a netns
container.

The algorithm above in C-ish pseudo-code:

for (;;) {
        fd = open("/etc/resolv.conf", O_RDONLY|O_CLOEXEC|O_NOFOLLOW);
        if (fd >= 0)
                break; /* success! it's a regular file */
        if (errno != ELOOP)
                break; /* failure! something unexpected */

        /* It's a symlink */
        r = readlink("/etc/resolv.conf", &dest);
        if (r < 0) {
                if (errno == EINVAL)
                        continue; /* Oh, it's not a symlink anymore?
                                     somebody must just have replace
                                     the file, let's try again  */

                /* failure! some unexpected error */
                break;
        }

        /* Check where the symlink points. Check by absolute and by
           relative paths, just in case. If this points to any of the
           three files provided by systemd-resolved, use the one that
           encodes upstream DNS info */
        if (strcmp(dest, "/run/systemd/resolve/stub-resolv.conf") == 0 ||
            strcmp(dest, "../run/systemd/resolve/stub-resolv.conf") == 0 ||
            strcmp(dest, "/run/systemd/resolve/resolv.conf") == 0 ||
            strcmp(dest, "../run/systemd/resolve/resolv.conf") == 0 ||
            strcmp(dest, "/usr/lib/systemd/resolv.conf") == 0 ||
            strcmp(dest, "../usr/lib/systemd/resolv.conf") == 0)) {

            fd = open("/run/systemd/resolve/resolv.conf", O_RDONLY|O_CLOEXEC);
        else
            fd = open("/run/systemd/resolve/resolv.conf", O_RDONLY|O_CLOEXEC);

        break;
}

You get the idea: use O_LOOP to check if it's a symlink and then use
readlink() to see if the file points to something managed by resolved.

Lennart

--
Lennart Poettering, Berlin
_______________________________________________
devel mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxx
To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxx
Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: https://lists.fedoraproject.org/archives/list/devel@xxxxxxxxxxxxxxxxxxxxxxx




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Fedora Announce]     [Fedora Users]     [Fedora Kernel]     [Fedora Testing]     [Fedora Formulas]     [Fedora PHP Devel]     [Kernel Development]     [Fedora Legacy]     [Fedora Maintainers]     [Fedora Desktop]     [PAM]     [Red Hat Development]     [Gimp]     [Yosemite News]

  Powered by Linux