mirror of
				https://github.com/community-scripts/ProxmoxVE.git
				synced 2025-11-04 10:22:50 +00:00 
			
		
		
		
	Compare commits
	
		
			52 Commits
		
	
	
		
			2025-01-06
			...
			2025-01-09
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					749e487032 | ||
| 
						 | 
					be1821b16f | ||
| 
						 | 
					baa578c20a | ||
| 
						 | 
					d8f433c94a | ||
| 
						 | 
					3ad50eb427 | ||
| 
						 | 
					2c24952cd2 | ||
| 
						 | 
					9d2ba6739b | ||
| 
						 | 
					3a9d55abf4 | ||
| 
						 | 
					8a9e162e9b | ||
| 
						 | 
					0b85f26a4e | ||
| 
						 | 
					14e185af85 | ||
| 
						 | 
					5170056078 | ||
| 
						 | 
					9a7dcef25a | ||
| 
						 | 
					045ba81533 | ||
| 
						 | 
					4985fda206 | ||
| 
						 | 
					d8ad4545ad | ||
| 
						 | 
					179defdd88 | ||
| 
						 | 
					da071d800b | ||
| 
						 | 
					6653b92972 | ||
| 
						 | 
					bfd6b58406 | ||
| 
						 | 
					189dbf67b6 | ||
| 
						 | 
					b2ba72a906 | ||
| 
						 | 
					0ce45140c7 | ||
| 
						 | 
					c6efe42eee | ||
| 
						 | 
					5c1954c85d | ||
| 
						 | 
					e592b80716 | ||
| 
						 | 
					8dd43ddb81 | ||
| 
						 | 
					eb8ebfe7e4 | ||
| 
						 | 
					d56d8dd369 | ||
| 
						 | 
					5af9dd9e45 | ||
| 
						 | 
					ec1e5b3a4a | ||
| 
						 | 
					37f4a841a6 | ||
| 
						 | 
					02401aa35d | ||
| 
						 | 
					2646ea6317 | ||
| 
						 | 
					6b183c9e4e | ||
| 
						 | 
					19e7751fb9 | ||
| 
						 | 
					3bb26b7b41 | ||
| 
						 | 
					2d3506c7d3 | ||
| 
						 | 
					e70a3a4b4d | ||
| 
						 | 
					f428146c47 | ||
| 
						 | 
					0059adecf1 | ||
| 
						 | 
					e1daaa6409 | ||
| 
						 | 
					ff712bc36e | ||
| 
						 | 
					9330e9a640 | ||
| 
						 | 
					5fc783da67 | ||
| 
						 | 
					670d64ec43 | ||
| 
						 | 
					4da57bd76c | ||
| 
						 | 
					29b98b450b | ||
| 
						 | 
					c88d3a3883 | ||
| 
						 | 
					f5a54bc3ad | ||
| 
						 | 
					2078deca57 | ||
