mirror of
https://github.com/nextcloud/vm.git
synced 2025-10-26 11:27:32 +00:00
281 lines
9.6 KiB
Bash
281 lines
9.6 KiB
Bash
#!/bin/bash
|
|
|
|
# T&M Hansson IT AB © - 2021, https://www.hanssonit.se/
|
|
|
|
true
|
|
SCRIPT_NAME="Preview Generator"
|
|
SCRIPT_EXPLAINER="This script will install the Preview Generator.
|
|
It can speedup the loading of previews in Nextcloud a lot."
|
|
# shellcheck source=lib.sh
|
|
source /var/scripts/fetch_lib.sh || source <(curl -sL https://raw.githubusercontent.com/nextcloud/vm/master/lib.sh)
|
|
|
|
# Check for errors + debug code and abort if something isn't right
|
|
# 1 = ON
|
|
# 0 = OFF
|
|
DEBUG=0
|
|
debug_mode
|
|
|
|
# Check if root
|
|
root_check
|
|
|
|
# PHP 7.x is needed
|
|
if is_this_installed php5.6-common || is_this_installed php5.5-common
|
|
then
|
|
msg_box "At least PHP 7.X is required, please upgrade your PHP version: \
|
|
https://shop.hanssonit.se/product/upgrade-php-version-including-dependencies/"
|
|
exit
|
|
fi
|
|
|
|
# Encryption may not be enabled
|
|
if is_app_enabled encryption || is_app_enabled end_to_end_encryption
|
|
then
|
|
msg_box "It seems like you have encryption enabled which is unsupported when using the Preview Generator"
|
|
exit
|
|
fi
|
|
|
|
# Check if previewgenerator is already installed
|
|
if ! is_app_installed previewgenerator
|
|
then
|
|
# Ask for installing
|
|
install_popup "$SCRIPT_NAME"
|
|
else
|
|
# Ask for removal or reinstallation
|
|
reinstall_remove_menu "$SCRIPT_NAME"
|
|
# Removal
|
|
nextcloud_occ app:remove previewgenerator
|
|
# reset the preview formats
|
|
nextcloud_occ_no_check config:system:delete "enabledPreviewProviders"
|
|
# reset the cronjob
|
|
crontab -u www-data -l | grep -v 'preview:pre-generate' | crontab -u www-data -
|
|
# Remove apps
|
|
APPS=(php-imagick libmagickcore-6.q16-3-extra)
|
|
for app in "${APPS[@]}"
|
|
do
|
|
if is_this_installed "$app"
|
|
then
|
|
apt-get purge "$app" -y
|
|
fi
|
|
done
|
|
if is_this_installed ffmpeg && ! is_app_installed integration_whiteboard
|
|
then
|
|
apt-get purge ffmpeg -y
|
|
fi
|
|
apt-get autoremove -y
|
|
if yesno_box_no "Do you want to remove all previews that were generated until now?
|
|
This will most likely clear a lot of space but your server will need to re-generate the previews \
|
|
if you should opt to re-enable previews again."
|
|
then
|
|
print_text_in_color "$ICyan" "Removing the preview folder. This can take a while..."
|
|
rm -r "$NCDATA"/appdata_*/preview
|
|
print_text_in_color "$ICyan" "Scanning Nextclouds appdata directory after removing all previews. \
|
|
This can take a while..."
|
|
nextcloud_occ files:scan-app-data -vvv
|
|
msg_box "All previews were successfully removed."
|
|
fi
|
|
# Show successful uninstall if applicable
|
|
removal_popup "$SCRIPT_NAME"
|
|
fi
|
|
|
|
# Install preview generator
|
|
install_and_enable_app previewgenerator
|
|
|
|
# check if the previewgenerator is installed and enabled
|
|
if is_app_enabled previewgenerator
|
|
then
|
|
# enable previews
|
|
nextcloud_occ config:system:set enable_previews --value=true --type=boolean
|
|
|
|
# install needed dependency for movies
|
|
install_if_not ffmpeg
|
|
else
|
|
exit
|
|
fi
|
|
|
|
msg_box "In the next step you can choose to install a package called imagick \
|
|
to speed up the generation of previews and add support for more filetypes.
|
|
|
|
The currently supported filetypes are:
|
|
* PNG
|
|
* JPEG
|
|
* GIF
|
|
* BMP
|
|
* MarkDown
|
|
* MP3
|
|
* TXT
|
|
* Movie
|
|
* Photoshop (needs imagick)
|
|
* SVG (needs imagick)
|
|
* TIFF (needs imagick)"
|
|
|
|
msg_box "IMPORTANT NOTE!!
|
|
|
|
Imagick will put your server at risk as it's is known to have several flaws.
|
|
You can check this issue to understand why: https://github.com/nextcloud/vm/issues/743
|
|
|
|
Please note: If you choose not to install imagick, it will get removed now."
|
|
if yesno_box_no "Do you want to install imagick?"
|
|
then
|
|
# Install imagick
|
|
install_if_not php-imagick
|
|
install_if_not libmagickcore-6.q16-3-extra
|
|
|
|
# Choose file formats fo the case when imagick is installed.
|
|
# for additional previews please look at the Nextcloud documentation. But these probably won't work.
|
|
choice=$(whiptail --title "$TITLE - Choose file formats" --checklist \
|
|
"Now you can choose for which file formats you would like to generate previews for
|
|
$CHECKLIST_GUIDE\n\n$RUN_LATER_GUIDE" "$WT_HEIGHT" "$WT_WIDTH" 4 \
|
|
"PNG" "" ON \
|
|
"JPEG" "" ON \
|
|
"GIF" "" ON \
|
|
"BMP" "" ON \
|
|
"MarkDown" "" ON \
|
|
"MP3" "" ON \
|
|
"TXT" "" ON \
|
|
"Movie" "" ON \
|
|
"Photoshop" "" ON \
|
|
"SVG" "" ON \
|
|
"TIFF" "" ON 3>&1 1>&2 2>&3)
|
|
|
|
case "$choice" in
|
|
*"PNG"*)
|
|
nextcloud_occ config:system:set enabledPreviewProviders 0 --value="OC\\Preview\\PNG"
|
|
;;&
|
|
*"JPEG"*)
|
|
nextcloud_occ config:system:set enabledPreviewProviders 1 --value="OC\\Preview\\JPEG"
|
|
;;&
|
|
*"GIF"*)
|
|
nextcloud_occ config:system:set enabledPreviewProviders 2 --value="OC\\Preview\\GIF"
|
|
;;&
|
|
*"BMP"*)
|
|
nextcloud_occ config:system:set enabledPreviewProviders 3 --value="OC\\Preview\\BMP"
|
|
;;&
|
|
*"MarkDown"*)
|
|
nextcloud_occ config:system:set enabledPreviewProviders 4 --value="OC\\Preview\\MarkDown"
|
|
;;&
|
|
*"MP3"*)
|
|
nextcloud_occ config:system:set enabledPreviewProviders 5 --value="OC\\Preview\\MP3"
|
|
;;&
|
|
*"TXT"*)
|
|
nextcloud_occ config:system:set enabledPreviewProviders 6 --value="OC\\Preview\\TXT"
|
|
;;&
|
|
*"Movie"*)
|
|
nextcloud_occ config:system:set enabledPreviewProviders 7 --value="OC\\Preview\\Movie"
|
|
;;&
|
|
*"Photoshop"*)
|
|
nextcloud_occ config:system:set enabledPreviewProviders 8 --value="OC\\Preview\\Photoshop"
|
|
;;&
|
|
*"SVG"*)
|
|
nextcloud_occ config:system:set enabledPreviewProviders 9 --value="OC\\Preview\\SVG"
|
|
;;&
|
|
*"TIFF"*)
|
|
nextcloud_occ config:system:set enabledPreviewProviders 10 --value="OC\\Preview\\TIFF"
|
|
;;&
|
|
*)
|
|
;;
|
|
esac
|
|
else
|
|
# check if imagick is installed and remove it
|
|
if is_this_installed php-imagick
|
|
then
|
|
apt-get purge php-imagick -y
|
|
fi
|
|
# check if libmagickcore is installed and remove it
|
|
if is_this_installed libmagickcore-6.q16-3-extra
|
|
then
|
|
apt-get purge libmagickcore-6.q16-3-extra -y
|
|
fi
|
|
# Choose file formats fo the case when imagick is not installed.
|
|
# for additional previews please look at the Nextcloud documentation. But these probably won't work.
|
|
choice=$(whiptail --title "$TITLE - Choose file formats" --checklist \
|
|
"Now you can choose for which file formats you would like to generate previews for
|
|
$CHECKLIST_GUIDE\n\n$RUN_LATER_GUIDE" "$WT_HEIGHT" "$WT_WIDTH" 4 \
|
|
"PNG" "" ON \
|
|
"JPEG" "" ON \
|
|
"GIF" "" ON \
|
|
"BMP" "" ON \
|
|
"MarkDown" "" ON \
|
|
"MP3" "" ON \
|
|
"TXT" "" ON \
|
|
"Movie" "" ON 3>&1 1>&2 2>&3)
|
|
|
|
case "$choice" in
|
|
*"PNG"*)
|
|
nextcloud_occ config:system:set enabledPreviewProviders 11 --value="OC\\Preview\\PNG"
|
|
;;&
|
|
*"JPEG"*)
|
|
nextcloud_occ config:system:set enabledPreviewProviders 12 --value="OC\\Preview\\JPEG"
|
|
;;&
|
|
*"GIF"*)
|
|
nextcloud_occ config:system:set enabledPreviewProviders 13 --value="OC\\Preview\\GIF"
|
|
;;&
|
|
*"BMP"*)
|
|
nextcloud_occ config:system:set enabledPreviewProviders 14 --value="OC\\Preview\\BMP"
|
|
;;&
|
|
*"MarkDown"*)
|
|
nextcloud_occ config:system:set enabledPreviewProviders 15 --value="OC\\Preview\\MarkDown"
|
|
;;&
|
|
*"MP3"*)
|
|
nextcloud_occ config:system:set enabledPreviewProviders 16 --value="OC\\Preview\\MP3"
|
|
;;&
|
|
*"TXT"*)
|
|
nextcloud_occ config:system:set enabledPreviewProviders 17 --value="OC\\Preview\\TXT"
|
|
;;&
|
|
*"Movie"*)
|
|
nextcloud_occ config:system:set enabledPreviewProviders 18 --value="OC\\Preview\\Movie"
|
|
;;&
|
|
*)
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
# Set aspect ratio
|
|
nextcloud_occ config:app:set previewgenerator squareSizes --value="32 256"
|
|
nextcloud_occ config:app:set previewgenerator widthSizes --value="256 384"
|
|
nextcloud_occ config:app:set previewgenerator heightSizes --value="256"
|
|
nextcloud_occ config:system:set preview_max_x --value="2048"
|
|
nextcloud_occ config:system:set preview_max_y --value="2048"
|
|
nextcloud_occ config:system:set jpeg_quality --value="60"
|
|
nextcloud_occ config:app:set preview jpeg_quality --value="60"
|
|
|
|
# Add crontab for www-data
|
|
if ! crontab -u www-data -l | grep -q 'preview:pre-generate'
|
|
then
|
|
print_text_in_color "$ICyan" "Adding crontab for $SCRIPT_NAME"
|
|
crontab -u www-data -l | { cat; echo "*/10 * * * * php -f $NCPATH/occ preview:pre-generate >> $VMLOGS/previewgenerator.log"; } | crontab -u www-data -
|
|
touch "$VMLOGS"/previewgenerator.log
|
|
chown www-data:www-data "$VMLOGS"/previewgenerator.log
|
|
fi
|
|
|
|
msg_box "In the last step you can define a specific Nextcloud user for \
|
|
which will be the user that runs the Preview Generation.
|
|
|
|
The default behavior (just hit [ENTER]) is to run with the \
|
|
system user 'www-data' which will generate previews for all users.
|
|
|
|
If you on the other hand choose to use a specific user, previews will ONLY be generated for that specific user."
|
|
|
|
if ! yesno_box_no "Do you want to choose a specific Nextcloud user to generate previews?"
|
|
then
|
|
print_text_in_color "$ICyan" "Using www-data (all Nextcloud users) for generating previews..."
|
|
|
|
# Pre generate everything
|
|
nextcloud_occ preview:generate-all
|
|
else
|
|
while :
|
|
do
|
|
PREVIEW_USER=$(input_box "Enter the Nextcloud user for \
|
|
which you want to run the Preview Generation (as a scheduled task)")
|
|
if [ -z "$(nextcloud_occ user:list | grep "$PREVIEW_USER" | awk '{print $3}')" ]
|
|
then
|
|
msg_box "It seems like the user you entered ($PREVIEW_USER) doesn't exist, please try again."
|
|
else
|
|
break
|
|
fi
|
|
done
|
|
|
|
# Pre generate everything
|
|
nextcloud_occ preview:generate-all "$PREVIEW_USER"
|
|
fi
|
|
|
|
msg_box "Previewgenerator was successfully installed."
|