tools/scripts/evio-tools-v24.sh

313 lines
8.2 KiB
Bash
Executable File

#!/bin/bash
#v24
set -e
EVIO_REPO=https://github.com/EdgeVPNio/evio.git
EXT_REPO=https://github.com/EdgeVPNio/external.git
TOOLS_REPO=https://github.com/EdgeVPNio/tools.git
PORTAL_REPO=https://github.com/EdgeVPNio/portal.git
PY=python3.9
WorkspaceRoot=$(readlink -e ../..)
EVIO_DIR=$WorkspaceRoot/EdgeVPNio/evio/evio
TINCAN_DIR=$WorkspaceRoot/EdgeVPNio/tincan
EXT_DIR=$WorkspaceRoot/EdgeVPNio/external
TOOLS_DIR=$WorkspaceRoot/EdgeVPNio/tools
PORTAL_DIR=$WorkspaceRoot/EdgeVPNio/portal
OUT_DIR=$WorkspaceRoot/out
BuildWRTC=$TOOLS_DIR/scripts/build_webrtc.sh
GetArchives=$TOOLS_DIR/scripts/get_archives.sh
GetInclude=$TOOLS_DIR/scripts/get_include.sh
BuildTincan=$TOOLS_DIR/scripts/build_tincan.sh
Versioning=$TOOLS_DIR/versioning/versioning.py
VER=0
PLATFORM=""
BUILD_TYPE=""
ARCH=""
DATE="$(date '+%Y-%m-%d %T%z')"
function display_env
{
echo DATE=$DATE
echo VER=$VER
echo PLATFORM=$PLATFORM
echo BUILD_TYPE=$BUILD_TYPE
echo ARCH=$ARCH
echo WorkspaceRoot=$WorkspaceRoot
echo OUT_DIR=$OUT_DIR
echo EVIO_DIR=$EVIO_DIR
echo EXT_DIR=$EXT_DIR
echo TOOLS_DIR=$TOOLS_DIR
}
function check_env
{
envlist="VER PLATFORM BUILD_TYPE ARCH"
for env in $envlist
do
echo ${!env}
if [ -z ${!env} ]; then
echo "Environment ${env} is not set, exiting."
exit 1
fi
done
}
function update_repo
{
rv=$(git -C $1 rev-parse --is-inside-work-tree)
if [ "$rv" == "true" -o "$rv" == "false" ]; then
git -C "$(dirname $1)" pull "$2"
else
git -C "$(dirname $1)" clone "$2"
fi
}
function sync_repos
{
update_repo $EVIO_DIR $EVIO_REPO
update_repo $EXT_DIR $EXT_REPO
update_repo $TOOLS_DIR $TOOLS_REPO
update_repo $PORTAL_DIR $PORTAL_REPO
}
function copy_evio_files
{
echo target dir= "$1"
cp -r $EVIO_DIR/evio_controller.py "$1"/ && \
cp $EVIO_DIR/template-config.json "$1"/config.json && \
cp -r $EVIO_DIR/broker/ $EVIO_DIR/controllers/ "$1"/ && \
chmod 0775 "$1"/broker/ && \
chmod 0664 "$1"/broker/* && \
chmod 0775 "$1"/controllers/ && \
chmod 0664 "$1"/controllers/* && \
chmod 0664 "$1"/evio_controller.py && \
chmod 0664 "$1"/config.json && \
cp $TINCAN_DIR/out/"$PLATFORM"/"$BUILD_TYPE"/tincan "$1"/ && \
chmod 0775 "$1"/tincan
}
function make_debpak
{
display_env
check_env
sudo rm -rf $EVIO_DIR/controllers/__pycache__/ $EVIO_DIR/broker/__pycache__/
wd=$(pwd)
mkdir -p $TOOLS_DIR/debian-package/evio/etc/opt/evio
# copy evio and tincan files to debpak directory
cp -r $EVIO_DIR/evio_controller.py $TOOLS_DIR/debian-package/evio/opt/evio/ && \
cp $EVIO_DIR/template-config.json $TOOLS_DIR/debian-package/evio/etc/opt/evio/config.json && \
cp -r $EVIO_DIR/controllers/ $EVIO_DIR/broker/ $TOOLS_DIR/debian-package/evio/opt/evio/ && \
chmod 0775 $TOOLS_DIR/debian-package/evio/opt/evio/broker/ && \
chmod 0664 $TOOLS_DIR/debian-package/evio/opt/evio/broker/* && \
chmod 0775 $TOOLS_DIR/debian-package/evio/opt/evio/controllers/ && \
chmod 0664 $TOOLS_DIR/debian-package/evio/opt/evio/controllers/* && \
chmod 0664 $TOOLS_DIR/debian-package/evio/opt/evio/evio_controller.py && \
chmod 0664 $TOOLS_DIR/debian-package/evio/etc/opt/evio/config.json && \
cp $TINCAN_DIR/out/"$PLATFORM"/"$BUILD_TYPE"/tincan $TOOLS_DIR/debian-package/evio/opt/evio/ && \
chmod 0775 $TOOLS_DIR/debian-package/evio/opt/evio/tincan
if [ $? -ne 0 ]; then
exit 1
fi
mkdir -p $OUT_DIR
# invoke deb-gen to create debian installer package
cd $TOOLS_DIR/debian-package/ && \
./deb-gen $OUT_DIR $ARCH $VER $1
if [ $? -ne 0 ]; then
exit 1
fi
# remove previously copied files
sudo rm -rf evio/opt/evio/broker \
evio/opt/evio/controllers \
evio/opt/evio/tincan \
evio/opt/evio/template-config.json \
evio/opt/evio/evio_controller.py \
evio/etc/opt/evio/config.json
cd $wd
}
function make_dkrimg
{
display_env
check_env
DPK_NAME=evio_$VER"_"$ARCH.deb
echo Building evio node docker image using $DPK_NAME
cp $OUT_DIR/$DPK_NAME $TOOLS_DIR/docker-image/evio"_"$ARCH.deb && \
docker build --build-arg TARGETARCH="$ARCH" -f $TOOLS_DIR/docker-image/evio-node.Dockerfile -t edgevpnio/evio-node:"$VER" $TOOLS_DIR/docker-image
rm $TOOLS_DIR/docker-image/evio"_"$ARCH.deb
}
function buildx_dkrimg
{
img_name=$1
display_env
DPK_NAME_AMD=evio_$VER"_"amd64.deb
DPK_NAME_ARM=evio_$VER"_"arm64.deb
cp $OUT_DIR/$DPK_NAME_AMD $TOOLS_DIR/docker-image/evio"_"amd64.deb && \
cp $OUT_DIR/$DPK_NAME_ARM $TOOLS_DIR/docker-image/evio"_"arm64.deb && \
docker buildx use evibuilder && \
docker buildx build --push \
--build-arg VERSION="$VER" \
--build-arg DATE="$DATE" \
--platform linux/amd64,linux/arm64 \
-f $TOOLS_DIR/docker-image/evio-node.Dockerfile \
-t edgevpnio/$img_name:$VER \
-t edgevpnio/$img_name:latest \
$TOOLS_DIR/docker-image
rm $TOOLS_DIR/docker-image/evio"_"amd64.deb $TOOLS_DIR/docker-image/evio"_"arm64.deb
}
function build_webrtc()
{
display_env
check_env
wd=$(pwd)
cd $WorkspaceRoot
chmod +x $BuildWRTC $GetArchives $GetInclude
$BuildWRTC -t $PLATFORM -b $BUILD_TYPE
if [ $? -eq 0 ]; then
cd $WorkspaceRoot
$GetArchives -t $PLATFORM -b $BUILD_TYPE
if [ $? -eq 0 ]; then
cd $WorkspaceRoot
$GetInclude
fi
fi
cd $wd
}
function build_tincan {
display_env
# check_env
cd $WorkspaceRoot
chmod +x $BuildTincan
# git -C "$EXT_DIR" checkout $PLATFORM
# $BuildTincan -t $PLATFORM -b $BUILD_TYPE
$BuildTincan -t $PLATFORM -b $BUILD_TYPE
if [ $? -ne 0 ]; then
exit 1
fi
}
function do_build
{
build_tincan && \
make_debpak && \
make_dkrimg
}
function do_build_debian_x64_release
{
$PY $Versioning --workspace_root=$WorkspaceRoot --gen_version_files
VER=$($PY $Versioning --version)
PLATFORM="debian-x64"
BUILD_TYPE="release"
ARCH="amd64"
do_build
}
function do_build_debian_arm64_release
{
$PY $Versioning --workspace_root=$WorkspaceRoot --gen_version_files
VER=$($PY $Versioning --version)
PLATFORM="debian-arm64"
BUILD_TYPE="release"
ARCH="arm64"
do_build
}
function do_build_debian_arm_release
{
$PY $Versioning --workspace_root=$WorkspaceRoot --gen_version_files
VER=$($PY $Versioning --version)
PLATFORM="debian-arm"
BUILD_TYPE="release"
ARCH="armhf"
do_build
}
source venv/bin/activate
case $1 in
sync)
sync_repos
;;
bldnum)
if [ -z "$2" ]; then
cat /var/tmp/evio_build_number
echo ""
elif [ "$2" == "set" ]; then
if [ ! -z "$3" ]; then
echo $3 > /var/tmp/evio_build_number
else
echo "No value for build number specified"
fi
elif [ "$2" == "next" ]; then
$PY $Versioning --next_build_num
$PY $Versioning --workspace_root=$WorkspaceRoot --gen_version_files -verbose
fi
;;
build)
VER=$($PY $Versioning --version)
$PY $Versioning --workspace_root=$WorkspaceRoot --gen_version_files -verbose
if [ "$3" == "amd64" ]; then
PLATFORM="debian-x64"
ARCH="amd64"
elif [ "$3" == "arm64" ]; then
PLATFORM="debian-arm64"
ARCH="arm64"
elif [ "$3" == "arm" ]; then
PLATFORM="debian-arm"
ARCH="armhf"
fi
if [ "$4" == "rel" ]; then
BUILD_TYPE="release"
elif [ "$4" == "dbg" ]; then
BUILD_TYPE="debug"
fi
if [ "$2" == "debpak" ]; then
make_debpak $5
elif [ "$2" == "dkrimg" ]; then
make_dkrimg
elif [ "$2" == "webrtc" ]; then
build_webrtc
elif [ "$2" == "tincan" ]; then
build_tincan
fi
;;
buildx)
$PY $Versioning --next_build_num
$PY $Versioning --workspace_root=$WorkspaceRoot --gen_version_files
VER=$($PY $Versioning --version)
BUILD_TYPE="release"
PLATFORM="debian-x64"
ARCH="amd64"
build_tincan
make_debpak nodeps
PLATFORM="debian-arm64"
ARCH="arm64"
build_tincan
make_debpak nodeps
buildx_dkrimg $2
;;
fbr)
$PY $Versioning --next_build_num
$PY $Versioning --workspace_root=$WorkspaceRoot --gen_version_files -verbose
VER=$($PY $Versioning --version)
PLATFORM="debian-x64"
ARCH="amd64"
BUILD_TYPE="release"
build_tincan
make_debpak nodeps
sudo apt install -y "$OUT_DIR"/evio_"$VER"_"$ARCH".deb
;;
*)
echo "no match on input -> $1"
;;
esac