Compare commits

...

18 Commits

Author SHA1 Message Date
community-scripts-pr-app[bot]
712ff6f5cc Update CHANGELOG.md (#2804)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-03 21:56:28 +01:00
CanbiZ
f80bc3c09a Zigbee2Mqtt Use fixed pnpm Version 10.4.1 (#2805) 2025-03-03 20:07:33 +01:00
Gert-jan
7c5efad1ca Update zigbee2mqtt.json - make sure link is clickable (#2802) 2025-03-03 18:22:51 +01:00
community-scripts-pr-app[bot]
d0edd224ca Update CHANGELOG.md (#2793)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-03 11:58:33 +01:00
community-scripts-pr-app[bot]
6c5ef63375 Update .app files (#2794)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-03-03 11:45:43 +01:00
community-scripts-pr-app[bot]
402420e159 Update date in json (#2792)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-03-03 11:45:27 +01:00
Slaviša Arežina
af302d62f3 Add Habitica script (#2779) 2025-03-03 11:44:16 +01:00
community-scripts-pr-app[bot]
bedb908682 Update CHANGELOG.md (#2791)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-03 11:25:03 +01:00
CanbiZ
9bf30de4cb Feature Template Path for Mountings (#2785) 2025-03-03 10:55:12 +01:00
CanbiZ
9302e2e27d Update Buttons.tsx 2025-03-03 10:43:09 +01:00
CanbiZ
6ab8815b3b Feature: MinIO use now static port 9001 (#2786)
* Feature: MinIO use now static port 9001

* Update minio.json
2025-03-03 09:58:06 +01:00
CanbiZ
4baae014ab Update Buttons.tsx 2025-03-03 09:55:30 +01:00
CanbiZ
d000c35ff5 Update Buttons.tsx 2025-03-03 09:54:01 +01:00
CanbiZ
9570c9199a Feature: Website - show default OS (#2790)
* Feature: Website - show default OS

* add os fallback

* Update ScriptItem.tsx

* Update Buttons.tsx

* Update Buttons.tsx

* fix duplicate type check

* fix import deps

* add refreshccw
2025-03-03 09:50:21 +01:00
community-scripts-pr-app[bot]
705ad208d7 Update CHANGELOG.md (#2788)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-03 08:23:10 +01:00
CanbiZ
6e3367c4e7 Linkwarden: Fix & Update Monolith-Installation (#2787)
* Linkwarden: Fix & Update Monolith-Installation

* Update linkwarden.sh

* remove monolith note
2025-03-03 08:19:07 +01:00
community-scripts-pr-app[bot]
71d8da316a Update CHANGELOG.md (#2776) 2025-03-02 12:26:52 +01:00
flatlinebb
ba990514c4 Fix gpg Repo for nzbget (#2774)
* Update nzbget-install.sh

Added [arch=all] to the nzbget repo line to fix apt update errors.

* Update install/nzbget-install.sh

Co-authored-by: bvdberg01 <74251551+bvdberg01@users.noreply.github.com>

---------

Co-authored-by: bvdberg01 <74251551+bvdberg01@users.noreply.github.com>
2025-03-02 11:33:57 +01:00
16 changed files with 339 additions and 25 deletions

View File

@@ -14,6 +14,42 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment. All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment.
## 2025-03-03
### 🆕 New Scripts
- Habitica [@tremor021](https://github.com/tremor021) ([#2779](https://github.com/community-scripts/ProxmoxVE/pull/2779))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Zigbee2Mqtt Use fixed pnpm Version 10.4.1 [@MickLesk](https://github.com/MickLesk) ([#2805](https://github.com/community-scripts/ProxmoxVE/pull/2805))
- Linkwarden: Fix & Update Monolith-Installation [@MickLesk](https://github.com/MickLesk) ([#2787](https://github.com/community-scripts/ProxmoxVE/pull/2787))
- #### ✨ New Features
- Feature: MinIO use now static port 9001 [@MickLesk](https://github.com/MickLesk) ([#2786](https://github.com/community-scripts/ProxmoxVE/pull/2786))
- Feature Template Path for Mountings [@MickLesk](https://github.com/MickLesk) ([#2785](https://github.com/community-scripts/ProxmoxVE/pull/2785))
### 🌐 Website
- #### ✨ New Features
- Feature: Website - show default OS [@MickLesk](https://github.com/MickLesk) ([#2790](https://github.com/community-scripts/ProxmoxVE/pull/2790))
- #### 📝 Script Information
- Update zigbee2mqtt.json - make sure link is clickable [@gurtjun](https://github.com/gurtjun) ([#2802](https://github.com/community-scripts/ProxmoxVE/pull/2802))
## 2025-03-02
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Fix gpg Repo for nzbget [@flatlinebb](https://github.com/flatlinebb) ([#2774](https://github.com/community-scripts/ProxmoxVE/pull/2774))
## 2025-03-01 ## 2025-03-01
### 🚀 Updated Scripts ### 🚀 Updated Scripts

View File

@@ -221,7 +221,8 @@ mapfile -t TEMPLATES < <(pveam available -section system | sed -n "s/.*\($TEMPLA
exit 207 exit 207
} }
TEMPLATE="${TEMPLATES[-1]}" TEMPLATE="${TEMPLATES[-1]}"
TEMPLATE_PATH="/var/lib/vz/template/cache/$TEMPLATE" TEMPLATE_PATH="$(pvesm path $TEMPLATE_STORAGE:vztmpl/$TEMPLATE)"
# Without NAS/Mount: TEMPLATE_PATH="/var/lib/vz/template/cache/$TEMPLATE"
# Check if template exists, if corrupt remove and redownload # Check if template exists, if corrupt remove and redownload
if ! pveam list "$TEMPLATE_STORAGE" | grep -q "$TEMPLATE" || ! zstdcat "$TEMPLATE_PATH" | tar -tf - >/dev/null 2>&1; then if ! pveam list "$TEMPLATE_STORAGE" | grep -q "$TEMPLATE" || ! zstdcat "$TEMPLATE_PATH" | tar -tf - >/dev/null 2>&1; then
msg_warn "Template $TEMPLATE not found in storage or seems to be corrupted. Redownloading." msg_warn "Template $TEMPLATE not found in storage or seems to be corrupted. Redownloading."

74
ct/habitica.sh Normal file
View File

@@ -0,0 +1,74 @@
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/HabitRPG/habitica
APP="Habitica"
var_tags="gaming"
var_cpu="2"
var_ram="4096"
var_disk="8"
var_os="debian"
var_version="12"
var_unprivileged="1"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d "/opt/habitica" ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -s https://api.github.com/repos/HabitRPG/habitica/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
msg_info "Stopping $APP"
systemctl stop habitica-mongodb
systemctl stop habitica
systemctl stop habitica-client
msg_ok "Stopped $APP"
msg_info "Updating $APP to ${RELEASE}"
temp_file=$(mktemp)
wget -q "https://github.com/HabitRPG/habitica/archive/refs/tags/v${RELEASE}.tar.gz" -O $temp_file
tar zxf $temp_file
cp -rf habitica-${RELEASE}/* /opt/habitica
cd /opt/habitica
$STD npm i
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated $APP to ${RELEASE}"
msg_info "Starting $APP"
systemctl start habitica-mongodb
systemctl start habitica
systemctl start habitica-client
msg_ok "Started $APP"
msg_info "Cleaning Up"
rm -f $temp_file
rm -rf ~/habitica-${RELEASE}
msg_ok "Cleanup Completed"
msg_ok "Update Successful"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"

6
ct/headers/habitica Normal file
View File

@@ -0,0 +1,6 @@
__ __ __ _ __ _
/ / / /___ _/ /_ (_) /_(_)________ _
/ /_/ / __ `/ __ \/ / __/ / ___/ __ `/
/ __ / /_/ / /_/ / / /_/ / /__/ /_/ /
/_/ /_/\__,_/_.___/_/\__/_/\___/\__,_/

View File

@@ -32,6 +32,15 @@ function update_script() {
systemctl stop linkwarden systemctl stop linkwarden
msg_ok "Stopped ${APP}" msg_ok "Stopped ${APP}"
msg_info "Updating Rust"
$STD apt-get install -y build-essential
$STD curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source $HOME/.cargo/env
echo 'export PATH=/usr/local/cargo/bin:$PATH' >> /etc/profile
source /etc/profile
$STD cargo install monolith
msg_ok "Updated Rust"
msg_info "Updating ${APP} to ${RELEASE}" msg_info "Updating ${APP} to ${RELEASE}"
cd /opt cd /opt
mv /opt/linkwarden/.env /opt/.env mv /opt/linkwarden/.env /opt/.env

View File

@@ -33,6 +33,10 @@ function update_script() {
systemctl stop zigbee2mqtt systemctl stop zigbee2mqtt
msg_ok "Stopped Service" msg_ok "Stopped Service"
msg_info "Updating pnpm"
$STD npm install -g pnpm@10.4.1
msg_ok "Updated pnpm"
msg_info "Creating Backup" msg_info "Creating Backup"
rm -rf /opt/${APP}_backup*.tar.gz rm -rf /opt/${APP}_backup*.tar.gz
mkdir -p /opt/z2m_backup mkdir -p /opt/z2m_backup

View File

@@ -28,6 +28,10 @@ function ScriptItem({
setSelectedScript(null); setSelectedScript(null);
}; };
const defaultInstallMethod = item.install_methods?.[0];
const os = defaultInstallMethod?.resources?.os || "Proxmox Node";
const version = defaultInstallMethod?.resources?.version || "";
return ( return (
<div className="mr-7 mt-0 flex w-full min-w-fit"> <div className="mr-7 mt-0 flex w-full min-w-fit">
<div className="flex w-full min-w-fit"> <div className="flex w-full min-w-fit">
@@ -60,6 +64,9 @@ function ScriptItem({
<p className="w-full text-sm text-muted-foreground"> <p className="w-full text-sm text-muted-foreground">
Date added: {extractDate(item.date_created)} Date added: {extractDate(item.date_created)}
</p> </p>
<p className="text-sm text-muted-foreground">
Default OS: {os} {version}
</p>
</div> </div>
<div className="flex gap-5"> <div className="flex gap-5">
<DefaultSettings item={item} /> <DefaultSettings item={item} />

View File

@@ -1,14 +1,23 @@
import { Button } from "@/components/ui/button"; import { Button } from "@/components/ui/button";
import { basePath } from "@/config/siteConfig"; import { basePath } from "@/config/siteConfig";
import { Script } from "@/lib/types"; import { Script } from "@/lib/types";
import { BookOpenText, Code, Globe } from "lucide-react"; import { BookOpenText, Code, Globe, RefreshCcw } from "lucide-react";
import Link from "next/link"; import Link from "next/link";
const generateInstallSourceUrl = (slug: string) => {
const baseUrl = `https://raw.githubusercontent.com/community-scripts/${basePath}/main`;
return `${baseUrl}/install/${slug}-install.sh`;
};
const generateSourceUrl = (slug: string, type: string) => { const generateSourceUrl = (slug: string, type: string) => {
const baseUrl = `https://raw.githubusercontent.com/community-scripts/${basePath}/main`; const baseUrl = `https://raw.githubusercontent.com/community-scripts/${basePath}/main`;
return type === "ct" return type === "vm" ? `${baseUrl}/vm/${slug}.sh` : `${baseUrl}/misc/${slug}.sh`;
? `${baseUrl}/install/${slug}-install.sh` return `${baseUrl}/misc/${slug}.sh`;
: `${baseUrl}/${type}/${slug}.sh`; };
const generateUpdateUrl = (slug: string) => {
const baseUrl = `https://raw.githubusercontent.com/community-scripts/${basePath}/main`;
return `${baseUrl}/ct/${slug}.sh`;
}; };
interface ButtonLinkProps { interface ButtonLinkProps {
@@ -29,20 +38,35 @@ const ButtonLink = ({ href, icon, text }: ButtonLinkProps) => (
); );
export default function Buttons({ item }: { item: Script }) { export default function Buttons({ item }: { item: Script }) {
const isCtOrDefault = ["ct"].includes(item.type);
const installSourceUrl = isCtOrDefault ? generateInstallSourceUrl(item.slug) : null;
const updateSourceUrl = isCtOrDefault ? generateUpdateUrl(item.slug) : null;
const sourceUrl = !isCtOrDefault ? generateSourceUrl(item.slug, item.type) : null;
const buttons = [ const buttons = [
item.website && { item.website && {
href: item.website, href: item.website,
icon: <Globe className="h-4 w-4" />, icon: <Globe className="h-4 w-4" />,
text: "Website", text: "Website",
}, },
item.documentation && { item.documentation && {
href: item.documentation, href: item.documentation,
icon: <BookOpenText className="h-4 w-4" />, icon: <BookOpenText className="h-4 w-4" />,
text: "Documentation", text: "Documentation",
}, },
{ installSourceUrl && {
href: generateSourceUrl(item.slug, item.type), href: installSourceUrl,
icon: <Code className="h-4 w-4" />, icon: <Code className="h-4 w-4" />,
text: "Install-Source",
},
updateSourceUrl && {
href: updateSourceUrl,
icon: <RefreshCcw className="h-4 w-4" />,
text: "Update-Source",
},
sourceUrl && {
href: sourceUrl,
icon: <Code className="h-4 w-4" />,
text: "Source Code", text: "Source Code",
}, },
].filter(Boolean) as ButtonLinkProps[]; ].filter(Boolean) as ButtonLinkProps[];

110
install/habitica-install.sh Normal file
View File

@@ -0,0 +1,110 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Slaviša Arežina (tremor021)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/HabitRPG/habitica
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 \
libkrb5-dev \
gnupg \
build-essential \
git
wget -q http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb
$STD dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb
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 "Setup Node.js"
$STD apt-get update
$STD apt-get install -y nodejs
msg_ok "Setup Node.js"
msg_info "Setup ${APPLICATION}"
temp_file=$(mktemp)
RELEASE=$(curl -s https://api.github.com/repos/HabitRPG/habitica/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
wget -q "https://github.com/HabitRPG/habitica/archive/refs/tags/v${RELEASE}.tar.gz" -O $temp_file
tar zxf $temp_file
mv habitica-${RELEASE}/ /opt/habitica
cd /opt/habitica
$STD npm i
cp config.json.example config.json
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
msg_ok "Setup ${APPLICATION}"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/habitica-mongodb.service
[Unit]
Description=Habitica MongoDB Service
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/habitica
ExecStart=/usr/bin/npm run mongo:dev
Restart=always
[Install]
WantedBy=multi-user.target
EOF
cat <<EOF >/etc/systemd/system/habitica.service
[Unit]
Description=Habitica Service
After=habitica-mongodb.service
[Service]
Type=simple
User=root
WorkingDirectory=/opt/habitica
ExecStart=/usr/bin/npm start
Restart=always
[Install]
WantedBy=multi-user.target
EOF
cat <<EOF >/etc/systemd/system/habitica-client.service
[Unit]
Description=Habitica Client Service
After=habitica.service
[Service]
Type=simple
User=root
WorkingDirectory=/opt/habitica
ExecStart=/usr/bin/npm run client:dev
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now habitica-mongodb
systemctl enable -q --now habitica
systemctl enable -q --now habitica-client
msg_ok "Created Service"
motd_ssh
customize
msg_info "Cleaning up"
rm -f $temp_file
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -20,7 +20,9 @@ $STD apt-get install -y \
sudo \ sudo \
mc \ mc \
make \ make \
git \
postgresql \ postgresql \
build-essential \
cargo \ cargo \
gnupg gnupg
msg_ok "Installed Dependencies" msg_ok "Installed Dependencies"
@@ -37,10 +39,13 @@ $STD apt-get install -y nodejs
$STD npm install -g yarn $STD npm install -g yarn
msg_ok "Installed Node.js/Yarn" msg_ok "Installed Node.js/Yarn"
msg_info "Installing Monolith" msg_info "Installing Rust"
$STD curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source $HOME/.cargo/env
echo 'export PATH=/usr/local/cargo/bin:$PATH' >> /etc/profile
source /etc/profile
$STD cargo install monolith $STD cargo install monolith
export PATH=~/.cargo/bin:$PATH msg_ok "Installed Rust"
msg_ok "Installed Monolith"
msg_info "Setting up PostgreSQL DB" msg_info "Setting up PostgreSQL DB"
DB_NAME=linkwardendb DB_NAME=linkwardendb

View File

@@ -57,7 +57,7 @@ After=network-online.target
User=minio-user User=minio-user
Group=minio-user Group=minio-user
EnvironmentFile=-/etc/default/minio EnvironmentFile=-/etc/default/minio
ExecStart=/usr/local/bin/minio server /data ExecStart=/usr/local/bin/minio server --console-address ":9001" /data
Restart=always Restart=always
RestartSec=5 RestartSec=5
LimitNOFILE=65536 LimitNOFILE=65536
@@ -74,4 +74,4 @@ customize
msg_info "Cleaning up" msg_info "Cleaning up"
$STD apt-get -y autoremove $STD apt-get -y autoremove
$STD apt-get -y autoclean $STD apt-get -y autoclean
msg_ok "Cleaned" msg_ok "Cleaned"

View File

@@ -31,7 +31,7 @@ msg_ok "Installed Dependencies"
msg_info "Installing NZBGet" msg_info "Installing NZBGet"
mkdir -p /etc/apt/keyrings mkdir -p /etc/apt/keyrings
curl -fsSL https://nzbgetcom.github.io/nzbgetcom.asc | gpg --dearmor -o /etc/apt/keyrings/nzbgetcom.gpg curl -fsSL https://nzbgetcom.github.io/nzbgetcom.asc | gpg --dearmor -o /etc/apt/keyrings/nzbgetcom.gpg
echo "deb [signed-by=/etc/apt/keyrings/nzbgetcom.gpg] https://nzbgetcom.github.io/deb stable main" >/etc/apt/sources.list.d/nzbgetcom.list echo "deb [arch=all signed-by=/etc/apt/keyrings/nzbgetcom.gpg] https://nzbgetcom.github.io/deb stable main" >/etc/apt/sources.list.d/nzbgetcom.list
$STD apt-get update $STD apt-get update
$STD apt-get install -y nzbget $STD apt-get install -y nzbget
msg_ok "Installed NZBGet" msg_ok "Installed NZBGet"

43
json/habitica.json Normal file
View File

@@ -0,0 +1,43 @@
{
"name": "Habitica",
"slug": "habitica",
"categories": [
24
],
"date_created": "2025-03-03",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8080,
"documentation": "https://github.com/HabitRPG/habitica/wiki",
"website": "https://habitica.com/",
"logo": "https://github.com/HabitRPG/habitica/raw/refs/heads/develop/website/client/src/assets/svg/logo.svg",
"description": "Habitica is an open-source habit-building program that treats your life like a role-playing game. Level up as you succeed, lose HP as you fail, and earn Gold to buy weapons and armor!",
"install_methods": [
{
"type": "default",
"script": "ct/habitica.sh",
"resources": {
"cpu": 2,
"ram": 4096,
"hdd": 8,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "It takes a minute or two after installation for web UI to start, please be patient.",
"type": "info"
},
{
"text": "Config file is at `/opt/habitica/config.json`",
"type": "info"
}
]
}

View File

@@ -30,10 +30,5 @@
"username": null, "username": null,
"password": null "password": null
}, },
"notes": [ "notes": []
{ }
"text": "Linkwarden > 2.8.2 needs Monolith, More info: `https://github.com/community-scripts/ProxmoxVE/discussions/305`",
"type": "info"
}
]
}

View File

@@ -8,7 +8,7 @@
"type": "ct", "type": "ct",
"updateable": true, "updateable": true,
"privileged": false, "privileged": false,
"interface_port": 9000, "interface_port": 9001,
"documentation": "https://min.io/docs/minio/linux/index.html", "documentation": "https://min.io/docs/minio/linux/index.html",
"website": "https://min.io/", "website": "https://min.io/",
"logo": "https://raw.githubusercontent.com/minio/minio/refs/heads/master/.github/logo.svg", "logo": "https://raw.githubusercontent.com/minio/minio/refs/heads/master/.github/logo.svg",

View File

@@ -43,7 +43,7 @@
}, },
"notes": [ "notes": [
{ {
"text": "You can find the post-install guide here: https://github.com/community-scripts/ProxmoxVE/discussions/410", "text": "You can find the post-install guide here: `https://github.com/community-scripts/ProxmoxVE/discussions/410`",
"type": "info" "type": "info"
} }
] ]