diff --git a/alma/SPECS/bitcoin.spec b/alma/SPECS/bitcoin.spec new file mode 100644 index 0000000..52ef459 --- /dev/null +++ b/alma/SPECS/bitcoin.spec @@ -0,0 +1,351 @@ +%define _hardened_build 1 +%global selinux_variants mls strict targeted +%global _compldir %{_datadir}/bash-completion/completions + +Name: bitcoin +Version: 26.0 +Release: 1%{?dist} +Summary: Peer to Peer Cryptographic Currency +License: MIT +URL: http://bitcoin.org/ + +Source0: http://github.com/%{name}/%{name}/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz +Source1: %{name}-tmpfiles.conf +Source2: %{name}.sysconfig +Source3: %{name}.service +Source4: https://github.com/bitcoin-core/packaging/archive/a48094dca1113fb6096768993d1b80d1a4ab5871.zip +Source5: %{name}.te +Source6: %{name}.fc +Source7: %{name}.if +Source8: README.server.redhat +Source9: README.utils.redhat +Source10: README.gui.redhat + +BuildRequires: autoconf +BuildRequires: automake +BuildRequires: boost-devel +BuildRequires: checkpolicy +BuildRequires: desktop-file-utils +BuildRequires: java +# this is required for multi platform wallet +#BuildRequires: libdb4-cxx-devel +BuildRequires: libdb-cxx-devel +BuildRequires: libevent-devel +BuildRequires: libtool +#BuildRequires: miniupnpc-devel +BuildRequires: openssl-devel +BuildRequires: protobuf-devel +BuildRequires: qrencode-devel +BuildRequires: qt5-linguist +BuildRequires: qt5-qtbase-devel +BuildRequires: selinux-policy-devel +BuildRequires: selinux-policy-doc +BuildRequires: systemd +BuildRequires: python3 + +# ZeroMQ not testable yet on RHEL due to lack of python3-zmq so +# enable only for Fedora +%if 0%{?fedora} +BuildRequires: python3-zmq +BuildRequires: zeromq-devel +%endif + +%description +Bitcoin is a digital cryptographic currency that uses peer-to-peer technology to +operate with no central authority or banks; managing transactions and the +issuing of bitcoins is carried out collectively by the network. + +%package core +Summary: Peer to Peer Cryptographic Currency +Obsoletes: %{name} < %{version}-%{release} +Provides: %{name} = %{version}-%{release} + +%description core +Bitcoin is a digital cryptographic currency that uses peer-to-peer technology to +operate with no central authority or banks; managing transactions and the +issuing of bitcoins is carried out collectively by the network. + +This package contains the Qt based graphical client and node. If you are looking +to run a Bitcoin wallet, this is probably the package you want. + +%package libs +Summary: Peer-to-peer digital currency + +%description libs +This package provides the bitcoinconsensus shared libraries. These libraries +may be used by third party software to provide consensus verification +functionality. + +Unless you know need this package, you probably do not. + +%package devel +Summary: Peer-to-peer digital currency +Requires: %{name}-libs%{?_isa} = %{version}-%{release} + +%description devel +This package contains the header files and static library for the +bitcoinconsensus shared library. If you are developing or compiling software +that wants to link against that library, then you need this package installed. + +Most people do not need this package installed. + +%package utils +Summary: Peer-to-peer digital currency + +%description utils +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, and bitcoin-tx, a utility +to create custom Bitcoin transactions. + +%package server +Summary: Peer-to-peer digital currency +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-utils, policycoreutils-utils +Requires: %{name}-utils%{_isa} = %{version} + +%description server +This package provides a stand-alone bitcoin-core daemon. For most users, this +package is only needed if they need a full-node without the graphical client. + +Some third party wallet software will want this package to provide the actual +bitcoin-core node they use to connect to the network. + +If you use the graphical bitcoin-core client then you almost certainly do not +need this package. + +%prep +%autosetup -a 4 -p1 +mv packaging-*/debian/* contrib/debian/ + +# SELinux policy +cp -p %{SOURCE5} %{SOURCE6} %{SOURCE7} . + +# Install README files +cp -p %{SOURCE8} %{SOURCE9} %{SOURCE10} . + +# Prepare sample configuration as example +mv contrib/debian/examples/%{name}.conf %{name}.conf.example + +# No network tests in mock +sed -i -e '/rpc_bind.py/d' test/functional/test_runner.py + +%build +#autoreconf -vif +./autogen.sh +./configure --prefix=%{_prefix} --libdir=%{_libdir} +make -j 4 + +# Build SELinux policy +for selinuxvariant in %{selinux_variants} +do + make NAME=${selinuxvariant} -f %{_datadir}/selinux/devel/Makefile + mv %{name}.pp %{name}.pp.${selinuxvariant} + make NAME=${selinuxvariant} -f %{_datadir}/selinux/devel/Makefile clean +done + +%if 0%{?fedora} + +%check +# Run all the tests +export LC_ALL=C.UTF-8 +make check + +test/functional/test_runner.py --extended + +%endif + +%install +%make_install + +# TODO: Upstream puts bitcoind in the wrong directory. Need to fix the +# upstream Makefiles to install it in the correct place. +mkdir -p -m 755 %{buildroot}%{_sbindir} +mv %{buildroot}%{_bindir}/bitcoind %{buildroot}%{_sbindir}/bitcoind + +# Temporary files +mkdir -p %{buildroot}%{_tmpfilesdir} +install -m 0644 %{SOURCE1} %{buildroot}%{_tmpfilesdir}/%{name}.conf + +# Install ancillary files +install -D -m644 -p contrib/debian/%{name}-qt.protocol %{buildroot}%{_datadir}/kde4/services/%{name}-qt.protocol +install -D -m600 -p %{SOURCE2} %{buildroot}%{_sysconfdir}/sysconfig/%{name} +install -D -m644 -p %{SOURCE3} %{buildroot}%{_unitdir}/%{name}.service +install -d -m750 -p %{buildroot}%{_localstatedir}/lib/%{name} +install -d -m750 -p %{buildroot}%{_sysconfdir}/%{name} + +# Desktop file +desktop-file-install \ + --dir=%{buildroot}%{_datadir}/applications \ + --remove-key=Encoding \ + --set-key=Icon --set-value="%{name}" \ + contrib/debian/%{name}-qt.desktop +desktop-file-validate %{buildroot}%{_datadir}/applications/%{name}-qt.desktop + +# Icons +for size in 16 32 64 128 256; do + install -p -D -m 644 share/pixmaps/%{name}${size}.png \ + %{buildroot}%{_datadir}/icons/hicolor/${size}x${size}/apps/%{name}.png +done +rm -f %{buildroot}%{_datadir}/pixmaps/%{name}* + +# Bash completion +install -D -m644 -p contrib/completions/bash/%{name}-cli.bash %{buildroot}%{_compldir}/%{name}-cli +install -D -m644 -p contrib/completions/bash/%{name}-tx.bash %{buildroot}%{_compldir}/%{name}-tx +install -D -m644 -p contrib/completions/bash/%{name}d.bash %{buildroot}%{_compldir}/%{name}d + +# Man pages +mkdir -p %{buildroot}%{_mandir}/man1/ +for i in bitcoind %{name}-cli %{name}-qt; do + install -m644 -p doc/man/$i.1 %{buildroot}%{_mandir}/man1/ + gzip %{buildroot}%{_mandir}/man1/$i.1 +done + +# Server log directory +mkdir -p %{buildroot}%{_var}/log/%{name}/ + +# Remove test files so that they aren't shipped. Tests have already been run. +rm -f %{buildroot}%{_bindir}/test_* + +# We don't ship bench_bitcoin right now +rm -f %{buildroot}%{_bindir}/bench_%{name} + +# Install SELinux policy +for selinuxvariant in %{selinux_variants} +do + install -d %{buildroot}%{_datadir}/selinux/${selinuxvariant} + install -p -m 644 %{name}.pp.${selinuxvariant} \ + %{buildroot}%{_datadir}/selinux/${selinuxvariant}/%{name}.pp +done + +%pre server +getent group %{name} >/dev/null || groupadd -r %{name} +getent passwd %{name} >/dev/null || + useradd -r -g %{name} -d /var/lib/%{name} -s /sbin/nologin \ + -c "Bitcoin wallet server" %{name} +exit 0 + +%post core +/bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null || : + +%postun core +if [ $1 -eq 0 ] ; then + /bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null + /usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : +fi + +%posttrans core +/usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : + +%ldconfig_scriptlets libs + +%post server +%systemd_post %{name}.service +for selinuxvariant in %{selinux_variants} +do + /usr/sbin/semodule -s ${selinuxvariant} -i \ + %{_datadir}/selinux/${selinuxvariant}/%{name}.pp \ + &> /dev/null || : +done +# FIXME This is less than ideal, but until dwalsh gives me a better way... +/usr/sbin/semanage port -a -t %{name}_port_t -p tcp 8332 2> /dev/null +/usr/sbin/semanage port -a -t %{name}_port_t -p tcp 8333 2> /dev/null +/usr/sbin/semanage port -a -t %{name}_port_t -p tcp 18332 2> /dev/null +/usr/sbin/semanage port -a -t %{name}_port_t -p tcp 18333 2> /dev/null +/sbin/fixfiles -R %{name}-server restore &> /dev/null || : +/sbin/restorecon -R %{_localstatedir}/lib/%{name} || : + +%posttrans server +/usr/bin/systemd-tmpfiles --create + +%preun server +%systemd_preun %{name}.service + +%postun server +%systemd_postun_with_restart %{name}.service +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 18332 + /usr/sbin/semanage port -d -p tcp 18333 + for selinuxvariant in %{selinux_variants} + do + /usr/sbin/semodule -s ${selinuxvariant} -r %{name} \ + &> /dev/null || : + done + /sbin/fixfiles -R %{name}-server restore &> /dev/null || : + [ -d %{_localstatedir}/lib/%{name} ] && \ + /sbin/restorecon -R %{_localstatedir}/lib/%{name} \ + &> /dev/null || : +fi + +%files core +%license COPYING +%doc README.md README.gui.redhat %{name}.conf.example +%doc doc/assets-attribution.md doc/bips.md doc/files.md doc/reduce-traffic.md doc/release-notes.md doc/tor.md +%{_bindir}/%{name}-qt +%{_datadir}/applications/%{name}-qt.desktop +%{_datadir}/kde4/services/%{name}-qt.protocol +%{_datadir}/icons/hicolor/*/apps/%{name}.png +%{_mandir}/man1/%{name}-qt.1* + +%files libs +%license COPYING +%doc doc/README.md +%{_libdir}/libbitcoinconsensus.so.* + +%files devel +%doc doc/README.md doc/developer-notes.md doc/shared-libraries.md +%{_includedir}/bitcoinconsensus.h +%{_libdir}/libbitcoinconsensus.a +%{_libdir}/libbitcoinconsensus.la +%{_libdir}/libbitcoinconsensus.so +%{_libdir}/pkgconfig/libbitcoinconsensus.pc + +%files utils +%license COPYING +%doc README.utils.redhat %{name}.conf.example +%doc doc/README.md +%{_bindir}/%{name}-util +%{_bindir}/%{name}-cli +%{_bindir}/%{name}-tx +%{_bindir}/%{name}-wallet +%{_compldir}/%{name}-cli +%{_compldir}/%{name}-tx +%{_mandir}/man1/%{name}-cli.1* +%{_mandir}/man1/%{name}-tx.1* +%{_mandir}/man1/%{name}-util.1* +%{_mandir}/man1/%{name}-wallet.1* + + +%files server +%license COPYING +%doc %{name}.conf.example README.server.redhat doc/README.md doc/REST-interface.md doc/bips.md doc/dnsseed-policy.md doc/files.md doc/reduce-traffic.md doc/release-notes.md doc/tor.md doc/zmq.md +%dir %attr(750,%{name},%{name}) %{_localstatedir}/lib/%{name} +%dir %attr(750,%{name},%{name}) %{_sysconfdir}/%{name} +%dir %attr(750,%{name},%{name}) %{_var}/log/%{name} +%ghost %{_var}/log/%{name}/debug.log +%ghost %dir /run/%{name}/ +%ghost /run/%{name}.pid +%config(noreplace) %attr(644,root,root) %{_sysconfdir}/sysconfig/%{name} +#{_bindir}/bitcoin-wallet +%{_compldir}/%{name}d +%{_datadir}/selinux/*/%{name}.pp +%{_mandir}/man1/bitcoind.1* +#{_mandir}/man1/bitcoin-wallet.1* +%{_sbindir}/bitcoind +%{_tmpfilesdir}/%{name}.conf +%{_unitdir}/%{name}.service + +%changelog +* Thu Dec 14 2023 Daniel Steiner - 26.0 +- Initial version for AlmaLinux 9. +