mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-12-16 20:23:32 +01:00
Compare commits
40 Commits
2025-02-09
...
2025-02-10
| Author | SHA1 | Date | |
|---|---|---|---|
| 8595675531 | |||
| 70435b9e5a | |||
| 1731f5274b | |||
| 6a775f6026 | |||
| 0b3e63bd3f | |||
| 514ff1fbe7 | |||
| 85bf9f319b | |||
| dff4e735f0 | |||
| b81b9c574b | |||
| f82eb87476 | |||
| d47bd677da | |||
| 2c32b7fa94 | |||
| 4d996c95e0 | |||
| 90473b7b10 | |||
| e4f756ce73 | |||
| 10159e934f | |||
| 865e6fd3d7 | |||
| a1dd57ded6 | |||
| 1c808b95a8 | |||
| 0c024515f1 | |||
| 4c7d82f4eb | |||
| e4ee00b403 | |||
| d380fdd0ea | |||
| 9756ac639b | |||
| 7105f67145 | |||
| 35547c4316 | |||
| ccc71a7225 | |||
| c5101d3358 | |||
| 5bbf197a8d | |||
| 70b5c62c9f | |||
| 33ef8aadbe | |||
| e989bbba29 | |||
| 3f35900914 | |||
| e5f738b567 | |||
| 6fc357ecd0 | |||
| 758659a91e | |||
| b05858c6e9 | |||
| a481e89cad | |||
| b9094e306e | |||
| 31c8617258 |
@ -30,8 +30,6 @@ body:
|
|||||||
required: true
|
required: true
|
||||||
- label: "I have searched existing [discussions](https://github.com/community-scripts/ProxmoxVE/discussions?discussions_q=) and found no duplicate requests."
|
- label: "I have searched existing [discussions](https://github.com/community-scripts/ProxmoxVE/discussions?discussions_q=) and found no duplicate requests."
|
||||||
required: true
|
required: true
|
||||||
- label: "This is not a game-related request."
|
|
||||||
required: true
|
|
||||||
- type: markdown
|
- type: markdown
|
||||||
attributes:
|
attributes:
|
||||||
value: "Thanks for submitting your request! The team will review it and reach out if we need more information."
|
value: "Thanks for submitting your request! The team will review it and reach out if we need more information."
|
||||||
|
|||||||
11
.github/autolabeler-config.json
vendored
11
.github/autolabeler-config.json
vendored
@ -23,7 +23,7 @@
|
|||||||
{
|
{
|
||||||
"fileStatus": "modified",
|
"fileStatus": "modified",
|
||||||
"includeGlobs": ["ct/**", "install/**", "misc/**", "turnkey/**", "vm/**"],
|
"includeGlobs": ["ct/**", "install/**", "misc/**", "turnkey/**", "vm/**"],
|
||||||
"excludeGlobs": ["misc/build.func", "misc/install.func"]
|
"excludeGlobs": ["misc/build.func", "misc/install.func", "misc/api.func"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"delete script": [
|
"delete script": [
|
||||||
@ -51,13 +51,20 @@
|
|||||||
{
|
{
|
||||||
"fileStatus": null,
|
"fileStatus": null,
|
||||||
"includeGlobs": ["*.md", ".github/**", "misc/*.func", "ct/create_lxc.sh"],
|
"includeGlobs": ["*.md", ".github/**", "misc/*.func", "ct/create_lxc.sh"],
|
||||||
|
"excludeGlobs": ["misc/api.func"]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"api": [
|
||||||
|
{
|
||||||
|
"fileStatus": null,
|
||||||
|
"includeGlobs": ["api/**", "misc/api.func"],
|
||||||
"excludeGlobs": []
|
"excludeGlobs": []
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"high risk": [
|
"high risk": [
|
||||||
{
|
{
|
||||||
"fileStatus": null,
|
"fileStatus": null,
|
||||||
"includeGlobs": ["misc/build.func", "misc/install.func"],
|
"includeGlobs": ["misc/build.func", "misc/install.func", "ct/create_lxc.sh"],
|
||||||
"excludeGlobs": []
|
"excludeGlobs": []
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
4
.github/changelog-pr-config.json
vendored
4
.github/changelog-pr-config.json
vendored
@ -23,6 +23,10 @@
|
|||||||
"title": "🧰 Maintenance",
|
"title": "🧰 Maintenance",
|
||||||
"labels": ["maintenance"]
|
"labels": ["maintenance"]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"title": "📡 API",
|
||||||
|
"labels": ["api"]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"title": "❔ Unlabelled",
|
"title": "❔ Unlabelled",
|
||||||
"labels": []
|
"labels": []
|
||||||
|
|||||||
34
.github/pull_request_template.md
vendored
34
.github/pull_request_template.md
vendored
@ -1,28 +1,28 @@
|
|||||||
## ✍️ Description
|
## ✍️ Description
|
||||||
|
<!-- Provide a clear and concise description of your changes. -->
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
## 🔗 Related PR / Discussion / Issue
|
||||||
|
Link: #
|
||||||
|
|
||||||
|
--
|
||||||
- - -
|
|
||||||
- Related Issue: #
|
|
||||||
- Related PR: #
|
|
||||||
- Related Discussion: #
|
|
||||||
- - -
|
|
||||||
|
|
||||||
|
|
||||||
## ✅ Prerequisites
|
## ✅ Prerequisites
|
||||||
The following steps must be completed for the pull request to be considered:
|
Before this PR can be reviewed, the following must be completed:
|
||||||
- [] Self-review performed (I have reviewed my code to ensure it follows established patterns and conventions.)
|
- [] **Self-review performed** – Code follows established patterns and conventions.
|
||||||
- [] Testing performed (I have thoroughly tested my changes and verified expected functionality.)
|
- [] **Testing performed** – Changes have been thoroughly tested and verified.
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
## 🛠️ Type of Change
|
## 🛠️ Type of Change
|
||||||
Please check the relevant options:
|
Select all that apply:
|
||||||
- [] Bug fix (non-breaking change that resolves an issue)
|
- [] 🐞 **Bug fix** – Resolves an issue without breaking functionality.
|
||||||
- [] New feature (non-breaking change that adds functionality)
|
- [] ✨ **New feature** – Adds new, non-breaking functionality.
|
||||||
- [] Breaking change (fix or feature that would cause existing functionality to change unexpectedly)
|
- [] 💥 **Breaking change** – Alters existing functionality in a way that may require updates.
|
||||||
- [] New script (a fully functional and thoroughly tested script or set of scripts)
|
- [] 🆕 **New script** – A fully functional and tested script or script set.
|
||||||
|
|
||||||
---
|
---
|
||||||
## 📋 Additional Information (optional)
|
|
||||||
Provide any extra context or screenshots about the feature or fix here.
|
|
||||||
|
|
||||||
|
## 📋 Additional Information (optional)
|
||||||
|
<!-- Provide extra context, screenshots, or references if needed. -->
|
||||||
|
|||||||
@ -17,6 +17,13 @@ jobs:
|
|||||||
pull-requests: write
|
pull-requests: write
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
- name: Generate a token
|
||||||
|
id: generate-token
|
||||||
|
uses: actions/create-github-app-token@v1
|
||||||
|
with:
|
||||||
|
app-id: ${{ vars.APP_ID }}
|
||||||
|
private-key: ${{ secrets.APP_PRIVATE_KEY }}
|
||||||
|
|
||||||
# Step 1: Checkout repository
|
# Step 1: Checkout repository
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
@ -71,7 +78,7 @@ jobs:
|
|||||||
--base main \
|
--base main \
|
||||||
--label "automated pr"
|
--label "automated pr"
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ steps.generate-token.outputs.token }}
|
||||||
|
|
||||||
- name: Approve pull request
|
- name: Approve pull request
|
||||||
if: env.changed == 'true'
|
if: env.changed == 'true'
|
||||||
|
|||||||
46
.github/workflows/changelog-pr.yml
vendored
46
.github/workflows/changelog-pr.yml
vendored
@ -30,15 +30,15 @@ jobs:
|
|||||||
|
|
||||||
- name: Get latest dates in changelog
|
- name: Get latest dates in changelog
|
||||||
run: |
|
run: |
|
||||||
# Extract the latest and second latest dates from changelog
|
# Extrahiere die neuesten zwei Daten aus dem Changelog
|
||||||
DATES=$(grep '^## [0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}' CHANGELOG.md | head -n 2 | awk '{print $2}')
|
DATES=$(grep -E '^## [0-9]{4}-[0-9]{2}-[0-9]{2}' CHANGELOG.md | head -n 2 | awk '{print $2}')
|
||||||
|
|
||||||
LATEST_DATE=$(echo "$DATES" | sed -n '1p')
|
LATEST_DATE=$(echo "$DATES" | sed -n '1p')
|
||||||
SECOND_LATEST_DATE=$(echo "$DATES" | sed -n '2p')
|
SECOND_LATEST_DATE=$(echo "$DATES" | sed -n '2p')
|
||||||
TODAY=$(date -u +%Y-%m-%d)
|
TODAY=$(date -u +%Y-%m-%d)
|
||||||
|
|
||||||
echo "TODAY=$TODAY" >> $GITHUB_ENV
|
echo "TODAY=$TODAY" >> $GITHUB_ENV
|
||||||
if [ "$LATEST_DATE" == "$TODAY" ]; then
|
if [[ "$LATEST_DATE" == "$TODAY" ]]; then
|
||||||
echo "LATEST_DATE=$SECOND_LATEST_DATE" >> $GITHUB_ENV
|
echo "LATEST_DATE=$SECOND_LATEST_DATE" >> $GITHUB_ENV
|
||||||
else
|
else
|
||||||
echo "LATEST_DATE=$LATEST_DATE" >> $GITHUB_ENV
|
echo "LATEST_DATE=$LATEST_DATE" >> $GITHUB_ENV
|
||||||
@ -55,7 +55,7 @@ jobs:
|
|||||||
const configPath = path.resolve(process.env.CONFIG_PATH);
|
const configPath = path.resolve(process.env.CONFIG_PATH);
|
||||||
const fileContent = await fs.readFile(configPath, 'utf-8');
|
const fileContent = await fs.readFile(configPath, 'utf-8');
|
||||||
const changelogConfig = JSON.parse(fileContent);
|
const changelogConfig = JSON.parse(fileContent);
|
||||||
const categorizedPRs = changelogConfig.map((obj) => ({ ...obj, notes: [] }));
|
const categorizedPRs = changelogConfig.map(obj => ({ ...obj, notes: [] }));
|
||||||
|
|
||||||
const latestDateInChangelog = new Date(process.env.LATEST_DATE);
|
const latestDateInChangelog = new Date(process.env.LATEST_DATE);
|
||||||
latestDateInChangelog.setUTCHours(23, 59, 59, 999);
|
latestDateInChangelog.setUTCHours(23, 59, 59, 999);
|
||||||
@ -70,18 +70,16 @@ jobs:
|
|||||||
per_page: 100,
|
per_page: 100,
|
||||||
});
|
});
|
||||||
|
|
||||||
pulls.filter((pr) =>
|
pulls.filter(pr =>
|
||||||
pr.merged_at &&
|
pr.merged_at &&
|
||||||
new Date(pr.merged_at) > latestDateInChangelog &&
|
new Date(pr.merged_at) > latestDateInChangelog &&
|
||||||
!pr.labels.some((label) => ["invalid", "wontdo", process.env.AUTOMATED_PR_LABEL].includes(label.name.toLowerCase()))
|
!pr.labels.some(label => ["invalid", "wontdo", process.env.AUTOMATED_PR_LABEL].includes(label.name.toLowerCase()))
|
||||||
).forEach((pr) => {
|
).forEach(pr => {
|
||||||
const prLabels = pr.labels.map((label) => label.name.toLowerCase());
|
const prLabels = pr.labels.map(label => label.name.toLowerCase());
|
||||||
const prNote = `- ${pr.title} [@${pr.user.login}](https://github.com/${pr.user.login}) ([#${pr.number}](${pr.html_url}))`;
|
const prNote = `- ${pr.title} [@${pr.user.login}](https://github.com/${pr.user.login}) ([#${pr.number}](${pr.html_url}))`;
|
||||||
|
|
||||||
for (const { labels, notes } of categorizedPRs) {
|
for (const { labels, notes } of categorizedPRs) {
|
||||||
const prHasCategoryLabel = labels.some((label) => prLabels.includes(label));
|
if (labels.length === 0 || labels.some(label => prLabels.includes(label))) {
|
||||||
const isUnlabelledCategory = labels.length === 0;
|
|
||||||
if (prHasCategoryLabel || isUnlabelledCategory) {
|
|
||||||
notes.push(prNote);
|
notes.push(prNote);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -102,7 +100,7 @@ jobs:
|
|||||||
const changelogPath = path.resolve('CHANGELOG.md');
|
const changelogPath = path.resolve('CHANGELOG.md');
|
||||||
const categorizedPRs = ${{ steps.get-categorized-prs.outputs.result }};
|
const categorizedPRs = ${{ steps.get-categorized-prs.outputs.result }};
|
||||||
|
|
||||||
let newReleaseNotes = `## ${today}\n\n### Changed\n\n`;
|
let newReleaseNotes = `## ${today}\n\n### Changes\n\n`;
|
||||||
for (const { title, notes } of categorizedPRs) {
|
for (const { title, notes } of categorizedPRs) {
|
||||||
if (notes.length > 0) {
|
if (notes.length > 0) {
|
||||||
newReleaseNotes += `### ${title}\n\n${notes.join("\n")}\n\n`;
|
newReleaseNotes += `### ${title}\n\n${notes.join("\n")}\n\n`;
|
||||||
@ -112,21 +110,21 @@ jobs:
|
|||||||
const changelogContent = await fs.readFile(changelogPath, 'utf-8');
|
const changelogContent = await fs.readFile(changelogPath, 'utf-8');
|
||||||
const changelogIncludesTodaysReleaseNotes = changelogContent.includes(`\n## ${today}`);
|
const changelogIncludesTodaysReleaseNotes = changelogContent.includes(`\n## ${today}`);
|
||||||
|
|
||||||
// Replace todays release notes or insert release notes above previous release notes
|
// Ersetze oder füge Release Notes ein
|
||||||
const regex = changelogIncludesTodaysReleaseNotes ?
|
const regex = changelogIncludesTodaysReleaseNotes
|
||||||
new RegExp(`## ${today}.*(?=## ${latestDateInChangelog})`, "gs") :
|
? new RegExp(`## ${today}.*(?=## ${latestDateInChangelog})`, "gs")
|
||||||
new RegExp(`(?=## ${latestDateInChangelog})`, "gs");
|
: new RegExp(`(?=## ${latestDateInChangelog})`, "gs");
|
||||||
|
|
||||||
const newChangelogContent = changelogContent.replace(regex, newReleaseNotes)
|
const newChangelogContent = changelogContent.replace(regex, newReleaseNotes);
|
||||||
await fs.writeFile(changelogPath, newChangelogContent);
|
await fs.writeFile(changelogPath, newChangelogContent);
|
||||||
|
|
||||||
- name: Check if there are any changes
|
- name: Check for changes
|
||||||
id: verify-diff
|
id: verify-diff
|
||||||
run: |
|
run: |
|
||||||
git diff --quiet . || echo "changed=true" >> $GITHUB_OUTPUT
|
git diff --quiet . || echo "changed=true" >> $GITHUB_ENV
|
||||||
|
|
||||||
- name: Commit and push changes to separate branch
|
- name: Commit and push changes
|
||||||
if: steps.verify-diff.outputs.changed == 'true'
|
if: env.changed == 'true'
|
||||||
run: |
|
run: |
|
||||||
git config --global user.name "github-actions[bot]"
|
git config --global user.name "github-actions[bot]"
|
||||||
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
||||||
@ -136,7 +134,7 @@ jobs:
|
|||||||
git push origin $BRANCH_NAME --force
|
git push origin $BRANCH_NAME --force
|
||||||
|
|
||||||
- name: Create pull request if not exists
|
- name: Create pull request if not exists
|
||||||
if: steps.verify-diff.outputs.changed == 'true'
|
if: env.changed == 'true'
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ steps.generate-token.outputs.token }}
|
GH_TOKEN: ${{ steps.generate-token.outputs.token }}
|
||||||
run: |
|
run: |
|
||||||
@ -150,7 +148,7 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Approve pull request
|
- name: Approve pull request
|
||||||
if: steps.verify-diff.outputs.changed == 'true'
|
if: env.changed == 'true'
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
run: |
|
run: |
|
||||||
@ -160,7 +158,7 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Re-approve pull request after update
|
- name: Re-approve pull request after update
|
||||||
if: steps.verify-diff.outputs.changed == 'true'
|
if: env.changed == 'true'
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
36
CHANGELOG.md
36
CHANGELOG.md
@ -17,6 +17,42 @@ All LXC instances created using this repository come pre-installed with Midnight
|
|||||||
Do not break established syntax in this file, as it is automatically updated by a Github Workflow
|
Do not break established syntax in this file, as it is automatically updated by a Github Workflow
|
||||||
|
|
||||||
|
|
||||||
|
## 2025-02-10
|
||||||
|
|
||||||
|
### Changes
|
||||||
|
|
||||||
|
### 💥 Breaking Changes
|
||||||
|
|
||||||
|
- [Fix] Filebrowser - Add Static Path for DB [@MickLesk](https://github.com/MickLesk) ([#2207](https://github.com/community-scripts/ProxmoxVE/pull/2207))
|
||||||
|
|
||||||
|
### ✨ New Scripts
|
||||||
|
|
||||||
|
- New Script: Prometheus Paperless-NGX Exporter [@andygrunwald](https://github.com/andygrunwald) ([#2153](https://github.com/community-scripts/ProxmoxVE/pull/2153))
|
||||||
|
- New Script: Proxmox Mail Gateway [@thost96](https://github.com/thost96) ([#1906](https://github.com/community-scripts/ProxmoxVE/pull/1906))
|
||||||
|
- New Script: FreshRSS [@bvdberg01](https://github.com/bvdberg01) ([#2226](https://github.com/community-scripts/ProxmoxVE/pull/2226))
|
||||||
|
- New Script: Zitadel [@dave-yap](https://github.com/dave-yap) ([#2141](https://github.com/community-scripts/ProxmoxVE/pull/2141))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Feature: Automatic Deletion of choosen LXC's (lxc-delete.sh) [@MickLesk](https://github.com/MickLesk) ([#2228](https://github.com/community-scripts/ProxmoxVE/pull/2228))
|
||||||
|
- Quickfix: Crafty-Controller remove unnecessary \ [@MickLesk](https://github.com/MickLesk) ([#2233](https://github.com/community-scripts/ProxmoxVE/pull/2233))
|
||||||
|
- Fix: Crafty-Controller java versions and set default [@CrazyWolf13](https://github.com/CrazyWolf13) ([#2199](https://github.com/community-scripts/ProxmoxVE/pull/2199))
|
||||||
|
- Feature: Add optional Port for Filebrowser [@MickLesk](https://github.com/MickLesk) ([#2224](https://github.com/community-scripts/ProxmoxVE/pull/2224))
|
||||||
|
- [core] Prevent double spinner [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2203](https://github.com/community-scripts/ProxmoxVE/pull/2203))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- Website: Fix Zitadel Logo & Created-Date [@MickLesk](https://github.com/MickLesk) ([#2217](https://github.com/community-scripts/ProxmoxVE/pull/2217))
|
||||||
|
- Fixed URL typo zerotier-one.json [@Divaksh](https://github.com/Divaksh) ([#2206](https://github.com/community-scripts/ProxmoxVE/pull/2206))
|
||||||
|
- evcc.json Clarify the config file location [@mvdw](https://github.com/mvdw) ([#2193](https://github.com/community-scripts/ProxmoxVE/pull/2193))
|
||||||
|
|
||||||
|
### 🧰 Maintenance
|
||||||
|
|
||||||
|
- [gh]: Improve Workflows, Templates, Handling [@MickLesk](https://github.com/MickLesk) ([#2214](https://github.com/community-scripts/ProxmoxVE/pull/2214))
|
||||||
|
- [core] Fix app-header workflow and add API [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2204](https://github.com/community-scripts/ProxmoxVE/pull/2204))
|
||||||
|
- Fix: "read -p" does not support color formatting [@PhoenixEmik](https://github.com/PhoenixEmik) ([#2191](https://github.com/community-scripts/ProxmoxVE/pull/2191))
|
||||||
|
- [API] Add API to vms [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2021](https://github.com/community-scripts/ProxmoxVE/pull/2021))
|
||||||
|
|
||||||
## 2025-02-09
|
## 2025-02-09
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|||||||
46
ct/freshrss.sh
Normal file
46
ct/freshrss.sh
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
#!/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: bvdberg01
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/FreshRSS/FreshRSS
|
||||||
|
|
||||||
|
# App Default Values
|
||||||
|
APP="FreshRSS"
|
||||||
|
var_tags="RSS"
|
||||||
|
var_cpu="2"
|
||||||
|
var_ram="1024"
|
||||||
|
var_disk="4"
|
||||||
|
var_os="debian"
|
||||||
|
var_version="12"
|
||||||
|
var_unprivileged="1"
|
||||||
|
|
||||||
|
# App Output & Base Settings
|
||||||
|
header_info "$APP"
|
||||||
|
base_settings
|
||||||
|
|
||||||
|
# Core
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
if [[ ! -d /opt/freshrss ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
msg_error "FreshRSS should be updated via the user interface."
|
||||||
|
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}${CL}"
|
||||||
6
ct/headers/freshrss
Normal file
6
ct/headers/freshrss
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
______ __ ____ __________
|
||||||
|
/ ____/_______ _____/ /_ / __ \/ ___/ ___/
|
||||||
|
/ /_ / ___/ _ \/ ___/ __ \/ /_/ /\__ \\__ \
|
||||||
|
/ __/ / / / __(__ ) / / / _, _/___/ /__/ /
|
||||||
|
/_/ /_/ \___/____/_/ /_/_/ |_|/____/____/
|
||||||
|
|
||||||
6
ct/headers/prometheus-paperless-ngx-exporter
Normal file
6
ct/headers/prometheus-paperless-ngx-exporter
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
____ __ __ ____ __ _ _________ __ ______ __
|
||||||
|
/ __ \_________ ____ ___ ___ / /_/ /_ ___ __ _______ / __ \____ _____ ___ _____/ /__ __________ / | / / ____/ |/ / / ____/ ______ ____ _____/ /____ _____
|
||||||
|
/ /_/ / ___/ __ \/ __ `__ \/ _ \/ __/ __ \/ _ \/ / / / ___/_____/ /_/ / __ `/ __ \/ _ \/ ___/ / _ \/ ___/ ___/_____/ |/ / / __ | /_____/ __/ | |/_/ __ \/ __ \/ ___/ __/ _ \/ ___/
|
||||||
|
/ ____/ / / /_/ / / / / / / __/ /_/ / / / __/ /_/ (__ )_____/ ____/ /_/ / /_/ / __/ / / / __(__ |__ )_____/ /| / /_/ // /_____/ /____> </ /_/ / /_/ / / / /_/ __/ /
|
||||||
|
/_/ /_/ \____/_/ /_/ /_/\___/\__/_/ /_/\___/\__,_/____/ /_/ \__,_/ .___/\___/_/ /_/\___/____/____/ /_/ |_/\____//_/|_| /_____/_/|_/ .___/\____/_/ \__/\___/_/
|
||||||
|
/_/ /_/
|
||||||
6
ct/headers/proxmox-mail-gateway
Normal file
6
ct/headers/proxmox-mail-gateway
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
____ __ ___ _ __ ______ __
|
||||||
|
/ __ \_________ _ ______ ___ ____ _ __ / |/ /___ _(_) / / ____/___ _/ /____ _ ______ ___ __
|
||||||
|
/ /_/ / ___/ __ \| |/_/ __ `__ \/ __ \| |/_/_____/ /|_/ / __ `/ / /_____/ / __/ __ `/ __/ _ \ | /| / / __ `/ / / /
|
||||||
|
/ ____/ / / /_/ /> </ / / / / / /_/ /> </_____/ / / / /_/ / / /_____/ /_/ / /_/ / /_/ __/ |/ |/ / /_/ / /_/ /
|
||||||
|
/_/ /_/ \____/_/|_/_/ /_/ /_/\____/_/|_| /_/ /_/\__,_/_/_/ \____/\__,_/\__/\___/|__/|__/\__,_/\__, /
|
||||||
|
/____/
|
||||||
6
ct/headers/zitadel
Normal file
6
ct/headers/zitadel
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
_____ _ __ __ __
|
||||||
|
/__ / (_) /_____ _____/ /__ / /
|
||||||
|
/ / / / __/ __ `/ __ / _ \/ /
|
||||||
|
/ /__/ / /_/ /_/ / /_/ / __/ /
|
||||||
|
/____/_/\__/\__,_/\__,_/\___/_/
|
||||||
|
|
||||||
67
ct/prometheus-paperless-ngx-exporter.sh
Executable file
67
ct/prometheus-paperless-ngx-exporter.sh
Executable file
@ -0,0 +1,67 @@
|
|||||||
|
#!/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: Andy Grunwald (andygrunwald)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/hansmi/prometheus-paperless-exporter
|
||||||
|
|
||||||
|
# App Default Values
|
||||||
|
APP="Prometheus-Paperless-NGX-Exporter"
|
||||||
|
var_tags="monitoring;alerting"
|
||||||
|
var_cpu="1"
|
||||||
|
var_ram="256"
|
||||||
|
var_disk="2"
|
||||||
|
var_os="debian"
|
||||||
|
var_version="12"
|
||||||
|
var_unprivileged="1"
|
||||||
|
|
||||||
|
# App Output & Base Settings
|
||||||
|
header_info "$APP"
|
||||||
|
base_settings
|
||||||
|
|
||||||
|
# Core
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
if [[ ! -f /etc/systemd/system/prometheus-paperless-ngx-exporter.service ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/hansmi/prometheus-paperless-exporter/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||||
|
msg_info "Stopping ${APP}"
|
||||||
|
systemctl stop prometheus-paperless-ngx-exporter
|
||||||
|
msg_ok "Stopped ${APP}"
|
||||||
|
|
||||||
|
msg_info "Updating ${APP} to v${RELEASE}"
|
||||||
|
cd /opt
|
||||||
|
wget -q https://github.com/hansmi/prometheus-paperless-exporter/releases/download/v${RELEASE}/prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz
|
||||||
|
tar -xf prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz
|
||||||
|
cp -rf prometheus-paperless-exporter_${RELEASE}_linux_amd64/prometheus-paperless-exporter /usr/local/bin/
|
||||||
|
rm -rf prometheus-paperless-exporter_${RELEASE}_linux_amd64/ prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz
|
||||||
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
|
msg_ok "Updated ${APP} to v${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting ${APP}"
|
||||||
|
systemctl start prometheus-paperless-ngx-exporter
|
||||||
|
msg_ok "Started ${APP}"
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at v${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}:8081/metrics${CL}"
|
||||||
43
ct/proxmox-mail-gateway.sh
Normal file
43
ct/proxmox-mail-gateway.sh
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
#!/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: thost96 (thost96)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://www.proxmox.com/en/products/proxmox-mail-gateway
|
||||||
|
|
||||||
|
APP="Proxmox-Mail-Gateway"
|
||||||
|
var_tags="mail"
|
||||||
|
var_cpu="2"
|
||||||
|
var_ram="4096"
|
||||||
|
var_disk="10"
|
||||||
|
var_os="debian"
|
||||||
|
var_version="12"
|
||||||
|
var_unprivileged="1"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
base_settings
|
||||||
|
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
if [[ ! -e /usr/bin/pmgproxy ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
|
||||||
|
msg_info "Updating ${APP}"
|
||||||
|
apt-get update &>/dev/null
|
||||||
|
apt-get -y upgrade &>/dev/null
|
||||||
|
msg_ok "Updated ${APP}"
|
||||||
|
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}https://${IP}:8006/${CL}"
|
||||||
70
ct/zitadel.sh
Normal file
70
ct/zitadel.sh
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
#!/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: dave-yap (dave-yap)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://zitadel.com/
|
||||||
|
|
||||||
|
# App Default Values
|
||||||
|
APP="Zitadel"
|
||||||
|
var_tags="identity-provider"
|
||||||
|
var_cpu="1"
|
||||||
|
var_ram="1024"
|
||||||
|
var_disk="8"
|
||||||
|
var_os="debian"
|
||||||
|
var_version="12"
|
||||||
|
var_unprivileged="1"
|
||||||
|
|
||||||
|
# App Output & Base Settings
|
||||||
|
header_info "$APP"
|
||||||
|
base_settings
|
||||||
|
|
||||||
|
# Core
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
if [[ ! -f /etc/systemd/system/zitadel.service ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
RELEASE=$(curl -si https://github.com/zitadel/zitadel/releases/latest | grep location: | cut -d '/' -f 8 | tr -d '\r')
|
||||||
|
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt | grep -oP '\d+\.\d+\.\d+')" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
||||||
|
msg_info "Stopping $APP"
|
||||||
|
systemctl stop zitadel
|
||||||
|
msg_ok "Stopped $APP"
|
||||||
|
|
||||||
|
msg_info "Updating $APP to ${RELEASE}"
|
||||||
|
cd /tmp
|
||||||
|
wget -qc https://github.com/zitadel/zitadel/releases/download/$RELEASE/zitadel-linux-amd64.tar.gz -O - | tar -xz
|
||||||
|
mv zitadel-linux-amd64/zitadel /usr/local/bin
|
||||||
|
zitadel setup --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml --init-projections=true &>/dev/null
|
||||||
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
|
msg_ok "Updated $APP to ${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting $APP"
|
||||||
|
systemctl start zitadel
|
||||||
|
msg_ok "Started $APP"
|
||||||
|
|
||||||
|
msg_info "Cleaning Up"
|
||||||
|
rm -rf /tmp/zitadel-linux-amd64
|
||||||
|
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/ui/console${CL}"
|
||||||
@ -23,13 +23,22 @@ $STD apt-get install -y \
|
|||||||
lsb-release \
|
lsb-release \
|
||||||
apt-transport-https \
|
apt-transport-https \
|
||||||
coreutils \
|
coreutils \
|
||||||
software-properties-common \
|
software-properties-common
|
||||||
openjdk-17-jdk
|
|
||||||
wget -q https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.deb
|
|
||||||
$STD sudo dpkg -i jdk-21_linux-x64_bin.deb
|
|
||||||
rm -f jdk-21_linux-x64_bin.deb
|
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Setting up TermurinJDK"
|
||||||
|
wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public | gpg --dearmor | tee /etc/apt/trusted.gpg.d/adoptium.gpg > /dev/null
|
||||||
|
$STD echo "deb https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" | $STD tee /etc/apt/sources.list.d/adoptium.list
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get install -y \
|
||||||
|
temurin-8-jre \
|
||||||
|
temurin-11-jre \
|
||||||
|
temurin-17-jre \
|
||||||
|
temurin-21-jre \
|
||||||
|
temurin-23-jre
|
||||||
|
sudo update-alternatives --set java /usr/lib/jvm/temurin-21-jre-amd64/bin/java
|
||||||
|
msg_ok "Installed TermurinJDK"
|
||||||
|
|
||||||
msg_info "Setup Python3"
|
msg_info "Setup Python3"
|
||||||
$STD apt-get install -y \
|
$STD apt-get install -y \
|
||||||
python3 \
|
python3 \
|
||||||
|
|||||||
84
install/freshrss-install.sh
Normal file
84
install/freshrss-install.sh
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
#!/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 \
|
||||||
|
apache2 \
|
||||||
|
php-{curl,dom,json,ctype,pgsql,gmp,mbstring,iconv,zip} \
|
||||||
|
libapache2-mod-php
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
|
||||||
|
msg_info "Setting up PostgreSQL"
|
||||||
|
DB_NAME=freshrss
|
||||||
|
DB_USER=freshrss
|
||||||
|
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 "FreshRSS Credentials"
|
||||||
|
echo "FreshRSS Database User: $DB_USER"
|
||||||
|
echo "FreshRSS Database Password: $DB_PASS"
|
||||||
|
echo "FreshRSS Database Name: $DB_NAME"
|
||||||
|
} >> ~/freshrss.creds
|
||||||
|
msg_ok "Set up PostgreSQL"
|
||||||
|
|
||||||
|
msg_info "Installing FreshRSS"
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/FreshRSS/FreshRSS/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
|
cd /opt
|
||||||
|
wget -q "https://github.com/FreshRSS/FreshRSS/archive/refs/tags/${RELEASE}.zip"
|
||||||
|
unzip -q "${RELEASE}.zip"
|
||||||
|
mv "/opt/FreshRSS-${RELEASE}" /opt/freshrss
|
||||||
|
cd /opt/freshrss
|
||||||
|
chown -R www-data:www-data /opt/freshrss
|
||||||
|
chmod -R g+rX /opt/freshrss
|
||||||
|
chmod -R g+w /opt/freshrss/data/
|
||||||
|
msg_ok "Installed FreshRSS"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/apache2/sites-available/freshrss.conf
|
||||||
|
<VirtualHost *:80>
|
||||||
|
ServerName freshrss
|
||||||
|
DocumentRoot /opt/freshrss/p
|
||||||
|
|
||||||
|
<Directory /opt/freshrss/p>
|
||||||
|
Options FollowSymLinks
|
||||||
|
AllowOverride All
|
||||||
|
Require all granted
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
ErrorLog /var/log/apache2/freshrss_error.log
|
||||||
|
CustomLog /var/log/apache2/freshrss_access.log combined
|
||||||
|
|
||||||
|
AllowEncodedSlashes On
|
||||||
|
</VirtualHost>
|
||||||
|
EOF
|
||||||
|
$STD a2ensite freshrss
|
||||||
|
$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 "/opt/${RELEASE}.zip"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
64
install/prometheus-paperless-ngx-exporter-install.sh
Executable file
64
install/prometheus-paperless-ngx-exporter-install.sh
Executable file
@ -0,0 +1,64 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: Andy Grunwald (andygrunwald)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/hansmi/prometheus-paperless-exporter
|
||||||
|
|
||||||
|
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
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Installing Prometheus Paperless NGX Exporter"
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/hansmi/prometheus-paperless-exporter/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
wget -q https://github.com/hansmi/prometheus-paperless-exporter/releases/download/v${RELEASE}/prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz
|
||||||
|
tar -xf prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz
|
||||||
|
mv prometheus-paperless-exporter_${RELEASE}_linux_amd64/prometheus-paperless-exporter /usr/local/bin/
|
||||||
|
mkdir -p /etc/prometheus-paperless-ngx-exporter
|
||||||
|
cat <<EOF > /etc/prometheus-paperless-ngx-exporter/paperless_auth_token_file
|
||||||
|
SECRET_AUTH_TOKEN
|
||||||
|
EOF
|
||||||
|
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||||
|
msg_ok "Installed Prometheus Paperless NGX Exporter"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/prometheus-paperless-ngx-exporter.service
|
||||||
|
[Unit]
|
||||||
|
Description=Prometheus Paperless NGX Exporter
|
||||||
|
Wants=network-online.target
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
User=root
|
||||||
|
Restart=always
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/usr/local/bin/prometheus-paperless-exporter \
|
||||||
|
--paperless_url=http://paperless.example.org \
|
||||||
|
--paperless_auth_token_file=/etc/prometheus-paperless-ngx-exporter/paperless_auth_token_file
|
||||||
|
ExecReload=/bin/kill -HUP \$MAINPID
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now prometheus-paperless-ngx-exporter
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
rm -rf prometheus-paperless-exporter_${RELEASE}_linux_amd64/ prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz
|
||||||
|
msg_ok "Cleaned"
|
||||||
36
install/proxmox-mail-gateway-install.sh
Normal file
36
install/proxmox-mail-gateway-install.sh
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: thost96 (thost96)
|
||||||
|
# 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 -y install \
|
||||||
|
curl \
|
||||||
|
sudo \
|
||||||
|
mc \
|
||||||
|
wget
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Installing Proxmox Mail Gateway"
|
||||||
|
wget -q https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg
|
||||||
|
echo "deb http://download.proxmox.com/debian/pmg bookworm pmg-no-subscription" > /etc/apt/sources.list.d/pmg.list
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get -y install proxmox-mailgateway-container
|
||||||
|
msg_ok "Installed Proxmox Mail Gateway"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
155
install/zitadel-install.sh
Normal file
155
install/zitadel-install.sh
Normal file
@ -0,0 +1,155 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: dave-yap
|
||||||
|
# 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 \
|
||||||
|
ca-certificates \
|
||||||
|
wget
|
||||||
|
msg_ok "Installed Dependecies"
|
||||||
|
|
||||||
|
msg_info "Installing Postgresql"
|
||||||
|
$STD apt-get install -y postgresql postgresql-common
|
||||||
|
DB_NAME="zitadel"
|
||||||
|
DB_USER="zitadel"
|
||||||
|
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
|
||||||
|
DB_ADMIN_USER="root"
|
||||||
|
DB_ADMIN_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
|
||||||
|
systemctl start postgresql
|
||||||
|
$STD sudo -u postgres psql -c "CREATE USER $DB_USER WITH PASSWORD '$DB_PASS';"
|
||||||
|
$STD sudo -u postgres psql -c "CREATE USER $DB_ADMIN_USER WITH PASSWORD '$DB_ADMIN_PASS' SUPERUSER;"
|
||||||
|
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME OWNER $DB_ADMIN_USER;"
|
||||||
|
{
|
||||||
|
echo "Application Credentials"
|
||||||
|
echo "DB_NAME: $DB_NAME"
|
||||||
|
echo "DB_USER: $DB_USER"
|
||||||
|
echo "DB_PASS: $DB_PASS"
|
||||||
|
echo "DB_ADMIN_USER: $DB_ADMIN_USER"
|
||||||
|
echo "DB_ADMIN_PASS: $DB_ADMIN_PASS"
|
||||||
|
} >> ~/zitadel.creds
|
||||||
|
msg_ok "Installed PostgreSQL"
|
||||||
|
|
||||||
|
msg_info "Installing Zitadel"
|
||||||
|
RELEASE=$(curl -si https://github.com/zitadel/zitadel/releases/latest | grep location: | cut -d '/' -f 8 | tr -d '\r')
|
||||||
|
wget -qc https://github.com/zitadel/zitadel/releases/download/$RELEASE/zitadel-linux-amd64.tar.gz -O - | tar -xz
|
||||||
|
mv zitadel-linux-amd64/zitadel /usr/local/bin
|
||||||
|
echo "${RELEASE}" >"/opt/zitadel_version.txt"
|
||||||
|
msg_ok "Installed Zitadel"
|
||||||
|
|
||||||
|
msg_info "Setting up Zitadel Environments"
|
||||||
|
mkdir -p /opt/zitadel
|
||||||
|
echo "/opt/zitadel/config.yaml" > "/opt/zitadel/.config"
|
||||||
|
head -c 32 < <(openssl rand -base64 48 | tr -dc 'a-zA-Z0-9') > "/opt/zitadel/.masterkey"
|
||||||
|
{
|
||||||
|
echo "Config location: $(cat "/opt/zitadel/.config")"
|
||||||
|
echo "Masterkey: $(cat "/opt/zitadel/.masterkey")"
|
||||||
|
} >> ~/zitadel.creds
|
||||||
|
cat <<EOF >/opt/zitadel/config.yaml
|
||||||
|
Port: 8080
|
||||||
|
ExternalPort: 8080
|
||||||
|
ExternalDomain: localhost
|
||||||
|
ExternalSecure: false
|
||||||
|
TLS:
|
||||||
|
Enabled: false
|
||||||
|
KeyPath: ""
|
||||||
|
Key: ""
|
||||||
|
CertPath: ""
|
||||||
|
Cert: ""
|
||||||
|
|
||||||
|
Database:
|
||||||
|
postgres:
|
||||||
|
Host: localhost
|
||||||
|
Port: 5432
|
||||||
|
Database: ${DB_NAME}
|
||||||
|
User:
|
||||||
|
Username: ${DB_USER}
|
||||||
|
Password: ${DB_PASS}
|
||||||
|
SSL:
|
||||||
|
Mode: disable
|
||||||
|
RootCert: ""
|
||||||
|
Cert: ""
|
||||||
|
Key: ""
|
||||||
|
Admin:
|
||||||
|
Username: ${DB_ADMIN_USER}
|
||||||
|
Password: ${DB_ADMIN_PASS}
|
||||||
|
SSL:
|
||||||
|
Mode: disable
|
||||||
|
RootCert: ""
|
||||||
|
Cert: ""
|
||||||
|
Key: ""
|
||||||
|
EOF
|
||||||
|
msg_ok "Installed Zitadel Enviroments"
|
||||||
|
|
||||||
|
msg_info "Creating Services"
|
||||||
|
cat <<EOF >/etc/systemd/system/zitadel.service
|
||||||
|
[Unit]
|
||||||
|
Description=ZITADEL Identiy Server
|
||||||
|
After=network.target postgresql.service
|
||||||
|
Wants=postgresql.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=zitadel
|
||||||
|
Group=zitadel
|
||||||
|
ExecStart=/usr/local/bin/zitadel start --masterkeyFile "/opt/zitadel/.masterkey" --config "/opt/zitadel/config.yaml"
|
||||||
|
Restart=always
|
||||||
|
RestartSec=5
|
||||||
|
TimeoutStartSec=0
|
||||||
|
|
||||||
|
# Security Hardening options
|
||||||
|
ProtectSystem=full
|
||||||
|
ProtectHome=true
|
||||||
|
PrivateTmp=true
|
||||||
|
NoNewPrivileges=true
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q zitadel.service
|
||||||
|
msg_ok "Created Services"
|
||||||
|
|
||||||
|
msg_info "Zitadel initial setup"
|
||||||
|
zitadel start-from-init --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml &>/dev/null &
|
||||||
|
sleep 60
|
||||||
|
kill $(lsof -i | awk '/zitadel/ {print $2}' | head -n1)
|
||||||
|
useradd zitadel
|
||||||
|
echo -e "$(zitadel -v | grep -oP 'v\d+\.\d+\.\d+')" > /opt/Zitadel_version.txt
|
||||||
|
msg_ok "Zitadel initialized"
|
||||||
|
|
||||||
|
msg_info "Set ExternalDomain to current IP and restart Zitadel"
|
||||||
|
IP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1)
|
||||||
|
sed -i "0,/localhost/s/localhost/${IP}/" /opt/zitadel/config.yaml
|
||||||
|
systemctl stop -q zitadel.service
|
||||||
|
zitadel setup --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml &>/dev/null
|
||||||
|
systemctl restart -q zitadel.service
|
||||||
|
msg_ok "Zitadel restarted with ExternalDomain set to current IP"
|
||||||
|
|
||||||
|
msg_info "Create zitadel-rerun.sh"
|
||||||
|
cat <<EOF >~/zitadel-rerun.sh
|
||||||
|
systemctl stop zitadel.service
|
||||||
|
timeout --kill-after=5s 15s zitadel setup --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml
|
||||||
|
systemctl restart zitadel.service
|
||||||
|
EOF
|
||||||
|
msg_ok "Bash script for rerunning Zitadel after changing Zitadel config.yaml"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -rf ~/zitadel-linux-amd64
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
@ -32,7 +32,7 @@
|
|||||||
},
|
},
|
||||||
"notes": [
|
"notes": [
|
||||||
{
|
{
|
||||||
"text": "entering `evcc configure` in the LXC terminal will guide you through the creation of a configuration file for evcc.",
|
"text": "To configure evcc, type `cd /etc` followed by `evcc configure` in the evcc LXC shell",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
39
json/freshrss.json
Normal file
39
json/freshrss.json
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"name": "FreshRSS",
|
||||||
|
"slug": "freshrss",
|
||||||
|
"categories": [
|
||||||
|
12
|
||||||
|
],
|
||||||
|
"date_created": "2025-02-10",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 80,
|
||||||
|
"documentation": "https://freshrss.github.io/FreshRSS/en/",
|
||||||
|
"website": "https://freshrss.org/",
|
||||||
|
"logo": "https://freshrss.org/images/icon.svg",
|
||||||
|
"description": "FreshRSS is a self-hosted RSS and Atom feed aggregator that lets users collect, organize, and read from multiple sources in one place. It is lightweight, easy to work with, powerful, and customizable.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/freshrss.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 1024,
|
||||||
|
"hdd": 4,
|
||||||
|
"os": "Debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "Database credentials: `cat ~/freshrss.creds`",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
43
json/prometheus-paperless-ngx-exporter.json
Normal file
43
json/prometheus-paperless-ngx-exporter.json
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
{
|
||||||
|
"name": "Prometheus Paperless NGX Exporter",
|
||||||
|
"slug": "prometheus-paperless-ngx-exporter",
|
||||||
|
"categories": [
|
||||||
|
9
|
||||||
|
],
|
||||||
|
"date_created": "2025-02-07",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 3000,
|
||||||
|
"documentation": null,
|
||||||
|
"website": "https://github.com/hansmi/prometheus-paperless-exporter",
|
||||||
|
"logo": "https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/resources/logo/web/svg/square.svg",
|
||||||
|
"description": "Prometheus metrics exporter for Paperless-NGX, a document management system transforming physical documents into a searchable online archive. The exporter relies on Paperless' REST API.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/prometheus-paperless-ngx-exporter.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 256,
|
||||||
|
"hdd": 2,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "Please adjust the Paperless URL in the systemd unit file: /etc/systemd/system/prometheus-paperless-ngx-exporter.service",
|
||||||
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Please adjust the Paperless authentication token in the configuration file: /etc/prometheus-paperless-ngx-exporter/paperless_auth_token_file",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
39
json/proxmox-mail-gateway.json
Normal file
39
json/proxmox-mail-gateway.json
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"name": "Promox Mail Gateway",
|
||||||
|
"slug": "proxmox-mail-gateway",
|
||||||
|
"categories": [
|
||||||
|
1
|
||||||
|
],
|
||||||
|
"date_created": "2025-02-04",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 8006,
|
||||||
|
"documentation": "https://pmg.proxmox.com/pmg-docs/pmg-admin-guide.html",
|
||||||
|
"website": "https://www.proxmox.com/en/products/proxmox-mail-gateway/overview",
|
||||||
|
"logo": "https://raw.githubusercontent.com/home-assistant/brands/master/core_integrations/proxmoxve/icon.png",
|
||||||
|
"description": "Proxmox Mail Gateway is the leading open-source email security solution helping you to protect your mail server against all email threats from the moment they emerge.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/proxmox-mail-gateway.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 4096,
|
||||||
|
"hdd": 10,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": "root",
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "Set a root password if using autologin. This will be the PMG password. `passwd root`",
|
||||||
|
"type": "warning"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 3443,
|
"interface_port": 3443,
|
||||||
"documentation": "https://https://docs.zerotier.com/",
|
"documentation": "https://docs.zerotier.com/",
|
||||||
"website": "https://www.zerotier.com/",
|
"website": "https://www.zerotier.com/",
|
||||||
"logo": "https://www.zerotier.com/wp-content/uploads/2025/01/Logo-White.svg",
|
"logo": "https://www.zerotier.com/wp-content/uploads/2025/01/Logo-White.svg",
|
||||||
"description": "ZeroTier is a secure network overlay that allows you to manage all of your network resources as if they were on the same LAN. The software-defined solution can be deployed in minutes from anywhere. No matter how many devices you need to connect, or where they are in the world, ZeroTier makes global networking simple.",
|
"description": "ZeroTier is a secure network overlay that allows you to manage all of your network resources as if they were on the same LAN. The software-defined solution can be deployed in minutes from anywhere. No matter how many devices you need to connect, or where they are in the world, ZeroTier makes global networking simple.",
|
||||||
|
|||||||
43
json/zitadel.json
Normal file
43
json/zitadel.json
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
{
|
||||||
|
"name": "Zitadel",
|
||||||
|
"slug": "Zitadel",
|
||||||
|
"categories": [
|
||||||
|
6
|
||||||
|
],
|
||||||
|
"date_created": "2025-02-10",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 8080,
|
||||||
|
"documentation": "https://zitadel.com/docs/guides/overview",
|
||||||
|
"website": "https://zitadel.com",
|
||||||
|
"logo": "https://raw.githubusercontent.com/zitadel/zitadel/refs/heads/main/console/src/assets/icons/android-chrome-512x512.png",
|
||||||
|
"description": "Zitadel is an open-source identity and access management (IAM) solution designed to provide secure authentication, authorization, and user management for modern applications and services. Built with a focus on flexibility, scalability, and security, Zitadel offers a comprehensive set of features for developers and organizations looking to implement robust identity management.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/zitadel.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 1024,
|
||||||
|
"hdd": 8,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": "zitadel-admin@zitadel.localhost",
|
||||||
|
"password": "Password1!"
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "Application credentials: `cat ~/zitadel.creds`",
|
||||||
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Change the ExternalDomain value in `/opt/zitadel/config.yaml` to your domain/hostname/IP and run `bash zitadel-rerun.sh`",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@ -46,6 +46,9 @@ EOF
|
|||||||
|
|
||||||
post_to_api_vm() {
|
post_to_api_vm() {
|
||||||
|
|
||||||
|
if [[ ! -f /usr/local/community-scripts/diagnostics ]]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
DIAGNOSTICS=$(grep -i "^DIAGNOSTICS=" /usr/local/community-scripts/diagnostics | awk -F'=' '{print $2}')
|
DIAGNOSTICS=$(grep -i "^DIAGNOSTICS=" /usr/local/community-scripts/diagnostics | awk -F'=' '{print $2}')
|
||||||
if ! command -v curl &> /dev/null; then
|
if ! command -v curl &> /dev/null; then
|
||||||
return
|
return
|
||||||
@ -55,7 +58,6 @@ post_to_api_vm() {
|
|||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
if [ -z "$RANDOM_UUID" ]; then
|
if [ -z "$RANDOM_UUID" ]; then
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|||||||
@ -956,7 +956,8 @@ check_container_resources() {
|
|||||||
if [[ "$current_ram" -lt "$var_ram" ]] || [[ "$current_cpu" -lt "$var_cpu" ]]; then
|
if [[ "$current_ram" -lt "$var_ram" ]] || [[ "$current_cpu" -lt "$var_cpu" ]]; then
|
||||||
echo -e "\n${INFO}${HOLD} ${GN}Required: ${var_cpu} CPU, ${var_ram}MB RAM ${CL}| ${RD}Current: ${current_cpu} CPU, ${current_ram}MB RAM${CL}"
|
echo -e "\n${INFO}${HOLD} ${GN}Required: ${var_cpu} CPU, ${var_ram}MB RAM ${CL}| ${RD}Current: ${current_cpu} CPU, ${current_ram}MB RAM${CL}"
|
||||||
echo -e "${YWB}Please ensure that the ${APP} LXC is configured with at least ${var_cpu} vCPU and ${var_ram} MB RAM for the build process.${CL}\n"
|
echo -e "${YWB}Please ensure that the ${APP} LXC is configured with at least ${var_cpu} vCPU and ${var_ram} MB RAM for the build process.${CL}\n"
|
||||||
read -r -p "${INFO}${HOLD} May cause data loss! ${INFO} Continue update with under-provisioned LXC? <yes/No> " prompt
|
echo -ne "${INFO}${HOLD} May cause data loss! ${INFO} Continue update with under-provisioned LXC? <yes/No> "
|
||||||
|
read -r prompt
|
||||||
# Check if the input is 'yes', otherwise exit with status 1
|
# Check if the input is 'yes', otherwise exit with status 1
|
||||||
if [[ ! ${prompt,,} =~ ^(yes)$ ]]; then
|
if [[ ! ${prompt,,} =~ ^(yes)$ ]]; then
|
||||||
echo -e "${CROSS}${HOLD} ${YWB}Exiting based on user input.${CL}"
|
echo -e "${CROSS}${HOLD} ${YWB}Exiting based on user input.${CL}"
|
||||||
@ -975,7 +976,8 @@ check_container_storage() {
|
|||||||
if (( usage > 80 )); then
|
if (( usage > 80 )); then
|
||||||
# Prompt the user for confirmation to continue
|
# Prompt the user for confirmation to continue
|
||||||
echo -e "${INFO}${HOLD} ${YWB}Warning: Storage is dangerously low (${usage}%).${CL}"
|
echo -e "${INFO}${HOLD} ${YWB}Warning: Storage is dangerously low (${usage}%).${CL}"
|
||||||
read -r -p "Continue anyway? <y/N> " prompt
|
echo -ne "Continue anyway? <y/N> "
|
||||||
|
read -r prompt
|
||||||
# Check if the input is 'y' or 'yes', otherwise exit with status 1
|
# Check if the input is 'y' or 'yes', otherwise exit with status 1
|
||||||
if [[ ! ${prompt,,} =~ ^(y|yes)$ ]]; then
|
if [[ ! ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||||
echo -e "${CROSS}${HOLD}${YWB}Exiting based on user input.${CL}"
|
echo -e "${CROSS}${HOLD}${YWB}Exiting based on user input.${CL}"
|
||||||
|
|||||||
@ -26,8 +26,10 @@ INFO="${BL}ℹ️${CL}"
|
|||||||
APP="FileBrowser"
|
APP="FileBrowser"
|
||||||
INSTALL_PATH="/usr/local/bin/filebrowser"
|
INSTALL_PATH="/usr/local/bin/filebrowser"
|
||||||
SERVICE_PATH="/etc/systemd/system/filebrowser.service"
|
SERVICE_PATH="/etc/systemd/system/filebrowser.service"
|
||||||
DB_PATH="/root/filebrowser.db"
|
DB_PATH="/var/lib/filebrowser/filebrowser.db"
|
||||||
IP=$(hostname -I | awk '{print $1}')
|
IP=$(hostname -I | awk '{print $1}')
|
||||||
|
DEFAULT_PORT=8080
|
||||||
|
|
||||||
header_info
|
header_info
|
||||||
|
|
||||||
function msg_info() {
|
function msg_info() {
|
||||||
@ -69,6 +71,9 @@ if [ -f "$INSTALL_PATH" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
echo -e "${YW}⚠️ ${APP} is not installed.${CL}"
|
echo -e "${YW}⚠️ ${APP} is not installed.${CL}"
|
||||||
|
read -r -p "Enter port number (Default: ${DEFAULT_PORT}): " PORT
|
||||||
|
PORT=${PORT:-$DEFAULT_PORT}
|
||||||
|
|
||||||
read -r -p "Would you like to install ${APP}? (y/n): " install_prompt
|
read -r -p "Would you like to install ${APP}? (y/n): " install_prompt
|
||||||
if [[ "${install_prompt,,}" =~ ^(y|yes)$ ]]; then
|
if [[ "${install_prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||||
msg_info "Installing ${APP}"
|
msg_info "Installing ${APP}"
|
||||||
@ -76,38 +81,44 @@ if [[ "${install_prompt,,}" =~ ^(y|yes)$ ]]; then
|
|||||||
curl -fsSL https://github.com/filebrowser/filebrowser/releases/latest/download/linux-amd64-filebrowser.tar.gz | tar -xzv -C /usr/local/bin &>/dev/null
|
curl -fsSL https://github.com/filebrowser/filebrowser/releases/latest/download/linux-amd64-filebrowser.tar.gz | tar -xzv -C /usr/local/bin &>/dev/null
|
||||||
msg_ok "Installed ${APP}"
|
msg_ok "Installed ${APP}"
|
||||||
|
|
||||||
|
msg_info "Creating FileBrowser directory"
|
||||||
|
mkdir -p /var/lib/filebrowser
|
||||||
|
chown root:root /var/lib/filebrowser
|
||||||
|
chmod 755 /var/lib/filebrowser
|
||||||
|
msg_ok "Directory created successfully"
|
||||||
|
|
||||||
read -r -p "Would you like to use No Authentication? (y/N): " auth_prompt
|
read -r -p "Would you like to use No Authentication? (y/N): " auth_prompt
|
||||||
if [[ "${auth_prompt,,}" =~ ^(y|yes)$ ]]; then
|
if [[ "${auth_prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||||
msg_info "Configuring No Authentication"
|
msg_info "Configuring No Authentication"
|
||||||
filebrowser config init -a '0.0.0.0' &>/dev/null
|
filebrowser config init -a '0.0.0.0' -p "$PORT" --auth.method=noauth --database "$DB_PATH" &>/dev/null
|
||||||
filebrowser config set -a '0.0.0.0' --auth.method=noauth &>/dev/null
|
|
||||||
msg_ok "No Authentication configured"
|
msg_ok "No Authentication configured"
|
||||||
else
|
else
|
||||||
msg_info "Setting up default authentication"
|
msg_info "Setting up default authentication"
|
||||||
filebrowser config init -a '0.0.0.0' &>/dev/null
|
filebrowser config init -a '0.0.0.0' -p "$PORT" --database "$DB_PATH" &>/dev/null
|
||||||
filebrowser config set -a '0.0.0.0' &>/dev/null
|
filebrowser config set -a '0.0.0.0' -p "$PORT" --database "$DB_PATH" &>/dev/null
|
||||||
filebrowser users add admin helper-scripts.com --perm.admin &>/dev/null
|
filebrowser users add admin helper-scripts.com --perm.admin --database "$DB_PATH" &>/dev/null
|
||||||
msg_ok "Default authentication configured (admin:helper-scripts.com)"
|
msg_ok "Default authentication configured (admin:helper-scripts.com)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Creating service"
|
msg_info "Creating service"
|
||||||
cat <<EOF >/etc/systemd/system/filebrowser.service
|
cat <<EOF > "$SERVICE_PATH"
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Filebrowser
|
Description=Filebrowser
|
||||||
After=network-online.target
|
After=network-online.target
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
User=root
|
User=root
|
||||||
WorkingDirectory=/root/
|
WorkingDirectory=/var/lib/filebrowser/
|
||||||
ExecStart=/usr/local/bin/filebrowser -r /
|
ExecStart=/usr/local/bin/filebrowser -r / --database "$DB_PATH" -p "$PORT"
|
||||||
|
Restart=always
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=default.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
systemctl enable -q --now filebrowser.service
|
systemctl enable -q --now filebrowser.service
|
||||||
msg_ok "Service created successfully"
|
msg_ok "Service created successfully"
|
||||||
|
|
||||||
echo -e "${CM} ${GN}${APP} is reachable at: ${BL}http://$IP:8080${CL}"
|
echo -e "${CM} ${GN}${APP} is reachable at: ${BL}http://$IP:$PORT${CL}"
|
||||||
else
|
else
|
||||||
echo -e "${YW}⚠️ Installation skipped. Exiting.${CL}"
|
echo -e "${YW}⚠️ Installation skipped. Exiting.${CL}"
|
||||||
exit 0
|
exit 0
|
||||||
|
|||||||
@ -7,11 +7,11 @@
|
|||||||
function header_info {
|
function header_info {
|
||||||
clear
|
clear
|
||||||
cat <<"EOF"
|
cat <<"EOF"
|
||||||
____ ____ ____ _ __ __ _______ _ __ __ _ ________ ____ ________ __________________
|
____ __ _ ________ ____ __ __
|
||||||
/ __ \/ __ \/ __ \ |/ // |/ / __ \ |/ / / / | |/ / ____/ / __ \/ ____/ / / ____/_ __/ ____/
|
/ __ \_________ _ ______ ___ ____ _ __ / / | |/ / ____/ / __ \___ / /__ / /____
|
||||||
/ /_/ / /_/ / / / / // /|_/ / / / / / / / | / / / / / / __/ / / / __/ / / / __/
|
/ /_/ / ___/ __ \| |/_/ __ `__ \/ __ \| |/_/ / / | / / / / / / _ \/ / _ \/ __/ _ \
|
||||||
/ ____/ _, _/ /_/ / |/ / / / /_/ / | / /___/ / /___ / /_/ / /___/ /___/ /___ / / / /___
|
/ ____/ / / /_/ /> </ / / / / / /_/ /> < / /___/ / /___ / /_/ / __/ / __/ /_/ __/
|
||||||
/_/ /_/ |_|\____/_/|_/_/ /_/\____/_/|_| /_____/_/|_\____/ /_____/_____/_____/_____/ /_/ /_____/
|
/_/ /_/ \____/_/|_/_/ /_/ /_/\____/_/|_| /_____/_/|_\____/ /_____/\___/_/\___/\__/\___/
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
@ -33,29 +33,26 @@ set -eEuo pipefail
|
|||||||
YW=$(echo "\033[33m")
|
YW=$(echo "\033[33m")
|
||||||
BL=$(echo "\033[36m")
|
BL=$(echo "\033[36m")
|
||||||
RD=$(echo "\033[01;31m")
|
RD=$(echo "\033[01;31m")
|
||||||
CM='\xE2\x9C\x94\033'
|
|
||||||
GN=$(echo "\033[1;92m")
|
GN=$(echo "\033[1;92m")
|
||||||
CL=$(echo "\033[m")
|
CL=$(echo "\033[m")
|
||||||
|
TAB=" "
|
||||||
|
CM="${TAB}✔️${TAB}${CL}"
|
||||||
|
|
||||||
header_info
|
header_info
|
||||||
echo "Loading..."
|
echo "Loading..."
|
||||||
whiptail --backtitle "Proxmox VE Helper Scripts" --title "Proxmox VE LXC Deletion" --yesno "This Will Delete LXC Containers. Proceed?" 10 58 || exit
|
whiptail --backtitle "Proxmox VE Helper Scripts" --title "Proxmox VE LXC Deletion" --yesno "This will delete LXC containers. Proceed?" 10 58 || exit
|
||||||
|
|
||||||
NODE=$(hostname)
|
NODE=$(hostname)
|
||||||
|
|
||||||
# Get list of containers with ID and hostname
|
|
||||||
containers=$(pct list | tail -n +2 | awk '{print $0 " " $4}')
|
containers=$(pct list | tail -n +2 | awk '{print $0 " " $4}')
|
||||||
|
|
||||||
# Exit if no containers are found
|
|
||||||
if [ -z "$containers" ]; then
|
if [ -z "$containers" ]; then
|
||||||
whiptail --title "LXC Container Delete" --msgbox "There are no LXC Container available!" 10 60
|
whiptail --title "LXC Container Delete" --msgbox "No LXC containers available!" 10 60
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
menu_items=()
|
menu_items=()
|
||||||
FORMAT="%-10s %-15s %-10s"
|
FORMAT="%-10s %-15s %-10s"
|
||||||
|
|
||||||
# Format container data for menu display
|
|
||||||
while read -r container; do
|
while read -r container; do
|
||||||
container_id=$(echo $container | awk '{print $1}')
|
container_id=$(echo $container | awk '{print $1}')
|
||||||
container_name=$(echo $container | awk '{print $2}')
|
container_name=$(echo $container | awk '{print $2}')
|
||||||
@ -64,49 +61,50 @@ while read -r container; do
|
|||||||
menu_items+=("$container_id" "$formatted_line" "OFF")
|
menu_items+=("$container_id" "$formatted_line" "OFF")
|
||||||
done <<< "$containers"
|
done <<< "$containers"
|
||||||
|
|
||||||
# Display selection menu
|
|
||||||
CHOICES=$(whiptail --title "LXC Container Delete" \
|
CHOICES=$(whiptail --title "LXC Container Delete" \
|
||||||
--checklist "Choose LXC container to delete:" 25 60 13 \
|
--checklist "Select LXC containers to delete:" 25 60 13 \
|
||||||
"${menu_items[@]}" 3>&2 2>&1 1>&3)
|
"${menu_items[@]}" 3>&2 2>&1 1>&3)
|
||||||
|
|
||||||
if [ -z "$CHOICES" ]; then
|
if [ -z "$CHOICES" ]; then
|
||||||
whiptail --title "LXC Container Delete" \
|
whiptail --title "LXC Container Delete" \
|
||||||
--msgbox "No containers have been selected!" 10 60
|
--msgbox "No containers selected!" 10 60
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Process selected containers
|
read -p "Delete containers manually or automatically? (Default: manual) m/a: " DELETE_MODE
|
||||||
|
DELETE_MODE=${DELETE_MODE:-m}
|
||||||
|
|
||||||
selected_ids=$(echo "$CHOICES" | tr -d '"' | tr -s ' ' '\n')
|
selected_ids=$(echo "$CHOICES" | tr -d '"' | tr -s ' ' '\n')
|
||||||
|
|
||||||
for container_id in $selected_ids; do
|
for container_id in $selected_ids; do
|
||||||
status=$(pct status $container_id)
|
status=$(pct status $container_id)
|
||||||
|
|
||||||
# Stop container if running
|
|
||||||
if [ "$status" == "status: running" ]; then
|
if [ "$status" == "status: running" ]; then
|
||||||
echo -e "${BL}[Info]${GN} Stop container $container_id...${CL}"
|
echo -e "${BL}[Info]${GN} Stopping container $container_id...${CL}"
|
||||||
pct stop $container_id &
|
pct stop $container_id &
|
||||||
sleep 5
|
sleep 5
|
||||||
echo -e "${BL}[Info]${GN} Container $container_id stopped.${CL}"
|
echo -e "${BL}[Info]${GN} Container $container_id stopped.${CL}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Confirm deletion
|
if [[ "$DELETE_MODE" == "a" ]]; then
|
||||||
read -p "Are you sure you want to delete Container $container_id? (y/N): " CONFIRM
|
echo -e "${BL}[Info]${GN} Automatically deleting container $container_id...${CL}"
|
||||||
|
pct destroy "$container_id" -f &
|
||||||
|
pid=$!
|
||||||
|
spinner $pid
|
||||||
|
[ $? -eq 0 ] && echo "Container $container_id deleted." || whiptail --title "Error" --msgbox "Failed to delete container $container_id." 10 60
|
||||||
|
else
|
||||||
|
read -p "Delete container $container_id? (y/N): " CONFIRM
|
||||||
if [[ "$CONFIRM" =~ ^[Yy]$ ]]; then
|
if [[ "$CONFIRM" =~ ^[Yy]$ ]]; then
|
||||||
echo -e "${BL}[Info]${GN} Deleting container $container_id...${CL}"
|
echo -e "${BL}[Info]${GN} Deleting container $container_id...${CL}"
|
||||||
pct destroy "$container_id" -f &
|
pct destroy "$container_id" -f &
|
||||||
pid=$!
|
pid=$!
|
||||||
spinner $pid
|
spinner $pid
|
||||||
if [ $? -eq 0 ]; then
|
[ $? -eq 0 ] && echo "Container $container_id deleted." || whiptail --title "Error" --msgbox "Failed to delete container $container_id." 10 60
|
||||||
echo "Container $container_id was successfully deleted."
|
|
||||||
else
|
else
|
||||||
whiptail --title "Error" --msgbox "Error deleting container $container_id." 10 60
|
|
||||||
fi
|
|
||||||
elif [[ "$CONFIRM" =~ ^[Nn]$ ]]; then
|
|
||||||
echo -e "${BL}[Info]${RD} Skipping container $container_id...${CL}"
|
echo -e "${BL}[Info]${RD} Skipping container $container_id...${CL}"
|
||||||
else
|
fi
|
||||||
echo -e "${RD}[Error]${CL} Invalid input, skipping container $container_id."
|
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
header_info
|
header_info
|
||||||
echo -e "${GN}The deletion process has been completed.${CL}\n"
|
echo -e "${GN}Deletion process completed.${CL}\n"
|
||||||
|
|||||||
@ -4,6 +4,9 @@
|
|||||||
# Author: MickLesk (CanbiZ)
|
# Author: MickLesk (CanbiZ)
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
|
source /dev/stdin <<< $(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func)
|
||||||
|
|
||||||
|
|
||||||
function header_info {
|
function header_info {
|
||||||
clear
|
clear
|
||||||
cat <<"EOF"
|
cat <<"EOF"
|
||||||
@ -17,6 +20,12 @@ EOF
|
|||||||
}
|
}
|
||||||
header_info
|
header_info
|
||||||
echo -e "\n Loading..."
|
echo -e "\n Loading..."
|
||||||
|
#API VARIABLES
|
||||||
|
RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)"
|
||||||
|
METHOD=""
|
||||||
|
NSAPP="arch-linux-vm"
|
||||||
|
var_os="arch-linux"
|
||||||
|
var_version=" "
|
||||||
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
||||||
NEXTID=$(pvesh get /cluster/nextid)
|
NEXTID=$(pvesh get /cluster/nextid)
|
||||||
|
|
||||||
@ -56,10 +65,13 @@ THIN="discard=on,ssd=1,"
|
|||||||
set -e
|
set -e
|
||||||
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
||||||
trap cleanup EXIT
|
trap cleanup EXIT
|
||||||
|
trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT
|
||||||
|
trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM
|
||||||
function error_handler() {
|
function error_handler() {
|
||||||
local exit_code="$?"
|
local exit_code="$?"
|
||||||
local line_number="$1"
|
local line_number="$1"
|
||||||
local command="$2"
|
local command="$2"
|
||||||
|
post_update_to_api "failed" "${commad}"
|
||||||
local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
|
local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
|
||||||
echo -e "\n$error_message\n"
|
echo -e "\n$error_message\n"
|
||||||
cleanup_vmid
|
cleanup_vmid
|
||||||
@ -164,6 +176,7 @@ function default_settings() {
|
|||||||
VLAN=""
|
VLAN=""
|
||||||
MTU=""
|
MTU=""
|
||||||
START_VM="yes"
|
START_VM="yes"
|
||||||
|
METHOD="default"
|
||||||
echo -e "${CONTAINERID}${BOLD}${DGN}Virtual Machine ID: ${BGN}${VMID}${CL}"
|
echo -e "${CONTAINERID}${BOLD}${DGN}Virtual Machine ID: ${BGN}${VMID}${CL}"
|
||||||
echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}i440fx${CL}"
|
echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}i440fx${CL}"
|
||||||
echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE}${CL}"
|
echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE}${CL}"
|
||||||
@ -181,6 +194,7 @@ function default_settings() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function advanced_settings() {
|
function advanced_settings() {
|
||||||
|
METHOD="advanced"
|
||||||
while true; do
|
while true; do
|
||||||
if VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $NEXTID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
if VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $NEXTID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||||
if [ -z "$VMID" ]; then
|
if [ -z "$VMID" ]; then
|
||||||
@ -377,6 +391,7 @@ arch_check
|
|||||||
pve_check
|
pve_check
|
||||||
ssh_check
|
ssh_check
|
||||||
start_script
|
start_script
|
||||||
|
post_to_api_vm
|
||||||
|
|
||||||
msg_info "Validating Storage"
|
msg_info "Validating Storage"
|
||||||
while read -r line; do
|
while read -r line; do
|
||||||
@ -493,5 +508,6 @@ if [ "$START_VM" == "yes" ]; then
|
|||||||
qm start $VMID
|
qm start $VMID
|
||||||
msg_ok "Started Arch Linux VM"
|
msg_ok "Started Arch Linux VM"
|
||||||
fi
|
fi
|
||||||
|
post_update_to_api "done" "none"
|
||||||
|
|
||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed Successfully!\n"
|
||||||
|
|||||||
@ -4,6 +4,8 @@
|
|||||||
# Author: MickLesk (CanbiZ)
|
# Author: MickLesk (CanbiZ)
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
|
source /dev/stdin <<< $(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func)
|
||||||
|
|
||||||
function header_info {
|
function header_info {
|
||||||
clear
|
clear
|
||||||
cat <<"EOF"
|
cat <<"EOF"
|
||||||
@ -19,6 +21,11 @@ header_info
|
|||||||
echo -e "\n Loading..."
|
echo -e "\n Loading..."
|
||||||
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
||||||
NEXTID=$(pvesh get /cluster/nextid)
|
NEXTID=$(pvesh get /cluster/nextid)
|
||||||
|
RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)"
|
||||||
|
METHOD=""
|
||||||
|
NSAPP="debian12vm"
|
||||||
|
var_os="debian"
|
||||||
|
var_version="12"
|
||||||
|
|
||||||
YW=$(echo "\033[33m")
|
YW=$(echo "\033[33m")
|
||||||
BL=$(echo "\033[36m")
|
BL=$(echo "\033[36m")
|
||||||
@ -56,11 +63,14 @@ THIN="discard=on,ssd=1,"
|
|||||||
set -e
|
set -e
|
||||||
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
||||||
trap cleanup EXIT
|
trap cleanup EXIT
|
||||||
|
trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT
|
||||||
|
trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM
|
||||||
function error_handler() {
|
function error_handler() {
|
||||||
local exit_code="$?"
|
local exit_code="$?"
|
||||||
local line_number="$1"
|
local line_number="$1"
|
||||||
local command="$2"
|
local command="$2"
|
||||||
local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
|
local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
|
||||||
|
post_update_to_api "failed" "${command}"
|
||||||
echo -e "\n$error_message\n"
|
echo -e "\n$error_message\n"
|
||||||
cleanup_vmid
|
cleanup_vmid
|
||||||
}
|
}
|
||||||
@ -74,6 +84,7 @@ function cleanup_vmid() {
|
|||||||
|
|
||||||
function cleanup() {
|
function cleanup() {
|
||||||
popd >/dev/null
|
popd >/dev/null
|
||||||
|
post_update_to_api "done" "none"
|
||||||
rm -rf $TEMP_DIR
|
rm -rf $TEMP_DIR
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -164,6 +175,7 @@ function default_settings() {
|
|||||||
VLAN=""
|
VLAN=""
|
||||||
MTU=""
|
MTU=""
|
||||||
START_VM="yes"
|
START_VM="yes"
|
||||||
|
METHOD="default"
|
||||||
echo -e "${CONTAINERID}${BOLD}${DGN}Virtual Machine ID: ${BGN}${VMID}${CL}"
|
echo -e "${CONTAINERID}${BOLD}${DGN}Virtual Machine ID: ${BGN}${VMID}${CL}"
|
||||||
echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}i440fx${CL}"
|
echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}i440fx${CL}"
|
||||||
echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE}${CL}"
|
echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE}${CL}"
|
||||||
@ -181,6 +193,7 @@ function default_settings() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function advanced_settings() {
|
function advanced_settings() {
|
||||||
|
METHOD="advanced"
|
||||||
while true; do
|
while true; do
|
||||||
if VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $NEXTID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
if VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $NEXTID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||||
if [ -z "$VMID" ]; then
|
if [ -z "$VMID" ]; then
|
||||||
@ -378,6 +391,8 @@ pve_check
|
|||||||
ssh_check
|
ssh_check
|
||||||
start_script
|
start_script
|
||||||
|
|
||||||
|
post_to_api_vm
|
||||||
|
|
||||||
msg_info "Validating Storage"
|
msg_info "Validating Storage"
|
||||||
while read -r line; do
|
while read -r line; do
|
||||||
TAG=$(echo $line | awk '{print $1}')
|
TAG=$(echo $line | awk '{print $1}')
|
||||||
@ -439,7 +454,7 @@ done
|
|||||||
|
|
||||||
msg_info "Creating a Debian 12 VM"
|
msg_info "Creating a Debian 12 VM"
|
||||||
qm create $VMID -agent 1${MACHINE} -tablet 0 -localtime 1 -bios ovmf${CPU_TYPE} -cores $CORE_COUNT -memory $RAM_SIZE \
|
qm create $VMID -agent 1${MACHINE} -tablet 0 -localtime 1 -bios ovmf${CPU_TYPE} -cores $CORE_COUNT -memory $RAM_SIZE \
|
||||||
-name $HN -tags proxmox-helper-scripts -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU -onboot 1 -ostype l26 -scsihw virtio-scsi-pci
|
-name $HN -tags community-script -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU -onboot 1 -ostype l26 -scsihw virtio-scsi-pci
|
||||||
pvesm alloc $STORAGE $VMID $DISK0 4M 1>&/dev/null
|
pvesm alloc $STORAGE $VMID $DISK0 4M 1>&/dev/null
|
||||||
qm importdisk $VMID ${FILE} $STORAGE ${DISK_IMPORT:-} 1>&/dev/null
|
qm importdisk $VMID ${FILE} $STORAGE ${DISK_IMPORT:-} 1>&/dev/null
|
||||||
qm set $VMID \
|
qm set $VMID \
|
||||||
|
|||||||
@ -4,6 +4,8 @@
|
|||||||
# Author: thost96 (thost96)
|
# Author: thost96 (thost96)
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
|
source /dev/stdin <<< $(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func)
|
||||||
|
|
||||||
function header_info {
|
function header_info {
|
||||||
clear
|
clear
|
||||||
cat <<"EOF"
|
cat <<"EOF"
|
||||||
@ -19,6 +21,12 @@ header_info
|
|||||||
echo -e "\n Loading..."
|
echo -e "\n Loading..."
|
||||||
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
||||||
NEXTID=$(pvesh get /cluster/nextid)
|
NEXTID=$(pvesh get /cluster/nextid)
|
||||||
|
RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)"
|
||||||
|
METHOD=""
|
||||||
|
NSAPP="debian12vm"
|
||||||
|
var_os="debian"
|
||||||
|
var_version="12"
|
||||||
|
DISK_SIZE="8G"
|
||||||
|
|
||||||
YW=$(echo "\033[33m")
|
YW=$(echo "\033[33m")
|
||||||
BL=$(echo "\033[36m")
|
BL=$(echo "\033[36m")
|
||||||
@ -36,10 +44,13 @@ THIN="discard=on,ssd=1,"
|
|||||||
set -e
|
set -e
|
||||||
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
||||||
trap cleanup EXIT
|
trap cleanup EXIT
|
||||||
|
trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT
|
||||||
|
trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM
|
||||||
function error_handler() {
|
function error_handler() {
|
||||||
local exit_code="$?"
|
local exit_code="$?"
|
||||||
local line_number="$1"
|
local line_number="$1"
|
||||||
local command="$2"
|
local command="$2"
|
||||||
|
post_update_to_api "failed" "${command}"
|
||||||
local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
|
local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
|
||||||
echo -e "\n$error_message\n"
|
echo -e "\n$error_message\n"
|
||||||
cleanup_vmid
|
cleanup_vmid
|
||||||
@ -144,6 +155,7 @@ function default_settings() {
|
|||||||
VLAN=""
|
VLAN=""
|
||||||
MTU=""
|
MTU=""
|
||||||
START_VM="yes"
|
START_VM="yes"
|
||||||
|
METHOD="default"
|
||||||
echo -e "${DGN}Using Virtual Machine ID: ${BGN}${VMID}${CL}"
|
echo -e "${DGN}Using Virtual Machine ID: ${BGN}${VMID}${CL}"
|
||||||
echo -e "${DGN}Using Machine Type: ${BGN}i440fx${CL}"
|
echo -e "${DGN}Using Machine Type: ${BGN}i440fx${CL}"
|
||||||
echo -e "${DGN}Using Disk Cache: ${BGN}None${CL}"
|
echo -e "${DGN}Using Disk Cache: ${BGN}None${CL}"
|
||||||
@ -160,6 +172,7 @@ function default_settings() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function advanced_settings() {
|
function advanced_settings() {
|
||||||
|
METHOD="advanced"
|
||||||
while true; do
|
while true; do
|
||||||
if VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $NEXTID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
if VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $NEXTID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||||
if [ -z "$VMID" ]; then
|
if [ -z "$VMID" ]; then
|
||||||
@ -341,6 +354,7 @@ arch_check
|
|||||||
pve_check
|
pve_check
|
||||||
ssh_check
|
ssh_check
|
||||||
start_script
|
start_script
|
||||||
|
post_to_api_vm
|
||||||
|
|
||||||
msg_info "Validating Storage"
|
msg_info "Validating Storage"
|
||||||
while read -r line; do
|
while read -r line; do
|
||||||
@ -417,7 +431,7 @@ msg_ok "Added Docker and Docker Compose Plugin to Debian 12 Qcow2 Disk Image suc
|
|||||||
|
|
||||||
msg_info "Creating a Docker VM"
|
msg_info "Creating a Docker VM"
|
||||||
qm create $VMID -agent 1${MACHINE} -tablet 0 -localtime 1 -bios ovmf${CPU_TYPE} -cores $CORE_COUNT -memory $RAM_SIZE \
|
qm create $VMID -agent 1${MACHINE} -tablet 0 -localtime 1 -bios ovmf${CPU_TYPE} -cores $CORE_COUNT -memory $RAM_SIZE \
|
||||||
-name $HN -tags proxmox-helper-scripts,debian12,docker -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU -onboot 1 -ostype l26 -scsihw virtio-scsi-pci
|
-name $HN -tags community-script,debian12,docker -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU -onboot 1 -ostype l26 -scsihw virtio-scsi-pci
|
||||||
pvesm alloc $STORAGE $VMID $DISK0 4M 1>&/dev/null
|
pvesm alloc $STORAGE $VMID $DISK0 4M 1>&/dev/null
|
||||||
qm importdisk $VMID ${FILE} $STORAGE ${DISK_IMPORT:-} 1>&/dev/null
|
qm importdisk $VMID ${FILE} $STORAGE ${DISK_IMPORT:-} 1>&/dev/null
|
||||||
qm set $VMID \
|
qm set $VMID \
|
||||||
@ -465,4 +479,5 @@ if [ "$START_VM" == "yes" ]; then
|
|||||||
qm start $VMID
|
qm start $VMID
|
||||||
msg_ok "Started Docker VM"
|
msg_ok "Started Docker VM"
|
||||||
fi
|
fi
|
||||||
|
post_update_to_api "done" "none"
|
||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed Successfully!\n"
|
||||||
|
|||||||
@ -5,6 +5,9 @@
|
|||||||
# License: MIT
|
# License: MIT
|
||||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
|
source /dev/stdin <<< $(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func)
|
||||||
|
|
||||||
|
|
||||||
function header_info {
|
function header_info {
|
||||||
clear
|
clear
|
||||||
cat <<"EOF"
|
cat <<"EOF"
|
||||||
@ -21,6 +24,13 @@ echo -e "\n Loading..."
|
|||||||
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
||||||
NEXTID=$(pvesh get /cluster/nextid)
|
NEXTID=$(pvesh get /cluster/nextid)
|
||||||
VERSIONS=(stable beta dev)
|
VERSIONS=(stable beta dev)
|
||||||
|
#API VARIABLES
|
||||||
|
RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)"
|
||||||
|
METHOD=""
|
||||||
|
NSAPP="homeassistant-os"
|
||||||
|
var_os="homeassistant"
|
||||||
|
DISK_SIZE="32G"
|
||||||
|
#
|
||||||
for version in "${VERSIONS[@]}"; do
|
for version in "${VERSIONS[@]}"; do
|
||||||
eval "$version=$(curl -s https://raw.githubusercontent.com/home-assistant/version/master/$version.json | grep "ova" | cut -d '"' -f 4)"
|
eval "$version=$(curl -s https://raw.githubusercontent.com/home-assistant/version/master/$version.json | grep "ova" | cut -d '"' -f 4)"
|
||||||
done
|
done
|
||||||
@ -41,6 +51,8 @@ SPINNER_PID=""
|
|||||||
set -Eeuo pipefail
|
set -Eeuo pipefail
|
||||||
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
||||||
trap cleanup EXIT
|
trap cleanup EXIT
|
||||||
|
trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT
|
||||||
|
trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM
|
||||||
|
|
||||||
function error_handler() {
|
function error_handler() {
|
||||||
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID > /dev/null; then kill $SPINNER_PID > /dev/null; fi
|
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID > /dev/null; then kill $SPINNER_PID > /dev/null; fi
|
||||||
@ -48,6 +60,7 @@ function error_handler() {
|
|||||||
local exit_code="$?"
|
local exit_code="$?"
|
||||||
local line_number="$1"
|
local line_number="$1"
|
||||||
local command="$2"
|
local command="$2"
|
||||||
|
post_update_to_api "failed" "${command}"
|
||||||
local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
|
local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
|
||||||
echo -e "\n$error_message\n"
|
echo -e "\n$error_message\n"
|
||||||
cleanup_vmid
|
cleanup_vmid
|
||||||
@ -167,6 +180,8 @@ function default_settings() {
|
|||||||
VLAN=""
|
VLAN=""
|
||||||
MTU=""
|
MTU=""
|
||||||
START_VM="yes"
|
START_VM="yes"
|
||||||
|
METHOD="default"
|
||||||
|
var_version="${stable}"
|
||||||
echo -e "${DGN}Using HAOS Version: ${BGN}${BRANCH}${CL}"
|
echo -e "${DGN}Using HAOS Version: ${BGN}${BRANCH}${CL}"
|
||||||
echo -e "${DGN}Using Virtual Machine ID: ${BGN}${VMID}${CL}"
|
echo -e "${DGN}Using Virtual Machine ID: ${BGN}${VMID}${CL}"
|
||||||
echo -e "${DGN}Using Machine Type: ${BGN}i440fx${CL}"
|
echo -e "${DGN}Using Machine Type: ${BGN}i440fx${CL}"
|
||||||
@ -184,11 +199,13 @@ function default_settings() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function advanced_settings() {
|
function advanced_settings() {
|
||||||
|
METHOD="advanced"
|
||||||
if BRANCH=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "HAOS VERSION" --radiolist "Choose Version" --cancel-button Exit-Script 10 58 3 \
|
if BRANCH=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "HAOS VERSION" --radiolist "Choose Version" --cancel-button Exit-Script 10 58 3 \
|
||||||
"$stable" "Stable " ON \
|
"$stable" "Stable " ON \
|
||||||
"$beta" "Beta " OFF \
|
"$beta" "Beta " OFF \
|
||||||
"$dev" "Dev " OFF \
|
"$dev" "Dev " OFF \
|
||||||
3>&1 1>&2 2>&3); then
|
3>&1 1>&2 2>&3); then
|
||||||
|
var_version="${BRANCH}"
|
||||||
echo -e "${DGN}Using HAOS Version: ${BGN}$BRANCH${CL}"
|
echo -e "${DGN}Using HAOS Version: ${BGN}$BRANCH${CL}"
|
||||||
else
|
else
|
||||||
exit-script
|
exit-script
|
||||||
@ -376,6 +393,9 @@ pve_check
|
|||||||
ssh_check
|
ssh_check
|
||||||
start_script
|
start_script
|
||||||
|
|
||||||
|
|
||||||
|
post_to_api_vm
|
||||||
|
|
||||||
msg_info "Validating Storage"
|
msg_info "Validating Storage"
|
||||||
while read -r line; do
|
while read -r line; do
|
||||||
TAG=$(echo $line | awk '{print $1}')
|
TAG=$(echo $line | awk '{print $1}')
|
||||||
@ -463,4 +483,7 @@ if [ "$START_VM" == "yes" ]; then
|
|||||||
qm start $VMID
|
qm start $VMID
|
||||||
msg_ok "Started Home Assistant OS VM"
|
msg_ok "Started Home Assistant OS VM"
|
||||||
fi
|
fi
|
||||||
|
post_update_to_api "done" "none"
|
||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed Successfully!\n"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -5,6 +5,9 @@
|
|||||||
# License: MIT
|
# License: MIT
|
||||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
|
source /dev/stdin <<< $(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func)
|
||||||
|
|
||||||
|
|
||||||
function header_info {
|
function header_info {
|
||||||
cat <<"EOF"
|
cat <<"EOF"
|
||||||
__ ____ __ __ _ __ ____ __ ____ _____ ________ ______
|
__ ____ __ __ _ __ ____ __ ____ _____ ________ ______
|
||||||
@ -20,6 +23,14 @@ header_info
|
|||||||
echo -e "Loading..."
|
echo -e "Loading..."
|
||||||
GEN_MAC=$(echo '00 60 2f'$(od -An -N3 -t xC /dev/urandom) | sed -e 's/ /:/g' | tr '[:lower:]' '[:upper:]')
|
GEN_MAC=$(echo '00 60 2f'$(od -An -N3 -t xC /dev/urandom) | sed -e 's/ /:/g' | tr '[:lower:]' '[:upper:]')
|
||||||
NEXTID=$(pvesh get /cluster/nextid)
|
NEXTID=$(pvesh get /cluster/nextid)
|
||||||
|
#API VARIABLES
|
||||||
|
RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)"
|
||||||
|
METHOD=""
|
||||||
|
NSAPP="mikrotik-router-os"
|
||||||
|
var_os="mikrotik"
|
||||||
|
var_version=" "
|
||||||
|
DISK_SIZE="1G"
|
||||||
|
#
|
||||||
YW=$(echo "\033[33m")
|
YW=$(echo "\033[33m")
|
||||||
BL=$(echo "\033[36m")
|
BL=$(echo "\033[36m")
|
||||||
HA=$(echo "\033[1;34m")
|
HA=$(echo "\033[1;34m")
|
||||||
@ -39,6 +50,8 @@ shopt -s expand_aliases
|
|||||||
alias die='EXIT=$? LINE=$LINENO error_exit'
|
alias die='EXIT=$? LINE=$LINENO error_exit'
|
||||||
trap die ERR
|
trap die ERR
|
||||||
trap cleanup EXIT
|
trap cleanup EXIT
|
||||||
|
trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT
|
||||||
|
trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM
|
||||||
function error_exit() {
|
function error_exit() {
|
||||||
trap - ERR
|
trap - ERR
|
||||||
local reason="Unknown failure occurred."
|
local reason="Unknown failure occurred."
|
||||||
@ -86,6 +99,7 @@ function msg_ok() {
|
|||||||
echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
|
echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
|
||||||
}
|
}
|
||||||
function default_settings() {
|
function default_settings() {
|
||||||
|
METHOD="default"
|
||||||
echo -e "${DGN}Using Virtual Machine ID: ${BGN}$NEXTID${CL}"
|
echo -e "${DGN}Using Virtual Machine ID: ${BGN}$NEXTID${CL}"
|
||||||
VMID=$NEXTID
|
VMID=$NEXTID
|
||||||
echo -e "${DGN}Using Hostname: ${BGN}mikrotik-routeros-chr${CL}"
|
echo -e "${DGN}Using Hostname: ${BGN}mikrotik-routeros-chr${CL}"
|
||||||
@ -107,6 +121,7 @@ function default_settings() {
|
|||||||
echo -e "${BL}Creating a Mikrotik RouterOS CHR VM using the above default settings${CL}"
|
echo -e "${BL}Creating a Mikrotik RouterOS CHR VM using the above default settings${CL}"
|
||||||
}
|
}
|
||||||
function advanced_settings() {
|
function advanced_settings() {
|
||||||
|
METHOD="advanced"
|
||||||
VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $NEXTID --title "VIRTUAL MACHINE ID" 3>&1 1>&2 2>&3)
|
VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $NEXTID --title "VIRTUAL MACHINE ID" 3>&1 1>&2 2>&3)
|
||||||
exitstatus=$?
|
exitstatus=$?
|
||||||
if [ $exitstatus = 0 ]; then
|
if [ $exitstatus = 0 ]; then
|
||||||
@ -203,6 +218,8 @@ function start_script() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
start_script
|
start_script
|
||||||
|
|
||||||
|
post_to_api_vm
|
||||||
msg_info "Validating Storage"
|
msg_info "Validating Storage"
|
||||||
while read -r line; do
|
while read -r line; do
|
||||||
TAG=$(echo $line | awk '{print $1}')
|
TAG=$(echo $line | awk '{print $1}')
|
||||||
@ -287,4 +304,5 @@ if [ "$START_VM" == "yes" ]; then
|
|||||||
qm start $VMID
|
qm start $VMID
|
||||||
msg_ok "Started Mikrotik RouterOS CHR VM"
|
msg_ok "Started Mikrotik RouterOS CHR VM"
|
||||||
fi
|
fi
|
||||||
|
post_update_to_api "done" "none"
|
||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed Successfully!\n"
|
||||||
|
|||||||
@ -5,6 +5,8 @@
|
|||||||
# License: MIT
|
# License: MIT
|
||||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
|
source /dev/stdin <<< $(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func)
|
||||||
|
|
||||||
function header_info {
|
function header_info {
|
||||||
clear
|
clear
|
||||||
cat <<"EOF"
|
cat <<"EOF"
|
||||||
@ -17,6 +19,14 @@ EOF
|
|||||||
}
|
}
|
||||||
header_info
|
header_info
|
||||||
echo -e "\n Loading..."
|
echo -e "\n Loading..."
|
||||||
|
#API VARIABLES
|
||||||
|
RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)"
|
||||||
|
METHOD=""
|
||||||
|
NSAPP="turnkey-nextcloud"
|
||||||
|
var_os="turnkey-nextcloud"
|
||||||
|
var_version=" "
|
||||||
|
DISK_SIZE="12G"
|
||||||
|
#
|
||||||
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
||||||
NEXTID=$(pvesh get /cluster/nextid)
|
NEXTID=$(pvesh get /cluster/nextid)
|
||||||
NAME="TurnKey Nexcloud VM"
|
NAME="TurnKey Nexcloud VM"
|
||||||
@ -36,10 +46,13 @@ THIN="discard=on,ssd=1"
|
|||||||
set -e
|
set -e
|
||||||
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
||||||
trap cleanup EXIT
|
trap cleanup EXIT
|
||||||
|
trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT
|
||||||
|
trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM
|
||||||
function error_handler() {
|
function error_handler() {
|
||||||
local exit_code="$?"
|
local exit_code="$?"
|
||||||
local line_number="$1"
|
local line_number="$1"
|
||||||
local command="$2"
|
local command="$2"
|
||||||
|
post_update_to_api "failed" "${command}"
|
||||||
local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
|
local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
|
||||||
echo -e "\n$error_message\n"
|
echo -e "\n$error_message\n"
|
||||||
cleanup_vmid
|
cleanup_vmid
|
||||||
@ -142,6 +155,7 @@ function default_settings() {
|
|||||||
VLAN=""
|
VLAN=""
|
||||||
MTU=""
|
MTU=""
|
||||||
START_VM="no"
|
START_VM="no"
|
||||||
|
METHOD="default"
|
||||||
echo -e "${DGN}Using Virtual Machine ID: ${BGN}${VMID}${CL}"
|
echo -e "${DGN}Using Virtual Machine ID: ${BGN}${VMID}${CL}"
|
||||||
echo -e "${DGN}Using Machine Type: ${BGN}i440fx${CL}"
|
echo -e "${DGN}Using Machine Type: ${BGN}i440fx${CL}"
|
||||||
echo -e "${DGN}Using Disk Cache: ${BGN}None${CL}"
|
echo -e "${DGN}Using Disk Cache: ${BGN}None${CL}"
|
||||||
@ -158,6 +172,7 @@ function default_settings() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function advanced_settings() {
|
function advanced_settings() {
|
||||||
|
METHOD="advanced"
|
||||||
while true; do
|
while true; do
|
||||||
if VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $NEXTID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
if VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $NEXTID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||||
if [ -z "$VMID" ]; then
|
if [ -z "$VMID" ]; then
|
||||||
@ -340,6 +355,8 @@ pve_check
|
|||||||
ssh_check
|
ssh_check
|
||||||
start_script
|
start_script
|
||||||
|
|
||||||
|
post_to_api_vm
|
||||||
|
|
||||||
msg_info "Validating Storage"
|
msg_info "Validating Storage"
|
||||||
while read -r line; do
|
while read -r line; do
|
||||||
TAG=$(echo $line | awk '{print $1}')
|
TAG=$(echo $line | awk '{print $1}')
|
||||||
@ -422,4 +439,5 @@ if [ "$START_VM" == "yes" ]; then
|
|||||||
qm start $VMID
|
qm start $VMID
|
||||||
msg_ok "Started $NAME"
|
msg_ok "Started $NAME"
|
||||||
fi
|
fi
|
||||||
|
post_update_to_api "done" "none"
|
||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed Successfully!\n"
|
||||||
|
|||||||
@ -7,6 +7,8 @@
|
|||||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Based on work from https://i12bretro.github.io/tutorials/0405.html
|
# Based on work from https://i12bretro.github.io/tutorials/0405.html
|
||||||
|
|
||||||
|
source /dev/stdin <<< $(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func)
|
||||||
|
|
||||||
function header_info {
|
function header_info {
|
||||||
clear
|
clear
|
||||||
cat <<"EOF"
|
cat <<"EOF"
|
||||||
@ -21,6 +23,14 @@ EOF
|
|||||||
}
|
}
|
||||||
header_info
|
header_info
|
||||||
echo -e "Loading..."
|
echo -e "Loading..."
|
||||||
|
#API VARIABLES
|
||||||
|
RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)"
|
||||||
|
METHOD=""
|
||||||
|
NSAPP="openwrt-vm"
|
||||||
|
var_os="openwrt"
|
||||||
|
var_version=" "
|
||||||
|
DISK_SIZE="0.5G"
|
||||||
|
#
|
||||||
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
||||||
GEN_MAC_LAN=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
GEN_MAC_LAN=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
||||||
NEXTID=$(pvesh get /cluster/nextid)
|
NEXTID=$(pvesh get /cluster/nextid)
|
||||||
@ -39,10 +49,13 @@ CROSS="${RD}✗${CL}"
|
|||||||
set -Eeo pipefail
|
set -Eeo pipefail
|
||||||
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
||||||
trap cleanup EXIT
|
trap cleanup EXIT
|
||||||
|
trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT
|
||||||
|
trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM
|
||||||
function error_handler() {
|
function error_handler() {
|
||||||
local exit_code="$?"
|
local exit_code="$?"
|
||||||
local line_number="$1"
|
local line_number="$1"
|
||||||
local command="$2"
|
local command="$2"
|
||||||
|
post_update_to_api "failed" "$command"
|
||||||
local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
|
local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
|
||||||
echo -e "\n$error_message\n"
|
echo -e "\n$error_message\n"
|
||||||
cleanup_vmid
|
cleanup_vmid
|
||||||
@ -209,6 +222,7 @@ function default_settings() {
|
|||||||
LAN_VLAN=",tag=999"
|
LAN_VLAN=",tag=999"
|
||||||
MTU=""
|
MTU=""
|
||||||
START_VM="yes"
|
START_VM="yes"
|
||||||
|
METHOD="default"
|
||||||
echo -e "${DGN}Using Virtual Machine ID: ${BGN}${VMID}${CL}"
|
echo -e "${DGN}Using Virtual Machine ID: ${BGN}${VMID}${CL}"
|
||||||
echo -e "${DGN}Using Hostname: ${BGN}${HN}${CL}"
|
echo -e "${DGN}Using Hostname: ${BGN}${HN}${CL}"
|
||||||
echo -e "${DGN}Allocated Cores: ${BGN}${CORE_COUNT}${CL}"
|
echo -e "${DGN}Allocated Cores: ${BGN}${CORE_COUNT}${CL}"
|
||||||
@ -227,6 +241,7 @@ function default_settings() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function advanced_settings() {
|
function advanced_settings() {
|
||||||
|
METHOD="advanced"
|
||||||
while true; do
|
while true; do
|
||||||
if VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $NEXTID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
if VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $NEXTID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||||
if [ -z "$VMID" ]; then
|
if [ -z "$VMID" ]; then
|
||||||
@ -399,6 +414,7 @@ arch_check
|
|||||||
pve_check
|
pve_check
|
||||||
ssh_check
|
ssh_check
|
||||||
start_script
|
start_script
|
||||||
|
post_to_api_vm
|
||||||
|
|
||||||
msg_info "Validating Storage"
|
msg_info "Validating Storage"
|
||||||
while read -r line; do
|
while read -r line; do
|
||||||
@ -518,4 +534,5 @@ VLAN_FINISH=""
|
|||||||
if [ "$VLAN" == "" ] && [ "$VLAN2" != "999" ]; then
|
if [ "$VLAN" == "" ] && [ "$VLAN2" != "999" ]; then
|
||||||
VLAN_FINISH=" Please remember to adjust the VLAN tags to suit your network."
|
VLAN_FINISH=" Please remember to adjust the VLAN tags to suit your network."
|
||||||
fi
|
fi
|
||||||
|
post_update_to_api "done" "none"
|
||||||
msg_ok "Completed Successfully!\n${VLAN_FINISH}"
|
msg_ok "Completed Successfully!\n${VLAN_FINISH}"
|
||||||
|
|||||||
@ -5,6 +5,8 @@
|
|||||||
# License: MIT
|
# License: MIT
|
||||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
|
source /dev/stdin <<< $(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func)
|
||||||
|
|
||||||
function header_info {
|
function header_info {
|
||||||
clear
|
clear
|
||||||
cat <<"EOF"
|
cat <<"EOF"
|
||||||
@ -17,6 +19,14 @@ EOF
|
|||||||
}
|
}
|
||||||
header_info
|
header_info
|
||||||
echo -e "\n Loading..."
|
echo -e "\n Loading..."
|
||||||
|
#API VARIABLES
|
||||||
|
RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)"
|
||||||
|
METHOD=""
|
||||||
|
NSAPP="turnkey-owncloud-vm"
|
||||||
|
var_os="owncloud"
|
||||||
|
var_version="12"
|
||||||
|
DISK_SIZE="12G"
|
||||||
|
#
|
||||||
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
||||||
NEXTID=$(pvesh get /cluster/nextid)
|
NEXTID=$(pvesh get /cluster/nextid)
|
||||||
NAME="TurnKey ownCloud VM"
|
NAME="TurnKey ownCloud VM"
|
||||||
@ -36,10 +46,13 @@ THIN="discard=on,ssd=1"
|
|||||||
set -e
|
set -e
|
||||||
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
||||||
trap cleanup EXIT
|
trap cleanup EXIT
|
||||||
|
trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT
|
||||||
|
trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM
|
||||||
function error_handler() {
|
function error_handler() {
|
||||||
local exit_code="$?"
|
local exit_code="$?"
|
||||||
local line_number="$1"
|
local line_number="$1"
|
||||||
local command="$2"
|
local command="$2"
|
||||||
|
post_update_to_api "failed" "$command"
|
||||||
local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
|
local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
|
||||||
echo -e "\n$error_message\n"
|
echo -e "\n$error_message\n"
|
||||||
cleanup_vmid
|
cleanup_vmid
|
||||||
@ -142,6 +155,7 @@ function default_settings() {
|
|||||||
VLAN=""
|
VLAN=""
|
||||||
MTU=""
|
MTU=""
|
||||||
START_VM="no"
|
START_VM="no"
|
||||||
|
METHOD="default"
|
||||||
echo -e "${DGN}Using Virtual Machine ID: ${BGN}${VMID}${CL}"
|
echo -e "${DGN}Using Virtual Machine ID: ${BGN}${VMID}${CL}"
|
||||||
echo -e "${DGN}Using Machine Type: ${BGN}i440fx${CL}"
|
echo -e "${DGN}Using Machine Type: ${BGN}i440fx${CL}"
|
||||||
echo -e "${DGN}Using Disk Cache: ${BGN}None${CL}"
|
echo -e "${DGN}Using Disk Cache: ${BGN}None${CL}"
|
||||||
@ -158,6 +172,7 @@ function default_settings() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function advanced_settings() {
|
function advanced_settings() {
|
||||||
|
METHOD="advanced"
|
||||||
while true; do
|
while true; do
|
||||||
if VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $NEXTID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
if VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $NEXTID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||||
if [ -z "$VMID" ]; then
|
if [ -z "$VMID" ]; then
|
||||||
@ -340,6 +355,8 @@ pve_check
|
|||||||
ssh_check
|
ssh_check
|
||||||
start_script
|
start_script
|
||||||
|
|
||||||
|
post_to_api_vm
|
||||||
|
|
||||||
msg_info "Validating Storage"
|
msg_info "Validating Storage"
|
||||||
while read -r line; do
|
while read -r line; do
|
||||||
TAG=$(echo $line | awk '{print $1}')
|
TAG=$(echo $line | awk '{print $1}')
|
||||||
@ -422,4 +439,5 @@ if [ "$START_VM" == "yes" ]; then
|
|||||||
qm start $VMID
|
qm start $VMID
|
||||||
msg_ok "Started $NAME"
|
msg_ok "Started $NAME"
|
||||||
fi
|
fi
|
||||||
|
post_update_to_api "done" "none"
|
||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed Successfully!\n"
|
||||||
|
|||||||
@ -5,6 +5,8 @@
|
|||||||
# License: MIT
|
# License: MIT
|
||||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
|
source /dev/stdin <<< $(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func)
|
||||||
|
|
||||||
function header_info {
|
function header_info {
|
||||||
cat <<"EOF"
|
cat <<"EOF"
|
||||||
____ _ __ ___
|
____ _ __ ___
|
||||||
@ -22,6 +24,14 @@ EOF
|
|||||||
clear
|
clear
|
||||||
header_info
|
header_info
|
||||||
echo -e "Loading..."
|
echo -e "Loading..."
|
||||||
|
#API VARIABLES
|
||||||
|
RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)"
|
||||||
|
METHOD=""
|
||||||
|
NSAPP="pimox-haos-vm"
|
||||||
|
var_os="pimox-haos"
|
||||||
|
var_version=" "
|
||||||
|
DISK_SIZE="32G"
|
||||||
|
#
|
||||||
GEN_MAC=$(echo '00 60 2f'$(od -An -N3 -t xC /dev/urandom) | sed -e 's/ /:/g' | tr '[:lower:]' '[:upper:]')
|
GEN_MAC=$(echo '00 60 2f'$(od -An -N3 -t xC /dev/urandom) | sed -e 's/ /:/g' | tr '[:lower:]' '[:upper:]')
|
||||||
USEDID=$(pvesh get /cluster/resources --type vm --output-format yaml | egrep -i 'vmid' | awk '{print substr($2, 1, length($2)-0) }')
|
USEDID=$(pvesh get /cluster/resources --type vm --output-format yaml | egrep -i 'vmid' | awk '{print substr($2, 1, length($2)-0) }')
|
||||||
NEXTID=$(pvesh get /cluster/nextid)
|
NEXTID=$(pvesh get /cluster/nextid)
|
||||||
@ -48,11 +58,14 @@ shopt -s expand_aliases
|
|||||||
alias die='EXIT=$? LINE=$LINENO error_exit'
|
alias die='EXIT=$? LINE=$LINENO error_exit'
|
||||||
trap die ERR
|
trap die ERR
|
||||||
trap cleanup EXIT
|
trap cleanup EXIT
|
||||||
|
trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT
|
||||||
|
trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM
|
||||||
function error_exit() {
|
function error_exit() {
|
||||||
trap - ERR
|
trap - ERR
|
||||||
local reason="Unknown failure occurred."
|
local reason="Unknown failure occurred."
|
||||||
local msg="${1:-$reason}"
|
local msg="${1:-$reason}"
|
||||||
local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
|
local flag="${RD}‼ ERROR ${CL}$EXIT@$LINE"
|
||||||
|
post_update_to_api "failed" "unknown"
|
||||||
echo -e "$flag $msg" 1>&2
|
echo -e "$flag $msg" 1>&2
|
||||||
[ ! -z ${VMID-} ] && cleanup_vmid
|
[ ! -z ${VMID-} ] && cleanup_vmid
|
||||||
exit $EXIT
|
exit $EXIT
|
||||||
@ -106,6 +119,7 @@ function msg_error() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function default_settings() {
|
function default_settings() {
|
||||||
|
METHOD="default"
|
||||||
echo -e "${DGN}Using HAOS Version: ${BGN}${STABLE}${CL}"
|
echo -e "${DGN}Using HAOS Version: ${BGN}${STABLE}${CL}"
|
||||||
BRANCH=${STABLE}
|
BRANCH=${STABLE}
|
||||||
echo -e "${DGN}Using Virtual Machine ID: ${BGN}$NEXTID${CL}"
|
echo -e "${DGN}Using Virtual Machine ID: ${BGN}$NEXTID${CL}"
|
||||||
@ -129,6 +143,7 @@ function default_settings() {
|
|||||||
echo -e "${BL}Creating a HAOS VM using the above default settings${CL}"
|
echo -e "${BL}Creating a HAOS VM using the above default settings${CL}"
|
||||||
}
|
}
|
||||||
function advanced_settings() {
|
function advanced_settings() {
|
||||||
|
METHOD="advanced"
|
||||||
BRANCH=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "HAOS VERSION" --radiolist "Choose Version" --cancel-button Exit-Script 10 58 3 \
|
BRANCH=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "HAOS VERSION" --radiolist "Choose Version" --cancel-button Exit-Script 10 58 3 \
|
||||||
"$STABLE" "Stable" ON \
|
"$STABLE" "Stable" ON \
|
||||||
"$BETA" "Beta" OFF \
|
"$BETA" "Beta" OFF \
|
||||||
@ -250,6 +265,7 @@ function START_SCRIPT() {
|
|||||||
}
|
}
|
||||||
ARCH_CHECK
|
ARCH_CHECK
|
||||||
START_SCRIPT
|
START_SCRIPT
|
||||||
|
post_to_api_vm
|
||||||
while read -r line; do
|
while read -r line; do
|
||||||
TAG=$(echo $line | awk '{print $1}')
|
TAG=$(echo $line | awk '{print $1}')
|
||||||
TYPE=$(echo $line | awk '{printf "%-10s", $2}')
|
TYPE=$(echo $line | awk '{printf "%-10s", $2}')
|
||||||
@ -322,4 +338,5 @@ if [ "$START_VM" == "yes" ]; then
|
|||||||
qm start $VMID
|
qm start $VMID
|
||||||
msg_ok "Started Home Assistant OS VM"
|
msg_ok "Started Home Assistant OS VM"
|
||||||
fi
|
fi
|
||||||
|
post_update_to_api "done" "none"
|
||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed Successfully!\n"
|
||||||
|
|||||||
@ -4,6 +4,8 @@
|
|||||||
# Author: MickLesk (CanbiZ)
|
# Author: MickLesk (CanbiZ)
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
|
source /dev/stdin <<< $(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func)
|
||||||
|
|
||||||
function header_info {
|
function header_info {
|
||||||
clear
|
clear
|
||||||
cat <<"EOF"
|
cat <<"EOF"
|
||||||
@ -19,6 +21,11 @@ header_info
|
|||||||
echo -e "\n Loading..."
|
echo -e "\n Loading..."
|
||||||
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
||||||
NEXTID=$(pvesh get /cluster/nextid)
|
NEXTID=$(pvesh get /cluster/nextid)
|
||||||
|
RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)"
|
||||||
|
METHOD=""
|
||||||
|
NSAPP="ubuntu-2204-vm"
|
||||||
|
var_os="ubuntu"
|
||||||
|
var_version="2204"
|
||||||
|
|
||||||
YW=$(echo "\033[33m")
|
YW=$(echo "\033[33m")
|
||||||
BL=$(echo "\033[36m")
|
BL=$(echo "\033[36m")
|
||||||
@ -56,10 +63,13 @@ THIN="discard=on,ssd=1,"
|
|||||||
set -e
|
set -e
|
||||||
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
||||||
trap cleanup EXIT
|
trap cleanup EXIT
|
||||||
|
trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT
|
||||||
|
trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM
|
||||||
function error_handler() {
|
function error_handler() {
|
||||||
local exit_code="$?"
|
local exit_code="$?"
|
||||||
local line_number="$1"
|
local line_number="$1"
|
||||||
local command="$2"
|
local command="$2"
|
||||||
|
post_update_to_api "failed" "$command"
|
||||||
local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
|
local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
|
||||||
echo -e "\n$error_message\n"
|
echo -e "\n$error_message\n"
|
||||||
cleanup_vmid
|
cleanup_vmid
|
||||||
@ -164,6 +174,7 @@ function default_settings() {
|
|||||||
VLAN=""
|
VLAN=""
|
||||||
MTU=""
|
MTU=""
|
||||||
START_VM="yes"
|
START_VM="yes"
|
||||||
|
METHOD="default"
|
||||||
echo -e "${CONTAINERID}${BOLD}${DGN}Virtual Machine ID: ${BGN}${VMID}${CL}"
|
echo -e "${CONTAINERID}${BOLD}${DGN}Virtual Machine ID: ${BGN}${VMID}${CL}"
|
||||||
echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}i440fx${CL}"
|
echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}i440fx${CL}"
|
||||||
echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE}${CL}"
|
echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE}${CL}"
|
||||||
@ -181,6 +192,7 @@ function default_settings() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function advanced_settings() {
|
function advanced_settings() {
|
||||||
|
METHOD="advanced"
|
||||||
while true; do
|
while true; do
|
||||||
if VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $NEXTID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
if VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $NEXTID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||||
if [ -z "$VMID" ]; then
|
if [ -z "$VMID" ]; then
|
||||||
@ -377,6 +389,7 @@ arch_check
|
|||||||
pve_check
|
pve_check
|
||||||
ssh_check
|
ssh_check
|
||||||
start_script
|
start_script
|
||||||
|
post_to_api_vm
|
||||||
|
|
||||||
msg_info "Validating Storage"
|
msg_info "Validating Storage"
|
||||||
while read -r line; do
|
while read -r line; do
|
||||||
@ -439,7 +452,7 @@ done
|
|||||||
|
|
||||||
msg_info "Creating a Ubuntu 22.04 VM"
|
msg_info "Creating a Ubuntu 22.04 VM"
|
||||||
qm create $VMID -agent 1${MACHINE} -tablet 0 -localtime 1 -bios ovmf${CPU_TYPE} -cores $CORE_COUNT -memory $RAM_SIZE \
|
qm create $VMID -agent 1${MACHINE} -tablet 0 -localtime 1 -bios ovmf${CPU_TYPE} -cores $CORE_COUNT -memory $RAM_SIZE \
|
||||||
-name $HN -tags proxmox-helper-scripts -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU -onboot 1 -ostype l26 -scsihw virtio-scsi-pci
|
-name $HN -tags community-script -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU -onboot 1 -ostype l26 -scsihw virtio-scsi-pci
|
||||||
pvesm alloc $STORAGE $VMID $DISK0 4M 1>&/dev/null
|
pvesm alloc $STORAGE $VMID $DISK0 4M 1>&/dev/null
|
||||||
qm importdisk $VMID ${FILE} $STORAGE ${DISK_IMPORT:-} 1>&/dev/null
|
qm importdisk $VMID ${FILE} $STORAGE ${DISK_IMPORT:-} 1>&/dev/null
|
||||||
qm set $VMID \
|
qm set $VMID \
|
||||||
@ -493,7 +506,7 @@ if [ "$START_VM" == "yes" ]; then
|
|||||||
qm start $VMID
|
qm start $VMID
|
||||||
msg_ok "Started Ubuntu 22.04 VM"
|
msg_ok "Started Ubuntu 22.04 VM"
|
||||||
fi
|
fi
|
||||||
|
post_update_to_api "done" "none"
|
||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed Successfully!\n"
|
||||||
echo -e "Setup Cloud-Init before starting \n
|
echo -e "Setup Cloud-Init before starting \n
|
||||||
More info at https://github.com/community-scripts/ProxmoxVE/discussions/272 \n"
|
More info at https://github.com/community-scripts/ProxmoxVE/discussions/272 \n"
|
||||||
|
|||||||
@ -5,6 +5,8 @@
|
|||||||
# License: MIT
|
# License: MIT
|
||||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
|
source /dev/stdin <<< $(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func)
|
||||||
|
|
||||||
function header_info {
|
function header_info {
|
||||||
clear
|
clear
|
||||||
cat <<"EOF"
|
cat <<"EOF"
|
||||||
@ -20,6 +22,11 @@ header_info
|
|||||||
echo -e "\n Loading..."
|
echo -e "\n Loading..."
|
||||||
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
||||||
NEXTID=$(pvesh get /cluster/nextid)
|
NEXTID=$(pvesh get /cluster/nextid)
|
||||||
|
RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)"
|
||||||
|
METHOD=""
|
||||||
|
NSAPP="ubuntu-2404-vm"
|
||||||
|
var_os="ubuntu"
|
||||||
|
var_version="2404"
|
||||||
|
|
||||||
YW=$(echo "\033[33m")
|
YW=$(echo "\033[33m")
|
||||||
BL=$(echo "\033[36m")
|
BL=$(echo "\033[36m")
|
||||||
@ -57,10 +64,13 @@ THIN="discard=on,ssd=1,"
|
|||||||
set -e
|
set -e
|
||||||
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
||||||
trap cleanup EXIT
|
trap cleanup EXIT
|
||||||
|
trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT
|
||||||
|
trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM
|
||||||
function error_handler() {
|
function error_handler() {
|
||||||
local exit_code="$?"
|
local exit_code="$?"
|
||||||
local line_number="$1"
|
local line_number="$1"
|
||||||
local command="$2"
|
local command="$2"
|
||||||
|
post_update_to_api "failed" "$command"
|
||||||
local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
|
local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
|
||||||
echo -e "\n$error_message\n"
|
echo -e "\n$error_message\n"
|
||||||
cleanup_vmid
|
cleanup_vmid
|
||||||
@ -165,6 +175,7 @@ function default_settings() {
|
|||||||
VLAN=""
|
VLAN=""
|
||||||
MTU=""
|
MTU=""
|
||||||
START_VM="yes"
|
START_VM="yes"
|
||||||
|
METHOD="default"
|
||||||
echo -e "${CONTAINERID}${BOLD}${DGN}Virtual Machine ID: ${BGN}${VMID}${CL}"
|
echo -e "${CONTAINERID}${BOLD}${DGN}Virtual Machine ID: ${BGN}${VMID}${CL}"
|
||||||
echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}i440fx${CL}"
|
echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}i440fx${CL}"
|
||||||
echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE}${CL}"
|
echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE}${CL}"
|
||||||
@ -182,6 +193,7 @@ function default_settings() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function advanced_settings() {
|
function advanced_settings() {
|
||||||
|
METHOD="advanced"
|
||||||
while true; do
|
while true; do
|
||||||
if VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $NEXTID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
if VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $NEXTID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||||
if [ -z "$VMID" ]; then
|
if [ -z "$VMID" ]; then
|
||||||
@ -377,6 +389,7 @@ arch_check
|
|||||||
pve_check
|
pve_check
|
||||||
ssh_check
|
ssh_check
|
||||||
start_script
|
start_script
|
||||||
|
post_to_api_vm
|
||||||
|
|
||||||
msg_info "Validating Storage"
|
msg_info "Validating Storage"
|
||||||
while read -r line; do
|
while read -r line; do
|
||||||
@ -439,7 +452,7 @@ done
|
|||||||
|
|
||||||
msg_info "Creating a Ubuntu 24.04 VM"
|
msg_info "Creating a Ubuntu 24.04 VM"
|
||||||
qm create $VMID -agent 1${MACHINE} -tablet 0 -localtime 1 -bios ovmf${CPU_TYPE} -cores $CORE_COUNT -memory $RAM_SIZE \
|
qm create $VMID -agent 1${MACHINE} -tablet 0 -localtime 1 -bios ovmf${CPU_TYPE} -cores $CORE_COUNT -memory $RAM_SIZE \
|
||||||
-name $HN -tags proxmox-helper-scripts -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU -onboot 1 -ostype l26 -scsihw virtio-scsi-pci
|
-name $HN -tags community-script -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU -onboot 1 -ostype l26 -scsihw virtio-scsi-pci
|
||||||
pvesm alloc $STORAGE $VMID $DISK0 4M 1>&/dev/null
|
pvesm alloc $STORAGE $VMID $DISK0 4M 1>&/dev/null
|
||||||
qm importdisk $VMID ${FILE} $STORAGE ${DISK_IMPORT:-} 1>&/dev/null
|
qm importdisk $VMID ${FILE} $STORAGE ${DISK_IMPORT:-} 1>&/dev/null
|
||||||
qm set $VMID \
|
qm set $VMID \
|
||||||
@ -493,7 +506,7 @@ if [ "$START_VM" == "yes" ]; then
|
|||||||
qm start $VMID
|
qm start $VMID
|
||||||
msg_ok "Started Ubuntu 24.04 VM"
|
msg_ok "Started Ubuntu 24.04 VM"
|
||||||
fi
|
fi
|
||||||
|
post_update_to_api "done" "none"
|
||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed Successfully!\n"
|
||||||
echo -e "Setup Cloud-Init before starting \n
|
echo -e "Setup Cloud-Init before starting \n
|
||||||
More info at https://github.com/community-scripts/ProxmoxVE/discussions/272 \n"
|
More info at https://github.com/community-scripts/ProxmoxVE/discussions/272 \n"
|
||||||
|
|||||||
@ -4,6 +4,8 @@
|
|||||||
# Author: MickLesk (CanbiZ)
|
# Author: MickLesk (CanbiZ)
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
|
source /dev/stdin <<< $(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func)
|
||||||
|
|
||||||
function header_info {
|
function header_info {
|
||||||
clear
|
clear
|
||||||
cat <<"EOF"
|
cat <<"EOF"
|
||||||
@ -19,6 +21,11 @@ header_info
|
|||||||
echo -e "\n Loading..."
|
echo -e "\n Loading..."
|
||||||
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
||||||
NEXTID=$(pvesh get /cluster/nextid)
|
NEXTID=$(pvesh get /cluster/nextid)
|
||||||
|
RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)"
|
||||||
|
METHOD=""
|
||||||
|
NSAPP="ubuntu-2410-vm"
|
||||||
|
var_os="ubuntu"
|
||||||
|
var_version="2410"
|
||||||
|
|
||||||
YW=$(echo "\033[33m")
|
YW=$(echo "\033[33m")
|
||||||
BL=$(echo "\033[36m")
|
BL=$(echo "\033[36m")
|
||||||
@ -56,10 +63,13 @@ THIN="discard=on,ssd=1,"
|
|||||||
set -e
|
set -e
|
||||||
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
||||||
trap cleanup EXIT
|
trap cleanup EXIT
|
||||||
|
trap 'post_update_to_api "failed" "INTERRUPTED"' SIGINT
|
||||||
|
trap 'post_update_to_api "failed" "TERMINATED"' SIGTERM
|
||||||
function error_handler() {
|
function error_handler() {
|
||||||
local exit_code="$?"
|
local exit_code="$?"
|
||||||
local line_number="$1"
|
local line_number="$1"
|
||||||
local command="$2"
|
local command="$2"
|
||||||
|
post_update_to_api "failed" "$command"
|
||||||
local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
|
local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
|
||||||
echo -e "\n$error_message\n"
|
echo -e "\n$error_message\n"
|
||||||
cleanup_vmid
|
cleanup_vmid
|
||||||
@ -164,6 +174,7 @@ function default_settings() {
|
|||||||
VLAN=""
|
VLAN=""
|
||||||
MTU=""
|
MTU=""
|
||||||
START_VM="yes"
|
START_VM="yes"
|
||||||
|
METHOD="default"
|
||||||
echo -e "${CONTAINERID}${BOLD}${DGN}Virtual Machine ID: ${BGN}${VMID}${CL}"
|
echo -e "${CONTAINERID}${BOLD}${DGN}Virtual Machine ID: ${BGN}${VMID}${CL}"
|
||||||
echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}i440fx${CL}"
|
echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}i440fx${CL}"
|
||||||
echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE}${CL}"
|
echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE}${CL}"
|
||||||
@ -181,6 +192,7 @@ function default_settings() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function advanced_settings() {
|
function advanced_settings() {
|
||||||
|
METHOD="advanced"
|
||||||
while true; do
|
while true; do
|
||||||
if VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $NEXTID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
if VMID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Virtual Machine ID" 8 58 $NEXTID --title "VIRTUAL MACHINE ID" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||||
if [ -z "$VMID" ]; then
|
if [ -z "$VMID" ]; then
|
||||||
@ -377,6 +389,7 @@ arch_check
|
|||||||
pve_check
|
pve_check
|
||||||
ssh_check
|
ssh_check
|
||||||
start_script
|
start_script
|
||||||
|
post_to_api_vm
|
||||||
|
|
||||||
msg_info "Validating Storage"
|
msg_info "Validating Storage"
|
||||||
while read -r line; do
|
while read -r line; do
|
||||||
@ -439,7 +452,7 @@ done
|
|||||||
|
|
||||||
msg_info "Creating a Ubuntu 24.10 VM"
|
msg_info "Creating a Ubuntu 24.10 VM"
|
||||||
qm create $VMID -agent 1${MACHINE} -tablet 0 -localtime 1 -bios ovmf${CPU_TYPE} -cores $CORE_COUNT -memory $RAM_SIZE \
|
qm create $VMID -agent 1${MACHINE} -tablet 0 -localtime 1 -bios ovmf${CPU_TYPE} -cores $CORE_COUNT -memory $RAM_SIZE \
|
||||||
-name $HN -tags proxmox-helper-scripts -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU -onboot 1 -ostype l26 -scsihw virtio-scsi-pci
|
-name $HN -tags community-script -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU -onboot 1 -ostype l26 -scsihw virtio-scsi-pci
|
||||||
pvesm alloc $STORAGE $VMID $DISK0 4M 1>&/dev/null
|
pvesm alloc $STORAGE $VMID $DISK0 4M 1>&/dev/null
|
||||||
qm importdisk $VMID ${FILE} $STORAGE ${DISK_IMPORT:-} 1>&/dev/null
|
qm importdisk $VMID ${FILE} $STORAGE ${DISK_IMPORT:-} 1>&/dev/null
|
||||||
qm set $VMID \
|
qm set $VMID \
|
||||||
@ -493,7 +506,7 @@ if [ "$START_VM" == "yes" ]; then
|
|||||||
qm start $VMID
|
qm start $VMID
|
||||||
msg_ok "Started Ubuntu 24.10 VM"
|
msg_ok "Started Ubuntu 24.10 VM"
|
||||||
fi
|
fi
|
||||||
|
post_update_to_api "done" "none"s
|
||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed Successfully!\n"
|
||||||
echo -e "Setup Cloud-Init before starting \n
|
echo -e "Setup Cloud-Init before starting \n
|
||||||
More info at https://github.com/community-scripts/ProxmoxVE/discussions/272 \n"
|
More info at https://github.com/community-scripts/ProxmoxVE/discussions/272 \n"
|
||||||
|
|||||||
Reference in New Issue
Block a user