[OE-core] [PATCH] glibc-locale: Rewrite do_install using install utility instead of cp
Khem Raj
raj.khem at gmail.com
Thu Feb 7 14:53:12 UTC 2019
On Thu, Feb 7, 2019 at 3:44 AM Peter Kjellerstedt
<peter.kjellerstedt at axis.com> wrote:
>
> > -----Original Message-----
> > From: openembedded-core-bounces at lists.openembedded.org <openembedded-
> > core-bounces at lists.openembedded.org> On Behalf Of Khem Raj
> > Sent: den 7 februari 2019 01:36
> > To: openembedded-core at lists.openembedded.org
> > Subject: [OE-core] [PATCH] glibc-locale: Rewrite do_install using
> > install utility instead of cp
> >
> > This has been a constant source of trouble for build failures due to
> > host-user-contaminated QA errors of sort
> >
> > ERROR: QA Issue: glibc-locale: /glibc-binary-localedata-ca-
> > es+valencia/usr/lib/locale/ca_ES at valencia/LC_MONETARY is owned by uid
> > 3004, which is the same as the user running bitbake. This may be due to
> > host contamination [host-user-contaminated]
> >
> > So far we have tried to mould cp command into not carrying the build
> > user permissions into install area but it is never entirely fixed since
> > the issue keeps popping up in various scenes
> >
> > This patch replaces use of cp with install utility and specifies
> > install mode for files explcitly
> >
> > Signed-off-by: Khem Raj <raj.khem at gmail.com>
> > ---
> > meta/recipes-core/glibc/glibc-locale.inc | 44 ++++++++++++++----------
> > 1 file changed, 25 insertions(+), 19 deletions(-)
> >
> > diff --git a/meta/recipes-core/glibc/glibc-locale.inc b/meta/recipes-core/glibc/glibc-locale.inc
> > index 6384f9cbf1..9b256a5108 100644
> > --- a/meta/recipes-core/glibc/glibc-locale.inc
> > +++ b/meta/recipes-core/glibc/glibc-locale.inc
> > @@ -72,27 +72,33 @@ FILES_localedef = "${bindir}/localedef"
> > LOCALETREESRC = "${COMPONENTS_DIR}/${PACKAGE_ARCH}/glibc-stash-locale"
> >
> > do_install () {
> > - mkdir -p ${D}${bindir} ${D}${datadir}
> > - if [ -n "$(ls ${LOCALETREESRC}/${bindir})" ]; then
> > - cp -R --no-dereference --preserve=mode,links ${LOCALETREESRC}/${bindir}/* ${D}${bindir}
> > - fi
> > - if [ -n "$(ls ${LOCALETREESRC}/${localedir})" ]; then
> > - mkdir -p ${D}${localedir}
> > - cp -R --no-dereference --preserve=mode,links ${LOCALETREESRC}/${localedir}/* ${D}${localedir}
> > - fi
> > + install -d ${D}${bindir}
> > + find "${LOCALETREESRC}/${bindir}" -maxdepth 1 -type f \
> > + -exec install -m 0755 -t "${D}${bindir}" {} \;
> > +
> > + for d in . $(find "${LOCALETREESRC}/${localedir}" -type d -printf '%P ') ; do
> > + install -d "${D}${localedir}/$d"
> > + find "${LOCALETREESRC}/${localedir}/$d" -maxdepth 1 -type f \
> > + -exec install -m 0644 -t "${D}${localedir}/$d" {} \;
> > + done
> > if [ ${@d.getVar('PACKAGE_NO_GCONV')} -eq 0 ]; then
> > - mkdir -p ${D}${libdir}
> > - if [ -e ${LOCALETREESRC}/${libdir}/gconv ]; then
> > - cp -R --no-dereference --preserve=mode,links ${LOCALETREESRC}/${libdir}/gconv ${D}${libdir}
> > - fi
> > - if [ -e ${LOCALETREESRC}/${datadir}/i18n ]; then
> > - cp -R --no-dereference --preserve=mode,links ${LOCALETREESRC}/${datadir}/i18n ${D}${datadir}
> > - fi
> > - fi
> > - if [ -e ${LOCALETREESRC}/${datadir}/locale ]; then
> > - cp -R --no-dereference --preserve=mode,links ${LOCALETREESRC}/${datadir}/locale ${D}${datadir}
> > + for d in . $(find "${LOCALETREESRC}/${libdir}/gconv" -type d -printf '%P ') ; do
> > + install -d "${D}${libdir}/gconv/$d"
> > + find "${LOCALETREESRC}/${libdir}/gconv/$d" -maxdepth 1 -type f \
> > + -exec install -m 0755 -t "${D}${libdir}/gconv/$d" {} \;
> > + done
> > + for d in . $(find "${LOCALETREESRC}/${datadir}/i18n" -type d -printf '%P ') ; do
> > + install -d "${D}${datadir}/i18n/$d"
> > + find "${LOCALETREESRC}/${datadir}/i18n/$d" -maxdepth 1 -type f \
> > + -exec install -m 0644 -t "${D}${datadir}/i18n/$d" {} \;
> > + done
> > fi
> > - cp -R --no-dereference --preserve=mode,links ${LOCALETREESRC}/SUPPORTED ${WORKDIR}
> > + for d in . $(find "${LOCALETREESRC}/${datadir}/locale" -type d -printf '%P ') ; do
> > + install -d "${D}${datadir}/locale/$d"
> > + find "${LOCALETREESRC}/${datadir}/locale/$d" -maxdepth 1 -type f \
> > + -exec install -m 0644 -t "${D}${datadir}/locale/$d" {} \;
> > + done
> > + install -m 0644 ${LOCALETREESRC}/SUPPORTED ${WORKDIR}/SUPPORTED
> > }
> >
> > inherit libc-package
> > --
> > 2.20.1
>
> May I suggest using a help function to simplify the code a lot:
>
> copy_locale_files() {
> local dir=$1 mode=$2
>
> [ -e "${LOCALETREESRC}$dir" ] || return 0
>
> for d in . $(find "${LOCALETREESRC}$dir" -type d -printf '%P '); do
> install -d ${D}$dir/$d
> find "${LOCALETREESRC}$dir/$d" -maxdepth 1 -type f \
> -exec install -m $mode -t "${D}$dir/$d" {} \;
> done
> }
>
> do_install() {
> copy_locale_files ${bindir} 0755
> copy_locale_files ${localedir} 0644
> if [ ${PACKAGE_NO_GCONV} -eq 0 ]; then
> copy_locale_files ${libdir}/gconv 0755
> copy_locale_files ${datadir}/i18n 0644
> fi
> copy_locale_files ${datadir}/locale 0644
> install -m 0644 ${LOCALETREESRC}/SUPPORTED ${WORKDIR}/SUPPORTED
> }
>
> The code above is untested, but I think I got it reasonably correct.
> Also note that I have restored the indentation to use tabs, and
> turned the access to the ${PACKAGE_NO_GCONV} variable into a
> simple variable instead of using d.getVar().
>
thats a neat idea. I will send a v2 with this
> //Peter
>
More information about the Openembedded-core
mailing list