On Saturday, July 31, 2021 4:56:34 PM PDT Sam James wrote:
> This adds two tmpfiles related QA checks:
> 1) Verify packages don't install tmpfiles to /etc/tmpfiles.d, which
> is a deprecated location;
> 
> 2) Check whether packages inherit tmpfiles.eclass if they're
> installing files to /usr/lib/tmpfiles.d.
> 
> (This helps to catch packages not calling tmpfiles_process
> in pkg_postinst).
> 
> Signed-off-by: Sam James <s...@gentoo.org>
> ---
>  metadata/install-qa-check.d/60tmpfiles-paths | 37 ++++++++++++++++++++
>  1 file changed, 37 insertions(+)
>  create mode 100644 metadata/install-qa-check.d/60tmpfiles-paths
> 
> diff --git a/metadata/install-qa-check.d/60tmpfiles-paths
> b/metadata/install-qa-check.d/60tmpfiles-paths new file mode 100644
> index 0000000000000..2c56c031bd1e3
> --- /dev/null
> +++ b/metadata/install-qa-check.d/60tmpfiles-paths
> @@ -0,0 +1,37 @@
> +# Copyright 2021 Gentoo Authors
> +# Distributed under the terms of the GNU General Public License v2
> +
> +# QA check: ensure that packages installing tmpfiles configuration inherit
> the eclass +# Maintainer: Sam James <s...@gentoo.org>
> +
> +# Implements two checks:
> +# 1) Installation to /etc/tmpfiles.d (which is a deprecated location);
> +# 2) Installation of any tmpfiles to /usr/lib/tmpfiles.d without inheriting
> the eclass +#    (needed for tmpfiles_process in pkg_postinst)
> +tmpfiles_check() {
> +     # Check 1
> +     # Scan image for files in /etc/tmpfiles.d which is a deprecated 
location
> +     if [[ -d "${ED}"/etc/tmpfiles.d/ ]] ; then
> +             eqawarn "QA Notice: files installed to the deprecated /etc/
tmpfiles.d
> location" +           eqawarn "tmpfiles configuration files must be 
installed to
> /usr/lib/tmpfiles.d!" +       fi
> +
> +     # Check 2
> +     # We're now going to check for whether we install files to
> /usr/lib/tmpfiles.d without + # inheriting the eclass (weak catch for
> ebuilds not calling tmpfiles_process in pkg_postinst) +
> +     # No need to carry on if we're inheriting the eclass
> +     if has tmpfiles ${INHERITED} ; then
> +             return

it can actually check if ebuild calls tmpfiles_process, not only inherit.
something like:

    local pkg_postinst_body="$(declare -fp pkg_postinst)"
    if [[ ! ${pkg_postinst_body} == *tmpfiles_process* ]]; then
        eqawarn "QA Notice: package is installing tmpfiles without calling
        eqawarn "tmpfiles_process in pkg_postinst phase"
    fi
    
ofc accounting for edge cases floppym mentioned.

> +     fi
> +
> +     if [[ -d "${ED}"/usr/lib/tmpfiles.d/ ]] ; then
> +             eqawarn "QA Notice: package is installing tmpfiles without 
inheriting
> tmpfiles.eclass!" +           eqawarn "Packages must inherit tmpfiles.eclass 
then
> call tmpfiles_process in pkg_postinst." +     fi
> +}
> +
> +tmpfiles_check
> +: # guarantee successful exit
> +
> +# vim:ft=sh


-- 
Best regards,
Georgy

Attachment: signature.asc
Description: This is a digitally signed message part.

Reply via email to