Repository: ignite Updated Branches: refs/heads/ignite-2.5 54fc0eb8b -> ce26e3fbe
IGNITE-7108 Apache Ignite 2.5 RPM and DEB packages * added package.sh script for automation DEB and RPM packages build * added DEB package build * updated RPM package version to 2.5.0 * refactored RPM files layout for unification of build process * improved packages layout hierarchy Signed-off-by: Andrey Gura <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/ce26e3fb Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/ce26e3fb Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/ce26e3fb Branch: refs/heads/ignite-2.5 Commit: ce26e3fbe12c82ef86cc2a3127e9ad4718476cd0 Parents: 54fc0eb Author: Ivanov Petr <[email protected]> Authored: Wed Apr 25 19:59:14 2018 +0300 Committer: Andrey Gura <[email protected]> Committed: Wed Apr 25 20:04:20 2018 +0300 ---------------------------------------------------------------------- DEVNOTES.txt | 35 ++-- packaging/deb/changelog | 12 ++ packaging/deb/control | 17 ++ packaging/deb/copyright | 12 ++ packaging/deb/rules | 44 +++++ packaging/package.sh | 257 ++++++++++++++++++++++++++++ packaging/rpm/SOURCES/name.service | 17 -- packaging/rpm/SOURCES/service.sh | 28 --- packaging/rpm/SPECS/apache-ignite.spec | 214 ----------------------- packaging/rpm/apache-ignite.spec | 245 ++++++++++++++++++++++++++ packaging/rpm/name.service | 17 ++ packaging/rpm/service.sh | 28 +++ parent/pom.xml | 6 +- 13 files changed, 653 insertions(+), 279 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/ce26e3fb/DEVNOTES.txt ---------------------------------------------------------------------- diff --git a/DEVNOTES.txt b/DEVNOTES.txt index 6ec0f39..7785ee7 100644 --- a/DEVNOTES.txt +++ b/DEVNOTES.txt @@ -75,36 +75,39 @@ Instructions can be found at modules/platforms/cpp/DEVNOTES.txt. Apache Ignite RPM Package Build Instructions ============================================ -1) Install dependencies +1) Build Apache Ignite binary archive (instructions above) - yum install -y rpmdevtools rpm-build +2) Run packaging script and follow messages if they required interaction -2) Create directory layout + packaging/package.sh --rpm - rpmdev-setuptree + Packages will be available in packaging/ directory -3) Copy build specification and additional sources required for build - cp -rfv packaging/rpm/* ~/rpmbuild +Apache Ignite DEB Package Build Instructions +============================================ +1) Build Apache Ignite binary archive (instructions above) -4) Copy built binary from target/bin to sources directory +2) Build Apache Ignite RPM package (also above) - cp -rfv target/bin/apache-ignite-<version>-bin.zip ~/rpmbuild/SOURCES/apache-ignite.zip +3) Run packaging script and follow messages if they required interaction -5) Run build process + packaging/package.sh --deb - rpmbuild -bb ~/rpmbuild/SPECS/apache-ignite.spec + Packages will be available in packaging/ directory - NOTE: to build also SRPM package, run with -ba flag instead + NOTE: to build both packages type at once, run - Package will be available in ~/rpmbuild/RPMS/noarch + packaging/package.sh --rpm --deb -Install and Run Apache Ignite from RPM -====================================== -1) Install package +Install and Run Apache Ignite from packages +=========================================== +1) Install package with YUM or APT respectively - yum localinstall -y apache-ignite-<version>.rpm + yum localinstall -y apache-ignite-<version>.noarch.rpm + or + dpkg -i apache-ignite_<version>_all.deb 2) Start Apache Ignite service http://git-wip-us.apache.org/repos/asf/ignite/blob/ce26e3fb/packaging/deb/changelog ---------------------------------------------------------------------- diff --git a/packaging/deb/changelog b/packaging/deb/changelog new file mode 100644 index 0000000..99106f1 --- /dev/null +++ b/packaging/deb/changelog @@ -0,0 +1,12 @@ +apache-ignite (2.5.0-1) unstable; urgency=low + + * Updated Apache Ignite to version 2.5.0 + + -- Petr Ivanov <[email protected]> Tue, 17 Apr 2018 12:00:00 +0300 + +apache-ignite (2.4.0-1) unstable; urgency=low + + * Initial package release + + -- Petr Ivanov <[email protected]> Wed, 17 Jan 2018 12:00:00 +0300 + http://git-wip-us.apache.org/repos/asf/ignite/blob/ce26e3fb/packaging/deb/control ---------------------------------------------------------------------- diff --git a/packaging/deb/control b/packaging/deb/control new file mode 100644 index 0000000..40467c0 --- /dev/null +++ b/packaging/deb/control @@ -0,0 +1,17 @@ +Source: apache-ignite +Maintainer: Petr Ivanov <[email protected]> +Section: misc +Priority: optional +Standards-Version: 4.1.1.1 + +Package: apache-ignite +Architecture: all +Section: misc +Priority: optional +Depends: openjdk-8-jdk | oracle-java8-installer, systemd, passwd +Description: Apache Ignite In-Memory Computing, Database and Caching Platform + Ignite⢠is a memory-centric distributed database, caching, and processing + platform for transactional, analytical, and streaming workloads, delivering + in-memory speeds at petabyte scale +Homepage: https://ignite.apache.org + http://git-wip-us.apache.org/repos/asf/ignite/blob/ce26e3fb/packaging/deb/copyright ---------------------------------------------------------------------- diff --git a/packaging/deb/copyright b/packaging/deb/copyright new file mode 100644 index 0000000..7a6cacb --- /dev/null +++ b/packaging/deb/copyright @@ -0,0 +1,12 @@ +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + http://git-wip-us.apache.org/repos/asf/ignite/blob/ce26e3fb/packaging/deb/rules ---------------------------------------------------------------------- diff --git a/packaging/deb/rules b/packaging/deb/rules new file mode 100755 index 0000000..d09d18c --- /dev/null +++ b/packaging/deb/rules @@ -0,0 +1,44 @@ +#!/usr/bin/make -f +# debian/rules for alien + +PACKAGE=$(shell dh_listpackages) +DOC_DIR=$(shell ls usr/share/doc | grep -E "[0-9]") + +clean: + dh_testdir + dh_testroot + dh_clean -d + +binary-arch: clean + dh_testdir + dh_testroot + dh_prep + dh_installdirs + + dh_installdocs + dh_installchangelogs + +# Copy the packages's files. + find . -maxdepth 1 -mindepth 1 -not -name debian -print0 | \ + xargs -0 -r -i cp -a {} debian/$(PACKAGE) + +# +# If you need to move files around in debian/$(PACKAGE) or do some +# binary patching, do it here +# +# Fix doc directory + if [ "$(DOC_DIR)" != "" ];\ + then mv -v debian/$(PACKAGE)/usr/share/doc/$(DOC_DIR)/* debian/$(PACKAGE)/usr/share/doc/$(shell echo $(DOC_DIR) | sed -r 's|-[0-9].*||');\ + rm -rf debian/$(PACKAGE)/usr/share/doc/$(DOC_DIR);\ + fi;\ + +# This has been known to break on some wacky binaries. + dh_compress + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-arch + http://git-wip-us.apache.org/repos/asf/ignite/blob/ce26e3fb/packaging/package.sh ---------------------------------------------------------------------- diff --git a/packaging/package.sh b/packaging/package.sh new file mode 100755 index 0000000..622fd32 --- /dev/null +++ b/packaging/package.sh @@ -0,0 +1,257 @@ +#!/usr/bin/env bash +set -o nounset +set -o errexit +set -o pipefail +set -o errtrace +set -o functrace + +cd "$(dirname "${BASH_SOURCE[0]}")" # Run from the script's root + + + +############## +# SETTINGS # +############## +APT_YUM_Y= # Install with no user interaction option for apt | yum +BIN_NAME= # Name of binary archive used as a source for package building +IGNITE_VERSION= # Main product version +PACKAGING_DIR= # Root directory of packaging script +DEB_WORK_DIR= # Main directory for building DEB packages +RPM_WORK_DIR= # Main directory for building RPM packages + +BUILD_DEB_FLAG=false # Whether to build DEB +BUILD_RPM_FLAG=false # Whether to build RPM + + + +############### +# FUNCTIONS # +############### + +# Usage help +usage () { + cat <<EOF + +####################################################################### +# Build RPM or DEB package from Apache Ignite's sources or binaries # +####################################################################### + +Prerequisites: + - RPM: binary archive with name 'apache-ignite-fabric-<version>-bin.zip' + - DEB: previously built corresponding RPM package + +Usage: ./$(basename ${BASH_SOURCE[0]}) --rpm,--deb [--batch] + +Options: + --rpm, --deb select package type for building (multiselect) + + --batch do not ask user for any interation + +EOF +} + + +# Check and prepare build environment +prepEnv () { + installCmd="" + packages="unzip curl alien gcc" + executables="rpmbuild unzip curl alien gcc" + + # Check OS + name=$(cat /etc/*release | grep ^NAME | sed -r 's|.*"(.*)".*|\1|') + case ${name} in + "Ubuntu") + installCmd="apt --no-install-recommends" + packages="${packages} rpm" + ;; + "CentOS Linux") + installCmd="yum" + packages="${packages} rpm-build" + ;; + *) + echo "Unknown or unsupported linux detected" + echo "Will skip 'Check and prepare build environment' step" + echo "Please, prepare you environment manually" + ;; + esac + + # Install missing software if necessary + installFlag=false + if [[ ! -z "${installCmd}" ]]; then + for executable in ${executables}; do + command -v ${executable} &>/dev/null || { + installFlag=true + break + } + done + if ${installFlag}; then + ${installCmd} ${APT_YUM_Y} install ${packages} + fi + fi +} + + +# Check that binary archive exists and try to download it from Apache Dist Archive is not +getBin () { + set -x + IGNITE_VERSION=$(cat rpm/apache-ignite.spec | grep Version: | head -1 | sed -r 's|.*:\s+(.*)|\1|') + BIN_NAME="apache-ignite-fabric-${IGNITE_VERSION}-bin.zip" + binPreparedFlag=false + + # Search binary in packaging root directory + if [ -f "${BIN_NAME}" ]; then + binPreparedFlag=true + fi + + # Get from target + if ! ${binPreparedFlag}; then + if $(cp -rf ../target/bin/${BIN_NAME} ./ &>/dev/null); then + binPreparedFlag=true + fi + fi + + # Get from Apache Dist + if ! ${binPreparedFlag}; then + if $(curl --fail -O https://archive.apache.org/dist/ignite/${IGNITE_VERSION}/${BIN_NAME} &>/dev/null); then + binPreparedFlag=true + else + rm -rf ${BIN_NAME} + fi + fi + + # Fail if none of the above acquiring method succeeded + if ! ${binPreparedFlag}; then + echo "[ERROR] Can't find Apache Ignite's binary archive '${BIN_NAME}'" + exit 1 + fi +} + + +# Build RPM package +buildRPM () { + RPM_WORK_DIR="$(mktemp -d)" + rm -rfv *.rpm + + # Prepare build layout + mkdir -pv ${RPM_WORK_DIR}/{BUILD,RPMS,SOURCES,SPECS,SRPMS} + cp -rfv ${BIN_NAME} rpm/{name.service,service.sh} ${RPM_WORK_DIR}/SOURCES + cp -rfv rpm/apache-ignite.spec ${RPM_WORK_DIR}/SPECS + + # Assemble RPM packages + rpmbuild -bb -v --define "_topdir ${RPM_WORK_DIR}" ${RPM_WORK_DIR}/SPECS/apache-ignite.spec + + # Gather RPMS + find ${RPM_WORK_DIR} -name "*.rpm" -exec mv -fv {} ${PACKAGING_DIR} \; +} + + +# Build DEB package +buildDEB () { + DEB_WORK_DIR="$(mktemp -d)" + rm -rfv *.deb + + # Check that RPMs for building exists + packageVersion="$(cat deb/changelog | head -1 | sed -r 's|.*\((.*)\).*|\1|')" + if [ ! -f "apache-ignite-${packageVersion}.noarch.rpm" ]; then + echo "[ERROR] RPM for converting to DEB not found" + exit 1 + fi + + # Unpack RPMs and prepare DEBs build layout + cd ${DEB_WORK_DIR} + cp -rfv ${PACKAGING_DIR}/apache-ignite-${packageVersion}.noarch.rpm ${DEB_WORK_DIR} + alien --scripts --verbose --keep-version --single apache-ignite-${packageVersion}.noarch.rpm + + # Copy custom DEBs control files and make some modifications on the fly + buildDirVersion="$(echo ${packageVersion} | cut -f1 -d-)" + cp -rfv ${PACKAGING_DIR}/deb/{changelog,control,copyright,rules} ${DEB_WORK_DIR}/apache-ignite-${buildDirVersion}/debian + sed -i -r -e 's|/usr/bin/mkdir|/bin/mkdir|' -e 's|/usr/bin/chown|/bin/chown|' ${DEB_WORK_DIR}/apache-ignite-${buildDirVersion}/etc/systemd/system/[email protected] + + # Assemble DEB packages + cd ${DEB_WORK_DIR}/apache-ignite-${buildDirVersion} + debian/rules binary + + # Gather DEBs + find ${DEB_WORK_DIR} -name "*.deb" -exec mv -fv {} ${PACKAGING_DIR} \; +} + + +# Trap function +processTrap () { + # Removing temporary files + echo "Removing temporary work directories: ${DEB_WORK_DIR} ${RPM_WORK_DIR}" + rm -rf ${DEB_WORK_DIR} ${RPM_WORK_DIR} + + # Finish + echo + TIME="$(($(date +%s) - START_TIME))" + echo "=== Run time: $(printf '%dh:%02dm:%02ds\n' $((TIME/3600)) $((TIME%3600/60)) $((TIME%60))) ===" + echo +} + + + +########### +# START # +########### +START_TIME=$(date +%s) +clear + + +# Check for sudo +if [ $EUID -ne 0 ]; then + echo "[ERROR] Packages building requires root | sudo privileges" + exit 1 +fi + + +# Parse input options +while [ $# -gt 0 ]; do + case "$1" in + --rpm) + shift + BUILD_RPM_FLAG=true + ;; + --deb) + BUILD_DEB_FLAG=true + shift + ;; + --batch) + shift + APT_YUM_Y="-y" + ;; + --help) + usage + exit 0 + ;; + *) + echo "[ERROR] Unknown argument '${1}'" + usage + exit 1 + ;; + esac +done +if [ ${BUILD_RPM_FLAG} == false -a ${BUILD_DEB_FLAG} == false ]; then + echo "[ERROR] At least one type of package should be specified: RPM or DEB" + usage + exit 1 +fi + + +PACKAGING_DIR="$(pwd)" + + +# Trap +trap 'processTrap' EXIT + + +# Build packages +prepEnv + +if ${BUILD_RPM_FLAG}; then + getBin + buildRPM +fi + +if ${BUILD_DEB_FLAG}; then buildDEB; fi + http://git-wip-us.apache.org/repos/asf/ignite/blob/ce26e3fb/packaging/rpm/SOURCES/name.service ---------------------------------------------------------------------- diff --git a/packaging/rpm/SOURCES/name.service b/packaging/rpm/SOURCES/name.service deleted file mode 100644 index d03a7fc..0000000 --- a/packaging/rpm/SOURCES/name.service +++ /dev/null @@ -1,17 +0,0 @@ -[Unit] -Description=Apache Ignite In-Memory Computing Platform Service -After=syslog.target network.target - -[Service] -Type=forking -User=#user# -WorkingDirectory=/usr/share/#name#/work -PermissionsStartOnly=true -ExecStartPre=-/usr/bin/mkdir /var/run/#name# -ExecStartPre=-/usr/bin/chown #user#:#user# /var/run/#name# -ExecStartPre=-/usr/bin/env bash /usr/share/#name#/bin/service.sh set-firewall -ExecStart=/usr/share/#name#/bin/service.sh start %i -PIDFile=/var/run/#name#/#name#.%i.pid - -[Install] -WantedBy=multi-user.target http://git-wip-us.apache.org/repos/asf/ignite/blob/ce26e3fb/packaging/rpm/SOURCES/service.sh ---------------------------------------------------------------------- diff --git a/packaging/rpm/SOURCES/service.sh b/packaging/rpm/SOURCES/service.sh deleted file mode 100644 index 4163676..0000000 --- a/packaging/rpm/SOURCES/service.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env bash - -firewallCmd="firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0" - -# Define function to check whether firewalld is present and started and apply firewall rules for grid nodes -setFirewall () -{ - if [[ "$(type firewall-cmd &>/dev/null; echo $?)" -eq 0 && "$(systemctl is-active firewalld)" == "active" ]] - then - for port in s d - do - ${firewallCmd} -p tcp -m multiport --${port}ports 11211:11220,47500:47509,47100:47109 -j ACCEPT &>/dev/null - ${firewallCmd} -p udp -m multiport --${port}ports 47400:47409 -j ACCEPT &>/dev/null - done - ${firewallCmd} -m pkttype --pkt-type multicast -j ACCEPT &>/dev/null - - systemctl restart firewalld - fi -} - -case $1 in - start) - /usr/share/#name#/bin/ignite.sh /etc/#name#/$2 & echo $! >> /var/run/#name#/#name#.$2.pid - ;; - set-firewall) - setFirewall - ;; -esac http://git-wip-us.apache.org/repos/asf/ignite/blob/ce26e3fb/packaging/rpm/SPECS/apache-ignite.spec ---------------------------------------------------------------------- diff --git a/packaging/rpm/SPECS/apache-ignite.spec b/packaging/rpm/SPECS/apache-ignite.spec deleted file mode 100644 index b900073..0000000 --- a/packaging/rpm/SPECS/apache-ignite.spec +++ /dev/null @@ -1,214 +0,0 @@ -%define __jar_repack %{nil} -%define user ignite - - -#------------------------------------------------------------------------------- -# -# Packages' descriptions -# - -Name: apache-ignite -Version: 2.4.0 -Release: 1%{?dist} -Summary: Apache Ignite In-Memory Computing Platform -Group: Development/System -License: ASL 2.0 -URL: https://ignite.apache.org/ -Source: %{name}.zip -Requires: java-1.8.0, chkconfig -Requires(pre): shadow-utils -Provides: %{name} -AutoReq: no -AutoProv: no -BuildArch: noarch -%description -Apache Ignite⢠is the in-memory computing platform composed of a strongly -consistent distributed database with powerful SQL, key-value and processing APIs - - -#------------------------------------------------------------------------------- -# -# Prepare step: unpack sources -# - -%prep -%setup -q -c -n %{name} - - -#------------------------------------------------------------------------------- -# -# Preinstall scripts -# $1 can be: -# 1 - Initial install -# 2 - Upgrade -# - - -#------------------------------------------------------------------------------- -# -# Postinstall scripts -# $1 can be: -# 1 - Initial installation -# 2 - Upgrade -# - -%post -case $1 in - 1) - # Add user for service operation - useradd -r -d %{_datadir}/%{name} -s /usr/sbin/nologin %{user} - # Change ownership for work and log directories - chown -vR %{user}:%{user} %{_sharedstatedir}/%{name} %{_var}/log/%{name} - # Install alternatives - # Commented out until ignitevisorcmd / ignitesqlline is ready to work from any user - #update-alternatives --install %{_bindir}/ignitevisorcmd ignitevisorcmd %{_datadir}/%{name}/bin/ignitevisorcmd.sh 0 - #update-alternatives --auto ignitevisorcmd - #update-alternatives --display ignitevisorcmd - #update-alternatives --install %{_bindir}/ignitesqlline ignitesqlline %{_datadir}/%{name}/bin/sqlline.sh 0 - #update-alternatives --auto ignitesqlline - #update-alternatives --display ignitesqlline - ;; - 2) - : - ;; -esac - - -#------------------------------------------------------------------------------- -# -# Pre-uninstall scripts -# $1 can be: -# 0 - Uninstallation -# 1 - Upgrade -# - -%preun -case $1 in - 0) - # Remove alternatives - # Commented out until ignitevisorcmd / ignitesqlline is ready to work from any user - #update-alternatives --remove ignitevisorcmd /usr/share/%{name}/bin/ignitevisorcmd.sh - #update-alternatives --display ignitevisorcmd || true - #update-alternatives --remove ignitesqlline /usr/share/%{name}/bin/sqlline.sh - #update-alternatives --display ignitesqlline || true - ;; - 1) - : - ;; -esac - - -#------------------------------------------------------------------------------- -# -# Post-uninstall scripts -# $1 can be: -# 0 - Uninstallation -# 1 - Upgrade -# - -%postun -case $1 in - 0) - # Remove user - userdel %{user} - # Remove service PID directory - rm -rfv /var/run/%{name} - # Remove firewalld rules if firewalld is installed and running - if [[ "$(type firewall-cmd &>/dev/null; echo $?)" -eq 0 && "$(systemctl is-active firewalld)" == "active" ]] - then - for port in s d - do - firewall-cmd --permanent --direct --remove-rule ipv4 filter INPUT 0 -p tcp -m multiport --${port}ports 11211:11220,47500:47509,47100:47109 -j ACCEPT &>/dev/null - firewall-cmd --permanent --direct --remove-rule ipv4 filter INPUT 0 -p udp -m multiport --${port}ports 47400:47409 -j ACCEPT &>/dev/null - done - firewall-cmd --permanent --direct --remove-rule ipv4 filter INPUT 0 -m pkttype --pkt-type multicast -j ACCEPT &>/dev/null - systemctl restart firewalld - fi - ;; - 1) - : - ;; -esac - - -#------------------------------------------------------------------------------- -# -# Prepare packages' layout -# - -%install -cd $(ls) - -# Create base directory structure -mkdir -p %{buildroot}%{_datadir}/%{name} -mkdir -p %{buildroot}%{_libdir}/%{name} -mkdir -p %{buildroot}%{_datadir}/doc/%{name}-%{version}/bin -mkdir -p %{buildroot}%{_var}/log/%{name} -mkdir -p %{buildroot}%{_sharedstatedir}/%{name} -mkdir -p %{buildroot}%{_sysconfdir}/systemd/system -mkdir -p %{buildroot}%{_bindir} - -# Copy nessessary files and remove *.bat files -cp -rf benchmarks bin platforms %{buildroot}%{_datadir}/%{name} -cp -rf docs/* examples %{buildroot}%{_datadir}/doc/%{name}-%{version} -mv -f %{buildroot}%{_datadir}/%{name}/bin/ignitevisorcmd.sh %{buildroot}%{_datadir}/doc/%{name}-%{version}/bin/ -find %{buildroot}%{_datadir}/%{name}/ -name *.bat -exec rm -rf {} \; - -# Copy libs to /usr/lib and map them to IGNITE_HOME -cp -rf libs/* %{buildroot}%{_libdir}/%{name} -ln -sf %{_libdir}/%{name} %{buildroot}%{_datadir}/%{name}/libs - -# Setup configuration -cp -rf config %{buildroot}%{_sysconfdir}/%{name} -ln -sf %{_sysconfdir}/%{name} %{buildroot}%{_datadir}/%{name}/config - -# Setup systemctl service -cp -rf %{_sourcedir}/name.service %{buildroot}%{_sysconfdir}/systemd/system/%{name}@.service -cp -rf %{_sourcedir}/service.sh %{buildroot}%{_datadir}/%{name}/bin/ -chmod +x %{buildroot}%{_datadir}/%{name}/bin/service.sh -for file in %{buildroot}%{_sysconfdir}/systemd/system/%{name}@.service %{buildroot}%{_datadir}/%{name}/bin/service.sh -do - sed -i -r -e "s|#name#|%{name}|g" \ - -e "s|#user#|%{user}|g" \ - ${file} -done - -# Map work and log directories -ln -sf %{_sharedstatedir}/%{name} %{buildroot}%{_datadir}/%{name}/work -ln -sf %{_var}/log/%{name} %{buildroot}%{_sharedstatedir}/%{name}/log - - -#------------------------------------------------------------------------------- -# -# Package file list check -# -%files -%dir %{_datadir}/%{name} -%dir %{_sysconfdir}/%{name} -%dir %{_sharedstatedir}/%{name} -%dir %{_var}/log/%{name} - -%{_datadir}/%{name}/benchmarks -%{_datadir}/%{name}/bin -%{_datadir}/%{name}/config -%{_datadir}/%{name}/libs -%{_datadir}/%{name}/platforms -%{_datadir}/%{name}/work -%{_libdir}/%{name} -%{_sysconfdir}/systemd/system/%{name}@.service -%{_sharedstatedir}/%{name}/log - -%config(noreplace) %{_sysconfdir}/%{name}/* - -%doc %{name}-*/README.txt -%doc %{name}-*/NOTICE -%doc %{name}-*/RELEASE_NOTES.txt -%license %{name}-*/LICENSE - -#------------------------------------------------------------------------------- -# -# Changelog -# -%changelog -* Wed Jan 17 2018 GridGain Systems <[email protected]> - 2.4.0-1 -- Initial package release http://git-wip-us.apache.org/repos/asf/ignite/blob/ce26e3fb/packaging/rpm/apache-ignite.spec ---------------------------------------------------------------------- diff --git a/packaging/rpm/apache-ignite.spec b/packaging/rpm/apache-ignite.spec new file mode 100644 index 0000000..78c112a --- /dev/null +++ b/packaging/rpm/apache-ignite.spec @@ -0,0 +1,245 @@ +%define __jar_repack %{nil} +%define user ignite +%define _libdir /usr/lib +%define _log %{_var}/log +%define _sharedstatedir /var/lib + + +#------------------------------------------------------------------------------- +# +# Packages' descriptions +# + +Name: apache-ignite +Version: 2.5.0 +Release: 1 +Summary: Apache Ignite In-Memory Computing, Database and Caching Platform +Group: Development/System +License: ASL 2.0 +URL: https://ignite.apache.org/ +Source: %{name}-fabric-%{version}-bin.zip +Requires: java-1.8.0, chkconfig +Requires(pre): shadow-utils +Provides: %{name} +AutoReq: no +AutoProv: no +BuildArch: noarch +%description +Ignite⢠is a memory-centric distributed database, caching, and processing +platform for transactional, analytical, and streaming workloads, delivering +in-memory speeds at petabyte scale + + +%prep +#------------------------------------------------------------------------------- +# +# Prepare step: unpack sources +# + +%setup -q -n %{name}-fabric-%{version}-bin + + +#%pre +#------------------------------------------------------------------------------- +# +# Preinstall scripts +# $1 can be: +# 1 - Initial install +# 2 - Upgrade +# + + +%post +#------------------------------------------------------------------------------- +# +# Postinstall scripts +# $1 can be: +# 1 - Initial installation +# 2 - Upgrade +# + +echoUpgradeMessage () { + echo "=======================================================================================================" + echo " WARNING: Updating Apache Ignite's cluster version requires updating every node before starting grid " + echo "=======================================================================================================" +} + +case $1 in + 1|configure) + # DEB postinst upgrade + if [ ! -z "${2}" ]; then + echoUpgradeMessage + fi + + # Add user for service operation + useradd -r -d %{_datadir}/%{name} -s /usr/sbin/nologin %{user} + + # Change ownership for work and log directories + chown -vR %{user}:%{user} %{_sharedstatedir}/%{name} %{_log}/%{name} + + # Install alternatives + # Commented out until ignitevisorcmd / ignitesqlline is ready to work from any user + #update-alternatives --install %{_bindir}/ignitevisorcmd ignitevisorcmd %{_datadir}/%{name}/bin/ignitevisorcmd.sh 0 + #update-alternatives --auto ignitevisorcmd + #update-alternatives --display ignitevisorcmd + #update-alternatives --install %{_bindir}/ignitesqlline ignitesqlline %{_datadir}/%{name}/bin/sqlline.sh 0 + #update-alternatives --auto ignitesqlline + #update-alternatives --display ignitesqlline + ;; + 2) + # RPM postinst upgrade + echoUpgradeMessage + ;; +esac + + +%preun +#------------------------------------------------------------------------------- +# +# Pre-uninstall scripts +# $1 can be: +# 0 - Uninstallation +# 1 - Upgrade +# + +case $1 in + 0|remove) + # Stop all nodes + systemctl stop 'apache-ignite@*' + + # Remove alternatives + # Commented out until ignitevisorcmd / ignitesqlline is ready to work from any user + #update-alternatives --remove ignitevisorcmd /usr/share/%{name}/bin/ignitevisorcmd.sh + #update-alternatives --display ignitevisorcmd || true + #update-alternatives --remove ignitesqlline /usr/share/%{name}/bin/sqlline.sh + #update-alternatives --display ignitesqlline || true + ;; + 1|upgrade) + echo "==================================================================================" + echo " WARNING: All running Apache Ignite's nodes will be stopped upon package update " + echo "==================================================================================" + systemctl stop 'apache-ignite@*' + ;; +esac + + +%postun +#------------------------------------------------------------------------------- +# +# Post-uninstall scripts +# $1 can be: +# 0 - Uninstallation +# 1 - Upgrade +# + +case $1 in + 0|remove) + # Remove user + userdel %{user} + + # Remove service PID directory + rm -rfv /var/run/%{name} + + # Remove firewalld rules if firewalld is installed and running + if [[ "$(type firewall-cmd &>/dev/null; echo $?)" -eq 0 && "$(systemctl is-active firewalld)" == "active" ]] + then + for port in s d + do + firewall-cmd --permanent --direct --remove-rule ipv4 filter INPUT 0 -p tcp -m multiport --${port}ports 11211:11220,47500:47509,47100:47109 -j ACCEPT &>/dev/null + firewall-cmd --permanent --direct --remove-rule ipv4 filter INPUT 0 -p udp -m multiport --${port}ports 47400:47409 -j ACCEPT &>/dev/null + done + firewall-cmd --permanent --direct --remove-rule ipv4 filter INPUT 0 -m pkttype --pkt-type multicast -j ACCEPT &>/dev/null + systemctl restart firewalld + fi + ;; + 1|upgrade) + : + ;; +esac + + +%install +#------------------------------------------------------------------------------- +# +# Prepare packages' layout +# + +# Create base directory structure +mkdir -p %{buildroot}%{_datadir}/%{name} +mkdir -p %{buildroot}%{_libdir}/%{name} +mkdir -p %{buildroot}%{_datadir}/doc/%{name}-%{version}/bin +mkdir -p %{buildroot}%{_log}/%{name} +mkdir -p %{buildroot}%{_sharedstatedir}/%{name} +mkdir -p %{buildroot}%{_sysconfdir}/systemd/system +mkdir -p %{buildroot}%{_bindir} + +# Copy nessessary files and remove *.bat files +cp -rf benchmarks bin platforms %{buildroot}%{_datadir}/%{name} +cp -rf docs/* examples %{buildroot}%{_datadir}/doc/%{name}-%{version} +mv -f %{buildroot}%{_datadir}/%{name}/bin/ignitevisorcmd.sh %{buildroot}%{_datadir}/doc/%{name}-%{version}/bin/ +find %{buildroot}%{_datadir}/%{name}/ -name *.bat -exec rm -rf {} \; + +# Copy libs to /usr/lib and map them to IGNITE_HOME +cp -rf libs/* %{buildroot}%{_libdir}/%{name} +ln -sf %{_libdir}/%{name} %{buildroot}%{_datadir}/%{name}/libs + +# Setup configuration +cp -rf config %{buildroot}%{_sysconfdir}/%{name} +ln -sf %{_sysconfdir}/%{name} %{buildroot}%{_datadir}/%{name}/config + +# Setup systemctl service +cp -rf %{_sourcedir}/name.service %{buildroot}%{_sysconfdir}/systemd/system/%{name}@.service +cp -rf %{_sourcedir}/service.sh %{buildroot}%{_datadir}/%{name}/bin/ +chmod +x %{buildroot}%{_datadir}/%{name}/bin/service.sh +for file in %{buildroot}%{_sysconfdir}/systemd/system/%{name}@.service %{buildroot}%{_datadir}/%{name}/bin/service.sh +do + sed -i -r -e "s|#name#|%{name}|g" \ + -e "s|#user#|%{user}|g" \ + ${file} +done + +# Map work and log directories +ln -sf %{_sharedstatedir}/%{name} %{buildroot}%{_datadir}/%{name}/work +ln -sf %{_log}/%{name} %{buildroot}%{_sharedstatedir}/%{name}/log + + +%files +#------------------------------------------------------------------------------- +# +# Package file list check +# + +%dir %{_datadir}/%{name} +%dir %{_sysconfdir}/%{name} +%dir %{_sharedstatedir}/%{name} +%dir %{_log}/%{name} + +%{_datadir}/%{name}/benchmarks +%{_datadir}/%{name}/bin +%{_datadir}/%{name}/config +%{_datadir}/%{name}/libs +%{_datadir}/%{name}/platforms +%{_datadir}/%{name}/work +%{_libdir}/%{name} +%{_sysconfdir}/systemd/system/%{name}@.service +%{_sharedstatedir}/%{name}/log + +%config(noreplace) %{_sysconfdir}/%{name}/* + +%doc README.txt +%doc NOTICE +%doc RELEASE_NOTES.txt +%license LICENSE + + +%changelog +#------------------------------------------------------------------------------- +# +# Changelog +# + +* Tue Apr 17 2018 Peter Ivanov <[email protected]> - 2.5.0-1 +- Updated Apache Ignite to version 2.5.0 + +* Wed Jan 17 2018 Peter Ivanov <[email protected]> - 2.4.0-1 +- Initial package release http://git-wip-us.apache.org/repos/asf/ignite/blob/ce26e3fb/packaging/rpm/name.service ---------------------------------------------------------------------- diff --git a/packaging/rpm/name.service b/packaging/rpm/name.service new file mode 100644 index 0000000..0929f2c --- /dev/null +++ b/packaging/rpm/name.service @@ -0,0 +1,17 @@ +[Unit] +Description=Apache Ignite In-Memory Computing Platform Service +After=syslog.target network.target + +[Service] +Type=forking +User=#user# +WorkingDirectory=/usr/share/#name#/work +PermissionsStartOnly=true +ExecStartPre=-/usr/bin/mkdir /var/run/#name# +ExecStartPre=-/usr/bin/chown #user#:#user# /var/run/#name# +ExecStartPre=-/usr/bin/env bash /usr/share/#name#/bin/service.sh set-firewall +ExecStart=/usr/share/#name#/bin/service.sh start %i +PIDFile=/var/run/#name#/%i.pid + +[Install] +WantedBy=multi-user.target http://git-wip-us.apache.org/repos/asf/ignite/blob/ce26e3fb/packaging/rpm/service.sh ---------------------------------------------------------------------- diff --git a/packaging/rpm/service.sh b/packaging/rpm/service.sh new file mode 100644 index 0000000..454478d --- /dev/null +++ b/packaging/rpm/service.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +firewallCmd="firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0" + +# Define function to check whether firewalld is present and started and apply firewall rules for grid nodes +setFirewall () +{ + if [[ "$(type firewall-cmd &>/dev/null; echo $?)" -eq 0 && "$(systemctl is-active firewalld)" == "active" ]] + then + for port in s d + do + ${firewallCmd} -p tcp -m multiport --${port}ports 11211:11220,47500:47509,47100:47109 -j ACCEPT &>/dev/null + ${firewallCmd} -p udp -m multiport --${port}ports 47400:47409 -j ACCEPT &>/dev/null + done + ${firewallCmd} -m pkttype --pkt-type multicast -j ACCEPT &>/dev/null + + systemctl restart firewalld + fi +} + +case $1 in + start) + /usr/share/#name#/bin/ignite.sh /etc/#name#/$2 & echo $! >> /var/run/#name#/$2.pid + ;; + set-firewall) + setFirewall + ;; +esac http://git-wip-us.apache.org/repos/asf/ignite/blob/ce26e3fb/parent/pom.xml ---------------------------------------------------------------------- diff --git a/parent/pom.xml b/parent/pom.xml index 3decc16..490c531 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -935,10 +935,8 @@ <exclude>**/frontend/ignite_modules/**</exclude> <exclude>**/frontend/ignite_modules_temp/**</exclude> <exclude>**/frontend/node_modules/**</exclude> - <!--RPM packaging, IGNITE-7107--> - <exclude>**/packaging/rpm/SOURCES/name.service</exclude> - <exclude>**/packaging/rpm/SOURCES/service.sh</exclude> - <exclude>**/packaging/rpm/SPECS/apache-ignite.spec</exclude> + <!--Packaging --> + <exclude>packaging/**</exclude> </excludes> </configuration> </execution>
