Add swap file creation when installing packages

This commit is contained in:
Evgeniy Antonyuk 2023-07-27 14:20:50 +05:00
parent f281277f6b
commit c04b1c3324
8 changed files with 102 additions and 2 deletions

View File

@ -7,6 +7,7 @@ DS_COMMON_NAME="onlyoffice";
product="docspace"
GIT_BRANCH="master"
INSTALLATION_TYPE="ENTERPRISE"
MAKESWAP="true"
RES_APP_INSTALLED="is already installed";
RES_APP_CHECK_PORTS="uses ports"
RES_CHECK_PORTS="please, make sure that the ports are free.";
@ -72,6 +73,13 @@ while [ "$1" != "" ]; do
shift
fi
;;
-ms | --makeswap )
if [ "$2" != "" ]; then
MAKESWAP=$2
shift
fi
;;
-? | -h | --help )
echo " Usage $0 [PARAMETER] [[PARAMETER], ...]"
@ -83,6 +91,7 @@ while [ "$1" != "" ]; do
echo " -js, --jwtsecret defines the secret key to validate the JWT in the request"
echo " -ls, --local_scripts use 'true' to run local scripts (true|false)"
echo " -skiphc, --skiphardwarecheck use to skip hardware check (true|false)"
echo " -ms, --makeswap make swap file (true|false)"
echo " -?, -h, --help this help"
echo
exit 0

View File

@ -85,6 +85,10 @@ elif [ "$UPDATE" = "true" ] && [ "$PRODUCT_INSTALLED" = "true" ]; then
fi
fi
if [ "$MAKESWAP" == "true" ]; then
make_swap
fi
echo ""
echo "$RES_INSTALL_SUCCESS"
echo "$RES_QUESTIONS"

View File

@ -2,6 +2,24 @@
set -e
make_swap () {
DISK_REQUIREMENTS=6144; #6Gb free space
MEMORY_REQUIREMENTS=11000; #RAM ~12Gb
SWAPFILE="/${PRODUCT}_swapfile";
AVAILABLE_DISK_SPACE=$(df -m / | tail -1 | awk '{ print $4 }');
TOTAL_MEMORY=$(free -m | grep -oP '\d+' | head -n 1);
EXIST=$(swapon -s | awk '{ print $1 }' | { grep -x ${SWAPFILE} || true; });
if [[ -z $EXIST ]] && [ ${TOTAL_MEMORY} -lt ${MEMORY_REQUIREMENTS} ] && [ ${AVAILABLE_DISK_SPACE} -gt ${DISK_REQUIREMENTS} ]; then
fallocate -l 6G ${SWAPFILE}
chmod 600 ${SWAPFILE}
mkswap ${SWAPFILE}
swapon ${SWAPFILE}
echo "$SWAPFILE none swap sw 0 0" >> /etc/fstab
fi
}
command_exists () {
type "$1" &> /dev/null;
}

View File

@ -43,6 +43,9 @@ CONTAINER_NAME="${PACKAGE_SYSNAME}-api"
NETWORK_NAME=${PACKAGE_SYSNAME}
SWAPFILE="/${PRODUCT}_swapfile";
MAKESWAP="true";
DISK_REQUIREMENTS=40960;
MEMORY_REQUIREMENTS=5500;
CORE_REQUIREMENTS=2;
@ -310,6 +313,13 @@ while [ "$1" != "" ]; do
fi
;;
-ms | --makeswap )
if [ "$2" != "" ]; then
MAKESWAP=$2
shift
fi
;;
-? | -h | --help )
echo " Usage: bash $HELP_TARGET [PARAMETER] [[PARAMETER], ...]"
echo
@ -341,6 +351,7 @@ while [ "$1" != "" ]; do
echo " -mysqlp, --mysqlpassword $PRODUCT database password"
echo " -mysqlh, --mysqlhost mysql server host"
echo " -dbm, --databasemigration database migration (true|false)"
echo " -ms, --makeswap make swap file (true|false)"
echo " -?, -h, --help this help"
echo
echo " Install all the components without document server:"
@ -1048,6 +1059,30 @@ install_product () {
docker-compose -f $BASE_DIR/healthchecks.yml up -d
}
make_swap () {
DISK_REQUIREMENTS=6144; #6Gb free space
MEMORY_REQUIREMENTS=11000; #RAM ~12Gb
AVAILABLE_DISK_SPACE=$(df -m / | tail -1 | awk '{ print $4 }');
TOTAL_MEMORY=$(free -m | grep -oP '\d+' | head -n 1);
EXIST=$(swapon -s | awk '{ print $1 }' | { grep -x ${SWAPFILE} || true; });
if [[ -z $EXIST ]] && [ ${TOTAL_MEMORY} -lt ${MEMORY_REQUIREMENTS} ] && [ ${AVAILABLE_DISK_SPACE} -gt ${DISK_REQUIREMENTS} ]; then
if [ "${DIST}" == "Ubuntu" ] || [ "${DIST}" == "Debian" ]; then
fallocate -l 6G ${SWAPFILE}
else
dd if=/dev/zero of=${SWAPFILE} count=6144 bs=1MiB
fi
chmod 600 ${SWAPFILE}
mkswap ${SWAPFILE}
swapon ${SWAPFILE}
echo "$SWAPFILE none swap sw 0 0" >> /etc/fstab
fi
}
start_installation () {
root_checking
@ -1065,6 +1100,10 @@ start_installation () {
check_hardware
fi
if [ "$MAKESWAP" == "true" ]; then
make_swap
fi
if command_exists docker ; then
check_docker_version
service docker start

View File

@ -81,6 +81,13 @@ while [ "$1" != "" ]; do
shift
fi
;;
-ms | --makeswap )
if [ "$2" != "" ]; then
MAKESWAP=$2
shift
fi
;;
-? | -h | --help )
echo " Usage $0 [PARAMETER] [[PARAMETER], ...]"
@ -92,6 +99,7 @@ while [ "$1" != "" ]; do
echo " -js, --jwtsecret defines the secret key to validate the JWT in the request"
echo " -ls, --local_scripts use 'true' to run local scripts (true|false)"
echo " -skiphc, --skiphardwarecheck use to skip hardware check (true|false)"
echo " -ms, --makeswap make swap file (true|false)"
echo " -?, -h, --help this help"
echo
exit 0

