blob: d08fa8d3d96bda91f4fd2999a844ace302759101 [file] [log] [blame]
Patrick Williamsc124f4f2015-09-15 14:41:29 -05001SUMMARY = "Tiny versions of many common UNIX utilities in a single small executable"
2DESCRIPTION = "BusyBox combines tiny versions of many common UNIX utilities into a single small executable. It provides minimalist replacements for most of the utilities you usually find in GNU fileutils, shellutils, etc. The utilities in BusyBox generally have fewer options than their full-featured GNU cousins; however, the options that are included provide the expected functionality and behave very much like their GNU counterparts. BusyBox provides a fairly complete POSIX environment for any small or embedded system."
3HOMEPAGE = "http://www.busybox.net"
4BUGTRACKER = "https://bugs.busybox.net/"
5
Brad Bishop1a4b7ee2018-12-16 17:11:34 -08006DEPENDS += "kern-tools-native virtual/crypt"
Patrick Williamsc124f4f2015-09-15 14:41:29 -05007
8# bzip2 applet in busybox is based on lightly-modified bzip2 source
9# the GPL is version 2 only
10LICENSE = "GPLv2 & bzip2"
11LIC_FILES_CHKSUM = "file://LICENSE;md5=de10de48642ab74318e893a61105afbb"
12
13SECTION = "base"
14
15# Whether to split the suid apps into a seperate binary
16BUSYBOX_SPLIT_SUID ?= "1"
17
18export EXTRA_CFLAGS = "${CFLAGS}"
19export EXTRA_LDFLAGS = "${LDFLAGS}"
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050020
Patrick Williamsc0f7c042017-02-23 20:41:17 -060021EXTRA_OEMAKE = "CC='${CC}' LD='${CCLD}' V=1 ARCH=${TARGET_ARCH} CROSS_COMPILE=${TARGET_PREFIX} SKIP_STRIP=y HOSTCC='${BUILD_CC}' HOSTCPP='${BUILD_CPP}'"
Patrick Williamsc124f4f2015-09-15 14:41:29 -050022
23PACKAGES =+ "${PN}-httpd ${PN}-udhcpd ${PN}-udhcpc ${PN}-syslog ${PN}-mdev ${PN}-hwclock"
24
25FILES_${PN}-httpd = "${sysconfdir}/init.d/busybox-httpd /srv/www"
26FILES_${PN}-syslog = "${sysconfdir}/init.d/syslog* ${sysconfdir}/syslog-startup.conf* ${sysconfdir}/syslog.conf* ${systemd_unitdir}/system/syslog.service ${sysconfdir}/default/busybox-syslog"
27FILES_${PN}-mdev = "${sysconfdir}/init.d/mdev ${sysconfdir}/mdev.conf ${sysconfdir}/mdev/*"
28FILES_${PN}-udhcpd = "${sysconfdir}/init.d/busybox-udhcpd"
29FILES_${PN}-udhcpc = "${sysconfdir}/udhcpc.d ${datadir}/udhcpc"
30FILES_${PN}-hwclock = "${sysconfdir}/init.d/hwclock.sh"
31
32INITSCRIPT_PACKAGES = "${PN}-httpd ${PN}-syslog ${PN}-udhcpd ${PN}-mdev ${PN}-hwclock"
33
34INITSCRIPT_NAME_${PN}-httpd = "busybox-httpd"
35INITSCRIPT_NAME_${PN}-hwclock = "hwclock.sh"
36INITSCRIPT_NAME_${PN}-mdev = "mdev"
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050037INITSCRIPT_PARAMS_${PN}-mdev = "start 04 S ."
Patrick Williamsc124f4f2015-09-15 14:41:29 -050038INITSCRIPT_NAME_${PN}-syslog = "syslog"
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050039INITSCRIPT_NAME_${PN}-udhcpd = "busybox-udhcpd"
Patrick Williamsc124f4f2015-09-15 14:41:29 -050040
41SYSTEMD_PACKAGES = "${PN}-syslog"
Brad Bishopd7bf8c12018-02-25 22:55:05 -050042SYSTEMD_SERVICE_${PN}-syslog = "${@bb.utils.contains('SRC_URI', 'file://syslog.cfg', 'busybox-syslog.service', '', d)}"
Patrick Williamsc124f4f2015-09-15 14:41:29 -050043
Brad Bishop1a4b7ee2018-12-16 17:11:34 -080044RDEPENDS_${PN}-syslog = "busybox"
Brad Bishopd7bf8c12018-02-25 22:55:05 -050045CONFFILES_${PN}-syslog = "${sysconfdir}/syslog-startup.conf"
46RCONFLICTS_${PN}-syslog = "rsyslog sysklogd syslog-ng"
47
Patrick Williamsc124f4f2015-09-15 14:41:29 -050048CONFFILES_${PN}-mdev = "${sysconfdir}/mdev.conf"
49
Brad Bishop1a4b7ee2018-12-16 17:11:34 -080050RRECOMMENDS_${PN} = "${PN}-udhcpc"
Patrick Williamsc124f4f2015-09-15 14:41:29 -050051
Brad Bishop00111322018-04-01 22:23:53 -040052RDEPENDS_${PN} = "${@["", "busybox-inittab"][(d.getVar('VIRTUAL-RUNTIME_init_manager') == 'busybox')]}"
53
Patrick Williamsc124f4f2015-09-15 14:41:29 -050054inherit cml1 systemd update-rc.d ptest
55
Brad Bishop19323692019-04-05 15:28:33 -040056# busybox's unzip test case needs zip command, which busybox itself does not provide
57RDEPENDS_${PN}-ptest = "zip"
58
Patrick Williamsc124f4f2015-09-15 14:41:29 -050059# internal helper
60def busybox_cfg(feature, tokens, cnf, rem):
Brad Bishopa5c52ff2018-11-23 10:55:50 +130061 if type(tokens) == type(""):
62 tokens = [tokens]
63 rem.extend(['/^[# ]*' + token + '[ =]/d' for token in tokens])
64 if feature:
65 cnf.extend([token + '=y' for token in tokens])
66 else:
67 cnf.extend(['# ' + token + ' is not set' for token in tokens])
Patrick Williamsc124f4f2015-09-15 14:41:29 -050068
69# Map distro features to config settings
70def features_to_busybox_settings(d):
Brad Bishopa5c52ff2018-11-23 10:55:50 +130071 cnf, rem = ([], [])
72 busybox_cfg(bb.utils.contains('DISTRO_FEATURES', 'ipv6', True, False, d), 'CONFIG_FEATURE_IPV6', cnf, rem)
73 busybox_cfg(True, 'CONFIG_LFS', cnf, rem)
74 busybox_cfg(True, 'CONFIG_FDISK_SUPPORT_LARGE_DISKS', cnf, rem)
75 busybox_cfg(bb.utils.contains('DISTRO_FEATURES', 'nls', True, False, d), 'CONFIG_LOCALE_SUPPORT', cnf, rem)
76 busybox_cfg(bb.utils.contains('DISTRO_FEATURES', 'ipv4', True, False, d), 'CONFIG_FEATURE_IFUPDOWN_IPV4', cnf, rem)
77 busybox_cfg(bb.utils.contains('DISTRO_FEATURES', 'ipv6', True, False, d), 'CONFIG_FEATURE_IFUPDOWN_IPV6', cnf, rem)
Brad Bishop19323692019-04-05 15:28:33 -040078 busybox_cfg(bb.utils.contains_any('DISTRO_FEATURES', 'bluetooth wifi', True, False, d), 'CONFIG_RFKILL', cnf, rem)
Brad Bishopa5c52ff2018-11-23 10:55:50 +130079 return "\n".join(cnf), "\n".join(rem)
Patrick Williamsc124f4f2015-09-15 14:41:29 -050080
Brad Bishopd7bf8c12018-02-25 22:55:05 -050081# X, Y = ${@features_to_busybox_settings(d)}
Patrick Williamsc124f4f2015-09-15 14:41:29 -050082# unfortunately doesn't seem to work with bitbake, workaround:
83def features_to_busybox_conf(d):
Brad Bishopa5c52ff2018-11-23 10:55:50 +130084 cnf, rem = features_to_busybox_settings(d)
85 return cnf
Patrick Williamsc124f4f2015-09-15 14:41:29 -050086def features_to_busybox_del(d):
Brad Bishopa5c52ff2018-11-23 10:55:50 +130087 cnf, rem = features_to_busybox_settings(d)
88 return rem
Patrick Williamsc124f4f2015-09-15 14:41:29 -050089
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050090configmangle = '/CONFIG_EXTRA_CFLAGS/d; \
Patrick Williamsc124f4f2015-09-15 14:41:29 -050091 '
92OE_FEATURES := "${@features_to_busybox_conf(d)}"
93OE_DEL := "${@features_to_busybox_del(d)}"
94DO_IPv4 := "${@bb.utils.contains('DISTRO_FEATURES', 'ipv4', 1, 0, d)}"
95DO_IPv6 := "${@bb.utils.contains('DISTRO_FEATURES', 'ipv6', 1, 0, d)}"
96
97python () {
98 if "${OE_DEL}":
99 d.setVar('configmangle_append', "${OE_DEL}" + "\n")
100 if "${OE_FEATURES}":
101 d.setVar('configmangle_append',
102 "/^### DISTRO FEATURES$/a\\\n%s\n\n" %
103 ("\\n".join((d.expand("${OE_FEATURES}").split("\n")))))
104 d.setVar('configmangle_append',
105 "/^### CROSS$/a\\\n%s\n" %
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500106 ("\\n".join(["CONFIG_EXTRA_CFLAGS=\"${CFLAGS} ${HOST_CC_ARCH}\""
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500107 ])
108 ))
109}
110
111do_prepare_config () {
Brad Bishop316dfdd2018-06-25 12:45:53 -0400112 if [ "${BUILD_REPRODUCIBLE_BINARIES}" = "1" ]; then
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500113 export KCONFIG_NOTIMESTAMP=1
114 fi
Patrick Williamsf1e5d692016-03-30 15:21:19 -0500115 sed -e '/CONFIG_STATIC/d' \
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500116 < ${WORKDIR}/defconfig > ${S}/.config
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500117 echo "# CONFIG_STATIC is not set" >> .config
118 for i in 'CROSS' 'DISTRO FEATURES'; do echo "### $i"; done >> \
119 ${S}/.config
120 sed -i -e '${configmangle}' ${S}/.config
121 if test ${DO_IPv4} -eq 0 && test ${DO_IPv6} -eq 0; then
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800122 # disable networking applets
123 mv ${S}/.config ${S}/.config.oe-tmp
124 awk 'BEGIN{net=0}
125 /^# Networking Utilities/{net=1}
126 /^#$/{if(net){net=net+1}}
127 {if(net==2&&$0 !~ /^#/&&$1){print("# "$1" is not set")}else{print}}' \
128 ${S}/.config.oe-tmp > ${S}/.config
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500129 fi
130 sed -i 's/CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="-R -n"/CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="-R -b"/' ${S}/.config
Brad Bishopa34c0302019-09-23 22:34:48 -0400131 if [ -n "${DEBUG_PREFIX_MAP}" ]; then
132 sed -i 's|${DEBUG_PREFIX_MAP}||g' ${S}/.config
133 fi
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500134}
135
136# returns all the elements from the src uri that are .cfg files
137def find_cfgs(d):
138 sources=src_patches(d, True)
139 sources_list=[]
140 for s in sources:
141 if s.endswith('.cfg'):
142 sources_list.append(s)
143
144 return sources_list
145
146do_configure () {
Brad Bishopa34c0302019-09-23 22:34:48 -0400147 set -x
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500148 do_prepare_config
149 merge_config.sh -m .config ${@" ".join(find_cfgs(d))}
150 cml1_do_configure
151}
152
153do_compile() {
154 unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
Brad Bishop316dfdd2018-06-25 12:45:53 -0400155 if [ "${BUILD_REPRODUCIBLE_BINARIES}" = "1" ]; then
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500156 export KCONFIG_NOTIMESTAMP=1
157 fi
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500158 if [ "${BUSYBOX_SPLIT_SUID}" = "1" -a x`grep "CONFIG_FEATURE_INDIVIDUAL=y" .config` = x ]; then
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800159 # split the .config into two parts, and make two busybox binaries
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500160 if [ -e .config.orig ]; then
161 # Need to guard again an interrupted do_compile - restore any backup
162 cp .config.orig .config
163 fi
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500164 cp .config .config.orig
165 oe_runmake busybox.cfg.suid
166 oe_runmake busybox.cfg.nosuid
Brad Bishop316dfdd2018-06-25 12:45:53 -0400167
168 # workaround for suid bug 10346
169 if ! grep -q "CONFIG_SH_IS_NONE" busybox.cfg.nosuid; then
170 echo "CONFIG_SH_IS_NONE" >> busybox.cfg.suid
171 fi
172
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500173 for i in `cat busybox.cfg.suid busybox.cfg.nosuid`; do
174 echo "# $i is not set" >> .config.disable.apps
175 done
176 merge_config.sh -m .config.orig .config.disable.apps
177 cp .config .config.nonapps
178 for s in suid nosuid; do
179 cat busybox.cfg.$s | while read item; do
180 grep -w "$item" .config.orig
181 done > .config.app.$s
Brad Bishop316dfdd2018-06-25 12:45:53 -0400182
183 # workaround for suid bug 10346
184 if [ "$s" = "suid" ] ; then
185 sed "s/.*CONFIG_SH_IS_NONE.*$/CONFIG_SH_IS_NONE=y/" -i .config.app.suid
186 fi
187
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500188 merge_config.sh -m .config.nonapps .config.app.$s
189 oe_runmake busybox_unstripped
190 mv busybox_unstripped busybox.$s
191 oe_runmake busybox.links
Brad Bishope2d5b612018-11-23 10:55:50 +1300192 sort busybox.links > busybox.links.$s
193 rm busybox.links
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500194 done
Brad Bishop316dfdd2018-06-25 12:45:53 -0400195
196 # hard fail if sh is being linked to the suid busybox (detects bug 10346)
197 if grep -q -x "/bin/sh" busybox.links.suid; then
198 bbfatal "busybox suid binary incorrectly provides /bin/sh"
199 fi
200
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500201 # copy .config.orig back to .config, because the install process may check this file
202 cp .config.orig .config
203 # cleanup
204 rm .config.orig .config.app.suid .config.app.nosuid .config.disable.apps .config.nonapps
205 else
206 oe_runmake busybox_unstripped
207 cp busybox_unstripped busybox
208 oe_runmake busybox.links
209 fi
210}
211
212do_install () {
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500213 sed -i "s:^/bin/:BASE_BINDIR/:" busybox.links*
214 sed -i "s:^/sbin/:BASE_SBINDIR/:" busybox.links*
215 sed -i "s:^/usr/bin/:BINDIR/:" busybox.links*
216 sed -i "s:^/usr/sbin/:SBINDIR/:" busybox.links*
217
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800218 # Move arch/link to BINDIR to match coreutils
219 sed -i "s:^BASE_BINDIR/arch:BINDIR/arch:" busybox.links*
220 sed -i "s:^BASE_BINDIR/link:BINDIR/link:" busybox.links*
221
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500222 sed -i "s:^BASE_BINDIR/:${base_bindir}/:" busybox.links*
223 sed -i "s:^BASE_SBINDIR/:${base_sbindir}/:" busybox.links*
224 sed -i "s:^BINDIR/:${bindir}/:" busybox.links*
225 sed -i "s:^SBINDIR/:${sbindir}/:" busybox.links*
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500226
227 install -d ${D}${sysconfdir}/init.d
228
229 if ! grep -q "CONFIG_FEATURE_INDIVIDUAL=y" ${B}/.config; then
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500230 # Install ${base_bindir}/busybox, and the ${base_bindir}/sh link so the postinst script
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500231 # can run. Let update-alternatives handle the rest.
232 install -d ${D}${base_bindir}
233 if [ "${BUSYBOX_SPLIT_SUID}" = "1" ]; then
234 install -m 4755 ${B}/busybox.suid ${D}${base_bindir}
235 install -m 0755 ${B}/busybox.nosuid ${D}${base_bindir}
236 install -m 0644 ${S}/busybox.links.suid ${D}${sysconfdir}
237 install -m 0644 ${S}/busybox.links.nosuid ${D}${sysconfdir}
Brad Bishop316dfdd2018-06-25 12:45:53 -0400238 if grep -q "CONFIG_SH_IS_ASH=y" ${B}/.config; then
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500239 ln -sf busybox.nosuid ${D}${base_bindir}/sh
240 fi
241 # Keep a default busybox for people who want to invoke busybox directly.
242 # This is also useful for the on device upgrade. Because we want
243 # to use the busybox command in postinst.
244 ln -sf busybox.nosuid ${D}${base_bindir}/busybox
245 else
246 if grep -q "CONFIG_FEATURE_SUID=y" ${B}/.config; then
247 install -m 4755 ${B}/busybox ${D}${base_bindir}
248 else
249 install -m 0755 ${B}/busybox ${D}${base_bindir}
250 fi
251 install -m 0644 ${S}/busybox.links ${D}${sysconfdir}
Brad Bishop316dfdd2018-06-25 12:45:53 -0400252 if grep -q "CONFIG_SH_IS_ASH=y" ${B}/.config; then
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500253 ln -sf busybox ${D}${base_bindir}/sh
254 fi
255 # We make this symlink here to eliminate the error when upgrading together
256 # with busybox-syslog. Without this symlink, the opkg may think of the
257 # busybox.nosuid as obsolete and remove it, resulting in dead links like
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500258 # ${base_bindir}/sed -> ${base_bindir}/busybox.nosuid. This will make upgrading busybox-syslog fail.
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500259 # This symlink will be safely deleted in postinst, thus no negative effect.
260 ln -sf busybox ${D}${base_bindir}/busybox.nosuid
261 fi
262 else
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800263 install -d ${D}${base_bindir} ${D}${bindir} ${D}${libdir}
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500264 cat busybox.links | while read FILE; do
265 NAME=`basename "$FILE"`
266 install -m 0755 "0_lib/$NAME" "${D}$FILE.${BPN}"
267 done
268 # add suid bit where needed
269 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
270 find ${D} -name $i.${BPN} -exec chmod a+s {} \;
271 done
272 install -m 0755 0_lib/libbusybox.so.${PV} ${D}${libdir}/libbusybox.so.${PV}
273 ln -sf sh.${BPN} ${D}${base_bindir}/sh
274 ln -sf ln.${BPN} ${D}${base_bindir}/ln
275 ln -sf test.${BPN} ${D}${bindir}/test
276 if [ -f ${D}/linuxrc.${BPN} ]; then
277 mv ${D}/linuxrc.${BPN} ${D}/linuxrc
278 fi
279 install -m 0644 ${S}/busybox.links ${D}${sysconfdir}
280 fi
281
282 if grep -q "CONFIG_SYSLOGD=y" ${B}/.config; then
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500283 install -m 0755 ${WORKDIR}/syslog ${D}${sysconfdir}/init.d/syslog
284 install -m 644 ${WORKDIR}/syslog-startup.conf ${D}${sysconfdir}/syslog-startup.conf
285 install -m 644 ${WORKDIR}/syslog.conf ${D}${sysconfdir}/syslog.conf
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500286 fi
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800287 if grep -q "CONFIG_CROND=y" ${B}/.config; then
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500288 install -m 0755 ${WORKDIR}/busybox-cron ${D}${sysconfdir}/init.d/
289 fi
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800290 if grep -q "CONFIG_HTTPD=y" ${B}/.config; then
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500291 install -m 0755 ${WORKDIR}/busybox-httpd ${D}${sysconfdir}/init.d/
292 install -d ${D}/srv/www
293 fi
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800294 if grep -q "CONFIG_UDHCPD=y" ${B}/.config; then
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500295 install -m 0755 ${WORKDIR}/busybox-udhcpd ${D}${sysconfdir}/init.d/
296 fi
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800297 if grep -q "CONFIG_HWCLOCK=y" ${B}/.config; then
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500298 install -m 0755 ${WORKDIR}/hwclock.sh ${D}${sysconfdir}/init.d/
299 fi
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800300 if grep -q "CONFIG_UDHCPC=y" ${B}/.config; then
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500301 install -d ${D}${sysconfdir}/udhcpc.d
302 install -d ${D}${datadir}/udhcpc
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500303 install -m 0755 ${WORKDIR}/simple.script ${D}${sysconfdir}/udhcpc.d/50default
304 sed -i "s:/SBIN_DIR/:${base_sbindir}/:" ${D}${sysconfdir}/udhcpc.d/50default
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500305 install -m 0755 ${WORKDIR}/default.script ${D}${datadir}/udhcpc/default.script
306 fi
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800307 if grep -q "CONFIG_INETD=y" ${B}/.config; then
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500308 install -m 0755 ${WORKDIR}/inetd ${D}${sysconfdir}/init.d/inetd.${BPN}
309 sed -i "s:/usr/sbin/:${sbindir}/:" ${D}${sysconfdir}/init.d/inetd.${BPN}
310 install -m 0644 ${WORKDIR}/inetd.conf ${D}${sysconfdir}/
311 fi
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800312 if grep -q "CONFIG_MDEV=y" ${B}/.config; then
313 install -m 0755 ${WORKDIR}/mdev ${D}${sysconfdir}/init.d/mdev
314 if grep "CONFIG_FEATURE_MDEV_CONF=y" ${B}/.config; then
315 install -m 644 ${WORKDIR}/mdev.conf ${D}${sysconfdir}/mdev.conf
316 install -d ${D}${sysconfdir}/mdev
317 install -m 0755 ${WORKDIR}/find-touchscreen.sh ${D}${sysconfdir}/mdev
318 install -m 0755 ${WORKDIR}/mdev-mount.sh ${D}${sysconfdir}/mdev
319 fi
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500320 fi
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800321 if grep -q "CONFIG_INIT=y" ${B}/.config; then
Brad Bishopa34c0302019-09-23 22:34:48 -0400322 install -D -m 0755 ${WORKDIR}/rcS ${D}${sysconfdir}/init.d/rcS
323 install -D -m 0755 ${WORKDIR}/rcK ${D}${sysconfdir}/init.d/rcK
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800324 fi
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500325
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800326 if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
327 if grep -q "CONFIG_KLOGD=y" ${B}/.config; then
328 install -d ${D}${systemd_unitdir}/system
329 sed 's,@base_sbindir@,${base_sbindir},g' < ${WORKDIR}/busybox-klogd.service.in \
330 > ${D}${systemd_unitdir}/system/busybox-klogd.service
331 fi
Brad Bishopbba38f32018-08-23 16:11:46 +0800332
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800333 if grep -q "CONFIG_SYSLOGD=y" ${B}/.config; then
334 install -d ${D}${systemd_unitdir}/system
335 sed 's,@base_sbindir@,${base_sbindir},g' < ${WORKDIR}/busybox-syslog.service.in \
336 > ${D}${systemd_unitdir}/system/busybox-syslog.service
337 if [ ! -e ${D}${systemd_unitdir}/system/busybox-klogd.service ] ; then
338 sed -i '/klog/d' ${D}${systemd_unitdir}/system/busybox-syslog.service
339 fi
340 if [ -f ${WORKDIR}/busybox-syslog.default ] ; then
341 install -d ${D}${sysconfdir}/default
342 install -m 0644 ${WORKDIR}/busybox-syslog.default ${D}${sysconfdir}/default/busybox-syslog
343 fi
344 fi
345 fi
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500346
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800347 # Remove the sysvinit specific configuration file for systemd systems to avoid confusion
348 if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'false', 'true', d)}; then
349 rm -f ${D}${sysconfdir}/syslog-startup.conf
350 fi
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500351}
352
Brad Bishopc342db32019-05-15 21:57:59 -0400353PTEST_BINDIR = "1"
354
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500355do_install_ptest () {
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800356 cp -r ${B}/testsuite ${D}${PTEST_PATH}/
357 cp ${B}/.config ${D}${PTEST_PATH}/
358 ln -s /bin/busybox ${D}${PTEST_PATH}/busybox
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500359}
360
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500361inherit update-alternatives
362
363ALTERNATIVE_PRIORITY = "50"
364
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500365python do_package_prepend () {
366 # We need to load the full set of busybox provides from the /etc/busybox.links
367 # Use this to see the update-alternatives with the right information
368
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500369 dvar = d.getVar('D')
370 pn = d.getVar('PN')
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500371 def set_alternative_vars(links, target):
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500372 links = d.expand(links)
373 target = d.expand(target)
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500374 f = open('%s%s' % (dvar, links), 'r')
375 for alt_link_name in f:
376 alt_link_name = alt_link_name.strip()
377 alt_name = os.path.basename(alt_link_name)
378 # Match coreutils
379 if alt_name == '[':
380 alt_name = 'lbracket'
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800381 if alt_name == 'klogd' or alt_name == 'syslogd':
382 d.appendVar('ALTERNATIVE_%s-syslog' % (pn), ' ' + alt_name)
383 else:
384 d.appendVar('ALTERNATIVE_%s' % (pn), ' ' + alt_name)
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500385 d.setVarFlag('ALTERNATIVE_LINK_NAME', alt_name, alt_link_name)
386 if os.path.exists('%s%s' % (dvar, target)):
387 d.setVarFlag('ALTERNATIVE_TARGET', alt_name, target)
388 f.close()
389 return
390
391 if os.path.exists('%s/etc/busybox.links' % (dvar)):
392 set_alternative_vars("${sysconfdir}/busybox.links", "${base_bindir}/busybox")
393 else:
394 set_alternative_vars("${sysconfdir}/busybox.links.nosuid", "${base_bindir}/busybox.nosuid")
395 set_alternative_vars("${sysconfdir}/busybox.links.suid", "${base_bindir}/busybox.suid")
396}
397
Brad Bishop96ff1982019-08-19 13:50:42 -0400398# This part of code is dedicated to the on target upgrade problem. It's known
399# that if we don't make appropriate symlinks before update-alternatives calls,
400# there will be errors indicating missing commands such as 'sed'.
401# These symlinks will later be updated by update-alternatives calls.
402# The update-alternatives.bbclass' postinst script runs firstly before other
403# postinst, but this part of code needs run firstly, so add this funtion.
404python populate_packages_updatealternatives_append() {
405 postinst = """
406test -n 2 > /dev/null || alias test='busybox test'
407if test "x$D" = "x"; then
408 # Remove busybox.nosuid if it's a symlink, because this situation indicates
409 # that we're installing or upgrading to a one-binary busybox.
410 if test -h ${base_bindir}/busybox.nosuid; then
411 rm -f ${base_bindir}/busybox.nosuid
412 fi
413 for suffix in "" ".nosuid" ".suid"; do
414 if test -e ${sysconfdir}/busybox.links$suffix; then
415 while read link; do
416 if test ! -e "$link"; then
417 # we can use busybox here because even if we are using splitted busybox
418 # we've made a symlink from /bin/busybox to /bin/busybox.nosuid.
419 busybox rm -f $link
420 busybox ln -s "${base_bindir}/busybox$suffix" $link
421 fi
422 done < ${sysconfdir}/busybox.links$suffix
423 fi
424 done
425fi
426if grep -q "^${base_bindir}/bash$" $D${sysconfdir}/busybox.links*; then
427 grep -q "^${base_bindir}/bash$" $D${sysconfdir}/shells || echo ${base_bindir}/bash >> $D${sysconfdir}/shells
428fi
429
430"""
431 d.prependVar('pkg_postinst_%s' % pkg, postinst)
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500432}
433
434pkg_prerm_${PN} () {
435 # This is so you can make busybox commit suicide - removing busybox with no other packages
436 # providing its files, this will make update-alternatives work, but the update-rc.d part
437 # for syslog, httpd and/or udhcpd will fail if there is no other package providing sh
438 tmpdir=`mktemp -d /tmp/busyboxrm-XXXXXX`
439 ln -s ${base_bindir}/busybox $tmpdir/[
440 ln -s ${base_bindir}/busybox $tmpdir/test
441 ln -s ${base_bindir}/busybox $tmpdir/head
442 ln -s ${base_bindir}/busybox $tmpdir/sh
443 ln -s ${base_bindir}/busybox $tmpdir/basename
444 ln -s ${base_bindir}/busybox $tmpdir/echo
445 ln -s ${base_bindir}/busybox $tmpdir/mv
446 ln -s ${base_bindir}/busybox $tmpdir/ln
447 ln -s ${base_bindir}/busybox $tmpdir/dirname
448 ln -s ${base_bindir}/busybox $tmpdir/rm
449 ln -s ${base_bindir}/busybox $tmpdir/sed
450 ln -s ${base_bindir}/busybox $tmpdir/sort
451 ln -s ${base_bindir}/busybox $tmpdir/grep
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500452 ln -s ${base_bindir}/busybox $tmpdir/tail
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500453 export PATH=$PATH:$tmpdir
454}
455
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500456pkg_postrm_${PN} () {
457 if grep -q "^${base_bindir}/bash$" $D${sysconfdir}/busybox.links* && [ ! -e $D${base_bindir}/bash ]; then
458 printf "$(grep -v "^${base_bindir}/bash$" $D${sysconfdir}/shells)\n" > $D${sysconfdir}/shells
459 fi
460}
461
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500462pkg_prerm_${PN}-syslog () {
463 # remove syslog
464 if test "x$D" = "x"; then
465 if test "$1" = "upgrade" -o "$1" = "remove"; then
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600466 ${sysconfdir}/init.d/syslog stop || :
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500467 fi
468 fi
469}
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500470
Brad Bishop19323692019-04-05 15:28:33 -0400471RPROVIDES_${PN} += "${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', '/bin/sh /bin/ash', '', d)}"