2 # Copyright (C) The Arvados Authors. All rights reserved.
4 # SPDX-License-Identifier: AGPL-3.0
6 . "$(dirname "$(readlink -f "$0")")"/run-library.sh || exit 1
8 read -rd "\000" helpmessage <<EOF
9 $(basename "$0"): Build Arvados packages
12 WORKSPACE=/path/to/arvados $(basename "$0") [options]
16 --build-bundle-packages (default: false)
17 Build api server and workbench packages with vendor/bundle included
19 Output debug information (default: false)
21 Distribution to build packages for (default: debian10)
22 --only-build <package>
23 Build only a specific package (or $ONLY_BUILD from environment)
25 Build a specific architecture (or $ARCH from environment, defaults to native architecture)
27 Build even if the package exists upstream or if it has already been
30 Build command to execute (defaults to the run command defined in the
33 WORKSPACE=path Path to the Arvados source tree to build packages from
37 # Begin of user configuration
39 # set to --no-cache-dir to disable pip caching
42 MAINTAINER="Arvados Package Maintainers <packaging@arvados.org>"
43 VENDOR="The Arvados Project"
45 # End of user configuration
47 DEBUG=${ARVADOS_DEBUG:-0}
48 FORCE_BUILD=${FORCE_BUILD:-0}
53 PARSEDOPTS=$(getopt --name "$0" --longoptions \
54 help,build-bundle-packages,debug,target:,only-build:,arch:,force-build \
60 eval set -- "$PARSEDOPTS"
61 while [ $# -gt 0 ]; do
64 echo >&2 "$helpmessage"
72 ONLY_BUILD="$2"; shift
88 echo >&2 "$0: unrecognized argument '$2'. Try: $0 --help"
96 if [[ "$COMMAND" != "" ]]; then
97 COMMAND="/usr/local/rvm/bin/rvm-exec default bash /jenkins/$COMMAND --target $TARGET"
100 STDOUT_IF_DEBUG=/dev/null
101 STDERR_IF_DEBUG=/dev/null
102 DASHQ_UNLESS_DEBUG=-q
103 if [[ "$DEBUG" != 0 ]]; then
104 STDOUT_IF_DEBUG=/dev/stdout
105 STDERR_IF_DEBUG=/dev/stderr
109 declare -a PYTHON3_BACKPORTS
111 PYTHON3_VERSION=$(python3 -c 'import sys; print("{v.major}.{v.minor}".format(v=sys.version_info))')
113 ## These defaults are suitable for any Debian-based distribution.
114 # You can customize them as needed in distro sections below.
115 PYTHON3_PACKAGE=python$PYTHON3_VERSION
116 PYTHON3_PKG_PREFIX=python3
118 PYTHON3_INSTALL_LIB=lib/python$PYTHON3_VERSION/dist-packages
119 ## End Debian Python defaults.
130 PYTHON3_PACKAGE=$(rpm -qf "$(which python"$PYTHON3_VERSION")" --queryformat '%{NAME}\n')
131 PYTHON3_PKG_PREFIX=$PYTHON3_PACKAGE
133 PYTHON3_INSTALL_LIB=lib/python$PYTHON3_VERSION/site-packages
134 export PYCURL_SSL_LIBRARY=nss
137 echo -e "$0: Unknown target '$TARGET'.\n" >&2
143 if [[ -z "$WORKSPACE" ]]; then
144 echo >&2 "$helpmessage"
146 echo >&2 "Error: WORKSPACE environment variable not set"
152 fpm --version >/dev/null 2>&1
154 if [[ $? -ne 0 ]]; then
155 echo >&2 "$helpmessage"
157 echo >&2 "Error: fpm not found"
162 RUN_BUILD_PACKAGES_PATH="$(dirname "$0")"
163 RUN_BUILD_PACKAGES_PATH="$(cd "$RUN_BUILD_PACKAGES_PATH" && pwd)" # absolutized and normalized
164 if [ -z "$RUN_BUILD_PACKAGES_PATH" ] ; then
165 # error; for some reason, the path is not accessible
166 # to the script (e.g. permissions re-evaled after suid)
170 debug_echo "$0 is running from $RUN_BUILD_PACKAGES_PATH"
171 debug_echo "Workspace is $WORKSPACE"
173 if [[ -f /etc/profile.d/rvm.sh ]]; then
174 source /etc/profile.d/rvm.sh
175 GEM="rvm-exec default gem"
180 # Make all files world-readable -- jenkins runs with umask 027, and has checked
181 # out our git tree here
182 chmod o+r "$WORKSPACE" -R
184 # More cleanup - make sure all executables that we'll package are 755
185 cd "$WORKSPACE" || exit 1
186 find . -type d -name 'bin' -print0 |xargs -0 -I {} find {} -type f -print0 |xargs -0 -I {} chmod 755 {}
188 # Now fix our umask to something better suited to building and publishing
192 debug_echo "umask is" "$(umask)"
194 if [[ ! -d "$WORKSPACE/packages/$TARGET" ]]; then
195 mkdir -p "$WORKSPACE/packages/$TARGET"
196 chown --reference="$WORKSPACE" "$WORKSPACE/packages/$TARGET"
200 debug_echo -e "\nPerl packages\n"
202 handle_libarvados_perl
205 debug_echo -e "\nRuby gems\n"
207 FPM_GEM_PREFIX=$($GEM environment gemdir)
209 cd "$WORKSPACE/sdk/ruby" || exit 1
210 handle_ruby_gem arvados
212 cd "$WORKSPACE/sdk/cli" || exit 1
213 handle_ruby_gem arvados-cli
215 cd "$WORKSPACE/services/login-sync" || exit 1
216 handle_ruby_gem arvados-login-sync
222 debug_echo -e "\nGo packages\n"
226 package_go_binary cmd/arvados-client arvados-client "$FORMAT" "$ARCH" \
227 "Arvados command line tool (beta)"
228 package_go_binary cmd/arvados-server arvados-server "$FORMAT" "$ARCH" \
229 "Arvados server daemons"
230 package_go_binary cmd/arvados-server arvados-controller "$FORMAT" "$ARCH" \
231 "Arvados cluster controller daemon"
232 package_go_binary cmd/arvados-server arvados-dispatch-cloud "$FORMAT" "$ARCH" \
233 "Arvados cluster cloud dispatch"
234 package_go_binary cmd/arvados-server arvados-dispatch-lsf "$FORMAT" "$ARCH" \
235 "Dispatch Arvados containers to an LSF cluster"
236 package_go_binary services/arv-git-httpd arvados-git-httpd "$FORMAT" "$ARCH" \
237 "Provide authenticated http access to Arvados-hosted git repositories"
238 package_go_binary services/crunch-dispatch-local crunch-dispatch-local "$FORMAT" "$ARCH" \
239 "Dispatch Crunch containers on the local system"
240 package_go_binary services/crunch-dispatch-slurm crunch-dispatch-slurm "$FORMAT" "$ARCH" \
241 "Dispatch Crunch containers to a SLURM cluster"
242 package_go_binary cmd/arvados-server crunch-run "$FORMAT" "$ARCH" \
243 "Supervise a single Crunch container"
244 package_go_binary services/crunchstat crunchstat "$FORMAT" "$ARCH" \
245 "Gather cpu/memory/network statistics of running Crunch jobs"
246 package_go_binary services/health arvados-health "$FORMAT" "$ARCH" \
247 "Check health of all Arvados cluster services"
248 package_go_binary services/keep-balance keep-balance "$FORMAT" "$ARCH" \
249 "Rebalance and garbage-collect data blocks stored in Arvados Keep"
250 package_go_binary services/keepproxy keepproxy "$FORMAT" "$ARCH" \
251 "Make a Keep cluster accessible to clients that are not on the LAN"
252 package_go_binary cmd/arvados-server keepstore "$FORMAT" "$ARCH" \
253 "Keep storage daemon, accessible to clients on the LAN"
254 package_go_binary services/keep-web keep-web "$FORMAT" "$ARCH" \
255 "Static web hosting service for user data stored in Arvados Keep"
256 package_go_binary cmd/arvados-server arvados-ws "$FORMAT" "$ARCH" \
257 "Arvados Websocket server"
258 package_go_binary tools/sync-groups arvados-sync-groups "$FORMAT" "$ARCH" \
259 "Synchronize remote groups into Arvados from an external source"
260 package_go_binary tools/keep-block-check keep-block-check "$FORMAT" "$ARCH" \
261 "Verify that all data from one set of Keep servers to another was copied"
262 package_go_binary tools/keep-rsync keep-rsync "$FORMAT" "$ARCH" \
263 "Copy all data from one set of Keep servers to another"
264 package_go_binary tools/keep-exercise keep-exercise "$FORMAT" "$ARCH" \
265 "Performance testing tool for Arvados Keep"
266 package_go_so lib/pam pam_arvados.so libpam-arvados-go "$FORMAT" "$ARCH" \
267 "Arvados PAM authentication module"
270 debug_echo -e "\nPython packages\n"
272 # The Python SDK - Python3 package
273 fpm_build_virtualenv "arvados-python-client" "sdk/python" "$FORMAT" "$ARCH"
275 # Arvados cwl runner - Python3 package
276 fpm_build_virtualenv "arvados-cwl-runner" "sdk/cwl" "$FORMAT" "$ARCH"
278 # The FUSE driver - Python3 package
279 fpm_build_virtualenv "arvados-fuse" "services/fuse" "$FORMAT" "$ARCH"
281 # The Arvados crunchstat-summary tool
282 fpm_build_virtualenv "crunchstat-summary" "tools/crunchstat-summary" "$FORMAT" "$ARCH"
284 # The Docker image cleaner
285 fpm_build_virtualenv "arvados-docker-cleaner" "services/dockercleaner" "$FORMAT" "$ARCH"
287 # The Arvados user activity tool
288 fpm_build_virtualenv "arvados-user-activity" "tools/user-activity" "$FORMAT" "$ARCH"
290 # The python->python3 metapackages
291 build_metapackage "arvados-fuse" "services/fuse"
292 build_metapackage "arvados-python-client" "services/fuse"
293 build_metapackage "arvados-cwl-runner" "sdk/cwl"
294 build_metapackage "crunchstat-summary" "tools/crunchstat-summary"
295 build_metapackage "arvados-docker-cleaner" "services/dockercleaner"
296 build_metapackage "arvados-user-activity" "tools/user-activity"
298 # The cwltest package, which lives out of tree
299 handle_cwltest "$FORMAT" "$ARCH"
302 debug_echo -e "\nRails packages\n"
304 # The rails api server package
305 handle_api_server "$ARCH"
306 # The rails workbench package
307 handle_workbench "$ARCH"
309 # clean up temporary GOPATH