Skip to content

Commit 8f0d2cc

Browse files
committed
Restructure RPM Build process
Signed-off-by: Utkarsh Srivastava <[email protected]> add support for s3select config Signed-off-by: Utkarsh Srivastava <[email protected]> add support for srpm only config Signed-off-by: Utkarsh Srivastava <[email protected]> replace hardcoded paths with RPM macros Signed-off-by: Utkarsh Srivastava <[email protected]> final cleanup Signed-off-by: Utkarsh Srivastava <[email protected]> avoid symlinking on host machine Signed-off-by: Utkarsh Srivastava <[email protected]> address PR comments Co-authored-by: Boris Ranto <[email protected]> Signed-off-by: Utkarsh Srivastava <[email protected]> address PR comments Signed-off-by: Utkarsh Srivastava <[email protected]> address PR comments Signed-off-by: Utkarsh Srivastava <[email protected]> revert nasm installation to curl based Signed-off-by: Utkarsh Srivastava <[email protected]> fix RPM cleanup error Signed-off-by: Utkarsh Srivastava <[email protected]>
1 parent 8e96a09 commit 8f0d2cc

File tree

5 files changed

+118
-50
lines changed

5 files changed

+118
-50
lines changed

Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,10 +165,10 @@ nbdev:
165165
@echo ""
166166
.PHONY: nbdev
167167

168-
rpm: base
168+
rpm: builder
169169
echo "\033[1;34mStarting RPM build for $${CONTAINER_PLATFORM}.\033[0m"
170170
mkdir -p build/rpm
171-
$(CONTAINER_ENGINE) build $(CONTAINER_PLATFORM_FLAG) $(CPUSET) -f src/deploy/RPM_build/RPM.Dockerfile $(CACHE_FLAG) -t $(NOOBAA_RPM_TAG) --build-arg GIT_COMMIT=$(GIT_COMMIT) . $(REDIRECT_STDOUT)
171+
$(CONTAINER_ENGINE) build $(CONTAINER_PLATFORM_FLAG) $(CPUSET) -f src/deploy/RPM_build/RPM.Dockerfile $(CACHE_FLAG) -t $(NOOBAA_RPM_TAG) --build-arg CENTOS_VER=$(CENTOS_VER) --build-arg BUILD_S3SELECT=$(BUILD_S3SELECT) --build-arg BUILD_S3SELECT_PARQUET=$(BUILD_S3SELECT_PARQUET) --build-arg SRPM_ONLY=$(SRPM_ONLY) --build-arg GIT_COMMIT=$(GIT_COMMIT) . $(REDIRECT_STDOUT)
172172
echo "\033[1;32mImage \"$(NOOBAA_RPM_TAG)\" is ready.\033[0m"
173173
echo "Generating RPM..."
174174
$(CONTAINER_ENGINE) run --rm -v $(PWD)/build/rpm:/export:z -t $(NOOBAA_RPM_TAG)

src/deploy/RPM_build/RPM.Dockerfile

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1-
FROM noobaa-base
1+
FROM noobaa-builder
22
ARG TARGETARCH
3+
4+
ARG CENTOS_VER=9
35
ARG BUILD_S3SELECT=0
6+
ARG BUILD_S3SELECT_PARQUET=0
47

58
RUN mkdir -p /etc/logrotate.d/noobaa/
69
RUN mkdir -p /etc/noobaa.conf.d/
@@ -9,8 +12,14 @@ COPY ./src/agent ./src/agent
912
COPY ./src/api ./src/api
1013
COPY ./src/cmd ./src/cmd
1114
COPY ./src/deploy/spectrum_archive ./src/deploy/spectrum_archive
15+
COPY ./src/deploy/noobaa_nsfs.service ./src/deploy/
16+
COPY ./src/deploy/nsfs_env.env ./src/deploy/
17+
COPY ./src/deploy/NVA_build/clone_submodule.sh ./src/deploy/NVA_build/
18+
COPY ./src/deploy/NVA_build/clone_s3select_submodules.sh ./src/deploy/NVA_build/
19+
COPY ./src/deploy/NVA_build/install_nodejs.sh ./src/deploy/NVA_build/
1220
COPY ./src/endpoint ./src/endpoint
1321
COPY ./src/hosted_agents ./src/hosted_agents
22+
COPY ./src/native ./src/native/
1423
COPY ./src/rpc ./src/rpc
1524
COPY ./src/s3 ./src/s3
1625
COPY ./src/sdk ./src/sdk
@@ -22,17 +31,25 @@ COPY ./config.js ./
2231
COPY ./platform_restrictions.json ./
2332
COPY ./Makefile ./
2433
COPY ./package*.json ./
34+
COPY ./binding.gyp .
2535
COPY ./src/deploy/standalone/noobaa_rsyslog.conf ./src/deploy/standalone/noobaa_rsyslog.conf
2636
COPY ./src/deploy/standalone/noobaa_syslog.conf ./src/deploy/standalone/noobaa_syslog.conf
2737
COPY ./src/deploy/standalone/logrotate_noobaa.conf ./src/deploy/standalone/logrotate_noobaa.conf
2838
COPY ./src/manage_nsfs ./src/manage_nsfs
2939

