On 4/12/12 10:36 AM, Steve Sakoman wrote:
On Thu, Apr 12, 2012 at 6:39 AM, Steve Sakoman<sako...@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


_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core

Reply via email to