You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
830 lines
26 KiB
830 lines
26 KiB
#!/bin/bash
|
|
|
|
# set -e
|
|
# Autocompile Script for HestiaCP package Files.
|
|
# For building from local source folder use "~localsrc" keyword as hesia branch name,
|
|
# and the script will not try to download the arhive from github, since '~' char is
|
|
# not accepted in branch name.
|
|
# Compile but dont install -> ./hst_autocompile.sh --hestia --noinstall --keepbuild '~localsrc'
|
|
# Compile and install -> ./hst_autocompile.sh --hestia --install '~localsrc'
|
|
|
|
# Clear previous screen output
|
|
clear
|
|
|
|
# Define download function
|
|
download_file() {
|
|
local url=$1
|
|
local destination=$2
|
|
local force=$3
|
|
|
|
[ "$HESTIA_DEBUG" ] && echo >&2 DEBUG: Downloading file "$url" to "$destination"
|
|
|
|
# Default destination is the current working directory
|
|
local dstopt=""
|
|
|
|
if [ ! -z "$(echo "$url" | grep -E "\.(gz|gzip|bz2|zip|xz)$")" ]; then
|
|
# When an archive file is downloaded it will be first saved localy
|
|
dstopt="--directory-prefix=$ARCHIVE_DIR"
|
|
local is_archive="true"
|
|
local filename="${url##*/}"
|
|
if [ -z "$filename" ]; then
|
|
echo >&2 "[!] No filename was found in url, exiting ($url)"
|
|
exit 1
|
|
fi
|
|
if [ ! -z "$force" ] && [ -f "$ARCHIVE_DIR/$filename" ]; then
|
|
rm -f $ARCHIVE_DIR/$filename
|
|
fi
|
|
elif [ ! -z "$destination" ]; then
|
|
# Plain files will be written to specified location
|
|
dstopt="-O $destination"
|
|
fi
|
|
# check for corrupted archive
|
|
if [ -f "$ARCHIVE_DIR/$filename" ] && [ "$is_archive" = "true" ]; then
|
|
tar -tzf "$ARCHIVE_DIR/$filename" > /dev/null 2>&1
|
|
if [ $? -ne 0 ]; then
|
|
echo >&2 "[!] Archive $ARCHIVE_DIR/$filename is corrupted, redownloading"
|
|
rm -f $ARCHIVE_DIR/$filename
|
|
fi
|
|
fi
|
|
|
|
if [ ! -f "$ARCHIVE_DIR/$filename" ]; then
|
|
[ "$HESTIA_DEBUG" ] && echo >&2 DEBUG: wget $url -q $dstopt --show-progress --progress=bar:force --limit-rate=3m
|
|
wget $url -q $dstopt --show-progress --progress=bar:force --limit-rate=3m
|
|
if [ $? -ne 0 ]; then
|
|
echo >&2 "[!] Archive $ARCHIVE_DIR/$filename is corrupted and exit script"
|
|
rm -f $ARCHIVE_DIR/$filename
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
if [ ! -z "$destination" ] && [ "$is_archive" = "true" ]; then
|
|
if [ "$destination" = "-" ]; then
|
|
cat "$ARCHIVE_DIR/$filename"
|
|
elif [ -d "$(dirname $destination)" ]; then
|
|
cp "$ARCHIVE_DIR/$filename" "$destination"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
get_branch_file() {
|
|
local filename=$1
|
|
local destination=$2
|
|
[ "$HESTIA_DEBUG" ] && echo >&2 DEBUG: Get branch file "$filename" to "$destination"
|
|
if [ "$use_src_folder" == 'true' ]; then
|
|
if [ -z "$destination" ]; then
|
|
[ "$HESTIA_DEBUG" ] && echo >&2 DEBUG: cp -f "$SRC_DIR/$filename" ./
|
|
cp -f "$SRC_DIR/$filename" ./
|
|
else
|
|
[ "$HESTIA_DEBUG" ] && echo >&2 DEBUG: cp -f "$SRC_DIR/$filename" "$destination"
|
|
cp -f "$SRC_DIR/$filename" "$destination"
|
|
fi
|
|
else
|
|
download_file "https://raw.githubusercontent.com/$REPO/$branch/$filename" "$destination" $3
|
|
fi
|
|
}
|
|
|
|
usage() {
|
|
echo "Usage:"
|
|
echo " $0 (--all|--hestia|--nginx|--php) [options] [branch] [Y]"
|
|
echo ""
|
|
echo " --all Build all hestia packages."
|
|
echo " --hestia Build only the Control Panel package."
|
|
echo " --nginx Build only the backend nginx engine package."
|
|
echo " --php Build only the backend php engine package"
|
|
echo " Options:"
|
|
echo " --install Install generated packages"
|
|
echo " --keepbuild Don't delete downloaded source and build folders"
|
|
echo " --cross Compile hestia package for both AMD64 and ARM64"
|
|
echo " --debug Debug mode"
|
|
echo " --npm Rebuild nmp command"
|
|
echo ""
|
|
echo "For automated builds and installations, you may specify the branch"
|
|
echo "after one of the above flags. To install the packages, specify 'Y'"
|
|
echo "following the branch name."
|
|
echo ""
|
|
echo "Example: bash hst_autocompile.sh --hestia develop Y"
|
|
echo "This would install a Hestia Control Panel package compiled with the"
|
|
echo "develop branch code."
|
|
}
|
|
|
|
hestiacp_vercomp () {
|
|
if [[ $1 == $2 ]]
|
|
then
|
|
return 0
|
|
fi
|
|
local IFS=.
|
|
local i ver1=($1) ver2=($2)
|
|
for ((i=${#ver1[@]}; i<${#ver2[@]}; i++))
|
|
do
|
|
ver1[i]=0
|
|
done
|
|
for ((i=0; i<${#ver1[@]}; i++))
|
|
do
|
|
if [[ -z ${ver2[i]} ]]
|
|
then
|
|
ver2[i]=0
|
|
fi
|
|
if ((10#${ver1[i]} > 10#${ver2[i]}))
|
|
then
|
|
return 1
|
|
fi
|
|
if ((10#${ver1[i]} < 10#${ver2[i]}))
|
|
then
|
|
return 2
|
|
fi
|
|
done
|
|
return 0
|
|
}
|
|
|
|
hestiacp_check_package_version () {
|
|
if [ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ]; then
|
|
return 1
|
|
fi
|
|
IS_RPM="$1"
|
|
if [ "$IS_RPM" = true ]; then
|
|
# Check for rmp based
|
|
pack_version=$(rpm -q --queryformat="%{VERSION}" "$2")
|
|
if [ $? -eq 0 ]; then
|
|
hestiacp_vercomp "$pack_version" "$3"
|
|
RESULT_OF_COMPARISON=$?
|
|
case "$RESULT_OF_COMPARISON" in
|
|
0 ) return 0 ;;
|
|
1 ) return 0 ;;
|
|
esac
|
|
fi
|
|
return 1
|
|
else
|
|
# Debian based not yet implemented
|
|
return 0
|
|
fi
|
|
}
|
|
|
|
|
|
# Set compiling directory
|
|
REPO='hestiacp/hestiacp'
|
|
BUILD_DIR='/tmp/hestiacp-src'
|
|
INSTALL_DIR='/usr/local/hestia'
|
|
SRC_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
|
ARCHIVE_DIR="$SRC_DIR/src/archive/"
|
|
architecture="$(arch)"
|
|
if [ $architecture == 'aarch64' ]; then
|
|
BUILD_ARCH='arm64'
|
|
else
|
|
BUILD_ARCH='amd64'
|
|
fi
|
|
RPM_DIR="$BUILD_DIR/rpm/"
|
|
DEB_DIR="$BUILD_DIR/deb"
|
|
if [ -f '/etc/redhat-release' ]; then
|
|
BUILD_RPM=true
|
|
BUILD_DEB=false
|
|
BUILD_ARCH=$(uname -i)
|
|
OSTYPE='rhel'
|
|
type=$(grep "^ID=" /etc/os-release | cut -f 2 -d '"')
|
|
DISTRO=$type
|
|
# TODO: remove this condition after testing
|
|
if [[ "$type" =~ ^(rhel|almalinux|eurolinux|ol|rocky|centos|msvsphere)$ ]]; then
|
|
release=$(rpm --eval='%rhel')
|
|
fi
|
|
else
|
|
BUILD_RPM=false
|
|
BUILD_DEB=true
|
|
OSTYPE='debian'
|
|
fi
|
|
|
|
# Set packages to compile
|
|
for i in $*; do
|
|
case "$i" in
|
|
--all)
|
|
NGINX_B='true'
|
|
PHP_B='true'
|
|
HESTIA_B='true'
|
|
;;
|
|
--nginx)
|
|
NGINX_B='true'
|
|
;;
|
|
--php)
|
|
PHP_B='true'
|
|
;;
|
|
--hestia)
|
|
HESTIA_B='true'
|
|
;;
|
|
--debug)
|
|
HESTIA_DEBUG='true'
|
|
;;
|
|
--install | Y)
|
|
install='true'
|
|
;;
|
|
--noinstall | N)
|
|
install='false'
|
|
;;
|
|
--keepbuild)
|
|
KEEPBUILD='true'
|
|
;;
|
|
--cross)
|
|
CROSS='true'
|
|
;;
|
|
--help | -h)
|
|
usage
|
|
exit 1
|
|
;;
|
|
--dontinstalldeps)
|
|
dontinstalldeps='true'
|
|
;;
|
|
--npm)
|
|
NPM_REBUILD='true'
|
|
;;
|
|
*)
|
|
branch="$i"
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [[ $# -eq 0 ]]; then
|
|
usage
|
|
exit 1
|
|
fi
|
|
|
|
# Clear previous screen output
|
|
clear
|
|
|
|
# Set command variables
|
|
if [ -z $branch ]; then
|
|
echo -n "Please enter the name of the branch to build from (e.g. main): "
|
|
read branch
|
|
fi
|
|
|
|
if [ $(echo "$branch" | grep '^~localsrc') ]; then
|
|
branch=$(echo "$branch" | sed 's/^~//')
|
|
use_src_folder='true'
|
|
else
|
|
use_src_folder='false'
|
|
fi
|
|
|
|
if [ -z $install ]; then
|
|
echo -n 'Would you like to install the compiled packages? [y/N] '
|
|
read install
|
|
fi
|
|
|
|
# Set Version for compiling
|
|
if [ -e "/etc/redhat-release" ]; then
|
|
if [ -f "$SRC_DIR/src/rpm/hestia/hestia.spec" ] && [ "$use_src_folder" == 'true' ]; then
|
|
BUILD_VER=$(cat $SRC_DIR/src/rpm/hestia/hestia.spec | grep "Version:" | awk '{ print $2 }')
|
|
NGINX_V=$(cat $SRC_DIR/src/rpm/nginx/hestia-nginx.spec | grep "Version:" | awk '{ print $2 }')
|
|
PHP_V=$(cat $SRC_DIR/src/rpm/php/hestia-php.spec | grep "Version:" | awk '{ print $2 }')
|
|
else
|
|
BUILD_VER=$(curl -s https://raw.githubusercontent.com/$REPO/$branch/src/rpm/hestia/hestia.spec | grep "Version:" | awk '{ print $2 }')
|
|
NGINX_V=$(curl -s https://raw.githubusercontent.com/$REPO/$branch/src/rpm/nginx/hestia-nginx.spec | grep "Version:" | awk '{ print $2 }')
|
|
PHP_V=$(curl -s https://raw.githubusercontent.com/$REPO/$branch/src/rpm/php/hestia-php.spec | grep "Version:" | awk '{ print $2 }')
|
|
fi
|
|
else
|
|
if [ -f "$SRC_DIR/src/deb/hestia/control" ] && [ "$use_src_folder" == 'true' ]; then
|
|
BUILD_VER=$(cat $SRC_DIR/src/deb/hestia/control | grep "Version:" | cut -d' ' -f2)
|
|
NGINX_V=$(cat $SRC_DIR/src/deb/nginx/control | grep "Version:" | cut -d' ' -f2)
|
|
PHP_V=$(cat $SRC_DIR/src/deb/php/control | grep "Version:" | cut -d' ' -f2)
|
|
else
|
|
BUILD_VER=$(curl -s https://raw.githubusercontent.com/$REPO/$branch/src/deb/hestia/control | grep "Version:" | cut -d' ' -f2)
|
|
NGINX_V=$(curl -s https://raw.githubusercontent.com/$REPO/$branch/src/deb/nginx/control | grep "Version:" | cut -d' ' -f2)
|
|
PHP_V=$(curl -s https://raw.githubusercontent.com/$REPO/$branch/src/deb/php/control | grep "Version:" | cut -d' ' -f2)
|
|
fi
|
|
fi
|
|
|
|
if [ -z "$BUILD_VER" ]; then
|
|
echo "Error: Branch invalid, could not detect version"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Build version $BUILD_VER, with Nginx version $NGINX_V and PHP version $PHP_V"
|
|
|
|
if [ -e "/etc/redhat-release" ]; then
|
|
HESTIA_V="${BUILD_VER}"
|
|
else
|
|
HESTIA_V="${BUILD_VER}_${BUILD_ARCH}"
|
|
fi
|
|
OPENSSL_V='3.1.1'
|
|
PCRE_V='10.42'
|
|
ZLIB_V='1.2.13'
|
|
|
|
# Create build directories
|
|
if [ "$KEEPBUILD" != 'true' ]; then
|
|
rm -rf $BUILD_DIR
|
|
fi
|
|
mkdir -p $BUILD_DIR
|
|
mkdir -p $DEB_DIR
|
|
mkdir -p $RPM_DIR
|
|
mkdir -p $ARCHIVE_DIR
|
|
|
|
# Define a timestamp function
|
|
timestamp() {
|
|
date +%s
|
|
}
|
|
|
|
if [ "$dontinstalldeps" != 'true' ]; then
|
|
# Install needed software
|
|
if [ "$OSTYPE" = 'rhel' ]; then
|
|
# Set package dependencies for compiling
|
|
SOFTWARE='wget tar git mock'
|
|
|
|
echo "Updating system DNF repositories..."
|
|
dnf install -y -q dnf-plugins-core epel-release
|
|
if [ "$release" -eq 8 ]; then
|
|
dnf config-manager --set-enabled powertools > /dev/null 2>&1
|
|
else
|
|
dnf config-manager --set-enabled crb > /dev/null 2>&1
|
|
fi
|
|
dnf upgrade -y -q
|
|
echo "Installing dependencies for compilation..."
|
|
dnf install -y -q $SOFTWARE
|
|
|
|
mock -r msvsphere+epel-${release}-$BUILD_ARCH --clean
|
|
else
|
|
# Set package dependencies for compiling
|
|
SOFTWARE='wget tar git curl build-essential libxml2-dev libz-dev libzip-dev libgmp-dev libcurl4-gnutls-dev unzip openssl libssl-dev pkg-config libsqlite3-dev libonig-dev rpm lsb-release'
|
|
|
|
echo "Updating system APT repositories..."
|
|
apt-get -qq update > /dev/null 2>&1
|
|
echo "Installing dependencies for compilation..."
|
|
apt-get -qq install -y $SOFTWARE > /dev/null 2>&1
|
|
|
|
# Fix for Debian PHP Envroiment
|
|
if [ $BUILD_ARCH == "amd64" ]; then
|
|
if [ ! -L /usr/local/include/curl ]; then
|
|
ln -s /usr/include/x86_64-linux-gnu/curl /usr/local/include/curl
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# Get system cpu cores
|
|
NUM_CPUS=$(grep "^cpu cores" /proc/cpuinfo | uniq | awk '{print $4}')
|
|
|
|
if [ "$HESTIA_DEBUG" ]; then
|
|
if [ "$OSTYPE" = 'rhel' ]; then
|
|
echo "OS type : RHEL / Rocky Linux / AlmaLinux / EuroLinux / MSVSphere"
|
|
else
|
|
echo "OS type : Debian / Ubuntu"
|
|
fi
|
|
echo "Branch : $branch"
|
|
echo "Install : $install"
|
|
echo "Build RPM : $BUILD_RPM"
|
|
echo "Build DEB : $BUILD_DEB"
|
|
echo "Hestia version : $BUILD_VER"
|
|
echo "Nginx version : $NGINX_V"
|
|
echo "PHP version : $PHP_V"
|
|
echo "Architecture : $BUILD_ARCH"
|
|
echo "Debug mode : $HESTIA_DEBUG"
|
|
echo "Source directory : $SRC_DIR"
|
|
fi
|
|
|
|
# Generate Links for sourcecode
|
|
HESTIA_ARCHIVE_LINK='https://github.com/hestiacp/hestiacp/archive/'$branch'.tar.gz'
|
|
if [[ $NGINX_V =~ - ]]; then
|
|
NGINX='https://nginx.org/download/nginx-'$(echo $NGINX_V | cut -d"-" -f1)'.tar.gz'
|
|
else
|
|
NGINX='https://nginx.org/download/nginx-'$(echo $NGINX_V | cut -d"~" -f1)'.tar.gz'
|
|
fi
|
|
|
|
OPENSSL='https://www.openssl.org/source/openssl-'$OPENSSL_V'.tar.gz'
|
|
PCRE='https://github.com/PCRE2Project/pcre2/releases/download/pcre2-'$PCRE_V'/pcre2-'$PCRE_V'.tar.gz'
|
|
ZLIB='https://github.com/madler/zlib/archive/refs/tags/v'$ZLIB_V'.tar.gz'
|
|
|
|
if [[ $PHP_V =~ - ]]; then
|
|
PHP='http://de2.php.net/distributions/php-'$(echo $PHP_V | cut -d"-" -f1)'.tar.gz'
|
|
else
|
|
PHP='http://de2.php.net/distributions/php-'$(echo $PHP_V | cut -d"~" -f1)'.tar.gz'
|
|
fi
|
|
|
|
# Forward slashes in branchname are replaced with dashes to match foldername in github archive.
|
|
branch_dash=$(echo "$branch" | sed 's/\//-/g')
|
|
|
|
#################################################################################
|
|
#
|
|
# Building hestia-nginx
|
|
#
|
|
#################################################################################
|
|
|
|
if [ "$NGINX_B" = true ]; then
|
|
echo "Building hestia-nginx package..."
|
|
if [ "$CROSS" = "true" ]; then
|
|
echo "Cross compile not supported for hestia-nginx or hestia-php"
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$BUILD_DEB" = true ]; then
|
|
# Change to build directory
|
|
cd $BUILD_DIR
|
|
|
|
BUILD_DIR_HESTIANGINX=$BUILD_DIR/hestia-nginx_$NGINX_V
|
|
if [[ $NGINX_V =~ - ]]; then
|
|
BUILD_DIR_NGINX=$BUILD_DIR/nginx-$(echo $NGINX_V | cut -d"-" -f1)
|
|
else
|
|
BUILD_DIR_NGINX=$BUILD_DIR/nginx-$(echo $NGINX_V | cut -d"~" -f1)
|
|
fi
|
|
|
|
if [ "$KEEPBUILD" != 'true' ] || [ ! -d "$BUILD_DIR_HESTIANGINX" ]; then
|
|
# Check if target directory exist
|
|
if [ -d "$BUILD_DIR_HESTIANGINX" ]; then
|
|
#mv $BUILD_DIR/hestia-nginx_$NGINX_V $BUILD_DIR/hestia-nginx_$NGINX_V-$(timestamp)
|
|
rm -r "$BUILD_DIR_HESTIANGINX"
|
|
fi
|
|
|
|
# Create directory
|
|
mkdir -p $BUILD_DIR_HESTIANGINX
|
|
|
|
# Download and unpack source files
|
|
download_file $NGINX '-' | tar xz
|
|
download_file $OPENSSL '-' | tar xz
|
|
download_file $PCRE '-' | tar xz
|
|
download_file $ZLIB '-' | tar xz
|
|
|
|
# Change to nginx directory
|
|
cd $BUILD_DIR_NGINX
|
|
|
|
# configure nginx
|
|
./configure --prefix=/usr/local/hestia/nginx \
|
|
--with-http_v2_module \
|
|
--with-http_ssl_module \
|
|
--with-openssl=../openssl-$OPENSSL_V \
|
|
--with-openssl-opt=enable-ec_nistp_64_gcc_128 \
|
|
--with-openssl-opt=no-nextprotoneg \
|
|
--with-openssl-opt=no-weak-ssl-ciphers \
|
|
--with-openssl-opt=no-ssl3 \
|
|
--with-pcre=../pcre2-$PCRE_V \
|
|
--with-pcre-jit \
|
|
--with-zlib=../zlib-$ZLIB_V
|
|
fi
|
|
|
|
# Change to nginx directory
|
|
cd $BUILD_DIR_NGINX
|
|
|
|
# Check install directory and remove if exists
|
|
if [ -d "$BUILD_DIR$INSTALL_DIR" ]; then
|
|
rm -r "$BUILD_DIR$INSTALL_DIR"
|
|
fi
|
|
|
|
# Copy local hestia source files
|
|
if [ "$use_src_folder" == 'true' ] && [ -d $SRC_DIR ]; then
|
|
cp -rf "$SRC_DIR/" $BUILD_DIR/hestiacp-$branch_dash
|
|
fi
|
|
|
|
# Create the files and install them
|
|
make -j $NUM_CPUS && make DESTDIR=$BUILD_DIR install
|
|
|
|
# Clear up unused files
|
|
if [ "$KEEPBUILD" != 'true' ]; then
|
|
rm -r $BUILD_DIR_NGINX $BUILD_DIR/openssl-$OPENSSL_V $BUILD_DIR/pcre2-$PCRE_V $BUILD_DIR/zlib-$ZLIB_V
|
|
fi
|
|
cd $BUILD_DIR_HESTIANGINX
|
|
|
|
# Move nginx directory
|
|
mkdir -p $BUILD_DIR_HESTIANGINX/usr/local/hestia
|
|
rm -rf $BUILD_DIR_HESTIANGINX/usr/local/hestia/nginx
|
|
mv $BUILD_DIR/usr/local/hestia/nginx $BUILD_DIR_HESTIANGINX/usr/local/hestia/
|
|
|
|
# Remove original nginx.conf (will use custom)
|
|
rm -f $BUILD_DIR_HESTIANGINX/usr/local/hestia/nginx/conf/nginx.conf
|
|
|
|
# copy binary
|
|
mv $BUILD_DIR_HESTIANGINX/usr/local/hestia/nginx/sbin/nginx $BUILD_DIR_HESTIANGINX/usr/local/hestia/nginx/sbin/hestia-nginx
|
|
|
|
# change permission and build the package
|
|
cd $BUILD_DIR
|
|
chown -R root:root $BUILD_DIR_HESTIANGINX
|
|
# Get Debian package files
|
|
mkdir -p $BUILD_DIR_HESTIANGINX/DEBIAN
|
|
get_branch_file 'src/deb/nginx/control' "$BUILD_DIR_HESTIANGINX/DEBIAN/control"
|
|
if [ "$BUILD_ARCH" != "amd64" ]; then
|
|
sed -i "s/amd64/${BUILD_ARCH}/g" "$BUILD_DIR_HESTIANGINX/DEBIAN/control"
|
|
fi
|
|
get_branch_file 'src/deb/nginx/copyright' "$BUILD_DIR_HESTIANGINX/DEBIAN/copyright"
|
|
get_branch_file 'src/deb/nginx/postinst' "$BUILD_DIR_HESTIANGINX/DEBIAN/postinst"
|
|
get_branch_file 'src/deb/nginx/postrm' "$BUILD_DIR_HESTIANGINX/DEBIAN/portrm"
|
|
chmod +x "$BUILD_DIR_HESTIANGINX/DEBIAN/postinst"
|
|
chmod +x "$BUILD_DIR_HESTIANGINX/DEBIAN/portrm"
|
|
|
|
# Init file
|
|
mkdir -p $BUILD_DIR_HESTIANGINX/etc/init.d
|
|
get_branch_file 'src/deb/nginx/hestia' "$BUILD_DIR_HESTIANGINX/etc/init.d/hestia"
|
|
chmod +x "$BUILD_DIR_HESTIANGINX/etc/init.d/hestia"
|
|
|
|
# Custom config
|
|
get_branch_file 'src/deb/nginx/nginx.conf' "${BUILD_DIR_HESTIANGINX}/usr/local/hestia/nginx/conf/nginx.conf"
|
|
|
|
# Build the package
|
|
echo Building Nginx DEB
|
|
dpkg-deb -Zxz --build $BUILD_DIR_HESTIANGINX $DEB_DIR
|
|
|
|
rm -r $BUILD_DIR/usr
|
|
|
|
if [ "$KEEPBUILD" != 'true' ]; then
|
|
# Clean up the source folder
|
|
rm -r hestia- nginx_$NGINX_V
|
|
rm -rf $BUILD_DIR/rpmbuild
|
|
if [ "$use_src_folder" == 'true' ] && [ -d $BUILD_DIR/hestiacp-$branch_dash ]; then
|
|
rm -r $BUILD_DIR/hestiacp-$branch_dash
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
if [ "$BUILD_RPM" = true ]; then
|
|
# Get RHEL package files
|
|
get_branch_file 'src/rpm/nginx/nginx.conf' "$BUILD_DIR/nginx.conf"
|
|
get_branch_file 'src/rpm/nginx/hestia-nginx.spec' "$BUILD_DIR/hestia-nginx.spec"
|
|
get_branch_file 'src/rpm/nginx/hestia-nginx.service' "$BUILD_DIR/hestia-nginx.service"
|
|
|
|
# Download source files
|
|
download_file $NGINX $BUILD_DIR
|
|
|
|
# Build the package
|
|
echo Building Nginx RPM
|
|
mock -r msvsphere+epel-${release}-$BUILD_ARCH --sources $BUILD_DIR --spec $BUILD_DIR/hestia-nginx.spec --resultdir $RPM_DIR
|
|
rm -f $BUILD_DIR/*
|
|
fi
|
|
fi
|
|
|
|
#################################################################################
|
|
#
|
|
# Building hestia-php
|
|
#
|
|
#################################################################################
|
|
|
|
if [ "$PHP_B" = true ]; then
|
|
if [ "$CROSS" = "true" ]; then
|
|
echo "Cross compile not supported for hestia-nginx or hestia-php"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Building hestia-php package..."
|
|
|
|
if [ "$BUILD_DEB" = true ]; then
|
|
BUILD_DIR_HESTIAPHP=$BUILD_DIR/hestia-php_$PHP_V
|
|
|
|
BUILD_DIR_PHP=$BUILD_DIR/php-$(echo $PHP_V | cut -d"~" -f1)
|
|
|
|
if [[ $PHP_V =~ - ]]; then
|
|
BUILD_DIR_PHP=$BUILD_DIR/php-$(echo $PHP_V | cut -d"-" -f1)
|
|
else
|
|
BUILD_DIR_PHP=$BUILD_DIR/php-$(echo $PHP_V | cut -d"~" -f1)
|
|
fi
|
|
|
|
if [ "$KEEPBUILD" != 'true' ] || [ ! -d "$BUILD_DIR_HESTIAPHP" ]; then
|
|
# Check if target directory exist
|
|
if [ -d $BUILD_DIR_HESTIAPHP ]; then
|
|
rm -r $BUILD_DIR_HESTIAPHP
|
|
fi
|
|
|
|
# Create directory
|
|
mkdir -p $BUILD_DIR_HESTIAPHP
|
|
|
|
# Download and unpack source files
|
|
cd $BUILD_DIR
|
|
download_file $PHP '-' | tar xz
|
|
|
|
# Change to untarred php directory
|
|
cd $BUILD_DIR_PHP
|
|
|
|
# Configure PHP
|
|
./configure --prefix=/usr/local/hestia/php \
|
|
--with-libdir=lib/$(arch)-linux-gnu \
|
|
--enable-fpm --with-fpm-user=admin --with-fpm-group=admin \
|
|
--with-openssl \
|
|
--with-mysqli \
|
|
--with-gettext \
|
|
--with-curl \
|
|
--with-zip \
|
|
--with-gmp \
|
|
--enable-mbstring
|
|
fi
|
|
|
|
cd $BUILD_DIR_PHP
|
|
|
|
# Create the files and install them
|
|
make -j $NUM_CPUS && make INSTALL_ROOT=$BUILD_DIR install
|
|
|
|
# Copy local hestia source files
|
|
if [ "$use_src_folder" == 'true' ] && [ -d $SRC_DIR ]; then
|
|
[ "$HESTIA_DEBUG" ] && echo DEBUG: cp -rf "$SRC_DIR/" $BUILD_DIR/hestiacp-$branch_dash
|
|
cp -rf "$SRC_DIR/" $BUILD_DIR/hestiacp-$branch_dash
|
|
fi
|
|
# Move php directory
|
|
[ "$HESTIA_DEBUG" ] && echo DEBUG: mkdir -p $BUILD_DIR_HESTIAPHP/usr/local/hestia
|
|
mkdir -p $BUILD_DIR_HESTIAPHP/usr/local/hestia
|
|
|
|
[ "$HESTIA_DEBUG" ] && echo DEBUG: rm -r $BUILD_DIR_HESTIAPHP/usr/local/hestia/php
|
|
if [ -d $BUILD_DIR_HESTIAPHP/usr/local/hestia/php ]; then
|
|
rm -r $BUILD_DIR_HESTIAPHP/usr/local/hestia/php
|
|
fi
|
|
|
|
[ "$HESTIA_DEBUG" ] && echo DEBUG: mv ${BUILD_DIR}/usr/local/hestia/php ${BUILD_DIR_HESTIAPHP}/usr/local/hestia/
|
|
mv ${BUILD_DIR}/usr/local/hestia/php ${BUILD_DIR_HESTIAPHP}/usr/local/hestia/
|
|
|
|
# copy binary
|
|
[ "$HESTIA_DEBUG" ] && echo DEBUG: cp $BUILD_DIR_HESTIAPHP/usr/local/hestia/php/sbin/php-fpm $BUILD_DIR_HESTIAPHP/usr/local/hestia/php/sbin/hestia-php
|
|
cp $BUILD_DIR_HESTIAPHP/usr/local/hestia/php/sbin/php-fpm $BUILD_DIR_HESTIAPHP/usr/local/hestia/php/sbin/hestia-php
|
|
|
|
# Change permissions and build the package
|
|
chown -R root:root $BUILD_DIR_HESTIAPHP
|
|
# Get Debian package files
|
|
[ "$HESTIA_DEBUG" ] && echo DEBUG: mkdir -p $BUILD_DIR_HESTIAPHP/DEBIAN
|
|
mkdir -p $BUILD_DIR_HESTIAPHP/DEBIAN
|
|
get_branch_file 'src/deb/php/control' "$BUILD_DIR_HESTIAPHP/DEBIAN/control"
|
|
if [ "$BUILD_ARCH" != "amd64" ]; then
|
|
sed -i "s/amd64/${BUILD_ARCH}/g" "$BUILD_DIR_HESTIAPHP/DEBIAN/control"
|
|
fi
|
|
|
|
os=$(lsb_release -is)
|
|
release=$(lsb_release -rs)
|
|
if [[ "$os" = "Ubuntu" ]] && [[ "$release" = "20.04" ]]; then
|
|
sed -i "/Conflicts: libzip5/d" "$BUILD_DIR_HESTIAPHP/DEBIAN/control"
|
|
sed -i "s/libzip4/libzip5/g" "$BUILD_DIR_HESTIAPHP/DEBIAN/control"
|
|
fi
|
|
|
|
get_branch_file 'src/deb/php/copyright' "$BUILD_DIR_HESTIAPHP/DEBIAN/copyright"
|
|
get_branch_file 'src/deb/php/postinst' "$BUILD_DIR_HESTIAPHP/DEBIAN/postinst"
|
|
chmod +x $BUILD_DIR_HESTIAPHP/DEBIAN/postinst
|
|
# Get custom config
|
|
get_branch_file 'src/deb/php/php-fpm.conf' "${BUILD_DIR_HESTIAPHP}/usr/local/hestia/php/etc/php-fpm.conf"
|
|
get_branch_file 'src/deb/php/php.ini' "${BUILD_DIR_HESTIAPHP}/usr/local/hestia/php/lib/php.ini"
|
|
|
|
# Build the package
|
|
echo Building PHP DEB
|
|
[ "$HESTIA_DEBUG" ] && echo DEBUG: dpkg-deb -Zxz --build $BUILD_DIR_HESTIAPHP $DEB_DIR
|
|
dpkg-deb -Zxz --build $BUILD_DIR_HESTIAPHP $DEB_DIR
|
|
|
|
rm -r $BUILD_DIR/usr
|
|
|
|
# clear up the source folder
|
|
if [ "$KEEPBUILD" != 'true' ]; then
|
|
rm -r $BUILD_DIR/php-$(echo $PHP_V | cut -d"~" -f1)
|
|
rm -r $BUILD_DIR_HESTIAPHP
|
|
if [ "$use_src_folder" == 'true' ] && [ -d $BUILD_DIR/hestiacp-$branch_dash ]; then
|
|
rm -r $BUILD_DIR/hestiacp-$branch_dash
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
if [ "$BUILD_RPM" = true ]; then
|
|
# Get RHEL package files
|
|
get_branch_file 'src/rpm/php/php-fpm.conf' "$BUILD_DIR/php-fpm.conf"
|
|
get_branch_file 'src/rpm/php/php.ini' "$BUILD_DIR/php.ini"
|
|
get_branch_file 'src/rpm/php/hestia-php.spec' "$BUILD_DIR/hestia-php.spec"
|
|
get_branch_file 'src/rpm/php/hestia-php.service' "$BUILD_DIR/hestia-php.service"
|
|
|
|
# Download source files
|
|
download_file $PHP "$BUILD_DIR/"
|
|
|
|
# Build RPM package
|
|
echo Building PHP RPM
|
|
mock -r msvsphere+epel-${release}-$BUILD_ARCH --sources $BUILD_DIR --spec $BUILD_DIR/hestia-php.spec --resultdir $RPM_DIR
|
|
rm -f $BUILD_DIR/*
|
|
fi
|
|
fi
|
|
|
|
#################################################################################
|
|
#
|
|
# Building hestia
|
|
#
|
|
#################################################################################
|
|
|
|
arch="$BUILD_ARCH"
|
|
|
|
if [ "$HESTIA_B" = true ]; then
|
|
if [ "$CROSS" = "true" ]; then
|
|
arch="amd64 arm64"
|
|
fi
|
|
for BUILD_ARCH in $arch; do
|
|
echo "Building Hestia Control Panel package..."
|
|
|
|
if [ "$BUILD_DEB" = true ]; then
|
|
BUILD_DIR_HESTIA=$BUILD_DIR/hestia_$HESTIA_V
|
|
|
|
# Change to build directory
|
|
cd $BUILD_DIR
|
|
|
|
if [ "$KEEPBUILD" != 'true' ] || [ ! -d "$BUILD_DIR_HESTIA" ]; then
|
|
# Check if target directory exist
|
|
if [ -d $BUILD_DIR_HESTIA ]; then
|
|
rm -r $BUILD_DIR_HESTIA
|
|
fi
|
|
|
|
# Create directory
|
|
mkdir -p $BUILD_DIR_HESTIA
|
|
fi
|
|
|
|
cd $BUILD_DIR
|
|
rm -rf $BUILD_DIR/hestiacp-$branch_dash
|
|
# Download and unpack source files
|
|
if [ "$use_src_folder" == 'true' ]; then
|
|
[ "$HESTIA_DEBUG" ] && echo DEBUG: cp -rf "$SRC_DIR/" $BUILD_DIR/hestiacp-$branch_dash
|
|
cp -rf "$SRC_DIR/" $BUILD_DIR/hestiacp-$branch_dash
|
|
elif [ -d $SRC_DIR ]; then
|
|
download_file $HESTIA_ARCHIVE_LINK '-' 'fresh' | tar xz
|
|
fi
|
|
|
|
mkdir -p $BUILD_DIR_HESTIA/usr/local/hestia
|
|
|
|
# Move needed directories
|
|
cd $BUILD_DIR/hestiacp-$branch_dash
|
|
cp -rf bin func install web $BUILD_DIR_HESTIA/usr/local/hestia/
|
|
|
|
# Set permissions
|
|
find $BUILD_DIR_HESTIA/usr/local/hestia/ -type f -exec chmod -x {} \;
|
|
|
|
# Allow send email via /usr/local/hestia/web/inc/mail-wrapper.php via cli
|
|
chmod +x $BUILD_DIR_HESTIA/usr/local/hestia/web/inc/mail-wrapper.php
|
|
# Allow the executable to be executed
|
|
chmod +x $BUILD_DIR_HESTIA/usr/local/hestia/bin/*
|
|
find $BUILD_DIR_HESTIA/usr/local/hestia/install/ \( -name '*.sh' \) -exec chmod +x {} \;
|
|
chmod -x $BUILD_DIR_HESTIA/usr/local/hestia/install/*.sh
|
|
chown -R root:root $BUILD_DIR_HESTIA
|
|
# Get Debian package files
|
|
mkdir -p $BUILD_DIR_HESTIA/DEBIAN
|
|
get_branch_file 'src/deb/hestia/control' "$BUILD_DIR_HESTIA/DEBIAN/control"
|
|
if [ "$BUILD_ARCH" != "amd64" ]; then
|
|
sed -i "s/amd64/${BUILD_ARCH}/g" "$BUILD_DIR_HESTIA/DEBIAN/control"
|
|
fi
|
|
get_branch_file 'src/deb/hestia/copyright' "$BUILD_DIR_HESTIA/DEBIAN/copyright"
|
|
get_branch_file 'src/deb/hestia/preinst' "$BUILD_DIR_HESTIA/DEBIAN/preinst"
|
|
get_branch_file 'src/deb/hestia/postinst' "$BUILD_DIR_HESTIA/DEBIAN/postinst"
|
|
chmod +x $BUILD_DIR_HESTIA/DEBIAN/postinst
|
|
chmod +x $BUILD_DIR_HESTIA/DEBIAN/preinst
|
|
|
|
echo Building Hestia DEB
|
|
dpkg-deb -Zxz --build $BUILD_DIR_HESTIA $DEB_DIR
|
|
|
|
# clear up the source folder
|
|
if [ "$KEEPBUILD" != 'true' ]; then
|
|
rm -r $BUILD_DIR_HESTIA
|
|
rm -rf hestiacp-$branch_dash
|
|
fi
|
|
cd $BUILD_DIR/hestiacp-$branch_dash
|
|
fi
|
|
|
|
if [ "$BUILD_RPM" = true ]; then
|
|
|
|
# Get RHEL package files
|
|
get_branch_file 'src/rpm/hestia/hestia.spec' "$BUILD_DIR/hestia.spec"
|
|
get_branch_file 'src/rpm/hestia/hestia.service' "$BUILD_DIR/hestia.service"
|
|
get_branch_file 'src/rpm/hestia/hestia.tmpfiles' "$BUILD_DIR/hestia.tmpfiles"
|
|
|
|
#Get nodejs 20.x version
|
|
if [ "$NPM_REBUILD" = true ]; then
|
|
echo "Update nodejs up to 20.x version"
|
|
hestiacp_check_package_version $BUILD_RPM "nodejs" "20.0"
|
|
IS_NEEDED_NODEJS=$?
|
|
if [ "$IS_NEEDED_NODEJS" = "1" ]; then
|
|
dnf erase nodejs -y
|
|
curl -fsSL https://rpm.nodesource.com/setup_20.x | bash -
|
|
dnf install nodejs -y
|
|
fi
|
|
pushd "$SRC_DIR" || { echo "Can't change directory to $SRC_DIR, javascript rebuild aborted"; exit 1; }
|
|
npm install
|
|
npm run build
|
|
popd || { echo "Can't restore directory from $SRC_DIR, javascript rebuild aborted"; exit 1; }
|
|
fi
|
|
|
|
#Prepare mo files
|
|
pushd ../web/locale
|
|
./hst_convert_po2mo.sh
|
|
popd
|
|
|
|
# Generate source tar.gz
|
|
tar -h --exclude=".git" --exclude=".github" --exclude=".husky" --exclude=".vscode" --exclude="node_modules" --exclude="src/archive" --exclude="*.po" --exclude="*.mo.orig" -czf $BUILD_DIR/hestia-$BUILD_VER.tar.gz -C $SRC_DIR/.. hestiacp
|
|
|
|
# Build RPM package
|
|
echo Building Hestia RPM
|
|
mock -r msvsphere+epel-${release}-$BUILD_ARCH --sources $BUILD_DIR --spec $BUILD_DIR/hestia.spec --resultdir $RPM_DIR
|
|
rm -f $BUILD_DIR/*
|
|
fi
|
|
|
|
done
|
|
fi
|
|
|
|
#################################################################################
|
|
#
|
|
# Install Packages
|
|
#
|
|
#################################################################################
|
|
|
|
if [ "$install" = 'yes' ] || [ "$install" = 'y' ] || [ "$install" = 'true' ]; then
|
|
# Install all available packages
|
|
echo "Installing packages..."
|
|
if [ "$OSTYPE" = 'rhel' ]; then
|
|
rpms=""
|
|
for i in $(ls $RPM_DIR/*.rpm | grep -v '\.src\.rpm'); do
|
|
rpms+="$RPM_DIR/$i "
|
|
done
|
|
dnf -y localinstall $rpms
|
|
if [ $? -ne 0 ]; then
|
|
exit 1
|
|
fi
|
|
else
|
|
for i in $DEB_DIR/*.deb; do
|
|
dpkg -i $i
|
|
if [ $? -ne 0 ]; then
|
|
exit 1
|
|
fi
|
|
done
|
|
fi
|
|
unset $answer
|
|
fi
|