CT's Nextcloud, Freshrss.heimdall & mailbackup: Refractored PHP Installation
Now using external `AlpinePHPTool` script for installing/configuring php. This wil make upgrading PHP on existing containers automaticaly plausible/easier. Removed php packages from alpine.yaml and moved them to CT-Files `Config/php.pkglist` Remove PHP configurations steps from CT's init.sh and integrated them in ` AlpinePHPTool` Removed PHP timezone configuration files and intergradeded them in `AlpinePHPTool` Updated
This commit is contained in:
171
Scripts/AlpinePHPTool.sh
Normal file
171
Scripts/AlpinePHPTool.sh
Normal file
@@ -0,0 +1,171 @@
|
||||
#!/bin/ash
|
||||
|
||||
############################################
|
||||
# @description: #
|
||||
# (Re)install/update and configure PHP #
|
||||
# #
|
||||
# @project: HomeserverCTs #
|
||||
# @target: Alpine Linux based CT's #
|
||||
############################################
|
||||
|
||||
#ScriptConfig
|
||||
self=$0
|
||||
|
||||
Configurations="nextcloud freshrss heimdall mailbackup"
|
||||
SupportedAlpineVersion=3.20
|
||||
NewPHPVer=83
|
||||
SkipAlpineRelCheck=false
|
||||
|
||||
#Git configuration only used for Upgrades and Fresh mode
|
||||
gitRepo=https://git.bprieshof.nl/brammp/HomeServerCTs
|
||||
gitBranch=main
|
||||
|
||||
#AlpineCheck
|
||||
if [[ $(cat /etc/os-release | grep -m 1 ^"ID=") != *"alpine"* ]]; then echo Not on Alpine Linux ;exit 1;fi
|
||||
|
||||
#AlpineVersionCheck
|
||||
|
||||
if $SkipAlpineRelCheck ; then echo "Notice: Alpine releas check skipped"
|
||||
elif [[ $(grep "^VERSION_ID=" /etc/os-release | awk -F= '{print $2}') != *"$SupportedAlpineVersion"* ]]; then printf "This Alpine Linux is not supported by default,\nto continue set SkipAlpineRelCheck to true and check the targeted php version in the script\n" ;exit 1;fi
|
||||
|
||||
#Functions for menu/core use
|
||||
show_help () {
|
||||
cat <<END_HELP
|
||||
Usage: $self [-dfpuh] <Config name>
|
||||
|
||||
Options:
|
||||
-d, Distrobuilder: Install everything and use Local configs (non interactive)
|
||||
-f, Fresh: Install everything and fetch config
|
||||
-p, Purge: Remove all PHP packlages and back configuration (handy for distro release upgrades)
|
||||
-u, Upgrade: Run both Purge and Install steps
|
||||
|
||||
Cnfigurations:
|
||||
$Configurations
|
||||
|
||||
END_HELP
|
||||
}
|
||||
|
||||
set_mode () {
|
||||
if [ ! -z "$mode" ]; then echo "ERROR: Unable to use multiple modes at once";exit 1;fi
|
||||
mode=$1
|
||||
}
|
||||
|
||||
#Arugment/optin handeling
|
||||
while getopts 'dfpuh' opt; do
|
||||
case $opt in
|
||||
d) set_mode distrobuilder;;
|
||||
f) set_mode fresh ;;
|
||||
p) set_mode purge ;;
|
||||
u) set_mode upgrade ;;
|
||||
h) show_help
|
||||
exit ;;
|
||||
*) show_help
|
||||
exit 1
|
||||
esac
|
||||
done
|
||||
|
||||
shift "$(( OPTIND - 1 ))"
|
||||
for config do
|
||||
config=$config
|
||||
done
|
||||
|
||||
if [ -z "$mode" ]; then
|
||||
printf "ERROR: No mode argument given\n\n"
|
||||
show_help
|
||||
exit 1
|
||||
elif [ -z "$config" ]; then
|
||||
printf "ERROR: No configuration argument given\n\n"
|
||||
show_help
|
||||
exit 1
|
||||
elif [[ -z "$(echo "$Configurations" | fgrep -w "$config")" ]]; then
|
||||
printf "ERROR: Invalid configuration argument given\n\n"
|
||||
show_help
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
#Functions for mode
|
||||
|
||||
#Backup PHP config and purge PHP packages
|
||||
run_Purge() {
|
||||
#Check if PHP is installed
|
||||
if ! command -v php &> /dev/null; then printf "ERROR: PHP is not installed\n\n"; exit 1;fi
|
||||
#Get current PHP Version
|
||||
OldPHPVer=$(grep php /etc/apk/world -m 1|sed -e "s/\-.*//" -e "s/php//")
|
||||
#Create Backup an its location
|
||||
if [[ ! -d "/opt/PHPCfgBackup/" ]];then mkdir -p "/opt/PHPCfgBackup"; fi
|
||||
tar -czf "/opt/PHPCfgBackup/PHP$OldPHPVer-Config.tar.gz" -C "/etc/php$OldPHPVer" ./
|
||||
rm -rf "/etc/php$OldPHPVer"
|
||||
|
||||
#Set placeholder in Nginx for PHP Socket
|
||||
sed -i -e 's/'$OldPHPVer'/PHPver/g' /etc/nginx/nginx.conf
|
||||
#Purge PHP packages
|
||||
apk del php*
|
||||
}
|
||||
|
||||
#(re)install PHP packages
|
||||
run_Install() {
|
||||
cat $configStore/php.pkglist | xargs apk add
|
||||
#Configure Php-Fpm
|
||||
echo ";Placeholder" > /etc/php$NewPHPVer/php-fpm.d/www.conf
|
||||
sed -i -e 's/PHPver/'$NewPHPVer'/g' $configStore/php.conf
|
||||
mv $configStore/php.conf /etc/php$NewPHPVer/php-fpm.d/$config.conf
|
||||
printf "[Date]\ndate.timezone = Europe/Amsterdam" >/etc/php$NewPHPVer/conf.d/04_date_timezone.ini
|
||||
|
||||
#Configure Nginx PHP Socket
|
||||
sed -i -e 's/PHPver/'$NewPHPVer'/g' /etc/nginx/nginx.conf
|
||||
|
||||
#Unique settings for configuration
|
||||
case $config in
|
||||
nextcloud)
|
||||
echo runnig distrobuilder
|
||||
#Configure Php-Cli
|
||||
sed -i '/memory_limit =/c\memory_limit = 512M' /etc/php$NewPHPVer/php.ini
|
||||
echo "apc.enable_cli=1" >> /etc/php$NewPHPVer/php.ini
|
||||
;;
|
||||
esac
|
||||
|
||||
#Enable service(s) on boot
|
||||
rc-update add php-fpm$NewPHPVer
|
||||
}
|
||||
|
||||
fetch_Config() {
|
||||
#Unique settings for configuration
|
||||
case $config in
|
||||
mailbackup)
|
||||
wget https://git.bprieshof.nl/Tools/MailBackup-sys/raw/branch/alpine/Configs/php.conf -O /tmp/php.conf || echo "ERROR: Config download failed";exit 1
|
||||
wget https://git.bprieshof.nl/Tools/MailBackup-sys/raw/branch/alpine/Configs/php.pkglist -O /tmp/php.pkglist || echo "ERROR: Config download failed";exit 1
|
||||
;;
|
||||
*)
|
||||
wget "$repo"/raw/branch/"$branch"/CT-Files/$config/Configs/php.conf -O /tmp/php.conf || echo "ERROR: Config download failed";exit 1
|
||||
wget "$repo"/raw/branch/"$branch"/CT-Files/"$config"/Configs/php.pkglist -O /tmp/php.pkglist || echo "ERROR: Config download failed";exit 1
|
||||
;;
|
||||
|
||||
esac
|
||||
}
|
||||
|
||||
case $mode in
|
||||
distrobuilder)
|
||||
#Set config location
|
||||
configStore=/opt/Setup/Configs
|
||||
run_Install
|
||||
;;
|
||||
fresh)
|
||||
fetch_Config
|
||||
#Set config location
|
||||
configStore=/tmp
|
||||
run_Install
|
||||
;;
|
||||
purge)
|
||||
run_Purge
|
||||
;;
|
||||
upgrade)
|
||||
#Set config location
|
||||
configStore=/opt/Setup/Configs
|
||||
fetch_Config
|
||||
service nginx stop
|
||||
run_Purge
|
||||
run_Install
|
||||
service nginx start
|
||||
;;
|
||||
esac
|
||||
Reference in New Issue
Block a user