From 0b97b30cd6cdb4c2f2e9850c639910fbc823f147 Mon Sep 17 00:00:00 2001 From: Wilfried Goesgens Date: Thu, 5 Jan 2017 16:06:55 +0100 Subject: [PATCH 1/2] add debian package with debug symbols --- Installation/Jenkins/build.sh | 14 +++ Installation/debian/dbg_packagedesc.txt | 10 +++ arangod/dbg.cmake | 17 ++++ arangosh/dbg.cmake | 63 +++++++++++++ cmake/ArangoDBInstall.cmake | 7 +- cmake/packages/dbg/deb.txt | 115 ++++++++++++++++++++++++ cmake/packages/deb.cmake | 17 +++- 7 files changed, 239 insertions(+), 4 deletions(-) create mode 100644 Installation/debian/dbg_packagedesc.txt create mode 100644 arangod/dbg.cmake create mode 100644 arangosh/dbg.cmake create mode 100644 cmake/packages/dbg/deb.txt diff --git a/Installation/Jenkins/build.sh b/Installation/Jenkins/build.sh index 8c2bf9d9e4..0fd95da251 100755 --- a/Installation/Jenkins/build.sh +++ b/Installation/Jenkins/build.sh @@ -406,6 +406,7 @@ elif [ "${XCGCC}" = 1 ]; then export LD=$TOOL_PREFIX-g++ export LINK=$TOOL_PREFIX-g++ export STRIP=$TOOL_PREFIX-strip + export OBJCOPY=$TOOL_PREFIX-objcopy # we need ARM LD: GOLD=0; @@ -468,6 +469,18 @@ if [ -z "${MSVC}" ]; then if test -n "${STRIP}"; then CONFIGURE_OPTIONS="${CONFIGURE_OPTIONS} -DCMAKE_STRIP=${STRIP}" fi + + if test -z "${OBJCOPY}"; then + OBJCOPY=/usr/bin/objcopy + if [ ! -f ${OBJCOPY} ] ; then + OBJCOPY=`which objcopy` + fi + export OBJCOPY + fi + if test -n "${OBJCOPY}"; then + CONFIGURE_OPTIONS="${CONFIGURE_OPTIONS} -DCMAKE_OBJCOPY=${OBJCOPY}" + fi + fi CONFIGURE_OPTIONS="${CONFIGURE_OPTIONS} ${MAINTAINER_MODE}" @@ -535,6 +548,7 @@ DST=`pwd` SOURCE_DIR=`compute_relative ${DST}/ ${SRC}/` if [ ! -f Makefile -o ! -f CMakeCache.txt ]; then + rm -rf CMakeFiles CFLAGS="${CFLAGS}" CXXFLAGS="${CXXFLAGS}" LDFLAGS="${LDFLAGS}" LIBS="${LIBS}" \ cmake ${SOURCE_DIR} ${CONFIGURE_OPTIONS} -G "${GENERATOR}" || exit 1 fi diff --git a/Installation/debian/dbg_packagedesc.txt b/Installation/debian/dbg_packagedesc.txt new file mode 100644 index 0000000000..9466222742 --- /dev/null +++ b/Installation/debian/dbg_packagedesc.txt @@ -0,0 +1,10 @@ +stand-alone shell + A distributed free and open-source database with a flexible data model for documents, + graphs, and key-values. Build high performance applications using a convenient + SQL-like query language or JavaScript extensions. + Debug symbol file for development. + . + Copyright: 2014-2016 by ArangoDB GmbH + Copyright: 2012-2013 by triAGENS GmbH + ArangoDB Software + www.arangodb.com diff --git a/arangod/dbg.cmake b/arangod/dbg.cmake new file mode 100644 index 0000000000..df3abc27a2 --- /dev/null +++ b/arangod/dbg.cmake @@ -0,0 +1,17 @@ +# -*- mode: CMAKE; -*- +# these are the install targets for the client package. +# we can't use RUNTIME DESTINATION here. + +set(STRIP_DIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_X}/strip") +execute_process(COMMAND mkdir -p ${STRIP_DIR}) + +set(FILE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_X}/${BIN_ARANGOBENCH}${CMAKE_EXECUTABLE_SUFFIX}) +set(STRIP_FILE ${STRIP_DIR}/${BIN_ARANGOD}${CMAKE_EXECUTABLE_SUFFIX}) +if (NOT MSVC AND CMAKE_STRIP) + execute_process(COMMAND "rm" -f ${STRIP_FILE}) + execute_process(COMMAND ${CMAKE_OBJCOPY} --only-keep-debug ${FILE} ${STRIP_FILE}) + set(FILE ${STRIP_FILE}) +endif() +install( + PROGRAMS ${FILE} + DESTINATION ${CMAKE_INSTALL_DEBINFO_DIR}/${CMAKE_INSTALL_BINDIR}) diff --git a/arangosh/dbg.cmake b/arangosh/dbg.cmake new file mode 100644 index 0000000000..8826246f37 --- /dev/null +++ b/arangosh/dbg.cmake @@ -0,0 +1,63 @@ +# -*- mode: CMAKE; -*- +# these are the install targets for the client package. +# we can't use RUNTIME DESTINATION here. + +set(STRIP_DIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_X}/strip") +execute_process(COMMAND mkdir -p ${STRIP_DIR}) + +set(FILE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_X}/${BIN_ARANGOBENCH}${CMAKE_EXECUTABLE_SUFFIX}) +set(STRIP_FILE ${STRIP_DIR}/${BIN_ARANGOBENCH}${CMAKE_EXECUTABLE_SUFFIX}) +if (NOT MSVC AND CMAKE_STRIP) + execute_process(COMMAND "rm" -f ${STRIP_FILE}) + execute_process(COMMAND ${CMAKE_OBJCOPY} --only-keep-debug ${FILE} ${STRIP_FILE}) + set(FILE ${STRIP_FILE}) +endif() +install( + PROGRAMS ${FILE} + DESTINATION ${CMAKE_INSTALL_DEBINFO_DIR}/${CMAKE_INSTALL_BINDIR}) + + +set(FILE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_X}/${BIN_ARANGODUMP}${CMAKE_EXECUTABLE_SUFFIX}) +set(STRIP_FILE ${STRIP_DIR}/${BIN_ARANGODUMP}${CMAKE_EXECUTABLE_SUFFIX}) +if (NOT MSVC AND CMAKE_STRIP) + execute_process(COMMAND "rm" -f ${STRIP_FILE}) + execute_process(COMMAND ${CMAKE_OBJCOPY} --only-keep-debug ${FILE} ${STRIP_FILE}) + set(FILE ${STRIP_FILE}) +endif() +install( + PROGRAMS ${FILE} + DESTINATION ${CMAKE_INSTALL_DEBINFO_DIR}/${CMAKE_INSTALL_BINDIR}) + +set(FILE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_X}/${BIN_ARANGOIMP}${CMAKE_EXECUTABLE_SUFFIX}) +set(STRIP_FILE ${STRIP_DIR}/${BIN_ARANGOIMP}${CMAKE_EXECUTABLE_SUFFIX}) +if (NOT MSVC AND CMAKE_STRIP) + execute_process(COMMAND "rm" -f ${STRIP_FILE}) + execute_process(COMMAND ${CMAKE_OBJCOPY} --only-keep-debug ${FILE} ${STRIP_FILE}) + set(FILE ${STRIP_FILE}) +endif() +install( + PROGRAMS ${FILE} + DESTINATION ${CMAKE_INSTALL_DEBINFO_DIR}/${CMAKE_INSTALL_BINDIR}) + +set(FILE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_X}/${BIN_ARANGORESTORE}${CMAKE_EXECUTABLE_SUFFIX}) +set(STRIP_FILE ${STRIP_DIR}/${BIN_ARANGORESTORE}${CMAKE_EXECUTABLE_SUFFIX}) +if (NOT MSVC AND CMAKE_STRIP) + execute_process(COMMAND "rm" -f ${STRIP_FILE}) + execute_process(COMMAND ${CMAKE_OBJCOPY} --only-keep-debug ${FILE} ${STRIP_FILE}) + set(FILE ${STRIP_FILE}) +endif() +install( + PROGRAMS ${FILE} + DESTINATION ${CMAKE_INSTALL_DEBINFO_DIR}/${CMAKE_INSTALL_BINDIR}) + +set(FILE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_X}/${BIN_ARANGOSH}${CMAKE_EXECUTABLE_SUFFIX}) +set(STRIP_FILE ${STRIP_DIR}/${BIN_ARANGOSH}${CMAKE_EXECUTABLE_SUFFIX}) +if (NOT MSVC AND CMAKE_STRIP) + execute_process(COMMAND "rm" -f ${STRIP_FILE}) + execute_process(COMMAND ${CMAKE_OBJCOPY} --only-keep-debug ${FILE} ${STRIP_FILE}) + set(FILE ${STRIP_FILE}) +endif() +install( + PROGRAMS ${FILE} + DESTINATION ${CMAKE_INSTALL_DEBINFO_DIR}/${CMAKE_INSTALL_BINDIR}) + diff --git a/cmake/ArangoDBInstall.cmake b/cmake/ArangoDBInstall.cmake index 57dc6d0d9a..77a8c22605 100644 --- a/cmake/ArangoDBInstall.cmake +++ b/cmake/ArangoDBInstall.cmake @@ -16,6 +16,10 @@ if (MSVC) set(CMAKE_INSTALL_SBINDIR ${CMAKE_INSTALL_BINDIR}) endif() +# debug info directory: +set(CMAKE_INSTALL_DEBINFO_DIR "${CMAKE_INSTALL_LIBDIR}/debug/${CMAKE_PROJECT_NAME}") + + set(CMAKE_INSTALL_SYSCONFDIR_ARANGO "${CMAKE_INSTALL_SYSCONFDIR}/${CMAKE_PROJECT_NAME}") set(CMAKE_INSTALL_FULL_SYSCONFDIR_ARANGO "${CMAKE_INSTALL_FULL_SYSCONFDIR}/${CMAKE_PROJECT_NAME}") @@ -30,10 +34,9 @@ FILE(MAKE_DIRECTORY "${ARANGODB_APPS_DIRECTORY}") # logs FILE(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/var/log/${CMAKE_PROJECT_NAME}") -set(INSTALL_ICU_DT_DEST "${CMAKE_INSTALL_DATAROOTDIR}/arangodb3") +set(INSTALL_ICU_DT_DEST "${CMAKE_INSTALL_DATAROOTDIR}/${CMAKE_PROJECT_NAME}") include(InstallMacros) - # install ---------------------------------------------------------------------- install(DIRECTORY ${PROJECT_SOURCE_DIR}/Documentation/man/ DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/man) diff --git a/cmake/packages/dbg/deb.txt b/cmake/packages/dbg/deb.txt new file mode 100644 index 0000000000..4d4a6c781c --- /dev/null +++ b/cmake/packages/dbg/deb.txt @@ -0,0 +1,115 @@ +################################################################################ +# the client package is a complete cmake sub package. +################################################################################ +project(PACKAGE-DBG) +cmake_minimum_required(VERSION 2.8) + +################################################################################ +# variables from the main build have to be explicitely forwarded: +################################################################################ +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "@PROJECT_BINARY_DIR@/bin/") +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_X ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) +set(CMAKE_INSTALL_DO_STRIP 0) +set(CROSS_COMPILING @CROSS_COMPILING@) + +set(CMAKE_INSTALL_BINDIR @CMAKE_INSTALL_BINDIR@) +set(CMAKE_INSTALL_FULL_BINDIR @CMAKE_INSTALL_FULL_BINDIR@) + +set(CMAKE_INSTALL_DATAROOTDIR @CMAKE_INSTALL_DATAROOTDIR@) +set(CMAKE_INSTALL_DATAROOTDIR_ARANGO @CMAKE_INSTALL_DATAROOTDIR_ARANGO@) +set(CMAKE_INSTALL_FULL_DATAROOTDIR_ARANGO @CMAKE_INSTALL_FULL_DATAROOTDIR_ARANGO@) + +set(CMAKE_INSTALL_DIR @CMAKE_INSTALL_DIR@) +set(CMAKE_INSTALL_PREFIX @CMAKE_INSTALL_PREFIX@) + +set(CMAKE_INSTALL_SYSCONFDIR @CMAKE_INSTALL_SYSCONFDIR@) +set(CMAKE_INSTALL_SYSCONFDIR_ARANGO @CMAKE_INSTALL_SYSCONFDIR_ARANGO@) +set(CMAKE_INSTALL_FULL_SYSCONFDIR_ARANGO @CMAKE_INSTALL_FULL_SYSCONFDIR_ARANGO@) + +set(CMAKE_INSTALL_DEBINFO_DIR @CMAKE_INSTALL_DEBINFO_DIR@) + +set(INSTALL_CONFIGFILES_LIST) +set(PACKAGING_HANDLE_CONFIG_FILES false) + +################################################################################ +# Substitute the install binaries: +################################################################################ +set(BIN_ARANGOD @BIN_ARANGOD@) + +set(BIN_ARANGOBENCH @BIN_ARANGOBENCH@) +set(BIN_ARANGODUMP @BIN_ARANGODUMP@) +set(BIN_ARANGOIMP @BIN_ARANGOIMP@) +set(BIN_ARANGORESTORE @BIN_ARANGORESTORE@) +set(BIN_ARANGOSH @BIN_ARANGOSH@) +set(BIN_ARANGOVPACK @BIN_ARANGOVPACK@) + +################################################################################ +# build specific variables: +################################################################################ +set(ARANGODB_URL_INFO_ABOUT @ARANGODB_URL_INFO_ABOUT@) +set(ARANGODB_SOURCE_DIR @ARANGODB_SOURCE_DIR@) +set(ARANGODB_VERSION @ARANGODB_VERSION@) +set(ARANGODB_PACKAGE_CONTACT @ARANGODB_PACKAGE_CONTACT@) +set(ARANGODB_PACKAGE_REVISION @ARANGODB_PACKAGE_REVISION@) +set(ARANGODB_PACKAGE_VENDOR @ARANGODB_PACKAGE_VENDOR@) +set(CMAKE_TARGET_ARCHITECTURES @CMAKE_TARGET_ARCHITECTURES@) + +set(ORIGINAL_SOURCE_DIR @PROJECT_SOURCE_DIR@) +set(PROJECT_SOURCE_DIR @PROJECT_SOURCE_DIR@) +set(CPACK_PACKAGE_NAME @CPACK_PACKAGE_NAME@) +set(CPACKG_PACKAGE_CONFLICTS @CPACKG_PACKAGE_CONFLICTS@) + +################################################################################ +# Get the final values for cpack: +################################################################################ +set(CPACK_PACKAGE_VERSION "${ARANGODB_VERSION}") +set(CPACK_PACKAGE_NAME "${CPACK_PACKAGE_NAME}-dbg") +set(CPACK_DEBIAN_PACKAGE_SECTION "devel") +set(CPACK_PACKAGE_VENDOR ${ARANGODB_PACKAGE_VENDOR}) +set(CPACK_PACKAGE_CONTACT ${ARANGODB_PACKAGE_CONTACT}) +set(CPACK_DEBIAN_PACKAGE_HOMEPAGE ${ARANGODB_URL_INFO_ABOUT}) +set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON) +set(CPACK_DEBIAN_COMPRESSION_TYPE "xz") +set(CPACK_COMPONENTS_ALL debian-extras) +set(CPACK_GENERATOR "DEB") +set(CPACK_SET_DESTDIR ON) + +set(CPACK_PACKAGING_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}) + +if (USE_ENTERPRISE) + set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/enterprise/LICENSE") +else () + set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE") +endif () + +file(READ "${PROJECT_SOURCE_DIR}/Installation/debian/dbg_packagedesc.txt" + CPACK_DEBIAN_PACKAGE_DESCRIPTION) + +################################################################################ +# specify which target archcitecture the package is going to be: +################################################################################ + +if(CMAKE_TARGET_ARCHITECTURES MATCHES ".*x86_64.*") + set(ARANGODB_PACKAGE_ARCHITECTURE "amd64") +elseif(CMAKE_TARGET_ARCHITECTURES MATCHES "aarch64") + set(ARANGODB_PACKAGE_ARCHITECTURE "arm64") +elseif(CMAKE_TARGET_ARCHITECTURES MATCHES "armv7") + set(ARANGODB_PACKAGE_ARCHITECTURE "armhf") +else() + set(ARANGODB_PACKAGE_ARCHITECTURE "i386") +endif() + +set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${ARANGODB_PACKAGE_ARCHITECTURE}) +set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${ARANGODB_PACKAGE_REVISION}_${ARANGODB_PACKAGE_ARCHITECTURE}") + +################################################################################ +# Install the external files into the package directory: +################################################################################ + + +set(INSTALL_MACROS_NO_TARGET_INSTALL TRUE) +include(${ORIGINAL_SOURCE_DIR}/cmake/InstallMacros.cmake) +include(${ORIGINAL_SOURCE_DIR}/arangosh/dbg.cmake) +include(${ORIGINAL_SOURCE_DIR}/arangod/dbg.cmake) + +include(CPack) diff --git a/cmake/packages/deb.cmake b/cmake/packages/deb.cmake index ad598a8299..ea8166f7b5 100644 --- a/cmake/packages/deb.cmake +++ b/cmake/packages/deb.cmake @@ -99,8 +99,6 @@ add_custom_target(package-arongodb-client COMMAND cp *.deb ${PROJECT_BINARY_DIR} WORKING_DIRECTORY ${CLIENT_BUILD_DIR}) - - list(APPEND PACKAGES_LIST package-arongodb-client) @@ -116,3 +114,18 @@ add_custom_target(remove_packages ) list(APPEND CLEAN_PACKAGES_LIST remove_packages) + + +################################################################################ +# hook to build the debug package +################################################################################ +set(DEBUG_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/packages/arangodb3-dbg) +configure_file(cmake/packages/dbg/deb.txt ${DEBUG_BUILD_DIR}/CMakeLists.txt @ONLY) + +add_custom_target(package-arongodb-dbg + COMMAND ${CMAKE_COMMAND} . + COMMAND ${CMAKE_CPACK_COMMAND} -G DEB + COMMAND cp *.deb ${PROJECT_BINARY_DIR} + WORKING_DIRECTORY ${DEBUG_BUILD_DIR}) + +list(APPEND PACKAGES_LIST package-arongodb-dbg) From 975e7a65b2fa472b5c1690594a067e615a93ca61 Mon Sep 17 00:00:00 2001 From: Andreas Streichardt Date: Thu, 5 Jan 2017 16:19:47 +0100 Subject: [PATCH 2/2] Fix cluster internal requests in authentication enabled cluster --- arangod/RestServer/VocbaseContext.cpp | 14 ++++++++-- js/actions/api-cluster.js | 26 +++++------------ .../system/_admin/aardvark/APP/statistics.js | 28 +++++++++---------- 3 files changed, 32 insertions(+), 36 deletions(-) diff --git a/arangod/RestServer/VocbaseContext.cpp b/arangod/RestServer/VocbaseContext.cpp index 271404ab9f..1272e2db96 100644 --- a/arangod/RestServer/VocbaseContext.cpp +++ b/arangod/RestServer/VocbaseContext.cpp @@ -196,13 +196,17 @@ rest::ResponseCode VocbaseContext::basicAuthentication(char const* auth) { AuthResult result = _authentication->authInfo()->checkAuthentication( AuthInfo::AuthType::BASIC, auth); - _request->setUser(std::move(result._username)); - if (!result._authorized) { events::CredentialsBad(_request, rest::AuthenticationMethod::BASIC); return rest::ResponseCode::UNAUTHORIZED; } + if (!result._username.empty()) { + _request->setUser(std::move(result._username)); + } else { + _request->setUser("root"); + } + // we have a user name, verify 'mustChange' if (result._mustChange) { if ((_request->requestType() == rest::RequestType::PUT || @@ -233,7 +237,11 @@ rest::ResponseCode VocbaseContext::jwtAuthentication(std::string const& auth) { } // we have a user name, verify 'mustChange' - _request->setUser(std::move(result._username)); + if (!result._username.empty()) { + _request->setUser(std::move(result._username)); + } else { + _request->setUser("root"); + } events::Authenticated(_request, rest::AuthenticationMethod::JWT); return rest::ResponseCode::OK; diff --git a/js/actions/api-cluster.js b/js/actions/api-cluster.js index 15c49bde43..569b5f8fac 100644 --- a/js/actions/api-cluster.js +++ b/js/actions/api-cluster.js @@ -220,28 +220,16 @@ actions.defineHttp({ } } catch (e) {} - // Now get to work, first get the write lock on the Plan in the Agency: - var success = ArangoAgency.lockRead('Supervision', timeout); - if (!success) { - actions.resultError(req, res, actions.HTTP_REQUEST_TIMEOUT, 0, - 'could not get a read lock on Plan in Agency'); + var Health; + try { + Health = ArangoAgency.get('Supervision/Health', false, true).arango.Supervision.Health; + } catch (e1) { + actions.resultError(req, res, actions.HTTP_NOT_FOUND, 0, + 'Failed to retrieve supervision node from agency!'); return; } - try { - var Health; - try { - Health = ArangoAgency.get('Supervision/Health', false, true).arango.Supervision.Health; - } catch (e1) { - actions.resultError(req, res, actions.HTTP_NOT_FOUND, 0, - 'Failed to retrieve supervision node from agency!'); - return; - } - - actions.resultOk(req, res, actions.HTTP_OK, {Health}); - } finally { - ArangoAgency.unlockRead('Supervision', timeout); - } + actions.resultOk(req, res, actions.HTTP_OK, {Health}); } }); diff --git a/js/apps/system/_admin/aardvark/APP/statistics.js b/js/apps/system/_admin/aardvark/APP/statistics.js index 4d315e3184..0f68e146a0 100644 --- a/js/apps/system/_admin/aardvark/APP/statistics.js +++ b/js/apps/system/_admin/aardvark/APP/statistics.js @@ -26,7 +26,7 @@ //////////////////////////////////////////////////////////////////////////////// const internal = require('internal'); -const download = internal.download; +const download = internal.clusterDownload; const cluster = require('@arangodb/cluster'); const db = require('@arangodb').db; @@ -495,20 +495,20 @@ router.get("/coordshort", function(req, res) { }; var coordinators = global.ArangoClusterInfo.getCoordinators(); - - var coordinatorStats = coordinators.map(coordinator => { - var endpoint = global.ArangoClusterInfo.getServerEndpoint(coordinator); - var response = download(endpoint.replace(/^tcp/, "http") + "/_db/_system/_admin/aardvark/statistics/short?count=" + coordinators.length); + if (Array.isArray(coordinators)) { + var coordinatorStats = coordinators.map(coordinator => { + var endpoint = global.ArangoClusterInfo.getServerEndpoint(coordinator); + var response = download(endpoint.replace(/^tcp/, "http") + "/_db/_system/_admin/aardvark/statistics/short?count=" + coordinators.length, '', {headers: {}}); + try { + return JSON.parse(response.body); + } catch (e) { + console.error("Couldn't read statistics response:", response.body); + throw e; + } + }); - try { - return JSON.parse(response.body); - } catch (e) { - console.error("Couldn't read statistics response:", response.body); - throw e; - } - }); - - mergeHistory(coordinatorStats); + mergeHistory(coordinatorStats); + } res.json({"enabled": coordinatorStats.some(stat => stat.enabled), "data": merged}); }) .summary("Short term history for all coordinators")