forked from forkanization/Proxmox-arm64
Compare commits
2 Commits
upstream-m
...
test
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e2c43712ad | ||
|
|
456bb08a2e |
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
script*.py
|
||||
125
install/2fauth-install.sh
Normal file
125
install/2fauth-install.sh
Normal file
@@ -0,0 +1,125 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: jkrgr0
|
||||
# License: MIT
|
||||
# Source: https://docs.2fauth.app/
|
||||
|
||||
# Import Functions und Setup
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
# Installing Dependencies with the 3 core dependencies (curl;sudo;mc)
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
sudo \
|
||||
mc \
|
||||
nginx \
|
||||
composer \
|
||||
php8.2-{bcmath,common,ctype,curl,fileinfo,fpm,gd,mbstring,mysql,xml,cli} \
|
||||
mariadb-server \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
# Template: MySQL Database
|
||||
msg_info "Setting up Database"
|
||||
DB_NAME=2fauth_db
|
||||
DB_USER=2fauth
|
||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||
$STD mysql -u root -e "CREATE DATABASE $DB_NAME;"
|
||||
$STD mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED WITH mysql_native_password AS PASSWORD('$DB_PASS');"
|
||||
$STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
|
||||
{
|
||||
echo "2FAuth Credentials"
|
||||
echo "Database User: $DB_USER"
|
||||
echo "Database Password: $DB_PASS"
|
||||
echo "Database Name: $DB_NAME"
|
||||
} >> ~/2FAuth.creds
|
||||
msg_ok "Set up Database"
|
||||
|
||||
# Setup App
|
||||
msg_info "Setup 2FAuth"
|
||||
RELEASE=$(curl -s https://api.github.com/repos/Bubka/2FAuth/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
wget -q "https://github.com/Bubka/2FAuth/archive/refs/tags/${RELEASE}.zip"
|
||||
unzip -q "${RELEASE}.zip"
|
||||
mv "2FAuth-${RELEASE//v}/" /opt/2fauth
|
||||
|
||||
cd "/opt/2fauth" || return
|
||||
cp .env.example .env
|
||||
IPADDRESS=$(hostname -I | awk '{print $1}')
|
||||
|
||||
sed -i -e "s|^APP_URL=.*|APP_URL=http://$IPADDRESS|" \
|
||||
-e "s|^DB_CONNECTION=$|DB_CONNECTION=mysql|" \
|
||||
-e "s|^DB_DATABASE=$|DB_DATABASE=$DB_NAME|" \
|
||||
-e "s|^DB_HOST=$|DB_HOST=127.0.0.1|" \
|
||||
-e "s|^DB_PORT=$|DB_PORT=3306|" \
|
||||
-e "s|^DB_USERNAME=$|DB_USERNAME=$DB_USER|" \
|
||||
-e "s|^DB_PASSWORD=$|DB_PASSWORD=$DB_PASS|" .env
|
||||
|
||||
export COMPOSER_ALLOW_SUPERUSER=1
|
||||
$STD composer update --no-plugins --no-scripts
|
||||
$STD composer install --no-dev --prefer-source --no-plugins --no-scripts
|
||||
|
||||
$STD php artisan key:generate --force
|
||||
|
||||
$STD php artisan migrate:refresh
|
||||
$STD php artisan passport:install -q -n
|
||||
$STD php artisan storage:link
|
||||
$STD php artisan config:cache
|
||||
|
||||
chown -R www-data: /opt/2fauth
|
||||
chmod -R 755 /opt/2fauth
|
||||
|
||||
echo "${RELEASE}" >"/opt/2fauth_version.txt"
|
||||
msg_ok "Setup 2fauth"
|
||||
|
||||
# Configure Service (NGINX)
|
||||
msg_info "Configure Service"
|
||||
cat <<EOF >/etc/nginx/conf.d/2fauth.conf
|
||||
server {
|
||||
listen 80;
|
||||
root /opt/2fauth/public;
|
||||
server_name $IPADDRESS;
|
||||
index index.php;
|
||||
charset utf-8;
|
||||
|
||||
location / {
|
||||
try_files \$uri \$uri/ /index.php?\$query_string;
|
||||
}
|
||||
|
||||
location = /favicon.ico { access_log off; log_not_found off; }
|
||||
location = /robots.txt { access_log off; log_not_found off; }
|
||||
|
||||
error_page 404 /index.php;
|
||||
|
||||
location ~ \.php\$ {
|
||||
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
|
||||
fastcgi_param SCRIPT_FILENAME \$realpath_root\$fastcgi_script_name;
|
||||
include fastcgi_params;
|
||||
}
|
||||
|
||||
location ~ /\.(?!well-known).* {
|
||||
deny all;
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
systemctl reload nginx
|
||||
msg_ok "Configured Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
# Cleanup
|
||||
msg_info "Cleaning up"
|
||||
rm -f "/opt/v${RELEASE}.zip"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
85
install/5etools-install.sh
Normal file
85
install/5etools-install.sh
Normal file
@@ -0,0 +1,85 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: TheRealVira
|
||||
# License: MIT
|
||||
# Source: https://5e.tools/
|
||||
|
||||
# Import Functions und Setup
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
mc \
|
||||
sudo \
|
||||
git \
|
||||
gpg \
|
||||
ca-certificates \
|
||||
apache2 \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setting up Node.js Repository"
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
msg_ok "Set up Node.js Repository"
|
||||
|
||||
msg_info "Installing Node.js"
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y nodejs
|
||||
msg_ok "Installed Node.js"
|
||||
|
||||
# Setup App
|
||||
msg_info "Set up 5etools Base"
|
||||
cd /opt
|
||||
RELEASE=$(curl -s https://api.github.com/repos/5etools-mirror-3/5etools-src/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
wget -q "https://github.com/5etools-mirror-3/5etools-src/archive/refs/tags/${RELEASE}.zip"
|
||||
unzip -q "${RELEASE}.zip"
|
||||
mv "5etools-src-${RELEASE:1}" /opt/5etools
|
||||
cd /opt/5etools
|
||||
$STD npm install
|
||||
$STD npm run build
|
||||
echo "${RELEASE}" >"/opt/5etools_version.txt"
|
||||
msg_ok "Set up 5etools Base"
|
||||
|
||||
msg_info "Set up 5etools Image"
|
||||
cd /opt
|
||||
IMG_RELEASE=$(curl -s https://api.github.com/repos/5etools-mirror-2/5etools-img/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
curl -sSL "https://github.com/5etools-mirror-2/5etools-img/archive/refs/tags/${IMG_RELEASE}.zip" > "${IMG_RELEASE}.zip"
|
||||
unzip -q "${IMG_RELEASE}.zip"
|
||||
mv "5etools-img-${IMG_RELEASE:1}" /opt/5etools/img
|
||||
echo "${IMG_RELEASE}" >"/opt/5etools_IMG_version.txt"
|
||||
msg_ok "Set up 5etools Image"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >> /etc/apache2/apache2.conf
|
||||
<Location /server-status>
|
||||
SetHandler server-status
|
||||
Order deny,allow
|
||||
Allow from all
|
||||
</Location>
|
||||
EOF
|
||||
rm -rf /var/www/html
|
||||
ln -s "/opt/5etools" /var/www/html
|
||||
chown -R www-data: "/opt/5etools"
|
||||
chmod -R 755 "/opt/5etools"
|
||||
msg_ok "Created Service"
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf /opt/${IMG_RELEASE}.zip
|
||||
rm -rf /opt/${RELEASE}.zip
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2024 tteck
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT
|
||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
||||
@@ -25,18 +25,18 @@ $STD apk add openssh
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing PHP/Redis"
|
||||
$STD apk add php82-opcache
|
||||
$STD apk add php82-redis
|
||||
$STD apk add php82-apcu
|
||||
$STD apk add php82-fpm
|
||||
$STD apk add php82-sysvsem
|
||||
$STD apk add php82-ftp
|
||||
$STD apk add php82-pecl-smbclient
|
||||
$STD apk add php82-pecl-imagick
|
||||
$STD apk add php82-pecl-vips
|
||||
$STD apk add php82-exif
|
||||
$STD apk add php82-sodium
|
||||
$STD apk add php82-bz2
|
||||
$STD apk add php83-opcache
|
||||
$STD apk add php83-redis
|
||||
$STD apk add php83-apcu
|
||||
$STD apk add php83-fpm
|
||||
$STD apk add php83-sysvsem
|
||||
$STD apk add php83-ftp
|
||||
$STD apk add php83-pecl-smbclient
|
||||
$STD apk add php83-pecl-imagick
|
||||
$STD apk add php83-pecl-vips
|
||||
$STD apk add php83-exif
|
||||
$STD apk add php83-sodium
|
||||
$STD apk add php83-bz2
|
||||
$STD apk add redis
|
||||
msg_ok "Installed PHP/Redis"
|
||||
|
||||
@@ -51,7 +51,7 @@ echo -e "Nextcloud Database Username: \e[32m$DB_USER\e[0m" >>~/nextcloud.creds
|
||||
echo -e "Nextcloud Database Password: \e[32m$DB_PASS\e[0m" >>~/nextcloud.creds
|
||||
echo -e "Nextcloud Database Name: \e[32m$DB_NAME\e[0m" >>~/nextcloud.creds
|
||||
$STD apk add nextcloud-mysql mariadb mariadb-client
|
||||
$STD mysql_install_db --user=mysql --datadir=/var/lib/mysql
|
||||
$STD mariadb-install-db --user=mysql --datadir=/var/lib/mysql
|
||||
$STD service mariadb start
|
||||
$STD rc-update add mariadb
|
||||
mysql -uroot -p"$ADMIN_PASS" -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '$ADMIN_PASS' WITH GRANT OPTION; DELETE FROM mysql.user WHERE User=''; DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1'); DROP DATABASE test; DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%'; CREATE DATABASE $DB_NAME; GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS'; GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost.localdomain' IDENTIFIED BY '$DB_PASS'; FLUSH PRIVILEGES;"
|
||||
@@ -104,6 +104,8 @@ server {
|
||||
listen 80;
|
||||
return 301 https://$host$request_uri;
|
||||
server_name localhost;
|
||||
client_max_body_size 16G;
|
||||
fastcgi_read_timeout 120s;
|
||||
}
|
||||
server {
|
||||
listen 443 ssl http2;
|
||||
@@ -128,6 +130,8 @@ server {
|
||||
fastcgi_pass unix:/run/nextcloud/fastcgi.sock; # From the nextcloud-initscript package
|
||||
fastcgi_index index.php;
|
||||
include fastcgi.conf;
|
||||
fastcgi_read_timeout 120s;
|
||||
client_max_body_size 16G;
|
||||
}
|
||||
location ^~ /.well-known/carddav { return 301 /remote.php/dav/; }
|
||||
location ^~ /.well-known/caldav { return 301 /remote.php/dav/; }
|
||||
@@ -135,11 +139,13 @@ server {
|
||||
location ^~ /.well-known/nodeinfo { return 301 /index.php/.well-known/nodeinfo; }
|
||||
}
|
||||
EOF
|
||||
sed -i -e 's|memory_limit = 128M|memory_limit = 512M|; $aapc.enable_cli=1' /etc/php82/php.ini
|
||||
sed -i -E '/^php_admin_(flag|value)\[opcache/s/^/;/' /etc/php82/php-fpm.d/nextcloud.conf
|
||||
sed -i -e 's|memory_limit = 128M|memory_limit = 512M|; $aapc.enable_cli=1' /etc/php83/php.ini
|
||||
sed -i -e 's|upload_max_file_size = 2M|upload_max_file_size = 16G|' /etc/php83/php.ini
|
||||
sed -i -E '/^php_admin_(flag|value)\[opcache/s/^/;/' /etc/php83/php-fpm.d/nextcloud.conf
|
||||
msg_ok "Installed Nextcloud"
|
||||
|
||||
msg_info "Adding Additional Nextcloud Packages"
|
||||
$STD apk add nextcloud-occ
|
||||
$STD apk add nextcloud-default-apps
|
||||
$STD apk add nextcloud-activity
|
||||
$STD apk add nextcloud-admin_audit
|
||||
@@ -164,9 +170,10 @@ msg_ok "Added Additional Nextcloud Packages"
|
||||
msg_info "Starting Services"
|
||||
$STD rc-service redis start
|
||||
$STD rc-update add redis default
|
||||
$STD rc-service php-fpm82 start
|
||||
$STD rc-service php-fpm83 start
|
||||
chown -R nextcloud:www-data /var/log/nextcloud/
|
||||
$STD rc-service php-fpm82 restart
|
||||
chown -R nextcloud:www-data /usr/share/webapps/nextcloud/
|
||||
$STD rc-service php-fpm83 restart
|
||||
$STD rc-service nginx start
|
||||
$STD rc-service nextcloud start
|
||||
$STD rc-update add nginx default
|
||||
@@ -176,16 +183,16 @@ msg_ok "Started Services"
|
||||
msg_info "Start Nextcloud Setup-Wizard"
|
||||
echo -e "export VISUAL=nano\nexport EDITOR=nano" >>/etc/profile
|
||||
cd /usr/share/webapps/nextcloud
|
||||
$STD su nextcloud -s /bin/sh -c "php82 occ maintenance:install \
|
||||
$STD su nextcloud -s /bin/sh -c "php83 occ maintenance:install \
|
||||
--database='mysql' --database-name $DB_NAME \
|
||||
--database-user '$DB_USER' --database-pass '$DB_PASS' \
|
||||
--admin-user '$ADMIN_USER' --admin-pass '$ADMIN_PASS' \
|
||||
--data-dir '/var/lib/nextcloud/data'"
|
||||
$STD su nextcloud -s /bin/sh -c 'php82 occ background:cron'
|
||||
$STD su nextcloud -s /bin/sh -c 'php83 occ background:cron'
|
||||
rm -rf /usr/share/webapps/nextcloud/apps/serverinfo
|
||||
IP4=$(/sbin/ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1)
|
||||
sed -i "/0 => \'localhost\',/a \ \1 => '$IP4'," /usr/share/webapps/nextcloud/config/config.php
|
||||
su nextcloud -s /bin/sh -c 'php82 -f /usr/share/webapps/nextcloud/cron.php'
|
||||
su nextcloud -s /bin/sh -c 'php83 -f /usr/share/webapps/nextcloud/cron.php'
|
||||
msg_ok "Finished Nextcloud Setup-Wizard"
|
||||
|
||||
motd_ssh
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2024 tteck
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT
|
||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
|
||||
color
|
||||
@@ -26,7 +26,9 @@ msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Alpine-Vaultwarden"
|
||||
$STD apk add vaultwarden
|
||||
sed -i -e 's/# export ADMIN_TOKEN=.*/export ADMIN_TOKEN='\'''\''/' -e '/^# export ROCKET_ADDRESS=0\.0\.0\.0/s/^# //' -e 's|export WEB_VAULT_ENABLED=.*|export WEB_VAULT_ENABLED=true|' /etc/conf.d/vaultwarden
|
||||
sed -i -e 's|export WEB_VAULT_ENABLED=.*|export WEB_VAULT_ENABLED=true|' /etc/conf.d/vaultwarden
|
||||
echo -e "export ADMIN_TOKEN=''" >>/etc/conf.d/vaultwarden
|
||||
echo -e "export ROCKET_ADDRESS=0.0.0.0" >>/etc/conf.d/vaultwarden
|
||||
msg_ok "Installed Alpine-Vaultwarden"
|
||||
|
||||
msg_info "Installing Web-Vault"
|
||||
|
||||
156
install/apache-guacamole-install.sh
Normal file
156
install/apache-guacamole-install.sh
Normal file
@@ -0,0 +1,156 @@
|
||||
#!/usr/bin/env bash
|
||||
#Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: Michel Roegl-Brunner (michelroegl-brunner) | MickLesk (CanbiZ)
|
||||
# License: MIT
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
build-essential \
|
||||
curl \
|
||||
jq \
|
||||
libcairo2-dev \
|
||||
libturbojpeg0 \
|
||||
libpng-dev \
|
||||
libtool-bin \
|
||||
libossp-uuid-dev \
|
||||
libvncserver-dev \
|
||||
freerdp2-dev \
|
||||
libssh2-1-dev \
|
||||
libtelnet-dev \
|
||||
libwebsockets-dev \
|
||||
libpulse-dev \
|
||||
libvorbis-dev \
|
||||
libwebp-dev \
|
||||
libssl-dev \
|
||||
libpango1.0-dev \
|
||||
libswscale-dev \
|
||||
libavcodec-dev \
|
||||
libavutil-dev \
|
||||
libavformat-dev \
|
||||
mariadb-server \
|
||||
default-jdk \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setup Apache Tomcat"
|
||||
RELEASE=$(wget -qO- https://dlcdn.apache.org/tomcat/tomcat-9/ | grep -oP '(?<=href=")v[^"/]+(?=/")' | sed 's/^v//')
|
||||
mkdir -p /opt/apache-guacamole/tomcat9
|
||||
mkdir -p /opt/apache-guacamole/server
|
||||
wget -qO- "https://dlcdn.apache.org/tomcat/tomcat-9/v${RELEASE}/bin/apache-tomcat-${RELEASE}.tar.gz" | tar -xz -C /opt/apache-guacamole/tomcat9 --strip-components=1
|
||||
useradd -r -d /opt/apache-guacamole/tomcat9 -s /bin/false tomcat
|
||||
chown -R tomcat: /opt/apache-guacamole/tomcat9
|
||||
chmod -R g+r /opt/apache-guacamole/tomcat9/conf
|
||||
chmod g+x /opt/apache-guacamole/tomcat9/conf
|
||||
msg_ok "Setup Apache Tomcat"
|
||||
|
||||
msg_info "Setup Apache Guacamole"
|
||||
mkdir -p /etc/guacamole/{extensions,lib}
|
||||
RELEASE_SERVER=$(curl -sL https://api.github.com/repos/apache/guacamole-server/tags | jq -r '.[0].name')
|
||||
wget -qO- https://api.github.com/repos/apache/guacamole-server/tarball/refs/tags/${RELEASE_SERVER} | tar -xz --strip-components=1 -C /opt/apache-guacamole/server
|
||||
cd /opt/apache-guacamole/server
|
||||
$STD autoreconf -fi
|
||||
$STD ./configure --with-init-dir=/etc/init.d --enable-allow-freerdp-snapshots
|
||||
$STD make
|
||||
$STD make install
|
||||
$STD ldconfig
|
||||
RELEASE_CLIENT=$(curl -sL https://api.github.com/repos/apache/guacamole-client/tags | jq -r '.[0].name')
|
||||
wget -q -O /opt/apache-guacamole/tomcat9/webapps/guacamole.war https://downloads.apache.org/guacamole/${RELEASE_CLIENT}/binary/guacamole-${RELEASE_CLIENT}.war
|
||||
cd /root
|
||||
wget -q --directory-prefix=/root/ https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.26.tar.gz
|
||||
$STD tar -xf ~/mysql-connector-java-8.0.26.tar.gz
|
||||
mv ~/mysql-connector-java-8.0.26/mysql-connector-java-8.0.26.jar /etc/guacamole/lib/
|
||||
wget -q --directory-prefix=/root/ https://downloads.apache.org/guacamole/1.5.5/binary/guacamole-auth-jdbc-1.5.5.tar.gz
|
||||
$STD tar -xf ~/guacamole-auth-jdbc-1.5.5.tar.gz
|
||||
mv ~/guacamole-auth-jdbc-1.5.5/mysql/guacamole-auth-jdbc-mysql-1.5.5.jar /etc/guacamole/extensions/
|
||||
msg_ok "Setup Apache Guacamole"
|
||||
|
||||
msg_info "Setup Database"
|
||||
DB_NAME=guacamole_db
|
||||
DB_USER=guacamole_user
|
||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||
mysql -u root -e "CREATE DATABASE $DB_NAME;"
|
||||
mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED WITH mysql_native_password AS PASSWORD('$DB_PASS');"
|
||||
mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
|
||||
{
|
||||
echo "Guacamole-Credentials"
|
||||
echo "Database User: $DB_USER"
|
||||
echo "Database Password: $DB_PASS"
|
||||
echo "Database Name: $DB_NAME"
|
||||
} >> ~/guacamole.creds
|
||||
cd guacamole-auth-jdbc-1.5.5/mysql/schema
|
||||
cat *.sql | mysql -u root ${DB_NAME}
|
||||
{
|
||||
echo "mysql-hostname: 127.0.0.1"
|
||||
echo "mysql-port: 3306"
|
||||
echo "mysql-database: $DB_NAME"
|
||||
echo "mysql-username: $DB_USER"
|
||||
echo "mysql-password: $DB_PASS"
|
||||
|
||||
} >> /etc/guacamole/guacamole.properties
|
||||
msg_ok "Setup Database"
|
||||
|
||||
msg_info "Setup Service"
|
||||
cat <<EOF >/etc/guacamole/guacd.conf
|
||||
[server]
|
||||
bind_host = 127.0.0.1
|
||||
bind_port = 4822
|
||||
EOF
|
||||
JAVA_HOME=$(update-alternatives --query javadoc | grep Value: | head -n1 | sed 's/Value: //' | sed 's@bin/javadoc$@@')
|
||||
cat <<EOF >/etc/systemd/system/tomcat.service
|
||||
[Unit]
|
||||
Description=Apache Tomcat Web Application Container
|
||||
After=network.target
|
||||
[Service]
|
||||
Type=forking
|
||||
Environment="JAVA_HOME=${JAVA_HOME}"
|
||||
Environment="CATALINA_PID=/opt/apache-guacamole/tomcat9/temp/tomcat.pid"
|
||||
Environment="CATALINA_HOME=/opt/apache-guacamole/tomcat9/"
|
||||
Environment="CATALINA_BASE=/opt/apache-guacamole/tomcat9/"
|
||||
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"
|
||||
Environment="JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom"
|
||||
ExecStart=/opt/apache-guacamole/tomcat9/bin/startup.sh
|
||||
ExecStop=/opt/apache-guacamole/tomcat9/bin/shutdown.sh
|
||||
User=tomcat
|
||||
Group=tomcat
|
||||
UMask=0007
|
||||
RestartSec=10
|
||||
Restart=always
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
cat <<EOF >/etc/systemd/system/guacd.service
|
||||
[Unit]
|
||||
Description=Guacamole Proxy Daemon (guacd)
|
||||
After=mysql.service tomcat.service
|
||||
Requires=mysql.service tomcat.service
|
||||
[Service]
|
||||
Type=forking
|
||||
ExecStart=/etc/init.d/guacd start
|
||||
ExecStop=/etc/init.d/guacd stop
|
||||
ExecReload=/etc/init.d/guacd restart
|
||||
PIDFile=/var/run/guacd.pid
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl -q enable --now mysql tomcat guacd
|
||||
msg_ok "Setup Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf ~/mysql-connector-java-8.0.26{,.tar.gz}
|
||||
rm -rf ~/guacamole-auth-jdbc-1.5.5{,.tar.gz}
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
@@ -1,9 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2024 tteck
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck
|
||||
# License: MIT
|
||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
@@ -50,14 +50,14 @@ $STD apt-get update
|
||||
$STD apt-get install -y nodejs
|
||||
msg_ok "Installed Node.js"
|
||||
|
||||
msg_info "Installing Playright/Chromium"
|
||||
$STD pip install playwright
|
||||
$STD playwright install --with-deps chromium
|
||||
msg_ok "Installed Playright/Chromium"
|
||||
msg_info "Installing Playwright"
|
||||
$STD pip install playwright
|
||||
$STD playwright install-deps chromium
|
||||
msg_ok "Installed Playwright"
|
||||
|
||||
msg_info "Installing ArchiveBox"
|
||||
msg_info "Installing Chromium and ArchiveBox"
|
||||
mkdir -p /opt/archivebox/{data,.npm,.cache,.local}
|
||||
$STD adduser --system --shell /bin/bash --gecos 'Archive Box User' --group --disabled-password archivebox
|
||||
$STD adduser --system --shell /bin/bash --gecos 'Archive Box User' --group --disabled-password --home /home/archivebox archivebox
|
||||
chown -R archivebox:archivebox /opt/archivebox/{data,.npm,.cache,.local}
|
||||
chmod -R 755 /opt/archivebox/data
|
||||
$STD pip install archivebox
|
||||
@@ -66,6 +66,7 @@ expect <<EOF
|
||||
set timeout -1
|
||||
log_user 0
|
||||
|
||||
spawn sudo -u archivebox playwright install chromium
|
||||
spawn sudo -u archivebox archivebox setup
|
||||
|
||||
expect "Username"
|
||||
|
||||
197
install/authentik-install.sh
Normal file
197
install/authentik-install.sh
Normal file
@@ -0,0 +1,197 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: remz1337
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies (Patience)"
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
sudo \
|
||||
mc \
|
||||
gpg \
|
||||
pkg-config \
|
||||
libffi-dev \
|
||||
build-essential \
|
||||
libpq-dev \
|
||||
libkrb5-dev \
|
||||
libssl-dev \
|
||||
libsqlite3-dev \
|
||||
tk-dev \
|
||||
libgdbm-dev \
|
||||
libc6-dev \
|
||||
libbz2-dev \
|
||||
zlib1g-dev \
|
||||
libxmlsec1 \
|
||||
libxmlsec1-dev \
|
||||
libxmlsec1-openssl \
|
||||
libmaxminddb0 \
|
||||
python3-pip \
|
||||
git \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing yq"
|
||||
cd /tmp
|
||||
YQ_LATEST="$(wget -qO- "https://api.github.com/repos/mikefarah/yq/releases/latest" | grep -Po '"tag_name": "\K.*?(?=")')"
|
||||
wget -q "https://github.com/mikefarah/yq/releases/download/${YQ_LATEST}/yq_linux_amd64" -qO /usr/bin/yq
|
||||
chmod +x /usr/bin/yq
|
||||
msg_ok "Installed yq"
|
||||
|
||||
msg_info "Installing GeoIP"
|
||||
cd /tmp
|
||||
GEOIP_RELEASE=$(curl -s https://api.github.com/repos/maxmind/geoipupdate/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
wget -qO geoipupdate.deb https://github.com/maxmind/geoipupdate/releases/download/v${GEOIP_RELEASE}/geoipupdate_${GEOIP_RELEASE}_linux_amd64.deb
|
||||
$STD dpkg -i geoipupdate.deb
|
||||
cat <<EOF >/etc/GeoIP.conf
|
||||
#GEOIPUPDATE_EDITION_IDS="GeoLite2-City GeoLite2-ASN"
|
||||
#GEOIPUPDATE_VERBOSE="1"
|
||||
#GEOIPUPDATE_ACCOUNT_ID_FILE="/run/secrets/GEOIPUPDATE_ACCOUNT_ID"
|
||||
#GEOIPUPDATE_LICENSE_KEY_FILE="/run/secrets/GEOIPUPDATE_LICENSE_KEY"
|
||||
EOF
|
||||
msg_ok "Installed GeoIP"
|
||||
|
||||
msg_info "Setting up Python 3"
|
||||
cd /tmp
|
||||
wget -q https://www.python.org/ftp/python/3.12.1/Python-3.12.1.tgz -O Python.tgz
|
||||
tar -zxf Python.tgz
|
||||
cd Python-3.12.1
|
||||
$STD ./configure --enable-optimizations
|
||||
$STD make altinstall
|
||||
cd ~
|
||||
$STD update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.12 1
|
||||
msg_ok "Setup Python 3"
|
||||
|
||||
msg_info "Setting up Node.js Repository"
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
msg_ok "Set up Node.js Repository"
|
||||
|
||||
msg_info "Installing Node.js"
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y nodejs
|
||||
msg_ok "Installed Node.js"
|
||||
|
||||
msg_info "Installing Golang"
|
||||
cd /tmp
|
||||
set +o pipefail
|
||||
GO_RELEASE=$(curl -s https://go.dev/dl/ | grep -o -m 1 "go.*\linux-amd64.tar.gz")
|
||||
wget -q https://golang.org/dl/${GO_RELEASE}
|
||||
tar -xzf ${GO_RELEASE} -C /usr/local
|
||||
ln -s /usr/local/go/bin/go /usr/bin/go
|
||||
set -o pipefail
|
||||
msg_ok "Installed Golang"
|
||||
|
||||
msg_info "Installing Redis"
|
||||
$STD apt-get install -y redis-server
|
||||
systemctl enable -q --now redis-server
|
||||
msg_ok "Installed Redis"
|
||||
|
||||
msg_info "Installing PostgreSQL"
|
||||
$STD apt-get install -y postgresql postgresql-contrib
|
||||
DB_NAME="authentik"
|
||||
DB_USER="authentik"
|
||||
DB_PASS="$(openssl rand -base64 18 | cut -c1-13)"
|
||||
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME;"
|
||||
$STD sudo -u postgres psql -c "CREATE USER $DB_USER WITH PASSWORD '$DB_PASS';"
|
||||
$STD sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $DB_NAME TO $DB_USER;"
|
||||
$STD sudo -u postgres psql -c "ALTER DATABASE $DB_NAME OWNER TO $DB_USER;"
|
||||
$STD sudo -u postgres psql -c "ALTER USER $DB_USER WITH SUPERUSER;"
|
||||
msg_ok "Installed PostgreSQL"
|
||||
|
||||
msg_info "Installing authentik"
|
||||
RELEASE=$(curl -s https://api.github.com/repos/goauthentik/authentik/releases/latest | grep "tarball_url" | awk '{print substr($2, 2, length($2)-3)}')
|
||||
mkdir -p /opt/authentik
|
||||
wget -qO authentik.tar.gz "${RELEASE}"
|
||||
tar -xzf authentik.tar.gz -C /opt/authentik --strip-components 1 --overwrite
|
||||
cd /opt/authentik/website
|
||||
$STD npm install
|
||||
$STD npm run build-bundled
|
||||
cd /opt/authentik/web
|
||||
$STD npm install
|
||||
$STD npm run build
|
||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||
cd /opt/authentik
|
||||
$STD go mod download
|
||||
$STD go build -o /go/authentik ./cmd/server
|
||||
$STD go build -o /opt/authentik/authentik-server /opt/authentik/cmd/server/
|
||||
cd /opt/authentik
|
||||
$STD pip3 install --upgrade pip
|
||||
$STD pip3 install poetry poetry-plugin-export
|
||||
ln -s /usr/local/bin/poetry /usr/bin/poetry
|
||||
$STD poetry install --only=main --no-ansi --no-interaction --no-root
|
||||
$STD poetry export --without-hashes --without-urls -f requirements.txt --output requirements.txt
|
||||
$STD pip install --no-cache-dir -r requirements.txt
|
||||
$STD pip install .
|
||||
mkdir -p /etc/authentik
|
||||
mv /opt/authentik/authentik/lib/default.yml /etc/authentik/config.yml
|
||||
$STD yq -i ".secret_key = \"$(openssl rand -hex 32)\"" /etc/authentik/config.yml
|
||||
$STD yq -i ".postgresql.password = \"${DB_PASS}\"" /etc/authentik/config.yml
|
||||
$STD yq -i ".geoip = \"/opt/authentik/tests/GeoLite2-City-Test.mmdb\"" /etc/authentik/config.yml
|
||||
cp -r /opt/authentik/authentik/blueprints /opt/authentik/blueprints
|
||||
$STD yq -i ".blueprints_dir = \"/opt/authentik/blueprints\"" /etc/authentik/config.yml
|
||||
ln -s /usr/bin/python3 /usr/bin/python
|
||||
ln -s /usr/local/bin/gunicorn /usr/bin/gunicorn
|
||||
ln -s /usr/local/bin/celery /usr/bin/celery
|
||||
$STD bash /opt/authentik/lifecycle/ak migrate
|
||||
cd ~
|
||||
msg_ok "Installed authentik"
|
||||
|
||||
msg_info "Creating Services"
|
||||
cat <<EOF >/etc/systemd/system/authentik-server.service
|
||||
[Unit]
|
||||
Description = authentik Server
|
||||
|
||||
[Service]
|
||||
ExecStart=/opt/authentik/authentik-server
|
||||
WorkingDirectory=/opt/authentik/
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
cat <<EOF >/etc/systemd/system/authentik-worker.service
|
||||
[Unit]
|
||||
Description = authentik Worker
|
||||
|
||||
[Service]
|
||||
Environment=DJANGO_SETTINGS_MODULE="authentik.root.settings"
|
||||
ExecStart=celery -A authentik.root.celery worker -Ofair --max-tasks-per-child=1 --autoscale 3,1 -E -B -s /tmp/celerybeat-schedule -Q authentik,authentik_scheduled,authentik_events
|
||||
WorkingDirectory=/opt/authentik/authentik
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now authentik-server
|
||||
sleep 2
|
||||
systemctl enable -q --now authentik-worker
|
||||
msg_ok "Created Services"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf /tmp/Python-3.12.1
|
||||
rm -rf /tmp/Python.tgz
|
||||
rm -rf go/
|
||||
rm -rf /tmp/${GO_RELEASE}
|
||||
rm -rf /tmp/geoipupdate.deb
|
||||
rm -rf authentik.tar.gz
|
||||
$STD apt-get -y remove yq
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
@@ -1,9 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2024 tteck
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT
|
||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
@@ -30,241 +30,46 @@ RELEASE=$(curl -s https://api.github.com/repos/0xERR0R/blocky/releases/latest |
|
||||
wget -qO- https://github.com/0xERR0R/blocky/releases/download/v${RELEASE}/blocky_v${RELEASE}_Linux_arm64.tar.gz | tar -xzf - -C /opt/blocky/
|
||||
|
||||
cat <<EOF >/opt/blocky/config.yml
|
||||
upstream:
|
||||
# these external DNS resolvers will be used. Blocky picks 2 random resolvers from the list for each query
|
||||
# format for resolver: [net:]host:[port][/path]. net could be empty (default, shortcut for tcp+udp), tcp+udp, tcp, udp, tcp-tls or https (DoH). If port is empty, default port will be used (53 for udp and tcp, 853 for tcp-tls, 443 for https (Doh))
|
||||
# this configuration is mandatory, please define at least one external DNS resolver
|
||||
default:
|
||||
# example for tcp+udp IPv4 server (https://digitalcourage.de/)
|
||||
#- 5.9.164.112
|
||||
# Cloudflare
|
||||
- 1.1.1.1
|
||||
# example for DNS-over-TLS server (DoT)
|
||||
#- tcp-tls:fdns1.dismail.de:853
|
||||
# example for DNS-over-HTTPS (DoH)
|
||||
#- https://dns.digitale-gesellschaft.ch/dns-query
|
||||
# optional: use client name (with wildcard support: * - sequence of any characters, [0-9] - range)
|
||||
# or single ip address / client subnet as CIDR notation
|
||||
#laptop*:
|
||||
#- 123.123.123.123
|
||||
# configuration documentation: https://0xerr0r.github.io/blocky/latest/configuration/
|
||||
|
||||
# optional: timeout to query the upstream resolver. Default: 2s
|
||||
#upstreamTimeout: 2s
|
||||
upstreams:
|
||||
groups:
|
||||
# these external DNS resolvers will be used. Blocky picks 2 random resolvers from the list for each query
|
||||
# format for resolver: [net:]host:[port][/path]. net could be empty (default, shortcut for tcp+udp), tcp+udp, tcp, udp, tcp-tls or https (DoH). If port is empty, default port will be used (53 for udp and tcp, 853 for tcp-tls, 443 for https (Doh))
|
||||
# this configuration is mandatory, please define at least one external DNS resolver
|
||||
default:
|
||||
# Cloudflare
|
||||
- 1.1.1.1
|
||||
# Quad9 DNS-over-TLS server (DoT)
|
||||
- tcp-tls:dns.quad9.net
|
||||
|
||||
# optional: If true, blocky will fail to start unless at least one upstream server per group is reachable. Default: false
|
||||
#startVerifyUpstream: true
|
||||
|
||||
# optional: Determines how blocky will create outgoing connections. This impacts both upstreams, and lists.
|
||||
# accepted: dual, v4, v6
|
||||
# default: dual
|
||||
#connectIPVersion: dual
|
||||
|
||||
# optional: custom IP address(es) for domain name (with all sub-domains). Multiple addresses must be separated by a comma
|
||||
# example: query "printer.lan" or "my.printer.lan" will return 192.168.178.3
|
||||
#customDNS:
|
||||
#customTTL: 1h
|
||||
# optional: if true (default), return empty result for unmapped query types (for example TXT, MX or AAAA if only IPv4 address is defined).
|
||||
# if false, queries with unmapped types will be forwarded to the upstream resolver
|
||||
#filterUnmappedTypes: true
|
||||
# optional: replace domain in the query with other domain before resolver lookup in the mapping
|
||||
#rewrite:
|
||||
#example.com: printer.lan
|
||||
#mapping:
|
||||
#printer.lan: 192.168.178.3,2001:0db8:85a3:08d3:1319:8a2e:0370:7344
|
||||
|
||||
# optional: definition, which DNS resolver(s) should be used for queries to the domain (with all sub-domains). Multiple resolvers must be separated by a comma
|
||||
# Example: Query client.fritz.box will ask DNS server 192.168.178.1. This is necessary for local network, to resolve clients by host name
|
||||
#conditional:
|
||||
# optional: if false (default), return empty result if after rewrite, the mapped resolver returned an empty answer. If true, the original query will be sent to the upstream resolver
|
||||
# Example: The query "blog.example.com" will be rewritten to "blog.fritz.box" and also redirected to the resolver at 192.168.178.1. If not found and if was set to , the original query "blog.example.com" will be sent upstream.
|
||||
# Usage: One usecase when having split DNS for internal and external (internet facing) users, but not all subdomains are listed in the internal domain.
|
||||
#fallbackUpstream: false
|
||||
# optional: replace domain in the query with other domain before resolver lookup in the mapping
|
||||
#rewrite:
|
||||
#example.com: fritz.box
|
||||
#mapping:
|
||||
#fritz.box: 192.168.178.1
|
||||
#lan.net: 192.168.178.1,192.168.178.2
|
||||
|
||||
# optional: use black and white lists to block queries (for example ads, trackers, adult pages etc.)
|
||||
# optional: use allow/denylists to block queries (for example ads, trackers, adult pages etc.)
|
||||
blocking:
|
||||
# definition of blacklist groups. Can be external link (http/https) or local file
|
||||
blackLists:
|
||||
# definition of denylist groups. Can be external link (http/https) or local file
|
||||
denylists:
|
||||
ads:
|
||||
- https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt
|
||||
- https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
|
||||
- http://sysctl.org/cameleon/hosts
|
||||
- https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt
|
||||
- |
|
||||
# inline definition with YAML literal block scalar style
|
||||
# hosts format
|
||||
someadsdomain.com
|
||||
special:
|
||||
- https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews/hosts
|
||||
# definition of whitelist groups. Attention: if the same group has black and whitelists, whitelists will be used to disable particular blacklist entries. If a group has only whitelist entries -> this means only domains from this list are allowed, all other domains will be blocked
|
||||
whiteLists:
|
||||
ads:
|
||||
- whitelist.txt
|
||||
- |
|
||||
# inline definition with YAML literal block scalar style
|
||||
# hosts format
|
||||
whitelistdomain.com
|
||||
# this is a regex
|
||||
/^banners?[_.-]/
|
||||
# definition: which groups should be applied for which client
|
||||
clientGroupsBlock:
|
||||
# default will be used, if no special definition for a client name exists
|
||||
default:
|
||||
- ads
|
||||
- special
|
||||
# use client name (with wildcard support: * - sequence of any characters, [0-9] - range)
|
||||
# or single ip address / client subnet as CIDR notation
|
||||
#laptop*:
|
||||
#- ads
|
||||
#192.168.178.1/24:
|
||||
#- special
|
||||
# which response will be sent, if query is blocked:
|
||||
# zeroIp: 0.0.0.0 will be returned (default)
|
||||
# nxDomain: return NXDOMAIN as return code
|
||||
# comma separated list of destination IP addresses (for example: 192.100.100.15, 2001:0db8:85a3:08d3:1319:8a2e:0370:7344). Should contain ipv4 and ipv6 to cover all query types. Useful with running web server on this address to display the "blocked" page.
|
||||
blockType: zeroIp
|
||||
# optional: TTL for answers to blocked domains
|
||||
# default: 6h
|
||||
blockTTL: 1m
|
||||
# optional: automatically list refresh period (in duration format). Default: 4h.
|
||||
# Negative value -> deactivate automatically refresh.
|
||||
# 0 value -> use default
|
||||
refreshPeriod: 4h
|
||||
# optional: timeout for list download (each url). Default: 60s. Use large values for big lists or slow internet connections
|
||||
downloadTimeout: 4m
|
||||
# optional: Download attempt timeout. Default: 60s
|
||||
downloadAttempts: 5
|
||||
# optional: Time between the download attempts. Default: 1s
|
||||
downloadCooldown: 10s
|
||||
# optional: if failOnError, application startup will fail if at least one list can't be downloaded / opened. Default: blocking
|
||||
#startStrategy: failOnError
|
||||
|
||||
# optional: configuration for caching of DNS responses
|
||||
caching:
|
||||
# duration how long a response must be cached (min value).
|
||||
# If <=0, use response's TTL, if >0 use this value, if TTL is smaller
|
||||
# Default: 0
|
||||
minTime: 5m
|
||||
# duration how long a response must be cached (max value).
|
||||
# If <0, do not cache responses
|
||||
# If 0, use TTL
|
||||
# If > 0, use this value, if TTL is greater
|
||||
# Default: 0
|
||||
maxTime: 30m
|
||||
# Max number of cache entries (responses) to be kept in cache (soft limit). Useful on systems with limited amount of RAM.
|
||||
# Default (0): unlimited
|
||||
maxItemsCount: 0
|
||||
# if true, will preload DNS results for often used queries (default: names queried more than 5 times in a 2-hour time window)
|
||||
# this improves the response time for often used queries, but significantly increases external traffic
|
||||
# default: false
|
||||
prefetching: true
|
||||
# prefetch track time window (in duration format)
|
||||
# default: 120
|
||||
prefetchExpires: 2h
|
||||
# name queries threshold for prefetch
|
||||
# default: 5
|
||||
prefetchThreshold: 5
|
||||
# Max number of domains to be kept in cache for prefetching (soft limit). Useful on systems with limited amount of RAM.
|
||||
# Default (0): unlimited
|
||||
#prefetchMaxItemsCount: 0
|
||||
|
||||
# optional: configuration of client name resolution
|
||||
clientLookup:
|
||||
# optional: this DNS resolver will be used to perform reverse DNS lookup (typically local router)
|
||||
#upstream: 192.168.178.1
|
||||
# optional: some routers return multiple names for client (host name and user defined name). Define which single name should be used.
|
||||
# Example: take second name if present, if not take first name
|
||||
#singleNameOrder:
|
||||
#- 2
|
||||
#- 1
|
||||
# optional: custom mapping of client name to IP addresses. Useful if reverse DNS does not work properly or just to have custom client names.
|
||||
#clients:
|
||||
#laptop:
|
||||
#- 192.168.178.29
|
||||
# optional: configuration for prometheus metrics endpoint
|
||||
prometheus:
|
||||
# enabled if true
|
||||
#enable: true
|
||||
# url path, optional (default '/metrics')
|
||||
#path: /metrics
|
||||
|
||||
# optional: write query information (question, answer, client, duration etc.) to daily csv file
|
||||
queryLog:
|
||||
# optional one of: mysql, postgresql, csv, csv-client. If empty, log to console
|
||||
#type: mysql
|
||||
# directory (should be mounted as volume in docker) for csv, db connection string for mysql/postgresql
|
||||
#target: db_user:db_password@tcp(db_host_or_ip:3306)/db_name?charset=utf8mb4&parseTime=True&loc=Local
|
||||
#postgresql target: postgres://user:password@db_host_or_ip:5432/db_name
|
||||
# if > 0, deletes log files which are older than ... days
|
||||
#logRetentionDays: 7
|
||||
# optional: Max attempts to create specific query log writer, default: 3
|
||||
#creationAttempts: 1
|
||||
# optional: Time between the creation attempts, default: 2s
|
||||
#creationCooldown: 2s
|
||||
type:
|
||||
|
||||
# optional: Blocky can synchronize its cache and blocking state between multiple instances through redis.
|
||||
redis:
|
||||
# Server address and port
|
||||
#address: redis:6379
|
||||
# Password if necessary
|
||||
#password: passwd
|
||||
# Database, default: 0
|
||||
#database: 2
|
||||
# Connection is required for blocky to start. Default: false
|
||||
#required: true
|
||||
# Max connection attempts, default: 3
|
||||
#connectionAttempts: 10
|
||||
# Time between the connection attempts, default: 1s
|
||||
#connectionCooldown: 3s
|
||||
# optional: use these DNS servers to resolve denylist urls and upstream DNS servers. It is useful if no system DNS resolver is configured, and/or to encrypt the bootstrap queries.
|
||||
bootstrapDns:
|
||||
- upstream: tcp-tls:one.one.one.one
|
||||
ips:
|
||||
- 1.1.1.1
|
||||
|
||||
# optional: DNS listener port(s) and bind ip address(es), default 53 (UDP and TCP). Example: 53, :53, "127.0.0.1:5353,[::1]:5353"
|
||||
port: 553
|
||||
# optional: Port(s) and bind ip address(es) for DoT (DNS-over-TLS) listener. Example: 853, 127.0.0.1:853
|
||||
#tlsPort: 853
|
||||
# optional: HTTPS listener port(s) and bind ip address(es), default empty = no http listener. If > 0, will be used for prometheus metrics, pprof, REST API, DoH... Example: 443, :443, 127.0.0.1:443
|
||||
#httpPort: 4000
|
||||
#httpsPort: 443
|
||||
# optional: Mininal TLS version that the DoH and DoT server will use
|
||||
#minTlsServeVersion: 1.3
|
||||
# if https port > 0: path to cert and key file for SSL encryption. if not set, self-signed certificate will be generated
|
||||
#certFile: server.crt
|
||||
#keyFile: server.key
|
||||
# optional: use this DNS server to resolve blacklist urls and upstream DNS servers. Useful if no DNS resolver is configured and blocky needs to resolve a host name. Format net:IP:port, net must be udp or tcp
|
||||
#bootstrapDns: tcp+udp:1.1.1.1
|
||||
|
||||
filtering:
|
||||
# optional: drop all queries with following query types. Default: empty
|
||||
#queryTypes:
|
||||
#- AAAA
|
||||
|
||||
# optional: if path defined, use this file for query resolution (A, AAAA and rDNS). Default: empty
|
||||
hostsFile:
|
||||
# optional: Path to hosts file (e.g. /etc/hosts on Linux)
|
||||
#filePath: /etc/hosts
|
||||
# optional: TTL, default: 1h
|
||||
#hostsTTL: 60m
|
||||
# optional: Time between hosts file refresh, default: 1h
|
||||
#refreshPeriod: 30m
|
||||
# optional: Whether loopback hosts addresses (127.0.0.0/8 and ::1) should be filtered or not, default: false
|
||||
#filterLoopback: true
|
||||
# optional: Log level (one from debug, info, warn, error). Default: info
|
||||
#logLevel: info
|
||||
# optional: Log format (text or json). Default: text
|
||||
#logFormat: text
|
||||
# optional: log timestamps. Default: true
|
||||
#logTimestamp: true
|
||||
# optional: obfuscate log output (replace all alphanumeric characters with *) for user sensitive data like request domains or responses to increase privacy. Default: false
|
||||
#logPrivacy: false
|
||||
|
||||
# optional: add EDE error codes to dns response
|
||||
#ede:
|
||||
# enabled if true, Default: false
|
||||
#enable: true
|
||||
# optional: logging configuration
|
||||
log:
|
||||
# optional: Log level (one from trace, debug, info, warn, error). Default: info
|
||||
level: info
|
||||
EOF
|
||||
msg_ok "Installed Blocky"
|
||||
|
||||
|
||||
122
install/bookstack-install.sh
Normal file
122
install/bookstack-install.sh
Normal file
@@ -0,0 +1,122 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: MickLesk (Canbiz)
|
||||
# License: MIT
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies (Patience)"
|
||||
$STD apt-get install -y \
|
||||
unzip \
|
||||
mariadb-server \
|
||||
apache2 \
|
||||
curl \
|
||||
sudo \
|
||||
php8.2-{mbstring,gd,fpm,curl,intl,ldap,tidy,bz2,mysql,zip,xml} \
|
||||
composer \
|
||||
libapache2-mod-php \
|
||||
make \
|
||||
mc \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setting up Database"
|
||||
DB_NAME=bookstack
|
||||
DB_USER=bookstack
|
||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||
$STD sudo mysql -u root -e "CREATE DATABASE $DB_NAME;"
|
||||
$STD sudo mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED WITH mysql_native_password AS PASSWORD('$DB_PASS');"
|
||||
$STD sudo mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
|
||||
{
|
||||
echo "Bookstack-Credentials"
|
||||
echo "Bookstack Database User: $DB_USER"
|
||||
echo "Bookstack Database Password: $DB_PASS"
|
||||
echo "Bookstack Database Name: $DB_NAME"
|
||||
} >> ~/bookstack.creds
|
||||
msg_ok "Set up database"
|
||||
|
||||
msg_info "Setup Bookstack (Patience)"
|
||||
LOCAL_IP="$(hostname -I | awk '{print $1}')"
|
||||
cd /opt
|
||||
RELEASE=$(curl -s https://api.github.com/repos/BookStackApp/BookStack/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
wget -q "https://github.com/BookStackApp/BookStack/archive/refs/tags/v${RELEASE}.zip"
|
||||
unzip -q v${RELEASE}.zip
|
||||
mv BookStack-${RELEASE} /opt/bookstack
|
||||
cd /opt/bookstack
|
||||
cp .env.example .env
|
||||
sudo sed -i "s|APP_URL=.*|APP_URL=http://$LOCAL_IP|g" /opt/bookstack/.env
|
||||
sudo sed -i "s/DB_DATABASE=.*/DB_DATABASE=$DB_NAME/" /opt/bookstack/.env
|
||||
sudo sed -i "s/DB_USERNAME=.*/DB_USERNAME=$DB_USER/" /opt/bookstack/.env
|
||||
sudo sed -i "s/DB_PASSWORD=.*/DB_PASSWORD=$DB_PASS/" /opt/bookstack/.env
|
||||
$STD composer install --no-dev --no-plugins --no-interaction
|
||||
$STD php artisan key:generate --no-interaction --force
|
||||
$STD php artisan migrate --no-interaction --force
|
||||
chown www-data:www-data -R /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads /opt/bookstack/storage
|
||||
chmod -R 755 /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads /opt/bookstack/storage
|
||||
chmod -R 775 /opt/bookstack/storage /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads
|
||||
chmod -R 640 /opt/bookstack/.env
|
||||
$STD a2enmod rewrite
|
||||
$STD a2enmod php8.2
|
||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
||||
msg_ok "Installed Bookstack"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/apache2/sites-available/bookstack.conf
|
||||
<VirtualHost *:80>
|
||||
ServerAdmin webmaster@localhost
|
||||
DocumentRoot /opt/bookstack/public/
|
||||
|
||||
<Directory /opt/bookstack/public/>
|
||||
Options -Indexes +FollowSymLinks
|
||||
AllowOverride None
|
||||
Require all granted
|
||||
<IfModule mod_rewrite.c>
|
||||
<IfModule mod_negotiation.c>
|
||||
Options -MultiViews -Indexes
|
||||
</IfModule>
|
||||
|
||||
RewriteEngine On
|
||||
|
||||
# Handle Authorization Header
|
||||
RewriteCond %{HTTP:Authorization} .
|
||||
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
|
||||
|
||||
# Redirect Trailing Slashes If Not A Folder...
|
||||
RewriteCond %{REQUEST_FILENAME} !-d
|
||||
RewriteCond %{REQUEST_URI} (.+)/$
|
||||
RewriteRule ^ %1 [L,R=301]
|
||||
|
||||
# Handle Front Controller...
|
||||
RewriteCond %{REQUEST_FILENAME} !-d
|
||||
RewriteCond %{REQUEST_FILENAME} !-f
|
||||
RewriteRule ^ index.php [L]
|
||||
</IfModule>
|
||||
</Directory>
|
||||
|
||||
ErrorLog /var/log/apache2/error.log
|
||||
CustomLog /var/log/apache2/access.log combined
|
||||
|
||||
</VirtualHost>
|
||||
EOF
|
||||
$STD a2ensite bookstack.conf
|
||||
$STD a2dissite 000-default.conf
|
||||
$STD systemctl reload apache2
|
||||
msg_ok "Created Services"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf /opt/v${RELEASE}.zip
|
||||
$STD apt-get autoremove
|
||||
$STD apt-get autoclean
|
||||
msg_ok "Cleaned"
|
||||
@@ -85,7 +85,6 @@ $STD npm prune production --prefix /opt/browserless
|
||||
msg_ok "Installed Browserless & Playwright"
|
||||
|
||||
msg_info "Installing Font Packages"
|
||||
DEBIAN_FRONTEND=noninteractive
|
||||
$STD apt-get install -y \
|
||||
fontconfig \
|
||||
libfontconfig1 \
|
||||
|
||||
50
install/checkmk-install.sh
Normal file
50
install/checkmk-install.sh
Normal file
@@ -0,0 +1,50 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
#Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: Michel Roegl-Brunner (michelroegl-brunner)
|
||||
# License: MIT
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
sudo \
|
||||
mc \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Install Checkmk"
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }' | grep -v "*-rc" | tail -n +2 | head -n 1)
|
||||
wget -q https://download.checkmk.com/checkmk/${RELEASE}/check-mk-raw-${RELEASE}_0.bookworm_arm64.deb -O /opt/checkmk.deb
|
||||
$STD apt-get install -y /opt/checkmk.deb
|
||||
echo "${RELEASE}" >"/opt/checkmk_version.txt"
|
||||
msg_ok "Installed Checkmk"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Creating Service"
|
||||
PASSWORD=$(omd create monitoring | grep "password:" | awk '{print $NF}')
|
||||
$STD omd start
|
||||
{
|
||||
echo "Application-Credentials"
|
||||
echo "Username: cmkadmin"
|
||||
echo "Password: $PASSWORD"
|
||||
} >> ~/checkmk.creds
|
||||
msg_ok "Created Service"
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf /opt/checkmk.deb
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
@@ -30,6 +30,41 @@ $STD apt-get update
|
||||
$STD apt-get install -y cloudflared
|
||||
msg_ok "Installed Cloudflared"
|
||||
|
||||
read -r -p "Would you like to configure cloudflared as a DNS-over-HTTPS (DoH) proxy? <y/N> " prompt
|
||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/usr/local/etc/cloudflared/config.yml
|
||||
proxy-dns: true
|
||||
proxy-dns-address: 0.0.0.0
|
||||
proxy-dns-port: 53
|
||||
proxy-dns-max-upstream-conns: 5
|
||||
proxy-dns-upstream:
|
||||
- https://1.1.1.1/dns-query
|
||||
- https://1.0.0.1/dns-query
|
||||
#- https://8.8.8.8/dns-query
|
||||
#- https://8.8.4.4/dns-query
|
||||
#- https://9.9.9.9/dns-query
|
||||
#- https://149.112.112.112/dns-query
|
||||
EOF
|
||||
cat <<EOF >/etc/systemd/system/cloudflared.service
|
||||
[Unit]
|
||||
Description=cloudflared DNS-over-HTTPS (DoH) proxy
|
||||
After=syslog.target network-online.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=/usr/local/bin/cloudflared --config /usr/local/etc/cloudflared/config.yml
|
||||
Restart=on-failure
|
||||
RestartSec=10
|
||||
KillMode=process
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now cloudflared.service
|
||||
msg_ok "Created Service"
|
||||
fi
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
|
||||
@@ -63,15 +63,7 @@ else
|
||||
msg_ok "Installed Portainer Agent $PORTAINER_AGENT_LATEST_VERSION"
|
||||
fi
|
||||
fi
|
||||
read -r -p "Would you like to add Docker Compose? <y/N> " prompt
|
||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||
msg_info "Installing Docker Compose $DOCKER_COMPOSE_LATEST_VERSION"
|
||||
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
|
||||
mkdir -p $DOCKER_CONFIG/cli-plugins
|
||||
curl -sSL https://github.com/docker/compose/releases/download/$DOCKER_COMPOSE_LATEST_VERSION/docker-compose-linux-aarch64 -o ~/.docker/cli-plugins/docker-compose
|
||||
chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
|
||||
msg_ok "Installed Docker Compose $DOCKER_COMPOSE_LATEST_VERSION"
|
||||
fi
|
||||
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
103
install/firefly-install.sh
Normal file
103
install/firefly-install.sh
Normal file
@@ -0,0 +1,103 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: quantumryuu
|
||||
# License: MIT
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
mc \
|
||||
sudo \
|
||||
wget \
|
||||
openssh-server
|
||||
curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg
|
||||
echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ bookworm main" >/etc/apt/sources.list.d/php.list
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y \
|
||||
apache2 \
|
||||
libapache2-mod-php8.4 \
|
||||
php8.4-{bcmath,cli,intl,curl,zip,gd,xml,mbstring,mysql} \
|
||||
mariadb-server \
|
||||
composer
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setting up database"
|
||||
DB_NAME=firefly
|
||||
DB_USER=firefly
|
||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||
MYSQL_VERSION=$(mysql --version | grep -oP 'Distrib \K[0-9]+\.[0-9]+\.[0-9]+')
|
||||
mysql -u root -e "CREATE DATABASE $DB_NAME;"
|
||||
mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED WITH mysql_native_password AS PASSWORD('$DB_PASS');"
|
||||
mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
|
||||
{
|
||||
echo "Firefly-Credentials"
|
||||
echo "Firefly Database User: $DB_USER"
|
||||
echo "Firefly Database Password: $DB_PASS"
|
||||
echo "Firefly Database Name: $DB_NAME"
|
||||
} >> ~/firefly.creds
|
||||
msg_ok "Set up database"
|
||||
|
||||
msg_info "Installing Firefly III (Patience)"
|
||||
RELEASE=$(curl -s https://api.github.com/repos/firefly-iii/firefly-iii/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
|
||||
cd /opt
|
||||
wget -q "https://github.com/firefly-iii/firefly-iii/releases/download/v${RELEASE}/FireflyIII-v${RELEASE}.tar.gz"
|
||||
mkdir -p /opt/firefly
|
||||
tar -xzf FireflyIII-v${RELEASE}.tar.gz -C /opt/firefly
|
||||
chown -R www-data:www-data /opt/firefly
|
||||
chmod -R 775 /opt/firefly/storage
|
||||
cd /opt/firefly
|
||||
cp .env.example .env
|
||||
sed -i "s/DB_HOST=.*/DB_HOST=localhost/" /opt/firefly/.env
|
||||
sed -i "s/DB_PASSWORD=.*/DB_PASSWORD=$DB_PASS/" /opt/firefly/.env
|
||||
echo "export COMPOSER_ALLOW_SUPERUSER=1" >> ~/.bashrc
|
||||
source ~/.bashrc
|
||||
$STD composer install --no-dev --no-plugins --no-interaction
|
||||
$STD php artisan firefly:upgrade-database
|
||||
$STD php artisan firefly:correct-database
|
||||
$STD php artisan firefly:report-integrity
|
||||
$STD php artisan firefly:laravel-passport-keys
|
||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
||||
msg_ok "Installed Firefly III"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/apache2/sites-available/firefly.conf
|
||||
<VirtualHost *:80>
|
||||
ServerAdmin webmaster@localhost
|
||||
DocumentRoot /opt/firefly/public/
|
||||
|
||||
<Directory /opt/firefly/public>
|
||||
Options FollowSymLinks
|
||||
AllowOverride All
|
||||
Require all granted
|
||||
</Directory>
|
||||
|
||||
ErrorLog /var/log/apache2/error.log
|
||||
CustomLog /var/log/apache2/access.log combined
|
||||
|
||||
</VirtualHost>
|
||||
EOF
|
||||
$STD a2enmod php8.4
|
||||
$STD a2enmod rewrite
|
||||
$STD a2ensite firefly.conf
|
||||
$STD a2dissite 000-default.conf
|
||||
$STD systemctl reload apache2
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf /opt/FireflyIII-v${RELEASE}.tar.gz
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
@@ -15,7 +15,7 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies (Patience)"
|
||||
$STD apt-get install -y {curl,sudo,mc,git,gpg,automake,build-essential,xz-utils,libtool,ccache,pkg-config,libgtk-3-dev,libavcodec-dev,libavformat-dev,libswscale-dev,libv4l-dev,libxvidcore-dev,libx264-dev,libjpeg-dev,libpng-dev,libtiff-dev,gfortran,openexr,libatlas-base-dev,libssl-dev,libtbb2,libtbb-dev,libdc1394-22-dev,libopenexr-dev,libgstreamer-plugins-base1.0-dev,libgstreamer1.0-dev,gcc,gfortran,libopenblas-dev,liblapack-dev,libusb-1.0-0-dev,jq,moreutils,wget,openssh-server}
|
||||
$STD apt-get install -y {curl,sudo,mc,git,gpg,automake,build-essential,xz-utils,libtool,ccache,pkg-config,libgtk-3-dev,libavcodec-dev,libavformat-dev,libswscale-dev,libv4l-dev,libxvidcore-dev,libx264-dev,libjpeg-dev,libpng-dev,libtiff-dev,gfortran,openexr,libatlas-base-dev,libssl-dev,libtbb2,libtbb-dev,libdc1394-22-dev,libopenexr-dev,libgstreamer-plugins-base1.0-dev,libgstreamer1.0-dev,gcc,gfortran,libopenblas-dev,liblapack-dev,libusb-1.0-0-dev,jq,moreutils,wget,openssh-server,ca-certificates}
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Python3 Dependencies"
|
||||
@@ -104,7 +104,7 @@ fi
|
||||
echo "tmpfs /tmp/cache tmpfs defaults 0 0" >> /etc/fstab
|
||||
msg_ok "Installed Frigate $RELEASE"
|
||||
|
||||
if grep -q -o -m1 'avx[^ ]*' /proc/cpuinfo; then
|
||||
if grep -q -o -m1 -E 'avx[^ ]*' /proc/cpuinfo; then
|
||||
msg_ok "AVX Support Detected"
|
||||
msg_info "Installing Openvino Object Detection Model (Resilience)"
|
||||
$STD pip install -r /opt/frigate/docker/main/requirements-ov.txt
|
||||
|
||||
83
install/glance-install.sh
Normal file
83
install/glance-install.sh
Normal file
@@ -0,0 +1,83 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: kristocopani
|
||||
# License: MIT
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
sudo \
|
||||
mc \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
|
||||
msg_info "Installing Glance"
|
||||
RELEASE=$(curl -s https://api.github.com/repos/glanceapp/glance/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
cd /opt
|
||||
wget -q https://github.com/glanceapp/glance/releases/download/v${RELEASE}/glance-linux-arm64.tar.gz
|
||||
mkdir -p /opt/glance
|
||||
tar -xzf glance-linux-arm64.tar.gz -C /opt/glance
|
||||
cat <<EOF >/opt/glance/glance.yml
|
||||
pages:
|
||||
- name: Startpage
|
||||
width: slim
|
||||
hide-desktop-navigation: true
|
||||
center-vertically: true
|
||||
columns:
|
||||
- size: full
|
||||
widgets:
|
||||
- type: search
|
||||
autofocus: true
|
||||
- type: bookmarks
|
||||
groups:
|
||||
- title: General
|
||||
links:
|
||||
- title: Google
|
||||
url: https://www.google.com/
|
||||
- title: Helper Scripts
|
||||
url: https://github.com/community-scripts/ProxmoxVE
|
||||
EOF
|
||||
|
||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
||||
msg_ok "Installed Glance"
|
||||
|
||||
msg_info "Creating Service"
|
||||
service_path="/etc/systemd/system/glance.service"
|
||||
echo "[Unit]
|
||||
Description=Glance Daemon
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=/opt/glance
|
||||
ExecStart=/opt/glance/glance --config /opt/glance/glance.yml
|
||||
TimeoutStopSec=20
|
||||
KillMode=process
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target" >$service_path
|
||||
|
||||
systemctl enable -q --now glance.service
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf /opt/glance-linux-arm64.tar.gz
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
153
install/glpi-install.sh
Normal file
153
install/glpi-install.sh
Normal file
@@ -0,0 +1,153 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: Nícolas Pastorello (opastorello)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
git \
|
||||
sudo \
|
||||
mc \
|
||||
apache2 \
|
||||
php8.2-{apcu,cli,common,curl,gd,imap,ldap,mysql,xmlrpc,xml,mbstring,bcmath,intl,zip,redis,bz2,soap} \
|
||||
php-cas \
|
||||
libapache2-mod-php \
|
||||
mariadb-server \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setting up database"
|
||||
DB_NAME=glpi_db
|
||||
DB_USER=glpi
|
||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql mysql
|
||||
mysql -u root -e "CREATE DATABASE $DB_NAME;"
|
||||
mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
|
||||
mysql -u root -e "GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'localhost';"
|
||||
mysql -u root -e "GRANT SELECT ON \`mysql\`.\`time_zone_name\` TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
|
||||
{
|
||||
echo "GLPI Database Credentials"
|
||||
echo "Database: $DB_NAME"
|
||||
echo "Username: $DB_USER"
|
||||
echo "Password: $DB_PASS"
|
||||
} >> ~/glpi_db.creds
|
||||
msg_ok "Set up database"
|
||||
|
||||
msg_info "Installing GLPi"
|
||||
cd /opt
|
||||
RELEASE=$(curl -s https://api.github.com/repos/glpi-project/glpi/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "([^"]+)".*/\1/')
|
||||
wget -q "https://github.com/glpi-project/glpi/releases/download/${RELEASE}/glpi-${RELEASE}.tgz"
|
||||
$STD tar -xzvf glpi-${RELEASE}.tgz
|
||||
cd /opt/glpi
|
||||
$STD php bin/console db:install --db-name=$DB_NAME --db-user=$DB_USER --db-password=$DB_PASS --no-interaction
|
||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||
msg_ok "Installed GLPi"
|
||||
|
||||
msg_info "Setting Downstream file"
|
||||
cat <<EOF > /opt/glpi/inc/downstream.php
|
||||
<?php
|
||||
define('GLPI_CONFIG_DIR', '/etc/glpi/');
|
||||
if (file_exists(GLPI_CONFIG_DIR . '/local_define.php')) {
|
||||
require_once GLPI_CONFIG_DIR . '/local_define.php';
|
||||
}
|
||||
EOF
|
||||
|
||||
mv /opt/glpi/config /etc/glpi
|
||||
mv /opt/glpi/files /var/lib/glpi
|
||||
mv /var/lib/glpi/_log /var/log/glpi
|
||||
|
||||
cat <<EOF > /etc/glpi/local_define.php
|
||||
<?php
|
||||
define('GLPI_VAR_DIR', '/var/lib/glpi');
|
||||
define('GLPI_DOC_DIR', GLPI_VAR_DIR);
|
||||
define('GLPI_CRON_DIR', GLPI_VAR_DIR . '/_cron');
|
||||
define('GLPI_DUMP_DIR', GLPI_VAR_DIR . '/_dumps');
|
||||
define('GLPI_GRAPH_DIR', GLPI_VAR_DIR . '/_graphs');
|
||||
define('GLPI_LOCK_DIR', GLPI_VAR_DIR . '/_lock');
|
||||
define('GLPI_PICTURE_DIR', GLPI_VAR_DIR . '/_pictures');
|
||||
define('GLPI_PLUGIN_DOC_DIR', GLPI_VAR_DIR . '/_plugins');
|
||||
define('GLPI_RSS_DIR', GLPI_VAR_DIR . '/_rss');
|
||||
define('GLPI_SESSION_DIR', GLPI_VAR_DIR . '/_sessions');
|
||||
define('GLPI_TMP_DIR', GLPI_VAR_DIR . '/_tmp');
|
||||
define('GLPI_UPLOAD_DIR', GLPI_VAR_DIR . '/_uploads');
|
||||
define('GLPI_CACHE_DIR', GLPI_VAR_DIR . '/_cache');
|
||||
define('GLPI_LOG_DIR', '/var/log/glpi');
|
||||
EOF
|
||||
msg_ok "Configured Downstream file"
|
||||
|
||||
msg_info "Setting Folder and File Permissions"
|
||||
chown root:root /opt/glpi/ -R
|
||||
chown www-data:www-data /etc/glpi -R
|
||||
chown www-data:www-data /var/lib/glpi -R
|
||||
chown www-data:www-data /var/log/glpi -R
|
||||
chown www-data:www-data /opt/glpi/marketplace -Rf
|
||||
find /opt/glpi/ -type f -exec chmod 0644 {} \;
|
||||
find /opt/glpi/ -type d -exec chmod 0755 {} \;
|
||||
find /etc/glpi -type f -exec chmod 0644 {} \;
|
||||
find /etc/glpi -type d -exec chmod 0755 {} \;
|
||||
find /var/lib/glpi -type f -exec chmod 0644 {} \;
|
||||
find /var/lib/glpi -type d -exec chmod 0755 {} \;
|
||||
find /var/log/glpi -type f -exec chmod 0644 {} \;
|
||||
find /var/log/glpi -type d -exec chmod 0755 {} \;
|
||||
msg_ok "Configured Folder and File Permissions"
|
||||
|
||||
msg_info "Setup Service"
|
||||
cat <<EOF >/etc/apache2/sites-available/glpi.conf
|
||||
<VirtualHost *:80>
|
||||
ServerName localhost
|
||||
DocumentRoot /opt/glpi/public
|
||||
|
||||
<Directory /opt/glpi/public>
|
||||
Require all granted
|
||||
RewriteEngine On
|
||||
RewriteCond %{HTTP:Authorization} ^(.+)$
|
||||
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
|
||||
RewriteCond %{REQUEST_FILENAME} !-f
|
||||
RewriteRule ^(.*)$ index.php [QSA,L]
|
||||
</Directory>
|
||||
|
||||
ErrorLog \${APACHE_LOG_DIR}/glpi_error.log
|
||||
CustomLog \${APACHE_LOG_DIR}/glpi_access.log combined
|
||||
</VirtualHost>
|
||||
EOF
|
||||
$STD a2dissite 000-default.conf
|
||||
$STD a2enmod rewrite
|
||||
$STD a2ensite glpi.conf
|
||||
msg_ok "Setup Service"
|
||||
|
||||
msg_info "Setup Cronjob"
|
||||
echo "* * * * * php /opt/glpi/front/cron.php" | crontab -
|
||||
msg_ok "Setup Cronjob"
|
||||
|
||||
msg_info "Update PHP Params"
|
||||
PHP_VERSION=$(ls /etc/php/ | grep -E '^[0-9]+\.[0-9]+$' | head -n 1)
|
||||
PHP_INI="/etc/php/$PHP_VERSION/apache2/php.ini"
|
||||
sed -i 's/^upload_max_filesize = .*/upload_max_filesize = 20M/' $PHP_INI
|
||||
sed -i 's/^post_max_size = .*/post_max_size = 20M/' $PHP_INI
|
||||
sed -i 's/^max_execution_time = .*/max_execution_time = 60/' $PHP_INI
|
||||
sed -i 's/^max_input_vars = .*/max_input_vars = 5000/' $PHP_INI
|
||||
sed -i 's/^memory_limit = .*/memory_limit = 256M/' $PHP_INI
|
||||
sed -i 's/^;\?\s*session.cookie_httponly\s*=.*/session.cookie_httponly = On/' $PHP_INI
|
||||
systemctl restart apache2
|
||||
msg_ok "Update PHP Params"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf /opt/glpi/install
|
||||
rm -rf /opt/glpi-${RELEASE}.tgz
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
85
install/grist-install.sh
Normal file
85
install/grist-install.sh
Normal file
@@ -0,0 +1,85 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: cfurrow
|
||||
# License: MIT
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/gristlabs/grist-core
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
sudo \
|
||||
make \
|
||||
gnupg \
|
||||
ca-certificates \
|
||||
mc \
|
||||
unzip \
|
||||
python3.11-venv \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Node.js"
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y nodejs
|
||||
$STD npm install -g yarn
|
||||
msg_ok "Installed Node.js"
|
||||
|
||||
msg_info "Installing Grist"
|
||||
RELEASE=$(curl -s https://api.github.com/repos/gristlabs/grist-core/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
export CYPRESS_INSTALL_BINARY=0
|
||||
export NODE_OPTIONS="--max-old-space-size=2048"
|
||||
cd /opt
|
||||
wget -q https://github.com/gristlabs/grist-core/archive/refs/tags/v${RELEASE}.zip
|
||||
unzip -q v$RELEASE.zip
|
||||
mv grist-core-${RELEASE} grist
|
||||
cd grist
|
||||
$STD yarn install
|
||||
$STD yarn run build:prod
|
||||
$STD yarn run install:python
|
||||
cat <<EOF >/opt/grist/.env
|
||||
NODE_ENV=production
|
||||
GRIST_HOST=0.0.0.0
|
||||
EOF
|
||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||
msg_ok "Installed Grist"
|
||||
|
||||
msg_info "Create Service"
|
||||
cat <<EOF >/etc/systemd/system/grist.service
|
||||
[Unit]
|
||||
Description=Grist
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=exec
|
||||
WorkingDirectory=/opt/grist
|
||||
ExecStart=/usr/bin/yarn run start:prod
|
||||
EnvironmentFile=-/opt/grist/.env
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
systemctl enable -q --now grist.service
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf /opt/v${RELEASE}.zip
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
183
install/hoarder-install.sh
Normal file
183
install/hoarder-install.sh
Normal file
@@ -0,0 +1,183 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: MickLesk (Canbiz) & vhsdream
|
||||
# License: MIT
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
g++ \
|
||||
build-essential \
|
||||
curl \
|
||||
git \
|
||||
sudo \
|
||||
gnupg \
|
||||
ca-certificates \
|
||||
chromium/stable \
|
||||
chromium-common/stable \
|
||||
mc \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Additional Tools"
|
||||
wget -q https://github.com/Y2Z/monolith/releases/latest/download/monolith-gnu-linux-x86_64 -O /usr/bin/monolith
|
||||
chmod +x /usr/bin/monolith
|
||||
wget -q https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_linux -O /usr/bin/yt-dlp
|
||||
chmod +x /usr/bin/yt-dlp
|
||||
msg_ok "Installed Additional Tools"
|
||||
|
||||
msg_info "Installing Meilisearch"
|
||||
cd /tmp
|
||||
wget -q https://github.com/meilisearch/meilisearch/releases/latest/download/meilisearch.deb
|
||||
$STD dpkg -i meilisearch.deb
|
||||
wget -q https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml -O /etc/meilisearch.toml
|
||||
MASTER_KEY=$(openssl rand -base64 12)
|
||||
sed -i \
|
||||
-e 's|^env =.*|env = "production"|' \
|
||||
-e "s|^# master_key =.*|master_key = \"$MASTER_KEY\"|" \
|
||||
-e 's|^db_path =.*|db_path = "/var/lib/meilisearch/data"|' \
|
||||
-e 's|^dump_dir =.*|dump_dir = "/var/lib/meilisearch/dumps"|' \
|
||||
-e 's|^snapshot_dir =.*|snapshot_dir = "/var/lib/meilisearch/snapshots"|' \
|
||||
-e 's|^# no_analytics = true|no_analytics = true|' \
|
||||
/etc/meilisearch.toml
|
||||
msg_ok "Installed Meilisearch"
|
||||
|
||||
msg_info "Installing Node.js"
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y nodejs
|
||||
msg_ok "Installed Node.js"
|
||||
|
||||
msg_info "Installing Hoarder"
|
||||
cd /opt
|
||||
RELEASE=$(curl -s https://api.github.com/repos/hoarder-app/hoarder/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
wget -q "https://github.com/hoarder-app/hoarder/archive/refs/tags/v${RELEASE}.zip"
|
||||
unzip -q v${RELEASE}.zip
|
||||
mv hoarder-${RELEASE} /opt/hoarder
|
||||
cd /opt/hoarder
|
||||
corepack enable
|
||||
export PUPPETEER_SKIP_DOWNLOAD="true"
|
||||
export NEXT_TELEMETRY_DISABLED=1
|
||||
export CI="true"
|
||||
cd /opt/hoarder/apps/web
|
||||
$STD pnpm install --frozen-lockfile
|
||||
$STD pnpm exec next build --experimental-build-mode compile
|
||||
cp -r /opt/hoarder/apps/web/.next/standalone/apps/web/server.js /opt/hoarder/apps/web
|
||||
cd /opt/hoarder/apps/workers
|
||||
$STD pnpm install --frozen-lockfile
|
||||
|
||||
export DATA_DIR=/opt/hoarder_data
|
||||
HOARDER_SECRET=$(openssl rand -base64 36 | cut -c1-24)
|
||||
cat <<EOF >/opt/hoarder/.env
|
||||
SERVER_VERSION=$RELEASE
|
||||
NEXTAUTH_SECRET="$HOARDER_SECRET"
|
||||
NEXTAUTH_URL="http://localhost:3000"
|
||||
DATA_DIR="$DATA_DIR"
|
||||
MEILI_ADDR="http://127.0.0.1:7700"
|
||||
MEILI_MASTER_KEY="$MASTER_KEY"
|
||||
BROWSER_WEB_URL="http://127.0.0.1:9222"
|
||||
|
||||
# If you're planning to use OpenAI for tagging. Uncomment the following line:
|
||||
# OPENAI_API_KEY="<API_KEY>"
|
||||
|
||||
# If you're planning to use ollama for tagging, uncomment the following lines:
|
||||
# OLLAMA_BASE_URL="<OLLAMA_ADDR>"
|
||||
|
||||
# You can change the models used by uncommenting the following lines, and changing them according to your needs:
|
||||
# INFERENCE_TEXT_MODEL="gpt-4o-mini"
|
||||
# INFERENCE_IMAGE_MODEL="gpt-4o-mini"
|
||||
EOF
|
||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
||||
msg_ok "Installed Hoarder"
|
||||
|
||||
msg_info "Running Database Migration"
|
||||
mkdir -p ${DATA_DIR}
|
||||
cd /opt/hoarder/packages/db
|
||||
$STD pnpm migrate
|
||||
msg_ok "Database Migration Completed"
|
||||
|
||||
msg_info "Creating Services"
|
||||
cat <<EOF >/etc/systemd/system/meilisearch.service
|
||||
[Unit]
|
||||
Description=Meilisearch
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
ExecStart=/usr/bin/meilisearch --config-file-path /etc/meilisearch.toml
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
cat <<EOF >/etc/systemd/system/hoarder-web.service
|
||||
[Unit]
|
||||
Description=Hoarder Web
|
||||
Wants=network.target hoarder-workers.service
|
||||
After=network.target hoarder-workers.service
|
||||
|
||||
[Service]
|
||||
ExecStart=pnpm start
|
||||
WorkingDirectory=/opt/hoarder/apps/web
|
||||
EnvironmentFile=/opt/hoarder/.env
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
cat <<EOF >/etc/systemd/system/hoarder-browser.service
|
||||
[Unit]
|
||||
Description=Hoarder Headless Browser
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
User=root
|
||||
ExecStart=/usr/bin/chromium --headless --no-sandbox --disable-gpu --disable-dev-shm-usage --remote-debugging-address=127.0.0.1 --remote-debugging-port=9222 --hide-scrollbars
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
cat <<EOF >/etc/systemd/system/hoarder-workers.service
|
||||
[Unit]
|
||||
Description=Hoarder Workers
|
||||
Wants=network.target hoarder-browser.service meilisearch.service
|
||||
After=network.target hoarder-browser.service meilisearch.service
|
||||
|
||||
[Service]
|
||||
ExecStart=pnpm start:prod
|
||||
WorkingDirectory=/opt/hoarder/apps/workers
|
||||
EnvironmentFile=/opt/hoarder/.env
|
||||
Restart=always
|
||||
TimeoutStopSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
systemctl -q enable --now meilisearch.service hoarder-browser.service hoarder-workers.service hoarder-web.service
|
||||
msg_ok "Created Services"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf /tmp/meilisearch.deb
|
||||
rm -f /opt/v${RELEASE}.zip
|
||||
$STD apt-get autoremove -y
|
||||
$STD apt-get autoclean -y
|
||||
msg_ok "Cleaned"
|
||||
@@ -1,9 +1,11 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2024 tteck
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# Co-Author: MickLesk (Canbiz)
|
||||
# License: MIT
|
||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/ajnart/homarr
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
@@ -14,14 +16,17 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y curl
|
||||
$STD apt-get install -y sudo
|
||||
$STD apt-get install -y mc
|
||||
$STD apt-get install -y git
|
||||
$STD apt-get install -y ca-certificates
|
||||
$STD apt-get install -y gnupg
|
||||
$STD apt-get install -y wget
|
||||
$STD apt-get install -y openssh-server
|
||||
$STD apt-get install -y \
|
||||
sudo \
|
||||
mc \
|
||||
curl \
|
||||
ca-certificates \
|
||||
gnupg \
|
||||
make \
|
||||
g++ \
|
||||
build-essential \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setting up Node.js Repository"
|
||||
@@ -33,12 +38,15 @@ msg_ok "Set up Node.js Repository"
|
||||
msg_info "Installing Node.js/Yarn"
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y nodejs
|
||||
$STD npm install -g npm@latest
|
||||
$STD npm install -g yarn
|
||||
msg_ok "Installed Node.js/Yarn"
|
||||
|
||||
msg_info "Installing Homarr (Patience)"
|
||||
$STD git clone -b dev https://github.com/ajnart/homarr.git /opt/homarr
|
||||
RELEASE=$(curl -s https://api.github.com/repos/ajnart/homarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
wget -q "https://github.com/ajnart/homarr/archive/refs/tags/v${RELEASE}.zip"
|
||||
unzip -q v${RELEASE}.zip
|
||||
rm -rf v${RELEASE}.zip
|
||||
mv homarr-${RELEASE} /opt/homarr
|
||||
cat <<EOF >/opt/homarr/.env
|
||||
DATABASE_URL="file:./database/db.sqlite"
|
||||
NEXTAUTH_URL="http://localhost:3000"
|
||||
@@ -50,6 +58,7 @@ cd /opt/homarr
|
||||
$STD yarn install
|
||||
$STD yarn build
|
||||
$STD yarn db:migrate
|
||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
||||
msg_ok "Installed Homarr"
|
||||
|
||||
msg_info "Creating Service"
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2024 tteck
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT
|
||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
@@ -14,9 +14,52 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies (Patience)"
|
||||
$STD apt-get install -y git curl sudo mc bluez libffi-dev libssl-dev libjpeg-dev zlib1g-dev autoconf build-essential libopenjp2-7 libturbojpeg0-dev ffmpeg liblapack3 liblapack-dev dbus-broker libpcap-dev libavdevice-dev libavformat-dev libavcodec-dev libavutil-dev libavfilter-dev libmariadb-dev-compat libatlas-base-dev pip python3.12-dev wget openssh-server
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
git \
|
||||
sudo \
|
||||
mc \
|
||||
gnupg \
|
||||
ca-certificates \
|
||||
bluez \
|
||||
libtiff6 \
|
||||
tzdata \
|
||||
libffi-dev \
|
||||
libssl-dev \
|
||||
libjpeg-dev \
|
||||
zlib1g-dev \
|
||||
autoconf \
|
||||
build-essential \
|
||||
libopenjp2-7 \
|
||||
libturbojpeg0-dev \
|
||||
ffmpeg \
|
||||
liblapack3 \
|
||||
liblapack-dev \
|
||||
dbus-broker \
|
||||
libpcap-dev \
|
||||
libavdevice-dev \
|
||||
libavformat-dev \
|
||||
libavcodec-dev \
|
||||
libavutil-dev \
|
||||
libavfilter-dev \
|
||||
libmariadb-dev-compat \
|
||||
libatlas-base-dev \
|
||||
software-properties-common \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setup Python3"
|
||||
$STD add-apt-repository -y ppa:deadsnakes/ppa
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y \
|
||||
python3.13-* \
|
||||
python3-pip \
|
||||
python3.13-dev \
|
||||
python3.13-venv
|
||||
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
|
||||
msg_ok "Setup Python3"
|
||||
|
||||
msg_info "Installing UV"
|
||||
$STD pip install uv
|
||||
msg_ok "Installed UV"
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2024 tteck
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck
|
||||
# Co-Author: MickLesk (Canbiz)
|
||||
# License: MIT
|
||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/sysadminsmedia/homebox
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
@@ -28,6 +28,12 @@ msg_info "Installing Homebox"
|
||||
RELEASE=$(curl -s https://api.github.com/repos/sysadminsmedia/homebox/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
wget -qO- https://github.com/sysadminsmedia/homebox/releases/download/${RELEASE}/homebox_Linux_arm64.tar.gz | tar -xzf - -C /opt
|
||||
chmod +x /opt/homebox
|
||||
cat <<EOF >/opt/.env
|
||||
# For possible environment variables check here: https://homebox.software/en/configure-homebox
|
||||
HBOX_MODE=production
|
||||
HBOX_WEB_PORT=7745
|
||||
HBOX_WEB_HOST=0.0.0.0
|
||||
EOF
|
||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
||||
msg_ok "Installed Homebox"
|
||||
|
||||
@@ -40,6 +46,7 @@ After=network.target
|
||||
[Service]
|
||||
WorkingDirectory=/opt
|
||||
ExecStart=/opt/homebox
|
||||
EnvironmentFile=/opt/.env
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2024 tteck
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT
|
||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
@@ -17,11 +17,7 @@ msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y curl
|
||||
$STD apt-get install -y sudo
|
||||
$STD apt-get install -y mc
|
||||
$STD apt-get install -y make
|
||||
$STD apt-get install -y g++
|
||||
$STD apt-get install -y gcc
|
||||
$STD apt-get install -y ca-certificates
|
||||
$STD apt-get install -y gnupg
|
||||
$STD apt-get install -y wget
|
||||
$STD apt-get install -y gpg
|
||||
$STD apt-get install -y openssh-server
|
||||
@@ -50,6 +46,8 @@ rm -rf homepage-${RELEASE}
|
||||
cd /opt/homepage
|
||||
cp /opt/homepage/src/skeleton/* /opt/homepage/config
|
||||
$STD pnpm install
|
||||
export NEXT_PUBLIC_VERSION="v$RELEASE"
|
||||
export NEXT_PUBLIC_REVISION="source"
|
||||
$STD pnpm build
|
||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||
msg_ok "Installed Homepage v${RELEASE}"
|
||||
|
||||
56
install/inspircd-install.sh
Normal file
56
install/inspircd-install.sh
Normal file
@@ -0,0 +1,56 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: kristocopani
|
||||
# License: MIT
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
mc \
|
||||
sudo \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
|
||||
msg_info "Installing InspIRCd"
|
||||
RELEASE=$(curl -s https://api.github.com/repos/inspircd/inspircd/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
cd /opt
|
||||
wget -q https://github.com/inspircd/inspircd/releases/download/v${RELEASE}/inspircd_${RELEASE}.deb12u1_amd64.deb
|
||||
$STD apt-get install "./inspircd_${RELEASE}.deb12u1_amd64.deb" -y &>/dev/null
|
||||
cat <<EOF >/etc/inspircd/inspircd.conf
|
||||
<define name="networkDomain" value="helper-scripts.com">
|
||||
<define name="networkName" value="Proxmox VE Helper-Scripts">
|
||||
|
||||
<server
|
||||
name="irc.&networkDomain;"
|
||||
description="&networkName; IRC server"
|
||||
network="&networkName;">
|
||||
<admin
|
||||
name="Admin"
|
||||
description="Supreme Overlord"
|
||||
email="irc@&networkDomain;">
|
||||
<bind address="" port="6667" type="clients">
|
||||
EOF
|
||||
|
||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
||||
msg_ok "Installed InspIRCd"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf /opt/inspircd_${RELEASE}.deb12u1_amd64.deb
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
38
install/jenkins-install.sh
Normal file
38
install/jenkins-install.sh
Normal file
@@ -0,0 +1,38 @@
|
||||
#!/usr/bin/env bash
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: kristocopani
|
||||
# License: MIT
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
mc \
|
||||
sudo \
|
||||
openjdk-17-jre \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setup Jenkins"
|
||||
wget -qO /usr/share/keyrings/jenkins-keyring.asc https://pkg.jenkins.io/debian/jenkins.io-2023.key
|
||||
echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc]" https://pkg.jenkins.io/debian binary/ >/etc/apt/sources.list.d/jenkins.list
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y jenkins
|
||||
msg_ok "Setup Jenkins"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
109
install/kimai-install.sh
Normal file
109
install/kimai-install.sh
Normal file
@@ -0,0 +1,109 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: MickLesk
|
||||
# License: MIT
|
||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
apt-transport-https \
|
||||
sudo \
|
||||
mc \
|
||||
curl \
|
||||
apache2 \
|
||||
git \
|
||||
expect \
|
||||
composer \
|
||||
mariadb-server \
|
||||
libapache2-mod-php \
|
||||
php8.2-{mbstring,gd,intl,pdo,mysql,tokenizer,zip,xml} \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setting up database"
|
||||
DB_NAME=kimai_db
|
||||
DB_USER=kimai
|
||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||
MYSQL_VERSION=$(mysql --version | grep -oP 'Distrib \K[0-9]+\.[0-9]+\.[0-9]+')
|
||||
mysql -u root -e "CREATE DATABASE $DB_NAME;"
|
||||
mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED WITH mysql_native_password AS PASSWORD('$DB_PASS');"
|
||||
mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
|
||||
{
|
||||
echo "Kimai-Credentials"
|
||||
echo "Kimai Database User: $DB_USER"
|
||||
echo "Kimai Database Password: $DB_PASS"
|
||||
echo "Kimai Database Name: $DB_NAME"
|
||||
} >> ~/kimai.creds
|
||||
msg_ok "Set up database"
|
||||
|
||||
msg_info "Installing Kimai (Patience)"
|
||||
RELEASE=$(curl -s https://api.github.com/repos/kimai/kimai/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
wget -q "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip"
|
||||
unzip -q ${RELEASE}.zip
|
||||
mv kimai-${RELEASE} /opt/kimai
|
||||
cd /opt/kimai
|
||||
echo "export COMPOSER_ALLOW_SUPERUSER=1" >> ~/.bashrc
|
||||
source ~/.bashrc
|
||||
$STD composer install --no-dev --optimize-autoloader --no-interaction
|
||||
cp .env.dist .env
|
||||
sed -i "/^DATABASE_URL=/c\DATABASE_URL=mysql://$DB_USER:$DB_PASS@127.0.0.1:3306/$DB_NAME?charset=utf8mb4&serverVersion=$MYSQL_VERSION" /opt/kimai/.env
|
||||
$STD bin/console kimai:install -n
|
||||
chown -R :www-data /opt/*
|
||||
chmod -R g+r /opt/*
|
||||
chmod -R g+rw /opt/*
|
||||
sudo chown -R www-data:www-data /opt/*
|
||||
sudo chmod -R 755 /opt/*
|
||||
$STD expect <<EOF
|
||||
set timeout -1
|
||||
log_user 0
|
||||
|
||||
spawn bin/console kimai:user:create admin admin@helper-scripts.com ROLE_SUPER_ADMIN
|
||||
|
||||
expect "Please enter the password:"
|
||||
send "helper-scripts.com\r"
|
||||
|
||||
expect eof
|
||||
EOF
|
||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
||||
msg_ok "Installed Kimai"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/apache2/sites-available/kimai.conf
|
||||
<VirtualHost *:80>
|
||||
ServerAdmin webmaster@localhost
|
||||
DocumentRoot /opt/kimai/public/
|
||||
|
||||
<Directory /opt/kimai/public>
|
||||
Options FollowSymLinks
|
||||
AllowOverride All
|
||||
Require all granted
|
||||
</Directory>
|
||||
|
||||
ErrorLog /var/log/apache2/error.log
|
||||
CustomLog /var/log/apache2/access.log combined
|
||||
|
||||
</VirtualHost>
|
||||
EOF
|
||||
$STD a2ensite kimai.conf
|
||||
$STD a2dissite 000-default.conf
|
||||
$STD systemctl reload apache2
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf ${RELEASE}.zip
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
60
install/komga-install.sh
Normal file
60
install/komga-install.sh
Normal file
@@ -0,0 +1,60 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: madelyn (DysfunctionalProgramming)
|
||||
# License: MIT
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
mc \
|
||||
sudo \
|
||||
openjdk-17-jre \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Komga"
|
||||
RELEASE=$(curl -s https://api.github.com/repos/gotson/komga/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
wget -q https://github.com/gotson/komga/releases/download/${RELEASE}/komga-${RELEASE}.jar
|
||||
mkdir -p /opt/komga
|
||||
mv -f komga-${RELEASE}.jar /opt/komga/komga.jar
|
||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
||||
msg_ok "Installed Komga"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/komga.service
|
||||
[Unit]
|
||||
Description=Komga
|
||||
After=syslog.target network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=/opt/komga/
|
||||
ExecStart=/usr/bin/java -jar -Xmx2g komga.jar
|
||||
TimeoutStopSec=20
|
||||
KillMode=process
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable --now -q komga
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
97
install/komodo-install.sh
Normal file
97
install/komodo-install.sh
Normal file
@@ -0,0 +1,97 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: MickLesk
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://komo.do/
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
sudo \
|
||||
mc \
|
||||
ca-certificates \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setup Docker Repository"
|
||||
install -m 0755 -d /etc/apt/keyrings
|
||||
curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
|
||||
chmod a+r /etc/apt/keyrings/docker.asc
|
||||
echo \
|
||||
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
|
||||
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
|
||||
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||
$STD apt-get update
|
||||
msg_ok "Setup Docker Repository"
|
||||
|
||||
msg_info "Installing Docker"
|
||||
$STD apt-get install -y \
|
||||
docker-ce \
|
||||
docker-ce-cli \
|
||||
containerd.io \
|
||||
docker-buildx-plugin \
|
||||
docker-compose-plugin
|
||||
msg_ok "Installed Docker"
|
||||
|
||||
echo "Choose the database for Komodo installation:"
|
||||
echo "1) MongoDB (recommended)"
|
||||
echo "2) SQLite"
|
||||
echo "3) PostgreSQL"
|
||||
read -rp "Enter your choice (default: 1): " DB_CHOICE
|
||||
DB_CHOICE=${DB_CHOICE:-1}
|
||||
|
||||
case $DB_CHOICE in
|
||||
1)
|
||||
DB_COMPOSE_FILE="mongo.compose.yaml"
|
||||
;;
|
||||
2)
|
||||
DB_COMPOSE_FILE="sqlite.compose.yaml"
|
||||
;;
|
||||
3)
|
||||
DB_COMPOSE_FILE="postgres.compose.yaml"
|
||||
;;
|
||||
*)
|
||||
echo "Invalid choice. Defaulting to MongoDB."
|
||||
DB_COMPOSE_FILE="mongo.compose.yaml"
|
||||
;;
|
||||
esac
|
||||
mkdir -p /opt/komodo
|
||||
cd /opt/komodo
|
||||
wget -q "https://raw.githubusercontent.com/mbecker20/komodo/main/compose/$DB_COMPOSE_FILE"
|
||||
|
||||
|
||||
msg_info "Setup Komodo Environment"
|
||||
wget -q -O /opt/komodo/compose.env https://raw.githubusercontent.com/mbecker20/komodo/main/compose/compose.env
|
||||
DB_PASSWORD=$(openssl rand -base64 16 | tr -d '/+=')
|
||||
PASSKEY=$(openssl rand -base64 24 | tr -d '/+=')
|
||||
WEBHOOK_SECRET=$(openssl rand -base64 24 | tr -d '/+=')
|
||||
JWT_SECRET=$(openssl rand -base64 24 | tr -d '/+=')
|
||||
|
||||
sed -i "s/^DB_USERNAME=.*/DB_USERNAME=komodo_admin/" /opt/komodo/compose.env
|
||||
sed -i "s/^DB_PASSWORD=.*/DB_PASSWORD=${DB_PASSWORD}/" /opt/komodo/compose.env
|
||||
sed -i "s/^PASSKEY=.*/PASSKEY=${PASSKEY}/" /opt/komodo/compose.env
|
||||
sed -i "s/^KOMODO_WEBHOOK_SECRET=.*/KOMODO_WEBHOOK_SECRET=${WEBHOOK_SECRET}/" /opt/komodo/compose.env
|
||||
sed -i "s/^KOMODO_JWT_SECRET=.*/KOMODO_JWT_SECRET=${JWT_SECRET}/" /opt/komodo/compose.env
|
||||
msg_ok "Setup Komodo Environment"
|
||||
|
||||
msg_info "Initialize Komodo"
|
||||
$STD docker compose -p komodo -f /opt/komodo/$DB_COMPOSE_FILE --env-file /opt/komodo/compose.env up -d
|
||||
msg_ok "Initialized Komodo"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
@@ -22,7 +22,7 @@ $STD apt-get install -y wget
|
||||
$STD apt-get install -y openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Kubo"
|
||||
msg_info "Installing IPFS"
|
||||
RELEASE=$(wget -q https://github.com/ipfs/kubo/releases/latest -O - | grep "title>Release" | cut -d " " -f 4)
|
||||
$STD wget -q "https://github.com/ipfs/kubo/releases/download/${RELEASE}/kubo_${RELEASE}_linux-arm64.tar.gz"
|
||||
tar -xzf "kubo_${RELEASE}_linux-arm64.tar.gz" -C /usr/local
|
||||
@@ -35,7 +35,7 @@ ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin "[\"http://${LXCI
|
||||
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "POST"]'
|
||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
||||
$STD rm "kubo_${RELEASE}_linux-arm64.tar.gz"
|
||||
msg_ok "Installed Kubo"
|
||||
msg_ok "Installed IPFS"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/ipfs.service
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2024 tteck
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck
|
||||
# Co-Author: MountyMapleSyrup (MountyMapleSyrup)
|
||||
# License: MIT
|
||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
@@ -15,17 +15,23 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y curl
|
||||
$STD apt-get install -y sudo
|
||||
$STD apt-get install -y mc
|
||||
$STD apt-get install -y git
|
||||
$STD apt-get install -y wget
|
||||
$STD apt-get install -y openssh-server
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
sudo \
|
||||
mc \
|
||||
git \
|
||||
libpng-dev \
|
||||
libjpeg-dev \
|
||||
libtiff-dev \
|
||||
imagemagick \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Python3 Dependencies"
|
||||
$STD apt-get install -y pip
|
||||
$STD apt-get install -y python3-irc
|
||||
$STD apt-get install -y \
|
||||
pip \
|
||||
python3-irc
|
||||
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
|
||||
$STD pip install jaraco.stream
|
||||
$STD pip install python-Levenshtein
|
||||
@@ -34,6 +40,8 @@ msg_ok "Installed Python3 Dependencies"
|
||||
|
||||
msg_info "Installing LazyLibrarian"
|
||||
$STD git clone https://gitlab.com/LazyLibrarian/LazyLibrarian /opt/LazyLibrarian
|
||||
cd /opt/LazyLibrarian
|
||||
$STD pip install .
|
||||
msg_ok "Installed LazyLibrarian"
|
||||
|
||||
msg_info "Creating Service"
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2024 tteck
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# Co-Author: MickLesk (Canbiz)
|
||||
# License: MIT
|
||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
@@ -14,14 +15,16 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y curl
|
||||
$STD apt-get install -y sudo
|
||||
$STD apt-get install -y mc
|
||||
$STD apt-get install -y git
|
||||
$STD apt-get install -y gpg
|
||||
$STD apt-get install -y postgresql
|
||||
$STD apt-get install -y wget
|
||||
$STD apt-get install -y openssh-server
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
sudo \
|
||||
mc \
|
||||
make \
|
||||
postgresql \
|
||||
cargo \
|
||||
gnupg \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setting up Node.js Repository"
|
||||
@@ -36,22 +39,28 @@ $STD apt-get install -y nodejs
|
||||
$STD npm install -g yarn
|
||||
msg_ok "Installed Node.js/Yarn"
|
||||
|
||||
msg_info "Clone Linkwarden Repository"
|
||||
$STD git clone https://github.com/linkwarden/linkwarden.git /opt/linkwarden
|
||||
cd /opt/linkwarden
|
||||
msg_ok "Cloned Linkwarden Repository"
|
||||
msg_info "Installing Monolith"
|
||||
$STD cargo install monolith
|
||||
export PATH=~/.cargo/bin:$PATH
|
||||
msg_ok "Installed Monolith"
|
||||
|
||||
msg_info "Setting up PostgreSQL DB"
|
||||
DB_NAME=linkwardendb
|
||||
DB_USER=linkwarden
|
||||
DB_PASS="$(openssl rand -base64 18 | tr -d '/' | cut -c1-13)"
|
||||
SECRET_KEY="$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32)"
|
||||
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
|
||||
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMPLATE template0;"
|
||||
|
||||
echo "" >>~/linkwarden.creds
|
||||
echo -e "Linkwarden Database User: \e[32m$DB_USER\e[0m" >>~/linkwarden.creds
|
||||
echo -e "Linkwarden Database Password: \e[32m$DB_PASS\e[0m" >>~/linkwarden.creds
|
||||
echo -e "Linkwarden Database Name: \e[32m$DB_NAME\e[0m" >>~/linkwarden.creds
|
||||
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
|
||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
|
||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
|
||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';"
|
||||
{
|
||||
echo "Linkwarden-Credentials"
|
||||
echo "Linkwarden Database User: $DB_USER"
|
||||
echo "Linkwarden Database Password: $DB_PASS"
|
||||
echo "Linkwarden Database Name: $DB_NAME"
|
||||
echo "Linkwarden Secret: $SECRET_KEY"
|
||||
} >> ~/linkwarden.creds
|
||||
msg_ok "Set up PostgreSQL DB"
|
||||
|
||||
read -r -p "Would you like to add Adminer? <y/N> " prompt
|
||||
@@ -68,17 +77,28 @@ if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||
echo -e "Adminer Username: \e[32m$DB_USER\e[0m" >>~/linkwarden.creds
|
||||
echo -e "Adminer Password: \e[32m$DB_PASS\e[0m" >>~/linkwarden.creds
|
||||
echo -e "Adminer Database: \e[32m$DB_NAME\e[0m" >>~/linkwarden.creds
|
||||
{
|
||||
echo ""
|
||||
echo "Adminer-Credentials"
|
||||
echo "Adminer WebUI: $IP/adminer/"
|
||||
echo "Adminer Database User: $DB_USER"
|
||||
echo "Adminer Database Password: $DB_PASS"
|
||||
echo "Adminer Database Name: $DB_NAME"
|
||||
} >> ~/linkwarden.creds
|
||||
msg_ok "Installed Adminer"
|
||||
fi
|
||||
|
||||
msg_info "Installing Linkwarden (Patience)"
|
||||
cd /opt
|
||||
RELEASE=$(curl -s https://api.github.com/repos/linkwarden/linkwarden/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||
wget -q "https://github.com/linkwarden/linkwarden/archive/refs/tags/${RELEASE}.zip"
|
||||
unzip -q ${RELEASE}.zip
|
||||
mv linkwarden-${RELEASE:1} /opt/linkwarden
|
||||
cd /opt/linkwarden
|
||||
$STD yarn
|
||||
$STD npx playwright install-deps
|
||||
$STD yarn playwright install
|
||||
IP=$(hostname -I | awk '{print $1}')
|
||||
SECRET_KEY="$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32)"
|
||||
env_path="/opt/linkwarden/.env"
|
||||
echo "
|
||||
NEXTAUTH_SECRET=${SECRET_KEY}
|
||||
@@ -87,6 +107,7 @@ DATABASE_URL=postgresql://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME}
|
||||
" >$env_path
|
||||
$STD yarn build
|
||||
$STD yarn prisma migrate deploy
|
||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||
msg_ok "Installed Linkwarden"
|
||||
|
||||
msg_info "Creating Service"
|
||||
@@ -97,6 +118,7 @@ After=network.target
|
||||
|
||||
[Service]
|
||||
Type=exec
|
||||
Environment=PATH=$PATH
|
||||
WorkingDirectory=/opt/linkwarden
|
||||
ExecStart=/usr/bin/yarn start
|
||||
|
||||
@@ -110,6 +132,7 @@ motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf /opt/${RELEASE}.zip
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
|
||||
82
install/listmonk-install.sh
Normal file
82
install/listmonk-install.sh
Normal file
@@ -0,0 +1,82 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: bvdberg01
|
||||
# License: MIT
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
sudo \
|
||||
mc \
|
||||
postgresql \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setting up PostgreSQL"
|
||||
DB_NAME=listmonk
|
||||
DB_USER=listmonk
|
||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
|
||||
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
|
||||
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMPLATE template0;"
|
||||
{
|
||||
echo "listmonk-Credentials"
|
||||
echo -e "listmonk Database User: \e[32m$DB_USER\e[0m"
|
||||
echo -e "listmonk Database Password: \e[32m$DB_PASS\e[0m"
|
||||
echo -e "listmonk Database Name: \e[32m$DB_NAME\e[0m"
|
||||
} >> ~/listmonk.creds
|
||||
msg_ok "Set up PostgreSQL"
|
||||
|
||||
msg_info "Installing listmonk"
|
||||
cd /opt
|
||||
mkdir /opt/listmonk
|
||||
mkdir /opt/listmonk/uploads
|
||||
RELEASE=$(curl -s https://api.github.com/repos/knadh/listmonk/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
wget -q "https://github.com/knadh/listmonk/releases/download/v${RELEASE}/listmonk_${RELEASE}_linux_arm64.tar.gz"
|
||||
tar -xzf "listmonk_${RELEASE}_linux_arm64.tar.gz" -C /opt/listmonk
|
||||
|
||||
$STD /opt/listmonk/listmonk --new-config --config /opt/listmonk/config.toml
|
||||
sed -i -e 's/address = "localhost:9000"/address = "0.0.0.0:9000"/' -e 's/^password = ".*"/password = "'"$DB_PASS"'"/' /opt/listmonk/config.toml
|
||||
$STD /opt/listmonk/listmonk --install --yes --config /opt/listmonk/config.toml
|
||||
|
||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||
msg_ok "Installed listmonk"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/listmonk.service
|
||||
[Unit]
|
||||
Description=Listmonk Service
|
||||
Wants=network.target
|
||||
After=postgresql.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=/opt/listmonk/listmonk --config /opt/listmonk/config.toml
|
||||
Restart=always
|
||||
RestartSec=3
|
||||
WorkingDirectory=/opt/listmonk
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now listmonk
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf "/opt/listmonk_${RELEASE}_linux_arm64.tar.gz"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
74
install/lubelogger-install.sh
Normal file
74
install/lubelogger-install.sh
Normal file
@@ -0,0 +1,74 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: kristocopani
|
||||
# License: MIT
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
sudo \
|
||||
wget \
|
||||
mc \
|
||||
zip \
|
||||
jq \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
|
||||
msg_info "Installing LubeLogger"
|
||||
cd /opt
|
||||
mkdir -p /opt/lubelogger
|
||||
RELEASE=$(curl -s https://api.github.com/repos/hargata/lubelog/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
RELEASE_TRIMMED=$(echo "${RELEASE}" | tr -d ".")
|
||||
cd /opt/lubelogger
|
||||
wget -q https://github.com/hargata/lubelog/releases/download/v${RELEASE}/LubeLogger_v${RELEASE_TRIMMED}_linux_x64.zip
|
||||
unzip -q LubeLogger_v${RELEASE_TRIMMED}_linux_x64.zip
|
||||
chmod 700 /opt/lubelogger/CarCareTracker
|
||||
cp /opt/lubelogger/appsettings.json /opt/lubelogger/appsettings_bak.json
|
||||
jq '.Kestrel = {"Endpoints": {"Http": {"Url": "http://0.0.0.0:5000"}}}' /opt/lubelogger/appsettings_bak.json > /opt/lubelogger/appsettings.json
|
||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
||||
msg_ok "Installed LubeLogger"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/lubelogger.service
|
||||
[Unit]
|
||||
Description=LubeLogger Daemon
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
User=root
|
||||
|
||||
Type=simple
|
||||
WorkingDirectory=/opt/lubelogger
|
||||
ExecStart=/opt/lubelogger/CarCareTracker
|
||||
TimeoutStopSec=20
|
||||
KillMode=process
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
systemctl enable --now -q lubelogger.service
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf /opt/lubelogger/appsettings_bak.json
|
||||
rm -rf /opt/lubelogger/LubeLogger_v${RELEASE_TRIMMED}_linux_x64.zip
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
@@ -1,9 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2024 tteck
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT
|
||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
@@ -29,14 +29,22 @@ $STD apt-get install -y wget
|
||||
$STD apt-get install -y openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing MongoDB"
|
||||
wget -qO- https://www.mongodb.org/static/pgp/server-7.0.asc | gpg --dearmor >/usr/share/keyrings/mongodb-server-7.0.gpg
|
||||
echo "deb [ arch=arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu $(grep '^VERSION_CODENAME=' /etc/os-release | cut -d'=' -f2)/mongodb-org/7.0 multiverse"
|
||||
# Abfrage für die MongoDB-Version
|
||||
read -p "Do you want to install MongoDB 8.0 instead of 7.0? [y/N]: " install_mongodb_8
|
||||
if [[ "$install_mongodb_8" =~ ^[Yy]$ ]]; then
|
||||
MONGODB_VERSION="8.0"
|
||||
else
|
||||
MONGODB_VERSION="7.0"
|
||||
fi
|
||||
|
||||
msg_info "Installing MongoDB $MONGODB_VERSION"
|
||||
wget -qO- https://www.mongodb.org/static/pgp/server-${MONGODB_VERSION}.asc | gpg --dearmor >/usr/share/keyrings/mongodb-server-${MONGODB_VERSION}.gpg
|
||||
echo "deb [signed-by=/usr/share/keyrings/mongodb-server-${MONGODB_VERSION}.gpg] http://repo.mongodb.org/apt/debian $(grep '^VERSION_CODENAME=' /etc/os-release | cut -d'=' -f2)/mongodb-org/${MONGODB_VERSION} main" >/etc/apt/sources.list.d/mongodb-org-${MONGODB_VERSION}.list
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y mongodb-org
|
||||
sed -i 's/bindIp: 127.0.0.1/bindIp: 0.0.0.0/' /etc/mongod.conf
|
||||
systemctl enable -q --now mongod.service
|
||||
msg_ok "Installed MongoDB"
|
||||
msg_ok "Installed MongoDB $MONGODB_VERSION"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2024 tteck
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT
|
||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
@@ -23,6 +23,11 @@ $STD apt-get install -y openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Mosquitto MQTT Broker"
|
||||
source /etc/os-release
|
||||
curl -fsSL http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key >/usr/share/keyrings/mosquitto-repo.gpg.key
|
||||
chmod go+r /usr/share/keyrings/mosquitto-repo.gpg.key
|
||||
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/mosquitto-repo.gpg.key] http://repo.mosquitto.org/debian ${VERSION_CODENAME} main" >/etc/apt/sources.list.d/mosquitto.list
|
||||
$STD apt-get update
|
||||
$STD apt-get -y install mosquitto
|
||||
$STD apt-get -y install mosquitto-clients
|
||||
cat <<EOF >/etc/mosquitto/conf.d/default.conf
|
||||
|
||||
70
install/mylar3-install.sh
Normal file
70
install/mylar3-install.sh
Normal file
@@ -0,0 +1,70 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: davalanche
|
||||
# License: MIT
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/mylar3/mylar3
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
sudo \
|
||||
mc \
|
||||
jq \
|
||||
wget \
|
||||
openssh-server
|
||||
echo "deb http://deb.debian.org/debian bookworm non-free non-free-firmware" > /etc/apt/sources.list.d/non-free.list
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y unrar
|
||||
rm /etc/apt/sources.list.d/non-free.list
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Updating Python3"
|
||||
$STD apt-get install -y python3-pip
|
||||
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
|
||||
$STD pip install -U --no-cache-dir pip
|
||||
msg_ok "Updated Python3"
|
||||
|
||||
msg_info "Installing ${APPLICATION}"
|
||||
mkdir -p /opt/mylar3
|
||||
mkdir -p /opt/mylar3-data
|
||||
RELEASE=$(curl -s https://api.github.com/repos/mylar3/mylar3/releases/latest | jq -r '.tag_name')
|
||||
wget -qO- https://github.com/mylar3/mylar3/archive/refs/tags/${RELEASE}.tar.gz | tar -xz --strip-components=1 -C /opt/mylar3
|
||||
$STD pip install --no-cache-dir -r /opt/mylar3/requirements.txt
|
||||
echo "${RELEASE}" > /opt/${APPLICATION}_version.txt
|
||||
msg_ok "Installed ${APPLICATION}"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/mylar3.service
|
||||
[Unit]
|
||||
Description=Mylar3 Service
|
||||
After=network-online.target
|
||||
|
||||
[Service]
|
||||
ExecStart=/usr/bin/python3 /opt/mylar3/Mylar.py --daemon --nolaunch --datadir=/opt/mylar3-data
|
||||
GuessMainPID=no
|
||||
Type=forking
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now mylar3.service
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
@@ -1,10 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2024 tteck
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck
|
||||
# Co-Author: MickLesk (Canbiz)
|
||||
# License: MIT
|
||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://www.mysql.com/products/community | https://www.phpmyadmin.net
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
@@ -26,9 +26,17 @@ $STD apt-get install -y \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
RELEASE_REPO="mysql-8.0"
|
||||
RELEASE_AUTH="mysql_native_password"
|
||||
read -r -p "Would you like to install the MySQL 8.4 LTS release instead of MySQL 8.0 (bug fix track; EOL April-2026)? <y/N> " prompt
|
||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||
RELEASE_REPO="mysql-8.4-lts"
|
||||
RELEASE_AUTH="caching_sha2_password"
|
||||
fi
|
||||
|
||||
msg_info "Installing MySQL"
|
||||
curl -fsSL https://repo.mysql.com/RPM-GPG-KEY-mysql-2023 | gpg --dearmor -o /usr/share/keyrings/mysql.gpg
|
||||
echo "deb [signed-by=/usr/share/keyrings/mysql.gpg] http://repo.mysql.com/apt/debian $(lsb_release -sc) mysql-8.0" >/etc/apt/sources.list.d/mysql.list
|
||||
echo "deb [signed-by=/usr/share/keyrings/mysql.gpg] http://repo.mysql.com/apt/debian $(lsb_release -sc) ${RELEASE_REPO}" >/etc/apt/sources.list.d/mysql.list
|
||||
$STD apt-get update
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
$STD apt-get install -y \
|
||||
@@ -38,7 +46,7 @@ msg_ok "Installed MySQL"
|
||||
|
||||
msg_info "Configure MySQL Server"
|
||||
ADMIN_PASS="$(openssl rand -base64 18 | cut -c1-13)"
|
||||
$STD mysql -uroot -p"$ADMIN_PASS" -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '$ADMIN_PASS'; FLUSH PRIVILEGES;"
|
||||
$STD mysql -uroot -p"$ADMIN_PASS" -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH $RELEASE_AUTH BY '$ADMIN_PASS'; FLUSH PRIVILEGES;"
|
||||
echo "" >~/mysql.creds
|
||||
echo -e "MySQL user: root" >>~/mysql.creds
|
||||
echo -e "MySQL password: $ADMIN_PASS" >>~/mysql.creds
|
||||
|
||||
@@ -30,6 +30,7 @@ install -d -o root -g root /var/lib/navidrome
|
||||
wget -q https://github.com/navidrome/navidrome/releases/download/v${RELEASE}/navidrome_${RELEASE}_linux_arm64.tar.gz -O Navidrome.tar.gz
|
||||
$STD tar -xvzf Navidrome.tar.gz -C /opt/navidrome/
|
||||
chown -R root:root /opt/navidrome
|
||||
chmod +x /opt/navidrome/navidrome
|
||||
mkdir -p /music
|
||||
cat <<EOF >/var/lib/navidrome/navidrome.toml
|
||||
MusicFolder = '/music'
|
||||
|
||||
121
install/netbox-install.sh
Normal file
121
install/netbox-install.sh
Normal file
@@ -0,0 +1,121 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: bvdberg01
|
||||
# License: MIT
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
sudo \
|
||||
mc \
|
||||
apache2 \
|
||||
redis-server \
|
||||
postgresql \
|
||||
python3 \
|
||||
python3-pip \
|
||||
python3-venv \
|
||||
python3-dev \
|
||||
build-essential \
|
||||
libxml2-dev \
|
||||
libxslt1-dev \
|
||||
libffi-dev \
|
||||
libpq-dev \
|
||||
libssl-dev \
|
||||
zlib1g-dev \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setting up PostgreSQL"
|
||||
DB_NAME=netbox
|
||||
DB_USER=netbox
|
||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
|
||||
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
|
||||
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMPLATE template0;"
|
||||
{
|
||||
echo "Netbox-Credentials"
|
||||
echo -e "Netbox Database User: \e[32m$DB_USER\e[0m"
|
||||
echo -e "Netbox Database Password: \e[32m$DB_PASS\e[0m"
|
||||
echo -e "Netbox Database Name: \e[32m$DB_NAME\e[0m"
|
||||
} >> ~/netbox.creds
|
||||
msg_ok "Set up PostgreSQL"
|
||||
|
||||
msg_info "Installing NetBox (Patience)"
|
||||
cd /opt
|
||||
RELEASE=$(curl -s https://api.github.com/repos/netbox-community/netbox/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
wget -q "https://github.com/netbox-community/netbox/archive/refs/tags/v${RELEASE}.zip"
|
||||
unzip -q "v${RELEASE}.zip"
|
||||
mv /opt/netbox-${RELEASE}/ /opt/netbox
|
||||
|
||||
$STD adduser --system --group netbox
|
||||
chown --recursive netbox /opt/netbox/netbox/media/
|
||||
chown --recursive netbox /opt/netbox/netbox/reports/
|
||||
chown --recursive netbox /opt/netbox/netbox/scripts/
|
||||
|
||||
mv /opt/netbox/netbox/netbox/configuration_example.py /opt/netbox/netbox/netbox/configuration.py
|
||||
|
||||
SECRET_KEY=$(python3 /opt/netbox/netbox/generate_secret_key.py)
|
||||
ESCAPED_SECRET_KEY=$(printf '%s\n' "$SECRET_KEY" | sed 's/[&/\]/\\&/g')
|
||||
|
||||
sed -i 's/ALLOWED_HOSTS = \[\]/ALLOWED_HOSTS = ["*"]/' /opt/netbox/netbox/netbox/configuration.py
|
||||
sed -i "s|SECRET_KEY = ''|SECRET_KEY = '${ESCAPED_SECRET_KEY}'|" /opt/netbox/netbox/netbox/configuration.py
|
||||
sed -i "/DATABASE = {/,/}/s/'USER': '[^']*'/'USER': '$DB_USER'/" /opt/netbox/netbox/netbox/configuration.py
|
||||
sed -i "/DATABASE = {/,/}/s/'PASSWORD': '[^']*'/'PASSWORD': '$DB_PASS'/" /opt/netbox/netbox/netbox/configuration.py
|
||||
|
||||
$STD /opt/netbox/upgrade.sh
|
||||
ln -s /opt/netbox/contrib/netbox-housekeeping.sh /etc/cron.daily/netbox-housekeeping
|
||||
|
||||
mv /opt/netbox/contrib/apache.conf /etc/apache2/sites-available/netbox.conf
|
||||
$STD openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/netbox.key -out /etc/ssl/certs/netbox.crt -subj "/C=US/O=NetBox/OU=Certificate/CN=localhost"
|
||||
$STD a2enmod ssl proxy proxy_http headers rewrite
|
||||
$STD a2ensite netbox
|
||||
systemctl restart apache2
|
||||
|
||||
mv /opt/netbox/contrib/gunicorn.py /opt/netbox/gunicorn.py
|
||||
mv /opt/netbox/contrib/*.service /etc/systemd/system/
|
||||
systemctl daemon-reload
|
||||
systemctl enable -q --now netbox netbox-rq
|
||||
|
||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||
echo -e "Netbox Secret: \e[32m$SECRET_KEY\e[0m" >> ~/netbox.creds
|
||||
msg_ok "Installed NetBox"
|
||||
|
||||
msg_info "Setting up Django Admin"
|
||||
DJANGO_USER=Admin
|
||||
DJANGO_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
|
||||
|
||||
source /opt/netbox/venv/bin/activate
|
||||
$STD python3 /opt/netbox/netbox/manage.py shell << EOF
|
||||
from django.contrib.auth import get_user_model
|
||||
UserModel = get_user_model()
|
||||
user = UserModel.objects.create_user('$DJANGO_USER', password='$DJANGO_PASS')
|
||||
user.is_superuser = True
|
||||
user.is_staff = True
|
||||
user.save()
|
||||
EOF
|
||||
{
|
||||
echo ""
|
||||
echo "Netbox-Django-Credentials"
|
||||
echo -e "Django User: \e[32m$DJANGO_USER\e[0m"
|
||||
echo -e "Django Password: \e[32m$DJANGO_PASS\e[0m"
|
||||
} >> ~/netbox.creds
|
||||
msg_ok "Setup Django Admin"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm "/opt/v${RELEASE}.zip"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
@@ -1,9 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2024 tteck
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT
|
||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
@@ -22,17 +22,7 @@ $STD apt-get install -y openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing NextCloudPi (Patience)"
|
||||
$STD apt-get install -y systemd-resolved
|
||||
systemctl enable -q --now systemd-resolved
|
||||
cat <<'EOF' >/etc/systemd/resolved.conf
|
||||
[Resolve]
|
||||
DNS=8.8.8.8
|
||||
FallbackDNS=8.8.4.4
|
||||
EOF
|
||||
systemctl restart systemd-resolved
|
||||
$STD bash <(curl -fsSL https://raw.githubusercontent.com/nextcloud/nextcloudpi/master/install.sh)
|
||||
systemctl disable -q --now systemd-resolved
|
||||
$STD apt-get remove -y systemd-resolved
|
||||
msg_ok "Installed NextCloudPi"
|
||||
|
||||
motd_ssh
|
||||
|
||||
48
install/nextpvr-install.sh
Normal file
48
install/nextpvr-install.sh
Normal file
@@ -0,0 +1,48 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 communtiy-scripts ORG
|
||||
# Author: MickLesk (Canbiz)
|
||||
# License: MIT
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies (Patience)"
|
||||
$STD apt-get install -y \
|
||||
mediainfo \
|
||||
libmediainfo-dev \
|
||||
libc6 \
|
||||
curl \
|
||||
sudo \
|
||||
libgdiplus \
|
||||
acl \
|
||||
dvb-tools \
|
||||
libdvbv5-0 \
|
||||
dtv-scan-tables \
|
||||
libc6-dev \
|
||||
ffmpeg \
|
||||
mc \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setup NextPVR (Patience)"
|
||||
cd /opt
|
||||
wget -q https://nextpvr.com/nextpvr-helper.deb
|
||||
$STD dpkg -i nextpvr-helper.deb
|
||||
msg_ok "Installed NextPVR"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf /opt/nextpvr-helper.deb
|
||||
$STD apt-get autoremove
|
||||
$STD apt-get autoclean
|
||||
msg_ok "Cleaned"
|
||||
@@ -1,10 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2024 tteck
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck
|
||||
# Co-Author: havardthom
|
||||
# License: MIT
|
||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
@@ -20,6 +20,8 @@ $STD apt-get install -y sudo
|
||||
$STD apt-get install -y mc
|
||||
$STD apt-get install -y gpg
|
||||
$STD apt-get install -y par2
|
||||
$STD apt-get install -y wget
|
||||
$STD apt-get install -y openssh-server
|
||||
cat <<EOF >/etc/apt/sources.list.d/non-free.list
|
||||
deb http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware
|
||||
EOF
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2024 tteck
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck
|
||||
# Co-Author: havardthom
|
||||
# License: MIT
|
||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
@@ -26,10 +26,10 @@ $STD apt-get install -y cmake
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Golang"
|
||||
$STD wget https://golang.org/dl/go1.23.2.linux-amd64.tar.gz
|
||||
$STD tar -xzf go1.23.2.linux-amd64.tar.gz -C /usr/local
|
||||
$STD wget https://golang.org/dl/go1.23.2.linux-arm64.tar.gz
|
||||
$STD tar -xzf go1.23.2.linux-arm64.tar.gz -C /usr/local
|
||||
$STD ln -s /usr/local/go/bin/go /usr/local/bin/go
|
||||
rm -rf go1.23.2.linux-amd64.tar.gz
|
||||
rm -rf go1.23.2.linux-arm64.tar.gz
|
||||
msg_ok "Installed Golang"
|
||||
|
||||
msg_info "Setting up Intel® Repositories"
|
||||
@@ -42,7 +42,7 @@ $STD apt-get update
|
||||
msg_ok "Set up Intel® Repositories"
|
||||
|
||||
msg_info "Setting Up Hardware Acceleration"
|
||||
$STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools,intel-level-zero-gpu,level-zero,level-zero-dev}
|
||||
$STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,vainfo,level-zero,level-zero-dev}
|
||||
if [[ "$CTTYPE" == "0" ]]; then
|
||||
chgrp video /dev/dri
|
||||
chmod 755 /dev/dri
|
||||
@@ -52,10 +52,6 @@ if [[ "$CTTYPE" == "0" ]]; then
|
||||
fi
|
||||
msg_ok "Set Up Hardware Acceleration"
|
||||
|
||||
msg_info "Installing Intel® oneAPI Base Toolkit (Patience)"
|
||||
$STD apt-get install -y --no-install-recommends intel-basekit-2024.1
|
||||
msg_ok "Installed Intel® oneAPI Base Toolkit"
|
||||
|
||||
msg_info "Installing Ollama (Patience)"
|
||||
$STD git clone https://github.com/ollama/ollama.git /opt/ollama
|
||||
cd /opt/ollama
|
||||
|
||||
47
install/onedev-install.sh
Normal file
47
install/onedev-install.sh
Normal file
@@ -0,0 +1,47 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: kristocopani
|
||||
# License: MIT
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
mc \
|
||||
sudo \
|
||||
default-jdk \
|
||||
git \
|
||||
git-lfs \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
|
||||
msg_info "Installing OneDev"
|
||||
cd /opt
|
||||
wget -q https://code.onedev.io/onedev/server/~site/onedev-latest.tar.gz
|
||||
tar -xzf onedev-latest.tar.gz
|
||||
mv /opt/onedev-latest /opt/onedev
|
||||
$STD /opt/onedev/bin/server.sh install
|
||||
systemctl start onedev
|
||||
RELEASE=$(cat /opt/onedev/release.properties | grep "version" | cut -d'=' -f2)
|
||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
||||
msg_ok "Installed OneDev"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf /opt/onedev-latest.tar.gz
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
@@ -1,10 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2024 tteck
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck
|
||||
# Co-Author: havardthom
|
||||
# License: MIT
|
||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
@@ -20,12 +20,15 @@ $STD apt-get install -y sudo
|
||||
$STD apt-get install -y mc
|
||||
$STD apt-get install -y gpg
|
||||
$STD apt-get install -y git
|
||||
$STD apt-get install -y wget
|
||||
$STD apt-get install -y openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Python3 Dependencies"
|
||||
$STD apt-get install -y --no-install-recommends \
|
||||
python3 \
|
||||
python3-pip
|
||||
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
|
||||
msg_ok "Installed Python3 Dependencies"
|
||||
|
||||
msg_info "Setting up Node.js Repository"
|
||||
|
||||
114
install/part-db-install.sh
Normal file
114
install/part-db-install.sh
Normal file
@@ -0,0 +1,114 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: bvdberg01
|
||||
# License: MIT
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
sudo \
|
||||
mc \
|
||||
zip \
|
||||
ca-certificates \
|
||||
software-properties-common \
|
||||
apt-transport-https \
|
||||
lsb-release \
|
||||
php-{opcache,curl,gd,mbstring,xml,bcmath,intl,zip,xsl,pgsql} \
|
||||
libapache2-mod-php \
|
||||
composer \
|
||||
postgresql \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setting up PostgreSQL"
|
||||
DB_NAME=partdb
|
||||
DB_USER=partdb
|
||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
|
||||
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
|
||||
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMPLATE template0;"
|
||||
{
|
||||
echo "Part-DB Credentials"
|
||||
echo "Part-DB Database User: $DB_USER"
|
||||
echo "Part-DB Database Password: $DB_PASS"
|
||||
echo "Part-DB Database Name: $DB_NAME"
|
||||
} >> ~/partdb.creds
|
||||
msg_ok "Set up PostgreSQL"
|
||||
|
||||
msg_info "Setting up Node.js/Yarn"
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y nodejs
|
||||
$STD npm install -g npm@latest
|
||||
$STD npm install -g yarn
|
||||
msg_ok "Installed Node.js/Yarn"
|
||||
|
||||
msg_info "Installing Part-DB (Patience)"
|
||||
cd /opt
|
||||
RELEASE=$(curl -s https://api.github.com/repos/Part-DB/Part-DB-server/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
wget -q "https://github.com/Part-DB/Part-DB-server/archive/refs/tags/v${RELEASE}.zip"
|
||||
unzip -q "v${RELEASE}.zip"
|
||||
mv /opt/Part-DB-server-${RELEASE}/ /opt/partdb
|
||||
|
||||
cd /opt/partdb/
|
||||
cp .env .env.local
|
||||
sed -i "s|DATABASE_URL=\"sqlite:///%kernel.project_dir%/var/app.db\"|DATABASE_URL=\"postgresql://${DB_USER}:${DB_PASS}@127.0.0.1:5432/${DB_NAME}?serverVersion=12.19&charset=utf8\"|" .env.local
|
||||
|
||||
export COMPOSER_ALLOW_SUPERUSER=1
|
||||
$STD composer install --no-dev -o --no-interaction
|
||||
$STD yarn install
|
||||
$STD yarn build
|
||||
$STD php bin/console cache:clear
|
||||
php bin/console doctrine:migrations:migrate -n > ~/database-migration-output
|
||||
chown -R www-data:www-data /opt/partdb
|
||||
ADMIN_PASS=$(grep -oP 'The initial password for the "admin" user is: \K\w+' ~/database-migration-output)
|
||||
{
|
||||
echo ""
|
||||
echo "Part-DB Admin User: admin"
|
||||
echo "Part-DB Admin Password: $ADMIN_PASS"
|
||||
} >> ~/partdb.creds
|
||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||
msg_ok "Installed Part-DB"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/apache2/sites-available/partdb.conf
|
||||
<VirtualHost *:80>
|
||||
ServerName partdb
|
||||
DocumentRoot /opt/partdb/public
|
||||
<Directory /opt/partdb/public>
|
||||
Options FollowSymLinks
|
||||
AllowOverride All
|
||||
Require all granted
|
||||
</Directory>
|
||||
|
||||
ErrorLog /var/log/apache2/partdb_error.log
|
||||
CustomLog /var/log/apache2/partdb_access.log combined
|
||||
</VirtualHost>
|
||||
EOF
|
||||
$STD a2ensite partdb
|
||||
$STD a2enmod rewrite
|
||||
$STD a2dissite 000-default.conf
|
||||
$STD systemctl reload apache2
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf ~/database-migration-output
|
||||
rm -rf "/opt/v${RELEASE}.zip"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
77
install/pf2etools-install.sh
Normal file
77
install/pf2etools-install.sh
Normal file
@@ -0,0 +1,77 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: TheRealVira
|
||||
# License: MIT
|
||||
# Source: https://pf2etools.com/
|
||||
|
||||
# Import Functions und Setup
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
mc \
|
||||
sudo \
|
||||
apache2 \
|
||||
gpg \
|
||||
ca-certificates \
|
||||
git \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setting up Node.js Repository"
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
msg_ok "Set up Node.js Repository"
|
||||
|
||||
msg_info "Installing Node.js"
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y nodejs
|
||||
msg_ok "Installed Node.js"
|
||||
|
||||
# Setup App
|
||||
msg_info "Setup Pf2eTools"
|
||||
cd /opt
|
||||
RELEASE=$(curl -s https://api.github.com/repos/Pf2eToolsOrg/Pf2eTools/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
wget -q "https://github.com/Pf2eToolsOrg/Pf2eTools/archive/refs/tags/${RELEASE}.zip"
|
||||
unzip -q "${RELEASE}.zip"
|
||||
mv "Pf2eTools-${RELEASE:1}" /opt/Pf2eTools
|
||||
cd /opt/Pf2eTools
|
||||
$STD npm install
|
||||
$STD npm run build
|
||||
cd ~
|
||||
echo "${RELEASE}" >/opt/Pf2eTools_version.txt
|
||||
msg_ok "Set up Pf2eTools"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >> /etc/apache2/apache2.conf
|
||||
<Location /server-status>
|
||||
SetHandler server-status
|
||||
Order deny,allow
|
||||
Allow from all
|
||||
</Location>
|
||||
EOF
|
||||
rm -rf /var/www/html
|
||||
ln -s "/opt/Pf2eTools" /var/www/html
|
||||
chown -R www-data: "/opt/Pf2eTools"
|
||||
chmod -R 755 "/opt/Pf2eTools"
|
||||
msg_ok "Created Service"
|
||||
|
||||
# Cleanup
|
||||
msg_info "Cleaning up"
|
||||
rm -rf /opt/${RELEASE}.zip
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
@@ -1,9 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2024 tteck
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT
|
||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
@@ -82,8 +82,6 @@ done
|
||||
sed -i 's#PIALERT_PATH\s*=\s*'\''/home/pi/pialert'\''#PIALERT_PATH = '\''/opt/pialert'\''#' /opt/pialert/config/pialert.conf
|
||||
sed -i 's/$HOME/\/opt/g' /opt/pialert/install/pialert.cron
|
||||
crontab /opt/pialert/install/pialert.cron
|
||||
echo "bash -c \"\$(wget -qLO - https://github.com/leiweibau/Pi.Alert/raw/main/install/pialert_update.sh)\" -s --lxc" >/usr/bin/update
|
||||
chmod +x /usr/bin/update
|
||||
echo "python3 /opt/pialert/back/pialert.py 1" >/usr/bin/scan
|
||||
chmod +x /usr/bin/scan
|
||||
echo "/opt/pialert/back/pialert-cli set_permissions --lxc" >/usr/bin/permissions
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2024 tteck
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT
|
||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
@@ -46,6 +46,7 @@ msg_ok "Installed Pi-hole"
|
||||
|
||||
read -r -p "Would you like to add Unbound? <y/N> " prompt
|
||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||
read -r -p "Unbound is configured as a recursive DNS server by default, would you like it to be configured as a forwarding DNS server (using DNS-over-TLS (DoT)) instead? <y/N> " prompt
|
||||
msg_info "Installing Unbound"
|
||||
$STD apt-get install -y unbound
|
||||
cat <<EOF >/etc/unbound/unbound.conf.d/pi-hole.conf
|
||||
@@ -75,7 +76,6 @@ server:
|
||||
infra-cache-slabs: 8
|
||||
key-cache-slabs: 8
|
||||
serve-expired: yes
|
||||
root-hints: /var/lib/unbound/root.hints
|
||||
serve-expired-ttl: 3600
|
||||
edns-buffer-size: 1232
|
||||
prefetch: yes
|
||||
@@ -96,8 +96,34 @@ EOF
|
||||
cat <<EOF >/etc/dnsmasq.d/99-edns.conf
|
||||
edns-packet-max=1232
|
||||
EOF
|
||||
wget -qO /var/lib/unbound/root.hints https://www.internic.net/domain/named.root
|
||||
sed -i -e 's/PIHOLE_DNS_1=8.8.8.8/PIHOLE_DNS_1=127.0.0.1#5335/' -e 's/PIHOLE_DNS_2=8.8.4.4/#PIHOLE_DNS_2=8.8.4.4/' /etc/pihole/setupVars.conf
|
||||
|
||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||
cat <<EOF >>/etc/unbound/unbound.conf.d/pi-hole.conf
|
||||
tls-cert-bundle: "/etc/ssl/certs/ca-certificates.crt"
|
||||
forward-zone:
|
||||
name: "."
|
||||
forward-tls-upstream: yes
|
||||
forward-first: no
|
||||
|
||||
forward-addr: 8.8.8.8@853#dns.google
|
||||
forward-addr: 8.8.4.4@853#dns.google
|
||||
forward-addr: 2001:4860:4860::8888@853#dns.google
|
||||
forward-addr: 2001:4860:4860::8844@853#dns.google
|
||||
|
||||
#forward-addr: 1.1.1.1@853#cloudflare-dns.com
|
||||
#forward-addr: 1.0.0.1@853#cloudflare-dns.com
|
||||
#forward-addr: 2606:4700:4700::1111@853#cloudflare-dns.com
|
||||
#forward-addr: 2606:4700:4700::1001@853#cloudflare-dns.com
|
||||
|
||||
#forward-addr: 9.9.9.9@853#dns.quad9.net
|
||||
#forward-addr: 149.112.112.112@853#dns.quad9.net
|
||||
#forward-addr: 2620:fe::fe@853#dns.quad9.net
|
||||
#forward-addr: 2620:fe::9@853#dns.quad9.net
|
||||
EOF
|
||||
fi
|
||||
|
||||
sed -i -e 's/PIHOLE_DNS_1=8.8.8.8/PIHOLE_DNS_1=127.0.0.1#5335/' -e '/PIHOLE_DNS_2=8.8.4.4/d' /etc/pihole/setupVars.conf
|
||||
sed -i -e 's/server=8.8.8.8/server=127.0.0.1#5335/' -e '/server=8.8.4.4/d' /etc/dnsmasq.d/01-pihole.conf
|
||||
systemctl enable -q --now unbound
|
||||
systemctl restart pihole-FTL.service
|
||||
msg_ok "Installed Unbound"
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2024 tteck
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT
|
||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
@@ -37,7 +37,7 @@ cat <<EOF >/etc/postgresql/17/main/pg_hba.conf
|
||||
local all postgres peer
|
||||
# TYPE DATABASE USER ADDRESS METHOD
|
||||
# "local" is for Unix domain socket connections only
|
||||
local all all peer
|
||||
local all all md5
|
||||
# IPv4 local connections:
|
||||
host all all 127.0.0.1/32 scram-sha-256
|
||||
host all all 0.0.0.0/24 md5
|
||||
|
||||
41
install/proxmox-datacenter-manager-install.sh
Normal file
41
install/proxmox-datacenter-manager-install.sh
Normal file
@@ -0,0 +1,41 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: CrazyWolf13
|
||||
# License: MIT
|
||||
# Source: Proxmox Server Solution GmbH
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
sudo \
|
||||
gpg \
|
||||
mc \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Proxmox Datacenter Manager"
|
||||
curl -fsSL https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg | gpg --dearmor -o /etc/apt/keyrings/proxmox-release-bookworm.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/proxmox-release-bookworm.gpg] http://download.proxmox.com/debian/pdm bookworm pdm-test " >/etc/apt/sources.list.d/proxmox-release-bookworm.list
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y \
|
||||
proxmox-datacenter-manager \
|
||||
proxmox-datacenter-manager-ui
|
||||
msg_ok "Installed Proxmox Datacenter Manager"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
@@ -39,7 +39,7 @@ cat <<EOF >/etc/systemd/system/qbittorrent-nox.service
|
||||
Description=qBittorrent client
|
||||
After=network.target
|
||||
[Service]
|
||||
ExecStart=/usr/bin/qbittorrent-nox --webui-port=8090
|
||||
ExecStart=/usr/bin/qbittorrent-nox
|
||||
Restart=always
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
||||
39
install/recyclarr-install.sh
Normal file
39
install/recyclarr-install.sh
Normal file
@@ -0,0 +1,39 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: MrYadro
|
||||
# License: MIT
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y curl
|
||||
$STD apt-get install -y git
|
||||
$STD apt-get install -y sudo
|
||||
$STD apt-get install -y mc
|
||||
$STD apt-get install -y wget
|
||||
$STD apt-get install -y openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Recyclarr"
|
||||
wget -q $(curl -s https://api.github.com/repos/recyclarr/recyclarr/releases/latest | grep download | grep linux-arm64 | cut -d\" -f4)
|
||||
tar -C /usr/local/bin -xJf recyclarr*.tar.xz
|
||||
mkdir -p /root/.config/recyclarr
|
||||
recyclarr config create
|
||||
msg_ok "Installed Recyclarr"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf recyclarr*.tar.xz
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
@@ -1,9 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2024 tteck
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT
|
||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
@@ -33,7 +33,6 @@ msg_info "Updating Python3"
|
||||
$STD apt-get install -y \
|
||||
python3-dev \
|
||||
python3-pip
|
||||
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
|
||||
$STD apt-get install -y python3-setuptools
|
||||
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
|
||||
msg_ok "Updated Python3"
|
||||
|
||||
89
install/semaphore-install.sh
Normal file
89
install/semaphore-install.sh
Normal file
@@ -0,0 +1,89 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: kristocopani
|
||||
# License: MIT
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
mc \
|
||||
git \
|
||||
gpg \
|
||||
sudo \
|
||||
wget \
|
||||
openssh-server
|
||||
|
||||
wget -qO- "https://keyserver.ubuntu.com/pks/lookup?fingerprint=on&op=get&search=0x6125E2A8C77F2818FB7BD15B93C4A3FD7BB9C367" | gpg --dearmour >/usr/share/keyrings/ansible-archive-keyring.gpg
|
||||
cat <<EOF >/etc/apt/sources.list.d/ansible.list
|
||||
deb [signed-by=/usr/share/keyrings/ansible-archive-keyring.gpg] http://ppa.launchpad.net/ansible/ansible/ubuntu jammy main
|
||||
EOF
|
||||
$STD apt update
|
||||
$STD apt install -y ansible
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setup Semaphore"
|
||||
RELEASE=$(curl -s https://api.github.com/repos/semaphoreui/semaphore/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
mkdir -p /opt/semaphore
|
||||
cd /opt/semaphore
|
||||
wget -q https://github.com/semaphoreui/semaphore/releases/download/v${RELEASE}/semaphore_${RELEASE}_linux_arm64.deb
|
||||
$STD dpkg -i semaphore_${RELEASE}_linux_arm64.deb
|
||||
|
||||
SEM_HASH=$(openssl rand -base64 32)
|
||||
SEM_ENCRYPTION=$(openssl rand -base64 32)
|
||||
SEM_KEY=$(openssl rand -base64 32)
|
||||
SEM_PW=$(openssl rand -base64 12)
|
||||
cat <<EOF >/opt/semaphore/config.json
|
||||
{
|
||||
"bolt": {
|
||||
"host": "/opt/semaphore/semaphore_db.bolt"
|
||||
},
|
||||
"tmp_path": "/opt/semaphore/tmp",
|
||||
"cookie_hash": "${SEM_HASH}",
|
||||
"cookie_encryption": "${SEM_ENCRYPTION}",
|
||||
"access_key_encryption": "${SEM_KEY}"
|
||||
}
|
||||
EOF
|
||||
|
||||
$STD semaphore user add --admin --login admin --email admin@helper-scripts.com --name Administrator --password ${SEM_PW} --config /opt/semaphore/config.json
|
||||
echo "${SEM_PW}" >~/semaphore.creds
|
||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
||||
msg_ok "Setup Semaphore"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/semaphore.service
|
||||
[Unit]
|
||||
Description=Semaphore UI
|
||||
Documentation=https://docs.semaphoreui.com/
|
||||
Wants=network-online.target
|
||||
After=network-online.target
|
||||
|
||||
[Service]
|
||||
ExecStart=/usr/bin/semaphore server --config /opt/semaphore/config.json
|
||||
Restart=always
|
||||
RestartSec=10s
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
systemctl enable --now -q semaphore.service
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf semaphore_${RELEASE}_linux_arm64.deb
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
@@ -1,9 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2024 tteck
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT
|
||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
@@ -25,8 +25,9 @@ msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Golang"
|
||||
set +o pipefail
|
||||
wget -q https://golang.org/dl/go1.22.2.linux-arm64.tar.gz
|
||||
tar -xzf go1.22.2.linux-arm64.tar.gz -C /usr/local
|
||||
RELEASE=$(curl -s https://go.dev/dl/ | grep -o "go.*\linux-arm64.tar.gz" | head -n 1)
|
||||
wget -q https://golang.org/dl/$RELEASE
|
||||
tar -xzf $RELEASE -C /usr/local
|
||||
$STD ln -s /usr/local/go/bin/go /usr/local/bin/go
|
||||
set -o pipefail
|
||||
msg_ok "Installed Golang"
|
||||
@@ -42,7 +43,7 @@ motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf go1.22.2.linux-arm64.tar.gz
|
||||
rm -rf $RELEASE
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
|
||||
61
install/silverbullet-install.sh
Normal file
61
install/silverbullet-install.sh
Normal file
@@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: Dominik Siebel (dsiebel)
|
||||
# License: MIT
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
sudo \
|
||||
mc \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Silverbullet"
|
||||
RELEASE=$(curl -s https://api.github.com/repos/silverbulletmd/silverbullet/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
mkdir -p /opt/silverbullet/bin /opt/silverbullet/space
|
||||
wget -q https://github.com/silverbulletmd/silverbullet/releases/download/${RELEASE}/silverbullet-server-linux-aarch64.zip
|
||||
unzip -oq -d /opt/silverbullet/bin/ silverbullet-server-linux-aarch64.zip
|
||||
chmod +x /opt/silverbullet/bin/silverbullet
|
||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||
msg_ok "Installed Silverbullet"
|
||||
|
||||
msg_info "Creating Service"
|
||||
|
||||
cat <<EOF >/etc/systemd/system/silverbullet.service
|
||||
[Unit]
|
||||
Description=Silverbullet Daemon
|
||||
After=syslog.target network.target
|
||||
|
||||
[Service]
|
||||
User=root
|
||||
Type=simple
|
||||
ExecStart=/opt/silverbullet/bin/silverbullet --hostname 0.0.0.0 --port 3000 /opt/silverbullet/space
|
||||
WorkingDirectory=/opt/silverbullet
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable --now -q silverbullet
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf silverbullet-server-linux-aarch64.zip
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
110
install/snipeit-install.sh
Normal file
110
install/snipeit-install.sh
Normal file
@@ -0,0 +1,110 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
|
||||
#Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: Michel Roegl-Brunner (michelroegl-brunner)
|
||||
# License: MIT
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
composer \
|
||||
git \
|
||||
sudo \
|
||||
mc \
|
||||
nginx \
|
||||
php8.2-{bcmath,common,ctype,curl,fileinfo,fpm,gd,iconv,intl,mbstring,mysql,soap,xml,xsl,zip,cli} \
|
||||
mariadb-server \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setting up database"
|
||||
DB_NAME=snipeit_db
|
||||
DB_USER=snipeit
|
||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||
mysql -u root -e "CREATE DATABASE $DB_NAME;"
|
||||
mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED WITH mysql_native_password AS PASSWORD('$DB_PASS');"
|
||||
mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
|
||||
{
|
||||
echo "SnipeIT-Credentials"
|
||||
echo "SnipeIT Database User: $DB_USER"
|
||||
echo "SnipeIT Database Password: $DB_PASS"
|
||||
echo "SnipeIT Database Name: $DB_NAME"
|
||||
} >> ~/snipeit.creds
|
||||
msg_ok "Set up database"
|
||||
|
||||
msg_info "Installing Snipe-IT"
|
||||
cd /opt
|
||||
RELEASE=$(curl -s https://api.github.com/repos/snipe/snipe-it/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
||||
wget -q "https://github.com/snipe/snipe-it/archive/refs/tags/v${RELEASE}.zip"
|
||||
unzip -q v${RELEASE}.zip
|
||||
mv snipe-it-${RELEASE} /opt/snipe-it
|
||||
|
||||
cd /opt/snipe-it
|
||||
cp .env.example .env
|
||||
IPADDRESS=$(hostname -I | awk '{print $1}')
|
||||
|
||||
sed -i -e "s|^APP_URL=.*|APP_URL=http://$IPADDRESS|" \
|
||||
-e "s|^DB_DATABASE=.*|DB_DATABASE=$DB_NAME|" \
|
||||
-e "s|^DB_USERNAME=.*|DB_USERNAME=$DB_USER|" \
|
||||
-e "s|^DB_PASSWORD=.*|DB_PASSWORD=$DB_PASS|" .env
|
||||
|
||||
chown -R www-data: /opt/snipe-it
|
||||
chmod -R 755 /opt/snipe-it
|
||||
|
||||
|
||||
export COMPOSER_ALLOW_SUPERUSER=1
|
||||
$STD composer update --no-plugins --no-scripts
|
||||
$STD composer install --no-dev --prefer-source --no-plugins --no-scripts
|
||||
|
||||
$STD php artisan key:generate --force
|
||||
msg_ok "Installed SnipeIT"
|
||||
|
||||
msg_info "Creating Service"
|
||||
|
||||
cat <<EOF >/etc/nginx/conf.d/snipeit.conf
|
||||
server {
|
||||
listen 80;
|
||||
root /opt/snipe-it/public;
|
||||
server_name $IPADDRESS;
|
||||
index index.php;
|
||||
|
||||
location / {
|
||||
try_files \$uri \$uri/ /index.php?\$query_string;
|
||||
}
|
||||
|
||||
location ~ \.php\$ {
|
||||
include fastcgi.conf;
|
||||
include snippets/fastcgi-php.conf;
|
||||
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
|
||||
fastcgi_split_path_info ^(.+\.php)(/.+)\$;
|
||||
fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
|
||||
include fastcgi_params;
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
systemctl reload nginx
|
||||
msg_ok "Configured Service"
|
||||
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf /opt/v${RELEASE}.zip
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
@@ -1,9 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2024 tteck
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT
|
||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/Donkie/Spoolman
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
@@ -34,15 +34,15 @@ $STD apt-get install -y \
|
||||
python3-setuptools \
|
||||
python3-wheel \
|
||||
python3-pip
|
||||
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
|
||||
msg_ok "Installed Python3"
|
||||
|
||||
msg_info "Installing Spoolman"
|
||||
RELEASE=$(wget -q https://github.com/Donkie/Spoolman/releases/latest -O - | grep "title>Release" | cut -d " " -f 4)
|
||||
cd /opt
|
||||
wget -q https://github.com/Donkie/Spoolman/releases/download/$RELEASE/spoolman.zip
|
||||
unzip -q spoolman.zip -d spoolman
|
||||
rm -rf spoolman.zip
|
||||
cd /opt/spoolman
|
||||
cd spoolman
|
||||
$STD pip3 install -r requirements.txt
|
||||
wget -q https://raw.githubusercontent.com/Donkie/Spoolman/master/.env.example -O .env
|
||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||
|
||||
64
install/teddycloud-install.sh
Normal file
64
install/teddycloud-install.sh
Normal file
@@ -0,0 +1,64 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: Dominik Siebel (dsiebel)
|
||||
# License: MIT
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
sudo \
|
||||
mc \
|
||||
libubsan1 \
|
||||
ffmpeg \
|
||||
curl \
|
||||
ca-certificates \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing TeddyCloud"
|
||||
RELEASE="$(curl -s https://api.github.com/repos/toniebox-reverse-engineering/teddycloud/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')"
|
||||
VERSION="${RELEASE#tc_v}"
|
||||
wget -q "https://github.com/toniebox-reverse-engineering/teddycloud/releases/download/${RELEASE}/teddycloud.amd64.release_v${VERSION}.zip"
|
||||
unzip -q -d "/opt/teddycloud-${VERSION}" "teddycloud.amd64.release_v${VERSION}.zip"
|
||||
ln -fns "/opt/teddycloud-${VERSION}" /opt/teddycloud
|
||||
echo "${VERSION}" >"/opt/${APPLICATION}_version.txt"
|
||||
msg_ok "Installed TeddyCloud"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/teddycloud.service
|
||||
[Unit]
|
||||
Description=TeddyCloud Server
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
User=root
|
||||
Type=simple
|
||||
ExecStart=/opt/teddycloud/teddycloud
|
||||
WorkingDirectory=/opt/teddycloud
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable --now -q teddycloud
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
$STD apt-get --yes autoremove
|
||||
$STD apt-get --yes autoclean
|
||||
rm -rf "teddycloud.amd64.release_v${VERSION}.zip"
|
||||
msg_ok "Cleaned"
|
||||
53
install/the-lounge-install.sh
Normal file
53
install/the-lounge-install.sh
Normal file
@@ -0,0 +1,53 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: kristocopani
|
||||
# License: MIT
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
gpg \
|
||||
wget \
|
||||
mc \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setting up Node.js Repository"
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
msg_ok "Set up Node.js Repository"
|
||||
|
||||
msg_info "Installing Node.js"
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y nodejs
|
||||
$STD npm install --global yarn
|
||||
msg_ok "Installed Node.js"
|
||||
|
||||
msg_info "Installing The Lounge"
|
||||
cd /opt
|
||||
RELEASE=$(curl -s https://api.github.com/repos/thelounge/thelounge-deb/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
wget -q https://github.com/thelounge/thelounge-deb/releases/download/v${RELEASE}/thelounge_${RELEASE}_all.deb
|
||||
$STD dpkg -i ./thelounge_${RELEASE}_all.deb
|
||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
||||
msg_ok "Installed The Lounge"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf /opt/thelounge_${RELEASE}_all.deb
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
@@ -1,9 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2024 tteck
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT
|
||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
@@ -18,6 +18,7 @@ $STD apt-get install -y curl
|
||||
$STD apt-get install -y sudo
|
||||
$STD apt-get install -y mc
|
||||
$STD apt-get install -y openssh-server
|
||||
$STD apt-get install -y wget
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
RELEASE=$(curl -s https://api.github.com/repos/TriliumNext/Notes/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
|
||||
41
install/typesense-install.sh
Normal file
41
install/typesense-install.sh
Normal file
@@ -0,0 +1,41 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: tlissak
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://typesense.org/
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
mc \
|
||||
sudo \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing TypeSense"
|
||||
RELEASE=$(curl -s https://api.github.com/repos/typesense/typesense/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||
cd /opt
|
||||
wget -q https://dl.typesense.org/releases/${RELEASE}/typesense-server-${RELEASE}-amd64.deb
|
||||
$STD apt install -y /opt/typesense-server-${RELEASE}-amd64.deb
|
||||
echo 'enable-cors = true' >> /etc/typesense/typesense-server.ini
|
||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
||||
msg_ok "Installed TypeSense"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf /opt/typesense-server-${RELEASE}-amd64.deb
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
@@ -1,9 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2024 tteck
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT
|
||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
@@ -39,7 +39,7 @@ msg_ok "Installed Node.js"
|
||||
msg_info "Setting up postgresql"
|
||||
DB_NAME=umamidb
|
||||
DB_USER=umami
|
||||
DB_PASS="$(openssl rand -base64 18 | cut -c1-13)"
|
||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||
SECRET_KEY="$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32)"
|
||||
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
|
||||
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
|
||||
|
||||
96
install/unbound-install.sh
Normal file
96
install/unbound-install.sh
Normal file
@@ -0,0 +1,96 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: wimb0
|
||||
# License: MIT
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
sudo \
|
||||
curl \
|
||||
mc \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Unbound"
|
||||
$STD apt-get install -y \
|
||||
unbound \
|
||||
unbound-host
|
||||
msg_info "Installed Unbound"
|
||||
|
||||
cat <<EOF >/etc/unbound/unbound.conf.d/unbound.conf
|
||||
server:
|
||||
interface: 0.0.0.0
|
||||
port: 5335
|
||||
do-ip6: no
|
||||
hide-identity: yes
|
||||
hide-version: yes
|
||||
harden-referral-path: yes
|
||||
cache-min-ttl: 300
|
||||
cache-max-ttl: 14400
|
||||
serve-expired: yes
|
||||
serve-expired-ttl: 3600
|
||||
prefetch: yes
|
||||
prefetch-key: yes
|
||||
target-fetch-policy: "3 2 1 1 1"
|
||||
unwanted-reply-threshold: 10000000
|
||||
rrset-cache-size: 256m
|
||||
msg-cache-size: 128m
|
||||
so-rcvbuf: 1m
|
||||
private-address: 192.168.0.0/16
|
||||
private-address: 169.254.0.0/16
|
||||
private-address: 172.16.0.0/12
|
||||
private-address: 10.0.0.0/8
|
||||
private-address: fd00::/8
|
||||
private-address: fe80::/10
|
||||
access-control: 192.168.0.0/16 allow
|
||||
access-control: 172.16.0.0/12 allow
|
||||
access-control: 10.0.0.0/8 allow
|
||||
access-control: 127.0.0.1/32 allow
|
||||
chroot: ""
|
||||
logfile: /var/log/unbound.log
|
||||
EOF
|
||||
|
||||
touch /var/log/unbound.log
|
||||
chown unbound:unbound /var/log/unbound.log
|
||||
|
||||
systemctl restart unbound
|
||||
msg_ok "Installed Unbound"
|
||||
|
||||
msg_ok "Configuring Logrotate"
|
||||
cat <<EOF >/etc/logrotate.d/unbound
|
||||
/var/log/unbound.log {
|
||||
daily
|
||||
rotate 7
|
||||
missingok
|
||||
notifempty
|
||||
compress
|
||||
delaycompress
|
||||
sharedscripts
|
||||
create 644
|
||||
postrotate
|
||||
/usr/sbin/unbound-control log_reopen
|
||||
endscript
|
||||
}
|
||||
EOF
|
||||
|
||||
systemctl restart logrotate
|
||||
msg_ok "Configured Logrotate"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
45
install/vikunja-install.sh
Normal file
45
install/vikunja-install.sh
Normal file
@@ -0,0 +1,45 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: MickLesk (Canbiz)
|
||||
# License: MIT
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
sudo \
|
||||
make \
|
||||
mc \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setup Vikunja (Patience)"
|
||||
cd /opt
|
||||
RELEASE=$(curl -s https://dl.vikunja.io/vikunja/ | grep -oP 'href="/vikunja/\K[0-9]+\.[0-9]+\.[0-9]+' | sort -V | tail -n 1)
|
||||
wget -q "https://dl.vikunja.io/vikunja/$RELEASE/vikunja-$RELEASE-amd64.deb"
|
||||
$STD dpkg -i vikunja-$RELEASE-amd64.deb
|
||||
sed -i 's|^ timezone: .*| timezone: UTC|' /etc/vikunja/config.yml
|
||||
sed -i 's|"./vikunja.db"|"/etc/vikunja/vikunja.db"|' /etc/vikunja/config.yml
|
||||
sed -i 's|./files|/etc/vikunja/files|' /etc/vikunja/config.yml
|
||||
systemctl start vikunja.service
|
||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||
msg_ok "Installed Vikunja"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf /opt/vikunja-$RELEASE-amd64.deb
|
||||
$STD apt-get autoremove
|
||||
$STD apt-get autoclean
|
||||
msg_ok "Cleaned"
|
||||
@@ -1,10 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2024 tteck
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck
|
||||
# Co-Author: MickLesk (Canbiz)
|
||||
# License: MIT
|
||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/ellite/wallos
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
@@ -22,7 +22,10 @@ $STD apt-get install -y \
|
||||
mc \
|
||||
apache2 \
|
||||
libapache2-mod-php \
|
||||
php8.2-{mbstring,gd,curl,intl,imagick,bz2,sqlite3,zip,xml}
|
||||
php8.2-{mbstring,gd,curl,intl,imagick,bz2,sqlite3,zip,xml} \
|
||||
wget \
|
||||
openssh-server \
|
||||
cron
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Wallos (Patience)"
|
||||
@@ -59,6 +62,7 @@ $STD curl http://localhost/endpoints/db/migrate.php
|
||||
msg_ok "Installed Wallos"
|
||||
|
||||
msg_info "Setting up Crontabs"
|
||||
mkdir -p /var/log/cron
|
||||
cat <<EOF > /opt/wallos.cron
|
||||
0 1 * * * php /opt/wallos/endpoints/cronjobs/updatenextpayment.php >> /var/log/cron/updatenextpayment.log 2>&1
|
||||
0 2 * * * php /opt/wallos/endpoints/cronjobs/updateexchange.php >> /var/log/cron/updateexchange.log 2>&1
|
||||
@@ -78,4 +82,4 @@ msg_info "Cleaning up"
|
||||
rm -rf /opt/v${RELEASE}.zip
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
msg_ok "Cleaned"
|
||||
|
||||
90
install/wavelog-install.sh
Normal file
90
install/wavelog-install.sh
Normal file
@@ -0,0 +1,90 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: Don Locke (DonLocke)
|
||||
# License: MIT
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/wavelog/wavelog
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
libapache2-mod-php \
|
||||
mariadb-server \
|
||||
mc \
|
||||
php8.2-{curl,mbstring,mysql,xml,zip,gd} \
|
||||
sudo \
|
||||
unzip \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setting up Database"
|
||||
DB_NAME=wavelog
|
||||
DB_USER=waveloguser
|
||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||
$STD mysql -u root -e "CREATE DATABASE $DB_NAME;"
|
||||
$STD mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED WITH mysql_native_password AS PASSWORD('$DB_PASS');"
|
||||
$STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
|
||||
{
|
||||
echo "Wavelog-Credentials"
|
||||
echo "Wavelog Database User: $DB_USER"
|
||||
echo "Wavelog Database Password: $DB_PASS"
|
||||
echo "Wavelog Database Name: $DB_NAME"
|
||||
} >> ~/wavelog.creds
|
||||
msg_ok "Set up database"
|
||||
|
||||
msg_info "Setting up PHP"
|
||||
sed -i '/max_execution_time/s/= .*/= 600/' /etc/php/8.2/apache2/php.ini
|
||||
sed -i '/memory_limit/s/= .*/= 256M/' /etc/php/8.2/apache2/php.ini
|
||||
sed -i '/upload_max_filesize/s/= .*/= 8M/' /etc/php/8.2/apache2/php.ini
|
||||
msg_ok "Set up PHP"
|
||||
|
||||
msg_info "Installing Wavelog"
|
||||
RELEASE=$(curl -s https://api.github.com/repos/wavelog/wavelog/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
wget -q "https://github.com/wavelog/wavelog/archive/refs/tags/${RELEASE}.zip"
|
||||
unzip -q ${RELEASE}.zip
|
||||
mv wavelog-${RELEASE}/ /opt/wavelog
|
||||
chown -R www-data:www-data /opt/wavelog/
|
||||
find /opt/wavelog/ -type d -exec chmod 755 {} \;
|
||||
find /opt/wavelog/ -type f -exec chmod 664 {} \;
|
||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||
msg_ok "Installed Wavelog"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/apache2/sites-available/wavelog.conf
|
||||
<VirtualHost *:80>
|
||||
ServerAdmin webmaster@localhost
|
||||
DocumentRoot /opt/wavelog
|
||||
|
||||
<Directory /opt/wavelog>
|
||||
Options Indexes FollowSymLinks
|
||||
AllowOverride All
|
||||
Require all granted
|
||||
</Directory>
|
||||
|
||||
ErrorLog /var/log/apache2/error.log
|
||||
CustomLog /var/log/apache2/access.log combined
|
||||
</VirtualHost>
|
||||
EOF
|
||||
$STD a2ensite wavelog.conf
|
||||
$STD a2dissite 000-default.conf
|
||||
$STD systemctl reload apache2
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -f ${RELEASE}.zip
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
@@ -1,9 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2024 tteck
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT
|
||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
@@ -38,6 +38,19 @@ echo "net.ipv4.ip_forward=1" >>/etc/sysctl.conf
|
||||
$STD sysctl -p /etc/sysctl.conf
|
||||
msg_ok "Installed WGDashboard"
|
||||
|
||||
msg_info "Create Example Config for WGDashboard"
|
||||
private_key=$(wg genkey)
|
||||
cat <<EOF >/etc/wireguard/wg0.conf
|
||||
[Interface]
|
||||
PrivateKey = ${private_key}
|
||||
Address = 10.0.0.1/24
|
||||
SaveConfig = true
|
||||
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;
|
||||
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE;
|
||||
ListenPort = 51820
|
||||
EOF
|
||||
msg_ok "Created Example Config for WGDashboard"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/wg-dashboard.service
|
||||
[Unit]
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2024 tteck
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT
|
||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
@@ -14,19 +14,21 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y curl
|
||||
$STD apt-get install -y sudo
|
||||
$STD apt-get install -y mc
|
||||
$STD apt-get install -y wget
|
||||
$STD apt-get install -y openssh-server
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
sudo \
|
||||
mc \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Zabbix"
|
||||
wget -q https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_7.0-1+debian12_all.deb
|
||||
$STD dpkg -i zabbix-release_7.0-1+debian12_all.deb
|
||||
rm zabbix-release_7.0-1+debian12_all.deb
|
||||
cd /tmp
|
||||
wget -q https://repo.zabbix.com/zabbix/7.2/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb
|
||||
$STD dpkg -i /tmp/zabbix-release_latest+debian12_all.deb
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y zabbix-server-pgsql zabbix-frontend-php php8.2-pgsql zabbix-apache-conf zabbix-sql-scripts zabbix-agent
|
||||
$STD apt-get install -y zabbix-server-pgsql zabbix-frontend-php php8.2-pgsql zabbix-apache-conf zabbix-sql-scripts
|
||||
$STD apt-get install -y zabbix-agent2 zabbix-agent2-plugin-*
|
||||
msg_ok "Installed Zabbix"
|
||||
|
||||
msg_info "Setting up PostgreSQL"
|
||||
@@ -39,7 +41,7 @@ $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCO
|
||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
|
||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
|
||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC'"
|
||||
zcat /usr/share/zabbix-sql-scripts/postgresql/server.sql.gz | sudo -u $DB_USER psql $DB_NAME &>/dev/null
|
||||
zcat /usr/share/zabbix/sql-scripts/postgresql/server.sql.gz | sudo -u $DB_USER psql $DB_NAME &>/dev/null
|
||||
sed -i "s/^DBName=.*/DBName=$DB_NAME/" /etc/zabbix/zabbix_server.conf
|
||||
sed -i "s/^DBUser=.*/DBUser=$DB_USER/" /etc/zabbix/zabbix_server.conf
|
||||
sed -i "s/^# DBPassword=.*/DBPassword=$DB_PASS/" /etc/zabbix/zabbix_server.conf
|
||||
@@ -52,14 +54,15 @@ echo -e "zabbix Database Name: \e[32m$DB_NAME\e[0m" >>~/zabbix.creds
|
||||
msg_ok "Set up PostgreSQL"
|
||||
|
||||
msg_info "Starting Services"
|
||||
systemctl restart zabbix-server zabbix-agent apache2
|
||||
systemctl enable -q zabbix-server zabbix-agent apache2
|
||||
systemctl restart zabbix-server zabbix-agent2 apache2
|
||||
systemctl enable -q --now zabbix-server zabbix-agent2 apache2
|
||||
msg_ok "Started Services"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf /tmp/zabbix-release_latest+debian12_all.deb
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
|
||||
63
install/zammad-install.sh
Normal file
63
install/zammad-install.sh
Normal file
@@ -0,0 +1,63 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
#Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: Michel Roegl-Brunner (michelroegl-brunner)
|
||||
# License: MIT
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
git \
|
||||
sudo \
|
||||
gpg \
|
||||
wget \
|
||||
nginx \
|
||||
apt-transport-https \
|
||||
gnupg \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setting up Elasticsearch"
|
||||
curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
|
||||
echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list >/dev/null
|
||||
$STD apt-get update
|
||||
$STD apt-get -y install elasticsearch
|
||||
echo "-Xms2g" >>/etc/elasticsearch/jvm.options
|
||||
echo "-Xmx2g" >>/etc/elasticsearch/jvm.options
|
||||
$STD /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-attachment -b
|
||||
systemctl -q restart elasticsearch
|
||||
msg_ok "Setup Elasticsearch"
|
||||
|
||||
msg_info "Installing Zammad"
|
||||
curl -fsSL https://dl.packager.io/srv/zammad/zammad/key | gpg --dearmor | sudo tee /etc/apt/keyrings/pkgr-zammad.gpg >/dev/null
|
||||
echo "deb [signed-by=/etc/apt/keyrings/pkgr-zammad.gpg] https://dl.packager.io/srv/deb/zammad/zammad/stable/debian 12 main" | sudo tee /etc/apt/sources.list.d/zammad.list >/dev/null
|
||||
$STD apt-get update
|
||||
$STD apt-get -y install zammad
|
||||
$STD zammad run rails r "Setting.set('es_url', 'http://localhost:9200')"
|
||||
$STD zammad run rake zammad:searchindex:rebuild
|
||||
msg_ok "Installed Zammad"
|
||||
|
||||
msg_info "Setup Services"
|
||||
cp /opt/zammad/contrib/nginx/zammad.conf /etc/nginx/sites-available/zammad.conf
|
||||
IPADDRESS=$(hostname -I | awk '{print $1}')
|
||||
sed -i "s/server_name localhost;/server_name $IPADDRESS;/g" /etc/nginx/sites-available/zammad.conf
|
||||
$STD systemctl reload nginx
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
@@ -1,9 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2024 tteck
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT
|
||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
@@ -14,23 +14,24 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y curl
|
||||
$STD apt-get install -y sudo
|
||||
$STD apt-get install -y mc
|
||||
$STD apt-get install -y git
|
||||
$STD apt-get install -y make
|
||||
$STD apt-get install -y g++
|
||||
$STD apt-get install -y gcc
|
||||
$STD apt-get install -y ca-certificates
|
||||
$STD apt-get install -y gnupg
|
||||
$STD apt-get install -y wget
|
||||
$STD apt-get install -y openssh-server
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
sudo \
|
||||
mc \
|
||||
git \
|
||||
make \
|
||||
g++ \
|
||||
gcc \
|
||||
ca-certificates \
|
||||
gnupg \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setting up Node.js Repository"
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
msg_ok "Set up Node.js Repository"
|
||||
|
||||
msg_info "Installing Node.js"
|
||||
@@ -38,49 +39,47 @@ $STD apt-get update
|
||||
$STD apt-get install -y nodejs
|
||||
msg_ok "Installed Node.js"
|
||||
|
||||
msg_info "Setting up Zigbee2MQTT Repository"
|
||||
$STD git clone --depth 1 https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
|
||||
msg_ok "Set up Zigbee2MQTT Repository"
|
||||
msg_info "Installing pnpm"
|
||||
$STD npm install -g pnpm
|
||||
msg_ok "Installed pnpm"
|
||||
|
||||
read -r -p "Switch to Edge/dev branch? (y/N) " prompt
|
||||
if [[ $prompt == "y" ]]; then
|
||||
DEV="y"
|
||||
else
|
||||
DEV="n"
|
||||
fi
|
||||
|
||||
msg_info "Installing Zigbee2MQTT"
|
||||
msg_info "Setting up Zigbee2MQTT"
|
||||
cd /opt
|
||||
RELEASE=$(curl -s https://api.github.com/repos/Koenkk/zigbee2mqtt/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
wget -q "https://github.com/Koenkk/zigbee2mqtt/archive/refs/tags/${RELEASE}.zip"
|
||||
unzip -q ${RELEASE}.zip
|
||||
mv zigbee2mqtt-${RELEASE} /opt/zigbee2mqtt
|
||||
cd /opt/zigbee2mqtt/data
|
||||
mv configuration.example.yaml configuration.yaml
|
||||
cd /opt/zigbee2mqtt
|
||||
if [[ $DEV == "y" ]]; then
|
||||
$STD git fetch origin dev:dev
|
||||
$STD git checkout dev
|
||||
$STD git pull
|
||||
fi
|
||||
$STD npm ci
|
||||
$STD pnpm install --frozen-lockfile
|
||||
$STD pnpm build
|
||||
msg_ok "Installed Zigbee2MQTT"
|
||||
|
||||
msg_info "Creating Service"
|
||||
service_path="/etc/systemd/system/zigbee2mqtt.service"
|
||||
echo "[Unit]
|
||||
cat <<EOF >/etc/systemd/system/zigbee2mqtt.service
|
||||
[Unit]
|
||||
Description=zigbee2mqtt
|
||||
After=network.target
|
||||
[Service]
|
||||
Environment=NODE_ENV=production
|
||||
ExecStart=/usr/bin/npm start
|
||||
ExecStart=/usr/bin/pnpm start
|
||||
WorkingDirectory=/opt/zigbee2mqtt
|
||||
StandardOutput=inherit
|
||||
StandardError=inherit
|
||||
Restart=always
|
||||
User=root
|
||||
[Install]
|
||||
WantedBy=multi-user.target" >$service_path
|
||||
$STD systemctl enable zigbee2mqtt.service
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now zigbee2mqtt.service
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf /opt/${RELEASE}.zip
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2024 tteck
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT
|
||||
# https://github.com/tteck/Proxmox/raw/main/LICENSE
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
@@ -14,35 +14,45 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y curl
|
||||
$STD apt-get install -y sudo
|
||||
$STD apt-get install -y mc
|
||||
$STD apt-get install -y wget
|
||||
$STD apt-get install -y openssh-server
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
sudo \
|
||||
mc \
|
||||
wget \
|
||||
openssh-server
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Z-Wave JS UI"
|
||||
mkdir /opt/zwave-js-ui
|
||||
mkdir -p /opt/zwave-js-ui
|
||||
mkdir -p /opt/zwave_store
|
||||
cd /opt/zwave-js-ui
|
||||
RELEASE=$(curl -s https://api.github.com/repos/zwave-js/zwave-js-ui/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
$STD wget https://github.com/zwave-js/zwave-js-ui/releases/download/${RELEASE}/zwave-js-ui-${RELEASE}-linux-arm64.zip
|
||||
$STD unzip zwave-js-ui-${RELEASE}-linux-arm64.zip
|
||||
wget -q https://github.com/zwave-js/zwave-js-ui/releases/download/${RELEASE}/zwave-js-ui-${RELEASE}-linux-arm64.zip
|
||||
unzip -q zwave-js-ui-${RELEASE}-linux-arm64.zip
|
||||
cat <<EOF >/opt/.env
|
||||
ZWAVEJS_EXTERNAL_CONFIG=/opt/zwave_store/.config-db
|
||||
STORE_DIR=/opt/zwave_store
|
||||
EOF
|
||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
||||
msg_ok "Installed Z-Wave JS UI"
|
||||
|
||||
msg_info "Creating Service"
|
||||
service_path="/etc/systemd/system/zwave-js-ui.service"
|
||||
echo "[Unit]
|
||||
cat <<EOF > /etc/systemd/system/zwave-js-ui.service
|
||||
[Unit]
|
||||
Description=zwave-js-ui
|
||||
Wants=network-online.target
|
||||
After=network-online.target
|
||||
|
||||
[Service]
|
||||
User=root
|
||||
WorkingDirectory=/opt/zwave-js-ui
|
||||
ExecStart=/opt/zwave-js-ui/zwave-js-ui-linux
|
||||
EnvironmentFile=/opt/.env
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target" >$service_path
|
||||
systemctl start zwave-js-ui
|
||||
$STD systemctl enable zwave-js-ui
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now zwave-js-ui
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
|
||||
Reference in New Issue
Block a user