Merge Dev to Main (Added Linkwarden & postgresql and minor fixes) #4

Merged
brammp merged 9 commits from dev into main 2025-01-09 20:46:38 +01:00
19 changed files with 350 additions and 35 deletions

View File

@@ -344,7 +344,7 @@ files:
variants:
- mqtt
#FileForMqtt
#FileForHass
- path: /opt/Setup
generator: copy
source: CT-Files/hass

View File

@@ -7,7 +7,7 @@ pipeline {
string defaultValue: '192.168.200.11', description: 'Proxy server for packages, when enabled', name: 'ProxyServer'
booleanParam description: 'will disable use of proxy server', name: 'DisProxy'
checkboxParameter(name: 'ImgVariantList', format: 'JSON', displayNodePath: "//Variants/Variant", valueNodePath: "//Variants/Variant", description: 'Select the variant(s) that should be build',
pipelineSubmitContent: '{"Variants": [{"Variant": "minimal"},{"Variant": "default"},{"Variant": "jenkinsbuilder"},{"Variant": "imgbuilder"},{"Variant": "jenkins"},{"Variant": "mysql"},{"Variant": "pihole"},{"Variant": "collabora"},{"Variant": "jellyfin"},{"Variant": "domoticz"},{"Variant": "omadaV3"},{"Variant": "docker"},{"Variant": "smb"},{"Variant": "x2go"},{"Variant": "aptcacherng"},{"Variant": "nfs"},{"Variant": "duplicati"},{"Variant": "fileshelter"},{"Variant": "esphome"}]}')
pipelineSubmitContent: '{"Variants": [{"Variant": "minimal"},{"Variant": "default"},{"Variant": "jenkinsbuilder"},{"Variant": "imgbuilder"},{"Variant": "jenkins"},{"Variant": "mysql"},{"Variant": "pihole"},{"Variant": "collabora"},{"Variant": "jellyfin"},{"Variant": "domoticz"},{"Variant": "omadaV3"},{"Variant": "docker"},{"Variant": "smb"},{"Variant": "x2go"},{"Variant": "aptcacherng"},{"Variant": "nfs"},{"Variant": "duplicati"},{"Variant": "fileshelter"},{"Variant": "esphome"},{"Variant": "postgresql"},{"Variant": "linkwarden"}]}')
}
options {
skipDefaultCheckout()

View File

@@ -1092,6 +1092,8 @@ files:
- mysql
- pihole
- docker
- postgresql
- linkwarden
#FilesForJenkinsVariant
- path: /root/ReadMe
@@ -1192,6 +1194,20 @@ files:
variants:
- esphome
#FileForPostgresql
- path: /opt/Setup
generator: copy
source: CT-Files/postgresql
variants:
- postgresql
#FileForLinkwarden
- path: /opt/Setup
generator: copy
source: CT-Files/linkwarden
variants:
- linkwarden
packages:
manager: apt
update: true
@@ -1216,6 +1232,8 @@ packages:
- nfs
- duplicati
- fileshelter
- postgresql
- linkwarden
#Https Repo pkgs
- packages:
@@ -1238,6 +1256,8 @@ packages:
- duplicati
- fileshelter
- esphome
- postgresql
- linkwarden
#Minimal pkgs
- packages:
@@ -1254,6 +1274,7 @@ packages:
- procps
- unattended-upgrades
- bash-completion
- dbus
action: install
#Basic/Default pkgs
@@ -1285,6 +1306,7 @@ packages:
- fuse2fs
- xz-utils
- fuse
- umoci
- rsync
- debootstrap
- gpg
@@ -1530,6 +1552,33 @@ packages:
variants:
- esphome
#postgresql pkgs
- packages:
- postgresql
- pgadmin4-server
- nano
- uwsgi
- uwsgi-plugin-python3
action: install
variants:
- postgresql
#Base PKGS NodeJS
- packages:
- nodejs
- sudo
- nano
action: install
variants:
- linkwarden
#linkwarden pkgs
- packages:
- git
action: install
variants:
- linkwarden
repositories:
- name: sources.list
url: |-
@@ -1608,6 +1657,15 @@ packages:
variants:
- fileshelter
#postgresql Repo
- name: postgresql.list
url: |-
deb [signed-by=/usr/share/keyrings/postgresql-keyring.gpg] https://apt.postgresql.org/pub/repos/apt {{ image.release }}-pgdg main
deb [signed-by=/usr/share/keyrings/pgadmin-keyring.gpg] https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/{{ image.release }} pgadmin4 main
variants:
- postgresql
actions:
- trigger: post-unpack
action: |-
@@ -1645,6 +1703,22 @@ actions:
# Cleanup temporary shadow paths
rm /etc/*-
#Run init script for NodeJS CT
- trigger: post-files
action: |-
#!/bin/sh
#Install pm2
npm install -g pm2
#Add NodeJS `node` service user
adduser --system --shell /bin/bash --group --disabled-password --home /home/node node
mkdir /opt/node
chown node:node /opt/node
env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u node --hp /home/node
which pm2
echo "alias pm2='sudo -u node pm2'" >> ~/.bashrc
variants:
- linkwarden
#Run provided init script
- trigger: post-files
action: |-
@@ -1663,6 +1737,8 @@ actions:
- duplicati
- fileshelter
- esphome
- postgresql
- linkwarden
#Move App update script for ProxmoxHelper/ProxMoxToolKit, if CT has this script
- trigger: post-files
@@ -1782,6 +1858,24 @@ actions:
variants:
- fileshelter
#postgresql and pgadmin Repo key
- trigger: post-unpack
action: |-
#!/bin/sh
curl --retry 7 --retry-delay 5 -L -s https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor > /usr/share/keyrings/postgresql-keyring.gpg
curl --retry 7 --retry-delay 5 -L -s https://www.pgadmin.org/static/packages_pgadmin_org.pub | gpg --dearmor > /usr/share/keyrings/pgadmin-keyring.gpg
variants:
- postgresql
#NodeJS Repo key
- trigger: post-unpack
action: |-
#!/bin/sh
curl --retry 7 --retry-delay 5 -fsSL https://deb.nodesource.com/setup_lts.x |sed 's/gnupg/gpg/' > /tmp/setup-noderepo.sh
bash /tmp/setup-noderepo.sh
rm /tmp/setup-noderepo.sh
variants:
- linkwarden
mappings:
architecture_map: debian

View File

@@ -8,28 +8,7 @@ adduser -h /opt/HomeAssistant/data -D -G hass -s /bin/sh hass
chown -R hass:hass /opt/HomeAssistant
sudo -u hass python3 -m venv /opt/HomeAssistant/srv
#Fix broken Pyton module (It will not install with pyton 3.12 on a Musl system)
wget https://codeload.github.com/rhasspy/webrtc-noise-gain/tar.gz/refs/tags/v1.2.3 -O /tmp/webrtc-noise-gain.tar.gz || exit 1
tar -C /tmp -xzf /tmp/webrtc-noise-gain.tar.gz
patch /tmp/webrtc-noise-gain-1.2.3/webrtc-audio-processing/webrtc-audio-processing-1/rtc_base/system/file_wrapper.h << EOF
--- <webrtc-audio-processing/webrtc-audio-processing-1/rtc_base/system/file_wrapper.h>
+++ <webrtc-audio-processing/webrtc-audio-processing-1/rtc_base/system/file_wrapper.h>
@@ -13,6 +13,7 @@
#include <stddef.h>
#include <stdio.h>
+#include <cstdint>
#include <string>
EOF
chown hass: -R /tmp/webrtc-noise-gain-1.2.3
sudo -u hass sh -c '. /opt/HomeAssistant/srv/bin/activate && pip install /tmp/webrtc-noise-gain-1.2.3'
rm -rf /tmp/webrtc-noise-gain.tar.gz /tmp/webrtc-noise-gain-1.2.3
##End of fix (Remove when pyton module updates)
sudo -u hass sh -c '. /opt/HomeAssistant/srv/bin/activate && pip install --upgrade pip && pip3 install wheel mutagen numpy mysqlclient && pip3 install homeassistant'
sudo -u hass sh -c '. /opt/HomeAssistant/srv/bin/activate && pip install --upgrade pip && pip3 install wheel isal zlib-ng mysqlclient && pip3 install homeassistant'
#Install Home Assistant Community Store
wget https://github.com/hacs/integration/releases/latest/download/hacs.zip -O /tmp/hacs.zip

View File

@@ -0,0 +1,31 @@
#!/bin/bash
ThisScriptConfigured=no
##Linkwarden
LinkwardenURL=http://localhost:3000
##DB
PostgresqlIP=127.0.0.1
PostgresqlPort=5432
PostgresqlUsername=linkwarden
PostgresqlDatabase=linkwarden
PostgresqlPassword=<Password>
#Check if script is configured
if [ $ThisScriptConfigured = no ]; then
echo "Script is not configured"
exit
fi
##Update config
sed -i "s#^DATABASE_URL=#DATABASE_URL=postgresql://$PostgresqlUsername:$PostgresqlPassword@$PostgresqlIP:$PostgresqlPort/$PostgresqlDatabase#" /opt/node/linkwarden/.env
sed -i "s/NEXTAUTH_SECRET=/NEXTAUTH_SECRET=$(dd bs=32 count=1 if=/dev/urandom | base64 | tr +/ _.)/" /opt/node/linkwarden/.env
sed -i "s#http://localhost:3000#$LinkwardenURL#" /opt/node/linkwarden/.env
#Save PM2 statup config
sudo -u node bash << EOF
(cd /opt/node/linkwarden; yarn prisma migrate deploy)
pm2 install pm2-logrotate
pm2 start yarn --name Linkwarden --cwd /opt/node/linkwarden -- start
pm2 save
EOF

View File

@@ -0,0 +1,34 @@
#!/bin/sh
#Install monolith
CurmonolithVersion=$(curl -s https://api.github.com/repos/Y2Z/monolith/releases/latest | grep 'tag_name.*' | cut -d : -f 2,3 | tr -d \" |tr -d , |tr -d " " |tr -d : )
curl -L -o /opt/monolith-gnu-linux-x86_64 https://github.com/Y2Z/monolith/releases/download/"$CurmonolithVersion"/monolith-gnu-linux-x86_64
chmod +x /opt/monolith-gnu-linux-x86_64
echo "$CurmonolithVersion" > /opt/monolith-Version
ln -s /opt/monolith-gnu-linux-x86_64 /usr/local/bin/monolith
mv /opt/Setup/Scripts/Update-monolith.sh /opt/Update-monolith.sh
#Install linkwarden
rm -rf /root/.cache
startpath=$(pwd)
#Install Linkwarden
echo $(curl -s https://api.github.com/repos/linkwarden/linkwarden/releases/latest | grep 'tag_name.*' | cut -d : -f 2,3 | tr -d \" |tr -d , |tr -d " " |tr -d : ) > /opt/linkwarden-Version
npm install -g yarn
git clone https://github.com/linkwarden/linkwarden.git /opt/node/linkwarden
cd /opt/node/linkwarden
npx playwright install --with-deps chromium
rm -rf /root/.cache
yarn install
yarn prisma generate
yarn build
yarn cache clean
apt clean
cd $startpath
cp /opt/node/linkwarden/.env.sample /opt/node/linkwarden/.env
chown node: -R /opt/node/linkwarden
su -c "cd /opt/node/linkwarden; npx playwright install chromium" node
mv /opt/Setup/Scripts/Update-linkwarden.sh /opt/Update-linkwarden.sh

View File

@@ -0,0 +1,4 @@
#!/bin/sh
# Update script for updating apps with ProxmoxHelper/ProxMoxToolKit
bash /opt/Update-monolith.sh
bash /opt/Update-linkwarden.sh

View File

@@ -0,0 +1,22 @@
#!/bin/bash
CurLinkwardenVersion=$(curl -s https://api.github.com/repos/linkwarden/linkwarden/releases/latest | grep 'tag_name.*' | cut -d : -f 2,3 | tr -d \" |tr -d , |tr -d " " |tr -d : )
if test "$CurLinkwardenVersion" = "$(cat /opt/linkwarden-Version)" ; then
echo 'Linkwarden is up-to-date'
exit
else
echo 'Updating Linkwarden'
sudo -u node bash << EOF
/usr/bin/pm2 stop Linkwarden
cd /opt/node/linkwarden
git pull
/usr/bin/yarn install
/usr/bin/yarn prisma generate
/usr/bin/yarn build
/usr/bin/yarn cache clean
/usr/bin/yarn prisma migrate deploy
/usr/bin/pm2 start Linkwarden
npx playwright install chromium
EOF
echo "$CurLinkwardenVersion" > /opt/linkwarden-Version
fi

View File

@@ -0,0 +1,13 @@
#!/bin/bash
CurmonolithVersion=$(curl -s https://api.github.com/repos/Y2Z/monolith/releases/latest | grep 'tag_name.*' | cut -d : -f 2,3 | tr -d \" |tr -d , |tr -d " " |tr -d : )
if test "$CurmonolithVersion" = "$(cat /opt/monolith-Version)" ; then
echo 'Monolith up-to-date'
exit
else
echo 'Updating Monolith'
mv /opt/monolith-gnu-linux-x86_64 /opt/monolith-gnu-linux-x86_64.old
curl -L -o /opt/monolith-gnu-linux-x86_64 https://github.com/Y2Z/monolith/releases/download/"$CurmonolithVersion"/monolith-gnu-linux-x86_64
chmod +x /opt/monolith-gnu-linux-x86_64
echo "$CurmonolithVersion" > /opt/monolith-Version
fi

View File

@@ -0,0 +1,22 @@
#pgAdmin Custom config
##########################################################################
# Misc stuff
##########################################################################
# Languages we support in the UI
LANGUAGES = {
'en': 'English'
}
##########################################################################
# External Database Settings
##########################################################################
CONFIG_DATABASE_URI = 'postgresql://pgadmin:DBPassword@localhost:5432/pgadmin'
##########################################################################
# In server mode, SHARED_STORAGE settings
##########################################################################
# Locations
SHARED_STORAGE = [{ 'name': 'Shared-Storage', 'path': '/var/lib/pgadmin/storage/shared', 'restricted_access': True}]

View File

@@ -0,0 +1,17 @@
{
"Servers": {
"1": {
"Name": "localhost",
"Group": "Servers",
"Host": "localhost",
"Port": 5432,
"MaintenanceDB": "postgres",
"Username": "postgres",
"ConnectionParameters": {
"sslmode": "prefer",
"passfile": "Shared-Storage:/pgpassfile"
},
"Tags": []
}
}
}

View File

@@ -0,0 +1,6 @@
{
"preferences":
{
"misc:themes:theme": "system"
}
}

View File

@@ -0,0 +1,12 @@
[uwsgi]
http-socket= :80
chdir = /usr/pgadmin4/web/
module = pgAdmin4:application
threads = 25
processes = 1
wsgi-file = pgAdmin4.wsgi
mount = /pgadmin=pgAdmin4:app
manage-script-name = true
chmod-socket = 660
plugins = python3
home = /usr/pgadmin4/venv

View File

@@ -0,0 +1,16 @@
[Unit]
Description=pgAdmin uwsgi service
[Service]
ExecStart=/bin/uwsgi-core \
--ini /etc/uwsgi/apps-available/pgadmin.ini
User=pgadmin
Group=www-data
Restart=on-failure
KillSignal=SIGQUIT
Type=notify
StandardError=journal
NotifyAccess=all
[Install]
WantedBy=multi-user.target

View File

@@ -0,0 +1,2 @@
localhost:5432:*:postgres:Password
127.0.0.1:5432:*:postgres:Password

View File

@@ -0,0 +1,35 @@
#!/bin/bash
read -p "Enter your e-mail for pgAdmin login: " PostgressAdminMail
read -p "Enter new password for pgAdmin and postgresql database admin: " -s NewPostgressPassword
echo
echo "Please wait..."
#Configure Postgresql
su postgres -c "psql -c \"alter user postgres with password '$NewPostgressPassword';\""
#Configure pgAdmin
##Create pgadmin db for storing pgAdmin config
PGADMIN_DB_PASSWORD=$(dd bs=20 count=1 if=/dev/urandom | base64 | tr +/ _.)
su postgres -c "psql -c \"CREATE ROLE pgadmin WITH LOGIN NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT NOREPLICATION NOBYPASSRLS CONNECTION LIMIT 25 PASSWORD '$PGADMIN_DB_PASSWORD';\""
su postgres -c "psql -c \"CREATE DATABASE pgadmin WITH OWNER = pgadmin ENCODING = 'UTF8' LOCALE_PROVIDER = 'libc' CONNECTION LIMIT = -1 IS_TEMPLATE = False;\""
sed -i "s/DBPassword/$PGADMIN_DB_PASSWORD/" /usr/pgadmin4/web/config_local.py
##Setup the pgAdmin base
export PGADMIN_SETUP_EMAIL=$PostgressAdminMail
export PGADMIN_SETUP_PASSWORD=$NewPostgressPassword
su -pc "/usr/pgadmin4/venv/bin/python3 /usr/pgadmin4/web/setup.py setup-db" pgadmin
systemctl restart pgadmin
## add localhost postges server as connection is pgAdmin
sed -i "s/Password/$NewPostgressPassword/" /opt/Setup/Configs/pgpassfile
mv /opt/Setup/Configs/pgpassfile /var/lib/pgadmin/storage/shared/pgpassfile
chown pgadmin: /var/lib/pgadmin/storage/shared/pgpassfile
chmod 600 /var/lib/pgadmin/storage/shared/pgpassfile
/usr/pgadmin4/venv/bin/python3 /usr/pgadmin4/web/setup.py load-servers /opt/Setup/Configs/pgadmin-server-import.json --user $PostgressAdminMail
## Set user preferences (i.e. set the theme to system)
/usr/pgadmin4/venv/bin/python3 /usr/pgadmin4/web/setup.py set-prefs $PostgressAdminMail --input-file /opt/Setup/Configs/pgadmin-user-preferences.json
##Clean-up
rm /root/ReadMe /opt/Setup/Configs/pgadmin-server-import.json /opt/Setup/Configs/pgadmin-user-preferences.json

View File

@@ -0,0 +1,16 @@
#!/bin/sh
#Setup postgresql
printf "\n#User entries (Make sure to reload postgressql after updating this file) \n# TYPE DATABASE USER ADDRESS METHOD\n" >> /etc/postgresql/17/main/pg_hba.conf
sed -i "s|#listen_addresses = 'localhost'|listen_addresses = '*' |" /etc/postgresql/17/main/postgresql.conf
#Setup pgadmin
adduser --system --shell /bin/false --ingroup www-data --disabled-password --disabled-login --home /var/lib/www/pgadmin pgadmin
mkdir -p /var/log/pgadmin /var/lib/pgadmin/storage/shared
chown pgadmin: /var/log/pgadmin /var/lib/pgadmin -R
mv /opt/Setup/Configs/pgadmin-uwsgi.ini /etc/uwsgi/apps-available/pgadmin.ini
mv /opt/Setup/Configs/pgadmin-config_local.py /usr/pgadmin4/web/config_local.py
#Setup uwsgi service for pgadmin
mv /opt/Setup/Configs/pgadmin.service /lib/systemd/system/pgadmin.service
chmod +x /lib/systemd/system/pgadmin.service
setcap 'cap_net_bind_service=+ep' /bin/uwsgi-core

View File

@@ -1,14 +1,15 @@
#!/bin/ash
npm install -g pnpm
#Run folowing commands as 'node' user
sudo -u node ash << EOF
#Install zigbee2mqtt
git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/node/zigbee2mqtt
npm --prefix /opt/node/zigbee2mqtt ci
npm --prefix /opt/node/zigbee2mqtt run build
git clone --depth 1 https://github.com/Koenkk/zigbee2mqtt.git /opt/node/zigbee2mqtt
pnpm -C /opt/node/zigbee2mqtt i --frozen-lockfile
pnpm -C /opt/node/zigbee2mqtt run build
##Update config
sed -i -e '/port:/c\ port: \/dev\/ttyACM-Zigbee' /opt/node/zigbee2mqtt/data/configuration.yaml
printf "frontend:\n port: 5002" >> /opt/node/zigbee2mqtt/data/configuration.yaml
cp /opt/node/zigbee2mqtt/data/configuration.example.yaml /opt/node/zigbee2mqtt/data/configuration.yaml
sed -i -e '/# port:/c\# port: \/dev\/ttyACM-Zigbee' /opt/node/zigbee2mqtt/data/configuration.yaml
#Install Z-Wave JS UI
git clone https://github.com/zwave-js/zwave-js-ui /opt/node/ZwaveJsUi
@@ -17,7 +18,7 @@ npm --prefix /opt/node/ZwaveJsUi run build
#Save PM2 statup config
pm2 install pm2-logrotate
pm2 start npm --name zigbee2mqtt --cwd /opt/node/zigbee2mqtt -- start
pm2 start pnpm --name zigbee2mqtt --cwd /opt/node/zigbee2mqtt -- start
pm2 start npm --name ZwaveJsUi --cwd /opt/node/ZwaveJsUi -- start
pm2 save
pm2 kill

View File

@@ -35,6 +35,8 @@ This can be done on a privileged Debian CT (make sure to enable the Fuse, Nestin
| duplicati | Debian | Duplicati backup software |
| fileshelter | Debian | FileShelter file shareing software |
| esphome | Debian | ESPHome software to manage wifi-MCUs|
| postgresql | Debian | PostgreSQL server with pgAdmin|
| linkwarden | Debian | inkwarden is an collaborative bookmark manager to collect, organize and preserve webpages.|
| elkarbackupALP `(Deprecated, Requires PHP 7.4)`| Alpine | ElkarBackup rsyncsnapshot server |
| gitea | Alpine | Gitea server |
| nginx | Alpine | Nginx server for reverse-proxy use |
@@ -46,8 +48,8 @@ This can be done on a privileged Debian CT (make sure to enable the Fuse, Nestin
| nodejs | Alpine | Basic nodejs install with pm2 |
| nextcloud | Alpine | Nextcloud |
| mqtt | Alpine | Mosquitto mqtt broker |
| hass `(Broken, Requires python 3.12)` | Alpine | HomeAssistant instance with HACS and mysql support |
| mailbackup `(Broken, Requires python 3.12)` | Alpine | Contains mail archive tools (MailBackup-sys) |
| hass `(Broken, Requires python 3.13)` | Alpine | HomeAssistant instance with HACS and mysql support |
| mailbackup | Alpine | Contains mail archive tools (MailBackup-sys) |
| heimdall | Alpine | Heimdall, A application dashboard/launcher |
| vouchproxy | Alpine | Vouch-proxy, A SSO solution for Nginx |
| freshrss | Alpine | FreshRSS, a self-hosted RSS feed aggregator |
@@ -203,7 +205,7 @@ lxc.cgroup2.devices.allow: c 188:* rwm
lxc.mount.entry: /dev/ttyACM-Zigbee dev/ttyACM-Zigbee none bind,optional,create=file
lxc.mount.entry: /dev/ttyACM-Zwave dev/ttyACM-Zwave none bind,optional,create=file
```
* Zigbee2mqtt Available on http://`<ip>`:5002
* Zigbee2mqtt Available on http://`<ip>`:8080
* Z-wave JS UI Available on http://`<ip>`:8091
* in the Z-wave JS UI web ui set the Zwave serial port to /dev/ttyACM-Zwave
* If a `Cannot lock port` error shows, please reboot the CT, if that does not fix it try rebooting the Proxmox server
@@ -274,6 +276,15 @@ lxc.mount.entry: /dev/ttyACM-Zwave dev/ttyACM-Zwave none bind,optional,create=fi
## esphome
* Available on http://`<ip>`:6052
## postgresql
* Run the FistRun script in the container `ash /opt/Setup/Scripts/FirstRun.sh`
* After this pgAdmin is available on http://`<ip>`:80,
## linkwarden
* Edit and run the FistRun script in the container `ash /opt/Setup/Scripts/FirstRun.sh`
* After this pgAdmin is available on http://`<ip>`:80,
## uptimekuma
* Available on http://`<ip>`:80
@@ -301,7 +312,7 @@ lvcreate --name <name> --size <VolumeSize>G <PoolName>
```
* Create LVM-Thin Volume
```
lvcreate --thin -n <name> -V <VolumeSize>G <poolName>/<ThinpoolName>
vcreate -V<VolumeSize>G -T <PoolName>/<ThinpoolName> -n <name>
```
* Create ZFS Volume (Available @ /dev/`<poolName>`/`<VolumeName>`)
```