mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-07-11 16:37:37 +00:00
Refactor: Stirling-PDF (#5872)
This commit is contained in:
@ -27,31 +27,41 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
msg_info "Updating ${APP}"
|
RELEASE=$(curl -fsSL https://api.github.com/repos/Stirling-Tools/Stirling-PDF/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
systemctl stop stirlingpdf
|
if [[ "${RELEASE}" != "$(cat ~/.stirling-pdf 2>/dev/null)" ]] || [[ ! -f ~/.stirling-pdf ]]; then
|
||||||
if [[ -n $(dpkg -l | grep -w ocrmypdf) ]] && [[ -z $(dpkg -l | grep -w qpdf) ]]; then
|
if [[ ! -f /etc/systemd/system/unoserver.service ]]; then
|
||||||
$STD apt-get remove -y ocrmypdf
|
msg_custom "⚠️ " "\e[33m" "Legacy installation detected – please recreate the container using the latest install script."
|
||||||
$STD apt-get install -y qpdf
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
PYTHON_VERSION="3.12" setup_uv
|
||||||
|
JAVA_VERSION="21" setup_java
|
||||||
|
|
||||||
|
msg_info "Stopping Services"
|
||||||
|
systemctl stop stirlingpdf libreoffice-listener unoserver
|
||||||
|
msg_ok "Stopped Services"
|
||||||
|
|
||||||
|
if [[ -f ~/.Stirling-PDF-login ]]; then
|
||||||
|
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "stirling-pdf" "Stirling-Tools/Stirling-PDF" "singlefile" "latest" "/opt/Stirling-PDF" "Stirling-PDF-with-login.jar"
|
||||||
|
mv /opt/Stirling-PDF/Stirling-PDF-with-login.jar /opt/Stirling-PDF/Stirling-PDF.jar
|
||||||
|
else
|
||||||
|
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "stirling-pdf" "Stirling-Tools/Stirling-PDF" "singlefile" "latest" "/opt/Stirling-PDF" "Stirling-PDF.jar"
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Refreshing Font Cache"
|
||||||
|
$STD fc-cache -fv
|
||||||
|
msg_ok "Font Cache Updated"
|
||||||
|
|
||||||
|
msg_info "Starting Services"
|
||||||
|
systemctl start stirlingpdf libreoffice-listener unoserver
|
||||||
|
msg_ok "Started Services"
|
||||||
|
|
||||||
|
msg_ok "Update Successful"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Stirling-Tools/Stirling-PDF/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
curl -fsSL "https://github.com/Stirling-Tools/Stirling-PDF/archive/refs/tags/v$RELEASE.tar.gz" -o $(basename "https://github.com/Stirling-Tools/Stirling-PDF/archive/refs/tags/v$RELEASE.tar.gz")
|
|
||||||
tar -xzf v$RELEASE.tar.gz
|
|
||||||
cd Stirling-PDF-$RELEASE
|
|
||||||
chmod +x ./gradlew
|
|
||||||
$STD ./gradlew build -x spotlessApply -x spotlessCheck -x test -x sonarqube
|
|
||||||
rm -rf /opt/Stirling-PDF/Stirling-PDF-*.jar
|
|
||||||
cp -r ./stirling-pdf/build/libs/*.jar /opt/Stirling-PDF/Stirling-PDF-$RELEASE.jar
|
|
||||||
cp -r scripts /opt/Stirling-PDF/
|
|
||||||
cp -r pipeline /opt/Stirling-PDF/
|
|
||||||
cp -r stirling-pdf/src/main/resources/static/fonts/*.ttf /usr/share/fonts/opentype/noto/
|
|
||||||
cd ~
|
|
||||||
rm -rf Stirling-PDF-$RELEASE v$RELEASE.tar.gz
|
|
||||||
ln -sf /opt/Stirling-PDF/Stirling-PDF-$RELEASE.jar /opt/Stirling-PDF/Stirling-PDF.jar
|
|
||||||
systemctl start stirlingpdf
|
|
||||||
msg_ok "Updated ${APP} to v$RELEASE"
|
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
build_container
|
build_container
|
||||||
description
|
description
|
||||||
|
66
frontend/public/json/stirling-pdf.json
generated
66
frontend/public/json/stirling-pdf.json
generated
@ -1,35 +1,35 @@
|
|||||||
{
|
{
|
||||||
"name": "Stirling-PDF",
|
"name": "Stirling-PDF",
|
||||||
"slug": "stirling-pdf",
|
"slug": "stirling-pdf",
|
||||||
"categories": [
|
"categories": [
|
||||||
12
|
12
|
||||||
],
|
],
|
||||||
"date_created": "2024-05-02",
|
"date_created": "2024-05-02",
|
||||||
"type": "ct",
|
"type": "ct",
|
||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 8080,
|
"interface_port": 8080,
|
||||||
"documentation": null,
|
"documentation": null,
|
||||||
"website": "https://github.com/Stirling-Tools/Stirling-PDF",
|
"website": "https://github.com/Stirling-Tools/Stirling-PDF",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/stirling-pdf.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/stirling-pdf.webp",
|
||||||
"config_path": "/opt/Stirling-PDF/.env",
|
"config_path": "/opt/Stirling-PDF/.env",
|
||||||
"description": "Stirling-PDF is a powerful locally hosted web based PDF manipulation tool that allows you to perform various operations on PDF files, such as splitting merging, converting, reorganizing, adding images, rotating, compressing, and more.",
|
"description": "Stirling-PDF is a powerful locally hosted web based PDF manipulation tool that allows you to perform various operations on PDF files, such as splitting merging, converting, reorganizing, adding images, rotating, compressing, and more.",
|
||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "ct/stirling-pdf.sh",
|
"script": "ct/stirling-pdf.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": 2,
|
"cpu": 2,
|
||||||
"ram": 2048,
|
"ram": 2048,
|
||||||
"hdd": 8,
|
"hdd": 8,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "12"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"default_credentials": {
|
"default_credentials": {
|
||||||
"username": null,
|
"username": "admin",
|
||||||
"password": null
|
"password": "stirling"
|
||||||
},
|
},
|
||||||
"notes": []
|
"notes": []
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,6 @@ update_os
|
|||||||
|
|
||||||
msg_info "Installing Dependencies (Patience)"
|
msg_info "Installing Dependencies (Patience)"
|
||||||
$STD apt-get install -y \
|
$STD apt-get install -y \
|
||||||
git \
|
|
||||||
automake \
|
automake \
|
||||||
autoconf \
|
autoconf \
|
||||||
libtool \
|
libtool \
|
||||||
@ -25,10 +24,26 @@ $STD apt-get install -y \
|
|||||||
make \
|
make \
|
||||||
g++ \
|
g++ \
|
||||||
unpaper \
|
unpaper \
|
||||||
|
fonts-urw-base35 \
|
||||||
qpdf \
|
qpdf \
|
||||||
poppler-utils
|
poppler-utils
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
PYTHON_VERSION="3.12" setup_uv
|
||||||
|
JAVA_VERSION="21" setup_java
|
||||||
|
|
||||||
|
read -r -p "${TAB3}Do you want to Stirling-PDF with Login? (no/n = without Login) [Y/n] " response
|
||||||
|
response=${response,,} # Convert to lowercase
|
||||||
|
login_mode="false"
|
||||||
|
if [[ "$response" == "y" || "$response" == "yes" || -z "$response" ]]; then
|
||||||
|
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "stirling-pdf" "Stirling-Tools/Stirling-PDF" "singlefile" "latest" "/opt/Stirling-PDF" "Stirling-PDF-with-login.jar"
|
||||||
|
mv /opt/Stirling-PDF/Stirling-PDF-with-login.jar /opt/Stirling-PDF/Stirling-PDF.jar
|
||||||
|
touch ~/.Stirling-PDF-login
|
||||||
|
login_mode="true"
|
||||||
|
else
|
||||||
|
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "stirling-pdf" "Stirling-Tools/Stirling-PDF" "singlefile" "latest" "/opt/Stirling-PDF" "Stirling-PDF.jar"
|
||||||
|
fi
|
||||||
|
|
||||||
msg_info "Installing LibreOffice Components"
|
msg_info "Installing LibreOffice Components"
|
||||||
$STD apt-get install -y \
|
$STD apt-get install -y \
|
||||||
libreoffice-writer \
|
libreoffice-writer \
|
||||||
@ -37,32 +52,35 @@ $STD apt-get install -y \
|
|||||||
libreoffice-core \
|
libreoffice-core \
|
||||||
libreoffice-common \
|
libreoffice-common \
|
||||||
libreoffice-base-core \
|
libreoffice-base-core \
|
||||||
python3-uno
|
libreoffice-script-provider-python \
|
||||||
|
libreoffice-java-common \
|
||||||
|
unoconv \
|
||||||
|
pngquant \
|
||||||
|
weasyprint
|
||||||
msg_ok "Installed LibreOffice Components"
|
msg_ok "Installed LibreOffice Components"
|
||||||
|
|
||||||
msg_info "Installing Python Dependencies"
|
msg_info "Installing Python Dependencies"
|
||||||
$STD apt-get install -y \
|
mkdir -p /tmp/stirling-pdf
|
||||||
python3 \
|
$STD uv venv /opt/.venv
|
||||||
python3-pip
|
export PATH="/opt/.venv/bin:$PATH"
|
||||||
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
|
source /opt/.venv/bin/activate
|
||||||
$STD pip3 install \
|
$STD uv pip install --upgrade pip
|
||||||
uno \
|
$STD uv pip install \
|
||||||
opencv-python-headless \
|
opencv-python-headless \
|
||||||
unoconv \
|
ocrmypdf \
|
||||||
pngquant \
|
pillow \
|
||||||
WeasyPrint
|
pdf2image
|
||||||
|
|
||||||
|
$STD apt-get install -y python3-uno python3-pip
|
||||||
|
$STD pip3 install --break-system-packages unoserver
|
||||||
|
ln -sf /opt/.venv/bin/python3 /usr/local/bin/python3
|
||||||
|
ln -sf /opt/.venv/bin/pip /usr/local/bin/pip
|
||||||
msg_ok "Installed Python Dependencies"
|
msg_ok "Installed Python Dependencies"
|
||||||
|
|
||||||
msg_info "Installing Azul Zulu"
|
|
||||||
curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xB1998361219BD9C9" -o "/etc/apt/trusted.gpg.d/zulu-repo.asc"
|
|
||||||
curl -fsSL "https://cdn.azul.com/zulu/bin/zulu-repo_1.0.0-3_all.deb" -o "/zulu-repo_1.0.0-3_all.deb"
|
|
||||||
$STD dpkg -i zulu-repo_1.0.0-3_all.deb
|
|
||||||
$STD apt-get update
|
|
||||||
$STD apt-get -y install zulu17-jdk
|
|
||||||
msg_ok "Installed Azul Zulu"
|
|
||||||
|
|
||||||
msg_info "Installing JBIG2"
|
msg_info "Installing JBIG2"
|
||||||
$STD git clone https://github.com/agl/jbig2enc /opt/jbig2enc
|
$STD curl -fsSL -o /tmp/jbig2enc.tar.gz https://github.com/agl/jbig2enc/archive/refs/tags/0.30.tar.gz
|
||||||
|
mkdir -p /opt/jbig2enc
|
||||||
|
tar -xzf /tmp/jbig2enc.tar.gz -C /opt/jbig2enc --strip-components=1
|
||||||
cd /opt/jbig2enc
|
cd /opt/jbig2enc
|
||||||
$STD bash ./autogen.sh
|
$STD bash ./autogen.sh
|
||||||
$STD bash ./configure
|
$STD bash ./configure
|
||||||
@ -74,25 +92,46 @@ msg_info "Installing Language Packs (Patience)"
|
|||||||
$STD apt-get install -y 'tesseract-ocr-*'
|
$STD apt-get install -y 'tesseract-ocr-*'
|
||||||
msg_ok "Installed Language Packs"
|
msg_ok "Installed Language Packs"
|
||||||
|
|
||||||
msg_info "Installing Stirling-PDF (Additional Patience)"
|
msg_info "Creating Environment Variables"
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Stirling-Tools/Stirling-PDF/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
cat <<EOF >/opt/Stirling-PDF/.env
|
||||||
curl -fsSL "https://github.com/Stirling-Tools/Stirling-PDF/archive/refs/tags/v${RELEASE}.tar.gz" -o "v${RELEASE}.tar.gz"
|
# Java tuning
|
||||||
tar -xzf v${RELEASE}.tar.gz
|
JAVA_BASE_OPTS="-XX:+UnlockExperimentalVMOptions -XX:MaxRAMPercentage=75 -XX:InitiatingHeapOccupancyPercent=20 -XX:+G1PeriodicGCInvokesConcurrent -XX:G1PeriodicGCInterval=10000 -XX:+UseStringDeduplication -XX:G1PeriodicGCSystemLoadThreshold=70"
|
||||||
cd Stirling-PDF-$RELEASE
|
JAVA_CUSTOM_OPTS=""
|
||||||
chmod +x ./gradlew
|
|
||||||
$STD ./gradlew build -x spotlessApply -x spotlessCheck -x test -x sonarqube
|
# LibreOffice
|
||||||
mkdir -p /opt/Stirling-PDF
|
PATH=/opt/.venv/bin:/usr/lib/libreoffice/program:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
||||||
touch /opt/Stirling-PDF/.env
|
UNO_PATH=/usr/lib/libreoffice/program
|
||||||
mv ./stirling-pdf/build/libs/*.jar /opt/Stirling-PDF/Stirling-PDF-$RELEASE.jar
|
URE_BOOTSTRAP=file:///usr/lib/libreoffice/program/fundamentalrc
|
||||||
mv scripts /opt/Stirling-PDF/
|
PYTHONPATH=/usr/lib/libreoffice/program:/opt/.venv/lib/python3.12/site-packages
|
||||||
mv pipeline /opt/Stirling-PDF/
|
LD_LIBRARY_PATH=/usr/lib/libreoffice/program
|
||||||
mv stirling-pdf/src/main/resources/static/fonts/*.ttf /usr/share/fonts/opentype/noto/
|
|
||||||
ln -s /opt/Stirling-PDF/Stirling-PDF-$RELEASE.jar /opt/Stirling-PDF/Stirling-PDF.jar
|
STIRLING_TEMPFILES_DIRECTORY=/tmp/stirling-pdf
|
||||||
ln -s /usr/share/tesseract-ocr/5/tessdata/ /usr/share/tessdata
|
TMPDIR=/tmp/stirling-pdf
|
||||||
msg_ok "Installed Stirling-PDF"
|
TEMP=/tmp/stirling-pdf
|
||||||
|
TMP=/tmp/stirling-pdf
|
||||||
|
|
||||||
|
# Paths
|
||||||
|
PATH=/opt/.venv/bin:/usr/lib/libreoffice/program:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
||||||
|
EOF
|
||||||
|
|
||||||
|
if [[ "$login_mode" == "true" ]]; then
|
||||||
|
cat <<EOF >>/opt/Stirling-PDF/.env
|
||||||
|
# activate Login
|
||||||
|
DISABLE_ADDITIONAL_FEATURES=false
|
||||||
|
SECURITY_ENABLELOGIN=true
|
||||||
|
|
||||||
|
# login credentials
|
||||||
|
SECURITY_INITIALLOGIN_USERNAME=admin
|
||||||
|
SECURITY_INITIALLOGIN_PASSWORD=stirling
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
msg_ok "Created Environment Variables"
|
||||||
|
|
||||||
|
msg_info "Refreshing Font Cache"
|
||||||
|
$STD fc-cache -fv
|
||||||
|
msg_ok "Font Cache Updated"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
# Create LibreOffice listener service
|
|
||||||
cat <<EOF >/etc/systemd/system/libreoffice-listener.service
|
cat <<EOF >/etc/systemd/system/libreoffice-listener.service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=LibreOffice Headless Listener Service
|
Description=LibreOffice Headless Listener Service
|
||||||
@ -109,14 +148,6 @@ Restart=always
|
|||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
# Set up environment variables
|
|
||||||
cat <<EOF >/opt/Stirling-PDF/.env
|
|
||||||
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/libreoffice/program
|
|
||||||
UNO_PATH=/usr/lib/libreoffice/program
|
|
||||||
PYTHONPATH=/usr/lib/python3/dist-packages:/usr/lib/libreoffice/program
|
|
||||||
LD_LIBRARY_PATH=/usr/lib/libreoffice/program
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cat <<EOF >/etc/systemd/system/stirlingpdf.service
|
cat <<EOF >/etc/systemd/system/stirlingpdf.service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Stirling-PDF service
|
Description=Stirling-PDF service
|
||||||
@ -139,16 +170,32 @@ RestartSec=10
|
|||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
# Enable and start services
|
cat <<EOF >/etc/systemd/system/unoserver.service
|
||||||
|
[Unit]
|
||||||
|
Description=UnoServer RPC Interface
|
||||||
|
After=libreoffice-listener.service
|
||||||
|
Requires=libreoffice-listener.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/usr/local/bin/unoserver --port 2003 --interface 127.0.0.1
|
||||||
|
Restart=always
|
||||||
|
EnvironmentFile=/opt/Stirling-PDF/.env
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
|
||||||
systemctl enable -q --now libreoffice-listener
|
systemctl enable -q --now libreoffice-listener
|
||||||
systemctl enable -q --now stirlingpdf
|
systemctl enable -q --now stirlingpdf
|
||||||
|
systemctl enable -q --now unoserver
|
||||||
msg_ok "Created Service"
|
msg_ok "Created Service"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -rf v${RELEASE}.tar.gz /zulu-repo_1.0.0-3_all.deb
|
rm -f /tmp/jbig2enc.tar.gz
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
Reference in New Issue
Block a user