diff options
author | Michał Łyszczek <michal.lyszczek@bofc.pl> | 2019-08-17 17:54:20 +0200 |
---|---|---|
committer | Michał Łyszczek <michal.lyszczek@bofc.pl> | 2019-08-17 19:09:49 +0200 |
commit | cf0d9aafe7bf8a9a8eedaaff0038b68a3021dc72 (patch) | |
tree | 27b4d55ad1bcb9eff0fd2bbd36dbb236f30decc9 | |
parent | da81020fdb970d4778e2b1079f24dc37f5c7e7d9 (diff) | |
download | termsend-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-x | pkg/rpm/create-pkg.sh | 157 | ||||
-rw-r--r-- | pkg/rpm/kurload.spec.template | 66 |
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 |