[oe-commits] Roman Khimov : busybox: add suport for FEATURE_INDIVIDUAL setup

git version control git at git.openembedded.org
Thu Jul 15 18:03:30 UTC 2010


Module: openembedded.git
Branch: org.openembedded.dev
Commit: df3efe328e5c3c59bc803588630371fa3417a282
URL:    http://gitweb.openembedded.net/?p=openembedded.git&a=commit;h=df3efe328e5c3c59bc803588630371fa3417a282

Author: Roman Khimov <khimov at altell.ru>
Date:   Wed Jul  7 00:38:54 2010 +0000

busybox: add suport for FEATURE_INDIVIDUAL setup

Where each applet is installed as a tiny binary linked against shared
libbusybox.

Signed-off-by: Roman I Khimov <khimov at altell.ru>

---

 recipes/busybox/busybox.inc |   74 ++++++++++++++++++++++++++++++++++++-------
 1 files changed, 62 insertions(+), 12 deletions(-)

diff --git a/recipes/busybox/busybox.inc b/recipes/busybox/busybox.inc
index 8bdb511..a64c031 100644
--- a/recipes/busybox/busybox.inc
+++ b/recipes/busybox/busybox.inc
@@ -11,7 +11,7 @@ LICENSE = "GPLv2"
 SECTION = "base"
 PRIORITY = "required"
 
-INC_PR = "r31"
+INC_PR = "r32"
 
 SRC_URI = "\
   file://busybox-cron \
@@ -135,15 +135,35 @@ do_install () {
 
 	install -d ${D}${sysconfdir}/init.d
 
-	# Install /bin/busybox, and the /bin/sh link so the postinst script
-	# can run. Let update-alternatives handle the rest.
-	install -d ${D}${base_bindir}
-	if grep -q "CONFIG_FEATURE_SUID=y" ${WORKDIR}/defconfig; then
-		install -m 4755 ${S}/busybox ${D}${base_bindir}
+	if ! grep -q "CONFIG_FEATURE_INDIVIDUAL=y" ${WORKDIR}/defconfig; then
+		# Install /bin/busybox, and the /bin/sh link so the postinst script
+		# can run. Let update-alternatives handle the rest.
+		install -d ${D}${base_bindir}
+		if grep -q "CONFIG_FEATURE_SUID=y" ${WORKDIR}/defconfig; then
+			install -m 4755 ${S}/busybox ${D}${base_bindir}
+		else
+			install -m 0755 ${S}/busybox ${D}${base_bindir}
+		fi
+		ln -sf busybox ${D}${base_bindir}/sh
 	else
-		install -m 0755 ${S}/busybox ${D}${base_bindir}
+		install -d ${D}${base_bindir} ${D}${base_sbindir}
+		install -d ${D}${libdir} ${D}${bindir} ${D}${sbindir}
+		cat busybox.links | while read FILE; do
+			NAME=`basename "$FILE"`
+			install -m 0755 "0_lib/$NAME" "${D}$FILE.${PN}"
+		done
+		# add suid bit where needed
+		for i in `grep -E "APPLET.*_BB_SUID_((MAYBE|REQUIRE))" include/applets.h | grep -v _BB_SUID_DROP | cut -f 3 -d '(' | cut -f 1 -d ','`; do
+			find ${D} -name $i.${PN} -exec chmod a+s {} \;
+		done
+		install -m 0755 0_lib/libbusybox.so.${PV} ${D}${libdir}/libbusybox.so.${PV}
+		ln -sf sh.${PN} ${D}${base_bindir}/sh
+		ln -sf ln.${PN} ${D}${base_bindir}/ln
+		ln -sf test.${PN} ${D}${bindir}/test
+		if [ -f ${D}/linuxrc.${PN} ]; then
+			mv ${D}/linuxrc.${PN} ${D}/linuxrc
+		fi
 	fi
-	ln -sf busybox ${D}${base_bindir}/sh
 
 	if grep -q "CONFIG_SYSLOGD=y" ${WORKDIR}/defconfig; then
 		install -m 0755 ${WORKDIR}/syslog ${D}${sysconfdir}/init.d/syslog.${PN}
@@ -181,12 +201,42 @@ pkg_postinst_${PN} () {
 	# so the update-alternatives script will get the utilities it needs
 	# (update-alternatives have no problem replacing links later anyway)
 	test -n 2> /dev/null || alias test='busybox test'
-	if test "x$D" = "x"; then while read link; do if test ! -h "$link"; then case "$link" in /*/*/*) to="../../bin/busybox";; /bin/*) to="busybox";; /*/*) to="../bin/busybox";; /*) to="/bin/busybox";; esac; busybox ln -s $to $link; fi; done </etc/busybox.links; fi
+	ln --help >/dev/null 2>&1 || alias ln='busybox ln'
+	if test "x$D" = "x"; then
+		while read link; do
+			if test ! -h "$link"; then
+				if test -f "$link.busybox"; then
+					to="$link.busybox"
+				else
+					case "$link" in
+						/*/*/*) to="../../bin/busybox";;
+						/bin/*) to="busybox";;
+						/*/*) to="../bin/busybox";;
+						/*) to="/bin/busybox";;
+					esac
+				fi
+				ln -s $to $link
+			fi
+		done </etc/busybox.links
+	fi
 
 	# This adds the links, remember that this has to work when building an image too, hence the $D
-    set +e
-	while read link; do case "$link" in /*/*/*) to="../../bin/busybox";; /bin/*) to="busybox";; /*/*) to="../bin/busybox";; /*) to="/bin/busybox";; esac; bn=`basename $link`; update-alternatives --install $link $bn $to 50; done <$D/etc/busybox.links
-    set -e
+	set +e
+	while read link; do
+		if test -f "$D$link.${PN}"; then
+			to="$link.${PN}"
+		else
+			case "$link" in
+				/*/*/*) to="../../bin/busybox";;
+				/bin/*) to="busybox";;
+				/*/*) to="../bin/busybox";;
+				/*) to="/bin/busybox";;
+			esac
+		fi
+		bn=`basename $link`
+		update-alternatives --install $link $bn $to 50
+	done <$D/etc/busybox.links
+	set -e
 }
 
 pkg_postinst_${PN}-mountall () {





More information about the Openembedded-commits mailing list