commit: 906b701d94b97cdd13342bbf5bdfd552f76e6ae9 Author: Ivan S. Titov <iohann.s.titov <AT> gmail <DOT> com> AuthorDate: Tue Jan 6 15:38:31 2026 +0000 Commit: Viorel Munteanu <ceamac <AT> gentoo <DOT> org> CommitDate: Tue Jan 20 05:59:01 2026 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=906b701d
sys-apps/busybox: add 1.37.0 Closes: https://bugs.gentoo.org/967466 Signed-off-by: Ivan S. Titov <iohann.s.titov <AT> gmail.com> Part-of: https://github.com/gentoo/gentoo/pull/45275 Closes: https://github.com/gentoo/gentoo/pull/45275 Signed-off-by: Viorel Munteanu <ceamac <AT> gentoo.org> sys-apps/busybox/Manifest | 1 + sys-apps/busybox/busybox-1.37.0.ebuild | 391 +++++++++++++++++++++ .../busybox/files/busybox-1.37.0-sha-ni-fix.patch | 29 ++ .../busybox-1.37.0-skip-dynamic-relocations.patch | 43 +++ 4 files changed, 464 insertions(+) diff --git a/sys-apps/busybox/Manifest b/sys-apps/busybox/Manifest index 903c83e38250..2ba96545d9e6 100644 --- a/sys-apps/busybox/Manifest +++ b/sys-apps/busybox/Manifest @@ -1 +1,2 @@ DIST busybox-1.36.1.tar.bz2 2525473 BLAKE2B e515825cb3ab1c520e16b9c2512e9fc72947366a72a0466bff59b507fdffbc78fc9d16b44a26116175fc7a429d849ad944b1bc379d36c6d3a0eb20969997336e SHA512 8c0c754c9ae04b5e6b23596283a7d3a4ef96225fe179f92d6f6a99c69c0caa95b1aa56c267f52d7c807f6cc69e1f0b7dd29a8ac624098f601738f8c0c57980d4 +DIST busybox-1.37.0.tar.bz2 2565764 BLAKE2B bfd9b81a2428670722934316d429b56886b232dc43ced5873a1f72966dd2bb604e3d607082bb8404bc7e8c15c5c79265fc19f8932e2c9703caafd16fc8037a5a SHA512 ad8fd06f082699774f990a53d7a73b189ed404fe0a2166aff13eae4d9d8ee5c9239493befe949c98801fe7897520dbff3ed0224faa7205854ce4fa975e18467e diff --git a/sys-apps/busybox/busybox-1.37.0.ebuild b/sys-apps/busybox/busybox-1.37.0.ebuild new file mode 100644 index 000000000000..fffac4ee68a9 --- /dev/null +++ b/sys-apps/busybox/busybox-1.37.0.ebuild @@ -0,0 +1,391 @@ +# Copyright 1999-2026 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +# See `man savedconfig.eclass` for info on how to use USE=savedconfig. + +EAPI=8 + +inherit eapi9-ver flag-o-matic readme.gentoo-r1 savedconfig toolchain-funcs + +DESCRIPTION="Utilities for rescue and embedded systems" +HOMEPAGE="https://www.busybox.net/" +if [[ ${PV} == "9999" ]] ; then + MY_P="${P}" + EGIT_REPO_URI="https://git.busybox.net/busybox" + inherit git-r3 +else + MY_P="${PN}-${PV/_/-}" + SRC_URI="https://www.busybox.net/downloads/${MY_P}.tar.bz2" + # unstable release - no keywords + # KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux" +fi +S="${WORKDIR}/${MY_P}" + +LICENSE="GPL-2" # GPL-2 only +SLOT="0" +IUSE="debug livecd make-symlinks math mdev pam selinux sep-usr static syslog systemd" +REQUIRED_USE="pam? ( !static )" +RESTRICT="test" + +# TODO: Could make pkgconfig conditional on selinux? bug #782829 +RDEPEND=" + !static? ( + virtual/libc + virtual/libcrypt:= + selinux? ( sys-libs/libselinux ) + ) + pam? ( sys-libs/pam ) +" +DEPEND="${RDEPEND} + static? ( + virtual/libcrypt[static-libs] + selinux? ( sys-libs/libselinux[static-libs(+)] ) + ) + sys-kernel/linux-headers" +BDEPEND="virtual/pkgconfig" + +DISABLE_AUTOFORMATTING=yes +DOC_CONTENTS=' +If you want a smaller executable, add `-Oz` to your busybox `CFLAGS`.' + +busybox_config_option() { + local flag=$1 ; shift + if [[ ${flag} != [yn] && ${flag} != \"* ]] ; then + busybox_config_option $(usex ${flag} y n) "$@" + return + fi + local expr + while [[ $# -gt 0 ]] ; do + case ${flag} in + y) expr="s:.*\<CONFIG_$1\>.*set:CONFIG_$1=y:g" ;; + n) expr="s:CONFIG_$1=y:# CONFIG_$1 is not set:g" ;; + *) expr="s:.*\<CONFIG_$1\>.*:CONFIG_$1=${flag}:g" ;; + esac + sed -i -e "${expr}" .config || die + einfo "$(grep "CONFIG_$1[= ]" .config || echo "Could not find CONFIG_$1 ...")" + shift + done +} + +busybox_config_enabled() { + local val=$(sed -n "/^CONFIG_$1=/s:^[^=]*=::p" .config) + case ${val} in + "") return 1 ;; + y) return 0 ;; + *) echo "${val}" | sed -r 's:^"(.*)"$:\1:' ;; + esac +} + +# patches go here! +PATCHES=( + "${FILESDIR}"/${PN}-1.26.2-bb.patch + "${FILESDIR}"/${PN}-1.34.1-skip-selinux-search.patch + + "${FILESDIR}"/${PN}-1.36.0-fortify-source-3-fixdep.patch + "${FILESDIR}"/${PN}-1.36.1-kernel-6.8.patch + + "${FILESDIR}"/${PN}-1.37.0-skip-dynamic-relocations.patch + + "${FILESDIR}"/${PN}-1.37.0-sha-ni-fix.patch + + # "${FILESDIR}"/${P}-*.patch +) + +src_prepare() { + default + + cp "${FILESDIR}"/ginit.c init/ || die + + # flag cleanup + sed -i -r \ + -e 's:[[:space:]]?-(Werror|Os|Oz|falign-(functions|jumps|loops|labels)=1|fomit-frame-pointer)\>::g' \ + Makefile.flags || die + sed -i \ + -e 's:-static-libgcc::' \ + Makefile.flags || die + + # Print all link lines too + sed -i -e 's:debug=false:debug=true:' scripts/trylink || die +} + +bbmake() { + local args=( + V=1 + CROSS_COMPILE="${CHOST}-" + AR="${AR}" + CC="${CC}" + HOSTCC="${BUILD_CC}" + HOSTCFLAGS="${BUILD_CFLAGS}" + PKG_CONFIG="${PKG_CONFIG}" + ) + emake "${args[@]}" "$@" +} + +src_configure() { + unset KBUILD_OUTPUT #88088 + export SKIP_STRIP=y + + tc-export AR CC BUILD_CC PKG_CONFIG + + tc-is-cross-compiler || BUILD_CFLAGS=${CFLAGS} + BUILD_CFLAGS+=" -D_FILE_OFFSET_BITS=64" #930513 + + append-flags -fno-strict-aliasing #310413 + use ppc64 && append-flags -mminimal-toc #130943 + + # check for a busybox config before making one of our own. + # if one exist lets return and use it. + + restore_config .config + if [ -f .config ]; then + yes "" | bbmake -j1 oldconfig + return 0 + else + ewarn "Could not locate user configfile, so we will save a default one" + fi + + # setting SKIP_SELINUX skips searching for selinux at this stage. We don't + # need to search now in case we end up not needing it after all. + # setup the config file + bbmake -j1 allyesconfig SKIP_SELINUX=$(usex selinux n y) #620918 + # nommu forces a bunch of things off which we want on #387555 + busybox_config_option n NOMMU + sed -i '/^#/d' .config + yes "" | bbmake -j1 oldconfig SKIP_SELINUX=$(usex selinux n y) #620918 + + # now turn off stuff we really don't want + busybox_config_option n DMALLOC + busybox_config_option n FEATURE_2_4_MODULES #607548 + busybox_config_option n FEATURE_SUID_CONFIG + busybox_config_option n BUILD_AT_ONCE + busybox_config_option n BUILD_LIBBUSYBOX + busybox_config_option n FEATURE_CLEAN_UP + busybox_config_option n MONOTONIC_SYSCALL + busybox_config_option n USE_PORTABLE_CODE + busybox_config_option n WERROR + # CONFIG_MODPROBE_SMALL=y disables depmod.c and uses a smaller one that + # does not support -b. Setting this to no creates slightly larger and + # slightly more useful modutils + busybox_config_option n MODPROBE_SMALL #472464 + # triming the BSS size may be dangerous + busybox_config_option n FEATURE_USE_BSS_TAIL + + # These cause trouble with musl. + if use elibc_musl; then + busybox_config_option n FEATURE_UTMP + busybox_config_option n EXTRA_COMPAT + busybox_config_option n FEATURE_VI_REGEX_SEARCH + fi + + # Disable standalone shell mode when using make-symlinks, else Busybox calls its + # applets by default without looking up in PATH. + # This also enables users to disable a builtin by deleting the corresponding symlink. + if use make-symlinks; then + busybox_config_option n FEATURE_PREFER_APPLETS + busybox_config_option n FEATURE_SH_STANDALONE + fi + + # If these are not set and we are using a busybox setup + # all calls to system() will fail. + busybox_config_option y ASH + busybox_config_option y SH_IS_ASH + busybox_config_option n HUSH + busybox_config_option n SH_IS_HUSH + + busybox_config_option '"/run"' PID_FILE_PATH + busybox_config_option '"/run/ifstate"' IFUPDOWN_IFSTATE_PATH + + busybox_config_option pam PAM + busybox_config_option static STATIC + busybox_config_option syslog {K,SYS}LOGD LOGGER + busybox_config_option systemd FEATURE_SYSTEMD + busybox_config_option math FEATURE_AWK_LIBM + + # all the debug options are compiler related, so punt them + busybox_config_option n DEBUG_SANITIZE + busybox_config_option n DEBUG + busybox_config_option y NO_DEBUG_LIB + busybox_config_option n DMALLOC + busybox_config_option n EFENCE + busybox_config_option $(usex debug y n) TFTP_DEBUG + + busybox_config_option selinux SELINUX + + # this opt only controls mounting with <linux-2.6.23 + busybox_config_option n FEATURE_MOUNT_NFS + + # glibc-2.26 and later does not ship RPC implientation + busybox_config_option n FEATURE_HAVE_RPC + busybox_config_option n FEATURE_INETD_RPC + + # default a bunch of uncommon options to off + local opt + for opt in \ + ADD_SHELL \ + BEEP BOOTCHARTD \ + CRONTAB \ + DC DEVFSD DNSD DPKG{,_DEB} \ + FAKEIDENTD FBSPLASH FOLD FSCK_MINIX FTP{GET,PUT} \ + FEATURE_DEVFS \ + HOSTID HUSH \ + INETD INOTIFYD IPCALC \ + LOCALE_SUPPORT LOGNAME LPD \ + MAKEMIME MKFS_MINIX MSH \ + OD \ + RDEV READPROFILE REFORMIME REMOVE_SHELL RFKILL RUN_PARTS RUNSV{,DIR} \ + SLATTACH SMEMCAP SULOGIN SV{,LOGD} \ + TASKSET TCPSVD \ + RPM RPM2CPIO \ + UDPSVD UUDECODE UUENCODE + do + busybox_config_option n ${opt} + done + + bbmake -j1 oldconfig +} + +src_compile() { + bbmake busybox + + # bug #701512 + bbmake doc +} + +src_install() { + unset KBUILD_OUTPUT #88088 + save_config .config + + into / + dodir /bin + if use sep-usr ; then + # install /ginit to take care of mounting stuff + exeinto / + newexe busybox_unstripped ginit + dosym /ginit /bin/bb + dosym bb /bin/busybox + else + newbin busybox_unstripped busybox + dosym busybox /bin/bb + fi + if use mdev ; then + dodir /$(get_libdir)/mdev/ + use make-symlinks || dosym /bin/bb /sbin/mdev + cp "${S}"/examples/mdev_fat.conf "${ED}"/etc/mdev.conf || die + if [[ ! "$(get_libdir)" == "lib" ]]; then + #831251 - replace lib with lib64 where appropriate + sed -i -e "s:/lib/:/$(get_libdir)/:g" "${ED}"/etc/mdev.conf || die + fi + + exeinto /$(get_libdir)/mdev/ + doexe "${FILESDIR}"/mdev/* + + newinitd "${FILESDIR}"/mdev.initd mdev + fi + if use livecd ; then + dosym busybox /bin/vi + fi + + # add busybox daemon's, bug #444718 + if busybox_config_enabled FEATURE_NTPD_SERVER; then + newconfd "${FILESDIR}"/ntpd.confd busybox-ntpd + newinitd "${FILESDIR}"/ntpd.initd busybox-ntpd + fi + if busybox_config_enabled SYSLOGD; then + newconfd "${FILESDIR}"/syslogd.confd busybox-syslogd + newinitd "${FILESDIR}"/syslogd.initd busybox-syslogd + fi + if busybox_config_enabled KLOGD; then + newconfd "${FILESDIR}"/klogd.confd busybox-klogd + newinitd "${FILESDIR}"/klogd.initd busybox-klogd + fi + if busybox_config_enabled WATCHDOG; then + newconfd "${FILESDIR}"/watchdog.confd busybox-watchdog + newinitd "${FILESDIR}"/watchdog.initd busybox-watchdog + fi + if busybox_config_enabled UDHCPC; then + sed -i 's:$((metric++)):$metric; metric=$((metric + 1)):' examples/udhcp/simple.script || die #801535 + local path=$(busybox_config_enabled UDHCPC_DEFAULT_SCRIPT) + exeinto "${path%/*}" + newexe examples/udhcp/simple.script "${path##*/}" + fi + if busybox_config_enabled UDHCPD; then + insinto /etc + doins examples/udhcp/udhcpd.conf + fi + if busybox_config_enabled ASH && ! use make-symlinks; then + dosym -r /bin/busybox /bin/ash + fi + if busybox_config_enabled CROND; then + newconfd "${FILESDIR}"/crond.confd busybox-crond + newinitd "${FILESDIR}"/crond.initd busybox-crond + fi + + # bundle up the symlink files for use later + bbmake DESTDIR="${ED}" install + # for compatibility, provide /usr/bin/env + mkdir -p _install/usr/bin || die + if [[ ! -e _install/usr/bin/env ]]; then + ln -s /bin/env _install/usr/bin/env || die + fi + rm _install/bin/busybox || die + tar cf busybox-links.tar -C _install . || : #;die + insinto /usr/share/${PN} + use make-symlinks && doins busybox-links.tar + + dodoc AUTHORS README TODO + + cd docs || die + doman busybox.1 + docinto txt + dodoc *.txt + docinto pod + dodoc *.pod + docinto html + dodoc *.html + + cd ../examples || die + docinto examples + dodoc inittab depmod.pl *.conf *.script undeb unrpm + + cd ../networking || die + dodoc httpd_indexcgi.c httpd_post_upload.cgi + + readme.gentoo_create_doc +} + +pkg_preinst() { + if use make-symlinks ; then + mv "${ED}"/usr/share/${PN}/busybox-links.tar "${T}"/ || die + fi +} + +pkg_postinst() { + savedconfig_pkg_postinst + + if use make-symlinks ; then + cd "${T}" || die + mkdir _install + tar xf busybox-links.tar -C _install || die + # 907432: cp -n returns error if it skips any file, but that is expected here + # TODO: check if a new coreutils release has a replacement option + cp -nvpPR _install/* "${ROOT}"/ + fi + + if use sep-usr ; then + elog "In order to use the sep-usr support, you have to update your" + elog "kernel command line. Add the option:" + elog " init=/ginit" + elog "To launch a different init than /sbin/init, use:" + elog " init=/ginit /sbin/yourinit" + elog "To get a rescue shell, you may boot with:" + elog " init=/ginit bb" + fi + + if [[ ${MERGE_TYPE} != binary ]] && ! is-flagq -Oz; then + if ver_replacing -le 1.36.1; then + FORCE_PRINT_ELOG=yes + fi + + readme.gentoo_print_elog + fi +} diff --git a/sys-apps/busybox/files/busybox-1.37.0-sha-ni-fix.patch b/sys-apps/busybox/files/busybox-1.37.0-sha-ni-fix.patch new file mode 100644 index 000000000000..c06bf099f1da --- /dev/null +++ b/sys-apps/busybox/files/busybox-1.37.0-sha-ni-fix.patch @@ -0,0 +1,29 @@ +https://lists.busybox.net/pipermail/busybox/2024-September/090899.html +[PATCH] libbb/sha: add missing sha-NI guard +Andre Przywara andre.przywara at arm.com +Tue Sep 10 13:32:46 UTC 2024 + + Previous message (by thread): Bug report: menuconfig cannot compile with gcc 14 + Next message (by thread): cp does not appear to respect file permissions + Messages sorted by: [ date ] [ thread ] [ subject ] [ author ] + +The ENABLE_SHA1_HWACCEL Kconfig symbol is meant to be archicture +agnostic, so can be enabled regardless of whether your build +architecture provides hardware acceleration or not. At the moment only +x86 implements this, so every piece of optimised code should be guarded +by both ENABLE_SHA1_HWACCEL and (__x86_64__ || __i386__). This is missing +at one place, so compiling for arm64 breaks when ENABLE_SHA1_HWACCEL is +enabled. + +--- a/libbb/hash_md5_sha.c ++++ b/libbb/hash_md5_sha.c +@@ -1313,7 +1313,9 @@ unsigned FAST_FUNC sha1_end(sha1_ctx_t *ctx, void *resbuf) + hash_size = 8; + if (ctx->process_block == sha1_process_block64 + #if ENABLE_SHA1_HWACCEL ++# if defined(__GNUC__) && defined(__x86_64__) + || ctx->process_block == sha1_process_block64_shaNI ++# endif + #endif + ) { + hash_size = 5; diff --git a/sys-apps/busybox/files/busybox-1.37.0-skip-dynamic-relocations.patch b/sys-apps/busybox/files/busybox-1.37.0-skip-dynamic-relocations.patch new file mode 100644 index 000000000000..8c63603165fe --- /dev/null +++ b/sys-apps/busybox/files/busybox-1.37.0-skip-dynamic-relocations.patch @@ -0,0 +1,43 @@ +https://git.alpinelinux.org/aports/plain/main/busybox/0025-Hackfix-to-disable-HW-acceleration-for-MD5-SHA1-on-x.patch +https://bugs.gentoo.org/933771 + +From 3ead51e53687e94a51beb793661363df27b00814 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?S=C3=B6ren=20Tempel?= <[email protected]> +Date: Thu, 5 Jan 2023 15:47:55 +0100 +Subject: [PATCH] Hackfix to disable HW acceleration for MD5/SHA1 on x86 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This causes a direct segfault with musl libc. + +See: http://lists.busybox.net/pipermail/busybox/2023-January/090078.html +--- a/libbb/hash_md5_sha.c ++++ b/libbb/hash_md5_sha.c +@@ -17,7 +17,7 @@ + #define NEED_SHA512 (ENABLE_SHA512SUM || ENABLE_USE_BB_CRYPT_SHA) + + #if ENABLE_SHA1_HWACCEL || ENABLE_SHA256_HWACCEL +-# if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) ++# if defined(__GNUC__) && defined(__x86_64__) + static void cpuid_eax_ebx_ecx(unsigned *eax, unsigned *ebx, unsigned *ecx, unsigned *edx) + { + asm ("cpuid" +@@ -1173,7 +1173,7 @@ void FAST_FUNC sha1_begin(sha1_ctx_t *ctx) + ctx->total64 = 0; + ctx->process_block = sha1_process_block64; + #if ENABLE_SHA1_HWACCEL +-# if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) ++# if defined(__GNUC__) && defined(__x86_64__) + { + if (!shaNI) { + unsigned eax = 7, ebx = ebx, ecx = 0, edx = edx; +@@ -1227,7 +1227,7 @@ void FAST_FUNC sha256_begin(sha256_ctx_t *ctx) + /*ctx->total64 = 0; - done by prepending two 32-bit zeros to init256 */ + ctx->process_block = sha256_process_block64; + #if ENABLE_SHA256_HWACCEL +-# if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) ++# if defined(__GNUC__) && defined(__x86_64__) + { + if (!shaNI) { + unsigned eax = 7, ebx = ebx, ecx = 0, edx = edx;
