File coova-chilli.spec of Package coova-chilli
%define realname coova-chilli
%define srcext tar.bz2
%define xtlibdir %(pkg-config --variable=xtlibdir xtables)
# Common info
Name: %{realname}
Version: 0
Release: %{?extraver:0.}1%{?dist}
License: GPL-2.0
Group: Productivity/Networking/Security
URL: http://coova.github.io/
Summary: Software access controller for captive portal hotspots
# Install-time parameters
Requires: haserl
%if 0%{?suse_version}
PreReq: permissions
%endif
# Build-time parameters
BuildRequires: autoconf automake libtool
BuildRequires: gcc-c++
BuildRequires: pkg-config
BuildRequires: gengetopt
BuildRequires: openssl-devel
BuildRequires: libnetfilter_queue-devel
BuildRequires: libnfnetlink-devel
BuildRequires: libmnl-devel
BuildRequires: libpcap-devel
BuildRequires: curl-devel
%if 0%{?suse_version}
BuildRequires: libjson-c-devel
BuildRequires: libxtables-devel
BuildRequires: kernel-devel kernel-syms modutils
%else
BuildRequires: json-c-devel
BuildRequires: iptables-devel
BuildRequires: kernel-headers
%endif
BuildRequires: %kernel_module_package_buildreqs
BuildRoot: %{_tmppath}/%{name}-root
Source0: http://ap.coova.org/chilli/%{realname}-%{version}%{?extraver}.%{srcext}
Source99: preamble
Source199: compiler-gcc5.h
Patch: chilli.init.patch
%description
CoovaChilli is a feature rich software access controller that provides a captive
portal / walled-garden environment and uses RADIUS or a HTTP protocol for access
provisioning and accounting.
%package devel
Group: Development/Languages/C and C++
Summary: Development files for %{name}
Requires: %{name} = %{version}
%description devel
Development files for %{name}
# Don't build kernel module for RHEL/CentOS < 7
%if 0%{?suse_version} || 0%{?rhel} >= 7
%kernel_module_package %{?suse_version:-p %_sourcedir/preamble} -x kdump -x um -x ec2 -x debug -x xen
%package KMP
Group: System/Kernel
Summary: Netfilter module for use with CoovaChilli
%description KMP
Netfilter kernel module for use with CoovaChilli.
%package dkms
Group: System/Kernel
Summary: Netfilter module for use with CoovaChilli
Requires: dkms
BuildArch: noarch
%description dkms
Netfilter kernel module for use with CoovaChilli.
%endif
# Preparation step (unpackung and patching if necessary)
%prep
%setup -q -n %{realname}-%{version}%{?extraver}
%patch -p1
%{__sed} -i '/^obj-m/ a\EXTRA_CFLAGS := -I$(src)' src/linux/Makefile
# Use system library json-c
%{__sed} -i '/json\/Makefile/ d' configure.ac
%{__sed} -i '/^if WITH_JSONLIB/, /^endif/ d' Makefile.am src/Makefile.am
# Why requirement for c-ares is hardcoded to curl support?
%{__sed} -ri 's/ -lcares//' configure.ac
# Create configure script
if [ ! -x configure ]; then
for script in autogen.sh bootstrap; do
if [ -x ${script} ]; then
./${script}
exit $?
fi
done
autoreconf --force --install
fi
%build
%configure \
--disable-static \
--disable-debug \
\
--enable-wpad \
--enable-gardenaccounting \
--enable-gardenext \
--enable-inspect\
--enable-dhcpopt \
--enable-sessgarden \
--enable-sessproxy \
--enable-sessdhcp \
--enable-sessdns \
--enable-chillixml \
--enable-proxyvsa \
--enable-dnslog \
--enable-ipwhitelist \
--enable-uamdomainfile \
--enable-redirdnsreq \
--enable-largelimits \
--enable-authedallowed \
--enable-binstatusfile \
--enable-statusfile \
--enable-chilliproxy \
--enable-multiroute \
--enable-multilan \
--enable-chilliradsec \
--enable-chilliredir \
--enable-chilliscript \
--disable-cluster \
--enable-sessionstate \
--enable-sessionid \
--enable-apsessionid \
--enable-mdns \
--enable-netbios \
--enable-ieee8023 \
--enable-pppoe \
--enable-l2tpppp \
--enable-eapol \
--enable-miniportal \
--enable-miniconfig \
--enable-ewtapi \
--enable-libjson \
--enable-ssdp \
--enable-layer3 \
--enable-modules \
--enable-extadmvsa \
--enable-redirinject \
--disable-netnat \
--enable-useragent \
--enable-acceptlanguage \
--enable-location \
--enable-forcedns \
\
--with-openssl \
--with-nfqueue \
--with-pcap \
--with-curl \
\
CFLAGS="%{optflags} %{?gcc_lto} -I%{_includedir}/json-c -I%{_includedir}/libnfnetlink -DENABLE_JSON -fPIC -DPIC" \
CXXFLAGS="%{optflags} %{?gcc_lto} -I%{_includedir}/json-c -I%{_includedir}/libnfnetlink -DENABLE_JSON -fPIC -DPIC" \
LDFLAGS="-Wl,--as-needed -Wl,--strip-all -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,now -Wl,-z,relro %{?gcc_lto}" \
LIBS="-ljson-c"
%{__sed} -i 's/ -Werror//' src/Makefile
%{__make} %{?_smp_mflags}
%{__mkdir} obj
for flavor in %flavors_to_build; do
%{__rm} -rf obj/$flavor
%{__cp} -r src/linux obj/$flavor
%{__make} -C %{kernel_source $flavor} %{?_smp_mflags} modules \
M=$PWD/obj/$flavor V=1
done
# Build iptables extension
%{__make} -C src/linux libxt_coova.so CFLAGS="%{optflags} $(pkg-config --cflags xtables)"
%install
%{__make} install DESTDIR=%{buildroot}
%if "%{expand:%_vendor}" == "suse"
%{__ln_s} %{_initrddir}/chilli %{buildroot}%{_sbindir}/rcchilli
%{__install} -d -m 755 %{buildroot}%{_sysconfdir}/permissions.d
echo "%{_sbindir}/chilli_script root:root 4755" > %{buildroot}%{_sysconfdir}/permissions.d/chilli
%else
%{__mkdir} -p %{buildroot}%{_initrddir}
%{__mv} -f %{buildroot}%{_sysconfdir}/init.d/chilli %{buildroot}%{_initrddir}/
%endif
%if 0%{?suse_version} || 0%{?rhel} >= 7
# Install Coova netfilter module
export INSTALL_MOD_PATH=$RPM_BUILD_ROOT
export INSTALL_MOD_DIR=updates
for flavor in %flavors_to_build; do
%{__make} -C %{kernel_source $flavor} modules_install \
M=$PWD/obj/$flavor
done
%{__install} -D -m755 src/linux/libxt_coova.so %{buildroot}%{xtlibdir}/libxt_coova.so
# Prepare DKMS package
%{__install} -d -m755 %{buildroot}/usr/src/%{realname}-%{version}%{?extraver}/linux
%{__install} -m644 src/linux/xt_coova.c %{buildroot}/usr/src/%{realname}-%{version}%{?extraver}/xt_coova.c
%{__install} -m644 src/linux/xt_coova.h %{buildroot}/usr/src/%{realname}-%{version}%{?extraver}/xt_coova.h
test -f src/linux/linux/compiler-gcc5.h && %{__install} -m644 src/linux/linux/compiler-gcc5.h %{buildroot}/usr/src/%{realname}-%{version}%{?extraver}/linux/compiler-gcc5.h
# Makefile
cat > %{buildroot}/usr/src/%{realname}-%{version}%{?extraver}/Makefile <<EOMakefile
obj-m += xt_coova.o
ccflags-y := -I\$(KBUILD_EXTMOD)
EOMakefile
# dkms.conf
cat > %{buildroot}/usr/src/%{realname}-%{version}%{?extraver}/dkms.conf <<EOdkmsconf
PACKAGE_NAME="%{realname}"
PACKAGE_VERSION="%{version}%{?extraver}"
AUTOINSTALL=yes
BUILT_MODULE_NAME="xt_coova"
DEST_MODULE_LOCATION="/updates"
EOdkmsconf
%endif
%clean
[ "%{buildroot}" != "/" ] && rm -rf %{buildroot}
%files
%defattr(-,root,root)
%doc AUTHORS COPYING CREDITS LICENSE README.md
%doc doc/attributes doc/dictionary.coovachilli doc/freeradius.users
%doc doc/firewall.iptables
%doc doc/hotspotlogin.* doc/http-aaa-example.php
%config(noreplace) %{_sysconfdir}/chilli.conf
%dir %{_sysconfdir}/chilli
%config(noreplace) %{_sysconfdir}/chilli/*
%{_initrddir}/chilli
%{_sbindir}/*
%verify(not mode) %attr(4755, root, root) %{_sbindir}/chilli_script
%{_libdir}/*.so.*
%dir %{_libdir}/coova-chilli
%{_libdir}/coova-chilli/*.so
%exclude %{_libdir}/coova-chilli/*.la
%exclude %{_libdir}/python/CoovaChilliLib.py*
%if 0%{?suse_version} || 0%{?rhel} >= 7
%dir %{xtlibdir}
%{xtlibdir}/libxt_coova.so
%endif
%if 0%{?suse_version}
%{_sysconfdir}/permissions.d/chilli
%endif
%doc %{_mandir}/man1/*
%doc %{_mandir}/man5/*
%doc %{_mandir}/man8/*
# Development stuff
%files devel
%defattr(-,root,root)
%dir %{_includedir}/chilli
%{_includedir}/chilli/*.h
%{_libdir}/*.so
%exclude %{_libdir}/*.la
%if 0%{?suse_version} || 0%{?rhel} >= 7
%files dkms
%defattr(-,root,root)
/usr/src/%{realname}-%{version}%{?extraver}
%post dkms
/usr/sbin/dkms add -q -m %{realname} -v %{version}%{?extraver} --rpm_safe_upgrade || :
%preun dkms
/usr/sbin/dkms remove -q --all -m %{realname} -v %{version}%{?extraver} --rpm_safe_upgrade || :
%endif
%if 0%{?suse_version}
%verifyscript
%verify_permissions -e %{_sbindir}/chilli_script
%post
/sbin/ldconfig
%set_permissions %{_sbindir}/chilli_script
%{fillup_and_insserv chilli}
%preun
%{stop_on_removal chilli}
%postun
/sbin/ldconfig
%{restart_on_update chilli}
%{insserv_cleanup}
%else
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
%endif
%changelog