2 # - review patch 3. Updated to 1.17.3, but the code changed so much it's unclear
3 # if it still serves a purpose
4 # - sparc64 modules support in sparc(32), x86_64 modules support in i386 version
5 # - make internal commands work even if busybox is not in /bin/busybox (initrd)
6 # or when /proc is not mounted (static / normal)
9 # alternative busybox config file (replaces default one) you should
10 # define cfgfile macro, i.e.
12 # rpm --rebuild busybox.*.src.rpm --with altconfig --define "cfgfile bb-emb-config.h"
14 %bcond_with altconfig # use alternative config (defined by cfgfile)
15 %bcond_with linkfl # creates links to busybox binary and puts them into file list
16 %bcond_without dynamic # don't build dynamic (base) version
17 %bcond_without static # don't build static version
18 %bcond_without initrd # don't build initrd version
19 %bcond_with musl # build musl-based initrd and static versions
20 %bcond_with glibc # build glibc-based initrd and static versions
21 %bcond_without verbose # verbose build
22 # Options below are useful, when you want fileutils and grep providing.
23 # For example, ash package requires fileutils and grep.
24 %bcond_with fileutl_prov # adds fileutils providing
25 %bcond_with grep_prov # adds grep providing
26 # Option below is useful, when busybox is built with shell support.
27 %bcond_with sh_prov # adds /bin/sh providing
28 # WARNING! Shell, fileutils and grep providing may depend on config file!
29 # Fileutils, grep and shell provided with busybox have not such
30 # functionality as their GNU countenders.
32 %ifnarch %{ix86} %{x8664} ppc
35 Summary: Set of common Unix utilities for embeded systems
36 Summary(pl.UTF-8): Zestaw narzędzi uniksowych dla systemów wbudowanych
37 Summary(pt_BR.UTF-8): BusyBox é um conjunto de utilitários UNIX em um único binário
44 Source0: http://www.busybox.net/downloads/%{name}-%{version}.tar.bz2
45 # Source0-md5: 585949b1dd4292b604b7d199866e9913
46 Source1: %{name}.config
47 Source2: %{name}-initrd.config
48 %{?with_altconfig:Source3: %{cfgfile}}
50 Patch1: %{name}-logconsole.patch
51 Patch2: %{name}-printf-gettext.patch
52 Patch4: %{name}-kernel_headers.patch
53 Patch5: %{name}-insmod-morearchs.patch
54 Patch6: %{name}-dhcp.patch
55 Patch7: %{name}-fix_64_archs.patch
56 Patch8: busybox-1.31.1-stime-fix.patch
57 Patch9: %{name}-ash-export-PATH.patch
58 Patch10: 0001-modutils-check-ELF-header-before-calling-finit_module.patch
59 Patch11: strip-quotes.patch
60 URL: http://www.busybox.net/
61 BuildRequires: gcc >= 3.2
62 BuildRequires: perl-tools-pod
63 BuildRequires: rpmbuild(macros) >= 1.652
64 %if %{with glibc} || %{with dynamic}
65 BuildRequires: libtirpc-devel
66 BuildRequires: pkgconfig
68 %if %{with initrd} || %{with static}
70 BuildRequires: linux-musl-headers
71 BuildRequires: musl-devel
72 BuildRequires: libtirpc-musl-devel
75 BuildRequires: glibc-static
76 BuildRequires: libcom_err-static
77 BuildRequires: libtirpc-static
78 BuildRequires: openssl-static
79 BuildRequires: sqlite3-static
81 %if "%{_target_base_arch}" != "%{_host_base_arch}"
82 BuildRequires: cross%{_target_base_arch}-uClibc-static
85 BuildRequires: uClibc-static >= 3:0.9.30.1
87 BuildRequires: uClibc-static >= 3:0.9.30.1
93 %{?with_sh_prov:Provides: /bin/sh}
94 %{?with_fileutl_prov:Provides: fileutils}
95 %{?with_grep_prov:Provides: grep}
96 Provides: busybox-implementation = %{version}-%{release}
97 BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
99 %define _enable_debug_packages 0
103 %if "%{_target_base_arch}" != "%{_host_base_arch}"
104 %define CrossOpts CROSS="%{_target_cpu}-pld-linux-"
106 %define CrossOpts %{nil}
109 %define filterout_ld -Wl,-z,(combreloc|relro)
112 %define tirpcdcflags %(pkg-config --cflags libtirpc)
114 %if %{with initrd} || %{with static}
116 %define tirpcscflags -I%{_includedir}/musl/tirpc
119 %define tirpcscflags %(pkg-config --cflags libtirpc)
123 %if %{with initrd} || %{with static}
124 %define tirpcslibs %(pkg-config --libs --static libtirpc krb5 krb5-gssapi openssl sqlite3|sed 's/-l//g')
129 %define tirpcdlibs %(pkg-config --libs libtirpc|sed s/-l//g)
133 %define tirpcslibs tirpc
137 BusyBox combines tiny versions of many common UNIX utilities into a
138 single small executable. It provides minimalist replacements for most
139 of the utilities you usually find in fileutils, shellutils, findutils,
140 textutils, grep, gzip, tar, etc. BusyBox provides a fairly complete
141 POSIX environment for any small or embedded system. The utilities in
142 BusyBox generally have fewer options than their full-featured GNU
143 cousins; however, the options that are included provide the expected
144 functionality and behave very much like their GNU counterparts.
146 BusyBox has been written with size-optimization and limited resources
147 in mind. It is also extremely modular so you can easily include or
148 exclude commands (or features) at compile time. This makes it easy to
149 customize your embedded systems. To create a working system, just add
150 a kernel, a shell (such as ash), and an editor (such as elvis-tiny or
153 %description -l pl.UTF-8
154 BusyBox składa małe wersje wielu narzędzi uniksowych w jeden mały plik
155 wykonywalny. Zapewnia minimalne zastępniki większości narzędzi
156 zawartych w pakietach fileutils, shellutils, findutils, grep, gzip,
157 tar itp. BusyBox daje w miarę kompletne środowisko POSIX dla małych
158 lub wbudowanych systemów. Narzędzia mają mniej opcji niż ich pełne
159 odpowiedniki GNU, ale mają podstawową funkcjonalność. Do działającego
160 systemu potrzeba jeszcze tylko kernela, shella (np. ash) oraz edytora
161 (np. elvis-tiny albo ae).
163 %description -l pt_BR.UTF-8
164 BusyBox combina versões reduzidas de muitos utilitários UNIX num único
165 executável, fornecendo substitutos minimalistas para muitos dos
166 executáveis encontrados em pacotes como fileutils, shellutils,
167 findutils, textutils, grep, gzip, tar, etc. Os utilitários do BusyBox
168 em geral têm menos opções que os utilitários GNU, mas as opções
169 implementadas comportam-se de maneira similar aos equivalentes GNU.
172 Summary: Static busybox
173 Summary(pl.UTF-8): Statycznie skonsolidowany busybox
179 %description static -l pl.UTF-8
180 Statycznie skonsolidowany busybox.
183 Summary: Static busybox for initrd
184 Summary(pl.UTF-8): Statycznie skonsolidowany busybox dla initrd
186 Conflicts: geninitrd < 10000.20
187 Provides: busybox-implementation = %{version}-%{release}
190 Static busybox for initrd.
192 %description initrd -l pl.UTF-8
193 Statycznie skonsolidowany busybox dla initrd.
212 install %{SOURCE2} .config
214 sed -i -e 's|CONFIG_FEATURE_VI_REGEX_SEARCH=y|# CONFIG_FEATURE_VI_REGEX_SEARCH is not set|g' .config
216 echo 'CONFIG_EXTRA_LDLIBS="%{?with_glibc:%{tirpcslibs}} %{?with_musl:%{tirpcslibs}}"' >> .config
219 %{?with_verbose:V=1} \
220 EXTRA_CFLAGS="%{rpmcflags} %{?tirpcscflags} -Os -D_GNU_SOURCE %{?with_musl:-I%{_includedir}/musl} %{!?with_glibc:-fno-stack-protector}" \
221 EXTRA_LDFLAGS="%{rpmldflags} -static -Wl,-z,noexecstack %{?with_musl:-L%{_libdir}/musl}" \
229 %if "%{_target_base_arch}" != "%{_host_base_arch}"
230 CROSS="%{_target_cpu}-uclibc-" \
232 CC="%{_target_cpu}-uclibc-gcc"
236 mv -f busybox built/busybox.initrd
241 %if %{with altconfig}
242 install %{SOURCE3} .config
244 install %{SOURCE1} .config
245 echo 'CONFIG_EXTRA_LDLIBS="%{?with_glibc:%{tirpcslibs}} %{?with_musl:%{tirpcslibs}}""' >> .config
248 sed -i -e 's|CONFIG_FEATURE_VI_REGEX_SEARCH=y|# CONFIG_FEATURE_VI_REGEX_SEARCH is not set|g' .config
249 sed -i -e 's|CONFIG_EXTRA_COMPAT=y|# CONFIG_EXTRA_COMPAT is not set|g' .config
253 %{?with_verbose:V=1} \
254 EXTRA_CFLAGS="%{rpmcflags} %{?tirpcscflags} -Os -D_GNU_SOURCE %{?with_musl:-I%{_includedir}/musl} %{!?with_glibc:-fno-stack-protector}" \
255 EXTRA_LDFLAGS="%{rpmldflags} -static -Wl,-z,noexecstack %{?with_musl:-L%{_libdir}/musl}" \
263 %if "%{_target_base_arch}" != "%{_host_base_arch}"
264 CROSS="%{_target_cpu}-uclibc-" \
266 CC="%{_target_cpu}-uclibc-gcc"
270 mv -f busybox built/busybox.static
275 %if %{with altconfig}
276 install %{SOURCE3} .config
278 install %{SOURCE1} .config
279 echo 'CONFIG_EXTRA_LDLIBS="%{tirpcdlibs}"' >> .config
283 %{?with_verbose:V=1} \
285 EXTRA_CFLAGS="%{rpmcflags} %{tirpcdcflags} %{!?with_glibc:-fno-stack-protector}" \
286 EXTRA_LDFLAGS="%{rpmldflags} -Wl,-z,noexecstack" \
288 %{__make} busybox.links docs/busybox.1
292 rm -rf $RPM_BUILD_ROOT
295 install -d $RPM_BUILD_ROOT%{_bindir}
296 install built/busybox.static $RPM_BUILD_ROOT%{_bindir}
300 install -d $RPM_BUILD_ROOT%{_libdir}/initrd
301 install built/busybox.initrd $RPM_BUILD_ROOT%{_libdir}/initrd/busybox
305 install -d $RPM_BUILD_ROOT{%{_bindir},%{_mandir}/man1,%{_libdir}/busybox}
306 install busybox.links $RPM_BUILD_ROOT%{_libdir}/busybox
307 install docs/busybox.1 $RPM_BUILD_ROOT%{_mandir}/man1
309 # install links to busybox binary, when linkfl is defined
312 PREFIX=$RPM_BUILD_ROOT
314 install busybox $RPM_BUILD_ROOT%{_bindir}
319 rm -rf $RPM_BUILD_ROOT
323 %defattr(644,root,root,755)
324 %doc AUTHORS README .config
327 %attr(755,root,root) /bin/*
328 %attr(755,root,root) /sbin/*
329 %attr(755,root,root) %{_bindir}/*
330 %attr(755,root,root) %{_sbindir}/*
332 %attr(755,root,root) %{_bindir}/busybox
336 %{_mandir}/man1/busybox.1*
341 %defattr(644,root,root,755)
342 %attr(755,root,root) %{_bindir}/busybox.static
347 %defattr(644,root,root,755)
348 %attr(755,root,root) %{_libdir}/initrd/busybox