diff --git a/Dockerfile b/Dockerfile
index 020fc44ab..0de37149e 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -2,15 +2,19 @@ FROM ubuntu:20.04
COPY supervisord.conf /etc/supervisord.conf
-RUN apt update && apt install -y python3.8 python3-pip supervisor
+RUN apt update && apt install -y python3.8 python3-pip supervisor curl
-RUN git clone https://github.com/SoftCreatR/imei && cd imei && chmod +x imei.sh && ./imei.sh
+COPY imei.sh /etc/imei.sh
+
+RUN /etc/imei.sh
RUN mkdir -p ./service
COPY requirements.txt ./service/requirements.txt
-RUN cd ./service && pip3 install -r requirements.txt && mkdir /images && mkdir /songs
+RUN pip3 install -r requirements.txt
+
+RUN mkdir /images && mkdir /songs
EXPOSE 80/tcp
diff --git a/files/templates/comments.html b/files/templates/comments.html
index 92fed283d..3175f9d69 100644
--- a/files/templates/comments.html
+++ b/files/templates/comments.html
@@ -495,10 +495,10 @@
{% endif %}
- Context
-
+ Context
+
{% if v %}
{% endif %}
diff --git a/files/templates/submission.html b/files/templates/submission.html
index c22852d69..6adc08f67 100644
--- a/files/templates/submission.html
+++ b/files/templates/submission.html
@@ -548,6 +548,8 @@
{% if not p.ghost %}{% endif %}
+
+
@@ -1052,7 +1054,6 @@
{% endif %}
- Copy link
{% if v %}
-
diff --git a/files/templates/submission_listing.html b/files/templates/submission_listing.html
index 2ed25cef8..4feb75a21 100644
--- a/files/templates/submission_listing.html
+++ b/files/templates/submission_listing.html
@@ -341,8 +341,6 @@
-
-
{% if p.body and request.path != "/changelog"%}
{% endif %}
@@ -415,6 +413,10 @@
{% if not p.ghost %}{% endif %}
+
+
+
+
diff --git a/imei.sh b/imei.sh
new file mode 100644
index 000000000..7bf35fe5d
--- /dev/null
+++ b/imei.sh
@@ -0,0 +1,946 @@
+#!/usr/bin/env bash
+
+##############################################################
+# Title : IMEI - ImageMagick Easy Install #
+# Description : ImageMagick® for Debian/Ubuntu, #
+# including advanced delegate support. #
+# #
+# Author : Sascha Greuel #
+# Date : 2022-01-26 14:25 #
+# License : ISC #
+# Version : 6.6.0 #
+# #
+# Usage : bash ./imei.sh #
+##############################################################
+
+######################
+# Check requirements #
+######################
+
+# Check if user is root
+[ "$(id -u)" != "0" ] && {
+ echo "Error: You must be root or use sudo to run this script"
+ exit 1
+}
+
+command_exists() {
+ command -v "$@" > /dev/null 2>&1
+}
+
+# Make sure, that we are on Debian or Ubuntu
+if ! command_exists apt-get; then
+ echo "This script cannot run on any other system than Debian or Ubuntu"
+ exit 1
+fi
+
+# Checking if lsb_release is installed or install it
+if ! command_exists lsb_release; then
+ apt-get update && apt-get install -qq lsb-release > /dev/null 2>&1
+fi
+
+####################
+# Script arguments #
+####################
+
+while [ "$#" -gt 0 ]; do
+ case "$1" in
+ --force)
+ FORCE="yes"
+ ;;
+ --force-imagemagick|--force-im)
+ FORCE_IMAGEMAGICK=$2
+ ;;
+ --imagemagick-version|--im-version)
+ IMAGEMAGICK_VER=$2
+ ;;
+ --imagemagick-quantum-depth|--im-q)
+ QUANTUM_DEPTH=$2
+ ;;
+ --skip-aom)
+ SKIP_AOM="yes"
+ ;;
+ --aom-version)
+ AOM_VER=$2
+ ;;
+ --skip-libheif|--skip-heif)
+ SKIP_LIBHEIF="yes"
+ ;;
+ --libheif-version|--heif-version)
+ LIBHEIF_VER=$2
+ ;;
+ --skip-jpeg-xl|--skip-jxl)
+ SKIP_JXL="yes"
+ ;;
+ --jpeg-xl-version|--jxl-version)
+ JXL_VER=$2
+ ;;
+ --skip-dependencies|--skip-deps)
+ SKIP_DEPS="yes"
+ ;;
+ --log-file)
+ LOG_FILE=$2
+ ;;
+ --work-dir)
+ WORK_DIR=$2
+ ;;
+ --build-dir)
+ BUILD_DIR=$2
+ ;;
+ --config-dir)
+ CONFIG_DIR=$2
+ ;;
+ --ci)
+ CI_BUILD="yes"
+ ;;
+ --no-sig-verify|--dev)
+ VERIFY_SIGNATURE="${CYELLOW}disabled${CEND}"
+ ;;
+ --use-checkinstall|--checkinstall)
+ CHECKINSTALL="yes"
+ ;;
+ --no-backports)
+ BACKPORTS="${CYELLOW}disabled${CEND}"
+ ;;
+ *) ;;
+ esac
+ shift
+done
+
+export DEBIAN_FRONTEND=noninteractive
+
+#############
+# Variables #
+#############
+
+if [ -z "$WORK_DIR" ]; then
+ WORK_DIR=/usr/local/src/imei
+elif [ -d "$WORK_DIR" ] && [ "$(ls -A $WORK_DIR)" ]; then
+ echo -e "${CRED}Work Dir $WORK_DIR is not empty!${CEND}" >&2
+ return 1
+fi
+
+if [ -z "$BUILD_DIR" ]; then
+ BUILD_DIR=/usr/local
+fi
+
+if [ -z "$CONFIG_DIR" ]; then
+ CONFIG_DIR="$BUILD_DIR/etc"
+fi
+
+if [ -z "$LOG_FILE" ]; then
+ LOG_FILE=/var/log/imei.log
+fi
+
+allowedQuantumDepth=(8 16 32)
+if [[ -z "$QUANTUM_DEPTH" || ! " ${allowedQuantumDepth[*]} " =~ $QUANTUM_DEPTH ]]; then
+ QUANTUM_DEPTH=16
+fi
+
+START=$(date +%s)
+OS_DISTRO="$(lsb_release -ds)"
+OS_SHORT_CODENAME="$(lsb_release -sc)"
+OS_ARCH="$(uname -m)"
+GH_FILE_BASE="https://codeload.github.com"
+SOURCE_LIST="/etc/apt/sources.list.d/imei.list"
+LIB_DIR="/usr/local"
+CMAKE_VERSION=""
+
+# Colors
+CSI='\033['
+CRED="${CSI}1;31m"
+CGREEN="${CSI}1;32m"
+CYELLOW="${CSI}1;33m"
+CBLUE="${CSI}1;36m"
+CEND="${CSI}0m"
+
+####################
+# Helper functions #
+####################
+
+displaytime() {
+ local T=$1
+ local D=$((T / 60 / 60 / 24))
+ local H=$((T / 60 / 60 % 24))
+ local M=$((T / 60 % 60))
+ local S=$((T % 60))
+
+ ((D > 0)) && printf '%d days ' $D
+ ((H > 0)) && printf '%d hours ' $H
+ ((M > 0)) && printf '%d minutes ' $M
+ ((D > 0 || H > 0 || M > 0)) && printf 'and '
+
+ printf '%d seconds\n' $S
+}
+
+str_repeat() {
+ printf -v v "%-*s" "$1" ""
+ echo "${v// /$2}"
+}
+
+version() {
+ echo "$@" | awk -F. '{ printf("%d%03d%03d%03d\n", $1,$2,$3,$4); }'
+}
+
+cleanup() {
+ if [ -d "$WORK_DIR" ]; then
+ rm -rf "$WORK_DIR"
+ fi
+
+ if [ -f "$SOURCE_LIST" ]; then
+ rm "$SOURCE_LIST"
+ fi
+
+ return 0
+}
+
+getClient() {
+ if command -v curl &> /dev/null; then
+ CLIENT="curl"
+ elif command -v wget &> /dev/null; then
+ CLIENT="wget"
+ elif command -v http &> /dev/null; then
+ CLIENT="httpie"
+ else
+ echo -e "${CRED}This tool requires either curl, wget or httpie to be installed.${CEND}" >&2
+ return 1
+ fi
+}
+
+httpGet() {
+ if [[ -n "${GITHUB_TOKEN}" ]]; then
+ AUTHORIZATION='{"Authorization": "Bearer '"$GITHUB_TOKEN"'}"}'
+ fi
+
+ case "$CLIENT" in
+ curl) curl -A curl -s -H "$AUTHORIZATION" "$@" ;;
+ wget) wget -qO- --header="$AUTHORIZATION" "$@" ;;
+ httpie) http -b GET "$@" "$AUTHORIZATION" ;;
+ esac
+}
+
+getImeiInfo() {
+ local IMEI_INFO
+
+ if ! command_exists jq; then
+ apt-get update && apt-get install -qq jq > /dev/null 2>&1
+ fi
+
+ IMEI_INFO=$(httpGet "https://api.github.com/repos/SoftCreatR/imei/tags")
+
+ IMEI_LATEST_VERSION_COMMIT=$(echo "$IMEI_INFO" | jq -r '.[0].commit.sha')
+ IMEI_LATEST_VERSION_NAME=$(echo "$IMEI_INFO" | jq -r '.[0].name')
+}
+
+########
+# Init #
+########
+
+# Display execution time and clean up on exit
+trap cleanup 0 1 2 3 6 15
+
+# Clean up on execution
+cleanup
+
+if [ -f "$LOG_FILE" ]; then
+ rm "$LOG_FILE"
+fi
+
+# Create working directory
+[ ! -d "$WORK_DIR" ] && mkdir -p "$WORK_DIR"
+
+# Check if working directory was created
+if [[ ! "$WORK_DIR" || ! -d "$WORK_DIR" ]]; then
+ echo -e "${CRED}Could not create temp directory $WORK_DIR${CEND}"
+ exit 1
+fi
+
+if [ -z "$CLIENT" ]; then
+ getClient || exit 1
+fi
+
+if [ -z "$IMEI_LATEST_VERSION_NAME" ]; then
+ getImeiInfo || exit 1
+fi
+
+###################
+# Integrity check #
+###################
+
+if [ -z "$CI_BUILD" ] && [ -z "$VERIFY_SIGNATURE" ] && [ -f "$0" ]; then
+ SIGNATURE_FILE="/tmp/imei.sh.sig"
+ PUBLIC_KEY_FILE="/tmp/imei.sh.pem"
+
+ sigCleanup() {
+ if [ -f "$SIGNATURE_FILE" ]; then
+ rm "$SIGNATURE_FILE"
+ fi
+
+ if [ -f "$PUBLIC_KEY_FILE" ]; then
+ rm "$PUBLIC_KEY_FILE"
+ fi
+ }
+
+ # Install OpenSSL, if it's not already installed
+ if ! command_exists openssl; then
+ apt-get update && apt-get install -qq openssl > /dev/null 2>&1
+ fi
+
+ if {
+ httpGet "https://raw.githubusercontent.com/SoftCreatR/imei/$IMEI_LATEST_VERSION_COMMIT/imei.sh.sig" > "$SIGNATURE_FILE"
+
+ if [ ! -f "$PUBLIC_KEY_FILE" ]; then
+ httpGet "https://raw.githubusercontent.com/SoftCreatR/imei/$IMEI_LATEST_VERSION_COMMIT/imei.sh.pem" > "$PUBLIC_KEY_FILE"
+ fi
+
+ openssl dgst -sha512 -verify "$PUBLIC_KEY_FILE" -signature "$SIGNATURE_FILE" "$0"
+ } >> "$LOG_FILE" 2>&1; then
+ sigCleanup
+
+ echo -ne "\ec"
+ else
+ sigCleanup
+
+ echo -ne "\ec"
+
+ echo -e " ${CRED}Signature verification failed!${CEND}"
+ echo ""
+ echo -e " ${CBLUE}Please check $LOG_FILE for details.${CEND}"
+ exit 1
+ fi
+fi
+
+##################
+# Version checks #
+##################
+
+if [ -f "$0" ]; then
+ INSTALLER_VER=$(grep -oP 'Version\s+:\s+\K([\d\.]+)' "$0")
+ INSTALLER_LATEST_VER="$IMEI_LATEST_VERSION_NAME"
+fi
+
+if [ -z "$IMAGEMAGICK_VER" ]; then
+ IMAGEMAGICK_VER=$(httpGet "https://raw.githubusercontent.com/SoftCreatR/imei/main/versions/imagemagick.version")
+ IMAGEMAGICK_HASH=$(httpGet "https://raw.githubusercontent.com/SoftCreatR/imei/main/versions/imagemagick.hash")
+fi
+
+if [ -z "$AOM_VER" ]; then
+ AOM_VER=$(httpGet "https://raw.githubusercontent.com/SoftCreatR/imei/main/versions/aom.version")
+ AOM_HASH=$(httpGet "https://raw.githubusercontent.com/SoftCreatR/imei/main/versions/aom.hash")
+fi
+
+if [ -z "$LIBHEIF_VER" ]; then
+ LIBHEIF_VER=$(httpGet "https://raw.githubusercontent.com/SoftCreatR/imei/main/versions/libheif.version")
+ LIBHEIF_HASH=$(httpGet "https://raw.githubusercontent.com/SoftCreatR/imei/main/versions/libheif.hash")
+fi
+
+if [ -z "$JXL_VER" ]; then
+ JXL_VER=$(httpGet "https://raw.githubusercontent.com/SoftCreatR/imei/main/versions/libjxl.version")
+ JXL_HASH=$(httpGet "https://raw.githubusercontent.com/SoftCreatR/imei/main/versions/libjxl.hash")
+fi
+
+# Make sure, that a version number for ImageMagick has been set
+if [ -z "$IMAGEMAGICK_VER" ]; then
+ echo -e "${CRED}Unable to determine version number for ImageMagick${CEND}"
+
+ exit 1
+fi
+
+# Make sure, that a version number for aom has been set
+if [ -z "$AOM_VER" ]; then
+ echo -e "${CRED}Unable to determine version number for aom${CEND}"
+
+ exit 1
+fi
+
+# Make sure, that a version number for libheif has been set
+if [ -z "$LIBHEIF_VER" ]; then
+ echo -e "${CRED}Unable to determine version number for libheif${CEND}"
+
+ exit 1
+fi
+
+# Make sure, that a version number for JPEG XL has been set
+if [ -z "$JXL_VER" ]; then
+ echo -e "${CRED}Unable to determine version number for JPEG XL${CEND}"
+
+ exit 1
+fi
+
+if command_exists magick; then
+ INSTALLED_IMAGEMAGICK_VER=$(magick -version | grep -oP 'Version: ImageMagick \K([\d\.\-]+)')
+fi
+
+if [ -L "$LIB_DIR/lib/libaom.so" ]; then
+ INSTALLED_AOM_VER=$(readlink -f "$LIB_DIR/lib/libaom.so" | xargs basename | grep -oP 'libaom.so.\K([\d\.]+)')
+fi
+
+if [ -L "$LIB_DIR/lib/libheif.so" ]; then
+ INSTALLED_LIBHEIF_VER=$(readlink -f "$LIB_DIR/lib/libheif.so" | xargs basename | grep -oP 'libheif.so.\K([\d\.]+)')
+fi
+
+if [ -L "$LIB_DIR/lib/libjxl.so" ]; then
+ INSTALLED_JXL_VER=$(readlink -f "$LIB_DIR/lib/libjxl.so" | xargs basename | grep -oP 'libjxl.so.\K([\d\.]+)')
+fi
+
+#######################
+# Installer functions #
+#######################
+
+# Speed up the compilation process
+NUM_CORES=$(nproc || echo 1)
+export CC=gcc CXX=g++ MAKEFLAGS="-j$((NUM_CORES + 1)) -l${NUM_CORES}"
+
+# Build dependencies
+install_deps() {
+ echo -ne ' Installing dependencies [..]\r'
+
+ if [ -n "$SKIP_DEPS" ]; then
+ echo -ne " Installing dependencies [${CYELLOW}SKIPPED${CEND}]\\r"
+ echo ""
+
+ return
+ fi
+
+ if {
+ if [ -f "$SOURCE_LIST" ]; then
+ rm "$SOURCE_LIST"
+ fi
+
+ # Allow installation of source files
+ {
+ if [[ "${OS_DISTRO,,}" == *"ubuntu"* ]]; then
+ echo 'deb http://archive.ubuntu.com/ubuntu '"$OS_SHORT_CODENAME"' main restricted'
+ echo 'deb-src http://archive.ubuntu.com/ubuntu '"$OS_SHORT_CODENAME"' main restricted universe multiverse'
+
+ if [ -z "$BACKPORTS" ]; then
+ echo 'deb http://archive.ubuntu.com/ubuntu '"$OS_SHORT_CODENAME"'-backports main restricted universe multiverse'
+ echo 'deb-src http://archive.ubuntu.com/ubuntu '"$OS_SHORT_CODENAME"'-backports main restricted universe multiverse'
+ fi
+ elif [[ "${OS_DISTRO,,}" == *"debian"* ]]; then
+ echo 'deb http://deb.debian.org/debian '"$OS_SHORT_CODENAME"' main contrib non-free'
+ echo 'deb-src http://deb.debian.org/debian '"$OS_SHORT_CODENAME"' main contrib non-free'
+
+ if [ -z "$BACKPORTS" ]; then
+ echo 'deb http://deb.debian.org/debian '"$OS_SHORT_CODENAME"'-backports main contrib non-free'
+ echo 'deb-src http://deb.debian.org/debian '"$OS_SHORT_CODENAME"'-backports main contrib non-free'
+ fi
+ elif [[ "${OS_DISTRO,,}" == *"raspbian"* ]]; then
+ echo 'deb http://archive.raspbian.org/raspbian '"$OS_SHORT_CODENAME"' main contrib non-free'
+ echo 'deb-src http://archive.raspbian.org/raspbian '"$OS_SHORT_CODENAME"' main contrib non-free'
+
+ if [ -z "$BACKPORTS" ]; then
+ echo 'deb http://archive.raspbian.org/raspbian '"$OS_SHORT_CODENAME"'-backports main contrib non-free'
+ echo 'deb-src http://archive.raspbian.org/raspbian '"$OS_SHORT_CODENAME"'-backports main contrib non-free'
+ fi
+ else
+ SKIP_BUILD_DEP="yes"
+ fi
+ } >> "$SOURCE_LIST"
+
+ # Update package list and satisfy build dependencies for imagemagick
+ if [ -n "$SKIP_BUILD_DEP" ]; then
+ apt-get update -qq &&
+ apt-get build-dep -qq imagemagick -y
+ elif [ -z "$CI_BUILD" ]; then
+ apt-get update -qq
+ fi
+
+ # Install other build dependencies
+ PKG_LIST=(git curl make cmake automake libtool yasm g++ pkg-config perl libde265-dev libx265-dev libltdl-dev libopenjp2-7-dev liblcms2-dev libbrotli-dev libzip-dev libbz2-dev liblqr-1-0-dev libzstd-dev libgif-dev libjpeg-dev libopenexr-dev libpng-dev libwebp-dev librsvg2-dev libwmf-dev libxml2-dev libtiff-dev libraw-dev ghostscript gsfonts ffmpeg libpango1.0-dev libdjvulibre-dev libfftw3-dev libgs-dev libgraphviz-dev)
+
+ if [[ "${OS_SHORT_CODENAME,,}" != *"stretch"* && "${OS_SHORT_CODENAME,,}" != *"xenial"* ]]; then
+ PKG_LIST+=(libraqm-dev libraqm0)
+ fi
+
+ if [ -n "$CHECKINSTALL" ]; then
+ PKG_LIST+=(checkinstall)
+ fi
+
+ apt-get install -y "${PKG_LIST[@]}"
+
+ CMAKE_VERSION=$(cmake --version | head -n1 | cut -d" " -f3)
+ } >> "$LOG_FILE" 2>&1; then
+ echo -ne " Installing dependencies [${CGREEN}OK${CEND}]\\r"
+ echo ""
+ else
+ echo -ne " Installing dependencies [${CRED}FAILURE${CEND}]\\r"
+ echo ""
+ echo -e " ${CBLUE}Please check $LOG_FILE for details.${CEND}"
+ echo ""
+
+ exit 1
+ fi
+}
+
+# Build aom
+install_aom() {
+ cd "$WORK_DIR" || exit 1
+
+ if {
+ echo -ne ' Building aom [..]\r'
+
+ if [ "$(version "$CMAKE_VERSION")" -lt "$(version 3.6)" ]; then
+ echo -ne " Building aom [${CYELLOW}SKIPPED (CMAKE version not sufficient)${CEND}]\\r"
+ echo ""
+
+ return
+ fi
+
+ if [ -z "$SKIP_AOM" ]; then
+ if [ -z "$FORCE" ] && [ -n "$INSTALLED_AOM_VER" ] && [ "$(version "$INSTALLED_AOM_VER")" -ge "$(version "$AOM_VER")" ]; then
+ echo -ne " Building aom [${CYELLOW}SKIPPED${CEND}]\\r"
+ echo ""
+
+ return
+ fi
+ else
+ echo -ne " Building aom [${CYELLOW}SKIPPED${CEND}]\\r"
+ echo ""
+
+ return
+ fi
+
+ {
+ if [ -n "$AOM_VER" ]; then
+ httpGet "$GH_FILE_BASE/jbeich/aom/tar.gz/v$AOM_VER" > "aom-$AOM_VER.tar.gz"
+
+ if [ -n "$AOM_HASH" ]; then
+ if [ "$(sha1sum "aom-$AOM_VER.tar.gz" | cut -b-40)" != "$AOM_HASH" ]; then
+ echo -ne " Building aom [${CRED}FAILURE${CEND}]\\r"
+ echo ""
+ echo -e " ${CBLUE}Please check $LOG_FILE for details.${CEND}"
+ echo ""
+ fi
+ fi
+
+ # see https://github.com/SoftCreatR/imei/issues/9
+ CMAKE_FLAGS="-DBUILD_SHARED_LIBS=1 -DENABLE_DOCS=0 -DENABLE_TESTS=0 -DENABLE_CCACHE=1"
+
+ if [[ "${OS_DISTRO,,}" == *"raspbian"* ]]; then
+ CMAKE_FLAGS+=' -DCMAKE_C_FLAGS="-mfloat-abi=hard -march=armv7-a -marm -mfpu=neon"'
+ fi
+
+ tar -xf "aom-$AOM_VER.tar.gz" &&
+ mkdir "$WORK_DIR/build_aom" &&
+ cd "$WORK_DIR/build_aom" &&
+ cmake "../aom-$AOM_VER/" "$CMAKE_FLAGS" &&
+ make
+
+ if [ -n "$CHECKINSTALL" ]; then
+ echo "AV1 Video Codec Library (IMEI v$INSTALLER_VER)" >> description-pak &&
+ checkinstall \
+ --default \
+ --nodoc \
+ --pkgname="imei-libaom" \
+ --pkglicense="BSD-2-Clause" \
+ --pkgversion="$AOM_VER" \
+ --pkgrelease="imei$INSTALLER_VER" \
+ --pakdir="/usr/local/src" \
+ --requires="git,cmake \(\>= 3.6\),perl,yasm"
+ else
+ make install
+ fi
+
+ ldconfig
+ fi
+ } >> "$LOG_FILE" 2>&1
+ }; then
+ UPDATE_LIBHEIF="yes"
+
+ echo -ne " Building aom [${CGREEN}OK${CEND}]\\r"
+ echo ""
+ else
+ echo -ne " Building aom [${CRED}FAILURE${CEND}]\\r"
+ echo ""
+ echo -e " ${CBLUE}Please check $LOG_FILE for details.${CEND}"
+ echo ""
+
+ exit 1
+ fi
+}
+
+# Build libheif
+install_libheif() {
+ cd "$WORK_DIR" || exit 1
+
+ if {
+ echo -ne ' Building libheif [..]\r'
+
+ if [ -z "$SKIP_LIBHEIF" ]; then
+ if [ -z "$FORCE" ] && [ -z "$UPDATE_LIBHEIF" ] && [ -n "$INSTALLED_LIBHEIF_VER" ] && [ "$(version "$INSTALLED_LIBHEIF_VER")" -ge "$(version "$LIBHEIF_VER")" ]; then
+ echo -ne " Building libheif [${CYELLOW}SKIPPED${CEND}]\\r"
+ echo ""
+
+ return
+ fi
+ else
+ echo -ne " Building libheif [${CYELLOW}SKIPPED${CEND}]\\r"
+ echo ""
+
+ return
+ fi
+
+ if [ ! -L "$LIB_DIR/lib/libaom.so" ]; then
+ echo -ne " Building libheif [${CYELLOW}SKIPPED (aom is required but not installed)${CEND}]\\r"
+ echo ""
+
+ return
+ fi
+
+ {
+ if [ -n "$LIBHEIF_VER" ]; then
+ httpGet "$GH_FILE_BASE/strukturag/libheif/tar.gz/v$LIBHEIF_VER" > "libheif-$LIBHEIF_VER.tar.gz"
+
+ if [ -n "$LIBHEIF_HASH" ]; then
+ if [ "$(sha1sum "libheif-$LIBHEIF_VER.tar.gz" | cut -b-40)" != "$LIBHEIF_HASH" ]; then
+ echo -e " Building libheif [${CRED}FAILURE${CEND}]\\r"
+ echo ""
+ echo -e " ${CBLUE}Please check $LOG_FILE for details.${CEND}"
+ echo ""
+ fi
+ fi
+
+ tar -xf "libheif-$LIBHEIF_VER.tar.gz" &&
+ cd "libheif-$LIBHEIF_VER" &&
+ ./autogen.sh &&
+ ./configure &&
+ make
+
+ if [ -n "$CHECKINSTALL" ]; then
+ echo "ISO/IEC 23008-12:2017 HEIF file format decoder (IMEI v$INSTALLER_VER)" >> description-pak &&
+ checkinstall \
+ --default \
+ --nodoc \
+ --pkgname="imei-libheif" \
+ --pkglicense="GPL-2.0-or-later" \
+ --pkgversion="$LIBHEIF_VER" \
+ --pkgrelease="imei$INSTALLER_VER" \
+ --pakdir="/usr/local/src" \
+ --requires="automake,make,pkg-config,libde265-dev,libx265-dev,libjpeg-dev,imei-libaom"
+ else
+ make install
+ fi
+
+ ldconfig
+ fi
+ } >> "$LOG_FILE" 2>&1
+ }; then
+ UPDATE_IMAGEMAGICK="yes"
+
+ echo -ne " Building libheif [${CGREEN}OK${CEND}]\\r"
+ echo ""
+ else
+ echo -e " Building libheif [${CRED}FAILURE${CEND}]\\r"
+ echo ""
+ echo -e " ${CBLUE}Please check $LOG_FILE for details.${CEND}"
+ echo ""
+
+ exit 1
+ fi
+}
+
+# Build JPEG XL
+install_jxl() {
+ cd "$WORK_DIR" || exit 1
+
+ if {
+ echo -ne ' Building jpegxl [..]\r'
+
+ if [ "$(version "$CMAKE_VERSION")" -lt "$(version 3.10)" ]; then
+ echo -ne " Building jpegxl [${CYELLOW}SKIPPED (CMAKE version not sufficient)${CEND}]\\r"
+ echo ""
+
+ return
+ fi
+
+ if [ -z "$SKIP_JXL" ]; then
+ if [ -z "$FORCE" ] && [ -z "$UPDATE_LIBHEIF" ] && [ -n "$INSTALLED_JXL_VER" ] && [ "$(version "$INSTALLED_JXL_VER")" -ge "$(version "$JXL_VER")" ]; then
+ echo -ne " Building jpegxl [${CYELLOW}SKIPPED${CEND}]\\r"
+ echo ""
+
+ return
+ fi
+ else
+ echo -ne " Building jpegxl [${CYELLOW}SKIPPED${CEND}]\\r"
+ echo ""
+
+ return
+ fi
+
+ {
+ if [ -n "$JXL_VER" ]; then
+ httpGet "$GH_FILE_BASE/libjxl/libjxl/tar.gz/v$JXL_VER" > "libjxl-$JXL_VER.tar.gz"
+
+ if [ -n "$JXL_HASH" ]; then
+ if [ "$(sha1sum "libjxl-$JXL_VER.tar.gz" | cut -b-40)" != "$JXL_HASH" ]; then
+ echo -e " Building jpegxl [${CRED}FAILURE${CEND}]\\r"
+ echo ""
+ echo -e " ${CBLUE}Please check $LOG_FILE for details.${CEND}"
+ echo ""
+ fi
+ fi
+
+ tar -xf "libjxl-$JXL_VER.tar.gz" &&
+ cd "libjxl-$JXL_VER" &&
+ ./deps.sh &&
+ mkdir "build" &&
+ cd "build" &&
+ cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF ..
+ make
+
+ if [ -n "$CHECKINSTALL" ]; then
+ echo "JPEG XL image format reference implementation (IMEI v$INSTALLER_VER)" >> description-pak &&
+ checkinstall \
+ --default \
+ --nodoc \
+ --pkgname="imei-libjxl" \
+ --pkglicense="Apache-2.0" \
+ --pkgversion="$JXL_VER" \
+ --pkgrelease="imei$INSTALLER_VER" \
+ --pakdir="/usr/local/src" \
+ --requires="cmake \(\>= 3.10\),pkg-config,libbrotli-dev,libgif-dev,libjpeg-dev,libopenexr-dev,libpng-dev,libwebp-dev"
+ else
+ make install
+ fi
+
+ ldconfig
+ fi
+ } >> "$LOG_FILE" 2>&1
+ }; then
+ UPDATE_IMAGEMAGICK="yes"
+
+ echo -ne " Building jpegxl [${CGREEN}OK${CEND}]\\r"
+ echo ""
+ else
+ echo -e " Building jpegxl [${CRED}FAILURE${CEND}]\\r"
+ echo ""
+ echo -e " ${CBLUE}Please check $LOG_FILE for details.${CEND}"
+ echo ""
+
+ exit 1
+ fi
+}
+
+# Build ImageMagick
+install_imagemagick() {
+ cd "$WORK_DIR" || exit 1
+
+ if {
+ if [ "$QUANTUM_DEPTH" -eq 8 ]; then
+ echo -ne ' Building ImageMagick (Q'"$QUANTUM_DEPTH"') [..]\r'
+ else
+ echo -ne ' Building ImageMagick (Q'"$QUANTUM_DEPTH"') [..]\r'
+ fi
+
+ if [ -z "$FORCE" ] && [ -z "$FORCE_IMAGEMAGICK" ] && [ -z "$UPDATE_IMAGEMAGICK" ] && [ -n "$INSTALLED_IMAGEMAGICK_VER" ] && [ "$(version "${INSTALLED_IMAGEMAGICK_VER//-/}")" -ge "$(version "${IMAGEMAGICK_VER//-/}")" ]; then
+ if [ "$QUANTUM_DEPTH" -eq 8 ]; then
+ echo -ne " Building ImageMagick (Q$QUANTUM_DEPTH) [${CYELLOW}SKIPPED${CEND}]\\r"
+ else
+ echo -ne " Building ImageMagick (Q$QUANTUM_DEPTH) [${CYELLOW}SKIPPED${CEND}]\\r"
+ fi
+
+ echo ""
+
+ return
+ fi
+
+ {
+ if [ -n "$IMAGEMAGICK_VER" ]; then
+ DIR_SUFFIX=""
+
+ if [ "$(echo "$IMAGEMAGICK_VER" | cut -b-1)" -eq 6 ]; then
+ DIR_SUFFIX="6"
+
+ httpGet "$GH_FILE_BASE/ImageMagick/ImageMagick6/tar.gz/$IMAGEMAGICK_VER" > "ImageMagick-$IMAGEMAGICK_VER.tar.gz"
+ else
+ httpGet "$GH_FILE_BASE/ImageMagick/ImageMagick/tar.gz/$IMAGEMAGICK_VER" > "ImageMagick-$IMAGEMAGICK_VER.tar.gz"
+ fi
+
+ if [ -n "$IMAGEMAGICK_HASH" ]; then
+ if [ "$(sha1sum "ImageMagick-$IMAGEMAGICK_VER.tar.gz" | cut -b-40)" != "$IMAGEMAGICK_HASH" ]; then
+ if [ "$QUANTUM_DEPTH" -eq 8 ]; then
+ echo -e " Building ImageMagick (Q$QUANTUM_DEPTH) [${CRED}FAILURE${CEND}]\\r"
+ else
+ echo -e " Building ImageMagick (Q$QUANTUM_DEPTH) [${CRED}FAILURE${CEND}]\\r"
+ fi
+
+ echo ""
+ echo -e " ${CBLUE}Please check $LOG_FILE for details.${CEND}"
+ echo ""
+ fi
+ fi
+
+ tar -xf "ImageMagick-$IMAGEMAGICK_VER.tar.gz" &&
+ cd "ImageMagick$DIR_SUFFIX-$IMAGEMAGICK_VER" &&
+ ./configure --prefix="$BUILD_DIR" --sysconfdir="$CONFIG_DIR" \
+ CFLAGS="-O3 -march=native" \
+ CXXFLAGS="-O3 -march=native" \
+ --disable-static \
+ --enable-shared \
+ --enable-openmp \
+ --enable-opencl \
+ --enable-cipher \
+ --enable-hdri \
+ --enable-docs \
+ --with-threads \
+ --with-modules \
+ --with-quantum-depth="$QUANTUM_DEPTH" \
+ --with-magick-plus-plus \
+ --with-perl \
+ --without-jemalloc \
+ --without-tcmalloc \
+ --without-umem \
+ --without-autotrace \
+ --with-bzlib \
+ --with-x \
+ --with-zlib \
+ --with-zstd \
+ --without-dps \
+ --with-fftw \
+ --without-flif \
+ --without-fpx \
+ --with-djvu \
+ --with-fontconfig \
+ --with-freetype \
+ --with-raqm \
+ --with-gslib \
+ --with-gvc \
+ --with-heic \
+ --with-jbig \
+ --with-jpeg \
+ --with-jxl=yes \
+ --with-lcms \
+ --with-openjp2 \
+ --with-lqr \
+ --with-lzma \
+ --with-openexr \
+ --with-pango \
+ --with-png \
+ --with-raw \
+ --with-rsvg \
+ --with-tiff \
+ --with-webp \
+ --with-wmf \
+ --with-xml \
+ --with-dejavu-font-dir='/usr/share/fonts/truetype/ttf-dejavu' \
+ --with-gs-font-dir='/usr/share/fonts/type1/gsfonts' \
+ --with-urw-base35-font-dir='/usr/share/fonts/type1/urw-base35' \
+ --with-fontpath='/usr/share/fonts/type1' \
+ PSDelegate='/usr/bin/gs' &&
+ make
+
+ if [ -n "$CHECKINSTALL" ]; then
+ echo "image manipulation programs (IMEI v$INSTALLER_VER)" >> description-pak &&
+ checkinstall \
+ --default \
+ --nodoc \
+ --pkgname=imei-imagemagick \
+ --pkglicense="Apache-2.0" \
+ --pkgversion="$IMAGEMAGICK_VER" \
+ --pkgrelease="imei$INSTALLER_VER" \
+ --pakdir="/usr/local/src" \
+ --conflicts="imagemagick" \
+ --requires="pkg-config"
+ else
+ make install
+ fi
+
+ ldconfig
+ fi
+ } >> "$LOG_FILE" 2>&1
+ }; then
+ if [ "$QUANTUM_DEPTH" -eq 8 ]; then
+ echo -ne " Building ImageMagick (Q$QUANTUM_DEPTH) [${CGREEN}OK${CEND}]\\r"
+ else
+ echo -ne " Building ImageMagick (Q$QUANTUM_DEPTH) [${CGREEN}OK${CEND}]\\r"
+ fi
+
+ echo ""
+ else
+ if [ "$QUANTUM_DEPTH" -eq 8 ]; then
+ echo -e " Building ImageMagick (Q$QUANTUM_DEPTH) [${CRED}FAILURE${CEND}]\\r"
+ else
+ echo -e " Building ImageMagick (Q$QUANTUM_DEPTH) [${CRED}FAILURE${CEND}]\\r"
+ fi
+
+ echo ""
+ echo -e " ${CBLUE}Please check $LOG_FILE for details.${CEND}"
+ echo ""
+
+ exit 1
+ fi
+}
+
+finish_installation() {
+ echo -ne ' Verifying installation [..]\r'
+
+ # Check if ImageMagick version matches
+ {
+ VERIFY_INSTALLATION=$("$BUILD_DIR/bin/identify" -version | grep -oP "$IMAGEMAGICK_VER")
+ } >> "$LOG_FILE" 2>&1
+
+ if [ -n "$VERIFY_INSTALLATION" ]; then
+ echo -ne " Verifying installation [${CGREEN}OK${CEND}]\\r"
+ echo ""
+ echo -e " ${CGREEN}Process has been finished successfully after $(displaytime $(($(date +%s) - START)))!${CEND}"
+ echo ""
+ else
+ echo -ne " Verifying installation [${CRED}FAILURE${CEND}]\\r"
+ echo ""
+ echo -e " ${CBLUE}Please check $LOG_FILE for details.${CEND}"
+ echo ""
+ fi
+}
+
+######################
+# Install everything #
+######################
+
+echo -ne "\ec"
+
+WELCOME_TXT="Welcome to IMEI - ImageMagick Easy Install ${INSTALLER_VER}"
+WELCOME_LEN=${#WELCOME_TXT}
+
+echo ""
+echo " $(str_repeat "$WELCOME_LEN" "#")"
+echo " $WELCOME_TXT"
+echo " $(str_repeat "$WELCOME_LEN" "#")"
+echo ""
+
+if [ -z "$CI_BUILD" ] && [ -n "$INSTALLER_VER" ] && [ "$(version "$INSTALLER_VER")" -lt "$(version "$INSTALLER_LATEST_VER")" ]; then
+ echo -e " ${CYELLOW}A newer installer version ($INSTALLER_LATEST_VER) is available!${CEND}"
+ echo ""
+fi
+
+echo " Detected OS : $OS_DISTRO"
+echo " Detected Arch : $OS_ARCH"
+echo " Detected Cores : $NUM_CORES"
+echo ""
+echo " Used web client : $CLIENT"
+echo ""
+echo " Work Dir : $WORK_DIR"
+echo " Build Dir : $BUILD_DIR"
+echo " Config Dir : $CONFIG_DIR"
+echo " Log File : $LOG_FILE"
+echo ""
+echo " Force Build All : ${FORCE:-"no"}"
+echo " Force Build IM : ${FORCE_IMAGEMAGICK:-"no"}"
+echo " Checkinstall : ${CHECKINSTALL:-"no"}"
+echo " CI Build : ${CI_BUILD:-"no"}"
+echo " Signature Check : ${VERIFY_SIGNATURE:-"yes"}"
+echo ""
+
+echo " #####################"
+echo " Installation Process"
+echo " #####################"
+echo ""
+
+# Run installer functions
+install_deps
+install_aom
+install_libheif
+install_jxl
+install_imagemagick
+finish_installation
+
+exit 0
diff --git a/ubuntu_setup b/ubuntu_setup
index ced865073..07a57e2a0 100644
--- a/ubuntu_setup
+++ b/ubuntu_setup
@@ -13,6 +13,7 @@ sudo apt -y install gunicorn
sudo apt -y install ffmpeg
mkdir /songs
mkdir /images
+. imei.sh
cp ./env /env
. /env
sudo -E gunicorn files.__main__:app -k gevent -w 2 --reload -b 0.0.0.0:80:80 --max-requests 1000 --max-requests-jitter 500
\ No newline at end of file