Branding/config/init.sh
2025-08-13 23:15:21 +02:00

136 lines
4.3 KiB
Bash

#!/usr/bin/env bash
msg() {
echo -E "$1"
}
# Display environment variables
echo -e "Variables:
\\t- PUID=${PUID}
\\t- PGID=${PGID}
\\t- TZ=${TZ}
\\t- HTPASSWD=${HTPASSWD}
\\t- HTPASSWD_USER=${HTPASSWD_USER}
\\t- HTPASSWD_PW=${HTPASSWD_PW}"
if [ "$( grep -rni "$TZ" /etc/php82/conf.d/00_timezone.ini | wc -l )" -eq 0 ]; then
msg "Configure timezone for PHP..."
echo "$TZ\"" >> /etc/php82/conf.d/00_timezone.ini
fi
msg "Make config directories..."
mkdir -p /config/{nginx,h5ai}
msg "Add dummy user for better handle permission..."
useradd -u 911 -U -d /config -s /bin/false abc && usermod -G users abc
groupmod -o -g "$PGID" abc
usermod -o -u "$PUID" abc
# Locations of configuration files
orig_nginx="/etc/nginx/conf.d/h5ai.conf"
orig_h5ai="/usr/share/h5ai/_h5ai"
conf_nginx="/config/nginx/h5ai.conf"
conf_h5ai="/config/h5ai/_h5ai"
conf_htpwd="/config/nginx/.htpasswd"
options_file="/private/conf/options.json"
msg "Check configuration files for Nginx..."
if [ ! -f "$conf_nginx" ]; then
msg "Copy original setup files to /config folder..."
cp -arf $orig_nginx $conf_nginx
else
msg "User setup files found: $conf_nginx"
msg "Remove image's default setup files and copy the previous version..."
fi
rm -f $orig_nginx
ln -s $conf_nginx $orig_nginx
msg "Check configuration files for h5ai..."
if [ ! -d "$conf_h5ai" ]; then
msg "Copy original setup files to /config folder..."
cp -arf $orig_h5ai $conf_h5ai
else
msg "User setup files found: $conf_h5ai"
msg "Check if h5ai version updated..."
new_ver=$(head -n 1 $orig_h5ai$options_file | awk '{print $3}' | sed 's/[^0-9]//g')
pre_ver=$(head -n 1 $conf_h5ai$options_file | awk '{print $3}' | sed 's/[^0-9]//g')
if [ $new_ver -gt $pre_ver ]; then
msg "New version detected. Make existing options.json backup file..."
cp $conf_h5ai$options_file /config/$(date '+%Y%m%d_%H%M%S')_options.json.bak
msg "Remove existing h5ai files..."
rm -rf $conf_h5ai
msg "Copy the new version..."
cp -arf $orig_h5ai $conf_h5ai
fi
msg "Remove image's default setup files and copy the existing version..."
fi
rm -rf $orig_h5ai
ln -s $conf_h5ai $orig_h5ai
msg "Set permission for caching..."
chmod -R 777 $conf_h5ai/public/cache
chmod -R 777 $conf_h5ai/private/cache
# Clone external repository into /h5ai
if [ -n "$GIT_REPO" ]; then
msg "Git repository variable detected: $GIT_REPO"
workdir="/tmp/cloned"
rm -rf "$workdir"
mkdir -p "$workdir"
if git clone "$GIT_REPO" "$workdir"; then
msg "Repository cloned to $workdir"
mkdir -p /h5ai
find /h5ai -mindepth 1 -maxdepth 1 -exec rm -rf {} + 2>/dev/null || true
cp -a "$workdir"/. /h5ai/
chown -R abc:abc /h5ai
msg "Copied cloned repository contents into /h5ai"
else
msg "Failed to clone $GIT_REPO"
fi
else
msg "No GIT_REPO provided; skipping clone step"
fi
# If an user wants to set htpasswd
if [ "$HTPASSWD" = "true" ]; then
if [ ! -f "$conf_htpwd" ]; then
msg "Create an authenticate account for h5ai website..."
if [ -z "$HTPASSWD_PW" ]; then
msg "Please enter a password for user $HTPASSWD_USER"
# Create a new htpasswd file with user's entered password
htpasswd -c "$conf_htpwd" "$HTPASSWD_USER"
else
# Create a new htpasswd file with environment variables
htpasswd -b -c "$conf_htpwd" "$HTPASSWD_USER" "$HTPASSWD_PW"
fi
else
msg "User setup files found: $conf_htpwd"
fi
# Patch Nginx server instance
if [ "$( grep -rni "auth" /config/nginx/h5ai.conf | wc -l )" -eq 0 ]; then
patch -p1 /config/nginx/h5ai.conf -i /h5ai.conf.htpasswd.patch
fi
else
if [ "$( grep -rni "auth" /config/nginx/h5ai.conf | wc -l )" -gt 0 ]; then
msg "HTPASSWD not configured but Nginx server sets. Reverse the patch..."
patch -R -p1 /config/nginx/h5ai.conf -i /h5ai.conf.htpasswd.patch
fi
fi
msg "Fix ownership for Nginx and php-fpm..."
sed -i "s#user nginx;.*#user abc;#g" /etc/nginx/nginx.conf
sed -i "s#user = nobody.*#user = abc#g" /etc/php82/php-fpm.d/www.conf
sed -i "s#group = nobody.*#group = abc#g" /etc/php82/php-fpm.d/www.conf
msg "Set ownership to the configuration files..."
chown -R abc:abc /config
msg "Start supervisord..."
supervisord -c /etc/supervisor/conf.d/supervisord.conf