[sys-apps/entropy] revbump, backport patches from master

This commit is contained in:
Fabio Erculiani
2013-10-01 13:24:55 +02:00
parent 066983fea8
commit 0b9dbbbca4
2 changed files with 240 additions and 0 deletions
+118
View File
@@ -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
}
@@ -0,0 +1,122 @@
From 978eccc78e94e9144dc66cc7392a5120943c32d3 Mon Sep 17 00:00:00 2001
From: Fabio Erculiani <lxnay@sabayon.org>
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