Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 30 Jan 2019 13:35:01 +0000
From:      bugzilla-noreply@freebsd.org
To:        bugs@FreeBSD.org
Subject:   [Bug 235318] when updating jails using -b, freebsd-update is reusing host's /var/db/freebsd-update without indication of doing so, unless explicit -d as well
Message-ID:  <bug-235318-227@https.bugs.freebsd.org/bugzilla/>

next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D235318

            Bug ID: 235318
           Summary: when updating jails using -b, freebsd-update is
                    reusing host's /var/db/freebsd-update without
                    indication of doing so, unless explicit -d as well
           Product: Base System
           Version: 12.0-RELEASE
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Many People
          Priority: ---
         Component: bin
          Assignee: bugs@FreeBSD.org
          Reporter: eto.freebsd@ethome.sk

When updating jails from 11.2 to 12.0 I discovered following glitch:

 It seems that freebsd-update without workdir (-d) specified explicitly,
 is using host's /var/db/freebsd-update to fetch and store metadata=20
 about given jail update.

Although this makes perfect logical sense (from certain point of view), I t=
hink
this breaks a POLA a tiny bit.

I was invoking freebsd-update concurrently per two jails like this:

01 sudo \
02   jname=3D${jname}              \
03   from_version=3D11.1-RELEASE   \
04   to_version=3D12.0-RELEASE     \
05   \
06   sh -c 'exec freebsd-update \
07     -b /jails.roots/${jname} \
08     -f /jails.roots/${jname}/etc/freebsd-update.conf \
09     --currently-running ${from_version} \
10     -r ${to_version} upgrade'

Both updates failed spectacularly breaking roots of both jail and emitting
spurious errors during install phase.

I reverted jail roots from zfs snapshots and tried again several times unti=
l I
discovered that each jail:/var/db/freebsd-update is empty.=20

rming host:/var/db/freebsd-update and running jail updates again seemed to
populate only host:/var/db/freebsd-update, jail:/var/db/freebsd-update seem=
ed
to be left intact (eg. empty).

My guess became that both runs of freebsd-update write to same
host:/var/db/freebsd-update trampling each other's progress, ignoring jail's
data dir.

Re-reading manual page very carefully, I finally realized why there is -d.=
=20

It would be nice if during invocation with custom basedir, -b, (and perhaps=
 -d
,or even without -d) freebsd-update detected this invocation and emitted sh=
ort
summary akin to:
> using basedir (-b) : /bla/bla/bla
> using workdir (-d) : /ble/ble/ble
> notice: workdir is not subdir of basedir !

This would lessen any surprises.=20

One might argue that explicit basedir specification should offset workdir as
well, unless workdir is explicitly set, but that lies in the eye of beholde=
r.

Short notice would at least make operator aware what is freebsd-update goin=
g to
do.

Once root cause was found, fix was easy:

01 sudo \
02   jname=3D${jname}              \
03   from_version=3D11.1-RELEASE   \
04   to_version=3D12.0-RELEASE     \
05   \
06   sh -c 'exec freebsd-update \
07     -b /jails.roots/${jname} \
08     -d /jails.roots/${jname}/var/db/freebsd-update \
09     -f /jails.roots/${jname}/etc/freebsd-update.conf \
10     --currently-running ${from_version} \
11     -r ${to_version} upgrade'

Still, it would be nice, if freebsd-update was more friendly in this regard.

--=20
You are receiving this mail because:
You are the assignee for the bug.=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-235318-227>