From fb7c682180a1b7666bcdd5af820ac969c2c871f4 Mon Sep 17 00:00:00 2001 From: Andrew Jeddeloh Date: Fri, 3 Nov 2017 15:25:56 -0700 Subject: [PATCH 1/3] sys-apps/portage: import upstream ebuild 2.3.8 This is the newest stable ebuild. It has support for changing binpkg compression methods. --- .../coreos-overlay/sys-apps/portage/Manifest | 1 + .../sys-apps/portage/portage-2.3.8.ebuild | 250 ++++++++++++++++++ 2 files changed, 251 insertions(+) create mode 100644 sdk_container/src/third_party/coreos-overlay/sys-apps/portage/portage-2.3.8.ebuild diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/portage/Manifest b/sdk_container/src/third_party/coreos-overlay/sys-apps/portage/Manifest index 55b977defc..b81dc8cf27 100644 --- a/sdk_container/src/third_party/coreos-overlay/sys-apps/portage/Manifest +++ b/sdk_container/src/third_party/coreos-overlay/sys-apps/portage/Manifest @@ -1,2 +1,3 @@ DIST portage-2.2.28.tar.bz2 969138 SHA256 da8148a1a9275c87f535679e41b1bb3a1380ba0f903b80510017517e4c5229d0 SHA512 d21bf7e7dcc0a779a13df6a959e5d4291492fce2a5525b67e9a4705888021f9c08b8d78cd32b2eb930ac5428c40383e4e46da5a7b1ed5c9c9c42314c0f1c6a0b WHIRLPOOL 1b9584b0243b46c70d0778aad57df2d3ea99e19f243280e542c29e6fed0634b72de6b203a3c296c2977d1a6e5e5250b910574176c692d2c7c27c0938528bb43d DIST portage-2.3.3.tar.bz2 920984 SHA256 beec3923e14fb98d9992ede0b7718df594c50f366c3e58c2f0ba10102e77271f SHA512 7dec90a980ce6bb1266bb9c9c9979bc6cb8bdb4f37d8908c78cddf053979aef44424be86ea1fe16a072f6ed21b26233df84f6dd22d6f0c9435816090c675b53c WHIRLPOOL cc4a7e63b797766cc99ab712902b96e38fe22a482d7eeb3e29843a6070f6601b8bbe9c435b0a9c3cc1947e49c23291f1064f3d01c010d822dcb2686a103b4c3d +DIST portage-2.3.8.tar.bz2 938062 SHA256 19b73658dca848d215c5527d1d020c8106352007a84d7675e5efd0a7b9b48a8a SHA512 4b4b2de20323799b9b0f7a8812f939aa9a96d2744a0f65ad5287ba49744c491b55169cdb21f2885317a6a7c960d2070775ffd798f247b44eebc677c33c271eb8 WHIRLPOOL 0c576bbd8aaf8b27fa1746c863ac02b2a5f361d9011d17250ffbe4b830a8a6bf10a0aee48b5181a8aa6c55d8ad81ad411195da2a6253e9b324d3c7397053fe29 diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/portage/portage-2.3.8.ebuild b/sdk_container/src/third_party/coreos-overlay/sys-apps/portage/portage-2.3.8.ebuild new file mode 100644 index 0000000000..1269aa43bf --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/sys-apps/portage/portage-2.3.8.ebuild @@ -0,0 +1,250 @@ +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI=5 + +PYTHON_COMPAT=( + pypy + python3_4 python3_5 python3_6 + python2_7 +) +PYTHON_REQ_USE='bzip2(+),threads(+)' + +inherit distutils-r1 + +DESCRIPTION="Portage is the package management and distribution system for Gentoo" +HOMEPAGE="https://wiki.gentoo.org/wiki/Project:Portage" + +LICENSE="GPL-2" +KEYWORDS="alpha amd64 arm ~arm64 hppa ia64 ~m68k ~mips ppc ppc64 ~s390 ~sh sparc x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd" +SLOT="0" +IUSE="build doc epydoc +ipc linguas_ru +native-extensions selinux xattr" + +DEPEND="!build? ( $(python_gen_impl_dep 'ssl(+)') ) + >=app-arch/tar-1.27 + dev-lang/python-exec:2 + >=sys-apps/sed-4.0.5 sys-devel/patch + doc? ( app-text/xmlto ~app-text/docbook-xml-dtd-4.4 ) + epydoc? ( >=dev-python/epydoc-2.0[$(python_gen_usedep 'python2*')] )" +# Require sandbox-2.2 for bug #288863. +# For xattr, we can spawn getfattr and setfattr from sys-apps/attr, but that's +# quite slow, so it's not considered in the dependencies as an alternative to +# to python-3.3 / pyxattr. Also, xattr support is only tested with Linux, so +# for now, don't pull in xattr deps for other kernels. +# For whirlpool hash, require python[ssl] (bug #425046). +# For compgen, require bash[readline] (bug #445576). +RDEPEND=" + >=app-arch/tar-1.27 + dev-lang/python-exec:2 + !build? ( + >=sys-apps/sed-4.0.5 + app-shells/bash:0[readline] + >=app-admin/eselect-1.2 + ) + elibc_FreeBSD? ( sys-freebsd/freebsd-bin ) + elibc_glibc? ( >=sys-apps/sandbox-2.2 ) + elibc_musl? ( >=sys-apps/sandbox-2.2 ) + elibc_uclibc? ( >=sys-apps/sandbox-2.2 ) + >=app-misc/pax-utils-0.1.17 + selinux? ( >=sys-libs/libselinux-2.0.94[python,${PYTHON_USEDEP}] ) + xattr? ( kernel_linux? ( + >=sys-apps/install-xattr-0.3 + $(python_gen_cond_dep 'dev-python/pyxattr[${PYTHON_USEDEP}]' \ + python2_7 pypy) + ) ) + !> \ + setup.cfg || die + fi + + if ! use ipc ; then + einfo "Disabling ipc..." + sed -e "s:_enable_ipc_daemon = True:_enable_ipc_daemon = False:" \ + -i pym/_emerge/AbstractEbuildProcess.py || \ + die "failed to patch AbstractEbuildProcess.py" + fi + + if use xattr && use kernel_linux ; then + einfo "Adding FEATURES=xattr to make.globals ..." + echo -e '\nFEATURES="${FEATURES} xattr"' >> cnf/make.globals \ + || die "failed to append to make.globals" + fi + + if [[ -n ${EPREFIX} ]] ; then + einfo "Setting portage.const.EPREFIX ..." + sed -e "s|^\(SANDBOX_BINARY[[:space:]]*=[[:space:]]*\"\)\(/usr/bin/sandbox\"\)|\\1${EPREFIX}\\2|" \ + -e "s|^\(FAKEROOT_BINARY[[:space:]]*=[[:space:]]*\"\)\(/usr/bin/fakeroot\"\)|\\1${EPREFIX}\\2|" \ + -e "s|^\(BASH_BINARY[[:space:]]*=[[:space:]]*\"\)\(/bin/bash\"\)|\\1${EPREFIX}\\2|" \ + -e "s|^\(MOVE_BINARY[[:space:]]*=[[:space:]]*\"\)\(/bin/mv\"\)|\\1${EPREFIX}\\2|" \ + -e "s|^\(PRELINK_BINARY[[:space:]]*=[[:space:]]*\"\)\(/usr/sbin/prelink\"\)|\\1${EPREFIX}\\2|" \ + -e "s|^\(EPREFIX[[:space:]]*=[[:space:]]*\"\).*|\\1${EPREFIX}\"|" \ + -i pym/portage/const.py || \ + die "Failed to patch portage.const.EPREFIX" + + einfo "Prefixing shebangs ..." + while read -r -d $'\0' ; do + local shebang=$(head -n1 "$REPLY") + if [[ ${shebang} == "#!"* && ! ${shebang} == "#!${EPREFIX}/"* ]] ; then + sed -i -e "1s:.*:#!${EPREFIX}${shebang:2}:" "$REPLY" || \ + die "sed failed" + fi + done < <(find . -type f -print0) + + einfo "Adjusting make.globals ..." + sed -e "s|\(/usr/portage\)|${EPREFIX}\\1|" \ + -e "s|^\(PORTAGE_TMPDIR=\"\)\(/var/tmp\"\)|\\1${EPREFIX}\\2|" \ + -i cnf/make.globals || die "sed failed" + + einfo "Adjusting repos.conf ..." + sed -e "s|^\(location = \)\(/usr/portage\)|\\1${EPREFIX}\\2|" \ + -i cnf/repos.conf || die "sed failed" + if prefix-guest ; then + sed -e "s|^\(main-repo = \).*|\\1gentoo_prefix|" \ + -e "s|^\\[gentoo\\]|[gentoo_prefix]|" \ + -e "s|^\(sync-uri = \).*|\\1rsync://rsync.prefix.bitzolder.nl/gentoo-portage-prefix|" \ + -i cnf/repos.conf || die "sed failed" + fi + + einfo "Adding FEATURES=force-prefix to make.globals ..." + echo -e '\nFEATURES="${FEATURES} force-prefix"' >> cnf/make.globals \ + || die "failed to append to make.globals" + fi + + cd "${S}/cnf" || die + if [ -f "make.conf.example.${ARCH}".diff ]; then + patch make.conf.example "make.conf.example.${ARCH}".diff || \ + die "Failed to patch make.conf.example" + else + eerror "" + eerror "Portage does not have an arch-specific configuration for this arch." + eerror "Please notify the arch maintainer about this issue. Using generic." + eerror "" + fi +} + +python_compile_all() { + local targets=() + use doc && targets+=( docbook ) + use epydoc && targets+=( epydoc ) + + if [[ ${targets[@]} ]]; then + esetup.py "${targets[@]}" + fi +} + +python_test() { + esetup.py test +} + +python_install() { + # Install sbin scripts to bindir for python-exec linking + # they will be relocated in pkg_preinst() + distutils-r1_python_install \ + --system-prefix="${EPREFIX}/usr" \ + --bindir="$(python_get_scriptdir)" \ + --docdir="${EPREFIX}/usr/share/doc/${PF}" \ + --htmldir="${EPREFIX}/usr/share/doc/${PF}/html" \ + --portage-bindir="${EPREFIX}/usr/lib/portage/${EPYTHON}" \ + --sbindir="$(python_get_scriptdir)" \ + --sysconfdir="${EPREFIX}/etc" \ + "${@}" +} + +python_install_all() { + distutils-r1_python_install_all + + local targets=() + use doc && targets+=( install_docbook ) + use epydoc && targets+=( install_epydoc ) + + # install docs + if [[ ${targets[@]} ]]; then + esetup.py "${targets[@]}" + fi + + # Due to distutils/python-exec limitations + # these must be installed to /usr/bin. + local sbin_relocations='archive-conf dispatch-conf emaint env-update etc-update fixpackages regenworld' + einfo "Moving admin scripts to the correct directory" + dodir /usr/sbin + for target in ${sbin_relocations}; do + einfo "Moving /usr/bin/${target} to /usr/sbin/${target}" + mv "${ED}usr/bin/${target}" "${ED}usr/sbin/${target}" || die "sbin scripts move failed!" + done +} + +pkg_preinst() { + # comment out sanity test until it is fixed to work + # with the new PORTAGE_PYM_PATH + #if [[ $ROOT == / ]] ; then + ## Run some minimal tests as a sanity check. + #local test_runner=$(find "${ED}" -name runTests) + #if [[ -n $test_runner && -x $test_runner ]] ; then + #einfo "Running preinst sanity tests..." + #"$test_runner" || die "preinst sanity tests failed" + #fi + #fi + + # elog dir must exist to avoid logrotate error for bug #415911. + # This code runs in preinst in order to bypass the mapping of + # portage:portage to root:root which happens after src_install. + keepdir /var/log/portage/elog + # This is allowed to fail if the user/group are invalid for prefix users. + if chown portage:portage "${ED}"var/log/portage{,/elog} 2>/dev/null ; then + chmod g+s,ug+rwx "${ED}"var/log/portage{,/elog} + fi + + if has_version ">=${CATEGORY}/${PN}-2.3.1" && \ + has_version "<${CATEGORY}/${PN}-2.3.3"; then + SYNC_DEPTH_UPGRADE=true + else + SYNC_DEPTH_UPGRADE=false + fi +} + +pkg_postinst() { + if ${SYNC_DEPTH_UPGRADE}; then + ewarn "Please note that this release no longer respects sync-depth for" + ewarn "git repositories. There have been too many problems and" + ewarn "performance issues. See bugs 552814, 559008" + fi + einfo "" + einfo "This release of portage NO LONGER contains the repoman code base." + einfo "Repoman has its own ebuild and release package." + einfo "For repoman functionality please emerge app-portage/repoman" + einfo "Please report any bugs you may encounter." + einfo "" +} From 3561c7d78059b1a063d9058b8a9ba5085ba1c135 Mon Sep 17 00:00:00 2001 From: David Michael Date: Thu, 13 Apr 2017 12:46:17 -0700 Subject: [PATCH 2/3] sys-apps/portage: apply CoreOS changes to 2.3.8 Update patch for portage 2.3.8 --- ...ry-config.py-add-disabled-attribute-.patch | 47 +++++++++++++++++++ .../sys-apps/portage/portage-2.3.8.ebuild | 14 +++++- 2 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 sdk_container/src/third_party/coreos-overlay/sys-apps/portage/files/portage-2.3.8-0001-portage-repository-config.py-add-disabled-attribute-.patch diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/portage/files/portage-2.3.8-0001-portage-repository-config.py-add-disabled-attribute-.patch b/sdk_container/src/third_party/coreos-overlay/sys-apps/portage/files/portage-2.3.8-0001-portage-repository-config.py-add-disabled-attribute-.patch new file mode 100644 index 0000000000..0a0122cbc9 --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/sys-apps/portage/files/portage-2.3.8-0001-portage-repository-config.py-add-disabled-attribute-.patch @@ -0,0 +1,47 @@ +From 1b8ccc0e487a523aa6d974b3ebe26548ad6502b6 Mon Sep 17 00:00:00 2001 +From: Alex Crawford +Date: Mon, 14 Apr 2014 12:43:56 -0700 +Subject: [PATCH 1/4] portage/repository/config.py: add disabled attribute to + repos.conf + +This flag allows a repos.conf file to disable a previously-defined repository. + +Updated 03-Nov-17 for portage 2.3.8 +--- +diff --git a/pym/portage/repository/config.py b/pym/portage/repository/config.py +index b65ed97ce..f3e2f112b 100644 +--- a/pym/portage/repository/config.py ++++ b/pym/portage/repository/config.py +@@ -76,7 +76,7 @@ class RepoConfig(object): + + __slots__ = ('aliases', 'allow_missing_manifest', 'allow_provide_virtual', + 'auto_sync', 'cache_formats', 'clone_depth', +- 'create_manifest', 'disable_manifest', ++ 'create_manifest', 'disable_manifest', 'disabled', + 'eapi', 'eclass_db', 'eclass_locations', 'eclass_overrides', + 'find_invalid_path_char', 'force', 'format', 'local_config', 'location', + 'main_repo', 'manifest_hashes', 'masters', 'missing_repo_name', +@@ -198,6 +198,11 @@ class RepoConfig(object): + location = None + self.location = location + ++ disabled = repo_opts.get('disabled') ++ if disabled is not None: ++ disabled = disabled.strip().lower() == 'true' ++ self.disabled = disabled or False ++ + missing = True + self.name = name + if self.location is not None: +@@ -651,7 +656,10 @@ class RepoConfigLoader(object): + # Do this before expanding aliases, so that location_map and + # treemap consistently map unaliased names whenever available. + for repo_name, repo in list(prepos.items()): +- if repo.location is None: ++ if repo.disabled: ++ del prepos[repo_name] ++ continue ++ elif repo.location is None: + if repo_name != 'DEFAULT': + # Skip this warning for repoman (bug #474578). + if settings.local_config and paths: diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/portage/portage-2.3.8.ebuild b/sdk_container/src/third_party/coreos-overlay/sys-apps/portage/portage-2.3.8.ebuild index 1269aa43bf..f1fb822cda 100644 --- a/sdk_container/src/third_party/coreos-overlay/sys-apps/portage/portage-2.3.8.ebuild +++ b/sdk_container/src/third_party/coreos-overlay/sys-apps/portage/portage-2.3.8.ebuild @@ -16,7 +16,7 @@ DESCRIPTION="Portage is the package management and distribution system for Gento HOMEPAGE="https://wiki.gentoo.org/wiki/Project:Portage" LICENSE="GPL-2" -KEYWORDS="alpha amd64 arm ~arm64 hppa ia64 ~m68k ~mips ppc ppc64 ~s390 ~sh sparc x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd" +KEYWORDS="alpha amd64 arm arm64 hppa ia64 ~m68k ~mips ppc ppc64 ~s390 ~sh sparc x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd" SLOT="0" IUSE="build doc epydoc +ipc linguas_ru +native-extensions selinux xattr" @@ -78,6 +78,15 @@ TARBALL_PV=${PV} SRC_URI="mirror://gentoo/${PN}-${TARBALL_PV}.tar.bz2 $(prefix_src_archives ${PN}-${TARBALL_PV}.tar.bz2)" +PATCHES=( + # upstream bug: https://bugs.gentoo.org/507284 + "${FILESDIR}/${PN}-2.3.8-0001-portage-repository-config.py-add-disabled-attribute-.patch" + # upstream bug: https://bugs.gentoo.org/490014 + "${FILESDIR}/${PN}-2.2.18-0002-environment-Filter-EROOT-for-all-EAPIs.patch" + # upstream bug: + "${FILESDIR}/${PN}-2.2.18-0003-depgraph-ensure-slot-rebuilds-happen-in-the-correct-.patch" +) + pkg_setup() { use epydoc && DISTUTILS_ALL_SUBPHASE_IMPLS=( python2.7 ) } @@ -85,6 +94,9 @@ pkg_setup() { python_prepare_all() { distutils-r1_python_prepare_all + # CoreOS does not use the gentoo repo, silence oodles of errors about it: + echo "# no defaults, configuration is in /etc" > cnf/repos.conf + if use native-extensions; then printf "[build_ext]\nportage-ext-modules=true\n" >> \ setup.cfg || die From c16e853471356d992b7fdf86259e9d5cbfe79e08 Mon Sep 17 00:00:00 2001 From: Andrew Jeddeloh Date: Tue, 7 Nov 2017 11:23:39 -0800 Subject: [PATCH 3/3] sys-apps/portage: backport compression fixes Portage did not strip the xpak trailer off .tbz2 files, which caused it to fail when using compression methods other than bzip. Backport the fixes for this. --- ....8-0002-backport-decompression-fixes.patch | 42 +++++++++++++++++++ .../sys-apps/portage/portage-2.3.8.ebuild | 2 + 2 files changed, 44 insertions(+) create mode 100644 sdk_container/src/third_party/coreos-overlay/sys-apps/portage/files/portage-2.3.8-0002-backport-decompression-fixes.patch diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/portage/files/portage-2.3.8-0002-backport-decompression-fixes.patch b/sdk_container/src/third_party/coreos-overlay/sys-apps/portage/files/portage-2.3.8-0002-backport-decompression-fixes.patch new file mode 100644 index 0000000000..ab51430792 --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/sys-apps/portage/files/portage-2.3.8-0002-backport-decompression-fixes.patch @@ -0,0 +1,42 @@ +diff --git a/pym/_emerge/BinpkgExtractorAsync.py b/pym/_emerge/BinpkgExtractorAsync.py +index e85f4ecac..07ba2a1b7 100644 +--- a/pym/_emerge/BinpkgExtractorAsync.py ++++ b/pym/_emerge/BinpkgExtractorAsync.py +@@ -74,21 +74,27 @@ class BinpkgExtractorAsync(SpawnProcess): + self._async_wait() + return + +- # Add -q to decomp_cmd opts, in order to avoid "trailing garbage +- # after EOF ignored" warning messages due to xpak trailer. ++ pkg_xpak = portage.xpak.tbz2(self.pkg_path) ++ pkg_xpak.scan() ++ + # SIGPIPE handling (128 + SIGPIPE) should be compatible with + # assert_sigpipe_ok() that's used by the ebuild unpack() helper. + self.args = [self._shell_binary, "-c", +- ("%s -cq -- %s | tar -xp %s -C %s -f - ; " + \ +- "p=(${PIPESTATUS[@]}) ; " + \ +- "if [[ ${p[0]} != 0 && ${p[0]} != %d ]] ; then " % (128 + signal.SIGPIPE) + \ +- "echo bzip2 failed with status ${p[0]} ; exit ${p[0]} ; fi ; " + \ +- "if [ ${p[1]} != 0 ] ; then " + \ +- "echo tar failed with status ${p[1]} ; exit ${p[1]} ; fi ; " + \ ++ ("cmd0=(head -c-%d -- %s) cmd1=(%s) cmd2=(tar -xp %s -C %s -f -); " + \ ++ '"${cmd0[@]}" | "${cmd1[@]}" | "${cmd2[@]}"; ' + \ ++ "p=(${PIPESTATUS[@]}) ; for i in {0..2}; do " + \ ++ "if [[ ${p[$i]} != 0 && ${p[$i]} != %d ]] ; then " + \ ++ "echo command $(eval \"echo \\\"'\\${cmd$i[*]}'\\\"\") " + \ ++ "failed with status ${p[$i]} ; exit ${p[$i]} ; fi ; done; " + \ ++ "if [ ${p[$i]} != 0 ] ; then " + \ ++ "echo command $(eval \"echo \\\"'\\${cmd$i[*]}'\\\"\") " + \ ++ "failed with status ${p[$i]} ; exit ${p[$i]} ; fi ; " + \ + "exit 0 ;") % \ +- (decomp_cmd, ++ (pkg_xpak.xpaksize, + portage._shell_quote(self.pkg_path), ++ decomp_cmd, + tar_options, +- portage._shell_quote(self.image_dir))] ++ portage._shell_quote(self.image_dir), ++ 128 + signal.SIGPIPE)] + + SpawnProcess._start(self) diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/portage/portage-2.3.8.ebuild b/sdk_container/src/third_party/coreos-overlay/sys-apps/portage/portage-2.3.8.ebuild index f1fb822cda..dfc7c873c7 100644 --- a/sdk_container/src/third_party/coreos-overlay/sys-apps/portage/portage-2.3.8.ebuild +++ b/sdk_container/src/third_party/coreos-overlay/sys-apps/portage/portage-2.3.8.ebuild @@ -79,6 +79,8 @@ SRC_URI="mirror://gentoo/${PN}-${TARBALL_PV}.tar.bz2 $(prefix_src_archives ${PN}-${TARBALL_PV}.tar.bz2)" PATCHES=( + # fixed upstream in 2.3.12 and up. Backports upstream commits b4b0e6b0aa and 26c0a0e31b. + "${FILESDIR}/${PN}-2.3.8-0002-backport-decompression-fixes.patch" # upstream bug: https://bugs.gentoo.org/507284 "${FILESDIR}/${PN}-2.3.8-0001-portage-repository-config.py-add-disabled-attribute-.patch" # upstream bug: https://bugs.gentoo.org/490014