%global _hardened_build 1 %global selinux_types %(%{__awk} '/^#[[:space:]]*SELINUXTYPE=/,/^[^#]/ { if ($3 == "-") printf "%s ", $2 }' /etc/selinux/config 2>/dev/null) %global selinux_variants %([ -z "%{selinux_types}" ] && echo mls targeted || echo %{selinux_types}) %{!?_selinux_policy_version: %global _selinux_policy_version %(sed -e 's,.*selinux-policy-\\([^/]*\\)/.*,\\1,' /usr/share/selinux/devel/policyhelp 2>/dev/null)} %global commit ef14a26b12ad63cbe109e24043b0b1ce5c07447a %global shortcommit %(c=%{commit}; echo ${c:0:7}) %global tag v0.8.5 Name: bitcoin Version: 0.8.5 Release: 3%{?dist} Summary: Peer-to-peer digital currency Group: Applications/System License: MIT URL: http://bitcoin.org/ Source0: https://github.com/bitcoin/bitcoin/archive/%{commit}/%{name}-%{version}-%{shortcommit}.tar.gz Source4: %{name}.te Source5: %{name}.fc Source6: %{name}.if Source7: %{name}.service BuildRequires: qt-devel BuildRequires: qrencode-devel BuildRequires: openssl-devel >= 1.0.1e-4%{?dist}.1 BuildRequires: miniupnpc-devel BuildRequires: boost-devel BuildRequires: libdb4-cxx-devel BuildRequires: checkpolicy BuildRequires: selinux-policy-devel BuildRequires: /usr/share/selinux/devel/policyhelp BuildRequires: systemd BuildRequires: desktop-file-utils %package server Summary: Peer-to-peer digital currency Requires(pre): shadow-utils Requires(post): systemd Requires(preun): systemd Requires(postun): systemd %package selinux Summary: Peer-to-peer digital currency Requires: %{name}-server = %{version}-%{release} %if "%{_selinux_policy_version}" != "" Requires: selinux-policy >= %{_selinux_policy_version} %endif Requires(post): /usr/sbin/semodule Requires(post): /sbin/fixfiles Requires(post): policycoreutils-python Requires(postun): /usr/sbin/semodule Requires(postun): /sbin/fixfiles Requires(postun): policycoreutils-python %description Bitcoin is an experimental new digital currency that enables instant payments to anyone, anywhere in the world. Bitcoin uses peer-to-peer technology to operate with no central authority: managing transactions and issuing money are carried out collectively by the network. Bitcoin is also the name of the open source software which enables the use of this currency. This package provides Bitcoin, a user-friendly wallet manager for personal use. %description server Bitcoin is an experimental new digital currency that enables instant payments to anyone, anywhere in the world. Bitcoin uses peer-to-peer technology to operate with no central authority: managing transactions and issuing money are carried out collectively by the network. This package provides bitcoind, a wallet server and command line tool for manipulating a remote bitcoind server. %description selinux Bitcoin is an experimental new digital currency that enables instant payments to anyone, anywhere in the world. Bitcoin uses peer-to-peer technology to operate with no central authority: managing transactions and issuing money are carried out collectively by the network. This package provides the SELinux policy for bitcoind. %prep %setup -q -n %{name}-%{commit} # Prep SELinux policy mkdir SELinux cp -p %{SOURCE4} %{SOURCE5} %{SOURCE6} SELinux %build CFLAGS="%{optflags}" CXXFLAGS="%{optflags}" LDFLAGS="%{__global_ldflags}" export CFLAGS CXXFLAGS LDFLAGS export PIE=1 export USE_QRCODE=1 export USE_DBUS=1 export USE_UPNP=1 export USE_IPV6=1 export BDB_LIB_PATH="%{_libdir}/libdb4" export BDB_INCLUDE_PATH="%{_includedir}/libdb4" export BDB_LIB_SUFFIX="-4.8" export BOOST_LIB_SUFFIX="-mt" pushd src # Build bitcoind make %{?_smp_mflags} -f makefile.unix bitcoind popd # Build bitcoin-qt %{qmake_qt4} BDB_LIB_SUFFIX="-4.8" BOOST_LIB_SUFFIX="-mt" \ USE_DBUS=1 USE_UPNP=1 USE_QRCODE=1 USE_IPV6=1 \ BDB_INCLUDE_PATH="%{_includedir}/libdb4" \ BDB_LIB_PATH="%{_libdir}/libdb4" make %{?_smp_mflags} # Build SELinux policy pushd SELinux for selinuxvariant in %{selinux_variants} do make NAME=${selinuxvariant} -f /usr/share/selinux/devel/Makefile mv %{name}.pp %{name}.pp.${selinuxvariant} make NAME=${selinuxvariant} -f /usr/share/selinux/devel/Makefile clean done popd %check CFLAGS="%{optflags}" CXXFLAGS="%{optflags}" LDFLAGS="%{__global_ldflags}" export CFLAGS CXXFLAGS LDFLAGS export PIE=1 export USE_QRCODE=1 export USE_DBUS=1 export USE_UPNP=1 export USE_IPV6=1 export BDB_LIB_PATH="%{_libdir}/libdb4" export BDB_INCLUDE_PATH="%{_includedir}/libdb4" export BDB_LIB_SUFFIX="-4.8" export BOOST_LIB_SUFFIX="-mt" pushd src make %{?_smp_mflags} -f makefile.unix test check popd %{qmake_qt4} BDB_LIB_SUFFIX="-4.8" BOOST_LIB_SUFFIX="-mt" \ USE_DBUS=1 USE_UPNP=1 USE_QRCODE=1 USE_IPV6=1 BITCOIN_QT_TEST=1 \ BDB_INCLUDE_PATH="%{_includedir}/libdb4" \ BDB_LIB_PATH="%{_libdir}/libdb4" make %{?_smp_mflags} clean make %{?_smp_mflags} ./bitcoin-qt_test %install # Install bitcoin-qt install -D -m 0755 -p bitcoin-qt %{buildroot}%{_bindir}/bitcoin-qt install -d %{buildroot}%{_datadir}/pixmaps/ install -m 0644 -p share/pixmaps/*.{png,xpm,ico} %{buildroot}%{_datadir}/pixmaps/ desktop-file-install --dir %{buildroot}%{_datadir}/applications \ contrib/debian/bitcoin-qt.desktop install -D -m 0644 -p contrib/debian/bitcoin-qt.protocol \ %{buildroot}%{_datadir}/kde4/services/bitcoin-qt.protocol # Install bitcoind install -D -m 0755 -p src/bitcoind %{buildroot}%{_bindir}/bitcoind install -d -m 0750 %{buildroot}%{_sharedstatedir}/%{name} install -d -m 0750 %{buildroot}%{_sysconfdir}/%{name} install -m 0640 -p contrib/debian/examples/bitcoin.conf \ %{buildroot}%{_sysconfdir}/%{name}/bitcoin.conf install -D -m 0644 -p %{SOURCE7} %{buildroot}%{_unitdir}/%{name}.service install -D -m 0644 -p contrib/debian/manpages/bitcoind.1 \ %{buildroot}%{_mandir}/man1/bitcoind.1 install -D -m 0644 -p contrib/debian/manpages/bitcoin.conf.5 \ %{buildroot}%{_mandir}/man5/bitcoin.conf.5 # Install SELinux policy pushd SELinux for selinuxvariant in %{selinux_variants} do install -d %{buildroot}%{_datadir}/selinux/${selinuxvariant} install -p -m 0644 %{name}.pp.${selinuxvariant} \ %{buildroot}%{_datadir}/selinux/${selinuxvariant}/%{name}.pp done popd %pre server getent group %{name} >/dev/null || groupadd -r %{name} getent passwd %{name} >/dev/null || \ useradd -r -g %{name} -d %{_sharedstatedir}/%{name} -s /sbin/nologin \ -c "Bitcoin wallet server" %{name} exit 0 %post server %systemd_post %{name}.service %post selinux for selinuxvariant in %{selinux_variants} do /usr/sbin/semodule -s ${selinuxvariant} -i \ %{_datadir}/selinux/${selinuxvariant}/%{name}.pp &> /dev/null || : done # http://danwalsh.livejournal.com/10607.html semanage port -a -t bitcoin_port_t -p tcp 8333 semanage port -a -t bitcoin_port_t -p tcp 18333 semanage port -a -t bitcoin_port_t -p tcp 8332 semanage port -a -t bitcoin_port_t -p tcp 18332 /sbin/fixfiles -R %{name}-server restore || : %preun server %systemd_preun %{name}.service %postun server %systemd_postun_with_restart %{name}.service %postun selinux if [ $1 -eq 0 ] ; then semanage port -d -p tcp 8333 semanage port -d -p tcp 18333 semanage port -d -p tcp 8332 semanage port -d -p tcp 18332 for selinuxvariant in %{selinux_variants} do /usr/sbin/semodule -s ${selinuxvariant} -r %{name} &> /dev/null || : done /sbin/fixfiles -R %{name}-server restore || : fi %files %doc COPYING README.md doc %{_bindir}/bitcoin-qt %{_datadir}/applications/bitcoin-qt.desktop %{_datadir}/kde4/services/bitcoin-qt.protocol %{_datadir}/pixmaps/* %files server %doc COPYING README.md doc %dir %attr(750,bitcoin,bitcoin) %{_sharedstatedir}/%{name} %dir %attr(750,bitcoin,bitcoin) %{_sysconfdir}/%{name} %config(noreplace) %attr(640,bitcoin,bitcoin) %{_sysconfdir}/%{name}/bitcoin.conf %{_bindir}/bitcoind %{_unitdir}/%{name}.service %{_mandir}/man1/bitcoind.1* %{_mandir}/man5/bitcoin.conf.5* %files selinux %doc SELinux/* %{_datadir}/selinux/*/%{name}.pp %changelog * Fri Oct 18 2013 Juan Orti Alcaine - 0.8.5-3 - Drop bitcoin-0.8.5-libdb_path.patch * Wed Oct 16 2013 Juan Orti Alcaine - 0.8.5-2 - Fedora fixes * Sat Oct 05 2013 Michael Hampton - 0.8.5-1 - Update for Bitcoin 0.8.5. * Wed Sep 04 2013 Michael Hampton - 0.8.4-1 - Update for Bitcoin 0.8.4. - Strip OS X resource forks from upstream tarball. - Use default SELinux context for /etc/bitcoin directory itself; fixes SELinux denial against updatedb. * Fri Jul 05 2013 Michael Hampton - 0.8.3-1 - Update for Bitcoin 0.8.3. * Sun Jun 02 2013 Michael Hampton - 0.8.2-2 - Fixed bitcoin-server dependency for new openssl packages * Sun Jun 02 2013 Michael Hampton - 0.8.2-1 - Update for Bitcoin 0.8.2. * Fri Mar 29 2013 Michael Hampton - 0.8.1-3 - Added missing openssl and boost Requires for bitcoin-server * Sun Mar 24 2013 Michael Hampton - 0.8.1-2 - Added missing SELinux dependencies - Updated for RHEL: Now build against a private copy of Boost * Thu Mar 21 2013 Michael Hampton - 0.8.1-1 - Update for Bitcoin 0.8.1. - Removed Patch2 (qt 4.6 compatibility) as it has been accepted upstream * Tue Jan 29 2013 Michael Hampton - 0.7.2-3 - Mass rebuild for corrected package signing key * Mon Dec 17 2012 Michael Hampton - 0.7.2-1 - Update for Bitcoin 0.7.2. - Update for separate OpenSSL package openssl-compat-bitcoin. * Wed Aug 22 2012 Michael Hampton - 0.6.3-1 - Initial package.