%bcond_with systemd

%if ! %{with systemd}
%{!?_unitdir:%global _unitdir /usr/lib/systemd/system}
%endif
%global _systemdscriptdir %(dirname %{_unitdir})

Summary: Device-mapper RAID tool and library.
Summary(ja): Device-mapper RAID ツールおよびライブラリ
Name: dmraid
Version: 1.0.0.rc16
Release: 5%{?_dist_release}%{?with_systemd:.systemd}
Group: system
Vendor: Project Vine
Distribution: Vine Linux

License: GPL
URL: http://people.redhat.com/heinzm/sw/dmraid
Source: ftp://people.redhat.com/heinzm/sw/dmraid/src/%{name}-%{version}.tar.bz2
Source1: dmraid-activation
Source2: dmraid-activation.service

Patch0: dmraid-1.0.0.rc16-test_devices.patch
Patch1: ddf1_lsi_persistent_name.patch
Patch2: pdc_raid10_failure.patch
Patch3: return_error_wo_disks.patch
Patch4: fix_sil_jbod.patch
Patch5: avoid_register.patch
Patch6: move_pattern_file_to_var.patch
Patch7: libversion.patch
Patch8: libversion-display.patch

Patch9: bz635995-data_corruption_during_activation_volume_marked_for_rebuild.patch
Patch11: bz626417_19-enabling_registration_degraded_volume.patch
Patch12: bz626417_20-cleanup_some_compilation_warning.patch
Patch13: bz626417_21-add_option_that_postpones_any_metadata_updates.patch

Patch14: dmraid-fix-build-to-honour-cflags-var.patch
Patch15: dmraid-fix-errors-and-warnings-triggered-by-CFLAGS.patch
Patch16: dmraid-fix-destdir.patch
Patch17: dmraid-fix-missing-destdir.patch
Patch18: dmraid-fix-so-flags.patch
Patch19: dmraid-use-modern-run-lock-dir.patch
Patch20: dmraid-c99.patch

Patch100: dmraid-1.0.0.rc16-libudev.patch

BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
BuildRequires: device-mapper-devel >= 1.02.22
BuildRequires: device-mapper-event-devel
%if %{with systemd}
BuildRequires: systemd-devel
%else
BuildRequires: eudev-libudev-devel
%endif
Requires: device-mapper >= 1.02.22

%description
DMRAID supports RAID device discovery, RAID set activation and display of
properties for ATARAID on Linux >= 2.4 using device-mapper.


%package -n dmraid-devel
Summary: Development libraries and headers for dmraid.
Group: programming

%description -n dmraid-devel
dmraid-devel provides a library interface for RAID device discovery,
RAID set activation and display of properties for ATARAID volumes.


%package -n dmraid-events
Summary: dmevent_tool (Device-mapper event tool) and DSO
Group: system
Requires: dmraid = %{version}-%{release}, sgpio
Requires: device-mapper-event

%description -n dmraid-events
Provides a dmeventd DSO and the dmevent_tool to register devices with it
for device monitoring.  All active RAID sets should be manually registered
with dmevent_tool.


%package -n dmraid-events-logwatch
Summary: dmraid logwatch-based email reporting
Group: system
Requires: dmraid-events = %{version}-%{release}, logwatch, /etc/cron.d

%description -n dmraid-events-logwatch
Provides device failure reporting via logwatch-based email reporting.
Device failure reporting has to be activated manually by activating the 
/etc/cron.d/dmeventd-logwatch entry and by calling the dmevent_tool
(see manual page for examples) for any active RAID sets.


%debug_package


%prep
%setup -q -n dmraid/%{version}
%autopatch -p1 -M 18
%if %{with systemd}
%patch19 -p1
%endif
%autopatch -p1 -m 20


%build
%configure \
  --sbindir=/sbin \
  --disable-libselinux --disable-static_link \
  --enable-led --enable-intel_led
# parallel make is broken, do not pass smp flags
make


