From 26865782ab01b0d462fd40f73bd26a03f62d2213 Mon Sep 17 00:00:00 2001 From: laura-ding <48548375+laura-ding@users.noreply.github.com> Date: Tue, 9 Feb 2021 18:24:55 +0800 Subject: [PATCH 1/5] package tar --- package/package.sh | 126 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 107 insertions(+), 19 deletions(-) diff --git a/package/package.sh b/package/package.sh index e98395e70..edaf1a890 100755 --- a/package/package.sh +++ b/package/package.sh @@ -7,8 +7,11 @@ # -n: Package to one or multi packages, `ON` means one package, `OFF` means multi packages, default value is `ON` # -s: Whether to strip the package, default value is `FALSE` # -g: Whether build storage, default is ON +# -b: The branch of nebula-common and nebula-storage +# -t: The build type, values `Debug, Release, RelWithDebInfo, MinSizeRel`, default value is Release +# -f: Whether to package to tar file or rpm/deb file, default is `auto`, it means package to rpm/deb, `tar` means package to tar # -# usage: ./package.sh -v -n -s -b -g +# usage: ./package.sh -v -n -s -b -g -t -f # set -e @@ -17,7 +20,7 @@ version="" build_storage=ON package_one=ON strip_enable="FALSE" -usage="Usage: ${0} -v -n -s -b -g " +usage="Usage: ${0} -v -n -s -b -g -t -f " project_dir="$(cd "$(dirname "$0")" && pwd)/.." build_dir=${project_dir}/pkg-build modules_dir=${project_dir}/modules @@ -28,8 +31,11 @@ static_sanitizer="OFF" build_type="Release" branch="master" jobs=$(nproc) +jobs=20 +package_type="auto" +install_dir="/usr/local/nebula" -while getopts v:n:s:b:d:t:g: opt; +while getopts v:n:s:b:d:t:g:f: opt; do case $opt in v) @@ -57,6 +63,9 @@ do g) build_storage=$OPTARG ;; + f) + package_type=$OPTARG + ;; ?) echo "Invalid option, use default arguments" ;; @@ -81,7 +90,23 @@ if [[ $strip_enable != TRUE ]] && [[ $strip_enable != FALSE ]]; then exit 1 fi -echo "current version is [ $version ], strip enable is [$strip_enable], enablesanitizer is [$enablesanitizer], static_sanitizer is [$static_sanitizer]" +if [[ $package_type != "auto" ]] && [[ $package_type != "tar" ]]; then + echo "package type[$package_type] is wrong, exit" + echo ${usage} + exit -1 +fi + +echo ">>>>>>>> option <<<<<<<< +version : [$version] +strip_enable : [$strip_enable] +enablesanitizer : [$enablesanitizer] +static_sanitizer : [$static_sanitizer] +build_type : [$build_type] +branch : [$branch] +package_one : [$package_one] +package_type : [$package_type] +>>>>>>>> option <<<<<<<<" + function _build_storage { if [[ ! -d ${storage_dir} && ! -L ${storage_dir} ]]; then @@ -91,11 +116,11 @@ function _build_storage { pushd ${storage_build_dir} cmake -DCMAKE_BUILD_TYPE=${build_type} \ -DNEBULA_BUILD_VERSION=${version} \ - -DENABLE_ASAN=${san} \ - -DENABLE_UBSAN=${san} \ - -DENABLE_STATIC_ASAN=${ssan} \ - -DENABLE_STATIC_UBSAN=${ssan} \ - -DCMAKE_INSTALL_PREFIX=/usr/local/nebula \ + -DENABLE_ASAN=${enablesanitizer} \ + -DENABLE_UBSAN=${enablesanitizer} \ + -DENABLE_STATIC_ASAN=${static_sanitizer} \ + -DENABLE_STATIC_UBSAN=${static_sanitizer} \ + -DCMAKE_INSTALL_PREFIX=${install_dir} \ -DNEBULA_COMMON_REPO_TAG=${branch} \ -DENABLE_TESTING=OFF \ -DENABLE_PACK_ONE=${package_one} \ @@ -113,11 +138,11 @@ function _build_graph { pushd ${build_dir} cmake -DCMAKE_BUILD_TYPE=${build_type} \ -DNEBULA_BUILD_VERSION=${version} \ - -DENABLE_ASAN=${san} \ - -DENABLE_UBSAN=${san} \ - -DENABLE_STATIC_ASAN=${ssan} \ - -DENABLE_STATIC_UBSAN=${ssan} \ - -DCMAKE_INSTALL_PREFIX=/usr/local/nebula \ + -DENABLE_ASAN=${enablesanitizer} \ + -DENABLE_UBSAN=${enablesanitizer} \ + -DENABLE_STATIC_ASAN=${static_sanitizer} \ + -DENABLE_STATIC_UBSAN=${static_sanitizer} \ + -DCMAKE_INSTALL_PREFIX=${install_dir} \ -DNEBULA_COMMON_REPO_TAG=${branch} \ -DENABLE_TESTING=OFF \ -DENABLE_BUILD_STORAGE=OFF \ @@ -149,7 +174,6 @@ function build { _build_graph } -# args: function package { # The package CMakeLists.txt in ${project_dir}/package/build package_dir=${build_dir}/package/ @@ -168,8 +192,6 @@ function package { -DNEBULA_STORAGE_BINARY_DIR=${storage_build_dir} \ ${project_dir}/package/ - strip_enable=$1 - args="" [[ $strip_enable == TRUE ]] && args="-D CPACK_STRIP_FILES=TRUE -D CPACK_RPM_SPEC_MORE_DEFINE=" @@ -189,7 +211,73 @@ function package { popd } +function gen_package_name { + if [[ -f "/etc/redhat-release" ]]; then + sys_name=`cat /etc/redhat-release | cut -d ' ' -f1` + if [[ ${sys_name} == "CentOS" ]]; then + sys_ver=`cat /etc/redhat-release | tr -dc '0-9.' | cut -d \. -f1` + if [[ ${sys_ver} == 7 ]] || [[ ${sys_ver} == 6 ]]; then + package_name=.el${sys_ver}.$(uname -m) + else + package_name=.el${sys_ver}.$(uname -m) + fi + elif [[ ${sys_name} == "Fedora" ]]; then + sys_ver=`cat /etc/redhat-release | cut -d ' ' -f3` + package_name=.fc${sys_ver}.$(uname -m) + fi + elif [[ -f "/etc/lsb-release" ]]; then + sys_name=`cat /etc/lsb-release | grep DISTRIB_RELEASE | cut -d "=" -f 2 | sed 's/\.//'` + package_name=.ubuntu${sys_name}.$(uname -m) + elif [[ -f "/etc/issue" ]]; then + sys_name=`cat /etc/issue | cut -d " " -f 3` + package_name=.debian${sys_name}.$(uname -m) + fi +} + +function package_tar_sh { + gen_package_name + exec_file=$build_dir/nebula-$version$package_name.sh + + echo "Creating self-extractable package $exec_file" + cat > $exec_file < /dev/null || { echo "xz: Command not found"; exit 1; } +[[ \$# -ne 0 ]] && prefix=\$(echo "\$@" | sed 's;.*--prefix=(\S*).*;\1;p' -rn) +prefix=\${prefix:-/usr/local/nebula} +mkdir -p \$prefix +[[ -w \$prefix ]] || { echo "\$prefix: No permission to write"; exit 1; } +archive_offset=\$(awk '/^__start_of_archive__$/{print NR+1; exit 0;}' \$0) +tail -n+\$archive_offset \$0 | tar --no-same-owner --numeric-owner -xJf - -C \$prefix +daemons=(metad graphd storaged) +for daemon in \${daemons[@]} +do + if [[ ! -f \$prefix/etc/nebula-\$daemon.conf ]] && [[ -f \$prefix/etc/nebula-\$daemon.conf.default ]]; then + cp \$prefix/etc/nebula-\$daemon.conf.default \$prefix/etc/nebula-\$daemon.conf + chmod 644 \$prefix/etc/nebula-\$daemon.conf + fi +done +echo "Nebula Graph has been installed to \$prefix" +exit 0 +__start_of_archive__ +EOF + pushd $install_dir + tar -cJf - * >> $exec_file + chmod 0755 $exec_file + echo "####### target package file is $exec_file" + popd +} # The main -build $version $enablesanitizer $static_sanitizer $build_type $branch -package $strip_enable +if [[ $package_type == "auto" ]]; then + build + package +else + install_dir=${build_dir}/install + build $version $enablesanitizer $static_sanitizer $buildtype + pushd ${build_dir} + make install-all -j$(nproc) + popd + package_tar_sh +fi + From 09e482916ae10c19b07a737f6a017a1388710552 Mon Sep 17 00:00:00 2001 From: laura-ding <48548375+laura-ding@users.noreply.github.com> Date: Mon, 19 Apr 2021 14:09:32 +0800 Subject: [PATCH 2/5] rebase upstream --- package/package.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/package/package.sh b/package/package.sh index edaf1a890..226fea10e 100755 --- a/package/package.sh +++ b/package/package.sh @@ -31,7 +31,6 @@ static_sanitizer="OFF" build_type="Release" branch="master" jobs=$(nproc) -jobs=20 package_type="auto" install_dir="/usr/local/nebula" From c1d25d54ddf3ac667614f30194a7d84a43a6ccff Mon Sep 17 00:00:00 2001 From: laura-ding <48548375+laura-ding@users.noreply.github.com> Date: Thu, 22 Apr 2021 11:40:33 +0800 Subject: [PATCH 3/5] fix install --- package/package.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/package/package.sh b/package/package.sh index 226fea10e..6023a3836 100755 --- a/package/package.sh +++ b/package/package.sh @@ -103,6 +103,7 @@ static_sanitizer : [$static_sanitizer] build_type : [$build_type] branch : [$branch] package_one : [$package_one] +build_storage : [$build_storage] package_type : [$package_type] >>>>>>>> option <<<<<<<<" @@ -274,8 +275,11 @@ if [[ $package_type == "auto" ]]; then else install_dir=${build_dir}/install build $version $enablesanitizer $static_sanitizer $buildtype + pushd ${storage_build_dir} + make install -j$(nproc) + popd pushd ${build_dir} - make install-all -j$(nproc) + make install -j$(nproc) popd package_tar_sh fi From 9f746f65e13ad49478490b541641e5b4c6072083 Mon Sep 17 00:00:00 2001 From: laura-ding <48548375+laura-ding@users.noreply.github.com> Date: Sat, 8 May 2021 14:24:31 +0800 Subject: [PATCH 4/5] rebase upstream --- package/package.sh | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/package/package.sh b/package/package.sh index 6023a3836..dc4a3b264 100755 --- a/package/package.sh +++ b/package/package.sh @@ -159,12 +159,6 @@ function _build_graph { # args: function build { - version=$1 - san=$2 - ssan=$3 - build_type=$4 - branch=$5 - rm -rf ${build_dir} && mkdir -p ${build_dir} if [[ "$build_storage" == "ON" ]]; then @@ -274,7 +268,7 @@ if [[ $package_type == "auto" ]]; then package else install_dir=${build_dir}/install - build $version $enablesanitizer $static_sanitizer $buildtype + build pushd ${storage_build_dir} make install -j$(nproc) popd From d482f507fc8df310fafdcb1bd278fdc19ebb5792 Mon Sep 17 00:00:00 2001 From: laura-ding <48548375+laura-ding@users.noreply.github.com> Date: Mon, 10 May 2021 09:42:45 +0800 Subject: [PATCH 5/5] move package tar to cmake --- .github/workflows/nightly.yml | 4 +- .github/workflows/release.yml | 4 +- package/CMakeLists.txt | 28 +++++++ package/package.sh | 139 +++++++++++++--------------------- package/tar.sh | 20 +++++ 5 files changed, 105 insertions(+), 90 deletions(-) create mode 100755 package/tar.sh diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 5b8f367fe..df11ee384 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -27,7 +27,7 @@ jobs: steps: - uses: actions/checkout@v1 - name: package - run: ./package/package.sh + run: ./package/package.sh -f all - name: output some vars id: vars env: @@ -35,6 +35,8 @@ jobs: run: | filename=$(find pkg-build/cpack_output -type f \( -iname \*.deb -o -iname \*.rpm \)) sha256sum $filename > $filename.$SHA_EXT + filename=$(find pkg-build/cpack_output -type f \( -iname \*.sh \)) + sha256sum $filename > $filename.$SHA_EXT subdir=$(date -u +%Y.%m.%d) echo "::set-output name=subdir::$subdir" - uses: actions/upload-artifact@v1 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 48104bbf0..1bc14b66a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -30,7 +30,7 @@ jobs: - uses: ./.github/actions/tagname-action id: tag - name: package - run: ./package/package.sh -b ${{ steps.tag.outputs.tag }} + run: ./package/package.sh -b ${{ steps.tag.outputs.tag }} -f all - name: output some vars id: vars env: @@ -39,6 +39,8 @@ jobs: tag=$(echo ${{ github.ref }} | rev | cut -d/ -f1 | rev) filename=$(find pkg-build/cpack_output -type f \( -iname \*.deb -o -iname \*.rpm \)) sha256sum $filename > $filename.$SHA_EXT + filename=$(find pkg-build/cpack_output -type f \( -iname \*.sh \)) + sha256sum $filename > $filename.$SHA_EXT subdir=$(echo $tag |sed 's/^v//') echo "::set-output name=subdir::$subdir" - uses: ./.github/actions/upload-assets-action diff --git a/package/CMakeLists.txt b/package/CMakeLists.txt index 431d5cbfd..b4bb4ac8d 100644 --- a/package/CMakeLists.txt +++ b/package/CMakeLists.txt @@ -19,6 +19,7 @@ cmake_minimum_required(VERSION 3.5.0) project("Nebula Package") OPTION(ENABLE_PACKAGE_STORAGE "Whether package storage." ON) +OPTION(ENABLE_TO_PACKAGE_SH "Whether package to sh file." OFF) list(APPEND CMAKE_MODULE_PATH "${CMAKE_BINARY_DIR}/../../modules/common/cmake") @@ -40,10 +41,15 @@ if(NOT NEBULA_BINARY_DIR) set(NEBULA_BINARY_DIR ${CMAKE_BINARY_DIR}/../) endif() +if(NOT NEBULA_TARGET_FILE_DIR) + set(NEBULA_TARGET_FILE_DIR ${CMAKE_BINARY_DIR}/package) +endif() + message(STATUS "NEBULA_STORAGE_SOURCE_DIR : ${NEBULA_STORAGE_SOURCE_DIR}") message(STATUS "NEBULA_STORAGE_BINARY_DIR : ${NEBULA_STORAGE_BINARY_DIR}") message(STATUS "NEBULA_SOURCE_DIR : ${NEBULA_SOURCE_DIR}") message(STATUS "NEBULA_BINARY_DIR : ${NEBULA_BINARY_DIR}") +message(STATUS "NEBULA_TARGET_FILE_DIR : ${NEBULA_TARGET_FILE_DIR}") if(ENABLE_PACKAGE_STORAGE) @@ -260,3 +266,25 @@ package(${ENABLE_PACK_ONE} "nebula-graph" "https://github.com/vesoft-inc/nebula-graph/releases" ${CMAKE_SOURCE_DIR}) + +if(ENABLE_TO_PACKAGE_SH) + set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}.${HOST_SYSTEM_VER}.${CMAKE_HOST_SYSTEM_PROCESSOR}) + set(EXEC_FILE_NAME "${NEBULA_TARGET_FILE_DIR}/${CPACK_PACKAGE_FILE_NAME}.sh") + + execute_process( + COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/tar.sh ${EXEC_FILE_NAME} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + RESULT_VARIABLE cp_status + ) + + if(NOT ${cp_status} EQUAL 0) + message(FATAL_ERROR "Failed to cp tar.sh file") + endif() + + add_custom_target( + package-tar + COMMAND tar -cJf - * >> ${EXEC_FILE_NAME} + COMMAND chmod 0755 ${EXEC_FILE_NAME} + WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX} + ) +endif() diff --git a/package/package.sh b/package/package.sh index dc4a3b264..de56efbfd 100755 --- a/package/package.sh +++ b/package/package.sh @@ -9,9 +9,9 @@ # -g: Whether build storage, default is ON # -b: The branch of nebula-common and nebula-storage # -t: The build type, values `Debug, Release, RelWithDebInfo, MinSizeRel`, default value is Release -# -f: Whether to package to tar file or rpm/deb file, default is `auto`, it means package to rpm/deb, `tar` means package to tar +# -f: Whether to package to tar file or rpm/deb file, default is `auto`, it means package to rpm/deb, `tar` means package to tar, `all` means package to tar and rpm/deb # -# usage: ./package.sh -v -n -s -b -g -t -f +# usage: ./package.sh -v -n -s -b -g -t -f # set -e @@ -23,6 +23,7 @@ strip_enable="FALSE" usage="Usage: ${0} -v -n -s -b -g -t -f " project_dir="$(cd "$(dirname "$0")" && pwd)/.." build_dir=${project_dir}/pkg-build +package_dir=${build_dir}/package/ modules_dir=${project_dir}/modules storage_dir=${modules_dir}/storage storage_build_dir=${build_dir}/modules/storage @@ -31,6 +32,7 @@ static_sanitizer="OFF" build_type="Release" branch="master" jobs=$(nproc) +jobs=20 package_type="auto" install_dir="/usr/local/nebula" @@ -89,8 +91,8 @@ if [[ $strip_enable != TRUE ]] && [[ $strip_enable != FALSE ]]; then exit 1 fi -if [[ $package_type != "auto" ]] && [[ $package_type != "tar" ]]; then - echo "package type[$package_type] is wrong, exit" +if [[ $package_type != "auto" ]] && [[ $package_type != "tar" ]] && [[ $package_type != "all" ]]; then + echo "package type[$package_type] is wrong, should be [auto/tar/all]. exit" echo ${usage} exit -1 fi @@ -104,7 +106,7 @@ build_type : [$build_type] branch : [$branch] package_one : [$package_one] build_storage : [$build_storage] -package_type : [$package_type] +package_type : [$package_type] >>>>>>>> option <<<<<<<<" @@ -168,113 +170,74 @@ function build { _build_graph } -function package { - # The package CMakeLists.txt in ${project_dir}/package/build - package_dir=${build_dir}/package/ - if [[ -d $package_dir ]]; then - rm -rf ${package_dir:?}/* - else - mkdir ${package_dir} +function package_cmake { + package_to_tar="OFF" + if [[ $package_type == "tar" ]] || [[ $package_type == "all" ]]; then + package_to_tar="ON" fi - pushd ${package_dir} cmake \ -DNEBULA_BUILD_VERSION=${version} \ -DENABLE_PACK_ONE=${package_one} \ - -DCMAKE_INSTALL_PREFIX=/usr/local/nebula \ + -DCMAKE_INSTALL_PREFIX=${install_dir} \ -DENABLE_PACKAGE_STORAGE=${build_storage} \ -DNEBULA_STORAGE_SOURCE_DIR=${storage_dir} \ -DNEBULA_STORAGE_BINARY_DIR=${storage_build_dir} \ + -DNEBULA_TARGET_FILE_DIR=${package_dir} \ + -DENABLE_TO_PACKAGE_SH=${package_to_tar} \ ${project_dir}/package/ +} +function package { + package_cmake args="" [[ $strip_enable == TRUE ]] && args="-D CPACK_STRIP_FILES=TRUE -D CPACK_RPM_SPEC_MORE_DEFINE=" if ! ( cpack --verbose $args ); then echo ">>> package nebula failed <<<" exit 1 - else - # rename package file - outputDir=$build_dir/cpack_output - mkdir -p ${outputDir} - for pkg_name in $(ls ./*nebula*-${version}*); do - mv ${pkg_name} ${outputDir}/ - echo "####### taget package file is ${outputDir}/${pkg_name}" - done fi - - popd } -function gen_package_name { - if [[ -f "/etc/redhat-release" ]]; then - sys_name=`cat /etc/redhat-release | cut -d ' ' -f1` - if [[ ${sys_name} == "CentOS" ]]; then - sys_ver=`cat /etc/redhat-release | tr -dc '0-9.' | cut -d \. -f1` - if [[ ${sys_ver} == 7 ]] || [[ ${sys_ver} == 6 ]]; then - package_name=.el${sys_ver}.$(uname -m) - else - package_name=.el${sys_ver}.$(uname -m) - fi - elif [[ ${sys_name} == "Fedora" ]]; then - sys_ver=`cat /etc/redhat-release | cut -d ' ' -f3` - package_name=.fc${sys_ver}.$(uname -m) - fi - elif [[ -f "/etc/lsb-release" ]]; then - sys_name=`cat /etc/lsb-release | grep DISTRIB_RELEASE | cut -d "=" -f 2 | sed 's/\.//'` - package_name=.ubuntu${sys_name}.$(uname -m) - elif [[ -f "/etc/issue" ]]; then - sys_name=`cat /etc/issue | cut -d " " -f 3` - package_name=.debian${sys_name}.$(uname -m) +function package_tar { + install_dir=${build_dir}/install + package_cmake + pushd ${package_dir} + make install -j$(nproc) + popd + if ! ( make package-tar ); then + echo ">>> package nebula to sh failed <<<" + exit 1 fi } -function package_tar_sh { - gen_package_name - exec_file=$build_dir/nebula-$version$package_name.sh - - echo "Creating self-extractable package $exec_file" - cat > $exec_file < /dev/null || { echo "xz: Command not found"; exit 1; } -[[ \$# -ne 0 ]] && prefix=\$(echo "\$@" | sed 's;.*--prefix=(\S*).*;\1;p' -rn) -prefix=\${prefix:-/usr/local/nebula} -mkdir -p \$prefix -[[ -w \$prefix ]] || { echo "\$prefix: No permission to write"; exit 1; } -archive_offset=\$(awk '/^__start_of_archive__$/{print NR+1; exit 0;}' \$0) -tail -n+\$archive_offset \$0 | tar --no-same-owner --numeric-owner -xJf - -C \$prefix -daemons=(metad graphd storaged) -for daemon in \${daemons[@]} -do - if [[ ! -f \$prefix/etc/nebula-\$daemon.conf ]] && [[ -f \$prefix/etc/nebula-\$daemon.conf.default ]]; then - cp \$prefix/etc/nebula-\$daemon.conf.default \$prefix/etc/nebula-\$daemon.conf - chmod 644 \$prefix/etc/nebula-\$daemon.conf - fi -done -echo "Nebula Graph has been installed to \$prefix" -exit 0 -__start_of_archive__ -EOF - pushd $install_dir - tar -cJf - * >> $exec_file - chmod 0755 $exec_file - echo "####### target package file is $exec_file" - popd +function move_file { + # rename package file + outputDir=$build_dir/cpack_output + mkdir -p ${outputDir} + for pkg_name in $(ls ./*nebula*-${version}*); do + mv ${pkg_name} ${outputDir}/ + echo "####### taget package file is ${outputDir}/${pkg_name}" + done } # The main -if [[ $package_type == "auto" ]]; then - build - package +build + +# The package CMakeLists.txt in ${project_dir}/package/build +if [[ -d $package_dir ]]; then + rm -rf ${package_dir:?}/* else - install_dir=${build_dir}/install - build - pushd ${storage_build_dir} - make install -j$(nproc) - popd - pushd ${build_dir} - make install -j$(nproc) - popd - package_tar_sh + mkdir ${package_dir} fi +pushd ${package_dir} +if [[ "$package_type" == "tar" ]]; then + package_tar +elif [[ "$package_type" == "auto" ]]; then + package +else + package + package_tar +fi +move_file +popd diff --git a/package/tar.sh b/package/tar.sh new file mode 100755 index 000000000..1731b6340 --- /dev/null +++ b/package/tar.sh @@ -0,0 +1,20 @@ +#! /usr/bin/env bash +set -e +hash xz &> /dev/null || { echo "xz: Command not found"; exit 1; } +[[ $# -ne 0 ]] && prefix=$(echo "$@" | sed 's;.*--prefix=(\S*).*;\1;p' -rn) +prefix=${prefix:-/usr/local/nebula} +mkdir -p $prefix +[[ -w $prefix ]] || { echo "$prefix: No permission to write"; exit 1; } +archive_offset=$(awk '/^__start_of_archive__$/{print NR+1; exit 0;}' $0) +tail -n+$archive_offset $0 | tar --no-same-owner --numeric-owner -xJf - -C $prefix +daemons=(metad graphd storaged) +for daemon in ${daemons[@]} +do + if [[ ! -f $prefix/etc/nebula-$daemon.conf ]] && [[ -f $prefix/etc/nebula-$daemon.conf.default ]]; then + cp $prefix/etc/nebula-$daemon.conf.default $prefix/etc/nebula-$daemon.conf + chmod 644 $prefix/etc/nebula-$daemon.conf + fi +done +echo "Nebula Graph has been installed to $prefix" +exit 0 +__start_of_archive__