From 1a0beff62cb92275b8e2045d681a10977a344780 Mon Sep 17 00:00:00 2001 From: Ralf Ertzinger Date: Thu, 27 Feb 2014 16:43:52 +0100 Subject: [PATCH 1/1] Add RPM build infrastructure This adds an RPM spec file (in rpm/) and two new build targets (rpm and srpm). The RPM build targets are taken from the zfsonlinux source and slightly modified. They don't work too well if you've messed with your local RPM build environment by redefining directory paths in ~/.rpmmacros. --- .gitignore | 2 ++ Makefile | 57 ++++++++++++++++++++++++++++++++++++++++++++++++- rpm/.gitignore | 1 + rpm/Makefile | 22 +++++++++++++++++++ rpm/time-slider.spec.in | 57 +++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 138 insertions(+), 1 deletion(-) create mode 100644 rpm/.gitignore create mode 100644 rpm/Makefile create mode 100644 rpm/time-slider.spec.in diff --git a/.gitignore b/.gitignore index 0d20b64..51fa109 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ *.pyc +*.rpm +*.tar.bz2 diff --git a/Makefile b/Makefile index b0f8064..42197d4 100644 --- a/Makefile +++ b/Makefile @@ -3,6 +3,8 @@ ifeq ($(wildcard .git),) else VERSION=$(shell git describe) endif +MAINVER=$(shell echo $(VERSION) | cut -f1 -d'-') +RELEASE=$(shell echo $(VERSION) | cut -f2- -d'-' | sed -e 's/-/./g') mkinstalldirs = /usr/bin/mkdir -p INSTALL = /usr/bin/install @@ -12,12 +14,14 @@ INSTALL_SCRIPT = ${INSTALL} -t RM = /usr/bin/rm -f RMRF = /usr/bin/rm -Rf RMDIR = /usr/bin/rmdir +RPM = /usr/bin/rpm +RPMBUILD = /usr/bin/rpmbuild # Use python 2.6 if PYTHON environent is not set ifeq ($(strip $(PYTHON)),) PYTHON = /usr/bin/python2 endif -SUBDIRS = po data +SUBDIRS = po data rpm DISTFILES = Authors \ VERSION \ @@ -35,6 +39,7 @@ clean: $(RM) usr/share/time-slider/lib/plugin/*.pyc $(RM) usr/share/time-slider/lib/plugin/rsync/*.pyc $(RM) usr/share/time-slider/lib/plugin/zfssend/*.pyc + $(RM) rpm/time-slider.spec all: for subdir in $(SUBDIRS); do \ @@ -163,3 +168,53 @@ uninstall: $(RM) $(DESTDIR)/var/svc/manifest/application/time-slider.xml $(RM) $(DESTDIR)/var/svc/manifest/application/time-slider-plugin.xml $(RM) $(DESTDIR)/var/svc/manifest/system/filesystem/auto-snapshot.xml + + +rpm-local: + @(if test ! -x "${RPMBUILD}"; then \ + echo -e "\n" \ + "*** Required util ${RPMBUILD} missing. Please install the\n" \ + "*** package for your distribution which provides ${RPMBUILD},\n" \ + "*** re-run configure, and try again.\n"; \ + exit 1; \ + fi; \ + mkdir -p $(rpmbuild)/TMP && \ + mkdir -p $(rpmbuild)/BUILD && \ + mkdir -p $(rpmbuild)/RPMS && \ + mkdir -p $(rpmbuild)/SRPMS && \ + mkdir -p $(rpmbuild)/SPECS && \ + cp rpm/$(rpmspec) $(rpmbuild)/SPECS && \ + mkdir -p $(rpmbuild)/SOURCES && \ + cp time-slider-$(VERSION).tar.bz2 $(rpmbuild)/SOURCES) + +srpm: dist + @(dist=`$(RPM) --eval %{?dist}`; \ + rpmpkg=time-slider-$(MAINVER)-0.$(RELEASE)$$dist*src.rpm; \ + rpmspec=time-slider.spec; \ + rpmbuild=`mktemp -t -d time-slider-build-$$USER-XXXXXXXX`; \ + $(MAKE) \ + rpmbuild="$$rpmbuild" \ + rpmspec="$$rpmspec" \ + rpm-local || exit 1; \ + $(RPMBUILD) \ + --define "_tmppath $$rpmbuild/TMP" \ + --define "_topdir $$rpmbuild" \ + $(def) -bs $$rpmbuild/SPECS/$$rpmspec || exit 1; \ + cp $$rpmbuild/SRPMS/$$rpmpkg . || exit 1; \ + rm -R $$rpmbuild) + +rpm: srpm + @(dist=`$(RPM) --eval %{?dist}`; \ + rpmpkg=time-slider-$(MAINVER)-0.$(RELEASE)$$dist*src.rpm; \ + rpmspec=time-slider.spec; \ + rpmbuild=`mktemp -t -d time-slider-build-$$USER-XXXXXXXX`; \ + $(MAKE) \ + rpmbuild="$$rpmbuild" \ + rpmspec="$$rpmspec" \ + rpm-local || exit 1; \ + ${RPMBUILD} \ + --define "_tmppath $$rpmbuild/TMP" \ + --define "_topdir $$rpmbuild" \ + $(def) --rebuild $$rpmpkg || exit 1; \ + cp $$rpmbuild/RPMS/*/* . || exit 1; \ + rm -R $$rpmbuild) diff --git a/rpm/.gitignore b/rpm/.gitignore new file mode 100644 index 0000000..612654b --- /dev/null +++ b/rpm/.gitignore @@ -0,0 +1 @@ +*.spec diff --git a/rpm/Makefile b/rpm/Makefile new file mode 100644 index 0000000..078f462 --- /dev/null +++ b/rpm/Makefile @@ -0,0 +1,22 @@ +top_builddir = .. +top_srcdir = .. +SED = /usr/bin/sed +INTLTOOL_MERGE = /usr/bin/intltool-merge +spec_in_files = time-slider.spec.in +spec_DATA = $(spec_in_files:.spec.in=.spec) + +ifeq ($(wildcard $(top_srcdir)/.git),) + include $(top_srcdir)/VERSION +else + VERSION=$(shell git describe) +endif +MAINVER=$(shell echo $(VERSION) | cut -f1 -d'-') +RELEASE=$(shell echo $(VERSION) | cut -f2- -d'-' | sed -e 's/-/./g') + +all: $(spec_DATA) + +$(spec_DATA): + $(SED) -e 's,\@VERSION\@,$(MAINVER),g' \ + -e 's,\@RELEASE\@,$(RELEASE),g' \ + -e 's,\@GITVER\@,$(VERSION),g' \ + '$@.in' > '$@' diff --git a/rpm/time-slider.spec.in b/rpm/time-slider.spec.in new file mode 100644 index 0000000..761630c --- /dev/null +++ b/rpm/time-slider.spec.in @@ -0,0 +1,57 @@ +%define gitver @GITVER@ + +Name: time-slider +Version: @VERSION@ +Release: 0.@RELEASE@%{?dist} +Summary: The Solaris ZFS time slider package + +License: CDDL +URL: none +Source0: %{name}-%{gitver}.tar.bz2 + +Requires: python(abi) < 3.0 +Requires(post): systemd +Requires(preun): systemd +Requires(postun): systemd +Requires(post): systemd + +BuildRequires: python(abi) < 3.0 +BuildRequires: systemd + +BuildArch: noarch + +%description +The Solaris time slider package for ZFS + +%prep +%setup -q -n %{name}-%{gitver} + +%build + +%install +rm -rf ${RPM_BUILD_ROOT} +mkdir ${RPM_BUILD_ROOT} +make DESTDIR=${RPM_BUILD_ROOT} install +rm -rf ${RPM_BUILD_ROOT}{/var,/lib,/usr/bin,/usr/share/icons,/etc/xdg/,/usr/share/applications} +%find_lang %{name} + +%files -f %{name}.lang +%{_prefix}/lib/time-slider* +%{_datadir}/time-slider +%{_sysconfdir}/dbus-1/system.d/time-slider.conf +%{_unitdir}/time-sliderd.service + +%post +# run after an installation +%systemd_post time-sliderd.service + +%preun +# run before a package is removed +%systemd_preun time-sliderd.service + +%postun +# run after a package is removed +%systemd_postun_with_restart time-sliderd.service + + +%changelog -- 1.8.3.1