diff options
Diffstat (limited to 'sys-apps/baselayout')
-rw-r--r-- | sys-apps/baselayout/Manifest | 3 | ||||
-rw-r--r-- | sys-apps/baselayout/baselayout-2.7-r3.ebuild | 347 | ||||
-rw-r--r-- | sys-apps/baselayout/baselayout-9999.ebuild | 41 |
3 files changed, 390 insertions, 1 deletions
diff --git a/sys-apps/baselayout/Manifest b/sys-apps/baselayout/Manifest index 54e98e24d4cb..084f86444245 100644 --- a/sys-apps/baselayout/Manifest +++ b/sys-apps/baselayout/Manifest @@ -1,6 +1,7 @@ DIST baselayout-2.7.tar.bz2 30317 BLAKE2B 7b7c284b7d0a9608a0d03dbde0d62d793829b61d5361f5062fdeb8880a2f792c142e20acf7fa92e713e2ebb0bd1609ca65bc8a4191f2bf2c5df4f474eaeef1ee SHA512 8b28d2dc20fd5887db5c0e6b67a4217c4d0730529023fc57fb1ee95a431e1f492fb21e3e66980bef766819e9f542dc7e4ad3ae25465390194bbf970c3653c88e EBUILD baselayout-2.7-r1.ebuild 10197 BLAKE2B 5e5f767f37bdf286cd77d21512a855e1e2f5f26fd794838e3cb21634f089b66cefc4e915c9e88148f0e1f2a0067a57bfb029833572614c0190d54f862ff15659 SHA512 847e2ddae301a856b7719fe9134635ea79f0059107188aad8c554fda4da428f970a2ad4daf56491050acacd822175fa8ae18f22402e19677df9d920c525ce737 EBUILD baselayout-2.7-r2.ebuild 10184 BLAKE2B febfaf2d2a646358c20e12039cd3b224a2fbcf5c12b566e8b33927fa5549b3f0d5b76392bf36cdefe7b14f84bf89b5caff5004ce54b862d238d5928d69526e87 SHA512 a5a45b479dfeac5212291d3d8053c822d06a45d8f82d24f8937b15bd3bf5fd6953ec3520121df243cea2cea52ea8d56894d27b03a272c85ca21ff52190551d8b +EBUILD baselayout-2.7-r3.ebuild 11291 BLAKE2B f2794d10f18c74e358ce1e6fc1a9c3e29b7ab7b0cb0d656a53f990781707b29b9e173b96044c9c9e9c8d35b7b020624ad8e9d1bec1cd6b72f287e8c8759dc1cb SHA512 3eaec1f7a1bfd85dd26ad62b3756a7460e890cc893c6967aded70d85df722865664235924c6cbdb7d9be3572e94d059cf1df6a2b240a1e9923b3533ac68906eb EBUILD baselayout-2.7.ebuild 10024 BLAKE2B 490416f9367b1236ac8879b273acc2920f77f1fb23edba5bc825358270f434e0facb8f2794baebce5841b2be2ee3a4da5fffa026585555902e582ff36ab37bd3 SHA512 6a629e68f58d23f8d9653bccca3ad6d52610bd87ab73c5d6b12c9b6e9762f34f2deb452d689c99ea4d66f1c4dbe88e13991f1b2ea900720fd8c8d92067aaca71 -EBUILD baselayout-9999.ebuild 9824 BLAKE2B 178bcbc1a2c0373d1c83b870034b879cc34a1a8f8aabcf2035d89a48824bf3d0765d4131a31496435b59aed37dd23b45810553471a6bdc9a13bfa82b2b483b6c SHA512 ceb10aabcc5fb25b27a224d126d5a7bac54fbe7cc38d98376a589ece84fc7e6daa6eb10953e54dc4b73e43cf1f7bc78b74c54e067b5be3ede63fe9ea7a1b55c9 +EBUILD baselayout-9999.ebuild 11291 BLAKE2B f2794d10f18c74e358ce1e6fc1a9c3e29b7ab7b0cb0d656a53f990781707b29b9e173b96044c9c9e9c8d35b7b020624ad8e9d1bec1cd6b72f287e8c8759dc1cb SHA512 3eaec1f7a1bfd85dd26ad62b3756a7460e890cc893c6967aded70d85df722865664235924c6cbdb7d9be3572e94d059cf1df6a2b240a1e9923b3533ac68906eb MISC metadata.xml 382 BLAKE2B 7c360eab19fc55da87cf2a432c1f2407918be3cf32ec581b974fea953aea00a51998cd05facd0c4b6d609e38bd1f243380a5c3a9effcb5e7bebbf22ec6d9418c SHA512 1a444b5b8fc6573fae97c6e0bf5e3dc69f9e18a42d2a7c91ac2742bca17580468be8b17ca6349451817b0087f619bad90a1050b1fd8511fc5e57b792b5006d72 diff --git a/sys-apps/baselayout/baselayout-2.7-r3.ebuild b/sys-apps/baselayout/baselayout-2.7-r3.ebuild new file mode 100644 index 000000000000..c83d1da82dc4 --- /dev/null +++ b/sys-apps/baselayout/baselayout-2.7-r3.ebuild @@ -0,0 +1,347 @@ +# Copyright 1999-2021 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +inherit multilib prefix + +DESCRIPTION="Filesystem baselayout and init scripts" +HOMEPAGE="https://wiki.gentoo.org/wiki/No_homepage" +if [[ ${PV} = 9999 ]]; then + EGIT_REPO_URI="https://anongit.gentoo.org/git/proj/${PN}.git" + inherit git-r3 +else + SRC_URI="https://gitweb.gentoo.org/proj/${PN}.git/snapshot/${P}.tar.bz2" + KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86" +fi + +LICENSE="GPL-2" +SLOT="0" +IUSE="build kernel_FreeBSD kernel_linux +split-usr" + +pkg_setup() { + multilib_layout +} + +riscv_compat_symlink() { + # Here we apply some special sauce for riscv. + # Two multilib layouts exist for now: + # 1) one level libdirs, (32bit) "lib" and (64bit) "lib64" + # these are chosen by us to closely resemble other arches + # 2) two level libdirs, "lib64/lp64d" "lib64/lp64" "lib32/ilp32d" ... + # this is the glibc/gcc default + # Unfortunately, the default has only one fallback, which is "lib" + # for both 32bit and 64bit. So things do not break in 1), we need + # to provide compatibility symlinks... + + # This function has exactly two parameters: + # - the default libdir, to determine if 1) or 2) applies + # - the location of the symlink (which points to ".") + + # Note: we call this only in the ${SYMLINK_LIB} = no codepath, since + # there never was a ${SYMLINK_LIB} = yes riscv profile. + + case ${CHOST} in + riscv*) + # are we on a one level libdir profile? is there no symlink yet? + if [[ ${1} != */* && ! -L ${2} ]] ; then + ln -s . $2 || die "Unable to make $2 riscv compatibility symlink" + fi + ;; + esac +} + +# Create our multilib dirs - the Makefile has no knowledge of this +multilib_layout() { + local dir def_libdir libdir libdirs + local prefix prefix_lst + def_libdir=$(get_abi_LIBDIR $DEFAULT_ABI) + libdirs=$(get_all_libdirs) + + if [[ -z "${SYMLINK_LIB}" || ${SYMLINK_LIB} = no ]] ; then + prefix_lst=( "${EROOT}"/{,usr/,usr/local/} ) + for prefix in "${prefix_lst[@]}"; do + for libdir in ${libdirs}; do + dir="${prefix}${libdir}" + if [[ -e "${dir}" ]]; then + [[ ! -d "${dir}" ]] && + die "${dir} exists but is not a directory" + continue + fi + if ! use split-usr && [[ ${prefix} = ${EROOT}/ ]]; then + libdir="${libdir%%/*}" + dir="${prefix}${libdir}" + einfo "symlinking ${dir} to usr/${libdir}" + ln -s usr/${libdir} ${dir} || + die "Unable to make ${dir} symlink" + else + einfo "creating directory ${dir}" + mkdir -p "${dir}" || + die "Unable to create ${dir} directory" + fi + done + riscv_compat_symlink "${def_libdir}" "${prefix}${def_libdir}/${DEFAULT_ABI}" + done + return 0 + fi + + [ -z "${def_libdir}" ] && + die "your DEFAULT_ABI=$DEFAULT_ABI appears to be invalid" + + # figure out which paths should be symlinks and which should be directories + local dirs syms exp d + for libdir in ${libdirs} ; do + if use split-usr ; then + exp=( {,usr/,usr/local/}${libdir} ) + else + exp=( {usr/,usr/local/}${libdir} ) + fi + for d in "${exp[@]}" ; do + # most things should be dirs + if [ "${SYMLINK_LIB}" = "yes" ] && [ "${libdir}" = "lib" ] ; then + [ ! -h "${d}" ] && [ -e "${d}" ] && dirs+=" ${d}" + else + [ -h "${d}" ] && syms+=" ${d}" + fi + done + done + if [ -n "${syms}${dirs}" ] ; then + ewarn "Your system profile has SYMLINK_LIB=${SYMLINK_LIB:-no}, so that means you need to" + ewarn "have these paths configured as follows:" + [ -n "${dirs}" ] && ewarn "symlinks to '${def_libdir}':${dirs}" + [ -n "${syms}" ] && ewarn "directories:${syms}" + ewarn "The ebuild will attempt to fix these, but only for trivial conversions." + ewarn "If things fail, you will need to manually create/move the directories." + echo + fi + + # setup symlinks and dirs where we expect them to be; do not migrate + # data ... just fall over in that case. + if use split-usr ; then + prefix_lst=( "${EROOT}"/{,usr/,usr/local/} ) + else + prefix_lst=( "${EROOT}"/{usr/,usr/local/} ) + fi + for prefix in "${prefix_lst[@]}"; do + if [ "${SYMLINK_LIB}" = yes ] ; then + # we need to make sure "lib" points to the native libdir + if [ -h "${prefix}lib" ] ; then + # it's already a symlink! assume it's pointing to right place ... + continue + elif [ -d "${prefix}lib" ] ; then + # "lib" is a dir, so need to convert to a symlink + ewarn "Converting ${prefix}lib from a dir to a symlink" + rm -f "${prefix}lib"/.keep || die + if rmdir "${prefix}lib" 2>/dev/null ; then + ln -s ${def_libdir} "${prefix}lib" || die + else + die "non-empty dir found where we needed a symlink: ${prefix}lib" + fi + else + # nothing exists, so just set it up sanely + ewarn "Initializing ${prefix}lib as a symlink" + mkdir -p "${prefix}" || die + rm -f "${prefix}lib" || die + ln -s ${def_libdir} "${prefix}lib" || die + mkdir -p "${prefix}${def_libdir}" || die #423571 + fi + else + # we need to make sure "lib" is a dir + if [ -h "${prefix}lib" ] ; then + # "lib" is a symlink, so need to convert to a dir + ewarn "Converting ${prefix}lib from a symlink to a dir" + rm -f "${prefix}lib" || die + if [ -d "${prefix}lib32" ] ; then + ewarn "Migrating ${prefix}lib32 to ${prefix}lib" + mv "${prefix}lib32" "${prefix}lib" || die + else + mkdir -p "${prefix}lib" || die + fi + elif [ -d "${prefix}lib" ] && ! has lib32 ${libdirs} ; then + # make sure the old "lib" ABI location does not exist; we + # only symlinked the lib dir on systems where we moved it + # to "lib32" ... + case ${CHOST} in + *-gentoo-freebsd*) ;; # We want it the other way on fbsd. + i?86*|x86_64*|powerpc*|sparc*|s390*) + if [[ -d ${prefix}lib32 && ! -h ${prefix}lib32 ]] ; then + rm -f "${prefix}lib32"/.keep || die + if ! rmdir "${prefix}lib32" 2>/dev/null ; then + ewarn "You need to merge ${prefix}lib32 into ${prefix}lib" + die "non-empty dir found where there should be none: ${prefix}lib32" + fi + fi + ;; + esac + else + # nothing exists, so just set it up sanely + ewarn "Initializing ${prefix}lib as a dir" + mkdir -p "${prefix}lib" || die + fi + fi + done + if ! use split-usr ; then + for libdir in ${libdirs}; do + if [[ ! -e "${EROOT}${libdir}" ]]; then + ln -s usr/"${libdir}" "${EROOT}${libdir}" || + die "Unable to make ${EROOT}${libdir} symlink" + fi + done + fi +} + +pkg_preinst() { + # This is written in src_install (so it's in CONTENTS), but punt all + # pending updates to avoid user having to do etc-update (and make the + # pkg_postinst logic simpler). + rm -f "${EROOT}"/etc/._cfg????_gentoo-release || die + + # We need to install directories and maybe some dev nodes when building + # stages, but they cannot be in CONTENTS. + # Also, we cannot reference $S as binpkg will break so we do this. + multilib_layout + if use build ; then + if use split-usr ; then + emake -C "${ED}/usr/share/${PN}" DESTDIR="${EROOT}" layout + else + emake -C "${ED}/usr/share/${PN}" DESTDIR="${EROOT}" layout-usrmerge + fi + fi + rm -f "${ED}"/usr/share/${PN}/Makefile || die +} + +src_prepare() { + default + if use prefix; then + hprefixify -e "/EUID/s,0,${EUID}," -q '"' etc/profile + hprefixify etc/{env.d/50baselayout,shells} share.Linux/passwd + echo PATH=/usr/bin:/bin >> etc/env.d/99host + echo ROOTPATH=/usr/sbin:/sbin:/usr/bin:/bin >> etc/env.d/99host + fi + + # don't want symlinked directories in PATH on systems with usr-merge + if ! use split-usr; then + sed \ + -e 's|/usr/local/sbin:||g' \ + -e 's|:/usr/sbin:|:|g' \ + -e 's|:/sbin:|:|g' \ + -e 's|:/bin:|:|g' \ + -i etc/env.d/50baselayout || die + fi + + # handle multilib paths. do it here because we want this behavior + # regardless of the C library that you're using. we do explicitly + # list paths which the native ldconfig searches, but this isn't + # problematic as it doesn't change the resulting ld.so.cache or + # take longer to generate. similarly, listing both the native + # path and the symlinked path doesn't change the resulting cache. + local libdir ldpaths + for libdir in $(get_all_libdirs) ; do + use split-usr && ldpaths+=":${EPREFIX}/${libdir}" + ldpaths+=":${EPREFIX}/usr/${libdir}" + ldpaths+=":${EPREFIX}/usr/local/${libdir}" + done + echo "LDPATH='${ldpaths#:}'" >> etc/env.d/50baselayout + + # rc-scripts version for testing of features that *should* be present + echo "Gentoo Base System release ${PV}" > etc/gentoo-release +} + +src_install() { + emake \ + OS=$(usex kernel_FreeBSD BSD Linux) \ + DESTDIR="${ED}" \ + install + dodoc ChangeLog + rm "${ED}"/etc/sysctl.d/README || die + + # need the makefile in pkg_preinst + insinto /usr/share/${PN} + doins Makefile + + # This is needed for https://bugs.gentoo.org/732142 + dodir /usr/lib + mv "${ED}"/etc/os-release "${ED}"/usr/lib || die + dosym ../usr/lib/os-release /etc/os-release +} + +pkg_postinst() { + local x + + # We installed some files to /usr/share/baselayout instead of /etc to stop + # (1) overwriting the user's settings + # (2) screwing things up when attempting to merge files + # (3) accidentally packaging up personal files with quickpkg + # If they don't exist then we install them + for x in master.passwd passwd shadow group fstab ; do + [ -e "${EROOT}/etc/${x}" ] && continue + [ -e "${EROOT}/usr/share/baselayout/${x}" ] || continue + cp -p "${EROOT}/usr/share/baselayout/${x}" "${EROOT}"/etc || die + done + + # Force shadow permissions to not be world-readable #260993 + for x in shadow ; do + if [ -e "${EROOT}/etc/${x}" ] ; then + chmod o-rwx "${EROOT}/etc/${x}" || die + fi + done + + # Take care of the etc-update for the user + if [ -e "${EROOT}"/etc/._cfg0000_gentoo-release ] ; then + mv "${EROOT}"/etc/._cfg0000_gentoo-release "${EROOT}"/etc/gentoo-release || die + fi + + # whine about users that lack passwords #193541 + if [[ -e "${EROOT}"/etc/shadow ]] ; then + local bad_users=$(sed -n '/^[^:]*::/s|^\([^:]*\)::.*|\1|p' "${EROOT}"/etc/shadow) + if [[ -n ${bad_users} ]] ; then + echo + ewarn "The following users lack passwords!" + ewarn ${bad_users} + fi + fi + + # whine about users with invalid shells #215698 + if [[ -e "${EROOT}"/etc/passwd ]] ; then + local bad_shells=$(awk -F: 'system("test -e ${ROOT}" $7) { print $1 " - " $7}' "${EROOT}"/etc/passwd | sort) + if [[ -n ${bad_shells} ]] ; then + echo + ewarn "The following users have non-existent shells!" + ewarn "${bad_shells}" + fi + fi + + # https://bugs.gentoo.org/361349 + if use kernel_linux; then + mkdir -p "${EROOT}"/run || die + + local found fstype mountpoint + while read -r _ mountpoint fstype _; do + [[ ${mountpoint} = /run ]] && [[ ${fstype} = tmpfs ]] && found=1 + done < "${ROOT}"/proc/mounts + [[ -z ${found} ]] && + ewarn "You should reboot now to get /run mounted with tmpfs!" + fi + + for x in ${REPLACING_VERSIONS}; do + if ver_test 2.4 -lt ${x}; then + ewarn "After updating ${EROOT}/etc/profile, please run" + ewarn "env-update && . /etc/profile" + fi + + if ver_test 2.6 -lt ${x}; then + ewarn "Please run env-update then log out and back in to" + ewarn "update your path." + fi + # clean up after 2.5 typos + # https://bugs.gentoo.org/show_bug.cgi?id=656380 + if [[ ${x} == 2.5 ]]; then + rm -fr "${EROOT}/{,usr" || die + fi + done + + if [[ -e "${EROOT}"/etc/env.d/00basic ]]; then + ewarn "${EROOT}/etc/env.d/00basic is now ${EROOT}/etc/env.d/50baselayout" + ewarn "Please migrate your changes." + fi +} diff --git a/sys-apps/baselayout/baselayout-9999.ebuild b/sys-apps/baselayout/baselayout-9999.ebuild index 9f4a53a1c184..c83d1da82dc4 100644 --- a/sys-apps/baselayout/baselayout-9999.ebuild +++ b/sys-apps/baselayout/baselayout-9999.ebuild @@ -23,6 +23,34 @@ pkg_setup() { multilib_layout } +riscv_compat_symlink() { + # Here we apply some special sauce for riscv. + # Two multilib layouts exist for now: + # 1) one level libdirs, (32bit) "lib" and (64bit) "lib64" + # these are chosen by us to closely resemble other arches + # 2) two level libdirs, "lib64/lp64d" "lib64/lp64" "lib32/ilp32d" ... + # this is the glibc/gcc default + # Unfortunately, the default has only one fallback, which is "lib" + # for both 32bit and 64bit. So things do not break in 1), we need + # to provide compatibility symlinks... + + # This function has exactly two parameters: + # - the default libdir, to determine if 1) or 2) applies + # - the location of the symlink (which points to ".") + + # Note: we call this only in the ${SYMLINK_LIB} = no codepath, since + # there never was a ${SYMLINK_LIB} = yes riscv profile. + + case ${CHOST} in + riscv*) + # are we on a one level libdir profile? is there no symlink yet? + if [[ ${1} != */* && ! -L ${2} ]] ; then + ln -s . $2 || die "Unable to make $2 riscv compatibility symlink" + fi + ;; + esac +} + # Create our multilib dirs - the Makefile has no knowledge of this multilib_layout() { local dir def_libdir libdir libdirs @@ -52,6 +80,7 @@ multilib_layout() { die "Unable to create ${dir} directory" fi done + riscv_compat_symlink "${def_libdir}" "${prefix}${def_libdir}/${DEFAULT_ABI}" done return 0 fi @@ -282,6 +311,18 @@ pkg_postinst() { fi fi + # https://bugs.gentoo.org/361349 + if use kernel_linux; then + mkdir -p "${EROOT}"/run || die + + local found fstype mountpoint + while read -r _ mountpoint fstype _; do + [[ ${mountpoint} = /run ]] && [[ ${fstype} = tmpfs ]] && found=1 + done < "${ROOT}"/proc/mounts + [[ -z ${found} ]] && + ewarn "You should reboot now to get /run mounted with tmpfs!" + fi + for x in ${REPLACING_VERSIONS}; do if ver_test 2.4 -lt ${x}; then ewarn "After updating ${EROOT}/etc/profile, please run" |