On Thu, Feb 7, 2019 at 3:44 AM Peter Kjellerstedt <peter.kjellerst...@axis.com> wrote: > > > -----Original Message----- > > From: openembedded-core-boun...@lists.openembedded.org <openembedded- > > core-boun...@lists.openembedded.org> On Behalf Of Khem Raj > > Sent: den 7 februari 2019 01:36 > > To: openembedded-core@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@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.k...@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 > -- _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core