blob: a6bfd46b6752a674fe63733df93218b36df5e638 [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
6DEPENDS += "kern-tools-native"
7
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 Bishopd7bf8c12018-02-25 22:55:05 -050044CONFFILES_${PN}-syslog = "${sysconfdir}/syslog-startup.conf"
45RCONFLICTS_${PN}-syslog = "rsyslog sysklogd syslog-ng"
46
Patrick Williamsc124f4f2015-09-15 14:41:29 -050047CONFFILES_${PN}-mdev = "${sysconfdir}/mdev.conf"
48
49RRECOMMENDS_${PN} = "${PN}-syslog ${PN}-udhcpc"
50
Brad Bishop00111322018-04-01 22:23:53 -040051RDEPENDS_${PN} = "${@["", "busybox-inittab"][(d.getVar('VIRTUAL-RUNTIME_init_manager') == 'busybox')]}"
52
Patrick Williamsc124f4f2015-09-15 14:41:29 -050053inherit cml1 systemd update-rc.d ptest
54
55# internal helper
56def busybox_cfg(feature, tokens, cnf, rem):
57 if type(tokens) == type(""):
58 tokens = [tokens]
59 rem.extend(['/^[# ]*' + token + '[ =]/d' for token in tokens])
60 if feature:
61 cnf.extend([token + '=y' for token in tokens])
62 else:
63 cnf.extend(['# ' + token + ' is not set' for token in tokens])
64
65# Map distro features to config settings
66def features_to_busybox_settings(d):
67 cnf, rem = ([], [])
68 busybox_cfg(bb.utils.contains('DISTRO_FEATURES', 'ipv6', True, False, d), 'CONFIG_FEATURE_IPV6', cnf, rem)
Brad Bishop6e60e8b2018-02-01 10:27:11 -050069 busybox_cfg(True, 'CONFIG_LFS', cnf, rem)
70 busybox_cfg(True, 'CONFIG_FDISK_SUPPORT_LARGE_DISKS', cnf, rem)
Patrick Williamsc124f4f2015-09-15 14:41:29 -050071 busybox_cfg(bb.utils.contains('DISTRO_FEATURES', 'nls', True, False, d), 'CONFIG_LOCALE_SUPPORT', cnf, rem)
72 busybox_cfg(bb.utils.contains('DISTRO_FEATURES', 'ipv4', True, False, d), 'CONFIG_FEATURE_IFUPDOWN_IPV4', cnf, rem)
73 busybox_cfg(bb.utils.contains('DISTRO_FEATURES', 'ipv6', True, False, d), 'CONFIG_FEATURE_IFUPDOWN_IPV6', cnf, rem)
74 busybox_cfg(bb.utils.contains('DISTRO_FEATURES', 'wifi', True, False, d), 'CONFIG_RFKILL', cnf, rem)
75 busybox_cfg(bb.utils.contains('DISTRO_FEATURES', 'bluetooth', True, False, d), 'CONFIG_RFKILL', cnf, rem)
76 return "\n".join(cnf), "\n".join(rem)
77
Brad Bishopd7bf8c12018-02-25 22:55:05 -050078# X, Y = ${@features_to_busybox_settings(d)}
Patrick Williamsc124f4f2015-09-15 14:41:29 -050079# unfortunately doesn't seem to work with bitbake, workaround:
80def features_to_busybox_conf(d):
81 cnf, rem = features_to_busybox_settings(d)
82 return cnf
83def features_to_busybox_del(d):
84 cnf, rem = features_to_busybox_settings(d)
85 return rem
86
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050087configmangle = '/CONFIG_EXTRA_CFLAGS/d; \
Patrick Williamsc124f4f2015-09-15 14:41:29 -050088 '
89OE_FEATURES := "${@features_to_busybox_conf(d)}"
90OE_DEL := "${@features_to_busybox_del(d)}"
91DO_IPv4 := "${@bb.utils.contains('DISTRO_FEATURES', 'ipv4', 1, 0, d)}"
92DO_IPv6 := "${@bb.utils.contains('DISTRO_FEATURES', 'ipv6', 1, 0, d)}"
93
94python () {
95 if "${OE_DEL}":
96 d.setVar('configmangle_append', "${OE_DEL}" + "\n")
97 if "${OE_FEATURES}":
98 d.setVar('configmangle_append',
99 "/^### DISTRO FEATURES$/a\\\n%s\n\n" %
100 ("\\n".join((d.expand("${OE_FEATURES}").split("\n")))))
101 d.setVar('configmangle_append',
102 "/^### CROSS$/a\\\n%s\n" %
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500103 ("\\n".join(["CONFIG_EXTRA_CFLAGS=\"${CFLAGS} ${HOST_CC_ARCH}\""
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500104 ])
105 ))
106}
107
108do_prepare_config () {
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500109 if [ "$BUILD_REPRODUCIBLE_BINARIES" = "1" ]; then
110 export KCONFIG_NOTIMESTAMP=1
111 fi
Patrick Williamsf1e5d692016-03-30 15:21:19 -0500112 sed -e '/CONFIG_STATIC/d' \
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500113 < ${WORKDIR}/defconfig > ${S}/.config
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500114 echo "# CONFIG_STATIC is not set" >> .config
115 for i in 'CROSS' 'DISTRO FEATURES'; do echo "### $i"; done >> \
116 ${S}/.config
117 sed -i -e '${configmangle}' ${S}/.config
118 if test ${DO_IPv4} -eq 0 && test ${DO_IPv6} -eq 0; then
119 # disable networking applets
120 mv ${S}/.config ${S}/.config.oe-tmp
121 awk 'BEGIN{net=0}
122 /^# Networking Utilities/{net=1}
123 /^#$/{if(net){net=net+1}}
124 {if(net==2&&$0 !~ /^#/&&$1){print("# "$1" is not set")}else{print}}' \
125 ${S}/.config.oe-tmp > ${S}/.config
126 fi
127 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 -0500128 sed -i 's|${DEBUG_PREFIX_MAP}||g' ${S}/.config
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500129}
130
131# returns all the elements from the src uri that are .cfg files
132def find_cfgs(d):
133 sources=src_patches(d, True)
134 sources_list=[]
135 for s in sources:
136 if s.endswith('.cfg'):
137 sources_list.append(s)
138
139 return sources_list
140
141do_configure () {
142 do_prepare_config
143 merge_config.sh -m .config ${@" ".join(find_cfgs(d))}
144 cml1_do_configure
145}
146
147do_compile() {
148 unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500149 if [ "$BUILD_REPRODUCIBLE_BINARIES" = "1" ]; then
150 export KCONFIG_NOTIMESTAMP=1
151 fi
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500152 if [ "${BUSYBOX_SPLIT_SUID}" = "1" -a x`grep "CONFIG_FEATURE_INDIVIDUAL=y" .config` = x ]; then
153 # split the .config into two parts, and make two busybox binaries
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500154 if [ -e .config.orig ]; then
155 # Need to guard again an interrupted do_compile - restore any backup
156 cp .config.orig .config
157 fi
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500158 cp .config .config.orig
159 oe_runmake busybox.cfg.suid
160 oe_runmake busybox.cfg.nosuid
161 for i in `cat busybox.cfg.suid busybox.cfg.nosuid`; do
162 echo "# $i is not set" >> .config.disable.apps
163 done
164 merge_config.sh -m .config.orig .config.disable.apps
165 cp .config .config.nonapps
166 for s in suid nosuid; do
167 cat busybox.cfg.$s | while read item; do
168 grep -w "$item" .config.orig
169 done > .config.app.$s
170 merge_config.sh -m .config.nonapps .config.app.$s
171 oe_runmake busybox_unstripped
172 mv busybox_unstripped busybox.$s
173 oe_runmake busybox.links
174 mv busybox.links busybox.links.$s
175 done
176 # copy .config.orig back to .config, because the install process may check this file
177 cp .config.orig .config
178 # cleanup
179 rm .config.orig .config.app.suid .config.app.nosuid .config.disable.apps .config.nonapps
180 else
181 oe_runmake busybox_unstripped
182 cp busybox_unstripped busybox
183 oe_runmake busybox.links
184 fi
185}
186
187do_install () {
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500188 sed -i "s:^/bin/:BASE_BINDIR/:" busybox.links*
189 sed -i "s:^/sbin/:BASE_SBINDIR/:" busybox.links*
190 sed -i "s:^/usr/bin/:BINDIR/:" busybox.links*
191 sed -i "s:^/usr/sbin/:SBINDIR/:" busybox.links*
192
193 sed -i "s:^BASE_BINDIR/:${base_bindir}/:" busybox.links*
194 sed -i "s:^BASE_SBINDIR/:${base_sbindir}/:" busybox.links*
195 sed -i "s:^BINDIR/:${bindir}/:" busybox.links*
196 sed -i "s:^SBINDIR/:${sbindir}/:" busybox.links*
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500197
198 install -d ${D}${sysconfdir}/init.d
199
200 if ! grep -q "CONFIG_FEATURE_INDIVIDUAL=y" ${B}/.config; then
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500201 # Install ${base_bindir}/busybox, and the ${base_bindir}/sh link so the postinst script
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500202 # can run. Let update-alternatives handle the rest.
203 install -d ${D}${base_bindir}
204 if [ "${BUSYBOX_SPLIT_SUID}" = "1" ]; then
205 install -m 4755 ${B}/busybox.suid ${D}${base_bindir}
206 install -m 0755 ${B}/busybox.nosuid ${D}${base_bindir}
207 install -m 0644 ${S}/busybox.links.suid ${D}${sysconfdir}
208 install -m 0644 ${S}/busybox.links.nosuid ${D}${sysconfdir}
209 if grep -q "CONFIG_FEATURE_SH_IS_ASH=y" ${B}/.config; then
210 ln -sf busybox.nosuid ${D}${base_bindir}/sh
211 fi
212 # Keep a default busybox for people who want to invoke busybox directly.
213 # This is also useful for the on device upgrade. Because we want
214 # to use the busybox command in postinst.
215 ln -sf busybox.nosuid ${D}${base_bindir}/busybox
216 else
217 if grep -q "CONFIG_FEATURE_SUID=y" ${B}/.config; then
218 install -m 4755 ${B}/busybox ${D}${base_bindir}
219 else
220 install -m 0755 ${B}/busybox ${D}${base_bindir}
221 fi
222 install -m 0644 ${S}/busybox.links ${D}${sysconfdir}
223 if grep -q "CONFIG_FEATURE_SH_IS_ASH=y" ${B}/.config; then
224 ln -sf busybox ${D}${base_bindir}/sh
225 fi
226 # We make this symlink here to eliminate the error when upgrading together
227 # with busybox-syslog. Without this symlink, the opkg may think of the
228 # busybox.nosuid as obsolete and remove it, resulting in dead links like
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500229 # ${base_bindir}/sed -> ${base_bindir}/busybox.nosuid. This will make upgrading busybox-syslog fail.
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500230 # This symlink will be safely deleted in postinst, thus no negative effect.
231 ln -sf busybox ${D}${base_bindir}/busybox.nosuid
232 fi
233 else
234 install -d ${D}${base_bindir} ${D}${base_sbindir}
235 install -d ${D}${libdir} ${D}${bindir} ${D}${sbindir}
236 cat busybox.links | while read FILE; do
237 NAME=`basename "$FILE"`
238 install -m 0755 "0_lib/$NAME" "${D}$FILE.${BPN}"
239 done
240 # add suid bit where needed
241 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
242 find ${D} -name $i.${BPN} -exec chmod a+s {} \;
243 done
244 install -m 0755 0_lib/libbusybox.so.${PV} ${D}${libdir}/libbusybox.so.${PV}
245 ln -sf sh.${BPN} ${D}${base_bindir}/sh
246 ln -sf ln.${BPN} ${D}${base_bindir}/ln
247 ln -sf test.${BPN} ${D}${bindir}/test
248 if [ -f ${D}/linuxrc.${BPN} ]; then
249 mv ${D}/linuxrc.${BPN} ${D}/linuxrc
250 fi
251 install -m 0644 ${S}/busybox.links ${D}${sysconfdir}
252 fi
253
254 if grep -q "CONFIG_SYSLOGD=y" ${B}/.config; then
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500255 install -m 0755 ${WORKDIR}/syslog ${D}${sysconfdir}/init.d/syslog
256 install -m 644 ${WORKDIR}/syslog-startup.conf ${D}${sysconfdir}/syslog-startup.conf
257 install -m 644 ${WORKDIR}/syslog.conf ${D}${sysconfdir}/syslog.conf
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500258 fi
259 if grep "CONFIG_CROND=y" ${B}/.config; then
260 install -m 0755 ${WORKDIR}/busybox-cron ${D}${sysconfdir}/init.d/
261 fi
262 if grep "CONFIG_HTTPD=y" ${B}/.config; then
263 install -m 0755 ${WORKDIR}/busybox-httpd ${D}${sysconfdir}/init.d/
264 install -d ${D}/srv/www
265 fi
266 if grep "CONFIG_UDHCPD=y" ${B}/.config; then
267 install -m 0755 ${WORKDIR}/busybox-udhcpd ${D}${sysconfdir}/init.d/
268 fi
269 if grep "CONFIG_HWCLOCK=y" ${B}/.config; then
270 install -m 0755 ${WORKDIR}/hwclock.sh ${D}${sysconfdir}/init.d/
271 fi
272 if grep "CONFIG_UDHCPC=y" ${B}/.config; then
273 install -d ${D}${sysconfdir}/udhcpc.d
274 install -d ${D}${datadir}/udhcpc
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500275 install -m 0755 ${WORKDIR}/simple.script ${D}${sysconfdir}/udhcpc.d/50default
276 sed -i "s:/SBIN_DIR/:${base_sbindir}/:" ${D}${sysconfdir}/udhcpc.d/50default
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500277 install -m 0755 ${WORKDIR}/default.script ${D}${datadir}/udhcpc/default.script
278 fi
279 if grep "CONFIG_INETD=y" ${B}/.config; then
280 install -m 0755 ${WORKDIR}/inetd ${D}${sysconfdir}/init.d/inetd.${BPN}
281 sed -i "s:/usr/sbin/:${sbindir}/:" ${D}${sysconfdir}/init.d/inetd.${BPN}
282 install -m 0644 ${WORKDIR}/inetd.conf ${D}${sysconfdir}/
283 fi
284 if grep "CONFIG_MDEV=y" ${B}/.config; then
285 install -m 0755 ${WORKDIR}/mdev ${D}${sysconfdir}/init.d/mdev
286 if grep "CONFIG_FEATURE_MDEV_CONF=y" ${B}/.config; then
287 install -m 644 ${WORKDIR}/mdev.conf ${D}${sysconfdir}/mdev.conf
288 install -d ${D}${sysconfdir}/mdev
289 install -m 0755 ${WORKDIR}/find-touchscreen.sh ${D}${sysconfdir}/mdev
290 install -m 0755 ${WORKDIR}/mdev-mount.sh ${D}${sysconfdir}/mdev
291 fi
292 fi
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500293 if grep "CONFIG_INIT=y" ${B}/.config; then
294 install -D -m 0777 ${WORKDIR}/rcS ${D}${sysconfdir}/init.d/rcS
295 install -D -m 0777 ${WORKDIR}/rcK ${D}${sysconfdir}/init.d/rcK
296 install -D -m 0755 ${WORKDIR}/runlevel ${D}${base_sbindir}/runlevel
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500297 fi
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500298
299 if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
300 if grep -q "CONFIG_SYSLOGD=y" ${B}/.config; then
301 install -d ${D}${systemd_unitdir}/system
302 sed 's,@base_sbindir@,${base_sbindir},g' < ${WORKDIR}/busybox-syslog.service.in \
303 > ${D}${systemd_unitdir}/system/busybox-syslog.service
304 if [ -f ${WORKDIR}/busybox-syslog.default ] ; then
305 install -d ${D}${sysconfdir}/default
306 install -m 0644 ${WORKDIR}/busybox-syslog.default ${D}${sysconfdir}/default/busybox-syslog
307 fi
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500308 fi
309 if grep -q "CONFIG_KLOGD=y" ${B}/.config; then
310 install -d ${D}${systemd_unitdir}/system
311 sed 's,@base_sbindir@,${base_sbindir},g' < ${WORKDIR}/busybox-klogd.service.in \
312 > ${D}${systemd_unitdir}/system/busybox-klogd.service
313 fi
314 fi
315
316 # Remove the sysvinit specific configuration file for systemd systems to avoid confusion
317 if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'false', 'true', d)}; then
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500318 rm -f ${D}${sysconfdir}/syslog-startup.conf
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500319 fi
320}
321
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500322do_install_ptest () {
323 cp -r ${B}/testsuite ${D}${PTEST_PATH}/
324 cp ${B}/.config ${D}${PTEST_PATH}/
325 ln -s /bin/busybox ${D}${PTEST_PATH}/busybox
326}
327
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500328inherit update-alternatives
329
330ALTERNATIVE_PRIORITY = "50"
331
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500332python do_package_prepend () {
333 # We need to load the full set of busybox provides from the /etc/busybox.links
334 # Use this to see the update-alternatives with the right information
335
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500336 dvar = d.getVar('D')
337 pn = d.getVar('PN')
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500338 def set_alternative_vars(links, target):
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500339 links = d.expand(links)
340 target = d.expand(target)
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500341 f = open('%s%s' % (dvar, links), 'r')
342 for alt_link_name in f:
343 alt_link_name = alt_link_name.strip()
344 alt_name = os.path.basename(alt_link_name)
345 # Match coreutils
346 if alt_name == '[':
347 alt_name = 'lbracket'
348 d.appendVar('ALTERNATIVE_%s' % (pn), ' ' + alt_name)
349 d.setVarFlag('ALTERNATIVE_LINK_NAME', alt_name, alt_link_name)
350 if os.path.exists('%s%s' % (dvar, target)):
351 d.setVarFlag('ALTERNATIVE_TARGET', alt_name, target)
352 f.close()
353 return
354
355 if os.path.exists('%s/etc/busybox.links' % (dvar)):
356 set_alternative_vars("${sysconfdir}/busybox.links", "${base_bindir}/busybox")
357 else:
358 set_alternative_vars("${sysconfdir}/busybox.links.nosuid", "${base_bindir}/busybox.nosuid")
359 set_alternative_vars("${sysconfdir}/busybox.links.suid", "${base_bindir}/busybox.suid")
360}
361
362pkg_postinst_${PN} () {
363 # This part of code is dedicated to the on target upgrade problem.
364 # It's known that if we don't make appropriate symlinks before update-alternatives calls,
365 # there will be errors indicating missing commands such as 'sed'.
366 # These symlinks will later be updated by update-alternatives calls.
367 test -n 2 > /dev/null || alias test='busybox test'
368 if test "x$D" = "x"; then
369 # Remove busybox.nosuid if it's a symlink, because this situation indicates
370 # that we're installing or upgrading to a one-binary busybox.
371 if test -h ${base_bindir}/busybox.nosuid; then
372 rm -f ${base_bindir}/busybox.nosuid
373 fi
374 for suffix in "" ".nosuid" ".suid"; do
375 if test -e ${sysconfdir}/busybox.links$suffix; then
376 while read link; do
377 if test ! -e "$link"; then
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500378 # we can use busybox here because even if we are using splitted busybox
379 # we've made a symlink from /bin/busybox to /bin/busybox.nosuid.
380 busybox rm -f $link
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500381 busybox ln -s "${base_bindir}/busybox$suffix" $link
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500382 fi
383 done < ${sysconfdir}/busybox.links$suffix
384 fi
385 done
386 fi
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500387 if grep -q "^${base_bindir}/bash$" $D${sysconfdir}/busybox.links*; then
388 grep -q "^${base_bindir}/bash$" $D${sysconfdir}/shells || echo ${base_bindir}/bash >> $D${sysconfdir}/shells
389 fi
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500390}
391
392pkg_prerm_${PN} () {
393 # This is so you can make busybox commit suicide - removing busybox with no other packages
394 # providing its files, this will make update-alternatives work, but the update-rc.d part
395 # for syslog, httpd and/or udhcpd will fail if there is no other package providing sh
396 tmpdir=`mktemp -d /tmp/busyboxrm-XXXXXX`
397 ln -s ${base_bindir}/busybox $tmpdir/[
398 ln -s ${base_bindir}/busybox $tmpdir/test
399 ln -s ${base_bindir}/busybox $tmpdir/head
400 ln -s ${base_bindir}/busybox $tmpdir/sh
401 ln -s ${base_bindir}/busybox $tmpdir/basename
402 ln -s ${base_bindir}/busybox $tmpdir/echo
403 ln -s ${base_bindir}/busybox $tmpdir/mv
404 ln -s ${base_bindir}/busybox $tmpdir/ln
405 ln -s ${base_bindir}/busybox $tmpdir/dirname
406 ln -s ${base_bindir}/busybox $tmpdir/rm
407 ln -s ${base_bindir}/busybox $tmpdir/sed
408 ln -s ${base_bindir}/busybox $tmpdir/sort
409 ln -s ${base_bindir}/busybox $tmpdir/grep
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500410 ln -s ${base_bindir}/busybox $tmpdir/tail
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500411 export PATH=$PATH:$tmpdir
412}
413
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500414pkg_postrm_${PN} () {
415 if grep -q "^${base_bindir}/bash$" $D${sysconfdir}/busybox.links* && [ ! -e $D${base_bindir}/bash ]; then
416 printf "$(grep -v "^${base_bindir}/bash$" $D${sysconfdir}/shells)\n" > $D${sysconfdir}/shells
417 fi
418}
419
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500420pkg_prerm_${PN}-syslog () {
421 # remove syslog
422 if test "x$D" = "x"; then
423 if test "$1" = "upgrade" -o "$1" = "remove"; then
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600424 ${sysconfdir}/init.d/syslog stop || :
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500425 fi
426 fi
427}
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500428
429RPROVIDES_${PN} += "${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', '/bin/sh', '', d)}"