View File

@ -156,7 +156,7 @@ if [ "$PRODUCT_INSTALLED" = "false" ]; then
-mysqlu ${MYSQL_SERVER_USER} \
-mysqlp ${MYSQL_ROOT_PASS}
elif [[ $PRODUCT_CHECK_UPDATE -eq $UPDATE_AVAILABLE_CODE || $RECONFIGURE_PRODUCT = "true" ]]; then
ENVIRONMENT=$(grep -oP 'ENVIRONMENT=\K.*' /lib/systemd/system/${product}-api.service)
ENVIRONMENT=$(grep -oP 'ENVIRONMENT=\K.*' /usr/lib/systemd/system/${product}-api.service)
CONNECTION_STRING=$(json -f /etc/${package_sysname}/${product}/appsettings.$ENVIRONMENT.json ConnectionStrings.default.connectionString)
${package_manager} -y update ${product}
${product}-configuration \
@ -167,6 +167,10 @@ elif [[ $PRODUCT_CHECK_UPDATE -eq $UPDATE_AVAILABLE_CODE || $RECONFIGURE_PRODUCT
-mysqlp $(grep -oP 'Password=\K[^;]*' <<< "$CONNECTION_STRING")
fi
if [ "$MAKESWAP" == "true" ]; then
make_swap
fi
echo ""
echo "$RES_INSTALL_SUCCESS"
echo "$RES_QUESTIONS"

View File

@ -2,6 +2,24 @@
set -e
function make_swap () {
local DISK_REQUIREMENTS=6144; #6Gb free space
local MEMORY_REQUIREMENTS=11000; #RAM ~12Gb
SWAPFILE="/${PRODUCT}_swapfile";
local AVAILABLE_DISK_SPACE=$(df -m / | tail -1 | awk '{ print $4 }');
local TOTAL_MEMORY=$(free -m | grep -oP '\d+' | head -n 1);
local EXIST=$(swapon -s | awk '{ print $1 }' | { grep -x ${SWAPFILE} || true; });
if [[ -z $EXIST ]] && [ ${TOTAL_MEMORY} -lt ${MEMORY_REQUIREMENTS} ] && [ ${AVAILABLE_DISK_SPACE} -gt ${DISK_REQUIREMENTS} ]; then
dd if=/dev/zero of=${SWAPFILE} count=6144 bs=1MiB
chmod 600 ${SWAPFILE}
mkswap ${SWAPFILE}
swapon ${SWAPFILE}
echo "$SWAPFILE none swap sw 0 0" >> /etc/fstab
fi
}
check_hardware () {
DISK_REQUIREMENTS=40960;
MEMORY_REQUIREMENTS=5500;

View File

@ -239,7 +239,7 @@ install_json() {
restart_services() {
chown -R ${PACKAGE_SYSNAME}:${PACKAGE_SYSNAME} $APP_DIR $PRODUCT_DIR $LOG_DIR /var/www/$PACKAGE_SYSNAME/Data
sed "s_\(ENVIRONMENT=\).*_\1${ENVIRONMENT}_i" -i /lib/systemd/system/${PRODUCT}*.service >/dev/null 2>&1
sed "s_\(ENVIRONMENT=\).*_\1${ENVIRONMENT}_i" -i /usr/lib/systemd/system/${PRODUCT}*.service >/dev/null 2>&1
systemctl daemon-reload
echo -n "Updating database... "