%install
rm -rf %{buildroot}
install -m 755 -d %{buildroot}{%{_libdir},/sbin,%{_sbindir},%{_bindir},%{_libdir},%{_includedir}/dmraid/,/var/lock/dmraid,%{_sysconfdir}/cron.d/}
install -m 755 -d %{buildroot}{%{_sysconfdir}/logwatch/conf/services/,%{_sysconfdir}/logwatch/scripts/services/,/var/cache/logwatch/dmeventd}
make DESTDIR=%{buildroot} install
#install -m 755 tools/dmraid.static %{buildroot}/sbin/dmraid.static
ln -s dmraid %{buildroot}/sbin/dmraid.static

# Provide convenience link from dmevent_tool
(cd %{buildroot}/sbin ; ln -f dmevent_tool dm_dso_reg_tool)
(cd %{buildroot}/%{_mandir}/man8 ; ln -f dmevent_tool.8 dm_dso_reg_tool.8 ; ln -f dmraid.8 dmraid.static.8)

#
install -m 644 include/dmraid/*.h %{buildroot}%{_includedir}/dmraid/

# Install the libdmraid and libdmraid-events (for dmeventd) DSO
# Create version symlink to libdmraid.so.1 we link against
install -m 755 lib/libdmraid.so \
        %{buildroot}%{_libdir}/libdmraid.so.%{version}
(cd %{buildroot}/%{_libdir} ; ln -sf libdmraid.so.%{version} libdmraid.so ; ln -sf libdmraid.so.%{version} libdmraid.so.1)
install -m 755 lib/libdmraid-events-isw.so \
        %{buildroot}%{_libdir}/libdmraid-events-isw.so.%{version}
(cd %{buildroot}/%{_libdir} ; ln -sf libdmraid-events-isw.so.%{version} libdmraid-events-isw.so ; ln -sf libdmraid-events-isw.so.%{version} libdmraid-events-isw.so.1)

# Install logwatch config file and script for dmeventd
install -m 644 logwatch/dmeventd.conf %{buildroot}%{_sysconfdir}/logwatch/conf/services/dmeventd.conf
install -m 755 logwatch/dmeventd %{buildroot}%{_sysconfdir}/logwatch/scripts/services/dmeventd
install -m 644 logwatch/dmeventd_cronjob.txt %{buildroot}%{_sysconfdir}/cron.d/dmeventd-logwatch
install -m 0700 /dev/null %{buildroot}/var/cache/logwatch/dmeventd/syslogpattern.txt

%if %{with systemd}
# Install systemd unit
mkdir -p %{buildroot}%{_unitdir}
install -p -m 755 %{SOURCE1} %{buildroot}%{_systemdscriptdir}/dmraid-activation
install -p -m 444 %{SOURCE2} %{buildroot}%{_unitdir}/dmraid-activation.service
sed -i -e 's|@systemdscriptdir@|%{_systemdscriptdir}|' %{buildroot}%{_unitdir}/dmraid-activation.service
%endif

# remove static libs
rm -f %{buildroot}/%{_libdir}/libdmraid.a

%clean
rm -rf %{buildroot}


%if %{with systemd}
%post
%systemd_post dmraid-activation.service

%preun
%systemd_preun dmraid-activation.service

%postun
%systemd_postun dmraid-activation.service
%endif


%files
%defattr(-,root,root)
%license LICENSE LICENSE_GPL LICENSE_LGPL
%doc CHANGELOG CREDITS KNOWN_BUGS README TODO doc/dmraid_design.txt
%{_mandir}/man8/*
/sbin/*
%{_libdir}/libdmraid.so*
%{_libdir}/libdmraid-events-isw.so*
%if %{with systemd}
%{_systemdscriptdir}/dmraid-activation
%{_unitdir}/dmraid-activation.service
%ghost /run/lock/dmraid
%else
%ghost /var/lock/dmraid
%endif

%files -n dmraid-devel
%defattr(-,root,root)
%dir %{_includedir}/dmraid
%{_includedir}/dmraid/*

%files -n dmraid-events
%defattr(-,root,root)
/%{_mandir}/man8/dmevent_tool*
/%{_mandir}/man8/dm_dso_reg_tool*
/sbin/dmevent_tool
/sbin/dm_dso_reg_tool

%files -n dmraid-events-logwatch
%defattr(-,root,root)
%config(noreplace) %{_sysconfdir}/logwatch/*
%config(noreplace) %{_sysconfdir}/cron.d/dmeventd-logwatch
%dir /var/cache/logwatch/dmeventd
%ghost /var/cache/logwatch/dmeventd/syslogpattern.txt


%changelog
* Sun May 14 2023 Tomohiro "Tomo-p" KATO <tomop@teamgedoh.net> 1.0.0.rc16-5
- imported Patch19 and 20 from rawhide.

* Sat Mar 28 2020 Tomohiro "Tomo-p" KATO <tomop@teamgedoh.net> 1.0.0.rc16-4
- imported Patch14-18 from rawhide.
 
* Tue Jun 17 2014 Yoji TOYODA <bsyamato@sea.plala.or.jp> 1.0.0.rc16-3
- change BuildRequires: eudev-libudev-static instead of libudev-static

* Sat Dec 28 2013 Yoji TOYODA <bsyamato@sea.plala.or.jp> 1.0.0.rc16-2
- rebuild with VineSeed environment

* Tue Apr 05 2011 Daisuke SUZUKI <daisuke@linux.or.jp> 1.0.0.rc16-1
- update to 1.0.0.rc16
- update patches from fedora package
- add BR: libudev-static, device-mapper-static, glibc-static
- add BR: device-mapper-event-devel
- add -events, -events-logwatch subpackage
- move libdmraid.so to main package
- use %ghost for /var/lock/dmraid

* Sat Mar 28 2009 Daisuke SUZUKI <daisuke@linux.or.jp> 1.0.0.rc15-1
- new upstream release

* Mon Dec 03 2007 Daisuke SUZUKI <daisuke@linux.or.jp> 1.0.0-0vl0.rc14.1
- initial build for Vine Linux
- disable selinux
- require device-mapper 1.02.22

* Wed Nov 21 2007 Ian Kent <ikent@redhat.com> - 1.0.0.rc14-6
- Bug 379911: dmraid needs to generate UUIDs for lib device-mapper
  - add "DMRAID-" prefix to dmraid UUID string.

* Wed Nov 14 2007 Ian Kent <ikent@redhat.com> - 1.0.0.rc14-5
- Bug 379911: dmraid needs to generate UUIDs for lib device-mapper
- Bug 379951: dmraid needs to activate device-mapper mirror resynchronization error handling

* Mon Oct 22 2007 Ian Kent <ikent@redhat.com> - 1.0.0.rc14-4
- Fix SEGV on "dmraid -r -E" (bz 236891).

* Wed Apr 18 2007 Peter Jones <pjones@redhat.com> - 1.0.0.rc14-3
- Fix jmicron name parsing (#219058)

* Mon Feb 05 2007 Alasdair Kergon <agk@redhat.com> - 1.0.0.rc14-2
- Add build dependency on new device-mapper-devel package.
- Add dependency on device-mapper.
- Add post and postun ldconfig.
- Update BuildRoot and Summary.

* Wed Nov 08 2006 Heinz Mauelshagen <heinzm@redhat.com> - 1.0.0.rc14-1
- asr.c: fixed Adaptec HostRAID DDF1 metadata discovery (bz#211016)
- ddf1_crc.c: added crc() routine to avoid linking to zlib alltogether,
              because Ubuntu had problems with this
- dropped zlib build requirement

* Thu Oct 26 2006 Heinz Mauelshagen <heinzm@redhat.com> - 1.0.0.rc14-bz211016-1
- ddf1.c: get_size() fixed (bz#211016)
- ddf1_lib.c: ddf1_cr_off_maxpds_helper() fixed (bz#211016)

* Wed Oct 11 2006 Heinz Mauelshagen <heinzm@redhat.com> - 1.0.0.rc13-1
- metadata.c: fixed bug returning wrang unified RAID type (bz#210085)
- pdc.c: fixed magic number check

* Sun Oct 01 2006 Jesse Keating <jkeating@redhat.com> - 1.0.0.rc12-7
- rebuilt for unwind info generation, broken in gcc-4.1.1-21

* Fri Sep 22 2006 Heinz Mauelshagen <heinzm@redhat.com> - 1.0.0.rc12-1
- sil.c: quorate() OBO fix
- activate.c: handler() OBO fix
- added SNIA DDF1 support
- added reload functionality to devmapper.c
- added log_zero_sectors() to various metadata format handlers
- sil.[ch]: added JBOD support

* Fri Sep  1 2006 Peter Jones <pjones@redhat.com> - 1.0.0.rc11-4
- Require kpartx, so initscripts doesn't have to if you're not using dmraid

* Thu Aug 17 2006 Jesse Keating <jkeating@redhat.com> - 1.0.0.rc11-3
- Change Release to follow guidelines, and add dist tag.

* Thu Aug 17 2006 Peter Jones <pjones@redhat.com> - 1.0.0.rc11-FC6.3
- No more excludearch for s390/s390x

* Fri Jul 28 2006 Peter Jones <pjones@redhat.com> - 1.0.0.rc11-FC6.2
- Fix bounds checking on hpt37x error log
- Only build the .so, not the .a
- Fix asc.c duplication in makefile rule

* Wed Jul 12 2006 Jesse Keating <jkeating@redhat.com> - 1.0.0.rc11-FC6.1.1
- rebuild

* Fri Jul  7 2006 Heinz Mauelshagen <heinzm@redhat.com> - 1.0.0.rc11-FC6.1
- rebuilt for FC6 with dos partition discovery fix (#197573)

* Tue May 16 2006 Heinz Mauelshagen <heinzm@redhat.com> - 1.0.0.rc11-FC6
- rebuilt for FC6 with better tag

* Tue May 16 2006 Heinz Mauelshagen <heinzm@redhat.com> - 1.0.0.rc11-FC5_7.2
- rebuilt for FC5

* Tue May 16 2006 Heinz Mauelshagen <heinzm@redhat.com> - 1.0.0.rc11-FC5_7.1
- jm.c: checksum() calculation
- misc.c: support "%d" in p_fmt and fix segfault with wrong format identifier
- nv.c: size fix in setup_rd()
- activate.c:
        o striped devices could end on non-chunk boundaries
        o calc_region_size() calculated too small sizes causing large
          dirty logs in memory
- isw.c: set raid5 type to left asymmetric
- toollib.c: fixed 'No RAID...' message
- support selection of RAID5 allocation algorithm in metadata format handlers
- build

* Mon Mar 27 2006 Milan Broz <mbroz@redhat.com> - 1.0.0.rc10-FC5_6.2
- fixed /var/lock/dmraid in specfile (#168195)

* Fri Feb 17 2006 Heinz Mauelshagen <heinzm@redhat.com> - 1.0.0.rc10-FC5_6
- add doc/dmraid_design.txt to %doc (#181885)
- add --enable-libselinux --enable-libsepol to configure
- rebuilt

* Fri Feb 10 2006 Jesse Keating <jkeating@redhat.com> - 1.0.0.rc9-FC5_5.2
- bump again for double-long bug on ppc(64)

* Tue Feb 07 2006 Jesse Keating <jkeating@redhat.com> - 1.0.0.rc9-FC5_5.1
- rebuilt for new gcc4.1 snapshot and glibc changes

* Sun Jan 22 2006 Peter Jones <pjones@redhat.com> 1.0.0.rc9-FC5_5
- Add selinux build deps
- Don't set owner during make install

* Fri Dec  9 2005 Jesse Keating <jkeating@redhat.com> 1.0.0.rc9-FC5_4.1
- rebuilt

* Sat Dec  3 2005 Peter Jones <pjones@redhat.com> 1.0.0.rc9-FC5_4
- rebuild for device-mapper-1.02.02-2

* Fri Dec  2 2005 Peter Jones <pjones@redhat.com> 1.0.0.rc9-FC5_3
- rebuild for device-mapper-1.02.02-1

* Thu Nov 10 2005 Peter Jones <pjones@redhat.com> 1.0.0.rc9-FC5_2
- update to 1.0.0.rc9
- make "make install" do the right thing with the DSO
- eliminate duplicate definitions in the headers
- export more symbols in the DSO
- add api calls to retrieve dm tables
- fix DESTDIR for 'make install' 
- add api calls to identify degraded devices
- remove several arch excludes

* Sat Oct 15 2005 Florian La Roche <laroche@redhat.com>
- add -lselinux -lsepol for new device-mapper deps

* Fri May 20 2005 Heinz Mauelshagen <heinzm@redhat.com> 1.0.0.rc8-FC4_2
- specfile change to build static and dynamic binray into one package
- rebuilt

* Thu May 19 2005 Heinz Mauelshagen <heinzm@redhat.com> 1.0.0.rc8-FC4_1
- nv.c: fixed stripe size
- sil.c: avoid incarnation_no in name creation, because the Windows
         driver changes it every time
- added --ignorelocking option to avoid taking out locks in early boot
  where no read/write access to /var is given

* Wed Mar 16 2005 Elliot Lee <sopwith@redhat.com>
- rebuilt

* Tue Mar 15 2005 Heinz Mauelshagen <heinzm@redhat.com> 1.0.0.rc6.1-4_FC4
- VIA metadata format handler
- added RAID10 to lsi metadata format handler
- "dmraid -rD": file device size into {devicename}_{formatname}.size
- "dmraid -tay": pretty print multi-line tables ala "dmsetup table"
- "dmraid -l": display supported RAID levels + manual update
- _sil_read() used LOG_NOTICE rather than LOG_INFO in order to
  avoid messages about valid metadata areas being displayed
  during "dmraid -vay".
- isw, sil filed metadata offset on "-r -D" in sectors rather than in bytes.
- isw needed dev_sort() to sort RAID devices in sets correctly.
- pdc metadata format handler name creation. Lead to
  wrong RAID set grouping logic in some configurations.
- pdc RAID1 size calculation fixed (rc6.1)
- dos.c: partition table code fixes by Paul Moore
- _free_dev_pointers(): fixed potential OOB error
- hpt37x_check: deal with raid_disks = 1 in mirror sets
- pdc_check: status & 0x80 doesn't always show a failed device;
  removed that check for now. Status definitions needed.
- sil addition of RAID sets to global list of sets
- sil spare device memory leak
- group_set(): removal of RAID set in case of error
- hpt37x: handle total_secs > device size
- allow -p with -f
- enhanced error message by checking target type against list of
  registered target types

* Fri Jan 21 2005 Alasdair Kergon <agk@redhat.com> 1.0.0.rc5f-2
- Rebuild to pick up new libdevmapper.

* Fri Nov 26 2004 Heinz Mauelshagen <heinzm@redhat.com> 1.0.0.rc5f
- specfile cleanup

* Fri Aug 20 2004 Heinz Mauelshagen <heinzm@redhat.com> 1.0.0-rc4-pre1
- Removed make flag after fixing make.tmpl.in

* Wed Aug 18 2004 Heinz Mauelshagen <heinzm@redhat.com> 1.0.0-rc3
- Added make flag to prevent make 3.80 from looping infinitely

* Thu Jun 17 2004 Heinz Mauelshagen <heinzm@redhat.com> 1.0.0-pre1
- Created
