<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.hostsharing.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hsh-janulrichhasecke</id>
	<title>Hostsharing Wiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.hostsharing.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hsh-janulrichhasecke"/>
	<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Spezial:Beitr%C3%A4ge/Hsh-janulrichhasecke"/>
	<updated>2026-04-28T15:14:33Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Spamfilter&amp;diff=7513</id>
		<title>Spamfilter</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Spamfilter&amp;diff=7513"/>
		<updated>2026-02-16T13:04:01Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Einrichtung, Konfiguration und Optimierung eines Spamfilters auf den Hostsharing Servern. Der Artikel beschreibt drei alternative Möglichkeiten: &lt;br /&gt;
&lt;br /&gt;
1. Die Nutzung der &amp;quot;xmailin&amp;quot;-Server für eine komplette Domain&lt;br /&gt;
&lt;br /&gt;
2. Die Einrichtung von Spamassassin für das persönliche Postfach&lt;br /&gt;
&lt;br /&gt;
3. Nutzung der Spam-Appliance &amp;quot;SecureMX&amp;quot; für eine komplette Domain&lt;br /&gt;
&lt;br /&gt;
= Alternative 1: Maileingangsserver mit Spamfilter nutzen =&lt;br /&gt;
&lt;br /&gt;
Diese Alternative kann von einer Domain-Administration oder vom &amp;quot;Webmaster on Demand&amp;quot; für eine oder mehrere E-Mail-Domains eingerichtet werden. Ein globaler Sieve-Filter für markiete Spam-Nachrichten ist in der Standard-Konfiguration voreingestellt, &lt;br /&gt;
so dass Nachrichten mit Spam-Bewertung in einen vorhandenen Spam-Ordner einsortiert werden.&lt;br /&gt;
&lt;br /&gt;
Seit einigen Jahren betreibt Hostsharing zusätzlich zu den vorkonfigurierte Maileingangsservern einen zweiten Satz von Maileingangsservern, bei denen Spamassassin bereits beim Annehmen einer E-Mail ausgeführt wird. Anfang 2026 ist eine Gruppe von Eingangsserver mit der Software &amp;quot;rspamd&amp;quot; hinzugekommen. Eingehende Nachrichten mit Malware oder sehr hoher Bewertung als Spam werden bereits im SMTP-Dialog abgewiesen. Nachrichten mit einem geringeren Spam-Score werden angenommen und zugestellt. Spamassassin fügt die Bewertung für diese Nachrichten in die Header der Nachricht ein, zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
X-Spam-Status: Yes, score=11.29&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der globale Sieve-Filter schiebt Nachrichten mit der Markierung &amp;quot;X-Spam-Status: Yes&amp;quot; in einen Ordner &amp;quot;Junk&amp;quot;, wenn der Ordner vorhanden ist. Viele Mailprogramme legen beim ersten Verbinden mit dem IMAP-Server einen solchen Ordner an. Unser &amp;quot;Roundcube&amp;quot;&lt;br /&gt;
unter https://webmail.hostsharing.net ist entsprechend eingerichtet, so dass der Ordner nach einer Nutzung von Webmail vorhanden ist.&lt;br /&gt;
&lt;br /&gt;
== Eingangsserver konfigurieren ==&lt;br /&gt;
&lt;br /&gt;
Die Maileingangsserver mit Spamassassin lassen sich pro Domain konfigurieren, indem die MX-Records im DNS-Zonefile gegenüber dem Default-Zonefile angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Im Zonefile entfällt der Platzhalter &amp;quot;{MX_RR}&amp;quot;. Stattdessen werden die folgenden MX-Records eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
{DOM_HOSTNAME}.    IN  MX  30  xmailin1.hostsharing.net.&lt;br /&gt;
{DOM_HOSTNAME}.    IN  MX  30  xmailin2.hostsharing.net.&lt;br /&gt;
{DOM_HOSTNAME}.    IN  MX  30  xmailin3.hostsharing.net.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur Änderung der DNS-Zone siehe: https://www.hostsharing.net/doc/managed-operations-platform/zonefile/&lt;br /&gt;
Wer sich die Aktion auf der Shell nicht zutraut, möge bitte den &amp;quot;Webmaster on Demand&amp;quot; beauftragen.&lt;br /&gt;
&lt;br /&gt;
Die Änderung des Zonefile kann für eine Domain &amp;quot;hs-example.de&amp;quot; wie folgt überprüft werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
dig +short -t MX hs-example.de @dns1.hostsharing.net&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die folgende Ausgabe wird erwartet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
30 xmailin2.hostsharing.net.&lt;br /&gt;
30 xmailin3.hostsharing.net.&lt;br /&gt;
30 xmailin1.hostsharing.net.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Reihenfolge der drei Eingangsserver kann variieren. &lt;br /&gt;
Die führende Zahl ist die Priorität im MX-Record (hier der Wert &amp;quot;30&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
= Alternative 2: Persönlichen Spamfilter einrichten =&lt;br /&gt;
&lt;br /&gt;
Hier geht es darum, wie Personen mit (grundlegenden) Kenntnissen in der Shell-Bedienung für ihr persönliches Postfach einen Spam-Filter einrichten können. Spamassassin kann für jedes Postfach individuell konfiguriert werden. Für die Einrichtung und Pflege ist Shell-Zugang zur Mailbox erforderlich.  &lt;br /&gt;
&lt;br /&gt;
Ein Bayesfilter kann mit den persönlichen Nachrichten angelernt werden. Dazu sind tiefergehende Shell-Kenntnisse erforderlich (Shell-Skript und Einrichtung eines systemd-Timers).&lt;br /&gt;
&lt;br /&gt;
== Spamassassin Konfigurieren ==&lt;br /&gt;
&lt;br /&gt;
Der Spamfilter &amp;quot;Spamassassin&amp;quot; ist bei HS vorinstalliert. Es muss über das Kommando &amp;quot;spamc&amp;quot;, das Kommando zur Nutzung des Spamassassin-Daemon, in der Datei &amp;quot;.forward&amp;quot; eines Mail-Users aufgerufen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
&amp;quot;|/usr/bin/spamc -U /var/run/spamd -e /usr/lib/dovecot/deliver&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Effekt: Spammassassin schreibt seine Testergebnisse in die Headerzeilen jeder E-Mail und leitet die E-Mails weiter an das Programm &amp;quot;deliver&amp;quot; aus dem Dovecot-Paket. Das Sortieren von Spam-EMail in einen Spam-Ordner lässt sich mit Sieve-Filtern umsetzen.&lt;br /&gt;
&lt;br /&gt;
In dieser Variante kann man Spamassassin individuell konfigurieren. Dazu legt man im $HOME des Mailbox-Account ein Verzeichnis &amp;quot;$HOME/.spamassassin&amp;quot; an. Die Konfiguration erfolgt in der Datei &amp;quot;$HOME/.spamassassin/user_prefs&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Konfigurationsbeispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
required_score          4.0&lt;br /&gt;
report_safe             0&lt;br /&gt;
use_bayes               1&lt;br /&gt;
bayes_auto_learn        1&lt;br /&gt;
skip_rbl_checks         0&lt;br /&gt;
use_razor2              1&lt;br /&gt;
use_pyzor               1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bayesfilter anlernen ==&lt;br /&gt;
&lt;br /&gt;
Wenn der Bayesfilter eingeschaltet ist, macht es Sinn den Filter mit den Befehlen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
sa-learn --spam &amp;lt;platzhalter-spam-nachricht-oder-verzeichnis&amp;gt;&lt;br /&gt;
sa-learn --ham &amp;lt;platzhalter-erwünschte-nachricht-oder-verzeichnis&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
anzulernen. Ein Bash-Skript für das Erlernen von Spam/Nonspam kann wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
HAM_MIN_AGE_DAYS=5&lt;br /&gt;
MAILDIR_HAM=${HOME}/Maildir/cur&lt;br /&gt;
TMPDIR=${HOME}/sa-learn-tmp&lt;br /&gt;
SPAMFOLDER=Junk&lt;br /&gt;
SPAMFOLDER_LEARNED=${SPAMFOLDER}.sa-learned&lt;br /&gt;
MAILDIR_SPAM=${HOME}/Maildir/.${SPAMFOLDER}&lt;br /&gt;
&lt;br /&gt;
# Learn spam from MAILDIR_SPAM&lt;br /&gt;
mkdir -p ${TMPDIR}/spam&lt;br /&gt;
rm -f ${TMPDIR}/spam/*&lt;br /&gt;
SPAM_COUNT=0&lt;br /&gt;
for DIR in &amp;quot;cur&amp;quot; &amp;quot;new&amp;quot;; do&lt;br /&gt;
	DIR=&amp;quot;${MAILDIR_SPAM}/${DIR}&amp;quot;&lt;br /&gt;
	cd ${DIR}&lt;br /&gt;
	# echo &amp;quot;---&amp;quot; DIR ${DIR}&lt;br /&gt;
	for SPAMFILE in $( ls ); do&lt;br /&gt;
		# echo &amp;quot;   &amp;quot; ${SPAMFILE}&lt;br /&gt;
		TMPFILE=&amp;quot;${TMPDIR}/spam/${SPAMFILE}&amp;quot;&lt;br /&gt;
		if ! zcat &amp;quot;${SPAMFILE}&amp;quot; &amp;gt; &amp;quot;${TMPFILE}&amp;quot; 2&amp;gt;/dev/null; then&lt;br /&gt;
			cp &amp;quot;${SPAMFILE}&amp;quot; &amp;quot;${TMPFILE}&amp;quot;&lt;br /&gt;
		fi&lt;br /&gt;
		SPAM_COUNT=$((SPAM_COUNT + 1))&lt;br /&gt;
	done&lt;br /&gt;
done&lt;br /&gt;
sa-learn --spam ${TMPDIR}/spam/*&lt;br /&gt;
&lt;br /&gt;
# Move processed spam to keep it in another folder&lt;br /&gt;
doveadm move -u $(whoami) INBOX.${SPAMFOLDER_LEARNED} mailbox INBOX.${SPAMFOLDER} all 2&amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
# Learn ham from MAILDIR_HAM (&amp;gt; HAM_MIN_AGE_DAYS days; max. 2x spam count)&lt;br /&gt;
mkdir -p ${TMPDIR}/ham&lt;br /&gt;
rm -f ${TMPDIR}/ham/*&lt;br /&gt;
cd ${MAILDIR_HAM}&lt;br /&gt;
MAX_HAM=$((SPAM_COUNT * 2))&lt;br /&gt;
HAM_COUNT=0&lt;br /&gt;
for HAMFILE in $( find . -type f -mtime +${HAM_MIN_AGE_DAYS} -printf &#039;%T@ %p\n&#039; | sort -rn | cut -d&#039; &#039; -f2- | head -n ${MAX_HAM} ); do&lt;br /&gt;
	TMPFILE=&amp;quot;${TMPDIR}/ham/${HAMFILE}&amp;quot;&lt;br /&gt;
	if ! zcat &amp;quot;${HAMFILE}&amp;quot; &amp;gt; &amp;quot;${TMPFILE}&amp;quot; 2&amp;gt;/dev/null; then&lt;br /&gt;
		cp &amp;quot;${HAMFILE}&amp;quot; &amp;quot;${TMPFILE}&amp;quot;&lt;br /&gt;
	fi&lt;br /&gt;
	HAM_COUNT=$((HAM_COUNT + 1))&lt;br /&gt;
done&lt;br /&gt;
sa-learn --ham ${TMPDIR}/ham/*&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Training erfolgte mit ${SPAM_COUNT} Spam, ${HAM_COUNT} (max ${MAX_HAM}) Ham Mails.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei werden Mails verarbeitet, unabhängig davon, ob sie durch Procmail (unkomprimiert) oder über den Mailclient (komprimiert) verschoben vorliegen.&lt;br /&gt;
Für Ham wird ein Teil des Inhalts der Inbox verwendet, wobei die empfohlene Maximalanzahl von zweimal der Spammailanzahl und ein minimales Alter in Tagen gilt. Das Mindestalter garantiert ein inzwischen erfolgtes manuelles Aussortieren des Spams. Der verarbeitete Spam wird anschließend in ein separates Verzeichnis verschoben um den späteren Zugriff auf False Positives zu ermöglichen.&lt;br /&gt;
&lt;br /&gt;
Das Skript wird über einen systemd-Timer täglich ausgeführt, der pro Mailbox eingerichtet werden muss.&lt;br /&gt;
&lt;br /&gt;
= Alternative 3: SecureMX zubuchen =&lt;br /&gt;
&lt;br /&gt;
Über unseren Domain-Anbieter &amp;quot;Partnergate&amp;quot; bietet Hostsharing als dritte Alternative die kommerzielle Spam-Appliance von Cisco an. Das Produkt heißt bei Partnergate &amp;quot;SecureMX&amp;quot;: https://www.hostsharing.net/loesungen/email/spam-abwehr/&lt;br /&gt;
&lt;br /&gt;
Die Nutzung von SecureMX ist kostenpflichtig und wird auf Wunsch vom Hostsharing-Service eingerichtet. &lt;br /&gt;
&lt;br /&gt;
Es ist zu beachten, dass bei der Nutzung von SecureMX alle eingehenden E-Mail Nachrichten über Server geleitet werden, die nicht unter der Kontrolle von Hostsharing stehen und proprietäre Software einsetzen. Dieser Sachverhalt muss vom Mitglied ggf. datenschutzrechtlich bewertet werden.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Glossar]]&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Gitea&amp;diff=7304</id>
		<title>Gitea</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Gitea&amp;diff=7304"/>
		<updated>2025-03-12T08:11:32Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: /* Gitea installieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Gitea installieren ==&lt;br /&gt;
&lt;br /&gt;
[https://gitea.io/en-us/ Gitea] ist ein einfacher, selbst gehosteter Git-Service wie GitHub oder GitLab. Die Software ist ein Fork von Gogs und ebenfalls in der Programmiersprache Go geschrieben. Gitea benötigt wenig Ressourcen.&lt;br /&gt;
 &lt;br /&gt;
Die hier beschriebene Installation benötigt im [https://www.hostsharing.net/paas/managed-webspace/ Hostsharing Managed Webspace] die Paket-Option &amp;quot;Arbeitsspeicher für eigene Serverdienste&amp;quot;. Benötigt werden min. 128 MB.&lt;br /&gt;
 &lt;br /&gt;
Gitea unterstützt verschiedene Datenbanken. Wir gehen in dieser Anleitung davon aus, dass PostgreSQL benutzt wird.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung der Installation ===&lt;br /&gt;
&lt;br /&gt;
Um Gitea auf der Managed Operation Platform von Hostsharing zu installieren, ist folgende Vorbereitung erforderlich.&lt;br /&gt;
&lt;br /&gt;
# Anlegen eines Domain-Benutzers. In unserem Beispiel &amp;lt;code&amp;gt;xyz00-gitea&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Anlegen einer Domain. In unserem Beispiel &amp;lt;code&amp;gt;gitea.hs-example.de&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Anlegen eines Datenbank-Benutzers. Hier &amp;lt;code&amp;gt;xyz00_giteadbuser&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Anlegen einer Datenbank. Hier &amp;lt;code&amp;gt;xyz00_giteadb&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Auf der Kommandozeile kann man dies folgendermaßen erledigen.&lt;br /&gt;
&lt;br /&gt;
Man loggt sich als Paketbenutzer ein und startet die Kommandozeilenversion von HSAdmin mit dem Befehl &amp;lt;code&amp;gt;hsscript&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
hsscript -u xyz00 -i&lt;br /&gt;
Password: ********&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend kann man die Vorbereitungsschritte 1 bis 4 erledigen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
xyz00@hsadmin&amp;gt; user.add({set:{name:&#039;xyz00-gitea&#039;,password:&#039;geheim&#039;,shell:&#039;/bin/bash&#039;}})&lt;br /&gt;
xyz00@hsadmin&amp;gt; domain.add({set:{name:&#039;gitea.hs-example.de&#039;,user:&#039;xyz00-gitea&#039;}})&lt;br /&gt;
xyz00@hsadmin&amp;gt; postgresqluser.add({set:{name:&#039;xyz00_giteadbuser&#039;,password:&#039;geheim&#039;}})&lt;br /&gt;
xyz00@hsadmin&amp;gt; postgresqldb.add({set:{name:&#039;xyz00_giteadb&#039;,owner:&#039;xyz00_giteadbuser&#039;}})&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installation von Gitea ===&lt;br /&gt;
&lt;br /&gt;
Gitea wird als Binary zur Verfügung gestellt.&lt;br /&gt;
Wir installieren das Binary im Verzeichnis des Domain-Benutzers.&lt;br /&gt;
Wenn wir als Paketbenutzer eingeloggt sind, können wir den Benutzer folgendermaßen wechseln:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
sudo -u xyz00-gitea -i&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Nun laden wir das passende Binary herunter.&lt;br /&gt;
Auf der Website https://dl.gitea.io/gitea/ finden Sie das jeweils aktuelle Binary (hier die 64-Bit-Version, &lt;br /&gt;
für die shared Server h01 bis h08 bitte die 32-Bit-Version gitea-1.7.0-linux-i386 herunterladen).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
wget -O gitea https://dl.gitea.io/gitea/1.7.0/gitea-1.7.0-linux-amd64&lt;br /&gt;
chmod +x gitea&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wir laden die GPG-Signatur herunter und überprüfen sie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
wget https://dl.gitea.io/gitea/1.7.0/gitea-1.7.0-linux-amd64.asc&lt;br /&gt;
gpg --keyserver keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2&lt;br /&gt;
gpg --verify gitea-1.7.0-linux-amd64.asc gitea&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun können wir Gitea testweise starten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
./gitea web&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Webserver von Gitea startet auf dem Port 3000. Das werden wir später ändern.&lt;br /&gt;
&lt;br /&gt;
Der Server kann mit Ctrl-C beendet werden.&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration der Domain ===&lt;br /&gt;
&lt;br /&gt;
Zunächst wechseln wir in das Verzeichnis &amp;lt;code&amp;gt;doms/gitea.hs-example.de&amp;lt;/code&amp;gt; und löschen den Ordner für die Subdomain &#039;www&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
rm -rf subs/www&lt;br /&gt;
rm -rf subs-ssl/www&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend tragen wir die Umleitung auf HTTPS ein, falls dies nicht schon geschehen ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
vi htdocs/.htaccess&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
Der Eintrag muss lauten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=apache&amp;gt;&lt;br /&gt;
Redirect permanent / https://gitea.hs-example.com/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
Dann legen wir die Datei &amp;lt;code&amp;gt;htdocs-ssl/.htaccess&amp;lt;/code&amp;gt; mit folgendem Inhalt an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=apache&amp;gt;&lt;br /&gt;
DirectoryIndex disabled&lt;br /&gt;
RewriteEngine on&lt;br /&gt;
RewriteBase /&lt;br /&gt;
RewriteRule ^(.*) http://localhost:31580/$1 [proxy,last]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Merken Sie sich die Portnummer 31580.&lt;br /&gt;
Sie wird später bei der Konfiguration von Gitea gebraucht.&lt;br /&gt;
Die Portnummer bekommen Sie vom Hostmaster, wenn Sie für Ihren Webspace RAM buchen.&lt;br /&gt;
Wenn Sie einen Managed Server haben, können Sie selbst die Portnummer auswählen.&lt;br /&gt;
&lt;br /&gt;
Damit ist die Konfiguration von Apache abgeschlossen.&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration von Gitea ===&lt;br /&gt;
&lt;br /&gt;
Wir editieren nun die Konfigurationsdatei von Gitea &amp;lt;code&amp;gt;app.ini&amp;lt;/code&amp;gt;.&lt;br /&gt;
Sie befindet sich in dem Verzeichnis &amp;lt;code&amp;gt;~/custom/conf&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ACHTUNG&#039;&#039;&#039;: Sie können die Konfiguration teilweise auch über das Webinterface durchführen. Starten Sie dazu Gitea, wie oben beschrieben, und versuchen Sie einen Benutzer zu registrieren. Daraufhin öffnet sich der Konfigurationsdialog. Sie müssen den Gitea-Benutzer, den Namen der Datenbank, den Datenbank-Benutzer und sein Passwort parat haben.&lt;br /&gt;
&lt;br /&gt;
Die Konfigurationsdatei beginnt mit allgemeinen Einträgen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
APP_NAME = Gitea: Git with a cup of tea&lt;br /&gt;
RUN_USER = xyz00-gitea&lt;br /&gt;
RUN_MODE = prod&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Abschnitt [database] folgen die Angaben zur Datenbank:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[database]&lt;br /&gt;
DB_TYPE  = postgres&lt;br /&gt;
HOST     = 127.0.0.1:5432&lt;br /&gt;
NAME     = xyz00_giteadb&lt;br /&gt;
USER     = xyz00_giteadbuser&lt;br /&gt;
PASSWD   = geheim&lt;br /&gt;
SSL_MODE = disable&lt;br /&gt;
PATH     = data/gitea.db&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es folgt der Pfad zu den Git-Repositorys und die Server-Konfiguration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[repository]&lt;br /&gt;
ROOT = /home/pacs/xyz00/users/gitea/gitea-repositories&lt;br /&gt;
    &lt;br /&gt;
[server]&lt;br /&gt;
PROTOCOL         = http&lt;br /&gt;
SSH_DOMAIN       = gitea.hs-example.de &lt;br /&gt;
DOMAIN           = gitea.hs-example.de&lt;br /&gt;
HTTP_ADDR        = localhost&lt;br /&gt;
HTTP_PORT        = 31580&lt;br /&gt;
ROOT_URL         = https://gitea.hs-example.de/&lt;br /&gt;
DISABLE_SSH      = false&lt;br /&gt;
SSH_PORT         = 22&lt;br /&gt;
LFS_START_SERVER = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für das Schreiben der Log Datei können Sie folgendes konfigurieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[log]&lt;br /&gt;
MODE       = file&lt;br /&gt;
LEVEL      = info&lt;br /&gt;
ROOT_PATH  = /home/pacs/xyz00/users/gitea/custom/logs/&lt;br /&gt;
ROUTER     = file&lt;br /&gt;
LOG_ROTATE = false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ACHTUNG&#039;&#039;&#039;: Bitte prüfen Sie, ob der Ordner zum Speichern der Log-Dateien von Gitea vorhanden ist. Bei Bedarf erstellen Sie die Ordnerstruktur entsprechend.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
mkdir -p /home/pacs/xyz00/users/gitea/custom/logs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sie können nun Gitea starten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
./gitea web&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
Der Git-Service ist dann im Browser unter der Adresse gitea.hs-example.de erreichbar.&lt;br /&gt;
&lt;br /&gt;
=== Service einrichten ===&lt;br /&gt;
&lt;br /&gt;
Zum Schluss müssen Sie noch den Service zum Starten von Gitea einrichten.&lt;br /&gt;
&lt;br /&gt;
Das Service Skript speichern Sie unter dem Pfad &amp;lt;code&amp;gt;~/.config/systemd/user/gitea.service&amp;lt;/code&amp;gt; ab.&lt;br /&gt;
Es hat folgenden Inhalt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
Description=Gitea&lt;br /&gt;
    &lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
Restart=on-abort&lt;br /&gt;
WorkingDirectory=%h&lt;br /&gt;
ExecStart=%h/gitea web&lt;br /&gt;
    &lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun können Sie noch die Rotation der Logfiles konfigurieren.&lt;br /&gt;
Dies geschieht in der Datei &amp;lt;code&amp;gt;~/.logrotate&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
/home/pacs/xyz00/users/gitea/custom/logs/gitea.log {&lt;br /&gt;
  copytruncate&lt;br /&gt;
  daily&lt;br /&gt;
  rotate 7&lt;br /&gt;
  compress&lt;br /&gt;
  missingok&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit logrotate regelmäßig ausgeführt wird, müssen Sie folgenden systemd Timer für denv Domain-Benutzers einrichten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;~/.config/systemd/user/gitea_logrotate.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=rotate gittea logs&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/sbin/logrotate -s /home/pacs/xyz00/users/gitea/.logrotate.state /home/pacs/xyz00/users/gitea/.logrotate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;~/.config/systemd/user/gitea_logrotate.timer&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=rotate gittea logs&lt;br /&gt;
&lt;br /&gt;
[Timer]&lt;br /&gt;
OnCalendar=1:51&lt;br /&gt;
Persistent=True&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=timers.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Timer aktivieren und starten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ systemctl --user enable gitea_logrotate.timer&lt;br /&gt;
$ systemctl --user start gitea_logrotate.timer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Uhrzeit für die Logrotation können Sie beliebig einstellen.&lt;br /&gt;
&lt;br /&gt;
Abschließend können Sie Ihre Gitea-Instanz starten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
export XDG_RUNTIME_DIR=/run/user/$UID&lt;br /&gt;
systemctl --user start gitea&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ACHTUNG&#039;&#039;&#039;: Bitte beachten Sie, dass für die Ausführung von Benutzerskripten mit systemctl für den aktuellen Benutzer im hsadmin die Shell &amp;quot;/bin/bash&amp;quot; konfiguriert sein muss.&lt;br /&gt;
&lt;br /&gt;
=== Anmeldung über LDAP einrichten ===&lt;br /&gt;
&lt;br /&gt;
Ohne weitere Konfiguration, können nun lokale Benutzer angelegt werden.&lt;br /&gt;
&lt;br /&gt;
Falls Sie die Benutzerverwaltung noch an ein LDAP Verzeichnis anschließen wollen, können Sie diese Schritte ausführen:&lt;br /&gt;
&lt;br /&gt;
Sie finden hier die Informationen zum Einrichten eines OpenLDAP Dienstes: [[OpenLDAP]]&lt;br /&gt;
&lt;br /&gt;
Gehen Sie in der Weboberfläche von Git in die Administration, und dort in den Reiter &amp;quot;Authentifizierungsquellen&amp;quot;, oder direkt auf dem Link https://git.hs-example.de/-/admin/auths&lt;br /&gt;
&lt;br /&gt;
Dort sollten dann folgende Werte eingetragen werden:&lt;br /&gt;
* Authentifizierungstyp: LDAP (via BindDN)&lt;br /&gt;
* Host: &amp;lt;code&amp;gt;localhost&amp;lt;/code&amp;gt; (bzw. der Name des Servers, auf dem OpenLDAP erreichbar ist)&lt;br /&gt;
* Port: &amp;lt;code&amp;gt;30389&amp;lt;/code&amp;gt; (bzw. der Port auf dem OpenLDAP erreichbar ist)&lt;br /&gt;
* DN binden: &amp;lt;code&amp;gt;cn=admin,dc=hs-example,dc=de&amp;lt;/code&amp;gt; (Der Benutzer der Zugriff auf alle Benutzer hat)&lt;br /&gt;
* Passwort binden: Das Passwort von dem DN Benutzer&lt;br /&gt;
* Basis für Benutzersuche: &amp;lt;code&amp;gt;ou=users,dc=hs-example,dc=de&amp;lt;/code&amp;gt;&lt;br /&gt;
* Benutzerfilter: &amp;lt;code&amp;gt;(&amp;amp;(objectClass=inetOrgPerson)(uid=%s))&amp;lt;/code&amp;gt;&lt;br /&gt;
* Admin-Filter: &amp;lt;code&amp;gt;(memberof=cn=admins,ou=groups,dc=hs-example,dc=de)&amp;lt;/code&amp;gt; (diese Benutzer haben Admin Rechte in Gitea)&lt;br /&gt;
* Benutzernamens-Attribute: &amp;lt;code&amp;gt;DN&amp;lt;/code&amp;gt;&lt;br /&gt;
* Vornamensattribut: &amp;lt;code&amp;gt;givenName&amp;lt;/code&amp;gt;&lt;br /&gt;
* Nachnamensattribut: &amp;lt;code&amp;gt;sn&amp;lt;/code&amp;gt;&lt;br /&gt;
* E-Mail-Attribut: &amp;lt;code&amp;gt;mail&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier noch ein Screenshot:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Gitea_LDAP_Einrichtung.png|500px]]&lt;br /&gt;
&lt;br /&gt;
=== Default Branches ohne Force Push ===&lt;br /&gt;
&lt;br /&gt;
In den Einstellungen von jedem Repository kann unter &amp;quot;Branches&amp;quot; eine Regel z.B. für den Hauptbranch erstellt werden, damit entweder nur Pull Requests und kein direkter Push erlaubt ist, oder dass Push erlaubt ist, aber kein Verändern der Historie mit force push.&lt;br /&gt;
&lt;br /&gt;
Über diese SQL Befehl können die Einstellungen überprüft werden:&lt;br /&gt;
&lt;br /&gt;
Zeige alle Repositories, die noch keine Regel für den Hauptbranch haben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=sql&amp;gt;&lt;br /&gt;
SELECT r.id, owner_name, lower_name, r.default_branch&lt;br /&gt;
FROM repository r&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
        SELECT 1&lt;br /&gt;
        FROM protected_branch pb&lt;br /&gt;
        WHERE pb.repo_id = r.id AND pb.branch_name = r.default_branch&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zeige die Regeln für die Hauptbranches:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=sql&amp;gt;&lt;br /&gt;
SELECT r.id, owner_name, lower_name, r.default_branch, pb.can_push, pb.required_approvals&lt;br /&gt;
FROM repository r JOIN protected_branch pb ON pb.repo_id = r.id AND pb.branch_name = r.default_branch;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== weiterführende Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://gitea.io/ Gitea Webseite]&lt;br /&gt;
* [https://docs.gitea.io/ Dokumentation von Gitea]&lt;br /&gt;
* [https://codeberg.org/tpokorra/hs.ansible/src/branch/main/playbooks/gitea Ansible Playbook für Hostsharing]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Ansible Playbook]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Projektmanagement]]&lt;br /&gt;
[[Kategorie:Projektverwaltung]]&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Nextcloud&amp;diff=7303</id>
		<title>Nextcloud</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Nextcloud&amp;diff=7303"/>
		<updated>2025-03-12T07:08:43Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: /* Redis Cache */ Formulierung für Arbeitsspeicher optimiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Nextcloud =&lt;br /&gt;
&lt;br /&gt;
[https://nextcloud.com/ Nextcloud] ist eine PHP-basierte Open Source Lösung für gängige Cloud-Anwendungen, u.a.:&lt;br /&gt;
&lt;br /&gt;
* Filesharing unter Nutzern derselben Nextcloud, und mit der Öffentlichkeit&lt;br /&gt;
* Single-Sign-On Authentifizierung (SSO)&lt;br /&gt;
* Videokonferenzen (WebRTC)&lt;br /&gt;
* Online-Office Anwendung [https://www.collaboraoffice.com/ Collabora Online]&lt;br /&gt;
&lt;br /&gt;
Beispiel-Funktionalität, die über Plugins, sogenannte [https://apps.nextcloud.com/ &amp;quot;Apps&amp;quot;], bereit gestellt werden kann:&lt;br /&gt;
&lt;br /&gt;
* Kalender, Aufgabenverwaltung, Adressbuch&lt;br /&gt;
* Datei-Kollaboration (Kommentare zu Dateien, Verschlagwortung)&lt;br /&gt;
* Feedreader&lt;br /&gt;
* E-Mail-Programm&lt;br /&gt;
* Fotogalerie&lt;br /&gt;
* Musik- und Videowiedergabe&lt;br /&gt;
&lt;br /&gt;
= Nextcloud installieren =&lt;br /&gt;
&lt;br /&gt;
== Vorbereitungen ==&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;hsadmin&#039;&#039;, zum Beispiel mit &#039;&#039;hsscript&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;hsadmin&#039;&#039;-Shell starten mit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
hsscript -u xyz00 -i&lt;br /&gt;
Password: ********&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann nacheinander anlegen:&lt;br /&gt;
&lt;br /&gt;
* Linux User als Domain-Administrator&lt;br /&gt;
* Subdomain &#039;&#039;cloud.example.org&#039;&#039;&lt;br /&gt;
* PostgreSQL-User &lt;br /&gt;
* PostgreSQL Datenbank&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
xyz00@hsadmin&amp;gt; user.add({set:{name:&#039;xyz00-cloud&#039;,password:&#039;geheim&#039;,shell:&#039;/bin/bash&#039;,comment:&#039;Nextcloud&#039;}})&lt;br /&gt;
xyz00@hsadmin&amp;gt; domain.add({set:{name:&#039;cloud.example.org&#039;,user:&#039;xyz00-cloud&#039;}})&lt;br /&gt;
xyz00@hsadmin&amp;gt; postgresqluser.add({set:{name:&#039;xyz00_nextclusr&#039;,password:&#039;geheim&#039;}})&lt;br /&gt;
xyz00@hsadmin&amp;gt; postgresqldb.add({set:{name:&#039;xyz00_nextcloud&#039;,owner:&#039;xyz00_nextclusr&#039;}})&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nextcloud installieren ==&lt;br /&gt;
&lt;br /&gt;
Anmelden als Linux-User &#039;&#039;xyz00-cloud&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
ssh -l xyz00-cloud xyz00.hostsharing.net&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;htdocs&#039;&#039; Verzeichnis vorbereiten&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
cd&lt;br /&gt;
mkdir nextcloud&lt;br /&gt;
cd doms/cloud.example.org&lt;br /&gt;
rm -rf subs/www subs-ssl/www htdocs-ssl&lt;br /&gt;
ln -s $HOME/nextcloud htdocs-ssl&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Falls der &#039;&#039;Redirect&#039;&#039; auf die Domain &#039;&#039;example.org&#039;&#039; umleitet statt auf die Subdomain &#039;&#039;cloud.example.org&#039;&#039;, kann diese Aktion helfen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
cd doms/cloud.example.org&lt;br /&gt;
mkdir -p subs-ssl/www&lt;br /&gt;
cp htdocs/.htaccess subs-ssl/www/.htaccess&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nextcloud herunterladen und entpacken.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
cd &lt;br /&gt;
wget https://download.nextcloud.com/server/releases/nextcloud-30.0.6.zip&lt;br /&gt;
unzip nextcloud-30.0.6.zip &lt;br /&gt;
rm nextcloud-30.0.6.zip&lt;br /&gt;
mkdir data tmp&lt;br /&gt;
chmod 700 data tmp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um Probleme mit der Anmeldung der Nextcloud App am Mobilgerät zu vermeiden, müssen folgende Zeilen in der Datei &amp;lt;code&amp;gt;doms/cloud.example.org/.htaccess&amp;lt;/code&amp;gt; eingefügt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=htaccess&amp;gt;&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteCond %{HTTP:Authorization} ^(.*)&lt;br /&gt;
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nextcloud konfigurieren ==&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis &amp;quot;$HOME/doms/cloud.example.org/fastcgi-ssl/&amp;quot; eine Datei &amp;quot;php.ini&amp;quot; anlegen mit folgendem Inhalt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
memory_limit=512M&lt;br /&gt;
session.save_path=/home/pacs/xyz00/users/cloud/tmp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann mit einem Editor diese Datei bearbeiten: In der zweiten Zeile den korrekten Pfad des vorher angelegten tmp-Verzeichnisses eintragen.&lt;br /&gt;
&lt;br /&gt;
Im Browser auf die Seite &lt;br /&gt;
http://cloud.example.org gehen und den Anweisungen folgen.&lt;br /&gt;
&lt;br /&gt;
Auf der ersten Seite sind anzugeben:&lt;br /&gt;
&lt;br /&gt;
* Login und Passwort für den Administrator definieren&lt;br /&gt;
* PostgreSQL als Datenbanksystem&lt;br /&gt;
* PostgreSQL-User und Passwort aus dem ersten Schritt oben&lt;br /&gt;
* Name der PostgreSQL-Datenbank aus dem ersten Schritt&lt;br /&gt;
* &amp;quot;localhost&amp;quot; als Datenbankserver (Nextcloud 23.0.2 empfiehlt hier die Angabe des Ports, diesen also lt. [[PostgreSQL]] angeben)&lt;br /&gt;
* Das Verzeichnis &amp;quot;/home/pacs/xyz00/users/cloud/data/&amp;quot; als Daten-Verzeichnis (bitte beachten: das im Eingabefeld voreingestellte verweist auf das Verzeichnis &amp;quot;/home/pacs/xyz00/users/cloud/&#039;&#039;&#039;nextcloud&#039;&#039;&#039;/data/&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung!&#039;&#039;&#039; Die Felder für die Datenbank sind auf dem Startscreen hinter einem unscheinbaren Link versteckt. Um man das Formular für die Datenbank-Daten zu gelangen, muss man auf den Link klicken. Anschließend kann man die gewünschte Datenbank auswählen und die entsprechenden Daten eintragen. &#039;&#039;&#039;Das sollte geschehen, bevor man die Installation abschließt!&#039;&#039;&#039; Tut man dies nicht, wird Nextcloud mit SQLite installiert. Eine Änderung der Datenbank soll zwar laut Dokumentation auch später noch möglich sein, ging aber bei einem Test schief.&lt;br /&gt;
&lt;br /&gt;
In der Konfigurationsdatei der Nextcloud (in &#039;&#039;~/nextcloud/config/config.php&#039;&#039;) lassen sich weitere Voreinstellungen treffen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=php line&amp;gt;&lt;br /&gt;
&#039;maintenance_window_start&#039; =&amp;gt; 1,    // Wartungsfenster ab 1:00 Uhr&lt;br /&gt;
&#039;defaultapp&#039; =&amp;gt; &#039;calendar,files&#039;,   // bei Start wird der Kalender gezeigt&lt;br /&gt;
&#039;default_phone_region&#039; =&amp;gt; &#039;DE&#039;,     // Format Telefonnummern&lt;br /&gt;
&#039;default_language&#039; =&amp;gt; &#039;de&#039;,         // Sprache deutsch&lt;br /&gt;
&#039;force_language&#039; =&amp;gt; &#039;de&#039;,&lt;br /&gt;
&#039;default_locale&#039; =&amp;gt; &#039;de_DE&#039;,        // Locale (Formatierung Zeitangaben etc.) &lt;br /&gt;
&#039;force_locale&#039; =&amp;gt; &#039;de_DE&#039;,&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nextcloud beschleunigen ==&lt;br /&gt;
&lt;br /&gt;
Dieser Teil ist optional.&lt;br /&gt;
&lt;br /&gt;
Wenn regelmäßig &#039;&#039;&#039;im Browser&#039;&#039;&#039; mit Nextcloud gearbeitet werden soll, ist Nextcloud im Browser oft sehr langsam. Um dies zu verbessern, unterstützt Nextcloud die Anwendung von unterschiedlichen Cache-Verfahren (zum Beispiel Memcache, Redis).&lt;br /&gt;
&lt;br /&gt;
=== Redis Cache ===&lt;br /&gt;
&lt;br /&gt;
Redis ist auf den Hostsharing-Servern vorinstalliert und wird von den Nextcloud-Entwicklern empfohlen. Redis wird als eigener Serverdienst gestartet. &#039;&#039;&#039;In Verbindung mit Hostsharing Managed Webspace muss für Redis [https://www.hostsharing.net/paas/managed-webspace/ Arbeitsspeicher für eigene Serverdienste] gebucht werden&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
Die Konfiguration des Redis-Dientes ist auf der Seite [[Redis]] beschrieben. Hier wird für Nextcloud die Variante mit einem Unixsocket benutzt.&lt;br /&gt;
&lt;br /&gt;
In der Konfiguration der Nextcloud (in &#039;&#039;~/nextcloud/config/config.php&#039;&#039;) wird der Redis-Cache wie folgt konfiguriert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=php line&amp;gt;&lt;br /&gt;
&#039;memcache.local&#039; =&amp;gt; &#039;\\OC\\Memcache\\Redis&#039;,&lt;br /&gt;
&#039;memcache.distributed&#039; =&amp;gt; &#039;\\OC\\Memcache\\Redis&#039;,&lt;br /&gt;
&#039;memcache.locking&#039; =&amp;gt; &#039;\\OC\\Memcache\\Redis&#039;,&lt;br /&gt;
&#039;redis&#039; =&amp;gt; &lt;br /&gt;
  array (&lt;br /&gt;
    &#039;host&#039; =&amp;gt; &#039;/home/pacs/xyz00/users/cloud/redis/var/redis-server.sock&#039;,&lt;br /&gt;
    &#039;port&#039; =&amp;gt; 0,&lt;br /&gt;
    &#039;password&#039; =&amp;gt; &#039;mein-redis-passwort&#039;,&lt;br /&gt;
    &#039;timeout&#039; =&amp;gt; 1.5,&lt;br /&gt;
  ),&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um es perfekt zu machen, nutze ich &#039;&#039;logrotate&#039;&#039; um die Logdateien zu organisieren. Dazu die Konfiguration in &#039;&#039;~/.logrotate&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
compress&lt;br /&gt;
/home/pacs/xyz00/users/cloud/redis/var/redis.log {&lt;br /&gt;
  rotate 5&lt;br /&gt;
  daily&lt;br /&gt;
  missingok&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Mit systemd-Timern werden die Logdateien täglich rotiert:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;~/.config/systemd/user/logrotate.service&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=rotate log files&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/sbin/logrotate -s %h/.logrotate.state %h/.logrotate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;~/.config/systemd/user/logrotate.timer&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=timer for nextcloud cleanup job&lt;br /&gt;
&lt;br /&gt;
[Timer]&lt;br /&gt;
OnCalendar=1:1&lt;br /&gt;
Persistent=True&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=timers.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Den Timer aktivieren und starten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
$ systemctl --user enable logrotate.timer&lt;br /&gt;
$ systemctl --user start logrotate.timer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit einem weiteren Timer für die regelmäßigen Hintergrundaufgaben von Nextcloud lässt sie sich noch etwas beschleunigen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;~/.config/systemd/user/nextcloud_background.service&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=nextcloud cleanup job&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=php8.2 /home/pacs/xyz00/users/cloud/nextcloud/cron.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;~/.config/systemd/user/nextcloud_background.timer&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=timer for nextcloud cleanup job&lt;br /&gt;
&lt;br /&gt;
[Timer]&lt;br /&gt;
OnCalendar=*:0/5&lt;br /&gt;
Persistent=True&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=timers.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Den Timer aktivieren und starten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
$ systemctl --user enable nextcloud_background.timer&lt;br /&gt;
$ systemctl --user start nextcloud_background.timer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nextcloud Push ===&lt;br /&gt;
&lt;br /&gt;
Um Vorgänge wie Sync und Benachrichtigungen bei sehr großen Nextcloud Installationen zu beschleunigen, kann der &amp;lt;code&amp;gt;notify_push&amp;lt;/code&amp;gt; Dienst hinzuinstalliert werden.&lt;br /&gt;
&lt;br /&gt;
==== Abhängigkeiten und Einschränkungen ====&lt;br /&gt;
* &amp;lt;code&amp;gt;notify_push&amp;lt;/code&amp;gt; muss Zugriff auf den gleichen Redis-Cache wie die Nextcloud haben &lt;br /&gt;
** aufgrund von eingeschränktem Passwort Support sollte ein Redis Socket mit sicheren Berechtigungseinstellungen als Alternative zum Redis Port mit Passwort konfiguriert werden.&lt;br /&gt;
* optimaler Weise holt sich &amp;lt;code&amp;gt;notify_push&amp;lt;/code&amp;gt; benötigte informationen aus der &amp;lt;code&amp;gt;config.php&amp;lt;/code&amp;gt; der bestehenden Nextcloud-Installation&lt;br /&gt;
* eine zusätzliche (Sub)domain im gleichen User ist nötig. Andernfalls muss die bestehende &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt; muss aus o.g. Gründen modifiziert werden, dies könnte bei Nextcloud-Updates verloren gehen(!)&lt;br /&gt;
* Bestimmte Portbereiche sind bei Hostsharing eingeschränkt, es empfiehlt sich, direkt beispielsweise Port &amp;lt;code&amp;gt;37867&amp;lt;/code&amp;gt; zu nehmen. &amp;lt;strong&amp;gt;aus diesem Grund ist das automatische Setup durch das Plugin bei Hostsharing nicht möglich!&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
Siehe auch: https://github.com/nextcloud/notify_push#manual-setup &lt;br /&gt;
&lt;br /&gt;
1. Installieren der Nextcloud-App &amp;lt;code&amp;gt;notify_push&amp;lt;/code&amp;gt; – (nach Push suchen, &amp;quot;Client Push&amp;quot; wählen)&amp;lt;br&amp;gt;&lt;br /&gt;
2. falls noch nicht erstellt: &amp;lt;code&amp;gt;mkdir -p ~/.config/systemd/user&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
3. mit Lieblingseditor die Datei &amp;lt;code&amp;gt;~/.config/systemd/user/notify_push.service&amp;lt;/code&amp;gt; anlegen:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description = Push daemon for Nextcloud clients&lt;br /&gt;
Documentation = https://github.com/nextcloud/notify_push&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
# Change if you already have something running on this port&lt;br /&gt;
Environment = PORT=37867&lt;br /&gt;
# We don&#039;t want to bind to 0.0.0.0, hence the --bind&lt;br /&gt;
ExecStart = /home/pacs/xyz00/users/cloud/bin/notify_push --bind 127.0.0.1 /home/pacs/xyz00/users/cloud/nextcloud/config/config.php&lt;br /&gt;
Type=notify&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
4. das Verzeichnis &amp;lt;code&amp;gt;~/bin&amp;lt;/code&amp;gt; anlegen und die aktuellste binary herunterladen und ausführbar machen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;shell&amp;quot; line&amp;gt;release=`curl -L https://api.github.com/repos/nextcloud/notify_push/releases/latest -s | jq -r &#039;.tag_name&#039;` &amp;amp;&amp;amp; wget --show-progress -qO ~/bin/notify_push https://github.com/nextcloud/notify_push/releases/download/$release/notify_push-x86_64-unknown-linux-musl &amp;amp;&amp;amp; chmod +x ~/bin/notify_push&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
5. es könnte die folgende Umgebungsvariable zum Bedienen von systemd notwendig werden:&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;export XDG_RUNTIME_DIR=/run/user/$UID&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
6. den neuen systemd-Dienst automatisch bei Systemstart, sowie jetzt sofort starten:&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;systemctl enable --now --user notify_push&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
7. nun gehen wir in &amp;lt;code&amp;gt;doms/push.cloud.example.com/htdocs-ssl/.htaccess&amp;lt;/code&amp;gt; und ersetzen den Inhalt (bevorzugt), oder wir ergänzen die .htaccess der Nextcloud im unteren Teil um die folgenden Zeilen (letzteres kann bei Updates überschrieben werden!):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot; line&amp;gt;&lt;br /&gt;
# bei eigener (sub)domain ist /push/ nicht erforderlich, aber wer weiß, eventuell ist das mit robuster&lt;br /&gt;
RewriteCond %{REQUEST_URI}  ^/push/ws    [NC,OR]&lt;br /&gt;
RewriteCond %{HTTP:UPGRADE} ^WebSocket$           [NC,OR]&lt;br /&gt;
RewriteCond %{HTTP:CONNECTION} ^Upgrade$          [NC]&lt;br /&gt;
RewriteRule .* ws://127.0.0.1:37867/ws  [proxy]&lt;br /&gt;
&lt;br /&gt;
RewriteCond %{REQUEST_URI}  ^/push    [NC]&lt;br /&gt;
RewriteRule .* http://127.0.0.1:37867%{REQUEST_URI}  [proxy]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
8. abschließend im Nextcloud Ordner die Konfiguration des Plugins anstoßen: &amp;lt;code&amp;gt;php occ notify_push:setup https://cloud.example.com/push&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;php occ notify_push:setup https://push.cloud.example.com/push&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
9. es ist möglich, das die erkannte IP-Adresse des Hives noch nicht vertraut ist. In diesem Fall wird der obige Befehl scheitern und es muss jene aus der Fehlermeldung des Setups unter &amp;lt;code&amp;gt;trusted_proxies&amp;lt;/code&amp;gt; in der &amp;lt;code&amp;gt;config.php&amp;lt;/code&amp;gt; ergänzt werden. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es wird im Repo außerdem ein Testclient bereitgestellt, der sich testweise mit dem Push-Dienst verbindet&lt;br /&gt;
&lt;br /&gt;
== Nextcloud mit Online Office ==&lt;br /&gt;
&lt;br /&gt;
In Nextcloud können Office-Dokumente (Textverarbeitung, Tabellen und Präsentationen) im Browser bearbeitet werden. Dazu steht bei Hostsharing die Collabora Developer Version zur Verfügung. Bestellung und Konfiguration sind hier im Wiki auf der Seite [[Collabora_Online]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
== Nextcloud mit Nextcloud Talk ==&lt;br /&gt;
&lt;br /&gt;
Über die Nextcloud-App &amp;quot;Talk&amp;quot; können Videokonfererenzen mit Screensharing durchgeführt werden. Für die regelmäßige Nutzung kann es sinnvoll sein, einen eigenen TURN Server zu betreiben. Siehe dazu [[Coturn_Installieren]]&lt;br /&gt;
&lt;br /&gt;
== Virenscanner ==&lt;br /&gt;
&lt;br /&gt;
Einige Nutzer wollen die Dateien in Ihrer Nextcloud regelmäßig auf Viren überprüfen. Auf unseren Servern steht dafür der OpenSource-Virenscanner &amp;quot;ClamAV&amp;quot; zur Verfügung. Wenn dieser Scanner benutzt wird, dann sollten die Einstellungen so gewählt sein, dass der ClamAV-Daemon über eine Socket Verbindung angesprochen wird. Die Einstellungen sind im Screenshot dokumentiert.&lt;br /&gt;
&lt;br /&gt;
* Es wird die App [https://apps.nextcloud.com/apps/files_antivirus Antivirus für Dateien] installiert.&lt;br /&gt;
* Bei Modus wird gewählt: &amp;lt;code&amp;gt;ClamAV-Daemon (Socket)&amp;lt;/code&amp;gt;&lt;br /&gt;
* Bei Socket wird gewählt: &amp;lt;code&amp;gt;/var/run/clamav/clamd.ctl&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Datei:Nextcloud-ClamAV-Einstellungen.png||nextcloud einstellungen für die virenscanner-app]]&lt;br /&gt;
&lt;br /&gt;
== Volltextsuche ==&lt;br /&gt;
&lt;br /&gt;
Über die Dokumente einer Nextcloud kann ein Volltextindex erstellt werden. Die Volltextsuche ermöglicht über den Index eine Suche über beliebige Begriffe, die in Dokumenten vorkommen.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung ist der Betrieb eines Elasticsearch Servers. Der Betrieb im Managed Webspace erfodert die Buchung von zwei &amp;quot;Serverdiensten&amp;quot;. Nutzer eines Managed Server müssen mit einem spürbaren Mehrbedarf an Hauptspeicher rechnen.&lt;br /&gt;
&lt;br /&gt;
Zur Installation von Elasticsearch existiert eine eigene Wikiseite: [[Elasticsearch]].&lt;br /&gt;
&lt;br /&gt;
In der Nextcloud sind folgende &#039;&#039;Apps&#039;&#039; zu installieren:&lt;br /&gt;
* Full Text Search&lt;br /&gt;
* Full Text Search - Elasticsearch Platform&lt;br /&gt;
* Full Text Search - Files&lt;br /&gt;
&lt;br /&gt;
nach der Installation der drei Apps steht in den Einstellungen ein neuer Menüpunkt &amp;quot;Volltextsuche&amp;quot; zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Hier ist einzustellen:&lt;br /&gt;
* Suchplattform: Elasticsearch&lt;br /&gt;
* Adresse des Servlets: http://elastic:das-erzeugt-passwort@127.0.0.1:39200&lt;br /&gt;
* Index: frei-gewaehlter-name-idx&lt;br /&gt;
* Analyzer tokenizer: standard&lt;br /&gt;
&lt;br /&gt;
Die anderen Einstellung nach den eigenen Vorstellungen vornehmen.&lt;br /&gt;
&lt;br /&gt;
Der initiale Aufbau des Suchindex erfolgt über ein &amp;quot;occ&amp;quot;-Kommando auf der Shell:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
cd nextcloud/&lt;br /&gt;
php occ fulltextsearch:index --output&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn dieser Fehler kommt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=text&amp;gt;&lt;br /&gt;
TypeError: Return value of OCA\Files_FullTextSearch\Model\MountPoint::isGlobal()&lt;br /&gt;
must be of the type bool, null returned in [...]/apps/files_fulltextsearch/lib/Model/MountPoint.php:103&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
sollte dieser Patch angewendet werden: https://github.com/nextcloud/files_fulltextsearch/issues/125#issuecomment-877789742&lt;br /&gt;
&lt;br /&gt;
Zur Pflege des Indexes wird ein weiterer Hintergrundprozess gestartet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
cd nextcloud/&lt;br /&gt;
php occ fulltextsearch:live -q&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Monit Konfiguration dafür sieht so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
#~/bin/start-fulltextsearchlive&lt;br /&gt;
#&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export HOME=/home/pacs/xyz00/users/cloud&lt;br /&gt;
cd $HOME&lt;br /&gt;
mkdir -p $HOME/var&lt;br /&gt;
cd $HOME/nextcloud&lt;br /&gt;
exec php occ fulltextsearch:live -q &amp;amp;&lt;br /&gt;
echo $! &amp;gt;$HOME/var/fulltextsearchlive.pid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
#~/bin/stop-fulltextsearchlive&lt;br /&gt;
#&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
export HOME=/home/pacs/xyz00/users/cloud&lt;br /&gt;
kill $( cat $HOME/var/fulltextsearchlive.pid )&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
~/.monitrc (siehe oben von der Redis Installation) entsprechend ergänzen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
check process fulltextsearchlive with pidfile /home/pacs/xyz00/users/cloud/var/fulltextsearchlive.pid&lt;br /&gt;
    start program &amp;quot;/home/pacs/xyz00/users/cloud/bin/start-fulltextsearchlive&amp;quot;&lt;br /&gt;
    stop program &amp;quot;/home/pacs/xyz00/users/cloud/bin/stop-fulltextsearchlive&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Integration mit LDAP ==&lt;br /&gt;
&lt;br /&gt;
Um einheitliche Benutzerzugänge für verschiedene Anwendungen zu ermöglichen, wird oft auf ein zentrales LDAP Verzeichnis gesetzt. &lt;br /&gt;
&lt;br /&gt;
Dieses kann für Nextcloud eingesetzt werden, damit Benutzer nicht lokal in Nextcloud, sondern in LDAP verwaltet werden können.&lt;br /&gt;
&lt;br /&gt;
Siehe auch https://docs.nextcloud.com/server/latest/admin_manual/configuration_user/user_auth_ldap.html&lt;br /&gt;
&lt;br /&gt;
Dazu muss die App &amp;quot;LDAP user and group backend&amp;quot; in den Nextcloud Apps aktiviert werden.&lt;br /&gt;
&lt;br /&gt;
Dann muss die LDAP Anbindung in den Administrationseinstellungen unter &amp;quot;LDAP/AD-Integration&amp;quot; eingerichtet werden.&lt;br /&gt;
&lt;br /&gt;
Der Server mit Port, die BenutzerDN mit Passwort und die BaseDN müssen eingetragen werden.&lt;br /&gt;
&lt;br /&gt;
Es muss auch bestimmt werden, welche Klasse (z.B. inetOrgPerson) die Benutzer brauchen, um Zugriff auf die Nextcloud zu erhalten.&lt;br /&gt;
&lt;br /&gt;
Falls schon Benutzer in der Nextcloud existieren, und diese zu LDAP mitgenommen werden sollen, kann der Anleitung aus diesem Forum Eintrag gefolgt werden: https://help.nextcloud.com/t/migration-to-ldap-keeping-users-and-data/13205&lt;br /&gt;
&lt;br /&gt;
* Voraussetzung ist, dass der Benutzernamen der zu übernehmenden Benutzer in Nextcloud der uid in LDAP entspricht.&lt;br /&gt;
* Es wird ein Administrator Benutzer benötigt, der lokal angelegt wurde, und auch lokal bleibt.&lt;br /&gt;
* Mit diesem Administrator Benutzer wird die LDAP Anbindung eingerichtet.&lt;br /&gt;
* In der Experten Ansicht von LDAP/AD muss bei &amp;quot;Attribut für interne Benutzernamen&amp;quot; eingetragen werden: uid&lt;br /&gt;
* Klicke den Schalter &amp;quot;LDAP Benutzernamenzuordnung löschen&amp;quot;&lt;br /&gt;
* Klicke den Schalter &amp;quot;LDAP Gruppennamenzuordnung löschen&amp;quot;&lt;br /&gt;
* dann in der MySQL Datenbank anmelden, und aus uc_users alle Benutzer bis auf den Administrator Benutzer löschen&lt;br /&gt;
* Dann in der Nextcloud Weboberfläche sich alle Benutzer anzeigen lassen&lt;br /&gt;
* Nun gelingt die Anmeldung mit den anderen Benutzern mit dem LDAP Passwort, und die Dateien wurden übernommen.&lt;br /&gt;
&lt;br /&gt;
== Optimierung der Geschwindigkeit ==&lt;br /&gt;
Manchmal fühlt sich die Nextcloud träge an.&lt;br /&gt;
&lt;br /&gt;
Folgende Änderungen können helfen:&lt;br /&gt;
&lt;br /&gt;
* HTTP/2.0 aktivieren: dem Service von Hostsharing Bescheid geben&lt;br /&gt;
* Die App Dashboard deaktivieren, und dafür werden direkt die Dateien angezeigt&lt;br /&gt;
* Einblenden der README in den Ordnern abschalten: das kann pro Ordner in der UI geschehen (links unten), oder global: &amp;lt;code&amp;gt;occ config:app:set text workspace_available --value=0&amp;lt;/code&amp;gt;. Siehe auch [https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/text_configuration.html#disable-rich-workspaces-globally]&lt;br /&gt;
&lt;br /&gt;
== Default App einstellen ==&lt;br /&gt;
&lt;br /&gt;
In der Datei config.php können wir einstellen, welche App direkt nach der Anmeldung gezeigt wird.&lt;br /&gt;
&lt;br /&gt;
Das ist entweder die Dashboard App, wenn sie aktiviert ist, oder die Dateien App (files).&lt;br /&gt;
&lt;br /&gt;
Falls der Kalender direkt angezeigt werden soll, muss folgende Zeile in der config.php hinzugefügt werden (siehe auch [https://docs.nextcloud.com/server/stable/admin_manual/configuration_server/config_sample_php_parameters.html#defaultapp]):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
&#039;defaultapp&#039; =&amp;gt; &#039;calendar&#039;,&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Nextcloud Updates =&lt;br /&gt;
&lt;br /&gt;
== Updater über die Shell starten ==&lt;br /&gt;
&lt;br /&gt;
Wenn die NextCloud sich nicht über das Webfrontend updaten lässt, kann der Updater auch per Shell im directory /updater durch ausführen des updater.phar gestartet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
xyz00-cloud@h00:~$ cd ~/nextcloud&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php updater/updater.phar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Falls während des Updates kein Backup angelegt werden soll:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
xyz00-cloud@h00:~$ cd ~/nextcloud&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php updater/updater.phar --no-backup&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es sollten außerdem ein paar Routine-Aufräumarbeiten durchgeführt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
xyz00-cloud@h00:~$ cd ~/nextcloud&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ db:add-missing-primary-keys --no-interaction&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ db:add-missing-columns --no-interaction&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ db:add-missing-indices --no-interaction&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ db:convert-filecache-bigint --no-interaction&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So können die Apps noch alle aktualisiert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
xyz00-cloud@h00:~$ cd ~/nextcloud&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ app:update --all -n --no-ansi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für weitere Informationen kann auf die offizielle Doku ab Ziffer 2. zurückgegriffen werden.&lt;br /&gt;
&lt;br /&gt;
* [https://docs.nextcloud.com/server/latest/admin_manual/maintenance/update.html#using-the-command-line-based-updater https://docs.nextcloud.com]&lt;br /&gt;
&lt;br /&gt;
Hier gibt es ein kurzes Video, das die Anmeldung über die Kommandozeile mit Putty erklärt und die Aktualisierung von Nextcloud auf der Kommandozeile:&lt;br /&gt;
&lt;br /&gt;
* [https://tube.solidcharity.net/w/0cf5ee97-ba7c-41df-a56f-8d1fea842ab0 Nextcloud auf der Kommandozeile aktualisieren]&lt;br /&gt;
&lt;br /&gt;
== Wartungsmodus per Shell ein- oder ausschalten ==&lt;br /&gt;
&lt;br /&gt;
So kann der Wartungsmodus angeschaltet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
xyz00-cloud@h00:~$ cd ~/nextcloud&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ maintenance:mode --on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So kann der Wartungsmodus wieder ausgeschaltet werden, d.h. die Nextcloud ist dann wieder in Betrieb:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
xyz00-cloud@h00:~$ cd ~/nextcloud&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ maintenance:mode --off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Webfrontend-Updater Probleme / Lösungen ==&lt;br /&gt;
&lt;br /&gt;
=== Datenbank: Indizes | Primärschlüssel | Konvertierungen ===&lt;br /&gt;
&lt;br /&gt;
Aufgetreten nach erfolgtem Versionsupdate Nextcloud 19 auf Nextcloud 20&lt;br /&gt;
&lt;br /&gt;
Nach dem erfolgten Update lädt automatisch die Seite: &#039;&#039;&#039;Sicherheits- und Einrichtungswarnungen&#039;&#039;&#039; auf dieser wird angemerkt, dass manuelle Schritte für die Datenbank durchzuführen sind. Dies betrifft Indizes, Primärschlüssel und Konvertierungen. &lt;br /&gt;
&lt;br /&gt;
Per Shell in der directory /nextcloud folgende Kommandos ausführen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
xyz00-cloud@h00:~$ cd ~/nextcloud&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ db:add-missing-primary-keys --no-interaction&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ db:add-missing-columns --no-interaction&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ db:add-missing-indices --no-interaction&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ db:convert-filecache-bigint --no-interaction&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig ist hier dem durch Nextcloud angegebenen Kommando ein &#039;&#039;&#039;php&#039;&#039;&#039; voranzustellen.&lt;br /&gt;
&lt;br /&gt;
== Update per Skript ==&lt;br /&gt;
&lt;br /&gt;
Es ist möglich die regelmäßigen Updates weitgehend zu automatisieren. Ein Skript wäre etwa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell line&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
if [ -f $HOME/nextcloud/occ ]; then &lt;br /&gt;
  echo &amp;quot;Nextcloud Update&amp;quot;; &lt;br /&gt;
  cd $HOME/nextcloud;&lt;br /&gt;
  php updater/updater.phar -vv --no-backup --no-interaction&lt;br /&gt;
  php occ maintenance:mode --on&lt;br /&gt;
  php occ db:add-missing-primary-keys --no-interaction&lt;br /&gt;
  php occ db:add-missing-columns --no-interaction&lt;br /&gt;
  php occ db:add-missing-indices --no-interaction&lt;br /&gt;
  php occ db:convert-filecache-bigint --no-interaction&lt;br /&gt;
  php occ app:update --all&lt;br /&gt;
  php occ maintenance:mode --off&lt;br /&gt;
else &lt;br /&gt;
  echo &amp;quot;Keine Nextcloud Installation gefunden&amp;quot;; &lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update: bei old-stable Version bleiben ==&lt;br /&gt;
&lt;br /&gt;
Normalerweise fragt jede Nextcloud Instanz zentral ab, welches Update zur Verfügung steht, abhängig vom Release Channel. Dabei wird aber relativ schnell auf die nächste Version gewechselt, also z.B. von Nextcloud 28 auf Nextcloud 29, obwohl Nextcloud 28 noch mehrere Monate gepflegt wird, und manche Apps noch nicht bereit sind für Nextcloud 29.&lt;br /&gt;
&lt;br /&gt;
Es kann aber auch eine Alternative eingerichtet werden, in der Datei nextcloud/config/config.php, unter dem Eintrag updater.server.url&lt;br /&gt;
&lt;br /&gt;
Hier wird z.B. auf einen Updater von unserem Mitglied Timotheus Pokorra verwiesen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=php line&amp;gt;&lt;br /&gt;
updater_server_url: &amp;quot;https://ncupdater.solidcharity.com&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dahinter läuft ein Skript, mit dem wir noch länger eine bestimmte Version anbieten können: https://codeberg.org/tpokorra/ncupdater&lt;br /&gt;
&lt;br /&gt;
= Daten auf HDD Storage =&lt;br /&gt;
== Einrichtung des HDD Storage ==&lt;br /&gt;
&lt;br /&gt;
Um den langsameren aber günstigeren HDD Storage von Hostsharing zu nutzen, kann das data Verzeichnis von SSD auf HDD Storage verschoben werden. Ein symbolischer Link reicht nicht aus, man muss den Pfad in der Nextcloud Konfigurationsdatei anpassen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
# Nextcloud in Wartungsmodus versetzen&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ maintenance:mode --on&lt;br /&gt;
# Daten auf HDD Storage verschieben&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ mv data /home/storage/xyz00/users/cloud/&lt;br /&gt;
# symbolischen Link anlegen&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ ln -s /home/storage/xyz00/users/cloud/data data&lt;br /&gt;
# Pfad in config.php ändern&lt;br /&gt;
nano config/config.php&lt;br /&gt;
# Die Zeile mit &#039;datadirectory&#039; finden und entsprechend ändern:&lt;br /&gt;
# &#039;datadirectory&#039; =&amp;gt; &#039;/home/storage/xyz00/users/cloud/data&#039;,&lt;br /&gt;
# Wartungsmodus beenden&lt;br /&gt;
xyz00-cloud@h00:~/nextcloud$ php occ maintenance:mode --off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Fallstrick: Im data-Verzeichnis liegt eine versteckte Datei &amp;quot;.ncdata&amp;quot;. Beim Move-Befehl &amp;quot;mv&amp;quot; für das komplette Data-Verzeichnis wird diese Datei mit verschoben. Sonst muss die Datei ggf. ins neue data-Verzeichnis kopiert werden!&lt;br /&gt;
&lt;br /&gt;
= Einschränkende Bemerkungen =&lt;br /&gt;
== Nextcloud Sync Client ==&lt;br /&gt;
&lt;br /&gt;
Der Nextcloud Sync Client erfüllt eine Funktion ähnlich wie Dropbox, und synchronisiert ganze Ordnerstrukturen. &lt;br /&gt;
&lt;br /&gt;
Gerade wenn man mit mehreren Menschen in einer Nextcloud arbeitet, ist diese Funktion mit Vorsicht zu benutzen.&lt;br /&gt;
&lt;br /&gt;
* Änderungen an der Ordnerstruktur sollten nicht lokal, sondern im Webbrowser vorgenommen werden.&lt;br /&gt;
* Wenn die Gefahr besteht, dass mehrere Menschen gleichzeitig eine Datei bearbeiten, sollte die Datei nicht lokal, sondern im Webbrowser bearbeitet werden.&lt;br /&gt;
* Aus Sicht des Datenschutzes und der Daten-Minimierung sollte überlegt werden, ob die Daten wirklich auf jeden Laptop und Rechner synchronisiert werden sollen, oder ob es reicht, ausschließlich über den Webbrowser auf die Daten zuzugreifen.&lt;br /&gt;
&lt;br /&gt;
= weiterführende Links =&lt;br /&gt;
&lt;br /&gt;
* [https://docs.nextcloud.com/ Nextcloud Dokumentation]&lt;br /&gt;
* [https://apps.nextcloud.com/ Nextcloud Erweiterungen (&amp;quot;Apps&amp;quot;)]&lt;br /&gt;
* [https://ownyourbits.com/2019/06/29/understanding-and-improving-nextcloud-previews/ Optimierung des Caches für Previews]&lt;br /&gt;
* [https://codeberg.org/tpokorra/hs.ansible/src/branch/main/playbooks/nextcloud Ansible Playbook für Hostsharing]&lt;br /&gt;
&lt;br /&gt;
= Nextcloud Reseller bei HS =&lt;br /&gt;
&lt;br /&gt;
[https://nextcloud.ossaas.de OS SaaS]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Ansible Playbook]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:CalDAV]]&lt;br /&gt;
[[Kategorie:Nextcloud]]&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Gitea&amp;diff=7302</id>
		<title>Gitea</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Gitea&amp;diff=7302"/>
		<updated>2025-03-12T07:00:34Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: /* Gitea installieren */ Kaputten Satz im Einstieg repariert.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Gitea installieren ==&lt;br /&gt;
&lt;br /&gt;
[https://gitea.io/en-us/ Gitea] ist ein einfacher, selbst gehosteter Git-Service wie GitHub oder GitLab. Die Software ist ein Fork von Gogs und ebenfalls in der Programmiersprache Go geschrieben. Gitea benötigt wenig Ressourcen.&lt;br /&gt;
 &lt;br /&gt;
Die hier beschriebene Installation benötigt im [https://www.hostsharing.net/paas/managed-webspace/ Hostsharing Managed Webspace] die Paket-Option &amp;quot;Arbeitsspeicher für eigene Serverdienste&amp;quot;. Benötigt werden min. 128 MB. Auch auf einem [https://www.hostsharing.net/paas/managed-server/ Hostsharing Managed-Server] muss genügend RAM verfügbar sein.&lt;br /&gt;
 &lt;br /&gt;
Gitea unterstützt verschiedene Datenbanken. Wir gehen in dieser Anleitung davon aus, dass PostgreSQL benutzt wird.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung der Installation ===&lt;br /&gt;
&lt;br /&gt;
Um Gitea auf der Managed Operation Platform von Hostsharing zu installieren, ist folgende Vorbereitung erforderlich.&lt;br /&gt;
&lt;br /&gt;
# Anlegen eines Domain-Benutzers. In unserem Beispiel &amp;lt;code&amp;gt;xyz00-gitea&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Anlegen einer Domain. In unserem Beispiel &amp;lt;code&amp;gt;gitea.hs-example.de&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Anlegen eines Datenbank-Benutzers. Hier &amp;lt;code&amp;gt;xyz00_giteadbuser&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Anlegen einer Datenbank. Hier &amp;lt;code&amp;gt;xyz00_giteadb&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Auf der Kommandozeile kann man dies folgendermaßen erledigen.&lt;br /&gt;
&lt;br /&gt;
Man loggt sich als Paketbenutzer ein und startet die Kommandozeilenversion von HSAdmin mit dem Befehl &amp;lt;code&amp;gt;hsscript&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
hsscript -u xyz00 -i&lt;br /&gt;
Password: ********&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend kann man die Vorbereitungsschritte 1 bis 4 erledigen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
xyz00@hsadmin&amp;gt; user.add({set:{name:&#039;xyz00-gitea&#039;,password:&#039;geheim&#039;,shell:&#039;/bin/bash&#039;}})&lt;br /&gt;
xyz00@hsadmin&amp;gt; domain.add({set:{name:&#039;gitea.hs-example.de&#039;,user:&#039;xyz00-gitea&#039;}})&lt;br /&gt;
xyz00@hsadmin&amp;gt; postgresqluser.add({set:{name:&#039;xyz00_giteadbuser&#039;,password:&#039;geheim&#039;}})&lt;br /&gt;
xyz00@hsadmin&amp;gt; postgresqldb.add({set:{name:&#039;xyz00_giteadb&#039;,owner:&#039;xyz00_giteadbuser&#039;}})&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installation von Gitea ===&lt;br /&gt;
&lt;br /&gt;
Gitea wird als Binary zur Verfügung gestellt.&lt;br /&gt;
Wir installieren das Binary im Verzeichnis des Domain-Benutzers.&lt;br /&gt;
Wenn wir als Paketbenutzer eingeloggt sind, können wir den Benutzer folgendermaßen wechseln:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
sudo -u xyz00-gitea -i&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Nun laden wir das passende Binary herunter.&lt;br /&gt;
Auf der Website https://dl.gitea.io/gitea/ finden Sie das jeweils aktuelle Binary (hier die 64-Bit-Version, &lt;br /&gt;
für die shared Server h01 bis h08 bitte die 32-Bit-Version gitea-1.7.0-linux-i386 herunterladen).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
wget -O gitea https://dl.gitea.io/gitea/1.7.0/gitea-1.7.0-linux-amd64&lt;br /&gt;
chmod +x gitea&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wir laden die GPG-Signatur herunter und überprüfen sie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
wget https://dl.gitea.io/gitea/1.7.0/gitea-1.7.0-linux-amd64.asc&lt;br /&gt;
gpg --keyserver keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2&lt;br /&gt;
gpg --verify gitea-1.7.0-linux-amd64.asc gitea&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun können wir Gitea testweise starten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
./gitea web&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Webserver von Gitea startet auf dem Port 3000. Das werden wir später ändern.&lt;br /&gt;
&lt;br /&gt;
Der Server kann mit Ctrl-C beendet werden.&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration der Domain ===&lt;br /&gt;
&lt;br /&gt;
Zunächst wechseln wir in das Verzeichnis &amp;lt;code&amp;gt;doms/gitea.hs-example.de&amp;lt;/code&amp;gt; und löschen den Ordner für die Subdomain &#039;www&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
rm -rf subs/www&lt;br /&gt;
rm -rf subs-ssl/www&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend tragen wir die Umleitung auf HTTPS ein, falls dies nicht schon geschehen ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
vi htdocs/.htaccess&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
Der Eintrag muss lauten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=apache&amp;gt;&lt;br /&gt;
Redirect permanent / https://gitea.hs-example.com/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
Dann legen wir die Datei &amp;lt;code&amp;gt;htdocs-ssl/.htaccess&amp;lt;/code&amp;gt; mit folgendem Inhalt an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=apache&amp;gt;&lt;br /&gt;
DirectoryIndex disabled&lt;br /&gt;
RewriteEngine on&lt;br /&gt;
RewriteBase /&lt;br /&gt;
RewriteRule ^(.*) http://localhost:31580/$1 [proxy,last]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Merken Sie sich die Portnummer 31580.&lt;br /&gt;
Sie wird später bei der Konfiguration von Gitea gebraucht.&lt;br /&gt;
Die Portnummer bekommen Sie vom Hostmaster, wenn Sie für Ihren Webspace RAM buchen.&lt;br /&gt;
Wenn Sie einen Managed Server haben, können Sie selbst die Portnummer auswählen.&lt;br /&gt;
&lt;br /&gt;
Damit ist die Konfiguration von Apache abgeschlossen.&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration von Gitea ===&lt;br /&gt;
&lt;br /&gt;
Wir editieren nun die Konfigurationsdatei von Gitea &amp;lt;code&amp;gt;app.ini&amp;lt;/code&amp;gt;.&lt;br /&gt;
Sie befindet sich in dem Verzeichnis &amp;lt;code&amp;gt;~/custom/conf&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ACHTUNG&#039;&#039;&#039;: Sie können die Konfiguration teilweise auch über das Webinterface durchführen. Starten Sie dazu Gitea, wie oben beschrieben, und versuchen Sie einen Benutzer zu registrieren. Daraufhin öffnet sich der Konfigurationsdialog. Sie müssen den Gitea-Benutzer, den Namen der Datenbank, den Datenbank-Benutzer und sein Passwort parat haben.&lt;br /&gt;
&lt;br /&gt;
Die Konfigurationsdatei beginnt mit allgemeinen Einträgen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
APP_NAME = Gitea: Git with a cup of tea&lt;br /&gt;
RUN_USER = xyz00-gitea&lt;br /&gt;
RUN_MODE = prod&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Abschnitt [database] folgen die Angaben zur Datenbank:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[database]&lt;br /&gt;
DB_TYPE  = postgres&lt;br /&gt;
HOST     = 127.0.0.1:5432&lt;br /&gt;
NAME     = xyz00_giteadb&lt;br /&gt;
USER     = xyz00_giteadbuser&lt;br /&gt;
PASSWD   = geheim&lt;br /&gt;
SSL_MODE = disable&lt;br /&gt;
PATH     = data/gitea.db&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es folgt der Pfad zu den Git-Repositorys und die Server-Konfiguration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[repository]&lt;br /&gt;
ROOT = /home/pacs/xyz00/users/gitea/gitea-repositories&lt;br /&gt;
    &lt;br /&gt;
[server]&lt;br /&gt;
PROTOCOL         = http&lt;br /&gt;
SSH_DOMAIN       = gitea.hs-example.de &lt;br /&gt;
DOMAIN           = gitea.hs-example.de&lt;br /&gt;
HTTP_ADDR        = localhost&lt;br /&gt;
HTTP_PORT        = 31580&lt;br /&gt;
ROOT_URL         = https://gitea.hs-example.de/&lt;br /&gt;
DISABLE_SSH      = false&lt;br /&gt;
SSH_PORT         = 22&lt;br /&gt;
LFS_START_SERVER = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für das Schreiben der Log Datei können Sie folgendes konfigurieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[log]&lt;br /&gt;
MODE       = file&lt;br /&gt;
LEVEL      = info&lt;br /&gt;
ROOT_PATH  = /home/pacs/xyz00/users/gitea/custom/logs/&lt;br /&gt;
ROUTER     = file&lt;br /&gt;
LOG_ROTATE = false&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ACHTUNG&#039;&#039;&#039;: Bitte prüfen Sie, ob der Ordner zum Speichern der Log-Dateien von Gitea vorhanden ist. Bei Bedarf erstellen Sie die Ordnerstruktur entsprechend.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
mkdir -p /home/pacs/xyz00/users/gitea/custom/logs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sie können nun Gitea starten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=shell&amp;gt;&lt;br /&gt;
./gitea web&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
Der Git-Service ist dann im Browser unter der Adresse gitea.hs-example.de erreichbar.&lt;br /&gt;
&lt;br /&gt;
=== Service einrichten ===&lt;br /&gt;
&lt;br /&gt;
Zum Schluss müssen Sie noch den Service zum Starten von Gitea einrichten.&lt;br /&gt;
&lt;br /&gt;
Das Service Skript speichern Sie unter dem Pfad &amp;lt;code&amp;gt;~/.config/systemd/user/gitea.service&amp;lt;/code&amp;gt; ab.&lt;br /&gt;
Es hat folgenden Inhalt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
Description=Gitea&lt;br /&gt;
    &lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
Restart=on-abort&lt;br /&gt;
WorkingDirectory=%h&lt;br /&gt;
ExecStart=%h/gitea web&lt;br /&gt;
    &lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun können Sie noch die Rotation der Logfiles konfigurieren.&lt;br /&gt;
Dies geschieht in der Datei &amp;lt;code&amp;gt;~/.logrotate&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
/home/pacs/xyz00/users/gitea/custom/logs/gitea.log {&lt;br /&gt;
  copytruncate&lt;br /&gt;
  daily&lt;br /&gt;
  rotate 7&lt;br /&gt;
  compress&lt;br /&gt;
  missingok&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit logrotate regelmäßig ausgeführt wird, müssen Sie folgenden systemd Timer für denv Domain-Benutzers einrichten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;~/.config/systemd/user/gitea_logrotate.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=rotate gittea logs&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/sbin/logrotate -s /home/pacs/xyz00/users/gitea/.logrotate.state /home/pacs/xyz00/users/gitea/.logrotate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;~/.config/systemd/user/gitea_logrotate.timer&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=ini&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=rotate gittea logs&lt;br /&gt;
&lt;br /&gt;
[Timer]&lt;br /&gt;
OnCalendar=1:51&lt;br /&gt;
Persistent=True&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=timers.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Timer aktivieren und starten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ systemctl --user enable gitea_logrotate.timer&lt;br /&gt;
$ systemctl --user start gitea_logrotate.timer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Uhrzeit für die Logrotation können Sie beliebig einstellen.&lt;br /&gt;
&lt;br /&gt;
Abschließend können Sie Ihre Gitea-Instanz starten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
export XDG_RUNTIME_DIR=/run/user/$UID&lt;br /&gt;
systemctl --user start gitea&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ACHTUNG&#039;&#039;&#039;: Bitte beachten Sie, dass für die Ausführung von Benutzerskripten mit systemctl für den aktuellen Benutzer im hsadmin die Shell &amp;quot;/bin/bash&amp;quot; konfiguriert sein muss.&lt;br /&gt;
&lt;br /&gt;
=== Anmeldung über LDAP einrichten ===&lt;br /&gt;
&lt;br /&gt;
Ohne weitere Konfiguration, können nun lokale Benutzer angelegt werden.&lt;br /&gt;
&lt;br /&gt;
Falls Sie die Benutzerverwaltung noch an ein LDAP Verzeichnis anschließen wollen, können Sie diese Schritte ausführen:&lt;br /&gt;
&lt;br /&gt;
Sie finden hier die Informationen zum Einrichten eines OpenLDAP Dienstes: [[OpenLDAP]]&lt;br /&gt;
&lt;br /&gt;
Gehen Sie in der Weboberfläche von Git in die Administration, und dort in den Reiter &amp;quot;Authentifizierungsquellen&amp;quot;, oder direkt auf dem Link https://git.hs-example.de/-/admin/auths&lt;br /&gt;
&lt;br /&gt;
Dort sollten dann folgende Werte eingetragen werden:&lt;br /&gt;
* Authentifizierungstyp: LDAP (via BindDN)&lt;br /&gt;
* Host: &amp;lt;code&amp;gt;localhost&amp;lt;/code&amp;gt; (bzw. der Name des Servers, auf dem OpenLDAP erreichbar ist)&lt;br /&gt;
* Port: &amp;lt;code&amp;gt;30389&amp;lt;/code&amp;gt; (bzw. der Port auf dem OpenLDAP erreichbar ist)&lt;br /&gt;
* DN binden: &amp;lt;code&amp;gt;cn=admin,dc=hs-example,dc=de&amp;lt;/code&amp;gt; (Der Benutzer der Zugriff auf alle Benutzer hat)&lt;br /&gt;
* Passwort binden: Das Passwort von dem DN Benutzer&lt;br /&gt;
* Basis für Benutzersuche: &amp;lt;code&amp;gt;ou=users,dc=hs-example,dc=de&amp;lt;/code&amp;gt;&lt;br /&gt;
* Benutzerfilter: &amp;lt;code&amp;gt;(&amp;amp;(objectClass=inetOrgPerson)(uid=%s))&amp;lt;/code&amp;gt;&lt;br /&gt;
* Admin-Filter: &amp;lt;code&amp;gt;(memberof=cn=admins,ou=groups,dc=hs-example,dc=de)&amp;lt;/code&amp;gt; (diese Benutzer haben Admin Rechte in Gitea)&lt;br /&gt;
* Benutzernamens-Attribute: &amp;lt;code&amp;gt;DN&amp;lt;/code&amp;gt;&lt;br /&gt;
* Vornamensattribut: &amp;lt;code&amp;gt;givenName&amp;lt;/code&amp;gt;&lt;br /&gt;
* Nachnamensattribut: &amp;lt;code&amp;gt;sn&amp;lt;/code&amp;gt;&lt;br /&gt;
* E-Mail-Attribut: &amp;lt;code&amp;gt;mail&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier noch ein Screenshot:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Gitea_LDAP_Einrichtung.png|500px]]&lt;br /&gt;
&lt;br /&gt;
=== Default Branches ohne Force Push ===&lt;br /&gt;
&lt;br /&gt;
In den Einstellungen von jedem Repository kann unter &amp;quot;Branches&amp;quot; eine Regel z.B. für den Hauptbranch erstellt werden, damit entweder nur Pull Requests und kein direkter Push erlaubt ist, oder dass Push erlaubt ist, aber kein Verändern der Historie mit force push.&lt;br /&gt;
&lt;br /&gt;
Über diese SQL Befehl können die Einstellungen überprüft werden:&lt;br /&gt;
&lt;br /&gt;
Zeige alle Repositories, die noch keine Regel für den Hauptbranch haben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=sql&amp;gt;&lt;br /&gt;
SELECT r.id, owner_name, lower_name, r.default_branch&lt;br /&gt;
FROM repository r&lt;br /&gt;
WHERE NOT EXISTS (&lt;br /&gt;
        SELECT 1&lt;br /&gt;
        FROM protected_branch pb&lt;br /&gt;
        WHERE pb.repo_id = r.id AND pb.branch_name = r.default_branch&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zeige die Regeln für die Hauptbranches:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=sql&amp;gt;&lt;br /&gt;
SELECT r.id, owner_name, lower_name, r.default_branch, pb.can_push, pb.required_approvals&lt;br /&gt;
FROM repository r JOIN protected_branch pb ON pb.repo_id = r.id AND pb.branch_name = r.default_branch;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== weiterführende Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://gitea.io/ Gitea Webseite]&lt;br /&gt;
* [https://docs.gitea.io/ Dokumentation von Gitea]&lt;br /&gt;
* [https://codeberg.org/tpokorra/hs.ansible/src/branch/main/playbooks/gitea Ansible Playbook für Hostsharing]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Ansible Playbook]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Projektmanagement]]&lt;br /&gt;
[[Kategorie:Projektverwaltung]]&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Spamfilter&amp;diff=7259</id>
		<title>Spamfilter</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Spamfilter&amp;diff=7259"/>
		<updated>2025-02-07T14:55:10Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: /* Alternative 2: Maileingangsserver mit Spamfilter nutzen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Einrichtung, Konfiguration und Optimierung eines Spamfilters auf den Hostsharing Servern. Der Artikel beschreibt drei Möglichkeiten: &lt;br /&gt;
&lt;br /&gt;
1. Die Einrichtung von Apamassassin für das persönliche Postfach&lt;br /&gt;
&lt;br /&gt;
2. Die Nutzung der &amp;quot;smailin&amp;quot;-Server für eine komplette Domain&lt;br /&gt;
&lt;br /&gt;
3. Nutzung der Spam-Appliance &amp;quot;SecureMX&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= Alternative 1: Persönlichen Spamfilter einrichten =&lt;br /&gt;
&lt;br /&gt;
Hier geht es darum, wie Personen mit (grundlegenden) kenntnissen in der Shell-Bedienung für ihr persönliches Postfach einen Spam-Filter einrichten können.&lt;br /&gt;
&lt;br /&gt;
== Spamassassin Konfigurieren ==&lt;br /&gt;
&lt;br /&gt;
Der Spamfilter &amp;quot;Spamassassin&amp;quot; ist bei HS vorinstalliert und kann wie auf der Seite [[Procmail]] beschrieben für eine Mailbox eingebunden werden.&lt;br /&gt;
Alternativ kann &amp;quot;spamc&amp;quot;, das Kommando zur Nutzung des Spamassassin-Daemon, auch einfach in der Datei &amp;quot;.forward&amp;quot; eines Mail-Users aufgerufen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
&amp;quot;|/usr/bin/spamc -U /var/run/spamd -e /usr/lib/dovecot/deliver&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Effekt: Spammassassin schreibt seine Testergebnisse in die Headerzeilen jeder E-Mail und leitet die E-Mails weiter an das Programm &amp;quot;deliver&amp;quot; aus dem Dovecot-Paket. Das Sortieren von Spam-EMail in einen Spam-Ordner lässt sich mit Sieve-Filtern umsetzen.&lt;br /&gt;
&lt;br /&gt;
In dieser Variante kann man Spamassassin individuell konfigurieren. Dazu legt man im $HOME des Mailbox-Account ein Verzeichnis &amp;quot;$HOME/.spamassassin&amp;quot; an. Die Konfiguration erfolgt in der Datei &amp;quot;$HOME/.spamassassin/user_prefs&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Konfigurationsbeispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
required_score          4.0&lt;br /&gt;
report_safe             0&lt;br /&gt;
use_bayes               1&lt;br /&gt;
bayes_auto_learn        1&lt;br /&gt;
skip_rbl_checks         0&lt;br /&gt;
use_razor2              1&lt;br /&gt;
use_pyzor               1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bayesfilter anlernen ==&lt;br /&gt;
&lt;br /&gt;
Wenn der Bayesfilter eingeschaltet ist, macht es Sinn den Filter mit den Befehlen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
sa-learn --spam &amp;lt;platzhalter-spam-nachricht&amp;gt;&lt;br /&gt;
sa-learn --ham &amp;lt;platzhalter-erwünschte-nachricht&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
anzulernen. Ein Bash-Skript für das Erlernen von Spam/Nonspam kann wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
# Learn Spam from Maildir folder Junk/LearnSpam&lt;br /&gt;
# &lt;br /&gt;
mkdir -p ${HOME}/sa-learn-tmp&lt;br /&gt;
cd ${HOME}/Maildir/.Junk.LearnSpam/cur/&lt;br /&gt;
for JUNK in $( ls ); do zcat ${JUNK} &amp;gt; ${HOME}/sa-learn-tmp/$( echo ${JUNK} | cut -d&#039;.&#039; -f2 ).eml ; done&lt;br /&gt;
cd ${HOME}/&lt;br /&gt;
sa-learn --spam ${HOME}/sa-learn-tmp/*.eml&lt;br /&gt;
rm -f ${HOME}/sa-learn-tmp/*.eml&lt;br /&gt;
rm -f ${HOME}/Maildir/.Junk.LearnSpam/cur/*&lt;br /&gt;
#&lt;br /&gt;
# Learn Non-Spam from Maildir folder Junk/LearnHam&lt;br /&gt;
# &lt;br /&gt;
cd ${HOME}/Maildir/.Junk.LearnHam/cur/&lt;br /&gt;
for HAM in $( ls ); do zcat ${HAM} &amp;gt; ${HOME}/sa-learn-tmp/$( echo ${HAM} | cut -d&#039;.&#039; -f2 ).eml ; done&lt;br /&gt;
cd ${HOME}/&lt;br /&gt;
sa-learn --ham ${HOME}/sa-learn-tmp/*.eml&lt;br /&gt;
rm -f ${HOME}/sa-learn-tmp/*.eml&lt;br /&gt;
rm -f ${HOME}/Maildir/.Junk.LearnHam/cur/*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Empfängerin der Nachrichten / der Empfänger füttert den Lernprozess, indem Spam-Nachrichten in den Ordner &amp;quot;Spam/LearnSpam&amp;quot; verschoben werden und indem gute Nachrichten in den Ordner &amp;quot;Spam/LearnHam&amp;quot; kopiert werden.&lt;br /&gt;
&lt;br /&gt;
Das Skript wird über einen systemd-Timer täglich ausgefürt.&lt;br /&gt;
&lt;br /&gt;
= Alternative 2: Maileingangsserver mit Spamfilter nutzen =&lt;br /&gt;
&lt;br /&gt;
Zusätzlich zu den vorkonfigurierte Maileingangsservern betreibt Hostsharing seit einigen Jahren einen zweiten Satz von Maileingangsservern, bei denen Spamassassin bereits beim Annehmen einer E-Mail ausgeführt wird. Eingehende Nachrichten mit eindeutiger Bewertung als Spam werden bereits im SMTP-Dialog abgewiesen. Nachrichten mit einem Spam-Score über 5 Punkten werden angenommen und zugestellt. Spamassassin für die Bewertung für diese Nachrichten in die Header der Nachricht ein, zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
X-Spam-Flag: YES&lt;br /&gt;
X-Spam-Score: 6.263&lt;br /&gt;
X-Spam-Level: ******&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anhand dieser Zeilen kann man in Roundcube Filter einrichten, die die Nachrichten beim Eintreffen der Nachricht in einen Spam-Ordner mit verdächtigen Nachrichten verschieben (siehe später folgenden Abschnitt).&lt;br /&gt;
&lt;br /&gt;
== Eingangsserver konfigurieren ==&lt;br /&gt;
&lt;br /&gt;
Die Maileingangsserver mit Spamassassin lassen sich pro Domain konfigurieren, indem die MX-Records im DNS-Zonefile gegenüber dem Default-Zonefile angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Im Zonefile entfällt der Platzhalter &amp;quot;{MX_RR}&amp;quot;. Stattdessen werden die folgenden MX-Records eingefügt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
{DOM_HOSTNAME}.    IN  MX  10  smailin1.hostsharing.net.&lt;br /&gt;
{DOM_HOSTNAME}.    IN  MX  10  smailin2.hostsharing.net.&lt;br /&gt;
{DOM_HOSTNAME}.    IN  MX  10  smailin3.hostsharing.net.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur Änderung der DNS-Zone siehe: https://www.hostsharing.net/doc/managed-operations-platform/zonefile/&lt;br /&gt;
Wer sich die Aktion auf der Shell nicht zutraut, möge bitte den &amp;quot;Webmaster on Demand&amp;quot; beauftragen.&lt;br /&gt;
&lt;br /&gt;
== Spam-Ordner ==&lt;br /&gt;
&lt;br /&gt;
Mit dem folgenden Filter können Nachrichten, die von Spamassassin markiert wurden, automatisch in einen Spam-Ordner verschoben werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:2025-02-07 Sievefilter-Spam.png|960x480px|gerahmt|links|alternativtext=Screenshot Filterregel zum Spam Aussortieren|Filter in Roundcube einrichten]]&lt;br /&gt;
&lt;br /&gt;
= Alternative 3: SecureMX zubuchen =&lt;br /&gt;
&lt;br /&gt;
Über unseren Domain-Anbieter &amp;quot;Partnergate&amp;quot; bietet Hostsharing als dritte Alternative die kommerzielle Spam-Appliance von Cisco an. Das Produkt heißt bei Partnergate &amp;quot;SecureMX&amp;quot;: https://www.hostsharing.net/loesungen/email/spam-abwehr/&lt;br /&gt;
&lt;br /&gt;
Die Nutzung von SecureMX ist kostenpflichtig und wird auf Wunsch von Service eingerichtet. &lt;br /&gt;
&lt;br /&gt;
Es ist zu beachten, dass bei der Nutzung von SecureMX alle eingehenden E-Mail Nachrichten über Server geleitet werden, die nicht unter der Kontrolle von Hostsharing stehen und proprietäre Software einsetzen. Dieser Sachverhalt muss vom Mitglied ggf. datenschutzrechtlich bewertet werden.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:Glossar]]&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Diskussion:Mailman_3_installieren&amp;diff=7217</id>
		<title>Diskussion:Mailman 3 installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Diskussion:Mailman_3_installieren&amp;diff=7217"/>
		<updated>2025-01-09T11:10:34Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: Feature-Wunsch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Einrichtung mit systemd fehlt auf der Seite.&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7174</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7174"/>
		<updated>2024-12-05T07:53:52Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: /* Fehler: Failed to connect to bus: No such file or directory */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Über systemd ==&lt;br /&gt;
&#039;&#039;systemd&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess hat im laufenden System die Prozessnummer &amp;quot;1&amp;quot;. Er verwaltet alle anderen Prozesse als Kind-Prozesse.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann systemd nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Operations Platform kann jeder Account mit einer gültigen Login-Shell Dienste unter der Kontrolle von systemd starten. &lt;br /&gt;
&lt;br /&gt;
Im Hostsharing Managed Webspace ist es zwingend, systemd als Prozessmonitor für eigene Serverdienste zu nutzen; auf einem Hostsharing Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit systemd ==&lt;br /&gt;
&lt;br /&gt;
Die systemd-Konfiguration wird in dem Verzeichnis des Benutzers eingerichtet, unter dem die Anwendung laufen soll.&lt;br /&gt;
In diesem Beispiel soll die Anwendung GotoSocial unter der Benutzerkennung von &#039;&#039;xyz00-service&#039;&#039; laufen.&lt;br /&gt;
Nachdem die Anwendung im Benutzer &#039;&#039;xyz00-service&#039;&#039; installiert wurde, erfolgt nun die Konfiguration von systemd in demselben Benutzer.&lt;br /&gt;
&lt;br /&gt;
Benutzer, die systemd steuern sollen, müssen über eine gültige Shell verfügen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit dem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. &lt;br /&gt;
Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
=== systemd Units ===&lt;br /&gt;
&lt;br /&gt;
Die systemd-Units für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Der Pfad muss bei einem neuen Benutzer angelegt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Verzeichnis wird für jeden Service eine Datei mit der Endung &#039;&#039;.service&#039;&#039; angelegt. In diesem Beispiel ist dies eine GotoSocial-Instanz. GotoSocial ist ein einfaches Binärprogramm, das in der Programmiersprache &#039;&#039;Go&#039;&#039; programmiert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GotoSocial Service&lt;br /&gt;
#After=my-redis.service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=%h/gotosocial&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/gotosocial/gotosocial --config-path %h/gotosocial/config.yaml server start&lt;br /&gt;
StandardOutput=append:%h/var/gotosocial.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Folgende Eigenschaften sind einstellbar:&lt;br /&gt;
&lt;br /&gt;
; After: Hier kann eingestellt werden, welcher Dienst bereits laufen muss, bevor dieser Dienst gestartet wird. Wenn GotoSocial eine Redis-Instanz benötigt, könnte das entsprechend eingestellt werden.&lt;br /&gt;
; Type=simple : &#039;&#039;simple&#039;&#039; ist die Voreinstellung und kann weggelassen werden. Evtl. braucht man auch &#039;&#039;forking&#039;&#039;, wenn ein Dienst als Daemon im Hintergrund startet. Wenn man die Wahl hat, sollte man den Dienst immer im Vordergrund starten und nicht forken.&lt;br /&gt;
; WorkingDirectory : ist das Verzeichnis, in dem der Dienst gestartet wird. %h ist in dieser Datei eine Abkürzung für das Home-Verzeichnis des Users.&lt;br /&gt;
; Environment : Hier wird die Variable &#039;&#039;PATH&#039;&#039; definiert. Man kann mehrere Einträge des Namens &#039;&#039;Environment&#039;&#039; eintragen und bei Bedarf eine beliebige Anzahl von Environment-Variablen definieren.&lt;br /&gt;
; ExecStart : Das Programm, das als Dienst ausgeführt wird. Man kann eine komplette Kommandozeile angeben.&lt;br /&gt;
; StandardOutput : Eine Log-Datei, in die die Standardausgabe des laufenden Dienstes geschrieben wird.&lt;br /&gt;
; StandardError : Entsprechend zu &#039;&#039;StandardOutput&#039;&#039;. Mit &#039;&#039;inherit&#039;&#039; wird die Datei von &#039;&#039;StandardOutput&#039;&#039; geerbt.&lt;br /&gt;
; Restart=always : Der Dienst soll grundsätzlich neu gestartet werden, wenn der Prozess unerwartet beendet wird.&lt;br /&gt;
; PrivateTmp=true : &#039;&#039;/tmp&#039;&#039; und &#039;&#039;/var/tmp&#039;&#039; werden temporär im Namespace gemountet, so dass sie nicht mit anderen Prozessen geteilt werden.&lt;br /&gt;
; WantedBy : sollte im Usermodus von systemd meistens &#039;&#039;default.target&#039;&#039; sein. Andere Targets sind z.B. &#039;&#039;base.target&#039;&#039; oder &#039;&#039;timers.target&#039;&#039;. Für eine komplette Liste: &amp;lt;code&amp;gt;systemctl list-units --user --type=target&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== RAM- und CPU-Limits ====&lt;br /&gt;
&lt;br /&gt;
Auf Wunsch kann man die RAM- und CPU-Ressourcen für den Dienst begrenzen. Dazu trägt man weitere Eigenschaften im Abschnitt &#039;&#039;Service&#039;&#039; ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
...&lt;br /&gt;
MemoryAccounting=true&lt;br /&gt;
CPUAccounting=true&lt;br /&gt;
MemoryHigh=512M&lt;br /&gt;
MemoryMax=768M&lt;br /&gt;
CPUQuota=50%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; MemoryHigh : Weiches RAM-Limit, das ggf. überschritten werden kann, wenn es unvermeidlich ist.&lt;br /&gt;
; MemoryMax : Hartes, absolutes RAM-Limit.&lt;br /&gt;
; CPUQuota : Maximale Belegung eines CPU-Threads in Prozent. Werte über 100% sind sinnvoll, wenn mehr als ein CPU-Thread verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
==== Ausführliche Dokumentation der Direktiven ====&lt;br /&gt;
Eine ausführliche Dokumentation der Direktiven findet sich hier: &lt;br /&gt;
&lt;br /&gt;
https://www.freedesktop.org/software/systemd/man/latest/systemd.directives.html&lt;br /&gt;
&lt;br /&gt;
=== systemd Unit starten und stoppen ===&lt;br /&gt;
&lt;br /&gt;
Nachdem die systemd-Unit definiert ist, soll der Dienst gestartet werden. &lt;br /&gt;
Für die Verwaltung des Dienstes stehen die folgenden Kommandos zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
==== Reload ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user daemon-reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konfigurationsdateien im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; werden neu eingelesen. Dieses Kommando ist nach jeder Änderung einer  &#039;&#039;.service&#039;&#039;-Datei nötig.&lt;br /&gt;
&lt;br /&gt;
==== Start und Stopp ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user start gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user stop gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos zum Starten und Beenden des Dienstes.&lt;br /&gt;
&lt;br /&gt;
==== Enable und Disable ====&lt;br /&gt;
&lt;br /&gt;
Wenn ein Dienst nach einem Reboot des Servers automatisch gestartet werden soll, muss er aktiviert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user enable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn er nicht automatisch nach einem Reboot starten soll, muss der Dienst entsprechend deaktiviert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user disable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos, die den Dienst für einen Reboot des Servers aktivieren bzw. deaktivieren.&lt;br /&gt;
&lt;br /&gt;
==== Status ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zeigen den Status aller Dienste des Users bzw. eines bestimmten Dienstes an.&lt;br /&gt;
&lt;br /&gt;
== Zeitgesteuerte Ausführung mit systemd ==&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von systemd können auch wiederkehrende Aufgaben zeitgesteuert automatisiert werden.&lt;br /&gt;
Cronjobs, die früher für solche Zwecke benutzt wurden, lassen sich also durch systemd Units ersetzen.&lt;br /&gt;
Neben dem »service-file« wird dazu eine weitere Unit, nämlich ein »timer-file«, mit der Endung ».timer« angelegt und aktiviert. &lt;br /&gt;
&lt;br /&gt;
=== Einrichten des »service-files« ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ cat $HOME/.config/systemd/user/my-cleanup.service &lt;br /&gt;
&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=My Cleanup Service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=%h/bin/cleanup-script&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Testen ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ systemctl --user start my-cleanup.service &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Einrichten des »timer-files« ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ cat $HOME/.config/systemd/user/my-cleanup.timer &lt;br /&gt;
&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Daily My Cleanup Timer&lt;br /&gt;
&lt;br /&gt;
[Timer]&lt;br /&gt;
OnCalendar=daily&lt;br /&gt;
RandomizedDelaySec=3600&lt;br /&gt;
Persistent=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=timers.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der RandomizedDelay bewirkt, dass der Prozess zufällig im Zeitraum einer Stunde gestartet wird.&lt;br /&gt;
Wenn mehrere Timer-Aufgaben täglich (daily) auf einem System gestartet werden, verhindert diese Einstellung, dass alle Prozesse exakt zur gleichen Zeit starten und das System eventuell überlasten.&lt;br /&gt;
&lt;br /&gt;
Die zufällige Verzögerung sollte in einem sinnvollen Verhältnis zur Frequenz der Zeitsteuerung erfolgen.&lt;br /&gt;
Bei täglich ausgeführten Aufgaben mag eine Stunde (3600 Sekunden) sinnvoll sein.&lt;br /&gt;
Bei Aufgaben, die stündlich ausgeführt werden, wählt man eine kürzere Verzögerung, zum Beispiel fünf Minuten. &lt;br /&gt;
&lt;br /&gt;
Die Syntax der Datei lässt sich mit diesem Befehl prüfen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
systemd-analyze verify $HOME/.config/systemd/user/my-cleanup.timer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Einzelne Kalendereinträge lassen sich mit Erklärung ausgeben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
systemd-analyze calendar &#039;*:0/2&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine ausführliche Dokumentation der Direktiven findet sich hier: &lt;br /&gt;
&lt;br /&gt;
https://www.freedesktop.org/software/systemd/man/latest/systemd.timer.html&lt;br /&gt;
&lt;br /&gt;
=== Aktivieren der zeitgesteuerten Ausführung ===&lt;br /&gt;
&lt;br /&gt;
Der Timer muss noch aktiviert und gestartet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ systemctl --user enable my-cleanup.timer --now&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingent eines Webspace ==&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
Das RAM Kontingent wird in Schritten von jeweils 128 Ḿegabyte gebucht. Änderungen des RAM Kontingents für einen Webspace nimmt der Service unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
== Beliebte Fehler ==&lt;br /&gt;
=== Fehler: Failed to connect to bus: No such file or directory ===&lt;br /&gt;
&lt;br /&gt;
Wenn ich einen systemctl Befehl ausführe, kommt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user daemon-reload&lt;br /&gt;
Failed to connect to bus: No such file or directory&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bitte prüfen, ob Lingering für den Benutzer aktiviert ist. Dazu muss im Hsadmin beim Benutzer die Login Shell &amp;lt;code&amp;gt;/bin/bash&amp;lt;/code&amp;gt; eingetragen sein. Falls das bereits der Fall ist, ist es vielleicht ein sehr alter Benutzer. Dann bitte kurz auf &amp;lt;code&amp;gt;/usr/bin/passwd&amp;lt;/code&amp;gt; stellen, und dann wieder auf &amp;lt;code&amp;gt;/bin/bash&amp;lt;/code&amp;gt; zurückstellen.&lt;br /&gt;
&lt;br /&gt;
Evtl. hilft es auch, die Umgebungsvariable XDG_RUNTIME_DIR zu setzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export XDG_RUNTIME_DIR=/run/user/$UID&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das kann auch in die Datei &amp;lt;code&amp;gt;$HOME/.profile&amp;lt;/code&amp;gt; eingefügt werden.&lt;br /&gt;
&lt;br /&gt;
=== Fehler: Beim Starten passiert nichts ===&lt;br /&gt;
&lt;br /&gt;
Ich hatte das Problem bei einem Redis Dienst. Er stoppte innerhalb von Millisekunden. In der Log Datei stand nichts.&lt;br /&gt;
&lt;br /&gt;
Ursache: in der Service Datei war bei &amp;lt;code&amp;gt;WorkingDirectory&amp;lt;/code&amp;gt; ein nicht existierendes Verzeichnis eingetragen.&lt;br /&gt;
&lt;br /&gt;
= weiterführende Links =&lt;br /&gt;
&lt;br /&gt;
* https://www.freedesktop.org/software/systemd/man/latest/systemd.directives.html&lt;br /&gt;
* https://www.freedesktop.org/software/systemd/man/latest/systemd.timer.html&lt;br /&gt;
* https://documentation.suse.com/smart/systems-management/html/systemd-working-with-timers/index.html#systemd-timer-catchup&lt;br /&gt;
* https://wiki.archlinux.org/title/Systemd/Timers#As_a_cron_replacement&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:systemd]]&lt;br /&gt;
[[Kategorie:Eigene Daemons]]&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Umstellung_von_Daemon-Diensten_auf_systemd&amp;diff=7094</id>
		<title>Umstellung von Daemon-Diensten auf systemd</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Umstellung_von_Daemon-Diensten_auf_systemd&amp;diff=7094"/>
		<updated>2024-11-25T14:51:11Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: /* Praktische Umstellung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Anlass dieser Anleitung ==&lt;br /&gt;
&lt;br /&gt;
Ab November 2024 unterstützt die Managed Plattform ein RAM Kontigent pro Managed Webspace. Mitglieder buchen für ihre Webspaces jeweils ein RAM Kontingent in Schritten von jeweils 128 Megabyte. Das unterstützt uns besser bei der verursachergerechten Verteilung der Hardwarekosten, als es vorher mit einer Pauschale pro Serverdienst der Fall war. Änderungen des RAM Kontingents für einen Webspace nimmt der Service unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
Damit die RAM Kontingente funktionieren, müssen im Managed Webspace alle Anwendungen, die im Userspace laufen, auf systemd umgestellt werden. Das betrifft Anwendungen, die bisher über z.B. cronjob, supervisor oder monit gestartet wurden.&lt;br /&gt;
&lt;br /&gt;
Siehe auch unsere [[Systemd im Userspace]] Dokumentation.&lt;br /&gt;
&lt;br /&gt;
== Praktische Umstellung ==&lt;br /&gt;
&lt;br /&gt;
Für eine Übergangsphase steht jedem Managed Webspace genügend RAM zur Verfügung, um eigene Serverdienste zu starten.&lt;br /&gt;
Nach der Umstellung aller Dienste auf systemd wird dann das tatsächlich benötigte RAM-Kontingent ermittelt und gebucht.&lt;br /&gt;
&lt;br /&gt;
=== cronjob ===&lt;br /&gt;
&lt;br /&gt;
TODO: auf Timer&lt;br /&gt;
&lt;br /&gt;
=== monit ===&lt;br /&gt;
&lt;br /&gt;
TODO: Beispiel&lt;br /&gt;
&lt;br /&gt;
=== supervisor ===&lt;br /&gt;
&lt;br /&gt;
TODO: Beispiel&lt;br /&gt;
&lt;br /&gt;
== Ermittlung und Buchung des benötigten RAM Kontingent ==&lt;br /&gt;
&lt;br /&gt;
TODO: siehe [[Systemd_im_Userspace#RAM_Kontingent_eines_Webspace]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:Systemd]]&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7093</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7093"/>
		<updated>2024-11-25T13:59:37Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: /* Zeitgesteuerte Ausführung mit systemd */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Über systemd ==&lt;br /&gt;
&#039;&#039;systemd&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess hat im laufenden System die Prozessnummer &amp;quot;1&amp;quot;. Er verwaltet alle anderen Prozesse als Kind-Prozesse.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann systemd nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Operations Platform kann jeder Account mit einer gültigen Login-Shell Dienste unter der Kontrolle von systemd starten. &lt;br /&gt;
&lt;br /&gt;
Im Hostsharing Managed Webspace ist es zwingend, systemd als Prozessmonitor für eigene Serverdienste zu nutzen; auf einem Hostsharing Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit systemd ==&lt;br /&gt;
&lt;br /&gt;
Die systemd-Konfiguration wird in dem Verzeichnis des Benutzers eingerichtet, unter dem die Anwendung laufen soll.&lt;br /&gt;
In diesen Beispiel soll die Anwendung GotoSocial unter der Benutzerkennung von &#039;&#039;xyz00-service&#039;&#039; laufen.&lt;br /&gt;
Nachdem die Anwendung im Benutzer &#039;&#039;xyz00-service&#039;&#039; installiert wurde, erfolgt nun die Konfiguration von systemd in demselben Benutzer.&lt;br /&gt;
&lt;br /&gt;
Benutzer, die systemd steuern sollen, müssen über eine gültige Shell verfügen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit dem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. &lt;br /&gt;
Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
=== systemd Units ===&lt;br /&gt;
&lt;br /&gt;
Die systemd-Units für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Der Pfad muss bei einem neuen Benutzer angelegt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Verzeichnis wird für jeden Service eine Datei mit der Endung &#039;&#039;.service&#039;&#039; angelegt. In diesem Beispiel ist dies eine GotoSocial-Instanz. GotoSocial ist ein einfaches Binärprogramm, das in der Programmiersprache &#039;&#039;Go&#039;&#039; programmiert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GotoSocial Service&lt;br /&gt;
#After=my-redis.service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=%h/gotosocial&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/gotosocial/gotosocial --config-path %h/gotosocial/config.yaml server start&lt;br /&gt;
StandardOutput=append:%h/var/gotosocial.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Folgende Eigenschaften sind einstellbar:&lt;br /&gt;
&lt;br /&gt;
; After: Hier kann eingestellt werden, welcher Dienst bereits laufen muss, bevor dieser Dienst gestartet wird. Wenn GotoSocial eine Redis-Instanz benötigt, könnte das entsprechend eingestellt werden.&lt;br /&gt;
; Type=simple : &#039;&#039;simple&#039;&#039; ist die Voreinstellung und kann weggelassen werden. Evtl. braucht man auch &#039;&#039;forking&#039;&#039;, wenn ein Dienst als Daemon im Hintergrund startet. Wenn man die Wahl hat, sollte man den Dienst immer im Vordergrund starten und nicht forken.&lt;br /&gt;
; WorkingDirectory : ist das Verzeichnis, in dem der Dienst gestartet wird. %h ist in dieser Datei eine Abkürzung für das Home-Verzeichnis des Users.&lt;br /&gt;
; Environment : Hier wird die Variable &#039;&#039;PATH&#039;&#039; definiert. Man kann mehrere Einträge des Namens &#039;&#039;Environment&#039;&#039; eintragen und bei Bedarf eine beliebige Anzahl von Environment-Variablen definieren.&lt;br /&gt;
; ExecStart : Das Programm, das als Dienst ausgeführt wird. Man kann eine komplette Kommandozeile angeben.&lt;br /&gt;
; StandardOutput : Eine Log-Datei, in die die Standardausgabe des laufenden Dienstes geschrieben wird.&lt;br /&gt;
; StandardError : Entsprechend zu &#039;&#039;StandardOutput&#039;&#039;. Mit &#039;&#039;inherit&#039;&#039; wird die Datei von &#039;&#039;StandardOutput&#039;&#039; geerbt.&lt;br /&gt;
; Restart=always : Der Dienst soll grundsätzlich neu gestartet werden, wenn der Prozess unerwartet beendet wird.&lt;br /&gt;
; PrivateTmp=true : &#039;&#039;/tmp&#039;&#039; und &#039;&#039;/var/tmp&#039;&#039; werden temporär im Namespace gemountet, so dass sie nicht mit anderen Prozessen geteilt werden.&lt;br /&gt;
; WantedBy : sollte im Usermodus von systemd meistens &#039;&#039;default.target&#039;&#039; sein. Andere Targets sind z.B. &#039;&#039;base.target&#039;&#039; oder &#039;&#039;timers.target&#039;&#039;. Für eine komplette Liste: &amp;lt;code&amp;gt;systemctl list-units --user --type=target&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== RAM- und CPU-Limits ====&lt;br /&gt;
&lt;br /&gt;
Auf Wunsch kann man die RAM- und CPU-Ressourcen für den Dienst begrenzen. Dazu trägt man weitere Eigenschaften im Abschnitt &#039;&#039;Service&#039;&#039; ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
...&lt;br /&gt;
MemoryAccounting=true&lt;br /&gt;
CPUAccounting=true&lt;br /&gt;
MemoryHigh=512M&lt;br /&gt;
MemoryMax=768M&lt;br /&gt;
CPUQuota=50%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; MemoryHigh : Weiches RAM-Limit, das ggf. überschritten werden kann, wenn es unvermeidlich ist.&lt;br /&gt;
; MemoryMax : Hartes, absolutes RAM-Limit.&lt;br /&gt;
; CPUQuota : Maximale Belegung eines CPU-Threads in Prozent. Werte über 100% sind sinnvoll, wenn mehr als ein CPU-Thread verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
==== Ausführliche Dokumentation der Direktiven ====&lt;br /&gt;
Eine ausführliche Dokumentation der Direktiven findet sich hier: &lt;br /&gt;
&lt;br /&gt;
https://www.freedesktop.org/software/systemd/man/latest/systemd.directives.html&lt;br /&gt;
&lt;br /&gt;
=== systemd Unit starten und stoppen ===&lt;br /&gt;
&lt;br /&gt;
Nachdem die systemd-Unit definiert ist, soll der Dienst gestartet werden. &lt;br /&gt;
Für die Verwaltung des Dienstes stehen die folgenden Kommandos zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
==== Reload ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user daemon-reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konfigurationsdateien im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; werden neu eingelesen. Dieses Kommando ist nach jeder Änderung einer  &#039;&#039;.service&#039;&#039;-Datei nötig.&lt;br /&gt;
&lt;br /&gt;
==== Start und Stopp ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user start gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user stop gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos zum Starten und Beenden des Dienstes.&lt;br /&gt;
&lt;br /&gt;
==== Enable und Disable ====&lt;br /&gt;
&lt;br /&gt;
Wenn ein Dienst nach einem Reboot des Servers automatisch gestartet werden soll, muss er aktiviert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user enable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn er nicht automatisch nach einem Reboot starten soll, muss der Dienst entsprechend deaktiviert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user disable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos, die den Dienst für einen Reboot des Servers aktivieren bzw. deaktivieren.&lt;br /&gt;
&lt;br /&gt;
==== Status ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zeigen den Status aller Dienste des Users bzw. eines bestimmten Dienstes an.&lt;br /&gt;
&lt;br /&gt;
== Zeitgesteuerte Ausführung mit systemd ==&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von systemd können auch wiederkehrende Aufgaben zeitgesteuert automatisiert werden.&lt;br /&gt;
Cronjobs, die früher für solche Zwecke benutzt wurden, lassen sich also durch systemd Units ersetzen.&lt;br /&gt;
Neben dem »service-file« wird dazu eine weitere Unit, nämlich ein »timer-file«, mit der Endung ».timer« angelegt und aktiviert. &lt;br /&gt;
&lt;br /&gt;
=== Einrichten des »service-files« ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ cat $HOME/.config/systemd/user/my-cleanup.service &lt;br /&gt;
&lt;br /&gt;
    [Unit] &lt;br /&gt;
    Description=My Cleanup Service &lt;br /&gt;
&lt;br /&gt;
    [Service] &lt;br /&gt;
    Type=oneshot &lt;br /&gt;
    ExecStart=%h/bin/cleanup-script &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Testen ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ systemctl --user start my-cleanup.service &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Einrichten des »timer-files« ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ cat $HOME/.config/systemd/user/my-cleanup.timer &lt;br /&gt;
&lt;br /&gt;
    [Unit] &lt;br /&gt;
    Description=Daily My Cleanup Timer &lt;br /&gt;
&lt;br /&gt;
    [Timer] &lt;br /&gt;
    OnCalendar=daily&lt;br /&gt;
    RandomizedDelaySec=3600&lt;br /&gt;
&lt;br /&gt;
    [Install] &lt;br /&gt;
    WantedBy=timers.target &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der RandomizedDelay bewirkt, dass der Prozess zufällig im Zeitraum einer Stunde gestartet wird.&lt;br /&gt;
Wenn mehrere Timer-Aufgaben täglich (daily) auf einem System gestartet werden, verhindert diese Einstellung, dass alle Prozesse exakt zur gleichen Zeit starten und das System eventuell überlasten.&lt;br /&gt;
&lt;br /&gt;
Die zufällige Verzögerung sollte in einem sinnvollen Verhältnis zur Frequenz der Zeitsteuerung erfolgen.&lt;br /&gt;
Bei täglich ausgeführten Aufgaben mag eine Stunde (3600 Sekunden) sinnvoll sein.&lt;br /&gt;
Bei Aufgaben, die stündlich ausgeführt werden, wählt man eine kürzere Verzögerung, zum Beispiel fünf Minuten. &lt;br /&gt;
&lt;br /&gt;
Eine ausführliche Dokumentation der Direktiven findet sich hier: &lt;br /&gt;
&lt;br /&gt;
https://www.freedesktop.org/software/systemd/man/latest/systemd.timer.html&lt;br /&gt;
&lt;br /&gt;
=== Aktivieren der zeitgesteuerten Ausführung ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ systemctl --user enable my-cleanup.timer &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingent eines Webspace ==&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
Das RAM Kontingent wird in Schritten von jeweils 128 Ḿegabyte gebucht. Änderungen des RAM Kontingents für einen Webspace nimmt der Service unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
= weiterführende Links =&lt;br /&gt;
&lt;br /&gt;
* https://www.freedesktop.org/software/systemd/man/latest/systemd.directives.html&lt;br /&gt;
* https://www.freedesktop.org/software/systemd/man/latest/systemd.timer.html&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:systemd]]&lt;br /&gt;
[[Kategorie:Eigene Daemons]]&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7092</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7092"/>
		<updated>2024-11-25T13:58:39Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: /* Eigene Serverdienste mit systemd */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Über systemd ==&lt;br /&gt;
&#039;&#039;systemd&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess hat im laufenden System die Prozessnummer &amp;quot;1&amp;quot;. Er verwaltet alle anderen Prozesse als Kind-Prozesse.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann systemd nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Operations Platform kann jeder Account mit einer gültigen Login-Shell Dienste unter der Kontrolle von systemd starten. &lt;br /&gt;
&lt;br /&gt;
Im Hostsharing Managed Webspace ist es zwingend, systemd als Prozessmonitor für eigene Serverdienste zu nutzen; auf einem Hostsharing Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit systemd ==&lt;br /&gt;
&lt;br /&gt;
Die systemd-Konfiguration wird in dem Verzeichnis des Benutzers eingerichtet, unter dem die Anwendung laufen soll.&lt;br /&gt;
In diesen Beispiel soll die Anwendung GotoSocial unter der Benutzerkennung von &#039;&#039;xyz00-service&#039;&#039; laufen.&lt;br /&gt;
Nachdem die Anwendung im Benutzer &#039;&#039;xyz00-service&#039;&#039; installiert wurde, erfolgt nun die Konfiguration von systemd in demselben Benutzer.&lt;br /&gt;
&lt;br /&gt;
Benutzer, die systemd steuern sollen, müssen über eine gültige Shell verfügen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit dem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. &lt;br /&gt;
Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
=== systemd Units ===&lt;br /&gt;
&lt;br /&gt;
Die systemd-Units für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Der Pfad muss bei einem neuen Benutzer angelegt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Verzeichnis wird für jeden Service eine Datei mit der Endung &#039;&#039;.service&#039;&#039; angelegt. In diesem Beispiel ist dies eine GotoSocial-Instanz. GotoSocial ist ein einfaches Binärprogramm, das in der Programmiersprache &#039;&#039;Go&#039;&#039; programmiert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GotoSocial Service&lt;br /&gt;
#After=my-redis.service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=%h/gotosocial&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/gotosocial/gotosocial --config-path %h/gotosocial/config.yaml server start&lt;br /&gt;
StandardOutput=append:%h/var/gotosocial.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Folgende Eigenschaften sind einstellbar:&lt;br /&gt;
&lt;br /&gt;
; After: Hier kann eingestellt werden, welcher Dienst bereits laufen muss, bevor dieser Dienst gestartet wird. Wenn GotoSocial eine Redis-Instanz benötigt, könnte das entsprechend eingestellt werden.&lt;br /&gt;
; Type=simple : &#039;&#039;simple&#039;&#039; ist die Voreinstellung und kann weggelassen werden. Evtl. braucht man auch &#039;&#039;forking&#039;&#039;, wenn ein Dienst als Daemon im Hintergrund startet. Wenn man die Wahl hat, sollte man den Dienst immer im Vordergrund starten und nicht forken.&lt;br /&gt;
; WorkingDirectory : ist das Verzeichnis, in dem der Dienst gestartet wird. %h ist in dieser Datei eine Abkürzung für das Home-Verzeichnis des Users.&lt;br /&gt;
; Environment : Hier wird die Variable &#039;&#039;PATH&#039;&#039; definiert. Man kann mehrere Einträge des Namens &#039;&#039;Environment&#039;&#039; eintragen und bei Bedarf eine beliebige Anzahl von Environment-Variablen definieren.&lt;br /&gt;
; ExecStart : Das Programm, das als Dienst ausgeführt wird. Man kann eine komplette Kommandozeile angeben.&lt;br /&gt;
; StandardOutput : Eine Log-Datei, in die die Standardausgabe des laufenden Dienstes geschrieben wird.&lt;br /&gt;
; StandardError : Entsprechend zu &#039;&#039;StandardOutput&#039;&#039;. Mit &#039;&#039;inherit&#039;&#039; wird die Datei von &#039;&#039;StandardOutput&#039;&#039; geerbt.&lt;br /&gt;
; Restart=always : Der Dienst soll grundsätzlich neu gestartet werden, wenn der Prozess unerwartet beendet wird.&lt;br /&gt;
; PrivateTmp=true : &#039;&#039;/tmp&#039;&#039; und &#039;&#039;/var/tmp&#039;&#039; werden temporär im Namespace gemountet, so dass sie nicht mit anderen Prozessen geteilt werden.&lt;br /&gt;
; WantedBy : sollte im Usermodus von systemd meistens &#039;&#039;default.target&#039;&#039; sein. Andere Targets sind z.B. &#039;&#039;base.target&#039;&#039; oder &#039;&#039;timers.target&#039;&#039;. Für eine komplette Liste: &amp;lt;code&amp;gt;systemctl list-units --user --type=target&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== RAM- und CPU-Limits ====&lt;br /&gt;
&lt;br /&gt;
Auf Wunsch kann man die RAM- und CPU-Ressourcen für den Dienst begrenzen. Dazu trägt man weitere Eigenschaften im Abschnitt &#039;&#039;Service&#039;&#039; ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
...&lt;br /&gt;
MemoryAccounting=true&lt;br /&gt;
CPUAccounting=true&lt;br /&gt;
MemoryHigh=512M&lt;br /&gt;
MemoryMax=768M&lt;br /&gt;
CPUQuota=50%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; MemoryHigh : Weiches RAM-Limit, das ggf. überschritten werden kann, wenn es unvermeidlich ist.&lt;br /&gt;
; MemoryMax : Hartes, absolutes RAM-Limit.&lt;br /&gt;
; CPUQuota : Maximale Belegung eines CPU-Threads in Prozent. Werte über 100% sind sinnvoll, wenn mehr als ein CPU-Thread verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
==== Ausführliche Dokumentation der Direktiven ====&lt;br /&gt;
Eine ausführliche Dokumentation der Direktiven findet sich hier: &lt;br /&gt;
&lt;br /&gt;
https://www.freedesktop.org/software/systemd/man/latest/systemd.directives.html&lt;br /&gt;
&lt;br /&gt;
=== systemd Unit starten und stoppen ===&lt;br /&gt;
&lt;br /&gt;
Nachdem die systemd-Unit definiert ist, soll der Dienst gestartet werden. &lt;br /&gt;
Für die Verwaltung des Dienstes stehen die folgenden Kommandos zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
==== Reload ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user daemon-reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konfigurationsdateien im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; werden neu eingelesen. Dieses Kommando ist nach jeder Änderung einer  &#039;&#039;.service&#039;&#039;-Datei nötig.&lt;br /&gt;
&lt;br /&gt;
==== Start und Stopp ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user start gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user stop gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos zum Starten und Beenden des Dienstes.&lt;br /&gt;
&lt;br /&gt;
==== Enable und Disable ====&lt;br /&gt;
&lt;br /&gt;
Wenn ein Dienst nach einem Reboot des Servers automatisch gestartet werden soll, muss er aktiviert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user enable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn er nicht automatisch nach einem Reboot starten soll, muss der Dienst entsprechend deaktiviert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user disable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos, die den Dienst für einen Reboot des Servers aktivieren bzw. deaktivieren.&lt;br /&gt;
&lt;br /&gt;
==== Status ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zeigen den Status aller Dienste des Users bzw. eines bestimmten Dienstes an.&lt;br /&gt;
&lt;br /&gt;
== Zeitgesteuerte Ausführung mit systemd ==&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von systemd können wiederkehrende Aufgaben zeitgesteuert automatisiert werden.&lt;br /&gt;
Cronjobs, die früher für solche Zwecke benutzt wurden, lassen sich also mit systemd Units ersetzen.&lt;br /&gt;
Neben dem »service-file« wird dazu eine weitere Unit, nämlich ein »timer-file«, mit der Endung ».timer« angelegt und aktiviert. &lt;br /&gt;
&lt;br /&gt;
=== Einrichten des »service-files« ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ cat $HOME/.config/systemd/user/my-cleanup.service &lt;br /&gt;
&lt;br /&gt;
    [Unit] &lt;br /&gt;
    Description=My Cleanup Service &lt;br /&gt;
&lt;br /&gt;
    [Service] &lt;br /&gt;
    Type=oneshot &lt;br /&gt;
    ExecStart=%h/bin/cleanup-script &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Testen ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ systemctl --user start my-cleanup.service &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Einrichten des »timer-files« ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ cat $HOME/.config/systemd/user/my-cleanup.timer &lt;br /&gt;
&lt;br /&gt;
    [Unit] &lt;br /&gt;
    Description=Daily My Cleanup Timer &lt;br /&gt;
&lt;br /&gt;
    [Timer] &lt;br /&gt;
    OnCalendar=daily&lt;br /&gt;
    RandomizedDelaySec=3600&lt;br /&gt;
&lt;br /&gt;
    [Install] &lt;br /&gt;
    WantedBy=timers.target &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der RandomizedDelay bewirkt, dass der Prozess zufällig im Zeitraum einer Stunde gestartet wird.&lt;br /&gt;
Wenn mehrere Timer-Aufgaben täglich (daily) auf einem System gestartet werden, verhindert diese Einstellung, dass alle Prozesse exakt zur gleichen Zeit starten und das System eventuell überlasten.&lt;br /&gt;
&lt;br /&gt;
Die zufällige Verzögerung sollte in einem sinnvollen Verhältnis zur Frequenz der Zeitsteuerung erfolgen.&lt;br /&gt;
Bei täglich ausgeführten Aufgaben mag eine Stunde (3600 Sekunden) sinnvoll sein.&lt;br /&gt;
Bei Aufgaben, die stündlich ausgeführt werden, wählt man eine kürzere Verzögerung, zum Beispiel fünf Minuten. &lt;br /&gt;
&lt;br /&gt;
Eine ausführliche Dokumentation der Direktiven findet sich hier: &lt;br /&gt;
&lt;br /&gt;
https://www.freedesktop.org/software/systemd/man/latest/systemd.timer.html&lt;br /&gt;
&lt;br /&gt;
=== Aktivieren der zeitgesteuerten Ausführung ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ systemctl --user enable my-cleanup.timer &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingent eines Webspace ==&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
Das RAM Kontingent wird in Schritten von jeweils 128 Ḿegabyte gebucht. Änderungen des RAM Kontingents für einen Webspace nimmt der Service unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
= weiterführende Links =&lt;br /&gt;
&lt;br /&gt;
* https://www.freedesktop.org/software/systemd/man/latest/systemd.directives.html&lt;br /&gt;
* https://www.freedesktop.org/software/systemd/man/latest/systemd.timer.html&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:systemd]]&lt;br /&gt;
[[Kategorie:Eigene Daemons]]&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7091</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7091"/>
		<updated>2024-11-25T13:53:09Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: /* Eigene Serverdienste mit systemd */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Über systemd ==&lt;br /&gt;
&#039;&#039;systemd&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess hat im laufenden System die Prozessnummer &amp;quot;1&amp;quot;. Er verwaltet alle anderen Prozesse als Kind-Prozesse.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann systemd nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Operations Platform kann jeder Account mit einer gültigen Login-Shell Dienste unter der Kontrolle von systemd starten. &lt;br /&gt;
&lt;br /&gt;
Im Hostsharing Managed Webspace ist es zwingend, systemd als Prozessmonitor für eigene Serverdienste zu nutzen; auf einem Hostsharing Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit systemd ==&lt;br /&gt;
&lt;br /&gt;
Die systemd-Konfiguration wird in dem Verzeichnis des Benutzers eingerichtet, unter dem die Anwendung laufen soll.&lt;br /&gt;
&lt;br /&gt;
In diesen Beispiel ist dies der Benutzer &#039;&#039;xyz00-service&#039;&#039;.&lt;br /&gt;
Der Benutzer verfügt über eine gültige Shell, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit dem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. &lt;br /&gt;
&lt;br /&gt;
Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
=== systemd Units ===&lt;br /&gt;
&lt;br /&gt;
Die systemd-Units für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Für einen neuen User legt man also zuerst dieses Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Verzeichnis wird für jeden Service eine Datei mit der Endung &#039;&#039;.service&#039;&#039; angelegt. In diesem Beispiel ist dies eine GotoSocial-Instanz. GotoSocial ist ein einfaches Binärprogramm, das in der Programmiersprache &#039;&#039;Go&#039;&#039; programmiert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GotoSocial Service&lt;br /&gt;
#After=my-redis.service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=%h/gotosocial&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/gotosocial/gotosocial --config-path %h/gotosocial/config.yaml server start&lt;br /&gt;
StandardOutput=append:%h/var/gotosocial.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Folgende Eigenschaften sind einstellbar:&lt;br /&gt;
&lt;br /&gt;
; After: Hier kann eingestellt werden, welcher Dienst bereits laufen muss, bevor dieser Dienst gestartet wird. Wenn GotoSocial eine Redis-Instanz benötigt, könnte das entsprechend eingestellt werden.&lt;br /&gt;
; Type=simple : &#039;&#039;simple&#039;&#039; ist die Voreinstellung und kann weggelassen werden. Evtl. braucht man auch &#039;&#039;forking&#039;&#039;, wenn ein Dienst als Daemon im Hintergrund startet. Wenn man die Wahl hat, sollte man den Dienst immer im Vordergrund starten und nicht forken.&lt;br /&gt;
; WorkingDirectory : ist das Verzeichnis, in dem der Dienst gestartet wird. %h ist in dieser Datei eine Abkürzung für das Home-Verzeichnis des Users.&lt;br /&gt;
; Environment : Hier wird die Variable &#039;&#039;PATH&#039;&#039; definiert. Man kann mehrere Einträge des Namens &#039;&#039;Environment&#039;&#039; eintragen und bei Bedarf eine beliebige Anzahl von Environment-Variablen definieren.&lt;br /&gt;
; ExecStart : Das Programm, das als Dienst ausgeführt wird. Man kann eine komplette Kommandozeile angeben.&lt;br /&gt;
; StandardOutput : Eine Log-Datei, in die die Standardausgabe des laufenden Dienstes geschrieben wird.&lt;br /&gt;
; StandardError : Entsprechend zu &#039;&#039;StandardOutput&#039;&#039;. Mit &#039;&#039;inherit&#039;&#039; wird die Datei von &#039;&#039;StandardOutput&#039;&#039; geerbt.&lt;br /&gt;
; Restart=always : Der Dienst soll grundsätzlich neu gestartet werden, wenn der Prozess unerwartet beendet wird.&lt;br /&gt;
; PrivateTmp=true : &#039;&#039;/tmp&#039;&#039; und &#039;&#039;/var/tmp&#039;&#039; werden temporär im Namespace gemountet, so dass sie nicht mit anderen Prozessen geteilt werden.&lt;br /&gt;
; WantedBy : sollte im Usermodus von systemd meistens &#039;&#039;default.target&#039;&#039; sein. Andere Targets sind z.B. &#039;&#039;base.target&#039;&#039; oder &#039;&#039;timers.target&#039;&#039;. Für eine komplette Liste: &amp;lt;code&amp;gt;systemctl list-units --user --type=target&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== RAM- und CPU-Limits ====&lt;br /&gt;
&lt;br /&gt;
Auf Wunsch kann man die RAM- und CPU-Ressourcen für den Dienst begrenzen. Dazu trägt man weitere Eigenschaften im Abschnitt &#039;&#039;Service&#039;&#039; ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
...&lt;br /&gt;
MemoryAccounting=true&lt;br /&gt;
CPUAccounting=true&lt;br /&gt;
MemoryHigh=512M&lt;br /&gt;
MemoryMax=768M&lt;br /&gt;
CPUQuota=50%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; MemoryHigh : Weiches RAM-Limit, das ggf. überschritten werden kann, wenn es unvermeidlich ist.&lt;br /&gt;
; MemoryMax : Hartes, absolutes RAM-Limit.&lt;br /&gt;
; CPUQuota : Maximale Belegung eines CPU-Threads in Prozent. Werte über 100% sind sinnvoll, wenn mehr als ein CPU-Thread verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
==== Ausführliche Dokumentation der Direktiven ====&lt;br /&gt;
Eine ausführliche Dokumentation der Direktiven findet sich hier: &lt;br /&gt;
&lt;br /&gt;
https://www.freedesktop.org/software/systemd/man/latest/systemd.directives.html&lt;br /&gt;
&lt;br /&gt;
=== systemd Unit starten und stoppen ===&lt;br /&gt;
&lt;br /&gt;
Nachdem die systemd-Unit definiert ist, soll der Dienst gestartet werden. &lt;br /&gt;
Für die Verwaltung des Dienstes stehen die folgenden Kommandos zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
==== Reload ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user daemon-reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konfigurationsdateien im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; werden neu eingelesen. Dieses Kommando ist nach jeder Änderung einer  &#039;&#039;.service&#039;&#039;-Datei nötig.&lt;br /&gt;
&lt;br /&gt;
==== Start und Stopp ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user start gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user stop gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos zum Starten und Beenden des Dienstes.&lt;br /&gt;
&lt;br /&gt;
==== Enable und Disable ====&lt;br /&gt;
&lt;br /&gt;
Wenn ein Dienst nach einem Reboot des Servers automatisch gestartet werden soll, muss er aktiviert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user enable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn er nicht automatisch nach einem Reboot starten soll, muss der Dienst entsprechend deaktiviert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user disable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos, die den Dienst für einen Reboot des Servers aktivieren bzw. deaktivieren.&lt;br /&gt;
&lt;br /&gt;
==== Status ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zeigen den Status aller Dienste des Users bzw. eines bestimmten Dienstes an.&lt;br /&gt;
&lt;br /&gt;
== Zeitgesteuerte Ausführung mit systemd ==&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von systemd können wiederkehrende Aufgaben zeitgesteuert automatisiert werden.&lt;br /&gt;
Cronjobs, die früher für solche Zwecke benutzt wurden, lassen sich also mit systemd Units ersetzen.&lt;br /&gt;
Neben dem »service-file« wird dazu eine weitere Unit, nämlich ein »timer-file«, mit der Endung ».timer« angelegt und aktiviert. &lt;br /&gt;
&lt;br /&gt;
=== Einrichten des »service-files« ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ cat $HOME/.config/systemd/user/my-cleanup.service &lt;br /&gt;
&lt;br /&gt;
    [Unit] &lt;br /&gt;
    Description=My Cleanup Service &lt;br /&gt;
&lt;br /&gt;
    [Service] &lt;br /&gt;
    Type=oneshot &lt;br /&gt;
    ExecStart=%h/bin/cleanup-script &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Testen ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ systemctl --user start my-cleanup.service &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Einrichten des »timer-files« ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ cat $HOME/.config/systemd/user/my-cleanup.timer &lt;br /&gt;
&lt;br /&gt;
    [Unit] &lt;br /&gt;
    Description=Daily My Cleanup Timer &lt;br /&gt;
&lt;br /&gt;
    [Timer] &lt;br /&gt;
    OnCalendar=daily&lt;br /&gt;
    RandomizedDelaySec=3600&lt;br /&gt;
&lt;br /&gt;
    [Install] &lt;br /&gt;
    WantedBy=timers.target &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der RandomizedDelay bewirkt, dass der Prozess zufällig im Zeitraum einer Stunde gestartet wird.&lt;br /&gt;
Wenn mehrere Timer-Aufgaben täglich (daily) auf einem System gestartet werden, verhindert diese Einstellung, dass alle Prozesse exakt zur gleichen Zeit starten und das System eventuell überlasten.&lt;br /&gt;
&lt;br /&gt;
Die zufällige Verzögerung sollte in einem sinnvollen Verhältnis zur Frequenz der Zeitsteuerung erfolgen.&lt;br /&gt;
Bei täglich ausgeführten Aufgaben mag eine Stunde (3600 Sekunden) sinnvoll sein.&lt;br /&gt;
Bei Aufgaben, die stündlich ausgeführt werden, wählt man eine kürzere Verzögerung, zum Beispiel fünf Minuten. &lt;br /&gt;
&lt;br /&gt;
Eine ausführliche Dokumentation der Direktiven findet sich hier: &lt;br /&gt;
&lt;br /&gt;
https://www.freedesktop.org/software/systemd/man/latest/systemd.timer.html&lt;br /&gt;
&lt;br /&gt;
=== Aktivieren der zeitgesteuerten Ausführung ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ systemctl --user enable my-cleanup.timer &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingent eines Webspace ==&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
Das RAM Kontingent wird in Schritten von jeweils 128 Ḿegabyte gebucht. Änderungen des RAM Kontingents für einen Webspace nimmt der Service unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
= weiterführende Links =&lt;br /&gt;
&lt;br /&gt;
* https://www.freedesktop.org/software/systemd/man/latest/systemd.directives.html&lt;br /&gt;
* https://www.freedesktop.org/software/systemd/man/latest/systemd.timer.html&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:systemd]]&lt;br /&gt;
[[Kategorie:Eigene Daemons]]&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7090</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7090"/>
		<updated>2024-11-25T13:09:01Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: /* Einrichten des »timer-files« */ Verzögerungsbeispiele&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Über systemd ==&lt;br /&gt;
&#039;&#039;systemd&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess hat im laufenden System die Prozessnummer &amp;quot;1&amp;quot;. Er verwaltet alle anderen Prozesse als Kind-Prozesse.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann systemd nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Operations Platform kann jeder Account mit einer gültigen Login-Shell Dienste unter der Kontrolle von systemd starten. &lt;br /&gt;
&lt;br /&gt;
Im Hostsharing Managed Webspace ist es zwingend, systemd als Prozessmonitor für eigene Serverdienste zu nutzen; auf einem Hostsharing Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit systemd ==&lt;br /&gt;
&lt;br /&gt;
Um Serverdienste mit systemd zu verwalten, müssen folgende Voraussetzungen erfüllt werden:&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;HSAdmin&#039;&#039; wird ein Service-User zur Rechtetrennung dieses Dienstes von anderen Anwendungen angelegt. In diesem Artikel soll der Beispiel-User &#039;&#039;xyz00-service&#039;&#039; im Webspace &#039;&#039;xyz00&#039;&#039; sein. &lt;br /&gt;
&lt;br /&gt;
Dieser User bekommt bei der Einrichtung eine gültige Shell zugewiesen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit dem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. &lt;br /&gt;
&lt;br /&gt;
Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
=== systemd Units ===&lt;br /&gt;
&lt;br /&gt;
Die systemd-Units für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Für einen neuen User legt man also zuerst dieses Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Verzeichnis wird für jeden Service eine Datei mit der Endung &#039;&#039;.service&#039;&#039; angelegt. In diesem Beispiel ist dies eine GotoSocial-Instanz. GotoSocial ist ein einfaches Binärprogramm, das in der Programmiersprache &#039;&#039;Go&#039;&#039; programmiert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GotoSocial Service&lt;br /&gt;
#After=my-redis.service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=%h/gotosocial&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/gotosocial/gotosocial --config-path %h/gotosocial/config.yaml server start&lt;br /&gt;
StandardOutput=append:%h/var/gotosocial.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Folgende Eigenschaften sind einstellbar:&lt;br /&gt;
&lt;br /&gt;
; After: Hier kann eingestellt werden, welcher Dienst bereits laufen muss, bevor dieser Dienst gestartet wird. Wenn GotoSocial eine Redis-Instanz benötigt, könnte das entsprechend eingestellt werden.&lt;br /&gt;
; Type=simple : &#039;&#039;simple&#039;&#039; ist die Voreinstellung und kann weggelassen werden. Evtl. braucht man auch &#039;&#039;forking&#039;&#039;, wenn ein Dienst als Daemon im Hintergrund startet. Wenn man die Wahl hat, sollte man den Dienst immer im Vordergrund starten und nicht forken.&lt;br /&gt;
; WorkingDirectory : ist das Verzeichnis, in dem der Dienst gestartet wird. %h ist in dieser Datei eine Abkürzung für das Home-Verzeichnis des Users.&lt;br /&gt;
; Environment : Hier wird die Variable &#039;&#039;PATH&#039;&#039; definiert. Man kann mehrere Einträge des Namens &#039;&#039;Environment&#039;&#039; eintragen und bei Bedarf eine beliebige Anzahl von Environment-Variablen definieren.&lt;br /&gt;
; ExecStart : Das Programm, das als Dienst ausgeführt wird. Man kann eine komplette Kommandozeile angeben.&lt;br /&gt;
; StandardOutput : Eine Log-Datei, in die die Standardausgabe des laufenden Dienstes geschrieben wird.&lt;br /&gt;
; StandardError : Entsprechend zu &#039;&#039;StandardOutput&#039;&#039;. Mit &#039;&#039;inherit&#039;&#039; wird die Datei von &#039;&#039;StandardOutput&#039;&#039; geerbt.&lt;br /&gt;
; Restart=always : Der Dienst soll grundsätzlich neu gestartet werden, wenn der Prozess unerwartet beendet wird.&lt;br /&gt;
; PrivateTmp=true : &#039;&#039;/tmp&#039;&#039; und &#039;&#039;/var/tmp&#039;&#039; werden temporär im Namespace gemountet, so dass sie nicht mit anderen Prozessen geteilt werden.&lt;br /&gt;
; WantedBy : sollte im Usermodus von systemd meistens &#039;&#039;default.target&#039;&#039; sein. Andere Targets sind z.B. &#039;&#039;base.target&#039;&#039; oder &#039;&#039;timers.target&#039;&#039;. Für eine komplette Liste: &amp;lt;code&amp;gt;systemctl list-units --user --type=target&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== RAM- und CPU-Limits ====&lt;br /&gt;
&lt;br /&gt;
Auf Wunsch kann man die RAM- und CPU-Ressourcen für den Dienst begrenzen. Dazu trägt man weitere Eigenschaften im Abschnitt &#039;&#039;Service&#039;&#039; ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
...&lt;br /&gt;
MemoryAccounting=true&lt;br /&gt;
CPUAccounting=true&lt;br /&gt;
MemoryHigh=512M&lt;br /&gt;
MemoryMax=768M&lt;br /&gt;
CPUQuota=50%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; MemoryHigh : Weiches RAM-Limit, das ggf. überschritten werden kann, wenn es unvermeidlich ist.&lt;br /&gt;
; MemoryMax : Hartes, absolutes RAM-Limit.&lt;br /&gt;
; CPUQuota : Maximale Belegung eines CPU-Threads in Prozent. Werte über 100% sind sinnvoll, wenn mehr als ein CPU-Thread verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
==== Ausführliche Dokumentation der Direktiven ====&lt;br /&gt;
Eine ausführliche Dokumentation der Direktiven findet sich hier: &lt;br /&gt;
&lt;br /&gt;
https://www.freedesktop.org/software/systemd/man/latest/systemd.directives.html&lt;br /&gt;
&lt;br /&gt;
=== systemd Unit starten und stoppen ===&lt;br /&gt;
&lt;br /&gt;
Nachdem die systemd-Unit definiert ist, soll der Dienst gestartet werden. &lt;br /&gt;
Für die Verwaltung des Dienstes stehen die folgenden Kommandos zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
==== Reload ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user daemon-reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konfigurationsdateien im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; werden neu eingelesen. Dieses Kommando ist nach jeder Änderung einer  &#039;&#039;.service&#039;&#039;-Datei nötig.&lt;br /&gt;
&lt;br /&gt;
==== Start und Stopp ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user start gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user stop gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos zum Starten und Beenden des Dienstes.&lt;br /&gt;
&lt;br /&gt;
==== Enable und Disable ====&lt;br /&gt;
&lt;br /&gt;
Wenn ein Dienst nach einem Reboot des Servers automatisch gestartet werden soll, muss er aktiviert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user enable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn er nicht automatisch nach einem Reboot starten soll, muss der Dienst entsprechend deaktiviert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user disable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos, die den Dienst für einen Reboot des Servers aktivieren bzw. deaktivieren.&lt;br /&gt;
&lt;br /&gt;
==== Status ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zeigen den Status aller Dienste des Users bzw. eines bestimmten Dienstes an.&lt;br /&gt;
&lt;br /&gt;
== Zeitgesteuerte Ausführung mit systemd ==&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von systemd können wiederkehrende Aufgaben zeitgesteuert automatisiert werden.&lt;br /&gt;
Cronjobs, die früher für solche Zwecke benutzt wurden, lassen sich also mit systemd Units ersetzen.&lt;br /&gt;
Neben dem »service-file« wird dazu eine weitere Unit, nämlich ein »timer-file«, mit der Endung ».timer« angelegt und aktiviert. &lt;br /&gt;
&lt;br /&gt;
=== Einrichten des »service-files« ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ cat $HOME/.config/systemd/user/my-cleanup.service &lt;br /&gt;
&lt;br /&gt;
    [Unit] &lt;br /&gt;
    Description=My Cleanup Service &lt;br /&gt;
&lt;br /&gt;
    [Service] &lt;br /&gt;
    Type=oneshot &lt;br /&gt;
    ExecStart=%h/bin/cleanup-script &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Testen ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ systemctl --user start my-cleanup.service &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Einrichten des »timer-files« ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ cat $HOME/.config/systemd/user/my-cleanup.timer &lt;br /&gt;
&lt;br /&gt;
    [Unit] &lt;br /&gt;
    Description=Daily My Cleanup Timer &lt;br /&gt;
&lt;br /&gt;
    [Timer] &lt;br /&gt;
    OnCalendar=daily&lt;br /&gt;
    RandomizedDelaySec=3600&lt;br /&gt;
&lt;br /&gt;
    [Install] &lt;br /&gt;
    WantedBy=timers.target &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der RandomizedDelay bewirkt, dass der Prozess zufällig im Zeitraum einer Stunde gestartet wird.&lt;br /&gt;
Wenn mehrere Timer-Aufgaben täglich (daily) auf einem System gestartet werden, verhindert diese Einstellung, dass alle Prozesse exakt zur gleichen Zeit starten und das System eventuell überlasten.&lt;br /&gt;
&lt;br /&gt;
Die zufällige Verzögerung sollte in einem sinnvollen Verhältnis zur Frequenz der Zeitsteuerung erfolgen.&lt;br /&gt;
Bei täglich ausgeführten Aufgaben mag eine Stunde (3600 Sekunden) sinnvoll sein.&lt;br /&gt;
Bei Aufgaben, die stündlich ausgeführt werden, wählt man eine kürzere Verzögerung, zum Beispiel fünf Minuten. &lt;br /&gt;
&lt;br /&gt;
Eine ausführliche Dokumentation der Direktiven findet sich hier: &lt;br /&gt;
&lt;br /&gt;
https://www.freedesktop.org/software/systemd/man/latest/systemd.timer.html&lt;br /&gt;
&lt;br /&gt;
=== Aktivieren der zeitgesteuerten Ausführung ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ systemctl --user enable my-cleanup.timer &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingent eines Webspace ==&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
Das RAM Kontingent wird in Schritten von jeweils 128 Ḿegabyte gebucht. Änderungen des RAM Kontingents für einen Webspace nimmt der Service unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
= weiterführende Links =&lt;br /&gt;
&lt;br /&gt;
* https://www.freedesktop.org/software/systemd/man/latest/systemd.directives.html&lt;br /&gt;
* https://www.freedesktop.org/software/systemd/man/latest/systemd.timer.html&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:systemd]]&lt;br /&gt;
[[Kategorie:Eigene Daemons]]&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7089</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7089"/>
		<updated>2024-11-25T13:06:13Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: /* Einrichten des »timer-files« */ Formulierung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Über systemd ==&lt;br /&gt;
&#039;&#039;systemd&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess hat im laufenden System die Prozessnummer &amp;quot;1&amp;quot;. Er verwaltet alle anderen Prozesse als Kind-Prozesse.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann systemd nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Operations Platform kann jeder Account mit einer gültigen Login-Shell Dienste unter der Kontrolle von systemd starten. &lt;br /&gt;
&lt;br /&gt;
Im Hostsharing Managed Webspace ist es zwingend, systemd als Prozessmonitor für eigene Serverdienste zu nutzen; auf einem Hostsharing Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit systemd ==&lt;br /&gt;
&lt;br /&gt;
Um Serverdienste mit systemd zu verwalten, müssen folgende Voraussetzungen erfüllt werden:&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;HSAdmin&#039;&#039; wird ein Service-User zur Rechtetrennung dieses Dienstes von anderen Anwendungen angelegt. In diesem Artikel soll der Beispiel-User &#039;&#039;xyz00-service&#039;&#039; im Webspace &#039;&#039;xyz00&#039;&#039; sein. &lt;br /&gt;
&lt;br /&gt;
Dieser User bekommt bei der Einrichtung eine gültige Shell zugewiesen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit dem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. &lt;br /&gt;
&lt;br /&gt;
Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
=== systemd Units ===&lt;br /&gt;
&lt;br /&gt;
Die systemd-Units für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Für einen neuen User legt man also zuerst dieses Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Verzeichnis wird für jeden Service eine Datei mit der Endung &#039;&#039;.service&#039;&#039; angelegt. In diesem Beispiel ist dies eine GotoSocial-Instanz. GotoSocial ist ein einfaches Binärprogramm, das in der Programmiersprache &#039;&#039;Go&#039;&#039; programmiert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GotoSocial Service&lt;br /&gt;
#After=my-redis.service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=%h/gotosocial&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/gotosocial/gotosocial --config-path %h/gotosocial/config.yaml server start&lt;br /&gt;
StandardOutput=append:%h/var/gotosocial.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Folgende Eigenschaften sind einstellbar:&lt;br /&gt;
&lt;br /&gt;
; After: Hier kann eingestellt werden, welcher Dienst bereits laufen muss, bevor dieser Dienst gestartet wird. Wenn GotoSocial eine Redis-Instanz benötigt, könnte das entsprechend eingestellt werden.&lt;br /&gt;
; Type=simple : &#039;&#039;simple&#039;&#039; ist die Voreinstellung und kann weggelassen werden. Evtl. braucht man auch &#039;&#039;forking&#039;&#039;, wenn ein Dienst als Daemon im Hintergrund startet. Wenn man die Wahl hat, sollte man den Dienst immer im Vordergrund starten und nicht forken.&lt;br /&gt;
; WorkingDirectory : ist das Verzeichnis, in dem der Dienst gestartet wird. %h ist in dieser Datei eine Abkürzung für das Home-Verzeichnis des Users.&lt;br /&gt;
; Environment : Hier wird die Variable &#039;&#039;PATH&#039;&#039; definiert. Man kann mehrere Einträge des Namens &#039;&#039;Environment&#039;&#039; eintragen und bei Bedarf eine beliebige Anzahl von Environment-Variablen definieren.&lt;br /&gt;
; ExecStart : Das Programm, das als Dienst ausgeführt wird. Man kann eine komplette Kommandozeile angeben.&lt;br /&gt;
; StandardOutput : Eine Log-Datei, in die die Standardausgabe des laufenden Dienstes geschrieben wird.&lt;br /&gt;
; StandardError : Entsprechend zu &#039;&#039;StandardOutput&#039;&#039;. Mit &#039;&#039;inherit&#039;&#039; wird die Datei von &#039;&#039;StandardOutput&#039;&#039; geerbt.&lt;br /&gt;
; Restart=always : Der Dienst soll grundsätzlich neu gestartet werden, wenn der Prozess unerwartet beendet wird.&lt;br /&gt;
; PrivateTmp=true : &#039;&#039;/tmp&#039;&#039; und &#039;&#039;/var/tmp&#039;&#039; werden temporär im Namespace gemountet, so dass sie nicht mit anderen Prozessen geteilt werden.&lt;br /&gt;
; WantedBy : sollte im Usermodus von systemd meistens &#039;&#039;default.target&#039;&#039; sein. Andere Targets sind z.B. &#039;&#039;base.target&#039;&#039; oder &#039;&#039;timers.target&#039;&#039;. Für eine komplette Liste: &amp;lt;code&amp;gt;systemctl list-units --user --type=target&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== RAM- und CPU-Limits ====&lt;br /&gt;
&lt;br /&gt;
Auf Wunsch kann man die RAM- und CPU-Ressourcen für den Dienst begrenzen. Dazu trägt man weitere Eigenschaften im Abschnitt &#039;&#039;Service&#039;&#039; ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
...&lt;br /&gt;
MemoryAccounting=true&lt;br /&gt;
CPUAccounting=true&lt;br /&gt;
MemoryHigh=512M&lt;br /&gt;
MemoryMax=768M&lt;br /&gt;
CPUQuota=50%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; MemoryHigh : Weiches RAM-Limit, das ggf. überschritten werden kann, wenn es unvermeidlich ist.&lt;br /&gt;
; MemoryMax : Hartes, absolutes RAM-Limit.&lt;br /&gt;
; CPUQuota : Maximale Belegung eines CPU-Threads in Prozent. Werte über 100% sind sinnvoll, wenn mehr als ein CPU-Thread verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
==== Ausführliche Dokumentation der Direktiven ====&lt;br /&gt;
Eine ausführliche Dokumentation der Direktiven findet sich hier: &lt;br /&gt;
&lt;br /&gt;
https://www.freedesktop.org/software/systemd/man/latest/systemd.directives.html&lt;br /&gt;
&lt;br /&gt;
=== systemd Unit starten und stoppen ===&lt;br /&gt;
&lt;br /&gt;
Nachdem die systemd-Unit definiert ist, soll der Dienst gestartet werden. &lt;br /&gt;
Für die Verwaltung des Dienstes stehen die folgenden Kommandos zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
==== Reload ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user daemon-reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konfigurationsdateien im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; werden neu eingelesen. Dieses Kommando ist nach jeder Änderung einer  &#039;&#039;.service&#039;&#039;-Datei nötig.&lt;br /&gt;
&lt;br /&gt;
==== Start und Stopp ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user start gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user stop gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos zum Starten und Beenden des Dienstes.&lt;br /&gt;
&lt;br /&gt;
==== Enable und Disable ====&lt;br /&gt;
&lt;br /&gt;
Wenn ein Dienst nach einem Reboot des Servers automatisch gestartet werden soll, muss er aktiviert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user enable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn er nicht automatisch nach einem Reboot starten soll, muss der Dienst entsprechend deaktiviert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user disable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos, die den Dienst für einen Reboot des Servers aktivieren bzw. deaktivieren.&lt;br /&gt;
&lt;br /&gt;
==== Status ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zeigen den Status aller Dienste des Users bzw. eines bestimmten Dienstes an.&lt;br /&gt;
&lt;br /&gt;
== Zeitgesteuerte Ausführung mit systemd ==&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von systemd können wiederkehrende Aufgaben zeitgesteuert automatisiert werden.&lt;br /&gt;
Cronjobs, die früher für solche Zwecke benutzt wurden, lassen sich also mit systemd Units ersetzen.&lt;br /&gt;
Neben dem »service-file« wird dazu eine weitere Unit, nämlich ein »timer-file«, mit der Endung ».timer« angelegt und aktiviert. &lt;br /&gt;
&lt;br /&gt;
=== Einrichten des »service-files« ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ cat $HOME/.config/systemd/user/my-cleanup.service &lt;br /&gt;
&lt;br /&gt;
    [Unit] &lt;br /&gt;
    Description=My Cleanup Service &lt;br /&gt;
&lt;br /&gt;
    [Service] &lt;br /&gt;
    Type=oneshot &lt;br /&gt;
    ExecStart=%h/bin/cleanup-script &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Testen ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ systemctl --user start my-cleanup.service &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Einrichten des »timer-files« ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ cat $HOME/.config/systemd/user/my-cleanup.timer &lt;br /&gt;
&lt;br /&gt;
    [Unit] &lt;br /&gt;
    Description=Daily My Cleanup Timer &lt;br /&gt;
&lt;br /&gt;
    [Timer] &lt;br /&gt;
    OnCalendar=daily&lt;br /&gt;
    RandomizedDelaySec=3600&lt;br /&gt;
&lt;br /&gt;
    [Install] &lt;br /&gt;
    WantedBy=timers.target &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der RandomizedDelay bewirkt, dass der Prozess zufällig im Zeitraum einer Stunde gestartet wird.&lt;br /&gt;
Wenn mehrere Timer-Aufgaben täglich (daily) auf einem System gestartet werden, verhindert diese Einstellung, dass alle Prozesse exakt zur gleichen Zeit starten und das System eventuell überlasten.&lt;br /&gt;
&lt;br /&gt;
Eine ausführliche Dokumentation der Direktiven findet sich hier: &lt;br /&gt;
&lt;br /&gt;
https://www.freedesktop.org/software/systemd/man/latest/systemd.timer.html&lt;br /&gt;
&lt;br /&gt;
=== Aktivieren der zeitgesteuerten Ausführung ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ systemctl --user enable my-cleanup.timer &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingent eines Webspace ==&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
Das RAM Kontingent wird in Schritten von jeweils 128 Ḿegabyte gebucht. Änderungen des RAM Kontingents für einen Webspace nimmt der Service unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
= weiterführende Links =&lt;br /&gt;
&lt;br /&gt;
* https://www.freedesktop.org/software/systemd/man/latest/systemd.directives.html&lt;br /&gt;
* https://www.freedesktop.org/software/systemd/man/latest/systemd.timer.html&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:systemd]]&lt;br /&gt;
[[Kategorie:Eigene Daemons]]&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7088</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7088"/>
		<updated>2024-11-25T13:03:15Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: /* Zeitgesteuerte Ausführung mit systemd */ Stil&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Über systemd ==&lt;br /&gt;
&#039;&#039;systemd&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess hat im laufenden System die Prozessnummer &amp;quot;1&amp;quot;. Er verwaltet alle anderen Prozesse als Kind-Prozesse.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann systemd nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Operations Platform kann jeder Account mit einer gültigen Login-Shell Dienste unter der Kontrolle von systemd starten. &lt;br /&gt;
&lt;br /&gt;
Im Hostsharing Managed Webspace ist es zwingend, systemd als Prozessmonitor für eigene Serverdienste zu nutzen; auf einem Hostsharing Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit systemd ==&lt;br /&gt;
&lt;br /&gt;
Um Serverdienste mit systemd zu verwalten, müssen folgende Voraussetzungen erfüllt werden:&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;HSAdmin&#039;&#039; wird ein Service-User zur Rechtetrennung dieses Dienstes von anderen Anwendungen angelegt. In diesem Artikel soll der Beispiel-User &#039;&#039;xyz00-service&#039;&#039; im Webspace &#039;&#039;xyz00&#039;&#039; sein. &lt;br /&gt;
&lt;br /&gt;
Dieser User bekommt bei der Einrichtung eine gültige Shell zugewiesen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit dem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. &lt;br /&gt;
&lt;br /&gt;
Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
=== systemd Units ===&lt;br /&gt;
&lt;br /&gt;
Die systemd-Units für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Für einen neuen User legt man also zuerst dieses Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Verzeichnis wird für jeden Service eine Datei mit der Endung &#039;&#039;.service&#039;&#039; angelegt. In diesem Beispiel ist dies eine GotoSocial-Instanz. GotoSocial ist ein einfaches Binärprogramm, das in der Programmiersprache &#039;&#039;Go&#039;&#039; programmiert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GotoSocial Service&lt;br /&gt;
#After=my-redis.service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=%h/gotosocial&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/gotosocial/gotosocial --config-path %h/gotosocial/config.yaml server start&lt;br /&gt;
StandardOutput=append:%h/var/gotosocial.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Folgende Eigenschaften sind einstellbar:&lt;br /&gt;
&lt;br /&gt;
; After: Hier kann eingestellt werden, welcher Dienst bereits laufen muss, bevor dieser Dienst gestartet wird. Wenn GotoSocial eine Redis-Instanz benötigt, könnte das entsprechend eingestellt werden.&lt;br /&gt;
; Type=simple : &#039;&#039;simple&#039;&#039; ist die Voreinstellung und kann weggelassen werden. Evtl. braucht man auch &#039;&#039;forking&#039;&#039;, wenn ein Dienst als Daemon im Hintergrund startet. Wenn man die Wahl hat, sollte man den Dienst immer im Vordergrund starten und nicht forken.&lt;br /&gt;
; WorkingDirectory : ist das Verzeichnis, in dem der Dienst gestartet wird. %h ist in dieser Datei eine Abkürzung für das Home-Verzeichnis des Users.&lt;br /&gt;
; Environment : Hier wird die Variable &#039;&#039;PATH&#039;&#039; definiert. Man kann mehrere Einträge des Namens &#039;&#039;Environment&#039;&#039; eintragen und bei Bedarf eine beliebige Anzahl von Environment-Variablen definieren.&lt;br /&gt;
; ExecStart : Das Programm, das als Dienst ausgeführt wird. Man kann eine komplette Kommandozeile angeben.&lt;br /&gt;
; StandardOutput : Eine Log-Datei, in die die Standardausgabe des laufenden Dienstes geschrieben wird.&lt;br /&gt;
; StandardError : Entsprechend zu &#039;&#039;StandardOutput&#039;&#039;. Mit &#039;&#039;inherit&#039;&#039; wird die Datei von &#039;&#039;StandardOutput&#039;&#039; geerbt.&lt;br /&gt;
; Restart=always : Der Dienst soll grundsätzlich neu gestartet werden, wenn der Prozess unerwartet beendet wird.&lt;br /&gt;
; PrivateTmp=true : &#039;&#039;/tmp&#039;&#039; und &#039;&#039;/var/tmp&#039;&#039; werden temporär im Namespace gemountet, so dass sie nicht mit anderen Prozessen geteilt werden.&lt;br /&gt;
; WantedBy : sollte im Usermodus von systemd meistens &#039;&#039;default.target&#039;&#039; sein. Andere Targets sind z.B. &#039;&#039;base.target&#039;&#039; oder &#039;&#039;timers.target&#039;&#039;. Für eine komplette Liste: &amp;lt;code&amp;gt;systemctl list-units --user --type=target&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== RAM- und CPU-Limits ====&lt;br /&gt;
&lt;br /&gt;
Auf Wunsch kann man die RAM- und CPU-Ressourcen für den Dienst begrenzen. Dazu trägt man weitere Eigenschaften im Abschnitt &#039;&#039;Service&#039;&#039; ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
...&lt;br /&gt;
MemoryAccounting=true&lt;br /&gt;
CPUAccounting=true&lt;br /&gt;
MemoryHigh=512M&lt;br /&gt;
MemoryMax=768M&lt;br /&gt;
CPUQuota=50%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; MemoryHigh : Weiches RAM-Limit, das ggf. überschritten werden kann, wenn es unvermeidlich ist.&lt;br /&gt;
; MemoryMax : Hartes, absolutes RAM-Limit.&lt;br /&gt;
; CPUQuota : Maximale Belegung eines CPU-Threads in Prozent. Werte über 100% sind sinnvoll, wenn mehr als ein CPU-Thread verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
==== Ausführliche Dokumentation der Direktiven ====&lt;br /&gt;
Eine ausführliche Dokumentation der Direktiven findet sich hier: &lt;br /&gt;
&lt;br /&gt;
https://www.freedesktop.org/software/systemd/man/latest/systemd.directives.html&lt;br /&gt;
&lt;br /&gt;
=== systemd Unit starten und stoppen ===&lt;br /&gt;
&lt;br /&gt;
Nachdem die systemd-Unit definiert ist, soll der Dienst gestartet werden. &lt;br /&gt;
Für die Verwaltung des Dienstes stehen die folgenden Kommandos zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
==== Reload ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user daemon-reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konfigurationsdateien im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; werden neu eingelesen. Dieses Kommando ist nach jeder Änderung einer  &#039;&#039;.service&#039;&#039;-Datei nötig.&lt;br /&gt;
&lt;br /&gt;
==== Start und Stopp ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user start gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user stop gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos zum Starten und Beenden des Dienstes.&lt;br /&gt;
&lt;br /&gt;
==== Enable und Disable ====&lt;br /&gt;
&lt;br /&gt;
Wenn ein Dienst nach einem Reboot des Servers automatisch gestartet werden soll, muss er aktiviert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user enable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn er nicht automatisch nach einem Reboot starten soll, muss der Dienst entsprechend deaktiviert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user disable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos, die den Dienst für einen Reboot des Servers aktivieren bzw. deaktivieren.&lt;br /&gt;
&lt;br /&gt;
==== Status ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zeigen den Status aller Dienste des Users bzw. eines bestimmten Dienstes an.&lt;br /&gt;
&lt;br /&gt;
== Zeitgesteuerte Ausführung mit systemd ==&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von systemd können wiederkehrende Aufgaben zeitgesteuert automatisiert werden.&lt;br /&gt;
Cronjobs, die früher für solche Zwecke benutzt wurden, lassen sich also mit systemd Units ersetzen.&lt;br /&gt;
Neben dem »service-file« wird dazu eine weitere Unit, nämlich ein »timer-file«, mit der Endung ».timer« angelegt und aktiviert. &lt;br /&gt;
&lt;br /&gt;
=== Einrichten des »service-files« ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ cat $HOME/.config/systemd/user/my-cleanup.service &lt;br /&gt;
&lt;br /&gt;
    [Unit] &lt;br /&gt;
    Description=My Cleanup Service &lt;br /&gt;
&lt;br /&gt;
    [Service] &lt;br /&gt;
    Type=oneshot &lt;br /&gt;
    ExecStart=%h/bin/cleanup-script &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Testen ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ systemctl --user start my-cleanup.service &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Einrichten des »timer-files« ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ cat $HOME/.config/systemd/user/my-cleanup.timer &lt;br /&gt;
&lt;br /&gt;
    [Unit] &lt;br /&gt;
    Description=Daily My Cleanup Timer &lt;br /&gt;
&lt;br /&gt;
    [Timer] &lt;br /&gt;
    OnCalendar=daily&lt;br /&gt;
    RandomizedDelaySec=3600&lt;br /&gt;
&lt;br /&gt;
    [Install] &lt;br /&gt;
    WantedBy=timers.target &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der RandomizedDelay stellt sich, dass nicht alle Prozesse auf dem System zur gleichen Zeit gestartet werden.&lt;br /&gt;
Eine ausführliche Dokumentation der Direktiven findet sich hier: &lt;br /&gt;
&lt;br /&gt;
https://www.freedesktop.org/software/systemd/man/latest/systemd.timer.html&lt;br /&gt;
&lt;br /&gt;
=== Aktivieren der zeitgesteuerten Ausführung ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ systemctl --user enable my-cleanup.timer &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingent eines Webspace ==&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
Das RAM Kontingent wird in Schritten von jeweils 128 Ḿegabyte gebucht. Änderungen des RAM Kontingents für einen Webspace nimmt der Service unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
= weiterführende Links =&lt;br /&gt;
&lt;br /&gt;
* https://www.freedesktop.org/software/systemd/man/latest/systemd.directives.html&lt;br /&gt;
* https://www.freedesktop.org/software/systemd/man/latest/systemd.timer.html&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:systemd]]&lt;br /&gt;
[[Kategorie:Eigene Daemons]]&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7087</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7087"/>
		<updated>2024-11-25T12:37:34Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: /* Zeitgesteuerte Ausführung mit systemd */ Stil&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Über systemd ==&lt;br /&gt;
&#039;&#039;systemd&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess hat im laufenden System die Prozessnummer &amp;quot;1&amp;quot;. Er verwaltet alle anderen Prozesse als Kind-Prozesse.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann systemd nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Operations Platform kann jeder Account mit einer gültigen Login-Shell Dienste unter der Kontrolle von systemd starten. &lt;br /&gt;
&lt;br /&gt;
Im Hostsharing Managed Webspace ist es zwingend, systemd als Prozessmonitor für eigene Serverdienste zu nutzen; auf einem Hostsharing Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit systemd ==&lt;br /&gt;
&lt;br /&gt;
Um Serverdienste mit systemd zu verwalten, müssen folgende Voraussetzungen erfüllt werden:&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;HSAdmin&#039;&#039; wird ein Service-User zur Rechtetrennung dieses Dienstes von anderen Anwendungen angelegt. In diesem Artikel soll der Beispiel-User &#039;&#039;xyz00-service&#039;&#039; im Webspace &#039;&#039;xyz00&#039;&#039; sein. &lt;br /&gt;
&lt;br /&gt;
Dieser User bekommt bei der Einrichtung eine gültige Shell zugewiesen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit dem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. &lt;br /&gt;
&lt;br /&gt;
Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
=== systemd Units ===&lt;br /&gt;
&lt;br /&gt;
Die systemd-Units für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Für einen neuen User legt man also zuerst dieses Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Verzeichnis wird für jeden Service eine Datei mit der Endung &#039;&#039;.service&#039;&#039; angelegt. In diesem Beispiel ist dies eine GotoSocial-Instanz. GotoSocial ist ein einfaches Binärprogramm, das in der Programmiersprache &#039;&#039;Go&#039;&#039; programmiert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GotoSocial Service&lt;br /&gt;
#After=my-redis.service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=%h/gotosocial&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/gotosocial/gotosocial --config-path %h/gotosocial/config.yaml server start&lt;br /&gt;
StandardOutput=append:%h/var/gotosocial.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Folgende Eigenschaften sind einstellbar:&lt;br /&gt;
&lt;br /&gt;
; After: Hier kann eingestellt werden, welcher Dienst bereits laufen muss, bevor dieser Dienst gestartet wird. Wenn GotoSocial eine Redis-Instanz benötigt, könnte das entsprechend eingestellt werden.&lt;br /&gt;
; Type=simple : &#039;&#039;simple&#039;&#039; ist die Voreinstellung und kann weggelassen werden. Evtl. braucht man auch &#039;&#039;forking&#039;&#039;, wenn ein Dienst als Daemon im Hintergrund startet. Wenn man die Wahl hat, sollte man den Dienst immer im Vordergrund starten und nicht forken.&lt;br /&gt;
; WorkingDirectory : ist das Verzeichnis, in dem der Dienst gestartet wird. %h ist in dieser Datei eine Abkürzung für das Home-Verzeichnis des Users.&lt;br /&gt;
; Environment : Hier wird die Variable &#039;&#039;PATH&#039;&#039; definiert. Man kann mehrere Einträge des Namens &#039;&#039;Environment&#039;&#039; eintragen und bei Bedarf eine beliebige Anzahl von Environment-Variablen definieren.&lt;br /&gt;
; ExecStart : Das Programm, das als Dienst ausgeführt wird. Man kann eine komplette Kommandozeile angeben.&lt;br /&gt;
; StandardOutput : Eine Log-Datei, in die die Standardausgabe des laufenden Dienstes geschrieben wird.&lt;br /&gt;
; StandardError : Entsprechend zu &#039;&#039;StandardOutput&#039;&#039;. Mit &#039;&#039;inherit&#039;&#039; wird die Datei von &#039;&#039;StandardOutput&#039;&#039; geerbt.&lt;br /&gt;
; Restart=always : Der Dienst soll grundsätzlich neu gestartet werden, wenn der Prozess unerwartet beendet wird.&lt;br /&gt;
; PrivateTmp=true : &#039;&#039;/tmp&#039;&#039; und &#039;&#039;/var/tmp&#039;&#039; werden temporär im Namespace gemountet, so dass sie nicht mit anderen Prozessen geteilt werden.&lt;br /&gt;
; WantedBy : sollte im Usermodus von systemd meistens &#039;&#039;default.target&#039;&#039; sein. Andere Targets sind z.B. &#039;&#039;base.target&#039;&#039; oder &#039;&#039;timers.target&#039;&#039;. Für eine komplette Liste: &amp;lt;code&amp;gt;systemctl list-units --user --type=target&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== RAM- und CPU-Limits ====&lt;br /&gt;
&lt;br /&gt;
Auf Wunsch kann man die RAM- und CPU-Ressourcen für den Dienst begrenzen. Dazu trägt man weitere Eigenschaften im Abschnitt &#039;&#039;Service&#039;&#039; ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
...&lt;br /&gt;
MemoryAccounting=true&lt;br /&gt;
CPUAccounting=true&lt;br /&gt;
MemoryHigh=512M&lt;br /&gt;
MemoryMax=768M&lt;br /&gt;
CPUQuota=50%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; MemoryHigh : Weiches RAM-Limit, das ggf. überschritten werden kann, wenn es unvermeidlich ist.&lt;br /&gt;
; MemoryMax : Hartes, absolutes RAM-Limit.&lt;br /&gt;
; CPUQuota : Maximale Belegung eines CPU-Threads in Prozent. Werte über 100% sind sinnvoll, wenn mehr als ein CPU-Thread verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
==== Ausführliche Dokumentation der Direktiven ====&lt;br /&gt;
Eine ausführliche Dokumentation der Direktiven findet sich hier: &lt;br /&gt;
&lt;br /&gt;
https://www.freedesktop.org/software/systemd/man/latest/systemd.directives.html&lt;br /&gt;
&lt;br /&gt;
=== systemd Unit starten und stoppen ===&lt;br /&gt;
&lt;br /&gt;
Nachdem die systemd-Unit definiert ist, soll der Dienst gestartet werden. &lt;br /&gt;
Für die Verwaltung des Dienstes stehen die folgenden Kommandos zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
==== Reload ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user daemon-reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konfigurationsdateien im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; werden neu eingelesen. Dieses Kommando ist nach jeder Änderung einer  &#039;&#039;.service&#039;&#039;-Datei nötig.&lt;br /&gt;
&lt;br /&gt;
==== Start und Stopp ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user start gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user stop gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos zum Starten und Beenden des Dienstes.&lt;br /&gt;
&lt;br /&gt;
==== Enable und Disable ====&lt;br /&gt;
&lt;br /&gt;
Wenn ein Dienst nach einem Reboot des Servers automatisch gestartet werden soll, muss er aktiviert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user enable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn er nicht automatisch nach einem Reboot starten soll, muss der Dienst entsprechend deaktiviert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user disable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos, die den Dienst für einen Reboot des Servers aktivieren bzw. deaktivieren.&lt;br /&gt;
&lt;br /&gt;
==== Status ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zeigen den Status aller Dienste des Users bzw. eines bestimmten Dienstes an.&lt;br /&gt;
&lt;br /&gt;
== Zeitgesteuerte Ausführung mit systemd ==&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von systemd können wiederkehrende Aufgaben zeitgesteuert automatisiert werden.&lt;br /&gt;
Cronjobs, die früher für solche Zwecke benutzt wurden, lassen sich also mit systemd Units ersetzen.&lt;br /&gt;
Ergänzend zu einem »service-file« wird eine weitere Unit, nämlich ein »timer-file« mit der Endung ».timer« angelegt und aktiviert. &lt;br /&gt;
&lt;br /&gt;
=== Einrichten des »service-files« ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ cat $HOME/.config/systemd/user/my-cleanup.service &lt;br /&gt;
&lt;br /&gt;
    [Unit] &lt;br /&gt;
    Description=My Cleanup Service &lt;br /&gt;
&lt;br /&gt;
    [Service] &lt;br /&gt;
    Type=oneshot &lt;br /&gt;
    ExecStart=%h/bin/cleanup-script &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Testen ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ systemctl --user start my-cleanup.service &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Einrichten des »timer-files« ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ cat $HOME/.config/systemd/user/my-cleanup.timer &lt;br /&gt;
&lt;br /&gt;
    [Unit] &lt;br /&gt;
    Description=Daily My Cleanup Timer &lt;br /&gt;
&lt;br /&gt;
    [Timer] &lt;br /&gt;
    OnCalendar=daily&lt;br /&gt;
    RandomizedDelaySec=3600&lt;br /&gt;
&lt;br /&gt;
    [Install] &lt;br /&gt;
    WantedBy=timers.target &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der RandomizedDelay stellt sich, dass nicht alle Prozesse auf dem System zur gleichen Zeit gestartet werden.&lt;br /&gt;
Eine ausführliche Dokumentation der Direktiven findet sich hier: &lt;br /&gt;
&lt;br /&gt;
https://www.freedesktop.org/software/systemd/man/latest/systemd.timer.html&lt;br /&gt;
&lt;br /&gt;
=== Aktivieren der zeitgesteuerten Ausführung ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ systemctl --user enable my-cleanup.timer &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingent eines Webspace ==&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
Das RAM Kontingent wird in Schritten von jeweils 128 Ḿegabyte gebucht. Änderungen des RAM Kontingents für einen Webspace nimmt der Service unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
= weiterführende Links =&lt;br /&gt;
&lt;br /&gt;
* https://www.freedesktop.org/software/systemd/man/latest/systemd.directives.html&lt;br /&gt;
* https://www.freedesktop.org/software/systemd/man/latest/systemd.timer.html&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:systemd]]&lt;br /&gt;
[[Kategorie:Eigene Daemons]]&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7086</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7086"/>
		<updated>2024-11-25T12:26:30Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: /* Eigene Serverdienste mit systemd */ Stil&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Über systemd ==&lt;br /&gt;
&#039;&#039;systemd&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess hat im laufenden System die Prozessnummer &amp;quot;1&amp;quot;. Er verwaltet alle anderen Prozesse als Kind-Prozesse.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann systemd nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Operations Platform kann jeder Account mit einer gültigen Login-Shell Dienste unter der Kontrolle von systemd starten. &lt;br /&gt;
&lt;br /&gt;
Im Hostsharing Managed Webspace ist es zwingend, systemd als Prozessmonitor für eigene Serverdienste zu nutzen; auf einem Hostsharing Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit systemd ==&lt;br /&gt;
&lt;br /&gt;
Um Serverdienste mit systemd zu verwalten, müssen folgende Voraussetzungen erfüllt werden:&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;HSAdmin&#039;&#039; wird ein Service-User zur Rechtetrennung dieses Dienstes von anderen Anwendungen angelegt. In diesem Artikel soll der Beispiel-User &#039;&#039;xyz00-service&#039;&#039; im Webspace &#039;&#039;xyz00&#039;&#039; sein. &lt;br /&gt;
&lt;br /&gt;
Dieser User bekommt bei der Einrichtung eine gültige Shell zugewiesen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit dem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. &lt;br /&gt;
&lt;br /&gt;
Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
=== systemd Units ===&lt;br /&gt;
&lt;br /&gt;
Die systemd-Units für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Für einen neuen User legt man also zuerst dieses Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Verzeichnis wird für jeden Service eine Datei mit der Endung &#039;&#039;.service&#039;&#039; angelegt. In diesem Beispiel ist dies eine GotoSocial-Instanz. GotoSocial ist ein einfaches Binärprogramm, das in der Programmiersprache &#039;&#039;Go&#039;&#039; programmiert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GotoSocial Service&lt;br /&gt;
#After=my-redis.service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=%h/gotosocial&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/gotosocial/gotosocial --config-path %h/gotosocial/config.yaml server start&lt;br /&gt;
StandardOutput=append:%h/var/gotosocial.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Folgende Eigenschaften sind einstellbar:&lt;br /&gt;
&lt;br /&gt;
; After: Hier kann eingestellt werden, welcher Dienst bereits laufen muss, bevor dieser Dienst gestartet wird. Wenn GotoSocial eine Redis-Instanz benötigt, könnte das entsprechend eingestellt werden.&lt;br /&gt;
; Type=simple : &#039;&#039;simple&#039;&#039; ist die Voreinstellung und kann weggelassen werden. Evtl. braucht man auch &#039;&#039;forking&#039;&#039;, wenn ein Dienst als Daemon im Hintergrund startet. Wenn man die Wahl hat, sollte man den Dienst immer im Vordergrund starten und nicht forken.&lt;br /&gt;
; WorkingDirectory : ist das Verzeichnis, in dem der Dienst gestartet wird. %h ist in dieser Datei eine Abkürzung für das Home-Verzeichnis des Users.&lt;br /&gt;
; Environment : Hier wird die Variable &#039;&#039;PATH&#039;&#039; definiert. Man kann mehrere Einträge des Namens &#039;&#039;Environment&#039;&#039; eintragen und bei Bedarf eine beliebige Anzahl von Environment-Variablen definieren.&lt;br /&gt;
; ExecStart : Das Programm, das als Dienst ausgeführt wird. Man kann eine komplette Kommandozeile angeben.&lt;br /&gt;
; StandardOutput : Eine Log-Datei, in die die Standardausgabe des laufenden Dienstes geschrieben wird.&lt;br /&gt;
; StandardError : Entsprechend zu &#039;&#039;StandardOutput&#039;&#039;. Mit &#039;&#039;inherit&#039;&#039; wird die Datei von &#039;&#039;StandardOutput&#039;&#039; geerbt.&lt;br /&gt;
; Restart=always : Der Dienst soll grundsätzlich neu gestartet werden, wenn der Prozess unerwartet beendet wird.&lt;br /&gt;
; PrivateTmp=true : &#039;&#039;/tmp&#039;&#039; und &#039;&#039;/var/tmp&#039;&#039; werden temporär im Namespace gemountet, so dass sie nicht mit anderen Prozessen geteilt werden.&lt;br /&gt;
; WantedBy : sollte im Usermodus von systemd meistens &#039;&#039;default.target&#039;&#039; sein. Andere Targets sind z.B. &#039;&#039;base.target&#039;&#039; oder &#039;&#039;timers.target&#039;&#039;. Für eine komplette Liste: &amp;lt;code&amp;gt;systemctl list-units --user --type=target&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== RAM- und CPU-Limits ====&lt;br /&gt;
&lt;br /&gt;
Auf Wunsch kann man die RAM- und CPU-Ressourcen für den Dienst begrenzen. Dazu trägt man weitere Eigenschaften im Abschnitt &#039;&#039;Service&#039;&#039; ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
...&lt;br /&gt;
MemoryAccounting=true&lt;br /&gt;
CPUAccounting=true&lt;br /&gt;
MemoryHigh=512M&lt;br /&gt;
MemoryMax=768M&lt;br /&gt;
CPUQuota=50%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; MemoryHigh : Weiches RAM-Limit, das ggf. überschritten werden kann, wenn es unvermeidlich ist.&lt;br /&gt;
; MemoryMax : Hartes, absolutes RAM-Limit.&lt;br /&gt;
; CPUQuota : Maximale Belegung eines CPU-Threads in Prozent. Werte über 100% sind sinnvoll, wenn mehr als ein CPU-Thread verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
==== Ausführliche Dokumentation der Direktiven ====&lt;br /&gt;
Eine ausführliche Dokumentation der Direktiven findet sich hier: &lt;br /&gt;
&lt;br /&gt;
https://www.freedesktop.org/software/systemd/man/latest/systemd.directives.html&lt;br /&gt;
&lt;br /&gt;
=== systemd Unit starten und stoppen ===&lt;br /&gt;
&lt;br /&gt;
Nachdem die systemd-Unit definiert ist, soll der Dienst gestartet werden. &lt;br /&gt;
Für die Verwaltung des Dienstes stehen die folgenden Kommandos zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
==== Reload ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user daemon-reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konfigurationsdateien im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; werden neu eingelesen. Dieses Kommando ist nach jeder Änderung einer  &#039;&#039;.service&#039;&#039;-Datei nötig.&lt;br /&gt;
&lt;br /&gt;
==== Start und Stopp ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user start gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user stop gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos zum Starten und Beenden des Dienstes.&lt;br /&gt;
&lt;br /&gt;
==== Enable und Disable ====&lt;br /&gt;
&lt;br /&gt;
Wenn ein Dienst nach einem Reboot des Servers automatisch gestartet werden soll, muss er aktiviert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user enable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn er nicht automatisch nach einem Reboot starten soll, muss der Dienst entsprechend deaktiviert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user disable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos, die den Dienst für einen Reboot des Servers aktivieren bzw. deaktivieren.&lt;br /&gt;
&lt;br /&gt;
==== Status ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zeigen den Status aller Dienste des Users bzw. eines bestimmten Dienstes an.&lt;br /&gt;
&lt;br /&gt;
== Zeitgesteuerte Ausführung mit systemd ==&lt;br /&gt;
&lt;br /&gt;
Bisher wurden meistens cronjobs eingesetzt, um wiederkehrende Aufgaben zu erledigen.&lt;br /&gt;
&lt;br /&gt;
Auch Cronjobs können durch systemd ersetzt werden. Ergänzend zu einem »service-file« wird eine weitere Unit, nämlich ein »timer-file« mit der Endung ».timer« angelegt und aktiviert. &lt;br /&gt;
&lt;br /&gt;
=== Einrichten des »service-files« ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ cat $HOME/.config/systemd/user/my-cleanup.service &lt;br /&gt;
&lt;br /&gt;
    [Unit] &lt;br /&gt;
    Description=My Cleanup Service &lt;br /&gt;
&lt;br /&gt;
    [Service] &lt;br /&gt;
    Type=oneshot &lt;br /&gt;
    ExecStart=%h/bin/cleanup-script &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Testen ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ systemctl --user start my-cleanup.service &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Einrichten des »timer-files« ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ cat $HOME/.config/systemd/user/my-cleanup.timer &lt;br /&gt;
&lt;br /&gt;
    [Unit] &lt;br /&gt;
    Description=Daily My Cleanup Timer &lt;br /&gt;
&lt;br /&gt;
    [Timer] &lt;br /&gt;
    OnCalendar=daily&lt;br /&gt;
    RandomizedDelaySec=3600&lt;br /&gt;
&lt;br /&gt;
    [Install] &lt;br /&gt;
    WantedBy=timers.target &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der RandomizedDelay stellt sich, dass nicht alle Prozesse auf dem System zur gleichen Zeit gestartet werden.&lt;br /&gt;
Eine ausführliche Dokumentation der Direktiven findet sich hier: &lt;br /&gt;
&lt;br /&gt;
https://www.freedesktop.org/software/systemd/man/latest/systemd.timer.html&lt;br /&gt;
&lt;br /&gt;
=== Aktivieren der zeitgesteuerten Ausführung ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ systemctl --user enable my-cleanup.timer &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingent eines Webspace ==&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
Das RAM Kontingent wird in Schritten von jeweils 128 Ḿegabyte gebucht. Änderungen des RAM Kontingents für einen Webspace nimmt der Service unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
= weiterführende Links =&lt;br /&gt;
&lt;br /&gt;
* https://www.freedesktop.org/software/systemd/man/latest/systemd.directives.html&lt;br /&gt;
* https://www.freedesktop.org/software/systemd/man/latest/systemd.timer.html&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:systemd]]&lt;br /&gt;
[[Kategorie:Eigene Daemons]]&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7085</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7085"/>
		<updated>2024-11-25T12:13:36Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: /* Über systemd */ Stil&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Über systemd ==&lt;br /&gt;
&#039;&#039;systemd&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess hat im laufenden System die Prozessnummer &amp;quot;1&amp;quot;. Er verwaltet alle anderen Prozesse als Kind-Prozesse.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann systemd nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Operations Platform kann jeder Account mit einer gültigen Login-Shell Dienste unter der Kontrolle von systemd starten. &lt;br /&gt;
&lt;br /&gt;
Im Hostsharing Managed Webspace ist es zwingend, systemd als Prozessmonitor für eigene Serverdienste zu nutzen; auf einem Hostsharing Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit systemd ==&lt;br /&gt;
&lt;br /&gt;
In diesem Wiki finden sich viele Beispiele für systemd-Units zur Kontrolle eines Serverdienstes. An dieser Stelle folgen Erläuterungen für die wichtigsten Einstellungen.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung: In &#039;&#039;HSAdmin&#039;&#039; wird ein Service-User zur Rechtetrennung dieses Dienstes von anderen Anwendungen angelegt. In diesem Artikel soll der Beispiel-User &#039;&#039;xyz00-service&#039;&#039; im Webspace &#039;&#039;xyz00&#039;&#039; sein. Dieser User bekommt bei der Einrichtung eine gültige Shell zugewiesen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit einem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
=== systemd Unit ===&lt;br /&gt;
&lt;br /&gt;
Die systemd-Units für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Für einen neuen User legt man also zuerst dieses Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Verzeichnis wird für jeden Service eine Datei mit der Endung &#039;&#039;.service&#039;&#039; angelegt. Ich verwende hier eine Beispielkonfiguration für eine GotoSocial-Instanz. GotoSocial ist ein einfaches Binärprogramm, das in der Programmiersprache &#039;&#039;Go&#039;&#039; programmiert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GotoSocial Service&lt;br /&gt;
#After=my-redis.service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=%h/gotosocial&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/gotosocial/gotosocial --config-path %h/gotosocial/config.yaml server start&lt;br /&gt;
StandardOutput=append:%h/var/gotosocial.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die meisten Eigenschaften sind selbsterklärend. Folgende Eigenschaften sind einstellbar:&lt;br /&gt;
&lt;br /&gt;
; After: Hier kann eingestellt werden, welcher Dienst vorher starten muss, bevor dieser Dienst gestartet wird. Wenn GotoSocial eine Redis Instanz benötigt, könnte das entsprechend eingestellt werden.&lt;br /&gt;
; Type=simple : &#039;&#039;simple&#039;&#039; ist die Voreinstellung und kann weggelassen werden. Evtl. braucht man auch &#039;&#039;forking&#039;&#039;, wenn ein Dienst als Daemon im Hintergrund startet. Wenn man die Wahl hat, sollte man den Dienst immer im Vordergrund starten und nicht forken.&lt;br /&gt;
; WorkingDirectory : ist das Verzeichnis, in dem der Dienst gestartet wird. %h ist in dieser Datei eine Abkürzung für das Home-Verzeichnis des Users.&lt;br /&gt;
; Environment : Hier wird die Variable &#039;&#039;PATH&#039;&#039; definiert. Man kann mehrere Einträge des Namens &#039;&#039;Environment&#039;&#039; eintragen und bei Bedarf eine beliebige Anzahl von Environment-Variablen definieren.&lt;br /&gt;
; ExecStart : Das Programm, das als Dienst ausgeführt wird. Man kann eine komplette Kommandozeile angeben.&lt;br /&gt;
; StandardOutput : Eine Log-Datei in die die Standardausgabe des laufenden Dienstes geschrieben wird.&lt;br /&gt;
; StandardError : Entsprechend zu &#039;&#039;StandardOutput&#039;&#039;. Mit &#039;&#039;inherit&#039;&#039; wird der die Datei von &#039;&#039;StandardOutput&#039;&#039; geerbt.&lt;br /&gt;
; Restart=always : Der Dienst soll grundsätzlich neu gestartet werden, wenn der Prozess unerwartet beendet wird.&lt;br /&gt;
; PrivateTmp=true : &#039;&#039;/tmp&#039;&#039; und &#039;&#039;/var/tmp&#039;&#039; werden temporär im Namespace gemountet, so dass sie nicht mit anderen Prozessen geteilt werden.&lt;br /&gt;
; WantedBy : sollte im Usermodus von systemd meistens &#039;&#039;default.target&#039;&#039; sein. Andere Targets sind z.B. &#039;&#039;base.target&#039;&#039; oder &#039;&#039;timers.target&#039;&#039;. Für eine komplette Liste: &amp;lt;code&amp;gt;systemctl list-units --user --type=target&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== RAM- und CPU-Limits ====&lt;br /&gt;
&lt;br /&gt;
Auf Wunsch kann man die RAM- und CPU-Ressourcen für den Dienst begrenzen. Dazu trägt man weitere Eigenschaften im Abschnitt &#039;&#039;Service&#039;&#039; ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
...&lt;br /&gt;
MemoryAccounting=true&lt;br /&gt;
CPUAccounting=true&lt;br /&gt;
MemoryHigh=512M&lt;br /&gt;
MemoryMax=768M&lt;br /&gt;
CPUQuota=50%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; MemoryHigh : Weiches RAM-Limit, das ggf. überschritten werden kann, wenn es unvermeidlich ist.&lt;br /&gt;
; MemoryMax : Hartes, absolutes RAM-Limit.&lt;br /&gt;
; CPUQuota : Maximale Belegung eines CPU-Threads in Prozent. Werte über 100% sind sinnvoll, wenn mehr als ein CPU-Thread verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
==== Ausführliche Dokumentation der Direktiven ====&lt;br /&gt;
Eine ausführliche Dokumentation der Direktiven findet sich hier: &lt;br /&gt;
&lt;br /&gt;
https://www.freedesktop.org/software/systemd/man/latest/systemd.directives.html&lt;br /&gt;
&lt;br /&gt;
=== systemd Unit starten und stoppen ===&lt;br /&gt;
&lt;br /&gt;
Nachdem die systemd-Unit definiert ist, soll der Dienst gestartet werden. &lt;br /&gt;
Für die Verwaltung des Dienstes stehen die folgenden Kommandos zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
==== Reload ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user daemon-reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konfigurationsdateien im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; werden neu eingelesen. Dieses Kommando ist nach jeder Änderung einer  &#039;&#039;.service&#039;&#039;-Datei nötig.&lt;br /&gt;
&lt;br /&gt;
==== Start und Stopp ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user start gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user stop gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos zum Starten und Beenden des Dienstes.&lt;br /&gt;
&lt;br /&gt;
==== Enable und Disable ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user enable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user disable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos, die den Dienst für einen Reboot des Servers aktivieren bzw. deaktivieren.&lt;br /&gt;
&lt;br /&gt;
==== Status ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zeigen den Status aller Dienste des Users bzw. eines bestimmten Dienstes an.&lt;br /&gt;
&lt;br /&gt;
== Zeitgesteuerte Ausführung mit systemd ==&lt;br /&gt;
&lt;br /&gt;
Bisher wurden meistens cronjobs eingesetzt, um wiederkehrende Aufgaben zu erledigen.&lt;br /&gt;
&lt;br /&gt;
Auch Cronjobs können durch systemd ersetzt werden. Ergänzend zu einem »service-file« wird eine weitere Unit, nämlich ein »timer-file« mit der Endung ».timer« angelegt und aktiviert. &lt;br /&gt;
&lt;br /&gt;
=== Einrichten des »service-files« ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ cat $HOME/.config/systemd/user/my-cleanup.service &lt;br /&gt;
&lt;br /&gt;
    [Unit] &lt;br /&gt;
    Description=My Cleanup Service &lt;br /&gt;
&lt;br /&gt;
    [Service] &lt;br /&gt;
    Type=oneshot &lt;br /&gt;
    ExecStart=%h/bin/cleanup-script &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Testen ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ systemctl --user start my-cleanup.service &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Einrichten des »timer-files« ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ cat $HOME/.config/systemd/user/my-cleanup.timer &lt;br /&gt;
&lt;br /&gt;
    [Unit] &lt;br /&gt;
    Description=Daily My Cleanup Timer &lt;br /&gt;
&lt;br /&gt;
    [Timer] &lt;br /&gt;
    OnCalendar=daily&lt;br /&gt;
    RandomizedDelaySec=3600&lt;br /&gt;
&lt;br /&gt;
    [Install] &lt;br /&gt;
    WantedBy=timers.target &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der RandomizedDelay stellt sich, dass nicht alle Prozesse auf dem System zur gleichen Zeit gestartet werden.&lt;br /&gt;
Eine ausführliche Dokumentation der Direktiven findet sich hier: &lt;br /&gt;
&lt;br /&gt;
https://www.freedesktop.org/software/systemd/man/latest/systemd.timer.html&lt;br /&gt;
&lt;br /&gt;
=== Aktivieren der zeitgesteuerten Ausführung ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ systemctl --user enable my-cleanup.timer &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingent eines Webspace ==&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
Das RAM Kontingent wird in Schritten von jeweils 128 Ḿegabyte gebucht. Änderungen des RAM Kontingents für einen Webspace nimmt der Service unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
= weiterführende Links =&lt;br /&gt;
&lt;br /&gt;
* https://www.freedesktop.org/software/systemd/man/latest/systemd.directives.html&lt;br /&gt;
* https://www.freedesktop.org/software/systemd/man/latest/systemd.timer.html&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:systemd]]&lt;br /&gt;
[[Kategorie:Eigene Daemons]]&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Umstellung_von_Daemon-Diensten_auf_systemd&amp;diff=7084</id>
		<title>Umstellung von Daemon-Diensten auf systemd</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Umstellung_von_Daemon-Diensten_auf_systemd&amp;diff=7084"/>
		<updated>2024-11-25T11:56:43Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Anlass dieser Anleitung ==&lt;br /&gt;
&lt;br /&gt;
Ab November 2024 unterstützt die Managed Plattform ein RAM Kontigent pro Managed Webspace. Mitglieder buchen für ihre Webspaces jeweils ein RAM Kontingent in Schritten von jeweils 128 Megabyte. Das unterstützt uns besser bei der verursachergerechten Verteilung der Hardwarekosten, als es vorher mit einer Pauschale pro Serverdienst der Fall war. Änderungen des RAM Kontingents für einen Webspace nimmt der Service unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
Damit die RAM Kontingente funktionieren, müssen im Managed Webspace alle Anwendungen, die im Userspace laufen, auf systemd umgestellt werden. Das betrifft Anwendungen, die bisher über z.B. cronjob, supervisor oder monit gestartet wurden.&lt;br /&gt;
&lt;br /&gt;
Siehe auch unsere [[Systemd im Userspace]] Dokumentation.&lt;br /&gt;
&lt;br /&gt;
== Praktische Umstellung ==&lt;br /&gt;
&lt;br /&gt;
[Hier erklären, dass gerade viel RAM zur Verfügung.]&lt;br /&gt;
&lt;br /&gt;
=== cronjob ===&lt;br /&gt;
&lt;br /&gt;
TODO: auf Timer&lt;br /&gt;
&lt;br /&gt;
=== monit ===&lt;br /&gt;
&lt;br /&gt;
TODO: Beispiel&lt;br /&gt;
&lt;br /&gt;
=== supervisor ===&lt;br /&gt;
&lt;br /&gt;
TODO: Beispiel&lt;br /&gt;
&lt;br /&gt;
== Ermittlung und Buchung des benötigten RAM Kontingent ==&lt;br /&gt;
&lt;br /&gt;
TODO: siehe [[Systemd_im_Userspace#RAM_Kontingent_eines_Webspace]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:Systemd]]&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7083</id>
		<title>Prozessmanagement mit systemd im Userspace</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Prozessmanagement_mit_systemd_im_Userspace&amp;diff=7083"/>
		<updated>2024-11-25T11:51:25Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: /* Einrichten des »timer-files« */ Randomized Delay&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Über systemd ==&lt;br /&gt;
&#039;&#039;systemd&#039;&#039; ist seit einigen Jahren das Init-System aller gängigen Linux-Distributionen. Der &#039;&#039;init&#039;&#039;-Prozess ist im laufenden System der Prozess mit der Nummer &amp;quot;1&amp;quot;, der alle anderen Prozesse als Kind-Prozesse verwaltet.&lt;br /&gt;
&lt;br /&gt;
Auch ein normaler Account ohne besondere Privilegien kann systemd nutzen, um Prozesse im Userspace zu starten und zu kontrollieren. Auf der Hostsharing Managed Plattform hat jeder Account mit einer gültigen Login-Shell die Möglichkeit Dienste unter Kontrolle von systemd zu starten. In einem Webspace im Shared Hosting ist es zwingend systemd als Prozessmonitor für eigene Serverdienste zu nutzen; auf einem Managed Server ist es die empfohlene Vorgehensweise (&amp;quot;Best practice&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== Eigene Serverdienste mit systemd ==&lt;br /&gt;
&lt;br /&gt;
In diesem Wiki finden sich viele Beispiele für systemd-Units zur Kontrolle eines Serverdienstes. An dieser Stelle folgen Erläuterungen für die wichtigsten Einstellungen.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung: In &#039;&#039;HSAdmin&#039;&#039; wird ein Service-User zur Rechtetrennung dieses Dienstes von anderen Anwendungen angelegt. In diesem Artikel soll der Beispiel-User &#039;&#039;xyz00-service&#039;&#039; im Webspace &#039;&#039;xyz00&#039;&#039; sein. Dieser User bekommt bei der Einrichtung eine gültige Shell zugewiesen, so dass man sich per &#039;&#039;ssh&#039;&#039; oder vom Paketadmin mit einem Befehl &#039;&#039;sudo -i -u xyz00-service&#039;&#039; anmelden kann. Die Umgebungsvariable &#039;&#039;XDG_RUNTIME_DIR&#039;&#039; sollte im Environment des Users gesetzt sein, wenn man erfolgreich angemeldet ist. Das testet man mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $XDG_RUNTIME_DIR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe sollte sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
xyz00-service@h01:~$ echo $XDG_RUNTIME_DIR &lt;br /&gt;
/run/user/112345&lt;br /&gt;
xyz00-service@h01:~$ &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei wird statt &#039;&#039;112345&#039;&#039; eine andere Zahl erscheinen. Diese Zahl ist die numerische User-Id des Users &#039;&#039;xyz00-service&#039;&#039; im System.&lt;br /&gt;
&lt;br /&gt;
=== systemd Unit ===&lt;br /&gt;
&lt;br /&gt;
Die systemd-Units für einen User werden im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; verwaltet. Dieser Pfad ist fest vorgegeben. Für einen neuen User legt man also zuerst dieses Verzeichnis an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $HOME/.config/systemd/user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Verzeichnis wird für jeden Service eine Datei mit der Endung &#039;&#039;.service&#039;&#039; angelegt. Ich verwende hier eine Beispielkonfiguration für eine GotoSocial-Instanz. GotoSocial ist ein einfaches Binärprogramm, das in der Programmiersprache &#039;&#039;Go&#039;&#039; programmiert ist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=GotoSocial Service&lt;br /&gt;
#After=my-redis.service&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=%h/gotosocial&lt;br /&gt;
Environment=&amp;quot;PATH=/usr/local/bin:/usr/bin:/bin&amp;quot;&lt;br /&gt;
ExecStart=%h/gotosocial/gotosocial --config-path %h/gotosocial/config.yaml server start&lt;br /&gt;
StandardOutput=append:%h/var/gotosocial.log&lt;br /&gt;
StandardError=inherit&lt;br /&gt;
Restart=always&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die meisten Eigenschaften sind selbsterklärend. Folgende Eigenschaften sind einstellbar:&lt;br /&gt;
&lt;br /&gt;
; After: Hier kann eingestellt werden, welcher Dienst vorher starten muss, bevor dieser Dienst gestartet wird. Wenn GotoSocial eine Redis Instanz benötigt, könnte das entsprechend eingestellt werden.&lt;br /&gt;
; Type=simple : &#039;&#039;simple&#039;&#039; ist die Voreinstellung und kann weggelassen werden. Evtl. braucht man auch &#039;&#039;forking&#039;&#039;, wenn ein Dienst als Daemon im Hintergrund startet. Wenn man die Wahl hat, sollte man den Dienst immer im Vordergrund starten und nicht forken.&lt;br /&gt;
; WorkingDirectory : ist das Verzeichnis, in dem der Dienst gestartet wird. %h ist in dieser Datei eine Abkürzung für das Home-Verzeichnis des Users.&lt;br /&gt;
; Environment : Hier wird die Variable &#039;&#039;PATH&#039;&#039; definiert. Man kann mehrere Einträge des Namens &#039;&#039;Environment&#039;&#039; eintragen und bei Bedarf eine beliebige Anzahl von Environment-Variablen definieren.&lt;br /&gt;
; ExecStart : Das Programm, das als Dienst ausgeführt wird. Man kann eine komplette Kommandozeile angeben.&lt;br /&gt;
; StandardOutput : Eine Log-Datei in die die Standardausgabe des laufenden Dienstes geschrieben wird.&lt;br /&gt;
; StandardError : Entsprechend zu &#039;&#039;StandardOutput&#039;&#039;. Mit &#039;&#039;inherit&#039;&#039; wird der die Datei von &#039;&#039;StandardOutput&#039;&#039; geerbt.&lt;br /&gt;
; Restart=always : Der Dienst soll grundsätzlich neu gestartet werden, wenn der Prozess unerwartet beendet wird.&lt;br /&gt;
; PrivateTmp=true : &#039;&#039;/tmp&#039;&#039; und &#039;&#039;/var/tmp&#039;&#039; werden temporär im Namespace gemountet, so dass sie nicht mit anderen Prozessen geteilt werden.&lt;br /&gt;
; WantedBy : sollte im Usermodus von systemd meistens &#039;&#039;default.target&#039;&#039; sein. Andere Targets sind z.B. &#039;&#039;base.target&#039;&#039; oder &#039;&#039;timers.target&#039;&#039;. Für eine komplette Liste: &amp;lt;code&amp;gt;systemctl list-units --user --type=target&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== RAM- und CPU-Limits ====&lt;br /&gt;
&lt;br /&gt;
Auf Wunsch kann man die RAM- und CPU-Ressourcen für den Dienst begrenzen. Dazu trägt man weitere Eigenschaften im Abschnitt &#039;&#039;Service&#039;&#039; ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
...&lt;br /&gt;
MemoryAccounting=true&lt;br /&gt;
CPUAccounting=true&lt;br /&gt;
MemoryHigh=512M&lt;br /&gt;
MemoryMax=768M&lt;br /&gt;
CPUQuota=50%&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; MemoryHigh : Weiches RAM-Limit, das ggf. überschritten werden kann, wenn es unvermeidlich ist.&lt;br /&gt;
; MemoryMax : Hartes, absolutes RAM-Limit.&lt;br /&gt;
; CPUQuota : Maximale Belegung eines CPU-Threads in Prozent. Werte über 100% sind sinnvoll, wenn mehr als ein CPU-Thread verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
==== Ausführliche Dokumentation der Direktiven ====&lt;br /&gt;
Eine ausführliche Dokumentation der Direktiven findet sich hier: &lt;br /&gt;
&lt;br /&gt;
https://www.freedesktop.org/software/systemd/man/latest/systemd.directives.html&lt;br /&gt;
&lt;br /&gt;
=== systemd Unit starten und stoppen ===&lt;br /&gt;
&lt;br /&gt;
Nachdem die systemd-Unit definiert ist, soll der Dienst gestartet werden. &lt;br /&gt;
Für die Verwaltung des Dienstes stehen die folgenden Kommandos zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
==== Reload ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user daemon-reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Konfigurationsdateien im Verzeichnis &#039;&#039;$HOME/.config/systemd/user/&#039;&#039; werden neu eingelesen. Dieses Kommando ist nach jeder Änderung einer  &#039;&#039;.service&#039;&#039;-Datei nötig.&lt;br /&gt;
&lt;br /&gt;
==== Start und Stopp ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user start gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user stop gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos zum Starten und Beenden des Dienstes.&lt;br /&gt;
&lt;br /&gt;
==== Enable und Disable ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user enable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bzw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user disable gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sind die Kommandos, die den Dienst für einen Reboot des Servers aktivieren bzw. deaktivieren.&lt;br /&gt;
&lt;br /&gt;
==== Status ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl --user status gotosocial.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
zeigen den Status aller Dienste des Users bzw. eines bestimmten Dienstes an.&lt;br /&gt;
&lt;br /&gt;
== Zeitgesteuerte Ausführung mit systemd ==&lt;br /&gt;
&lt;br /&gt;
Bisher wurden meistens cronjobs eingesetzt, um wiederkehrende Aufgaben zu erledigen.&lt;br /&gt;
&lt;br /&gt;
Auch Cronjobs können durch systemd ersetzt werden. Ergänzend zu einem »service-file« wird eine weitere Unit, nämlich ein »timer-file« mit der Endung ».timer« angelegt und aktiviert. &lt;br /&gt;
&lt;br /&gt;
=== Einrichten des »service-files« ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ cat $HOME/.config/systemd/user/my-cleanup.service &lt;br /&gt;
&lt;br /&gt;
    [Unit] &lt;br /&gt;
    Description=My Cleanup Service &lt;br /&gt;
&lt;br /&gt;
    [Service] &lt;br /&gt;
    Type=oneshot &lt;br /&gt;
    ExecStart=%h/bin/cleanup-script &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Testen ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ systemctl --user start my-cleanup.service &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Einrichten des »timer-files« ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ cat $HOME/.config/systemd/user/my-cleanup.timer &lt;br /&gt;
&lt;br /&gt;
    [Unit] &lt;br /&gt;
    Description=Daily My Cleanup Timer &lt;br /&gt;
&lt;br /&gt;
    [Timer] &lt;br /&gt;
    OnCalendar=daily&lt;br /&gt;
    RandomizedDelaySec=3600&lt;br /&gt;
&lt;br /&gt;
    [Install] &lt;br /&gt;
    WantedBy=timers.target &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der RandomizedDelay stellt sich, dass nicht alle Prozesse auf dem System zur gleichen Zeit gestartet werden.&lt;br /&gt;
Eine ausführliche Dokumentation der Direktiven findet sich hier: &lt;br /&gt;
&lt;br /&gt;
https://www.freedesktop.org/software/systemd/man/latest/systemd.timer.html&lt;br /&gt;
&lt;br /&gt;
=== Aktivieren der zeitgesteuerten Ausführung ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
$ systemctl --user enable my-cleanup.timer &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RAM Kontingent eines Webspace ==&lt;br /&gt;
&lt;br /&gt;
Den aktuell belegten RAM eines Webspace &#039;&#039;xyz00&#039;&#039; kann man sich mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status pacs-xyz00.slice&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ansehen.&lt;br /&gt;
&lt;br /&gt;
Etwa in der fünften Zeile der Ausgabe findet man eine Angabe der Form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Memory: 58.4M (max: 14.8G available: 14.8G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier sind aktuell 58,4 Megabyte RAM genutzt, es sind 14,8 Gigabyte RAM für den Webspace verfügbar. Der verfügbare RAM ist das gebuchte Kontingent. Das gebuchte Kontigent wird im Shared Hosting deutlich kleiner sein.&lt;br /&gt;
&lt;br /&gt;
Das RAM Kontingent wird in Schritten von jeweils 128 Ḿegabyte gebucht. Änderungen des RAM Kontingents für einen Webspace nimmt der Service unter [mailto:service@hostsharing.net service@hostsharing.net] entgegen, wie es bei anderen Paketoptionen die Vorgehensweise ist.&lt;br /&gt;
&lt;br /&gt;
= weiterführende Links =&lt;br /&gt;
&lt;br /&gt;
* https://www.freedesktop.org/software/systemd/man/latest/systemd.directives.html&lt;br /&gt;
* https://www.freedesktop.org/software/systemd/man/latest/systemd.timer.html&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:systemd]]&lt;br /&gt;
[[Kategorie:Eigene Daemons]]&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=DKIM&amp;diff=6949</id>
		<title>DKIM</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=DKIM&amp;diff=6949"/>
		<updated>2024-09-24T16:17:30Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: /* Domainkey im DNS */  Versuch einer Umformulierung.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:HSDoku]][[Kategorie:E-Mail]]&lt;br /&gt;
= DomainKeys Identified Mail (DKIM) =&lt;br /&gt;
&lt;br /&gt;
DKIM ist ein Verfahren, dass die Authentizität einer E-Mail sicherstellen kann. Dazu wird die E-Mail auf dem sendenden System mit einer elektronischen Signatur in den unsichtbaren Headerzeilen der E-Mail versehen. Es kommt ein asymmetrisches Schlüsselverfahren zum Einsatz. Der sendende Server verwendet seinen privaten Schlüssel, um die Signatur zu erstellen.&lt;br /&gt;
&lt;br /&gt;
Der öffentliche Schlüssel wird im DNS der E-Mail-Domain veröffentlicht, so dass Empfänger die Authentizität der Signatur prüfen können.&lt;br /&gt;
&lt;br /&gt;
== DKIM bei Hostsharing aktivieren ==&lt;br /&gt;
&lt;br /&gt;
Die Nutzer der Hostsharing-Plattform können E-Mails, die sie über die Hostsharing-Server versenden, mit einer DKIM Signatur versehen lassen. Dazu sind zwei Voraussetzungen notwendig:&lt;br /&gt;
&lt;br /&gt;
# Die Veröffentlichung des öffentlichen Domainkey im DNS der eigenen E-Mail-Domain.&lt;br /&gt;
# Das Setzen der Domain-Option &amp;quot;Domain Key – DKIM&amp;quot; mit Hilfe von HSAdmin.&lt;br /&gt;
&lt;br /&gt;
=== Domainkey im DNS ===&lt;br /&gt;
&lt;br /&gt;
==== Wenn ein individuell angepasstes Zonefile existiert ====&lt;br /&gt;
&lt;br /&gt;
Wenn das Zonefile individuell angepasst wurde, muss es entweder den Platzhalter&lt;br /&gt;
&lt;br /&gt;
  {DEFAULT_ZONEFILE}&lt;br /&gt;
&lt;br /&gt;
oder den Platzhalter&lt;br /&gt;
&lt;br /&gt;
  {DKIM_RR}&lt;br /&gt;
&lt;br /&gt;
enthalten.&lt;br /&gt;
&lt;br /&gt;
Wenn das nicht der Fall ist, muss eine der beiden Zeilen ergänzt werden.&lt;br /&gt;
&lt;br /&gt;
==== Wenn das Zonefile nicht verändert wurde ====&lt;br /&gt;
&lt;br /&gt;
Wenn kein Zonefile im etc-Verzeichnis der Domain vorhanden ist, bedeutet dies, dass das Default-Zonefile mit der Zeile &amp;quot;{DEFAULT_ZONEFILE}&amp;quot; genutzt wird.&lt;br /&gt;
&lt;br /&gt;
Die Veröffentlichung ddes Domainkeys ist dann mit einem einfachen &amp;quot;touch&amp;quot;-Befehl möglich.&lt;br /&gt;
&lt;br /&gt;
   xyz00-doms@h97:~$ touch doms/hs-example.de/etc/pri.hs-example.de &lt;br /&gt;
&lt;br /&gt;
Daraufhin erstellt das System automatisch einen Domain-Key und veröffentlicht ihn.&lt;br /&gt;
Etwa drei Minuten nach dem &amp;quot;touch&amp;quot; liefert der Befehl&lt;br /&gt;
&lt;br /&gt;
  $ dig -t TXT +short default._domainkey.hs-example.de @dns1.hostsharing.net&lt;br /&gt;
&lt;br /&gt;
(&amp;quot;hs-example.de&amp;quot; durch die eigene Domain ersetzen) &lt;br /&gt;
&lt;br /&gt;
einen Schlüssel in der Form:&lt;br /&gt;
&lt;br /&gt;
  v=DKIM1; h=sha256; k=rsa; s=email; &amp;quot; &amp;quot;p=MIIBIjAN [...]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Domainoption DKIM ===&lt;br /&gt;
&lt;br /&gt;
Über die Domainoption &amp;quot;Domain Key – DKIM&amp;quot; wird gesteuert, dass der SMTP-Server, auf dem der Webspace mit der Domain liegt, die ausgehenden E-Mail mit einer DKIM-Signatur ausstattet.&lt;br /&gt;
&lt;br /&gt;
Zum Anpassen der Domainoptionen wählt man in HSAdmin links den Punkt &amp;quot;Web-Paket&amp;quot; und im rechten Bereich im Menü die Auswahl &amp;quot;Domain&amp;quot;. Bei Domains, die ab 3. September 2021 eingerichtet wurden, ist die Domainoption per Voreinstellung gesetzt,&lt;br /&gt;
&lt;br /&gt;
[[Datei:dkim-domain.png]]&lt;br /&gt;
&lt;br /&gt;
[[Datei:dkim-option.png]]&lt;br /&gt;
&lt;br /&gt;
== DKIM deaktivieren ==&lt;br /&gt;
&lt;br /&gt;
Das Abstellen der DKIM-Option in folgender Reihenfolge wird funktionieren:&lt;br /&gt;
&lt;br /&gt;
# Die Domainoption deaktivieren&lt;br /&gt;
# Abwarten bis alle mit der Option (und damit mit einer Signatur) versendeten E-Mail zugestellt sind&lt;br /&gt;
# Den Domainkey im DNS entfernen&lt;br /&gt;
&lt;br /&gt;
== DKIM bei Google ==&lt;br /&gt;
&lt;br /&gt;
Die Server von &#039;&#039;gmail&#039;&#039; sind so eingestellt, dass E-Mails von Domains ohne DKIM oder SPF nicht zugestellt werden. Die Empfängerseite wird nicht informiert. An die Absenderseite geht eine Fehlermeldung in der Art:&lt;br /&gt;
&amp;lt;Blockquote&amp;gt;... host gmail-smtp-in.l.google.com[2a00:1450:4010:c0f::1a] said: 550-5.7.26 Your email has been blocked because the sender is unauthenticated. 550-5.7.26 Gmail requires all senders to authenticate with either SPF or DKIM. 550-5.7.26  550-5.7.26  Authentication results: 550-5.7.26  DKIM = did not pass 550-5.7.26 ...&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Dieser Google-Support-Artikel: [https://support.google.com/a/answer/81126 Richtlinien für E-Mail-Absender] (abgerufen am 26. Mai 2024) soll das erläutern.&lt;br /&gt;
&lt;br /&gt;
Nach erfolgreicher Umstellung findet sich im Header einer E-Mail in Googles Posteingang Text in der Art:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Authentication-Results: mx.google.com;&lt;br /&gt;
dkim=pass ...&lt;br /&gt;
spf=pass ...&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://de.wikipedia.org/wiki/DomainKeys DKIM Artikel der Wikipedia]&lt;br /&gt;
* [https://www.hostsharing.net/doc/managed-operations-platform/zonefile/ Hostsharing-Dokumentation zur Anpassung des Zonefile]&lt;br /&gt;
* [https://www.hostsharing.net/doc/managed-operations-platform/domain/#kap-domain-optionen Hostsharing-Dokumentation Domain-Optionen]&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=.htaccess&amp;diff=6881</id>
		<title>.htaccess</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=.htaccess&amp;diff=6881"/>
		<updated>2024-07-31T07:12:34Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: /* Ausnahme die eigene IP-Adresse */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mit &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt; Dateien innerhalb der Dokument-Verzeichnisse einer Domain (möglichst in ~/doms/example.com/.htaccess oder gezielt in Unterverzeichnissen subs/www ect. ), können Einstellungen des Apache Webservers konfiguriert werden.&lt;br /&gt;
&lt;br /&gt;
Zum Beispiel kann angegeben werden, welches Apache-Modul für bestimmte Dateien (oder bestimmte Datei-Endungen) benutzt werden soll, wohin Dokumente verschoben worden sind, oder auch, wer Zugriff auf die Dateien hat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Einstellen von MIME-Typen ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=apache line&amp;gt;&lt;br /&gt;
# Download von Zertifikaten ermöglichen:&lt;br /&gt;
AddType application/x-x509-ca-cert .crt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Einstellen des im HTTP Header angegebenen Zeichensatzes ==&lt;br /&gt;
&lt;br /&gt;
für .html Dateien:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=apache line&amp;gt;&lt;br /&gt;
AddCharset UTF-8 .html&lt;br /&gt;
&lt;br /&gt;
# oder&lt;br /&gt;
AddDefaultCharset UTF-8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(für PHP Skripte siehe [[PHP]] )&lt;br /&gt;
&lt;br /&gt;
== Einstellen von Datei Handlern ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=apache line&amp;gt;&lt;br /&gt;
AddType application/x-httpd-phpcgi .php &lt;br /&gt;
Action application/x-httpd-phpcgi /fastcgi-bin/phpstub&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Passwortschutz für Dateien==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Sofern der Zugriff http Zugriff auf die Dateien nicht automatisch auf https:// bzw. [[TLS_/_SSL|SSL]] umgeleitet wird, können die Passwörter unverschlüsselt übertragen werden!&lt;br /&gt;
&lt;br /&gt;
Zunächst wollen wir den Zugriff auf ein Unterverzeichnis unserer Beispiel-Domain per .htaccess einschränken. Dazu legen wir zunächst eine Passwort-Datei an. Am einfachsten lässt sich diese spezielle Passwort-Datei in einer Shell anlegen. Wir legen sie in das etc-Verzeichnis der Domain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
xyz00-doms@hopi$ cd ~/doms/example.com/etc&lt;br /&gt;
xyz00-doms@hopi$ htpasswd -c .htpasswd peter&lt;br /&gt;
New password: *****&lt;br /&gt;
Re-type new password: *****&lt;br /&gt;
xyz00-doms@hopi$&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beim ersten User, hier peter wird das Programm htpasswd mit der Option -c (create) aufgerufen, aber auch wirklich nur beim ersten mal, da sonst die Datei .htpasswd neu erzeugt werden würde und vorherige Einträge damit gelöscht wären.&lt;br /&gt;
&lt;br /&gt;
Sollte es beim Versuch, die Datei anzulegen, zu der Fehlermeldung kommando htpasswd nicht bekannt kommen, dann müssen wir zunächst den Befehl lokalisieren und mit dem richtigen Pfad neu aufrufen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
xyz00-doms@hopi$ locate htpasswd&lt;br /&gt;
/usr/sbin/htpasswd&lt;br /&gt;
xyz00-doms@hopi$ /usr/sbin/htpasswd -c .htpasswd peter&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beim zweiten User erfolgt der Aufruf dann ohne die Option -c:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
xyz00-doms@hopi$ htpasswd .htpasswd petra&lt;br /&gt;
New password: *****&lt;br /&gt;
Re-type new password: *****&lt;br /&gt;
xyz00-doms@hopi$&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Sternchen * stehen selbstverständlich für das jeweilige Passwort, welches dem User zugeordnet werden soll.&lt;br /&gt;
&lt;br /&gt;
Diese Datei könnten wir auch einfach mit scp/pscp oder FTP hochladen, dabei stellt sich dann jedoch die Frage, wie wir sie erzeugen. Auf den meisten Windows-Systemen dürfte kein htpasswd-Kommando verfügbar sein. Für diese Fälle gibt es eine online-Version z.b.: https://de.functions-online.com/crypt.html&lt;br /&gt;
die Ausgabe einfach mit Copy&amp;amp;Paste in eine Datei kopieren und diese hochladen.&lt;br /&gt;
&lt;br /&gt;
Die so angelegte Passwort-Datei kann nun von einer oder mehreren .htaccess-Dateien verwendet werden. Dazu begeben wir uns in das zu schützende Verzeichnis und legen dort eine Datei .htaccess an. Dies kann wieder per Upload oder in einer Shell geschehen. Die Datei kann beispielsweise so aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=apache line&amp;gt;&lt;br /&gt;
order allow,deny&lt;br /&gt;
allow from all&lt;br /&gt;
require valid-user&lt;br /&gt;
Authname &amp;quot;Privater Bereich, bitte Anmelden.&amp;quot;&lt;br /&gt;
Authtype Basic&lt;br /&gt;
AuthUserFile /home/doms/example.com/etc/.htpasswd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei verweist die letzte Zeile auf die von uns angelegte .htpasswd Datei. Zu beachten ist:&lt;br /&gt;
* Das die Pfadangabe absolut erfolgt, um einen &amp;quot;Internal Server Error&amp;quot; zu vermeiden.&lt;br /&gt;
* Falls die Datei innerhalb des Dokumenten Verzeichnisses liegen muss, sie auf jeden Fall .htpasswd heißt, damit sie vom Webserver nicht herausgegeben wird.&lt;br /&gt;
* Die .htaccess Datei in den Paketdomains innerhalb des web/ bzw. web-ssl/ Verzeichnisses liegen muss, damit kein &amp;quot;Internal Server Error&amp;quot; auftritt.&lt;br /&gt;
&lt;br /&gt;
===Passwortschutz von CGI- und PHP-Anwendungen===&lt;br /&gt;
&lt;br /&gt;
Mit dem beschriebenen Mechanismus können selbstverständlich auch PHP-Skripte und CGI-Anwendungen vor unberechtigten Zugriffen geschützt werden. In dem geschützten Skript kann über die Umgebungsvariable &amp;lt;code&amp;gt;REDIRECT_REMOTE_USER&amp;lt;/code&amp;gt; der Benutzername des Benutzers abgefragt werden, der sich angemeldet hat.&lt;br /&gt;
&lt;br /&gt;
In PHP-Skripten kann mit Hilfe der automatisch global sichtbaren Variablen &amp;lt;code&amp;gt;$_ENV&amp;lt;/code&amp;gt; auf die Umgebungsvariablen zugegriffen werden. Um die Variable &amp;lt;code&amp;gt;REDIRECT_REMOTE_USER&amp;lt;/code&amp;gt; zu lesen, schreibt man also &amp;lt;code&amp;gt;$_ENV[&#039;REDIRECT_REMOTE_USER&#039;]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Redirects ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=apache line&amp;gt;&lt;br /&gt;
Redirect permanent / http://www.example.com/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rewrite Rules ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=apache line&amp;gt;&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteRule ^mailman/(.*)$      /cgi-bin/mailman/$1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nur SSL erlauben und automatisch umschalten ==&lt;br /&gt;
&lt;br /&gt;
Bei per Symlink zusammengeschalteten Verzeichnissen, kann dies für die Verzeichnisse auf die nur per SSL zugegriffen werden soll, wie folgt erreicht werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=apache line&amp;gt;&lt;br /&gt;
# SSL so fordern, dass ggf. Basic Auth nur einmal innerhalb von SSL abgefragt wird.&lt;br /&gt;
#&lt;br /&gt;
#SSLOptions +StrictRequire  #Bei HS festgelegt.&lt;br /&gt;
SSLRequireSSL&lt;br /&gt;
ErrorDocument 403 https://xyz00.hostsharing.net/https/URL/mit/entspechendem/Ziel/Verzeichnis&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wird auf eine xyz00 Domain umgeleitet für die das HS Zertifikat gilt. Liegen die Seiten nicht dort ist die entprechende URL des Speicherortes mit https:// anzugegeben.&lt;br /&gt;
&lt;br /&gt;
Bei separaten Verzeichnissen für ssl und nicht-ssl kann auch ein permanenter Redirekt gelegt werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=apache line&amp;gt;&lt;br /&gt;
Redirect permanent / https://www.example.org/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um alle http Requests nach https weiter zu leiten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=apache line&amp;gt;&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteCond %{SERVER_PORT} !=443&lt;br /&gt;
RewriteRule .* https://%{HTTP_HOST}:443%{REQUEST_URI} [QSA,R=permanent,L]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Verzeichnislisting ausschalten==&lt;br /&gt;
&lt;br /&gt;
Ruft ein Nutzer ein Verzeichnis auf, z.B. www.example.com/verzeichnis, so wird normalerweise die sich darin befindliche index.html als Standard aufgerufen. Gibt es diese Datei nicht, wird der Inhalt des Verzeichnisses gelistet. Das kann ein Sicherheitsproblem sein.&lt;br /&gt;
&lt;br /&gt;
Die Einstellung&lt;br /&gt;
&amp;lt;syntaxhighlight lang=apache line&amp;gt;&lt;br /&gt;
IndexIgnore * &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
sorgt dafür, dass alle Datein Unterhalb des Speicherortes der .htaccess Datei für das Verzeichnislisting ignoriert werden.&lt;br /&gt;
&lt;br /&gt;
Hinweis: Das Listen der Verzeichnisse kann auch schon auf Dateisystemebene durch ändern der Verzeichnisrechte (o-r) unterbunden werden, wodurch auch lokale User berücksichtigt werden.&lt;br /&gt;
&lt;br /&gt;
== Ausnahme die eigene IP-Adresse ==&lt;br /&gt;
&lt;br /&gt;
Zum Testen willst du möglicherweise auf ein anderes Backend zugreifen, als es die normalen Webseiten-Besucherinnen tun. Du kannst die eigene IP-Adresse als &amp;quot;RewriteCond&amp;quot; verwenden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=apache line&amp;gt;&lt;br /&gt;
DirectoryIndex disabled&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteBase /&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-l&lt;br /&gt;
RewriteCond %{REMOTE_ADDR} !=62.27.244.230&lt;br /&gt;
RewriteRule ^(.*) ajp://hsh02.hostsharing.net:8009/$1 [proxy,last]&lt;br /&gt;
 &lt;br /&gt;
RewriteRule ^(.*) ajp://127.0.0.1:34380/$1 [proxy,last]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bestimmte Clients blockieren ==&lt;br /&gt;
&lt;br /&gt;
Jeder Web-Browser gibt sich mit einer Kennung zu erkennen. Auch Bots sollten sich mit einer bestimmten Kennung zu erkennen geben. Diese Kennung wird ersichtlich, wenn Du die web.log Datei durchsuchst (siehe [[Traffic]]). Damit ist es möglich, bestimmte Clients oder Bots auszuschließen.&lt;br /&gt;
&lt;br /&gt;
Hier im Beispiel werden der SemrushBot, der MJ12bot, und der AI Bot Claude von Anthropic ausgeschlossen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=apache line&amp;gt;&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteBase /&lt;br /&gt;
RewriteCond %{HTTP_USER_AGENT} ^.*SemrushBot.*$ [OR]&lt;br /&gt;
RewriteCond %{HTTP_USER_AGENT} ^.*MJ12bot.*$ [OR]&lt;br /&gt;
RewriteCond %{HTTP_USER_AGENT} ^.*ClaudeBot.*$ [OR]&lt;br /&gt;
RewriteCond %{HTTP_USER_AGENT} ^$&lt;br /&gt;
RewriteRule ^.* - [F,L]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Siehe auch https://stackoverflow.com/a/35775449/1632368&lt;br /&gt;
&lt;br /&gt;
== Bestimmte Verzeichnisse nicht ausliefern ==&lt;br /&gt;
&lt;br /&gt;
zum Beispiel das .git Verzeichnis sollte nicht gezeigt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=apache line&amp;gt;&lt;br /&gt;
RedirectMatch 404 /\.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oder wenn Wordpress für alle URLs mit HTTP Code 200 die Startseite anzeigt, denken manche Angreifer, es läuft ein mailman.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=apache line&amp;gt;&lt;br /&gt;
RedirectMatch 404 /mailman/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Gesperrte Optionen ==&lt;br /&gt;
&lt;br /&gt;
Einstellungen, die es ermöglichen würden, über den Webserver Rechte anderer&lt;br /&gt;
User zu erhalten, sind nicht erlaubt.&lt;br /&gt;
--&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:WWW]]&lt;br /&gt;
[[Kategorie:Glossar]]&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=E-Mail-Adressen&amp;diff=6524</id>
		<title>E-Mail-Adressen</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=E-Mail-Adressen&amp;diff=6524"/>
		<updated>2024-04-11T13:05:07Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: /* Auf der Kommandozeile mit hsadmin CLI */ neuer link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{delete|Seite ist in vielen Teilen veraltet. Inhalt sollte Bestandteil der Kerndoku sein.}}&lt;br /&gt;
&lt;br /&gt;
= E-Mail Adressen einrichten =&lt;br /&gt;
&lt;br /&gt;
== Mit dem WebFrontend ==&lt;br /&gt;
&lt;br /&gt;
Siehe dazu [[WebFrontend]]&lt;br /&gt;
&lt;br /&gt;
== Auf der Kommandozeile mit hsadmin CLI ==&lt;br /&gt;
&lt;br /&gt;
Siehe dazu:&lt;br /&gt;
https://www.hostsharing.net/doc/managed-operations-platform/hsadmin/emailaddress/&lt;br /&gt;
&lt;br /&gt;
= Standard Adressen =&lt;br /&gt;
&lt;br /&gt;
== E-Mail Adressen von Hostsharing Mitgliedern ==&lt;br /&gt;
Jedes Mitglied bekommt eine E-Mail-Adresse der Form:&lt;br /&gt;
&lt;br /&gt;
 vorname.nachname@hostsharing.net&lt;br /&gt;
&lt;br /&gt;
Diese wird an die E-Mailadresse, die in Stammdaten des HS Mitglieds angegeben ist, weitergeleitet.&lt;br /&gt;
&lt;br /&gt;
== E-Mail Adressen von Hostsharing Paketen ==&lt;br /&gt;
&lt;br /&gt;
Jedes Paket bekommt standardmäßig folgende E-Mailadressen eingerichtet:&lt;br /&gt;
&lt;br /&gt;
 owner@xyz00.hostsharing.net -&amp;gt; E-Mailadresse aus den Stammdaten des HS Mitglieds&lt;br /&gt;
 admin@xyz00.hostsharing.net -&amp;gt; lokaler Paketadmin (xyz00@)&lt;br /&gt;
 xyz00@xyz00.hostsharing.net -&amp;gt; lokale Mailbox des Paktadmins&lt;br /&gt;
&lt;br /&gt;
== E-Mail Adressen lokaler User ==&lt;br /&gt;
&lt;br /&gt;
Lokale User sind zunächst nur über den Hostsharing Host oder [[Hive]] erreichbar (xyz00@&amp;lt;hostname&amp;gt;.hostsharing.net oder xyz00@[[Hive|h00]].hostsharing.net). Diese Adressen ändern sich aber logischerweise bei einem Umzug des Pakets auf einen anderen Host oder&lt;br /&gt;
Hive und sind daher nicht zuverlässig verwendbar.&lt;br /&gt;
&lt;br /&gt;
== E-Mail Adessen neu aufgeschalteter Domains ==&lt;br /&gt;
&lt;br /&gt;
Jede aufgeschaltete Domain bekommt initial die E-Mail-Adressen webmaster@..., postmaster@... und abuse@... eingerichtet. Ein sogenannter Catch-All (*@... = jede beliebige Mailadresse für die Domain wird angenommen) kann selbstverständlich per [[Hsadmin-mail]] nachträglich eingerichtet werden. Das ist aber nicht zu empfehlen, wenn man nicht einen Spam-Sammler konfigurieren will.&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Anpassungen_von_Anwendungen_nach_Debian_Bookworm_Upgrade&amp;diff=6379</id>
		<title>Anpassungen von Anwendungen nach Debian Bookworm Upgrade</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Anpassungen_von_Anwendungen_nach_Debian_Bookworm_Upgrade&amp;diff=6379"/>
		<updated>2024-01-30T09:25:56Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: /* Wer ist für was verantwortlich? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Wer ist für was verantwortlich? ==&lt;br /&gt;
&lt;br /&gt;
Die Hostmaster aktualisieren das Betriebssytem. &lt;br /&gt;
&lt;br /&gt;
Die Mitglieder sind für den Betrieb der eigenen Anwendungen im Userspace verantwortlich. Da dazu keine besonderen Rechte erforderlich sind, können die notwendigen Anpassungen vom technisch versierten Mitglied selbst vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Wenn das Mitglied die Anpassungen nicht selbst vornehmen kann oder will, kann ein [https://www.hostsharing.net/service/webmaster-on-demand/ Webmaster On Demand (WoD)] Auftrag erteilt werden, damit ein Hostmaster eine Anwendung wieder zum Laufen bringt. Schreibt bitte einfach eine E-Mail an service@ und nennt die Anwendung, um die es geht, und in welchem Benutzer sie läuft.&lt;br /&gt;
&lt;br /&gt;
Auf dieser Seite teilen wir Anleitungen, wie man die eigene Anwendung selbst wieder zum Laufen bringt.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Python-Anwendungen ==&lt;br /&gt;
&lt;br /&gt;
 {{Textkasten|gelb|Achtung|Python 2.7 steht unter Debian 12 (&amp;quot;Bookworm&amp;quot;) nicht mehr zur Verfügung!}}&lt;br /&gt;
&lt;br /&gt;
Nach dem Upgrade müssen die meisten Python-Anwendungen angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Dazu muss das Virtual Environment gelöscht und neu angelegt werden, am besten mit der Standard Python-Version von Debian 12 (Bookworm). Das ist Python 3.11&lt;br /&gt;
&lt;br /&gt;
Falls die Anwendung noch nicht mit Python 3.11 zurecht kommt, kann mit pyenv auch eine ältere Python-Version, z.B. 3.10 installiert werden: [[Eigenes_Python_installieren#Installation_mit_pyenv]]&lt;br /&gt;
&lt;br /&gt;
Falls bereits mit pyenv eine eigene Python-Version installiert worden war, sollte diese gelöscht und nochmals installiert werden. Eventuell ist eine selbst installierte Python-Version aber auch nicht mehr nötig, und es kann mit der Version Python 3.11 vom Betriebssystem gearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
In der .profile oder .bash_profile sollte diese Variable gesetzt werden:&lt;br /&gt;
&lt;br /&gt;
  export PYTHONIOENCODING=utf-8&lt;br /&gt;
&lt;br /&gt;
=== Änderungen beim Einsatz von Passenger und Python ===&lt;br /&gt;
&lt;br /&gt;
Das Verhalten von Passenger auf Debian 12 Bookworm hat sich geändert: Es können nicht mehr die Parameter &amp;lt;code&amp;gt;PassengerPython&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;PassengerFriendlyErrorPages&amp;lt;/code&amp;gt; in der &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt;-Datei gesetzt werden. Das führt zu einem 500er Fehler.&lt;br /&gt;
&lt;br /&gt;
Falls ein Virtual Environment benutzt wird, sollte folgender Eintrag in der &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt; Datei gesetzt werden:&lt;br /&gt;
&lt;br /&gt;
    SetEnv PYTHONPATH /home/pacs/xyz00/users/example/meinprojekt&lt;br /&gt;
&lt;br /&gt;
Desweiteren sollte der Pfad zum Python-Binärprogramm in den Eigenschaften der Domain in HSAdmin konfiguriert werden, unter PassengerPython: z.B. &amp;lt;code&amp;gt;/home/pacs/xyz00/users/example/.pyenv/versions/3.9.18/bin/python3&amp;lt;/code&amp;gt;, oder bei einem Virtual Environment: &amp;lt;code&amp;gt;/home/pacs/xyz00/users/example/meinprojekt/.venv/bin/python3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Versionsnummer, User und Paket im Pfad anpassen)&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an PHP Anwendungen ==&lt;br /&gt;
&lt;br /&gt;
 {{Textkasten|gelb|Achtung|Unter Debian 12 (&amp;quot;Bookworm&amp;quot;) ist PHP 8.2 die Default Version. PHP 7.4 bleibt installiert.&amp;lt;br/&amp;gt;&lt;br /&gt;
Auf Anfrage stellen wir auch PHP 8.0 und PHP 8.1 zur Verfügung.}}&lt;br /&gt;
&lt;br /&gt;
In der .htaccess Datei müssen die Zeilen mit AddType und Action für PHP entfernt werden:&lt;br /&gt;
&lt;br /&gt;
  nano doms/meinedomain.de/.htaccess&lt;br /&gt;
          # diese Zeilen entfernen:&lt;br /&gt;
          AddType application/x-httpd-php81 .php&lt;br /&gt;
          Action application/x-httpd-php81 /fastcgi-bin/phpstub81&lt;br /&gt;
&lt;br /&gt;
Wenn bisher nur der voreingestellte phpstub verwendet wurde, lief die Seite bisher auf PHP 7.4. Nun würde sie auf PHP 8.2 laufen. Falls die Anwendung das nicht unterstützt, muss für die Domain in HSAdmin die gewünschte PHP Version in der Liste bei &amp;quot;FastCGI PHP-Interpreter&amp;quot; gewählt werden.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Ruby Anwendungen ==&lt;br /&gt;
&lt;br /&gt;
Die meisten Ruby Anwendungen werden mit rbenv betrieben. Das funktioniert nach dem Upgrade auf Debian 12 Bookworm nicht mehr, wegen Inkompatibilitäten bei der OpenSSL-Bibliothek. &lt;br /&gt;
&lt;br /&gt;
Daher muss die rbenv-Umgebung neu installiert werden, siehe [[RubyRBEnv]].&lt;br /&gt;
&lt;br /&gt;
Es müssen auch meistens die Ruby Gems neu installiert werden.&lt;br /&gt;
&lt;br /&gt;
  # erst löschen&lt;br /&gt;
  rm -Rf ~/.gem/&lt;br /&gt;
  rm -Rf ~/.bundle&lt;br /&gt;
  rm -Rf ~/.local/state/gem/&lt;br /&gt;
  &lt;br /&gt;
  # dann installieren&lt;br /&gt;
  cd meineapp # z.B. zammad&lt;br /&gt;
  export RAILS_ENV=&amp;quot;production&amp;quot;&lt;br /&gt;
  bundle install&lt;br /&gt;
&lt;br /&gt;
Falls &#039;&#039;&#039;Passenger&#039;&#039;&#039; zum Einsatz kommt: Das Verhalten von Passenger hat sich geändert. Einträge mit Passenger dürfen nicht mehr in &amp;lt;code&amp;gt;doms/meinedomain.de/.htaccess&amp;lt;/code&amp;gt; stehen. Sie müssen dort auskommentiert werden.&lt;br /&gt;
&lt;br /&gt;
In HSAdmin kann im Dialog &amp;quot;Domain ändern&amp;quot; eingestellt werden, welche Ruby Version verwendet werden soll.&lt;br /&gt;
Es kann entweder die vorinstallierte Ruby Version verwendet werden, oder eine Ruby Version unter einem Pfad wie &amp;lt;code&amp;gt;/home/pacs/xyz00/users/example/.rbenv/shims/ruby&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Node.js Anwendungen ==&lt;br /&gt;
Es muss das Verzeichns &amp;lt;code&amp;gt;.nvm&amp;lt;/code&amp;gt; im Home Verzeichnis gelöscht werden, und &amp;lt;code&amp;gt;node_modules&amp;lt;/code&amp;gt; im Projekt.&lt;br /&gt;
&lt;br /&gt;
Dann Node wieder neu installieren, siehe [[NodeJS]].&lt;br /&gt;
&lt;br /&gt;
Dann &amp;lt;code&amp;gt;yarn install&amp;lt;/code&amp;gt; bzw andere Befehle ausführen, um die Node Module wieder zu installieren.&lt;br /&gt;
&lt;br /&gt;
Falls &#039;&#039;&#039;Passenger&#039;&#039;&#039; zum Einsatz kommt, da hat sich das Verhalten von Passenger geändert. Die Einträge mit Passenger dürfen nicht mehr in &amp;lt;code&amp;gt;doms/meinedomain.de/.htaccess&amp;lt;/code&amp;gt; stehen, und müssen dort auskommentiert werden.&lt;br /&gt;
&lt;br /&gt;
In HSAdmin kann im Dialog &amp;quot;Domain ändern&amp;quot; eingestellt werden, welche Node Version verwendet werden soll.&lt;br /&gt;
Es kann entweder die vorinstallierte Node Version verwendet werden, oder eine Node Version unter dem Pfad z.B. &amp;lt;code&amp;gt;/home/pacs/xyz00/users/example/.nvm/versions/node/v20.11.0/bin/node&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Java Anwendungen ==&lt;br /&gt;
=== Eigenes Java Development Kit (JDK) installieren ===&lt;br /&gt;
&lt;br /&gt;
In Debian Buster lief Java 11. Unter Debian Bookworm steht Java 17 zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Für Anwendungen, die weiterhin Java 11 benötigen, kann es pro User oder pro Paket installiert werden.&lt;br /&gt;
&lt;br /&gt;
Ältere JDKs können hier als Binary für Linux/x64 heruntergeladen werden: https://jdk.java.net/archive/&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für JDK 11:&lt;br /&gt;
&lt;br /&gt;
   mkdir ~/bin&lt;br /&gt;
   cd bin&lt;br /&gt;
   wget https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz&lt;br /&gt;
   tar xzf openjdk-11.0.2_linux-x64_bin.tar.gz&lt;br /&gt;
&lt;br /&gt;
Eine weitere zuverlässige Quelle für eine freie Distribution des OpenJDK ist die Eclipse Foundation: https://adoptium.net/de/&lt;br /&gt;
&lt;br /&gt;
Dann muss im Tomcat (z.B. bin/setenv.sh) oder in der systemd Service Datei die Variable JAVA_HOME gesetzt werden:&lt;br /&gt;
&lt;br /&gt;
    JAVA_HOME=/home/pacs/xyz00/users/meinuser/bin/jdk-11&lt;br /&gt;
&lt;br /&gt;
=== Eigenen Tomcat installieren ===&lt;br /&gt;
&lt;br /&gt;
Bei Debian Buster lief Tomcat 9, auf Debian Bookworm steht Tomcat 10 zur Verfügung. Die beiden Versionen sind nicht kompatibel. Tomcat 9 implementiert Java EE 8; bei Tomcat 10 ist es Jakarta EE 9. Aus lizenzrechtlichen Gründen wurden alle Java-Packages aus den Java-EE-Spezifikationen von &amp;lt;code&amp;gt;javax.&amp;lt;/code&amp;gt; nach &amp;lt;code&amp;gt;jakarta.&amp;lt;/code&amp;gt; umbenannt.&lt;br /&gt;
&lt;br /&gt;
Für eigene Anwendungen empfehlen wir, die Software entsprechend anzupassen und neu zu kompilieren. Für Software aus anderen Quellen kann das Tool &amp;lt;code&amp;gt;javax2jakarta&amp;lt;/code&amp;gt; diesen Schritt in der Regel leisten.&lt;br /&gt;
&lt;br /&gt;
Wenn die Migration nicht möglich oder nicht gewünscht ist, kann leicht ein vollständiger Tomcat 9 pro User installiert werden.&lt;br /&gt;
&lt;br /&gt;
Ältere Versionen von Tomcat sind hier zu finden: https://tomcat.apache.org/download-90.cgi&lt;br /&gt;
&lt;br /&gt;
    mv tomcat tomcat.bak&lt;br /&gt;
    wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.84/bin/apache-tomcat-9.0.84.tar.gz&lt;br /&gt;
    mv apache-tomcat-9.0.84 tomcat&lt;br /&gt;
    cp tomcat.bak/conf/server.xml tomcat/conf/&lt;br /&gt;
    cp tomcat.bak/conf/setenv.sh tomcat/conf/&lt;br /&gt;
    cp -R tomcat.bak/webapps tomcat&lt;br /&gt;
&lt;br /&gt;
Bitte darauf achten, ob noch weitere Konfigurationsdateien kopiert werden und Anpassungen an der context.xml und web.xml übernommen werden müssen.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Redis Diensten ==&lt;br /&gt;
&lt;br /&gt;
Falls ein Redis-Dienst läuft, bitte kontrollieren, ob er noch richtig funktioniert.&lt;br /&gt;
&lt;br /&gt;
Gegebenenfalls müssen in der Datei &amp;lt;code&amp;gt;redis.conf&amp;lt;/code&amp;gt; relative Pfade in absolute Pfade geändert werden, falls dies nicht bereits der Fall ist (z.B. für &amp;lt;code&amp;gt;logfile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;unixsocket&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Aktualisierung von MongoDB ==&lt;br /&gt;
&lt;br /&gt;
MongoDB wird bei uns nicht vom Betriebssystem bereitgestellt.&lt;br /&gt;
&lt;br /&gt;
Falls MongoDB verwendet wird, müssen neue Binaries heruntergeladen werden. Dabei ist die Version für Ubuntu 22.04 zu verwenden, da es keine Version für Debian 12 (Bookworm) gibt: siehe https://www.mongodb.com/try/download/community&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Anpassungen_von_Anwendungen_nach_Debian_Bookworm_Upgrade&amp;diff=6378</id>
		<title>Anpassungen von Anwendungen nach Debian Bookworm Upgrade</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Anpassungen_von_Anwendungen_nach_Debian_Bookworm_Upgrade&amp;diff=6378"/>
		<updated>2024-01-30T09:24:43Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: Sprachliche Überarbeitung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Wer ist für was verantwortlich? ==&lt;br /&gt;
&lt;br /&gt;
Die Hostmaster aktualisieren das Betriebssytem. &lt;br /&gt;
&lt;br /&gt;
Die Mitglieder sind für den Betrieb der eigenen Anwendungen im Userspace verantwortlich. Da dazu keine besonderen Rechte erforderlich sind, können die notwendigen Anpassungen vom technisch versierten Mitglied selbst vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Wenn das Mitglied die Anpassungen nicht selbst vornehmen kann oder will, kann ein [https://www.hostsharing.net/service/webmaster-on-demand/ Webmaster On Demand (WoD)] Auftrag erteilt werden, damit ein Hostmaster eine Anwendung wieder zum Laufen bringt. Schreibt bitte einfach eine E-Mail an service@ und nennt die Anwendung, um die es geht, und in welchem Benutzer die Anwendung läuft.&lt;br /&gt;
&lt;br /&gt;
Auf dieser Seite teilen wir Anleitungen, wie man die eigene Anwendung selbst wieder zum Laufen bringt.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Python-Anwendungen ==&lt;br /&gt;
&lt;br /&gt;
 {{Textkasten|gelb|Achtung|Python 2.7 steht unter Debian 12 (&amp;quot;Bookworm&amp;quot;) nicht mehr zur Verfügung!}}&lt;br /&gt;
&lt;br /&gt;
Nach dem Upgrade müssen die meisten Python-Anwendungen angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Dazu muss das Virtual Environment gelöscht und neu angelegt werden, am besten mit der Standard Python-Version von Debian 12 (Bookworm). Das ist Python 3.11&lt;br /&gt;
&lt;br /&gt;
Falls die Anwendung noch nicht mit Python 3.11 zurecht kommt, kann mit pyenv auch eine ältere Python-Version, z.B. 3.10 installiert werden: [[Eigenes_Python_installieren#Installation_mit_pyenv]]&lt;br /&gt;
&lt;br /&gt;
Falls bereits mit pyenv eine eigene Python-Version installiert worden war, sollte diese gelöscht und nochmals installiert werden. Eventuell ist eine selbst installierte Python-Version aber auch nicht mehr nötig, und es kann mit der Version Python 3.11 vom Betriebssystem gearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
In der .profile oder .bash_profile sollte diese Variable gesetzt werden:&lt;br /&gt;
&lt;br /&gt;
  export PYTHONIOENCODING=utf-8&lt;br /&gt;
&lt;br /&gt;
=== Änderungen beim Einsatz von Passenger und Python ===&lt;br /&gt;
&lt;br /&gt;
Das Verhalten von Passenger auf Debian 12 Bookworm hat sich geändert: Es können nicht mehr die Parameter &amp;lt;code&amp;gt;PassengerPython&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;PassengerFriendlyErrorPages&amp;lt;/code&amp;gt; in der &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt;-Datei gesetzt werden. Das führt zu einem 500er Fehler.&lt;br /&gt;
&lt;br /&gt;
Falls ein Virtual Environment benutzt wird, sollte folgender Eintrag in der &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt; Datei gesetzt werden:&lt;br /&gt;
&lt;br /&gt;
    SetEnv PYTHONPATH /home/pacs/xyz00/users/example/meinprojekt&lt;br /&gt;
&lt;br /&gt;
Desweiteren sollte der Pfad zum Python-Binärprogramm in den Eigenschaften der Domain in HSAdmin konfiguriert werden, unter PassengerPython: z.B. &amp;lt;code&amp;gt;/home/pacs/xyz00/users/example/.pyenv/versions/3.9.18/bin/python3&amp;lt;/code&amp;gt;, oder bei einem Virtual Environment: &amp;lt;code&amp;gt;/home/pacs/xyz00/users/example/meinprojekt/.venv/bin/python3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Versionsnummer, User und Paket im Pfad anpassen)&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an PHP Anwendungen ==&lt;br /&gt;
&lt;br /&gt;
 {{Textkasten|gelb|Achtung|Unter Debian 12 (&amp;quot;Bookworm&amp;quot;) ist PHP 8.2 die Default Version. PHP 7.4 bleibt installiert.&amp;lt;br/&amp;gt;&lt;br /&gt;
Auf Anfrage stellen wir auch PHP 8.0 und PHP 8.1 zur Verfügung.}}&lt;br /&gt;
&lt;br /&gt;
In der .htaccess Datei müssen die Zeilen mit AddType und Action für PHP entfernt werden:&lt;br /&gt;
&lt;br /&gt;
  nano doms/meinedomain.de/.htaccess&lt;br /&gt;
          # diese Zeilen entfernen:&lt;br /&gt;
          AddType application/x-httpd-php81 .php&lt;br /&gt;
          Action application/x-httpd-php81 /fastcgi-bin/phpstub81&lt;br /&gt;
&lt;br /&gt;
Wenn bisher nur der voreingestellte phpstub verwendet wurde, lief die Seite bisher auf PHP 7.4. Nun würde sie auf PHP 8.2 laufen. Falls die Anwendung das nicht unterstützt, muss für die Domain in HSAdmin die gewünschte PHP Version in der Liste bei &amp;quot;FastCGI PHP-Interpreter&amp;quot; gewählt werden.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Ruby Anwendungen ==&lt;br /&gt;
&lt;br /&gt;
Die meisten Ruby Anwendungen werden mit rbenv betrieben. Das funktioniert nach dem Upgrade auf Debian 12 Bookworm nicht mehr, wegen Inkompatibilitäten bei der OpenSSL-Bibliothek. &lt;br /&gt;
&lt;br /&gt;
Daher muss die rbenv-Umgebung neu installiert werden, siehe [[RubyRBEnv]].&lt;br /&gt;
&lt;br /&gt;
Es müssen auch meistens die Ruby Gems neu installiert werden.&lt;br /&gt;
&lt;br /&gt;
  # erst löschen&lt;br /&gt;
  rm -Rf ~/.gem/&lt;br /&gt;
  rm -Rf ~/.bundle&lt;br /&gt;
  rm -Rf ~/.local/state/gem/&lt;br /&gt;
  &lt;br /&gt;
  # dann installieren&lt;br /&gt;
  cd meineapp # z.B. zammad&lt;br /&gt;
  export RAILS_ENV=&amp;quot;production&amp;quot;&lt;br /&gt;
  bundle install&lt;br /&gt;
&lt;br /&gt;
Falls &#039;&#039;&#039;Passenger&#039;&#039;&#039; zum Einsatz kommt: Das Verhalten von Passenger hat sich geändert. Einträge mit Passenger dürfen nicht mehr in &amp;lt;code&amp;gt;doms/meinedomain.de/.htaccess&amp;lt;/code&amp;gt; stehen. Sie müssen dort auskommentiert werden.&lt;br /&gt;
&lt;br /&gt;
In HSAdmin kann im Dialog &amp;quot;Domain ändern&amp;quot; eingestellt werden, welche Ruby Version verwendet werden soll.&lt;br /&gt;
Es kann entweder die vorinstallierte Ruby Version verwendet werden, oder eine Ruby Version unter einem Pfad wie &amp;lt;code&amp;gt;/home/pacs/xyz00/users/example/.rbenv/shims/ruby&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Node.js Anwendungen ==&lt;br /&gt;
Es muss das Verzeichns &amp;lt;code&amp;gt;.nvm&amp;lt;/code&amp;gt; im Home Verzeichnis gelöscht werden, und &amp;lt;code&amp;gt;node_modules&amp;lt;/code&amp;gt; im Projekt.&lt;br /&gt;
&lt;br /&gt;
Dann Node wieder neu installieren, siehe [[NodeJS]].&lt;br /&gt;
&lt;br /&gt;
Dann &amp;lt;code&amp;gt;yarn install&amp;lt;/code&amp;gt; bzw andere Befehle ausführen, um die Node Module wieder zu installieren.&lt;br /&gt;
&lt;br /&gt;
Falls &#039;&#039;&#039;Passenger&#039;&#039;&#039; zum Einsatz kommt, da hat sich das Verhalten von Passenger geändert. Die Einträge mit Passenger dürfen nicht mehr in &amp;lt;code&amp;gt;doms/meinedomain.de/.htaccess&amp;lt;/code&amp;gt; stehen, und müssen dort auskommentiert werden.&lt;br /&gt;
&lt;br /&gt;
In HSAdmin kann im Dialog &amp;quot;Domain ändern&amp;quot; eingestellt werden, welche Node Version verwendet werden soll.&lt;br /&gt;
Es kann entweder die vorinstallierte Node Version verwendet werden, oder eine Node Version unter dem Pfad z.B. &amp;lt;code&amp;gt;/home/pacs/xyz00/users/example/.nvm/versions/node/v20.11.0/bin/node&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Java Anwendungen ==&lt;br /&gt;
=== Eigenes Java Development Kit (JDK) installieren ===&lt;br /&gt;
&lt;br /&gt;
In Debian Buster lief Java 11. Unter Debian Bookworm steht Java 17 zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Für Anwendungen, die weiterhin Java 11 benötigen, kann es pro User oder pro Paket installiert werden.&lt;br /&gt;
&lt;br /&gt;
Ältere JDKs können hier als Binary für Linux/x64 heruntergeladen werden: https://jdk.java.net/archive/&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für JDK 11:&lt;br /&gt;
&lt;br /&gt;
   mkdir ~/bin&lt;br /&gt;
   cd bin&lt;br /&gt;
   wget https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz&lt;br /&gt;
   tar xzf openjdk-11.0.2_linux-x64_bin.tar.gz&lt;br /&gt;
&lt;br /&gt;
Eine weitere zuverlässige Quelle für eine freie Distribution des OpenJDK ist die Eclipse Foundation: https://adoptium.net/de/&lt;br /&gt;
&lt;br /&gt;
Dann muss im Tomcat (z.B. bin/setenv.sh) oder in der systemd Service Datei die Variable JAVA_HOME gesetzt werden:&lt;br /&gt;
&lt;br /&gt;
    JAVA_HOME=/home/pacs/xyz00/users/meinuser/bin/jdk-11&lt;br /&gt;
&lt;br /&gt;
=== Eigenen Tomcat installieren ===&lt;br /&gt;
&lt;br /&gt;
Bei Debian Buster lief Tomcat 9, auf Debian Bookworm steht Tomcat 10 zur Verfügung. Die beiden Versionen sind nicht kompatibel. Tomcat 9 implementiert Java EE 8; bei Tomcat 10 ist es Jakarta EE 9. Aus lizenzrechtlichen Gründen wurden alle Java-Packages aus den Java-EE-Spezifikationen von &amp;lt;code&amp;gt;javax.&amp;lt;/code&amp;gt; nach &amp;lt;code&amp;gt;jakarta.&amp;lt;/code&amp;gt; umbenannt.&lt;br /&gt;
&lt;br /&gt;
Für eigene Anwendungen empfehlen wir, die Software entsprechend anzupassen und neu zu kompilieren. Für Software aus anderen Quellen kann das Tool &amp;lt;code&amp;gt;javax2jakarta&amp;lt;/code&amp;gt; diesen Schritt in der Regel leisten.&lt;br /&gt;
&lt;br /&gt;
Wenn die Migration nicht möglich oder nicht gewünscht ist, kann leicht ein vollständiger Tomcat 9 pro User installiert werden.&lt;br /&gt;
&lt;br /&gt;
Ältere Versionen von Tomcat sind hier zu finden: https://tomcat.apache.org/download-90.cgi&lt;br /&gt;
&lt;br /&gt;
    mv tomcat tomcat.bak&lt;br /&gt;
    wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.84/bin/apache-tomcat-9.0.84.tar.gz&lt;br /&gt;
    mv apache-tomcat-9.0.84 tomcat&lt;br /&gt;
    cp tomcat.bak/conf/server.xml tomcat/conf/&lt;br /&gt;
    cp tomcat.bak/conf/setenv.sh tomcat/conf/&lt;br /&gt;
    cp -R tomcat.bak/webapps tomcat&lt;br /&gt;
&lt;br /&gt;
Bitte darauf achten, ob noch weitere Konfigurationsdateien kopiert werden und Anpassungen an der context.xml und web.xml übernommen werden müssen.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Redis Diensten ==&lt;br /&gt;
&lt;br /&gt;
Falls ein Redis-Dienst läuft, bitte kontrollieren, ob er noch richtig funktioniert.&lt;br /&gt;
&lt;br /&gt;
Gegebenenfalls müssen in der Datei &amp;lt;code&amp;gt;redis.conf&amp;lt;/code&amp;gt; relative Pfade in absolute Pfade geändert werden, falls dies nicht bereits der Fall ist (z.B. für &amp;lt;code&amp;gt;logfile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;unixsocket&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Aktualisierung von MongoDB ==&lt;br /&gt;
&lt;br /&gt;
MongoDB wird bei uns nicht vom Betriebssystem bereitgestellt.&lt;br /&gt;
&lt;br /&gt;
Falls MongoDB verwendet wird, müssen neue Binaries heruntergeladen werden. Dabei ist die Version für Ubuntu 22.04 zu verwenden, da es keine Version für Debian 12 (Bookworm) gibt: siehe https://www.mongodb.com/try/download/community&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Anpassungen_von_Anwendungen_nach_Debian_Bookworm_Upgrade&amp;diff=6377</id>
		<title>Anpassungen von Anwendungen nach Debian Bookworm Upgrade</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Anpassungen_von_Anwendungen_nach_Debian_Bookworm_Upgrade&amp;diff=6377"/>
		<updated>2024-01-30T09:22:50Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: Sprachliche Überarbeitung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Wer ist für was verantwortlich? ==&lt;br /&gt;
&lt;br /&gt;
Die Hostmaster aktualisieren das Betriebssytem. &lt;br /&gt;
&lt;br /&gt;
Die Mitglieder sind für den Betrieb der eigenen Anwendungen im Userspace verantwortlich. Da dazu keine besonderen Rechte erforderlich sind, können die notwendigen Anpassungen vom technisch versierten Mitglied selbst vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Wenn das Mitglied die Anpassungen nicht selbst vornehmen kann oder will, kann ein [https://www.hostsharing.net/service/webmaster-on-demand/ Webmaster On Demand (WoD)] Auftrag erteilt werden, damit ein Hostmaster eine Anwendung wieder zum Laufen bringt. Schreibt bitte einfach eine E-Mail an service@ und nennt die Anwendung, um die es geht, und in welchem Benutzer die Anwendung läuft.&lt;br /&gt;
&lt;br /&gt;
Auf dieser Seite teilen wir Anleitungen, wie man die eigene Anwendung selbst wieder zum Laufen bringt.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Python-Anwendungen ==&lt;br /&gt;
&lt;br /&gt;
 {{Textkasten|gelb|Achtung|Python 2.7 steht unter Debian 12 (&amp;quot;Bookworm&amp;quot;) nicht mehr zur Verfügung!}}&lt;br /&gt;
&lt;br /&gt;
Nach dem Upgrade müssen die meisten Python-Anwendungen angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Dazu muss das Virtual Environment gelöscht und neu angelegt werden, am besten mit der Standard Python-Version von Debian 12 (Bookworm). Das ist Python 3.11&lt;br /&gt;
&lt;br /&gt;
Falls die Anwendung noch nicht mit Python 3.11 zurecht kommt, kann mit pyenv auch eine ältere Python-Version, z.B. 3.10 installiert werden: [[Eigenes_Python_installieren#Installation_mit_pyenv]]&lt;br /&gt;
&lt;br /&gt;
Falls bereits mit pyenv eine eigene Python-Version installiert worden war, sollte diese gelöscht und nochmals installiert werden. Eventuell ist eine selbst installierte Python-Version aber auch nicht mehr nötig, und es kann mit der Version Python 3.11 vom Betriebssystem gearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
In der .profile oder .bash_profile sollte diese Variable gesetzt werden:&lt;br /&gt;
&lt;br /&gt;
  export PYTHONIOENCODING=utf-8&lt;br /&gt;
&lt;br /&gt;
=== Änderungen beim Einsatz von Passenger und Python ===&lt;br /&gt;
&lt;br /&gt;
Das Verhalten von Passenger auf Debian 12 Bookworm hat sich geändert: Es können nicht mehr die Parameter &amp;lt;code&amp;gt;PassengerPython&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;PassengerFriendlyErrorPages&amp;lt;/code&amp;gt; in der &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt;-Datei gesetzt werden. Das führt zu einem 500er Fehler.&lt;br /&gt;
&lt;br /&gt;
Falls ein Virtual Environment benutzt wird, sollte folgender Eintrag in der &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt; Datei gesetzt werden:&lt;br /&gt;
&lt;br /&gt;
    SetEnv PYTHONPATH /home/pacs/xyz00/users/example/meinprojekt&lt;br /&gt;
&lt;br /&gt;
Desweiteren sollte der Pfad zum Python-Binärprogramm in den Eigenschaften der Domain in HSAdmin konfiguriert werden, unter PassengerPython: z.B. &amp;lt;code&amp;gt;/home/pacs/xyz00/users/example/.pyenv/versions/3.9.18/bin/python3&amp;lt;/code&amp;gt;, oder bei einem Virtual Environment: &amp;lt;code&amp;gt;/home/pacs/xyz00/users/example/meinprojekt/.venv/bin/python3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Versionsnummer, User und Paket im Pfad anpassen)&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an PHP Anwendungen ==&lt;br /&gt;
&lt;br /&gt;
 {{Textkasten|gelb|Achtung|Unter Debian 12 (&amp;quot;Bookworm&amp;quot;) ist PHP 8.2 die Default Version. PHP 7.4 bleibt installiert.&amp;lt;br/&amp;gt;&lt;br /&gt;
Auf Anfrage stellen wir auch PHP 8.0 und PHP 8.1 zur Verfügung.}}&lt;br /&gt;
&lt;br /&gt;
In der .htaccess Datei müssen die Zeilen mit AddType und Action für PHP entfernt werden:&lt;br /&gt;
&lt;br /&gt;
  nano doms/meinedomain.de/.htaccess&lt;br /&gt;
          # diese Zeilen entfernen:&lt;br /&gt;
          AddType application/x-httpd-php81 .php&lt;br /&gt;
          Action application/x-httpd-php81 /fastcgi-bin/phpstub81&lt;br /&gt;
&lt;br /&gt;
Wenn bisher nur der voreingestellte phpstub verwendet wurde, lief die Seite bisher auf PHP 7.4. Nun würde sie auf PHP 8.2 laufen. Falls die Anwendung das nicht unterstützt, muss für die Domain in HSAdmin die gewünschte PHP Version in der Liste bei &amp;quot;FastCGI PHP-Interpreter&amp;quot; gewählt werden.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Ruby Anwendungen ==&lt;br /&gt;
&lt;br /&gt;
Die meisten Ruby Anwendungen werden mit rbenv betrieben. Das funktioniert nach dem Upgrade auf Debian 12 Bookworm nicht mehr, wegen Inkompatibilitäten bei der OpenSSL-Bibliothek. &lt;br /&gt;
&lt;br /&gt;
Daher muss die rbenv-Umgebung neu installiert werden, siehe [[RubyRBEnv]].&lt;br /&gt;
&lt;br /&gt;
Es müssen auch meistens die Ruby Gems neu installiert werden.&lt;br /&gt;
&lt;br /&gt;
  # erst löschen&lt;br /&gt;
  rm -Rf ~/.gem/&lt;br /&gt;
  rm -Rf ~/.bundle&lt;br /&gt;
  rm -Rf ~/.local/state/gem/&lt;br /&gt;
  &lt;br /&gt;
  # dann installieren&lt;br /&gt;
  cd meineapp # z.B. zammad&lt;br /&gt;
  export RAILS_ENV=&amp;quot;production&amp;quot;&lt;br /&gt;
  bundle install&lt;br /&gt;
&lt;br /&gt;
Falls &#039;&#039;&#039;Passenger&#039;&#039;&#039; zum Einsatz kommt: Das Verhalten von Passenger hat sich geändert. Einträge mit Passenger dürfen nicht mehr in &amp;lt;code&amp;gt;doms/meinedomain.de/.htaccess&amp;lt;/code&amp;gt; stehen. Sie müssen dort auskommentiert werden.&lt;br /&gt;
&lt;br /&gt;
In HSAdmin kann im Dialog &amp;quot;Domain ändern&amp;quot; eingestellt werden, welche Ruby Version verwendet werden soll.&lt;br /&gt;
Es kann entweder die vorinstallierte Ruby Version verwendet werden, oder eine Ruby Version unter einem Pfad wie &amp;lt;code&amp;gt;/home/pacs/xyz00/users/example/.rbenv/shims/ruby&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Node.js Anwendungen ==&lt;br /&gt;
Es muss das Verzeichns &amp;lt;code&amp;gt;.nvm&amp;lt;/code&amp;gt; im Home Verzeichnis gelöscht werden, und &amp;lt;code&amp;gt;node_modules&amp;lt;/code&amp;gt; im Projekt.&lt;br /&gt;
&lt;br /&gt;
Dann Node wieder neu installieren, siehe [[NodeJS]].&lt;br /&gt;
&lt;br /&gt;
Dann &amp;lt;code&amp;gt;yarn install&amp;lt;/code&amp;gt; bzw andere Befehle ausführen, um die Node Module wieder zu installieren.&lt;br /&gt;
&lt;br /&gt;
Falls &#039;&#039;&#039;Passenger&#039;&#039;&#039; zum Einsatz kommt, da hat sich das Verhalten von Passenger geändert. Die Einträge mit Passenger dürfen nicht mehr in &amp;lt;code&amp;gt;doms/meinedomain.de/.htaccess&amp;lt;/code&amp;gt; stehen, und müssen dort auskommentiert werden.&lt;br /&gt;
&lt;br /&gt;
In HSAdmin kann im Dialog &amp;quot;Domain ändern&amp;quot; eingestellt werden, welche Node Version verwendet werden soll.&lt;br /&gt;
Es kann entweder die vorinstallierte Node Version verwendet werden, oder eine Node Version unter dem Pfad z.B. &amp;lt;code&amp;gt;/home/pacs/xyz00/users/example/.nvm/versions/node/v20.11.0/bin/node&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Java Anwendungen ==&lt;br /&gt;
=== Eigenes Java Development Kit (JDK) installieren ===&lt;br /&gt;
&lt;br /&gt;
In Debian Buster lief Java 11. Unter Debian Bookworm steht Java 17 zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Für Anwendungen, die weiterhin Java 11 benötigen, kann es pro User oder pro Paket installiert werden.&lt;br /&gt;
&lt;br /&gt;
Ältere JDKs können hier als Binary für Linux/x64 heruntergeladen werden: https://jdk.java.net/archive/&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für JDK 11:&lt;br /&gt;
&lt;br /&gt;
   mkdir ~/bin&lt;br /&gt;
   cd bin&lt;br /&gt;
   wget https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz&lt;br /&gt;
   tar xzf openjdk-11.0.2_linux-x64_bin.tar.gz&lt;br /&gt;
&lt;br /&gt;
Eine weitere zuverlässige Quelle für eine freie Distribution des OpenJDK ist die Eclipse Foundation: https://adoptium.net/de/&lt;br /&gt;
&lt;br /&gt;
Dann muss im Tomcat (z.B. bin/setenv.sh) oder in der systemd Service Datei die Variable JAVA_HOME gesetzt werden:&lt;br /&gt;
&lt;br /&gt;
    JAVA_HOME=/home/pacs/xyz00/users/meinuser/bin/jdk-11&lt;br /&gt;
&lt;br /&gt;
=== Eigenen Tomcat installieren ===&lt;br /&gt;
&lt;br /&gt;
Bei Debian Buster lief Tomcat 9, auf Debian Bookworm steht Tomcat 10 zur Verfügung. Die beiden Versionen sind nicht kompatibel. Tomcat 9 implementiert Java EE 8; bei Tomcat 10 ist es Jakarta EE 9. Aus lizenzrechtlichen Gründen wurden alle Java-Packages aus den Java-EE-Spezifikationen von &amp;lt;code&amp;gt;javax.&amp;lt;/code&amp;gt; nach &amp;lt;code&amp;gt;jakarta.&amp;lt;/code&amp;gt; umbenannt.&lt;br /&gt;
&lt;br /&gt;
Für eigene Anwendungen empfehlen wir, die Software entsprechend anzupassen und neu zu kompilieren. Für Software aus anderen Quellen kann das Tool &amp;lt;code&amp;gt;javax2jakarta&amp;lt;/code&amp;gt; diesen Schritt in der Regel leisten.&lt;br /&gt;
&lt;br /&gt;
Wenn die Migration nicht möglich oder nicht gewünscht ist, kann leicht ein vollständiger Tomcat 9 pro User installiert werden.&lt;br /&gt;
&lt;br /&gt;
Ältere Versionen von Tomcat sind hier zu finden: https://tomcat.apache.org/download-90.cgi&lt;br /&gt;
&lt;br /&gt;
    mv tomcat tomcat.bak&lt;br /&gt;
    wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.84/bin/apache-tomcat-9.0.84.tar.gz&lt;br /&gt;
    mv apache-tomcat-9.0.84 tomcat&lt;br /&gt;
    cp tomcat.bak/conf/server.xml tomcat/conf/&lt;br /&gt;
    cp tomcat.bak/conf/setenv.sh tomcat/conf/&lt;br /&gt;
    cp -R tomcat.bak/webapps tomcat&lt;br /&gt;
&lt;br /&gt;
Bitte darauf achten, ob noch weitere Konfigurationsdateien kopiert werden und Anpassungen an der context.xml und web.xml übernommen werden müssen.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Redis Diensten ==&lt;br /&gt;
&lt;br /&gt;
Falls ein Redis Dienst läuft, bitte kontrollieren, ob er noch richtig funktioniert.&lt;br /&gt;
&lt;br /&gt;
Gegebenenfalls müssen in der Datei &amp;lt;code&amp;gt;redis.conf&amp;lt;/code&amp;gt; die relativen Pfade zu absoluten Pfaden geändert werden, wenn die nicht schon bereits absolute Pfade sind (z.B. &amp;lt;code&amp;gt;logfile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;unixsocket&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Aktualisierung von MongoDB ==&lt;br /&gt;
&lt;br /&gt;
MongoDB wird bei uns nicht vom Betriebssystem bereitgestellt.&lt;br /&gt;
&lt;br /&gt;
Falls MongoDB verwendet wird, müssen neue Binaries heruntergeladen werden. Dabei ist die Version für Ubuntu 22.04 zu verwenden, da es keine Version für Debian 12 (Bookworm) gibt: siehe https://www.mongodb.com/try/download/community&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Anpassungen_von_Anwendungen_nach_Debian_Bookworm_Upgrade&amp;diff=6376</id>
		<title>Anpassungen von Anwendungen nach Debian Bookworm Upgrade</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Anpassungen_von_Anwendungen_nach_Debian_Bookworm_Upgrade&amp;diff=6376"/>
		<updated>2024-01-30T09:20:42Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: Sprachliche Überarbeitung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Wer ist für was verantwortlich? ==&lt;br /&gt;
&lt;br /&gt;
Die Hostmaster aktualisieren das Betriebssytem. &lt;br /&gt;
&lt;br /&gt;
Die Mitglieder sind für den Betrieb der eigenen Anwendungen im Userspace verantwortlich. Da dazu keine besonderen Rechte erforderlich sind, können die notwendigen Anpassungen vom technisch versierten Mitglied selbst vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Wenn das Mitglied die Anpassungen nicht selbst vornehmen kann oder will, kann ein [https://www.hostsharing.net/service/webmaster-on-demand/ Webmaster On Demand (WoD)] Auftrag erteilt werden, damit ein Hostmaster eine Anwendung wieder zum Laufen bringt. Schreibt bitte einfach eine E-Mail an service@ und nennt die Anwendung, um die es geht, und in welchem Benutzer die Anwendung läuft.&lt;br /&gt;
&lt;br /&gt;
Auf dieser Seite teilen wir Anleitungen, wie man die eigene Anwendung selbst wieder zum Laufen bringt.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Python-Anwendungen ==&lt;br /&gt;
&lt;br /&gt;
 {{Textkasten|gelb|Achtung|Python 2.7 steht unter Debian 12 (&amp;quot;Bookworm&amp;quot;) nicht mehr zur Verfügung!}}&lt;br /&gt;
&lt;br /&gt;
Nach dem Upgrade müssen die meisten Python-Anwendungen angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Dazu muss das Virtual Environment gelöscht und neu angelegt werden, am besten mit der Standard Python-Version von Debian 12 (Bookworm). Das ist Python 3.11&lt;br /&gt;
&lt;br /&gt;
Falls die Anwendung noch nicht mit Python 3.11 zurecht kommt, kann mit pyenv auch eine ältere Python-Version, z.B. 3.10 installiert werden: [[Eigenes_Python_installieren#Installation_mit_pyenv]]&lt;br /&gt;
&lt;br /&gt;
Falls bereits mit pyenv eine eigene Python-Version installiert worden war, sollte diese gelöscht und nochmals installiert werden. Eventuell ist eine selbst installierte Python-Version aber auch nicht mehr nötig, und es kann mit der Version Python 3.11 vom Betriebssystem gearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
In der .profile oder .bash_profile sollte diese Variable gesetzt werden:&lt;br /&gt;
&lt;br /&gt;
  export PYTHONIOENCODING=utf-8&lt;br /&gt;
&lt;br /&gt;
=== Änderungen beim Einsatz von Passenger und Python ===&lt;br /&gt;
&lt;br /&gt;
Das Verhalten von Passenger auf Debian 12 Bookworm hat sich geändert: Es können nicht mehr die Parameter &amp;lt;code&amp;gt;PassengerPython&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;PassengerFriendlyErrorPages&amp;lt;/code&amp;gt; in der &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt;-Datei gesetzt werden. Das führt zu einem 500er Fehler.&lt;br /&gt;
&lt;br /&gt;
Falls ein Virtual Environment benutzt wird, sollte folgender Eintrag in der &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt; Datei gesetzt werden:&lt;br /&gt;
&lt;br /&gt;
    SetEnv PYTHONPATH /home/pacs/xyz00/users/example/meinprojekt&lt;br /&gt;
&lt;br /&gt;
Desweiteren sollte der Pfad zum Python-Binärprogramm in den Eigenschaften der Domain in HSAdmin konfiguriert werden, unter PassengerPython: z.B. &amp;lt;code&amp;gt;/home/pacs/xyz00/users/example/.pyenv/versions/3.9.18/bin/python3&amp;lt;/code&amp;gt;, oder bei einem Virtual Environment: &amp;lt;code&amp;gt;/home/pacs/xyz00/users/example/meinprojekt/.venv/bin/python3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Versionsnummer, User und Paket im Pfad anpassen)&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an PHP Anwendungen ==&lt;br /&gt;
&lt;br /&gt;
 {{Textkasten|gelb|Achtung|Unter Debian 12 (&amp;quot;Bookworm&amp;quot;) ist PHP 8.2 die Default Version. PHP 7.4 bleibt installiert.&amp;lt;br/&amp;gt;&lt;br /&gt;
Auf Anfrage stellen wir auch PHP 8.0 und PHP 8.1 zur Verfügung.}}&lt;br /&gt;
&lt;br /&gt;
In der .htaccess Datei müssen die Zeilen mit AddType und Action für PHP entfernt werden:&lt;br /&gt;
&lt;br /&gt;
  nano doms/meinedomain.de/.htaccess&lt;br /&gt;
          # diese Zeilen entfernen:&lt;br /&gt;
          AddType application/x-httpd-php81 .php&lt;br /&gt;
          Action application/x-httpd-php81 /fastcgi-bin/phpstub81&lt;br /&gt;
&lt;br /&gt;
Wenn bisher nur der voreingestellte phpstub verwendet wurde, lief die Seite bisher auf PHP 7.4. Nun würde sie auf PHP 8.2 laufen. Falls die Anwendung das nicht unterstützt, muss für die Domain in HSAdmin die gewünschte PHP Version in der Liste bei &amp;quot;FastCGI PHP-Interpreter&amp;quot; gewählt werden.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Ruby Anwendungen ==&lt;br /&gt;
&lt;br /&gt;
Die meisten Ruby Anwendungen werden mit rbenv betrieben. Das funktioniert nach dem Upgrade auf Debian 12 Bookworm nicht mehr, wegen Inkompatibilitäten bei der OpenSSL-Bibliothek. &lt;br /&gt;
&lt;br /&gt;
Daher muss die rbenv-Umgebung neu installiert werden, siehe [[RubyRBEnv]].&lt;br /&gt;
&lt;br /&gt;
Es müssen auch meistens die Ruby Gems neu installiert werden.&lt;br /&gt;
&lt;br /&gt;
  # erst löschen&lt;br /&gt;
  rm -Rf ~/.gem/&lt;br /&gt;
  rm -Rf ~/.bundle&lt;br /&gt;
  rm -Rf ~/.local/state/gem/&lt;br /&gt;
  &lt;br /&gt;
  # dann installieren&lt;br /&gt;
  cd meineapp # z.B. zammad&lt;br /&gt;
  export RAILS_ENV=&amp;quot;production&amp;quot;&lt;br /&gt;
  bundle install&lt;br /&gt;
&lt;br /&gt;
Falls &#039;&#039;&#039;Passenger&#039;&#039;&#039; zum Einsatz kommt: Das Verhalten von Passenger hat sich geändert. Einträge mit Passenger dürfen nicht mehr in &amp;lt;code&amp;gt;doms/meinedomain.de/.htaccess&amp;lt;/code&amp;gt; stehen. Sie müssen dort auskommentiert werden.&lt;br /&gt;
&lt;br /&gt;
In HSAdmin kann im Dialog &amp;quot;Domain ändern&amp;quot; eingestellt werden, welche Ruby Version verwendet werden soll.&lt;br /&gt;
Es kann entweder die vorinstallierte Ruby Version verwendet werden, oder eine Ruby Version unter einem Pfad wie &amp;lt;code&amp;gt;/home/pacs/xyz00/users/example/.rbenv/shims/ruby&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Node.js Anwendungen ==&lt;br /&gt;
Es muss das Verzeichns &amp;lt;code&amp;gt;.nvm&amp;lt;/code&amp;gt; im Home Verzeichnis gelöscht werden, und &amp;lt;code&amp;gt;node_modules&amp;lt;/code&amp;gt; im Projekt.&lt;br /&gt;
&lt;br /&gt;
Dann Node wieder neu installieren, siehe [[NodeJS]].&lt;br /&gt;
&lt;br /&gt;
Dann &amp;lt;code&amp;gt;yarn install&amp;lt;/code&amp;gt; bzw andere Befehle ausführen, um die Node Module wieder zu installieren.&lt;br /&gt;
&lt;br /&gt;
Falls &#039;&#039;&#039;Passenger&#039;&#039;&#039; zum Einsatz kommt, da hat sich das Verhalten von Passenger geändert. Die Einträge mit Passenger dürfen nicht mehr in &amp;lt;code&amp;gt;doms/meinedomain.de/.htaccess&amp;lt;/code&amp;gt; stehen, und müssen dort auskommentiert werden.&lt;br /&gt;
&lt;br /&gt;
In HSAdmin kann im Dialog &amp;quot;Domain ändern&amp;quot; eingestellt werden, welche Node Version verwendet werden soll.&lt;br /&gt;
Es kann entweder die vorinstallierte Node Version verwendet werden, oder eine Node Version unter dem Pfad z.B. &amp;lt;code&amp;gt;/home/pacs/xyz00/users/example/.nvm/versions/node/v20.11.0/bin/node&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Java Anwendungen ==&lt;br /&gt;
=== Eigenes Java Development Kit (JDK) installieren ===&lt;br /&gt;
&lt;br /&gt;
In Debian Buster lief Java 11. Unter Debian Bookworm steht Java 17 zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Für Anwendungen, die weiterhin Java 11 benötigen, kann es pro User oder pro Paket installiert werden.&lt;br /&gt;
&lt;br /&gt;
Ältere JDKs können hier als Binary für Linux/x64 heruntergeladen werden: https://jdk.java.net/archive/&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für JDK 11:&lt;br /&gt;
&lt;br /&gt;
   mkdir ~/bin&lt;br /&gt;
   cd bin&lt;br /&gt;
   wget https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz&lt;br /&gt;
   tar xzf openjdk-11.0.2_linux-x64_bin.tar.gz&lt;br /&gt;
&lt;br /&gt;
Eine weitere zuverlässige Quelle für eine freie Distribution des OpenJDK ist die Eclipse Foundation: https://adoptium.net/de/&lt;br /&gt;
&lt;br /&gt;
Dann muss im Tomcat (z.B. bin/setenv.sh) oder in der systemd Service Datei die Variable JAVA_HOME gesetzt werden:&lt;br /&gt;
&lt;br /&gt;
    JAVA_HOME=/home/pacs/xyz00/users/meinuser/bin/jdk-11&lt;br /&gt;
&lt;br /&gt;
=== Eigenen Tomcat installieren ===&lt;br /&gt;
&lt;br /&gt;
Bei Debian Buster lief Tomcat 9, auf Debian Bookworm steht Tomcat 10 zur Verfügung. Die beiden Versionen sind nicht kompatibel. Tomcat 9 implementiert Java EE 8; bei Tomcat 10 ist es Jakarta EE 9. Aus lizenzrechtlichen Gründen wurden alle Java-Packages aus den Java-EE-Spezifikationen von &amp;lt;code&amp;gt;javax.&amp;lt;/code&amp;gt; nach &amp;lt;code&amp;gt;jakarta.&amp;lt;/code&amp;gt; umbenannt.&lt;br /&gt;
&lt;br /&gt;
Für eigene Anwendungen empfehlen wir, die Software entsprechend anzupassen und neu zu kompilieren. Für Software aus anderen Quellen kann das Tool &amp;lt;code&amp;gt;javax2jakarta&amp;lt;/code&amp;gt; diesen Schritt in der Regel leisten.&lt;br /&gt;
&lt;br /&gt;
Wenn die Migration nicht möglich oder nicht gewünscht ist, kann leicht ein vollständiger Tomcat 9 pro User installiert werden.&lt;br /&gt;
&lt;br /&gt;
Ältere Versionen von Tomcat sind hier zu finden: https://tomcat.apache.org/download-90.cgi&lt;br /&gt;
&lt;br /&gt;
    mv tomcat tomcat.bak&lt;br /&gt;
    wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.84/bin/apache-tomcat-9.0.84.tar.gz&lt;br /&gt;
    mv apache-tomcat-9.0.84 tomcat&lt;br /&gt;
    cp tomcat.bak/conf/server.xml tomcat/conf/&lt;br /&gt;
    cp tomcat.bak/conf/setenv.sh tomcat/conf/&lt;br /&gt;
    cp -R tomcat.bak/webapps tomcat&lt;br /&gt;
&lt;br /&gt;
Darauf achten, ob noch weitere Konfigurationsdateien kopiert werden müssen, und Anpassungen an der context.xml und web.xml übernommen werden müssen.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Redis Diensten ==&lt;br /&gt;
&lt;br /&gt;
Falls ein Redis Dienst läuft, bitte kontrollieren, ob er noch richtig funktioniert.&lt;br /&gt;
&lt;br /&gt;
Gegebenenfalls müssen in der Datei &amp;lt;code&amp;gt;redis.conf&amp;lt;/code&amp;gt; die relativen Pfade zu absoluten Pfaden geändert werden, wenn die nicht schon bereits absolute Pfade sind (z.B. &amp;lt;code&amp;gt;logfile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;unixsocket&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Aktualisierung von MongoDB ==&lt;br /&gt;
&lt;br /&gt;
MongoDB wird bei uns nicht vom Betriebssystem bereitgestellt.&lt;br /&gt;
&lt;br /&gt;
Falls MongoDB verwendet wird, müssen neue Binaries heruntergeladen werden. Dabei ist die Version für Ubuntu 22.04 zu verwenden, da es keine Version für Debian 12 (Bookworm) gibt: siehe https://www.mongodb.com/try/download/community&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Anpassungen_von_Anwendungen_nach_Debian_Bookworm_Upgrade&amp;diff=6375</id>
		<title>Anpassungen von Anwendungen nach Debian Bookworm Upgrade</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Anpassungen_von_Anwendungen_nach_Debian_Bookworm_Upgrade&amp;diff=6375"/>
		<updated>2024-01-30T09:18:01Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: Sprachliche Überarbeitung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Wer ist für was verantwortlich? ==&lt;br /&gt;
&lt;br /&gt;
Die Hostmaster aktualisieren das Betriebssytem. &lt;br /&gt;
&lt;br /&gt;
Die Mitglieder sind für den Betrieb der eigenen Anwendungen im Userspace verantwortlich. Da dazu keine besonderen Rechte erforderlich sind, können die notwendigen Anpassungen vom technisch versierten Mitglied selbst vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Wenn das Mitglied die Anpassungen nicht selbst vornehmen kann oder will, kann ein [https://www.hostsharing.net/service/webmaster-on-demand/ Webmaster On Demand (WoD)] Auftrag erteilt werden, damit ein Hostmaster eine Anwendung wieder zum Laufen bringt. Schreibt bitte einfach eine E-Mail an service@ und nennt die Anwendung, um die es geht, und in welchem Benutzer die Anwendung läuft.&lt;br /&gt;
&lt;br /&gt;
Auf dieser Seite teilen wir Anleitungen, wie man die eigene Anwendung selbst wieder zum Laufen bringt.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Python-Anwendungen ==&lt;br /&gt;
&lt;br /&gt;
 {{Textkasten|gelb|Achtung|Python 2.7 steht unter Debian 12 (&amp;quot;Bookworm&amp;quot;) nicht mehr zur Verfügung!}}&lt;br /&gt;
&lt;br /&gt;
Nach dem Upgrade müssen die meisten Python-Anwendungen angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Dazu muss das Virtual Environment gelöscht und neu angelegt werden, am besten mit der Standard Python-Version von Debian 12 (Bookworm). Das ist Python 3.11&lt;br /&gt;
&lt;br /&gt;
Falls die Anwendung noch nicht mit Python 3.11 zurecht kommt, kann mit pyenv auch eine ältere Python-Version, z.B. 3.10 installiert werden: [[Eigenes_Python_installieren#Installation_mit_pyenv]]&lt;br /&gt;
&lt;br /&gt;
Falls bereits mit pyenv eine eigene Python-Version installiert worden war, sollte diese gelöscht und nochmals installiert werden. Eventuell ist eine selbst installierte Python-Version aber auch nicht mehr nötig, und es kann mit der Version Python 3.11 vom Betriebssystem gearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
In der .profile oder .bash_profile sollte diese Variable gesetzt werden:&lt;br /&gt;
&lt;br /&gt;
  export PYTHONIOENCODING=utf-8&lt;br /&gt;
&lt;br /&gt;
=== Änderungen beim Einsatz von Passenger und Python ===&lt;br /&gt;
&lt;br /&gt;
Das Verhalten von Passenger auf Debian 12 Bookworm hat sich geändert: Es können nicht mehr die Parameter &amp;lt;code&amp;gt;PassengerPython&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;PassengerFriendlyErrorPages&amp;lt;/code&amp;gt; in der &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt;-Datei gesetzt werden. Das führt zu einem 500er Fehler.&lt;br /&gt;
&lt;br /&gt;
Falls ein Virtual Environment benutzt wird, sollte folgender Eintrag in der &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt; Datei gesetzt werden:&lt;br /&gt;
&lt;br /&gt;
    SetEnv PYTHONPATH /home/pacs/xyz00/users/example/meinprojekt&lt;br /&gt;
&lt;br /&gt;
Desweiteren sollte der Pfad zum Python-Binärprogramm in den Eigenschaften der Domain in HSAdmin konfiguriert werden, unter PassengerPython: z.B. &amp;lt;code&amp;gt;/home/pacs/xyz00/users/example/.pyenv/versions/3.9.18/bin/python3&amp;lt;/code&amp;gt;, oder bei einem Virtual Environment: &amp;lt;code&amp;gt;/home/pacs/xyz00/users/example/meinprojekt/.venv/bin/python3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Versionsnummer, User und Paket im Pfad anpassen)&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an PHP Anwendungen ==&lt;br /&gt;
&lt;br /&gt;
 {{Textkasten|gelb|Achtung|Unter Debian 12 (&amp;quot;Bookworm&amp;quot;) ist PHP 8.2 die Default Version. PHP 7.4 bleibt installiert.&amp;lt;br/&amp;gt;&lt;br /&gt;
Auf Anfrage stellen wir auch PHP 8.0 und PHP 8.1 zur Verfügung.}}&lt;br /&gt;
&lt;br /&gt;
In der .htaccess Datei müssen die Zeilen mit AddType und Action für PHP entfernt werden:&lt;br /&gt;
&lt;br /&gt;
  nano doms/meinedomain.de/.htaccess&lt;br /&gt;
          # diese Zeilen entfernen:&lt;br /&gt;
          AddType application/x-httpd-php81 .php&lt;br /&gt;
          Action application/x-httpd-php81 /fastcgi-bin/phpstub81&lt;br /&gt;
&lt;br /&gt;
Wenn bisher nur der voreingestellte phpstub verwendet wurde, lief die Seite bisher auf PHP 7.4. Nun würde sie auf PHP 8.2 laufen. Falls die Anwendung das nicht unterstützt, muss für die Domain in HSAdmin die gewünschte PHP Version in der Liste bei &amp;quot;FastCGI PHP-Interpreter&amp;quot; gewählt werden.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Ruby Anwendungen ==&lt;br /&gt;
&lt;br /&gt;
Die meisten Ruby Anwendungen werden mit rbenv betrieben. Das funktioniert nach dem Upgrade auf Debian 12 Bookworm nicht mehr, wegen Inkompatibilitäten bei der OpenSSL-Bibliothek. &lt;br /&gt;
&lt;br /&gt;
Daher muss die rbenv-Umgebung neu installiert werden, siehe [[RubyRBEnv]].&lt;br /&gt;
&lt;br /&gt;
Es müssen auch meistens die Ruby Gems neu installiert werden.&lt;br /&gt;
&lt;br /&gt;
  # erst löschen&lt;br /&gt;
  rm -Rf ~/.gem/&lt;br /&gt;
  rm -Rf ~/.bundle&lt;br /&gt;
  rm -Rf ~/.local/state/gem/&lt;br /&gt;
  &lt;br /&gt;
  # dann installieren&lt;br /&gt;
  cd meineapp # z.B. zammad&lt;br /&gt;
  export RAILS_ENV=&amp;quot;production&amp;quot;&lt;br /&gt;
  bundle install&lt;br /&gt;
&lt;br /&gt;
Falls &#039;&#039;&#039;Passenger&#039;&#039;&#039; zum Einsatz kommt: Das Verhalten von Passenger hat sich geändert. Einträge mit Passenger dürfen nicht mehr in &amp;lt;code&amp;gt;doms/meinedomain.de/.htaccess&amp;lt;/code&amp;gt; stehen. Sie müssen dort auskommentiert werden.&lt;br /&gt;
&lt;br /&gt;
In HSAdmin kann im Dialog &amp;quot;Domain ändern&amp;quot; eingestellt werden, welche Ruby Version verwendet werden soll.&lt;br /&gt;
Es kann entweder die vorinstallierte Ruby Version verwendet werden, oder eine Ruby Version unter einem Pfad wie &amp;lt;code&amp;gt;/home/pacs/xyz00/users/example/.rbenv/shims/ruby&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Node.js Anwendungen ==&lt;br /&gt;
Es muss das Verzeichns &amp;lt;code&amp;gt;.nvm&amp;lt;/code&amp;gt; im Home Verzeichnis gelöscht werden, und &amp;lt;code&amp;gt;node_modules&amp;lt;/code&amp;gt; im Projekt.&lt;br /&gt;
&lt;br /&gt;
Dann Node wieder neu installieren, siehe [[NodeJS]].&lt;br /&gt;
&lt;br /&gt;
Dann &amp;lt;code&amp;gt;yarn install&amp;lt;/code&amp;gt; bzw andere Befehle ausführen, um die Node Module wieder zu installieren.&lt;br /&gt;
&lt;br /&gt;
Falls &#039;&#039;&#039;Passenger&#039;&#039;&#039; zum Einsatz kommt, da hat sich das Verhalten von Passenger geändert. Die Einträge mit Passenger dürfen nicht mehr in &amp;lt;code&amp;gt;doms/meinedomain.de/.htaccess&amp;lt;/code&amp;gt; stehen, und müssen dort auskommentiert werden.&lt;br /&gt;
&lt;br /&gt;
In HSAdmin kann im Dialog &amp;quot;Domain ändern&amp;quot; eingestellt werden, welche Node Version verwendet werden soll.&lt;br /&gt;
Es kann entweder die vorinstallierte Node Version verwendet werden, oder eine Node Version unter dem Pfad z.B. &amp;lt;code&amp;gt;/home/pacs/xyz00/users/example/.nvm/versions/node/v20.11.0/bin/node&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Java Anwendungen ==&lt;br /&gt;
=== Eigenes Java JDK installieren ===&lt;br /&gt;
Auf Debian Buster lief lief Java 11. Auf Debian Bookworm steht Java 17 zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Für Anwendungen, die weiterhin Java 11 benötigen, kann es pro User oder pro Paket installiert werden.&lt;br /&gt;
&lt;br /&gt;
Ältere JDKs können hier als Binary für Linux/x64 heruntergeladen werden: https://jdk.java.net/archive/&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für JDK 11:&lt;br /&gt;
&lt;br /&gt;
   mkdir ~/bin&lt;br /&gt;
   cd bin&lt;br /&gt;
   wget https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz&lt;br /&gt;
   tar xzf openjdk-11.0.2_linux-x64_bin.tar.gz&lt;br /&gt;
&lt;br /&gt;
Eine weitere zuverlässige Quelle für eine freie Distribution des OpenJDK ist die Eclipse Foundation: https://adoptium.net/de/&lt;br /&gt;
&lt;br /&gt;
Dann muss z.B. im Tomcat (z.B. bin/setenv.sh) oder in der systemd Service Datei die Variable JAVA_HOME gesetzt werden:&lt;br /&gt;
&lt;br /&gt;
    JAVA_HOME=/home/pacs/xyz00/users/meinuser/bin/jdk-11&lt;br /&gt;
&lt;br /&gt;
=== Eigenen Tomcat installieren ===&lt;br /&gt;
&lt;br /&gt;
Bei Debian Buster lief Tomcat 9, auf Debian Bookworm steht Tomcat 10 zur Verfügung. Die beiden Versionen sind nicht kompatibel. Tomcat 9 implementiert Java EE 8; bei Tomcat 10 ist es Jakarta EE 9. Aus lizenzrechtlichen Gründen wurden alle Java-Packages aus den Java-EE-Spezifikationen von &amp;lt;code&amp;gt;javax.&amp;lt;/code&amp;gt; nach &amp;lt;code&amp;gt;jakarta.&amp;lt;/code&amp;gt; umbenannt.&lt;br /&gt;
&lt;br /&gt;
Für eigene Anwendungen empfehlen wir, die Software entsprechend anzupassen und neu zu kompilieren. Für Software aus anderen Quellen kann das Tool &amp;lt;code&amp;gt;javax2jakarta&amp;lt;/code&amp;gt; diesen Schritt in der Regel leisten.&lt;br /&gt;
&lt;br /&gt;
Wenn die Migration nicht möglich oder nicht gewünscht ist, kann leicht ein vollständiger Tomcat 9 pro User installiert werden.&lt;br /&gt;
&lt;br /&gt;
Ältere Versionen von Tomcat sind hier zu finden: https://tomcat.apache.org/download-90.cgi&lt;br /&gt;
&lt;br /&gt;
    mv tomcat tomcat.bak&lt;br /&gt;
    wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.84/bin/apache-tomcat-9.0.84.tar.gz&lt;br /&gt;
    mv apache-tomcat-9.0.84 tomcat&lt;br /&gt;
    cp tomcat.bak/conf/server.xml tomcat/conf/&lt;br /&gt;
    cp tomcat.bak/conf/setenv.sh tomcat/conf/&lt;br /&gt;
    cp -R tomcat.bak/webapps tomcat&lt;br /&gt;
&lt;br /&gt;
Darauf achten, ob noch weitere Konfigurationsdateien kopiert werden müssen, und Anpassungen an der context.xml und web.xml übernommen werden müssen.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Redis Diensten ==&lt;br /&gt;
&lt;br /&gt;
Falls ein Redis Dienst läuft, bitte kontrollieren, ob er noch richtig funktioniert.&lt;br /&gt;
&lt;br /&gt;
Gegebenenfalls müssen in der Datei &amp;lt;code&amp;gt;redis.conf&amp;lt;/code&amp;gt; die relativen Pfade zu absoluten Pfaden geändert werden, wenn die nicht schon bereits absolute Pfade sind (z.B. &amp;lt;code&amp;gt;logfile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;unixsocket&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Aktualisierung von MongoDB ==&lt;br /&gt;
&lt;br /&gt;
MongoDB wird bei uns nicht vom Betriebssystem bereitgestellt.&lt;br /&gt;
&lt;br /&gt;
Falls MongoDB verwendet wird, müssen neue Binaries heruntergeladen werden. Dabei ist die Version für Ubuntu 22.04 zu verwenden, da es keine Version für Debian 12 (Bookworm) gibt: siehe https://www.mongodb.com/try/download/community&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Anpassungen_von_Anwendungen_nach_Debian_Bookworm_Upgrade&amp;diff=6374</id>
		<title>Anpassungen von Anwendungen nach Debian Bookworm Upgrade</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Anpassungen_von_Anwendungen_nach_Debian_Bookworm_Upgrade&amp;diff=6374"/>
		<updated>2024-01-30T09:05:29Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: Sprachliche Überarbeitung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Wer ist für was verantwortlich? ==&lt;br /&gt;
&lt;br /&gt;
Die Hostmaster aktualisieren das Betriebssytem. &lt;br /&gt;
&lt;br /&gt;
Die Mitglieder sind für den Betrieb der eigenen Anwendungen im Userspace verantwortlich. Da dazu keine besonderen Rechte erforderlich sind, können die notwendigen Anpassungen vom technisch versierten Mitglied selbst vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Wenn das Mitglied die Anpassungen nicht selbst vornehmen kann oder will, kann ein [https://www.hostsharing.net/service/webmaster-on-demand/ Webmaster On Demand (WoD)] Auftrag erteilt werden, damit ein Hostmaster eine Anwendung wieder zum Laufen bringt. Schreibt bitte einfach eine E-Mail an service@ und nennt die Anwendung, um die es geht, und in welchem Benutzer die Anwendung läuft.&lt;br /&gt;
&lt;br /&gt;
Auf dieser Seite teilen wir Anleitungen, wie man die eigene Anwendung selbst wieder zum Laufen bringt.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Python-Anwendungen ==&lt;br /&gt;
&lt;br /&gt;
 {{Textkasten|gelb|Achtung|Python 2.7 steht unter Debian 12 (&amp;quot;Bookworm&amp;quot;) nicht mehr zur Verfügung!}}&lt;br /&gt;
&lt;br /&gt;
Nach dem Upgrade müssen die meisten Python-Anwendungen angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Dazu muss das Virtual Environment gelöscht und neu angelegt werden, am besten mit der Standard Python-Version von Debian 12 (Bookworm). Das ist Python 3.11&lt;br /&gt;
&lt;br /&gt;
Falls die Anwendung noch nicht mit Python 3.11 zurecht kommt, kann mit pyenv auch eine ältere Python-Version, z.B. 3.10 installiert werden: [[Eigenes_Python_installieren#Installation_mit_pyenv]]&lt;br /&gt;
&lt;br /&gt;
Falls bereits mit pyenv eine eigene Python-Version installiert worden war, sollte diese gelöscht und nochmals installiert werden. Eventuell ist eine selbst installierte Python-Version aber auch nicht mehr nötig, und es kann mit der Version Python 3.11 vom Betriebssystem gearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
In der .profile oder .bash_profile sollte diese Variable gesetzt werden:&lt;br /&gt;
&lt;br /&gt;
  export PYTHONIOENCODING=utf-8&lt;br /&gt;
&lt;br /&gt;
=== Änderungen beim Einsatz von Passenger und Python ===&lt;br /&gt;
&lt;br /&gt;
Das Verhalten von Passenger auf Debian 12 Bookworm hat sich geändert: Es können nicht mehr die Parameter &amp;lt;code&amp;gt;PassengerPython&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;PassengerFriendlyErrorPages&amp;lt;/code&amp;gt; in der &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt;-Datei gesetzt werden. Das führt zu einem 500er Fehler.&lt;br /&gt;
&lt;br /&gt;
Falls ein Virtual Environment benutzt wird, sollte folgender Eintrag in der &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt; Datei gesetzt werden:&lt;br /&gt;
&lt;br /&gt;
    SetEnv PYTHONPATH /home/pacs/xyz00/users/example/meinprojekt&lt;br /&gt;
&lt;br /&gt;
Desweiteren sollte der Pfad zum Python-Binärprogramm in den Eigenschaften der Domain in HSAdmin konfiguriert werden, unter PassengerPython: z.B. &amp;lt;code&amp;gt;/home/pacs/xyz00/users/example/.pyenv/versions/3.9.18/bin/python3&amp;lt;/code&amp;gt;, oder bei einem Virtual Environment: &amp;lt;code&amp;gt;/home/pacs/xyz00/users/example/meinprojekt/.venv/bin/python3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Versionsnummer, User und Paket im Pfad anpassen)&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an PHP Anwendungen ==&lt;br /&gt;
&lt;br /&gt;
 {{Textkasten|gelb|Achtung|Unter Debian 12 (&amp;quot;Bookworm&amp;quot;) ist PHP 8.2 die Default Version. PHP 7.4 bleibt installiert.&amp;lt;br/&amp;gt;&lt;br /&gt;
Auf Anfrage stellen wir auch PHP 8.0 und PHP 8.1 zur Verfügung.}}&lt;br /&gt;
&lt;br /&gt;
In der .htaccess Datei müssen die Zeilen mit AddType und Action für PHP entfernt werden:&lt;br /&gt;
&lt;br /&gt;
  nano doms/meinedomain.de/.htaccess&lt;br /&gt;
          # diese Zeilen entfernen:&lt;br /&gt;
          AddType application/x-httpd-php81 .php&lt;br /&gt;
          Action application/x-httpd-php81 /fastcgi-bin/phpstub81&lt;br /&gt;
&lt;br /&gt;
Wenn bisher nur der voreingestellte phpstub verwendet wurde, lief die Seite bisher auf PHP 7.4. Nun würde sie auf PHP 8.2 laufen. Falls die Anwendung das nicht unterstützt, muss für die Domain in HSAdmin die gewünschte PHP Version in der Liste bei &amp;quot;FastCGI PHP-Interpreter&amp;quot; gewählt werden.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Ruby Anwendungen ==&lt;br /&gt;
&lt;br /&gt;
Die meisten Ruby Anwendungen werden mit rbenv betrieben. Dieses funktioniert dann nicht mehr, wegen Inkompatibilitäten mit der openssl Bibliothek. &lt;br /&gt;
&lt;br /&gt;
Daher muss die rbenv Umgebung neu installiert werden. siehe [[RubyRBEnv]]&lt;br /&gt;
&lt;br /&gt;
Es müssen auch meistens die Ruby Gems neu installiert werden.&lt;br /&gt;
&lt;br /&gt;
  # erst löschen&lt;br /&gt;
  rm -Rf ~/.gem/&lt;br /&gt;
  rm -Rf ~/.bundle&lt;br /&gt;
  rm -Rf ~/.local/state/gem/&lt;br /&gt;
  &lt;br /&gt;
  # dann installieren&lt;br /&gt;
  cd meineapp # z.B. zammad&lt;br /&gt;
  export RAILS_ENV=&amp;quot;production&amp;quot;&lt;br /&gt;
  bundle install&lt;br /&gt;
&lt;br /&gt;
Falls &#039;&#039;&#039;Passenger&#039;&#039;&#039; zum Einsatz kommt, da hat sich das Verhalten von Passenger geändert. Die Einträge mit Passenger dürfen nicht mehr in &amp;lt;code&amp;gt;doms/meinedomain.de/.htaccess&amp;lt;/code&amp;gt; stehen, und müssen dort auskommentiert werden.&lt;br /&gt;
&lt;br /&gt;
In HSAdmin kann im Dialog &amp;quot;Domain ändern&amp;quot; eingestellt werden, welche Ruby Version verwendet werden soll.&lt;br /&gt;
Es kann entweder die vorinstallierte Ruby Version verwendet werden, oder eine Ruby Version unter dem Pfad z.B. &amp;lt;code&amp;gt;/home/pacs/xyz00/users/example/.rbenv/shims/ruby&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Node.js Anwendungen ==&lt;br /&gt;
Es muss das Verzeichns &amp;lt;code&amp;gt;.nvm&amp;lt;/code&amp;gt; im Home Verzeichnis gelöscht werden, und &amp;lt;code&amp;gt;node_modules&amp;lt;/code&amp;gt; im Projekt.&lt;br /&gt;
&lt;br /&gt;
Dann Node wieder neu installieren, siehe [[NodeJS]].&lt;br /&gt;
&lt;br /&gt;
Dann &amp;lt;code&amp;gt;yarn install&amp;lt;/code&amp;gt; bzw andere Befehle ausführen, um die Node Module wieder zu installieren.&lt;br /&gt;
&lt;br /&gt;
Falls &#039;&#039;&#039;Passenger&#039;&#039;&#039; zum Einsatz kommt, da hat sich das Verhalten von Passenger geändert. Die Einträge mit Passenger dürfen nicht mehr in &amp;lt;code&amp;gt;doms/meinedomain.de/.htaccess&amp;lt;/code&amp;gt; stehen, und müssen dort auskommentiert werden.&lt;br /&gt;
&lt;br /&gt;
In HSAdmin kann im Dialog &amp;quot;Domain ändern&amp;quot; eingestellt werden, welche Node Version verwendet werden soll.&lt;br /&gt;
Es kann entweder die vorinstallierte Node Version verwendet werden, oder eine Node Version unter dem Pfad z.B. &amp;lt;code&amp;gt;/home/pacs/xyz00/users/example/.nvm/versions/node/v20.11.0/bin/node&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Java Anwendungen ==&lt;br /&gt;
=== Eigenes Java JDK installieren ===&lt;br /&gt;
Auf Debian Buster lief lief Java 11. Auf Debian Bookworm steht Java 17 zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Für Anwendungen, die weiterhin Java 11 benötigen, kann es pro User oder pro Paket installiert werden.&lt;br /&gt;
&lt;br /&gt;
Ältere JDKs können hier als Binary für Linux/x64 heruntergeladen werden: https://jdk.java.net/archive/&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für JDK 11:&lt;br /&gt;
&lt;br /&gt;
   mkdir ~/bin&lt;br /&gt;
   cd bin&lt;br /&gt;
   wget https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz&lt;br /&gt;
   tar xzf openjdk-11.0.2_linux-x64_bin.tar.gz&lt;br /&gt;
&lt;br /&gt;
Eine weitere zuverlässige Quelle für eine freie Distribution des OpenJDK ist die Eclipse Foundation: https://adoptium.net/de/&lt;br /&gt;
&lt;br /&gt;
Dann muss z.B. im Tomcat (z.B. bin/setenv.sh) oder in der systemd Service Datei die Variable JAVA_HOME gesetzt werden:&lt;br /&gt;
&lt;br /&gt;
    JAVA_HOME=/home/pacs/xyz00/users/meinuser/bin/jdk-11&lt;br /&gt;
&lt;br /&gt;
=== Eigenen Tomcat installieren ===&lt;br /&gt;
&lt;br /&gt;
Bei Debian Buster lief Tomcat 9, auf Debian Bookworm steht Tomcat 10 zur Verfügung. Die beiden Versionen sind nicht kompatibel. Tomcat 9 implementiert Java EE 8; bei Tomcat 10 ist es Jakarta EE 9. Aus lizenzrechtlichen Gründen wurden alle Java-Packages aus den Java-EE-Spezifikationen von &amp;lt;code&amp;gt;javax.&amp;lt;/code&amp;gt; nach &amp;lt;code&amp;gt;jakarta.&amp;lt;/code&amp;gt; umbenannt.&lt;br /&gt;
&lt;br /&gt;
Für eigene Anwendungen empfehlen wir, die Software entsprechend anzupassen und neu zu kompilieren. Für Software aus anderen Quellen kann das Tool &amp;lt;code&amp;gt;javax2jakarta&amp;lt;/code&amp;gt; diesen Schritt in der Regel leisten.&lt;br /&gt;
&lt;br /&gt;
Wenn die Migration nicht möglich oder nicht gewünscht ist, kann leicht ein vollständiger Tomcat 9 pro User installiert werden.&lt;br /&gt;
&lt;br /&gt;
Ältere Versionen von Tomcat sind hier zu finden: https://tomcat.apache.org/download-90.cgi&lt;br /&gt;
&lt;br /&gt;
    mv tomcat tomcat.bak&lt;br /&gt;
    wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.84/bin/apache-tomcat-9.0.84.tar.gz&lt;br /&gt;
    mv apache-tomcat-9.0.84 tomcat&lt;br /&gt;
    cp tomcat.bak/conf/server.xml tomcat/conf/&lt;br /&gt;
    cp tomcat.bak/conf/setenv.sh tomcat/conf/&lt;br /&gt;
    cp -R tomcat.bak/webapps tomcat&lt;br /&gt;
&lt;br /&gt;
Darauf achten, ob noch weitere Konfigurationsdateien kopiert werden müssen, und Anpassungen an der context.xml und web.xml übernommen werden müssen.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Redis Diensten ==&lt;br /&gt;
&lt;br /&gt;
Falls ein Redis Dienst läuft, bitte kontrollieren, ob er noch richtig funktioniert.&lt;br /&gt;
&lt;br /&gt;
Gegebenenfalls müssen in der Datei &amp;lt;code&amp;gt;redis.conf&amp;lt;/code&amp;gt; die relativen Pfade zu absoluten Pfaden geändert werden, wenn die nicht schon bereits absolute Pfade sind (z.B. &amp;lt;code&amp;gt;logfile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;unixsocket&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Aktualisierung von MongoDB ==&lt;br /&gt;
&lt;br /&gt;
MongoDB wird bei uns nicht vom Betriebssystem bereitgestellt.&lt;br /&gt;
&lt;br /&gt;
Falls MongoDB verwendet wird, müssen neue Binaries heruntergeladen werden. Dabei ist die Version für Ubuntu 22.04 zu verwenden, da es keine Version für Debian 12 (Bookworm) gibt: siehe https://www.mongodb.com/try/download/community&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Anpassungen_von_Anwendungen_nach_Debian_Bookworm_Upgrade&amp;diff=6373</id>
		<title>Anpassungen von Anwendungen nach Debian Bookworm Upgrade</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Anpassungen_von_Anwendungen_nach_Debian_Bookworm_Upgrade&amp;diff=6373"/>
		<updated>2024-01-30T08:58:08Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: Sprachliche Überarbeitung&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Wer ist für was verantwortlich? ==&lt;br /&gt;
&lt;br /&gt;
Die Hostmaster aktualisieren das Betriebssytem. &lt;br /&gt;
&lt;br /&gt;
Die Mitglieder sind für den Betrieb der eigenen Anwendungen im Userspace verantwortlich. Da dazu keine besonderen Rechte erforderlich sind, können die notwendigen Anpassungen vom technisch versierten Mitglied selbst vorgenommen werden. &lt;br /&gt;
&lt;br /&gt;
Wenn das Mitglied die Anpassungen nicht selbst vornehmen kann oder will, kann ein [https://www.hostsharing.net/service/webmaster-on-demand/ Webmaster On Demand (WoD)] Auftrag erteilt werden, damit ein Hostmaster eine Anwendung wieder zum Laufen bringt. Schreibt bitte einfach eine E-Mail an service@ und nennt die Anwendung, um die es geht, und in welchem Benutzer die Anwendung läuft.&lt;br /&gt;
&lt;br /&gt;
Auf dieser Seite teilen wir Anleitungen, wie man die eigene Anwendung selbst wieder zum Laufen bringt.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Python Anwendungen ==&lt;br /&gt;
&lt;br /&gt;
 {{Textkasten|gelb|Achtung|Python 2.7 steht unter Debian 12 (&amp;quot;Bookworm&amp;quot;) nicht mehr zur Verfügung!}}&lt;br /&gt;
&lt;br /&gt;
Nach dem Upgrade müssen die meisten Python Anwendungen angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Dann muss das Virtual Environment gelöscht und neu angelegt werden, am besten mit der Standard Python Version von Debian, bei Bookworm ist das Python 3.11&lt;br /&gt;
&lt;br /&gt;
Falls die Anwendung noch nicht mit Python 3.11 zurecht kommt, kann mit pyenv auch eine ältere Python Version, z.B. 3.10 installiert werden: [[Eigenes_Python_installieren#Installation_mit_pyenv]]&lt;br /&gt;
&lt;br /&gt;
Falls bereits mit pyenv eine andere Python Version installiert worden war, sollte diese gelöscht und nochmals installiert werden. Evtl. ist das aber auch nicht mehr nötig, und es kann mit der Version Python 3.11 vom Betriebssystem gearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
Es sollte in der .profile oder .bash_profile diese Variable gesetzt werden:&lt;br /&gt;
&lt;br /&gt;
  export PYTHONIOENCODING=utf-8&lt;br /&gt;
&lt;br /&gt;
=== Änderungen beim Einsatz von Passenger und Python ===&lt;br /&gt;
Falls Passenger zum Einsatz kommt, da hat sich das Verhalten von Passenger geändert: Es können nicht mehr &amp;lt;code&amp;gt;PassengerPython&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;PassengerFriendlyErrorPages&amp;lt;/code&amp;gt; in der &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt; Datei gesetzt werden. Das führt zu einem 500er Fehler.&lt;br /&gt;
&lt;br /&gt;
Falls ein Virtual Environment benutzt wird, sollte folgender Eintrag in der &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt; Datei gesetzt werden:&lt;br /&gt;
&lt;br /&gt;
    SetEnv PYTHONPATH /home/pacs/xyz00/users/example/meinprojekt&lt;br /&gt;
&lt;br /&gt;
Desweiteren sollte der Pfad zum Python-Binärprogramm in den Eigenschaften der Domain in HSAdmin konfiguriert werden, unter PassengerPython: z.B. &amp;lt;code&amp;gt;/home/pacs/xyz00/users/example/.pyenv/versions/3.9.18/bin/python3&amp;lt;/code&amp;gt;, oder bei einem Virtual Environment: &amp;lt;code&amp;gt;/home/pacs/xyz00/users/example/meinprojekt/.venv/bin/python3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Versionsnummer, User und Paket im Pfad anpassen)&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an PHP Anwendungen ==&lt;br /&gt;
&lt;br /&gt;
 {{Textkasten|gelb|Achtung|Unter Debian 12 (&amp;quot;Bookworm&amp;quot;) ist PHP 8.2 die Default Version. PHP 7.4 bleibt installiert.&amp;lt;br/&amp;gt;&lt;br /&gt;
Auf Anfrage stellen wir auch PHP 8.0 und PHP 8.1 zur Verfügung.}}&lt;br /&gt;
&lt;br /&gt;
In der .htaccess Datei müssen die Zeilen mit AddType und Action für PHP entfernt werden:&lt;br /&gt;
&lt;br /&gt;
  nano doms/meinedomain.de/.htaccess&lt;br /&gt;
          # diese Zeilen entfernen:&lt;br /&gt;
          AddType application/x-httpd-php81 .php&lt;br /&gt;
          Action application/x-httpd-php81 /fastcgi-bin/phpstub81&lt;br /&gt;
&lt;br /&gt;
Wenn bisher nur der voreingestellte phpstub verwendet wurde, lief die Seite bisher auf PHP 7.4. Nun würde sie auf PHP 8.2 laufen. Falls die Anwendung das nicht unterstützt, muss für die Domain in HSAdmin die gewünschte PHP Version in der Liste bei &amp;quot;FastCGI PHP-Interpreter&amp;quot; gewählt werden.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Ruby Anwendungen ==&lt;br /&gt;
&lt;br /&gt;
Die meisten Ruby Anwendungen werden mit rbenv betrieben. Dieses funktioniert dann nicht mehr, wegen Inkompatibilitäten mit der openssl Bibliothek. &lt;br /&gt;
&lt;br /&gt;
Daher muss die rbenv Umgebung neu installiert werden. siehe [[RubyRBEnv]]&lt;br /&gt;
&lt;br /&gt;
Es müssen auch meistens die Ruby Gems neu installiert werden.&lt;br /&gt;
&lt;br /&gt;
  # erst löschen&lt;br /&gt;
  rm -Rf ~/.gem/&lt;br /&gt;
  rm -Rf ~/.bundle&lt;br /&gt;
  rm -Rf ~/.local/state/gem/&lt;br /&gt;
  &lt;br /&gt;
  # dann installieren&lt;br /&gt;
  cd meineapp # z.B. zammad&lt;br /&gt;
  export RAILS_ENV=&amp;quot;production&amp;quot;&lt;br /&gt;
  bundle install&lt;br /&gt;
&lt;br /&gt;
Falls &#039;&#039;&#039;Passenger&#039;&#039;&#039; zum Einsatz kommt, da hat sich das Verhalten von Passenger geändert. Die Einträge mit Passenger dürfen nicht mehr in &amp;lt;code&amp;gt;doms/meinedomain.de/.htaccess&amp;lt;/code&amp;gt; stehen, und müssen dort auskommentiert werden.&lt;br /&gt;
&lt;br /&gt;
In HSAdmin kann im Dialog &amp;quot;Domain ändern&amp;quot; eingestellt werden, welche Ruby Version verwendet werden soll.&lt;br /&gt;
Es kann entweder die vorinstallierte Ruby Version verwendet werden, oder eine Ruby Version unter dem Pfad z.B. &amp;lt;code&amp;gt;/home/pacs/xyz00/users/example/.rbenv/shims/ruby&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Node.js Anwendungen ==&lt;br /&gt;
Es muss das Verzeichns &amp;lt;code&amp;gt;.nvm&amp;lt;/code&amp;gt; im Home Verzeichnis gelöscht werden, und &amp;lt;code&amp;gt;node_modules&amp;lt;/code&amp;gt; im Projekt.&lt;br /&gt;
&lt;br /&gt;
Dann Node wieder neu installieren, siehe [[NodeJS]].&lt;br /&gt;
&lt;br /&gt;
Dann &amp;lt;code&amp;gt;yarn install&amp;lt;/code&amp;gt; bzw andere Befehle ausführen, um die Node Module wieder zu installieren.&lt;br /&gt;
&lt;br /&gt;
Falls &#039;&#039;&#039;Passenger&#039;&#039;&#039; zum Einsatz kommt, da hat sich das Verhalten von Passenger geändert. Die Einträge mit Passenger dürfen nicht mehr in &amp;lt;code&amp;gt;doms/meinedomain.de/.htaccess&amp;lt;/code&amp;gt; stehen, und müssen dort auskommentiert werden.&lt;br /&gt;
&lt;br /&gt;
In HSAdmin kann im Dialog &amp;quot;Domain ändern&amp;quot; eingestellt werden, welche Node Version verwendet werden soll.&lt;br /&gt;
Es kann entweder die vorinstallierte Node Version verwendet werden, oder eine Node Version unter dem Pfad z.B. &amp;lt;code&amp;gt;/home/pacs/xyz00/users/example/.nvm/versions/node/v20.11.0/bin/node&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Java Anwendungen ==&lt;br /&gt;
=== Eigenes Java JDK installieren ===&lt;br /&gt;
Auf Debian Buster lief lief Java 11. Auf Debian Bookworm steht Java 17 zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Für Anwendungen, die weiterhin Java 11 benötigen, kann es pro User oder pro Paket installiert werden.&lt;br /&gt;
&lt;br /&gt;
Ältere JDKs können hier als Binary für Linux/x64 heruntergeladen werden: https://jdk.java.net/archive/&lt;br /&gt;
&lt;br /&gt;
Ein Beispiel für JDK 11:&lt;br /&gt;
&lt;br /&gt;
   mkdir ~/bin&lt;br /&gt;
   cd bin&lt;br /&gt;
   wget https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz&lt;br /&gt;
   tar xzf openjdk-11.0.2_linux-x64_bin.tar.gz&lt;br /&gt;
&lt;br /&gt;
Eine weitere zuverlässige Quelle für eine freie Distribution des OpenJDK ist die Eclipse Foundation: https://adoptium.net/de/&lt;br /&gt;
&lt;br /&gt;
Dann muss z.B. im Tomcat (z.B. bin/setenv.sh) oder in der systemd Service Datei die Variable JAVA_HOME gesetzt werden:&lt;br /&gt;
&lt;br /&gt;
    JAVA_HOME=/home/pacs/xyz00/users/meinuser/bin/jdk-11&lt;br /&gt;
&lt;br /&gt;
=== Eigenen Tomcat installieren ===&lt;br /&gt;
&lt;br /&gt;
Bei Debian Buster lief Tomcat 9, auf Debian Bookworm steht Tomcat 10 zur Verfügung. Die beiden Versionen sind nicht kompatibel. Tomcat 9 implementiert Java EE 8; bei Tomcat 10 ist es Jakarta EE 9. Aus lizenzrechtlichen Gründen wurden alle Java-Packages aus den Java-EE-Spezifikationen von &amp;lt;code&amp;gt;javax.&amp;lt;/code&amp;gt; nach &amp;lt;code&amp;gt;jakarta.&amp;lt;/code&amp;gt; umbenannt.&lt;br /&gt;
&lt;br /&gt;
Für eigene Anwendungen empfehlen wir, die Software entsprechend anzupassen und neu zu kompilieren. Für Software aus anderen Quellen kann das Tool &amp;lt;code&amp;gt;javax2jakarta&amp;lt;/code&amp;gt; diesen Schritt in der Regel leisten.&lt;br /&gt;
&lt;br /&gt;
Wenn die Migration nicht möglich oder nicht gewünscht ist, kann leicht ein vollständiger Tomcat 9 pro User installiert werden.&lt;br /&gt;
&lt;br /&gt;
Ältere Versionen von Tomcat sind hier zu finden: https://tomcat.apache.org/download-90.cgi&lt;br /&gt;
&lt;br /&gt;
    mv tomcat tomcat.bak&lt;br /&gt;
    wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.84/bin/apache-tomcat-9.0.84.tar.gz&lt;br /&gt;
    mv apache-tomcat-9.0.84 tomcat&lt;br /&gt;
    cp tomcat.bak/conf/server.xml tomcat/conf/&lt;br /&gt;
    cp tomcat.bak/conf/setenv.sh tomcat/conf/&lt;br /&gt;
    cp -R tomcat.bak/webapps tomcat&lt;br /&gt;
&lt;br /&gt;
Darauf achten, ob noch weitere Konfigurationsdateien kopiert werden müssen, und Anpassungen an der context.xml und web.xml übernommen werden müssen.&lt;br /&gt;
&lt;br /&gt;
== Anpassungen an Redis Diensten ==&lt;br /&gt;
&lt;br /&gt;
Falls ein Redis Dienst läuft, bitte kontrollieren, ob er noch richtig funktioniert.&lt;br /&gt;
&lt;br /&gt;
Gegebenenfalls müssen in der Datei &amp;lt;code&amp;gt;redis.conf&amp;lt;/code&amp;gt; die relativen Pfade zu absoluten Pfaden geändert werden, wenn die nicht schon bereits absolute Pfade sind (z.B. &amp;lt;code&amp;gt;logfile&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;unixsocket&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dir&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Aktualisierung von MongoDB ==&lt;br /&gt;
&lt;br /&gt;
MongoDB wird bei uns nicht vom Betriebssystem bereitgestellt.&lt;br /&gt;
&lt;br /&gt;
Falls MongoDB verwendet wird, müssen neue Binaries heruntergeladen werden. Dabei ist die Version für Ubuntu 22.04 zu verwenden, da es keine Version für Debian 12 (Bookworm) gibt: siehe https://www.mongodb.com/try/download/community&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Hauptseite&amp;diff=6210</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Hauptseite&amp;diff=6210"/>
		<updated>2023-09-06T08:41:11Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HSDoku-Links}} __NOTOC__ &lt;br /&gt;
&lt;br /&gt;
== Willkommen im Hostsharing-Wiki! ==&lt;br /&gt;
... der &#039;&#039;&#039;inoffiziellen&#039;&#039;&#039; Dokumentation der Mitglieder von Hostsharing. Die wichtigsten Themen findest du in der Leiste oben. Alle Themen und Seiten des Wiki erreichst du am besten über die Kategorie [[:Kategorie:HSDoku|HSDoku]]. &lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;&#039;offizielle Kerndokumentation&#039;&#039;&#039; ist hier:&lt;br /&gt;
https://www.hostsharing.net/doc/&lt;br /&gt;
&lt;br /&gt;
Allgemeine Fragen zum Umgang mit den HS Diensten und Angeboten beantwortet die HS Community in der &#039;&#039;&#039;[https://lists.hostsharing.net/mailman/listinfo/support Support Mailingliste]&#039;&#039;&#039; mit der Mailadresse [mailto:support@hostsharing.net support@hostsharing.net].&lt;br /&gt;
&lt;br /&gt;
Fragen, die vertrauliche Themen behandeln (Domainnamen, Benutzernamen, Passwörter etc.) sollten direkt an den [[HS-Service]] gehen, der ansonsten kostenpflichtig ist. Ergänzende Hinweise finden sich in den [https://lists.hostsharing.net/archiv/global-announce/ Global Announces] der Hostmaster und des Vorstandes zu aktuellen Geschehnissen und technischen Änderungen bei Hostsharing. &lt;br /&gt;
&lt;br /&gt;
Du kannst dich mit deinen HS Userdaten einloggen und mithelfen, die Dokumentation zu verbessern. In unserem [[Autorenportal]] findest du Hinweise dazu, wie du dich beteiligen kannst. Was hier ins Wiki gehört, und wie es gemacht wird, ist unter [[Hilfe:Hostsharing_Wiki_Konventionen|Konventionen]] erklärt.&lt;br /&gt;
&lt;br /&gt;
Zum Testen und Rumspielen ist der [[Sandkasten]] da. Und nun viel Freude im Hostsharing Wiki :-)&lt;br /&gt;
&lt;br /&gt;
== Hostsharing Benefits ==&lt;br /&gt;
&lt;br /&gt;
Hostsharing.net ist die professionelle Alternative zur Administration eigener Root Server mit dem Bonus der Redundanz und des gemeinschaftlich organisierten Betriebes.&lt;br /&gt;
&lt;br /&gt;
[[Green Web Foundation | Ökostrom: Hostsharing ist gelistet bei der Green Web Foundation]]&lt;br /&gt;
&lt;br /&gt;
[[10 Missverständnisse über dedizierte root-Server | Rootserver Missverständnisse]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Rootserver Checkliste]]&lt;br /&gt;
&lt;br /&gt;
==Mastodon-Instanz für Mitglieder==&lt;br /&gt;
[[Einrichtung und Benutzung von Mastodon-Accounts auf https://hostsharing.coop]]&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Einrichtung des Crossposting Bots]]&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:Hostsharing Wiki]]&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Hauptseite&amp;diff=6209</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Hauptseite&amp;diff=6209"/>
		<updated>2023-09-06T08:40:34Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: Neue URL&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HSDoku-Links}} __NOTOC__ &lt;br /&gt;
&lt;br /&gt;
== Willkommen im Hostsharing-Wiki! ==&lt;br /&gt;
... der &#039;&#039;&#039;inoffiziellen&#039;&#039;&#039; Dokumentation der Mitglieder von Hostsharing. Die wichtigsten Themen findest du in der Leiste oben. Alle Themen und Seiten des Wiki erreichst du am besten über die Kategorie [[:Kategorie:HSDoku|HSDoku]]. &lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;&#039;offizielle Kerndokumentation&#039;&#039;&#039; ist hier:&lt;br /&gt;
https://www.hostsharing.net/doc&lt;br /&gt;
&lt;br /&gt;
Allgemeine Fragen zum Umgang mit den HS Diensten und Angeboten beantwortet die HS Community in der &#039;&#039;&#039;[https://lists.hostsharing.net/mailman/listinfo/support Support Mailingliste]&#039;&#039;&#039; mit der Mailadresse [mailto:support@hostsharing.net support@hostsharing.net].&lt;br /&gt;
&lt;br /&gt;
Fragen, die vertrauliche Themen behandeln (Domainnamen, Benutzernamen, Passwörter etc.) sollten direkt an den [[HS-Service]] gehen, der ansonsten kostenpflichtig ist. Ergänzende Hinweise finden sich in den [https://lists.hostsharing.net/archiv/global-announce/ Global Announces] der Hostmaster und des Vorstandes zu aktuellen Geschehnissen und technischen Änderungen bei Hostsharing. &lt;br /&gt;
&lt;br /&gt;
Du kannst dich mit deinen HS Userdaten einloggen und mithelfen, die Dokumentation zu verbessern. In unserem [[Autorenportal]] findest du Hinweise dazu, wie du dich beteiligen kannst. Was hier ins Wiki gehört, und wie es gemacht wird, ist unter [[Hilfe:Hostsharing_Wiki_Konventionen|Konventionen]] erklärt.&lt;br /&gt;
&lt;br /&gt;
Zum Testen und Rumspielen ist der [[Sandkasten]] da. Und nun viel Freude im Hostsharing Wiki :-)&lt;br /&gt;
&lt;br /&gt;
== Hostsharing Benefits ==&lt;br /&gt;
&lt;br /&gt;
Hostsharing.net ist die professionelle Alternative zur Administration eigener Root Server mit dem Bonus der Redundanz und des gemeinschaftlich organisierten Betriebes.&lt;br /&gt;
&lt;br /&gt;
[[Green Web Foundation | Ökostrom: Hostsharing ist gelistet bei der Green Web Foundation]]&lt;br /&gt;
&lt;br /&gt;
[[10 Missverständnisse über dedizierte root-Server | Rootserver Missverständnisse]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Rootserver Checkliste]]&lt;br /&gt;
&lt;br /&gt;
==Mastodon-Instanz für Mitglieder==&lt;br /&gt;
[[Einrichtung und Benutzung von Mastodon-Accounts auf https://hostsharing.coop]]&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Einrichtung des Crossposting Bots]]&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:Hostsharing Wiki]]&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=E-Mail&amp;diff=5862</id>
		<title>E-Mail</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=E-Mail&amp;diff=5862"/>
		<updated>2022-08-09T15:53:35Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HSDoku-Links}}&lt;br /&gt;
&lt;br /&gt;
{{Baustelle}}&lt;br /&gt;
&lt;br /&gt;
{{Kerndoku|https://doc.hostsharing.net/#kap-emails-lesen}}&lt;br /&gt;
&lt;br /&gt;
Die (auch das) &#039;&#039;&#039;E-Mail&#039;&#039;&#039; (kurz &#039;&#039;Mail&#039;&#039;, von englisch &#039;&#039;electronic mail&#039;&#039;: „elektronische Post“ oder „elektronischer Brief“), manchmal als &#039;&#039;&#039;E-Post&#039;&#039;&#039; oder &#039;&#039;&#039;E-Brief&#039;&#039;&#039; bezeichnet, ist eine auf elektronischem Weg in [[Rechnernetz|Computernetzwerken]] übertragene [[Nachricht]].&lt;br /&gt;
&lt;br /&gt;
E-Mail wird – noch vor dem [[World Wide Web]] – als wichtigster und meistgenutzter Dienst des [[Internet]]s angesehen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Weitergehende Konfigurationsmöglichkeiten ==&lt;br /&gt;
&lt;br /&gt;
* Es können [[Mailinglisten]] eingerichtet werden.&lt;br /&gt;
&lt;br /&gt;
* IMAP Konten lassen sich mit [[ImapCopy]] zu HS kopieren.&lt;br /&gt;
&lt;br /&gt;
== E-Mail-Infrastruktur ==&lt;br /&gt;
&lt;br /&gt;
Wir nutzen [http://www.postfix.org/ Postfix] als [[Mail Transfer Agent]](MTA) bzw. Mailserver. Diese Software dient dazu, eingehende Mails den lokalen Usern des Servers zuzuordnen, an interne oder externe Server zuzustellen.&lt;br /&gt;
&lt;br /&gt;
E-Mails werden vom Mailsystem im Verzeichnis Maildir des jeweiligen User-Accounts abgelegt (der Name ist systemweit eingestellt und kann nicht verändert werden). &lt;br /&gt;
&lt;br /&gt;
Damit sind die Mails im normalen Backup enthalten und gehen auch in die Quota des Paketes ein. Das Verzeichnis wird automatisch angelegt, wenn die erste E-Mail dort abgelegt wird. &lt;br /&gt;
&lt;br /&gt;
Ist das Verzeichnis Maildir nicht angelegt, liefern E-Mail-Clients oder Webmail-Clients aufgrund des fehlenden Verzeichnisses eine Fehlermeldung. &lt;br /&gt;
Dies kann verhindert werden, indem  auf der Shell in dem entsprechenden User-Account folgender Befehl ausführt wird:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; maildirmake Maildir&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Adressierung und Weiterleitungen ==&lt;br /&gt;
&lt;br /&gt;
Hostsharing unterscheidet zwischen E-Mail-Adresse und Mailbox.&lt;br /&gt;
&lt;br /&gt;
Eine E-Mail-Adresse gibt an, wie eine eingehende Nachricht auszuliefern ist.&lt;br /&gt;
&lt;br /&gt;
Eine Mailbox ist ein Ort, wo erhaltene E-Mails lagern, bis ein User sie lesen will,&lt;br /&gt;
typischerweise indem er mittels seiner Client-Software die Mails mit IMAP oder POP3&lt;br /&gt;
abholt und anzeigt.&lt;br /&gt;
&lt;br /&gt;
In Hostsharing hat jeder User, ob Paketadmin oder Paketuser, eine Mailbox. E-Mail-Adressen&lt;br /&gt;
können unabhängig von tatsächlichen Usern eingerichtet werden.&lt;br /&gt;
&lt;br /&gt;
=== E-Mail-Adressen ===&lt;br /&gt;
&lt;br /&gt;
Eine E-Mail-Adresse ist in Hostsharing eine&lt;br /&gt;
Kennung der üblichen Form &amp;lt;code&amp;gt;userimbreitestensinn@domain&amp;lt;/code&amp;gt;,&lt;br /&gt;
zusammen mit einer Zielangabe, das heißt, mit der Angabe, wohin eine mit dieser&lt;br /&gt;
Kennung adressierten E-Mail geliefert&lt;br /&gt;
werden soll. Bei Einrichtung einer E-Mail-Adresse in Hostsharing kann ein Ziel eine Mailbox&lt;br /&gt;
sein, oder aber eine andere E-Mail-Adresse (mit einer beliebigen Domain, ob bei Hostsharing&lt;br /&gt;
gehostet oder extern). Eine E-Mail-Adresse kann mehrere Ziele haben: dann wird die&lt;br /&gt;
eingehende Mail zur Auslieferung vervielfacht.&lt;br /&gt;
&lt;br /&gt;
Es werden n:m-Verknüpfungen zwischen E-Mail-Adressen und Mailboxen ermöglicht. Das heißt,&lt;br /&gt;
mehrere E-Mail-Adressen können dieselbe Mailbox als Ziel haben, und eine E-Mail-Adresse&lt;br /&gt;
kann mehrere Mailboxen als Ziele haben.&lt;br /&gt;
&lt;br /&gt;
=== E-Mail-Aliases ===&lt;br /&gt;
&lt;br /&gt;
Ein E-Mail-Alias ist, ähnlich wie eine E-Mail-Adresse, mit einer Angabe verbunden, wie&lt;br /&gt;
mit einer entsprechend adressierten E-Mail bei Eingang zu verfahren ist. Ein E-Mail-Alias&lt;br /&gt;
in Hostsharing ist nicht an eine bestimmte Domain gebunden, wohl aber an ein bestimmtes&lt;br /&gt;
Paket. Daher beginnen alle Aliase mit einem Pakennamen (plus Bindestrich) in der Form xyz00-... (Damit kann ein Alias gleichlautend mit der Mailbox eines Paketusers sein: in diesem Fall hat der Alias&lt;br /&gt;
Vorrang; eine so geleitete Mail wird nicht in die Mailbox geliefert, sondern entsprechend dem zum Alias gehörenden Ziel.)&lt;br /&gt;
&lt;br /&gt;
Das Ziel eines E-Mail-Alias ist &lt;br /&gt;
allerdings flexibler als das Ziel einer E-Mail-Adresse, und erlaubt beispielsweise, eingehende&lt;br /&gt;
Mails durch Programme verarbeiten zu lassen. Damit kann man unter anderem Mailverteiler flexibel definieren.&lt;br /&gt;
&lt;br /&gt;
Insgesamt kann man damit komplex E-Mail-Setups konfigurieren. E-Mail-Aliases werden deshalb als&lt;br /&gt;
Werkzeug für Administratoren angeboten; der Endverbraucher wird in der Regel keine Aliases benötigen.&lt;br /&gt;
&lt;br /&gt;
=== Formal ===&lt;br /&gt;
&lt;br /&gt;
==== E-Mail-Adresse ====&lt;br /&gt;
:Form = &amp;lt;code&amp;gt;localpart@domainpart&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:Beispiel = username@example.com&amp;lt;br /&amp;gt;&lt;br /&gt;
:Ziel = Liste von (mehreren):&lt;br /&gt;
:*    E-Mail-Adresse (intern oder extern)&lt;br /&gt;
:*    E-Mail-Alias&lt;br /&gt;
:*    Mailbox&lt;br /&gt;
&lt;br /&gt;
==== E-Mail-Alias ====&lt;br /&gt;
:Form = &amp;lt;code&amp;gt;xyz00-aliasname&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:Ziel = Liste von (mehreren):&lt;br /&gt;
:*   E-Mail-Adresse (intern oder extern)&lt;br /&gt;
:*   E-Mail-Alias&lt;br /&gt;
:*   Mailbox&lt;br /&gt;
:*   spezielle Funktion (Pipe, dateibasierter Verteiler, ...)&lt;br /&gt;
&lt;br /&gt;
==== Mailbox ====&lt;br /&gt;
:Form = &amp;lt;code&amp;gt;xyz00&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:Form = &amp;lt;code&amp;gt;xyz00-username&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:*kann per [[POP3]] und/oder [[IMAP]] abgerufen werden&lt;br /&gt;
:*kann per [[Sieve]] gefiltert werden&lt;br /&gt;
:*kann durch .forward-Datei(en) umgelenkt werden&lt;br /&gt;
&lt;br /&gt;
=== Bemerkungen ===&lt;br /&gt;
&lt;br /&gt;
Wenn E-Mail-Alias gleich wie eine Mailbox-Bezeichnung lautet,&lt;br /&gt;
hat der Alias Vorrang. Um ankommende E-Mails dennoch in die Mailbox liefern zu lassen, &lt;br /&gt;
kann als Ziel eines Aliases die Mailbox-Bezeichnung mit vorangestelltem Backslash&lt;br /&gt;
angegeben werden (z. B. &amp;quot;\xyz00-username&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== Outlook 2016, Outlook 2019, Outlook für Office 365 ===&lt;br /&gt;
&lt;br /&gt;
Outlook 2016, Outlook 2019, Outlook für Office 365 erfordern folgenden Registry-Patch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Windows Registry Editor Version 5.00&lt;br /&gt;
&lt;br /&gt;
[HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Setup]&lt;br /&gt;
&amp;quot;DisableOffice365SimplifiedAccountCreation&amp;quot;=dword:00000001&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der &amp;quot;DisableOffice365SimplifiedAccountCreation&amp;quot;-Patch reaktiviert die Dialoge zur Einrichtung von E-Mail-Konten früherer Outlook-Versionen. Diese Dialoge erlauben u.a. die manuelle Konfiguration der E-Mail-Konten. Implizit sorgt dieser Patch auch dafür, dass jüngere Outlook-Versionen, die über klassisches Autodiscover (XML-basiert) bereitgestellten Konfigurationsoptionen korrekt verarbeitet. In unseren Tests zeigte sich, dass jüngere Outlook-Versionen ohne diesen Patch nicht alle per Autodiscover bereitgestellten Informationen zur Anwendung bringen. Das neue Protokoll Autodiscover V2 (JSON-basiert) bietet - nach unserem Kenntnisstand - hingegen keine Möglichkeit, Konfigurationen für die Zugriffsprotokolle POP3, IMAP und SMTP zu übermitteln.&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Links ==&lt;br /&gt;
&lt;br /&gt;
[[HS-Mailrouting]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:E-Mail]]&lt;br /&gt;
[[Kategorie:Glossar]]&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=User&amp;diff=5861</id>
		<title>User</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=User&amp;diff=5861"/>
		<updated>2022-08-09T15:51:50Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: /* Passwort ändern auf der HSAdmin Webseite */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HSDoku-Links}}&lt;br /&gt;
&lt;br /&gt;
{{Kerndoku|https://doc.hostsharing.net}}&lt;br /&gt;
&lt;br /&gt;
== Passwort ändern auf der HSAdmin Webseite ==&lt;br /&gt;
&lt;br /&gt;
Siehe die Anleitung in der technischen Dokumentation: [https://doc.hostsharing.net/#kap-erstes-einloggen Änderung des Passworts]&lt;br /&gt;
&lt;br /&gt;
== Passwort ändern mit dem Programm passwd ==&lt;br /&gt;
&lt;br /&gt;
Das Passwort eines Users wird nicht in der hsadmin-Datenbank gespeichert, sondern in der Konfiguration des jeweiligen [[Hive]], auf dem das zugehörige [[Paket]] liegt. Daher kann es &#039;&#039;auch&#039;&#039; mit dem gängigen [[Shell]]-Befehl &#039;&#039;&#039;passwd&#039;&#039;&#039; geändert werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
xyz00@hopi:~$ passwd&lt;br /&gt;
&lt;br /&gt;
Changing password for mi&lt;br /&gt;
(current) UNIX password: ALTESPASSWORT&lt;br /&gt;
Enter new UNIX password: NEUESPASSWORT&lt;br /&gt;
Retype new UNIX password: NEUESPASSWORT&lt;br /&gt;
passwd: password updated successfully&lt;br /&gt;
&lt;br /&gt;
xyz00@hopi:~$ █&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Platzhalter NEUESPASSWORT und ALTESPASSWORT müssen dabei selbstverständlich gegen die entsprechenden Passworte ausgetauscht werden. Dabei sollte jedes Passwort mindestens 6 Zeichen lang sein, besser 8 Zeichen, und aus Buchstaben, Ziffern und ggf. Sonderzeichen bestehen. Auf Umlaute sollte verzichtet werden, da die Verwendung nicht mit allen Zugangswegen kompatibel ist.&lt;br /&gt;
&lt;br /&gt;
Ggf. kommt es zu Fehlermeldungen, z.B. wenn das neue Passwort zu simpel ist, oder bei der Wiederholung nicht identisch mit dem ersten Passwort ist. In dem Fall, den Vorgang einfach wiederholen. Solange das neue Passwort nicht erfolgreich übernommen wurde, bleibt das alte gültig.&lt;br /&gt;
&lt;br /&gt;
Es gibt User, denen der Paket-Admin nur das Recht eingeräumt hat, das eigene Passwort zu ändern, indem er ihnen die &amp;quot;Shell&amp;quot; /usr/bin/passwd zugewiesen hat. Diese User können durch einen Shell-Login nur ihr Passwort ändern, da das Programm passwd an Stelle einer Shell gestartet wird. Sie werden nach dem Einloggen automatisch auf diesen Dialog geführt.&lt;br /&gt;
&lt;br /&gt;
== Identitätswechsel ==&lt;br /&gt;
&lt;br /&gt;
Der Paketadmin kann mit&lt;br /&gt;
 sudo -u xyz00-user -i&lt;br /&gt;
die Rechte eines seiner Paketuser annehmen, ohne dessen Passwort kennen zu müssen. Für Paketuser, die als initiale Shell nur /bin/passwd eingetragen haben, ist&lt;br /&gt;
 sudo -u xyz00-user -s&lt;br /&gt;
zu verwenden, um in eine reguläre Shell zu kommen. Mit&lt;br /&gt;
 &amp;quot;su xyz00-user&amp;quot;&lt;br /&gt;
ist auch regulären Benutzern ein Identitätswechel (z.B. zum Paketadmin) möglich, wenn sie das aktuelle Passwort des Zielaccounts kennen.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:User]]&lt;br /&gt;
[[Kategorie:Hsadmin]]&lt;br /&gt;
[[Kategorie:Glossar]]&lt;br /&gt;
[[Kategorie:Einstieg bei Hostsharing]]&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=User&amp;diff=5860</id>
		<title>User</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=User&amp;diff=5860"/>
		<updated>2022-08-09T15:50:53Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HSDoku-Links}}&lt;br /&gt;
&lt;br /&gt;
{{Kerndoku|https://doc.hostsharing.net}}&lt;br /&gt;
&lt;br /&gt;
== Passwort ändern auf der HSAdmin Webseite ==&lt;br /&gt;
&lt;br /&gt;
Siehe die Anleitung in der technischen Dokumentation: [https://doc.hostsharing.net/einstieg/passwort.html#anderung-des-passworts Änderung des Passworts]&lt;br /&gt;
&lt;br /&gt;
== Passwort ändern mit dem Programm passwd ==&lt;br /&gt;
&lt;br /&gt;
Das Passwort eines Users wird nicht in der hsadmin-Datenbank gespeichert, sondern in der Konfiguration des jeweiligen [[Hive]], auf dem das zugehörige [[Paket]] liegt. Daher kann es &#039;&#039;auch&#039;&#039; mit dem gängigen [[Shell]]-Befehl &#039;&#039;&#039;passwd&#039;&#039;&#039; geändert werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
xyz00@hopi:~$ passwd&lt;br /&gt;
&lt;br /&gt;
Changing password for mi&lt;br /&gt;
(current) UNIX password: ALTESPASSWORT&lt;br /&gt;
Enter new UNIX password: NEUESPASSWORT&lt;br /&gt;
Retype new UNIX password: NEUESPASSWORT&lt;br /&gt;
passwd: password updated successfully&lt;br /&gt;
&lt;br /&gt;
xyz00@hopi:~$ █&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Platzhalter NEUESPASSWORT und ALTESPASSWORT müssen dabei selbstverständlich gegen die entsprechenden Passworte ausgetauscht werden. Dabei sollte jedes Passwort mindestens 6 Zeichen lang sein, besser 8 Zeichen, und aus Buchstaben, Ziffern und ggf. Sonderzeichen bestehen. Auf Umlaute sollte verzichtet werden, da die Verwendung nicht mit allen Zugangswegen kompatibel ist.&lt;br /&gt;
&lt;br /&gt;
Ggf. kommt es zu Fehlermeldungen, z.B. wenn das neue Passwort zu simpel ist, oder bei der Wiederholung nicht identisch mit dem ersten Passwort ist. In dem Fall, den Vorgang einfach wiederholen. Solange das neue Passwort nicht erfolgreich übernommen wurde, bleibt das alte gültig.&lt;br /&gt;
&lt;br /&gt;
Es gibt User, denen der Paket-Admin nur das Recht eingeräumt hat, das eigene Passwort zu ändern, indem er ihnen die &amp;quot;Shell&amp;quot; /usr/bin/passwd zugewiesen hat. Diese User können durch einen Shell-Login nur ihr Passwort ändern, da das Programm passwd an Stelle einer Shell gestartet wird. Sie werden nach dem Einloggen automatisch auf diesen Dialog geführt.&lt;br /&gt;
&lt;br /&gt;
== Identitätswechsel ==&lt;br /&gt;
&lt;br /&gt;
Der Paketadmin kann mit&lt;br /&gt;
 sudo -u xyz00-user -i&lt;br /&gt;
die Rechte eines seiner Paketuser annehmen, ohne dessen Passwort kennen zu müssen. Für Paketuser, die als initiale Shell nur /bin/passwd eingetragen haben, ist&lt;br /&gt;
 sudo -u xyz00-user -s&lt;br /&gt;
zu verwenden, um in eine reguläre Shell zu kommen. Mit&lt;br /&gt;
 &amp;quot;su xyz00-user&amp;quot;&lt;br /&gt;
ist auch regulären Benutzern ein Identitätswechel (z.B. zum Paketadmin) möglich, wenn sie das aktuelle Passwort des Zielaccounts kennen.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:User]]&lt;br /&gt;
[[Kategorie:Hsadmin]]&lt;br /&gt;
[[Kategorie:Glossar]]&lt;br /&gt;
[[Kategorie:Einstieg bei Hostsharing]]&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Hsadmin&amp;diff=5859</id>
		<title>Hsadmin</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Hsadmin&amp;diff=5859"/>
		<updated>2022-08-09T15:37:27Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Kerndoku|https://doc.hostsharing.net/#kap-hsadmin-einstieg}}&lt;br /&gt;
&lt;br /&gt;
Am 25. Juli 2016 wurde eine neue Web-Oberfläche in Betrieb genommen.&lt;br /&gt;
&lt;br /&gt;
Eine Einführung in die Bedienung findet Ihr auf der Seite [[HsadminWeb]]&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
[[Kategorie:Glossar]]&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Einstieg_bei_Hostsharing&amp;diff=5858</id>
		<title>Einstieg bei Hostsharing</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Einstieg_bei_Hostsharing&amp;diff=5858"/>
		<updated>2022-08-09T15:35:26Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: /* Weiterführende Verweise */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HSDoku-Links}}&lt;br /&gt;
&lt;br /&gt;
Hostsharing ist anders, das merkt jeder sehr schnell. Nicht nur, weil es sich um eine Genossenschaft mit Mitbestimmung, demokratischen Strukturen und vielen engagierten und  hilfsbereiten Mitgliedern handelt. Dieses &amp;quot;Anders-Sein&amp;quot; fällt auch schnell bei der Administration der Hostsharing Pakete auf, die einem jede Menge Freiheit bietet. Die grundsätzliche Konfiguration erfolgt mit [https://doc.hostsharing.net/#kap-hsadmin-einstieg hsadmin], einem Interface, das (unter anderem) die Konfiguration der eigenen Pakete mit dem Browser erlaubt.&lt;br /&gt;
&lt;br /&gt;
Doch wir können schon gleich zu Anfang beruhigen: bisher hat jeder die Administration seines Pakets binnen kürzester Zeit gemeistert und schnell gemerkt, welche Flexiblität man dadurch gewinnt. So kann die Administration auch automatisch aus eigenen Web-Anwendungen erfolgen, oder man kann die vielen kleinen UNIX-Tools verwenden, um seine Konfiguration automatisch zu bearbeiten, was ansonsten viele hunderte fehleranfällige Mausklicks bedeuten würde.&lt;br /&gt;
&lt;br /&gt;
Diese Seiten werden helfen, die ersten Schritte bei der Einrichtung eines Hostsharing-Paketes zu gehen. Sie wenden sich an User mit geringer Erfahrung. &lt;br /&gt;
&lt;br /&gt;
Viel Spaß.&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Verweise ==&lt;br /&gt;
&lt;br /&gt;
; Die ersten Schritte zur eigenen Website&lt;br /&gt;
#: [[Dein erster Login]] dient zum Einrichten und Test der Verbindung und ändern des Passworts&lt;br /&gt;
&lt;br /&gt;
; ohne vorgegebene Reihenfolge&lt;br /&gt;
&lt;br /&gt;
:[[Login mit SSH]]&lt;br /&gt;
:[[Verzeichnis-Struktur]]&lt;br /&gt;
:[[Die wichtigsten Unix-Kommandos]]&lt;br /&gt;
:[[Editoren für Einsteiger]]&lt;br /&gt;
:[[User | User bearbeiten]]&lt;br /&gt;
:[https://doc.hostsharing.net/#domain-benutzer-anlegen Domains]&lt;br /&gt;
:[[E-Mail-Adressen]]&lt;br /&gt;
:[[Dateien per FTP hochladen]]&lt;br /&gt;
:[[Überwachung der HS-Dienste]]&lt;br /&gt;
:[https://doc.hostsharing.net/#managed-operations-platform Die Technik bei Hostsharing]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Einstieg bei Hostsharing]]&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Einstieg_bei_Hostsharing&amp;diff=5857</id>
		<title>Einstieg bei Hostsharing</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Einstieg_bei_Hostsharing&amp;diff=5857"/>
		<updated>2022-08-09T15:33:32Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HSDoku-Links}}&lt;br /&gt;
&lt;br /&gt;
Hostsharing ist anders, das merkt jeder sehr schnell. Nicht nur, weil es sich um eine Genossenschaft mit Mitbestimmung, demokratischen Strukturen und vielen engagierten und  hilfsbereiten Mitgliedern handelt. Dieses &amp;quot;Anders-Sein&amp;quot; fällt auch schnell bei der Administration der Hostsharing Pakete auf, die einem jede Menge Freiheit bietet. Die grundsätzliche Konfiguration erfolgt mit [https://doc.hostsharing.net/#kap-hsadmin-einstieg hsadmin], einem Interface, das (unter anderem) die Konfiguration der eigenen Pakete mit dem Browser erlaubt.&lt;br /&gt;
&lt;br /&gt;
Doch wir können schon gleich zu Anfang beruhigen: bisher hat jeder die Administration seines Pakets binnen kürzester Zeit gemeistert und schnell gemerkt, welche Flexiblität man dadurch gewinnt. So kann die Administration auch automatisch aus eigenen Web-Anwendungen erfolgen, oder man kann die vielen kleinen UNIX-Tools verwenden, um seine Konfiguration automatisch zu bearbeiten, was ansonsten viele hunderte fehleranfällige Mausklicks bedeuten würde.&lt;br /&gt;
&lt;br /&gt;
Diese Seiten werden helfen, die ersten Schritte bei der Einrichtung eines Hostsharing-Paketes zu gehen. Sie wenden sich an User mit geringer Erfahrung. &lt;br /&gt;
&lt;br /&gt;
Viel Spaß.&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Verweise ==&lt;br /&gt;
&lt;br /&gt;
; Die ersten Schritte zur eigenen Website&lt;br /&gt;
#: [[Dein erster Login]] dient zum Einrichten und Test der Verbindung und ändern des Passworts&lt;br /&gt;
&lt;br /&gt;
; ohne vorgegebene Reihenfolge&lt;br /&gt;
&lt;br /&gt;
:[[Login mit SSH]]&lt;br /&gt;
:[[Verzeichnis-Struktur]]&lt;br /&gt;
:[[Die wichtigsten Unix-Kommandos]]&lt;br /&gt;
:[[Editoren für Einsteiger]]&lt;br /&gt;
:[[User | User bearbeiten]]&lt;br /&gt;
:[https://doc.hostsharing.net/users/administration/domain/index.html Domains]&lt;br /&gt;
:[[E-Mail-Adressen]]&lt;br /&gt;
:[[Dateien per FTP hochladen]]&lt;br /&gt;
:[[Überwachung der HS-Dienste]]&lt;br /&gt;
:[https://doc.hostsharing.net/users/sicherheit/index.html Die Technik bei Hostsharing]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Einstieg bei Hostsharing]]&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Hauptseite&amp;diff=5856</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Hauptseite&amp;diff=5856"/>
		<updated>2022-08-09T15:31:16Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: /* Willkommen im Hostsharing-Wiki! */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HSDoku-Links}} __NOTOC__ &lt;br /&gt;
&lt;br /&gt;
== Willkommen im Hostsharing-Wiki! ==&lt;br /&gt;
... der &#039;&#039;&#039;inoffiziellen&#039;&#039;&#039; Dokumentation der Mitglieder von Hostsharing. Die wichtigsten Themen findest du in der Leiste oben. Alle Themen und Seiten des Wiki erreichst du am besten über die Kategorie [[:Kategorie:HSDoku|HSDoku]]. &lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;&#039;offizielle Kerndokumentation&#039;&#039;&#039; ist hier:&lt;br /&gt;
https://doc.hostsharing.net&lt;br /&gt;
&lt;br /&gt;
Allgemeine Fragen zum Umgang mit den HS Diensten und Angeboten beantwortet die HS Community in der &#039;&#039;&#039;[https://lists.hostsharing.net/mailman/listinfo/support Support Mailingliste]&#039;&#039;&#039; mit der Mailadresse [mailto:support@hostsharing.net support@hostsharing.net].&lt;br /&gt;
&lt;br /&gt;
Fragen, die vertrauliche Themen behandeln (Domainnamen, Benutzernamen, Passwörter etc.) sollten direkt an den [[HS-Service]] gehen, der ansonsten kostenpflichtig ist. Ergänzende Hinweise finden sich in den [https://lists.hostsharing.net/archiv/global-announce/ Global Announces] der Hostmaster und des Vorstandes zu aktuellen Geschehnissen und technischen Änderungen bei Hostsharing. &lt;br /&gt;
&lt;br /&gt;
Du kannst dich mit deinen HS Userdaten einloggen und mithelfen, die Dokumentation zu verbessern. In unserem [[Autorenportal]] findest du Hinweise dazu, wie du dich beteiligen kannst. Was hier ins Wiki gehört, und wie es gemacht wird, ist unter [[Hilfe:Hostsharing_Wiki_Konventionen|Konventionen]] erklärt.&lt;br /&gt;
&lt;br /&gt;
Zum Testen und Rumspielen ist der [[Sandkasten]] da. Und nun viel Freude im Hostsharing Wiki :-)&lt;br /&gt;
&lt;br /&gt;
== Hostsharing Benefits ==&lt;br /&gt;
&lt;br /&gt;
Hostsharing.net ist die professionelle Alternative zur Administration eigener Root Server mit dem Bonus der Redundanz und des gemeinschaftlich organisierten Betriebes.&lt;br /&gt;
&lt;br /&gt;
[[Green Web Foundation | Ökostrom: Hostsharing ist gelistet bei der Green Web Foundation]]&lt;br /&gt;
&lt;br /&gt;
[[10 Missverständnisse über dedizierte root-Server | Rootserver Missverständnisse]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Rootserver Checkliste]]&lt;br /&gt;
&lt;br /&gt;
==Mastodon-Instanz für Mitglieder==&lt;br /&gt;
[[Einrichtung und Benutzung von Mastodon-Accounts auf https://hostsharing.coop]]&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Einrichtung des Crossposting Bots]]&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:Hostsharing Wiki]]&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Diskussion:Einrichtung_und_Benutzung_von_Mastodon-Accounts_auf_https://hostsharing.coop&amp;diff=5796</id>
		<title>Diskussion:Einrichtung und Benutzung von Mastodon-Accounts auf https://hostsharing.coop</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Diskussion:Einrichtung_und_Benutzung_von_Mastodon-Accounts_auf_https://hostsharing.coop&amp;diff=5796"/>
		<updated>2022-05-04T09:14:03Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: Veralteter Text&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Text ist vermutlich veraltet.&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Cryptpad&amp;diff=5744</id>
		<title>Cryptpad</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Cryptpad&amp;diff=5744"/>
		<updated>2021-12-17T09:20:32Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: /* Webserver Konfiguration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cryptpad =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cryptpad&#039;&#039;&#039; ist ein Online-Office, dass in erster Linie im Internet-Browser zu bedienen ist. Das Alleinstellungsmerkmal ist die &#039;&#039;&#039;Ende-zu-Ende-Verschlüsselung&#039;&#039;&#039; aller Dokumente. Die Entschlüsselung und die Verschlüsselung erfolgen im Browser. Auf dem Server sind keinerlei lesbare Daten abgelegt.&lt;br /&gt;
&lt;br /&gt;
Cryptpad bietet Editoren für formatierte &#039;&#039;&#039;Textdokumente&#039;&#039;&#039; (im HTML-Format) und für &#039;&#039;&#039;Markdown-Dateien&#039;&#039;&#039; und andere Textdateien. Der Anwendungsfall der &#039;&#039;&#039;Tabellenkalkulation&#039;&#039;&#039; wird durch Onlyoffice-Tabellen abgedeckt. Präsentationen können mit Hilfe von Markdown erstellt werden. Bilder und PDF-Dokumente können in die Umgebung hochgeladen und im Browser betrachtet werden. Ein &#039;&#039;&#039;Kalender&#039;&#039;&#039; und ein &#039;&#039;&#039;Kanbanboard&#039;&#039;&#039; zur Aufgabenverwaltung vervollständigen das Angebot.&lt;br /&gt;
&lt;br /&gt;
Das Projekt stellt eine gute [https://docs.cryptpad.fr/de/admin_guide/installation.html Installationsanleitung] bereit. Leider ist die Konfiguration des Webservers nur für NGinX dokumentiert, so dass für die Konfiguration des Apache Webserver einige Experimente notwendig wurden.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
Mitglieder, die einen Managed Webspace im Shared Hosting nutzen, müssen für ihre Cryptpad-Installation einen &amp;quot;eigenen Serverdienst&amp;quot; beim Hostsharing-Service anmelden. Diese Option ist im Shared Hosting kostenpflichtig. Für den Serverdienst wird ein IP-Port mit dem Server vereinbart. Im Beispiel wird Port &#039;30001&#039; genutzt.&lt;br /&gt;
&lt;br /&gt;
Für die Installation werden mit Hilfe von HSAdmin ein User (hier: &#039;xyz00-cryptpad&#039;) und eine Domain angelegt (hier: &#039;cryptpad.hs-example.de&#039;). Die Entwickler empfehlen die Nutzung von zwei Domains für eine Cryptpad Installation. Wir nutzen hier eine &#039;leichtgewichtige&#039; Subdomain &#039;api.cryptpad.hs-example.de&#039;, die bei Hostsharing ohne weitere Konfiguration nutzbar ist. &lt;br /&gt;
&lt;br /&gt;
== Webserver Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
Nach dem Aufschalten der Domain &#039;cryptpad.hs-example.de&#039; passen wird die generierte Verzeichnisstruktur der Domain wie folgt an:&lt;br /&gt;
&lt;br /&gt;
 cd ~/doms/cryptpad.hs-example.de&lt;br /&gt;
 rm -rf subs/www subs-ssl/www htdocs-ssl/.htaccess&lt;br /&gt;
 mkdir subs/api subs-ssl/api&lt;br /&gt;
&lt;br /&gt;
In die Verzeichnisse &#039;subs/api&#039;, &#039;subs-ssl/api&#039; und &#039;htdocs-ssl&#039; werden jeweils Dateien mit dem Namen &#039;.htaccess&#039; zur Konfiguration des Apache Webserver abgelegt:&lt;br /&gt;
&lt;br /&gt;
 cd ~/doms/cryptpad.hs-example.de&lt;br /&gt;
 &lt;br /&gt;
 cat subs/api/.htaccess &lt;br /&gt;
 Redirect permanent / https://api.cryptpad.hs-example.de/&lt;br /&gt;
 &lt;br /&gt;
 cat subs-ssl/api/.htaccess &lt;br /&gt;
 DirectoryIndex disabled&lt;br /&gt;
 RewriteEngine On&lt;br /&gt;
 RewriteBase /&lt;br /&gt;
 RewriteCond %{HTTP:UPGRADE} ^WebSocket$           [NC,OR]&lt;br /&gt;
 RewriteCond %{HTTP:CONNECTION} ^Upgrade$          [NC]&lt;br /&gt;
 RewriteRule .* ws://127.0.0.1:30001%{REQUEST_URI}  [proxy]&lt;br /&gt;
 RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f&lt;br /&gt;
 RewriteRule .* http://127.0.0.1:30001%{REQUEST_URI} [proxy,last]&lt;br /&gt;
 &lt;br /&gt;
 cat htdocs-ssl/.htaccess &lt;br /&gt;
 DirectoryIndex disabled&lt;br /&gt;
 RewriteEngine On&lt;br /&gt;
 RewriteBase /   &lt;br /&gt;
 RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
 RewriteCond %{HTTP:UPGRADE} ^WebSocket$           [NC,OR]&lt;br /&gt;
 RewriteCond %{HTTP:CONNECTION} ^Upgrade$          [NC]&lt;br /&gt;
 RewriteRule .* ws://127.0.0.1:30001%{REQUEST_URI}  [proxy]&lt;br /&gt;
 RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
 RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f&lt;br /&gt;
 RewriteRule .* http://127.0.0.1:30001%{REQUEST_URI} [proxy,last]&lt;br /&gt;
&lt;br /&gt;
Eine weitere &#039;.htaccess&#039;-Datei liegt direkt im Hauptverzeichnis der Domain (die überlangen Zeilen beachten):&lt;br /&gt;
&lt;br /&gt;
 cd ~/doms/cryptpad.hs-example.de&lt;br /&gt;
 cat .htaccess &lt;br /&gt;
 Header Set Access-Control-Allow-Origin &amp;quot;*&amp;quot;&lt;br /&gt;
 Header Set Access-Control-Allow-Methods &amp;quot;GET, POST, OPTIONS&amp;quot;&lt;br /&gt;
 Header Set Access-Control-Allow-Headers &amp;quot;DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range&amp;quot;&lt;br /&gt;
 Header Set Access-Control-Max-Age &amp;quot;1728000&amp;quot;&lt;br /&gt;
 Header Set Cross-Origin-Resource-Policy &amp;quot;cross-origin&amp;quot;&lt;br /&gt;
 Header Set Cross-Origin-Embedder-Policy &amp;quot;require-corp&amp;quot;&lt;br /&gt;
 Header Set Content-Security-Policy &amp;quot;default-src &#039;none&#039;; child-src https://cryptpad.hs-example.de; worker-src https://cryptpad.hs-example.de; media-src * blob:; style-src &#039;unsafe-inline&#039; &#039;self&#039; cryptpad.hs-example.de; script-src &#039;self&#039; &#039;unsafe-inline&#039; &#039;unsafe-eval&#039; resource: cryptpad.hs-example.de; connect-src &#039;self&#039; https://cryptpad.hs-example.de cryptpad.hs-example.de https://api.cryptpad.hs-example.de blob: wss://api.cryptpad.hs-example.de api.cryptpad.hs-example.de; font-src &#039;self&#039; data: cryptpad.hs-example.de; img-src data: * blob:; frame-src &#039;self&#039; blob: api.cryptpad.hs-example.de cryptpad.hs-example.de https://cryptpad.hs-example.de https://api.cryptpad.hs-example.de;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Zwei Datenverzeichnisse werden angelegt und direkt ins &#039;htdocs-ssl&#039; verlinkt:&lt;br /&gt;
&lt;br /&gt;
 cd $HOME&lt;br /&gt;
 mkdir data&lt;br /&gt;
 mkdir data/blob&lt;br /&gt;
 mkdir data/block&lt;br /&gt;
 cd $HOME/doms/cryptpad.hs-example.de/htdocs-ssl/&lt;br /&gt;
 ln -s /home/pacs/xyz00/users/cryptpad/data/blob .&lt;br /&gt;
 ln -s /home/pacs/xyz00/users/cryptpad/data/block .&lt;br /&gt;
&lt;br /&gt;
Dieser Link muss angepasst werden, wenn der Blob-Speicher in den Zusatzspeicher unter /home/storage verschoben wird (siehe unten)!&lt;br /&gt;
&lt;br /&gt;
== Installation von NodeJS ==&lt;br /&gt;
&lt;br /&gt;
Nach dieser [https://wiki.hostsharing.net/index.php?title=NodeJS Anleitung] hier im Wiki wird mit Hilfe von &#039;nvm&#039; &#039;node&#039; in der Version 12 installiert.&lt;br /&gt;
&lt;br /&gt;
== Installation des Cryptpad ==&lt;br /&gt;
&lt;br /&gt;
 cd $HOME&lt;br /&gt;
 npm install -g bower&lt;br /&gt;
 git clone https://github.com/xwiki-labs/cryptpad.git cryptpad&lt;br /&gt;
 cd cryptpad &lt;br /&gt;
 # aktuelle Version nachsehen&lt;br /&gt;
 git checkout 4.12.1&lt;br /&gt;
 npm install&lt;br /&gt;
 bower install &lt;br /&gt;
 cd config&lt;br /&gt;
 cp config.example.js config.js&lt;br /&gt;
 vi config.js&lt;br /&gt;
 &lt;br /&gt;
Meine Konfiguration in der &#039;config.js&#039;:&lt;br /&gt;
&lt;br /&gt;
 $ cat config.js&lt;br /&gt;
 module.exports = {&lt;br /&gt;
 &lt;br /&gt;
    httpUnsafeOrigin: &#039;https://cryptpad.hs-example.de&#039;,&lt;br /&gt;
    httpSafeOrigin: &amp;quot;https://api.cryptpad.hs-example.de&amp;quot;,&lt;br /&gt;
    httpAddress: &#039;127.0.0.1&#039;,&lt;br /&gt;
    httpPort: 30001,&lt;br /&gt;
    maxWorkers: 4,&lt;br /&gt;
    /*&lt;br /&gt;
    adminKeys: [&lt;br /&gt;
        &amp;quot;[admin@cryptpad.hs-example.de/xxxxxxxxxxxxxxxxxxxxxxxx=]&amp;quot;,&lt;br /&gt;
    ],&lt;br /&gt;
    */&lt;br /&gt;
    inactiveTime: 90, // days&lt;br /&gt;
    archiveRetentionTime: 15,&lt;br /&gt;
    accountRetentionTime: 365,&lt;br /&gt;
    maxUploadSize: 8 * 1024 * 1024,&lt;br /&gt;
    filePath: &#039;/home/pacs/xyz00/users/cryptpad/data/file/&#039;,&lt;br /&gt;
    archivePath: &#039;/home/pacs/xyz00/users/cryptpad/data/archive/&#039;,&lt;br /&gt;
    pinPath: &#039;/home/pacs/xyz00/users/cryptpad/data/pins&#039;,&lt;br /&gt;
    taskPath: &#039;/home/pacs/xyz00/users/cryptpad/data/tasks&#039;,&lt;br /&gt;
    blockPath: &#039;/home/pacs/xyz00/users/cryptpad/data/block&#039;,&lt;br /&gt;
    blobPath: &#039;/home/pacs/xyz00/users/cryptpad/data/blob&#039;,&lt;br /&gt;
    blobStagingPath: &#039;/home/pacs/xyz00/users/cryptpad/data/blobstage&#039;,&lt;br /&gt;
    decreePath: &#039;/home/pacs/xyz00/users/cryptpad/data/decrees&#039;,&lt;br /&gt;
    logPath: &#039;/home/pacs/xyz00/users/cryptpad/data/logs&#039;,&lt;br /&gt;
    logToStdout: true,&lt;br /&gt;
    logLevel: &#039;info&#039;,&lt;br /&gt;
    logFeedback: false,&lt;br /&gt;
    verbose: false,&lt;br /&gt;
    installMethod: &#039;unspecified&#039;,&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Der Admin-Key wird später ergänzt. Der erste registrierte User im Cryptpad kann den Schlüssel aus seinem Profil herauskopieren.&lt;br /&gt;
&lt;br /&gt;
Wenn größere Datenmengen erwartet werden, kann der &#039;blobPath&#039; in den Zusatzspeicher verlegt werden:&lt;br /&gt;
&lt;br /&gt;
    blobPath: &#039;/home/storage/xyz00/users/cryptpad/data/blob&#039;,&lt;br /&gt;
&lt;br /&gt;
== Start des Cryptpad ==&lt;br /&gt;
&lt;br /&gt;
Ich starte das Cryptpad zunächst einfach mit dem &#039;nohup&#039;-Kommando:&lt;br /&gt;
&lt;br /&gt;
 cd ~/cryptpad&lt;br /&gt;
 nohup node server &amp;amp;&lt;br /&gt;
&lt;br /&gt;
== produktives Setup ==&lt;br /&gt;
&lt;br /&gt;
Für ein produktives Setup fehlt noch das Erstellen einer Konfiguration für &#039;monit&#039; oder &#039;supervisord&#039; und für &#039;logrotate&#039;.&lt;br /&gt;
&lt;br /&gt;
= weiterführende Links =&lt;br /&gt;
&lt;br /&gt;
* [https://cryptpad.fr/ Die Cryptpad Installation der Entwickler]&lt;br /&gt;
* [https://docs.cryptpad.fr/de/ Dokumentation in deutscher Sprache]&lt;br /&gt;
* [https://docs.cryptpad.fr/de/admin_guide/installation.html Installationanleitung]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:CalDAV]]&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Cryptpad&amp;diff=5743</id>
		<title>Cryptpad</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Cryptpad&amp;diff=5743"/>
		<updated>2021-12-17T09:19:23Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: /* Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Cryptpad =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cryptpad&#039;&#039;&#039; ist ein Online-Office, dass in erster Linie im Internet-Browser zu bedienen ist. Das Alleinstellungsmerkmal ist die &#039;&#039;&#039;Ende-zu-Ende-Verschlüsselung&#039;&#039;&#039; aller Dokumente. Die Entschlüsselung und die Verschlüsselung erfolgen im Browser. Auf dem Server sind keinerlei lesbare Daten abgelegt.&lt;br /&gt;
&lt;br /&gt;
Cryptpad bietet Editoren für formatierte &#039;&#039;&#039;Textdokumente&#039;&#039;&#039; (im HTML-Format) und für &#039;&#039;&#039;Markdown-Dateien&#039;&#039;&#039; und andere Textdateien. Der Anwendungsfall der &#039;&#039;&#039;Tabellenkalkulation&#039;&#039;&#039; wird durch Onlyoffice-Tabellen abgedeckt. Präsentationen können mit Hilfe von Markdown erstellt werden. Bilder und PDF-Dokumente können in die Umgebung hochgeladen und im Browser betrachtet werden. Ein &#039;&#039;&#039;Kalender&#039;&#039;&#039; und ein &#039;&#039;&#039;Kanbanboard&#039;&#039;&#039; zur Aufgabenverwaltung vervollständigen das Angebot.&lt;br /&gt;
&lt;br /&gt;
Das Projekt stellt eine gute [https://docs.cryptpad.fr/de/admin_guide/installation.html Installationsanleitung] bereit. Leider ist die Konfiguration des Webservers nur für NGinX dokumentiert, so dass für die Konfiguration des Apache Webserver einige Experimente notwendig wurden.&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
&lt;br /&gt;
Mitglieder, die einen Managed Webspace im Shared Hosting nutzen, müssen für ihre Cryptpad-Installation einen &amp;quot;eigenen Serverdienst&amp;quot; beim Hostsharing-Service anmelden. Diese Option ist im Shared Hosting kostenpflichtig. Für den Serverdienst wird ein IP-Port mit dem Server vereinbart. Im Beispiel wird Port &#039;30001&#039; genutzt.&lt;br /&gt;
&lt;br /&gt;
Für die Installation werden mit Hilfe von HSAdmin ein User (hier: &#039;xyz00-cryptpad&#039;) und eine Domain angelegt (hier: &#039;cryptpad.hs-example.de&#039;). Die Entwickler empfehlen die Nutzung von zwei Domains für eine Cryptpad Installation. Wir nutzen hier eine &#039;leichtgewichtige&#039; Subdomain &#039;api.cryptpad.hs-example.de&#039;, die bei Hostsharing ohne weitere Konfiguration nutzbar ist. &lt;br /&gt;
&lt;br /&gt;
== Webserver Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
Nach dem Aufschalten der Domain &#039;cryptpad.hs-example.de&#039; passen wird die generierte Verzeichnisstruktur der Domain wie folgt angepasst:&lt;br /&gt;
&lt;br /&gt;
 cd ~/doms/cryptpad.hs-example.de&lt;br /&gt;
 rm -rf subs/www subs-ssl/www htdocs-ssl/.htaccess&lt;br /&gt;
 mkdir subs/api subs-ssl/api&lt;br /&gt;
&lt;br /&gt;
In die Verzeichnisse &#039;subs/api&#039;, &#039;subs-ssl/api&#039; und &#039;htdocs-ssl&#039; werden jeweils Dateien mit dem Namen &#039;.htaccess&#039; zur Konfiguration des Apache Webserver abgelegt:&lt;br /&gt;
&lt;br /&gt;
 cd ~/doms/cryptpad.hs-example.de&lt;br /&gt;
 &lt;br /&gt;
 cat subs/api/.htaccess &lt;br /&gt;
 Redirect permanent / https://api.cryptpad.hs-example.de/&lt;br /&gt;
 &lt;br /&gt;
 cat subs-ssl/api/.htaccess &lt;br /&gt;
 DirectoryIndex disabled&lt;br /&gt;
 RewriteEngine On&lt;br /&gt;
 RewriteBase /&lt;br /&gt;
 RewriteCond %{HTTP:UPGRADE} ^WebSocket$           [NC,OR]&lt;br /&gt;
 RewriteCond %{HTTP:CONNECTION} ^Upgrade$          [NC]&lt;br /&gt;
 RewriteRule .* ws://127.0.0.1:30001%{REQUEST_URI}  [proxy]&lt;br /&gt;
 RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f&lt;br /&gt;
 RewriteRule .* http://127.0.0.1:30001%{REQUEST_URI} [proxy,last]&lt;br /&gt;
 &lt;br /&gt;
 cat htdocs-ssl/.htaccess &lt;br /&gt;
 DirectoryIndex disabled&lt;br /&gt;
 RewriteEngine On&lt;br /&gt;
 RewriteBase /   &lt;br /&gt;
 RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
 RewriteCond %{HTTP:UPGRADE} ^WebSocket$           [NC,OR]&lt;br /&gt;
 RewriteCond %{HTTP:CONNECTION} ^Upgrade$          [NC]&lt;br /&gt;
 RewriteRule .* ws://127.0.0.1:30001%{REQUEST_URI}  [proxy]&lt;br /&gt;
 RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
 RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f&lt;br /&gt;
 RewriteRule .* http://127.0.0.1:30001%{REQUEST_URI} [proxy,last]&lt;br /&gt;
&lt;br /&gt;
Eine weitere &#039;.htaccess&#039;-Datei liegt direkt im Hauptverzeichnis der Domain (die überlangen Zeilen beachten):&lt;br /&gt;
&lt;br /&gt;
 cd ~/doms/cryptpad.hs-example.de&lt;br /&gt;
 cat .htaccess &lt;br /&gt;
 Header Set Access-Control-Allow-Origin &amp;quot;*&amp;quot;&lt;br /&gt;
 Header Set Access-Control-Allow-Methods &amp;quot;GET, POST, OPTIONS&amp;quot;&lt;br /&gt;
 Header Set Access-Control-Allow-Headers &amp;quot;DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range&amp;quot;&lt;br /&gt;
 Header Set Access-Control-Max-Age &amp;quot;1728000&amp;quot;&lt;br /&gt;
 Header Set Cross-Origin-Resource-Policy &amp;quot;cross-origin&amp;quot;&lt;br /&gt;
 Header Set Cross-Origin-Embedder-Policy &amp;quot;require-corp&amp;quot;&lt;br /&gt;
 Header Set Content-Security-Policy &amp;quot;default-src &#039;none&#039;; child-src https://cryptpad.hs-example.de; worker-src https://cryptpad.hs-example.de; media-src * blob:; style-src &#039;unsafe-inline&#039; &#039;self&#039; cryptpad.hs-example.de; script-src &#039;self&#039; &#039;unsafe-inline&#039; &#039;unsafe-eval&#039; resource: cryptpad.hs-example.de; connect-src &#039;self&#039; https://cryptpad.hs-example.de cryptpad.hs-example.de https://api.cryptpad.hs-example.de blob: wss://api.cryptpad.hs-example.de api.cryptpad.hs-example.de; font-src &#039;self&#039; data: cryptpad.hs-example.de; img-src data: * blob:; frame-src &#039;self&#039; blob: api.cryptpad.hs-example.de cryptpad.hs-example.de https://cryptpad.hs-example.de https://api.cryptpad.hs-example.de;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Zwei Datenverzeichnisse werden angelegt und direkt ins &#039;htdocs-ssl&#039; verlinkt:&lt;br /&gt;
&lt;br /&gt;
 cd $HOME&lt;br /&gt;
 mkdir data&lt;br /&gt;
 mkdir data/blob&lt;br /&gt;
 mkdir data/block&lt;br /&gt;
 cd $HOME/doms/cryptpad.hs-example.de/htdocs-ssl/&lt;br /&gt;
 ln -s /home/pacs/xyz00/users/cryptpad/data/blob .&lt;br /&gt;
 ln -s /home/pacs/xyz00/users/cryptpad/data/block .&lt;br /&gt;
&lt;br /&gt;
Dieser Link muss angepasst werden, wenn der Blob-Speicher in den Zusatzspeicher unter /home/storage verschoben wird (siehe unten)!&lt;br /&gt;
&lt;br /&gt;
== Installation von NodeJS ==&lt;br /&gt;
&lt;br /&gt;
Nach dieser [https://wiki.hostsharing.net/index.php?title=NodeJS Anleitung] hier im Wiki wird mit Hilfe von &#039;nvm&#039; &#039;node&#039; in der Version 12 installiert.&lt;br /&gt;
&lt;br /&gt;
== Installation des Cryptpad ==&lt;br /&gt;
&lt;br /&gt;
 cd $HOME&lt;br /&gt;
 npm install -g bower&lt;br /&gt;
 git clone https://github.com/xwiki-labs/cryptpad.git cryptpad&lt;br /&gt;
 cd cryptpad &lt;br /&gt;
 # aktuelle Version nachsehen&lt;br /&gt;
 git checkout 4.12.1&lt;br /&gt;
 npm install&lt;br /&gt;
 bower install &lt;br /&gt;
 cd config&lt;br /&gt;
 cp config.example.js config.js&lt;br /&gt;
 vi config.js&lt;br /&gt;
 &lt;br /&gt;
Meine Konfiguration in der &#039;config.js&#039;:&lt;br /&gt;
&lt;br /&gt;
 $ cat config.js&lt;br /&gt;
 module.exports = {&lt;br /&gt;
 &lt;br /&gt;
    httpUnsafeOrigin: &#039;https://cryptpad.hs-example.de&#039;,&lt;br /&gt;
    httpSafeOrigin: &amp;quot;https://api.cryptpad.hs-example.de&amp;quot;,&lt;br /&gt;
    httpAddress: &#039;127.0.0.1&#039;,&lt;br /&gt;
    httpPort: 30001,&lt;br /&gt;
    maxWorkers: 4,&lt;br /&gt;
    /*&lt;br /&gt;
    adminKeys: [&lt;br /&gt;
        &amp;quot;[admin@cryptpad.hs-example.de/xxxxxxxxxxxxxxxxxxxxxxxx=]&amp;quot;,&lt;br /&gt;
    ],&lt;br /&gt;
    */&lt;br /&gt;
    inactiveTime: 90, // days&lt;br /&gt;
    archiveRetentionTime: 15,&lt;br /&gt;
    accountRetentionTime: 365,&lt;br /&gt;
    maxUploadSize: 8 * 1024 * 1024,&lt;br /&gt;
    filePath: &#039;/home/pacs/xyz00/users/cryptpad/data/file/&#039;,&lt;br /&gt;
    archivePath: &#039;/home/pacs/xyz00/users/cryptpad/data/archive/&#039;,&lt;br /&gt;
    pinPath: &#039;/home/pacs/xyz00/users/cryptpad/data/pins&#039;,&lt;br /&gt;
    taskPath: &#039;/home/pacs/xyz00/users/cryptpad/data/tasks&#039;,&lt;br /&gt;
    blockPath: &#039;/home/pacs/xyz00/users/cryptpad/data/block&#039;,&lt;br /&gt;
    blobPath: &#039;/home/pacs/xyz00/users/cryptpad/data/blob&#039;,&lt;br /&gt;
    blobStagingPath: &#039;/home/pacs/xyz00/users/cryptpad/data/blobstage&#039;,&lt;br /&gt;
    decreePath: &#039;/home/pacs/xyz00/users/cryptpad/data/decrees&#039;,&lt;br /&gt;
    logPath: &#039;/home/pacs/xyz00/users/cryptpad/data/logs&#039;,&lt;br /&gt;
    logToStdout: true,&lt;br /&gt;
    logLevel: &#039;info&#039;,&lt;br /&gt;
    logFeedback: false,&lt;br /&gt;
    verbose: false,&lt;br /&gt;
    installMethod: &#039;unspecified&#039;,&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Der Admin-Key wird später ergänzt. Der erste registrierte User im Cryptpad kann den Schlüssel aus seinem Profil herauskopieren.&lt;br /&gt;
&lt;br /&gt;
Wenn größere Datenmengen erwartet werden, kann der &#039;blobPath&#039; in den Zusatzspeicher verlegt werden:&lt;br /&gt;
&lt;br /&gt;
    blobPath: &#039;/home/storage/xyz00/users/cryptpad/data/blob&#039;,&lt;br /&gt;
&lt;br /&gt;
== Start des Cryptpad ==&lt;br /&gt;
&lt;br /&gt;
Ich starte das Cryptpad zunächst einfach mit dem &#039;nohup&#039;-Kommando:&lt;br /&gt;
&lt;br /&gt;
 cd ~/cryptpad&lt;br /&gt;
 nohup node server &amp;amp;&lt;br /&gt;
&lt;br /&gt;
== produktives Setup ==&lt;br /&gt;
&lt;br /&gt;
Für ein produktives Setup fehlt noch das Erstellen einer Konfiguration für &#039;monit&#039; oder &#039;supervisord&#039; und für &#039;logrotate&#039;.&lt;br /&gt;
&lt;br /&gt;
= weiterführende Links =&lt;br /&gt;
&lt;br /&gt;
* [https://cryptpad.fr/ Die Cryptpad Installation der Entwickler]&lt;br /&gt;
* [https://docs.cryptpad.fr/de/ Dokumentation in deutscher Sprache]&lt;br /&gt;
* [https://docs.cryptpad.fr/de/admin_guide/installation.html Installationanleitung]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Kategorie:HSDoku]]&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;br /&gt;
[[Kategorie:Software]]&lt;br /&gt;
[[Kategorie:CalDAV]]&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
	<entry>
		<id>https://wiki.hostsharing.net/index.php?title=Matrix_Synapse_installieren&amp;diff=5284</id>
		<title>Matrix Synapse installieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.hostsharing.net/index.php?title=Matrix_Synapse_installieren&amp;diff=5284"/>
		<updated>2020-08-27T11:03:59Z</updated>

		<summary type="html">&lt;p&gt;Hsh-janulrichhasecke: Typo und Link zu Hostsharing Lösungen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Der Matrix Server &#039;&#039;Synapse&#039;&#039;, der sogenannte &#039;Homeserver&#039;, ist aktuell die einzige vollständige serverseitige Implementierung des Matrix-Protokolls.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Textkasten|gelb|Work in Progress|Leider funktioniert die Server-zu-Server-Kommunikation von Synapse hinter dem Apache-Proxy mit den genannten Rewrite-Rules nicht. Bitten Sie dazu den Service, Ihren Apache VHost individuell für den Matrix Server anzupassen.&lt;br /&gt;
Weiterhin wird für die aktuelle Version von Synapse Python 3.8 benötigt. Es ist kein Problem sich ein Python 3.8 aus den Sourcen zu kompilieren. Das ist hier nicht noch nicht beschrieben.}}&lt;br /&gt;
&lt;br /&gt;
Synapse wird bei Hostsharing als &#039;&#039;eigener Daemon&#039;&#039; betrieben. Der Betrieb ist im Shared Hosting anmelde- und kostenpflichtig. Daher empfehlen wir für den Betrieb einen &#039;&#039;Managed Server&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Diese Anleitung beschreibt, wie man den Matrix-Homeserver Synapse auf der Managed Hosting Plattform von Hostsharing installieren kann. Dabei sind die User-IDs nach dem Schema @user:beispiel.de aufgebaut, der Homeserver an sich ist unter matrix.beispiel.de erreichbar.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitungen ==&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe von HSAdmin werden angelegt:&lt;br /&gt;
# Ein User als Service-User mit &#039;&#039;/bin/bash&#039;&#039; als Shell, zum Beispiel Beispiel: &#039;&#039;xyz00-matrix&#039;&#039;&lt;br /&gt;
# Eine Domain mit &#039;&#039;xyz00-matrix&#039;&#039; als Domain-Administrator, zum Beispiel &#039;&#039;matrix.beispiel.de&#039;&#039;&lt;br /&gt;
# Einen Postgresql-User &#039;&#039;xyz00_matrixuser&#039;&#039; mit Passwort &#039;&#039;meinPasswort&#039;&#039;&lt;br /&gt;
# Eine Postgresql-Datenbank &#039;&#039;xyz00_matrixdb&#039;&#039; mit Datenbank-Owner &#039;&#039;xyz00_matrixuser&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Verwendete IP-Ports der Server-Dienste:&lt;br /&gt;
# Monit: xyz00.hostsharing.net:32800&lt;br /&gt;
# Synapse: localhost:32801&lt;br /&gt;
&lt;br /&gt;
== Installation von Synapse ==&lt;br /&gt;
&lt;br /&gt;
Installationsanleitung basierend auf https://github.com/matrix-org/synapse/blob/master/INSTALL.md#installing-from-source&lt;br /&gt;
&lt;br /&gt;
Als User &#039;&#039;xyz00-matrix&amp;quot; ein Python3 virtualenv erstellen&lt;br /&gt;
&lt;br /&gt;
 mkdir -p ~/synapse&lt;br /&gt;
 virtualenv -p python3 ~/synapse/env&lt;br /&gt;
 source ~/synapse/env/bin/activate&lt;br /&gt;
 pip install --upgrade pip&lt;br /&gt;
 pip install --upgrade setuptools&lt;br /&gt;
&lt;br /&gt;
Synapse und Postgres-Dependencies installieren&lt;br /&gt;
&lt;br /&gt;
 pip install matrix-synapse[postgres]&lt;br /&gt;
&lt;br /&gt;
Initiale Konfiguration mit richtigem server-name &amp;quot;beispiel.de&amp;quot; generieren, außerdem im laufenden Betrieb keine Statistiken an Matrix.org senden&lt;br /&gt;
&lt;br /&gt;
 cd ~/synapse&lt;br /&gt;
 python -m synapse.app.homeserver --server-name beispiel.de --config-path homeserver.yaml --generate-config --report-stats=no&lt;br /&gt;
&lt;br /&gt;
== Konfiguration von Synapse ==&lt;br /&gt;
&lt;br /&gt;
In die initial generierte Konfiguration muss noch die Port- und Datenbank-Konfiguration eingetragen werden:&lt;br /&gt;
&lt;br /&gt;
Port: Innerhalb der listener-section den Port 8008 auf 32801 (wie initial definiert) ändern, alles andere beibehalten:&lt;br /&gt;
&lt;br /&gt;
      - port: 32801&lt;br /&gt;
        tls: false&lt;br /&gt;
        bind_addresses: [&#039;::1&#039;, &#039;127.0.0.1&#039;]&lt;br /&gt;
        type: http&lt;br /&gt;
        x_forwarded: true&lt;br /&gt;
&lt;br /&gt;
Postgres-Datenbank:&lt;br /&gt;
&lt;br /&gt;
    database:&lt;br /&gt;
      # The database engine name&lt;br /&gt;
      name: &amp;quot;psycopg2&amp;quot;&lt;br /&gt;
      # Arguments to pass to the engine&lt;br /&gt;
      args:&lt;br /&gt;
        host: &amp;quot;localhost&amp;quot;&lt;br /&gt;
        database: &amp;quot;xyz00_matrixdb&amp;quot;&lt;br /&gt;
        user: &amp;quot;xyz00_matrixuser&amp;quot;&lt;br /&gt;
        password: &amp;quot;meinPasswort&amp;quot;&lt;br /&gt;
        cp_min: 5&lt;br /&gt;
        cp_max: 10&lt;br /&gt;
&lt;br /&gt;
== Starten der Dienste  ==&lt;br /&gt;
&lt;br /&gt;
Zum Start aller notwendigen Dienste wird in dieser Anleitung &#039;&#039;monit&#039;&#039; benutzt. Hier ein Beispiel für eine Datei &#039;&#039;.monitrc&#039;&#039; (überlange Zeilen werden hier im Wiki umgebrochen)&lt;br /&gt;
&lt;br /&gt;
Das monitpassword auf jeden Fall durch ein sicheres Passwort ersetzen:&lt;br /&gt;
&lt;br /&gt;
 set daemon 60&lt;br /&gt;
     with start delay 120&lt;br /&gt;
 set logfile /home/pacs/xyz00/users/matrix/monit/var/monit.log&lt;br /&gt;
 set idfile /home/pacs/xyz00/users/matrix/monit/var/monit.id&lt;br /&gt;
 set statefile /home/pacs/xyz00/users/matrix/monit/var/monit.state&lt;br /&gt;
 set mailserver localhost&lt;br /&gt;
 set mail-format { from: monit@matrix.beispiel.de }&lt;br /&gt;
 set alert matrix@matrix.beispiel.de&lt;br /&gt;
 set httpd port 32800 address xyz00.hostsharing.net &lt;br /&gt;
     allow matrix:monitpassword&lt;br /&gt;
 check process synapse with pidfile /home/pacs/xyz00/users/matrix/synapse/homeserver.pid&lt;br /&gt;
     start program &amp;quot;/bin/bash -c &#039;export VIRTUAL_ENV=$HOME/synapse/env &amp;amp;&amp;amp; export PATH=$VIRTUAL_ENV/bin:$PATH &amp;amp;&amp;amp; cd $HOME/synapse &amp;amp;&amp;amp; synctl start&#039;&amp;quot;&lt;br /&gt;
     stop program &amp;quot;/bin/bash -c &#039;/bin/kill $( cat $HOME/synapse/homeserver.pid )&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Cronjobs ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Cron&#039;&#039; wird für eine Aufgabe genutzt:&lt;br /&gt;
* Start von monit nach einem Server Reboot&lt;br /&gt;
&lt;br /&gt;
Einrichten der crontab mit &#039;&#039;cronttab -e&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 HOME=/home/pacs/xyz00/users/matrix&lt;br /&gt;
 MAILTO=matrix@matrix.beispiel.de&lt;br /&gt;
 &lt;br /&gt;
 @reboot /usr/bin/monit -c $HOME/.monitrc&lt;br /&gt;
&lt;br /&gt;
== Einrichten des Apache VHost ==&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;~/doms/matrix.beispiel.de/.htaccess&#039;&#039; mit dem Editor der Wahl öffnen und &lt;br /&gt;
folgende Konfiguration einfügen:&lt;br /&gt;
&lt;br /&gt;
 DirectoryIndex disabled&lt;br /&gt;
 RewriteEngine On&lt;br /&gt;
 RewriteBase /&lt;br /&gt;
 RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
 RewriteCond %{REQUEST_FILENAME} !-l&lt;br /&gt;
 RewriteRule .* http://localhost:32801%{REQUEST_URI} [NE,proxy]&lt;br /&gt;
 RequestHeader set X-Forwarded-Proto &amp;quot;https&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Well-Known unter beispiel.de ==&lt;br /&gt;
&lt;br /&gt;
Damit die User-Accounts das Format @user:beispiel.de haben, der Server aber unter matrix.beispiel.de erreichbar ist, müssen noch folgende zwei Dateien unter der Domain beispiel.de abgelegt werden:&lt;br /&gt;
&lt;br /&gt;
https://beispiel.de/.well-known/matrix/server&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;m.server&amp;quot;: &amp;quot;matrix.beispiel.de:443&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
https://beispiel.de/.well-known/matrix/client&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;m.homeserver&amp;quot;: {&lt;br /&gt;
     &amp;quot;base_url&amp;quot;: &amp;quot;https://matrix.beispiel.de&amp;quot;&lt;br /&gt;
   },&lt;br /&gt;
   &amp;quot;m.identity_server&amp;quot;: {&lt;br /&gt;
     &amp;quot;base_url&amp;quot;: &amp;quot;https://vector.im&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Für die muss noch der CORS-Header Access-Control-Allow-Origin &amp;quot;*&amp;quot; gesetzt werden, damit die Datei aus beliebigem Riot-Web im Browser abrufbar ist. Dazu in den Ordner .well-known/matrix/ folgende .htaccess anlegen:&lt;br /&gt;
&lt;br /&gt;
 Header set Access-Control-Allow-Origin &amp;quot;*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Die Dokumentation dazu findet man unter https://matrix.org/docs/spec/server_server/r0.1.2#get-well-known-matrix-server und https://matrix.org/docs/spec/client_server/r0.5.0#get-well-known-matrix-client&lt;br /&gt;
&lt;br /&gt;
== Update von Synapse ==&lt;br /&gt;
&lt;br /&gt;
 source ~/synapse/env/bin/activate&lt;br /&gt;
 pip install -U matrix-synapse[postgres]&lt;br /&gt;
 monit restart synapse&lt;br /&gt;
&lt;br /&gt;
== Riot-Web ==&lt;br /&gt;
&lt;br /&gt;
Riot-Web ist aus Server-Seite eine rein statische html+javascript-Kombination, daher:&lt;br /&gt;
&lt;br /&gt;
* Account und Domain anlegen (separat von der Synapse-Domain)&lt;br /&gt;
* aktuelles riot-web release .tgz herunterladen&lt;br /&gt;
* Symlink von htdocs-ssl auf entpacktes riot-web-Verzeichnis&lt;br /&gt;
* config.sample.json in config.json kopieren und Matrix-Homeserver-Einträge anpassen&lt;br /&gt;
* Piwik aus config.json entfernen&lt;br /&gt;
&lt;br /&gt;
== SAML mit Synapse ==&lt;br /&gt;
&lt;br /&gt;
Synapse unterstützt mit Version 1.1.0 SAML. Dazu wie folgt vorgehen:&lt;br /&gt;
&lt;br /&gt;
Das Paket xmlsec1 muss installiert sein:&lt;br /&gt;
&lt;br /&gt;
 $ xmlsec1  --version&lt;br /&gt;
 xmlsec1 1.2.23 (openssl)&lt;br /&gt;
&lt;br /&gt;
Das Python-Paket pysaml2 installieren&lt;br /&gt;
&lt;br /&gt;
 source synapse/env/bin/activate&lt;br /&gt;
 pip install pysaml2&lt;br /&gt;
&lt;br /&gt;
In der homeserver.yaml die SAML-Direktiven einkommentieren, hier mit dem Beispiel eines SAML IdP unter https://login.beispiel.de/simplesaml/saml2/idp/metadata.php:&lt;br /&gt;
&lt;br /&gt;
 # Once SAML support is enabled, a metadata file will be exposed at&lt;br /&gt;
 # https://&amp;lt;server&amp;gt;:&amp;lt;port&amp;gt;/_matrix/saml2/metadata.xml, which you may be able to &lt;br /&gt;
 # use to configure your SAML IdP with. Alternatively, you can manually configure&lt;br /&gt;
 # the IdP to use an ACS location of&lt;br /&gt;
 # https://&amp;lt;server&amp;gt;:&amp;lt;port&amp;gt;/_matrix/saml2/authn_response.&lt;br /&gt;
 #&lt;br /&gt;
 saml2_config:&lt;br /&gt;
   sp_config:&lt;br /&gt;
     # point this to the IdP&#039;s metadata. You can use either a local file or&lt;br /&gt;
     # (preferably) a URL.&lt;br /&gt;
     metadata:&lt;br /&gt;
       #local: [&amp;quot;saml2/idp.xml&amp;quot;]&lt;br /&gt;
       remote:&lt;br /&gt;
         - url: https://login.beispiel.de/simplesaml/saml2/idp/metadata.php&lt;br /&gt;
&lt;br /&gt;
Wichtig ist außerdem, dass die public_baseurl in der homeserver.yaml gesetzt ist, damit Synapse weiß, wie es erreichbar ist und dies in seine SP-Metadaten einbauen kann:&lt;br /&gt;
&lt;br /&gt;
 public_baseurl: https://matrix.beispiel.de/&lt;br /&gt;
&lt;br /&gt;
Die Service-Provider-Konfiguration als XML bekommt man von Synapse dann wie schon in der homeserver.yaml als Kommentar beschrieben, unter https://matrix.beispiel.de/_matrix/saml2/metadata.xml&lt;br /&gt;
&lt;br /&gt;
Diese dann in den SAML-IdP-importieren und dann sollte der Single-Sign-On via SAML funktionieren.&lt;br /&gt;
&lt;br /&gt;
== Federation Sender Worker für Synapse ==&lt;br /&gt;
&lt;br /&gt;
Zur Parallelisierung bietet Synapse das Konzept &amp;quot;Worker&amp;quot; an, die spezifische Aufgaben übernehmen, damit der Hauptprozess diese nicht durchführen muss.&lt;br /&gt;
&lt;br /&gt;
Details dazu: https://github.com/matrix-org/synapse/blob/master/docs/workers.md&lt;br /&gt;
&lt;br /&gt;
Ein einfach einzurichtender Worker, der auch viel Last abfedert, ist der Federation Sender Worker, da das Verschicken des Federation-Traffics 10-50% der Serverlast ausmacht.&lt;br /&gt;
&lt;br /&gt;
In der homeserver.yaml die Worker-Konfiguration aktivieren:&lt;br /&gt;
&lt;br /&gt;
 ## Worker ##&lt;br /&gt;
 worker_app: synapse.app.homeserver&lt;br /&gt;
 daemonize: true&lt;br /&gt;
&lt;br /&gt;
und dazugehörige Listener (Abschnitt listener:) aktivieren:&lt;br /&gt;
&lt;br /&gt;
 # The TCP replication port&lt;br /&gt;
 - port: 32892&lt;br /&gt;
   bind_address: &#039;127.0.0.1&#039;&lt;br /&gt;
   type: replication&lt;br /&gt;
 # The HTTP replication port&lt;br /&gt;
 - port: 32893&lt;br /&gt;
   bind_address: &#039;127.0.0.1&#039;&lt;br /&gt;
   type: http&lt;br /&gt;
   resources:&lt;br /&gt;
    - names: [replication]&lt;br /&gt;
&lt;br /&gt;
Funktionen, die Worker machen sollen, in der homeserver.yaml deaktivieren:&lt;br /&gt;
&lt;br /&gt;
 # disable federation sending here, use worker for it&lt;br /&gt;
 send_federation: False&lt;br /&gt;
&lt;br /&gt;
Dann Verzeichnis synapse/workers anlegen, darin federation_sender.yaml:&lt;br /&gt;
&lt;br /&gt;
 worker_app: synapse.app.federation_sender&lt;br /&gt;
 &lt;br /&gt;
 # The replication listener on the synapse to talk to.&lt;br /&gt;
 worker_replication_host: 127.0.0.1&lt;br /&gt;
 worker_replication_port: 32892&lt;br /&gt;
 worker_replication_http_port: 32893&lt;br /&gt;
 &lt;br /&gt;
 worker_daemonize: True&lt;br /&gt;
 worker_pid_file: /home/pacs/xyz00/users/matrix/synapse/federation_sender.pid&lt;br /&gt;
 worker_log_config: /home/pacs/xyz00/users/matrix/synapse/federation_sender.log.config&lt;br /&gt;
&lt;br /&gt;
.monitrc um worker erweitern:&lt;br /&gt;
&lt;br /&gt;
 check process federation_sender with pidfile /home/pacs/xyz00/users/matrix/synapse/federation_sender.pid&lt;br /&gt;
    start program &amp;quot;/bin/bash -c &#039;export VIRTUAL_ENV=$HOME/synapse/env &amp;amp;&amp;amp; export PATH=$VIRTUAL_ENV/bin:$PATH &amp;amp;&amp;amp; cd $HOME/synapse &amp;amp;&amp;amp; synctl -w workers/federation_sender.yaml start&#039;&amp;quot;&lt;br /&gt;
    stop program &amp;quot;/bin/bash -c &#039;/bin/kill $( cat $HOME/synapse/federation_sender.pid )&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Monit neu laden und synapse und federation_sender neustarten:&lt;br /&gt;
&lt;br /&gt;
 monit reload&lt;br /&gt;
 monit restart all&lt;br /&gt;
&lt;br /&gt;
Nach Updates ebenfalls immer Hauptprozess und alle Worker neustarten&lt;br /&gt;
&lt;br /&gt;
 monit restart all&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* https://matrix.org/docs/projects/server/synapse &lt;br /&gt;
* https://github.com/matrix-org/synapse&lt;br /&gt;
* https://github.com/matrix-org/synapse/blob/master/INSTALL.md&lt;br /&gt;
* https://matrix.org/docs/spec/&lt;br /&gt;
* https://www.hostsharing.net/loesungen/matrix/&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Installationsanleitungen]]&lt;/div&gt;</summary>
		<author><name>Hsh-janulrichhasecke</name></author>
	</entry>
</feed>