[OE-core] [PATCH 1/1] opkg svn: respect to the arch priority
Martin Jansa
martin.jansa at gmail.com
Fri Sep 21 10:50:46 UTC 2012
On Tue, Sep 18, 2012 at 11:25:10PM +0800, Robert Yang wrote:
> This is for fixing the problem:
> 1) bitbake core-image-sato-sdk with MACHINE=qemux86
> 2) bitbake core-image-sato with with MACHINE=crownbay
>
> The qemux86's PACKAGE_ARCH is i586, the crownbay's is core2, but several
> i586 packages will be installed into crownbay's rootfs though there are
> core2 packages. For example, there are:
>
> xserver-xorg*_1.11.2-r7_i586.ipk
> xserver-xorg*_1.9.3-r1_core2.ipk
>
> The crownbay.conf says:
> PREFERRED_VERSION_xserver-xorg ?= "1.9.3"
>
> What the crownbay's image needs is xserver-xorg*_1.9.3-r1_core2.ipk, but
> the xserver-xorg*_1.11.2-r7_i586.ipk will be installed, this is
> incorrect.
>
> This is caused by opkg's selecting mechanism: when more than one
> candidate is found, it will use the higher version one and ignore the
> arch priority.
>
> we have several conf files which set the PREFERRED_VERSION_pkg = "..." ,
> but there is no such a mechanism which can let us tell the opkg to
> install the preferred version. When the preferred version is higher,
> this is OK, but if the preferred version is lower, there would be
> problems:
>
> 1) Most of the packages are core2 in the image, but several of them are
> i586, though we have built the core2 ones, this seems strange.
>
> 2) What's worse is that the image may not work since the preferred
> version pkg is not installed.
>
> We have set the arch priority clearly in the opkg.conf, I think that
> respect to the arch priority is reasonable during the image generation.
>
> Add the "--select-higher-version" option to let the user have another
> choice, the default is no.
Can you send this upstream to see what they think about this issue?
Thanks
Cheers,
>
> [YOCTO #2575]
>
> Signed-off-by: Robert Yang <liezhi.yang at windriver.com>
> ---
> .../opkg/opkg/select_higher_version.patch | 102 ++++++++++++++++++++
> meta/recipes-devtools/opkg/opkg_svn.bb | 3 +-
> 2 files changed, 104 insertions(+), 1 deletions(-)
> create mode 100644 meta/recipes-devtools/opkg/opkg/select_higher_version.patch
>
> diff --git a/meta/recipes-devtools/opkg/opkg/select_higher_version.patch b/meta/recipes-devtools/opkg/opkg/select_higher_version.patch
> new file mode 100644
> index 0000000..46d11b0
> --- /dev/null
> +++ b/meta/recipes-devtools/opkg/opkg/select_higher_version.patch
> @@ -0,0 +1,102 @@
> +Add the --select-higher-version option
> +
> +If there were more than one candidate which had the same pkg name in the
> +candidate list, for example, the same pkg with different versions, then
> +it would use the last one which was the highest version one in the past,
> +but it will use the higher arch priority one now.
> +
> +Add the "--select-higher-version" option to let it use the higher
> +version package when enabled. the default is no.
> +
> +Upstream-Status: Pending
> +
> +Signed-off-by: Robert Yang <liezhi.yang at windriver.com>
> +---
> + libopkg/opkg_conf.h | 1 +
> + libopkg/pkg_hash.c | 18 +++++++++++++++---
> + src/opkg-cl.c | 9 +++++++++
> + 3 files changed, 25 insertions(+), 3 deletions(-)
> +
> +diff --git a/libopkg/opkg_conf.h b/libopkg/opkg_conf.h
> +--- a/libopkg/opkg_conf.h
> ++++ b/libopkg/opkg_conf.h
> +@@ -77,6 +77,7 @@ struct opkg_conf
> + int force_removal_of_essential_packages;
> + int force_postinstall;
> + int force_remove;
> ++ int select_higher_version;
> + int check_signature;
> + int nodeps; /* do not follow dependencies */
> + char *offline_root;
> +diff --git a/libopkg/pkg_hash.c b/libopkg/pkg_hash.c
> +--- a/libopkg/pkg_hash.c
> ++++ b/libopkg/pkg_hash.c
> +@@ -376,10 +376,22 @@ pkg_hash_fetch_best_installation_candidate(abstract_pkg_t *apkg,
> + if (constraint_fcn(matching, cdata)) {
> + opkg_msg(DEBUG, "Candidate: %s %s.\n",
> + matching->name, matching->version) ;
> +- good_pkg_by_name = matching;
> + /* It has been provided by hand, so it is what user want */
> +- if (matching->provided_by_hand == 1)
> +- break;
> ++ if (matching->provided_by_hand == 1) {
> ++ good_pkg_by_name = matching;
> ++ break;
> ++ }
> ++ /* Respect to the arch priorities when given alternatives */
> ++ if (good_pkg_by_name && !conf->select_higher_version) {
> ++ if (matching->arch_priority >= good_pkg_by_name->arch_priority) {
> ++ good_pkg_by_name = matching;
> ++ opkg_msg(DEBUG, "%s %s wins by priority.\n",
> ++ matching->name, matching->version) ;
> ++ } else
> ++ opkg_msg(DEBUG, "%s %s wins by priority.\n",
> ++ good_pkg_by_name->name, good_pkg_by_name->version) ;
> ++ } else
> ++ good_pkg_by_name = matching;
> + }
> + }
> +
> +diff --git a/src/opkg-cl.c b/src/opkg-cl.c
> +--- a/src/opkg-cl.c
> ++++ b/src/opkg-cl.c
> +@@ -42,6 +42,7 @@ enum {
> + ARGS_OPT_FORCE_SPACE,
> + ARGS_OPT_FORCE_POSTINSTALL,
> + ARGS_OPT_FORCE_REMOVE,
> ++ ARGS_OPT_SELECT_HIGHER_VERSION,
> + ARGS_OPT_ADD_ARCH,
> + ARGS_OPT_ADD_DEST,
> + ARGS_OPT_NOACTION,
> +@@ -83,6 +84,8 @@ static struct option long_options[] = {
> + {"force_postinstall", 0, 0, ARGS_OPT_FORCE_POSTINSTALL},
> + {"force-remove", 0, 0, ARGS_OPT_FORCE_REMOVE},
> + {"force_remove", 0, 0, ARGS_OPT_FORCE_REMOVE},
> ++ {"select-higher-version", 0, 0, ARGS_OPT_SELECT_HIGHER_VERSION},
> ++ {"select_higher_version", 0, 0, ARGS_OPT_SELECT_HIGHER_VERSION},
> + {"noaction", 0, 0, ARGS_OPT_NOACTION},
> + {"download-only", 0, 0, ARGS_OPT_DOWNLOAD_ONLY},
> + {"nodeps", 0, 0, ARGS_OPT_NODEPS},
> +@@ -173,6 +176,9 @@ args_parse(int argc, char *argv[])
> + case ARGS_OPT_FORCE_REMOVE:
> + conf->force_remove = 1;
> + break;
> ++ case ARGS_OPT_SELECT_HIGHER_VERSION:
> ++ conf->select_higher_version = 1;
> ++ break;
> + case ARGS_OPT_NODEPS:
> + conf->nodeps = 1;
> + break;
> +@@ -271,6 +277,9 @@ usage()
> + printf("\t--offline-root <dir> offline installation of packages.\n");
> + printf("\t--add-arch <arch>:<prio> Register architecture with given priority\n");
> + printf("\t--add-dest <name>:<path> Register destination with given path\n");
> ++ printf("\t--select-higher-version\t Use the higher version package rather\n");
> ++ printf("\t than the higher arch priority one if more\n");
> ++ printf("\t than one candidate is found.\n");
> +
> + printf("\nForce Options:\n");
> + printf("\t--force-depends Install/remove despite failed dependencies\n");
> +--
> +1.7.1
> +
> diff --git a/meta/recipes-devtools/opkg/opkg_svn.bb b/meta/recipes-devtools/opkg/opkg_svn.bb
> index 4146b7e..e21bcd5 100644
> --- a/meta/recipes-devtools/opkg/opkg_svn.bb
> +++ b/meta/recipes-devtools/opkg/opkg_svn.bb
> @@ -7,6 +7,7 @@ SRC_URI = "svn://opkg.googlecode.com/svn;module=trunk;protocol=http \
> file://offline_postinstall.patch\
> file://track_parents.patch \
> file://conf_override.patch \
> + file://select_higher_version.patch \
> "
>
> S = "${WORKDIR}/trunk"
> @@ -14,4 +15,4 @@ S = "${WORKDIR}/trunk"
> SRCREV = "633"
> PV = "0.1.8+svnr${SRCPV}"
>
> -PR = "${INC_PR}.2"
> +PR = "${INC_PR}.3"
> --
> 1.7.1
>
>
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core at lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core
--
Martin 'JaMa' Jansa jabber: Martin.Jansa at gmail.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20120921/ab0a3eca/attachment-0002.sig>
More information about the Openembedded-core
mailing list