3040
WORKDIR /build
3141

32-
RUN tar -czvf noobaa-core.tar.gz /noobaa
33-
3442
COPY ./src/deploy/RPM_build/* ./
3543
COPY ./package.json ./
44+
RUN bash ./preparesrc.sh /noobaa
3645
RUN chmod +x ./packagerpm.sh
3746

47+
# These envs are used by the packagerpm.sh either directly or by
48+
# performing subsitutions in the noobaa.spec file
49+
ARG SRPM_ONLY=false
50+
51+
ENV BUILD_S3SELECT=${BUILD_S3SELECT}
52+
ENV BUILD_S3SELECT_PARQUET=${BUILD_S3SELECT_PARQUET}
53+
ENV CENTOS_VER=${CENTOS_VER}
54+
ENV SRPM_ONLY=${SRPM_ONLY}
3855
CMD ./packagerpm.sh /export /build

src/deploy/RPM_build/noobaa.spec

Lines changed: 50 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,88 @@
1+
# Disable debuginfo -- it does not work well with nodejs apps
2+
%global debug_package %{nil}
3+
# This speeds up the build a lot and it is not really required
4+
%global __os_install_post %{nil}
5+
16
%define revision null
27
%define noobaaver null
38
%define nodever null
49
%define releasedate null
510
%define changelogdata null
11+
%define BUILD_S3SELECT null
12+
%define BUILD_S3SELECT_PARQUET null
13+
%define CENTOS_VER null
14+
%define _build_id_links none
615

716
%define noobaatar %{name}-%{version}-%{revision}.tar.gz
8-
%define nodetar node-%{nodever}.tar.xz
917
%define buildroot %{_tmppath}/%{name}-%{version}-%{release}
1018

11-
Name: noobaa-core
12-
Version: %{noobaaver}
13-
Release: %{revision}%{?dist}
14-
Summary: NooBaa RPM
19+
Name: noobaa-core
20+
Version: %{noobaaver}
21+
Release: %{revision}%{?dist}
22+
Summary: NooBaa RPM
1523

16-
License: Apache-2.0
17-
URL: https://www.noobaa.io/
18-
Source0: %{noobaatar}
19-
Source1: %{nodetar}
24+
License: Apache-2.0
25+
URL: https://www.noobaa.io/
26+
Source0: %{noobaatar}
2027

21-
BuildRequires: systemd
28+
BuildRequires: systemd
29+
BuildRequires: python3
30+
BuildRequires: make
31+
BuildRequires: gcc-c++
32+
BuildRequires: boost-devel
2233

23-
Recommends: jemalloc
24-
25-
%global __os_install_post %{nil}
34+
Recommends: jemalloc
2635

2736
%global __requires_exclude ^/usr/bin/python$
2837

2938
%description
3039
NooBaa is a data service for cloud environments, providing S3 object-store interface with flexible tiering, mirroring, and spread placement policies, over any storage resource that allows GET/PUT including S3, GCS, Azure Blob, Filesystems, etc.
3140

3241
%prep
33-
mkdir noobaa-core-%{version}-%{revision}
34-
mkdir node-%{nodever}
35-
tar -xzf %{SOURCE0} -C noobaa-core-%{version}-%{revision}/
36-
tar -xJf %{SOURCE1} -C node-%{nodever}/
42+
%setup -n noobaa -q
43+
44+
%build
45+
NODEJS_VERSION="%{nodever}"
46+
SKIP_NODE_INSTALL=1 source src/deploy/NVA_build/install_nodejs.sh $NODEJS_VERSION
47+
48+
mkdir -p ../node/
49+
50+
nodepath=$(download_node)
51+
tar -xJf ${nodepath} -C ../node/
3752

38-
%clean
39-
[ ${RPM_BUILD_ROOT} != "/" ] && rm -rf ${RPM_BUILD_ROOT}
53+
PATH=$PATH:%{_builddir}/node/node-v$NODEJS_VERSION-linux-$(get_arch)/bin
54+
55+
npm install --omit=dev && npm cache clean --force
56+
57+
./src/deploy/NVA_build/clone_s3select_submodules.sh
58+
59+
if [[ "%{CENTOS_VER}" = "8" ]]
60+
then
61+
sed -i 's/\/lib64\/libboost_thread.so.1.75.0/\/lib64\/libboost_thread.so.1.66.0/g' ./src/native/s3select/s3select.gyp
62+
echo "Using libboost 1.66 for S3 Select"
63+
fi
64+
65+
GYP_DEFINES="BUILD_S3SELECT=%{BUILD_S3SELECT} BUILD_S3SELECT_PARQUET=%{BUILD_S3SELECT_PARQUET}" npm run build
4066

4167
%install
4268
rm -rf $RPM_BUILD_ROOT
43-
mkdir -p $RPM_BUILD_ROOT/usr/local/
4469

45-
cp -R %{_builddir}/%{name}-%{version}-%{revision}/noobaa $RPM_BUILD_ROOT/usr/local/noobaa-core
46-
cp -R %{_builddir}/node-%{nodever}/* $RPM_BUILD_ROOT/usr/local/noobaa-core/node
70+
mkdir -p $RPM_BUILD_ROOT/usr/local/
71+
cp -R %{_builddir}/noobaa $RPM_BUILD_ROOT/usr/local/noobaa-core
72+
mv %{_builddir}/node/* $RPM_BUILD_ROOT/usr/local/noobaa-core/node
4773

4874
mkdir -p $RPM_BUILD_ROOT/usr/local/noobaa-core/bin
4975
ln -s /usr/local/noobaa-core/node/bin/node $RPM_BUILD_ROOT/usr/local/noobaa-core/bin/node
5076
ln -s /usr/local/noobaa-core/node/bin/npm $RPM_BUILD_ROOT/usr/local/noobaa-core/bin/npm
5177
ln -s /usr/local/noobaa-core/node/bin/npx $RPM_BUILD_ROOT/usr/local/noobaa-core/bin/npx
5278

5379
mkdir -p $RPM_BUILD_ROOT%{_unitdir}/
54-
cp -R %{_builddir}/%{name}-%{version}-%{revision}/noobaa/src/deploy/noobaa_nsfs.service $RPM_BUILD_ROOT%{_unitdir}/noobaa_nsfs.service
80+
mv $RPM_BUILD_ROOT/usr/local/noobaa-core/src/deploy/noobaa_nsfs.service $RPM_BUILD_ROOT%{_unitdir}/noobaa_nsfs.service
5581
ln -s /usr/local/noobaa-core/src/deploy/nsfs_env.env $RPM_BUILD_ROOT/usr/local/noobaa-core/nsfs_env.env
5682
mkdir -p $RPM_BUILD_ROOT/etc/noobaa.conf.d/
5783

5884
mkdir -p $RPM_BUILD_ROOT/etc/rsyslog.d/
59-
cp -R $RPM_BUILD_ROOT/usr/local/noobaa-core/src/deploy/standalone/noobaa_syslog.conf $RPM_BUILD_ROOT/etc/rsyslog.d/noobaa_syslog.conf
85+
mv $RPM_BUILD_ROOT/usr/local/noobaa-core/src/deploy/standalone/noobaa_syslog.conf $RPM_BUILD_ROOT/etc/rsyslog.d/noobaa_syslog.conf
6086

6187
mkdir -p $RPM_BUILD_ROOT/etc/logrotate.d/noobaa
6288
ln -s /usr/local/noobaa-core/src/deploy/standalone/logrotate_noobaa.conf $RPM_BUILD_ROOT/etc/logrotate.d/noobaa/logrotate_noobaa.conf

src/deploy/RPM_build/packagerpm.sh

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ NODE_PATH="${NODE_PATH:-/usr/local/node}"
1010

1111
noobaaver="$(npm pkg get version | tr -d '"')"
1212
releasedate=$(date '+%a %b %d %Y')
13-
revision="$(date -u '+%Y%m%d')"
1413
nodever=$(node --version | tr -d 'v')
14+
revision="$(date -u '+%Y%m%d')"
1515
changelogdata="Initial release of NooBaa ${noobaaver}"
1616
ARCHITECTURE=$(uname -m)
1717

@@ -33,20 +33,6 @@ function move_builds() {
3333
cp ${TAR_DIR}/noobaa-core-${noobaaver}-${revision}.tar.gz ~/rpmbuild/SOURCES/
3434
}
3535

36-
function get_node_tar() {
37-
local arch=$(get_arch)
38-
local filename="node-v${nodever}-linux-${arch}.tar.xz"
39-
40-
pushd ~/rpmbuild/SOURCES/
41-
if [ -f ${NODE_PATH}/${filename} ]
42-
then
43-
mv ${NODE_PATH}/${filename} node-${nodever}.tar.xz
44-
else
45-
local path=$(NODEJS_VERSION=${nodever} download_node)
46-
mv ${path} node-${nodever}.tar.xz
47-
fi
48-
popd
49-
}
5036

5137
function generate_spec_from_template() {
5238
while IFS= read -r line; do
@@ -73,9 +59,6 @@ mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
7359
# Move the binary into the SOURCES directory
7460
move_builds
7561

76-
# Download nodejs tarball to SOURCES directory
77-
get_node_tar
78-
7962
# Set the changelog
8063
set_changelog
8164

@@ -89,8 +72,14 @@ generate_spec_from_template
8972
mv ${OUTPUT_FILE} ~/rpmbuild/SPECS/
9073

9174
# Build the RPM package
92-
rpmbuild -ba ~/rpmbuild/SPECS/noobaa.final.spec
75+
if [[ "$SRPM_ONLY" = "true" ]]; then
76+
rpmbuild -bs ~/rpmbuild/SPECS/noobaa.final.spec
77+
else
78+
rpmbuild -ba ~/rpmbuild/SPECS/noobaa.final.spec
79+
80+
# Move the RPM package to the target directory
81+
mv ~/rpmbuild/RPMS/${ARCHITECTURE}/noobaa-core-${noobaaver}-${revision}.*.rpm ${TARGET_DIR}
82+
fi
9383

94-
# Move the RPM and SRPM package to the target directory
95-
mv ~/rpmbuild/RPMS/${ARCHITECTURE}/noobaa-core-${noobaaver}-${revision}.*.rpm ${TARGET_DIR}
84+
# Move the SRPM package to the target directory
9685
mv ~/rpmbuild/SRPMS/noobaa-core-${noobaaver}-${revision}.*.rpm ${TARGET_DIR}

src/deploy/RPM_build/preparesrc.sh

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#!/bin/bash
2+
3+
set -eou pipefail
4+
set -x
5+
6+
TARGET="noobaa-core.tar.gz"
7+
8+
SRC_DIR=$(realpath "${1:-$(pwd)}")
9+
10+
function prepare_excludes() {
11+
local exclude_flag_gitignore="$(grep -v '^#' $SRC_DIR/.gitignore | grep '[^[:blank:]]' | xargs -I{} printf '%s=%s ' '--exclude' '{}')"
12+
local exclude_flag_local="--exclude ./build --exclude ./images --exclude ./tools --exclude ./submodules --exclude .github --exclude .travis --exclude .jenkins"
13+
14+
echo "${exclude_flag_gitignore} ${exclude_flag_local}"
15+
}
16+
17+
function archive() {
18+
local tar="$1"
19+
local exclude_flag="$(prepare_excludes)"
20+
21+
# No quotes here is intentional
22+
tar $exclude_flag --exclude-vcs -czvf "$tar" "$SRC_DIR"
23+
}
24+
25+
echo "Using source: $SRC_DIR"
26+
if [ "$SRC_DIR" = "$(pwd)" ]; then
27+
pushd ..
28+
tpath="$TMPDIR$TARGET"
29+
archive "$tpath"
30+
popd
31+
32+
mv "$tpath" .
33+
else
34+
tpath="./$TARGET"
35+
archive "$tpath"
36+
fi

0 commit comments

Comments
 (0)