%{?scl:%scl_package cassandra} %{!?scl:%global pkg_name %{name}} # not reserved yet %global allocated_gid 156 %global allocated_uid 156 Name: %{?scl_prefix}cassandra Version: 3.9 Release: 1%{?dist} Summary: OpenSource database Apache Cassandra License: ASL 2.0 URL: http://cassandra.apache.org/ Source0: https://github.com/apache/%{pkg_name}/archive/%{pkg_name}-%{version}.tar.gz Source1: %{pkg_name}.logrotate Source2: %{pkg_name}d.service Source3: %{pkg_name}-tmpfile # pom files are not generated but used are the ones from mavencentral # because of orphaned mavent-ant-task package doing the work in this case # failed koji build: http://koji.fedoraproject.org/koji/taskinfo?taskID=15542960 Source4: http://central.maven.org/maven2/org/apache/%{pkg_name}/%{pkg_name}-all/%{version}/%{pkg_name}-all-%{version}.pom Source5: http://central.maven.org/maven2/org/apache/%{pkg_name}/%{pkg_name}-thrift/%{version}/%{pkg_name}-thrift-%{version}.pom Source6: http://central.maven.org/maven2/org/apache/%{pkg_name}/%{pkg_name}-clientutil/%{version}/%{pkg_name}-clientutil-%{version}.pom Source7: http://central.maven.org/maven2/org/apache/%{pkg_name}/%{pkg_name}-parent/%{version}/%{pkg_name}-parent-%{version}.pom # fix encoding, naming, classpaths and dependencies Patch0: %{pkg_name}-%{version}-build.patch # airline0.7 imports fix in cassandra source, which is dependent on 0.6 version # https://issues.apache.org/jira/browse/CASSANDRA-12994 Patch1: %{pkg_name}-%{version}-airline0.7.patch # modify installed scripts Patch2: %{pkg_name}-%{version}-scripts.patch # https://bugzilla.redhat.com/show_bug.cgi?id=1340876 # remove "Open" infix from all hppc classes # https://issues.apache.org/jira/browse/CASSANDRA-12995X Patch3: %{pkg_name}-%{version}-hppc.patch # changes autoclosable issue with TTransport in thrift # https://bugzilla.redhat.com/show_bug.cgi?id=1183877 Patch4: %{pkg_name}-%{version}-thrift.patch # add two more parameters for SubstituteLogger constructor in slf4j # https://issues.apache.org/jira/browse/CASSANDRA-12996 Patch5: %{pkg_name}-%{version}-slf4j.patch # remove net.mintern:primitive as it will be removed in next upstream release # https://github.com/apache/cassandra/commit/8f0d5a295d34972ef719574df4aa1b59bf9e8478 Patch6: %{pkg_name}-%{version}-remove-primitive.patch %{?scl:Requires: %scl_runtime} Requires(pre): shadow-utils %{?systemd_requires} BuildRequires: systemd BuildRequires: %{?scl_prefix_maven}maven-local BuildRequires: %{?scl_prefix_java_common}ant BuildRequires: %{?scl_prefix_java_common}ecj BuildRequires: %{?scl_prefix}jamm BuildRequires: %{?scl_prefix}stream-lib BuildRequires: %{?scl_prefix}metrics BuildRequires: %{?scl_prefix}metrics-jvm BuildRequires: %{?scl_prefix}json_simple BuildRequires: %{?scl_prefix}compile-command-annotations BuildRequires: %{?scl_prefix}jBCrypt BuildRequires: %{?scl_prefix}concurrent-trees BuildRequires: %{?scl_prefix}logback BuildRequires: %{?scl_prefix}metrics-reporter-config BuildRequires: %{?scl_prefix}compress-lzf BuildRequires: %{?scl_prefix}disruptor-thrift-server BuildRequires: %{?scl_prefix}airline BuildRequires: %{?scl_prefix}jmh BuildRequires: %{?scl_prefix}byteman BuildRequires: %{?scl_prefix}HdrHistogram BuildRequires: %{?scl_prefix}sigar-java BuildRequires: %{?scl_prefix}jackson # using high-scale-lib from stephenc, no Cassandra original #BuildRequires: mvn(com.boundary:high-scale-lib) BuildRequires: %{?scl_prefix}high-scale-lib # using repackaging of the snowball stemmer so that it's available on Maven Central #BuildRequires: mvn(com.github.rholder:snowball-stemmer) BuildRequires: %{?scl_prefix}snowball-java # probably won't need in the future BuildRequires: %{?scl_prefix}concurrentlinkedhashmap-lru # in rh-maven33: 1.4.3, needed: 1.6.0 BuildRequires: %{?scl_prefix_maven}jflex # in rh-java-common: 1.7.4, needed: 1.7.7 BuildRequires: %{?scl_prefix_java_common}log4j-over-slf4j # in rh-java-common: 1.7.4, needed: 1.7.7 BuildRequires: %{?scl_prefix_java_common}jcl-over-slf4j # in rh-java-common: 1.9.2, needed: 1.9.4 BuildRequires: %{?scl_prefix_java_common}ant-junit # in rh-java-common: 4.0.28, needed: 4.0.39.Final BuildRequires: %{?scl_prefix_java_common}netty # in cassandra39: 0.9.1, needed: 0.9.2 BuildRequires: %{?scl_prefix}libthrift-java # TODO BuildRequires: %{?scl_prefix}antlr3 BuildRequires: %{?scl_prefix}cassandra-java-driver BuildRequires: %{?scl_prefix}lz4-java BuildRequires: %{?scl_prefix}snappy-java BuildRequires: %{?scl_prefix}ohc BuildRequires: %{?scl_prefix}ohc-core-j8 BuildRequires: %{?scl_prefix}hppc BuildRequires: %{?scl_prefix}caffeine # the SCL version of the package depends on rh-maven33 collection %{?scl:Requires: %scl_require rh-maven33} # temporarly removed as it is optional # using hadoop-common instead of hadoop-core, no Cassandra original #BuildRequires: mvn(org.apache.hadoop:hadoop-core) #BuildRequires: hadoop-common #BuildRequires: hadoop-mapreduce %description Cassandra is a partitioned row store. Rows are organized into tables with a required primary key. Partitioning means that Cassandra can distribute your data across multiple machines in an application-transparent matter. Cassandra will automatically repartition as machines are added / removed from the cluster. Row store means that like relational databases, Cassandra organizes data by rows and columns. The Cassandra Query Language (CQL) is a close relative of SQL. Database Pure Java Driver. It was developed specifically as a lightweight JDBC connector for use with MySQL and MariaDB database servers. %package parent Summary: Parent POM for %{pkg_name} %description parent Parent POM for %{pkg_name}. %package thrift Summary: Thrift for %{pkg_name} Requires: %{pkg_name} = %{version}-%{release} %description thrift Allows portable (across programming languages) access to the database. Thrift accomplishes this by generated source code for the programming language in question based on a Thrift IDL file describing the service. %package clientutil Summary: Client utilities for %{pkg_name} Requires: %{pkg_name} = %{version}-%{release} Requires: python-cassandra-driver %description clientutil Utilities usable by client for %{pkg_name} # source codes of cqlshlib are not python3 compatible, therefore using python2 %package python2-cqlshlib Summary: Commandline interface for %{name} BuildRequires: python2-devel BuildRequires: Cython Requires: %{name} = %{version}-%{release} Requires: python-cassandra-driver Provides: cqlsh %{?python_provide:%python_provide python2-cqlshlib} %description python2-cqlshlib Commandline client used to communicate with %{pkg_name} server. %package stress Summary: Stress testing utility for %{pkg_name} Requires: %{pkg_name} = %{version}-%{release} %description stress The cassandra-stress tool is a Java-based stress testing utility for benchmarking and load testing a Cassandra cluster. %package javadoc Summary: Javadoc for %{pkg_name} %description javadoc This package contains the API documentation for %{pkg_name}. %prep %setup -qcn %{pkg_name}-%{version} cp -pr %{pkg_name}-%{pkg_name}-%{version}/* . rm -r %{pkg_name}-%{pkg_name}-%{version} # remove binary and library files find -name "*.class" -print -delete find -name "*.jar" -print -delete find -name "*.zip" -print -delete #./lib/futures-2.1.6-py2.py3-none-any.zip #./lib/six-1.7.3-py2.py3-none-any.zip #./lib/cassandra-driver-internal-only-2.6.0c2.post.zip find -name "*.so" -print -delete find -name "*.dll" -print -delete find -name "*.sl" -print -delete find -name "*.dylib" -print -delete rm -r lib/sigar-bin/sigar-x86-winnt.lib find -name "*.exe" -print -delete find -name "*.bat" -print -delete find -name "*.pyc" -print -delete find -name "*py.class" -print -delete # remove hadoop rm src/java/org/apache/cassandra/client/RingCache.java rm -r src/java/org/apache/cassandra/hadoop rm test/unit/org/apache/cassandra/client/TestRingCache.java rm test/unit/org/apache/cassandra/hadoop/ColumnFamilyInputFormatTest.java # build jar repositories for dependencies build-jar-repository lib antlr3 build-jar-repository lib stringtemplate4 build-jar-repository lib jsr-305 build-jar-repository lib commons-lang3 build-jar-repository lib libthrift build-jar-repository lib slf4j/api build-jar-repository lib guava build-jar-repository lib jamm build-jar-repository lib stream-lib build-jar-repository lib metrics/metrics-core build-jar-repository lib metrics/metrics-jvm build-jar-repository lib json_simple build-jar-repository lib antlr3-runtime build-jar-repository lib compile-command-annotations # https://bugzilla.redhat.com/show_bug.cgi?id=1308556 build-jar-repository lib high-scale-lib/high-scale-lib build-jar-repository lib cassandra-java-driver/cassandra-driver-core build-jar-repository lib netty/netty-all build-jar-repository lib lz4-java build-jar-repository lib snappy-java build-jar-repository lib jBCrypt build-jar-repository lib concurrentlinkedhashmap-lru build-jar-repository lib ohc/ohc-core # temporarly removed because it is optional #build-jar-repository lib hadoop/hadoop-common build-jar-repository lib snakeyaml build-jar-repository lib jackson/jackson-core-asl build-jar-repository lib jackson/jackson-mapper-asl build-jar-repository lib ecj build-jar-repository lib objectweb-asm/asm build-jar-repository lib commons-math3 # temporarly removed because it is optional #build-jar-repository lib hadoop/hadoop-mapreduce-client-core build-jar-repository lib concurrent-trees build-jar-repository lib hppc build-jar-repository lib snowball-java build-jar-repository lib logback/logback-classic build-jar-repository lib logback/logback-core build-jar-repository lib metrics-reporter-config/reporter-config build-jar-repository lib metrics-reporter-config/reporter-config-base build-jar-repository lib joda-time build-jar-repository lib compress-lzf build-jar-repository lib disruptor-thrift-server build-jar-repository lib commons-cli build-jar-repository lib airline build-jar-repository lib jna build-jar-repository lib sigar # temporarly removed because it is optional #build-jar-repository lib hadoop/hadoop-annotations build-jar-repository lib jflex build-jar-repository lib java_cup build-jar-repository lib commons-codec build-jar-repository lib caffeine # test dependencies build-jar-repository lib junit build-jar-repository lib ant build-jar-repository lib ant/ant-junit build-jar-repository lib hamcrest/core build-jar-repository lib apache-commons-io build-jar-repository lib byteman/byteman-bmunit build-jar-repository lib commons-collections build-jar-repository lib jmh/jmh-core build-jar-repository lib HdrHistogram # binaries dependencies build-jar-repository lib javax.inject # build patch %patch0 -p1 # airline patch %patch1 -p1 # scripts patch %patch2 -p1 # hppc patch %patch3 -p1 # thrift patch %patch4 -p1 # slf4j patch %patch5 -p1 # remove primitive patch %patch6 -p1 # copy pom files mkdir build cp -p %{SOURCE4} build/%{pkg_name}-%{version}.pom cp -p %{SOURCE5} build/%{pkg_name}-thrift-%{version}.pom cp -p %{SOURCE6} build/%{pkg_name}-clientutil-%{version}.pom cp -p %{SOURCE7} build/%{pkg_name}-%{version}-parent.pom %{?scl:scl enable %{scl_maven} %{scl} - << "EOF"} # update dependencies that are not correct in the downloaded pom files %pom_change_dep com.boundary: com.github.stephenc.high-scale-lib: build/%{name}-%{version}.pom %pom_change_dep com.github.rholder:snowball-stemmer org.tartarus:snowball build/%{name}-thrift-%{version}.pom # remove primitve as a dependency %pom_remove_dep -r :primitive build/%{pkg_name}-thrift-%{version}.pom %mvn_package "org.apache.%{pkg_name}:%{pkg_name}-parent:pom:%{version}" parent %mvn_package ":%{pkg_name}-thrift" thrift %mvn_package ":%{pkg_name}-clientutil" clientutil %mvn_package ":%{pkg_name}-stress" stress %{?scl:EOF} %build %{?scl:scl enable %{scl_maven} %{scl} - << "EOF"} ant jar javadoc -Drelease=true %{?scl:EOF} # Build the cqlshlib Python module pushd pylib %py2_build popd %install %{?scl:scl enable %{scl_maven} %{scl} - << "EOF"} %mvn_artifact build/%{pkg_name}-%{version}-parent.pom %mvn_artifact build/%{pkg_name}-%{version}.pom build/%{pkg_name}-%{version}.jar %mvn_artifact build/%{pkg_name}-thrift-%{version}.pom build/%{pkg_name}-thrift-%{version}.jar %mvn_artifact build/%{pkg_name}-clientutil-%{version}.pom build/%{pkg_name}-clientutil-%{version}.jar %mvn_artifact org.apache.cassandra:%{pkg_name}-stress:%{version} build/tools/lib/%{pkg_name}-stress.jar %mvn_install -J build/javadoc/ %{?scl:EOF} # Install the cqlshlib Python module pushd pylib %py2_install popd # create data dir mkdir -p %{buildroot}%{_sharedstatedir}/%{pkg_name} # logs directory plus files mkdir -p %{buildroot}%{_localstatedir}/log/%{pkg_name} install -p -D -m 644 "%{SOURCE1}" %{buildroot}%{_sysconfdir}/logrotate.d/%{pkg_name} install -p -D -m 755 bin/%{pkg_name} %{buildroot}%{_bindir}/%{pkg_name} install -p -D -m 755 bin/%{pkg_name}.in.sh %{buildroot}%{_bindir}/%{pkg_name}.in.sh install -p -D -m 755 conf/%{pkg_name}-env.sh %{buildroot}%{_sysconfdir}/%{pkg_name}-env.sh install -p -D -m 644 conf/%{pkg_name}.yaml %{buildroot}%{_sysconfdir}/%{pkg_name}.yaml install -p -D -m 644 conf/jvm.options %{buildroot}%{_sysconfdir}/jvm.options install -p -D -m 644 conf/logback-tools.xml %{buildroot}%{_sysconfdir}/logback-tools.xml install -p -D -m 644 conf/logback.xml %{buildroot}%{_sysconfdir}/logback.xml install -p -D -m 755 bin/cqlsh.py %{buildroot}%{_bindir}/cqlsh install -p -D -m 755 bin/nodetool %{buildroot}%{_bindir}/nodetool install -p -D -m 755 bin/sstableloader %{buildroot}%{_bindir}/sstableloader install -p -D -m 755 bin/sstablescrub %{buildroot}%{_bindir}/sstablescrub install -p -D -m 755 bin/sstableupgrade %{buildroot}%{_bindir}/sstableupgrade install -p -D -m 755 bin/sstableutil %{buildroot}%{_bindir}/sstableutil install -p -D -m 755 bin/sstableverify %{buildroot}%{_bindir}/sstableverify install -p -D -m 755 tools/bin/sstabledump %{buildroot}%{_bindir}/sstabledump install -p -D -m 755 tools/bin/sstableexpiredblockers %{buildroot}%{_bindir}/sstableexpiredblockers install -p -D -m 755 tools/bin/sstablelevelreset %{buildroot}%{_bindir}/sstablelevelreset install -p -D -m 755 tools/bin/sstablemetadata %{buildroot}%{_bindir}/sstablemetadata install -p -D -m 755 tools/bin/sstableofflinerelevel %{buildroot}%{_bindir}/sstableofflinerelevel install -p -D -m 755 tools/bin/sstablerepairedset %{buildroot}%{_bindir}/sstablerepairedset install -p -D -m 755 tools/bin/sstablesplit %{buildroot}%{_bindir}/sstablesplit install -p -D -m 755 tools/bin/%{pkg_name}-stress %{buildroot}%{_bindir}/%{pkg_name}-stress install -p -D -m 755 tools/bin/%{pkg_name}-stressd %{buildroot}%{_bindir}/%{pkg_name}-stressd # install cassandrad.service install -p -D -m 644 "%{SOURCE2}" %{buildroot}%{_unitdir}/%{pkg_name}d.service %pre getent group %{pkg_name} >/dev/null || groupadd -f -g %{allocated_gid} -r %{pkg_name} if ! getent passwd %{pkg_name} >/dev/null ; then if ! getrnt passwd %{allocated_uid} >/dev/null ; then useradd -r -u %{allocated_uid} -g %{pkg_name} -d %{_sharedstatedir}/%{pkg_name} \ -s /sbin/nologin -c "Cassandra Database Server" %{pkg_name} else useradd -r -g %{pkg_name} -d %{_sharedstatedir}/%{pkg_name} -s /sbin/nologin \ -c "Cassandra Database Server" %{pkg_name} fi fi exit 0 %post %systemd_post %{pkg_name}d.service %preun %systemd_preun %{pkg_name}d.service %postun %systemd_postun_with_restart %{pkg_name}d.service %files -f .mfiles %doc README.asc CHANGES.txt NEWS.txt %license LICENSE.txt NOTICE.txt %dir %attr(755, %{pkg_name}, root) %{_sharedstatedir}/%{pkg_name} %dir %attr(750, %{pkg_name}, root) %{_localstatedir}/log/%{pkg_name} %attr(755, root, root) %{_bindir}/%{pkg_name} %attr(755, root, root) %{_bindir}/%{pkg_name}.in.sh %config(noreplace) %{_sysconfdir}/%{pkg_name}-env.sh %config(noreplace) %{_sysconfdir}/%{pkg_name}.yaml %config(noreplace) %{_sysconfdir}/jvm.options %config(noreplace) %{_sysconfdir}/logback-tools.xml %config(noreplace) %{_sysconfdir}/logback.xml %config(noreplace) %{_sysconfdir}/logrotate.d/%{pkg_name} %{_unitdir}/%{pkg_name}d.service %files parent -f .mfiles-parent %license LICENSE.txt NOTICE.txt %files thrift -f .mfiles-thrift %license LICENSE.txt NOTICE.txt %files clientutil -f .mfiles-clientutil %license LICENSE.txt NOTICE.txt %attr(755, root, root) %{_bindir}/nodetool %attr(755, root, root) %{_bindir}/sstableloader %attr(755, root, root) %{_bindir}/sstablescrub %attr(755, root, root) %{_bindir}/sstableupgrade %attr(755, root, root) %{_bindir}/sstableutil %attr(755, root, root) %{_bindir}/sstableverify %attr(755, root, root) %{_bindir}/sstabledump %attr(755, root, root) %{_bindir}/sstableexpiredblockers %attr(755, root, root) %{_bindir}/sstablelevelreset %attr(755, root, root) %{_bindir}/sstablemetadata %attr(755, root, root) %{_bindir}/sstableofflinerelevel %attr(755, root, root) %{_bindir}/sstablerepairedset %attr(755, root, root) %{_bindir}/sstablesplit %files python2-cqlshlib %doc conf/cqlshrc.sample %license LICENSE.txt NOTICE.txt %attr(755, root, root) %{_bindir}/cqlsh %{python2_sitearch}/cqlshlib %{python2_sitearch}/%{pkg_name}_pylib-0.0.0-py%{python2_version}.egg-info %files stress -f .mfiles-stress %license LICENSE.txt NOTICE.txt %attr(755, root, root) %{_bindir}/%{pkg_name}-stress %attr(755, root, root) %{_bindir}/%{pkg_name}-stressd %attr(755, root, root) %{_bindir}/%{pkg_name}.in.sh %files javadoc -f .mfiles-javadoc %license LICENSE.txt NOTICE.txt %changelog * Thu Dec 01 2016 Tomas Repik - 3.9-1 - initial package