]> git.proxmox.com Git - mirror_zfs.git/blob - rpm/generic/zfs.spec.in
Add "compatibility" property for zpool feature sets
[mirror_zfs.git] / rpm / generic / zfs.spec.in
1 %global _sbindir /sbin
2 %global _libdir /%{_lib}
3
4 # Set the default udev directory based on distribution.
5 %if %{undefined _udevdir}
6 %if 0%{?fedora} >= 17 || 0%{?rhel} >= 7 || 0%{?centos} >= 7
7 %global _udevdir %{_prefix}/lib/udev
8 %else
9 %global _udevdir /lib/udev
10 %endif
11 %endif
12
13 # Set the default udevrule directory based on distribution.
14 %if %{undefined _udevruledir}
15 %if 0%{?fedora} >= 17 || 0%{?rhel} >= 7 || 0%{?centos} >= 7
16 %global _udevruledir %{_prefix}/lib/udev/rules.d
17 %else
18 %global _udevruledir /lib/udev/rules.d
19 %endif
20 %endif
21
22 # Set the default dracut directory based on distribution.
23 %if %{undefined _dracutdir}
24 %if 0%{?fedora} >= 17 || 0%{?rhel} >= 7 || 0%{?centos} >= 7
25 %global _dracutdir %{_prefix}/lib/dracut
26 %else
27 %global _dracutdir %{_prefix}/share/dracut
28 %endif
29 %endif
30
31 %if %{undefined _initconfdir}
32 %global _initconfdir /etc/sysconfig
33 %endif
34
35 %if %{undefined _unitdir}
36 %global _unitdir %{_prefix}/lib/systemd/system
37 %endif
38
39 %if %{undefined _presetdir}
40 %global _presetdir %{_prefix}/lib/systemd/system-preset
41 %endif
42
43 %if %{undefined _modulesloaddir}
44 %global _modulesloaddir %{_prefix}/lib/modules-load.d
45 %endif
46
47 %if %{undefined _systemdgeneratordir}
48 %global _systemdgeneratordir %{_prefix}/lib/systemd/system-generators
49 %endif
50
51 %if %{undefined _pkgconfigdir}
52 %global _pkgconfigdir %{_prefix}/%{_lib}/pkgconfig
53 %endif
54
55 %bcond_with debug
56 %bcond_with debuginfo
57 %bcond_with asan
58 %bcond_with systemd
59 %bcond_with pam
60
61 # Generic enable switch for systemd
62 %if %{with systemd}
63 %define _systemd 1
64 %endif
65
66 # RHEL >= 7 comes with systemd
67 %if 0%{?rhel} >= 7
68 %define _systemd 1
69 %endif
70
71 # Fedora >= 15 comes with systemd, but only >= 18 has
72 # the proper macros
73 %if 0%{?fedora} >= 18
74 %define _systemd 1
75 %endif
76
77 # opensuse >= 12.1 comes with systemd, but only >= 13.1
78 # has the proper macros
79 %if 0%{?suse_version} >= 1310
80 %define _systemd 1
81 %endif
82
83 # When not specified default to distribution provided version. This
84 # is normally Python 3, but for RHEL <= 7 only Python 2 is provided.
85 %if %{undefined __use_python}
86 %if 0%{?rhel} && 0%{?rhel} <= 7
87 %define __python /usr/bin/python2
88 %define __python_pkg_version 2
89 %define __python_cffi_pkg python-cffi
90 %define __python_setuptools_pkg python-setuptools
91 %else
92 %define __python /usr/bin/python3
93 %define __python_pkg_version 3
94 %define __python_cffi_pkg python3-cffi
95 %define __python_setuptools_pkg python3-setuptools
96 %endif
97 %else
98 %define __python %{__use_python}
99 %define __python_pkg_version %{__use_python_pkg_version}
100 %define __python_cffi_pkg python%{__python_pkg_version}-cffi
101 %define __python_setuptools_pkg python%{__python_pkg_version}-setuptools
102 %endif
103 %define __python_sitelib %(%{__python} -Esc "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
104
105 # By default python-pyzfs is enabled, with the exception of
106 # RHEL 6 which by default uses Python 2.6 which is too old.
107 %if 0%{?rhel} == 6
108 %bcond_with pyzfs
109 %else
110 %bcond_without pyzfs
111 %endif
112
113 Name: @PACKAGE@
114 Version: @VERSION@
115 Release: @RELEASE@%{?dist}
116 Summary: Commands to control the kernel modules and libraries
117
118 Group: System Environment/Kernel
119 License: @ZFS_META_LICENSE@
120 URL: https://github.com/openzfs/zfs
121 Source0: %{name}-%{version}.tar.gz
122 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
123 Requires: libzpool4 = %{version}
124 Requires: libnvpair3 = %{version}
125 Requires: libuutil3 = %{version}
126 Requires: libzfs4 = %{version}
127 Requires: %{name}-kmod = %{version}
128 Provides: %{name}-kmod-common = %{version}
129 Obsoletes: spl
130
131 # zfs-fuse provides the same commands and man pages that ZoL does. Renaming
132 # those on either side would conflict with all available documentation.
133 Conflicts: zfs-fuse
134
135 %if 0%{?rhel}%{?fedora}%{?suse_version}
136 BuildRequires: gcc, make
137 BuildRequires: zlib-devel
138 BuildRequires: libuuid-devel
139 BuildRequires: libblkid-devel
140 BuildRequires: libudev-devel
141 BuildRequires: libattr-devel
142 BuildRequires: openssl-devel
143 %if 0%{?fedora} >= 28 || 0%{?rhel} >= 8 || 0%{?centos} >= 8
144 BuildRequires: libtirpc-devel
145 %endif
146 Requires: openssl
147 %if 0%{?_systemd}
148 BuildRequires: systemd
149 %endif
150 %endif
151
152 %if 0%{?_systemd}
153 Requires(post): systemd
154 Requires(preun): systemd
155 Requires(postun): systemd
156 %endif
157
158 # The zpool iostat/status -c scripts call some utilities like lsblk and iostat
159 Requires: util-linux
160 Requires: sysstat
161
162 %description
163 This package contains the core ZFS command line utilities.
164
165 %package -n libzpool4
166 Summary: Native ZFS pool library for Linux
167 Group: System Environment/Kernel
168 Obsoletes: libzpool2
169
170 %description -n libzpool4
171 This package contains the zpool library, which provides support
172 for managing zpools
173
174 %post -n libzpool4 -p /sbin/ldconfig
175 %postun -n libzpool4 -p /sbin/ldconfig
176
177 %package -n libnvpair3
178 Summary: Solaris name-value library for Linux
179 Group: System Environment/Kernel
180 Obsoletes: libnvpair1
181
182 %description -n libnvpair3
183 This package contains routines for packing and unpacking name-value
184 pairs. This functionality is used to portably transport data across
185 process boundaries, between kernel and user space, and can be used
186 to write self describing data structures on disk.
187
188 %post -n libnvpair3 -p /sbin/ldconfig
189 %postun -n libnvpair3 -p /sbin/ldconfig
190
191 %package -n libuutil3
192 Summary: Solaris userland utility library for Linux
193 Group: System Environment/Kernel
194 Obsoletes: libuutil1
195
196 %description -n libuutil3
197 This library provides a variety of compatibility functions for OpenZFS:
198 * libspl: The Solaris Porting Layer userland library, which provides APIs
199 that make it possible to run Solaris user code in a Linux environment
200 with relatively minimal modification.
201 * libavl: The Adelson-Velskii Landis balanced binary tree manipulation
202 library.
203 * libefi: The Extensible Firmware Interface library for GUID disk
204 partitioning.
205 * libshare: NFS, SMB, and iSCSI service integration for ZFS.
206
207 %post -n libuutil3 -p /sbin/ldconfig
208 %postun -n libuutil3 -p /sbin/ldconfig
209
210 %package -n libzfs4
211 Summary: Native ZFS filesystem library for Linux
212 Group: System Environment/Kernel
213 Obsoletes: libzfs2
214
215 %description -n libzfs4
216 This package provides support for managing ZFS filesystems
217
218 %post -n libzfs4 -p /sbin/ldconfig
219 %postun -n libzfs4 -p /sbin/ldconfig
220
221 %package -n libzfs4-devel
222 Summary: Development headers
223 Group: System Environment/Kernel
224 Requires: libzfs4 = %{version}
225 Requires: libzpool4 = %{version}
226 Requires: libnvpair3 = %{version}
227 Requires: libuutil3 = %{version}
228 Provides: libzpool4-devel
229 Provides: libnvpair3-devel
230 Provides: libuutil3-devel
231 Obsoletes: zfs-devel
232 Obsoletes: libzfs2-devel
233
234 %description -n libzfs4-devel
235 This package contains the header files needed for building additional
236 applications against the ZFS libraries.
237
238 %package test
239 Summary: Test infrastructure
240 Group: System Environment/Kernel
241 Requires: %{name}%{?_isa} = %{version}-%{release}
242 Requires: parted
243 Requires: lsscsi
244 Requires: mdadm
245 Requires: bc
246 Requires: ksh
247 Requires: fio
248 Requires: acl
249 Requires: sudo
250 Requires: sysstat
251 Requires: libaio
252 Requires: python%{__python_pkg_version}
253 %if 0%{?rhel}%{?fedora}%{?suse_version}
254 BuildRequires: libaio-devel
255 %endif
256 AutoReqProv: no
257
258 %description test
259 This package contains test infrastructure and support scripts for
260 validating the file system.
261
262 %package dracut
263 Summary: Dracut module
264 Group: System Environment/Kernel
265 BuildArch: noarch
266 Requires: %{name} >= %{version}
267 Requires: dracut
268 Requires: /usr/bin/awk
269 Requires: grep
270
271 %description dracut
272 This package contains a dracut module used to construct an initramfs
273 image which is ZFS aware.
274
275 %if %{with pyzfs}
276 %package -n python%{__python_pkg_version}-pyzfs
277 Summary: Python %{python_version} wrapper for libzfs_core
278 Group: Development/Languages/Python
279 License: Apache-2.0
280 BuildArch: noarch
281 Requires: libzfs4 = %{version}
282 Requires: libnvpair3 = %{version}
283 Requires: libffi
284 Requires: python%{__python_pkg_version}
285 Requires: %{__python_cffi_pkg}
286 %if 0%{?rhel}%{?fedora}%{?suse_version}
287 BuildRequires: python%{__python_pkg_version}-devel
288 BuildRequires: %{__python_cffi_pkg}
289 BuildRequires: %{__python_setuptools_pkg}
290 BuildRequires: libffi-devel
291 %endif
292
293 %description -n python%{__python_pkg_version}-pyzfs
294 This package provides a python wrapper for the libzfs_core C library.
295 %endif
296
297 %if 0%{?_initramfs}
298 %package initramfs
299 Summary: Initramfs module
300 Group: System Environment/Kernel
301 Requires: %{name}%{?_isa} = %{version}-%{release}
302 Requires: %{name} = %{version}-%{release}
303 Requires: initramfs-tools
304
305 %description initramfs
306 This package contains a initramfs module used to construct an initramfs
307 image which is ZFS aware.
308 %endif
309
310 %prep
311 %if %{with debug}
312 %define debug --enable-debug
313 %else
314 %define debug --disable-debug
315 %endif
316
317 %if %{with debuginfo}
318 %define debuginfo --enable-debuginfo
319 %else
320 %define debuginfo --disable-debuginfo
321 %endif
322
323 %if %{with asan}
324 %define asan --enable-asan
325 %else
326 %define asan --disable-asan
327 %endif
328
329 %if 0%{?_systemd}
330 %define systemd --enable-systemd --with-systemdunitdir=%{_unitdir} --with-systemdpresetdir=%{_presetdir} --with-systemdmodulesloaddir=%{_modulesloaddir} --with-systemdgeneratordir=%{_systemdgeneratordir} --disable-sysvinit
331 %define systemd_svcs zfs-import-cache.service zfs-import-scan.service zfs-mount.service zfs-share.service zfs-zed.service zfs.target zfs-import.target zfs-volume-wait.service zfs-volumes.target
332 %else
333 %define systemd --enable-sysvinit --disable-systemd
334 %endif
335
336 %if %{with pyzfs}
337 %define pyzfs --enable-pyzfs
338 %else
339 %define pyzfs --disable-pyzfs
340 %endif
341
342 %if %{with pam}
343 %define pam --enable-pam
344 %else
345 %define pam --disable-pam
346 %endif
347
348 %setup -q
349
350 %build
351 %configure \
352 --with-config=user \
353 --with-udevdir=%{_udevdir} \
354 --with-udevruledir=%{_udevruledir} \
355 --with-dracutdir=%{_dracutdir} \
356 --with-pamconfigsdir=%{_datadir}/pam-configs \
357 --with-pammoduledir=%{_libdir}/security \
358 --with-python=%{__python} \
359 --with-pkgconfigdir=%{_pkgconfigdir} \
360 --disable-static \
361 %{debug} \
362 %{debuginfo} \
363 %{asan} \
364 %{systemd} \
365 %{pam} \
366 %{pyzfs}
367 make %{?_smp_mflags}
368
369 %install
370 %{__rm} -rf $RPM_BUILD_ROOT
371 make install DESTDIR=%{?buildroot}
372 find %{?buildroot}%{_libdir} -name '*.la' -exec rm -f {} \;
373 %if 0%{!?__brp_mangle_shebangs:1}
374 find %{?buildroot}%{_bindir} \
375 \( -name arc_summary -or -name arcstat -or -name dbufstat \) \
376 -exec %{__sed} -i 's|^#!.*|#!%{__python}|' {} \;
377 find %{?buildroot}%{_datadir} \
378 \( -name test-runner.py -or -name zts-report.py \) \
379 -exec %{__sed} -i 's|^#!.*|#!%{__python}|' {} \;
380 %endif
381
382 %post
383 %if 0%{?_systemd}
384 %if 0%{?systemd_post:1}
385 %systemd_post %{systemd_svcs}
386 %else
387 if [ "$1" = "1" -o "$1" = "install" ] ; then
388 # Initial installation
389 systemctl preset %{systemd_svcs} >/dev/null || true
390 fi
391 %endif
392 %else
393 if [ -x /sbin/chkconfig ]; then
394 /sbin/chkconfig --add zfs-import
395 /sbin/chkconfig --add zfs-mount
396 /sbin/chkconfig --add zfs-share
397 /sbin/chkconfig --add zfs-zed
398 fi
399 %endif
400 exit 0
401
402 # On RHEL/CentOS 7 the static nodes aren't refreshed by default after
403 # installing a package. This is the default behavior for Fedora.
404 %posttrans
405 %if 0%{?rhel} == 7 || 0%{?centos} == 7
406 systemctl restart kmod-static-nodes
407 systemctl restart systemd-tmpfiles-setup-dev
408 udevadm trigger
409 %endif
410
411 %preun
412 %if 0%{?_systemd}
413 %if 0%{?systemd_preun:1}
414 %systemd_preun %{systemd_svcs}
415 %else
416 if [ "$1" = "0" -o "$1" = "remove" ] ; then
417 # Package removal, not upgrade
418 systemctl --no-reload disable %{systemd_svcs} >/dev/null || true
419 systemctl stop %{systemd_svcs} >/dev/null || true
420 fi
421 %endif
422 %else
423 if [ "$1" = "0" -o "$1" = "remove" ] && [ -x /sbin/chkconfig ]; then
424 /sbin/chkconfig --del zfs-import
425 /sbin/chkconfig --del zfs-mount
426 /sbin/chkconfig --del zfs-share
427 /sbin/chkconfig --del zfs-zed
428 fi
429 %endif
430 exit 0
431
432 %postun
433 %if 0%{?_systemd}
434 %if 0%{?systemd_postun:1}
435 %systemd_postun %{systemd_svcs}
436 %else
437 systemctl --system daemon-reload >/dev/null || true
438 %endif
439 %endif
440
441 %files
442 # Core utilities
443 %{_sbindir}/*
444 %{_bindir}/raidz_test
445 %{_sbindir}/zgenhostid
446 %{_bindir}/zvol_wait
447 # Optional Python 2/3 scripts
448 %{_bindir}/arc_summary
449 %{_bindir}/arcstat
450 %{_bindir}/dbufstat
451 # Man pages
452 %{_mandir}/man1/*
453 %{_mandir}/man5/*
454 %{_mandir}/man8/*
455 # Configuration files and scripts
456 %{_libexecdir}/%{name}
457 %{_udevdir}/vdev_id
458 %{_udevdir}/zvol_id
459 %{_udevdir}/rules.d/*
460 %{_datadir}/%{name}/compatibility.d
461 %if ! 0%{?_systemd} || 0%{?_initramfs}
462 # Files needed for sysvinit and initramfs-tools
463 %{_sysconfdir}/%{name}/zfs-functions
464 %config(noreplace) %{_initconfdir}/zfs
465 %else
466 %exclude %{_sysconfdir}/%{name}/zfs-functions
467 %exclude %{_initconfdir}/zfs
468 %endif
469 %if 0%{?_systemd}
470 %{_unitdir}/*
471 %{_presetdir}/*
472 %{_modulesloaddir}/*
473 %{_systemdgeneratordir}/*
474 %else
475 %config(noreplace) %{_sysconfdir}/init.d/*
476 %endif
477 %config(noreplace) %{_sysconfdir}/%{name}/zed.d/*
478 %config(noreplace) %{_sysconfdir}/%{name}/zpool.d/*
479 %config(noreplace) %{_sysconfdir}/%{name}/vdev_id.conf.*.example
480 %attr(440, root, root) %config(noreplace) %{_sysconfdir}/sudoers.d/*
481 %if %{with pam}
482 %{_libdir}/security/*
483 %{_datadir}/pam-configs/*
484 %endif
485
486 %files -n libzpool4
487 %{_libdir}/libzpool.so.*
488
489 %files -n libnvpair3
490 %{_libdir}/libnvpair.so.*
491
492 %files -n libuutil3
493 %{_libdir}/libuutil.so.*
494
495 %files -n libzfs4
496 %{_libdir}/libzfs*.so.*
497
498 %files -n libzfs4-devel
499 %{_pkgconfigdir}/libzfs.pc
500 %{_pkgconfigdir}/libzfsbootenv.pc
501 %{_pkgconfigdir}/libzfs_core.pc
502 %{_libdir}/*.so
503 %{_includedir}/*
504 %doc AUTHORS COPYRIGHT LICENSE NOTICE README.md
505
506 %files test
507 %{_datadir}/%{name}/zfs-tests
508 %{_datadir}/%{name}/test-runner
509 %{_datadir}/%{name}/runfiles
510 %{_datadir}/%{name}/*.sh
511
512 %files dracut
513 %doc contrib/dracut/README.dracut.markdown
514 %{_dracutdir}/modules.d/*
515
516 %if %{with pyzfs}
517 %files -n python%{__python_pkg_version}-pyzfs
518 %doc contrib/pyzfs/README
519 %doc contrib/pyzfs/LICENSE
520 %defattr(-,root,root,-)
521 %{__python_sitelib}/libzfs_core/*
522 %{__python_sitelib}/pyzfs*
523 %endif
524
525 %if 0%{?_initramfs}
526 %files initramfs
527 %doc contrib/initramfs/README.initramfs.markdown
528 /usr/share/initramfs-tools/*
529 %else
530 # Since we're not building the initramfs package,
531 # ignore those files.
532 %exclude /usr/share/initramfs-tools
533 %endif