From 9bb94598d7943ec099070396d730f15106f5ee9b Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Mon, 30 Apr 2012 01:59:09 +0000 Subject: Version bump. (Portage version: 2.2.0_alpha100/cvs/Linux x86_64) --- sys-apps/busybox/ChangeLog | 11 +- sys-apps/busybox/busybox-1.20.0.ebuild | 303 +++++++++++++++++++++ sys-apps/busybox/busybox-9999.ebuild | 303 +++++++++++++++++++++ .../busybox/files/busybox-1.20.0-buildsys.patch | 11 + sys-apps/busybox/files/busybox-1.20.0-getty.patch | 17 ++ .../busybox/files/busybox-1.20.0-lineedit.patch | 22 ++ sys-apps/busybox/files/busybox-1.20.0-sed.patch | 29 ++ sys-apps/busybox/files/ginit.c | 130 +++++++++ sys-apps/busybox/metadata.xml | 1 + 9 files changed, 826 insertions(+), 1 deletion(-) create mode 100644 sys-apps/busybox/busybox-1.20.0.ebuild create mode 100644 sys-apps/busybox/busybox-9999.ebuild create mode 100644 sys-apps/busybox/files/busybox-1.20.0-buildsys.patch create mode 100644 sys-apps/busybox/files/busybox-1.20.0-getty.patch create mode 100644 sys-apps/busybox/files/busybox-1.20.0-lineedit.patch create mode 100644 sys-apps/busybox/files/busybox-1.20.0-sed.patch create mode 100644 sys-apps/busybox/files/ginit.c (limited to 'sys-apps') diff --git a/sys-apps/busybox/ChangeLog b/sys-apps/busybox/ChangeLog index db46d9faa3c1..cfa4f10236a6 100644 --- a/sys-apps/busybox/ChangeLog +++ b/sys-apps/busybox/ChangeLog @@ -1,6 +1,15 @@ # ChangeLog for sys-apps/busybox # Copyright 1999-2012 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/sys-apps/busybox/ChangeLog,v 1.301 2012/04/30 00:13:13 vapier Exp $ +# $Header: /var/cvsroot/gentoo-x86/sys-apps/busybox/ChangeLog,v 1.302 2012/04/30 01:59:09 vapier Exp $ + +*busybox-1.20.0 (30 Apr 2012) +*busybox-9999 (30 Apr 2012) + + 30 Apr 2012; Mike Frysinger +busybox-1.20.0.ebuild, + +busybox-9999.ebuild, +files/busybox-1.20.0-buildsys.patch, + +files/busybox-1.20.0-getty.patch, +files/busybox-1.20.0-lineedit.patch, + +files/busybox-1.20.0-sed.patch, +files/ginit.c, metadata.xml: + Version bump. 30 Apr 2012; Mike Frysinger -busybox-1.17.4.ebuild, -busybox-1.18.4.ebuild, -busybox-1.18.5.ebuild, -busybox-1.19.0.ebuild, diff --git a/sys-apps/busybox/busybox-1.20.0.ebuild b/sys-apps/busybox/busybox-1.20.0.ebuild new file mode 100644 index 000000000000..b3cafd9e260e --- /dev/null +++ b/sys-apps/busybox/busybox-1.20.0.ebuild @@ -0,0 +1,303 @@ +# Copyright 1999-2012 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/sys-apps/busybox/busybox-1.20.0.ebuild,v 1.1 2012/04/30 01:59:09 vapier Exp $ + +EAPI="4" +inherit eutils flag-o-matic savedconfig toolchain-funcs + +################################################################################ +# BUSYBOX ALTERNATE CONFIG MINI-HOWTO +# +# Busybox can be modified in many different ways. Here's a few ways to do it: +# +# (1) Emerge busybox with FEATURES=keepwork so the work directory won't +# get erased afterwards. Add a definition like ROOT=/my/root/path to the +# start of the line if you're installing to somewhere else than the root +# directory. This command will save the default configuration to +# ${PORTAGE_CONFIGROOT} (or ${ROOT} if ${PORTAGE_CONFIGROOT} is not +# defined), and it will tell you that it has done this. Note the location +# where the config file was saved. +# +# FEATURES=keepwork USE=savedconfig emerge busybox +# +# (2) Go to the work directory and change the configuration of busybox using its +# menuconfig feature. +# +# cd /var/tmp/portage/busybox*/work/busybox-* +# make menuconfig +# +# (3) Save your configuration to the default location and copy it to the +# one of the locations listed in /usr/portage/eclass/savedconfig.eclass +# +# (4) Emerge busybox with USE=savedconfig to use the configuration file you +# just generated. +# +################################################################################ +# +# (1) Alternatively skip the above steps and simply emerge busybox without +# USE=savedconfig. +# +# (2) Edit the file it saves by hand. ${ROOT}"/etc/portage/savedconfig/${CATEGORY}/${PF} +# +# (3) Remerge busybox as using USE=savedconfig. +# +################################################################################ + +DESCRIPTION="Utilities for rescue and embedded systems" +HOMEPAGE="http://www.busybox.net/" +if [[ ${PV} == "9999" ]] ; then + MY_P=${PN} + EGIT_REPO_URI="git://busybox.net/busybox.git" + inherit git-2 +else + MY_P=${PN}-${PV/_/-} + SRC_URI="http://www.busybox.net/downloads/${MY_P}.tar.bz2" + #KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-linux ~x86-linux" +fi + +LICENSE="GPL-2" +SLOT="0" +IUSE="ipv6 make-symlinks mdev -pam selinux sep-usr static" +RESTRICT="test" + +RDEPEND="selinux? ( sys-libs/libselinux ) + pam? ( sys-libs/pam )" +DEPEND="${RDEPEND} + >=sys-kernel/linux-headers-2.6.39" + +S=${WORKDIR}/${MY_P} + +busybox_config_option() { + case $1 in + y) sed -i -e "s:.*\.*set:CONFIG_$2=y:g" .config;; + n) sed -i -e "s:CONFIG_$2=y:# CONFIG_$2 is not set:g" .config;; + *) use $1 \ + && busybox_config_option y $2 \ + || busybox_config_option n $2 + return 0 + ;; + esac + einfo $(grep "CONFIG_$2[= ]" .config || echo Could not find CONFIG_$2 ...) +} + +src_prepare() { + unset KBUILD_OUTPUT #88088 + append-flags -fno-strict-aliasing #310413 + use ppc64 && append-flags -mminimal-toc #130943 + + # patches go here! + epatch "${FILESDIR}"/${PN}-1.19.0-bb.patch + epatch "${FILESDIR}"/${P}-*.patch + cp "${FILESDIR}"/ginit.c init/ || die + + # flag cleanup + sed -i -r \ + -e 's:[[:space:]]?-(Werror|Os|falign-(functions|jumps|loops|labels)=1|fomit-frame-pointer)\>::g' \ + Makefile.flags || die + #sed -i '/bbsh/s:^//::' include/applets.h + sed -i '/^#error Aborting compilation./d' applets/applets.c || die + use elibc_glibc && sed -i 's:-Wl,--gc-sections::' Makefile + sed -i \ + -e "/^CROSS_COMPILE/s:=.*:= ${CHOST}-:" \ + -e "/^AR\>/s:=.*:= $(tc-getAR):" \ + -e "/^CC\>/s:=.*:= $(tc-getCC):" \ + -e "/^HOSTCC/s:=.*:= $(tc-getBUILD_CC):" \ + Makefile || die + sed -i \ + -e 's:-static-libgcc::' \ + Makefile.flags || die +} + +src_configure() { + # 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 "" | emake -j1 oldconfig > /dev/null + return 0 + else + ewarn "Could not locate user configfile, so we will save a default one" + fi + + # setup the config file + emake -j1 allyesconfig > /dev/null + # nommu forces a bunch of things off which we want on #387555 + busybox_config_option n NOMMU + sed -i '/^#/d' .config + yes "" | emake -j1 oldconfig >/dev/null + + # now turn off stuff we really don't want + busybox_config_option n DMALLOC + busybox_config_option n FEATURE_SUID_CONFIG + busybox_config_option n BUILD_AT_ONCE + busybox_config_option n BUILD_LIBBUSYBOX + busybox_config_option n MONOTONIC_SYSCALL + busybox_config_option n WERROR + + # If these are not set and we are using a uclibc/busybox setup + # all calls to system() will fail. + busybox_config_option y ASH + busybox_config_option n HUSH + + # disable ipv6 applets + if ! use ipv6; then + busybox_config_option n FEATURE_IPV6 + busybox_config_option n TRACEROUTE6 + busybox_config_option n PING6 + fi + + if use static && use pam ; then + ewarn "You cannot have USE='static pam'. Assuming static is more important." + fi + use static \ + && busybox_config_option n PAM \ + || busybox_config_option pam PAM + busybox_config_option static STATIC + + # all the debug options are compiler related, so punt them + 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 selinux SELINUX + + # this opt only controls mounting with /dev/null +} + +src_compile() { + unset KBUILD_OUTPUT #88088 + export SKIP_STRIP=y + + emake V=1 busybox + if ! use static ; then + cp .config{,.bak} + mv busybox_unstripped{,.bak} + use pam && busybox_config_option n PAM + emake CONFIG_STATIC=y busybox + mv busybox_unstripped bb + mv busybox_unstripped{.bak,} + mv .config{.bak,} + else + # keeps src_install simpler + ln busybox_unstripped bb + fi +} + +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 bb ginit + dosym /ginit /bin/bb + if use static ; then + dosym bb /bin/busybox + else + newbin busybox_unstripped busybox + fi + else + newbin busybox_unstripped busybox + if use static ; then + dosym busybox /bin/bb + else + dobin bb + fi + 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 + + exeinto /$(get_libdir)/mdev/ + doexe "${FILESDIR}"/mdev/* + + newinitd "${FILESDIR}"/mdev.rc.1 mdev + fi + + # bundle up the symlink files for use later + emake DESTDIR="${ED}" install + rm _install/bin/busybox + 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 + docinto txt + dodoc *.txt + docinto pod + dodoc *.pod + dohtml *.html + + cd ../examples + docinto examples + dodoc inittab depmod.pl *.conf *.script undeb unrpm +} + +pkg_preinst() { + if use make-symlinks && [[ ! ${VERY_BRAVE_OR_VERY_DUMB} == "yes" ]] && [[ ${ROOT} == "/" ]] ; then + ewarn "setting USE=make-symlinks and emerging to / is very dangerous." + ewarn "it WILL overwrite lots of system programs like: ls bash awk grep (bug 60805 for full list)." + ewarn "If you are creating a binary only and not merging this is probably ok." + ewarn "set env VERY_BRAVE_OR_VERY_DUMB=yes if this is really what you want." + die "silly options will destroy your system" + fi + + 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 + cp -vpPR _install/* "${ROOT}"/ || die "copying links for ${x} failed" + 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 +} diff --git a/sys-apps/busybox/busybox-9999.ebuild b/sys-apps/busybox/busybox-9999.ebuild new file mode 100644 index 000000000000..47ad0b37eb57 --- /dev/null +++ b/sys-apps/busybox/busybox-9999.ebuild @@ -0,0 +1,303 @@ +# Copyright 1999-2012 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/sys-apps/busybox/busybox-9999.ebuild,v 1.1 2012/04/30 01:59:09 vapier Exp $ + +EAPI="4" +inherit eutils flag-o-matic savedconfig toolchain-funcs + +################################################################################ +# BUSYBOX ALTERNATE CONFIG MINI-HOWTO +# +# Busybox can be modified in many different ways. Here's a few ways to do it: +# +# (1) Emerge busybox with FEATURES=keepwork so the work directory won't +# get erased afterwards. Add a definition like ROOT=/my/root/path to the +# start of the line if you're installing to somewhere else than the root +# directory. This command will save the default configuration to +# ${PORTAGE_CONFIGROOT} (or ${ROOT} if ${PORTAGE_CONFIGROOT} is not +# defined), and it will tell you that it has done this. Note the location +# where the config file was saved. +# +# FEATURES=keepwork USE=savedconfig emerge busybox +# +# (2) Go to the work directory and change the configuration of busybox using its +# menuconfig feature. +# +# cd /var/tmp/portage/busybox*/work/busybox-* +# make menuconfig +# +# (3) Save your configuration to the default location and copy it to the +# one of the locations listed in /usr/portage/eclass/savedconfig.eclass +# +# (4) Emerge busybox with USE=savedconfig to use the configuration file you +# just generated. +# +################################################################################ +# +# (1) Alternatively skip the above steps and simply emerge busybox without +# USE=savedconfig. +# +# (2) Edit the file it saves by hand. ${ROOT}"/etc/portage/savedconfig/${CATEGORY}/${PF} +# +# (3) Remerge busybox as using USE=savedconfig. +# +################################################################################ + +DESCRIPTION="Utilities for rescue and embedded systems" +HOMEPAGE="http://www.busybox.net/" +if [[ ${PV} == "9999" ]] ; then + MY_P=${PN} + EGIT_REPO_URI="git://busybox.net/busybox.git" + inherit git-2 +else + MY_P=${PN}-${PV/_/-} + SRC_URI="http://www.busybox.net/downloads/${MY_P}.tar.bz2" + KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-linux ~x86-linux" +fi + +LICENSE="GPL-2" +SLOT="0" +IUSE="ipv6 make-symlinks mdev -pam selinux sep-usr static" +RESTRICT="test" + +RDEPEND="selinux? ( sys-libs/libselinux ) + pam? ( sys-libs/pam )" +DEPEND="${RDEPEND} + >=sys-kernel/linux-headers-2.6.39" + +S=${WORKDIR}/${MY_P} + +busybox_config_option() { + case $1 in + y) sed -i -e "s:.*\.*set:CONFIG_$2=y:g" .config;; + n) sed -i -e "s:CONFIG_$2=y:# CONFIG_$2 is not set:g" .config;; + *) use $1 \ + && busybox_config_option y $2 \ + || busybox_config_option n $2 + return 0 + ;; + esac + einfo $(grep "CONFIG_$2[= ]" .config || echo Could not find CONFIG_$2 ...) +} + +src_prepare() { + unset KBUILD_OUTPUT #88088 + append-flags -fno-strict-aliasing #310413 + use ppc64 && append-flags -mminimal-toc #130943 + + # patches go here! + epatch "${FILESDIR}"/${PN}-1.19.0-bb.patch + epatch "${FILESDIR}"/${P}-*.patch + cp "${FILESDIR}"/ginit.c init/ || die + + # flag cleanup + sed -i -r \ + -e 's:[[:space:]]?-(Werror|Os|falign-(functions|jumps|loops|labels)=1|fomit-frame-pointer)\>::g' \ + Makefile.flags || die + #sed -i '/bbsh/s:^//::' include/applets.h + sed -i '/^#error Aborting compilation./d' applets/applets.c || die + use elibc_glibc && sed -i 's:-Wl,--gc-sections::' Makefile + sed -i \ + -e "/^CROSS_COMPILE/s:=.*:= ${CHOST}-:" \ + -e "/^AR\>/s:=.*:= $(tc-getAR):" \ + -e "/^CC\>/s:=.*:= $(tc-getCC):" \ + -e "/^HOSTCC/s:=.*:= $(tc-getBUILD_CC):" \ + Makefile || die + sed -i \ + -e 's:-static-libgcc::' \ + Makefile.flags || die +} + +src_configure() { + # 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 "" | emake -j1 oldconfig > /dev/null + return 0 + else + ewarn "Could not locate user configfile, so we will save a default one" + fi + + # setup the config file + emake -j1 allyesconfig > /dev/null + # nommu forces a bunch of things off which we want on #387555 + busybox_config_option n NOMMU + sed -i '/^#/d' .config + yes "" | emake -j1 oldconfig >/dev/null + + # now turn off stuff we really don't want + busybox_config_option n DMALLOC + busybox_config_option n FEATURE_SUID_CONFIG + busybox_config_option n BUILD_AT_ONCE + busybox_config_option n BUILD_LIBBUSYBOX + busybox_config_option n MONOTONIC_SYSCALL + busybox_config_option n WERROR + + # If these are not set and we are using a uclibc/busybox setup + # all calls to system() will fail. + busybox_config_option y ASH + busybox_config_option n HUSH + + # disable ipv6 applets + if ! use ipv6; then + busybox_config_option n FEATURE_IPV6 + busybox_config_option n TRACEROUTE6 + busybox_config_option n PING6 + fi + + if use static && use pam ; then + ewarn "You cannot have USE='static pam'. Assuming static is more important." + fi + use static \ + && busybox_config_option n PAM \ + || busybox_config_option pam PAM + busybox_config_option static STATIC + + # all the debug options are compiler related, so punt them + 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 selinux SELINUX + + # this opt only controls mounting with /dev/null +} + +src_compile() { + unset KBUILD_OUTPUT #88088 + export SKIP_STRIP=y + + emake V=1 busybox + if ! use static ; then + cp .config{,.bak} + mv busybox_unstripped{,.bak} + use pam && busybox_config_option n PAM + emake CONFIG_STATIC=y busybox + mv busybox_unstripped bb + mv busybox_unstripped{.bak,} + mv .config{.bak,} + else + # keeps src_install simpler + ln busybox_unstripped bb + fi +} + +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 bb ginit + dosym /ginit /bin/bb + if use static ; then + dosym bb /bin/busybox + else + newbin busybox_unstripped busybox + fi + else + newbin busybox_unstripped busybox + if use static ; then + dosym busybox /bin/bb + else + dobin bb + fi + 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 + + exeinto /$(get_libdir)/mdev/ + doexe "${FILESDIR}"/mdev/* + + newinitd "${FILESDIR}"/mdev.rc.1 mdev + fi + + # bundle up the symlink files for use later + emake DESTDIR="${ED}" install + rm _install/bin/busybox + 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 + docinto txt + dodoc *.txt + docinto pod + dodoc *.pod + dohtml *.html + + cd ../examples + docinto examples + dodoc inittab depmod.pl *.conf *.script undeb unrpm +} + +pkg_preinst() { + if use make-symlinks && [[ ! ${VERY_BRAVE_OR_VERY_DUMB} == "yes" ]] && [[ ${ROOT} == "/" ]] ; then + ewarn "setting USE=make-symlinks and emerging to / is very dangerous." + ewarn "it WILL overwrite lots of system programs like: ls bash awk grep (bug 60805 for full list)." + ewarn "If you are creating a binary only and not merging this is probably ok." + ewarn "set env VERY_BRAVE_OR_VERY_DUMB=yes if this is really what you want." + die "silly options will destroy your system" + fi + + 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 + cp -vpPR _install/* "${ROOT}"/ || die "copying links for ${x} failed" + 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 +} diff --git a/sys-apps/busybox/files/busybox-1.20.0-buildsys.patch b/sys-apps/busybox/files/busybox-1.20.0-buildsys.patch new file mode 100644 index 000000000000..b9d2a5e83539 --- /dev/null +++ b/sys-apps/busybox/files/busybox-1.20.0-buildsys.patch @@ -0,0 +1,11 @@ +--- busybox-1.20.0/archival/libarchive/Kbuild.src ++++ busybox-1.20.0-buildsys/archival/libarchive/Kbuild.src +@@ -60,7 +60,7 @@ lib-$(CONFIG_FEATURE_SEAMLESS_GZ) + lib-$(CONFIG_FEATURE_SEAMLESS_BZ2) += open_transformer.o decompress_bunzip2.o + lib-$(CONFIG_FEATURE_SEAMLESS_LZMA) += open_transformer.o decompress_unlzma.o + lib-$(CONFIG_FEATURE_SEAMLESS_XZ) += open_transformer.o decompress_unxz.o +-lib-$(CONFIG_FEATURE_COMPRESS_USAGE) += decompress_bunzip2.o ++lib-$(CONFIG_FEATURE_COMPRESS_USAGE) += open_transformer.o decompress_bunzip2.o + lib-$(CONFIG_FEATURE_COMPRESS_BBCONFIG) += decompress_bunzip2.o + lib-$(CONFIG_FEATURE_TAR_TO_COMMAND) += data_extract_to_command.o + diff --git a/sys-apps/busybox/files/busybox-1.20.0-getty.patch b/sys-apps/busybox/files/busybox-1.20.0-getty.patch new file mode 100644 index 000000000000..ed52159ffe23 --- /dev/null +++ b/sys-apps/busybox/files/busybox-1.20.0-getty.patch @@ -0,0 +1,17 @@ +--- busybox-1.20.0/loginutils/getty.c ++++ busybox-1.20.0-getty/loginutils/getty.c +@@ -561,8 +561,14 @@ int getty_main(int argc UNUSED_PARAM, ch + */ + fd = open("/dev/tty", O_RDWR | O_NONBLOCK); + if (fd >= 0) { ++ /* TIOCNOTTY sends SIGHUP to the foreground ++ * process group - which may include us! ++ * Make sure to not die on it: ++ */ ++ sighandler_t old = signal(SIGHUP, SIG_IGN); + ioctl(fd, TIOCNOTTY); + close(fd); ++ signal(SIGHUP, old); + } + } + diff --git a/sys-apps/busybox/files/busybox-1.20.0-lineedit.patch b/sys-apps/busybox/files/busybox-1.20.0-lineedit.patch new file mode 100644 index 000000000000..ee236ffc8904 --- /dev/null +++ b/sys-apps/busybox/files/busybox-1.20.0-lineedit.patch @@ -0,0 +1,22 @@ +--- busybox-1.20.0/libbb/lineedit.c ++++ busybox-1.20.0-lineedit/libbb/lineedit.c +@@ -1352,8 +1352,7 @@ static void load_history(line_input_t *s + /* fill temp_h[], retaining only last MAX_HISTORY lines */ + memset(temp_h, 0, sizeof(temp_h)); + idx = 0; +- if (!ENABLE_FEATURE_EDITING_SAVE_ON_EXIT) +- st_parm->cnt_history_in_file = 0; ++ st_parm->cnt_history_in_file = 0; + while ((line = xmalloc_fgetline(fp)) != NULL) { + if (line[0] == '\0') { + free(line); +@@ -1361,8 +1360,7 @@ static void load_history(line_input_t *s + } + free(temp_h[idx]); + temp_h[idx] = line; +- if (!ENABLE_FEATURE_EDITING_SAVE_ON_EXIT) +- st_parm->cnt_history_in_file++; ++ st_parm->cnt_history_in_file++; + idx++; + if (idx == st_parm->max_history) + idx = 0; diff --git a/sys-apps/busybox/files/busybox-1.20.0-sed.patch b/sys-apps/busybox/files/busybox-1.20.0-sed.patch new file mode 100644 index 000000000000..70dc63f46754 --- /dev/null +++ b/sys-apps/busybox/files/busybox-1.20.0-sed.patch @@ -0,0 +1,29 @@ +--- busybox-1.20.0/editors/sed.c ++++ busybox-1.20.0-sed/editors/sed.c +@@ -743,7 +743,7 @@ static int do_subst_command(sed_cmd_t *s + */ + if (!G.regmatch[0].rm_so && !G.regmatch[0].rm_eo && match_count) { + pipe_putc(*line++); +- continue; ++ goto next; + } + + match_count++; +@@ -755,7 +755,7 @@ static int do_subst_command(sed_cmd_t *s + ) { + for (i = 0; i < G.regmatch[0].rm_eo; i++) + pipe_putc(*line++); +- continue; ++ goto next; + } + + /* print everything before the match */ +@@ -773,7 +773,7 @@ static int do_subst_command(sed_cmd_t *s + /* if we're not doing this globally, get out now */ + if (sed_cmd->which_match != 0) + break; +- ++ next: + if (*line == '\0') + break; + diff --git a/sys-apps/busybox/files/ginit.c b/sys-apps/busybox/files/ginit.c new file mode 100644 index 000000000000..b746b719edcb --- /dev/null +++ b/sys-apps/busybox/files/ginit.c @@ -0,0 +1,130 @@ +/* + * simple init to bootstrap sep-/usr + * + * Copyright (C) 2012 Mike Frysinger + * + * Licensed under GPLv2 or later + */ + +//applet:IF_INIT(APPLET(ginit, BB_DIR_SBIN, BB_SUID_DROP)) + +//kbuild:lib-$(CONFIG_GINIT) += ginit.o + +//config:config GINIT +//config: bool "ginit" +//config: default y +//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 _spawn_and_wait(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); \ + }) + + /* We need /proc in order to see what's already been mounted */ + if (access("/proc/mounts", F_OK) != 0) { + if (_spawn_and_wait("mount", "-n", "/proc")) + _spawn_and_wait("mount", "-n", "-t", "proc", "proc", "/proc"); + } + + /* Look up all the existing mount points */ + ismnted_dev = ismnted_sys = ismnted_usr = false; + mntlist = setmntent("/proc/mounts", "re"); + if (mntlist) { + while ((mntent = getmntent(mntlist))) { + if (!strcmp(mntent->mnt_dir, "/dev")) + ismnted_dev = true; + else if (!strcmp(mntent->mnt_dir, "/sys")) + ismnted_sys = true; + else if (!strcmp(mntent->mnt_dir, "/usr")) + ismnted_usr = true; + } + endmntent(mntlist); + } + + /* First setup basic /dev */ + if (!ismnted_dev) { + if (_spawn_and_wait("mount", "-n", "/dev")) + if (_spawn_and_wait("mount", "-n", "-t", "devtmpfs", "devtmpfs", "/dev")) + _spawn_and_wait("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 (!ismnted_sys) { + if (_spawn_and_wait("mount", "-n", "/sys")) + _spawn_and_wait("mount", "-n", "-t", "sysfs", "sysfs", "/sys"); + } else { + eprintf("%s appears to be mounted; skipping its setup\n", "/sys"); + } + _spawn_and_wait("mdev", "-s"); + } + + /* Then seed the stuff we care about */ + _spawn_and_wait("mkdir", "-p", "/dev/pts", "/dev/shm"); + + /* Then mount /usr */ + if (!ismnted_usr) { + _spawn_and_wait("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/sys-apps/busybox/metadata.xml b/sys-apps/busybox/metadata.xml index dba645e38ea8..f56c96462a5d 100644 --- a/sys-apps/busybox/metadata.xml +++ b/sys-apps/busybox/metadata.xml @@ -6,5 +6,6 @@ Create all the appropriate symlinks in /bin and /sbin. Create the appropriate symlink in /sbin and install mdev.conf and support files Support mounting nfs shares +Support a separate /usr without needing an initramfs by booting with init=/bbinit -- cgit v1.2.3-65-gdbad