%define _hardened_build 1 %global selinux_variants mls strict targeted Name: bitcoin Version: 0.9.1 Release: 2%{?dist} Summary: Peer-to-peer digital currency Group: Applications/System License: MIT URL: http://bitcoin.org/ Source0: http://github.com/bitcoin/%{name}/archive/v%{version}.tar.gz Source2: bitcoin.service Source3: bitcoin.init Source4: bitcoin.te Source5: bitcoin.fc Source6: bitcoin.if Source7: README.server.redhat Source8: README.cli.redhat Source9: README.gui.redhat Patch3: bitcoin-0.9.0-fhs-paths.patch Patch4: bitcoin-0.9.0-bdb47.patch BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) BuildRequires: qt-devel >= 1:4.6 qrencode-devel openssl-compat-bitcoin-devel miniupnpc-devel protobuf-devel BuildRequires: desktop-file-utils autoconf automake BuildRequires: checkpolicy, selinux-policy-devel, selinux-policy-doc %if 0%{?rhel} >= 7 || 0%{?fedora} BuildRequires: boost-devel libdb4-cxx-devel %else BuildRequires: boost-compat-bitcoin-devel db4-devel %endif Requires: openssl-compat-bitcoin >= 1.0.1f %package cli Summary: Peer-to-peer digital currency Requires: openssl-compat-bitcoin >= 1.0.1f %package server Summary: Peer-to-peer digital currency %if 0%{?rhel} >= 7 || 0%{?fedora} >= 21 Requires(post): systemd Requires(preun): systemd Requires(postun): systemd BuildRequires: systemd %else Requires(post): chkconfig Requires(preun): chkconfig # This is for /sbin/service Requires(preun): initscripts Requires(postun): initscripts %endif Requires(pre): shadow-utils Requires(post): /usr/sbin/semodule, /sbin/restorecon, /sbin/fixfiles Requires(postun): /usr/sbin/semodule, /sbin/restorecon, /sbin/fixfiles Requires: selinux-policy Requires: policycoreutils-python Requires: openssl-compat-bitcoin >= 1.0.1f Requires: bitcoin-cli%{_isa} = %{version} %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-QT, a user-friendly wallet manager for personal use. %description cli 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 bitcoin-cli, a utility to communicate with and control a Bitcoin server via its RPC protocol. %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. %prep %setup -q -n %{name}-%{version} %patch3 -p1 # TODO: Allow wallets using BDB 4.7; these are already in wide use and it is # necessary for RHEL 6 %patch4 -p1 # Install README files cp -p %{SOURCE7} %{SOURCE8} %{SOURCE9} . # Prep SELinux policy mkdir SELinux cp -p %{SOURCE4} %{SOURCE5} %{SOURCE6} SELinux %build # Build Bitcoin ./autogen.sh %if 0%{?rhel} >= 7 || 0%{?fedora} %configure --with-incompatible-bdb \ PKG_CONFIG_PATH=/opt/openssl-compat-bitcoin/lib/pkgconfig \ LIBS=-Wl,-rpath,/opt/openssl-compat-bitcoin/lib %else %ifarch x86_64 %configure --with-incompatible-bdb \ --with-boost=/opt/boost-compat-bitcoin \ PKG_CONFIG_PATH=/opt/openssl-compat-bitcoin/lib/pkgconfig \ LIBS=-Wl,-rpath,/opt/openssl-compat-bitcoin/lib,-rpath,/opt/boost-compat-bitcoin/lib64 %else %configure --with-incompatible-bdb \ --with-boost=/opt/boost-compat-bitcoin \ PKG_CONFIG_PATH=/opt/openssl-compat-bitcoin/lib/pkgconfig \ LIBS=-Wl,-rpath,/opt/openssl-compat-bitcoin/lib,-rpath,/opt/boost-compat-bitcoin/lib %endif %endif # TODO: Building currently fails intermittently when parallelized :( #make %{?_smp_mflags} make # Build SELinux policy pushd SELinux for selinuxvariant in %{selinux_variants} do # FIXME: Create and debug SELinux policy make NAME=${selinuxvariant} -f /usr/share/selinux/devel/Makefile mv bitcoin.pp bitcoin.pp.${selinuxvariant} make NAME=${selinuxvariant} -f /usr/share/selinux/devel/Makefile clean done popd %install rm -rf %{buildroot} mkdir %{buildroot} cp contrib/debian/examples/bitcoin.conf bitcoin.conf.example make INSTALL="install -p" CP="cp -p" DESTDIR=%{buildroot} install # TODO: Upstream puts bitcoind in the wrong directory. Need to fix the # upstream Makefiles to relocate it. mkdir -p -m 755 %{buildroot}%{_sbindir} mv %{buildroot}%{_bindir}/bitcoind %{buildroot}%{_sbindir}/bitcoind # Install ancillary files mkdir -p -m 755 %{buildroot}%{_datadir}/pixmaps install -D -m644 -p share/pixmaps/bitcoin*.{png,xpm,ico} %{buildroot}%{_datadir}/pixmaps/ install -D -m644 -p contrib/debian/bitcoin-qt.desktop %{buildroot}%{_datadir}/applications/bitcoin-qt.desktop desktop-file-validate %{buildroot}%{_datadir}/applications/bitcoin-qt.desktop install -D -m644 -p contrib/debian/bitcoin-qt.protocol %{buildroot}%{_datadir}/kde4/services/bitcoin-qt.protocol %if 0%{?rhel} >= 7 || 0%{?fedora} >= 21 install -D -m644 -p %{SOURCE2} %{_unitdir}/bitcoin.service %else install -D -m755 -p %{SOURCE3} %{buildroot}%{_initrddir}/bitcoin %endif install -d -m750 -p %{buildroot}%{_localstatedir}/lib/bitcoin install -d -m750 -p %{buildroot}%{_sysconfdir}/bitcoin install -D -m644 -p contrib/debian/manpages/bitcoind.1 %{buildroot}%{_mandir}/man1/bitcoind.1 install -D -m644 -p contrib/debian/manpages/bitcoin-qt.1 %{buildroot}%{_mandir}/man1/bitcoin-qt.1 install -D -m644 -p contrib/debian/manpages/bitcoin.conf.5 %{buildroot}%{_mandir}/man5/bitcoin.conf.5 gzip %{buildroot}%{_mandir}/man1/bitcoind.1 gzip %{buildroot}%{_mandir}/man1/bitcoin-qt.1 gzip %{buildroot}%{_mandir}/man5/bitcoin.conf.5 # Remove test files rm -f %{buildroot}%{_bindir}/test_* # Install SELinux policy for selinuxvariant in %{selinux_variants} do install -d %{buildroot}%{_datadir}/selinux/${selinuxvariant} install -p -m 644 SELinux/bitcoin.pp.${selinuxvariant} \ %{buildroot}%{_datadir}/selinux/${selinuxvariant}/bitcoin.pp done %clean rm -rf %{buildroot} %pre server getent group bitcoin >/dev/null || groupadd -r bitcoin getent passwd bitcoin >/dev/null || useradd -r -g bitcoin -d /var/lib/bitcoin -s /sbin/nologin \ -c "Bitcoin wallet server" bitcoin exit 0 %post server %if 0%{?rhel} >= 7 || 0%{?fedora} >= 21 %systemd_post bitcoin.service %else /sbin/chkconfig --add bitcoin %endif for selinuxvariant in %{selinux_variants} do /usr/sbin/semodule -s ${selinuxvariant} -i \ %{_datadir}/selinux/${selinuxvariant}/bitcoin.pp \ &> /dev/null || : done # FIXME This is less than ideal, but until dwalsh gives me a better way... /usr/sbin/semanage port -a -t bitcoin_port_t -p tcp 8332 /usr/sbin/semanage port -a -t bitcoin_port_t -p tcp 8333 /usr/sbin/semanage port -a -t bitcoin_port_t -p tcp 18333 /sbin/fixfiles -R bitcoin-server restore &> /dev/null || : /sbin/restorecon -R %{_localstatedir}/lib/bitcoin || : %preun server %if 0%{?rhel} >= 7 || 0%{?fedora} >= 21 %systemd_preun bitcoin.service %else if [ $1 -eq 0 ] ; then /sbin/service bitcoin stop >/dev/null 2>&1 /sbin/chkconfig --del bitcoin fi %endif %postun server %if 0%{?rhel} >= 7 || 0%{?fedora} >= 21 %systemd_postun bitcoin.service %else if [ "$1" -ge "1" ] ; then /sbin/service bitcoin condrestart >/dev/null 2>&1 || : fi %endif if [ $1 -eq 0 ] ; then # FIXME This is less than ideal, but until dwalsh gives me a better way... /usr/sbin/semanage port -d -p tcp 8332 /usr/sbin/semanage port -d -p tcp 8333 /usr/sbin/semanage port -d -p tcp 18333 for selinuxvariant in %{selinux_variants} do /usr/sbin/semodule -s ${selinuxvariant} -r bitcoin \ &> /dev/null || : done /sbin/fixfiles -R bitcoin-server restore &> /dev/null || : [ -d %{_localstatedir}/lib/bitcoin ] && \ /sbin/restorecon -R %{_localstatedir}/lib/bitcoin \ &> /dev/null || : fi %files %defattr(-,root,root,-) %doc COPYING README.md README.gui.redhat doc/tor.md bitcoin.conf.example %{_bindir}/bitcoin-qt %{_datadir}/applications/bitcoin-qt.desktop %{_datadir}/kde4/services/bitcoin-qt.protocol %{_datadir}/pixmaps/* %{_mandir}/man1/bitcoin-qt.1.gz %files cli %defattr(-,root,root,-) %doc COPYING README.md README.cli.redhat bitcoin.conf.example %{_bindir}/bitcoin-cli %files server %defattr(-,root,root,-) %doc COPYING README.md README.server.redhat doc/tor.md bitcoin.conf.example %dir %attr(750,bitcoin,bitcoin) %{_localstatedir}/lib/bitcoin %dir %attr(750,bitcoin,bitcoin) %{_sysconfdir}/bitcoin %doc SELinux/* %{_sbindir}/bitcoind %if 0%{?rhel} >= 7 || 0%{?fedora} >= 21 %{_unitdir}/bitcoin.service %else %{_initrddir}/bitcoin %endif %{_mandir}/man1/bitcoind.1.gz %{_mandir}/man5/bitcoin.conf.5.gz %{_datadir}/selinux/*/bitcoin.pp %changelog * Tue Apr 29 2014 Michael Hampton 0.9.1-2 - Rebuild for libminiupnpc soname bump in Fedora * Wed Apr 9 2014 Michael Hampton 0.9.1-1 - Update to upstream 0.9.1. This release doesn't actually make any changes in the code; upstream released it solely because they bundle OpenSSL with their shipped binaries. - We now use a single spec file for RHEL and Fedora. * Thu Mar 27 2014 Michael Hampton 0.9.0-3 - Fix typo causing a nonexistent dependency to be pulled, fixes #11 * Sat Mar 22 2014 Michael Hampton 0.9.0-2 - Fix default paths for Bitcoin GUI - Added README.redhat file * Thu Mar 20 2014 Michael Hampton 0.9.0-1 - Update for Bitcoin 0.9.0. - Combine RHEL and Fedora specs into a single spec file. - Initial changes to support upcoming RHEL 7. * Mon Dec 9 2013 Michael Hampton 0.8.6-1 - Update for Bitcoin 0.8.6. * Wed Oct 16 2013 Michael Hampton 0.8.5-2 - Remove bitcoind and bitcoin-qt launcher scripts no longer used upstream - Ship upstream example config file * 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. - 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-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.