From: Mark Hatle <mark.hatle@windriver.com>
To: Steve Sakoman <sakoman@gmail.com>
Cc: Patches and discussions about the oe-core layer
<openembedded-core@lists.openembedded.org>
Subject: Re: [PATCH] package_rpm: Fix useradd preinst ordering issues
Date: Thu, 12 Apr 2012 10:46:26 -0500 [thread overview]
Message-ID: <4F86F8D2.2050402@windriver.com> (raw)
In-Reply-To: <CAGDS+nntS5YWw0U8wSJYBdgdhnaGsnLr71F6SdMFECoMsCVHRw@mail.gmail.com>
On 4/12/12 10:36 AM, Steve Sakoman wrote:
> On Thu, Apr 12, 2012 at 6:39 AM, Steve Sakoman<sakoman@gmail.com> wrote:
That is very odd, the system is supposed to identify all of the dependencies
needed for the first set of packages... (the three base-passwd, base-files and
shadow).
The end result is a list of 10-12 binaries to be installed that meet those
requirements, as well as the original three requested packages.
We also shouldn't specify bash because busybox provides /bin/sh in a lot of
configurations.
Which image did you try to build and I'll see what I can replicate here.
--Mark
>> FWIW, after pulling current poky this morning all of my image builds
>> are failing with errors like this:
>>
>> | Installing base dependencies first (base-passwd, base-files and
>> shadow) since rpm is special
>> | error: Failed dependencies:
>> | /bin/sh is needed by base-passwd-3.5.24-r0.armv7a
>> | /bin/sh is needed by shadow-4.1.4.3-r8.armv7a
>> | /bin/sh is needed by libgcc1-4.6.3+svnr184847-r24.armv7a
>> | /bin/sh is needed by libc6-2.13-r23+svnr15508.armv7a
>>
>> I'll investigate, but since it is late in the release process thought
>> I would mention the issue.
>
> I have no idea if this is the proper fix, but adding bash to the list
> of packages to install first fixed the issue for me:
>
> diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass
> index fd00fb1..a5f0b06 100644
> --- a/meta/classes/package_rpm.bbclass
> +++ b/meta/classes/package_rpm.bbclass
> @@ -475,7 +475,8 @@ EOF
> echo "Skipping pre install due to exisitng image"
> else
> echo "# Initial Install manifest">
> ${target_rootfs}/install/initial_install.manifest
> - echo "Installing base dependencies first (base-passwd,
> base-files and shadow) since rpm is special"
> + echo "Installing base dependencies first (bash,
> base-passwd, base-files and shadow) since rpm is special"
> + grep /bash-[0-9]
> ${target_rootfs}/install/total_solution.manifest>>
> ${target_rootfs}/install/initial_install.manife
> grep /base-passwd-[0-9]
> ${target_rootfs}/install/total_solution.manifest>>
> ${target_rootfs}/install/initial_install
> grep /base-files-[0-9]
> ${target_rootfs}/install/total_solution.manifest>>
> ${target_rootfs}/install/initial_install.
> grep /shadow-[0-9]
> ${target_rootfs}/install/total_solution.manifest>>
> ${target_rootfs}/install/initial_install.mani
>
> I'm concerned we are on a slippery slope here!
>
> Steve
>
>
>>>> diff --git a/meta/classes/package_rpm.bbclass
>>>> b/meta/classes/package_rpm.bbclass
>>>> index 16a2c87..1b0f6f2 100644
>>>> --- a/meta/classes/package_rpm.bbclass
>>>> +++ b/meta/classes/package_rpm.bbclass
>>>> @@ -166,22 +167,23 @@ rpm_common_comand () {
>>>> # install or remove the pkg
>>>> rpm_update_pkg () {
>>>>
>>>> + manifest=$1
>>>> + btmanifest=$manifest.bt
>>>> local target_rootfs="${INSTALL_ROOTFS_RPM}"
>>>>
>>>> # Save the rpm's build time for incremental image generation, and the
>>>> file
>>>> # would be moved to ${T}
>>>> - rm -f ${target_rootfs}/install/total_solution_bt.manifest
>>>> - for i in `cat ${target_rootfs}/install/total_solution.manifest`; do
>>>> + rm -f $btmanifest
>>>> + for i in `cat $manifest`; do
>>>> # Use "rpm" rather than "${RPM}" here, since we don't need the
>>>> # '--dbpath' option
>>>> - echo "$i `rpm -qp --qf '%{BUILDTIME}\n' $i`">> \
>>>> - ${target_rootfs}/install/total_solution_bt.manifest
>>>> + echo "$i `rpm -qp --qf '%{BUILDTIME}\n' $i`">> $btmanifest
>>>> done
>>>>
>>>> # Only install the different pkgs if incremental image generation is
>>>> set
>>>> if [ "${INC_RPM_IMAGE_GEN}" = "1" -a -f
>>>> ${T}/total_solution_bt.manifest -a \
>>>> "${IMAGE_PKGTYPE}" = "rpm" ]; then
>>>> - cur_list="${target_rootfs}/install/total_solution_bt.manifest"
>>>> + cur_list="$btmanifest"
>>>> pre_list="${T}/total_solution_bt.manifest"
>>>> sort -u $cur_list -o $cur_list
>>>> sort -u $pre_list -o $pre_list
>>>> @@ -203,8 +205,7 @@ rpm_update_pkg () {
>>>> -Uvh ${target_rootfs}/install/incremental.manifest
>>>> else
>>>> # Attempt to install
>>>> - rpm_common_comand --replacepkgs \
>>>> - -Uhv ${target_rootfs}/install/total_solution.manifest
>>>> + rpm_common_comand --replacepkgs -Uhv $manifest
>>>> fi
>>>> }
>>>>
>>>> @@ -440,14 +441,7 @@ package_install_internal_rpm () {
>>>>
>>>> fi
>>>>
>>>> - # If base-passwd or shadow are in the list of packages to install,
>>>> - # ensure they are installed first to support later packages that
>>>> - # may create custom users/groups (fixes Yocto bug #2127)
>>>> - infile=${target_rootfs}/install/install_solution.manifest
>>>> - outfile=${target_rootfs}/install/total_solution.manifest
>>>> - cat $infile | grep /base-passwd-[0-9]> $outfile || true
>>>> - cat $infile | grep /shadow-[0-9]>> $outfile || true
>>>> - cat $infile | grep -v /shadow-[0-9] | grep -v /base-passwd-[0-9]>>
>>>> $outfile || true
>>>> + cat ${target_rootfs}/install/install_solution.manifest>
>>>> ${target_rootfs}/install/total_solution.manifest
>>>> cat ${target_rootfs}/install/install_multilib_solution.manifest>>
>>>> ${target_rootfs}/install/total_solution.manifest
>>>>
>>>> # Construct install scriptlet wrapper
>>>> @@ -474,8 +468,45 @@ EOF
>>>>
>>>> chmod 0755 ${WORKDIR}/scriptlet_wrapper
>>>>
>>>> - rpm_update_pkg
>>>> + # RPM is special. It can't handle dependencies and preinstall
>>>> scripts correctly. Its
>>>> + # probably a feature. The only way to convince rpm to actually run
>>>> the preinstall scripts
>>>> + # for base-passwd and shadow first before installing packages that
>>>> depend on these packages
>>>> + # is to do two image installs, installing one set of packages,
>>>> then the other.
>>>> + if [ "${INC_RPM_IMAGE_GEN}" = "1" -a -f
>>>> ${T}/total_solution_bt.manifest ]; then
>>>> + echo "Skipping pre install due to exisitng image"
>>>> + else
>>>> + echo "# Intial Install manifest">
>>>> ${target_rootfs}/install/initial_install.manifest
>>>> + echo "Installing base dependencies first (base-passwd,
>>>> base-files and shadow) since rpm is special"
>>>> + grep /base-passwd-[0-9]
>>>> ${target_rootfs}/install/total_solution.manifest>>
>>>> ${target_rootfs}/install/initial_install.manifest || true
>>>> + grep /base-files-[0-9]
>>>> ${target_rootfs}/install/total_solution.manifest>>
>>>> ${target_rootfs}/install/initial_install.manifest || true
>>>> + grep /shadow-[0-9]
>>>> ${target_rootfs}/install/total_solution.manifest>>
>>>> ${target_rootfs}/install/initial_install.manifest || true
>>>> +
>>>> + # Generate an install solution by doing a --justdb
>>>> install, then recreate it with
>>>> + # an actual package install!
>>>> + mkdir -p ${target_rootfs}/initial
>>>> +
>>>> + ${RPM} --predefine "_rpmds_sysinfo_path
>>>> ${target_rootfs}/etc/rpm/sysinfo" \
>>>> + --predefine "_rpmrc_platform_path
>>>> ${target_rootfs}/etc/rpm/platform" \
>>>> + -D "_dbpath ${target_rootfs}/initial" -D "`cat
>>>> ${confbase}-base_archs.macro`" \
>>>> + -D "__dbi_txn create nofsync" \
>>>> + -U --justdb --noscripts --notriggers
>>>> --noparentdirs --nolinktos --ignoresize \
>>>> + ${target_rootfs}/install/initial_install.manifest
>>>> +
>>>> + ${RPM} -D "_dbpath ${target_rootfs}/initial" -qa --yaml \
>>>> + -D "__dbi_txn create nofsync private" \
>>>> + | grep -i 'Packageorigin' | cut -d : -f 2>
>>>> ${target_rootfs}/install/initial_solution.manifest
>>>> +
>>>> + rpm_update_pkg
>>>> ${target_rootfs}/install/initial_solution.manifest
>>>> +
>>>> + grep -Fv -f
>>>> ${target_rootfs}/install/initial_solution.manifest
>>>> ${target_rootfs}/install/total_solution.manifest>
>>>> ${target_rootfs}/install/total_solution.manifest.new
>>>> + mv ${target_rootfs}/install/total_solution.manifest.new
>>>> ${target_rootfs}/install/total_solution.manifest
>>>> +
>>>> + rm -rf ${target_rootfs}/initial
>>>> + fi
>>>> +
>>>> + echo "Installing main solution manifest
>>>> (${target_rootfs}/install/total_solution.manifest)"
>>>>
>>>> + rpm_update_pkg ${target_rootfs}/install/total_solution.manifest
>>>> }
>>>>
>>>> python write_specfile () {
>>>>
>>>
>>>
>>> _______________________________________________
>>> Openembedded-core mailing list
>>> Openembedded-core@lists.openembedded.org
>>> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core
next prev parent reply other threads:[~2012-04-12 15:55 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-04-11 21:31 [PATCH] package_rpm: Fix useradd preinst ordering issues Richard Purdie
2012-04-11 21:42 ` Mark Hatle
2012-04-12 13:39 ` Steve Sakoman
2012-04-12 15:36 ` Steve Sakoman
2012-04-12 15:46 ` Mark Hatle [this message]
2012-04-12 15:55 ` Steve Sakoman
2012-04-12 16:08 ` Richard Purdie
2012-04-12 17:06 ` Steve Sakoman
2012-04-12 17:11 ` Mark Hatle
2012-04-12 16:37 ` Mark Hatle
2012-04-12 16:47 ` Steve Sakoman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4F86F8D2.2050402@windriver.com \
--to=mark.hatle@windriver.com \
--cc=openembedded-core@lists.openembedded.org \
--cc=sakoman@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.