diff --git a/.github/workflows/portage-stable-packages-list b/.github/workflows/portage-stable-packages-list index 7ea7b64a97..263fc25f23 100644 --- a/.github/workflows/portage-stable-packages-list +++ b/.github/workflows/portage-stable-packages-list @@ -581,6 +581,7 @@ sys-apps/acl sys-apps/attr sys-apps/azure-vm-utils sys-apps/bubblewrap +sys-apps/busybox sys-apps/checkpolicy sys-apps/config-site sys-apps/coreutils diff --git a/sdk_container/src/third_party/portage-stable/sys-apps/busybox/Manifest b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/Manifest new file mode 100644 index 0000000000..903c83e382 --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/Manifest @@ -0,0 +1 @@ +DIST busybox-1.36.1.tar.bz2 2525473 BLAKE2B e515825cb3ab1c520e16b9c2512e9fc72947366a72a0466bff59b507fdffbc78fc9d16b44a26116175fc7a429d849ad944b1bc379d36c6d3a0eb20969997336e SHA512 8c0c754c9ae04b5e6b23596283a7d3a4ef96225fe179f92d6f6a99c69c0caa95b1aa56c267f52d7c807f6cc69e1f0b7dd29a8ac624098f601738f8c0c57980d4 diff --git a/sdk_container/src/third_party/portage-stable/sys-apps/busybox/busybox-1.36.1-r3.ebuild b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/busybox-1.36.1-r3.ebuild new file mode 100644 index 0000000000..a3a784ee22 --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/busybox-1.36.1-r3.ebuild @@ -0,0 +1,388 @@ +# Copyright 1999-2025 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" + KEYWORDS="~alpha amd64 arm arm64 ~hppa ~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:.*\.*set:CONFIG_$1=y:g" ;; + n) expr="s:CONFIG_$1=y:# CONFIG_$1 is not set:g" ;; + *) expr="s:.*\.*: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.36.1-skip-dynamic-relocations.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 ::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 +Date: Tue, 21 Feb 2023 20:20:31 +0100 +Subject: fixdep: avoid underflow when end of entry doesn't coincide with EOF +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Bug: https://bugs.gentoo.org/893776 +Closes: https://bugs.busybox.net/show_bug.cgi?id=15326 +Signed-off-by: Arsen Arsenović +Signed-off-by: Denys Vlasenko +--- a/scripts/basic/fixdep.c ++++ b/scripts/basic/fixdep.c +@@ -338,6 +338,11 @@ void parse_dep_file(void *map, size_t len) + do p--; while (!isalnum((unsigned char)*p)); + p++; + } ++ if (p < m) { ++ /* we've consumed the last filename of this list ++ already. */ ++ break; ++ } + memcpy(s, m, p-m); s[p-m] = 0; + if (strrcmp(s, "include/autoconf.h") && + strrcmp(s, "arch/um/include/uml-config.h") && +-- +cgit v1.2.3 diff --git a/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/busybox-1.36.1-kernel-6.8.patch b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/busybox-1.36.1-kernel-6.8.patch new file mode 100644 index 0000000000..4f74d51bdc --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/busybox-1.36.1-kernel-6.8.patch @@ -0,0 +1,53 @@ +http://lists.busybox.net/pipermail/busybox/2024-March/090678.html +https://bugs.gentoo.org/926872 + +Linux v6.8-rc1 removed the definitions related to CBQ making tc fail to +build. Add some #ifdefs to handle this missing support. +--- a/networking/tc.c ++++ b/networking/tc.c +@@ -231,6 +231,13 @@ static int cbq_parse_opt(int argc, char **argv, struct nlmsghdr *n) + return 0; + } + #endif ++ ++#ifndef TCA_CBQ_MAX ++/* ++ * Linux v6.8-rc1~131^2~60^2^2 removed the uapi definitions for CBQ. ++ * See https://git.kernel.org/linus/33241dca48626 ++ */ ++#else + static int cbq_print_opt(struct rtattr *opt) + { + struct rtattr *tb[TCA_CBQ_MAX+1]; +@@ -322,6 +329,7 @@ static int cbq_print_opt(struct rtattr *opt) + done: + return 0; + } ++#endif + + static FAST_FUNC int print_qdisc( + const struct sockaddr_nl *who UNUSED_PARAM, +@@ -372,8 +380,10 @@ static FAST_FUNC int print_qdisc( + int qqq = index_in_strings(_q_, name); + if (qqq == 0) { /* pfifo_fast aka prio */ + prio_print_opt(tb[TCA_OPTIONS]); ++#ifdef TCA_CBQ_MAX + } else if (qqq == 1) { /* class based queuing */ + cbq_print_opt(tb[TCA_OPTIONS]); ++#endif + } else { + /* don't know how to print options for this qdisc */ + printf("(options for %s)", name); +@@ -442,9 +452,11 @@ static FAST_FUNC int print_class( + int qqq = index_in_strings(_q_, name); + if (qqq == 0) { /* pfifo_fast aka prio */ + /* nothing. */ /*prio_print_opt(tb[TCA_OPTIONS]);*/ ++#ifdef TCA_CBQ_MAX + } else if (qqq == 1) { /* class based queuing */ + /* cbq_print_copt() is identical to cbq_print_opt(). */ + cbq_print_opt(tb[TCA_OPTIONS]); ++#endif + } else { + /* don't know how to print options for this class */ + printf("(options for %s)", name); + diff --git a/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/busybox-1.36.1-skip-dynamic-relocations.patch b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/busybox-1.36.1-skip-dynamic-relocations.patch new file mode 100644 index 0000000000..4da0d4666e --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/busybox-1.36.1-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?= +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 +@@ -14,7 +14,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(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; diff --git a/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/crond.confd b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/crond.confd new file mode 100644 index 0000000000..7073662529 --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/crond.confd @@ -0,0 +1,2 @@ +# Config file for /etc/init.d/busybox-crond +CRONDARGS= diff --git a/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/crond.initd b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/crond.initd new file mode 100644 index 0000000000..9d81e7a4c9 --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/crond.initd @@ -0,0 +1,12 @@ +#!/sbin/openrc-run +# Copyright 1999-2021 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +command="/bin/busybox crond" +command_args="${CRONDARGS}" +pidfile="/run/crond.pid" + +depend() { + need clock logger + provide cron +} diff --git a/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/ginit.c b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/ginit.c new file mode 100644 index 0000000000..de98e4ac41 --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/ginit.c @@ -0,0 +1,124 @@ +/* + * simple init to bootstrap sep-/usr + * + * Copyright (C) 2012-2013 Mike Frysinger + * + * Licensed under GPLv2 or later + */ + +//applet:IF_GINIT(APPLET(ginit, BB_DIR_SBIN, BB_SUID_DROP)) + +//kbuild:lib-$(CONFIG_GINIT) += ginit.o + +//config:config GINIT +//config: bool "ginit" +//config: default y +//config: select MKDIR +//config: select MDEV +//config: select MOUNT +//config: select MOUNTPOINT +//config: help +//config: sep-/usr bootstrapper + +//usage:#define ginit_trivial_usage NOUSAGE_STR +//usage:#define ginit_full_usage "" + +#include "libbb.h" + +#define eprintf(fmt, args...) printf("%s" fmt, "sep-usr init: ", ## args) + +static void process_args(char **args) +{ + size_t i; + + eprintf("running: "); + for (i = 0; args[i]; ++i) { + /* String needs to be writable, so dupe it */ + args[i] = xstrdup(args[i]); + printf("'%s' ", args[i]); + } + printf("\n"); +} + +int ginit_main(int argc UNUSED_PARAM, char **argv) MAIN_EXTERNALLY_VISIBLE; +int ginit_main(int argc UNUSED_PARAM, char **argv) +{ + FILE *mntlist; + bool ismnted_dev, ismnted_sys, ismnted_usr; + struct mntent *mntent; + + /* + int fd = open("/dev/console", O_RDWR); + if (fd >= 0) { + dup2(fd, 0); + dup2(fd, 1); + dup2(fd, 2); + } + */ + + /* If given an argv[] with an applet name, run it instead. + * Makes recovering simple by doing: init=/ginit bb + */ + if (argv[1] && argv[1][0] != '/') { + eprintf("running user requested applet %s\n", argv[1]); + return spawn_and_wait(argv+1); + } + +#define saw(argv...) \ + ({ \ + static const char *args[] = { argv, NULL }; \ + /* These casts are fine -- see process_args for mem setup */ \ + process_args((void *)args); \ + spawn_and_wait((void *)args); \ + }) + + /* First setup basic /dev */ + if (saw("mountpoint", "-q", "/dev") != 0) { + /* Try /etc/fstab */ + if (saw("mount", "-n", "/dev")) + /* Then devtmpfs */ + if (saw("mount", "-n", "-t", "devtmpfs", "devtmpfs", "/dev")) + /* Finally normal tmpfs */ + saw("mount", "-n", "-t", "tmpfs", "dev", "/dev"); + } else { + eprintf("%s appears to be mounted; skipping its setup\n", "/dev"); + } + + /* If /dev is empty (e.g. tmpfs), run mdev to seed things */ + if (access("/dev/console", F_OK) != 0) { + if (saw("mountpoint", "-q", "/sys") != 0) { + if (saw("mount", "-n", "/sys")) + saw("mount", "-n", "-t", "sysfs", "sysfs", "/sys"); + } else { + eprintf("%s appears to be mounted; skipping its setup\n", "/sys"); + } + + /* Mount /proc as mdev will fork+exec /proc/self/exe */ + if (saw("mountpoint", "-q", "/proc") != 0) { + /* Try /etc/fstab */ + if (saw("mount", "-n", "/proc")) + saw("mount", "-n", "-t", "proc", "proc", "/proc"); + } + + saw("mdev", "-s"); + } + + /* Then seed the stuff we care about */ + saw("mkdir", "-p", "/dev/pts", "/dev/shm"); + + /* Then mount /usr */ + if (saw("mountpoint", "-q", "/usr") != 0) { + saw("mount", "-n", "/usr", "-o", "ro"); + } else { + eprintf("%s appears to be mounted; skipping its setup\n", "/usr"); + } + + /* Now that we're all done, exec the real init */ + if (!argv[1]) { + argv[0] = (void *)"/sbin/init"; + argv[1] = NULL; + } else + ++argv; + process_args(argv); + return execv(argv[0], argv); +} diff --git a/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/klogd.confd b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/klogd.confd new file mode 100644 index 0000000000..4c16096a4e --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/klogd.confd @@ -0,0 +1,9 @@ +# Config file for /etc/init.d/busybox-sysklogd + +# run "/sbin/klogd --help" to see all possible options. + +# activate if you need remote logging +#rc_need="net" + +# send warnings and above to the console +KLOGD_OPTS="-c 3" diff --git a/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/klogd.initd b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/klogd.initd new file mode 100644 index 0000000000..95d5eb030d --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/klogd.initd @@ -0,0 +1,11 @@ +#!/sbin/openrc-run +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +command="/bin/busybox klogd" +command_args="${KLOGD_OPTS}" +pidfile="/run/klogd.pid" + +depend() { + need clock hostname +} diff --git a/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/mdev.initd b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/mdev.initd new file mode 100644 index 0000000000..1145707439 --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/mdev.initd @@ -0,0 +1,52 @@ +#!/sbin/openrc-run +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +depend() +{ + provide dev + need dev-mount sysfs +} + +find_mdev() +{ + if [ -x /sbin/mdev ] ; then + echo "/sbin/mdev" + else + echo "/bin/busybox mdev" + fi +} + +populate_mdev() +{ + ebegin "Populating /dev with existing devices with mdev -s" + $(find_mdev) -s + eend $? + return 0 +} + +seed_dev() +{ + # copy over any persistent things + if [ -d /lib/mdev/devices ] ; then + cp -RPp /lib/mdev/devices/* /dev 2>/dev/null + fi +} + +start() +{ + seed_dev + + # Setup hotplugging (if possible) + if [ -e /proc/sys/kernel/hotplug ] ; then + ebegin "Setting up mdev as hotplug agent" + echo $(find_mdev) > /proc/sys/kernel/hotplug + eend 0 + fi + + if get_bootparam "nocoldplug" ; then + ewarn "Skipping mdev coldplug as requested in kernel cmdline" + else + populate_mdev + fi +} diff --git a/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/mdev/dvbdev b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/mdev/dvbdev new file mode 100644 index 0000000000..971b0efc90 --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/mdev/dvbdev @@ -0,0 +1,18 @@ +#!/bin/sh + +# MDEV=dvb0.demux1 -> ADAPTER=dvb0 -> N=0 +ADAPTER=${MDEV%.*} +N=${ADAPTER#dvb} +# MDEV=dvb0.demux1 -> DEVB_DEV=demux1 +DVB_DEV=${MDEV#*.} + +case "$ACTION" in + add|"") + mkdir -p "dvb/adapter${N}" + mv "${MDEV}" "dvb/adapter${N}/${DVB_DEV}" + ;; + remove) + rm -f "dvb/adapter${N}/${DVB_DEV}" + rmdir "dvb/adapter${N}" 2>/dev/null + rmdir dvb/ 2>/dev/null +esac diff --git a/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/mdev/ide_links b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/mdev/ide_links new file mode 100644 index 0000000000..dfb7c9cb46 --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/mdev/ide_links @@ -0,0 +1,23 @@ +#!/bin/sh + +[ -f /proc/ide/"${MDEV}"/media ] || exit + +media=$(cat /proc/ide/"${MDEV}"/media) +for i in "${media}" "${media}"[0-9]* ; do + if [ "$(readlink "$i" 2>/dev/null)" = "${MDEV}" ] ; then + LINK="$i" + break + fi +done + +# link exist, remove if necessary and exit +if [ "${LINK}" ] ; then + [ "${ACTION}" = remove ] && rm "${LINK}" + exit +fi + +# create a link +num=$(ls "${media}"[0-9]* 2>/dev/null | wc -l) +ln -sf "${MDEV}" "${media}${num}" +[ -e "${media}" ] || ln -sf "${MDEV}" "${media}" + diff --git a/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/mdev/usbdev b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/mdev/usbdev new file mode 100644 index 0000000000..eda3825df2 --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/mdev/usbdev @@ -0,0 +1,62 @@ +#!/bin/sh + +# script is buggy; until patched just do exit 0 +#exit 0 + +# add zeros to device or bus +add_zeros () { + case "$(echo "$1" | wc -L)" in + 1) echo "00$1" ;; + 2) echo "0$1" ;; + *) echo "$1" + esac + exit 0 +} + + +# bus and device dirs in /sys +USB_PATH=$(echo "${MDEV}" | sed -e 's/usbdev\([0-9]\).[0-9]/usb\1/') +USB_PATH=$(find /sys/devices -type d -name "${USB_PATH}") +USB_DEV_DIR=$(echo "${MDEV}" | sed -e 's/usbdev\([0-9]\).\([0-9]\)/\1-\2/') + +# dir names in /dev +BUS=$(add_zeros "$(echo "${MDEV}" | sed -e 's/^usbdev\([0-9]\).[0-9]/\1/')") +USB_DEV=$(add_zeros "$(echo "${MDEV}" | sed -e 's/^usbdev[0-9].\([0-9]\)/\1/')") + + +# try to load the proper driver for usb devices +case "${ACTION}" in + add|"") + # load usb bus driver + for i in "${USB_PATH}"/*/modalias ; do + modprobe "$(cat "$i")" 2>/dev/null + done + # load usb device driver if existent + if [ -d "${USB_PATH}/${USB_DEV_DIR}" ]; then + for i in "${USB_PATH}/${USB_DEV_DIR}"/*/modalias ; do + modprobe "$(cat "$i")" 2>/dev/null + done + fi + # move usb device file + mkdir -p "bus/usb/${BUS}" + mv "${MDEV}" "bus/usb/${BUS}/${USB_DEV}" + ;; + remove) + # unload device driver, if device dir is existent + if [ -d "${USB_PATH}/${USB_DEV_DIR}" ]; then + for i in "${USB_PATH}/${USB_DEV_DIR}"/*/modalias ; do + modprobe -r "$(cat "$i")" 2>/dev/null + done + fi + # unload usb bus driver. Does this make sense? + # what happens, if two usb devices are plugged in + # and one is removed? + for i in "${USB_PATH}"/*/modalias ; do + modprobe -r "$(cat "$i")" 2>/dev/null + done + # remove device file and possible empty dirs + rm -f "bus/usb/${BUS}/${USB_DEV}" + rmdir "bus/usb/${BUS}/" 2>/dev/null + rmdir bus/usb/ 2>/dev/null + rmdir bus/ 2>/dev/null +esac diff --git a/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/mdev/usbdisk_link b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/mdev/usbdisk_link new file mode 100644 index 0000000000..e42cc8bc90 --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/mdev/usbdisk_link @@ -0,0 +1,38 @@ +#!/bin/sh + +# NOTE: since mdev -s only provide $MDEV, don't depend on any hotplug vars. + +current=$(readlink usbdisk) + +if [ "${current}" = "${MDEV}" ] && [ "${ACTION}" = "remove" ]; then + rm -f usbdisk usba1 +fi +[ -n "${current}" ] && exit + +if [ -e /sys/block/"${MDEV}" ]; then + SYSDEV=$(readlink -f /sys/block/"${MDEV}"/device) + # if /sys device path contains '/usb[0-9]' then we assume its usb + # also, if it's a usb without partitions we require FAT + if [ "${SYSDEV##*/usb[0-9]}" != "${SYSDEV}" ]; then + # do not create link if there is not FAT + dd if=/dev/"${MDEV}" bs=512 count=1 2>/dev/null | strings | grep FAT >/dev/null || exit 0 + + ln -sf "${MDEV}" usbdisk + # keep this for compat. people have it in fstab + ln -sf "${MDEV}" usba1 + fi + +else + for i in /sys/block/*/"${MDEV}"; do + if [ -e "$i" ]; then + PARENT=$(dirname "$i") + SYSDEV=$(readlink -f "${PARENT}"/device) + if [ "${SYSDEV##*/usb[0-9]}" != "${SYSDEV}" ]; then + ln -sf "${MDEV}" usbdisk + # keep this for compat. people have it in fstab + ln -sf "${MDEV}" usba1 + fi + fi + done +fi + diff --git a/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/ntpd.confd b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/ntpd.confd new file mode 100644 index 0000000000..f50d4c2e91 --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/ntpd.confd @@ -0,0 +1,6 @@ +# Config file for /etc/init.d/busybox-ntpd + +# run "/sbin/ntpd --help" to see all possible options. + +# Get time from specified server and run in background +NTPD_OPTS="-N -p pool.ntp.org" diff --git a/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/ntpd.initd b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/ntpd.initd new file mode 100644 index 0000000000..dffea3bcde --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/ntpd.initd @@ -0,0 +1,12 @@ +#!/sbin/openrc-run +# Copyright 1999-2012 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +command="/bin/busybox ntpd" +command_args="${NTPD_OPTS}" +pidfile="/run/ntpd.pid" + +depend() { + use net dns logger + after ntp-client +} diff --git a/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/syslogd.confd b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/syslogd.confd new file mode 100644 index 0000000000..7df6885ced --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/syslogd.confd @@ -0,0 +1,9 @@ +# Config file for /etc/init.d/busybox-sysklogd + +# run "/sbin/syslogd --help" to see all possible options. + +# activate if you need remote logging +#rc_need="net" + +# Log to shared mem buffer (use logread to read it) +SYSLOGD_OPTS="-C128" diff --git a/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/syslogd.initd b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/syslogd.initd new file mode 100644 index 0000000000..b2ac5ac172 --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/syslogd.initd @@ -0,0 +1,12 @@ +#!/sbin/openrc-run +# Copyright 1999-2012 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +command="/bin/busybox syslogd" +command_args="${SYSLOGD_OPTS}" +pidfile="/run/syslogd.pid" + +depend() { + need clock hostname + provide logger +} diff --git a/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/watchdog.confd b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/watchdog.confd new file mode 100644 index 0000000000..bd6aec0a70 --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/watchdog.confd @@ -0,0 +1,9 @@ +# Config file for /etc/init.d/busybox-watchdog + +# run "/sbin/watchdog --help" to see all possible options. + +# Periodically write to watchdog device +WATCHDOG_OPTS="/dev/watchdog" + +# optionally set the nice-level +#SSD_NICELEVEL="-20" diff --git a/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/watchdog.initd b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/watchdog.initd new file mode 100644 index 0000000000..89043738a7 --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/files/watchdog.initd @@ -0,0 +1,7 @@ +#!/sbin/openrc-run +# Copyright 1999-2013 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +command="/bin/busybox watchdog" +command_args="${WATCHDOG_OPTS}" +pidfile="/run/watchdog.pid" diff --git a/sdk_container/src/third_party/portage-stable/sys-apps/busybox/metadata.xml b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/metadata.xml new file mode 100644 index 0000000000..21b8287c85 --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/sys-apps/busybox/metadata.xml @@ -0,0 +1,19 @@ + + + + +embedded@gentoo.org +Embedded Gentoo + + +Create all the appropriate symlinks in /bin and /sbin. +Enable math support in gawk (requires libm) +Create the appropriate symlink in /sbin and install mdev.conf and support files +Support a separate /usr without needing an initramfs by booting with init=/ginit +Make the system rescue shell (/bin/bb) static so you can recover even when glibc is broken +Support systemd + + +cpe:/a:busybox:busybox + +