Subject: bug#26809: closed (Re: bug#26809: 08/09: services: nscd: Create /etc/resolv.conf if it does not exist.)

From: [email-masked] (GNU bug Tracking System)
Date: Mon, 08 May 2017 14:31:03 +0000

Your bug report

#26809: 08/09: services: nscd: Create /etc/resolv.conf if it does not exist.

which was filed against the guix package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
26809: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=26809
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#26809: 08/09: services: nscd: Create /etc/resolv.conf if it does not exist.
From: [email-masked] (Ludovic Courtès)
To: Mark H Weaver <[email-masked]>
Cc: [email-masked]
Date: Mon, 08 May 2017 16:30:06 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Mark H Weaver <[email-masked]> skribis:

> [email-masked] (Ludovic Courtès) writes:
>
>> civodul pushed a commit to branch master
>> in repository guix.
>>
>> commit 49f9d7f697d19870f01104cdb6a90a32aea87679
>> Author: Ludovic Courtès <[email-masked]>
>> Date:   Tue May 2 12:21:31 2017 +0200
>>
>>     services: nscd: Create /etc/resolv.conf if it does not exist.
>>     
>>     * gnu/services/base.scm (nscd-activation): Create /etc/resolv.conf if it
>>     does not exist yet.
>
> This commit broke the boot process on my system.  The problem is that
> I'm using Network Manager, which makes /etc/resolv.conf into a symlink
> that points to /var/run/NetworkManager/resolv.conf.  Since /var/run is
> cleaned during early boot, when this new activation code runs,
> /etc/resolv.conf is a broken symlink.
>
> I guess that 'file-exists?' returns #false for a broken symlink, and the
> 'call-with-output-file' tries to open the target of the symlink, which
> fails.

Indeed.  I guess this is fixed by
c298fb133acbdc17e05a79c10ab9a9e214368264.

Thanks,
Ludo’.

Subject: Re: 08/09: services: nscd: Create /etc/resolv.conf if it does not exist.
From: Mark H Weaver <[email-masked]>
To: Ludovic Courtès <[email-masked]>
Cc: [email-masked]
Date: Sun, 07 May 2017 00:19:33 -0400
List-Id: <debbugs-submit.debbugs.gnu.org>

[email-masked] (Ludovic Courtès) writes:

> civodul pushed a commit to branch master
> in repository guix.
>
> commit 49f9d7f697d19870f01104cdb6a90a32aea87679
> Author: Ludovic Courtès <[email-masked]>
> Date:   Tue May 2 12:21:31 2017 +0200
>
>     services: nscd: Create /etc/resolv.conf if it does not exist.
>     
>     * gnu/services/base.scm (nscd-activation): Create /etc/resolv.conf if it
>     does not exist yet.

This commit broke the boot process on my system.  The problem is that
I'm using Network Manager, which makes /etc/resolv.conf into a symlink
that points to /var/run/NetworkManager/resolv.conf.  Since /var/run is
cleaned during early boot, when this new activation code runs,
/etc/resolv.conf is a broken symlink.

I guess that 'file-exists?' returns #false for a broken symlink, and the
'call-with-output-file' tries to open the target of the symlink, which
fails.

       Mark

> diff --git a/gnu/services/base.scm b/gnu/services/base.scm
> index 67972bf..a64faa0 100644
> --- a/gnu/services/base.scm
> +++ b/gnu/services/base.scm
> @@ -1149,7 +1149,14 @@ the tty to run, among other things."
>    #~(begin
>        (use-modules (guix build utils))
>        (mkdir-p "/var/run/nscd")
> -      (mkdir-p "/var/db/nscd")))                  ;for the persistent cache
> +      (mkdir-p "/var/db/nscd")                    ;for the persistent cache
> +
> +      ;; In libc 2.25 nscd uses inotify to watch /etc/resolv.conf, but only if
> +      ;; that file exists when it is started.  Thus create it here.
> +      (unless (file-exists? "/etc/resolv.conf")
> +        (call-with-output-file "/etc/resolv.conf"
> +          (lambda (port)
> +            (display "# This is a placeholder.\n" port))))))
>  
>  (define nscd-service-type
>    (service-type (name 'nscd)