1
0
Эх сурвалжийг харах

Static linking libstdc++ to argon2.node to remove dependency on shared lib

Key Networks 7 жил өмнө
parent
commit
d8174f3b5b

+ 1 - 0
build/.gitignore

@@ -1,2 +1,3 @@
 Release/
 Staging/
+ztncui

+ 11 - 0
build/after-install.sh

@@ -0,0 +1,11 @@
+#!/bin/bash
+
+ETC='/opt/key-networks/ztncui/etc'
+
+echo "Copying default password file..."
+cp -v $ETC/default.passwd $ETC/passwd
+if [ $? -eq 0 ]; then
+  exit 0
+else
+  exit 1
+fi

+ 10 - 0
build/binding.gyp.patch

@@ -0,0 +1,10 @@
+--- binding.gyp	2016-11-30 05:56:09.000000000 +0800
++++ /home/srp/dev/node/ztncui/build/binding.gyp	2018-01-04 12:39:02.266078387 +0800
+@@ -42,6 +42,7 @@
+         "<!(node -e \"require('nan')\")",
+         "argon2/include"
+       ],
++      "libraries": ["/usr/lib/gcc/x86_64-redhat-linux/7/libstdc++.a"],
+       "dependencies": ["libargon2"],
+       "configurations": {
+         "Debug": {

+ 37 - 5
build/build.sh

@@ -1,6 +1,10 @@
 #!/bin/bash
 
-set -eux -o pipefail
+THISDIR=`pwd`
+if [ `basename $THISDIR`  != 'build' ]; then
+  echo "Execute `basename $0` from the build directory"
+  exit 1
+fi
 
 SRC_DIR=../src
 BUILD_DIR=`pwd`
@@ -15,14 +19,42 @@ MAINTAINER='https://key-networks.com/contact'
 URL='https://key-networks.com'
 LICENSE='GPLv3'
 
+BINDINGGYP='node_modules/argon2/binding.gyp'
+
+if [ ! -f  /usr/lib/gcc/x86_64-redhat-linux/7/libstdc++.a ]; then
+  echo "You must install libstdc++-static"
+  exit 1
+fi
 
 rm -fr $STAGING_DIR && mkdir $STAGING_DIR
 rm -fr $PKG_DIR && mkdir $PKG_DIR
 
+pushd .
 cd ../src
+pushd .
 npm install
-pkg -c ./package.json -t node8-linux-x64 bin/www -o ztncui
-cd -
+
+patch --forward --dry-run --silent $BINDINGGYP $BUILD_DIR/binding.gyp.patch
+if [ $? -eq 0 ]; then
+  echo "Applying patch to $BINDINGGYP..."
+  patch --forward $BINDINGGYP $BUILD_DIR/binding.gyp.patch
+fi
+if [ $? -ne 0 ]; then
+  echo "Failed to patch $BINDINGGYP"
+  exit 1
+fi
+
+cd node_modules/argon2/
+node-gyp rebuild
+if [ $? -ne 0 ]; then
+  echo "Failed to rebuild argon2"
+  exit 1
+fi
+
+popd
+pkg -c ./package.json -t node8-linux-x64 bin/www -o $BUILD_DIR/ztncui
+
+popd
 
 install -m 750 -d $STAGING_DIR/opt
 install -m 750 -d $STAGING_DIR/opt/key-networks
@@ -32,7 +64,7 @@ install -m 600 $SRC_DIR/etc/default.passwd $STAGING_DIR/opt/key-networks/ztncui/
 install -m 750 -d $STAGING_DIR/opt/key-networks/ztncui/etc/tls
 install -m 750 -d $STAGING_DIR/opt/key-networks/ztncui/node_modules/argon2/build/Release
 install -m 755 $SRC_DIR/node_modules/argon2/build/Release/argon2.node $STAGING_DIR/opt/key-networks/ztncui/node_modules/argon2/build/Release/
-install -m 755 $SRC_DIR/ztncui $STAGING_DIR/opt/key-networks/ztncui/
+install -m 755 $BUILD_DIR/ztncui $STAGING_DIR/opt/key-networks/ztncui/
 
 openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout $STAGING_DIR/opt/key-networks/ztncui/etc/tls/privkey.pem -out $STAGING_DIR/opt/key-networks/ztncui/etc/tls/fullchain.pem -config $BUILD_DIR/openssl.cnf
 
@@ -44,7 +76,7 @@ GENERAL_FPM_FLAGS="
   --chdir $STAGING_DIR
   --package $PKG_DIR
   --directories /opt/key-networks
-  --after-install /dev/null
+  --after-install after-install.sh
   --before-install /dev/null
   --after-remove /dev/null
   --before-remove /dev/null