blob: c9d25ff1cac4bcfdce1307232b889372849841c6 [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
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500350do_install_ptest () {
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800351 cp -r ${B}/testsuite ${D}${PTEST_PATH}/
352 cp ${B}/.config ${D}${PTEST_PATH}/
353 ln -s /bin/busybox ${D}${PTEST_PATH}/busybox
Brad Bishop19323692019-04-05 15:28:33 -0400354
355 mkdir ${D}${PTEST_PATH}/bin
356 if [ "${BUSYBOX_SPLIT_SUID}" = "1" ]; then
357 while read link; do
358 ln -s ${base_bindir}/busybox.suid ${D}${PTEST_PATH}/bin/$(basename $link)
359 done <${D}${sysconfdir}/busybox.links.suid
360 while read link; do
361 ln -s ${base_bindir}/busybox.nosuid ${D}${PTEST_PATH}/bin/$(basename $link)
362 done <${D}${sysconfdir}/busybox.links.nosuid
363 else
364 while read link; do
365 ln -s ${base_bindir}/busybox ${D}${PTEST_PATH}/bin/$(basename $link)
366 done <${D}${sysconfdir}/busybox.links
367 fi
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500368}
369
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500370inherit update-alternatives
371
372ALTERNATIVE_PRIORITY = "50"
373
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500374python do_package_prepend () {
375 # We need to load the full set of busybox provides from the /etc/busybox.links
376 # Use this to see the update-alternatives with the right information
377
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500378 dvar = d.getVar('D')
379 pn = d.getVar('PN')
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500380 def set_alternative_vars(links, target):
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500381 links = d.expand(links)
382 target = d.expand(target)
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500383 f = open('%s%s' % (dvar, links), 'r')
384 for alt_link_name in f:
385 alt_link_name = alt_link_name.strip()
386 alt_name = os.path.basename(alt_link_name)
387 # Match coreutils
388 if alt_name == '[':
389 alt_name = 'lbracket'
Brad Bishop1a4b7ee2018-12-16 17:11:34 -0800390 if alt_name == 'klogd' or alt_name == 'syslogd':
391 d.appendVar('ALTERNATIVE_%s-syslog' % (pn), ' ' + alt_name)
392 else:
393 d.appendVar('ALTERNATIVE_%s' % (pn), ' ' + alt_name)
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500394 d.setVarFlag('ALTERNATIVE_LINK_NAME', alt_name, alt_link_name)
395 if os.path.exists('%s%s' % (dvar, target)):
396 d.setVarFlag('ALTERNATIVE_TARGET', alt_name, target)
397 f.close()
398 return
399
400 if os.path.exists('%s/etc/busybox.links' % (dvar)):
401 set_alternative_vars("${sysconfdir}/busybox.links", "${base_bindir}/busybox")
402 else:
403 set_alternative_vars("${sysconfdir}/busybox.links.nosuid", "${base_bindir}/busybox.nosuid")
404 set_alternative_vars("${sysconfdir}/busybox.links.suid", "${base_bindir}/busybox.suid")
405}
406
407pkg_postinst_${PN} () {
408 # This part of code is dedicated to the on target upgrade problem.
409 # It's known that if we don't make appropriate symlinks before update-alternatives calls,
410 # there will be errors indicating missing commands such as 'sed'.
411 # These symlinks will later be updated by update-alternatives calls.
412 test -n 2 > /dev/null || alias test='busybox test'
413 if test "x$D" = "x"; then
414 # Remove busybox.nosuid if it's a symlink, because this situation indicates
415 # that we're installing or upgrading to a one-binary busybox.
416 if test -h ${base_bindir}/busybox.nosuid; then
417 rm -f ${base_bindir}/busybox.nosuid
418 fi
419 for suffix in "" ".nosuid" ".suid"; do
420 if test -e ${sysconfdir}/busybox.links$suffix; then
421 while read link; do
422 if test ! -e "$link"; then
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500423 # we can use busybox here because even if we are using splitted busybox
424 # we've made a symlink from /bin/busybox to /bin/busybox.nosuid.
425 busybox rm -f $link
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500426 busybox ln -s "${base_bindir}/busybox$suffix" $link
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500427 fi
428 done < ${sysconfdir}/busybox.links$suffix
429 fi
430 done
431 fi
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500432 if grep -q "^${base_bindir}/bash$" $D${sysconfdir}/busybox.links*; then
433 grep -q "^${base_bindir}/bash$" $D${sysconfdir}/shells || echo ${base_bindir}/bash >> $D${sysconfdir}/shells
434 fi
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500435}
436
437pkg_prerm_${PN} () {
438 # This is so you can make busybox commit suicide - removing busybox with no other packages
439 # providing its files, this will make update-alternatives work, but the update-rc.d part
440 # for syslog, httpd and/or udhcpd will fail if there is no other package providing sh
441 tmpdir=`mktemp -d /tmp/busyboxrm-XXXXXX`
442 ln -s ${base_bindir}/busybox $tmpdir/[
443 ln -s ${base_bindir}/busybox $tmpdir/test
444 ln -s ${base_bindir}/busybox $tmpdir/head
445 ln -s ${base_bindir}/busybox $tmpdir/sh
446 ln -s ${base_bindir}/busybox $tmpdir/basename
447 ln -s ${base_bindir}/busybox $tmpdir/echo
448 ln -s ${base_bindir}/busybox $tmpdir/mv
449 ln -s ${base_bindir}/busybox $tmpdir/ln
450 ln -s ${base_bindir}/busybox $tmpdir/dirname
451 ln -s ${base_bindir}/busybox $tmpdir/rm
452 ln -s ${base_bindir}/busybox $tmpdir/sed
453 ln -s ${base_bindir}/busybox $tmpdir/sort
454 ln -s ${base_bindir}/busybox $tmpdir/grep
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500455 ln -s ${base_bindir}/busybox $tmpdir/tail
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500456 export PATH=$PATH:$tmpdir
457}
458
Brad Bishop6e60e8b2018-02-01 10:27:11 -0500459pkg_postrm_${PN} () {
460 if grep -q "^${base_bindir}/bash$" $D${sysconfdir}/busybox.links* && [ ! -e $D${base_bindir}/bash ]; then
461 printf "$(grep -v "^${base_bindir}/bash$" $D${sysconfdir}/shells)\n" > $D${sysconfdir}/shells
462 fi
463}
464
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500465pkg_prerm_${PN}-syslog () {
466 # remove syslog
467 if test "x$D" = "x"; then
468 if test "$1" = "upgrade" -o "$1" = "remove"; then
Patrick Williamsc0f7c042017-02-23 20:41:17 -0600469 ${sysconfdir}/init.d/syslog stop || :
Patrick Williamsc124f4f2015-09-15 14:41:29 -0500470 fi
471 fi
472}
Brad Bishopd7bf8c12018-02-25 22:55:05 -0500473
Brad Bishop19323692019-04-05 15:28:33 -0400474RPROVIDES_${PN} += "${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', '/bin/sh /bin/ash', '', d)}"