feat: add cross compile support for arm64 and arm

This commit is contained in:
DanyLE 2024-03-10 15:45:27 +01:00
parent ba5c2f70de
commit b0577db04e
7 changed files with 188 additions and 250 deletions

227
Jenkinsfile vendored
View File

@ -1,85 +1,5 @@
def build_rust_mod() {
sh '''#!/bin/bash
set -e
set -x
TARGET=
case "$arch" in
amd64)
TARGET="x86_64-unknown-linux-gnu"
;;
arm64)
TARGET="aarch64-unknown-linux-gnu"
;;
arm)
TARGET="armv7-unknown-linux-gnueabihf"
;;
*)
echo "unknown target for architecture $arch"
exit 1
;;
esac
mkdir -p build/$arch/
DESTDIR=$(realpath build/$arch/) \
PLATFORM=$arch \
RUST_TARGET=$TARGET \
RUSTUP_HOME=/opt/rust/rustup \
CARGO_HOME=/opt/rust/cargo \
make luafcgi
'''
}
def build_server_and_backend() {
sh '''#!/bin/bash
set -e
set -x
TARGET=
case "$arch" in
amd64)
;;
arm64)
;;
arm)
;;
*)
echo "unknown target for architecture $arch"
exit 1
;;
esac
mkdir -p build/$arch/
DESTDIR=$(realpath build/$arch/) \
PLATFORM=$arch \
FRONTEND_IGNORE=true \
LUAFCGI_IGNORE=true \
make clean_c all
'''
}
def build_package() {
sh '''#!/bin/bash
set -e
set -x
TARGET=
case "$arch" in
amd64)
;;
arm64)
;;
arm)
;;
*)
echo "unknown target for architecture $arch"
exit 1
;;
esac
mkdir -p build/$arch/
DESTDIR=$(realpath build/$arch/) \
PLATFORM=$arch \
make deb appimg
'''
}
pipeline { pipeline {
agent { node { label'master' } } agent { node { label'xsangle/ci-tools:latest' } }
options { options {
// Limit build history with buildDiscarder option: // Limit build history with buildDiscarder option:
// daysToKeepStr: history is only kept up to this many days. // daysToKeepStr: history is only kept up to this many days.
@ -104,140 +24,53 @@ pipeline {
} }
steps { steps {
sh''' sh'''
cd antd/luasocket && git stash || true
cd $WORKSPACE
git submodule update --init git submodule update --init
make clean || true make clean || true
rm -rf build/* || true rm -rf build/* || true
mkdir build
''' '''
} }
} }
stage('Build Frontend (TS)') { stage('Build AMD64)') {
agent {
node { label'workstation' }
}
steps { steps {
sh''' sh'''
mkdir -p build/frontend/ DESTDIR=$(realpath build) \
DESTDIR=$(realpath build/frontend/) make frontend ARCH=amd64 \
for arch in arm arm64 amd64; do RUSTUP_HOME=/opt/rust/rustup \
mkdir build/$arch CARGO_HOME=/opt/rust/cargo \
cp -rf build/frontend/* build/$arch/ make all deb appimg
done
rm -rf build/frontend
''' '''
} }
} }
stage('Build RUST MODULE AMD64') { stage('Build ARM64)') {
agent {
node { label'workstation' }
}
steps { steps {
script { sh'''
env.arch = 'amd64' DESTDIR=$(realpath build) \
} ARCH=arm64 \
build_rust_mod() RUSTUP_HOME=/opt/rust/rustup \
CARGO_HOME=/opt/rust/cargo \
make all deb appimg
'''
} }
} }
stage('Build RUST MODULE ARM64') { stage('Build ARM)') {
agent {
node { label'workstation' }
}
steps { steps {
script { sh'''
env.arch = 'arm64' DESTDIR=$(realpath build) \
} ARCH=arm \
build_rust_mod() RUSTUP_HOME=/opt/rust/rustup \
CARGO_HOME=/opt/rust/cargo \
make all deb appimg
'''
} }
} }
stage('Build RUST MODULE ARM') { stage('Checking build)') {
agent {
node { label'workstation' }
}
steps { steps {
script { sh'''
env.arch = 'arm' ./scripts/ckarch.sh build
} '''
build_rust_mod()
}
}
stage('Build Server + backend AMD64') {
agent {
docker {
image 'xsangle/ci-tools:latest-amd64'
reuseNode true
}
}
steps {
script {
env.arch = 'amd64'
}
build_server_and_backend()
}
}
stage('Build Server + backend ARM64') {
agent {
docker {
image 'xsangle/ci-tools:latest-arm64'
reuseNode true
}
}
steps {
script {
env.arch = 'arm64'
}
build_server_and_backend()
}
}
stage('Build Server + backend ARM') {
agent {
docker {
image 'xsangle/ci-tools:latest-arm'
reuseNode true
}
}
steps {
script {
env.arch = 'arm'
}
build_server_and_backend()
}
}
stage('Build package AMD64') {
agent {
node { label'workstation' }
}
steps {
script {
env.arch = 'amd64'
}
build_package()
}
}
stage('Build package ARM64') {
agent {
node { label'workstation' }
}
steps {
script {
env.arch = 'arm64'
}
build_package()
}
}
stage('Build package ARM') {
agent {
node { label'workstation' }
}
steps {
script {
env.arch = 'arm'
}
build_package()
} }
} }
stage('Archive') { stage('Archive') {

View File

@ -1,76 +1,104 @@
ROOT_DIR:=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST)))) ROOT_DIR:=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
PLATFORM?=x86_64 ARCH?=amd64
RUSTUP_HOME?=/opt/rust
CARGO_HOME?=/opt/rust/cargo
RUST_TARGET?=x86_64-unknown-linux-gnu
DESTDIR?=$(ROOT_DIR)/build/
BUILD_PREFIX:=/opt/www
INSTALL_DIR:=$(DESTDIR)/$(BUILD_PREFIX)
VERSION?=2.0.0 VERSION?=2.0.0
BRANCH?=b BRANCH?=b
BUILDID=$(shell git rev-parse --short HEAD) RUSTUP_HOME?=/opt/rust
CARGO_HOME?=/opt/rust/cargo
DESTDIR?=$(ROOT_DIR)/build/
ifeq ('$(ARCH)','amd64')
RUST_TARGET?=x86_64-unknown-linux-gnu
CC_PREFIX?=
HOST?=
endif
ifeq ('$(ARCH)','arm64')
RUST_TARGET?=aarch64-unknown-linux-gnu
CC_PREFIX?=aarch64-linux-gnu-
HOST?=--host=aarch64-linux-gnu
endif
ifeq ('$(ARCH)','arm')
RUST_TARGET?=armv7-unknown-linux-gnueabihf
CC_PREFIX?=arm-linux-gnueabihf-
HOST?=--host=arm-linux-gnueabihf
endif
CC:=$(CC_PREFIX)gcc
CXX:=$(CC_PREFIX)g++
BUILD_PREFIX:=/opt/www
INSTALL_DIR:=$(DESTDIR)/$(ARCH)/$(BUILD_PREFIX)
BUILDID:=$(shell git rev-parse --short HEAD)
VERSION_STR=$(VERSION)-$(BRANCH)-$(BUILDID) VERSION_STR=$(VERSION)-$(BRANCH)-$(BUILDID)
PKG_NAME="AntOS_${VERSION_STR}_${PLATFORM}" PKG_NAME="AntOS_${VERSION_STR}_${ARCH}"
all: antos tar.gz all: antos tar.gz
antos: antd backend frontend antos: antd backend frontend
cp $(ROOT_DIR)/README.md $(INSTALL_DIR)/htdocs/os
antd: httpd plugins luasec luasocket silk luafcgi antd: httpd plugins luasec luasocket silk luafcgi
rm $(INSTALL_DIR)/runner.ini rm $(INSTALL_DIR)/runner.ini
cp $(ROOT_DIR)/config/*.ini $(INSTALL_DIR)/etc cp $(ROOT_DIR)/config/*.ini $(INSTALL_DIR)/etc
cp $(ROOT_DIR)/README.md $(INSTALL_DIR)/htdocs/os rm $(INSTALL_DIR)/bin/ant-d $(INSTALL_DIR)/bin/runnerd
@echo "Finish building Antd server" @echo "Finish building Antd server"
httpd: httpd: clean_c
cd $(ROOT_DIR)/antd/ant-http && libtoolize && aclocal && autoconf && automake --add-missing cd $(ROOT_DIR)/antd/ant-http && libtoolize && aclocal && autoconf && automake --add-missing
cd $(ROOT_DIR)/antd/ant-http && ./configure --prefix=$(BUILD_PREFIX) cd $(ROOT_DIR)/antd/ant-http && ./configure $(HOST) --prefix=$(BUILD_PREFIX)
make -C $(ROOT_DIR)/antd/ant-http install DESTDIR=$(DESTDIR)/$(ARCH) make -C $(ROOT_DIR)/antd/ant-http install
plugins: antd-fcgi-plugin antd-tunnel-plugin antd-wvnc-plugin antd-tunnel-publishers plugins: antd-fcgi-plugin antd-tunnel-plugin antd-wvnc-plugin antd-tunnel-publishers
@echo "Finish making plugins" @echo "Finish making plugins"
luasec: luasec: clean_c
@echo "Building $@" @echo "Building $@"
lua5.3 $(ROOT_DIR)/antd/luasec/src/options.lua -g \ lua5.3 $(ROOT_DIR)/antd/luasec/src/options.lua -g \
/usr/include/openssl/ssl.h \ /usr/include/openssl/ssl.h \
> $(ROOT_DIR)/antd/luasec/src/options.c > $(ROOT_DIR)/antd/luasec/src/options.c
CC=$(CC) \
INC_PATH=-I$(ROOT_DIR)/antd/silk/modules/lua/lua54/ \ INC_PATH=-I$(ROOT_DIR)/antd/silk/modules/lua/lua54/ \
make -C $(ROOT_DIR)/antd/luasec linux make -C $(ROOT_DIR)/antd/luasec linux
CC=$(CC) \
INC_PATH=-I$(ROOT_DIR)/antd/silk/modules/lua/lua54/ \ INC_PATH=-I$(ROOT_DIR)/antd/silk/modules/lua/lua54/ \
DESTDIR=$(DESTDIR) \ DESTDIR=$(DESTDIR)/$(ARCH) \
LUAPATH=/opt/www/lib/lua \ LUAPATH=/opt/www/lib/lua \
LUACPATH=/opt/www/lib/lua \ LUACPATH=/opt/www/lib/lua \
make -C $(ROOT_DIR)/antd/luasec install make -C $(ROOT_DIR)/antd/luasec install
luasocket: luasocket: clean_c
@echo "Building $@" @echo "Building $@"
sed -i 's/^CC_linux=/CC_linux?=/g' $(ROOT_DIR)/antd/luasocket/src/makefile
sed -i 's/^LD_linux=/LD_linux?=/g' $(ROOT_DIR)/antd/luasocket/src/makefile
CC_linux=$(CC) \
LD_linux=$(CC) \
LUAV=5.4 \ LUAV=5.4 \
LUAINC_linux=$(ROOT_DIR)/antd/silk/modules/lua/lua54/ \ LUAINC_linux=$(ROOT_DIR)/antd/silk/modules/lua/lua54/ \
LUAPREFIX_linux=$(BUILD_PREFIX) \ LUAPREFIX_linux=$(BUILD_PREFIX) \
PLAT=linux \ PLAT=linux \
make -C $(ROOT_DIR)/antd/luasocket linux make -C $(ROOT_DIR)/antd/luasocket linux
CC_linux=$(CC) \
LD_linux=$(CC) \
LUAV=5.4 \ LUAV=5.4 \
LUAINC_linux=$(ROOT_DIR)/antd/silk/modules/lua/lua54/ \ LUAINC_linux=$(ROOT_DIR)/antd/silk/modules/lua/lua54/ \
LUAPREFIX_linux=$(BUILD_PREFIX) \ LUAPREFIX_linux=$(BUILD_PREFIX) \
PLAT=linux \ PLAT=linux \
make -C $(ROOT_DIR)/antd/luasocket install-unix DESTDIR=$(DESTDIR)/$(ARCH) make -C $(ROOT_DIR)/antd/luasocket install-unix
-mkdir -p $(INSTALL_DIR)/lib/lua -mkdir -p $(INSTALL_DIR)/lib/lua
cp -rf $(INSTALL_DIR)/lib/lua/5.4/* $(INSTALL_DIR)/lib/lua/ cp -rf $(INSTALL_DIR)/lib/lua/5.4/* $(INSTALL_DIR)/lib/lua/
cp -rf $(INSTALL_DIR)/share/lua/5.4/* $(INSTALL_DIR)/lib/lua/ cp -rf $(INSTALL_DIR)/share/lua/5.4/* $(INSTALL_DIR)/lib/lua/
rm -rf $(INSTALL_DIR)/lib/lua/5.4 $(INSTALL_DIR)/share rm -rf $(INSTALL_DIR)/lib/lua/5.4 $(INSTALL_DIR)/share
antd-% sil%: httpd antd-% sil%: clean_c
@echo "Building $@" @echo "Building $@"
cd $(ROOT_DIR)/antd/$@ && libtoolize && aclocal && autoconf && automake --add-missing cd $(ROOT_DIR)/antd/$@ && libtoolize && aclocal && autoconf && automake --add-missing
cd $(ROOT_DIR)/antd/$@ && CFLAGS="-I$(INSTALL_DIR)/include" LDFLAGS="-L$(INSTALL_DIR)/lib" ./configure --prefix=$(BUILD_PREFIX) cd $(ROOT_DIR)/antd/$@ && CFLAGS="-I$(INSTALL_DIR)/include" LDFLAGS="-L$(INSTALL_DIR)/lib" \
make -C $(ROOT_DIR)/antd/$@ install ./configure $(HOST) --prefix=$(BUILD_PREFIX)
DESTDIR=$(DESTDIR)/$(ARCH) make -C $(ROOT_DIR)/antd/$@ install
luafcgi: luafcgi:
ifeq ($(LUAFCGI_IGNORE),) ifeq ($(LUAFCGI_IGNORE),)
@ -78,6 +106,7 @@ ifeq ($(LUAFCGI_IGNORE),)
mkdir -p $(INSTALL_DIR)/bin mkdir -p $(INSTALL_DIR)/bin
RUSTUP_HOME=$(RUSTUP_HOME) CARGO_HOME=$(CARGO_HOME) \ RUSTUP_HOME=$(RUSTUP_HOME) CARGO_HOME=$(CARGO_HOME) \
. $(CARGO_HOME)/env && \ . $(CARGO_HOME)/env && \
rustup default stable && \
rustup target add $(RUST_TARGET) && \ rustup target add $(RUST_TARGET) && \
cargo build --target=$(RUST_TARGET) --release \ cargo build --target=$(RUST_TARGET) --release \
--manifest-path=$(ROOT_DIR)/antd/luafcgi/Cargo.toml \ --manifest-path=$(ROOT_DIR)/antd/luafcgi/Cargo.toml \
@ -101,7 +130,9 @@ clean_c:
clean: clean_c clean: clean_c
@echo "Clean Rust project and output DIR" @echo "Clean Rust project and output DIR"
RUSTUP_HOME=$(RUSTUP_HOME) CARGO_HOME=$(CARGO_HOME) \ RUSTUP_HOME=$(RUSTUP_HOME) CARGO_HOME=$(CARGO_HOME) \
. $(CARGO_HOME)/env && cargo clean \ . $(CARGO_HOME)/env && \
rustup default stable && \
cargo clean \
--manifest-path=$(ROOT_DIR)/antd/luafcgi/Cargo.toml \ --manifest-path=$(ROOT_DIR)/antd/luafcgi/Cargo.toml \
--config=$(ROOT_DIR)/antd/luafcgi/.cargo/config.toml --config=$(ROOT_DIR)/antd/luafcgi/.cargo/config.toml
-rm -rf $(DESTDIR)/* -rm -rf $(DESTDIR)/*
@ -121,15 +152,15 @@ else
endif endif
deb: deb:
-rm $(DESTDIR)/*.deb -rm $(DESTDIR)/$(ARCH)/*.deb
scripts/mkdeb.sh $(VERSION_STR) $(PLATFORM) $(DESTDIR) scripts/mkdeb.sh $(VERSION_STR) $(ARCH) $(DESTDIR)/$(ARCH)
tar.gz: antos tar.gz: antos
-rm $(DESTDIR)/$(PKG_NAME).tar.gz -rm $(DESTDIR)/$(ARCH)/$(PKG_NAME).tar.gz
cd $(DESTDIR)/ && tar cvzf $(PKG_NAME).tar.gz opt cd $(DESTDIR)/$(ARCH)/ && tar cvzf $(PKG_NAME).tar.gz opt
appimg: appimg:
-rm $(DESTDIR)/*.AppImage -rm $(DESTDIR)/$(ARCH)/*.AppImage
scripts/mkappimg.sh $(PLATFORM) $(VERSION_STR) $(DESTDIR) $(ROOT_DIR)/antos-64.png scripts/mkappimg.sh $(ARCH) $(VERSION_STR) $(DESTDIR)/$(ARCH) $(ROOT_DIR)/antos-64.png
.PHONY: antd antos .PHONY: antd antos

View File

@ -1,10 +1,8 @@
FROM ubuntu:jammy AS deploy-env FROM debian:bookworm AS deploy-env
ARG tag ARG tag
COPY deps/ / COPY deps/ /
RUN dpkg -i /libssl1.1_1.1.1f-$(uname -m).deb RUN apt-get update && apt-get --yes --no-install-recommends install libsqlite3-0 zlib1g libreadline8 wget libssl3 libvncclient1 libturbojpeg0 openssh-client tar tree
# manual install libssl1.1
RUN apt-get update && apt-get --yes --no-install-recommends install libsqlite3-0 zlib1g libreadline8 wget libvncclient1 libjpeg-turbo8 openssh-client tar tree
RUN apt clean && rm -rf /var/lib/apt/lists/* RUN apt clean && rm -rf /var/lib/apt/lists/*
RUN mkdir /ulib RUN mkdir /ulib
RUN cp -rf /lib/*-linux-*/libsqlite3*.so* /ulib RUN cp -rf /lib/*-linux-*/libsqlite3*.so* /ulib
@ -61,7 +59,7 @@ RUN chown -R root:root /platform
RUN tree /platform RUN tree /platform
RUN ls -al /platform RUN ls -al /platform
FROM busybox:stable-glibc FROM busybox:1.36.1-glibc
#copy all necessary libraries #copy all necessary libraries
COPY --from=deploy-env /ulib/ /lib/ COPY --from=deploy-env /ulib/ /lib/
COPY --from=deploy-env /bin/wget /bin/ COPY --from=deploy-env /bin/wget /bin/

View File

@ -1,6 +1,5 @@
FROM ubuntu:jammy AS deploy-env FROM debian:bookworm AS deploy-env
# manual install libssl1.1
RUN apt-get update && apt-get --yes --no-install-recommends install \ RUN apt-get update && apt-get --yes --no-install-recommends install \
build-essential \ build-essential \
make \ make \
@ -17,11 +16,22 @@ RUN apt-get update && apt-get --yes --no-install-recommends install \
libffi-dev \ libffi-dev \
ca-certificates \ ca-certificates \
unzip \ unzip \
libjpeg-turbo8-dev \ libturbojpeg0-dev \
libvncserver-dev \ libvncserver-dev \
lua5.3 lua5.3
RUN RUSTUP_HOME=/opt/rust/rustup CARGO_HOME=/opt/rust/cargo bash -c 'curl https://sh.rustup.rs -sSf | sh -s -- -y' RUN RUSTUP_HOME=/opt/rust/rustup CARGO_HOME=/opt/rust/cargo bash -c 'curl https://sh.rustup.rs -sSf | sh -s -- -y'
RUN chmod -R 777 /opt/rust/ RUN chmod -R 777 /opt/rust/
RUN apt-get update && apt-get --yes --no-install-recommends install \ RUN apt-get update && apt-get --yes --no-install-recommends install \
nodejs npm git wget libfuse2 fuse3 nodejs npm git wget libfuse2 fuse3
# cross build support
RUN dpkg --add-architecture armhf
RUN dpkg --add-architecture arm64
RUN apt-get update && apt-get --yes --no-install-recommends install \
crossbuild-essential-armhf \
crossbuild-essential-armhf \
libsqlite3-0:arm64 zlib1g:arm64 libreadline8:arm64 libssl3:arm64 \
libffi-dev:arm64 libturbojpeg0:arm64 libvncclient1:arm64 \
libsqlite3-0:armhf zlib1g:armhf libreadline8:armhf libssl3:armhf \
libffi-dev:armhf libturbojpeg0:armhf libvncclient1:armhf

69
scripts/ckarch.sh Executable file
View File

@ -0,0 +1,69 @@
#!/bin/bash
set -e
TARGET=$1
[[ -z "$TARGET" ]] && echo "No taget provided" && exit 1
[[ ! -d "$TARGET" ]] && echo "Target is not a directory" && exit 1
DIRS=$(ls "$TARGET")
EXIT_CODE=0
BLUE="\e[1;34m"
NC="\e[0m"
CERR="\e[1;31m"
COK="\e[1;32m"
GRAY="\e[90m"
YELLOW="\e[93m"
check_file() {
FILE=$1
LD=$2
echo -n -e "${YELLOW}Checking $FILE:....................${NC}"
if ! file "$(realpath "$FILE")" | grep "$LD" > /dev/null ; then
echo -e "${CERR}FAILED${NC}"
EXIT_CODE=1
echo -e -n "${GRAY}"
file "$(realpath "$FILE")"
echo -e "${NC}"
else
echo -e "${COK}OK${NC}"
echo -e -n "${GRAY}"
readelf -d "$FILE" | grep NEEDED || true
echo -e "${NC}"
fi
}
check() {
ARCH=$1
LD=$2
ROOT=$TARGET/$ARCH/opt/www
echo -e "${BLUE}Checking: $TARGET/$ARCH${NC}"
# check bin directory
for file in "$ROOT"/bin/*; do
check_file "$file" "$LD"
done
# check for libraries
libs=$(find "$ROOT"/lib/ -name "*.so*")
for lib in $libs; do
check_file "$lib" "$LD"
done
}
for dir in $DIRS; do
case $dir in
arm64)
check "$dir" "ARM aarch64"
;;
arm)
check "$dir" "ARM, EABI"
;;
amd64)
check "$dir" "x86-64"
;;
*)
echo "Unkown architecture: $dir, ignore it"
;;
esac
done
exit $EXIT_CODE

View File

@ -6,25 +6,22 @@ arch=$1
tag=$2 tag=$2
DIR=$3 DIR=$3
logo=$4 logo=$4
[ -z $arch ] && echo "1. No architecture provided" && exit 1 [ -z "$arch" ] && echo "1. No architecture provided" && exit 1
[ -z $tag ] && echo "2. No version provided" && exit 1 [ -z "$tag" ] && echo "2. No version provided" && exit 1
[ -z $DIR ] && echo "3. No input dir provided" && exit 1 [ -z "$DIR" ] && echo "3. No input dir provided" && exit 1
[ -z $logo ] && echo "4. No logo file provided" && exit 1 [ -z "$logo" ] && echo "4. No logo file provided" && exit 1
# download the appimagetools # download the appimagetools
echo "Downloading the appimage tools" echo "Downloading the appimage tools"
archname=x86_64 archname=x86_64
case $arch in case $arch in
amd64|x86_64) amd64|x86_64)
archname=x86_64 archname=x86_64
suffix=x86_64
;; ;;
aarch64|arm64) aarch64|arm64)
archname=aarch64 archname=aarch64
suffix=aarch64
;; ;;
armv7l|arm) armv7l|arm)
archname=armhf archname=armhf
suffix=armv7l
;; ;;
*) *)
echo "Unkown architecture" echo "Unkown architecture"
@ -46,7 +43,7 @@ echo "Building app image for $arch"
mkdir -p "$APP_DIR" mkdir -p "$APP_DIR"
cp -rf $DIR/opt "$APP_DIR" cp -rf "$DIR/opt" "$APP_DIR"
rm -rf $APP_DIR/opt/www/include || true rm -rf $APP_DIR/opt/www/include || true
rm -rf $APP_DIR/opt/www/etc/* || true rm -rf $APP_DIR/opt/www/etc/* || true
@ -186,6 +183,6 @@ Categories=Utility;
Terminal=true Terminal=true
EOF EOF
cp $logo $APP_DIR/antos.png cp "$logo" "$APP_DIR/antos.png"
$APP_IMG --runtime-file $APP_RUNT $APP_DIR $DIR/$NAME.AppImage $APP_IMG --runtime-file $APP_RUNT $APP_DIR "$DIR/$NAME.AppImage"

View File

@ -42,11 +42,11 @@ NAME="AntOS_${TAG}_${archname}"
FILE="$NAME.deb" FILE="$NAME.deb"
TMP="/tmp/$NAME" TMP="/tmp/$NAME"
[ -d "$TMP" ] && rm -rf "$TMP" [ -d "$TMP" ] && rm -rf "$TMP"
mkdir -p $TMP mkdir -p "$TMP"
echo "Copying binaries of version $TAG, architecture $ARCH to $TMP" echo "Copying binaries of version $TAG, architecture $ARCH to $TMP"
cp $DIR/opt $TMP/ -rf cp "$DIR/opt" "$TMP/" -rf
cd $TMP cd "$TMP"
mkdir DEBIAN mkdir DEBIAN
cat << EOF >> DEBIAN/control cat << EOF >> DEBIAN/control
@ -59,6 +59,6 @@ Description: All-in-one AntOS web-based remote desktop environment
EOF EOF
cat DEBIAN/control cat DEBIAN/control
cd .. cd ..
dpkg-deb --build $TMP dpkg-deb --build "$TMP"
mv "$FILE" "$DIR/" mv "$FILE" "$DIR/"