From 0b9dbbbca43862c66944627cd40febc3eebd4e02 Mon Sep 17 00:00:00 2001 From: Fabio Erculiani Date: Tue, 1 Oct 2013 13:24:55 +0200 Subject: [PATCH] [sys-apps/entropy] revbump, backport patches from master --- sys-apps/entropy/entropy-216-r1.ebuild | 118 +++++++++++++++++ ..._kernel_dependency_to_pkg-rewrite-to.patch | 122 ++++++++++++++++++ 2 files changed, 240 insertions(+) create mode 100644 sys-apps/entropy/entropy-216-r1.ebuild create mode 100644 sys-apps/entropy/files/0001-entropy.spm-_add_kernel_dependency_to_pkg-rewrite-to.patch diff --git a/sys-apps/entropy/entropy-216-r1.ebuild b/sys-apps/entropy/entropy-216-r1.ebuild new file mode 100644 index 000000000..0254dd009 --- /dev/null +++ b/sys-apps/entropy/entropy-216-r1.ebuild @@ -0,0 +1,118 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=5 + +PYTHON_COMPAT=( python2_7 ) +PYTHON_REQ_USE="sqlite" + +inherit eutils python-single-r1 user + +DESCRIPTION="Entropy Package Manager foundation library" +HOMEPAGE="http://www.sabayon.org" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~amd64 ~arm ~ia64 ~ppc ~ppc64 ~x86" + +IUSE="" +SRC_URI="mirror://sabayon/${CATEGORY}/${P}.tar.bz2" + +RDEPEND="dev-db/sqlite:3[soundex(+)] + net-misc/rsync + sys-apps/diffutils + sys-apps/sandbox + >=sys-apps/portage-2.1.9[${PYTHON_USEDEP}] + sys-devel/gettext + ${PYTHON_DEPS}" +DEPEND="${RDEPEND} + dev-util/intltool" + +REQUIRED_USE="${PYTHON_REQUIRED_USE}" + +S="${S}/lib" + +REPO_CONFPATH="${ROOT}/etc/entropy/repositories.conf" +REPO_D_CONFPATH="${ROOT}/etc/entropy/repositories.conf.d" +ENTROPY_CACHEDIR="${ROOT}/var/lib/entropy/caches" + +pkg_setup() { + python-single-r1_pkg_setup + # Can: + # - update repos + # - update security advisories + # - handle on-disk cache (atm) + enewgroup entropy || die "failed to create entropy group" + # Create unprivileged entropy user + enewgroup entropy-nopriv || die "failed to create entropy-nopriv group" + enewuser entropy-nopriv -1 -1 -1 entropy-nopriv || die "failed to create entropy-nopriv user" +} + +src_prepare() { + default + + # Backport patches + epatch "${FILESDIR}"/0001-entropy.spm-_add_kernel_dependency_to_pkg-rewrite-to.patch +} + +src_install() { + emake DESTDIR="${D}" LIBDIR="usr/lib" install || die "make install failed" + + python_optimize "${D}/usr/lib/entropy/lib/entropy" +} + +pkg_postinst() { + for ex_conf in "${REPO_D_CONFPATH}"/_entropy_sabayon-limbo.example; do + real_conf="${ex_conf%.example}" + if [ -f "${real_conf}" ] || [ -f "${real_conf/_}" ]; then + # skip installation then + continue + fi + elog "Installing: ${real_conf}" + cp "${ex_conf}" "${real_conf}" -p + done + + # Copy config file over + if [ -f "${REPO_CONFPATH}.example" ] && [ ! -f "${REPO_CONFPATH}" ]; then + elog "Copying ${REPO_CONFPATH}.example over to ${REPO_CONFPATH}" + cp "${REPO_CONFPATH}.example" "${REPO_CONFPATH}" -p + fi + + if [ -d "${ENTROPY_CACHEDIR}" ]; then + einfo "Purging current Entropy cache" + rm -rf "${ENTROPY_CACHEDIR}"/* + fi + + # Fixup Entropy Resources Lock, and /etc/entropy/packages + # files permissions. This fixes unprivileged Entropy Library usage + local res_file="${ROOT}"/var/lib/entropy/client/database/*/.using_resources + if [ -f "${res_file}" ]; then + chown root:entropy "${res_file}" + chmod g+rw "${res_file}" + chmod o+r "${res_file}" + fi + local pkg_files="package.mask package.unmask package.mask.d package.unmask.d" + local pkg_file + for pkg_file in ${pkg_files}; do + pkg_file="${ROOT}/etc/entropy/packages/${pkg_file}" + recursive="" + if [ -d "${pkg_file}" ]; then + recursive="-R" + fi + if [ -e "${pkg_file}" ]; then + chown ${recursive} root:entropy "${pkg_file}" + chmod ${recursive} go+r "${pkg_file}" + fi + done + + # Setup Entropy Library directories ownership + chown root:entropy "${ROOT}/var/lib/entropy" # no recursion + chown root:entropy "${ROOT}/var/lib/entropy/client/packages" # no recursion + chown root:entropy "${ROOT}/var/log/entropy" # no recursion + + echo + elog "If you want to enable Entropy packages delta download support, please" + elog "install dev-util/bsdiff." + echo +} diff --git a/sys-apps/entropy/files/0001-entropy.spm-_add_kernel_dependency_to_pkg-rewrite-to.patch b/sys-apps/entropy/files/0001-entropy.spm-_add_kernel_dependency_to_pkg-rewrite-to.patch new file mode 100644 index 000000000..df68f6404 --- /dev/null +++ b/sys-apps/entropy/files/0001-entropy.spm-_add_kernel_dependency_to_pkg-rewrite-to.patch @@ -0,0 +1,122 @@ +From 978eccc78e94e9144dc66cc7392a5120943c32d3 Mon Sep 17 00:00:00 2001 +From: Fabio Erculiani +Date: Tue, 1 Oct 2013 13:17:38 +0200 +Subject: [PATCH] [entropy.spm] _add_kernel_dependency_to_pkg, rewrite to use + /etc/kernels data + +Trying to figure out the kernel owning /lib/modules/vermagic doesn't work +in all cases. Packages like sys-kernel/spl may be returned as valid +kernel packages. Now that /etc/kernels/vermagic consolidated, it's time +to use it. +--- + .../plugins/interfaces/portage_plugin/__init__.py | 72 +++++++++++++++------- + 1 file changed, 51 insertions(+), 21 deletions(-) + +diff --git a/lib/entropy/spm/plugins/interfaces/portage_plugin/__init__.py b/lib/entropy/spm/plugins/interfaces/portage_plugin/__init__.py +index ebcf779..ae06027 100644 +--- a/lib/entropy/spm/plugins/interfaces/portage_plugin/__init__.py ++++ b/lib/entropy/spm/plugins/interfaces/portage_plugin/__init__.py +@@ -1172,6 +1172,10 @@ class PortagePlugin(SpmPlugin): + kmod_pfx = "/lib/modules" + kmox_sfx = ".ko" + ++ # these have to be kept in sync with kswitch ++ kernels_dir = "/etc/kernels" ++ release_level = "RELEASE_LEVEL" ++ + content = [x for x in pkg_data['content'] if x.startswith(kmod_pfx)] + content = [x for x in content if x.endswith(kmox_sfx)] + enc = etpConst['conf_encoding'] +@@ -1217,6 +1221,41 @@ class PortagePlugin(SpmPlugin): + + return modinfo_output.split()[0] + ++ def find_kernel(vermagic): ++ k_dirs = [] ++ try: ++ k_dirs += os.listdir(kernels_dir) ++ except (OSError, IOError): ++ pass ++ ++ k_dirs = [os.path.join(kernels_dir, x) for x in k_dirs] ++ k_dirs = [x for x in k_dirs if os.path.isdir(x)] ++ ++ for k_dir in k_dirs: ++ rl_path = os.path.join(k_dir, release_level) ++ if not os.path.lexists(rl_path): ++ # skip without trying to open() it. ++ continue ++ ++ level = None ++ try: ++ with codecs.open(rl_path, "r", encoding = enc) as rl_f: ++ level = rl_f.read(512).strip() ++ except (OSError, IOError): ++ continue ++ ++ if level != vermagic: ++ # not the vermagic we're looking for. ++ continue ++ ++ owners = self.search_paths_owners([rl_path]) ++ if not owners: ++ # wtf? ignore dependency then ++ continue ++ atom_slot = sorted(owners.keys())[0] # deterministic ++ return atom_slot # (atom, slot) tuple ++ ++ vermagic_cache = set() + for item in content: + + # read vermagic +@@ -1225,6 +1264,11 @@ class PortagePlugin(SpmPlugin): + if kern_vermagic is None: + continue + ++ if kern_vermagic in vermagic_cache: ++ # skip, already processed ++ continue ++ vermagic_cache.add(kern_vermagic) ++ + if not entropy.dep.is_valid_package_tag(kern_vermagic): + # argh! wtf, this is invalid! + continue +@@ -1235,28 +1279,14 @@ class PortagePlugin(SpmPlugin): + pkg_data['slot'] = "%s,%s" % (pkg_data['slot'], kern_vermagic,) + + # now try to guess package providing that vermagic +- possible_kernel_owned_path = os.path.join(kmod_pfx, kern_vermagic) +- owners = self.search_paths_owners([possible_kernel_owned_path]) +- owner_data = None +- k_atom = None +- for k_atom, k_slot in owners: +- k_cat, k_name, k_ver, k_rev = entropy.dep.catpkgsplit(k_atom) +- if k_cat == PortagePlugin.KERNEL_CATEGORY: +- owner_data = (k_cat, k_name, k_ver, k_rev,) +- break +- +- if owner_data is None: +- # heh, user has broken deps, who cares! +- return +- +- # yippie, kernel dep installed also for SPM. +- k_cat, k_name, k_ver, k_rev = owner_data +- if k_rev != "r0": +- k_ver += "-%s" % (k_rev,) +- if k_atom is not None: +- kern_dep_key = "=%s~-1" % (k_atom,) ++ k_atom_slot = find_kernel(kern_vermagic) ++ if k_atom_slot is None: ++ # cannot bind a kernel package to this vermagic ++ continue + +- return kern_dep_key ++ k_atom, _k_slot = k_atom_slot ++ # yippie, kernel dep installed also for SPM ++ return "=%s~-1" % (k_atom,) + + def _get_default_virtual_pkg(self, virtual_key): + defaults = self._portage.settings.getvirtuals()[virtual_key] +-- +1.8.3.2 +