mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-08-19 02:52:43 +02:00
Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 45c60f885f | |||
| 68a3566a89 | |||
| 0834bf3709 | |||
| ca19a8e0bd | |||
| 07b8ff91b8 |
@@ -524,19 +524,6 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
||||
|
||||
</details>
|
||||
|
||||
## 2026-08-18
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- romm: add missing /decode and /cache Angie locations for multi-file downloads [@MickLesk](https://github.com/MickLesk) ([#16589](https://github.com/community-scripts/ProxmoxVE/pull/16589))
|
||||
- odoo: use patched wkhtmltopdf build [@MickLesk](https://github.com/MickLesk) ([#16590](https://github.com/community-scripts/ProxmoxVE/pull/16590))
|
||||
|
||||
- #### 💥 Breaking Changes
|
||||
|
||||
- Breaking Change: Migrate all "Alpine" Scripts to Normal CT's [@MickLesk](https://github.com/MickLesk) ([#16587](https://github.com/community-scripts/ProxmoxVE/pull/16587))
|
||||
|
||||
## 2026-08-17
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
___ __ _ ___ ________ __
|
||||
/ | / /___ (_)___ ___ / | ____/ / ____/_ ______ __________/ /
|
||||
/ /| | / / __ \/ / __ \/ _ \______/ /| |/ __ / / __/ / / / __ `/ ___/ __ /
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ ___ / /_/ / /_/ / /_/ / /_/ / / / /_/ /
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ /_/ |_\__,_/\____/\__,_/\__,_/_/ \__,_/
|
||||
/_/
|
||||
@@ -0,0 +1,6 @@
|
||||
___ __ _ __ _ __ __
|
||||
/ | / /___ (_)___ ___ / /_ (_) /_____ ___ ____ _____ _____ ___ / /_
|
||||
/ /| | / / __ \/ / __ \/ _ \______/ __ \/ / __/ __ `__ \/ __ `/ __ `/ __ \/ _ \/ __/
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ /_/ / / /_/ / / / / / /_/ / /_/ / / / / __/ /_
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ /_.___/_/\__/_/ /_/ /_/\__,_/\__, /_/ /_/\___/\__/
|
||||
/_/ /____/
|
||||
@@ -0,0 +1,6 @@
|
||||
___ __ _ ______ __ __
|
||||
/ | / /___ (_)___ ___ / ____/___ _____/ /___/ /_ __
|
||||
/ /| | / / __ \/ / __ \/ _ \______/ / / __ `/ __ / __ / / / /
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ /___/ /_/ / /_/ / /_/ / /_/ /
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ \____/\__,_/\__,_/\__,_/\__, /
|
||||
/_/ /____/
|
||||
@@ -0,0 +1,6 @@
|
||||
___ __ _ ____ __
|
||||
/ | / /___ (_)___ ___ / __ \____ _____/ /_____ _____
|
||||
/ /| | / / __ \/ / __ \/ _ \______/ / / / __ \/ ___/ //_/ _ \/ ___/
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ /_/ / /_/ / /__/ ,< / __/ /
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ /_____/\____/\___/_/|_|\___/_/
|
||||
/_/
|
||||
@@ -0,0 +1,6 @@
|
||||
___ __ _ ______ _
|
||||
/ | / /___ (_)___ ___ / ____/___ _________ ____ (_)___
|
||||
/ /| | / / __ \/ / __ \/ _ \______/ /_ / __ \/ ___/ __ `/ _ \ / / __ \
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ __/ / /_/ / / / /_/ / __/ / / /_/ /
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ /_/ \____/_/ \__, /\___/_/ /\____/
|
||||
/_/ /____/ /___/
|
||||
@@ -0,0 +1,6 @@
|
||||
___ __ _ ______
|
||||
/ | / /___ (_)___ ___ / ____/___ __________ _____ ____
|
||||
/ /| | / / __ \/ / __ \/ _ \______/ / __/ __ `/ ___/ __ `/ __ `/ _ \
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ /_/ / /_/ / / / /_/ / /_/ / __/
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ \____/\__,_/_/ \__,_/\__, /\___/
|
||||
/_/ /____/
|
||||
@@ -0,0 +1,6 @@
|
||||
___ __ _ __
|
||||
/ | / /___ (_)___ ___ ____ _____ _/ /___ _______
|
||||
/ /| | / / __ \/ / __ \/ _ \______/ __ `/ __ `/ __/ / / / ___/
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ /_/ / /_/ / /_/ /_/ (__ )
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ \__, /\__,_/\__/\__,_/____/
|
||||
/_/ /____/
|
||||
@@ -0,0 +1,6 @@
|
||||
___ __ _ _______ __
|
||||
/ | / /___ (_)___ ___ / ____(_) /____ ____ _
|
||||
/ /| | / / __ \/ / __ \/ _ \______/ / __/ / __/ _ \/ __ `/
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ /_/ / / /_/ __/ /_/ /
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ \____/_/\__/\___/\__,_/
|
||||
/_/
|
||||
@@ -0,0 +1,6 @@
|
||||
___ __ _ ______ ____
|
||||
/ | / /___ (_)___ ___ / ____/________ _/ __/___ _____ ____ _
|
||||
/ /| | / / __ \/ / __ \/ _ \______/ / __/ ___/ __ `/ /_/ __ `/ __ \/ __ `/
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ /_/ / / / /_/ / __/ /_/ / / / / /_/ /
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ \____/_/ \__,_/_/ \__,_/_/ /_/\__,_/
|
||||
/_/
|
||||
@@ -0,0 +1,6 @@
|
||||
___ __ _ ____ ________
|
||||
/ | / /___ (_)___ ___ / _/________ ____ / ____/ /___ __ __
|
||||
/ /| | / / __ \/ / __ \/ _ \______ / // ___/ __ \/ __ \/ / / / __ `/ | /| / /
|
||||
/ ___ |/ / /_/ / / / / / __/_____// // / / /_/ / / / / /___/ / /_/ /| |/ |/ /
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ /___/_/ \____/_/ /_/\____/_/\__,_/ |__/|__/
|
||||
/_/
|
||||
@@ -0,0 +1,6 @@
|
||||
___ __ _ __ __ _
|
||||
/ | / /___ (_)___ ___ / / ____ / /__(_)
|
||||
/ /| | / / __ \/ / __ \/ _ \______/ / / __ \/ //_/ /
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ /___/ /_/ / ,< / /
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ /_____/\____/_/|_/_/
|
||||
/_/
|
||||
@@ -0,0 +1,6 @@
|
||||
___ __ _ __ ___ _ ____ ____
|
||||
/ | / /___ (_)___ ___ / |/ /___ ______(_)___ _/ __ \/ __ )
|
||||
/ /| | / / __ \/ / __ \/ _ \______/ /|_/ / __ `/ ___/ / __ `/ / / / __ |
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ / / / /_/ / / / / /_/ / /_/ / /_/ /
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ /_/ /_/\__,_/_/ /_/\__,_/_____/_____/
|
||||
/_/
|
||||
@@ -0,0 +1,6 @@
|
||||
___ __ _ _ __ __ ____ __________
|
||||
/ | / /___ (_)___ ___ / | / /___ ____/ /__ / __ \/ ____/ __ \
|
||||
/ /| | / / __ \/ / __ \/ _ \______/ |/ / __ \/ __ / _ \______/ /_/ / __/ / / / /
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ /| / /_/ / /_/ / __/_____/ _, _/ /___/ /_/ /
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ /_/ |_/\____/\__,_/\___/ /_/ |_/_____/_____/
|
||||
/_/
|
||||
@@ -0,0 +1,6 @@
|
||||
___ __ _ __ ____
|
||||
/ | / /___ (_)___ ___ ____ / /_/ __/_ __
|
||||
/ /| | / / __ \/ / __ \/ _ \______/ __ \/ __/ /_/ / / /
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ / / / /_/ __/ /_/ /
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ /_/ /_/\__/_/ \__, /
|
||||
/_/ /____/
|
||||
@@ -0,0 +1,6 @@
|
||||
___ __ _ ____ __ _____ ____ __
|
||||
/ | / /___ (_)___ ___ / __ \____ _____/ /_____ _________ / ___// __ \ / /
|
||||
/ /| | / / __ \/ / __ \/ _ \______/ /_/ / __ \/ ___/ __/ __ `/ ___/ _ \\__ \/ / / / / /
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ ____/ /_/ (__ ) /_/ /_/ / / / __/__/ / /_/ / / /___
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ /_/ \____/____/\__/\__, /_/ \___/____/\___\_\/_____/
|
||||
/_/ /____/
|
||||
@@ -0,0 +1,6 @@
|
||||
___ __ _ ____ __ __
|
||||
/ | / /___ (_)___ ___ / __ \_________ ____ ___ ___ / /_/ /_ ___ __ _______
|
||||
/ /| | / / __ \/ / __ \/ _ \______/ /_/ / ___/ __ \/ __ `__ \/ _ \/ __/ __ \/ _ \/ / / / ___/
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ ____/ / / /_/ / / / / / / __/ /_/ / / / __/ /_/ (__ )
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ /_/ /_/ \____/_/ /_/ /_/\___/\__/_/ /_/\___/\__,_/____/
|
||||
/_/
|
||||
@@ -0,0 +1,6 @@
|
||||
___ __ _ __
|
||||
/ | / /___ (_)___ ___ __________/ /___ ____ ___
|
||||
/ /| | / / __ \/ / __ \/ _ \______/ ___/ ___/ / __ \/ __ \/ _ \
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ / / /__/ / /_/ / / / / __/
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ /_/ \___/_/\____/_/ /_/\___/
|
||||
/_/
|
||||
@@ -0,0 +1,6 @@
|
||||
___ __ _ ____ ___
|
||||
/ | / /___ (_)___ ___ / __ \___ ____/ (_)____
|
||||
/ /| | / / __ \/ / __ \/ _ \______/ /_/ / _ \/ __ / / ___/
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ _, _/ __/ /_/ / (__ )
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ /_/ |_|\___/\__,_/_/____/
|
||||
/_/
|
||||
@@ -0,0 +1,6 @@
|
||||
___ __ _ ____ __ ____ __ _____
|
||||
/ | / /___ (_)___ ___ / __ \__ _______/ /_/ __ \___ _____/ /__/ ___/___ ______ _____ _____
|
||||
/ /| | / / __ \/ / __ \/ _ \______/ /_/ / / / / ___/ __/ / / / _ \/ ___/ //_/\__ \/ _ \/ ___/ | / / _ \/ ___/
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ _, _/ /_/ (__ ) /_/ /_/ / __(__ ) ,< ___/ / __/ / | |/ / __/ /
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ /_/ |_|\__,_/____/\__/_____/\___/____/_/|_|/____/\___/_/ |___/\___/_/
|
||||
/_/
|
||||
@@ -0,0 +1,6 @@
|
||||
___ __ _ ____ __ ____ __
|
||||
/ | / /___ (_)___ ___ / __ \__ _______/ /___ __/ __ \____ ______/ /____
|
||||
/ /| | / / __ \/ / __ \/ _ \______/ /_/ / / / / ___/ __/ / / / /_/ / __ `/ ___/ __/ _ \
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ _, _/ /_/ (__ ) /_/ /_/ / ____/ /_/ (__ ) /_/ __/
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ /_/ |_|\__,_/____/\__/\__, /_/ \__,_/____/\__/\___/
|
||||
/_/ /____/
|
||||
@@ -0,0 +1,6 @@
|
||||
___ __ _ _____ __ __ _
|
||||
/ | / /___ (_)___ ___ / ___/__ ______ _____/ /_/ /_ (_)___ ____ _
|
||||
/ /| | / / __ \/ / __ \/ _ \______\__ \/ / / / __ \/ ___/ __/ __ \/ / __ \/ __ `/
|
||||
/ ___ |/ / /_/ / / / / / __/_____/__/ / /_/ / / / / /__/ /_/ / / / / / / / /_/ /
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ /____/\__, /_/ /_/\___/\__/_/ /_/_/_/ /_/\__, /
|
||||
/_/ /____/ /____/
|
||||
@@ -0,0 +1,6 @@
|
||||
___ __ _ ______ _____ __ _____
|
||||
/ | / /___ (_)___ ___ /_ __/__ ____ _____ ___ / ___/____ ___ ____ _/ /__ / ___/___ ______ _____ _____
|
||||
/ /| | / / __ \/ / __ \/ _ \______/ / / _ \/ __ `/ __ `__ \\__ \/ __ \/ _ \/ __ `/ //_/_____\__ \/ _ \/ ___/ | / / _ \/ ___/
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ / / __/ /_/ / / / / / /__/ / /_/ / __/ /_/ / ,< /_____/__/ / __/ / | |/ / __/ /
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ /_/ \___/\__,_/_/ /_/ /_/____/ .___/\___/\__,_/_/|_| /____/\___/_/ |___/\___/_/
|
||||
/_/ /_/
|
||||
@@ -0,0 +1,6 @@
|
||||
___ __ _ _______ __ __
|
||||
/ | / /___ (_)___ ___ /_ __(_)___ __ ______ ___ __/ /_/ /_
|
||||
/ /| | / / __ \/ / __ \/ _ \______/ / / / __ \/ / / / __ `/ / / / __/ __ \
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ / / / / / / /_/ / /_/ / /_/ / /_/ / / /
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ /_/ /_/_/ /_/\__, /\__,_/\__,_/\__/_/ /_/
|
||||
/_/ /____/
|
||||
@@ -0,0 +1,6 @@
|
||||
___ __ _ ______ _____ __
|
||||
/ | / /___ (_)___ ___ /_ __/________ ____ / __(_) /__
|
||||
/ /| | / / __ \/ / __ \/ _ \______/ / / ___/ __ `/ _ \/ /_/ / //_/
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ / / / / /_/ / __/ __/ / ,<
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ /_/ /_/ \__,_/\___/_/ /_/_/|_|
|
||||
/_/
|
||||
@@ -0,0 +1,6 @@
|
||||
___ __ _ ______ _ _
|
||||
/ | / /___ (_)___ ___ /_ __/________ _____ _________ ___ (_)_________(_)___ ____
|
||||
/ /| | / / __ \/ / __ \/ _ \______/ / / ___/ __ `/ __ \/ ___/ __ `__ \/ / ___/ ___/ / __ \/ __ \
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ / / / / /_/ / / / (__ ) / / / / / (__ |__ ) / /_/ / / / /
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ /_/ /_/ \__,_/_/ /_/____/_/ /_/ /_/_/____/____/_/\____/_/ /_/
|
||||
/_/
|
||||
@@ -0,0 +1,6 @@
|
||||
___ __ _ _ __ ____
|
||||
/ | / /___ (_)___ ___ | | / /___ _/ / /_____ __ __
|
||||
/ /| | / / __ \/ / __ \/ _ \_____| | / / __ `/ / //_/ _ \/ / / /
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ |/ / /_/ / / ,< / __/ /_/ /
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ |___/\__,_/_/_/|_|\___/\__, /
|
||||
/_/ /____/
|
||||
@@ -0,0 +1,6 @@
|
||||
___ __ _ _ __ ____ __
|
||||
/ | / /___ (_)___ ___ | | / /___ ___ __/ / /__ ______ __________/ /__ ____
|
||||
/ /| | / / __ \/ / __ \/ _ \_____| | / / __ `/ / / / / __/ | /| / / __ `/ ___/ __ / _ \/ __ \
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ |/ / /_/ / /_/ / / /_ | |/ |/ / /_/ / / / /_/ / __/ / / /
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ |___/\__,_/\__,_/_/\__/ |__/|__/\__,_/_/ \__,_/\___/_/ /_/
|
||||
/_/
|
||||
@@ -0,0 +1,6 @@
|
||||
___ __ _ _ ___ __
|
||||
/ | / /___ (_)___ ___ | | / (_)_______ ____ ___ ______ __________/ /
|
||||
/ /| | / / __ \/ / __ \/ _ \_____| | /| / / / ___/ _ \/ __ `/ / / / __ `/ ___/ __ /
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ |/ |/ / / / / __/ /_/ / /_/ / /_/ / / / /_/ /
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ |__/|__/_/_/ \___/\__, /\__,_/\__,_/_/ \__,_/
|
||||
/_/ /____/
|
||||
@@ -0,0 +1,6 @@
|
||||
___ __ _ _____ _ __ ___ __ _______ ____________
|
||||
/ | / /___ (_)___ ___ /__ / (_)___ _/ /_ ___ ___ |__ \ / |/ / __ \/_ __/_ __/
|
||||
/ /| | / / __ \/ / __ \/ _ \______/ / / / __ `/ __ \/ _ \/ _ \__/ // /|_/ / / / / / / / /
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ /__/ / /_/ / /_/ / __/ __/ __// / / / /_/ / / / / /
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ /____/_/\__, /_.___/\___/\___/____/_/ /_/\___\_\/_/ /_/
|
||||
/_/ /____/
|
||||
@@ -36,13 +36,6 @@ function update_script() {
|
||||
rm -f /opt/python3-lxml-html-clean.deb
|
||||
fi
|
||||
|
||||
if dpkg -s wkhtmltopdf &>/dev/null; then
|
||||
systemctl stop odoo
|
||||
$STD apt remove --purge -y wkhtmltopdf
|
||||
fetch_and_deploy_gh_release "wkhtmltopdf" "wkhtmltopdf/packaging" "binary" "latest" "" "wkhtmltox_*.bookworm_$(arch_resolve).deb"
|
||||
systemctl start odoo
|
||||
fi
|
||||
|
||||
RELEASE=$(curl -fsSL https://nightly.odoo.com/ | grep -oE 'href="[0-9]+\.[0-9]+/nightly"' | head -n1 | cut -d'"' -f2 | cut -d/ -f1)
|
||||
LATEST_VERSION=$(curl -fsSL "https://nightly.odoo.com/${RELEASE}/nightly/deb/" |
|
||||
grep -oP "odoo_${RELEASE}\.\d+_all\.deb" |
|
||||
|
||||
+1
-107
@@ -81,113 +81,7 @@ function update_script() {
|
||||
ln -sfn "$ROMM_BASE"/resources /opt/romm/frontend/dist/assets/romm/resources
|
||||
ln -sfn "$ROMM_BASE"/assets /opt/romm/frontend/dist/assets/romm/assets
|
||||
if [[ -f /etc/angie/http.d/romm.conf ]]; then
|
||||
if ! grep -q "js_content decode.decodeBase64" /etc/angie/http.d/romm.conf; then
|
||||
msg_info "Adding missing /decode and /cache locations to Angie config"
|
||||
dpkg -l angie-module-njs &>/dev/null || $STD apt-get install -y angie-module-njs
|
||||
grep -q "ngx_http_js_module.so" /etc/angie/angie.conf || sed -i '1i load_module modules/ngx_http_js_module.so;' /etc/angie/angie.conf
|
||||
mkdir -p /etc/angie/js "${ROMM_BASE}/cache"
|
||||
cat <<'JSEOF' >/etc/angie/js/decode.js
|
||||
// Decode a Base64 encoded string received as a query parameter named 'value',
|
||||
// and return the decoded value in the response body.
|
||||
function decodeBase64(r) {
|
||||
var encodedValue = r.args.value;
|
||||
|
||||
if (!encodedValue) {
|
||||
r.return(400, "Missing 'value' query parameter");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
// Use Buffer to return raw bytes — atob() returns a JS string which r.return()
|
||||
// would re-encode as UTF-8, corrupting any non-ASCII bytes (e.g. in filenames
|
||||
// like "Pokémon") and causing CRC mismatches in the mod_zip manifest.
|
||||
r.return(200, Buffer.from(encodedValue, 'base64'));
|
||||
} catch (e) {
|
||||
r.return(400, "Invalid Base64 encoding");
|
||||
}
|
||||
}
|
||||
|
||||
export default { decodeBase64 };
|
||||
JSEOF
|
||||
cat <<EOF >/etc/angie/http.d/romm.conf
|
||||
js_import /etc/angie/js/decode.js;
|
||||
|
||||
upstream romm_backend {
|
||||
server 127.0.0.1:5000;
|
||||
}
|
||||
|
||||
map \$http_upgrade \$connection_upgrade {
|
||||
default upgrade;
|
||||
'' close;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
server_name _;
|
||||
root /opt/romm/frontend/dist;
|
||||
client_max_body_size 0;
|
||||
|
||||
location / {
|
||||
try_files \$uri \$uri/ /index.html;
|
||||
}
|
||||
|
||||
location /assets {
|
||||
alias /opt/romm/frontend/dist/assets;
|
||||
try_files \$uri \$uri/ =404;
|
||||
expires 1y;
|
||||
add_header Cache-Control "public, immutable";
|
||||
}
|
||||
|
||||
location ~ ^/rom/.*/ejs\$ {
|
||||
add_header Cross-Origin-Embedder-Policy "require-corp";
|
||||
add_header Cross-Origin-Opener-Policy "same-origin";
|
||||
try_files \$uri /index.html;
|
||||
}
|
||||
|
||||
location /api {
|
||||
proxy_pass http://romm_backend;
|
||||
proxy_buffering off;
|
||||
proxy_request_buffering off;
|
||||
proxy_set_header Host \$host;
|
||||
proxy_set_header X-Real-IP \$remote_addr;
|
||||
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto \$scheme;
|
||||
}
|
||||
|
||||
location ~ ^/(ws|netplay) {
|
||||
proxy_pass http://romm_backend;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade \$http_upgrade;
|
||||
proxy_set_header Connection \$connection_upgrade;
|
||||
proxy_set_header Host \$host;
|
||||
proxy_read_timeout 86400;
|
||||
}
|
||||
|
||||
location = /openapi.json {
|
||||
proxy_pass http://romm_backend;
|
||||
}
|
||||
|
||||
location /library/ {
|
||||
internal;
|
||||
alias ${ROMM_BASE}/library/;
|
||||
}
|
||||
|
||||
location /cache/ {
|
||||
internal;
|
||||
alias ${ROMM_BASE}/cache/;
|
||||
}
|
||||
|
||||
location /decode {
|
||||
internal;
|
||||
js_content decode.decodeBase64;
|
||||
}
|
||||
}
|
||||
EOF
|
||||
msg_ok "Added /decode and /cache locations"
|
||||
else
|
||||
sed -i -e "s|alias .*/library/;|alias ${ROMM_BASE}/library/;|" \
|
||||
-e "s|alias .*/cache/;|alias ${ROMM_BASE}/cache/;|" /etc/angie/http.d/romm.conf
|
||||
fi
|
||||
sed -i "s|alias .*/library/;|alias ${ROMM_BASE}/library/;|" /etc/angie/http.d/romm.conf
|
||||
systemctl reload angie
|
||||
elif [[ -f /etc/nginx/sites-available/romm ]]; then
|
||||
sed -i "s|alias .*/library/;|alias ${ROMM_BASE}/library/;|" /etc/nginx/sites-available/romm
|
||||
|
||||
@@ -14,13 +14,11 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt install -y python3-lxml
|
||||
$STD apt install -y python3-lxml wkhtmltopdf
|
||||
curl -fsSL --proto '=https' "https://archive.ubuntu.com/ubuntu/pool/universe/l/lxml-html-clean/python3-lxml-html-clean_0.1.1-1_all.deb" -o /opt/python3-lxml-html-clean.deb
|
||||
$STD dpkg -i /opt/python3-lxml-html-clean.deb
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
fetch_and_deploy_gh_release "wkhtmltopdf" "wkhtmltopdf/packaging" "binary" "latest" "" "wkhtmltox_*.bookworm_$(arch_resolve).deb"
|
||||
|
||||
PG_VERSION="18" setup_postgresql
|
||||
|
||||
RELEASE=$(curl -fsSL https://nightly.odoo.com/ | grep -oE 'href="[0-9]+\.[0-9]+/nightly"' | head -n1 | cut -d'"' -f2 | cut -d/ -f1)
|
||||
|
||||
+6
-47
@@ -42,40 +42,16 @@ $STD apt install -y \
|
||||
tzdata
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Angie with mod_zip and njs modules"
|
||||
msg_info "Installing Angie with mod_zip module"
|
||||
setup_deb822_repo \
|
||||
"angie" \
|
||||
"https://angie.software/keys/angie-signing.gpg" \
|
||||
"https://download.angie.software/angie/debian/$(get_os_info version_id)" \
|
||||
"$(get_os_info codename)" \
|
||||
"main"
|
||||
$STD apt-get install -y angie angie-module-zip angie-module-njs
|
||||
sed -i '1i load_module modules/ngx_http_zip_module.so;\nload_module modules/ngx_http_js_module.so;' /etc/angie/angie.conf
|
||||
mkdir -p /etc/angie/js
|
||||
cat <<'EOF' >/etc/angie/js/decode.js
|
||||
// Decode a Base64 encoded string received as a query parameter named 'value',
|
||||
// and return the decoded value in the response body.
|
||||
function decodeBase64(r) {
|
||||
var encodedValue = r.args.value;
|
||||
|
||||
if (!encodedValue) {
|
||||
r.return(400, "Missing 'value' query parameter");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
// Use Buffer to return raw bytes — atob() returns a JS string which r.return()
|
||||
// would re-encode as UTF-8, corrupting any non-ASCII bytes (e.g. in filenames
|
||||
// like "Pokémon") and causing CRC mismatches in the mod_zip manifest.
|
||||
r.return(200, Buffer.from(encodedValue, 'base64'));
|
||||
} catch (e) {
|
||||
r.return(400, "Invalid Base64 encoding");
|
||||
}
|
||||
}
|
||||
|
||||
export default { decodeBase64 };
|
||||
EOF
|
||||
msg_ok "Installed Angie with mod_zip and njs modules"
|
||||
$STD apt-get install -y angie angie-module-zip
|
||||
sed -i '1i load_module modules/ngx_http_zip_module.so;' /etc/angie/angie.conf
|
||||
msg_ok "Installed Angie with mod_zip module"
|
||||
PYTHON_VERSION="3.13" setup_uv
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
setup_mariadb
|
||||
@@ -87,8 +63,7 @@ mkdir -p /opt/romm \
|
||||
/var/lib/romm/resources \
|
||||
/var/lib/romm/assets/{saves,states,screenshots} \
|
||||
/var/lib/romm/library/roms \
|
||||
/var/lib/romm/library/bios \
|
||||
/var/lib/romm/cache
|
||||
/var/lib/romm/library/bios
|
||||
msg_ok "Created directories"
|
||||
|
||||
msg_info "Creating configuration file"
|
||||
@@ -242,8 +217,6 @@ fetch_and_deploy_gh_release "EmulatorJS" "EmulatorJS/EmulatorJS" "prebuild" "v4.
|
||||
|
||||
msg_info "Configuring Angie"
|
||||
cat <<'EOF' >/etc/angie/http.d/romm.conf
|
||||
js_import /etc/angie/js/decode.js;
|
||||
|
||||
upstream romm_backend {
|
||||
server 127.0.0.1:5000;
|
||||
}
|
||||
@@ -310,24 +283,10 @@ server {
|
||||
internal;
|
||||
alias /var/lib/romm/library/;
|
||||
}
|
||||
|
||||
# Internally redirect cached zip file requests (Range-resumable downloads)
|
||||
location /cache/ {
|
||||
internal;
|
||||
alias /var/lib/romm/cache/;
|
||||
}
|
||||
|
||||
# Internal decoding endpoint, used by mod_zip to decode base64-encoded
|
||||
# multi-file manifest entries (e.g. the generated .m3u for multi-disc games)
|
||||
location /decode {
|
||||
internal;
|
||||
js_content decode.decodeBase64;
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
sed -i -e "s|alias /var/lib/romm/library/;|alias ${ROMM_BASE}/library/;|" \
|
||||
-e "s|alias /var/lib/romm/cache/;|alias ${ROMM_BASE}/cache/;|" /etc/angie/http.d/romm.conf
|
||||
sed -i "s|alias /var/lib/romm/library/;|alias ${ROMM_BASE}/library/;|" /etc/angie/http.d/romm.conf
|
||||
rm -f /etc/angie/http.d/default.conf
|
||||
systemctl restart angie
|
||||
systemctl enable -q --now angie
|
||||
|
||||
Reference in New Issue
Block a user