Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 29 Mar 2010 09:10:54 +0000
From:      Florent Thoumie <flz@xbsd.org>
To:        Matthias Andree <matthias.andree@gmx.de>
Cc:        FreeBSD Ports <ports@freebsd.org>, Garrett Cooper <yanefbsd@gmail.com>
Subject:   Re: [RFC] deprecate @exec and @unexec in plists in favor of  pre-install and post-install scripts
Message-ID:  <a01628141003290210w45432af9o57a8a045d0bb92cb@mail.gmail.com>
In-Reply-To: <op.vabkfdrt1e62zd@merlin.emma.line.org>
References:  <7d6fde3d1003272314r25305a39mce9893e07453ef90@mail.gmail.com>  <op.vabkfdrt1e62zd@merlin.emma.line.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Mar 29, 2010 at 7:58 AM, Matthias Andree <matthias.andree@gmx.de> w=
rote:
> Am 28.03.2010, 08:14 Uhr, schrieb Garrett Cooper:
>
>> Hi,
>> =A0 =A0As part of taking a look at the differences in our implementation
>> of pkg_install(1) in order to afford an improvement over the existing
>> code, I've looked at various implementations of pkg_install, one being
>> NetBSD's evolution [1]. It's several years ahead from our's and while
>> I don't believe that all of the complexity is desired, there's a lot
>> of good lessons to be learned from this. One of which is that they
>> replaced the @exec and @unexec calls with string pre-install //
>> post-install and pre-deinstall // post-deinstall scripts. I think that
>> this potentially is a good step forward because it takes some of the
>> guts out of the +CONTENTS files and places it in [bourne shell]
>> scripts, which are easier to maintain and potentially understand.
>> =A0 =A0I realize that some of the loss would be that one couldn't simply
>> specify things like %f, %D, %F, etc with @exec and @unexec, but that
>> seems a small price to pay for tuning everything a bit more. On the
>> plus side too, that means that one could use an extensive set of
>> shell, etc libraries that would avoid code duplication like what's
>> present in the +CONTENTS files. This is one of the small observations
>> I made after starting on work which would modify 1k python ports to
>> not install the byte-compiled or optimized files (side topic that we
>> can talk about in another thread if desired).
>> Thoughts?
>
> Hi Garrett,
>
> I'm not so sure what the advantage would be. For trivial
> pre-post-(de)install tasks, why use a separate script? It's less concise
> than reading everything in pkg-plist.
>
> WRT variables, I'm not so concerned about %D %F etc, but I am concerned
> about the necessity to add script boilerplate (such as snatching pre-post=
 or
> deinstall-install modes, prefix), and while I haven't thoroughly audited =
the
> install scripts in ports, I see lots of bad shell scripts around. These
> would need rigorous audits (in adverse conditions, such as paths containi=
ng
> blanks and shell meta characters to unveil underquoted
> parameters/variables).
>
> Also, this effort alone isn't any help in reducing code duplication, as i=
n
> my perception the duplication is between Makefile (for port install) and
> pkg-plist/pkg-install (for packages). There often is some line similar to
>
> =A0${SETENV} PKG_PREFIX=3D"${PREFIX}" ${SH} ${PKGINSTALL} ${PKGNAME}
> POST-INSTALL
>
> in the ports' Makefiles (post-install or whereever appropriate).
>
> Also, this would need excellent documentation. RPM on Linux is similarly
> flexible, but is severely underdocumented (at least RPM v3 and v4 on
> openSUSE Linux are). If it does any _undocumented_ magic, I don't want it=
.
> :)
>
> So, before we think about it and harrass hundreds of ports maintainers, w=
e'd
> need the shell script library in place to make it a selling point for
> actually using install scripts; at that point we can re-think about movin=
g
> stuff out of pkg-plist into pkg-install scripts. At the *same* time (so t=
hat
> only one edit cycle is needed for affected ports - and I'd suggest a surv=
ey
> to see how many, hundreds probably), we should consider making
> Mk/bsd.port.mk call the install scripts automatically (needs changes to
> hundreds of ports again) in pre-install, post-install and related stages.

I mentioned getting rid of those pesky @*exec lines a few years ago,
but this was met by quite a lot of objection.

I still think it would be a good change, assuming that we provide
equivalent (or better) features:

- Configuration files should be marked and automatically dealt with by
the infrastructure, not by esoteric commands.
- Subroutines for shell scripts should be provided along with
pkg_install, or be installed by a third party port (users/groups
creation comes to mind).
- Scripts should be automatically picked up as you mentioned. We're
trying to shove most targets in pkg-install, but it probably would be
best to split it (preinstall, postinstall, predeinstall,
postdeinstall). Good thing is, this doesn't require any change in
pkg_install since it's already supported.

One of the added bonus is that some code that appears both in Makefile
and pkg-plist will only be in preinstall/postinstall scripts.

--=20
Florent Thoumie
flz@FreeBSD.org
FreeBSD Committer



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