| 
						 | 
					bc702e2a6d | 
							
								
								
									
										9
									
								
								.github/workflows/changelog-pr.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								.github/workflows/changelog-pr.yml
									
									
									
									
										vendored
									
									
								
							@@ -71,7 +71,9 @@ jobs:
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            pulls.filter((pr) => 
 | 
			
		||||
              pr.merged_at && new Date(pr.merged_at) > latestDateInChangelog
 | 
			
		||||
              pr.merged_at && 
 | 
			
		||||
              new Date(pr.merged_at) > latestDateInChangelog && 
 | 
			
		||||
              !pr.labels.some((label) => ["invalid", "wontdo", process.env.AUTOMATED_PR_LABEL].includes(label.name.toLowerCase()))
 | 
			
		||||
            ).forEach((pr) => {
 | 
			
		||||
              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}))`;
 | 
			
		||||
@@ -79,12 +81,11 @@ jobs:
 | 
			
		||||
              for (const { labels, notes } of categorizedPRs) {
 | 
			
		||||
                const prHasCategoryLabel = labels.some((label) => prLabels.includes(label));
 | 
			
		||||
                const isUnlabelledCategory = labels.length === 0;
 | 
			
		||||
                const prShouldBeExcluded = prLabels.includes(process.env.AUTOMATED_PR_LABEL);
 | 
			
		||||
                if ((prHasCategoryLabel || isUnlabelledCategory) && !prShouldBeExcluded) {
 | 
			
		||||
                if (prHasCategoryLabel || isUnlabelledCategory) {
 | 
			
		||||
                  notes.push(prNote);
 | 
			
		||||
                  break;
 | 
			
		||||
                }
 | 
			
		||||
              };
 | 
			
		||||
              }
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            return categorizedPRs;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,29 +1,43 @@
 | 
			
		||||
name: Validate filenames
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  pull_request:
 | 
			
		||||
  pull_request_target:
 | 
			
		||||
    paths:
 | 
			
		||||
      - "ct/*.sh"
 | 
			
		||||
      - "install/*.sh"
 | 
			
		||||
      - "json/*.json"
 | 
			
		||||
      - ".github/workflows/validate-filenames.yml"
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  check-files:
 | 
			
		||||
    name: Check changed files
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    permissions:
 | 
			
		||||
      pull-requests: write
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Get pull request information
 | 
			
		||||
        if: github.event_name == 'pull_request_target'
 | 
			
		||||
        uses: actions/github-script@v7
 | 
			
		||||
        id: pr
 | 
			
		||||
        with:
 | 
			
		||||
          script: |
 | 
			
		||||
            const { data: pullRequest } = await github.rest.pulls.get({
 | 
			
		||||
              ...context.repo,
 | 
			
		||||
              pull_number: context.payload.pull_request.number,
 | 
			
		||||
            });
 | 
			
		||||
            return pullRequest;
 | 
			
		||||
 | 
			
		||||
      - name: Checkout code
 | 
			
		||||
        uses: actions/checkout@v4
 | 
			
		||||
        with:
 | 
			
		||||
          fetch-depth: 0 # Ensure the full history is fetched for accurate diffing
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request_target' && fromJSON(steps.pr.outputs.result).merge_commit_sha || '' }}
 | 
			
		||||
 | 
			
		||||
      - name: Get changed files
 | 
			
		||||
        id: changed-files
 | 
			
		||||
        run: |
 | 
			
		||||
          if ${{ github.event_name == 'pull_request' }}; then
 | 
			
		||||
              echo "files=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.sha }} | xargs)" >> $GITHUB_OUTPUT
 | 
			
		||||
          if ${{ github.event_name == 'pull_request_target' }}; then
 | 
			
		||||
              echo "files=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ steps.pr.outputs.result && fromJSON(steps.pr.outputs.result).merge_commit_sha }} | xargs)" >> $GITHUB_OUTPUT
 | 
			
		||||
          else
 | 
			
		||||
              echo "files=$(git diff --name-only ${{ github.event.before }} ${{ github.event.after }} | xargs)" >> $GITHUB_OUTPUT
 | 
			
		||||
          fi
 | 
			
		||||
@@ -75,7 +89,7 @@ jobs:
 | 
			
		||||
          fi
 | 
			
		||||
 | 
			
		||||
      - name: Post results and comment
 | 
			
		||||
        if: always() && steps.check-scripts.outputs.files != '' && steps.check-json.outputs.files != '' && github.event_name == 'pull_request'
 | 
			
		||||
        if: always() && steps.check-scripts.outputs.files != '' && steps.check-json.outputs.files != '' && github.event_name == 'pull_request_target'
 | 
			
		||||
        uses: actions/github-script@v7
 | 
			
		||||
        with:
 | 
			
		||||
          script: |
 | 
			
		||||
							
								
								
									
										27
									
								
								.github/workflows/validate-formatting.yaml.bak
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										27
									
								
								.github/workflows/validate-formatting.yaml.bak
									
									
									
									
										vendored
									
									
								
							@@ -4,30 +4,43 @@ on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
      - main
 | 
			
		||||
  pull_request:
 | 
			
		||||
  pull_request_target:
 | 
			
		||||
    paths:
 | 
			
		||||
      - "**/*.sh"
 | 
			
		||||
      - "**/*.func"
 | 
			
		||||
      - ".github/workflows/validate-formatting.yaml"
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  shfmt:
 | 
			
		||||
    name: Check changed files
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    permissions:
 | 
			
		||||
					 
 | 
			
		||||
      pull-requests: write
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Get pull request information
 | 
			
		||||
        if: github.event_name == 'pull_request_target'
 | 
			
		||||
        uses: actions/github-script@v7
 | 
			
		||||
        id: pr
 | 
			
		||||
        with:
 | 
			
		||||
          script: |
 | 
			
		||||
            const { data: pullRequest } = await github.rest.pulls.get({
 | 
			
		||||
              ...context.repo,
 | 
			
		||||
              pull_number: context.payload.pull_request.number,
 | 
			
		||||
            });
 | 
			
		||||
            return pullRequest;
 | 
			
		||||
 | 
			
		||||
      - name: Checkout code
 | 
			
		||||
        uses: actions/checkout@v4
 | 
			
		||||
        with:
 | 
			
		||||
          fetch-depth: 0
 | 
			
		||||
          fetch-depth: 0 # Ensure the full history is fetched for accurate diffing
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request_target' && fromJSON(steps.pr.outputs.result).merge_commit_sha || '' }}
 | 
			
		||||
 | 
			
		||||
      - name: Get changed files
 | 
			
		||||
        id: changed-files
 | 
			
		||||
        run: |
 | 
			
		||||
          if ${{ github.event_name == 'pull_request' }}; then
 | 
			
		||||
              echo "files=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.sha }} | grep -E '\.(sh|func)$' | xargs)" >> $GITHUB_OUTPUT
 | 
			
		||||
          if ${{ github.event_name == 'pull_request_target' }}; then
 | 
			
		||||
              echo "files=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ steps.pr.outputs.result && fromJSON(steps.pr.outputs.result).merge_commit_sha }} | grep -E '\.(sh|func)$' | xargs)" >> $GITHUB_OUTPUT
 | 
			
		||||
          else
 | 
			
		||||
              echo "files=$(git diff --name-only ${{ github.event.before }} ${{ github.event.after }} | grep -E '\.(sh|func)$' | xargs)" >> $GITHUB_OUTPUT
 | 
			
		||||
          fi
 | 
			
		||||
@@ -48,6 +61,7 @@ jobs:
 | 
			
		||||
        run: |
 | 
			
		||||
          set +e
 | 
			
		||||
 | 
			
		||||
									 
 | 
			
		||||
          shfmt_output=$(shfmt -d ${{ steps.changed-files.outputs.files }})
 | 
			
		||||
          if [[ $? -eq 0 ]]; then
 | 
			
		||||
            exit 0
 | 
			
		||||
@@ -58,7 +72,7 @@ jobs:
 | 
			
		||||
          fi
 | 
			
		||||
 | 
			
		||||
      - name: Post comment with results
 | 
			
		||||
        if: always() && steps.changed-files.outputs.files != '' && github.event_name == 'pull_request'
 | 
			
		||||
        if: always() && steps.changed-files.outputs.files != '' && github.event_name == 'pull_request_target'
 | 
			
		||||
        uses: actions/github-script@v7
 | 
			
		||||
        with:
 | 
			
		||||
          script: |
 | 
			
		||||
@@ -90,6 +104,7 @@ jobs:
 | 
			
		||||
 | 
			
		||||
              const existingComment = comments.find(
 | 
			
		||||
                (comment) => comment.user.login === "github-actions[bot]",
 | 
			
		||||
																	 
 | 
			
		||||
              );
 | 
			
		||||
 | 
			
		||||
              if (existingComment) {
 | 
			
		||||
 
 | 
			
		||||
@@ -3,11 +3,10 @@ on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
      - main
 | 
			
		||||
  pull_request:
 | 
			
		||||
  pull_request_target:
 | 
			
		||||
    paths:
 | 
			
		||||
      - "ct/*.sh"
 | 
			
		||||
      - "install/*.sh"
 | 
			
		||||
      - ".github/workflows/validate-scripts.yml"
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  check-scripts:
 | 
			
		||||
@@ -17,18 +16,36 @@ jobs:
 | 
			
		||||
      pull-requests: write
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Debug event payload
 | 
			
		||||
        run: |
 | 
			
		||||
          echo "Event name: ${{ github.event_name }}"
 | 
			
		||||
          echo "Payload: $(cat $GITHUB_EVENT_PATH)"
 | 
			
		||||
 | 
			
		||||
      - name: Get pull request information
 | 
			
		||||
        if: github.event_name == 'pull_request_target'
 | 
			
		||||
        uses: actions/github-script@v7
 | 
			
		||||
        id: pr
 | 
			
		||||
        with:
 | 
			
		||||
          script: |
 | 
			
		||||
            const { data: pullRequest } = await github.rest.pulls.get({
 | 
			
		||||
              ...context.repo,
 | 
			
		||||
              pull_number: context.payload.pull_request.number,
 | 
			
		||||
            });
 | 
			
		||||
            return pullRequest;
 | 
			
		||||
 | 
			
		||||
      - name: Checkout code
 | 
			
		||||
        uses: actions/checkout@v4
 | 
			
		||||
        with:
 | 
			
		||||
          fetch-depth: ${{ github.event_name == 'pull_request' && 2 || 0 }}
 | 
			
		||||
          fetch-depth: 0
 | 
			
		||||
          ref: ${{ github.event_name == 'pull_request_target' && fromJSON(steps.pr.outputs.result).merge_commit_sha || '' }}
 | 
			
		||||
 | 
			
		||||
      - name: Get changed files
 | 
			
		||||
        id: changed-files
 | 
			
		||||
        run: |
 | 
			
		||||
          if ${{ github.event_name == 'pull_request' }}; then
 | 
			
		||||
              echo "files=$(git diff --name-only -r HEAD^1 HEAD | grep -E '\.(sh|func)$' | xargs)" >> $GITHUB_OUTPUT
 | 
			
		||||
          if [ "${{ github.event_name }}" == "pull_request_target" ]; then
 | 
			
		||||
            echo "files=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ steps.pr.outputs.result && fromJSON(steps.pr.outputs.result).merge_commit_sha }} | grep -E '\.(sh|func)$' | xargs)" >> $GITHUB_OUTPUT
 | 
			
		||||
          else
 | 
			
		||||
              echo "files=$(git diff --name-only ${{ github.event.before }} ${{ github.event.after }} | grep -E '\.(sh|func)$' | xargs)" >> $GITHUB_OUTPUT
 | 
			
		||||
            echo "files=$(git diff --name-only ${{ github.event.before }} ${{ github.event.after }} | grep -E '\.(sh|func)$' | xargs)" >> $GITHUB_OUTPUT
 | 
			
		||||
          fi
 | 
			
		||||
 | 
			
		||||
      - name: Check build.func line
 | 
			
		||||
@@ -152,18 +169,18 @@ jobs:
 | 
			
		||||
          fi
 | 
			
		||||
 | 
			
		||||
      - name: Post results and comment
 | 
			
		||||
        if: always() && steps.changed-files.outputs.files != '' && github.event_name == 'pull_request'
 | 
			
		||||
        if: always() && steps.changed-files.outputs.files != '' && github.event_name == 'pull_request_target'
 | 
			
		||||
        uses: actions/github-script@v7
 | 
			
		||||
        with:
 | 
			
		||||
          script: |
 | 
			
		||||
            const result = '${{ job.status }}' === 'success' ? 'success' : 'failure';
 | 
			
		||||
            const nonCompliantFiles = {
 | 
			
		||||
              'Invalid build.func source': "${{ steps.build-func.outputs.files }}",
 | 
			
		||||
              'Not executable': "${{ steps.check-executable.outputs.files }}",
 | 
			
		||||
              'Copyright header line missing or invalid': "${{ steps.check-copyright.outputs.files }}",
 | 
			
		||||
              'Author header line missing or invalid': "${{ steps.check-author.outputs.files }}",
 | 
			
		||||
              'License header line missing or invalid': "${{ steps.check-license.outputs.files }}",
 | 
			
		||||
              'Source header line missing or invalid': "${{ steps.check-source.outputs.files }}"
 | 
			
		||||
              'Invalid build.func source': "${{ steps.build-func.outputs.files || '' }}",
 | 
			
		||||
              'Not executable': "${{ steps.check-executable.outputs.files || '' }}",
 | 
			
		||||
              'Copyright header line missing or invalid': "${{ steps.check-copyright.outputs.files || '' }}",
 | 
			
		||||
              'Author header line missing or invalid': "${{ steps.check-author.outputs.files || '' }}",
 | 
			
		||||
              'License header line missing or invalid': "${{ steps.check-license.outputs.files || '' }}",
 | 
			
		||||
              'Source header line missing or invalid': "${{ steps.check-source.outputs.files || '' }}"
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            const issueNumber = context.payload.pull_request ? context.payload.pull_request.number : null;
 | 
			
		||||
@@ -174,7 +191,11 @@ jobs:
 | 
			
		||||
              newCommentBody += ':x: We found issues in the following changed files:\n\n';
 | 
			
		||||
              for (const [check, files] of Object.entries(nonCompliantFiles)) {
 | 
			
		||||
                if (files) {
 | 
			
		||||
                  newCommentBody += `**${check}:**\n${files.trim().split(' ').map(file => `- ${file}`).join('\n')}\n\n`;
 | 
			
		||||
                  newCommentBody += `**${check}:**\n`;
 | 
			
		||||
                  files.trim().split(' ').forEach(file => {
 | 
			
		||||
                    newCommentBody += `- ${file}: ${check}\n`;
 | 
			
		||||
                  });
 | 
			
		||||
                  newCommentBody += `\n`;
 | 
			
		||||
                }
 | 
			
		||||
              }
 | 
			
		||||
            } else {
 | 
			
		||||
@@ -189,15 +210,14 @@ jobs:
 | 
			
		||||
                issue_number: issueNumber
 | 
			
		||||
              });
 | 
			
		||||
 | 
			
		||||
              const existingComment = comments.find(comment => comment.user.login === 'github-actions[bot]');
 | 
			
		||||
              const existingComment = comments.find(comment =>
 | 
			
		||||
                comment.body.includes(`<!-- ${commentIdentifier}-start -->`) &&
 | 
			
		||||
                comment.user.login === 'github-actions[bot]'
 | 
			
		||||
              );
 | 
			
		||||
 | 
			
		||||
              if (existingComment) {
 | 
			
		||||
                if (existingComment.body.includes(commentIdentifier)) {
 | 
			
		||||
                  const re = new RegExp(String.raw`<!-- ${commentIdentifier}-start -->[\s\S]*?<!-- ${commentIdentifier}-end -->`, "");
 | 
			
		||||
                  newCommentBody = existingComment.body.replace(re, newCommentBody);
 | 
			
		||||
                } else {
 | 
			
		||||
                  newCommentBody = existingComment.body + '\n\n---\n\n' + newCommentBody;
 | 
			
		||||
                }
 | 
			
		||||
                const re = new RegExp(String.raw`<!-- ${commentIdentifier}-start -->[\\s\\S]*?<!-- ${commentIdentifier}-end -->`, "m");
 | 
			
		||||
                newCommentBody = existingComment.body.replace(re, newCommentBody);
 | 
			
		||||
 | 
			
		||||
                await github.rest.issues.updateComment({
 | 
			
		||||
                  ...context.repo,
 | 
			
		||||
							
								
								
									
										51
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										51
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -16,6 +16,57 @@ All LXC instances created using this repository come pre-installed with Midnight
 | 
			
		||||
> [!IMPORTANT]
 | 
			
		||||
Do not break established syntax in this file, as it is automatically updated by a Github Workflow
 | 
			
		||||
 | 
			
		||||
## 2025-01-09
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 | 
			
		||||
### 💥 Breaking Changes
 | 
			
		||||
 | 
			
		||||
- Removal calibre-server (no Headless Support) [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1362](https://github.com/community-scripts/ProxmoxVE/pull/1362))
 | 
			
		||||
 | 
			
		||||
### ✨ New Scripts
 | 
			
		||||
 | 
			
		||||
- New Script: Prometheus Alertmanager [@andygrunwald](https://github.com/andygrunwald) ([#1272](https://github.com/community-scripts/ProxmoxVE/pull/1272))
 | 
			
		||||
- New script: ps5-mqtt [@liecno](https://github.com/liecno) ([#1198](https://github.com/community-scripts/ProxmoxVE/pull/1198))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- Fix: AdventureLog: unzip to /opt/ [@JesperDramsch](https://github.com/JesperDramsch) ([#1370](https://github.com/community-scripts/ProxmoxVE/pull/1370))
 | 
			
		||||
- Fix: Stirling-PDF > LibreOffice/unoconv Integration Issues  [@m6urns](https://github.com/m6urns) ([#1322](https://github.com/community-scripts/ProxmoxVE/pull/1322))
 | 
			
		||||
- Fix: AdventureLog - update script bug [@JesperDramsch](https://github.com/JesperDramsch) ([#1334](https://github.com/community-scripts/ProxmoxVE/pull/1334))
 | 
			
		||||
- Install/update ActualBudget based on releases, not latest master [@SpyrosRoum](https://github.com/SpyrosRoum) ([#1254](https://github.com/community-scripts/ProxmoxVE/pull/1254))
 | 
			
		||||
- Fix Checkmk: Version grep broken [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1341](https://github.com/community-scripts/ProxmoxVE/pull/1341))
 | 
			
		||||
 | 
			
		||||
### 🧰 Maintenance
 | 
			
		||||
 | 
			
		||||
- fix: only validate scripts in validate-scripts workflow [@se-bastiaan](https://github.com/se-bastiaan) ([#1344](https://github.com/community-scripts/ProxmoxVE/pull/1344))
 | 
			
		||||
 | 
			
		||||
## 2025-01-08
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
- update postgresql json to add post install password setup [@rdiazlugo](https://github.com/rdiazlugo) ([#1318](https://github.com/community-scripts/ProxmoxVE/pull/1318))
 | 
			
		||||
 | 
			
		||||
### 🧰 Maintenance
 | 
			
		||||
 | 
			
		||||
- fix(ci): formatting event & chmod +x [@se-bastiaan](https://github.com/se-bastiaan) ([#1335](https://github.com/community-scripts/ProxmoxVE/pull/1335))
 | 
			
		||||
- fix: correctly handle pull_request_target event [@se-bastiaan](https://github.com/se-bastiaan) ([#1327](https://github.com/community-scripts/ProxmoxVE/pull/1327))
 | 
			
		||||
 | 
			
		||||
## 2025-01-07
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- Fix: Folder-Check for Updatescript Zammad [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1309](https://github.com/community-scripts/ProxmoxVE/pull/1309))
 | 
			
		||||
 | 
			
		||||
### 🧰 Maintenance
 | 
			
		||||
 | 
			
		||||
- fix: permissions of validate pipelines [@se-bastiaan](https://github.com/se-bastiaan) ([#1316](https://github.com/community-scripts/ProxmoxVE/pull/1316))
 | 
			
		||||
- Set Execution Rights for GH-Action: Validate Scripts [@MickLesk](https://github.com/MickLesk) ([#1312](https://github.com/community-scripts/ProxmoxVE/pull/1312))
 | 
			
		||||
 | 
			
		||||
## 2025-01-06
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 
 | 
			
		||||
@@ -32,13 +32,26 @@ function update_script() {
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    if ! command -v jq >/dev/null 2>&1; then
 | 
			
		||||
      echo "Installing jq..."
 | 
			
		||||
      apt-get install -y jq >/dev/null 2>&1
 | 
			
		||||
      echo "Installed jq..."
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP}"
 | 
			
		||||
    systemctl stop actualbudget.service
 | 
			
		||||
    systemctl stop actualbudget
 | 
			
		||||
    RELEASE=$(curl -s https://api.github.com/repos/actualbudget/actual-server/tags | jq --raw-output '.[0].name')
 | 
			
		||||
    TEMPD="$(mktemp -d)"
 | 
			
		||||
    cd "${TEMPD}"
 | 
			
		||||
    wget -q https://codeload.github.com/actualbudget/actual-server/legacy.tar.gz/refs/tags/${RELEASE} -O - | tar -xz
 | 
			
		||||
    mv /opt/actualbudget /opt/actualbudget_bak
 | 
			
		||||
    mv actualbudget-actual-server-*/* /opt/actualbudget/
 | 
			
		||||
    cd /opt/actualbudget
 | 
			
		||||
    git pull &>/dev/null
 | 
			
		||||
    yarn install &>/dev/null
 | 
			
		||||
    systemctl start actualbudget.service
 | 
			
		||||
    msg_ok "Successfully Updated ${APP}"
 | 
			
		||||
    systemctl start actualbudget
 | 
			
		||||
    msg_ok "Successfully Updated ${APP} to ${RELEASE}"
 | 
			
		||||
    rm -rf "${TEMPD}"
 | 
			
		||||
    rm -rf /opt/actualbudget_bak
 | 
			
		||||
    exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -49,4 +62,4 @@ 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}:5006${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5006${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -40,19 +40,20 @@ function update_script() {
 | 
			
		||||
    msg_ok "Services Stopped"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
			
		||||
    cp /opt/adventurelog/backend/server/.env /opt/server.env
 | 
			
		||||
    cp /opt/adventurelog/frontend/.env /opt/frontend.env
 | 
			
		||||
    wget -q "https://github.com/seanmorley15/AdventureLog/archive/refs/tags/v${RELEASE}.zip"
 | 
			
		||||
    unzip -q v${RELEASE}.zip
 | 
			
		||||
    mv AdventureLog-${RELEASE} /opt/adventurelog
 | 
			
		||||
    mv /opt/server.env /opt/adventurelog/backend/server/.env
 | 
			
		||||
    mv /opt/adventurelog/ /opt/adventurelog-backup/
 | 
			
		||||
    wget -qO /opt/v${RELEASE}.zip "https://github.com/seanmorley15/AdventureLog/archive/refs/tags/v${RELEASE}.zip"
 | 
			
		||||
    unzip -q /opt/v${RELEASE}.zip -d /opt/
 | 
			
		||||
    mv /opt/AdventureLog-${RELEASE} /opt/adventurelog
 | 
			
		||||
 | 
			
		||||
    mv /opt/adventurelog-backup/backend/server/.env /opt/adventurelog/backend/server/.env
 | 
			
		||||
    mv /opt/adventurelog-backup/backend/server/media /opt/adventurelog/backend/server/media
 | 
			
		||||
    cd /opt/adventurelog/backend/server
 | 
			
		||||
    pip install --upgrade pip &>/dev/null
 | 
			
		||||
    pip install -r requirements.txt &>/dev/null
 | 
			
		||||
    python3 manage.py collectstatic --noinput &>/dev/null
 | 
			
		||||
    python3 manage.py migrate &>/dev/null
 | 
			
		||||
 | 
			
		||||
    mv /opt/frontend.env /opt/adventurelog/frontend/.env
 | 
			
		||||
    mv /opt/adventurelog-backup/frontend/.env /opt/adventurelog/frontend/.env
 | 
			
		||||
    cd /opt/adventurelog/frontend
 | 
			
		||||
    pnpm install &>/dev/null
 | 
			
		||||
    pnpm run build &>/dev/null
 | 
			
		||||
@@ -65,7 +66,8 @@ function update_script() {
 | 
			
		||||
    msg_ok "Started Services"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -rf v${RELEASE}.zip
 | 
			
		||||
    rm -rf /opt/v${RELEASE}.zip
 | 
			
		||||
    rm -rf /opt/adventurelog-backup
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
@@ -81,4 +83,4 @@ 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}:3000${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,7 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }' | grep -v "*-rc" | tail -n +2 | head -n 1)
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }') 
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    omd stop monitoring &>/dev/null
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										68
									
								
								ct/prometheus-alertmanager.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										68
									
								
								ct/prometheus-alertmanager.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,68 @@
 | 
			
		||||
#!/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://prometheus.io/
 | 
			
		||||
 | 
			
		||||
# App Default Values
 | 
			
		||||
APP="Prometheus-Alertmanager"
 | 
			
		||||
var_tags="monitoring;alerting"
 | 
			
		||||
var_cpu="1"
 | 
			
		||||
var_ram="1024"
 | 
			
		||||
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-alertmanager.service ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -s https://api.github.com/repos/prometheus/alertmanager/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-alertmanager
 | 
			
		||||
    msg_ok "Stopped ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    cd /opt
 | 
			
		||||
    wget -q https://github.com/prometheus/alertmanager/releases/download/v${RELEASE}/alertmanager-${RELEASE}.linux-amd64.tar.gz
 | 
			
		||||
    tar -xf alertmanager-${RELEASE}.linux-amd64.tar.gz
 | 
			
		||||
    cd alertmanager-${RELEASE}.linux-amd64
 | 
			
		||||
    cp -rf alertmanager amtool /usr/local/bin/
 | 
			
		||||
    rm -rf alertmanager-${RELEASE}.linux-amd64 alertmanager-${RELEASE}.linux-amd64.tar.gz
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated ${APP} to ${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ${APP}"
 | 
			
		||||
    systemctl start prometheus-alertmanager
 | 
			
		||||
    msg_ok "Started ${APP}"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  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}:9093${CL}"
 | 
			
		||||
							
								
								
									
										76
									
								
								ct/ps5-mqtt.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								ct/ps5-mqtt.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,76 @@
 | 
			
		||||
#!/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: liecno
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/FunkeyFlo/ps5-mqtt/
 | 
			
		||||
 | 
			
		||||
# App Default Values
 | 
			
		||||
APP="PS5-MQTT"
 | 
			
		||||
var_tags="smarthome;automation"
 | 
			
		||||
var_cpu="1"
 | 
			
		||||
var_ram="512"
 | 
			
		||||
var_disk="3"
 | 
			
		||||
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/ps5-mqtt ]]; then
 | 
			
		||||
        msg_error "No ${APP} installation found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    RELEASE=$(curl -s https://api.github.com/repos/FunkeyFlo/ps5-mqtt/releases/latest | jq -r '.tag_name')
 | 
			
		||||
 | 
			
		||||
    if [[ "${RELEASE}" != "$(cat /opt/ps5-mqtt_version.txt)" ]]; then
 | 
			
		||||
        msg_info "Stopping service"
 | 
			
		||||
        systemctl stop ps5-mqtt
 | 
			
		||||
        msg_ok "Stopped service"
 | 
			
		||||
 | 
			
		||||
        msg_info "Updating PS5-MQTT to ${RELEASE}"
 | 
			
		||||
        wget -P /tmp -q https://github.com/FunkeyFlo/ps5-mqtt/archive/refs/tags/${RELEASE}.tar.gz
 | 
			
		||||
        rm -rf /opt/ps5-mqtt
 | 
			
		||||
        tar zxf /tmp/${RELEASE}.tar.gz -C /opt
 | 
			
		||||
        mv /opt/ps5-mqtt-* /opt/ps5-mqtt
 | 
			
		||||
        rm /tmp/${RELEASE}.tar.gz
 | 
			
		||||
        echo ${RELEASE} > /opt/ps5-mqtt_version.txt
 | 
			
		||||
        msg_ok "Updated PS5-MQTT"
 | 
			
		||||
 | 
			
		||||
        msg_info "Building new PS5-MQTT version"
 | 
			
		||||
        cd /opt/ps5-mqtt/ps5-mqtt/
 | 
			
		||||
        npm install &>/dev/null
 | 
			
		||||
        npm run build &>/dev/null
 | 
			
		||||
        msg_ok "Built new PS5-MQTT version"
 | 
			
		||||
 | 
			
		||||
        msg_info "Starting service"
 | 
			
		||||
        systemctl start ps5-mqtt
 | 
			
		||||
        msg_ok "Started service"
 | 
			
		||||
    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}:8645${CL}"
 | 
			
		||||
@@ -28,7 +28,7 @@ function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
    if [[ ! -d /opt/zamad ]]; then
 | 
			
		||||
    if [[ ! -d /opt/zammad ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
 
 | 
			
		||||
@@ -35,8 +35,10 @@ $STD apt-get install -y nodejs
 | 
			
		||||
$STD npm install --global yarn
 | 
			
		||||
msg_ok "Installed Node.js"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Actual Budget"
 | 
			
		||||
$STD git clone https://github.com/actualbudget/actual-server.git /opt/actualbudget
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/actualbudget/actual-server/tags | jq --raw-output '.[0].name')
 | 
			
		||||
msg_info "Installing Actual Budget $RELEASE"
 | 
			
		||||
wget -q https://codeload.github.com/actualbudget/actual-server/legacy.tar.gz/refs/tags/${RELEASE} -O - | tar -xz
 | 
			
		||||
mv actualbudget-actual-server-* /opt/actualbudget
 | 
			
		||||
mkdir -p /opt/actualbudget/server-files
 | 
			
		||||
chown -R root:root /opt/actualbudget/server-files
 | 
			
		||||
chmod 755 /opt/actualbudget/server-files
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,7 @@ $STD apt-get install -y \
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Install Checkmk"
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }' | grep -v "*-rc" | tail -n +2 | head -n 1)
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
wget -q https://download.checkmk.com/checkmk/${RELEASE}/check-mk-raw-${RELEASE}_0.bookworm_amd64.deb -O /opt/checkmk.deb
 | 
			
		||||
$STD apt-get install -y /opt/checkmk.deb
 | 
			
		||||
echo "${RELEASE}" >"/opt/checkmk_version.txt"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										64
									
								
								install/prometheus-alertmanager-install.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										64
									
								
								install/prometheus-alertmanager-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://prometheus.io/
 | 
			
		||||
 | 
			
		||||
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 Alertmanager"
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/prometheus/alertmanager/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
mkdir -p /etc/alertmanager
 | 
			
		||||
mkdir -p /var/lib/alertmanager
 | 
			
		||||
wget -q https://github.com/prometheus/alertmanager/releases/download/v${RELEASE}/alertmanager-${RELEASE}.linux-amd64.tar.gz
 | 
			
		||||
tar -xf alertmanager-${RELEASE}.linux-amd64.tar.gz
 | 
			
		||||
mv alertmanager-${RELEASE}.linux-amd64/alertmanager alertmanager-${RELEASE}.linux-amd64/amtool /usr/local/bin/
 | 
			
		||||
mv alertmanager-${RELEASE}.linux-amd64/alertmanager.yml /etc/alertmanager/alertmanager.yml
 | 
			
		||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
 | 
			
		||||
msg_ok "Installed Prometheus Alertmanager"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/prometheus-alertmanager.service
 | 
			
		||||
echo "[Unit]
 | 
			
		||||
Description=Prometheus Alertmanager
 | 
			
		||||
Wants=network-online.target
 | 
			
		||||
After=network-online.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
User=root
 | 
			
		||||
Restart=always
 | 
			
		||||
Type=simple
 | 
			
		||||
ExecStart=/usr/local/bin/alertmanager \
 | 
			
		||||
    --config.file=/etc/alertmanager/alertmanager.yml \
 | 
			
		||||
    --storage.path=/var/lib/alertmanager/ \
 | 
			
		||||
    --web.listen-address=0.0.0.0:9093
 | 
			
		||||
ExecReload=/bin/kill -HUP \$MAINPID
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target"
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now prometheus-alertmanager
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
rm -rf alertmanager-${RELEASE}.linux-amd64 alertmanager-${RELEASE}.linux-amd64.tar.gz
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
							
								
								
									
										111
									
								
								install/ps5-mqtt-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								install/ps5-mqtt-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,111 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: liecno
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/FunkeyFlo/ps5-mqtt/
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  curl \
 | 
			
		||||
  sudo \
 | 
			
		||||
  mc \
 | 
			
		||||
  jq \
 | 
			
		||||
  ca-certificates \
 | 
			
		||||
  gnupg
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up Node.js Repository"
 | 
			
		||||
mkdir -p /etc/apt/keyrings
 | 
			
		||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
 | 
			
		||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
msg_ok "Set up Node.js Repository"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Node.js"
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
$STD apt-get install -y nodejs
 | 
			
		||||
$STD npm i -g playactor
 | 
			
		||||
msg_ok "Installed Node.js"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
msg_info "Installing PS5-MQTT"
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/FunkeyFlo/ps5-mqtt/releases/latest | jq -r '.tag_name')
 | 
			
		||||
wget -P /tmp -q https://github.com/FunkeyFlo/ps5-mqtt/archive/refs/tags/${RELEASE}.tar.gz
 | 
			
		||||
tar zxf /tmp/${RELEASE}.tar.gz -C /opt
 | 
			
		||||
mv /opt/ps5-mqtt-* /opt/ps5-mqtt
 | 
			
		||||
cd /opt/ps5-mqtt/ps5-mqtt/
 | 
			
		||||
$STD npm install
 | 
			
		||||
$STD npm run build
 | 
			
		||||
echo ${RELEASE} > /opt/ps5-mqtt_version.txt
 | 
			
		||||
msg_ok "Installed PS5-MQTT"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
mkdir -p /opt/.config/ps5-mqtt/
 | 
			
		||||
mkdir -p /opt/.config/ps5-mqtt/playactor
 | 
			
		||||
cat <<EOF > /opt/.config/ps5-mqtt/config.json
 | 
			
		||||
{
 | 
			
		||||
  "mqtt": {
 | 
			
		||||
      "host": "",
 | 
			
		||||
      "port": "",
 | 
			
		||||
      "user": "",
 | 
			
		||||
      "pass": "",
 | 
			
		||||
      "discovery_topic": "homeassistant"
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  "device_check_interval": 5000,
 | 
			
		||||
  "device_discovery_interval": 60000,
 | 
			
		||||
  "device_discovery_broadcast_address": "",
 | 
			
		||||
 | 
			
		||||
  "include_ps4_devices": false,
 | 
			
		||||
 | 
			
		||||
  "psn_accounts": [
 | 
			
		||||
    {
 | 
			
		||||
      "username": "",
 | 
			
		||||
      "npsso":""
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 | 
			
		||||
  "account_check_interval": 5000,
 | 
			
		||||
 | 
			
		||||
  "credentialsStoragePath": "/opt/.config/ps5-mqtt/credentials.json",
 | 
			
		||||
  "frontendPort": "8645"
 | 
			
		||||
}
 | 
			
		||||
EOF
 | 
			
		||||
cat <<EOF >/etc/systemd/system/ps5-mqtt.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=PS5-MQTT Daemon
 | 
			
		||||
After=syslog.target network.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
WorkingDirectory=/opt/ps5-mqtt/ps5-mqtt
 | 
			
		||||
Environment="CONFIG_PATH=/opt/.config/ps5-mqtt/config.json"
 | 
			
		||||
Environment="DEBUG='@ha:ps5:*'"
 | 
			
		||||
Restart=always
 | 
			
		||||
RestartSec=5
 | 
			
		||||
Type=simple
 | 
			
		||||
ExecStart=node server/dist/index.js
 | 
			
		||||
KillMode=process
 | 
			
		||||
SyslogIdentifier=ps5-mqtt
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now ps5-mqtt
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
rm /tmp/${RELEASE}.tar.gz
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -36,7 +36,11 @@ msg_info "Installing LibreOffice Components"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  libreoffice-writer \
 | 
			
		||||
  libreoffice-calc \
 | 
			
		||||
  libreoffice-impress
 | 
			
		||||
  libreoffice-impress \
 | 
			
		||||
  libreoffice-core \
 | 
			
		||||
  libreoffice-common \
 | 
			
		||||
  libreoffice-base-core \
 | 
			
		||||
  python3-uno
 | 
			
		||||
msg_ok "Installed LibreOffice Components"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Python Dependencies"
 | 
			
		||||
@@ -75,8 +79,8 @@ msg_ok "Installed Language Packs"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Stirling-PDF (Additional Patience)"
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/Stirling-Tools/Stirling-PDF/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
wget -q https://github.com/Stirling-Tools/Stirling-PDF/archive/refs/tags/v$RELEASE.tar.gz
 | 
			
		||||
tar -xzf v$RELEASE.tar.gz
 | 
			
		||||
wget -q https://github.com/Stirling-Tools/Stirling-PDF/archive/refs/tags/v${RELEASE}.tar.gz
 | 
			
		||||
tar -xzf v${RELEASE}.tar.gz
 | 
			
		||||
cd Stirling-PDF-$RELEASE
 | 
			
		||||
chmod +x ./gradlew
 | 
			
		||||
$STD ./gradlew build
 | 
			
		||||
@@ -86,37 +90,66 @@ mv ./build/libs/Stirling-PDF-*.jar /opt/Stirling-PDF/
 | 
			
		||||
mv scripts /opt/Stirling-PDF/
 | 
			
		||||
ln -s /opt/Stirling-PDF/Stirling-PDF-$RELEASE.jar /opt/Stirling-PDF/Stirling-PDF.jar
 | 
			
		||||
ln -s /usr/share/tesseract-ocr/5/tessdata/ /usr/share/tessdata
 | 
			
		||||
msg_ok "Installed Stirling-PDF v$RELEASE"
 | 
			
		||||
msg_ok "Installed Stirling-PDF"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/stirlingpdf.service
 | 
			
		||||
# Create LibreOffice listener service
 | 
			
		||||
cat <<EOF >/etc/systemd/system/libreoffice-listener.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Stirling-PDF service
 | 
			
		||||
After=syslog.target network.target
 | 
			
		||||
Description=LibreOffice Headless Listener Service
 | 
			
		||||
After=network.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
SuccessExitStatus=143
 | 
			
		||||
 | 
			
		||||
Type=simple
 | 
			
		||||
User=root
 | 
			
		||||
Group=root
 | 
			
		||||
 | 
			
		||||
Type=simple
 | 
			
		||||
EnvironmentFile=/opt/Stirling-PDF/.env
 | 
			
		||||
WorkingDirectory=/opt/Stirling-PDF
 | 
			
		||||
ExecStart=/usr/bin/java -jar Stirling-PDF.jar
 | 
			
		||||
ExecStop=/bin/kill -15 %n
 | 
			
		||||
ExecStart=/usr/lib/libreoffice/program/soffice --headless --invisible --nodefault --nofirststartwizard --nolockcheck --nologo --accept="socket,host=127.0.0.1,port=2002;urp;StarOffice.ComponentContext"
 | 
			
		||||
Restart=always
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now stirlingpdf.service
 | 
			
		||||
 | 
			
		||||
# Set up environment variables
 | 
			
		||||
cat <<EOF >/opt/Stirling-PDF/.env
 | 
			
		||||
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/libreoffice/program
 | 
			
		||||
UNO_PATH=/usr/lib/libreoffice/program
 | 
			
		||||
PYTHONPATH=/usr/lib/python3/dist-packages:/usr/lib/libreoffice/program
 | 
			
		||||
LD_LIBRARY_PATH=/usr/lib/libreoffice/program
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/etc/systemd/system/stirlingpdf.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Stirling-PDF service
 | 
			
		||||
After=syslog.target network.target libreoffice-listener.service
 | 
			
		||||
Requires=libreoffice-listener.service
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
SuccessExitStatus=143
 | 
			
		||||
Type=simple
 | 
			
		||||
User=root
 | 
			
		||||
Group=root
 | 
			
		||||
EnvironmentFile=/opt/Stirling-PDF/.env
 | 
			
		||||
WorkingDirectory=/opt/Stirling-PDF
 | 
			
		||||
ExecStart=/usr/bin/java -jar Stirling-PDF.jar
 | 
			
		||||
ExecStop=/bin/kill -15 %n
 | 
			
		||||
Restart=always
 | 
			
		||||
RestartSec=10
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
# Enable and start services
 | 
			
		||||
systemctl enable -q --now libreoffice-listener
 | 
			
		||||
systemctl enable -q --now stirlingpdf
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -rf v$RELEASE.tar.gz /zulu-repo_1.0.0-3_all.deb
 | 
			
		||||
rm -rf v${RELEASE}.tar.gz /zulu-repo_1.0.0-3_all.deb
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
@@ -30,5 +30,10 @@
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
    },
 | 
			
		||||
    "notes": []
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Set a password after installation for postgres user by running `echo \"ALTER USER postgres with encrypted password 'your_password';\" | sudo -u postgres psql`",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										34
									
								
								json/prometheus-alertmanager.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								json/prometheus-alertmanager.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Prometheus Alertmanager",
 | 
			
		||||
    "slug": "prometheus-alertmanager",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        7
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2025-01-09",
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": true,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": 9093,
 | 
			
		||||
    "documentation": "https://prometheus.io/docs/alerting/latest/overview/",
 | 
			
		||||
    "website": "https://prometheus.io/",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/prometheus.svg",
 | 
			
		||||
    "description": "Alerting with Prometheus is separated into two parts. Alerting rules in Prometheus servers send alerts to an Alertmanager. The Alertmanager then manages those alerts, including silencing, inhibition, aggregation and sending out notifications via methods such as email, on-call notification systems, and chat platforms.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/prometheus-alertmanager.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": 1,
 | 
			
		||||
                "ram": 1024,
 | 
			
		||||
                "hdd": 2,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
    },
 | 
			
		||||
    "notes": []
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										39
									
								
								json/ps5-mqtt.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								json/ps5-mqtt.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "PS5-MQTT",
 | 
			
		||||
    "slug": "ps5-mqtt",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        3
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2025-01-09",
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": true,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": 8645,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://github.com/FunkeyFlo/",
 | 
			
		||||
    "logo": "https://github.com/FunkeyFlo/ps5-mqtt/blob/main/add-ons/ps5-mqtt/logo.png?raw=true",
 | 
			
		||||
    "description": "Integrate your Sony Playstation 5 devices with Home Assistant using MQTT.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/ps5-mqtt.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": 1,
 | 
			
		||||
                "ram": 512,
 | 
			
		||||
                "hdd": 3,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "After installation, the MQTT endpoint must be configured. The configuration file is located within the LXC container at: `/opt/.config/ps5-mqtt/config.json`",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user