mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-09-13 01:06:39 +00:00
Compare commits
11 Commits
MickLesk-p
...
add-script
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4d39707844 | ||
|
|
e24a47ebca | ||
|
|
9e0a57a04a | ||
|
|
2551a576d5 | ||
|
|
aa2d63f569 | ||
|
|
8348fb3cb3 | ||
|
|
be0a8c3467 | ||
|
|
1131d748e8 | ||
|
|
764e4232ba | ||
|
|
8ee86a91b8 | ||
|
|
95d80a4941 |
13
CHANGELOG.md
13
CHANGELOG.md
@@ -544,7 +544,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
### 🆕 New Scripts
|
### 🆕 New Scripts
|
||||||
|
|
||||||
- Hammer ([#17189](https://github.com/community-scripts/ProxmoxVE/pull/17189))
|
- Elasticsearch ([#17188](https://github.com/community-scripts/ProxmoxVE/pull/17188))
|
||||||
|
- Hammer ([#17189](https://github.com/community-scripts/ProxmoxVE/pull/17189))
|
||||||
- gotenberg ([#17205](https://github.com/community-scripts/ProxmoxVE/pull/17205))
|
- gotenberg ([#17205](https://github.com/community-scripts/ProxmoxVE/pull/17205))
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
### 🚀 Updated Scripts
|
||||||
@@ -557,8 +558,18 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
- #### ✨ New Features
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Docker VM: Feature Bump - Refactor script for improved functionality [@MickLesk](https://github.com/MickLesk) ([#17216](https://github.com/community-scripts/ProxmoxVE/pull/17216))
|
||||||
- feat(jitsi-meet): optional public setup (FQDN, Let's Encrypt, NAT, secure domain) [@klanghans](https://github.com/klanghans) ([#17132](https://github.com/community-scripts/ProxmoxVE/pull/17132))
|
- feat(jitsi-meet): optional public setup (FQDN, Let's Encrypt, NAT, secure domain) [@klanghans](https://github.com/klanghans) ([#17132](https://github.com/community-scripts/ProxmoxVE/pull/17132))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Paperless-NGX: add --no-sync to uv run services [@MickLesk](https://github.com/MickLesk) ([#17210](https://github.com/community-scripts/ProxmoxVE/pull/17210))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- VM's: show the selected CPU model instead of doubling it [@MickLesk](https://github.com/MickLesk) ([core#37](https://github.com/community-scripts/core/pull/37))
|
||||||
|
- Generate app headers [@github-actions[bot]](https://github.com/github-actions[bot]) ([core#36](https://github.com/community-scripts/core/pull/36))
|
||||||
|
|
||||||
## 2026-09-11
|
## 2026-09-11
|
||||||
|
|
||||||
### 🆕 New Scripts
|
### 🆕 New Scripts
|
||||||
|
|||||||
56
ct/elasticsearch.sh
Normal file
56
ct/elasticsearch.sh
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main"
|
||||||
|
_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func"
|
||||||
|
source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func")
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://www.elastic.co/elasticsearch
|
||||||
|
|
||||||
|
APP="Elasticsearch"
|
||||||
|
var_tags="${var_tags:-database;search}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-4096}"
|
||||||
|
var_disk="${var_disk:-20}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_arm64="${var_arm64:-no}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if [[ ! -f /etc/elasticsearch/elasticsearch.yml ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Updating ${APP}"
|
||||||
|
$STD apt update
|
||||||
|
$STD apt install -y elasticsearch
|
||||||
|
msg_ok "Updated ${APP}"
|
||||||
|
|
||||||
|
msg_info "Restarting Service"
|
||||||
|
systemctl restart elasticsearch
|
||||||
|
msg_ok "Restarted Service"
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW}Access it using the following URL:${CL}"
|
||||||
|
echo -e "${GATEWAY}${BGN}http://${IP}:9200${CL}"
|
||||||
|
echo -e "${INFO}${YW}Set the password for the 'elastic' user:${CL}"
|
||||||
|
echo -e "${TAB}${DEFAULT}${BGN}/usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic${CL}"
|
||||||
6
ct/headers/elasticsearch
Normal file
6
ct/headers/elasticsearch
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
________ __ _ __
|
||||||
|
/ ____/ /___ ______/ /_(_)____________ ____ ___________/ /_
|
||||||
|
/ __/ / / __ `/ ___/ __/ / ___/ ___/ _ \/ __ `/ ___/ ___/ __ \
|
||||||
|
/ /___/ / /_/ (__ ) /_/ / /__(__ ) __/ /_/ / / / /__/ / / /
|
||||||
|
/_____/_/\__,_/____/\__/_/\___/____/\___/\__,_/_/ \___/_/ /_/
|
||||||
|
|
||||||
6
ct/headers/valhalla
Normal file
6
ct/headers/valhalla
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
_ __ ____ ____
|
||||||
|
| | / /___ _/ / /_ ____ _/ / /___ _
|
||||||
|
| | / / __ `/ / __ \/ __ `/ / / __ `/
|
||||||
|
| |/ / /_/ / / / / / /_/ / / / /_/ /
|
||||||
|
|___/\__,_/_/_/ /_/\__,_/_/_/\__,_/
|
||||||
|
|
||||||
@@ -169,9 +169,13 @@ function update_script() {
|
|||||||
if ((BRIDGE_UPDATE == 0)); then
|
if ((BRIDGE_UPDATE == 0)); then
|
||||||
sed -i 's|^ExecStart=.*|ExecStart=uv run --no-sync -- granian --interface asginl --ws --loop uvloop "paperless.asgi:application"|' /etc/systemd/system/paperless-webserver.service
|
sed -i 's|^ExecStart=.*|ExecStart=uv run --no-sync -- granian --interface asginl --ws --loop uvloop "paperless.asgi:application"|' /etc/systemd/system/paperless-webserver.service
|
||||||
grep -q "document_index reindex" /etc/systemd/system/paperless-webserver.service ||
|
grep -q "document_index reindex" /etc/systemd/system/paperless-webserver.service ||
|
||||||
sed -i '/^ExecStart=/i ExecStartPre=uv run -- python manage.py document_index reindex --if-needed --no-progress-bar' /etc/systemd/system/paperless-webserver.service
|
sed -i '/^ExecStart=/i ExecStartPre=uv run --no-sync -- python manage.py document_index reindex --if-needed --no-progress-bar' /etc/systemd/system/paperless-webserver.service
|
||||||
$STD systemctl daemon-reload
|
|
||||||
fi
|
fi
|
||||||
|
for svc in consumer scheduler task-queue webserver; do
|
||||||
|
unit="/etc/systemd/system/paperless-${svc}.service"
|
||||||
|
[[ -f "$unit" ]] && sed -i 's|uv run -- |uv run --no-sync -- |g' "$unit"
|
||||||
|
done
|
||||||
|
$STD systemctl daemon-reload
|
||||||
cd /opt/paperless
|
cd /opt/paperless
|
||||||
$STD uv sync --all-extras
|
$STD uv sync --all-extras
|
||||||
cd /opt/paperless/src
|
cd /opt/paperless/src
|
||||||
|
|||||||
104
ct/valhalla.sh
Normal file
104
ct/valhalla.sh
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main"
|
||||||
|
_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func"
|
||||||
|
source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func")
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: CrazyWolf13
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/valhalla/valhalla
|
||||||
|
|
||||||
|
APP="Valhalla"
|
||||||
|
var_tags="${var_tags:-mapping;routing}"
|
||||||
|
var_cpu="${var_cpu:-4}"
|
||||||
|
var_ram="${var_ram:-8192}"
|
||||||
|
var_disk="${var_disk:-24}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
#var_arm64="${var_arm64:-no}" # unset = ask the user; set yes/no only when verified
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if [[ ! -f /etc/systemd/system/valhalla.service ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "prime_server" "kevinkreiser/prime_server"; then
|
||||||
|
RELEASE="$CHECK_UPDATE_RELEASE"
|
||||||
|
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop valhalla
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
msg_info "Building prime_server ${RELEASE} (Patience)"
|
||||||
|
rm -rf /tmp/prime_server
|
||||||
|
git clone --recurse-submodules --depth 1 --branch "$RELEASE" https://github.com/kevinkreiser/prime_server /tmp/prime_server
|
||||||
|
cd /tmp/prime_server
|
||||||
|
$STD ./autogen.sh
|
||||||
|
$STD ./configure
|
||||||
|
$STD make -j"$(nproc)"
|
||||||
|
$STD make install
|
||||||
|
cd /
|
||||||
|
rm -rf /tmp/prime_server
|
||||||
|
ldconfig
|
||||||
|
echo "${RELEASE#v}" >"$HOME/.prime_server"
|
||||||
|
msg_ok "Built prime_server ${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start valhalla
|
||||||
|
msg_ok "Started Service"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "valhalla" "valhalla/valhalla"; then
|
||||||
|
RELEASE="$CHECK_UPDATE_RELEASE"
|
||||||
|
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop valhalla
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
msg_info "Fetching Valhalla ${RELEASE} (Patience)"
|
||||||
|
rm -rf /opt/valhalla
|
||||||
|
git clone --recurse-submodules --depth 1 --branch "$RELEASE" https://github.com/valhalla/valhalla.git /opt/valhalla
|
||||||
|
msg_ok "Fetched Valhalla ${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Compiling Valhalla ${RELEASE} (this takes 20-45+ minutes, be patient)"
|
||||||
|
MEM_MB=$(awk '/MemTotal/{print int($2/1024)}' /proc/meminfo)
|
||||||
|
BUILD_JOBS=$((MEM_MB / 2000))
|
||||||
|
[[ $BUILD_JOBS -lt 1 ]] && BUILD_JOBS=1
|
||||||
|
[[ $BUILD_JOBS -gt $(nproc) ]] && BUILD_JOBS=$(nproc)
|
||||||
|
cd /opt/valhalla
|
||||||
|
$STD cmake -B build -DCMAKE_BUILD_TYPE=Release -DENABLE_PYTHON_BINDINGS=OFF -DENABLE_TESTS=OFF -DENABLE_SINGLE_FILES_WERROR=OFF
|
||||||
|
$STD cmake --build build -- -j"$BUILD_JOBS"
|
||||||
|
$STD cmake --install build
|
||||||
|
ldconfig
|
||||||
|
echo "${RELEASE#v}" >"$HOME/.valhalla"
|
||||||
|
msg_ok "Compiled Valhalla ${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start valhalla
|
||||||
|
msg_ok "Started Service"
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_ok "Updated Successfully!\n"
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW}Access it using the following URL:${CL}"
|
||||||
|
echo -e "${GATEWAY}${BGN}http://${IP}:8002/status${CL}"
|
||||||
|
echo -e "${INFO}${YW}No routing tiles are built yet. Build them for your region with:${CL}"
|
||||||
|
echo -e "${TAB}${BGN}/opt/valhalla_data/build-tiles.sh https://download.geofabrik.de/<continent>/<region>-latest.osm.pbf${CL}"
|
||||||
70
install/elasticsearch-install.sh
Normal file
70
install/elasticsearch-install.sh
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: MickLesk (CanbiZ)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://www.elastic.co/elasticsearch
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
# vm.max_map_count is not namespaced, so a container cannot raise it - the value
|
||||||
|
# is inherited from the Proxmox host. Elasticsearch refuses to start below the
|
||||||
|
# required limit once it binds to a non-loopback address (production mode).
|
||||||
|
msg_info "Checking Kernel Limits"
|
||||||
|
if (($(sysctl -n vm.max_map_count) < 262144)); then
|
||||||
|
msg_error "vm.max_map_count is $(sysctl -n vm.max_map_count), Elasticsearch needs at least 262144"
|
||||||
|
msg_error "Set it on the PROXMOX HOST, not in this container:"
|
||||||
|
msg_error " echo 'vm.max_map_count=1048576' >/etc/sysctl.d/99-elasticsearch.conf && sysctl --system"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
msg_ok "Checked Kernel Limits"
|
||||||
|
|
||||||
|
JAVA_VERSION="21" setup_java
|
||||||
|
|
||||||
|
setup_deb822_repo \
|
||||||
|
"elasticsearch" \
|
||||||
|
"https://artifacts.elastic.co/GPG-KEY-elasticsearch" \
|
||||||
|
"https://artifacts.elastic.co/packages/9.x/apt" \
|
||||||
|
"stable" \
|
||||||
|
"main"
|
||||||
|
|
||||||
|
msg_info "Installing Elasticsearch"
|
||||||
|
$STD apt install -y elasticsearch
|
||||||
|
msg_ok "Installed Elasticsearch"
|
||||||
|
|
||||||
|
msg_info "Configuring Elasticsearch"
|
||||||
|
mkdir -p /opt/elasticsearch_data
|
||||||
|
chown -R elasticsearch:elasticsearch /opt/elasticsearch_data
|
||||||
|
cat <<EOF >/etc/elasticsearch/elasticsearch.yml
|
||||||
|
cluster.name: proxmox
|
||||||
|
node.name: ${HOSTNAME}
|
||||||
|
path.data: /opt/elasticsearch_data
|
||||||
|
path.logs: /var/log/elasticsearch
|
||||||
|
|
||||||
|
network.host: 0.0.0.0
|
||||||
|
http.port: 9200
|
||||||
|
discovery.type: single-node
|
||||||
|
|
||||||
|
xpack.security.enabled: true
|
||||||
|
xpack.security.enrollment.enabled: true
|
||||||
|
xpack.security.http.ssl.enabled: false
|
||||||
|
xpack.security.transport.ssl.enabled: false
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat <<EOF >/etc/elasticsearch/jvm.options.d/heap.options
|
||||||
|
-Xms1g
|
||||||
|
-Xmx1g
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now elasticsearch
|
||||||
|
msg_ok "Configured Elasticsearch"
|
||||||
|
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
cleanup_lxc
|
||||||
@@ -151,7 +151,7 @@ Requires=redis.service
|
|||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
WorkingDirectory=/opt/paperless/src
|
WorkingDirectory=/opt/paperless/src
|
||||||
#ExecStartPre=uv run -- python manage.py document_index reindex --if-needed --no-progress-bar
|
#ExecStartPre=uv run --no-sync -- python manage.py document_index reindex --if-needed --no-progress-bar
|
||||||
ExecStart=uv run --no-sync -- granian --interface asginl --ws --loop uvloop "paperless.asgi:application"
|
ExecStart=uv run --no-sync -- granian --interface asginl --ws --loop uvloop "paperless.asgi:application"
|
||||||
Environment=GRANIAN_HOST=::
|
Environment=GRANIAN_HOST=::
|
||||||
Environment=GRANIAN_PORT=8000
|
Environment=GRANIAN_PORT=8000
|
||||||
|
|||||||
187
install/valhalla-install.sh
Normal file
187
install/valhalla-install.sh
Normal file
@@ -0,0 +1,187 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: CrazyWolf13
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/valhalla/valhalla
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing Dependencies"
|
||||||
|
$STD apt install -y \
|
||||||
|
autoconf \
|
||||||
|
automake \
|
||||||
|
ccache \
|
||||||
|
clang \
|
||||||
|
clang-tidy \
|
||||||
|
coreutils \
|
||||||
|
cmake \
|
||||||
|
g++ \
|
||||||
|
gcc \
|
||||||
|
git \
|
||||||
|
jq \
|
||||||
|
lcov \
|
||||||
|
libboost-all-dev \
|
||||||
|
libcurl4-openssl-dev \
|
||||||
|
libczmq-dev \
|
||||||
|
libgdal-dev \
|
||||||
|
libgeos++-dev \
|
||||||
|
libgeos-dev \
|
||||||
|
libluajit-5.1-dev \
|
||||||
|
liblz4-dev \
|
||||||
|
libprotobuf-dev \
|
||||||
|
libspatialite-dev \
|
||||||
|
libsqlite3-dev \
|
||||||
|
libsqlite3-mod-spatialite \
|
||||||
|
libtool \
|
||||||
|
libzmq3-dev \
|
||||||
|
lld \
|
||||||
|
locales \
|
||||||
|
luajit \
|
||||||
|
make \
|
||||||
|
osmium-tool \
|
||||||
|
parallel \
|
||||||
|
pkgconf \
|
||||||
|
protobuf-compiler \
|
||||||
|
python3-all-dev \
|
||||||
|
python3-shapely \
|
||||||
|
python3-requests \
|
||||||
|
python3-pip \
|
||||||
|
spatialite-bin \
|
||||||
|
unzip \
|
||||||
|
zlib1g-dev
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
PRIME_SERVER_RELEASE=$(get_latest_github_release "kevinkreiser/prime_server" "false")
|
||||||
|
msg_info "Building prime_server ${PRIME_SERVER_RELEASE} (Patience)"
|
||||||
|
git clone --recurse-submodules --depth 1 --branch "$PRIME_SERVER_RELEASE" https://github.com/kevinkreiser/prime_server /tmp/prime_server
|
||||||
|
cd /tmp/prime_server
|
||||||
|
$STD ./autogen.sh
|
||||||
|
$STD ./configure
|
||||||
|
$STD make -j"$(nproc)"
|
||||||
|
$STD make install
|
||||||
|
cd /
|
||||||
|
rm -rf /tmp/prime_server
|
||||||
|
echo "${PRIME_SERVER_RELEASE#v}" >"$HOME/.prime_server"
|
||||||
|
msg_ok "Built prime_server"
|
||||||
|
|
||||||
|
RELEASE=$(get_latest_github_release "valhalla/valhalla" "false")
|
||||||
|
msg_info "Cloning Valhalla ${RELEASE} (Patience)"
|
||||||
|
mkdir -p /opt/valhalla
|
||||||
|
git clone --recurse-submodules --depth 1 --branch "$RELEASE" https://github.com/valhalla/valhalla.git /opt/valhalla
|
||||||
|
msg_ok "Cloned Valhalla ${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Compiling Valhalla ${RELEASE} (this takes 20-45+ minutes, be patient)"
|
||||||
|
MEM_MB=$(awk '/MemTotal/{print int($2/1024)}' /proc/meminfo)
|
||||||
|
BUILD_JOBS=$((MEM_MB / 2000))
|
||||||
|
[[ $BUILD_JOBS -lt 1 ]] && BUILD_JOBS=1
|
||||||
|
[[ $BUILD_JOBS -gt $(nproc) ]] && BUILD_JOBS=$(nproc)
|
||||||
|
cd /opt/valhalla
|
||||||
|
$STD cmake -B build -DCMAKE_BUILD_TYPE=Release -DENABLE_PYTHON_BINDINGS=OFF -DENABLE_TESTS=OFF -DENABLE_SINGLE_FILES_WERROR=OFF
|
||||||
|
$STD cmake --build build -- -j"$BUILD_JOBS"
|
||||||
|
$STD cmake --install build
|
||||||
|
ldconfig
|
||||||
|
echo "${RELEASE#v}" >"$HOME/.valhalla"
|
||||||
|
msg_ok "Compiled Valhalla ${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Configuring Valhalla"
|
||||||
|
useradd --system --no-create-home --shell /usr/sbin/nologin valhalla 2>/dev/null || true
|
||||||
|
mkdir -p /opt/valhalla_data/{valhalla_tiles,pbf}
|
||||||
|
THREADS=$(nproc)
|
||||||
|
valhalla_build_config \
|
||||||
|
--mjolnir-tile-dir /opt/valhalla_data/valhalla_tiles \
|
||||||
|
--mjolnir-tile-extract /opt/valhalla_data/valhalla_tiles.tar \
|
||||||
|
--mjolnir-admin /opt/valhalla_data/admins.sqlite \
|
||||||
|
--mjolnir-timezone /opt/valhalla_data/timezones.sqlite \
|
||||||
|
--mjolnir-concurrency "$THREADS" \
|
||||||
|
>/opt/valhalla_data/valhalla.json
|
||||||
|
|
||||||
|
cat <<'EOF' >/opt/valhalla_data/build-tiles.sh
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
# (Re)builds Valhalla routing tiles from one or more OSM extracts.
|
||||||
|
# Usage: build-tiles.sh <pbf-url-or-path> [<pbf-url-or-path> ...]
|
||||||
|
# Example: build-tiles.sh https://download.geofabrik.de/europe/germany-latest.osm.pbf
|
||||||
|
set -euo pipefail
|
||||||
|
export PATH="/usr/local/bin:/usr/local/sbin:$PATH"
|
||||||
|
if [[ $# -eq 0 ]]; then
|
||||||
|
echo "Usage: $0 <pbf-url-or-path> [<pbf-url-or-path> ...]" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
DATA_DIR=/opt/valhalla_data
|
||||||
|
CONFIG="$DATA_DIR/valhalla.json"
|
||||||
|
mkdir -p "$DATA_DIR/pbf"
|
||||||
|
|
||||||
|
FILES=()
|
||||||
|
for src in "$@"; do
|
||||||
|
if [[ "$src" == http://* || "$src" == https://* ]]; then
|
||||||
|
fname="$DATA_DIR/pbf/$(basename "$src")"
|
||||||
|
echo "Downloading $src"
|
||||||
|
curl -fL --progress-bar -o "$fname" "$src"
|
||||||
|
else
|
||||||
|
fname="$src"
|
||||||
|
fi
|
||||||
|
FILES+=("$fname")
|
||||||
|
done
|
||||||
|
|
||||||
|
systemctl stop valhalla
|
||||||
|
|
||||||
|
echo "Building admin database"
|
||||||
|
valhalla_build_admins --config "$CONFIG" "${FILES[@]}"
|
||||||
|
|
||||||
|
echo "Building timezone database"
|
||||||
|
valhalla_build_timezones >"$DATA_DIR/timezones.sqlite"
|
||||||
|
|
||||||
|
echo "Building initial tile graph"
|
||||||
|
valhalla_build_tiles -c "$CONFIG" -e build "${FILES[@]}"
|
||||||
|
|
||||||
|
echo "Enhancing tile graph"
|
||||||
|
valhalla_build_tiles -c "$CONFIG" -s enhance "${FILES[@]}"
|
||||||
|
|
||||||
|
echo "Packing tiles into a single extract"
|
||||||
|
valhalla_build_extract -c "$CONFIG" -v
|
||||||
|
|
||||||
|
chown -R valhalla:valhalla "$DATA_DIR"
|
||||||
|
systemctl start valhalla
|
||||||
|
echo "Done. Tiles are in $DATA_DIR/valhalla_tiles (and packed at $DATA_DIR/valhalla_tiles.tar)."
|
||||||
|
EOF
|
||||||
|
chmod +x /opt/valhalla_data/build-tiles.sh
|
||||||
|
chown -R valhalla:valhalla /opt/valhalla_data
|
||||||
|
msg_ok "Configured Valhalla"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/valhalla.service
|
||||||
|
[Unit]
|
||||||
|
Description=Valhalla Routing Engine
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=valhalla
|
||||||
|
Group=valhalla
|
||||||
|
WorkingDirectory=/opt/valhalla_data
|
||||||
|
ExecStart=/usr/local/bin/valhalla_service /opt/valhalla_data/valhalla.json ${THREADS}
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=5
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now valhalla
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
if [[ -n "${VALHALLA_PBF_URLS:-}" ]]; then
|
||||||
|
msg_info "Building Initial Tiles from VALHALLA_PBF_URLS (this can take a long time)"
|
||||||
|
$STD /opt/valhalla_data/build-tiles.sh $VALHALLA_PBF_URLS
|
||||||
|
msg_ok "Built Initial Tiles"
|
||||||
|
fi
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
cleanup_lxc
|
||||||
Reference in New Issue
Block a user