W dniu wto, 30.01.2018 o godzinie 14∶10 -0800, użytkownik Zac Medico
napisał:
> On 01/30/2018 11:02 AM, Michał Górny wrote:
> > Warn about empty directories installed to /var in install-qa-check phase
> > (that were not "filled" using keepdir), to help developers stop relying
> > upon Portage preserving them. Those directories are rather unlikely to
> > be false positives.
> > 
> > Furthermore, remove all the empty directories if FEATURES=strict-keepdir
> > is used to catch even more problems (intended for developers). Here
> > warnings are not really suitable since there will be a high number
> > of false positives.
> > 
> > The PMS specifies the behavior upon merging empty directories
> > as undefined, and specifically prohibits ebuilds from attempting
> > to install empty directories. However, ebuilds occasionally still fall
> > into the trap of relying on 'dodir' preserving the directory. Make
> > the Portage behavior more strict in order to prevent that.
> > 
> > [v4: now with LC_COLLATE=C for sorting]
> > ---
> >  bin/install-qa-check.d/95empty-dirs | 42 
> > +++++++++++++++++++++++++++++++++++++
> >  man/make.conf.5                     |  4 ++++
> >  pym/portage/const.py                |  1 +
> >  3 files changed, 47 insertions(+)
> >  create mode 100644 bin/install-qa-check.d/95empty-dirs
> > 
> > diff --git a/bin/install-qa-check.d/95empty-dirs 
> > b/bin/install-qa-check.d/95empty-dirs
> > new file mode 100644
> > index 000000000..8599db395
> > --- /dev/null
> > +++ b/bin/install-qa-check.d/95empty-dirs
> > @@ -0,0 +1,42 @@
> > +# Warn about and/or remove empty directories installed by ebuild.
> > +
> > +# Rationale: PMS prohibits ebuilds from installing empty directories.
> > +# Cleaning them up from the installation image provides an easy way
> > +# to make sure that ebuilds are not relying on it while making it easy
> > +# for users to override this if they need to.
> > +#
> > +# The ebuilds that need to preserve empty directories should use keepdir
> > +# as documented e.g.:
> > +# 
> > https://devmanual.gentoo.org/function-reference/install-functions/index.html
> > +#
> > +# For now, we emit QA warnings for empty directories in /var.
> > +# Additionally, if FEATURES=strict-keepdir is enabled we explicitly
> > +# remove *all* empty directories to trigger breakage.
> > +
> > +find_empty_dirs() {
> > +   local warn_dirs=()
> > +   local d striparg=
> > +
> > +   [[ ${FEATURES} == *strict-keepdir* ]] && striparg=-delete
> > +
> > +   while IFS= read -r -d $'\0' d; do
> > +           [[ ${d} == ${ED%/}/var/* ]] && warn_dirs+=( "${d}" )
> > +   done < <(find "${ED}" -depth -mindepth 1 -type d -empty -print0 
> > ${striparg} | LC_COLLATE=C sort -z)
> > +
> > +   if [[ ${warn_dirs[@]} ]]; then
> > +           eqawarn "One or more empty directories installed to /var:"
> > +           eqawarn
> > +           for d in "${warn_dirs[@]}"; do
> > +                   eqawarn "  ${d#${ED%/}}"
> > +           done
> > +           eqawarn
> > +           eqawarn "If those directories need to be preserved, please make 
> > sure to create"
> > +           eqawarn "or mark them for keeping using 'keepdir'. Future 
> > versions of Portage"
> > +           eqawarn "will strip empty directories from installation image."
> > +   fi
> > +}
> > +
> > +find_empty_dirs
> > +: # guarantee successful exit
> > +
> > +# vim:ft=sh
> > diff --git a/man/make.conf.5 b/man/make.conf.5
> > index a81b497bd..cb0f00237 100644
> > --- a/man/make.conf.5
> > +++ b/man/make.conf.5
> > @@ -623,6 +623,10 @@ see \fBinstallsources\fR.
> >  Have portage react strongly to conditions that have the potential to be
> >  dangerous (like missing or incorrect digests for ebuilds).
> >  .TP
> > +.B strict-keepdir
> > +Have portage strictly require keepdir calls in ebuilds.  Empty
> > +directories installed without explicit keepdir will be removed.
> > +.TP
> >  .B stricter
> >  Have portage react strongly to conditions that may conflict with system
> >  security provisions (for example textrels, executable stack).  Read about
> > diff --git a/pym/portage/const.py b/pym/portage/const.py
> > index e5fa4b67c..655be82b1 100644
> > --- a/pym/portage/const.py
> > +++ b/pym/portage/const.py
> > @@ -184,6 +184,7 @@ SUPPORTED_FEATURES       = frozenset([
> >     "split-elog",
> >     "split-log",
> >     "strict",
> > +   "strict-keepdir",
> >     "stricter",
> >     "suidctl",
> >     "test",
> > 
> 
> Looks good, please merge.

Merged, thanks.
-- 
Best regards,
Michał Górny


Reply via email to