Re: lockf in installworld -- not a good idea

From: Ruslan Ermilov <ru_at_FreeBSD.org>
Date: Fri, 29 Sep 2006 17:43:32 +0400
On Fri, Sep 29, 2006 at 02:20:06PM +0100, Robert Watson wrote:
> 
> >revision 1.72
> >date: 2005/11/03 08:56:39;  author: ru;  state: Exp;  lines: +1 -0
> >Serialize access to the info/dir file; needed for parallel installs.
> >
> >Reported by:    scottl
> >
> >I'm not very fond of using the non-standard lockf(1) here, but I
> >have no better idea at the moment.  NetBSD uses ln(1) to create a
> >lock file, but this approach can result in a deadlock if make is
> >interrupted, leaving an orphaned lock file.
> 
> I'm not sure why this suddenly showed up in my configuration, but this is 
> preventing me from installing world on an NFS mounted file system without 
> rpc.lockd running.  I get the following:
> 
> ===> lib/libcom_err/doc (install)
> lockf -k /usr/share/info/dir  install-info --quiet  
> --defsection="Programming &
> development tools."  --defentry="* libcom_err: (com_err).        A Common 
> Error
> Description Library for UNIX."  com_err.info /usr/share/info/dir
> lockf: cannot open /usr/share/info/dir: Operation not supported
> *** Error code 73
> 
> Stop in /zoo/rwatson/netperf/RELENG_6/src/lib/libcom_err/doc.
> *** Error code 1
> 
> Stop in /zoo/rwatson/netperf/RELENG_6/src/lib/libcom_err.
> *** Error code 1
> 
The necessity to run rpc.lockd is documented in the build(7)
manpage.  Quote:

: installworld     Install everything built by a preceding buildworld step
:                  into the directory hierarchy pointed to by make(1) vari-
:                  able DESTDIR.
: 
:                  If installing onto an NFS file system, make sure that
:                  rpc.lockd(8) is running on both client and server.  See
:                  rc.conf(5) on how to make it start at boot time.

> I've noticed an increasing intolerance in our tools for system install and 
> maintenance to locking not being implemented over the past few years.  I no 
> longer get working cron on boxes with neither rpc.lockd nor local locking 
> enabled, for example.  Installworld represents a bigger problem, since I 
> don't want to have to depend on a completely working rpc chain in order to 
> installworld, nor depend on running in what would effectively be multiuser 
> mode.  Surely there's a better fix for this than adding lockf use?
> 
I don't know of a better fix.  Another approach is that mentioned
in the commit log and used by NetBSD.  I tried it, and it was very
fragile -- it could easily leave the temporary file around, and
that would stuck forever another instances.

The problem at hand is that multiple instances of install-info(1)
are attempting to write to the ${DESTDIR}/usr/share/info/dir file.
If you have a better idea, don't hesitate to let me know.  I'd
very much like to get rid of that as well.


Cheers,
-- 
Ruslan Ermilov
ru_at_FreeBSD.org
FreeBSD committer

Received on Fri Sep 29 2006 - 11:46:28 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:00 UTC