blob: 49165d7f51b606e3e7ea748545afde3b733d38e9 [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 Bishopd7bf8c12018-02-25 22:55:05 -0500131 sed -i 's|${DEBUG_PREFIX_MAP}||g' ${S}/.config
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500132}
133
134# returns all the elements from the src uri that are .cfg files
135def find_cfgs(d):
136 sources=src_patches(d, True)
137 sources_list=[]
138 for s in sources:
139 if s.endswith('.cfg'):
140 sources_list.append(s)
141
142 return sources_list
143
144do_configure () {
145 do_prepare_config
146 merge_config.sh -m .config ${@" ".join(find_cfgs(d))}
147 cml1_do_configure
148}
149
150do_compile() {
151 unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
Brad Bishop316dfdd2018-06-25 12:45:53 -0400152 if [ "${BUILD_REPRODUCIBLE_BINARIES}" = "1" ]; then
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500153 export KCONFIG_NOTIMESTAMP=1
154 fi
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500155 if [ "${BUSYBOX_SPLIT_SUID}" = "1" -a x`grep "CONFIG_FEATURE_INDIVIDUAL=y" .config` = x ]; then
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800156 # split the .config into two parts, and make two busybox binaries
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500157 if [ -e .config.orig ]; then
158 # Need to guard again an interrupted do_compile - restore any backup
159 cp .config.orig .config
160 fi
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500161 cp .config .config.orig
162 oe_runmake busybox.cfg.suid
163 oe_runmake busybox.cfg.nosuid
Brad Bishop316dfdd2018-06-25 12:45:53 -0400164
165 # workaround for suid bug 10346
166 if ! grep -q "CONFIG_SH_IS_NONE" busybox.cfg.nosuid; then
167 echo "CONFIG_SH_IS_NONE" >> busybox.cfg.suid
168 fi
169
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500170 for i in `cat busybox.cfg.suid busybox.cfg.nosuid`; do
171 echo "# $i is not set" >> .config.disable.apps
172 done
173 merge_config.sh -m .config.orig .config.disable.apps
174 cp .config .config.nonapps
175 for s in suid nosuid; do
176 cat busybox.cfg.$s | while read item; do
177 grep -w "$item" .config.orig
178 done > .config.app.$s
Brad Bishop316dfdd2018-06-25 12:45:53 -0400179
180 # workaround for suid bug 10346
181 if [ "$s" = "suid" ] ; then
182 sed "s/.*CONFIG_SH_IS_NONE.*$/CONFIG_SH_IS_NONE=y/" -i .config.app.suid
183 fi
184
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500185 merge_config.sh -m .config.nonapps .config.app.$s
186 oe_runmake busybox_unstripped
187 mv busybox_unstripped busybox.$s
188 oe_runmake busybox.links
Brad Bishope2d5b612018-11-23 10:55:50 +1300189 sort busybox.links > busybox.links.$s
190 rm busybox.links
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500191 done
Brad Bishop316dfdd2018-06-25 12:45:53 -0400192
193 # hard fail if sh is being linked to the suid busybox (detects bug 10346)
194 if grep -q -x "/bin/sh" busybox.links.suid; then
195 bbfatal "busybox suid binary incorrectly provides /bin/sh"
196 fi
197
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500198 # copy .config.orig back to .config, because the install process may check this file
199 cp .config.orig .config
200 # cleanup
201 rm .config.orig .config.app.suid .config.app.nosuid .config.disable.apps .config.nonapps
202 else
203 oe_runmake busybox_unstripped
204 cp busybox_unstripped busybox
205 oe_runmake busybox.links
206 fi
207}
208
209do_install () {
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500210 sed -i "s:^/bin/:BASE_BINDIR/:" busybox.links*
211 sed -i "s:^/sbin/:BASE_SBINDIR/:" busybox.links*
212 sed -i "s:^/usr/bin/:BINDIR/:" busybox.links*
213 sed -i "s:^/usr/sbin/:SBINDIR/:" busybox.links*
214
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800215 # Move arch/link to BINDIR to match coreutils
216 sed -i "s:^BASE_BINDIR/arch:BINDIR/arch:" busybox.links*
217 sed -i "s:^BASE_BINDIR/link:BINDIR/link:" busybox.links*
218
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500219 sed -i "s:^BASE_BINDIR/:${base_bindir}/:" busybox.links*
220 sed -i "s:^BASE_SBINDIR/:${base_sbindir}/:" busybox.links*
221 sed -i "s:^BINDIR/:${bindir}/:" busybox.links*
222 sed -i "s:^SBINDIR/:${sbindir}/:" busybox.links*
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500223
224 install -d ${D}${sysconfdir}/init.d
225
226 if ! grep -q "CONFIG_FEATURE_INDIVIDUAL=y" ${B}/.config; then
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500227 # Install ${base_bindir}/busybox, and the ${base_bindir}/sh link so the postinst script
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500228 # can run. Let update-alternatives handle the rest.
229 install -d ${D}${base_bindir}
230 if [ "${BUSYBOX_SPLIT_SUID}" = "1" ]; then
231 install -m 4755 ${B}/busybox.suid ${D}${base_bindir}
232 install -m 0755 ${B}/busybox.nosuid ${D}${base_bindir}
233 install -m 0644 ${S}/busybox.links.suid ${D}${sysconfdir}
234 install -m 0644 ${S}/busybox.links.nosuid ${D}${sysconfdir}
Brad Bishop316dfdd2018-06-25 12:45:53 -0400235 if grep -q "CONFIG_SH_IS_ASH=y" ${B}/.config; then
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500236 ln -sf busybox.nosuid ${D}${base_bindir}/sh
237 fi
238 # Keep a default busybox for people who want to invoke busybox directly.
239 # This is also useful for the on device upgrade. Because we want
240 # to use the busybox command in postinst.
241 ln -sf busybox.nosuid ${D}${base_bindir}/busybox
242 else
243 if grep -q "CONFIG_FEATURE_SUID=y" ${B}/.config; then
244 install -m 4755 ${B}/busybox ${D}${base_bindir}
245 else
246 install -m 0755 ${B}/busybox ${D}${base_bindir}
247 fi
248 install -m 0644 ${S}/busybox.links ${D}${sysconfdir}
Brad Bishop316dfdd2018-06-25 12:45:53 -0400249 if grep -q "CONFIG_SH_IS_ASH=y" ${B}/.config; then
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500250 ln -sf busybox ${D}${base_bindir}/sh
251 fi
252 # We make this symlink here to eliminate the error when upgrading together
253 # with busybox-syslog. Without this symlink, the opkg may think of the
254 # busybox.nosuid as obsolete and remove it, resulting in dead links like
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500255 # ${base_bindir}/sed -> ${base_bindir}/busybox.nosuid. This will make upgrading busybox-syslog fail.
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500256 # This symlink will be safely deleted in postinst, thus no negative effect.
257 ln -sf busybox ${D}${base_bindir}/busybox.nosuid
258 fi
259 else
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800260 install -d ${D}${base_bindir} ${D}${bindir} ${D}${libdir}
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500261 cat busybox.links | while read FILE; do
262 NAME=`basename "$FILE"`
263 install -m 0755 "0_lib/$NAME" "${D}$FILE.${BPN}"
264 done
265 # add suid bit where needed
266 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
267 find ${D} -name $i.${BPN} -exec chmod a+s {} \;
268 done
269 install -m 0755 0_lib/libbusybox.so.${PV} ${D}${libdir}/libbusybox.so.${PV}
270 ln -sf sh.${BPN} ${D}${base_bindir}/sh
271 ln -sf ln.${BPN} ${D}${base_bindir}/ln
272 ln -sf test.${BPN} ${D}${bindir}/test
273 if [ -f ${D}/linuxrc.${BPN} ]; then
274 mv ${D}/linuxrc.${BPN} ${D}/linuxrc
275 fi
276 install -m 0644 ${S}/busybox.links ${D}${sysconfdir}
277 fi
278
279 if grep -q "CONFIG_SYSLOGD=y" ${B}/.config; then
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500280 install -m 0755 ${WORKDIR}/syslog ${D}${sysconfdir}/init.d/syslog
281 install -m 644 ${WORKDIR}/syslog-startup.conf ${D}${sysconfdir}/syslog-startup.conf
282 install -m 644 ${WORKDIR}/syslog.conf ${D}${sysconfdir}/syslog.conf
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500283 fi
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800284 if grep -q "CONFIG_CROND=y" ${B}/.config; then
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500285 install -m 0755 ${WORKDIR}/busybox-cron ${D}${sysconfdir}/init.d/
286 fi
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800287 if grep -q "CONFIG_HTTPD=y" ${B}/.config; then
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500288 install -m 0755 ${WORKDIR}/busybox-httpd ${D}${sysconfdir}/init.d/
289 install -d ${D}/srv/www
290 fi
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800291 if grep -q "CONFIG_UDHCPD=y" ${B}/.config; then
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500292 install -m 0755 ${WORKDIR}/busybox-udhcpd ${D}${sysconfdir}/init.d/
293 fi
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800294 if grep -q "CONFIG_HWCLOCK=y" ${B}/.config; then
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500295 install -m 0755 ${WORKDIR}/hwclock.sh ${D}${sysconfdir}/init.d/
296 fi
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800297 if grep -q "CONFIG_UDHCPC=y" ${B}/.config; then
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500298 install -d ${D}${sysconfdir}/udhcpc.d
299 install -d ${D}${datadir}/udhcpc
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500300 install -m 0755 ${WORKDIR}/simple.script ${D}${sysconfdir}/udhcpc.d/50default
301 sed -i "s:/SBIN_DIR/:${base_sbindir}/:" ${D}${sysconfdir}/udhcpc.d/50default
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500302 install -m 0755 ${WORKDIR}/default.script ${D}${datadir}/udhcpc/default.script
303 fi
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800304 if grep -q "CONFIG_INETD=y" ${B}/.config; then
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500305 install -m 0755 ${WORKDIR}/inetd ${D}${sysconfdir}/init.d/inetd.${BPN}
306 sed -i "s:/usr/sbin/:${sbindir}/:" ${D}${sysconfdir}/init.d/inetd.${BPN}
307 install -m 0644 ${WORKDIR}/inetd.conf ${D}${sysconfdir}/
308 fi
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800309 if grep -q "CONFIG_MDEV=y" ${B}/.config; then
310 install -m 0755 ${WORKDIR}/mdev ${D}${sysconfdir}/init.d/mdev
311 if grep "CONFIG_FEATURE_MDEV_CONF=y" ${B}/.config; then
312 install -m 644 ${WORKDIR}/mdev.conf ${D}${sysconfdir}/mdev.conf
313 install -d ${D}${sysconfdir}/mdev
314 install -m 0755 ${WORKDIR}/find-touchscreen.sh ${D}${sysconfdir}/mdev
315 install -m 0755 ${WORKDIR}/mdev-mount.sh ${D}${sysconfdir}/mdev
316 fi
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500317 fi
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800318 if grep -q "CONFIG_INIT=y" ${B}/.config; then
319 install -D -m 0777 ${WORKDIR}/rcS ${D}${sysconfdir}/init.d/rcS
320 install -D -m 0777 ${WORKDIR}/rcK ${D}${sysconfdir}/init.d/rcK
321 fi
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500322
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800323 if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
324 if grep -q "CONFIG_KLOGD=y" ${B}/.config; then
325 install -d ${D}${systemd_unitdir}/system
326 sed 's,@base_sbindir@,${base_sbindir},g' < ${WORKDIR}/busybox-klogd.service.in \
327 > ${D}${systemd_unitdir}/system/busybox-klogd.service
328 fi
Brad Bishopbba38f32018-08-23 16:11:46 +0800329
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800330 if grep -q "CONFIG_SYSLOGD=y" ${B}/.config; then
331 install -d ${D}${systemd_unitdir}/system
332 sed 's,@base_sbindir@,${base_sbindir},g' < ${WORKDIR}/busybox-syslog.service.in \
333 > ${D}${systemd_unitdir}/system/busybox-syslog.service
334 if [ ! -e ${D}${systemd_unitdir}/system/busybox-klogd.service ] ; then
335 sed -i '/klog/d' ${D}${systemd_unitdir}/system/busybox-syslog.service
336 fi
337 if [ -f ${WORKDIR}/busybox-syslog.default ] ; then
338 install -d ${D}${sysconfdir}/default
339 install -m 0644 ${WORKDIR}/busybox-syslog.default ${D}${sysconfdir}/default/busybox-syslog
340 fi
341 fi
342 fi
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500343
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800344 # Remove the sysvinit specific configuration file for systemd systems to avoid confusion
345 if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'false', 'true', d)}; then
346 rm -f ${D}${sysconfdir}/syslog-startup.conf
347 fi
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500348}
349
Brad Bishopc342db32019-05-15 21:57:59 -0400350PTEST_BINDIR = "1"
351
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500352do_install_ptest () {
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800353 cp -r ${B}/testsuite ${D}${PTEST_PATH}/
354 cp ${B}/.config ${D}${PTEST_PATH}/
355 ln -s /bin/busybox ${D}${PTEST_PATH}/busybox
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500356}
357
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500358inherit update-alternatives
359
360ALTERNATIVE_PRIORITY = "50"
361
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500362python do_package_prepend () {
363 # We need to load the full set of busybox provides from the /etc/busybox.links
364 # Use this to see the update-alternatives with the right information
365
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500366 dvar = d.getVar('D')
367 pn = d.getVar('PN')
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500368 def set_alternative_vars(links, target):
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500369 links = d.expand(links)
370 target = d.expand(target)
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500371 f = open('%s%s' % (dvar, links), 'r')
372 for alt_link_name in f:
373 alt_link_name = alt_link_name.strip()
374 alt_name = os.path.basename(alt_link_name)
375 # Match coreutils
376 if alt_name == '[':
377 alt_name = 'lbracket'
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800378 if alt_name == 'klogd' or alt_name == 'syslogd':
379 d.appendVar('ALTERNATIVE_%s-syslog' % (pn), ' ' + alt_name)
380 else:
381 d.appendVar('ALTERNATIVE_%s' % (pn), ' ' + alt_name)
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500382 d.setVarFlag('ALTERNATIVE_LINK_NAME', alt_name, alt_link_name)
383 if os.path.exists('%s%s' % (dvar, target)):
384 d.setVarFlag('ALTERNATIVE_TARGET', alt_name, target)
385 f.close()
386 return
387
388 if os.path.exists('%s/etc/busybox.links' % (dvar)):
389 set_alternative_vars("${sysconfdir}/busybox.links", "${base_bindir}/busybox")
390 else:
391 set_alternative_vars("${sysconfdir}/busybox.links.nosuid", "${base_bindir}/busybox.nosuid")
392 set_alternative_vars("${sysconfdir}/busybox.links.suid", "${base_bindir}/busybox.suid")
393}
394
Brad Bishop96ff1982019-08-19 13:50:42 -0400395# This part of code is dedicated to the on target upgrade problem. It's known
396# that if we don't make appropriate symlinks before update-alternatives calls,
397# there will be errors indicating missing commands such as 'sed'.
398# These symlinks will later be updated by update-alternatives calls.
399# The update-alternatives.bbclass' postinst script runs firstly before other
400# postinst, but this part of code needs run firstly, so add this funtion.
401python populate_packages_updatealternatives_append() {
402 postinst = """
403test -n 2 > /dev/null || alias test='busybox test'
404if test "x$D" = "x"; then
405 # Remove busybox.nosuid if it's a symlink, because this situation indicates
406 # that we're installing or upgrading to a one-binary busybox.
407 if test -h ${base_bindir}/busybox.nosuid; then
408 rm -f ${base_bindir}/busybox.nosuid
409 fi
410 for suffix in "" ".nosuid" ".suid"; do
411 if test -e ${sysconfdir}/busybox.links$suffix; then
412 while read link; do
413 if test ! -e "$link"; then
414 # we can use busybox here because even if we are using splitted busybox
415 # we've made a symlink from /bin/busybox to /bin/busybox.nosuid.
416 busybox rm -f $link
417 busybox ln -s "${base_bindir}/busybox$suffix" $link
418 fi
419 done < ${sysconfdir}/busybox.links$suffix
420 fi
421 done
422fi
423if grep -q "^${base_bindir}/bash$" $D${sysconfdir}/busybox.links*; then
424 grep -q "^${base_bindir}/bash$" $D${sysconfdir}/shells || echo ${base_bindir}/bash >> $D${sysconfdir}/shells
425fi
426
427"""
428 d.prependVar('pkg_postinst_%s' % pkg, postinst)
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500429}
430
431pkg_prerm_${PN} () {
432 # This is so you can make busybox commit suicide - removing busybox with no other packages
433 # providing its files, this will make update-alternatives work, but the update-rc.d part
434 # for syslog, httpd and/or udhcpd will fail if there is no other package providing sh
435 tmpdir=`mktemp -d /tmp/busyboxrm-XXXXXX`
436 ln -s ${base_bindir}/busybox $tmpdir/[
437 ln -s ${base_bindir}/busybox $tmpdir/test
438 ln -s ${base_bindir}/busybox $tmpdir/head
439 ln -s ${base_bindir}/busybox $tmpdir/sh
440 ln -s ${base_bindir}/busybox $tmpdir/basename
441 ln -s ${base_bindir}/busybox $tmpdir/echo
442 ln -s ${base_bindir}/busybox $tmpdir/mv
443 ln -s ${base_bindir}/busybox $tmpdir/ln
444 ln -s ${base_bindir}/busybox $tmpdir/dirname
445 ln -s ${base_bindir}/busybox $tmpdir/rm
446 ln -s ${base_bindir}/busybox $tmpdir/sed
447 ln -s ${base_bindir}/busybox $tmpdir/sort
448 ln -s ${base_bindir}/busybox $tmpdir/grep
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500449 ln -s ${base_bindir}/busybox $tmpdir/tail
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500450 export PATH=$PATH:$tmpdir
451}
452
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500453pkg_postrm_${PN} () {
454 if grep -q "^${base_bindir}/bash$" $D${sysconfdir}/busybox.links* && [ ! -e $D${base_bindir}/bash ]; then
455 printf "$(grep -v "^${base_bindir}/bash$" $D${sysconfdir}/shells)\n" > $D${sysconfdir}/shells
456 fi
457}
458
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500459pkg_prerm_${PN}-syslog () {
460 # remove syslog
461 if test "x$D" = "x"; then
462 if test "$1" = "upgrade" -o "$1" = "remove"; then
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600463 ${sysconfdir}/init.d/syslog stop || :
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500464 fi
465 fi
466}
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500467
Brad Bishop19323692019-04-05 15:28:33 -0400468RPROVIDES_${PN} += "${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', '/bin/sh /bin/ash', '', d)}"