1
1
#! /usr/bin/env bash
2
2
#
3
3
# package nebula as one deb/rpm
4
- # ./package.sh -v <version> -n <ON/OFF> -s <TRUE/FALSE> the version should be match tag name
4
+ # ./package.sh -v <version> -n <ON/OFF> -s <TRUE/FALSE> -t <auto/tar> the version should be match tag name
5
5
#
6
6
7
7
set -ex
@@ -14,8 +14,12 @@ PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)"/../
14
14
enablesanitizer=" OFF"
15
15
static_sanitizer=" OFF"
16
16
buildtype=" Release"
17
+ package_type=" auto"
18
+ file_type=" "
19
+ install_dir=" /usr/local/nebula"
20
+ build_dir=$PROJECT_DIR /build
17
21
18
- while getopts v:n:s:d: opt;
22
+ while getopts v:n:s:d:t: opt;
19
23
do
20
24
case $opt in
21
25
v)
34
38
fi
35
39
buildtype=" RelWithDebInfo"
36
40
;;
41
+ t)
42
+ package_type=$OPTARG
43
+ ;;
37
44
? )
38
45
echo " Invalid option, use default arguments"
39
46
;;
@@ -58,15 +65,20 @@ if [[ $strip_enable != TRUE ]] && [[ $strip_enable != FALSE ]]; then
58
65
exit -1
59
66
fi
60
67
61
- echo " current version is [ $version ], strip enable is [$strip_enable ], enablesanitizer is [$enablesanitizer ], static_sanitizer is [$static_sanitizer ]"
68
+ if [[ $package_type != " auto" ]] && [[ $package_type != " tar" ]]; then
69
+ echo " package type[$package_type ] is wrong, exit"
70
+ echo ${usage}
71
+ exit -1
72
+ fi
73
+
74
+ echo " current version is [ $version ], strip enable is [$strip_enable ], enablesanitizer is [$enablesanitizer ], static_sanitizer is [$static_sanitizer ], package type is [ $package_type ]"
62
75
63
76
# args: <version>
64
77
function build {
65
78
version=$1
66
79
san=$2
67
80
ssan=$3
68
81
build_type=$4
69
- build_dir=$PROJECT_DIR /build
70
82
if [[ -d $build_dir ]]; then
71
83
rm -rf ${build_dir} /*
72
84
else
@@ -76,7 +88,7 @@ function build {
76
88
pushd ${build_dir}
77
89
78
90
cmake -DCMAKE_BUILD_TYPE=${build_type} -DNEBULA_BUILD_VERSION=${version} -DENABLE_ASAN=${san} --DENABLE_UBSAN=${san} \
79
- -DENABLE_STATIC_ASAN=${ssan} -DENABLE_STATIC_UBSAN=${ssan} -DCMAKE_INSTALL_PREFIX=/usr/local/nebula -DENABLE_TESTING=OFF \
91
+ -DENABLE_STATIC_ASAN=${ssan} -DENABLE_STATIC_UBSAN=${ssan} -DCMAKE_INSTALL_PREFIX=${install_dir} -DENABLE_TESTING=OFF \
80
92
-DENABLE_PACK_ONE=${package_one} $PROJECT_DIR
81
93
82
94
if ! ( make -j$( nproc) ); then
@@ -87,43 +99,108 @@ function build {
87
99
popd
88
100
}
89
101
102
+
103
+ function get_package_name {
104
+ if [[ -f " /etc/redhat-release" ]]; then
105
+ sys_name=` cat /etc/redhat-release | cut -d ' ' -f1`
106
+ if [[ ${sys_name} == " CentOS" ]]; then
107
+ sys_ver=` cat /etc/redhat-release | tr -dc ' 0-9.' | cut -d \. -f1`
108
+ if [[ ${sys_ver} == 7 ]] || [[ ${sys_ver} == 6 ]]; then
109
+ package_name=.el${sys_ver} -5.x86_64
110
+ else
111
+ package_name=.el${sys_ver} .x86_64
112
+ fi
113
+ elif [[ ${sys_name} == " Fedora" ]]; then
114
+ sys_ver=` cat /etc/redhat-release | cut -d ' ' -f3`
115
+ package_name=.fc${sys_ver} .x86_64
116
+ fi
117
+ file_type=" RPM"
118
+ elif [[ -f " /etc/lsb-release" ]]; then
119
+ sys_name=` cat /etc/lsb-release | grep DISTRIB_RELEASE | cut -d " =" -f 2 | sed ' s/\.//' `
120
+ package_name=.ubuntu${sys_name} .amd64
121
+ file_type=" DEB"
122
+ fi
123
+ }
124
+
90
125
# args: <strip_enable>
91
126
function package {
92
127
strip_enable=$1
93
128
pushd $PROJECT_DIR /build/
94
129
args=" "
95
130
[[ $strip_enable == TRUE ]] && args=" -D CPACK_STRIP_FILES=TRUE -D CPACK_RPM_SPEC_MORE_DEFINE="
96
131
97
- tagetPackageName=" "
98
- pType=" RPM"
99
-
100
- if [[ -f " /etc/redhat-release" ]]; then
101
- # TODO: update minor version according to OS
102
- centosMajorVersion=` cat /etc/redhat-release | tr -dc ' 0-9.' | cut -d \. -f1`
103
- [[ " $centosMajorVersion " == " 7" ]] && tagetPackageName=" nebula-${version} .el7-5.x86_64.rpm"
104
- [[ " $centosMajorVersion " == " 6" ]] && tagetPackageName=" nebula-${version} .el6-5.x86_64.rpm"
105
- elif [[ -f " /etc/lsb-release" ]]; then
106
- ubuntuVersion=` cat /etc/lsb-release | grep DISTRIB_RELEASE | cut -d " =" -f 2 | sed ' s/\.//' `
107
- tagetPackageName=" nebula-${version} .ubuntu${ubuntuVersion} .amd64.deb"
108
- pType=" DEB"
109
- fi
110
-
111
- if ! ( cpack -G ${pType} --verbose $args ); then
132
+ if ! ( cpack -G ${file_type} --verbose $args ); then
112
133
echo " >>> package nebula failed <<<"
113
134
exit -1
114
- elif [[ " $tagetPackageName " != " " && $package_one == ON ]] ; then
135
+ else
115
136
# rename package file
116
- pkgName =` ls | grep nebula-graph | grep ${version} `
117
- outputDir=$PROJECT_DIR /build /cpack_output
137
+ pkg_names =` ls | grep nebula | grep ${version} `
138
+ outputDir=$build_dir /cpack_output
118
139
mkdir -p ${outputDir}
119
- mv ${pkgName} ${outputDir} /${tagetPackageName}
120
- echo " ####### taget package file is ${outputDir} /${tagetPackageName} "
140
+ for pkg_name in ${pkg_names[@]} ;
141
+ do
142
+ new_pkg_name=${pkg_name/ \- Linux/ ${package_name} }
143
+ mv ${pkg_name} ${outputDir} /${new_pkg_name}
144
+ echo " ####### taget package file is ${outputDir} /${new_pkg_name} "
145
+ done
121
146
fi
122
147
123
148
popd
124
149
}
125
150
126
151
152
+ function package_tar_sh {
153
+ exec_file=$build_dir /nebula-$version$package_name .sh
154
+
155
+ echo " Creating self-extractable package $exec_file "
156
+ cat > $exec_file << EOF
157
+ #! /usr/bin/env bash
158
+ set -e
159
+
160
+ hash xz &> /dev/null || { echo "xz: Command not found"; exit 1; }
161
+
162
+ [[ \$ # -ne 0 ]] && prefix=\$ (echo "\$ @" | sed 's;.*--prefix=(\S*).*;\1;p' -rn)
163
+ prefix=\$ {prefix:-/usr/local/nebula}
164
+ mkdir -p \$ prefix
165
+
166
+ [[ -w \$ prefix ]] || { echo "\$ prefix: No permission to write"; exit 1; }
167
+
168
+ archive_offset=\$ (awk '/^__start_of_archive__$/{print NR+1; exit 0;}' \$ 0)
169
+ tail -n+\$ archive_offset \$ 0 | tar --no-same-owner --numeric-owner -xJf - -C \$ prefix
170
+
171
+ daemons=(metad graphd storaged)
172
+ for daemon in \$ {daemons[@]}
173
+ do
174
+ if [[ ! -f \$ prefix/etc/nebula-\$ daemon.conf ]] && [[ -f \$ prefix/etc/nebula-\$ daemon.conf.default ]]; then
175
+ cp \$ prefix/etc/nebula-\$ daemon.conf.default \$ prefix/etc/nebula-\$ daemon.conf
176
+ chmod 644 \$ prefix/etc/nebula-\$ daemon.conf
177
+ fi
178
+ done
179
+
180
+ echo "Nebula Graph has been installed to \$ prefix"
181
+
182
+ exit 0
183
+
184
+ __start_of_archive__
185
+ EOF
186
+ pushd $install_dir
187
+ tar -cJf - * >> $exec_file
188
+ chmod 0755 $exec_file
189
+ echo " ####### taget package file is $exec_file "
190
+ popd
191
+ }
192
+
127
193
# The main
128
- build $version $enablesanitizer $static_sanitizer $buildtype
129
- package $strip_enable
194
+ get_package_name
195
+
196
+ if [[ $package_type == " auto" ]]; then
197
+ build $version $enablesanitizer $static_sanitizer $buildtype
198
+ package $strip_enable
199
+ else
200
+ install_dir=${build_dir} /install
201
+ build $version $enablesanitizer $static_sanitizer $buildtype
202
+ pushd ${build_dir}
203
+ make install -j$( nproc)
204
+ popd
205
+ package_tar_sh
206
+ fi
0 commit comments