aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichał Łyszczek <michal.lyszczek@bofc.pl>2019-08-17 17:54:20 +0200
committerMichał Łyszczek <michal.lyszczek@bofc.pl>2019-08-17 19:09:49 +0200
commitcf0d9aafe7bf8a9a8eedaaff0038b68a3021dc72 (patch)
tree27b4d55ad1bcb9eff0fd2bbd36dbb236f30decc9
parentda81020fdb970d4778e2b1079f24dc37f5c7e7d9 (diff)
downloadtermsend-cf0d9aafe7bf8a9a8eedaaff0038b68a3021dc72.tar.gz
termsend-cf0d9aafe7bf8a9a8eedaaff0038b68a3021dc72.tar.bz2
termsend-cf0d9aafe7bf8a9a8eedaaff0038b68a3021dc72.zip
pkg/rpm: add scripts to build rpm package
no_ci Signed-off-by: Michał Łyszczek <michal.lyszczek@bofc.pl>
-rwxr-xr-xpkg/rpm/create-pkg.sh157
-rw-r--r--pkg/rpm/kurload.spec.template66
2 files changed, 223 insertions, 0 deletions
diff --git a/pkg/rpm/create-pkg.sh b/pkg/rpm/create-pkg.sh
new file mode 100755
index 0000000..716e5f1
--- /dev/null
+++ b/pkg/rpm/create-pkg.sh
@@ -0,0 +1,157 @@
+#!/bin/sh
+
+project="kurload"
+scp_server="pkgs@kurwik"
+retval=1
+
+atexit()
+{
+ set +e
+
+ /etc/init.d/kurload stop
+
+ if type zypper >/dev/null
+ then
+ zypper remove -y embedlog-devel
+ zypper remove -y embedlog
+
+ zypper remove -y "${project}"
+ else
+ yum remove -y embedlog-devel
+ yum remove -y embedlog
+
+ yum remove -y "${project}"
+ fi
+
+ groupdel kurload
+ userdel kurload
+ rmdir /var/lib/kurload
+
+ if [ "x${1}" != "xno-exit" ]
+ then
+ exit ${retval}
+ fi
+}
+
+if [ ${#} -ne 3 ]
+then
+ echo "usage: ${0} <version> <arch> <host_os>"
+ echo ""
+ echo "where"
+ echo " <version> git tag version"
+ echo " <arch> target architecture"
+ echo " <host_os> target os (rhel-7, centos-7 etc)"
+ exit 1
+fi
+
+git_version="${1}"
+arch="${2}"
+host_os="${3}"
+
+trap atexit EXIT
+set -e
+
+cd "${HOME}/rpmbuild"
+pkg_version="$(curl "https://git.kurwinet.pl/${project}/plain/configure.ac?h=${git_version}" | \
+ grep "AC_INIT(" | cut -f3 -d\[ | cut -f1 -d\])"
+wget "https://git.kurwinet.pl/${project}/snapshot/${project}-${git_version}.tar.gz" \
+ -O "SOURCES/${project}-${pkg_version}.tar.gz"
+wget "https://git.kurwinet.pl/${project}/plain/pkg/rpm/${project}.spec.template?h=${git_version}" \
+ -O "SPECS/${project}-${pkg_version}.spec"
+lt_version="$(curl "https://git.kurwinet.pl/${project}/plain/lib/Makefile.am?h=${git_version}" | \
+ grep "${project}_la_LDFLAGS = -version-info" | cut -f4 -d\ )"
+
+current="$(echo ${lt_version} | cut -f1 -d:)"
+revision="$(echo ${lt_version} | cut -f2 -d:)"
+age="$(echo ${lt_version} | cut -f3 -d:)"
+
+lib_version="$(( current - age )).${age}.${revision}"
+abi_version="$(( current - age ))"
+rel_version="$(cat SPECS/${project}-${pkg_version}.spec | \
+ grep "Release:" | awk '{print $2}')"
+
+sed -i "s/@{VERSION}/${pkg_version}/" SPECS/${project}-${pkg_version}.spec
+sed -i "s/@{GIT_VERSION}/${git_version}/" SPECS/${project}-${pkg_version}.spec
+sed -i "s/@{LIB_VERSION}/${lib_version}/" SPECS/${project}-${pkg_version}.spec
+sed -i "s/@{ABI_VERSION}/${abi_version}/" SPECS/${project}-${pkg_version}.spec
+
+# install deps
+if type zypper >/dev/null
+then
+ zypper install -y embedlog embedlog-devel
+else
+ yum install -y embedlog embedlog-devel
+fi
+
+if cat /etc/os-release | grep "openSUSE Leap"
+then
+ # opensuse doesn't generate debug symbols by defaul, check spec file
+ # for comment
+ sed -i 's/# __DEBUG_PACKAGE__/%debug_package/' \
+ SPECS/${project}-${pkg_version}.spec
+fi
+
+rpmbuild -ba SPECS/${project}-${pkg_version}.spec
+
+###
+# verify
+#
+
+if type zypper >/dev/null
+then
+ # looks like we are dealing with opensuse
+
+ zypper install -y --allow-unsigned-rpm \
+ "RPMS/${arch}/${project}-${pkg_version}-${rel_version}.${arch}.rpm"
+else
+ # else, assume rhel or centos or fedora or whatever that uses yum
+
+ yum -y install \
+ "RPMS/${arch}/${project}-${pkg_version}-${rel_version}.${arch}.rpm"
+fi
+
+if ldd $(which kurload) | grep "\/usr\/bofc"
+then
+ # sanity check to make sure test program uses system libraries
+ # and not locally installed ones (which are used as build
+ # dependencies for other programs
+
+ echo "test prog uses libs from manually installed /usr/bofc \
+ instead of system path!"
+ exit 1
+fi
+
+kurload -v
+/etc/init.d/kurload start
+/etc/init.d/kurload restart
+/etc/init.d/kurload stop
+
+# cleanup
+atexit "no-exit"
+
+# run test prog again, but now fail if there is no error, since program
+# should no longer be in the system.
+retval=0
+set +e
+kurload -v && retval=1
+getent passwd kurload && retval=2
+getent group kurload && retval=3
+[ -d /var/lib/kurload ] && retval=4
+
+if [ ${retval} -ne 0 ]
+then
+ echo "failed with status ${retval}"
+ exit ${retval}
+fi
+set -e
+
+retval=1
+if [ -n "${scp_server}" ]
+then
+ echo "copying data to ${scp_server}:${project}/${host_os}/${arch}"
+ scp "RPMS/${arch}/${project}-${pkg_version}-${rel_version}.${arch}.rpm" \
+ "RPMS/${arch}/${project}-debuginfo-${pkg_version}-${rel_version}.${arch}.rpm" \
+ "${scp_server}:${project}/${host_os}/${arch}" || exit 1
+fi
+
+retval=0
diff --git a/pkg/rpm/kurload.spec.template b/pkg/rpm/kurload.spec.template
new file mode 100644
index 0000000..c5d3105
--- /dev/null
+++ b/pkg/rpm/kurload.spec.template
@@ -0,0 +1,66 @@
+Name: kurload
+Version: @{VERSION}
+Release: 1
+Summary: share files or program output from command line using the most basic UNIX tools
+
+Group: Applications/Internet
+License: BSD
+URL: https://kurload.kurwinet.pl
+Source0: https://git.kurwinet.pl/kurload/snapshot/kurload-%{version}.tar.gz
+Vendor: Bits of Code
+Packager: Michał Łyszczek <michal.lyszczek@bofc.pl>
+
+BuildRequires: embedlog >= 0.5.0, automake autoconf libtool
+Requires: embedlog >= 0.5.0
+
+%description
+Server application to share files (or program output) from command line using
+the most basic UNIX tools, like netcat.
+
+%prep
+%setup -q -n kurload-@{GIT_VERSION}
+
+# debug packge macro, it is commented by default as rhel and centos
+# automatically build debug package, but open suse does not. Change it to
+# "@debug_package" (just change that @ to percent %% character)
+# when debug symbols are not automatically installed
+
+# __DEBUG_PACKAGE__
+
+%build
+# kurload rc script sources config from /usr/local/etc, and if package is
+# installed from package manager, config file is in /etc
+sed -i 's@^\. /usr/local/etc/kurload.conf$@. /etc/kurload.conf@' init.d/kurload
+# same for command path
+sed -i 's@^command=/usr/local/bin/kurload$@command=/usr/bin/kurload@' init.d/kurload
+./autogen.sh
+%configure --enable-openssl
+make %{?_smp_mflags}
+
+%install
+[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
+make DESTDIR=$RPM_BUILD_ROOT install
+
+%clean
+[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
+
+%post
+if ! getent group kurload >/dev/null; then
+ groupadd --system kurload
+fi
+if ! getent passwd kurload >/dev/null; then
+ adduser --system --home /var/lib/kurload --shell /usr/sbin/nologin \
+ --gid $(getent group kurload | cut -f3 -d:) kurload
+fi
+mkdir -p /var/lib/kurload
+chown kurload:kurload /var/lib/kurload
+
+%files
+%defattr(-,root,root,-)
+%doc AUTHORS LICENSE readme.md
+%{_mandir}/*/*
+%{_bindir}/kurload
+%{_sysconfdir}/kurload.conf
+%attr(755, root, root)%{_sysconfdir}/init.d/kurload
+
+%changelog