You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

262 lines
11 KiB

##
## arangodb.spec -- OpenPKG RPM Package Specification
## Copyright (c) 2000-2022 OpenPKG Project <http://openpkg.org/>
##
## Permission to use, copy, modify, and distribute this software for
## any purpose with or without fee is hereby granted, provided that
## the above copyright notice and this permission notice appear in all
## copies.
##
## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
## SUCH DAMAGE.
##
# package version
%define V_opkg 3.3.20
%define V_tarball 3.3.20
# package information
Name: arangodb
Summary: Document/Graph/Key-Value Database
URL: http://www.arangodb.org/
Vendor: triAGENS GmbH
Packager: OpenPKG Project
Distribution: OpenPKG Community
Class: EVAL
Group: Database
License: Apache
Version: %{V_opkg}
Release: 20181130
# list of sources
Source0: https://github.com/arangodb/arangodb/archive/v%{V_tarball}.tar.gz
Source1: rc.arangodb
Source2: arangod.conf
Source3: arangosh.conf
Source4: arangodump.conf
Source5: arangomkdb.sh
Patch0: arangodb.patch
# build information
BuildPreReq: OpenPKG, openpkg >= 20160101, gcc7, gcc7::with_cxx = yes, bison, python
PreReq: OpenPKG, openpkg >= 20160101, x509
BuildPreReq: readline, ncurses, openssl-threads, libexecinfo, boost
PreReq: readline, ncurses, openssl-threads, libexecinfo, boost
%description
ArangoDB is a distributed database with four main features:
Multi-Model: documents, graphs and key-value pairs -— model your
data as you see fit for your application; Joins: conveniently join
what belongs together for flexible ad-hoc querying, less data
redundancy; Transactions: easy application development keeping your
data consistent and safe. No hassle in your client; Query Language:
use the SQL-like ArangoDB Query Language (AQL) for powerful data
retrival.
%track
prog arangodb = {
version = %{version}
url = https://github.com/arangodb/arangodb/releases
regex = v(\d+\.\d+\.\d+)\.tar\.gz
}
%prep
%setup -q -n arangodb-%{V_tarball}
%patch -p0
%build
# patch sources
%{l_shtool} subst \
-e 's;#!/bin/bash;#!%{l_bash};g' \
`grep -r '#!/bin/bash' . | sed -e 's;:.*;;'`
# remove binary symlinks (which point to not existing files anyway)
rm -rf js/node/node_modules/mocha/node_modules/.bin
rm -rf js/node/node_modules/jshint/node_modules/.bin
rm -rf js/node/node_modules/js-yaml/node_modules/.bin
rm -rf js/node/node_modules/.bin
# provide tools as it is too hard to pass the correct flags
# to all sub-directory build processes of ArangoDB
iflags="-I `pwd`/3rdParty/rocksdb/rocksdb/include"
iflags="$iflags -I `pwd`/3rdParty/snappy/google-snappy-*"
iflags="$iflags -I `pwd`/3rdParty/rocksdb/v5.6.X/include/rocksdb"
iflags="$iflags -I `pwd`/3rdParty/rocksdb/v5.6.X/include"
iflags="$iflags -I `pwd`/3rdParty/V8/v5*/include"
iflags="$iflags -I `pwd`/3rdParty/V8/v5*/third_party/icu/source/common"
iflags="$iflags -I `pwd`/3rdParty/V8/v5*/third_party/icu/source/i18n"
iflags="$iflags -I `pwd`/3rdParty/libev/libev-*"
iflags="$iflags -I `pwd`/3rdParty/zlib/zlib-*"
iflags="$iflags -I `pwd`/3rdParty/curl/curl-*/include"
lflags="-L `pwd`/build/3rdParty/rocksdb/rocksdb"
lflags="$lflags -L `pwd`/build/3rdParty/snappy/google-snappy-*"
lflags="$lflags -L `pwd`/build/3rdParty/V8/v5*/*.release/obj.target/third_party/icu"
lflags="$lflags -L `pwd`/build/3rdParty/V8/v5*/*.release/obj.target/tools/gyp"
lflags="$lflags -L `pwd`/build/3rdParty/libev"
lflags="$lflags -L `pwd`/build/3rdParty/zlib/zlib-*"
lflags="$lflags -L `pwd`/build/3rdParty/curl/curl-*"
cflags="-std=gnu11 -Wno-sign-compare"
cflags="$cflags %{l_cflags -O}"
cflags="$cflags $iflags"
cflags="$cflags %{l_cppflags openssl-threads .}"
cflags="$cflags $lflags"
cflags="$cflags %{l_ldflags openssl-threads .}"
cxxflags="-std=gnu++11 -Wno-sign-compare"
cxxflags="$cxxflags -D_GLIBCXX_USE_C99"
cxxflags="$cxxflags %{l_cxxflags -O}"
cxxflags="$cxxflags $iflags"
cxxflags="$cxxflags %{l_cppflags openssl-threads .}"
cxxflags="$cxxflags $lflags"
cxxflags="$cxxflags %{l_ldflags openssl-threads .}"
mkdir tool
( echo "#!/bin/sh"
echo "exec %{l_prefix}/bin/gcc7 $cflags \${1+\"\$@\"}"
) >tool/cc
( echo "#!/bin/sh"
echo "exec %{l_prefix}/bin/g++7 $cxxflags \${1+\"\$@\"}"
) >tool/c++
chmod a+x tool/*
PATH=`pwd`/tool:$PATH
# configure program
mkdir build
cd build
cmake \
-Wno-dev \
-DCMAKE_BUILD_TYPE="Release" \
-DCMAKE_C_COMPILER="cc" \
-DCMAKE_C_FLAGS="%{l_cflags -O} %{l_cppflags openssl-threads .}" \
-DCMAKE_CXX_COMPILER="c++" \
-DCMAKE_CXX_FLAGS="%{l_cxxflags -O} %{l_cppflags openssl-threads .}" \
-DCMAKE_EXE_LINKER_FLAGS="%{l_ldflags openssl-threads .}" \
-DCMAKE_INSTALL_PREFIX="%{l_prefix}" \
-DCMAKE_INSTALL_SYSCONFDIR_ARANGO="%{l_prefix}/etc/arangodb" \
-DPYTHON_EXECUTABLE="%{l_prefix}/bin/python" \
-DOPENSSL_ROOT_DIR="%{l_prefix}/lib/openssl-threads" \
-DUSE_BACKTRACE=on \
-DUSE_FAILURE_TESTS=off \
-DUSE_MAINTAINER_MODE=off \
-DUSE_BOOST_UNITTESTS=off \
-DUSE_JEMALLOC=off \
-DASM686=off \
-DAMD64=off \
..
# build program
%{l_make} %{l_mflags -O}
%install
# install program
( cd build
%{l_make} %{l_mflags} install DESTDIR=$RPM_BUILD_ROOT
) || exit $?
# post-adjust installation
strip $RPM_BUILD_ROOT%{l_prefix}/bin/* >/dev/null 2>&1 || true
rm -rf $RPM_BUILD_ROOT%{l_prefix}/share/doc >/dev/null 2>&1 || true
rm -rf $RPM_BUILD_ROOT%{l_prefix}/var/lib >/dev/null 2>&1 || true
rm -rf $RPM_BUILD_ROOT%{l_prefix}/var/log >/dev/null 2>&1 || true
rm -rf $RPM_BUILD_ROOT%{l_prefix}/var/db >/dev/null 2>&1 || true
# install default configuration
rm -f $RPM_BUILD_ROOT%{l_prefix}/etc/arangodb/*
mv $RPM_BUILD_ROOT%{l_prefix}/etc/arangodb3 \
$RPM_BUILD_ROOT%{l_prefix}/etc/arangodb
%{l_shtool} install -c -m 644 %{l_value -s -a} \
%{SOURCE arangod.conf} \
%{SOURCE arangosh.conf} \
%{SOURCE arangodump.conf} \
$RPM_BUILD_ROOT%{l_prefix}/etc/arangodb/
# install utility
%{l_shtool} install -c -m 755 %{l_value -s -a} \
-e 's;@l_bash@;%{l_bash};g' \
%{SOURCE arangomkdb.sh} \
$RPM_BUILD_ROOT%{l_prefix}/bin/arangomkdb
# install run-command script
%{l_shtool} mkdir -f -p -m 755 \
$RPM_BUILD_ROOT%{l_prefix}/etc/rc.d
%{l_shtool} install -c -m 755 %{l_value -s -a} \
%{SOURCE rc.arangodb} $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d/
# create run-time directory
%{l_shtool} mkdir -f -p -m 755 \
$RPM_BUILD_ROOT%{l_prefix}/var/arangodb/apps \
$RPM_BUILD_ROOT%{l_prefix}/var/arangodb/db \
$RPM_BUILD_ROOT%{l_prefix}/var/arangodb/log \
$RPM_BUILD_ROOT%{l_prefix}/var/arangodb/run
# determine installation files
%{l_rpmtool} files -v -ofiles -r$RPM_BUILD_ROOT \
%{l_files_std} \
'%config %{l_prefix}/etc/arangodb/*' \
'%attr(-,%{l_rusr},%{l_rgrp}) %{l_prefix}/var/arangodb/*'
%files -f files
%clean
%post
if [ $1 -eq 1 ]; then
# provide SSL/TLS certificate/key pairs
if [ ! -f $RPM_INSTALL_PREFIX/etc/arangodb/arangod-sv.pem ]; then
cat $RPM_INSTALL_PREFIX/etc/x509/example-server.crt.pem \
$RPM_INSTALL_PREFIX/etc/x509/example-server.key.pem \
>$RPM_INSTALL_PREFIX/etc/arangodb/arangod-sv.pem
chown %{l_rusr}:%{l_rgrp} $RPM_INSTALL_PREFIX/etc/arangodb/arangod-sv.pem
chmod 600 $RPM_INSTALL_PREFIX/etc/arangodb/arangod-sv.pem
fi
if [ ! -f $RPM_INSTALL_PREFIX/etc/arangodb/arangod-ca.pem ]; then
cat $RPM_INSTALL_PREFIX/etc/x509/example-ca.crt.pem \
>$RPM_INSTALL_PREFIX/etc/arangodb/arangod-ca.pem
chown %{l_rusr}:%{l_rgrp} $RPM_INSTALL_PREFIX/etc/arangodb/arangod-ca.pem
chmod 644 $RPM_INSTALL_PREFIX/etc/arangodb/arangod-ca.pem
fi
# display information about next steps
( echo "After initially starting ArangoDB with..."
echo " \$ $RPM_INSTALL_PREFIX/bin/openpkg rc arangodb start"
echo "...you should immediately set the \"root\" password on database \"_system\":"
echo " \$ echo 'require(\"@arangodb/users\").update(\"root\", \"<root-pw>\");' | \\%{l_nil}"
echo " $RPM_INSTALL_PREFIX/bin/arangosh --server.authentication false"
echo "You can then create a custom database with:"
echo " \$ $RPM_INSTALL_PREFIX/bin/arangomkdb <database> <username> <password>"
echo "Then you can connect to the custom database with:"
echo " \$ $RPM_INSTALL_PREFIX/bin/arangosh \\%{l_nil}"
echo " --server.database <database> \\%{l_nil}"
echo " --server.username <username> \\%{l_nil}"
echo " --server.password <password>"
echo "The web interface of ArangoDB you can reach under:"
echo " https://localhost:8529/"
) | %{l_rpmtool} msg -b -t notice
fi
if [ $1 -eq 2 ]; then
# after upgrade, restart service
eval `%{l_rc} arangodb status 2>/dev/null`
[ ".$arangodb_active" = .yes ] && %{l_rc} mongodb restart
fi
exit 0
%preun
# before erase, stop service and remove log files
if [ $1 -eq 0 ]; then
%{l_rc} arangodb stop 2>/dev/null
rm -f $RPM_INSTALL_PREFIX/etc/arangodb/*.pem >/dev/null 2>&1 || true
rm -f $RPM_INSTALL_PREFIX/var/arangodb/run/* >/dev/null 2>&1 || true
rm -f $RPM_INSTALL_PREFIX/var/arangodb/log/* >/dev/null 2>&1 || true
rm -rf $RPM_INSTALL_PREFIX/var/arangodb/db/* >/dev/null 2>&1 || true
rm -rf $RPM_INSTALL_PREFIX/var/arangodb/apps/* >/dev/null 2>&1 || true
fi
exit 0