blob: 48910ca33adbf556d7ac3f28e827f977a10513eb [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
51inherit cml1 systemd update-rc.d ptest
52
53# internal helper
54def busybox_cfg(feature, tokens, cnf, rem):
55 if type(tokens) == type(""):
56 tokens = [tokens]
57 rem.extend(['/^[# ]*' + token + '[ =]/d' for token in tokens])
58 if feature:
59 cnf.extend([token + '=y' for token in tokens])
60 else:
61 cnf.extend(['# ' + token + ' is not set' for token in tokens])
62
63# Map distro features to config settings
64def features_to_busybox_settings(d):
65 cnf, rem = ([], [])
66 busybox_cfg(bb.utils.contains('DISTRO_FEATURES', 'ipv6', True, False, d), 'CONFIG_FEATURE_IPV6', cnf, rem)
Brad Bishop6e60e8b2018-02-01 10:27:11 -050067 busybox_cfg(True, 'CONFIG_LFS', cnf, rem)
68 busybox_cfg(True, 'CONFIG_FDISK_SUPPORT_LARGE_DISKS', cnf, rem)
Patrick Williamsc124f4f2015-09-15 14:41:29 -050069 busybox_cfg(bb.utils.contains('DISTRO_FEATURES', 'nls', True, False, d), 'CONFIG_LOCALE_SUPPORT', cnf, rem)
70 busybox_cfg(bb.utils.contains('DISTRO_FEATURES', 'ipv4', True, False, d), 'CONFIG_FEATURE_IFUPDOWN_IPV4', cnf, rem)
71 busybox_cfg(bb.utils.contains('DISTRO_FEATURES', 'ipv6', True, False, d), 'CONFIG_FEATURE_IFUPDOWN_IPV6', cnf, rem)
72 busybox_cfg(bb.utils.contains('DISTRO_FEATURES', 'wifi', True, False, d), 'CONFIG_RFKILL', cnf, rem)
73 busybox_cfg(bb.utils.contains('DISTRO_FEATURES', 'bluetooth', True, False, d), 'CONFIG_RFKILL', cnf, rem)
74 return "\n".join(cnf), "\n".join(rem)
75
Brad Bishopd7bf8c12018-02-25 22:55:05 -050076# X, Y = ${@features_to_busybox_settings(d)}
Patrick Williamsc124f4f2015-09-15 14:41:29 -050077# unfortunately doesn't seem to work with bitbake, workaround:
78def features_to_busybox_conf(d):
79 cnf, rem = features_to_busybox_settings(d)
80 return cnf
81def features_to_busybox_del(d):
82 cnf, rem = features_to_busybox_settings(d)
83 return rem
84
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050085configmangle = '/CONFIG_EXTRA_CFLAGS/d; \
Patrick Williamsc124f4f2015-09-15 14:41:29 -050086 '
87OE_FEATURES := "${@features_to_busybox_conf(d)}"
88OE_DEL := "${@features_to_busybox_del(d)}"
89DO_IPv4 := "${@bb.utils.contains('DISTRO_FEATURES', 'ipv4', 1, 0, d)}"
90DO_IPv6 := "${@bb.utils.contains('DISTRO_FEATURES', 'ipv6', 1, 0, d)}"
91
92python () {
93 if "${OE_DEL}":
94 d.setVar('configmangle_append', "${OE_DEL}" + "\n")
95 if "${OE_FEATURES}":
96 d.setVar('configmangle_append',
97 "/^### DISTRO FEATURES$/a\\\n%s\n\n" %
98 ("\\n".join((d.expand("${OE_FEATURES}").split("\n")))))
99 d.setVar('configmangle_append',
100 "/^### CROSS$/a\\\n%s\n" %
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500101 ("\\n".join(["CONFIG_EXTRA_CFLAGS=\"${CFLAGS} ${HOST_CC_ARCH}\""
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500102 ])
103 ))
104}
105
106do_prepare_config () {
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500107 if [ "$BUILD_REPRODUCIBLE_BINARIES" = "1" ]; then
108 export KCONFIG_NOTIMESTAMP=1
109 fi
Patrick Williamsf1e5d692016-03-30 15:21:19 -0500110 sed -e '/CONFIG_STATIC/d' \
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500111 < ${WORKDIR}/defconfig > ${S}/.config
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500112 echo "# CONFIG_STATIC is not set" >> .config
113 for i in 'CROSS' 'DISTRO FEATURES'; do echo "### $i"; done >> \
114 ${S}/.config
115 sed -i -e '${configmangle}' ${S}/.config
116 if test ${DO_IPv4} -eq 0 && test ${DO_IPv6} -eq 0; then
117 # disable networking applets
118 mv ${S}/.config ${S}/.config.oe-tmp
119 awk 'BEGIN{net=0}
120 /^# Networking Utilities/{net=1}
121 /^#$/{if(net){net=net+1}}
122 {if(net==2&&$0 !~ /^#/&&$1){print("# "$1" is not set")}else{print}}' \
123 ${S}/.config.oe-tmp > ${S}/.config
124 fi
125 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 -0500126 sed -i 's|${DEBUG_PREFIX_MAP}||g' ${S}/.config
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500127}
128
129# returns all the elements from the src uri that are .cfg files
130def find_cfgs(d):
131 sources=src_patches(d, True)
132 sources_list=[]
133 for s in sources:
134 if s.endswith('.cfg'):
135 sources_list.append(s)
136
137 return sources_list
138
139do_configure () {
140 do_prepare_config
141 merge_config.sh -m .config ${@" ".join(find_cfgs(d))}
142 cml1_do_configure
143}
144
145do_compile() {
146 unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500147 if [ "$BUILD_REPRODUCIBLE_BINARIES" = "1" ]; then
148 export KCONFIG_NOTIMESTAMP=1
149 fi
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500150 if [ "${BUSYBOX_SPLIT_SUID}" = "1" -a x`grep "CONFIG_FEATURE_INDIVIDUAL=y" .config` = x ]; then
151 # split the .config into two parts, and make two busybox binaries
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500152 if [ -e .config.orig ]; then
153 # Need to guard again an interrupted do_compile - restore any backup
154 cp .config.orig .config
155 fi
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500156 cp .config .config.orig
157 oe_runmake busybox.cfg.suid
158 oe_runmake busybox.cfg.nosuid
159 for i in `cat busybox.cfg.suid busybox.cfg.nosuid`; do
160 echo "# $i is not set" >> .config.disable.apps
161 done
162 merge_config.sh -m .config.orig .config.disable.apps
163 cp .config .config.nonapps
164 for s in suid nosuid; do
165 cat busybox.cfg.$s | while read item; do
166 grep -w "$item" .config.orig
167 done > .config.app.$s
168 merge_config.sh -m .config.nonapps .config.app.$s
169 oe_runmake busybox_unstripped
170 mv busybox_unstripped busybox.$s
171 oe_runmake busybox.links
172 mv busybox.links busybox.links.$s
173 done
174 # copy .config.orig back to .config, because the install process may check this file
175 cp .config.orig .config
176 # cleanup
177 rm .config.orig .config.app.suid .config.app.nosuid .config.disable.apps .config.nonapps
178 else
179 oe_runmake busybox_unstripped
180 cp busybox_unstripped busybox
181 oe_runmake busybox.links
182 fi
183}
184
185do_install () {
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500186 sed -i "s:^/bin/:BASE_BINDIR/:" busybox.links*
187 sed -i "s:^/sbin/:BASE_SBINDIR/:" busybox.links*
188 sed -i "s:^/usr/bin/:BINDIR/:" busybox.links*
189 sed -i "s:^/usr/sbin/:SBINDIR/:" busybox.links*
190
191 sed -i "s:^BASE_BINDIR/:${base_bindir}/:" busybox.links*
192 sed -i "s:^BASE_SBINDIR/:${base_sbindir}/:" busybox.links*
193 sed -i "s:^BINDIR/:${bindir}/:" busybox.links*
194 sed -i "s:^SBINDIR/:${sbindir}/:" busybox.links*
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500195
196 install -d ${D}${sysconfdir}/init.d
197
198 if ! grep -q "CONFIG_FEATURE_INDIVIDUAL=y" ${B}/.config; then
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500199 # Install ${base_bindir}/busybox, and the ${base_bindir}/sh link so the postinst script
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500200 # can run. Let update-alternatives handle the rest.
201 install -d ${D}${base_bindir}
202 if [ "${BUSYBOX_SPLIT_SUID}" = "1" ]; then
203 install -m 4755 ${B}/busybox.suid ${D}${base_bindir}
204 install -m 0755 ${B}/busybox.nosuid ${D}${base_bindir}
205 install -m 0644 ${S}/busybox.links.suid ${D}${sysconfdir}
206 install -m 0644 ${S}/busybox.links.nosuid ${D}${sysconfdir}
207 if grep -q "CONFIG_FEATURE_SH_IS_ASH=y" ${B}/.config; then
208 ln -sf busybox.nosuid ${D}${base_bindir}/sh
209 fi
210 # Keep a default busybox for people who want to invoke busybox directly.
211 # This is also useful for the on device upgrade. Because we want
212 # to use the busybox command in postinst.
213 ln -sf busybox.nosuid ${D}${base_bindir}/busybox
214 else
215 if grep -q "CONFIG_FEATURE_SUID=y" ${B}/.config; then
216 install -m 4755 ${B}/busybox ${D}${base_bindir}
217 else
218 install -m 0755 ${B}/busybox ${D}${base_bindir}
219 fi
220 install -m 0644 ${S}/busybox.links ${D}${sysconfdir}
221 if grep -q "CONFIG_FEATURE_SH_IS_ASH=y" ${B}/.config; then
222 ln -sf busybox ${D}${base_bindir}/sh
223 fi
224 # We make this symlink here to eliminate the error when upgrading together
225 # with busybox-syslog. Without this symlink, the opkg may think of the
226 # busybox.nosuid as obsolete and remove it, resulting in dead links like
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500227 # ${base_bindir}/sed -> ${base_bindir}/busybox.nosuid. This will make upgrading busybox-syslog fail.
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500228 # This symlink will be safely deleted in postinst, thus no negative effect.
229 ln -sf busybox ${D}${base_bindir}/busybox.nosuid
230 fi
231 else
232 install -d ${D}${base_bindir} ${D}${base_sbindir}
233 install -d ${D}${libdir} ${D}${bindir} ${D}${sbindir}
234 cat busybox.links | while read FILE; do
235 NAME=`basename "$FILE"`
236 install -m 0755 "0_lib/$NAME" "${D}$FILE.${BPN}"
237 done
238 # add suid bit where needed
239 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
240 find ${D} -name $i.${BPN} -exec chmod a+s {} \;
241 done
242 install -m 0755 0_lib/libbusybox.so.${PV} ${D}${libdir}/libbusybox.so.${PV}
243 ln -sf sh.${BPN} ${D}${base_bindir}/sh
244 ln -sf ln.${BPN} ${D}${base_bindir}/ln
245 ln -sf test.${BPN} ${D}${bindir}/test
246 if [ -f ${D}/linuxrc.${BPN} ]; then
247 mv ${D}/linuxrc.${BPN} ${D}/linuxrc
248 fi
249 install -m 0644 ${S}/busybox.links ${D}${sysconfdir}
250 fi
251
252 if grep -q "CONFIG_SYSLOGD=y" ${B}/.config; then
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500253 install -m 0755 ${WORKDIR}/syslog ${D}${sysconfdir}/init.d/syslog
254 install -m 644 ${WORKDIR}/syslog-startup.conf ${D}${sysconfdir}/syslog-startup.conf
255 install -m 644 ${WORKDIR}/syslog.conf ${D}${sysconfdir}/syslog.conf
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500256 fi
257 if grep "CONFIG_CROND=y" ${B}/.config; then
258 install -m 0755 ${WORKDIR}/busybox-cron ${D}${sysconfdir}/init.d/
259 fi
260 if grep "CONFIG_HTTPD=y" ${B}/.config; then
261 install -m 0755 ${WORKDIR}/busybox-httpd ${D}${sysconfdir}/init.d/
262 install -d ${D}/srv/www
263 fi
264 if grep "CONFIG_UDHCPD=y" ${B}/.config; then
265 install -m 0755 ${WORKDIR}/busybox-udhcpd ${D}${sysconfdir}/init.d/
266 fi
267 if grep "CONFIG_HWCLOCK=y" ${B}/.config; then
268 install -m 0755 ${WORKDIR}/hwclock.sh ${D}${sysconfdir}/init.d/
269 fi
270 if grep "CONFIG_UDHCPC=y" ${B}/.config; then
271 install -d ${D}${sysconfdir}/udhcpc.d
272 install -d ${D}${datadir}/udhcpc
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500273 install -m 0755 ${WORKDIR}/simple.script ${D}${sysconfdir}/udhcpc.d/50default
274 sed -i "s:/SBIN_DIR/:${base_sbindir}/:" ${D}${sysconfdir}/udhcpc.d/50default
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500275 install -m 0755 ${WORKDIR}/default.script ${D}${datadir}/udhcpc/default.script
276 fi
277 if grep "CONFIG_INETD=y" ${B}/.config; then
278 install -m 0755 ${WORKDIR}/inetd ${D}${sysconfdir}/init.d/inetd.${BPN}
279 sed -i "s:/usr/sbin/:${sbindir}/:" ${D}${sysconfdir}/init.d/inetd.${BPN}
280 install -m 0644 ${WORKDIR}/inetd.conf ${D}${sysconfdir}/
281 fi
282 if grep "CONFIG_MDEV=y" ${B}/.config; then
283 install -m 0755 ${WORKDIR}/mdev ${D}${sysconfdir}/init.d/mdev
284 if grep "CONFIG_FEATURE_MDEV_CONF=y" ${B}/.config; then
285 install -m 644 ${WORKDIR}/mdev.conf ${D}${sysconfdir}/mdev.conf
286 install -d ${D}${sysconfdir}/mdev
287 install -m 0755 ${WORKDIR}/find-touchscreen.sh ${D}${sysconfdir}/mdev
288 install -m 0755 ${WORKDIR}/mdev-mount.sh ${D}${sysconfdir}/mdev
289 fi
290 fi
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500291 if grep "CONFIG_INIT=y" ${B}/.config; then
292 install -D -m 0777 ${WORKDIR}/rcS ${D}${sysconfdir}/init.d/rcS
293 install -D -m 0777 ${WORKDIR}/rcK ${D}${sysconfdir}/init.d/rcK
294 install -D -m 0755 ${WORKDIR}/runlevel ${D}${base_sbindir}/runlevel
295 if grep "CONFIG_FEATURE_USE_INITTAB=y" ${B}/.config; then
296 install -D -m 0777 ${WORKDIR}/inittab ${D}${sysconfdir}/inittab
297 tmp="${SERIAL_CONSOLES}"
298 for i in $tmp
299 do
300 j=`echo ${i} | sed s/\;/\ /g`
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600301 id=`echo ${i} | sed -e 's/^.*;//' -e 's/;.*//'`
302 echo "$id::respawn:${base_sbindir}/getty ${j}" >> ${D}${sysconfdir}/inittab
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500303 done
304 fi
305 fi
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500306
307 if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
308 if grep -q "CONFIG_SYSLOGD=y" ${B}/.config; then
309 install -d ${D}${systemd_unitdir}/system
310 sed 's,@base_sbindir@,${base_sbindir},g' < ${WORKDIR}/busybox-syslog.service.in \
311 > ${D}${systemd_unitdir}/system/busybox-syslog.service
312 if [ -f ${WORKDIR}/busybox-syslog.default ] ; then
313 install -d ${D}${sysconfdir}/default
314 install -m 0644 ${WORKDIR}/busybox-syslog.default ${D}${sysconfdir}/default/busybox-syslog
315 fi
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500316 fi
317 if grep -q "CONFIG_KLOGD=y" ${B}/.config; then
318 install -d ${D}${systemd_unitdir}/system
319 sed 's,@base_sbindir@,${base_sbindir},g' < ${WORKDIR}/busybox-klogd.service.in \
320 > ${D}${systemd_unitdir}/system/busybox-klogd.service
321 fi
322 fi
323
324 # Remove the sysvinit specific configuration file for systemd systems to avoid confusion
325 if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'false', 'true', d)}; then
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500326 rm -f ${D}${sysconfdir}/syslog-startup.conf
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500327 fi
328}
329
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500330do_install_ptest () {
331 cp -r ${B}/testsuite ${D}${PTEST_PATH}/
332 cp ${B}/.config ${D}${PTEST_PATH}/
333 ln -s /bin/busybox ${D}${PTEST_PATH}/busybox
334}
335
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500336inherit update-alternatives
337
338ALTERNATIVE_PRIORITY = "50"
339
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500340python do_package_prepend () {
341 # We need to load the full set of busybox provides from the /etc/busybox.links
342 # Use this to see the update-alternatives with the right information
343
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500344 dvar = d.getVar('D')
345 pn = d.getVar('PN')
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500346 def set_alternative_vars(links, target):
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500347 links = d.expand(links)
348 target = d.expand(target)
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500349 f = open('%s%s' % (dvar, links), 'r')
350 for alt_link_name in f:
351 alt_link_name = alt_link_name.strip()
352 alt_name = os.path.basename(alt_link_name)
353 # Match coreutils
354 if alt_name == '[':
355 alt_name = 'lbracket'
356 d.appendVar('ALTERNATIVE_%s' % (pn), ' ' + alt_name)
357 d.setVarFlag('ALTERNATIVE_LINK_NAME', alt_name, alt_link_name)
358 if os.path.exists('%s%s' % (dvar, target)):
359 d.setVarFlag('ALTERNATIVE_TARGET', alt_name, target)
360 f.close()
361 return
362
363 if os.path.exists('%s/etc/busybox.links' % (dvar)):
364 set_alternative_vars("${sysconfdir}/busybox.links", "${base_bindir}/busybox")
365 else:
366 set_alternative_vars("${sysconfdir}/busybox.links.nosuid", "${base_bindir}/busybox.nosuid")
367 set_alternative_vars("${sysconfdir}/busybox.links.suid", "${base_bindir}/busybox.suid")
368}
369
370pkg_postinst_${PN} () {
371 # This part of code is dedicated to the on target upgrade problem.
372 # It's known that if we don't make appropriate symlinks before update-alternatives calls,
373 # there will be errors indicating missing commands such as 'sed'.
374 # These symlinks will later be updated by update-alternatives calls.
375 test -n 2 > /dev/null || alias test='busybox test'
376 if test "x$D" = "x"; then
377 # Remove busybox.nosuid if it's a symlink, because this situation indicates
378 # that we're installing or upgrading to a one-binary busybox.
379 if test -h ${base_bindir}/busybox.nosuid; then
380 rm -f ${base_bindir}/busybox.nosuid
381 fi
382 for suffix in "" ".nosuid" ".suid"; do
383 if test -e ${sysconfdir}/busybox.links$suffix; then
384 while read link; do
385 if test ! -e "$link"; then
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500386 # we can use busybox here because even if we are using splitted busybox
387 # we've made a symlink from /bin/busybox to /bin/busybox.nosuid.
388 busybox rm -f $link
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500389 busybox ln -s "${base_bindir}/busybox$suffix" $link
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500390 fi
391 done < ${sysconfdir}/busybox.links$suffix
392 fi
393 done
394 fi
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500395 if grep -q "^${base_bindir}/bash$" $D${sysconfdir}/busybox.links*; then
396 grep -q "^${base_bindir}/bash$" $D${sysconfdir}/shells || echo ${base_bindir}/bash >> $D${sysconfdir}/shells
397 fi
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500398}
399
400pkg_prerm_${PN} () {
401 # This is so you can make busybox commit suicide - removing busybox with no other packages
402 # providing its files, this will make update-alternatives work, but the update-rc.d part
403 # for syslog, httpd and/or udhcpd will fail if there is no other package providing sh
404 tmpdir=`mktemp -d /tmp/busyboxrm-XXXXXX`
405 ln -s ${base_bindir}/busybox $tmpdir/[
406 ln -s ${base_bindir}/busybox $tmpdir/test
407 ln -s ${base_bindir}/busybox $tmpdir/head
408 ln -s ${base_bindir}/busybox $tmpdir/sh
409 ln -s ${base_bindir}/busybox $tmpdir/basename
410 ln -s ${base_bindir}/busybox $tmpdir/echo
411 ln -s ${base_bindir}/busybox $tmpdir/mv
412 ln -s ${base_bindir}/busybox $tmpdir/ln
413 ln -s ${base_bindir}/busybox $tmpdir/dirname
414 ln -s ${base_bindir}/busybox $tmpdir/rm
415 ln -s ${base_bindir}/busybox $tmpdir/sed
416 ln -s ${base_bindir}/busybox $tmpdir/sort
417 ln -s ${base_bindir}/busybox $tmpdir/grep
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500418 ln -s ${base_bindir}/busybox $tmpdir/tail
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500419 export PATH=$PATH:$tmpdir
420}
421
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500422pkg_postrm_${PN} () {
423 if grep -q "^${base_bindir}/bash$" $D${sysconfdir}/busybox.links* && [ ! -e $D${base_bindir}/bash ]; then
424 printf "$(grep -v "^${base_bindir}/bash$" $D${sysconfdir}/shells)\n" > $D${sysconfdir}/shells
425 fi
426}
427
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500428pkg_prerm_${PN}-syslog () {
429 # remove syslog
430 if test "x$D" = "x"; then
431 if test "$1" = "upgrade" -o "$1" = "remove"; then
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600432 ${sysconfdir}/init.d/syslog stop || :
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500433 fi
434 fi
435}
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500436
437RPROVIDES_${PN} += "${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', '/bin/sh', '', d)}"